Built motion from commit (unavailable).|2.0.72 2.0.72
authorAndrea Bianco <andrea.bianco@xcally.com>
Thu, 10 Jan 2019 17:24:17 +0000 (18:24 +0100)
committerAndrea Bianco <andrea.bianco@xcally.com>
Thu, 10 Jan 2019 17:24:17 +0000 (18:24 +0100)
998 files changed:
apidoc/api_project.js
apidoc/api_project.json
package.json
public/app/main/apps/callysquare/i18n/ar.json
public/app/main/apps/callysquare/i18n/da.json
public/app/main/apps/callysquare/i18n/de.json
public/app/main/apps/callysquare/i18n/en.json
public/app/main/apps/callysquare/i18n/es.json
public/app/main/apps/callysquare/i18n/fa.json
public/app/main/apps/callysquare/i18n/fi.json
public/app/main/apps/callysquare/i18n/fr.json
public/app/main/apps/callysquare/i18n/hi.json
public/app/main/apps/callysquare/i18n/id.json
public/app/main/apps/callysquare/i18n/it.json
public/app/main/apps/callysquare/i18n/ja.json
public/app/main/apps/callysquare/i18n/ko.json
public/app/main/apps/callysquare/i18n/lv.json
public/app/main/apps/callysquare/i18n/nl.json
public/app/main/apps/callysquare/i18n/no.json
public/app/main/apps/callysquare/i18n/pl.json
public/app/main/apps/callysquare/i18n/pt-PT.json
public/app/main/apps/callysquare/i18n/ru.json
public/app/main/apps/callysquare/i18n/sv.json
public/app/main/apps/callysquare/i18n/tr.json
public/app/main/apps/callysquare/i18n/zh-CN.json
public/app/main/apps/callysquare/i18n/zh-TW.json
public/index.html
public/scripts/app.b7d152be.js [moved from public/scripts/app.7a61c04b.js with 79% 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/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/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/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/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.0.72.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/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/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/faxAccount.js
server/services/ami/model/freshdeskAccount.js
server/services/ami/model/queueReport.js
server/services/ami/model/salesforceAccount.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/freshdesk.js
server/services/ami/rpc/integrations/salesforce.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/freshdesk.js
server/services/ami/trigger/integration/index.js
server/services/ami/trigger/integration/salesforce.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/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

index 40112bf..aba2c3a 100644 (file)
@@ -1 +1 @@
-define({\r  "name": "motion",\r  "version": "2.0.71",\r  "description": "xCALLY Motion is the new Realtime asynchronous solution for your multichannel contact center over Asterisk.",\r  "sampleUrl": false,\r  "defaultVersion": "0.0.0",\r  "apidoc": "0.3.0",\r  "generator": {\r    "name": "apidoc",\r    "time": "2018-12-20T17:51:08.101Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r});
+define({\r  "name": "xCALLY Motion API",\r  "version": "2.0.72",\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.</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 a xCALLY API token.</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<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-01-10T17:18:17.864Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r});
index a719173..3ef5748 100644 (file)
@@ -1 +1 @@
-{\r  "name": "motion",\r  "version": "2.0.71",\r  "description": "xCALLY Motion is the new Realtime asynchronous solution for your multichannel contact center over Asterisk.",\r  "sampleUrl": false,\r  "defaultVersion": "0.0.0",\r  "apidoc": "0.3.0",\r  "generator": {\r    "name": "apidoc",\r    "time": "2018-12-20T17:51:08.101Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r}
+{\r  "name": "xCALLY Motion API",\r  "version": "2.0.72",\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.</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 a xCALLY API token.</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<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-01-10T17:18:17.864Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r}
index 701a32b..1491320 100644 (file)
@@ -1,6 +1,6 @@
 {
     "name": "motion",
-    "version": "2.0.71",
+    "version": "2.0.72",
     "description": "xCALLY Motion is the new Realtime asynchronous solution for your multichannel contact center over Asterisk.",
     "main": "server/app.js",
     "engines": {
@@ -16,7 +16,8 @@
         "Daniele Cinti <daniele.cinti@xcally.com>",
         "Innocenzo Biondo <innocenzo.biondo@xcally.com>",
         "Massimiliano Bungaro <massimiliano.bungaro@xcally.com>",
-        "Andrea Bianco <andrea.bianco@xcally.com>"
+        "Andrea Bianco <andrea.bianco@xcally.com>",
+        "Fabio Lodato <fabio.lodato@xcally.com>"
     ],
     "private": true,
     "license": "EULA",
index 072680d..352f516 100644 (file)
         "PAGE": "صفحة",
         "ROWSPERPAGE": "صفوف لكل صفحة",
         "SENDFAX": "إرسال فاكس",
-        "TILDEASR": ""
+        "ADDUSER_PROJECTS": "إضافة مستخدمين إلى المشروع",
+        "ALL_USERS": "جميع المستخدمين",
+        "PERMISSIONADD_PROJECTS": "إضافة مستخدمين إلى المشروع",
+        "SELECTED_USERS": "المستخدمين المختارين",
+        "TILDEASR": "تيلدا ASR"
     }
 }
\ No newline at end of file
index bd980dd..348c9d3 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Teksttype",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "Sprog"
+        "DIALOGFLOW_LANGUAGE": "Sprog",
+        "ADDUSER_PROJECTS": "Tilføj brugere til projektet",
+        "ALL_USERS": "Alle brugere",
+        "PERMISSIONADD_PROJECTS": "Tilføj brugere til projektet",
+        "SELECTED_USERS": "Udvalgte brugere"
     }
 }
\ No newline at end of file
index 22bb388..bbe3bc7 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Texttyp",
         "DIALOGFLOW": "Dialogfluss",
-        "DIALOGFLOW_LANGUAGE": "Sprache"
+        "DIALOGFLOW_LANGUAGE": "Sprache",
+        "ADDUSER_PROJECTS": "Fügen Sie dem Projekt Benutzer hinzu",
+        "ALL_USERS": "Alle Nutzer",
+        "PERMISSIONADD_PROJECTS": "Fügen Sie dem Projekt Benutzer hinzu",
+        "SELECTED_USERS": "Ausgewählte Benutzer"
     }
 }
\ No newline at end of file
index f05b2b0..a93e5aa 100644 (file)
@@ -1,5 +1,9 @@
 {
     "CALLYSQUARE": {
+        "ADDUSER_PROJECTS": "Add Users to Project",
+        "PERMISSIONADD_PROJECTS": "Add Users to Project",
+        "ALL_USERS": "All Users",
+        "SELECTED_USERS": "Selected Users",
         "DIALOGFLOW": "Dialogflow",
         "DIALOGFLOW_LANGUAGE": "Language",
         "AWS_TEXT_TYPE": "Text type",
index c6c49b2..359d46d 100644 (file)
         "VSWITCH": "Interruptor variable",
         "AWS_TEXT_TYPE": "Tipo de texto",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "Idioma"
+        "DIALOGFLOW_LANGUAGE": "Idioma",
+        "ADDUSER_PROJECTS": "Añadir usuarios al proyecto",
+        "ALL_USERS": "Todos los usuarios",
+        "PERMISSIONADD_PROJECTS": "Añadir usuarios al proyecto",
+        "SELECTED_USERS": "Usuarios seleccionados"
     }
 }
\ No newline at end of file
index e8e67a5..0d7d806 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "نوع متن",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "زبان"
+        "DIALOGFLOW_LANGUAGE": "زبان",
+        "ADDUSER_PROJECTS": "افزودن کاربران به پروژه",
+        "ALL_USERS": "تمام کاربران",
+        "PERMISSIONADD_PROJECTS": "افزودن کاربران به پروژه",
+        "SELECTED_USERS": "کاربران انتخاب شده"
     }
 }
\ No newline at end of file
index 6c7cca1..4343a40 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Tekstityyppi",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "Kieli"
+        "DIALOGFLOW_LANGUAGE": "Kieli",
+        "ADDUSER_PROJECTS": "Lisää käyttäjät projektiin",
+        "ALL_USERS": "Kaikki käyttäjät",
+        "PERMISSIONADD_PROJECTS": "Lisää käyttäjät projektiin",
+        "SELECTED_USERS": "Valitut käyttäjät"
     }
 }
\ No newline at end of file
index e542b13..8984338 100644 (file)
         "URI": "URL",
         "AWS_TEXT_TYPE": "Type de texte",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "Dialogflow language"
+        "DIALOGFLOW_LANGUAGE": "Dialogflow language",
+        "ADDUSER_PROJECTS": "Ajouter des utilisateurs au projet",
+        "ALL_USERS": "Tous les utilisateurs",
+        "PERMISSIONADD_PROJECTS": "Ajouter des utilisateurs au projet",
+        "SELECTED_USERS": "Utilisateurs sélectionnés"
     }
 }
\ No newline at end of file
index d3dc513..cabe163 100644 (file)
         "URI": "यूआरआई",
         "AWS_TEXT_TYPE": "पाठ्य प्रकार",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "भाषा"
+        "DIALOGFLOW_LANGUAGE": "भाषा",
+        "ADDUSER_PROJECTS": "उपयोगकर्ताओं को प्रोजेक्ट में जोड़ें",
+        "ALL_USERS": "सभी उपयोगकर्ताओं",
+        "PERMISSIONADD_PROJECTS": "उपयोगकर्ताओं को प्रोजेक्ट में जोड़ें",
+        "SELECTED_USERS": "चयनित उपयोगकर्ता"
     }
 }
\ No newline at end of file
index b970ca0..1046605 100644 (file)
         "VARIABLE_ID": "Variabel",
         "VARIABLE_VALUE": "Nilai",
         "VOICEMAIL": "Voicemail",
-        "VSWITCH": "Saklar Variabel"
+        "VSWITCH": "Saklar Variabel",
+        "ADDUSER_PROJECTS": "Tambahkan Pengguna ke Proyek",
+        "ALL_USERS": "Semua pengguna",
+        "PERMISSIONADD_PROJECTS": "Tambahkan Pengguna ke Proyek",
+        "SELECTED_USERS": "Pengguna yang Dipilih"
     }
 }
\ No newline at end of file
index 293b3d8..9b350ef 100644 (file)
@@ -1,5 +1,9 @@
 {
     "CALLYSQUARE": {
+        "ADDUSER_PROJECTS": "Aggiungi Utenti a Progetti",
+        "PERMISSIONADD_PROJECTS": "Aggiungi Utenti a Progetti",
+        "ALL_USERS": "Tutti gli Utenti",
+        "SELECTED_USERS": "Utenti selezionati",
         "FINDBY": "Trova",
         "LOGIN": "Login",
         "PAUSE": "Pausa",
index 3770d11..eb8852a 100644 (file)
         "VSWITCH": "変数スイッチ",
         "AWS_TEXT_TYPE": "テキストタイプ",
         "DIALOGFLOW": "ダイアログフロー",
-        "DIALOGFLOW_LANGUAGE": "言語"
+        "DIALOGFLOW_LANGUAGE": "言語",
+        "ADDUSER_PROJECTS": "プロジェクトにユーザーを追加する",
+        "ALL_USERS": "全てのユーザー",
+        "PERMISSIONADD_PROJECTS": "プロジェクトにユーザーを追加する",
+        "SELECTED_USERS": "選択したユーザー"
     }
 }
\ No newline at end of file
index e8e3ab9..a0a629b 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "텍스트 유형",
         "DIALOGFLOW": "대화 흐름",
-        "DIALOGFLOW_LANGUAGE": "언어"
+        "DIALOGFLOW_LANGUAGE": "언어",
+        "ADDUSER_PROJECTS": "프로젝트에 사용자 추가",
+        "ALL_USERS": "모든 사용자들",
+        "PERMISSIONADD_PROJECTS": "프로젝트에 사용자 추가",
+        "SELECTED_USERS": "선택된 사용자"
     }
 }
\ No newline at end of file
index 616f0b9..11f8388 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Teksta tips",
         "DIALOGFLOW": "Dialoglodziņš",
-        "DIALOGFLOW_LANGUAGE": "Valoda"
+        "DIALOGFLOW_LANGUAGE": "Valoda",
+        "ADDUSER_PROJECTS": "Pievienojiet lietotājus projektam",
+        "ALL_USERS": "Visi lietotāji",
+        "PERMISSIONADD_PROJECTS": "Pievienojiet lietotājus projektam",
+        "SELECTED_USERS": "Atlasītie lietotāji"
     }
 }
\ No newline at end of file
index 516ccd0..c070f8c 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Bericht soort",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "Taal"
+        "DIALOGFLOW_LANGUAGE": "Taal",
+        "ADDUSER_PROJECTS": "Gebruikers toevoegen aan project",
+        "ALL_USERS": "Alle gebruikers",
+        "PERMISSIONADD_PROJECTS": "Gebruikers toevoegen aan project",
+        "SELECTED_USERS": "Geselecteerde gebruikers"
     }
 }
\ No newline at end of file
index e643496..bd0df01 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Teksttype",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "Språk"
+        "DIALOGFLOW_LANGUAGE": "Språk",
+        "ADDUSER_PROJECTS": "Legg til brukere til prosjektet",
+        "ALL_USERS": "Alle brukere",
+        "PERMISSIONADD_PROJECTS": "Legg til brukere til prosjektet",
+        "SELECTED_USERS": "Utvalgte brukere"
     }
 }
\ No newline at end of file
index 9d2ccc4..88eaedb 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Typ tekstu",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "Język"
+        "DIALOGFLOW_LANGUAGE": "Język",
+        "ADDUSER_PROJECTS": "Dodaj użytkowników do projektu",
+        "ALL_USERS": "Wszyscy użytkownicy",
+        "PERMISSIONADD_PROJECTS": "Dodaj użytkowników do projektu",
+        "SELECTED_USERS": "Wybrani użytkownicy"
     }
 }
\ No newline at end of file
index 7bb1fb7..c29abc0 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Tipo de texto",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "Língua"
+        "DIALOGFLOW_LANGUAGE": "Língua",
+        "ADDUSER_PROJECTS": "Adicionar usuários ao projeto",
+        "ALL_USERS": "Todos os usuários",
+        "PERMISSIONADD_PROJECTS": "Adicionar usuários ao projeto",
+        "SELECTED_USERS": "Usuários Selecionados"
     }
 }
\ No newline at end of file
index dc36532..23b7b5a 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Тип текста",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "язык"
+        "DIALOGFLOW_LANGUAGE": "язык",
+        "ADDUSER_PROJECTS": "Добавить пользователей в проект",
+        "ALL_USERS": "Все пользователи",
+        "PERMISSIONADD_PROJECTS": "Добавить пользователей в проект",
+        "SELECTED_USERS": "Выбранные пользователи"
     }
 }
\ No newline at end of file
index 05ef67d..41135c0 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Text typ",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "Språk"
+        "DIALOGFLOW_LANGUAGE": "Språk",
+        "ADDUSER_PROJECTS": "Lägg till användare till projektet",
+        "ALL_USERS": "Alla användare",
+        "PERMISSIONADD_PROJECTS": "Lägg till användare till projektet",
+        "SELECTED_USERS": "Valda användare"
     }
 }
\ No newline at end of file
index feee86f..5c1147e 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "Metin türü",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "Dil"
+        "DIALOGFLOW_LANGUAGE": "Dil",
+        "ADDUSER_PROJECTS": "Projeye Kullanıcı Ekleme",
+        "ALL_USERS": "Tüm kullanıcılar",
+        "PERMISSIONADD_PROJECTS": "Projeye Kullanıcı Ekleme",
+        "SELECTED_USERS": "Seçilmiş Kullanıcılar"
     }
 }
\ No newline at end of file
index c0d0517..0476421 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "文字类型",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "语言"
+        "DIALOGFLOW_LANGUAGE": "语言",
+        "ADDUSER_PROJECTS": "将用户添加到项目",
+        "ALL_USERS": "所有用户",
+        "PERMISSIONADD_PROJECTS": "将用户添加到项目",
+        "SELECTED_USERS": "选定用户"
     }
 }
\ No newline at end of file
index d137180..b6762c2 100644 (file)
         "URI": "URI",
         "AWS_TEXT_TYPE": "文字類型",
         "DIALOGFLOW": "Dialogflow",
-        "DIALOGFLOW_LANGUAGE": "語言"
+        "DIALOGFLOW_LANGUAGE": "語言",
+        "ADDUSER_PROJECTS": "將用戶添加到項目",
+        "ALL_USERS": "所有用戶",
+        "PERMISSIONADD_PROJECTS": "將用戶添加到項目",
+        "SELECTED_USERS": "選定用戶"
     }
 }
\ No newline at end of file
index 67a7f4a..5c5818e 100644 (file)
@@ -58,7 +58,7 @@
 
     <script src="scripts/vendor.60d39f87.js"></script>
 
-    <script src="scripts/app.7a61c04b.js"></script>
+    <script src="scripts/app.b7d152be.js"></script>
 
     <!-- CKEDITOR -->
     <script src="assets/plugins/ckeditor/ckeditor.js"></script>
similarity index 79%
rename from public/scripts/app.7a61c04b.js
rename to public/scripts/app.b7d152be.js
index 1d2b148..1d9a228 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.help","app.motiondialer","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",function(e){return e.resolve("analyticMetric@get",{fields:"createdAt,updatedAt,id,name,table,metric,description",sort:"-updatedAt",limit:10,offset:0})}]},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",function(e){return e.resolve("analyticExtractedReport@get",{fields:"createdAt,updatedAt,id,name,basename,savename,type,startDate,endDate,createdAt,status,output",sort:"-updatedAt",limit:10,offset:0})}]},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})}]},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 o;return e.resolve("analyticCustomReport@get",{fields:"createdAt,updatedAt,id,name,description,table,conditions,joins",id:t.id}).then(function(e){var t=[];if((o=e).joins)try{o.joins=JSON.parse(o.joins);for(var n=0;n<o.joins.length;n+=1)t.push(i.getColumns(o.joins[n].foreignTable))}catch(e){console.log(e)}return a.all(t)}).then(function(e){for(var t=0;t<e.length;t+=1)o.joins[t].foreignTableFields=_.difference(_.keys(e[t]),["$promise","$resolved"]);return o})}]},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",function(e){return e.resolve("squareOdbc@get",{fields:"createdAt,updatedAt,id,name,dsn,description",sort:"-updatedAt",limit:10,offset:0})}]},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",function(e){return e.resolve("squareRecording@get",{fields:"createdAt,updatedAt,id,filename,projectName,uniqueid,callerid,extension,audio,createdAt",sort:"-updatedAt",limit:10,offset:0})}]},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("user@getSquareProjects",{id:t.getCurrentUser().id,fields:"id,name,description,notes",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1103,bodyClass:"callysquare"}).state("app.callysquare.projects.edit",{url:"/:id?tab",views:{"content@app":{templateUrl:"app/main/apps/callysquare/views/projects/edit/view.html",controller:"ProjectController as vm"}},resolve:{project:["apiResolver","$stateParams",function(e,t){return e.resolve("squareProject@get",{id:t.id})}],users:["apiResolver",function(e){return e.resolve("user@get",{fields:"id,fullname,role",sort:"name",nolimit:!0})}],trunks:["apiResolver",function(e){return e.resolve("trunk@get",{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("user@getQueues",{id:t.getCurrentUser().id,type:"inbound",fields:"id,name",sort:"name",nolimit:!0,channel:"voice"})}],sounds:["apiResolver",function(e){return e.resolve("sound@get",{fields:"id,name",sort:"name",nolimit:!0})}],variables:["apiResolver",function(e){return e.resolve("variable@get",{fields:"id,name",sort:"name",nolimit:!0})}],databases:["apiResolver",function(e){return e.resolve("squareOdbc@get",{fields:"id,name",sort:"name",nolimit:!0})}],projects:["apiResolver",function(e){return e.resolve("squareProject@get",{fields:"id,name",sort:"name",nolimit:!0})}],contexts:["apiResolver",function(e){return e.resolve("voiceContext@get",{fields:"id,name",sort:"name",nolimit:!0})}],intervals:["apiResolver",function(e){return e.resolve("interval@get",{fields:"id,name,IntervalId",sort:"name",nolimit:!0})}],mailAccounts:["apiResolver",function(e){return e.resolve("mailAccount@get",{fields:"id,name",sort:"name",nolimit:!0})}],templates:["apiResolver",function(e){return e.resolve("template@get",{fields:"id,name",sort:"name",nolimit:!0})}],lists:["apiResolver",function(e){return e.resolve("cmList@get",{fields:"id,name",sort:"name",nolimit:!0})}],smsAccounts:["apiResolver",function(e){return e.resolve("smsAccount@get",{fields:"id,name",sort:"name",nolimit:!0})}],pauses:["apiResolver",function(e){return e.resolve("pause@get",{fields:"id,name",sort:"name",nolimit:!0})}]},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("user@getQueues",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"chat",limit:10,offset:0})}]},authenticate:!0,permissionId:501,bodyClass:"chat"}).state("app.chat.chatQueues.edit",{url:"/:id?tab",params:{chatQueue: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})}]},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,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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getChatWebsites",{id:t.getCurrentUser().id,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,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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:502,bodyClass:"chat"}).state("app.chat.chatWebsites.edit",{url:"/:id?tab",params:{chatWebsite: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,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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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:{chatAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("chatAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getChatAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("chatQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,channel:"chat",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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",function(e){return e.resolve("cmList@get",{fields:"createdAt,updatedAt,id,name,description,dialPrefix",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:301,bodyClass:"contactmanager"}).state("app.contactmanager.lists.edit",{url:"/:id?tab",params:{list: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})}]},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",function(e){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",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:302,bodyClass:"contactmanager"}).state("app.contactmanager.companies.edit",{url:"/:id?tab",params:{company: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})}]},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",function(e){return e.resolve("cmCustomField@get",{fields:"createdAt,updatedAt,id,alias,type,values,required",sort:"-updatedAt",ListId:"null",limit:10,offset:0})}]},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","$stateParams",function(e,t){return e.resolve("cmContact@get",_.merge({includeAll:!0,sort:"-updatedAt",limit:10,offset:0},t))}],lists:["apiResolver",function(e){return e.resolve("cmList@get",{fields:"id,name",sort:"name",nolimit:!0})}],listsMap:["lists",function(e){for(var t={},n=0;n<e.rows.length;n++)t[e.rows[n].id]=e.rows[n].name;return t}],companies:["apiResolver",function(e){return e.resolve("cmCompany@get",{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",function(e){return e.resolve("tag@get",{fields:"id,name",sort:"name",nolimit:!0})}]},authenticate:!0,permissionId:300,bodyClass:"contactmanager"}).state("app.contactmanager.contacts.edit",{url:"/:id?tab",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","$stateParams",function(e,t){return e.resolve("cmCompany@get")}],lists:["apiResolver",function(e){return e.resolve("cmList@get",{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","$stateParams",function(e,t){return e.resolve("tag@get")}]},authenticate:!0,permissionId:300,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("user@getQueues",{id:e.getCurrentUser().id,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"]));return a})}]},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("user@getQueues",{id:t.getCurrentUser().id,fields:"id,name",channel:"voice",type:"inbound",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("user@getQueues",{id:t.getCurrentUser().id,fields:"id,name",channel:"voice",type:"outbound",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("user@getChatWebsites",{id:t.getCurrentUser().id,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("user@getMailAccounts",{id:t.getCurrentUser().id,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("user@getSmsAccounts",{id:t.getCurrentUser().id,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("user@getOpenchannelAccounts",{id:t.getCurrentUser().id,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("user@getFaxAccounts",{id:t.getCurrentUser().id,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("user@getQueues",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"fax",limit:10,offset:0})}]},authenticate:!0,permissionId:901,bodyClass:"fax"}).state("app.fax.faxQueues.edit",{url:"/:id?tab",params:{faxQueue: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})}]},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,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getFaxAccounts",{id:t.getCurrentUser().id,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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:902,bodyClass:"fax"}).state("app.fax.faxAccounts.edit",{url:"/:id?tab",params:{faxAccount: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,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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",function(e){return e.resolve("trunk@get",{fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0})}],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:{faxAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getFaxAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,channel:"fax",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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("user@getFaxAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],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:1405,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",function(e){return e.resolve("intZendeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1301,bodyClass:"integrations"}).state("app.integrations.zendeskAccounts.edit",{url:"/:id?tab",params:{zendeskAccount: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})}]},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",function(e){return e.resolve("intSalesforceAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1302,bodyClass:"integrations"}).state("app.integrations.salesforceAccounts.edit",{url:"/:id?tab",params:{salesforceAccount: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})}]},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",function(e){return e.resolve("intFreshdeskAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1303,bodyClass:"integrations"}).state("app.integrations.freshdeskAccounts.edit",{url:"/:id?tab",params:{freshdeskAccount: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})}]},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",function(e){return e.resolve("intSugarcrmAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1305,bodyClass:"integrations"}).state("app.integrations.sugarcrmAccounts.edit",{url:"/:id?tab",params:{sugarcrmAccount: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})}]},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",function(e){return e.resolve("intDeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1306,bodyClass:"integrations"}).state("app.integrations.deskAccounts.edit",{url:"/:id?tab",params:{deskAccount: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})}]},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",function(e){return e.resolve("intZohoAccount@get",{fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1307,bodyClass:"integrations"}).state("app.integrations.zohoAccounts.edit",{url:"/:id?tab",params:{zohoAccount: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})}]},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",function(e){return e.resolve("intVtigerAccount@get",{fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",limit:10,offset:0})}]},authenticate:!0,permissionId:1308,bodyClass:"integrations"}).state("app.integrations.vtigerAccounts.edit",{url:"/:id?tab",params:{vtigerAccount: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})}]},authenticate:!0,permissionId:1308,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",function(e){return e.resolve("jscriptyProject@get",{fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,createdAt,formData",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1701,bodyClass:"jscripty"}).state("app.jscripty.projects.edit",{url:"/:id?tab",params:{project: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,createdAt,formData",id:t.id})}]},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("user@getQueues",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"mail",limit:10,offset:0})}]},authenticate:!0,permissionId:601,bodyClass:"mail"}).state("app.mail.mailQueues.edit",{url:"/:id?tab",params:{mailQueue: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})}]},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,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getMailAccounts",{id:t.getCurrentUser().id,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,permissionId:602,bodyClass:"mail"}).state("app.mail.mailAccounts.edit",{url:"/:id?tab",params:{mailAccount: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,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}]},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",function(e){return e.resolve("mailSubstatus@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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:{mailAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getMailAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,channel:"mail",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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("user@getMailAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],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",function(e){return 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})}]},authenticate:!0,permissionId:1801,bodyClass:"marketplace"}).state("app.marketplace.plugins.edit",{url:"/:id?tab",params:{plugin: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})}]},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,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,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,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0})}]},authenticate:!0,permissionId:1501,bodyClass:"motiondialer"}).state("app.motiondialer.queueCampaigns.edit",{url:"/:id?tab",params:{queueCampaign: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,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description",id:t.id})}]},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",function(e){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",type:"ivr",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1502,bodyClass:"motiondialer"}).state("app.motiondialer.ivrCampaigns.edit",{url:"/:id?tab",params:{ivrCampaign: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})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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:{motiondialerAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("motiondialerAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getMotionDialerAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"outbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,channel:"voice",type:"outbound",sort:"-updatedAt",limit:10,page:1})}],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",function(e){return e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0})}],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",function(e){return e.resolve("user@get",{fields:"id,name,role",role:"agent",nolimit:!0})}]},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("user@getQueues",{id:t.getCurrentUser().id,channel:"voice",type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1})}],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",function(e){return e.resolve("campaign@get",{sort:"-updatedAt",limit:10,offset:0})}],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("user@getQueues",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"openchannel",limit:10,offset:0})}]},authenticate:!0,permissionId:801,bodyClass:"openchannel"}).state("app.openchannel.openchannelQueues.edit",{url:"/:id?tab",params:{openchannelQueue: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})}]},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,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getOpenchannelAccounts",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:802,bodyClass:"openchannel"}).state("app.openchannel.openchannelAccounts.edit",{url:"/:id?tab",params:{openchannelAccount: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,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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:{openchannelAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("openchannelAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getOpenchannelAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("openchannelQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,channel:"openchannel",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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",limit:10,offset:0})}]},authenticate:!0,permissionId:1401,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:1402,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,value,createdAt",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1403,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",limit:10,offset:0})}]},authenticate:!0,permissionId:1407,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:1405,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:1406,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})}]},authenticate:!0,permissionId:1404,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("user@getQueues",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"sms",limit:10,offset:0})}]},authenticate:!0,permissionId:701,bodyClass:"sms"}).state("app.sms.smsQueues.edit",{url:"/:id?tab",params:{smsQueue: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})}]},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,phone,type,accountSid,authId,authToken,smsMethod,username,password,senderString,deliveryReport,waitForTheAssignedAgent,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getSmsAccounts",{id:t.getCurrentUser().id,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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:702,bodyClass:"sms"}).state("app.sms.smsAccounts.edit",{url:"/:id?tab",params:{smsAccount: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,phone,type,accountSid,authId,authToken,smsMethod,username,password,senderString,deliveryReport,waitForTheAssignedAgent,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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:{smsAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getSmsAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,channel:"sms",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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",function(e){return e.resolve("user@get",{fields:"createdAt,updatedAt,role,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,permissions,crudPermissions,passwordResetAt,passwordResetAt",role:"admin,user",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:201,bodyClass:"staff"}).state("app.staff.users.edit",{url:"/:id?tab",params:{user: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,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,permissions,crudPermissions,passwordResetAt,passwordResetAt",id:t.id})}]},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,email,phone,mobile,userpic,password,showWebBar,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,voicemail,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,passwordResetAt,phoneBarEnableVideoRecording",role:"agent",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getAgents",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,role,fullname,name,alias,email,phone,mobile,userpic,password,showWebBar,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,voicemail,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,passwordResetAt,phoneBarEnableVideoRecording",role:"agent",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:202,bodyClass:"staff"}).state("app.staff.agents.edit",{url:"/:id?tab",params:{agent: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,email,phone,mobile,userpic,password,showWebBar,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,voicemail,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,passwordResetAt,phoneBarEnableVideoRecording",id:t.id})}]},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",function(e){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,encryption,phone,mobile",role:"telephone",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:203,bodyClass:"staff"}).state("app.staff.telephones.edit",{url:"/:id?tab",params:{telephone: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,encryption,phone,mobile",id:t.id})}]},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",function(e){return e.resolve("team@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:204,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",function(e){return 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})}]},authenticate:!0,permissionId:1002,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",function(e){return 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})}]},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",function(e){return e.resolve("dashboard@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1003,bodyClass:"tools"}).state("app.tools.customDashboards.edit",{url:"/:id?tab",params:{customDashboard: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})}]},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",function(e){return e.resolve("interval@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",IntervalId:"null",limit:10,offset:0})}]},authenticate:!0,permissionId:1004,bodyClass:"tools"}).state("app.tools.intervals.edit",{url:"/:id?tab",params:{interval: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})}]},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",function(e){return e.resolve("pause@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}]},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",function(e){return e.resolve("schedule@get",{fields:"createdAt,updatedAt,id,name,type,DefaultReportId,CustomReportId,output,active,startAt,endAt,cron,subtractNumber,subtractUnit,sendMail,MailAccountId,email,cc,bcc,sendIfEmpty,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:42,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",function(e){return e.resolve("sound@get",{fields:"createdAt,updatedAt,id,save_name,converted_format,name,audio,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1006,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",function(e){return e.resolve("tag@get",{fields:"createdAt,updatedAt,id,name,description,color",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1007,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",function(e){return e.resolve("template@get",{fields:"createdAt,updatedAt,id,name,html,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1008,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",function(e){return e.resolve("trigger@get",{fields:"createdAt,updatedAt,id,name,channel,status,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1009,bodyClass:"tools"}).state("app.tools.triggers.edit",{url:"/:id?tab",params:{trigger: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})}]},authenticate:!0,permissionId:1009,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",function(e){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,otherFields",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1010,bodyClass:"tools"}).state("app.tools.trunks.edit",{url:"/:id?tab",params:{trunk: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,otherFields",id:t.id})}]},authenticate:!0,permissionId:1010,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",function(e){return e.resolve("variable@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1011,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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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",function(e){return e.resolve("user@get",{fields:"id,fullname,userpic,internal",role:"telephone",sort:"-updatedAt",limit:10,offset:0})}],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",function(e){return e.resolve("trunk@get",{fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0})}],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:{voiceAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getVoiceAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,channel:"voice",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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",function(e){return e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0})}],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",function(e){return e.resolve("user@get",{fields:"id,name,role",role:"agent",nolimit:!0})}]},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("user@getQueues",{id:t.getCurrentUser().id,channel:"voice",type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1})}],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",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,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",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0})}]},authenticate:!0,permissionId:401,bodyClass:"voice"}).state("app.voice.voiceQueues.edit",{url:"/:id?tab",params:{voiceQueue: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",id:t.id})}]},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",function(e){return e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"inbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0})}]},authenticate:!0,permissionId:402,bodyClass:"voice"}).state("app.voice.inboundroutes.edit",{url:"/:id?tab",params:{inboundroute: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})}]},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",function(e){return 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})}]},authenticate:!0,permissionId:403,bodyClass:"voice"}).state("app.voice.outboundroutes.edit",{url:"/:id?tab",params:{outboundroute: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})}]},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",function(e){return e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"internal",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0})}]},authenticate:!0,permissionId:404,bodyClass:"voice"}).state("app.voice.internalroutes.edit",{url:"/:id?tab",params:{internalroute: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})}]},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",function(e){return e.resolve("voiceContext@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",defaultEntry:"false",limit:10,offset:0})}]},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",function(e){return 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})}]},authenticate:!0,permissionId:406,bodyClass:"voice"}).state("app.voice.voicemails.edit",{url:"/:id?tab",params:{voicemail: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})}]},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",function(e){return e.resolve("voiceMusicOnHold@get",{fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",defaultEntry:"false",limit:10,offset:0})}]},authenticate:!0,permissionId:407,bodyClass:"voice"}).state("app.voice.musiconholds.edit",{url:"/:id?tab",params:{musiconhold: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})}]},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",function(e){return e.resolve("voiceRecording@get",{fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,membername,rating,audio,createdAt,userDisposition",sort:"-updatedAt",limit:10,offset:0})}]},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",function(e){return e.resolve("voiceChanSpy@get",{fields:"createdAt,updatedAt,id,name,prefix,options,auth,password,record,recordingFormat,description",sort:"-updatedAt",limit:10,offset:0})}]},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",function(e){return e.resolve("voicePrefix@get",{fields:"createdAt,updatedAt,id,name,VoiceExtensionId,callerIdAll,description",limit:10,offset:0})}]},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.hasPermission(t.permissionId)&&!a.hasRole("admin")?(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(e,a,i,o,t){var s,r=["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"];function l(){var t=i.defer();return d("agent")&&0!==s.showWebBar?o.user.login({id:s.id,device:"web"}).$promise.then(function(){console.log("AGENT LOGGED IN"),t.resolve()}).catch(function(e){console.error(e),t.reject(e)}):d("admin")||d("user")?o.user.update({id:s.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(a.remove("motion.user"),a.remove("motion.token"),s&&s.id){var e=s.id;s=null,t.localStorage.removeItem("motion.user:"+e)}}function d(e){return!!s&&s.role===e}function c(){return a.get("motion.token")}function m(e){return s=_.assign(s,_.pick(e,r)),a.put("motion.user",JSON.stringify(s)),s}return function(){if(a.get("motion.user"))s=JSON.parse(a.get("motion.user")),o.user.get({id:s.id,fields:r.join(",")}).$promise.then(function(e){if(e)return m(e)}).catch(function(e){console.log("Error retrieving user",e)})}(),{login:function(e){var t,n=i.defer();return o.auth.local(e).$promise.then(function(e){return t=e,a.put("motion.token",e.token),o.user.get({id:e.id,fields:r.join(",")}).$promise}).then(function(e){return(s=e).lastLoginAt=moment(),a.put("motion.user",JSON.stringify(e)),l()}).catch(function(e){n.reject(e.data)}).finally(function(){o.user.get({id:t.id,fields:r.join(",")}).$promise.then(function(e){s=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 i.defer(),e?(n(),i.resolve()):(t=i.defer(),d("agent")&&0!==s.showWebBar?o.user.logout({id:s.id,device:"web"}).$promise.then(function(){console.log("AGENT LOGGED OUT")}).catch(function(e){console.error(e)}).finally(function(){t.resolve()}):d("admin")||d("user")?o.user.update({id:s.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:l,isLoggedIn:function(){return!(!s||!c())},hasRole:d,hasPermission:function(e){return!!s&&_.includes(s.permissions,e)},getToken:c,getCurrentUser:function(){return s},updateCurrentUser:m,removeCookies:n}}e.$inject=["$location","$cookies","$q","api","$window"],angular.module("app.auth").factory("Auth",e)}(),function(){"use strict";function e(e,t,n,a,i){var o;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"),(o||(o=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(s,l,d){return{restrict:"E",compile:function(e,t){var o;return t.code||(o=e.html(),e.empty()),function(n,a,r){r.code&&(o=n.$eval(r.code));var i=n.$eval(r.shouldInterpolate);l.when(o).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),s(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],o=new RegExp("^"+i);a=a.map(function(e){return e.replace(o,"").replace(/\s+$/,"")});var s=hljs.highlight(r.language||r.lang,a.join("\n"),!0);s.value=s.value.replace(/=<span class="hljs-value">""<\/span>/gi,"").replace("<head>","").replace("<head/>",""),n.append(s.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","Auth","toasty",function(t,n,a,i,e,o){function s(e){return _.isNil(e)?"":e.replace(/[^\w.+#*\-]+/g,"")}function r(e){return a.get(e).success(function(){o.success({title:"Successful call",msg:"Call properly handled!"})}).error(function(e){o.error({title:"PhoneBar API Error",msg:i.instant("CONTACTMANAGER.ERRORS.PHONEBAR_API")})})}t.currentUser=e.getCurrentUser(),t.showMenu=function(){return t.target&&t.target.indexOf("@")<0&&t.target!=t.currentUser.internal&&t.target!=t.currentUser.name&&(0==t.currentUser.showWebBar&&t.currentUser.phoneBarRemoteControl||2==t.currentUser.showWebBar&&t.license.webrtc)&&!t.disabled},t.call=function(e){switch(t.currentUser.showWebBar){case 0:return r("http://127.0.0.1:"+(t.currentUser.phoneBarRemoteControlPort||"9888")+"/api/originate/"+s(e));case 2:n.$broadcast("webrtc::call",{target:s(e)})}},t.transfer=function(e){switch(t.currentUser.showWebBar){case 0:return r("http://127.0.0.1:"+(t.currentUser.phoneBarRemoteControlPort||"9888")+"/api/transfer?number="+s(e));case 2:n.$broadcast("webrtc::transfer",{target:s(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(s){s.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 o=0;o<e.length;o+=1)t.push(e[o]);e.length=0,i=t}s.options.transferCallback&&s.options.transferCallback(i,a)},s.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:{keyup: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],o=a[1];o.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,o,s=d.items[t];(s=angular.element(s)).scope()&&s.scope().$broadcast("msMasonryItem:startReLayout"),s.css({width:d.columnWidth}),d.options.respectItemOrder?(i=t%d.columnCount,o=e[i]):(o=Math.min.apply(Math,e),i=e.indexOf(o)),e[i]=o+s[0].getBoundingClientRect().height,n=Math.round(i*d.columnWidth),a=o,s.css({transform:"translate3d("+n+"px,"+a+"px,0px)"}),s.addClass("placed"),s.scope()&&s.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(s){return{restrict:"AEC",controller:"msMasonryController",compile:function(i,o){return{pre:function(e,t,n,a){a.options=angular.fromJson(o.options||"{}"),a.container=i},post:function(e,t,n,a){s(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 o=this;function s(e,t){o.selectedPalette=e,o.selectedHues=t}function r(){s(!(o.selectedColor={palette:"",hue:"",class:""}),!1),d()}function l(e,t){o.selectedColor={palette:e,hue:t,class:"md-"+e+"-"+t+"-bg",bgColorValue:i.rgba(o.palettes[e][t].value),fgColorValue:i.rgba(o.palettes[e][t].contrast)},"obj"!==o.msModelType||angular.equals(o.selectedColor,o.modelCtrl.$viewValue)||d(),s(e,o.palettes[e]),n.$selectedColor=o.selectedColor}function d(){"class"===o.msModelType?o.modelCtrl.$setViewValue(o.selectedColor.class):"obj"===o.msModelType&&o.modelCtrl.$setViewValue(o.selectedColor)}o.palettes=e,o.selectedPalette=!1,o.selectedHues=!1,n.$selectedColor={},o.activateHueSelection=s,o.selectColor=function(e,t){l(e,t),d(),a.hide()},o.removeColor=r,n.$watch("ngModel",function(){if(!o.modelCtrl.$viewValue||""===o.modelCtrl.$viewValue)return void r();var e,t;if("class"===o.msModelType){var n=o.modelCtrl.$viewValue.split("-");t=5<=n.length?(e=n[1]+"-"+n[2],n[3]):(e=n[1],n[2])}else"obj"===o.msModelType&&(e=o.modelCtrl.$viewValue.palette,t=o.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 o=a[0];o.modelCtrl=a[1],o.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,o=angular.element(p[0].body),s=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(){o.addClass("ms-nav-folded"),g.$broadcast("msNav::forceCollapse"),t.scrollTop(0),l.append(s),s.on("mouseenter touchstart",function(e){c(e),i=!0})}function c(e){angular.isDefined(e)&&e.preventDefault(),o.addClass("ms-nav-folded-open"),g.$broadcast("msNav::expandMatchingToggles"),l.find(s).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),o.removeClass("ms-nav-folded-open"),l.parent().find(r).remove(),l.append(s),s.on("mouseenter touchstart",function(e){c(e),i=!0})}function u(){o.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(){s.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 o={expanded:"expanded",expandAnimation:"expand-animation",collapseAnimation:"collapse-animation"},t=i.find("a"),s=[],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"},o.expandAnimation).then(function(){t.addClass(o.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"},o.collapseAnimation).then(function(){t.removeClass(o.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,""),s.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(s,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>'),o=u("navigation");function s(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 o.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)||s(e)}),e.toggleFolded=function(){s(!p.getFolded())},e.$on("$stateChangeStart",function(){o.close()}),e.$on("$destroy",function(){i.off("mouseenter touchstart"),a.off("mouseenter touchstart")})}}}}function n(n,e,a,i,t,o){var s=this;s.element=e,s.node=n.node,s.hasChildren=void 0,s.collapsed=void 0,s.collapsable=void 0,s.group=void 0,s.animateHeightClass="animate-height",s.toggleCollapsed=function(){s.collapsed?s.expand():s.collapse()},s.collapse=function(){var e=s.element.children("ul"),t=e[0].offsetHeight;n.$evalAsync(function(){s.collapsed=!0,s.element.addClass("collapsing"),i.animate(e,{display:"block",height:t+"px"},{height:"0px"},s.animateHeightClass).then(function(){e.css({display:"",height:""}),s.element.removeClass("collapsing")}),n.$broadcast("msNavigation::collapse")})},s.expand=function(){var e=s.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(){s.collapsed=!1,s.element.addClass("expanding"),i.animate(e,{display:"block",height:"0px"},{height:t+"px"},s.animateHeightClass).then(function(){e.css({height:""}),s.element.removeClass("expanding")}),a.$broadcast("msNavigation::collapse",s.node._path)})},s.getClass=function(){return s.node.class},s.isHidden=function(){if(angular.isDefined(s.node.hidden)&&angular.isFunction(s.node.hidden))return s.node.hidden();return!1},function(){s.hasChildren=0<s.node.children.length,s.group=!(!angular.isDefined(s.node.group)||!0!==s.node.group),!s.hasChildren||s.group?s.collapsable=!1:s.collapsable=!(!angular.isUndefined(s.node.collapsable)&&"boolean"==typeof s.node.collapsable&&!0!==s.node.collapsable);s.collapsable?s.collapsed=!(!angular.isUndefined(s.node.collapsed)&&"boolean"==typeof s.node.collapsed&&!0!==s.node.collapsed):s.collapsed=!1;if(s.node.state===t.current.name||t.includes(s.node.state)){if(angular.isDefined(s.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(s.node.stateParams,t.params))return;n.$emit("msNavigation::stateMatched"),o.setActiveItem(s.node,n)}n.$on("msNavigation::stateMatched",function(){s.collapsable&&s.collapsed&&n.$evalAsync(function(){s.collapsed=!1})}),n.$on("msNavigation::collapse",function(e,t){if(!s.collapsed&&s.collapsable)if(angular.isUndefined(t))s.collapse();else{var n=t.split("."),a=[],i=o.getActiveItem();if(i&&(a=i.node._path.split(".")),-1<n.indexOf(s.node._id))return;if(-1<a.indexOf(s.node._id))return;s.collapse()}}),n.$on("$stateChangeSuccess",function(){if(s.node.state===t.current.name){if(angular.isDefined(s.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(s.node.stateParams,t.params))return;o.setActiveItem(s.node,n),a.$broadcast("msNavigation::collapse",s.node._path)}if(t.includes(s.node.state)){if(angular.isDefined(s.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(s.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 o=this;o.element=e,o.node=n.node,o.hasChildren=void 0,o.group=void 0,o.getClass=function(){return o.node.class},function(){if(o.isActive=!1,o.hasChildren=0<o.node.children.length,o.group=!(!angular.isDefined(o.node.group)||!0!==o.node.group),o.node.state===a.current.name||a.includes(o.node.state)){if(angular.isDefined(o.node.stateParams)&&angular.isDefined(a.params)&&!angular.equals(o.node.stateParams,a.params))return;n.$emit("msNavigation::stateMatched"),i.setActiveItem(o.node,n)}n.$on("msNavigation::stateMatched",function(){o.hasChildren&&n.$evalAsync(function(){o.isActive=!0})}),n.$on("msNavigation::clearActive",function(){if(o.hasChildren){var e=[],t=i.getActiveItem();t&&(e=t.node._path.split(".")),-1<e.indexOf(o.node._id)?n.$evalAsync(function(){o.isActive=!0}):n.$evalAsync(function(){o.isActive=!1})}}),n.$on("$stateChangeSuccess",function(){if(o.node.state===a.current.name||a.includes(o.node.state)){if(angular.isDefined(o.node.stateParams)&&angular.isDefined(a.params)&&!angular.equals(o.node.stateParams,a.params))return;i.setActiveItem(o.node,n),t.$broadcast("msNavigation::clearActive")}})}()}function o(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"],o.$inject=["$mdMedia"],angular.module("app.core").provider("msNavigationService",function(){var r=angular.injector(["ng"]).get("$log"),l=[];function s(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,o=0;o<t.length;o++)if(t[o]._id===a){t=t[o].children,i=!1;break}if(i){var s={_id:a,_path:e.join("."),title:a,weight:1,children:[]};t.push(s),t=s.children}}return t}(n),o=!1,s=0;s<i.length;s++)if(i[s]._id===a){o=i[s];break}o?(angular.extend(o,t),o.uisref=m(o)):(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],o=0;o<t.length;o++)if(t[o]._id===i){if(t[o]._path===e)return t.splice(o,1),!0;t=t[o].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=s,this.deleteItem=d,this.sortByWeight=c,this.$get=function(){var n=null,t=null,a=null,i=null,e={saveItem:s,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:o,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}(o(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 o(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",o)}(),function(){"use strict";function e(i,t,o,e,n,s,a,r,l,d,c){var m=this,u=["ringingId","speakerId","microphoneId","ringingVolume","speakerVolume","microphoneVolume","ringingMute","speakerMute","microphoneMute"],p=JSON.parse(a.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(b).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(b).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();b();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 b(){p.webrtc=_.pick(m.conf,u),a.localStorage.setItem("motion2.user:"+m.conf.id,JSON.stringify(p))}function f(e){this.remotePlayer.srcObject=e.stream}function A(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&&o(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=f.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=f.bind(this),_.head(n.connection.getRemoteStreams())&&(this.remotePlayer.srcObject=_.head(n.connection.getRemoteStreams()))),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)})),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){_.remove(this.sessions,{id:e.id})}.bind(this,a)),a.on("failed",function(e,t){this.soundPlayer.pause(),this.soundPlayer.loop=null,e.notification&&e.notification.close(),_.remove(this.sessions,{id:e.id})}.bind(this,a)),this.sessions.push(a)}function E(){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(){s.show(s.simple().textContent(t).position(n).hideDelay(a)),e.terminate()}}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.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),t.bind("keyup",function(e){switch(e.keyCode){case 27:o(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",A.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,"");e=(e=e.replace(/\(/g,"")).replace(/\)/g,""),m.ua.call(e,m.sessionConf)}E()},m.hold=function(e){e.hold({useUpdate:!1})},m.refer=function(t){var e=n.prompt().title("Transfer").textContent("Type the target").placeholder("Target").ariaLabel("Target").ok("Transfer").cancel("Cancel");n.show(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){n.show({controller:"RecordDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/record/dialog.html",parent:angular.element(t.body),clickOutsideToClose:!0,locals:{session:e,sessions:m.sessions}})},m.unhold=function(e){e.unhold({useUpdate:!1})},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){n.show({controller:"ReferAttendedDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/referAttended/dialog.html",parent:angular.element(t.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):E():E()},m.targetSelected=function(e){e&&(m.target=e.originalObject.target,m.call(),E())},i.$on("webrtc::settings",function(e){n.show({controller:"SettingsController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/settings/settings.html",parent:angular.element(t.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){m.sessions[n].refer(t.target,{eventHandlers:{requestSucceeded:y(m.sessions[n],"requestSucceeded","top right",3e3),requestFailed:y(m.sessions[n],"requestFailed","top right",3e3)}});break}})}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(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,o,e,n){var s=this;function a(t,e){console.log("startMonitor");var n=i.defer(),a=(e||t.filename.replace(/^.*[\\\/]/,"")).split(".")[0];return o.rpc.startMonitor({uniqueid:s.session.uniqueid,filename:a,format:"wav"}).$promise.then(function(e){t.filename=a+".wav",t.mixmonitorid=e.mixmonitorid,t.status="rec",s.session.monitor=!0,n.resolve(t)}).catch(function(e){n.reject(e)}),n.promise}s.title="Record",s.sessions=e,s.session=n,s.closeDialog=function(){t.hide()},s.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){s.session.monitors.push(e)})},s.stop=function(t){return console.log("stopMonitor"),o.rpc.stopMonitor({uniqueid:s.session.uniqueid,mixmonitorid:t.mixmonitorid}).$promise.then(function(e){t.status="pause",s.session.monitor=_.includes(s.session.monitors,{status:"rec"})}).catch(function(e){console.error(e)})},s.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 o=this;function s(e){t.hide(e)}o.title="Refer Attended",o.sessions=i,o.session=e,o.sessionTarget=null,o.closeDialog=s,o.transfer=function(){var e,t,n=_.find(i,function(e){if(e.user===o.target)return e});t=n.outgoing?(e=n,o.session):(e=o.session,n);t.refer(e.user,{replaces:e,eventHandlers:{requestSucceeded:function(e){a.show(a.simple().textContent("requestSucceeded").position("top right").hideDelay(3e3)),s(),t.terminate()},requestFailed:function(e){a.show(a.simple().textContent("requestFailed").position("top right").hideDelay(3e3)),s(),t.terminate()}}})}}e.$inject=["$mdDialog","$mdToast","sessions","session"],angular.module("app.core").controller("ReferAttendedDialogController",e)}(),function(){"use strict";function e(e,o,t){var n=this;function a(e,t,n){var a;if(o[n]){if(a=_.find(e,function(e){return e.deviceId===o[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}))&&(o[n]=a.deviceId);return o[n]||null}o.ringingId=a(t,"audiooutput","ringingId"),o.speakerId=a(t,"audiooutput","speakerId"),o.microphoneId=a(t,"audioinput","microphoneId"),o.ringingVolume=o.ringingVolume||.5,o.speakerVolume=o.speakerVolume||.5,o.microphoneVolume=o.microphoneVolume||1,o.ringingMute=o.ringingMute||!1,o.speakerMute=o.speakerMute||!1,o.microphoneMute=o.microphoneMute||!1,n.conf=angular.copy(o),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(o,s,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({},s.getConfig(),a),o(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(o,i,e){var s=this;s.collapsed=!0,s.query="",s.queryOptions={debounce:s.debounce||0};var t=!(!s.collapseOnBlur||"true"!=s.collapseOnBlur);s.resultsLoading=!1,s.results=null,s.selectedResultIndex=0,s.ignoreMouseEvents=!1,s.populateResults=function(e){if(s.collapsed)return;var t=angular.isArray(e),n=null===e;if(!t&&!n)return;s.selectedResultIndex=0,s.results=e},s.expand=function(){s.collapsed=!1,o.expand(),s.onExpand&&angular.isFunction(s.onExpand)&&s.onExpand()},s.collapse=function(){s.query="",s.populateResults(null),s.collapsed=!0,o.collapse(),s.onCollapse&&angular.isFunction(s.onCollapse)&&s.onCollapse()},s.blurCollapse=function(){if(!t)return;s.collapse()},s.absorbEvent=function(e){e.preventDefault()},s.handleKeydown=function(e){var t=e.keyCode;-1<[27,38,40].indexOf(t)&&e.preventDefault();switch(t){case 13:if(!s.results)return;s.handleResultClick(s.results[s.selectedResultIndex]);break;case 27:s.collapse();break;case 38:0<=s.selectedResultIndex-1&&(s.selectedResultIndex--,s.ensureSelectedResultIsVisible());break;case 40:if(!s.results)return;s.selectedResultIndex+1<s.results.length&&(s.selectedResultIndex++,s.ensureSelectedResultIsVisible())}},s.handleMouseenter=function(e){if(s.ignoreMouseEvents)return;s.selectedResultIndex=e},s.temporarilyIgnoreMouseEvents=function(){s.ignoreMouseEvents=!0,e.cancel(s.mouseEventIgnoreTimeout),s.mouseEventIgnoreTimeout=e(function(){s.ignoreMouseEvents=!1},250)},s.handleResultClick=function(e){s.onResultClick&&s.onResultClick({item:e});s.collapse()},s.ensureSelectedResultIsVisible=function(){var e=i.find(".ms-search-bar-results"),t=angular.element(e.find(".result")[s.selectedResultIndex]);if(e&&t){var n=t.position().top-8,a=t.position().top+t.outerHeight()+8;s.temporarilyIgnoreMouseEvents(),e.scrollTop()>n&&e.scrollTop(n),a>e.height()+e.scrollTop()&&e.scrollTop(a-e.height())}},o.$watch("MsSearchBar.query",function(e,t){if(!angular.isUndefined(e)&&!angular.equals(e,t)&&!s.collapsed){var n=o.$parent.$eval(s.onSearch,{query:e}),a=angular.isArray(n),i=n&&!!n.then;a&&s.populateResults(n),i&&(s.resultsLoading=!0,n.then(function(e){s.populateResults(e)},function(){s.populateResults([])}).finally(function(){s.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,s,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 o=0;o<d.shortcuts.length;o++)if(d.shortcuts[o]._id===e[i]._id){e[i].hasShortcut=!0;break}}}else 0<d.shortcuts.length&&(e=d.shortcuts);return d.selectedResultIndex=0,s(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)),s(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,s.cancel(d.mouseEventIgnoreTimeout),d.mouseEventIgnoreTimeout=s(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 s(e)?i.steps[e-1].scope.optionalStep:null}function a(e){return s(e)?!!i.steps[e-1].scope.hideStep:null}function o(e){return s(e)?!!n(e)||i.steps[e-1].form.$valid:null}function s(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(!s(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 s(e)?i.currentStepNumber===e:null},i.isStepDisabled=function(e){if(!s(e))return null;for(var t=!1,n=1;n<e;n++)if(!o(n)){t=!0;break}return t},i.isStepOptional=n,i.isStepHidden=a,i.filterHiddenStep=function(e){return!a(e.stepNumber)},i.isStepValid=o,i.isStepNumberValid=s,i.isFormValid=function(){return i.mainForm.$valid}}function t(s){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],o=a[1];s(function(){o.setOrientation("vertical"),o.registerMainForm(i),o.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],o=a[1];o.setOrientation("horizontal"),o.registerMainForm(i),o.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],o=a[1];e.optionalStep=angular.isDefined(n.optionalStep),o.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],o=a[1];e.optionalStep=angular.isDefined(n.optionalStep),e.stepInfo=o.registerStep(t,e,i),e.MsStepper=o,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,o=!1,s=!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(){o=!0})})}):d(n).then(function(){m(function(){o=!0})});r.on("scroll",c),c()}();var l=e.$watch(function(){return o&&s},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(){s=!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 o={scrollEl:"#content"};o=angular.extend(o,e.msTimeline,{});var s=angular.element(o.scrollEl);a.setScrollEl(s);var r=144;function l(){s.scrollTop()+s.height()+r>i.position().top&&(i.addClass("show"),c(),e.loadMore().then(function(){i.removeClass("show"),d()},function(){i.remove()}))}function d(){s.on("scroll",l)}function c(){s.off("scroll",l)}d(),e.$on("$destroy",function(){c()})}}}}).directive("msTimelineItem",e)}(),function(){"use strict";function e(a,e,t,n,i,o,s,r,l){function d(){a.timeoutId&&clearTimeout(a.timeoutId)}function c(){void 0!==s.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=s.autoStart||s.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.$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 i=this;i.filter=[],i.filtered=!1,i.fontSize=20,i.getCount=function(e){var t=0;if(e){i.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?(i.filtered=!0,i.filter=_.intersection(e.voiceQueuesSelected,e.attrs[1].value)):(i.filtered=!1,i.filter=e.voiceQueuesSelected);for(var n=0;n<e.voiceQueues.rows.length;n+=1)if(_.includes(i.filter,e.voiceQueues.rows[n].id))if("abandoned"===e.attrs[0].value){var a=parseInt(e.voiceQueues.rows[n].total)-parseInt(e.voiceQueues.rows[n].answered)-parseInt(e.voiceQueues.rows[n].unmanaged);t+=a&&0<=a?a:0}else 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(r,e){var l=this;l.filter=[],l.filtered=!1,l.properties=[],l.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"}}]}}},l.getMultiBarChart=function(e){e&&(e.attrs&&function(e){l.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?(l.filtered=!0,l.filter=_.intersection(e.voiceQueuesSelected,e.attrs[3].value)):(l.filtered=!1,l.filter=e.voiceQueuesSelected);if(l.multiBarChart.series.length>l.properties.length){var t=l.multiBarChart.series.length-l.properties.length;l.multiBarChart.series.splice(0,t),l.multiBarChart.data.splice(0,t)}for(var n=0;n<l.properties.length;n+=1){if(l.multiBarChart.series[n]=r.instant("TOOLS."+l.properties[n].toUpperCase()),_.isNil(l.multiBarChart.data[n])&&(l.multiBarChart.data[n]=[]),l.multiBarChart.labels.length>l.filter.length){var a=l.multiBarChart.labels.length-l.filter.length;l.multiBarChart.labels.splice(0,a),l.multiBarChart.data[n].splice(0,a)}for(var i=0,o=0;i<e.voiceQueues.rows.length;i+=1)if(_.includes(l.filter,e.voiceQueues.rows[i].id)){if(l.multiBarChart.labels[o]=e.voiceQueues.rows[i].name,"abandoned"===l.properties[n].toLowerCase()){var s=parseInt(e.voiceQueues.rows[i].total)-parseInt(e.voiceQueues.rows[i].answered)-parseInt(e.voiceQueues.rows[i].unmanaged);l.multiBarChart.data[n][o]=s&&0<=s?s:0}else l.multiBarChart.data[n][o]=e.voiceQueues.rows[i][l.properties[n]]?parseInt(e.voiceQueues.rows[i][l.properties[n]]):0;o+=1}}}(e),e.foreground&&function(e){l.multiBarChart.options.legend.fontColor=e.foreground;for(var t=0;t<l.multiBarChart.options.scales.xAxes.length;t+=1)l.multiBarChart.options.scales.xAxes[t].ticks.fontColor=e.foreground;for(var n=0;n<l.multiBarChart.options.scales.yAxes.length;n+=1)l.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 r=this;r.filter=[],r.filtered=!1,r.properties=[],r.pieChart={labels:["ANSWERED"],data:[30],options:{responsive:!0,legend:{display:!0}}},r.getPieChart=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.pieChart.labels.length>r.properties.length){var t=r.pieChart.labels.length-r.properties.length;r.pieChart.labels.splice(0,t),r.pieChart.data.splice(0,t)}for(var n=0,a=0;n<r.properties.length;n+=1){r.pieChart.labels[n]=s.instant("TOOLS."+r.properties[n].toUpperCase());for(var i=0;i<e.voiceQueues.rows.length;i+=1)if(_.includes(r.filter,e.voiceQueues.rows[i].id))if("abandoned"===r.properties[n].toLowerCase()){var o=parseInt(e.voiceQueues.rows[i].total)-parseInt(e.voiceQueues.rows[i].answered)-parseInt(e.voiceQueues.rows[i].unmanaged);a+=o&&0<=o?o:0}else a+=e.voiceQueues.rows[i][r.properties[n]]?parseInt(e.voiceQueues.rows[i][r.properties[n]]):0;r.pieChart.data[n]=a,a=0}}(e),e.foreground&&(t=e,r.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 o=this;function t(e){o.results=e||{count:0,rows:[]}}function s(){o.query.offset=(o.query.page-1)*o.query.limit,o.promise=i.analyticCustomReport.run(o.query,t).$promise}o.countDown=0,o.refresh=0,o.title="",o.columns=[],o.results={rows:[],count:0},o.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"},o.onInit=function e(t){t&&t.attrs&&(t.attrs[0]&&t.attrs[0].value&&(o.query.id=t.attrs[0].value,i.analyticFieldReport.get({fields:"field,alias",nolimit:!0,CustomReportId:t.attrs[0].value}).$promise.then(function(e){return e&&e.rows&&(o.columns=e.rows),i.analyticCustomReport.get({id:t.attrs[0].value,fields:"id,name"}).$promise}).then(function(e){e&&e.name&&(o.title=e.name),s()}).catch(function(e){console.log(e)})),t.attrs[1]&&t.attrs[1].value&&(o.refresh=parseInt(t.attrs[1].value),!_.isNaN(o.refresh)&&0<o.refresh?(o.countDown=parseInt(t.attrs[1].value),o.interval=a(function(){o.countDown-=1},1e3,0),o.timeout=n(function(){o.interval&&a.cancel(o.interval),e(t)},1e3*o.refresh)):(o.interval&&a.cancel(o.interval),o.timeout&&n.cancel(o.timeout))))},o.getResults=s,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.$on("$destroy",function(){o.interval&&a.cancel(o.interval),o.timeout&&n.cancel(o.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],o=!1,s=0;s<t.length;s++){var r=t[s];if(i.id===r){o=!0;break}}o&&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 o=e[i],s=!1,r=0;r<n.length;r++){var l=n[r];if(-1<o[t].indexOf(l)){s=!0;break}}s&&a.push(o)}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,o,s,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",s,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:o||"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],o=t||{};if(!a||!i)return d.error("apiResolver.resolve requires correct action parameter (ResourceName@methodName)"),!1;var s=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](o,function(e){s.resolve(e)},function(e){s.reject(e)}):(d.error('Resource "'+a+'" is not defined in the api service!'),s.reject('Resource "'+a+'" is not defined in the api service!'));return s.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 o(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=o,this.$get=["$log","$q","$resource","$rootScope",function(m,u,p,g){var e={setBaseUrl:t,getBaseUrl:i,register:o,resolve:function(e,t){g.$broadcast("msApi::resolveStart");var n=e.split("@"),a=n[0],i=n[1],o=t||{};if(!a||!i)return m.error("msApi.resolve requires correct action parameter (resourceName@methodName)"),!1;var s=u.defer(),r=v[a];if(r){var l=p(r.url,r.paramDefaults,r.actions,r.options);l[i](o,function(e){s.resolve(e),g.$broadcast("msApi::resolveSuccess")},function(e){s.reject(e),g.$broadcast("msApi::resolveError")})}else m.error('Resource "'+a+'" is not defined in the api service!'),s.reject('Resource "'+a+'" is not defined in the api service!');return s.promise},request:function(e,t,n,a){g.$broadcast("msApi::requestStart");var i=e.split("@"),o=i[0],s=i[1],r=t||{};if(!o||!s)return m.error("msApi.resolve requires correct action parameter (resourceName@methodName)"),!1;var l=u.defer(),d=v[o];if(d){var c=p(d.url,d.paramDefaults,d.actions,d.options);c[s](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 "'+o+'" is not defined in the api service!'),l.reject('Resource "'+o+'" 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 o=n(e)||"unknown-browser",s=a(l.navigator.userAgent)||a(l.navigator.appVersion)||"unknown-version",r=n(t)||"unknown-os";return o=o.toLowerCase(),s=o+"-"+s,r=r.toLowerCase(),d={browser:o,version:s,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,o){var s={};return{generate:function(){var e=angular.copy(o.getRegisteredThemes()),a=angular.copy(o.getRegisteredPalettes());angular.forEach(e,function(n){s[n.name]={},angular.forEach(n.colors,function(e,t){s[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})}),o.setThemesList(t);var n=i.get("motion.selectedTheme");n?o.setActiveTheme(n):o.setActiveTheme("default")}(s);var r={};angular.forEach(s,function(e,t){var n,a,i,o,s;(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]}),o=angular.element("head"),(s=angular.element('<style type="text/css"></style>')).html(i),o.append(s)})},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,o,s,r){this.search=function(t){for(var e=[],n=r.getFlatNavigation(),a=s.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 o(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 o=this;o.form={},o.forgotPassword=function(){return i.auth.forgot(o.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})})},o.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"}}),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"}}),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"}}),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"}}),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"}}),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"},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"}}),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"}}),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"}}),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.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"}}),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.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}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){this.themes=e.themes;var a=n.get("motion.language");a&&t.use(a)}e.$inject=["motionTheming","$translate","$cookies"],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={},o=0;for(a in e)if(n<=o&&(i[a]=e[a]),++o===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",o={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:o[i].main,controller:"MainController as vm"},"toolbar@app":{templateUrl:o[i].toolbar,controller:"ToolbarController as vm"},"navigation@app":{templateUrl:o[i].navigation,controller:"NavigationController as vm"},"quickPanel@app":{templateUrl:"app/quick-panel/quick-panel.html",controller:"QuickPanelController as vm"},"header@app":{templateUrl:o[i].header,controller:"HeaderController as vm"},"footer@app":{templateUrl:o[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 o(){i=io({query:"id="+e.getCurrentUser().id,transports:["websocket","polling"]})}return{connect:o,on:function(e,t){t=t||angular.noop,i||o(),i.on(e,function(){var e=arguments;a.$apply(function(){t.apply(i,e)})})},onWithoutApply:function(e,t){t=t||angular.noop,i||o(),i.on(e,function(){t.apply(i,arguments)})},emit:function(e,t,n){n=n||angular.noop,i||o(),i.emit(e,t,function(){var e=arguments;a.$apply(function(){n.apply(i,e)})})},removeAllListeners:function(e){i||o(),i.removeAllListeners(e)},removeListener:function(e,t){i||o(),i.removeListener(e,t)},disconnect:function(){i||o(),i.disconnect()}}}e.$inject=["$rootScope","Auth"],angular.module("motion").factory("socket",e)}(),function(){"use strict";function e(t,n,e,a,i,o){var s=this;s.progresslogin=!1,s.login=function(){return s.progresslogin=!0,s.message="",o.login(s.form).then(function(){return t.go("app.dashboards.general")}).catch(function(e){s.message=e.message}).finally(function(){s.progresslogin=!1})},s.loginOauth=function(e){s.message="",n.location.href="/api/auth/"+e},s.onInit=function(){{if(t.params.token&&t.params.userId)return o.removeCookies(),s.progresslogin=!0,e.put("motion.token",t.params.token),i.user.get({id:t.params.userId}).$promise.then(function(e){e&&(o.updateCurrentUser(e),t.go("app.dashboards.general"))}).finally(function(){s.progresslogin=!1});o.isLoggedIn()&&t.go("app.dashboards.general")}},s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="ANALYTICS.EDIT_EXTRACTEDREPORT",u.extractedReport=angular.copy(r),u.extractedReports=s,u.newExtractedReport=!1,u.extractedReport||(u.extractedReport={},u.title="ANALYTICS.NEW_EXTRACTEDREPORT",u.newExtractedReport=!0),u.addNewExtractedReport=function(){u.errors=[],l.analyticExtractedReport.save(u.extractedReport).$promise.then(function(e){u.extractedReports.unshift(e.toJSON()),o.success({title:"ExtractedReport properly created",msg:u.extractedReport.name?u.extractedReport.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveExtractedReport=function(){u.errors=[],l.analyticExtractedReport.update({id:u.extractedReport.id},u.extractedReport).$promise.then(function(e){var t=_.find(u.extractedReports,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ExtractedReport properly saved!",msg:u.extractedReport.name?u.extractedReport.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteExtractedReport=function(e){u.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(){l.analyticExtractedReport.delete({id:u.extractedReport.id}).$promise.then(function(){_.remove(u.extractedReports,{id:u.extractedReport.id}),o.success({title:"ExtractedReport properly deleted!",msg:(u.extractedReport.name||"extractedReport")+" has been deleted!"}),p(u.extractedReport)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","extractedReports","extractedReport","api","Auth","license","setting"],angular.module("app.analytics").controller("CreateOrEditExtractedReportDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.extractedReports=r||{count:0,rows:[]},v.table="extractedReports",v.listOrder="",v.listOrderAsc=null,v.selectedExtractedReports=[],v.query={fields:"createdAt,updatedAt,id,name,basename,savename,type,startDate,endDate,createdAt,status,output",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditExtractedReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/extractedReports/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{extractedReport:e,extractedReports:v.extractedReports.rows,license:v.license,setting:null}})},v.downloadfile2=function(o,e){return l.analyticExtractedReport.download({id:o.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=o.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++)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.analyticExtractedReport.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the extractedReport?").htmlContent("<b>"+(e.name||"extractedReport")+"</b> will be deleted.").ariaLabel("delete extractedReport").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getExtractedReports=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.analyticExtractedReport.get(v.query,f).$promise},v.createOrEditExtractedReport=function(e,t){i.show({controller:"CreateOrEditExtractedReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/extractedReports/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{extractedReport:t,extractedReports:v.extractedReports.rows,license:v.license,setting:v.setting}})},v.deleteExtractedReport=A,v.exportSelectedExtractedReports=function(){var e=angular.copy(v.selectedExtractedReports);return v.selectedExtractedReports=[],e},v.deleteSelectedExtractedReports=function(e){var t=i.confirm().title("Are you sure want to delete the selected extractedReports?").htmlContent("<b>"+v.selectedExtractedReports.length+" selected</b> will be deleted.").ariaLabel("delete ExtractedReports").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedExtractedReports.forEach(function(e){A(e)}),v.selectedExtractedReports=[]})},v.deselectExtractedReports=function(){v.selectedExtractedReports=[]},v.selectAllExtractedReports=function(){v.selectedExtractedReports=v.extractedReports.rows};var h=!0,b=1;function f(e){v.extractedReports=e||{count:0,rows:[]}}function A(e){l.analyticExtractedReport.delete({id:e.id}).$promise.then(function(){_.remove(v.extractedReports.rows,{id:e.id}),v.extractedReports.count-=1,v.extractedReports.rows.length||v.getExtractedReports(),c.success({title:"ExtractedReport deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEanalyticExtractedReport"}];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:"SYSTEM:DELETEanalyticExtractedReport",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getExtractedReports())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","extractedReports","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.analytics").controller("ExtractedReportsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="ANALYTICS.EDIT_METRIC",u.metric=angular.copy(r),u.metrics=s,u.newMetric=!1,u.metric||(u.metric={table:"report_agent"},u.title="ANALYTICS.NEW_METRIC",u.newMetric=!0),u.addNewMetric=function(){u.errors=[],l.analyticMetric.save(u.metric).$promise.then(function(e){u.metrics.unshift(e.toJSON()),o.success({title:"Metric properly created",msg:u.metric.name?u.metric.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMetric=function(){u.errors=[],l.analyticMetric.update({id:u.metric.id},u.metric).$promise.then(function(e){var t=_.find(u.metrics,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Metric properly saved!",msg:u.metric.name?u.metric.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMetric=function(e){u.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(){l.analyticMetric.delete({id:u.metric.id}).$promise.then(function(){_.remove(u.metrics,{id:u.metric.id}),o.success({title:"Metric properly deleted!",msg:(u.metric.name||"metric")+" has been deleted!"}),p(u.metric)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","metrics","metric","api","Auth","license","setting"],angular.module("app.analytics").controller("CreateOrEditMetricDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.metrics=r||{count:0,rows:[]},v.table="metrics",v.listOrder="",v.listOrderAsc=null,v.selectedMetrics=[],v.query={fields:"createdAt,updatedAt,id,name,table,metric,description",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v.editdialog=function(e,t){i.show({controller:"CreateOrEditMetricDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/metrics/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{metric:e,metrics:v.metrics.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the metric?").htmlContent("<b>"+(e.name||"metric")+"</b> will be deleted.").ariaLabel("delete metric").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getMetrics=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.analyticMetric.get(v.query,f).$promise},v.createOrEditMetric=function(e,t){i.show({controller:"CreateOrEditMetricDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/metrics/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{metric:t,metrics:v.metrics.rows,license:v.license,setting:v.setting}})},v.deleteMetric=A,v.exportSelectedMetrics=function(){var e=angular.copy(v.selectedMetrics);return v.selectedMetrics=[],e},v.deleteSelectedMetrics=function(e){var t=i.confirm().title("Are you sure want to delete the selected metrics?").htmlContent("<b>"+v.selectedMetrics.length+" selected</b> will be deleted.").ariaLabel("delete Metrics").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedMetrics.forEach(function(e){A(e)}),v.selectedMetrics=[]})},v.deselectMetrics=function(){v.selectedMetrics=[]},v.selectAllMetrics=function(){v.selectedMetrics=v.metrics.rows};var h=!0,b=1;function f(e){v.metrics=e||{count:0,rows:[]}}function A(e){l.analyticMetric.delete({id:e.id}).$promise.then(function(){_.remove(v.metrics.rows,{id:e.id}),v.metrics.count-=1,v.metrics.rows.length||v.getMetrics(),c.success({title:"Metric deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEanalyticMetric"}];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:"SYSTEM:DELETEanalyticMetric",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getMetrics())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","metrics","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.analytics").controller("MetricsController",e)}(),function(){"use strict";function e(e,t,a,n,i,o,s){var r=this;function l(){t.hide()}r.errors=[],r.report=angular.copy(n),r.report.name+="-copy",r.treeCustomData=s,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"===o?"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,o,s,r,l){var d=this;function c(){t.hide()}d.errors=[],d.joinTables=[],d.title="ANALYTICS.EDIT_REPORT",d.report=angular.copy(i),d.reports=a,d.newReport=!1,d.tables=l.getMap(),d.joinTypes=[{key:"join",value:"Join"},{key:"left_join",value:"Left Join"},{key:"right_join",value:"Right Join"},{key:"outer_join",value:"Outer Join"},{key:"cross_join",value:"Cross Join"}],d.report||(d.report={name:"",table:"report_agent",description:"",parent:r.id},d.title="ANALYTICS.NEW_REPORT",d.newReport=!0),d.addNewReport=function(){d.errors=[],d.report.joins=_.map(d.joinTables||[],function(e){return{parentKey:e.parentKey,foreignTable:e.name,foreignKey:e.foreignKey,type:e.type.toLowerCase()}}),d.report.joins=JSON.stringify(d.report.joins),o[s].save(d.report).$promise.then(function(e){d.reports.unshift(e),n.success({title:"Report properly created",msg:d.report.name?d.report.name+" has been created!":""}),c()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.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()})})},d.saveReport=function(){d.errors=[],o[s].update({id:d.report.id},d.report).$promise.then(function(e){var t=_.find(d.reports,{id:e.id});t&&_.merge(t,e),n.success({title:"Report properly saved!",msg:d.report.name?d.report.name+" has been saved!":""}),c()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.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()})})},d.deleteReport=function(){d.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(){o[s].delete({id:d.report.id}).$promise.then(function(){_.remove(d.reports,{id:d.report.id}),n.success({title:"Report properly deleted!",msg:d.report.name?d.report.name+" has been deleted!":""}),c()}).catch(function(e){d.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReport.delete"}]})},function(){})},d.closeDialog=c,d.selectedTableChange=function(e){e&&(delete d.selectedItem,d.joinTables.push(e))},d.removeJoin=function(e){d.joinTables.splice(e,1)},d.getFields=function(t,n,e){var a=_.find(d.tables,{name:e});a&&a.api&&o[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"],angular.module("app.analytics").controller("CreateOrEditReportDialogController",e)}(),function(){"use strict";function e(i,a,o,e){var s=this;s.report={},s.conditions=e.getConditions,s.init=function(e){s.report=e,s.report.condition=angular.fromJson(e.conditions)||{group:{operator:"AND",rules:[]}};for(var t=0;t<s.report.condition.group.rules.length;t++)if(s.report.condition.group.rules[t].field){var n=s.report.condition.group.rules[t].field.split(".");1===n.length&&(s.report.condition.group.rules[t].field=s.report.table+"."+s.report.condition.group.rules[t].field)}a.getColumns(s.report.table).then(function(e){s.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()})})},s.addCondition=function(e){e.unshift({condition:"=",field:"",value:""})},s.addGroup=function(e){e.push({group:{operator:"AND",rules:[]}})},s.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")})},s.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",mail_accounts:"mailAccount",mail_queues:"mailQueue",mail_interactions:"mailInteraction",mail_messages:"mailMessage",report_mail_queue:"mailQueueReport",openchannel_accounts:"openchannelAccount",openchannel_queues:"openchannelQueue",openchannel_interactions:"openchannelInteraction",openchannel_messages:"openchannelMessage",report_openchannel_queue:"openchannelQueueReport",sms_accounts:"smsAccount",sms_queues:"smsQueue",sms_interactions:"smsInteraction",sms_messages:"smsMessage",report_sms_queue:"smsQueueReport",fax_accounts:"faxAccount",fax_queues:"faxQueue",fax_interactions:"faxInteraction",fax_messages:"faxMessage",report_fax_queue:"faxQueueReport",report_call:"voiceCallReport",report_agent:"voiceAgentReport",report_square:"squareReport",report_member:"memberReport",report_queue:"voiceQueueReport",report_square_details:"squareReportDetail",report_jscripty_sessions:"jscriptySessionReport",report_jscripty_questions:"jscriptyQuestionReport",report_jscripty_answers:"jscriptyAnswerReport",users:"user",voice_recordings:"voiceRecording"};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,o,s,r,l,d,c){var m=this;(m.errors=[],m.title="Edit Report Field",m.report=i,m.reportField=angular.copy(s),m.reportFields=o,m.metrics=r,m.columns=l,m.sqlUtil=d,m.newReportField=!1,m.reportField)?(m.reportField.type=m.reportField.custom?"custom":m.reportField.MetricId?"metric":"column",m.reportField.field&&!m.reportField.custom&&_.isNil(m.reportField.MetricId)&&1===m.reportField.field.split(".").length&&(m.reportField.field=m.report.table+"."+m.reportField.field)):(m.reportField={type:"column",function:null,format:null,groupBy:!1,orderBy:null},m.title="New Report Field",m.newReportField=!0);function u(){n.hide()}m.addNewReportField=function(){m.errors=[],m.reportField.custom="custom"===m.reportField.type,m.reportField.MetricId="metric"===m.reportField.type?m.reportField.MetricId:null,m.reportField.CustomReportId=m.report.id,c.analyticFieldReport.save(m.reportField).$promise.then(function(e){m.reportFields.push(e),a.success({title:"Report field properly created",msg:m.reportField.field?m.reportField.field+" has been created!":m.reportField.type+" has been created!"}),u()}).catch(function(e){m.errors=e.data.errors||[{message:e.toString(),type:"api.analyticFieldReport.save"}]})},m.saveReportField=function(){m.errors=[],m.reportField.custom="custom"===m.reportField.type,m.reportField.MetricId="metric"===m.reportField.type?m.reportField.MetricId:null,c.analyticFieldReport.update({id:m.reportField.id},m.reportField).$promise.then(function(e){var t=_.find(m.reportFields,{id:e.id});t&&_.merge(t,e),a.success({title:"Report Field properly saved!",msg:m.reportField.field?m.reportField.field+" has been saved!":""}),u()}).catch(function(e){m.errors=e.data.errors||[{message:e.toString(),type:"api.analyticFieldReport.update"}]})},m.deleteReportField=function(e){m.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:m.reportField.id}).$promise.then(function(){_.remove(m.reportFields,{id:m.reportField.id}),a.success({title:"Report Field properly deleted!",msg:m.reportField.field?m.reportField.field+" has been deleted!":""}),u()}).catch(function(e){m.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReportField.delete"}]})},function(){})},m.closeDialog=u}e.$inject=["$scope","$location","$mdDialog","toasty","report","reportFields","reportField","metrics","columns","sqlUtil","api"],angular.module("app.analytics").controller("CreateOrEditReportFieldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,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){s.analyticFieldReport.addFields({id:c.report.id},e.models).$promise.then(function(e){c.reportFields.rows=e}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ADDFIELDS"})})}},c.init=function(e){c.report=e,c.query.CustomReportId=c.report.id,r.getColumns(c.report.table).then(function(e){return c.columns=_.difference(_.keys(e),["$promise","$resolved"]),s.analyticMetric.get({fields:"id,name,metric,table",nolimit:!0}).$promise}).then(function(e){c.metrics=e.rows}).catch(function(e){o.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=s.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}})},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){s.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(),o.success({title:"Field deleted!",msg:e.field?e.field+" has been deleted!":""})}).catch(function(e){o.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){var i=this;function o(e){return _.isArray(e)}i.report=a||{},i.selectedTab=e.params.tab||0,i.gotoReports=function(){e.go("app.analytics.reports")},i.saveReport=function(){i.report.conditions=angular.toJson(i.report.condition),n.analyticCustomReport.update({id:i.report.id},_.omit(i.report,"joins")).$promise.then(function(){t.success({title:"Report updated!",msg:i.report.name?i.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()})})},i.previewReport=function(){i.columns=[],i.rows=[],i.error=!1,n.analyticFieldReport.get({fields:"field,alias",nolimit:!0,CustomReportId:i.report.id}).$promise.then(function(e){return i.columns=e?e.rows:[],n.analyticCustomReport.preview({id:i.report.id}).$promise}).then(function(e){i.rows=e}).catch(function(e){console.log(e),i.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(i.error)})},i.queryReport=function(){return i.queryResult="Loading...",n.analyticCustomReport.query({id:i.report.id}).$promise.then(function(e){i.queryResult=e.sql}).catch(function(e){i.queryResult="",console.log(e),i.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(i.error)})},i.mapArray=function(e,t){if(o(e))return _.map(e,t).join(",");return""},i.isArray=o,i.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"],angular.module("app.analytics").controller("ReportController",e)}(),function(){"use strict";function e(e,t,n,a,i,o){var s=this;s.errors=[],s.report=angular.copy(a),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},s.closeDialog=function(){t.hide()},function(){s.columns=[],s.rows=[],s.error=!1;var e={fields:"field,alias",nolimit:!0};e["analyticCustomReport"===o?"CustomReportId":"DefaultReportId"]=s.report.id,s.promise=i.analyticFieldReport.get(e).$promise.then(function(e){return s.columns=e?e.rows:[],i[o].preview({id:s.report.id}).$promise}).then(function(e){s.rows=e}).catch(function(e){console.log(e),s.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(s.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,o,s,t,r,l,d,c){var m=this;m.currentUser=c.getCurrentUser(),m.reports={count:0,rows:[]},m.selectedReports=[],m.query={fields:"createdAt,updatedAt,id,name,description,table,parent,conditions,joins",limit:10,page:1,sort:"-updatedAt"},m.apiName=null,m.currentPath="",m.customTree=!0,m.editstate=function(e,t){o.go("app.analytics.reports.edit",{id:e.id})},m.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:m.apiName,treeCustomData:m.treeCustomInstance.jstree(!0).get_json("#")}}).finally(function(){})},m.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:m.apiName}})},m.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:m.apiName,currentPath:m.currentPath}})},m.downloadfile=function(a,e){var i;r.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"===m.apiName?"CustomReportId":"DefaultReportId"]=a.id,r.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=s.document.createElement("a");n.href="data:text/json;charset=utf-8,"+s.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(),d.success({title:"Report downloaded!",msg:a.name?a.name+" has been downloaded!":""})}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DOWNLOADJSON",msg:e.data?JSON.stringify(e.data):e.toString()})})},m.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(){h(e)},function(){console.log("CANCEL")})},m.success=g,m.getReports=v,m.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:m.reports.rows,apiName:m.apiName,currentNode:m.currentNode,setting:null}})},m.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),r.analyticCustomReport.save({name:n.name,description:n.description,table:n.table,conditions:n.conditions,joins:n.joins,parent:m.currentNode.id}).$promise.then(function(t){m.reports.rows.unshift(t),d.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 r.analyticFieldReport.bulkCreate(e).$promise}).then(function(e){d.success({title:"Fields saved!",msg:"Fields has been saved!"})}).catch(function(e){d.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),d.error({title:"Decode File Error",msg:e.toString()})}},a.readAsDataURL(e.file)}else d.error({title:"Format Error",msg:"Please use only json files"})},m.deleteReport=h,m.exportSelectedReports=function(){var e=angular.copy(m.selectedReports);return m.selectedReports=[],e},m.deleteSelectedReports=function(e){var t=i.confirm().title("Are you sure want to delete the selected reports?").htmlContent("<b>"+m.selectedReports.length+" selected</b> will be deleted.").ariaLabel("delete Reports").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){m.selectedReports.forEach(function(e){h(e)}),m.selectedReports=[]})},m.deselectReports=function(){m.selectedReports=[]},m.selectAllReports=function(){m.selectedReports=m.reports.rows},m.treeDefaultData=l.rows[0]?angular.fromJson(l.rows[0].tree):[],m.treeCustomData=l.rows[1]?angular.fromJson(l.rows[1].tree):[],m.treeDefaultConfig=E(!1),m.treeCustomConfig=E(!0),m.treeDefaultEvents=y(!1),m.treeCustomEvents=y(!0);var u=!0,p=1;function g(e){m.reports=e||{count:0,rows:[]}}function v(){m.query.offset=(m.query.page-1)*m.query.limit,m.apiName&&(m.promise=r[m.apiName].get(m.query,g).$promise)}function h(e){m.apiName&&r[m.apiName].delete({id:e.id}).$promise.then(function(){_.remove(m.reports.rows,{id:e.id}),m.reports.count-=1,m.reports.rows.length||m.getReports(),d.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){m.errors=e.data.errors||[{message:e.toString(),type:"api.analyticreport.delete"}];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:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticreport.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}function b(e,t){m.treeDefaultInstance.jstree(!0).deselect_all(),m.treeDefaultInstance.jstree(!0).close_all(),m.currentNode=t.node,m.currentNode.custom=!0,m.currentPath=m.treeCustomInstance.jstree(!0).get_path(m.currentNode).join("/ "),m.apiName="analyticCustomReport",m.query.parent=t.node.id,v()}function f(e,t){m.treeCustomInstance.jstree(!0).deselect_all(),m.treeCustomInstance.jstree(!0).close_all(),m.currentNode=t.node,m.currentNode.custom=!1,m.currentPath=m.treeDefaultInstance.jstree(!0).get_path(m.currentNode).join("/ "),m.apiName="analyticDefaultReport",m.query.parent=t.node.id,v()}function A(e,t){var n=angular.toJson(m.treeCustomInstance.jstree(!0).get_json("#"));r.analyticTreeReport.update({id:2,tree:n}).$promise.then(function(){l.rows[1]&&(l.rows[1].tree=n),d.success({title:"Node Updated",msg:t.node.text?t.node.text+" has been updated!":"Node has been updated!"})}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEanalyticTreeReport",msg:e.data?JSON.stringify(e.data):e.toString()})})}function E(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){return{create:{label:t.instant("ANALYTICS.CREATE"),action:function(){n=m.treeCustomInstance.jstree(!0).create_node(n),m.treeCustomInstance.jstree(!0).edit(n)}},rename:{_disabled:"#"===n.parent,label:t.instant("ANALYTICS.RENAME"),action:function(){m.treeCustomInstance.jstree(!0).edit(n)}},remove:{_disabled:"#"===n.parent||"admin"!==m.currentUser.role&&0!==m.currentUser.crudPermissions,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=m.treeCustomInstance.jstree(!0).get_parent(n);t=m.treeCustomInstance.jstree(!0).get_node(t),m.treeCustomInstance.jstree(!0).delete_node(n),e=[n.id].concat(n.children_d||[]),r.analyticCustomReport.get({parent:e.join(","),fields:"id,name"}).$promise.then(function(e){e&&e.rows&&e.rows.forEach(function(e){h(e)})}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEreportsByParents",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.treeCustomInstance.jstree(!0).select_node(t)})}}}}}}}function y(e){return e?{create_node:A,rename_node:A,move_node:A,delete_node:A,select_node:b}:{select_node:f}}e.$watch("vm.query.filter",function(e,t){u?n(function(){u=!1}):(t||(p=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=p),m.getReports())}),e.$watch("vm.search",function(e,t){m.treeDefaultInstance&&m.treeDefaultInstance.jstree(!0).search(e),m.treeCustomInstance&&m.treeCustomInstance.jstree(!0).search(e)})}e.$inject=["$scope","$timeout","$document","$mdDialog","$state","$window","$translate","api","treeReports","toasty","Auth"],angular.module("app.analytics").controller("ReportsController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,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[o].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(s.body),targetEvent:t,skipHide:!0,locals:{apiName:o,exportDate:l.exportDate,results:e},resolve:{columns:["apiResolver",function(e){var t={fields:"field,alias",nolimit:!0};return t["analyticCustomReport"===o?"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,o,s){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(){s.offset=(r.query.page-1)*r.query.limit,s.limit=r.query.limit,r.promise=n[o].run(s,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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CALLYSQUARE.EDIT_ODBC",u.odbc=angular.copy(r),u.odbcs=s,u.newOdbc=!1,u.odbc||(u.odbc={},u.title="CALLYSQUARE.NEW_ODBC",u.newOdbc=!0),u.addNewOdbc=function(){u.errors=[],l.squareOdbc.save(u.odbc).$promise.then(function(e){u.odbcs.unshift(e.toJSON()),o.success({title:"Odbc properly created",msg:u.odbc.name?u.odbc.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveOdbc=function(){u.errors=[],l.squareOdbc.update({id:u.odbc.id},u.odbc).$promise.then(function(e){var t=_.find(u.odbcs,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Odbc properly saved!",msg:u.odbc.name?u.odbc.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteOdbc=function(e){u.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(){l.squareOdbc.delete({id:u.odbc.id}).$promise.then(function(){_.remove(u.odbcs,{id:u.odbc.id}),o.success({title:"Odbc properly deleted!",msg:(u.odbc.name||"odbc")+" has been deleted!"}),p(u.odbc)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","odbcs","odbc","api","Auth","license","setting"],angular.module("app.callysquare").controller("CreateOrEditOdbcDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.odbcs=r||{count:0,rows:[]},v.table="odbcs",v.listOrder="",v.listOrderAsc=null,v.selectedODBC=[],v.query={fields:"createdAt,updatedAt,id,name,dsn,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditOdbcDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/odbcs/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{odbc:e,odbcs:v.odbcs.rows,license:v.license,setting:null}})},v.testtestOdbc=function(e,t){return l.squareOdbc.test({id:e.id}).$promise.then(function(){c.success({title:"Square ODBC properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"Square ODBC properly tested",msg:e.data?JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the odbc?").htmlContent("<b>"+(e.name||"odbc")+"</b> will be deleted.").ariaLabel("delete odbc").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getODBC=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.squareOdbc.get(v.query,f).$promise},v.createOrEditOdbc=function(e,t){i.show({controller:"CreateOrEditOdbcDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/odbcs/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{odbc:t,odbcs:v.odbcs.rows,license:v.license,setting:v.setting}})},v.deleteOdbc=A,v.exportSelectedODBC=function(){var e=angular.copy(v.selectedODBC);return v.selectedODBC=[],e},v.deleteSelectedODBC=function(e){var t=i.confirm().title("Are you sure want to delete the selected odbcs?").htmlContent("<b>"+v.selectedODBC.length+" selected</b> will be deleted.").ariaLabel("delete Odbcs").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedODBC.forEach(function(e){A(e)}),v.selectedODBC=[]})},v.deselectODBC=function(){v.selectedODBC=[]},v.selectAllODBC=function(){v.selectedODBC=v.odbcs.rows};var h=!0,b=1;function f(e){v.odbcs=e||{count:0,rows:[]}}function A(e){l.squareOdbc.delete({id:e.id}).$promise.then(function(){_.remove(v.odbcs.rows,{id:e.id}),v.odbcs.count-=1,v.odbcs.rows.length||v.getODBC(),c.success({title:"Odbc deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsquareOdbc"}];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:"SYSTEM:DELETEsquareOdbc",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getODBC())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","odbcs","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.callysquare").controller("OdbcsController",e)}(),function(){"use strict";function e(t,n,e,a,i,o,s,r){var l=this;function d(e){t.hide(e)}l.errors=[],l.title="CALLYSQUARE.EDIT_PROJECT",l.project=angular.copy(a),l.newWindow=!0,l.projects=e,l.newProject=!1,l.openFromEditor=o,l.project||(l.project={name:"",description:""},l.title="CALLYSQUARE.NEW_PROJECT",l.newProject=!0),l.addNewProject=function(){l.errors=[],i.squareProject.save(l.project).$promise.then(function(e){l.projects.unshift(e),n.success({title:"Project properly created",msg:l.project.name?l.project.name+" has been created!":""}),d(e),l.openFromEditor&&(l.newWindow?s.open("/callysquare/projects/"+e.id,"_blank"):r.go("app.callysquare.projects.edit",{id:e.id}))}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){l.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.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.squareProject.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},l.saveProject=function(){l.errors=[],i.squareProject.update({id:l.project.id},l.project).$promise.then(function(e){var t=_.find(l.projects,{id:e.id});t&&_.merge(t,e),n.success({title:"Project properly saved!",msg:l.project.name?l.project.name+" has been saved!":""}),d(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){l.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.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.squareProject.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},l.deleteProject=function(){l.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(){i.squareProject.delete({id:l.project.id}).$promise.then(function(){_.remove(l.projects,{id:l.project.id}),n.success({title:"Project properly deleted!",msg:l.project.name?l.project.name+" has been deleted!":""}),d(l.project)}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.delete"}]})},function(){})},l.closeDialog=d}e.$inject=["$mdDialog","toasty","projects","project","api","openFromEditor","$window","$state"],angular.module("app.callysquare").controller("CreateOrEditSquareProjectDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,o,s,r,l,d,c,m,u,p,g,v,h,b,f,A,E,y,S,T,C,x){var O,w,I,R,N,D,L=this,M={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"],lumenvoxasr:["grammar"],tildeasr:["appid","appsecret","uri"],login:["findBy"],pause:["findBy","pause_id"],unpause:["findBy"],logout:["findBy"],dialogflow:["key","text","dialogflow_language"]},k={queue:["file_id"],database:["variable_id"],pause:["pause_id"]},U={sendMail:["to","cc","bcc"],voicemail:["mailbox"]};function F(e,t,n,a){return _.map(e,function(e){return{value:e[t],option:e[n],group:a?e[a]:void 0}})}L.cellName=A.tagName,L.attributes=_.map(A.attributes,function(e){return{name:e.name,value:e.value,defaultValue:k[L.cellName]&&_.includes(k[L.cellName],e.name),required:M[L.cellName]&&_.includes(M[L.cellName],e.name),help:U[L.cellName]&&_.includes(U[L.cellName],e.name)}}),L.values={sip_id:F(r,"id","fullname","role"),trunk_name:F(l,"name","name"),trunk_id:F(l,"id","name"),queue_id:F(d,"id","name"),file_id:F(c,"id","name"),variable_id:F(m,"id","name"),odbc_id:F(u,"id","name"),project_id:F(p,"id","name"),context:F(g,"id","name"),interval_id:(O=v,w="id",I="name",R="IntervalId",N=_.filter(O,function(e){return null===e[R]}),D=[],_.forEach(N,function(t){D.push({value:t[w],option:t[I]});var e=_.filter(O,function(e){return e[R]===t.id});_.forEach(e,function(e){D.push({value:e[w],option:" - "+e[I]})})}),D),account_id:F(h,"id","name"),template_id:F(b,"id","name"),list_id:F(f,"id","name"),sms_account_id:F(T,"id","name"),pause_id:F(C,"id","name"),answer:[{value:"yes",option:"Yes"},{value:"no",option:"No"}],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:n,ispeech_asr_language:a,ispeech_tts_language:o,google_tts_language:s,google_asr_language:i,aws_polly_region:S,aws_polly_voice:y,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:x},L.closeDialog=function(e){e&&E(L.attributes),t.hide()},L.getMap=F}e.$inject=["$mdDialog","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"],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("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={chunkSize:5242880,maxChunkRetries:1,singleFile:!0,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},a.ngFlow={flow:{}},a.dropping=!1,a.closeDialog=i,a.fileAdded=function(e){a.errors=[],"text/xml"!==e.file.type&&a.errors.push({message:"The format "+e.file.type+" is not supported!"});5242880<e.file.size&&a.errors.push({message:"The file is too big. Max 5MB files are supported!"});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 o=this;o.projects=n,o.id="",o.newWindow=!0,o.closeDialog=function(e){o.errors=[],e?(t.hide(),o.newWindow?a.open("/callysquare/projects/"+o.id,"_blank"):i.go("app.callysquare.projects.edit",{id:o.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,o,s){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={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:o.instant("CALLYSQUARE.ALL_USERS"),labelSelected:o.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,o,s){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?o.open("/callysquare/projects/"+e.id,"_blank"):s.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,o,t,s,r,l,d,c,m,u,p,g,v,h,b,f,A,E){var y=this;y.project=t||{},y.saveOrPublishProject=function(e,t){var n={preproduction:e};t&&(n.production=e);o.squareProject.update({id:y.project.id},n).$promise.then(function(e){i.success({title:"Project "+(t?"published":"saved")+"!",msg:y.project.name?y.project.name+" has been "+(t?"published":"saved")+"!":""}),y.project.preproduction=e.preproduction}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsquareProject",msg:e.data?JSON.stringify(e.data):e.toString()})})},y.$onInit=function(){new EditorUi(y,new Editor,document.getElementById("geEditor")).openString(y.project.preproduction,y.project.name,y.project)},y.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:s.rows||[],trunks:r.rows||[],queues:l.rows||[],sounds:d.rows||[],variables:c.rows||[],databases:m.rows||[],contexts:u.rows||[],projects:p.rows||[],intervals:g.rows||[],mailAccounts:v.rows||[],smsAccounts:f.rows||[],pauses:A.rows||[],templates:h.rows||[],lists:b.rows||[],cell:e,saveCallback:t}})},y.newProject=function(e){a.show({controller:"CreateOrEditProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/create/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{project:e,projects:p.rows,openFromEditor:!0,setting:null}})},y.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:p.rows||[]}})},y.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:y.project,currentXML:e}}).then(function(e){e&&p.rows.push(e)})},y.newVariable=function(e){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:e,variables:c.rows,license:null,setting:null}})},y.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:y.project}}).then(function(e){e&&_.merge(y.project,e)})},y.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&&(y.project.preproduction=e)})},y.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&&(y.project.preproduction=e)})},y.gotoProjects=function(){e.go("app.callysquare.projects")}}e.$inject=["$state","$document","$mdDialog","toasty","api","project","users","trunks","queues","sounds","variables","databases","contexts","projects","intervals","mailAccounts","templates","lists","smsAccounts","pauses","$window"],angular.module("app.callysquare").controller("ProjectController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d,c){var m=this;m.currentUser=c.getCurrentUser(),m.projects=a||{count:0,rows:[]},m.table="projects",m.listOrder="",m.listOrderAsc=null,m.selectedProjects=[],m.query={fields:"id,name,description,notes",sort:"-updatedAt",limit:10,page:1},m.editstate=function(e,t){n.go("app.callysquare.projects.edit",{id:e.id})},m.deleteconfirm=function(e,t){var n=s.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");s.show(n).then(function(){v(e)},function(){console.log("CANCEL")})},m.success=g,m.getProjects=function(){m.query.offset=(m.query.page-1)*m.query.limit,m.promise=i.squareProject.get(m.query,g).$promise},m.createOrEditProject=function(e,t){s.show({controller:"CreateOrEditSquareProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/create/dialog.html",parent:angular.element(r.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:t,projects:m.projects.rows,openFromEditor:null,setting:null}})},m.deleteProject=v,m.exportSelectedProjects=function(){var e=angular.copy(m.selectedProjects);return m.selectedProjects=[],e},m.deleteSelectedProjects=function(e){var t=s.confirm().title("Are you sure want to delete the selected projects?").htmlContent("<b>"+m.selectedProjects.length+" selected</b> will be deleted.").ariaLabel("delete Projects").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){m.selectedProjects.forEach(function(e){v(e)}),m.selectedProjects=[]})},m.deselectProjects=function(){m.selectedProjects=[]},m.selectAllProjects=function(){m.selectedProjects=m.projects.rows},m.managePermissions=function(e,t){s.show({controller:"ProjectspermissionaddController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/permissionadd/permissionadd.html",parent:angular.element(r.body),targetEvent:t,clickOutsideToClose:!0,locals:{project:e,projects:m.projects?m.projects.rows:[]}})};var u=!0,p=1;function g(e){m.projects=e||{count:0,rows:[]}}function v(e){i.squareProject.delete({id:e.id}).$promise.then(function(){_.remove(m.projects.rows,{id:e.id}),m.projects.count-=1,m.projects.rows.length||m.getProjects(),d.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){m.errors=e.data.errors||[{message:e.toString(),type:"api.project.delete"}];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: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){u?l(function(){u=!1}):(t||(p=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=p),m.getProjects())})}e.$inject=["$scope","$state","$mdSidenav","projects","api","msUtils","$mdDialog","$document","$timeout","toasty","Auth"],angular.module("app.callysquare").controller("ProjectsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CALLYSQUARE.EDIT_SQUARERECORDING",u.squareRecording=angular.copy(r),u.squareRecordings=s,u.newSquareRecording=!1,u.squareRecording||(u.squareRecording={},u.title="CALLYSQUARE.NEW_SQUARERECORDING",u.newSquareRecording=!0),u.addNewSquareRecording=function(){u.errors=[],l.squareRecording.save(u.squareRecording).$promise.then(function(e){u.squareRecordings.unshift(e.toJSON()),o.success({title:"SquareRecording properly created",msg:u.squareRecording.name?u.squareRecording.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSquareRecording=function(){u.errors=[],l.squareRecording.update({id:u.squareRecording.id},u.squareRecording).$promise.then(function(e){var t=_.find(u.squareRecordings,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SquareRecording properly saved!",msg:u.squareRecording.name?u.squareRecording.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSquareRecording=function(e){u.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(){l.squareRecording.delete({id:u.squareRecording.id}).$promise.then(function(){_.remove(u.squareRecordings,{id:u.squareRecording.id}),o.success({title:"SquareRecording properly deleted!",msg:(u.squareRecording.name||"squareRecording")+" has been deleted!"}),p(u.squareRecording)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","squareRecordings","squareRecording","api","Auth","license","setting"],angular.module("app.callysquare").controller("CreateOrEditSquareRecordingDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.squareRecordings=r||{count:0,rows:[]},v.table="squareRecordings",v.listOrder="",v.listOrderAsc=null,v.selectedSquareRecordings=[],v.query={fields:"createdAt,updatedAt,id,filename,projectName,uniqueid,callerid,extension,audio,createdAt",sort:"-updatedAt",limit:10,page:1},v.downloadfile2=function(o,e){return l.squareRecording.download({id:o.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=o.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++)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.squareRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the squareRecording?").htmlContent("<b>"+(e.name||"squareRecording")+"</b> will be deleted.").ariaLabel("delete squareRecording").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getSquareRecordings=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.squareRecording.get(v.query,f).$promise},v.createOrEditSquareRecording=function(e,t){i.show({controller:"CreateOrEditSquareRecordingDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/squareRecordings/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{squareRecording:t,squareRecordings:v.squareRecordings.rows,license:v.license,setting:v.setting}})},v.deleteSquareRecording=A,v.exportSelectedSquareRecordings=function(){var e=angular.copy(v.selectedSquareRecordings);return v.selectedSquareRecordings=[],e},v.deleteSelectedSquareRecordings=function(e){var t=i.confirm().title("Are you sure want to delete the selected squareRecordings?").htmlContent("<b>"+v.selectedSquareRecordings.length+" selected</b> will be deleted.").ariaLabel("delete SquareRecordings").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSquareRecordings.forEach(function(e){A(e)}),v.selectedSquareRecordings=[]})},v.deselectSquareRecordings=function(){v.selectedSquareRecordings=[]},v.selectAllSquareRecordings=function(){v.selectedSquareRecordings=v.squareRecordings.rows};var h=!0,b=1;function f(e){v.squareRecordings=e||{count:0,rows:[]}}function A(e){l.squareRecording.delete({id:e.id}).$promise.then(function(){_.remove(v.squareRecordings.rows,{id:e.id}),v.squareRecordings.count-=1,v.squareRecordings.rows.length||v.getSquareRecordings(),c.success({title:"SquareRecording deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsquareRecording"}];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:"SYSTEM:DELETEsquareRecording",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSquareRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","squareRecordings","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.callysquare").controller("SquareRecordingsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.chatQueues=r||{count:0,rows:[]},v.table="chatQueues",v.listOrder="",v.listOrderAsc=null,v.selectedChatQueues=[],v.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"chat",limit:10,page:1},v.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.chat.chatQueues.edit",{id:e.id,chatQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"ChatQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:v.chatQueues?v.chatQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"ChatQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:v.chatQueues?v.chatQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the chatQueue?").htmlContent("<b>"+(e.name||"chatQueue")+"</b> will be deleted.").ariaLabel("delete chatQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.chat.realtime.queues",{})},v.success=f,v.getChatQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.chatQueue.get(v.query,f).$promise},v.createOrEditChatQueue=function(e,t){i.show({controller:"CreateOrEditChatQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatQueue:t,chatQueues:v.chatQueues.rows,license:v.license,setting:v.setting}})},v.deleteChatQueue=A,v.exportSelectedChatQueues=function(){var e=angular.copy(v.selectedChatQueues);return v.selectedChatQueues=[],e},v.deleteSelectedChatQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected chatQueues?").htmlContent("<b>"+v.selectedChatQueues.length+" selected</b> will be deleted.").ariaLabel("delete ChatQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedChatQueues.forEach(function(e){A(e)}),v.selectedChatQueues=[]})},v.deselectChatQueues=function(){v.selectedChatQueues=[]},v.selectAllChatQueues=function(){v.selectedChatQueues=v.chatQueues.rows};var h=!0,b=1;function f(e){v.chatQueues=e||{count:0,rows:[]}}function A(e){l.chatQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.chatQueues.rows,{id:e.id}),v.chatQueues.count-=1,v.chatQueues.rows.length||v.getChatQueues(),c.success({title:"ChatQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEchatQueue"}];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:"SYSTEM:DELETEchatQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getChatQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","chatQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.chat").controller("ChatQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CHAT.EDIT_CHATQUEUE",u.chatQueue=angular.copy(r),u.chatQueues=s,u.newChatQueue=!1,u.chatQueue||(u.chatQueue={strategy:"beepall",timeout:10},u.title="CHAT.NEW_CHATQUEUE",u.newChatQueue=!0),u.addNewChatQueue=function(){u.errors=[],l.chatQueue.save(u.chatQueue).$promise.then(function(e){u.chatQueues.unshift(e.toJSON()),o.success({title:"ChatQueue properly created",msg:u.chatQueue.name?u.chatQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveChatQueue=function(){u.errors=[],l.chatQueue.update({id:u.chatQueue.id},u.chatQueue).$promise.then(function(e){var t=_.find(u.chatQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatQueue properly saved!",msg:u.chatQueue.name?u.chatQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteChatQueue=function(e){u.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(){l.chatQueue.delete({id:u.chatQueue.id}).$promise.then(function(){_.remove(u.chatQueues,{id:u.chatQueue.id}),o.success({title:"ChatQueue properly deleted!",msg:(u.chatQueue.name||"chatQueue")+" has been deleted!"}),p(u.chatQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","chatQueues","chatQueue","api","Auth","license","setting"],angular.module("app.chat").controller("CreateOrEditChatQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.chatQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.chatQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserChatQueue?"penalty "+e.UserChatQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserChatQueue?"penalty "+e.UserChatQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.chatQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("CHAT.ALL_AGENTS"),labelSelected:s.instant("CHAT.SELECTED_AGENTS"),transferCallback:function(e,t){a.chatQueue[t?"removeAgents":"addAgents"]({id:l.chatQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"ChatQueue properly "+(t?"removed":"added"),msg:"ChatQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:chatQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","chatQueue","chatQueues","realtime","$translate","Auth"],angular.module("app.chat").controller("ChatQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.chatQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("CHAT.ALL_TEAMS"),labelSelected:i.instant("CHAT.SELECTED_TEAMS"),transferCallback:function(e,t){a.chatQueue[t?"removeTeams":"addTeams"]({id:o.chatQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:chatQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.chatQueue.getTeams({id:o.chatQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","chatQueue","$translate"],angular.module("app.chat").controller("ChatQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.chatQueue=d||e.params.chatQueue||{},c.selectedTab=e.params.tab||0,c.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:c.chatQueues?c.chatQueues.rows:[]}})},c.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:c.chatQueues?c.chatQueues.rows:[],realtime:!1}})},c.alert=r.info,c.gotoChatQueues=function(){e.go("app.chat.chatQueues")},c.saveChatQueue=function(){s.chatQueue.update({id:c.chatQueue.id},c.chatQueue).$promise.then(function(){r.success({title:"ChatQueue updated!",msg:c.chatQueue.name?c.chatQueue.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","chatQueue"],angular.module("app.chat").controller("ChatQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.chatWebsites=r||{count:0,rows:[]},v.table="chatWebsites",v.listOrder="",v.listOrderAsc=null,v.selectedChatWebsites=[],v.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,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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v.arrayheader_shape=_.keyBy([{option:"Rounded",value:"'rounded'"},{option:"Squared",value:"'squared'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arraymessagesAlignment=_.keyBy([{option:"alternate",value:"'alternate'"},{option:"centered",value:"'centered'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayratingType=_.keyBy([{option:"Star",value:"'star'"},{option:"Thumb",value:"'thumb'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayacceptMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayrejectMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraycloseMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,chatWebsite:e})},v.interactionsgoto=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,tab:9})},v.offlinemessagesgoto=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,tab:10})},v.agentadddialog=function(e,t){i.show({controller:"ChatWebsiteagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatWebsite:e,chatWebsites:v.chatWebsites?v.chatWebsites.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the chatWebsite?").htmlContent("<b>"+(e.name||"chatWebsite")+"</b> will be deleted.").ariaLabel("delete chatWebsite").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getChatWebsites=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.chatWebsite.get(v.query,f).$promise},v.createOrEditChatWebsite=function(e,t){i.show({controller:"CreateOrEditChatWebsiteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:t,chatWebsites:v.chatWebsites.rows,license:v.license,setting:v.setting}})},v.deleteChatWebsite=A,v.exportSelectedChatWebsites=function(){var e=angular.copy(v.selectedChatWebsites);return v.selectedChatWebsites=[],e},v.deleteSelectedChatWebsites=function(e){var t=i.confirm().title("Are you sure want to delete the selected chatWebsites?").htmlContent("<b>"+v.selectedChatWebsites.length+" selected</b> will be deleted.").ariaLabel("delete ChatWebsites").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedChatWebsites.forEach(function(e){A(e)}),v.selectedChatWebsites=[]})},v.deselectChatWebsites=function(){v.selectedChatWebsites=[]},v.selectAllChatWebsites=function(){v.selectedChatWebsites=v.chatWebsites.rows},l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){v.interval=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.chatWebsites=e||{count:0,rows:[]}}function A(e){l.chatWebsite.delete({id:e.id}).$promise.then(function(){_.remove(v.chatWebsites.rows,{id:e.id}),v.chatWebsites.count-=1,v.chatWebsites.rows.length||v.getChatWebsites(),c.success({title:"ChatWebsite deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEchatWebsite"}];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:"SYSTEM:DELETEchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getChatWebsites())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","chatWebsites","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.chat").controller("ChatWebsitesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CHAT.EDIT_CHATWEBSITE",u.chatWebsite=angular.copy(r),u.chatWebsites=s,u.newChatWebsite=!1,u.chatWebsite||(u.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},u.title="CHAT.NEW_CHATWEBSITE",u.newChatWebsite=!0),t.params.id&&(u.chatWebsite.ChatWebsiteId=t.params.id),u.addNewChatWebsite=function(){u.errors=[],l.chatWebsite.save(u.chatWebsite).$promise.then(function(e){u.chatWebsites.unshift(e.toJSON()),o.success({title:"ChatWebsite properly created",msg:u.chatWebsite.name?u.chatWebsite.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveChatWebsite=function(){u.errors=[],l.chatWebsite.update({id:u.chatWebsite.id},u.chatWebsite).$promise.then(function(e){var t=_.find(u.chatWebsites,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatWebsite properly saved!",msg:u.chatWebsite.name?u.chatWebsite.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteChatWebsite=function(e){u.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(){l.chatWebsite.delete({id:u.chatWebsite.id}).$promise.then(function(){_.remove(u.chatWebsites,{id:u.chatWebsite.id}),o.success({title:"ChatWebsite properly deleted!",msg:(u.chatWebsite.name||"chatWebsite")+" has been deleted!"}),p(u.chatWebsite)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).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","toasty","chatWebsites","chatWebsite","api","Auth","license","setting"],angular.module("app.chat").controller("CreateOrEditChatWebsiteDialogController",e)}(),function(){"use strict";function e(s,i,a,o,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}}).then(function(e){e&&(e.id?r.chatWebsiteApps.rows[t]=e:r.chatWebsiteApps.rows.splice(t,0,e),l())}).catch(function(e){e&&o.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=[],o=[];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=(o.length?_.last(o).priority:a.priority)+1,t=_.concat(t,i,[a],o)}s.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.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",route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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",route:"chatQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"user",filters:{fields:"id,name",role:"agent",sort:"name",nolimit:!0}}],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",maxlength:255,required:!0,param:1}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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:"English",value:"'en'"},{option:"Italian",value:"'it'"}],required:!0,param:1},{title:"welcomemessage",name:"welcomemessage",type:"textarea",maxlength:255,required:!1,param:2,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){r.chatWebsite=e,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=s.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:[]}}).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(),o.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 s.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,n,a,t,i,o,s,r){var l=this;function d(){return a.chatWebsite[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.chatWebsite.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserChatWebsite?"penalty "+e.UserChatWebsite.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserChatWebsite?"penalty "+e.UserChatWebsite.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.chatWebsite=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("CHAT.ALL_AGENTS"),labelSelected:s.instant("CHAT.SELECTED_AGENTS"),transferCallback:function(e,t){a.chatWebsite[t?"removeAgents":"addAgents"]({id:l.chatWebsite.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"ChatWebsite properly "+(t?"removed":"added"),msg:"ChatWebsite has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:chatWebsite.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","chatWebsite","chatWebsites","realtime","$translate","Auth"],angular.module("app.chat").controller("ChatWebsiteagentaddController",e)}(),function(){"use strict";function e(e,a){var i=this;i.chatWebsite={},i.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.chatWebsite=angular.copy(e),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,n,e,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(e.appType||e.app).toUpperCase(),o.agent=angular.copy(e),o.agent.appdata)switch(o.agent.appType?o.agent.appType.toLowerCase():o.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agent.appdata.split(",");o.agent.key=s[0],o.agent.language=s[1],o.agent.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agent.appdata.split(",");o.agent.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agent.text=s.slice(1,s.length).join(",");break;case"message":o.agent.text=o.agent.appdata;break;case"set":o.agent.name=o.agent.appdata.split("=")[0],o.agent.value=o.agent.appdata.split("=")[1];break;case"agi":o.agent.project=o.agent.appdata;break;default:var r=o.agent.appdata.split(",");o.agent.agent=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.agent.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.agent.timeout=30;function l(e){t.hide(e)}o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outbounddial"===o.agent.appType.toLowerCase()&&(o.agent.prefix=o.agent.phone?o.agent.phone.split("$")[0]:void 0,o.agent.callerId=o.agent.callerID?"CALLERID(all)="+o.agent.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outboundDial"===o.agent.appType&&(o.agent.phone=a.cutdigits?(o.agent.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agent.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agent.options+="U(xcally-mixmonitor-context)"):o.agent.options=o.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.agents,{name:o.agent.agent});t&&(o.agent.UserId=t.id);if(o.agent.appType&&"custom"===o.agent.appType);else switch((o.agent.app||o.agent.appType).toLowerCase()){case"set":o.agent.appdata=o.agent.name+"="+o.agent.value;break;case"custom":break;default:e[0]=o.agent.agent,e[1]=o.agent.timeout,o.agent.appdata=e.join(",")}l(o.agent)},o.closeDialog=l,i.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){o.agents=e.rows||[]}).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","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.autoreply=angular.copy(n),o.autoreply.appdata)switch(o.autoreply.appType?o.autoreply.appType.toLowerCase():o.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.autoreply.appdata.split(",");o.autoreply.key=s[0],o.autoreply.language=s[1],o.autoreply.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.autoreply.appdata.split(",");o.autoreply.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.autoreply.text=s.slice(1,s.length).join(",");break;case"message":o.autoreply.text=o.autoreply.appdata;break;case"set":o.autoreply.name=o.autoreply.appdata.split("=")[0],o.autoreply.value=o.autoreply.appdata.split("=")[1];break;case"agi":o.autoreply.project=o.autoreply.appdata;break;default:var r=o.autoreply.appdata.split(",");o.autoreply.times=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.autoreply.text=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.autoreply.times=1;function l(e){t.hide(e)}o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outbounddial"===o.autoreply.appType.toLowerCase()&&(o.autoreply.prefix=o.autoreply.phone?o.autoreply.phone.split("$")[0]:void 0,o.autoreply.callerId=o.autoreply.callerID?"CALLERID(all)="+o.autoreply.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outboundDial"===o.autoreply.appType&&(o.autoreply.phone=a.cutdigits?(o.autoreply.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.autoreply.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.autoreply.options+="U(xcally-mixmonitor-context)"):o.autoreply.options=o.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(o.autoreply.appType&&"custom"===o.autoreply.appType);else switch((o.autoreply.app||o.autoreply.appType).toLowerCase()){case"set":o.autoreply.appdata=o.autoreply.name+"="+o.autoreply.value;break;case"custom":break;default:e[0]=o.autoreply.times,e[1]=o.autoreply.text,o.autoreply.appdata=e.join(",")}l(o.autoreply)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.close=angular.copy(n),o.close.appdata)switch(o.close.appType?o.close.appType.toLowerCase():o.close.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.close.appdata.split(",");o.close.key=s[0],o.close.language=s[1],o.close.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.close.appdata.split(",");o.close.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.close.text=s.slice(1,s.length).join(",");break;case"message":o.close.text=o.close.appdata;break;case"set":o.close.name=o.close.appdata.split("=")[0],o.close.value=o.close.appdata.split("=")[1];break;case"agi":o.close.project=o.close.appdata;break;default:var r=o.close.appdata.split(",");o.close.disposition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outbounddial"===o.close.appType.toLowerCase()&&(o.close.prefix=o.close.phone?o.close.phone.split("$")[0]:void 0,o.close.callerId=o.close.callerID?"CALLERID(all)="+o.close.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outboundDial"===o.close.appType&&(o.close.phone=a.cutdigits?(o.close.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.close.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.close.options+="U(xcally-mixmonitor-context)"):o.close.options=o.close.options.replace("U(xcally-mixmonitor-context)",""));if(o.close.appType&&"custom"===o.close.appType);else switch((o.close.app||o.close.appType).toLowerCase()){case"set":o.close.appdata=o.close.name+"="+o.close.value;break;case"custom":break;default:e[0]=o.close.disposition,o.close.appdata=e.join(",")}l(o.close)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.dialogflow=angular.copy(n),o.dialogflow.appdata)switch(o.dialogflow.appType?o.dialogflow.appType.toLowerCase():o.dialogflow.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.dialogflow.appdata.split(",");o.dialogflow.key=s[0],o.dialogflow.language=s[1],o.dialogflow.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.dialogflow.appdata.split(",");o.dialogflow.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.dialogflow.text=s.slice(1,s.length).join(",");break;case"message":o.dialogflow.text=o.dialogflow.appdata;break;case"set":o.dialogflow.name=o.dialogflow.appdata.split("=")[0],o.dialogflow.value=o.dialogflow.appdata.split("=")[1];break;case"agi":o.dialogflow.project=o.dialogflow.appdata;break;default:var r=o.dialogflow.appdata.split(",");o.dialogflow.key=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.dialogflow.language=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.dialogflow.welcomemessage=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}else o.dialogflow.language="en";function l(e){t.hide(e)}o.dialogflow.type&&"outbound"===o.dialogflow.type.toLowerCase()&&"outbounddial"===o.dialogflow.appType.toLowerCase()&&(o.dialogflow.prefix=o.dialogflow.phone?o.dialogflow.phone.split("$")[0]:void 0,o.dialogflow.callerId=o.dialogflow.callerID?"CALLERID(all)="+o.dialogflow.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.dialogflow.type&&"outbound"===o.dialogflow.type.toLowerCase()&&"outboundDial"===o.dialogflow.appType&&(o.dialogflow.phone=a.cutdigits?(o.dialogflow.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.dialogflow.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.dialogflow.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.dialogflow.options+="U(xcally-mixmonitor-context)"):o.dialogflow.options=o.dialogflow.options.replace("U(xcally-mixmonitor-context)",""));if(o.dialogflow.appType&&"custom"===o.dialogflow.appType);else switch((o.dialogflow.app||o.dialogflow.appType).toLowerCase()){case"set":o.dialogflow.appdata=o.dialogflow.name+"="+o.dialogflow.value;break;case"custom":break;default:e[0]=o.dialogflow.key,e[1]=o.dialogflow.language,e[2]=o.dialogflow.welcomemessage,o.dialogflow.appdata=e.join(",")}l(o.dialogflow)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppdialogflowDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotoif=angular.copy(n),o.gotoif.appdata)switch(o.gotoif.appType?o.gotoif.appType.toLowerCase():o.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotoif.appdata.split(",");o.gotoif.key=s[0],o.gotoif.language=s[1],o.gotoif.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotoif.appdata.split(",");o.gotoif.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotoif.text=s.slice(1,s.length).join(",");break;case"message":o.gotoif.text=o.gotoif.appdata;break;case"set":o.gotoif.name=o.gotoif.appdata.split("=")[0],o.gotoif.value=o.gotoif.appdata.split("=")[1];break;case"agi":o.gotoif.project=o.gotoif.appdata;break;default:var r=o.gotoif.appdata.split(",");o.gotoif.condition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.gotoif.truepriority=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.gotoif.falsepriority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outbounddial"===o.gotoif.appType.toLowerCase()&&(o.gotoif.prefix=o.gotoif.phone?o.gotoif.phone.split("$")[0]:void 0,o.gotoif.callerId=o.gotoif.callerID?"CALLERID(all)="+o.gotoif.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outboundDial"===o.gotoif.appType&&(o.gotoif.phone=a.cutdigits?(o.gotoif.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotoif.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotoif.options+="U(xcally-mixmonitor-context)"):o.gotoif.options=o.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotoif.appType&&"custom"===o.gotoif.appType);else switch((o.gotoif.app||o.gotoif.appType).toLowerCase()){case"set":o.gotoif.appdata=o.gotoif.name+"="+o.gotoif.value;break;case"custom":break;default:e[0]=o.gotoif.condition,e[1]=o.gotoif.truepriority,e[2]=o.gotoif.falsepriority,o.gotoif.appdata=e.join(",")}l(o.gotoif)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotop=angular.copy(n),o.gotop.appdata)switch(o.gotop.appType?o.gotop.appType.toLowerCase():o.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotop.appdata.split(",");o.gotop.key=s[0],o.gotop.language=s[1],o.gotop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotop.appdata.split(",");o.gotop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotop.text=s.slice(1,s.length).join(",");break;case"message":o.gotop.text=o.gotop.appdata;break;case"set":o.gotop.name=o.gotop.appdata.split("=")[0],o.gotop.value=o.gotop.appdata.split("=")[1];break;case"agi":o.gotop.project=o.gotop.appdata;break;default:var r=o.gotop.appdata.split(",");o.gotop.priority=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outbounddial"===o.gotop.appType.toLowerCase()&&(o.gotop.prefix=o.gotop.phone?o.gotop.phone.split("$")[0]:void 0,o.gotop.callerId=o.gotop.callerID?"CALLERID(all)="+o.gotop.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outboundDial"===o.gotop.appType&&(o.gotop.phone=a.cutdigits?(o.gotop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotop.options+="U(xcally-mixmonitor-context)"):o.gotop.options=o.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotop.appType&&"custom"===o.gotop.appType);else switch((o.gotop.app||o.gotop.appType).toLowerCase()){case"set":o.gotop.appdata=o.gotop.name+"="+o.gotop.value;break;case"custom":break;default:e[0]=o.gotop.priority,o.gotop.appdata=e.join(",")}l(o.gotop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditChatWebsiteAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.noop=angular.copy(n),o.noop.appdata)switch(o.noop.appType?o.noop.appType.toLowerCase():o.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.noop.appdata.split(",");o.noop.key=s[0],o.noop.language=s[1],o.noop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.noop.appdata.split(",");o.noop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.noop.text=s.slice(1,s.length).join(",");break;case"message":o.noop.text=o.noop.appdata;break;case"set":o.noop.name=o.noop.appdata.split("=")[0],o.noop.value=o.noop.appdata.split("=")[1];break;case"agi":o.noop.project=o.noop.appdata;break;default:var r=o.noop.appdata.split(",");o.noop.value=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outbounddial"===o.noop.appType.toLowerCase()&&(o.noop.prefix=o.noop.phone?o.noop.phone.split("$")[0]:void 0,o.noop.callerId=o.noop.callerID?"CALLERID(all)="+o.noop.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outboundDial"===o.noop.appType&&(o.noop.phone=a.cutdigits?(o.noop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.noop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.noop.options+="U(xcally-mixmonitor-context)"):o.noop.options=o.noop.options.replace("U(xcally-mixmonitor-context)",""));if(o.noop.appType&&"custom"===o.noop.appType);else switch((o.noop.app||o.noop.appType).toLowerCase()){case"set":o.noop.appdata=o.noop.name+"="+o.noop.value;break;case"custom":break;default:e[0]=o.noop.value,o.noop.appdata=e.join(",")}l(o.noop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppnoopDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.queue.queue=300,o.queue.timeout=300;function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.queues,{name:o.queue.queue});t&&(o.queue[_.capitalize("chat")+"QueueId"]=t.id);if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.timeout,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.chatQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(e.appType||e.app).toUpperCase(),o.system=angular.copy(e),o.system.appdata)switch(o.system.appType?o.system.appType.toLowerCase():o.system.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.system.appdata.split(",");o.system.key=s[0],o.system.language=s[1],o.system.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.system.appdata.split(",");o.system.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.system.text=s.slice(1,s.length).join(",");break;case"message":o.system.text=o.system.appdata;break;case"set":o.system.name=o.system.appdata.split("=")[0],o.system.value=o.system.appdata.split("=")[1];break;case"agi":o.system.project=o.system.appdata;break;default:var r=o.system.appdata.split(",");o.system.command=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.system.variable=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.system.variable="";function l(e){t.hide(e)}o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outbounddial"===o.system.appType.toLowerCase()&&(o.system.prefix=o.system.phone?o.system.phone.split("$")[0]:void 0,o.system.callerId=o.system.callerID?"CALLERID(all)="+o.system.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outboundDial"===o.system.appType&&(o.system.phone=a.cutdigits?(o.system.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.system.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.system.options+="U(xcally-mixmonitor-context)"):o.system.options=o.system.options.replace("U(xcally-mixmonitor-context)",""));if(o.system.appType&&"custom"===o.system.appType);else switch((o.system.app||o.system.appType).toLowerCase()){case"set":o.system.appdata=o.system.name+"="+o.system.value;break;case"custom":break;default:e[0]=o.system.command,e[1]=o.system.variable,o.system.appdata=e.join(",")}l(o.system)},o.closeDialog=l,i.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppsystemDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(e.appType||e.app).toUpperCase(),o.tag=angular.copy(e),o.tag.appdata)switch(o.tag.appType?o.tag.appType.toLowerCase():o.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.tag.appdata.split(",");o.tag.key=s[0],o.tag.language=s[1],o.tag.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.tag.appdata.split(",");o.tag.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.tag.text=s.slice(1,s.length).join(",");break;case"message":o.tag.text=o.tag.appdata;break;case"set":o.tag.name=o.tag.appdata.split("=")[0],o.tag.value=o.tag.appdata.split("=")[1];break;case"agi":o.tag.project=o.tag.appdata;break;default:var r=o.tag.appdata.split(",");o.tag.tag=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outbounddial"===o.tag.appType.toLowerCase()&&(o.tag.prefix=o.tag.phone?o.tag.phone.split("$")[0]:void 0,o.tag.callerId=o.tag.callerID?"CALLERID(all)="+o.tag.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outboundDial"===o.tag.appType&&(o.tag.phone=a.cutdigits?(o.tag.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.tag.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.tag.options+="U(xcally-mixmonitor-context)"):o.tag.options=o.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.tags,{name:o.tag.tag});t&&(o.tag.TagId=t.id);if(o.tag.appType&&"custom"===o.tag.appType);else switch((o.tag.app||o.tag.appType).toLowerCase()){case"set":o.tag.appdata=o.tag.name+"="+o.tag.value;break;case"custom":break;default:e[0]=o.tag.tag,o.tag.appdata=e.join(",")}l(o.tag)},o.closeDialog=l,i.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteApptagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteChatCannedAnswers={count:0,rows:[]},c.selectedChatWebsiteChatCannedAnswers=[],c.query={fields:"createdAt,updatedAt,id,key,value,description,createdAt",limit:10,page:1},c.init=function(e){c.chatWebsite=e,c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteChatCannedAnswers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditChatCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/chatCannedAnswers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatCannedAnswer:t,chatCannedAnswers:c.chatWebsiteChatCannedAnswers.rows,license:null,setting:null}})},c.exportSelectedChatWebsiteChatCannedAnswers=function(){var e=angular.copy(c.selectedChatWebsiteChatCannedAnswers);return c.selectedChatWebsiteChatCannedAnswers=[],e},c.deleteChatWebsiteChatCannedAnswer=g,c.deleteSelectedChatWebsiteChatCannedAnswers=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CHAT.EDIT_CHATCANNEDANSWER",u.chatCannedAnswer=angular.copy(r),u.chatCannedAnswers=s,u.newChatCannedAnswer=!1,u.chatCannedAnswer||(u.chatCannedAnswer={},u.title="CHAT.NEW_CHATCANNEDANSWER",u.newChatCannedAnswer=!0),t.params.id&&(u.chatCannedAnswer.ChatWebsiteId=t.params.id),u.addNewChatCannedAnswer=function(){u.errors=[],l.cannedAnswer.save(u.chatCannedAnswer).$promise.then(function(e){u.chatCannedAnswers.unshift(e.toJSON()),o.success({title:"ChatCannedAnswer properly created",msg:u.chatCannedAnswer.name?u.chatCannedAnswer.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveChatCannedAnswer=function(){u.errors=[],l.cannedAnswer.update({id:u.chatCannedAnswer.id},u.chatCannedAnswer).$promise.then(function(e){var t=_.find(u.chatCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatCannedAnswer properly saved!",msg:u.chatCannedAnswer.name?u.chatCannedAnswer.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteChatCannedAnswer=function(e){u.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(){l.cannedAnswer.delete({id:u.chatCannedAnswer.id}).$promise.then(function(){_.remove(u.chatCannedAnswers,{id:u.chatCannedAnswer.id}),o.success({title:"ChatCannedAnswer properly deleted!",msg:(u.chatCannedAnswer.name||"chatCannedAnswer")+" has been deleted!"}),p(u.chatCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","chatCannedAnswers","chatCannedAnswer","api","Auth","license","setting"],angular.module("app.chat").controller("CreateOrEditChatCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteChatDispositions={count:0,rows:[]},c.selectedChatWebsiteChatDispositions=[],c.query={fields:"createdAt,updatedAt,id,name,createdAt",limit:10,page:1},c.init=function(e){c.chatWebsite=e,c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteChatDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditChatDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/chatDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatDisposition:t,chatDispositions:c.chatWebsiteChatDispositions.rows,license:null,setting:null}})},c.exportSelectedChatWebsiteChatDispositions=function(){var e=angular.copy(c.selectedChatWebsiteChatDispositions);return c.selectedChatWebsiteChatDispositions=[],e},c.deleteChatWebsiteChatDisposition=g,c.deleteSelectedChatWebsiteChatDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CHAT.EDIT_CHATDISPOSITION",u.chatDisposition=angular.copy(r),u.chatDispositions=s,u.newChatDisposition=!1,u.chatDisposition||(u.chatDisposition={},u.title="CHAT.NEW_CHATDISPOSITION",u.newChatDisposition=!0),t.params.id&&(u.chatDisposition.ChatWebsiteId=t.params.id),u.addNewChatDisposition=function(){u.errors=[],l.disposition.save(u.chatDisposition).$promise.then(function(e){u.chatDispositions.unshift(e.toJSON()),o.success({title:"ChatDisposition properly created",msg:u.chatDisposition.name?u.chatDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveChatDisposition=function(){u.errors=[],l.disposition.update({id:u.chatDisposition.id},u.chatDisposition).$promise.then(function(e){var t=_.find(u.chatDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatDisposition properly saved!",msg:u.chatDisposition.name?u.chatDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteChatDisposition=function(e){u.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(){l.disposition.delete({id:u.chatDisposition.id}).$promise.then(function(){_.remove(u.chatDispositions,{id:u.chatDisposition.id}),o.success({title:"ChatDisposition properly deleted!",msg:(u.chatDisposition.name||"chatDisposition")+" has been deleted!"}),p(u.chatDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","chatDispositions","chatDisposition","api","Auth","license","setting"],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.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.chatWebsite=angular.copy(e),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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteInteractions={count:0,rows:[]},c.selectedChatWebsiteInteractions=[],c.query={fields:"createdAt,updatedAt,UserId,ContactId,ChatWebsiteId,id,createdAt,closedAt,Contact.firstName,Owner.name,disposition,ratingValue,ratingType,note,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e){c.chatWebsite=e,c.query.id=c.chatWebsite.id,c.getChatWebsiteInteractions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},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){o.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/interactions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,interaction:t,interactions:c.chatWebsiteInteractions.rows,license:null,setting:null}})},c.spychatInteraction=function(e,n){o.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(s.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=o.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");o.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.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.chatWebsite=angular.copy(e),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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteOfflineMessages={count:0,rows:[]},c.selectedChatWebsiteOfflineMessages=[],c.query={fields:"createdAt,updatedAt,id,ContactId,createdAt",sort:"-createdAt",limit:10,page:1},c.init=function(e){c.chatWebsite=e,c.query.id=c.chatWebsite.id,c.getChatWebsiteOfflineMessages()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditOfflineMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/offlineMessages/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,offlineMessage:t,offlineMessages:c.chatWebsiteOfflineMessages.rows,license:null,setting:null}})},c.showOfflineMessageChatWebsiteOfflineMessage=function(e,n){o.show({controller:"ShowOfflineMessageOfflineMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/offlineMessages/dialog.html",parent:angular.element(s.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=o.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");o.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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontacts",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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteProactiveActions={count:0,rows:[]},c.selectedChatWebsiteProactiveActions=[],c.query={fields:"createdAt,updatedAt,id,name,type,selector,timeout,createdAt",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){c.chatWebsite=e,c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteProactiveActions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditChatProactiveActionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/proactive/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatProactiveAction:t,proactive:c.chatWebsiteProactiveActions.rows,license:null,setting:null}})},c.exportSelectedChatWebsiteProactiveActions=function(){var e=angular.copy(c.selectedChatWebsiteProactiveActions);return c.selectedChatWebsiteProactiveActions=[],e},c.deleteChatWebsiteChatProactiveAction=g,c.deleteSelectedChatWebsiteProactiveActions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CHAT.EDIT_CHATPROACTIVEACTION",u.chatProactiveAction=angular.copy(r),u.proactive=s,u.newChatProactiveAction=!1,u.chatProactiveAction||(u.chatProactiveAction={type:"mouseOver"},u.title="CHAT.NEW_CHATPROACTIVEACTION",u.newChatProactiveAction=!0),t.params.id&&(u.chatProactiveAction.ChatWebsiteId=t.params.id),u.addNewChatProactiveAction=function(){u.errors=[],l.chatProactiveAction.save(u.chatProactiveAction).$promise.then(function(e){u.proactive.unshift(e.toJSON()),o.success({title:"ChatProactiveAction properly created",msg:u.chatProactiveAction.name?u.chatProactiveAction.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveChatProactiveAction=function(){u.errors=[],l.chatProactiveAction.update({id:u.chatProactiveAction.id},u.chatProactiveAction).$promise.then(function(e){var t=_.find(u.proactive,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatProactiveAction properly saved!",msg:u.chatProactiveAction.name?u.chatProactiveAction.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteChatProactiveAction=function(e){u.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(){l.chatProactiveAction.delete({id:u.chatProactiveAction.id}).$promise.then(function(){_.remove(u.proactive,{id:u.chatProactiveAction.id}),o.success({title:"ChatProactiveAction properly deleted!",msg:(u.chatProactiveAction.name||"chatProactiveAction")+" has been deleted!"}),p(u.chatProactiveAction)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","proactive","chatProactiveAction","api","Auth","license","setting"],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.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.chatWebsite=angular.copy(e),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,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.chatWebsite=d||e.params.chatWebsite||{},c.selectedTab=e.params.tab||0,c.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:c.chatWebsites?c.chatWebsites.rows:[],realtime:!1}})},c.alert=r.info,c.gotoChatWebsites=function(){e.go("app.chat.chatWebsites")},c.saveChatWebsite=function(){s.chatWebsite.update({id:c.chatWebsite.id},c.chatWebsite).$promise.then(function(){r.success({title:"ChatWebsite updated!",msg:c.chatWebsite.name?c.chatWebsite.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.template.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.templates=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtemplates",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){c.interval=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","chatWebsite"],angular.module("app.chat").controller("ChatWebsiteController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsChatRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.chatQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].ChatQueueId].paused++,u.queues[e[t].rows[n].ChatQueueId].loggedInDb++,u.queues[e[t].rows[n].ChatQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].ChatQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"chat",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.chatQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!1}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.ChatQueueId]&&u.queues[e.ChatQueueId].loggedInDb++},u.onRemoveMember=function(e){u.queues[e.ChatQueueId]&&u.queues[e.ChatQueueId].loggedInDb--},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.ChatQueueId]&&(u.queues[e.ChatQueueId].loggedInDb+=1,u.queues[e.ChatQueueId].agents[e.UserId]=e.ChatQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.ChatQueueId]&&0<u.queues[e.ChatQueueId].loggedInDb&&(u.queues[e.ChatQueueId].loggedInDb-=1,delete u.queues[e.ChatQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.on("chat_queue:save",u.onSave),d.on("userChatQueue:save",u.onSaveMember),d.on("userChatQueue:remove",u.onRemoveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.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","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,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.companies=r||{count:0,rows:[]},v.table="companies",v.listOrder="",v.listOrderAsc=null,v.selectedCompanies=[],v.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},v.editstate=function(e,t){n.go("app.contactmanager.companies.edit",{id:e.id,company:e})},v.gotocontactsgoto=function(e,t){n.go("app.contactmanager.contacts",{CompanyId:e.id})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the company?").htmlContent("<b>"+(e.name||"company")+"</b> will be deleted.").ariaLabel("delete company").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getCompanies=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.cmCompany.get(v.query,f).$promise},v.createOrEditCompany=function(e,t){i.show({controller:"CreateOrEditCompanyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/companies/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{company:t,companies:v.companies.rows,license:v.license,setting:v.setting}})},v.deleteCompany=A,v.exportSelectedCompanies=function(){var e=angular.copy(v.selectedCompanies);return v.selectedCompanies=[],e},v.deleteSelectedCompanies=function(e){var t=i.confirm().title("Are you sure want to delete the selected companies?").htmlContent("<b>"+v.selectedCompanies.length+" selected</b> will be deleted.").ariaLabel("delete Companys").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedCompanies.forEach(function(e){A(e)}),v.selectedCompanies=[]})},v.deselectCompanies=function(){v.selectedCompanies=[]},v.selectAllCompanies=function(){v.selectedCompanies=v.companies.rows};var h=!0,b=1;function f(e){v.companies=e||{count:0,rows:[]}}function A(e){l.cmCompany.delete({id:e.id}).$promise.then(function(){_.remove(v.companies.rows,{id:e.id}),v.companies.count-=1,v.companies.rows.length||v.getCompanies(),c.success({title:"Company deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmCompany"}];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:"SYSTEM:DELETEcmCompany",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getCompanies())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","companies","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("CompaniesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CONTACTMANAGER.EDIT_COMPANY",u.company=angular.copy(r),u.companies=s,u.newCompany=!1,u.company||(u.company={},u.title="CONTACTMANAGER.NEW_COMPANY",u.newCompany=!0),u.addNewCompany=function(){u.errors=[],l.cmCompany.save(u.company).$promise.then(function(e){u.companies.unshift(e.toJSON()),o.success({title:"Company properly created",msg:u.company.name?u.company.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveCompany=function(){u.errors=[],l.cmCompany.update({id:u.company.id},u.company).$promise.then(function(e){var t=_.find(u.companies,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Company properly saved!",msg:u.company.name?u.company.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteCompany=function(e){u.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(){l.cmCompany.delete({id:u.company.id}).$promise.then(function(){_.remove(u.companies,{id:u.company.id}),o.success({title:"Company properly deleted!",msg:(u.company.name||"company")+" has been deleted!"}),p(u.company)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","companies","company","api","Auth","license","setting"],angular.module("app.contactmanager").controller("CreateOrEditCompanyDialogController",e)}(),function(){"use strict";function e(n,e,t,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.company=d||n.params.company||{},c.selectedTab=n.params.tab||0,c.gotogoto=function(e,t){n.go("app.contactmanager.contacts",{CompanyId:e.id})},c.alert=r.info,c.gotoCompanies=function(){n.go("app.contactmanager.companies")},c.saveCompany=function(){s.cmCompany.update({id:c.company.id},c.company).$promise.then(function(){r.success({title:"Company updated!",msg:c.company.name?c.company.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","company"],angular.module("app.contactmanager").controller("CompanyController",e)}(),function(){"use strict";function e(t,i,n,a,o,s,e,r,l,d,c,m,u,p,g,v){var h=this;h.currentUser=p.getCurrentUser();h.license=v,h.ngFlowOptions={target:"api/cm/contacts/upload",singleFile:!0,maxChunkRetries:1,chunkSize:62914560,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},h.contacts=e||{count:0,rows:[]},h.options={hidden:!1,hover:!1,isOpen:!1},h.table="cm_contacts",h.selectedContacts=[],h.lists=r||{rows:[],count:0},h.companies=d||{rows:[],count:0},h.tags=m||{rows:[],count:0},h.listsMap=l,h.companiesMap=c,h.selectedTags=[],h.selectedList=null,h.selectedCompany=null,h.query=_.merge({includeAll:!0,sort:"-updatedAt",limit:10,offset:0,page:1},g),h.editdialog=function(e,t){a.go("app.contactmanager.contacts.edit",{id:e.id})},h.deleteconfirm=function(e,t){var n=o.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");o.show(n).then(function(){E(e)})},h.success=A,h.getContacts=function(){h.query.offset=(h.query.page-1)*h.query.limit,h.promise=s.cmContact.get(h.query,A).$promise},h.mergeContact=function(e,t){o.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",function(e){return e.resolve("cmList@get",{fields:"id,name"})}]},locals:{contacts:h.contacts.rows}})},h.duplicateContact=function(e,t){o.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",function(e){return e.resolve("cmList@get",{fields:"id,name"})}]},locals:{contacts:h.contacts.rows}})},h.createOrEditContact=function(e,t){t&&t.dateOfBirth&&(t.dateOfBirth=new Date(t.dateOfBirth));o.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:h.query.ListId||a.params.ListId,CompanyId:h.query.CompanyId||a.params.CompanyId,contact:t,contacts:h.contacts.rows,setting:null},resolve:{lists:["apiResolver",function(e){return e.resolve("cmList@get",{fields:"id,name"})}],companies:["apiResolver",function(e){return e.resolve("cmCompany@get",{fields:"id,name"})}]}})},h.deleteContact=E,h.exportSelectedContacts=function(){var e=angular.copy(h.selectedContacts);return h.selectedContacts=[],e},h.deleteSelectedContacts=function(e){var t=o.confirm().title("Are you sure want to delete the selected contacts?").htmlContent("<b>"+h.selectedContacts.length+" selected</b> will be deleted.").ariaLabel("delete Contacts").targetEvent(e).ok("OK").cancel("CANCEL");o.show(t).then(function(){h.selectedContacts.forEach(function(e){E(e)}),h.selectedContacts=[]})},h.deselectContacts=function(){h.selectedContacts=[]},h.selectAllContacts=function(){h.selectedContacts=h.contacts.rows},h.createTag=function(e){var t=o.prompt().title("What would you name your tag?").placeholder("Tag name").ariaLabel("Tag name").targetEvent(e).ok("Ok").cancel("Cancel");return o.show(t).then(function(e){if(e)return s.tag.save({name:e});u.error({title:"Error creating tag!",msg:"Invalid tag name."})}).then(function(e){e&&(h.tags.rows.push(e),u.success({title:"Tag properly created!",msg:e.tag?e.name+" has been created!":""}))})},h.createList=function(e){var t=o.prompt().title("What would you name your list?").placeholder("List name").ariaLabel("List name").targetEvent(e).ok("Ok").cancel("Cancel");return o.show(t).then(function(e){if(e)return s.cmList.save({name:e});u.error({title:"Error creating list!",msg:"Invalid list name."})}).then(function(e){e&&(h.lists.rows.push(e),u.success({title:"List properly created!",msg:e.name?e.name+" has been created!":""}))})},h.createCompany=function(e){var t=o.prompt().title("What would you name your company?").placeholder("Company name").ariaLabel("Company name").targetEvent(e).ok("Ok").cancel("Cancel");return o.show(t).then(function(e){if(e)return s.cmCompany.save({name:e});u.error({title:"Error creating company!",msg:"Invalid company name."})}).then(function(e){e&&(h.companies.rows.push(e),u.success({title:"Company properly created!",msg:e.name?e.name+" has been created!":""}))})},h.uploadContacts=function(e){o.show({controller:"UploadContactsDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/upload/upload.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!1,locals:{lists:r,companies:d}}).then(function(){h.getContacts()}).catch(function(e){console.error()})},h.importContacts=function(e,t,n){var a=JSON.parse(t);o.show({controller:"ImportContactsDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/import/import.html",parent:angular.element(i.body),clickOutsideToClose:!1,locals:{lists:r,companies:d,file:a.file,fields:a.fields,license:h.license}}).then(function(){h.getContacts()}).catch(function(e){console.error()})},h.hasPermission=function(){return p.hasPermission(303)||p.hasRole("admin")},a.params.ListId&&(h.selectedList=a.params.ListId),a.params.CompanyId&&(h.selectedCompany=a.params.CompanyId),t.$watch("vm.options.isOpen",function(e){e?n(function(){t.tooltipVisible=h.options.isOpen},600):t.tooltipVisible=h.options.isOpen});var b=!0,f=1;function A(e){h.contacts=e||{count:0,rows:[]}}function E(e){s.cmContact.delete({id:e.id}).$promise.then(function(){_.remove(h.contacts.rows,{id:e.id}),h.contacts.count-=1,h.contacts.rows.length||h.getContacts(),u.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){h.errors=e.data.errors||[{message:e.toString(),type:"api.contact.delete"}];for(var t=0;t<e.data.errors.length;t++)u.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else u.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){b?n(function(){b=!1}):(t||(f=h.query.page),e!==t&&(h.query.page=1),e||(h.query.page=f),h.getContacts())},!0),t.$watch("vm.selectedList",function(e,t){e!==t&&(h.query.ListId=h.selectedList||void 0,h.getContacts())}),t.$watch("vm.selectedCompany",function(e,t){e!==t&&(h.query.CompanyId=h.selectedCompany||void 0,h.getContacts())}),t.$watch("vm.selectedTags",function(e,t){(e.length||t.length)&&h.getContacts()})}e.$inject=["$scope","$document","$timeout","$state","$mdDialog","api","contacts","lists","listsMap","companies","companiesMap","tags","toasty","Auth","$stateParams","license"],angular.module("app.contactmanager").controller("ContactsController",e)}(),function(){"use strict";function e(n,a,e,t,i,o,s,r,l){var d=this;function c(){n.hide()}d.errors=[],d.title="CONTACTMANAGER.EDIT_CONTACT",d.contact=angular.copy(o),d.contacts=e||{rows:[],count:0},d.lists=t||{rows:[],count:0},d.companies=i||{rows:[],count:0},d.customFields={rows:[],count:0},d.newContact=!1,d.contact?(delete d.contact.List,d.ListId=d.contact.ListId||void 0):(d.contact={ListId:s?parseInt(s,10):void 0,CompanyId:r?parseInt(r,10):void 0},d.title="CONTACTMANAGER.NEW_CONTACT",d.newContact=!0),d.addNewContact=function(){d.errors=[],l.cmContact.save(d.contact).$promise.then(function(e){d.contacts.unshift(e),a.success({title:"Contact properly created",msg:d.contact.name?d.contact.name+" has been created!":""}),c()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.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()})})},d.saveContact=function(){d.errors=[],l.cmContact.update({id:d.contact.id},d.contact).$promise.then(function(e){var t=_.find(d.contacts,{id:e.id});t&&_.merge(t,e),a.success({title:"Contact properly saved!",msg:d.contact.name?d.contact.name+" has been saved!":""}),c()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.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()})})},d.deleteContact=function(e){d.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:d.contact.id}).$promise.then(function(){_.remove(d.contacts,{id:d.contact.id}),a.success({title:"Contact properly deleted!",msg:d.contact.name?d.contact.name+" has been deleted!":""}),c()}).catch(function(e){console.error(e),d.errors=e.data.errors||[{message:e.toString(),type:"api.contact.delete"}]})},function(){})},d.closeDialog=c,d.getCustomFields=function(e){{if(e)return l.cmList.getCustomFields({id:e}).$promise.then(function(e){e&&(d.customFields=e)}).catch(function(e){console.error(e)});d.customFields={rows:[],count:0}}},d.getDateFromString=function(e){return new Date(e)}}e.$inject=["$mdDialog","toasty","contacts","lists","companies","contact","ListId","CompanyId","api"],angular.module("app.tools").controller("CreateOrEditContactDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o){var s=this;function r(){e.hide()}s.errors=[],s.title="CONTACTMANAGER.COPY_CONTACT",s.contact=angular.copy(n),s.lists=i||{rows:[],count:0},s.addNewContact=function(){s.errors=[],delete s.contact.id,s.contact.tags&&!s.contact.tags.length&&delete s.contact.tags;o.cmContact.save(s.contact).$promise.then(function(e){a.unshift(e),t.success({title:"Contact properly created",msg:s.contact.name?s.contact.name+" has been created!":""}),r()}).catch(function(e){console.error(e),s.errors=e.data.errors||[{message:e.toString(),type:"api.contact.save"}]})},s.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,o,s,r){var l=this;function d(e){a.hide(e)}l.errors=[],l.title="CONTACTMANAGER.EDIT_HOPPER",l.hopper=angular.copy(s),l.hoppers=o,l.newHopper=!1,l.hopper||(l.hopper={},l.title="CONTACTMANAGER.NEW_HOPPER",l.newHopper=!0),l.saveHopper=function(){l.errors=[],r.cmHopper.update({id:l.hopper.id},l.hopper).$promise.then(function(e){var t=_.find(l.hoppers,{id:e.id});t&&_.merge(t,e),i.success({title:"Hopper properly saved!",msg:l.hopper.name?l.hopper.name+" has been saved!":""}),d(e)}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.update"}]})},l.getDateFromString=function(e){return new Date(e)},l.closeDialog=d}e.$inject=["$scope","$state","$location","$mdDialog","toasty","hoppers","hopper","api"],angular.module("app.contactmanager.contacts").controller("EditHopperDialogController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d,c,m,u,p,g,v,h,b){var f=this;f.license=b,f.journey=[],f.contact=r||{},f.hoppers=l||{rows:[],count:0},f.finals=d||{rows:[],count:0},f.histories=c||{rows:[],count:0},f.companies=u||{rows:[],count:0},f.lists=p||{rows:[],count:0},f.customFields=g||{rows:[],count:0},f.tags=v||{rows:[],count:0},f.jscriptySessions=h||{rows:[],count:0},f.timelineOptions={scrollEl:"#interaction-content"},f.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"),"")}),f.queryHopper={fields:"id,phone,scheduledat,priority,recallme,VoiceQueueId,CampaignId,UserId",sort:"-updatedAt",limit:10,page:1},f.queryFinal={fields:"id,uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-id",limit:10,page:1},f.queryHistory={fields:"id,uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-id",limit:10,page:1},f.queryJscriptySession={fields:"id,starttime,endtime,membername,projectname",sort:"-starttime",limit:10,page:1},f.selectedTab=t.params.tab||0,f.gotoContacts=function(){t.go("app.contactmanager.contacts",{},{reload:!0,notify:!0})},f.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",function(e){return e.resolve("cmList@get",{fields:"id,name"})}]},locals:{contacts:m.rows,contact:r}})},f.saveContact=function(){s.cmContact.update({id:f.contact.id},f.contact).$promise.then(function(){o.success({title:"Contact updated!",msg:f.contact.name?f.contact.name+" has been updated!":""})}).then(function(){return s.cmContact.setTags({id:f.contact.id,ids:f.Tags}).$promise}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEcontact",msg:e.data?JSON.stringify(e.data):e.toString()})})},f.editCompany=function(e,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},resolve:{company:["apiResolver",function(e){return e.resolve("cmCompany@get",{id:t})}]}})},f.onSelectList=function(e){if(f.contact.ListId){var t=i.confirm().title("You are selecting the list number: "+f.contact.ListId).textContent("Warning! You won't select a different list for the contact "+f.contact.firstName||f.contact.lastName||f.contact.id).targetEvent(e).ok("Ok").cancel("Cancel");return i.show(t).then(f.onSelectListSuccess).catch(function(){f.contact.ListId=null})}},f.onSelectListSuccess=function(){return s.cmList.getCustomFields({id:f.contact.ListId}).$promise.then(function(e){f.customFields=e||{rows:[],count:0}}).catch(function(e){console.error(e)})},f.getDateFromString=function(e){return new Date(e)},f.getHoppers=function(){f.queryHopper.offset=(f.queryHopper.page-1)*f.queryHopper.limit,f.queryHopper.id=f.contact.id,f.promise=s.cmContact.getHoppers(f.queryHopper,y("hoppers")).$promise},f.getFinals=function(){f.queryFinal.offset=(f.queryFinal.page-1)*f.queryFinal.limit,f.queryFinal.id=f.contact.id,f.promise=s.cmContact.getHopperFinals(f.queryFinal,y("finals")).$promise},f.getHistories=function(){f.queryHistory.offset=(f.queryHistory.page-1)*f.queryHistory.limit,f.queryHistory.id=f.contact.id,f.promise=s.cmContact.getHopperHistories(f.queryHistory,y("histories")).$promise},f.getJscriptySessions=function(){f.queryJscriptySession.offset=(f.queryJscriptySession.page-1)*f.queryJscriptySession.limit,f.queryJscriptySession.id=f.contact.id,f.promise=s.cmContact.getJscriptySessions(f.queryJscriptySession,y("jscriptySessions")).$promise},f.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,s.cmHopper.delete({id:e.id}).$promise.then(function(){_.remove(f.hoppers.rows,{id:e.id}),f.hoppers.count--,f.hoppers.rows.length||f.getHoppers(),o.success({title:"Hopper deleted!",msg:e.phone?e.phone+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEhopper",msg:e.data?JSON.stringify(e.data):e.toString()})})},function(){console.log("CANCEL")})},f.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:f.hoppers.rows,license:null,setting:null}})},f.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:f.hoppers.rows,license:null,setting:null}})},f.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 A=!0,E=1;function y(t){return function(e){f[t]=e||{count:0,rows:[]}}}function S(e){e&&e.count&&e.rows.length&&(f.journey=_.concat(f.journey,e.rows))}e.$watch("vm.queryHopper.filter",function(e,t){A?n(function(){A=!1}):(t||(E=f.queryHopper.page),e!==t&&(f.queryHopper.page=1),e||(f.queryHopper.page=E),f.getHoppers())}),e.$watch("vm.queryFinal.filter",function(e,t){A?n(function(){A=!1}):(t||(E=f.queryFinal.page),e!==t&&(f.queryFinal.page=1),e||(f.queryFinal.page=E),f.getFinals())}),e.$watch("vm.queryHistory.filter",function(e,t){A?n(function(){A=!1}):(t||(E=f.queryHistory.page),e!==t&&(f.queryHistory.page=1),e||(f.queryHistory.page=E),f.getHistories())}),s.user.get({fields:"id,fullname",nolimit:!0}).$promise.then(function(e){f.users=e||{count:0,rows:[]},f.usersMap=_.mapValues(_.keyBy(f.users.rows,"id"),"fullname"),f.Tags=_.map(f.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++)s[t[n]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(S);s.voiceCallReport.get({fields:"id,uniqueid,type,source,destination,callerid,starttime,endtime,duration,disposition,amaflags,note,UserId,ContactId",ContactId:e.id,includeAll:!0}).$promise.then(S).catch(function(e){console.error(e)})}}(r))}e.$inject=["$scope","$timeout","$state","$document","$mdDialog","toasty","api","contact","hoppers","finals","histories","contacts","companies","lists","customFields","tags","jscriptySessions","license"],angular.module("app.contactmanager.contacts").controller("ContactController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,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=o||{rows:[],count:0},g.companies=s||{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,o,t,s,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(s,{id:n.id}),_.remove(s,{id:t.id}),s.unshift(e)}).then(function(){o.success({title:"Contact properly merged!"})}).catch(function(e){e&&e.status&&o.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(e,t,n,a,i,o,s,r,l,d,c){var m=this,u=moment().unix();d.on("contact:csv_"+u,function(t){i(function(){m.uploading=!0,m.success+=t.success,m.errors+=t.errors,m.duplicate+=t.duplicates;for(var e=0;e<t.rows.length;e+=1)m.rows.push(t.rows[e]);t.finished&&(m.uploading=!1,m.finished=!0,m.disableStopButton=!0)})}),m.uploading=!1,m.showStopButton=!1,m.success=0,m.errors=0,m.duplicate=0,m.rows=[],m.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}],m.binding={},m.lists=o||{rows:[],count:0},m.companies=s||{rows:[],count:0},m.customFields={rows:[],count:0},m.ngFlowOptions={maxChunkRetries:1,chunkSize:15728640,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,target:"api/cm/contacts/csv",allowDuplicateUploads:!0},m.ngFlow={flow:{}},m.closeDialog=function(){d.removeAllListeners("contact:csv_"+u),t.hide()},m.onChangeList=function(){return l.cmList.getCustomFields({id:m.ListId}).$promise.then(function(e){m.customFields=e}).catch(function(e){console.error(e)})},m.uploadCsv=function(){m.uploading=!0,m.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},m.ngFlow.flow.opts.query={},m.ngFlow.flow.opts.query.binding_keys=_.keys(m.binding),m.ngFlow.flow.opts.query.binding_values=_.values(m.binding),m.ngFlow.flow.opts.query.ListId=m.ListId,m.ngFlow.flow.opts.query.socket_timestamp=u,m.CompanyId&&(m.ngFlow.flow.opts.query.CompanyId=m.CompanyId);m.duplicates&&(m.ngFlow.flow.opts.query.duplicates=m.duplicates);console.log("Flow options are:",m.ngFlow.flow.opts),m.ngFlow.flow.upload()},m.exportErrors=function(){for(var e=angular.copy(m.rows),t=0;t<e.length;t+=1)e[t].contact&&(e[t].contact=JSON.stringify(e[t].contact));return angular.copy(e)},m.fileAdded=function(e,t,n){Papa.parse(t.file,{skipEmptyLines:!0,header:!0,complete:function(e){console.log("csv file resultss",e),m.fields=e.meta.fields,m.fileSelected=!0,c.$apply()}})},m.fileSuccess=function(e,t,n){console.log("filessuccess",e,t,n);try{var a=JSON.parse(t);if(!a.pid)throw new Error("No pid parameter from api response!");m.pid=a.pid,m.showStopButton=!0}catch(e){console.error("Unable to parse upload result",e)}},m.stopUpload=function(){if(m.disableStopButton=!1,m.pid)return l.system.killProcess({pid:m.pid}).$promise.then(function(e){console.log("CSV upload process stopped!")}).catch(function(e){console.error(e)});console.error("pid is not defined")},c.$on("$destroy",function(){d.removeAllListeners("contact:csv_"+u)})}e.$inject=["$cookies","$mdDialog","$interval","$q","$timeout","lists","companies","toasty","api","socket","$scope"],angular.module("app.tools").controller("UploadContactsDialogController",e)}(),function(){"use strict";function e(a,e,t,n,i,o,s,r,l,d,c,m){var u=this;function p(e){n.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CONTACTMANAGER.EDIT_GLOBALCUSTOMFIELD",u.sortable={animation:800,sort:!0,onSort:function(e){a.globalCustomFieldForm.$pristine=!1}},u.globalCustomField=r,u.globalCustomFields=s,u.newGlobalCustomField=!1,u.globalCustomField||(u.globalCustomField={type:"text"},u.title="CONTACTMANAGER.NEW_GLOBALCUSTOMFIELD",u.newGlobalCustomField=!0),a.$watch("vm.globalCustomField.type",function(e,t){if(e!==t)switch(e){case"text":u.globalCustomField.values="";break;case"select":u.globalCustomField.values=[]}}),u.addNewGlobalCustomField=function(){u.errors=[],l.cmCustomField.save(u.globalCustomField).$promise.then(function(e){u.globalCustomFields.unshift(e.toJSON()),o.success({title:"GlobalCustomField properly created",msg:u.globalCustomField.name?u.globalCustomField.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveGlobalCustomField=function(){u.errors=[],l.cmCustomField.update({id:u.globalCustomField.id},u.globalCustomField).$promise.then(function(e){var t=_.find(u.globalCustomFields,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"GlobalCustomField properly saved!",msg:u.globalCustomField.name?u.globalCustomField.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteGlobalCustomField=function(e){u.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(){l.cmCustomField.delete({id:u.globalCustomField.id}).$promise.then(function(){_.remove(u.globalCustomFields,{id:u.globalCustomField.id}),o.success({title:"GlobalCustomField properly deleted!",msg:(u.globalCustomField.name||"globalCustomField")+" has been deleted!"}),p(u.globalCustomField)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,u.addItem=function(e){e.push({value:"New Item"}),a.globalCustomFieldForm.$pristine=!1},u.removeItem=function(e,t){e.splice(t,1),a.globalCustomFieldForm.$pristine=!1},u.removeItems=function(e){for(var t=e.length,n=0;n<t;n++)e.splice(0,1);a.globalCustomFieldForm.$pristine=!1}}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","globalCustomFields","globalCustomField","api","Auth","license","setting"],angular.module("app.contactmanager").controller("CreateOrEditGlobalCustomFieldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.globalCustomFields=r||{count:0,rows:[]},v.table="globalCustomFields",v.listOrder="",v.listOrderAsc=null,v.selectedGlobalCustomFields=[],v.query={fields:"createdAt,updatedAt,id,alias,type,values,required",sort:"-updatedAt",ListId:"null",limit:10,page:1},v.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"),"")}),v.editdialog=function(e,t){i.show({controller:"CreateOrEditGlobalCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/globalCustomFields/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{globalCustomField:e,globalCustomFields:v.globalCustomFields.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the globalCustomField?").htmlContent("<b>"+(e.name||"globalCustomField")+"</b> will be deleted.").ariaLabel("delete globalCustomField").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getGlobalCustomFields=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.cmCustomField.get(v.query,f).$promise},v.createOrEditGlobalCustomField=function(e,t){i.show({controller:"CreateOrEditGlobalCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/globalCustomFields/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{globalCustomField:t,globalCustomFields:v.globalCustomFields.rows,license:v.license,setting:v.setting}})},v.deleteGlobalCustomField=A,v.exportSelectedGlobalCustomFields=function(){var e=angular.copy(v.selectedGlobalCustomFields);return v.selectedGlobalCustomFields=[],e},v.deleteSelectedGlobalCustomFields=function(e){var t=i.confirm().title("Are you sure want to delete the selected globalCustomFields?").htmlContent("<b>"+v.selectedGlobalCustomFields.length+" selected</b> will be deleted.").ariaLabel("delete GlobalCustomFields").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedGlobalCustomFields.forEach(function(e){A(e)}),v.selectedGlobalCustomFields=[]})},v.deselectGlobalCustomFields=function(){v.selectedGlobalCustomFields=[]},v.selectAllGlobalCustomFields=function(){v.selectedGlobalCustomFields=v.globalCustomFields.rows};var h=!0,b=1;function f(e){v.globalCustomFields=e||{count:0,rows:[]}}function A(e){l.cmCustomField.delete({id:e.id}).$promise.then(function(){_.remove(v.globalCustomFields.rows,{id:e.id}),v.globalCustomFields.count-=1,v.globalCustomFields.rows.length||v.getGlobalCustomFields(),c.success({title:"GlobalCustomField deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmCustomField"}];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:"SYSTEM:DELETEcmCustomField",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getGlobalCustomFields())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","globalCustomFields","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("GlobalCustomFieldsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CONTACTMANAGER.EDIT_LIST",u.list=angular.copy(r),u.lists=s,u.newList=!1,u.list||(u.list={},u.title="CONTACTMANAGER.NEW_LIST",u.newList=!0),u.addNewList=function(){u.errors=[],l.cmList.save(u.list).$promise.then(function(e){u.lists.unshift(e.toJSON()),o.success({title:"List properly created",msg:u.list.name?u.list.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveList=function(){u.errors=[],l.cmList.update({id:u.list.id},u.list).$promise.then(function(e){var t=_.find(u.lists,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"List properly saved!",msg:u.list.name?u.list.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteList=function(e){u.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(){l.cmList.delete({id:u.list.id}).$promise.then(function(){_.remove(u.lists,{id:u.list.id}),o.success({title:"List properly deleted!",msg:(u.list.name||"list")+" has been deleted!"}),p(u.list)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","lists","list","api","Auth","license","setting"],angular.module("app.contactmanager").controller("CreateOrEditListDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.cmList[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.list.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserList?"penalty "+e.UserList.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserList?"penalty "+e.UserList.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.list=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("CONTACTMANAGER.ALL_AGENTS"),labelSelected:s.instant("CONTACTMANAGER.SELECTED_AGENTS"),transferCallback:function(e,t){a.cmList[t?"removeAgents":"addAgents"]({id:l.list.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"List properly "+(t?"removed":"added"),msg:"List has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:cmList.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","list","lists","realtime","$translate","Auth"],angular.module("app.contactmanager").controller("ListagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.list={},c.listCustomFields={count:0,rows:[]},c.selectedListCustomFields=[],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){c.list=e,c.query.id=c.list.id,c.query.ListId=c.list.id,c.getListCustomFields()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/customFields/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:c.list,customField:t,customFields:c.listCustomFields.rows,license:null,setting:null}})},c.exportSelectedListCustomFields=function(){var e=angular.copy(c.selectedListCustomFields);return c.selectedListCustomFields=[],e},c.deleteListCustomField=g,c.deleteSelectedListCustomFields=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){n.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CONTACTMANAGER.EDIT_CUSTOMFIELD",u.sortable={animation:800,sort:!0,onSort:function(e){a.customFieldForm.$pristine=!1}},u.customField=r,u.customFields=s,u.newCustomField=!1,u.customField||(u.customField={type:"text"},u.title="CONTACTMANAGER.NEW_CUSTOMFIELD",u.newCustomField=!0),e.params.id&&(u.customField.ListId=e.params.id),a.$watch("vm.customField.type",function(e,t){if(e!==t)switch(e){case"text":u.customField.values="";break;case"select":u.customField.values=[]}}),u.addNewCustomField=function(){u.errors=[],l.cmList.addCustomField({id:e.params.id},u.customField).$promise.then(function(e){u.customFields.unshift(e.toJSON()),o.success({title:"CustomField properly created",msg:u.customField.name?u.customField.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveCustomField=function(){u.errors=[],l.cmCustomField.update({id:u.customField.id},u.customField).$promise.then(function(e){var t=_.find(u.customFields,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CustomField properly saved!",msg:u.customField.name?u.customField.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteCustomField=function(e){u.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(){l.cmCustomField.delete({id:u.customField.id}).$promise.then(function(){_.remove(u.customFields,{id:u.customField.id}),o.success({title:"CustomField properly deleted!",msg:(u.customField.name||"customField")+" has been deleted!"}),p(u.customField)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,u.addItem=function(e){e.push({value:"New Item"}),a.customFieldForm.$pristine=!1},u.removeItem=function(e,t){e.splice(t,1),a.customFieldForm.$pristine=!1},u.removeItems=function(e){for(var t=e.length,n=0;n<t;n++)e.splice(0,1);a.customFieldForm.$pristine=!1}}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","customFields","customField","api","Auth","license","setting"],angular.module("app.contactmanager").controller("CreateOrEditCustomFieldDialogController",e)}(),function(){"use strict";function e(n,e,a,i,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.list=d||n.params.list||{},c.selectedTab=n.params.tab||0,c.gotogoto=function(e,t){n.go("app.contactmanager.contacts",{ListId:e.id})},c.agentadddialog=function(e,t){a.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:c.lists?c.lists.rows:[],realtime:!1}})},c.alert=r.info,c.gotoLists=function(){n.go("app.contactmanager.lists")},c.saveList=function(){s.cmList.update({id:c.list.id},c.list).$promise.then(function(){r.success({title:"List updated!",msg:c.list.name?c.list.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","list"],angular.module("app.contactmanager").controller("ListController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.list={},c.listVoiceDispositions={count:0,rows:[]},c.selectedListVoiceDispositions=[],c.query={fields:"createdAt,updatedAt,id,name,createdAt",limit:10,page:1},c.init=function(e){c.list=e,c.query.id=c.list.id,c.query.ListId=c.list.id,c.getListVoiceDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditVoiceDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/voiceDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:c.list,voiceDisposition:t,voiceDispositions:c.listVoiceDispositions.rows,license:null,setting:null}})},c.exportSelectedListVoiceDispositions=function(){var e=angular.copy(c.selectedListVoiceDispositions);return c.selectedListVoiceDispositions=[],e},c.deleteListVoiceDisposition=g,c.deleteSelectedListVoiceDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CONTACTMANAGER.EDIT_VOICEDISPOSITION",u.voiceDisposition=angular.copy(r),u.voiceDispositions=s,u.newVoiceDisposition=!1,u.voiceDisposition||(u.voiceDisposition={},u.title="CONTACTMANAGER.NEW_VOICEDISPOSITION",u.newVoiceDisposition=!0),t.params.id&&(u.voiceDisposition.ListId=t.params.id),u.addNewVoiceDisposition=function(){u.errors=[],l.disposition.save(u.voiceDisposition).$promise.then(function(e){u.voiceDispositions.unshift(e.toJSON()),o.success({title:"VoiceDisposition properly created",msg:u.voiceDisposition.name?u.voiceDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVoiceDisposition=function(){u.errors=[],l.disposition.update({id:u.voiceDisposition.id},u.voiceDisposition).$promise.then(function(e){var t=_.find(u.voiceDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceDisposition properly saved!",msg:u.voiceDisposition.name?u.voiceDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVoiceDisposition=function(e){u.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(){l.disposition.delete({id:u.voiceDisposition.id}).$promise.then(function(){_.remove(u.voiceDispositions,{id:u.voiceDisposition.id}),o.success({title:"VoiceDisposition properly deleted!",msg:(u.voiceDisposition.name||"voiceDisposition")+" has been deleted!"}),p(u.voiceDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","voiceDispositions","voiceDisposition","api","Auth","license","setting"],angular.module("app.contactmanager").controller("CreateOrEditVoiceDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.lists=r||{count:0,rows:[]},v.table="lists",v.listOrder="",v.listOrderAsc=null,v.selectedLists=[],v.query={fields:"createdAt,updatedAt,id,name,description,dialPrefix",sort:"-updatedAt",limit:10,page:1},v.editstate=function(e,t){n.go("app.contactmanager.lists.edit",{id:e.id,list:e})},v.gotocontactsgoto=function(e,t){n.go("app.contactmanager.contacts",{ListId:e.id})},v.exportcsvcontactsexport=function(i,e){return l.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 c.info({title:"EXPORT",msg:"The list is empty"})}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmList",msg:e.data?JSON.stringify(e.data):e.toString()})})},v.agentadddialog=function(e,t){i.show({controller:"ListagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{list:e,lists:v.lists?v.lists.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the list?").htmlContent("<b>"+(e.name||"list")+"</b> will be deleted.").ariaLabel("delete list").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getLists=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.cmList.get(v.query,f).$promise},v.createOrEditList=function(e,t){i.show({controller:"CreateOrEditListDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:t,lists:v.lists.rows,license:v.license,setting:v.setting}})},v.deleteList=A,v.exportSelectedLists=function(){var e=angular.copy(v.selectedLists);return v.selectedLists=[],e},v.deleteSelectedLists=function(e){var t=i.confirm().title("Are you sure want to delete the selected lists?").htmlContent("<b>"+v.selectedLists.length+" selected</b> will be deleted.").ariaLabel("delete Lists").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedLists.forEach(function(e){A(e)}),v.selectedLists=[]})},v.deselectLists=function(){v.selectedLists=[]},v.selectAllLists=function(){v.selectedLists=v.lists.rows};var h=!0,b=1;function f(e){v.lists=e||{count:0,rows:[]}}function A(e){l.cmList.delete({id:e.id}).$promise.then(function(){_.remove(v.lists.rows,{id:e.id}),v.lists.count-=1,v.lists.rows.length||v.getLists(),c.success({title:"List deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmList"}];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:"SYSTEM:DELETEcmList",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getLists())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","lists","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("ListsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s){var r=this;r.currentUser=o.getCurrentUser(),r.customDashboard={},r.voiceQueues=s&&s.count?s:{count:0,rows:[]},r.voiceQueuesSelected=s&&s.count?_.map(s.rows,"id"):[],r.interval=t(function(){},1e3),r.onChangeVoiceQueues=function(){for(var e=0;e<r.customDashboard.widgets.length;e+=1)r.customDashboard.widgets[e].voiceQueuesSelected=r.voiceQueuesSelected},r.goToEdit=function(){e.go("app.tools.customDashboards.edit",{id:r.customDashboard.id,tab:1})},i.onWithoutApply("voice_queue:save",function(e){var t=_.find(r.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 r.customDashboard=e,r.customDashboard.widgets=[],r.customDashboard.preview=!0,r.customDashboard.draggable={enabled:!1},r.customDashboard.resizable={enabled:!1},a.dashboard.getItems({id:r.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=r.voiceQueues,e.rows[t].voiceQueuesSelected=r.voiceQueuesSelected,r.customDashboard.widgets.push(e.rows[t])}).catch(function(e){r.customDashboard=void 0}),n.$on("$destroy",function(){i.removeAllListeners("voice_queue:save"),r.interval&&t.cancel(r.interval)})}e.$inject=["$state","$interval","$scope","api","socket","Auth","voiceQueues"],angular.module("app.dashboards.custom").controller("DashboardCustomController",e)}(),function(){"use strict";function e(e,n,a,s,i,t,l,o,r,d,c,m,u,p,g,v,h){var b=this;b.license=p,b.setting=g;function f(e){var t={};for(var n in b.tabs)b.tabs.hasOwnProperty(n)&&(t[n]=b.tabs[n],b.tabs[n].interaction&&(t[n].interaction=_.pick(b.tabs[n].interaction,["id","OpenchannelAccountId","MailAccountId","ChatWebsiteId","FaxAccountId","SmsAccountId","closed","draft"])));a.localStorage.setItem("motion2.user:"+b.user.id,JSON.stringify({tabs:t,currentTab:b.currentTab})),A(e)}function A(e){if(_.isNil(e)||e&&"interaction"===e.type){var t={id:b.user.id,online:!0,capacity:{mail:0,fax:0,sms:0,openchannel:0,chat:0},interaction:{mail:[],fax:[],sms:[],openchannel:[],chat:[]}};for(var n in b.tabs)b.tabs.hasOwnProperty(n)&&t.capacity.hasOwnProperty(b.tabs[n].channel)&&b.tabs[n].interaction&&!b.tabs[n].interaction.closed&&(t.capacity[b.tabs[n].channel]+=1,t.interaction[b.tabs[n].channel].push(b.tabs[n].interaction.id));return l.rpc.setAgentCapacity(t)}console.log("No capacity updated")}function E(t){if(b.tabs[t.id]&&(function(e){if(e.channel&&e.interaction)l.user["remove"+_.upperFirst(e.channel)+"Interactions"]({id:b.user.id,ids:[e.interaction.id]}).$promise.catch(function(e){console.error(e)})}(b.tabs[t.id]),delete b.tabs[t.id],b.currentTab=0,f(t),"interaction"===t.type))return l[t.channel+"Interaction"].get({id:t.interaction.id}).$promise.then(function(e){return l.user["remove"+_.upperFirst(t.channel)+"Interactions"]({id:b.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,b.tabs[e.id]=e,b.currentTab=e.id,f(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(b.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id===n.id&&e.channel===t});a?b.currentTab=a.id:y(e)}function T(e){e&&e.uniqueid&&b.notifications[e.uniqueid]&&(r.clear(b.notifications[e.uniqueid]),delete b.notifications[e.uniqueid])}function C(e,t){return 0<=t&&(e.calls[t].disposedAt=new Date,o.removeAllListeners("voice_queue_channel:remove"),o.removeAllListeners("voice_outbound_channel:remove"),!0)}function x(){return function(e){if(404===e.status)r.warning({title:s.instant("DASHBOARDS.ATTENTION"),msg:s.instant("DASHBOARDS.ACCEPT_ELSEWHERE")});else if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelMessage.accept"}];for(var t=0;t<e.data.errors.length;t+=1)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.openchannelMessage.accept",msg:e.data?JSON.stringify(e.data.message):e.toString()})}}b.detectBrowser=h.detectBrowser(),b.user=t.getCurrentUser(),b.currentTab=0,b.notifications={},b.tabs={},b.globalUserLists=d||{count:0,rows:[]},b.globalLists=c||{count:0,rows:[]},b.globalCompanies=m||{count:0,rows:[]},b.globalTags=u||{count:0,rows:[]},b.onContactManager=function(t){var e={ListId:t.ListId,limit:1,offset:0,sort:"-updatedAt"},n=!1,a=t.calleridname&&"<unknown>"!==t.calleridname?t.calleridname:t.calleridnum||t.uniqueid,i=t.calleridnum;_.isNil(t["xmd-contactid"])?_.isNil(t.routeId)?e.phone=t.calleridnum:(e.phone=t.destcalleridnum,a=t.destcalleridname&&"<unknown>"!==t.destcalleridname?t.destcalleridname:t.destcalleridnum||t.uniqueid,i=t.destcalleridnum):(e.id=t["xmd-contactid"],n=!0,_.isNil(t["xmd-listid"])||parseInt(t["xmd-listid"],10)===t.ListId||t["xmd-contactid2"]&&(e.id=t["xmd-contactid2"]));return l.cmContact.get(e).$promise.then(function(e){n?e&&b.addContactTab(e,t):e.count&&e.rows[0]?b.addContactTab(e.rows[0],t):b.addContactTab({firstName:a,ListId:t.ListId,phone:i},t)}).catch(x())},b.onJscripty=function(n){return l.jscriptyProject.get({id:n.ProjectId}).$promise.then(function(t){if(t){if(!_.isUndefined(n["xmd-contactid"]))return l.cmContact.get({id:n["xmd-contactid"]}).$promise.then(function(e){try{t.formData=Mustache.render(t.formData,_.merge(n,{user:b.user,contact:e}))}catch(e){console.error(e)}y({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n,contact:e})}).catch(x());try{t.formData=Mustache.render(t.formData,_.merge(n,{user:b.user}))}catch(e){console.error(e)}y({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n})}}).catch(x())},b.onBrowserUrl=function(e){if(e&&e.uri)if(e.uri=_.replace(e.uri,"&lt%3B",""),e.uri=_.replace(e.uri,"=&gt%3B=",""),e.uriLocation)switch(e.uriLocation){case"0":a.open(e.uri);break;case"1":a.open(e.uri,"_blank","width="+(e.windowWidth||"800")+",height="+e.windowHeight||"600");break;default:a.open(e.uri)}else a.open(e.uri)},b.onBrowserPopup=function(e){e&&e.html&&y({type:"popup",title:e.calleridnum||"popup",icon:"icon-tablet",color:"grey",html:e.html})},b.onNotificationSave=function(e){if(e&&e.uniqueid){n=e,v.isSupported()?v.requestPermission().then(function(){var e,t;t={autoClose:!0,duration:10,showOnPageHidden:!0,icon:"../../../../../../../assets/images/avatars/customer.png",body:(e=n).queue?"Queue: "+e.queue:"",focusOnclick:!0,closeOnClick:!0},v.show(e.title,t)},function(e){console.error("Please enable browser notifications!",e)}):console.error("Browser notifications are not supported by the browser. Normal notifications will be used.");var t=b.alreadyExistsTab(e);if(t){if(l[e.channel+"Message"])return b.currentTab!==t.id&&(t.badges+=1),l[e.channel+"Message"].accept({id:e.id,UserId:b.user.id}).$promise.catch(x())}else r.wait({title:e.title,msg:e.msg||"",showClose:!1,clickToClose:!1,timeout:!1,sound:e.sound,html:!0,shake:e.shake||!1,onAdd:function(){b.notifications[e.uniqueid]=this.id},onAccept:function(){if(T(e),l[e.channel+"Message"])return l[e.channel+"Message"].accept({id:e.id,UserId:b.user.id,manual:!0}).$promise.then(function(e){S(e.channel,e.interaction),r.success({title:"Message properly accepted!",msg:"Message has been accepted!"})}).catch(x())},onReject:function(){if(T(e),l[e.channel+"Message"])return l[e.channel+"Message"].reject({id:e.id,UserId:b.user.id}).$promise.then(function(e){r.success({title:"Message properly rejected!",msg:"Message has been rejected!"})}).catch(x())}})}var n},b.onNotificationRemove=T,b.onVoiceChannelRemove=function(t){var e=b.currentTab?b.tabs[b.currentTab]:null;e||(e=_.find(b.tabs,{calls:[{uniqueid:t.uniqueid}]}));var n=_.findLastIndex(e.calls,function(e){return e.uniqueid===t.uniqueid});if(!C(e,n)){var a=_.find(b.tabs,{calls:[{uniqueid:t.uniqueid}]});if(a){var i=_.findLastIndex(a.calls,function(e){return e.uniqueid===t.uniqueid});C(a,i)}}b.contact&&b.contact.id&&$timeout((o=t.uniqueid,s=b.contact.id,r=e,function(){var e=_.find(r.calls,function(e){return e.uniqueid===o});if(e)return l.voiceCallReport.update({id:o,ContactId:s}).$promise.catch(function(e){console.error(e)})}),1e3);var o,s,r},b.onClickTab=function(e){b.currentTab=e,f(b.tabs[e])},b.isActiveTab=function(e){return e===b.currentTab},b.alreadyExistsTab=function(t){return _.find(b.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id==t.interactionId&&e.channel==t.channel})},b.addContactTab=function(t,n){var a={type:"contact",title:t?function(e){var t="";e&&(e.firstName||e.lastName?(e.firstName&&(t+=e.firstName+" "),e.lastName&&(t+=e.lastName)):e.phone&&(t=e.phone));return t}(t):s.instant("DASHBOARDS.NEW_CONTACT"),icon:"icon-account-circle",color:"red",contact:t,userLists:d,lists:c,companies:m,tags:u,calls:n?[n]:[],autoCreate:n?n.autoCreate:0};if(n){if(n["xmd-cdrtype"]&&"dialer"===n["xmd-cdrtype"])n.answeredAt=n.agentcalledAt?moment(n.agentcalledAt,"YYYY-MM-DD HH:mm:ss").toDate():new Date;else if(n.uniqueid){var e=n.uniqueid.split(".")[0];n.answeredAt=e?new Date(1e3*parseInt(e)):new Date}(n.agentcompleteAt||n.endtime)&&(n.disposedAt=new Date)}if(t){var i=_.find(b.tabs,function(e){return e.contact&&e.contact.id?"contact"===e.type&&e.contact&&e.contact.id==t.id:"contact"===e.type&&e.contact&&e.contact.phone==t.phone});if(i){if(n)if(i.calls){var o=_.find(i.calls,function(e){return e.uniqueid===n.uniqueid});o||i.calls.push(n)}else i.calls=[n];b.currentTab=i.id}else{if(t.ListId)return l.disposition.get({ListId:t.ListId}).$promise.then(function(e){return a.dispositions=e,l.cmList.getCustomFields({id:t.ListId}).$promise}).then(function(e){a.customFields=e}).catch(x()).finally(function(){y(a)});y(a)}}else y(a)},b.addInteractionTab=S,b.addTab=y,b.removeTab=E,b.updateLocalStorage=f,b.closeTab=function(e){var t=n.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 n.show(t).then(function(){"interaction"===e.type&&n.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(i.body),clickOutsideToClose:!0,locals:{user:b.user,channel:e.channel,interaction:e.interaction}}),E(e)}).catch(function(){"interaction"===e.type&&E(e)});if("contact"===e.type&&0<e.calls.length)return t._options.textContent="There is a call that hasn't been disposed yet.",n.show(t).then(function(){E(e)});E(e)}},o.on("trigger:contactmanager",b.onContactManager),o.on("trigger:jscripty",b.onJscripty),o.on("trigger:browser:url",b.onBrowserUrl),o.on("trigger:browser:popup",b.onBrowserPopup),o.on("notification:save",b.onNotificationSave),o.on("notification:remove",b.onNotificationRemove),function(){var e=a.localStorage.getItem("motion2.user:"+b.user.id);if(e)try{e=JSON.parse(e),b.tabs=e.tabs?e.tabs:{},b.currentTab=e.currentTab?e.currentTab:0,A(b.tabs[b.currentTab])}catch(e){console.error(e)}}(),e.$on("$destroy",function(){for(var e in b.notifications)b.notifications.hasOwnProperty(e)&&T({uniqueid:e});o.removeAllListeners("trigger:contactmanager"),o.removeAllListeners("trigger:jscripty"),o.removeAllListeners("trigger:browser:url"),o.removeAllListeners("trigger:browser:popup"),o.removeAllListeners("notification:save"),o.removeAllListeners("notification: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 b={autoClose:!0,duration:5,showOnPageHidden:!1};return{config:function(e){for(var t in e)b.hasOwnProperty(t)&&null!=e[t]&&(b[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),o=!a.onClick||angular.isFunction(a.onClick),!i||!o)||function(e){if(e||b.showOnPageHidden)return!(window.document.hidden||window.document.mozHidden||window.document.webkitHidden)}(t.showOnPageHidden)||h()!==p.GRANTED)return;var n,a,i,o;var s=new g(e,t),r=t.duration||b.duration,l=void 0===t.autoClose?b.autoClose:t.autoClose;s.onclick=function(){t.onClick&&t.onClick(),t.focusOnclick&&window.focus(),t.closeOnClick&&s.close()},l&&(d=s,c=r,m=1e3*c,u(d.close.bind(d),m,!1));var d,c,m;return s},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,o=0;o<t.length;o++)if(t[o]._id===a){t=t[o].children,i=!1;break}if(i){var s={_id:a,_path:e.join("."),title:a,weight:1,children:[]};t.push(s),t=s.children}}return t}(n),o=!1,s=0;s<i.length;s++)if(i[s]._id===a){o=i[s];break}o?(angular.extend(o,t),o.uisref=d(o)):(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],o=0;o<t.length;o++)if(t[o]._id===i){if(t[o]._path===e)return t.splice(o,1),!0;t=t[o].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(s,r,n,l,d,c,t,e,a,i){var m=this;function o(e){e&&e.count&&e.rows.length&&(m.journey=_.concat(m.journey,e.rows))}m.user=t.getCurrentUser(),m.detectBrowser=i.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,t){if(m.newContact)return void c.error({title:"ATTENTION",msg:"Please save the contact before disposing!"});s.show({controller:"DisposeCallDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/contact/dispose/dialog.html",parent:angular.element(r.body),targetEvent:t,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:t}}).then(function(e){e&&("BLACKLIST"===e?c.success({title:a.instant("DASHBOARDS.INFO"),msg:a.instant("DASHBOARDS.CALL_DISPOSED")+" "+e}):"RECALLME"===e||"RESCHEDULE"===e||c.success({title:a.instant("DASHBOARDS.INFO"),msg:a.instant("DASHBOARDS.CALL_SAVED")})),_.remove(m.tab.calls,function(e){return e.uniqueid==t.uniqueid})})},m.duplicateContact=function(e){s.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){s.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){if(e)return new Date(e);return null},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 o=i.toLowerCase();s.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"==o?n:n.split(",")},type:"new",interaction:{Contact:m.contact}},fullscreen:!0}).then(function(a){return d[o+"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,s.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(o,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"===o?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(o);d.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(o).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},e.on("voice_queue_channel:remove",l.$parent.vm.onVoiceChannelRemove),e.on("voice_outbound_channel:remove",l.$parent.vm.onVoiceChannelRemove),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,o,s,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}}c.choice=null,c.isReschedule=!1,c.recallme=!1,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,s.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){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.getBlackLists",msg:e.data?JSON.stringify(e.data):e.toString()})})),c.saveDisposition=function(e){if(c.choice=_.isNil(e)?c.choice:e,c.call.note=c.note,s.voiceCallReport.update({id:c.call.uniqueid,userDisposition:c.choice,note:c.note,UserId:l.getCurrentUser().id,ContactId:c.contact.id}).$promise.catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICECALLREPORT",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.voiceRecording.get({uniqueid:c.call.uniqueid}).$promise.then(function(e){if(e)for(var t=0;t<e.rows.length;t+=1)s.voiceRecording.update({id:e.rows[t].id,userDisposition:c.choice}).$promise.catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICERECORDING",msg:e.data?JSON.stringify(e.data):e.toString()})})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICERECORDING",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.dialerCall)if(s.cmHopperFinal.update(m()).$promise.catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECMHOPPERFINAL",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.cmHopperHistory.update(m()).$promise.catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECMHOPPERHISTORY",msg:e.data?JSON.stringify(e.data):e.toString()})}),_.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)s.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(s.cmContact.save(a).$promise)}return i.all(t)}o.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){o.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():"")}else t.hide(c.choice?c.choice.toUpperCase():"")},c.closeDialog=function(){t.cancel()},c.saveReschedule=function(){return c.disable=!0,s.cmHopper.save({phone:c.contact.phone,UserId:c.recallme?l.getCurrentUser().id:null,ContactId:c.contact.id,ListId:c.contact.ListId,VoiceQueueId:Number(c.call["xmd-voicequeueid"]),scheduledat:moment(c.hopper.dateTime).format("YYYY-MM-DD HH:mm:ss"),priority:3,recallme:c.recallme}).$promise.then(function(){s.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(){o.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.cancel(e)}).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,o,s,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,s.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}).$promise.then(function(){s.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(){o.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,o,s,r,l,d,c){var m=this,u=!0;function p(){var e=i.localStorage.getItem("motion2.home.abandoned.bull.contacts:"+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")),s.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)}),s.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.getContacts()})}function g(e){m.contacts=e||{count:0,rows:[]},u=!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,dateEnd:null},m.queues={},m.contacts={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.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel={dateStart:null,dateEnd:null},m.getContacts()},m.getContacts=function(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&!u&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd);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.contacts:"+m.currentUser.id,JSON.stringify({query:_.omit(m.query,"queue")})),m.promise=s.voiceQueueReport.getVoiceQueuesReport(m.query,g).$promise},m.refreshContacts=function(){m.showTooltip=!1,m.getContacts()},m.onInit=p,m.reserved=function(e,t){e&&(m.disable[e.id]=!0,s.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.contacts.rows,["id",e.id]);0<=t&&_.merge(m.contacts.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),p();var v=!0,h=1;e.$watch("vm_bull.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.getContacts())}),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,o,s,r,l,d,c){var m=this,u=!0;function p(){var e=i.localStorage.getItem("motion2.home.abandoned.voice.contacts:"+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")),s.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)}),s.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.getContacts()})}function g(e){m.contacts=e||{count:0,rows:[]},u=!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,dateEnd:null},m.queues={},m.contacts={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.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel={dateStart:null,dateEnd:null},m.getContacts()},m.getContacts=function(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&!u&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd);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.contacts:"+m.currentUser.id,JSON.stringify({query:_.omit(m.query,"queue")})),m.promise=s.voiceQueueReport.getVoiceQueuesReport(m.query,g).$promise},m.refreshContacts=function(){m.showTooltip=!1,m.getContacts()},m.onInit=p,m.reserved=function(e,t){e&&(m.disable[e.id]=!0,s.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.contacts.rows,["id",e.id]);0<=t&&_.merge(m.contacts.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),p();var v=!0,h=1;e.$watch("vm_voice.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.getContacts())}),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,o,s){var r=this;r.user=i.getCurrentUser(),r.license={},r.plugin={},r.setting={},r.sidebar="dashboard",r.navigation=s.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,o,s,r,l,d){var c=this;function m(e){c.chatInteractions=e||{count:0,rows:[]};for(var t=0;t<c.chatInteractions.rows.length;t+=1)p(c.chatInteractions.rows[t])}function u(){c.query.dateStart=void 0,c.query.dateEnd=void 0,c.pickerModel.dateStart&&(c.query.dateStart=c.pickerModel.dateStart,c.query.dateEnd=c.pickerModel.dateEnd),c.chatAccounts.rows.length?(_.includes(_.map(c.chatAccounts.rows,"id"),c.query.account)||(c.query.account=null),c.query.ChatWebsiteId=c.query.account||_.map(c.chatAccounts.rows,"id").join()):c.query.ChatWebsiteId=-1,c.query.offset=(c.query.page-1)*c.query.limit,i.localStorage.setItem("motion2.home.chat:"+c.user.id,JSON.stringify({query:c.query})),c.promise=s.chatInteraction.get(c.query,m).$promise}function p(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}c.user=r.getCurrentUser(),c.license={},c.setting={},c.tags={count:0,rows:[]},c.chatInteractions={count:0,rows:[]},c.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null,account:null},c.success=m,c.getChatInteractions=u,c.showChatInteraction=function(e,t){n.$parent.vm.addInteractionTab("chat",t)},c.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 o.instant("DASHBOARDS.UNKNOWN")},c.getUserLabel=function(e){if(e.UserId)return e.UserId===r.getCurrentUser().id?o.instant("DASHBOARDS.ME"):c.usersByKey[e.UserId].fullname+" <"+c.usersByKey[e.UserId].internal+">";return o.instant("DASHBOARDS.NOT_ASSIGNED")},c.getChatWebsiteLabel=function(e){if(e.Account)return e.Account.key;return o.instant("DASHBOARDS.UNKNOWN")},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.clearAll=function(){c.calendarModel={dateStart:null},c.pickerModel={dateStart:null},c.serviceModel={dateStart:null},c.getChatInteractions()},c.onInit=function(e,t){return c.license=e,c.setting=t,s.user["get"+_.upperFirst("ChatWebsites")]({id:c.user.id,nolimit:!0}).$promise.then(function(e){return c.chatAccounts=e||{count:0,rows:[]},s.tag.get().$promise}).then(function(e){c.tags=e||{count:0,rows:[]}}).then(function(){return s.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){c.usersByKey=_.keyBy(e.rows,"id")}).catch(function(e){console.error(e)}).finally(function(){var e=i.localStorage.getItem("motion2.home.chat:"+c.user.id);if(e)try{(e=JSON.parse(e)).query&&(c.query=_.merge(c.query,e.query),c.query=_.omit(c.query,"filter"),c.query.sort&&0<=c.query.sort.indexOf("lastMessage")&&(c.query=_.omit(c.query,"sort")),c.query.includeAll=!0)}catch(e){console.error(e)}l.on("chatInteraction:save",c.onChatInteractionSave),l.on("chatInteraction:update",c.onChatInteractionSave),l.on("chatInteractionTags:save",c.onChatInteractionTagsSave),l.on("chatMessage:save",c.onChatMessageSave),l.on("chatMessage:update",c.onChatMessageSave),l.on("user_has_chat_interactions:save",c.onChatInteractionOpen),l.on("user_has_chat_interactions:remove",c.onChatInteractionClose),c.getChatInteractions()})},c.onChatInteractionSave=function(e){if(e){var t=_.find(c.chatInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):u(),p(e)}},c.onChatInteractionTagsSave=function(e){if(e){var t=_.find(c.chatInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},c.onChatMessageSave=function(e){if(e&&!e.secret){var t=_.find(c.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)),p(t)}}},c.onChatInteractionOpen=function(e){var t=_.find(c.chatInteractions.rows,{id:e.ChatInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},c.onChatInteractionClose=function(e){var t=_.find(c.chatInteractions.rows,{id:e.ChatInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},c.localizationMap={Today:o.instant("DASHBOARDS.TODAY"),Yesterday:o.instant("DASHBOARDS.YESTERDAY"),"This Week":o.instant("DASHBOARDS.THIS_WEEK"),"Last Week":o.instant("DASHBOARDS.LAST_WEEK"),"This Month":o.instant("DASHBOARDS.THIS_MONTH"),"Last Month":o.instant("DASHBOARDS.LAST_MONTH"),"This Year":o.instant("DASHBOARDS.THIS_YEAR"),"Last Year":o.instant("DASHBOARDS.LAST_YEAR"),January:o.instant("DASHBOARDS.JANUARY"),February:o.instant("DASHBOARDS.FEBRUARY"),March:o.instant("DASHBOARDS.MARCH"),April:o.instant("DASHBOARDS.APRIL"),May:o.instant("DASHBOARDS.MAY"),June:o.instant("DASHBOARDS.JUNE"),July:o.instant("DASHBOARDS.JULY"),August:o.instant("DASHBOARDS.AUGUST"),September:o.instant("DASHBOARDS.SEPTEMBER"),October:o.instant("DASHBOARDS.OCTOBER"),November:o.instant("DASHBOARDS.NOVEMBER"),December:o.instant("DASHBOARDS.DECEMBER"),Mon:o.instant("DASHBOARDS.MON"),Tue:o.instant("DASHBOARDS.TUE"),Wed:o.instant("DASHBOARDS.WED"),Thu:o.instant("DASHBOARDS.THU"),Fri:o.instant("DASHBOARDS.FRI"),Sat:o.instant("DASHBOARDS.SAT"),Sun:o.instant("DASHBOARDS.SUN")},c.pickerModel={dateStart:null};var g=!0,v=1;n.$watch("vm.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=v),c.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"],angular.module("app.dashboards").controller("AgentHomeChatController",e)}(),function(){"use strict";function e(n,t,a,i,e,o,s,r){var l=this;l.currentUser=o.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=s.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 s.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")),s.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,s.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,o,s,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=s.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),s.rpc.getVoiceQueues().$promise.then(function(e){return c.rpcVoiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},s.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,o,s,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=s.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),s.rpc.getChatQueues().$promise.then(function(e){return c.rpcChatQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},s.rpc.getChatQueuesWaitingInteractions().$promise}).then(function(e){_.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,b=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=b),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,o,s,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=s.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),s.rpc.getFaxQueues().$promise.then(function(e){return c.rpcFaxQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},s.rpc.getFaxQueuesWaitingInteractions().$promise}).then(function(e){_.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,b=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=b),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,o,s,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=s.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),s.rpc.getMailQueues().$promise.then(function(e){return c.rpcMailQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},s.rpc.getMailQueuesWaitingInteractions().$promise}).then(function(e){_.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,b=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=b),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,o,s,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=s.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),s.rpc.getOpenchannelQueues().$promise.then(function(e){return c.rpcOpenchannelQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},s.rpc.getOpenchannelQueuesWaitingInteractions().$promise}).then(function(e){_.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,b=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=b),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,o,s,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=s.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),s.rpc.getSmsQueues().$promise.then(function(e){return c.rpcSmsQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},s.rpc.getSmsQueuesWaitingInteractions().$promise}).then(function(e){_.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,b=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=b),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,o,s,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=s.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),s.rpc.getVoiceQueues().$promise.then(function(e){return c.rpcVoiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},s.rpc.getVoiceQueuesChannels().$promise}).then(function(e){c.rpcVoiceQueuesChannels=e?_.keyBy(e.rows?_.filter(e.rows,{type:"inbound",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("AgentHomeDashboardVoiceController",e)}(),function(){"use strict";function e(n,a,i,o,s,r,l,t,d,c){var m=this;function e(e){m.faxInteractions=e||{count:0,rows:[]};for(var t=0;t<m.faxInteractions.rows.length;t+=1)p(m.faxInteractions.rows[t])}function u(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd),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,s.localStorage.setItem("motion2.home.fax:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.faxInteraction.get(m.query,e).$promise}function p(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=e,m.getFaxInteractions=u,m.showFaxInteraction=function(e,t){n.$parent.vm.addInteractionTab("fax",t)},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(o.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=s.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))):u(),p(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)),p(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={Today:r.instant("DASHBOARDS.TODAY"),Yesterday:r.instant("DASHBOARDS.YESTERDAY"),"This Week":r.instant("DASHBOARDS.THIS_WEEK"),"Last Week":r.instant("DASHBOARDS.LAST_WEEK"),"This Month":r.instant("DASHBOARDS.THIS_MONTH"),"Last Month":r.instant("DASHBOARDS.LAST_MONTH"),"This Year":r.instant("DASHBOARDS.THIS_YEAR"),"Last Year":r.instant("DASHBOARDS.LAST_YEAR"),January:r.instant("DASHBOARDS.JANUARY"),February:r.instant("DASHBOARDS.FEBRUARY"),March:r.instant("DASHBOARDS.MARCH"),April:r.instant("DASHBOARDS.APRIL"),May:r.instant("DASHBOARDS.MAY"),June:r.instant("DASHBOARDS.JUNE"),July:r.instant("DASHBOARDS.JULY"),August:r.instant("DASHBOARDS.AUGUST"),September:r.instant("DASHBOARDS.SEPTEMBER"),October:r.instant("DASHBOARDS.OCTOBER"),November:r.instant("DASHBOARDS.NOVEMBER"),December:r.instant("DASHBOARDS.DECEMBER"),Mon:r.instant("DASHBOARDS.MON"),Tue:r.instant("DASHBOARDS.TUE"),Wed:r.instant("DASHBOARDS.WED"),Thu:r.instant("DASHBOARDS.THU"),Fri:r.instant("DASHBOARDS.FRI"),Sat:r.instant("DASHBOARDS.SAT"),Sun:r.instant("DASHBOARDS.SUN")},m.pickerModel={dateStart:null};var g=!0,v=1;n.$watch("vm.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),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"],angular.module("app.dashboards").controller("AgentHomeFaxController",e)}(),function(){"use strict";function e(a,n,i,o,s,r,l,t,d,c){var m=this;function e(e){m.mailInteractions=e||{count:0,rows:[]};for(var t=0;t<m.mailInteractions.rows.length;t+=1)p(m.mailInteractions.rows[t])}function u(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd),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,s.localStorage.setItem("motion2.home.mail:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.mailInteraction.get(m.query,e).$promise}function p(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=e,m.getMailInteractions=u,m.showMailInteraction=function(e,t){a.$parent.vm.addInteractionTab("mail",t)},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(o.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(o.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=s.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))):u(),p(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)),p(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={Today:r.instant("DASHBOARDS.TODAY"),Yesterday:r.instant("DASHBOARDS.YESTERDAY"),"This Week":r.instant("DASHBOARDS.THIS_WEEK"),"Last Week":r.instant("DASHBOARDS.LAST_WEEK"),"This Month":r.instant("DASHBOARDS.THIS_MONTH"),"Last Month":r.instant("DASHBOARDS.LAST_MONTH"),"This Year":r.instant("DASHBOARDS.THIS_YEAR"),"Last Year":r.instant("DASHBOARDS.LAST_YEAR"),January:r.instant("DASHBOARDS.JANUARY"),February:r.instant("DASHBOARDS.FEBRUARY"),March:r.instant("DASHBOARDS.MARCH"),April:r.instant("DASHBOARDS.APRIL"),May:r.instant("DASHBOARDS.MAY"),June:r.instant("DASHBOARDS.JUNE"),July:r.instant("DASHBOARDS.JULY"),August:r.instant("DASHBOARDS.AUGUST"),September:r.instant("DASHBOARDS.SEPTEMBER"),October:r.instant("DASHBOARDS.OCTOBER"),November:r.instant("DASHBOARDS.NOVEMBER"),December:r.instant("DASHBOARDS.DECEMBER"),Mon:r.instant("DASHBOARDS.MON"),Tue:r.instant("DASHBOARDS.TUE"),Wed:r.instant("DASHBOARDS.WED"),Thu:r.instant("DASHBOARDS.THU"),Fri:r.instant("DASHBOARDS.FRI"),Sat:r.instant("DASHBOARDS.SAT"),Sun:r.instant("DASHBOARDS.SUN")},m.pickerModel={dateStart:null};var g=!0,v=1;a.$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.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"],angular.module("app.dashboards").controller("AgentHomeMailController",e)}(),function(){"use strict";function e(n,a,i,o,e,t,s){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,s.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){o.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){o.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=s.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,o,s,r,l,t,d,c){var m=this;function e(e){m.openchannelInteractions=e||{count:0,rows:[]};for(var t=0;t<m.openchannelInteractions.rows.length;t+=1)p(m.openchannelInteractions.rows[t])}function u(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd),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,s.localStorage.setItem("motion2.home.openchannel:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.openchannelInteraction.get(m.query,e).$promise}function p(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=e,m.getOpenchannelInteractions=u,m.showOpenchannelInteraction=function(e,t){n.$parent.vm.addInteractionTab("openchannel",t)},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(o.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=s.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))):u(),p(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)),p(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={Today:r.instant("DASHBOARDS.TODAY"),Yesterday:r.instant("DASHBOARDS.YESTERDAY"),"This Week":r.instant("DASHBOARDS.THIS_WEEK"),"Last Week":r.instant("DASHBOARDS.LAST_WEEK"),"This Month":r.instant("DASHBOARDS.THIS_MONTH"),"Last Month":r.instant("DASHBOARDS.LAST_MONTH"),"This Year":r.instant("DASHBOARDS.THIS_YEAR"),"Last Year":r.instant("DASHBOARDS.LAST_YEAR"),January:r.instant("DASHBOARDS.JANUARY"),February:r.instant("DASHBOARDS.FEBRUARY"),March:r.instant("DASHBOARDS.MARCH"),April:r.instant("DASHBOARDS.APRIL"),May:r.instant("DASHBOARDS.MAY"),June:r.instant("DASHBOARDS.JUNE"),July:r.instant("DASHBOARDS.JULY"),August:r.instant("DASHBOARDS.AUGUST"),September:r.instant("DASHBOARDS.SEPTEMBER"),October:r.instant("DASHBOARDS.OCTOBER"),November:r.instant("DASHBOARDS.NOVEMBER"),December:r.instant("DASHBOARDS.DECEMBER"),Mon:r.instant("DASHBOARDS.MON"),Tue:r.instant("DASHBOARDS.TUE"),Wed:r.instant("DASHBOARDS.WED"),Thu:r.instant("DASHBOARDS.THU"),Fri:r.instant("DASHBOARDS.FRI"),Sat:r.instant("DASHBOARDS.SAT"),Sun:r.instant("DASHBOARDS.SUN")},m.pickerModel={dateStart:null};var g=!0,v=1;n.$watch("vm.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),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"],angular.module("app.dashboards").controller("AgentHomeOpenchannelController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l){var d=this;function c(e,t,n){d.license=e,d.setting=t,d.plugin=n}d.currentUser=s.getCurrentUser(),d.plugin={},d.onInit=c,d.getTrustedURL=function(){return o.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,o,s,r,l,d,c,m,u){var p=this;function g(e){p.voiceRecordings=e||{count:0,rows:[]}}p.currentUser=c.getCurrentUser(),p.voiceRecordings={},p.localizationMap=u,p.pickerModel={dateStart:null},p.table="voiceRecordings",p.query={UserId:p.currentUser.id,fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,rating,audio,UserId",sort:"-updatedAt",limit:10,page:1,type:null},p.downloadfile=function(i,e){return r.voiceRecording.download({id:i.id,exists:!0}).$promise.then(function(e){var t=[e.buffer],n=new Blob(t,{type:e.type}),a=window.document.createElement("a");a.setAttribute("href",URL.createObjectURL(n)),a.setAttribute("download",i.uniqueid+i.format),a.click()}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceRecording",msg:e.data?JSON.stringify(e.data):e.toString()})})},p.success=g,p.getVoiceRecordings=function(){p.query.dateStart=void 0,p.query.dateEnd=void 0,p.pickerModel.dateStart&&(p.query.dateStart=p.pickerModel.dateStart,p.query.dateEnd=p.pickerModel.dateEnd);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?s(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(n,a,i,o,s,r,l,t,d,c){var m=this;function e(e){m.smsInteractions=e||{count:0,rows:[]};for(var t=0;t<m.smsInteractions.rows.length;t+=1)p(m.smsInteractions.rows[t])}function u(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd),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,s.localStorage.setItem("motion2.home.sms:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.smsInteraction.get(m.query,e).$promise}function p(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=e,m.getSmsInteractions=u,m.showSmsInteraction=function(e,t){n.$parent.vm.addInteractionTab("sms",t)},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(o.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=s.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))):u(),p(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)),p(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={Today:r.instant("DASHBOARDS.TODAY"),Yesterday:r.instant("DASHBOARDS.YESTERDAY"),"This Week":r.instant("DASHBOARDS.THIS_WEEK"),"Last Week":r.instant("DASHBOARDS.LAST_WEEK"),"This Month":r.instant("DASHBOARDS.THIS_MONTH"),"Last Month":r.instant("DASHBOARDS.LAST_MONTH"),"This Year":r.instant("DASHBOARDS.THIS_YEAR"),"Last Year":r.instant("DASHBOARDS.LAST_YEAR"),January:r.instant("DASHBOARDS.JANUARY"),February:r.instant("DASHBOARDS.FEBRUARY"),March:r.instant("DASHBOARDS.MARCH"),April:r.instant("DASHBOARDS.APRIL"),May:r.instant("DASHBOARDS.MAY"),June:r.instant("DASHBOARDS.JUNE"),July:r.instant("DASHBOARDS.JULY"),August:r.instant("DASHBOARDS.AUGUST"),September:r.instant("DASHBOARDS.SEPTEMBER"),October:r.instant("DASHBOARDS.OCTOBER"),November:r.instant("DASHBOARDS.NOVEMBER"),December:r.instant("DASHBOARDS.DECEMBER"),Mon:r.instant("DASHBOARDS.MON"),Tue:r.instant("DASHBOARDS.TUE"),Wed:r.instant("DASHBOARDS.WED"),Thu:r.instant("DASHBOARDS.THU"),Fri:r.instant("DASHBOARDS.FRI"),Sat:r.instant("DASHBOARDS.SAT"),Sun:r.instant("DASHBOARDS.SUN")},m.pickerModel={dateStart:null};var g=!0,v=1;n.$watch("vm.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),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"],angular.module("app.dashboards").controller("AgentHomeSmsController",e)}(),function(){"use strict";function e(t,n,e,a,i,o,s,r,l,d){var c=this;function m(e){c.voiceCalls=e||{count:0,rows:[]}}c.currentUser=i.getCurrentUser(),c.voiceCalls={},c.localizationMap=d,c.pickerModel={dateStart:null},c.table="voiceCalls",c.query={UserId:c.currentUser.id,fields:"id,type,uniqueid,tag,starttime,endtime,source,destination,userDisposition,note,duration,billableseconds,answertime",sort:"-updatedAt",limit:10,page:1,type:null},c.success=m,c.getVoiceCalls=function(){c.query.dateStart=void 0,c.query.dateEnd=void 0,c.pickerModel.dateStart&&(c.query.dateStart=c.pickerModel.dateStart,c.query.dateEnd=c.pickerModel.dateEnd);c.query.offset=(c.query.page-1)*c.query.limit,s.localStorage.setItem("motion2.home.voice:"+c.currentUser.id,JSON.stringify({query:c.query})),c.promise=e.voiceCallReport.get(c.query,m).$promise},c.onInit=function(){return e.tag.get().$promise.then(function(e){c.tags=e||{count:0,rows:[]}}).catch(function(e){a.error({title:"Init error",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()}),c.tags={count:0,rows:[]}}).finally(function(){var e=s.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,o,s,r,l,d,c,m,u){var p=this;function g(){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 v(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&&b(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,p.interaction.closedAt=e.closedAt,g()):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 h(){"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 b(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="",h()})}function f(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 A(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={maxChunkRetries:1,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,singleFile:!0,target:"api/attachments",allowDuplicateUploads:!0},p.ngFlow={flow:{}},p.selectedMailShowDetails={},p.selectedMailShowSystemMessage={},p.setting={},p.ctrlMethods={},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(A);l.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(A)}}(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){console.error(e),p.showInteraction=!0}).finally(function(){!function(){if(!p.tab.spy)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))}(),h(),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.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{a.$parent.$parent.$parent.vm.addContactTab(t||p.contact)}catch(e){d.error({title:"ERROR OPEN CONTACT",msg:"Jscripty can't 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=g,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){v(t,e&&e.count?e.rows[0]:void 0)}).catch(function(e){console.error(e),v(t,void 0)});v(t,n)}else v(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&&b(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.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)return;b(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("fax"!==p.tab.channel)return!0;var t=["pdf","tif"];return!!_.includes(t,e.getExtension())||(d.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported only: "+t.join()}),!1)},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:s.protocol()+"://"+s.host())+"/api/chat/interactions/"+p.interaction.id+"/attachment_download?attachId="+n.id+"&token="+p.account.token+'" target="_self">'+n.name+"</a>");b({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),h())},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=o.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=f,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 f(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,substatusAt:Date.now()}).$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=o.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]),"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=[],o=0;o<e.length;o+=1){var s=!0;switch(t){case"voice":s=Boolean(e[o].uniqueid);break;case"chat":s=Boolean(e[o].ChatWebsiteId);break;case"mail":s=Boolean(e[o].MailAccountId);break;case"sms":s=Boolean(e[o].SmsAccountId);break;case"fax":s=Boolean(e[o].FaxAccountId);break;case"openchannel":s=Boolean(e[o].OpenchannelAccountId);break;default:s=!0}s&&n&&a&&(s=moment(e[o].createdAt).isBetween(n,a)),s&&i.push(e[o])}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,o,s,r,l,d){var c=this;c.separatorKeys=[a.KEY_CODE.ENTER,a.KEY_CODE.COMMA,a.KEY_CODE.TAB],c.fileAdded=function(e){var t=["pdf","tif"];return!!_.includes(t,e.getExtension())||(l.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported only: "+t.join()}),!1)},c.message={from:i.localstationid,to:_.isNil(o.to)||_.isEmpty(o.to)?[]:o.to,attachments:[]},c.ngFlowOptions={maxChunkRetries:1,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,singleFile:!0,target:"api/attachments",allowDuplicateUploads:!0},c.ngFlow={flow:{}},c.send=function(e){1===c.message.attachments.length?c.message.to.length?(o.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.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(){o.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,o,s,a,r,l,d,c,m){var u=this;switch(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:o.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:o,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:o.name,email:o.email||o.Smtp.user}),to:[],cc:[],bcc:[],body:v(),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:o.fontFamily?o.fontFamily.split(",")[0]:"Arial",fontSize_defaultLabel:o.fontSize||"12",removePlugins:"magicline"},u.ngFlowOptions={maxChunkRetries:1,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,singleFile:!0,target:"api/attachments",allowDuplicateUploads:!0},u.ngFlow={flow:{}},u.reply=function(e){angular.isDefined(s)&&(u.message.type="reply",u.message.to="in"===s.direction?s.from.split(","):s.to.split(","),u.message.subject=_.startsWith(s.subject,"Re:")?s.subject:"Re: "+s.subject,u.message.inReplyTo=s.messageId,u.message.body=s.draft&&s.draft.inReplyTo?s.draft.body:v(),u.message.attachments=s.draft?s.draft.attachments:[],e&&s.cc&&(u.hiddenCC=!1,u.message.cc=s.cc.split(",")),u.message.showLastMessage=!!s.draft&&s.draft.showLastMessage)},u.newMail=function(){angular.isDefined(s)&&(u.message.type="new",u.message.to=s.to?s.to.split(","):[])},u.forward=function(){if(angular.isDefined(s)){if(u.message.type="forward",u.message.subject=_.startsWith(s.subject,"Fwd:")?s.subject:"Fwd: "+s.subject,u.message.body=s.draft&&!s.draft.inReplyTo?s.draft.body:v(),s.Attachments&&s.Attachments.length)for(var e=0;e<s.Attachments.length;e++)u.message.attachments.push(s.Attachments[e]);u.message.showLastMessage=!!s.draft&&s.draft.showLastMessage}},u.send=function(e,t,n){if(u.message.to&&u.message.body)if(u.message.to.length)if(s.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(){p(t,n)})}else p(t,n);else l.error("To is mandatory")},u.note=function(){u.type="note",u.secret=!0,u.message.body='<div style="font-family:'+o.fontFamily+";font-size:"+o.fontSize+'px"><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.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 o&&o.ListId?r.cmContact.get({ListId:o.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(g(e))return e;for(var n=e.split(","),a=0;a<n.length;a+=1)g(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(s)&&(s.draft=u.message);i.cancel()},u.loadLastMessage=function(){u.message.body+=h(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 p(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+h(u.message.type),inReplyTo:u.message.inReplyTo,attach:u.message.attachments.length,attachments:u.message.attachments,Interaction:{lastMsgAt:moment().format("YYYY-MM-DD HH:mm:ss"),lastMsgDirection:"out",lastMsgBody:u.message.body,substatus:t,substatusAt:moment().format("YYYY-MM-DD HH:mm:ss")}};n.html='<div id="xm-mail-content">'+_.replace(n.body,'<div id="xm-mail-content"',"<div")+"</div>",e&&(n.Interaction.closed=!0,n.Interaction.closedAt=moment().format("YYYY-MM-DD HH:mm:ss")),i.hide(n)}function g(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 v(){return'<div style="font-family:'+o.fontFamily+";font-size:"+o.fontSize+'px">'+function(){if(_.isNil(o.template))return"";try{return _.template(o.template)({user:u.currentUser,account:o,interaction:m,contact:m&&m.Contact?m.Contact:{}})}catch(e){return console.error(e),""}}()+"</div>"}function h(e){var t,n,a='<div id="xm-mail-content"><blockquote type="cite">';switch(e){case"reply":case"replyAll":a+=u.replyTemplate({date:moment(s.createdAt).format("D MMM YYYY")||"",time:moment(s.createdAt).format("HH:mm")||"",from:_.escape(s.from)||""});break;case"forward":a+=u.forwardTemplate({date:moment(s.createdAt).format("D MMM YYYY")||"",time:moment(s.createdAt).format("HH:mm")||"",from:_.escape(s.from)||"",to:_.escape(s.to)||"",subject:_.escape(s.subject)||""})}return a+="<br><br>",a+=(t=s.body?_.replace(s.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:o.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,o,s,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:o.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:o};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:o.phone,to:_.isNil(s.to)||_.isEmpty(s.to)?[]:s.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[o.mapKey]&&(t+=e.firstName+" ");e.lastName&&e.lastName!==e[o.mapKey]&&(t+=e.lastName+" ");return t+="<"+e[o.mapKey]+">"},p.closeDialog=function(){a.cancel()},p.contactSearch=function(e){if(o&&o.ListId){var t="firstName,lastName,phone,mobile";return o.mapKey&&(t+=","+o.mapKey),l.cmContact.get({ListId:o.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[o.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,o,s,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:o.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:o};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:o.phone,to:_.isNil(s.to)||_.isEmpty(s.to)?[]:s.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(o&&o.ListId)return l.cmContact.get({ListId:o.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,o,s){var r=this;function l(e){t.hide(e)}r.errors=[],r.interaction=angular.copy(i),r.dispositions={count:0,rows:[]},r.globalDispositions={count:0,rows:[]},r.channel=o,r.interactionMethod=r.channel+"Interaction",r.interaction.disposition||(r.interaction.disposition=null),r.saveDisposition=function(e){r.errors=[],r.interaction.closed||(r.interaction.closedAt=Date.now());r.interaction.UserId=s.id,r.interaction.closed=!0,r.interaction.closeReason="agent",a[r.interactionMethod]?a[r.interactionMethod].update(_.pick(r.interaction,["MailAccountId","FaxAccountId","SmsAccountId","ChatWebsiteId","OpenchannelId","closed","closedAt","closeReason","disposition","id","note","UserId"])).$promise.then(function(e){r.interaction=e,n.success({title:"Interaction properly closed!",msg:"Interaction has been closed!"}),l(!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()})}):l(!1)},r.closeDialog=l,function(){var e={fields:"id,name",sort:"name",nolimit:!0};switch(o){case"chat":e.ChatWebsiteId=i.ChatWebsiteId;break;case"mail":case"sms":case"fax":case"openchannel":var t=_.capitalize(o)+"AccountId";e[t]=i[t]}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,o){var s=this;function r(e){t.hide(e)}s.errors=[],s.tags=o,s.interaction=angular.copy(a),s.interaction.Tags=_.map(s.interaction.Tags,function(e){return{id:e.id,name:e.name,color:e.color}}),s.channel=i,s.autocompleteRequireMatch=!0,s.saveTag=function(){{if(s.errors=[],e[s.interactionMethod])return e[s.interactionMethod].addTags({id:s.interaction.id,ids:_.map(s.interaction.Tags,"id")}).$promise.then(function(){n.success({title:"Interaction properly tagged!",msg:"Interaction has been tagged!"}),a.Tags=s.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)}},s.closeDialog=r,s.interactionMethod=s.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,o,s,r){var l=this;function d(e){t.hide(e)}l.currentUser=n.getCurrentUser(),l.channel=o.toLowerCase(),l.message=s,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,o,s,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 o=n[i].toString().split(";"),s=0;s<o.length;s+=1)l.jscriptyAnswerReport.save({question:t[i],questionId:a[i].id,answer:o[s].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=o.defer();if(t){var a=s.confirm().title("Would you like to save your survey?").textContent("").ariaLabel("survey").targetEvent(e).ok("YES").cancel("NO");s.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,o=m.project.formData.pages[n].elements.length;i<o;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=s.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"));s.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 o=this;function s(){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){o.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()})}}o.notification=e,o.user=i.getCurrentUser(),o.accept=function(e){{if(t[o.notification.channel+"Message"])return t[o.notification.channel+"Message"].accept({id:o.notification.id,UserId:o.user.id,manual:!0}).$promise.then(function(e){a.success({title:"Message properly accepted!",msg:"Message has been accepted!"})}).catch(s());a.error({title:"API:ERROR",msg:"API accept message not found: "+o.notification.channel+"Message"})}},o.reject=function(e){{if(t[o.notification.channel+"Message"])return t[o.notification.channel+"Message"].reject({id:o.notification.id,UserId:o.user.id}).$promise.then(function(e){a.success({title:"Message properly rejected!",msg:"Message has been rejected!"})}).catch(s());a.error({title:"API:ERROR",msg:"API reject message not found: "+o.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,o=[];function s(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(o,e.id)||(i.inbound.talking+=1,o.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)&&(s(e,!0),r())},i.onUpdateChatInteraction=function(e){l(e)&&d(e.createdAt)&&(s(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];s(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,o,s,r){var l=this;function d(){o({queues:l.outboundQueues,rpcQueues:l.rpcQueues}).then(function(e){l.inbound=e})}function c(){s({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,o=[];function s(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(o,e.id)||(i.inbound.talking+=1,o.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)&&(s(e,!0),r())},i.onUpdateFaxInteraction=function(e){l(e)&&d(e.createdAt)&&(s(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];s(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,o=[];function s(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(o,e.id)||(i.inbound.talking+=1,o.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)&&(s(e,!0),r())},i.onUpdateMailInteraction=function(e){l(e)&&d(e.createdAt)&&(s(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];s(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,o=[];function s(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(o,e.id)||(i.inbound.talking+=1,o.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)&&(s(e,!0),r())},i.onUpdateOpenchannelInteraction=function(e){l(e)&&d(e.createdAt)&&(s(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];s(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,o=[];function s(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(o,e.id)||(i.inbound.talking+=1,o.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)&&(s(e,!0),r())},i.onUpdateSmsInteraction=function(e){l(e)&&d(e.createdAt)&&(s(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];s(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 o=[],s=function(){var a=o[0],i={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(a.queues,function(e,t){if(a.rpcQueues[t]){i.waiting+=a.rpcQueues[t].waiting||0,i.talking+=(a.rpcQueues[t].talking||0)+(a.rpcQueues[t].pTalking||0),i.answered+=a.rpcQueues[t].answered||0,i.unmanaged+=a.rpcQueues[t].unmanaged||0,i.sumHoldTime+=a.rpcQueues[t].sumHoldTime||0,i.sumBillable+=a.rpcQueues[t].sumBillable||0,i.total+=a.rpcQueues[t].total||0,i.originated+=a.rpcQueues[t].originated||0,i.outboundDropCallsDayCallersExit+=a.rpcQueues[t].outboundDropCallsDayCallersExit||0,i.outboundDropCallsDayTimeout+=a.rpcQueues[t].outboundDropCallsDayTimeout||0;var n=a.rpcQueues[t].total-a.rpcQueues[t].answered-a.rpcQueues[t].unmanaged;i.abandoned+=0<n?n:0}}),i.avgHoldTime=Math.round(0<i.total?i.sumHoldTime/i.total:0),i.avgHoldTime=new Date(1e3*i.avgHoldTime).toISOString().substr(11,8),i.avgTalkTime=Math.round(0<i.answered?i.sumBillable/i.answered:0),i.avgTalkTime=new Date(1e3*i.avgTalkTime).toISOString().substr(11,8),i.answerRate=Math.round((0<i.total?i.answered/i.total*100:0)*Math.pow(10,1))/Math.pow(10,1),i.abandonRate=Math.round((0<i.total?i.abandoned/i.total*100:0)*Math.pow(10,1))/Math.pow(10,1),i.outboundDropRate=Math.round((0<i.total?i.outboundDropCallsDayTimeout/i.total*100:0)*Math.pow(10,1))/Math.pow(10,1),i.outboundAbandonRate=Math.round((0<i.total?i.outboundDropCallsDayCallersExit/i.total*100:0)*Math.pow(10,1))/Math.pow(10,1),i.outboundanswerRate=0<100-i.outboundDropRate-i.outboundAbandonRate&&i.total?100-i.outboundDropRate-i.outboundAbandonRate:0,o.shift(),a.defer.resolve(i),0<o.length&&s()};return function(e){var t=n.defer();return o.push({queues:e.queues,rpcQueues:e.rpcQueues,defer:t}),1===o.length&&s(),t.promise}}function t(n){var i=[],o=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&&o()};return function(e){var t=n.defer();return i.push({rpcCampaigns:e.rpcCampaigns,defer:t}),1===i.length&&o(),t.promise}}function n(e,s,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 o=[];r.license.voice&&o.push("app.dashboards.general.voice"),r.license.dialer&&o.push("app.dashboards.general.dialer"),r.license.chat&&o.push("app.dashboards.general.chat"),r.license.mail&&o.push("app.dashboards.general.mail"),r.license.messaging&&o.push("app.dashboards.general.sms"),r.license.openchannel&&o.push("app.dashboards.general.openchannel"),r.license.fax&&o.push("app.dashboards.general.fax"),r.selectedTab=_.indexOf(o,t.name),r.selectedTab<0&&(r.selectedTab=0)<o.length&&s.go(_.first(o))})}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,o){var s=this;function r(){o({queues:s.inboundQueues,rpcQueues:s.rpcQueues}).then(function(e){s.inbound=e})}s.inboundQueues=n?_.keyBy(n.rows?n.rows:[],"id"):{},s.rpcQueues=a?_.keyBy(a.rows?a.rows:[],"id"):{},s.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},s.outbound=i||{answered:0,sumBillable:0,sumDuration:0,sumHoldTime:0,total:0},s.onSaveQueue=function(e){s.inboundQueues[e.id]&&s.rpcQueues[e.id]&&(s.rpcQueues[e.id]=e,r())},s.onSaveOutbound=function(e){s.outbound=e},t.on("voice_queue:save",s.onSaveQueue),t.on("voice_outbound:save",s.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,o,i,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="FAX.EDIT_FAXACCOUNT",u.faxAccount=angular.copy(r),u.faxAccounts=s,u.newFaxAccount=!1,u.faxAccount||(u.faxAccount={waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},u.title="FAX.NEW_FAXACCOUNT",u.newFaxAccount=!0),t.params.id&&(u.faxAccount.FaxAccountId=t.params.id),u.addNewFaxAccount=function(){u.errors=[],l.faxAccount.addAccountApplications(u.faxAccount).$promise.then(function(e){var t="add"+_.upperFirst("faxAccount")+"s";return l.user[t]({id:d.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){u.faxAccounts.unshift(e.toJSON()),i.success({title:"FaxAccount properly created",msg:u.faxAccount.name?u.faxAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.save"}];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.faxAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveFaxAccount=function(){u.errors=[],l.faxAccount.updateAccountApplications(u.faxAccount).$promise.then(function(e){var t=_.find(u.faxAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),i.success({title:"FaxAccount properly saved!",msg:u.faxAccount.name?u.faxAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.update"}];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.faxAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteFaxAccount=function(e){u.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(){l.faxAccount.delete({id:u.faxAccount.id}).$promise.then(function(){return l.faxAccount.getAgents({id:u.faxAccount.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a="remove"+_.upperFirst("faxAccount")+"s",i=0;i<n.length;i++)t.push(l.user[a]({id:d.getCurrentUser().id,ids:[u.faxAccount.id]}).$promise);return o.all(t)}).then(function(){_.remove(u.faxAccounts,{id:u.faxAccount.id}),i.success({title:"FaxAccount properly deleted!",msg:(u.faxAccount.name||"faxAccount")+" has been deleted!"}),p(u.faxAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.delete"}];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.faxAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){i.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","toasty","faxAccounts","faxAccount","api","Auth","license","setting"],angular.module("app.fax").controller("CreateOrEditFaxAccountDialogController",e)}(),function(){"use strict";function e(s,i,a,o,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}}).then(function(e){e&&(e.id?r.faxAccountApps.rows[t]=e:r.faxAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&o.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=[],o=[];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=(o.length?_.last(o).priority:a.priority)+1,t=_.concat(t,i,[a],o)}s.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.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",route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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",route:"faxQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"user",filters:{fields:"id,name",sort:"name",role:"agent",nolimit:!0}}],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",route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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){r.faxAccount=e,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=s.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:[]}}).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(),o.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 s.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,n,a,t,i,o,s,r){var l=this;function d(){return a.faxAccount[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.faxAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserFaxAccount?"penalty "+e.UserFaxAccount.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserFaxAccount?"penalty "+e.UserFaxAccount.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.faxAccount=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("FAX.ALL_AGENTS"),labelSelected:s.instant("FAX.SELECTED_AGENTS"),transferCallback:function(e,t){a.faxAccount[t?"removeAgents":"addAgents"]({id:l.faxAccount.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"FaxAccount properly "+(t?"removed":"added"),msg:"FaxAccount has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:faxAccount.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","faxAccount","faxAccounts","realtime","$translate","Auth"],angular.module("app.fax").controller("FaxAccountagentaddController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(e.appType||e.app).toUpperCase(),o.agent=angular.copy(e),o.agent.appdata)switch(o.agent.appType?o.agent.appType.toLowerCase():o.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agent.appdata.split(",");o.agent.key=s[0],o.agent.language=s[1],o.agent.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agent.appdata.split(",");o.agent.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agent.text=s.slice(1,s.length).join(",");break;case"message":o.agent.text=o.agent.appdata;break;case"set":o.agent.name=o.agent.appdata.split("=")[0],o.agent.value=o.agent.appdata.split("=")[1];break;case"agi":o.agent.project=o.agent.appdata;break;default:var r=o.agent.appdata.split(",");o.agent.agent=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.agent.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.agent.timeout=30;function l(e){t.hide(e)}o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outbounddial"===o.agent.appType.toLowerCase()&&(o.agent.prefix=o.agent.phone?o.agent.phone.split("$")[0]:void 0,o.agent.callerId=o.agent.callerID?"CALLERID(all)="+o.agent.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outboundDial"===o.agent.appType&&(o.agent.phone=a.cutdigits?(o.agent.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agent.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agent.options+="U(xcally-mixmonitor-context)"):o.agent.options=o.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.agents,{name:o.agent.agent});t&&(o.agent.UserId=t.id);if(o.agent.appType&&"custom"===o.agent.appType);else switch((o.agent.app||o.agent.appType).toLowerCase()){case"set":o.agent.appdata=o.agent.name+"="+o.agent.value;break;case"custom":break;default:e[0]=o.agent.agent,e[1]=o.agent.timeout,o.agent.appdata=e.join(",")}l(o.agent)},o.closeDialog=l,i.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){o.agents=e.rows||[]}).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","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(n.appType||n.app).toUpperCase(),o.close=angular.copy(n),o.close.appdata)switch(o.close.appType?o.close.appType.toLowerCase():o.close.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.close.appdata.split(",");o.close.key=s[0],o.close.language=s[1],o.close.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.close.appdata.split(",");o.close.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.close.text=s.slice(1,s.length).join(",");break;case"message":o.close.text=o.close.appdata;break;case"set":o.close.name=o.close.appdata.split("=")[0],o.close.value=o.close.appdata.split("=")[1];break;case"agi":o.close.project=o.close.appdata;break;default:var r=o.close.appdata.split(",");o.close.disposition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outbounddial"===o.close.appType.toLowerCase()&&(o.close.prefix=o.close.phone?o.close.phone.split("$")[0]:void 0,o.close.callerId=o.close.callerID?"CALLERID(all)="+o.close.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outboundDial"===o.close.appType&&(o.close.phone=a.cutdigits?(o.close.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.close.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.close.options+="U(xcally-mixmonitor-context)"):o.close.options=o.close.options.replace("U(xcally-mixmonitor-context)",""));if(o.close.appType&&"custom"===o.close.appType);else switch((o.close.app||o.close.appType).toLowerCase()){case"set":o.close.appdata=o.close.name+"="+o.close.value;break;case"custom":break;default:e[0]=o.close.disposition,o.close.appdata=e.join(",")}l(o.close)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotoif=angular.copy(n),o.gotoif.appdata)switch(o.gotoif.appType?o.gotoif.appType.toLowerCase():o.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotoif.appdata.split(",");o.gotoif.key=s[0],o.gotoif.language=s[1],o.gotoif.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotoif.appdata.split(",");o.gotoif.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotoif.text=s.slice(1,s.length).join(",");break;case"message":o.gotoif.text=o.gotoif.appdata;break;case"set":o.gotoif.name=o.gotoif.appdata.split("=")[0],o.gotoif.value=o.gotoif.appdata.split("=")[1];break;case"agi":o.gotoif.project=o.gotoif.appdata;break;default:var r=o.gotoif.appdata.split(",");o.gotoif.condition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.gotoif.truepriority=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.gotoif.falsepriority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outbounddial"===o.gotoif.appType.toLowerCase()&&(o.gotoif.prefix=o.gotoif.phone?o.gotoif.phone.split("$")[0]:void 0,o.gotoif.callerId=o.gotoif.callerID?"CALLERID(all)="+o.gotoif.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outboundDial"===o.gotoif.appType&&(o.gotoif.phone=a.cutdigits?(o.gotoif.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotoif.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotoif.options+="U(xcally-mixmonitor-context)"):o.gotoif.options=o.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotoif.appType&&"custom"===o.gotoif.appType);else switch((o.gotoif.app||o.gotoif.appType).toLowerCase()){case"set":o.gotoif.appdata=o.gotoif.name+"="+o.gotoif.value;break;case"custom":break;default:e[0]=o.gotoif.condition,e[1]=o.gotoif.truepriority,e[2]=o.gotoif.falsepriority,o.gotoif.appdata=e.join(",")}l(o.gotoif)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotop=angular.copy(n),o.gotop.appdata)switch(o.gotop.appType?o.gotop.appType.toLowerCase():o.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotop.appdata.split(",");o.gotop.key=s[0],o.gotop.language=s[1],o.gotop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotop.appdata.split(",");o.gotop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotop.text=s.slice(1,s.length).join(",");break;case"message":o.gotop.text=o.gotop.appdata;break;case"set":o.gotop.name=o.gotop.appdata.split("=")[0],o.gotop.value=o.gotop.appdata.split("=")[1];break;case"agi":o.gotop.project=o.gotop.appdata;break;default:var r=o.gotop.appdata.split(",");o.gotop.priority=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outbounddial"===o.gotop.appType.toLowerCase()&&(o.gotop.prefix=o.gotop.phone?o.gotop.phone.split("$")[0]:void 0,o.gotop.callerId=o.gotop.callerID?"CALLERID(all)="+o.gotop.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outboundDial"===o.gotop.appType&&(o.gotop.phone=a.cutdigits?(o.gotop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotop.options+="U(xcally-mixmonitor-context)"):o.gotop.options=o.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotop.appType&&"custom"===o.gotop.appType);else switch((o.gotop.app||o.gotop.appType).toLowerCase()){case"set":o.gotop.appdata=o.gotop.name+"="+o.gotop.value;break;case"custom":break;default:e[0]=o.gotop.priority,o.gotop.appdata=e.join(",")}l(o.gotop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditFaxAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(n.appType||n.app).toUpperCase(),o.noop=angular.copy(n),o.noop.appdata)switch(o.noop.appType?o.noop.appType.toLowerCase():o.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.noop.appdata.split(",");o.noop.key=s[0],o.noop.language=s[1],o.noop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.noop.appdata.split(",");o.noop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.noop.text=s.slice(1,s.length).join(",");break;case"message":o.noop.text=o.noop.appdata;break;case"set":o.noop.name=o.noop.appdata.split("=")[0],o.noop.value=o.noop.appdata.split("=")[1];break;case"agi":o.noop.project=o.noop.appdata;break;default:var r=o.noop.appdata.split(",");o.noop.value=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outbounddial"===o.noop.appType.toLowerCase()&&(o.noop.prefix=o.noop.phone?o.noop.phone.split("$")[0]:void 0,o.noop.callerId=o.noop.callerID?"CALLERID(all)="+o.noop.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outboundDial"===o.noop.appType&&(o.noop.phone=a.cutdigits?(o.noop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.noop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.noop.options+="U(xcally-mixmonitor-context)"):o.noop.options=o.noop.options.replace("U(xcally-mixmonitor-context)",""));if(o.noop.appType&&"custom"===o.noop.appType);else switch((o.noop.app||o.noop.appType).toLowerCase()){case"set":o.noop.appdata=o.noop.name+"="+o.noop.value;break;case"custom":break;default:e[0]=o.noop.value,o.noop.appdata=e.join(",")}l(o.noop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.queue.queue=300,o.queue.timeout=300;function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.queues,{name:o.queue.queue});t&&(o.queue[_.capitalize("fax")+"QueueId"]=t.id);if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.timeout,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.faxQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(e.appType||e.app).toUpperCase(),o.system=angular.copy(e),o.system.appdata)switch(o.system.appType?o.system.appType.toLowerCase():o.system.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.system.appdata.split(",");o.system.key=s[0],o.system.language=s[1],o.system.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.system.appdata.split(",");o.system.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.system.text=s.slice(1,s.length).join(",");break;case"message":o.system.text=o.system.appdata;break;case"set":o.system.name=o.system.appdata.split("=")[0],o.system.value=o.system.appdata.split("=")[1];break;case"agi":o.system.project=o.system.appdata;break;default:var r=o.system.appdata.split(",");o.system.command=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.system.variable=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.system.variable="";function l(e){t.hide(e)}o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outbounddial"===o.system.appType.toLowerCase()&&(o.system.prefix=o.system.phone?o.system.phone.split("$")[0]:void 0,o.system.callerId=o.system.callerID?"CALLERID(all)="+o.system.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outboundDial"===o.system.appType&&(o.system.phone=a.cutdigits?(o.system.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.system.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.system.options+="U(xcally-mixmonitor-context)"):o.system.options=o.system.options.replace("U(xcally-mixmonitor-context)",""));if(o.system.appType&&"custom"===o.system.appType);else switch((o.system.app||o.system.appType).toLowerCase()){case"set":o.system.appdata=o.system.name+"="+o.system.value;break;case"custom":break;default:e[0]=o.system.command,e[1]=o.system.variable,o.system.appdata=e.join(",")}l(o.system)},o.closeDialog=l,i.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(e.appType||e.app).toUpperCase(),o.tag=angular.copy(e),o.tag.appdata)switch(o.tag.appType?o.tag.appType.toLowerCase():o.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.tag.appdata.split(",");o.tag.key=s[0],o.tag.language=s[1],o.tag.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.tag.appdata.split(",");o.tag.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.tag.text=s.slice(1,s.length).join(",");break;case"message":o.tag.text=o.tag.appdata;break;case"set":o.tag.name=o.tag.appdata.split("=")[0],o.tag.value=o.tag.appdata.split("=")[1];break;case"agi":o.tag.project=o.tag.appdata;break;default:var r=o.tag.appdata.split(",");o.tag.tag=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outbounddial"===o.tag.appType.toLowerCase()&&(o.tag.prefix=o.tag.phone?o.tag.phone.split("$")[0]:void 0,o.tag.callerId=o.tag.callerID?"CALLERID(all)="+o.tag.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outboundDial"===o.tag.appType&&(o.tag.phone=a.cutdigits?(o.tag.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.tag.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.tag.options+="U(xcally-mixmonitor-context)"):o.tag.options=o.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.tags,{name:o.tag.tag});t&&(o.tag.TagId=t.id);if(o.tag.appType&&"custom"===o.tag.appType);else switch((o.tag.app||o.tag.appType).toLowerCase()){case"set":o.tag.appdata=o.tag.name+"="+o.tag.value;break;case"custom":break;default:e[0]=o.tag.tag,o.tag.appdata=e.join(",")}l(o.tag)},o.closeDialog=l,i.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountApptagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.faxAccount={},c.faxAccountFaxDispositions={count:0,rows:[]},c.selectedFaxAccountFaxDispositions=[],c.query={fields:"createdAt,updatedAt,id,name,createdAt",limit:10,page:1},c.init=function(e){c.faxAccount=e,c.query.id=c.faxAccount.id,c.query.FaxAccountId=c.faxAccount.id,c.getFaxAccountFaxDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditFaxDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/faxDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:c.faxAccount,faxDisposition:t,faxDispositions:c.faxAccountFaxDispositions.rows,license:null,setting:null}})},c.exportSelectedFaxAccountFaxDispositions=function(){var e=angular.copy(c.selectedFaxAccountFaxDispositions);return c.selectedFaxAccountFaxDispositions=[],e},c.deleteFaxAccountFaxDisposition=g,c.deleteSelectedFaxAccountFaxDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="FAX.EDIT_FAXDISPOSITION",u.faxDisposition=angular.copy(r),u.faxDispositions=s,u.newFaxDisposition=!1,u.faxDisposition||(u.faxDisposition={},u.title="FAX.NEW_FAXDISPOSITION",u.newFaxDisposition=!0),t.params.id&&(u.faxDisposition.FaxAccountId=t.params.id),u.addNewFaxDisposition=function(){u.errors=[],l.disposition.save(u.faxDisposition).$promise.then(function(e){u.faxDispositions.unshift(e.toJSON()),o.success({title:"FaxDisposition properly created",msg:u.faxDisposition.name?u.faxDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveFaxDisposition=function(){u.errors=[],l.disposition.update({id:u.faxDisposition.id},u.faxDisposition).$promise.then(function(e){var t=_.find(u.faxDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FaxDisposition properly saved!",msg:u.faxDisposition.name?u.faxDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteFaxDisposition=function(e){u.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(){l.disposition.delete({id:u.faxDisposition.id}).$promise.then(function(){_.remove(u.faxDispositions,{id:u.faxDisposition.id}),o.success({title:"FaxDisposition properly deleted!",msg:(u.faxDisposition.name||"faxDisposition")+" has been deleted!"}),p(u.faxDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","faxDispositions","faxDisposition","api","Auth","license","setting"],angular.module("app.fax").controller("CreateOrEditFaxDispositionDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.faxAccount={},c.faxAccountInteractions={count:0,rows:[]},c.selectedFaxAccountInteractions=[],c.query={fields:"createdAt,updatedAt,id,createdAt,Contact.firstName,Owner.name,closedAt,disposition,note,UserId,ContactId,FaxAccountId,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e){c.faxAccount=e,c.query.id=c.faxAccount.id,c.getFaxAccountInteractions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},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){o.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/interactions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:c.faxAccount,interaction:t,interactions:c.faxAccountInteractions.rows,license:null,setting:null}})},c.spyfaxInteraction=function(e,n){o.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(s.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=o.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");o.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,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.faxAccount=d||n.params.faxAccount||{},c.selectedTab=n.params.tab||0,c.gotogoto=function(e,t){n.go("app.fax.realtime.accounts",{})},c.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:c.faxAccounts?c.faxAccounts.rows:[],realtime:!1}})},c.alert=r.info,c.gotoFaxAccounts=function(){n.go("app.fax.faxAccounts")},c.saveFaxAccount=function(){s.faxAccount.updateAccountApplications(c.faxAccount).$promise.then(function(){r.success({title:"FaxAccount updated!",msg:c.faxAccount.name?c.faxAccount.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.trunks=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","license","setting","api","toasty","Auth","faxAccount"],angular.module("app.fax").controller("FaxAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.faxAccounts=r||{count:0,rows:[]},v.table="faxAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedFaxAccounts=[],v.query={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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},v.arrayecm=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.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"),"")}),v.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"),"")}),v.arrayacceptMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayrejectMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraycloseMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.fax.faxAccounts.edit",{id:e.id,faxAccount:e})},v.interactionsgoto=function(e,t){n.go("app.fax.faxAccounts.edit",{id:e.id,tab:5})},v.gotorealtimegoto=function(e,t){n.go("app.fax.realtime.accounts",{})},v.agentadddialog=function(e,t){i.show({controller:"FaxAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxAccount:e,faxAccounts:v.faxAccounts?v.faxAccounts.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the faxAccount?").htmlContent("<b>"+(e.name||"faxAccount")+"</b> will be deleted.").ariaLabel("delete faxAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getFaxAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.faxAccount.get(v.query,f).$promise},v.createOrEditFaxAccount=function(e,t){i.show({controller:"CreateOrEditFaxAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:t,faxAccounts:v.faxAccounts.rows,license:v.license,setting:v.setting}})},v.deleteFaxAccount=A,v.exportSelectedFaxAccounts=function(){var e=angular.copy(v.selectedFaxAccounts);return v.selectedFaxAccounts=[],e},v.deleteSelectedFaxAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected faxAccounts?").htmlContent("<b>"+v.selectedFaxAccounts.length+" selected</b> will be deleted.").ariaLabel("delete FaxAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedFaxAccounts.forEach(function(e){A(e)}),v.selectedFaxAccounts=[]})},v.deselectFaxAccounts=function(){v.selectedFaxAccounts=[]},v.selectAllFaxAccounts=function(){v.selectedFaxAccounts=v.faxAccounts.rows},l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.trunks=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.faxAccounts=e||{count:0,rows:[]}}function A(e){l.faxAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.faxAccounts.rows,{id:e.id}),v.faxAccounts.count-=1,v.faxAccounts.rows.length||v.getFaxAccounts(),c.success({title:"FaxAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEfaxAccount"}];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:"SYSTEM:DELETEfaxAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getFaxAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","faxAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.fax").controller("FaxAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="FAX.EDIT_FAXQUEUE",u.faxQueue=angular.copy(r),u.faxQueues=s,u.newFaxQueue=!1,u.faxQueue||(u.faxQueue={strategy:"beepall",timeout:10},u.title="FAX.NEW_FAXQUEUE",u.newFaxQueue=!0),u.addNewFaxQueue=function(){u.errors=[],l.faxQueue.save(u.faxQueue).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"fax",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.faxQueues.unshift(e.toJSON()),o.success({title:"FaxQueue properly created",msg:u.faxQueue.name?u.faxQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveFaxQueue=function(){u.errors=[],l.faxQueue.update({id:u.faxQueue.id},u.faxQueue).$promise.then(function(e){var t=_.find(u.faxQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FaxQueue properly saved!",msg:u.faxQueue.name?u.faxQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteFaxQueue=function(e){u.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(){l.faxQueue.delete({id:u.faxQueue.id}).$promise.then(function(){return l.faxQueue.getAgents({id:u.faxQueue.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.faxQueue.id],channel:"fax",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.faxQueues,{id:u.faxQueue.id}),o.success({title:"FaxQueue properly deleted!",msg:(u.faxQueue.name||"faxQueue")+" has been deleted!"}),p(u.faxQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","faxQueues","faxQueue","api","Auth","license","setting"],angular.module("app.fax").controller("CreateOrEditFaxQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.faxQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.faxQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserFaxQueue?"penalty "+e.UserFaxQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserFaxQueue?"penalty "+e.UserFaxQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.faxQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("FAX.ALL_AGENTS"),labelSelected:s.instant("FAX.SELECTED_AGENTS"),transferCallback:function(e,t){a.faxQueue[t?"removeAgents":"addAgents"]({id:l.faxQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"FaxQueue properly "+(t?"removed":"added"),msg:"FaxQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:faxQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","faxQueue","faxQueues","realtime","$translate","Auth"],angular.module("app.fax").controller("FaxQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.faxQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("FAX.ALL_TEAMS"),labelSelected:i.instant("FAX.SELECTED_TEAMS"),transferCallback:function(e,t){a.faxQueue[t?"removeTeams":"addTeams"]({id:o.faxQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:faxQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.faxQueue.getTeams({id:o.faxQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","faxQueue","$translate"],angular.module("app.fax").controller("FaxQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.faxQueue=d||e.params.faxQueue||{},c.selectedTab=e.params.tab||0,c.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:c.faxQueues?c.faxQueues.rows:[]}})},c.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:c.faxQueues?c.faxQueues.rows:[],realtime:!1}})},c.alert=r.info,c.gotoFaxQueues=function(){e.go("app.fax.faxQueues")},c.saveFaxQueue=function(){s.faxQueue.update({id:c.faxQueue.id},c.faxQueue).$promise.then(function(){r.success({title:"FaxQueue updated!",msg:c.faxQueue.name?c.faxQueue.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","faxQueue"],angular.module("app.fax").controller("FaxQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.faxQueues=r||{count:0,rows:[]},v.table="faxQueues",v.listOrder="",v.listOrderAsc=null,v.selectedFaxQueues=[],v.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"fax",limit:10,page:1},v.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.fax.faxQueues.edit",{id:e.id,faxQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"FaxQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:v.faxQueues?v.faxQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"FaxQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:v.faxQueues?v.faxQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the faxQueue?").htmlContent("<b>"+(e.name||"faxQueue")+"</b> will be deleted.").ariaLabel("delete faxQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.fax.realtime.queues",{})},v.success=f,v.getFaxQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.faxQueue.get(v.query,f).$promise},v.createOrEditFaxQueue=function(e,t){i.show({controller:"CreateOrEditFaxQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxQueue:t,faxQueues:v.faxQueues.rows,license:v.license,setting:v.setting}})},v.deleteFaxQueue=A,v.exportSelectedFaxQueues=function(){var e=angular.copy(v.selectedFaxQueues);return v.selectedFaxQueues=[],e},v.deleteSelectedFaxQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected faxQueues?").htmlContent("<b>"+v.selectedFaxQueues.length+" selected</b> will be deleted.").ariaLabel("delete FaxQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedFaxQueues.forEach(function(e){A(e)}),v.selectedFaxQueues=[]})},v.deselectFaxQueues=function(){v.selectedFaxQueues=[]},v.selectAllFaxQueues=function(){v.selectedFaxQueues=v.faxQueues.rows};var h=!0,b=1;function f(e){v.faxQueues=e||{count:0,rows:[]}}function A(e){l.faxQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.faxQueues.rows,{id:e.id}),v.faxQueues.count-=1,v.faxQueues.rows.length||v.getFaxQueues(),c.success({title:"FaxQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEfaxQueue"}];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:"SYSTEM:DELETEfaxQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getFaxQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","faxQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.fax").controller("FaxQueuesController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d){var c=this;function m(){_.forIn(c.faxAccounts,function(e,t){c.rpcFaxAccounts[t]&&_.merge(e,c.rpcFaxAccounts[t])}),_.forIn(c.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")};o.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",o.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)})})}c.count=l&&l.count?l.count:0,c.faxAccounts=l?_.keyBy(l.rows?l.rows:[],"id"):{},c.rpcFaxAccounts=d?_.keyBy(d.rows?d.rows:[],"id"):{},c.query={sort:"-name",limit:10,page:1},c.success=g,c.$onInit=m,c.getFaxAccounts=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.faxAccount.get(c.query,g).$promise},c.onSave=function(e){c.faxAccounts[e.id]&&_.merge(c.faxAccounts[e.id],e)},c.onFaxMessageSave=function(e){c.faxAccounts[e.FaxAccountId]&&("in"==e.direction?(c.faxAccounts[e.FaxAccountId].in+=1,c.faxAccounts[e.FaxAccountId].lastIn=e.createdAt):(c.faxAccounts[e.FaxAccountId].out+=1,c.faxAccounts[e.FaxAccountId].lastOut=e.createdAt))},c.goToFaxAccount=function(e,t){i.go("app.fax.faxAccounts.edit",{id:t.id,faxAccount:t})},c.order=[],_.forIn(c.faxAccounts,function(e,t){c.order.push(e.id)}),s.on("faxAccount:save",c.onSave),s.on("faxAccount:update",c.onSave),s.on("faxMessage:save",c.onFaxMessageSave);var u=!0,p=1;function g(e){if(c.faxAccounts=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){c.order=[];for(var t=0;t<e.rows.length;t++)c.order.push(e.rows[t].id)}m()}e.$watch("vm.query.filter",function(e,t){u?n(function(){u=!1}):(t||(p=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=p),c.getFaxAccounts())}),e.$on("$destroy",function(){s.removeAllListeners("faxAccount:save"),s.removeAllListeners("faxAccount:update"),s.removeAllListeners("faxMessage:save")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$state","api","socket","toasty","faxAccounts","rpcFaxAccounts"],angular.module("app.fax").controller("FaxAccountsRealtimeController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsFaxRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.faxQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].FaxQueueId].paused++,u.queues[e[t].rows[n].FaxQueueId].loggedInDb++,u.queues[e[t].rows[n].FaxQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].FaxQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"fax",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.faxQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!1}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.FaxQueueId]&&u.queues[e.FaxQueueId].loggedInDb++},u.onRemoveMember=function(e){u.queues[e.FaxQueueId]&&u.queues[e.FaxQueueId].loggedInDb--},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.FaxQueueId]&&(u.queues[e.FaxQueueId].loggedInDb+=1,u.queues[e.FaxQueueId].agents[e.UserId]=e.FaxQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.FaxQueueId]&&0<u.queues[e.FaxQueueId].loggedInDb&&(u.queues[e.FaxQueueId].loggedInDb-=1,delete u.queues[e.FaxQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.on("fax_queue:save",u.onSave),d.on("userFaxQueue:save",u.onSaveMember),d.on("userFaxQueue:remove",u.onRemoveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.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","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,o,s,r,l){var d=this,c=["status","stateRegistry","registry","host","port","internal","state","status"];function m(){for(var e,t=0;t<d.trunks.length;t+=1)0<=(e=_.findIndex(d.rpcTrunks,["id",d.trunks[t].id]))&&_.merge(d.trunks[t],_.pick(d.rpcTrunks[e],c))}function u(e,t,n){0<=t&&_.merge(e[t],_.pick(n,c))}d.count=a.count,d.trunks=a?a.rows:[],d.rpcTrunks=i&&i.rows?i.rows:[],d.query={fields:"id,name",active:!0,sort:"-updatedAt",limit:10,page:1},d.statusClass=r.status,d.stateClass=r.state,d.success=v,d.$onInit=m,d.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},d.getTrunks=function(){d.query.offset=(d.query.page-1)*d.query.limit,d.promise=o.trunk.get(d.query,v).$promise},d.goToTrunk=function(e,t){l.go("app.tools.trunks.edit",{id:t.id})},d.onSave=function(e){var t=_.findIndex(d.trunks,["id",e.id]),n=_.findIndex(d.rpcTrunks,["id",e.id]);u(d.trunks,t,e),u(d.rpcTrunks,n,e)},s.on("trunk:save",d.onSave);var p=!0,g=1;function v(e){d.count=e.count,d.trunks=e&&e.rows?e.rows:[],m()}e.$watch("vm.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=d.query.page),e!==t&&(d.query.page=1),e||(d.query.page=g),d.getTrunks())}),e.$on("$destroy",function(){s.removeAllListeners("trunk:save")})}e.$inject=["$scope","$timeout","$mdDialog","trunks","rpcTrunks","api","socket","helperClasses","$state"],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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_DESKACCOUNT",u.deskAccount=angular.copy(r),u.deskAccounts=s,u.newDeskAccount=!1,u.deskAccount||(u.deskAccount={type:"integrationTab",authType:"basic",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_DESKACCOUNT",u.newDeskAccount=!0),u.addNewDeskAccount=function(){u.errors=[],l.intDeskAccount.save(u.deskAccount).$promise.then(function(e){u.deskAccounts.unshift(e.toJSON()),o.success({title:"DeskAccount properly created",msg:u.deskAccount.name?u.deskAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveDeskAccount=function(){u.errors=[],l.intDeskAccount.update({id:u.deskAccount.id},u.deskAccount).$promise.then(function(e){var t=_.find(u.deskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"DeskAccount properly saved!",msg:u.deskAccount.name?u.deskAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteDeskAccount=function(e){u.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(){l.intDeskAccount.delete({id:u.deskAccount.id}).$promise.then(function(){_.remove(u.deskAccounts,{id:u.deskAccount.id}),o.success({title:"DeskAccount properly deleted!",msg:(u.deskAccount.name||"deskAccount")+" has been deleted!"}),p(u.deskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","deskAccounts","deskAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditDeskAccountDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.deskAccounts=r||{count:0,rows:[]},v.table="deskAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedDeskAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",limit:10,page:1},v.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayauthType=_.keyBy([{option:"Basic",value:"'basic'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.integrations.deskAccounts.edit",{id:e.id,deskAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intDeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"DeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"DeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the deskAccount?").htmlContent("<b>"+(e.name||"deskAccount")+"</b> will be deleted.").ariaLabel("delete deskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getDeskAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intDeskAccount.get(v.query,f).$promise},v.createOrEditDeskAccount=function(e,t){i.show({controller:"CreateOrEditDeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{deskAccount:t,deskAccounts:v.deskAccounts.rows,license:v.license,setting:v.setting}})},v.deleteDeskAccount=A,v.exportSelectedDeskAccounts=function(){var e=angular.copy(v.selectedDeskAccounts);return v.selectedDeskAccounts=[],e},v.deleteSelectedDeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected deskAccounts?").htmlContent("<b>"+v.selectedDeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete DeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedDeskAccounts.forEach(function(e){A(e)}),v.selectedDeskAccounts=[]})},v.deselectDeskAccounts=function(){v.selectedDeskAccounts=[]},v.selectAllDeskAccounts=function(){v.selectedDeskAccounts=v.deskAccounts.rows};var h=!0,b=1;function f(e){v.deskAccounts=e||{count:0,rows:[]}}function A(e){l.intDeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.deskAccounts.rows,{id:e.id}),v.deskAccounts.count-=1,v.deskAccounts.rows.length||v.getDeskAccounts(),c.success({title:"DeskAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintDeskAccount"}];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:"SYSTEM:DELETEintDeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getDeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","deskAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("DeskAccountsController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intDeskField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.deskAccount={},s.deskConfiguration={},s.configurations=[],s.selectedDeskConfiguration=-1,s.init=function(e){s.deskAccount=e,i.intDeskAccount.getConfigurations({id:s.deskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getDeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getDeskConfiguration=function(e){s.deskConfiguration=s.configurations[e],s.selectedDeskConfiguration=e,i.intDeskConfiguration.getSubjects({id:s.deskConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intDeskConfiguration.getDescriptions({id:s.deskConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intDeskConfiguration.getFields({id:s.deskConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intDeskConfiguration.getTags({id:s.deskConfiguration.id}).$promise.then(function(e){s.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getDeskConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"DeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getDeskConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.deskConfiguration.id},s.deskConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedTags=[],s.selectTagsChanged=function(e){i.intDeskConfiguration.setTags({id:s.deskConfiguration.id,ids:s.selectedTags}).$promise.then(function(){o.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){o.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){s.tags=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.selectedSubjects=[],s.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:s.subjects,configuration:s.deskConfiguration,account:s.deskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.deskConfiguration,account:s.deskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.deskConfiguration,account:s.deskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_DESKCONFIGURATION",u.deskConfiguration=angular.copy(r),u.configurations=s,u.newDeskConfiguration=!1,u.deskConfiguration||(u.deskConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_DESKCONFIGURATION",u.newDeskConfiguration=!0),u.addNewDeskConfiguration=function(){u.errors=[],l.intDeskAccount.addConfiguration({id:t.params.id},u.deskConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"DeskConfiguration properly created",msg:u.deskConfiguration.name?u.deskConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveDeskConfiguration=function(){u.errors=[],l.intDeskConfiguration.update({id:u.deskConfiguration.id},u.deskConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"DeskConfiguration properly saved!",msg:u.deskConfiguration.name?u.deskConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteDeskConfiguration=function(e){u.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(){l.intDeskConfiguration.delete({id:u.deskConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.deskConfiguration.id}),o.success({title:"DeskConfiguration properly deleted!",msg:(u.deskConfiguration.name||"deskConfiguration")+" has been deleted!"}),p(u.deskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","deskConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditDeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intDeskField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intDeskField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditDeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.deskAccount=d||e.params.deskAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoDeskAccounts=function(){e.go("app.integrations.deskAccounts")},c.saveDeskAccount=function(){s.intDeskAccount.update({id:c.deskAccount.id},c.deskAccount).$promise.then(function(){r.success({title:"DeskAccount updated!",msg:c.deskAccount.name?c.deskAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","deskAccount"],angular.module("app.integrations").controller("DeskAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_FRESHDESKACCOUNT",u.freshdeskAccount=angular.copy(r),u.freshdeskAccounts=s,u.newFreshdeskAccount=!1,u.freshdeskAccount||(u.freshdeskAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_FRESHDESKACCOUNT",u.newFreshdeskAccount=!0),u.addNewFreshdeskAccount=function(){u.errors=[],l.intFreshdeskAccount.save(u.freshdeskAccount).$promise.then(function(e){u.freshdeskAccounts.unshift(e.toJSON()),o.success({title:"FreshdeskAccount properly created",msg:u.freshdeskAccount.name?u.freshdeskAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveFreshdeskAccount=function(){u.errors=[],l.intFreshdeskAccount.update({id:u.freshdeskAccount.id},u.freshdeskAccount).$promise.then(function(e){var t=_.find(u.freshdeskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FreshdeskAccount properly saved!",msg:u.freshdeskAccount.name?u.freshdeskAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteFreshdeskAccount=function(e){u.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(){l.intFreshdeskAccount.delete({id:u.freshdeskAccount.id}).$promise.then(function(){_.remove(u.freshdeskAccounts,{id:u.freshdeskAccount.id}),o.success({title:"FreshdeskAccount properly deleted!",msg:(u.freshdeskAccount.name||"freshdeskAccount")+" has been deleted!"}),p(u.freshdeskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","freshdeskAccounts","freshdeskAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditFreshdeskAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intFreshdeskField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.freshdeskAccount={},s.freshdeskConfiguration={},s.configurations=[],s.selectedFreshdeskConfiguration=-1,s.init=function(e){s.freshdeskAccount=e,i.intFreshdeskAccount.getConfigurations({id:s.freshdeskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getFreshdeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getFreshdeskConfiguration=function(e){s.freshdeskConfiguration=s.configurations[e],s.selectedFreshdeskConfiguration=e,i.intFreshdeskConfiguration.getSubjects({id:s.freshdeskConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intFreshdeskConfiguration.getDescriptions({id:s.freshdeskConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intFreshdeskConfiguration.getFields({id:s.freshdeskConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intFreshdeskConfiguration.getTags({id:s.freshdeskConfiguration.id}).$promise.then(function(e){s.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getFreshdeskConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"FreshdeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getFreshdeskConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.freshdeskConfiguration.id},s.freshdeskConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedTags=[],s.selectTagsChanged=function(e){i.intFreshdeskConfiguration.setTags({id:s.freshdeskConfiguration.id,ids:s.selectedTags}).$promise.then(function(){o.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){o.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){s.tags=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.selectedSubjects=[],s.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:s.subjects,configuration:s.freshdeskConfiguration,account:s.freshdeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.freshdeskConfiguration,account:s.freshdeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.freshdeskConfiguration,account:s.freshdeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_FRESHDESKCONFIGURATION",u.freshdeskConfiguration=angular.copy(r),u.configurations=s,u.newFreshdeskConfiguration=!1,u.freshdeskConfiguration||(u.freshdeskConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_FRESHDESKCONFIGURATION",u.newFreshdeskConfiguration=!0),u.addNewFreshdeskConfiguration=function(){u.errors=[],l.intFreshdeskAccount.addConfiguration({id:t.params.id},u.freshdeskConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"FreshdeskConfiguration properly created",msg:u.freshdeskConfiguration.name?u.freshdeskConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveFreshdeskConfiguration=function(){u.errors=[],l.intFreshdeskConfiguration.update({id:u.freshdeskConfiguration.id},u.freshdeskConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FreshdeskConfiguration properly saved!",msg:u.freshdeskConfiguration.name?u.freshdeskConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteFreshdeskConfiguration=function(e){u.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(){l.intFreshdeskConfiguration.delete({id:u.freshdeskConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.freshdeskConfiguration.id}),o.success({title:"FreshdeskConfiguration properly deleted!",msg:(u.freshdeskConfiguration.name||"freshdeskConfiguration")+" has been deleted!"}),p(u.freshdeskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","freshdeskConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditFreshdeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intFreshdeskField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intFreshdeskField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditFreshdeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.freshdeskAccount=d||e.params.freshdeskAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoFreshdeskAccounts=function(){e.go("app.integrations.freshdeskAccounts")},c.saveFreshdeskAccount=function(){s.intFreshdeskAccount.update({id:c.freshdeskAccount.id},c.freshdeskAccount).$promise.then(function(){r.success({title:"FreshdeskAccount updated!",msg:c.freshdeskAccount.name?c.freshdeskAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","freshdeskAccount"],angular.module("app.integrations").controller("FreshdeskAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.freshdeskAccounts=r||{count:0,rows:[]},v.table="freshdeskAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedFreshdeskAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",limit:10,page:1},v.editstate=function(e,t){n.go("app.integrations.freshdeskAccounts.edit",{id:e.id,freshdeskAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intFreshdeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"FreshdeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"FreshdeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the freshdeskAccount?").htmlContent("<b>"+(e.name||"freshdeskAccount")+"</b> will be deleted.").ariaLabel("delete freshdeskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getFreshdeskAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intFreshdeskAccount.get(v.query,f).$promise},v.createOrEditFreshdeskAccount=function(e,t){i.show({controller:"CreateOrEditFreshdeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{freshdeskAccount:t,freshdeskAccounts:v.freshdeskAccounts.rows,license:v.license,setting:v.setting}})},v.deleteFreshdeskAccount=A,v.exportSelectedFreshdeskAccounts=function(){var e=angular.copy(v.selectedFreshdeskAccounts);return v.selectedFreshdeskAccounts=[],e},v.deleteSelectedFreshdeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected freshdeskAccounts?").htmlContent("<b>"+v.selectedFreshdeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete FreshdeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedFreshdeskAccounts.forEach(function(e){A(e)}),v.selectedFreshdeskAccounts=[]})},v.deselectFreshdeskAccounts=function(){v.selectedFreshdeskAccounts=[]},v.selectAllFreshdeskAccounts=function(){v.selectedFreshdeskAccounts=v.freshdeskAccounts.rows};var h=!0,b=1;function f(e){v.freshdeskAccounts=e||{count:0,rows:[]}}function A(e){l.intFreshdeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.freshdeskAccounts.rows,{id:e.id}),v.freshdeskAccounts.count-=1,v.freshdeskAccounts.rows.length||v.getFreshdeskAccounts(),c.success({title:"FreshdeskAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintFreshdeskAccount"}];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:"SYSTEM:DELETEintFreshdeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getFreshdeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","freshdeskAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("FreshdeskAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_SALESFORCEACCOUNT",u.salesforceAccount=angular.copy(r),u.salesforceAccounts=s,u.newSalesforceAccount=!1,u.salesforceAccount||(u.salesforceAccount={type:"integrationTab",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_SALESFORCEACCOUNT",u.newSalesforceAccount=!0),u.addNewSalesforceAccount=function(){u.errors=[],l.intSalesforceAccount.save(u.salesforceAccount).$promise.then(function(e){u.salesforceAccounts.unshift(e.toJSON()),o.success({title:"SalesforceAccount properly created",msg:u.salesforceAccount.name?u.salesforceAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSalesforceAccount=function(){u.errors=[],l.intSalesforceAccount.update({id:u.salesforceAccount.id},u.salesforceAccount).$promise.then(function(e){var t=_.find(u.salesforceAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SalesforceAccount properly saved!",msg:u.salesforceAccount.name?u.salesforceAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSalesforceAccount=function(e){u.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(){l.intSalesforceAccount.delete({id:u.salesforceAccount.id}).$promise.then(function(){_.remove(u.salesforceAccounts,{id:u.salesforceAccount.id}),o.success({title:"SalesforceAccount properly deleted!",msg:(u.salesforceAccount.name||"salesforceAccount")+" has been deleted!"}),p(u.salesforceAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","salesforceAccounts","salesforceAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditSalesforceAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intSalesforceField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.salesforceAccount={},s.salesforceConfiguration={},s.configurations=[],s.selectedSalesforceConfiguration=-1,s.init=function(e){s.salesforceAccount=e,i.intSalesforceAccount.getConfigurations({id:s.salesforceAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getSalesforceConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getSalesforceConfiguration=function(e){s.salesforceConfiguration=s.configurations[e],s.selectedSalesforceConfiguration=e,i.intSalesforceConfiguration.getSubjects({id:s.salesforceConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intSalesforceConfiguration.getDescriptions({id:s.salesforceConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intSalesforceConfiguration.getFields({id:s.salesforceConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getSalesforceConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"SalesforceConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getSalesforceConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.salesforceConfiguration.id},s.salesforceConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedSubjects=[],s.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:s.subjects,configuration:s.salesforceConfiguration,account:s.salesforceAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.salesforceConfiguration,account:s.salesforceAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.salesforceConfiguration,account:s.salesforceAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_SALESFORCECONFIGURATION",u.salesforceConfiguration=angular.copy(r),u.configurations=s,u.newSalesforceConfiguration=!1,u.salesforceConfiguration||(u.salesforceConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_SALESFORCECONFIGURATION",u.newSalesforceConfiguration=!0),u.addNewSalesforceConfiguration=function(){u.errors=[],l.intSalesforceAccount.addConfiguration({id:t.params.id},u.salesforceConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"SalesforceConfiguration properly created",msg:u.salesforceConfiguration.name?u.salesforceConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSalesforceConfiguration=function(){u.errors=[],l.intSalesforceConfiguration.update({id:u.salesforceConfiguration.id},u.salesforceConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SalesforceConfiguration properly saved!",msg:u.salesforceConfiguration.name?u.salesforceConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSalesforceConfiguration=function(e){u.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(){l.intSalesforceConfiguration.delete({id:u.salesforceConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.salesforceConfiguration.id}),o.success({title:"SalesforceConfiguration properly deleted!",msg:(u.salesforceConfiguration.name||"salesforceConfiguration")+" has been deleted!"}),p(u.salesforceConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","salesforceConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditSalesforceConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intSalesforceField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intSalesforceField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditSalesforceAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.salesforceAccount=d||e.params.salesforceAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoSalesforceAccounts=function(){e.go("app.integrations.salesforceAccounts")},c.saveSalesforceAccount=function(){s.intSalesforceAccount.update({id:c.salesforceAccount.id},c.salesforceAccount).$promise.then(function(){r.success({title:"SalesforceAccount updated!",msg:c.salesforceAccount.name?c.salesforceAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","salesforceAccount"],angular.module("app.integrations").controller("SalesforceAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.salesforceAccounts=r||{count:0,rows:[]},v.table="salesforceAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedSalesforceAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",limit:10,page:1},v.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.integrations.salesforceAccounts.edit",{id:e.id,salesforceAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intSalesforceAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"SalesforceAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"SalesforceAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the salesforceAccount?").htmlContent("<b>"+(e.name||"salesforceAccount")+"</b> will be deleted.").ariaLabel("delete salesforceAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getSalesforceAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intSalesforceAccount.get(v.query,f).$promise},v.createOrEditSalesforceAccount=function(e,t){i.show({controller:"CreateOrEditSalesforceAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{salesforceAccount:t,salesforceAccounts:v.salesforceAccounts.rows,license:v.license,setting:v.setting}})},v.deleteSalesforceAccount=A,v.exportSelectedSalesforceAccounts=function(){var e=angular.copy(v.selectedSalesforceAccounts);return v.selectedSalesforceAccounts=[],e},v.deleteSelectedSalesforceAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected salesforceAccounts?").htmlContent("<b>"+v.selectedSalesforceAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SalesforceAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSalesforceAccounts.forEach(function(e){A(e)}),v.selectedSalesforceAccounts=[]})},v.deselectSalesforceAccounts=function(){v.selectedSalesforceAccounts=[]},v.selectAllSalesforceAccounts=function(){v.selectedSalesforceAccounts=v.salesforceAccounts.rows};var h=!0,b=1;function f(e){v.salesforceAccounts=e||{count:0,rows:[]}}function A(e){l.intSalesforceAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.salesforceAccounts.rows,{id:e.id}),v.salesforceAccounts.count-=1,v.salesforceAccounts.rows.length||v.getSalesforceAccounts(),c.success({title:"SalesforceAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintSalesforceAccount"}];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:"SYSTEM:DELETEintSalesforceAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSalesforceAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","salesforceAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("SalesforceAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_SUGARCRMACCOUNT",u.sugarcrmAccount=angular.copy(r),u.sugarcrmAccounts=s,u.newSugarcrmAccount=!1,u.sugarcrmAccount||(u.sugarcrmAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_SUGARCRMACCOUNT",u.newSugarcrmAccount=!0),u.addNewSugarcrmAccount=function(){u.errors=[],l.intSugarcrmAccount.save(u.sugarcrmAccount).$promise.then(function(e){u.sugarcrmAccounts.unshift(e.toJSON()),o.success({title:"SugarcrmAccount properly created",msg:u.sugarcrmAccount.name?u.sugarcrmAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSugarcrmAccount=function(){u.errors=[],l.intSugarcrmAccount.update({id:u.sugarcrmAccount.id},u.sugarcrmAccount).$promise.then(function(e){var t=_.find(u.sugarcrmAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SugarcrmAccount properly saved!",msg:u.sugarcrmAccount.name?u.sugarcrmAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSugarcrmAccount=function(e){u.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(){l.intSugarcrmAccount.delete({id:u.sugarcrmAccount.id}).$promise.then(function(){_.remove(u.sugarcrmAccounts,{id:u.sugarcrmAccount.id}),o.success({title:"SugarcrmAccount properly deleted!",msg:(u.sugarcrmAccount.name||"sugarcrmAccount")+" has been deleted!"}),p(u.sugarcrmAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","sugarcrmAccounts","sugarcrmAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditSugarcrmAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intSugarcrmField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.sugarcrmAccount={},s.sugarcrmConfiguration={},s.configurations=[],s.selectedSugarcrmConfiguration=-1,s.init=function(e){s.sugarcrmAccount=e,i.intSugarcrmAccount.getConfigurations({id:s.sugarcrmAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getSugarcrmConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getSugarcrmConfiguration=function(e){s.sugarcrmConfiguration=s.configurations[e],s.selectedSugarcrmConfiguration=e,i.intSugarcrmConfiguration.getSubjects({id:s.sugarcrmConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intSugarcrmConfiguration.getDescriptions({id:s.sugarcrmConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intSugarcrmConfiguration.getFields({id:s.sugarcrmConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getSugarcrmConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"SugarcrmConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getSugarcrmConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.sugarcrmConfiguration.id},s.sugarcrmConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedSubjects=[],s.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:s.subjects,configuration:s.sugarcrmConfiguration,account:s.sugarcrmAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.sugarcrmConfiguration,account:s.sugarcrmAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.sugarcrmConfiguration,account:s.sugarcrmAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_SUGARCRMCONFIGURATION",u.sugarcrmConfiguration=angular.copy(r),u.configurations=s,u.newSugarcrmConfiguration=!1,u.sugarcrmConfiguration||(u.sugarcrmConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_SUGARCRMCONFIGURATION",u.newSugarcrmConfiguration=!0),u.addNewSugarcrmConfiguration=function(){u.errors=[],l.intSugarcrmAccount.addConfiguration({id:t.params.id},u.sugarcrmConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"SugarcrmConfiguration properly created",msg:u.sugarcrmConfiguration.name?u.sugarcrmConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSugarcrmConfiguration=function(){u.errors=[],l.intSugarcrmConfiguration.update({id:u.sugarcrmConfiguration.id},u.sugarcrmConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SugarcrmConfiguration properly saved!",msg:u.sugarcrmConfiguration.name?u.sugarcrmConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSugarcrmConfiguration=function(e){u.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(){l.intSugarcrmConfiguration.delete({id:u.sugarcrmConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.sugarcrmConfiguration.id}),o.success({title:"SugarcrmConfiguration properly deleted!",msg:(u.sugarcrmConfiguration.name||"sugarcrmConfiguration")+" has been deleted!"}),p(u.sugarcrmConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","sugarcrmConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditSugarcrmConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intSugarcrmField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intSugarcrmField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditSugarcrmAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.sugarcrmAccount=d||e.params.sugarcrmAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoSugarcrmAccounts=function(){e.go("app.integrations.sugarcrmAccounts")},c.saveSugarcrmAccount=function(){s.intSugarcrmAccount.update({id:c.sugarcrmAccount.id},c.sugarcrmAccount).$promise.then(function(){r.success({title:"SugarcrmAccount updated!",msg:c.sugarcrmAccount.name?c.sugarcrmAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","sugarcrmAccount"],angular.module("app.integrations").controller("SugarcrmAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.sugarcrmAccounts=r||{count:0,rows:[]},v.table="sugarcrmAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedSugarcrmAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",limit:10,page:1},v.editstate=function(e,t){n.go("app.integrations.sugarcrmAccounts.edit",{id:e.id,sugarcrmAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intSugarcrmAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"SugarcrmAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"SugarcrmAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the sugarcrmAccount?").htmlContent("<b>"+(e.name||"sugarcrmAccount")+"</b> will be deleted.").ariaLabel("delete sugarcrmAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getSugarcrmAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intSugarcrmAccount.get(v.query,f).$promise},v.createOrEditSugarcrmAccount=function(e,t){i.show({controller:"CreateOrEditSugarcrmAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{sugarcrmAccount:t,sugarcrmAccounts:v.sugarcrmAccounts.rows,license:v.license,setting:v.setting}})},v.deleteSugarcrmAccount=A,v.exportSelectedSugarcrmAccounts=function(){var e=angular.copy(v.selectedSugarcrmAccounts);return v.selectedSugarcrmAccounts=[],e},v.deleteSelectedSugarcrmAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected sugarcrmAccounts?").htmlContent("<b>"+v.selectedSugarcrmAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SugarcrmAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSugarcrmAccounts.forEach(function(e){A(e)}),v.selectedSugarcrmAccounts=[]})},v.deselectSugarcrmAccounts=function(){v.selectedSugarcrmAccounts=[]},v.selectAllSugarcrmAccounts=function(){v.selectedSugarcrmAccounts=v.sugarcrmAccounts.rows};var h=!0,b=1;function f(e){v.sugarcrmAccounts=e||{count:0,rows:[]}}function A(e){l.intSugarcrmAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.sugarcrmAccounts.rows,{id:e.id}),v.sugarcrmAccounts.count-=1,v.sugarcrmAccounts.rows.length||v.getSugarcrmAccounts(),c.success({title:"SugarcrmAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintSugarcrmAccount"}];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:"SYSTEM:DELETEintSugarcrmAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSugarcrmAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","sugarcrmAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("SugarcrmAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_VTIGERACCOUNT",u.vtigerAccount=angular.copy(r),u.vtigerAccounts=s,u.newVtigerAccount=!1,u.vtigerAccount||(u.vtigerAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_VTIGERACCOUNT",u.newVtigerAccount=!0),u.addNewVtigerAccount=function(){u.errors=[],l.intVtigerAccount.save(u.vtigerAccount).$promise.then(function(e){u.vtigerAccounts.unshift(e.toJSON()),o.success({title:"VtigerAccount properly created",msg:u.vtigerAccount.name?u.vtigerAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVtigerAccount=function(){u.errors=[],l.intVtigerAccount.update({id:u.vtigerAccount.id},u.vtigerAccount).$promise.then(function(e){var t=_.find(u.vtigerAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VtigerAccount properly saved!",msg:u.vtigerAccount.name?u.vtigerAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVtigerAccount=function(e){u.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(){l.intVtigerAccount.delete({id:u.vtigerAccount.id}).$promise.then(function(){_.remove(u.vtigerAccounts,{id:u.vtigerAccount.id}),o.success({title:"VtigerAccount properly deleted!",msg:(u.vtigerAccount.name||"vtigerAccount")+" has been deleted!"}),p(u.vtigerAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","vtigerAccounts","vtigerAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditVtigerAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intVtigerField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.vtigerAccount={},s.vtigerConfiguration={},s.configurations=[],s.selectedVtigerConfiguration=-1,s.init=function(e){s.vtigerAccount=e,i.intVtigerAccount.getConfigurations({id:s.vtigerAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getVtigerConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getVtigerConfiguration=function(e){s.vtigerConfiguration=s.configurations[e],s.selectedVtigerConfiguration=e,i.intVtigerConfiguration.getSubjects({id:s.vtigerConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intVtigerConfiguration.getDescriptions({id:s.vtigerConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intVtigerConfiguration.getFields({id:s.vtigerConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getVtigerConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"VtigerConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getVtigerConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.vtigerConfiguration.id},s.vtigerConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedSubjects=[],s.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:s.subjects,configuration:s.vtigerConfiguration,account:s.vtigerAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.vtigerConfiguration,account:s.vtigerAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.vtigerConfiguration,account:s.vtigerAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_VTIGERCONFIGURATION",u.vtigerConfiguration=angular.copy(r),u.configurations=s,u.newVtigerConfiguration=!1,u.vtigerConfiguration||(u.vtigerConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_VTIGERCONFIGURATION",u.newVtigerConfiguration=!0),u.addNewVtigerConfiguration=function(){u.errors=[],l.intVtigerAccount.addConfiguration({id:t.params.id},u.vtigerConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"VtigerConfiguration properly created",msg:u.vtigerConfiguration.name?u.vtigerConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVtigerConfiguration=function(){u.errors=[],l.intVtigerConfiguration.update({id:u.vtigerConfiguration.id},u.vtigerConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VtigerConfiguration properly saved!",msg:u.vtigerConfiguration.name?u.vtigerConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVtigerConfiguration=function(e){u.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(){l.intVtigerConfiguration.delete({id:u.vtigerConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.vtigerConfiguration.id}),o.success({title:"VtigerConfiguration properly deleted!",msg:(u.vtigerConfiguration.name||"vtigerConfiguration")+" has been deleted!"}),p(u.vtigerConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","vtigerConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditVtigerConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intVtigerField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intVtigerField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditVtigerAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.vtigerAccount=d||e.params.vtigerAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoVtigerAccounts=function(){e.go("app.integrations.vtigerAccounts")},c.saveVtigerAccount=function(){s.intVtigerAccount.update({id:c.vtigerAccount.id},c.vtigerAccount).$promise.then(function(){r.success({title:"VtigerAccount updated!",msg:c.vtigerAccount.name?c.vtigerAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","vtigerAccount"],angular.module("app.integrations").controller("VtigerAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.vtigerAccounts=r||{count:0,rows:[]},v.table="vtigerAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedVtigerAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",limit:10,page:1},v.editstate=function(e,t){n.go("app.integrations.vtigerAccounts.edit",{id:e.id,vtigerAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intVtigerAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"VtigerAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"VtigerAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the vtigerAccount?").htmlContent("<b>"+(e.name||"vtigerAccount")+"</b> will be deleted.").ariaLabel("delete vtigerAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getVtigerAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intVtigerAccount.get(v.query,f).$promise},v.createOrEditVtigerAccount=function(e,t){i.show({controller:"CreateOrEditVtigerAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{vtigerAccount:t,vtigerAccounts:v.vtigerAccounts.rows,license:v.license,setting:v.setting}})},v.deleteVtigerAccount=A,v.exportSelectedVtigerAccounts=function(){var e=angular.copy(v.selectedVtigerAccounts);return v.selectedVtigerAccounts=[],e},v.deleteSelectedVtigerAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected vtigerAccounts?").htmlContent("<b>"+v.selectedVtigerAccounts.length+" selected</b> will be deleted.").ariaLabel("delete VtigerAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVtigerAccounts.forEach(function(e){A(e)}),v.selectedVtigerAccounts=[]})},v.deselectVtigerAccounts=function(){v.selectedVtigerAccounts=[]},v.selectAllVtigerAccounts=function(){v.selectedVtigerAccounts=v.vtigerAccounts.rows};var h=!0,b=1;function f(e){v.vtigerAccounts=e||{count:0,rows:[]}}function A(e){l.intVtigerAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.vtigerAccounts.rows,{id:e.id}),v.vtigerAccounts.count-=1,v.vtigerAccounts.rows.length||v.getVtigerAccounts(),c.success({title:"VtigerAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintVtigerAccount"}];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:"SYSTEM:DELETEintVtigerAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVtigerAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","vtigerAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("VtigerAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_ZENDESKACCOUNT",u.zendeskAccount=angular.copy(r),u.zendeskAccounts=s,u.newZendeskAccount=!1,u.zendeskAccount||(u.zendeskAccount={type:"integrationTab",authType:"password",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_ZENDESKACCOUNT",u.newZendeskAccount=!0),u.addNewZendeskAccount=function(){u.errors=[],l.intZendeskAccount.save(u.zendeskAccount).$promise.then(function(e){u.zendeskAccounts.unshift(e.toJSON()),o.success({title:"ZendeskAccount properly created",msg:u.zendeskAccount.name?u.zendeskAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveZendeskAccount=function(){u.errors=[],l.intZendeskAccount.update({id:u.zendeskAccount.id},u.zendeskAccount).$promise.then(function(e){var t=_.find(u.zendeskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZendeskAccount properly saved!",msg:u.zendeskAccount.name?u.zendeskAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteZendeskAccount=function(e){u.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(){l.intZendeskAccount.delete({id:u.zendeskAccount.id}).$promise.then(function(){_.remove(u.zendeskAccounts,{id:u.zendeskAccount.id}),o.success({title:"ZendeskAccount properly deleted!",msg:(u.zendeskAccount.name||"zendeskAccount")+" has been deleted!"}),p(u.zendeskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","zendeskAccounts","zendeskAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditZendeskAccountDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intZendeskField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intZendeskField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditZendeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.zendeskAccount=d||e.params.zendeskAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoZendeskAccounts=function(){e.go("app.integrations.zendeskAccounts")},c.saveZendeskAccount=function(){s.intZendeskAccount.update({id:c.zendeskAccount.id},c.zendeskAccount).$promise.then(function(){r.success({title:"ZendeskAccount updated!",msg:c.zendeskAccount.name?c.zendeskAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","zendeskAccount"],angular.module("app.integrations").controller("ZendeskAccountController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intZendeskField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.zendeskAccount={},s.zendeskConfiguration={},s.zendeskConfigurations=[],s.selectedZendeskConfiguration=-1,s.init=function(e){s.zendeskAccount=e,i.intZendeskAccount.getConfigurations({id:s.zendeskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.zendeskConfigurations=e.rows?e.rows:[],s.zendeskConfigurations.length&&s.getZendeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getZendeskConfiguration=function(e){s.zendeskConfiguration=s.zendeskConfigurations[e],s.selectedZendeskConfiguration=e,i.intZendeskConfiguration.getSubjects({id:s.zendeskConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intZendeskConfiguration.getDescriptions({id:s.zendeskConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intZendeskConfiguration.getFields({id:s.zendeskConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intZendeskConfiguration.getTags({id:s.zendeskConfiguration.id}).$promise.then(function(e){s.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.zendeskConfigurations,license:null,setting:null}}).finally(function(){s.getZendeskConfiguration(0)})},s.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(s.zendeskConfigurations,{id:t.id}),o.success({title:"ZendeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getZendeskConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.zendeskConfiguration.id},s.zendeskConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedTags=[],s.selectTagsChanged=function(e){i.intZendeskConfiguration.setTags({id:s.zendeskConfiguration.id,ids:s.selectedTags}).$promise.then(function(){o.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){o.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){s.tags=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.selectedSubjects=[],s.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:s.subjects,configuration:s.zendeskConfiguration,account:s.zendeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.zendeskConfiguration,account:s.zendeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.zendeskConfiguration,account:s.zendeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_ZENDESKCONFIGURATION",u.zendeskConfiguration=angular.copy(r),u.zendeskConfigurations=s,u.newZendeskConfiguration=!1,u.zendeskConfiguration||(u.zendeskConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_ZENDESKCONFIGURATION",u.newZendeskConfiguration=!0),u.addNewZendeskConfiguration=function(){u.errors=[],l.intZendeskAccount.addConfiguration({id:t.params.id},u.zendeskConfiguration).$promise.then(function(e){u.zendeskConfigurations.unshift(e.toJSON()),o.success({title:"ZendeskConfiguration properly created",msg:u.zendeskConfiguration.name?u.zendeskConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveZendeskConfiguration=function(){u.errors=[],l.intZendeskConfiguration.update({id:u.zendeskConfiguration.id},u.zendeskConfiguration).$promise.then(function(e){var t=_.find(u.zendeskConfigurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZendeskConfiguration properly saved!",msg:u.zendeskConfiguration.name?u.zendeskConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteZendeskConfiguration=function(e){u.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(){l.intZendeskConfiguration.delete({id:u.zendeskConfiguration.id}).$promise.then(function(){_.remove(u.zendeskConfigurations,{id:u.zendeskConfiguration.id}),o.success({title:"ZendeskConfiguration properly deleted!",msg:(u.zendeskConfiguration.name||"zendeskConfiguration")+" has been deleted!"}),p(u.zendeskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","zendeskConfigurations","zendeskConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditZendeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.zendeskAccounts=r||{count:0,rows:[]},v.table="zendeskAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedZendeskAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",limit:10,page:1},v.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayauthType=_.keyBy([{option:"Password",value:"'password'"},{option:"Token",value:"'token'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.integrations.zendeskAccounts.edit",{id:e.id,zendeskAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intZendeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"ZendeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"ZendeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the zendeskAccount?").htmlContent("<b>"+(e.name||"zendeskAccount")+"</b> will be deleted.").ariaLabel("delete zendeskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getZendeskAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intZendeskAccount.get(v.query,f).$promise},v.createOrEditZendeskAccount=function(e,t){i.show({controller:"CreateOrEditZendeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{zendeskAccount:t,zendeskAccounts:v.zendeskAccounts.rows,license:v.license,setting:v.setting}})},v.deleteZendeskAccount=A,v.exportSelectedZendeskAccounts=function(){var e=angular.copy(v.selectedZendeskAccounts);return v.selectedZendeskAccounts=[],e},v.deleteSelectedZendeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected zendeskAccounts?").htmlContent("<b>"+v.selectedZendeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete ZendeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedZendeskAccounts.forEach(function(e){A(e)}),v.selectedZendeskAccounts=[]})},v.deselectZendeskAccounts=function(){v.selectedZendeskAccounts=[]},v.selectAllZendeskAccounts=function(){v.selectedZendeskAccounts=v.zendeskAccounts.rows};var h=!0,b=1;function f(e){v.zendeskAccounts=e||{count:0,rows:[]}}function A(e){l.intZendeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.zendeskAccounts.rows,{id:e.id}),v.zendeskAccounts.count-=1,v.zendeskAccounts.rows.length||v.getZendeskAccounts(),c.success({title:"ZendeskAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintZendeskAccount"}];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:"SYSTEM:DELETEintZendeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getZendeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","zendeskAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("ZendeskAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_ZOHOACCOUNT",u.zohoAccount=angular.copy(r),u.zohoAccounts=s,u.newZohoAccount=!1,u.zohoAccount||(u.zohoAccount={host:"zoho.com",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_ZOHOACCOUNT",u.newZohoAccount=!0),u.addNewZohoAccount=function(){u.errors=[],l.intZohoAccount.save(u.zohoAccount).$promise.then(function(e){u.zohoAccounts.unshift(e.toJSON()),o.success({title:"ZohoAccount properly created",msg:u.zohoAccount.name?u.zohoAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveZohoAccount=function(){u.errors=[],l.intZohoAccount.update({id:u.zohoAccount.id},u.zohoAccount).$promise.then(function(e){var t=_.find(u.zohoAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZohoAccount properly saved!",msg:u.zohoAccount.name?u.zohoAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteZohoAccount=function(e){u.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(){l.intZohoAccount.delete({id:u.zohoAccount.id}).$promise.then(function(){_.remove(u.zohoAccounts,{id:u.zohoAccount.id}),o.success({title:"ZohoAccount properly deleted!",msg:(u.zohoAccount.name||"zohoAccount")+" has been deleted!"}),p(u.zohoAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","zohoAccounts","zohoAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditZohoAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intZohoField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.zohoAccount={},s.zohoConfiguration={},s.configurations=[],s.selectedZohoConfiguration=-1,s.init=function(e){s.zohoAccount=e,i.intZohoAccount.getConfigurations({id:s.zohoAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getZohoConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getZohoConfiguration=function(e){s.zohoConfiguration=s.configurations[e],s.selectedZohoConfiguration=e,i.intZohoConfiguration.getSubjects({id:s.zohoConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intZohoConfiguration.getDescriptions({id:s.zohoConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intZohoConfiguration.getFields({id:s.zohoConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getZohoConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"ZohoConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getZohoConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.zohoConfiguration.id},s.zohoConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedSubjects=[],s.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:s.subjects,configuration:s.zohoConfiguration,account:s.zohoAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.zohoConfiguration,account:s.zohoAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.zohoConfiguration,account:s.zohoAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_ZOHOCONFIGURATION",u.zohoConfiguration=angular.copy(r),u.configurations=s,u.newZohoConfiguration=!1,u.zohoConfiguration||(u.zohoConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_ZOHOCONFIGURATION",u.newZohoConfiguration=!0),u.addNewZohoConfiguration=function(){u.errors=[],l.intZohoAccount.addConfiguration({id:t.params.id},u.zohoConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"ZohoConfiguration properly created",msg:u.zohoConfiguration.name?u.zohoConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveZohoConfiguration=function(){u.errors=[],l.intZohoConfiguration.update({id:u.zohoConfiguration.id},u.zohoConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZohoConfiguration properly saved!",msg:u.zohoConfiguration.name?u.zohoConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteZohoConfiguration=function(e){u.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(){l.intZohoConfiguration.delete({id:u.zohoConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.zohoConfiguration.id}),o.success({title:"ZohoConfiguration properly deleted!",msg:(u.zohoConfiguration.name||"zohoConfiguration")+" has been deleted!"}),p(u.zohoConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","zohoConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditZohoConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intZohoField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intZohoField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditZohoAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.zohoAccount=d||e.params.zohoAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoZohoAccounts=function(){e.go("app.integrations.zohoAccounts")},c.saveZohoAccount=function(){s.intZohoAccount.update({id:c.zohoAccount.id},c.zohoAccount).$promise.then(function(){r.success({title:"ZohoAccount updated!",msg:c.zohoAccount.name?c.zohoAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","zohoAccount"],angular.module("app.integrations").controller("ZohoAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.zohoAccounts=r||{count:0,rows:[]},v.table="zohoAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedZohoAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",limit:10,page:1},v.arrayhost=_.keyBy([{option:"zoho.com",value:"'zoho.com'"},{option:"zoho.eu",value:"'zoho.eu'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.integrations.zohoAccounts.edit",{id:e.id,zohoAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intZohoAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"ZohoAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"ZohoAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the zohoAccount?").htmlContent("<b>"+(e.name||"zohoAccount")+"</b> will be deleted.").ariaLabel("delete zohoAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getZohoAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intZohoAccount.get(v.query,f).$promise},v.createOrEditZohoAccount=function(e,t){i.show({controller:"CreateOrEditZohoAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{zohoAccount:t,zohoAccounts:v.zohoAccounts.rows,license:v.license,setting:v.setting}})},v.deleteZohoAccount=A,v.exportSelectedZohoAccounts=function(){var e=angular.copy(v.selectedZohoAccounts);return v.selectedZohoAccounts=[],e},v.deleteSelectedZohoAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected zohoAccounts?").htmlContent("<b>"+v.selectedZohoAccounts.length+" selected</b> will be deleted.").ariaLabel("delete ZohoAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedZohoAccounts.forEach(function(e){A(e)}),v.selectedZohoAccounts=[]})},v.deselectZohoAccounts=function(){v.selectedZohoAccounts=[]},v.selectAllZohoAccounts=function(){v.selectedZohoAccounts=v.zohoAccounts.rows};var h=!0,b=1;function f(e){v.zohoAccounts=e||{count:0,rows:[]}}function A(e){l.intZohoAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.zohoAccounts.rows,{id:e.id}),v.zohoAccounts.count-=1,v.zohoAccounts.rows.length||v.getZohoAccounts(),c.success({title:"ZohoAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintZohoAccount"}];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:"SYSTEM:DELETEintZohoAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getZohoAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","zohoAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("ZohoAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="JSCRIPTY.EDIT_PROJECT",u.project=angular.copy(r),u.projects=s,u.newProject=!1,u.project||(u.project={enableUncompleteSave:!0},u.title="JSCRIPTY.NEW_PROJECT",u.newProject=!0),u.addNewProject=function(){u.errors=[],l.jscriptyProject.save(u.project).$promise.then(function(e){u.projects.unshift(e.toJSON()),o.success({title:"Project properly created",msg:u.project.name?u.project.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveProject=function(){u.errors=[],l.jscriptyProject.update({id:u.project.id},u.project).$promise.then(function(e){var t=_.find(u.projects,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Project properly saved!",msg:u.project.name?u.project.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteProject=function(e){u.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(){l.jscriptyProject.delete({id:u.project.id}).$promise.then(function(){_.remove(u.projects,{id:u.project.id}),o.success({title:"Project properly deleted!",msg:(u.project.name||"project")+" has been deleted!"}),p(u.project)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","projects","project","api","Auth","license","setting"],angular.module("app.jscripty").controller("CreateOrEditProjectDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o){var s=this;s.project={},s.localizationMap=o;var r=new Date;r.setHours(0,0,0,0),s.pickerModel={dateStart:r,dateEnd:null,selectedTemplate:"TD"},s.init=function(e){s.project=e,s.getAnswers()},s.getSummary=function(){return a.jscriptyProject.getSummary({id:s.project.id,dateStart:moment(s.pickerModel.dateStart).format("YYYY-MM-DD HH:mm:ss"),dateEnd:moment(s.pickerModel.dateEnd).format("YYYY-MM-DD HH:mm:ss"),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_"+s.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()})})},s.getAnswers=function(){return s.hasIdAnswers=!1,a.jscriptyProject.getAnswers({id:s.project.id,sort:"-createdAt,questionId",dateStart:s.pickerModel.dateStart,dateEnd:s.pickerModel.dateEnd,nolimit:!0}).$promise.then(function(e){if(e&&e.rows&&e.hasOwnProperty("count")){s.answers={};for(var t=0,n=e.count;t<n;t++)e.rows[t].questionId&&(s.hasIdAnswers=!0,s.answers.hasOwnProperty(e.rows[t].questionId)||(s.answers[e.rows[t].questionId]={question:e.rows[t].question,answers:{},sum:0}),""===e.rows[t].answer&&(e.rows[t].answer="NO_ANSWER"),s.answers[e.rows[t].questionId].answers[e.rows[t].answer]?s.answers[e.rows[t].questionId].answers[e.rows[t].answer]+=1:s.answers[e.rows[t].questionId].answers[e.rows[t].answer]=1,s.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,o,s){var r=this;function l(e){t.hide(e)}r.newProject=!0,r.project=angular.copy(i),r.projects=o,r.title=s.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 s=this;s.project={},s.responseData={},s.formViewer={},s.init=function(e){s.project=e,t.$on("mwForm.pageEvents.pageCurrentChanged",function(e,t){if(t.currentPage&&s.project.formData&&s.project.formData.pages)for(var n=0,a=s.project.formData.pages.length;n<a;n++)if(t.currentPage.number<n+1&&s.project.formData.pages[n].elements)for(var i=0,o=s.project.formData.pages[n].elements.length;i<o;i++)"question"===s.project.formData.pages[n].elements[i].type&&s.project.formData.pages[n].elements[i].question&&delete s.responseData[s.project.formData.pages[n].elements[i].question.id]})},s.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},s.resetViewer=function(){s.formViewer.reset&&s.formViewer.reset()}}e.$inject=["$q","$mdDialog","$scope"],angular.module("app.jscripty").controller("ProjectViewerController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.project={},c.projectSessions={count:0,rows:[]},c.selectedProjectSessions=[],c.query={fields:"createdAt,updatedAt,id,starttime,endtime,membername,calleridnum,completed",sort:"-starttime",limit:10,page:1},c.init=function(e){c.project=e,c.query.id=c.project.id,c.getProjectSessions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditSessionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/sessions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:c.project,session:t,sessions:c.projectSessions.rows,license:null,setting:null}})},c.showQuestionsProjectSession=function(e,n){o.show({controller:"ShowQuestionsSessionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/sessions/dialog.html",parent:angular.element(s.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=o.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");o.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,o,s,r,l){this.title="JSCRIPTY.SESSION_RESULTS",this.session=o,this.questions=s,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,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.project=d||e.params.project||{},c.selectedTab=e.params.tab||0,c.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:c.projects?c.projects.rows:[]}})},c.alert=r.info,c.gotoProjects=function(){e.go("app.jscripty.projects")},c.saveProject=function(){s.jscriptyProject.update({id:c.project.id},c.project).$promise.then(function(){r.success({title:"Project updated!",msg:c.project.name?c.project.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","project"],angular.module("app.jscripty").controller("JscriptyProjectController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.projects=r||{count:0,rows:[]},v.table="projects",v.listOrder="",v.listOrderAsc=null,v.selectedProjects=[],v.query={fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,createdAt,formData",sort:"-updatedAt",limit:10,page:1},v.editstate=function(e,t){n.go("app.jscripty.projects.edit",{id:e.id,project:e})},v.clonedialog=function(e,t){i.show({controller:"ProjectcloneController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{project:e,projects:v.projects?v.projects.rows:[]}})},v.sessionsgoto=function(e,t){n.go("app.jscripty.projects.edit",{id:e.id,tab:3})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the project?").htmlContent("<b>"+(e.name||"project")+"</b> will be deleted.").ariaLabel("delete project").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getProjects=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.jscriptyProject.get(v.query,f).$promise},v.createOrEditProject=function(e,t){i.show({controller:"CreateOrEditProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:t,projects:v.projects.rows,license:v.license,setting:v.setting}})},v.deleteProject=A,v.exportSelectedProjects=function(){var e=angular.copy(v.selectedProjects);return v.selectedProjects=[],e},v.deleteSelectedProjects=function(e){var t=i.confirm().title("Are you sure want to delete the selected projects?").htmlContent("<b>"+v.selectedProjects.length+" selected</b> will be deleted.").ariaLabel("delete Projects").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedProjects.forEach(function(e){A(e)}),v.selectedProjects=[]})},v.deselectProjects=function(){v.selectedProjects=[]},v.selectAllProjects=function(){v.selectedProjects=v.projects.rows};var h=!0,b=1;function f(e){v.projects=e||{count:0,rows:[]}}function A(e){l.jscriptyProject.delete({id:e.id}).$promise.then(function(){_.remove(v.projects.rows,{id:e.id}),v.projects.count-=1,v.projects.rows.length||v.getProjects(),c.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){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEjscriptyProject"}];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:"SYSTEM:DELETEjscriptyProject",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getProjects())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","projects","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.jscripty").controller("JscriptyProjectsController",e)}(),function(){"use strict";function e(e,t,n,a,o,i,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MAIL.EDIT_MAILACCOUNT",u.mailAccount=angular.copy(r),u.mailAccounts=s,u.newMailAccount=!1,u.mailAccount||(u.mailAccount={active:!0,cservice:"null",cauthentication:!0,fontSize:13,waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},u.title="MAIL.NEW_MAILACCOUNT",u.newMailAccount=!0),t.params.id&&(u.mailAccount.MailAccountId=t.params.id),u.addNewMailAccount=function(){u.errors=[],l.mailAccount.save(u.mailAccount).$promise.then(function(e){var t="add"+_.upperFirst("mailAccount")+"s";return l.user[t]({id:d.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){u.mailAccounts.unshift(e.toJSON()),i.success({title:"MailAccount properly created",msg:u.mailAccount.name?u.mailAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.save"}];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.mailAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveMailAccount=function(){u.errors=[],l.mailAccount.update({id:u.mailAccount.id},u.mailAccount).$promise.then(function(e){var t=_.find(u.mailAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),i.success({title:"MailAccount properly saved!",msg:u.mailAccount.name?u.mailAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.update"}];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.mailAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteMailAccount=function(e){if(u.mailAccount.service)return i.error({title:"Mail Account not deleted!",msg:"You can't remove service account"});u.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(){l.mailAccount.delete({id:u.mailAccount.id}).$promise.then(function(){return l.mailAccount.getAgents({id:u.mailAccount.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a="remove"+_.upperFirst("mailAccount")+"s",i=0;i<n.length;i++)t.push(l.user[a]({id:d.getCurrentUser().id,ids:[u.mailAccount.id]}).$promise);return o.all(t)}).then(function(){_.remove(u.mailAccounts,{id:u.mailAccount.id}),i.success({title:"MailAccount properly deleted!",msg:(u.mailAccount.name||"mailAccount")+" has been deleted!"}),p(u.mailAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.delete"}];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.mailAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){i.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","toasty","mailAccounts","mailAccount","api","Auth","license","setting"],angular.module("app.mail").controller("CreateOrEditMailAccountDialogController",e)}(),function(){"use strict";function e(s,i,a,o,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}}).then(function(e){e&&(e.id?r.mailAccountApps.rows[t]=e:r.mailAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&o.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=[],o=[];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=(o.length?_.last(o).priority:a.priority)+1,t=_.concat(t,i,[a],o)}s.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.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",route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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",route:"mailQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"user",filters:{fields:"id,name",sort:"name",nolimit:!0,role:"agent"}}],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",route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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){r.mailAccount=e,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=s.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:[]}}).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(),o.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 s.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,n,a,t,i,o,s,r){var l=this;function d(){return a.mailAccount[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.mailAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserMailAccount?"penalty "+e.UserMailAccount.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserMailAccount?"penalty "+e.UserMailAccount.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.mailAccount=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("MAIL.ALL_AGENTS"),labelSelected:s.instant("MAIL.SELECTED_AGENTS"),transferCallback:function(e,t){a.mailAccount[t?"removeAgents":"addAgents"]({id:l.mailAccount.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"MailAccount properly "+(t?"removed":"added"),msg:"MailAccount has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:mailAccount.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","mailAccount","mailAccounts","realtime","$translate","Auth"],angular.module("app.mail").controller("MailAccountagentaddController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(e.appType||e.app).toUpperCase(),o.agent=angular.copy(e),o.agent.appdata)switch(o.agent.appType?o.agent.appType.toLowerCase():o.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agent.appdata.split(",");o.agent.key=s[0],o.agent.language=s[1],o.agent.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agent.appdata.split(",");o.agent.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agent.text=s.slice(1,s.length).join(",");break;case"message":o.agent.text=o.agent.appdata;break;case"set":o.agent.name=o.agent.appdata.split("=")[0],o.agent.value=o.agent.appdata.split("=")[1];break;case"agi":o.agent.project=o.agent.appdata;break;default:var r=o.agent.appdata.split(",");o.agent.agent=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.agent.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.agent.timeout=30;function l(e){t.hide(e)}o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outbounddial"===o.agent.appType.toLowerCase()&&(o.agent.prefix=o.agent.phone?o.agent.phone.split("$")[0]:void 0,o.agent.callerId=o.agent.callerID?"CALLERID(all)="+o.agent.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outboundDial"===o.agent.appType&&(o.agent.phone=a.cutdigits?(o.agent.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agent.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agent.options+="U(xcally-mixmonitor-context)"):o.agent.options=o.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.agents,{name:o.agent.agent});t&&(o.agent.UserId=t.id);if(o.agent.appType&&"custom"===o.agent.appType);else switch((o.agent.app||o.agent.appType).toLowerCase()){case"set":o.agent.appdata=o.agent.name+"="+o.agent.value;break;case"custom":break;default:e[0]=o.agent.agent,e[1]=o.agent.timeout,o.agent.appdata=e.join(",")}l(o.agent)},o.closeDialog=l,i.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){o.agents=e.rows||[]}).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","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(n.appType||n.app).toUpperCase(),o.autoreply=angular.copy(n),o.autoreply.appdata)switch(o.autoreply.appType?o.autoreply.appType.toLowerCase():o.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.autoreply.appdata.split(",");o.autoreply.key=s[0],o.autoreply.language=s[1],o.autoreply.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.autoreply.appdata.split(",");o.autoreply.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.autoreply.text=s.slice(1,s.length).join(",");break;case"message":o.autoreply.text=o.autoreply.appdata;break;case"set":o.autoreply.name=o.autoreply.appdata.split("=")[0],o.autoreply.value=o.autoreply.appdata.split("=")[1];break;case"agi":o.autoreply.project=o.autoreply.appdata;break;default:var r=o.autoreply.appdata.split(",");o.autoreply.times=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.autoreply.text=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.autoreply.times=1;function l(e){t.hide(e)}o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outbounddial"===o.autoreply.appType.toLowerCase()&&(o.autoreply.prefix=o.autoreply.phone?o.autoreply.phone.split("$")[0]:void 0,o.autoreply.callerId=o.autoreply.callerID?"CALLERID(all)="+o.autoreply.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outboundDial"===o.autoreply.appType&&(o.autoreply.phone=a.cutdigits?(o.autoreply.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.autoreply.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.autoreply.options+="U(xcally-mixmonitor-context)"):o.autoreply.options=o.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(o.autoreply.appType&&"custom"===o.autoreply.appType);else switch((o.autoreply.app||o.autoreply.appType).toLowerCase()){case"set":o.autoreply.appdata=o.autoreply.name+"="+o.autoreply.value;break;case"custom":break;default:e[0]=o.autoreply.times,e[1]=o.autoreply.text,o.autoreply.appdata=e.join(",")}l(o.autoreply)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(n.appType||n.app).toUpperCase(),o.close=angular.copy(n),o.close.appdata)switch(o.close.appType?o.close.appType.toLowerCase():o.close.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.close.appdata.split(",");o.close.key=s[0],o.close.language=s[1],o.close.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.close.appdata.split(",");o.close.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.close.text=s.slice(1,s.length).join(",");break;case"message":o.close.text=o.close.appdata;break;case"set":o.close.name=o.close.appdata.split("=")[0],o.close.value=o.close.appdata.split("=")[1];break;case"agi":o.close.project=o.close.appdata;break;default:var r=o.close.appdata.split(",");o.close.disposition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outbounddial"===o.close.appType.toLowerCase()&&(o.close.prefix=o.close.phone?o.close.phone.split("$")[0]:void 0,o.close.callerId=o.close.callerID?"CALLERID(all)="+o.close.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outboundDial"===o.close.appType&&(o.close.phone=a.cutdigits?(o.close.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.close.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.close.options+="U(xcally-mixmonitor-context)"):o.close.options=o.close.options.replace("U(xcally-mixmonitor-context)",""));if(o.close.appType&&"custom"===o.close.appType);else switch((o.close.app||o.close.appType).toLowerCase()){case"set":o.close.appdata=o.close.name+"="+o.close.value;break;case"custom":break;default:e[0]=o.close.disposition,o.close.appdata=e.join(",")}l(o.close)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotoif=angular.copy(n),o.gotoif.appdata)switch(o.gotoif.appType?o.gotoif.appType.toLowerCase():o.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotoif.appdata.split(",");o.gotoif.key=s[0],o.gotoif.language=s[1],o.gotoif.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotoif.appdata.split(",");o.gotoif.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotoif.text=s.slice(1,s.length).join(",");break;case"message":o.gotoif.text=o.gotoif.appdata;break;case"set":o.gotoif.name=o.gotoif.appdata.split("=")[0],o.gotoif.value=o.gotoif.appdata.split("=")[1];break;case"agi":o.gotoif.project=o.gotoif.appdata;break;default:var r=o.gotoif.appdata.split(",");o.gotoif.condition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.gotoif.truepriority=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.gotoif.falsepriority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outbounddial"===o.gotoif.appType.toLowerCase()&&(o.gotoif.prefix=o.gotoif.phone?o.gotoif.phone.split("$")[0]:void 0,o.gotoif.callerId=o.gotoif.callerID?"CALLERID(all)="+o.gotoif.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outboundDial"===o.gotoif.appType&&(o.gotoif.phone=a.cutdigits?(o.gotoif.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotoif.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotoif.options+="U(xcally-mixmonitor-context)"):o.gotoif.options=o.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotoif.appType&&"custom"===o.gotoif.appType);else switch((o.gotoif.app||o.gotoif.appType).toLowerCase()){case"set":o.gotoif.appdata=o.gotoif.name+"="+o.gotoif.value;break;case"custom":break;default:e[0]=o.gotoif.condition,e[1]=o.gotoif.truepriority,e[2]=o.gotoif.falsepriority,o.gotoif.appdata=e.join(",")}l(o.gotoif)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotop=angular.copy(n),o.gotop.appdata)switch(o.gotop.appType?o.gotop.appType.toLowerCase():o.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotop.appdata.split(",");o.gotop.key=s[0],o.gotop.language=s[1],o.gotop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotop.appdata.split(",");o.gotop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotop.text=s.slice(1,s.length).join(",");break;case"message":o.gotop.text=o.gotop.appdata;break;case"set":o.gotop.name=o.gotop.appdata.split("=")[0],o.gotop.value=o.gotop.appdata.split("=")[1];break;case"agi":o.gotop.project=o.gotop.appdata;break;default:var r=o.gotop.appdata.split(",");o.gotop.priority=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outbounddial"===o.gotop.appType.toLowerCase()&&(o.gotop.prefix=o.gotop.phone?o.gotop.phone.split("$")[0]:void 0,o.gotop.callerId=o.gotop.callerID?"CALLERID(all)="+o.gotop.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outboundDial"===o.gotop.appType&&(o.gotop.phone=a.cutdigits?(o.gotop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotop.options+="U(xcally-mixmonitor-context)"):o.gotop.options=o.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotop.appType&&"custom"===o.gotop.appType);else switch((o.gotop.app||o.gotop.appType).toLowerCase()){case"set":o.gotop.appdata=o.gotop.name+"="+o.gotop.value;break;case"custom":break;default:e[0]=o.gotop.priority,o.gotop.appdata=e.join(",")}l(o.gotop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditMailAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(n.appType||n.app).toUpperCase(),o.noop=angular.copy(n),o.noop.appdata)switch(o.noop.appType?o.noop.appType.toLowerCase():o.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.noop.appdata.split(",");o.noop.key=s[0],o.noop.language=s[1],o.noop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.noop.appdata.split(",");o.noop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.noop.text=s.slice(1,s.length).join(",");break;case"message":o.noop.text=o.noop.appdata;break;case"set":o.noop.name=o.noop.appdata.split("=")[0],o.noop.value=o.noop.appdata.split("=")[1];break;case"agi":o.noop.project=o.noop.appdata;break;default:var r=o.noop.appdata.split(",");o.noop.value=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outbounddial"===o.noop.appType.toLowerCase()&&(o.noop.prefix=o.noop.phone?o.noop.phone.split("$")[0]:void 0,o.noop.callerId=o.noop.callerID?"CALLERID(all)="+o.noop.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outboundDial"===o.noop.appType&&(o.noop.phone=a.cutdigits?(o.noop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.noop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.noop.options+="U(xcally-mixmonitor-context)"):o.noop.options=o.noop.options.replace("U(xcally-mixmonitor-context)",""));if(o.noop.appType&&"custom"===o.noop.appType);else switch((o.noop.app||o.noop.appType).toLowerCase()){case"set":o.noop.appdata=o.noop.name+"="+o.noop.value;break;case"custom":break;default:e[0]=o.noop.value,o.noop.appdata=e.join(",")}l(o.noop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.queue.queue=300,o.queue.timeout=300;function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.queues,{name:o.queue.queue});t&&(o.queue[_.capitalize("mail")+"QueueId"]=t.id);if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.timeout,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.mailQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(e.appType||e.app).toUpperCase(),o.system=angular.copy(e),o.system.appdata)switch(o.system.appType?o.system.appType.toLowerCase():o.system.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.system.appdata.split(",");o.system.key=s[0],o.system.language=s[1],o.system.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.system.appdata.split(",");o.system.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.system.text=s.slice(1,s.length).join(",");break;case"message":o.system.text=o.system.appdata;break;case"set":o.system.name=o.system.appdata.split("=")[0],o.system.value=o.system.appdata.split("=")[1];break;case"agi":o.system.project=o.system.appdata;break;default:var r=o.system.appdata.split(",");o.system.command=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.system.variable=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.system.variable="";function l(e){t.hide(e)}o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outbounddial"===o.system.appType.toLowerCase()&&(o.system.prefix=o.system.phone?o.system.phone.split("$")[0]:void 0,o.system.callerId=o.system.callerID?"CALLERID(all)="+o.system.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outboundDial"===o.system.appType&&(o.system.phone=a.cutdigits?(o.system.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.system.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.system.options+="U(xcally-mixmonitor-context)"):o.system.options=o.system.options.replace("U(xcally-mixmonitor-context)",""));if(o.system.appType&&"custom"===o.system.appType);else switch((o.system.app||o.system.appType).toLowerCase()){case"set":o.system.appdata=o.system.name+"="+o.system.value;break;case"custom":break;default:e[0]=o.system.command,e[1]=o.system.variable,o.system.appdata=e.join(",")}l(o.system)},o.closeDialog=l,i.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(e.appType||e.app).toUpperCase(),o.tag=angular.copy(e),o.tag.appdata)switch(o.tag.appType?o.tag.appType.toLowerCase():o.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.tag.appdata.split(",");o.tag.key=s[0],o.tag.language=s[1],o.tag.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.tag.appdata.split(",");o.tag.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.tag.text=s.slice(1,s.length).join(",");break;case"message":o.tag.text=o.tag.appdata;break;case"set":o.tag.name=o.tag.appdata.split("=")[0],o.tag.value=o.tag.appdata.split("=")[1];break;case"agi":o.tag.project=o.tag.appdata;break;default:var r=o.tag.appdata.split(",");o.tag.tag=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outbounddial"===o.tag.appType.toLowerCase()&&(o.tag.prefix=o.tag.phone?o.tag.phone.split("$")[0]:void 0,o.tag.callerId=o.tag.callerID?"CALLERID(all)="+o.tag.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outboundDial"===o.tag.appType&&(o.tag.phone=a.cutdigits?(o.tag.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.tag.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.tag.options+="U(xcally-mixmonitor-context)"):o.tag.options=o.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.tags,{name:o.tag.tag});t&&(o.tag.TagId=t.id);if(o.tag.appType&&"custom"===o.tag.appType);else switch((o.tag.app||o.tag.appType).toLowerCase()){case"set":o.tag.appdata=o.tag.name+"="+o.tag.value;break;case"custom":break;default:e[0]=o.tag.tag,o.tag.appdata=e.join(",")}l(o.tag)},o.closeDialog=l,i.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountInteractions={count:0,rows:[]},c.selectedMailAccountInteractions=[],c.query={fields:"createdAt,updatedAt,UserId,ContactId,MailAccountId,id,createdAt,Contact.firstName,Owner.name,closedAt,disposition,note,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e){c.mailAccount=e,c.query.id=c.mailAccount.id,c.getMailAccountInteractions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},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){o.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/interactions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,interaction:t,interactions:c.mailAccountInteractions.rows,license:null,setting:null}})},c.spymailInteraction=function(e,n){o.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(s.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=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountMailCannedAnswers={count:0,rows:[]},c.selectedMailAccountMailCannedAnswers=[],c.query={fields:"createdAt,updatedAt,id,key,value,description,createdAt",limit:10,page:1},c.init=function(e){c.mailAccount=e,c.query.id=c.mailAccount.id,c.query.MailAccountId=c.mailAccount.id,c.getMailAccountMailCannedAnswers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditMailCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/mailCannedAnswers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,mailCannedAnswer:t,mailCannedAnswers:c.mailAccountMailCannedAnswers.rows,license:null,setting:null}})},c.exportSelectedMailAccountMailCannedAnswers=function(){var e=angular.copy(c.selectedMailAccountMailCannedAnswers);return c.selectedMailAccountMailCannedAnswers=[],e},c.deleteMailAccountMailCannedAnswer=g,c.deleteSelectedMailAccountMailCannedAnswers=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MAIL.EDIT_MAILCANNEDANSWER",u.mailCannedAnswer=angular.copy(r),u.mailCannedAnswers=s,u.newMailCannedAnswer=!1,u.mailCannedAnswer||(u.mailCannedAnswer={},u.title="MAIL.NEW_MAILCANNEDANSWER",u.newMailCannedAnswer=!0),t.params.id&&(u.mailCannedAnswer.MailAccountId=t.params.id),u.addNewMailCannedAnswer=function(){u.errors=[],l.cannedAnswer.save(u.mailCannedAnswer).$promise.then(function(e){u.mailCannedAnswers.unshift(e.toJSON()),o.success({title:"MailCannedAnswer properly created",msg:u.mailCannedAnswer.name?u.mailCannedAnswer.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMailCannedAnswer=function(){u.errors=[],l.cannedAnswer.update({id:u.mailCannedAnswer.id},u.mailCannedAnswer).$promise.then(function(e){var t=_.find(u.mailCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailCannedAnswer properly saved!",msg:u.mailCannedAnswer.name?u.mailCannedAnswer.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMailCannedAnswer=function(e){u.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(){l.cannedAnswer.delete({id:u.mailCannedAnswer.id}).$promise.then(function(){_.remove(u.mailCannedAnswers,{id:u.mailCannedAnswer.id}),o.success({title:"MailCannedAnswer properly deleted!",msg:(u.mailCannedAnswer.name||"mailCannedAnswer")+" has been deleted!"}),p(u.mailCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","mailCannedAnswers","mailCannedAnswer","api","Auth","license","setting"],angular.module("app.mail").controller("CreateOrEditMailCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountMailDispositions={count:0,rows:[]},c.selectedMailAccountMailDispositions=[],c.query={fields:"createdAt,updatedAt,id,name,createdAt",limit:10,page:1},c.init=function(e){c.mailAccount=e,c.query.id=c.mailAccount.id,c.query.MailAccountId=c.mailAccount.id,c.getMailAccountMailDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditMailDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/mailDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,mailDisposition:t,mailDispositions:c.mailAccountMailDispositions.rows,license:null,setting:null}})},c.exportSelectedMailAccountMailDispositions=function(){var e=angular.copy(c.selectedMailAccountMailDispositions);return c.selectedMailAccountMailDispositions=[],e},c.deleteMailAccountMailDisposition=g,c.deleteSelectedMailAccountMailDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MAIL.EDIT_MAILDISPOSITION",u.mailDisposition=angular.copy(r),u.mailDispositions=s,u.newMailDisposition=!1,u.mailDisposition||(u.mailDisposition={},u.title="MAIL.NEW_MAILDISPOSITION",u.newMailDisposition=!0),t.params.id&&(u.mailDisposition.MailAccountId=t.params.id),u.addNewMailDisposition=function(){u.errors=[],l.disposition.save(u.mailDisposition).$promise.then(function(e){u.mailDispositions.unshift(e.toJSON()),o.success({title:"MailDisposition properly created",msg:u.mailDisposition.name?u.mailDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMailDisposition=function(){u.errors=[],l.disposition.update({id:u.mailDisposition.id},u.mailDisposition).$promise.then(function(e){var t=_.find(u.mailDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailDisposition properly saved!",msg:u.mailDisposition.name?u.mailDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMailDisposition=function(e){u.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(){l.disposition.delete({id:u.mailDisposition.id}).$promise.then(function(){_.remove(u.mailDispositions,{id:u.mailDisposition.id}),o.success({title:"MailDisposition properly deleted!",msg:(u.mailDisposition.name||"mailDisposition")+" has been deleted!"}),p(u.mailDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","mailDispositions","mailDisposition","api","Auth","license","setting"],angular.module("app.mail").controller("CreateOrEditMailDispositionDialogController",e)}(),function(){"use strict";function e(n,e,a,i,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.mailAccount=d||n.params.mailAccount||{},c.selectedTab=n.params.tab||0,c.gotogoto=function(e,t){n.go("app.mail.realtime.accounts",{})},c.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:c.mailAccounts?c.mailAccounts.rows:[],realtime:!1}})},c.alert=r.info,c.gotoMailAccounts=function(){n.go("app.mail.mailAccounts")},c.saveMailAccount=function(){s.mailAccount.update({id:c.mailAccount.id},c.mailAccount).$promise.then(function(){r.success({title:"MailAccount updated!",msg:c.mailAccount.name?c.mailAccount.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","license","setting","api","toasty","Auth","mailAccount"],angular.module("app.mail").controller("MailAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.mailAccounts=r||{count:0,rows:[]},v.table="mailAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedMailAccounts=[],v.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,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v["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"),"")}),v["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"),"")}),v.editstate=function(e,t){n.go("app.mail.mailAccounts.edit",{id:e.id,mailAccount:e})},v.verifysmtpverifysmtp=function(e,t){{if(e&&e.id)return l.mailAccount.verifySmtp({id:e.id}).$promise.then(function(){c.success({title:"Smtp properly verified",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"Smtp properly verified",msg:e.data?JSON.stringify(e.data):e.toString()})});c.error({title:"Smtp properly verified",msg:"Smpt id unknown"})}},v.interactionsgoto=function(e,t){n.go("app.mail.mailAccounts.edit",{id:e.id,tab:6})},v.gotorealtimegoto=function(e,t){n.go("app.mail.realtime.accounts",{})},v.agentadddialog=function(e,t){i.show({controller:"MailAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailAccount:e,mailAccounts:v.mailAccounts?v.mailAccounts.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the mailAccount?").htmlContent("<b>"+(e.name||"mailAccount")+"</b> will be deleted.").ariaLabel("delete mailAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getMailAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.mailAccount.get(v.query,f).$promise},v.createOrEditMailAccount=function(e,t){i.show({controller:"CreateOrEditMailAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:t,mailAccounts:v.mailAccounts.rows,license:v.license,setting:v.setting}})},v.deleteMailAccount=A,v.exportSelectedMailAccounts=function(){var e=angular.copy(v.selectedMailAccounts);return v.selectedMailAccounts=[],e},v.deleteSelectedMailAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailAccounts?").htmlContent("<b>"+v.selectedMailAccounts.length+" selected</b> will be deleted.").ariaLabel("delete MailAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedMailAccounts.forEach(function(e){A(e)}),v.selectedMailAccounts=[]})},v.deselectMailAccounts=function(){v.selectedMailAccounts=[]},v.selectAllMailAccounts=function(){v.selectedMailAccounts=v.mailAccounts.rows},l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.mailAccounts=e||{count:0,rows:[]}}function A(e){if(e.service)return c.error({title:"Mail Account not deleted!",msg:"You can't remove service account"});l.mailAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.mailAccounts.rows,{id:e.id}),v.mailAccounts.count-=1,v.mailAccounts.rows.length||v.getMailAccounts(),c.success({title:"MailAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailAccount"}];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:"SYSTEM:DELETEmailAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getMailAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","mailAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MAIL.EDIT_MAILQUEUE",u.mailQueue=angular.copy(r),u.mailQueues=s,u.newMailQueue=!1,u.mailQueue||(u.mailQueue={strategy:"beepall",timeout:10},u.title="MAIL.NEW_MAILQUEUE",u.newMailQueue=!0),u.addNewMailQueue=function(){u.errors=[],l.mailQueue.save(u.mailQueue).$promise.then(function(e){u.mailQueues.unshift(e.toJSON()),o.success({title:"MailQueue properly created",msg:u.mailQueue.name?u.mailQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMailQueue=function(){u.errors=[],l.mailQueue.update({id:u.mailQueue.id},u.mailQueue).$promise.then(function(e){var t=_.find(u.mailQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailQueue properly saved!",msg:u.mailQueue.name?u.mailQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMailQueue=function(e){u.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(){l.mailQueue.delete({id:u.mailQueue.id}).$promise.then(function(){_.remove(u.mailQueues,{id:u.mailQueue.id}),o.success({title:"MailQueue properly deleted!",msg:(u.mailQueue.name||"mailQueue")+" has been deleted!"}),p(u.mailQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","mailQueues","mailQueue","api","Auth","license","setting"],angular.module("app.mail").controller("CreateOrEditMailQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.mailQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.mailQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserMailQueue?"penalty "+e.UserMailQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserMailQueue?"penalty "+e.UserMailQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.mailQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("MAIL.ALL_AGENTS"),labelSelected:s.instant("MAIL.SELECTED_AGENTS"),transferCallback:function(e,t){a.mailQueue[t?"removeAgents":"addAgents"]({id:l.mailQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"MailQueue properly "+(t?"removed":"added"),msg:"MailQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:mailQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","mailQueue","mailQueues","realtime","$translate","Auth"],angular.module("app.mail").controller("MailQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.mailQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MAIL.ALL_TEAMS"),labelSelected:i.instant("MAIL.SELECTED_TEAMS"),transferCallback:function(e,t){a.mailQueue[t?"removeTeams":"addTeams"]({id:o.mailQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:mailQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.mailQueue.getTeams({id:o.mailQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","mailQueue","$translate"],angular.module("app.mail").controller("MailQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.mailQueue=d||e.params.mailQueue||{},c.selectedTab=e.params.tab||0,c.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:c.mailQueues?c.mailQueues.rows:[]}})},c.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:c.mailQueues?c.mailQueues.rows:[],realtime:!1}})},c.alert=r.info,c.gotoMailQueues=function(){e.go("app.mail.mailQueues")},c.saveMailQueue=function(){s.mailQueue.update({id:c.mailQueue.id},c.mailQueue).$promise.then(function(){r.success({title:"MailQueue updated!",msg:c.mailQueue.name?c.mailQueue.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","mailQueue"],angular.module("app.mail").controller("MailQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.mailQueues=r||{count:0,rows:[]},v.table="mailQueues",v.listOrder="",v.listOrderAsc=null,v.selectedMailQueues=[],v.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"mail",limit:10,page:1},v.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.mail.mailQueues.edit",{id:e.id,mailQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"MailQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:v.mailQueues?v.mailQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"MailQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:v.mailQueues?v.mailQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the mailQueue?").htmlContent("<b>"+(e.name||"mailQueue")+"</b> will be deleted.").ariaLabel("delete mailQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.mail.realtime.queues",{})},v.success=f,v.getMailQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.mailQueue.get(v.query,f).$promise},v.createOrEditMailQueue=function(e,t){i.show({controller:"CreateOrEditMailQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailQueue:t,mailQueues:v.mailQueues.rows,license:v.license,setting:v.setting}})},v.deleteMailQueue=A,v.exportSelectedMailQueues=function(){var e=angular.copy(v.selectedMailQueues);return v.selectedMailQueues=[],e},v.deleteSelectedMailQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailQueues?").htmlContent("<b>"+v.selectedMailQueues.length+" selected</b> will be deleted.").ariaLabel("delete MailQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedMailQueues.forEach(function(e){A(e)}),v.selectedMailQueues=[]})},v.deselectMailQueues=function(){v.selectedMailQueues=[]},v.selectAllMailQueues=function(){v.selectedMailQueues=v.mailQueues.rows};var h=!0,b=1;function f(e){v.mailQueues=e||{count:0,rows:[]}}function A(e){l.mailQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.mailQueues.rows,{id:e.id}),v.mailQueues.count-=1,v.mailQueues.rows.length||v.getMailQueues(),c.success({title:"MailQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailQueue"}];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:"SYSTEM:DELETEmailQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getMailQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","mailQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MAIL.EDIT_MAILSUBSTATUS",u.mailSubstatus=angular.copy(r),u.mailSubtatuses=s,u.newMailSubstatus=!1,u.mailSubstatus||(u.mailSubstatus={},u.title="MAIL.NEW_MAILSUBSTATUS",u.newMailSubstatus=!0),u.addNewMailSubstatus=function(){u.errors=[],l.mailSubstatus.save(u.mailSubstatus).$promise.then(function(e){u.mailSubtatuses.unshift(e.toJSON()),o.success({title:"MailSubstatus properly created",msg:u.mailSubstatus.name?u.mailSubstatus.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMailSubstatus=function(){u.errors=[],l.mailSubstatus.update({id:u.mailSubstatus.id},u.mailSubstatus).$promise.then(function(e){var t=_.find(u.mailSubtatuses,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailSubstatus properly saved!",msg:u.mailSubstatus.name?u.mailSubstatus.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMailSubstatus=function(e){u.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(){l.mailSubstatus.delete({id:u.mailSubstatus.id}).$promise.then(function(){_.remove(u.mailSubtatuses,{id:u.mailSubstatus.id}),o.success({title:"MailSubstatus properly deleted!",msg:(u.mailSubstatus.name||"mailSubstatus")+" has been deleted!"}),p(u.mailSubstatus)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","mailSubtatuses","mailSubstatus","api","Auth","license","setting"],angular.module("app.mail").controller("CreateOrEditMailSubstatusDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.mailSubtatuses=r||{count:0,rows:[]},v.table="mailSubtatuses",v.listOrder="",v.listOrderAsc=null,v.selectedMailSubstatuses=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditMailSubstatusDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailSubtatuses/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailSubstatus:e,mailSubtatuses:v.mailSubtatuses.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the mailSubstatus?").htmlContent("<b>"+(e.name||"mailSubstatus")+"</b> will be deleted.").ariaLabel("delete mailSubstatus").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getMailSubstatuses=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.mailSubstatus.get(v.query,f).$promise},v.createOrEditMailSubstatus=function(e,t){i.show({controller:"CreateOrEditMailSubstatusDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailSubtatuses/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailSubstatus:t,mailSubtatuses:v.mailSubtatuses.rows,license:v.license,setting:v.setting}})},v.deleteMailSubstatus=A,v.exportSelectedMailSubstatuses=function(){var e=angular.copy(v.selectedMailSubstatuses);return v.selectedMailSubstatuses=[],e},v.deleteSelectedMailSubstatuses=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailSubtatuses?").htmlContent("<b>"+v.selectedMailSubstatuses.length+" selected</b> will be deleted.").ariaLabel("delete MailSubstatuss").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedMailSubstatuses.forEach(function(e){A(e)}),v.selectedMailSubstatuses=[]})},v.deselectMailSubstatuses=function(){v.selectedMailSubstatuses=[]},v.selectAllMailSubstatuses=function(){v.selectedMailSubstatuses=v.mailSubtatuses.rows};var h=!0,b=1;function f(e){v.mailSubtatuses=e||{count:0,rows:[]}}function A(e){l.mailSubstatus.delete({id:e.id}).$promise.then(function(){_.remove(v.mailSubtatuses.rows,{id:e.id}),v.mailSubtatuses.count-=1,v.mailSubtatuses.rows.length||v.getMailSubstatuses(),c.success({title:"MailSubstatus deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailSubstatus"}];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:"SYSTEM:DELETEmailSubstatus",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getMailSubstatuses())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","mailSubtatuses","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailSubstatusesController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d){var c=this;function m(){_.forIn(c.mailAccounts,function(e,t){c.rpcMailAccounts[t]&&_.merge(e,c.rpcMailAccounts[t])}),_.forIn(c.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")};o.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",o.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)})})}c.count=l&&l.count?l.count:0,c.mailAccounts=l?_.keyBy(l.rows?l.rows:[],"id"):{},c.rpcMailAccounts=d?_.keyBy(d.rows?d.rows:[],"id"):{},c.query={sort:"-name",limit:10,page:1},c.success=g,c.$onInit=m,c.getMailAccounts=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.mailAccount.get(c.query,g).$promise},c.onSave=function(e){c.mailAccounts[e.id]&&_.merge(c.mailAccounts[e.id],e)},c.onMailMessageSave=function(e){c.mailAccounts[e.MailAccountId]&&("in"==e.direction?(c.mailAccounts[e.MailAccountId].in+=1,c.mailAccounts[e.MailAccountId].lastIn=e.createdAt):(c.mailAccounts[e.MailAccountId].out+=1,c.mailAccounts[e.MailAccountId].lastOut=e.createdAt))},c.goToMailAccount=function(e,t){i.go("app.mail.mailAccounts.edit",{id:t.id,mailAccount:t})},c.verifySmtp=function(e,t){{if(t&&t.id)return o.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"})}},c.order=[],_.forIn(c.mailAccounts,function(e,t){c.order.push(e.id)}),s.on("mailAccount:save",c.onSave),s.on("mailAccount:update",c.onSave),s.on("mailMessage:save",c.onMailMessageSave);var u=!0,p=1;function g(e){if(c.mailAccounts=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){c.order=[];for(var t=0;t<e.rows.length;t++)c.order.push(e.rows[t].id)}m()}e.$watch("vm.query.filter",function(e,t){u?n(function(){u=!1}):(t||(p=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=p),c.getMailAccounts())}),e.$on("$destroy",function(){s.removeAllListeners("mailAccount:save"),s.removeAllListeners("mailAccount:update"),s.removeAllListeners("mailMessage:save")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$state","api","socket","toasty","mailAccounts","rpcMailAccounts"],angular.module("app.mail").controller("MailAccountsRealtimeController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsMailRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.mailQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].MailQueueId].paused++,u.queues[e[t].rows[n].MailQueueId].loggedInDb++,u.queues[e[t].rows[n].MailQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].MailQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"mail",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.mailQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!1}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.MailQueueId]&&u.queues[e.MailQueueId].loggedInDb++},u.onRemoveMember=function(e){u.queues[e.MailQueueId]&&u.queues[e.MailQueueId].loggedInDb--},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.MailQueueId]&&(u.queues[e.MailQueueId].loggedInDb+=1,u.queues[e.MailQueueId].agents[e.UserId]=e.MailQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.MailQueueId]&&0<u.queues[e.MailQueueId].loggedInDb&&(u.queues[e.MailQueueId].loggedInDb-=1,delete u.queues[e.MailQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.on("mail_queue:save",u.onSave),d.on("userMailQueue:save",u.onSaveMember),d.on("userMailQueue:remove",u.onRemoveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.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","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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MARKETPLACE.EDIT_PLUGIN",u.plugin=angular.copy(r),u.plugins=s,u.newPlugin=!1,u.plugin||(u.plugin={},u.title="MARKETPLACE.NEW_PLUGIN",u.newPlugin=!0),u.addNewPlugin=function(){u.errors=[],l.plugin.save(u.plugin).$promise.then(function(e){u.plugins.unshift(e.toJSON()),o.success({title:"Plugin properly created",msg:u.plugin.name?u.plugin.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.savePlugin=function(){u.errors=[],l.plugin.update({id:u.plugin.id},u.plugin).$promise.then(function(e){var t=_.find(u.plugins,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Plugin properly saved!",msg:u.plugin.name?u.plugin.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deletePlugin=function(e){u.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(){l.plugin.delete({id:u.plugin.id}).$promise.then(function(){_.remove(u.plugins,{id:u.plugin.id}),o.success({title:"Plugin properly deleted!",msg:(u.plugin.name||"plugin")+" has been deleted!"}),p(u.plugin)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","plugins","plugin","api","Auth","license","setting"],angular.module("app.marketplace").controller("CreateOrEditPluginDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.plugin=d||e.params.plugin||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoPlugins=function(){e.go("app.marketplace.plugins")},c.savePlugin=function(){s.plugin.update({id:c.plugin.id},c.plugin).$promise.then(function(){r.success({title:"Plugin updated!",msg:c.plugin.name?c.plugin.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","plugin"],angular.module("app.marketplace").controller("MarketplacePluginController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.plugins=r||{count:0,rows:[]},v.table="plugins",v.listOrder="",v.listOrderAsc=null,v.selectedPlugins=[],v.query={fields:"createdAt,updatedAt,id,name,type,active,description,icon,sidebar,path,adminUrl,agentUrl,scriptName,scriptPath,version",sort:"name",limit:10,page:1},v.installing=!1,v.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"),"")}),v.installplugin=function(e){{if("script"!==e.type)return e.active=!0,l.plugin.update({id:e.id},e).$promise.then(function(){c.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){v.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.update"}];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:"api.plugin.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})});v.installing=!0,l.pm2.save({name:e.scriptName,script:e.path+"/"+e.scriptPath}).$promise.then(function(){return e.active=!0,l.plugin.update({id:e.id},e).$promise}).then(function(){v.installing=!1,c.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){v.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.save"}];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:"api.pm2.save",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}},v.editstate=function(e,t){n.go("app.marketplace.plugins.edit",{id:e.id,plugin:e})},v.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,l.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");l.pm2.update({id:t.pm_id,status:"stopped"}).$promise.then(function(){c.success({title:"Process stopped!",msg:"Attached pm2 process successfully stopped"})})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.update"}];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:"api.pm2.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){console.log("CANCEL")})},v.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,l.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");l.pm2.update({id:t.pm_id,status:"online"}).$promise.then(function(){c.success({title:"Process restarted!",msg:"Attached pm2 process successfully restarted"})})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.update"}];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:"api.pm2.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){console.log("CANCEL")})},v.downloadfile2=function(o,e){return l.plugin.download({id:o.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=o.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++)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.plugin.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.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&&l.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");l.pm2.delete({id:t.pm_id,name:n.scriptName}).$promise}).catch(function(e){c.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,l.plugin.update({id:n.id},n).$promise.then(function(){c.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){v.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.update"}];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:"api.plugin.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}(e)},function(){console.log("CANCEL")})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the plugin?").htmlContent("<b>"+(e.name||"plugin")+"</b> will be deleted.").ariaLabel("delete plugin").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getPlugins=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.plugin.get(v.query,f).$promise},v.createOrEditPlugin=function(e,t){i.show({controller:"CreateOrEditPluginDialogController",controllerAs:"vm",templateUrl:"app/main/apps/marketplace/views/plugins/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{plugin:t,plugins:v.plugins.rows,license:v.license,setting:v.setting}})},v.deletePlugin=A,v.exportSelectedPlugins=function(){var e=angular.copy(v.selectedPlugins);return v.selectedPlugins=[],e},v.deleteSelectedPlugins=function(e){var t=i.confirm().title("Are you sure want to delete the selected plugins?").htmlContent("<b>"+v.selectedPlugins.length+" selected</b> will be deleted.").ariaLabel("delete Plugins").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedPlugins.forEach(function(e){A(e)}),v.selectedPlugins=[]})},v.deselectPlugins=function(){v.selectedPlugins=[]},v.selectAllPlugins=function(){v.selectedPlugins=v.plugins.rows},v.uploadPlugin=function(e){i.show({controller:"UploadPluginDialogController",controllerAs:"vm",templateUrl:"app/main/apps/marketplace/views/plugins/upload/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{plugins:v.plugins.rows}})};var h=!0,b=1;function f(e){v.plugins=e||{count:0,rows:[]}}function A(n){n.active&&"script"==n.type&&l.pm2.get().$promise.then(function(e){if(!e||!e.rows)return c.error({title:"Plugin not deleted!",msg:"Failed to retrieve pm2 processes"});var t=_.find(e.rows,{name:n.scriptName});t?l.pm2.delete({id:t.pm_id,name:n.scriptName}).$promise:console.log("No '%s' process found",n.scriptName)}).catch(function(e){return c.error({title:"PM2 process not found!",msg:"Failed to delete the attached pm2 process"})}),l.plugin.delete({id:n.id}).$promise.then(function(){_.remove(v.plugins.rows,{id:n.id}),v.plugins.count-=1,v.plugins.rows.length||v.getPlugins(),c.success({title:"Plugin deleted!",msg:n.name?n.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEplugin"}];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:"SYSTEM:DELETEplugin",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getPlugins())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","plugins","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.marketplace").controller("MarketplacePluginsController",e)}(),function(){"use strict";function e(e,t,n,a,i){var o=this;o.errors=[],o.title="MARKETPLACE.UPLOAD_PLUGIN",o.plugins=a,o.uploadPlugins=[],o.uploadState="none",o.plugin={},o.ngFlowOptions={maxChunkRetries:1,chunkSize:2097152,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,target:"api/plugins",allowDuplicateUploads:!0},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 only: "+t.join()}),!1;if(2097152<e.size)return n.error({title:"File too big",msg:"The max allowed size is 2 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.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"],angular.module("app.marketplace").controller("UploadPluginDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MOTIONDIALER.EDIT_IVRCAMPAIGN",u.ivrCampaign=angular.copy(r),u.ivrCampaigns=s,u.newIvrCampaign=!1,u.ivrCampaign||(u.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},u.title="MOTIONDIALER.NEW_IVRCAMPAIGN",u.newIvrCampaign=!0),u.addNewIvrCampaign=function(){u.errors=[],l.campaign.save(u.ivrCampaign).$promise.then(function(e){u.ivrCampaigns.unshift(e.toJSON()),o.success({title:"IvrCampaign properly created",msg:u.ivrCampaign.name?u.ivrCampaign.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveIvrCampaign=function(){u.errors=[],l.campaign.update({id:u.ivrCampaign.id},u.ivrCampaign).$promise.then(function(e){var t=_.find(u.ivrCampaigns,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"IvrCampaign properly saved!",msg:u.ivrCampaign.name?u.ivrCampaign.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteIvrCampaign=function(e){u.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(){l.campaign.delete({id:u.ivrCampaign.id}).$promise.then(function(){_.remove(u.ivrCampaigns,{id:u.ivrCampaign.id}),o.success({title:"IvrCampaign properly deleted!",msg:(u.ivrCampaign.name||"ivrCampaign")+" has been deleted!"}),p(u.ivrCampaign)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.projects=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).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","toasty","ivrCampaigns","ivrCampaign","api","Auth","license","setting"],angular.module("app.motiondialer").controller("CreateOrEditIvrCampaignDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o){var s=this;s.ivrCampaign=t,s.items=[],s.selectedItems=[],s.loading=!1,s.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:i.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){s.loading=!0,a.campaign[t?"removeBlackLists":"addBlackLists"]({id:s.ivrCampaign.id,ids:_.map(e,"id")}).$promise.then(function(){n.success({title:"List properly "+(t?"removed":"added"),msg:"List has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ivrCampaign.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){s.loading=!1})}},s.closeDialog=function(){e.hide()},a.campaign.getBlackLists({id:s.ivrCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return s.selectedItems=e.rows?e.rows:[],s.dualMultiselectOptions.selectedItems=s.selectedItems,a.cmList.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){s.items=e.rows?e.rows:[],s.dualMultiselectOptions.items=_.differenceBy(s.items,s.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","ivrCampaign","$translate","$timeout"],angular.module("app.motiondialer").controller("IvrCampaignblacklistaddController",e)}(),function(){"use strict";function e(t,n,a,e,i,o,s){var r=this;function l(e){t.hide(e)}r.newIvrCampaign=!0,r.ivrCampaign=angular.copy(i),r.ivrCampaigns=o,r.title=s.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHopperBlacks={count:0,rows:[]},c.selectedIvrCampaignHopperBlacks=[],c.query={fields:"createdAt,updatedAt,ContactId,phone",sort:"-id",limit:10,page:1},c.init=function(e){c.ivrCampaign=e,c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperBlacks()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperBlackDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperBlacks/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperBlack:t,hopperBlacks:c.ivrCampaignHopperBlacks.rows,license:null,setting:null}})},c.exportSelectedIvrCampaignHopperBlacks=function(){var e=angular.copy(c.selectedIvrCampaignHopperBlacks);return c.selectedIvrCampaignHopperBlacks=[],e},c.deleteIvrCampaignHopperBlack=g,c.deleteSelectedIvrCampaignHopperBlacks=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.contacts={},c.ivrCampaign={},c.ivrCampaignHopperFinals={count:0,rows:[]},c.selectedIvrCampaignHopperFinals=[],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){c.ivrCampaign=e,c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperFinals()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperFinalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperFinals/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperFinal:t,hopperFinals:c.ivrCampaignHopperFinals.rows,license:null,setting:null}})},c.exportSelectedIvrCampaignHopperFinals=function(){var e=angular.copy(c.selectedIvrCampaignHopperFinals);return c.selectedIvrCampaignHopperFinals=[],e},c.deleteIvrCampaignHopperFinal=g,c.deleteSelectedIvrCampaignHopperFinals=function(e){var t=o.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");o.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=o.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");o.show(n).then(function(){v(e)},function(){console.log("CANCEL")})},c.moveSelectedIvrCampaignHopperFinals=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHopperHistories={count:0,rows:[]},c.selectedIvrCampaignHopperHistories=[],c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,scheduledat,starttime,responsetime,endtime",sort:"-id",limit:10,page:1},c.init=function(e){c.ivrCampaign=e,c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperHistories()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperHistoryDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperHistories/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperHistory:t,hopperHistories:c.ivrCampaignHopperHistories.rows,license:null,setting:null}})},c.exportSelectedIvrCampaignHopperHistories=function(){var e=angular.copy(c.selectedIvrCampaignHopperHistories);return c.selectedIvrCampaignHopperHistories=[],e},c.deleteIvrCampaignHopperHistory=g,c.deleteSelectedIvrCampaignHopperHistories=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHoppers={count:0,rows:[]},c.selectedIvrCampaignHoppers=[],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){c.ivrCampaign=e,c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHoppers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperCampaignIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hoppers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopper:t,hoppers:c.ivrCampaignHoppers.rows,license:null,setting:null}})},c.exportSelectedIvrCampaignHoppers=function(){var e=angular.copy(c.selectedIvrCampaignHoppers);return c.selectedIvrCampaignHoppers=[],e},c.deleteIvrCampaignHopper=g,c.deleteSelectedIvrCampaignHoppers=function(e){var t=o.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");o.show(t).then(function(){c.selectedIvrCampaignHoppers.forEach(function(e){g(e)}),c.selectedIvrCampaignHoppers=[]})},l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=_.keyBy(e.rows||[],"id")}).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){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MOTIONDIALER.EDIT_HOPPER",u.hopper=angular.copy(r),u.hoppers=o,u.newHopper=!1,u.hopper||(u.hopper={},u.title="MOTIONDIALER.NEW_HOPPER",u.newHopper=!0),t.params.id&&(u.hopper.CampaignId=t.params.id),u.addNewHopper=function(){u.errors=[],l.cmHopper.save(u.hopper).$promise.then(function(e){u.hoppers.unshift(e.toJSON()),s.success({title:"Hopper properly created",msg:u.hopper.name?u.hopper.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveHopper=function(){var n,a,i,o;u.errors=[],u.hopper.UserId=u.hopper.recallme?u.hopper.UserId:null,l.cmHopper.get({id:u.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(){l.cmHopper.update({id:u.hopper.id},_.omit(u.hopper,["VoiceQueueId","CampaignId","ContactId","ListId"])).$promise.then(function(e){a=e,l.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(){l.campaign.get({raw:!1,id:a.CampaignId,attributes:["name"]}).$promise.then(function(e){o=e.name}).catch(function(e){o=void 0}).finally(function(){l.cmHopperHistory.save({state:24,statedesc:"Edited",scheduledat:n,calleridnum:a.phone,calleridname:i,campaigntype:a.VoiceQueueId?"queue":"ivr",campaign:o,editedat:moment().format("YYYY-MM-DD HH:mm:ss"),edited:!0,ListId:a.ListId,UserId:d.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(u.hoppers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),s.success({title:"Hopper properly saved!",msg:u.hopper.name?u.hopper.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})})},u.deleteHopper=function(e){u.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(){l.cmHopper.delete({id:u.hopper.id}).$promise.then(function(){_.remove(u.hoppers,{id:u.hopper.id}),s.success({title:"Hopper properly deleted!",msg:(u.hopper.name||"hopper")+" has been deleted!"}),p(u.hopper)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){u.agents=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","hoppers","hopper","api","Auth","license","setting"],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,n,a,t,i,o){var s=this;s.ivrCampaign=t,s.items=[],s.selectedItems=[],s.loading=!1,s.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:i.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){s.loading=!0,a.campaign[t?"removeLists":"addLists"]({id:s.ivrCampaign.id,ids:_.map(e,"id")}).$promise.then(function(){n.success({title:"List properly "+(t?"removed":"added"),msg:"List has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ivrCampaign.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){s.loading=!1})}},s.closeDialog=function(){e.hide()},a.campaign.getLists({id:s.ivrCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return s.selectedItems=e.rows?e.rows:[],s.dualMultiselectOptions.selectedItems=s.selectedItems,a.cmList.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){s.items=e.rows?e.rows:[],s.dualMultiselectOptions.items=_.differenceBy(s.items,s.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","ivrCampaign","$translate","$timeout"],angular.module("app.motiondialer").controller("IvrCampaignlistaddController",e)}(),function(){"use strict";function e(e,t,a,i,o,n,s,r){var l=this;function d(){t.hide()}function c(e,t){var n=t.id;s.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(o.id,l.selected[n]);var a;a=e,s.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,o,t,a,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=a,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.ivrCampaign=d||n.params.ivrCampaign||{},c.selectedTab=n.params.tab||0,c.clonedialog=function(e,t){i.show({controller:"IvrCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:c.ivrCampaigns?c.ivrCampaigns.rows:[]}})},c.listadddialog=function(e,t){i.show({controller:"IvrCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/listadd/listadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:c.ivrCampaigns?c.ivrCampaigns.rows:[]}})},c.blacklistadddialog=function(e,t){i.show({controller:"IvrCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:c.ivrCampaigns?c.ivrCampaigns.rows:[]}})},c.resetlistdialog=function(t,n){s.campaign.getLists({id:t.id,fields:"id,name",nolimit:!0}).$promise.then(function(a){if(_.isNil(a.rows)||_.isEmpty(a.rows))r.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=c.ivrCampaign.id,t=a.rows[0],n=t.id,s.campaign.removeLists({id:e,ids:n}).$promise.then(function(){return s.campaign.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){r.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){r.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(o.body),targetEvent:n,clickOutsideToClose:!1,locals:{ivrCampaign:t,listsCampaign:a?a.rows:[]}})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.gotogoto=function(e,t){n.go("app.motiondialer.realtime.ivr_campaigns",{})},c.alert=r.info,c.gotoIvrCampaigns=function(){n.go("app.motiondialer.ivrCampaigns")},c.saveIvrCampaign=function(){s.campaign.update({id:c.ivrCampaign.id},c.ivrCampaign).$promise.then(function(){r.success({title:"IvrCampaign updated!",msg:c.ivrCampaign.name?c.ivrCampaign.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.trunks=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.projects=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){c.interval=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","ivrCampaign"],angular.module("app.motiondialer").controller("IvrCampaignController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.ivrCampaigns=r||{count:0,rows:[]},v.table="ivrCampaigns",v.listOrder="",v.listOrderAsc=null,v.selectedIvrCampaigns=[],v.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},v.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"),"")}),v.arraydialOrderByScheduledAt=_.keyBy([{option:"DESC",value:"'DESC'"},{option:"ASC",value:"'ASC'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.motiondialer.ivrCampaigns.edit",{id:e.id,ivrCampaign:e})},v.clonedialog=function(e,t){i.show({controller:"IvrCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:v.ivrCampaigns?v.ivrCampaigns.rows:[]}})},v.listadddialog=function(e,t){i.show({controller:"IvrCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/listadd/listadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:v.ivrCampaigns?v.ivrCampaigns.rows:[]}})},v.blacklistadddialog=function(e,t){i.show({controller:"IvrCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:v.ivrCampaigns?v.ivrCampaigns.rows:[]}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the ivrCampaign?").htmlContent("<b>"+(e.name||"ivrCampaign")+"</b> will be deleted.").ariaLabel("delete ivrCampaign").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.motiondialer.realtime.ivr_campaigns",{})},v.success=f,v.getIvrCampaigns=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.campaign.get(v.query,f).$promise},v.createOrEditIvrCampaign=function(e,t){i.show({controller:"CreateOrEditIvrCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:t,ivrCampaigns:v.ivrCampaigns.rows,license:v.license,setting:v.setting}})},v.deleteIvrCampaign=A,v.exportSelectedIvrCampaigns=function(){var e=angular.copy(v.selectedIvrCampaigns);return v.selectedIvrCampaigns=[],e},v.deleteSelectedIvrCampaigns=function(e){var t=i.confirm().title("Are you sure want to delete the selected ivrCampaigns?").htmlContent("<b>"+v.selectedIvrCampaigns.length+" selected</b> will be deleted.").ariaLabel("delete IvrCampaigns").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedIvrCampaigns.forEach(function(e){A(e)}),v.selectedIvrCampaigns=[]})},v.deselectIvrCampaigns=function(){v.selectedIvrCampaigns=[]},v.selectAllIvrCampaigns=function(){v.selectedIvrCampaigns=v.ivrCampaigns.rows},l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.trunks=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.projects=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){v.interval=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.ivrCampaigns=e||{count:0,rows:[]}}function A(e){l.campaign.delete({id:e.id}).$promise.then(function(){_.remove(v.ivrCampaigns.rows,{id:e.id}),v.ivrCampaigns.count-=1,v.ivrCampaigns.rows.length||v.getIvrCampaigns(),c.success({title:"IvrCampaign deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcampaign"}];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:"SYSTEM:DELETEcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getIvrCampaigns())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","ivrCampaigns","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.motiondialer").controller("IvrCampaignsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MOTIONDIALER.EDIT_QUEUECAMPAIGN",u.queueCampaign=angular.copy(r),u.queueCampaigns=s,u.newQueueCampaign=!1,u.queueCampaign||(u.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},u.title="MOTIONDIALER.NEW_QUEUECAMPAIGN",u.newQueueCampaign=!0),u.addNewQueueCampaign=function(){u.errors=[],l.voiceQueue.save(u.queueCampaign).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"voice",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.queueCampaigns.unshift(e.toJSON()),o.success({title:"QueueCampaign properly created",msg:u.queueCampaign.name?u.queueCampaign.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveQueueCampaign=function(){u.errors=[],l.voiceQueue.update({id:u.queueCampaign.id},u.queueCampaign).$promise.then(function(e){var t=_.find(u.queueCampaigns,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"QueueCampaign properly saved!",msg:u.queueCampaign.name?u.queueCampaign.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteQueueCampaign=function(e){u.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(){l.voiceQueue.delete({id:u.queueCampaign.id}).$promise.then(function(){return l.voiceQueue.getAgents({id:u.queueCampaign.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.queueCampaign.id],channel:"voice",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.queueCampaigns,{id:u.queueCampaign.id}),o.success({title:"QueueCampaign properly deleted!",msg:(u.queueCampaign.name||"queueCampaign")+" has been deleted!"}),p(u.queueCampaign)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).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","toasty","queueCampaigns","queueCampaign","api","Auth","license","setting"],angular.module("app.motiondialer").controller("CreateOrEditQueueCampaignDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.voiceQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.queueCampaign.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserQueueCampaign?"penalty "+e.UserQueueCampaign.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserQueueCampaign?"penalty "+e.UserQueueCampaign.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.queueCampaign=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,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){a.voiceQueue[t?"removeAgents":"addAgents"]({id:l.queueCampaign.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"QueueCampaign properly "+(t?"removed":"added"),msg:"QueueCampaign has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:voiceQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","queueCampaign","queueCampaigns","realtime","$translate","Auth"],angular.module("app.motiondialer").controller("QueueCampaignagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i,o){var s=this;s.queueCampaign=t,s.items=[],s.selectedItems=[],s.loading=!1,s.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:i.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){s.loading=!0,a.voiceQueue[t?"removeBlackLists":"addBlackLists"]({id:s.queueCampaign.id,ids:_.map(e,"id")}).$promise.then(function(){n.success({title:"List properly "+(t?"removed":"added"),msg:"List has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){s.loading=!1})}},s.closeDialog=function(){e.hide()},a.voiceQueue.getBlackLists({id:s.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return s.selectedItems=e.rows?e.rows:[],s.dualMultiselectOptions.selectedItems=s.selectedItems,a.cmList.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){s.items=e.rows?e.rows:[],s.dualMultiselectOptions.items=_.differenceBy(s.items,s.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","queueCampaign","$translate","$timeout"],angular.module("app.motiondialer").controller("QueueCampaignblacklistaddController",e)}(),function(){"use strict";function e(t,n,a,e,i,o,s){var r=this;function l(e){t.hide(e)}r.newQueueCampaign=!0,r.queueCampaign=angular.copy(i),r.queueCampaigns=o,r.title=s.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHopperBlacks={count:0,rows:[]},c.selectedQueueCampaignHopperBlacks=[],c.query={fields:"createdAt,updatedAt,ContactId,phone",sort:"-id",limit:10,page:1},c.init=function(e){c.queueCampaign=e,c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperBlacks()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperBlackDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperBlacks/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperBlack:t,hopperBlacks:c.queueCampaignHopperBlacks.rows,license:null,setting:null}})},c.exportSelectedQueueCampaignHopperBlacks=function(){var e=angular.copy(c.selectedQueueCampaignHopperBlacks);return c.selectedQueueCampaignHopperBlacks=[],e},c.deleteQueueCampaignHopperBlack=g,c.deleteSelectedQueueCampaignHopperBlacks=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.contacts={},c.queueCampaign={},c.queueCampaignHopperFinals={count:0,rows:[]},c.selectedQueueCampaignHopperFinals=[],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){c.queueCampaign=e,c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperFinals()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperFinalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperFinals/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperFinal:t,hopperFinals:c.queueCampaignHopperFinals.rows,license:null,setting:null}})},c.exportSelectedQueueCampaignHopperFinals=function(){var e=angular.copy(c.selectedQueueCampaignHopperFinals);return c.selectedQueueCampaignHopperFinals=[],e},c.deleteQueueCampaignHopperFinal=g,c.deleteSelectedQueueCampaignHopperFinals=function(e){var t=o.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");o.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=o.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");o.show(n).then(function(){v(e)},function(){console.log("CANCEL")})},c.moveSelectedQueueCampaignHopperFinals=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHopperHistories={count:0,rows:[]},c.selectedQueueCampaignHopperHistories=[],c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,scheduledat,starttime,responsetime,endtime",sort:"-id",limit:10,page:1},c.init=function(e){c.queueCampaign=e,c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperHistories()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperHistoryDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperHistories/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperHistory:t,hopperHistories:c.queueCampaignHopperHistories.rows,license:null,setting:null}})},c.exportSelectedQueueCampaignHopperHistories=function(){var e=angular.copy(c.selectedQueueCampaignHopperHistories);return c.selectedQueueCampaignHopperHistories=[],e},c.deleteQueueCampaignHopperHistory=g,c.deleteSelectedQueueCampaignHopperHistories=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHoppers={count:0,rows:[]},c.selectedQueueCampaignHoppers=[],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){c.queueCampaign=e,c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHoppers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperVoiceQueueIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hoppers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopper:t,hoppers:c.queueCampaignHoppers.rows,license:null,setting:null}})},c.exportSelectedQueueCampaignHoppers=function(){var e=angular.copy(c.selectedQueueCampaignHoppers);return c.selectedQueueCampaignHoppers=[],e},c.deleteQueueCampaignHopper=g,c.deleteSelectedQueueCampaignHoppers=function(e){var t=o.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");o.show(t).then(function(){c.selectedQueueCampaignHoppers.forEach(function(e){g(e)}),c.selectedQueueCampaignHoppers=[]})},l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=_.keyBy(e.rows||[],"id")}).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){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MOTIONDIALER.EDIT_HOPPER",u.hopper=angular.copy(r),u.hoppers=o,u.newHopper=!1,u.hopper||(u.hopper={},u.title="MOTIONDIALER.NEW_HOPPER",u.newHopper=!0),t.params.id&&(u.hopper.VoiceQueueId=t.params.id),u.addNewHopper=function(){u.errors=[],l.cmHopper.save(u.hopper).$promise.then(function(e){u.hoppers.unshift(e.toJSON()),s.success({title:"Hopper properly created",msg:u.hopper.name?u.hopper.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveHopper=function(){var n,a,i,o;u.errors=[],u.hopper.UserId=u.hopper.recallme?u.hopper.UserId:null,l.cmHopper.get({id:u.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(){l.cmHopper.update({id:u.hopper.id},_.omit(u.hopper,["VoiceQueueId","CampaignId","ContactId","ListId"])).$promise.then(function(e){a=e,l.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(){l.voiceQueue.get({raw:!1,id:a.VoiceQueueId,attributes:["name"]}).$promise.then(function(e){o=e.name}).catch(function(e){o=void 0}).finally(function(){l.cmHopperHistory.save({state:24,statedesc:"Edited",scheduledat:n,calleridnum:a.phone,calleridname:i,campaigntype:a.VoiceQueueId?"queue":"ivr",campaign:o,editedat:moment().format("YYYY-MM-DD HH:mm:ss"),edited:!0,ListId:a.ListId,UserId:d.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(u.hoppers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),s.success({title:"Hopper properly saved!",msg:u.hopper.name?u.hopper.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})})},u.deleteHopper=function(e){u.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(){l.cmHopper.delete({id:u.hopper.id}).$promise.then(function(){_.remove(u.hoppers,{id:u.hopper.id}),s.success({title:"Hopper properly deleted!",msg:(u.hopper.name||"hopper")+" has been deleted!"}),p(u.hopper)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){u.agents=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","hoppers","hopper","api","Auth","license","setting"],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,n,a,t,i,o){var s=this;s.queueCampaign=t,s.items=[],s.selectedItems=[],s.loading=!1,s.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:i.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){s.loading=!0,a.voiceQueue[t?"removeLists":"addLists"]({id:s.queueCampaign.id,ids:_.map(e,"id")}).$promise.then(function(){n.success({title:"List properly "+(t?"removed":"added"),msg:"List has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){s.loading=!1})}},s.closeDialog=function(){e.hide()},a.voiceQueue.getLists({id:s.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return s.selectedItems=e.rows?e.rows:[],s.dualMultiselectOptions.selectedItems=s.selectedItems,a.cmList.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){s.items=e.rows?e.rows:[],s.dualMultiselectOptions.items=_.differenceBy(s.items,s.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","queueCampaign","$translate","$timeout"],angular.module("app.motiondialer").controller("QueueCampaignlistaddController",e)}(),function(){"use strict";function e(e,t,a,i,o,n,s,r){var l=this;function d(){t.hide()}function c(e,t){var n=t.id;s.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(o.id,l.selected[n]);var a;a=e,s.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,n,a,t,i){var o=this;o.queueCampaign=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MOTIONDIALER.ALL_TEAMS"),labelSelected:i.instant("MOTIONDIALER.SELECTED_TEAMS"),transferCallback:function(e,t){a.voiceQueue[t?"removeTeams":"addTeams"]({id:o.queueCampaign.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.voiceQueue.getTeams({id:o.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","queueCampaign","$translate"],angular.module("app.motiondialer").controller("QueueCampaignteamaddController",e)}(),function(){"use strict";function e(n,e,i,o,t,a,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=a,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.queueCampaign=d||n.params.queueCampaign||{},c.selectedTab=n.params.tab||0,c.clonedialog=function(e,t){i.show({controller:"QueueCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:c.queueCampaigns?c.queueCampaigns.rows:[]}})},c.listadddialog=function(e,t){i.show({controller:"QueueCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/listadd/listadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:c.queueCampaigns?c.queueCampaigns.rows:[]}})},c.blacklistadddialog=function(e,t){i.show({controller:"QueueCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:c.queueCampaigns?c.queueCampaigns.rows:[]}})},c.teamadddialog=function(e,t){i.show({controller:"QueueCampaignteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:c.queueCampaigns?c.queueCampaigns.rows:[]}})},c.agentadddialog=function(e,t){i.show({controller:"QueueCampaignagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:c.queueCampaigns?c.queueCampaigns.rows:[],realtime:!1}})},c.resetlistdialog=function(t,n){s.voiceQueue.getLists({id:t.id,fields:"id,name",nolimit:!0}).$promise.then(function(a){if(_.isNil(a.rows)||_.isEmpty(a.rows))r.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=c.queueCampaign.id,t=a.rows[0],n=t.id,s.voiceQueue.removeLists({id:e,ids:n}).$promise.then(function(){return s.voiceQueue.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){r.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){r.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(o.body),targetEvent:n,clickOutsideToClose:!1,locals:{queueCampaign:t,listsCampaign:a?a.rows:[]}})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.gotogoto=function(e,t){n.go("app.motiondialer.realtime.queues",{})},c.alert=r.info,c.gotoQueueCampaigns=function(){n.go("app.motiondialer.queueCampaigns")},c.saveQueueCampaign=function(){s.voiceQueue.update({id:c.queueCampaign.id},c.queueCampaign).$promise.then(function(){r.success({title:"QueueCampaign updated!",msg:c.queueCampaign.name?c.queueCampaign.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceMusicOnHold.get({fields:"name",nolimit:"true"}).$promise.then(function(e){c.musiconholds=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmusiconholds",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.trunks=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.squareProject.get({fields:"name",sort:"name"}).$promise.then(function(e){c.projects=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){c.interval=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","queueCampaign"],angular.module("app.motiondialer").controller("QueueCampaignController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.queueCampaigns=r||{count:0,rows:[]},v.table="queueCampaigns",v.listOrder="",v.listOrderAsc=null,v.selectedQueueCampaigns=[],v.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,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,page:1},v.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"),"")}),v.arrayautopause=_.keyBy([{option:"Yes",value:"'all'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayringinuse=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraytimeoutrestart=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arraysetinterfacevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysetqueuevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysetqueueentryvar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraydialOrderByScheduledAt=_.keyBy([{option:"DESC",value:"'DESC'"},{option:"ASC",value:"'ASC'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arraydialPredictiveOptimization=_.keyBy([{option:"AgentBusyFactor",value:"'agentBusyFactor'"},{option:"DropRate",value:"'dropRate'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.editstate=function(e,t){n.go("app.motiondialer.queueCampaigns.edit",{id:e.id,queueCampaign:e})},v.clonedialog=function(e,t){i.show({controller:"QueueCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:v.queueCampaigns?v.queueCampaigns.rows:[]}})},v.listadddialog=function(e,t){i.show({controller:"QueueCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/listadd/listadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:v.queueCampaigns?v.queueCampaigns.rows:[]}})},v.blacklistadddialog=function(e,t){i.show({controller:"QueueCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:v.queueCampaigns?v.queueCampaigns.rows:[]}})},v.teamadddialog=function(e,t){i.show({controller:"QueueCampaignteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:v.queueCampaigns?v.queueCampaigns.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"QueueCampaignagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:v.queueCampaigns?v.queueCampaigns.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the queueCampaign?").htmlContent("<b>"+(e.name||"queueCampaign")+"</b> will be deleted.").ariaLabel("delete queueCampaign").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.motiondialer.realtime.queues",{})},v.success=f,v.getQueueCampaigns=function(){v.query.offset=(v.query.page-1)*v.query.limit,m.hasRole("admin")?v.promise=l.voiceQueue.get(v.query,f).$promise:(v.query.id=v.currentUser.id,v.promise=l.user.getQueues(v.query,f).$promise)},v.createOrEditQueueCampaign=function(e,t){i.show({controller:"CreateOrEditQueueCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:t,queueCampaigns:v.queueCampaigns.rows,license:v.license,setting:v.setting}})},v.deleteQueueCampaign=A,v.exportSelectedQueueCampaigns=function(){var e=angular.copy(v.selectedQueueCampaigns);return v.selectedQueueCampaigns=[],e},v.deleteSelectedQueueCampaigns=function(e){var t=i.confirm().title("Are you sure want to delete the selected queueCampaigns?").htmlContent("<b>"+v.selectedQueueCampaigns.length+" selected</b> will be deleted.").ariaLabel("delete QueueCampaigns").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedQueueCampaigns.forEach(function(e){A(e)}),v.selectedQueueCampaigns=[]})},v.deselectQueueCampaigns=function(){v.selectedQueueCampaigns=[]},v.selectAllQueueCampaigns=function(){v.selectedQueueCampaigns=v.queueCampaigns.rows},l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.trunks=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){v.interval=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.queueCampaigns=e||{count:0,rows:[]}}function A(e){l.voiceQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.queueCampaigns.rows,{id:e.id}),v.queueCampaigns.count-=1,v.queueCampaigns.rows.length||v.getQueueCampaigns(),c.success({title:"QueueCampaign deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceQueue"}];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:"SYSTEM:DELETEvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getQueueCampaigns())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","queueCampaigns","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.motiondialer").controller("QueueCampaignsController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d,c,m){var u=this,p=!0;function g(){var e=i.localStorage.getItem("motion2.realtime.abandoned.bull.contacts:"+u.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(u.query=_.merge(e.query,_.omit(u.query,["sort","limit","page"])),u.query=_.omit(u.query,"filter")),s.disposition.get({MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null"}).$promise.then(function(e){u.disposition=e?e.rows:[]}).catch(function(e){console.log(e)}),s.user.getQueues({id:r.getCurrentUser().id,fields:"id,name",channel:"voice",type:"outbound",nolimit:!0}).$promise.then(function(e){u.queues=e||{count:0,rows:[]},u.queuesMap=_.mapValues(_.keyBy(u.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){u.getContacts()})}function v(e){u.contacts=e||{count:0,rows:[]},p=!1,u.refresh=!0}u.showTooltip=!1,u.refresh=!0,u.disable=[],u.agents=m||[],u.currentUser=r.getCurrentUser(),u.localizationMap=c,u.pickerModel={dateStart:null,dateEnd:null},u.queues={},u.contacts={count:0,rows:[]},u.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},u.clearAll=function(){u.query.dateStart=void 0,u.query.dateEnd=void 0,u.pickerModel={dateStart:null,dateEnd:null},u.getContacts()},u.getContacts=function(){u.refresh=!1,u.query.dateStart=void 0,u.query.dateEnd=void 0,u.pickerModel.dateStart&&!p&&(u.query.dateStart=u.pickerModel.dateStart,u.query.dateEnd=u.pickerModel.dateEnd);u.query.queue=u.query.queue,u.query.offset=(u.query.page-1)*u.query.limit,i.localStorage.setItem("motion2.realtime.abandoned.bull.contacts:"+u.currentUser.id,JSON.stringify({query:_.omit(u.query,"queue")})),u.promise=s.voiceQueueReport.getVoiceQueuesReport(u.query,v).$promise},u.refreshContacts=function(){u.showTooltip=!1,u.getContacts()},u.onInit=g,u.assignedA=function(e,t){e&&(u.disable[e.id]=!0,s.voiceQueueReport.update({id:e.id,lastAssignedTo:t?t.name:null,assigned:!!t}).$promise.catch(function(e){console.log(e)}).finally(function(){u.disable[e.id]=!1}))},u.disposed=function(e,t){e&&s.voiceQueueReport.update({id:e.id,disposition:t||null}).$promise.catch(function(e){console.log(e)})},u.onSavevoiceQueueReport=function(e){e&&u.queuesMap&&"outbound"===e.type&&u.queuesMap[e.queue]&&(u.showTooltip=!0)},u.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(u.contacts.rows,["id",e.id]);0<=t&&_.merge(u.contacts.rows[t],e)}},l.onWithoutApply("voiceQueueReport:save",u.onSavevoiceQueueReport),l.on("voiceQueueReport:update",u.onUpdatevoiceQueueReport),g();var h=!0,b=1;e.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=b),u.getContacts())}),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","agents"],angular.module("app.motiondialer").controller("AbandonedCallsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"outbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,a,i,t,o,s,r,l,d){var c=this,m=["name","active","limitCalls","message","originated","IntervalId","SquareProjectId","Trunk","TrunkId","ivrAnswerCallsDay","dialQueueProject","ivrTotalCallsDays","description"];function u(){_.forIn(c.campaigns,function(e,t){c.rpcCampaigns[t]&&_.merge(e,_.pick(c.rpcCampaigns[t],m))})}c.count=s.count,c.campaigns=s?_.keyBy(s.rows?s.rows:[],"id"):{},c.rpcCampaigns=o?_.keyBy(o.rows?o.rows:[],"id"):{},c.query={sort:"-updatedAt",limit:10,page:1},c.success=v,c.getCampaigns=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=r.campaign.get(c.query,v).$promise},c.onSave=function(e){c.campaigns[e.id]&&(_.merge(c.campaigns[e.id],_.pick(e,m)),_.merge(c.rpcCampaigns[e.id],_.pick(e,m)))},c.$onInit=u,c.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(c.campaigns),license:null,setting:null}})},l.onWithoutApply("campaign:save",c.onSave),c.interval=t(function(){},999);var p=!0,g=1;function v(e){c.count=e.count,c.campaigns=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.getCampaigns())}),e.$on("$destroy",function(){l.removeAllListeners("campaign:save"),c.interval&&t.cancel(c.interval)})}e.$inject=["$scope","$timeout","$mdDialog","$document","$interval","rpcCampaigns","campaigns","api","socket","Auth"],angular.module("app.motiondialer").controller("IvrCampaignsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,t,a,n,i,o,s,r,l){var d=this;d.agents=n||{count:0,rows:[]},d.rpcVoiceQueuesChannels=i?_.keyBy(i.rows?_.filter(i.rows,{type:"outbound"}):[],"uniqueid"):{},d.queryChannels={limit:10,page:1},d.getSize=function(e){return _.size(e)},d.onSave=function(e){"outbound"===e.type&&(d.rpcVoiceQueuesChannels[e.uniqueid]=e)},d.onRemove=function(e){d.rpcVoiceQueuesChannels[e.uniqueid]&&delete d.rpcVoiceQueuesChannels[e.uniqueid]},d.hangup=function(t){return o.rpc.getVoiceQueuesChannelHangup({uniqueid:t}).$promise.then(function(e){l.success({title:"Channel "+t+" properly hangup!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},d.redirectToAgent=function(t,e,n){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e,context:n}).$promise.then(function(e){l.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},d.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){l.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},s.on("voice_queue_channel:save",d.onSave),s.on("voice_queue_channel:remove",d.onRemove),e.$on("$destroy",function(){s.removeAllListeners("voice_queue_channel:save"),s.removeAllListeners("voice_queue_channel:remove")})}e.$inject=["$scope","$timeout","$mdDialog","agents","rpcVoiceQueuesChannels","api","socket","helperClasses","toasty"],angular.module("app.motiondialer").controller("QueueCallsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r){var l=this,d=["total","answered","sumHoldTime","sumDuration","sumBillable","outboundNoAnswerCallsDay","outboundBusyCallsDay","outboundCongestionCallsDay","outboundNoSuchCallsDay","outboundUnknownCallsDay","outboundDropCallsDayTimeout","outboundDropCallsDayCallersExit","outboundBlacklistCallsDay","outboundOriginateFailureCallsDay","outboundAnswerAgiCallsDay","outboundReCallsDay","outboundRejectCallsDay"];function c(){_.forIn(l.queues,function(e,t){l.rpcQueues[t]&&_.merge(e,_.pick(l.rpcQueues[t],d))})}l.count=a.count,l.queues=a?_.keyBy(a.rows?a.rows:[],"id"):{},l.rpcQueues=i?_.keyBy(i.rows?i.rows:[],"id"):{},r.hasRole("admin")?l.query={type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1}:l.query={id:r.getCurrentUser().id,channel:"voice",type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1},l.success=p,l.getQueues=function(){l.query.offset=(l.query.page-1)*l.query.limit,r.hasRole("admin")?l.promise=o.voiceQueue.get(l.query,p).$promise:l.promise=o.user.getQueues(l.query,p).$promise},l.onSave=function(e){l.queues[e.id]&&_.merge(l.queues[e.id],_.pick(e,d))},l.$onInit=c,s.onWithoutApply("voice_queue:save",l.onSave),l.interval=t(function(){},999);var m=!0,u=1;function p(e){l.count=e.count,l.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},c()}e.$watch("vm.query.filter",function(e,t){m?n(function(){m=!1}):(t||(u=l.query.page),e!==t&&(l.query.page=1),e||(l.query.page=u),l.getQueues())}),e.$on("$destroy",function(){s.removeAllListeners("voice_queue:save"),l.interval&&t.cancel(l.interval)})}e.$inject=["$scope","$timeout","$interval","queues","rpcQueues","api","socket","Auth"],angular.module("app.motiondialer").controller("QueueParamsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.voiceQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].VoiceQueueId].paused++,u.queues[e[t].rows[n].VoiceQueueId].loggedInDb++,u.queues[e[t].rows[n].VoiceQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].VoiceQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"outbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"voice",type:"outbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.voiceQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!0}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.MotionDialerQueueId]&&u.queues[e.MotionDialerQueueId].loggedInDb++},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.VoiceQueueId]&&(u.queues[e.VoiceQueueId].loggedInDb+=1,u.queues[e.VoiceQueueId].agents[e.UserId]=e.VoiceQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.VoiceQueueId]&&0<u.queues[e.VoiceQueueId].loggedInDb&&(u.queues[e.VoiceQueueId].loggedInDb-=1,delete u.queues[e.VoiceQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.onWithoutApply("voice_queue:save",u.onSave),u.interval=o(function(){},999),d.on("userVoiceQueueRt:save",u.onSaveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("voice_queue:save"),u.interval&&o.cancel(u.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","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,o,i,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="OPENCHANNEL.EDIT_OPENCHANNELACCOUNT",u.openchannelAccount=angular.copy(r),u.openchannelAccounts=s,u.newOpenchannelAccount=!1,u.openchannelAccount||(u.openchannelAccount={waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},u.title="OPENCHANNEL.NEW_OPENCHANNELACCOUNT",u.newOpenchannelAccount=!0),t.params.id&&(u.openchannelAccount.OpenchannelAccountId=t.params.id),u.addNewOpenchannelAccount=function(){u.errors=[],l.openchannelAccount.save(u.openchannelAccount).$promise.then(function(e){var t="add"+_.upperFirst("openchannelAccount")+"s";return l.user[t]({id:d.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){u.openchannelAccounts.unshift(e.toJSON()),i.success({title:"OpenchannelAccount properly created",msg:u.openchannelAccount.name?u.openchannelAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.save"}];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.openchannelAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveOpenchannelAccount=function(){u.errors=[],l.openchannelAccount.update({id:u.openchannelAccount.id},u.openchannelAccount).$promise.then(function(e){var t=_.find(u.openchannelAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),i.success({title:"OpenchannelAccount properly saved!",msg:u.openchannelAccount.name?u.openchannelAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.update"}];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.openchannelAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteOpenchannelAccount=function(e){u.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(){l.openchannelAccount.delete({id:u.openchannelAccount.id}).$promise.then(function(){return l.openchannelAccount.getAgents({id:u.openchannelAccount.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a="remove"+_.upperFirst("openchannelAccount")+"s",i=0;i<n.length;i++)t.push(l.user[a]({id:d.getCurrentUser().id,ids:[u.openchannelAccount.id]}).$promise);return o.all(t)}).then(function(){_.remove(u.openchannelAccounts,{id:u.openchannelAccount.id}),i.success({title:"OpenchannelAccount properly deleted!",msg:(u.openchannelAccount.name||"openchannelAccount")+" has been deleted!"}),p(u.openchannelAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.delete"}];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.openchannelAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){i.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","toasty","openchannelAccounts","openchannelAccount","api","Auth","license","setting"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelAccountDialogController",e)}(),function(){"use strict";function e(s,i,a,o,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}}).then(function(e){e&&(e.id?r.openchannelAccountApps.rows[t]=e:r.openchannelAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&o.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=[],o=[];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=(o.length?_.last(o).priority:a.priority)+1,t=_.concat(t,i,[a],o)}s.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.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",route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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",route:"openchannelQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"user",filters:{fields:"id,name",sort:"name",role:"agent",nolimit:!0}}],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",maxlength:255,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",route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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){r.openchannelAccount=e,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=s.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:[]}}).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(),o.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 s.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,n,a,t,i,o,s,r){var l=this;function d(){return a.openchannelAccount[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.openchannelAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserOpenchannelAccount?"penalty "+e.UserOpenchannelAccount.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserOpenchannelAccount?"penalty "+e.UserOpenchannelAccount.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.openchannelAccount=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("OPENCHANNEL.ALL_AGENTS"),labelSelected:s.instant("OPENCHANNEL.SELECTED_AGENTS"),transferCallback:function(e,t){a.openchannelAccount[t?"removeAgents":"addAgents"]({id:l.openchannelAccount.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"OpenchannelAccount properly "+(t?"removed":"added"),msg:"OpenchannelAccount has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:openchannelAccount.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","openchannelAccount","openchannelAccounts","realtime","$translate","Auth"],angular.module("app.openchannel").controller("OpenchannelAccountagentaddController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(e.appType||e.app).toUpperCase(),o.agent=angular.copy(e),o.agent.appdata)switch(o.agent.appType?o.agent.appType.toLowerCase():o.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agent.appdata.split(",");o.agent.key=s[0],o.agent.language=s[1],o.agent.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agent.appdata.split(",");o.agent.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agent.text=s.slice(1,s.length).join(",");break;case"message":o.agent.text=o.agent.appdata;break;case"set":o.agent.name=o.agent.appdata.split("=")[0],o.agent.value=o.agent.appdata.split("=")[1];break;case"agi":o.agent.project=o.agent.appdata;break;default:var r=o.agent.appdata.split(",");o.agent.agent=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.agent.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.agent.timeout=30;function l(e){t.hide(e)}o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outbounddial"===o.agent.appType.toLowerCase()&&(o.agent.prefix=o.agent.phone?o.agent.phone.split("$")[0]:void 0,o.agent.callerId=o.agent.callerID?"CALLERID(all)="+o.agent.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outboundDial"===o.agent.appType&&(o.agent.phone=a.cutdigits?(o.agent.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agent.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agent.options+="U(xcally-mixmonitor-context)"):o.agent.options=o.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.agents,{name:o.agent.agent});t&&(o.agent.UserId=t.id);if(o.agent.appType&&"custom"===o.agent.appType);else switch((o.agent.app||o.agent.appType).toLowerCase()){case"set":o.agent.appdata=o.agent.name+"="+o.agent.value;break;case"custom":break;default:e[0]=o.agent.agent,e[1]=o.agent.timeout,o.agent.appdata=e.join(",")}l(o.agent)},o.closeDialog=l,i.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){o.agents=e.rows||[]}).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","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(n.appType||n.app).toUpperCase(),o.autoreply=angular.copy(n),o.autoreply.appdata)switch(o.autoreply.appType?o.autoreply.appType.toLowerCase():o.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.autoreply.appdata.split(",");o.autoreply.key=s[0],o.autoreply.language=s[1],o.autoreply.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.autoreply.appdata.split(",");o.autoreply.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.autoreply.text=s.slice(1,s.length).join(",");break;case"message":o.autoreply.text=o.autoreply.appdata;break;case"set":o.autoreply.name=o.autoreply.appdata.split("=")[0],o.autoreply.value=o.autoreply.appdata.split("=")[1];break;case"agi":o.autoreply.project=o.autoreply.appdata;break;default:var r=o.autoreply.appdata.split(",");o.autoreply.times=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.autoreply.text=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.autoreply.times=1;function l(e){t.hide(e)}o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outbounddial"===o.autoreply.appType.toLowerCase()&&(o.autoreply.prefix=o.autoreply.phone?o.autoreply.phone.split("$")[0]:void 0,o.autoreply.callerId=o.autoreply.callerID?"CALLERID(all)="+o.autoreply.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outboundDial"===o.autoreply.appType&&(o.autoreply.phone=a.cutdigits?(o.autoreply.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.autoreply.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.autoreply.options+="U(xcally-mixmonitor-context)"):o.autoreply.options=o.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(o.autoreply.appType&&"custom"===o.autoreply.appType);else switch((o.autoreply.app||o.autoreply.appType).toLowerCase()){case"set":o.autoreply.appdata=o.autoreply.name+"="+o.autoreply.value;break;case"custom":break;default:e[0]=o.autoreply.times,e[1]=o.autoreply.text,o.autoreply.appdata=e.join(",")}l(o.autoreply)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(n.appType||n.app).toUpperCase(),o.close=angular.copy(n),o.close.appdata)switch(o.close.appType?o.close.appType.toLowerCase():o.close.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.close.appdata.split(",");o.close.key=s[0],o.close.language=s[1],o.close.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.close.appdata.split(",");o.close.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.close.text=s.slice(1,s.length).join(",");break;case"message":o.close.text=o.close.appdata;break;case"set":o.close.name=o.close.appdata.split("=")[0],o.close.value=o.close.appdata.split("=")[1];break;case"agi":o.close.project=o.close.appdata;break;default:var r=o.close.appdata.split(",");o.close.disposition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outbounddial"===o.close.appType.toLowerCase()&&(o.close.prefix=o.close.phone?o.close.phone.split("$")[0]:void 0,o.close.callerId=o.close.callerID?"CALLERID(all)="+o.close.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outboundDial"===o.close.appType&&(o.close.phone=a.cutdigits?(o.close.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.close.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.close.options+="U(xcally-mixmonitor-context)"):o.close.options=o.close.options.replace("U(xcally-mixmonitor-context)",""));if(o.close.appType&&"custom"===o.close.appType);else switch((o.close.app||o.close.appType).toLowerCase()){case"set":o.close.appdata=o.close.name+"="+o.close.value;break;case"custom":break;default:e[0]=o.close.disposition,o.close.appdata=e.join(",")}l(o.close)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotoif=angular.copy(n),o.gotoif.appdata)switch(o.gotoif.appType?o.gotoif.appType.toLowerCase():o.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotoif.appdata.split(",");o.gotoif.key=s[0],o.gotoif.language=s[1],o.gotoif.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotoif.appdata.split(",");o.gotoif.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotoif.text=s.slice(1,s.length).join(",");break;case"message":o.gotoif.text=o.gotoif.appdata;break;case"set":o.gotoif.name=o.gotoif.appdata.split("=")[0],o.gotoif.value=o.gotoif.appdata.split("=")[1];break;case"agi":o.gotoif.project=o.gotoif.appdata;break;default:var r=o.gotoif.appdata.split(",");o.gotoif.condition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.gotoif.truepriority=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.gotoif.falsepriority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outbounddial"===o.gotoif.appType.toLowerCase()&&(o.gotoif.prefix=o.gotoif.phone?o.gotoif.phone.split("$")[0]:void 0,o.gotoif.callerId=o.gotoif.callerID?"CALLERID(all)="+o.gotoif.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outboundDial"===o.gotoif.appType&&(o.gotoif.phone=a.cutdigits?(o.gotoif.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotoif.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotoif.options+="U(xcally-mixmonitor-context)"):o.gotoif.options=o.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotoif.appType&&"custom"===o.gotoif.appType);else switch((o.gotoif.app||o.gotoif.appType).toLowerCase()){case"set":o.gotoif.appdata=o.gotoif.name+"="+o.gotoif.value;break;case"custom":break;default:e[0]=o.gotoif.condition,e[1]=o.gotoif.truepriority,e[2]=o.gotoif.falsepriority,o.gotoif.appdata=e.join(",")}l(o.gotoif)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotop=angular.copy(n),o.gotop.appdata)switch(o.gotop.appType?o.gotop.appType.toLowerCase():o.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotop.appdata.split(",");o.gotop.key=s[0],o.gotop.language=s[1],o.gotop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotop.appdata.split(",");o.gotop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotop.text=s.slice(1,s.length).join(",");break;case"message":o.gotop.text=o.gotop.appdata;break;case"set":o.gotop.name=o.gotop.appdata.split("=")[0],o.gotop.value=o.gotop.appdata.split("=")[1];break;case"agi":o.gotop.project=o.gotop.appdata;break;default:var r=o.gotop.appdata.split(",");o.gotop.priority=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outbounddial"===o.gotop.appType.toLowerCase()&&(o.gotop.prefix=o.gotop.phone?o.gotop.phone.split("$")[0]:void 0,o.gotop.callerId=o.gotop.callerID?"CALLERID(all)="+o.gotop.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outboundDial"===o.gotop.appType&&(o.gotop.phone=a.cutdigits?(o.gotop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotop.options+="U(xcally-mixmonitor-context)"):o.gotop.options=o.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotop.appType&&"custom"===o.gotop.appType);else switch((o.gotop.app||o.gotop.appType).toLowerCase()){case"set":o.gotop.appdata=o.gotop.name+"="+o.gotop.value;break;case"custom":break;default:e[0]=o.gotop.priority,o.gotop.appdata=e.join(",")}l(o.gotop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditOpenchannelAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(n.appType||n.app).toUpperCase(),o.noop=angular.copy(n),o.noop.appdata)switch(o.noop.appType?o.noop.appType.toLowerCase():o.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.noop.appdata.split(",");o.noop.key=s[0],o.noop.language=s[1],o.noop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.noop.appdata.split(",");o.noop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.noop.text=s.slice(1,s.length).join(",");break;case"message":o.noop.text=o.noop.appdata;break;case"set":o.noop.name=o.noop.appdata.split("=")[0],o.noop.value=o.noop.appdata.split("=")[1];break;case"agi":o.noop.project=o.noop.appdata;break;default:var r=o.noop.appdata.split(",");o.noop.value=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outbounddial"===o.noop.appType.toLowerCase()&&(o.noop.prefix=o.noop.phone?o.noop.phone.split("$")[0]:void 0,o.noop.callerId=o.noop.callerID?"CALLERID(all)="+o.noop.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outboundDial"===o.noop.appType&&(o.noop.phone=a.cutdigits?(o.noop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.noop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.noop.options+="U(xcally-mixmonitor-context)"):o.noop.options=o.noop.options.replace("U(xcally-mixmonitor-context)",""));if(o.noop.appType&&"custom"===o.noop.appType);else switch((o.noop.app||o.noop.appType).toLowerCase()){case"set":o.noop.appdata=o.noop.name+"="+o.noop.value;break;case"custom":break;default:e[0]=o.noop.value,o.noop.appdata=e.join(",")}l(o.noop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.queue.queue=300,o.queue.timeout=300;function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.queues,{name:o.queue.queue});t&&(o.queue[_.capitalize("openChannel")+"QueueId"]=t.id);if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.timeout,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.openchannelQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(e.appType||e.app).toUpperCase(),o.system=angular.copy(e),o.system.appdata)switch(o.system.appType?o.system.appType.toLowerCase():o.system.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.system.appdata.split(",");o.system.key=s[0],o.system.language=s[1],o.system.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.system.appdata.split(",");o.system.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.system.text=s.slice(1,s.length).join(",");break;case"message":o.system.text=o.system.appdata;break;case"set":o.system.name=o.system.appdata.split("=")[0],o.system.value=o.system.appdata.split("=")[1];break;case"agi":o.system.project=o.system.appdata;break;default:var r=o.system.appdata.split(",");o.system.command=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.system.variable=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.system.variable="";function l(e){t.hide(e)}o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outbounddial"===o.system.appType.toLowerCase()&&(o.system.prefix=o.system.phone?o.system.phone.split("$")[0]:void 0,o.system.callerId=o.system.callerID?"CALLERID(all)="+o.system.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outboundDial"===o.system.appType&&(o.system.phone=a.cutdigits?(o.system.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.system.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.system.options+="U(xcally-mixmonitor-context)"):o.system.options=o.system.options.replace("U(xcally-mixmonitor-context)",""));if(o.system.appType&&"custom"===o.system.appType);else switch((o.system.app||o.system.appType).toLowerCase()){case"set":o.system.appdata=o.system.name+"="+o.system.value;break;case"custom":break;default:e[0]=o.system.command,e[1]=o.system.variable,o.system.appdata=e.join(",")}l(o.system)},o.closeDialog=l,i.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(e.appType||e.app).toUpperCase(),o.tag=angular.copy(e),o.tag.appdata)switch(o.tag.appType?o.tag.appType.toLowerCase():o.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.tag.appdata.split(",");o.tag.key=s[0],o.tag.language=s[1],o.tag.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.tag.appdata.split(",");o.tag.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.tag.text=s.slice(1,s.length).join(",");break;case"message":o.tag.text=o.tag.appdata;break;case"set":o.tag.name=o.tag.appdata.split("=")[0],o.tag.value=o.tag.appdata.split("=")[1];break;case"agi":o.tag.project=o.tag.appdata;break;default:var r=o.tag.appdata.split(",");o.tag.tag=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outbounddial"===o.tag.appType.toLowerCase()&&(o.tag.prefix=o.tag.phone?o.tag.phone.split("$")[0]:void 0,o.tag.callerId=o.tag.callerID?"CALLERID(all)="+o.tag.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outboundDial"===o.tag.appType&&(o.tag.phone=a.cutdigits?(o.tag.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.tag.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.tag.options+="U(xcally-mixmonitor-context)"):o.tag.options=o.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.tags,{name:o.tag.tag});t&&(o.tag.TagId=t.id);if(o.tag.appType&&"custom"===o.tag.appType);else switch((o.tag.app||o.tag.appType).toLowerCase()){case"set":o.tag.appdata=o.tag.name+"="+o.tag.value;break;case"custom":break;default:e[0]=o.tag.tag,o.tag.appdata=e.join(",")}l(o.tag)},o.closeDialog=l,i.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountInteractions={count:0,rows:[]},c.selectedOpenchannelAccountInteractions=[],c.query={fields:"createdAt,updatedAt,id,createdAt,Contact.firstName,Owner.name,closedAt,disposition,note,UserId,ContactId,OpenchannelAccountId,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e){c.openchannelAccount=e,c.query.id=c.openchannelAccount.id,c.getOpenchannelAccountInteractions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},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){o.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/interactions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,interaction:t,interactions:c.openchannelAccountInteractions.rows,license:null,setting:null}})},c.spyopenchannelInteraction=function(e,n){o.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(s.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=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountOpenchannelCannedAnswers={count:0,rows:[]},c.selectedOpenchannelAccountOpenchannelCannedAnswers=[],c.query={fields:"createdAt,updatedAt,id,key,value,description,createdAt",limit:10,page:1},c.init=function(e){c.openchannelAccount=e,c.query.id=c.openchannelAccount.id,c.query.OpenchannelAccountId=c.openchannelAccount.id,c.getOpenchannelAccountOpenchannelCannedAnswers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditOpenchannelCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelCannedAnswers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,openchannelCannedAnswer:t,openchannelCannedAnswers:c.openchannelAccountOpenchannelCannedAnswers.rows,license:null,setting:null}})},c.exportSelectedOpenchannelAccountOpenchannelCannedAnswers=function(){var e=angular.copy(c.selectedOpenchannelAccountOpenchannelCannedAnswers);return c.selectedOpenchannelAccountOpenchannelCannedAnswers=[],e},c.deleteOpenchannelAccountOpenchannelCannedAnswer=g,c.deleteSelectedOpenchannelAccountOpenchannelCannedAnswers=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="OPENCHANNEL.EDIT_OPENCHANNELCANNEDANSWER",u.openchannelCannedAnswer=angular.copy(r),u.openchannelCannedAnswers=s,u.newOpenchannelCannedAnswer=!1,u.openchannelCannedAnswer||(u.openchannelCannedAnswer={},u.title="OPENCHANNEL.NEW_OPENCHANNELCANNEDANSWER",u.newOpenchannelCannedAnswer=!0),t.params.id&&(u.openchannelCannedAnswer.OpenchannelAccountId=t.params.id),u.addNewOpenchannelCannedAnswer=function(){u.errors=[],l.cannedAnswer.save(u.openchannelCannedAnswer).$promise.then(function(e){u.openchannelCannedAnswers.unshift(e.toJSON()),o.success({title:"OpenchannelCannedAnswer properly created",msg:u.openchannelCannedAnswer.name?u.openchannelCannedAnswer.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveOpenchannelCannedAnswer=function(){u.errors=[],l.cannedAnswer.update({id:u.openchannelCannedAnswer.id},u.openchannelCannedAnswer).$promise.then(function(e){var t=_.find(u.openchannelCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelCannedAnswer properly saved!",msg:u.openchannelCannedAnswer.name?u.openchannelCannedAnswer.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteOpenchannelCannedAnswer=function(e){u.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(){l.cannedAnswer.delete({id:u.openchannelCannedAnswer.id}).$promise.then(function(){_.remove(u.openchannelCannedAnswers,{id:u.openchannelCannedAnswer.id}),o.success({title:"OpenchannelCannedAnswer properly deleted!",msg:(u.openchannelCannedAnswer.name||"openchannelCannedAnswer")+" has been deleted!"}),p(u.openchannelCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","openchannelCannedAnswers","openchannelCannedAnswer","api","Auth","license","setting"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountOpenchannelDispositions={count:0,rows:[]},c.selectedOpenchannelAccountOpenchannelDispositions=[],c.query={fields:"createdAt,updatedAt,id,name,createdAt",limit:10,page:1},c.init=function(e){c.openchannelAccount=e,c.query.id=c.openchannelAccount.id,c.query.OpenchannelAccountId=c.openchannelAccount.id,c.getOpenchannelAccountOpenchannelDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditOpenchannelDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,openchannelDisposition:t,openchannelDispositions:c.openchannelAccountOpenchannelDispositions.rows,license:null,setting:null}})},c.exportSelectedOpenchannelAccountOpenchannelDispositions=function(){var e=angular.copy(c.selectedOpenchannelAccountOpenchannelDispositions);return c.selectedOpenchannelAccountOpenchannelDispositions=[],e},c.deleteOpenchannelAccountOpenchannelDisposition=g,c.deleteSelectedOpenchannelAccountOpenchannelDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="OPENCHANNEL.EDIT_OPENCHANNELDISPOSITION",u.openchannelDisposition=angular.copy(r),u.openchannelDispositions=s,u.newOpenchannelDisposition=!1,u.openchannelDisposition||(u.openchannelDisposition={},u.title="OPENCHANNEL.NEW_OPENCHANNELDISPOSITION",u.newOpenchannelDisposition=!0),t.params.id&&(u.openchannelDisposition.OpenchannelAccountId=t.params.id),u.addNewOpenchannelDisposition=function(){u.errors=[],l.disposition.save(u.openchannelDisposition).$promise.then(function(e){u.openchannelDispositions.unshift(e.toJSON()),o.success({title:"OpenchannelDisposition properly created",msg:u.openchannelDisposition.name?u.openchannelDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveOpenchannelDisposition=function(){u.errors=[],l.disposition.update({id:u.openchannelDisposition.id},u.openchannelDisposition).$promise.then(function(e){var t=_.find(u.openchannelDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelDisposition properly saved!",msg:u.openchannelDisposition.name?u.openchannelDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteOpenchannelDisposition=function(e){u.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(){l.disposition.delete({id:u.openchannelDisposition.id}).$promise.then(function(){_.remove(u.openchannelDispositions,{id:u.openchannelDisposition.id}),o.success({title:"OpenchannelDisposition properly deleted!",msg:(u.openchannelDisposition.name||"openchannelDisposition")+" has been deleted!"}),p(u.openchannelDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","openchannelDispositions","openchannelDisposition","api","Auth","license","setting"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.openchannelAccount=d||e.params.openchannelAccount||{},c.selectedTab=e.params.tab||0,c.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:c.openchannelAccounts?c.openchannelAccounts.rows:[],realtime:!1}})},c.alert=r.info,c.gotoOpenchannelAccounts=function(){e.go("app.openchannel.openchannelAccounts")},c.saveOpenchannelAccount=function(){s.openchannelAccount.update({id:c.openchannelAccount.id},c.openchannelAccount).$promise.then(function(){r.success({title:"OpenchannelAccount updated!",msg:c.openchannelAccount.name?c.openchannelAccount.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.cmContact.describe({}).$promise.then(function(e){if(e){var t=_.keys(e.toJSON());c.attributes=[],c.excludedFields=["id","createdAt","updatedAt","deletedAt","scheduledat","ListId","CompanyId"];for(var n=0;n<t.length;n++)_.includes(c.excludedFields,t[n])||_.startsWith(t[n],"cf_")||c.attributes.push({option:t[n],value:t[n]})}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETattributes",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.cmList.getCustomFields({id:c.openchannelAccount.ListId}).$promise.then(function(e){if(e){c.customFields=[];for(var t=0;t<e.rows.length;t++)c.customFields.push({option:e.rows[t].alias,value:"cf_"+e.rows[t].id})}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcustomFields",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","license","setting","api","toasty","Auth","openchannelAccount"],angular.module("app.openchannel").controller("OpenchannelAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.openchannelAccounts=r||{count:0,rows:[]},v.table="openchannelAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedOpenchannelAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},v.editstate=function(e,t){n.go("app.openchannel.openchannelAccounts.edit",{id:e.id,openchannelAccount:e})},v.interactionsgoto=function(e,t){n.go("app.openchannel.openchannelAccounts.edit",{id:e.id,tab:5})},v.agentadddialog=function(e,t){i.show({controller:"OpenchannelAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelAccount:e,openchannelAccounts:v.openchannelAccounts?v.openchannelAccounts.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the openchannelAccount?").htmlContent("<b>"+(e.name||"openchannelAccount")+"</b> will be deleted.").ariaLabel("delete openchannelAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getOpenchannelAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.openchannelAccount.get(v.query,f).$promise},v.createOrEditOpenchannelAccount=function(e,t){i.show({controller:"CreateOrEditOpenchannelAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:t,openchannelAccounts:v.openchannelAccounts.rows,license:v.license,setting:v.setting}})},v.deleteOpenchannelAccount=A,v.exportSelectedOpenchannelAccounts=function(){var e=angular.copy(v.selectedOpenchannelAccounts);return v.selectedOpenchannelAccounts=[],e},v.deleteSelectedOpenchannelAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected openchannelAccounts?").htmlContent("<b>"+v.selectedOpenchannelAccounts.length+" selected</b> will be deleted.").ariaLabel("delete OpenchannelAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedOpenchannelAccounts.forEach(function(e){A(e)}),v.selectedOpenchannelAccounts=[]})},v.deselectOpenchannelAccounts=function(){v.selectedOpenchannelAccounts=[]},v.selectAllOpenchannelAccounts=function(){v.selectedOpenchannelAccounts=v.openchannelAccounts.rows},l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.openchannelAccounts=e||{count:0,rows:[]}}function A(e){l.openchannelAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.openchannelAccounts.rows,{id:e.id}),v.openchannelAccounts.count-=1,v.openchannelAccounts.rows.length||v.getOpenchannelAccounts(),c.success({title:"OpenchannelAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEopenchannelAccount"}];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:"SYSTEM:DELETEopenchannelAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getOpenchannelAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","openchannelAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.openchannel").controller("OpenchannelAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="OPENCHANNEL.EDIT_OPENCHANNELQUEUE",u.openchannelQueue=angular.copy(r),u.openchannelQueues=s,u.newOpenchannelQueue=!1,u.openchannelQueue||(u.openchannelQueue={strategy:"beepall",timeout:10},u.title="OPENCHANNEL.NEW_OPENCHANNELQUEUE",u.newOpenchannelQueue=!0),u.addNewOpenchannelQueue=function(){u.errors=[],l.openchannelQueue.save(u.openchannelQueue).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"openChannel",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.openchannelQueues.unshift(e.toJSON()),o.success({title:"OpenchannelQueue properly created",msg:u.openchannelQueue.name?u.openchannelQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveOpenchannelQueue=function(){u.errors=[],l.openchannelQueue.update({id:u.openchannelQueue.id},u.openchannelQueue).$promise.then(function(e){var t=_.find(u.openchannelQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelQueue properly saved!",msg:u.openchannelQueue.name?u.openchannelQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteOpenchannelQueue=function(e){u.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(){l.openchannelQueue.delete({id:u.openchannelQueue.id}).$promise.then(function(){return l.openchannelQueue.getAgents({id:u.openchannelQueue.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.openchannelQueue.id],channel:"openChannel",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.openchannelQueues,{id:u.openchannelQueue.id}),o.success({title:"OpenchannelQueue properly deleted!",msg:(u.openchannelQueue.name||"openchannelQueue")+" has been deleted!"}),p(u.openchannelQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","openchannelQueues","openchannelQueue","api","Auth","license","setting"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.openchannelQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.openchannelQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserOpenchannelQueue?"penalty "+e.UserOpenchannelQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserOpenchannelQueue?"penalty "+e.UserOpenchannelQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.openchannelQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("OPENCHANNEL.ALL_AGENTS"),labelSelected:s.instant("OPENCHANNEL.SELECTED_AGENTS"),transferCallback:function(e,t){a.openchannelQueue[t?"removeAgents":"addAgents"]({id:l.openchannelQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"OpenchannelQueue properly "+(t?"removed":"added"),msg:"OpenchannelQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:openchannelQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","openchannelQueue","openchannelQueues","realtime","$translate","Auth"],angular.module("app.openchannel").controller("OpenchannelQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.openchannelQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("OPENCHANNEL.ALL_TEAMS"),labelSelected:i.instant("OPENCHANNEL.SELECTED_TEAMS"),transferCallback:function(e,t){a.openchannelQueue[t?"removeTeams":"addTeams"]({id:o.openchannelQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:openchannelQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.openchannelQueue.getTeams({id:o.openchannelQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","openchannelQueue","$translate"],angular.module("app.openchannel").controller("OpenchannelQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.openchannelQueue=d||e.params.openchannelQueue||{},c.selectedTab=e.params.tab||0,c.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:c.openchannelQueues?c.openchannelQueues.rows:[]}})},c.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:c.openchannelQueues?c.openchannelQueues.rows:[],realtime:!1}})},c.alert=r.info,c.gotoOpenchannelQueues=function(){e.go("app.openchannel.openchannelQueues")},c.saveOpenchannelQueue=function(){s.openchannelQueue.update({id:c.openchannelQueue.id},c.openchannelQueue).$promise.then(function(){r.success({title:"OpenchannelQueue updated!",msg:c.openchannelQueue.name?c.openchannelQueue.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","openchannelQueue"],angular.module("app.openchannel").controller("OpenchannelQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.openchannelQueues=r||{count:0,rows:[]},v.table="openchannelQueues",v.listOrder="",v.listOrderAsc=null,v.selectedOpenchannelQueues=[],v.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"openchannel",limit:10,page:1},v.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.openchannel.openchannelQueues.edit",{id:e.id,openchannelQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"OpenchannelQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:v.openchannelQueues?v.openchannelQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"OpenchannelQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:v.openchannelQueues?v.openchannelQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the openchannelQueue?").htmlContent("<b>"+(e.name||"openchannelQueue")+"</b> will be deleted.").ariaLabel("delete openchannelQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.openchannel.realtime.queues",{})},v.success=f,v.getOpenchannelQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.openchannelQueue.get(v.query,f).$promise},v.createOrEditOpenchannelQueue=function(e,t){i.show({controller:"CreateOrEditOpenchannelQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelQueue:t,openchannelQueues:v.openchannelQueues.rows,license:v.license,setting:v.setting}})},v.deleteOpenchannelQueue=A,v.exportSelectedOpenchannelQueues=function(){var e=angular.copy(v.selectedOpenchannelQueues);return v.selectedOpenchannelQueues=[],e},v.deleteSelectedOpenchannelQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected openchannelQueues?").htmlContent("<b>"+v.selectedOpenchannelQueues.length+" selected</b> will be deleted.").ariaLabel("delete OpenchannelQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedOpenchannelQueues.forEach(function(e){A(e)}),v.selectedOpenchannelQueues=[]})},v.deselectOpenchannelQueues=function(){v.selectedOpenchannelQueues=[]},v.selectAllOpenchannelQueues=function(){v.selectedOpenchannelQueues=v.openchannelQueues.rows};var h=!0,b=1;function f(e){v.openchannelQueues=e||{count:0,rows:[]}}function A(e){l.openchannelQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.openchannelQueues.rows,{id:e.id}),v.openchannelQueues.count-=1,v.openchannelQueues.rows.length||v.getOpenchannelQueues(),c.success({title:"OpenchannelQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEopenchannelQueue"}];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:"SYSTEM:DELETEopenchannelQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getOpenchannelQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","openchannelQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.openchannel").controller("OpenchannelQueuesController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsOpenchannelRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.openchannelQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].OpenchannelQueueId].paused++,u.queues[e[t].rows[n].OpenchannelQueueId].loggedInDb++,u.queues[e[t].rows[n].OpenchannelQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].OpenchannelQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"openchannel",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.openchannelQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!1}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.OpenchannelQueueId]&&u.queues[e.OpenchannelQueueId].loggedInDb++},u.onRemoveMember=function(e){u.queues[e.OpenchannelQueueId]&&u.queues[e.OpenchannelQueueId].loggedInDb--},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.OpenchannelQueueId]&&(u.queues[e.OpenchannelQueueId].loggedInDb+=1,u.queues[e.OpenchannelQueueId].agents[e.UserId]=e.OpenchannelQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.OpenchannelQueueId]&&0<u.queues[e.OpenchannelQueueId].loggedInDb&&(u.queues[e.OpenchannelQueueId].loggedInDb-=1,delete u.queues[e.OpenchannelQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.on("openchannel_queue:save",u.onSave),d.on("userOpenchannelQueue:save",u.onSaveMember),d.on("userOpenchannelQueue:remove",u.onRemoveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.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","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,o){var s=this;s.currentUser=o.getCurrentUser(),s.plugin={},s.getTrustedURL=function(){return n.trustAsResourceUrl(s.plugin.adminUrl)},a.plugin.get({id:e.params.id}).$promise.then(function(e){if(e)return s.plugin=e,a.plugin.get({id:s.plugin.id}).$promise}).catch(function(e){s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SETTINGS.EDIT_CUSTOMIZATION",u.customization=angular.copy(r),u.customizations=s,u.newCustomization=!1,u.customization||(u.customization={},u.title="SETTINGS.NEW_CUSTOMIZATION",u.newCustomization=!0),u.addNewCustomization=function(){u.errors=[],l.setting.save(u.customization).$promise.then(function(e){u.customizations.unshift(e.toJSON()),o.success({title:"Customization properly created",msg:u.customization.name?u.customization.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveCustomization=function(){u.errors=[],l.setting.update({id:u.customization.id},u.customization).$promise.then(function(e){var t=_.find(u.customizations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Customization properly saved!",msg:u.customization.name?u.customization.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteCustomization=function(e){u.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(){l.setting.delete({id:u.customization.id}).$promise.then(function(){_.remove(u.customizations,{id:u.customization.id}),o.success({title:"Customization properly deleted!",msg:(u.customization.name||"customization")+" has been deleted!"}),p(u.customization)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","customizations","customization","api","Auth","license","setting"],angular.module("app.settings").controller("CreateOrEditCustomizationDialogController",e)}(),function(){"use strict";function e(e,t,n){var a=this;a.customizations=e,a.customization={},a.customizations&&a.customizations.rows&&a.customizations.rows.length&&(a.customization=a.customizations.rows[0]),a.saveCustomization=function(){a.customization.id?t.setting.update({id:a.customization.id},a.customization).$promise.then(function(){n.success({title:"Customization updated!",msg:a.customization.name?a.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(a.customization).$promise.then(function(e){_.merge(a.customization,e),n.success({title:"Customization updated!",msg:a.customization.name?a.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"],angular.module("app.settings").controller("CustomizationsController",e)}(),function(){"use strict";function e(e,a){var i=this;i.customization={},i.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SETTINGS.EDIT_GENERAL",u.general=angular.copy(r),u.generals=s,u.newGeneral=!1,u.general||(u.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},u.title="SETTINGS.NEW_GENERAL",u.newGeneral=!0),u.addNewGeneral=function(){u.errors=[],l.setting.save(u.general).$promise.then(function(e){u.generals.unshift(e.toJSON()),o.success({title:"General properly created",msg:u.general.name?u.general.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveGeneral=function(){u.errors=[],l.setting.update({id:u.general.id},u.general).$promise.then(function(e){var t=_.find(u.generals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"General properly saved!",msg:u.general.name?u.general.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteGeneral=function(e){u.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(){l.setting.delete({id:u.general.id}).$promise.then(function(){_.remove(u.generals,{id:u.general.id}),o.success({title:"General properly deleted!",msg:(u.general.name||"general")+" has been deleted!"}),p(u.general)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","generals","general","api","Auth","license","setting"],angular.module("app.settings").controller("CreateOrEditGeneralDialogController",e)}(),function(){"use strict";function e(e,t,n){var a=this;a.generals=e,a.general={},a.generals&&a.generals.rows&&a.generals.rows.length&&(a.general=a.generals.rows[0]),a.saveGeneral=function(){a.general.id?t.setting.update({id:a.general.id},a.general).$promise.then(function(){n.success({title:"General updated!",msg:a.general.name?a.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(a.general).$promise.then(function(e){_.merge(a.general,e),n.success({title:"General updated!",msg:a.general.name?a.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"],angular.module("app.settings").controller("GeneralsController",e)}(),function(){"use strict";function e(t,n,a,i,e,o){var s=this;s.license=i||{},s.agents=0,s.users=0,s.telephones=0,s.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"}],s.modules=[{name:"cm",icon:"icon-account-circle"},{name:"dialer",icon:"icon-crosshairs"},{name:"jscripty",icon:"icon-console"}],s.addons=[{name:"webrtc",icon:"icon-server-plus"},{name:"jaws",icon:"icon-fish"},{name:"custom",icon:"icon-table-edit"}],s.sessions=[{name:"callysquare",icon:"icon-sitemap",restart:!0,label:"channels",enabled:"voice"},{name:"virtual",icon:"icon-dots-horizontal",restart:!1,label:"sessions",enabled:"chat"}],s.others=[{name:"update",icon:"icon-cloud-download"}],s.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:s.channels,modules:s.modules,addons:s.addons,sessions:s.sessions,others:s.others}})},s.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}})},s.gotoProcess=function(e){a.go("app.settings.system",{tab:1})},o.user.get({fields:"id",role:"agent",online:!0}).$promise.then(function(e){return s.agents=e&&e.count?e.count:0,o.user.get({fields:"id",role:"user,admin"}).$promise}).then(function(e){return s.users=e&&e.count?e.count:0,o.user.get({fields:"id",role:"telephone"}).$promise}).then(function(e){s.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,o,s,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=o,m.sessions=s,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 o=this;o.errors=[],o.license=angular.copy(n),o.licenseKey,o.updateLicense=function(){return a.license.update({id:1,key:o.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()})})},o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SETTINGS.EDIT_NETWORK",u.network=angular.copy(r),u.networks=s,u.newNetwork=!1,u.network||(u.network={type:"localnet"},u.title="SETTINGS.NEW_NETWORK",u.newNetwork=!0),u.addNewNetwork=function(){u.errors=[],l.network.save(u.network).$promise.then(function(e){u.networks.unshift(e.toJSON()),o.success({title:"Network properly created",msg:u.network.name?u.network.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveNetwork=function(){u.errors=[],l.network.update({id:u.network.id},u.network).$promise.then(function(e){var t=_.find(u.networks,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Network properly saved!",msg:u.network.name?u.network.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteNetwork=function(e){u.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(){l.network.delete({id:u.network.id}).$promise.then(function(){_.remove(u.networks,{id:u.network.id}),o.success({title:"Network properly deleted!",msg:(u.network.name||"network")+" has been deleted!"}),p(u.network)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","networks","network","api","Auth","license","setting"],angular.module("app.settings").controller("CreateOrEditNetworkDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.networks=r||{count:0,rows:[]},v.table="networks",v.listOrder="",v.listOrderAsc=null,v.selectedNetworks=[],v.query={fields:"createdAt,updatedAt,id,type,value,value,createdAt",sort:"-updatedAt",limit:10,page:1},v.arraytype=_.keyBy([{option:"LocalNET",value:"'localnet'"},{option:"ExternIP",value:"'externip'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editdialog=function(e,t){i.show({controller:"CreateOrEditNetworkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/networks/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{network:e,networks:v.networks.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the 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")})},v.success=f,v.getNetworks=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.network.get(v.query,f).$promise},v.createOrEditNetwork=function(e,t){i.show({controller:"CreateOrEditNetworkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/networks/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{network:t,networks:v.networks.rows,license:v.license,setting:v.setting}})},v.deleteNetwork=A,v.exportSelectedNetworks=function(){var e=angular.copy(v.selectedNetworks);return v.selectedNetworks=[],e},v.deleteSelectedNetworks=function(e){var t=i.confirm().title("Are you sure want to delete the selected networks?").htmlContent("<b>"+v.selectedNetworks.length+" selected</b> will be deleted.").ariaLabel("delete Networks").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedNetworks.forEach(function(e){A(e)}),v.selectedNetworks=[]})},v.deselectNetworks=function(){v.selectedNetworks=[]},v.selectAllNetworks=function(){v.selectedNetworks=v.networks.rows};var h=!0,b=1;function f(e){v.networks=e||{count:0,rows:[]}}function A(e){l.network.delete({id:e.id}).$promise.then(function(){_.remove(v.networks.rows,{id:e.id}),v.networks.count-=1,v.networks.rows.length||v.getNetworks(),c.success({title:"Network deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEnetwork"}];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:"SYSTEM:DELETEnetwork",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getNetworks())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SETTINGS.EDIT_SMTP",u.smtp=angular.copy(r),u.smtps=s,u.newSmtp=!1,u.smtp||(u.smtp={service:!0},u.title="SETTINGS.NEW_SMTP",u.newSmtp=!0),u.addNewSmtp=function(){u.errors=[],l.mailAccount.save(u.smtp).$promise.then(function(e){u.smtps.unshift(e.toJSON()),o.success({title:"Smtp properly created",msg:u.smtp.name?u.smtp.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSmtp=function(){u.errors=[],l.mailAccount.update({id:u.smtp.id},u.smtp).$promise.then(function(e){var t=_.find(u.smtps,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Smtp properly saved!",msg:u.smtp.name?u.smtp.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSmtp=function(e){u.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(){l.mailAccount.delete({id:u.smtp.id}).$promise.then(function(){_.remove(u.smtps,{id:u.smtp.id}),o.success({title:"Smtp properly deleted!",msg:(u.smtp.name||"smtp")+" has been deleted!"}),p(u.smtp)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","smtps","smtp","api","Auth","license","setting"],angular.module("app.settings").controller("CreateOrEditSmtpDialogController",e)}(),function(){"use strict";function e(e,t,n){var a=this;a.smtps=e,a.smtp={},a.smtps&&a.smtps.rows&&a.smtps.rows.length?a.smtp=a.smtps.rows[0]:a.smtp={service:!0,Smtp:{service:null}},a.saveSmtp=function(){a.smtp.id?t.mailAccount.update({id:a.smtp.id},a.smtp).$promise.then(function(){n.success({title:"Smtp updated!",msg:a.smtp.name?a.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(a.smtp).$promise.then(function(e){_.merge(a.smtp,e),n.success({title:"Smtp updated!",msg:a.smtp.name?a.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()})})},a.verifySmtp=function(){a.smtp.id&&t.mailAccount.verifySmtp({id:a.smtp.id}).$promise.then(function(){n.success({title:"Smtp verified!",msg:a.smtp.name?a.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"],angular.module("app.settings").controller("SmtpController",e)}(),function(){"use strict";function e(e,i,o,t,n,a,s,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=o.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");o.show(a).then(function(){return r.pm2.update({id:t,status:n})}).then(function(){i(d.getProcesses,1e3,1)}).then(function(){s.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 o=this;o.title="SETTINGS.UPDATE",o.progress=0,o.updating=!0,o.output="Waiting...",o.success=!0,o.interval=t(function(){o.progress<90&&(o.progress+=1)},1e3),o.closeDialog=function(){e.hide()},o.reload=function(){n.location.reload()},o.stopInterval=function(){angular.isDefined(o.interval)&&(t.cancel(o.interval),o.interval=void 0);o.progress=100,o.updating=!1},i.version.fetch().$promise.then(function(e){return o.output=e.output+"...",i.version.reset().$promise}).then(function(e){return o.output=e.output+"...",i.version.pull().$promise}).then(function(e){return o.output=e.output+"...",i.version.migrations().$promise}).then(function(e){return o.output=e.output+"...",i.version.restart().$promise}).then(function(e){o.output="Waiting to restart motion...",a(function(){o.stopInterval()},3e4)}).catch(function(e){o.success=!1,o.stopInterval(),o.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,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsSmsRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.smsQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].SmsQueueId].paused++,u.queues[e[t].rows[n].SmsQueueId].loggedInDb++,u.queues[e[t].rows[n].SmsQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].SmsQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"sms",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.smsQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!1}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.SmsQueueId]&&u.queues[e.SmsQueueId].loggedInDb++},u.onRemoveMember=function(e){u.queues[e.SmsQueueId]&&u.queues[e.SmsQueueId].loggedInDb--},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.SmsQueueId]&&(u.queues[e.SmsQueueId].loggedInDb+=1,u.queues[e.SmsQueueId].agents[e.UserId]=e.SmsQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.SmsQueueId]&&0<u.queues[e.SmsQueueId].loggedInDb&&(u.queues[e.SmsQueueId].loggedInDb-=1,delete u.queues[e.SmsQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.on("sms_queue:save",u.onSave),d.on("userSmsQueue:save",u.onSaveMember),d.on("userSmsQueue:remove",u.onRemoveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.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","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,o,i,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SMS.EDIT_SMSACCOUNT",u.smsAccount=angular.copy(r),u.smsAccounts=s,u.newSmsAccount=!1,u.smsAccount||(u.smsAccount={remote:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():""),type:"twilio",waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},u.title="SMS.NEW_SMSACCOUNT",u.newSmsAccount=!0),t.params.id&&(u.smsAccount.SmsAccountId=t.params.id),u.addNewSmsAccount=function(){u.errors=[],l.smsAccount.save(u.smsAccount).$promise.then(function(e){var t="add"+_.upperFirst("smsAccount")+"s";return l.user[t]({id:d.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){u.smsAccounts.unshift(e.toJSON()),i.success({title:"SmsAccount properly created",msg:u.smsAccount.name?u.smsAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.save"}];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.smsAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveSmsAccount=function(){u.errors=[],l.smsAccount.update({id:u.smsAccount.id},u.smsAccount).$promise.then(function(e){var t=_.find(u.smsAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),i.success({title:"SmsAccount properly saved!",msg:u.smsAccount.name?u.smsAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.update"}];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.smsAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteSmsAccount=function(e){u.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(){l.smsAccount.delete({id:u.smsAccount.id}).$promise.then(function(){return l.smsAccount.getAgents({id:u.smsAccount.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a="remove"+_.upperFirst("smsAccount")+"s",i=0;i<n.length;i++)t.push(l.user[a]({id:d.getCurrentUser().id,ids:[u.smsAccount.id]}).$promise);return o.all(t)}).then(function(){_.remove(u.smsAccounts,{id:u.smsAccount.id}),i.success({title:"SmsAccount properly deleted!",msg:(u.smsAccount.name||"smsAccount")+" has been deleted!"}),p(u.smsAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.delete"}];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.smsAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){i.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","toasty","smsAccounts","smsAccount","api","Auth","license","setting"],angular.module("app.sms").controller("CreateOrEditSmsAccountDialogController",e)}(),function(){"use strict";function e(s,i,a,o,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}}).then(function(e){e&&(e.id?r.smsAccountApps.rows[t]=e:r.smsAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&o.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=[],o=[];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=(o.length?_.last(o).priority:a.priority)+1,t=_.concat(t,i,[a],o)}s.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.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",route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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",route:"smsQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"user",filters:{fields:"id,name",sort:"name",nolimit:!0,role:"agent"}}],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",maxlength:255,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",route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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){r.smsAccount=e,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=s.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:[]}}).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(),o.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 s.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,n,a,t,i,o,s,r){var l=this;function d(){return a.smsAccount[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.smsAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserSmsAccount?"penalty "+e.UserSmsAccount.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserSmsAccount?"penalty "+e.UserSmsAccount.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.smsAccount=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("SMS.ALL_AGENTS"),labelSelected:s.instant("SMS.SELECTED_AGENTS"),transferCallback:function(e,t){a.smsAccount[t?"removeAgents":"addAgents"]({id:l.smsAccount.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"SmsAccount properly "+(t?"removed":"added"),msg:"SmsAccount has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:smsAccount.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","smsAccount","smsAccounts","realtime","$translate","Auth"],angular.module("app.sms").controller("SmsAccountagentaddController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(e.appType||e.app).toUpperCase(),o.agent=angular.copy(e),o.agent.appdata)switch(o.agent.appType?o.agent.appType.toLowerCase():o.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agent.appdata.split(",");o.agent.key=s[0],o.agent.language=s[1],o.agent.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agent.appdata.split(",");o.agent.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agent.text=s.slice(1,s.length).join(",");break;case"message":o.agent.text=o.agent.appdata;break;case"set":o.agent.name=o.agent.appdata.split("=")[0],o.agent.value=o.agent.appdata.split("=")[1];break;case"agi":o.agent.project=o.agent.appdata;break;default:var r=o.agent.appdata.split(",");o.agent.agent=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.agent.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.agent.timeout=30;function l(e){t.hide(e)}o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outbounddial"===o.agent.appType.toLowerCase()&&(o.agent.prefix=o.agent.phone?o.agent.phone.split("$")[0]:void 0,o.agent.callerId=o.agent.callerID?"CALLERID(all)="+o.agent.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outboundDial"===o.agent.appType&&(o.agent.phone=a.cutdigits?(o.agent.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agent.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agent.options+="U(xcally-mixmonitor-context)"):o.agent.options=o.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.agents,{name:o.agent.agent});t&&(o.agent.UserId=t.id);if(o.agent.appType&&"custom"===o.agent.appType);else switch((o.agent.app||o.agent.appType).toLowerCase()){case"set":o.agent.appdata=o.agent.name+"="+o.agent.value;break;case"custom":break;default:e[0]=o.agent.agent,e[1]=o.agent.timeout,o.agent.appdata=e.join(",")}l(o.agent)},o.closeDialog=l,i.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){o.agents=e.rows||[]}).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","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(n.appType||n.app).toUpperCase(),o.autoreply=angular.copy(n),o.autoreply.appdata)switch(o.autoreply.appType?o.autoreply.appType.toLowerCase():o.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.autoreply.appdata.split(",");o.autoreply.key=s[0],o.autoreply.language=s[1],o.autoreply.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.autoreply.appdata.split(",");o.autoreply.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.autoreply.text=s.slice(1,s.length).join(",");break;case"message":o.autoreply.text=o.autoreply.appdata;break;case"set":o.autoreply.name=o.autoreply.appdata.split("=")[0],o.autoreply.value=o.autoreply.appdata.split("=")[1];break;case"agi":o.autoreply.project=o.autoreply.appdata;break;default:var r=o.autoreply.appdata.split(",");o.autoreply.times=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.autoreply.text=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.autoreply.times=1;function l(e){t.hide(e)}o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outbounddial"===o.autoreply.appType.toLowerCase()&&(o.autoreply.prefix=o.autoreply.phone?o.autoreply.phone.split("$")[0]:void 0,o.autoreply.callerId=o.autoreply.callerID?"CALLERID(all)="+o.autoreply.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outboundDial"===o.autoreply.appType&&(o.autoreply.phone=a.cutdigits?(o.autoreply.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.autoreply.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.autoreply.options+="U(xcally-mixmonitor-context)"):o.autoreply.options=o.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(o.autoreply.appType&&"custom"===o.autoreply.appType);else switch((o.autoreply.app||o.autoreply.appType).toLowerCase()){case"set":o.autoreply.appdata=o.autoreply.name+"="+o.autoreply.value;break;case"custom":break;default:e[0]=o.autoreply.times,e[1]=o.autoreply.text,o.autoreply.appdata=e.join(",")}l(o.autoreply)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(n.appType||n.app).toUpperCase(),o.close=angular.copy(n),o.close.appdata)switch(o.close.appType?o.close.appType.toLowerCase():o.close.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.close.appdata.split(",");o.close.key=s[0],o.close.language=s[1],o.close.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.close.appdata.split(",");o.close.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.close.text=s.slice(1,s.length).join(",");break;case"message":o.close.text=o.close.appdata;break;case"set":o.close.name=o.close.appdata.split("=")[0],o.close.value=o.close.appdata.split("=")[1];break;case"agi":o.close.project=o.close.appdata;break;default:var r=o.close.appdata.split(",");o.close.disposition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outbounddial"===o.close.appType.toLowerCase()&&(o.close.prefix=o.close.phone?o.close.phone.split("$")[0]:void 0,o.close.callerId=o.close.callerID?"CALLERID(all)="+o.close.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outboundDial"===o.close.appType&&(o.close.phone=a.cutdigits?(o.close.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.close.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.close.options+="U(xcally-mixmonitor-context)"):o.close.options=o.close.options.replace("U(xcally-mixmonitor-context)",""));if(o.close.appType&&"custom"===o.close.appType);else switch((o.close.app||o.close.appType).toLowerCase()){case"set":o.close.appdata=o.close.name+"="+o.close.value;break;case"custom":break;default:e[0]=o.close.disposition,o.close.appdata=e.join(",")}l(o.close)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotoif=angular.copy(n),o.gotoif.appdata)switch(o.gotoif.appType?o.gotoif.appType.toLowerCase():o.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotoif.appdata.split(",");o.gotoif.key=s[0],o.gotoif.language=s[1],o.gotoif.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotoif.appdata.split(",");o.gotoif.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotoif.text=s.slice(1,s.length).join(",");break;case"message":o.gotoif.text=o.gotoif.appdata;break;case"set":o.gotoif.name=o.gotoif.appdata.split("=")[0],o.gotoif.value=o.gotoif.appdata.split("=")[1];break;case"agi":o.gotoif.project=o.gotoif.appdata;break;default:var r=o.gotoif.appdata.split(",");o.gotoif.condition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.gotoif.truepriority=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.gotoif.falsepriority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outbounddial"===o.gotoif.appType.toLowerCase()&&(o.gotoif.prefix=o.gotoif.phone?o.gotoif.phone.split("$")[0]:void 0,o.gotoif.callerId=o.gotoif.callerID?"CALLERID(all)="+o.gotoif.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outboundDial"===o.gotoif.appType&&(o.gotoif.phone=a.cutdigits?(o.gotoif.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotoif.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotoif.options+="U(xcally-mixmonitor-context)"):o.gotoif.options=o.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotoif.appType&&"custom"===o.gotoif.appType);else switch((o.gotoif.app||o.gotoif.appType).toLowerCase()){case"set":o.gotoif.appdata=o.gotoif.name+"="+o.gotoif.value;break;case"custom":break;default:e[0]=o.gotoif.condition,e[1]=o.gotoif.truepriority,e[2]=o.gotoif.falsepriority,o.gotoif.appdata=e.join(",")}l(o.gotoif)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotop=angular.copy(n),o.gotop.appdata)switch(o.gotop.appType?o.gotop.appType.toLowerCase():o.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotop.appdata.split(",");o.gotop.key=s[0],o.gotop.language=s[1],o.gotop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotop.appdata.split(",");o.gotop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotop.text=s.slice(1,s.length).join(",");break;case"message":o.gotop.text=o.gotop.appdata;break;case"set":o.gotop.name=o.gotop.appdata.split("=")[0],o.gotop.value=o.gotop.appdata.split("=")[1];break;case"agi":o.gotop.project=o.gotop.appdata;break;default:var r=o.gotop.appdata.split(",");o.gotop.priority=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outbounddial"===o.gotop.appType.toLowerCase()&&(o.gotop.prefix=o.gotop.phone?o.gotop.phone.split("$")[0]:void 0,o.gotop.callerId=o.gotop.callerID?"CALLERID(all)="+o.gotop.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outboundDial"===o.gotop.appType&&(o.gotop.phone=a.cutdigits?(o.gotop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotop.options+="U(xcally-mixmonitor-context)"):o.gotop.options=o.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotop.appType&&"custom"===o.gotop.appType);else switch((o.gotop.app||o.gotop.appType).toLowerCase()){case"set":o.gotop.appdata=o.gotop.name+"="+o.gotop.value;break;case"custom":break;default:e[0]=o.gotop.priority,o.gotop.appdata=e.join(",")}l(o.gotop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditSmsAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(n.appType||n.app).toUpperCase(),o.noop=angular.copy(n),o.noop.appdata)switch(o.noop.appType?o.noop.appType.toLowerCase():o.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.noop.appdata.split(",");o.noop.key=s[0],o.noop.language=s[1],o.noop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.noop.appdata.split(",");o.noop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.noop.text=s.slice(1,s.length).join(",");break;case"message":o.noop.text=o.noop.appdata;break;case"set":o.noop.name=o.noop.appdata.split("=")[0],o.noop.value=o.noop.appdata.split("=")[1];break;case"agi":o.noop.project=o.noop.appdata;break;default:var r=o.noop.appdata.split(",");o.noop.value=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outbounddial"===o.noop.appType.toLowerCase()&&(o.noop.prefix=o.noop.phone?o.noop.phone.split("$")[0]:void 0,o.noop.callerId=o.noop.callerID?"CALLERID(all)="+o.noop.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outboundDial"===o.noop.appType&&(o.noop.phone=a.cutdigits?(o.noop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.noop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.noop.options+="U(xcally-mixmonitor-context)"):o.noop.options=o.noop.options.replace("U(xcally-mixmonitor-context)",""));if(o.noop.appType&&"custom"===o.noop.appType);else switch((o.noop.app||o.noop.appType).toLowerCase()){case"set":o.noop.appdata=o.noop.name+"="+o.noop.value;break;case"custom":break;default:e[0]=o.noop.value,o.noop.appdata=e.join(",")}l(o.noop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.queue.queue=300,o.queue.timeout=300;function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.queues,{name:o.queue.queue});t&&(o.queue[_.capitalize("sms")+"QueueId"]=t.id);if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.timeout,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.smsQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(e.appType||e.app).toUpperCase(),o.system=angular.copy(e),o.system.appdata)switch(o.system.appType?o.system.appType.toLowerCase():o.system.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.system.appdata.split(",");o.system.key=s[0],o.system.language=s[1],o.system.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.system.appdata.split(",");o.system.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.system.text=s.slice(1,s.length).join(",");break;case"message":o.system.text=o.system.appdata;break;case"set":o.system.name=o.system.appdata.split("=")[0],o.system.value=o.system.appdata.split("=")[1];break;case"agi":o.system.project=o.system.appdata;break;default:var r=o.system.appdata.split(",");o.system.command=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.system.variable=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.system.variable="";function l(e){t.hide(e)}o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outbounddial"===o.system.appType.toLowerCase()&&(o.system.prefix=o.system.phone?o.system.phone.split("$")[0]:void 0,o.system.callerId=o.system.callerID?"CALLERID(all)="+o.system.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outboundDial"===o.system.appType&&(o.system.phone=a.cutdigits?(o.system.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.system.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.system.options+="U(xcally-mixmonitor-context)"):o.system.options=o.system.options.replace("U(xcally-mixmonitor-context)",""));if(o.system.appType&&"custom"===o.system.appType);else switch((o.system.app||o.system.appType).toLowerCase()){case"set":o.system.appdata=o.system.name+"="+o.system.value;break;case"custom":break;default:e[0]=o.system.command,e[1]=o.system.variable,o.system.appdata=e.join(",")}l(o.system)},o.closeDialog=l,i.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(e.appType||e.app).toUpperCase(),o.tag=angular.copy(e),o.tag.appdata)switch(o.tag.appType?o.tag.appType.toLowerCase():o.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.tag.appdata.split(",");o.tag.key=s[0],o.tag.language=s[1],o.tag.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.tag.appdata.split(",");o.tag.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.tag.text=s.slice(1,s.length).join(",");break;case"message":o.tag.text=o.tag.appdata;break;case"set":o.tag.name=o.tag.appdata.split("=")[0],o.tag.value=o.tag.appdata.split("=")[1];break;case"agi":o.tag.project=o.tag.appdata;break;default:var r=o.tag.appdata.split(",");o.tag.tag=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outbounddial"===o.tag.appType.toLowerCase()&&(o.tag.prefix=o.tag.phone?o.tag.phone.split("$")[0]:void 0,o.tag.callerId=o.tag.callerID?"CALLERID(all)="+o.tag.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outboundDial"===o.tag.appType&&(o.tag.phone=a.cutdigits?(o.tag.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.tag.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.tag.options+="U(xcally-mixmonitor-context)"):o.tag.options=o.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.tags,{name:o.tag.tag});t&&(o.tag.TagId=t.id);if(o.tag.appType&&"custom"===o.tag.appType);else switch((o.tag.app||o.tag.appType).toLowerCase()){case"set":o.tag.appdata=o.tag.name+"="+o.tag.value;break;case"custom":break;default:e[0]=o.tag.tag,o.tag.appdata=e.join(",")}l(o.tag)},o.closeDialog=l,i.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountInteractions={count:0,rows:[]},c.selectedSmsAccountInteractions=[],c.query={fields:"createdAt,updatedAt,id,createdAt,Contact.firstName,Owner.name,closedAt,disposition,note,UserId,ContactId,SmsAccountId,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e){c.smsAccount=e,c.query.id=c.smsAccount.id,c.getSmsAccountInteractions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},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){o.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/interactions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,interaction:t,interactions:c.smsAccountInteractions.rows,license:null,setting:null}})},c.spysmsInteraction=function(e,n){o.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(s.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=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountSmsCannedAnswers={count:0,rows:[]},c.selectedSmsAccountSmsCannedAnswers=[],c.query={fields:"createdAt,updatedAt,id,key,value,description,createdAt",limit:10,page:1},c.init=function(e){c.smsAccount=e,c.query.id=c.smsAccount.id,c.query.SmsAccountId=c.smsAccount.id,c.getSmsAccountSmsCannedAnswers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditSmsCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/smsCannedAnswers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,smsCannedAnswer:t,smsCannedAnswers:c.smsAccountSmsCannedAnswers.rows,license:null,setting:null}})},c.exportSelectedSmsAccountSmsCannedAnswers=function(){var e=angular.copy(c.selectedSmsAccountSmsCannedAnswers);return c.selectedSmsAccountSmsCannedAnswers=[],e},c.deleteSmsAccountSmsCannedAnswer=g,c.deleteSelectedSmsAccountSmsCannedAnswers=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SMS.EDIT_SMSCANNEDANSWER",u.smsCannedAnswer=angular.copy(r),u.smsCannedAnswers=s,u.newSmsCannedAnswer=!1,u.smsCannedAnswer||(u.smsCannedAnswer={},u.title="SMS.NEW_SMSCANNEDANSWER",u.newSmsCannedAnswer=!0),t.params.id&&(u.smsCannedAnswer.SmsAccountId=t.params.id),u.addNewSmsCannedAnswer=function(){u.errors=[],l.cannedAnswer.save(u.smsCannedAnswer).$promise.then(function(e){u.smsCannedAnswers.unshift(e.toJSON()),o.success({title:"SmsCannedAnswer properly created",msg:u.smsCannedAnswer.name?u.smsCannedAnswer.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSmsCannedAnswer=function(){u.errors=[],l.cannedAnswer.update({id:u.smsCannedAnswer.id},u.smsCannedAnswer).$promise.then(function(e){var t=_.find(u.smsCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsCannedAnswer properly saved!",msg:u.smsCannedAnswer.name?u.smsCannedAnswer.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSmsCannedAnswer=function(e){u.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(){l.cannedAnswer.delete({id:u.smsCannedAnswer.id}).$promise.then(function(){_.remove(u.smsCannedAnswers,{id:u.smsCannedAnswer.id}),o.success({title:"SmsCannedAnswer properly deleted!",msg:(u.smsCannedAnswer.name||"smsCannedAnswer")+" has been deleted!"}),p(u.smsCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","smsCannedAnswers","smsCannedAnswer","api","Auth","license","setting"],angular.module("app.sms").controller("CreateOrEditSmsCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountSmsDispositions={count:0,rows:[]},c.selectedSmsAccountSmsDispositions=[],c.query={fields:"createdAt,updatedAt,id,name,createdAt",limit:10,page:1},c.init=function(e){c.smsAccount=e,c.query.id=c.smsAccount.id,c.query.SmsAccountId=c.smsAccount.id,c.getSmsAccountSmsDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditSmsDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/smsDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,smsDisposition:t,smsDispositions:c.smsAccountSmsDispositions.rows,license:null,setting:null}})},c.exportSelectedSmsAccountSmsDispositions=function(){var e=angular.copy(c.selectedSmsAccountSmsDispositions);return c.selectedSmsAccountSmsDispositions=[],e},c.deleteSmsAccountSmsDisposition=g,c.deleteSelectedSmsAccountSmsDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SMS.EDIT_SMSDISPOSITION",u.smsDisposition=angular.copy(r),u.smsDispositions=s,u.newSmsDisposition=!1,u.smsDisposition||(u.smsDisposition={},u.title="SMS.NEW_SMSDISPOSITION",u.newSmsDisposition=!0),t.params.id&&(u.smsDisposition.SmsAccountId=t.params.id),u.addNewSmsDisposition=function(){u.errors=[],l.disposition.save(u.smsDisposition).$promise.then(function(e){u.smsDispositions.unshift(e.toJSON()),o.success({title:"SmsDisposition properly created",msg:u.smsDisposition.name?u.smsDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSmsDisposition=function(){u.errors=[],l.disposition.update({id:u.smsDisposition.id},u.smsDisposition).$promise.then(function(e){var t=_.find(u.smsDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsDisposition properly saved!",msg:u.smsDisposition.name?u.smsDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSmsDisposition=function(e){u.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(){l.disposition.delete({id:u.smsDisposition.id}).$promise.then(function(){_.remove(u.smsDispositions,{id:u.smsDisposition.id}),o.success({title:"SmsDisposition properly deleted!",msg:(u.smsDisposition.name||"smsDisposition")+" has been deleted!"}),p(u.smsDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","smsDispositions","smsDisposition","api","Auth","license","setting"],angular.module("app.sms").controller("CreateOrEditSmsDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.smsAccount=d||e.params.smsAccount||{},c.selectedTab=e.params.tab||0,c.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:c.smsAccounts?c.smsAccounts.rows:[],realtime:!1}})},c.alert=r.info,c.gotoSmsAccounts=function(){e.go("app.sms.smsAccounts")},c.saveSmsAccount=function(){s.smsAccount.update({id:c.smsAccount.id},c.smsAccount).$promise.then(function(){r.success({title:"SmsAccount updated!",msg:c.smsAccount.name?c.smsAccount.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","license","setting","api","toasty","Auth","smsAccount"],angular.module("app.sms").controller("SmsAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.smsAccounts=r||{count:0,rows:[]},v.table="smsAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedSmsAccounts=[],v.query={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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},v.arraytype=_.keyBy([{option:"Twilio",value:"'twilio'"},{option:"Skebby",value:"'skebby'"},{option:"Connectel",value:"'connectel'"},{option:"ClickSend",value:"'clicksend'"},{option:"Plivo",value:"'plivo'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysmsMethod=_.keyBy([{option:"Basic",value:"'basic'"},{option:"Classic",value:"'classic'"},{option:"Classic+",value:"'classic+'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.sms.smsAccounts.edit",{id:e.id,smsAccount:e})},v.interactionsgoto=function(e,t){n.go("app.sms.smsAccounts.edit",{id:e.id,tab:5})},v.agentadddialog=function(e,t){i.show({controller:"SmsAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsAccount:e,smsAccounts:v.smsAccounts?v.smsAccounts.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the smsAccount?").htmlContent("<b>"+(e.name||"smsAccount")+"</b> will be deleted.").ariaLabel("delete smsAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getSmsAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.smsAccount.get(v.query,f).$promise},v.createOrEditSmsAccount=function(e,t){i.show({controller:"CreateOrEditSmsAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:t,smsAccounts:v.smsAccounts.rows,license:v.license,setting:v.setting}})},v.deleteSmsAccount=A,v.exportSelectedSmsAccounts=function(){var e=angular.copy(v.selectedSmsAccounts);return v.selectedSmsAccounts=[],e},v.deleteSelectedSmsAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected smsAccounts?").htmlContent("<b>"+v.selectedSmsAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SmsAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSmsAccounts.forEach(function(e){A(e)}),v.selectedSmsAccounts=[]})},v.deselectSmsAccounts=function(){v.selectedSmsAccounts=[]},v.selectAllSmsAccounts=function(){v.selectedSmsAccounts=v.smsAccounts.rows},l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.smsAccounts=e||{count:0,rows:[]}}function A(e){l.smsAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.smsAccounts.rows,{id:e.id}),v.smsAccounts.count-=1,v.smsAccounts.rows.length||v.getSmsAccounts(),c.success({title:"SmsAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsmsAccount"}];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:"SYSTEM:DELETEsmsAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSmsAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","smsAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.sms").controller("SmsAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SMS.EDIT_SMSQUEUE",u.smsQueue=angular.copy(r),u.smsQueues=s,u.newSmsQueue=!1,u.smsQueue||(u.smsQueue={strategy:"beepall",timeout:10},u.title="SMS.NEW_SMSQUEUE",u.newSmsQueue=!0),u.addNewSmsQueue=function(){u.errors=[],l.smsQueue.save(u.smsQueue).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"sms",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.smsQueues.unshift(e.toJSON()),o.success({title:"SmsQueue properly created",msg:u.smsQueue.name?u.smsQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSmsQueue=function(){u.errors=[],l.smsQueue.update({id:u.smsQueue.id},u.smsQueue).$promise.then(function(e){var t=_.find(u.smsQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsQueue properly saved!",msg:u.smsQueue.name?u.smsQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSmsQueue=function(e){u.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(){l.smsQueue.delete({id:u.smsQueue.id}).$promise.then(function(){return l.smsQueue.getAgents({id:u.smsQueue.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.smsQueue.id],channel:"sms",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.smsQueues,{id:u.smsQueue.id}),o.success({title:"SmsQueue properly deleted!",msg:(u.smsQueue.name||"smsQueue")+" has been deleted!"}),p(u.smsQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","smsQueues","smsQueue","api","Auth","license","setting"],angular.module("app.sms").controller("CreateOrEditSmsQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.smsQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.smsQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserSmsQueue?"penalty "+e.UserSmsQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserSmsQueue?"penalty "+e.UserSmsQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.smsQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("SMS.ALL_AGENTS"),labelSelected:s.instant("SMS.SELECTED_AGENTS"),transferCallback:function(e,t){a.smsQueue[t?"removeAgents":"addAgents"]({id:l.smsQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"SmsQueue properly "+(t?"removed":"added"),msg:"SmsQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:smsQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","smsQueue","smsQueues","realtime","$translate","Auth"],angular.module("app.sms").controller("SmsQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.smsQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("SMS.ALL_TEAMS"),labelSelected:i.instant("SMS.SELECTED_TEAMS"),transferCallback:function(e,t){a.smsQueue[t?"removeTeams":"addTeams"]({id:o.smsQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:smsQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.smsQueue.getTeams({id:o.smsQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","smsQueue","$translate"],angular.module("app.sms").controller("SmsQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.smsQueue=d||e.params.smsQueue||{},c.selectedTab=e.params.tab||0,c.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:c.smsQueues?c.smsQueues.rows:[]}})},c.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:c.smsQueues?c.smsQueues.rows:[],realtime:!1}})},c.alert=r.info,c.gotoSmsQueues=function(){e.go("app.sms.smsQueues")},c.saveSmsQueue=function(){s.smsQueue.update({id:c.smsQueue.id},c.smsQueue).$promise.then(function(){r.success({title:"SmsQueue updated!",msg:c.smsQueue.name?c.smsQueue.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","smsQueue"],angular.module("app.sms").controller("SmsQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.smsQueues=r||{count:0,rows:[]},v.table="smsQueues",v.listOrder="",v.listOrderAsc=null,v.selectedSmsQueues=[],v.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"sms",limit:10,page:1},v.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.sms.smsQueues.edit",{id:e.id,smsQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"SmsQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:v.smsQueues?v.smsQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"SmsQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:v.smsQueues?v.smsQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the smsQueue?").htmlContent("<b>"+(e.name||"smsQueue")+"</b> will be deleted.").ariaLabel("delete smsQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.sms.realtime.queues",{})},v.success=f,v.getSmsQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.smsQueue.get(v.query,f).$promise},v.createOrEditSmsQueue=function(e,t){i.show({controller:"CreateOrEditSmsQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsQueue:t,smsQueues:v.smsQueues.rows,license:v.license,setting:v.setting}})},v.deleteSmsQueue=A,v.exportSelectedSmsQueues=function(){var e=angular.copy(v.selectedSmsQueues);return v.selectedSmsQueues=[],e},v.deleteSelectedSmsQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected smsQueues?").htmlContent("<b>"+v.selectedSmsQueues.length+" selected</b> will be deleted.").ariaLabel("delete SmsQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSmsQueues.forEach(function(e){A(e)}),v.selectedSmsQueues=[]})},v.deselectSmsQueues=function(){v.selectedSmsQueues=[]},v.selectAllSmsQueues=function(){v.selectedSmsQueues=v.smsQueues.rows};var h=!0,b=1;function f(e){v.smsQueues=e||{count:0,rows:[]}}function A(e){l.smsQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.smsQueues.rows,{id:e.id}),v.smsQueues.count-=1,v.smsQueues.rows.length||v.getSmsQueues(),c.success({title:"SmsQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsmsQueue"}];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:"SYSTEM:DELETEsmsQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSmsQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","smsQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.sms").controller("SmsQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.agents=r||{count:0,rows:[]},v.table="agents",v.listOrder="",v.listOrderAsc=null,v.selectedAgents=[],v.query={fields:"createdAt,updatedAt,id,role,fullname,name,alias,email,phone,mobile,userpic,password,showWebBar,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,voicemail,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,passwordResetAt,phoneBarEnableVideoRecording",role:"agent",sort:"-updatedAt",limit:10,page:1},v.arrayshowWebBar=_.keyBy([{option:"Phonebar",value:"0"},{option:"External",value:"1"},{option:"WebRTC",value:"2"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.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"),"")}),v.arraytype=_.keyBy([{option:"Friend",value:"'friend'"},{option:"User",value:"'user'"},{option:"Peer",value:"'peer'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.editstate=function(e,t){n.go("app.staff.agents.edit",{id:e.id,agent:e})},v.teamadddialog=function(e,t){i.show({controller:"AgentteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:v.agents?v.agents.rows:[]}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the agent?").htmlContent("<b>"+(e.name||"agent")+"</b> will be deleted.").ariaLabel("delete agent").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getAgents=function(){v.query.offset=(v.query.page-1)*v.query.limit,m.hasRole("admin")?v.promise=l.user.get(v.query,f).$promise:(v.query.id=v.currentUser.id,v.promise=l.user.getAgents(v.query,f).$promise)},v.createOrEditAgent=function(e,t){i.show({controller:"CreateOrEditAgentDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{agent:t,agents:v.agents.rows,license:v.license,setting:v.setting}})},v.deleteAgent=A,v.exportSelectedAgents=function(){var e=angular.copy(v.selectedAgents);return v.selectedAgents=[],e},v.deleteSelectedAgents=function(e){var t=i.confirm().title("Are you sure want to delete the selected agents?").htmlContent("<b>"+v.selectedAgents.length+" selected</b> will be deleted.").ariaLabel("delete Agents").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedAgents.forEach(function(e){A(e)}),v.selectedAgents=[]})},v.deselectAgents=function(){v.selectedAgents=[]},v.selectAllAgents=function(){v.selectedAgents=v.agents.rows};var h=!0,b=1;function f(e){v.agents=e||{count:0,rows:[]}}function A(e){l.user.delete({id:e.id}).$promise.then(function(){_.remove(v.agents.rows,{id:e.id}),v.agents.count-=1,v.agents.rows.length||v.getAgents(),c.success({title:"Agent deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];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:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getAgents())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","agents","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("AgentsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="STAFF.EDIT_AGENT",u.agent=angular.copy(r),u.agents=s,u.newAgent=!1,u.agent||(u.agent={role:"agent",showWebBar:"0",autointernal:!0,type:"friend",context:"from-sip",phoneBarRemoteControl:!0,phoneBarRemoteControlPort:9888,allowmessenger:!0},u.title="STAFF.NEW_AGENT",u.newAgent=!0),u.addNewAgent=function(){u.errors=[],l.user.save(u.agent).$promise.then(function(e){u.agents.unshift(e.toJSON()),o.success({title:"Agent properly created",msg:u.agent.name?u.agent.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveAgent=function(){u.errors=[],l.user.update({id:u.agent.id},u.agent).$promise.then(function(e){var t=_.find(u.agents,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Agent properly saved!",msg:u.agent.name?u.agent.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteAgent=function(e){u.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(){l.user.delete({id:u.agent.id}).$promise.then(function(){_.remove(u.agents,{id:u.agent.id}),o.success({title:"Agent properly deleted!",msg:(u.agent.name||"agent")+" has been deleted!"}),p(u.agent)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","agents","agent","api","Auth","license","setting"],angular.module("app.staff").controller("CreateOrEditAgentDialogController",e)}(),function(){"use strict";function e(e,a){var i=this;i.agent={},i.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.agent=angular.copy(e),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,o){var s=this;function r(){e.hide()}s.currentUser=o.getCurrentUser(),s.errors=[],s.setting=i,s.passwordPattern=s.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",s.agent=a,s.password="",s.oldPassword="",s.savePassword=function(){s.errors=[];var e={id:s.agent.id,newPassword:s.password};s.currentUser.id==s.agent.id&&(e.oldPassword=s.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()}),s.errors=e.data.errors||[{message:e.toString(),type:"api.agent.changePassword"}]})},s.closeDialog=r}e.$inject=["$mdDialog","toasty","api","agent","setting","Auth"],angular.module("app.staff").controller("AgentchangepasswordController",e)}(),function(){"use strict";function e(n,a,i,e,t,o){var s=this;s.agent={},s.navigation=t.getNavigation(),s.init=function(e){s.agent=e},s.onChange=function(t,n){if((n||t).enabled){if(n)n.enabled=!0,s.agent.permissions.push(n.id);else for(var e=0;e<t.children.length;e++)t.children[e].enabled=!0,s.agent.permissions.push(t.children[e].id);t.enabled=!0,s.agent.permissions.push(t.id)}else if(n)n.enabled=!1,_.remove(s.agent.permissions,function(e){return n.id===e}),_.filter(t.children,{enabled:!1}).length===t.children.length&&(t.enabled=!1,_.remove(s.agent.permissions,function(e){return t.id===e}));else{t.enabled=!1,_.remove(s.agent.permissions,function(e){return t.id===e});for(var a=0;a<t.children.length;a++)t.children[a].enabled=!1,_.remove(s.agent.permissions,function(e){return t.children[a].id===e})}return i.user.update({id:s.agent.id,permissions:_.uniq(s.agent.permissions)}).$promise.then(function(){o.success({title:"agent updated!",msg:s.agent.name?s.agent.name+" has been updated!":""})}).catch(function(e){console.error(e)})},s.addPermissions=function(e,t){a.show({controller:"UserpermissionaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/edit/permissionadd/permissionadd.html",parent:angular.element(n.body),targetEvent:t,clickOutsideToClose:!0,locals:{user:s.user,users:[],section:e}})},s.allowPermissions=function(e){if(e&&-1!==[401,501,502,601,602,701,702,801,802,901,902,1103,1501].indexOf(e.id))return!0;return!1}}e.$inject=["$document","$mdDialog","api","msNavigationService","msNavigationAgentService","toasty"],angular.module("app.staff").controller("AgentPermissionsController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l){var d=this;function c(){a.user[d.isVoiceRealtime()?"getVoiceQueuesRt":"getQueues"]({id:d.agent.id,fields:d.isVoiceRealtime()?"VoiceQueueId,queue_name,penalty":"id,name,strategy,type",channel:i,nolimit:!0}).$promise.then(function(e){return d.isVoiceRealtime()?d.selectedItems=e.rows?_.map(e.rows,function(e){return{id:e.VoiceQueueId,name:e.queue_name,penalty:e.hasOwnProperty("penalty")?"penalty "+e.penalty:"penalty 0",strategy:""}}):[]:d.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",e}):[],l.hasRole("admin")?a[d.apiname].get({fields:"id,name,strategy,type",nolimit:!0,type:s}).$promise:a.user.getQueues({id:l.getCurrentUser().id,fields:"id,name,strategy,type",nolimit:!0,type:s,channel:i}).$promise}).then(function(e){d.items=e.rows?e.rows:[],d.selectedItems=_.intersectionBy(d.selectedItems,d.items,"id"),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.items,d.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETQUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})}d.agent=t,d.penalty=0,d.apiname=i+"Queue",d.title=r.instant("STAFF.QUEUEADD_AGENT_"+i.toUpperCase()+"_"+s.toUpperCase()),d.items=[],d.selectedItems=[],d.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"name",line2:"type",line3:"agent"===d.agent.role?"penalty":"",labelAll:r.instant("STAFF.ALL_QUEUES_"+i.toUpperCase()+"_"+s.toUpperCase()),labelSelected:r.instant("STAFF.SELECTED_QUEUES_"+i.toUpperCase()+"_"+s.toUpperCase()),transferCallback:function(e,t){a.user[t?"removeQueues":"addQueues"]({id:d.agent.id,ids:_.map(e,"id"),channel:i,penalty:d.penalty||0,realtime:o}).$promise.then(function(){c(),n.success({title:"Queue properly "+(t?"removed":"added"),msg:"Queue has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USER.ADDQUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d.closeDialog=function(){e.hide()},d.isVoiceRealtime=function(){return o&&"voice"===i},d.isVoiceChannel=function(){return"voice"===i},c()}e.$inject=["$mdDialog","toasty","api","agent","channel","realtime","direction","$translate","Auth"],angular.module("app.staff").controller("AgentqueueaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.agent=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("STAFF.ALL_TEAMS"),labelSelected:i.instant("STAFF.SELECTED_TEAMS"),transferCallback:function(e,t){a.user[t?"removeTeams":"addTeams"]({id:o.agent.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:agent.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.user.getTeams({id:o.agent.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","agent","$translate"],angular.module("app.staff").controller("AgentteamaddController",e)}(),function(){"use strict";function e(e,t,i,o,n,a,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=n,c.setting=a,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.agent=d||e.params.agent||{},c.selectedTab=e.params.tab||0,c.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(o.body),targetEvent:n,clickOutsideToClose:!0,locals:{agent:e,agents:c.agents?c.agents.rows:[],channel:t,realtime:!1,direction:a||"inbound"}})},c.teamadddialog=function(e,t){i.show({controller:"AgentteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:c.agents?c.agents.rows:[]}})},c.changepassworddialog=function(e,t){i.show({controller:"AgentchangepasswordController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/changepassword/changepassword.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,setting:a,agents:c.agents?c.agents.rows:[]}})},c.alert=r.info,c.gotoAgents=function(){e.go("app.staff.agents")},c.saveAgent=function(){c.agent=_.omit(c.agent,"userpic"),s.user.update({id:c.agent.id},c.agent).$promise.then(function(){r.success({title:"Agent updated!",msg:c.agent.name?c.agent.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","agent"],angular.module("app.staff").controller("AgentController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="STAFF.EDIT_TEAM",u.team=angular.copy(r),u.teams=s,u.newTeam=!1,u.team||(u.team={},u.title="STAFF.NEW_TEAM",u.newTeam=!0),u.addNewTeam=function(){u.errors=[],l.team.save(u.team).$promise.then(function(e){u.teams.unshift(e.toJSON()),o.success({title:"Team properly created",msg:u.team.name?u.team.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTeam=function(){u.errors=[],l.team.update({id:u.team.id},u.team).$promise.then(function(e){var t=_.find(u.teams,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Team properly saved!",msg:u.team.name?u.team.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTeam=function(e){u.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(){l.team.delete({id:u.team.id}).$promise.then(function(){_.remove(u.teams,{id:u.team.id}),o.success({title:"Team properly deleted!",msg:(u.team.name||"team")+" has been deleted!"}),p(u.team)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","teams","team","api","Auth","license","setting"],angular.module("app.staff").controller("CreateOrEditTeamDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.team[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.team.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserTeam?"penalty "+e.UserTeam.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserTeam?"penalty "+e.UserTeam.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.team=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("STAFF.ALL_AGENTS"),labelSelected:s.instant("STAFF.SELECTED_AGENTS"),transferCallback:function(e,t){a.team[t?"removeAgents":"addAgents"]({id:l.team.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:team.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","team","teams","realtime","$translate","Auth"],angular.module("app.staff").controller("TeamagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.teams=r||{count:0,rows:[]},v.table="teams",v.listOrder="",v.listOrderAsc=null,v.selectedTeams=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditTeamDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{team:e,teams:v.teams.rows,license:v.license,setting:null}})},v.agentadddialog=function(e,t){i.show({controller:"TeamagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{team:e,teams:v.teams?v.teams.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the team?").htmlContent("<b>"+(e.name||"team")+"</b> will be deleted.").ariaLabel("delete team").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTeams=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.team.get(v.query,f).$promise},v.createOrEditTeam=function(e,t){i.show({controller:"CreateOrEditTeamDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{team:t,teams:v.teams.rows,license:v.license,setting:v.setting}})},v.deleteTeam=A,v.exportSelectedTeams=function(){var e=angular.copy(v.selectedTeams);return v.selectedTeams=[],e},v.deleteSelectedTeams=function(e){var t=i.confirm().title("Are you sure want to delete the selected teams?").htmlContent("<b>"+v.selectedTeams.length+" selected</b> will be deleted.").ariaLabel("delete Teams").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTeams.forEach(function(e){A(e)}),v.selectedTeams=[]})},v.deselectTeams=function(){v.selectedTeams=[]},v.selectAllTeams=function(){v.selectedTeams=v.teams.rows};var h=!0,b=1;function f(e){v.teams=e||{count:0,rows:[]}}function A(e){l.team.delete({id:e.id}).$promise.then(function(){_.remove(v.teams.rows,{id:e.id}),v.teams.count-=1,v.teams.rows.length||v.getTeams(),c.success({title:"Team deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEteam"}];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:"SYSTEM:DELETEteam",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTeams())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","teams","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("TeamsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="STAFF.EDIT_TELEPHONE",u.telephone=angular.copy(r),u.telephones=s,u.newTelephone=!1,u.telephone||(u.telephone={role:"telephone",autointernal:!0,context:"from-sip"},u.title="STAFF.NEW_TELEPHONE",u.newTelephone=!0),u.addNewTelephone=function(){u.errors=[],l.user.save(u.telephone).$promise.then(function(e){u.telephones.unshift(e.toJSON()),o.success({title:"Telephone properly created",msg:u.telephone.name?u.telephone.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTelephone=function(){u.errors=[],l.user.update({id:u.telephone.id},u.telephone).$promise.then(function(e){var t=_.find(u.telephones,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Telephone properly saved!",msg:u.telephone.name?u.telephone.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTelephone=function(e){u.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(){l.user.delete({id:u.telephone.id}).$promise.then(function(){_.remove(u.telephones,{id:u.telephone.id}),o.success({title:"Telephone properly deleted!",msg:(u.telephone.name||"telephone")+" has been deleted!"}),p(u.telephone)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","telephones","telephone","api","Auth","license","setting"],angular.module("app.staff").controller("CreateOrEditTelephoneDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o){var s=this;function r(){e.hide()}s.currentUser=o.getCurrentUser(),s.errors=[],s.setting=i,s.passwordPattern=s.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",s.telephone=a,s.password="",s.oldPassword="",s.savePassword=function(){s.errors=[];var e={id:s.telephone.id,newPassword:s.password};s.currentUser.id==s.telephone.id&&(e.oldPassword=s.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()}),s.errors=e.data.errors||[{message:e.toString(),type:"api.telephone.changePassword"}]})},s.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,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.telephone=d||e.params.telephone||{},c.selectedTab=e.params.tab||0,c.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:c.telephones?c.telephones.rows:[]}})},c.alert=r.info,c.gotoTelephones=function(){e.go("app.staff.telephones")},c.saveTelephone=function(){s.user.update({id:c.telephone.id},c.telephone).$promise.then(function(){r.success({title:"Telephone updated!",msg:c.telephone.name?c.telephone.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","telephone"],angular.module("app.staff").controller("TelephoneController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.telephones=r||{count:0,rows:[]},v.table="telephones",v.listOrder="",v.listOrderAsc=null,v.selectedTelephones=[],v.query={fields:"createdAt,updatedAt,id,role,fullname,name,email,password,description,autointernal,internal,voicemail,transport,nat,allow,callerid,context,callgroup,pickupgroup,encryption,phone,mobile",role:"telephone",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v.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"),"")}),v.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'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayencryption=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.staff.telephones.edit",{id:e.id,telephone:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the telephone?").htmlContent("<b>"+(e.name||"telephone")+"</b> will be deleted.").ariaLabel("delete telephone").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTelephones=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.user.get(v.query,f).$promise},v.createOrEditTelephone=function(e,t){i.show({controller:"CreateOrEditTelephoneDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/telephones/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{telephone:t,telephones:v.telephones.rows,license:v.license,setting:v.setting}})},v.deleteTelephone=A,v.exportSelectedTelephones=function(){var e=angular.copy(v.selectedTelephones);return v.selectedTelephones=[],e},v.deleteSelectedTelephones=function(e){var t=i.confirm().title("Are you sure want to delete the selected telephones?").htmlContent("<b>"+v.selectedTelephones.length+" selected</b> will be deleted.").ariaLabel("delete Telephones").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTelephones.forEach(function(e){A(e)}),v.selectedTelephones=[]})},v.deselectTelephones=function(){v.selectedTelephones=[]},v.selectAllTelephones=function(){v.selectedTelephones=v.telephones.rows};var h=!0,b=1;function f(e){v.telephones=e||{count:0,rows:[]}}function A(e){l.user.delete({id:e.id}).$promise.then(function(){_.remove(v.telephones.rows,{id:e.id}),v.telephones.count-=1,v.telephones.rows.length||v.getTelephones(),c.success({title:"Telephone deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];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:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTelephones())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","telephones","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("TelephonesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="STAFF.EDIT_USER",u.user=angular.copy(r),u.users=s,u.newUser=!1,u.user||(u.user={role:"user",autointernal:!0,context:"from-sip",crudPermissions:"0"},u.title="STAFF.NEW_USER",u.newUser=!0),u.addNewUser=function(){u.errors=[],l.user.save(u.user).$promise.then(function(e){u.users.unshift(e.toJSON()),o.success({title:"User properly created",msg:u.user.name?u.user.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveUser=function(){u.errors=[],l.user.update({id:u.user.id},u.user).$promise.then(function(e){var t=_.find(u.users,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"User properly saved!",msg:u.user.name?u.user.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteUser=function(e){if(d.getCurrentUser().id===u.user.id)return o.error({title:"User not deleted!",msg:"You can't remove yourself"});u.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(){l.user.delete({id:u.user.id}).$promise.then(function(){_.remove(u.users,{id:u.user.id}),o.success({title:"User properly deleted!",msg:(u.user.name||"user")+" has been deleted!"}),p(u.user)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","users","user","api","Auth","license","setting"],angular.module("app.staff").controller("CreateOrEditUserDialogController",e)}(),function(){"use strict";function e(e,a){var i=this;i.user={},i.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.user=angular.copy(e),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,o){var s=this;function r(){e.hide()}s.currentUser=o.getCurrentUser(),s.errors=[],s.setting=i,s.passwordPattern=s.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",s.user=a,s.password="",s.oldPassword="",s.savePassword=function(){s.errors=[];var e={id:s.user.id,newPassword:s.password};s.currentUser.id==s.user.id&&(e.oldPassword=s.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()}),s.errors=e.data.errors||[{message:e.toString(),type:"api.user.changePassword"}]})},s.closeDialog=r}e.$inject=["$mdDialog","toasty","api","user","setting","Auth"],angular.module("app.staff").controller("UserchangepasswordController",e)}(),function(){"use strict";function e(e,i,o,t,n,a,s,r){var l=this;function d(){return o.user[l.isVoiceRealtime()?"getVoiceQueuesRt":"getQueues"]({id:l.user.id,fields:l.isVoiceRealtime()?"VoiceQueueId,queue_name,penalty":"id,name,strategy,type",nolimit:!0,channel:"bull"===r.channel?"voice":r.channel,type:l.direction}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return{id:e.VoiceQueueId,name:e.queue_name,penalty:e.hasOwnProperty("penalty")?"penalty "+e.penalty:"penalty 0",strategy:""}}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,s.hasRole("admin")?o[r.route].get({fields:"id,name,strategy,type",nolimit:!0,type:l.direction}).$promise:o.user.getQueues({id:s.getCurrentUser().id,fields:"id,name,strategy,type",nolimit:!0,type:l.direction,channel:"bull"===r.channel?"voice":r.channel}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET"+r.title.toUpperCase(),msg:e.status?JSON.stringify(e.data):e.toString()})})}function c(){var e="get"+_.upperFirst([r.route])+"s";return o.user[e]({id:l.user.id,nolimit:!0}).$promise.then(function(e){return l.selectedItems=e.rows?_.map(e.rows,function(e){return e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,o[r.route].get({nolimit:!0}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET"+r.title.toUpperCase(),msg:e.status?JSON.stringify(e.data):e.toString()})})}l.user=t,l.penalty=0,l.section=r,l.direction=void 0!==r.channel&&"bull"===r.channel?"outbound":"inbound",l.realtime=!1,l.title=a.instant("STAFF.USERADD_"+r.title.toUpperCase()),l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return l.realtime&&"voice"===l.section.channel},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:a.instant("STAFF.ALL_"+r.title.toUpperCase()),labelSelected:a.instant("STAFF.SELECTED_"+r.title.toUpperCase()),transferCallback:function(e,t){if(void 0!==r.channel&&_.includes(r.route,"Queue")){var n=t?"removeQueues":"addQueues";o.user[n]({id:l.user.id,ids:_.map(e,"id"),channel:"bull"===r.channel?"voice":r.channel,penalty:l.penalty||0,realtime:l.realtime}).$promise.then(function(){i.success({title:"Queue properly "+(t?"removed":"added"),msg:"Queue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USER.ADDQUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})}else{var a=_.upperFirst([r.route])+"s";n=t?"remove"+a:"add"+a;o.user[n]({id:l.user.id,ids:_.map(e,"id")}).$promise.then(function(){i.success({title:l.section.title+" properly "+(t?"removed":"added"),msg:l.section.title+" has been "+(t?"removed":"added")+"!"}),t||c()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:user.ADD"+r.title.toUpperCase(),msg:e.status?JSON.stringify(e.data):e.toString()})})}}},void 0!==r.channel&&_.includes(r.route,"Queue")?d():c()}e.$inject=["$mdDialog","toasty","api","user","users","$translate","Auth","section"],angular.module("app.staff").controller("UserpermissionaddController",e)}(),function(){"use strict";function e(n,a,i,e,t,o){var s=this;s.user={},s.navigation=e.getNavigation(),s.init=function(e){s.user=e},s.onChange=function(t,n){if((n||t).enabled){if(n)n.enabled=!0,s.user.permissions.push(n.id);else for(var e=0;e<t.children.length;e++)t.children[e].enabled=!0,s.user.permissions.push(t.children[e].id);t.enabled=!0,s.user.permissions.push(t.id)}else if(n)n.enabled=!1,_.remove(s.user.permissions,function(e){return n.id===e}),_.filter(t.children,{enabled:!1}).length===t.children.length&&(t.enabled=!1,_.remove(s.user.permissions,function(e){return t.id===e}));else{t.enabled=!1,_.remove(s.user.permissions,function(e){return t.id===e});for(var a=0;a<t.children.length;a++)t.children[a].enabled=!1,_.remove(s.user.permissions,function(e){return t.children[a].id===e})}return i.user.update({id:s.user.id,permissions:_.uniq(s.user.permissions)}).$promise.then(function(){o.success({title:"user updated!",msg:s.user.name?s.user.name+" has been updated!":""})}).catch(function(e){console.error(e)})},s.addPermissions=function(e,t){a.show({controller:"UserpermissionaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/edit/permissionadd/permissionadd.html",parent:angular.element(n.body),targetEvent:t,clickOutsideToClose:!0,locals:{user:s.user,users:[],section:e}})},s.allowPermissions=function(e){if(e&&-1!==[401,501,502,601,602,701,702,801,802,901,902,1103,1501].indexOf(e.id))return!0;return!1}}e.$inject=["$document","$mdDialog","api","msNavigationService","msNavigationAgentService","toasty"],angular.module("app.staff").controller("UserPermissionsController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l){var d=this;function c(){a.user[d.isVoiceRealtime()?"getVoiceQueuesRt":"getQueues"]({id:d.user.id,fields:d.isVoiceRealtime()?"VoiceQueueId,queue_name,penalty":"id,name,strategy,type",channel:i,nolimit:!0}).$promise.then(function(e){return d.isVoiceRealtime()?d.selectedItems=e.rows?_.map(e.rows,function(e){return{id:e.VoiceQueueId,name:e.queue_name,penalty:e.hasOwnProperty("penalty")?"penalty "+e.penalty:"penalty 0",strategy:""}}):[]:d.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",e}):[],l.hasRole("admin")?a[d.apiname].get({fields:"id,name,strategy,type",nolimit:!0,type:s}).$promise:a.user.getQueues({id:l.getCurrentUser().id,fields:"id,name,strategy,type",nolimit:!0,type:s,channel:i}).$promise}).then(function(e){d.items=e.rows?e.rows:[],d.selectedItems=_.intersectionBy(d.selectedItems,d.items,"id"),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.items,d.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETQUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})}d.user=t,d.penalty=0,d.apiname=i+"Queue",d.title=r.instant("STAFF.QUEUEADD_USER_"+i.toUpperCase()+"_"+s.toUpperCase()),d.items=[],d.selectedItems=[],d.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"name",line2:"type",line3:"agent"===d.user.role?"penalty":"",labelAll:r.instant("STAFF.ALL_QUEUES_"+i.toUpperCase()+"_"+s.toUpperCase()),labelSelected:r.instant("STAFF.SELECTED_QUEUES_"+i.toUpperCase()+"_"+s.toUpperCase()),transferCallback:function(e,t){a.user[t?"removeQueues":"addQueues"]({id:d.user.id,ids:_.map(e,"id"),channel:i,penalty:d.penalty||0,realtime:o}).$promise.then(function(){c(),n.success({title:"Queue properly "+(t?"removed":"added"),msg:"Queue has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USER.ADDQUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d.closeDialog=function(){e.hide()},d.isVoiceRealtime=function(){return o&&"voice"===i},d.isVoiceChannel=function(){return"voice"===i},c()}e.$inject=["$mdDialog","toasty","api","user","channel","realtime","direction","$translate","Auth"],angular.module("app.staff").controller("UserqueueaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.user=d||e.params.user||{},c.selectedTab=e.params.tab||0,c.permissionadddialog=function(e,t){n.show({controller:"UserpermissionaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/edit/permissionadd/permissionadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{user:e,users:c.users?c.users.rows:[]}})},c.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:c.users?c.users.rows:[]}})},c.alert=r.info,c.gotoUsers=function(){e.go("app.staff.users")},c.saveUser=function(){c.user=_.omit(c.user,"userpic"),s.user.update({id:c.user.id},c.user).$promise.then(function(){r.success({title:"User updated!",msg:c.user.name?c.user.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","user"],angular.module("app.staff").controller("UserController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.users=r||{count:0,rows:[]},v.table="users",v.listOrder="",v.listOrderAsc=null,v.selectedUsers=[],v.query={fields:"createdAt,updatedAt,role,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,permissions,crudPermissions,passwordResetAt,passwordResetAt",role:"admin,user",sort:"-updatedAt",limit:10,page:1},v.arrayrole=_.keyBy([{option:"Admin",value:"'admin'"},{option:"User",value:"'user'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.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"),"")}),v.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'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraycrudPermissions=_.keyBy([{option:"readAndEditAndDelete",value:"0"},{option:"readAndEdit",value:"1"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.staff.users.edit",{id:e.id,user:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the user?").htmlContent("<b>"+(e.name||"user")+"</b> will be deleted.").ariaLabel("delete user").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getUsers=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.user.get(v.query,f).$promise},v.createOrEditUser=function(e,t){i.show({controller:"CreateOrEditUserDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{user:t,users:v.users.rows,license:v.license,setting:v.setting}})},v.deleteUser=A,v.exportSelectedUsers=function(){var e=angular.copy(v.selectedUsers);return v.selectedUsers=[],e},v.deleteSelectedUsers=function(e){var t=i.confirm().title("Are you sure want to delete the selected users?").htmlContent("<b>"+v.selectedUsers.length+" selected</b> will be deleted.").ariaLabel("delete Users").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedUsers.forEach(function(e){A(e)}),v.selectedUsers=[]})},v.deselectUsers=function(){v.selectedUsers=[]},v.selectAllUsers=function(){v.selectedUsers=v.users.rows};var h=!0,b=1;function f(e){v.users=e||{count:0,rows:[]}}function A(e){l.user.delete({id:e.id}).$promise.then(function(){_.remove(v.users.rows,{id:e.id}),v.users.count-=1,v.users.rows.length||v.getUsers(),c.success({title:"User deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];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:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getUsers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","users","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("UsersController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.cannedAnswers=r||{count:0,rows:[]},v.table="cannedAnswers",v.listOrder="",v.listOrderAsc=null,v.selectedCannedAnswers=[],v.query={fields:"createdAt,updatedAt,id,key,value,description",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/cannedAnswers/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{cannedAnswer:e,cannedAnswers:v.cannedAnswers.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the cannedAnswer?").htmlContent("<b>"+(e.name||"cannedAnswer")+"</b> will be deleted.").ariaLabel("delete cannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getCannedAnswers=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.cannedAnswer.get(v.query,f).$promise},v.createOrEditCannedAnswer=function(e,t){i.show({controller:"CreateOrEditCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/cannedAnswers/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{cannedAnswer:t,cannedAnswers:v.cannedAnswers.rows,license:v.license,setting:v.setting}})},v.deleteCannedAnswer=A,v.exportSelectedCannedAnswers=function(){var e=angular.copy(v.selectedCannedAnswers);return v.selectedCannedAnswers=[],e},v.deleteSelectedCannedAnswers=function(e){var t=i.confirm().title("Are you sure want to delete the selected cannedAnswers?").htmlContent("<b>"+v.selectedCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete CannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedCannedAnswers.forEach(function(e){A(e)}),v.selectedCannedAnswers=[]})},v.deselectCannedAnswers=function(){v.selectedCannedAnswers=[]},v.selectAllCannedAnswers=function(){v.selectedCannedAnswers=v.cannedAnswers.rows};var h=!0,b=1;function f(e){v.cannedAnswers=e||{count:0,rows:[]}}function A(e){l.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(v.cannedAnswers.rows,{id:e.id}),v.cannedAnswers.count-=1,v.cannedAnswers.rows.length||v.getCannedAnswers(),c.success({title:"CannedAnswer deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcannedAnswer"}];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:"SYSTEM:DELETEcannedAnswer",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getCannedAnswers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","cannedAnswers","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("CannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_CANNEDANSWER",u.cannedAnswer=angular.copy(r),u.cannedAnswers=s,u.newCannedAnswer=!1,u.cannedAnswer||(u.cannedAnswer={},u.title="TOOLS.NEW_CANNEDANSWER",u.newCannedAnswer=!0),u.addNewCannedAnswer=function(){u.errors=[],l.cannedAnswer.save(u.cannedAnswer).$promise.then(function(e){u.cannedAnswers.unshift(e.toJSON()),o.success({title:"CannedAnswer properly created",msg:u.cannedAnswer.name?u.cannedAnswer.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveCannedAnswer=function(){u.errors=[],l.cannedAnswer.update({id:u.cannedAnswer.id},u.cannedAnswer).$promise.then(function(e){var t=_.find(u.cannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CannedAnswer properly saved!",msg:u.cannedAnswer.name?u.cannedAnswer.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteCannedAnswer=function(e){u.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(){l.cannedAnswer.delete({id:u.cannedAnswer.id}).$promise.then(function(){_.remove(u.cannedAnswers,{id:u.cannedAnswer.id}),o.success({title:"CannedAnswer properly deleted!",msg:(u.cannedAnswer.name||"cannedAnswer")+" has been deleted!"}),p(u.cannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","cannedAnswers","cannedAnswer","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_CUSTOMDASHBOARD",u.customDashboard=angular.copy(r),u.customDashboards=s,u.newCustomDashboard=!1,u.customDashboard||(u.customDashboard={},u.title="TOOLS.NEW_CUSTOMDASHBOARD",u.newCustomDashboard=!0),u.addNewCustomDashboard=function(){u.errors=[],l.dashboard.save(u.customDashboard).$promise.then(function(e){u.customDashboards.unshift(e.toJSON()),o.success({title:"CustomDashboard properly created",msg:u.customDashboard.name?u.customDashboard.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveCustomDashboard=function(){u.errors=[],l.dashboard.update({id:u.customDashboard.id},u.customDashboard).$promise.then(function(e){var t=_.find(u.customDashboards,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CustomDashboard properly saved!",msg:u.customDashboard.name?u.customDashboard.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteCustomDashboard=function(e){u.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(){l.dashboard.delete({id:u.customDashboard.id}).$promise.then(function(){_.remove(u.customDashboards,{id:u.customDashboard.id}),o.success({title:"CustomDashboard properly deleted!",msg:(u.customDashboard.name||"customDashboard")+" has been deleted!"}),p(u.customDashboard)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","customDashboards","customDashboard","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditCustomDashboardDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.customDashboards=r||{count:0,rows:[]},v.table="customDashboards",v.listOrder="",v.listOrderAsc=null,v.selectedCustomDashboards=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},v.editstate=function(e,t){n.go("app.tools.customDashboards.edit",{id:e.id,customDashboard:e})},v.useradddialog=function(e,t){i.show({controller:"CustomDashboarduseraddController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/useradd/useradd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{customDashboard:e,customDashboards:v.customDashboards?v.customDashboards.rows:[]}})},v.clonedialog=function(e,t){i.show({controller:"CustomDashboardcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{customDashboard:e,customDashboards:v.customDashboards?v.customDashboards.rows:[]}})},v.gotodashboardgoto=function(e,t){n.go("app.dashboards.custom",{id:e.id})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the customDashboard?").htmlContent("<b>"+(e.name||"customDashboard")+"</b> will be deleted.").ariaLabel("delete customDashboard").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getCustomDashboards=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.dashboard.get(v.query,f).$promise},v.createOrEditCustomDashboard=function(e,t){i.show({controller:"CreateOrEditCustomDashboardDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{customDashboard:t,customDashboards:v.customDashboards.rows,license:v.license,setting:v.setting}})},v.deleteCustomDashboard=A,v.exportSelectedCustomDashboards=function(){var e=angular.copy(v.selectedCustomDashboards);return v.selectedCustomDashboards=[],e},v.deleteSelectedCustomDashboards=function(e){var t=i.confirm().title("Are you sure want to delete the selected customDashboards?").htmlContent("<b>"+v.selectedCustomDashboards.length+" selected</b> will be deleted.").ariaLabel("delete CustomDashboards").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedCustomDashboards.forEach(function(e){A(e)}),v.selectedCustomDashboards=[]})},v.deselectCustomDashboards=function(){v.selectedCustomDashboards=[]},v.selectAllCustomDashboards=function(){v.selectedCustomDashboards=v.customDashboards.rows};var h=!0,b=1;function f(e){v.customDashboards=e||{count:0,rows:[]}}function A(e){l.dashboard.delete({id:e.id}).$promise.then(function(){_.remove(v.customDashboards.rows,{id:e.id}),v.customDashboards.count-=1,v.customDashboards.rows.length||v.getCustomDashboards(),c.success({title:"CustomDashboard deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEdashboard"}];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:"SYSTEM:DELETEdashboard",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getCustomDashboards())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","customDashboards","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("CustomDashboardsController",e)}(),function(){"use strict";function e(t,n,a,e,i,o,s){var r=this;function l(e){t.hide(e)}r.newCustomDashboard=!0,r.customDashboard=angular.copy(i),r.customDashboards=o,r.title=s.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,o){var s=this;function t(e,t,n){return o.dashboardItem.update(n).$promise.catch(function(e){console.error(e)})}s.customDashboard={},s.voiceQueues=o.rpc.getVoiceQueues({fields:"id,name"}),s.init=function(e){return s.customDashboard=e,s.customDashboard.draggable={enabled:!0,handle:".draggable",stop:t},s.customDashboard.resizable={enabled:!0,handle:".resizable",stop:t},s.customDashboard.widgets=[],o.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=s.voiceQueues,e.rows[t].voiceQueuesSelected=_.map(s.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",s.customDashboard.widgets.push(e.rows[t])}).catch(function(e){console.error(e)})},s.createOrEditWidget=function(e){if(e&&e.attrs)for(var t=0;t<e.attrs.length;t+=1)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:s.customDashboard.widgets,license:null,setting:null}}).then(function(e){for(var t=0;t<s.customDashboard.widgets.length;t+=1)s.customDashboard.widgets[t].id===e.id&&(s.customDashboard.widgets[t].attrs=e.attrs,s.customDashboard.widgets[t].voiceQueues=s.voiceQueues,s.customDashboard.widgets[t].voiceQueuesSelected=_.map(s.voiceQueues.rows,"id"),s.customDashboard.widgets[t].templateUrl="app/core/directives/ms-widget-engine/ms-widget-engine-"+s.customDashboard.widgets[t].type+"/ms-widget-engine."+s.customDashboard.widgets[t].type+".html")})},s.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 o.dashboardItem.delete({id:t.id}).$promise.then(function(e){_.remove(s.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){s.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(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_DASHBOARDITEM",u.dashboarditem=angular.copy(r),u.dashboard=s,u.newDashboardItem=!1,u.dashboarditem||(u.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"},u.title="TOOLS.NEW_DASHBOARDITEM",u.newDashboardItem=!0),u.addNewDashboardItem=function(){u.errors=[],l.dashboard.addItem({id:t.params.id},u.dashboarditem).$promise.then(function(e){u.dashboard.unshift(e.toJSON()),o.success({title:"DashboardItem properly created",msg:u.dashboarditem.name?u.dashboarditem.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboardItem.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveDashboardItem=function(){u.errors=[],l.dashboardItem.update({id:u.dashboarditem.id},u.dashboarditem).$promise.then(function(e){var t=_.find(u.dashboard,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"DashboardItem properly saved!",msg:u.dashboarditem.name?u.dashboarditem.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboardItem.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteDashboardItem=function(e){u.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(){l.dashboardItem.delete({id:u.dashboarditem.id}).$promise.then(function(){_.remove(u.dashboard,{id:u.dashboarditem.id}),o.success({title:"DashboardItem properly deleted!",msg:(u.dashboarditem.name||"dashboarditem")+" has been deleted!"}),p(u.dashboarditem)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.analyticCustomReport.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){u.customReports=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcustomReports",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.voiceQueue.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){u.voiceQueues=e.rows||[]}).catch(function(e){o.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","toasty","dashboard","dashboarditem","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditDashboardItemDialogController",e)}(),function(){"use strict";function e(e,i,o,s,t,n,a){var r=this;r.closeDialog=function(){e.hide()},r.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:n.instant("TOOLS.ALL_USERS"),labelSelected:n.instant("TOOLS.SELECTED_USERS"),transferCallback:function(e,t){for(var n=0,a=0;n<e.length;n+=1)a=99999+s.id,e[n].permissions=t?_.without(e[n].permissions,a):_.concat(e[n].permissions,a),o.user.update(e[n]).$promise.then(function(){i.success({title:"User properly "+(t?"removed":"added"),msg:"User has been "+(t?"removed":"added")+"!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:dashboard.ADDUSERS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},function(){if(s&&s.id){var t=99999+s.id;o.user.get({fields:"id,fullname,name,internal,permissions",role:"user",nolimit:!0}).$promise.then(function(e){r.dualMultiselectOptions.selectedItems=_.filter(e.rows,function(e){return _.includes(e.permissions,t)}),r.dualMultiselectOptions.items=_.differenceBy(e.rows,r.dualMultiselectOptions.selectedItems,"id")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}}()}e.$inject=["$mdDialog","toasty","api","customDashboard","customDashboards","$translate","Auth"],angular.module("app.tools").controller("CustomDashboarduseraddController",e)}(),function(){"use strict";function e(n,e,a,i,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.customDashboard=d||n.params.customDashboard||{},c.selectedTab=n.params.tab||0,c.useradddialog=function(e,t){a.show({controller:"CustomDashboarduseraddController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/useradd/useradd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{customDashboard:e,customDashboards:c.customDashboards?c.customDashboards.rows:[]}})},c.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:c.customDashboards?c.customDashboards.rows:[]}})},c.gotogoto=function(e,t){n.go("app.dashboards.custom",{id:e.id})},c.alert=r.info,c.gotoCustomDashboards=function(){n.go("app.tools.customDashboards")},c.saveCustomDashboard=function(){s.dashboard.update({id:c.customDashboard.id},c.customDashboard).$promise.then(function(){r.success({title:"CustomDashboard updated!",msg:c.customDashboard.name?c.customDashboard.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","customDashboard"],angular.module("app.tools").controller("CustomDashboardController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_DISPOSITION",u.disposition=angular.copy(r),u.dispositions=s,u.newDisposition=!1,u.disposition||(u.disposition={},u.title="TOOLS.NEW_DISPOSITION",u.newDisposition=!0),u.addNewDisposition=function(){u.errors=[],l.disposition.save(u.disposition).$promise.then(function(e){u.dispositions.unshift(e.toJSON()),o.success({title:"Disposition properly created",msg:u.disposition.name?u.disposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveDisposition=function(){u.errors=[],l.disposition.update({id:u.disposition.id},u.disposition).$promise.then(function(e){var t=_.find(u.dispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Disposition properly saved!",msg:u.disposition.name?u.disposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteDisposition=function(e){u.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(){l.disposition.delete({id:u.disposition.id}).$promise.then(function(){_.remove(u.dispositions,{id:u.disposition.id}),o.success({title:"Disposition properly deleted!",msg:(u.disposition.name||"disposition")+" has been deleted!"}),p(u.disposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","dispositions","disposition","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.dispositions=r||{count:0,rows:[]},v.table="dispositions",v.listOrder="",v.listOrderAsc=null,v.selectedDispositions=[],v.query={fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/dispositions/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{disposition:e,dispositions:v.dispositions.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the disposition?").htmlContent("<b>"+(e.name||"disposition")+"</b> will be deleted.").ariaLabel("delete disposition").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getDispositions=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.disposition.get(v.query,f).$promise},v.createOrEditDisposition=function(e,t){i.show({controller:"CreateOrEditDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/dispositions/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{disposition:t,dispositions:v.dispositions.rows,license:v.license,setting:v.setting}})},v.deleteDisposition=A,v.exportSelectedDispositions=function(){var e=angular.copy(v.selectedDispositions);return v.selectedDispositions=[],e},v.deleteSelectedDispositions=function(e){var t=i.confirm().title("Are you sure want to delete the selected dispositions?").htmlContent("<b>"+v.selectedDispositions.length+" selected</b> will be deleted.").ariaLabel("delete Dispositions").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedDispositions.forEach(function(e){A(e)}),v.selectedDispositions=[]})},v.deselectDispositions=function(){v.selectedDispositions=[]},v.selectAllDispositions=function(){v.selectedDispositions=v.dispositions.rows};var h=!0,b=1;function f(e){v.dispositions=e||{count:0,rows:[]}}function A(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(v.dispositions.rows,{id:e.id}),v.dispositions.count-=1,v.dispositions.rows.length||v.getDispositions(),c.success({title:"Disposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEdisposition"}];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:"SYSTEM:DELETEdisposition",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getDispositions())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","dispositions","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("DispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_INTERVAL",u.interval=angular.copy(r),u.intervals=s,u.newInterval=!1,u.interval||(u.interval={},u.title="TOOLS.NEW_INTERVAL",u.newInterval=!0),u.addNewInterval=function(){u.errors=[],l.interval.save(u.interval).$promise.then(function(e){u.intervals.unshift(e.toJSON()),o.success({title:"Interval properly created",msg:u.interval.name?u.interval.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveInterval=function(){u.errors=[],l.interval.update({id:u.interval.id},u.interval).$promise.then(function(e){var t=_.find(u.intervals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Interval properly saved!",msg:u.interval.name?u.interval.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteInterval=function(e){u.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(){l.interval.delete({id:u.interval.id}).$promise.then(function(){_.remove(u.intervals,{id:u.interval.id}),o.success({title:"Interval properly deleted!",msg:(u.interval.name||"interval")+" has been deleted!"}),p(u.interval)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","intervals","interval","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditIntervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditAppintervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.interval={},c.intervalIntervals={count:0,rows:[]},c.selectedIntervalIntervals=[],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,createdAt",nolimit:"true",limit:10,page:1},c.init=function(e){c.interval=e,c.query.id=c.interval.id,c.getIntervalIntervals()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"EditAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/intervals/edit/apps/interval/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:c.interval,interval:t,intervals:c.intervalIntervals.rows,license:null,setting:null}})},c.exportSelectedIntervalIntervals=function(){var e=angular.copy(c.selectedIntervalIntervals);return c.selectedIntervalIntervals=[],e},c.deleteIntervalInterval=g,c.deleteSelectedIntervalIntervals=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_INTERVAL",u.interval=angular.copy(r),u.intervals=s,u.newInterval=!1,u.interval||(u.interval={},u.title="TOOLS.NEW_INTERVAL",u.newInterval=!0),u.addNewInterval=function(){u.errors=[],l.interval.save(u.interval).$promise.then(function(e){u.intervals.unshift(e.toJSON()),o.success({title:"Interval properly created",msg:u.interval.name?u.interval.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveInterval=function(){u.errors=[],l.interval.update({id:u.interval.id},u.interval).$promise.then(function(e){var t=_.find(u.intervals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Interval properly saved!",msg:u.interval.name?u.interval.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteInterval=function(e){u.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(){l.interval.delete({id:u.interval.id}).$promise.then(function(){_.remove(u.intervals,{id:u.interval.id}),o.success({title:"Interval properly deleted!",msg:(u.interval.name||"interval")+" has been deleted!"}),p(u.interval)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","intervals","interval","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditIntervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.interval=d||e.params.interval||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoIntervals=function(){e.go("app.tools.intervals")},c.saveInterval=function(){s.interval.update({id:c.interval.id},c.interval).$promise.then(function(){r.success({title:"Interval updated!",msg:c.interval.name?c.interval.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","interval"],angular.module("app.tools").controller("IntervalController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.intervals=r||{count:0,rows:[]},v.table="intervals",v.listOrder="",v.listOrderAsc=null,v.selectedIntervals=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",IntervalId:"null",limit:10,page:1},v.editstate=function(e,t){n.go("app.tools.intervals.edit",{id:e.id,interval:e})},v.deleteconfirm=function(e,t){var n=i.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");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getIntervals=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.interval.get(v.query,f).$promise},v.createOrEditInterval=function(e,t){i.show({controller:"CreateOrEditIntervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/intervals/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:t,intervals:v.intervals.rows,license:v.license,setting:v.setting}})},v.deleteInterval=A,v.exportSelectedIntervals=function(){var e=angular.copy(v.selectedIntervals);return v.selectedIntervals=[],e},v.deleteSelectedIntervals=function(e){var t=i.confirm().title("Are you sure want to delete the selected intervals?").htmlContent("<b>"+v.selectedIntervals.length+" selected</b> will be deleted.").ariaLabel("delete Intervals").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedIntervals.forEach(function(e){A(e)}),v.selectedIntervals=[]})},v.deselectIntervals=function(){v.selectedIntervals=[]},v.selectAllIntervals=function(){v.selectedIntervals=v.intervals.rows};var h=!0,b=1;function f(e){v.intervals=e||{count:0,rows:[]}}function A(e){l.interval.delete({id:e.id}).$promise.then(function(){_.remove(v.intervals.rows,{id:e.id}),v.intervals.count-=1,v.intervals.rows.length||v.getIntervals(),c.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){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEinterval"}];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:"SYSTEM:DELETEinterval",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getIntervals())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","intervals","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("IntervalsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_PAUSE",u.pause=angular.copy(r),u.pauses=s,u.newPause=!1,u.pause||(u.pause={},u.title="TOOLS.NEW_PAUSE",u.newPause=!0),u.addNewPause=function(){u.errors=[],l.pause.save(u.pause).$promise.then(function(e){u.pauses.unshift(e.toJSON()),o.success({title:"Pause properly created",msg:u.pause.name?u.pause.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.savePause=function(){u.errors=[],l.pause.update({id:u.pause.id},u.pause).$promise.then(function(e){var t=_.find(u.pauses,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Pause properly saved!",msg:u.pause.name?u.pause.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deletePause=function(e){u.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(){l.pause.delete({id:u.pause.id}).$promise.then(function(){_.remove(u.pauses,{id:u.pause.id}),o.success({title:"Pause properly deleted!",msg:(u.pause.name||"pause")+" has been deleted!"}),p(u.pause)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","pauses","pause","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditPauseDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.pauses=r||{count:0,rows:[]},v.table="pauses",v.listOrder="",v.listOrderAsc=null,v.selectedPauses=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditPauseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/pauses/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{pause:e,pauses:v.pauses.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the pause?").htmlContent("<b>"+(e.name||"pause")+"</b> will be deleted.").ariaLabel("delete pause").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getPauses=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.pause.get(v.query,f).$promise},v.createOrEditPause=function(e,t){i.show({controller:"CreateOrEditPauseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/pauses/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{pause:t,pauses:v.pauses.rows,license:v.license,setting:v.setting}})},v.deletePause=A,v.exportSelectedPauses=function(){var e=angular.copy(v.selectedPauses);return v.selectedPauses=[],e},v.deleteSelectedPauses=function(e){var t=i.confirm().title("Are you sure want to delete the selected pauses?").htmlContent("<b>"+v.selectedPauses.length+" selected</b> will be deleted.").ariaLabel("delete Pauses").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedPauses.forEach(function(e){A(e)}),v.selectedPauses=[]})},v.deselectPauses=function(){v.selectedPauses=[]},v.selectAllPauses=function(){v.selectedPauses=v.pauses.rows};var h=!0,b=1;function f(e){v.pauses=e||{count:0,rows:[]}}function A(e){l.pause.delete({id:e.id}).$promise.then(function(){_.remove(v.pauses.rows,{id:e.id}),v.pauses.count-=1,v.pauses.rows.length||v.getPauses(),c.success({title:"Pause deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEpause"}];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:"SYSTEM:DELETEpause",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getPauses())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","pauses","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("PausesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_SCHEDULE",u.schedule=angular.copy(r),u.schedules=s,u.newSchedule=!1,u.schedule||(u.schedule={type:"custom",output:"xlsx",active:!0,startAt:new Date,endAt:new Date(Date.now()+2592e6),cron:"0 0 * * *",subtractNumber:1,subtractUnit:"days",sendMail:!1,sendIfEmpty:!0},u.title="TOOLS.NEW_SCHEDULE",u.newSchedule=!0),u.addNewSchedule=function(){u.errors=[],l.schedule.save(u.schedule).$promise.then(function(e){u.schedules.unshift(e.toJSON()),o.success({title:"Schedule properly created",msg:u.schedule.name?u.schedule.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSchedule=function(){u.errors=[],l.schedule.update({id:u.schedule.id},u.schedule).$promise.then(function(e){var t=_.find(u.schedules,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Schedule properly saved!",msg:u.schedule.name?u.schedule.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSchedule=function(e){u.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(){l.schedule.delete({id:u.schedule.id}).$promise.then(function(){_.remove(u.schedules,{id:u.schedule.id}),o.success({title:"Schedule properly deleted!",msg:(u.schedule.name||"schedule")+" has been deleted!"}),p(u.schedule)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.analyticCustomReport.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.customReports=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcustomReports",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.analyticDefaultReport.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.defaultReports=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdefaultReports",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.mailAccounts=e.rows||[]}).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","toasty","schedules","schedule","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditScheduleDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.schedules=r||{count:0,rows:[]},v.table="schedules",v.listOrder="",v.listOrderAsc=null,v.selectedScheduler=[],v.query={fields:"createdAt,updatedAt,id,name,type,DefaultReportId,CustomReportId,output,active,startAt,endAt,cron,subtractNumber,subtractUnit,sendMail,MailAccountId,email,cc,bcc,sendIfEmpty,description",sort:"-updatedAt",limit:10,page:1},v.arraytype=_.keyBy([{option:"Default",value:"'default'"},{option:"Custom",value:"'custom'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayoutput=_.keyBy([{option:"CSV",value:"'csv'"},{option:"PDF",value:"'pdf'"},{option:"Excel",value:"'xlsx'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.editdialog=function(e,t){i.show({controller:"CreateOrEditScheduleDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/schedules/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{schedule:e,schedules:v.schedules.rows,license:v.license,setting:null}})},v.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 l.schedule.run({id:e.id}).$promise},function(){console.log("CANCEL")})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the schedule?").htmlContent("<b>"+(e.name||"schedule")+"</b> will be deleted.").ariaLabel("delete schedule").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getScheduler=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.schedule.get(v.query,f).$promise},v.createOrEditSchedule=function(e,t){i.show({controller:"CreateOrEditScheduleDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/schedules/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{schedule:t,schedules:v.schedules.rows,license:v.license,setting:v.setting}})},v.deleteSchedule=A,v.exportSelectedScheduler=function(){var e=angular.copy(v.selectedScheduler);return v.selectedScheduler=[],e},v.deleteSelectedScheduler=function(e){var t=i.confirm().title("Are you sure want to delete the selected schedules?").htmlContent("<b>"+v.selectedScheduler.length+" selected</b> will be deleted.").ariaLabel("delete Schedules").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedScheduler.forEach(function(e){A(e)}),v.selectedScheduler=[]})},v.deselectScheduler=function(){v.selectedScheduler=[]},v.selectAllScheduler=function(){v.selectedScheduler=v.schedules.rows},l.analyticCustomReport.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.customReports=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcustomReports",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.analyticDefaultReport.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.defaultReports=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdefaultReports",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.mailAccounts=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.schedules=e||{count:0,rows:[]}}function A(e){l.schedule.delete({id:e.id}).$promise.then(function(){_.remove(v.schedules.rows,{id:e.id}),v.schedules.count-=1,v.schedules.rows.length||v.getScheduler(),c.success({title:"Schedule deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEschedule"}];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:"SYSTEM:DELETEschedule",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getScheduler())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","schedules","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("SchedulesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_SOUND",u.sound=angular.copy(r),u.sounds=s,u.newSound=!1,u.sound||(u.sound={},u.title="TOOLS.NEW_SOUND",u.newSound=!0),u.addNewSound=function(){u.errors=[],l.sound.save(u.sound).$promise.then(function(e){u.sounds.unshift(e.toJSON()),o.success({title:"Sound properly created",msg:u.sound.name?u.sound.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSound=function(){u.errors=[],l.sound.update({id:u.sound.id},u.sound).$promise.then(function(e){var t=_.find(u.sounds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Sound properly saved!",msg:u.sound.name?u.sound.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSound=function(e){u.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(){l.sound.delete({id:u.sound.id}).$promise.then(function(){_.remove(u.sounds,{id:u.sound.id}),o.success({title:"Sound properly deleted!",msg:(u.sound.name||"sound")+" has been deleted!"}),p(u.sound)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","sounds","sound","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.sounds=r||{count:0,rows:[]},v.table="sounds",v.listOrder="",v.listOrderAsc=null,v.selectedSounds=[],v.query={fields:"createdAt,updatedAt,id,save_name,converted_format,name,audio,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{sound:e,sounds:v.sounds.rows,license:v.license,setting:null}})},v.downloadfile2=function(o,e){return l.sound.download({id:o.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=o.converted_format?o.save_name+"."+o.converted_format:o.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++)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.sound.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the sound?").htmlContent("<b>"+(e.name||"sound")+"</b> will be deleted.").ariaLabel("delete sound").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getSounds=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.sound.get(v.query,f).$promise},v.createOrEditSound=function(e,t){i.show({controller:"CreateOrEditSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{sound:t,sounds:v.sounds.rows,license:v.license,setting:v.setting}})},v.deleteSound=A,v.exportSelectedSounds=function(){var e=angular.copy(v.selectedSounds);return v.selectedSounds=[],e},v.deleteSelectedSounds=function(e){var t=i.confirm().title("Are you sure want to delete the selected sounds?").htmlContent("<b>"+v.selectedSounds.length+" selected</b> will be deleted.").ariaLabel("delete Sounds").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSounds.forEach(function(e){A(e)}),v.selectedSounds=[]})},v.deselectSounds=function(){v.selectedSounds=[]},v.selectAllSounds=function(){v.selectedSounds=v.sounds.rows},v.uploadSound=function(e){i.show({controller:"UploadSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/upload/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{sounds:v.sounds.rows}})};var h=!0,b=1;function f(e){v.sounds=e||{count:0,rows:[]}}function A(e){l.sound.delete({id:e.id}).$promise.then(function(){_.remove(v.sounds.rows,{id:e.id}),v.sounds.count-=1,v.sounds.rows.length||v.getSounds(),c.success({title:"Sound deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsound"}];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:"SYSTEM:DELETEsound",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSounds())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","sounds","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("SoundsController",e)}(),function(){"use strict";function e(e,t,n,a,i){var o=this;o.errors=[],o.title="TOOLS.UPLOAD_SOUND",o.sounds=a,o.uploadSounds=[],o.uploadState="none",o.sound={},o.ngFlowOptions={maxChunkRetries:1,chunkSize:15728640,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,target:"api/sounds",allowDuplicateUploads:!0},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 only: "+t.join()}),!1;if(15728640<e.size)return n.error({title:"File too big",msg:"The max allowed size is 15 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.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"],angular.module("app.tools").controller("UploadSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_TAG",u.tag=angular.copy(r),u.tags=s,u.newTag=!1,u.tag||(u.tag={},u.title="TOOLS.NEW_TAG",u.newTag=!0),u.addNewTag=function(){u.errors=[],l.tag.save(u.tag).$promise.then(function(e){u.tags.unshift(e.toJSON()),o.success({title:"Tag properly created",msg:u.tag.name?u.tag.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTag=function(){u.errors=[],l.tag.update({id:u.tag.id},u.tag).$promise.then(function(e){var t=_.find(u.tags,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Tag properly saved!",msg:u.tag.name?u.tag.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTag=function(e){u.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(){l.tag.delete({id:u.tag.id}).$promise.then(function(){_.remove(u.tags,{id:u.tag.id}),o.success({title:"Tag properly deleted!",msg:(u.tag.name||"tag")+" has been deleted!"}),p(u.tag)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","tags","tag","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditTagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.tags=r||{count:0,rows:[]},v.table="tags",v.listOrder="",v.listOrderAsc=null,v.selectedTags=[],v.query={fields:"createdAt,updatedAt,id,name,description,color",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditTagDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/tags/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{tag:e,tags:v.tags.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the tag?").htmlContent("<b>"+(e.name||"tag")+"</b> will be deleted.").ariaLabel("delete tag").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTags=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.tag.get(v.query,f).$promise},v.createOrEditTag=function(e,t){i.show({controller:"CreateOrEditTagDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/tags/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{tag:t,tags:v.tags.rows,license:v.license,setting:v.setting}})},v.deleteTag=A,v.exportSelectedTags=function(){var e=angular.copy(v.selectedTags);return v.selectedTags=[],e},v.deleteSelectedTags=function(e){var t=i.confirm().title("Are you sure want to delete the selected tags?").htmlContent("<b>"+v.selectedTags.length+" selected</b> will be deleted.").ariaLabel("delete Tags").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTags.forEach(function(e){A(e)}),v.selectedTags=[]})},v.deselectTags=function(){v.selectedTags=[]},v.selectAllTags=function(){v.selectedTags=v.tags.rows};var h=!0,b=1;function f(e){v.tags=e||{count:0,rows:[]}}function A(e){l.tag.delete({id:e.id}).$promise.then(function(){_.remove(v.tags.rows,{id:e.id}),v.tags.count-=1,v.tags.rows.length||v.getTags(),c.success({title:"Tag deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtag"}];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:"SYSTEM:DELETEtag",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTags())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","tags","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TagsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_TEMPLATE",u.template=angular.copy(r),u.templates=s,u.newTemplate=!1,u.template||(u.template={},u.title="TOOLS.NEW_TEMPLATE",u.newTemplate=!0),u.addNewTemplate=function(){u.errors=[],l.template.save(u.template).$promise.then(function(e){u.templates.unshift(e.toJSON()),o.success({title:"Template properly created",msg:u.template.name?u.template.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTemplate=function(){u.errors=[],l.template.update({id:u.template.id},u.template).$promise.then(function(e){var t=_.find(u.templates,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Template properly saved!",msg:u.template.name?u.template.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTemplate=function(e){u.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(){l.template.delete({id:u.template.id}).$promise.then(function(){_.remove(u.templates,{id:u.template.id}),o.success({title:"Template properly deleted!",msg:(u.template.name||"template")+" has been deleted!"}),p(u.template)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","templates","template","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditTemplateDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.templates=r||{count:0,rows:[]},v.table="templates",v.listOrder="",v.listOrderAsc=null,v.selectedTemplates=[],v.query={fields:"createdAt,updatedAt,id,name,html,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditTemplateDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/templates/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{template:e,templates:v.templates.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the template?").htmlContent("<b>"+(e.name||"template")+"</b> will be deleted.").ariaLabel("delete template").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTemplates=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.template.get(v.query,f).$promise},v.createOrEditTemplate=function(e,t){i.show({controller:"CreateOrEditTemplateDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/templates/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{template:t,templates:v.templates.rows,license:v.license,setting:v.setting}})},v.deleteTemplate=A,v.exportSelectedTemplates=function(){var e=angular.copy(v.selectedTemplates);return v.selectedTemplates=[],e},v.deleteSelectedTemplates=function(e){var t=i.confirm().title("Are you sure want to delete the selected templates?").htmlContent("<b>"+v.selectedTemplates.length+" selected</b> will be deleted.").ariaLabel("delete Templates").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTemplates.forEach(function(e){A(e)}),v.selectedTemplates=[]})},v.deselectTemplates=function(){v.selectedTemplates=[]},v.selectAllTemplates=function(){v.selectedTemplates=v.templates.rows};var h=!0,b=1;function f(e){v.templates=e||{count:0,rows:[]}}function A(e){l.template.delete({id:e.id}).$promise.then(function(){_.remove(v.templates.rows,{id:e.id}),v.templates.count-=1,v.templates.rows.length||v.getTemplates(),c.success({title:"Template deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtemplate"}];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:"SYSTEM:DELETEtemplate",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTemplates())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","templates","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TemplatesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_TRIGGER",u.trigger=angular.copy(r),u.triggers=s,u.newTrigger=!1,u.trigger||(u.trigger={channel:"voice"},u.title="TOOLS.NEW_TRIGGER",u.newTrigger=!0),u.addNewTrigger=function(){u.errors=[],l.trigger.save(u.trigger).$promise.then(function(e){u.triggers.unshift(e.toJSON()),o.success({title:"Trigger properly created",msg:u.trigger.name?u.trigger.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTrigger=function(){u.errors=[],l.trigger.update({id:u.trigger.id},u.trigger).$promise.then(function(e){var t=_.find(u.triggers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Trigger properly saved!",msg:u.trigger.name?u.trigger.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTrigger=function(e){u.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(){l.trigger.delete({id:u.trigger.id}).$promise.then(function(){_.remove(u.triggers,{id:u.trigger.id}),o.success({title:"Trigger properly deleted!",msg:(u.trigger.name||"trigger")+" has been deleted!"}),p(u.trigger)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","triggers","trigger","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditTriggerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerActions={count:0,rows:[]},c.selectedTriggerActions=[],c.query={fields:"createdAt,updatedAt,id,action,data1,data1,data1,data2,data1,data2,data2,data7,data1,data2,data2,data2,data2,data2,data2,data2,data3,data3,data3,data3,data3,data3,data3,data1,data2,data2,data3,data2,data2,data2,data3,data4,data5,data6,createdAt",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'"},{option:"MOTION_BAR",value:"'motionbar'"},{option:"JSCRIPTY",value:"'jscripty'"},{option:"URL_FORWARD",value:"'urlForward'"},{option:"BROWSER",value:"'browser'"}],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'"},{option:"Salesforce",value:"'salesforce'"},{option:"SugarCRM",value:"'sugarcrm'"},{option:"Freshdesk",value:"'freshdesk'"},{option:"Desk",value:"'desk'"},{option:"Zoho",value:"'zoho'"},{option:"vTiger",value:"'vtiger'"}],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){c.trigger=e,c.query.id=c.trigger.id,c.query.ActionId=c.trigger.id,c.getTriggerActions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditActionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/edit/actions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:c.trigger,action:t,actions:c.triggerActions.rows,license:null,setting:null}})},c.exportSelectedTriggerActions=function(){var e=angular.copy(c.selectedTriggerActions);return c.selectedTriggerActions=[],e},c.deleteTriggerAction=g,c.deleteSelectedTriggerActions=function(e){var t=o.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");o.show(t).then(function(){c.selectedTriggerActions.forEach(function(e){g(e)}),c.selectedTriggerActions=[]})},l.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",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=_.keyBy(e.rows||[],"id")}).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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzendeskAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdeskAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzohoAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsalesforceAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsugarcrmAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfreshdeskAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvtigerAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzendeskConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdeskConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzohoConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsalesforceConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsugarcrmConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfreshdeskConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvtigerConfigurations",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=_.keyBy(e.rows||[],"id")}).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,o,s,r,l,d,c,m,u){var p=this;function g(e){a.hide(e)}p.errors=[],p.setting=u,p.license=m,p.passwordPattern=p.setting&&p.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",p.title="TOOLS.EDIT_ACTION",p.action=angular.copy(r),p.actions=s,p.newAction=!1,p.trigger=angular.copy(l),p.action||(p.action={data3:"0",data4:"0",data5:"800",data6:"600"},p.title="TOOLS.NEW_ACTION",p.newAction=!0),t.params.id&&(p.action.ActionId=t.params.id),p.addNewAction=function(){p.errors=[],d.trigger.addAction({id:t.params.id},p.action).$promise.then(function(e){p.actions.unshift(e.toJSON()),o.success({title:"Action properly created",msg:p.action.name?p.action.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.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()})})},p.saveAction=function(){p.errors=[],d.action.update({id:p.action.id},p.action).$promise.then(function(e){var t=_.find(p.actions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Action properly saved!",msg:p.action.name?p.action.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.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()})})},p.deleteAction=function(e){p.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(){d.action.delete({id:p.action.id}).$promise.then(function(){_.remove(p.actions,{id:p.action.id}),o.success({title:"Action properly deleted!",msg:(p.action.name||"action")+" has been deleted!"}),g(p.action)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.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(){})},p.getDateFromString=function(e){return new Date(e)},p.closeDialog=g,d.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){p.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.jscriptyProject.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){p.projects=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intZendeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.zendeskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzendeskAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intDeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.deskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdeskAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intZohoAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.zohoAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzohoAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intSalesforceAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.salesforceAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsalesforceAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intSugarcrmAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.sugarcrmAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsugarcrmAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intFreshdeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.freshdeskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfreshdeskAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intVtigerAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.vtigerAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvtigerAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intZendeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.zendeskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzendeskConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intDeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.deskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdeskConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intZohoConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.zohoConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzohoConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intSalesforceConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.salesforceConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsalesforceConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intSugarcrmConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.sugarcrmConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsugarcrmConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intFreshdeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.freshdeskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfreshdeskConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intVtigerConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.vtigerConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvtigerConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.template.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.templates=e.rows||[]}).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","toasty","actions","action","trigger","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditActionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerAllConditions={count:0,rows:[]},c.selectedTriggerAllConditions=[],c.query={fields:"createdAt,updatedAt,id,field,operator,value,value,value,value,value,value,value,value,value,value,value,createdAt",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){c.trigger=e,c.query.id=c.trigger.id,c.query.TriggerAllId=c.trigger.id,c.getTriggerAllConditions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getTriggerAllConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAllConditions(c.query,p).$promise},c.createOrEditTriggerAllCondition=function(e,t){o.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}})},c.exportSelectedTriggerAllConditions=function(){var e=angular.copy(c.selectedTriggerAllConditions);return c.selectedTriggerAllConditions=[],e},c.deleteTriggerAllCondition=g,c.deleteSelectedTriggerAllConditions=function(e){var t=o.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");o.show(t).then(function(){c.selectedTriggerAllConditions.forEach(function(e){g(e)}),c.selectedTriggerAllConditions=[]})},l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){c.queues=_.keyBy(e.rows||[],"name")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",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=_.keyBy(e.rows||[],"id")}).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 m=!0,u=1;function p(e){c.triggerAllConditions=e||{count:0,rows:[]}}function g(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){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),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,i,o,s,r,l,d,c,m,u){var p=this;function g(e){a.hide(e)}p.errors=[],p.setting=u,p.license=m,p.passwordPattern=p.setting&&p.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",p.title="TOOLS.EDIT_ALLCONDITION",p.allCondition=angular.copy(r),p.allconditions=s,p.newAllCondition=!1,p.trigger=angular.copy(l),p.allCondition||(p.allCondition={field:"queue",operator:"equals",value:"abandoned",value:"opened",value:"in"},p.title="TOOLS.NEW_ALLCONDITION",p.newAllCondition=!0),t.params.id&&(p.allCondition.TriggerAllId=t.params.id),p.addNewAllCondition=function(){p.errors=[],d.trigger.addAllCondition({id:t.params.id},p.allCondition).$promise.then(function(e){p.allconditions.unshift(e.toJSON()),o.success({title:"AllCondition properly created",msg:p.allCondition.name?p.allCondition.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.condition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.saveAllCondition=function(){p.errors=[],d.condition.update({id:p.allCondition.id},p.allCondition).$promise.then(function(e){var t=_.find(p.allconditions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"AllCondition properly saved!",msg:p.allCondition.name?p.allCondition.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.condition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.deleteAllCondition=function(e){p.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(){d.condition.delete({id:p.allCondition.id}).$promise.then(function(){_.remove(p.allconditions,{id:p.allCondition.id}),o.success({title:"AllCondition properly deleted!",msg:(p.allCondition.name||"allCondition")+" has been deleted!"}),g(p.allCondition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.condition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.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(){})},p.getDateFromString=function(e){return new Date(e)},p.closeDialog=g,d.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.chatAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.mailAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.smsAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.faxAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.openchannelAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){p.queues=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",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){p.outboundRoutes=e.rows||[]}).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","toasty","allconditions","allCondition","trigger","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditAllConditionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerAnyConditions={count:0,rows:[]},c.selectedTriggerAnyConditions=[],c.query={fields:"createdAt,updatedAt,id,field,operator,value,value,value,value,value,value,value,value,value,value,value,createdAt",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){c.trigger=e,c.query.id=c.trigger.id,c.query.TriggerAnyId=c.trigger.id,c.getTriggerAnyConditions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getTriggerAnyConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAnyConditions(c.query,p).$promise},c.createOrEditTriggerAnyCondition=function(e,t){o.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}})},c.exportSelectedTriggerAnyConditions=function(){var e=angular.copy(c.selectedTriggerAnyConditions);return c.selectedTriggerAnyConditions=[],e},c.deleteTriggerAnyCondition=g,c.deleteSelectedTriggerAnyConditions=function(e){var t=o.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");o.show(t).then(function(){c.selectedTriggerAnyConditions.forEach(function(e){g(e)}),c.selectedTriggerAnyConditions=[]})},l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){c.queues=_.keyBy(e.rows||[],"name")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",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=_.keyBy(e.rows||[],"id")}).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 m=!0,u=1;function p(e){c.triggerAnyConditions=e||{count:0,rows:[]}}function g(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){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),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,i,o,s,r,l,d,c,m,u){var p=this;function g(e){a.hide(e)}p.errors=[],p.setting=u,p.license=m,p.passwordPattern=p.setting&&p.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",p.title="TOOLS.EDIT_ANYCONDITION",p.anyCondition=angular.copy(r),p.anyconditions=s,p.newAnyCondition=!1,p.trigger=angular.copy(l),p.anyCondition||(p.anyCondition={field:"queue",operator:"equals",value:"abandoned",value:"opened",value:"in"},p.title="TOOLS.NEW_ANYCONDITION",p.newAnyCondition=!0),t.params.id&&(p.anyCondition.TriggerAnyId=t.params.id),p.addNewAnyCondition=function(){p.errors=[],d.trigger.addAnyCondition({id:t.params.id},p.anyCondition).$promise.then(function(e){p.anyconditions.unshift(e.toJSON()),o.success({title:"AnyCondition properly created",msg:p.anyCondition.name?p.anyCondition.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.condition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.saveAnyCondition=function(){p.errors=[],d.condition.update({id:p.anyCondition.id},p.anyCondition).$promise.then(function(e){var t=_.find(p.anyconditions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"AnyCondition properly saved!",msg:p.anyCondition.name?p.anyCondition.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.condition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.deleteAnyCondition=function(e){p.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(){d.condition.delete({id:p.anyCondition.id}).$promise.then(function(){_.remove(p.anyconditions,{id:p.anyCondition.id}),o.success({title:"AnyCondition properly deleted!",msg:(p.anyCondition.name||"anyCondition")+" has been deleted!"}),g(p.anyCondition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.condition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.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(){})},p.getDateFromString=function(e){return new Date(e)},p.closeDialog=g,d.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.chatAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.mailAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.smsAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.faxAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.openchannelAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){p.queues=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",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){p.outboundRoutes=e.rows||[]}).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","toasty","anyconditions","anyCondition","trigger","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditAnyConditionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.trigger=d||e.params.trigger||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoTriggers=function(){e.go("app.tools.triggers")},c.saveTrigger=function(){s.trigger.update({id:c.trigger.id},c.trigger).$promise.then(function(){r.success({title:"Trigger updated!",msg:c.trigger.name?c.trigger.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","trigger"],angular.module("app.tools").controller("TriggerController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.triggers=r||{count:0,rows:[]},v.table="triggers",v.listOrder="",v.listOrderAsc=null,v.selectedTriggers=[],v.query={fields:"createdAt,updatedAt,id,name,channel,status,description",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v.editstate=function(e,t){n.go("app.tools.triggers.edit",{id:e.id,trigger:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the trigger?").htmlContent("<b>"+(e.name||"trigger")+"</b> will be deleted.").ariaLabel("delete trigger").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTriggers=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.trigger.get(v.query,f).$promise},v.createOrEditTrigger=function(e,t){i.show({controller:"CreateOrEditTriggerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:t,triggers:v.triggers.rows,license:v.license,setting:v.setting}})},v.deleteTrigger=A,v.exportSelectedTriggers=function(){var e=angular.copy(v.selectedTriggers);return v.selectedTriggers=[],e},v.deleteSelectedTriggers=function(e){var t=i.confirm().title("Are you sure want to delete the selected triggers?").htmlContent("<b>"+v.selectedTriggers.length+" selected</b> will be deleted.").ariaLabel("delete Triggers").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTriggers.forEach(function(e){A(e)}),v.selectedTriggers=[]})},v.deselectTriggers=function(){v.selectedTriggers=[]},v.selectAllTriggers=function(){v.selectedTriggers=v.triggers.rows};var h=!0,b=1;function f(e){v.triggers=e||{count:0,rows:[]}}function A(e){l.trigger.delete({id:e.id}).$promise.then(function(){_.remove(v.triggers.rows,{id:e.id}),v.triggers.count-=1,v.triggers.rows.length||v.getTriggers(),c.success({title:"Trigger deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtrigger"}];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:"SYSTEM:DELETEtrigger",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTriggers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","triggers","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TriggersController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_TRUNK",u.trunk=angular.copy(r),u.trunks=s,u.newTrunk=!1,u.trunk||(u.trunk={active:!0,type:"friend",dtmfmode:"rfc2833",qualify:"yes",t38pt_udptl:"no"},u.title="TOOLS.NEW_TRUNK",u.newTrunk=!0),u.addNewTrunk=function(){u.errors=[],l.trunk.save(u.trunk).$promise.then(function(e){u.trunks.unshift(e.toJSON()),o.success({title:"Trunk properly created",msg:u.trunk.name?u.trunk.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTrunk=function(){u.errors=[],l.trunk.update({id:u.trunk.id},u.trunk).$promise.then(function(e){var t=_.find(u.trunks,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Trunk properly saved!",msg:u.trunk.name?u.trunk.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTrunk=function(e){u.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(){l.trunk.delete({id:u.trunk.id}).$promise.then(function(){_.remove(u.trunks,{id:u.trunk.id}),o.success({title:"Trunk properly deleted!",msg:(u.trunk.name||"trunk")+" has been deleted!"}),p(u.trunk)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","trunks","trunk","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditTrunkDialogController",e)}(),function(){"use strict";function e(t,n,a,e,i,o,s){var r=this;function l(e){t.hide(e)}r.newTrunk=!0,r.trunk=angular.copy(i),r.trunks=o,r.title=s.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,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.trunk=d||n.params.trunk||{},c.selectedTab=n.params.tab||0,c.gotogoto=function(e,t){n.go("app.voice.realtime.trunks",{})},c.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:c.trunks?c.trunks.rows:[]}})},c.alert=r.info,c.gotoTrunks=function(){n.go("app.tools.trunks")},c.saveTrunk=function(){s.trunk.update({id:c.trunk.id},c.trunk).$promise.then(function(){r.success({title:"Trunk updated!",msg:c.trunk.name?c.trunk.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunk",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","trunk"],angular.module("app.tools").controller("TrunkController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.trunks=r||{count:0,rows:[]},v.table="trunks",v.listOrder="",v.listOrderAsc=null,v.selectedTrunks=[],v.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,otherFields",sort:"-updatedAt",limit:10,page:1},v.arraytype=_.keyBy([{option:"Friend",value:"'friend'"},{option:"User",value:"'user'"},{option:"Peer",value:"'peer'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.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"),"")}),v.arrayqualify=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayinsecure=_.keyBy([{option:"port",value:"'port'"},{option:"invite",value:"'invite'"},{option:"very",value:"'very'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arraycallcounter=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayusereqphone=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraytrustrpid=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysendrpid=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"pai",value:"'pai'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayencryption=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.editstate=function(e,t){n.go("app.tools.trunks.edit",{id:e.id,trunk:e})},v.clonedialog=function(e,t){i.show({controller:"TrunkcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/trunks/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{trunk:e,trunks:v.trunks?v.trunks.rows:[]}})},v.gotorealtimegoto=function(e,t){n.go("app.voice.realtime.trunks",{})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the trunk?").htmlContent("<b>"+(e.name||"trunk")+"</b> will be deleted.").ariaLabel("delete trunk").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTrunks=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.trunk.get(v.query,f).$promise},v.createOrEditTrunk=function(e,t){i.show({controller:"CreateOrEditTrunkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/trunks/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{trunk:t,trunks:v.trunks.rows,license:v.license,setting:v.setting}})},v.deleteTrunk=A,v.exportSelectedTrunks=function(){var e=angular.copy(v.selectedTrunks);return v.selectedTrunks=[],e},v.deleteSelectedTrunks=function(e){var t=i.confirm().title("Are you sure want to delete the selected trunks?").htmlContent("<b>"+v.selectedTrunks.length+" selected</b> will be deleted.").ariaLabel("delete Trunks").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTrunks.forEach(function(e){A(e)}),v.selectedTrunks=[]})},v.deselectTrunks=function(){v.selectedTrunks=[]},v.selectAllTrunks=function(){v.selectedTrunks=v.trunks.rows};var h=!0,b=1;function f(e){v.trunks=e||{count:0,rows:[]}}function A(e){l.trunk.delete({id:e.id}).$promise.then(function(){_.remove(v.trunks.rows,{id:e.id}),v.trunks.count-=1,v.trunks.rows.length||v.getTrunks(),c.success({title:"Trunk deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtrunk"}];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:"SYSTEM:DELETEtrunk",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTrunks())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","trunks","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TrunksController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_VARIABLE",u.variable=angular.copy(r),u.variables=s,u.newVariable=!1,u.variable||(u.variable={},u.title="TOOLS.NEW_VARIABLE",u.newVariable=!0),u.addNewVariable=function(){u.errors=[],l.variable.save(u.variable).$promise.then(function(e){u.variables.unshift(e.toJSON()),o.success({title:"Variable properly created",msg:u.variable.name?u.variable.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVariable=function(){u.errors=[],l.variable.update({id:u.variable.id},u.variable).$promise.then(function(e){var t=_.find(u.variables,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Variable properly saved!",msg:u.variable.name?u.variable.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVariable=function(e){u.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(){l.variable.delete({id:u.variable.id}).$promise.then(function(){_.remove(u.variables,{id:u.variable.id}),o.success({title:"Variable properly deleted!",msg:(u.variable.name||"variable")+" has been deleted!"}),p(u.variable)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","variables","variable","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditVariableDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.variables=r||{count:0,rows:[]},v.table="variables",v.listOrder="",v.listOrderAsc=null,v.selectedVariables=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditVariableDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/variables/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{variable:e,variables:v.variables.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the variable?").htmlContent("<b>"+(e.name||"variable")+"</b> will be deleted.").ariaLabel("delete variable").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getVariables=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.variable.get(v.query,f).$promise},v.createOrEditVariable=function(e,t){i.show({controller:"CreateOrEditVariableDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/variables/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{variable:t,variables:v.variables.rows,license:v.license,setting:v.setting}})},v.deleteVariable=A,v.exportSelectedVariables=function(){var e=angular.copy(v.selectedVariables);return v.selectedVariables=[],e},v.deleteSelectedVariables=function(e){var t=i.confirm().title("Are you sure want to delete the selected variables?").htmlContent("<b>"+v.selectedVariables.length+" selected</b> will be deleted.").ariaLabel("delete Variables").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVariables.forEach(function(e){A(e)}),v.selectedVariables=[]})},v.deselectVariables=function(){v.selectedVariables=[]},v.selectAllVariables=function(){v.selectedVariables=v.variables.rows};var h=!0,b=1;function f(e){v.variables=e||{count:0,rows:[]}}function A(e){l.variable.delete({id:e.id}).$promise.then(function(){_.remove(v.variables.rows,{id:e.id}),v.variables.count-=1,v.variables.rows.length||v.getVariables(),c.success({title:"Variable deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvariable"}];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:"SYSTEM:DELETEvariable",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVariables())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","variables","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("VariablesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.chanSpies=r||{count:0,rows:[]},v.table="chanSpies",v.listOrder="",v.listOrderAsc=null,v.selectedChanSpies=[],v.query={fields:"createdAt,updatedAt,id,name,prefix,options,auth,password,record,recordingFormat,description",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v.arrayrecordingFormat=_.keyBy([{option:"wav",value:"'wav'"},{option:"gsm",value:"'gsm'"},{option:"wav49",value:"'WAV'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editdialog=function(e,t){i.show({controller:"CreateOrEditchanSpyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/chanSpies/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{chanSpy:e,chanSpies:v.chanSpies.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the chanSpy?").htmlContent("<b>"+(e.name||"chanSpy")+"</b> will be deleted.").ariaLabel("delete chanSpy").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getChanSpies=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceChanSpy.get(v.query,f).$promise},v.createOrEditchanSpy=function(e,t){i.show({controller:"CreateOrEditchanSpyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/chanSpies/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chanSpy:t,chanSpies:v.chanSpies.rows,license:v.license,setting:v.setting}})},v.deletechanSpy=A,v.exportSelectedChanSpies=function(){var e=angular.copy(v.selectedChanSpies);return v.selectedChanSpies=[],e},v.deleteSelectedChanSpies=function(e){var t=i.confirm().title("Are you sure want to delete the selected chanSpies?").htmlContent("<b>"+v.selectedChanSpies.length+" selected</b> will be deleted.").ariaLabel("delete chanSpys").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedChanSpies.forEach(function(e){A(e)}),v.selectedChanSpies=[]})},v.deselectChanSpies=function(){v.selectedChanSpies=[]},v.selectAllChanSpies=function(){v.selectedChanSpies=v.chanSpies.rows};var h=!0,b=1;function f(e){v.chanSpies=e||{count:0,rows:[]}}function A(e){l.voiceChanSpy.delete({id:e.id}).$promise.then(function(){_.remove(v.chanSpies.rows,{id:e.id}),v.chanSpies.count-=1,v.chanSpies.rows.length||v.getChanSpies(),c.success({title:"chanSpy deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceChanSpy"}];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:"SYSTEM:DELETEvoiceChanSpy",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getChanSpies())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","chanSpies","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("ChanSpiesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_CHANSPY",u.chanSpy=angular.copy(r),u.chanSpies=s,u.newchanSpy=!1,u.chanSpy||(u.chanSpy={recordingFormat:"wav"},u.title="VOICE.NEW_CHANSPY",u.newchanSpy=!0),u.addNewchanSpy=function(){u.errors=[],l.voiceChanSpy.save(u.chanSpy).$promise.then(function(e){u.chanSpies.unshift(e.toJSON()),o.success({title:"chanSpy properly created",msg:u.chanSpy.name?u.chanSpy.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.savechanSpy=function(){u.errors=[],l.voiceChanSpy.update({id:u.chanSpy.id},u.chanSpy).$promise.then(function(e){var t=_.find(u.chanSpies,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"chanSpy properly saved!",msg:u.chanSpy.name?u.chanSpy.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deletechanSpy=function(e){u.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(){l.voiceChanSpy.delete({id:u.chanSpy.id}).$promise.then(function(){_.remove(u.chanSpies,{id:u.chanSpy.id}),o.success({title:"chanSpy properly deleted!",msg:(u.chanSpy.name||"chanSpy")+" has been deleted!"}),p(u.chanSpy)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","chanSpies","chanSpy","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditchanSpyDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.contexts=r||{count:0,rows:[]},v.table="contexts",v.listOrder="",v.listOrderAsc=null,v.selectedContexts=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",defaultEntry:"false",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditContextDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/contexts/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{context:e,contexts:v.contexts.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the context?").htmlContent("<b>"+(e.name||"context")+"</b> will be deleted.").ariaLabel("delete context").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getContexts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceContext.get(v.query,f).$promise},v.createOrEditContext=function(e,t){i.show({controller:"CreateOrEditContextDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/contexts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{context:t,contexts:v.contexts.rows,license:v.license,setting:v.setting}})},v.deleteContext=A,v.exportSelectedContexts=function(){var e=angular.copy(v.selectedContexts);return v.selectedContexts=[],e},v.deleteSelectedContexts=function(e){var t=i.confirm().title("Are you sure want to delete the selected contexts?").htmlContent("<b>"+v.selectedContexts.length+" selected</b> will be deleted.").ariaLabel("delete Contexts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedContexts.forEach(function(e){A(e)}),v.selectedContexts=[]})},v.deselectContexts=function(){v.selectedContexts=[]},v.selectAllContexts=function(){v.selectedContexts=v.contexts.rows};var h=!0,b=1;function f(e){v.contexts=e||{count:0,rows:[]}}function A(e){l.voiceContext.delete({id:e.id}).$promise.then(function(){_.remove(v.contexts.rows,{id:e.id}),v.contexts.count-=1,v.contexts.rows.length||v.getContexts(),c.success({title:"Context deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceContext"}];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:"SYSTEM:DELETEvoiceContext",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getContexts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","contexts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("ContextsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_CONTEXT",u.context=angular.copy(r),u.contexts=s,u.newContext=!1,u.context||(u.context={},u.title="VOICE.NEW_CONTEXT",u.newContext=!0),u.addNewContext=function(){u.errors=[],l.voiceContext.save(u.context).$promise.then(function(e){u.contexts.unshift(e.toJSON()),o.success({title:"Context properly created",msg:u.context.name?u.context.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveContext=function(){u.errors=[],l.voiceContext.update({id:u.context.id},u.context).$promise.then(function(e){var t=_.find(u.contexts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Context properly saved!",msg:u.context.name?u.context.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteContext=function(e){u.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(){l.voiceContext.delete({id:u.context.id}).$promise.then(function(){_.remove(u.contexts,{id:u.context.id}),o.success({title:"Context properly deleted!",msg:(u.context.name||"context")+" has been deleted!"}),p(u.context)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","contexts","context","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditContextDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_INBOUNDROUTE",u.inboundroute=angular.copy(r),u.inboundroutes=s,u.newInboundRoute=!1,u.inboundroute||(u.inboundroute={appdata:"Inbound Call",type:"inbound",context:"from-voip-provider"},u.title="VOICE.NEW_INBOUNDROUTE",u.newInboundRoute=!0),u.addNewInboundRoute=function(){u.errors=[],l.voiceExtension.save(u.inboundroute).$promise.then(function(e){u.inboundroutes.unshift(e.toJSON()),o.success({title:"InboundRoute properly created",msg:u.inboundroute.name?u.inboundroute.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveInboundRoute=function(){u.errors=[],l.voiceExtension.update({id:u.inboundroute.id},u.inboundroute).$promise.then(function(e){var t=_.find(u.inboundroutes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"InboundRoute properly saved!",msg:u.inboundroute.name?u.inboundroute.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteInboundRoute=function(e){u.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(){l.voiceExtension.delete({id:u.inboundroute.id}).$promise.then(function(){_.remove(u.inboundroutes,{id:u.inboundroute.id}),o.success({title:"InboundRoute properly deleted!",msg:(u.inboundroute.name||"inboundroute")+" has been deleted!"}),p(u.inboundroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){u.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","toasty","inboundroutes","inboundroute","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditInboundRouteDialogController",e)}(),function(){"use strict";function e(m,i,a,o,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}}).then(function(e){e&&(e.id?u.inboundrouteApps.rows[t]=e:u.inboundrouteApps.rows.splice(t,0,e),s())}).catch(function(e){e&&o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function s(){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 o=u.inboundrouteApps.rows[a],s=[],r=[];o.intervals="*,*,*,*"!==o.interval?[o.interval]:o.IntervalId?_.map(_.filter(u.intervals.rows,{IntervalId:o.IntervalId}),"interval"):[],o.context=u.inboundroute.context,o.exten=u.inboundroute.exten,o.type&&(o.type=o.type.toLowerCase()),o.hasOwnProperty("answer")&&e.includes(o.app.toLowerCase())&&"custom"!==o.appType&&(o.answer?(s.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-ANSWER}=0]?Answer",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id}),s.push({type:o.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-ANSWER=1",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id})):(s.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-PROGRESS}=0]?Progress",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id}),s.push({type:o.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-PROGRESS=1",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id})));for(var l=0;l<o.intervals.length;l++){var d=t+o.intervals.length,c=l===o.intervals.length-1?t+s.length+r.length+2:t+l+1;s.splice(l,0,{type:"inbound",app:"GotoIfTime",appdata:o.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})}o.priority=s.length?_.last(s).priority+1:t,t=(r.length?_.last(r).priority:o.priority)+1,n=_.concat(n,s,[o],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.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",route:"sound",filters:{fields:"name,save_name",sort:"name"}},{name:"queues",route:"voiceQueue",filters:{type:"inbound",fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"sound",filters:{fields:"name,save_name",sort:"name"}}],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",route:"user",filters:{fields:"name",sort:"name"}}],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",route:"trunk",filters:{fields:"name",sort:"name"}}],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",route:"user",filters:{fields:"name",sort:"name"}}],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",route:"squareProject",filters:{fields:"name",sort:"name"}}],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",route:"voiceContext",filters:{fields:"name",sort:"name"}}],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",route:"variable",filters:{fields:"name",sort:"name"}}],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",route:"voiceMail",filters:{fields:"mailbox",sort:"mailbox"}}],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){s()}},u.init=function(e){u.inboundroute=e,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),s()},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:[]}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,s())})}},u.deleteInboundRouteApp=function(e){_.remove(u.inboundrouteApps.rows,{id:e.id}),s(),o.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=[],s()})},u.rewriteRouting=s,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,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.agi=angular.copy(e),o.agi.appdata)switch(o.agi.appType?o.agi.appType.toLowerCase():o.agi.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agi.appdata.split(",");o.agi.key=s[0],o.agi.language=s[1],o.agi.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agi.appdata.split(",");o.agi.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agi.text=s.slice(1,s.length).join(",");break;case"message":o.agi.text=o.agi.appdata;break;case"set":o.agi.name=o.agi.appdata.split("=")[0],o.agi.value=o.agi.appdata.split("=")[1];break;case"agi":o.agi.project=o.agi.appdata;break;default:var r=o.agi.appdata.split(",");o.agi.project=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.agi.type&&"outbound"===o.agi.type.toLowerCase()&&"outbounddial"===o.agi.appType.toLowerCase()&&(o.agi.prefix=o.agi.phone?o.agi.phone.split("$")[0]:void 0,o.agi.callerId=o.agi.callerID?"CALLERID(all)="+o.agi.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.agi.type&&"outbound"===o.agi.type.toLowerCase()&&"outboundDial"===o.agi.appType&&(o.agi.phone=a.cutdigits?(o.agi.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agi.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agi.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agi.options+="U(xcally-mixmonitor-context)"):o.agi.options=o.agi.options.replace("U(xcally-mixmonitor-context)",""));if(o.agi.appType&&"custom"===o.agi.appType);else switch((o.agi.app||o.agi.appType).toLowerCase()){case"set":o.agi.appdata=o.agi.name+"="+o.agi.value;break;case"custom":break;default:e[0]=o.agi.project,o.agi.appdata=e.join(",")}l(o.agi)},o.closeDialog=l,i.squareProject.get({fields:"name",sort:"name"}).$promise.then(function(e){o.projects=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppagiDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.custom=angular.copy(n),o.custom.appdata)switch(o.custom.appType?o.custom.appType.toLowerCase():o.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.custom.appdata.split(",");o.custom.key=s[0],o.custom.language=s[1],o.custom.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.custom.appdata.split(",");o.custom.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.custom.text=s.slice(1,s.length).join(",");break;case"message":o.custom.text=o.custom.appdata;break;case"set":o.custom.name=o.custom.appdata.split("=")[0],o.custom.value=o.custom.appdata.split("=")[1];break;case"agi":o.custom.project=o.custom.appdata;break;default:var r=o.custom.appdata.split(",");o.custom.app=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.custom.appdata=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outbounddial"===o.custom.appType.toLowerCase()&&(o.custom.prefix=o.custom.phone?o.custom.phone.split("$")[0]:void 0,o.custom.callerId=o.custom.callerID?"CALLERID(all)="+o.custom.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outboundDial"===o.custom.appType&&(o.custom.phone=a.cutdigits?(o.custom.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.custom.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.custom.options+="U(xcally-mixmonitor-context)"):o.custom.options=o.custom.options.replace("U(xcally-mixmonitor-context)",""));if(o.custom.appType&&"custom"===o.custom.appType);else switch((o.custom.app||o.custom.appType).toLowerCase()){case"set":o.custom.appdata=o.custom.name+"="+o.custom.value;break;case"custom":break;default:e[0]=o.custom.app,e[1]=o.custom.appdata,o.custom.appdata=e.join(",")}l(o.custom)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppcustomDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.dial=angular.copy(n),o.dial.appdata)switch(o.dial.appType?o.dial.appType.toLowerCase():o.dial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.dial.appdata.split(",");o.dial.key=s[0],o.dial.language=s[1],o.dial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.dial.appdata.split(",");o.dial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.dial.text=s.slice(1,s.length).join(",");break;case"message":o.dial.text=o.dial.appdata;break;case"set":o.dial.name=o.dial.appdata.split("=")[0],o.dial.value=o.dial.appdata.split("=")[1];break;case"agi":o.dial.project=o.dial.appdata;break;default:var r=o.dial.appdata.split(",");o.dial.tech=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.dial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.dial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.dial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.dial.type&&"outbound"===o.dial.type.toLowerCase()&&"outbounddial"===o.dial.appType.toLowerCase()&&(o.dial.prefix=o.dial.phone?o.dial.phone.split("$")[0]:void 0,o.dial.callerId=o.dial.callerID?"CALLERID(all)="+o.dial.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.dial.type&&"outbound"===o.dial.type.toLowerCase()&&"outboundDial"===o.dial.appType&&(o.dial.phone=a.cutdigits?(o.dial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.dial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.dial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.dial.options+="U(xcally-mixmonitor-context)"):o.dial.options=o.dial.options.replace("U(xcally-mixmonitor-context)",""));if(o.dial.appType&&"custom"===o.dial.appType);else switch((o.dial.app||o.dial.appType).toLowerCase()){case"set":o.dial.appdata=o.dial.name+"="+o.dial.value;break;case"custom":break;default:e[0]=o.dial.tech,e[1]=o.dial.timeout,e[2]=o.dial.options,e[3]=o.dial.url,o.dial.appdata=e.join(",")}l(o.dial)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppdialDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.externaldial=angular.copy(e),o.externaldial.appdata)switch(o.externaldial.appType?o.externaldial.appType.toLowerCase():o.externaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.externaldial.appdata.split(",");o.externaldial.key=s[0],o.externaldial.language=s[1],o.externaldial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.externaldial.appdata.split(",");o.externaldial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.externaldial.text=s.slice(1,s.length).join(",");break;case"message":o.externaldial.text=o.externaldial.appdata;break;case"set":o.externaldial.name=o.externaldial.appdata.split("=")[0],o.externaldial.value=o.externaldial.appdata.split("=")[1];break;case"agi":o.externaldial.project=o.externaldial.appdata;break;default:var r=o.externaldial.appdata.split(",");o.externaldial.trunk=r[0].split("/")[1],o.externaldial.phone=r[0].split("/")[2],o.externaldial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.externaldial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.externaldial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.externaldial.type&&"outbound"===o.externaldial.type.toLowerCase()&&"outbounddial"===o.externaldial.appType.toLowerCase()&&(o.externaldial.prefix=o.externaldial.phone?o.externaldial.phone.split("$")[0]:void 0,o.externaldial.callerId=o.externaldial.callerID?"CALLERID(all)="+o.externaldial.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.externaldial.type&&"outbound"===o.externaldial.type.toLowerCase()&&"outboundDial"===o.externaldial.appType&&(o.externaldial.phone=a.cutdigits?(o.externaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.externaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.externaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.externaldial.options+="U(xcally-mixmonitor-context)"):o.externaldial.options=o.externaldial.options.replace("U(xcally-mixmonitor-context)",""));if(o.externaldial.appType&&"custom"===o.externaldial.appType);else switch((o.externaldial.app||o.externaldial.appType).toLowerCase()){case"set":o.externaldial.appdata=o.externaldial.name+"="+o.externaldial.value;break;case"custom":break;default:e[0]=["SIP",o.externaldial.trunk,o.externaldial.phone].join("/"),e[1]=o.externaldial.timeout,e[2]=o.externaldial.options,e[3]=o.externaldial.url,o.externaldial.appdata=e.join(",")}l(o.externaldial)},o.closeDialog=l,i.trunk.get({fields:"name",sort:"name"}).$promise.then(function(e){o.trunks=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppexternaldialDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.goto=angular.copy(e),o.goto.appdata)switch(o.goto.appType?o.goto.appType.toLowerCase():o.goto.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.goto.appdata.split(",");o.goto.key=s[0],o.goto.language=s[1],o.goto.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.goto.appdata.split(",");o.goto.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.goto.text=s.slice(1,s.length).join(",");break;case"message":o.goto.text=o.goto.appdata;break;case"set":o.goto.name=o.goto.appdata.split("=")[0],o.goto.value=o.goto.appdata.split("=")[1];break;case"agi":o.goto.project=o.goto.appdata;break;default:var r=o.goto.appdata.split(",");o.goto.context=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.goto.extension=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.goto.priority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.goto.type&&"outbound"===o.goto.type.toLowerCase()&&"outbounddial"===o.goto.appType.toLowerCase()&&(o.goto.prefix=o.goto.phone?o.goto.phone.split("$")[0]:void 0,o.goto.callerId=o.goto.callerID?"CALLERID(all)="+o.goto.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.goto.type&&"outbound"===o.goto.type.toLowerCase()&&"outboundDial"===o.goto.appType&&(o.goto.phone=a.cutdigits?(o.goto.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.goto.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.goto.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.goto.options+="U(xcally-mixmonitor-context)"):o.goto.options=o.goto.options.replace("U(xcally-mixmonitor-context)",""));if(o.goto.appType&&"custom"===o.goto.appType);else switch((o.goto.app||o.goto.appType).toLowerCase()){case"set":o.goto.appdata=o.goto.name+"="+o.goto.value;break;case"custom":break;default:e[0]=o.goto.context,e[1]=o.goto.extension,e[2]=o.goto.priority,o.goto.appdata=e.join(",")}l(o.goto)},o.closeDialog=l,i.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){o.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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppgotoDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.hangup=angular.copy(n),o.hangup.appdata)switch(o.hangup.appType?o.hangup.appType.toLowerCase():o.hangup.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.hangup.appdata.split(",");o.hangup.key=s[0],o.hangup.language=s[1],o.hangup.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.hangup.appdata.split(",");o.hangup.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.hangup.text=s.slice(1,s.length).join(",");break;case"message":o.hangup.text=o.hangup.appdata;break;case"set":o.hangup.name=o.hangup.appdata.split("=")[0],o.hangup.value=o.hangup.appdata.split("=")[1];break;case"agi":o.hangup.project=o.hangup.appdata;break;default:var r=o.hangup.appdata.split(",");o.hangup.appdata=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.hangup.type&&"outbound"===o.hangup.type.toLowerCase()&&"outbounddial"===o.hangup.appType.toLowerCase()&&(o.hangup.prefix=o.hangup.phone?o.hangup.phone.split("$")[0]:void 0,o.hangup.callerId=o.hangup.callerID?"CALLERID(all)="+o.hangup.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.hangup.type&&"outbound"===o.hangup.type.toLowerCase()&&"outboundDial"===o.hangup.appType&&(o.hangup.phone=a.cutdigits?(o.hangup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.hangup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.hangup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.hangup.options+="U(xcally-mixmonitor-context)"):o.hangup.options=o.hangup.options.replace("U(xcally-mixmonitor-context)",""));if(o.hangup.appType&&"custom"===o.hangup.appType);else switch((o.hangup.app||o.hangup.appType).toLowerCase()){case"set":o.hangup.appdata=o.hangup.name+"="+o.hangup.value;break;case"custom":break;default:e[0]=o.hangup.appdata,o.hangup.appdata=e.join(",")}l(o.hangup)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundApphangupDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.internaldial=angular.copy(e),o.internaldial.appdata)switch(o.internaldial.appType?o.internaldial.appType.toLowerCase():o.internaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.internaldial.appdata.split(",");o.internaldial.key=s[0],o.internaldial.language=s[1],o.internaldial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.internaldial.appdata.split(",");o.internaldial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.internaldial.text=s.slice(1,s.length).join(",");break;case"message":o.internaldial.text=o.internaldial.appdata;break;case"set":o.internaldial.name=o.internaldial.appdata.split("=")[0],o.internaldial.value=o.internaldial.appdata.split("=")[1];break;case"agi":o.internaldial.project=o.internaldial.appdata;break;default:var r=o.internaldial.appdata.split(",");o.internaldial.user=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.internaldial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.internaldial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.internaldial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.internaldial.type&&"outbound"===o.internaldial.type.toLowerCase()&&"outbounddial"===o.internaldial.appType.toLowerCase()&&(o.internaldial.prefix=o.internaldial.phone?o.internaldial.phone.split("$")[0]:void 0,o.internaldial.callerId=o.internaldial.callerID?"CALLERID(all)="+o.internaldial.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.internaldial.type&&"outbound"===o.internaldial.type.toLowerCase()&&"outboundDial"===o.internaldial.appType&&(o.internaldial.phone=a.cutdigits?(o.internaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.internaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.internaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.internaldial.options+="U(xcally-mixmonitor-context)"):o.internaldial.options=o.internaldial.options.replace("U(xcally-mixmonitor-context)",""));if(o.internaldial.appType&&"custom"===o.internaldial.appType);else switch((o.internaldial.app||o.internaldial.appType).toLowerCase()){case"set":o.internaldial.appdata=o.internaldial.name+"="+o.internaldial.value;break;case"custom":break;default:e[0]=o.internaldial.user,e[1]=o.internaldial.timeout,e[2]=o.internaldial.options,e[3]=o.internaldial.url,o.internaldial.appdata=e.join(",")}l(o.internaldial)},o.closeDialog=l,i.user.get({fields:"name",sort:"name"}).$promise.then(function(e){o.users=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppinternaldialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditInboundAppintervalDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.playback=angular.copy(e),o.playback.appdata)switch(o.playback.appType?o.playback.appType.toLowerCase():o.playback.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.playback.appdata.split(",");o.playback.key=s[0],o.playback.language=s[1],o.playback.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.playback.appdata.split(",");o.playback.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.playback.text=s.slice(1,s.length).join(",");break;case"message":o.playback.text=o.playback.appdata;break;case"set":o.playback.name=o.playback.appdata.split("=")[0],o.playback.value=o.playback.appdata.split("=")[1];break;case"agi":o.playback.project=o.playback.appdata;break;default:var r=o.playback.appdata.split(",");o.playback.appdata=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.playback.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.playback.type&&"outbound"===o.playback.type.toLowerCase()&&"outbounddial"===o.playback.appType.toLowerCase()&&(o.playback.prefix=o.playback.phone?o.playback.phone.split("$")[0]:void 0,o.playback.callerId=o.playback.callerID?"CALLERID(all)="+o.playback.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.playback.type&&"outbound"===o.playback.type.toLowerCase()&&"outboundDial"===o.playback.appType&&(o.playback.phone=a.cutdigits?(o.playback.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.playback.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.playback.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.playback.options+="U(xcally-mixmonitor-context)"):o.playback.options=o.playback.options.replace("U(xcally-mixmonitor-context)",""));if(o.playback.appType&&"custom"===o.playback.appType);else switch((o.playback.app||o.playback.appType).toLowerCase()){case"set":o.playback.appdata=o.playback.name+"="+o.playback.value;break;case"custom":break;default:e[0]=o.playback.appdata,e[1]=o.playback.options,o.playback.appdata=e.join(",")}l(o.playback)},o.closeDialog=l,i.sound.get({fields:"name,save_name",sort:"name"}).$promise.then(function(e){o.sounds=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppplaybackDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.queue.URL=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.queue.sound=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10),o.queue.timeout=_.isEmpty(r[4])?r[4]:isNaN(r[4])?r[4]:parseInt(r[4],10),o.queue.agi=_.isEmpty(r[5])?r[5]:isNaN(r[5])?r[5]:parseInt(r[5],10),o.queue.macro=_.isEmpty(r[6])?r[6]:isNaN(r[6])?r[6]:parseInt(r[6],10),o.queue.gosub=_.isEmpty(r[7])?r[7]:isNaN(r[7])?r[7]:parseInt(r[7],10),o.queue.rule=_.isEmpty(r[8])?r[8]:isNaN(r[8])?r[8]:parseInt(r[8],10),o.queue.position=_.isEmpty(r[9])?r[9]:isNaN(r[9])?r[9]:parseInt(r[9],10)}function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.options,e[2]=o.queue.URL,e[3]=o.queue.sound,e[4]=o.queue.timeout,e[5]=o.queue.agi,e[6]=o.queue.macro,e[7]=o.queue.gosub,e[8]=o.queue.rule,e[9]=o.queue.position,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.sound.get({fields:"name,save_name",sort:"name"}).$promise.then(function(e){o.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.ringgroup=angular.copy(e),o.ringgroup.appdata)switch(o.ringgroup.appType?o.ringgroup.appType.toLowerCase():o.ringgroup.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.ringgroup.appdata.split(",");o.ringgroup.key=s[0],o.ringgroup.language=s[1],o.ringgroup.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.ringgroup.appdata.split(",");o.ringgroup.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.ringgroup.text=s.slice(1,s.length).join(",");break;case"message":o.ringgroup.text=o.ringgroup.appdata;break;case"set":o.ringgroup.name=o.ringgroup.appdata.split("=")[0],o.ringgroup.value=o.ringgroup.appdata.split("=")[1];break;case"agi":o.ringgroup.project=o.ringgroup.appdata;break;default:var r=o.ringgroup.appdata.split(",");o.ringgroup.multipleUsers=r[0].split("&"),o.ringgroup.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.ringgroup.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.ringgroup.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.ringgroup.type&&"outbound"===o.ringgroup.type.toLowerCase()&&"outbounddial"===o.ringgroup.appType.toLowerCase()&&(o.ringgroup.prefix=o.ringgroup.phone?o.ringgroup.phone.split("$")[0]:void 0,o.ringgroup.callerId=o.ringgroup.callerID?"CALLERID(all)="+o.ringgroup.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.ringgroup.type&&"outbound"===o.ringgroup.type.toLowerCase()&&"outboundDial"===o.ringgroup.appType&&(o.ringgroup.phone=a.cutdigits?(o.ringgroup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.ringgroup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.ringgroup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.ringgroup.options+="U(xcally-mixmonitor-context)"):o.ringgroup.options=o.ringgroup.options.replace("U(xcally-mixmonitor-context)",""));if(o.ringgroup.appType&&"custom"===o.ringgroup.appType);else switch((o.ringgroup.app||o.ringgroup.appType).toLowerCase()){case"set":o.ringgroup.appdata=o.ringgroup.name+"="+o.ringgroup.value;break;case"custom":break;default:e[0]=o.ringgroup.multipleUsers.join("&"),e[1]=o.ringgroup.timeout,e[2]=o.ringgroup.options,e[3]=o.ringgroup.url,o.ringgroup.appdata=e.join(",")}l(o.ringgroup)},o.closeDialog=l,i.user.get({fields:"name",sort:"name"}).$promise.then(function(e){o.users=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppringgroupDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.set=angular.copy(e),o.set.appdata)switch(o.set.appType?o.set.appType.toLowerCase():o.set.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.set.appdata.split(",");o.set.key=s[0],o.set.language=s[1],o.set.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.set.appdata.split(",");o.set.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.set.text=s.slice(1,s.length).join(",");break;case"message":o.set.text=o.set.appdata;break;case"set":o.set.name=o.set.appdata.split("=")[0],o.set.value=o.set.appdata.split("=")[1];break;case"agi":o.set.project=o.set.appdata;break;default:var r=o.set.appdata.split("=");o.set.name=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.set.value=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.set.type&&"outbound"===o.set.type.toLowerCase()&&"outbounddial"===o.set.appType.toLowerCase()&&(o.set.prefix=o.set.phone?o.set.phone.split("$")[0]:void 0,o.set.callerId=o.set.callerID?"CALLERID(all)="+o.set.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.set.type&&"outbound"===o.set.type.toLowerCase()&&"outboundDial"===o.set.appType&&(o.set.phone=a.cutdigits?(o.set.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.set.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.set.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.set.options+="U(xcally-mixmonitor-context)"):o.set.options=o.set.options.replace("U(xcally-mixmonitor-context)",""));if(o.set.appType&&"custom"===o.set.appType);else switch((o.set.app||o.set.appType).toLowerCase()){case"set":o.set.appdata=o.set.name+"="+o.set.value;break;case"custom":break;default:e[0]=o.set.name,e[1]=o.set.value,o.set.appdata=e.join("=")}l(o.set)},o.closeDialog=l,i.variable.get({fields:"name",sort:"name"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppsetDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.voicemail=angular.copy(e),o.voicemail.appdata)switch(o.voicemail.appType?o.voicemail.appType.toLowerCase():o.voicemail.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.voicemail.appdata.split(",");o.voicemail.key=s[0],o.voicemail.language=s[1],o.voicemail.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.voicemail.appdata.split(",");o.voicemail.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.voicemail.text=s.slice(1,s.length).join(",");break;case"message":o.voicemail.text=o.voicemail.appdata;break;case"set":o.voicemail.name=o.voicemail.appdata.split("=")[0],o.voicemail.value=o.voicemail.appdata.split("=")[1];break;case"agi":o.voicemail.project=o.voicemail.appdata;break;default:var r=o.voicemail.appdata.split(",");o.voicemail.voiceMail=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.voicemail.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.voicemail.type&&"outbound"===o.voicemail.type.toLowerCase()&&"outbounddial"===o.voicemail.appType.toLowerCase()&&(o.voicemail.prefix=o.voicemail.phone?o.voicemail.phone.split("$")[0]:void 0,o.voicemail.callerId=o.voicemail.callerID?"CALLERID(all)="+o.voicemail.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.voicemail.type&&"outbound"===o.voicemail.type.toLowerCase()&&"outboundDial"===o.voicemail.appType&&(o.voicemail.phone=a.cutdigits?(o.voicemail.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.voicemail.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.voicemail.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.voicemail.options+="U(xcally-mixmonitor-context)"):o.voicemail.options=o.voicemail.options.replace("U(xcally-mixmonitor-context)",""));if(o.voicemail.appType&&"custom"===o.voicemail.appType);else switch((o.voicemail.app||o.voicemail.appType).toLowerCase()){case"set":o.voicemail.appdata=o.voicemail.name+"="+o.voicemail.value;break;case"custom":break;default:e[0]=o.voicemail.voiceMail,e[1]=o.voicemail.options,o.voicemail.appdata=e.join(",")}l(o.voicemail)},o.closeDialog=l,i.voiceMail.get({fields:"mailbox",sort:"mailbox"}).$promise.then(function(e){o.voiceMails=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppvoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.inboundroute=d||e.params.inboundroute||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoInboundRoutes=function(){e.go("app.voice.inboundroutes")},c.saveInboundRoute=function(){s.voiceExtension.update({id:c.inboundroute.id},c.inboundroute).$promise.then(function(){r.success({title:"InboundRoute updated!",msg:c.inboundroute.name?c.inboundroute.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","inboundroute"],angular.module("app.voice").controller("InboundRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.inboundroutes=r||{count:0,rows:[]},v.table="inboundroutes",v.listOrder="",v.listOrderAsc=null,v.selectedInboundRoutes=[],v.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"inbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},v.editstate=function(e,t){n.go("app.voice.inboundroutes.edit",{id:e.id,inboundroute:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the inboundroute?").htmlContent("<b>"+(e.name||"inboundroute")+"</b> will be deleted.").ariaLabel("delete inboundroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getInboundRoutes=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceExtension.get(v.query,f).$promise},v.createOrEditInboundRoute=function(e,t){i.show({controller:"CreateOrEditInboundRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/inboundroutes/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{inboundroute:t,inboundroutes:v.inboundroutes.rows,license:v.license,setting:v.setting}})},v.deleteInboundRoute=A,v.exportSelectedInboundRoutes=function(){var e=angular.copy(v.selectedInboundRoutes);return v.selectedInboundRoutes=[],e},v.deleteSelectedInboundRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected inboundroutes?").htmlContent("<b>"+v.selectedInboundRoutes.length+" selected</b> will be deleted.").ariaLabel("delete InboundRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedInboundRoutes.forEach(function(e){A(e)}),v.selectedInboundRoutes=[]})},v.deselectInboundRoutes=function(){v.selectedInboundRoutes=[]},v.selectAllInboundRoutes=function(){v.selectedInboundRoutes=v.inboundroutes.rows},l.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){v.contexts=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.inboundroutes=e||{count:0,rows:[]}}function A(e){l.voiceExtension.delete({id:e.id}).$promise.then(function(){_.remove(v.inboundroutes.rows,{id:e.id}),v.inboundroutes.count-=1,v.inboundroutes.rows.length||v.getInboundRoutes(),c.success({title:"InboundRoute deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];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:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getInboundRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","inboundroutes","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("InboundRoutesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_INTERNALROUTE",u.internalroute=angular.copy(r),u.internalroutes=s,u.newInternalRoute=!1,u.internalroute||(u.internalroute={appdata:"Internal Call",type:"internal",context:"from-sip"},u.title="VOICE.NEW_INTERNALROUTE",u.newInternalRoute=!0),u.addNewInternalRoute=function(){u.errors=[],l.voiceExtension.save(u.internalroute).$promise.then(function(e){u.internalroutes.unshift(e.toJSON()),o.success({title:"InternalRoute properly created",msg:u.internalroute.name?u.internalroute.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveInternalRoute=function(){u.errors=[],l.voiceExtension.update({id:u.internalroute.id},u.internalroute).$promise.then(function(e){var t=_.find(u.internalroutes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"InternalRoute properly saved!",msg:u.internalroute.name?u.internalroute.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteInternalRoute=function(e){u.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(){l.voiceExtension.delete({id:u.internalroute.id}).$promise.then(function(){_.remove(u.internalroutes,{id:u.internalroute.id}),o.success({title:"InternalRoute properly deleted!",msg:(u.internalroute.name||"internalroute")+" has been deleted!"}),p(u.internalroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){u.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","toasty","internalroutes","internalroute","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditInternalRouteDialogController",e)}(),function(){"use strict";function e(m,i,a,o,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}}).then(function(e){e&&(e.id?u.internalrouteApps.rows[t]=e:u.internalrouteApps.rows.splice(t,0,e),s())}).catch(function(e){e&&o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function s(){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 o=u.internalrouteApps.rows[a],s=[],r=[];o.intervals="*,*,*,*"!==o.interval?[o.interval]:o.IntervalId?_.map(_.filter(u.intervals.rows,{IntervalId:o.IntervalId}),"interval"):[],o.context=u.internalroute.context,o.exten=u.internalroute.exten,o.type&&(o.type=o.type.toLowerCase()),o.hasOwnProperty("answer")&&e.includes(o.app.toLowerCase())&&"custom"!==o.appType&&(o.answer?(s.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-ANSWER}=0]?Answer",context:u.internalroute.context,exten:u.internalroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id}),s.push({type:o.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-ANSWER=1",context:u.internalroute.context,exten:u.internalroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id})):(s.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-PROGRESS}=0]?Progress",context:u.internalroute.context,exten:u.internalroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id}),s.push({type:o.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-PROGRESS=1",context:u.internalroute.context,exten:u.internalroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id})));for(var l=0;l<o.intervals.length;l++){var d=t+o.intervals.length,c=l===o.intervals.length-1?t+s.length+r.length+2:t+l+1;s.splice(l,0,{type:"internal",app:"GotoIfTime",appdata:o.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})}o.priority=s.length?_.last(s).priority+1:t,t=(r.length?_.last(r).priority:o.priority)+1,n=_.concat(n,s,[o],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.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",route:"sound",filters:{fields:"name,save_name",sort:"name"}},{name:"queues",route:"voiceQueue",filters:{type:"inbound",fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"sound",filters:{fields:"name,save_name",sort:"name"}}],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",route:"user",filters:{fields:"name",sort:"name"}}],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",route:"trunk",filters:{fields:"name",sort:"name"}}],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",route:"user",filters:{fields:"name",sort:"name"}}],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",route:"squareProject",filters:{fields:"name",sort:"name"}}],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",route:"voiceContext",filters:{fields:"name",sort:"name"}}],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",route:"variable",filters:{fields:"name",sort:"name"}}],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",route:"voiceMail",filters:{fields:"mailbox",sort:"mailbox"}}],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){s()}},u.init=function(e){u.internalroute=e,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),s()},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:[]}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,s())})}},u.deleteInternalRouteApp=function(e){_.remove(u.internalrouteApps.rows,{id:e.id}),s(),o.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=[],s()})},u.rewriteRouting=s,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,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.agi=angular.copy(e),o.agi.appdata)switch(o.agi.appType?o.agi.appType.toLowerCase():o.agi.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agi.appdata.split(",");o.agi.key=s[0],o.agi.language=s[1],o.agi.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agi.appdata.split(",");o.agi.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agi.text=s.slice(1,s.length).join(",");break;case"message":o.agi.text=o.agi.appdata;break;case"set":o.agi.name=o.agi.appdata.split("=")[0],o.agi.value=o.agi.appdata.split("=")[1];break;case"agi":o.agi.project=o.agi.appdata;break;default:var r=o.agi.appdata.split(",");o.agi.project=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.agi.type&&"outbound"===o.agi.type.toLowerCase()&&"outbounddial"===o.agi.appType.toLowerCase()&&(o.agi.prefix=o.agi.phone?o.agi.phone.split("$")[0]:void 0,o.agi.callerId=o.agi.callerID?"CALLERID(all)="+o.agi.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.agi.type&&"outbound"===o.agi.type.toLowerCase()&&"outboundDial"===o.agi.appType&&(o.agi.phone=a.cutdigits?(o.agi.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agi.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agi.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agi.options+="U(xcally-mixmonitor-context)"):o.agi.options=o.agi.options.replace("U(xcally-mixmonitor-context)",""));if(o.agi.appType&&"custom"===o.agi.appType);else switch((o.agi.app||o.agi.appType).toLowerCase()){case"set":o.agi.appdata=o.agi.name+"="+o.agi.value;break;case"custom":break;default:e[0]=o.agi.project,o.agi.appdata=e.join(",")}l(o.agi)},o.closeDialog=l,i.squareProject.get({fields:"name",sort:"name"}).$promise.then(function(e){o.projects=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppagiDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.custom=angular.copy(n),o.custom.appdata)switch(o.custom.appType?o.custom.appType.toLowerCase():o.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.custom.appdata.split(",");o.custom.key=s[0],o.custom.language=s[1],o.custom.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.custom.appdata.split(",");o.custom.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.custom.text=s.slice(1,s.length).join(",");break;case"message":o.custom.text=o.custom.appdata;break;case"set":o.custom.name=o.custom.appdata.split("=")[0],o.custom.value=o.custom.appdata.split("=")[1];break;case"agi":o.custom.project=o.custom.appdata;break;default:var r=o.custom.appdata.split(",");o.custom.app=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.custom.appdata=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outbounddial"===o.custom.appType.toLowerCase()&&(o.custom.prefix=o.custom.phone?o.custom.phone.split("$")[0]:void 0,o.custom.callerId=o.custom.callerID?"CALLERID(all)="+o.custom.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outboundDial"===o.custom.appType&&(o.custom.phone=a.cutdigits?(o.custom.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.custom.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.custom.options+="U(xcally-mixmonitor-context)"):o.custom.options=o.custom.options.replace("U(xcally-mixmonitor-context)",""));if(o.custom.appType&&"custom"===o.custom.appType);else switch((o.custom.app||o.custom.appType).toLowerCase()){case"set":o.custom.appdata=o.custom.name+"="+o.custom.value;break;case"custom":break;default:e[0]=o.custom.app,e[1]=o.custom.appdata,o.custom.appdata=e.join(",")}l(o.custom)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppcustomDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.dial=angular.copy(n),o.dial.appdata)switch(o.dial.appType?o.dial.appType.toLowerCase():o.dial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.dial.appdata.split(",");o.dial.key=s[0],o.dial.language=s[1],o.dial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.dial.appdata.split(",");o.dial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.dial.text=s.slice(1,s.length).join(",");break;case"message":o.dial.text=o.dial.appdata;break;case"set":o.dial.name=o.dial.appdata.split("=")[0],o.dial.value=o.dial.appdata.split("=")[1];break;case"agi":o.dial.project=o.dial.appdata;break;default:var r=o.dial.appdata.split(",");o.dial.tech=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.dial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.dial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.dial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.dial.type&&"outbound"===o.dial.type.toLowerCase()&&"outbounddial"===o.dial.appType.toLowerCase()&&(o.dial.prefix=o.dial.phone?o.dial.phone.split("$")[0]:void 0,o.dial.callerId=o.dial.callerID?"CALLERID(all)="+o.dial.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.dial.type&&"outbound"===o.dial.type.toLowerCase()&&"outboundDial"===o.dial.appType&&(o.dial.phone=a.cutdigits?(o.dial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.dial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.dial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.dial.options+="U(xcally-mixmonitor-context)"):o.dial.options=o.dial.options.replace("U(xcally-mixmonitor-context)",""));if(o.dial.appType&&"custom"===o.dial.appType);else switch((o.dial.app||o.dial.appType).toLowerCase()){case"set":o.dial.appdata=o.dial.name+"="+o.dial.value;break;case"custom":break;default:e[0]=o.dial.tech,e[1]=o.dial.timeout,e[2]=o.dial.options,e[3]=o.dial.url,o.dial.appdata=e.join(",")}l(o.dial)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppdialDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.externaldial=angular.copy(e),o.externaldial.appdata)switch(o.externaldial.appType?o.externaldial.appType.toLowerCase():o.externaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.externaldial.appdata.split(",");o.externaldial.key=s[0],o.externaldial.language=s[1],o.externaldial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.externaldial.appdata.split(",");o.externaldial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.externaldial.text=s.slice(1,s.length).join(",");break;case"message":o.externaldial.text=o.externaldial.appdata;break;case"set":o.externaldial.name=o.externaldial.appdata.split("=")[0],o.externaldial.value=o.externaldial.appdata.split("=")[1];break;case"agi":o.externaldial.project=o.externaldial.appdata;break;default:var r=o.externaldial.appdata.split(",");o.externaldial.trunk=r[0].split("/")[1],o.externaldial.phone=r[0].split("/")[2],o.externaldial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.externaldial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.externaldial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.externaldial.type&&"outbound"===o.externaldial.type.toLowerCase()&&"outbounddial"===o.externaldial.appType.toLowerCase()&&(o.externaldial.prefix=o.externaldial.phone?o.externaldial.phone.split("$")[0]:void 0,o.externaldial.callerId=o.externaldial.callerID?"CALLERID(all)="+o.externaldial.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.externaldial.type&&"outbound"===o.externaldial.type.toLowerCase()&&"outboundDial"===o.externaldial.appType&&(o.externaldial.phone=a.cutdigits?(o.externaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.externaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.externaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.externaldial.options+="U(xcally-mixmonitor-context)"):o.externaldial.options=o.externaldial.options.replace("U(xcally-mixmonitor-context)",""));if(o.externaldial.appType&&"custom"===o.externaldial.appType);else switch((o.externaldial.app||o.externaldial.appType).toLowerCase()){case"set":o.externaldial.appdata=o.externaldial.name+"="+o.externaldial.value;break;case"custom":break;default:e[0]=["SIP",o.externaldial.trunk,o.externaldial.phone].join("/"),e[1]=o.externaldial.timeout,e[2]=o.externaldial.options,e[3]=o.externaldial.url,o.externaldial.appdata=e.join(",")}l(o.externaldial)},o.closeDialog=l,i.trunk.get({fields:"name",sort:"name"}).$promise.then(function(e){o.trunks=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppexternaldialDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.goto=angular.copy(e),o.goto.appdata)switch(o.goto.appType?o.goto.appType.toLowerCase():o.goto.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.goto.appdata.split(",");o.goto.key=s[0],o.goto.language=s[1],o.goto.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.goto.appdata.split(",");o.goto.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.goto.text=s.slice(1,s.length).join(",");break;case"message":o.goto.text=o.goto.appdata;break;case"set":o.goto.name=o.goto.appdata.split("=")[0],o.goto.value=o.goto.appdata.split("=")[1];break;case"agi":o.goto.project=o.goto.appdata;break;default:var r=o.goto.appdata.split(",");o.goto.context=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.goto.extension=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.goto.priority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.goto.type&&"outbound"===o.goto.type.toLowerCase()&&"outbounddial"===o.goto.appType.toLowerCase()&&(o.goto.prefix=o.goto.phone?o.goto.phone.split("$")[0]:void 0,o.goto.callerId=o.goto.callerID?"CALLERID(all)="+o.goto.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.goto.type&&"outbound"===o.goto.type.toLowerCase()&&"outboundDial"===o.goto.appType&&(o.goto.phone=a.cutdigits?(o.goto.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.goto.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.goto.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.goto.options+="U(xcally-mixmonitor-context)"):o.goto.options=o.goto.options.replace("U(xcally-mixmonitor-context)",""));if(o.goto.appType&&"custom"===o.goto.appType);else switch((o.goto.app||o.goto.appType).toLowerCase()){case"set":o.goto.appdata=o.goto.name+"="+o.goto.value;break;case"custom":break;default:e[0]=o.goto.context,e[1]=o.goto.extension,e[2]=o.goto.priority,o.goto.appdata=e.join(",")}l(o.goto)},o.closeDialog=l,i.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){o.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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppgotoDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.hangup=angular.copy(n),o.hangup.appdata)switch(o.hangup.appType?o.hangup.appType.toLowerCase():o.hangup.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.hangup.appdata.split(",");o.hangup.key=s[0],o.hangup.language=s[1],o.hangup.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.hangup.appdata.split(",");o.hangup.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.hangup.text=s.slice(1,s.length).join(",");break;case"message":o.hangup.text=o.hangup.appdata;break;case"set":o.hangup.name=o.hangup.appdata.split("=")[0],o.hangup.value=o.hangup.appdata.split("=")[1];break;case"agi":o.hangup.project=o.hangup.appdata;break;default:var r=o.hangup.appdata.split(",");o.hangup.appdata=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.hangup.type&&"outbound"===o.hangup.type.toLowerCase()&&"outbounddial"===o.hangup.appType.toLowerCase()&&(o.hangup.prefix=o.hangup.phone?o.hangup.phone.split("$")[0]:void 0,o.hangup.callerId=o.hangup.callerID?"CALLERID(all)="+o.hangup.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.hangup.type&&"outbound"===o.hangup.type.toLowerCase()&&"outboundDial"===o.hangup.appType&&(o.hangup.phone=a.cutdigits?(o.hangup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.hangup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.hangup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.hangup.options+="U(xcally-mixmonitor-context)"):o.hangup.options=o.hangup.options.replace("U(xcally-mixmonitor-context)",""));if(o.hangup.appType&&"custom"===o.hangup.appType);else switch((o.hangup.app||o.hangup.appType).toLowerCase()){case"set":o.hangup.appdata=o.hangup.name+"="+o.hangup.value;break;case"custom":break;default:e[0]=o.hangup.appdata,o.hangup.appdata=e.join(",")}l(o.hangup)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalApphangupDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.internaldial=angular.copy(e),o.internaldial.appdata)switch(o.internaldial.appType?o.internaldial.appType.toLowerCase():o.internaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.internaldial.appdata.split(",");o.internaldial.key=s[0],o.internaldial.language=s[1],o.internaldial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.internaldial.appdata.split(",");o.internaldial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.internaldial.text=s.slice(1,s.length).join(",");break;case"message":o.internaldial.text=o.internaldial.appdata;break;case"set":o.internaldial.name=o.internaldial.appdata.split("=")[0],o.internaldial.value=o.internaldial.appdata.split("=")[1];break;case"agi":o.internaldial.project=o.internaldial.appdata;break;default:var r=o.internaldial.appdata.split(",");o.internaldial.user=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.internaldial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.internaldial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.internaldial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.internaldial.type&&"outbound"===o.internaldial.type.toLowerCase()&&"outbounddial"===o.internaldial.appType.toLowerCase()&&(o.internaldial.prefix=o.internaldial.phone?o.internaldial.phone.split("$")[0]:void 0,o.internaldial.callerId=o.internaldial.callerID?"CALLERID(all)="+o.internaldial.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.internaldial.type&&"outbound"===o.internaldial.type.toLowerCase()&&"outboundDial"===o.internaldial.appType&&(o.internaldial.phone=a.cutdigits?(o.internaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.internaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.internaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.internaldial.options+="U(xcally-mixmonitor-context)"):o.internaldial.options=o.internaldial.options.replace("U(xcally-mixmonitor-context)",""));if(o.internaldial.appType&&"custom"===o.internaldial.appType);else switch((o.internaldial.app||o.internaldial.appType).toLowerCase()){case"set":o.internaldial.appdata=o.internaldial.name+"="+o.internaldial.value;break;case"custom":break;default:e[0]=o.internaldial.user,e[1]=o.internaldial.timeout,e[2]=o.internaldial.options,e[3]=o.internaldial.url,o.internaldial.appdata=e.join(",")}l(o.internaldial)},o.closeDialog=l,i.user.get({fields:"name",sort:"name"}).$promise.then(function(e){o.users=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppinternaldialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditInternalAppintervalDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.playback=angular.copy(e),o.playback.appdata)switch(o.playback.appType?o.playback.appType.toLowerCase():o.playback.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.playback.appdata.split(",");o.playback.key=s[0],o.playback.language=s[1],o.playback.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.playback.appdata.split(",");o.playback.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.playback.text=s.slice(1,s.length).join(",");break;case"message":o.playback.text=o.playback.appdata;break;case"set":o.playback.name=o.playback.appdata.split("=")[0],o.playback.value=o.playback.appdata.split("=")[1];break;case"agi":o.playback.project=o.playback.appdata;break;default:var r=o.playback.appdata.split(",");o.playback.appdata=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.playback.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.playback.type&&"outbound"===o.playback.type.toLowerCase()&&"outbounddial"===o.playback.appType.toLowerCase()&&(o.playback.prefix=o.playback.phone?o.playback.phone.split("$")[0]:void 0,o.playback.callerId=o.playback.callerID?"CALLERID(all)="+o.playback.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.playback.type&&"outbound"===o.playback.type.toLowerCase()&&"outboundDial"===o.playback.appType&&(o.playback.phone=a.cutdigits?(o.playback.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.playback.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.playback.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.playback.options+="U(xcally-mixmonitor-context)"):o.playback.options=o.playback.options.replace("U(xcally-mixmonitor-context)",""));if(o.playback.appType&&"custom"===o.playback.appType);else switch((o.playback.app||o.playback.appType).toLowerCase()){case"set":o.playback.appdata=o.playback.name+"="+o.playback.value;break;case"custom":break;default:e[0]=o.playback.appdata,e[1]=o.playback.options,o.playback.appdata=e.join(",")}l(o.playback)},o.closeDialog=l,i.sound.get({fields:"name,save_name",sort:"name"}).$promise.then(function(e){o.sounds=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppplaybackDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.queue.URL=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.queue.sound=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10),o.queue.timeout=_.isEmpty(r[4])?r[4]:isNaN(r[4])?r[4]:parseInt(r[4],10),o.queue.agi=_.isEmpty(r[5])?r[5]:isNaN(r[5])?r[5]:parseInt(r[5],10),o.queue.macro=_.isEmpty(r[6])?r[6]:isNaN(r[6])?r[6]:parseInt(r[6],10),o.queue.gosub=_.isEmpty(r[7])?r[7]:isNaN(r[7])?r[7]:parseInt(r[7],10),o.queue.rule=_.isEmpty(r[8])?r[8]:isNaN(r[8])?r[8]:parseInt(r[8],10),o.queue.position=_.isEmpty(r[9])?r[9]:isNaN(r[9])?r[9]:parseInt(r[9],10)}function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.options,e[2]=o.queue.URL,e[3]=o.queue.sound,e[4]=o.queue.timeout,e[5]=o.queue.agi,e[6]=o.queue.macro,e[7]=o.queue.gosub,e[8]=o.queue.rule,e[9]=o.queue.position,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.sound.get({fields:"name,save_name",sort:"name"}).$promise.then(function(e){o.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.ringgroup=angular.copy(e),o.ringgroup.appdata)switch(o.ringgroup.appType?o.ringgroup.appType.toLowerCase():o.ringgroup.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.ringgroup.appdata.split(",");o.ringgroup.key=s[0],o.ringgroup.language=s[1],o.ringgroup.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.ringgroup.appdata.split(",");o.ringgroup.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.ringgroup.text=s.slice(1,s.length).join(",");break;case"message":o.ringgroup.text=o.ringgroup.appdata;break;case"set":o.ringgroup.name=o.ringgroup.appdata.split("=")[0],o.ringgroup.value=o.ringgroup.appdata.split("=")[1];break;case"agi":o.ringgroup.project=o.ringgroup.appdata;break;default:var r=o.ringgroup.appdata.split(",");o.ringgroup.multipleUsers=r[0].split("&"),o.ringgroup.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.ringgroup.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.ringgroup.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.ringgroup.type&&"outbound"===o.ringgroup.type.toLowerCase()&&"outbounddial"===o.ringgroup.appType.toLowerCase()&&(o.ringgroup.prefix=o.ringgroup.phone?o.ringgroup.phone.split("$")[0]:void 0,o.ringgroup.callerId=o.ringgroup.callerID?"CALLERID(all)="+o.ringgroup.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.ringgroup.type&&"outbound"===o.ringgroup.type.toLowerCase()&&"outboundDial"===o.ringgroup.appType&&(o.ringgroup.phone=a.cutdigits?(o.ringgroup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.ringgroup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.ringgroup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.ringgroup.options+="U(xcally-mixmonitor-context)"):o.ringgroup.options=o.ringgroup.options.replace("U(xcally-mixmonitor-context)",""));if(o.ringgroup.appType&&"custom"===o.ringgroup.appType);else switch((o.ringgroup.app||o.ringgroup.appType).toLowerCase()){case"set":o.ringgroup.appdata=o.ringgroup.name+"="+o.ringgroup.value;break;case"custom":break;default:e[0]=o.ringgroup.multipleUsers.join("&"),e[1]=o.ringgroup.timeout,e[2]=o.ringgroup.options,e[3]=o.ringgroup.url,o.ringgroup.appdata=e.join(",")}l(o.ringgroup)},o.closeDialog=l,i.user.get({fields:"name",sort:"name"}).$promise.then(function(e){o.users=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppringgroupDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.set=angular.copy(e),o.set.appdata)switch(o.set.appType?o.set.appType.toLowerCase():o.set.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.set.appdata.split(",");o.set.key=s[0],o.set.language=s[1],o.set.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.set.appdata.split(",");o.set.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.set.text=s.slice(1,s.length).join(",");break;case"message":o.set.text=o.set.appdata;break;case"set":o.set.name=o.set.appdata.split("=")[0],o.set.value=o.set.appdata.split("=")[1];break;case"agi":o.set.project=o.set.appdata;break;default:var r=o.set.appdata.split("=");o.set.name=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.set.value=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.set.type&&"outbound"===o.set.type.toLowerCase()&&"outbounddial"===o.set.appType.toLowerCase()&&(o.set.prefix=o.set.phone?o.set.phone.split("$")[0]:void 0,o.set.callerId=o.set.callerID?"CALLERID(all)="+o.set.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.set.type&&"outbound"===o.set.type.toLowerCase()&&"outboundDial"===o.set.appType&&(o.set.phone=a.cutdigits?(o.set.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.set.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.set.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.set.options+="U(xcally-mixmonitor-context)"):o.set.options=o.set.options.replace("U(xcally-mixmonitor-context)",""));if(o.set.appType&&"custom"===o.set.appType);else switch((o.set.app||o.set.appType).toLowerCase()){case"set":o.set.appdata=o.set.name+"="+o.set.value;break;case"custom":break;default:e[0]=o.set.name,e[1]=o.set.value,o.set.appdata=e.join("=")}l(o.set)},o.closeDialog=l,i.variable.get({fields:"name",sort:"name"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppsetDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.voicemail=angular.copy(e),o.voicemail.appdata)switch(o.voicemail.appType?o.voicemail.appType.toLowerCase():o.voicemail.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.voicemail.appdata.split(",");o.voicemail.key=s[0],o.voicemail.language=s[1],o.voicemail.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.voicemail.appdata.split(",");o.voicemail.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.voicemail.text=s.slice(1,s.length).join(",");break;case"message":o.voicemail.text=o.voicemail.appdata;break;case"set":o.voicemail.name=o.voicemail.appdata.split("=")[0],o.voicemail.value=o.voicemail.appdata.split("=")[1];break;case"agi":o.voicemail.project=o.voicemail.appdata;break;default:var r=o.voicemail.appdata.split(",");o.voicemail.voiceMail=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.voicemail.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.voicemail.type&&"outbound"===o.voicemail.type.toLowerCase()&&"outbounddial"===o.voicemail.appType.toLowerCase()&&(o.voicemail.prefix=o.voicemail.phone?o.voicemail.phone.split("$")[0]:void 0,o.voicemail.callerId=o.voicemail.callerID?"CALLERID(all)="+o.voicemail.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.voicemail.type&&"outbound"===o.voicemail.type.toLowerCase()&&"outboundDial"===o.voicemail.appType&&(o.voicemail.phone=a.cutdigits?(o.voicemail.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.voicemail.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.voicemail.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.voicemail.options+="U(xcally-mixmonitor-context)"):o.voicemail.options=o.voicemail.options.replace("U(xcally-mixmonitor-context)",""));if(o.voicemail.appType&&"custom"===o.voicemail.appType);else switch((o.voicemail.app||o.voicemail.appType).toLowerCase()){case"set":o.voicemail.appdata=o.voicemail.name+"="+o.voicemail.value;break;case"custom":break;default:e[0]=o.voicemail.voiceMail,e[1]=o.voicemail.options,o.voicemail.appdata=e.join(",")}l(o.voicemail)},o.closeDialog=l,i.voiceMail.get({fields:"mailbox",sort:"mailbox"}).$promise.then(function(e){o.voiceMails=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppvoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.internalroute=d||e.params.internalroute||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoInternalRoutes=function(){e.go("app.voice.internalroutes")},c.saveInternalRoute=function(){s.voiceExtension.update({id:c.internalroute.id},c.internalroute).$promise.then(function(){r.success({title:"InternalRoute updated!",msg:c.internalroute.name?c.internalroute.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","internalroute"],angular.module("app.voice").controller("InternalRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.internalroutes=r||{count:0,rows:[]},v.table="internalroutes",v.listOrder="",v.listOrderAsc=null,v.selectedInternalRoutes=[],v.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"internal",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},v.editstate=function(e,t){n.go("app.voice.internalroutes.edit",{id:e.id,internalroute:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the internalroute?").htmlContent("<b>"+(e.name||"internalroute")+"</b> will be deleted.").ariaLabel("delete internalroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getInternalRoutes=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceExtension.get(v.query,f).$promise},v.createOrEditInternalRoute=function(e,t){i.show({controller:"CreateOrEditInternalRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/internalroutes/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{internalroute:t,internalroutes:v.internalroutes.rows,license:v.license,setting:v.setting}})},v.deleteInternalRoute=A,v.exportSelectedInternalRoutes=function(){var e=angular.copy(v.selectedInternalRoutes);return v.selectedInternalRoutes=[],e},v.deleteSelectedInternalRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected internalroutes?").htmlContent("<b>"+v.selectedInternalRoutes.length+" selected</b> will be deleted.").ariaLabel("delete InternalRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedInternalRoutes.forEach(function(e){A(e)}),v.selectedInternalRoutes=[]})},v.deselectInternalRoutes=function(){v.selectedInternalRoutes=[]},v.selectAllInternalRoutes=function(){v.selectedInternalRoutes=v.internalroutes.rows},l.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){v.contexts=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.internalroutes=e||{count:0,rows:[]}}function A(e){l.voiceExtension.delete({id:e.id}).$promise.then(function(){_.remove(v.internalroutes.rows,{id:e.id}),v.internalroutes.count-=1,v.internalroutes.rows.length||v.getInternalRoutes(),c.success({title:"InternalRoute deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];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:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getInternalRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","internalroutes","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("InternalRoutesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_MUSICONHOLD",u.musiconhold=angular.copy(r),u.musiconholds=s,u.newMusicOnHold=!1,u.musiconhold||(u.musiconhold={mode:"files"},u.title="VOICE.NEW_MUSICONHOLD",u.newMusicOnHold=!0),u.addNewMusicOnHold=function(){u.errors=[],l.voiceMusicOnHold.save(u.musiconhold).$promise.then(function(e){u.musiconholds.unshift(e.toJSON()),o.success({title:"MusicOnHold properly created",msg:u.musiconhold.name?u.musiconhold.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMusicOnHold=function(){u.errors=[],l.voiceMusicOnHold.update({id:u.musiconhold.id},u.musiconhold).$promise.then(function(e){var t=_.find(u.musiconholds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MusicOnHold properly saved!",msg:u.musiconhold.name?u.musiconhold.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMusicOnHold=function(e){u.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(){l.voiceMusicOnHold.delete({id:u.musiconhold.id}).$promise.then(function(){_.remove(u.musiconholds,{id:u.musiconhold.id}),o.success({title:"MusicOnHold properly deleted!",msg:(u.musiconhold.name||"musiconhold")+" has been deleted!"}),p(u.musiconhold)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","musiconholds","musiconhold","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditMusicOnHoldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.musiconhold={},c.musiconholdMohSounds={count:0,rows:[]},c.selectedMusicOnHoldMohSounds=[],c.query={fields:"createdAt,updatedAt,id,save_name,converted_format,audio,id,createdAt",limit:10,page:1},c.init=function(e){c.musiconhold=e,c.query.id=c.musiconhold.id,c.query.VoiceMusicOnHoldId=c.musiconhold.id,c.getMusicOnHoldMohSounds()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.voiceMusicOnHoldDownload=function(o,e){return l.sound.download({id:o.id,exists:!0}).$promise.then(function(e){var t=[e.buffer],n="mohSound"+o.id,a=new Blob(t,{type:e.type});n=o.converted_format?o.save_name+"."+o.converted_format:o.save_name;var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),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){o.show({controller:"CreateOrEditMohSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/musiconholds/edit/mohSounds/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{musiconhold:c.musiconhold,mohSound:t,mohSounds:c.musiconholdMohSounds.rows,license:null,setting:null}})},c.exportSelectedMusicOnHoldMohSounds=function(){var e=angular.copy(c.selectedMusicOnHoldMohSounds);return c.selectedMusicOnHoldMohSounds=[],e},c.deleteMusicOnHoldMohSound=g,c.deleteSelectedMusicOnHoldMohSounds=function(e){var t=o.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");o.show(t).then(function(){c.selectedMusicOnHoldMohSounds.forEach(function(e){g(e)}),c.selectedMusicOnHoldMohSounds=[]})},l.sound.get({fields:"name,id",sort:"name"}).$promise.then(function(e){c.sounds=_.keyBy(e.rows||[],"id")}).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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_MOHSOUND",u.mohSound=angular.copy(r),u.mohSounds=s,u.newMohSound=!1,u.mohSound||(u.mohSound={},u.title="VOICE.NEW_MOHSOUND",u.newMohSound=!0),t.params.id&&(u.mohSound.VoiceMusicOnHoldId=t.params.id),u.addNewMohSound=function(){u.errors=[],l.voiceMusicOnHold.addSound({id:t.params.id},u.mohSound).$promise.then(function(e){u.mohSounds.unshift(e.toJSON()),o.success({title:"MohSound properly created",msg:u.mohSound.name?u.mohSound.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMohSound=function(){u.errors=[],l.voiceMusicOnHold.update({id:u.mohSound.id},u.mohSound).$promise.then(function(e){var t=_.find(u.mohSounds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MohSound properly saved!",msg:u.mohSound.name?u.mohSound.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMohSound=function(e){u.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(){l.voiceMusicOnHold.delete({id:u.mohSound.id}).$promise.then(function(){_.remove(u.mohSounds,{id:u.mohSound.id}),o.success({title:"MohSound properly deleted!",msg:(u.mohSound.name||"mohSound")+" has been deleted!"}),p(u.mohSound)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.sound.get({fields:"name,id",sort:"name"}).$promise.then(function(e){u.sounds=e.rows||[]}).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","toasty","mohSounds","mohSound","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditMohSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.musiconhold=d||e.params.musiconhold||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoMusicOnHolds=function(){e.go("app.voice.musiconholds")},c.saveMusicOnHold=function(){s.voiceMusicOnHold.update({id:c.musiconhold.id},c.musiconhold).$promise.then(function(){r.success({title:"MusicOnHold updated!",msg:c.musiconhold.name?c.musiconhold.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","musiconhold"],angular.module("app.voice").controller("MusicOnHoldController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.musiconholds=r||{count:0,rows:[]},v.table="musiconholds",v.listOrder="",v.listOrderAsc=null,v.selectedMusicOnHolds=[],v.query={fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",defaultEntry:"false",limit:10,page:1},v.arraymode=_.keyBy([{option:"Files",value:"'files'"},{option:"Custom",value:"'custom'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysort=_.keyBy([{option:"Random",value:"'random'"},{option:"Alphabetical",value:"'alpha'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.voice.musiconholds.edit",{id:e.id,musiconhold:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the musiconhold?").htmlContent("<b>"+(e.name||"musiconhold")+"</b> will be deleted.").ariaLabel("delete musiconhold").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getMusicOnHolds=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceMusicOnHold.get(v.query,f).$promise},v.createOrEditMusicOnHold=function(e,t){i.show({controller:"CreateOrEditMusicOnHoldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/musiconholds/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{musiconhold:t,musiconholds:v.musiconholds.rows,license:v.license,setting:v.setting}})},v.deleteMusicOnHold=A,v.exportSelectedMusicOnHolds=function(){var e=angular.copy(v.selectedMusicOnHolds);return v.selectedMusicOnHolds=[],e},v.deleteSelectedMusicOnHolds=function(e){var t=i.confirm().title("Are you sure want to delete the selected musiconholds?").htmlContent("<b>"+v.selectedMusicOnHolds.length+" selected</b> will be deleted.").ariaLabel("delete MusicOnHolds").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedMusicOnHolds.forEach(function(e){A(e)}),v.selectedMusicOnHolds=[]})},v.deselectMusicOnHolds=function(){v.selectedMusicOnHolds=[]},v.selectAllMusicOnHolds=function(){v.selectedMusicOnHolds=v.musiconholds.rows};var h=!0,b=1;function f(e){v.musiconholds=e||{count:0,rows:[]}}function A(e){l.voiceMusicOnHold.delete({id:e.id}).$promise.then(function(){_.remove(v.musiconholds.rows,{id:e.id}),v.musiconholds.count-=1,v.musiconholds.rows.length||v.getMusicOnHolds(),c.success({title:"MusicOnHold deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceMusicOnHold"}];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:"SYSTEM:DELETEvoiceMusicOnHold",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getMusicOnHolds())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","musiconholds","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("MusicOnHoldsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,h,l,d,c){var b=this;function m(){var e=2,t=[];t.push({type:"outbound",app:"Set",appdata:"CDR(type)=outbound",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"CDR(destination)="+(b.outboundroute.cutdigits?"${EXTEN:"+b.outboundroute.cutdigits+"}":"${EXTEN}"),context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"outboundrouteid="+b.outboundroute.id,context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),b.outboundroute.hasOwnProperty("recordingFormat")&&"none"!==b.outboundroute.recordingFormat&&(t.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_FORMAT="+b.outboundroute.recordingFormat||"wav",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}));for(var n=0,a=0;n<b.outboundrouteApps.rows.length;n++,a=0){var i=b.outboundrouteApps.rows[n],o=[],s=[];i.intervals="*,*,*,*"!==i.interval?[i.interval]:i.IntervalId?_.map(_.filter(b.intervals.rows,{IntervalId:i.IntervalId}),"interval"):[],i.context=b.outboundroute.context,i.exten=b.outboundroute.exten,i.type&&(i.type=i.type.toLowerCase()),i.hasOwnProperty("tag")&&i.tag&&"--"!==i.tag&&o.push({type:i.type.toLowerCase(),app:"Set",appdata:"CDR(tag)="+i.tag,context:b.outboundroute.context,exten:b.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:b.outboundroute.id}),i.callerID?o.push({type:i.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)="+i.callerID+")",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:b.outboundroute.id}):o.push({type:i.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No number available)",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:b.outboundroute.id});for(var r=0;r<i.intervals.length;r++){var l=e+i.intervals.length,d=r===i.intervals.length-1?e+o.length+s.length+2:e+r+1;o.splice(r,0,{type:"outbound",app:"GotoIfTime",appdata:i.intervals[r]+"?"+b.outboundroute.context+",${EXTEN},"+l+":"+b.outboundroute.context+",${EXTEN},"+d,exten:b.outboundroute.exten,context:b.outboundroute.context,priority:e+r,VoiceExtensionId:b.outboundroute.id})}if("outboundDial"===i.appType){var c=_.find(b.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=b.outboundroute.cutdigits?(m.prefix||"")+"${EXTEN:"+b.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"!==b.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=o.length?_.last(o).priority+1:e,e=(s.length?_.last(s).priority:i.priority)+1,t=_.concat(t,o,[i],s)}t.push({type:"outbound",app:"Hangup",exten:b.outboundroute.exten,context:b.outboundroute.context,priority:e,VoiceExtensionId:b.outboundroute.id}),h.voiceExtension.addApplications({id:b.outboundroute.id},_.sortBy(t,"priority")).$promise.then(function(e){b.outboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function u(e){a.hide(e)}b.errors=[],b.setting=c,b.license=d,b.passwordPattern=b.setting&&b.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",b.title="VOICE.EDIT_OUTBOUNDROUTE",b.outboundroute=angular.copy(r),b.outboundroutes=s,b.newOutboundRoute=!1,b.outboundrouteApps={count:0,rows:[]},b.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}),b.outboundroute||(b.outboundroute={appdata:"Outbound Call",type:"outbound",context:"from-sip",recordingFormat:"none"},b.title="VOICE.NEW_OUTBOUNDROUTE",b.newOutboundRoute=!0),b.addNewOutboundRoute=function(){b.errors=[],h.voiceExtension.save(b.outboundroute).$promise.then(function(e){b.outboundroutes.unshift(e.toJSON()),o.success({title:"OutboundRoute properly created",msg:b.outboundroute.name?b.outboundroute.name+" has been created!":""}),u(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.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()})})},b.saveOutboundRoute=function(){b.errors=[],h.voiceExtension.update({id:b.outboundroute.id},b.outboundroute).$promise.then(function(e){var t=_.find(b.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){b.outboundrouteApps=e,m()})),o.success({title:"OutboundRoute properly saved!",msg:b.outboundroute.name?b.outboundroute.name+" has been saved!":""}),u(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.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()})})},b.deleteOutboundRoute=function(n){h.voicePrefix.get({VoiceExtensionId:r.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"});b.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:b.outboundroute.id}).$promise.then(function(){_.remove(b.outboundroutes,{id:b.outboundroute.id}),o.success({title:"OutboundRoute properly deleted!",msg:(b.outboundroute.name||"outboundroute")+" has been deleted!"}),u(b.outboundroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.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(){})})},b.getDateFromString=function(e){return new Date(e)},b.rewriteRouting=m,b.closeDialog=u,h.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){b.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","toasty","outboundroutes","outboundroute","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditOutboundRouteDialogController",e)}(),function(){"use strict";function e(b,i,a,o,t,e,n){var f=this;function s(e,t){if(f.outboundrouteApps.rows.length){var n=f.outboundrouteApps.rows[t]?f.outboundrouteApps.rows[t]:f.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:f.outboundroute}}).then(function(e){e&&(e.id?f.outboundrouteApps.rows[t]=e:f.outboundrouteApps.rows.splice(t,0,e),r())}).catch(function(e){e&&o.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:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),n.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:t++,VoiceExtensionId:f.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"outboundrouteid="+f.outboundroute.id,context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),f.outboundroute.hasOwnProperty("recordingFormat")&&"none"!==f.outboundroute.recordingFormat&&(n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_FORMAT="+f.outboundroute.recordingFormat||"wav",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}));for(var a=0,i=0;a<f.outboundrouteApps.rows.length;a++,i=0){var o=f.outboundrouteApps.rows[a],s=[],r=[];o.intervals="*,*,*,*"!==o.interval?[o.interval]:o.IntervalId?_.map(_.filter(f.intervals.rows,{IntervalId:o.IntervalId}),"interval"):[],o.context=f.outboundroute.context,o.exten=f.outboundroute.exten,o.type&&(o.type=o.type.toLowerCase()),o.hasOwnProperty("tag")&&o.tag&&"--"!==o.tag&&s.push({type:o.type.toLowerCase(),app:"Set",appdata:"CDR(tag)="+o.tag,context:f.outboundroute.context,exten:f.outboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:f.outboundroute.id}),o.callerID?s.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)="+o.callerID+")",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:f.outboundroute.id}):s.push({type:o.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:o.intervals.length+t+i++,VoiceExtensionId:f.outboundroute.id});for(var l=0;l<o.intervals.length;l++){var d=t+o.intervals.length,c=l===o.intervals.length-1?t+s.length+r.length+2:t+l+1;s.splice(l,0,{type:"outbound",app:"GotoIfTime",appdata:o.intervals[l]+"?"+f.outboundroute.context+",${EXTEN},"+d+":"+f.outboundroute.context+",${EXTEN},"+c,exten:f.outboundroute.exten,context:f.outboundroute.context,priority:t+l,VoiceExtensionId:f.outboundroute.id})}if(e&&"outboundDial"===o.appType){var m=_.find(f.apps,{appType:"outboundDial"});if(m&&m.fields){for(var u={},p=o.appdata.split(","),g=[],v=0,h=m.fields.length;v<h;v++)if(m.fields[v].hasOwnProperty("param"))switch(m.fields[v].name){case"trunk":u.trunk=p[m.fields[v].param].split("/")[1],u.phone=p[m.fields[v].param].split("/")[2],u.prefix=u.phone?u.phone.split("$")[0]:void 0,u.phone=f.outboundroute.cutdigits?(u.prefix||"")+"${EXTEN:"+f.outboundroute.cutdigits+"}":(u.prefix||"")+"${EXTEN}",g[m.fields[v].param]=["SIP",u.trunk,u.phone].join("/");break;case"options":u.options=p[m.fields[v].param],"none"!==f.outboundroute.recordingFormat?u.options.indexOf("U(xcally-mixmonitor-context)")<0&&(u.options+="U(xcally-mixmonitor-context)"):u.options=u.options.replace("U(xcally-mixmonitor-context)",""),g[m.fields[v].param]=u.options;break;default:g[m.fields[v].param]=p[m.fields[v].param]}o.appdata=g.join(",")}}o.priority=s.length?_.last(s).priority+1:t,t=(r.length?_.last(r).priority:o.priority)+1,n=_.concat(n,s,[o],r)}n.push({type:"outbound",app:"Hangup",exten:f.outboundroute.exten,context:f.outboundroute.context,priority:t,VoiceExtensionId:f.outboundroute.id}),b.voiceExtension.addApplications({id:f.outboundroute.id},_.sortBy(n,"priority")).$promise.then(function(e){f.outboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function l(e){f.outboundrouteApps=e||{count:0,rows:[]}}f.currentUser=n.getCurrentUser(),f.outboundroute={},f.outboundrouteApps={count:0,rows:[]},f.selectedOutboundRouteApps=[],f.query={sort:"priority"},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.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},f.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){s(e,e.newIndex)},onSort:function(e){r()}},f.init=function(e){f.outboundroute=e,t.on("voiceExtension:update",f.onVoiceExtensionUpdate),f.query.VoiceExtensionId=e.id,f.query.isApp=!0,f.query.nolimit=!0,f.getOutboundRouteApps(),f.getIntervals()},f.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(){f.outboundrouteApps.rows.splice(t,1),r()},function(){console.log("CANCEL")})},f.getOutboundRouteApps=function(){f.promise=b.voiceExtension.get(f.query,l).$promise},f.editOutboundRouteApp=s,f.editInterval=function(e,t){if(f.outboundrouteApps.rows.length){var n=f.outboundrouteApps.rows[t]?f.outboundrouteApps.rows[t]:f.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:[]}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,r())})}},f.deleteOutboundRouteApp=function(e){_.remove(f.outboundrouteApps.rows,{id:e.id}),r(),o.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},f.deleteSelectedOutboundRouteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+f.selectedOutboundRouteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){f.selectedOutboundRouteApps.forEach(function(e){_.remove(f.outboundrouteApps.rows,{id:e.id})}),f.selectedOutboundRouteApps=[],r()})},f.rewriteRouting=r,f.getIntervals=function(){return b.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){f.intervals=e}).catch(function(e){console.error(e)})},f.onVoiceExtensionUpdate=function(e){e.VoiceExtensionId===f.outboundroute.id&&r(!0)},e.$on("$destroy",function(){t.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){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.custom=angular.copy(n),o.custom.appdata)switch(o.custom.appType?o.custom.appType.toLowerCase():o.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.custom.appdata.split(",");o.custom.key=s[0],o.custom.language=s[1],o.custom.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.custom.appdata.split(",");o.custom.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.custom.text=s.slice(1,s.length).join(",");break;case"message":o.custom.text=o.custom.appdata;break;case"set":o.custom.name=o.custom.appdata.split("=")[0],o.custom.value=o.custom.appdata.split("=")[1];break;case"agi":o.custom.project=o.custom.appdata;break;default:var r=o.custom.appdata.split(",");o.custom.app=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.custom.appdata=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outbounddial"===o.custom.appType.toLowerCase()&&(o.custom.prefix=o.custom.phone?o.custom.phone.split("$")[0]:void 0,o.custom.callerId=o.custom.callerID?"CALLERID(all)="+o.custom.callerID:void 0),o.saveOutboundRouteApp=function(){o.errors=[];var e=[];o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outboundDial"===o.custom.appType&&(o.custom.phone=a.cutdigits?(o.custom.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.custom.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.custom.options+="U(xcally-mixmonitor-context)"):o.custom.options=o.custom.options.replace("U(xcally-mixmonitor-context)",""));if(o.custom.appType&&"custom"===o.custom.appType);else switch((o.custom.app||o.custom.appType).toLowerCase()){case"set":o.custom.appdata=o.custom.name+"="+o.custom.value;break;case"custom":break;default:e[0]=o.custom.app,e[1]=o.custom.appdata,o.custom.appdata=e.join(",")}l(o.custom)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","outboundrouteApp","outboundroute","api"],angular.module("app.voice").controller("EditoutboundAppcustomDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditoutboundAppintervalDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.outbounddial=angular.copy(e),o.outbounddial.appdata)switch(o.outbounddial.appType?o.outbounddial.appType.toLowerCase():o.outbounddial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.outbounddial.appdata.split(",");o.outbounddial.key=s[0],o.outbounddial.language=s[1],o.outbounddial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.outbounddial.appdata.split(",");o.outbounddial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.outbounddial.text=s.slice(1,s.length).join(",");break;case"message":o.outbounddial.text=o.outbounddial.appdata;break;case"set":o.outbounddial.name=o.outbounddial.appdata.split("=")[0],o.outbounddial.value=o.outbounddial.appdata.split("=")[1];break;case"agi":o.outbounddial.project=o.outbounddial.appdata;break;default:var r=o.outbounddial.appdata.split(",");o.outbounddial.trunk=r[0].split("/")[1],o.outbounddial.phone=r[0].split("/")[2],o.outbounddial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.outbounddial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.outbounddial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.outbounddial.type&&"outbound"===o.outbounddial.type.toLowerCase()&&"outbounddial"===o.outbounddial.appType.toLowerCase()&&(o.outbounddial.prefix=o.outbounddial.phone?o.outbounddial.phone.split("$")[0]:void 0,o.outbounddial.callerId=o.outbounddial.callerID?"CALLERID(all)="+o.outbounddial.callerID:void 0),o.saveOutboundRouteApp=function(){o.errors=[];var e=[];o.outbounddial.type&&"outbound"===o.outbounddial.type.toLowerCase()&&"outboundDial"===o.outbounddial.appType&&(o.outbounddial.phone=a.cutdigits?(o.outbounddial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.outbounddial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.outbounddial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.outbounddial.options+="U(xcally-mixmonitor-context)"):o.outbounddial.options=o.outbounddial.options.replace("U(xcally-mixmonitor-context)",""));if(o.outbounddial.appType&&"custom"===o.outbounddial.appType);else switch((o.outbounddial.app||o.outbounddial.appType).toLowerCase()){case"set":o.outbounddial.appdata=o.outbounddial.name+"="+o.outbounddial.value;break;case"custom":break;default:e[0]=["SIP",o.outbounddial.trunk,o.outbounddial.phone].join("/"),e[1]=o.outbounddial.timeout,e[2]=o.outbounddial.options,e[3]=o.outbounddial.url,o.outbounddial.appdata=e.join(",")}l(o.outbounddial)},o.closeDialog=l,i.trunk.get({fields:"name",sort:"name"}).$promise.then(function(e){o.trunks=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.tag.get({fields:"name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","outboundrouteApp","outboundroute","api"],angular.module("app.voice").controller("EditoutboundAppoutbounddialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.outboundroute=d||e.params.outboundroute||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoOutboundRoutes=function(){e.go("app.voice.outboundroutes")},c.saveOutboundRoute=function(){s.voiceExtension.update({id:c.outboundroute.id},c.outboundroute).$promise.then(function(){r.success({title:"OutboundRoute updated!",msg:c.outboundroute.name?c.outboundroute.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","outboundroute"],angular.module("app.voice").controller("OutboundRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.outboundroutes=r||{count:0,rows:[]},v.table="outboundroutes",v.listOrder="",v.listOrderAsc=null,v.selectedOutboundRoutes=[],v.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,recordingFormat,cutdigits,description",type:"outbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},v.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"),"")}),v.editstate=function(e,t){n.go("app.voice.outboundroutes.edit",{id:e.id,outboundroute:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the outboundroute?").htmlContent("<b>"+(e.name||"outboundroute")+"</b> will be deleted.").ariaLabel("delete outboundroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getOutboundRoutes=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceExtension.get(v.query,f).$promise},v.createOrEditOutboundRoute=function(e,t){i.show({controller:"CreateOrEditOutboundRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/outboundroutes/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{outboundroute:t,outboundroutes:v.outboundroutes.rows,license:v.license,setting:v.setting}})},v.deleteOutboundRoute=A,v.exportSelectedOutboundRoutes=function(){var e=angular.copy(v.selectedOutboundRoutes);return v.selectedOutboundRoutes=[],e},v.deleteSelectedOutboundRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected outboundroutes?").htmlContent("<b>"+v.selectedOutboundRoutes.length+" selected</b> will be deleted.").ariaLabel("delete OutboundRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedOutboundRoutes.forEach(function(e){A(e)}),v.selectedOutboundRoutes=[]})},v.deselectOutboundRoutes=function(){v.selectedOutboundRoutes=[]},v.selectAllOutboundRoutes=function(){v.selectedOutboundRoutes=v.outboundroutes.rows},l.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){v.contexts=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.outboundroutes=e||{count:0,rows:[]}}function A(t){l.voicePrefix.get({VoiceExtensionId:t.id}).$promise.then(function(e){if(e&&e.rows&&0<e.rows.length)return c.error({title:"Outbound route not deleted!",msg:"You can't remove an outbound route associated to an out prefix"});l.voiceExtension.delete({id:t.id}).$promise.then(function(){_.remove(v.outboundroutes.rows,{id:t.id}),v.outboundroutes.count-=1,v.outboundroutes.rows.length||v.getOutboundRoutes(),c.success({title:"OutboundRoute deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];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:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getOutboundRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","outboundroutes","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("OutboundRoutesController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d,c,m){var u=this,p=!0;function g(){var e=i.localStorage.getItem("motion2.realtime.abandoned.voice.contacts:"+u.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(u.query=_.merge(e.query,_.omit(u.query,["sort","limit","page"])),u.query=_.omit(u.query,"filter")),s.disposition.get({MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null"}).$promise.then(function(e){u.disposition=e?e.rows:[]}).catch(function(e){console.log(e)}),s.user.getQueues({id:r.getCurrentUser().id,fields:"id,name",channel:"voice",type:"inbound",nolimit:!0}).$promise.then(function(e){u.queues=e||{count:0,rows:[]},u.queuesMap=_.mapValues(_.keyBy(u.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){u.getContacts()})}function v(e){u.contacts=e||{count:0,rows:[]},p=!1,u.refresh=!0}u.showTooltip=!1,u.refresh=!0,u.disable=[],u.agents=m||[],u.currentUser=r.getCurrentUser(),u.localizationMap=c,u.pickerModel={dateStart:null,dateEnd:null},u.queues={},u.contacts={count:0,rows:[]},u.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},u.clearAll=function(){u.query.dateStart=void 0,u.query.dateEnd=void 0,u.pickerModel={dateStart:null,dateEnd:null},u.getContacts()},u.getContacts=function(){u.refresh=!1,u.query.dateStart=void 0,u.query.dateEnd=void 0,u.pickerModel.dateStart&&!p&&(u.query.dateStart=u.pickerModel.dateStart,u.query.dateEnd=u.pickerModel.dateEnd);u.query.queue=u.query.queue,u.query.offset=(u.query.page-1)*u.query.limit,i.localStorage.setItem("motion2.realtime.abandoned.voice.contacts:"+u.currentUser.id,JSON.stringify({query:_.omit(u.query,"queue")})),u.promise=s.voiceQueueReport.getVoiceQueuesReport(u.query,v).$promise},u.refreshContacts=function(){u.showTooltip=!1,u.getContacts()},u.onInit=g,u.assignedA=function(e,t){e&&(u.disable[e.id]=!0,s.voiceQueueReport.update({id:e.id,lastAssignedTo:t?t.name:null,assigned:!!t}).$promise.catch(function(e){console.log(e)}).finally(function(){u.disable[e.id]=!1}))},u.disposed=function(e,t){e&&s.voiceQueueReport.update({id:e.id,disposition:t||null}).$promise.catch(function(e){console.log(e)})},u.onSavevoiceQueueReport=function(e){e&&u.queuesMap&&"inbound"===e.type&&u.queuesMap[e.queue]&&(u.showTooltip=!0)},u.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(u.contacts.rows,["id",e.id]);0<=t&&_.merge(u.contacts.rows[t],e)}},l.onWithoutApply("voiceQueueReport:save",u.onSavevoiceQueueReport),l.on("voiceQueueReport:update",u.onUpdatevoiceQueueReport),g();var h=!0,b=1;e.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=b),u.getContacts())}),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","agents"],angular.module("app.voice").controller("AbandonedCallsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,o){var s=this;s.calls=i||{rows:[],count:0},s.query={limit:10,page:1},s.channelStatus=o.channelStatusOut,s.onSave=function(e){var t=_.find(s.calls.rows,{channel:e.channel});e.channelstatedesc=e.dialstatus?"up":"ring",t?_.merge(t,e):e.channel&&s.calls.rows.push(e)},s.onRemove=function(e){var t=_.findIndex(s.calls.rows,{channel:e.channel});0<=t&&(s.calls.rows[t].status="hangup");n(function(){s.calls.rows.splice(t,1)},5e3)},a.on("voice_outbound_channel:save",s.onSave),a.on("voice_outbound_channel:remove",s.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,o,s,r,l){var d=this;d.agents=n||{count:0,rows:[]},d.rpcVoiceQueuesChannels=i?_.keyBy(i.rows?_.filter(i.rows,{type:"inbound"}):[],"uniqueid"):{},d.queryChannels={limit:10,page:1},d.getSize=function(e){return _.size(e)},d.onSave=function(e){"inbound"===e.type&&(d.rpcVoiceQueuesChannels[e.uniqueid]=e)},d.onRemove=function(e){d.rpcVoiceQueuesChannels[e.uniqueid]&&delete d.rpcVoiceQueuesChannels[e.uniqueid]},d.hangup=function(t){return o.rpc.getVoiceQueuesChannelHangup({uniqueid:t}).$promise.then(function(e){l.success({title:"Channel "+t+" properly hangup!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},d.redirectToAgent=function(t,e,n){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e,context:n}).$promise.then(function(e){l.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},d.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){l.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},s.on("voice_queue_channel:save",d.onSave),s.on("voice_queue_channel:remove",d.onRemove),e.$on("$destroy",function(){s.removeAllListeners("voice_queue_channel:save"),s.removeAllListeners("voice_queue_channel:remove")})}e.$inject=["$scope","$timeout","$mdDialog","agents","rpcVoiceQueuesChannels","api","socket","helperClasses","toasty"],angular.module("app.voice").controller("QueueCallsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r){var l=this,d=["total","answered","unmanaged","sumHoldTime","sumDuration","sumBillable"];function c(){_.forIn(l.queues,function(e,t){l.rpcQueues[t]&&_.merge(e,_.pick(l.rpcQueues[t],d))})}l.count=a.count,l.queues=a?_.keyBy(a.rows?a.rows:[],"id"):{},l.rpcQueues=i?_.keyBy(i.rows?i.rows:[],"id"):{},r.hasRole("admin")?l.query={type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1}:l.query={id:r.getCurrentUser().id,channel:"voice",type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1},l.success=p,l.getQueues=function(){l.query.offset=(l.query.page-1)*l.query.limit,r.hasRole("admin")?l.promise=o.voiceQueue.get(l.query,p).$promise:l.promise=o.user.getQueues(l.query,p).$promise},l.onSave=function(e){l.queues[e.id]&&_.merge(l.queues[e.id],_.pick(e,d))},l.$onInit=c,s.onWithoutApply("voice_queue:save",l.onSave),l.interval=t(function(){},999);var m=!0,u=1;function p(e){l.count=e.count,l.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},c()}e.$watch("vm.query.filter",function(e,t){m?n(function(){m=!1}):(t||(u=l.query.page),e!==t&&(l.query.page=1),e||(l.query.page=u),l.getQueues())}),e.$on("$destroy",function(){s.removeAllListeners("voice_queue:save"),l.interval&&t.cancel(l.interval)})}e.$inject=["$scope","$timeout","$interval","queues","rpcQueues","api","socket","Auth"],angular.module("app.voice").controller("QueueParamsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.voiceQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].VoiceQueueId].paused++,u.queues[e[t].rows[n].VoiceQueueId].loggedInDb++,u.queues[e[t].rows[n].VoiceQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].VoiceQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"voice",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.voiceQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!0}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.VoiceQueueId]&&(u.queues[e.VoiceQueueId].loggedInDb+=1,u.queues[e.VoiceQueueId].agents[e.UserId]=e.VoiceQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.VoiceQueueId]&&0<u.queues[e.VoiceQueueId].loggedInDb&&(u.queues[e.VoiceQueueId].loggedInDb-=1,delete u.queues[e.VoiceQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.onWithoutApply("voice_queue:save",u.onSave),u.interval=o(function(){},999),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("voice_queue:save"),u.interval&&o.cancel(u.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","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,o,s,r){var l=this,d=["fullname","internal","state","status"];function c(){_.forIn(l.telephones,function(e,t){l.rpcTelephones[t]&&_.merge(e,_.pick(l.rpcTelephones[t],d))})}l.count=a.count,l.attributes=["fullname","internal","state","status","address"],l.telephones=a?_.keyBy(a.rows?a.rows:[],"id"):{},l.rpcTelephones=i?_.keyBy(i.rows?i.rows:[],"id"):{},l.query={fields:"id,fullname,internal",role:"telephone",sort:"-updatedAt",limit:10,page:1},l.statusClass=r.status,l.stateClass=r.state,l.success=p,l.$onInit=c,l.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},l.getTelephones=function(){l.query.offset=(l.query.page-1)*l.query.limit,l.promise=o.user.get(l.query,p).$promise},l.onSave=function(e){l.telephones[e.id]&&_.merge(l.telephones[e.id],_.pick(e,d))},s.on("telephone:save",l.onSave);var m=!0,u=1;function p(e){l.telephones=e?_.keyBy(e.rows?e.rows:[],"id"):{},c()}e.$watch("vm.query.filter",function(e,t){m?n(function(){m=!1}):(t||(u=l.query.page),e!==t&&(l.query.page=1),e||(l.query.page=u),l.getTelephones())}),e.$on("$destroy",function(){s.removeAllListeners("telephone:save")})}e.$inject=["$scope","$timeout","$mdDialog","telephones","rpcTelephones","api","socket","helperClasses"],angular.module("app.voice").controller("TelephonesVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l){var d=this,c=["status","stateRegistry","registry","host","port","internal","state","status"];function m(){for(var e,t=0;t<d.trunks.length;t+=1)0<=(e=_.findIndex(d.rpcTrunks,["id",d.trunks[t].id]))&&_.merge(d.trunks[t],_.pick(d.rpcTrunks[e],c))}function u(e,t,n){0<=t&&_.merge(e[t],_.pick(n,c))}d.count=a.count,d.trunks=a?a.rows:[],d.rpcTrunks=i&&i.rows?i.rows:[],d.query={fields:"id,name",active:!0,sort:"-updatedAt",limit:10,page:1},d.statusClass=r.status,d.stateClass=r.state,d.success=v,d.$onInit=m,d.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},d.getTrunks=function(){d.query.offset=(d.query.page-1)*d.query.limit,d.promise=o.trunk.get(d.query,v).$promise},d.goToTrunk=function(e,t){l.go("app.tools.trunks.edit",{id:t.id})},d.onSave=function(e){var t=_.findIndex(d.trunks,["id",e.id]),n=_.findIndex(d.rpcTrunks,["id",e.id]);u(d.trunks,t,e),u(d.rpcTrunks,n,e)},s.on("trunk:save",d.onSave);var p=!0,g=1;function v(e){d.count=e.count,d.trunks=e&&e.rows?e.rows:[],m()}e.$watch("vm.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=d.query.page),e!==t&&(d.query.page=1),e||(d.query.page=g),d.getTrunks())}),e.$on("$destroy",function(){s.removeAllListeners("trunk:save")})}e.$inject=["$scope","$timeout","$mdDialog","trunks","rpcTrunks","api","socket","helperClasses","$state"],angular.module("app.voice").controller("TrunksVoiceRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_VOICEMAIL",u.voicemail=angular.copy(r),u.voicemails=s,u.newVoicemail=!1,u.voicemail||(u.voicemail={attach:"no"},u.title="VOICE.NEW_VOICEMAIL",u.newVoicemail=!0),u.addNewVoicemail=function(){u.errors=[],l.voiceMail.save(u.voicemail).$promise.then(function(e){u.voicemails.unshift(e.toJSON()),o.success({title:"Voicemail properly created",msg:u.voicemail.name?u.voicemail.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVoicemail=function(){u.errors=[],l.voiceMail.update({id:u.voicemail.id},u.voicemail).$promise.then(function(e){var t=_.find(u.voicemails,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Voicemail properly saved!",msg:u.voicemail.name?u.voicemail.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVoicemail=function(e){u.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(){l.voiceMail.delete({id:u.voicemail.id}).$promise.then(function(){_.remove(u.voicemails,{id:u.voicemail.id}),o.success({title:"Voicemail properly deleted!",msg:(u.voicemail.name||"voicemail")+" has been deleted!"}),p(u.voicemail)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","voicemails","voicemail","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditVoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.voicemail={},c.voicemailMessages={count:0,rows:[]},c.selectedVoicemailMessages=[],c.query={fields:"createdAt,updatedAt,id,callerid,duration,audio,stamp,msg_id",sort:"-stamp",limit:10,page:1},c.init=function(e){c.voicemail=e,c.query.id=c.voicemail.id,c.getVoicemailMessages()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.voiceMailMessageDownload=function(o,e){return l.voiceMailMessage.download({id:o.id,exists:!0}).$promise.then(function(e){var t=[e.buffer],n="message"+o.id,a=new Blob(t,{type:e.type});n=o.msg_id+".wav";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),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){o.show({controller:"CreateOrEditMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicemails/edit/messages/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicemail:c.voicemail,message:t,messages:c.voicemailMessages.rows,license:null,setting:null}})},c.exportSelectedVoicemailMessages=function(){var e=angular.copy(c.selectedVoicemailMessages);return c.selectedVoicemailMessages=[],e},c.deleteVoicemailMessage=g,c.deleteSelectedVoicemailMessages=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.voicemail=d||e.params.voicemail||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoVoicemails=function(){e.go("app.voice.voicemails")},c.saveVoicemail=function(){s.voiceMail.update({id:c.voicemail.id},c.voicemail).$promise.then(function(){r.success({title:"Voicemail updated!",msg:c.voicemail.name?c.voicemail.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMail",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","voicemail"],angular.module("app.voice").controller("VoicemailController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.voicemails=r||{count:0,rows:[]},v.table="voicemails",v.listOrder="",v.listOrderAsc=null,v.selectedVoicemails=[],v.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},v.arrayattach=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayenvelope=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraydelete=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.voice.voicemails.edit",{id:e.id,voicemail:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the voicemail?").htmlContent("<b>"+(e.name||"voicemail")+"</b> will be deleted.").ariaLabel("delete voicemail").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getVoicemails=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceMail.get(v.query,f).$promise},v.createOrEditVoicemail=function(e,t){i.show({controller:"CreateOrEditVoicemailDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicemails/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicemail:t,voicemails:v.voicemails.rows,license:v.license,setting:v.setting}})},v.deleteVoicemail=A,v.exportSelectedVoicemails=function(){var e=angular.copy(v.selectedVoicemails);return v.selectedVoicemails=[],e},v.deleteSelectedVoicemails=function(e){var t=i.confirm().title("Are you sure want to delete the selected voicemails?").htmlContent("<b>"+v.selectedVoicemails.length+" selected</b> will be deleted.").ariaLabel("delete Voicemails").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVoicemails.forEach(function(e){A(e)}),v.selectedVoicemails=[]})},v.deselectVoicemails=function(){v.selectedVoicemails=[]},v.selectAllVoicemails=function(){v.selectedVoicemails=v.voicemails.rows};var h=!0,b=1;function f(e){v.voicemails=e||{count:0,rows:[]}}function A(e){l.voiceMail.delete({id:e.id}).$promise.then(function(){_.remove(v.voicemails.rows,{id:e.id}),v.voicemails.count-=1,v.voicemails.rows.length||v.getVoicemails(),c.success({title:"Voicemail deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceMail"}];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:"SYSTEM:DELETEvoiceMail",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVoicemails())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","voicemails","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoicemailsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_VOICEPREFIX",u.voicePrefix=angular.copy(r),u.voicePrefixes=s,u.newvoicePrefix=!1,u.voicePrefix||(u.voicePrefix={},u.title="VOICE.NEW_VOICEPREFIX",u.newvoicePrefix=!0),u.addNewvoicePrefix=function(){u.errors=[],l.voicePrefix.save(u.voicePrefix).$promise.then(function(e){u.voicePrefixes.unshift(e.toJSON()),o.success({title:"voicePrefix properly created",msg:u.voicePrefix.name?u.voicePrefix.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.savevoicePrefix=function(){u.errors=[],l.voicePrefix.update({id:u.voicePrefix.id},u.voicePrefix).$promise.then(function(e){var t=_.find(u.voicePrefixes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"voicePrefix properly saved!",msg:u.voicePrefix.name?u.voicePrefix.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deletevoicePrefix=function(e){u.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(){l.voicePrefix.delete({id:u.voicePrefix.id}).$promise.then(function(){_.remove(u.voicePrefixes,{id:u.voicePrefix.id}),o.success({title:"voicePrefix properly deleted!",msg:(u.voicePrefix.name||"voicePrefix")+" has been deleted!"}),p(u.voicePrefix)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){u.outboundRoutes=e.rows||[]}).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","toasty","voicePrefixes","voicePrefix","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditvoicePrefixDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.voicePrefix[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.voicePrefix.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UservoicePrefix?"penalty "+e.UservoicePrefix.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UservoicePrefix?"penalty "+e.UservoicePrefix.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.voicePrefix=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,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){a.voicePrefix[t?"removeAgents":"addAgents"]({id:l.voicePrefix.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"voicePrefix properly "+(t?"removed":"added"),msg:"voicePrefix has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:voicePrefix.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","voicePrefix","voicePrefixes","realtime","$translate","Auth"],angular.module("app.voice").controller("voicePrefixagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.voicePrefixes=r||{count:0,rows:[]},v.table="voicePrefixes",v.listOrder="",v.listOrderAsc=null,v.selectedVoicePrefixes=[],v.query={fields:"createdAt,updatedAt,id,name,VoiceExtensionId,callerIdAll,description",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditvoicePrefixDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{voicePrefix:e,voicePrefixes:v.voicePrefixes.rows,license:v.license,setting:null}})},v.agentadddialog=function(e,t){i.show({controller:"voicePrefixagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{voicePrefix:e,voicePrefixes:v.voicePrefixes?v.voicePrefixes.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the voicePrefix?").htmlContent("<b>"+(e.name||"voicePrefix")+"</b> will be deleted.").ariaLabel("delete voicePrefix").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getVoicePrefixes=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voicePrefix.get(v.query,f).$promise},v.createOrEditvoicePrefix=function(e,t){i.show({controller:"CreateOrEditvoicePrefixDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicePrefix:t,voicePrefixes:v.voicePrefixes.rows,license:v.license,setting:v.setting}})},v.deletevoicePrefix=A,v.exportSelectedVoicePrefixes=function(){var e=angular.copy(v.selectedVoicePrefixes);return v.selectedVoicePrefixes=[],e},v.deleteSelectedVoicePrefixes=function(e){var t=i.confirm().title("Are you sure want to delete the selected voicePrefixes?").htmlContent("<b>"+v.selectedVoicePrefixes.length+" selected</b> will be deleted.").ariaLabel("delete voicePrefixs").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVoicePrefixes.forEach(function(e){A(e)}),v.selectedVoicePrefixes=[]})},v.deselectVoicePrefixes=function(){v.selectedVoicePrefixes=[]},v.selectAllVoicePrefixes=function(){v.selectedVoicePrefixes=v.voicePrefixes.rows},l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){v.outboundRoutes=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.voicePrefixes=e||{count:0,rows:[]}}function A(e){l.voicePrefix.delete({id:e.id}).$promise.then(function(){_.remove(v.voicePrefixes.rows,{id:e.id}),v.voicePrefixes.count-=1,v.voicePrefixes.rows.length||v.getVoicePrefixes(),c.success({title:"voicePrefix deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoicePrefix"}];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:"SYSTEM:DELETEvoicePrefix",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVoicePrefixes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","voicePrefixes","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoicePrefixesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_VOICEQUEUE",u.voiceQueue=angular.copy(r),u.voiceQueues=s,u.newVoiceQueue=!1,u.voiceQueue||(u.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"},u.title="VOICE.NEW_VOICEQUEUE",u.newVoiceQueue=!0),u.addNewVoiceQueue=function(){u.errors=[],l.voiceQueue.save(u.voiceQueue).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"voice",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.voiceQueues.unshift(e.toJSON()),o.success({title:"VoiceQueue properly created",msg:u.voiceQueue.name?u.voiceQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVoiceQueue=function(){u.errors=[],l.voiceQueue.update({id:u.voiceQueue.id},u.voiceQueue).$promise.then(function(e){var t=_.find(u.voiceQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceQueue properly saved!",msg:u.voiceQueue.name?u.voiceQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVoiceQueue=function(e){u.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(){l.voiceQueue.delete({id:u.voiceQueue.id}).$promise.then(function(){return l.voiceQueue.getAgents({id:u.voiceQueue.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.voiceQueue.id],channel:"voice",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.voiceQueues,{id:u.voiceQueue.id}),o.success({title:"VoiceQueue properly deleted!",msg:(u.voiceQueue.name||"voiceQueue")+" has been deleted!"}),p(u.voiceQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","voiceQueues","voiceQueue","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditVoiceQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.voiceQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.voiceQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.voiceQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,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){a.voiceQueue[t?"removeAgents":"addAgents"]({id:l.voiceQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"VoiceQueue properly "+(t?"removed":"added"),msg:"VoiceQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:voiceQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","voiceQueue","voiceQueues","realtime","$translate","Auth"],angular.module("app.voice").controller("VoiceQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.voiceQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("VOICE.ALL_TEAMS"),labelSelected:i.instant("VOICE.SELECTED_TEAMS"),transferCallback:function(e,t){a.voiceQueue[t?"removeTeams":"addTeams"]({id:o.voiceQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:voiceQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.voiceQueue.getTeams({id:o.voiceQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","voiceQueue","$translate"],angular.module("app.voice").controller("VoiceQueueteamaddController",e)}(),function(){"use strict";function e(n,e,a,i,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.voiceQueue=d||n.params.voiceQueue||{},c.selectedTab=n.params.tab||0,c.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:c.voiceQueues?c.voiceQueues.rows:[]}})},c.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:c.voiceQueues?c.voiceQueues.rows:[],realtime:!1}})},c.gotogoto=function(e,t){n.go("app.voice.realtime.queues",{})},c.alert=r.info,c.gotoVoiceQueues=function(){n.go("app.voice.voiceQueues")},c.saveVoiceQueue=function(){s.voiceQueue.update({id:c.voiceQueue.id},c.voiceQueue).$promise.then(function(){r.success({title:"VoiceQueue updated!",msg:c.voiceQueue.name?c.voiceQueue.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceMusicOnHold.get({fields:"name",nolimit:"true"}).$promise.then(function(e){c.musiconholds=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmusiconholds",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.sound.get({fields:"name,save_name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.sounds=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","license","setting","api","toasty","Auth","voiceQueue"],angular.module("app.voice").controller("VoiceQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.voiceQueues=r||{count:0,rows:[]},v.table="voiceQueues",v.listOrder="",v.listOrderAsc=null,v.selectedVoiceQueues=[],v.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",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,page:1},v.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"),"")}),v.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:"unknoww",value:"'unknown'"},{option:"wrapup",value:"'wrapup'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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:"unknoww",value:"'unknown'"},{option:"wrapup",value:"'wrapup'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayrandom_periodic_announce=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayannounce_holdtime=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Once",value:"'once'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arrayreportholdtime=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayautopause=_.keyBy([{option:"Yes",value:"'all'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayringinuse=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraytimeoutrestart=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arraysetinterfacevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysetqueuevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysetqueueentryvar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.voice.voiceQueues.edit",{id:e.id,voiceQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"VoiceQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:v.voiceQueues?v.voiceQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"VoiceQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:v.voiceQueues?v.voiceQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the voiceQueue?").htmlContent("<b>"+(e.name||"voiceQueue")+"</b> will be deleted.").ariaLabel("delete voiceQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.voice.realtime.queues",{})},v.success=f,v.getVoiceQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,m.hasRole("admin")?v.promise=l.voiceQueue.get(v.query,f).$promise:(v.query.id=v.currentUser.id,v.promise=l.user.getQueues(v.query,f).$promise)},v.createOrEditVoiceQueue=function(e,t){i.show({controller:"CreateOrEditVoiceQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceQueue:t,voiceQueues:v.voiceQueues.rows,license:v.license,setting:v.setting}})},v.deleteVoiceQueue=A,v.exportSelectedVoiceQueues=function(){var e=angular.copy(v.selectedVoiceQueues);return v.selectedVoiceQueues=[],e},v.deleteSelectedVoiceQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected voiceQueues?").htmlContent("<b>"+v.selectedVoiceQueues.length+" selected</b> will be deleted.").ariaLabel("delete VoiceQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVoiceQueues.forEach(function(e){A(e)}),v.selectedVoiceQueues=[]})},v.deselectVoiceQueues=function(){v.selectedVoiceQueues=[]},v.selectAllVoiceQueues=function(){v.selectedVoiceQueues=v.voiceQueues.rows};var h=!0,b=1;function f(e){v.voiceQueues=e||{count:0,rows:[]}}function A(e){l.voiceQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.voiceQueues.rows,{id:e.id}),v.voiceQueues.count-=1,v.voiceQueues.rows.length||v.getVoiceQueues(),c.success({title:"VoiceQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceQueue"}];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:"SYSTEM:DELETEvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVoiceQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","voiceQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoiceQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_VOICERECORDING",u.voiceRecording=angular.copy(r),u.voiceRecordings=s,u.newVoiceRecording=!1,u.voiceRecording||(u.voiceRecording={},u.title="VOICE.NEW_VOICERECORDING",u.newVoiceRecording=!0),u.addNewVoiceRecording=function(){u.errors=[],l.voiceRecording.save(u.voiceRecording).$promise.then(function(e){u.voiceRecordings.unshift(e.toJSON()),o.success({title:"VoiceRecording properly created",msg:u.voiceRecording.name?u.voiceRecording.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVoiceRecording=function(){u.errors=[],l.voiceRecording.update({id:u.voiceRecording.id},u.voiceRecording).$promise.then(function(e){var t=_.find(u.voiceRecordings,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceRecording properly saved!",msg:u.voiceRecording.name?u.voiceRecording.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVoiceRecording=function(e){u.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(){l.voiceRecording.delete({id:u.voiceRecording.id}).$promise.then(function(){_.remove(u.voiceRecordings,{id:u.voiceRecording.id}),o.success({title:"VoiceRecording properly deleted!",msg:(u.voiceRecording.name||"voiceRecording")+" has been deleted!"}),p(u.voiceRecording)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","voiceRecordings","voiceRecording","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditVoiceRecordingDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.voiceRecordings=r||{count:0,rows:[]},v.table="voiceRecordings",v.listOrder="",v.listOrderAsc=null,v.selectedVoiceRecordings=[],v.query={fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,membername,rating,audio,createdAt,userDisposition",sort:"-updatedAt",limit:10,page:1},v.localizationMap=g,v.pickerModel={dateStart:null},v.downloadfile2=function(o,e){return l.voiceRecording.download({id:o.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=o.uniqueid+o.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++)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.voiceRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the voiceRecording?").htmlContent("<b>"+(e.name||"voiceRecording")+"</b> will be deleted.").ariaLabel("delete voiceRecording").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getVoiceRecordings=function(){v.query.dateStart=void 0,v.query.dateEnd=void 0,v.pickerModel.dateStart&&(v.query.dateStart=v.pickerModel.dateStart,v.query.dateEnd=v.pickerModel.dateEnd);v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceRecording.get(v.query,f).$promise},v.createOrEditVoiceRecording=function(e,t){i.show({controller:"CreateOrEditVoiceRecordingDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceRecordings/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceRecording:t,voiceRecordings:v.voiceRecordings.rows,license:v.license,setting:v.setting}})},v.deleteVoiceRecording=A,v.exportSelectedVoiceRecordings=function(){var e=angular.copy(v.selectedVoiceRecordings);return v.selectedVoiceRecordings=[],e},v.deleteSelectedVoiceRecordings=function(e){var t=i.confirm().title("Are you sure want to delete the selected voiceRecordings?").htmlContent("<b>"+v.selectedVoiceRecordings.length+" selected</b> will be deleted.").ariaLabel("delete VoiceRecordings").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVoiceRecordings.forEach(function(e){A(e)}),v.selectedVoiceRecordings=[]})},v.deselectVoiceRecordings=function(){v.selectedVoiceRecordings=[]},v.selectAllVoiceRecordings=function(){v.selectedVoiceRecordings=v.voiceRecordings.rows},v.clearDateFilter=function(){v.pickerModel={dateStart:null},v.getVoiceRecordings()};var h=!0,b=1;function f(e){v.voiceRecordings=e||{count:0,rows:[]}}function A(e){l.voiceRecording.delete({id:e.id}).$promise.then(function(){_.remove(v.voiceRecordings.rows,{id:e.id}),v.voiceRecordings.count-=1,v.voiceRecordings.rows.length||v.getVoiceRecordings(),c.success({title:"VoiceRecording deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceRecording"}];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:"SYSTEM:DELETEvoiceRecording",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVoiceRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","voiceRecordings","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoiceRecordingsController",e)}(),function(){"use strict";function e(t,n,o,a,s,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 s.hasRole("agent")||!s.hasPermission(e)&&!s.hasRole("admin")}}}function c(e,t){return{id:e,title:t.name||"NONAME",state:"app.plugins.plugin",stateParams:t,weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(e)&&!s.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!s.hasPermission(e)}})}l.isAgent=function(){return s.getCurrentUser()&&s.hasRole("agent")},o.saveItem("apps",{title:"APPS",group:!0,weight:1,hidden:function(){return s.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(){o.saveItem("version",{title:"VERSION "+l.version,group:!0,weight:2,hidden:function(){return s.hasRole("agent")}})}),s.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,o.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){o.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",weight:17,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1900)&&!s.hasRole("admin")}});for(var a=0;a<n.length;a+=1)t=88888+n[a].id,o.saveItem("apps.plugins.plugin_"+t,c(t,n[a]));o.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),o.saveItem("apps.dashboards",{id:100,title:"Dashboards",translate:"DASHBOARDS.DASHBOARDS",icon:"icon-tile-four",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(100)&&!s.hasRole("admin")}}),o.saveItem("apps.dashboards.general",{id:101,title:"General",route:"",translate:"DASHBOARDS.GENERAL",state:"app.dashboards.general",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(101)&&!s.hasRole("admin")}}),o.saveItem("apps.staff",{id:200,title:"Staff",translate:"STAFF.STAFF",icon:"icon-account-multiple",weight:3,hidden:function(){return s.hasRole("agent")||!s.hasPermission(200)&&!s.hasRole("admin")}}),o.saveItem("apps.staff.users",{id:201,title:"Users",route:"user",translate:"STAFF.USERS",state:"app.staff.users",weight:1,hidden:function(){return s.hasRole("agent")||s.hasRole("user")||!s.hasPermission(201)&&!s.hasRole("admin")}}),o.saveItem("apps.staff.agents",{id:202,title:"Agents",route:"user",translate:"STAFF.AGENTS",state:"app.staff.agents",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(202)&&!s.hasRole("admin")}}),o.saveItem("apps.staff.telephones",{id:203,title:"Telephones",route:"user",translate:"STAFF.TELEPHONES",state:"app.staff.telephones",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(203)&&!s.hasRole("admin")}}),o.saveItem("apps.staff.teams",{id:204,title:"Teams",route:"team",translate:"STAFF.TEAMS",state:"app.staff.teams",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(204)&&!s.hasRole("admin")}}),o.saveItem("apps.contactmanager",{id:300,title:"ContactManager",translate:"CONTACTMANAGER.CONTACTMANAGER",icon:"icon-account-circle",weight:4,hidden:function(){return!e.cm||s.hasRole("agent")||!s.hasPermission(300)&&!s.hasRole("admin")}}),o.saveItem("apps.contactmanager.lists",{id:301,title:"Lists",route:"cmList",translate:"CONTACTMANAGER.LISTS",state:"app.contactmanager.lists",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(301)&&!s.hasRole("admin")}}),o.saveItem("apps.contactmanager.companies",{id:302,title:"Companies",route:"cmCompany",translate:"CONTACTMANAGER.COMPANIES",state:"app.contactmanager.companies",weight:3,hidden:function(){return s.hasRole("agent")||!s.hasPermission(302)&&!s.hasRole("admin")}}),o.saveItem("apps.contactmanager.globalCustomFields",{id:304,title:"GlobalCustomFields",route:"cmCustomField",translate:"CONTACTMANAGER.GLOBALCUSTOMFIELDS",state:"app.contactmanager.globalCustomFields",weight:4,hidden:function(){return s.hasRole("agent")||!s.hasPermission(304)&&!s.hasRole("admin")}}),o.saveItem("apps.contactmanager.contacts",{id:303,title:"Contacts",route:"",translate:"CONTACTMANAGER.CONTACTS",state:"app.contactmanager.contacts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(303)&&!s.hasRole("admin")}}),o.saveItem("apps.voice",{id:400,title:"Voice",translate:"VOICE.VOICE",icon:"icon-phone",weight:5,hidden:function(){return!e.voice||s.hasRole("agent")||!s.hasPermission(400)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.voiceQueues",{id:401,title:"VoiceQueues",route:"voiceQueue",channel:"voice",translate:"VOICE.VOICEQUEUES",state:"app.voice.voiceQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(401)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.inboundroutes",{id:402,title:"InboundRoutes",route:"voiceExtension",translate:"VOICE.INBOUNDROUTES",state:"app.voice.inboundroutes",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(402)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.outboundroutes",{id:403,title:"OutboundRoutes",route:"voiceExtension",translate:"VOICE.OUTBOUNDROUTES",state:"app.voice.outboundroutes",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(403)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.internalroutes",{id:404,title:"InternalRoutes",route:"voiceExtension",translate:"VOICE.INTERNALROUTES",state:"app.voice.internalroutes",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(404)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.contexts",{id:405,title:"Contexts",route:"voiceContext",translate:"VOICE.CONTEXTS",state:"app.voice.contexts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(405)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.voicemails",{id:406,title:"Voicemails",route:"voiceMail",translate:"VOICE.VOICEMAILS",state:"app.voice.voicemails",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(406)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.musiconholds",{id:407,title:"MusicOnHolds",route:"voiceMusicOnHold",translate:"VOICE.MUSICONHOLDS",state:"app.voice.musiconholds",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(407)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.voiceRecordings",{id:408,title:"VoiceRecordings",route:"voiceRecording",translate:"VOICE.VOICERECORDINGS",state:"app.voice.voiceRecordings",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(408)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.chanSpies",{id:409,title:"ChanSpies",route:"voiceChanSpy",translate:"VOICE.CHANSPIES",state:"app.voice.chanSpies",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(409)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.voicePrefixes",{id:410,title:"VoicePrefixes",route:"voicePrefix",translate:"VOICE.VOICEPREFIXES",state:"app.voice.voicePrefixes",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(410)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.realtime",{id:411,title:"Realtime",route:"",translate:"VOICE.REALTIME",state:"app.voice.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(411)&&!s.hasRole("admin")}}),o.saveItem("apps.chat",{id:500,title:"Chat",translate:"CHAT.CHAT",icon:"icon-hangouts",weight:6,hidden:function(){return!e.chat||s.hasRole("agent")||!s.hasPermission(500)&&!s.hasRole("admin")}}),o.saveItem("apps.chat.chatQueues",{id:501,title:"ChatQueues",route:"chatQueue",channel:"chat",translate:"CHAT.CHATQUEUES",state:"app.chat.chatQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(501)&&!s.hasRole("admin")}}),o.saveItem("apps.chat.chatWebsites",{id:502,title:"ChatWebsites",route:"chatWebsite",channel:"chat",translate:"CHAT.CHATWEBSITES",state:"app.chat.chatWebsites",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(502)&&!s.hasRole("admin")}}),o.saveItem("apps.chat.realtime",{id:510,title:"Realtime",route:"",translate:"CHAT.REALTIME",state:"app.chat.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(510)&&!s.hasRole("admin")}}),o.saveItem("apps.mail",{id:600,title:"Mail",translate:"MAIL.MAIL",icon:"icon-email",weight:7,hidden:function(){return!e.mail||s.hasRole("agent")||!s.hasPermission(600)&&!s.hasRole("admin")}}),o.saveItem("apps.mail.mailQueues",{id:601,title:"MailQueues",route:"mailQueue",channel:"mail",translate:"MAIL.MAILQUEUES",state:"app.mail.mailQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(601)&&!s.hasRole("admin")}}),o.saveItem("apps.mail.mailAccounts",{id:602,title:"MailAccounts",route:"mailAccount",channel:"mail",translate:"MAIL.MAILACCOUNTS",state:"app.mail.mailAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(602)&&!s.hasRole("admin")}}),o.saveItem("apps.mail.mailSubtatuses",{id:603,title:"MailSubstatuses",route:"mailSubstatus",channel:"mail",translate:"MAIL.MAILSUBSTATUSES",state:"app.mail.mailSubtatuses",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(603)&&!s.hasRole("admin")}}),o.saveItem("apps.mail.realtime",{id:610,title:"Realtime",route:"",translate:"MAIL.REALTIME",state:"app.mail.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(610)&&!s.hasRole("admin")}}),o.saveItem("apps.sms",{id:700,title:"Sms",translate:"SMS.SMS",icon:"icon-message-text",weight:8,hidden:function(){return!e.messaging||s.hasRole("agent")||!s.hasPermission(700)&&!s.hasRole("admin")}}),o.saveItem("apps.sms.smsQueues",{id:701,title:"SmsQueues",route:"smsQueue",channel:"sms",translate:"SMS.SMSQUEUES",state:"app.sms.smsQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(701)&&!s.hasRole("admin")}}),o.saveItem("apps.sms.smsAccounts",{id:702,title:"SmsAccounts",route:"smsAccount",channel:"sms",translate:"SMS.SMSACCOUNTS",state:"app.sms.smsAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(702)&&!s.hasRole("admin")}}),o.saveItem("apps.sms.realtime",{id:710,title:"Realtime",route:"",translate:"SMS.REALTIME",state:"app.sms.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(710)&&!s.hasRole("admin")}}),o.saveItem("apps.openchannel",{id:800,title:"Openchannel",translate:"OPENCHANNEL.OPENCHANNEL",icon:"icon-google-earth",weight:9,hidden:function(){return!e.openchannel||s.hasRole("agent")||!s.hasPermission(800)&&!s.hasRole("admin")}}),o.saveItem("apps.openchannel.openchannelQueues",{id:801,title:"OpenchannelQueues",route:"openchannelQueue",channel:"openChannel",translate:"OPENCHANNEL.OPENCHANNELQUEUES",state:"app.openchannel.openchannelQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(801)&&!s.hasRole("admin")}}),o.saveItem("apps.openchannel.openchannelAccounts",{id:802,title:"OpenchannelAccounts",route:"openchannelAccount",channel:"openChannel",translate:"OPENCHANNEL.OPENCHANNELACCOUNTS",state:"app.openchannel.openchannelAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(802)&&!s.hasRole("admin")}}),o.saveItem("apps.openchannel.realtime",{id:810,title:"Realtime",route:"",translate:"OPENCHANNEL.REALTIME",state:"app.openchannel.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(810)&&!s.hasRole("admin")}}),o.saveItem("apps.fax",{id:900,title:"Fax",translate:"FAX.FAX",icon:"icon-deskphone",weight:10,hidden:function(){return!e.fax||s.hasRole("agent")||!s.hasPermission(900)&&!s.hasRole("admin")}}),o.saveItem("apps.fax.faxQueues",{id:901,title:"FaxQueues",route:"faxQueue",channel:"fax",translate:"FAX.FAXQUEUES",state:"app.fax.faxQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(901)&&!s.hasRole("admin")}}),o.saveItem("apps.fax.faxAccounts",{id:902,title:"FaxAccounts",route:"faxAccount",channel:"fax",translate:"FAX.FAXACCOUNTS",state:"app.fax.faxAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(902)&&!s.hasRole("admin")}}),o.saveItem("apps.fax.realtime",{id:910,title:"Realtime",route:"",translate:"FAX.REALTIME",state:"app.fax.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(910)&&!s.hasRole("admin")}}),o.saveItem("apps.tools",{id:1e3,title:"Tools",translate:"TOOLS.TOOLS",icon:"icon-auto-fix",weight:13,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1e3)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.cannedAnswers",{id:1002,title:"CannedAnswers",route:"cannedAnswer",translate:"TOOLS.CANNEDANSWERS",state:"app.tools.cannedAnswers",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1002)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.dispositions",{id:1002,title:"Dispositions",route:"disposition",translate:"TOOLS.DISPOSITIONS",state:"app.tools.dispositions",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1002)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.customDashboards",{id:1003,title:"CustomDashboards",route:"dashboard",translate:"TOOLS.CUSTOMDASHBOARDS",state:"app.tools.customDashboards",weight:3,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1003)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.intervals",{id:1004,title:"Intervals",route:"interval",translate:"TOOLS.INTERVALS",state:"app.tools.intervals",weight:4,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1004)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.pauses",{id:1005,title:"Pauses",route:"pause",translate:"TOOLS.PAUSES",state:"app.tools.pauses",weight:5,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1005)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.schedules",{id:42,title:"Scheduler",route:"schedule",translate:"TOOLS.SCHEDULER",state:"app.tools.schedules",weight:6,hidden:function(){return s.hasRole("agent")||!s.hasPermission(42)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.sounds",{id:1006,title:"Sounds",route:"sound",translate:"TOOLS.SOUNDS",state:"app.tools.sounds",weight:7,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1006)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.tags",{id:1007,title:"Tags",route:"tag",translate:"TOOLS.TAGS",state:"app.tools.tags",weight:8,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1007)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.templates",{id:1008,title:"Templates",route:"template",translate:"TOOLS.TEMPLATES",state:"app.tools.templates",weight:9,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1008)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.triggers",{id:1009,title:"Triggers",route:"trigger",translate:"TOOLS.TRIGGERS",state:"app.tools.triggers",weight:10,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1009)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.trunks",{id:1010,title:"Trunks",route:"trunk",translate:"TOOLS.TRUNKS",state:"app.tools.trunks",weight:11,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1010)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.variables",{id:1011,title:"Variables",route:"variable",translate:"TOOLS.VARIABLES",state:"app.tools.variables",weight:12,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1011)&&!s.hasRole("admin")}}),o.saveItem("apps.callysquare",{id:1100,title:"CallySquare",translate:"CALLYSQUARE.CALLYSQUARE",icon:"icon-sitemap",weight:11,hidden:function(){return!e.voice||s.hasRole("agent")||!s.hasPermission(1100)&&!s.hasRole("admin")}}),o.saveItem("apps.callysquare.odbcs",{id:1101,title:"ODBC",route:"squareOdbc",translate:"CALLYSQUARE.ODBC",state:"app.callysquare.odbcs",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1101)&&!s.hasRole("admin")}}),o.saveItem("apps.callysquare.squareRecordings",{id:1102,title:"SquareRecordings",route:"squareRecording",translate:"CALLYSQUARE.SQUARERECORDINGS",state:"app.callysquare.squareRecordings",weight:3,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1102)&&!s.hasRole("admin")}}),o.saveItem("apps.callysquare.projects",{id:1103,title:"Projects",route:"squareProject",translate:"CALLYSQUARE.PROJECTS",state:"app.callysquare.projects",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1103)&&!s.hasRole("admin")}}),o.saveItem("apps.analytics",{id:1200,title:"Analytics",translate:"ANALYTICS.ANALYTICS",icon:"icon-chart-line",weight:14,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1200)&&!s.hasRole("admin")}}),o.saveItem("apps.analytics.metrics",{id:1201,title:"Metrics",route:"analyticMetric",translate:"ANALYTICS.METRICS",state:"app.analytics.metrics",weight:3,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1201)&&!s.hasRole("admin")}}),o.saveItem("apps.analytics.extractedReports",{id:1202,title:"ExtractedReports",route:"analyticExtractedReport",translate:"ANALYTICS.EXTRACTEDREPORTS",state:"app.analytics.extractedReports",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1202)&&!s.hasRole("admin")}}),o.saveItem("apps.analytics.reports",{id:1203,title:"Reports",route:"",translate:"ANALYTICS.REPORTS",state:"app.analytics.reports",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1203)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations",{id:1300,title:"Integrations",translate:"INTEGRATIONS.INTEGRATIONS",icon:"icon-heart",weight:15,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1300)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.zendeskAccounts",{id:1301,title:"ZendeskAccounts",route:"intZendeskAccount",translate:"INTEGRATIONS.ZENDESKACCOUNTS",state:"app.integrations.zendeskAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1301)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.salesforceAccounts",{id:1302,title:"SalesforceAccounts",route:"intSalesforceAccount",translate:"INTEGRATIONS.SALESFORCEACCOUNTS",state:"app.integrations.salesforceAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1302)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.freshdeskAccounts",{id:1303,title:"FreshdeskAccounts",route:"intFreshdeskAccount",translate:"INTEGRATIONS.FRESHDESKACCOUNTS",state:"app.integrations.freshdeskAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1303)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.sugarcrmAccounts",{id:1305,title:"SugarcrmAccounts",route:"intSugarcrmAccount",translate:"INTEGRATIONS.SUGARCRMACCOUNTS",state:"app.integrations.sugarcrmAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1305)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.deskAccounts",{id:1306,title:"DeskAccounts",route:"intDeskAccount",translate:"INTEGRATIONS.DESKACCOUNTS",state:"app.integrations.deskAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1306)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.zohoAccounts",{id:1307,title:"ZohoAccounts",route:"intZohoAccount",translate:"INTEGRATIONS.ZOHOACCOUNTS",state:"app.integrations.zohoAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1307)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.vtigerAccounts",{id:1308,title:"VtigerAccounts",route:"intVtigerAccount",translate:"INTEGRATIONS.VTIGERACCOUNTS",state:"app.integrations.vtigerAccounts",weight:1,badge:{content:"beta",color:"orange"},hidden:function(){return s.hasRole("agent")||!s.hasPermission(1308)&&!s.hasRole("admin")}}),o.saveItem("apps.settings",{id:1400,title:"Settings",translate:"SETTINGS.SETTINGS",icon:"icon-cog",weight:18,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1400)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.generals",{id:1401,title:"General",route:"setting",translate:"SETTINGS.GENERAL",state:"app.settings.generals",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1401)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.smtps",{id:1402,title:"Smtp",route:"mailAccount",translate:"SETTINGS.SMTP",state:"app.settings.smtps",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1402)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.networks",{id:1403,title:"Networks",route:"network",translate:"SETTINGS.NETWORKS",state:"app.settings.networks",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1403)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.customizations",{id:1407,title:"Customizations",route:"setting",translate:"SETTINGS.CUSTOMIZATIONS",state:"app.settings.customizations",weight:1,hidden:function(){return!e.custom||s.hasRole("agent")||!s.hasPermission(1407)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.updates",{id:1404,title:"Updates",route:"",translate:"SETTINGS.UPDATES",state:"app.settings.updates",weight:1,hidden:function(){return!e.update||s.hasRole("agent")||!s.hasPermission(1404)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.license",{id:1405,title:"License",route:"",translate:"SETTINGS.LICENSE",state:"app.settings.license",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1405)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.system",{id:1406,title:"System",route:"",translate:"SETTINGS.SYSTEM",state:"app.settings.system",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1406)&&!s.hasRole("admin")}}),o.saveItem("apps.help",{id:1600,title:"Help",translate:"HELP.HELP",icon:"icon-help",weight:19,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1600)&&!s.hasRole("admin")}}),o.saveItem("apps.help.about",{id:1601,title:"About",route:"",translate:"HELP.ABOUT",state:"app.help.about",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1601)&&!s.hasRole("admin")}}),o.saveItem("apps.motiondialer",{id:1500,title:"MotionDialer",translate:"MOTIONDIALER.MOTIONDIALER",icon:"icon-fire",weight:5,hidden:function(){return!e.dialer||s.hasRole("agent")||!s.hasPermission(1500)&&!s.hasRole("admin")}}),o.saveItem("apps.motiondialer.queueCampaigns",{id:1501,title:"QueueCampaigns",route:"voiceQueue",channel:"bull",translate:"MOTIONDIALER.QUEUECAMPAIGNS",state:"app.motiondialer.queueCampaigns",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1501)&&!s.hasRole("admin")}}),o.saveItem("apps.motiondialer.ivrCampaigns",{id:1502,title:"IvrCampaigns",route:"campaign",translate:"MOTIONDIALER.IVRCAMPAIGNS",state:"app.motiondialer.ivrCampaigns",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1502)&&!s.hasRole("admin")}}),o.saveItem("apps.motiondialer.realtime",{id:1510,title:"Realtime",route:"",translate:"MOTIONDIALER.REALTIME",state:"app.motiondialer.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1510)&&!s.hasRole("admin")}}),o.saveItem("apps.jscripty",{id:1700,title:"jscripty",translate:"JSCRIPTY.JSCRIPTY",icon:"icon-script",weight:12,hidden:function(){return!e.jscripty||s.hasRole("agent")||!s.hasPermission(1700)&&!s.hasRole("admin")}}),o.saveItem("apps.jscripty.projects",{id:1701,title:"Projects",route:"jscriptyProject",translate:"JSCRIPTY.PROJECTS",state:"app.jscripty.projects",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1701)&&!s.hasRole("admin")}}),o.saveItem("apps.marketplace",{id:1800,title:"Marketplace",translate:"MARKETPLACE.MARKETPLACE",icon:"icon-cart",weight:16,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1800)&&!s.hasRole("admin")}}),o.saveItem("apps.marketplace.plugins",{id:1801,title:"Plugins",route:"plugin",translate:"MARKETPLACE.PLUGINS",state:"app.marketplace.plugins",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1801)&&!s.hasRole("admin")}}),o.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!s.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||!s.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||!s.hasPermission(103)}}),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||!s.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||!s.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||!s.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||!s.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||!s.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||!s.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||!s.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||!s.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,s,r){var i=this;function o(e){if(e&&e.id){var t=99999+e.id;s.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){s.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;s.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")}}),s.sort()}}else{t=88888+e.id;n=1900,a=t,i=s.getNavigation(),(o=_.find(i[0].children,{id:n}))&&_.some(o.children,{id:a})&&("always"==e.sidebar||"adminOnly"==e.sidebar)&&(s.deleteItem("apps.plugins.plugin_"+t),d(1900)||s.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",weight:17,hidden:function(){return!0}}))}var n,a,i,o}function d(e){var t=s.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",o),a.on("dashboard:update",o),a.on("dashboard:remove",function(e){if(e&&e.id){var t=99999+e.id;s.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||(s.deleteItem("apps.plugins.plugin_"+t),d(1900)||s.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,o,s,r){var l=this;function d(n){s.isSupported()?s.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},s.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),o.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),o.user.getGroups({id:l.currentUser.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(o.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,o,s,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))},o.on("chatInternalMessage:save",u.onMessageSave),o.on("chatInternalMessage:update",u.onMessageUpdate),o.on("user:update",u.onUserUpdate),s("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(){o.removeAllListeners("chatInternalMessage:save"),o.removeAllListeners("chatInternalMessage:update"),o.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,o,s,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=s.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=[],o.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,o.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,o,t,s,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 s.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){o.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 r.user.get({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=o.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");o.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){o.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 s.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 s.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 s.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,o,s,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,o){var s=this;s.form={token:o.token},s.setting={},s.resetPassword=function(){return i.auth.reset(s.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})})},s.onInit=function(){e.isLoggedIn()&&a.go("app.dashboards.general");return i.setting.gdpr({id:1}).$promise.then(function(e){s.setting=e,s.passwordPattern=s.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:""}).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,o){var s=this;function r(){e.hide()}s.errors=[],s.user=a,s.setting=i,s.reset=o,s.passwordPattern=s.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",s.savePassword=function(){s.errors=[],n.user.changePassword({id:s.user.id},{oldPassword:s.oldPassword,newPassword:s.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),s.errors=e.data.errors&&e.data.errors.length?e.data.errors:[{message:e.data.message||"Authorization error",type:"api.user.changePassword"}]})},s.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,o,s,r){var l=this,d=[];function c(e){_.isNil(e)&&o.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.preview=s,l.originated=!1,l.disable=!1,l.disableGetContact=!1,d.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,d=[],c(!0)):o.rpc.getVoiceQueuesPreview({id:l.preview.id}).$promise.then(function(e){c(!0)}).catch(function(e){i.error({title:"Message",msg:e.data}),c(!0)}).finally(function(){l.disable=!1,d=[]})},l.closeDialog=c,l.nextContact=function(){l.disableGetContact=!0,l.originated||o.cmHopper.update({id:l.preview.id,UserId:null});return o.cmHopper.getPreview({hopperIds:d}).$promise.then(function(e){_.isNil(e)||_.isNil(e.Queue)||!e.Queue.dialActive?i.info({title:"PREVIEW",msg:"CAMPAIGN NOT ACTIVE"}):(l.preview=e,d.push(l.preview.id))}).catch(function(e){if(d=[],a.hide(),404===e.status)i.info({title:"PREVIEW",msg:"CONTACT NOT AVAILABLE"});else if(e.data&&e.data.errors&&e.data.errors.length){l.errors=e.data.errors||[{message:e.toString(),type:"api preview"}];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"],e)},l.isNil=function(e){return _.isNil(e)},e.$on("$destroy",function(){l.originated||o.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(e,t,o,n,s,a,i,r,l,d,c,m,u,p,g,v,h,b,f,A,E){var y,S=this;function T(e){S.voiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}function C(){S.promise=b.user.getQueues(S.query,T).$promise}function x(e){return v.logout(e).then(function(){return h.disconnect(),t.$broadcast("webrtc::logout"),n.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:A,reset:t}})}S.voiceQueues={},S.polling=!0,t.global={search:""},S.pauses=[],S.license=f,S.currentUser=v.getCurrentUser(),S.unreadTotalMessages=0,S.unreadTotalGroupMessages=0,S.contcts=0,"agent"===S.currentUser.role&&(y=E(function(){_.some(S.voiceQueues,{dialMethod:"preview",dialActive:!0})&&S.license.dialer&&S.polling?(S.polling=!1,b.cmHopper.getOpenContacts().$promise.then(function(e){e&&_.isNumber(e.contacts)&&(S.contacts=e.contacts)}).finally(function(){S.polling=!0})):S.contacts=0},14999)),S.setting=A,S.bodyEl=angular.element("body"),S.conf={realm:"asterisk",host:a.host(),protocol:a.protocol(),remotePlayerId:"remote-audio",ua:"Motion WebRTC Bar 0.2.0",license:S.license.webrtc,phoneBarExpires:S.currentUser.phoneBarExpires},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"},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-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"}},S.toggleSidenav=function(e){i(e).toggle()},S.logout=x,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"===n.current.name&&d.location.reload()},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=o.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 s(function(){a.resolve(e)},1e3),a.promise},S.searchResultClick=function(e){e.uisref&&(e.stateParams?n.go(e.state,e.stateParams):n.go(e.state))},S.openSettings=function(e){t.$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){x(!0)}).finally(function(){_.merge(S.user,e),v.updateCurrentUser(S.user)})}else x(!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.extravar||"Not defined")+"</span><br>              </div>",showClose:!0,timeout:1e4,html:!0})},S.pause=function(e){return b.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 b.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,b.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(b.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(),b.chatInternalMessage.get({fields:"FromId",ToId:S.currentUser.id,read:!1,nolimit:!0}).$promise.then(function(e){S.unreadTotalMessages=e.rows.length}),e.$on("$destroy",function(){h.removeAllListeners("user:called"),h.removeAllListeners("user:update"),h.removeAllListeners("chatInternalMessage:save"),h.removeAllListeners("chatInternalMessage:update"),h.removeAllListeners("userVoiceQueue:save"),h.removeAllListeners("voiceQueue:save"),h.removeAllListeners("userVoiceQueue:remove"),h.removeAllListeners("voiceQueue:remove"),h.removeAllListeners("voiceQueue:update"),y&&(E.cancel(y),y=null)})}e.$inject=["$scope","$rootScope","$q","$state","$timeout","$location","$mdSidenav","$translate","$mdToast","$window","$mdDialog","$document","$cookies","toasty","msNavigationService","Auth","socket","api","license","setting","$interval"],angular.module("app.toolbar").controller("ToolbarController",e)}();var urlParams=function(e){var t=new Object,n=e.lastIndexOf("?");if(0<n)for(var a=e.substring(n+1).split("&"),i=0;i<a.length;i++)0<(n=a[i].indexOf("="))&&(t[a[i].substring(0,n)]=a[i].substring(n+1));return t}(window.location.href),t0=new Date,MAX_REQUEST_SIZE=10485760,MAX_WIDTH=12e3,MAX_HEIGHT=12e3,EXPORT_URL="http://exp.draw.io/ImageExport2/export",SHARE_HOST="http://localhost:3000",SAVE_URL="api/square/projects/",VARIABLE_URL="/api/variables",STENCIL_PATH="/assets/plugins/square/stencils",SHAPES_PATH="/assets/plugins/square/shapes",IMAGE_PATH="/assets/plugins/square/images",STYLE_PATH="/assets/plugins/square/styles",CSS_PATH="/assets/plugins/square/styles",OPEN_FORM="api/square/projects/open",TEMPLATE_PATH="/assets/plugins/square/templates",RESOURCES_PATH="/assets/plugins/square/resources",RESOURCE_BASE=RESOURCES_PATH+"/grapheditor",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 o=mxLog.window.getElement();e=function(e,t){mxLog.textarea.style.height=Math.max(0,o.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 o=e.charAt(i);"{"==o?a="":null!=a&&"}"==o?(0<=(a=parseInt(a)-1)&&a<t.length&&n.push(t[a]),a=null):null!=a?a+=o:n.push(o)}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,o=(n.geometry.x-n.previous.x)*i,s=(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-=o,a.y-=s,a.width-=r,a.height-=i):(a.x+=o/10,a.y+=s/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 o=e.model.getChildAt(t,i),s=e.getView().getState(o);null!=s&&(mxUtils.setOpacity(s.shape.node,n),mxEffects.cascadeOpacity(e,o,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,o){a=a||40,i=i||30;var s=t||100;if(mxUtils.setOpacity(e,s),o||null==o){var r=function(){s=Math.max(s-a,0),mxUtils.setOpacity(e,s),0<s?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 o=0;o<i.length;o++){var s=mxUtils.htmlEntities(i[o].nodeValue);a.push(" "+i[o].nodeName+'="'+s+'"')}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,o){return mxUtils.link(e,t,function(){n[a](i)},o)},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,o=(a.scrollLeft||i.scrollLeft)+(a.clientWidth||i.clientWidth);o<t+n&&(e.style.left=Math.max(a.scrollLeft||i.scrollLeft,o-n)+"px"),t=parseInt(e.offsetTop),n=parseInt(e.offsetHeight),(o=(a.scrollTop||i.scrollTop)+Math.max(a.clientHeight||0,i.clientHeight))<t+n&&(e.style.top=Math.max(a.scrollTop||i.scrollTop,o-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,o,s,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=(o=1<(v=(c=i*i)/(g=n*n)+(p=d*d)/(A=a*a))?(n*=Math.sqrt(v),a*=Math.sqrt(v),0):(v=1,o===s&&(v=-1),v*Math.sqrt((g*A-g*p-A*c)/(g*p+A*c))))*n*d/a)-h*(p=-1*o*a*i/n)+r/2,l=h*c+m*p+l/2,o=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==s&&0<i?i-=2*Math.PI:0!=s&&i<0&&(i+=2*Math.PI),s=2*i/Math.PI,i/=s=Math.ceil(s<0?-1*s:s),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(o),p=-d*(c*(f=Math.sin(o))+a*u),g=-d*(n*f-m*u),v=A=0,h=[],b=0;b<s;++b){o+=i;var f,A=c*(u=Math.cos(o))-a*(f=Math.sin(o))+r,E=(v=n*u+m*f+l,-d*(c*f+a*u));u=-d*(n*f-m*u);h[f=6*b]=Number(p+e),h[f+1]=Number(g+t),h[f+2]=Number(A-E+e),h[f+3]=Number(v-u+t),h[f+4]=Number(A+e),h[f+5]=Number(v+t),p=A+E,g=v+u}return h},getBoundingBox:function(e,t){var n=null;if(null!=e&&null!=t&&0!=t){var a=mxUtils.toRadians(t),i=(n=Math.cos(a),Math.sin(a)),o=new mxPoint(e.x+e.width/2,e.y+e.height/2),s=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);s=mxUtils.getRotatedPoint(s,n,i,o),a=mxUtils.getRotatedPoint(a,n,i,o),r=mxUtils.getRotatedPoint(r,n,i,o),l=mxUtils.getRotatedPoint(l,n,i,o);(n=new mxRectangle(s.x,s.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],o=null,s=1;s<e.absolutePoints.length;s++){var r=e.absolutePoints[s];i=mxUtils.ptSegDistSq(i.x,i.y,r.x,r.y,t,n);(null==o||i<o)&&(o=i,a=s-1),i=r}return a},rectangleIntersectsSegment:function(e,t,n){var a=e.y,i=e.x,o=a+e.height,s=i+e.width;e=t.x;var r=n.x;if(t.x>n.x&&(e=n.x,r=t.x),s<r&&(r=s),e<i&&(e=i),r<e)return!1;i=t.y,s=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),s=n*r+t),s<i&&(t=s,s=i,i=t),o<s&&(s=o),i<a&&(i=a),!(s<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,o=t.height;if(i<=0||o<=0||n<=0||a<=0)return!1;var s=e.x,r=e.y,l=t.x,d=t.y;o+=d,n+=s,a+=r;return((i=i+l)<l||s<i)&&(o<d||r<o)&&(n<s||l<n)&&(a<r||d<a)},intersectsHotspot:function(e,t,n,a,i,o){if(i=null!=i?i:0,o=null!=o?o:0,0<(a=null!=a?a:1)){var s=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):(s=e.x+c/2,l=c)),l=Math.max(i,l*a),d=Math.max(i,d*a),0<o&&(l=Math.min(l,o),d=Math.min(d,o)),a=new mxRectangle(s-l/2,r-d/2,l,d),0!=(s=mxUtils.toRadians(mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION)||0))&&(i=Math.cos(-s),o=Math.sin(-s),s=new mxPoint(e.getCenterX(),e.getCenterY()),t=(e=mxUtils.getRotatedPoint(new mxPoint(t,n),i,o,s)).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,o=document.documentElement;n=n+(i.scrollLeft||o.scrollLeft),a=a+(i.scrollTop||o.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,o,s,r){var l=(r-o)*(n-e)-(s-i)*(a-t);return s=((s-i)*(t-o)-(r-o)*(e-i))/l,i=((n-e)*(t-o)-(a-t)*(e-i))/l,0<=s&&s<=1&&0<=i&&i<=1?new mxPoint(e+s*(n-e),t+s*(a-t)):null},ptSegDistSq:function(e,t,n,a,i,o){return n=(i-=e)*(n-=e)+(o-=t)*(a-=t)<=0?0:(e=(i=n-i)*n+(o=a-o)*a)<=0?0:e*e/(n*n+a*a),(i=i*i+o*o-n)<0&&(i=0),i},relativeCcw:function(e,t,n,a,i,o){return 0==(e=(i-=e)*(a-=t)-(o-=t)*(n-=e))&&(0<(e=i*n+o*a)&&((e=(i-n)*n+(o-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,o){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 o=new mxDictionary;return e.sort(function(e,t){var n=o.get(e);null==n&&(n=mxCellPath.create(e).split(mxCellPath.PATH_SEPARATOR),o.put(e,n));var a=o.get(t);return null==a&&(a=mxCellPath.create(t).split(mxCellPath.PATH_SEPARATOR),o.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 o=mxUtils.setStyle(e.getStyle(t[i]),n,a);e.setStyle(t[i],o)}}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 o=0;o<t.length;o++)if(null!=t[o]){var s=mxUtils.setStyleFlag(e.getStyle(t[o]),n,a,i);e.setStyle(t[o],s)}}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 o=e.indexOf(";",i),s="";s=o<0?e.substring(i+t.length+1):e.substring(i+t.length+1,o),s=null==a?parseInt(s)^n:a?parseInt(s)|n:parseInt(s)&~n;e=e.substring(0,i)+t+"="+s+(0<=o?e.substring(o):"")}}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 o=e.getView(),s=null,r=o.isEventsEnabled();o.setEventsEnabled(!1);var l=o.drawPane,d=o.overlayPane;e.dialect==mxConstants.DIALECT_SVG?(o.drawPane=document.createElementNS(mxConstants.NS_SVG,"g"),o.canvas.appendChild(o.drawPane),o.overlayPane=document.createElementNS(mxConstants.NS_SVG,"g")):(o.drawPane=o.drawPane.cloneNode(!1),o.canvas.appendChild(o.drawPane),o.overlayPane=o.overlayPane.cloneNode(!1)),o.canvas.appendChild(o.overlayPane);var c=o.getTranslate();o.translate=new mxPoint(a,i),t=new mxTemporaryCellStates(e.getView(),t,n);try{s=(new mxCodec).encode(e.getView())}finally{t.destroy(),o.translate=c,o.canvas.removeChild(o.drawPane),o.canvas.removeChild(o.overlayPane),o.drawPane=l,o.overlayPane=d,o.setEventsEnabled(r)}return s},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 o=Math.sqrt(n);if(n=a*o,a/=o,n<1&&e<a){var s=a/e;a=e,n/=s}for(a<1&&e<n&&(s=n/e,n=e,a/=s),s=Math.ceil(n)*Math.ceil(a),o=0;e<s;){s=Math.floor(n)/n;var r=Math.floor(a)/a;if(1==s&&(s=Math.floor(n-1)/n),1==r&&(r=Math.floor(a-1)/a),n*=s=r<s?s:r,a*=s,s=Math.ceil(n)*Math.ceil(a),10<++o)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>",o=document.getElementsByTagName("base"),s=0;s<o.length;s++)i+=o[s].outerHTML;for(i+="<style>",s=0;s<document.styleSheets.length;s++)try{i+=document.styleSheets(s).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>"),o=document.getElementsByTagName("base"),s=0;s<o.length;s++)t.writeln(mxUtils.getOuterHtml(o[s]));for(o=document.getElementsByTagName("link"),s=0;s<o.length;s++)t.writeln(mxUtils.getOuterHtml(o[s]));for(o=document.getElementsByTagName("style"),s=0;s<o.length;s++)t.writeln(mxUtils.getOuterHtml(o[s]));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;)s=e.cloneNode(!0),t.body.appendChild(s),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 o=document.createElement("img");o.setAttribute("src",a||mxUtils.errorImage),o.setAttribute("valign","bottom"),o.style.verticalAlign="middle",i.appendChild(o),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 s=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){s.destroy()}),mxUtils.write(n,mxResources.get(mxUtils.closeResource)||mxUtils.closeResource),t.appendChild(n),i.appendChild(t),mxUtils.br(i),s.setClosable(!0)),s.setVisible(!0),s},makeDraggable:function(e,t,n,i,a,o,s,r,l,d){return(e=new mxDragSource(e,n)).dragOffset=new mxPoint(null!=a?a:0,null!=o?o:mxConstants.TOOLTIP_VERTICAL_OFFSET),e.autoscroll=s,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,o,s){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!=o?o(e):mxEvent.isConsumed(e)||n.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,r(e)))}),mxEvent.addListener(e,"dblclick",function(e){if(null!=s)s(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,o){this.url=e,this.params=t,this.method=n||"POST",this.async=null==a||a,this.username=i,this.password=o}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(),o=0;o<i.length;o++){if(0<(s=i[o].indexOf("="))){var s,r=i[o].substring(0,s),l=i[o].substring(s+1);(s=e.createElement("textarea")).setAttribute("name",r),l=l.replace(/\n/g,"&#xa;"),r=e.createTextNode(l),s.appendChild(r),a.appendChild(s)}}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,o,s,r,l,d){null!=t&&(s=null==s||s,this.content=t,this.init(n,a,i,o,d),this.installMaximizeHandler(),this.installMinimizeHandler(),this.installCloseHandler(),this.setMinimizable(s),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),o=this.div.offsetWidth,s=this.div.offsetHeight,t=mxUtils.bind(this,function(e){var t=mxEvent.getClientX(e)-a,n=mxEvent.getClientY(e)-i;this.setSize(o+t,s+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,o=null,s=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=o,this.div.style.width=s,"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=o,this.table.style.width=s,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),o=this.table.style.height,s=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),o=this.getX(),s=this.getY(),t=mxUtils.bind(this,function(e){var t=mxEvent.getClientX(e)-a,n=mxEvent.getClientY(e)-i;this.setLocation(o+t,s+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),o=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(o)&&0<=i&&0<=o&&0<t-i-o&&(this.div.style.height=t-i-o+"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),o=mxUtils.getScrollOrigin();return n>=i.x-o.x&&a>=i.y-o.y&&n<=i.x-o.x+e.container.offsetWidth&&a<=i.y-o.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 o=!0;if(null!=this.currentGuide&&this.currentGuide.isEnabledForEvent(t))o=new mxRectangle(0,0,o=parseInt(this.previewElement.style.width),s=parseInt(this.previewElement.style.height)),n=new mxPoint(i,n),n=this.currentGuide.move(o,n,a),o=!1,i=n.x,n=n.y;else if(a){a=e.view.scale;var s=e.view.translate,r=e.gridSize/2;i=(e.snap(i/a-s.x-r)+s.x)*a,n=(e.snap(n/a-s.y-r)+s.y)*a}null!=this.currentGuide&&o&&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,o){var s=document.createElement(null!=t?"img":"button"),r=i||(null!=o?"mxToolbarMode":"mxToolbarItem");return s.className=r,s.setAttribute("src",t),null!=e&&(null!=t?s.setAttribute("title",e):mxUtils.write(s,e)),this.container.appendChild(s),null!=n&&(mxEvent.addListener(s,"click",n),mxClient.IS_TOUCH&&mxEvent.addListener(s,"touchend",n)),e=mxUtils.bind(this,function(e){null!=a?s.setAttribute("src",t):s.style.backgroundColor=""}),mxEvent.addGestureListeners(s,mxUtils.bind(this,function(e){if(null!=a?s.setAttribute("src",a):s.style.backgroundColor="gray",null!=o){null==this.menu&&(this.menu=new mxPopupMenu,this.menu.init());var t=this.currentImg;this.menu.isMenuShowing()&&this.menu.hideMenu(),t!=s&&(this.currentImg=s,this.menu.factoryMethod=o,t=new mxPoint(s.offsetLeft,s.offsetTop+s.offsetHeight),this.menu.popup(t.x,t.y,null,e),this.menu.isMenuShowing()&&(s.className=r+"Selected",this.menu.hideMenu=function(){mxPopupMenu.prototype.hideMenu.apply(this),s.className=r,this.currentImg=null}))}}),null,e),mxEvent.addListener(s,"mouseout",e),s},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 o=document.createElement("img");return o.initialClassName=i||"mxToolbarMode",o.className=o.initialClassName,o.setAttribute("src",t),o.altIcon=a,null!=e&&o.setAttribute("title",e),mxEvent.addListener(o,"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=o),null!=(e=(this.selectedMode=o).altIcon)?(o.altIcon=o.getAttribute("src"),o.setAttribute("src",e)):o.className=o.initialClassName+"Selected",this.fireEvent(new mxEventObject(mxEvent.SELECT)),n()})),this.container.appendChild(o),null==this.defaultMode&&(this.defaultMode=o,this.selectMode(o),n()),o},mxToolbar.prototype.addMode=function(e,t,n,a,i,o){o=null==o||o;var s=document.createElement(null!=t?"img":"button");return s.initialClassName=i||"mxToolbarMode",s.className=s.initialClassName,s.setAttribute("src",t),s.altIcon=a,null!=e&&s.setAttribute("title",e),this.enabled&&o&&(mxEvent.addListener(s,"click",mxUtils.bind(this,function(e){this.selectMode(s,n),this.noReset=!1})),mxEvent.addListener(s,"dblclick",mxUtils.bind(this,function(e){this.selectMode(s,n),this.noReset=!0})),null==this.defaultMode&&(this.defaultMode=s,this.defaultFunction=n,this.selectMode(s,n))),this.container.appendChild(s),s},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 o=this.codec.encode(e[i]);n=n+mxUtils.getXml(o,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(o){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()})},o.addMouseListener(this.mouseListener),mxEvent.addListener(document,"mouseup",mxUtils.bind(this,function(){this.active&&this.stop()}));var s=mxUtils.bind(this,function(){return this.scrollbars=mxUtils.hasScrollbars(o.container),this.scrollLeft=o.container.scrollLeft,this.scrollTop=o.container.scrollTop,window.setInterval(mxUtils.bind(this,function(){if(this.tdx-=this.dx,this.tdy-=this.dy,this.scrollbars){var e=-o.container.scrollLeft-Math.ceil(this.dx),t=-o.container.scrollTop-Math.ceil(this.dy);o.panGraph(e,t),o.panDx=this.scrollLeft-o.container.scrollLeft,o.panDy=this.scrollTop-o.container.scrollTop,o.fireEvent(new mxEventObject(mxEvent.PAN))}else o.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=o.view.translate.x,this.t0y=o.view.translate.y,this.active=!0},this.panTo=function(e,t,n,a){this.active||this.start(),this.scrollLeft=o.container.scrollLeft,this.scrollTop=o.container.scrollTop,a=null!=a?a:0;var i=o.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=s())):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)o.panDx=0,o.panDy=0,o.fireEvent(new mxEventObject(mxEvent.PAN));else{var e=o.panDx,t=o.panDy;0==e&&0==t||(o.panGraph(0,0),o.view.setTranslate(this.t0x+e/o.view.scale,this.t0y+t/o.view.scale))}},this.destroy=function(){o.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,o){a=a||this,this.itemCount++,a.willAddSeparator&&(a.containsItems&&this.addSeparator(a,!0),a.willAddSeparator=!1),a.containsItems=!0;var s=document.createElement("tr");s.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)),s.appendChild(r),this.labels&&((r=document.createElement("td")).className="mxPopupMenuItem"+(null==o||o?"":" disabled"),mxUtils.write(r,e),r.align="left",s.appendChild(r),(e=document.createElement("td")).className="mxPopupMenuItem"+(null==o||o?"":" disabled"),e.style.paddingRight="6px",e.style.textAlign="right",s.appendChild(e),null==a.div&&this.createSubmenu(a)),a.tbody.appendChild(s),(null==o||o)&&(mxEvent.addGestureListeners(s,mxUtils.bind(this,function(e){this.eventReceiver=s,a.activeRow!=s&&a.activeRow!=a&&(null!=a.activeRow&&null!=a.activeRow.div.parentNode&&this.hideSubmenu(a),null!=s.div&&(this.showSubmenu(a,s),a.activeRow=s)),mxEvent.consume(e)}),mxUtils.bind(this,function(e){a.activeRow!=s&&a.activeRow!=a&&(null!=a.activeRow&&null!=a.activeRow.div.parentNode&&this.hideSubmenu(a),this.autoExpand&&null!=s.div&&(this.showSubmenu(a,s),a.activeRow=s)),s.className="mxPopupMenuItemHover"}),mxUtils.bind(this,function(e){this.eventReceiver==s&&(a.activeRow!=s&&this.hideMenu(),null!=n&&n(e)),this.eventReceiver=null,mxEvent.consume(e)})),mxEvent.addListener(s,"mouseout",mxUtils.bind(this,function(e){s.className="mxPopupMenuItem"}))),s},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,o=document.documentElement;n+a>(i.scrollLeft||o.scrollLeft)+(i.clientWidth||o.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 o=this.graph.view.getTranslate(),s=this.graph.view.getScale();i.x+=o.x*s,i.y+=o.y*s,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),o=0;o<i;o++){var s=a.view.getState(a.model.getChildAt(e.cell,o));this.visitStatesRecursive(s,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,o,s,r,l){(n=this.state).fillColor=e,n.fillAlpha=null!=r?r:1,n.gradientColor=t,n.gradientAlpha=null!=l?l:1,n.gradientDirection=s},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,o){this.addOp(this.curveOp,e,t,n,a,i,o)},mxAbstractCanvas2D.prototype.arcTo=function(e,t,n,a,i,o,s){for(e=mxUtils.arcToCurves(this.lastX,this.lastY,e,t,n,a,i,o,s),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,o){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 o=this.createElement("rotate");(0!=e||t||n)&&(o.setAttribute("theta",this.format(e)),o.setAttribute("flipH",t?"1":"0"),o.setAttribute("flipV",n?"1":"0"),o.setAttribute("cx",this.format(a)),o.setAttribute("cy",this.format(i)),this.root.appendChild(o))},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,o,s,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(o)),null!=s&&d.setAttribute("direction",s),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,o){var s=this.createElement("roundrect");s.setAttribute("x",this.format(e)),s.setAttribute("y",this.format(t)),s.setAttribute("w",this.format(n)),s.setAttribute("h",this.format(a)),s.setAttribute("dx",this.format(i)),s.setAttribute("dy",this.format(o)),this.root.appendChild(s)},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,o,s,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",o?"1":"0"),l.setAttribute("flipH",s?"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,o){var s=this.createElement("curve");s.setAttribute("x1",this.format(e)),s.setAttribute("y1",this.format(t)),s.setAttribute("x2",this.format(n)),s.setAttribute("y2",this.format(a)),s.setAttribute("x3",this.format(i)),s.setAttribute("y3",this.format(o)),this.root.appendChild(s),this.lastX=i,this.lastY=o},mxXmlCanvas2D.prototype.close=function(){this.root.appendChild(this.createElement("close"))},mxXmlCanvas2D.prototype.text=function(e,t,n,a,i,o,s,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!=o&&u.setAttribute("align",o),null!=s&&u.setAttribute("valign",s),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 o=this.createGradientId(e,t,n,a,i),s=this.gradients[o];if(null==s){var r=this.root.ownerSVGElement,l=0,d=o+"-"+l;if(null!=r)for(s=r.ownerDocument.getElementById(d);null!=s&&s.ownerSVGElement!=r;)d=o+"-"+l++,s=r.ownerDocument.getElementById(d);else d="id"+ ++this.refCount;null==s&&((s=this.createSvgGradient(e,t,n,a,i)).setAttribute("id",d),null!=this.defs?this.defs.appendChild(s):r.appendChild(s)),this.gradients[o]=s}return s.getAttribute("id")},mxSvgCanvas2D.prototype.createSvgGradient=function(e,t,n,a,i){var o=this.createElement("linearGradient");return o.setAttribute("x1","0%"),o.setAttribute("y1","0%"),o.setAttribute("x2","0%"),o.setAttribute("y2","0%"),null==i||i==mxConstants.DIRECTION_SOUTH?o.setAttribute("y2","100%"):i==mxConstants.DIRECTION_EAST?o.setAttribute("x2","100%"):i==mxConstants.DIRECTION_NORTH?o.setAttribute("y1","100%"):i==mxConstants.DIRECTION_WEST&&o.setAttribute("x1","100%"),n=n<1?";stop-opacity:"+n:"",(i=this.createElement("stop")).setAttribute("offset","0%"),i.setAttribute("style","stop-color:"+e+n),o.appendChild(i),n=a<1?";stop-opacity:"+a:"",(i=this.createElement("stop")).setAttribute("offset","100%"),i.setAttribute("style","stop-color:"+t+n),o.appendChild(i),o},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 o=this.state;if(a+=o.dx,i+=o.dy,a*=o.scale,i*=o.scale,o.transform=o.transform||"",t&&n)e+=180;else if(t^n){var s=t?a:0,r=t?-1:1,l=n?i:0,d=n?-1:1;o.transform+="translate("+this.format(s)+","+this.format(l)+")scale("+this.format(r)+","+this.format(d)+")translate("+this.format(-s)+","+this.format(-l)+")"}(t?!n:n)&&(e*=-1),0!=e&&(o.transform+="rotate("+this.format(e)+","+this.format(a)+","+this.format(i)+")"),o.rotation+=e,o.rotationCx=a,o.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,o=this.createElement("rect");o.setAttribute("x",this.format((e+i.dx)*i.scale)),o.setAttribute("y",this.format((t+i.dy)*i.scale)),o.setAttribute("width",this.format(n*i.scale)),o.setAttribute("height",this.format(a*i.scale)),this.node=o},mxSvgCanvas2D.prototype.roundrect=function(e,t,n,a,i,o){this.rect(e,t,n,a),0<i&&this.node.setAttribute("rx",this.format(i*this.state.scale)),0<o&&this.node.setAttribute("ry",this.format(o*this.state.scale))},mxSvgCanvas2D.prototype.ellipse=function(e,t,n,a){var i=this.state,o=this.createElement("ellipse");o.setAttribute("cx",Math.round((e+n/2+i.dx)*i.scale)),o.setAttribute("cy",Math.round((t+a/2+i.dy)*i.scale)),o.setAttribute("rx",n/2*i.scale),o.setAttribute("ry",a/2*i.scale),this.node=o},mxSvgCanvas2D.prototype.image=function(e,t,n,a,i,o,s,r){i=this.converter.convert(i),o=null==o||o,s=null!=s&&s,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),o||d.setAttribute("preserveAspectRatio","none"),l.alpha<1&&d.setAttribute("opacity",l.alpha),i=this.state.transform||"",s||r){var c=o=1,m=0,u=0;s&&(o=-1,m=-n-2*e),r&&(c=-1,u=-a-2*t),i+="scale("+o+","+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,o,s,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,o,s,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,o==mxConstants.ALIGN_CENTER?i-=n/2:o==mxConstants.ALIGN_RIGHT&&(i-=n),e+=i,s==mxConstants.ALIGN_MIDDLE?d-=a/2:s==mxConstants.ALIGN_BOTTOM&&(d-=a),t+=d,o=1!=u.scale?"scale("+u.scale+")":"",0!=u.rotation&&this.rotateHtml?(o+="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&&(o+="rotate("+m+","+-i+","+-d+")"),r.setAttribute("transform","translate("+Math.round(e)+","+Math.round(t)+")"+o),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,o,s,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)),o=0,s=i+"-"+o;null!=document.getElementById(s);)s=i+"-"+ ++o;return clip=this.createElement("clipPath"),clip.setAttribute("id",s),(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,o,s,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,o==mxConstants.ALIGN_CENTER?g-=n/2:o==mxConstants.ALIGN_RIGHT&&(g-=n),s==mxConstants.ALIGN_MIDDLE?c-=a/2:s==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,o),"start"!=(c=o==mxConstants.ALIGN_RIGHT?"end":o==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,s==mxConstants.ALIGN_MIDDLE?c-=(a=(this.matchHtmlAlignment&&d&&0<a?Math.min(v,a):v)/2)+1:s==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,o,s,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,o,s,r,l){var d=this.state;if(null!=d.fontBackgroundColor||null!=d.fontBorderColor){var c=null;null!=(c=l?(s==mxConstants.ALIGN_CENTER?n-=i/2:s==mxConstants.ALIGN_RIGHT&&(n-=i),r==mxConstants.ALIGN_MIDDLE?a-=o/2:r==mxConstants.ALIGN_BOTTOM&&(a-=o),new mxRectangle((n+1)*d.scale,a*d.scale,(i-2)*d.scale,(o+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,o=c.offsetHeight,c.parentNode.removeChild(c),s==mxConstants.ALIGN_CENTER?n-=i/2:s==mxConstants.ALIGN_RIGHT&&(n-=i),r==mxConstants.ALIGN_MIDDLE?a-=o/2:r==mxConstants.ALIGN_BOTTOM&&(a-=o),new mxRectangle((n+1)*d.scale,(a+2)*d.scale,i*d.scale,(o+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),o=Math.cos(i),s=(i=Math.sin(i),a.shadowDx*a.scale),r=a.shadowDy*a.scale;"x"==this.root.style.flip?s*=-1:"y"==this.root.style.flip&&(r*=-1);var l=e.cloneNode(!0);return l.style.marginLeft=Math.round(s*o-r*i)+"px",l.style.marginTop=Math.round(s*i+r*o)+"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,o=(this.lastX+i.dx)*i.scale,s=(this.lastY+i.dy)*i.scale;e=(e+i.dx)*i.scale;s+=2/3*((t=(t+i.dy)*i.scale)-s);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(o+2/3*(e-o))+" "+this.format(s)+" "+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 o=this.state;return(e=document.createElement(e)).style.position="absolute",e.style.left=this.format((t+o.dx)*o.scale)+"px",e.style.top=this.format((n+o.dy)*o.scale)+"px",e.style.width=this.format(a*o.scale)+"px",e.style.height=this.format(i*o.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,o){this.node=this.createRect(mxClient.VML_PREFIX+":roundrect",e,t,n,a),this.node.setAttribute("arcsize",Math.max(100*i/n,100*o/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,o,s,r){var l=null;o?((l=this.createRect(mxClient.VML_PREFIX+":rect",e,t,n,a)).stroked="false",(e=document.createElement(mxClient.VML_PREFIX+":fill")).aspect=o?"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,s&&r?l.style.rotation="180":s?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,o="";return null!=i.fontBackgroundColor&&(o+="background-color:"+i.fontBackgroundColor+";"),null!=i.fontBorderColor&&(o+="border:1px solid "+i.fontBorderColor+";"),mxUtils.isNode(e)?n.appendChild(e):0<o.length&&!a?((a=document.createElement("div")).style.cssText=o,a.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",a.style.zoom="1",a.innerHTML=e,n.appendChild(a)):(n.style.cssText=o,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,o,s,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(o,s)).x,v=v.y;if(i=this.createDiv(i,o,s,d),o=document.createElement("div"),i.style.whiteSpace=r?(!c&&0<n&&(i.style.width=Math.round(n)+"px"),"normal"):"nowrap",r=u.rotation+(m||0),this.rotateHtml&&0!=r?(o.style.display="inline",o.style.zoom="1",o.appendChild(i),8==document.documentMode&&"DIV"!=this.root.nodeName?(p.appendChild(o),l.appendChild(p)):l.appendChild(o)):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),s=Math.cos(n);var h=Math.sin(n);8==document.documentMode&&(i.style.display="inline-block",o.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*s+n*-h)/2-m*n*(g+.5)+r*a*(v+.5),d=(n-n*s+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"),o.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11="+r+", M12="+m+", M21="+-m+", M22="+r+", sizingMethod='auto expand')",o.style.backgroundColor=this.rotatedHtmlBackground,this.state.alpha<1&&(o.style.filter+="alpha(opacity="+100*this.state.alpha+")"),i.style.visibility="",o.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),o,s,r,l,d,c,m)}},mxVmlCanvas2D.prototype.plainText=function(e,t,n,a,i,o,s,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:"+o,d.style.align=o,d.style.fontFamily=a.fontFamily,d.string=i,d.on="true",o=Math.round(a.fontSize*a.scale/this.vmlScale),d.style.fontSize=o+"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=o+((i=i.split("\n")).length-1)*o*mxConstants.LINE_HEIGHT,o=i=0,s==mxConstants.ALIGN_BOTTOM?o=-a/2:s!=mxConstants.ALIGN_MIDDLE&&(o=a/2),null!=m&&(s=(n.style.rotation=m)*(Math.PI/180),i=Math.sin(s)*o,o*=Math.cos(s)),n.appendChild(d),n.style.left=this.format(e-i)+"px",n.style.top=this.format(t+o)+"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,o=e.x,s=e.y,r=!1,l=!1,d=b=this.getGuideTolerance(),c=b;(b=a.clone()).x+=e.x,b.y+=e.y;var m=b.x,u=b.x+b.width,p=b.getCenterX(),g=b.y,v=b.y+b.height,h=b.getCenterY();e=function(e){e+=this.graph.panDx;var t=!1;if(Math.abs(e-p)<d?(o=e-a.getCenterX(),d=Math.abs(e-p),t=!0):Math.abs(e-m)<d?(o=e-a.x,d=Math.abs(e-m),t=!0):Math.abs(e-u)<d&&(o=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 b=function(e){e+=this.graph.panDy;var t=!1;if(Math.abs(e-h)<c?(s=e-a.getCenterY(),c=Math.abs(e-h),t=!0):Math.abs(e-g)<c?(s=e-a.y,c=Math.abs(e-g),t=!0):Math.abs(e-v)<c&&(s=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},f=0;f<this.states.length;f++){var A=this.states[f];null!=A&&(this.horizontal&&(e.call(this,A.getCenterX()),e.call(this,A.x),e.call(this,A.x+A.width)),this.vertical&&(b.call(this,A.getCenterY()),b.call(this,A.y),b.call(this,A.y+A.height)))}r||null==this.guideX?null!=this.guideX&&(this.guideX.node.style.visibility="visible",this.guideX.redraw()):this.guideX.node.style.visibility="hidden",l||null==this.guideY?null!=this.guideY&&(this.guideY.node.style.visibility="visible",this.guideY.redraw()):this.guideY.node.style.visibility="hidden",t&&(r||(t=a.x-(this.graph.snap(a.x/i-n.x)+n.x)*i,o=this.graph.snap(o/i)*i-t),l||(n=a.y-(this.graph.snap(a.y/i-n.y)+n.y)*i,s=this.graph.snap(s/i)*i-n)),e=new mxPoint(o,s)}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,o){this.drawChildren(e,t,n,a,i,o,this.bgNode,!1),this.drawChildren(e,t,n,a,i,o,this.fgNode,!0)},mxStencil.prototype.drawChildren=function(e,t,n,a,i,o,s,r){if(null!=s){var l=mxUtils.getValue(t.style,mxConstants.STYLE_DIRECTION,null);for(n=this.computeAspect(t.style,n,a,i,o,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),s=s.firstChild;null!=s;)s.nodeType==mxConstants.NODETYPE_ELEMENT&&this.drawNode(e,t,s,n,r),s=s.nextSibling}},mxStencil.prototype.computeAspect=function(e,t,n,a,i,o){e=t,t=a/this.w0;var s=i/this.h0;if(o="north"==o||"south"==o){s=a/this.h0,t=i/this.w0;var r=(a-i)/2;e+=r,n-=r}return"fixed"==this.aspect&&(t=s=Math.min(t,s),o?(e+=(i-this.w0*t)/2,n+=(a-this.h0*s)/2):(e+=(a-this.w0*t)/2,n+=(i-this.h0*s)/2)),new mxRectangle(e,n,t,s)},mxStencil.prototype.drawNode=function(e,t,n,a,i){var o=n.nodeName,s=a.x,r=a.y,l=a.width,d=a.height,c=Math.min(l,d);if("save"==o)e.save();else if("restore"==o)e.restore();else if("path"==o)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"==o)e.close();else if("move"==o)e.moveTo(s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("line"==o)e.lineTo(s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("quad"==o)e.quadTo(s+Number(n.getAttribute("x1"))*l,r+Number(n.getAttribute("y1"))*d,s+Number(n.getAttribute("x2"))*l,r+Number(n.getAttribute("y2"))*d);else if("curve"==o)e.curveTo(s+Number(n.getAttribute("x1"))*l,r+Number(n.getAttribute("y1"))*d,s+Number(n.getAttribute("x2"))*l,r+Number(n.getAttribute("y2"))*d,s+Number(n.getAttribute("x3"))*l,r+Number(n.getAttribute("y3"))*d);else if("arc"==o)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")),s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("rect"==o)e.rect(s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,Number(n.getAttribute("w"))*l,Number(n.getAttribute("h"))*d);else if("roundrect"==o)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(s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,c,a,t,t);else if("ellipse"==o)e.ellipse(s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,Number(n.getAttribute("w"))*l,Number(n.getAttribute("h"))*d);else if("image"==o)t=this.evaluateAttribute(n,"src",t),e.image(s+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"==o){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(s+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"==o)null!=(m=mxStencilRegistry.getStencil(n.getAttribute("name")))&&(s+=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,s,r,c,a));else if("fillstroke"==o)e.fillAndStroke();else if("fill"==o)e.fill();else if("stroke"==o)e.stroke();else if("strokewidth"==o)e.setStrokeWidth(Number(n.getAttribute("width"))*c);else if("dashed"==o)e.setDashed("1"==n.getAttribute("dashed"));else if("dashpattern"==o){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"==o?e.setStrokeColor(n.getAttribute("color")):"linecap"==o?e.setLineCap(n.getAttribute("cap")):"linejoin"==o?e.setLineJoin(n.getAttribute("join")):"miterlimit"==o?e.setMiterLimit(Number(n.getAttribute("limit"))):"fillcolor"==o?e.setFillColor(n.getAttribute("color")):"alpha"==o?e.setAlpha(n.getAttribute("alpha")):"fontcolor"==o?e.setFontColor(n.getAttribute("color")):"fontstyle"==o?e.setFontStyle(n.getAttribute("style")):"fontfamily"==o?e.setFontFamily(n.getAttribute("family")):"fontsize"==o&&e.setFontSize(Number(n.getAttribute("size"))*c);i&&("fillstroke"==o||"fill"==o||"stroke"==o)&&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,o=this.bounds.height/t;if(this.isPaintBoundsInverted()){n=n+(s=(i-o)/2),a=a-s;var s=i;i=o,o=s}if(this.updateTransform(e,n,a,i,o),this.configureCanvas(e,n,a,i,o),null!=this.stencil)this.paintStencilShape(e,n,a,i,o);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,o)},mxShape.prototype.configureCanvas=function(e,t,n,a,i){var o=null;null!=this.style&&(o=this.style.dashPattern),e.setAlpha(this.opacity/100),null!=this.isShadow&&e.setShadow(this.isShadow),null!=this.isDashed&&e.setDashed(this.isDashed),null!=o&&e.setDashPattern(o),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,o){var s=Math.ceil(this.strokewidth/2);e.setGradient("#ffffff","#ffffff",t,n,a,.6*i,"south",.9,.1),e.begin(),o+=2*s,this.isRounded?(e.moveTo(t-s+o,n-s),e.quadTo(t-s,n-s,t-s,n-s+o),e.lineTo(t-s,n+.4*i),e.quadTo(t+.5*a,n+.7*i,t+a+s,n+.4*i),e.lineTo(t+a+s,n-s+o),e.quadTo(t+a+s,n-s,t+a+s-o,n-s)):(e.moveTo(t-s,n-s),e.lineTo(t-s,n+.4*i),e.quadTo(t+.5*a,n+.7*i,t+a+s,n+.4*i),e.lineTo(t+a+s,n-s)),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,o,s,r,l,d){var c=mxMarker.markers[n];return null!=c?c(e,t,n,a,i,o,s,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,o,s){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!=o?o:mxConstants.ARROW_SPACING,this.endSize=null!=s?s:mxConstants.ARROW_SIZE}function mxText(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g,v,h,b,f,A){mxShape.call(this),this.value=e,this.bounds=t,this.color=null!=i?i:"black",this.align=null!=n?n:"",this.valign=null!=a?a:"",this.family=null!=o?o:mxConstants.DEFAULT_FONTFAMILY,this.size=null!=s?s: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!=b&&b,this.overflow=null!=f?f:"visible",this.labelPadding=null!=A?A:0,this.rotation=0}function mxTriangle(){mxActor.call(this)}function mxHexagon(){mxActor.call(this)}function mxLine(e,t,n){mxShape.call(this),this.bounds=e,this.stroke=t,this.strokewidth=null!=n?n:1}function mxImageShape(e,t,n,a,i){mxShape.call(this),this.bounds=e,this.image=t,this.fill=n,this.stroke=a,this.strokewidth=null!=i?i:1,this.shadow=!1}function mxLabel(e,t,n,a){mxRectangleShape.call(this,e,t,n,a)}function mxCylinder(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxConnector(e,t,n){mxPolyline.call(this,e,t,n)}function mxSwimlane(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxGraphLayout(e){this.graph=e}function mxStackLayout(e,t,n,a,i,o){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!=o?o: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 o=0;o<i.length;o++){var s=i[o];if(null!=(r=s.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==(s.target=l).connectsAsTarget.length&&(l.connectsAsTarget=[]),mxUtils.indexOf(l.connectsAsTarget,s)<0&&l.connectsAsTarget.push(s))}}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,o){this.layout=e,this.intraCellSpacing=t,this.interRankCellSpacing=n,this.orientation=a,this.initialX=i,this.parallelEdgeSpacing=o}!function(){function e(e,t,n,a,i,o,s,r,l,d){t=1.118*i*l,r=1.118*o*l,i*=s+l,o*=s+l;var c=a.clone();return c.x-=t,c.y-=r,s=n!=mxConstants.ARROW_CLASSIC?1:.75,a.x+=-i*s-t,a.y+=-o*s-r,function(){e.begin(),e.moveTo(c.x,c.y),e.lineTo(c.x-i-o/2,c.y-o+i/2),n==mxConstants.ARROW_CLASSIC&&e.lineTo(c.x-3*i/4,c.y-3*o/4),e.lineTo(c.x+o/2-i,c.y-o-i/2),e.close(),d?e.fillAndStroke():e.stroke()}}function t(e,t,n,a,i,o,s,r,l,d){r=n==mxConstants.ARROW_DIAMOND?.7071:.9862,t=i*l*r,r*=o*l,i*=s+l,o*=s+l;var c=a.clone();c.x-=t,c.y-=r,a.x+=-i-t,a.y+=-o-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-o/m,c.y+i/m-o/2),e.lineTo(c.x-i,c.y-o),e.lineTo(c.x-i/2+o/m,c.y-o/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,o,s,r,l,d){t=1.118*i*l,n=1.118*o*l,i*=s+l,o*=s+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-o/2,c.y-o+i/2),e.lineTo(c.x,c.y),e.lineTo(c.x+o/2-i,c.y-o-i/2),e.stroke()}}),mxMarker.addMarker("oval",function(e,t,n,a,i,o,s,r,l,d){var c=s/2,m=a.clone();return a.x-=i*c,a.y-=o*c,function(){e.ellipse(m.x-c,m.y-c,s,s),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 o=mxUtils.getValue(this.style,mxConstants.STYLE_ARCSIZE,100*mxConstants.RECTANGLE_ROUNDING_FACTOR)/100;o=Math.min(a*o,i*o);e.roundrect(t,n,a,i,o,o)}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",o={east:0,south:1,west:2,north:3},s=null!=this.direction?o[this.direction]:0;null!=this.gradientDirection&&(s=mxUtils.mod(s+o[this.gradientDirection]-1,4)),1==s?(i="1",o=n,n=a,a=o):2==s?(o=n,n=a,a=o):3==s&&(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 o=Math.min(4,Math.min(a/5,i/5));i-=2*o,0<(a-=2*o)&&0<i&&e.ellipse(t+o,n+o,a,i),e.stroke()},mxUtils.extend(mxRhombus,mxShape),mxRhombus.prototype.paintVertexShape=function(e,t,n,a,i){var o=a/2,s=i/2;e.begin(),e.moveTo(t+o,n),e.lineTo(t+a,n+s),e.lineTo(t+o,n+i),e.lineTo(t,n+s),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],o=t[t.length-1];e.begin(),e.moveTo(i.x,i.y);for(var s=1;s<t.length-1;s++){var r=t[s],l=i.x-r.x;i=i.y-r.y;if(n&&s<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[s+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(o.x,o.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,o=t[0],s=t[t.length-1],r=s.x-o.x,l=s.y-o.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=o.x-c/2+n*r)+c),u=(o=o.y-a/2+n*l)+a,p=m+d*r,g=p+c,v=(d=u+d*l)+a,h=g-3*c,b=v-3*a;e.begin(),e.moveTo(i,o),e.lineTo(m,u),e.lineTo(p,d),e.lineTo(g,v),e.lineTo(s.x-n*r,s.y-n*l),e.lineTo(h,b),e.lineTo(h+c,b+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 o=mxUtils.isNode(this.value)||this.dialect==mxConstants.DIALECT_STRICTHTML,s=o||e instanceof mxVmlCanvas2D?"html":"",r=this.value;!o&&"html"==s&&(r=mxUtils.htmlEntities(r,!1)),r=!mxUtils.isNode(this.value)&&this.replaceLinefeeds&&"html"==s?r.replace(/\n/g,"<br/>"):r,e.text(n,a,i,t,r,this.align,this.valign,this.wrap,s,"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;t[mxClient.CSS_PREFIX+"Transform"]=0!=e?(t[mxClient.CSS_PREFIX+"TransformOrigin"]=100*-n+"% "+100*-a+"%","translate("+100*n+"%,"+100*a+"%)scale("+this.scale+") rotate("+e+"deg)"):(t[mxClient.CSS_PREFIX+"TransformOrigin"]="0% 0%","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,o=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 s=this.value;this.dialect!=mxConstants.DIALECT_STRICTHTML&&(s=mxUtils.htmlEntities(s,!1)),s=this.replaceLinefeeds?s.replace(/\n/g,"<br/>"):s,r.innerHTML=s}i=r.offsetWidth+2,o=r.offsetHeight+2}else i=this.node.offsetWidth,o=this.node.offsetHeight+1;this.offsetWidth=i,this.offsetHeight=o,r=this.bounds.width/a,s=this.bounds.height/a,mxClient.IS_QUIRKS&&(this.clipped||"fill"==this.overflow)&&0<s?(s=Math.min(s,o),e.height=Math.round(s+1)+"px"):s=o,"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);s*=a;var r=r*a,l=(i=this.getTextRotation()*(Math.PI/180),o=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=(s-s*d+r*c)/2+l*(t=r*-(t+.5))-o*(n=s*-(n+.5));0!=i&&(e.filter="progid:DXImageTransform.Microsoft.Matrix(M11="+o+", M12="+l+", M21="+-l+", M22="+o+", sizingMethod='auto expand')"),e.zoom=a,e.left=Math.round(this.bounds.x+((r-r*d+s*c)/2-o*t-l*n)-r/2)+"px",e.top=Math.round(this.bounds.y+m-s/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 o=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BACKGROUND,null),s=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BORDER,null);null==o&&null==s||(e.setFillColor(o),e.setStrokeColor(s),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),o=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),s=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-s)/2:i==mxConstants.ALIGN_RIGHT?e+(n-s-l):e+l,t=o==mxConstants.ALIGN_TOP?t+l:o==mxConstants.ALIGN_BOTTOM?t+(a-r-l):t+(a-r)/2,s,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),o=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),s=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-s-l):i==mxConstants.ALIGN_CENTER?e+(n-s)/2:e+l,t=o==mxConstants.ALIGN_BOTTOM?t+(a-r-l):o==mxConstants.ALIGN_TOP?t+l:t+(a-r)/2,s,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,o){t=Math.min(this.maxHeight,Math.round(i/5)),(o&&null!=this.fill||!o&&null==this.fill)&&(e.moveTo(0,t),e.curveTo(0,2*t,a,2*t,a,t),o||(e.stroke(),e.begin())),o||(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],o=t[n+1];e.quadTo(i.x,i.y,(i.x+o.x)/2,(i.y+o.y)/2)}i=t[a-2],o=t[a-1],e.quadTo(i.x,i.y,o.x,o.y),e.stroke()},mxConnector.prototype.createMarker=function(e,t,n){var a=t.length,i=n?t[1]:t[a-2],o=(a=(t=n?t[0]:t[a-1]).x-i.x,t.y-i.y),s=(i=a/(s=Math.max(1,Math.sqrt(a*a+o*o))),a=o/s,o=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,s,t,i,a,o,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 o=Math.min(i,mxUtils.getValue(this.style,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),s=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,o),this.paintRoundedSwimlane(e,t,n,a,i,o,l,s,r)):this.paintSwimlane(e,t,n,a,i,o,s,r),s=mxUtils.getValue(this.style,mxConstants.STYLE_SEPARATORCOLOR,mxConstants.NONE),this.paintSeparator(e,a,o,i,s),null!=this.image&&(i=this.getImageBounds(t,o,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,o,l))},mxSwimlane.prototype.paintSwimlane=function(e,t,n,a,i,o,s,r){s!=mxConstants.NONE&&(e.save(),e.setFillColor(s),e.rect(0,0,a,i),e.fillAndStroke(),e.restore(),e.setShadow(!1)),e.begin(),e.moveTo(0,o),e.lineTo(0,0),e.lineTo(a,0),e.lineTo(a,o),r&&e.close(),e.fillAndStroke(),o<i&&s==mxConstants.NONE&&(e.pointerEvents=!1,e.begin(),e.moveTo(0,o),e.lineTo(0,i),e.lineTo(a,i),e.lineTo(a,o),e.stroke())},mxSwimlane.prototype.paintRoundedSwimlane=function(e,t,n,a,i,o,s,r,l){r!=mxConstants.NONE&&(e.save(),e.setFillColor(r),e.roundrect(0,0,a,i,s,s),e.fillAndStroke(),e.restore(),e.setShadow(!1)),e.begin(),e.moveTo(a,o),e.lineTo(a,s),e.quadTo(a,0,a-Math.min(a/2,s),0),e.lineTo(Math.min(a/2,s),0),e.quadTo(0,0,0,s),e.lineTo(0,o),l&&e.close(),e.fillAndStroke(),o<i&&r==mxConstants.NONE&&(e.pointerEvents=!1,e.begin(),e.moveTo(0,o),e.lineTo(0,i-s),e.quadTo(0,i,Math.min(a/2,s),i),e.lineTo(a-Math.min(a/2,s),i),e.quadTo(a,i,a,i-s),e.lineTo(a,o),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 o=mxCellPath.create(e);if(null==i[o]&&(null==(a=n(i[o]=e,a))||a)&&0<(a=this.graph.model.getEdgeCount(e)))for(o=0;o<a;o++){var s=this.graph.model.getEdgeAt(e,o),r=this.graph.model.getTerminal(s,!0)==e;t&&!r||(r=this.graph.view.getVisibleTerminal(s,!r),this.traverse(r,t,n,s,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),o=(i=this.getParentOffset(i),0);o<t.length;o++)t[o].x-=i.x,t[o].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),o=null;if(null!=i){if(o=new mxRectangle(t,n,i.width,i.height),this.useBoundingBox){var s=this.graph.getView().getState(e);if(null!=s&&null!=s.text&&null!=s.text.boundingBox){var r=this.graph.getView().scale,l=s.text.boundingBox;s.text.boundingBox.x<s.x&&(t+=(s.x-l.x)/r,o.width=l.width),s.text.boundingBox.y<s.y&&(n+=(s.y-l.y)/r,o.height=l.height)}}null!=this.parent&&(null!=(s=a.getParent(e))&&s!=this.parent&&(t-=(s=this.getParentOffset(s)).x,n-=s.y)),i.x==t&&i.y==n||((i=i.clone()).x=t,i.y=n,a.setGeometry(e,i))}return o},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,o=Math.max(r.y-a.y,0)/n,s=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-o,t.width+i+s,t.height+o+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),o=this.graph.getBoundingBoxFromGeometry(i),s=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!=o&&null!=s&&((s=s.clone()).x=s.x+o.x-t-r,s.y=s.y+o.y-t-l,s.width=o.width+2*t+r,s.height=o.height+2*t+l,this.graph.getModel().setGeometry(a,s),this.graph.moveCells(i,t+r-o.x,t+l-o.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),o=this.isHorizontal();if(null!=e&&null!=i){var s=0,r=0,l=a.getChildCount(i);for(t=o?t:n,null!=(s=this.graph.getView().getState(i))&&(t-=o?s.x:s.y),s=0;s<l;s++)if((n=a.getChildAt(i,s))!=e&&null!=(n=a.getGeometry(n))){if(n=o?n.x+n.width/2:n.y+n.height/2,r<t&&t<n)break;r=n}o=i.getIndex(e),o=Math.max(0,s-(o<s?1:0)),a.add(i,e,o)}},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 o=this.x0+this.border,s=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?s+=l:o+=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?s+=l+this.spacing:o+=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=o:u.y=s),t?u.y=s:u.x=o,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,o=0,s=n.getChildCount(a);for(i=0;i<s;i++){var r=n.getChildAt(a,i);if(null!=(r=this.getVertexBounds(r))){if(r=r.x+r.width/2,o<t&&t<r)break;o=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=[],o=n.getChildCount(e),s=0;s<o;s++){var r=n.getChildAt(e,s);!this.isVertexIgnored(r)&&this.isVertexMovable(r)&&i.push(r)}if(0<(o=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+(o-1)*this.spacing,0<(a=t?(a.width-l-e)/o:(a.height-d-e)/o)){n.beginUpdate();try{for(s=0;s<o;s++){r=i[s];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<(s=this.graph.findTreeRoots(e,!0,this.invert)).length)for(var a=0;a<s.length;a++)if(!this.isVertexIgnored(s[a])&&0<this.graph.getEdges(s[a],null,this.invert,!this.invert,!1).length){t=s[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 o=this.graph.gridSize,s=o;if(!this.moveTree){var r=this.getVertexBounds(t);null!=r&&(o=r.x,s=r.y)}if((r=null)!=(r=this.isHorizontal()?this.horizontalLayout(i,o,s):this.verticalLayout(i,null,o,s))){var l=a=0;r.x<0&&(a=Math.abs(o-r.x)),r.y<0&&(l=Math.abs(s-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 o=null;e=this.graph.getEdges(e,t,this.invert,!this.invert,!1,!0);for(var s=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=s.getState(l))?d.getVisibleTerminal(this.invert):s.getVisibleTerminal(l,this.invert);null!=(d=this.dfs(l,t,n))&&null!=a.getGeometry(l)&&(null==o?i.child=d:o.next=d,o=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 o=this.merge(e.contour,n.contour);n.offsetY=o+a,n.offsetX=0,i+=o+(a=n.width+t),n=n.next}return i},mxCompactTreeLayout.prototype.merge=function(e,t){for(var n=0,a=0,i=0,o=e.lowerHead,s=t.upperHead;null!=s&&null!=o;){var r=this.offset(n,a,s.dx,s.dy,o.dx,o.dy);a=a+r,i=i+r;n+s.dx<=o.dx?(n+=s.dx,a+=s.dy,s=s.next):(n-=o.dx,a-=o.dy,o=o.next)}return null!=s?(n=this.bridge(e.upperTail,0,0,s,n,a),e.upperTail=null!=n.next?t.upperTail:n,e.lowerTail=t.lowerTail):null==(n=this.bridge(t.lowerTail,n,a,o,0,0)).next&&(e.lowerTail=n),e.lowerHead=t.lowerHead,i},mxCompactTreeLayout.prototype.offset=function(e,t,n,a,i,o){var s;return i<=e||e+n<=0?0:0<(s=0<i*a-n*o?e<0?e*a/n-t:0<e?e*o/i-t:-t:i<e+n?o-(t+(i-e)*a/n):e+n<i?(n+e)*o/i-(t+a):o-(t+a))?s:0},mxCompactTreeLayout.prototype.bridge=function(e,t,n,a,i,o){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,o+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 o=t.x;this.horizontal&&(o=t.y),i.push(new WeightedCellSorter(t,o)),t=t.next}i.sort(WeightedCellSorter.prototype.compare),(o=e.width)>(s=(a+1)*this.prefHozEdgeSep)+2*this.prefHozEdgeSep&&(o-=2*this.prefHozEdgeSep),t=(e=o/a)/2,o>s+2*this.prefHozEdgeSep&&(t+=this.prefHozEdgeSep);o=this.minEdgeJetty-this.prefVertEdgeOff;for(var s=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+o,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+o,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?o+=this.prefVertEdgeOff:a/2<l&&(o-=this.prefVertEdgeOff),t+=e,s=Math.max(s,o)}},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,o=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 s=this.vertexArray[a];this.cellLocation[a]=[];var r=mxCellPath.create(s);this.indices[r]=a;var l=this.getVertexBounds(s),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<o;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(o)),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++)s=this.vertexArray[a],this.isVertexMovable(s)&&(null!=(l=this.getVertexBounds(s))&&(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(s,m,u),n=null==n?m:Math.min(n,m),e=null==e?u:Math.min(e,u)));a=1-(n||0),s=1-(e||0),null!=i&&(a+=i.x,s+=i.y),this.graph.moveCells(this.vertexArray,a,s)}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=(o=this.cellLocation[e][0]-this.cellLocation[n][0])*o+(s=this.cellLocation[e][1]-this.cellLocation[n][1])*s-this.radiusSquared[e]-this.radiusSquared[n])<this.minDistanceLimitSquared&&(a=this.minDistanceLimitSquared);var a,i=Math.sqrt(a),o=o/i*(a=a/this.forceConstant),s=s/i*a;this.dispX[e]-=o,this.dispY[e]-=s,this.dispX[n]+=o,this.dispY[n]+=s}}},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 o=Math.sqrt(a*a+i*i),s=o-this.radius[t]-this.radius[n];s>this.maxDistanceLimit||(s<this.minDistanceLimit&&(s=this.minDistanceLimit),a=a/o*(s=this.forceConstantSquared/s),i=i/o*s,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,o=[],s=t.getChildCount(e),r=0;r<s;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{o.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(o.length,n);this.moveCircle&&(i=this.x0,a=this.y0),this.circle(o,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,o=2*Math.PI/i,s=0;s<i;s++)this.isVertexMovable(e[s])&&this.setVertexLocation(e[s],n+t+t*Math.sin(s*o),a+t+t*Math.cos(s*o))},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 o=t.getChildAt(e,i);if(!this.isEdgeIgnored(o)){var s=this.getEdgeId(o);null!=s&&(null==n[s]&&(n[s]=[]),n[s].push(o))}}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((s=(n=this.graph.getModel()).getGeometry(n.getTerminal(t,!0)))==(o=n.getGeometry(n.getTerminal(t,!1)))){t=s.x+s.width+this.spacing;for(var n=s.y+s.height/2,a=0;a<e.length;a++)this.route(e[a],t,n),t+=this.spacing}else if(null!=s&&null!=o){t=s.x+s.width/2,n=s.y+s.height/2,a=o.x+o.width/2-t;var i=o.y+o.height/2-n,o=Math.sqrt(a*a+i*i),s=i*this.spacing/o;for(o=a*this.spacing/o,t=t+a/2+s*(e.length-1)/2,n=n+i/2-o*(e.length-1)/2,a=0;a<e.length;a++)this.route(e[a],t,n),t-=s,n+=o}},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=[],o=n.getChildCount(e),s=0;s<o;s++){var r=n.getChildAt(e,s),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 o=0;o<e.length;o++){var s=e[o];null!=s&&this.avoid(i,s)}}}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,o=-a.y+t.y+t.height;i=Math.abs(i)<Math.abs(o)?i:o,o=-a.x-a.width+t.x,a=-a.x+t.x+t.width,a=Math.abs(o)<Math.abs(a)?o:a;Math.abs(a)<Math.abs(i)?i=0:a=0,null!=(o=n.getGeometry(e.cell))&&(null!=(o=o.clone()).offset?(o.offset.x+=a,o.offset.y+=i):o.offset=new mxPoint(a,i),n.setGeometry(e.cell,o))}},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 o=mxCellPath.create(t[i]);this.vertexMapper[o]=n[i],o=e.getEdges(t[i]),n[i].connectsAsSource=[];for(var s=0;s<o.length;s++){if((d=e.getVisibleTerminal(o[s],!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 o,s;o=(n=e[0]).connectsAsTarget,s=n.connectsAsSource;var r=!0,l=this.SOURCESCANSTARTRANK;for(t=0;t<o.length;t++){var d=o[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!=s)for(t=0;t<s.length;t++)(d=s[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,o=(n=i[t]).connectsAsSource,a=0;a<o.length;a++)d=(d=o[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 o=[];this.ranks=[];for(var e=0;e<this.maxRank+1;e++)o[e]=[],this.ranks[e]=o[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&&(o[t.temp[0]].push(t),t.maxRank=t.temp[0],t.minRank=t.temp[0],t.temp[0]=o[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++)o[e].push(n),n.setGeneralPurposeVariable(e,o[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 o=t[i];null!=o&&(null==a&&(a={}),n?(o.hashCode=[],o.hashCode[0]=this.dfsCount,o.hashCode[1]=i,this.extendedDfs(null,o,null,e,a,o.hashCode,i,0)):this.dfs(null,o,null,e,a,0))}this.dfsCount++}},mxGraphHierarchyModel.prototype.dfs=function(e,t,n,a,i,o){if(null!=t){var s=mxCellPath.create(t.cell);if(null==i[s])for(a(e,i[s]=t,n,o,0),e=t.connectsAsSource.slice(),n=0;n<e.length;n++)s=e[n],this.dfs(t,s.target,s,a,i,o+1);else a(e,t,n,o,1)}},mxGraphHierarchyModel.prototype.extendedDfs=function(e,t,n,a,i,o,s,r){if(null!=t)if(null==e||null!=t.hashCode&&t.hashCode[0]==e.hashCode[0]||(o=e.hashCode.length+1,t.hashCode=e.hashCode.slice(),t.hashCode[o-1]=s),null==i[s=mxCellPath.create(t.cell)])for(a(e,i[s]=t,n,r,0),e=t.connectsAsSource.slice(),n=0;n<e.length;n++)s=e[n],this.extendedDfs(t,s.target,s,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 o=e.ranks[i],s=0;s<o.length;s++){var r=o[s];this.nestedBestRanks[i][r.getGeneralPurposeVariable(i)]=r}else for(n++,i=0;i<this.nestedBestRanks.length;i++)for(o=e.ranks[i],s=0;s<o.length;s++)(r=o[s]).setGeneralPurposeVariable(i,s);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,o=t.ranks[e-1].length,s=[],r=0;r<i;r++)s[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);s[l][m]=201207}for(r=0;r<i;r++)for(c=0;c<o;c++)if(201207==s[r][c]){for(a=r+1;a<i;a++)for(l=0;l<c;l++)201207==s[a][l]&&n++;for(a=0;a<r;a++)for(l=c+1;l<o;l++)201207==s[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,o=(n=!1,0);o<t.ranks.length;o++){for(var s=t.ranks[o],r=[],l=0;l<s.length;l++){(f=(b=s[l]).getGeneralPurposeVariable(o))<0&&(f=l),r[f]=b}var d=f=b=null,c=null,m=null,u=null,p=null,g=null,v=null,h=null;for(l=0;l<s.length-1;l++){if(0==l){for(var b=(v=r[l]).getNextLayerConnectedCells(o),f=v.getPreviousLayerConnectedCells(o),A=(m=[],u=[],0);A<b.length;A++)m[A]=b[A].getGeneralPurposeVariable(o+1);for(A=0;A<f.length;A++)u[A]=f[A].getGeneralPurposeVariable(o-1)}else b=d,f=c,m=p,u=g,v=h;for(d=(h=r[l+1]).getNextLayerConnectedCells(o),c=h.getPreviousLayerConnectedCells(o),p=[],g=[],A=0;A<d.length;A++)p[A]=d[A].getGeneralPurposeVariable(o+1);for(A=0;A<c.length;A++)g[A]=c[A].getGeneralPurposeVariable(o-1);var E=0,y=0;for(A=0;A<m.length;A++)for(var S=0;S<p.length;S++)m[A]>p[S]&&E++,m[A]<p[S]&&y++;for(A=0;A<u.length;A++)for(S=0;S<g.length;S++)u[A]>g[S]&&E++,u[A]<g[S]&&y++;(y<E||y==E&&i)&&(d=v.getGeneralPurposeVariable(o),v.setGeneralPurposeVariable(o,h.getGeneralPurposeVariable(o)),h.setGeneralPurposeVariable(o,d),d=b,c=f,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=[],o=0;o<n;o++){var s,r,l=this.nestedBestRanks[e][o],d=new MedianCellSorter;d.cell=l,r=t?e+1:e-1,null!=(s=t?l.getNextLayerConnectedCells(e):l.getPreviousLayerConnectedCells(e))&&0!=s.length?(d.medianValue=this.medianValue(s,r),a.push(d)):i[l.getGeneralPurposeVariable(e)]=!0}for(a.sort(MedianCellSorter.prototype.compare),o=0;o<n;o++)null==i[o]&&(l=a.shift().cell).setGeneralPurposeVariable(e,o)},mxMedianHybridCrossingReduction.prototype.medianValue=function(e,t){for(var n=[],a=0,i=0;i<e.length;i++){var o=e[i];n[a++]=o.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:(o=n[(i=a/2)-1]-n[0],a=n[a-1]-n[i],(n[i-1]*a+n[i]*o)/(o+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(),o={},s=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),o[e]=t,delete s[e]},n,!0,null),n=null,0<s.lenth&&(n=mxUtils.clone(s,null,!0)),e=mxUtils.clone(o,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),o[e]=t,delete s[e]},s,!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],o=0;o<i.length;o++){var s=i[o];s.setX(a,s.getGeneralPurposeVariable(a))}t=this.currentXDelta}else for(a=0;a<e.ranks.length;a++)for(i=e.ranks[a],o=0;o<i.length;o++)(s=i[o]).setGeneralPurposeVariable(a,s.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 o=0;o<a[i].length;o++){var s=a[i][o];(r=new WeightedCellSorter(s,i)).rankIndex=o,r.visited=!0,t.push(r),n[s=mxCellPath.create(s.getCoreCell())]=r}}for(e=10*t.length,o=0;0<t.length&&o<=e;){i=(r=t.shift()).cell;var r,l=r.weightedValue,d=parseInt(r.rankIndex),c=(s=i.getNextLayerConnectedCells(l),i.getPreviousLayerConnectedCells(l)),m=s.length,u=c.length,p=this.medianXValue(s,l+1),g=this.medianXValue(c,l-1),v=m+u,h=i.getGeneralPurposeVariable(l),b=h;if(0<v&&(b=(p*m+g*u)/v),m=!1,b<h-1?0==d?(i.setGeneralPurposeVariable(l,b),m=!0):(h=(h=(d=a[l][d-1]).getGeneralPurposeVariable(l))+d.width/2+this.intraCellSpacing+i.width/2)<b?(i.setGeneralPurposeVariable(l,b),m=!0):h<i.getGeneralPurposeVariable(l)-1&&(i.setGeneralPurposeVariable(l,h),m=!0):h+1<b&&(d==a[l].length-1?(i.setGeneralPurposeVariable(l,b),m=!0):b<(h=(h=(d=a[l][d+1]).getGeneralPurposeVariable(l))-d.width/2-this.intraCellSpacing-i.width/2)?(i.setGeneralPurposeVariable(l,b),m=!0):h>i.getGeneralPurposeVariable(l)+1&&(i.setGeneralPurposeVariable(l,h),m=!0)),m){for(i=0;i<s.length;i++)l=s[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,o++}},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=[],o=0;o<t.length;o++){var s=t[o];a[o]=new WeightedCellSorter,a[o].cell=s,a[o].rankIndex=o;var r=mxCellPath.create(s.getCoreCell());i[r]=a[o];var l=null;l=n<e?s.getPreviousLayerConnectedCells(e):s.getNextLayerConnectedCells(e);a[o].weightedValue=this.calculatedWeightedValue(s,l)}for(a.sort(WeightedCellSorter.prototype.compare),o=0;o<a.length;o++){r=0,s=a[o].cell,r=0,null!=(l=n<e?s.getPreviousLayerConnectedCells(e).slice():s.getNextLayerConnectedCells(e).slice())&&(r=0<(r=l.length)?this.medianXValue(l,n):s.getGeneralPurposeVariable(e));for(var d=0,c=(l=-1e8,a[o].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+s.width/2,c=-1):(d+=u.width+this.intraCellSpacing,c--)}}for(d=0,u=1e8,c=a[o].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-s.width/2,c=a.length):(d+=p.width+this.intraCellSpacing,c++)}l<=r&&r<=u?s.setGeneralPurposeVariable(e,r):r<l?(s.setGeneralPurposeVariable(e,l),this.currentXDelta+=l-r):u<r&&(s.setGeneralPurposeVariable(e,u),this.currentXDelta+=r-u),a[o].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,o=0;o<t.length;o++){var s=t[o];if(s.isVertex()){var r=this.layout.getVertexBounds(s.cell);null!=r?this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(s.width=r.width,s.height=r.height):(s.width=r.height,s.height=r.width):i=!0,n=Math.max(n,s.height)}else s.isEdge()&&(r=1,null!=s.edges?r=s.edges.length:mxLog.warn("edge.edges is null"),s.width=(r-1)*this.parallelEdgeSpacing);a+=s.width/2,s.setX(e,a),s.setGeneralPurposeVariable(e,a),a+=s.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 o=0,s=t.ranks[i],r=this.initialX,l=!1,d=0;d<s.length;d++){var c=s[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,o=Math.max(o,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=o/2+a/2+this.interRankCellSpacing,a=o,n=this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_WEST?n+r:n-r,d=0;d<s.length;d++)s[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 o=i.getGeneralPurposeVariable(i.minRank+1),s=!0,r=0,l=i.minRank+2;l<i.maxRank;l++){o!=(d=i.getGeneralPurposeVariable(l))?(s=!1,o=d):r++}if(!s){s=o=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,o++):this.repositionValid(t,i,l+1,m)?(d[l-i.minRank-1]=m,o++):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,s++):this.repositionValid(t,i,l-1,m)?(c[l-i.minRank-2]=m,s++):(c[l-i.minRank-2]=i.getX(l-1),m=u);if(r<s||r<o)if(o<=s)for(l=i.maxRank-2;l>i.minRank;l--)i.setX(l,c[l-i.minRank-1]);else if(s<o)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,o=0;o<e.length;o++)if(t==e[o]){i=o;break}if(i<0)return!1;if(a<(o=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(o<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,o=t.vertexMapper;for(a in o){var s=o[a];if(this.setVertexLocation(s),this.layout.resizeParent){s=e.model.getParent(s.cell);var r=mxCellPath.create(s);null==n[r]&&(n[r]=s)}}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 o=i.getPreviousLayerConnectedCells(t),s=t-1,r=0;r<2;r++){if(-1<s&&s<e.ranks.length&&null!=o&&0<o.length){for(var l=[],d=0;d<o.length;d++){var c=new WeightedCellSorter(o[d],o[d].getX(s));l.push(c)}l.sort(WeightedCellSorter.prototype.compare);var m=(c=i.x[0]-i.width/2)+i.width,u=o=0;for(s=[],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||(o+=p[v].edges.length,u++,s.push(p[v]))}else o+=g.edges.length,u++,s.push(g)}for(i.width>(o+1)*this.prefHozEdgeSep+2*this.prefHozEdgeSep&&(c+=this.prefHozEdgeSep,m-=this.prefHozEdgeSep),c+=(l=(m-c)/o)/2,m=this.minEdgeJetty-this.prefVertEdgeOff,d=u=0;d<s.length;d++){for(g=s[d].edges.length,v=mxCellPath.create(s[d].edges[0]),null==(p=this.jettyPositions[v])&&(p=[],this.jettyPositions[v]=p),d<o/2?m+=this.prefVertEdgeOff:o/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)}}o=i.getNextLayerConnectedCells(t),s=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,o=mxCellPath.create(e.edges[0]),s=(o=this.jettyPositions[o],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!=s&&(p=!p),null!=o){var g=p?2:0,v=p?this.rankTopY[a]:this.rankBottomY[n],h=o[4*i+1+g];p&&(h=-h),v+=h,g=o[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 b=(this.rankTopY[c]+this.rankBottomY[c+1])/2,f=(this.rankTopY[c-1]+this.rankBottomY[c])/2;if(p){var A=b;b=f,f=A}this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(u.push(new mxPoint(m,b)),u.push(new mxPoint(m,f))):(u.push(new mxPoint(b,m)),u.push(new mxPoint(f,m))),this.limitX=Math.max(this.limitX,m),c+=v}null!=o&&(g=p?2:0,v=p?this.rankBottomY[n]:this.rankTopY[a],h=o[4*i+3-g],p&&(h=-h),v-=h,g=o[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,o=null,s=-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),s<(l=d-c)&&(s=l,o=r)}}0==n.length&&null!=o&&n.push(o)}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),o=n.getChildCount(e),s=0;s<o;s++){var r=n.getChildAt(e,s);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=[],s=0;s<a.length;s++)((i=this.getVisibleTerminal(a[s],!0))==(o=this.getVisibleTerminal(a[s],!1))||i!=o&&(o==e&&(null==this.parent||this.graph.isValidAncestor(i,this.parent,this.traverseAncestors))||i==e&&(null==this.parent||this.graph.isValidAncestor(o,this.parent,this.traverseAncestors))))&&n.push(a[s]);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,o=!0;for(i in a)if(null!=a[i]){o=!1;break}for(;!o;){var s=this.findRoots(e,a);for(o=0;o<s.length;o++){var r=[];t.push(r),this.traverse(s[o],!0,null,n,r,t,a)}for(o=0;o<s.length;o++)this.roots.push(s[o]);for(i in o=!0,a)if(null!=a[i]){o=!1;break}}}else for(o=0;o<roots.length;o++)r=[],t.push(r),traverse(roots.get(o),!0,null,n,r,t,null);for(o=n=0;o<t.length;o++){for(i in a=[],r=t[o])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 o=n.getChildAt(e,i);this.isPort(o)||this.filterDescendants(o,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=[],o=0;o<a.length;o++){var s=this.getVisibleTerminal(a[o],!0),r=this.getVisibleTerminal(a[o],!1);(s==e&&r==t||!n&&s==t&&r==e)&&i.push(a[o])}return i},mxHierarchicalLayout.prototype.traverse=function(e,t,n,a,i,o,s){if(null!=e&&null!=a){var r=mxCellPath.create(e);if(null!=a[r]||null!=s&&null==s[r]){if(null==i[r])for(n=0;n<o.length;n++)if(null!=(e=o[n])[r]){for(l in i)e[l]=i[l];return o.pop(),e}}else{null==i[r]&&(i[r]=e),null==a[r]&&(a[r]=e),delete s[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,o,s))}}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 o=this.getChildAt(t,i);n=n.concat(this.filterDescendants(e,o))}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 o=this.getOrigin(this.getParent(e)),s=this.getOrigin(i);a=s.x-o.x,o=s.y-o.y;(n=n.clone()).translate(-a,-o),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!=(o=mxCellPath.create(t))&&0<o.length)){var n=e,a=mxCellPath.create(n);if(o.length<a.length){n=t;var i=a,o=(a=o,i)}for(;null!=n;){if(i=this.getParent(n),0==o.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=[],o=0;o<a;o++){var s=this.getChildAt(e,o);(!n&&!t||n&&this.isEdge(s)||t&&this.isVertex(s))&&i.push(s)}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),o=0;o<i;o++){var s=this.getEdgeAt(e,o);s!=n&&this.getTerminal(s,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),o=[],s=0;s<i;s++){var r=this.getEdgeAt(e,s),l=this.getTerminal(r,!0),d=this.getTerminal(r,!1);(a&&l==d||l!=d&&(t&&d==e||n&&l==e))&&o.push(r)}return o},mxGraphModel.prototype.getEdgesBetween=function(e,t,n){n=null!=n&&n;var a=this.getEdgeCount(e),i=this.getEdgeCount(t),o=e,s=a;for(i<a&&(s=i,o=t),a=[],i=0;i<s;i++){var r=this.getEdgeAt(o,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 o=0;o<e.length;o++){var s=this.getTerminal(e[o],!0),r=this.getTerminal(e[o],!1);s==t&&null!=r&&r!=t&&a?i.push(r):r==t&&null!=s&&s!=t&&n&&i.push(s)}return i},mxGraphModel.prototype.getTopmostCells=function(e){for(var t=[],n=0;n<e.length;n++){for(var a=e[n],i=!0,o=this.getParent(a);null!=o;){if(0<=mxUtils.indexOf(e,o)){i=!1;break}o=this.getParent(o)}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 o=a[i],s=this.getTerminal(o,!0);null!=s&&(s=a[mxCellPath.create(s)],this.setTerminal(o,s,!0)),null!=(s=this.getTerminal(o,!1))&&(s=a[mxCellPath.create(s)],this.setTerminal(o,s,!1))}}finally{this.endUpdate()}},mxGraphModel.prototype.mergeChildrenImpl=function(e,t,n,a){this.beginUpdate();try{for(var i=e.getChildCount(),o=0;o<i;o++){var s=e.getChildAt(o);if("function"==typeof s.getId){var r=s.getId(),l=null==r||this.isEdge(s)&&n?null:this.getCell(r);if(null==l){var d=s.clone();d.setId(r),d.setTerminal(s.getTerminal(!0),!0),d.setTerminal(s.getTerminal(!1),!1),l=t.insert(d),this.cellAdded(l)}a[mxCellPath.create(s)]=l,this.mergeChildrenImpl(s,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 o=mxCellPath.create(i);null==n[o]&&(n[o]=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 o=this.cloneCellImpl(this.getChildAt(e,i),t,!0);a.insert(o)}}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(),o=Math.atan2(n.y-i,n.x-t),s=new mxPoint(0,0),r=Math.PI,l=Math.PI/2-o,d=Math.atan2(e.height,e.width);return o<-r+d||r-d<o?(s.x=e.x,s.y=i-e.width*Math.tan(o)/2):o<-d?(s.y=e.y,s.x=t-e.height*Math.tan(l)/2):o<d?(s.x=e.x+e.width,s.y=i+e.width*Math.tan(o)/2):(s.y=e.y+e.height,s.x=t+e.height*Math.tan(l)/2),a&&(n.x>=e.x&&n.x<=e.x+e.width?s.x=n.x:n.y>=e.y&&n.y<=e.y+e.height&&(s.y=n.y),n.x<e.x?s.x=e.x:n.x>e.x+e.width&&(s.x=e.x+e.width),n.y<e.y?s.y=e.y:n.y>e.y+e.height&&(s.y=e.y+e.height)),s},EllipsePerimeter:function(e,t,n,a){var i=e.x,o=e.y,s=e.width/2,r=e.height/2,l=i+s,d=o+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(o<=n&&n<=o+e.height)return e=n-d,e=Math.sqrt(s*s*(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/(s*s)))||0,n<=o&&(e=-e),new mxPoint(t,d+e)}return d-=(i=m/c)*l,l=i*(s=(-(e=-2*l*(o=s*s*i*i+r*r))+(r=Math.sqrt(e*e-4*o*(s*s*i*i*l*l+r*r*l*l-s*s*r*r))))/(2*o))+d,d=i*(r=(-e-r)/(2*o))+d,i=Math.sqrt(Math.pow(s-t,2)+Math.pow(l-n,2)),t=Math.sqrt(Math.pow(r-t,2)+Math.pow(d-n,2)),o=n=0,new mxPoint(n,o=i<t?(n=s,l):(n=r,d))},RhombusPerimeter:function(e,t,n,a){t=e.x;var i=e.y,o=e.width,s=t+o/2,r=i+(e=e.height)/2,l=n.x;if(n=n.y,s==l)return new mxPoint(s,n<r?i:i+e);if(r==n)return new mxPoint(l<s?t:t+o,r);var d=s,c=r;return a&&(t<=l&&l<=t+o?d=l:i<=n&&n<=i+e&&(c=n)),l<s?n<r?mxUtils.intersection(l,n,d,c,s,i,t,r):mxUtils.intersection(l,n,d,c,s,i+e,t,r):n<r?mxUtils.intersection(l,n,d,c,s,i,t+o,r):mxUtils.intersection(l,n,d,c,s,i+e,t+o,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,o=e.x,s=e.y,r=e.width,l=o+r/2,d=s+(e=e.height)/2,c=new mxPoint(o,s),m=new mxPoint(o+r,d),u=new mxPoint(o,s+e);t==mxConstants.DIRECTION_NORTH?(c=u,m=new mxPoint(l,s),u=new mxPoint(o+r,s+e)):t==mxConstants.DIRECTION_SOUTH?(m=new mxPoint(l,s+e),u=new mxPoint(o+r,s)):t==mxConstants.DIRECTION_WEST&&(c=new mxPoint(o+r,s),m=new mxPoint(o,d),u=new mxPoint(o+r,s+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(o+r/2+e*Math.tan(p)/2,s+e):t==mxConstants.DIRECTION_SOUTH?new mxPoint(o+r/2-e*Math.tan(p)/2,s):t==mxConstants.DIRECTION_WEST?new mxPoint(o+r,s+e/2+r*Math.tan(p)/2):new mxPoint(o,s+e/2-r*Math.tan(p)/2):(a&&(a=new mxPoint(l,d),n.y>=s&&n.y<=s+e?(a.x=i?l:t==mxConstants.DIRECTION_WEST?o+r:o,a.y=n.y):n.x>=o&&n.x<=o+r&&(a.x=n.x,a.y=i?t==mxConstants.DIRECTION_NORTH?s+e:s:d),l=a.x,d=a.y),i&&n.x<=o+r/2||!i&&n.y<=s+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,o,s,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!=o?o:0,this.borderColor=s,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 o=this.graph.getGraphBounds().clone(),s=this.graph.getView().getScale(),r=s/this.scale,l=this.graph.getView().getTranslate();this.autoOrigin||(this.x0=-l.x*this.scale,this.y0=-l.y*this.scale,o.width+=o.x,o.height+=o.y,o.x=0,this.border=o.y=0),o.width/=r,o.height/=r;var d=this.pageFormat.width-2*this.border,c=this.pageFormat.height-2*this.border,m=Math.max(1,Math.ceil((o.width+this.x0)/d)),u=Math.max(1,Math.ceil((o.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!=(b=this.getCoverPages(this.pageFormat.width,this.pageFormat.height)))for(var g=0;g<b.length;g++)e(b[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+(o.y-l.y*s)/s,b=0;b<m;b++){if(null==this.wnd)return null;var f=b*d/this.scale-this.x0/this.scale+(o.x-l.x*s)/s,A=g*m+b+1;(n=this.renderPage(this.pageFormat.width,this.pageFormat.height,mxUtils.bind(this,function(e){this.addGraphFragment(-f,-h,this.scale,A,e)}))).setAttribute("id","mxPage-"+A),e(n,null!=v||g<u-1||b<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"),o=0;o<e;o++){for(var s=n.createElement("tr"),r=0;r<t;r++){var l=o*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);s.appendChild(d)}i.appendChild(s)}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 o=this.graph.container;this.graph.container=i;var s=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=o,a.canvas=s,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 o=(s=a[i]).indexOf("=");if(0<=o){var s,r=s.substring(0,o);(s=s.substring(o+1))==mxConstants.NONE?delete n[r]:mxUtils.isNumeric(s)?n[r]=parseFloat(s):n[r]=s}else if(null!=(s=this.styles[s]))for(r in s)n[r]=s[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 o=null!=e.text?e.text.margin:null;null==o&&(o=mxUtils.getValue(e.style,mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER),e=mxUtils.getValue(e.style,mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),o=mxUtils.getAlignmentAsPoint(o,e)),null!=o&&(!t&&n||(this.textarea.style.left=Math.max(0,Math.round(this.bounds.x-o.x*this.bounds.width+o.x*a)-3)+"px"),this.textarea.style.top=Math.max(0,Math.round(this.bounds.y-o.y*this.bounds.height+o.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)),o=mxUtils.getValue(n.style,mxConstants.STYLE_FONTCOLOR,"black"),s=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=s,this.textarea.style.color=o,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,o=parseInt(e.style[mxConstants.STYLE_SPACING]||2)*n,s=parseInt(e.style[mxConstants.STYLE_SPACING_TOP]||0)*n+o,r=parseInt(e.style[mxConstants.STYLE_SPACING_RIGHT]||0)*n+o,l=parseInt(e.style[mxConstants.STYLE_SPACING_BOTTOM]||0)*n+o;n=parseInt(e.style[mxConstants.STYLE_SPACING_LEFT]||0)*n+o,r=new mxRectangle(e.x,e.y,Math.max(a,e.width-n-r),Math.max(i,e.height-s-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+=s,null!=e.text&&null!=e.text.boundingBox&&(r.height=t?(r.width=Math.max(a,e.text.boundingBox.width),Math.max(i,e.text.boundingBox.height)):(r.width=Math.max(r.width,e.text.boundingBox.width),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(),o=e.cell,s=i.getParent(o);null!=s&&null==n;)n=this.findPreviousStateInContainer(a,s,o,t),o=s,s=i.getParent(o);return n},mxCellRenderer.prototype.findPreviousStateInContainer=function(e,t,n,a){var i=null,o=e.getModel();for(n=null!=n?t.getIndex(n)-1:o.getChildCount(t)-1;0<=n&&null==i;n--)i=this.findPreviousStateInContainer(e,o.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]);e.shape=null!=t?new mxShape(t):new(t=this.getShapeConstructor(e)),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,o=null;"inherit"==a?o=i.model.getParent(e.cell):"swimlane"==a?(o=null!=i.model.getTerminal(e.cell,!1)?i.model.getTerminal(e.cell,!1):e.cell,o=i.getSwimlane(o),n=i.swimlaneIndicatorColorAttribute):"indicated"==a&&(e.shape[t]=e.shape.indicatorColor),null!=o&&(a=i.getView().getState(o),(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,o=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,o(e)))}),mxUtils.bind(this,function(e){this.isLabelEvent(n,e)&&(a.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,o(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 o=mxClient.IS_TOUCH?"gestureend":"dblclick";mxEvent.addListener(n.shape.node,o,mxUtils.bind(this,function(e){i=!1,"gestureend"==o?(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),o=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(o)||(e.text.value=n,e.text.bounds=o,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(o,s){if(this.createCellOverlays(o),null!=o.overlays){var r=mxUtils.mod(mxUtils.getValue(o.style,mxConstants.STYLE_ROTATION,0),90),e=mxUtils.toRadians(r),l=Math.cos(e),d=Math.sin(e);o.overlays.visit(function(e,t){var n=t.overlay.getBounds(o);if(!o.view.graph.getModel().isEdge(o.cell)&&null!=o.shape&&0!=r){var a=n.getCenterX(),i=n.getCenterY();a=(i=mxUtils.getRotatedPoint(new mxPoint(a,i),l,d,new mxPoint(o.getCenterX(),o.getCenterY()))).x,i=i.y;n.x=Math.round(a-n.width/2),n.y=Math.round(i-n.height/2)}!s&&null!=t.bounds&&t.scale==o.view.scale&&t.bounds.equals(n)||(t.bounds=n,t.scale=o.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(),o=e.getCenterY();if(!e.view.graph.getModel().isEdge(e.cell)&&(i=e.x+n*a,o=e.y+t*a,null!=e.shape)){var s=e.shape.getShapeRotation();if(this.legacyControlPosition)s=mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION,0);else if(e.shape.isPaintBoundsInverted()){var r=(e.width-e.height)/2;i=i+r,o=o-r}0!=s&&(r=mxUtils.toRadians(s),s=Math.cos(r),r=Math.sin(r),i=(o=mxUtils.getRotatedPoint(new mxPoint(i,o),s,r,new mxPoint(e.getCenterX(),e.getCenterY()))).x,o=o.y)}return e.view.graph.getModel().isEdge(e.cell),new mxRectangle(Math.round(i-n/2*a),Math.round(o-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 o=e.view,s=o.graph;a=mxUtils.getValue(e.style,mxConstants.STYLE_SEGMENT,mxConstants.ENTITY_SEGMENT)*o.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=s.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=s.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=o.getRoutingCenterY(t),s=r?n.x:n.x+n.width,n=o.getRoutingCenterY(n),o=new mxPoint(e+(d?-a:a),t),l=new mxPoint(s+(r?-a:a),n),d==r?(a=d?Math.min(e,s)-a:Math.max(e,s)+a,i.push(new mxPoint(a,t)),i.push(new mxPoint(a,n))):(o.x<l.x==d?(a=t+(n-t)/2,i.push(o),i.push(new mxPoint(o.x,a)),i.push(new mxPoint(l.x,a))):i.push(o),i.push(l)))},Loop:function(e,t,n,a,i){if(null!=t){var o=(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 s=0,r=0,l=0,d=0;o=mxUtils.getValue(e.style,mxConstants.STYLE_SEGMENT,o.gridSize)*n.scale;(e=mxUtils.getValue(e.style,mxConstants.STYLE_DIRECTION,mxConstants.DIRECTION_WEST))==mxConstants.DIRECTION_NORTH||e==mxConstants.DIRECTION_SOUTH?(s=n.getRoutingCenterX(t),r=o):(l=n.getRoutingCenterY(t),d=o),null==a||a.x<t.x||a.x>t.x+t.width?null!=a?(s=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:s=e==mxConstants.DIRECTION_EAST?t.x-2*d:t.x+t.width+2*d:null!=a&&(s=n.getRoutingCenterX(t),r=Math.max(Math.abs(s-a.x),d),l=a.y,d=0),i.push(new mxPoint(s-r,l-d)),i.push(new mxPoint(s+r,l+d))}},ElbowConnector:function(e,t,n,a,i){var o=null!=a&&0<a.length?a[0]:null,s=!1,r=!1;if(null!=t&&null!=n)if(null!=o){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));s=(o=e.view.transformControlPoint(e,o)).y<r||o.y>c,r=o.x<l||o.x>d}else(s=(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||!s&&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 o=e.view;a=null!=a&&0<a.length?a[0]:null;var s=(r=e.absolutePoints)[0],r=r[r.length-1];null!=a&&(a=o.transformControlPoint(e,a)),null!=s&&((t=new mxCellState).x=s.x,t.y=s.y),null!=r&&((n=new mxCellState).x=r.x,n.y=r.y),null!=t&&null!=n&&(e=Math.max(t.x,n.x),s=Math.min(t.x+t.width,n.x+n.width),e=null!=a?a.x:s+(e-s)/2,s=o.getRoutingCenterY(t),o=o.getRoutingCenterY(n),null!=a&&(a.y>=t.y&&a.y<=t.y+t.height&&(s=a.y),a.y>=n.y&&a.y<=n.y+n.height&&(o=a.y)),!mxUtils.contains(n,e,s)&&!mxUtils.contains(t,e,s)&&i.push(new mxPoint(e,s)),!mxUtils.contains(n,e,o)&&!mxUtils.contains(t,e,o)&&i.push(new mxPoint(e,o)),1==i.length&&(null!=a?!mxUtils.contains(n,e,a.y)&&!mxUtils.contains(t,e,a.y)&&i.push(new mxPoint(e,a.y)):(o=Math.max(t.y,n.y),t=Math.min(t.y+t.height,n.y+n.height),i.push(new mxPoint(e,o+(t-o)/2)))))},TopToBottom:function(e,t,n,a,i){var o=e.view;a=null!=a&&0<a.length?a[0]:null;var s=(r=e.absolutePoints)[0],r=r[r.length-1];null!=a&&(a=o.transformControlPoint(e,a)),null!=s&&((t=new mxCellState).x=s.x,t.y=s.y),null!=r&&((n=new mxCellState).x=r.x,n.y=r.y),null!=t&&null!=n&&(s=Math.max(t.y,n.y),r=Math.min(t.y+t.height,n.y+n.height),e=o.getRoutingCenterX(t),null!=a&&a.x>=t.x&&a.x<=t.x+t.width&&(e=a.x),s=null!=a?a.y:r+(s-r)/2,!mxUtils.contains(n,e,s)&&!mxUtils.contains(t,e,s)&&i.push(new mxPoint(e,s)),e=null!=a&&a.x>=n.x&&a.x<=n.x+n.width?a.x:o.getRoutingCenterX(n),!mxUtils.contains(n,e,s)&&!mxUtils.contains(t,e,s)&&i.push(new mxPoint(e,s)),1==i.length&&(null!=a&&1==i.length?!mxUtils.contains(n,a.x,s)&&!mxUtils.contains(t,a.x,s)&&i.push(new mxPoint(a.x,s)):(o=Math.max(t.x,n.x),t=Math.min(t.x+t.width,n.x+n.width),i.push(new mxPoint(o+(t-o)/2,s)))))},SegmentConnector:function(e,t,n,a,i){var o=e.absolutePoints,s=!0,r=null,l=o[0];null==l&&null!=t?l=new mxPoint(e.view.getRoutingCenterX(t),e.view.getRoutingCenterY(t)):null!=l&&(l=l.clone());var d=o.length-1;if(null!=a&&0<a.length){r=e.view.transformControlPoint(e,a[0]);for(var c=t,m=o[0],u=!1,p=!1,g=(u=r,a.length),v=0;v<2;v++){var h=null!=m&&m.x==u.x,b=null!=m&&m.y==u.y,f=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=b||null==m&&f,p=h||null==m&&c;if(null!=m&&!b&&!h&&(f||c)){s=!f;break}if(p||u){s=u,1==v&&(s=0==a.length%2?u:p);break}c=n,m=o[d],u=e.view.transformControlPoint(e,a[g-1])}for(s&&(null!=o[0]&&o[0].y!=r.y||null==o[0]&&null!=t&&(r.y<t.y||r.y>t.y+t.height))?i.push(new mxPoint(l.x,r.y)):!s&&(null!=o[0]&&o[0].x!=r.x||null==o[0]&&null!=t&&(r.x<t.x||r.x>t.x+t.width))&&i.push(new mxPoint(r.x,l.y)),s?l.y=r.y:l.x=r.x,v=0;v<a.length;v++)s=!s,r=e.view.transformControlPoint(e,a[v]),s?l.y=r.y:l.x=r.x,i.push(l.clone())}else r=l,s=!0;if(null==(l=o[d])&&null!=n&&(l=new mxPoint(e.view.getRoutingCenterX(n),e.view.getRoutingCenterY(n))),s&&(null!=o[d]&&o[d].y!=r.y||null==o[d]&&null!=n&&(r.y<n.y||r.y>n.y+n.height))?i.push(new mxPoint(l.x,r.y)):!s&&(null!=o[d]&&o[d].x!=r.x||null==o[d]&&null!=n&&(r.x<n.x||r.x>n.x+n.width))&&i.push(new mxPoint(r.x,l.y)),null==o[0]&&null!=t)for(;1<i.length&&mxUtils.contains(t,i[1].x,i[1].y);)i=i.splice(1,1);if(null==o[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 o=e.view.graph,s=null!=t&&o.getModel().isEdge(t.cell);o=null!=n&&o.getModel().isEdge(n.cell);if(null!=a&&0<a.length||s||o)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;s=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=(o=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,s,d,c],[m,u,p,g]],d=0;d<2;d++)mxEdgeStyle.limits[d][1]=a[d][0]-o,mxEdgeStyle.limits[d][2]=a[d][1]-o,mxEdgeStyle.limits[d][4]=a[d][0]+a[d][2]+o,mxEdgeStyle.limits[d][8]=a[d][1]+a[d][3]+o;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<(s=0)?s=c<0?2:1:c<=0&&(s=3,0==d&&(s=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*o,0),mxEdgeStyle.vertexSeperations[2]=Math.max(d-2*o,0),mxEdgeStyle.vertexSeperations[4]=Math.max(m-2*o,0),mxEdgeStyle.vertexSeperations[3]=Math.max(u-2*o,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*o<m&&2*o<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*o<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*o<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-=s)<1&&(d+=4),(v-=s)<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]-=o,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]+o;break;case mxConstants.DIRECTION_MASK_EAST:mxEdgeStyle.wayPoints1[0][0]+=a[0][2]+o,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]-=o}for(r=n=(o=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+=s)&&(g-=4),c=mxEdgeStyle.dirVectors[g-1],(l=0<g%2?0:1)!=n&&(o++,mxEdgeStyle.wayPoints1[o][0]=mxEdgeStyle.wayPoints1[o-1][0],mxEdgeStyle.wayPoints1[o][1]=mxEdgeStyle.wayPoints1[o-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)<<s)&&(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[o][0])*c[0])&&(mxEdgeStyle.wayPoints1[o][0]+=c[0]*m):0<(m=(g-mxEdgeStyle.wayPoints1[o][1])*c[1])&&(mxEdgeStyle.wayPoints1[o][1]+=c[1]*m)):u&&(mxEdgeStyle.wayPoints1[o][0]+=c[0]*Math.abs(mxEdgeStyle.vertexSeperations[g]/2),mxEdgeStyle.wayPoints1[o][1]+=c[1]*Math.abs(mxEdgeStyle.vertexSeperations[g]/2)),0<o&&mxEdgeStyle.wayPoints1[o][l]==mxEdgeStyle.wayPoints1[o-1][l]?o--:n=l}for(d=0;d<=o&&(d!=o||((0<(e[1]&(mxConstants.DIRECTION_MASK_EAST|mxConstants.DIRECTION_MASK_WEST))?0:1)==r?0:1)==(o+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,o){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!=o?o:"help"}function mxOutline(e,t){this.source=e,null!=t&&this.init(t)}function mxMultiplicity(e,t,n,a,i,o,s,r,l,d){this.source=e,this.type=t,this.attr=n,this.value=a,this.min=null!=i?i:0,this.max=null!=o?o:"n",this.validNeighbors=s,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 o=e.validatePoints(t,n[a]);null==i?i=o:i.add(o)}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!=(s=this.getState(e))&&(s.invalid=!0,a&&(s.orderChanged=!0)),t)for(var o=i.getChildCount(e),s=0;s<o;s++){var r=i.getChildAt(e,s);this.invalidate(r,t,n,a)}if(n)for(a=i.getEdgeCount(e),s=0;s<a;s++)this.invalidate(i.getEdgeAt(e,s),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!=(o=this.graph.getCellGeometry(t))){if(!n.isEdge(t)){var i=o.offset||this.EMPTY_POINT;o.relative?(a.origin.x+=o.x*e.width/this.scale+i.x,a.origin.y+=o.y*e.height/this.scale+i.y):(a.absoluteOffset.x=this.scale*i.x,a.absoluteOffset.y=this.scale*i.y,a.origin.x+=o.x,a.origin.y+=o.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*o.width,a.height=this.scale*o.height,n.isVertex(t)){if(o.relative&&0!=(i=mxUtils.toRadians(e.style[mxConstants.STYLE_ROTATION]||"0"))){var o=Math.cos(i),s=(i=Math.sin(i),new mxPoint(a.getCenterX(),a.getCenterY())),r=new mxPoint(e.getCenterX(),e.getCenterY());o=mxUtils.getRotatedPoint(s,o,i,r);a.x=o.x-a.width/2,a.y=o.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(o=n.getChildCount(t),i=0;i<o;i++)s=n.getChildAt(t,i),this.validateBounds(a,s)},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 o=this.graph.getCellGeometry(t);if(null!=o&&n.isEdge(t)){var s=this.getState(this.getVisibleTerminal(t,!0));if(a.setVisibleTerminalState(s,!0),null!=s&&n.isEdge(s.cell)&&!n.isAncestor(s.cell,t)){var r=this.getState(n.getParent(s.cell));this.validatePoints(r,s.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,s,l),this.updatePoints(a,o.points,s,l),this.updateFloatingTerminalPoints(a,s,l),this.updateEdgeBounds(a),this.updateEdgeLabelOffset(a)}else null!=o&&o.relative&&null!=e&&n.isEdge(e.cell)&&(null!=(o=this.getPoint(e,o))&&(a.x=o.x,a.y=o.y,o.x=o.x/this.scale-this.translate.x,o.y=o.y/this.scale-this.translate.y,a.origin=o,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(o=n.getChildCount(t),s=0;s<o;s++)r=n.getChildAt(t,s),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),o=0;o<i;o++)this.validateBounds(t,a.getChildAt(n,o))},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 o=e.origin;null!=(i=this.graph.getCellGeometry(e.cell).getTerminalPoint(n))&&(i=new mxPoint(t*(a.x+i.x+o.x),t*(a.y+i.y+o.y)))}e.setAbsoluteTerminalPoint(i,n)},mxGraphView.prototype.updatePoints=function(e,t,n,a){if(null!=e){var i=[];i.push(e.absolutePoints[0]);var o=this.getEdgeStyle(e,t,n,a);if(null!=o)o(e,n=this.getTerminalPort(e,n,!0),a=this.getTerminalPort(e,a,!1),t,i);else if(null!=t)for(o=0;o<t.length;o++)null!=t[o]&&(a=mxUtils.clone(t[o]),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),o=this.graph.isOrthogonal(e);n=mxUtils.toRadians(Number(t.style[mxConstants.STYLE_ROTATION]||"0"));var s=new mxPoint(t.getCenterX(),t.getCenterY());if(0!=n){var r=Math.cos(-n),l=Math.sin(-n);i=mxUtils.getRotatedPoint(i,r,l,s)}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&&o,r),0!=n&&(r=Math.cos(n),l=Math.sin(n),t=mxUtils.getRotatedPoint(t,r,l,s)),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 o=this.getPerimeterFunction(e);null!=o&&null!=t&&(0<(a=this.getPerimeterBounds(e,a)).width||0<a.height)&&(i=o(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,o=a.y-n.y;e.terminalDistance=Math.sqrt(i*i+o*o)}else e.terminalDistance=0;a=0;var s=[];if(null!=(o=n)){n=o.x;for(var r=o.y,l=n,d=r,c=1;c<t.length;c++){var m=t[c];null!=m&&(i=o.x-m.x,o=o.y-m.y,i=Math.sqrt(i*i+o*o),s.push(i),a+=i,o=m,n=Math.min(o.x,n),r=Math.min(o.y,r),l=Math.max(o.x,l),d=Math.max(o.y,d))}e.length=a,e.segments=s,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,o=(.5+(null!=t?t.x/2:0))*e.length,s=e.segments[0],r=0,l=1;r+s<o&&l<i-1;)r+=s,s=e.segments[l++];if(i=0==s?0:(o-r)/s,o=e.absolutePoints[l-1],l=e.absolutePoints[l],null!=o&&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-o.x,l=l.y-o.y,n=o.x+d*i+((0==s?0:l/s)*a+n)*this.scale,a=o.y+l*i-((0==s?0:d/s)*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,o=e.segments,s=e.absolutePoints[0],r=e.absolutePoints[1],l=mxUtils.ptSegDistSq(s.x,s.y,r.x,r.y,t,n),d=0,c=0,m=0,u=2;u<a;u++)c+=o[u-2],r=e.absolutePoints[u],(s=mxUtils.ptSegDistSq(s.x,s.y,r.x,r.y,t,n))<=l&&(l=s,d=u-1,m=c),s=r;return a=o[d],s=e.absolutePoints[d],l=(r=e.absolutePoints[d+1]).x,o=r.y,o=(l=(e=s.x-l)-(l=t-l))*e+(o=(d=s.y-o)-(o=n-o))*d,a<(e=Math.sqrt(o<=0?0:o*o/(e*e+d*d)))&&(e=a),a=Math.sqrt(mxUtils.ptSegDistSq(s.x,s.y,r.x,r.y,t,n)),-1==mxUtils.relativeCcw(s.x,s.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,o=a.y-n.y,s=a=0;null!=(i=i.offset)&&(a=i.x,s=i.y),i=n.y+o/2+s*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){return e=new mxCellState(this,e,this.graph.getCellStyle(e)),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 o=i.scrollLeft+i.clientWidth-e;if(o<a){if(e=i.scrollLeft,i.scrollLeft+=a-o,n&&e==i.scrollLeft){if(this.dialect==mxConstants.DIALECT_SVG){e=this.view.getDrawPane().ownerSVGElement;var s=this.container.scrollWidth+a-o}else s=Math.max(i.clientWidth,i.scrollWidth)+a-o,e=this.view.getCanvas();e.style.width=s+"px",i.scrollLeft+=a-o}}else(o=e-i.scrollLeft)<a&&(i.scrollLeft-=a-o);(o=i.scrollTop+i.clientHeight-t)<a?(e=i.scrollTop,i.scrollTop+=a-o,e==i.scrollTop&&n&&(this.dialect==mxConstants.DIALECT_SVG?(e=this.view.getDrawPane().ownerSVGElement,t=this.container.scrollHeight+a-o):(t=Math.max(i.clientHeight,i.scrollHeight)+a-o,e=this.view.getCanvas()),e.style.height=t+"px",i.scrollTop+=a-o)):(o=t-i.scrollTop)<a&&(i.scrollTop-=a-o)}}},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,o=e*this.pageScale;i=new mxRectangle(0,0,i.width*o,i.height*o);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,o=this.pageFormat,s=a*this.pageScale;i=new mxRectangle(a*i.x,a*i.y,o.width*s,o.height*s);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),o=e?Math.ceil((t-i.x)/i.width):0,e=e?Math.ceil((n-i.y)/i.height):0,null==this.horizontalPageBreaks&&0<o&&(this.horizontalPageBreaks=[]),null!=this.horizontalPageBreaks){for(s=0;s<=o;s++){var r=[new mxPoint(i.x+s*i.width,1),new mxPoint(i.x+s*i.width,n)];null!=this.horizontalPageBreaks[s]?(this.horizontalPageBreaks[s].scale=1,this.horizontalPageBreaks[s].points=r,this.horizontalPageBreaks[s].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[s]=r)}for(s=o;s<this.horizontalPageBreaks.length;s++)this.horizontalPageBreaks[s].destroy();this.horizontalPageBreaks.splice(o,this.horizontalPageBreaks.length-o)}if(null==this.verticalPageBreaks&&0<e&&(this.verticalPageBreaks=[]),null!=this.verticalPageBreaks){for(s=0;s<=e;s++)r=[new mxPoint(1,i.y+s*i.height),new mxPoint(t,i.y+s*i.height)],null!=this.verticalPageBreaks[s]?(this.verticalPageBreaks[s].scale=1,this.verticalPageBreaks[s].points=r,this.verticalPageBreaks[s].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[s]=r);for(s=e;s<this.verticalPageBreaks.length;s++)this.verticalPageBreaks[s].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 o=this.model.getChildCount(i);this.cellsAdded([e],i,o,null,null,!1),o=this.model.getChildCount(e),this.cellsAdded(n,e,o,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(),o=this.model.getParent(e[a]),s=this.model.getChildCount(o);this.cellsAdded(i,o,s,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 o=this.getBoundingBoxFromGeometry(i);if(0<o.width&&0<o.height){var s=this.isSwimlane(e[a])?this.getStartSize(e[a]):new mxRectangle,r=r.clone();n&&(r.x+=o.x-s.width-t,r.y+=o.y-s.height-t),r.width=o.width+s.width+2*t,r.height=o.height+s.height+2*t,this.model.setGeometry(e[a],r),this.moveCells(i,-o.x+s.width+t,-o.y+s.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[o=mxCellPath.create(e[i])]=e[i],n.push(e[i])}if(0<n.length){var o=this.view.scale,s=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/o-s.x,l[0].y/o-s.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/o-s.x,l[m].y/o-s.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,o,s,r,l){return t=this.createVertex(e,t,n,a,i,o,s,r,l),this.addCell(t,e)},mxGraph.prototype.createVertex=function(e,t,n,a,i,o,s,r,l){return(e=new mxGeometry(a,i,o,s)).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,o){return t=this.createEdge(e,t,n,a,i,o),this.addEdge(t,e,a,i)},mxGraph.prototype.createEdge=function(e,t,n,a,i,o){return(e=new mxCell(n,new mxGeometry,o)).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,o,s){if(null!=e&&null!=t&&null!=n){this.model.beginUpdate();try{for(var r=null!=(d=o?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==s||s)&&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",o))}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 o=mxCellPath.create(e[i]);a[o]=e[i]}for(i=0;i<e.length;i++){for(var s=this.getConnections(e[i]),r=0;r<s.length;r++)if(null==a[o=mxCellPath.create(s[r])]){if(null!=(d=this.model.getGeometry(s[r]))){var l=this.view.getState(s[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(s[r],null,c),this.model.setGeometry(s[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 o=this.model.getParent(e),s=this.model.getTerminal(e,!0);this.model.beginUpdate();try{this.cellsMoved(t,a,i,!1,!1),this.cellsAdded(t,o,this.model.getChildCount(o),null,null,!0),this.cellsAdded([n],o,this.model.getChildCount(o),s,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 o=this.model.getChildren(e[i]);this.foldCells(o,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 o=this.view.getState(e),s=null!=o?o.style:this.getCellStyle(e),r=this.model.getStyle(e);null==r&&(r=""),mxUtils.getValue(s,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,o=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&&(o+=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)),o+=2*(a[mxConstants.STYLE_SPACING]||0),o+=a[mxConstants.STYLE_SPACING_LEFT]||0,o+=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))&&(o+=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+o,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,o=e.height*t.scale,s=e.y-(o-e.height)/2;n=new mxRectangle(this.snap((e.x-(i-e.width)/2)/n)-a.x,this.snap(s/n)-a.y,this.snap(i/n),this.snap(o/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 o=i.offset;null!=o&&(o.x+=a.x-i.x,o.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,o){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 s=this.isAllowNegativeCoordinates();if(null!=i&&this.setAllowNegativeCoordinates(!0),this.cellsMoved(e,t,n,!a&&this.isDisconnectOnMove()&&this.isAllowDanglingEdges(),null==i),this.setAllowNegativeCoordinates(s),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",o))}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 o=0;o<e.length;o++)this.translateCell(e[o],t,n),i&&this.constrainChild(e[o]);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 o=this.view.getState(i[a]),s=null!=o?o.getVisibleTerminal(!0):this.view.getVisibleTerminal(i[a],!0),r=null!=o?o.getVisibleTerminal(!1):this.view.getVisibleTerminal(i[a],!1),l=mxCellPath.create(s),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()),o=e.style[mxConstants.STYLE_DIRECTION],s=0;if(null!=o&&("north"==o?s+=270:"west"==o?s+=180:"south"==o&&(s+=90),"north"==o||"south"==o)){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"!=o&&"south"!=o||(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)}o=e.style[mxConstants.STYLE_ROTATION]||0,t.perimeter?(0!=s&&null!=n&&(r=a=0,90==s?r=1:180==s?a=-1:270==o&&(r=-1),n=mxUtils.getRotatedPoint(n,a,r,i)),null!=n&&t.perimeter&&(n=this.view.getPerimeterPoint(e,n,!1))):o+=s,0!=o&&null!=n&&(s=mxUtils.toRadians(o),a=Math.cos(s),r=Math.sin(s),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 o=this.view.getState(e[i]),s=this.view.getState(this.model.getParent(e[i]));if(null!=o&&null!=s){var r=r.clone(),l=-s.origin.x,d=-s.origin.y,c=o.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 o=this.getCellBounds(this.model.getChildAt(e,i),t,!0);null!=a?a.add(o):a=o}}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 o=i.points;if(null!=o&&0<o.length){for(var s=new mxRectangle(o[0].x,o[0].y,0,0),r=function(e){null!=e&&s.add(new mxRectangle(e.x,e.y,0,0))},l=1;l<o.length;l++)r(o[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 o=this.shiftPreview1;for(a=this.container.firstChild;null!=a;)i=a.nextSibling,a!=n.parentNode?o.appendChild(a):o=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 o=(e-1)/(2*n);a=a*-o,i=i*-o}else a*=o=(1/e-1)/(2*this.view.scale),i*=o;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 o=this.view.scale,s=i.width/o,r=i.height/o;null!=this.backgroundImage&&(s=Math.max(s,this.backgroundImage.width-i.x/o),r=Math.max(r,this.backgroundImage.height-i.y/o));var l=t?e:2*e;n=Math.floor(100*Math.min(n/(s+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/o)*n-e-Math.max(0,(this.container.clientWidth-s*n)/2)),null!=i.y&&(this.container.scrollTop=Math.round(i.y/o)*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/o+e+1):e,null!=i.y?Math.floor(this.view.translate.y-i.y/o+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),o=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 s=n.scrollLeft-e.x;a=Math.max(s-n.scrollLeft,0);0<s?n.scrollLeft-=s+2:0<(s=e.x+i-n.scrollLeft-n.clientWidth)&&(n.scrollLeft+=s+2),i=n.scrollTop-e.y,s=Math.max(0,i-n.scrollTop),0<i?n.scrollTop-=i+2:0<(i=e.y+o-n.scrollTop-n.clientHeight)&&(n.scrollTop+=i+2),!this.useScrollbarsForPanning&&(0!=a||0!=s)&&this.view.setTranslate(a,s)}else{s=-this.view.translate.x;var r=-this.view.translate.y,l=this.view.scale;e.x+i>s+n&&(this.view.translate.x-=(e.x+i-n-s)/l,t=!0),e.y+o>r+a&&(this.view.translate.y-=(e.y+o-a-r)/l,t=!0),e.x<s&&(this.view.translate.x+=(s-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),o=this.model.getDirectedEdgeCount(n,!1,e);if(null!=this.multiplicities)for(var s=0;s<this.multiplicities.length;s++){var r=this.multiplicities[s].check(this,e,t,n,i,o);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 o=this.model.getChildAt(e,i),s=t;this.isValidRoot(o)&&(s={}),null!=(s=this.validateGraph(o,s))?this.setCellWarning(o,s.replace(/\n/g,"<br>")):this.setCellWarning(o,null),n=n&&null==s}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 o=this.multiplicities[i];o.source&&mxUtils.isNode(e,o.type,o.attr,o.value)&&(0==o.max&&0<t||1==o.min&&0==t||1==o.max&&1<t)?a+=o.countError+"\n":!o.source&&mxUtils.isNode(e,o.type,o.attr,o.value)&&(0==o.max&&0<n||1==o.min&&0==n||1==o.max&&1<n)&&(a+=o.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 o=this.model.getChildAt(n,i),s=this.getSwimlaneAt(e,t,o);if(null!=s)return s;if(this.isSwimlane(o)&&(s=this.view.getState(o),this.intersects(s,e,t)))return o}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 o=this.model.getChildCount(n)-1;0<=o;o--){var s=this.model.getChildAt(n,o),r=this.getCellAt(e,t,s,a,i);if(null!=r)return r;if(this.isCellVisible(s)&&(i&&this.model.isEdge(s)||a&&this.model.isVertex(s))&&(r=this.view.getState(s),this.intersects(r,e,t)))return s}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],o=1;o<a.length;o++){var s=a[o];if(mxUtils.ptSegDistSq(i.x,i.y,s.x,s.y,t,n)<=e)return!0;i=s}}else if(0!=(i=mxUtils.toRadians(mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION)||0))&&(a=Math.cos(-i),i=Math.sin(-i),o=new mxPoint(e.getCenterX(),e.getCenterY()),t=(i=mxUtils.getRotatedPoint(new mxPoint(t,n),a,i,o)).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,o){n=null==n||n,a=null==a||a,i=null==i||i,o=null!=o&&o;for(var s=[],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)||(s=s.concat(this.model.getEdges(c,n,a)))}for(s=s.concat(this.model.getEdges(e,n,a)),r=[],d=0;d<s.length;d++)l=null!=(c=this.view.getState(s[d]))?c.getVisibleTerminal(!0):this.view.getVisibleTerminal(s[d],!0),c=null!=c?c.getVisibleTerminal(!1):this.view.getVisibleTerminal(s[d],!1),(i&&l==c||l!=c&&(n&&c==e&&(null==t||this.isValidAncestor(l,t,o))||a&&l==e&&(null==t||this.isValidAncestor(c,t,o))))&&r.push(s[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=[],o={};if(null!=e)for(var s=0;s<e.length;s++){var r=null!=(l=this.view.getState(e[s]))?l.getVisibleTerminal(!0):this.view.getVisibleTerminal(e[s],!0),l=null!=l?l.getVisibleTerminal(!1):this.view.getVisibleTerminal(e[s],!1);if(r==t&&null!=l&&l!=t&&a){var d=mxCellPath.create(l);null==o[d]&&(o[d]=l,i.push(l))}else l==t&&null!=r&&r!=t&&n&&(null==o[d=mxCellPath.create(r)]&&(o[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=[],o=0;o<a.length;o++){var s=null!=(r=this.view.getState(a[o]))?r.getVisibleTerminal(!0):this.view.getVisibleTerminal(a[o],!0),r=null!=r?r.getVisibleTerminal(!1):this.view.getVisibleTerminal(a[o],!1);(s==e&&r==t||!n&&s==t&&r==e)&&i.push(a[o])}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,o=0!=t?this.gridSize/2:0;return n.x=this.snap(n.x/a-i.x-o),n.y=this.snap(n.y/a-i.y-o),n},mxGraph.prototype.getCells=function(e,t,n,a,i,o){if(o=null!=o?o:[],0<n||0<a){var s=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<=s?o.push(c):this.getCells(e,t,n,a,c,o)}}}return o},mxGraph.prototype.getCellsBeyond=function(e,t,n,a,i){var o=[];if((a||i)&&(null==n&&(n=this.getDefaultParent()),null!=n))for(var s=this.model.getChildCount(n),r=0;r<s;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)&&o.push(l)}return o},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(),o=i.getChildCount(e),s=null,r=0,l=0;l<o;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,s=d)}}0==a.length&&null!=s&&a.push(s)}return a},mxGraph.prototype.traverse=function(e,t,n,a,i){if(null!=n&&null!=e){t=null==t||t,i=i||[];var o=mxCellPath.create(e);if(null==i[o]&&(null==(a=n(i[o]=e,a))||a)&&0<(a=this.model.getEdgeCount(e)))for(o=0;o<a;o++){var s=this.model.getEdgeAt(e,o),r=this.model.getTerminal(s,!0)==e;t&&!r||(r=this.model.getTerminal(s,!r),this.traverse(r,t,n,s,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(),o=this.model.getChildCount(i);null==a&&0<o?(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<o&&(t=i.getIndex(a),e=e?(t++,this.model.getChildAt(i,t%o)):(t--,this.model.getChildAt(i,t<0?o-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,o=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-(o*this.defaultOverlap-this.offset.y)*n),i*n,o*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);(o=n.clone()).add(a);var i=this.getSourceContainerSize(),o=(a=Math.max(i.width/t,o.width),t=Math.max(i.height/t,o.height),Math.max(0,this.outline.container.clientWidth-this.border));i=Math.max(0,this.outline.container.clientHeight-this.border);if(0<(o=Math.min(o/a,i/t))){this.outline.getView().scale!=o&&(this.outline.getView().scale=o,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 s=t.y+this.source.panDy;null!=(o=this.getOutlineOffset(o))&&(i+=o.x,s+=o.y),n.x<0&&(i-=n.x),n.y<0&&(s-=n.y),a.translate.x==i&&a.translate.y==s||(a.translate.x=i,a.translate.y=s,e=!0);n=a.translate,i=(o=this.source.getView().scale)/a.scale,s=1/a.scale;var r=this.source.container;this.bounds=new mxRectangle((n.x-t.x-this.source.panDx)/s,(n.y-t.y-this.source.panDy)/s,r.clientWidth/i,r.clientHeight/i),this.bounds.x+=this.source.container.scrollLeft*a.scale/o,this.bounds.y+=this.source.container.scrollTop*a.scale/o,(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 o=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/o*this.source.getView().scale,a=a/o*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,o){var s="";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||o>=this.max))&&(s+=this.countError+"\n"),null!=this.validNeighbors&&null!=this.typeError&&0<this.validNeighbors.length&&(this.checkNeighbors(e,t,n,a)||(s+=this.typeError+"\n"))),0<s.length?s: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,o=0;o<i.length;o++){if(this.source&&this.checkType(e,a,i[o])){n=this.validNeighborsAllowed;break}if(!this.source&&this.checkType(e,t,i[o])){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 o=this.getLayout(a.getParent(e[i]));null!=o&&o.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),o=0;o<i.length;o++)if(null!=i[o]){var s=mxCellPath.create(i[o]);null==n[s]&&(n[s]=i[o],t.push(i[o]))}}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),o=n.getState(a.getParent(e));if(null!=i&&null!=o){var s=this.getCellsToShift(i),r=a.getGeometry(e);if(null!=s&&null!=r){var l=n.translate,d=n.scale,c=(n=i.x-o.origin.x-l.x*d,o=i.y-o.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+o-r.y*d,p=1-r.width*d/i.width;i=1-r.height*d/i.height;a.beginUpdate();try{for(r=0;r<s.length;r++)s[r]!=e&&this.isCellShiftable(s[r])&&this.shiftCell(s[r],m,u,n,o,l,c,p,i,this.isExtendParents()&&t.isExtendParent(s[r]))}finally{a.endUpdate()}}}},mxSpaceManager.prototype.shiftCell=function(e,t,n,a,i,o,s,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>=o)(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>=s)(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,o=0;o<a;o++){var s=t.getChildAt(n,o);if(s!=e&&!this.isSwimlaneIgnored(s)&&null!=(i=t.getGeometry(s)))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),o=s=e[n];null!=o;){var s=o,r=(o=t.getParent(o),this.graph.isSwimlane(o)?this.graph.getStartSize(o):new mxRectangle);i.width+=r.width,i.height+=r.height}this.resizeSwimlane(s,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 o=this.graph.isSwimlane(e)?this.graph.getStartSize(e):new mxRectangle;t-=o.width,n-=o.height;for(var s=a.getChildCount(e),r=0;r<s;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 o=mxCellPath.create(e.cell),s=this.deltas[o];return null==s?(s=new mxPoint(t,n),this.deltas[o]=s,this.count++):a?(s.X+=t,s.Y+=n):(s.X=t,s.Y=n),i&&this.addEdges(e),s},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),o=this.graph.view.getState(i),s=this.deltas[t];i=this.graph.view.getState(n.getParent(i));this.translateState(i,o,s.x,s.y)}for(t in this.deltas)i=mxCellPath.resolve(a,t),o=this.graph.view.getState(i),s=this.deltas[t],i=this.graph.view.getState(n.getParent(i)),this.revalidateState(i,o,s.x,s.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 o=mxCellPath.create(t.cell);0==n&&0==a||null==e||e.relative&&null==this.deltas[o]||(t.x+=n,t.y+=a)}for(e=i.getChildCount(t.cell),o=0;o<e;o++)this.translateState(t,this.graph.view.getState(i.getChildAt(t.cell,o)),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 o=mxCellPath.create(t.cell),s=this.graph.getModel(),r=this.graph.getCellGeometry(t.cell);for(0==n&&0==a||null==r||!r.relative||!s.isVertex(t.cell)||null!=e&&!s.isVertex(e.cell)&&null==this.deltas[o]||(t.x+=n,t.y+=a,this.graph.cellRenderer.redraw(t)),null!=i&&i(t),e=s.getChildCount(t.cell),o=0;o<e;o++)this.revalidateState(t,this.graph.view.getState(s.getChildAt(t.cell,o)),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 o=i;n.isVertex(e[a])&&null!=i.shape&&null!=i.shape.boundingBox&&(o=i.shape.boundingBox),null==t?t=new mxRectangle(o.x,o.y,o.width,o.height):t.add(o)}}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=(o=mxUtils.convertPoint(n.container,t.getX(),t.getY())).x-this.first.x,i=o.y-this.first.y,o=n.tolerance;if(null!=this.shape||Math.abs(a)>o||Math.abs(i)>o){null==this.highlight&&(this.highlight=new mxCellHighlight(this.graph,mxConstants.DROP_TARGET_COLOR,3)),null==this.shape&&(this.shape=this.createPreviewShape(this.bounds));var s=n.isGridEnabledEvent(t.getEvent());o=!0;if(null!=this.guide&&this.useGuidesForEvent(t))o=!1,a=(i=this.guide.move(this.bounds,new mxPoint(a,i),s)).x,i=i.y;else if(s){var r=n.getView().translate,l=n.getView().scale;s=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-s,i=i.y-r}for(null!=this.guide&&o&&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(),o=null,i=t.getCell(),n.isDropEnabled()&&this.highlightEnabled&&(o=n.getDropTarget(this.cells,t.getEvent(),i)),s=o,r=n.getModel();null!=s&&s!=this.cells[0];)s=r.getParent(s);l=n.isCloneEvent(t.getEvent())&&n.isCellsCloneable()&&this.isCloneEnabled();var d=!1;null==(a=n.getView().getState(o))||null!=s||r.getParent(this.cell)==o&&!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!=o&&(this.target=o,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(),o=this.currentDx/a,s=(a=this.currentDy/a,t.getCell());this.connectOnDrop&&null==this.target&&null!=s&&n.getModel().isVertex(s)&&n.isCellConnectable(s)&&n.isEdgeValid(null,this.cell,s)?n.connectionHandler.connect(this.cell,s,t.getEvent()):(s=this.target,n.isSplitEnabled()&&n.isSplitTarget(s,this.cells,t.getEvent())?n.splitEdge(s,this.cells,null,o,a):this.moveCells(this.cells,o,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,o){a&&(e=this.graph.getCloneableCells(e)),null==i&&this.isRemoveCellsFromParent()&&this.shouldRemoveCellsFromParent(this.graph.getModel().getParent(this.cell),e,o)&&(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,o),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,o=this.graph.getView().translate;this.graph.panGraph(0,0),this.panGraph(o.x+n/i,o.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!=(o=this.graph.getStartSize(t.cell)).width?t.x+o.width*n/2:a,i=0!=o.height?t.y+o.height*n/2:i;if(0!=(o=mxUtils.toRadians(mxUtils.getValue(t.style,mxConstants.STYLE_ROTATION)||0))){n=Math.cos(o);var o=Math.sin(o),s=new mxPoint(t.getCenterX(),t.getCenterY());a=(i=mxUtils.getRotatedPoint(new mxPoint(a,i),n,o,s)).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 o=this.first;if(null!=this.selectedIcon){var s=this.selectedIcon.bounds.width,r=this.selectedIcon.bounds.height;null!=this.currentState&&this.targetConnectImage?(s=this.getIconPosition(this.selectedIcon,this.currentState),this.selectedIcon.bounds.x=s.x,this.selectedIcon.bounds.y=s.y):(s=new mxRectangle(t.getGraphX()+this.connectIconOffset.x,t.getGraphY()+this.connectIconOffset.y,s,r),this.selectedIcon.bounds=s),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)),(o=null)!=this.waypoints)for(o=[],i=0;i<this.waypoints.length;i++)a=this.waypoints[i].clone(),this.convertWaypoint(a),o[i]=a;this.graph.view.updatePoints(this.edgeState,o,this.previous,this.currentState),this.graph.view.updateFloatingTerminalPoints(this.edgeState,this.previous,this.currentState),i=this.edgeState.absolutePoints[this.edgeState.absolutePoints.length-1],o=this.edgeState.absolutePoints[0]}else null!=this.currentState&&null==this.constraintHandler.currentConstraint&&(null!=(s=this.getTargetPerimeterPoint(this.currentState,t))&&(i=s)),null==this.sourceConstraint&&null!=this.previous&&(null!=(s=this.getSourcePerimeterPoint(this.previous,null!=this.waypoints&&0<this.waypoints.length?this.waypoints[0]:i,t))&&(o=s));if(null==this.currentState&&this.movePreviewAway){if(s=o,null!=this.edgeState&&2<this.edgeState.absolutePoints.length&&(null!=(a=this.edgeState.absolutePoints[this.edgeState.absolutePoints.length-2])&&(s=a)),a=i.x-s.x,s=i.y-s.y,0==(r=Math.sqrt(a*a+s*s)))return;i.x-=4*a/r,i.y-=4*s/r}null==this.shape&&(a=Math.abs(n.x-this.first.x),s=Math.abs(n.y-this.first.y),a>this.graph.tolerance||s>this.graph.tolerance)&&(this.shape=this.createShape(),this.updateCurrentState(t)),null!=this.shape&&(null!=this.edgeState?this.shape.points=this.edgeState.absolutePoints:(n=[o],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,o=t.getSource(),i=0;i<this.icons.length&&!n;i++)n=o==this.icons[i].node||o.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,o=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,o,!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),o=new mxPoint(e.getCenterX(),e.getCenterY());if(null!=i){var s=mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION,0),r=-s*(Math.PI/180);0!=s&&(t=mxUtils.getRotatedPoint(new mxPoint(t.x,t.y),Math.cos(r),Math.sin(r),o)),null!=(e=i(a.getPerimeterBounds(e),e,t,!1))&&(0!=s&&(e=mxUtils.getRotatedPoint(new mxPoint(e.x,e.y),Math.cos(-r),Math.sin(-r),o)),n=e)}else n=o;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(),o=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 s=this.graph.getView().getState(a);if(null!=s){var r=i.getGeometry(t);r.x-=s.origin.x,r.y-=s.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=s=null,null!=this.edgeState&&(s=this.edgeState.cell.value,r=this.edgeState.cell.style),null!=(o=this.insertEdge(l,null,s,e,t,r))){this.graph.setConnectionConstraint(o,e,!0,this.sourceConstraint),this.graph.setConnectionConstraint(o,t,!1,this.constraintHandler.currentConstraint),null!=this.edgeState&&i.setGeometry(o,this.edgeState.cell.geometry);var d=i.getGeometry(o);if(null==d&&((d=new mxGeometry).relative=!0,i.setGeometry(o,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",o,"event",n,"target",a))}}catch(e){mxLog.show(),mxLog.debug(e.message)}finally{i.endUpdate()}this.select&&this.selectCells(o,t)}},mxConnectionHandler.prototype.selectCells=function(e,t){this.graph.setSelectionCell(e)},mxConnectionHandler.prototype.insertEdge=function(e,t,n,a,i,o){return null==this.factoryMethod?this.graph.insertEdge(e,t,n,a,i,o):(t=this.createEdge(n,a,i,o),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 o=this.graph.view.getState(t);if(null!=o){var s=this.getAlignmentTolerance();Math.abs(this.graph.snap(this.first.x)-this.graph.snap(i.x))<=s?n.x=o.x:Math.abs(this.graph.snap(this.first.y)-this.graph.snap(i.y))<=s&&(n.y=o.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 o,s=this.graph.getConnectionPoint(e.getState(),this.constraints[i]),r=(o=this.getImageForConstraint(e.getState(),this.constraints[i],s)).src;(o=new mxImageShape(o=new mxRectangle(s.x-o.width/2,s.y-o.height/2,o.width,o.height),r)).dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG,o.preserveImageAspect=!1,o.init(this.graph.getView().getOverlayPane()),null!=o.node.previousSibling&&o.node.parentNode.insertBefore(o.node,o.node.parentNode.firstChild),r=mxUtils.bind(this,function(){return null!=this.currentFocus?this.currentFocus:e.getState()}),o.redraw(),mxEvent.redirectMouseEvents(o.node,this.graph,r),this.currentFocusArea.add(o.bounds),this.focusIcons.push(o),this.focusPoints.push(s)}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,o=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,o(e))}),this.dropHandler=mxUtils.bind(this,function(e){this.mouseUp(this.graph,o(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,o=this.first.y-n,s=this.graph.tolerance;(null!=this.div||Math.abs(i)>s||Math.abs(o)>s)&&(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 o=this.state.x+this.state.width/2-n.x,s=this.state.y+this.state.height/2-n.y;this.currentAlpha=0!=o?180*Math.atan(s/o)/Math.PI+90:s<0?180:0,0<o&&(this.currentAlpha-=180),this.rotationRaster&&(o=n.x-this.state.getCenterX(),s=n.y-this.state.getCenterY(),o=Math.abs(Math.sqrt(o*o+s*s)-this.state.height/2-20),o=Math.max(1,5*Math.min(3,Math.max(0,Math.round(80/Math.abs(o))))),this.currentAlpha=Math.round(this.currentAlpha/o)*o),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=(o=n.x-this.startX,s=n.y-this.startY,n=this.graph.view.translate,d*o+l*s);o=l*o-d*s;this.bounds=this.union(this.selectionBounds,o,m,this.index,a,i,n),l=Math.cos(r),c=(d=Math.sin(r))*(o=(s=new mxPoint(this.bounds.getCenterX(),this.bounds.getCenterY())).x-c.x)+l*(s=s.y-c.y)-s,this.bounds.x+=l*o-d*s-o,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"),o=Math.cos(-i),s=Math.sin(-i),r=(n=s*(r=n.x-this.startX)+o*(l=n.y-this.startY),o*r-s*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!=(o=e==this.state?this.state:this.graph.view.getState(e))&&this.graph.setCellStyles(mxConstants.STYLE_ROTATION,(o.style[mxConstants.STYLE_ROTATION]||0)+t,[e]),this.state.cell!=e&&(null!=(o=this.graph.getCellGeometry(e))&&!o.relative))if(0!=t){var a=this.graph.getModel().getParent(e),i=this.graph.getCellGeometry(a);if(!o.relative&&null!=i){var o,s=mxUtils.toRadians(t),r=(a=Math.cos(s),s=Math.sin(s),new mxPoint(o.getCenterX(),o.getCenterY()));i=new mxPoint(i.width/2,i.height/2),a=mxUtils.getRotatedPoint(r,a,s,i);(o=o.clone()).x=a.x-o.width/2,o.y=a.y-o.height/2,n.setGeometry(e,o)}}else(o=o.clone()).x+=dx,o.y+=dy,n.setGeometry(e,o);for(o=n.getChildCount(e),a=0;a<o;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 o=this.graph.model.getGeometry(e);if(null!=o)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==(o=o.clone()).offset?o.offset=new mxPoint(t,n):(o.offset.x+=t,o.offset.y+=n),this.graph.model.setGeometry(e,o);else{if(a=this.union(o,t,n,a,i,1,new mxPoint(0,0)),0!=(r=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"))){t=a.getCenterX()-o.getCenterX(),n=a.getCenterY()-o.getCenterY(),i=Math.cos(r);var s=Math.sin(r),r=i*t-s*n-t;t=s*t+i*n-n,n=a.x-o.x;var l=a.y-o.y,d=i*n-s*l;i=s*n+i*l,a.x+=r,a.y+=t,this.graph.isCellCollapsed(e)||0==r&&0==t||(n=o.x-a.x+d,l=o.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),o=0;o<i;o++){var s=a.getChildAt(e,o);if(a.isVertex(s)){var r=this.graph.getCellGeometry(s);null!=r&&!r.relative&&((r=r.clone()).x+=t,r.y+=n,a.setGeometry(s,r))}}},mxVertexHandler.prototype.union=function(e,t,n,a,i,o,s){if(this.singleSizer){s=e.x+e.width+t;var r=e.y+e.height+n;return i&&(s=this.graph.snap(s/o)*o,r=this.graph.snap(r/o)*o),(o=new mxRectangle(e.x,e.y,0,0)).add(new mxRectangle(s,r,0,0)),o}var l=(r=e.x-s.x*o)+e.width,d=e.y-s.y*o;return e=d+e.height,4<a?(e+=n,i&&(e=this.graph.snap(e/o)*o)):a<3&&(d+=n,i&&(d=this.graph.snap(d/o)*o)),0==a||3==a||5==a?(r+=t,i&&(r=this.graph.snap(r/o)*o)):2!=a&&4!=a&&7!=a||(l+=t,i&&(l=this.graph.snap(l/o)*o)),e-=d,(i=l-r)<0&&(r+=i,i=Math.abs(i)),e<0&&(d+=e,e=Math.abs(e)),new mxRectangle(r+s.x*o,d+s.y*o,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 o=mxUtils.toRadians(e.style[mxConstants.STYLE_ROTATION]||"0"),s=Math.cos(o),r=(o=Math.sin(o),new mxPoint(e.getCenterX(),e.getCenterY())),l=mxUtils.getRotatedPoint(new mxPoint(e.x,e.y),s,o,r);this.moveSizerTo(this.sizers[0],l.x,l.y),l.x=a,l.y=e.y,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[1],l.x,l.y),l.x=t,l.y=e.y,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[2],l.x,l.y),l.x=e.x,l.y=i,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[3],l.x,l.y),l.x=t,l.y=i,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[4],l.x,l.y),l.x=e.x,l.y=n,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[5],l.x,l.y),l.x=a,l.y=n,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[6],l.x,l.y),l.x=t,l.y=n,l=mxUtils.getRotatedPoint(l,s,o,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&&(o=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"),s=Math.cos(o),o=Math.sin(o),r=new mxPoint(this.state.getCenterX(),this.state.getCenterY()),l=mxUtils.getRotatedPoint(new mxPoint(e.x+e.width/2,e.y-16),s,o,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 o=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,o)}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,o=!1;if(this.snapToTerminals&&0<a){var s=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,o=!0)}},r=function(e){null!=e&&s.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&&s.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),o||(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),o=this.graph.getConnectionConstraint(e,a,!0),s=this.graph.getConnectionConstraint(e,i,!1),r=this.constraintHandler.currentConstraint;null==r&&(r=new mxConnectionConstraint),this.isSource?o=r:this.isTarget&&(s=r),(!this.isSource||null!=a)&&e.view.updateFixedTerminalPoint(e,a,!0,o),(!this.isTarget||null!=i)&&e.view.updateFixedTerminalPoint(e,i,!1,s),(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(),o=this.graph.getView().getRelativePoint(e,t,n);i.x=o.x,i.y=o.y;var s=this.graph.getView().scale;i.offset=new mxPoint(0,0),o=this.graph.view.getPoint(e,i),i.offset=new mxPoint((t-o.x)/s,(n-o.y)/s),a.setGeometry(e.cell,i)}},mxEdgeHandler.prototype.connect=function(e,t,n,a,i){var o=(i=this.graph.getModel()).getParent(e);i.beginUpdate();try{if(a){var s=e.clone();i.add(o,s,i.getChildCount(o));var r=i.getTerminal(e,!n);this.graph.connectCell(s,r,!n),e=s}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,o=(n=this.abspoints[n].y,this.bends.length-1);t=this.bends[o].bounds;this.bends[o].bounds=new mxRectangle(Math.round(i-t.width/2),Math.round(n-t.height/2),t.width,t.height),this.bends[o].fill=this.getHandleFillColor(o),this.bends[o].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,o=this.abspoints[a].y,s=this.bends[a].bounds;this.bends[a].node.style.visibility="visible",this.bends[a].bounds=new mxRectangle(Math.round(i-s.width/2),Math.round(o-s.height/2),s.width,s.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 o=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(o,this.labelShape.bounds)&&(a+=3,i+=3,o=new mxRectangle(Math.round(n.x-a/2),Math.round(n.y-i/2),a,i)),this.bends[1].bounds=o,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 o=t[i].clone();this.convertPoint(o,!1),i==this.index&&(n.x==o.x?(n.x=e.x,o.x=e.x):(n.y=e.y,o.y=e.y)),i<t.length-1&&a.push(o),n=o}if(1==a.length){if(n=this.state.view,i=this.state.getVisibleTerminalState(!0),null!=(o=this.state.getVisibleTerminalState(!1))&null!=i){var s=this.state.origin.x,r=this.state.origin.y;mxUtils.contains(o,a[0].x+s,a[0].y+r)?t[1].y==t[2].y?a[0].y=n.getRoutingCenterY(i)-r:a[0].x=n.getRoutingCenterX(i)-s:mxUtils.contains(i,a[0].x+s,a[0].y+r)&&(t[1].y==t[0].y?a[0].y=n.getRoutingCenterY(o)-r:a[0].x=n.getRoutingCenterX(o)-s)}}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 o=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(o.x-n/2),Math.round(o.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],o=2;o<n.length;o++){var s=n[o];Math.round(a.x)==Math.round(i.x)&&Math.round(i.x)==Math.round(s.x)||Math.round(a.y)==Math.round(i.y)&&Math.round(i.y)==Math.round(s.y)||(i=(a=i).clone(),this.convertPoint(i,!1),t.push(i)),i=s}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(),o=e.getY(),s=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,o);this.show(e,i,o),this.state=n,this.node=a,this.stateSource=s}}),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,o,s){for(var r=!1;null!=o;){if("add"==o.nodeName){if(null==(l=o.getAttribute("if"))||i[l]){var l=o.getAttribute("as"),d=(l=mxResources.get(l)||l,mxUtils.eval(mxUtils.getTextContent(o))),c=o.getAttribute("action"),m=o.getAttribute("icon"),u=o.getAttribute("iconCls");r&&(t.addSeparator(s),r=!1),null!=m&&this.imageBasePath&&(m=this.imageBasePath+m),l=this.addAction(t,e,l,m,d,c,n,s,u),this.addItems(e,t,n,a,i,o.firstChild,l)}}else"separator"==o.nodeName&&(r=!0);o=o.nextSibling}},mxDefaultPopupMenu.prototype.addAction=function(e,t,n,a,i,o,s,r,l){return e.addItem(n,a,function(e){"function"==typeof i&&i.call(t,t,s,e),null!=o&&t.execute(o,s,e)},r,l)},mxDefaultPopupMenu.prototype.createConditions=function(e,t,n){var a=e.graph.getModel(),i=a.getChildCount(t),o=[];for(o.nocell=null==t,o.ncells=1<e.graph.getSelectionCount(),o.notRoot=a.getRoot()!=a.getParent(e.graph.getDefaultParent()),o.cell=null!=t,a=null!=t&&1==e.graph.getSelectionCount(),o.nonEmpty=a&&0<i,o.expandable=a&&e.graph.isCellFoldable(t,!1),o.collapsable=a&&e.graph.isCellFoldable(t,!0),o.validRoot=a&&e.graph.isValidRoot(t),o.emptyValidRoot=o.validRoot&&0==i,o.swimlane=a&&e.graph.isSwimlane(t),i=this.config.getElementsByTagName("condition"),a=0;a<i.length;a++){var s=mxUtils.eval(mxUtils.getTextContent(i[a])),r=i[a].getAttribute("name");null!=r&&"function"==typeof s&&(o[r]=s(e,t,n))}return o},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 o=mxUtils.bind(this,function(){this.editor.setMode(n),null!=i&&i(this.editor)});return this.toolbar.addSwitchMode(e,t,o,a)},mxDefaultToolbar.prototype.addPrototype=function(e,t,n,a,i,o){var s=function(){return"function"==typeof n?n():null!=n?n.clone():null},r=mxUtils.bind(this,function(e,t){"function"==typeof i?i(this.editor,s(),e,t):this.drop(s(),e,t),this.toolbar.resetMode(),mxEvent.consume(e)});return e=this.toolbar.addMode(e,t,r,a,null,o),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),o=mxEvent.getClientY(t);i=mxUtils.convertPoint(a.container,i,o);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 o=a.getGeometry(n),s=a.getGeometry(e).clone();s.x=o.x+(o.width-s.width)/2,s.y=o.y+(o.height-s.height)/2;var r=this.spacing*t.gridSize,l=20*a.getDirectedEdgeCount(n,!0);this.editor.horizontalFlow?s.x+=(s.width+o.width)/2+r+l:s.y+=(s.height+o.height)/2+r+l,e.setGeometry(s);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(o){var e=mxUtils.bind(this,function(e,t){this.setModified(!0),1==this.validating&&o.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}}});o.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,o=null,s=null,r=null,l=null;a.isVertex(n)&&(null!=(i=a.getGeometry(n))&&(o=t.addText("top",i.y),s=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(s.value),i.y=parseFloat(o.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 o=this.graph.getView().scale,s=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*o,a-=l.origin.y*o,this.graph.isConstrainedMoving){r=s.width;var d=s.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*o,a-=r.y*o)}}(s=s.clone()).x=this.graph.snap(n/o-this.graph.getView().translate.x-this.graph.gridSize/2),s.y=this.graph.snap(a/o-this.graph.getView().translate.y-this.graph.gridSize/2),t.setGeometry(s),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,o=t[i];null!=o&&!this.isExcluded(t,i,o,!0)&&(mxUtils.isNumeric(i)&&(i=null),this.encodeValue(e,t,i,o,n))}},mxObjectCodec.prototype.encodeValue=function(e,t,n,a,i){if(null!=a){if(this.isReference(t,n,a,!0)){var o=e.getId(a);if(null==o)return void mxLog.warn("mxObjectCodec.encode: No ID for "+this.getName()+"."+n+"="+a);a=o}o=this.template[n],(null==n||e.encodeDefaults||o!=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=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),o=null;"add"==t.nodeName?null==(o=t.getAttribute("value"))&&(o=mxUtils.eval(mxUtils.getTextContent(t))):o=e.decode(t,i),this.addObjectValue(n,a,o,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 o=a.getAttribute(i);if(null!=o){a.removeAttribute(i);var s=e.objects[o]||e.lookup(o);null==s&&(null!=(o=e.getElementById(o))&&(s=(mxCodecRegistry.codecs[o.nodeName]||this).decode(e,o))),n[i]=s}}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),o=a.getParent(n);if(null==o||null!=i){var s=a.getChildCount(n),r=t.graph.getCellGeometry(n),l=null;if(o==a.getRoot()?l="layer":null==o?l="graph":a.isEdge(n)?l="edge":0<s&&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==o){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(o=i.style[c])&&"object"==typeof o&&(o=mxStyleRegistry.getName(o)),null!=o&&"function"!=typeof o&&"object"!=typeof o&&d.setAttribute(c,o);if(null!=(o=i.absolutePoints)&&0<o.length){for(r=Math.round(o[0].x)+","+Math.round(o[0].y),c=1;c<o.length;c++)r+=" "+Math.round(o[c].x)+","+Math.round(o[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<s;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],o=e.document.createElement("add");if(null!=n){for(var s in o.setAttribute("as",n),i){var r=this.getStringValue(s,i[s]);if(null!=r){var l=e.document.createElement("add");l.setAttribute("value",r),l.setAttribute("as",s),o.appendChild(l)}}0<o.childNodes.length&&a.appendChild(o)}}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"),o=null!=i?mxUtils.clone(n.styles[i]):null;for(null==o&&(null!=i&&mxLog.warn("mxStylesheetCodec.decode: stylesheet "+i+" not found to extend"),o={}),i=t.firstChild;null!=i;){if(i.nodeType==mxConstants.NODETYPE_ELEMENT){var s=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&&(o[s]=l)}else"remove"==i.nodeName&&delete o[s]}i=i.nextSibling}n.putCellStyle(a,o)}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"),o=t.getAttribute("control");n.bindAction(a,i,o)}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"),o=(i=mxResources.get(i)||i,t.getAttribute("icon")),s=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,o,r,s);else if(null!=l){var p=mxUtils.eval(m);u=n.addMode(i,o,l,s,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,o,u,s,d,c);else if(0<(s=mxUtils.getChildNodes(t)).length)if(null==o)for(d=n.addActionCombo(i),i=0;i<s.length;i++)"separator"==(c=s[i]).nodeName?n.addOption(d,"---"):"add"==c.nodeName&&(o=c.getAttribute("as"),c=c.getAttribute("action"),n.addActionOption(d,o,c));else{var g=null,v=n.addPrototype(i,o,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<s.length;i++)"separator"==(c=s[i]).nodeName?n.addOption(g,"---"):"add"==c.nodeName&&(o=c.getAttribute("as"),m=c.getAttribute("template"),n.addOption(g,o,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"),o=null;if(null!=a)null!=(o=document.getElementById(a))&&null!=i&&(o.style.cssText+=";"+i);else{a=parseInt(e.getAttribute("x"));var s=parseInt(e.getAttribute("y")),r=e.getAttribute("width"),l=e.getAttribute("height");(o=document.createElement("div")).style.cssText=i,new mxWindow(mxResources.get(t)||t,o,a,s,r,l,!1,!0).setVisible(!0)}"graph"==t?n.setGraphContainer(o):"toolbar"==t?n.setToolbarContainer(o):"title"==t?n.setTitleContainer(o):"status"==t?n.setStatusContainer(o):"map"==t&&n.setMapContainer(o)}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"),o=t[a].firstChild;null!=o&&1!=o.nodeType;)o=o.nextSibling;null!=o&&(n.templates[i]=e.decodeCell(o))}},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;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();var o=mxUtils.bind(this,function(e){return null==e&&(e=window.event),!!this.isSelectionAllowed(e)||a.isEditing()});this.container==document.body&&(this.menubarContainer.onselectstart=o,this.menubarContainer.onmousedown=o,this.toolbarContainer.onselectstart=o,this.toolbarContainer.onmousedown=o,this.diagramContainer.onselectstart=o,this.diagramContainer.onmousedown=o,this.sidebarContainer.onselectstart=o,this.sidebarContainer.onmousedown=o,this.footerContainer.onselectstart=o,this.footerContainer.onmousedown=o),mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?(mxEvent.addListener(this.diagramContainer,"contextmenu",o),mxEvent.addListener(this.sidebarContainer,"contextmenu",o)):(this.diagramContainer.oncontextmenu=o,this.sidebarContainer.oncontextmenu=o),a.init(this.diagramContainer),a.refresh(),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 s=a.fireMouseEvent;a.fireMouseEvent=function(e,t,n){e==mxEvent.MOUSE_DOWN&&this.container.focus(),s.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"],[[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,"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"],[[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"]]),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),!this.isEnabled()||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.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.createKeyHandler(t);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.isSelectionAllowed=function(e){return!1},EditorUi.prototype.exportXML=function(e){var t=window.document.createElement("a");t.href="data:attachment/text;charset=utf-8,"+encodeURI(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),o=0;o<i;o++){var s=n.model.getChildAt(e,o),r=t;n.isValidRoot(s)&&(r={}),null!=(r=this.validate(s,r))?n.setCellWarning(s,r.replace(/\n/g,"<br>")):n.setCellWarning(s,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+=0<=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"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":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n";break;case"lumenvoxasr":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("noUriInserted")+"\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"}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!=(o=n.validateCell(e,t))&&(i+=o),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 o=0;o<i.length;o++){var s=i[o];if(e.getModel().isEdge(s)&&(a=!0),e.getModel().isVertex(s)&&(n=!0),a&&n)break}var r=["cut","copy","delete","duplicate","bold","italic","style","underline","toFront","toBack","dashed","rounded","shadow","tilt","autosize"];for(o=0;o<r.length;o++)this.actions.get(r[o]).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(o=0;o<d.length;o++)this.menus.get(d[o]).setEnabled(t);d=["line","lineend","linestart"];for(o=0;o<d.length;o++)this.menus.get(d[o]).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 o=this.menubarHeight+this.toolbarHeight;if(mxClient.IS_QUIRKS||(o+=1),this.sidebarContainer.style.top=o+"px",this.sidebarContainer.style.width=a+"px",this.outlineContainer.style.width=a+"px",this.outlineContainer.style.height=i+"px",this.diagramContainer.style.left=a+this.splitSize+"px",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 s=n-i-this.splitSize-this.menubarHeight-this.toolbarHeight;this.sidebarContainer.style.height=s+"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.container.appendChild(this.menubarContainer),this.container.appendChild(this.toolbarContainer),this.container.appendChild(this.sidebarContainer),this.container.appendChild(this.outlineContainer),this.container.appendChild(this.diagramContainer),this.container.appendChild(this.footerContainer),this.container.appendChild(this.hsplit),this.container.appendChild(this.vsplit),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 o=null,s=null;function r(e){if(null!=o){var t=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e));i(Math.max(0,s+(n?t.x-o.x:o.y-t.y)-a)),mxEvent.consume(e)}}function e(e){r(e),s=o=null}mxEvent.addGestureListeners(t,function(e){o=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e)),s=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 o=new mxMorphing(a);o.addListener(mxEvent.DONE,mxUtils.bind(this,function(){a.getModel().endUpdate()})),o.startAnimation()}else a.getModel().endUpdate()}},EditorUi.prototype.createKeyHandler=function(e){var a=this.editor.graph,s=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())}}s.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 o=function(){i.enabled&&i.funct()};t?a?s.bindControlShiftKey(e,o):s.bindControlKey(e,o):a?s.bindShiftKey(e,o):s.bindKey(e,o)}});return s.enter=function(){},s.bindKey(8,function(){a.foldCells(!0)}),s.bindKey(13,function(){a.foldCells(!1)}),s.bindKey(33,function(){a.exitGroup()}),s.bindKey(34,function(){a.enterGroup()}),s.bindKey(36,function(){a.home()}),s.bindKey(35,function(){a.refresh()}),s.bindKey(37,function(){t(37)}),s.bindKey(38,function(){t(38)}),s.bindKey(39,function(){t(39)}),s.bindKey(40,function(){t(40)}),s.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),s},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,o,s,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],m.selected=o&&s?(m.value=s,o.forEach(function(e){m.value=m.value.replace("%"+e+"%",t[e])}),m.value==n):(m.value=t[i],t[i]==n),c.appendChild(m))}),c.className="form-control select2",c}function createDropdownWithOptgroupFromApi(e,t,n,a,i,o){var s=new XMLHttpRequest;s.open("GET",e,!1),s.setRequestHeader("Authorization","Bearer "+i.editor.data.token),s.send(null);var r=[];200===s.status&&(r=JSON.parse(s.response));var l=document.createElement("select"),d=document.createElement("option");d.text="-- None --",d.value="-1",l.appendChild(d);var c=_.groupBy(r.rows,o);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,o){var s=new XMLHttpRequest;s.open("GET",e,!1),s.setRequestHeader("Authorization","Bearer "+i.editor.data.token),s.send(null);var r=[];200===s.status&&(r=JSON.parse(s.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[o].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 o=i.response.RMI.rows;for(var s in o)n[o[s].id]=o[s].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,o,s){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=s,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"),o=n.createHeader("h4");mxUtils.write(o,mxResources.get("import")+" XML");var s=mxUtils.button("",function(){n.hideDialog()});s.className="close",t.appendChild(s),t.appendChild(o);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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("about")+" Cally Square");var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("saveAs"));var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("new"));var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("description"));var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("variable"));var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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 b=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});b.className="btn default",i.appendChild(h),i.appendChild(b),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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("open"));var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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 b=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});b.className="btn default",i.appendChild(h),i.appendChild(b),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"),o=n.createHeader("h4");mxUtils.write(o,mxResources.get("rename"));var s=mxUtils.button("",function(){n.hideDialog()});s.className="close",t.appendChild(s),t.appendChild(o);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"),o=t.createHeader("h4");mxUtils.write(o,mxResources.get("edit"));var s=mxUtils.button("",function(){t.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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"),o=t.createHeader("h4");mxUtils.write(o,mxResources.get("export")+" XML");var s=mxUtils.button("",function(){t.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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,o){console.log("general");var s=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(o.value.nodeName));var l=mxUtils.button("",function(){i.hideDialog()});l.className="close",t.appendChild(l),t.appendChild(r);for(var d=o.value.attributes.length,c=i.createDiv("form-horizontal form-row-seperated"),m=0;m<d;m++){var u,p=o.value.attributes[m].name,g="_"+p,v=o.value.attributes[m].value,h=i.createDiv(m==d-1?"form-group last":"form-group"),b=document.createElement("label");switch(b.className="col-sm-4 control-label",mxUtils.write(b,mxResources.get(p)),h.appendChild(b),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"==o.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 f=i.createDiv("col-sm-8");if(f.appendChild(u),mxResources.get("help_"+p)){var A=i.createDiv("p");A.className="help-block",mxUtils.write(A,mxResources.get("help_"+p)),f.appendChild(A)}h.appendChild(f),c.appendChild(h)}n.appendChild(c);var E=mxUtils.button(mxResources.get("save"),mxUtils.bind(this,function(e){for(var t=0;t<o.value.attributes.length;t++){var n="_"+o.value.attributes[t].name,a=o.value.attributes[t].name;o.setAttribute(a,document.getElementById(n).value)}s.refresh(o),i.hideDialog()}));E.className="btn blue";var y=mxUtils.button(mxResources.get("cancel"),function(){i.hideDialog()});y.className="btn default",a.appendChild(E),a.appendChild(y),e.appendChild(t),e.appendChild(n),e.appendChild(a),this.container=e}Editor=function(){mxEventSource.call(this),this.init(),this.initStencilRegistry(),this.graph=new Graph,this.outline=new mxOutline(this.graph),this.outline.updateOnPan=!0,this.undoManager=this.createUndoManager(),this.status="",this.filename=null,this.getOrCreateFilename=function(){return this.filename||mxResources.get("drawing",[counter])+".xml"},this.getFilename=function(){return this.filename},this.setStatus=function(e){this.status=e,this.fireEvent(new mxEventObject("statusChanged"))},this.getStatus=function(){return this.status},this.modified=!1,this.graphChangeListener=function(){this.modified=!0},this.graph.getModel().addListener(mxEvent.CHANGE,mxUtils.bind(this,function(){this.graphChangeListener.apply(this,arguments)})),window.onbeforeunload=mxUtils.bind(this,function(){if(this.modified)return mxResources.get("allChangesLost")}),this.graph.resetViewOnRootChange=!1,this.graph.scrollbars=!0,this.graph.background=null},mxUtils.extend(Editor,mxEventSource),Editor.prototype.gridImage=IMAGE_PATH+"/grid.gif",Editor.prototype.transparentImage=IMAGE_PATH+"/transparent.gif",Editor.prototype.setGraphXml=function(e){var t=new mxCodec(e.ownerDocument);if("mxGraphModel"==e.nodeName){this.graph.view.scale=Number(e.getAttribute("scale")||1),this.graph.gridEnabled="0"!=e.getAttribute("grid"),this.graph.graphHandler.guidesEnabled="0"!=e.getAttribute("guides"),this.graph.setTooltips("0"!=e.getAttribute("tooltips")),this.graph.setConnectable("0"!=e.getAttribute("connect")),this.graph.foldingEnabled="0"!=e.getAttribute("fold"),this.graph.scrollbars="0"!=e.getAttribute("scrollbars"),this.graph.scrollbars||(this.graph.container.scrollLeft=0,this.graph.container.scrollTop=0,this.graph.view.translate.x=Number(e.getAttribute("dx")||0),this.graph.view.translate.y=Number(e.getAttribute("dy")||0)),this.graph.pageVisible="1"==e.getAttribute("page"),this.graph.pageBreaksVisible=this.graph.pageVisible,this.graph.preferPageSize=this.graph.pageBreaksVisible;var n=e.getAttribute("pageScale");this.graph.pageScale=null!=n?n:1.5;var a=e.getAttribute("pageWidth"),i=e.getAttribute("pageHeight");null!=a&&null!=i&&(this.graph.pageFormat=new mxRectangle(0,0,parseFloat(a),parseFloat(i)),this.outline.outline.pageFormat=this.graph.pageFormat);var o=e.getAttribute("background");null!=o&&0<o.length&&(this.graph.background=o),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,o=this.graph.pageFormat,s=this.graph.pageScale,r=o.width*s,l=o.height*s,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,o=this.pageFormat,s=a*this.pageScale,r=this.view.getBackgroundPageBounds();t=r.width,n=r.height;var l=new mxRectangle(a*i.x,a*i.y,o.width*s,o.height*s),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 o=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 o.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,o){var s=r.apply(this,arguments);return null==o||o||mxEvent.addListener(s,"mousedown",function(e){mxEvent.consume(e)}),s};var s=mxGraphHandler.prototype.getInitialCellForEvent;mxGraphHandler.prototype.getInitialCellForEvent=function(e){var t=this.graph.getModel(),n=t.getParent(this.graph.getSelectionCell()),a=s.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 o=this.graph,n=new mxUndoManager,e=function(e,t){n.undoableEditHappened(t.getProperty("edit"))};o.getModel().addListener(mxEvent.UNDO,e),o.getView().addListener(mxEvent.UNDO,e);var t=function(e,t){for(var n=o.getSelectionCellsForChanges(t.getProperty("edit").changes),a=[],i=1;i<n.length;i++)null!=o.view.getState(n[i])&&a.push(n[i]);o.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 o=a[i];if(".xml"==o.toLowerCase().substring(o.length-4,o.length))mxStencilRegistry.loadStencilSet(o,null);else if(".js"==o.toLowerCase().substring(o.length-3,o.length)){var s=mxUtils.load(o);null!=s&&eval.call(window,s.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,o="",s=a.getAttribute("name");for(null!=s&&(o=s+".");null!=i;){if(i.nodeType==mxConstants.NODETYPE_ELEMENT&&null!=(s=i.getAttribute("name"))){o=o.toLowerCase();var r=s.replace(/ /g,"_");if(n&&mxStencilRegistry.addStencil(o+r.toLowerCase(),new mxStencil(i)),null!=t){var l=i.getAttribute("w"),d=i.getAttribute("h");t(o,r,s,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"],["GoogleTTS","ISpeechTTS","AWSPolly","LumenvoxTTS"]),this.addImagePalette("asr","ASR",e+"/asr/","_128x128.png",["googleasr","ispeechasr","lumenvoxasr","tildeasr"],["GoogleASR","ISpeechASR","LumenvoxASR","TildeASR"]),this.addImagePalette("integrationServer",mxResources.get("integrationServer"),e+"/integration_server/","_128x128.png",["database","sendMail","sendSMS","dialogflow"],[mxResources.get("database"),mxResources.get("sendMail"),mxResources.get("sendSMS"),"Dialogflow"]),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),o=-Math.round(e.y-this.tooltipBorder),s=document.body,r=document.documentElement,l=(s.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!=o?this.graph2.view.canvas.setAttribute("transform","translate("+i+","+o+")"):this.graph2.view.canvas.removeAttribute("transform"):(this.graph2.view.drawPane.style.left=i+"px",this.graph2.view.drawPane.style.top=o+"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 o=e.toLowerCase().split(" "),s=new mxDictionary,r=(n+1)*t,l=[],d=0,c=0;c<o.length;c++)if(0<o[c].length){var m=this.taglist[o[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==s.get(m))&&(u.put(m,m),l.push(m),c==o.length-1&&l.length==r))return void a(l.slice(n*t,r),r,!0)}}else l=[];s=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,o=document.createElement("img");o.setAttribute("src",Sidebar.prototype.searchImage),o.setAttribute("title",mxResources.get("search")),o.style.position="relative",o.style.left="-18px",mxClient.IS_QUIRKS?(a.style.height="28px",o.style.top="-4px"):o.style.top="2px",o.style.background="url('"+this.editorUi.editor.transparentImage+"')",n.appendChild(o),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 s=new Object;this.currentSearch=s,this.searchEntries(c,v,p,mxUtils.bind(this,function(e,t,n){if(this.currentSearch==s){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 o=document.createElement("div");o.className="geTitle",o.style.backgroundColor="transparent",o.style.borderColor="transparent",o.style.color="gray",o.style.padding="0px",o.style.margin="0px 8px 0px 8px",o.style.paddingTop="6px",o.style.textAlign="center",o.style.cursor="default",mxUtils.write(o,mxResources.get("noResultsFor",[c])),r.appendChild(o)}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="",o.style.display="none"}),mxEvent.addListener(a,"blur",function(){a.style.paddingRight="20px",o.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 s=document.createElement("div");s.appendChild(r),this.container.appendChild(s),this.palettes.search=[t,s]},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,o,s,r,l){this.graph.labelsVisible=null==o||o;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!=s){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,o,s){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,o);var d=new mxRectangle(0,0,i,o);if(1<t.length||t[0].vertex){var c=this.createDragSource(r,this.createDropHandler(t,!0,s,d),this.createDragPreview(i,o),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,s,d),this.createDragPreview(i,o),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,b){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 o=null!=n&&e.isValidDropTarget(n,g,t),s=null;if(null==n||o||(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-b.width/2,i-b.height/2),s=r}else 0<g.length&&(s=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<s.length;p++)l.moveCell(s[p],m,u)}h&&e.fireEvent(new mxEventObject("cellsInserted","cells",s))}finally{e.model.endUpdate()}null!=s&&0<s.length&&(e.scrollCellToVisible(s[0]),e.setSelectionCells(s))}}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,o=null;mxEvent.addGestureListeners(e,function(e){o=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e))});var s=a.mouseUp;a.mouseUp=function(e){if(!mxEvent.isPopupTrigger(e)&&null==this.currentGraph&&null!=o){var t=i.tolerance;if(Math.abs(o.x-mxEvent.getClientX(e))<=t&&Math.abs(o.y-mxEvent.getClientY(e))<=t){var n=i.getGridSize();a.drop(i,e,null,n,n)}}s.apply(this,arguments),o=null}},Sidebar.prototype.createVertexTemplateEntry=function(e,t,n,a,i,o,s,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,o,s)}))},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,o,s,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":l=["text","options"],d=["",""];break;case"lumenvoxasr":l=["grammar","options"],d=["",""];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"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;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,o,s,r)},Sidebar.prototype.createVertexTemplateFromCells=function(e,t,n,a,i,o,s){return this.createItem(e,a,i,o,t,n,s)},Sidebar.prototype.createEdgeTemplate=function(e,t,n,a,i,o,s){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,o,s)},Sidebar.prototype.createEdgeTemplateFromCells=function(e,t,n,a,i,o){return this.createItem(e,a,i,!0,t,n,o)},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 o=document.createElement("div");o.className="geSidebar",mxClient.IS_POINTER&&(o.style.touchAction="none"),mxEvent.addListener(o,"mousemove",mxUtils.bind(this,function(e){mxEvent.getSource(e)==o?o.setAttribute("title",mxResources.get("sidebarTooltip")):o.removeAttribute("title")})),n?(a(o),a=null):o.style.display="none",this.addFoldingHandler(i,o,a);var s=document.createElement("div");return s.appendChild(o),this.container.appendChild(s),null!=e&&(this.palettes[e]=[i,s]),o},Sidebar.prototype.addFoldingHandler=function(n,a,i){var o=!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(o)a.style.display="block";else if(o=!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,o,s,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;labelBackgroundColor=#ffffff;image="+o+e+s,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 o=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?o.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 o=!1,s=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()?(o=!1,s=null):(s=t.getCell(),o=null!=s?this.isCellSelected(s):this.isSelectionEmpty());else if(e==mxEvent.MOUSE_UP){if(o&&!this.isEditing()){if(!this.panningHandler.isMenuShowing()){var a=mxEvent.getClientX(t.getEvent()),i=mxEvent.getClientY(t.getEvent());this.panningHandler.popup(a+16,i,s,t.getEvent())}return o=!1,s=null,void t.consume()}o=!1,s=null}mxGraph.prototype.fireMouseEvent.apply(this,arguments),e==mxEvent.MOUSE_MOVE&&t.isConsumed()&&(o=!1,s=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 o=mxVertexHandler.prototype.redraw;mxVertexHandler.prototype.redraw=function(){o.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 s=mxVertexHandler.prototype.destroy;mxVertexHandler.prototype.destroy=function(e,t){s.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()};o=mxVertexHandler.prototype.redraw;mxVertexHandler.prototype.redraw=function(){o.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"))};s=mxVertexHandler.prototype.destroy;mxVertexHandler.prototype.destroy=function(e,t){s.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()}),this.addAction("open",function(){t.projectDesignController.openProject()}),this.addAction("save",function(){t.projectDesignController.saveOrPublishProject(mxUtils.getPrettyXml(l.getGraphXml())),t.editor.modified=!1},null,null,"Ctrl+S"),this.addAction("saveAs",function(){t.projectDesignController.saveProjectAs(mxUtils.getPrettyXml(l.getGraphXml()))},null,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))},null,null,"Ctrl+Shift+P"),this.addAction("variable",function(){t.projectDesignController.newVariable()}),this.addAction("import",function(){t.projectDesignController.importXML(function(e){l.setGraphXml(mxUtils.parseXml(e).documentElement)})}),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)})}),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 o=d.view.getState(n);if(null!=o){var s=o.style[mxConstants.STYLE_DIRECTION]||"east";"east"==s?s="south":"south"==s?s="west":"west"==s?s="north":"north"==s&&(s="east"),d.setCellStyles(mxConstants.STYLE_DIRECTION,s,[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,o=n.y,s=d.getModel().getParent(e),r=d.getCellGeometry(s);d.getModel().isVertex(s)&&null!=r&&(i+=r.x,o+=r.y),t.addPointAt(t.state,d.panningHandler.triggerX/a-i,d.panningHandler.triggerY/a-o)}}}),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 o=d.getGridSize();a=i=[d.insertVertex(d.getDefaultParent(),null,"",o,o,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 s=i[0],r=d.getModel().getGeometry(s);null!=r&&((r=r.clone()).width=t,r.height=n,d.getModel().setGeometry(s,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,o){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()}}),o,i)},Menus.prototype.promptChange=function(e,t,a,i,o,n,s){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[o]||t),null!=(t=mxUtils.prompt(mxResources.get("enterValue")+(0<a.length?" "+a:""),t))&&0<t.length&&e.setCellStyles(o,t)}),n,null,s)},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 o=a.selectionCellsHandler.getHandler(t);if(o instanceof mxEdgeHandler&&null!=o.bends&&2<o.bends.length){var s=o.getHandleForEvent(new mxMouseEvent(n)),r=this.editorUi.actions.get("removeWaypoint");r.handler=o,i=0<(r.index=s)&&s<o.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){for(var t=new Menubar(this.editorUi,e),n=["file","edit","view","format","text","arrange","help"],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,o){if(null!=o){var s=!0,t=mxUtils.bind(this,function(e){if(s&&null==i.enabled||i.enabled){this.editorUi.editor.graph.panningHandler.hideMenu();var t=new mxPopupMenu(o);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}s=!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(){s=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(){this.addItems(["save","publish","-","print","undo","redo","-","copy","cut","paste","delete","-","duplicate","-","actualSize","zoomIn","zoomOut","-"]);this.editorUi.editor.graph},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),o=this.addMenuFunction(e,t,n,i.funct);return i.addListener("stateChanged",function(){o.setEnabled(i.enabled)}),o},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 o=this.editorUi.editor.graph,s=null;mxEvent.addListener(t,"click",mxUtils.bind(this,function(e){(null==t.enabled||t.enabled)&&(o.panningHandler.hideMenu(),(s=new mxPopupMenu(a)).div.className+=" geToolbarMenu",s.showDisabled=i,s.labels=n,s.autoExpand=!0,s.popup(t.offsetLeft,t.offsetTop+t.offsetHeight+34,null,e),this.currentMenu=s),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/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="Search...">\n        </md-input-container>\n        <md-content class="border h-300">\n            <md-list class="md-dense" layout-fill layout-align="center center">\n                <md-list-item class="md-3-line" ng-repeat="item in options.items | filter: query | orderBy: options.orderBy" ng-click="transfer(options.items, options.selectedItems, options.items.indexOf(item), 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                    </div>\n                    <md-icon 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" 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="Search...">\n        </md-input-container>\n        <md-content class="border h-300">\n            <md-list class="md-dense" layout-fill layout-align="center center">\n                <md-list-item class="md-3-line" ng-repeat="item in options.selectedItems | filter: selectedQuery | orderBy: options.orderBy" ng-click="transfer(options.selectedItems, options.items, options.selectedItems.indexOf(item), true)">\n                    <md-icon 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                    </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" 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" 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" ng-class="{\'active md-accent-bg md-accent-fg\': vm.isActive}" 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" ng-class="{\'has-children\': vm.hasChildren}" 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" ng-class="{\'collapsed\': vm.collapsed, \'has-children\': vm.hasChildren}" 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\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}} <timer ng-if="vm_pb.registered" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></span></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"\n                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!-- 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"><timer interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></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" 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" 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"\n        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/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"\n                   ng-click="MsSearchBar.expand()"\n                   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"\n             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}"\n            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)}"\n                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)}\"\n"+'    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}"\n                    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"><font color="red">{{vm.message}}</font></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                <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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="ANALYTICS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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 ng-if="extractedReport.status == \'Completed\'">\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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.editdialog(metric, $event)" translate="ANALYTICS.EDIT_METRIC">\n                                                    Edit Metric\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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)"\n                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">\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.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">\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}}</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}}</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}}</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" 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" 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" 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" 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">\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.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-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-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)">\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-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 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">\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"></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">\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">\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 Report\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 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                        </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)">\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.currentNode.custom && (vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\')" 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.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.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.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="id">{{report.id}}</td>\n                            <td ng-click="vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="name">{{report.name}}</td>\n                            <td ng-click="vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="description">{{report.description}}</td>\n                            <td ng-click="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>\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.currentNode.custom"></md-menu-divider>\n                                        <md-menu-item ng-if="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.currentNode.custom && (vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\')">\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"\n                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"\n                    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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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">\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.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">\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-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|sms_account_id|findBy|pause_id|aws_text_type|dialogflow_language"\n                    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]">{{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-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\'">{{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\'">{{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" 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" 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" 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" 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" string-to-number>\n                    <input ng-switch-when-separator="|" ng-switch-when="retry|response|hiddendigitsnum|priority|delay" type="number" step="any" name="{{attribute.name}}" min="1" ng-model="attribute.value" ng-required="attribute.required" 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" ng-required="attribute.required"></textarea>\n                    \x3c!--  END TEXTAREA 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">\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">\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>\n                </span>\n                <md-button class="md-icon-button" ng-click="vm.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>\n                </span>\n                <md-button class="md-icon-button" ng-click="vm.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>\n                </span>\n                <md-button class="md-icon-button" ng-click="vm.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>\n                </span>\n                <md-button class="md-icon-button" ng-click="vm.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>\n                </span>\n                <md-button class="md-icon-button" ng-click="vm.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">\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-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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditProject($event, project)" md-cell class="id ">{{project.id}}</td>\n                                <td ng-click="vm.createOrEditProject($event, project)" md-cell class="name ">{{project.name}}</td>\n                                <td ng-click="vm.createOrEditProject($event, project)" md-cell class="description ">{{project.description}}</td>\n                                <td ng-click="vm.createOrEditProject($event, project)" md-cell class="notes ">{{project.notes}}</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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\n                                                <md-button ng-click="vm.managePermissions(project, ev)" translate="CALLYSQUARE.ADDUSER_PROJECTS">\n                                                    Add User To Project\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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-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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditChatQueue($event, chatQueue)" md-cell class="id ">{{chatQueue.id}}</td>\n                                <td ng-click="vm.createOrEditChatQueue($event, chatQueue)" md-cell class="name ">{{chatQueue.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatQueues/edit/teamadd/teamadd.html",'<md-dialog class="chatQueue-dialog" aria-label="chatQueue">\n    <form name="chatQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CHAT.TEAMADD_CHATQUEUE">Add Team in 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    </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                        <span ng-if="vm.chatQueue.exten">{{vm.chatQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditChatWebsite($event, chatWebsite)" md-cell class="id ">{{chatWebsite.id}}</td>\n                                <td ng-click="vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="name ">{{chatWebsite.name}}</td>\n                                <td ng-click="vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="key ">{{chatWebsite.key}}</td>\n                                <td ng-click="vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="address ">{{chatWebsite.address}}</td>\n                                <td ng-click="vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="remote ">{{chatWebsite.remote}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\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\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                <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\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\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                <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\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\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">{{ 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">{{ 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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" required autofocus>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents">{{ 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">\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">\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" required autofocus>\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" md-maxlength="255" 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 ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.TEXT_MAX_LENGTH" translate-values=\'{max: 255}\'>Text 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">\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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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>\n                    <md-option ng-value="\'en\'">English</md-option>\n                    <md-option ng-value="\'it\'">Italian</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                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.WELCOMEMESSAGE_REQUIRED">welcomemessage field is required</span>\n                    </div>\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">\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>\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\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">\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">\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">\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>\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">\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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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">\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>\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\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">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables">{{ 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">\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" required autofocus>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newChatCannedAnswer" ng-click="vm.saveChatCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="chatCannedAnswerForm.$invalid || chatCannedAnswerForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE"\n                    translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                <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                <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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                        <span ng-if="vm.chatWebsite.exten">{{vm.chatWebsite.exten}}</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\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (scriptForm.$invalid) || (intervalForm.$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)"\n                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\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 ng-disabled="true">\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\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                                <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\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\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                                <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\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\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">{{ 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">\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">\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">\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\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"><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"><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, removePlugins: \'magicline\' }"\n                                    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"><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">\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"><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">\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\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>\n                                    <md-option ng-value="null">Always</md-option>\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval">{{ 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">\n                                    < <div class="hint"><span translate="CHAT.HELP.TIMEZONE"></span></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    </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\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"\n                        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"\n                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"\n    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"\n        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">\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">\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"><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"><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">\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">\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">\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">\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\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\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>\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\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\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">\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\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\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"><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">\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\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\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">\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\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\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">\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\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\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">\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\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\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">\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\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\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block">\n                    <md-switch ng-model="vm.chatWebsite.enableRating" aria-label="enableRating"><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">\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">\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"><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"><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">\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\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\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">\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\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\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"><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"><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">\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\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\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">\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\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\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">\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\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\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>\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">\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\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\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">\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">\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\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\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">\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\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\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">\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\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\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">\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\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\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block">\n                    <md-switch ng-model="vm.chatWebsite.enableCustomerWriting" aria-label="enableCustomerWriting"><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">\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\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\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">\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\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\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">\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\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\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"><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"><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"><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">\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\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\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"><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)" 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()"\n                    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>\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)" 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()"\n                    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>\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)" 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()"\n                    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>\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)" 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()"\n                    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>\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\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\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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                            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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                            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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                            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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editChatWebsiteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                Edit App\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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></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 ng-if="vm_dc.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                            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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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>{{ ContactId = vm_dc.contacts[offlineMessage.ContactId]; ContactId.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                            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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'CHAT.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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"\n    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">\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"\n    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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditCompany($event, company)" md-cell class="id ">{{company.id}}</td>\n                                <td ng-click="vm.createOrEditCompany($event, company)" md-cell class="name ">{{company.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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\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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                        <span ng-if="vm.company.exten">{{vm.company.exten}}</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\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()" 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\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>\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\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                                <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\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                                <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\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                                <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\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                                <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\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                                <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\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                                <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\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\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                                <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\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                                <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">\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\n                                </div>\n                            </md-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\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>\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\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">\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\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">\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\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">\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\n                                </div>\n                            </md-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\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>\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\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">\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\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">\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\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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 = []"><md-icon md-font-icon="icon-refresh"></md-icon>{{ \'CONTACTMANAGER.ALL_CONTACTS\' | translate }}</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>\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="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.createOrEditContact($event, contact)" md-cell class="id">{{contact.id}}</td>\n                                    <td ng-click="vm.createOrEditContact($event, contact)" md-cell class="firstName">{{contact.firstName}} {{contact.lastName}}</td>\n                                    <td ng-click="vm.createOrEditContact($event, contact)" md-cell class="phone">{{contact.phone}}</td>\n                                    <td ng-click="vm.createOrEditContact($event, contact)" md-cell class="email">{{contact.email}}</td>\n                                    <td ng-click="vm.createOrEditContact($event, contact)" md-cell class="list">{{vm.listsMap[contact.ListId]}}</td>\n                                    <td ng-click="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">\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>\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>\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>\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></md-menu-divider>\n                                                <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                        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-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            \x3c!-- OLD IMPORT --\x3e\n            \x3c!-- <md-button class="md-fab md-mini md-warn" ng-click="vm.uploadContacts($event)" aria-label="add contact" translate translate-attr-aria-label="CONTACTMANAGER.UPLOAD_CSV">\n                <md-tooltip md-direction="left" md-visible="tooltipVisible" md-autohide="false">\n                    {{\'CONTACTMANAGER.UPLOAD_CSV\' | translate}}\n                </md-tooltip>\n                <md-icon md-font-icon="icon-upload"></md-icon>\n            </md-button> --\x3e\n            \x3c!-- NEW IMPORT --\x3e\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="!!{csv:1}[$file.getExtension()]" aria-label="Select File"\n                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">\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.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-optgroup label="Lists">\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\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">\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">\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>\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" 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>\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">\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">\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">\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">\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">\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-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">\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-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                                            <md-button class="md-accent" translate="CONTACTMANAGER.ADD_COMPANY">Add Company</md-button>\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>\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                                        <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_TAGS">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">\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">\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">\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">\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"></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">\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="icon-message"></md-icon>\n                                            <input type="text" name="line" ng-model="vm.contact.line" class="text-truncate">\n                                        </md-input-container>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Viber</label>\n                                            <md-icon md-font-icon="icon-message"></md-icon>\n                                            <input type="text" name="viber" ng-model="vm.contact.viber" 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">\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">\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">\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="hopper.VoiceQueueId" ng-click="vm.editHopper($event, hopper)" translate="CONTACTMANAGER.EDIT_HOPPER">\n                                                                Edit Hopper\n                                                            </md-button>\n                                                            <md-button ng-if="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.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]"\n                                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]"\n                                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]"\n                                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]"\n                                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/contacts/upload/upload.html",'<md-dialog class="upload-dialog" aria-label="Upload contact">\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" translate="CONTACTMANAGER.UPLOAD_CONTACTS">Upload Contacts</span>\n                <md-button ng-if="vm.finished || !vm.uploading" class="md-icon-button" ng-click="vm.closeDialog()">\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.uploading" 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 layout="row" layout-align="center center" ng-show="!vm.fileSelected">\n                <md-button flow-init="vm.ngFlowOptions" flow-name="vm.ngFlow.flow" flow-btn flow-file-added="vm.fileAdded($event, $file, $flow)" flow-file-success="vm.fileSuccess($file, $message, $flow)" class="md-accent md-raised md-warn" aria-label="Select File" translate\n                    translate-attr-aria-label="CONTACTMANAGER.SELECT_FILE">\n                    <span translate="CONTACTMANAGER.SELECT_FILE">Select File</span>\n                    <md-icon md-font-icon="icon-upload"></md-icon>\n                    </md-button>\n            </div>\n\n            <div>\n                <md-content ng-show="!vm.uploading && !vm.finished && vm.fileSelected">\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"><em>{{ \'CONTACTMANAGER.NONE\' | translate }}</em></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"><em>{{ \'CONTACTMANAGER.NONE\' | translate }}</em></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"><em translate="CONTACTMANAGER.NONE">None</em></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                </md-content>\n\n                <div layout="row" ng-if="vm.uploading || vm.finished">\n                    \x3c!-- WIDGET SUCCESS --\x3e\n                    <ms-widget 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"><span ng-bind="vm.success"></span></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 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"><span ng-bind="vm.errors"></span></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 class="h-140" flex ng-if="vm.duplicate">\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"><span ng-bind="vm.duplicate"></span></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 class="error-list" ng-if="vm.finished">\n                    <div class="info" layout="row" layout-align="space-between center">\n                        <div>\n                            <div class="message">{{\'CONTACTMANAGER.UPLOAD_COMPLETED\' | translate | uppercase}}</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>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row">\n                <md-button ng-disabled="uploadForm.$invalid || uploadForm.$pristine || vm.uploading || vm.finished || !vm.fileSelected" ng-click="vm.uploadCsv()" class="md-accent md-raised" aria-label="UPLOAD" translate="CONTACTMANAGER.UPLOAD" translate-attr-aria-label="CONTACTMANAGER.UPLOAD">\n                    UPLOAD\n                </md-button>\n                <md-button ng-if="vm.showStopButton && !vm.finished" ng-disabled="vm.disableStopButton" 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.rows.length" ng-csv="vm.exportErrors()" class="md-accent md-raised" aria-label="Export Errors" filename="contacts_upload_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/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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.list.exten">{{vm.list.exten}}</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\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()" 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\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>\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\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                                <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\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">\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\n                                </div>\n                            </md-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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                                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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                                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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditList($event, list)" md-cell class="id ">{{list.id}}</td>\n                                <td ng-click="vm.createOrEditList($event, list)" md-cell class="name ">{{list.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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.currentUser.role == \'admin\'" 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"\n        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"\n            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"\n        ng-init="vm.init(tab)"></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\'"\n        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/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"><timer start-time="call.answeredAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></span>\n                                <div flex></div>\n                                <span ng-if="call.disposedAt" class="text-boxed amber-200-bg"><timer start-time="call.disposedAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></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" 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" 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" 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" 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                            <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="icon-message"></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="icon-message"></md-icon>\n                                    <input type="text" name="viber" ng-model="vm.contact.viber" class="text-truncate">\n                                </md-input-container>\n                            </div>\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    <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        <div ng-if="vm.isReschedule" 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    <md-dialog-actions ng-if="!vm.isReschedule" layout="row">\n        <md-button ng-disabled="!(vm.choice || vm.note)" 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 ng-if="vm.dialerCall" class="send-button md-raised md-primary" translate="DASHBOARDS.RESCHEDULE" ng-click="vm.saveDisposition(\'reschedule\')">\n            Reschedule\n        </md-button>\n        <md-button ng-if="vm.dialerCall" 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.dialerCall && 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-disabled="vm.disable" ng-click="vm.saveReschedule()" 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</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.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_bull.query.lastAssignedTo" ng-change="vm_bull.getContacts()">\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.getContacts()">\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.refreshContacts($event)" aria-label="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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.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="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.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_bull.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="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.calleridnum" license="vm_home.license" disabled="contact.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[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.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-switch no-margin ng-if="contact.lastAssignedTo === vm_bull.currentUser.name || !contact.lastAssignedTo" ng-disabled="vm_bull.disable[contact.id]" ng-model="contact.assigned" aria-label="reserved" ng-change="vm_bull.reserved(contact, contact.disposition)">\n                            \x3c!-- <span>{{ contact.assigned ? \'DASHBOARDS.RESERVED\' : \'DASHBOARDS.FREE\' | translate }}</span> --\x3e\n                        </md-switch>\n                    </td>\n                    <td md-cell class="list">{{contact.lastAssignedTo}}</td>\n                    <td md-cell class="actions">\n                        <md-menu ng-if="contact.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(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_bull.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_bull.query.page" md-total="{{vm_bull.contacts.count}}" md-on-paginate="vm_bull.getContacts" 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.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_voice.query.lastAssignedTo" ng-change="vm_voice.getContacts()">\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.getContacts()">\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.refreshContacts($event)" aria-label="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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.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="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.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_voice.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="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.calleridnum" license="vm_home.license" disabled="contact.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[contact.queue]}}</td>\n                    <td md-cell class="list">{{contact.queuecallerabandonAt ? (contact.queuecallerabandonAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{contact.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-switch no-margin ng-if="contact.lastAssignedTo === vm_voice.currentUser.name || !contact.lastAssignedTo" ng-disabled="vm_voice.disable[contact.id]" ng-model="contact.assigned" aria-label="reserved" ng-change="vm_voice.reserved(contact, contact.disposition)">\n                            \x3c!-- <span>{{ contact.assigned ? \'DASHBOARDS.RESERVED\' : \'DASHBOARDS.FREE\' | translate }}</span> --\x3e\n                        </md-switch>\n                    </td>\n                    <td md-cell class="list">{{contact.lastAssignedTo}}</td>\n                    <td md-cell class="actions">\n                        <md-menu ng-if="contact.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(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_voice.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_voice.query.page" md-total="{{vm_voice.contacts.count}}" md-on-paginate="vm_voice.getContacts" 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="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)"\n            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><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></span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{chatInteraction.lastMsgAt | formatdate }}</span>\n                            </div </div>\n                            <span ng-if="!chatInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <span ng-if="chatInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="chatInteraction.disposition">- {{chatInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="chatInteraction.closed">{{chatInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!chatInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="chatInteraction.substatus"> - {{chatInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate" 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="3">\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-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"\n        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="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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(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"\n            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><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></span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{faxInteraction.lastMsgAt | formatdate }}</span>\n                            </div </div>\n                            <span ng-if="!faxInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <span ng-if="faxInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="faxInteraction.disposition">- {{faxInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="faxInteraction.closed">{{faxInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!faxInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="faxInteraction.substatus"> - {{faxInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate" 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="3">\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-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"\n        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><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></span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{mailInteraction.lastMsgAt | formatdate }}</span>\n                            </div </div>\n                            <span ng-if="!mailInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <span ng-if="mailInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="mailInteraction.disposition">- {{mailInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="mailInteraction.closed">{{mailInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!mailInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="mailInteraction.substatus"> - {{mailInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate" 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="3">\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-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"\n        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="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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><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></span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{openchannelInteraction.lastMsgAt | formatdate }}</span>\n                            </div </div>\n                            <span ng-if="!openchannelInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <span ng-if="openchannelInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="openchannelInteraction.disposition">- {{openchannelInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="openchannelInteraction.closed">{{openchannelInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!openchannelInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="openchannelInteraction.substatus"> - {{openchannelInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate" 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="3">\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-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"\n        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">Inbound</md-option>\n                    <md-option value="outbound">Outbound</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></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/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><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></span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{smsInteraction.lastMsgAt | formatdate }}</span>\n                            </div </div>\n                            <span ng-if="!smsInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <span ng-if="smsInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="smsInteraction.disposition">- {{smsInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="smsInteraction.closed">{{smsInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!smsInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="smsInteraction.substatus"> - {{smsInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate" 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="3">\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-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"\n        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">Inbound</md-option>\n                    <md-option value="outbound">Outbound</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"\n                        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"\n                        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 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"\n                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"\n                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"\n                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">\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(true)" 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" 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(false)" 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"\n                        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"\n                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"\n        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>\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.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.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\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)">{{ vm.getLabelByMessage(message) }} - {{message.createdAt | date: \'medium\'}}</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" 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'),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\n                        <div layout="column" layout-align="start start">\n                            <div layout="row" layout-align="start start">\n                                \x3c!-- <div>\n                                <img ng-if="message.direction ===\'in\'" ng-src="assets/images/avatars/customer.png" class="avatar" alt="customer" />\n\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                            </div> --\x3e\n\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\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\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\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\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\n\n                            \x3c!-- <md-menu>\n                        <md-button aria-label="More" class="md-icon-button"\n                                   ng-click="$mdOpenMenu($event)"\n                                   translate translate-aria-label="MAIL.MORE">\n                            <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 aria-label="Print" translate-aria-label="MAIL.PRINT">\n                                    <md-icon md-font-icon="icon-printer"></md-icon>\n                                    <span translate="MAIL.PRINT">Print</span>\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu> --\x3e\n                        </div>\n\n\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-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">\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">{{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-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>'),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"><timer start-time="vm.starttime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></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}}</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                <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\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                <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\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\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">{{ 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                <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\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">{{ 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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" required autofocus>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents">{{ 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">\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">\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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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">\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>\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">\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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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">\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>\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\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">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables">{{ 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">\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" required autofocus>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.faxAccount.exten">{{vm.faxAccount.exten}}</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\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (advancedForm.$invalid) || (faxDispositionsForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)"\n                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\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>\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\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                                <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\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\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">\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\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">{{ 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">\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\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">{{ 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">\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">\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\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"><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"><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, removePlugins: \'magicline\' }"\n                                    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"><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">\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"><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">\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\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" required autofocus>\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>\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>\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">\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\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">\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\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">\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\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">\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>\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                </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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editFaxAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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 ng-if="vm_dc.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditFaxAccount($event, faxAccount)" md-cell class="id ">{{faxAccount.id}}</td>\n                                <td ng-click="vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="name ">{{faxAccount.name}}</td>\n                                <td ng-click="vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="key ">{{faxAccount.key}}</td>\n                                <td ng-click="vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="TrunkId ">{{ TrunkId = vm.trunks[faxAccount.TrunkId]; TrunkId.name }}</td>\n                                <td ng-click="vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="localstationid ">{{faxAccount.localstationid}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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}}"\n                    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 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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxQueues/edit/teamadd/teamadd.html",'<md-dialog class="faxQueue-dialog" aria-label="faxQueue">\n    <form name="faxQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="FAX.TEAMADD_FAXQUEUE">Add Team in 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    </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                        <span ng-if="vm.faxQueue.exten">{{vm.faxQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditFaxQueue($event, faxQueue)" md-cell class="id ">{{faxQueue.id}}</td>\n                                <td ng-click="vm.createOrEditFaxQueue($event, faxQueue)" md-cell class="name ">{{faxQueue.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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}}"\n                    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 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><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></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><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></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">\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.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}}"\n    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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'FAX.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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}}"\n    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">\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}}"\n    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">\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}}"\n    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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditDeskAccount($event, deskAccount)" md-cell class="id ">{{deskAccount.id}}</td>\n                                <td ng-click="vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="name ">{{deskAccount.name}}</td>\n                                <td ng-click="vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="remoteUri ">{{deskAccount.remoteUri}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="deskAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="deskAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.deskAccount.exten">{{vm.deskAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveDeskAccount()" 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\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>\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\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="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">\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\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="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">\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\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">\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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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/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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newFreshdeskAccount" ng-click="vm.saveFreshdeskAccount()" class="send-button md-accent md-raised" ng-disabled="freshdeskAccountForm.$invalid || freshdeskAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newFreshdeskConfiguration" ng-click="vm.saveFreshdeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="freshdeskConfigurationForm.$invalid || freshdeskConfigurationForm.$pristine" aria-label="SAVE"\n                    translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newFreshdeskConfiguration" ng-click="vm.addNewFreshdeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="freshdeskConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_FRESHDESKCONFIGURATION"\n                        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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="freshdeskAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="freshdeskAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.freshdeskAccount.exten">{{vm.freshdeskAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveFreshdeskAccount()" 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\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>\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\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                                <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\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                                <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\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                                <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\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                                <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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="id ">{{freshdeskAccount.id}}</td>\n                                <td ng-click="vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="name ">{{freshdeskAccount.name}}</td>\n                                <td ng-click="vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="username ">{{freshdeskAccount.username}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newSalesforceAccount" ng-click="vm.saveSalesforceAccount()" class="send-button md-accent md-raised" ng-disabled="salesforceAccountForm.$invalid || salesforceAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                <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\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newSalesforceConfiguration" ng-click="vm.saveSalesforceConfiguration()" class="send-button md-accent md-raised" ng-disabled="salesforceConfigurationForm.$invalid || salesforceConfigurationForm.$pristine" aria-label="SAVE"\n                    translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newSalesforceConfiguration" ng-click="vm.addNewSalesforceConfiguration()" class="send-button md-accent md-raised" ng-disabled="salesforceConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SALESFORCECONFIGURATION"\n                        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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="salesforceAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="salesforceAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.salesforceAccount.exten">{{vm.salesforceAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveSalesforceAccount()" 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\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>\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\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="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">\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\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                                <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\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">\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\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                                <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\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                                <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\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                                <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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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()">\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()">\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" 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="id ">{{salesforceAccount.id}}</td>\n                                <td ng-click="vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="name ">{{salesforceAccount.name}}</td>\n                                <td ng-click="vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="username ">{{salesforceAccount.username}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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/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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newSugarcrmAccount" ng-click="vm.saveSugarcrmAccount()" class="send-button md-accent md-raised" ng-disabled="sugarcrmAccountForm.$invalid || sugarcrmAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newSugarcrmConfiguration" ng-click="vm.addNewSugarcrmConfiguration()" class="send-button md-accent md-raised" ng-disabled="sugarcrmConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SUGARCRMCONFIGURATION"\n                        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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="sugarcrmAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="sugarcrmAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.sugarcrmAccount.exten">{{vm.sugarcrmAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveSugarcrmAccount()" 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\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>\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\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                                <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\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                                <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\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">\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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="id ">{{sugarcrmAccount.id}}</td>\n                                <td ng-click="vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="name ">{{sugarcrmAccount.name}}</td>\n                                <td ng-click="vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="username ">{{sugarcrmAccount.username}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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 ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newVtigerConfiguration" ng-click="vm.addNewVtigerConfiguration()" class="send-button md-accent md-raised" ng-disabled="vtigerConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_VTIGERCONFIGURATION"\n                        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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="vtigerAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="vtigerAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.vtigerAccount.exten">{{vm.vtigerAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveVtigerAccount()" 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\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>\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\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                                <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\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                                <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\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                                <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\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                                <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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="id ">{{vtigerAccount.id}}</td>\n                                <td ng-click="vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="name ">{{vtigerAccount.name}}</td>\n                                <td ng-click="vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="username ">{{vtigerAccount.username}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newZendeskAccount" ng-click="vm.saveZendeskAccount()" class="send-button md-accent md-raised" ng-disabled="zendeskAccountForm.$invalid || zendeskAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="zendeskAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="zendeskAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.zendeskAccount.exten">{{vm.zendeskAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveZendeskAccount()" 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\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>\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\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="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">\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\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                                <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\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="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">\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\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                                <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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newZendeskConfiguration" ng-click="vm.addNewZendeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="zendeskConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_ZENDESKCONFIGURATION"\n                        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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="id ">{{zendeskAccount.id}}</td>\n                                <td ng-click="vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="name ">{{zendeskAccount.name}}</td>\n                                <td ng-click="vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="username ">{{zendeskAccount.username}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="zohoAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="zohoAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.zohoAccount.exten">{{vm.zohoAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveZohoAccount()" 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\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>\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\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="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">\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\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                                <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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditZohoAccount($event, zohoAccount)" md-cell class="id ">{{zohoAccount.id}}</td>\n                                <td ng-click="vm.createOrEditZohoAccount($event, zohoAccount)" md-cell class="name ">{{zohoAccount.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\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                        <span ng-if="vm.project.exten">{{vm.project.exten}}</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\n        <div ng-cloak>\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (builderForm.$invalid) || (previewForm.$invalid) || (sessionsForm.$invalid) || (answersForm.$invalid)" translate="JSCRIPTY.SAVE"\n                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\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 ng-disabled="true">\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\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.project.enableUncompleteSave" aria-label="EnableUncompleteSave"><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">\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\n                                </div>\n                            </md-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\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\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditProject($event, project)" md-cell class="id ">{{project.id}}</td>\n                                <td ng-click="vm.createOrEditProject($event, project)" md-cell class="name ">{{project.name}}</td>\n                                <td ng-click="vm.createOrEditProject($event, project)" md-cell class="description ">{{project.description}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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>\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 ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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" 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                <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\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                <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\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\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                <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">{{ 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                <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\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                <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                <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\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                <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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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" required autofocus>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents">{{ 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">\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">\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" required autofocus>\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, removePlugins: \'magicline\' }"\n                    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">\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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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">\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>\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">\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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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">\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>\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\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">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables">{{ 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">\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" required autofocus>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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                <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, removePlugins: \'magicline\' }"\n                    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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newMailCannedAnswer" ng-click="vm.saveMailCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="mailCannedAnswerForm.$invalid || mailCannedAnswerForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE"\n                    translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.mailAccount.exten">{{vm.mailAccount.exten}}</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\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (imapForm.$invalid) || (smtpForm.$invalid) || (mailDispositionsForm.$invalid) || (mailCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)"\n                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\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>\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\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                                <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\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\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                                <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>\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists">{{ 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"><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">\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, removePlugins: \'magicline\' }"\n                                    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"><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">\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">\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\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"><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"><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, removePlugins: \'magicline\' }"\n                                    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"><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">\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"><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">\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\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" required autofocus>\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">\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\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                                <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"><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"><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">\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\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">\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\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">\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">\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\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" required autofocus>\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">\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\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                                <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"><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"><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">\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\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.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editMailAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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 ng-if="vm_dc.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditMailAccount($event, mailAccount)" md-cell class="id ">{{mailAccount.id}}</td>\n                                <td ng-click="vm.createOrEditMailAccount($event, mailAccount)" md-cell class="name ">{{mailAccount.name}}</td>\n                                <td ng-click="vm.createOrEditMailAccount($event, mailAccount)" md-cell class="key ">{{mailAccount.key}}</td>\n                                <td ng-click="vm.createOrEditMailAccount($event, mailAccount)" md-cell class="email ">{{mailAccount.email}}</td>\n                                <td ng-click="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.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailQueues/edit/teamadd/teamadd.html",'<md-dialog class="mailQueue-dialog" aria-label="mailQueue">\n    <form name="mailQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MAIL.TEAMADD_MAILQUEUE">Add Team in 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    </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                        <span ng-if="vm.mailQueue.exten">{{vm.mailQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditMailQueue($event, mailQueue)" md-cell class="id ">{{mailQueue.id}}</td>\n                                <td ng-click="vm.createOrEditMailQueue($event, mailQueue)" md-cell class="name ">{{mailQueue.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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.editdialog(mailSubstatus, $event)" translate="MAIL.EDIT_MAILSUBSTATUS">\n                                                    Edit MailSubstatus\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\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"\n                    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 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><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></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><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></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>\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"\n    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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'MAIL.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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"\n    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">\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"\n    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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                        <span ng-if="vm.plugin.exten">{{vm.plugin.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.savePlugin()" 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\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>\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\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="true">\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\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">\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\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                                <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\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="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">\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\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                                <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\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="true">\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\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                                <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\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="true">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditPlugin($event, plugin)" md-cell class="name ">{{plugin.name}}</td>\n                                <td ng-click="vm.createOrEditPlugin($event, plugin)" md-cell class="type ">{{plugin.type}}</td>\n                                <td ng-click="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.createOrEditPlugin($event, plugin)" md-cell class="description ">{{plugin.description}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="!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>\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="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="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="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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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)"\n                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                <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\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">{{ 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">{{ 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">{{ 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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\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">\n            <div layout="row" layout-align="start center">\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="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.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="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.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">\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    </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                        <span ng-if="vm.ivrCampaign.exten">{{vm.ivrCampaign.exten}}</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\n        <div ng-cloak>\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>\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()" 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)"\n                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\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 ng-disabled="true">\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\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">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="TrunkBackupId.id" ng-repeat="TrunkBackupId in vm.trunks">{{ 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>\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval">{{ 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>\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">\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">\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\n                                </div>\n                            </md-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\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" required autofocus>\n                                    <md-option ng-value="SquareProjectId.id" ng-repeat="SquareProjectId in vm.projects">{{ 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">\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>\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\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">\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\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">\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">\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+$/">\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\n                                </div>\n                            </md-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\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>\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>\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">\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>\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">\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>\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">\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\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>\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>\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\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>\n                                    < <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEZONE"></span></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"><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">\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">\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">\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">\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">\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">\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">\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">\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">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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_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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                        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\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)">\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]"\n                        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\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)">\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>\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>\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>\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>\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>\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>\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>\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-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 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">\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_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]"\n                        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\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)">\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]"\n                        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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="id ">{{ivrCampaign.id}}</td>\n                                <td ng-click="vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="name ">{{ivrCampaign.name}}</td>\n                                <td ng-click="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.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="TrunkId ">{{ TrunkId = vm.trunks[ivrCampaign.TrunkId]; TrunkId.name }}</td>\n                                <td ng-click="vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="SquareProjectId ">{{ SquareProjectId = vm.projects[ivrCampaign.SquareProjectId]; SquareProjectId.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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">{{ 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">{{ 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                <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                <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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.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.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    </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                <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\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">{{ 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">\n            <div layout="row" layout-align="start center">\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="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.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="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.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">\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    </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">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.TEAMADD_QUEUECAMPAIGN">Add Team 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            <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    </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                        <span ng-if="vm.queueCampaign.exten">{{vm.queueCampaign.exten}}</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\n        <div ng-cloak>\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>\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()" 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)"\n                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\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 ng-disabled="true">\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\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">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="TrunkBackupId.id" ng-repeat="TrunkBackupId in vm.trunks">{{ 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>\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval">{{ 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>\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">\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">\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\n                                </div>\n                            </md-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\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" required autofocus>\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">\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">\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">\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>\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\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                                <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>\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">\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">\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">\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">\n                                    <md-option ng-value="musiconhold.name" ng-repeat="musiconhold in vm.musiconholds">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject.name" ng-repeat="dialQueueProject in vm.projects">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject2.name" ng-repeat="dialQueueProject2 in vm.projects">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject.name" ng-repeat="dialQueueProject in vm.projects">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject2.name" ng-repeat="dialQueueProject2 in vm.projects">{{ 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"><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>\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\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">\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\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">\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">\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+$/">\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\n                                </div>\n                            </md-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\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>\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>\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">\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>\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">\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>\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">\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\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"><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">\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">\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">\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">\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">\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">\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">\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\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">\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">\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">\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">\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 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"><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">\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">\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">\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\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>\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"><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>\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\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>\n                                    < <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEZONE"></span></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"><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">\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">\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">\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">\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">\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">\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">\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">\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">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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_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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                        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\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)">\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]"\n                        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\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)">\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>\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>\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>\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>\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>\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>\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>\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-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 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">\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_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]"\n                        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\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)">\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]"\n                        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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="id ">{{queueCampaign.id}}</td>\n                                <td ng-click="vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="name ">{{queueCampaign.name}}</td>\n                                <td ng-click="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.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="TrunkId ">{{ TrunkId = vm.trunks[queueCampaign.TrunkId]; TrunkId.name }}</td>\n                                <td ng-click="vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="dialMethod ">{{ vm.arraydialMethod[queueCampaign.dialMethod].option }}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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\n                        <md-menu-content width="2">\n                            <md-menu-item>\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.disposition.length" ng-repeat="disposition in vm.disposition">\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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'MOTIONDIALER.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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]"\n    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">\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.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]"\n    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">\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            \x3c!-- <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.channelStatusClass[call.status.toLowerCase()]"></i>\n        </td>\n        <td md-cell>{{call.exten}}</td>\n        <td md-cell>{{call.queue}}</td>\n        <td md-cell><span ng-if="call.calleridname">{{call.calleridname}}, </span>{{call.calleridnum}}</td>\n        <td md-cell>\n          <span ng-if="call.queuecallerleaveAt">\n            {{call.connectedlinename}}, {{call.connectedlinenum}}\n            <span class="text-boxed">\n              <timer start-time="call.queuecallerleaveAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            </span>\n          </span>\n          <span ng-if="!call.queuecallerleaveAt" class="text-boxed" translate="MOTIONDIALER.WAITING_FOR_AGENT">\n            Waiting for agent...\n            <span class="text-boxed">\n              <timer start-time="call.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            </span>\n          </span>\n        </td>\n        <td md-cell>\n          <span class="text-boxed">\n            <timer ng-if="call.queuecallerjoinAt" start-time="call.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            <span ng-if="call.queuecallercomplete || call.queuecallerabandon || call.queuecallerexit" translate="MOTIONDIALER.CLOSING">Closing</span>\n          </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="2">\n              <md-menu-item>\n                <md-button ng-click="vm.hangup(call.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, call.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(call.uniqueid, agent.name)">{{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> --\x3e\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]"\n    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>{{\' MOTIONDIALER.NAME\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.TOTAL\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.TOTAL_OFFERED\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.MANAGED\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.ABANDONED\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.DROPPED\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.AVG_HOLD_TIME\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.AVG_DURATION\' | translate}}</th>\n                <th md-column>{{\' 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]"\n    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">\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]"\n    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                <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\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                <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\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\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                <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\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">{{ 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newOpenchannelAccount" ng-click="vm.saveOpenchannelAccount()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountForm.$invalid || openchannelAccountForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE"\n                    translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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">\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    </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" required autofocus>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents">{{ 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">\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">\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" required autofocus>\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" md-maxlength="255" 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 ng-message="md-maxlength">\n                        <span translate="OPENCHANNEL.ERRORS.TEXT_MAX_LENGTH" translate-values=\'{max: 255}\'>Text 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">\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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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">\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>\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">\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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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">\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>\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\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">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables">{{ 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">\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" required autofocus>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newOpenchannelCannedAnswer" ng-click="vm.saveOpenchannelCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="openchannelCannedAnswerForm.$invalid || openchannelCannedAnswerForm.$pristine" aria-label="SAVE"\n                    translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newOpenchannelCannedAnswer" ng-click="vm.addNewOpenchannelCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="openchannelCannedAnswerForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELCANNEDANSWER"\n                        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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newOpenchannelDisposition" ng-click="vm.saveOpenchannelDisposition()" class="send-button md-accent md-raised" ng-disabled="openchannelDispositionForm.$invalid || openchannelDispositionForm.$pristine" aria-label="SAVE"\n                    translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newOpenchannelDisposition" ng-click="vm.addNewOpenchannelDisposition()" class="send-button md-accent md-raised" ng-disabled="openchannelDispositionForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELDISPOSITION"\n                        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.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                        <span ng-if="vm.openchannelAccount.exten">{{vm.openchannelAccount.exten}}</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\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (proxyForm.$invalid) || (openchannelDispositionsForm.$invalid) || (openchannelCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)"\n                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\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 ng-disabled="true">\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\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                                <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\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\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                                <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\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">{{ 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">\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">\n                                    <md-option ng-value="\'\'">None</md-option>\n                                    <md-optgroup label="standard">\n                                        <md-option ng-value="mapKey.value" ng-repeat="mapKey in vm.attributes">{{ mapKey.option }}</md-option>\n                                    </md-optgroup>\n                                    <md-optgroup label="custom">\n                                        <md-option ng-value="mapKey.value" ng-repeat="mapKey in vm.customFields">{{ mapKey.option }}</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">\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\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"><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"><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, removePlugins: \'magicline\' }"\n                                    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"><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">\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"><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">\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\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 ng-disabled="true">\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\n                                </div>\n                            </md-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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                                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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                                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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editOpenchannelAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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 ng-if="vm_dc.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="id ">{{openchannelAccount.id}}</td>\n                                <td ng-click="vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="name ">{{openchannelAccount.name}}</td>\n                                <td ng-click="vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="key ">{{openchannelAccount.key}}</td>\n                                <td ng-click="vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="replyUri ">{{openchannelAccount.replyUri}}</td>\n                                <td ng-click="vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="ListId ">{{ ListId = vm.lists[openchannelAccount.ListId]; ListId.name }}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newOpenchannelQueue" ng-click="vm.saveOpenchannelQueue()" class="send-button md-accent md-raised" ng-disabled="openchannelQueueForm.$invalid || openchannelQueueForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE"\n                    translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelQueues/edit/teamadd/teamadd.html",'<md-dialog class="openchannelQueue-dialog" aria-label="openchannelQueue">\n    <form name="openchannelQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="OPENCHANNEL.TEAMADD_OPENCHANNELQUEUE">Add Team in 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    </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                        <span ng-if="vm.openchannelQueue.exten">{{vm.openchannelQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditOpenchannelQueue($event, openchannelQueue)" md-cell class="id ">{{openchannelQueue.id}}</td>\n                                <td ng-click="vm.createOrEditOpenchannelQueue($event, openchannelQueue)" md-cell class="name ">{{openchannelQueue.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'OPENCHANNEL.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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"\n    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">\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"\n    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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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) || (customizationsForm.$invalid || logoForm.$invalid || logologinForm.$invalid)" class="send-button md-accent md-raised"\n                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                        <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\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                        <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\n                        </div>\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()"\n                        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()"\n                    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>\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                <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                <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                <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\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                <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\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                <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\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                <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\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                <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                <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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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)"\n                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                        <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                        <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                        <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\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                        <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\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                        <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\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                        <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\n                        </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                        <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\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                        <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                        <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                        <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" required autofocus>\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])$/"\n                    ng-required="true">\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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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-if="!vm.newNetwork" 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-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\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 ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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                <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\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                <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                <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\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                <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                <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\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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <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\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                        <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                        <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\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                        <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                        <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\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                        <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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'SMS.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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}}"\n    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">\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}}"\n    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                <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\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                <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\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\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                <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\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\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">{{ 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.PHONE">Phone</label>\n                <input type="text" name="phone" ng-model="vm.smsAccount.phone" ng-required="true">\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\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-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 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                <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\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                <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\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                <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\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="\'basic\'">Basic</md-option>\n                    <md-option ng-value="\'classic\'">Classic</md-option>\n                    <md-option ng-value="\'classic+\'">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\'" 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                <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\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\'">\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 class="md-block">\n                <label translate="SMS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.smsAccount.description">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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" required autofocus>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents">{{ 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">\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">\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" required autofocus>\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" md-maxlength="255" 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 ng-message="md-maxlength">\n                        <span translate="SMS.ERRORS.TEXT_MAX_LENGTH" translate-values=\'{max: 255}\'>Text 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">\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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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">\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>\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">\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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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">\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>\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\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">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables">{{ 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">\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" required autofocus>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.smsAccount.exten">{{vm.smsAccount.exten}}</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\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (proxyForm.$invalid) || (smsDispositionsForm.$invalid) || (smsCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)"\n                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\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 ng-disabled="true">\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\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                                <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\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\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">{{ 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.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.smsAccount.phone" ng-required="true">\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\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-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 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                                <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\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                                <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\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                                <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\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="\'basic\'">Basic</md-option>\n                                    <md-option ng-value="\'classic\'">Classic</md-option>\n                                    <md-option ng-value="\'classic+\'">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\'" 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                                <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\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\'">\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 == \'skebby\' && vm.smsAccount.smsMethod == \'classic+\') || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'plivo\'" 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">\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\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\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.smsAccount.type == \'skebby\' && vm.smsAccount.smsMethod == \'classic+\') || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\'" class="md-block">\n                                <md-switch ng-model="vm.smsAccount.deliveryReport" aria-label="deliveryReport"><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">\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">\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\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 == \'classic+\') || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\' ) && 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" 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"><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"><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, removePlugins: \'magicline\' }"\n                                    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"><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">\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"><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">\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\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 ng-disabled="true">\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\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                                <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\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\n                                </div>\n                            </md-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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editSmsAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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 ng-if="vm_dc.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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="phone">{{ \'SMS.PHONE\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'SMS.TYPE\' | 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.createOrEditSmsAccount($event, smsAccount)" md-cell class="id ">{{smsAccount.id}}</td>\n                                <td ng-click="vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="name ">{{smsAccount.name}}</td>\n                                <td ng-click="vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="key ">{{smsAccount.key}}</td>\n                                <td ng-click="vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="ListId ">{{ ListId = vm.lists[smsAccount.ListId]; ListId.name }}</td>\n                                <td ng-click="vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="phone ">{{smsAccount.phone}}</td>\n                                <td ng-click="vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="type ">{{ vm.arraytype[smsAccount.type].option }}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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}}"\n                    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 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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsQueues/edit/teamadd/teamadd.html",'<md-dialog class="smsQueue-dialog" aria-label="smsQueue">\n    <form name="smsQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="SMS.TEAMADD_SMSQUEUE">Add Team in 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    </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                        <span ng-if="vm.smsQueue.exten">{{vm.smsQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditSmsQueue($event, smsQueue)" md-cell class="id ">{{smsQueue.id}}</td>\n                                <td ng-click="vm.createOrEditSmsQueue($event, smsQueue)" md-cell class="name ">{{smsQueue.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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}}"\n                    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 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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="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="7">\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.createOrEditAgent($event, agent)" md-cell class="fullname font-weight-600">{{agent.fullname}}</td>\n                                <td ng-click="vm.createOrEditAgent($event, agent)" md-cell class="name ">{{agent.name}}</td>\n                                <td ng-click="vm.createOrEditAgent($event, agent)" md-cell class="email ">{{agent.email}}</td>\n                                <td ng-click="vm.createOrEditAgent($event, agent)" md-cell class="phone ">{{agent.phone}}</td>\n                                <td ng-click="vm.createOrEditAgent($event, agent)" md-cell class="mobile ">{{agent.mobile}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\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                <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\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                <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">\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 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 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                <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\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                <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\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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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">\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.isVoiceChannel()">\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    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",'<md-dialog class="agent-dialog" aria-label="agent">\n    <form name="agentForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="STAFF.TEAMADD_AGENT">Add Team in AGENT</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/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                        <span ng-if="vm.agent.exten">{{vm.agent.exten}}</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\n        <div ng-cloak ng-if="vm.agent.role !== \'admin\'">\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>\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()" 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)"\n                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\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>\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\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="true">\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\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                                <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\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                                <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">\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\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">\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\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="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                                <md-switch ng-model="vm.agent.loginInPause" aria-label="LoginInPause"><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">\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\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 ng-disabled="true">\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\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" ng-disabled="true">\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\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)" 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()"\n                                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>\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\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 ng-disabled="true">\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\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>\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">\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\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" required multiple>\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">\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" required multiple>\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-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">\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\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>\n                            <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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">\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\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.agent.chanspy" aria-label="chanSpy"><span translate="STAFF.CHANSPY">chanSpy</span></md-switch>\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>\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\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>\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">\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">\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">\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">\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\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"><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"><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">\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"><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"><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"><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"><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"><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"><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.phoneBarPrefixRequired" aria-label="PrefixRequired"><span translate="STAFF.PREFIXREQUIRED">PrefixRequired</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"><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"><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                        <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>\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">\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"><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">\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\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\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>\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\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">\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\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.agent.phoneBarEnableSettings" aria-label="EnableSettings"><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"><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">\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"><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"><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>\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\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"><span translate="STAFF.ENABLEMESSENGER">EnableMessenger</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)" 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)"></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-button ng-if="vm_pc.allowPermissions(child)" ng-disabled="!father.enabled || !child.enabled" class="md-fab md-mini md-primary" aria-label="Permissions" ng-click="vm_pc.addPermissions(child)">\n                                    <md-icon md-font-icon="icon-eye"></md-icon>\n                                </md-button>\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)"></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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\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                <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">\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                <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\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                <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\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.telephone.exten">{{vm.telephone.exten}}</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\n        <div ng-cloak>\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()" 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\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>\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\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="true">\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\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                                <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">\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\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">\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\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">\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\n                                </div>\n                            </md-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\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 ng-disabled="true">\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\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" required multiple>\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" required multiple>\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" required multiple>\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-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">\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\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>\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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">\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\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditTelephone($event, telephone)" md-cell class="fullname font-weight-600">{{telephone.fullname}}</td>\n                                <td ng-click="vm.createOrEditTelephone($event, telephone)" md-cell class="name ">{{telephone.name}}</td>\n                                <td ng-click="vm.createOrEditTelephone($event, telephone)" md-cell class="email ">{{telephone.email}}</td>\n                                <td ng-click="vm.createOrEditTelephone($event, telephone)" md-cell class="internal ">{{telephone.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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/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" required autofocus 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 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                <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\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                <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\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                <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">\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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/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/permissionadd/permissionadd.html",'<md-dialog class="user-dialog" aria-label="user">\n    <form name="userForm" 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            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/users/edit/queueadd/queueadd.html",'<md-dialog class="user-dialog" aria-label="user">\n    <form name="userForm" 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.user.role === \'agent\' && vm.isVoiceChannel()">\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="userForm.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    </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                        <span ng-if="vm.user.exten">{{vm.user.exten}}</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\n        <div ng-cloak>\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()" class="send-button md-accent md-raised" ng-disabled="(personal_infoForm.$invalid) || (security_suiteForm.$invalid) || (change_avatarForm.$invalid) || (generalForm.$invalid) || (general_permissionsForm.$invalid) || (permissionsForm.$invalid)"\n                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\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" required autofocus ng-disabled="true">\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 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                                <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\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="true">\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\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                                <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">\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\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">\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\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">\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\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 ng-disabled="true">\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\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" ng-disabled="true">\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\n                                </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)" 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()"\n                                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>\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\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 ng-disabled="true">\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\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" required multiple>\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" required multiple>\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" required multiple>\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-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>\n                            <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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">\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\n                        </div>\n                    </md-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\n        <md-tab-body>\n            <div ng-if="vm.currentUser.role === \'admin\' && vm.user.role !== \'admin\'" class="user-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                        <label translate="STAFF.EDITPERMISSIONS">EditPermissions</label>\n                        <md-select name="crudPermissions" ng-model="vm.user.crudPermissions" autofocus>\n\n                            <md-option ng-value="0"> {{ \'STAFF.READANDEDITANDDELETE\' | translate }}</md-option>\n\n                            <md-option ng-value="1"> {{ \'STAFF.READANDEDIT\' | translate }}</md-option>\n                        </md-select>\n                        <div ng-messages="general_permissionsForm[\'crudPermissions\'].$error" ng-show="general_permissionsForm[\'crudPermissions\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="STAFF.ERRORS.EDITPERMISSIONS_REQUIRED">EditPermissions field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="user-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="UserPermissionsController as vm_pc" ng-init="vm_pc.init(vm.user)" class="user-detail-form-container">\n                    <md-list ng-repeat="father in vm_pc.navigation[0].children" ng-include="\'permission-nested.html\'" ng-if="vm_pc.user.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.user.permissions.includes(father.id)"></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-button ng-if="vm_pc.allowPermissions(child)" ng-disabled="!father.enabled || !child.enabled" class="md-fab md-mini md-primary" aria-label="Permissions" ng-click="vm_pc.addPermissions(child)">\n                                    <md-icon md-font-icon="icon-eye"></md-icon>\n                                </md-button>\n                                <md-switch ng-model="child.enabled" ng-change="vm_pc.onChange(father, child)" ng-init="child.enabled = vm_pc.user.permissions.includes(child.id)"></md-switch>\n                            </md-list-item>\n                        </md-list>\n                    <\/script>\n                    \x3c!-- / Nested navigation template --\x3e\n\n                    <span ng-if="vm_pc.user.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/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="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="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="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.createOrEditUser($event, user)" md-cell class="role ">{{ vm.arrayrole[user.role].option }}</td>\n                                <td ng-click="vm.createOrEditUser($event, user)" md-cell class="fullname font-weight-600">{{user.fullname}}</td>\n                                <td ng-click="vm.createOrEditUser($event, user)" md-cell class="name ">{{user.name}}</td>\n                                <td ng-click="vm.createOrEditUser($event, user)" md-cell class="email ">{{user.email}}</td>\n                                <td ng-click="vm.createOrEditUser($event, user)" md-cell class="phone ">{{user.phone}}</td>\n                                <td ng-click="vm.createOrEditUser($event, user)" md-cell class="mobile ">{{user.mobile}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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 ng-if="vm.currentUser.role === \'admin\' && user.id !== vm.currentUser.id">\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"\n                    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 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditCustomDashboard($event, customDashboard)" md-cell class="id ">{{customDashboard.id}}</td>\n                                <td ng-click="vm.createOrEditCustomDashboard($event, customDashboard)" md-cell class="name ">{{customDashboard.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.role == \'admin\'">\n                                                <md-button ng-click="vm.useradddialog(customDashboard, $event)" translate="TOOLS.USERADD_CUSTOMDASHBOARD">\n                                                    useradd CustomDashboard\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\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                <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\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\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                <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\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                <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\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                <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\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.REFRESH">Refresh</label>\n                <input type="number" name="attrRefresh" ng-model="vm.dashboarditem.attrRefresh" min="5" ng-required="true">\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="vm.dashboarditem.type == \'web-report\'" class="md-block">\n                <label translate="TOOLS.REPORT">Report</label>\n                <md-select name="attrReport" ng-model="vm.dashboarditem.attrReport" required>\n                    <md-option ng-value="attrReport.id" ng-repeat="attrReport in vm.customReports">{{ attrReport.name }}</md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrReport\'].$error" ng-show="dashboarditemForm[\'attrReport\'].$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="[\'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">{{ 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                <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"\n                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"\n                    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                        <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\n                        </div>\n                    </md-input-container>\n\n                    <div class="error-list">\n                        <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                            <div>\n                                <span class="message">{{error.message}}</span>\n                                <span class="type">({{error.type}})</span>\n                            </div>\n                            <md-button class="md-icon-button">\n                                <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                            </md-button>\n                        </div>\n                    </div>\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.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.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.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/useradd/useradd.html",'<md-dialog class="customDashboard-dialog" aria-label="customDashboard">\n    <form name="customDashboardForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="TOOLS.USERADD_CUSTOMDASHBOARD">Add User to customDashboard</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/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                        <span ng-if="vm.customDashboard.exten">{{vm.customDashboard.exten}}</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\n        <div ng-cloak>\n            <md-button ng-click="vm.useradddialog(vm.customDashboard, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="useradd" ng-if="vm.currentUser.role == \'admin\'">\n                <md-tooltip><span translate="TOOLS.USERADD_CUSTOMDASHBOARD"></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.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()" 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\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>\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\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                                <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\n                                </div>\n                            </md-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\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)" 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()" 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/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                <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\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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" 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" 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.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}}" 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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.interval.exten">{{vm.interval.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveInterval()" 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\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>\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\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                                <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\n                                </div>\n                            </md-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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditInterval($event, interval)" md-cell class="id ">{{interval.id}}</td>\n                                <td ng-click="vm.createOrEditInterval($event, interval)" md-cell class="name ">{{interval.name}}</td>\n                                <td ng-click="vm.createOrEditInterval($event, interval)" md-cell class="description ">{{interval.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.REPORTTYPE">ReportType</label>\n                <md-select name="type" ng-model="vm.schedule.type" required>\n                    <md-option ng-value="\'default\'">Default</md-option>\n                    <md-option ng-value="\'custom\'">Custom</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'type\'].$error" ng-show="scheduleForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.REPORTTYPE_REQUIRED">ReportType field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.type == \'default\'" class="md-block">\n                <label translate="TOOLS.REPORT">Report</label>\n                <md-select name="DefaultReportId" ng-model="vm.schedule.DefaultReportId" required>\n                    <md-option ng-value="DefaultReportId.id" ng-repeat="DefaultReportId in vm.defaultReports">{{ DefaultReportId.name }}</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'DefaultReportId\'].$error" ng-show="scheduleForm[\'DefaultReportId\'].$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.schedule.type == \'custom\'" class="md-block">\n                <label translate="TOOLS.REPORT">Report</label>\n                <md-select name="CustomReportId" ng-model="vm.schedule.CustomReportId" required>\n                    <md-option ng-value="CustomReportId.id" ng-repeat="CustomReportId in vm.customReports">{{ CustomReportId.name }}</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'CustomReportId\'].$error" ng-show="scheduleForm[\'CustomReportId\'].$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                <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">{{ 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                <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\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                <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\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                <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\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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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/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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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)"\n                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                <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\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                <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\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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, removePlugins: \'magicline\' }"\n                    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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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" required autofocus 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\'"> {{ \'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                </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">{{ 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">{{ 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                <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\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" required>\n                    <md-option ng-value="\'zendesk\'">Zendesk</md-option>\n                    <md-option ng-value="\'salesforce\'">Salesforce</md-option>\n                    <md-option ng-value="\'sugarcrm\'">SugarCRM</md-option>\n                    <md-option ng-value="\'freshdesk\'">Freshdesk</md-option>\n                    <md-option ng-value="\'desk\'">Desk</md-option>\n                    <md-option ng-value="\'zoho\'">Zoho</md-option>\n                    <md-option ng-value="\'vtiger\'">vTiger</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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.zendeskAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.deskAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.zohoAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.salesforceAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.sugarcrmAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.freshdeskAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.vtigerAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.zendeskConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.deskConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.zohoConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.salesforceConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.sugarcrmConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.freshdeskConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.vtigerConfigurations | filter:{AccountId:vm.action.data2}">{{ 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                <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\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                <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\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                <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\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">{{ 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">{{ 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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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" required autofocus>\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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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" required autofocus>\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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.trigger.exten">{{vm.trigger.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveTrigger()" 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\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>\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\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="true">\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"><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                                <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\n                                </div>\n                            </md-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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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>{{ value = vm_dc.chatAccounts[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'mail\' && allCondition.field == \'account\'" md-cell>{{ value = vm_dc.mailAccounts[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'sms\' && allCondition.field == \'account\'" md-cell>{{ value = vm_dc.smsAccounts[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'fax\' && allCondition.field == \'account\'" md-cell>{{ value = vm_dc.faxAccounts[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'openchannel\' && allCondition.field == \'account\'" md-cell>{{ value = vm_dc.openchannelAccounts[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'queue\'" md-cell>{{ value = vm_dc.queues[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'routeId\'" md-cell>{{ value = vm_dc.outboundRoutes[allCondition.value]; value.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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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>{{ value = vm_dc.chatAccounts[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'mail\' && anyCondition.field == \'account\'" md-cell>{{ value = vm_dc.mailAccounts[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'sms\' && anyCondition.field == \'account\'" md-cell>{{ value = vm_dc.smsAccounts[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'fax\' && anyCondition.field == \'account\'" md-cell>{{ value = vm_dc.faxAccounts[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'openchannel\' && anyCondition.field == \'account\'" md-cell>{{ value = vm_dc.openchannelAccounts[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'queue\'" md-cell>{{ value = vm_dc.queues[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'routeId\'" md-cell>{{ value = vm_dc.outboundRoutes[anyCondition.value]; value.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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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>{{ data1 = vm_dc.projects[action.data1]; data1.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>{{ data1 = vm_dc.lists[action.data1]; data1.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.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>{{ data2 = vm_dc.zendeskAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'desk\'" md-cell>{{ data2 = vm_dc.deskAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'zoho\'" md-cell>{{ data2 = vm_dc.zohoAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'salesforce\'" md-cell>{{ data2 = vm_dc.salesforceAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'sugarcrm\'" md-cell>{{ data2 = vm_dc.sugarcrmAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'freshdesk\'" md-cell>{{ data2 = vm_dc.freshdeskAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'vtiger\'" md-cell>{{ data2 = vm_dc.vtigerAccounts[action.data2]; data2.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>{{ data2 = vm_dc.templates[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'browser\' && action.data1 == \'0\'" md-cell>{{ data2 = vm_dc.templates[action.data2]; data2.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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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="39">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditTrigger($event, trigger)" md-cell class="id ">{{trigger.id}}</td>\n                                <td ng-click="vm.createOrEditTrigger($event, trigger)" md-cell class="name ">{{trigger.name}}</td>\n                                <td ng-click="vm.createOrEditTrigger($event, trigger)" md-cell class="channel ">{{ \'TOOLS.\' + vm.arraychannel[trigger.channel].option | uppercase | translate }}</td>\n                                <td ng-click="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.createOrEditTrigger($event, trigger)" md-cell class="description ">{{trigger.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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\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                        <span ng-if="vm.trunk.exten">{{vm.trunk.exten}}</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\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>\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()" 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\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 ng-disabled="true">\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\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                                <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\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">\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\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>\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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>\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>\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" required multiple>\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>\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" required multiple>\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-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" required multiple>\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">\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">\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\n                                </div>\n                            </md-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\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>\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\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>\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>\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">\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\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">\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\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">\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\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>\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>\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>\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>\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">\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" required multiple>\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">\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\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditTrunk($event, trunk)" md-cell class="id ">{{trunk.id}}</td>\n                                <td ng-click="vm.createOrEditTrunk($event, trunk)" md-cell class="name ">{{trunk.name}}</td>\n                                <td ng-click="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.createOrEditTrunk($event, trunk)" md-cell class="host ">{{trunk.host}}</td>\n                                <td ng-click="vm.createOrEditTrunk($event, trunk)" md-cell class="registry ">{{trunk.registry}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.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.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">\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.editdialog(chanSpy, $event)" translate="VOICE.EDIT_CHANSPY">\n                                                    Edit chanSpy\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\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" required multiple>\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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.editdialog(context, $event)" translate="VOICE.EDIT_CONTEXT">\n                                                    Edit Context\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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\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">{{ 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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" required autofocus>\n                    <md-option ng-value="\'agi://127.0.0.1/square,{{project.name}}\'" ng-repeat="project in vm.projects">{{ 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">\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>\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks">{{ 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">\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\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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\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">\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" required autofocus>\n                    <md-option ng-value="\'SIP/{{user.name}}\'" ng-repeat="user in vm.users">{{ 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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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" required autofocus>\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}\'" ng-repeat="appdata in vm.sounds">{{ 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">\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\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.playback.answer" aria-label="Answer"><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">\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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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\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">\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\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">\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">{{ 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">\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">\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\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">\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\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">\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\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">\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\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">\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"><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">\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" required autofocus multiple>\n                    <md-option ng-value="\'SIP/{{multipleUsers.name}}\'" ng-repeat="multipleUsers in vm.users">{{ 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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="name.name" ng-repeat="name in vm.variables">{{ 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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="\'{{voiceMail.mailbox}}@from-voicemail\'" ng-repeat="voiceMail in vm.voiceMails">{{ 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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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                        <span ng-if="vm.inboundroute.exten">{{vm.inboundroute.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveInboundRoute()" 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\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>\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\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">{{ 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">\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\n                                </div>\n                            </md-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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editInboundRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditInboundRoute($event, inboundroute)" md-cell class="id ">{{inboundroute.id}}</td>\n                                <td ng-click="vm.createOrEditInboundRoute($event, inboundroute)" md-cell class="exten ">{{inboundroute.exten}}</td>\n                                <td ng-click="vm.createOrEditInboundRoute($event, inboundroute)" md-cell class="description ">{{inboundroute.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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">{{ 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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" required autofocus>\n                    <md-option ng-value="\'agi://127.0.0.1/square,{{project.name}}\'" ng-repeat="project in vm.projects">{{ 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">\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>\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks">{{ 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">\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\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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\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">\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" required autofocus>\n                    <md-option ng-value="\'SIP/{{user.name}}\'" ng-repeat="user in vm.users">{{ 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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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" required autofocus>\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}\'" ng-repeat="appdata in vm.sounds">{{ 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">\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\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.playback.answer" aria-label="Answer"><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">\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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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\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">\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\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">\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">{{ 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">\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">\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\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">\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\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">\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\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">\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\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">\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"><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">\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" required autofocus multiple>\n                    <md-option ng-value="\'SIP/{{multipleUsers.name}}\'" ng-repeat="multipleUsers in vm.users">{{ 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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="name.name" ng-repeat="name in vm.variables">{{ 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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="\'{{voiceMail.mailbox}}@from-voicemail\'" ng-repeat="voiceMail in vm.voiceMails">{{ 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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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                        <span ng-if="vm.internalroute.exten">{{vm.internalroute.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveInternalRoute()" 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\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>\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\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">{{ 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">\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\n                                </div>\n                            </md-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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editInternalRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditInternalRoute($event, internalroute)" md-cell class="id ">{{internalroute.id}}</td>\n                                <td ng-click="vm.createOrEditInternalRoute($event, internalroute)" md-cell class="exten ">{{internalroute.exten}}</td>\n                                <td ng-click="vm.createOrEditInternalRoute($event, internalroute)" md-cell class="description ">{{internalroute.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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                <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\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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">{{ 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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.musiconhold.exten">{{vm.musiconhold.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveMusicOnHold()" 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\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 ng-disabled="true">\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\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="true">\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">\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">\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\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="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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditMusicOnHold($event, musiconhold)" md-cell class="id ">{{musiconhold.id}}</td>\n                                <td ng-click="vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="name ">{{musiconhold.name}}</td>\n                                <td ng-click="vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="mode ">{{ \'VOICE.\' + vm.arraymode[musiconhold.mode].option | uppercase | translate }}</td>\n                                <td ng-click="vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="sort ">{{ \'VOICE.\' + vm.arraysort[musiconhold.sort].option | uppercase | translate }}</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.editstate(musiconhold, $event)" translate="VOICE.EDIT_MUSICONHOLD">\n                                                    Edit MusicOnHold\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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">{{ 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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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>\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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" required autofocus>\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks">{{ 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-pattern="/&quot;(.*)&quot;\\s&lt;(.*?)&gt;$/">\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 ng-message="pattern">\n                        <span translate="VOICE.ERRORS.CALLER_ID_MUST_VALID_PATTERN" translate-values="{ regex: \'/&quot;(.*)&quot;\\s&lt;(.*?)&gt;$/\' }">Caller_ID must be valid pattern </span>\n                    </div>\n\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">\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\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">\n                    <md-option ng-value="\'--\'">None</md-option>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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                        <span ng-if="vm.outboundroute.exten">{{vm.outboundroute.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveOutboundRoute()" 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\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>\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\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">{{ 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>\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">\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">\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\n                                </div>\n                            </md-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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editOutboundRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditOutboundRoute($event, outboundroute)" md-cell class="id ">{{outboundroute.id}}</td>\n                                <td ng-click="vm.createOrEditOutboundRoute($event, outboundroute)" md-cell class="exten ">{{outboundroute.exten}}</td>\n                                <td ng-click="vm.createOrEditOutboundRoute($event, outboundroute)" md-cell class="description ">{{outboundroute.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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\n                        <md-menu-content width="2">\n                            <md-menu-item>\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.disposition.length" ng-repeat="disposition in vm.disposition">\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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'VOICE.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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"\n    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"><timer ng-if="call.answertime" start-time="call.answertime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></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"\n    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">\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            \x3c!-- <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.channelStatusClass[call.status.toLowerCase()]"></i>\n        </td>\n        <td md-cell>{{call.exten}}</td>\n        <td md-cell>{{call.queue}}</td>\n        <td md-cell><span ng-if="call.calleridname">{{call.calleridname}}, </span>{{call.calleridnum}}</td>\n        <td md-cell>\n          <span ng-if="call.queuecallerleaveAt">\n            {{call.connectedlinename}}, {{call.connectedlinenum}}\n            <span class="text-boxed">\n              <timer start-time="call.queuecallerleaveAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            </span>\n          </span>\n          <span ng-if="!call.queuecallerleaveAt" class="text-boxed" translate="VOICE.WAITING_FOR_AGENT">\n            Waiting for agent...\n            <span class="text-boxed">\n              <timer start-time="call.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            </span>\n          </span>\n        </td>\n        <td md-cell>\n          <span class="text-boxed">\n            <timer ng-if="call.queuecallerjoinAt" start-time="call.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            <span ng-if="call.queuecallercomplete || call.queuecallerabandon || call.queuecallerexit" translate="VOICE.CLOSING">Closing</span>\n          </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="2">\n              <md-menu-item>\n                <md-button ng-click="vm.hangup(call.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, call.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(call.uniqueid, agent.name)">{{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> --\x3e\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]"\n    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>{{\' VOICE.NAME\' | translate}}</th>\n                <th md-column>{{\' VOICE.TOTAL_OFFERED\' | translate}}</th>\n                <th md-column>{{\' VOICE.ANSWERED\' | translate}}</th>\n                <th md-column>{{\' VOICE.ABANDONED\' | translate}}</th>\n                <th md-column>{{\' VOICE.UNMANAGED\' | translate}}</th>\n                <th md-column>{{\' VOICE.AVG_HOLD_TIME\' | translate}}</th>\n                <th md-column>{{\' VOICE.AVG_DURATION\' | translate}}</th>\n                <th md-column>{{\' 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                    <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.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.total - queue.answered - queue.unmanaged) || 0}} ({{(queue.total) ? ((queue.total - queue.answered - queue.unmanaged) || 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 / 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]"\n    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">\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"\n    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"\n    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">\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"\n    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                <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\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                <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">\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                <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\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.voicemail.exten">{{vm.voicemail.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveVoicemail()" 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\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>\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\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                                <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">\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" ng-disabled="true">\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\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>\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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\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>\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\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="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">\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">\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">\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\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">\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\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">\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">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditVoicemail($event, voicemail)" md-cell class="id ">{{voicemail.id}}</td>\n                                <td ng-click="vm.createOrEditVoicemail($event, voicemail)" md-cell class="fullname ">{{voicemail.fullname}}</td>\n                                <td ng-click="vm.createOrEditVoicemail($event, voicemail)" md-cell class="email ">{{voicemail.email}}</td>\n                                <td ng-click="vm.createOrEditVoicemail($event, voicemail)" md-cell class="mailbox ">{{voicemail.mailbox}}</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.editstate(voicemail, $event)" translate="VOICE.EDIT_VOICEMAIL">\n                                                    Edit Voicemail\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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">{{ 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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 ">{{ VoiceExtensionId = vm.outboundRoutes[voicePrefix.VoiceExtensionId]; VoiceExtensionId.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voiceQueues/edit/teamadd/teamadd.html",'<md-dialog class="voiceQueue-dialog" aria-label="voiceQueue">\n    <form name="voiceQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="VOICE.TEAMADD_VOICEQUEUE">Add Team in 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    </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                        <span ng-if="vm.voiceQueue.exten">{{vm.voiceQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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">\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">\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">\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>\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\'">unknoww</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>\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\'">unknoww</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">\n                                    <md-option ng-value="musiconhold.name" ng-repeat="musiconhold in vm.musiconholds">{{ 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">\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">{{ 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">\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\n                                </div>\n                            </md-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\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>\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">\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">\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">\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">\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">\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">\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">\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>\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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\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"><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">\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">\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">\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">\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">\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">\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">\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\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">\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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="id ">{{voiceQueue.id}}</td>\n                                <td ng-click="vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="name ">{{voiceQueue.name}}</td>\n                                <td ng-click="vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="strategy ">{{ vm.arraystrategy[voiceQueue.strategy].option }}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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>\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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></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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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">\n</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">\n                <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</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</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">{{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">{{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"\n                    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"\n                    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">{{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">{{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" 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 class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <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 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            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" style="padding-right: 16px;">\n            <md-button type="submit" ng-disabled="vm.disable" ng-click="vm.originatePreview($event)" class="send-button md-accent md-raised" aria-label="CALL" translate="TOOLS.CALL" translate-attr-aria-label="TOOLS.CALL">\n                CALL\n            </md-button>\n            <md-button type="submit" ng-disabled="vm.disableGetContact" ng-click="vm.nextContact($event)" class="send-button md-accent md-raised" aria-label="NEXTCONTACT" translate="TOOLS.NEXTCONTACT" translate-attr-aria-label="TOOLS.NEXTCONTACT">\n                NEXTCONTACT\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.help","app.motiondialer","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",function(e){return e.resolve("analyticMetric@get",{fields:"createdAt,updatedAt,id,name,table,metric,description",sort:"-updatedAt",limit:10,offset:0})}]},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",function(e){return e.resolve("analyticExtractedReport@get",{fields:"createdAt,updatedAt,id,name,basename,savename,type,startDate,endDate,status,output",sort:"-updatedAt",limit:10,offset:0})}]},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})}]},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 o;return e.resolve("analyticCustomReport@get",{fields:"createdAt,updatedAt,id,name,description,table,conditions,joins",id:t.id}).then(function(e){var t=[];if((o=e).joins)try{o.joins=JSON.parse(o.joins);for(var n=0;n<o.joins.length;n+=1)t.push(i.getColumns(o.joins[n].foreignTable))}catch(e){console.log(e)}return a.all(t)}).then(function(e){for(var t=0;t<e.length;t+=1)o.joins[t].foreignTableFields=_.difference(_.keys(e[t]),["$promise","$resolved"]);return o})}]},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",function(e){return e.resolve("squareOdbc@get",{fields:"createdAt,updatedAt,id,name,dsn,description",sort:"-updatedAt",limit:10,offset:0})}]},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",function(e){return e.resolve("squareRecording@get",{fields:"createdAt,updatedAt,id,filename,projectName,uniqueid,callerid,extension,audio",sort:"-updatedAt",limit:10,offset:0})}]},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("user@getSquareProjects",{id:t.getCurrentUser().id,fields:"id,name,description,notes",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1103,bodyClass:"callysquare"}).state("app.callysquare.projects.edit",{url:"/:id?tab",views:{"content@app":{templateUrl:"app/main/apps/callysquare/views/projects/edit/view.html",controller:"ProjectController as vm"}},resolve:{project:["apiResolver","$stateParams",function(e,t){return e.resolve("squareProject@get",{id:t.id})}],users:["apiResolver",function(e){return e.resolve("user@get",{fields:"id,fullname,role",sort:"name",nolimit:!0})}],trunks:["apiResolver",function(e){return e.resolve("trunk@get",{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("user@getQueues",{id:t.getCurrentUser().id,type:"inbound",fields:"id,name",sort:"name",nolimit:!0,channel:"voice"})}],sounds:["apiResolver",function(e){return e.resolve("sound@get",{fields:"id,name",sort:"name",nolimit:!0})}],variables:["apiResolver",function(e){return e.resolve("variable@get",{fields:"id,name",sort:"name",nolimit:!0})}],databases:["apiResolver",function(e){return e.resolve("squareOdbc@get",{fields:"id,name",sort:"name",nolimit:!0})}],projects:["apiResolver",function(e){return e.resolve("squareProject@get",{fields:"id,name",sort:"name",nolimit:!0})}],contexts:["apiResolver",function(e){return e.resolve("voiceContext@get",{fields:"id,name",sort:"name",nolimit:!0})}],intervals:["apiResolver",function(e){return e.resolve("interval@get",{fields:"id,name,IntervalId",sort:"name",nolimit:!0})}],mailAccounts:["apiResolver",function(e){return e.resolve("mailAccount@get",{fields:"id,name",sort:"name",nolimit:!0})}],templates:["apiResolver",function(e){return e.resolve("template@get",{fields:"id,name",sort:"name",nolimit:!0})}],lists:["apiResolver",function(e){return e.resolve("cmList@get",{fields:"id,name",sort:"name",nolimit:!0})}],smsAccounts:["apiResolver",function(e){return e.resolve("smsAccount@get",{fields:"id,name",sort:"name",nolimit:!0})}],pauses:["apiResolver",function(e){return e.resolve("pause@get",{fields:"id,name",sort:"name",nolimit:!0})}]},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("user@getQueues",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"chat",limit:10,offset:0})}]},authenticate:!0,permissionId:501,bodyClass:"chat"}).state("app.chat.chatQueues.edit",{url:"/:id?tab",params:{chatQueue: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})}]},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,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getChatWebsites",{id:t.getCurrentUser().id,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,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:502,bodyClass:"chat"}).state("app.chat.chatWebsites.edit",{url:"/:id?tab",params:{chatWebsite: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,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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("user@getQueues",{id:t.getCurrentUser().id,channel:"chat",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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",function(e){return e.resolve("cmList@get",{fields:"createdAt,updatedAt,id,name,description,dialPrefix",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:301,bodyClass:"contactmanager"}).state("app.contactmanager.lists.edit",{url:"/:id?tab",params:{list: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})}]},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",function(e){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",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:302,bodyClass:"contactmanager"}).state("app.contactmanager.companies.edit",{url:"/:id?tab",params:{company: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})}]},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",function(e){return e.resolve("cmCustomField@get",{fields:"createdAt,updatedAt,id,alias,type,values,required",sort:"-updatedAt",ListId:"null",limit:10,offset:0})}]},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","$stateParams",function(e,t){return e.resolve("cmContact@get",_.merge({includeAll:!0,sort:"-updatedAt",limit:10,offset:0},t))}],lists:["apiResolver",function(e){return e.resolve("cmList@get",{fields:"id,name",sort:"name",nolimit:!0})}],listsMap:["lists",function(e){for(var t={},n=0;n<e.rows.length;n++)t[e.rows[n].id]=e.rows[n].name;return t}],companies:["apiResolver",function(e){return e.resolve("cmCompany@get",{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",function(e){return e.resolve("tag@get",{fields:"id,name",sort:"name",nolimit:!0})}]},authenticate:!0,permissionId:300,bodyClass:"contactmanager"}).state("app.contactmanager.contacts.edit",{url:"/:id?tab",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","$stateParams",function(e,t){return e.resolve("cmCompany@get")}],lists:["apiResolver",function(e){return e.resolve("cmList@get",{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","$stateParams",function(e,t){return e.resolve("tag@get")}]},authenticate:!0,permissionId:300,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("user@getQueues",{id:e.getCurrentUser().id,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"]));return a})}]},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("user@getQueues",{id:t.getCurrentUser().id,fields:"id,name",channel:"voice",type:"inbound",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("user@getQueues",{id:t.getCurrentUser().id,fields:"id,name",channel:"voice",type:"outbound",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("user@getChatWebsites",{id:t.getCurrentUser().id,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("user@getMailAccounts",{id:t.getCurrentUser().id,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("user@getSmsAccounts",{id:t.getCurrentUser().id,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("user@getOpenchannelAccounts",{id:t.getCurrentUser().id,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("user@getFaxAccounts",{id:t.getCurrentUser().id,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("user@getQueues",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"fax",limit:10,offset:0})}]},authenticate:!0,permissionId:901,bodyClass:"fax"}).state("app.fax.faxQueues.edit",{url:"/:id?tab",params:{faxQueue: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})}]},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,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getFaxAccounts",{id:t.getCurrentUser().id,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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:902,bodyClass:"fax"}).state("app.fax.faxAccounts.edit",{url:"/:id?tab",params:{faxAccount: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,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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",function(e){return e.resolve("trunk@get",{fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0})}],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("user@getQueues",{id:t.getCurrentUser().id,channel:"fax",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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("user@getFaxAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],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:1405,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",function(e){return e.resolve("intZendeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1301,bodyClass:"integrations"}).state("app.integrations.zendeskAccounts.edit",{url:"/:id?tab",params:{zendeskAccount: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})}]},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",function(e){return e.resolve("intSalesforceAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1302,bodyClass:"integrations"}).state("app.integrations.salesforceAccounts.edit",{url:"/:id?tab",params:{salesforceAccount: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})}]},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",function(e){return e.resolve("intFreshdeskAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1303,bodyClass:"integrations"}).state("app.integrations.freshdeskAccounts.edit",{url:"/:id?tab",params:{freshdeskAccount: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})}]},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",function(e){return e.resolve("intSugarcrmAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1305,bodyClass:"integrations"}).state("app.integrations.sugarcrmAccounts.edit",{url:"/:id?tab",params:{sugarcrmAccount: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})}]},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",function(e){return e.resolve("intDeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1306,bodyClass:"integrations"}).state("app.integrations.deskAccounts.edit",{url:"/:id?tab",params:{deskAccount: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})}]},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",function(e){return e.resolve("intZohoAccount@get",{fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",limit:10,offset:0})}]},authenticate:!0,permissionId:1307,bodyClass:"integrations"}).state("app.integrations.zohoAccounts.edit",{url:"/:id?tab",params:{zohoAccount: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})}]},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",function(e){return e.resolve("intVtigerAccount@get",{fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",limit:10,offset:0})}]},authenticate:!0,permissionId:1308,bodyClass:"integrations"}).state("app.integrations.vtigerAccounts.edit",{url:"/:id?tab",params:{vtigerAccount: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})}]},authenticate:!0,permissionId:1308,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",function(e){return e.resolve("jscriptyProject@get",{fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,formData",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1701,bodyClass:"jscripty"}).state("app.jscripty.projects.edit",{url:"/:id?tab",params:{project: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})}]},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("user@getQueues",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"mail",limit:10,offset:0})}]},authenticate:!0,permissionId:601,bodyClass:"mail"}).state("app.mail.mailQueues.edit",{url:"/:id?tab",params:{mailQueue: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})}]},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,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getMailAccounts",{id:t.getCurrentUser().id,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,permissionId:602,bodyClass:"mail"}).state("app.mail.mailAccounts.edit",{url:"/:id?tab",params:{mailAccount: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,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}]},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",function(e){return e.resolve("mailSubstatus@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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("user@getQueues",{id:t.getCurrentUser().id,channel:"mail",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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("user@getMailAccounts",{id:t.getCurrentUser().id,sort:"-updatedAt",limit:10,offset:0})}],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",function(e){return 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})}]},authenticate:!0,permissionId:1801,bodyClass:"marketplace"}).state("app.marketplace.plugins.edit",{url:"/:id?tab",params:{plugin: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})}]},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",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,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",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0})}]},authenticate:!0,permissionId:1501,bodyClass:"motiondialer"}).state("app.motiondialer.queueCampaigns.edit",{url:"/:id?tab",params:{queueCampaign: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",id:t.id})}]},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",function(e){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",type:"ivr",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1502,bodyClass:"motiondialer"}).state("app.motiondialer.ivrCampaigns.edit",{url:"/:id?tab",params:{ivrCampaign: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})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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("user@getQueues",{id:t.getCurrentUser().id,channel:"voice",type:"outbound",sort:"-updatedAt",limit:10,page:1})}],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",function(e){return e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0})}],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",function(e){return e.resolve("user@get",{fields:"id,name,role",role:"agent",nolimit:!0})}]},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("user@getQueues",{id:t.getCurrentUser().id,channel:"voice",type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1})}],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",function(e){return e.resolve("campaign@get",{sort:"-updatedAt",limit:10,offset:0})}],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("user@getQueues",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"openchannel",limit:10,offset:0})}]},authenticate:!0,permissionId:801,bodyClass:"openchannel"}).state("app.openchannel.openchannelQueues.edit",{url:"/:id?tab",params:{openchannelQueue: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})}]},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,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getOpenchannelAccounts",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:802,bodyClass:"openchannel"}).state("app.openchannel.openchannelAccounts.edit",{url:"/:id?tab",params:{openchannelAccount: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,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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("user@getQueues",{id:t.getCurrentUser().id,channel:"openchannel",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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",limit:10,offset:0})}]},authenticate:!0,permissionId:1401,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:1402,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:1403,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",limit:10,offset:0})}]},authenticate:!0,permissionId:1407,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:1405,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:1406,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})}]},authenticate:!0,permissionId:1404,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("user@getQueues",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"sms",limit:10,offset:0})}]},authenticate:!0,permissionId:701,bodyClass:"sms"}).state("app.sms.smsQueues.edit",{url:"/:id?tab",params:{smsQueue: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})}]},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,phone,type,accountSid,authId,authToken,smsMethod,username,password,senderString,deliveryReport,waitForTheAssignedAgent,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("user@getSmsAccounts",{id:t.getCurrentUser().id,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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:702,bodyClass:"sms"}).state("app.sms.smsAccounts.edit",{url:"/:id?tab",params:{smsAccount: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,phone,type,accountSid,authId,authToken,smsMethod,username,password,senderString,deliveryReport,waitForTheAssignedAgent,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}]},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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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("user@getQueues",{id:t.getCurrentUser().id,channel:"sms",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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",function(e){return e.resolve("user@get",{fields:"createdAt,updatedAt,role,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,permissions,crudPermissions,passwordResetAt",role:"admin,user",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:201,bodyClass:"staff"}).state("app.staff.users.edit",{url:"/:id?tab",params:{user: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,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,permissions,crudPermissions,passwordResetAt",id:t.id})}]},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,email,phone,mobile,userpic,password,showWebBar,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,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("user@getAgents",{id:t.getCurrentUser().id,fields:"createdAt,updatedAt,id,role,fullname,name,alias,email,phone,mobile,userpic,password,showWebBar,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,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})}]},authenticate:!0,permissionId:202,bodyClass:"staff"}).state("app.staff.agents.edit",{url:"/:id?tab",params:{agent: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,email,phone,mobile,userpic,password,showWebBar,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,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})}]},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",function(e){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,encryption,phone,mobile",role:"telephone",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:203,bodyClass:"staff"}).state("app.staff.telephones.edit",{url:"/:id?tab",params:{telephone: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,encryption,phone,mobile",id:t.id})}]},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",function(e){return e.resolve("team@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:204,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",function(e){return 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})}]},authenticate:!0,permissionId:1002,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",function(e){return 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})}]},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",function(e){return e.resolve("dashboard@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1003,bodyClass:"tools"}).state("app.tools.customDashboards.edit",{url:"/:id?tab",params:{customDashboard: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})}]},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",function(e){return e.resolve("interval@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",IntervalId:"null",limit:10,offset:0})}]},authenticate:!0,permissionId:1004,bodyClass:"tools"}).state("app.tools.intervals.edit",{url:"/:id?tab",params:{interval: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})}]},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",function(e){return e.resolve("pause@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}]},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",function(e){return e.resolve("schedule@get",{fields:"createdAt,updatedAt,id,name,type,DefaultReportId,CustomReportId,output,active,startAt,endAt,cron,subtractNumber,subtractUnit,sendMail,MailAccountId,email,cc,bcc,sendIfEmpty,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:42,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",function(e){return e.resolve("sound@get",{fields:"createdAt,updatedAt,id,save_name,converted_format,name,audio,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1006,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",function(e){return e.resolve("tag@get",{fields:"createdAt,updatedAt,id,name,description,color",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1007,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",function(e){return e.resolve("template@get",{fields:"createdAt,updatedAt,id,name,html,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1008,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",function(e){return e.resolve("trigger@get",{fields:"createdAt,updatedAt,id,name,channel,status,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1009,bodyClass:"tools"}).state("app.tools.triggers.edit",{url:"/:id?tab",params:{trigger: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})}]},authenticate:!0,permissionId:1009,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",function(e){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,otherFields",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1010,bodyClass:"tools"}).state("app.tools.trunks.edit",{url:"/:id?tab",params:{trunk: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,otherFields",id:t.id})}]},authenticate:!0,permissionId:1010,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",function(e){return e.resolve("variable@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1011,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"}},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("user@getAgents",{id:t.getCurrentUser().id,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})}],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",function(e){return e.resolve("user@get",{fields:"id,fullname,userpic,internal",role:"telephone",sort:"-updatedAt",limit:10,offset:0})}],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",function(e){return e.resolve("trunk@get",{fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0})}],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("user@getQueues",{id:t.getCurrentUser().id,channel:"voice",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],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",function(e){return e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0})}],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",function(e){return e.resolve("user@get",{fields:"id,name,role",role:"agent",nolimit:!0})}]},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("user@getQueues",{id:t.getCurrentUser().id,channel:"voice",type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1})}],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",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0}):e.resolve("user@getQueues",{id:t.getCurrentUser().id,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",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0})}]},authenticate:!0,permissionId:401,bodyClass:"voice"}).state("app.voice.voiceQueues.edit",{url:"/:id?tab",params:{voiceQueue: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",id:t.id})}]},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",function(e){return e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"inbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0})}]},authenticate:!0,permissionId:402,bodyClass:"voice"}).state("app.voice.inboundroutes.edit",{url:"/:id?tab",params:{inboundroute: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})}]},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",function(e){return 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})}]},authenticate:!0,permissionId:403,bodyClass:"voice"}).state("app.voice.outboundroutes.edit",{url:"/:id?tab",params:{outboundroute: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})}]},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",function(e){return e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"internal",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0})}]},authenticate:!0,permissionId:404,bodyClass:"voice"}).state("app.voice.internalroutes.edit",{url:"/:id?tab",params:{internalroute: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})}]},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",function(e){return e.resolve("voiceContext@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",defaultEntry:"false",limit:10,offset:0})}]},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",function(e){return 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})}]},authenticate:!0,permissionId:406,bodyClass:"voice"}).state("app.voice.voicemails.edit",{url:"/:id?tab",params:{voicemail: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})}]},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",function(e){return e.resolve("voiceMusicOnHold@get",{fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",defaultEntry:"false",limit:10,offset:0})}]},authenticate:!0,permissionId:407,bodyClass:"voice"}).state("app.voice.musiconholds.edit",{url:"/:id?tab",params:{musiconhold: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})}]},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",function(e){return 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})}]},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",function(e){return e.resolve("voiceChanSpy@get",{fields:"createdAt,updatedAt,id,name,prefix,options,auth,password,record,recordingFormat,description",sort:"-updatedAt",limit:10,offset:0})}]},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",function(e){return e.resolve("voicePrefix@get",{fields:"createdAt,updatedAt,id,name,VoiceExtensionId,callerIdAll,description",limit:10,offset:0})}]},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.hasPermission(t.permissionId)&&!a.hasRole("admin")?(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(e,a,i,o,t){var s,r=["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"];function l(){var t=i.defer();return d("agent")&&0!==s.showWebBar?o.user.login({id:s.id,device:"web"}).$promise.then(function(){console.log("AGENT LOGGED IN"),t.resolve()}).catch(function(e){console.error(e),t.reject(e)}):d("admin")||d("user")?o.user.update({id:s.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(a.remove("motion.user"),a.remove("motion.token"),s&&s.id){var e=s.id;s=null,t.localStorage.removeItem("motion.user:"+e)}}function d(e){return!!s&&s.role===e}function c(){return a.get("motion.token")}function m(e){return s=_.assign(s,_.pick(e,r)),a.put("motion.user",JSON.stringify(s)),s}return function(){if(a.get("motion.user"))s=JSON.parse(a.get("motion.user")),o.user.get({id:s.id,fields:r.join(",")}).$promise.then(function(e){if(e)return m(e)}).catch(function(e){console.log("Error retrieving user",e)})}(),{login:function(e){var t,n=i.defer();return o.auth.local(e).$promise.then(function(e){return t=e,a.put("motion.token",e.token),o.user.get({id:e.id,fields:r.join(",")}).$promise}).then(function(e){return(s=e).lastLoginAt=moment(),a.put("motion.user",JSON.stringify(e)),l()}).catch(function(e){n.reject(e.data)}).finally(function(){o.user.get({id:t.id,fields:r.join(",")}).$promise.then(function(e){s=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 i.defer(),e?(n(),i.resolve()):(t=i.defer(),d("agent")&&0!==s.showWebBar?o.user.logout({id:s.id,device:"web"}).$promise.then(function(){console.log("AGENT LOGGED OUT")}).catch(function(e){console.error(e)}).finally(function(){t.resolve()}):d("admin")||d("user")?o.user.update({id:s.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:l,isLoggedIn:function(){return!(!s||!c())},hasRole:d,hasPermission:function(e){return!!s&&_.includes(s.permissions,e)},getToken:c,getCurrentUser:function(){return s},updateCurrentUser:m,removeCookies:n}}e.$inject=["$location","$cookies","$q","api","$window"],angular.module("app.auth").factory("Auth",e)}(),function(){"use strict";function e(e,t,n,a,i){var o;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"),(o||(o=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(s,l,d){return{restrict:"E",compile:function(e,t){var o;return t.code||(o=e.html(),e.empty()),function(n,a,r){r.code&&(o=n.$eval(r.code));var i=n.$eval(r.shouldInterpolate);l.when(o).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),s(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],o=new RegExp("^"+i);a=a.map(function(e){return e.replace(o,"").replace(/\s+$/,"")});var s=hljs.highlight(r.language||r.lang,a.join("\n"),!0);s.value=s.value.replace(/=<span class="hljs-value">""<\/span>/gi,"").replace("<head>","").replace("<head/>",""),n.append(s.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","Auth","toasty",function(t,n,a,i,e,o){function s(e){return _.isNil(e)?"":e.replace(/[^\w.+#*\-]+/g,"")}function r(e){return a.get(e).success(function(){o.success({title:"Successful call",msg:"Call properly handled!"})}).error(function(e){o.error({title:"PhoneBar API Error",msg:i.instant("CONTACTMANAGER.ERRORS.PHONEBAR_API")})})}t.currentUser=e.getCurrentUser(),t.showMenu=function(){return t.target&&t.target.indexOf("@")<0&&t.target!=t.currentUser.internal&&t.target!=t.currentUser.name&&(0==t.currentUser.showWebBar&&t.currentUser.phoneBarRemoteControl||2==t.currentUser.showWebBar&&t.license.webrtc)&&!t.disabled},t.call=function(e){switch(t.currentUser.showWebBar){case 0:return r("http://127.0.0.1:"+(t.currentUser.phoneBarRemoteControlPort||"9888")+"/api/originate/"+s(e));case 2:n.$broadcast("webrtc::call",{target:s(e)})}},t.transfer=function(e){switch(t.currentUser.showWebBar){case 0:return r("http://127.0.0.1:"+(t.currentUser.phoneBarRemoteControlPort||"9888")+"/api/transfer?number="+s(e));case 2:n.$broadcast("webrtc::transfer",{target:s(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(s){s.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 o=0;o<e.length;o+=1)t.push(e[o]);e.length=0,i=t}s.options.transferCallback&&s.options.transferCallback(i,a)},s.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:{keyup: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],o=a[1];o.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,o,s=d.items[t];(s=angular.element(s)).scope()&&s.scope().$broadcast("msMasonryItem:startReLayout"),s.css({width:d.columnWidth}),d.options.respectItemOrder?(i=t%d.columnCount,o=e[i]):(o=Math.min.apply(Math,e),i=e.indexOf(o)),e[i]=o+s[0].getBoundingClientRect().height,n=Math.round(i*d.columnWidth),a=o,s.css({transform:"translate3d("+n+"px,"+a+"px,0px)"}),s.addClass("placed"),s.scope()&&s.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(s){return{restrict:"AEC",controller:"msMasonryController",compile:function(i,o){return{pre:function(e,t,n,a){a.options=angular.fromJson(o.options||"{}"),a.container=i},post:function(e,t,n,a){s(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 o=this;function s(e,t){o.selectedPalette=e,o.selectedHues=t}function r(){s(!(o.selectedColor={palette:"",hue:"",class:""}),!1),d()}function l(e,t){o.selectedColor={palette:e,hue:t,class:"md-"+e+"-"+t+"-bg",bgColorValue:i.rgba(o.palettes[e][t].value),fgColorValue:i.rgba(o.palettes[e][t].contrast)},"obj"!==o.msModelType||angular.equals(o.selectedColor,o.modelCtrl.$viewValue)||d(),s(e,o.palettes[e]),n.$selectedColor=o.selectedColor}function d(){"class"===o.msModelType?o.modelCtrl.$setViewValue(o.selectedColor.class):"obj"===o.msModelType&&o.modelCtrl.$setViewValue(o.selectedColor)}o.palettes=e,o.selectedPalette=!1,o.selectedHues=!1,n.$selectedColor={},o.activateHueSelection=s,o.selectColor=function(e,t){l(e,t),d(),a.hide()},o.removeColor=r,n.$watch("ngModel",function(){if(!o.modelCtrl.$viewValue||""===o.modelCtrl.$viewValue)return void r();var e,t;if("class"===o.msModelType){var n=o.modelCtrl.$viewValue.split("-");t=5<=n.length?(e=n[1]+"-"+n[2],n[3]):(e=n[1],n[2])}else"obj"===o.msModelType&&(e=o.modelCtrl.$viewValue.palette,t=o.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 o=a[0];o.modelCtrl=a[1],o.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,o=angular.element(p[0].body),s=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(){o.addClass("ms-nav-folded"),g.$broadcast("msNav::forceCollapse"),t.scrollTop(0),l.append(s),s.on("mouseenter touchstart",function(e){c(e),i=!0})}function c(e){angular.isDefined(e)&&e.preventDefault(),o.addClass("ms-nav-folded-open"),g.$broadcast("msNav::expandMatchingToggles"),l.find(s).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),o.removeClass("ms-nav-folded-open"),l.parent().find(r).remove(),l.append(s),s.on("mouseenter touchstart",function(e){c(e),i=!0})}function u(){o.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(){s.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 o={expanded:"expanded",expandAnimation:"expand-animation",collapseAnimation:"collapse-animation"},t=i.find("a"),s=[],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"},o.expandAnimation).then(function(){t.addClass(o.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"},o.collapseAnimation).then(function(){t.removeClass(o.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,""),s.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(s,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>'),o=u("navigation");function s(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 o.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)||s(e)}),e.toggleFolded=function(){s(!p.getFolded())},e.$on("$stateChangeStart",function(){o.close()}),e.$on("$destroy",function(){i.off("mouseenter touchstart"),a.off("mouseenter touchstart")})}}}}function n(n,e,a,i,t,o){var s=this;s.element=e,s.node=n.node,s.hasChildren=void 0,s.collapsed=void 0,s.collapsable=void 0,s.group=void 0,s.animateHeightClass="animate-height",s.toggleCollapsed=function(){s.collapsed?s.expand():s.collapse()},s.collapse=function(){var e=s.element.children("ul"),t=e[0].offsetHeight;n.$evalAsync(function(){s.collapsed=!0,s.element.addClass("collapsing"),i.animate(e,{display:"block",height:t+"px"},{height:"0px"},s.animateHeightClass).then(function(){e.css({display:"",height:""}),s.element.removeClass("collapsing")}),n.$broadcast("msNavigation::collapse")})},s.expand=function(){var e=s.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(){s.collapsed=!1,s.element.addClass("expanding"),i.animate(e,{display:"block",height:"0px"},{height:t+"px"},s.animateHeightClass).then(function(){e.css({height:""}),s.element.removeClass("expanding")}),a.$broadcast("msNavigation::collapse",s.node._path)})},s.getClass=function(){return s.node.class},s.isHidden=function(){if(angular.isDefined(s.node.hidden)&&angular.isFunction(s.node.hidden))return s.node.hidden();return!1},function(){s.hasChildren=0<s.node.children.length,s.group=!(!angular.isDefined(s.node.group)||!0!==s.node.group),!s.hasChildren||s.group?s.collapsable=!1:s.collapsable=!(!angular.isUndefined(s.node.collapsable)&&"boolean"==typeof s.node.collapsable&&!0!==s.node.collapsable);s.collapsable?s.collapsed=!(!angular.isUndefined(s.node.collapsed)&&"boolean"==typeof s.node.collapsed&&!0!==s.node.collapsed):s.collapsed=!1;if(s.node.state===t.current.name||t.includes(s.node.state)){if(angular.isDefined(s.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(s.node.stateParams,t.params))return;n.$emit("msNavigation::stateMatched"),o.setActiveItem(s.node,n)}n.$on("msNavigation::stateMatched",function(){s.collapsable&&s.collapsed&&n.$evalAsync(function(){s.collapsed=!1})}),n.$on("msNavigation::collapse",function(e,t){if(!s.collapsed&&s.collapsable)if(angular.isUndefined(t))s.collapse();else{var n=t.split("."),a=[],i=o.getActiveItem();if(i&&(a=i.node._path.split(".")),-1<n.indexOf(s.node._id))return;if(-1<a.indexOf(s.node._id))return;s.collapse()}}),n.$on("$stateChangeSuccess",function(){if(s.node.state===t.current.name){if(angular.isDefined(s.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(s.node.stateParams,t.params))return;o.setActiveItem(s.node,n),a.$broadcast("msNavigation::collapse",s.node._path)}if(t.includes(s.node.state)){if(angular.isDefined(s.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(s.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 o=this;o.element=e,o.node=n.node,o.hasChildren=void 0,o.group=void 0,o.getClass=function(){return o.node.class},function(){if(o.isActive=!1,o.hasChildren=0<o.node.children.length,o.group=!(!angular.isDefined(o.node.group)||!0!==o.node.group),o.node.state===a.current.name||a.includes(o.node.state)){if(angular.isDefined(o.node.stateParams)&&angular.isDefined(a.params)&&!angular.equals(o.node.stateParams,a.params))return;n.$emit("msNavigation::stateMatched"),i.setActiveItem(o.node,n)}n.$on("msNavigation::stateMatched",function(){o.hasChildren&&n.$evalAsync(function(){o.isActive=!0})}),n.$on("msNavigation::clearActive",function(){if(o.hasChildren){var e=[],t=i.getActiveItem();t&&(e=t.node._path.split(".")),-1<e.indexOf(o.node._id)?n.$evalAsync(function(){o.isActive=!0}):n.$evalAsync(function(){o.isActive=!1})}}),n.$on("$stateChangeSuccess",function(){if(o.node.state===a.current.name||a.includes(o.node.state)){if(angular.isDefined(o.node.stateParams)&&angular.isDefined(a.params)&&!angular.equals(o.node.stateParams,a.params))return;i.setActiveItem(o.node,n),t.$broadcast("msNavigation::clearActive")}})}()}function o(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"],o.$inject=["$mdMedia"],angular.module("app.core").provider("msNavigationService",function(){var r=angular.injector(["ng"]).get("$log"),l=[];function s(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,o=0;o<t.length;o++)if(t[o]._id===a){t=t[o].children,i=!1;break}if(i){var s={_id:a,_path:e.join("."),title:a,weight:1,children:[]};t.push(s),t=s.children}}return t}(n),o=!1,s=0;s<i.length;s++)if(i[s]._id===a){o=i[s];break}o?(angular.extend(o,t),o.uisref=m(o)):(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],o=0;o<t.length;o++)if(t[o]._id===i){if(t[o]._path===e)return t.splice(o,1),!0;t=t[o].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=s,this.deleteItem=d,this.sortByWeight=c,this.$get=function(){var n=null,t=null,a=null,i=null,e={saveItem:s,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:o,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}(o(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 o(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",o)}(),function(){"use strict";function e(i,t,o,e,n,s,a,r,l,d,c){var m=this,u=["ringingId","speakerId","microphoneId","ringingVolume","speakerVolume","microphoneVolume","ringingMute","speakerMute","microphoneMute"],p=JSON.parse(a.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(b).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(b).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();b();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 b(){p.webrtc=_.pick(m.conf,u),a.localStorage.setItem("motion2.user:"+m.conf.id,JSON.stringify(p))}function f(e){this.remotePlayer.srcObject=e.stream}function A(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&&o(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=f.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=f.bind(this),_.head(n.connection.getRemoteStreams())&&(this.remotePlayer.srcObject=_.head(n.connection.getRemoteStreams()))),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)})),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){_.remove(this.sessions,{id:e.id})}.bind(this,a)),a.on("failed",function(e,t){this.soundPlayer.pause(),this.soundPlayer.loop=null,e.notification&&e.notification.close(),_.remove(this.sessions,{id:e.id})}.bind(this,a)),this.sessions.push(a)}function E(){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(){s.show(s.simple().textContent(t).position(n).hideDelay(a)),e.terminate()}}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.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),t.bind("keyup",function(e){switch(e.keyCode){case 27:o(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",A.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,"");e=(e=e.replace(/\(/g,"")).replace(/\)/g,""),m.ua.call(e,m.sessionConf)}E()},m.hold=function(e){e.hold({useUpdate:!1})},m.refer=function(t){var e=n.prompt().title("Transfer").textContent("Type the target").placeholder("Target").ariaLabel("Target").ok("Transfer").cancel("Cancel");n.show(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){n.show({controller:"RecordDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/record/dialog.html",parent:angular.element(t.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){n.show({controller:"ReferAttendedDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/referAttended/dialog.html",parent:angular.element(t.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):E():E()},m.targetSelected=function(e){e&&(m.target=e.originalObject.target,m.call(),E())},i.$on("webrtc::settings",function(e){n.show({controller:"SettingsController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/settings/settings.html",parent:angular.element(t.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){m.sessions[n].refer(t.target,{eventHandlers:{requestSucceeded:y(m.sessions[n],"requestSucceeded","top right",3e3),requestFailed:y(m.sessions[n],"requestFailed","top right",3e3)}});break}})}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(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,o,e,n){var s=this;function a(t,e){console.log("startMonitor");var n=i.defer(),a=(e||t.filename.replace(/^.*[\\\/]/,"")).split(".")[0];return o.rpc.startMonitor({uniqueid:s.session.uniqueid,filename:a,format:"wav"}).$promise.then(function(e){t.filename=a+".wav",t.mixmonitorid=e.mixmonitorid,t.status="rec",s.session.monitor=!0,n.resolve(t)}).catch(function(e){n.reject(e)}),n.promise}s.title="Record",s.sessions=e,s.session=n,s.closeDialog=function(){t.hide()},s.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){s.session.monitors.push(e)})},s.stop=function(t){return console.log("stopMonitor"),o.rpc.stopMonitor({uniqueid:s.session.uniqueid,mixmonitorid:t.mixmonitorid}).$promise.then(function(e){t.status="pause",s.session.monitor=_.includes(s.session.monitors,{status:"rec"})}).catch(function(e){console.error(e)})},s.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 o=this;function s(e){t.hide(e)}o.title="Refer Attended",o.sessions=i,o.session=e,o.sessionTarget=null,o.closeDialog=s,o.transfer=function(){var e,t,n=_.find(i,function(e){if(e.user===o.target)return e});t=n.outgoing?(e=n,o.session):(e=o.session,n);t.refer(e.user,{replaces:e,eventHandlers:{requestSucceeded:function(e){a.show(a.simple().textContent("requestSucceeded").position("top right").hideDelay(3e3)),s(),t.terminate()},requestFailed:function(e){a.show(a.simple().textContent("requestFailed").position("top right").hideDelay(3e3)),s(),t.terminate()}}})}}e.$inject=["$mdDialog","$mdToast","sessions","session"],angular.module("app.core").controller("ReferAttendedDialogController",e)}(),function(){"use strict";function e(e,o,t){var n=this;function a(e,t,n){var a;if(o[n]){if(a=_.find(e,function(e){return e.deviceId===o[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}))&&(o[n]=a.deviceId);return o[n]||null}o.ringingId=a(t,"audiooutput","ringingId"),o.speakerId=a(t,"audiooutput","speakerId"),o.microphoneId=a(t,"audioinput","microphoneId"),o.ringingVolume=o.ringingVolume||.5,o.speakerVolume=o.speakerVolume||.5,o.microphoneVolume=o.microphoneVolume||1,o.ringingMute=o.ringingMute||!1,o.speakerMute=o.speakerMute||!1,o.microphoneMute=o.microphoneMute||!1,n.conf=angular.copy(o),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(o,s,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({},s.getConfig(),a),o(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(o,i,e){var s=this;s.collapsed=!0,s.query="",s.queryOptions={debounce:s.debounce||0};var t=!(!s.collapseOnBlur||"true"!=s.collapseOnBlur);s.resultsLoading=!1,s.results=null,s.selectedResultIndex=0,s.ignoreMouseEvents=!1,s.populateResults=function(e){if(s.collapsed)return;var t=angular.isArray(e),n=null===e;if(!t&&!n)return;s.selectedResultIndex=0,s.results=e},s.expand=function(){s.collapsed=!1,o.expand(),s.onExpand&&angular.isFunction(s.onExpand)&&s.onExpand()},s.collapse=function(){s.query="",s.populateResults(null),s.collapsed=!0,o.collapse(),s.onCollapse&&angular.isFunction(s.onCollapse)&&s.onCollapse()},s.blurCollapse=function(){if(!t)return;s.collapse()},s.absorbEvent=function(e){e.preventDefault()},s.handleKeydown=function(e){var t=e.keyCode;-1<[27,38,40].indexOf(t)&&e.preventDefault();switch(t){case 13:if(!s.results)return;s.handleResultClick(s.results[s.selectedResultIndex]);break;case 27:s.collapse();break;case 38:0<=s.selectedResultIndex-1&&(s.selectedResultIndex--,s.ensureSelectedResultIsVisible());break;case 40:if(!s.results)return;s.selectedResultIndex+1<s.results.length&&(s.selectedResultIndex++,s.ensureSelectedResultIsVisible())}},s.handleMouseenter=function(e){if(s.ignoreMouseEvents)return;s.selectedResultIndex=e},s.temporarilyIgnoreMouseEvents=function(){s.ignoreMouseEvents=!0,e.cancel(s.mouseEventIgnoreTimeout),s.mouseEventIgnoreTimeout=e(function(){s.ignoreMouseEvents=!1},250)},s.handleResultClick=function(e){s.onResultClick&&s.onResultClick({item:e});s.collapse()},s.ensureSelectedResultIsVisible=function(){var e=i.find(".ms-search-bar-results"),t=angular.element(e.find(".result")[s.selectedResultIndex]);if(e&&t){var n=t.position().top-8,a=t.position().top+t.outerHeight()+8;s.temporarilyIgnoreMouseEvents(),e.scrollTop()>n&&e.scrollTop(n),a>e.height()+e.scrollTop()&&e.scrollTop(a-e.height())}},o.$watch("MsSearchBar.query",function(e,t){if(!angular.isUndefined(e)&&!angular.equals(e,t)&&!s.collapsed){var n=o.$parent.$eval(s.onSearch,{query:e}),a=angular.isArray(n),i=n&&!!n.then;a&&s.populateResults(n),i&&(s.resultsLoading=!0,n.then(function(e){s.populateResults(e)},function(){s.populateResults([])}).finally(function(){s.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,s,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 o=0;o<d.shortcuts.length;o++)if(d.shortcuts[o]._id===e[i]._id){e[i].hasShortcut=!0;break}}}else 0<d.shortcuts.length&&(e=d.shortcuts);return d.selectedResultIndex=0,s(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)),s(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,s.cancel(d.mouseEventIgnoreTimeout),d.mouseEventIgnoreTimeout=s(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 s(e)?i.steps[e-1].scope.optionalStep:null}function a(e){return s(e)?!!i.steps[e-1].scope.hideStep:null}function o(e){return s(e)?!!n(e)||i.steps[e-1].form.$valid:null}function s(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(!s(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 s(e)?i.currentStepNumber===e:null},i.isStepDisabled=function(e){if(!s(e))return null;for(var t=!1,n=1;n<e;n++)if(!o(n)){t=!0;break}return t},i.isStepOptional=n,i.isStepHidden=a,i.filterHiddenStep=function(e){return!a(e.stepNumber)},i.isStepValid=o,i.isStepNumberValid=s,i.isFormValid=function(){return i.mainForm.$valid}}function t(s){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],o=a[1];s(function(){o.setOrientation("vertical"),o.registerMainForm(i),o.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],o=a[1];o.setOrientation("horizontal"),o.registerMainForm(i),o.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],o=a[1];e.optionalStep=angular.isDefined(n.optionalStep),o.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],o=a[1];e.optionalStep=angular.isDefined(n.optionalStep),e.stepInfo=o.registerStep(t,e,i),e.MsStepper=o,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,o=!1,s=!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(){o=!0})})}):d(n).then(function(){m(function(){o=!0})});r.on("scroll",c),c()}();var l=e.$watch(function(){return o&&s},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(){s=!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 o={scrollEl:"#content"};o=angular.extend(o,e.msTimeline,{});var s=angular.element(o.scrollEl);a.setScrollEl(s);var r=144;function l(){s.scrollTop()+s.height()+r>i.position().top&&(i.addClass("show"),c(),e.loadMore().then(function(){i.removeClass("show"),d()},function(){i.remove()}))}function d(){s.on("scroll",l)}function c(){s.off("scroll",l)}d(),e.$on("$destroy",function(){c()})}}}}).directive("msTimelineItem",e)}(),function(){"use strict";function e(a,e,t,n,i,o,s,r,l){function d(){a.timeoutId&&clearTimeout(a.timeoutId)}function c(){void 0!==s.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=s.autoStart||s.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.$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 i=this;i.filter=[],i.filtered=!1,i.fontSize=20,i.getCount=function(e){var t=0;if(e){i.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?(i.filtered=!0,i.filter=_.intersection(e.voiceQueuesSelected,e.attrs[1].value)):(i.filtered=!1,i.filter=e.voiceQueuesSelected);for(var n=0;n<e.voiceQueues.rows.length;n+=1)if(_.includes(i.filter,e.voiceQueues.rows[n].id))if("abandoned"===e.attrs[0].value){var a=parseInt(e.voiceQueues.rows[n].total)-parseInt(e.voiceQueues.rows[n].answered)-parseInt(e.voiceQueues.rows[n].unmanaged);t+=a&&0<=a?a:0}else 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(r,e){var l=this;l.filter=[],l.filtered=!1,l.properties=[],l.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"}}]}}},l.getMultiBarChart=function(e){e&&(e.attrs&&function(e){l.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?(l.filtered=!0,l.filter=_.intersection(e.voiceQueuesSelected,e.attrs[3].value)):(l.filtered=!1,l.filter=e.voiceQueuesSelected);if(l.multiBarChart.series.length>l.properties.length){var t=l.multiBarChart.series.length-l.properties.length;l.multiBarChart.series.splice(0,t),l.multiBarChart.data.splice(0,t)}for(var n=0;n<l.properties.length;n+=1){if(l.multiBarChart.series[n]=r.instant("TOOLS."+l.properties[n].toUpperCase()),_.isNil(l.multiBarChart.data[n])&&(l.multiBarChart.data[n]=[]),l.multiBarChart.labels.length>l.filter.length){var a=l.multiBarChart.labels.length-l.filter.length;l.multiBarChart.labels.splice(0,a),l.multiBarChart.data[n].splice(0,a)}for(var i=0,o=0;i<e.voiceQueues.rows.length;i+=1)if(_.includes(l.filter,e.voiceQueues.rows[i].id)){if(l.multiBarChart.labels[o]=e.voiceQueues.rows[i].name,"abandoned"===l.properties[n].toLowerCase()){var s=parseInt(e.voiceQueues.rows[i].total)-parseInt(e.voiceQueues.rows[i].answered)-parseInt(e.voiceQueues.rows[i].unmanaged);l.multiBarChart.data[n][o]=s&&0<=s?s:0}else l.multiBarChart.data[n][o]=e.voiceQueues.rows[i][l.properties[n]]?parseInt(e.voiceQueues.rows[i][l.properties[n]]):0;o+=1}}}(e),e.foreground&&function(e){l.multiBarChart.options.legend.fontColor=e.foreground;for(var t=0;t<l.multiBarChart.options.scales.xAxes.length;t+=1)l.multiBarChart.options.scales.xAxes[t].ticks.fontColor=e.foreground;for(var n=0;n<l.multiBarChart.options.scales.yAxes.length;n+=1)l.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 r=this;r.filter=[],r.filtered=!1,r.properties=[],r.pieChart={labels:["ANSWERED"],data:[30],options:{responsive:!0,legend:{display:!0}}},r.getPieChart=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.pieChart.labels.length>r.properties.length){var t=r.pieChart.labels.length-r.properties.length;r.pieChart.labels.splice(0,t),r.pieChart.data.splice(0,t)}for(var n=0,a=0;n<r.properties.length;n+=1){r.pieChart.labels[n]=s.instant("TOOLS."+r.properties[n].toUpperCase());for(var i=0;i<e.voiceQueues.rows.length;i+=1)if(_.includes(r.filter,e.voiceQueues.rows[i].id))if("abandoned"===r.properties[n].toLowerCase()){var o=parseInt(e.voiceQueues.rows[i].total)-parseInt(e.voiceQueues.rows[i].answered)-parseInt(e.voiceQueues.rows[i].unmanaged);a+=o&&0<=o?o:0}else a+=e.voiceQueues.rows[i][r.properties[n]]?parseInt(e.voiceQueues.rows[i][r.properties[n]]):0;r.pieChart.data[n]=a,a=0}}(e),e.foreground&&(t=e,r.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 o=this;function t(e){o.results=e||{count:0,rows:[]}}function s(){o.query.offset=(o.query.page-1)*o.query.limit,o.promise=i.analyticCustomReport.run(o.query,t).$promise}o.countDown=0,o.refresh=0,o.title="",o.columns=[],o.results={rows:[],count:0},o.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"},o.onInit=function e(t){t&&t.attrs&&(t.attrs[0]&&t.attrs[0].value&&(o.query.id=t.attrs[0].value,i.analyticFieldReport.get({fields:"field,alias",nolimit:!0,CustomReportId:t.attrs[0].value}).$promise.then(function(e){return e&&e.rows&&(o.columns=e.rows),i.analyticCustomReport.get({id:t.attrs[0].value,fields:"id,name"}).$promise}).then(function(e){e&&e.name&&(o.title=e.name),s()}).catch(function(e){console.log(e)})),t.attrs[1]&&t.attrs[1].value&&(o.refresh=parseInt(t.attrs[1].value),!_.isNaN(o.refresh)&&0<o.refresh?(o.countDown=parseInt(t.attrs[1].value),o.interval=a(function(){o.countDown-=1},1e3,0),o.timeout=n(function(){o.interval&&a.cancel(o.interval),e(t)},1e3*o.refresh)):(o.interval&&a.cancel(o.interval),o.timeout&&n.cancel(o.timeout))))},o.getResults=s,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.$on("$destroy",function(){o.interval&&a.cancel(o.interval),o.timeout&&n.cancel(o.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],o=!1,s=0;s<t.length;s++){var r=t[s];if(i.id===r){o=!0;break}}o&&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 o=e[i],s=!1,r=0;r<n.length;r++){var l=n[r];if(-1<o[t].indexOf(l)){s=!0;break}}s&&a.push(o)}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,o,s,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",s,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:o||"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],o=t||{};if(!a||!i)return d.error("apiResolver.resolve requires correct action parameter (ResourceName@methodName)"),!1;var s=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](o,function(e){s.resolve(e)},function(e){s.reject(e)}):(d.error('Resource "'+a+'" is not defined in the api service!'),s.reject('Resource "'+a+'" is not defined in the api service!'));return s.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 o(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=o,this.$get=["$log","$q","$resource","$rootScope",function(m,u,p,g){var e={setBaseUrl:t,getBaseUrl:i,register:o,resolve:function(e,t){g.$broadcast("msApi::resolveStart");var n=e.split("@"),a=n[0],i=n[1],o=t||{};if(!a||!i)return m.error("msApi.resolve requires correct action parameter (resourceName@methodName)"),!1;var s=u.defer(),r=v[a];if(r){var l=p(r.url,r.paramDefaults,r.actions,r.options);l[i](o,function(e){s.resolve(e),g.$broadcast("msApi::resolveSuccess")},function(e){s.reject(e),g.$broadcast("msApi::resolveError")})}else m.error('Resource "'+a+'" is not defined in the api service!'),s.reject('Resource "'+a+'" is not defined in the api service!');return s.promise},request:function(e,t,n,a){g.$broadcast("msApi::requestStart");var i=e.split("@"),o=i[0],s=i[1],r=t||{};if(!o||!s)return m.error("msApi.resolve requires correct action parameter (resourceName@methodName)"),!1;var l=u.defer(),d=v[o];if(d){var c=p(d.url,d.paramDefaults,d.actions,d.options);c[s](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 "'+o+'" is not defined in the api service!'),l.reject('Resource "'+o+'" 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 o=n(e)||"unknown-browser",s=a(l.navigator.userAgent)||a(l.navigator.appVersion)||"unknown-version",r=n(t)||"unknown-os";return o=o.toLowerCase(),s=o+"-"+s,r=r.toLowerCase(),d={browser:o,version:s,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,o){var s={};return{generate:function(){var e=angular.copy(o.getRegisteredThemes()),a=angular.copy(o.getRegisteredPalettes());angular.forEach(e,function(n){s[n.name]={},angular.forEach(n.colors,function(e,t){s[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})}),o.setThemesList(t);var n=i.get("motion.selectedTheme");n?o.setActiveTheme(n):o.setActiveTheme("default")}(s);var r={};angular.forEach(s,function(e,t){var n,a,i,o,s;(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]}),o=angular.element("head"),(s=angular.element('<style type="text/css"></style>')).html(i),o.append(s)})},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,o,s,r){this.search=function(t){for(var e=[],n=r.getFlatNavigation(),a=s.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 o(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 o=this;o.form={},o.forgotPassword=function(){return i.auth.forgot(o.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})})},o.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"}}),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"}}),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"}}),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"}}),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"}}),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"},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"}}),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"}}),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"}}),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.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"}}),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.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}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){this.themes=e.themes;var a=n.get("motion.language");a&&t.use(a)}e.$inject=["motionTheming","$translate","$cookies"],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={},o=0;for(a in e)if(n<=o&&(i[a]=e[a]),++o===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",o={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:o[i].main,controller:"MainController as vm"},"toolbar@app":{templateUrl:o[i].toolbar,controller:"ToolbarController as vm"},"navigation@app":{templateUrl:o[i].navigation,controller:"NavigationController as vm"},"quickPanel@app":{templateUrl:"app/quick-panel/quick-panel.html",controller:"QuickPanelController as vm"},"header@app":{templateUrl:o[i].header,controller:"HeaderController as vm"},"footer@app":{templateUrl:o[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 o(){i=io({query:"id="+e.getCurrentUser().id,transports:["websocket","polling"]})}return{connect:o,on:function(e,t){t=t||angular.noop,i||o(),i.on(e,function(){var e=arguments;a.$apply(function(){t.apply(i,e)})})},onWithoutApply:function(e,t){t=t||angular.noop,i||o(),i.on(e,function(){t.apply(i,arguments)})},emit:function(e,t,n){n=n||angular.noop,i||o(),i.emit(e,t,function(){var e=arguments;a.$apply(function(){n.apply(i,e)})})},removeAllListeners:function(e){i||o(),i.removeAllListeners(e)},removeListener:function(e,t){i||o(),i.removeListener(e,t)},disconnect:function(){i||o(),i.disconnect()}}}e.$inject=["$rootScope","Auth"],angular.module("motion").factory("socket",e)}(),function(){"use strict";function e(t,n,e,a,i,o){var s=this;s.progresslogin=!1,s.login=function(){return s.progresslogin=!0,s.message="",o.login(s.form).then(function(){return t.go("app.dashboards.general")}).catch(function(e){s.message=e.message}).finally(function(){s.progresslogin=!1})},s.loginOauth=function(e){s.message="",n.location.href="/api/auth/"+e},s.onInit=function(){{if(t.params.token&&t.params.userId)return o.removeCookies(),s.progresslogin=!0,e.put("motion.token",t.params.token),i.user.get({id:t.params.userId}).$promise.then(function(e){e&&(o.updateCurrentUser(e),t.go("app.dashboards.general"))}).finally(function(){s.progresslogin=!1});o.isLoggedIn()&&t.go("app.dashboards.general")}},s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="ANALYTICS.EDIT_EXTRACTEDREPORT",u.extractedReport=angular.copy(r),u.extractedReports=s,u.newExtractedReport=!1,u.extractedReport||(u.extractedReport={},u.title="ANALYTICS.NEW_EXTRACTEDREPORT",u.newExtractedReport=!0),u.addNewExtractedReport=function(){u.errors=[],l.analyticExtractedReport.save(u.extractedReport).$promise.then(function(e){u.extractedReports.unshift(e.toJSON()),o.success({title:"ExtractedReport properly created",msg:u.extractedReport.name?u.extractedReport.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveExtractedReport=function(){u.errors=[],l.analyticExtractedReport.update({id:u.extractedReport.id},u.extractedReport).$promise.then(function(e){var t=_.find(u.extractedReports,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ExtractedReport properly saved!",msg:u.extractedReport.name?u.extractedReport.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteExtractedReport=function(e){u.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(){l.analyticExtractedReport.delete({id:u.extractedReport.id}).$promise.then(function(){_.remove(u.extractedReports,{id:u.extractedReport.id}),o.success({title:"ExtractedReport properly deleted!",msg:(u.extractedReport.name||"extractedReport")+" has been deleted!"}),p(u.extractedReport)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","extractedReports","extractedReport","api","Auth","license","setting"],angular.module("app.analytics").controller("CreateOrEditExtractedReportDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.extractedReports=r||{count:0,rows:[]},v.table="extractedReports",v.listOrder="",v.listOrderAsc=null,v.selectedExtractedReports=[],v.query={fields:"createdAt,updatedAt,id,name,basename,savename,type,startDate,endDate,status,output",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditExtractedReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/extractedReports/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{extractedReport:e,extractedReports:v.extractedReports.rows,license:v.license,setting:null}})},v.downloadfile2=function(o,e){return l.analyticExtractedReport.download({id:o.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=o.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++)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.analyticExtractedReport.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the extractedReport?").htmlContent("<b>"+(e.name||"extractedReport")+"</b> will be deleted.").ariaLabel("delete extractedReport").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getExtractedReports=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.analyticExtractedReport.get(v.query,f).$promise},v.createOrEditExtractedReport=function(e,t){i.show({controller:"CreateOrEditExtractedReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/extractedReports/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{extractedReport:t,extractedReports:v.extractedReports.rows,license:v.license,setting:v.setting}})},v.deleteExtractedReport=A,v.exportSelectedExtractedReports=function(){var e=angular.copy(v.selectedExtractedReports);return v.selectedExtractedReports=[],e},v.deleteSelectedExtractedReports=function(e){var t=i.confirm().title("Are you sure want to delete the selected extractedReports?").htmlContent("<b>"+v.selectedExtractedReports.length+" selected</b> will be deleted.").ariaLabel("delete ExtractedReports").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedExtractedReports.forEach(function(e){A(e)}),v.selectedExtractedReports=[]})},v.deselectExtractedReports=function(){v.selectedExtractedReports=[]},v.selectAllExtractedReports=function(){v.selectedExtractedReports=v.extractedReports.rows};var h=!0,b=1;function f(e){v.extractedReports=e||{count:0,rows:[]}}function A(e){l.analyticExtractedReport.delete({id:e.id}).$promise.then(function(){_.remove(v.extractedReports.rows,{id:e.id}),v.extractedReports.count-=1,v.extractedReports.rows.length||v.getExtractedReports(),c.success({title:"ExtractedReport deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEanalyticExtractedReport"}];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:"SYSTEM:DELETEanalyticExtractedReport",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getExtractedReports())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","extractedReports","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.analytics").controller("ExtractedReportsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="ANALYTICS.EDIT_METRIC",u.metric=angular.copy(r),u.metrics=s,u.newMetric=!1,u.metric||(u.metric={table:"report_agent"},u.title="ANALYTICS.NEW_METRIC",u.newMetric=!0),u.addNewMetric=function(){u.errors=[],l.analyticMetric.save(u.metric).$promise.then(function(e){u.metrics.unshift(e.toJSON()),o.success({title:"Metric properly created",msg:u.metric.name?u.metric.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMetric=function(){u.errors=[],l.analyticMetric.update({id:u.metric.id},u.metric).$promise.then(function(e){var t=_.find(u.metrics,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Metric properly saved!",msg:u.metric.name?u.metric.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMetric=function(e){u.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(){l.analyticMetric.delete({id:u.metric.id}).$promise.then(function(){_.remove(u.metrics,{id:u.metric.id}),o.success({title:"Metric properly deleted!",msg:(u.metric.name||"metric")+" has been deleted!"}),p(u.metric)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","metrics","metric","api","Auth","license","setting"],angular.module("app.analytics").controller("CreateOrEditMetricDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.metrics=r||{count:0,rows:[]},v.table="metrics",v.listOrder="",v.listOrderAsc=null,v.selectedMetrics=[],v.query={fields:"createdAt,updatedAt,id,name,table,metric,description",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v.editdialog=function(e,t){i.show({controller:"CreateOrEditMetricDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/metrics/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{metric:e,metrics:v.metrics.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the metric?").htmlContent("<b>"+(e.name||"metric")+"</b> will be deleted.").ariaLabel("delete metric").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getMetrics=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.analyticMetric.get(v.query,f).$promise},v.createOrEditMetric=function(e,t){i.show({controller:"CreateOrEditMetricDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/metrics/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{metric:t,metrics:v.metrics.rows,license:v.license,setting:v.setting}})},v.deleteMetric=A,v.exportSelectedMetrics=function(){var e=angular.copy(v.selectedMetrics);return v.selectedMetrics=[],e},v.deleteSelectedMetrics=function(e){var t=i.confirm().title("Are you sure want to delete the selected metrics?").htmlContent("<b>"+v.selectedMetrics.length+" selected</b> will be deleted.").ariaLabel("delete Metrics").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedMetrics.forEach(function(e){A(e)}),v.selectedMetrics=[]})},v.deselectMetrics=function(){v.selectedMetrics=[]},v.selectAllMetrics=function(){v.selectedMetrics=v.metrics.rows};var h=!0,b=1;function f(e){v.metrics=e||{count:0,rows:[]}}function A(e){l.analyticMetric.delete({id:e.id}).$promise.then(function(){_.remove(v.metrics.rows,{id:e.id}),v.metrics.count-=1,v.metrics.rows.length||v.getMetrics(),c.success({title:"Metric deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEanalyticMetric"}];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:"SYSTEM:DELETEanalyticMetric",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getMetrics())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","metrics","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.analytics").controller("MetricsController",e)}(),function(){"use strict";function e(e,t,a,n,i,o,s){var r=this;function l(){t.hide()}r.errors=[],r.report=angular.copy(n),r.report.name+="-copy",r.treeCustomData=s,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"===o?"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,o,s,r,l){var d=this;function c(){t.hide()}d.errors=[],d.joinTables=[],d.title="ANALYTICS.EDIT_REPORT",d.report=angular.copy(i),d.reports=a,d.newReport=!1,d.tables=l.getMap(),d.joinTypes=[{key:"join",value:"Join"},{key:"left_join",value:"Left Join"},{key:"right_join",value:"Right Join"},{key:"outer_join",value:"Outer Join"},{key:"cross_join",value:"Cross Join"}],d.report||(d.report={name:"",table:"report_agent",description:"",parent:r.id},d.title="ANALYTICS.NEW_REPORT",d.newReport=!0),d.addNewReport=function(){d.errors=[],d.report.joins=_.map(d.joinTables||[],function(e){return{parentKey:e.parentKey,foreignTable:e.name,foreignKey:e.foreignKey,type:e.type.toLowerCase()}}),d.report.joins=JSON.stringify(d.report.joins),o[s].save(d.report).$promise.then(function(e){d.reports.unshift(e),n.success({title:"Report properly created",msg:d.report.name?d.report.name+" has been created!":""}),c()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.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()})})},d.saveReport=function(){d.errors=[],o[s].update({id:d.report.id},d.report).$promise.then(function(e){var t=_.find(d.reports,{id:e.id});t&&_.merge(t,e),n.success({title:"Report properly saved!",msg:d.report.name?d.report.name+" has been saved!":""}),c()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.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()})})},d.deleteReport=function(){d.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(){o[s].delete({id:d.report.id}).$promise.then(function(){_.remove(d.reports,{id:d.report.id}),n.success({title:"Report properly deleted!",msg:d.report.name?d.report.name+" has been deleted!":""}),c()}).catch(function(e){d.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReport.delete"}]})},function(){})},d.closeDialog=c,d.selectedTableChange=function(e){e&&(delete d.selectedItem,d.joinTables.push(e))},d.removeJoin=function(e){d.joinTables.splice(e,1)},d.getFields=function(t,n,e){var a=_.find(d.tables,{name:e});a&&a.api&&o[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"],angular.module("app.analytics").controller("CreateOrEditReportDialogController",e)}(),function(){"use strict";function e(i,a,o,e){var s=this;s.report={},s.conditions=e.getConditions,s.init=function(e){s.report=e,s.report.condition=angular.fromJson(e.conditions)||{group:{operator:"AND",rules:[]}};for(var t=0;t<s.report.condition.group.rules.length;t++)if(s.report.condition.group.rules[t].field){var n=s.report.condition.group.rules[t].field.split(".");1===n.length&&(s.report.condition.group.rules[t].field=s.report.table+"."+s.report.condition.group.rules[t].field)}a.getColumns(s.report.table).then(function(e){s.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()})})},s.addCondition=function(e){e.unshift({condition:"=",field:"",value:""})},s.addGroup=function(e){e.push({group:{operator:"AND",rules:[]}})},s.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")})},s.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",mail_accounts:"mailAccount",mail_queues:"mailQueue",mail_interactions:"mailInteraction",mail_messages:"mailMessage",report_mail_queue:"mailQueueReport",openchannel_accounts:"openchannelAccount",openchannel_queues:"openchannelQueue",openchannel_interactions:"openchannelInteraction",openchannel_messages:"openchannelMessage",report_openchannel_queue:"openchannelQueueReport",sms_accounts:"smsAccount",sms_queues:"smsQueue",sms_interactions:"smsInteraction",sms_messages:"smsMessage",report_sms_queue:"smsQueueReport",fax_accounts:"faxAccount",fax_queues:"faxQueue",fax_interactions:"faxInteraction",fax_messages:"faxMessage",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"};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,o,s,r,l,d,c){var m=this;(m.errors=[],m.title="Edit Report Field",m.report=i,m.reportField=angular.copy(s),m.reportFields=o,m.metrics=r,m.columns=l,m.sqlUtil=d,m.newReportField=!1,m.reportField)?(m.reportField.type=m.reportField.custom?"custom":m.reportField.MetricId?"metric":"column",m.reportField.field&&!m.reportField.custom&&_.isNil(m.reportField.MetricId)&&1===m.reportField.field.split(".").length&&(m.reportField.field=m.report.table+"."+m.reportField.field)):(m.reportField={type:"column",function:null,format:null,groupBy:!1,orderBy:null},m.title="New Report Field",m.newReportField=!0);function u(){n.hide()}m.addNewReportField=function(){m.errors=[],m.reportField.custom="custom"===m.reportField.type,m.reportField.MetricId="metric"===m.reportField.type?m.reportField.MetricId:null,m.reportField.CustomReportId=m.report.id,c.analyticFieldReport.save(m.reportField).$promise.then(function(e){m.reportFields.push(e),a.success({title:"Report field properly created",msg:m.reportField.field?m.reportField.field+" has been created!":m.reportField.type+" has been created!"}),u()}).catch(function(e){m.errors=e.data.errors||[{message:e.toString(),type:"api.analyticFieldReport.save"}]})},m.saveReportField=function(){m.errors=[],m.reportField.custom="custom"===m.reportField.type,m.reportField.MetricId="metric"===m.reportField.type?m.reportField.MetricId:null,c.analyticFieldReport.update({id:m.reportField.id},m.reportField).$promise.then(function(e){var t=_.find(m.reportFields,{id:e.id});t&&_.merge(t,e),a.success({title:"Report Field properly saved!",msg:m.reportField.field?m.reportField.field+" has been saved!":""}),u()}).catch(function(e){m.errors=e.data.errors||[{message:e.toString(),type:"api.analyticFieldReport.update"}]})},m.deleteReportField=function(e){m.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:m.reportField.id}).$promise.then(function(){_.remove(m.reportFields,{id:m.reportField.id}),a.success({title:"Report Field properly deleted!",msg:m.reportField.field?m.reportField.field+" has been deleted!":""}),u()}).catch(function(e){m.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReportField.delete"}]})},function(){})},m.closeDialog=u}e.$inject=["$scope","$location","$mdDialog","toasty","report","reportFields","reportField","metrics","columns","sqlUtil","api"],angular.module("app.analytics").controller("CreateOrEditReportFieldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,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){s.analyticFieldReport.addFields({id:c.report.id},e.models).$promise.then(function(e){c.reportFields.rows=e}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ADDFIELDS"})})}},c.init=function(e){c.report=e,c.query.CustomReportId=c.report.id,r.getColumns(c.report.table).then(function(e){return c.columns=_.difference(_.keys(e),["$promise","$resolved"]),s.analyticMetric.get({fields:"id,name,metric,table",nolimit:!0}).$promise}).then(function(e){c.metrics=e.rows}).catch(function(e){o.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=s.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}})},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){s.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(),o.success({title:"Field deleted!",msg:e.field?e.field+" has been deleted!":""})}).catch(function(e){o.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){var i=this;function o(e){return _.isArray(e)}i.report=a||{},i.selectedTab=e.params.tab||0,i.gotoReports=function(){e.go("app.analytics.reports")},i.saveReport=function(){i.report.conditions=angular.toJson(i.report.condition),n.analyticCustomReport.update({id:i.report.id},_.omit(i.report,"joins")).$promise.then(function(){t.success({title:"Report updated!",msg:i.report.name?i.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()})})},i.previewReport=function(){i.columns=[],i.rows=[],i.error=!1,n.analyticFieldReport.get({fields:"field,alias",nolimit:!0,CustomReportId:i.report.id}).$promise.then(function(e){return i.columns=e?e.rows:[],n.analyticCustomReport.preview({id:i.report.id}).$promise}).then(function(e){i.rows=e}).catch(function(e){console.log(e),i.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(i.error)})},i.queryReport=function(){return i.queryResult="Loading...",n.analyticCustomReport.query({id:i.report.id}).$promise.then(function(e){i.queryResult=e.sql}).catch(function(e){i.queryResult="",console.log(e),i.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(i.error)})},i.mapArray=function(e,t){if(o(e))return _.map(e,t).join(",");return""},i.isArray=o,i.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"],angular.module("app.analytics").controller("ReportController",e)}(),function(){"use strict";function e(e,t,n,a,i,o){var s=this;s.errors=[],s.report=angular.copy(a),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},s.closeDialog=function(){t.hide()},function(){s.columns=[],s.rows=[],s.error=!1;var e={fields:"field,alias",nolimit:!0};e["analyticCustomReport"===o?"CustomReportId":"DefaultReportId"]=s.report.id,s.promise=i.analyticFieldReport.get(e).$promise.then(function(e){return s.columns=e?e.rows:[],i[o].preview({id:s.report.id}).$promise}).then(function(e){s.rows=e}).catch(function(e){console.log(e),s.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(s.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,o,s,t,r,l,d,c){var m=this;m.currentUser=c.getCurrentUser(),m.reports={count:0,rows:[]},m.selectedReports=[],m.query={fields:"createdAt,updatedAt,id,name,description,table,parent,conditions,joins",limit:10,page:1,sort:"-updatedAt"},m.apiName=null,m.currentPath="",m.customTree=!0,m.editstate=function(e,t){o.go("app.analytics.reports.edit",{id:e.id})},m.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:m.apiName,treeCustomData:m.treeCustomInstance.jstree(!0).get_json("#")}}).finally(function(){})},m.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:m.apiName}})},m.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:m.apiName,currentPath:m.currentPath}})},m.downloadfile=function(a,e){var i;r.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"===m.apiName?"CustomReportId":"DefaultReportId"]=a.id,r.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=s.document.createElement("a");n.href="data:text/json;charset=utf-8,"+s.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(),d.success({title:"Report downloaded!",msg:a.name?a.name+" has been downloaded!":""})}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DOWNLOADJSON",msg:e.data?JSON.stringify(e.data):e.toString()})})},m.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(){h(e)},function(){console.log("CANCEL")})},m.success=g,m.getReports=v,m.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:m.reports.rows,apiName:m.apiName,currentNode:m.currentNode,setting:null}})},m.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),r.analyticCustomReport.save({name:n.name,description:n.description,table:n.table,conditions:n.conditions,joins:n.joins,parent:m.currentNode.id}).$promise.then(function(t){m.reports.rows.unshift(t),d.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 r.analyticFieldReport.bulkCreate(e).$promise}).then(function(e){d.success({title:"Fields saved!",msg:"Fields has been saved!"})}).catch(function(e){d.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),d.error({title:"Decode File Error",msg:e.toString()})}},a.readAsDataURL(e.file)}else d.error({title:"Format Error",msg:"Please use only json files"})},m.deleteReport=h,m.exportSelectedReports=function(){var e=angular.copy(m.selectedReports);return m.selectedReports=[],e},m.deleteSelectedReports=function(e){var t=i.confirm().title("Are you sure want to delete the selected reports?").htmlContent("<b>"+m.selectedReports.length+" selected</b> will be deleted.").ariaLabel("delete Reports").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){m.selectedReports.forEach(function(e){h(e)}),m.selectedReports=[]})},m.deselectReports=function(){m.selectedReports=[]},m.selectAllReports=function(){m.selectedReports=m.reports.rows},m.treeDefaultData=l.rows[0]?angular.fromJson(l.rows[0].tree):[],m.treeCustomData=l.rows[1]?angular.fromJson(l.rows[1].tree):[],m.treeDefaultConfig=E(!1),m.treeCustomConfig=E(!0),m.treeDefaultEvents=y(!1),m.treeCustomEvents=y(!0);var u=!0,p=1;function g(e){m.reports=e||{count:0,rows:[]}}function v(){m.query.offset=(m.query.page-1)*m.query.limit,m.apiName&&(m.promise=r[m.apiName].get(m.query,g).$promise)}function h(e){m.apiName&&r[m.apiName].delete({id:e.id}).$promise.then(function(){_.remove(m.reports.rows,{id:e.id}),m.reports.count-=1,m.reports.rows.length||m.getReports(),d.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){m.errors=e.data.errors||[{message:e.toString(),type:"api.analyticreport.delete"}];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:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticreport.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}function b(e,t){m.treeDefaultInstance.jstree(!0).deselect_all(),m.treeDefaultInstance.jstree(!0).close_all(),m.currentNode=t.node,m.currentNode.custom=!0,m.currentPath=m.treeCustomInstance.jstree(!0).get_path(m.currentNode).join("/ "),m.apiName="analyticCustomReport",m.query.parent=t.node.id,v()}function f(e,t){m.treeCustomInstance.jstree(!0).deselect_all(),m.treeCustomInstance.jstree(!0).close_all(),m.currentNode=t.node,m.currentNode.custom=!1,m.currentPath=m.treeDefaultInstance.jstree(!0).get_path(m.currentNode).join("/ "),m.apiName="analyticDefaultReport",m.query.parent=t.node.id,v()}function A(e,t){var n=angular.toJson(m.treeCustomInstance.jstree(!0).get_json("#"));r.analyticTreeReport.update({id:2,tree:n}).$promise.then(function(){l.rows[1]&&(l.rows[1].tree=n),d.success({title:"Node Updated",msg:t.node.text?t.node.text+" has been updated!":"Node has been updated!"})}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEanalyticTreeReport",msg:e.data?JSON.stringify(e.data):e.toString()})})}function E(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){return{create:{label:t.instant("ANALYTICS.CREATE"),action:function(){n=m.treeCustomInstance.jstree(!0).create_node(n),m.treeCustomInstance.jstree(!0).edit(n)}},rename:{_disabled:"#"===n.parent,label:t.instant("ANALYTICS.RENAME"),action:function(){m.treeCustomInstance.jstree(!0).edit(n)}},remove:{_disabled:"#"===n.parent||"admin"!==m.currentUser.role&&0!==m.currentUser.crudPermissions,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=m.treeCustomInstance.jstree(!0).get_parent(n);t=m.treeCustomInstance.jstree(!0).get_node(t),m.treeCustomInstance.jstree(!0).delete_node(n),e=[n.id].concat(n.children_d||[]),r.analyticCustomReport.get({parent:e.join(","),fields:"id,name"}).$promise.then(function(e){e&&e.rows&&e.rows.forEach(function(e){h(e)})}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEreportsByParents",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.treeCustomInstance.jstree(!0).select_node(t)})}}}}}}}function y(e){return e?{create_node:A,rename_node:A,move_node:A,delete_node:A,select_node:b}:{select_node:f}}e.$watch("vm.query.filter",function(e,t){u?n(function(){u=!1}):(t||(p=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=p),m.getReports())}),e.$watch("vm.search",function(e,t){m.treeDefaultInstance&&m.treeDefaultInstance.jstree(!0).search(e),m.treeCustomInstance&&m.treeCustomInstance.jstree(!0).search(e)})}e.$inject=["$scope","$timeout","$document","$mdDialog","$state","$window","$translate","api","treeReports","toasty","Auth"],angular.module("app.analytics").controller("ReportsController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,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[o].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(s.body),targetEvent:t,skipHide:!0,locals:{apiName:o,exportDate:l.exportDate,results:e},resolve:{columns:["apiResolver",function(e){var t={fields:"field,alias",nolimit:!0};return t["analyticCustomReport"===o?"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,o,s){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(){s.offset=(r.query.page-1)*r.query.limit,s.limit=r.query.limit,r.promise=n[o].run(s,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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CALLYSQUARE.EDIT_ODBC",u.odbc=angular.copy(r),u.odbcs=s,u.newOdbc=!1,u.odbc||(u.odbc={},u.title="CALLYSQUARE.NEW_ODBC",u.newOdbc=!0),u.addNewOdbc=function(){u.errors=[],l.squareOdbc.save(u.odbc).$promise.then(function(e){u.odbcs.unshift(e.toJSON()),o.success({title:"Odbc properly created",msg:u.odbc.name?u.odbc.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveOdbc=function(){u.errors=[],l.squareOdbc.update({id:u.odbc.id},u.odbc).$promise.then(function(e){var t=_.find(u.odbcs,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Odbc properly saved!",msg:u.odbc.name?u.odbc.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteOdbc=function(e){u.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(){l.squareOdbc.delete({id:u.odbc.id}).$promise.then(function(){_.remove(u.odbcs,{id:u.odbc.id}),o.success({title:"Odbc properly deleted!",msg:(u.odbc.name||"odbc")+" has been deleted!"}),p(u.odbc)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","odbcs","odbc","api","Auth","license","setting"],angular.module("app.callysquare").controller("CreateOrEditOdbcDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.odbcs=r||{count:0,rows:[]},v.table="odbcs",v.listOrder="",v.listOrderAsc=null,v.selectedODBC=[],v.query={fields:"createdAt,updatedAt,id,name,dsn,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditOdbcDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/odbcs/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{odbc:e,odbcs:v.odbcs.rows,license:v.license,setting:null}})},v.testtestOdbc=function(e,t){return l.squareOdbc.test({id:e.id}).$promise.then(function(){c.success({title:"Square ODBC properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"Square ODBC properly tested",msg:e.data?JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the odbc?").htmlContent("<b>"+(e.name||"odbc")+"</b> will be deleted.").ariaLabel("delete odbc").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getODBC=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.squareOdbc.get(v.query,f).$promise},v.createOrEditOdbc=function(e,t){i.show({controller:"CreateOrEditOdbcDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/odbcs/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{odbc:t,odbcs:v.odbcs.rows,license:v.license,setting:v.setting}})},v.deleteOdbc=A,v.exportSelectedODBC=function(){var e=angular.copy(v.selectedODBC);return v.selectedODBC=[],e},v.deleteSelectedODBC=function(e){var t=i.confirm().title("Are you sure want to delete the selected odbcs?").htmlContent("<b>"+v.selectedODBC.length+" selected</b> will be deleted.").ariaLabel("delete Odbcs").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedODBC.forEach(function(e){A(e)}),v.selectedODBC=[]})},v.deselectODBC=function(){v.selectedODBC=[]},v.selectAllODBC=function(){v.selectedODBC=v.odbcs.rows};var h=!0,b=1;function f(e){v.odbcs=e||{count:0,rows:[]}}function A(e){l.squareOdbc.delete({id:e.id}).$promise.then(function(){_.remove(v.odbcs.rows,{id:e.id}),v.odbcs.count-=1,v.odbcs.rows.length||v.getODBC(),c.success({title:"Odbc deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsquareOdbc"}];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:"SYSTEM:DELETEsquareOdbc",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getODBC())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","odbcs","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.callysquare").controller("OdbcsController",e)}(),function(){"use strict";function e(t,n,e,a,i,o,s,r,l){var d=this;function c(e){t.hide(e)}d.errors=[],d.title="CALLYSQUARE.EDIT_PROJECT",d.project=angular.copy(a),d.newWindow=!0,d.projects=e,d.newProject=!1,d.openFromEditor=o,d.project||(d.project={name:"",description:""},d.title="CALLYSQUARE.NEW_PROJECT",d.newProject=!0),d.addNewProject=function(){d.errors=[],i.squareProject.save(d.project).$promise.then(function(e){return i.user.addSquareProjects({id:l.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){d.projects.unshift(e),n.success({title:"Project properly created",msg:d.project.name?d.project.name+" has been created!":""}),c(e),d.openFromEditor&&(d.newWindow?s.open("/callysquare/projects/"+e.id,"_blank"):r.go("app.callysquare.projects.edit",{id:e.id}))}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.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.squareProject.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},d.saveProject=function(){d.errors=[],i.squareProject.update({id:d.project.id},d.project).$promise.then(function(e){var t=_.find(d.projects,{id:e.id});t&&_.merge(t,e),n.success({title:"Project properly saved!",msg:d.project.name?d.project.name+" has been saved!":""}),c(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.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.squareProject.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},d.deleteProject=function(){d.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(){i.squareProject.delete({id:d.project.id}).$promise.then(function(){return i.squareProject.getUsers({id:d.project.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(i.user.removeSquareProjects({id:l.getCurrentUser().id,ids:[d.project.id]}).$promise);return $q.all(t)}).then(function(){_.remove(d.projects,{id:d.project.id}),n.success({title:"Project properly deleted!",msg:d.project.name?d.project.name+" has been deleted!":""}),c(d.project)}).catch(function(e){console.error(e),d.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.delete"}]})},function(){})},d.closeDialog=c}e.$inject=["$mdDialog","toasty","projects","project","api","openFromEditor","$window","$state","Auth"],angular.module("app.callysquare").controller("CreateOrEditSquareProjectDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,o,s,r,l,d,c,m,u,p,g,v,h,b,f,A,E,y,S,T,C,x){var O,w,I,R,N,D,L=this,M={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"],lumenvoxasr:["grammar"],tildeasr:["appid","appsecret","uri"],login:["findBy"],pause:["findBy","pause_id"],unpause:["findBy"],logout:["findBy"],dialogflow:["key","text","dialogflow_language"]},k={queue:["file_id"],database:["variable_id"],pause:["pause_id"]},U={sendMail:["to","cc","bcc"],voicemail:["mailbox"]};function F(e,t,n,a){return _.map(e,function(e){return{value:e[t],option:e[n],group:a?e[a]:void 0}})}L.cellName=A.tagName,L.attributes=_.map(A.attributes,function(e){return{name:e.name,value:e.value,defaultValue:k[L.cellName]&&_.includes(k[L.cellName],e.name),required:M[L.cellName]&&_.includes(M[L.cellName],e.name),help:U[L.cellName]&&_.includes(U[L.cellName],e.name)}}),L.values={sip_id:F(r,"id","fullname","role"),trunk_name:F(l,"name","name"),trunk_id:F(l,"id","name"),queue_id:F(d,"id","name"),file_id:F(c,"id","name"),variable_id:F(m,"id","name"),odbc_id:F(u,"id","name"),project_id:F(p,"id","name"),context:F(g,"id","name"),interval_id:(O=v,w="id",I="name",R="IntervalId",N=_.filter(O,function(e){return null===e[R]}),D=[],_.forEach(N,function(t){D.push({value:t[w],option:t[I]});var e=_.filter(O,function(e){return e[R]===t.id});_.forEach(e,function(e){D.push({value:e[w],option:" - "+e[I]})})}),D),account_id:F(h,"id","name"),template_id:F(b,"id","name"),list_id:F(f,"id","name"),sms_account_id:F(T,"id","name"),pause_id:F(C,"id","name"),answer:[{value:"yes",option:"Yes"},{value:"no",option:"No"}],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:n,ispeech_asr_language:a,ispeech_tts_language:o,google_tts_language:s,google_asr_language:i,aws_polly_region:S,aws_polly_voice:y,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:x},L.closeDialog=function(e){e&&E(L.attributes),t.hide()},L.getMap=F}e.$inject=["$mdDialog","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"],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("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={chunkSize:5242880,maxChunkRetries:1,singleFile:!0,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},a.ngFlow={flow:{}},a.dropping=!1,a.closeDialog=i,a.fileAdded=function(e){a.errors=[],"text/xml"!==e.file.type&&a.errors.push({message:"The format "+e.file.type+" is not supported!"});5242880<e.file.size&&a.errors.push({message:"The file is too big. Max 5MB files are supported!"});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 o=this;o.projects=n,o.id="",o.newWindow=!0,o.closeDialog=function(e){o.errors=[],e?(t.hide(),o.newWindow?a.open("/callysquare/projects/"+o.id,"_blank"):i.go("app.callysquare.projects.edit",{id:o.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,o,s){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={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:o.instant("CALLYSQUARE.ALL_USERS"),labelSelected:o.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,o,s){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?o.open("/callysquare/projects/"+e.id,"_blank"):s.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,o,t,s,r,l,d,c,m,u,p,g,v,h,b,f,A,E){var y=this;y.project=t||{},y.saveOrPublishProject=function(e,t){var n={preproduction:e};t&&(n.production=e);o.squareProject.update({id:y.project.id},n).$promise.then(function(e){i.success({title:"Project "+(t?"published":"saved")+"!",msg:y.project.name?y.project.name+" has been "+(t?"published":"saved")+"!":""}),y.project.preproduction=e.preproduction}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsquareProject",msg:e.data?JSON.stringify(e.data):e.toString()})})},y.$onInit=function(){new EditorUi(y,new Editor,document.getElementById("geEditor")).openString(y.project.preproduction,y.project.name,y.project)},y.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:s.rows||[],trunks:r.rows||[],queues:l.rows||[],sounds:d.rows||[],variables:c.rows||[],databases:m.rows||[],contexts:u.rows||[],projects:p.rows||[],intervals:g.rows||[],mailAccounts:v.rows||[],smsAccounts:f.rows||[],pauses:A.rows||[],templates:h.rows||[],lists:b.rows||[],cell:e,saveCallback:t}})},y.newProject=function(e){a.show({controller:"CreateOrEditProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/create/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{project:e,projects:p.rows,openFromEditor:!0,setting:null}})},y.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:p.rows||[]}})},y.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:y.project,currentXML:e}}).then(function(e){e&&p.rows.push(e)})},y.newVariable=function(e){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:e,variables:c.rows,license:null,setting:null}})},y.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:y.project}}).then(function(e){e&&_.merge(y.project,e)})},y.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&&(y.project.preproduction=e)})},y.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&&(y.project.preproduction=e)})},y.gotoProjects=function(){e.go("app.callysquare.projects")}}e.$inject=["$state","$document","$mdDialog","toasty","api","project","users","trunks","queues","sounds","variables","databases","contexts","projects","intervals","mailAccounts","templates","lists","smsAccounts","pauses","$window"],angular.module("app.callysquare").controller("ProjectController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d,c){var m=this;m.currentUser=c.getCurrentUser(),m.projects=a||{count:0,rows:[]},m.table="projects",m.listOrder="",m.listOrderAsc=null,m.selectedProjects=[],m.query={fields:"id,name,description,notes",sort:"-updatedAt",limit:10,page:1},m.editstate=function(e,t){n.go("app.callysquare.projects.edit",{id:e.id})},m.deleteconfirm=function(e,t){var n=s.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");s.show(n).then(function(){v(e)},function(){console.log("CANCEL")})},m.success=g,m.getProjects=function(){m.query.offset=(m.query.page-1)*m.query.limit,m.promise=i.squareProject.get(m.query,g).$promise},m.createOrEditProject=function(e,t){s.show({controller:"CreateOrEditSquareProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/create/dialog.html",parent:angular.element(r.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:t,projects:m.projects.rows,openFromEditor:null,setting:null}})},m.deleteProject=v,m.exportSelectedProjects=function(){var e=angular.copy(m.selectedProjects);return m.selectedProjects=[],e},m.deleteSelectedProjects=function(e){var t=s.confirm().title("Are you sure want to delete the selected projects?").htmlContent("<b>"+m.selectedProjects.length+" selected</b> will be deleted.").ariaLabel("delete Projects").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){m.selectedProjects.forEach(function(e){v(e)}),m.selectedProjects=[]})},m.deselectProjects=function(){m.selectedProjects=[]},m.selectAllProjects=function(){m.selectedProjects=m.projects.rows},m.managePermissions=function(e,t){s.show({controller:"ProjectspermissionaddController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/permissionadd/permissionadd.html",parent:angular.element(r.body),targetEvent:t,clickOutsideToClose:!0,locals:{project:e,projects:m.projects?m.projects.rows:[]}})};var u=!0,p=1;function g(e){m.projects=e||{count:0,rows:[]}}function v(e){i.squareProject.delete({id:e.id}).$promise.then(function(){_.remove(m.projects.rows,{id:e.id}),m.projects.count-=1,m.projects.rows.length||m.getProjects(),d.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){m.errors=e.data.errors||[{message:e.toString(),type:"api.project.delete"}];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: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){u?l(function(){u=!1}):(t||(p=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=p),m.getProjects())})}e.$inject=["$scope","$state","$mdSidenav","projects","api","msUtils","$mdDialog","$document","$timeout","toasty","Auth"],angular.module("app.callysquare").controller("ProjectsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CALLYSQUARE.EDIT_SQUARERECORDING",u.squareRecording=angular.copy(r),u.squareRecordings=s,u.newSquareRecording=!1,u.squareRecording||(u.squareRecording={},u.title="CALLYSQUARE.NEW_SQUARERECORDING",u.newSquareRecording=!0),u.addNewSquareRecording=function(){u.errors=[],l.squareRecording.save(u.squareRecording).$promise.then(function(e){u.squareRecordings.unshift(e.toJSON()),o.success({title:"SquareRecording properly created",msg:u.squareRecording.name?u.squareRecording.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSquareRecording=function(){u.errors=[],l.squareRecording.update({id:u.squareRecording.id},u.squareRecording).$promise.then(function(e){var t=_.find(u.squareRecordings,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SquareRecording properly saved!",msg:u.squareRecording.name?u.squareRecording.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSquareRecording=function(e){u.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(){l.squareRecording.delete({id:u.squareRecording.id}).$promise.then(function(){_.remove(u.squareRecordings,{id:u.squareRecording.id}),o.success({title:"SquareRecording properly deleted!",msg:(u.squareRecording.name||"squareRecording")+" has been deleted!"}),p(u.squareRecording)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","squareRecordings","squareRecording","api","Auth","license","setting"],angular.module("app.callysquare").controller("CreateOrEditSquareRecordingDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.squareRecordings=r||{count:0,rows:[]},v.table="squareRecordings",v.listOrder="",v.listOrderAsc=null,v.selectedSquareRecordings=[],v.query={fields:"createdAt,updatedAt,id,filename,projectName,uniqueid,callerid,extension,audio",sort:"-updatedAt",limit:10,page:1},v.downloadfile2=function(o,e){return l.squareRecording.download({id:o.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=o.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++)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.squareRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the squareRecording?").htmlContent("<b>"+(e.name||"squareRecording")+"</b> will be deleted.").ariaLabel("delete squareRecording").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getSquareRecordings=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.squareRecording.get(v.query,f).$promise},v.createOrEditSquareRecording=function(e,t){i.show({controller:"CreateOrEditSquareRecordingDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/squareRecordings/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{squareRecording:t,squareRecordings:v.squareRecordings.rows,license:v.license,setting:v.setting}})},v.deleteSquareRecording=A,v.exportSelectedSquareRecordings=function(){var e=angular.copy(v.selectedSquareRecordings);return v.selectedSquareRecordings=[],e},v.deleteSelectedSquareRecordings=function(e){var t=i.confirm().title("Are you sure want to delete the selected squareRecordings?").htmlContent("<b>"+v.selectedSquareRecordings.length+" selected</b> will be deleted.").ariaLabel("delete SquareRecordings").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSquareRecordings.forEach(function(e){A(e)}),v.selectedSquareRecordings=[]})},v.deselectSquareRecordings=function(){v.selectedSquareRecordings=[]},v.selectAllSquareRecordings=function(){v.selectedSquareRecordings=v.squareRecordings.rows};var h=!0,b=1;function f(e){v.squareRecordings=e||{count:0,rows:[]}}function A(e){l.squareRecording.delete({id:e.id}).$promise.then(function(){_.remove(v.squareRecordings.rows,{id:e.id}),v.squareRecordings.count-=1,v.squareRecordings.rows.length||v.getSquareRecordings(),c.success({title:"SquareRecording deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsquareRecording"}];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:"SYSTEM:DELETEsquareRecording",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSquareRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","squareRecordings","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.callysquare").controller("SquareRecordingsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.chatQueues=r||{count:0,rows:[]},v.table="chatQueues",v.listOrder="",v.listOrderAsc=null,v.selectedChatQueues=[],v.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"chat",limit:10,page:1},v.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.chat.chatQueues.edit",{id:e.id,chatQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"ChatQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:v.chatQueues?v.chatQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"ChatQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:v.chatQueues?v.chatQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the chatQueue?").htmlContent("<b>"+(e.name||"chatQueue")+"</b> will be deleted.").ariaLabel("delete chatQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.chat.realtime.queues",{})},v.success=f,v.getChatQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.chatQueue.get(v.query,f).$promise},v.createOrEditChatQueue=function(e,t){i.show({controller:"CreateOrEditChatQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatQueue:t,chatQueues:v.chatQueues.rows,license:v.license,setting:v.setting}})},v.deleteChatQueue=A,v.exportSelectedChatQueues=function(){var e=angular.copy(v.selectedChatQueues);return v.selectedChatQueues=[],e},v.deleteSelectedChatQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected chatQueues?").htmlContent("<b>"+v.selectedChatQueues.length+" selected</b> will be deleted.").ariaLabel("delete ChatQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedChatQueues.forEach(function(e){A(e)}),v.selectedChatQueues=[]})},v.deselectChatQueues=function(){v.selectedChatQueues=[]},v.selectAllChatQueues=function(){v.selectedChatQueues=v.chatQueues.rows};var h=!0,b=1;function f(e){v.chatQueues=e||{count:0,rows:[]}}function A(e){l.chatQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.chatQueues.rows,{id:e.id}),v.chatQueues.count-=1,v.chatQueues.rows.length||v.getChatQueues(),c.success({title:"ChatQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEchatQueue"}];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:"SYSTEM:DELETEchatQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getChatQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","chatQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.chat").controller("ChatQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CHAT.EDIT_CHATQUEUE",u.chatQueue=angular.copy(r),u.chatQueues=s,u.newChatQueue=!1,u.chatQueue||(u.chatQueue={strategy:"beepall",timeout:10},u.title="CHAT.NEW_CHATQUEUE",u.newChatQueue=!0),u.addNewChatQueue=function(){u.errors=[],l.chatQueue.save(u.chatQueue).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"chat",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.chatQueues.unshift(e.toJSON()),o.success({title:"ChatQueue properly created",msg:u.chatQueue.name?u.chatQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveChatQueue=function(){u.errors=[],l.chatQueue.update({id:u.chatQueue.id},u.chatQueue).$promise.then(function(e){var t=_.find(u.chatQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatQueue properly saved!",msg:u.chatQueue.name?u.chatQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteChatQueue=function(e){u.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(){l.chatQueue.delete({id:u.chatQueue.id}).$promise.then(function(){return l.chatQueue.getAgents({id:u.chatQueue.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.chatQueue.id],channel:"chat",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.chatQueues,{id:u.chatQueue.id}),o.success({title:"ChatQueue properly deleted!",msg:(u.chatQueue.name||"chatQueue")+" has been deleted!"}),p(u.chatQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","chatQueues","chatQueue","api","Auth","license","setting"],angular.module("app.chat").controller("CreateOrEditChatQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.chatQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.chatQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserChatQueue?"penalty "+e.UserChatQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserChatQueue?"penalty "+e.UserChatQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.chatQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("CHAT.ALL_AGENTS"),labelSelected:s.instant("CHAT.SELECTED_AGENTS"),transferCallback:function(e,t){a.chatQueue[t?"removeAgents":"addAgents"]({id:l.chatQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"ChatQueue properly "+(t?"removed":"added"),msg:"ChatQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:chatQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","chatQueue","chatQueues","realtime","$translate","Auth"],angular.module("app.chat").controller("ChatQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.chatQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("CHAT.ALL_TEAMS"),labelSelected:i.instant("CHAT.SELECTED_TEAMS"),transferCallback:function(e,t){a.chatQueue[t?"removeTeams":"addTeams"]({id:o.chatQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:chatQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.chatQueue.getTeams({id:o.chatQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","chatQueue","$translate"],angular.module("app.chat").controller("ChatQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.chatQueue=d||e.params.chatQueue||{},c.selectedTab=e.params.tab||0,c.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:c.chatQueues?c.chatQueues.rows:[]}})},c.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:c.chatQueues?c.chatQueues.rows:[],realtime:!1}})},c.alert=r.info,c.gotoChatQueues=function(){e.go("app.chat.chatQueues")},c.saveChatQueue=function(){s.chatQueue.update({id:c.chatQueue.id},c.chatQueue).$promise.then(function(){r.success({title:"ChatQueue updated!",msg:c.chatQueue.name?c.chatQueue.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","chatQueue"],angular.module("app.chat").controller("ChatQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.chatWebsites=r||{count:0,rows:[]},v.table="chatWebsites",v.listOrder="",v.listOrderAsc=null,v.selectedChatWebsites=[],v.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,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v.arrayheader_shape=_.keyBy([{option:"Rounded",value:"'rounded'"},{option:"Squared",value:"'squared'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arraymessagesAlignment=_.keyBy([{option:"alternate",value:"'alternate'"},{option:"centered",value:"'centered'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayratingType=_.keyBy([{option:"Star",value:"'star'"},{option:"Thumb",value:"'thumb'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayacceptMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayrejectMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraycloseMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,chatWebsite:e})},v.interactionsgoto=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,tab:9})},v.offlinemessagesgoto=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,tab:10})},v.agentadddialog=function(e,t){i.show({controller:"ChatWebsiteagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatWebsite:e,chatWebsites:v.chatWebsites?v.chatWebsites.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the chatWebsite?").htmlContent("<b>"+(e.name||"chatWebsite")+"</b> will be deleted.").ariaLabel("delete chatWebsite").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getChatWebsites=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.chatWebsite.get(v.query,f).$promise},v.createOrEditChatWebsite=function(e,t){i.show({controller:"CreateOrEditChatWebsiteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:t,chatWebsites:v.chatWebsites.rows,license:v.license,setting:v.setting}})},v.deleteChatWebsite=A,v.exportSelectedChatWebsites=function(){var e=angular.copy(v.selectedChatWebsites);return v.selectedChatWebsites=[],e},v.deleteSelectedChatWebsites=function(e){var t=i.confirm().title("Are you sure want to delete the selected chatWebsites?").htmlContent("<b>"+v.selectedChatWebsites.length+" selected</b> will be deleted.").ariaLabel("delete ChatWebsites").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedChatWebsites.forEach(function(e){A(e)}),v.selectedChatWebsites=[]})},v.deselectChatWebsites=function(){v.selectedChatWebsites=[]},v.selectAllChatWebsites=function(){v.selectedChatWebsites=v.chatWebsites.rows},l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){v.interval=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.chatWebsites=e||{count:0,rows:[]}}function A(e){l.chatWebsite.delete({id:e.id}).$promise.then(function(){_.remove(v.chatWebsites.rows,{id:e.id}),v.chatWebsites.count-=1,v.chatWebsites.rows.length||v.getChatWebsites(),c.success({title:"ChatWebsite deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEchatWebsite"}];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:"SYSTEM:DELETEchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getChatWebsites())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","chatWebsites","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.chat").controller("ChatWebsitesController",e)}(),function(){"use strict";function e(e,t,n,a,o,i,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CHAT.EDIT_CHATWEBSITE",u.chatWebsite=angular.copy(r),u.chatWebsites=s,u.newChatWebsite=!1,u.chatWebsite||(u.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},u.title="CHAT.NEW_CHATWEBSITE",u.newChatWebsite=!0),t.params.id&&(u.chatWebsite.ChatWebsiteId=t.params.id),u.addNewChatWebsite=function(){u.errors=[],l.chatWebsite.save(u.chatWebsite).$promise.then(function(e){var t="add"+_.upperFirst("chatWebsite")+"s";return l.user[t]({id:d.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){u.chatWebsites.unshift(e.toJSON()),i.success({title:"ChatWebsite properly created",msg:u.chatWebsite.name?u.chatWebsite.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.chatWebsite.save"}];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.chatWebsite.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveChatWebsite=function(){u.errors=[],l.chatWebsite.update({id:u.chatWebsite.id},u.chatWebsite).$promise.then(function(e){var t=_.find(u.chatWebsites,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),i.success({title:"ChatWebsite properly saved!",msg:u.chatWebsite.name?u.chatWebsite.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.chatWebsite.update"}];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.chatWebsite.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteChatWebsite=function(e){u.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(){l.chatWebsite.delete({id:u.chatWebsite.id}).$promise.then(function(){return l.chatWebsite.getAgents({id:u.chatWebsite.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a="remove"+_.upperFirst("chatWebsite")+"s",i=0;i<n.length;i++)t.push(l.user[a]({id:d.getCurrentUser().id,ids:[u.chatWebsite.id]}).$promise);return o.all(t)}).then(function(){_.remove(u.chatWebsites,{id:u.chatWebsite.id}),i.success({title:"ChatWebsite properly deleted!",msg:(u.chatWebsite.name||"chatWebsite")+" has been deleted!"}),p(u.chatWebsite)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.chatWebsite.delete"}];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.chatWebsite.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).catch(function(e){i.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","toasty","chatWebsites","chatWebsite","api","Auth","license","setting"],angular.module("app.chat").controller("CreateOrEditChatWebsiteDialogController",e)}(),function(){"use strict";function e(s,i,a,o,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}}).then(function(e){e&&(e.id?r.chatWebsiteApps.rows[t]=e:r.chatWebsiteApps.rows.splice(t,0,e),l())}).catch(function(e){e&&o.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=[],o=[];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=(o.length?_.last(o).priority:a.priority)+1,t=_.concat(t,i,[a],o)}s.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.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",route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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",route:"chatQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"user",filters:{fields:"id,name",role:"agent",sort:"name",nolimit:!0}}],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",maxlength:255,required:!0,param:1}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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:"English",value:"'en'"},{option:"Italian",value:"'it'"}],required:!0,param:1},{title:"welcomemessage",name:"welcomemessage",type:"textarea",maxlength:255,required:!1,param:2,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){r.chatWebsite=e,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=s.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:[]}}).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(),o.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 s.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,n,a,t,i,o,s,r){var l=this;function d(){return a.chatWebsite[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.chatWebsite.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserChatWebsite?"penalty "+e.UserChatWebsite.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserChatWebsite?"penalty "+e.UserChatWebsite.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.chatWebsite=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("CHAT.ALL_AGENTS"),labelSelected:s.instant("CHAT.SELECTED_AGENTS"),transferCallback:function(e,t){a.chatWebsite[t?"removeAgents":"addAgents"]({id:l.chatWebsite.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"ChatWebsite properly "+(t?"removed":"added"),msg:"ChatWebsite has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:chatWebsite.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","chatWebsite","chatWebsites","realtime","$translate","Auth"],angular.module("app.chat").controller("ChatWebsiteagentaddController",e)}(),function(){"use strict";function e(e,a){var i=this;i.chatWebsite={},i.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.chatWebsite=angular.copy(e),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,n,e,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(e.appType||e.app).toUpperCase(),o.agent=angular.copy(e),o.agent.appdata)switch(o.agent.appType?o.agent.appType.toLowerCase():o.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agent.appdata.split(",");o.agent.key=s[0],o.agent.language=s[1],o.agent.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agent.appdata.split(",");o.agent.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agent.text=s.slice(1,s.length).join(",");break;case"message":o.agent.text=o.agent.appdata;break;case"set":o.agent.name=o.agent.appdata.split("=")[0],o.agent.value=o.agent.appdata.split("=")[1];break;case"agi":o.agent.project=o.agent.appdata;break;default:var r=o.agent.appdata.split(",");o.agent.agent=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.agent.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.agent.timeout=30;function l(e){t.hide(e)}o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outbounddial"===o.agent.appType.toLowerCase()&&(o.agent.prefix=o.agent.phone?o.agent.phone.split("$")[0]:void 0,o.agent.callerId=o.agent.callerID?"CALLERID(all)="+o.agent.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outboundDial"===o.agent.appType&&(o.agent.phone=a.cutdigits?(o.agent.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agent.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agent.options+="U(xcally-mixmonitor-context)"):o.agent.options=o.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.agents,{name:o.agent.agent});t&&(o.agent.UserId=t.id);if(o.agent.appType&&"custom"===o.agent.appType);else switch((o.agent.app||o.agent.appType).toLowerCase()){case"set":o.agent.appdata=o.agent.name+"="+o.agent.value;break;case"custom":break;default:e[0]=o.agent.agent,e[1]=o.agent.timeout,o.agent.appdata=e.join(",")}l(o.agent)},o.closeDialog=l,i.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){o.agents=e.rows||[]}).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","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.autoreply=angular.copy(n),o.autoreply.appdata)switch(o.autoreply.appType?o.autoreply.appType.toLowerCase():o.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.autoreply.appdata.split(",");o.autoreply.key=s[0],o.autoreply.language=s[1],o.autoreply.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.autoreply.appdata.split(",");o.autoreply.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.autoreply.text=s.slice(1,s.length).join(",");break;case"message":o.autoreply.text=o.autoreply.appdata;break;case"set":o.autoreply.name=o.autoreply.appdata.split("=")[0],o.autoreply.value=o.autoreply.appdata.split("=")[1];break;case"agi":o.autoreply.project=o.autoreply.appdata;break;default:var r=o.autoreply.appdata.split(",");o.autoreply.times=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.autoreply.text=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.autoreply.times=1;function l(e){t.hide(e)}o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outbounddial"===o.autoreply.appType.toLowerCase()&&(o.autoreply.prefix=o.autoreply.phone?o.autoreply.phone.split("$")[0]:void 0,o.autoreply.callerId=o.autoreply.callerID?"CALLERID(all)="+o.autoreply.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outboundDial"===o.autoreply.appType&&(o.autoreply.phone=a.cutdigits?(o.autoreply.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.autoreply.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.autoreply.options+="U(xcally-mixmonitor-context)"):o.autoreply.options=o.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(o.autoreply.appType&&"custom"===o.autoreply.appType);else switch((o.autoreply.app||o.autoreply.appType).toLowerCase()){case"set":o.autoreply.appdata=o.autoreply.name+"="+o.autoreply.value;break;case"custom":break;default:e[0]=o.autoreply.times,e[1]=o.autoreply.text,o.autoreply.appdata=e.join(",")}l(o.autoreply)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.close=angular.copy(n),o.close.appdata)switch(o.close.appType?o.close.appType.toLowerCase():o.close.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.close.appdata.split(",");o.close.key=s[0],o.close.language=s[1],o.close.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.close.appdata.split(",");o.close.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.close.text=s.slice(1,s.length).join(",");break;case"message":o.close.text=o.close.appdata;break;case"set":o.close.name=o.close.appdata.split("=")[0],o.close.value=o.close.appdata.split("=")[1];break;case"agi":o.close.project=o.close.appdata;break;default:var r=o.close.appdata.split(",");o.close.disposition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outbounddial"===o.close.appType.toLowerCase()&&(o.close.prefix=o.close.phone?o.close.phone.split("$")[0]:void 0,o.close.callerId=o.close.callerID?"CALLERID(all)="+o.close.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outboundDial"===o.close.appType&&(o.close.phone=a.cutdigits?(o.close.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.close.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.close.options+="U(xcally-mixmonitor-context)"):o.close.options=o.close.options.replace("U(xcally-mixmonitor-context)",""));if(o.close.appType&&"custom"===o.close.appType);else switch((o.close.app||o.close.appType).toLowerCase()){case"set":o.close.appdata=o.close.name+"="+o.close.value;break;case"custom":break;default:e[0]=o.close.disposition,o.close.appdata=e.join(",")}l(o.close)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.dialogflow=angular.copy(n),o.dialogflow.appdata)switch(o.dialogflow.appType?o.dialogflow.appType.toLowerCase():o.dialogflow.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.dialogflow.appdata.split(",");o.dialogflow.key=s[0],o.dialogflow.language=s[1],o.dialogflow.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.dialogflow.appdata.split(",");o.dialogflow.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.dialogflow.text=s.slice(1,s.length).join(",");break;case"message":o.dialogflow.text=o.dialogflow.appdata;break;case"set":o.dialogflow.name=o.dialogflow.appdata.split("=")[0],o.dialogflow.value=o.dialogflow.appdata.split("=")[1];break;case"agi":o.dialogflow.project=o.dialogflow.appdata;break;default:var r=o.dialogflow.appdata.split(",");o.dialogflow.key=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.dialogflow.language=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.dialogflow.welcomemessage=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}else o.dialogflow.language="en";function l(e){t.hide(e)}o.dialogflow.type&&"outbound"===o.dialogflow.type.toLowerCase()&&"outbounddial"===o.dialogflow.appType.toLowerCase()&&(o.dialogflow.prefix=o.dialogflow.phone?o.dialogflow.phone.split("$")[0]:void 0,o.dialogflow.callerId=o.dialogflow.callerID?"CALLERID(all)="+o.dialogflow.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.dialogflow.type&&"outbound"===o.dialogflow.type.toLowerCase()&&"outboundDial"===o.dialogflow.appType&&(o.dialogflow.phone=a.cutdigits?(o.dialogflow.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.dialogflow.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.dialogflow.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.dialogflow.options+="U(xcally-mixmonitor-context)"):o.dialogflow.options=o.dialogflow.options.replace("U(xcally-mixmonitor-context)",""));if(o.dialogflow.appType&&"custom"===o.dialogflow.appType);else switch((o.dialogflow.app||o.dialogflow.appType).toLowerCase()){case"set":o.dialogflow.appdata=o.dialogflow.name+"="+o.dialogflow.value;break;case"custom":break;default:e[0]=o.dialogflow.key,e[1]=o.dialogflow.language,e[2]=o.dialogflow.welcomemessage,o.dialogflow.appdata=e.join(",")}l(o.dialogflow)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppdialogflowDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotoif=angular.copy(n),o.gotoif.appdata)switch(o.gotoif.appType?o.gotoif.appType.toLowerCase():o.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotoif.appdata.split(",");o.gotoif.key=s[0],o.gotoif.language=s[1],o.gotoif.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotoif.appdata.split(",");o.gotoif.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotoif.text=s.slice(1,s.length).join(",");break;case"message":o.gotoif.text=o.gotoif.appdata;break;case"set":o.gotoif.name=o.gotoif.appdata.split("=")[0],o.gotoif.value=o.gotoif.appdata.split("=")[1];break;case"agi":o.gotoif.project=o.gotoif.appdata;break;default:var r=o.gotoif.appdata.split(",");o.gotoif.condition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.gotoif.truepriority=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.gotoif.falsepriority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outbounddial"===o.gotoif.appType.toLowerCase()&&(o.gotoif.prefix=o.gotoif.phone?o.gotoif.phone.split("$")[0]:void 0,o.gotoif.callerId=o.gotoif.callerID?"CALLERID(all)="+o.gotoif.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outboundDial"===o.gotoif.appType&&(o.gotoif.phone=a.cutdigits?(o.gotoif.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotoif.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotoif.options+="U(xcally-mixmonitor-context)"):o.gotoif.options=o.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotoif.appType&&"custom"===o.gotoif.appType);else switch((o.gotoif.app||o.gotoif.appType).toLowerCase()){case"set":o.gotoif.appdata=o.gotoif.name+"="+o.gotoif.value;break;case"custom":break;default:e[0]=o.gotoif.condition,e[1]=o.gotoif.truepriority,e[2]=o.gotoif.falsepriority,o.gotoif.appdata=e.join(",")}l(o.gotoif)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotop=angular.copy(n),o.gotop.appdata)switch(o.gotop.appType?o.gotop.appType.toLowerCase():o.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotop.appdata.split(",");o.gotop.key=s[0],o.gotop.language=s[1],o.gotop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotop.appdata.split(",");o.gotop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotop.text=s.slice(1,s.length).join(",");break;case"message":o.gotop.text=o.gotop.appdata;break;case"set":o.gotop.name=o.gotop.appdata.split("=")[0],o.gotop.value=o.gotop.appdata.split("=")[1];break;case"agi":o.gotop.project=o.gotop.appdata;break;default:var r=o.gotop.appdata.split(",");o.gotop.priority=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outbounddial"===o.gotop.appType.toLowerCase()&&(o.gotop.prefix=o.gotop.phone?o.gotop.phone.split("$")[0]:void 0,o.gotop.callerId=o.gotop.callerID?"CALLERID(all)="+o.gotop.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outboundDial"===o.gotop.appType&&(o.gotop.phone=a.cutdigits?(o.gotop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotop.options+="U(xcally-mixmonitor-context)"):o.gotop.options=o.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotop.appType&&"custom"===o.gotop.appType);else switch((o.gotop.app||o.gotop.appType).toLowerCase()){case"set":o.gotop.appdata=o.gotop.name+"="+o.gotop.value;break;case"custom":break;default:e[0]=o.gotop.priority,o.gotop.appdata=e.join(",")}l(o.gotop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditChatWebsiteAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(n.appType||n.app).toUpperCase(),o.noop=angular.copy(n),o.noop.appdata)switch(o.noop.appType?o.noop.appType.toLowerCase():o.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.noop.appdata.split(",");o.noop.key=s[0],o.noop.language=s[1],o.noop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.noop.appdata.split(",");o.noop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.noop.text=s.slice(1,s.length).join(",");break;case"message":o.noop.text=o.noop.appdata;break;case"set":o.noop.name=o.noop.appdata.split("=")[0],o.noop.value=o.noop.appdata.split("=")[1];break;case"agi":o.noop.project=o.noop.appdata;break;default:var r=o.noop.appdata.split(",");o.noop.value=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outbounddial"===o.noop.appType.toLowerCase()&&(o.noop.prefix=o.noop.phone?o.noop.phone.split("$")[0]:void 0,o.noop.callerId=o.noop.callerID?"CALLERID(all)="+o.noop.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outboundDial"===o.noop.appType&&(o.noop.phone=a.cutdigits?(o.noop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.noop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.noop.options+="U(xcally-mixmonitor-context)"):o.noop.options=o.noop.options.replace("U(xcally-mixmonitor-context)",""));if(o.noop.appType&&"custom"===o.noop.appType);else switch((o.noop.app||o.noop.appType).toLowerCase()){case"set":o.noop.appdata=o.noop.name+"="+o.noop.value;break;case"custom":break;default:e[0]=o.noop.value,o.noop.appdata=e.join(",")}l(o.noop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppnoopDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.queue.queue=300,o.queue.timeout=300;function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.queues,{name:o.queue.queue});t&&(o.queue[_.capitalize("chat")+"QueueId"]=t.id);if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.timeout,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.chatQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(e.appType||e.app).toUpperCase(),o.system=angular.copy(e),o.system.appdata)switch(o.system.appType?o.system.appType.toLowerCase():o.system.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.system.appdata.split(",");o.system.key=s[0],o.system.language=s[1],o.system.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.system.appdata.split(",");o.system.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.system.text=s.slice(1,s.length).join(",");break;case"message":o.system.text=o.system.appdata;break;case"set":o.system.name=o.system.appdata.split("=")[0],o.system.value=o.system.appdata.split("=")[1];break;case"agi":o.system.project=o.system.appdata;break;default:var r=o.system.appdata.split(",");o.system.command=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.system.variable=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.system.variable="";function l(e){t.hide(e)}o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outbounddial"===o.system.appType.toLowerCase()&&(o.system.prefix=o.system.phone?o.system.phone.split("$")[0]:void 0,o.system.callerId=o.system.callerID?"CALLERID(all)="+o.system.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outboundDial"===o.system.appType&&(o.system.phone=a.cutdigits?(o.system.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.system.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.system.options+="U(xcally-mixmonitor-context)"):o.system.options=o.system.options.replace("U(xcally-mixmonitor-context)",""));if(o.system.appType&&"custom"===o.system.appType);else switch((o.system.app||o.system.appType).toLowerCase()){case"set":o.system.appdata=o.system.name+"="+o.system.value;break;case"custom":break;default:e[0]=o.system.command,e[1]=o.system.variable,o.system.appdata=e.join(",")}l(o.system)},o.closeDialog=l,i.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteAppsystemDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="CHAT.EDIT_"+(e.appType||e.app).toUpperCase(),o.tag=angular.copy(e),o.tag.appdata)switch(o.tag.appType?o.tag.appType.toLowerCase():o.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.tag.appdata.split(",");o.tag.key=s[0],o.tag.language=s[1],o.tag.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.tag.appdata.split(",");o.tag.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.tag.text=s.slice(1,s.length).join(",");break;case"message":o.tag.text=o.tag.appdata;break;case"set":o.tag.name=o.tag.appdata.split("=")[0],o.tag.value=o.tag.appdata.split("=")[1];break;case"agi":o.tag.project=o.tag.appdata;break;default:var r=o.tag.appdata.split(",");o.tag.tag=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outbounddial"===o.tag.appType.toLowerCase()&&(o.tag.prefix=o.tag.phone?o.tag.phone.split("$")[0]:void 0,o.tag.callerId=o.tag.callerID?"CALLERID(all)="+o.tag.callerID:void 0),o.saveChatWebsiteApp=function(){o.errors=[];var e=[];o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outboundDial"===o.tag.appType&&(o.tag.phone=a.cutdigits?(o.tag.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.tag.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.tag.options+="U(xcally-mixmonitor-context)"):o.tag.options=o.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.tags,{name:o.tag.tag});t&&(o.tag.TagId=t.id);if(o.tag.appType&&"custom"===o.tag.appType);else switch((o.tag.app||o.tag.appType).toLowerCase()){case"set":o.tag.appdata=o.tag.name+"="+o.tag.value;break;case"custom":break;default:e[0]=o.tag.tag,o.tag.appdata=e.join(",")}l(o.tag)},o.closeDialog=l,i.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","chatWebsiteApp","chatWebsite","api"],angular.module("app.chat").controller("EditChatWebsiteApptagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteChatCannedAnswers={count:0,rows:[]},c.selectedChatWebsiteChatCannedAnswers=[],c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e){c.chatWebsite=e,c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteChatCannedAnswers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditChatCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/chatCannedAnswers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatCannedAnswer:t,chatCannedAnswers:c.chatWebsiteChatCannedAnswers.rows,license:null,setting:null}})},c.exportSelectedChatWebsiteChatCannedAnswers=function(){var e=angular.copy(c.selectedChatWebsiteChatCannedAnswers);return c.selectedChatWebsiteChatCannedAnswers=[],e},c.deleteChatWebsiteChatCannedAnswer=g,c.deleteSelectedChatWebsiteChatCannedAnswers=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CHAT.EDIT_CHATCANNEDANSWER",u.chatCannedAnswer=angular.copy(r),u.chatCannedAnswers=s,u.newChatCannedAnswer=!1,u.chatCannedAnswer||(u.chatCannedAnswer={},u.title="CHAT.NEW_CHATCANNEDANSWER",u.newChatCannedAnswer=!0),t.params.id&&(u.chatCannedAnswer.ChatWebsiteId=t.params.id),u.addNewChatCannedAnswer=function(){u.errors=[],l.cannedAnswer.save(u.chatCannedAnswer).$promise.then(function(e){u.chatCannedAnswers.unshift(e.toJSON()),o.success({title:"ChatCannedAnswer properly created",msg:u.chatCannedAnswer.name?u.chatCannedAnswer.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveChatCannedAnswer=function(){u.errors=[],l.cannedAnswer.update({id:u.chatCannedAnswer.id},u.chatCannedAnswer).$promise.then(function(e){var t=_.find(u.chatCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatCannedAnswer properly saved!",msg:u.chatCannedAnswer.name?u.chatCannedAnswer.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteChatCannedAnswer=function(e){u.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(){l.cannedAnswer.delete({id:u.chatCannedAnswer.id}).$promise.then(function(){_.remove(u.chatCannedAnswers,{id:u.chatCannedAnswer.id}),o.success({title:"ChatCannedAnswer properly deleted!",msg:(u.chatCannedAnswer.name||"chatCannedAnswer")+" has been deleted!"}),p(u.chatCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","chatCannedAnswers","chatCannedAnswer","api","Auth","license","setting"],angular.module("app.chat").controller("CreateOrEditChatCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteChatDispositions={count:0,rows:[]},c.selectedChatWebsiteChatDispositions=[],c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e){c.chatWebsite=e,c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteChatDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditChatDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/chatDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatDisposition:t,chatDispositions:c.chatWebsiteChatDispositions.rows,license:null,setting:null}})},c.exportSelectedChatWebsiteChatDispositions=function(){var e=angular.copy(c.selectedChatWebsiteChatDispositions);return c.selectedChatWebsiteChatDispositions=[],e},c.deleteChatWebsiteChatDisposition=g,c.deleteSelectedChatWebsiteChatDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CHAT.EDIT_CHATDISPOSITION",u.chatDisposition=angular.copy(r),u.chatDispositions=s,u.newChatDisposition=!1,u.chatDisposition||(u.chatDisposition={},u.title="CHAT.NEW_CHATDISPOSITION",u.newChatDisposition=!0),t.params.id&&(u.chatDisposition.ChatWebsiteId=t.params.id),u.addNewChatDisposition=function(){u.errors=[],l.disposition.save(u.chatDisposition).$promise.then(function(e){u.chatDispositions.unshift(e.toJSON()),o.success({title:"ChatDisposition properly created",msg:u.chatDisposition.name?u.chatDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveChatDisposition=function(){u.errors=[],l.disposition.update({id:u.chatDisposition.id},u.chatDisposition).$promise.then(function(e){var t=_.find(u.chatDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatDisposition properly saved!",msg:u.chatDisposition.name?u.chatDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteChatDisposition=function(e){u.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(){l.disposition.delete({id:u.chatDisposition.id}).$promise.then(function(){_.remove(u.chatDispositions,{id:u.chatDisposition.id}),o.success({title:"ChatDisposition properly deleted!",msg:(u.chatDisposition.name||"chatDisposition")+" has been deleted!"}),p(u.chatDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","chatDispositions","chatDisposition","api","Auth","license","setting"],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.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.chatWebsite=angular.copy(e),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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteInteractions={count:0,rows:[]},c.selectedChatWebsiteInteractions=[],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){c.chatWebsite=e,c.query.id=c.chatWebsite.id,c.getChatWebsiteInteractions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},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){o.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/interactions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,interaction:t,interactions:c.chatWebsiteInteractions.rows,license:null,setting:null}})},c.spychatInteraction=function(e,n){o.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(s.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=o.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");o.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.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.chatWebsite=angular.copy(e),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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteOfflineMessages={count:0,rows:[]},c.selectedChatWebsiteOfflineMessages=[],c.query={fields:"createdAt,updatedAt,id,ContactId",sort:"-createdAt",limit:10,page:1},c.init=function(e){c.chatWebsite=e,c.query.id=c.chatWebsite.id,c.getChatWebsiteOfflineMessages()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditOfflineMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/offlineMessages/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,offlineMessage:t,offlineMessages:c.chatWebsiteOfflineMessages.rows,license:null,setting:null}})},c.showOfflineMessageChatWebsiteOfflineMessage=function(e,n){o.show({controller:"ShowOfflineMessageOfflineMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/offlineMessages/dialog.html",parent:angular.element(s.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=o.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");o.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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontacts",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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteProactiveActions={count:0,rows:[]},c.selectedChatWebsiteProactiveActions=[],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){c.chatWebsite=e,c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteProactiveActions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditChatProactiveActionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/proactive/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatProactiveAction:t,proactive:c.chatWebsiteProactiveActions.rows,license:null,setting:null}})},c.exportSelectedChatWebsiteProactiveActions=function(){var e=angular.copy(c.selectedChatWebsiteProactiveActions);return c.selectedChatWebsiteProactiveActions=[],e},c.deleteChatWebsiteChatProactiveAction=g,c.deleteSelectedChatWebsiteProactiveActions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CHAT.EDIT_CHATPROACTIVEACTION",u.chatProactiveAction=angular.copy(r),u.proactive=s,u.newChatProactiveAction=!1,u.chatProactiveAction||(u.chatProactiveAction={type:"mouseOver"},u.title="CHAT.NEW_CHATPROACTIVEACTION",u.newChatProactiveAction=!0),t.params.id&&(u.chatProactiveAction.ChatWebsiteId=t.params.id),u.addNewChatProactiveAction=function(){u.errors=[],l.chatProactiveAction.save(u.chatProactiveAction).$promise.then(function(e){u.proactive.unshift(e.toJSON()),o.success({title:"ChatProactiveAction properly created",msg:u.chatProactiveAction.name?u.chatProactiveAction.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveChatProactiveAction=function(){u.errors=[],l.chatProactiveAction.update({id:u.chatProactiveAction.id},u.chatProactiveAction).$promise.then(function(e){var t=_.find(u.proactive,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatProactiveAction properly saved!",msg:u.chatProactiveAction.name?u.chatProactiveAction.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteChatProactiveAction=function(e){u.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(){l.chatProactiveAction.delete({id:u.chatProactiveAction.id}).$promise.then(function(){_.remove(u.proactive,{id:u.chatProactiveAction.id}),o.success({title:"ChatProactiveAction properly deleted!",msg:(u.chatProactiveAction.name||"chatProactiveAction")+" has been deleted!"}),p(u.chatProactiveAction)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","proactive","chatProactiveAction","api","Auth","license","setting"],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.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.chatWebsite=angular.copy(e),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,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.chatWebsite=d||e.params.chatWebsite||{},c.selectedTab=e.params.tab||0,c.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:c.chatWebsites?c.chatWebsites.rows:[],realtime:!1}})},c.alert=r.info,c.gotoChatWebsites=function(){e.go("app.chat.chatWebsites")},c.saveChatWebsite=function(){s.chatWebsite.update({id:c.chatWebsite.id},c.chatWebsite).$promise.then(function(){r.success({title:"ChatWebsite updated!",msg:c.chatWebsite.name?c.chatWebsite.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.template.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.templates=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtemplates",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){c.interval=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","chatWebsite"],angular.module("app.chat").controller("ChatWebsiteController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsChatRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.chatQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].ChatQueueId].paused++,u.queues[e[t].rows[n].ChatQueueId].loggedInDb++,u.queues[e[t].rows[n].ChatQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].ChatQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"chat",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.chatQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!1}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.ChatQueueId]&&u.queues[e.ChatQueueId].loggedInDb++},u.onRemoveMember=function(e){u.queues[e.ChatQueueId]&&u.queues[e.ChatQueueId].loggedInDb--},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.ChatQueueId]&&(u.queues[e.ChatQueueId].loggedInDb+=1,u.queues[e.ChatQueueId].agents[e.UserId]=e.ChatQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.ChatQueueId]&&0<u.queues[e.ChatQueueId].loggedInDb&&(u.queues[e.ChatQueueId].loggedInDb-=1,delete u.queues[e.ChatQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.on("chat_queue:save",u.onSave),d.on("userChatQueue:save",u.onSaveMember),d.on("userChatQueue:remove",u.onRemoveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.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","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,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.companies=r||{count:0,rows:[]},v.table="companies",v.listOrder="",v.listOrderAsc=null,v.selectedCompanies=[],v.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},v.editstate=function(e,t){n.go("app.contactmanager.companies.edit",{id:e.id,company:e})},v.gotocontactsgoto=function(e,t){n.go("app.contactmanager.contacts",{CompanyId:e.id})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the company?").htmlContent("<b>"+(e.name||"company")+"</b> will be deleted.").ariaLabel("delete company").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getCompanies=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.cmCompany.get(v.query,f).$promise},v.createOrEditCompany=function(e,t){i.show({controller:"CreateOrEditCompanyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/companies/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{company:t,companies:v.companies.rows,license:v.license,setting:v.setting}})},v.deleteCompany=A,v.exportSelectedCompanies=function(){var e=angular.copy(v.selectedCompanies);return v.selectedCompanies=[],e},v.deleteSelectedCompanies=function(e){var t=i.confirm().title("Are you sure want to delete the selected companies?").htmlContent("<b>"+v.selectedCompanies.length+" selected</b> will be deleted.").ariaLabel("delete Companys").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedCompanies.forEach(function(e){A(e)}),v.selectedCompanies=[]})},v.deselectCompanies=function(){v.selectedCompanies=[]},v.selectAllCompanies=function(){v.selectedCompanies=v.companies.rows};var h=!0,b=1;function f(e){v.companies=e||{count:0,rows:[]}}function A(e){l.cmCompany.delete({id:e.id}).$promise.then(function(){_.remove(v.companies.rows,{id:e.id}),v.companies.count-=1,v.companies.rows.length||v.getCompanies(),c.success({title:"Company deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmCompany"}];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:"SYSTEM:DELETEcmCompany",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getCompanies())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","companies","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("CompaniesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CONTACTMANAGER.EDIT_COMPANY",u.company=angular.copy(r),u.companies=s,u.newCompany=!1,u.company||(u.company={},u.title="CONTACTMANAGER.NEW_COMPANY",u.newCompany=!0),u.addNewCompany=function(){u.errors=[],l.cmCompany.save(u.company).$promise.then(function(e){u.companies.unshift(e.toJSON()),o.success({title:"Company properly created",msg:u.company.name?u.company.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveCompany=function(){u.errors=[],l.cmCompany.update({id:u.company.id},u.company).$promise.then(function(e){var t=_.find(u.companies,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Company properly saved!",msg:u.company.name?u.company.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteCompany=function(e){u.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(){l.cmCompany.delete({id:u.company.id}).$promise.then(function(){_.remove(u.companies,{id:u.company.id}),o.success({title:"Company properly deleted!",msg:(u.company.name||"company")+" has been deleted!"}),p(u.company)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","companies","company","api","Auth","license","setting"],angular.module("app.contactmanager").controller("CreateOrEditCompanyDialogController",e)}(),function(){"use strict";function e(n,e,t,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.company=d||n.params.company||{},c.selectedTab=n.params.tab||0,c.gotogoto=function(e,t){n.go("app.contactmanager.contacts",{CompanyId:e.id})},c.alert=r.info,c.gotoCompanies=function(){n.go("app.contactmanager.companies")},c.saveCompany=function(){s.cmCompany.update({id:c.company.id},c.company).$promise.then(function(){r.success({title:"Company updated!",msg:c.company.name?c.company.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","company"],angular.module("app.contactmanager").controller("CompanyController",e)}(),function(){"use strict";function e(t,i,n,a,o,s,e,r,l,d,c,m,u,p,g,v){var h=this;h.currentUser=p.getCurrentUser();h.license=v,h.ngFlowOptions={target:"api/cm/contacts/upload",singleFile:!0,maxChunkRetries:1,chunkSize:62914560,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},h.contacts=e||{count:0,rows:[]},h.options={hidden:!1,hover:!1,isOpen:!1},h.table="cm_contacts",h.selectedContacts=[],h.lists=r||{rows:[],count:0},h.companies=d||{rows:[],count:0},h.tags=m||{rows:[],count:0},h.listsMap=l,h.companiesMap=c,h.selectedTags=[],h.selectedList=null,h.selectedCompany=null,h.query=_.merge({includeAll:!0,sort:"-updatedAt",limit:10,offset:0,page:1},g),h.editdialog=function(e,t){a.go("app.contactmanager.contacts.edit",{id:e.id})},h.deleteconfirm=function(e,t){var n=o.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");o.show(n).then(function(){E(e)})},h.success=A,h.getContacts=function(){h.query.offset=(h.query.page-1)*h.query.limit,h.promise=s.cmContact.get(h.query,A).$promise},h.mergeContact=function(e,t){o.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",function(e){return e.resolve("cmList@get",{fields:"id,name"})}]},locals:{contacts:h.contacts.rows}})},h.duplicateContact=function(e,t){o.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",function(e){return e.resolve("cmList@get",{fields:"id,name"})}]},locals:{contacts:h.contacts.rows}})},h.createOrEditContact=function(e,t){t&&t.dateOfBirth&&(t.dateOfBirth=new Date(t.dateOfBirth));o.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:h.query.ListId||a.params.ListId,CompanyId:h.query.CompanyId||a.params.CompanyId,contact:t,contacts:h.contacts.rows,setting:null},resolve:{lists:["apiResolver",function(e){return e.resolve("cmList@get",{fields:"id,name"})}],companies:["apiResolver",function(e){return e.resolve("cmCompany@get",{fields:"id,name"})}]}})},h.deleteContact=E,h.exportSelectedContacts=function(){var e=angular.copy(h.selectedContacts);return h.selectedContacts=[],e},h.deleteSelectedContacts=function(e){var t=o.confirm().title("Are you sure want to delete the selected contacts?").htmlContent("<b>"+h.selectedContacts.length+" selected</b> will be deleted.").ariaLabel("delete Contacts").targetEvent(e).ok("OK").cancel("CANCEL");o.show(t).then(function(){h.selectedContacts.forEach(function(e){E(e)}),h.selectedContacts=[]})},h.deselectContacts=function(){h.selectedContacts=[]},h.selectAllContacts=function(){h.selectedContacts=h.contacts.rows},h.createTag=function(e){var t=o.prompt().title("What would you name your tag?").placeholder("Tag name").ariaLabel("Tag name").targetEvent(e).ok("Ok").cancel("Cancel");return o.show(t).then(function(e){if(e)return s.tag.save({name:e});u.error({title:"Error creating tag!",msg:"Invalid tag name."})}).then(function(e){e&&(h.tags.rows.push(e),u.success({title:"Tag properly created!",msg:e.tag?e.name+" has been created!":""}))})},h.createList=function(e){var t=o.prompt().title("What would you name your list?").placeholder("List name").ariaLabel("List name").targetEvent(e).ok("Ok").cancel("Cancel");return o.show(t).then(function(e){if(e)return s.cmList.save({name:e});u.error({title:"Error creating list!",msg:"Invalid list name."})}).then(function(e){e&&(h.lists.rows.push(e),u.success({title:"List properly created!",msg:e.name?e.name+" has been created!":""}))})},h.createCompany=function(e){var t=o.prompt().title("What would you name your company?").placeholder("Company name").ariaLabel("Company name").targetEvent(e).ok("Ok").cancel("Cancel");return o.show(t).then(function(e){if(e)return s.cmCompany.save({name:e});u.error({title:"Error creating company!",msg:"Invalid company name."})}).then(function(e){e&&(h.companies.rows.push(e),u.success({title:"Company properly created!",msg:e.name?e.name+" has been created!":""}))})},h.uploadContacts=function(e){o.show({controller:"UploadContactsDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/upload/upload.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!1,locals:{lists:r,companies:d}}).then(function(){h.getContacts()}).catch(function(e){console.error()})},h.importContacts=function(e,t,n){var a=JSON.parse(t);o.show({controller:"ImportContactsDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/import/import.html",parent:angular.element(i.body),clickOutsideToClose:!1,locals:{lists:r,companies:d,file:a.file,fields:a.fields,license:h.license}}).then(function(){h.getContacts()}).catch(function(e){console.error()})},h.hasPermission=function(){return p.hasPermission(303)||p.hasRole("admin")},a.params.ListId&&(h.selectedList=a.params.ListId),a.params.CompanyId&&(h.selectedCompany=a.params.CompanyId),t.$watch("vm.options.isOpen",function(e){e?n(function(){t.tooltipVisible=h.options.isOpen},600):t.tooltipVisible=h.options.isOpen});var b=!0,f=1;function A(e){h.contacts=e||{count:0,rows:[]}}function E(e){s.cmContact.delete({id:e.id}).$promise.then(function(){_.remove(h.contacts.rows,{id:e.id}),h.contacts.count-=1,h.contacts.rows.length||h.getContacts(),u.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){h.errors=e.data.errors||[{message:e.toString(),type:"api.contact.delete"}];for(var t=0;t<e.data.errors.length;t++)u.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else u.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){b?n(function(){b=!1}):(t||(f=h.query.page),e!==t&&(h.query.page=1),e||(h.query.page=f),h.getContacts())},!0),t.$watch("vm.selectedList",function(e,t){e!==t&&(h.query.ListId=h.selectedList||void 0,h.getContacts())}),t.$watch("vm.selectedCompany",function(e,t){e!==t&&(h.query.CompanyId=h.selectedCompany||void 0,h.getContacts())}),t.$watch("vm.selectedTags",function(e,t){(e.length||t.length)&&h.getContacts()})}e.$inject=["$scope","$document","$timeout","$state","$mdDialog","api","contacts","lists","listsMap","companies","companiesMap","tags","toasty","Auth","$stateParams","license"],angular.module("app.contactmanager").controller("ContactsController",e)}(),function(){"use strict";function e(n,a,e,t,i,o,s,r,l){var d=this;function c(){n.hide()}d.errors=[],d.title="CONTACTMANAGER.EDIT_CONTACT",d.contact=angular.copy(o),d.contacts=e||{rows:[],count:0},d.lists=t||{rows:[],count:0},d.companies=i||{rows:[],count:0},d.customFields={rows:[],count:0},d.newContact=!1,d.contact?(delete d.contact.List,d.ListId=d.contact.ListId||void 0):(d.contact={ListId:s?parseInt(s,10):void 0,CompanyId:r?parseInt(r,10):void 0},d.title="CONTACTMANAGER.NEW_CONTACT",d.newContact=!0),d.addNewContact=function(){d.errors=[],l.cmContact.save(d.contact).$promise.then(function(e){d.contacts.unshift(e),a.success({title:"Contact properly created",msg:d.contact.name?d.contact.name+" has been created!":""}),c()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.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()})})},d.saveContact=function(){d.errors=[],l.cmContact.update({id:d.contact.id},d.contact).$promise.then(function(e){var t=_.find(d.contacts,{id:e.id});t&&_.merge(t,e),a.success({title:"Contact properly saved!",msg:d.contact.name?d.contact.name+" has been saved!":""}),c()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.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()})})},d.deleteContact=function(e){d.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:d.contact.id}).$promise.then(function(){_.remove(d.contacts,{id:d.contact.id}),a.success({title:"Contact properly deleted!",msg:d.contact.name?d.contact.name+" has been deleted!":""}),c()}).catch(function(e){console.error(e),d.errors=e.data.errors||[{message:e.toString(),type:"api.contact.delete"}]})},function(){})},d.closeDialog=c,d.getCustomFields=function(e){{if(e)return l.cmList.getCustomFields({id:e}).$promise.then(function(e){e&&(d.customFields=e)}).catch(function(e){console.error(e)});d.customFields={rows:[],count:0}}},d.getDateFromString=function(e){return new Date(e)}}e.$inject=["$mdDialog","toasty","contacts","lists","companies","contact","ListId","CompanyId","api"],angular.module("app.tools").controller("CreateOrEditContactDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o){var s=this;function r(){e.hide()}s.errors=[],s.title="CONTACTMANAGER.COPY_CONTACT",s.contact=angular.copy(n),s.lists=i||{rows:[],count:0},s.addNewContact=function(){s.errors=[],delete s.contact.id,s.contact.tags&&!s.contact.tags.length&&delete s.contact.tags;o.cmContact.save(s.contact).$promise.then(function(e){a.unshift(e),t.success({title:"Contact properly created",msg:s.contact.name?s.contact.name+" has been created!":""}),r()}).catch(function(e){console.error(e),s.errors=e.data.errors||[{message:e.toString(),type:"api.contact.save"}]})},s.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,o,s,r){var l=this;function d(e){a.hide(e)}l.errors=[],l.title="CONTACTMANAGER.EDIT_HOPPER",l.hopper=angular.copy(s),l.hoppers=o,l.newHopper=!1,l.hopper||(l.hopper={},l.title="CONTACTMANAGER.NEW_HOPPER",l.newHopper=!0),l.saveHopper=function(){l.errors=[],r.cmHopper.update({id:l.hopper.id},l.hopper).$promise.then(function(e){var t=_.find(l.hoppers,{id:e.id});t&&_.merge(t,e),i.success({title:"Hopper properly saved!",msg:l.hopper.name?l.hopper.name+" has been saved!":""}),d(e)}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.update"}]})},l.getDateFromString=function(e){return new Date(e)},l.closeDialog=d}e.$inject=["$scope","$state","$location","$mdDialog","toasty","hoppers","hopper","api"],angular.module("app.contactmanager.contacts").controller("EditHopperDialogController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d,c,m,u,p,g,v,h,b){var f=this;f.license=b,f.journey=[],f.contact=r||{},f.hoppers=l||{rows:[],count:0},f.finals=d||{rows:[],count:0},f.histories=c||{rows:[],count:0},f.companies=u||{rows:[],count:0},f.lists=p||{rows:[],count:0},f.customFields=g||{rows:[],count:0},f.tags=v||{rows:[],count:0},f.jscriptySessions=h||{rows:[],count:0},f.timelineOptions={scrollEl:"#interaction-content"},f.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"),"")}),f.queryHopper={fields:"id,phone,scheduledat,priority,recallme,VoiceQueueId,CampaignId,UserId",sort:"-updatedAt",limit:10,page:1},f.queryFinal={fields:"id,uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-id",limit:10,page:1},f.queryHistory={fields:"id,uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-id",limit:10,page:1},f.queryJscriptySession={fields:"id,starttime,endtime,membername,projectname",sort:"-starttime",limit:10,page:1},f.selectedTab=t.params.tab||0,f.gotoContacts=function(){t.go("app.contactmanager.contacts",{},{reload:!0,notify:!0})},f.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",function(e){return e.resolve("cmList@get",{fields:"id,name"})}]},locals:{contacts:m.rows,contact:r}})},f.saveContact=function(){s.cmContact.update({id:f.contact.id},f.contact).$promise.then(function(){o.success({title:"Contact updated!",msg:f.contact.name?f.contact.name+" has been updated!":""})}).then(function(){return s.cmContact.setTags({id:f.contact.id,ids:f.Tags}).$promise}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEcontact",msg:e.data?JSON.stringify(e.data):e.toString()})})},f.editCompany=function(e,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},resolve:{company:["apiResolver",function(e){return e.resolve("cmCompany@get",{id:t})}]}})},f.onSelectList=function(e){if(f.contact.ListId){var t=i.confirm().title("You are selecting the list number: "+f.contact.ListId).textContent("Warning! You won't select a different list for the contact "+f.contact.firstName||f.contact.lastName||f.contact.id).targetEvent(e).ok("Ok").cancel("Cancel");return i.show(t).then(f.onSelectListSuccess).catch(function(){f.contact.ListId=null})}},f.onSelectListSuccess=function(){return s.cmList.getCustomFields({id:f.contact.ListId}).$promise.then(function(e){f.customFields=e||{rows:[],count:0}}).catch(function(e){console.error(e)})},f.getDateFromString=function(e){return new Date(e)},f.getHoppers=function(){f.queryHopper.offset=(f.queryHopper.page-1)*f.queryHopper.limit,f.queryHopper.id=f.contact.id,f.promise=s.cmContact.getHoppers(f.queryHopper,y("hoppers")).$promise},f.getFinals=function(){f.queryFinal.offset=(f.queryFinal.page-1)*f.queryFinal.limit,f.queryFinal.id=f.contact.id,f.promise=s.cmContact.getHopperFinals(f.queryFinal,y("finals")).$promise},f.getHistories=function(){f.queryHistory.offset=(f.queryHistory.page-1)*f.queryHistory.limit,f.queryHistory.id=f.contact.id,f.promise=s.cmContact.getHopperHistories(f.queryHistory,y("histories")).$promise},f.getJscriptySessions=function(){f.queryJscriptySession.offset=(f.queryJscriptySession.page-1)*f.queryJscriptySession.limit,f.queryJscriptySession.id=f.contact.id,f.promise=s.cmContact.getJscriptySessions(f.queryJscriptySession,y("jscriptySessions")).$promise},f.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,s.cmHopper.delete({id:e.id}).$promise.then(function(){_.remove(f.hoppers.rows,{id:e.id}),f.hoppers.count--,f.hoppers.rows.length||f.getHoppers(),o.success({title:"Hopper deleted!",msg:e.phone?e.phone+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEhopper",msg:e.data?JSON.stringify(e.data):e.toString()})})},function(){console.log("CANCEL")})},f.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:f.hoppers.rows,license:null,setting:null}})},f.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:f.hoppers.rows,license:null,setting:null}})},f.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 A=!0,E=1;function y(t){return function(e){f[t]=e||{count:0,rows:[]}}}function S(e){e&&e.count&&e.rows.length&&(f.journey=_.concat(f.journey,e.rows))}e.$watch("vm.queryHopper.filter",function(e,t){A?n(function(){A=!1}):(t||(E=f.queryHopper.page),e!==t&&(f.queryHopper.page=1),e||(f.queryHopper.page=E),f.getHoppers())}),e.$watch("vm.queryFinal.filter",function(e,t){A?n(function(){A=!1}):(t||(E=f.queryFinal.page),e!==t&&(f.queryFinal.page=1),e||(f.queryFinal.page=E),f.getFinals())}),e.$watch("vm.queryHistory.filter",function(e,t){A?n(function(){A=!1}):(t||(E=f.queryHistory.page),e!==t&&(f.queryHistory.page=1),e||(f.queryHistory.page=E),f.getHistories())}),s.user.get({fields:"id,fullname",nolimit:!0}).$promise.then(function(e){f.users=e||{count:0,rows:[]},f.usersMap=_.mapValues(_.keyBy(f.users.rows,"id"),"fullname"),f.Tags=_.map(f.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++)s[t[n]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(S);s.voiceCallReport.get({fields:"id,uniqueid,type,source,destination,callerid,starttime,endtime,duration,disposition,amaflags,note,UserId,ContactId",ContactId:e.id,includeAll:!0}).$promise.then(S).catch(function(e){console.error(e)})}}(r))}e.$inject=["$scope","$timeout","$state","$document","$mdDialog","toasty","api","contact","hoppers","finals","histories","contacts","companies","lists","customFields","tags","jscriptySessions","license"],angular.module("app.contactmanager.contacts").controller("ContactController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,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=o||{rows:[],count:0},g.companies=s||{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,o,t,s,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(s,{id:n.id}),_.remove(s,{id:t.id}),s.unshift(e)}).then(function(){o.success({title:"Contact properly merged!"})}).catch(function(e){e&&e.status&&o.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(e,t,n,a,i,o,s,r,l,d,c){var m=this,u=moment().unix();d.on("contact:csv_"+u,function(t){i(function(){m.uploading=!0,m.success+=t.success,m.errors+=t.errors,m.duplicate+=t.duplicates;for(var e=0;e<t.rows.length;e+=1)m.rows.push(t.rows[e]);t.finished&&(m.uploading=!1,m.finished=!0,m.disableStopButton=!0)})}),m.uploading=!1,m.showStopButton=!1,m.success=0,m.errors=0,m.duplicate=0,m.rows=[],m.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}],m.binding={},m.lists=o||{rows:[],count:0},m.companies=s||{rows:[],count:0},m.customFields={rows:[],count:0},m.ngFlowOptions={maxChunkRetries:1,chunkSize:15728640,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,target:"api/cm/contacts/csv",allowDuplicateUploads:!0},m.ngFlow={flow:{}},m.closeDialog=function(){d.removeAllListeners("contact:csv_"+u),t.hide()},m.onChangeList=function(){return l.cmList.getCustomFields({id:m.ListId}).$promise.then(function(e){m.customFields=e}).catch(function(e){console.error(e)})},m.uploadCsv=function(){m.uploading=!0,m.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},m.ngFlow.flow.opts.query={},m.ngFlow.flow.opts.query.binding_keys=_.keys(m.binding),m.ngFlow.flow.opts.query.binding_values=_.values(m.binding),m.ngFlow.flow.opts.query.ListId=m.ListId,m.ngFlow.flow.opts.query.socket_timestamp=u,m.CompanyId&&(m.ngFlow.flow.opts.query.CompanyId=m.CompanyId);m.duplicates&&(m.ngFlow.flow.opts.query.duplicates=m.duplicates);console.log("Flow options are:",m.ngFlow.flow.opts),m.ngFlow.flow.upload()},m.exportErrors=function(){for(var e=angular.copy(m.rows),t=0;t<e.length;t+=1)e[t].contact&&(e[t].contact=JSON.stringify(e[t].contact));return angular.copy(e)},m.fileAdded=function(e,t,n){Papa.parse(t.file,{skipEmptyLines:!0,header:!0,complete:function(e){console.log("csv file resultss",e),m.fields=e.meta.fields,m.fileSelected=!0,c.$apply()}})},m.fileSuccess=function(e,t,n){console.log("filessuccess",e,t,n);try{var a=JSON.parse(t);if(!a.pid)throw new Error("No pid parameter from api response!");m.pid=a.pid,m.showStopButton=!0}catch(e){console.error("Unable to parse upload result",e)}},m.stopUpload=function(){if(m.disableStopButton=!1,m.pid)return l.system.killProcess({pid:m.pid}).$promise.then(function(e){console.log("CSV upload process stopped!")}).catch(function(e){console.error(e)});console.error("pid is not defined")},c.$on("$destroy",function(){d.removeAllListeners("contact:csv_"+u)})}e.$inject=["$cookies","$mdDialog","$interval","$q","$timeout","lists","companies","toasty","api","socket","$scope"],angular.module("app.tools").controller("UploadContactsDialogController",e)}(),function(){"use strict";function e(a,e,t,n,i,o,s,r,l,d,c,m){var u=this;function p(e){n.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CONTACTMANAGER.EDIT_GLOBALCUSTOMFIELD",u.sortable={animation:800,sort:!0,onSort:function(e){a.globalCustomFieldForm.$pristine=!1}},u.globalCustomField=r,u.globalCustomFields=s,u.newGlobalCustomField=!1,u.globalCustomField||(u.globalCustomField={type:"text"},u.title="CONTACTMANAGER.NEW_GLOBALCUSTOMFIELD",u.newGlobalCustomField=!0),a.$watch("vm.globalCustomField.type",function(e,t){if(e!==t)switch(e){case"text":u.globalCustomField.values="";break;case"select":u.globalCustomField.values=[]}}),u.addNewGlobalCustomField=function(){u.errors=[],l.cmCustomField.save(u.globalCustomField).$promise.then(function(e){u.globalCustomFields.unshift(e.toJSON()),o.success({title:"GlobalCustomField properly created",msg:u.globalCustomField.name?u.globalCustomField.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveGlobalCustomField=function(){u.errors=[],l.cmCustomField.update({id:u.globalCustomField.id},u.globalCustomField).$promise.then(function(e){var t=_.find(u.globalCustomFields,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"GlobalCustomField properly saved!",msg:u.globalCustomField.name?u.globalCustomField.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteGlobalCustomField=function(e){u.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(){l.cmCustomField.delete({id:u.globalCustomField.id}).$promise.then(function(){_.remove(u.globalCustomFields,{id:u.globalCustomField.id}),o.success({title:"GlobalCustomField properly deleted!",msg:(u.globalCustomField.name||"globalCustomField")+" has been deleted!"}),p(u.globalCustomField)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,u.addItem=function(e){e.push({value:"New Item"}),a.globalCustomFieldForm.$pristine=!1},u.removeItem=function(e,t){e.splice(t,1),a.globalCustomFieldForm.$pristine=!1},u.removeItems=function(e){for(var t=e.length,n=0;n<t;n++)e.splice(0,1);a.globalCustomFieldForm.$pristine=!1}}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","globalCustomFields","globalCustomField","api","Auth","license","setting"],angular.module("app.contactmanager").controller("CreateOrEditGlobalCustomFieldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.globalCustomFields=r||{count:0,rows:[]},v.table="globalCustomFields",v.listOrder="",v.listOrderAsc=null,v.selectedGlobalCustomFields=[],v.query={fields:"createdAt,updatedAt,id,alias,type,values,required",sort:"-updatedAt",ListId:"null",limit:10,page:1},v.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"),"")}),v.editdialog=function(e,t){i.show({controller:"CreateOrEditGlobalCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/globalCustomFields/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{globalCustomField:e,globalCustomFields:v.globalCustomFields.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the globalCustomField?").htmlContent("<b>"+(e.name||"globalCustomField")+"</b> will be deleted.").ariaLabel("delete globalCustomField").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getGlobalCustomFields=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.cmCustomField.get(v.query,f).$promise},v.createOrEditGlobalCustomField=function(e,t){i.show({controller:"CreateOrEditGlobalCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/globalCustomFields/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{globalCustomField:t,globalCustomFields:v.globalCustomFields.rows,license:v.license,setting:v.setting}})},v.deleteGlobalCustomField=A,v.exportSelectedGlobalCustomFields=function(){var e=angular.copy(v.selectedGlobalCustomFields);return v.selectedGlobalCustomFields=[],e},v.deleteSelectedGlobalCustomFields=function(e){var t=i.confirm().title("Are you sure want to delete the selected globalCustomFields?").htmlContent("<b>"+v.selectedGlobalCustomFields.length+" selected</b> will be deleted.").ariaLabel("delete GlobalCustomFields").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedGlobalCustomFields.forEach(function(e){A(e)}),v.selectedGlobalCustomFields=[]})},v.deselectGlobalCustomFields=function(){v.selectedGlobalCustomFields=[]},v.selectAllGlobalCustomFields=function(){v.selectedGlobalCustomFields=v.globalCustomFields.rows};var h=!0,b=1;function f(e){v.globalCustomFields=e||{count:0,rows:[]}}function A(e){l.cmCustomField.delete({id:e.id}).$promise.then(function(){_.remove(v.globalCustomFields.rows,{id:e.id}),v.globalCustomFields.count-=1,v.globalCustomFields.rows.length||v.getGlobalCustomFields(),c.success({title:"GlobalCustomField deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmCustomField"}];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:"SYSTEM:DELETEcmCustomField",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getGlobalCustomFields())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","globalCustomFields","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("GlobalCustomFieldsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CONTACTMANAGER.EDIT_LIST",u.list=angular.copy(r),u.lists=s,u.newList=!1,u.list||(u.list={},u.title="CONTACTMANAGER.NEW_LIST",u.newList=!0),u.addNewList=function(){u.errors=[],l.cmList.save(u.list).$promise.then(function(e){u.lists.unshift(e.toJSON()),o.success({title:"List properly created",msg:u.list.name?u.list.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveList=function(){u.errors=[],l.cmList.update({id:u.list.id},u.list).$promise.then(function(e){var t=_.find(u.lists,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"List properly saved!",msg:u.list.name?u.list.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteList=function(e){u.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(){l.cmList.delete({id:u.list.id}).$promise.then(function(){_.remove(u.lists,{id:u.list.id}),o.success({title:"List properly deleted!",msg:(u.list.name||"list")+" has been deleted!"}),p(u.list)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","lists","list","api","Auth","license","setting"],angular.module("app.contactmanager").controller("CreateOrEditListDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.cmList[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.list.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserList?"penalty "+e.UserList.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserList?"penalty "+e.UserList.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.list=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("CONTACTMANAGER.ALL_AGENTS"),labelSelected:s.instant("CONTACTMANAGER.SELECTED_AGENTS"),transferCallback:function(e,t){a.cmList[t?"removeAgents":"addAgents"]({id:l.list.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"List properly "+(t?"removed":"added"),msg:"List has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:cmList.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","list","lists","realtime","$translate","Auth"],angular.module("app.contactmanager").controller("ListagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.list={},c.listCustomFields={count:0,rows:[]},c.selectedListCustomFields=[],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){c.list=e,c.query.id=c.list.id,c.query.ListId=c.list.id,c.getListCustomFields()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/customFields/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:c.list,customField:t,customFields:c.listCustomFields.rows,license:null,setting:null}})},c.exportSelectedListCustomFields=function(){var e=angular.copy(c.selectedListCustomFields);return c.selectedListCustomFields=[],e},c.deleteListCustomField=g,c.deleteSelectedListCustomFields=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){n.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CONTACTMANAGER.EDIT_CUSTOMFIELD",u.sortable={animation:800,sort:!0,onSort:function(e){a.customFieldForm.$pristine=!1}},u.customField=r,u.customFields=s,u.newCustomField=!1,u.customField||(u.customField={type:"text"},u.title="CONTACTMANAGER.NEW_CUSTOMFIELD",u.newCustomField=!0),e.params.id&&(u.customField.ListId=e.params.id),a.$watch("vm.customField.type",function(e,t){if(e!==t)switch(e){case"text":u.customField.values="";break;case"select":u.customField.values=[]}}),u.addNewCustomField=function(){u.errors=[],l.cmList.addCustomField({id:e.params.id},u.customField).$promise.then(function(e){u.customFields.unshift(e.toJSON()),o.success({title:"CustomField properly created",msg:u.customField.name?u.customField.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveCustomField=function(){u.errors=[],l.cmCustomField.update({id:u.customField.id},u.customField).$promise.then(function(e){var t=_.find(u.customFields,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CustomField properly saved!",msg:u.customField.name?u.customField.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteCustomField=function(e){u.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(){l.cmCustomField.delete({id:u.customField.id}).$promise.then(function(){_.remove(u.customFields,{id:u.customField.id}),o.success({title:"CustomField properly deleted!",msg:(u.customField.name||"customField")+" has been deleted!"}),p(u.customField)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,u.addItem=function(e){e.push({value:"New Item"}),a.customFieldForm.$pristine=!1},u.removeItem=function(e,t){e.splice(t,1),a.customFieldForm.$pristine=!1},u.removeItems=function(e){for(var t=e.length,n=0;n<t;n++)e.splice(0,1);a.customFieldForm.$pristine=!1}}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","customFields","customField","api","Auth","license","setting"],angular.module("app.contactmanager").controller("CreateOrEditCustomFieldDialogController",e)}(),function(){"use strict";function e(n,e,a,i,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.list=d||n.params.list||{},c.selectedTab=n.params.tab||0,c.gotogoto=function(e,t){n.go("app.contactmanager.contacts",{ListId:e.id})},c.agentadddialog=function(e,t){a.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:c.lists?c.lists.rows:[],realtime:!1}})},c.alert=r.info,c.gotoLists=function(){n.go("app.contactmanager.lists")},c.saveList=function(){s.cmList.update({id:c.list.id},c.list).$promise.then(function(){r.success({title:"List updated!",msg:c.list.name?c.list.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","list"],angular.module("app.contactmanager").controller("ListController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.list={},c.listVoiceDispositions={count:0,rows:[]},c.selectedListVoiceDispositions=[],c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e){c.list=e,c.query.id=c.list.id,c.query.ListId=c.list.id,c.getListVoiceDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditVoiceDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/voiceDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:c.list,voiceDisposition:t,voiceDispositions:c.listVoiceDispositions.rows,license:null,setting:null}})},c.exportSelectedListVoiceDispositions=function(){var e=angular.copy(c.selectedListVoiceDispositions);return c.selectedListVoiceDispositions=[],e},c.deleteListVoiceDisposition=g,c.deleteSelectedListVoiceDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="CONTACTMANAGER.EDIT_VOICEDISPOSITION",u.voiceDisposition=angular.copy(r),u.voiceDispositions=s,u.newVoiceDisposition=!1,u.voiceDisposition||(u.voiceDisposition={},u.title="CONTACTMANAGER.NEW_VOICEDISPOSITION",u.newVoiceDisposition=!0),t.params.id&&(u.voiceDisposition.ListId=t.params.id),u.addNewVoiceDisposition=function(){u.errors=[],l.disposition.save(u.voiceDisposition).$promise.then(function(e){u.voiceDispositions.unshift(e.toJSON()),o.success({title:"VoiceDisposition properly created",msg:u.voiceDisposition.name?u.voiceDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVoiceDisposition=function(){u.errors=[],l.disposition.update({id:u.voiceDisposition.id},u.voiceDisposition).$promise.then(function(e){var t=_.find(u.voiceDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceDisposition properly saved!",msg:u.voiceDisposition.name?u.voiceDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVoiceDisposition=function(e){u.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(){l.disposition.delete({id:u.voiceDisposition.id}).$promise.then(function(){_.remove(u.voiceDispositions,{id:u.voiceDisposition.id}),o.success({title:"VoiceDisposition properly deleted!",msg:(u.voiceDisposition.name||"voiceDisposition")+" has been deleted!"}),p(u.voiceDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","voiceDispositions","voiceDisposition","api","Auth","license","setting"],angular.module("app.contactmanager").controller("CreateOrEditVoiceDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.lists=r||{count:0,rows:[]},v.table="lists",v.listOrder="",v.listOrderAsc=null,v.selectedLists=[],v.query={fields:"createdAt,updatedAt,id,name,description,dialPrefix",sort:"-updatedAt",limit:10,page:1},v.editstate=function(e,t){n.go("app.contactmanager.lists.edit",{id:e.id,list:e})},v.gotocontactsgoto=function(e,t){n.go("app.contactmanager.contacts",{ListId:e.id})},v.exportcsvcontactsexport=function(i,e){return l.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 c.info({title:"EXPORT",msg:"The list is empty"})}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmList",msg:e.data?JSON.stringify(e.data):e.toString()})})},v.agentadddialog=function(e,t){i.show({controller:"ListagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{list:e,lists:v.lists?v.lists.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the list?").htmlContent("<b>"+(e.name||"list")+"</b> will be deleted.").ariaLabel("delete list").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getLists=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.cmList.get(v.query,f).$promise},v.createOrEditList=function(e,t){i.show({controller:"CreateOrEditListDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:t,lists:v.lists.rows,license:v.license,setting:v.setting}})},v.deleteList=A,v.exportSelectedLists=function(){var e=angular.copy(v.selectedLists);return v.selectedLists=[],e},v.deleteSelectedLists=function(e){var t=i.confirm().title("Are you sure want to delete the selected lists?").htmlContent("<b>"+v.selectedLists.length+" selected</b> will be deleted.").ariaLabel("delete Lists").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedLists.forEach(function(e){A(e)}),v.selectedLists=[]})},v.deselectLists=function(){v.selectedLists=[]},v.selectAllLists=function(){v.selectedLists=v.lists.rows};var h=!0,b=1;function f(e){v.lists=e||{count:0,rows:[]}}function A(e){l.cmList.delete({id:e.id}).$promise.then(function(){_.remove(v.lists.rows,{id:e.id}),v.lists.count-=1,v.lists.rows.length||v.getLists(),c.success({title:"List deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmList"}];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:"SYSTEM:DELETEcmList",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getLists())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","lists","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("ListsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s){var r=this;r.currentUser=o.getCurrentUser(),r.customDashboard={},r.voiceQueues=s&&s.count?s:{count:0,rows:[]},r.voiceQueuesSelected=s&&s.count?_.map(s.rows,"id"):[],r.interval=t(function(){},1e3),r.onChangeVoiceQueues=function(){for(var e=0;e<r.customDashboard.widgets.length;e+=1)r.customDashboard.widgets[e].voiceQueuesSelected=r.voiceQueuesSelected},r.goToEdit=function(){e.go("app.tools.customDashboards.edit",{id:r.customDashboard.id,tab:1})},i.onWithoutApply("voice_queue:save",function(e){var t=_.find(r.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 r.customDashboard=e,r.customDashboard.widgets=[],r.customDashboard.preview=!0,r.customDashboard.draggable={enabled:!1},r.customDashboard.resizable={enabled:!1},a.dashboard.getItems({id:r.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=r.voiceQueues,e.rows[t].voiceQueuesSelected=r.voiceQueuesSelected,r.customDashboard.widgets.push(e.rows[t])}).catch(function(e){r.customDashboard=void 0}),n.$on("$destroy",function(){i.removeAllListeners("voice_queue:save"),r.interval&&t.cancel(r.interval)})}e.$inject=["$state","$interval","$scope","api","socket","Auth","voiceQueues"],angular.module("app.dashboards.custom").controller("DashboardCustomController",e)}(),function(){"use strict";function e(e,n,a,s,i,t,l,o,r,d,c,m,u,p,g,v,h){var b=this;b.license=p,b.setting=g;function f(e){var t={};for(var n in b.tabs)b.tabs.hasOwnProperty(n)&&(t[n]=b.tabs[n],b.tabs[n].interaction&&(t[n].interaction=_.pick(b.tabs[n].interaction,["id","OpenchannelAccountId","MailAccountId","ChatWebsiteId","FaxAccountId","SmsAccountId","closed","draft"])));a.localStorage.setItem("motion2.user:"+b.user.id,JSON.stringify({tabs:t,currentTab:b.currentTab})),A(e)}function A(e){if(_.isNil(e)||e&&"interaction"===e.type){var t={id:b.user.id,online:!0,capacity:{mail:0,fax:0,sms:0,openchannel:0,chat:0},interaction:{mail:[],fax:[],sms:[],openchannel:[],chat:[]}};for(var n in b.tabs)b.tabs.hasOwnProperty(n)&&t.capacity.hasOwnProperty(b.tabs[n].channel)&&b.tabs[n].interaction&&!b.tabs[n].interaction.closed&&(t.capacity[b.tabs[n].channel]+=1,t.interaction[b.tabs[n].channel].push(b.tabs[n].interaction.id));return l.rpc.setAgentCapacity(t)}console.log("No capacity updated")}function E(t){if(b.tabs[t.id]&&(function(e){if(e.channel&&e.interaction)l.user["remove"+_.upperFirst(e.channel)+"Interactions"]({id:b.user.id,ids:[e.interaction.id]}).$promise.catch(function(e){console.error(e)})}(b.tabs[t.id]),delete b.tabs[t.id],b.currentTab=0,f(t),"interaction"===t.type))return l[t.channel+"Interaction"].get({id:t.interaction.id}).$promise.then(function(e){return l.user["remove"+_.upperFirst(t.channel)+"Interactions"]({id:b.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,b.tabs[e.id]=e,b.currentTab=e.id,f(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(b.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id===n.id&&e.channel===t});a?b.currentTab=a.id:y(e)}function T(e){e&&e.uniqueid&&b.notifications[e.uniqueid]&&(r.clear(b.notifications[e.uniqueid]),delete b.notifications[e.uniqueid])}function C(e,t){return 0<=t&&(e.calls[t].disposedAt=new Date,o.removeAllListeners("voice_queue_channel:remove"),o.removeAllListeners("voice_outbound_channel:remove"),!0)}function x(){return function(e){if(404===e.status)r.warning({title:s.instant("DASHBOARDS.ATTENTION"),msg:s.instant("DASHBOARDS.ACCEPT_ELSEWHERE")});else if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelMessage.accept"}];for(var t=0;t<e.data.errors.length;t+=1)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.openchannelMessage.accept",msg:e.data?JSON.stringify(e.data.message):e.toString()})}}b.detectBrowser=h.detectBrowser(),b.user=t.getCurrentUser(),b.currentTab=0,b.notifications={},b.tabs={},b.globalUserLists=d||{count:0,rows:[]},b.globalLists=c||{count:0,rows:[]},b.globalCompanies=m||{count:0,rows:[]},b.globalTags=u||{count:0,rows:[]},b.onContactManager=function(t){var e={ListId:t.ListId,limit:1,offset:0,sort:"-updatedAt"},n=!1,a=t.calleridname&&"<unknown>"!==t.calleridname?t.calleridname:t.calleridnum||t.uniqueid,i=t.calleridnum;_.isNil(t["xmd-contactid"])?_.isNil(t.routeId)?e.phone=t.calleridnum:(e.phone=t.destcalleridnum,a=t.destcalleridname&&"<unknown>"!==t.destcalleridname?t.destcalleridname:t.destcalleridnum||t.uniqueid,i=t.destcalleridnum):(e.id=t["xmd-contactid"],n=!0,_.isNil(t["xmd-listid"])||parseInt(t["xmd-listid"],10)===t.ListId||t["xmd-contactid2"]&&(e.id=t["xmd-contactid2"]));return l.cmContact.get(e).$promise.then(function(e){n?e&&b.addContactTab(e,t):e.count&&e.rows[0]?b.addContactTab(e.rows[0],t):b.addContactTab({firstName:a,ListId:t.ListId,phone:i},t)}).catch(x())},b.onJscripty=function(n){return l.jscriptyProject.get({id:n.ProjectId}).$promise.then(function(t){if(t){if(!_.isUndefined(n["xmd-contactid"]))return l.cmContact.get({id:n["xmd-contactid"]}).$promise.then(function(e){try{t.formData=Mustache.render(t.formData,_.merge(n,{user:b.user,contact:e}))}catch(e){console.error(e)}y({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n,contact:e})}).catch(x());try{t.formData=Mustache.render(t.formData,_.merge(n,{user:b.user}))}catch(e){console.error(e)}y({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n})}}).catch(x())},b.onBrowserUrl=function(e){if(e&&e.uri)if(e.uri=_.replace(e.uri,"&lt%3B",""),e.uri=_.replace(e.uri,"=&gt%3B=",""),e.uriLocation)switch(e.uriLocation){case"0":a.open(e.uri);break;case"1":a.open(e.uri,"_blank","width="+(e.windowWidth||"800")+",height="+e.windowHeight||"600");break;default:a.open(e.uri)}else a.open(e.uri)},b.onBrowserPopup=function(e){e&&e.html&&y({type:"popup",title:e.calleridnum||"popup",icon:"icon-tablet",color:"grey",html:e.html})},b.onNotificationSave=function(e){if(e&&e.uniqueid){n=e,v.isSupported()?v.requestPermission().then(function(){var e,t;t={autoClose:!0,duration:10,showOnPageHidden:!0,icon:"../../../../../../../assets/images/avatars/customer.png",body:(e=n).queue?"Queue: "+e.queue:"",focusOnclick:!0,closeOnClick:!0},v.show(e.title,t)},function(e){console.error("Please enable browser notifications!",e)}):console.error("Browser notifications are not supported by the browser. Normal notifications will be used.");var t=b.alreadyExistsTab(e);if(t){if(l[e.channel+"Message"])return b.currentTab!==t.id&&(t.badges+=1),l[e.channel+"Message"].accept({id:e.id,UserId:b.user.id}).$promise.catch(x())}else r.wait({title:e.title,msg:e.msg||"",showClose:!1,clickToClose:!1,timeout:!1,sound:e.sound,html:!0,shake:e.shake||!1,onAdd:function(){b.notifications[e.uniqueid]=this.id},onAccept:function(){if(T(e),l[e.channel+"Message"])return l[e.channel+"Message"].accept({id:e.id,UserId:b.user.id,manual:!0}).$promise.then(function(e){S(e.channel,e.interaction),r.success({title:"Message properly accepted!",msg:"Message has been accepted!"})}).catch(x())},onReject:function(){if(T(e),l[e.channel+"Message"])return l[e.channel+"Message"].reject({id:e.id,UserId:b.user.id}).$promise.then(function(e){r.success({title:"Message properly rejected!",msg:"Message has been rejected!"})}).catch(x())}})}var n},b.onNotificationRemove=T,b.onVoiceChannelRemove=function(t){var e=b.currentTab?b.tabs[b.currentTab]:null;e||(e=_.find(b.tabs,{calls:[{uniqueid:t.uniqueid}]}));var n=_.findLastIndex(e.calls,function(e){return e.uniqueid===t.uniqueid});if(!C(e,n)){var a=_.find(b.tabs,{calls:[{uniqueid:t.uniqueid}]});if(a){var i=_.findLastIndex(a.calls,function(e){return e.uniqueid===t.uniqueid});C(a,i)}}b.contact&&b.contact.id&&$timeout((o=t.uniqueid,s=b.contact.id,r=e,function(){var e=_.find(r.calls,function(e){return e.uniqueid===o});if(e)return l.voiceCallReport.update({id:o,ContactId:s}).$promise.catch(function(e){console.error(e)})}),1e3);var o,s,r},b.onClickTab=function(e){b.currentTab=e,f(b.tabs[e])},b.isActiveTab=function(e){return e===b.currentTab},b.alreadyExistsTab=function(t){return _.find(b.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id==t.interactionId&&e.channel==t.channel})},b.addContactTab=function(t,n){var a={type:"contact",title:t?function(e){var t="";e&&(e.firstName||e.lastName?(e.firstName&&(t+=e.firstName+" "),e.lastName&&(t+=e.lastName)):e.phone&&(t=e.phone));return t}(t):s.instant("DASHBOARDS.NEW_CONTACT"),icon:"icon-account-circle",color:"red",contact:t,userLists:d,lists:c,companies:m,tags:u,calls:n?[n]:[],autoCreate:n?n.autoCreate:0};if(n){if(n["xmd-cdrtype"]&&"dialer"===n["xmd-cdrtype"])n.answeredAt=n.agentcalledAt?moment(n.agentcalledAt,"YYYY-MM-DD HH:mm:ss").toDate():new Date;else if(n.uniqueid){var e=n.uniqueid.split(".")[0];n.answeredAt=e?new Date(1e3*parseInt(e)):new Date}(n.agentcompleteAt||n.endtime)&&(n.disposedAt=new Date)}if(t){var i=_.find(b.tabs,function(e){return e.contact&&e.contact.id?"contact"===e.type&&e.contact&&e.contact.id==t.id:"contact"===e.type&&e.contact&&e.contact.phone==t.phone});if(i){if(n)if(i.calls){var o=_.find(i.calls,function(e){return e.uniqueid===n.uniqueid});o||i.calls.push(n)}else i.calls=[n];b.currentTab=i.id}else{if(t.ListId)return l.disposition.get({ListId:t.ListId}).$promise.then(function(e){return a.dispositions=e,l.cmList.getCustomFields({id:t.ListId}).$promise}).then(function(e){a.customFields=e}).catch(x()).finally(function(){y(a)});y(a)}}else y(a)},b.addInteractionTab=S,b.addTab=y,b.removeTab=E,b.updateLocalStorage=f,b.closeTab=function(e){var t=n.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 n.show(t).then(function(){"interaction"===e.type&&n.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(i.body),clickOutsideToClose:!0,locals:{user:b.user,channel:e.channel,interaction:e.interaction}}),E(e)}).catch(function(){"interaction"===e.type&&E(e)});if("contact"===e.type&&0<e.calls.length)return t._options.textContent="There is a call that hasn't been disposed yet.",n.show(t).then(function(){E(e)});E(e)}},o.on("trigger:contactmanager",b.onContactManager),o.on("trigger:jscripty",b.onJscripty),o.on("trigger:browser:url",b.onBrowserUrl),o.on("trigger:browser:popup",b.onBrowserPopup),o.on("notification:save",b.onNotificationSave),o.on("notification:remove",b.onNotificationRemove),function(){var e=a.localStorage.getItem("motion2.user:"+b.user.id);if(e)try{e=JSON.parse(e),b.tabs=e.tabs?e.tabs:{},b.currentTab=e.currentTab?e.currentTab:0,A(b.tabs[b.currentTab])}catch(e){console.error(e)}}(),e.$on("$destroy",function(){for(var e in b.notifications)b.notifications.hasOwnProperty(e)&&T({uniqueid:e});o.removeAllListeners("trigger:contactmanager"),o.removeAllListeners("trigger:jscripty"),o.removeAllListeners("trigger:browser:url"),o.removeAllListeners("trigger:browser:popup"),o.removeAllListeners("notification:save"),o.removeAllListeners("notification: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 b={autoClose:!0,duration:5,showOnPageHidden:!1};return{config:function(e){for(var t in e)b.hasOwnProperty(t)&&null!=e[t]&&(b[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),o=!a.onClick||angular.isFunction(a.onClick),!i||!o)||function(e){if(e||b.showOnPageHidden)return!(window.document.hidden||window.document.mozHidden||window.document.webkitHidden)}(t.showOnPageHidden)||h()!==p.GRANTED)return;var n,a,i,o;var s=new g(e,t),r=t.duration||b.duration,l=void 0===t.autoClose?b.autoClose:t.autoClose;s.onclick=function(){t.onClick&&t.onClick(),t.focusOnclick&&window.focus(),t.closeOnClick&&s.close()},l&&(d=s,c=r,m=1e3*c,u(d.close.bind(d),m,!1));var d,c,m;return s},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,o=0;o<t.length;o++)if(t[o]._id===a){t=t[o].children,i=!1;break}if(i){var s={_id:a,_path:e.join("."),title:a,weight:1,children:[]};t.push(s),t=s.children}}return t}(n),o=!1,s=0;s<i.length;s++)if(i[s]._id===a){o=i[s];break}o?(angular.extend(o,t),o.uisref=d(o)):(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],o=0;o<t.length;o++)if(t[o]._id===i){if(t[o]._path===e)return t.splice(o,1),!0;t=t[o].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(s,r,n,l,d,c,t,e,a,i){var m=this;function o(e){e&&e.count&&e.rows.length&&(m.journey=_.concat(m.journey,e.rows))}m.user=t.getCurrentUser(),m.detectBrowser=i.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,t){if(m.newContact)return void c.error({title:"ATTENTION",msg:"Please save the contact before disposing!"});s.show({controller:"DisposeCallDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/contact/dispose/dialog.html",parent:angular.element(r.body),targetEvent:t,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:t}}).then(function(e){e&&("BLACKLIST"===e?c.success({title:a.instant("DASHBOARDS.INFO"),msg:a.instant("DASHBOARDS.CALL_DISPOSED")+" "+e}):"RECALLME"===e||"RESCHEDULE"===e||c.success({title:a.instant("DASHBOARDS.INFO"),msg:a.instant("DASHBOARDS.CALL_SAVED")})),_.remove(m.tab.calls,function(e){return e.uniqueid==t.uniqueid})})},m.duplicateContact=function(e){s.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){s.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){if(e)return new Date(e);return null},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 o=i.toLowerCase();s.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"==o?n:n.split(",")},type:"new",interaction:{Contact:m.contact}},fullscreen:!0}).then(function(a){return d[o+"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,s.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(o,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"===o?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(o);d.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(o).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},e.on("voice_queue_channel:remove",l.$parent.vm.onVoiceChannelRemove),e.on("voice_outbound_channel:remove",l.$parent.vm.onVoiceChannelRemove),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,o,s,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}}c.choice=null,c.isReschedule=!1,c.recallme=!1,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,s.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){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.getBlackLists",msg:e.data?JSON.stringify(e.data):e.toString()})})),c.saveDisposition=function(e){if(c.choice=_.isNil(e)?c.choice:e,c.call.note=c.note,s.voiceCallReport.update({id:c.call.uniqueid,userDisposition:c.choice,note:c.note,UserId:l.getCurrentUser().id,ContactId:c.contact.id}).$promise.catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICECALLREPORT",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.voiceRecording.get({uniqueid:c.call.uniqueid}).$promise.then(function(e){if(e)for(var t=0;t<e.rows.length;t+=1)s.voiceRecording.update({id:e.rows[t].id,userDisposition:c.choice}).$promise.catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICERECORDING",msg:e.data?JSON.stringify(e.data):e.toString()})})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICERECORDING",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.dialerCall)if(s.cmHopperFinal.update(m()).$promise.catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECMHOPPERFINAL",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.cmHopperHistory.update(m()).$promise.catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECMHOPPERHISTORY",msg:e.data?JSON.stringify(e.data):e.toString()})}),_.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)s.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(s.cmContact.save(a).$promise)}return i.all(t)}o.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){o.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():"")}else t.hide(c.choice?c.choice.toUpperCase():"")},c.closeDialog=function(){t.cancel()},c.saveReschedule=function(){return c.disable=!0,s.cmHopper.save({phone:c.contact.phone,UserId:c.recallme?l.getCurrentUser().id:null,ContactId:c.contact.id,ListId:c.contact.ListId,VoiceQueueId:Number(c.call["xmd-voicequeueid"]),scheduledat:moment(c.hopper.dateTime).format("YYYY-MM-DD HH:mm:ss"),priority:3,recallme:c.recallme}).$promise.then(function(){s.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(){o.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.cancel(e)}).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,o,s,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,s.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}).$promise.then(function(){s.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(){o.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,o,s,r,l,d,c){var m=this,u=!0;function p(){var e=i.localStorage.getItem("motion2.home.abandoned.bull.contacts:"+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")),s.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)}),s.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.getContacts()})}function g(e){m.contacts=e||{count:0,rows:[]},u=!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,dateEnd:null},m.queues={},m.contacts={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.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel={dateStart:null,dateEnd:null},m.getContacts()},m.getContacts=function(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&!u&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd);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.contacts:"+m.currentUser.id,JSON.stringify({query:_.omit(m.query,"queue")})),m.promise=s.voiceQueueReport.getVoiceQueuesReport(m.query,g).$promise},m.refreshContacts=function(){m.showTooltip=!1,m.getContacts()},m.onInit=p,m.reserved=function(e,t){e&&(m.disable[e.id]=!0,s.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.contacts.rows,["id",e.id]);0<=t&&_.merge(m.contacts.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),p();var v=!0,h=1;e.$watch("vm_bull.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.getContacts())}),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,o,s,r,l,d,c){var m=this,u=!0;function p(){var e=i.localStorage.getItem("motion2.home.abandoned.voice.contacts:"+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")),s.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)}),s.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.getContacts()})}function g(e){m.contacts=e||{count:0,rows:[]},u=!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,dateEnd:null},m.queues={},m.contacts={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.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel={dateStart:null,dateEnd:null},m.getContacts()},m.getContacts=function(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&!u&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd);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.contacts:"+m.currentUser.id,JSON.stringify({query:_.omit(m.query,"queue")})),m.promise=s.voiceQueueReport.getVoiceQueuesReport(m.query,g).$promise},m.refreshContacts=function(){m.showTooltip=!1,m.getContacts()},m.onInit=p,m.reserved=function(e,t){e&&(m.disable[e.id]=!0,s.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.contacts.rows,["id",e.id]);0<=t&&_.merge(m.contacts.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),p();var v=!0,h=1;e.$watch("vm_voice.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.getContacts())}),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,o,s){var r=this;r.user=i.getCurrentUser(),r.license={},r.plugin={},r.setting={},r.sidebar="dashboard",r.navigation=s.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,o,s,r,l,d){var c=this;function m(e){c.chatInteractions=e||{count:0,rows:[]};for(var t=0;t<c.chatInteractions.rows.length;t+=1)p(c.chatInteractions.rows[t])}function u(){c.query.dateStart=void 0,c.query.dateEnd=void 0,c.pickerModel.dateStart&&(c.query.dateStart=c.pickerModel.dateStart,c.query.dateEnd=c.pickerModel.dateEnd),c.chatAccounts.rows.length?(_.includes(_.map(c.chatAccounts.rows,"id"),c.query.account)||(c.query.account=null),c.query.ChatWebsiteId=c.query.account||_.map(c.chatAccounts.rows,"id").join()):c.query.ChatWebsiteId=-1,c.query.offset=(c.query.page-1)*c.query.limit,i.localStorage.setItem("motion2.home.chat:"+c.user.id,JSON.stringify({query:c.query})),c.promise=s.chatInteraction.get(c.query,m).$promise}function p(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}c.user=r.getCurrentUser(),c.license={},c.setting={},c.tags={count:0,rows:[]},c.chatInteractions={count:0,rows:[]},c.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null,account:null},c.success=m,c.getChatInteractions=u,c.showChatInteraction=function(e,t){n.$parent.vm.addInteractionTab("chat",t)},c.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 o.instant("DASHBOARDS.UNKNOWN")},c.getUserLabel=function(e){if(e.UserId)return e.UserId===r.getCurrentUser().id?o.instant("DASHBOARDS.ME"):c.usersByKey[e.UserId].fullname+" <"+c.usersByKey[e.UserId].internal+">";return o.instant("DASHBOARDS.NOT_ASSIGNED")},c.getChatWebsiteLabel=function(e){if(e.Account)return e.Account.key;return o.instant("DASHBOARDS.UNKNOWN")},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.clearAll=function(){c.calendarModel={dateStart:null},c.pickerModel={dateStart:null},c.serviceModel={dateStart:null},c.getChatInteractions()},c.onInit=function(e,t){return c.license=e,c.setting=t,s.user["get"+_.upperFirst("ChatWebsites")]({id:c.user.id,nolimit:!0}).$promise.then(function(e){return c.chatAccounts=e||{count:0,rows:[]},s.tag.get().$promise}).then(function(e){c.tags=e||{count:0,rows:[]}}).then(function(){return s.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){c.usersByKey=_.keyBy(e.rows,"id")}).catch(function(e){console.error(e)}).finally(function(){var e=i.localStorage.getItem("motion2.home.chat:"+c.user.id);if(e)try{(e=JSON.parse(e)).query&&(c.query=_.merge(c.query,e.query),c.query=_.omit(c.query,"filter"),c.query.sort&&0<=c.query.sort.indexOf("lastMessage")&&(c.query=_.omit(c.query,"sort")),c.query.includeAll=!0)}catch(e){console.error(e)}l.on("chatInteraction:save",c.onChatInteractionSave),l.on("chatInteraction:update",c.onChatInteractionSave),l.on("chatInteractionTags:save",c.onChatInteractionTagsSave),l.on("chatMessage:save",c.onChatMessageSave),l.on("chatMessage:update",c.onChatMessageSave),l.on("user_has_chat_interactions:save",c.onChatInteractionOpen),l.on("user_has_chat_interactions:remove",c.onChatInteractionClose),c.getChatInteractions()})},c.onChatInteractionSave=function(e){if(e){var t=_.find(c.chatInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):u(),p(e)}},c.onChatInteractionTagsSave=function(e){if(e){var t=_.find(c.chatInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},c.onChatMessageSave=function(e){if(e&&!e.secret){var t=_.find(c.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)),p(t)}}},c.onChatInteractionOpen=function(e){var t=_.find(c.chatInteractions.rows,{id:e.ChatInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},c.onChatInteractionClose=function(e){var t=_.find(c.chatInteractions.rows,{id:e.ChatInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},c.localizationMap={Today:o.instant("DASHBOARDS.TODAY"),Yesterday:o.instant("DASHBOARDS.YESTERDAY"),"This Week":o.instant("DASHBOARDS.THIS_WEEK"),"Last Week":o.instant("DASHBOARDS.LAST_WEEK"),"This Month":o.instant("DASHBOARDS.THIS_MONTH"),"Last Month":o.instant("DASHBOARDS.LAST_MONTH"),"This Year":o.instant("DASHBOARDS.THIS_YEAR"),"Last Year":o.instant("DASHBOARDS.LAST_YEAR"),January:o.instant("DASHBOARDS.JANUARY"),February:o.instant("DASHBOARDS.FEBRUARY"),March:o.instant("DASHBOARDS.MARCH"),April:o.instant("DASHBOARDS.APRIL"),May:o.instant("DASHBOARDS.MAY"),June:o.instant("DASHBOARDS.JUNE"),July:o.instant("DASHBOARDS.JULY"),August:o.instant("DASHBOARDS.AUGUST"),September:o.instant("DASHBOARDS.SEPTEMBER"),October:o.instant("DASHBOARDS.OCTOBER"),November:o.instant("DASHBOARDS.NOVEMBER"),December:o.instant("DASHBOARDS.DECEMBER"),Mon:o.instant("DASHBOARDS.MON"),Tue:o.instant("DASHBOARDS.TUE"),Wed:o.instant("DASHBOARDS.WED"),Thu:o.instant("DASHBOARDS.THU"),Fri:o.instant("DASHBOARDS.FRI"),Sat:o.instant("DASHBOARDS.SAT"),Sun:o.instant("DASHBOARDS.SUN")},c.pickerModel={dateStart:null};var g=!0,v=1;n.$watch("vm.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=v),c.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"],angular.module("app.dashboards").controller("AgentHomeChatController",e)}(),function(){"use strict";function e(n,t,a,i,e,o,s,r){var l=this;l.currentUser=o.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=s.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 s.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")),s.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,s.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,o,s,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=s.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),s.rpc.getVoiceQueues().$promise.then(function(e){return c.rpcVoiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},s.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,o,s,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=s.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),s.rpc.getChatQueues().$promise.then(function(e){c.rpcChatQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return s.user.getQueues({id:r.getCurrentUser().id,channel:"chat"}).$promise}).then(function(e){return c.myQueues=e.rows,s.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,b=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=b),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,o,s,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=s.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),s.rpc.getFaxQueues().$promise.then(function(e){c.rpcFaxQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return s.user.getQueues({id:r.getCurrentUser().id,channel:"fax"}).$promise}).then(function(e){return c.myQueues=e.rows,s.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,b=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=b),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,o,s,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=s.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),s.rpc.getMailQueues().$promise.then(function(e){c.rpcMailQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return s.user.getQueues({id:r.getCurrentUser().id,channel:"mail"}).$promise}).then(function(e){return c.myQueues=e.rows,s.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,b=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=b),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,o,s,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=s.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),s.rpc.getOpenchannelQueues().$promise.then(function(e){c.rpcOpenchannelQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return s.user.getQueues({id:r.getCurrentUser().id,channel:"openchannel"}).$promise}).then(function(e){return c.myQueues=e.rows,s.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,b=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=b),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,o,s,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=s.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),s.rpc.getSmsQueues().$promise.then(function(e){c.rpcSmsQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return s.user.getQueues({id:r.getCurrentUser().id,channel:"sms"}).$promise}).then(function(e){return c.myQueues=e.rows,s.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,b=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=b),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,o,s,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=s.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),s.rpc.getVoiceQueues().$promise.then(function(e){return c.rpcVoiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},s.rpc.getVoiceQueuesChannels().$promise}).then(function(e){c.rpcVoiceQueuesChannels=e?_.keyBy(e.rows?_.filter(e.rows,{type:"inbound",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("AgentHomeDashboardVoiceController",e)}(),function(){"use strict";function e(n,a,i,o,s,r,l,t,d,c){var m=this;function e(e){m.faxInteractions=e||{count:0,rows:[]};for(var t=0;t<m.faxInteractions.rows.length;t+=1)p(m.faxInteractions.rows[t])}function u(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd),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,s.localStorage.setItem("motion2.home.fax:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.faxInteraction.get(m.query,e).$promise}function p(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=e,m.getFaxInteractions=u,m.showFaxInteraction=function(e,t){n.$parent.vm.addInteractionTab("fax",t)},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(o.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=s.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))):u(),p(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)),p(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={Today:r.instant("DASHBOARDS.TODAY"),Yesterday:r.instant("DASHBOARDS.YESTERDAY"),"This Week":r.instant("DASHBOARDS.THIS_WEEK"),"Last Week":r.instant("DASHBOARDS.LAST_WEEK"),"This Month":r.instant("DASHBOARDS.THIS_MONTH"),"Last Month":r.instant("DASHBOARDS.LAST_MONTH"),"This Year":r.instant("DASHBOARDS.THIS_YEAR"),"Last Year":r.instant("DASHBOARDS.LAST_YEAR"),January:r.instant("DASHBOARDS.JANUARY"),February:r.instant("DASHBOARDS.FEBRUARY"),March:r.instant("DASHBOARDS.MARCH"),April:r.instant("DASHBOARDS.APRIL"),May:r.instant("DASHBOARDS.MAY"),June:r.instant("DASHBOARDS.JUNE"),July:r.instant("DASHBOARDS.JULY"),August:r.instant("DASHBOARDS.AUGUST"),September:r.instant("DASHBOARDS.SEPTEMBER"),October:r.instant("DASHBOARDS.OCTOBER"),November:r.instant("DASHBOARDS.NOVEMBER"),December:r.instant("DASHBOARDS.DECEMBER"),Mon:r.instant("DASHBOARDS.MON"),Tue:r.instant("DASHBOARDS.TUE"),Wed:r.instant("DASHBOARDS.WED"),Thu:r.instant("DASHBOARDS.THU"),Fri:r.instant("DASHBOARDS.FRI"),Sat:r.instant("DASHBOARDS.SAT"),Sun:r.instant("DASHBOARDS.SUN")},m.pickerModel={dateStart:null};var g=!0,v=1;n.$watch("vm.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),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"],angular.module("app.dashboards").controller("AgentHomeFaxController",e)}(),function(){"use strict";function e(a,n,i,o,s,r,l,t,d,c){var m=this;function e(e){m.mailInteractions=e||{count:0,rows:[]};for(var t=0;t<m.mailInteractions.rows.length;t+=1)p(m.mailInteractions.rows[t])}function u(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd),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,s.localStorage.setItem("motion2.home.mail:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.mailInteraction.get(m.query,e).$promise}function p(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=e,m.getMailInteractions=u,m.showMailInteraction=function(e,t){a.$parent.vm.addInteractionTab("mail",t)},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(o.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(o.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=s.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))):u(),p(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)),p(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={Today:r.instant("DASHBOARDS.TODAY"),Yesterday:r.instant("DASHBOARDS.YESTERDAY"),"This Week":r.instant("DASHBOARDS.THIS_WEEK"),"Last Week":r.instant("DASHBOARDS.LAST_WEEK"),"This Month":r.instant("DASHBOARDS.THIS_MONTH"),"Last Month":r.instant("DASHBOARDS.LAST_MONTH"),"This Year":r.instant("DASHBOARDS.THIS_YEAR"),"Last Year":r.instant("DASHBOARDS.LAST_YEAR"),January:r.instant("DASHBOARDS.JANUARY"),February:r.instant("DASHBOARDS.FEBRUARY"),March:r.instant("DASHBOARDS.MARCH"),April:r.instant("DASHBOARDS.APRIL"),May:r.instant("DASHBOARDS.MAY"),June:r.instant("DASHBOARDS.JUNE"),July:r.instant("DASHBOARDS.JULY"),August:r.instant("DASHBOARDS.AUGUST"),September:r.instant("DASHBOARDS.SEPTEMBER"),October:r.instant("DASHBOARDS.OCTOBER"),November:r.instant("DASHBOARDS.NOVEMBER"),December:r.instant("DASHBOARDS.DECEMBER"),Mon:r.instant("DASHBOARDS.MON"),Tue:r.instant("DASHBOARDS.TUE"),Wed:r.instant("DASHBOARDS.WED"),Thu:r.instant("DASHBOARDS.THU"),Fri:r.instant("DASHBOARDS.FRI"),Sat:r.instant("DASHBOARDS.SAT"),Sun:r.instant("DASHBOARDS.SUN")},m.pickerModel={dateStart:null};var g=!0,v=1;a.$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.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"],angular.module("app.dashboards").controller("AgentHomeMailController",e)}(),function(){"use strict";function e(n,a,i,o,e,t,s){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,s.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){o.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){o.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=s.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,o,s,r,l,t,d,c){var m=this;function e(e){m.openchannelInteractions=e||{count:0,rows:[]};for(var t=0;t<m.openchannelInteractions.rows.length;t+=1)p(m.openchannelInteractions.rows[t])}function u(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd),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,s.localStorage.setItem("motion2.home.openchannel:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.openchannelInteraction.get(m.query,e).$promise}function p(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=e,m.getOpenchannelInteractions=u,m.showOpenchannelInteraction=function(e,t){n.$parent.vm.addInteractionTab("openchannel",t)},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(o.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=s.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))):u(),p(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)),p(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={Today:r.instant("DASHBOARDS.TODAY"),Yesterday:r.instant("DASHBOARDS.YESTERDAY"),"This Week":r.instant("DASHBOARDS.THIS_WEEK"),"Last Week":r.instant("DASHBOARDS.LAST_WEEK"),"This Month":r.instant("DASHBOARDS.THIS_MONTH"),"Last Month":r.instant("DASHBOARDS.LAST_MONTH"),"This Year":r.instant("DASHBOARDS.THIS_YEAR"),"Last Year":r.instant("DASHBOARDS.LAST_YEAR"),January:r.instant("DASHBOARDS.JANUARY"),February:r.instant("DASHBOARDS.FEBRUARY"),March:r.instant("DASHBOARDS.MARCH"),April:r.instant("DASHBOARDS.APRIL"),May:r.instant("DASHBOARDS.MAY"),June:r.instant("DASHBOARDS.JUNE"),July:r.instant("DASHBOARDS.JULY"),August:r.instant("DASHBOARDS.AUGUST"),September:r.instant("DASHBOARDS.SEPTEMBER"),October:r.instant("DASHBOARDS.OCTOBER"),November:r.instant("DASHBOARDS.NOVEMBER"),December:r.instant("DASHBOARDS.DECEMBER"),Mon:r.instant("DASHBOARDS.MON"),Tue:r.instant("DASHBOARDS.TUE"),Wed:r.instant("DASHBOARDS.WED"),Thu:r.instant("DASHBOARDS.THU"),Fri:r.instant("DASHBOARDS.FRI"),Sat:r.instant("DASHBOARDS.SAT"),Sun:r.instant("DASHBOARDS.SUN")},m.pickerModel={dateStart:null};var g=!0,v=1;n.$watch("vm.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),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"],angular.module("app.dashboards").controller("AgentHomeOpenchannelController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l){var d=this;function c(e,t,n){d.license=e,d.setting=t,d.plugin=n}d.currentUser=s.getCurrentUser(),d.plugin={},d.onInit=c,d.getTrustedURL=function(){return o.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,o,s,r,l,d,c,m,u){var p=this;function g(e){p.voiceRecordings=e||{count:0,rows:[]}}p.currentUser=c.getCurrentUser(),p.voiceRecordings={},p.localizationMap=u,p.pickerModel={dateStart:null},p.table="voiceRecordings",p.query={UserId:p.currentUser.id,fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,rating,audio,UserId",sort:"-updatedAt",limit:10,page:1,type:null},p.downloadfile=function(i,e){return r.voiceRecording.download({id:i.id,exists:!0}).$promise.then(function(e){var t=[e.buffer],n=new Blob(t,{type:e.type}),a=window.document.createElement("a");a.setAttribute("href",URL.createObjectURL(n)),a.setAttribute("download",i.uniqueid+i.format),a.click()}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceRecording",msg:e.data?JSON.stringify(e.data):e.toString()})})},p.success=g,p.getVoiceRecordings=function(){p.query.dateStart=void 0,p.query.dateEnd=void 0,p.pickerModel.dateStart&&(p.query.dateStart=p.pickerModel.dateStart,p.query.dateEnd=p.pickerModel.dateEnd);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?s(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(n,a,i,o,s,r,l,t,d,c){var m=this;function e(e){m.smsInteractions=e||{count:0,rows:[]};for(var t=0;t<m.smsInteractions.rows.length;t+=1)p(m.smsInteractions.rows[t])}function u(){m.query.dateStart=void 0,m.query.dateEnd=void 0,m.pickerModel.dateStart&&(m.query.dateStart=m.pickerModel.dateStart,m.query.dateEnd=m.pickerModel.dateEnd),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,s.localStorage.setItem("motion2.home.sms:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.smsInteraction.get(m.query,e).$promise}function p(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=e,m.getSmsInteractions=u,m.showSmsInteraction=function(e,t){n.$parent.vm.addInteractionTab("sms",t)},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(o.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=s.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))):u(),p(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)),p(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={Today:r.instant("DASHBOARDS.TODAY"),Yesterday:r.instant("DASHBOARDS.YESTERDAY"),"This Week":r.instant("DASHBOARDS.THIS_WEEK"),"Last Week":r.instant("DASHBOARDS.LAST_WEEK"),"This Month":r.instant("DASHBOARDS.THIS_MONTH"),"Last Month":r.instant("DASHBOARDS.LAST_MONTH"),"This Year":r.instant("DASHBOARDS.THIS_YEAR"),"Last Year":r.instant("DASHBOARDS.LAST_YEAR"),January:r.instant("DASHBOARDS.JANUARY"),February:r.instant("DASHBOARDS.FEBRUARY"),March:r.instant("DASHBOARDS.MARCH"),April:r.instant("DASHBOARDS.APRIL"),May:r.instant("DASHBOARDS.MAY"),June:r.instant("DASHBOARDS.JUNE"),July:r.instant("DASHBOARDS.JULY"),August:r.instant("DASHBOARDS.AUGUST"),September:r.instant("DASHBOARDS.SEPTEMBER"),October:r.instant("DASHBOARDS.OCTOBER"),November:r.instant("DASHBOARDS.NOVEMBER"),December:r.instant("DASHBOARDS.DECEMBER"),Mon:r.instant("DASHBOARDS.MON"),Tue:r.instant("DASHBOARDS.TUE"),Wed:r.instant("DASHBOARDS.WED"),Thu:r.instant("DASHBOARDS.THU"),Fri:r.instant("DASHBOARDS.FRI"),Sat:r.instant("DASHBOARDS.SAT"),Sun:r.instant("DASHBOARDS.SUN")},m.pickerModel={dateStart:null};var g=!0,v=1;n.$watch("vm.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),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"],angular.module("app.dashboards").controller("AgentHomeSmsController",e)}(),function(){"use strict";function e(t,n,e,a,i,o,s,r,l,d){var c=this;function m(e){c.voiceCalls=e||{count:0,rows:[]}}c.currentUser=i.getCurrentUser(),c.voiceCalls={},c.localizationMap=d,c.pickerModel={dateStart:null},c.table="voiceCalls",c.query={UserId:c.currentUser.id,fields:"id,type,uniqueid,tag,starttime,endtime,source,destination,userDisposition,note,duration,billableseconds,answertime",sort:"-updatedAt",limit:10,page:1,type:null},c.success=m,c.getVoiceCalls=function(){c.query.dateStart=void 0,c.query.dateEnd=void 0,c.pickerModel.dateStart&&(c.query.dateStart=c.pickerModel.dateStart,c.query.dateEnd=c.pickerModel.dateEnd);c.query.offset=(c.query.page-1)*c.query.limit,s.localStorage.setItem("motion2.home.voice:"+c.currentUser.id,JSON.stringify({query:c.query})),c.promise=e.voiceCallReport.get(c.query,m).$promise},c.onInit=function(){return e.tag.get().$promise.then(function(e){c.tags=e||{count:0,rows:[]}}).catch(function(e){a.error({title:"Init error",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()}),c.tags={count:0,rows:[]}}).finally(function(){var e=s.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,o,s,r,l,d,c,m,u){var p=this;function g(){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 v(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&&b(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,p.interaction.closedAt=e.closedAt,g()):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 h(){"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 b(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="",h()})}function f(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 A(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={maxChunkRetries:1,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,singleFile:!0,target:"api/attachments",allowDuplicateUploads:!0},p.ngFlow={flow:{}},p.selectedMailShowDetails={},p.selectedMailShowSystemMessage={},p.setting={},p.ctrlMethods={},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(A);l.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(A)}}(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){console.error(e),p.showInteraction=!0}).finally(function(){!function(){if(!p.tab.spy)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))}(),h(),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.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{a.$parent.$parent.$parent.vm.addContactTab(t||p.contact)}catch(e){d.error({title:"ERROR OPEN CONTACT",msg:"Jscripty can't 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=g,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){v(t,e&&e.count?e.rows[0]:void 0)}).catch(function(e){console.error(e),v(t,void 0)});v(t,n)}else v(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&&b(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.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;b(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("fax"!==p.tab.channel)return!0;var t=["pdf","tif"];return!!_.includes(t,e.getExtension())||(d.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported only: "+t.join()}),!1)},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:s.protocol()+"://"+s.host())+"/api/chat/interactions/"+p.interaction.id+"/attachment_download?attachId="+n.id+"&token="+p.account.token+'" target="_self">'+n.name+"</a>");b({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),h())},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=o.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=f,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 f(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,substatusAt:Date.now()}).$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=o.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]),"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=[],o=0;o<e.length;o+=1){var s=!0;switch(t){case"voice":s=Boolean(e[o].uniqueid);break;case"chat":s=Boolean(e[o].ChatWebsiteId);break;case"mail":s=Boolean(e[o].MailAccountId);break;case"sms":s=Boolean(e[o].SmsAccountId);break;case"fax":s=Boolean(e[o].FaxAccountId);break;case"openchannel":s=Boolean(e[o].OpenchannelAccountId);break;default:s=!0}s&&n&&a&&(s=moment(e[o].createdAt).isBetween(n,a)),s&&i.push(e[o])}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,o,s,r,l,d){var c=this;c.separatorKeys=[a.KEY_CODE.ENTER,a.KEY_CODE.COMMA,a.KEY_CODE.TAB],c.fileAdded=function(e){var t=["pdf","tif"];return!!_.includes(t,e.getExtension())||(l.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported only: "+t.join()}),!1)},c.message={from:i.localstationid,to:_.isNil(o.to)||_.isEmpty(o.to)?[]:o.to,attachments:[]},c.ngFlowOptions={maxChunkRetries:1,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,singleFile:!0,target:"api/attachments",allowDuplicateUploads:!0},c.ngFlow={flow:{}},c.send=function(e){1===c.message.attachments.length?c.message.to.length?(o.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.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(){o.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,o,s,a,r,l,d,c,m){var u=this;switch(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:o.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:o,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:o.name,email:o.email||o.Smtp.user}),to:[],cc:[],bcc:[],body:v(),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:o.fontFamily?o.fontFamily.split(",")[0]:"Arial",fontSize_defaultLabel:o.fontSize||"12",removePlugins:"magicline"},u.ngFlowOptions={maxChunkRetries:1,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,singleFile:!0,target:"api/attachments",allowDuplicateUploads:!0},u.ngFlow={flow:{}},u.reply=function(e){angular.isDefined(s)&&(u.message.type="reply",u.message.to="in"===s.direction?s.from.split(","):s.to.split(","),u.message.subject=_.startsWith(s.subject,"Re:")?s.subject:"Re: "+s.subject,u.message.inReplyTo=s.messageId,u.message.body=s.draft&&s.draft.inReplyTo?s.draft.body:v(),u.message.attachments=s.draft?s.draft.attachments:[],e&&s.cc&&(u.hiddenCC=!1,u.message.cc=s.cc.split(",")),u.message.showLastMessage=!!s.draft&&s.draft.showLastMessage)},u.newMail=function(){angular.isDefined(s)&&(u.message.type="new",u.message.to=s.to?s.to.split(","):[])},u.forward=function(){if(angular.isDefined(s)){if(u.message.type="forward",u.message.subject=_.startsWith(s.subject,"Fwd:")?s.subject:"Fwd: "+s.subject,u.message.body=s.draft&&!s.draft.inReplyTo?s.draft.body:v(),s.Attachments&&s.Attachments.length)for(var e=0;e<s.Attachments.length;e++)u.message.attachments.push(s.Attachments[e]);u.message.showLastMessage=!!s.draft&&s.draft.showLastMessage}},u.send=function(e,t,n){if(u.message.to&&u.message.body)if(u.message.to.length)if(s.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(){p(t,n)})}else p(t,n);else l.error("To is mandatory")},u.note=function(){u.type="note",u.secret=!0,u.message.body='<div style="font-family:'+o.fontFamily+";font-size:"+o.fontSize+'px"><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.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 o&&o.ListId?r.cmContact.get({ListId:o.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(g(e))return e;for(var n=e.split(","),a=0;a<n.length;a+=1)g(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(s)&&(s.draft=u.message);i.cancel()},u.loadLastMessage=function(){u.message.body+=h(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 p(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+h(u.message.type),inReplyTo:u.message.inReplyTo,attach:u.message.attachments.length,attachments:u.message.attachments,Interaction:{lastMsgAt:moment().format("YYYY-MM-DD HH:mm:ss"),lastMsgDirection:"out",lastMsgBody:u.message.body,substatus:t,substatusAt:moment().format("YYYY-MM-DD HH:mm:ss")}};n.html='<div id="xm-mail-content">'+_.replace(n.body,'<div id="xm-mail-content"',"<div")+"</div>",e&&(n.Interaction.closed=!0,n.Interaction.closedAt=moment().format("YYYY-MM-DD HH:mm:ss")),i.hide(n)}function g(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 v(){return'<div style="font-family:'+o.fontFamily+";font-size:"+o.fontSize+'px">'+function(){if(_.isNil(o.template))return"";try{return _.template(o.template)({user:u.currentUser,account:o,interaction:m,contact:m&&m.Contact?m.Contact:{}})}catch(e){return console.error(e),""}}()+"</div>"}function h(e){var t,n,a='<div id="xm-mail-content"><blockquote type="cite">';switch(e){case"reply":case"replyAll":a+=u.replyTemplate({date:moment(s.createdAt).format("D MMM YYYY")||"",time:moment(s.createdAt).format("HH:mm")||"",from:_.escape(s.from)||""});break;case"forward":a+=u.forwardTemplate({date:moment(s.createdAt).format("D MMM YYYY")||"",time:moment(s.createdAt).format("HH:mm")||"",from:_.escape(s.from)||"",to:_.escape(s.to)||"",subject:_.escape(s.subject)||""})}return a+="<br><br>",a+=(t=s.body?_.replace(s.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:o.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,o,s,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:o.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:o};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:o.phone,to:_.isNil(s.to)||_.isEmpty(s.to)?[]:s.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[o.mapKey]&&(t+=e.firstName+" ");e.lastName&&e.lastName!==e[o.mapKey]&&(t+=e.lastName+" ");return t+="<"+e[o.mapKey]+">"},p.closeDialog=function(){a.cancel()},p.contactSearch=function(e){if(o&&o.ListId){var t="firstName,lastName,phone,mobile";return o.mapKey&&(t+=","+o.mapKey),l.cmContact.get({ListId:o.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[o.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,o,s,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:o.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:o};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:o.phone,to:_.isNil(s.to)||_.isEmpty(s.to)?[]:s.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(o&&o.ListId)return l.cmContact.get({ListId:o.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,o,s){var r=this;function l(e){t.hide(e)}r.errors=[],r.interaction=angular.copy(i),r.dispositions={count:0,rows:[]},r.globalDispositions={count:0,rows:[]},r.channel=o,r.interactionMethod=r.channel+"Interaction",r.interaction.disposition||(r.interaction.disposition=null),r.saveDisposition=function(e){r.errors=[],r.interaction.closed||(r.interaction.closedAt=Date.now());r.interaction.UserId=s.id,r.interaction.closed=!0,r.interaction.closeReason="agent",a[r.interactionMethod]?a[r.interactionMethod].update(_.pick(r.interaction,["MailAccountId","FaxAccountId","SmsAccountId","ChatWebsiteId","OpenchannelId","closed","closedAt","closeReason","disposition","id","note","UserId"])).$promise.then(function(e){r.interaction=e,n.success({title:"Interaction properly closed!",msg:"Interaction has been closed!"}),l(!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()})}):l(!1)},r.closeDialog=l,function(){var e={fields:"id,name",sort:"name",nolimit:!0};switch(o){case"chat":e.ChatWebsiteId=i.ChatWebsiteId;break;case"mail":case"sms":case"fax":case"openchannel":var t=_.capitalize(o)+"AccountId";e[t]=i[t]}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,o){var s=this;function r(e){t.hide(e)}s.errors=[],s.tags=o,s.interaction=angular.copy(a),s.interaction.Tags=_.map(s.interaction.Tags,function(e){return{id:e.id,name:e.name,color:e.color}}),s.channel=i,s.autocompleteRequireMatch=!0,s.saveTag=function(){{if(s.errors=[],e[s.interactionMethod])return e[s.interactionMethod].addTags({id:s.interaction.id,ids:_.map(s.interaction.Tags,"id")}).$promise.then(function(){n.success({title:"Interaction properly tagged!",msg:"Interaction has been tagged!"}),a.Tags=s.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)}},s.closeDialog=r,s.interactionMethod=s.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,o,s,r){var l=this;function d(e){t.hide(e)}l.currentUser=n.getCurrentUser(),l.channel=o.toLowerCase(),l.message=s,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,o,s,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 o=n[i].toString().split(";"),s=0;s<o.length;s+=1)l.jscriptyAnswerReport.save({question:t[i],questionId:a[i].id,answer:o[s].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=o.defer();if(t){var a=s.confirm().title("Would you like to save your survey?").textContent("").ariaLabel("survey").targetEvent(e).ok("YES").cancel("NO");s.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,o=m.project.formData.pages[n].elements.length;i<o;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=s.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"));s.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 o=this;function s(){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){o.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()})}}o.notification=e,o.user=i.getCurrentUser(),o.accept=function(e){{if(t[o.notification.channel+"Message"])return t[o.notification.channel+"Message"].accept({id:o.notification.id,UserId:o.user.id,manual:!0}).$promise.then(function(e){a.success({title:"Message properly accepted!",msg:"Message has been accepted!"})}).catch(s());a.error({title:"API:ERROR",msg:"API accept message not found: "+o.notification.channel+"Message"})}},o.reject=function(e){{if(t[o.notification.channel+"Message"])return t[o.notification.channel+"Message"].reject({id:o.notification.id,UserId:o.user.id}).$promise.then(function(e){a.success({title:"Message properly rejected!",msg:"Message has been rejected!"})}).catch(s());a.error({title:"API:ERROR",msg:"API reject message not found: "+o.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,o=[];function s(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(o,e.id)||(i.inbound.talking+=1,o.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)&&(s(e,!0),r())},i.onUpdateChatInteraction=function(e){l(e)&&d(e.createdAt)&&(s(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];s(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,o,s,r){var l=this;function d(){o({queues:l.outboundQueues,rpcQueues:l.rpcQueues}).then(function(e){l.inbound=e})}function c(){s({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,o=[];function s(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(o,e.id)||(i.inbound.talking+=1,o.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)&&(s(e,!0),r())},i.onUpdateFaxInteraction=function(e){l(e)&&d(e.createdAt)&&(s(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];s(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,o=[];function s(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(o,e.id)||(i.inbound.talking+=1,o.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)&&(s(e,!0),r())},i.onUpdateMailInteraction=function(e){l(e)&&d(e.createdAt)&&(s(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];s(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,o=[];function s(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(o,e.id)||(i.inbound.talking+=1,o.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)&&(s(e,!0),r())},i.onUpdateOpenchannelInteraction=function(e){l(e)&&d(e.createdAt)&&(s(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];s(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,o=[];function s(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(o,e.id)||(i.inbound.talking+=1,o.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)&&(s(e,!0),r())},i.onUpdateSmsInteraction=function(e){l(e)&&d(e.createdAt)&&(s(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];s(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 o=[],s=function(){var a=o[0],i={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(a.queues,function(e,t){if(a.rpcQueues[t]){i.waiting+=a.rpcQueues[t].waiting||0,i.talking+=(a.rpcQueues[t].talking||0)+(a.rpcQueues[t].pTalking||0),i.answered+=a.rpcQueues[t].answered||0,i.unmanaged+=a.rpcQueues[t].unmanaged||0,i.sumHoldTime+=a.rpcQueues[t].sumHoldTime||0,i.sumBillable+=a.rpcQueues[t].sumBillable||0,i.total+=a.rpcQueues[t].total||0,i.originated+=a.rpcQueues[t].originated||0,i.outboundDropCallsDayCallersExit+=a.rpcQueues[t].outboundDropCallsDayCallersExit||0,i.outboundDropCallsDayTimeout+=a.rpcQueues[t].outboundDropCallsDayTimeout||0;var n=a.rpcQueues[t].total-a.rpcQueues[t].answered-a.rpcQueues[t].unmanaged;i.abandoned+=0<n?n:0}}),i.avgHoldTime=Math.round(0<i.total?i.sumHoldTime/i.total:0),i.avgHoldTime=new Date(1e3*i.avgHoldTime).toISOString().substr(11,8),i.avgTalkTime=Math.round(0<i.answered?i.sumBillable/i.answered:0),i.avgTalkTime=new Date(1e3*i.avgTalkTime).toISOString().substr(11,8),i.answerRate=Math.round((0<i.total?i.answered/i.total*100:0)*Math.pow(10,1))/Math.pow(10,1),i.abandonRate=Math.round((0<i.total?i.abandoned/i.total*100:0)*Math.pow(10,1))/Math.pow(10,1),i.outboundDropRate=Math.round((0<i.total?i.outboundDropCallsDayTimeout/i.total*100:0)*Math.pow(10,1))/Math.pow(10,1),i.outboundAbandonRate=Math.round((0<i.total?i.outboundDropCallsDayCallersExit/i.total*100:0)*Math.pow(10,1))/Math.pow(10,1),i.outboundanswerRate=0<100-i.outboundDropRate-i.outboundAbandonRate&&i.total?100-i.outboundDropRate-i.outboundAbandonRate:0,o.shift(),a.defer.resolve(i),0<o.length&&s()};return function(e){var t=n.defer();return o.push({queues:e.queues,rpcQueues:e.rpcQueues,defer:t}),1===o.length&&s(),t.promise}}function t(n){var i=[],o=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&&o()};return function(e){var t=n.defer();return i.push({rpcCampaigns:e.rpcCampaigns,defer:t}),1===i.length&&o(),t.promise}}function n(e,s,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 o=[];r.license.voice&&o.push("app.dashboards.general.voice"),r.license.dialer&&o.push("app.dashboards.general.dialer"),r.license.chat&&o.push("app.dashboards.general.chat"),r.license.mail&&o.push("app.dashboards.general.mail"),r.license.messaging&&o.push("app.dashboards.general.sms"),r.license.openchannel&&o.push("app.dashboards.general.openchannel"),r.license.fax&&o.push("app.dashboards.general.fax"),r.selectedTab=_.indexOf(o,t.name),r.selectedTab<0&&(r.selectedTab=0)<o.length&&s.go(_.first(o))})}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,o){var s=this;function r(){o({queues:s.inboundQueues,rpcQueues:s.rpcQueues}).then(function(e){s.inbound=e})}s.inboundQueues=n?_.keyBy(n.rows?n.rows:[],"id"):{},s.rpcQueues=a?_.keyBy(a.rows?a.rows:[],"id"):{},s.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},s.outbound=i||{answered:0,sumBillable:0,sumDuration:0,sumHoldTime:0,total:0},s.onSaveQueue=function(e){s.inboundQueues[e.id]&&s.rpcQueues[e.id]&&(s.rpcQueues[e.id]=e,r())},s.onSaveOutbound=function(e){s.outbound=e},t.on("voice_queue:save",s.onSaveQueue),t.on("voice_outbound:save",s.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,o,i,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="FAX.EDIT_FAXACCOUNT",u.faxAccount=angular.copy(r),u.faxAccounts=s,u.newFaxAccount=!1,u.faxAccount||(u.faxAccount={waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},u.title="FAX.NEW_FAXACCOUNT",u.newFaxAccount=!0),t.params.id&&(u.faxAccount.FaxAccountId=t.params.id),u.addNewFaxAccount=function(){u.errors=[],l.faxAccount.addAccountApplications(u.faxAccount).$promise.then(function(e){var t="add"+_.upperFirst("faxAccount")+"s";return l.user[t]({id:d.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){u.faxAccounts.unshift(e.toJSON()),i.success({title:"FaxAccount properly created",msg:u.faxAccount.name?u.faxAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.save"}];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.faxAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveFaxAccount=function(){u.errors=[],l.faxAccount.updateAccountApplications(u.faxAccount).$promise.then(function(e){var t=_.find(u.faxAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),i.success({title:"FaxAccount properly saved!",msg:u.faxAccount.name?u.faxAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.update"}];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.faxAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteFaxAccount=function(e){u.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(){l.faxAccount.delete({id:u.faxAccount.id}).$promise.then(function(){return l.faxAccount.getAgents({id:u.faxAccount.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a="remove"+_.upperFirst("faxAccount")+"s",i=0;i<n.length;i++)t.push(l.user[a]({id:d.getCurrentUser().id,ids:[u.faxAccount.id]}).$promise);return o.all(t)}).then(function(){_.remove(u.faxAccounts,{id:u.faxAccount.id}),i.success({title:"FaxAccount properly deleted!",msg:(u.faxAccount.name||"faxAccount")+" has been deleted!"}),p(u.faxAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.delete"}];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.faxAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){i.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","toasty","faxAccounts","faxAccount","api","Auth","license","setting"],angular.module("app.fax").controller("CreateOrEditFaxAccountDialogController",e)}(),function(){"use strict";function e(s,i,a,o,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}}).then(function(e){e&&(e.id?r.faxAccountApps.rows[t]=e:r.faxAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&o.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=[],o=[];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=(o.length?_.last(o).priority:a.priority)+1,t=_.concat(t,i,[a],o)}s.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.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",route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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",route:"faxQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"user",filters:{fields:"id,name",sort:"name",role:"agent",nolimit:!0}}],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",route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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){r.faxAccount=e,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=s.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:[]}}).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(),o.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 s.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,n,a,t,i,o,s,r){var l=this;function d(){return a.faxAccount[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.faxAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserFaxAccount?"penalty "+e.UserFaxAccount.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserFaxAccount?"penalty "+e.UserFaxAccount.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.faxAccount=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("FAX.ALL_AGENTS"),labelSelected:s.instant("FAX.SELECTED_AGENTS"),transferCallback:function(e,t){a.faxAccount[t?"removeAgents":"addAgents"]({id:l.faxAccount.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"FaxAccount properly "+(t?"removed":"added"),msg:"FaxAccount has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:faxAccount.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","faxAccount","faxAccounts","realtime","$translate","Auth"],angular.module("app.fax").controller("FaxAccountagentaddController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(e.appType||e.app).toUpperCase(),o.agent=angular.copy(e),o.agent.appdata)switch(o.agent.appType?o.agent.appType.toLowerCase():o.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agent.appdata.split(",");o.agent.key=s[0],o.agent.language=s[1],o.agent.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agent.appdata.split(",");o.agent.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agent.text=s.slice(1,s.length).join(",");break;case"message":o.agent.text=o.agent.appdata;break;case"set":o.agent.name=o.agent.appdata.split("=")[0],o.agent.value=o.agent.appdata.split("=")[1];break;case"agi":o.agent.project=o.agent.appdata;break;default:var r=o.agent.appdata.split(",");o.agent.agent=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.agent.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.agent.timeout=30;function l(e){t.hide(e)}o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outbounddial"===o.agent.appType.toLowerCase()&&(o.agent.prefix=o.agent.phone?o.agent.phone.split("$")[0]:void 0,o.agent.callerId=o.agent.callerID?"CALLERID(all)="+o.agent.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outboundDial"===o.agent.appType&&(o.agent.phone=a.cutdigits?(o.agent.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agent.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agent.options+="U(xcally-mixmonitor-context)"):o.agent.options=o.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.agents,{name:o.agent.agent});t&&(o.agent.UserId=t.id);if(o.agent.appType&&"custom"===o.agent.appType);else switch((o.agent.app||o.agent.appType).toLowerCase()){case"set":o.agent.appdata=o.agent.name+"="+o.agent.value;break;case"custom":break;default:e[0]=o.agent.agent,e[1]=o.agent.timeout,o.agent.appdata=e.join(",")}l(o.agent)},o.closeDialog=l,i.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){o.agents=e.rows||[]}).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","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(n.appType||n.app).toUpperCase(),o.close=angular.copy(n),o.close.appdata)switch(o.close.appType?o.close.appType.toLowerCase():o.close.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.close.appdata.split(",");o.close.key=s[0],o.close.language=s[1],o.close.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.close.appdata.split(",");o.close.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.close.text=s.slice(1,s.length).join(",");break;case"message":o.close.text=o.close.appdata;break;case"set":o.close.name=o.close.appdata.split("=")[0],o.close.value=o.close.appdata.split("=")[1];break;case"agi":o.close.project=o.close.appdata;break;default:var r=o.close.appdata.split(",");o.close.disposition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outbounddial"===o.close.appType.toLowerCase()&&(o.close.prefix=o.close.phone?o.close.phone.split("$")[0]:void 0,o.close.callerId=o.close.callerID?"CALLERID(all)="+o.close.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outboundDial"===o.close.appType&&(o.close.phone=a.cutdigits?(o.close.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.close.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.close.options+="U(xcally-mixmonitor-context)"):o.close.options=o.close.options.replace("U(xcally-mixmonitor-context)",""));if(o.close.appType&&"custom"===o.close.appType);else switch((o.close.app||o.close.appType).toLowerCase()){case"set":o.close.appdata=o.close.name+"="+o.close.value;break;case"custom":break;default:e[0]=o.close.disposition,o.close.appdata=e.join(",")}l(o.close)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotoif=angular.copy(n),o.gotoif.appdata)switch(o.gotoif.appType?o.gotoif.appType.toLowerCase():o.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotoif.appdata.split(",");o.gotoif.key=s[0],o.gotoif.language=s[1],o.gotoif.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotoif.appdata.split(",");o.gotoif.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotoif.text=s.slice(1,s.length).join(",");break;case"message":o.gotoif.text=o.gotoif.appdata;break;case"set":o.gotoif.name=o.gotoif.appdata.split("=")[0],o.gotoif.value=o.gotoif.appdata.split("=")[1];break;case"agi":o.gotoif.project=o.gotoif.appdata;break;default:var r=o.gotoif.appdata.split(",");o.gotoif.condition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.gotoif.truepriority=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.gotoif.falsepriority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outbounddial"===o.gotoif.appType.toLowerCase()&&(o.gotoif.prefix=o.gotoif.phone?o.gotoif.phone.split("$")[0]:void 0,o.gotoif.callerId=o.gotoif.callerID?"CALLERID(all)="+o.gotoif.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outboundDial"===o.gotoif.appType&&(o.gotoif.phone=a.cutdigits?(o.gotoif.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotoif.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotoif.options+="U(xcally-mixmonitor-context)"):o.gotoif.options=o.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotoif.appType&&"custom"===o.gotoif.appType);else switch((o.gotoif.app||o.gotoif.appType).toLowerCase()){case"set":o.gotoif.appdata=o.gotoif.name+"="+o.gotoif.value;break;case"custom":break;default:e[0]=o.gotoif.condition,e[1]=o.gotoif.truepriority,e[2]=o.gotoif.falsepriority,o.gotoif.appdata=e.join(",")}l(o.gotoif)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotop=angular.copy(n),o.gotop.appdata)switch(o.gotop.appType?o.gotop.appType.toLowerCase():o.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotop.appdata.split(",");o.gotop.key=s[0],o.gotop.language=s[1],o.gotop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotop.appdata.split(",");o.gotop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotop.text=s.slice(1,s.length).join(",");break;case"message":o.gotop.text=o.gotop.appdata;break;case"set":o.gotop.name=o.gotop.appdata.split("=")[0],o.gotop.value=o.gotop.appdata.split("=")[1];break;case"agi":o.gotop.project=o.gotop.appdata;break;default:var r=o.gotop.appdata.split(",");o.gotop.priority=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outbounddial"===o.gotop.appType.toLowerCase()&&(o.gotop.prefix=o.gotop.phone?o.gotop.phone.split("$")[0]:void 0,o.gotop.callerId=o.gotop.callerID?"CALLERID(all)="+o.gotop.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outboundDial"===o.gotop.appType&&(o.gotop.phone=a.cutdigits?(o.gotop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotop.options+="U(xcally-mixmonitor-context)"):o.gotop.options=o.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotop.appType&&"custom"===o.gotop.appType);else switch((o.gotop.app||o.gotop.appType).toLowerCase()){case"set":o.gotop.appdata=o.gotop.name+"="+o.gotop.value;break;case"custom":break;default:e[0]=o.gotop.priority,o.gotop.appdata=e.join(",")}l(o.gotop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditFaxAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(n.appType||n.app).toUpperCase(),o.noop=angular.copy(n),o.noop.appdata)switch(o.noop.appType?o.noop.appType.toLowerCase():o.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.noop.appdata.split(",");o.noop.key=s[0],o.noop.language=s[1],o.noop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.noop.appdata.split(",");o.noop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.noop.text=s.slice(1,s.length).join(",");break;case"message":o.noop.text=o.noop.appdata;break;case"set":o.noop.name=o.noop.appdata.split("=")[0],o.noop.value=o.noop.appdata.split("=")[1];break;case"agi":o.noop.project=o.noop.appdata;break;default:var r=o.noop.appdata.split(",");o.noop.value=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outbounddial"===o.noop.appType.toLowerCase()&&(o.noop.prefix=o.noop.phone?o.noop.phone.split("$")[0]:void 0,o.noop.callerId=o.noop.callerID?"CALLERID(all)="+o.noop.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outboundDial"===o.noop.appType&&(o.noop.phone=a.cutdigits?(o.noop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.noop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.noop.options+="U(xcally-mixmonitor-context)"):o.noop.options=o.noop.options.replace("U(xcally-mixmonitor-context)",""));if(o.noop.appType&&"custom"===o.noop.appType);else switch((o.noop.app||o.noop.appType).toLowerCase()){case"set":o.noop.appdata=o.noop.name+"="+o.noop.value;break;case"custom":break;default:e[0]=o.noop.value,o.noop.appdata=e.join(",")}l(o.noop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.queue.queue=300,o.queue.timeout=300;function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.queues,{name:o.queue.queue});t&&(o.queue[_.capitalize("fax")+"QueueId"]=t.id);if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.timeout,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.faxQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(e.appType||e.app).toUpperCase(),o.system=angular.copy(e),o.system.appdata)switch(o.system.appType?o.system.appType.toLowerCase():o.system.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.system.appdata.split(",");o.system.key=s[0],o.system.language=s[1],o.system.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.system.appdata.split(",");o.system.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.system.text=s.slice(1,s.length).join(",");break;case"message":o.system.text=o.system.appdata;break;case"set":o.system.name=o.system.appdata.split("=")[0],o.system.value=o.system.appdata.split("=")[1];break;case"agi":o.system.project=o.system.appdata;break;default:var r=o.system.appdata.split(",");o.system.command=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.system.variable=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.system.variable="";function l(e){t.hide(e)}o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outbounddial"===o.system.appType.toLowerCase()&&(o.system.prefix=o.system.phone?o.system.phone.split("$")[0]:void 0,o.system.callerId=o.system.callerID?"CALLERID(all)="+o.system.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outboundDial"===o.system.appType&&(o.system.phone=a.cutdigits?(o.system.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.system.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.system.options+="U(xcally-mixmonitor-context)"):o.system.options=o.system.options.replace("U(xcally-mixmonitor-context)",""));if(o.system.appType&&"custom"===o.system.appType);else switch((o.system.app||o.system.appType).toLowerCase()){case"set":o.system.appdata=o.system.name+"="+o.system.value;break;case"custom":break;default:e[0]=o.system.command,e[1]=o.system.variable,o.system.appdata=e.join(",")}l(o.system)},o.closeDialog=l,i.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="FAX.EDIT_"+(e.appType||e.app).toUpperCase(),o.tag=angular.copy(e),o.tag.appdata)switch(o.tag.appType?o.tag.appType.toLowerCase():o.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.tag.appdata.split(",");o.tag.key=s[0],o.tag.language=s[1],o.tag.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.tag.appdata.split(",");o.tag.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.tag.text=s.slice(1,s.length).join(",");break;case"message":o.tag.text=o.tag.appdata;break;case"set":o.tag.name=o.tag.appdata.split("=")[0],o.tag.value=o.tag.appdata.split("=")[1];break;case"agi":o.tag.project=o.tag.appdata;break;default:var r=o.tag.appdata.split(",");o.tag.tag=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outbounddial"===o.tag.appType.toLowerCase()&&(o.tag.prefix=o.tag.phone?o.tag.phone.split("$")[0]:void 0,o.tag.callerId=o.tag.callerID?"CALLERID(all)="+o.tag.callerID:void 0),o.saveFaxAccountApp=function(){o.errors=[];var e=[];o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outboundDial"===o.tag.appType&&(o.tag.phone=a.cutdigits?(o.tag.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.tag.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.tag.options+="U(xcally-mixmonitor-context)"):o.tag.options=o.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.tags,{name:o.tag.tag});t&&(o.tag.TagId=t.id);if(o.tag.appType&&"custom"===o.tag.appType);else switch((o.tag.app||o.tag.appType).toLowerCase()){case"set":o.tag.appdata=o.tag.name+"="+o.tag.value;break;case"custom":break;default:e[0]=o.tag.tag,o.tag.appdata=e.join(",")}l(o.tag)},o.closeDialog=l,i.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","faxAccountApp","faxAccount","api"],angular.module("app.fax").controller("EditFaxAccountApptagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.faxAccount={},c.faxAccountFaxDispositions={count:0,rows:[]},c.selectedFaxAccountFaxDispositions=[],c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e){c.faxAccount=e,c.query.id=c.faxAccount.id,c.query.FaxAccountId=c.faxAccount.id,c.getFaxAccountFaxDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditFaxDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/faxDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:c.faxAccount,faxDisposition:t,faxDispositions:c.faxAccountFaxDispositions.rows,license:null,setting:null}})},c.exportSelectedFaxAccountFaxDispositions=function(){var e=angular.copy(c.selectedFaxAccountFaxDispositions);return c.selectedFaxAccountFaxDispositions=[],e},c.deleteFaxAccountFaxDisposition=g,c.deleteSelectedFaxAccountFaxDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="FAX.EDIT_FAXDISPOSITION",u.faxDisposition=angular.copy(r),u.faxDispositions=s,u.newFaxDisposition=!1,u.faxDisposition||(u.faxDisposition={},u.title="FAX.NEW_FAXDISPOSITION",u.newFaxDisposition=!0),t.params.id&&(u.faxDisposition.FaxAccountId=t.params.id),u.addNewFaxDisposition=function(){u.errors=[],l.disposition.save(u.faxDisposition).$promise.then(function(e){u.faxDispositions.unshift(e.toJSON()),o.success({title:"FaxDisposition properly created",msg:u.faxDisposition.name?u.faxDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveFaxDisposition=function(){u.errors=[],l.disposition.update({id:u.faxDisposition.id},u.faxDisposition).$promise.then(function(e){var t=_.find(u.faxDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FaxDisposition properly saved!",msg:u.faxDisposition.name?u.faxDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteFaxDisposition=function(e){u.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(){l.disposition.delete({id:u.faxDisposition.id}).$promise.then(function(){_.remove(u.faxDispositions,{id:u.faxDisposition.id}),o.success({title:"FaxDisposition properly deleted!",msg:(u.faxDisposition.name||"faxDisposition")+" has been deleted!"}),p(u.faxDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","faxDispositions","faxDisposition","api","Auth","license","setting"],angular.module("app.fax").controller("CreateOrEditFaxDispositionDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.faxAccount={},c.faxAccountInteractions={count:0,rows:[]},c.selectedFaxAccountInteractions=[],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){c.faxAccount=e,c.query.id=c.faxAccount.id,c.getFaxAccountInteractions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},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){o.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/interactions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:c.faxAccount,interaction:t,interactions:c.faxAccountInteractions.rows,license:null,setting:null}})},c.spyfaxInteraction=function(e,n){o.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(s.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=o.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");o.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,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.faxAccount=d||n.params.faxAccount||{},c.selectedTab=n.params.tab||0,c.gotogoto=function(e,t){n.go("app.fax.realtime.accounts",{})},c.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:c.faxAccounts?c.faxAccounts.rows:[],realtime:!1}})},c.alert=r.info,c.gotoFaxAccounts=function(){n.go("app.fax.faxAccounts")},c.saveFaxAccount=function(){s.faxAccount.updateAccountApplications(c.faxAccount).$promise.then(function(){r.success({title:"FaxAccount updated!",msg:c.faxAccount.name?c.faxAccount.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.trunks=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","license","setting","api","toasty","Auth","faxAccount"],angular.module("app.fax").controller("FaxAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.faxAccounts=r||{count:0,rows:[]},v.table="faxAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedFaxAccounts=[],v.query={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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},v.arrayecm=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.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"),"")}),v.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"),"")}),v.arrayacceptMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayrejectMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraycloseMethod=_.keyBy([{option:"HTTP GET",value:"'GET'"},{option:"HTTP POST",value:"'POST'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.fax.faxAccounts.edit",{id:e.id,faxAccount:e})},v.interactionsgoto=function(e,t){n.go("app.fax.faxAccounts.edit",{id:e.id,tab:5})},v.gotorealtimegoto=function(e,t){n.go("app.fax.realtime.accounts",{})},v.agentadddialog=function(e,t){i.show({controller:"FaxAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxAccount:e,faxAccounts:v.faxAccounts?v.faxAccounts.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the faxAccount?").htmlContent("<b>"+(e.name||"faxAccount")+"</b> will be deleted.").ariaLabel("delete faxAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getFaxAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.faxAccount.get(v.query,f).$promise},v.createOrEditFaxAccount=function(e,t){i.show({controller:"CreateOrEditFaxAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:t,faxAccounts:v.faxAccounts.rows,license:v.license,setting:v.setting}})},v.deleteFaxAccount=A,v.exportSelectedFaxAccounts=function(){var e=angular.copy(v.selectedFaxAccounts);return v.selectedFaxAccounts=[],e},v.deleteSelectedFaxAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected faxAccounts?").htmlContent("<b>"+v.selectedFaxAccounts.length+" selected</b> will be deleted.").ariaLabel("delete FaxAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedFaxAccounts.forEach(function(e){A(e)}),v.selectedFaxAccounts=[]})},v.deselectFaxAccounts=function(){v.selectedFaxAccounts=[]},v.selectAllFaxAccounts=function(){v.selectedFaxAccounts=v.faxAccounts.rows},l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.trunks=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.faxAccounts=e||{count:0,rows:[]}}function A(e){l.faxAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.faxAccounts.rows,{id:e.id}),v.faxAccounts.count-=1,v.faxAccounts.rows.length||v.getFaxAccounts(),c.success({title:"FaxAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEfaxAccount"}];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:"SYSTEM:DELETEfaxAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getFaxAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","faxAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.fax").controller("FaxAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="FAX.EDIT_FAXQUEUE",u.faxQueue=angular.copy(r),u.faxQueues=s,u.newFaxQueue=!1,u.faxQueue||(u.faxQueue={strategy:"beepall",timeout:10},u.title="FAX.NEW_FAXQUEUE",u.newFaxQueue=!0),u.addNewFaxQueue=function(){u.errors=[],l.faxQueue.save(u.faxQueue).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"fax",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.faxQueues.unshift(e.toJSON()),o.success({title:"FaxQueue properly created",msg:u.faxQueue.name?u.faxQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveFaxQueue=function(){u.errors=[],l.faxQueue.update({id:u.faxQueue.id},u.faxQueue).$promise.then(function(e){var t=_.find(u.faxQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FaxQueue properly saved!",msg:u.faxQueue.name?u.faxQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteFaxQueue=function(e){u.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(){l.faxQueue.delete({id:u.faxQueue.id}).$promise.then(function(){return l.faxQueue.getAgents({id:u.faxQueue.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.faxQueue.id],channel:"fax",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.faxQueues,{id:u.faxQueue.id}),o.success({title:"FaxQueue properly deleted!",msg:(u.faxQueue.name||"faxQueue")+" has been deleted!"}),p(u.faxQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","faxQueues","faxQueue","api","Auth","license","setting"],angular.module("app.fax").controller("CreateOrEditFaxQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.faxQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.faxQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserFaxQueue?"penalty "+e.UserFaxQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserFaxQueue?"penalty "+e.UserFaxQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.faxQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("FAX.ALL_AGENTS"),labelSelected:s.instant("FAX.SELECTED_AGENTS"),transferCallback:function(e,t){a.faxQueue[t?"removeAgents":"addAgents"]({id:l.faxQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"FaxQueue properly "+(t?"removed":"added"),msg:"FaxQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:faxQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","faxQueue","faxQueues","realtime","$translate","Auth"],angular.module("app.fax").controller("FaxQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.faxQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("FAX.ALL_TEAMS"),labelSelected:i.instant("FAX.SELECTED_TEAMS"),transferCallback:function(e,t){a.faxQueue[t?"removeTeams":"addTeams"]({id:o.faxQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:faxQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.faxQueue.getTeams({id:o.faxQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","faxQueue","$translate"],angular.module("app.fax").controller("FaxQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.faxQueue=d||e.params.faxQueue||{},c.selectedTab=e.params.tab||0,c.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:c.faxQueues?c.faxQueues.rows:[]}})},c.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:c.faxQueues?c.faxQueues.rows:[],realtime:!1}})},c.alert=r.info,c.gotoFaxQueues=function(){e.go("app.fax.faxQueues")},c.saveFaxQueue=function(){s.faxQueue.update({id:c.faxQueue.id},c.faxQueue).$promise.then(function(){r.success({title:"FaxQueue updated!",msg:c.faxQueue.name?c.faxQueue.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","faxQueue"],angular.module("app.fax").controller("FaxQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.faxQueues=r||{count:0,rows:[]},v.table="faxQueues",v.listOrder="",v.listOrderAsc=null,v.selectedFaxQueues=[],v.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"fax",limit:10,page:1},v.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.fax.faxQueues.edit",{id:e.id,faxQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"FaxQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:v.faxQueues?v.faxQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"FaxQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:v.faxQueues?v.faxQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the faxQueue?").htmlContent("<b>"+(e.name||"faxQueue")+"</b> will be deleted.").ariaLabel("delete faxQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.fax.realtime.queues",{})},v.success=f,v.getFaxQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.faxQueue.get(v.query,f).$promise},v.createOrEditFaxQueue=function(e,t){i.show({controller:"CreateOrEditFaxQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxQueue:t,faxQueues:v.faxQueues.rows,license:v.license,setting:v.setting}})},v.deleteFaxQueue=A,v.exportSelectedFaxQueues=function(){var e=angular.copy(v.selectedFaxQueues);return v.selectedFaxQueues=[],e},v.deleteSelectedFaxQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected faxQueues?").htmlContent("<b>"+v.selectedFaxQueues.length+" selected</b> will be deleted.").ariaLabel("delete FaxQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedFaxQueues.forEach(function(e){A(e)}),v.selectedFaxQueues=[]})},v.deselectFaxQueues=function(){v.selectedFaxQueues=[]},v.selectAllFaxQueues=function(){v.selectedFaxQueues=v.faxQueues.rows};var h=!0,b=1;function f(e){v.faxQueues=e||{count:0,rows:[]}}function A(e){l.faxQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.faxQueues.rows,{id:e.id}),v.faxQueues.count-=1,v.faxQueues.rows.length||v.getFaxQueues(),c.success({title:"FaxQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEfaxQueue"}];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:"SYSTEM:DELETEfaxQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getFaxQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","faxQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.fax").controller("FaxQueuesController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d){var c=this;function m(){_.forIn(c.faxAccounts,function(e,t){c.rpcFaxAccounts[t]&&_.merge(e,c.rpcFaxAccounts[t])}),_.forIn(c.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")};o.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",o.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)})})}c.count=l&&l.count?l.count:0,c.faxAccounts=l?_.keyBy(l.rows?l.rows:[],"id"):{},c.rpcFaxAccounts=d?_.keyBy(d.rows?d.rows:[],"id"):{},c.query={sort:"-name",limit:10,page:1},c.success=g,c.$onInit=m,c.getFaxAccounts=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.faxAccount.get(c.query,g).$promise},c.onSave=function(e){c.faxAccounts[e.id]&&_.merge(c.faxAccounts[e.id],e)},c.onFaxMessageSave=function(e){c.faxAccounts[e.FaxAccountId]&&("in"==e.direction?(c.faxAccounts[e.FaxAccountId].in+=1,c.faxAccounts[e.FaxAccountId].lastIn=e.createdAt):(c.faxAccounts[e.FaxAccountId].out+=1,c.faxAccounts[e.FaxAccountId].lastOut=e.createdAt))},c.goToFaxAccount=function(e,t){i.go("app.fax.faxAccounts.edit",{id:t.id,faxAccount:t})},c.order=[],_.forIn(c.faxAccounts,function(e,t){c.order.push(e.id)}),s.on("faxAccount:save",c.onSave),s.on("faxAccount:update",c.onSave),s.on("faxMessage:save",c.onFaxMessageSave);var u=!0,p=1;function g(e){if(c.faxAccounts=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){c.order=[];for(var t=0;t<e.rows.length;t++)c.order.push(e.rows[t].id)}m()}e.$watch("vm.query.filter",function(e,t){u?n(function(){u=!1}):(t||(p=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=p),c.getFaxAccounts())}),e.$on("$destroy",function(){s.removeAllListeners("faxAccount:save"),s.removeAllListeners("faxAccount:update"),s.removeAllListeners("faxMessage:save")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$state","api","socket","toasty","faxAccounts","rpcFaxAccounts"],angular.module("app.fax").controller("FaxAccountsRealtimeController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsFaxRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.faxQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].FaxQueueId].paused++,u.queues[e[t].rows[n].FaxQueueId].loggedInDb++,u.queues[e[t].rows[n].FaxQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].FaxQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"fax",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.faxQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!1}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.FaxQueueId]&&u.queues[e.FaxQueueId].loggedInDb++},u.onRemoveMember=function(e){u.queues[e.FaxQueueId]&&u.queues[e.FaxQueueId].loggedInDb--},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.FaxQueueId]&&(u.queues[e.FaxQueueId].loggedInDb+=1,u.queues[e.FaxQueueId].agents[e.UserId]=e.FaxQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.FaxQueueId]&&0<u.queues[e.FaxQueueId].loggedInDb&&(u.queues[e.FaxQueueId].loggedInDb-=1,delete u.queues[e.FaxQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.on("fax_queue:save",u.onSave),d.on("userFaxQueue:save",u.onSaveMember),d.on("userFaxQueue:remove",u.onRemoveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.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","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,o,s,r,l){var d=this,c=["status","stateRegistry","registry","host","port","internal","state","status"];function m(){for(var e,t=0;t<d.trunks.length;t+=1)0<=(e=_.findIndex(d.rpcTrunks,["id",d.trunks[t].id]))&&_.merge(d.trunks[t],_.pick(d.rpcTrunks[e],c))}function u(e,t,n){0<=t&&_.merge(e[t],_.pick(n,c))}d.count=a.count,d.trunks=a?a.rows:[],d.rpcTrunks=i&&i.rows?i.rows:[],d.query={fields:"id,name",active:!0,sort:"-updatedAt",limit:10,page:1},d.statusClass=r.status,d.stateClass=r.state,d.success=v,d.$onInit=m,d.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},d.getTrunks=function(){d.query.offset=(d.query.page-1)*d.query.limit,d.promise=o.trunk.get(d.query,v).$promise},d.goToTrunk=function(e,t){l.go("app.tools.trunks.edit",{id:t.id})},d.onSave=function(e){var t=_.findIndex(d.trunks,["id",e.id]),n=_.findIndex(d.rpcTrunks,["id",e.id]);u(d.trunks,t,e),u(d.rpcTrunks,n,e)},s.on("trunk:save",d.onSave);var p=!0,g=1;function v(e){d.count=e.count,d.trunks=e&&e.rows?e.rows:[],m()}e.$watch("vm.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=d.query.page),e!==t&&(d.query.page=1),e||(d.query.page=g),d.getTrunks())}),e.$on("$destroy",function(){s.removeAllListeners("trunk:save")})}e.$inject=["$scope","$timeout","$mdDialog","trunks","rpcTrunks","api","socket","helperClasses","$state"],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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_DESKACCOUNT",u.deskAccount=angular.copy(r),u.deskAccounts=s,u.newDeskAccount=!1,u.deskAccount||(u.deskAccount={type:"integrationTab",authType:"basic",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_DESKACCOUNT",u.newDeskAccount=!0),u.addNewDeskAccount=function(){u.errors=[],l.intDeskAccount.save(u.deskAccount).$promise.then(function(e){u.deskAccounts.unshift(e.toJSON()),o.success({title:"DeskAccount properly created",msg:u.deskAccount.name?u.deskAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveDeskAccount=function(){u.errors=[],l.intDeskAccount.update({id:u.deskAccount.id},u.deskAccount).$promise.then(function(e){var t=_.find(u.deskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"DeskAccount properly saved!",msg:u.deskAccount.name?u.deskAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteDeskAccount=function(e){u.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(){l.intDeskAccount.delete({id:u.deskAccount.id}).$promise.then(function(){_.remove(u.deskAccounts,{id:u.deskAccount.id}),o.success({title:"DeskAccount properly deleted!",msg:(u.deskAccount.name||"deskAccount")+" has been deleted!"}),p(u.deskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","deskAccounts","deskAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditDeskAccountDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.deskAccounts=r||{count:0,rows:[]},v.table="deskAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedDeskAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",limit:10,page:1},v.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayauthType=_.keyBy([{option:"Basic",value:"'basic'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.integrations.deskAccounts.edit",{id:e.id,deskAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intDeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"DeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"DeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the deskAccount?").htmlContent("<b>"+(e.name||"deskAccount")+"</b> will be deleted.").ariaLabel("delete deskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getDeskAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intDeskAccount.get(v.query,f).$promise},v.createOrEditDeskAccount=function(e,t){i.show({controller:"CreateOrEditDeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{deskAccount:t,deskAccounts:v.deskAccounts.rows,license:v.license,setting:v.setting}})},v.deleteDeskAccount=A,v.exportSelectedDeskAccounts=function(){var e=angular.copy(v.selectedDeskAccounts);return v.selectedDeskAccounts=[],e},v.deleteSelectedDeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected deskAccounts?").htmlContent("<b>"+v.selectedDeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete DeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedDeskAccounts.forEach(function(e){A(e)}),v.selectedDeskAccounts=[]})},v.deselectDeskAccounts=function(){v.selectedDeskAccounts=[]},v.selectAllDeskAccounts=function(){v.selectedDeskAccounts=v.deskAccounts.rows};var h=!0,b=1;function f(e){v.deskAccounts=e||{count:0,rows:[]}}function A(e){l.intDeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.deskAccounts.rows,{id:e.id}),v.deskAccounts.count-=1,v.deskAccounts.rows.length||v.getDeskAccounts(),c.success({title:"DeskAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintDeskAccount"}];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:"SYSTEM:DELETEintDeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getDeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","deskAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("DeskAccountsController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intDeskField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.deskAccount={},s.deskConfiguration={},s.configurations=[],s.selectedDeskConfiguration=-1,s.init=function(e){s.deskAccount=e,i.intDeskAccount.getConfigurations({id:s.deskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getDeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getDeskConfiguration=function(e){s.deskConfiguration=s.configurations[e],s.selectedDeskConfiguration=e,i.intDeskConfiguration.getSubjects({id:s.deskConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intDeskConfiguration.getDescriptions({id:s.deskConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intDeskConfiguration.getFields({id:s.deskConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intDeskConfiguration.getTags({id:s.deskConfiguration.id}).$promise.then(function(e){s.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getDeskConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"DeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getDeskConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.deskConfiguration.id},s.deskConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedTags=[],s.selectTagsChanged=function(e){i.intDeskConfiguration.setTags({id:s.deskConfiguration.id,ids:s.selectedTags}).$promise.then(function(){o.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){o.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){s.tags=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.selectedSubjects=[],s.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:s.subjects,configuration:s.deskConfiguration,account:s.deskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.deskConfiguration,account:s.deskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.deskConfiguration,account:s.deskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_DESKCONFIGURATION",u.deskConfiguration=angular.copy(r),u.configurations=s,u.newDeskConfiguration=!1,u.deskConfiguration||(u.deskConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_DESKCONFIGURATION",u.newDeskConfiguration=!0),u.addNewDeskConfiguration=function(){u.errors=[],l.intDeskAccount.addConfiguration({id:t.params.id},u.deskConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"DeskConfiguration properly created",msg:u.deskConfiguration.name?u.deskConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveDeskConfiguration=function(){u.errors=[],l.intDeskConfiguration.update({id:u.deskConfiguration.id},u.deskConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"DeskConfiguration properly saved!",msg:u.deskConfiguration.name?u.deskConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteDeskConfiguration=function(e){u.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(){l.intDeskConfiguration.delete({id:u.deskConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.deskConfiguration.id}),o.success({title:"DeskConfiguration properly deleted!",msg:(u.deskConfiguration.name||"deskConfiguration")+" has been deleted!"}),p(u.deskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","deskConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditDeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intDeskField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intDeskField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditDeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.deskAccount=d||e.params.deskAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoDeskAccounts=function(){e.go("app.integrations.deskAccounts")},c.saveDeskAccount=function(){s.intDeskAccount.update({id:c.deskAccount.id},c.deskAccount).$promise.then(function(){r.success({title:"DeskAccount updated!",msg:c.deskAccount.name?c.deskAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","deskAccount"],angular.module("app.integrations").controller("DeskAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_FRESHDESKACCOUNT",u.freshdeskAccount=angular.copy(r),u.freshdeskAccounts=s,u.newFreshdeskAccount=!1,u.freshdeskAccount||(u.freshdeskAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_FRESHDESKACCOUNT",u.newFreshdeskAccount=!0),u.addNewFreshdeskAccount=function(){u.errors=[],l.intFreshdeskAccount.save(u.freshdeskAccount).$promise.then(function(e){u.freshdeskAccounts.unshift(e.toJSON()),o.success({title:"FreshdeskAccount properly created",msg:u.freshdeskAccount.name?u.freshdeskAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveFreshdeskAccount=function(){u.errors=[],l.intFreshdeskAccount.update({id:u.freshdeskAccount.id},u.freshdeskAccount).$promise.then(function(e){var t=_.find(u.freshdeskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FreshdeskAccount properly saved!",msg:u.freshdeskAccount.name?u.freshdeskAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteFreshdeskAccount=function(e){u.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(){l.intFreshdeskAccount.delete({id:u.freshdeskAccount.id}).$promise.then(function(){_.remove(u.freshdeskAccounts,{id:u.freshdeskAccount.id}),o.success({title:"FreshdeskAccount properly deleted!",msg:(u.freshdeskAccount.name||"freshdeskAccount")+" has been deleted!"}),p(u.freshdeskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","freshdeskAccounts","freshdeskAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditFreshdeskAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intFreshdeskField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.freshdeskAccount={},s.freshdeskConfiguration={},s.configurations=[],s.selectedFreshdeskConfiguration=-1,s.init=function(e){s.freshdeskAccount=e,i.intFreshdeskAccount.getConfigurations({id:s.freshdeskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getFreshdeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getFreshdeskConfiguration=function(e){s.freshdeskConfiguration=s.configurations[e],s.selectedFreshdeskConfiguration=e,i.intFreshdeskConfiguration.getSubjects({id:s.freshdeskConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intFreshdeskConfiguration.getDescriptions({id:s.freshdeskConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intFreshdeskConfiguration.getFields({id:s.freshdeskConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intFreshdeskConfiguration.getTags({id:s.freshdeskConfiguration.id}).$promise.then(function(e){s.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getFreshdeskConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"FreshdeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getFreshdeskConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.freshdeskConfiguration.id},s.freshdeskConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedTags=[],s.selectTagsChanged=function(e){i.intFreshdeskConfiguration.setTags({id:s.freshdeskConfiguration.id,ids:s.selectedTags}).$promise.then(function(){o.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){o.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){s.tags=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.selectedSubjects=[],s.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:s.subjects,configuration:s.freshdeskConfiguration,account:s.freshdeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.freshdeskConfiguration,account:s.freshdeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.freshdeskConfiguration,account:s.freshdeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_FRESHDESKCONFIGURATION",u.freshdeskConfiguration=angular.copy(r),u.configurations=s,u.newFreshdeskConfiguration=!1,u.freshdeskConfiguration||(u.freshdeskConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_FRESHDESKCONFIGURATION",u.newFreshdeskConfiguration=!0),u.addNewFreshdeskConfiguration=function(){u.errors=[],l.intFreshdeskAccount.addConfiguration({id:t.params.id},u.freshdeskConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"FreshdeskConfiguration properly created",msg:u.freshdeskConfiguration.name?u.freshdeskConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveFreshdeskConfiguration=function(){u.errors=[],l.intFreshdeskConfiguration.update({id:u.freshdeskConfiguration.id},u.freshdeskConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FreshdeskConfiguration properly saved!",msg:u.freshdeskConfiguration.name?u.freshdeskConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteFreshdeskConfiguration=function(e){u.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(){l.intFreshdeskConfiguration.delete({id:u.freshdeskConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.freshdeskConfiguration.id}),o.success({title:"FreshdeskConfiguration properly deleted!",msg:(u.freshdeskConfiguration.name||"freshdeskConfiguration")+" has been deleted!"}),p(u.freshdeskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","freshdeskConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditFreshdeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intFreshdeskField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intFreshdeskField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditFreshdeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.freshdeskAccount=d||e.params.freshdeskAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoFreshdeskAccounts=function(){e.go("app.integrations.freshdeskAccounts")},c.saveFreshdeskAccount=function(){s.intFreshdeskAccount.update({id:c.freshdeskAccount.id},c.freshdeskAccount).$promise.then(function(){r.success({title:"FreshdeskAccount updated!",msg:c.freshdeskAccount.name?c.freshdeskAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","freshdeskAccount"],angular.module("app.integrations").controller("FreshdeskAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.freshdeskAccounts=r||{count:0,rows:[]},v.table="freshdeskAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedFreshdeskAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",limit:10,page:1},v.editstate=function(e,t){n.go("app.integrations.freshdeskAccounts.edit",{id:e.id,freshdeskAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intFreshdeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"FreshdeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"FreshdeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the freshdeskAccount?").htmlContent("<b>"+(e.name||"freshdeskAccount")+"</b> will be deleted.").ariaLabel("delete freshdeskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getFreshdeskAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intFreshdeskAccount.get(v.query,f).$promise},v.createOrEditFreshdeskAccount=function(e,t){i.show({controller:"CreateOrEditFreshdeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{freshdeskAccount:t,freshdeskAccounts:v.freshdeskAccounts.rows,license:v.license,setting:v.setting}})},v.deleteFreshdeskAccount=A,v.exportSelectedFreshdeskAccounts=function(){var e=angular.copy(v.selectedFreshdeskAccounts);return v.selectedFreshdeskAccounts=[],e},v.deleteSelectedFreshdeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected freshdeskAccounts?").htmlContent("<b>"+v.selectedFreshdeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete FreshdeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedFreshdeskAccounts.forEach(function(e){A(e)}),v.selectedFreshdeskAccounts=[]})},v.deselectFreshdeskAccounts=function(){v.selectedFreshdeskAccounts=[]},v.selectAllFreshdeskAccounts=function(){v.selectedFreshdeskAccounts=v.freshdeskAccounts.rows};var h=!0,b=1;function f(e){v.freshdeskAccounts=e||{count:0,rows:[]}}function A(e){l.intFreshdeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.freshdeskAccounts.rows,{id:e.id}),v.freshdeskAccounts.count-=1,v.freshdeskAccounts.rows.length||v.getFreshdeskAccounts(),c.success({title:"FreshdeskAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintFreshdeskAccount"}];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:"SYSTEM:DELETEintFreshdeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getFreshdeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","freshdeskAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("FreshdeskAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_SALESFORCEACCOUNT",u.salesforceAccount=angular.copy(r),u.salesforceAccounts=s,u.newSalesforceAccount=!1,u.salesforceAccount||(u.salesforceAccount={type:"integrationTab",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_SALESFORCEACCOUNT",u.newSalesforceAccount=!0),u.addNewSalesforceAccount=function(){u.errors=[],l.intSalesforceAccount.save(u.salesforceAccount).$promise.then(function(e){u.salesforceAccounts.unshift(e.toJSON()),o.success({title:"SalesforceAccount properly created",msg:u.salesforceAccount.name?u.salesforceAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSalesforceAccount=function(){u.errors=[],l.intSalesforceAccount.update({id:u.salesforceAccount.id},u.salesforceAccount).$promise.then(function(e){var t=_.find(u.salesforceAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SalesforceAccount properly saved!",msg:u.salesforceAccount.name?u.salesforceAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSalesforceAccount=function(e){u.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(){l.intSalesforceAccount.delete({id:u.salesforceAccount.id}).$promise.then(function(){_.remove(u.salesforceAccounts,{id:u.salesforceAccount.id}),o.success({title:"SalesforceAccount properly deleted!",msg:(u.salesforceAccount.name||"salesforceAccount")+" has been deleted!"}),p(u.salesforceAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","salesforceAccounts","salesforceAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditSalesforceAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intSalesforceField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.salesforceAccount={},s.salesforceConfiguration={},s.configurations=[],s.selectedSalesforceConfiguration=-1,s.init=function(e){s.salesforceAccount=e,i.intSalesforceAccount.getConfigurations({id:s.salesforceAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getSalesforceConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getSalesforceConfiguration=function(e){s.salesforceConfiguration=s.configurations[e],s.selectedSalesforceConfiguration=e,i.intSalesforceConfiguration.getSubjects({id:s.salesforceConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intSalesforceConfiguration.getDescriptions({id:s.salesforceConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intSalesforceConfiguration.getFields({id:s.salesforceConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getSalesforceConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"SalesforceConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getSalesforceConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.salesforceConfiguration.id},s.salesforceConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedSubjects=[],s.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:s.subjects,configuration:s.salesforceConfiguration,account:s.salesforceAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.salesforceConfiguration,account:s.salesforceAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.salesforceConfiguration,account:s.salesforceAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_SALESFORCECONFIGURATION",u.salesforceConfiguration=angular.copy(r),u.configurations=s,u.newSalesforceConfiguration=!1,u.salesforceConfiguration||(u.salesforceConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_SALESFORCECONFIGURATION",u.newSalesforceConfiguration=!0),u.addNewSalesforceConfiguration=function(){u.errors=[],l.intSalesforceAccount.addConfiguration({id:t.params.id},u.salesforceConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"SalesforceConfiguration properly created",msg:u.salesforceConfiguration.name?u.salesforceConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSalesforceConfiguration=function(){u.errors=[],l.intSalesforceConfiguration.update({id:u.salesforceConfiguration.id},u.salesforceConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SalesforceConfiguration properly saved!",msg:u.salesforceConfiguration.name?u.salesforceConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSalesforceConfiguration=function(e){u.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(){l.intSalesforceConfiguration.delete({id:u.salesforceConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.salesforceConfiguration.id}),o.success({title:"SalesforceConfiguration properly deleted!",msg:(u.salesforceConfiguration.name||"salesforceConfiguration")+" has been deleted!"}),p(u.salesforceConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","salesforceConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditSalesforceConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intSalesforceField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intSalesforceField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditSalesforceAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.salesforceAccount=d||e.params.salesforceAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoSalesforceAccounts=function(){e.go("app.integrations.salesforceAccounts")},c.saveSalesforceAccount=function(){s.intSalesforceAccount.update({id:c.salesforceAccount.id},c.salesforceAccount).$promise.then(function(){r.success({title:"SalesforceAccount updated!",msg:c.salesforceAccount.name?c.salesforceAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","salesforceAccount"],angular.module("app.integrations").controller("SalesforceAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.salesforceAccounts=r||{count:0,rows:[]},v.table="salesforceAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedSalesforceAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",limit:10,page:1},v.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.integrations.salesforceAccounts.edit",{id:e.id,salesforceAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intSalesforceAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"SalesforceAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"SalesforceAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the salesforceAccount?").htmlContent("<b>"+(e.name||"salesforceAccount")+"</b> will be deleted.").ariaLabel("delete salesforceAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getSalesforceAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intSalesforceAccount.get(v.query,f).$promise},v.createOrEditSalesforceAccount=function(e,t){i.show({controller:"CreateOrEditSalesforceAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{salesforceAccount:t,salesforceAccounts:v.salesforceAccounts.rows,license:v.license,setting:v.setting}})},v.deleteSalesforceAccount=A,v.exportSelectedSalesforceAccounts=function(){var e=angular.copy(v.selectedSalesforceAccounts);return v.selectedSalesforceAccounts=[],e},v.deleteSelectedSalesforceAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected salesforceAccounts?").htmlContent("<b>"+v.selectedSalesforceAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SalesforceAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSalesforceAccounts.forEach(function(e){A(e)}),v.selectedSalesforceAccounts=[]})},v.deselectSalesforceAccounts=function(){v.selectedSalesforceAccounts=[]},v.selectAllSalesforceAccounts=function(){v.selectedSalesforceAccounts=v.salesforceAccounts.rows};var h=!0,b=1;function f(e){v.salesforceAccounts=e||{count:0,rows:[]}}function A(e){l.intSalesforceAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.salesforceAccounts.rows,{id:e.id}),v.salesforceAccounts.count-=1,v.salesforceAccounts.rows.length||v.getSalesforceAccounts(),c.success({title:"SalesforceAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintSalesforceAccount"}];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:"SYSTEM:DELETEintSalesforceAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSalesforceAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","salesforceAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("SalesforceAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_SUGARCRMACCOUNT",u.sugarcrmAccount=angular.copy(r),u.sugarcrmAccounts=s,u.newSugarcrmAccount=!1,u.sugarcrmAccount||(u.sugarcrmAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_SUGARCRMACCOUNT",u.newSugarcrmAccount=!0),u.addNewSugarcrmAccount=function(){u.errors=[],l.intSugarcrmAccount.save(u.sugarcrmAccount).$promise.then(function(e){u.sugarcrmAccounts.unshift(e.toJSON()),o.success({title:"SugarcrmAccount properly created",msg:u.sugarcrmAccount.name?u.sugarcrmAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSugarcrmAccount=function(){u.errors=[],l.intSugarcrmAccount.update({id:u.sugarcrmAccount.id},u.sugarcrmAccount).$promise.then(function(e){var t=_.find(u.sugarcrmAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SugarcrmAccount properly saved!",msg:u.sugarcrmAccount.name?u.sugarcrmAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSugarcrmAccount=function(e){u.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(){l.intSugarcrmAccount.delete({id:u.sugarcrmAccount.id}).$promise.then(function(){_.remove(u.sugarcrmAccounts,{id:u.sugarcrmAccount.id}),o.success({title:"SugarcrmAccount properly deleted!",msg:(u.sugarcrmAccount.name||"sugarcrmAccount")+" has been deleted!"}),p(u.sugarcrmAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","sugarcrmAccounts","sugarcrmAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditSugarcrmAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intSugarcrmField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.sugarcrmAccount={},s.sugarcrmConfiguration={},s.configurations=[],s.selectedSugarcrmConfiguration=-1,s.init=function(e){s.sugarcrmAccount=e,i.intSugarcrmAccount.getConfigurations({id:s.sugarcrmAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getSugarcrmConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getSugarcrmConfiguration=function(e){s.sugarcrmConfiguration=s.configurations[e],s.selectedSugarcrmConfiguration=e,i.intSugarcrmConfiguration.getSubjects({id:s.sugarcrmConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intSugarcrmConfiguration.getDescriptions({id:s.sugarcrmConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intSugarcrmConfiguration.getFields({id:s.sugarcrmConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getSugarcrmConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"SugarcrmConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getSugarcrmConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.sugarcrmConfiguration.id},s.sugarcrmConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedSubjects=[],s.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:s.subjects,configuration:s.sugarcrmConfiguration,account:s.sugarcrmAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.sugarcrmConfiguration,account:s.sugarcrmAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.sugarcrmConfiguration,account:s.sugarcrmAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_SUGARCRMCONFIGURATION",u.sugarcrmConfiguration=angular.copy(r),u.configurations=s,u.newSugarcrmConfiguration=!1,u.sugarcrmConfiguration||(u.sugarcrmConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_SUGARCRMCONFIGURATION",u.newSugarcrmConfiguration=!0),u.addNewSugarcrmConfiguration=function(){u.errors=[],l.intSugarcrmAccount.addConfiguration({id:t.params.id},u.sugarcrmConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"SugarcrmConfiguration properly created",msg:u.sugarcrmConfiguration.name?u.sugarcrmConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSugarcrmConfiguration=function(){u.errors=[],l.intSugarcrmConfiguration.update({id:u.sugarcrmConfiguration.id},u.sugarcrmConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SugarcrmConfiguration properly saved!",msg:u.sugarcrmConfiguration.name?u.sugarcrmConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSugarcrmConfiguration=function(e){u.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(){l.intSugarcrmConfiguration.delete({id:u.sugarcrmConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.sugarcrmConfiguration.id}),o.success({title:"SugarcrmConfiguration properly deleted!",msg:(u.sugarcrmConfiguration.name||"sugarcrmConfiguration")+" has been deleted!"}),p(u.sugarcrmConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","sugarcrmConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditSugarcrmConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intSugarcrmField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intSugarcrmField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditSugarcrmAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.sugarcrmAccount=d||e.params.sugarcrmAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoSugarcrmAccounts=function(){e.go("app.integrations.sugarcrmAccounts")},c.saveSugarcrmAccount=function(){s.intSugarcrmAccount.update({id:c.sugarcrmAccount.id},c.sugarcrmAccount).$promise.then(function(){r.success({title:"SugarcrmAccount updated!",msg:c.sugarcrmAccount.name?c.sugarcrmAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","sugarcrmAccount"],angular.module("app.integrations").controller("SugarcrmAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.sugarcrmAccounts=r||{count:0,rows:[]},v.table="sugarcrmAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedSugarcrmAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",limit:10,page:1},v.editstate=function(e,t){n.go("app.integrations.sugarcrmAccounts.edit",{id:e.id,sugarcrmAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intSugarcrmAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"SugarcrmAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"SugarcrmAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the sugarcrmAccount?").htmlContent("<b>"+(e.name||"sugarcrmAccount")+"</b> will be deleted.").ariaLabel("delete sugarcrmAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getSugarcrmAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intSugarcrmAccount.get(v.query,f).$promise},v.createOrEditSugarcrmAccount=function(e,t){i.show({controller:"CreateOrEditSugarcrmAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{sugarcrmAccount:t,sugarcrmAccounts:v.sugarcrmAccounts.rows,license:v.license,setting:v.setting}})},v.deleteSugarcrmAccount=A,v.exportSelectedSugarcrmAccounts=function(){var e=angular.copy(v.selectedSugarcrmAccounts);return v.selectedSugarcrmAccounts=[],e},v.deleteSelectedSugarcrmAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected sugarcrmAccounts?").htmlContent("<b>"+v.selectedSugarcrmAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SugarcrmAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSugarcrmAccounts.forEach(function(e){A(e)}),v.selectedSugarcrmAccounts=[]})},v.deselectSugarcrmAccounts=function(){v.selectedSugarcrmAccounts=[]},v.selectAllSugarcrmAccounts=function(){v.selectedSugarcrmAccounts=v.sugarcrmAccounts.rows};var h=!0,b=1;function f(e){v.sugarcrmAccounts=e||{count:0,rows:[]}}function A(e){l.intSugarcrmAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.sugarcrmAccounts.rows,{id:e.id}),v.sugarcrmAccounts.count-=1,v.sugarcrmAccounts.rows.length||v.getSugarcrmAccounts(),c.success({title:"SugarcrmAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintSugarcrmAccount"}];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:"SYSTEM:DELETEintSugarcrmAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSugarcrmAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","sugarcrmAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("SugarcrmAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_VTIGERACCOUNT",u.vtigerAccount=angular.copy(r),u.vtigerAccounts=s,u.newVtigerAccount=!1,u.vtigerAccount||(u.vtigerAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_VTIGERACCOUNT",u.newVtigerAccount=!0),u.addNewVtigerAccount=function(){u.errors=[],l.intVtigerAccount.save(u.vtigerAccount).$promise.then(function(e){u.vtigerAccounts.unshift(e.toJSON()),o.success({title:"VtigerAccount properly created",msg:u.vtigerAccount.name?u.vtigerAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVtigerAccount=function(){u.errors=[],l.intVtigerAccount.update({id:u.vtigerAccount.id},u.vtigerAccount).$promise.then(function(e){var t=_.find(u.vtigerAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VtigerAccount properly saved!",msg:u.vtigerAccount.name?u.vtigerAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVtigerAccount=function(e){u.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(){l.intVtigerAccount.delete({id:u.vtigerAccount.id}).$promise.then(function(){_.remove(u.vtigerAccounts,{id:u.vtigerAccount.id}),o.success({title:"VtigerAccount properly deleted!",msg:(u.vtigerAccount.name||"vtigerAccount")+" has been deleted!"}),p(u.vtigerAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","vtigerAccounts","vtigerAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditVtigerAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intVtigerField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.vtigerAccount={},s.vtigerConfiguration={},s.configurations=[],s.selectedVtigerConfiguration=-1,s.init=function(e){s.vtigerAccount=e,i.intVtigerAccount.getConfigurations({id:s.vtigerAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getVtigerConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getVtigerConfiguration=function(e){s.vtigerConfiguration=s.configurations[e],s.selectedVtigerConfiguration=e,i.intVtigerConfiguration.getSubjects({id:s.vtigerConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intVtigerConfiguration.getDescriptions({id:s.vtigerConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intVtigerConfiguration.getFields({id:s.vtigerConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getVtigerConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"VtigerConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getVtigerConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.vtigerConfiguration.id},s.vtigerConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedSubjects=[],s.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:s.subjects,configuration:s.vtigerConfiguration,account:s.vtigerAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.vtigerConfiguration,account:s.vtigerAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.vtigerConfiguration,account:s.vtigerAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_VTIGERCONFIGURATION",u.vtigerConfiguration=angular.copy(r),u.configurations=s,u.newVtigerConfiguration=!1,u.vtigerConfiguration||(u.vtigerConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_VTIGERCONFIGURATION",u.newVtigerConfiguration=!0),u.addNewVtigerConfiguration=function(){u.errors=[],l.intVtigerAccount.addConfiguration({id:t.params.id},u.vtigerConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"VtigerConfiguration properly created",msg:u.vtigerConfiguration.name?u.vtigerConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVtigerConfiguration=function(){u.errors=[],l.intVtigerConfiguration.update({id:u.vtigerConfiguration.id},u.vtigerConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VtigerConfiguration properly saved!",msg:u.vtigerConfiguration.name?u.vtigerConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVtigerConfiguration=function(e){u.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(){l.intVtigerConfiguration.delete({id:u.vtigerConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.vtigerConfiguration.id}),o.success({title:"VtigerConfiguration properly deleted!",msg:(u.vtigerConfiguration.name||"vtigerConfiguration")+" has been deleted!"}),p(u.vtigerConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","vtigerConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditVtigerConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intVtigerField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intVtigerField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditVtigerAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.vtigerAccount=d||e.params.vtigerAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoVtigerAccounts=function(){e.go("app.integrations.vtigerAccounts")},c.saveVtigerAccount=function(){s.intVtigerAccount.update({id:c.vtigerAccount.id},c.vtigerAccount).$promise.then(function(){r.success({title:"VtigerAccount updated!",msg:c.vtigerAccount.name?c.vtigerAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","vtigerAccount"],angular.module("app.integrations").controller("VtigerAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.vtigerAccounts=r||{count:0,rows:[]},v.table="vtigerAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedVtigerAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",limit:10,page:1},v.editstate=function(e,t){n.go("app.integrations.vtigerAccounts.edit",{id:e.id,vtigerAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intVtigerAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"VtigerAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"VtigerAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the vtigerAccount?").htmlContent("<b>"+(e.name||"vtigerAccount")+"</b> will be deleted.").ariaLabel("delete vtigerAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getVtigerAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intVtigerAccount.get(v.query,f).$promise},v.createOrEditVtigerAccount=function(e,t){i.show({controller:"CreateOrEditVtigerAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{vtigerAccount:t,vtigerAccounts:v.vtigerAccounts.rows,license:v.license,setting:v.setting}})},v.deleteVtigerAccount=A,v.exportSelectedVtigerAccounts=function(){var e=angular.copy(v.selectedVtigerAccounts);return v.selectedVtigerAccounts=[],e},v.deleteSelectedVtigerAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected vtigerAccounts?").htmlContent("<b>"+v.selectedVtigerAccounts.length+" selected</b> will be deleted.").ariaLabel("delete VtigerAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVtigerAccounts.forEach(function(e){A(e)}),v.selectedVtigerAccounts=[]})},v.deselectVtigerAccounts=function(){v.selectedVtigerAccounts=[]},v.selectAllVtigerAccounts=function(){v.selectedVtigerAccounts=v.vtigerAccounts.rows};var h=!0,b=1;function f(e){v.vtigerAccounts=e||{count:0,rows:[]}}function A(e){l.intVtigerAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.vtigerAccounts.rows,{id:e.id}),v.vtigerAccounts.count-=1,v.vtigerAccounts.rows.length||v.getVtigerAccounts(),c.success({title:"VtigerAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintVtigerAccount"}];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:"SYSTEM:DELETEintVtigerAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVtigerAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","vtigerAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("VtigerAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_ZENDESKACCOUNT",u.zendeskAccount=angular.copy(r),u.zendeskAccounts=s,u.newZendeskAccount=!1,u.zendeskAccount||(u.zendeskAccount={type:"integrationTab",authType:"password",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_ZENDESKACCOUNT",u.newZendeskAccount=!0),u.addNewZendeskAccount=function(){u.errors=[],l.intZendeskAccount.save(u.zendeskAccount).$promise.then(function(e){u.zendeskAccounts.unshift(e.toJSON()),o.success({title:"ZendeskAccount properly created",msg:u.zendeskAccount.name?u.zendeskAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveZendeskAccount=function(){u.errors=[],l.intZendeskAccount.update({id:u.zendeskAccount.id},u.zendeskAccount).$promise.then(function(e){var t=_.find(u.zendeskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZendeskAccount properly saved!",msg:u.zendeskAccount.name?u.zendeskAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteZendeskAccount=function(e){u.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(){l.intZendeskAccount.delete({id:u.zendeskAccount.id}).$promise.then(function(){_.remove(u.zendeskAccounts,{id:u.zendeskAccount.id}),o.success({title:"ZendeskAccount properly deleted!",msg:(u.zendeskAccount.name||"zendeskAccount")+" has been deleted!"}),p(u.zendeskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","zendeskAccounts","zendeskAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditZendeskAccountDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intZendeskField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intZendeskField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditZendeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.zendeskAccount=d||e.params.zendeskAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoZendeskAccounts=function(){e.go("app.integrations.zendeskAccounts")},c.saveZendeskAccount=function(){s.intZendeskAccount.update({id:c.zendeskAccount.id},c.zendeskAccount).$promise.then(function(){r.success({title:"ZendeskAccount updated!",msg:c.zendeskAccount.name?c.zendeskAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","zendeskAccount"],angular.module("app.integrations").controller("ZendeskAccountController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intZendeskField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.zendeskAccount={},s.zendeskConfiguration={},s.zendeskConfigurations=[],s.selectedZendeskConfiguration=-1,s.init=function(e){s.zendeskAccount=e,i.intZendeskAccount.getConfigurations({id:s.zendeskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.zendeskConfigurations=e.rows?e.rows:[],s.zendeskConfigurations.length&&s.getZendeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getZendeskConfiguration=function(e){s.zendeskConfiguration=s.zendeskConfigurations[e],s.selectedZendeskConfiguration=e,i.intZendeskConfiguration.getSubjects({id:s.zendeskConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intZendeskConfiguration.getDescriptions({id:s.zendeskConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intZendeskConfiguration.getFields({id:s.zendeskConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intZendeskConfiguration.getTags({id:s.zendeskConfiguration.id}).$promise.then(function(e){s.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.zendeskConfigurations,license:null,setting:null}}).finally(function(){s.getZendeskConfiguration(0)})},s.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(s.zendeskConfigurations,{id:t.id}),o.success({title:"ZendeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getZendeskConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.zendeskConfiguration.id},s.zendeskConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedTags=[],s.selectTagsChanged=function(e){i.intZendeskConfiguration.setTags({id:s.zendeskConfiguration.id,ids:s.selectedTags}).$promise.then(function(){o.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){o.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){s.tags=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.selectedSubjects=[],s.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:s.subjects,configuration:s.zendeskConfiguration,account:s.zendeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.zendeskConfiguration,account:s.zendeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.zendeskConfiguration,account:s.zendeskAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_ZENDESKCONFIGURATION",u.zendeskConfiguration=angular.copy(r),u.zendeskConfigurations=s,u.newZendeskConfiguration=!1,u.zendeskConfiguration||(u.zendeskConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_ZENDESKCONFIGURATION",u.newZendeskConfiguration=!0),u.addNewZendeskConfiguration=function(){u.errors=[],l.intZendeskAccount.addConfiguration({id:t.params.id},u.zendeskConfiguration).$promise.then(function(e){u.zendeskConfigurations.unshift(e.toJSON()),o.success({title:"ZendeskConfiguration properly created",msg:u.zendeskConfiguration.name?u.zendeskConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveZendeskConfiguration=function(){u.errors=[],l.intZendeskConfiguration.update({id:u.zendeskConfiguration.id},u.zendeskConfiguration).$promise.then(function(e){var t=_.find(u.zendeskConfigurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZendeskConfiguration properly saved!",msg:u.zendeskConfiguration.name?u.zendeskConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteZendeskConfiguration=function(e){u.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(){l.intZendeskConfiguration.delete({id:u.zendeskConfiguration.id}).$promise.then(function(){_.remove(u.zendeskConfigurations,{id:u.zendeskConfiguration.id}),o.success({title:"ZendeskConfiguration properly deleted!",msg:(u.zendeskConfiguration.name||"zendeskConfiguration")+" has been deleted!"}),p(u.zendeskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","zendeskConfigurations","zendeskConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditZendeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.zendeskAccounts=r||{count:0,rows:[]},v.table="zendeskAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedZendeskAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",limit:10,page:1},v.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayauthType=_.keyBy([{option:"Password",value:"'password'"},{option:"Token",value:"'token'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.integrations.zendeskAccounts.edit",{id:e.id,zendeskAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intZendeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"ZendeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"ZendeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the zendeskAccount?").htmlContent("<b>"+(e.name||"zendeskAccount")+"</b> will be deleted.").ariaLabel("delete zendeskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getZendeskAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intZendeskAccount.get(v.query,f).$promise},v.createOrEditZendeskAccount=function(e,t){i.show({controller:"CreateOrEditZendeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{zendeskAccount:t,zendeskAccounts:v.zendeskAccounts.rows,license:v.license,setting:v.setting}})},v.deleteZendeskAccount=A,v.exportSelectedZendeskAccounts=function(){var e=angular.copy(v.selectedZendeskAccounts);return v.selectedZendeskAccounts=[],e},v.deleteSelectedZendeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected zendeskAccounts?").htmlContent("<b>"+v.selectedZendeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete ZendeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedZendeskAccounts.forEach(function(e){A(e)}),v.selectedZendeskAccounts=[]})},v.deselectZendeskAccounts=function(){v.selectedZendeskAccounts=[]},v.selectAllZendeskAccounts=function(){v.selectedZendeskAccounts=v.zendeskAccounts.rows};var h=!0,b=1;function f(e){v.zendeskAccounts=e||{count:0,rows:[]}}function A(e){l.intZendeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.zendeskAccounts.rows,{id:e.id}),v.zendeskAccounts.count-=1,v.zendeskAccounts.rows.length||v.getZendeskAccounts(),c.success({title:"ZendeskAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintZendeskAccount"}];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:"SYSTEM:DELETEintZendeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getZendeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","zendeskAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("ZendeskAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_ZOHOACCOUNT",u.zohoAccount=angular.copy(r),u.zohoAccounts=s,u.newZohoAccount=!1,u.zohoAccount||(u.zohoAccount={host:"zoho.com",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},u.title="INTEGRATIONS.NEW_ZOHOACCOUNT",u.newZohoAccount=!0),u.addNewZohoAccount=function(){u.errors=[],l.intZohoAccount.save(u.zohoAccount).$promise.then(function(e){u.zohoAccounts.unshift(e.toJSON()),o.success({title:"ZohoAccount properly created",msg:u.zohoAccount.name?u.zohoAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveZohoAccount=function(){u.errors=[],l.intZohoAccount.update({id:u.zohoAccount.id},u.zohoAccount).$promise.then(function(e){var t=_.find(u.zohoAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZohoAccount properly saved!",msg:u.zohoAccount.name?u.zohoAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteZohoAccount=function(e){u.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(){l.intZohoAccount.delete({id:u.zohoAccount.id}).$promise.then(function(){_.remove(u.zohoAccounts,{id:u.zohoAccount.id}),o.success({title:"ZohoAccount properly deleted!",msg:(u.zohoAccount.name||"zohoAccount")+" has been deleted!"}),p(u.zohoAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","zohoAccounts","zohoAccount","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditZohoAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,o,e){var s=this;function r(e){i.intZohoField.delete({id:e.id}).$promise.then(function(){_.remove(s.subjects,{id:e.id}),o.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){o.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(s.descriptions,{id:e.id}),o.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){o.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(s.fields,{id:e.id}),o.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}s.currentUser=e.getCurrentUser(),s.zohoAccount={},s.zohoConfiguration={},s.configurations=[],s.selectedZohoConfiguration=-1,s.init=function(e){s.zohoAccount=e,i.intZohoAccount.getConfigurations({id:s.zohoAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return s.configurations=e.rows?e.rows:[],s.configurations.length&&s.getZohoConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){s.variables=e.rows?e.rows:[],s.variablesById=_.keyBy(s.variables,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.getZohoConfiguration=function(e){s.zohoConfiguration=s.configurations[e],s.selectedZohoConfiguration=e,i.intZohoConfiguration.getSubjects({id:s.zohoConfiguration.id}).$promise.then(function(e){return s.subjects=e.rows?e.rows:[],i.intZohoConfiguration.getDescriptions({id:s.zohoConfiguration.id}).$promise}).then(function(e){return s.descriptions=e.rows?e.rows:[],i.intZohoConfiguration.getFields({id:s.zohoConfiguration.id}).$promise}).then(function(e){s.fields=e.rows?e.rows:[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.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:s.configurations,license:null,setting:null}}).finally(function(){s.getZohoConfiguration(0)})},s.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(s.configurations,{id:t.id}),o.success({title:"ZohoConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){s.getZohoConfiguration(0)})},function(){console.log("CANCEL")})},s.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:s.zohoConfiguration.id},s.zohoConfiguration).$promise.then(function(){o.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.selectedSubjects=[],s.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:s.subjects,configuration:s.zohoConfiguration,account:s.zohoAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+s.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedSubjects.forEach(function(e){r(e)}),s.selectedSubjects=[]})},s.selectedDescriptions=[],s.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:s.descriptions,configuration:s.zohoConfiguration,account:s.zohoAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+s.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedDescriptions.forEach(function(e){l(e)}),s.selectedDescriptions=[]})},s.selectedFields=[],s.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:s.fields,configuration:s.zohoConfiguration,account:s.zohoAccount,license:null,setting:null}})},s.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")})},s.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+s.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){s.selectedFields.forEach(function(e){d(e)}),s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="INTEGRATIONS.EDIT_ZOHOCONFIGURATION",u.zohoConfiguration=angular.copy(r),u.configurations=s,u.newZohoConfiguration=!1,u.zohoConfiguration||(u.zohoConfiguration={channel:"voice",type:"inbound"},u.title="INTEGRATIONS.NEW_ZOHOCONFIGURATION",u.newZohoConfiguration=!0),u.addNewZohoConfiguration=function(){u.errors=[],l.intZohoAccount.addConfiguration({id:t.params.id},u.zohoConfiguration).$promise.then(function(e){u.configurations.unshift(e.toJSON()),o.success({title:"ZohoConfiguration properly created",msg:u.zohoConfiguration.name?u.zohoConfiguration.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveZohoConfiguration=function(){u.errors=[],l.intZohoConfiguration.update({id:u.zohoConfiguration.id},u.zohoConfiguration).$promise.then(function(e){var t=_.find(u.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZohoConfiguration properly saved!",msg:u.zohoConfiguration.name?u.zohoConfiguration.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteZohoConfiguration=function(e){u.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(){l.intZohoConfiguration.delete({id:u.zohoConfiguration.id}).$promise.then(function(){_.remove(u.configurations,{id:u.zohoConfiguration.id}),o.success({title:"ZohoConfiguration properly deleted!",msg:(u.zohoConfiguration.name||"zohoConfiguration")+" has been deleted!"}),p(u.zohoConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","configurations","zohoConfiguration","api","Auth","license","setting"],angular.module("app.integrations").controller("CreateOrEditZohoConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c){var m=this;function u(){a.hide()}m.errors=[],m.title="INTEGRATIONS.EDIT_"+_.toUpper(d),m.item=angular.copy(r),m.items=s,m.type=d,m.newItem=!1,m.item||(m.item={type:"string"},m.item[_.capitalize(d)+"Id"]=o.id,m.title="INTEGRATIONS.NEW_"+_.toUpper(d),m.newItem=!0),m.addNewItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intZohoField.save(m.item).$promise.then(function(e){m.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},m.saveItem=function(){m.errors=[],m.customField&&(m.item.idField=m.customField.id,m.item.nameField=m.customField.name,m.item.customField=m.customField.custom);c.intZohoField.update({id:m.item.id},m.item).$promise.then(function(e){var t=_.find(m.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},m.deleteItem=function(e){m.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:m.item.id}).$promise.then(function(){_.remove(m.items,{id:m.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),u()}).catch(function(e){console.error(e),m.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},m.getSelectedVariable=function(){return void 0!==m.item.variableName?m.item.variableName:"Please select a variable"},m.closeDialog=u,c.variable.get({nolimit:!0}).$promise.then(function(e){return m.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return m.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){m.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),m.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}).$promise.then(function(e){m.accountConnected=!0,m.fields=e.rows?e.rows:[],m.item.idField&&(m.customField=_.find(m.fields,{id:m.item.idField}))}).catch(function(e){m.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api"],angular.module("app.integrations").controller("CreateOrEditZohoAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.zohoAccount=d||e.params.zohoAccount||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoZohoAccounts=function(){e.go("app.integrations.zohoAccounts")},c.saveZohoAccount=function(){s.intZohoAccount.update({id:c.zohoAccount.id},c.zohoAccount).$promise.then(function(){r.success({title:"ZohoAccount updated!",msg:c.zohoAccount.name?c.zohoAccount.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","zohoAccount"],angular.module("app.integrations").controller("ZohoAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.zohoAccounts=r||{count:0,rows:[]},v.table="zohoAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedZohoAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",limit:10,page:1},v.arrayhost=_.keyBy([{option:"zoho.com",value:"'zoho.com'"},{option:"zoho.eu",value:"'zoho.eu'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.integrations.zohoAccounts.edit",{id:e.id,zohoAccount:e})},v.testtestintegrationaccount=function(e,t){return l.intZohoAccount.getFields({id:e.id,test:!0}).$promise.then(function(){c.success({title:"ZohoAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"ZohoAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the zohoAccount?").htmlContent("<b>"+(e.name||"zohoAccount")+"</b> will be deleted.").ariaLabel("delete zohoAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getZohoAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.intZohoAccount.get(v.query,f).$promise},v.createOrEditZohoAccount=function(e,t){i.show({controller:"CreateOrEditZohoAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{zohoAccount:t,zohoAccounts:v.zohoAccounts.rows,license:v.license,setting:v.setting}})},v.deleteZohoAccount=A,v.exportSelectedZohoAccounts=function(){var e=angular.copy(v.selectedZohoAccounts);return v.selectedZohoAccounts=[],e},v.deleteSelectedZohoAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected zohoAccounts?").htmlContent("<b>"+v.selectedZohoAccounts.length+" selected</b> will be deleted.").ariaLabel("delete ZohoAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedZohoAccounts.forEach(function(e){A(e)}),v.selectedZohoAccounts=[]})},v.deselectZohoAccounts=function(){v.selectedZohoAccounts=[]},v.selectAllZohoAccounts=function(){v.selectedZohoAccounts=v.zohoAccounts.rows};var h=!0,b=1;function f(e){v.zohoAccounts=e||{count:0,rows:[]}}function A(e){l.intZohoAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.zohoAccounts.rows,{id:e.id}),v.zohoAccounts.count-=1,v.zohoAccounts.rows.length||v.getZohoAccounts(),c.success({title:"ZohoAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintZohoAccount"}];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:"SYSTEM:DELETEintZohoAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getZohoAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","zohoAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("ZohoAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="JSCRIPTY.EDIT_PROJECT",u.project=angular.copy(r),u.projects=s,u.newProject=!1,u.project||(u.project={enableUncompleteSave:!0},u.title="JSCRIPTY.NEW_PROJECT",u.newProject=!0),u.addNewProject=function(){u.errors=[],l.jscriptyProject.save(u.project).$promise.then(function(e){u.projects.unshift(e.toJSON()),o.success({title:"Project properly created",msg:u.project.name?u.project.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveProject=function(){u.errors=[],l.jscriptyProject.update({id:u.project.id},u.project).$promise.then(function(e){var t=_.find(u.projects,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Project properly saved!",msg:u.project.name?u.project.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteProject=function(e){u.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(){l.jscriptyProject.delete({id:u.project.id}).$promise.then(function(){_.remove(u.projects,{id:u.project.id}),o.success({title:"Project properly deleted!",msg:(u.project.name||"project")+" has been deleted!"}),p(u.project)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","projects","project","api","Auth","license","setting"],angular.module("app.jscripty").controller("CreateOrEditProjectDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o){var s=this;s.project={},s.localizationMap=o;var r=new Date;r.setHours(0,0,0,0),s.pickerModel={dateStart:r,dateEnd:null,selectedTemplate:"TD"},s.init=function(e){s.project=e,s.getAnswers()},s.getSummary=function(){return a.jscriptyProject.getSummary({id:s.project.id,dateStart:moment(s.pickerModel.dateStart).format("YYYY-MM-DD HH:mm:ss"),dateEnd:moment(s.pickerModel.dateEnd).format("YYYY-MM-DD HH:mm:ss"),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_"+s.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()})})},s.getAnswers=function(){return s.hasIdAnswers=!1,a.jscriptyProject.getAnswers({id:s.project.id,sort:"-createdAt,questionId",dateStart:s.pickerModel.dateStart,dateEnd:s.pickerModel.dateEnd,nolimit:!0}).$promise.then(function(e){if(e&&e.rows&&e.hasOwnProperty("count")){s.answers={};for(var t=0,n=e.count;t<n;t++)e.rows[t].questionId&&(s.hasIdAnswers=!0,s.answers.hasOwnProperty(e.rows[t].questionId)||(s.answers[e.rows[t].questionId]={question:e.rows[t].question,answers:{},sum:0}),""===e.rows[t].answer&&(e.rows[t].answer="NO_ANSWER"),s.answers[e.rows[t].questionId].answers[e.rows[t].answer]?s.answers[e.rows[t].questionId].answers[e.rows[t].answer]+=1:s.answers[e.rows[t].questionId].answers[e.rows[t].answer]=1,s.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,o,s){var r=this;function l(e){t.hide(e)}r.newProject=!0,r.project=angular.copy(i),r.projects=o,r.title=s.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 s=this;s.project={},s.responseData={},s.formViewer={},s.init=function(e){s.project=e,t.$on("mwForm.pageEvents.pageCurrentChanged",function(e,t){if(t.currentPage&&s.project.formData&&s.project.formData.pages)for(var n=0,a=s.project.formData.pages.length;n<a;n++)if(t.currentPage.number<n+1&&s.project.formData.pages[n].elements)for(var i=0,o=s.project.formData.pages[n].elements.length;i<o;i++)"question"===s.project.formData.pages[n].elements[i].type&&s.project.formData.pages[n].elements[i].question&&delete s.responseData[s.project.formData.pages[n].elements[i].question.id]})},s.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},s.resetViewer=function(){s.formViewer.reset&&s.formViewer.reset()}}e.$inject=["$q","$mdDialog","$scope"],angular.module("app.jscripty").controller("ProjectViewerController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.project={},c.projectSessions={count:0,rows:[]},c.selectedProjectSessions=[],c.query={fields:"createdAt,updatedAt,id,starttime,endtime,membername,calleridnum,completed",sort:"-starttime",limit:10,page:1},c.init=function(e){c.project=e,c.query.id=c.project.id,c.getProjectSessions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditSessionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/sessions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:c.project,session:t,sessions:c.projectSessions.rows,license:null,setting:null}})},c.showQuestionsProjectSession=function(e,n){o.show({controller:"ShowQuestionsSessionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/sessions/dialog.html",parent:angular.element(s.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=o.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");o.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,o,s,r,l){this.title="JSCRIPTY.SESSION_RESULTS",this.session=o,this.questions=s,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,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.project=d||e.params.project||{},c.selectedTab=e.params.tab||0,c.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:c.projects?c.projects.rows:[]}})},c.alert=r.info,c.gotoProjects=function(){e.go("app.jscripty.projects")},c.saveProject=function(){s.jscriptyProject.update({id:c.project.id},c.project).$promise.then(function(){r.success({title:"Project updated!",msg:c.project.name?c.project.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","project"],angular.module("app.jscripty").controller("JscriptyProjectController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.projects=r||{count:0,rows:[]},v.table="projects",v.listOrder="",v.listOrderAsc=null,v.selectedProjects=[],v.query={fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,formData",sort:"-updatedAt",limit:10,page:1},v.editstate=function(e,t){n.go("app.jscripty.projects.edit",{id:e.id,project:e})},v.clonedialog=function(e,t){i.show({controller:"ProjectcloneController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{project:e,projects:v.projects?v.projects.rows:[]}})},v.sessionsgoto=function(e,t){n.go("app.jscripty.projects.edit",{id:e.id,tab:3})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the project?").htmlContent("<b>"+(e.name||"project")+"</b> will be deleted.").ariaLabel("delete project").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getProjects=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.jscriptyProject.get(v.query,f).$promise},v.createOrEditProject=function(e,t){i.show({controller:"CreateOrEditProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:t,projects:v.projects.rows,license:v.license,setting:v.setting}})},v.deleteProject=A,v.exportSelectedProjects=function(){var e=angular.copy(v.selectedProjects);return v.selectedProjects=[],e},v.deleteSelectedProjects=function(e){var t=i.confirm().title("Are you sure want to delete the selected projects?").htmlContent("<b>"+v.selectedProjects.length+" selected</b> will be deleted.").ariaLabel("delete Projects").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedProjects.forEach(function(e){A(e)}),v.selectedProjects=[]})},v.deselectProjects=function(){v.selectedProjects=[]},v.selectAllProjects=function(){v.selectedProjects=v.projects.rows};var h=!0,b=1;function f(e){v.projects=e||{count:0,rows:[]}}function A(e){l.jscriptyProject.delete({id:e.id}).$promise.then(function(){_.remove(v.projects.rows,{id:e.id}),v.projects.count-=1,v.projects.rows.length||v.getProjects(),c.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){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEjscriptyProject"}];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:"SYSTEM:DELETEjscriptyProject",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getProjects())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","projects","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.jscripty").controller("JscriptyProjectsController",e)}(),function(){"use strict";function e(e,t,n,a,o,i,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MAIL.EDIT_MAILACCOUNT",u.mailAccount=angular.copy(r),u.mailAccounts=s,u.newMailAccount=!1,u.mailAccount||(u.mailAccount={active:!0,cservice:"null",cauthentication:!0,fontSize:13,waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},u.title="MAIL.NEW_MAILACCOUNT",u.newMailAccount=!0),t.params.id&&(u.mailAccount.MailAccountId=t.params.id),u.addNewMailAccount=function(){u.errors=[],l.mailAccount.save(u.mailAccount).$promise.then(function(e){var t="add"+_.upperFirst("mailAccount")+"s";return l.user[t]({id:d.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){u.mailAccounts.unshift(e.toJSON()),i.success({title:"MailAccount properly created",msg:u.mailAccount.name?u.mailAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.save"}];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.mailAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveMailAccount=function(){u.errors=[],l.mailAccount.update({id:u.mailAccount.id},u.mailAccount).$promise.then(function(e){var t=_.find(u.mailAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),i.success({title:"MailAccount properly saved!",msg:u.mailAccount.name?u.mailAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.update"}];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.mailAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteMailAccount=function(e){if(u.mailAccount.service)return i.error({title:"Mail Account not deleted!",msg:"You can't remove service account"});u.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(){l.mailAccount.delete({id:u.mailAccount.id}).$promise.then(function(){return l.mailAccount.getAgents({id:u.mailAccount.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a="remove"+_.upperFirst("mailAccount")+"s",i=0;i<n.length;i++)t.push(l.user[a]({id:d.getCurrentUser().id,ids:[u.mailAccount.id]}).$promise);return o.all(t)}).then(function(){_.remove(u.mailAccounts,{id:u.mailAccount.id}),i.success({title:"MailAccount properly deleted!",msg:(u.mailAccount.name||"mailAccount")+" has been deleted!"}),p(u.mailAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.delete"}];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.mailAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){i.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","toasty","mailAccounts","mailAccount","api","Auth","license","setting"],angular.module("app.mail").controller("CreateOrEditMailAccountDialogController",e)}(),function(){"use strict";function e(s,i,a,o,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}}).then(function(e){e&&(e.id?r.mailAccountApps.rows[t]=e:r.mailAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&o.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=[],o=[];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=(o.length?_.last(o).priority:a.priority)+1,t=_.concat(t,i,[a],o)}s.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.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",route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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",route:"mailQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"user",filters:{fields:"id,name",sort:"name",nolimit:!0,role:"agent"}}],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",route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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){r.mailAccount=e,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=s.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:[]}}).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(),o.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 s.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,n,a,t,i,o,s,r){var l=this;function d(){return a.mailAccount[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.mailAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserMailAccount?"penalty "+e.UserMailAccount.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserMailAccount?"penalty "+e.UserMailAccount.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.mailAccount=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("MAIL.ALL_AGENTS"),labelSelected:s.instant("MAIL.SELECTED_AGENTS"),transferCallback:function(e,t){a.mailAccount[t?"removeAgents":"addAgents"]({id:l.mailAccount.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"MailAccount properly "+(t?"removed":"added"),msg:"MailAccount has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:mailAccount.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","mailAccount","mailAccounts","realtime","$translate","Auth"],angular.module("app.mail").controller("MailAccountagentaddController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(e.appType||e.app).toUpperCase(),o.agent=angular.copy(e),o.agent.appdata)switch(o.agent.appType?o.agent.appType.toLowerCase():o.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agent.appdata.split(",");o.agent.key=s[0],o.agent.language=s[1],o.agent.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agent.appdata.split(",");o.agent.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agent.text=s.slice(1,s.length).join(",");break;case"message":o.agent.text=o.agent.appdata;break;case"set":o.agent.name=o.agent.appdata.split("=")[0],o.agent.value=o.agent.appdata.split("=")[1];break;case"agi":o.agent.project=o.agent.appdata;break;default:var r=o.agent.appdata.split(",");o.agent.agent=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.agent.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.agent.timeout=30;function l(e){t.hide(e)}o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outbounddial"===o.agent.appType.toLowerCase()&&(o.agent.prefix=o.agent.phone?o.agent.phone.split("$")[0]:void 0,o.agent.callerId=o.agent.callerID?"CALLERID(all)="+o.agent.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outboundDial"===o.agent.appType&&(o.agent.phone=a.cutdigits?(o.agent.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agent.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agent.options+="U(xcally-mixmonitor-context)"):o.agent.options=o.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.agents,{name:o.agent.agent});t&&(o.agent.UserId=t.id);if(o.agent.appType&&"custom"===o.agent.appType);else switch((o.agent.app||o.agent.appType).toLowerCase()){case"set":o.agent.appdata=o.agent.name+"="+o.agent.value;break;case"custom":break;default:e[0]=o.agent.agent,e[1]=o.agent.timeout,o.agent.appdata=e.join(",")}l(o.agent)},o.closeDialog=l,i.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){o.agents=e.rows||[]}).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","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(n.appType||n.app).toUpperCase(),o.autoreply=angular.copy(n),o.autoreply.appdata)switch(o.autoreply.appType?o.autoreply.appType.toLowerCase():o.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.autoreply.appdata.split(",");o.autoreply.key=s[0],o.autoreply.language=s[1],o.autoreply.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.autoreply.appdata.split(",");o.autoreply.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.autoreply.text=s.slice(1,s.length).join(",");break;case"message":o.autoreply.text=o.autoreply.appdata;break;case"set":o.autoreply.name=o.autoreply.appdata.split("=")[0],o.autoreply.value=o.autoreply.appdata.split("=")[1];break;case"agi":o.autoreply.project=o.autoreply.appdata;break;default:var r=o.autoreply.appdata.split(",");o.autoreply.times=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.autoreply.text=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.autoreply.times=1;function l(e){t.hide(e)}o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outbounddial"===o.autoreply.appType.toLowerCase()&&(o.autoreply.prefix=o.autoreply.phone?o.autoreply.phone.split("$")[0]:void 0,o.autoreply.callerId=o.autoreply.callerID?"CALLERID(all)="+o.autoreply.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outboundDial"===o.autoreply.appType&&(o.autoreply.phone=a.cutdigits?(o.autoreply.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.autoreply.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.autoreply.options+="U(xcally-mixmonitor-context)"):o.autoreply.options=o.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(o.autoreply.appType&&"custom"===o.autoreply.appType);else switch((o.autoreply.app||o.autoreply.appType).toLowerCase()){case"set":o.autoreply.appdata=o.autoreply.name+"="+o.autoreply.value;break;case"custom":break;default:e[0]=o.autoreply.times,e[1]=o.autoreply.text,o.autoreply.appdata=e.join(",")}l(o.autoreply)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(n.appType||n.app).toUpperCase(),o.close=angular.copy(n),o.close.appdata)switch(o.close.appType?o.close.appType.toLowerCase():o.close.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.close.appdata.split(",");o.close.key=s[0],o.close.language=s[1],o.close.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.close.appdata.split(",");o.close.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.close.text=s.slice(1,s.length).join(",");break;case"message":o.close.text=o.close.appdata;break;case"set":o.close.name=o.close.appdata.split("=")[0],o.close.value=o.close.appdata.split("=")[1];break;case"agi":o.close.project=o.close.appdata;break;default:var r=o.close.appdata.split(",");o.close.disposition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outbounddial"===o.close.appType.toLowerCase()&&(o.close.prefix=o.close.phone?o.close.phone.split("$")[0]:void 0,o.close.callerId=o.close.callerID?"CALLERID(all)="+o.close.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outboundDial"===o.close.appType&&(o.close.phone=a.cutdigits?(o.close.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.close.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.close.options+="U(xcally-mixmonitor-context)"):o.close.options=o.close.options.replace("U(xcally-mixmonitor-context)",""));if(o.close.appType&&"custom"===o.close.appType);else switch((o.close.app||o.close.appType).toLowerCase()){case"set":o.close.appdata=o.close.name+"="+o.close.value;break;case"custom":break;default:e[0]=o.close.disposition,o.close.appdata=e.join(",")}l(o.close)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotoif=angular.copy(n),o.gotoif.appdata)switch(o.gotoif.appType?o.gotoif.appType.toLowerCase():o.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotoif.appdata.split(",");o.gotoif.key=s[0],o.gotoif.language=s[1],o.gotoif.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotoif.appdata.split(",");o.gotoif.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotoif.text=s.slice(1,s.length).join(",");break;case"message":o.gotoif.text=o.gotoif.appdata;break;case"set":o.gotoif.name=o.gotoif.appdata.split("=")[0],o.gotoif.value=o.gotoif.appdata.split("=")[1];break;case"agi":o.gotoif.project=o.gotoif.appdata;break;default:var r=o.gotoif.appdata.split(",");o.gotoif.condition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.gotoif.truepriority=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.gotoif.falsepriority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outbounddial"===o.gotoif.appType.toLowerCase()&&(o.gotoif.prefix=o.gotoif.phone?o.gotoif.phone.split("$")[0]:void 0,o.gotoif.callerId=o.gotoif.callerID?"CALLERID(all)="+o.gotoif.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outboundDial"===o.gotoif.appType&&(o.gotoif.phone=a.cutdigits?(o.gotoif.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotoif.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotoif.options+="U(xcally-mixmonitor-context)"):o.gotoif.options=o.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotoif.appType&&"custom"===o.gotoif.appType);else switch((o.gotoif.app||o.gotoif.appType).toLowerCase()){case"set":o.gotoif.appdata=o.gotoif.name+"="+o.gotoif.value;break;case"custom":break;default:e[0]=o.gotoif.condition,e[1]=o.gotoif.truepriority,e[2]=o.gotoif.falsepriority,o.gotoif.appdata=e.join(",")}l(o.gotoif)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotop=angular.copy(n),o.gotop.appdata)switch(o.gotop.appType?o.gotop.appType.toLowerCase():o.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotop.appdata.split(",");o.gotop.key=s[0],o.gotop.language=s[1],o.gotop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotop.appdata.split(",");o.gotop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotop.text=s.slice(1,s.length).join(",");break;case"message":o.gotop.text=o.gotop.appdata;break;case"set":o.gotop.name=o.gotop.appdata.split("=")[0],o.gotop.value=o.gotop.appdata.split("=")[1];break;case"agi":o.gotop.project=o.gotop.appdata;break;default:var r=o.gotop.appdata.split(",");o.gotop.priority=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outbounddial"===o.gotop.appType.toLowerCase()&&(o.gotop.prefix=o.gotop.phone?o.gotop.phone.split("$")[0]:void 0,o.gotop.callerId=o.gotop.callerID?"CALLERID(all)="+o.gotop.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outboundDial"===o.gotop.appType&&(o.gotop.phone=a.cutdigits?(o.gotop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotop.options+="U(xcally-mixmonitor-context)"):o.gotop.options=o.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotop.appType&&"custom"===o.gotop.appType);else switch((o.gotop.app||o.gotop.appType).toLowerCase()){case"set":o.gotop.appdata=o.gotop.name+"="+o.gotop.value;break;case"custom":break;default:e[0]=o.gotop.priority,o.gotop.appdata=e.join(",")}l(o.gotop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditMailAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(n.appType||n.app).toUpperCase(),o.noop=angular.copy(n),o.noop.appdata)switch(o.noop.appType?o.noop.appType.toLowerCase():o.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.noop.appdata.split(",");o.noop.key=s[0],o.noop.language=s[1],o.noop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.noop.appdata.split(",");o.noop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.noop.text=s.slice(1,s.length).join(",");break;case"message":o.noop.text=o.noop.appdata;break;case"set":o.noop.name=o.noop.appdata.split("=")[0],o.noop.value=o.noop.appdata.split("=")[1];break;case"agi":o.noop.project=o.noop.appdata;break;default:var r=o.noop.appdata.split(",");o.noop.value=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outbounddial"===o.noop.appType.toLowerCase()&&(o.noop.prefix=o.noop.phone?o.noop.phone.split("$")[0]:void 0,o.noop.callerId=o.noop.callerID?"CALLERID(all)="+o.noop.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outboundDial"===o.noop.appType&&(o.noop.phone=a.cutdigits?(o.noop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.noop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.noop.options+="U(xcally-mixmonitor-context)"):o.noop.options=o.noop.options.replace("U(xcally-mixmonitor-context)",""));if(o.noop.appType&&"custom"===o.noop.appType);else switch((o.noop.app||o.noop.appType).toLowerCase()){case"set":o.noop.appdata=o.noop.name+"="+o.noop.value;break;case"custom":break;default:e[0]=o.noop.value,o.noop.appdata=e.join(",")}l(o.noop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.queue.queue=300,o.queue.timeout=300;function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.queues,{name:o.queue.queue});t&&(o.queue[_.capitalize("mail")+"QueueId"]=t.id);if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.timeout,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.mailQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(e.appType||e.app).toUpperCase(),o.system=angular.copy(e),o.system.appdata)switch(o.system.appType?o.system.appType.toLowerCase():o.system.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.system.appdata.split(",");o.system.key=s[0],o.system.language=s[1],o.system.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.system.appdata.split(",");o.system.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.system.text=s.slice(1,s.length).join(",");break;case"message":o.system.text=o.system.appdata;break;case"set":o.system.name=o.system.appdata.split("=")[0],o.system.value=o.system.appdata.split("=")[1];break;case"agi":o.system.project=o.system.appdata;break;default:var r=o.system.appdata.split(",");o.system.command=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.system.variable=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.system.variable="";function l(e){t.hide(e)}o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outbounddial"===o.system.appType.toLowerCase()&&(o.system.prefix=o.system.phone?o.system.phone.split("$")[0]:void 0,o.system.callerId=o.system.callerID?"CALLERID(all)="+o.system.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outboundDial"===o.system.appType&&(o.system.phone=a.cutdigits?(o.system.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.system.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.system.options+="U(xcally-mixmonitor-context)"):o.system.options=o.system.options.replace("U(xcally-mixmonitor-context)",""));if(o.system.appType&&"custom"===o.system.appType);else switch((o.system.app||o.system.appType).toLowerCase()){case"set":o.system.appdata=o.system.name+"="+o.system.value;break;case"custom":break;default:e[0]=o.system.command,e[1]=o.system.variable,o.system.appdata=e.join(",")}l(o.system)},o.closeDialog=l,i.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="MAIL.EDIT_"+(e.appType||e.app).toUpperCase(),o.tag=angular.copy(e),o.tag.appdata)switch(o.tag.appType?o.tag.appType.toLowerCase():o.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.tag.appdata.split(",");o.tag.key=s[0],o.tag.language=s[1],o.tag.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.tag.appdata.split(",");o.tag.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.tag.text=s.slice(1,s.length).join(",");break;case"message":o.tag.text=o.tag.appdata;break;case"set":o.tag.name=o.tag.appdata.split("=")[0],o.tag.value=o.tag.appdata.split("=")[1];break;case"agi":o.tag.project=o.tag.appdata;break;default:var r=o.tag.appdata.split(",");o.tag.tag=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outbounddial"===o.tag.appType.toLowerCase()&&(o.tag.prefix=o.tag.phone?o.tag.phone.split("$")[0]:void 0,o.tag.callerId=o.tag.callerID?"CALLERID(all)="+o.tag.callerID:void 0),o.saveMailAccountApp=function(){o.errors=[];var e=[];o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outboundDial"===o.tag.appType&&(o.tag.phone=a.cutdigits?(o.tag.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.tag.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.tag.options+="U(xcally-mixmonitor-context)"):o.tag.options=o.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.tags,{name:o.tag.tag});t&&(o.tag.TagId=t.id);if(o.tag.appType&&"custom"===o.tag.appType);else switch((o.tag.app||o.tag.appType).toLowerCase()){case"set":o.tag.appdata=o.tag.name+"="+o.tag.value;break;case"custom":break;default:e[0]=o.tag.tag,o.tag.appdata=e.join(",")}l(o.tag)},o.closeDialog=l,i.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","mailAccountApp","mailAccount","api"],angular.module("app.mail").controller("EditMailAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountInteractions={count:0,rows:[]},c.selectedMailAccountInteractions=[],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){c.mailAccount=e,c.query.id=c.mailAccount.id,c.getMailAccountInteractions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},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){o.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/interactions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,interaction:t,interactions:c.mailAccountInteractions.rows,license:null,setting:null}})},c.spymailInteraction=function(e,n){o.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(s.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=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountMailCannedAnswers={count:0,rows:[]},c.selectedMailAccountMailCannedAnswers=[],c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e){c.mailAccount=e,c.query.id=c.mailAccount.id,c.query.MailAccountId=c.mailAccount.id,c.getMailAccountMailCannedAnswers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditMailCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/mailCannedAnswers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,mailCannedAnswer:t,mailCannedAnswers:c.mailAccountMailCannedAnswers.rows,license:null,setting:null}})},c.exportSelectedMailAccountMailCannedAnswers=function(){var e=angular.copy(c.selectedMailAccountMailCannedAnswers);return c.selectedMailAccountMailCannedAnswers=[],e},c.deleteMailAccountMailCannedAnswer=g,c.deleteSelectedMailAccountMailCannedAnswers=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MAIL.EDIT_MAILCANNEDANSWER",u.mailCannedAnswer=angular.copy(r),u.mailCannedAnswers=s,u.newMailCannedAnswer=!1,u.mailCannedAnswer||(u.mailCannedAnswer={},u.title="MAIL.NEW_MAILCANNEDANSWER",u.newMailCannedAnswer=!0),t.params.id&&(u.mailCannedAnswer.MailAccountId=t.params.id),u.addNewMailCannedAnswer=function(){u.errors=[],l.cannedAnswer.save(u.mailCannedAnswer).$promise.then(function(e){u.mailCannedAnswers.unshift(e.toJSON()),o.success({title:"MailCannedAnswer properly created",msg:u.mailCannedAnswer.name?u.mailCannedAnswer.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMailCannedAnswer=function(){u.errors=[],l.cannedAnswer.update({id:u.mailCannedAnswer.id},u.mailCannedAnswer).$promise.then(function(e){var t=_.find(u.mailCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailCannedAnswer properly saved!",msg:u.mailCannedAnswer.name?u.mailCannedAnswer.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMailCannedAnswer=function(e){u.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(){l.cannedAnswer.delete({id:u.mailCannedAnswer.id}).$promise.then(function(){_.remove(u.mailCannedAnswers,{id:u.mailCannedAnswer.id}),o.success({title:"MailCannedAnswer properly deleted!",msg:(u.mailCannedAnswer.name||"mailCannedAnswer")+" has been deleted!"}),p(u.mailCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","mailCannedAnswers","mailCannedAnswer","api","Auth","license","setting"],angular.module("app.mail").controller("CreateOrEditMailCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountMailDispositions={count:0,rows:[]},c.selectedMailAccountMailDispositions=[],c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e){c.mailAccount=e,c.query.id=c.mailAccount.id,c.query.MailAccountId=c.mailAccount.id,c.getMailAccountMailDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditMailDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/mailDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,mailDisposition:t,mailDispositions:c.mailAccountMailDispositions.rows,license:null,setting:null}})},c.exportSelectedMailAccountMailDispositions=function(){var e=angular.copy(c.selectedMailAccountMailDispositions);return c.selectedMailAccountMailDispositions=[],e},c.deleteMailAccountMailDisposition=g,c.deleteSelectedMailAccountMailDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MAIL.EDIT_MAILDISPOSITION",u.mailDisposition=angular.copy(r),u.mailDispositions=s,u.newMailDisposition=!1,u.mailDisposition||(u.mailDisposition={},u.title="MAIL.NEW_MAILDISPOSITION",u.newMailDisposition=!0),t.params.id&&(u.mailDisposition.MailAccountId=t.params.id),u.addNewMailDisposition=function(){u.errors=[],l.disposition.save(u.mailDisposition).$promise.then(function(e){u.mailDispositions.unshift(e.toJSON()),o.success({title:"MailDisposition properly created",msg:u.mailDisposition.name?u.mailDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMailDisposition=function(){u.errors=[],l.disposition.update({id:u.mailDisposition.id},u.mailDisposition).$promise.then(function(e){var t=_.find(u.mailDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailDisposition properly saved!",msg:u.mailDisposition.name?u.mailDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMailDisposition=function(e){u.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(){l.disposition.delete({id:u.mailDisposition.id}).$promise.then(function(){_.remove(u.mailDispositions,{id:u.mailDisposition.id}),o.success({title:"MailDisposition properly deleted!",msg:(u.mailDisposition.name||"mailDisposition")+" has been deleted!"}),p(u.mailDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","mailDispositions","mailDisposition","api","Auth","license","setting"],angular.module("app.mail").controller("CreateOrEditMailDispositionDialogController",e)}(),function(){"use strict";function e(n,e,a,i,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.mailAccount=d||n.params.mailAccount||{},c.selectedTab=n.params.tab||0,c.gotogoto=function(e,t){n.go("app.mail.realtime.accounts",{})},c.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:c.mailAccounts?c.mailAccounts.rows:[],realtime:!1}})},c.alert=r.info,c.gotoMailAccounts=function(){n.go("app.mail.mailAccounts")},c.saveMailAccount=function(){s.mailAccount.update({id:c.mailAccount.id},c.mailAccount).$promise.then(function(){r.success({title:"MailAccount updated!",msg:c.mailAccount.name?c.mailAccount.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","license","setting","api","toasty","Auth","mailAccount"],angular.module("app.mail").controller("MailAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.mailAccounts=r||{count:0,rows:[]},v.table="mailAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedMailAccounts=[],v.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,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v["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"),"")}),v["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"),"")}),v.editstate=function(e,t){n.go("app.mail.mailAccounts.edit",{id:e.id,mailAccount:e})},v.verifysmtpverifysmtp=function(e,t){{if(e&&e.id)return l.mailAccount.verifySmtp({id:e.id}).$promise.then(function(){c.success({title:"Smtp properly verified",msg:"Connection succeded!"})}).catch(function(e){c.error({title:"Smtp properly verified",msg:e.data?JSON.stringify(e.data):e.toString()})});c.error({title:"Smtp properly verified",msg:"Smpt id unknown"})}},v.interactionsgoto=function(e,t){n.go("app.mail.mailAccounts.edit",{id:e.id,tab:6})},v.gotorealtimegoto=function(e,t){n.go("app.mail.realtime.accounts",{})},v.agentadddialog=function(e,t){i.show({controller:"MailAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailAccount:e,mailAccounts:v.mailAccounts?v.mailAccounts.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the mailAccount?").htmlContent("<b>"+(e.name||"mailAccount")+"</b> will be deleted.").ariaLabel("delete mailAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getMailAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.mailAccount.get(v.query,f).$promise},v.createOrEditMailAccount=function(e,t){i.show({controller:"CreateOrEditMailAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:t,mailAccounts:v.mailAccounts.rows,license:v.license,setting:v.setting}})},v.deleteMailAccount=A,v.exportSelectedMailAccounts=function(){var e=angular.copy(v.selectedMailAccounts);return v.selectedMailAccounts=[],e},v.deleteSelectedMailAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailAccounts?").htmlContent("<b>"+v.selectedMailAccounts.length+" selected</b> will be deleted.").ariaLabel("delete MailAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedMailAccounts.forEach(function(e){A(e)}),v.selectedMailAccounts=[]})},v.deselectMailAccounts=function(){v.selectedMailAccounts=[]},v.selectAllMailAccounts=function(){v.selectedMailAccounts=v.mailAccounts.rows},l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.mailAccounts=e||{count:0,rows:[]}}function A(e){if(e.service)return c.error({title:"Mail Account not deleted!",msg:"You can't remove service account"});l.mailAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.mailAccounts.rows,{id:e.id}),v.mailAccounts.count-=1,v.mailAccounts.rows.length||v.getMailAccounts(),c.success({title:"MailAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailAccount"}];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:"SYSTEM:DELETEmailAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getMailAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","mailAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MAIL.EDIT_MAILQUEUE",u.mailQueue=angular.copy(r),u.mailQueues=s,u.newMailQueue=!1,u.mailQueue||(u.mailQueue={strategy:"beepall",timeout:10},u.title="MAIL.NEW_MAILQUEUE",u.newMailQueue=!0),u.addNewMailQueue=function(){u.errors=[],l.mailQueue.save(u.mailQueue).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"mail",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.mailQueues.unshift(e.toJSON()),o.success({title:"MailQueue properly created",msg:u.mailQueue.name?u.mailQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMailQueue=function(){u.errors=[],l.mailQueue.update({id:u.mailQueue.id},u.mailQueue).$promise.then(function(e){var t=_.find(u.mailQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailQueue properly saved!",msg:u.mailQueue.name?u.mailQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMailQueue=function(e){u.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(){l.mailQueue.delete({id:u.mailQueue.id}).$promise.then(function(){return l.mailQueue.getAgents({id:u.mailQueue.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.mailQueue.id],channel:"mail",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.mailQueues,{id:u.mailQueue.id}),o.success({title:"MailQueue properly deleted!",msg:(u.mailQueue.name||"mailQueue")+" has been deleted!"}),p(u.mailQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","mailQueues","mailQueue","api","Auth","license","setting"],angular.module("app.mail").controller("CreateOrEditMailQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.mailQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.mailQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserMailQueue?"penalty "+e.UserMailQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserMailQueue?"penalty "+e.UserMailQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.mailQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("MAIL.ALL_AGENTS"),labelSelected:s.instant("MAIL.SELECTED_AGENTS"),transferCallback:function(e,t){a.mailQueue[t?"removeAgents":"addAgents"]({id:l.mailQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"MailQueue properly "+(t?"removed":"added"),msg:"MailQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:mailQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","mailQueue","mailQueues","realtime","$translate","Auth"],angular.module("app.mail").controller("MailQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.mailQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MAIL.ALL_TEAMS"),labelSelected:i.instant("MAIL.SELECTED_TEAMS"),transferCallback:function(e,t){a.mailQueue[t?"removeTeams":"addTeams"]({id:o.mailQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:mailQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.mailQueue.getTeams({id:o.mailQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","mailQueue","$translate"],angular.module("app.mail").controller("MailQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.mailQueue=d||e.params.mailQueue||{},c.selectedTab=e.params.tab||0,c.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:c.mailQueues?c.mailQueues.rows:[]}})},c.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:c.mailQueues?c.mailQueues.rows:[],realtime:!1}})},c.alert=r.info,c.gotoMailQueues=function(){e.go("app.mail.mailQueues")},c.saveMailQueue=function(){s.mailQueue.update({id:c.mailQueue.id},c.mailQueue).$promise.then(function(){r.success({title:"MailQueue updated!",msg:c.mailQueue.name?c.mailQueue.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","mailQueue"],angular.module("app.mail").controller("MailQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.mailQueues=r||{count:0,rows:[]},v.table="mailQueues",v.listOrder="",v.listOrderAsc=null,v.selectedMailQueues=[],v.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"mail",limit:10,page:1},v.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.mail.mailQueues.edit",{id:e.id,mailQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"MailQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:v.mailQueues?v.mailQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"MailQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:v.mailQueues?v.mailQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the mailQueue?").htmlContent("<b>"+(e.name||"mailQueue")+"</b> will be deleted.").ariaLabel("delete mailQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.mail.realtime.queues",{})},v.success=f,v.getMailQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.mailQueue.get(v.query,f).$promise},v.createOrEditMailQueue=function(e,t){i.show({controller:"CreateOrEditMailQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailQueue:t,mailQueues:v.mailQueues.rows,license:v.license,setting:v.setting}})},v.deleteMailQueue=A,v.exportSelectedMailQueues=function(){var e=angular.copy(v.selectedMailQueues);return v.selectedMailQueues=[],e},v.deleteSelectedMailQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailQueues?").htmlContent("<b>"+v.selectedMailQueues.length+" selected</b> will be deleted.").ariaLabel("delete MailQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedMailQueues.forEach(function(e){A(e)}),v.selectedMailQueues=[]})},v.deselectMailQueues=function(){v.selectedMailQueues=[]},v.selectAllMailQueues=function(){v.selectedMailQueues=v.mailQueues.rows};var h=!0,b=1;function f(e){v.mailQueues=e||{count:0,rows:[]}}function A(e){l.mailQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.mailQueues.rows,{id:e.id}),v.mailQueues.count-=1,v.mailQueues.rows.length||v.getMailQueues(),c.success({title:"MailQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailQueue"}];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:"SYSTEM:DELETEmailQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getMailQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","mailQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MAIL.EDIT_MAILSUBSTATUS",u.mailSubstatus=angular.copy(r),u.mailSubtatuses=s,u.newMailSubstatus=!1,u.mailSubstatus||(u.mailSubstatus={},u.title="MAIL.NEW_MAILSUBSTATUS",u.newMailSubstatus=!0),u.addNewMailSubstatus=function(){u.errors=[],l.mailSubstatus.save(u.mailSubstatus).$promise.then(function(e){u.mailSubtatuses.unshift(e.toJSON()),o.success({title:"MailSubstatus properly created",msg:u.mailSubstatus.name?u.mailSubstatus.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMailSubstatus=function(){u.errors=[],l.mailSubstatus.update({id:u.mailSubstatus.id},u.mailSubstatus).$promise.then(function(e){var t=_.find(u.mailSubtatuses,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailSubstatus properly saved!",msg:u.mailSubstatus.name?u.mailSubstatus.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMailSubstatus=function(e){u.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(){l.mailSubstatus.delete({id:u.mailSubstatus.id}).$promise.then(function(){_.remove(u.mailSubtatuses,{id:u.mailSubstatus.id}),o.success({title:"MailSubstatus properly deleted!",msg:(u.mailSubstatus.name||"mailSubstatus")+" has been deleted!"}),p(u.mailSubstatus)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","mailSubtatuses","mailSubstatus","api","Auth","license","setting"],angular.module("app.mail").controller("CreateOrEditMailSubstatusDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.mailSubtatuses=r||{count:0,rows:[]},v.table="mailSubtatuses",v.listOrder="",v.listOrderAsc=null,v.selectedMailSubstatuses=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditMailSubstatusDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailSubtatuses/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailSubstatus:e,mailSubtatuses:v.mailSubtatuses.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the mailSubstatus?").htmlContent("<b>"+(e.name||"mailSubstatus")+"</b> will be deleted.").ariaLabel("delete mailSubstatus").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getMailSubstatuses=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.mailSubstatus.get(v.query,f).$promise},v.createOrEditMailSubstatus=function(e,t){i.show({controller:"CreateOrEditMailSubstatusDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailSubtatuses/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailSubstatus:t,mailSubtatuses:v.mailSubtatuses.rows,license:v.license,setting:v.setting}})},v.deleteMailSubstatus=A,v.exportSelectedMailSubstatuses=function(){var e=angular.copy(v.selectedMailSubstatuses);return v.selectedMailSubstatuses=[],e},v.deleteSelectedMailSubstatuses=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailSubtatuses?").htmlContent("<b>"+v.selectedMailSubstatuses.length+" selected</b> will be deleted.").ariaLabel("delete MailSubstatuss").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedMailSubstatuses.forEach(function(e){A(e)}),v.selectedMailSubstatuses=[]})},v.deselectMailSubstatuses=function(){v.selectedMailSubstatuses=[]},v.selectAllMailSubstatuses=function(){v.selectedMailSubstatuses=v.mailSubtatuses.rows};var h=!0,b=1;function f(e){v.mailSubtatuses=e||{count:0,rows:[]}}function A(e){l.mailSubstatus.delete({id:e.id}).$promise.then(function(){_.remove(v.mailSubtatuses.rows,{id:e.id}),v.mailSubtatuses.count-=1,v.mailSubtatuses.rows.length||v.getMailSubstatuses(),c.success({title:"MailSubstatus deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailSubstatus"}];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:"SYSTEM:DELETEmailSubstatus",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getMailSubstatuses())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","mailSubtatuses","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailSubstatusesController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d){var c=this;function m(){_.forIn(c.mailAccounts,function(e,t){c.rpcMailAccounts[t]&&_.merge(e,c.rpcMailAccounts[t])}),_.forIn(c.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")};o.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",o.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)})})}c.count=l&&l.count?l.count:0,c.mailAccounts=l?_.keyBy(l.rows?l.rows:[],"id"):{},c.rpcMailAccounts=d?_.keyBy(d.rows?d.rows:[],"id"):{},c.query={sort:"-name",limit:10,page:1},c.success=g,c.$onInit=m,c.getMailAccounts=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.mailAccount.get(c.query,g).$promise},c.onSave=function(e){c.mailAccounts[e.id]&&_.merge(c.mailAccounts[e.id],e)},c.onMailMessageSave=function(e){c.mailAccounts[e.MailAccountId]&&("in"==e.direction?(c.mailAccounts[e.MailAccountId].in+=1,c.mailAccounts[e.MailAccountId].lastIn=e.createdAt):(c.mailAccounts[e.MailAccountId].out+=1,c.mailAccounts[e.MailAccountId].lastOut=e.createdAt))},c.goToMailAccount=function(e,t){i.go("app.mail.mailAccounts.edit",{id:t.id,mailAccount:t})},c.verifySmtp=function(e,t){{if(t&&t.id)return o.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"})}},c.order=[],_.forIn(c.mailAccounts,function(e,t){c.order.push(e.id)}),s.on("mailAccount:save",c.onSave),s.on("mailAccount:update",c.onSave),s.on("mailMessage:save",c.onMailMessageSave);var u=!0,p=1;function g(e){if(c.mailAccounts=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){c.order=[];for(var t=0;t<e.rows.length;t++)c.order.push(e.rows[t].id)}m()}e.$watch("vm.query.filter",function(e,t){u?n(function(){u=!1}):(t||(p=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=p),c.getMailAccounts())}),e.$on("$destroy",function(){s.removeAllListeners("mailAccount:save"),s.removeAllListeners("mailAccount:update"),s.removeAllListeners("mailMessage:save")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$state","api","socket","toasty","mailAccounts","rpcMailAccounts"],angular.module("app.mail").controller("MailAccountsRealtimeController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsMailRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.mailQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].MailQueueId].paused++,u.queues[e[t].rows[n].MailQueueId].loggedInDb++,u.queues[e[t].rows[n].MailQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].MailQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"mail",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.mailQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!1}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.MailQueueId]&&u.queues[e.MailQueueId].loggedInDb++},u.onRemoveMember=function(e){u.queues[e.MailQueueId]&&u.queues[e.MailQueueId].loggedInDb--},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.MailQueueId]&&(u.queues[e.MailQueueId].loggedInDb+=1,u.queues[e.MailQueueId].agents[e.UserId]=e.MailQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.MailQueueId]&&0<u.queues[e.MailQueueId].loggedInDb&&(u.queues[e.MailQueueId].loggedInDb-=1,delete u.queues[e.MailQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.on("mail_queue:save",u.onSave),d.on("userMailQueue:save",u.onSaveMember),d.on("userMailQueue:remove",u.onRemoveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.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","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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MARKETPLACE.EDIT_PLUGIN",u.plugin=angular.copy(r),u.plugins=s,u.newPlugin=!1,u.plugin||(u.plugin={},u.title="MARKETPLACE.NEW_PLUGIN",u.newPlugin=!0),u.addNewPlugin=function(){u.errors=[],l.plugin.save(u.plugin).$promise.then(function(e){u.plugins.unshift(e.toJSON()),o.success({title:"Plugin properly created",msg:u.plugin.name?u.plugin.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.savePlugin=function(){u.errors=[],l.plugin.update({id:u.plugin.id},u.plugin).$promise.then(function(e){var t=_.find(u.plugins,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Plugin properly saved!",msg:u.plugin.name?u.plugin.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deletePlugin=function(e){u.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(){l.plugin.delete({id:u.plugin.id}).$promise.then(function(){_.remove(u.plugins,{id:u.plugin.id}),o.success({title:"Plugin properly deleted!",msg:(u.plugin.name||"plugin")+" has been deleted!"}),p(u.plugin)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","plugins","plugin","api","Auth","license","setting"],angular.module("app.marketplace").controller("CreateOrEditPluginDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.plugin=d||e.params.plugin||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoPlugins=function(){e.go("app.marketplace.plugins")},c.savePlugin=function(){s.plugin.update({id:c.plugin.id},c.plugin).$promise.then(function(){r.success({title:"Plugin updated!",msg:c.plugin.name?c.plugin.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","plugin"],angular.module("app.marketplace").controller("MarketplacePluginController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.plugins=r||{count:0,rows:[]},v.table="plugins",v.listOrder="",v.listOrderAsc=null,v.selectedPlugins=[],v.query={fields:"createdAt,updatedAt,id,name,type,active,description,icon,sidebar,path,adminUrl,agentUrl,scriptName,scriptPath,version",sort:"name",limit:10,page:1},v.installing=!1,v.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"),"")}),v.installplugin=function(e){{if("script"!==e.type)return e.active=!0,l.plugin.update({id:e.id},e).$promise.then(function(){c.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){v.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.update"}];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:"api.plugin.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})});v.installing=!0,l.pm2.save({name:e.scriptName,script:e.path+"/"+e.scriptPath}).$promise.then(function(){return e.active=!0,l.plugin.update({id:e.id},e).$promise}).then(function(){v.installing=!1,c.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){v.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.save"}];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:"api.pm2.save",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}},v.editstate=function(e,t){n.go("app.marketplace.plugins.edit",{id:e.id,plugin:e})},v.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,l.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");l.pm2.update({id:t.pm_id,status:"stopped"}).$promise.then(function(){c.success({title:"Process stopped!",msg:"Attached pm2 process successfully stopped"})})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.update"}];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:"api.pm2.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){console.log("CANCEL")})},v.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,l.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");l.pm2.update({id:t.pm_id,status:"online"}).$promise.then(function(){c.success({title:"Process restarted!",msg:"Attached pm2 process successfully restarted"})})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.update"}];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:"api.pm2.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){console.log("CANCEL")})},v.downloadfile2=function(o,e){return l.plugin.download({id:o.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=o.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++)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.plugin.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.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&&l.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");l.pm2.delete({id:t.pm_id,name:n.scriptName}).$promise}).catch(function(e){c.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,l.plugin.update({id:n.id},n).$promise.then(function(){c.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){v.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.update"}];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:"api.plugin.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}(e)},function(){console.log("CANCEL")})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the plugin?").htmlContent("<b>"+(e.name||"plugin")+"</b> will be deleted.").ariaLabel("delete plugin").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getPlugins=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.plugin.get(v.query,f).$promise},v.createOrEditPlugin=function(e,t){i.show({controller:"CreateOrEditPluginDialogController",controllerAs:"vm",templateUrl:"app/main/apps/marketplace/views/plugins/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{plugin:t,plugins:v.plugins.rows,license:v.license,setting:v.setting}})},v.deletePlugin=A,v.exportSelectedPlugins=function(){var e=angular.copy(v.selectedPlugins);return v.selectedPlugins=[],e},v.deleteSelectedPlugins=function(e){var t=i.confirm().title("Are you sure want to delete the selected plugins?").htmlContent("<b>"+v.selectedPlugins.length+" selected</b> will be deleted.").ariaLabel("delete Plugins").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedPlugins.forEach(function(e){A(e)}),v.selectedPlugins=[]})},v.deselectPlugins=function(){v.selectedPlugins=[]},v.selectAllPlugins=function(){v.selectedPlugins=v.plugins.rows},v.uploadPlugin=function(e){i.show({controller:"UploadPluginDialogController",controllerAs:"vm",templateUrl:"app/main/apps/marketplace/views/plugins/upload/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{plugins:v.plugins.rows}})};var h=!0,b=1;function f(e){v.plugins=e||{count:0,rows:[]}}function A(n){n.active&&"script"==n.type&&l.pm2.get().$promise.then(function(e){if(!e||!e.rows)return c.error({title:"Plugin not deleted!",msg:"Failed to retrieve pm2 processes"});var t=_.find(e.rows,{name:n.scriptName});t?l.pm2.delete({id:t.pm_id,name:n.scriptName}).$promise:console.log("No '%s' process found",n.scriptName)}).catch(function(e){return c.error({title:"PM2 process not found!",msg:"Failed to delete the attached pm2 process"})}),l.plugin.delete({id:n.id}).$promise.then(function(){_.remove(v.plugins.rows,{id:n.id}),v.plugins.count-=1,v.plugins.rows.length||v.getPlugins(),c.success({title:"Plugin deleted!",msg:n.name?n.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEplugin"}];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:"SYSTEM:DELETEplugin",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getPlugins())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","plugins","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.marketplace").controller("MarketplacePluginsController",e)}(),function(){"use strict";function e(e,t,n,a,i){var o=this;o.errors=[],o.title="MARKETPLACE.UPLOAD_PLUGIN",o.plugins=a,o.uploadPlugins=[],o.uploadState="none",o.plugin={},o.ngFlowOptions={maxChunkRetries:1,chunkSize:2097152,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,target:"api/plugins",allowDuplicateUploads:!0},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 only: "+t.join()}),!1;if(2097152<e.size)return n.error({title:"File too big",msg:"The max allowed size is 2 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.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"],angular.module("app.marketplace").controller("UploadPluginDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MOTIONDIALER.EDIT_IVRCAMPAIGN",u.ivrCampaign=angular.copy(r),u.ivrCampaigns=s,u.newIvrCampaign=!1,u.ivrCampaign||(u.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},u.title="MOTIONDIALER.NEW_IVRCAMPAIGN",u.newIvrCampaign=!0),u.addNewIvrCampaign=function(){u.errors=[],l.campaign.save(u.ivrCampaign).$promise.then(function(e){u.ivrCampaigns.unshift(e.toJSON()),o.success({title:"IvrCampaign properly created",msg:u.ivrCampaign.name?u.ivrCampaign.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveIvrCampaign=function(){u.errors=[],l.campaign.update({id:u.ivrCampaign.id},u.ivrCampaign).$promise.then(function(e){var t=_.find(u.ivrCampaigns,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"IvrCampaign properly saved!",msg:u.ivrCampaign.name?u.ivrCampaign.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteIvrCampaign=function(e){u.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(){l.campaign.delete({id:u.ivrCampaign.id}).$promise.then(function(){_.remove(u.ivrCampaigns,{id:u.ivrCampaign.id}),o.success({title:"IvrCampaign properly deleted!",msg:(u.ivrCampaign.name||"ivrCampaign")+" has been deleted!"}),p(u.ivrCampaign)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.projects=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).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","toasty","ivrCampaigns","ivrCampaign","api","Auth","license","setting"],angular.module("app.motiondialer").controller("CreateOrEditIvrCampaignDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o){var s=this;s.ivrCampaign=t,s.items=[],s.selectedItems=[],s.loading=!1,s.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:i.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){s.loading=!0,a.campaign[t?"removeBlackLists":"addBlackLists"]({id:s.ivrCampaign.id,ids:_.map(e,"id")}).$promise.then(function(){n.success({title:"List properly "+(t?"removed":"added"),msg:"List has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ivrCampaign.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){s.loading=!1})}},s.closeDialog=function(){e.hide()},a.campaign.getBlackLists({id:s.ivrCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return s.selectedItems=e.rows?e.rows:[],s.dualMultiselectOptions.selectedItems=s.selectedItems,a.cmList.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){s.items=e.rows?e.rows:[],s.dualMultiselectOptions.items=_.differenceBy(s.items,s.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","ivrCampaign","$translate","$timeout"],angular.module("app.motiondialer").controller("IvrCampaignblacklistaddController",e)}(),function(){"use strict";function e(t,n,a,e,i,o,s){var r=this;function l(e){t.hide(e)}r.newIvrCampaign=!0,r.ivrCampaign=angular.copy(i),r.ivrCampaigns=o,r.title=s.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHopperBlacks={count:0,rows:[]},c.selectedIvrCampaignHopperBlacks=[],c.query={fields:"createdAt,updatedAt,ContactId,phone",sort:"-id",limit:10,page:1},c.init=function(e){c.ivrCampaign=e,c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperBlacks()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperBlackDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperBlacks/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperBlack:t,hopperBlacks:c.ivrCampaignHopperBlacks.rows,license:null,setting:null}})},c.exportSelectedIvrCampaignHopperBlacks=function(){var e=angular.copy(c.selectedIvrCampaignHopperBlacks);return c.selectedIvrCampaignHopperBlacks=[],e},c.deleteIvrCampaignHopperBlack=g,c.deleteSelectedIvrCampaignHopperBlacks=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.contacts={},c.ivrCampaign={},c.ivrCampaignHopperFinals={count:0,rows:[]},c.selectedIvrCampaignHopperFinals=[],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){c.ivrCampaign=e,c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperFinals()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperFinalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperFinals/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperFinal:t,hopperFinals:c.ivrCampaignHopperFinals.rows,license:null,setting:null}})},c.exportSelectedIvrCampaignHopperFinals=function(){var e=angular.copy(c.selectedIvrCampaignHopperFinals);return c.selectedIvrCampaignHopperFinals=[],e},c.deleteIvrCampaignHopperFinal=g,c.deleteSelectedIvrCampaignHopperFinals=function(e){var t=o.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");o.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=o.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");o.show(n).then(function(){v(e)},function(){console.log("CANCEL")})},c.moveSelectedIvrCampaignHopperFinals=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHopperHistories={count:0,rows:[]},c.selectedIvrCampaignHopperHistories=[],c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,scheduledat,starttime,responsetime,endtime",sort:"-id",limit:10,page:1},c.init=function(e){c.ivrCampaign=e,c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperHistories()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperHistoryDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperHistories/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperHistory:t,hopperHistories:c.ivrCampaignHopperHistories.rows,license:null,setting:null}})},c.exportSelectedIvrCampaignHopperHistories=function(){var e=angular.copy(c.selectedIvrCampaignHopperHistories);return c.selectedIvrCampaignHopperHistories=[],e},c.deleteIvrCampaignHopperHistory=g,c.deleteSelectedIvrCampaignHopperHistories=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHoppers={count:0,rows:[]},c.selectedIvrCampaignHoppers=[],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){c.ivrCampaign=e,c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHoppers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperCampaignIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hoppers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopper:t,hoppers:c.ivrCampaignHoppers.rows,license:null,setting:null}})},c.exportSelectedIvrCampaignHoppers=function(){var e=angular.copy(c.selectedIvrCampaignHoppers);return c.selectedIvrCampaignHoppers=[],e},c.deleteIvrCampaignHopper=g,c.deleteSelectedIvrCampaignHoppers=function(e){var t=o.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");o.show(t).then(function(){c.selectedIvrCampaignHoppers.forEach(function(e){g(e)}),c.selectedIvrCampaignHoppers=[]})},l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=_.keyBy(e.rows||[],"id")}).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){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MOTIONDIALER.EDIT_HOPPER",u.hopper=angular.copy(r),u.hoppers=o,u.newHopper=!1,u.hopper||(u.hopper={},u.title="MOTIONDIALER.NEW_HOPPER",u.newHopper=!0),t.params.id&&(u.hopper.CampaignId=t.params.id),u.addNewHopper=function(){u.errors=[],l.cmHopper.save(u.hopper).$promise.then(function(e){u.hoppers.unshift(e.toJSON()),s.success({title:"Hopper properly created",msg:u.hopper.name?u.hopper.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveHopper=function(){var n,a,i,o;u.errors=[],u.hopper.UserId=u.hopper.recallme?u.hopper.UserId:null,l.cmHopper.get({id:u.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(){l.cmHopper.update({id:u.hopper.id},_.omit(u.hopper,["VoiceQueueId","CampaignId","ContactId","ListId"])).$promise.then(function(e){a=e,l.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(){l.campaign.get({raw:!1,id:a.CampaignId,attributes:["name"]}).$promise.then(function(e){o=e.name}).catch(function(e){o=void 0}).finally(function(){l.cmHopperHistory.save({state:24,statedesc:"Edited",scheduledat:n,calleridnum:a.phone,calleridname:i,campaigntype:a.VoiceQueueId?"queue":"ivr",campaign:o,editedat:moment().format("YYYY-MM-DD HH:mm:ss"),edited:!0,ListId:a.ListId,UserId:d.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(u.hoppers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),s.success({title:"Hopper properly saved!",msg:u.hopper.name?u.hopper.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})})},u.deleteHopper=function(e){u.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(){l.cmHopper.delete({id:u.hopper.id}).$promise.then(function(){_.remove(u.hoppers,{id:u.hopper.id}),s.success({title:"Hopper properly deleted!",msg:(u.hopper.name||"hopper")+" has been deleted!"}),p(u.hopper)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){u.agents=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","hoppers","hopper","api","Auth","license","setting"],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,n,a,t,i,o){var s=this;s.ivrCampaign=t,s.items=[],s.selectedItems=[],s.loading=!1,s.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:i.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){s.loading=!0,a.campaign[t?"removeLists":"addLists"]({id:s.ivrCampaign.id,ids:_.map(e,"id")}).$promise.then(function(){n.success({title:"List properly "+(t?"removed":"added"),msg:"List has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ivrCampaign.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){s.loading=!1})}},s.closeDialog=function(){e.hide()},a.campaign.getLists({id:s.ivrCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return s.selectedItems=e.rows?e.rows:[],s.dualMultiselectOptions.selectedItems=s.selectedItems,a.cmList.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){s.items=e.rows?e.rows:[],s.dualMultiselectOptions.items=_.differenceBy(s.items,s.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","ivrCampaign","$translate","$timeout"],angular.module("app.motiondialer").controller("IvrCampaignlistaddController",e)}(),function(){"use strict";function e(e,t,a,i,o,n,s,r){var l=this;function d(){t.hide()}function c(e,t){var n=t.id;s.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(o.id,l.selected[n]);var a;a=e,s.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,o,t,a,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=a,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.ivrCampaign=d||n.params.ivrCampaign||{},c.selectedTab=n.params.tab||0,c.clonedialog=function(e,t){i.show({controller:"IvrCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:c.ivrCampaigns?c.ivrCampaigns.rows:[]}})},c.listadddialog=function(e,t){i.show({controller:"IvrCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/listadd/listadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:c.ivrCampaigns?c.ivrCampaigns.rows:[]}})},c.blacklistadddialog=function(e,t){i.show({controller:"IvrCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:c.ivrCampaigns?c.ivrCampaigns.rows:[]}})},c.resetlistdialog=function(t,n){s.campaign.getLists({id:t.id,fields:"id,name",nolimit:!0}).$promise.then(function(a){if(_.isNil(a.rows)||_.isEmpty(a.rows))r.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=c.ivrCampaign.id,t=a.rows[0],n=t.id,s.campaign.removeLists({id:e,ids:n}).$promise.then(function(){return s.campaign.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){r.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){r.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(o.body),targetEvent:n,clickOutsideToClose:!1,locals:{ivrCampaign:t,listsCampaign:a?a.rows:[]}})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.gotogoto=function(e,t){n.go("app.motiondialer.realtime.ivr_campaigns",{})},c.alert=r.info,c.gotoIvrCampaigns=function(){n.go("app.motiondialer.ivrCampaigns")},c.saveIvrCampaign=function(){s.campaign.update({id:c.ivrCampaign.id},c.ivrCampaign).$promise.then(function(){r.success({title:"IvrCampaign updated!",msg:c.ivrCampaign.name?c.ivrCampaign.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.trunks=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.projects=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){c.interval=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","ivrCampaign"],angular.module("app.motiondialer").controller("IvrCampaignController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.ivrCampaigns=r||{count:0,rows:[]},v.table="ivrCampaigns",v.listOrder="",v.listOrderAsc=null,v.selectedIvrCampaigns=[],v.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},v.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"),"")}),v.arraydialOrderByScheduledAt=_.keyBy([{option:"DESC",value:"'DESC'"},{option:"ASC",value:"'ASC'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.motiondialer.ivrCampaigns.edit",{id:e.id,ivrCampaign:e})},v.clonedialog=function(e,t){i.show({controller:"IvrCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:v.ivrCampaigns?v.ivrCampaigns.rows:[]}})},v.listadddialog=function(e,t){i.show({controller:"IvrCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/listadd/listadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:v.ivrCampaigns?v.ivrCampaigns.rows:[]}})},v.blacklistadddialog=function(e,t){i.show({controller:"IvrCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:v.ivrCampaigns?v.ivrCampaigns.rows:[]}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the ivrCampaign?").htmlContent("<b>"+(e.name||"ivrCampaign")+"</b> will be deleted.").ariaLabel("delete ivrCampaign").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.motiondialer.realtime.ivr_campaigns",{})},v.success=f,v.getIvrCampaigns=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.campaign.get(v.query,f).$promise},v.createOrEditIvrCampaign=function(e,t){i.show({controller:"CreateOrEditIvrCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:t,ivrCampaigns:v.ivrCampaigns.rows,license:v.license,setting:v.setting}})},v.deleteIvrCampaign=A,v.exportSelectedIvrCampaigns=function(){var e=angular.copy(v.selectedIvrCampaigns);return v.selectedIvrCampaigns=[],e},v.deleteSelectedIvrCampaigns=function(e){var t=i.confirm().title("Are you sure want to delete the selected ivrCampaigns?").htmlContent("<b>"+v.selectedIvrCampaigns.length+" selected</b> will be deleted.").ariaLabel("delete IvrCampaigns").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedIvrCampaigns.forEach(function(e){A(e)}),v.selectedIvrCampaigns=[]})},v.deselectIvrCampaigns=function(){v.selectedIvrCampaigns=[]},v.selectAllIvrCampaigns=function(){v.selectedIvrCampaigns=v.ivrCampaigns.rows},l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.trunks=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.projects=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){v.interval=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.ivrCampaigns=e||{count:0,rows:[]}}function A(e){l.campaign.delete({id:e.id}).$promise.then(function(){_.remove(v.ivrCampaigns.rows,{id:e.id}),v.ivrCampaigns.count-=1,v.ivrCampaigns.rows.length||v.getIvrCampaigns(),c.success({title:"IvrCampaign deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcampaign"}];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:"SYSTEM:DELETEcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getIvrCampaigns())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","ivrCampaigns","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.motiondialer").controller("IvrCampaignsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MOTIONDIALER.EDIT_QUEUECAMPAIGN",u.queueCampaign=angular.copy(r),u.queueCampaigns=s,u.newQueueCampaign=!1,u.queueCampaign||(u.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},u.title="MOTIONDIALER.NEW_QUEUECAMPAIGN",u.newQueueCampaign=!0),u.addNewQueueCampaign=function(){u.errors=[],l.voiceQueue.save(u.queueCampaign).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"voice",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.queueCampaigns.unshift(e.toJSON()),o.success({title:"QueueCampaign properly created",msg:u.queueCampaign.name?u.queueCampaign.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveQueueCampaign=function(){u.errors=[],l.voiceQueue.update({id:u.queueCampaign.id},u.queueCampaign).$promise.then(function(e){var t=_.find(u.queueCampaigns,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"QueueCampaign properly saved!",msg:u.queueCampaign.name?u.queueCampaign.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteQueueCampaign=function(e){u.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(){l.voiceQueue.delete({id:u.queueCampaign.id}).$promise.then(function(){return l.voiceQueue.getAgents({id:u.queueCampaign.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.queueCampaign.id],channel:"voice",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.queueCampaigns,{id:u.queueCampaign.id}),o.success({title:"QueueCampaign properly deleted!",msg:(u.queueCampaign.name||"queueCampaign")+" has been deleted!"}),p(u.queueCampaign)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).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","toasty","queueCampaigns","queueCampaign","api","Auth","license","setting"],angular.module("app.motiondialer").controller("CreateOrEditQueueCampaignDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.voiceQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.queueCampaign.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserQueueCampaign?"penalty "+e.UserQueueCampaign.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserQueueCampaign?"penalty "+e.UserQueueCampaign.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.queueCampaign=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,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){a.voiceQueue[t?"removeAgents":"addAgents"]({id:l.queueCampaign.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"QueueCampaign properly "+(t?"removed":"added"),msg:"QueueCampaign has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:voiceQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","queueCampaign","queueCampaigns","realtime","$translate","Auth"],angular.module("app.motiondialer").controller("QueueCampaignagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i,o){var s=this;s.queueCampaign=t,s.items=[],s.selectedItems=[],s.loading=!1,s.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:i.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){s.loading=!0,a.voiceQueue[t?"removeBlackLists":"addBlackLists"]({id:s.queueCampaign.id,ids:_.map(e,"id")}).$promise.then(function(){n.success({title:"List properly "+(t?"removed":"added"),msg:"List has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){s.loading=!1})}},s.closeDialog=function(){e.hide()},a.voiceQueue.getBlackLists({id:s.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return s.selectedItems=e.rows?e.rows:[],s.dualMultiselectOptions.selectedItems=s.selectedItems,a.cmList.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){s.items=e.rows?e.rows:[],s.dualMultiselectOptions.items=_.differenceBy(s.items,s.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","queueCampaign","$translate","$timeout"],angular.module("app.motiondialer").controller("QueueCampaignblacklistaddController",e)}(),function(){"use strict";function e(t,n,a,e,i,o,s){var r=this;function l(e){t.hide(e)}r.newQueueCampaign=!0,r.queueCampaign=angular.copy(i),r.queueCampaigns=o,r.title=s.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHopperBlacks={count:0,rows:[]},c.selectedQueueCampaignHopperBlacks=[],c.query={fields:"createdAt,updatedAt,ContactId,phone",sort:"-id",limit:10,page:1},c.init=function(e){c.queueCampaign=e,c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperBlacks()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperBlackDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperBlacks/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperBlack:t,hopperBlacks:c.queueCampaignHopperBlacks.rows,license:null,setting:null}})},c.exportSelectedQueueCampaignHopperBlacks=function(){var e=angular.copy(c.selectedQueueCampaignHopperBlacks);return c.selectedQueueCampaignHopperBlacks=[],e},c.deleteQueueCampaignHopperBlack=g,c.deleteSelectedQueueCampaignHopperBlacks=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.contacts={},c.queueCampaign={},c.queueCampaignHopperFinals={count:0,rows:[]},c.selectedQueueCampaignHopperFinals=[],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){c.queueCampaign=e,c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperFinals()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperFinalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperFinals/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperFinal:t,hopperFinals:c.queueCampaignHopperFinals.rows,license:null,setting:null}})},c.exportSelectedQueueCampaignHopperFinals=function(){var e=angular.copy(c.selectedQueueCampaignHopperFinals);return c.selectedQueueCampaignHopperFinals=[],e},c.deleteQueueCampaignHopperFinal=g,c.deleteSelectedQueueCampaignHopperFinals=function(e){var t=o.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");o.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=o.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");o.show(n).then(function(){v(e)},function(){console.log("CANCEL")})},c.moveSelectedQueueCampaignHopperFinals=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHopperHistories={count:0,rows:[]},c.selectedQueueCampaignHopperHistories=[],c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,scheduledat,starttime,responsetime,endtime",sort:"-id",limit:10,page:1},c.init=function(e){c.queueCampaign=e,c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperHistories()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperHistoryDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperHistories/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperHistory:t,hopperHistories:c.queueCampaignHopperHistories.rows,license:null,setting:null}})},c.exportSelectedQueueCampaignHopperHistories=function(){var e=angular.copy(c.selectedQueueCampaignHopperHistories);return c.selectedQueueCampaignHopperHistories=[],e},c.deleteQueueCampaignHopperHistory=g,c.deleteSelectedQueueCampaignHopperHistories=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHoppers={count:0,rows:[]},c.selectedQueueCampaignHoppers=[],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){c.queueCampaign=e,c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHoppers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditHopperVoiceQueueIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hoppers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopper:t,hoppers:c.queueCampaignHoppers.rows,license:null,setting:null}})},c.exportSelectedQueueCampaignHoppers=function(){var e=angular.copy(c.selectedQueueCampaignHoppers);return c.selectedQueueCampaignHoppers=[],e},c.deleteQueueCampaignHopper=g,c.deleteSelectedQueueCampaignHoppers=function(e){var t=o.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");o.show(t).then(function(){c.selectedQueueCampaignHoppers.forEach(function(e){g(e)}),c.selectedQueueCampaignHoppers=[]})},l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=_.keyBy(e.rows||[],"id")}).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){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="MOTIONDIALER.EDIT_HOPPER",u.hopper=angular.copy(r),u.hoppers=o,u.newHopper=!1,u.hopper||(u.hopper={},u.title="MOTIONDIALER.NEW_HOPPER",u.newHopper=!0),t.params.id&&(u.hopper.VoiceQueueId=t.params.id),u.addNewHopper=function(){u.errors=[],l.cmHopper.save(u.hopper).$promise.then(function(e){u.hoppers.unshift(e.toJSON()),s.success({title:"Hopper properly created",msg:u.hopper.name?u.hopper.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveHopper=function(){var n,a,i,o;u.errors=[],u.hopper.UserId=u.hopper.recallme?u.hopper.UserId:null,l.cmHopper.get({id:u.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(){l.cmHopper.update({id:u.hopper.id},_.omit(u.hopper,["VoiceQueueId","CampaignId","ContactId","ListId"])).$promise.then(function(e){a=e,l.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(){l.voiceQueue.get({raw:!1,id:a.VoiceQueueId,attributes:["name"]}).$promise.then(function(e){o=e.name}).catch(function(e){o=void 0}).finally(function(){l.cmHopperHistory.save({state:24,statedesc:"Edited",scheduledat:n,calleridnum:a.phone,calleridname:i,campaigntype:a.VoiceQueueId?"queue":"ivr",campaign:o,editedat:moment().format("YYYY-MM-DD HH:mm:ss"),edited:!0,ListId:a.ListId,UserId:d.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(u.hoppers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),s.success({title:"Hopper properly saved!",msg:u.hopper.name?u.hopper.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})})},u.deleteHopper=function(e){u.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(){l.cmHopper.delete({id:u.hopper.id}).$promise.then(function(){_.remove(u.hoppers,{id:u.hopper.id}),s.success({title:"Hopper properly deleted!",msg:(u.hopper.name||"hopper")+" has been deleted!"}),p(u.hopper)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.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.cmHopper.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){u.agents=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","hoppers","hopper","api","Auth","license","setting"],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,n,a,t,i,o){var s=this;s.queueCampaign=t,s.items=[],s.selectedItems=[],s.loading=!1,s.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:i.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){s.loading=!0,a.voiceQueue[t?"removeLists":"addLists"]({id:s.queueCampaign.id,ids:_.map(e,"id")}).$promise.then(function(){n.success({title:"List properly "+(t?"removed":"added"),msg:"List has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){s.loading=!1})}},s.closeDialog=function(){e.hide()},a.voiceQueue.getLists({id:s.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return s.selectedItems=e.rows?e.rows:[],s.dualMultiselectOptions.selectedItems=s.selectedItems,a.cmList.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){s.items=e.rows?e.rows:[],s.dualMultiselectOptions.items=_.differenceBy(s.items,s.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","queueCampaign","$translate","$timeout"],angular.module("app.motiondialer").controller("QueueCampaignlistaddController",e)}(),function(){"use strict";function e(e,t,a,i,o,n,s,r){var l=this;function d(){t.hide()}function c(e,t){var n=t.id;s.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(o.id,l.selected[n]);var a;a=e,s.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,n,a,t,i){var o=this;o.queueCampaign=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("MOTIONDIALER.ALL_TEAMS"),labelSelected:i.instant("MOTIONDIALER.SELECTED_TEAMS"),transferCallback:function(e,t){a.voiceQueue[t?"removeTeams":"addTeams"]({id:o.queueCampaign.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.voiceQueue.getTeams({id:o.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","queueCampaign","$translate"],angular.module("app.motiondialer").controller("QueueCampaignteamaddController",e)}(),function(){"use strict";function e(n,e,i,o,t,a,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=a,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.queueCampaign=d||n.params.queueCampaign||{},c.selectedTab=n.params.tab||0,c.clonedialog=function(e,t){i.show({controller:"QueueCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:c.queueCampaigns?c.queueCampaigns.rows:[]}})},c.listadddialog=function(e,t){i.show({controller:"QueueCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/listadd/listadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:c.queueCampaigns?c.queueCampaigns.rows:[]}})},c.blacklistadddialog=function(e,t){i.show({controller:"QueueCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:c.queueCampaigns?c.queueCampaigns.rows:[]}})},c.teamadddialog=function(e,t){i.show({controller:"QueueCampaignteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:c.queueCampaigns?c.queueCampaigns.rows:[]}})},c.agentadddialog=function(e,t){i.show({controller:"QueueCampaignagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:c.queueCampaigns?c.queueCampaigns.rows:[],realtime:!1}})},c.resetlistdialog=function(t,n){s.voiceQueue.getLists({id:t.id,fields:"id,name",nolimit:!0}).$promise.then(function(a){if(_.isNil(a.rows)||_.isEmpty(a.rows))r.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=c.queueCampaign.id,t=a.rows[0],n=t.id,s.voiceQueue.removeLists({id:e,ids:n}).$promise.then(function(){return s.voiceQueue.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){r.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){r.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(o.body),targetEvent:n,clickOutsideToClose:!1,locals:{queueCampaign:t,listsCampaign:a?a.rows:[]}})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.gotogoto=function(e,t){n.go("app.motiondialer.realtime.queues",{})},c.alert=r.info,c.gotoQueueCampaigns=function(){n.go("app.motiondialer.queueCampaigns")},c.saveQueueCampaign=function(){s.voiceQueue.update({id:c.queueCampaign.id},c.queueCampaign).$promise.then(function(){r.success({title:"QueueCampaign updated!",msg:c.queueCampaign.name?c.queueCampaign.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceMusicOnHold.get({fields:"name",nolimit:"true"}).$promise.then(function(e){c.musiconholds=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmusiconholds",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.trunks=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.squareProject.get({fields:"name",sort:"name"}).$promise.then(function(e){c.projects=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){c.interval=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","queueCampaign"],angular.module("app.motiondialer").controller("QueueCampaignController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.queueCampaigns=r||{count:0,rows:[]},v.table="queueCampaigns",v.listOrder="",v.listOrderAsc=null,v.selectedQueueCampaigns=[],v.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",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,page:1},v.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"),"")}),v.arrayautopause=_.keyBy([{option:"Yes",value:"'all'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayringinuse=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraytimeoutrestart=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arraysetinterfacevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysetqueuevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysetqueueentryvar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraydialOrderByScheduledAt=_.keyBy([{option:"DESC",value:"'DESC'"},{option:"ASC",value:"'ASC'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arraydialPredictiveOptimization=_.keyBy([{option:"AgentBusyFactor",value:"'agentBusyFactor'"},{option:"DropRate",value:"'dropRate'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.editstate=function(e,t){n.go("app.motiondialer.queueCampaigns.edit",{id:e.id,queueCampaign:e})},v.clonedialog=function(e,t){i.show({controller:"QueueCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:v.queueCampaigns?v.queueCampaigns.rows:[]}})},v.listadddialog=function(e,t){i.show({controller:"QueueCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/listadd/listadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:v.queueCampaigns?v.queueCampaigns.rows:[]}})},v.blacklistadddialog=function(e,t){i.show({controller:"QueueCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:v.queueCampaigns?v.queueCampaigns.rows:[]}})},v.teamadddialog=function(e,t){i.show({controller:"QueueCampaignteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:v.queueCampaigns?v.queueCampaigns.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"QueueCampaignagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:v.queueCampaigns?v.queueCampaigns.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the queueCampaign?").htmlContent("<b>"+(e.name||"queueCampaign")+"</b> will be deleted.").ariaLabel("delete queueCampaign").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.motiondialer.realtime.queues",{})},v.success=f,v.getQueueCampaigns=function(){v.query.offset=(v.query.page-1)*v.query.limit,m.hasRole("admin")?v.promise=l.voiceQueue.get(v.query,f).$promise:(v.query.id=v.currentUser.id,v.promise=l.user.getQueues(v.query,f).$promise)},v.createOrEditQueueCampaign=function(e,t){i.show({controller:"CreateOrEditQueueCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:t,queueCampaigns:v.queueCampaigns.rows,license:v.license,setting:v.setting}})},v.deleteQueueCampaign=A,v.exportSelectedQueueCampaigns=function(){var e=angular.copy(v.selectedQueueCampaigns);return v.selectedQueueCampaigns=[],e},v.deleteSelectedQueueCampaigns=function(e){var t=i.confirm().title("Are you sure want to delete the selected queueCampaigns?").htmlContent("<b>"+v.selectedQueueCampaigns.length+" selected</b> will be deleted.").ariaLabel("delete QueueCampaigns").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedQueueCampaigns.forEach(function(e){A(e)}),v.selectedQueueCampaigns=[]})},v.deselectQueueCampaigns=function(){v.selectedQueueCampaigns=[]},v.selectAllQueueCampaigns=function(){v.selectedQueueCampaigns=v.queueCampaigns.rows},l.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.trunks=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){v.interval=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.queueCampaigns=e||{count:0,rows:[]}}function A(e){l.voiceQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.queueCampaigns.rows,{id:e.id}),v.queueCampaigns.count-=1,v.queueCampaigns.rows.length||v.getQueueCampaigns(),c.success({title:"QueueCampaign deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceQueue"}];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:"SYSTEM:DELETEvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getQueueCampaigns())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","queueCampaigns","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.motiondialer").controller("QueueCampaignsController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d,c,m){var u=this,p=!0;function g(){var e=i.localStorage.getItem("motion2.realtime.abandoned.bull.contacts:"+u.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(u.query=_.merge(e.query,_.omit(u.query,["sort","limit","page"])),u.query=_.omit(u.query,"filter")),s.disposition.get({MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null"}).$promise.then(function(e){u.disposition=e?e.rows:[]}).catch(function(e){console.log(e)}),s.user.getQueues({id:r.getCurrentUser().id,fields:"id,name",channel:"voice",type:"outbound",nolimit:!0}).$promise.then(function(e){u.queues=e||{count:0,rows:[]},u.queuesMap=_.mapValues(_.keyBy(u.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){u.getContacts()})}function v(e){u.contacts=e||{count:0,rows:[]},p=!1,u.refresh=!0}u.showTooltip=!1,u.refresh=!0,u.disable=[],u.agents=m||[],u.currentUser=r.getCurrentUser(),u.localizationMap=c,u.pickerModel={dateStart:null,dateEnd:null},u.queues={},u.contacts={count:0,rows:[]},u.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},u.clearAll=function(){u.query.dateStart=void 0,u.query.dateEnd=void 0,u.pickerModel={dateStart:null,dateEnd:null},u.getContacts()},u.getContacts=function(){u.refresh=!1,u.query.dateStart=void 0,u.query.dateEnd=void 0,u.pickerModel.dateStart&&!p&&(u.query.dateStart=u.pickerModel.dateStart,u.query.dateEnd=u.pickerModel.dateEnd);u.query.queue=u.query.queue,u.query.offset=(u.query.page-1)*u.query.limit,i.localStorage.setItem("motion2.realtime.abandoned.bull.contacts:"+u.currentUser.id,JSON.stringify({query:_.omit(u.query,"queue")})),u.promise=s.voiceQueueReport.getVoiceQueuesReport(u.query,v).$promise},u.refreshContacts=function(){u.showTooltip=!1,u.getContacts()},u.onInit=g,u.assignedA=function(e,t){e&&(u.disable[e.id]=!0,s.voiceQueueReport.update({id:e.id,lastAssignedTo:t?t.name:null,assigned:!!t}).$promise.catch(function(e){console.log(e)}).finally(function(){u.disable[e.id]=!1}))},u.disposed=function(e,t){e&&s.voiceQueueReport.update({id:e.id,disposition:t||null}).$promise.catch(function(e){console.log(e)})},u.onSavevoiceQueueReport=function(e){e&&u.queuesMap&&"outbound"===e.type&&u.queuesMap[e.queue]&&(u.showTooltip=!0)},u.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(u.contacts.rows,["id",e.id]);0<=t&&_.merge(u.contacts.rows[t],e)}},l.onWithoutApply("voiceQueueReport:save",u.onSavevoiceQueueReport),l.on("voiceQueueReport:update",u.onUpdatevoiceQueueReport),g();var h=!0,b=1;e.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=b),u.getContacts())}),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","agents"],angular.module("app.motiondialer").controller("AbandonedCallsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"outbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,a,i,t,o,s,r,l,d){var c=this,m=["name","active","limitCalls","message","originated","IntervalId","SquareProjectId","Trunk","TrunkId","ivrAnswerCallsDay","dialQueueProject","ivrTotalCallsDays","description"];function u(){_.forIn(c.campaigns,function(e,t){c.rpcCampaigns[t]&&_.merge(e,_.pick(c.rpcCampaigns[t],m))})}c.count=s.count,c.campaigns=s?_.keyBy(s.rows?s.rows:[],"id"):{},c.rpcCampaigns=o?_.keyBy(o.rows?o.rows:[],"id"):{},c.query={sort:"-updatedAt",limit:10,page:1},c.success=v,c.getCampaigns=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=r.campaign.get(c.query,v).$promise},c.onSave=function(e){c.campaigns[e.id]&&(_.merge(c.campaigns[e.id],_.pick(e,m)),_.merge(c.rpcCampaigns[e.id],_.pick(e,m)))},c.$onInit=u,c.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(c.campaigns),license:null,setting:null}})},l.onWithoutApply("campaign:save",c.onSave),c.interval=t(function(){},999);var p=!0,g=1;function v(e){c.count=e.count,c.campaigns=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.getCampaigns())}),e.$on("$destroy",function(){l.removeAllListeners("campaign:save"),c.interval&&t.cancel(c.interval)})}e.$inject=["$scope","$timeout","$mdDialog","$document","$interval","rpcCampaigns","campaigns","api","socket","Auth"],angular.module("app.motiondialer").controller("IvrCampaignsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,t,a,n,i,o,s,r,l){var d=this;d.agents=n||{count:0,rows:[]},d.rpcVoiceQueuesChannels=i?_.keyBy(i.rows?_.filter(i.rows,{type:"outbound"}):[],"uniqueid"):{},d.queryChannels={limit:10,page:1},d.getSize=function(e){return _.size(e)},d.onSave=function(e){"outbound"===e.type&&(d.rpcVoiceQueuesChannels[e.uniqueid]=e)},d.onRemove=function(e){d.rpcVoiceQueuesChannels[e.uniqueid]&&delete d.rpcVoiceQueuesChannels[e.uniqueid]},d.hangup=function(t){return o.rpc.getVoiceQueuesChannelHangup({uniqueid:t}).$promise.then(function(e){l.success({title:"Channel "+t+" properly hangup!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},d.redirectToAgent=function(t,e,n){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e,context:n}).$promise.then(function(e){l.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},d.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){l.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},s.on("voice_queue_channel:save",d.onSave),s.on("voice_queue_channel:remove",d.onRemove),e.$on("$destroy",function(){s.removeAllListeners("voice_queue_channel:save"),s.removeAllListeners("voice_queue_channel:remove")})}e.$inject=["$scope","$timeout","$mdDialog","agents","rpcVoiceQueuesChannels","api","socket","helperClasses","toasty"],angular.module("app.motiondialer").controller("QueueCallsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r){var l=this,d=["total","answered","sumHoldTime","sumDuration","sumBillable","outboundNoAnswerCallsDay","outboundBusyCallsDay","outboundCongestionCallsDay","outboundNoSuchCallsDay","outboundUnknownCallsDay","outboundDropCallsDayTimeout","outboundDropCallsDayCallersExit","outboundBlacklistCallsDay","outboundOriginateFailureCallsDay","outboundAnswerAgiCallsDay","outboundReCallsDay","outboundRejectCallsDay"];function c(){_.forIn(l.queues,function(e,t){l.rpcQueues[t]&&_.merge(e,_.pick(l.rpcQueues[t],d))})}l.count=a.count,l.queues=a?_.keyBy(a.rows?a.rows:[],"id"):{},l.rpcQueues=i?_.keyBy(i.rows?i.rows:[],"id"):{},r.hasRole("admin")?l.query={type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1}:l.query={id:r.getCurrentUser().id,channel:"voice",type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1},l.success=p,l.getQueues=function(){l.query.offset=(l.query.page-1)*l.query.limit,r.hasRole("admin")?l.promise=o.voiceQueue.get(l.query,p).$promise:l.promise=o.user.getQueues(l.query,p).$promise},l.onSave=function(e){l.queues[e.id]&&_.merge(l.queues[e.id],_.pick(e,d))},l.$onInit=c,s.onWithoutApply("voice_queue:save",l.onSave),l.interval=t(function(){},999);var m=!0,u=1;function p(e){l.count=e.count,l.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},c()}e.$watch("vm.query.filter",function(e,t){m?n(function(){m=!1}):(t||(u=l.query.page),e!==t&&(l.query.page=1),e||(l.query.page=u),l.getQueues())}),e.$on("$destroy",function(){s.removeAllListeners("voice_queue:save"),l.interval&&t.cancel(l.interval)})}e.$inject=["$scope","$timeout","$interval","queues","rpcQueues","api","socket","Auth"],angular.module("app.motiondialer").controller("QueueParamsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.voiceQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].VoiceQueueId].paused++,u.queues[e[t].rows[n].VoiceQueueId].loggedInDb++,u.queues[e[t].rows[n].VoiceQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].VoiceQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"outbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"voice",type:"outbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.voiceQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!0}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.MotionDialerQueueId]&&u.queues[e.MotionDialerQueueId].loggedInDb++},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.VoiceQueueId]&&(u.queues[e.VoiceQueueId].loggedInDb+=1,u.queues[e.VoiceQueueId].agents[e.UserId]=e.VoiceQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.VoiceQueueId]&&0<u.queues[e.VoiceQueueId].loggedInDb&&(u.queues[e.VoiceQueueId].loggedInDb-=1,delete u.queues[e.VoiceQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.onWithoutApply("voice_queue:save",u.onSave),u.interval=o(function(){},999),d.on("userVoiceQueueRt:save",u.onSaveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("voice_queue:save"),u.interval&&o.cancel(u.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","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,o,i,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="OPENCHANNEL.EDIT_OPENCHANNELACCOUNT",u.openchannelAccount=angular.copy(r),u.openchannelAccounts=s,u.newOpenchannelAccount=!1,u.openchannelAccount||(u.openchannelAccount={waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},u.title="OPENCHANNEL.NEW_OPENCHANNELACCOUNT",u.newOpenchannelAccount=!0),t.params.id&&(u.openchannelAccount.OpenchannelAccountId=t.params.id),u.addNewOpenchannelAccount=function(){u.errors=[],l.openchannelAccount.save(u.openchannelAccount).$promise.then(function(e){var t="add"+_.upperFirst("openchannelAccount")+"s";return l.user[t]({id:d.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){u.openchannelAccounts.unshift(e.toJSON()),i.success({title:"OpenchannelAccount properly created",msg:u.openchannelAccount.name?u.openchannelAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.save"}];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.openchannelAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveOpenchannelAccount=function(){u.errors=[],l.openchannelAccount.update({id:u.openchannelAccount.id},u.openchannelAccount).$promise.then(function(e){var t=_.find(u.openchannelAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),i.success({title:"OpenchannelAccount properly saved!",msg:u.openchannelAccount.name?u.openchannelAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.update"}];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.openchannelAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteOpenchannelAccount=function(e){u.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(){l.openchannelAccount.delete({id:u.openchannelAccount.id}).$promise.then(function(){return l.openchannelAccount.getAgents({id:u.openchannelAccount.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a="remove"+_.upperFirst("openchannelAccount")+"s",i=0;i<n.length;i++)t.push(l.user[a]({id:d.getCurrentUser().id,ids:[u.openchannelAccount.id]}).$promise);return o.all(t)}).then(function(){_.remove(u.openchannelAccounts,{id:u.openchannelAccount.id}),i.success({title:"OpenchannelAccount properly deleted!",msg:(u.openchannelAccount.name||"openchannelAccount")+" has been deleted!"}),p(u.openchannelAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.delete"}];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.openchannelAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){i.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","toasty","openchannelAccounts","openchannelAccount","api","Auth","license","setting"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelAccountDialogController",e)}(),function(){"use strict";function e(s,i,a,o,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}}).then(function(e){e&&(e.id?r.openchannelAccountApps.rows[t]=e:r.openchannelAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&o.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=[],o=[];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=(o.length?_.last(o).priority:a.priority)+1,t=_.concat(t,i,[a],o)}s.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.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",route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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",route:"openchannelQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"user",filters:{fields:"id,name",sort:"name",role:"agent",nolimit:!0}}],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",maxlength:255,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",route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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){r.openchannelAccount=e,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=s.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:[]}}).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(),o.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 s.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,n,a,t,i,o,s,r){var l=this;function d(){return a.openchannelAccount[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.openchannelAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserOpenchannelAccount?"penalty "+e.UserOpenchannelAccount.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserOpenchannelAccount?"penalty "+e.UserOpenchannelAccount.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.openchannelAccount=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("OPENCHANNEL.ALL_AGENTS"),labelSelected:s.instant("OPENCHANNEL.SELECTED_AGENTS"),transferCallback:function(e,t){a.openchannelAccount[t?"removeAgents":"addAgents"]({id:l.openchannelAccount.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"OpenchannelAccount properly "+(t?"removed":"added"),msg:"OpenchannelAccount has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:openchannelAccount.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","openchannelAccount","openchannelAccounts","realtime","$translate","Auth"],angular.module("app.openchannel").controller("OpenchannelAccountagentaddController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(e.appType||e.app).toUpperCase(),o.agent=angular.copy(e),o.agent.appdata)switch(o.agent.appType?o.agent.appType.toLowerCase():o.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agent.appdata.split(",");o.agent.key=s[0],o.agent.language=s[1],o.agent.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agent.appdata.split(",");o.agent.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agent.text=s.slice(1,s.length).join(",");break;case"message":o.agent.text=o.agent.appdata;break;case"set":o.agent.name=o.agent.appdata.split("=")[0],o.agent.value=o.agent.appdata.split("=")[1];break;case"agi":o.agent.project=o.agent.appdata;break;default:var r=o.agent.appdata.split(",");o.agent.agent=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.agent.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.agent.timeout=30;function l(e){t.hide(e)}o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outbounddial"===o.agent.appType.toLowerCase()&&(o.agent.prefix=o.agent.phone?o.agent.phone.split("$")[0]:void 0,o.agent.callerId=o.agent.callerID?"CALLERID(all)="+o.agent.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outboundDial"===o.agent.appType&&(o.agent.phone=a.cutdigits?(o.agent.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agent.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agent.options+="U(xcally-mixmonitor-context)"):o.agent.options=o.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.agents,{name:o.agent.agent});t&&(o.agent.UserId=t.id);if(o.agent.appType&&"custom"===o.agent.appType);else switch((o.agent.app||o.agent.appType).toLowerCase()){case"set":o.agent.appdata=o.agent.name+"="+o.agent.value;break;case"custom":break;default:e[0]=o.agent.agent,e[1]=o.agent.timeout,o.agent.appdata=e.join(",")}l(o.agent)},o.closeDialog=l,i.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){o.agents=e.rows||[]}).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","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(n.appType||n.app).toUpperCase(),o.autoreply=angular.copy(n),o.autoreply.appdata)switch(o.autoreply.appType?o.autoreply.appType.toLowerCase():o.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.autoreply.appdata.split(",");o.autoreply.key=s[0],o.autoreply.language=s[1],o.autoreply.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.autoreply.appdata.split(",");o.autoreply.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.autoreply.text=s.slice(1,s.length).join(",");break;case"message":o.autoreply.text=o.autoreply.appdata;break;case"set":o.autoreply.name=o.autoreply.appdata.split("=")[0],o.autoreply.value=o.autoreply.appdata.split("=")[1];break;case"agi":o.autoreply.project=o.autoreply.appdata;break;default:var r=o.autoreply.appdata.split(",");o.autoreply.times=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.autoreply.text=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.autoreply.times=1;function l(e){t.hide(e)}o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outbounddial"===o.autoreply.appType.toLowerCase()&&(o.autoreply.prefix=o.autoreply.phone?o.autoreply.phone.split("$")[0]:void 0,o.autoreply.callerId=o.autoreply.callerID?"CALLERID(all)="+o.autoreply.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outboundDial"===o.autoreply.appType&&(o.autoreply.phone=a.cutdigits?(o.autoreply.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.autoreply.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.autoreply.options+="U(xcally-mixmonitor-context)"):o.autoreply.options=o.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(o.autoreply.appType&&"custom"===o.autoreply.appType);else switch((o.autoreply.app||o.autoreply.appType).toLowerCase()){case"set":o.autoreply.appdata=o.autoreply.name+"="+o.autoreply.value;break;case"custom":break;default:e[0]=o.autoreply.times,e[1]=o.autoreply.text,o.autoreply.appdata=e.join(",")}l(o.autoreply)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(n.appType||n.app).toUpperCase(),o.close=angular.copy(n),o.close.appdata)switch(o.close.appType?o.close.appType.toLowerCase():o.close.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.close.appdata.split(",");o.close.key=s[0],o.close.language=s[1],o.close.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.close.appdata.split(",");o.close.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.close.text=s.slice(1,s.length).join(",");break;case"message":o.close.text=o.close.appdata;break;case"set":o.close.name=o.close.appdata.split("=")[0],o.close.value=o.close.appdata.split("=")[1];break;case"agi":o.close.project=o.close.appdata;break;default:var r=o.close.appdata.split(",");o.close.disposition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outbounddial"===o.close.appType.toLowerCase()&&(o.close.prefix=o.close.phone?o.close.phone.split("$")[0]:void 0,o.close.callerId=o.close.callerID?"CALLERID(all)="+o.close.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outboundDial"===o.close.appType&&(o.close.phone=a.cutdigits?(o.close.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.close.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.close.options+="U(xcally-mixmonitor-context)"):o.close.options=o.close.options.replace("U(xcally-mixmonitor-context)",""));if(o.close.appType&&"custom"===o.close.appType);else switch((o.close.app||o.close.appType).toLowerCase()){case"set":o.close.appdata=o.close.name+"="+o.close.value;break;case"custom":break;default:e[0]=o.close.disposition,o.close.appdata=e.join(",")}l(o.close)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotoif=angular.copy(n),o.gotoif.appdata)switch(o.gotoif.appType?o.gotoif.appType.toLowerCase():o.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotoif.appdata.split(",");o.gotoif.key=s[0],o.gotoif.language=s[1],o.gotoif.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotoif.appdata.split(",");o.gotoif.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotoif.text=s.slice(1,s.length).join(",");break;case"message":o.gotoif.text=o.gotoif.appdata;break;case"set":o.gotoif.name=o.gotoif.appdata.split("=")[0],o.gotoif.value=o.gotoif.appdata.split("=")[1];break;case"agi":o.gotoif.project=o.gotoif.appdata;break;default:var r=o.gotoif.appdata.split(",");o.gotoif.condition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.gotoif.truepriority=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.gotoif.falsepriority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outbounddial"===o.gotoif.appType.toLowerCase()&&(o.gotoif.prefix=o.gotoif.phone?o.gotoif.phone.split("$")[0]:void 0,o.gotoif.callerId=o.gotoif.callerID?"CALLERID(all)="+o.gotoif.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outboundDial"===o.gotoif.appType&&(o.gotoif.phone=a.cutdigits?(o.gotoif.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotoif.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotoif.options+="U(xcally-mixmonitor-context)"):o.gotoif.options=o.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotoif.appType&&"custom"===o.gotoif.appType);else switch((o.gotoif.app||o.gotoif.appType).toLowerCase()){case"set":o.gotoif.appdata=o.gotoif.name+"="+o.gotoif.value;break;case"custom":break;default:e[0]=o.gotoif.condition,e[1]=o.gotoif.truepriority,e[2]=o.gotoif.falsepriority,o.gotoif.appdata=e.join(",")}l(o.gotoif)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotop=angular.copy(n),o.gotop.appdata)switch(o.gotop.appType?o.gotop.appType.toLowerCase():o.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotop.appdata.split(",");o.gotop.key=s[0],o.gotop.language=s[1],o.gotop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotop.appdata.split(",");o.gotop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotop.text=s.slice(1,s.length).join(",");break;case"message":o.gotop.text=o.gotop.appdata;break;case"set":o.gotop.name=o.gotop.appdata.split("=")[0],o.gotop.value=o.gotop.appdata.split("=")[1];break;case"agi":o.gotop.project=o.gotop.appdata;break;default:var r=o.gotop.appdata.split(",");o.gotop.priority=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outbounddial"===o.gotop.appType.toLowerCase()&&(o.gotop.prefix=o.gotop.phone?o.gotop.phone.split("$")[0]:void 0,o.gotop.callerId=o.gotop.callerID?"CALLERID(all)="+o.gotop.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outboundDial"===o.gotop.appType&&(o.gotop.phone=a.cutdigits?(o.gotop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotop.options+="U(xcally-mixmonitor-context)"):o.gotop.options=o.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotop.appType&&"custom"===o.gotop.appType);else switch((o.gotop.app||o.gotop.appType).toLowerCase()){case"set":o.gotop.appdata=o.gotop.name+"="+o.gotop.value;break;case"custom":break;default:e[0]=o.gotop.priority,o.gotop.appdata=e.join(",")}l(o.gotop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditOpenchannelAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(n.appType||n.app).toUpperCase(),o.noop=angular.copy(n),o.noop.appdata)switch(o.noop.appType?o.noop.appType.toLowerCase():o.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.noop.appdata.split(",");o.noop.key=s[0],o.noop.language=s[1],o.noop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.noop.appdata.split(",");o.noop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.noop.text=s.slice(1,s.length).join(",");break;case"message":o.noop.text=o.noop.appdata;break;case"set":o.noop.name=o.noop.appdata.split("=")[0],o.noop.value=o.noop.appdata.split("=")[1];break;case"agi":o.noop.project=o.noop.appdata;break;default:var r=o.noop.appdata.split(",");o.noop.value=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outbounddial"===o.noop.appType.toLowerCase()&&(o.noop.prefix=o.noop.phone?o.noop.phone.split("$")[0]:void 0,o.noop.callerId=o.noop.callerID?"CALLERID(all)="+o.noop.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outboundDial"===o.noop.appType&&(o.noop.phone=a.cutdigits?(o.noop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.noop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.noop.options+="U(xcally-mixmonitor-context)"):o.noop.options=o.noop.options.replace("U(xcally-mixmonitor-context)",""));if(o.noop.appType&&"custom"===o.noop.appType);else switch((o.noop.app||o.noop.appType).toLowerCase()){case"set":o.noop.appdata=o.noop.name+"="+o.noop.value;break;case"custom":break;default:e[0]=o.noop.value,o.noop.appdata=e.join(",")}l(o.noop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.queue.queue=300,o.queue.timeout=300;function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.queues,{name:o.queue.queue});t&&(o.queue[_.capitalize("openChannel")+"QueueId"]=t.id);if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.timeout,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.openchannelQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(e.appType||e.app).toUpperCase(),o.system=angular.copy(e),o.system.appdata)switch(o.system.appType?o.system.appType.toLowerCase():o.system.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.system.appdata.split(",");o.system.key=s[0],o.system.language=s[1],o.system.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.system.appdata.split(",");o.system.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.system.text=s.slice(1,s.length).join(",");break;case"message":o.system.text=o.system.appdata;break;case"set":o.system.name=o.system.appdata.split("=")[0],o.system.value=o.system.appdata.split("=")[1];break;case"agi":o.system.project=o.system.appdata;break;default:var r=o.system.appdata.split(",");o.system.command=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.system.variable=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.system.variable="";function l(e){t.hide(e)}o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outbounddial"===o.system.appType.toLowerCase()&&(o.system.prefix=o.system.phone?o.system.phone.split("$")[0]:void 0,o.system.callerId=o.system.callerID?"CALLERID(all)="+o.system.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outboundDial"===o.system.appType&&(o.system.phone=a.cutdigits?(o.system.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.system.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.system.options+="U(xcally-mixmonitor-context)"):o.system.options=o.system.options.replace("U(xcally-mixmonitor-context)",""));if(o.system.appType&&"custom"===o.system.appType);else switch((o.system.app||o.system.appType).toLowerCase()){case"set":o.system.appdata=o.system.name+"="+o.system.value;break;case"custom":break;default:e[0]=o.system.command,e[1]=o.system.variable,o.system.appdata=e.join(",")}l(o.system)},o.closeDialog=l,i.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="OPENCHANNEL.EDIT_"+(e.appType||e.app).toUpperCase(),o.tag=angular.copy(e),o.tag.appdata)switch(o.tag.appType?o.tag.appType.toLowerCase():o.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.tag.appdata.split(",");o.tag.key=s[0],o.tag.language=s[1],o.tag.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.tag.appdata.split(",");o.tag.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.tag.text=s.slice(1,s.length).join(",");break;case"message":o.tag.text=o.tag.appdata;break;case"set":o.tag.name=o.tag.appdata.split("=")[0],o.tag.value=o.tag.appdata.split("=")[1];break;case"agi":o.tag.project=o.tag.appdata;break;default:var r=o.tag.appdata.split(",");o.tag.tag=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outbounddial"===o.tag.appType.toLowerCase()&&(o.tag.prefix=o.tag.phone?o.tag.phone.split("$")[0]:void 0,o.tag.callerId=o.tag.callerID?"CALLERID(all)="+o.tag.callerID:void 0),o.saveOpenchannelAccountApp=function(){o.errors=[];var e=[];o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outboundDial"===o.tag.appType&&(o.tag.phone=a.cutdigits?(o.tag.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.tag.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.tag.options+="U(xcally-mixmonitor-context)"):o.tag.options=o.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.tags,{name:o.tag.tag});t&&(o.tag.TagId=t.id);if(o.tag.appType&&"custom"===o.tag.appType);else switch((o.tag.app||o.tag.appType).toLowerCase()){case"set":o.tag.appdata=o.tag.name+"="+o.tag.value;break;case"custom":break;default:e[0]=o.tag.tag,o.tag.appdata=e.join(",")}l(o.tag)},o.closeDialog=l,i.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","openchannelAccountApp","openchannelAccount","api"],angular.module("app.openchannel").controller("EditOpenchannelAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountInteractions={count:0,rows:[]},c.selectedOpenchannelAccountInteractions=[],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){c.openchannelAccount=e,c.query.id=c.openchannelAccount.id,c.getOpenchannelAccountInteractions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},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){o.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/interactions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,interaction:t,interactions:c.openchannelAccountInteractions.rows,license:null,setting:null}})},c.spyopenchannelInteraction=function(e,n){o.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(s.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=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountOpenchannelCannedAnswers={count:0,rows:[]},c.selectedOpenchannelAccountOpenchannelCannedAnswers=[],c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e){c.openchannelAccount=e,c.query.id=c.openchannelAccount.id,c.query.OpenchannelAccountId=c.openchannelAccount.id,c.getOpenchannelAccountOpenchannelCannedAnswers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditOpenchannelCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelCannedAnswers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,openchannelCannedAnswer:t,openchannelCannedAnswers:c.openchannelAccountOpenchannelCannedAnswers.rows,license:null,setting:null}})},c.exportSelectedOpenchannelAccountOpenchannelCannedAnswers=function(){var e=angular.copy(c.selectedOpenchannelAccountOpenchannelCannedAnswers);return c.selectedOpenchannelAccountOpenchannelCannedAnswers=[],e},c.deleteOpenchannelAccountOpenchannelCannedAnswer=g,c.deleteSelectedOpenchannelAccountOpenchannelCannedAnswers=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="OPENCHANNEL.EDIT_OPENCHANNELCANNEDANSWER",u.openchannelCannedAnswer=angular.copy(r),u.openchannelCannedAnswers=s,u.newOpenchannelCannedAnswer=!1,u.openchannelCannedAnswer||(u.openchannelCannedAnswer={},u.title="OPENCHANNEL.NEW_OPENCHANNELCANNEDANSWER",u.newOpenchannelCannedAnswer=!0),t.params.id&&(u.openchannelCannedAnswer.OpenchannelAccountId=t.params.id),u.addNewOpenchannelCannedAnswer=function(){u.errors=[],l.cannedAnswer.save(u.openchannelCannedAnswer).$promise.then(function(e){u.openchannelCannedAnswers.unshift(e.toJSON()),o.success({title:"OpenchannelCannedAnswer properly created",msg:u.openchannelCannedAnswer.name?u.openchannelCannedAnswer.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveOpenchannelCannedAnswer=function(){u.errors=[],l.cannedAnswer.update({id:u.openchannelCannedAnswer.id},u.openchannelCannedAnswer).$promise.then(function(e){var t=_.find(u.openchannelCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelCannedAnswer properly saved!",msg:u.openchannelCannedAnswer.name?u.openchannelCannedAnswer.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteOpenchannelCannedAnswer=function(e){u.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(){l.cannedAnswer.delete({id:u.openchannelCannedAnswer.id}).$promise.then(function(){_.remove(u.openchannelCannedAnswers,{id:u.openchannelCannedAnswer.id}),o.success({title:"OpenchannelCannedAnswer properly deleted!",msg:(u.openchannelCannedAnswer.name||"openchannelCannedAnswer")+" has been deleted!"}),p(u.openchannelCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","openchannelCannedAnswers","openchannelCannedAnswer","api","Auth","license","setting"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountOpenchannelDispositions={count:0,rows:[]},c.selectedOpenchannelAccountOpenchannelDispositions=[],c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e){c.openchannelAccount=e,c.query.id=c.openchannelAccount.id,c.query.OpenchannelAccountId=c.openchannelAccount.id,c.getOpenchannelAccountOpenchannelDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditOpenchannelDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,openchannelDisposition:t,openchannelDispositions:c.openchannelAccountOpenchannelDispositions.rows,license:null,setting:null}})},c.exportSelectedOpenchannelAccountOpenchannelDispositions=function(){var e=angular.copy(c.selectedOpenchannelAccountOpenchannelDispositions);return c.selectedOpenchannelAccountOpenchannelDispositions=[],e},c.deleteOpenchannelAccountOpenchannelDisposition=g,c.deleteSelectedOpenchannelAccountOpenchannelDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="OPENCHANNEL.EDIT_OPENCHANNELDISPOSITION",u.openchannelDisposition=angular.copy(r),u.openchannelDispositions=s,u.newOpenchannelDisposition=!1,u.openchannelDisposition||(u.openchannelDisposition={},u.title="OPENCHANNEL.NEW_OPENCHANNELDISPOSITION",u.newOpenchannelDisposition=!0),t.params.id&&(u.openchannelDisposition.OpenchannelAccountId=t.params.id),u.addNewOpenchannelDisposition=function(){u.errors=[],l.disposition.save(u.openchannelDisposition).$promise.then(function(e){u.openchannelDispositions.unshift(e.toJSON()),o.success({title:"OpenchannelDisposition properly created",msg:u.openchannelDisposition.name?u.openchannelDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveOpenchannelDisposition=function(){u.errors=[],l.disposition.update({id:u.openchannelDisposition.id},u.openchannelDisposition).$promise.then(function(e){var t=_.find(u.openchannelDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelDisposition properly saved!",msg:u.openchannelDisposition.name?u.openchannelDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteOpenchannelDisposition=function(e){u.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(){l.disposition.delete({id:u.openchannelDisposition.id}).$promise.then(function(){_.remove(u.openchannelDispositions,{id:u.openchannelDisposition.id}),o.success({title:"OpenchannelDisposition properly deleted!",msg:(u.openchannelDisposition.name||"openchannelDisposition")+" has been deleted!"}),p(u.openchannelDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","openchannelDispositions","openchannelDisposition","api","Auth","license","setting"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.openchannelAccount=d||e.params.openchannelAccount||{},c.selectedTab=e.params.tab||0,c.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:c.openchannelAccounts?c.openchannelAccounts.rows:[],realtime:!1}})},c.alert=r.info,c.gotoOpenchannelAccounts=function(){e.go("app.openchannel.openchannelAccounts")},c.saveOpenchannelAccount=function(){s.openchannelAccount.update({id:c.openchannelAccount.id},c.openchannelAccount).$promise.then(function(){r.success({title:"OpenchannelAccount updated!",msg:c.openchannelAccount.name?c.openchannelAccount.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.cmContact.describe({}).$promise.then(function(e){if(e){var t=_.keys(e.toJSON());c.attributes=[],c.excludedFields=["id","createdAt","updatedAt","deletedAt","scheduledat","ListId","CompanyId"];for(var n=0;n<t.length;n++)_.includes(c.excludedFields,t[n])||_.startsWith(t[n],"cf_")||c.attributes.push({option:t[n],value:t[n]})}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETattributes",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.cmList.getCustomFields({id:c.openchannelAccount.ListId}).$promise.then(function(e){if(e){c.customFields=[];for(var t=0;t<e.rows.length;t++)c.customFields.push({option:e.rows[t].alias,value:"cf_"+e.rows[t].id})}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcustomFields",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","license","setting","api","toasty","Auth","openchannelAccount"],angular.module("app.openchannel").controller("OpenchannelAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.openchannelAccounts=r||{count:0,rows:[]},v.table="openchannelAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedOpenchannelAccounts=[],v.query={fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},v.editstate=function(e,t){n.go("app.openchannel.openchannelAccounts.edit",{id:e.id,openchannelAccount:e})},v.interactionsgoto=function(e,t){n.go("app.openchannel.openchannelAccounts.edit",{id:e.id,tab:5})},v.agentadddialog=function(e,t){i.show({controller:"OpenchannelAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelAccount:e,openchannelAccounts:v.openchannelAccounts?v.openchannelAccounts.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the openchannelAccount?").htmlContent("<b>"+(e.name||"openchannelAccount")+"</b> will be deleted.").ariaLabel("delete openchannelAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getOpenchannelAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.openchannelAccount.get(v.query,f).$promise},v.createOrEditOpenchannelAccount=function(e,t){i.show({controller:"CreateOrEditOpenchannelAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:t,openchannelAccounts:v.openchannelAccounts.rows,license:v.license,setting:v.setting}})},v.deleteOpenchannelAccount=A,v.exportSelectedOpenchannelAccounts=function(){var e=angular.copy(v.selectedOpenchannelAccounts);return v.selectedOpenchannelAccounts=[],e},v.deleteSelectedOpenchannelAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected openchannelAccounts?").htmlContent("<b>"+v.selectedOpenchannelAccounts.length+" selected</b> will be deleted.").ariaLabel("delete OpenchannelAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedOpenchannelAccounts.forEach(function(e){A(e)}),v.selectedOpenchannelAccounts=[]})},v.deselectOpenchannelAccounts=function(){v.selectedOpenchannelAccounts=[]},v.selectAllOpenchannelAccounts=function(){v.selectedOpenchannelAccounts=v.openchannelAccounts.rows},l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.openchannelAccounts=e||{count:0,rows:[]}}function A(e){l.openchannelAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.openchannelAccounts.rows,{id:e.id}),v.openchannelAccounts.count-=1,v.openchannelAccounts.rows.length||v.getOpenchannelAccounts(),c.success({title:"OpenchannelAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEopenchannelAccount"}];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:"SYSTEM:DELETEopenchannelAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getOpenchannelAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","openchannelAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.openchannel").controller("OpenchannelAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="OPENCHANNEL.EDIT_OPENCHANNELQUEUE",u.openchannelQueue=angular.copy(r),u.openchannelQueues=s,u.newOpenchannelQueue=!1,u.openchannelQueue||(u.openchannelQueue={strategy:"beepall",timeout:10},u.title="OPENCHANNEL.NEW_OPENCHANNELQUEUE",u.newOpenchannelQueue=!0),u.addNewOpenchannelQueue=function(){u.errors=[],l.openchannelQueue.save(u.openchannelQueue).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"openChannel",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.openchannelQueues.unshift(e.toJSON()),o.success({title:"OpenchannelQueue properly created",msg:u.openchannelQueue.name?u.openchannelQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveOpenchannelQueue=function(){u.errors=[],l.openchannelQueue.update({id:u.openchannelQueue.id},u.openchannelQueue).$promise.then(function(e){var t=_.find(u.openchannelQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelQueue properly saved!",msg:u.openchannelQueue.name?u.openchannelQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteOpenchannelQueue=function(e){u.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(){l.openchannelQueue.delete({id:u.openchannelQueue.id}).$promise.then(function(){return l.openchannelQueue.getAgents({id:u.openchannelQueue.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.openchannelQueue.id],channel:"openChannel",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.openchannelQueues,{id:u.openchannelQueue.id}),o.success({title:"OpenchannelQueue properly deleted!",msg:(u.openchannelQueue.name||"openchannelQueue")+" has been deleted!"}),p(u.openchannelQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","openchannelQueues","openchannelQueue","api","Auth","license","setting"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.openchannelQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.openchannelQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserOpenchannelQueue?"penalty "+e.UserOpenchannelQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserOpenchannelQueue?"penalty "+e.UserOpenchannelQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.openchannelQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("OPENCHANNEL.ALL_AGENTS"),labelSelected:s.instant("OPENCHANNEL.SELECTED_AGENTS"),transferCallback:function(e,t){a.openchannelQueue[t?"removeAgents":"addAgents"]({id:l.openchannelQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"OpenchannelQueue properly "+(t?"removed":"added"),msg:"OpenchannelQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:openchannelQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","openchannelQueue","openchannelQueues","realtime","$translate","Auth"],angular.module("app.openchannel").controller("OpenchannelQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.openchannelQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("OPENCHANNEL.ALL_TEAMS"),labelSelected:i.instant("OPENCHANNEL.SELECTED_TEAMS"),transferCallback:function(e,t){a.openchannelQueue[t?"removeTeams":"addTeams"]({id:o.openchannelQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:openchannelQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.openchannelQueue.getTeams({id:o.openchannelQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","openchannelQueue","$translate"],angular.module("app.openchannel").controller("OpenchannelQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.openchannelQueue=d||e.params.openchannelQueue||{},c.selectedTab=e.params.tab||0,c.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:c.openchannelQueues?c.openchannelQueues.rows:[]}})},c.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:c.openchannelQueues?c.openchannelQueues.rows:[],realtime:!1}})},c.alert=r.info,c.gotoOpenchannelQueues=function(){e.go("app.openchannel.openchannelQueues")},c.saveOpenchannelQueue=function(){s.openchannelQueue.update({id:c.openchannelQueue.id},c.openchannelQueue).$promise.then(function(){r.success({title:"OpenchannelQueue updated!",msg:c.openchannelQueue.name?c.openchannelQueue.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","openchannelQueue"],angular.module("app.openchannel").controller("OpenchannelQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.openchannelQueues=r||{count:0,rows:[]},v.table="openchannelQueues",v.listOrder="",v.listOrderAsc=null,v.selectedOpenchannelQueues=[],v.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"openchannel",limit:10,page:1},v.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.openchannel.openchannelQueues.edit",{id:e.id,openchannelQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"OpenchannelQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:v.openchannelQueues?v.openchannelQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"OpenchannelQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:v.openchannelQueues?v.openchannelQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the openchannelQueue?").htmlContent("<b>"+(e.name||"openchannelQueue")+"</b> will be deleted.").ariaLabel("delete openchannelQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.openchannel.realtime.queues",{})},v.success=f,v.getOpenchannelQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.openchannelQueue.get(v.query,f).$promise},v.createOrEditOpenchannelQueue=function(e,t){i.show({controller:"CreateOrEditOpenchannelQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelQueue:t,openchannelQueues:v.openchannelQueues.rows,license:v.license,setting:v.setting}})},v.deleteOpenchannelQueue=A,v.exportSelectedOpenchannelQueues=function(){var e=angular.copy(v.selectedOpenchannelQueues);return v.selectedOpenchannelQueues=[],e},v.deleteSelectedOpenchannelQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected openchannelQueues?").htmlContent("<b>"+v.selectedOpenchannelQueues.length+" selected</b> will be deleted.").ariaLabel("delete OpenchannelQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedOpenchannelQueues.forEach(function(e){A(e)}),v.selectedOpenchannelQueues=[]})},v.deselectOpenchannelQueues=function(){v.selectedOpenchannelQueues=[]},v.selectAllOpenchannelQueues=function(){v.selectedOpenchannelQueues=v.openchannelQueues.rows};var h=!0,b=1;function f(e){v.openchannelQueues=e||{count:0,rows:[]}}function A(e){l.openchannelQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.openchannelQueues.rows,{id:e.id}),v.openchannelQueues.count-=1,v.openchannelQueues.rows.length||v.getOpenchannelQueues(),c.success({title:"OpenchannelQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEopenchannelQueue"}];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:"SYSTEM:DELETEopenchannelQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getOpenchannelQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","openchannelQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.openchannel").controller("OpenchannelQueuesController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsOpenchannelRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.openchannelQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].OpenchannelQueueId].paused++,u.queues[e[t].rows[n].OpenchannelQueueId].loggedInDb++,u.queues[e[t].rows[n].OpenchannelQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].OpenchannelQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"openchannel",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.openchannelQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!1}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.OpenchannelQueueId]&&u.queues[e.OpenchannelQueueId].loggedInDb++},u.onRemoveMember=function(e){u.queues[e.OpenchannelQueueId]&&u.queues[e.OpenchannelQueueId].loggedInDb--},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.OpenchannelQueueId]&&(u.queues[e.OpenchannelQueueId].loggedInDb+=1,u.queues[e.OpenchannelQueueId].agents[e.UserId]=e.OpenchannelQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.OpenchannelQueueId]&&0<u.queues[e.OpenchannelQueueId].loggedInDb&&(u.queues[e.OpenchannelQueueId].loggedInDb-=1,delete u.queues[e.OpenchannelQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.on("openchannel_queue:save",u.onSave),d.on("userOpenchannelQueue:save",u.onSaveMember),d.on("userOpenchannelQueue:remove",u.onRemoveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.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","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,o){var s=this;s.currentUser=o.getCurrentUser(),s.plugin={},s.getTrustedURL=function(){return n.trustAsResourceUrl(s.plugin.adminUrl)},a.plugin.get({id:e.params.id}).$promise.then(function(e){if(e)return s.plugin=e,a.plugin.get({id:s.plugin.id}).$promise}).catch(function(e){s.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SETTINGS.EDIT_CUSTOMIZATION",u.customization=angular.copy(r),u.customizations=s,u.newCustomization=!1,u.customization||(u.customization={},u.title="SETTINGS.NEW_CUSTOMIZATION",u.newCustomization=!0),u.addNewCustomization=function(){u.errors=[],l.setting.save(u.customization).$promise.then(function(e){u.customizations.unshift(e.toJSON()),o.success({title:"Customization properly created",msg:u.customization.name?u.customization.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveCustomization=function(){u.errors=[],l.setting.update({id:u.customization.id},u.customization).$promise.then(function(e){var t=_.find(u.customizations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Customization properly saved!",msg:u.customization.name?u.customization.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteCustomization=function(e){u.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(){l.setting.delete({id:u.customization.id}).$promise.then(function(){_.remove(u.customizations,{id:u.customization.id}),o.success({title:"Customization properly deleted!",msg:(u.customization.name||"customization")+" has been deleted!"}),p(u.customization)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","customizations","customization","api","Auth","license","setting"],angular.module("app.settings").controller("CreateOrEditCustomizationDialogController",e)}(),function(){"use strict";function e(e,t,n){var a=this;a.customizations=e,a.customization={},a.customizations&&a.customizations.rows&&a.customizations.rows.length&&(a.customization=a.customizations.rows[0]),a.saveCustomization=function(){a.customization.id?t.setting.update({id:a.customization.id},a.customization).$promise.then(function(){n.success({title:"Customization updated!",msg:a.customization.name?a.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(a.customization).$promise.then(function(e){_.merge(a.customization,e),n.success({title:"Customization updated!",msg:a.customization.name?a.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"],angular.module("app.settings").controller("CustomizationsController",e)}(),function(){"use strict";function e(e,a){var i=this;i.customization={},i.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SETTINGS.EDIT_GENERAL",u.general=angular.copy(r),u.generals=s,u.newGeneral=!1,u.general||(u.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},u.title="SETTINGS.NEW_GENERAL",u.newGeneral=!0),u.addNewGeneral=function(){u.errors=[],l.setting.save(u.general).$promise.then(function(e){u.generals.unshift(e.toJSON()),o.success({title:"General properly created",msg:u.general.name?u.general.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveGeneral=function(){u.errors=[],l.setting.update({id:u.general.id},u.general).$promise.then(function(e){var t=_.find(u.generals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"General properly saved!",msg:u.general.name?u.general.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteGeneral=function(e){u.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(){l.setting.delete({id:u.general.id}).$promise.then(function(){_.remove(u.generals,{id:u.general.id}),o.success({title:"General properly deleted!",msg:(u.general.name||"general")+" has been deleted!"}),p(u.general)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","generals","general","api","Auth","license","setting"],angular.module("app.settings").controller("CreateOrEditGeneralDialogController",e)}(),function(){"use strict";function e(e,t,n){var a=this;a.generals=e,a.general={},a.generals&&a.generals.rows&&a.generals.rows.length&&(a.general=a.generals.rows[0]),a.saveGeneral=function(){a.general.id?t.setting.update({id:a.general.id},a.general).$promise.then(function(){n.success({title:"General updated!",msg:a.general.name?a.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(a.general).$promise.then(function(e){_.merge(a.general,e),n.success({title:"General updated!",msg:a.general.name?a.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"],angular.module("app.settings").controller("GeneralsController",e)}(),function(){"use strict";function e(t,n,a,i,e,o){var s=this;s.license=i||{},s.agents=0,s.users=0,s.telephones=0,s.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"}],s.modules=[{name:"cm",icon:"icon-account-circle"},{name:"dialer",icon:"icon-crosshairs"},{name:"jscripty",icon:"icon-console"}],s.addons=[{name:"webrtc",icon:"icon-server-plus"},{name:"jaws",icon:"icon-fish"},{name:"custom",icon:"icon-table-edit"}],s.sessions=[{name:"callysquare",icon:"icon-sitemap",restart:!0,label:"channels",enabled:"voice"},{name:"virtual",icon:"icon-dots-horizontal",restart:!1,label:"sessions",enabled:"chat"}],s.others=[{name:"update",icon:"icon-cloud-download"}],s.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:s.channels,modules:s.modules,addons:s.addons,sessions:s.sessions,others:s.others}})},s.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}})},s.gotoProcess=function(e){a.go("app.settings.system",{tab:1})},o.user.get({fields:"id",role:"agent",online:!0}).$promise.then(function(e){return s.agents=e&&e.count?e.count:0,o.user.get({fields:"id",role:"user,admin"}).$promise}).then(function(e){return s.users=e&&e.count?e.count:0,o.user.get({fields:"id",role:"telephone"}).$promise}).then(function(e){s.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,o,s,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=o,m.sessions=s,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 o=this;o.errors=[],o.license=angular.copy(n),o.licenseKey,o.updateLicense=function(){return a.license.update({id:1,key:o.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()})})},o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SETTINGS.EDIT_NETWORK",u.network=angular.copy(r),u.networks=s,u.newNetwork=!1,u.network||(u.network={type:"localnet"},u.title="SETTINGS.NEW_NETWORK",u.newNetwork=!0),u.addNewNetwork=function(){u.errors=[],l.network.save(u.network).$promise.then(function(e){u.networks.unshift(e.toJSON()),o.success({title:"Network properly created",msg:u.network.name?u.network.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveNetwork=function(){u.errors=[],l.network.update({id:u.network.id},u.network).$promise.then(function(e){var t=_.find(u.networks,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Network properly saved!",msg:u.network.name?u.network.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteNetwork=function(e){u.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(){l.network.delete({id:u.network.id}).$promise.then(function(){_.remove(u.networks,{id:u.network.id}),o.success({title:"Network properly deleted!",msg:(u.network.name||"network")+" has been deleted!"}),p(u.network)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","networks","network","api","Auth","license","setting"],angular.module("app.settings").controller("CreateOrEditNetworkDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.networks=r||{count:0,rows:[]},v.table="networks",v.listOrder="",v.listOrderAsc=null,v.selectedNetworks=[],v.query={fields:"createdAt,updatedAt,id,type,value",sort:"-updatedAt",limit:10,page:1},v.arraytype=_.keyBy([{option:"LocalNET",value:"'localnet'"},{option:"ExternIP",value:"'externip'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editdialog=function(e,t){i.show({controller:"CreateOrEditNetworkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/networks/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{network:e,networks:v.networks.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the 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")})},v.success=f,v.getNetworks=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.network.get(v.query,f).$promise},v.createOrEditNetwork=function(e,t){i.show({controller:"CreateOrEditNetworkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/networks/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{network:t,networks:v.networks.rows,license:v.license,setting:v.setting}})},v.deleteNetwork=A,v.exportSelectedNetworks=function(){var e=angular.copy(v.selectedNetworks);return v.selectedNetworks=[],e},v.deleteSelectedNetworks=function(e){var t=i.confirm().title("Are you sure want to delete the selected networks?").htmlContent("<b>"+v.selectedNetworks.length+" selected</b> will be deleted.").ariaLabel("delete Networks").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedNetworks.forEach(function(e){A(e)}),v.selectedNetworks=[]})},v.deselectNetworks=function(){v.selectedNetworks=[]},v.selectAllNetworks=function(){v.selectedNetworks=v.networks.rows};var h=!0,b=1;function f(e){v.networks=e||{count:0,rows:[]}}function A(e){l.network.delete({id:e.id}).$promise.then(function(){_.remove(v.networks.rows,{id:e.id}),v.networks.count-=1,v.networks.rows.length||v.getNetworks(),c.success({title:"Network deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEnetwork"}];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:"SYSTEM:DELETEnetwork",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getNetworks())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SETTINGS.EDIT_SMTP",u.smtp=angular.copy(r),u.smtps=s,u.newSmtp=!1,u.smtp||(u.smtp={service:!0},u.title="SETTINGS.NEW_SMTP",u.newSmtp=!0),u.addNewSmtp=function(){u.errors=[],l.mailAccount.save(u.smtp).$promise.then(function(e){u.smtps.unshift(e.toJSON()),o.success({title:"Smtp properly created",msg:u.smtp.name?u.smtp.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSmtp=function(){u.errors=[],l.mailAccount.update({id:u.smtp.id},u.smtp).$promise.then(function(e){var t=_.find(u.smtps,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Smtp properly saved!",msg:u.smtp.name?u.smtp.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSmtp=function(e){u.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(){l.mailAccount.delete({id:u.smtp.id}).$promise.then(function(){_.remove(u.smtps,{id:u.smtp.id}),o.success({title:"Smtp properly deleted!",msg:(u.smtp.name||"smtp")+" has been deleted!"}),p(u.smtp)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","smtps","smtp","api","Auth","license","setting"],angular.module("app.settings").controller("CreateOrEditSmtpDialogController",e)}(),function(){"use strict";function e(e,t,n){var a=this;a.smtps=e,a.smtp={},a.smtps&&a.smtps.rows&&a.smtps.rows.length?a.smtp=a.smtps.rows[0]:a.smtp={service:!0,Smtp:{service:null}},a.saveSmtp=function(){a.smtp.id?t.mailAccount.update({id:a.smtp.id},a.smtp).$promise.then(function(){n.success({title:"Smtp updated!",msg:a.smtp.name?a.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(a.smtp).$promise.then(function(e){_.merge(a.smtp,e),n.success({title:"Smtp updated!",msg:a.smtp.name?a.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()})})},a.verifySmtp=function(){a.smtp.id&&t.mailAccount.verifySmtp({id:a.smtp.id}).$promise.then(function(){n.success({title:"Smtp verified!",msg:a.smtp.name?a.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"],angular.module("app.settings").controller("SmtpController",e)}(),function(){"use strict";function e(e,i,o,t,n,a,s,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=o.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");o.show(a).then(function(){return r.pm2.update({id:t,status:n})}).then(function(){i(d.getProcesses,1e3,1)}).then(function(){s.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 o=this;o.title="SETTINGS.UPDATE",o.progress=0,o.updating=!0,o.output="Waiting...",o.success=!0,o.interval=t(function(){o.progress<90&&(o.progress+=1)},1e3),o.closeDialog=function(){e.hide()},o.reload=function(){n.location.reload()},o.stopInterval=function(){angular.isDefined(o.interval)&&(t.cancel(o.interval),o.interval=void 0);o.progress=100,o.updating=!1},i.version.fetch().$promise.then(function(e){return o.output=e.output+"...",i.version.reset().$promise}).then(function(e){return o.output=e.output+"...",i.version.pull().$promise}).then(function(e){return o.output=e.output+"...",i.version.migrations().$promise}).then(function(e){return o.output=e.output+"...",i.version.restart().$promise}).then(function(e){o.output="Waiting to restart motion...",a(function(){o.stopInterval()},3e4)}).catch(function(e){o.success=!1,o.stopInterval(),o.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,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsSmsRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.smsQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].SmsQueueId].paused++,u.queues[e[t].rows[n].SmsQueueId].loggedInDb++,u.queues[e[t].rows[n].SmsQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].SmsQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"sms",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.smsQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!1}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onSaveMember=function(e){u.queues[e.SmsQueueId]&&u.queues[e.SmsQueueId].loggedInDb++},u.onRemoveMember=function(e){u.queues[e.SmsQueueId]&&u.queues[e.SmsQueueId].loggedInDb--},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.SmsQueueId]&&(u.queues[e.SmsQueueId].loggedInDb+=1,u.queues[e.SmsQueueId].agents[e.UserId]=e.SmsQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.SmsQueueId]&&0<u.queues[e.SmsQueueId].loggedInDb&&(u.queues[e.SmsQueueId].loggedInDb-=1,delete u.queues[e.SmsQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.on("sms_queue:save",u.onSave),d.on("userSmsQueue:save",u.onSaveMember),d.on("userSmsQueue:remove",u.onRemoveMember),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.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","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,o,i,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SMS.EDIT_SMSACCOUNT",u.smsAccount=angular.copy(r),u.smsAccounts=s,u.newSmsAccount=!1,u.smsAccount||(u.smsAccount={remote:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():""),type:"twilio",waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},u.title="SMS.NEW_SMSACCOUNT",u.newSmsAccount=!0),t.params.id&&(u.smsAccount.SmsAccountId=t.params.id),u.addNewSmsAccount=function(){u.errors=[],l.smsAccount.save(u.smsAccount).$promise.then(function(e){var t="add"+_.upperFirst("smsAccount")+"s";return l.user[t]({id:d.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){u.smsAccounts.unshift(e.toJSON()),i.success({title:"SmsAccount properly created",msg:u.smsAccount.name?u.smsAccount.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.save"}];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.smsAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveSmsAccount=function(){u.errors=[],l.smsAccount.update({id:u.smsAccount.id},u.smsAccount).$promise.then(function(e){var t=_.find(u.smsAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),i.success({title:"SmsAccount properly saved!",msg:u.smsAccount.name?u.smsAccount.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.update"}];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.smsAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteSmsAccount=function(e){u.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(){l.smsAccount.delete({id:u.smsAccount.id}).$promise.then(function(){return l.smsAccount.getAgents({id:u.smsAccount.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a="remove"+_.upperFirst("smsAccount")+"s",i=0;i<n.length;i++)t.push(l.user[a]({id:d.getCurrentUser().id,ids:[u.smsAccount.id]}).$promise);return o.all(t)}).then(function(){_.remove(u.smsAccounts,{id:u.smsAccount.id}),i.success({title:"SmsAccount properly deleted!",msg:(u.smsAccount.name||"smsAccount")+" has been deleted!"}),p(u.smsAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.delete"}];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.smsAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){i.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","toasty","smsAccounts","smsAccount","api","Auth","license","setting"],angular.module("app.sms").controller("CreateOrEditSmsAccountDialogController",e)}(),function(){"use strict";function e(s,i,a,o,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}}).then(function(e){e&&(e.id?r.smsAccountApps.rows[t]=e:r.smsAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&o.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=[],o=[];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=(o.length?_.last(o).priority:a.priority)+1,t=_.concat(t,i,[a],o)}s.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.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",route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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",route:"smsQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"user",filters:{fields:"id,name",sort:"name",nolimit:!0,role:"agent"}}],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",maxlength:255,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",route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0}}],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){r.smsAccount=e,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=s.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:[]}}).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(),o.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 s.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,n,a,t,i,o,s,r){var l=this;function d(){return a.smsAccount[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.smsAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserSmsAccount?"penalty "+e.UserSmsAccount.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserSmsAccount?"penalty "+e.UserSmsAccount.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.smsAccount=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("SMS.ALL_AGENTS"),labelSelected:s.instant("SMS.SELECTED_AGENTS"),transferCallback:function(e,t){a.smsAccount[t?"removeAgents":"addAgents"]({id:l.smsAccount.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"SmsAccount properly "+(t?"removed":"added"),msg:"SmsAccount has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:smsAccount.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","smsAccount","smsAccounts","realtime","$translate","Auth"],angular.module("app.sms").controller("SmsAccountagentaddController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(e.appType||e.app).toUpperCase(),o.agent=angular.copy(e),o.agent.appdata)switch(o.agent.appType?o.agent.appType.toLowerCase():o.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agent.appdata.split(",");o.agent.key=s[0],o.agent.language=s[1],o.agent.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agent.appdata.split(",");o.agent.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agent.text=s.slice(1,s.length).join(",");break;case"message":o.agent.text=o.agent.appdata;break;case"set":o.agent.name=o.agent.appdata.split("=")[0],o.agent.value=o.agent.appdata.split("=")[1];break;case"agi":o.agent.project=o.agent.appdata;break;default:var r=o.agent.appdata.split(",");o.agent.agent=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.agent.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.agent.timeout=30;function l(e){t.hide(e)}o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outbounddial"===o.agent.appType.toLowerCase()&&(o.agent.prefix=o.agent.phone?o.agent.phone.split("$")[0]:void 0,o.agent.callerId=o.agent.callerID?"CALLERID(all)="+o.agent.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.agent.type&&"outbound"===o.agent.type.toLowerCase()&&"outboundDial"===o.agent.appType&&(o.agent.phone=a.cutdigits?(o.agent.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agent.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agent.options+="U(xcally-mixmonitor-context)"):o.agent.options=o.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.agents,{name:o.agent.agent});t&&(o.agent.UserId=t.id);if(o.agent.appType&&"custom"===o.agent.appType);else switch((o.agent.app||o.agent.appType).toLowerCase()){case"set":o.agent.appdata=o.agent.name+"="+o.agent.value;break;case"custom":break;default:e[0]=o.agent.agent,e[1]=o.agent.timeout,o.agent.appdata=e.join(",")}l(o.agent)},o.closeDialog=l,i.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){o.agents=e.rows||[]}).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","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(n.appType||n.app).toUpperCase(),o.autoreply=angular.copy(n),o.autoreply.appdata)switch(o.autoreply.appType?o.autoreply.appType.toLowerCase():o.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.autoreply.appdata.split(",");o.autoreply.key=s[0],o.autoreply.language=s[1],o.autoreply.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.autoreply.appdata.split(",");o.autoreply.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.autoreply.text=s.slice(1,s.length).join(",");break;case"message":o.autoreply.text=o.autoreply.appdata;break;case"set":o.autoreply.name=o.autoreply.appdata.split("=")[0],o.autoreply.value=o.autoreply.appdata.split("=")[1];break;case"agi":o.autoreply.project=o.autoreply.appdata;break;default:var r=o.autoreply.appdata.split(",");o.autoreply.times=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.autoreply.text=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.autoreply.times=1;function l(e){t.hide(e)}o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outbounddial"===o.autoreply.appType.toLowerCase()&&(o.autoreply.prefix=o.autoreply.phone?o.autoreply.phone.split("$")[0]:void 0,o.autoreply.callerId=o.autoreply.callerID?"CALLERID(all)="+o.autoreply.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.autoreply.type&&"outbound"===o.autoreply.type.toLowerCase()&&"outboundDial"===o.autoreply.appType&&(o.autoreply.phone=a.cutdigits?(o.autoreply.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.autoreply.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.autoreply.options+="U(xcally-mixmonitor-context)"):o.autoreply.options=o.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(o.autoreply.appType&&"custom"===o.autoreply.appType);else switch((o.autoreply.app||o.autoreply.appType).toLowerCase()){case"set":o.autoreply.appdata=o.autoreply.name+"="+o.autoreply.value;break;case"custom":break;default:e[0]=o.autoreply.times,e[1]=o.autoreply.text,o.autoreply.appdata=e.join(",")}l(o.autoreply)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(n.appType||n.app).toUpperCase(),o.close=angular.copy(n),o.close.appdata)switch(o.close.appType?o.close.appType.toLowerCase():o.close.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.close.appdata.split(",");o.close.key=s[0],o.close.language=s[1],o.close.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.close.appdata.split(",");o.close.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.close.text=s.slice(1,s.length).join(",");break;case"message":o.close.text=o.close.appdata;break;case"set":o.close.name=o.close.appdata.split("=")[0],o.close.value=o.close.appdata.split("=")[1];break;case"agi":o.close.project=o.close.appdata;break;default:var r=o.close.appdata.split(",");o.close.disposition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outbounddial"===o.close.appType.toLowerCase()&&(o.close.prefix=o.close.phone?o.close.phone.split("$")[0]:void 0,o.close.callerId=o.close.callerID?"CALLERID(all)="+o.close.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.close.type&&"outbound"===o.close.type.toLowerCase()&&"outboundDial"===o.close.appType&&(o.close.phone=a.cutdigits?(o.close.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.close.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.close.options+="U(xcally-mixmonitor-context)"):o.close.options=o.close.options.replace("U(xcally-mixmonitor-context)",""));if(o.close.appType&&"custom"===o.close.appType);else switch((o.close.app||o.close.appType).toLowerCase()){case"set":o.close.appdata=o.close.name+"="+o.close.value;break;case"custom":break;default:e[0]=o.close.disposition,o.close.appdata=e.join(",")}l(o.close)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotoif=angular.copy(n),o.gotoif.appdata)switch(o.gotoif.appType?o.gotoif.appType.toLowerCase():o.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotoif.appdata.split(",");o.gotoif.key=s[0],o.gotoif.language=s[1],o.gotoif.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotoif.appdata.split(",");o.gotoif.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotoif.text=s.slice(1,s.length).join(",");break;case"message":o.gotoif.text=o.gotoif.appdata;break;case"set":o.gotoif.name=o.gotoif.appdata.split("=")[0],o.gotoif.value=o.gotoif.appdata.split("=")[1];break;case"agi":o.gotoif.project=o.gotoif.appdata;break;default:var r=o.gotoif.appdata.split(",");o.gotoif.condition=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.gotoif.truepriority=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.gotoif.falsepriority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outbounddial"===o.gotoif.appType.toLowerCase()&&(o.gotoif.prefix=o.gotoif.phone?o.gotoif.phone.split("$")[0]:void 0,o.gotoif.callerId=o.gotoif.callerID?"CALLERID(all)="+o.gotoif.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.gotoif.type&&"outbound"===o.gotoif.type.toLowerCase()&&"outboundDial"===o.gotoif.appType&&(o.gotoif.phone=a.cutdigits?(o.gotoif.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotoif.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotoif.options+="U(xcally-mixmonitor-context)"):o.gotoif.options=o.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotoif.appType&&"custom"===o.gotoif.appType);else switch((o.gotoif.app||o.gotoif.appType).toLowerCase()){case"set":o.gotoif.appdata=o.gotoif.name+"="+o.gotoif.value;break;case"custom":break;default:e[0]=o.gotoif.condition,e[1]=o.gotoif.truepriority,e[2]=o.gotoif.falsepriority,o.gotoif.appdata=e.join(",")}l(o.gotoif)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(n.appType||n.app).toUpperCase(),o.gotop=angular.copy(n),o.gotop.appdata)switch(o.gotop.appType?o.gotop.appType.toLowerCase():o.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.gotop.appdata.split(",");o.gotop.key=s[0],o.gotop.language=s[1],o.gotop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.gotop.appdata.split(",");o.gotop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.gotop.text=s.slice(1,s.length).join(",");break;case"message":o.gotop.text=o.gotop.appdata;break;case"set":o.gotop.name=o.gotop.appdata.split("=")[0],o.gotop.value=o.gotop.appdata.split("=")[1];break;case"agi":o.gotop.project=o.gotop.appdata;break;default:var r=o.gotop.appdata.split(",");o.gotop.priority=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outbounddial"===o.gotop.appType.toLowerCase()&&(o.gotop.prefix=o.gotop.phone?o.gotop.phone.split("$")[0]:void 0,o.gotop.callerId=o.gotop.callerID?"CALLERID(all)="+o.gotop.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.gotop.type&&"outbound"===o.gotop.type.toLowerCase()&&"outboundDial"===o.gotop.appType&&(o.gotop.phone=a.cutdigits?(o.gotop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.gotop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.gotop.options+="U(xcally-mixmonitor-context)"):o.gotop.options=o.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(o.gotop.appType&&"custom"===o.gotop.appType);else switch((o.gotop.app||o.gotop.appType).toLowerCase()){case"set":o.gotop.appdata=o.gotop.name+"="+o.gotop.value;break;case"custom":break;default:e[0]=o.gotop.priority,o.gotop.appdata=e.join(",")}l(o.gotop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditSmsAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(n.appType||n.app).toUpperCase(),o.noop=angular.copy(n),o.noop.appdata)switch(o.noop.appType?o.noop.appType.toLowerCase():o.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.noop.appdata.split(",");o.noop.key=s[0],o.noop.language=s[1],o.noop.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.noop.appdata.split(",");o.noop.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.noop.text=s.slice(1,s.length).join(",");break;case"message":o.noop.text=o.noop.appdata;break;case"set":o.noop.name=o.noop.appdata.split("=")[0],o.noop.value=o.noop.appdata.split("=")[1];break;case"agi":o.noop.project=o.noop.appdata;break;default:var r=o.noop.appdata.split(",");o.noop.value=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outbounddial"===o.noop.appType.toLowerCase()&&(o.noop.prefix=o.noop.phone?o.noop.phone.split("$")[0]:void 0,o.noop.callerId=o.noop.callerID?"CALLERID(all)="+o.noop.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.noop.type&&"outbound"===o.noop.type.toLowerCase()&&"outboundDial"===o.noop.appType&&(o.noop.phone=a.cutdigits?(o.noop.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.noop.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.noop.options+="U(xcally-mixmonitor-context)"):o.noop.options=o.noop.options.replace("U(xcally-mixmonitor-context)",""));if(o.noop.appType&&"custom"===o.noop.appType);else switch((o.noop.app||o.noop.appType).toLowerCase()){case"set":o.noop.appdata=o.noop.name+"="+o.noop.value;break;case"custom":break;default:e[0]=o.noop.value,o.noop.appdata=e.join(",")}l(o.noop)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.queue.queue=300,o.queue.timeout=300;function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.queues,{name:o.queue.queue});t&&(o.queue[_.capitalize("sms")+"QueueId"]=t.id);if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.timeout,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.smsQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(e.appType||e.app).toUpperCase(),o.system=angular.copy(e),o.system.appdata)switch(o.system.appType?o.system.appType.toLowerCase():o.system.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.system.appdata.split(",");o.system.key=s[0],o.system.language=s[1],o.system.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.system.appdata.split(",");o.system.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.system.text=s.slice(1,s.length).join(",");break;case"message":o.system.text=o.system.appdata;break;case"set":o.system.name=o.system.appdata.split("=")[0],o.system.value=o.system.appdata.split("=")[1];break;case"agi":o.system.project=o.system.appdata;break;default:var r=o.system.appdata.split(",");o.system.command=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.system.variable=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}else o.system.variable="";function l(e){t.hide(e)}o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outbounddial"===o.system.appType.toLowerCase()&&(o.system.prefix=o.system.phone?o.system.phone.split("$")[0]:void 0,o.system.callerId=o.system.callerID?"CALLERID(all)="+o.system.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.system.type&&"outbound"===o.system.type.toLowerCase()&&"outboundDial"===o.system.appType&&(o.system.phone=a.cutdigits?(o.system.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.system.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.system.options+="U(xcally-mixmonitor-context)"):o.system.options=o.system.options.replace("U(xcally-mixmonitor-context)",""));if(o.system.appType&&"custom"===o.system.appType);else switch((o.system.app||o.system.appType).toLowerCase()){case"set":o.system.appdata=o.system.name+"="+o.system.value;break;case"custom":break;default:e[0]=o.system.command,e[1]=o.system.variable,o.system.appdata=e.join(",")}l(o.system)},o.closeDialog=l,i.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="SMS.EDIT_"+(e.appType||e.app).toUpperCase(),o.tag=angular.copy(e),o.tag.appdata)switch(o.tag.appType?o.tag.appType.toLowerCase():o.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.tag.appdata.split(",");o.tag.key=s[0],o.tag.language=s[1],o.tag.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.tag.appdata.split(",");o.tag.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.tag.text=s.slice(1,s.length).join(",");break;case"message":o.tag.text=o.tag.appdata;break;case"set":o.tag.name=o.tag.appdata.split("=")[0],o.tag.value=o.tag.appdata.split("=")[1];break;case"agi":o.tag.project=o.tag.appdata;break;default:var r=o.tag.appdata.split(",");o.tag.tag=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outbounddial"===o.tag.appType.toLowerCase()&&(o.tag.prefix=o.tag.phone?o.tag.phone.split("$")[0]:void 0,o.tag.callerId=o.tag.callerID?"CALLERID(all)="+o.tag.callerID:void 0),o.saveSmsAccountApp=function(){o.errors=[];var e=[];o.tag.type&&"outbound"===o.tag.type.toLowerCase()&&"outboundDial"===o.tag.appType&&(o.tag.phone=a.cutdigits?(o.tag.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.tag.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.tag.options+="U(xcally-mixmonitor-context)"):o.tag.options=o.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(o.tags,{name:o.tag.tag});t&&(o.tag.TagId=t.id);if(o.tag.appType&&"custom"===o.tag.appType);else switch((o.tag.app||o.tag.appType).toLowerCase()){case"set":o.tag.appdata=o.tag.name+"="+o.tag.value;break;case"custom":break;default:e[0]=o.tag.tag,o.tag.appdata=e.join(",")}l(o.tag)},o.closeDialog=l,i.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","smsAccountApp","smsAccount","api"],angular.module("app.sms").controller("EditSmsAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountInteractions={count:0,rows:[]},c.selectedSmsAccountInteractions=[],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){c.smsAccount=e,c.query.id=c.smsAccount.id,c.getSmsAccountInteractions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},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){o.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/interactions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,interaction:t,interactions:c.smsAccountInteractions.rows,license:null,setting:null}})},c.spysmsInteraction=function(e,n){o.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(s.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=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountSmsCannedAnswers={count:0,rows:[]},c.selectedSmsAccountSmsCannedAnswers=[],c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e){c.smsAccount=e,c.query.id=c.smsAccount.id,c.query.SmsAccountId=c.smsAccount.id,c.getSmsAccountSmsCannedAnswers()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditSmsCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/smsCannedAnswers/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,smsCannedAnswer:t,smsCannedAnswers:c.smsAccountSmsCannedAnswers.rows,license:null,setting:null}})},c.exportSelectedSmsAccountSmsCannedAnswers=function(){var e=angular.copy(c.selectedSmsAccountSmsCannedAnswers);return c.selectedSmsAccountSmsCannedAnswers=[],e},c.deleteSmsAccountSmsCannedAnswer=g,c.deleteSelectedSmsAccountSmsCannedAnswers=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SMS.EDIT_SMSCANNEDANSWER",u.smsCannedAnswer=angular.copy(r),u.smsCannedAnswers=s,u.newSmsCannedAnswer=!1,u.smsCannedAnswer||(u.smsCannedAnswer={},u.title="SMS.NEW_SMSCANNEDANSWER",u.newSmsCannedAnswer=!0),t.params.id&&(u.smsCannedAnswer.SmsAccountId=t.params.id),u.addNewSmsCannedAnswer=function(){u.errors=[],l.cannedAnswer.save(u.smsCannedAnswer).$promise.then(function(e){u.smsCannedAnswers.unshift(e.toJSON()),o.success({title:"SmsCannedAnswer properly created",msg:u.smsCannedAnswer.name?u.smsCannedAnswer.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSmsCannedAnswer=function(){u.errors=[],l.cannedAnswer.update({id:u.smsCannedAnswer.id},u.smsCannedAnswer).$promise.then(function(e){var t=_.find(u.smsCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsCannedAnswer properly saved!",msg:u.smsCannedAnswer.name?u.smsCannedAnswer.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSmsCannedAnswer=function(e){u.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(){l.cannedAnswer.delete({id:u.smsCannedAnswer.id}).$promise.then(function(){_.remove(u.smsCannedAnswers,{id:u.smsCannedAnswer.id}),o.success({title:"SmsCannedAnswer properly deleted!",msg:(u.smsCannedAnswer.name||"smsCannedAnswer")+" has been deleted!"}),p(u.smsCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","smsCannedAnswers","smsCannedAnswer","api","Auth","license","setting"],angular.module("app.sms").controller("CreateOrEditSmsCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountSmsDispositions={count:0,rows:[]},c.selectedSmsAccountSmsDispositions=[],c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e){c.smsAccount=e,c.query.id=c.smsAccount.id,c.query.SmsAccountId=c.smsAccount.id,c.getSmsAccountSmsDispositions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditSmsDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/smsDispositions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,smsDisposition:t,smsDispositions:c.smsAccountSmsDispositions.rows,license:null,setting:null}})},c.exportSelectedSmsAccountSmsDispositions=function(){var e=angular.copy(c.selectedSmsAccountSmsDispositions);return c.selectedSmsAccountSmsDispositions=[],e},c.deleteSmsAccountSmsDisposition=g,c.deleteSelectedSmsAccountSmsDispositions=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SMS.EDIT_SMSDISPOSITION",u.smsDisposition=angular.copy(r),u.smsDispositions=s,u.newSmsDisposition=!1,u.smsDisposition||(u.smsDisposition={},u.title="SMS.NEW_SMSDISPOSITION",u.newSmsDisposition=!0),t.params.id&&(u.smsDisposition.SmsAccountId=t.params.id),u.addNewSmsDisposition=function(){u.errors=[],l.disposition.save(u.smsDisposition).$promise.then(function(e){u.smsDispositions.unshift(e.toJSON()),o.success({title:"SmsDisposition properly created",msg:u.smsDisposition.name?u.smsDisposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSmsDisposition=function(){u.errors=[],l.disposition.update({id:u.smsDisposition.id},u.smsDisposition).$promise.then(function(e){var t=_.find(u.smsDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsDisposition properly saved!",msg:u.smsDisposition.name?u.smsDisposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSmsDisposition=function(e){u.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(){l.disposition.delete({id:u.smsDisposition.id}).$promise.then(function(){_.remove(u.smsDispositions,{id:u.smsDisposition.id}),o.success({title:"SmsDisposition properly deleted!",msg:(u.smsDisposition.name||"smsDisposition")+" has been deleted!"}),p(u.smsDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","smsDispositions","smsDisposition","api","Auth","license","setting"],angular.module("app.sms").controller("CreateOrEditSmsDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.smsAccount=d||e.params.smsAccount||{},c.selectedTab=e.params.tab||0,c.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:c.smsAccounts?c.smsAccounts.rows:[],realtime:!1}})},c.alert=r.info,c.gotoSmsAccounts=function(){e.go("app.sms.smsAccounts")},c.saveSmsAccount=function(){s.smsAccount.update({id:c.smsAccount.id},c.smsAccount).$promise.then(function(){r.success({title:"SmsAccount updated!",msg:c.smsAccount.name?c.smsAccount.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","license","setting","api","toasty","Auth","smsAccount"],angular.module("app.sms").controller("SmsAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.smsAccounts=r||{count:0,rows:[]},v.table="smsAccounts",v.listOrder="",v.listOrderAsc=null,v.selectedSmsAccounts=[],v.query={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,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},v.arraytype=_.keyBy([{option:"Twilio",value:"'twilio'"},{option:"Skebby",value:"'skebby'"},{option:"Connectel",value:"'connectel'"},{option:"ClickSend",value:"'clicksend'"},{option:"Plivo",value:"'plivo'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysmsMethod=_.keyBy([{option:"Basic",value:"'basic'"},{option:"Classic",value:"'classic'"},{option:"Classic+",value:"'classic+'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.sms.smsAccounts.edit",{id:e.id,smsAccount:e})},v.interactionsgoto=function(e,t){n.go("app.sms.smsAccounts.edit",{id:e.id,tab:5})},v.agentadddialog=function(e,t){i.show({controller:"SmsAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsAccount:e,smsAccounts:v.smsAccounts?v.smsAccounts.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the smsAccount?").htmlContent("<b>"+(e.name||"smsAccount")+"</b> will be deleted.").ariaLabel("delete smsAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getSmsAccounts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.smsAccount.get(v.query,f).$promise},v.createOrEditSmsAccount=function(e,t){i.show({controller:"CreateOrEditSmsAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:t,smsAccounts:v.smsAccounts.rows,license:v.license,setting:v.setting}})},v.deleteSmsAccount=A,v.exportSelectedSmsAccounts=function(){var e=angular.copy(v.selectedSmsAccounts);return v.selectedSmsAccounts=[],e},v.deleteSelectedSmsAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected smsAccounts?").htmlContent("<b>"+v.selectedSmsAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SmsAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSmsAccounts.forEach(function(e){A(e)}),v.selectedSmsAccounts=[]})},v.deselectSmsAccounts=function(){v.selectedSmsAccounts=[]},v.selectAllSmsAccounts=function(){v.selectedSmsAccounts=v.smsAccounts.rows},l.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.smsAccounts=e||{count:0,rows:[]}}function A(e){l.smsAccount.delete({id:e.id}).$promise.then(function(){_.remove(v.smsAccounts.rows,{id:e.id}),v.smsAccounts.count-=1,v.smsAccounts.rows.length||v.getSmsAccounts(),c.success({title:"SmsAccount deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsmsAccount"}];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:"SYSTEM:DELETEsmsAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSmsAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","smsAccounts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.sms").controller("SmsAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="SMS.EDIT_SMSQUEUE",u.smsQueue=angular.copy(r),u.smsQueues=s,u.newSmsQueue=!1,u.smsQueue||(u.smsQueue={strategy:"beepall",timeout:10},u.title="SMS.NEW_SMSQUEUE",u.newSmsQueue=!0),u.addNewSmsQueue=function(){u.errors=[],l.smsQueue.save(u.smsQueue).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"sms",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.smsQueues.unshift(e.toJSON()),o.success({title:"SmsQueue properly created",msg:u.smsQueue.name?u.smsQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSmsQueue=function(){u.errors=[],l.smsQueue.update({id:u.smsQueue.id},u.smsQueue).$promise.then(function(e){var t=_.find(u.smsQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsQueue properly saved!",msg:u.smsQueue.name?u.smsQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSmsQueue=function(e){u.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(){l.smsQueue.delete({id:u.smsQueue.id}).$promise.then(function(){return l.smsQueue.getAgents({id:u.smsQueue.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.smsQueue.id],channel:"sms",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.smsQueues,{id:u.smsQueue.id}),o.success({title:"SmsQueue properly deleted!",msg:(u.smsQueue.name||"smsQueue")+" has been deleted!"}),p(u.smsQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","smsQueues","smsQueue","api","Auth","license","setting"],angular.module("app.sms").controller("CreateOrEditSmsQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.smsQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.smsQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserSmsQueue?"penalty "+e.UserSmsQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserSmsQueue?"penalty "+e.UserSmsQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.smsQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("SMS.ALL_AGENTS"),labelSelected:s.instant("SMS.SELECTED_AGENTS"),transferCallback:function(e,t){a.smsQueue[t?"removeAgents":"addAgents"]({id:l.smsQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"SmsQueue properly "+(t?"removed":"added"),msg:"SmsQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:smsQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","smsQueue","smsQueues","realtime","$translate","Auth"],angular.module("app.sms").controller("SmsQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.smsQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("SMS.ALL_TEAMS"),labelSelected:i.instant("SMS.SELECTED_TEAMS"),transferCallback:function(e,t){a.smsQueue[t?"removeTeams":"addTeams"]({id:o.smsQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:smsQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.smsQueue.getTeams({id:o.smsQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","smsQueue","$translate"],angular.module("app.sms").controller("SmsQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.smsQueue=d||e.params.smsQueue||{},c.selectedTab=e.params.tab||0,c.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:c.smsQueues?c.smsQueues.rows:[]}})},c.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:c.smsQueues?c.smsQueues.rows:[],realtime:!1}})},c.alert=r.info,c.gotoSmsQueues=function(){e.go("app.sms.smsQueues")},c.saveSmsQueue=function(){s.smsQueue.update({id:c.smsQueue.id},c.smsQueue).$promise.then(function(){r.success({title:"SmsQueue updated!",msg:c.smsQueue.name?c.smsQueue.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","smsQueue"],angular.module("app.sms").controller("SmsQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.smsQueues=r||{count:0,rows:[]},v.table="smsQueues",v.listOrder="",v.listOrderAsc=null,v.selectedSmsQueues=[],v.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"sms",limit:10,page:1},v.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.sms.smsQueues.edit",{id:e.id,smsQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"SmsQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:v.smsQueues?v.smsQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"SmsQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:v.smsQueues?v.smsQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the smsQueue?").htmlContent("<b>"+(e.name||"smsQueue")+"</b> will be deleted.").ariaLabel("delete smsQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.sms.realtime.queues",{})},v.success=f,v.getSmsQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.smsQueue.get(v.query,f).$promise},v.createOrEditSmsQueue=function(e,t){i.show({controller:"CreateOrEditSmsQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsQueue:t,smsQueues:v.smsQueues.rows,license:v.license,setting:v.setting}})},v.deleteSmsQueue=A,v.exportSelectedSmsQueues=function(){var e=angular.copy(v.selectedSmsQueues);return v.selectedSmsQueues=[],e},v.deleteSelectedSmsQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected smsQueues?").htmlContent("<b>"+v.selectedSmsQueues.length+" selected</b> will be deleted.").ariaLabel("delete SmsQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSmsQueues.forEach(function(e){A(e)}),v.selectedSmsQueues=[]})},v.deselectSmsQueues=function(){v.selectedSmsQueues=[]},v.selectAllSmsQueues=function(){v.selectedSmsQueues=v.smsQueues.rows};var h=!0,b=1;function f(e){v.smsQueues=e||{count:0,rows:[]}}function A(e){l.smsQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.smsQueues.rows,{id:e.id}),v.smsQueues.count-=1,v.smsQueues.rows.length||v.getSmsQueues(),c.success({title:"SmsQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsmsQueue"}];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:"SYSTEM:DELETEsmsQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSmsQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","smsQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.sms").controller("SmsQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.agents=r||{count:0,rows:[]},v.table="agents",v.listOrder="",v.listOrderAsc=null,v.selectedAgents=[],v.query={fields:"createdAt,updatedAt,id,role,fullname,name,alias,email,phone,mobile,userpic,password,showWebBar,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,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},v.arrayshowWebBar=_.keyBy([{option:"Phonebar",value:"0"},{option:"External",value:"1"},{option:"WebRTC",value:"2"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.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"),"")}),v.arraytype=_.keyBy([{option:"Friend",value:"'friend'"},{option:"User",value:"'user'"},{option:"Peer",value:"'peer'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.editstate=function(e,t){n.go("app.staff.agents.edit",{id:e.id,agent:e})},v.teamadddialog=function(e,t){i.show({controller:"AgentteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:v.agents?v.agents.rows:[]}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the agent?").htmlContent("<b>"+(e.name||"agent")+"</b> will be deleted.").ariaLabel("delete agent").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getAgents=function(){v.query.offset=(v.query.page-1)*v.query.limit,m.hasRole("admin")?v.promise=l.user.get(v.query,f).$promise:(v.query.id=v.currentUser.id,v.promise=l.user.getAgents(v.query,f).$promise)},v.createOrEditAgent=function(e,t){i.show({controller:"CreateOrEditAgentDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{agent:t,agents:v.agents.rows,license:v.license,setting:v.setting}})},v.deleteAgent=A,v.exportSelectedAgents=function(){var e=angular.copy(v.selectedAgents);return v.selectedAgents=[],e},v.deleteSelectedAgents=function(e){var t=i.confirm().title("Are you sure want to delete the selected agents?").htmlContent("<b>"+v.selectedAgents.length+" selected</b> will be deleted.").ariaLabel("delete Agents").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedAgents.forEach(function(e){A(e)}),v.selectedAgents=[]})},v.deselectAgents=function(){v.selectedAgents=[]},v.selectAllAgents=function(){v.selectedAgents=v.agents.rows};var h=!0,b=1;function f(e){v.agents=e||{count:0,rows:[]}}function A(e){l.user.delete({id:e.id}).$promise.then(function(){_.remove(v.agents.rows,{id:e.id}),v.agents.count-=1,v.agents.rows.length||v.getAgents(),c.success({title:"Agent deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];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:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getAgents())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","agents","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("AgentsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="STAFF.EDIT_AGENT",u.agent=angular.copy(r),u.agents=s,u.newAgent=!1,u.agent||(u.agent={role:"agent",showWebBar:"0",autointernal:!0,type:"friend",context:"from-sip",phoneBarRemoteControl:!0,phoneBarRemoteControlPort:9888,allowmessenger:!0},u.title="STAFF.NEW_AGENT",u.newAgent=!0),u.addNewAgent=function(){u.errors=[],l.user.save(u.agent).$promise.then(function(e){u.agents.unshift(e.toJSON()),o.success({title:"Agent properly created",msg:u.agent.name?u.agent.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveAgent=function(){u.errors=[],l.user.update({id:u.agent.id},u.agent).$promise.then(function(e){var t=_.find(u.agents,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Agent properly saved!",msg:u.agent.name?u.agent.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteAgent=function(e){u.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(){l.user.delete({id:u.agent.id}).$promise.then(function(){_.remove(u.agents,{id:u.agent.id}),o.success({title:"Agent properly deleted!",msg:(u.agent.name||"agent")+" has been deleted!"}),p(u.agent)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","agents","agent","api","Auth","license","setting"],angular.module("app.staff").controller("CreateOrEditAgentDialogController",e)}(),function(){"use strict";function e(e,a){var i=this;i.agent={},i.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.agent=angular.copy(e),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,o){var s=this;function r(){e.hide()}s.currentUser=o.getCurrentUser(),s.errors=[],s.setting=i,s.passwordPattern=s.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",s.agent=a,s.password="",s.oldPassword="",s.savePassword=function(){s.errors=[];var e={id:s.agent.id,newPassword:s.password};s.currentUser.id==s.agent.id&&(e.oldPassword=s.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()}),s.errors=e.data.errors||[{message:e.toString(),type:"api.agent.changePassword"}]})},s.closeDialog=r}e.$inject=["$mdDialog","toasty","api","agent","setting","Auth"],angular.module("app.staff").controller("AgentchangepasswordController",e)}(),function(){"use strict";function e(n,a,i,e,t,o){var s=this;s.agent={},s.navigation=t.getNavigation(),s.init=function(e){s.agent=e},s.onChange=function(t,n){if((n||t).enabled){if(n)n.enabled=!0,s.agent.permissions.push(n.id);else for(var e=0;e<t.children.length;e++)t.children[e].enabled=!0,s.agent.permissions.push(t.children[e].id);t.enabled=!0,s.agent.permissions.push(t.id)}else if(n)n.enabled=!1,_.remove(s.agent.permissions,function(e){return n.id===e}),_.filter(t.children,{enabled:!1}).length===t.children.length&&(t.enabled=!1,_.remove(s.agent.permissions,function(e){return t.id===e}));else{t.enabled=!1,_.remove(s.agent.permissions,function(e){return t.id===e});for(var a=0;a<t.children.length;a++)t.children[a].enabled=!1,_.remove(s.agent.permissions,function(e){return t.children[a].id===e})}return i.user.update({id:s.agent.id,permissions:_.uniq(s.agent.permissions)}).$promise.then(function(){o.success({title:"agent updated!",msg:s.agent.name?s.agent.name+" has been updated!":""})}).catch(function(e){console.error(e)})},s.addPermissions=function(e,t){a.show({controller:"UserpermissionaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/edit/permissionadd/permissionadd.html",parent:angular.element(n.body),targetEvent:t,clickOutsideToClose:!0,locals:{user:s.user,users:[],section:e}})},s.allowPermissions=function(e){if(e&&-1!==[401,501,502,601,602,701,702,801,802,901,902,1103,1501].indexOf(e.id))return!0;return!1}}e.$inject=["$document","$mdDialog","api","msNavigationService","msNavigationAgentService","toasty"],angular.module("app.staff").controller("AgentPermissionsController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l){var d=this;function c(){a.user[d.isVoiceRealtime()?"getVoiceQueuesRt":"getQueues"]({id:d.agent.id,fields:d.isVoiceRealtime()?"VoiceQueueId,queue_name,penalty":"id,name,strategy,type",channel:i,nolimit:!0}).$promise.then(function(e){return d.isVoiceRealtime()?d.selectedItems=e.rows?_.map(e.rows,function(e){return{id:e.VoiceQueueId,name:e.queue_name,penalty:e.hasOwnProperty("penalty")?"penalty "+e.penalty:"penalty 0",strategy:""}}):[]:d.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",e}):[],l.hasRole("admin")?a[d.apiname].get({fields:"id,name,strategy,type",nolimit:!0,type:s}).$promise:a.user.getQueues({id:l.getCurrentUser().id,fields:"id,name,strategy,type",nolimit:!0,type:s,channel:i}).$promise}).then(function(e){d.items=e.rows?e.rows:[],d.selectedItems=_.intersectionBy(d.selectedItems,d.items,"id"),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.items,d.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETQUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})}d.agent=t,d.penalty=0,d.apiname=i+"Queue",d.title=r.instant("STAFF.QUEUEADD_AGENT_"+i.toUpperCase()+"_"+s.toUpperCase()),d.items=[],d.selectedItems=[],d.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"name",line2:"type",line3:"agent"===d.agent.role?"penalty":"",labelAll:r.instant("STAFF.ALL_QUEUES_"+i.toUpperCase()+"_"+s.toUpperCase()),labelSelected:r.instant("STAFF.SELECTED_QUEUES_"+i.toUpperCase()+"_"+s.toUpperCase()),transferCallback:function(e,t){a.user[t?"removeQueues":"addQueues"]({id:d.agent.id,ids:_.map(e,"id"),channel:i,penalty:d.penalty||0,realtime:o}).$promise.then(function(){c(),n.success({title:"Queue properly "+(t?"removed":"added"),msg:"Queue has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USER.ADDQUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d.closeDialog=function(){e.hide()},d.isVoiceRealtime=function(){return o&&"voice"===i},d.isVoiceChannel=function(){return"voice"===i},c()}e.$inject=["$mdDialog","toasty","api","agent","channel","realtime","direction","$translate","Auth"],angular.module("app.staff").controller("AgentqueueaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.agent=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("STAFF.ALL_TEAMS"),labelSelected:i.instant("STAFF.SELECTED_TEAMS"),transferCallback:function(e,t){a.user[t?"removeTeams":"addTeams"]({id:o.agent.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:agent.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.user.getTeams({id:o.agent.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","agent","$translate"],angular.module("app.staff").controller("AgentteamaddController",e)}(),function(){"use strict";function e(e,t,i,o,n,a,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=n,c.setting=a,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.agent=d||e.params.agent||{},c.selectedTab=e.params.tab||0,c.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(o.body),targetEvent:n,clickOutsideToClose:!0,locals:{agent:e,agents:c.agents?c.agents.rows:[],channel:t,realtime:!1,direction:a||"inbound"}})},c.teamadddialog=function(e,t){i.show({controller:"AgentteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:c.agents?c.agents.rows:[]}})},c.changepassworddialog=function(e,t){i.show({controller:"AgentchangepasswordController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/changepassword/changepassword.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,setting:a,agents:c.agents?c.agents.rows:[]}})},c.alert=r.info,c.gotoAgents=function(){e.go("app.staff.agents")},c.saveAgent=function(){c.agent=_.omit(c.agent,"userpic"),s.user.update({id:c.agent.id},c.agent).$promise.then(function(){r.success({title:"Agent updated!",msg:c.agent.name?c.agent.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","agent"],angular.module("app.staff").controller("AgentController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="STAFF.EDIT_TEAM",u.team=angular.copy(r),u.teams=s,u.newTeam=!1,u.team||(u.team={},u.title="STAFF.NEW_TEAM",u.newTeam=!0),u.addNewTeam=function(){u.errors=[],l.team.save(u.team).$promise.then(function(e){u.teams.unshift(e.toJSON()),o.success({title:"Team properly created",msg:u.team.name?u.team.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTeam=function(){u.errors=[],l.team.update({id:u.team.id},u.team).$promise.then(function(e){var t=_.find(u.teams,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Team properly saved!",msg:u.team.name?u.team.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTeam=function(e){u.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(){l.team.delete({id:u.team.id}).$promise.then(function(){_.remove(u.teams,{id:u.team.id}),o.success({title:"Team properly deleted!",msg:(u.team.name||"team")+" has been deleted!"}),p(u.team)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","teams","team","api","Auth","license","setting"],angular.module("app.staff").controller("CreateOrEditTeamDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.team[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.team.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserTeam?"penalty "+e.UserTeam.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserTeam?"penalty "+e.UserTeam.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.team=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("STAFF.ALL_AGENTS"),labelSelected:s.instant("STAFF.SELECTED_AGENTS"),transferCallback:function(e,t){a.team[t?"removeAgents":"addAgents"]({id:l.team.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:team.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","team","teams","realtime","$translate","Auth"],angular.module("app.staff").controller("TeamagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.teams=r||{count:0,rows:[]},v.table="teams",v.listOrder="",v.listOrderAsc=null,v.selectedTeams=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditTeamDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{team:e,teams:v.teams.rows,license:v.license,setting:null}})},v.agentadddialog=function(e,t){i.show({controller:"TeamagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{team:e,teams:v.teams?v.teams.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the team?").htmlContent("<b>"+(e.name||"team")+"</b> will be deleted.").ariaLabel("delete team").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTeams=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.team.get(v.query,f).$promise},v.createOrEditTeam=function(e,t){i.show({controller:"CreateOrEditTeamDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{team:t,teams:v.teams.rows,license:v.license,setting:v.setting}})},v.deleteTeam=A,v.exportSelectedTeams=function(){var e=angular.copy(v.selectedTeams);return v.selectedTeams=[],e},v.deleteSelectedTeams=function(e){var t=i.confirm().title("Are you sure want to delete the selected teams?").htmlContent("<b>"+v.selectedTeams.length+" selected</b> will be deleted.").ariaLabel("delete Teams").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTeams.forEach(function(e){A(e)}),v.selectedTeams=[]})},v.deselectTeams=function(){v.selectedTeams=[]},v.selectAllTeams=function(){v.selectedTeams=v.teams.rows};var h=!0,b=1;function f(e){v.teams=e||{count:0,rows:[]}}function A(e){l.team.delete({id:e.id}).$promise.then(function(){_.remove(v.teams.rows,{id:e.id}),v.teams.count-=1,v.teams.rows.length||v.getTeams(),c.success({title:"Team deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEteam"}];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:"SYSTEM:DELETEteam",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTeams())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","teams","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("TeamsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="STAFF.EDIT_TELEPHONE",u.telephone=angular.copy(r),u.telephones=s,u.newTelephone=!1,u.telephone||(u.telephone={role:"telephone",autointernal:!0,context:"from-sip"},u.title="STAFF.NEW_TELEPHONE",u.newTelephone=!0),u.addNewTelephone=function(){u.errors=[],l.user.save(u.telephone).$promise.then(function(e){u.telephones.unshift(e.toJSON()),o.success({title:"Telephone properly created",msg:u.telephone.name?u.telephone.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTelephone=function(){u.errors=[],l.user.update({id:u.telephone.id},u.telephone).$promise.then(function(e){var t=_.find(u.telephones,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Telephone properly saved!",msg:u.telephone.name?u.telephone.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTelephone=function(e){u.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(){l.user.delete({id:u.telephone.id}).$promise.then(function(){_.remove(u.telephones,{id:u.telephone.id}),o.success({title:"Telephone properly deleted!",msg:(u.telephone.name||"telephone")+" has been deleted!"}),p(u.telephone)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","telephones","telephone","api","Auth","license","setting"],angular.module("app.staff").controller("CreateOrEditTelephoneDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o){var s=this;function r(){e.hide()}s.currentUser=o.getCurrentUser(),s.errors=[],s.setting=i,s.passwordPattern=s.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",s.telephone=a,s.password="",s.oldPassword="",s.savePassword=function(){s.errors=[];var e={id:s.telephone.id,newPassword:s.password};s.currentUser.id==s.telephone.id&&(e.oldPassword=s.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()}),s.errors=e.data.errors||[{message:e.toString(),type:"api.telephone.changePassword"}]})},s.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,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.telephone=d||e.params.telephone||{},c.selectedTab=e.params.tab||0,c.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:c.telephones?c.telephones.rows:[]}})},c.alert=r.info,c.gotoTelephones=function(){e.go("app.staff.telephones")},c.saveTelephone=function(){s.user.update({id:c.telephone.id},c.telephone).$promise.then(function(){r.success({title:"Telephone updated!",msg:c.telephone.name?c.telephone.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","telephone"],angular.module("app.staff").controller("TelephoneController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.telephones=r||{count:0,rows:[]},v.table="telephones",v.listOrder="",v.listOrderAsc=null,v.selectedTelephones=[],v.query={fields:"createdAt,updatedAt,id,role,fullname,name,email,password,description,autointernal,internal,voicemail,transport,nat,allow,callerid,context,callgroup,pickupgroup,encryption,phone,mobile",role:"telephone",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v.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"),"")}),v.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'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayencryption=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.staff.telephones.edit",{id:e.id,telephone:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the telephone?").htmlContent("<b>"+(e.name||"telephone")+"</b> will be deleted.").ariaLabel("delete telephone").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTelephones=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.user.get(v.query,f).$promise},v.createOrEditTelephone=function(e,t){i.show({controller:"CreateOrEditTelephoneDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/telephones/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{telephone:t,telephones:v.telephones.rows,license:v.license,setting:v.setting}})},v.deleteTelephone=A,v.exportSelectedTelephones=function(){var e=angular.copy(v.selectedTelephones);return v.selectedTelephones=[],e},v.deleteSelectedTelephones=function(e){var t=i.confirm().title("Are you sure want to delete the selected telephones?").htmlContent("<b>"+v.selectedTelephones.length+" selected</b> will be deleted.").ariaLabel("delete Telephones").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTelephones.forEach(function(e){A(e)}),v.selectedTelephones=[]})},v.deselectTelephones=function(){v.selectedTelephones=[]},v.selectAllTelephones=function(){v.selectedTelephones=v.telephones.rows};var h=!0,b=1;function f(e){v.telephones=e||{count:0,rows:[]}}function A(e){l.user.delete({id:e.id}).$promise.then(function(){_.remove(v.telephones.rows,{id:e.id}),v.telephones.count-=1,v.telephones.rows.length||v.getTelephones(),c.success({title:"Telephone deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];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:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTelephones())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","telephones","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("TelephonesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="STAFF.EDIT_USER",u.user=angular.copy(r),u.users=s,u.newUser=!1,u.user||(u.user={role:"user",autointernal:!0,context:"from-sip",crudPermissions:"0"},u.title="STAFF.NEW_USER",u.newUser=!0),u.addNewUser=function(){u.errors=[],l.user.save(u.user).$promise.then(function(e){u.users.unshift(e.toJSON()),o.success({title:"User properly created",msg:u.user.name?u.user.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveUser=function(){u.errors=[],l.user.update({id:u.user.id},u.user).$promise.then(function(e){var t=_.find(u.users,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"User properly saved!",msg:u.user.name?u.user.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteUser=function(e){if(d.getCurrentUser().id===u.user.id)return o.error({title:"User not deleted!",msg:"You can't remove yourself"});u.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(){l.user.delete({id:u.user.id}).$promise.then(function(){_.remove(u.users,{id:u.user.id}),o.success({title:"User properly deleted!",msg:(u.user.name||"user")+" has been deleted!"}),p(u.user)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","users","user","api","Auth","license","setting"],angular.module("app.staff").controller("CreateOrEditUserDialogController",e)}(),function(){"use strict";function e(e,a){var i=this;i.user={},i.ngFlowOptions={maxChunkRetries:1,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 only: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size for image files is 8 Mb"}),!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){i.user=angular.copy(e),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,o){var s=this;function r(){e.hide()}s.currentUser=o.getCurrentUser(),s.errors=[],s.setting=i,s.passwordPattern=s.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",s.user=a,s.password="",s.oldPassword="",s.savePassword=function(){s.errors=[];var e={id:s.user.id,newPassword:s.password};s.currentUser.id==s.user.id&&(e.oldPassword=s.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()}),s.errors=e.data.errors||[{message:e.toString(),type:"api.user.changePassword"}]})},s.closeDialog=r}e.$inject=["$mdDialog","toasty","api","user","setting","Auth"],angular.module("app.staff").controller("UserchangepasswordController",e)}(),function(){"use strict";function e(e,i,o,t,n,a,s,r){var l=this;function d(){return o.user[l.isVoiceRealtime()?"getVoiceQueuesRt":"getQueues"]({id:l.user.id,fields:l.isVoiceRealtime()?"VoiceQueueId,queue_name,penalty":"id,name,strategy,type",nolimit:!0,channel:"bull"===r.channel?"voice":r.channel,type:l.direction}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return{id:e.VoiceQueueId,name:e.queue_name,penalty:e.hasOwnProperty("penalty")?"penalty "+e.penalty:"penalty 0",strategy:""}}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,s.hasRole("admin")?o[r.route].get({fields:"id,name,strategy,type",nolimit:!0,type:l.direction}).$promise:o.user.getQueues({id:s.getCurrentUser().id,fields:"id,name,strategy,type",nolimit:!0,type:l.direction,channel:"bull"===r.channel?"voice":r.channel}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET"+r.title.toUpperCase(),msg:e.status?JSON.stringify(e.data):e.toString()})})}function c(){var e="get"+_.upperFirst([r.route])+"s";return o.user[e]({id:l.user.id,nolimit:!0}).$promise.then(function(e){return l.selectedItems=e.rows?_.map(e.rows,function(e){return e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,o[r.route].get({nolimit:!0}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET"+r.title.toUpperCase(),msg:e.status?JSON.stringify(e.data):e.toString()})})}l.user=t,l.penalty=0,l.section=r,l.direction=void 0!==r.channel&&"bull"===r.channel?"outbound":"inbound",l.realtime=!1,l.title=a.instant("STAFF.USERADD_"+r.title.toUpperCase()),l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return l.realtime&&"voice"===l.section.channel},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:a.instant("STAFF.ALL_"+r.title.toUpperCase()),labelSelected:a.instant("STAFF.SELECTED_"+r.title.toUpperCase()),transferCallback:function(e,t){if(void 0!==r.channel&&_.includes(r.route,"Queue")){var n=t?"removeQueues":"addQueues";o.user[n]({id:l.user.id,ids:_.map(e,"id"),channel:"bull"===r.channel?"voice":r.channel,penalty:l.penalty||0,realtime:l.realtime}).$promise.then(function(){i.success({title:"Queue properly "+(t?"removed":"added"),msg:"Queue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USER.ADDQUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})}else{var a=_.upperFirst([r.route])+"s";n=t?"remove"+a:"add"+a;o.user[n]({id:l.user.id,ids:_.map(e,"id")}).$promise.then(function(){i.success({title:l.section.title+" properly "+(t?"removed":"added"),msg:l.section.title+" has been "+(t?"removed":"added")+"!"}),t||c()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:user.ADD"+r.title.toUpperCase(),msg:e.status?JSON.stringify(e.data):e.toString()})})}}},void 0!==r.channel&&_.includes(r.route,"Queue")?d():c()}e.$inject=["$mdDialog","toasty","api","user","users","$translate","Auth","section"],angular.module("app.staff").controller("UserpermissionaddController",e)}(),function(){"use strict";function e(n,a,i,e,t,o){var s=this;s.user={},s.navigation=e.getNavigation(),s.init=function(e){s.user=e},s.onChange=function(t,n){if((n||t).enabled){if(n)n.enabled=!0,s.user.permissions.push(n.id);else for(var e=0;e<t.children.length;e++)t.children[e].enabled=!0,s.user.permissions.push(t.children[e].id);t.enabled=!0,s.user.permissions.push(t.id)}else if(n)n.enabled=!1,_.remove(s.user.permissions,function(e){return n.id===e}),_.filter(t.children,{enabled:!1}).length===t.children.length&&(t.enabled=!1,_.remove(s.user.permissions,function(e){return t.id===e}));else{t.enabled=!1,_.remove(s.user.permissions,function(e){return t.id===e});for(var a=0;a<t.children.length;a++)t.children[a].enabled=!1,_.remove(s.user.permissions,function(e){return t.children[a].id===e})}return i.user.update({id:s.user.id,permissions:_.uniq(s.user.permissions)}).$promise.then(function(){o.success({title:"user updated!",msg:s.user.name?s.user.name+" has been updated!":""})}).catch(function(e){console.error(e)})},s.addPermissions=function(e,t){a.show({controller:"UserpermissionaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/edit/permissionadd/permissionadd.html",parent:angular.element(n.body),targetEvent:t,clickOutsideToClose:!0,locals:{user:s.user,users:[],section:e}})},s.allowPermissions=function(e){if(e&&-1!==[401,501,502,601,602,701,702,801,802,901,902,1103,1501].indexOf(e.id))return!0;return!1}}e.$inject=["$document","$mdDialog","api","msNavigationService","msNavigationAgentService","toasty"],angular.module("app.staff").controller("UserPermissionsController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l){var d=this;function c(){a.user[d.isVoiceRealtime()?"getVoiceQueuesRt":"getQueues"]({id:d.user.id,fields:d.isVoiceRealtime()?"VoiceQueueId,queue_name,penalty":"id,name,strategy,type",channel:i,nolimit:!0}).$promise.then(function(e){return d.isVoiceRealtime()?d.selectedItems=e.rows?_.map(e.rows,function(e){return{id:e.VoiceQueueId,name:e.queue_name,penalty:e.hasOwnProperty("penalty")?"penalty "+e.penalty:"penalty 0",strategy:""}}):[]:d.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",e}):[],l.hasRole("admin")?a[d.apiname].get({fields:"id,name,strategy,type",nolimit:!0,type:s}).$promise:a.user.getQueues({id:l.getCurrentUser().id,fields:"id,name,strategy,type",nolimit:!0,type:s,channel:i}).$promise}).then(function(e){d.items=e.rows?e.rows:[],d.selectedItems=_.intersectionBy(d.selectedItems,d.items,"id"),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.items,d.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETQUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})}d.user=t,d.penalty=0,d.apiname=i+"Queue",d.title=r.instant("STAFF.QUEUEADD_USER_"+i.toUpperCase()+"_"+s.toUpperCase()),d.items=[],d.selectedItems=[],d.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,orderBy:"name",line1:"name",line2:"type",line3:"agent"===d.user.role?"penalty":"",labelAll:r.instant("STAFF.ALL_QUEUES_"+i.toUpperCase()+"_"+s.toUpperCase()),labelSelected:r.instant("STAFF.SELECTED_QUEUES_"+i.toUpperCase()+"_"+s.toUpperCase()),transferCallback:function(e,t){a.user[t?"removeQueues":"addQueues"]({id:d.user.id,ids:_.map(e,"id"),channel:i,penalty:d.penalty||0,realtime:o}).$promise.then(function(){c(),n.success({title:"Queue properly "+(t?"removed":"added"),msg:"Queue has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USER.ADDQUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d.closeDialog=function(){e.hide()},d.isVoiceRealtime=function(){return o&&"voice"===i},d.isVoiceChannel=function(){return"voice"===i},c()}e.$inject=["$mdDialog","toasty","api","user","channel","realtime","direction","$translate","Auth"],angular.module("app.staff").controller("UserqueueaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.user=d||e.params.user||{},c.selectedTab=e.params.tab||0,c.permissionadddialog=function(e,t){n.show({controller:"UserpermissionaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/edit/permissionadd/permissionadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{user:e,users:c.users?c.users.rows:[]}})},c.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:c.users?c.users.rows:[]}})},c.alert=r.info,c.gotoUsers=function(){e.go("app.staff.users")},c.saveUser=function(){c.user=_.omit(c.user,"userpic"),s.user.update({id:c.user.id},c.user).$promise.then(function(){r.success({title:"User updated!",msg:c.user.name?c.user.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","user"],angular.module("app.staff").controller("UserController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.users=r||{count:0,rows:[]},v.table="users",v.listOrder="",v.listOrderAsc=null,v.selectedUsers=[],v.query={fields:"createdAt,updatedAt,role,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,permissions,crudPermissions,passwordResetAt",role:"admin,user",sort:"-updatedAt",limit:10,page:1},v.arrayrole=_.keyBy([{option:"Admin",value:"'admin'"},{option:"User",value:"'user'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.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"),"")}),v.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'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraycrudPermissions=_.keyBy([{option:"readAndEditAndDelete",value:"0"},{option:"readAndEdit",value:"1"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.staff.users.edit",{id:e.id,user:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the user?").htmlContent("<b>"+(e.name||"user")+"</b> will be deleted.").ariaLabel("delete user").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getUsers=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.user.get(v.query,f).$promise},v.createOrEditUser=function(e,t){i.show({controller:"CreateOrEditUserDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{user:t,users:v.users.rows,license:v.license,setting:v.setting}})},v.deleteUser=A,v.exportSelectedUsers=function(){var e=angular.copy(v.selectedUsers);return v.selectedUsers=[],e},v.deleteSelectedUsers=function(e){var t=i.confirm().title("Are you sure want to delete the selected users?").htmlContent("<b>"+v.selectedUsers.length+" selected</b> will be deleted.").ariaLabel("delete Users").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedUsers.forEach(function(e){A(e)}),v.selectedUsers=[]})},v.deselectUsers=function(){v.selectedUsers=[]},v.selectAllUsers=function(){v.selectedUsers=v.users.rows};var h=!0,b=1;function f(e){v.users=e||{count:0,rows:[]}}function A(e){l.user.delete({id:e.id}).$promise.then(function(){_.remove(v.users.rows,{id:e.id}),v.users.count-=1,v.users.rows.length||v.getUsers(),c.success({title:"User deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];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:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getUsers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","users","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("UsersController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.cannedAnswers=r||{count:0,rows:[]},v.table="cannedAnswers",v.listOrder="",v.listOrderAsc=null,v.selectedCannedAnswers=[],v.query={fields:"createdAt,updatedAt,id,key,value,description",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/cannedAnswers/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{cannedAnswer:e,cannedAnswers:v.cannedAnswers.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the cannedAnswer?").htmlContent("<b>"+(e.name||"cannedAnswer")+"</b> will be deleted.").ariaLabel("delete cannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getCannedAnswers=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.cannedAnswer.get(v.query,f).$promise},v.createOrEditCannedAnswer=function(e,t){i.show({controller:"CreateOrEditCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/cannedAnswers/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{cannedAnswer:t,cannedAnswers:v.cannedAnswers.rows,license:v.license,setting:v.setting}})},v.deleteCannedAnswer=A,v.exportSelectedCannedAnswers=function(){var e=angular.copy(v.selectedCannedAnswers);return v.selectedCannedAnswers=[],e},v.deleteSelectedCannedAnswers=function(e){var t=i.confirm().title("Are you sure want to delete the selected cannedAnswers?").htmlContent("<b>"+v.selectedCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete CannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedCannedAnswers.forEach(function(e){A(e)}),v.selectedCannedAnswers=[]})},v.deselectCannedAnswers=function(){v.selectedCannedAnswers=[]},v.selectAllCannedAnswers=function(){v.selectedCannedAnswers=v.cannedAnswers.rows};var h=!0,b=1;function f(e){v.cannedAnswers=e||{count:0,rows:[]}}function A(e){l.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(v.cannedAnswers.rows,{id:e.id}),v.cannedAnswers.count-=1,v.cannedAnswers.rows.length||v.getCannedAnswers(),c.success({title:"CannedAnswer deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcannedAnswer"}];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:"SYSTEM:DELETEcannedAnswer",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getCannedAnswers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","cannedAnswers","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("CannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_CANNEDANSWER",u.cannedAnswer=angular.copy(r),u.cannedAnswers=s,u.newCannedAnswer=!1,u.cannedAnswer||(u.cannedAnswer={},u.title="TOOLS.NEW_CANNEDANSWER",u.newCannedAnswer=!0),u.addNewCannedAnswer=function(){u.errors=[],l.cannedAnswer.save(u.cannedAnswer).$promise.then(function(e){u.cannedAnswers.unshift(e.toJSON()),o.success({title:"CannedAnswer properly created",msg:u.cannedAnswer.name?u.cannedAnswer.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveCannedAnswer=function(){u.errors=[],l.cannedAnswer.update({id:u.cannedAnswer.id},u.cannedAnswer).$promise.then(function(e){var t=_.find(u.cannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CannedAnswer properly saved!",msg:u.cannedAnswer.name?u.cannedAnswer.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteCannedAnswer=function(e){u.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(){l.cannedAnswer.delete({id:u.cannedAnswer.id}).$promise.then(function(){_.remove(u.cannedAnswers,{id:u.cannedAnswer.id}),o.success({title:"CannedAnswer properly deleted!",msg:(u.cannedAnswer.name||"cannedAnswer")+" has been deleted!"}),p(u.cannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","cannedAnswers","cannedAnswer","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_CUSTOMDASHBOARD",u.customDashboard=angular.copy(r),u.customDashboards=s,u.newCustomDashboard=!1,u.customDashboard||(u.customDashboard={},u.title="TOOLS.NEW_CUSTOMDASHBOARD",u.newCustomDashboard=!0),u.addNewCustomDashboard=function(){u.errors=[],l.dashboard.save(u.customDashboard).$promise.then(function(e){u.customDashboards.unshift(e.toJSON()),o.success({title:"CustomDashboard properly created",msg:u.customDashboard.name?u.customDashboard.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveCustomDashboard=function(){u.errors=[],l.dashboard.update({id:u.customDashboard.id},u.customDashboard).$promise.then(function(e){var t=_.find(u.customDashboards,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CustomDashboard properly saved!",msg:u.customDashboard.name?u.customDashboard.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteCustomDashboard=function(e){u.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(){l.dashboard.delete({id:u.customDashboard.id}).$promise.then(function(){_.remove(u.customDashboards,{id:u.customDashboard.id}),o.success({title:"CustomDashboard properly deleted!",msg:(u.customDashboard.name||"customDashboard")+" has been deleted!"}),p(u.customDashboard)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","customDashboards","customDashboard","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditCustomDashboardDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.customDashboards=r||{count:0,rows:[]},v.table="customDashboards",v.listOrder="",v.listOrderAsc=null,v.selectedCustomDashboards=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},v.editstate=function(e,t){n.go("app.tools.customDashboards.edit",{id:e.id,customDashboard:e})},v.useradddialog=function(e,t){i.show({controller:"CustomDashboarduseraddController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/useradd/useradd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{customDashboard:e,customDashboards:v.customDashboards?v.customDashboards.rows:[]}})},v.clonedialog=function(e,t){i.show({controller:"CustomDashboardcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{customDashboard:e,customDashboards:v.customDashboards?v.customDashboards.rows:[]}})},v.gotodashboardgoto=function(e,t){n.go("app.dashboards.custom",{id:e.id})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the customDashboard?").htmlContent("<b>"+(e.name||"customDashboard")+"</b> will be deleted.").ariaLabel("delete customDashboard").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getCustomDashboards=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.dashboard.get(v.query,f).$promise},v.createOrEditCustomDashboard=function(e,t){i.show({controller:"CreateOrEditCustomDashboardDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{customDashboard:t,customDashboards:v.customDashboards.rows,license:v.license,setting:v.setting}})},v.deleteCustomDashboard=A,v.exportSelectedCustomDashboards=function(){var e=angular.copy(v.selectedCustomDashboards);return v.selectedCustomDashboards=[],e},v.deleteSelectedCustomDashboards=function(e){var t=i.confirm().title("Are you sure want to delete the selected customDashboards?").htmlContent("<b>"+v.selectedCustomDashboards.length+" selected</b> will be deleted.").ariaLabel("delete CustomDashboards").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedCustomDashboards.forEach(function(e){A(e)}),v.selectedCustomDashboards=[]})},v.deselectCustomDashboards=function(){v.selectedCustomDashboards=[]},v.selectAllCustomDashboards=function(){v.selectedCustomDashboards=v.customDashboards.rows};var h=!0,b=1;function f(e){v.customDashboards=e||{count:0,rows:[]}}function A(e){l.dashboard.delete({id:e.id}).$promise.then(function(){_.remove(v.customDashboards.rows,{id:e.id}),v.customDashboards.count-=1,v.customDashboards.rows.length||v.getCustomDashboards(),c.success({title:"CustomDashboard deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEdashboard"}];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:"SYSTEM:DELETEdashboard",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getCustomDashboards())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","customDashboards","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("CustomDashboardsController",e)}(),function(){"use strict";function e(t,n,a,e,i,o,s){var r=this;function l(e){t.hide(e)}r.newCustomDashboard=!0,r.customDashboard=angular.copy(i),r.customDashboards=o,r.title=s.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,o){var s=this;function t(e,t,n){return o.dashboardItem.update(n).$promise.catch(function(e){console.error(e)})}s.customDashboard={},s.voiceQueues=o.rpc.getVoiceQueues({fields:"id,name"}),s.init=function(e){return s.customDashboard=e,s.customDashboard.draggable={enabled:!0,handle:".draggable",stop:t},s.customDashboard.resizable={enabled:!0,handle:".resizable",stop:t},s.customDashboard.widgets=[],o.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=s.voiceQueues,e.rows[t].voiceQueuesSelected=_.map(s.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",s.customDashboard.widgets.push(e.rows[t])}).catch(function(e){console.error(e)})},s.createOrEditWidget=function(e){if(e&&e.attrs)for(var t=0;t<e.attrs.length;t+=1)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:s.customDashboard.widgets,license:null,setting:null}}).then(function(e){for(var t=0;t<s.customDashboard.widgets.length;t+=1)s.customDashboard.widgets[t].id===e.id&&(s.customDashboard.widgets[t].attrs=e.attrs,s.customDashboard.widgets[t].voiceQueues=s.voiceQueues,s.customDashboard.widgets[t].voiceQueuesSelected=_.map(s.voiceQueues.rows,"id"),s.customDashboard.widgets[t].templateUrl="app/core/directives/ms-widget-engine/ms-widget-engine-"+s.customDashboard.widgets[t].type+"/ms-widget-engine."+s.customDashboard.widgets[t].type+".html")})},s.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 o.dashboardItem.delete({id:t.id}).$promise.then(function(e){_.remove(s.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){s.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(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_DASHBOARDITEM",u.dashboarditem=angular.copy(r),u.dashboard=s,u.newDashboardItem=!1,u.dashboarditem||(u.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"},u.title="TOOLS.NEW_DASHBOARDITEM",u.newDashboardItem=!0),u.addNewDashboardItem=function(){u.errors=[],l.dashboard.addItem({id:t.params.id},u.dashboarditem).$promise.then(function(e){u.dashboard.unshift(e.toJSON()),o.success({title:"DashboardItem properly created",msg:u.dashboarditem.name?u.dashboarditem.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboardItem.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.saveDashboardItem=function(){u.errors=[],l.dashboardItem.update({id:u.dashboarditem.id},u.dashboarditem).$promise.then(function(e){var t=_.find(u.dashboard,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"DashboardItem properly saved!",msg:u.dashboarditem.name?u.dashboarditem.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboardItem.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.deleteDashboardItem=function(e){u.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(){l.dashboardItem.delete({id:u.dashboarditem.id}).$promise.then(function(){_.remove(u.dashboard,{id:u.dashboarditem.id}),o.success({title:"DashboardItem properly deleted!",msg:(u.dashboarditem.name||"dashboarditem")+" has been deleted!"}),p(u.dashboarditem)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.analyticCustomReport.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){u.customReports=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcustomReports",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.voiceQueue.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){u.voiceQueues=e.rows||[]}).catch(function(e){o.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","toasty","dashboard","dashboarditem","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditDashboardItemDialogController",e)}(),function(){"use strict";function e(e,i,o,s,t,n,a){var r=this;r.closeDialog=function(){e.hide()},r.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:n.instant("TOOLS.ALL_USERS"),labelSelected:n.instant("TOOLS.SELECTED_USERS"),transferCallback:function(e,t){for(var n=0,a=0;n<e.length;n+=1)a=99999+s.id,e[n].permissions=t?_.without(e[n].permissions,a):_.concat(e[n].permissions,a),o.user.update(e[n]).$promise.then(function(){i.success({title:"User properly "+(t?"removed":"added"),msg:"User has been "+(t?"removed":"added")+"!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:dashboard.ADDUSERS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},function(){if(s&&s.id){var t=99999+s.id;o.user.get({fields:"id,fullname,name,internal,permissions",role:"user",nolimit:!0}).$promise.then(function(e){r.dualMultiselectOptions.selectedItems=_.filter(e.rows,function(e){return _.includes(e.permissions,t)}),r.dualMultiselectOptions.items=_.differenceBy(e.rows,r.dualMultiselectOptions.selectedItems,"id")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}}()}e.$inject=["$mdDialog","toasty","api","customDashboard","customDashboards","$translate","Auth"],angular.module("app.tools").controller("CustomDashboarduseraddController",e)}(),function(){"use strict";function e(n,e,a,i,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.customDashboard=d||n.params.customDashboard||{},c.selectedTab=n.params.tab||0,c.useradddialog=function(e,t){a.show({controller:"CustomDashboarduseraddController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/useradd/useradd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{customDashboard:e,customDashboards:c.customDashboards?c.customDashboards.rows:[]}})},c.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:c.customDashboards?c.customDashboards.rows:[]}})},c.gotogoto=function(e,t){n.go("app.dashboards.custom",{id:e.id})},c.alert=r.info,c.gotoCustomDashboards=function(){n.go("app.tools.customDashboards")},c.saveCustomDashboard=function(){s.dashboard.update({id:c.customDashboard.id},c.customDashboard).$promise.then(function(){r.success({title:"CustomDashboard updated!",msg:c.customDashboard.name?c.customDashboard.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","customDashboard"],angular.module("app.tools").controller("CustomDashboardController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_DISPOSITION",u.disposition=angular.copy(r),u.dispositions=s,u.newDisposition=!1,u.disposition||(u.disposition={},u.title="TOOLS.NEW_DISPOSITION",u.newDisposition=!0),u.addNewDisposition=function(){u.errors=[],l.disposition.save(u.disposition).$promise.then(function(e){u.dispositions.unshift(e.toJSON()),o.success({title:"Disposition properly created",msg:u.disposition.name?u.disposition.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveDisposition=function(){u.errors=[],l.disposition.update({id:u.disposition.id},u.disposition).$promise.then(function(e){var t=_.find(u.dispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Disposition properly saved!",msg:u.disposition.name?u.disposition.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteDisposition=function(e){u.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(){l.disposition.delete({id:u.disposition.id}).$promise.then(function(){_.remove(u.dispositions,{id:u.disposition.id}),o.success({title:"Disposition properly deleted!",msg:(u.disposition.name||"disposition")+" has been deleted!"}),p(u.disposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","dispositions","disposition","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.dispositions=r||{count:0,rows:[]},v.table="dispositions",v.listOrder="",v.listOrderAsc=null,v.selectedDispositions=[],v.query={fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/dispositions/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{disposition:e,dispositions:v.dispositions.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the disposition?").htmlContent("<b>"+(e.name||"disposition")+"</b> will be deleted.").ariaLabel("delete disposition").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getDispositions=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.disposition.get(v.query,f).$promise},v.createOrEditDisposition=function(e,t){i.show({controller:"CreateOrEditDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/dispositions/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{disposition:t,dispositions:v.dispositions.rows,license:v.license,setting:v.setting}})},v.deleteDisposition=A,v.exportSelectedDispositions=function(){var e=angular.copy(v.selectedDispositions);return v.selectedDispositions=[],e},v.deleteSelectedDispositions=function(e){var t=i.confirm().title("Are you sure want to delete the selected dispositions?").htmlContent("<b>"+v.selectedDispositions.length+" selected</b> will be deleted.").ariaLabel("delete Dispositions").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedDispositions.forEach(function(e){A(e)}),v.selectedDispositions=[]})},v.deselectDispositions=function(){v.selectedDispositions=[]},v.selectAllDispositions=function(){v.selectedDispositions=v.dispositions.rows};var h=!0,b=1;function f(e){v.dispositions=e||{count:0,rows:[]}}function A(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(v.dispositions.rows,{id:e.id}),v.dispositions.count-=1,v.dispositions.rows.length||v.getDispositions(),c.success({title:"Disposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEdisposition"}];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:"SYSTEM:DELETEdisposition",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getDispositions())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","dispositions","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("DispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_INTERVAL",u.interval=angular.copy(r),u.intervals=s,u.newInterval=!1,u.interval||(u.interval={},u.title="TOOLS.NEW_INTERVAL",u.newInterval=!0),u.addNewInterval=function(){u.errors=[],l.interval.save(u.interval).$promise.then(function(e){u.intervals.unshift(e.toJSON()),o.success({title:"Interval properly created",msg:u.interval.name?u.interval.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveInterval=function(){u.errors=[],l.interval.update({id:u.interval.id},u.interval).$promise.then(function(e){var t=_.find(u.intervals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Interval properly saved!",msg:u.interval.name?u.interval.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteInterval=function(e){u.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(){l.interval.delete({id:u.interval.id}).$promise.then(function(){_.remove(u.intervals,{id:u.interval.id}),o.success({title:"Interval properly deleted!",msg:(u.interval.name||"interval")+" has been deleted!"}),p(u.interval)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","intervals","interval","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditIntervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditAppintervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.interval={},c.intervalIntervals={count:0,rows:[]},c.selectedIntervalIntervals=[],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){c.interval=e,c.query.id=c.interval.id,c.getIntervalIntervals()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"EditAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/intervals/edit/apps/interval/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:c.interval,interval:t,intervals:c.intervalIntervals.rows,license:null,setting:null}})},c.exportSelectedIntervalIntervals=function(){var e=angular.copy(c.selectedIntervalIntervals);return c.selectedIntervalIntervals=[],e},c.deleteIntervalInterval=g,c.deleteSelectedIntervalIntervals=function(e){var t=o.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");o.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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_INTERVAL",u.interval=angular.copy(r),u.intervals=s,u.newInterval=!1,u.interval||(u.interval={},u.title="TOOLS.NEW_INTERVAL",u.newInterval=!0),u.addNewInterval=function(){u.errors=[],l.interval.save(u.interval).$promise.then(function(e){u.intervals.unshift(e.toJSON()),o.success({title:"Interval properly created",msg:u.interval.name?u.interval.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveInterval=function(){u.errors=[],l.interval.update({id:u.interval.id},u.interval).$promise.then(function(e){var t=_.find(u.intervals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Interval properly saved!",msg:u.interval.name?u.interval.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteInterval=function(e){u.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(){l.interval.delete({id:u.interval.id}).$promise.then(function(){_.remove(u.intervals,{id:u.interval.id}),o.success({title:"Interval properly deleted!",msg:(u.interval.name||"interval")+" has been deleted!"}),p(u.interval)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","intervals","interval","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditIntervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.interval=d||e.params.interval||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoIntervals=function(){e.go("app.tools.intervals")},c.saveInterval=function(){s.interval.update({id:c.interval.id},c.interval).$promise.then(function(){r.success({title:"Interval updated!",msg:c.interval.name?c.interval.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","interval"],angular.module("app.tools").controller("IntervalController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.intervals=r||{count:0,rows:[]},v.table="intervals",v.listOrder="",v.listOrderAsc=null,v.selectedIntervals=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",IntervalId:"null",limit:10,page:1},v.editstate=function(e,t){n.go("app.tools.intervals.edit",{id:e.id,interval:e})},v.deleteconfirm=function(e,t){var n=i.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");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getIntervals=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.interval.get(v.query,f).$promise},v.createOrEditInterval=function(e,t){i.show({controller:"CreateOrEditIntervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/intervals/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:t,intervals:v.intervals.rows,license:v.license,setting:v.setting}})},v.deleteInterval=A,v.exportSelectedIntervals=function(){var e=angular.copy(v.selectedIntervals);return v.selectedIntervals=[],e},v.deleteSelectedIntervals=function(e){var t=i.confirm().title("Are you sure want to delete the selected intervals?").htmlContent("<b>"+v.selectedIntervals.length+" selected</b> will be deleted.").ariaLabel("delete Intervals").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedIntervals.forEach(function(e){A(e)}),v.selectedIntervals=[]})},v.deselectIntervals=function(){v.selectedIntervals=[]},v.selectAllIntervals=function(){v.selectedIntervals=v.intervals.rows};var h=!0,b=1;function f(e){v.intervals=e||{count:0,rows:[]}}function A(e){l.interval.delete({id:e.id}).$promise.then(function(){_.remove(v.intervals.rows,{id:e.id}),v.intervals.count-=1,v.intervals.rows.length||v.getIntervals(),c.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){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEinterval"}];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:"SYSTEM:DELETEinterval",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getIntervals())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","intervals","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("IntervalsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_PAUSE",u.pause=angular.copy(r),u.pauses=s,u.newPause=!1,u.pause||(u.pause={},u.title="TOOLS.NEW_PAUSE",u.newPause=!0),u.addNewPause=function(){u.errors=[],l.pause.save(u.pause).$promise.then(function(e){u.pauses.unshift(e.toJSON()),o.success({title:"Pause properly created",msg:u.pause.name?u.pause.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.savePause=function(){u.errors=[],l.pause.update({id:u.pause.id},u.pause).$promise.then(function(e){var t=_.find(u.pauses,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Pause properly saved!",msg:u.pause.name?u.pause.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deletePause=function(e){u.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(){l.pause.delete({id:u.pause.id}).$promise.then(function(){_.remove(u.pauses,{id:u.pause.id}),o.success({title:"Pause properly deleted!",msg:(u.pause.name||"pause")+" has been deleted!"}),p(u.pause)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","pauses","pause","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditPauseDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.pauses=r||{count:0,rows:[]},v.table="pauses",v.listOrder="",v.listOrderAsc=null,v.selectedPauses=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditPauseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/pauses/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{pause:e,pauses:v.pauses.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the pause?").htmlContent("<b>"+(e.name||"pause")+"</b> will be deleted.").ariaLabel("delete pause").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getPauses=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.pause.get(v.query,f).$promise},v.createOrEditPause=function(e,t){i.show({controller:"CreateOrEditPauseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/pauses/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{pause:t,pauses:v.pauses.rows,license:v.license,setting:v.setting}})},v.deletePause=A,v.exportSelectedPauses=function(){var e=angular.copy(v.selectedPauses);return v.selectedPauses=[],e},v.deleteSelectedPauses=function(e){var t=i.confirm().title("Are you sure want to delete the selected pauses?").htmlContent("<b>"+v.selectedPauses.length+" selected</b> will be deleted.").ariaLabel("delete Pauses").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedPauses.forEach(function(e){A(e)}),v.selectedPauses=[]})},v.deselectPauses=function(){v.selectedPauses=[]},v.selectAllPauses=function(){v.selectedPauses=v.pauses.rows};var h=!0,b=1;function f(e){v.pauses=e||{count:0,rows:[]}}function A(e){l.pause.delete({id:e.id}).$promise.then(function(){_.remove(v.pauses.rows,{id:e.id}),v.pauses.count-=1,v.pauses.rows.length||v.getPauses(),c.success({title:"Pause deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEpause"}];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:"SYSTEM:DELETEpause",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getPauses())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","pauses","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("PausesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_SCHEDULE",u.schedule=angular.copy(r),u.schedules=s,u.newSchedule=!1,u.schedule||(u.schedule={type:"custom",output:"xlsx",active:!0,startAt:new Date,endAt:new Date(Date.now()+2592e6),cron:"0 0 * * *",subtractNumber:1,subtractUnit:"days",sendMail:!1,sendIfEmpty:!0},u.title="TOOLS.NEW_SCHEDULE",u.newSchedule=!0),u.addNewSchedule=function(){u.errors=[],l.schedule.save(u.schedule).$promise.then(function(e){u.schedules.unshift(e.toJSON()),o.success({title:"Schedule properly created",msg:u.schedule.name?u.schedule.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSchedule=function(){u.errors=[],l.schedule.update({id:u.schedule.id},u.schedule).$promise.then(function(e){var t=_.find(u.schedules,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Schedule properly saved!",msg:u.schedule.name?u.schedule.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSchedule=function(e){u.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(){l.schedule.delete({id:u.schedule.id}).$promise.then(function(){_.remove(u.schedules,{id:u.schedule.id}),o.success({title:"Schedule properly deleted!",msg:(u.schedule.name||"schedule")+" has been deleted!"}),p(u.schedule)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.analyticCustomReport.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.customReports=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcustomReports",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.analyticDefaultReport.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.defaultReports=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdefaultReports",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.mailAccounts=e.rows||[]}).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","toasty","schedules","schedule","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditScheduleDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.schedules=r||{count:0,rows:[]},v.table="schedules",v.listOrder="",v.listOrderAsc=null,v.selectedScheduler=[],v.query={fields:"createdAt,updatedAt,id,name,type,DefaultReportId,CustomReportId,output,active,startAt,endAt,cron,subtractNumber,subtractUnit,sendMail,MailAccountId,email,cc,bcc,sendIfEmpty,description",sort:"-updatedAt",limit:10,page:1},v.arraytype=_.keyBy([{option:"Default",value:"'default'"},{option:"Custom",value:"'custom'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayoutput=_.keyBy([{option:"CSV",value:"'csv'"},{option:"PDF",value:"'pdf'"},{option:"Excel",value:"'xlsx'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.editdialog=function(e,t){i.show({controller:"CreateOrEditScheduleDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/schedules/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{schedule:e,schedules:v.schedules.rows,license:v.license,setting:null}})},v.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 l.schedule.run({id:e.id}).$promise},function(){console.log("CANCEL")})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the schedule?").htmlContent("<b>"+(e.name||"schedule")+"</b> will be deleted.").ariaLabel("delete schedule").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getScheduler=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.schedule.get(v.query,f).$promise},v.createOrEditSchedule=function(e,t){i.show({controller:"CreateOrEditScheduleDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/schedules/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{schedule:t,schedules:v.schedules.rows,license:v.license,setting:v.setting}})},v.deleteSchedule=A,v.exportSelectedScheduler=function(){var e=angular.copy(v.selectedScheduler);return v.selectedScheduler=[],e},v.deleteSelectedScheduler=function(e){var t=i.confirm().title("Are you sure want to delete the selected schedules?").htmlContent("<b>"+v.selectedScheduler.length+" selected</b> will be deleted.").ariaLabel("delete Schedules").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedScheduler.forEach(function(e){A(e)}),v.selectedScheduler=[]})},v.deselectScheduler=function(){v.selectedScheduler=[]},v.selectAllScheduler=function(){v.selectedScheduler=v.schedules.rows},l.analyticCustomReport.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.customReports=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcustomReports",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.analyticDefaultReport.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.defaultReports=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdefaultReports",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){v.mailAccounts=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.schedules=e||{count:0,rows:[]}}function A(e){l.schedule.delete({id:e.id}).$promise.then(function(){_.remove(v.schedules.rows,{id:e.id}),v.schedules.count-=1,v.schedules.rows.length||v.getScheduler(),c.success({title:"Schedule deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEschedule"}];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:"SYSTEM:DELETEschedule",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getScheduler())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","schedules","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("SchedulesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_SOUND",u.sound=angular.copy(r),u.sounds=s,u.newSound=!1,u.sound||(u.sound={},u.title="TOOLS.NEW_SOUND",u.newSound=!0),u.addNewSound=function(){u.errors=[],l.sound.save(u.sound).$promise.then(function(e){u.sounds.unshift(e.toJSON()),o.success({title:"Sound properly created",msg:u.sound.name?u.sound.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveSound=function(){u.errors=[],l.sound.update({id:u.sound.id},u.sound).$promise.then(function(e){var t=_.find(u.sounds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Sound properly saved!",msg:u.sound.name?u.sound.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteSound=function(e){u.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(){l.sound.delete({id:u.sound.id}).$promise.then(function(){_.remove(u.sounds,{id:u.sound.id}),o.success({title:"Sound properly deleted!",msg:(u.sound.name||"sound")+" has been deleted!"}),p(u.sound)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","sounds","sound","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.sounds=r||{count:0,rows:[]},v.table="sounds",v.listOrder="",v.listOrderAsc=null,v.selectedSounds=[],v.query={fields:"createdAt,updatedAt,id,save_name,converted_format,name,audio,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{sound:e,sounds:v.sounds.rows,license:v.license,setting:null}})},v.downloadfile2=function(o,e){return l.sound.download({id:o.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=o.converted_format?o.save_name+"."+o.converted_format:o.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++)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.sound.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the sound?").htmlContent("<b>"+(e.name||"sound")+"</b> will be deleted.").ariaLabel("delete sound").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getSounds=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.sound.get(v.query,f).$promise},v.createOrEditSound=function(e,t){i.show({controller:"CreateOrEditSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{sound:t,sounds:v.sounds.rows,license:v.license,setting:v.setting}})},v.deleteSound=A,v.exportSelectedSounds=function(){var e=angular.copy(v.selectedSounds);return v.selectedSounds=[],e},v.deleteSelectedSounds=function(e){var t=i.confirm().title("Are you sure want to delete the selected sounds?").htmlContent("<b>"+v.selectedSounds.length+" selected</b> will be deleted.").ariaLabel("delete Sounds").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedSounds.forEach(function(e){A(e)}),v.selectedSounds=[]})},v.deselectSounds=function(){v.selectedSounds=[]},v.selectAllSounds=function(){v.selectedSounds=v.sounds.rows},v.uploadSound=function(e){i.show({controller:"UploadSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/upload/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{sounds:v.sounds.rows}})};var h=!0,b=1;function f(e){v.sounds=e||{count:0,rows:[]}}function A(e){l.sound.delete({id:e.id}).$promise.then(function(){_.remove(v.sounds.rows,{id:e.id}),v.sounds.count-=1,v.sounds.rows.length||v.getSounds(),c.success({title:"Sound deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsound"}];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:"SYSTEM:DELETEsound",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getSounds())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","sounds","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("SoundsController",e)}(),function(){"use strict";function e(e,t,n,a,i){var o=this;o.errors=[],o.title="TOOLS.UPLOAD_SOUND",o.sounds=a,o.uploadSounds=[],o.uploadState="none",o.sound={},o.ngFlowOptions={maxChunkRetries:1,chunkSize:15728640,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,target:"api/sounds",allowDuplicateUploads:!0},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 only: "+t.join()}),!1;if(15728640<e.size)return n.error({title:"File too big",msg:"The max allowed size is 15 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.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"],angular.module("app.tools").controller("UploadSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_TAG",u.tag=angular.copy(r),u.tags=s,u.newTag=!1,u.tag||(u.tag={},u.title="TOOLS.NEW_TAG",u.newTag=!0),u.addNewTag=function(){u.errors=[],l.tag.save(u.tag).$promise.then(function(e){u.tags.unshift(e.toJSON()),o.success({title:"Tag properly created",msg:u.tag.name?u.tag.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTag=function(){u.errors=[],l.tag.update({id:u.tag.id},u.tag).$promise.then(function(e){var t=_.find(u.tags,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Tag properly saved!",msg:u.tag.name?u.tag.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTag=function(e){u.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(){l.tag.delete({id:u.tag.id}).$promise.then(function(){_.remove(u.tags,{id:u.tag.id}),o.success({title:"Tag properly deleted!",msg:(u.tag.name||"tag")+" has been deleted!"}),p(u.tag)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","tags","tag","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditTagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.tags=r||{count:0,rows:[]},v.table="tags",v.listOrder="",v.listOrderAsc=null,v.selectedTags=[],v.query={fields:"createdAt,updatedAt,id,name,description,color",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditTagDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/tags/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{tag:e,tags:v.tags.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the tag?").htmlContent("<b>"+(e.name||"tag")+"</b> will be deleted.").ariaLabel("delete tag").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTags=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.tag.get(v.query,f).$promise},v.createOrEditTag=function(e,t){i.show({controller:"CreateOrEditTagDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/tags/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{tag:t,tags:v.tags.rows,license:v.license,setting:v.setting}})},v.deleteTag=A,v.exportSelectedTags=function(){var e=angular.copy(v.selectedTags);return v.selectedTags=[],e},v.deleteSelectedTags=function(e){var t=i.confirm().title("Are you sure want to delete the selected tags?").htmlContent("<b>"+v.selectedTags.length+" selected</b> will be deleted.").ariaLabel("delete Tags").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTags.forEach(function(e){A(e)}),v.selectedTags=[]})},v.deselectTags=function(){v.selectedTags=[]},v.selectAllTags=function(){v.selectedTags=v.tags.rows};var h=!0,b=1;function f(e){v.tags=e||{count:0,rows:[]}}function A(e){l.tag.delete({id:e.id}).$promise.then(function(){_.remove(v.tags.rows,{id:e.id}),v.tags.count-=1,v.tags.rows.length||v.getTags(),c.success({title:"Tag deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtag"}];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:"SYSTEM:DELETEtag",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTags())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","tags","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TagsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_TEMPLATE",u.template=angular.copy(r),u.templates=s,u.newTemplate=!1,u.template||(u.template={},u.title="TOOLS.NEW_TEMPLATE",u.newTemplate=!0),u.addNewTemplate=function(){u.errors=[],l.template.save(u.template).$promise.then(function(e){u.templates.unshift(e.toJSON()),o.success({title:"Template properly created",msg:u.template.name?u.template.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTemplate=function(){u.errors=[],l.template.update({id:u.template.id},u.template).$promise.then(function(e){var t=_.find(u.templates,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Template properly saved!",msg:u.template.name?u.template.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTemplate=function(e){u.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(){l.template.delete({id:u.template.id}).$promise.then(function(){_.remove(u.templates,{id:u.template.id}),o.success({title:"Template properly deleted!",msg:(u.template.name||"template")+" has been deleted!"}),p(u.template)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","templates","template","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditTemplateDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.templates=r||{count:0,rows:[]},v.table="templates",v.listOrder="",v.listOrderAsc=null,v.selectedTemplates=[],v.query={fields:"createdAt,updatedAt,id,name,html,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditTemplateDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/templates/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{template:e,templates:v.templates.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the template?").htmlContent("<b>"+(e.name||"template")+"</b> will be deleted.").ariaLabel("delete template").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTemplates=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.template.get(v.query,f).$promise},v.createOrEditTemplate=function(e,t){i.show({controller:"CreateOrEditTemplateDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/templates/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{template:t,templates:v.templates.rows,license:v.license,setting:v.setting}})},v.deleteTemplate=A,v.exportSelectedTemplates=function(){var e=angular.copy(v.selectedTemplates);return v.selectedTemplates=[],e},v.deleteSelectedTemplates=function(e){var t=i.confirm().title("Are you sure want to delete the selected templates?").htmlContent("<b>"+v.selectedTemplates.length+" selected</b> will be deleted.").ariaLabel("delete Templates").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTemplates.forEach(function(e){A(e)}),v.selectedTemplates=[]})},v.deselectTemplates=function(){v.selectedTemplates=[]},v.selectAllTemplates=function(){v.selectedTemplates=v.templates.rows};var h=!0,b=1;function f(e){v.templates=e||{count:0,rows:[]}}function A(e){l.template.delete({id:e.id}).$promise.then(function(){_.remove(v.templates.rows,{id:e.id}),v.templates.count-=1,v.templates.rows.length||v.getTemplates(),c.success({title:"Template deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtemplate"}];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:"SYSTEM:DELETEtemplate",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTemplates())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","templates","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TemplatesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_TRIGGER",u.trigger=angular.copy(r),u.triggers=s,u.newTrigger=!1,u.trigger||(u.trigger={channel:"voice"},u.title="TOOLS.NEW_TRIGGER",u.newTrigger=!0),u.addNewTrigger=function(){u.errors=[],l.trigger.save(u.trigger).$promise.then(function(e){u.triggers.unshift(e.toJSON()),o.success({title:"Trigger properly created",msg:u.trigger.name?u.trigger.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTrigger=function(){u.errors=[],l.trigger.update({id:u.trigger.id},u.trigger).$promise.then(function(e){var t=_.find(u.triggers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Trigger properly saved!",msg:u.trigger.name?u.trigger.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTrigger=function(e){u.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(){l.trigger.delete({id:u.trigger.id}).$promise.then(function(){_.remove(u.triggers,{id:u.trigger.id}),o.success({title:"Trigger properly deleted!",msg:(u.trigger.name||"trigger")+" has been deleted!"}),p(u.trigger)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","triggers","trigger","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditTriggerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerActions={count:0,rows:[]},c.selectedTriggerActions=[],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'"},{option:"MOTION_BAR",value:"'motionbar'"},{option:"JSCRIPTY",value:"'jscripty'"},{option:"URL_FORWARD",value:"'urlForward'"},{option:"BROWSER",value:"'browser'"}],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'"},{option:"Salesforce",value:"'salesforce'"},{option:"SugarCRM",value:"'sugarcrm'"},{option:"Freshdesk",value:"'freshdesk'"},{option:"Desk",value:"'desk'"},{option:"Zoho",value:"'zoho'"},{option:"vTiger",value:"'vtiger'"}],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){c.trigger=e,c.query.id=c.trigger.id,c.query.ActionId=c.trigger.id,c.getTriggerActions()},c.deleteConfirm=function(e,t){var n=o.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");o.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){o.show({controller:"CreateOrEditActionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/edit/actions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:c.trigger,action:t,actions:c.triggerActions.rows,license:null,setting:null}})},c.exportSelectedTriggerActions=function(){var e=angular.copy(c.selectedTriggerActions);return c.selectedTriggerActions=[],e},c.deleteTriggerAction=g,c.deleteSelectedTriggerActions=function(e){var t=o.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");o.show(t).then(function(){c.selectedTriggerActions.forEach(function(e){g(e)}),c.selectedTriggerActions=[]})},l.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.lists=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",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=_.keyBy(e.rows||[],"id")}).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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzendeskAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdeskAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzohoAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsalesforceAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsugarcrmAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfreshdeskAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvtigerAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzendeskConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdeskConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzohoConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsalesforceConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsugarcrmConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfreshdeskConfigurations",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvtigerConfigurations",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=_.keyBy(e.rows||[],"id")}).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,o,s,r,l,d,c,m,u){var p=this;function g(e){a.hide(e)}p.errors=[],p.setting=u,p.license=m,p.passwordPattern=p.setting&&p.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",p.title="TOOLS.EDIT_ACTION",p.action=angular.copy(r),p.actions=s,p.newAction=!1,p.trigger=angular.copy(l),p.action||(p.action={data3:"0",data4:"0",data5:"800",data6:"600"},p.title="TOOLS.NEW_ACTION",p.newAction=!0),t.params.id&&(p.action.ActionId=t.params.id),p.addNewAction=function(){p.errors=[],d.trigger.addAction({id:t.params.id},p.action).$promise.then(function(e){p.actions.unshift(e.toJSON()),o.success({title:"Action properly created",msg:p.action.name?p.action.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.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()})})},p.saveAction=function(){p.errors=[],d.action.update({id:p.action.id},p.action).$promise.then(function(e){var t=_.find(p.actions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Action properly saved!",msg:p.action.name?p.action.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.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()})})},p.deleteAction=function(e){p.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(){d.action.delete({id:p.action.id}).$promise.then(function(){_.remove(p.actions,{id:p.action.id}),o.success({title:"Action properly deleted!",msg:(p.action.name||"action")+" has been deleted!"}),g(p.action)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.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(){})},p.getDateFromString=function(e){return new Date(e)},p.closeDialog=g,d.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){p.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.jscriptyProject.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){p.projects=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intZendeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.zendeskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzendeskAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intDeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.deskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdeskAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intZohoAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.zohoAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzohoAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intSalesforceAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.salesforceAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsalesforceAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intSugarcrmAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.sugarcrmAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsugarcrmAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intFreshdeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.freshdeskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfreshdeskAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intVtigerAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.vtigerAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvtigerAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intZendeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.zendeskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzendeskConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intDeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.deskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdeskConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intZohoConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.zohoConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETzohoConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intSalesforceConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.salesforceConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsalesforceConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intSugarcrmConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.sugarcrmConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsugarcrmConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intFreshdeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.freshdeskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfreshdeskConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.intVtigerConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){p.vtigerConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvtigerConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.template.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.templates=e.rows||[]}).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","toasty","actions","action","trigger","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditActionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerAllConditions={count:0,rows:[]},c.selectedTriggerAllConditions=[],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){c.trigger=e,c.query.id=c.trigger.id,c.query.TriggerAllId=c.trigger.id,c.getTriggerAllConditions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getTriggerAllConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAllConditions(c.query,p).$promise},c.createOrEditTriggerAllCondition=function(e,t){o.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}})},c.exportSelectedTriggerAllConditions=function(){var e=angular.copy(c.selectedTriggerAllConditions);return c.selectedTriggerAllConditions=[],e},c.deleteTriggerAllCondition=g,c.deleteSelectedTriggerAllConditions=function(e){var t=o.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");o.show(t).then(function(){c.selectedTriggerAllConditions.forEach(function(e){g(e)}),c.selectedTriggerAllConditions=[]})},l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){c.queues=_.keyBy(e.rows||[],"name")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",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=_.keyBy(e.rows||[],"id")}).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 m=!0,u=1;function p(e){c.triggerAllConditions=e||{count:0,rows:[]}}function g(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){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),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,i,o,s,r,l,d,c,m,u){var p=this;function g(e){a.hide(e)}p.errors=[],p.setting=u,p.license=m,p.passwordPattern=p.setting&&p.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",p.title="TOOLS.EDIT_ALLCONDITION",p.allCondition=angular.copy(r),p.allconditions=s,p.newAllCondition=!1,p.trigger=angular.copy(l),p.allCondition||(p.allCondition={field:"queue",operator:"equals",value:"abandoned",value:"opened",value:"in"},p.title="TOOLS.NEW_ALLCONDITION",p.newAllCondition=!0),t.params.id&&(p.allCondition.TriggerAllId=t.params.id),p.addNewAllCondition=function(){p.errors=[],d.trigger.addAllCondition({id:t.params.id},p.allCondition).$promise.then(function(e){p.allconditions.unshift(e.toJSON()),o.success({title:"AllCondition properly created",msg:p.allCondition.name?p.allCondition.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.condition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.saveAllCondition=function(){p.errors=[],d.condition.update({id:p.allCondition.id},p.allCondition).$promise.then(function(e){var t=_.find(p.allconditions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"AllCondition properly saved!",msg:p.allCondition.name?p.allCondition.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.condition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.deleteAllCondition=function(e){p.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(){d.condition.delete({id:p.allCondition.id}).$promise.then(function(){_.remove(p.allconditions,{id:p.allCondition.id}),o.success({title:"AllCondition properly deleted!",msg:(p.allCondition.name||"allCondition")+" has been deleted!"}),g(p.allCondition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.condition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.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(){})},p.getDateFromString=function(e){return new Date(e)},p.closeDialog=g,d.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.chatAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.mailAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.smsAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.faxAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.openchannelAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){p.queues=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",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){p.outboundRoutes=e.rows||[]}).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","toasty","allconditions","allCondition","trigger","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditAllConditionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerAnyConditions={count:0,rows:[]},c.selectedTriggerAnyConditions=[],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){c.trigger=e,c.query.id=c.trigger.id,c.query.TriggerAnyId=c.trigger.id,c.getTriggerAnyConditions()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getTriggerAnyConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAnyConditions(c.query,p).$promise},c.createOrEditTriggerAnyCondition=function(e,t){o.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}})},c.exportSelectedTriggerAnyConditions=function(){var e=angular.copy(c.selectedTriggerAnyConditions);return c.selectedTriggerAnyConditions=[],e},c.deleteTriggerAnyCondition=g,c.deleteSelectedTriggerAnyConditions=function(e){var t=o.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");o.show(t).then(function(){c.selectedTriggerAnyConditions.forEach(function(e){g(e)}),c.selectedTriggerAnyConditions=[]})},l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",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=_.keyBy(e.rows||[],"id")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){c.queues=_.keyBy(e.rows||[],"name")}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",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=_.keyBy(e.rows||[],"id")}).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 m=!0,u=1;function p(e){c.triggerAnyConditions=e||{count:0,rows:[]}}function g(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){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),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,i,o,s,r,l,d,c,m,u){var p=this;function g(e){a.hide(e)}p.errors=[],p.setting=u,p.license=m,p.passwordPattern=p.setting&&p.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",p.title="TOOLS.EDIT_ANYCONDITION",p.anyCondition=angular.copy(r),p.anyconditions=s,p.newAnyCondition=!1,p.trigger=angular.copy(l),p.anyCondition||(p.anyCondition={field:"queue",operator:"equals",value:"abandoned",value:"opened",value:"in"},p.title="TOOLS.NEW_ANYCONDITION",p.newAnyCondition=!0),t.params.id&&(p.anyCondition.TriggerAnyId=t.params.id),p.addNewAnyCondition=function(){p.errors=[],d.trigger.addAnyCondition({id:t.params.id},p.anyCondition).$promise.then(function(e){p.anyconditions.unshift(e.toJSON()),o.success({title:"AnyCondition properly created",msg:p.anyCondition.name?p.anyCondition.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.condition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.saveAnyCondition=function(){p.errors=[],d.condition.update({id:p.anyCondition.id},p.anyCondition).$promise.then(function(e){var t=_.find(p.anyconditions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"AnyCondition properly saved!",msg:p.anyCondition.name?p.anyCondition.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.condition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.deleteAnyCondition=function(e){p.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(){d.condition.delete({id:p.anyCondition.id}).$promise.then(function(){_.remove(p.anyconditions,{id:p.anyCondition.id}),o.success({title:"AnyCondition properly deleted!",msg:(p.anyCondition.name||"anyCondition")+" has been deleted!"}),g(p.anyCondition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.condition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.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(){})},p.getDateFromString=function(e){return new Date(e)},p.closeDialog=g,d.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.chatAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.mailAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.smsAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.faxAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){p.openchannelAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){p.queues=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",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){p.outboundRoutes=e.rows||[]}).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","toasty","anyconditions","anyCondition","trigger","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditAnyConditionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.trigger=d||e.params.trigger||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoTriggers=function(){e.go("app.tools.triggers")},c.saveTrigger=function(){s.trigger.update({id:c.trigger.id},c.trigger).$promise.then(function(){r.success({title:"Trigger updated!",msg:c.trigger.name?c.trigger.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","trigger"],angular.module("app.tools").controller("TriggerController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.triggers=r||{count:0,rows:[]},v.table="triggers",v.listOrder="",v.listOrderAsc=null,v.selectedTriggers=[],v.query={fields:"createdAt,updatedAt,id,name,channel,status,description",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v.editstate=function(e,t){n.go("app.tools.triggers.edit",{id:e.id,trigger:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the trigger?").htmlContent("<b>"+(e.name||"trigger")+"</b> will be deleted.").ariaLabel("delete trigger").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTriggers=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.trigger.get(v.query,f).$promise},v.createOrEditTrigger=function(e,t){i.show({controller:"CreateOrEditTriggerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:t,triggers:v.triggers.rows,license:v.license,setting:v.setting}})},v.deleteTrigger=A,v.exportSelectedTriggers=function(){var e=angular.copy(v.selectedTriggers);return v.selectedTriggers=[],e},v.deleteSelectedTriggers=function(e){var t=i.confirm().title("Are you sure want to delete the selected triggers?").htmlContent("<b>"+v.selectedTriggers.length+" selected</b> will be deleted.").ariaLabel("delete Triggers").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTriggers.forEach(function(e){A(e)}),v.selectedTriggers=[]})},v.deselectTriggers=function(){v.selectedTriggers=[]},v.selectAllTriggers=function(){v.selectedTriggers=v.triggers.rows};var h=!0,b=1;function f(e){v.triggers=e||{count:0,rows:[]}}function A(e){l.trigger.delete({id:e.id}).$promise.then(function(){_.remove(v.triggers.rows,{id:e.id}),v.triggers.count-=1,v.triggers.rows.length||v.getTriggers(),c.success({title:"Trigger deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtrigger"}];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:"SYSTEM:DELETEtrigger",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTriggers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","triggers","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TriggersController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_TRUNK",u.trunk=angular.copy(r),u.trunks=s,u.newTrunk=!1,u.trunk||(u.trunk={active:!0,type:"friend",dtmfmode:"rfc2833",qualify:"yes",t38pt_udptl:"no"},u.title="TOOLS.NEW_TRUNK",u.newTrunk=!0),u.addNewTrunk=function(){u.errors=[],l.trunk.save(u.trunk).$promise.then(function(e){u.trunks.unshift(e.toJSON()),o.success({title:"Trunk properly created",msg:u.trunk.name?u.trunk.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveTrunk=function(){u.errors=[],l.trunk.update({id:u.trunk.id},u.trunk).$promise.then(function(e){var t=_.find(u.trunks,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Trunk properly saved!",msg:u.trunk.name?u.trunk.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteTrunk=function(e){u.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(){l.trunk.delete({id:u.trunk.id}).$promise.then(function(){_.remove(u.trunks,{id:u.trunk.id}),o.success({title:"Trunk properly deleted!",msg:(u.trunk.name||"trunk")+" has been deleted!"}),p(u.trunk)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","trunks","trunk","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditTrunkDialogController",e)}(),function(){"use strict";function e(t,n,a,e,i,o,s){var r=this;function l(e){t.hide(e)}r.newTrunk=!0,r.trunk=angular.copy(i),r.trunks=o,r.title=s.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,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.trunk=d||n.params.trunk||{},c.selectedTab=n.params.tab||0,c.gotogoto=function(e,t){n.go("app.voice.realtime.trunks",{})},c.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:c.trunks?c.trunks.rows:[]}})},c.alert=r.info,c.gotoTrunks=function(){n.go("app.tools.trunks")},c.saveTrunk=function(){s.trunk.update({id:c.trunk.id},c.trunk).$promise.then(function(){r.success({title:"Trunk updated!",msg:c.trunk.name?c.trunk.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunk",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","trunk"],angular.module("app.tools").controller("TrunkController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.trunks=r||{count:0,rows:[]},v.table="trunks",v.listOrder="",v.listOrderAsc=null,v.selectedTrunks=[],v.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,otherFields",sort:"-updatedAt",limit:10,page:1},v.arraytype=_.keyBy([{option:"Friend",value:"'friend'"},{option:"User",value:"'user'"},{option:"Peer",value:"'peer'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.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"),"")}),v.arrayqualify=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayinsecure=_.keyBy([{option:"port",value:"'port'"},{option:"invite",value:"'invite'"},{option:"very",value:"'very'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arraycallcounter=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayusereqphone=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraytrustrpid=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysendrpid=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"pai",value:"'pai'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayencryption=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.editstate=function(e,t){n.go("app.tools.trunks.edit",{id:e.id,trunk:e})},v.clonedialog=function(e,t){i.show({controller:"TrunkcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/trunks/edit/clone/clone.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{trunk:e,trunks:v.trunks?v.trunks.rows:[]}})},v.gotorealtimegoto=function(e,t){n.go("app.voice.realtime.trunks",{})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the trunk?").htmlContent("<b>"+(e.name||"trunk")+"</b> will be deleted.").ariaLabel("delete trunk").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getTrunks=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.trunk.get(v.query,f).$promise},v.createOrEditTrunk=function(e,t){i.show({controller:"CreateOrEditTrunkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/trunks/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{trunk:t,trunks:v.trunks.rows,license:v.license,setting:v.setting}})},v.deleteTrunk=A,v.exportSelectedTrunks=function(){var e=angular.copy(v.selectedTrunks);return v.selectedTrunks=[],e},v.deleteSelectedTrunks=function(e){var t=i.confirm().title("Are you sure want to delete the selected trunks?").htmlContent("<b>"+v.selectedTrunks.length+" selected</b> will be deleted.").ariaLabel("delete Trunks").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedTrunks.forEach(function(e){A(e)}),v.selectedTrunks=[]})},v.deselectTrunks=function(){v.selectedTrunks=[]},v.selectAllTrunks=function(){v.selectedTrunks=v.trunks.rows};var h=!0,b=1;function f(e){v.trunks=e||{count:0,rows:[]}}function A(e){l.trunk.delete({id:e.id}).$promise.then(function(){_.remove(v.trunks.rows,{id:e.id}),v.trunks.count-=1,v.trunks.rows.length||v.getTrunks(),c.success({title:"Trunk deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtrunk"}];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:"SYSTEM:DELETEtrunk",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getTrunks())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","trunks","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TrunksController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="TOOLS.EDIT_VARIABLE",u.variable=angular.copy(r),u.variables=s,u.newVariable=!1,u.variable||(u.variable={},u.title="TOOLS.NEW_VARIABLE",u.newVariable=!0),u.addNewVariable=function(){u.errors=[],l.variable.save(u.variable).$promise.then(function(e){u.variables.unshift(e.toJSON()),o.success({title:"Variable properly created",msg:u.variable.name?u.variable.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVariable=function(){u.errors=[],l.variable.update({id:u.variable.id},u.variable).$promise.then(function(e){var t=_.find(u.variables,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Variable properly saved!",msg:u.variable.name?u.variable.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVariable=function(e){u.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(){l.variable.delete({id:u.variable.id}).$promise.then(function(){_.remove(u.variables,{id:u.variable.id}),o.success({title:"Variable properly deleted!",msg:(u.variable.name||"variable")+" has been deleted!"}),p(u.variable)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","variables","variable","api","Auth","license","setting"],angular.module("app.tools").controller("CreateOrEditVariableDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.variables=r||{count:0,rows:[]},v.table="variables",v.listOrder="",v.listOrderAsc=null,v.selectedVariables=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditVariableDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/variables/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{variable:e,variables:v.variables.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the variable?").htmlContent("<b>"+(e.name||"variable")+"</b> will be deleted.").ariaLabel("delete variable").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getVariables=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.variable.get(v.query,f).$promise},v.createOrEditVariable=function(e,t){i.show({controller:"CreateOrEditVariableDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/variables/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{variable:t,variables:v.variables.rows,license:v.license,setting:v.setting}})},v.deleteVariable=A,v.exportSelectedVariables=function(){var e=angular.copy(v.selectedVariables);return v.selectedVariables=[],e},v.deleteSelectedVariables=function(e){var t=i.confirm().title("Are you sure want to delete the selected variables?").htmlContent("<b>"+v.selectedVariables.length+" selected</b> will be deleted.").ariaLabel("delete Variables").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVariables.forEach(function(e){A(e)}),v.selectedVariables=[]})},v.deselectVariables=function(){v.selectedVariables=[]},v.selectAllVariables=function(){v.selectedVariables=v.variables.rows};var h=!0,b=1;function f(e){v.variables=e||{count:0,rows:[]}}function A(e){l.variable.delete({id:e.id}).$promise.then(function(){_.remove(v.variables.rows,{id:e.id}),v.variables.count-=1,v.variables.rows.length||v.getVariables(),c.success({title:"Variable deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvariable"}];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:"SYSTEM:DELETEvariable",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVariables())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","variables","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("VariablesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.chanSpies=r||{count:0,rows:[]},v.table="chanSpies",v.listOrder="",v.listOrderAsc=null,v.selectedChanSpies=[],v.query={fields:"createdAt,updatedAt,id,name,prefix,options,auth,password,record,recordingFormat,description",sort:"-updatedAt",limit:10,page:1},v.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"),"")}),v.arrayrecordingFormat=_.keyBy([{option:"wav",value:"'wav'"},{option:"gsm",value:"'gsm'"},{option:"wav49",value:"'WAV'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editdialog=function(e,t){i.show({controller:"CreateOrEditchanSpyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/chanSpies/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{chanSpy:e,chanSpies:v.chanSpies.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the chanSpy?").htmlContent("<b>"+(e.name||"chanSpy")+"</b> will be deleted.").ariaLabel("delete chanSpy").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getChanSpies=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceChanSpy.get(v.query,f).$promise},v.createOrEditchanSpy=function(e,t){i.show({controller:"CreateOrEditchanSpyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/chanSpies/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chanSpy:t,chanSpies:v.chanSpies.rows,license:v.license,setting:v.setting}})},v.deletechanSpy=A,v.exportSelectedChanSpies=function(){var e=angular.copy(v.selectedChanSpies);return v.selectedChanSpies=[],e},v.deleteSelectedChanSpies=function(e){var t=i.confirm().title("Are you sure want to delete the selected chanSpies?").htmlContent("<b>"+v.selectedChanSpies.length+" selected</b> will be deleted.").ariaLabel("delete chanSpys").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedChanSpies.forEach(function(e){A(e)}),v.selectedChanSpies=[]})},v.deselectChanSpies=function(){v.selectedChanSpies=[]},v.selectAllChanSpies=function(){v.selectedChanSpies=v.chanSpies.rows};var h=!0,b=1;function f(e){v.chanSpies=e||{count:0,rows:[]}}function A(e){l.voiceChanSpy.delete({id:e.id}).$promise.then(function(){_.remove(v.chanSpies.rows,{id:e.id}),v.chanSpies.count-=1,v.chanSpies.rows.length||v.getChanSpies(),c.success({title:"chanSpy deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceChanSpy"}];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:"SYSTEM:DELETEvoiceChanSpy",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getChanSpies())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","chanSpies","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("ChanSpiesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_CHANSPY",u.chanSpy=angular.copy(r),u.chanSpies=s,u.newchanSpy=!1,u.chanSpy||(u.chanSpy={recordingFormat:"wav"},u.title="VOICE.NEW_CHANSPY",u.newchanSpy=!0),u.addNewchanSpy=function(){u.errors=[],l.voiceChanSpy.save(u.chanSpy).$promise.then(function(e){u.chanSpies.unshift(e.toJSON()),o.success({title:"chanSpy properly created",msg:u.chanSpy.name?u.chanSpy.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.savechanSpy=function(){u.errors=[],l.voiceChanSpy.update({id:u.chanSpy.id},u.chanSpy).$promise.then(function(e){var t=_.find(u.chanSpies,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"chanSpy properly saved!",msg:u.chanSpy.name?u.chanSpy.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deletechanSpy=function(e){u.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(){l.voiceChanSpy.delete({id:u.chanSpy.id}).$promise.then(function(){_.remove(u.chanSpies,{id:u.chanSpy.id}),o.success({title:"chanSpy properly deleted!",msg:(u.chanSpy.name||"chanSpy")+" has been deleted!"}),p(u.chanSpy)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","chanSpies","chanSpy","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditchanSpyDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.contexts=r||{count:0,rows:[]},v.table="contexts",v.listOrder="",v.listOrderAsc=null,v.selectedContexts=[],v.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",defaultEntry:"false",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditContextDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/contexts/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{context:e,contexts:v.contexts.rows,license:v.license,setting:null}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the context?").htmlContent("<b>"+(e.name||"context")+"</b> will be deleted.").ariaLabel("delete context").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getContexts=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceContext.get(v.query,f).$promise},v.createOrEditContext=function(e,t){i.show({controller:"CreateOrEditContextDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/contexts/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{context:t,contexts:v.contexts.rows,license:v.license,setting:v.setting}})},v.deleteContext=A,v.exportSelectedContexts=function(){var e=angular.copy(v.selectedContexts);return v.selectedContexts=[],e},v.deleteSelectedContexts=function(e){var t=i.confirm().title("Are you sure want to delete the selected contexts?").htmlContent("<b>"+v.selectedContexts.length+" selected</b> will be deleted.").ariaLabel("delete Contexts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedContexts.forEach(function(e){A(e)}),v.selectedContexts=[]})},v.deselectContexts=function(){v.selectedContexts=[]},v.selectAllContexts=function(){v.selectedContexts=v.contexts.rows};var h=!0,b=1;function f(e){v.contexts=e||{count:0,rows:[]}}function A(e){l.voiceContext.delete({id:e.id}).$promise.then(function(){_.remove(v.contexts.rows,{id:e.id}),v.contexts.count-=1,v.contexts.rows.length||v.getContexts(),c.success({title:"Context deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceContext"}];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:"SYSTEM:DELETEvoiceContext",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getContexts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","contexts","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("ContextsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_CONTEXT",u.context=angular.copy(r),u.contexts=s,u.newContext=!1,u.context||(u.context={},u.title="VOICE.NEW_CONTEXT",u.newContext=!0),u.addNewContext=function(){u.errors=[],l.voiceContext.save(u.context).$promise.then(function(e){u.contexts.unshift(e.toJSON()),o.success({title:"Context properly created",msg:u.context.name?u.context.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveContext=function(){u.errors=[],l.voiceContext.update({id:u.context.id},u.context).$promise.then(function(e){var t=_.find(u.contexts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Context properly saved!",msg:u.context.name?u.context.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteContext=function(e){u.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(){l.voiceContext.delete({id:u.context.id}).$promise.then(function(){_.remove(u.contexts,{id:u.context.id}),o.success({title:"Context properly deleted!",msg:(u.context.name||"context")+" has been deleted!"}),p(u.context)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","contexts","context","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditContextDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_INBOUNDROUTE",u.inboundroute=angular.copy(r),u.inboundroutes=s,u.newInboundRoute=!1,u.inboundroute||(u.inboundroute={appdata:"Inbound Call",type:"inbound",context:"from-voip-provider"},u.title="VOICE.NEW_INBOUNDROUTE",u.newInboundRoute=!0),u.addNewInboundRoute=function(){u.errors=[],l.voiceExtension.save(u.inboundroute).$promise.then(function(e){u.inboundroutes.unshift(e.toJSON()),o.success({title:"InboundRoute properly created",msg:u.inboundroute.name?u.inboundroute.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveInboundRoute=function(){u.errors=[],l.voiceExtension.update({id:u.inboundroute.id},u.inboundroute).$promise.then(function(e){var t=_.find(u.inboundroutes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"InboundRoute properly saved!",msg:u.inboundroute.name?u.inboundroute.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteInboundRoute=function(e){u.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(){l.voiceExtension.delete({id:u.inboundroute.id}).$promise.then(function(){_.remove(u.inboundroutes,{id:u.inboundroute.id}),o.success({title:"InboundRoute properly deleted!",msg:(u.inboundroute.name||"inboundroute")+" has been deleted!"}),p(u.inboundroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){u.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","toasty","inboundroutes","inboundroute","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditInboundRouteDialogController",e)}(),function(){"use strict";function e(m,i,a,o,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}}).then(function(e){e&&(e.id?u.inboundrouteApps.rows[t]=e:u.inboundrouteApps.rows.splice(t,0,e),s())}).catch(function(e){e&&o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function s(){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 o=u.inboundrouteApps.rows[a],s=[],r=[];o.intervals="*,*,*,*"!==o.interval?[o.interval]:o.IntervalId?_.map(_.filter(u.intervals.rows,{IntervalId:o.IntervalId}),"interval"):[],o.context=u.inboundroute.context,o.exten=u.inboundroute.exten,o.type&&(o.type=o.type.toLowerCase()),o.hasOwnProperty("answer")&&e.includes(o.app.toLowerCase())&&"custom"!==o.appType&&(o.answer?(s.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-ANSWER}=0]?Answer",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id}),s.push({type:o.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-ANSWER=1",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id})):(s.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-PROGRESS}=0]?Progress",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id}),s.push({type:o.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-PROGRESS=1",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id})));for(var l=0;l<o.intervals.length;l++){var d=t+o.intervals.length,c=l===o.intervals.length-1?t+s.length+r.length+2:t+l+1;s.splice(l,0,{type:"inbound",app:"GotoIfTime",appdata:o.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})}o.priority=s.length?_.last(s).priority+1:t,t=(r.length?_.last(r).priority:o.priority)+1,n=_.concat(n,s,[o],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.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",route:"sound",filters:{fields:"name,save_name",sort:"name"}},{name:"queues",route:"voiceQueue",filters:{type:"inbound",fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"sound",filters:{fields:"name,save_name",sort:"name"}}],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",route:"user",filters:{fields:"name",sort:"name"}}],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",route:"trunk",filters:{fields:"name",sort:"name"}}],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",route:"user",filters:{fields:"name",sort:"name"}}],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",route:"squareProject",filters:{fields:"name",sort:"name"}}],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",route:"voiceContext",filters:{fields:"name",sort:"name"}}],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",route:"variable",filters:{fields:"name",sort:"name"}}],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",route:"voiceMail",filters:{fields:"mailbox",sort:"mailbox"}}],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){s()}},u.init=function(e){u.inboundroute=e,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),s()},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:[]}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,s())})}},u.deleteInboundRouteApp=function(e){_.remove(u.inboundrouteApps.rows,{id:e.id}),s(),o.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=[],s()})},u.rewriteRouting=s,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,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.agi=angular.copy(e),o.agi.appdata)switch(o.agi.appType?o.agi.appType.toLowerCase():o.agi.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agi.appdata.split(",");o.agi.key=s[0],o.agi.language=s[1],o.agi.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agi.appdata.split(",");o.agi.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agi.text=s.slice(1,s.length).join(",");break;case"message":o.agi.text=o.agi.appdata;break;case"set":o.agi.name=o.agi.appdata.split("=")[0],o.agi.value=o.agi.appdata.split("=")[1];break;case"agi":o.agi.project=o.agi.appdata;break;default:var r=o.agi.appdata.split(",");o.agi.project=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.agi.type&&"outbound"===o.agi.type.toLowerCase()&&"outbounddial"===o.agi.appType.toLowerCase()&&(o.agi.prefix=o.agi.phone?o.agi.phone.split("$")[0]:void 0,o.agi.callerId=o.agi.callerID?"CALLERID(all)="+o.agi.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.agi.type&&"outbound"===o.agi.type.toLowerCase()&&"outboundDial"===o.agi.appType&&(o.agi.phone=a.cutdigits?(o.agi.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agi.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agi.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agi.options+="U(xcally-mixmonitor-context)"):o.agi.options=o.agi.options.replace("U(xcally-mixmonitor-context)",""));if(o.agi.appType&&"custom"===o.agi.appType);else switch((o.agi.app||o.agi.appType).toLowerCase()){case"set":o.agi.appdata=o.agi.name+"="+o.agi.value;break;case"custom":break;default:e[0]=o.agi.project,o.agi.appdata=e.join(",")}l(o.agi)},o.closeDialog=l,i.squareProject.get({fields:"name",sort:"name"}).$promise.then(function(e){o.projects=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppagiDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.custom=angular.copy(n),o.custom.appdata)switch(o.custom.appType?o.custom.appType.toLowerCase():o.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.custom.appdata.split(",");o.custom.key=s[0],o.custom.language=s[1],o.custom.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.custom.appdata.split(",");o.custom.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.custom.text=s.slice(1,s.length).join(",");break;case"message":o.custom.text=o.custom.appdata;break;case"set":o.custom.name=o.custom.appdata.split("=")[0],o.custom.value=o.custom.appdata.split("=")[1];break;case"agi":o.custom.project=o.custom.appdata;break;default:var r=o.custom.appdata.split(",");o.custom.app=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.custom.appdata=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outbounddial"===o.custom.appType.toLowerCase()&&(o.custom.prefix=o.custom.phone?o.custom.phone.split("$")[0]:void 0,o.custom.callerId=o.custom.callerID?"CALLERID(all)="+o.custom.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outboundDial"===o.custom.appType&&(o.custom.phone=a.cutdigits?(o.custom.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.custom.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.custom.options+="U(xcally-mixmonitor-context)"):o.custom.options=o.custom.options.replace("U(xcally-mixmonitor-context)",""));if(o.custom.appType&&"custom"===o.custom.appType);else switch((o.custom.app||o.custom.appType).toLowerCase()){case"set":o.custom.appdata=o.custom.name+"="+o.custom.value;break;case"custom":break;default:e[0]=o.custom.app,e[1]=o.custom.appdata,o.custom.appdata=e.join(",")}l(o.custom)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppcustomDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.dial=angular.copy(n),o.dial.appdata)switch(o.dial.appType?o.dial.appType.toLowerCase():o.dial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.dial.appdata.split(",");o.dial.key=s[0],o.dial.language=s[1],o.dial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.dial.appdata.split(",");o.dial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.dial.text=s.slice(1,s.length).join(",");break;case"message":o.dial.text=o.dial.appdata;break;case"set":o.dial.name=o.dial.appdata.split("=")[0],o.dial.value=o.dial.appdata.split("=")[1];break;case"agi":o.dial.project=o.dial.appdata;break;default:var r=o.dial.appdata.split(",");o.dial.tech=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.dial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.dial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.dial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.dial.type&&"outbound"===o.dial.type.toLowerCase()&&"outbounddial"===o.dial.appType.toLowerCase()&&(o.dial.prefix=o.dial.phone?o.dial.phone.split("$")[0]:void 0,o.dial.callerId=o.dial.callerID?"CALLERID(all)="+o.dial.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.dial.type&&"outbound"===o.dial.type.toLowerCase()&&"outboundDial"===o.dial.appType&&(o.dial.phone=a.cutdigits?(o.dial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.dial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.dial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.dial.options+="U(xcally-mixmonitor-context)"):o.dial.options=o.dial.options.replace("U(xcally-mixmonitor-context)",""));if(o.dial.appType&&"custom"===o.dial.appType);else switch((o.dial.app||o.dial.appType).toLowerCase()){case"set":o.dial.appdata=o.dial.name+"="+o.dial.value;break;case"custom":break;default:e[0]=o.dial.tech,e[1]=o.dial.timeout,e[2]=o.dial.options,e[3]=o.dial.url,o.dial.appdata=e.join(",")}l(o.dial)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppdialDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.externaldial=angular.copy(e),o.externaldial.appdata)switch(o.externaldial.appType?o.externaldial.appType.toLowerCase():o.externaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.externaldial.appdata.split(",");o.externaldial.key=s[0],o.externaldial.language=s[1],o.externaldial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.externaldial.appdata.split(",");o.externaldial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.externaldial.text=s.slice(1,s.length).join(",");break;case"message":o.externaldial.text=o.externaldial.appdata;break;case"set":o.externaldial.name=o.externaldial.appdata.split("=")[0],o.externaldial.value=o.externaldial.appdata.split("=")[1];break;case"agi":o.externaldial.project=o.externaldial.appdata;break;default:var r=o.externaldial.appdata.split(",");o.externaldial.trunk=r[0].split("/")[1],o.externaldial.phone=r[0].split("/")[2],o.externaldial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.externaldial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.externaldial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.externaldial.type&&"outbound"===o.externaldial.type.toLowerCase()&&"outbounddial"===o.externaldial.appType.toLowerCase()&&(o.externaldial.prefix=o.externaldial.phone?o.externaldial.phone.split("$")[0]:void 0,o.externaldial.callerId=o.externaldial.callerID?"CALLERID(all)="+o.externaldial.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.externaldial.type&&"outbound"===o.externaldial.type.toLowerCase()&&"outboundDial"===o.externaldial.appType&&(o.externaldial.phone=a.cutdigits?(o.externaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.externaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.externaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.externaldial.options+="U(xcally-mixmonitor-context)"):o.externaldial.options=o.externaldial.options.replace("U(xcally-mixmonitor-context)",""));if(o.externaldial.appType&&"custom"===o.externaldial.appType);else switch((o.externaldial.app||o.externaldial.appType).toLowerCase()){case"set":o.externaldial.appdata=o.externaldial.name+"="+o.externaldial.value;break;case"custom":break;default:e[0]=["SIP",o.externaldial.trunk,o.externaldial.phone].join("/"),e[1]=o.externaldial.timeout,e[2]=o.externaldial.options,e[3]=o.externaldial.url,o.externaldial.appdata=e.join(",")}l(o.externaldial)},o.closeDialog=l,i.trunk.get({fields:"name",sort:"name"}).$promise.then(function(e){o.trunks=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppexternaldialDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.goto=angular.copy(e),o.goto.appdata)switch(o.goto.appType?o.goto.appType.toLowerCase():o.goto.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.goto.appdata.split(",");o.goto.key=s[0],o.goto.language=s[1],o.goto.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.goto.appdata.split(",");o.goto.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.goto.text=s.slice(1,s.length).join(",");break;case"message":o.goto.text=o.goto.appdata;break;case"set":o.goto.name=o.goto.appdata.split("=")[0],o.goto.value=o.goto.appdata.split("=")[1];break;case"agi":o.goto.project=o.goto.appdata;break;default:var r=o.goto.appdata.split(",");o.goto.context=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.goto.extension=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.goto.priority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.goto.type&&"outbound"===o.goto.type.toLowerCase()&&"outbounddial"===o.goto.appType.toLowerCase()&&(o.goto.prefix=o.goto.phone?o.goto.phone.split("$")[0]:void 0,o.goto.callerId=o.goto.callerID?"CALLERID(all)="+o.goto.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.goto.type&&"outbound"===o.goto.type.toLowerCase()&&"outboundDial"===o.goto.appType&&(o.goto.phone=a.cutdigits?(o.goto.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.goto.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.goto.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.goto.options+="U(xcally-mixmonitor-context)"):o.goto.options=o.goto.options.replace("U(xcally-mixmonitor-context)",""));if(o.goto.appType&&"custom"===o.goto.appType);else switch((o.goto.app||o.goto.appType).toLowerCase()){case"set":o.goto.appdata=o.goto.name+"="+o.goto.value;break;case"custom":break;default:e[0]=o.goto.context,e[1]=o.goto.extension,e[2]=o.goto.priority,o.goto.appdata=e.join(",")}l(o.goto)},o.closeDialog=l,i.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){o.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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppgotoDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.hangup=angular.copy(n),o.hangup.appdata)switch(o.hangup.appType?o.hangup.appType.toLowerCase():o.hangup.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.hangup.appdata.split(",");o.hangup.key=s[0],o.hangup.language=s[1],o.hangup.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.hangup.appdata.split(",");o.hangup.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.hangup.text=s.slice(1,s.length).join(",");break;case"message":o.hangup.text=o.hangup.appdata;break;case"set":o.hangup.name=o.hangup.appdata.split("=")[0],o.hangup.value=o.hangup.appdata.split("=")[1];break;case"agi":o.hangup.project=o.hangup.appdata;break;default:var r=o.hangup.appdata.split(",");o.hangup.appdata=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.hangup.type&&"outbound"===o.hangup.type.toLowerCase()&&"outbounddial"===o.hangup.appType.toLowerCase()&&(o.hangup.prefix=o.hangup.phone?o.hangup.phone.split("$")[0]:void 0,o.hangup.callerId=o.hangup.callerID?"CALLERID(all)="+o.hangup.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.hangup.type&&"outbound"===o.hangup.type.toLowerCase()&&"outboundDial"===o.hangup.appType&&(o.hangup.phone=a.cutdigits?(o.hangup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.hangup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.hangup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.hangup.options+="U(xcally-mixmonitor-context)"):o.hangup.options=o.hangup.options.replace("U(xcally-mixmonitor-context)",""));if(o.hangup.appType&&"custom"===o.hangup.appType);else switch((o.hangup.app||o.hangup.appType).toLowerCase()){case"set":o.hangup.appdata=o.hangup.name+"="+o.hangup.value;break;case"custom":break;default:e[0]=o.hangup.appdata,o.hangup.appdata=e.join(",")}l(o.hangup)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundApphangupDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.internaldial=angular.copy(e),o.internaldial.appdata)switch(o.internaldial.appType?o.internaldial.appType.toLowerCase():o.internaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.internaldial.appdata.split(",");o.internaldial.key=s[0],o.internaldial.language=s[1],o.internaldial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.internaldial.appdata.split(",");o.internaldial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.internaldial.text=s.slice(1,s.length).join(",");break;case"message":o.internaldial.text=o.internaldial.appdata;break;case"set":o.internaldial.name=o.internaldial.appdata.split("=")[0],o.internaldial.value=o.internaldial.appdata.split("=")[1];break;case"agi":o.internaldial.project=o.internaldial.appdata;break;default:var r=o.internaldial.appdata.split(",");o.internaldial.user=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.internaldial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.internaldial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.internaldial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.internaldial.type&&"outbound"===o.internaldial.type.toLowerCase()&&"outbounddial"===o.internaldial.appType.toLowerCase()&&(o.internaldial.prefix=o.internaldial.phone?o.internaldial.phone.split("$")[0]:void 0,o.internaldial.callerId=o.internaldial.callerID?"CALLERID(all)="+o.internaldial.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.internaldial.type&&"outbound"===o.internaldial.type.toLowerCase()&&"outboundDial"===o.internaldial.appType&&(o.internaldial.phone=a.cutdigits?(o.internaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.internaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.internaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.internaldial.options+="U(xcally-mixmonitor-context)"):o.internaldial.options=o.internaldial.options.replace("U(xcally-mixmonitor-context)",""));if(o.internaldial.appType&&"custom"===o.internaldial.appType);else switch((o.internaldial.app||o.internaldial.appType).toLowerCase()){case"set":o.internaldial.appdata=o.internaldial.name+"="+o.internaldial.value;break;case"custom":break;default:e[0]=o.internaldial.user,e[1]=o.internaldial.timeout,e[2]=o.internaldial.options,e[3]=o.internaldial.url,o.internaldial.appdata=e.join(",")}l(o.internaldial)},o.closeDialog=l,i.user.get({fields:"name",sort:"name"}).$promise.then(function(e){o.users=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppinternaldialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditInboundAppintervalDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.playback=angular.copy(e),o.playback.appdata)switch(o.playback.appType?o.playback.appType.toLowerCase():o.playback.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.playback.appdata.split(",");o.playback.key=s[0],o.playback.language=s[1],o.playback.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.playback.appdata.split(",");o.playback.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.playback.text=s.slice(1,s.length).join(",");break;case"message":o.playback.text=o.playback.appdata;break;case"set":o.playback.name=o.playback.appdata.split("=")[0],o.playback.value=o.playback.appdata.split("=")[1];break;case"agi":o.playback.project=o.playback.appdata;break;default:var r=o.playback.appdata.split(",");o.playback.appdata=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.playback.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.playback.type&&"outbound"===o.playback.type.toLowerCase()&&"outbounddial"===o.playback.appType.toLowerCase()&&(o.playback.prefix=o.playback.phone?o.playback.phone.split("$")[0]:void 0,o.playback.callerId=o.playback.callerID?"CALLERID(all)="+o.playback.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.playback.type&&"outbound"===o.playback.type.toLowerCase()&&"outboundDial"===o.playback.appType&&(o.playback.phone=a.cutdigits?(o.playback.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.playback.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.playback.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.playback.options+="U(xcally-mixmonitor-context)"):o.playback.options=o.playback.options.replace("U(xcally-mixmonitor-context)",""));if(o.playback.appType&&"custom"===o.playback.appType);else switch((o.playback.app||o.playback.appType).toLowerCase()){case"set":o.playback.appdata=o.playback.name+"="+o.playback.value;break;case"custom":break;default:e[0]=o.playback.appdata,e[1]=o.playback.options,o.playback.appdata=e.join(",")}l(o.playback)},o.closeDialog=l,i.sound.get({fields:"name,save_name",sort:"name"}).$promise.then(function(e){o.sounds=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppplaybackDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.queue.URL=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.queue.sound=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10),o.queue.timeout=_.isEmpty(r[4])?r[4]:isNaN(r[4])?r[4]:parseInt(r[4],10),o.queue.agi=_.isEmpty(r[5])?r[5]:isNaN(r[5])?r[5]:parseInt(r[5],10),o.queue.macro=_.isEmpty(r[6])?r[6]:isNaN(r[6])?r[6]:parseInt(r[6],10),o.queue.gosub=_.isEmpty(r[7])?r[7]:isNaN(r[7])?r[7]:parseInt(r[7],10),o.queue.rule=_.isEmpty(r[8])?r[8]:isNaN(r[8])?r[8]:parseInt(r[8],10),o.queue.position=_.isEmpty(r[9])?r[9]:isNaN(r[9])?r[9]:parseInt(r[9],10)}function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.options,e[2]=o.queue.URL,e[3]=o.queue.sound,e[4]=o.queue.timeout,e[5]=o.queue.agi,e[6]=o.queue.macro,e[7]=o.queue.gosub,e[8]=o.queue.rule,e[9]=o.queue.position,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.sound.get({fields:"name,save_name",sort:"name"}).$promise.then(function(e){o.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.ringgroup=angular.copy(e),o.ringgroup.appdata)switch(o.ringgroup.appType?o.ringgroup.appType.toLowerCase():o.ringgroup.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.ringgroup.appdata.split(",");o.ringgroup.key=s[0],o.ringgroup.language=s[1],o.ringgroup.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.ringgroup.appdata.split(",");o.ringgroup.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.ringgroup.text=s.slice(1,s.length).join(",");break;case"message":o.ringgroup.text=o.ringgroup.appdata;break;case"set":o.ringgroup.name=o.ringgroup.appdata.split("=")[0],o.ringgroup.value=o.ringgroup.appdata.split("=")[1];break;case"agi":o.ringgroup.project=o.ringgroup.appdata;break;default:var r=o.ringgroup.appdata.split(",");o.ringgroup.multipleUsers=r[0].split("&"),o.ringgroup.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.ringgroup.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.ringgroup.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.ringgroup.type&&"outbound"===o.ringgroup.type.toLowerCase()&&"outbounddial"===o.ringgroup.appType.toLowerCase()&&(o.ringgroup.prefix=o.ringgroup.phone?o.ringgroup.phone.split("$")[0]:void 0,o.ringgroup.callerId=o.ringgroup.callerID?"CALLERID(all)="+o.ringgroup.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.ringgroup.type&&"outbound"===o.ringgroup.type.toLowerCase()&&"outboundDial"===o.ringgroup.appType&&(o.ringgroup.phone=a.cutdigits?(o.ringgroup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.ringgroup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.ringgroup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.ringgroup.options+="U(xcally-mixmonitor-context)"):o.ringgroup.options=o.ringgroup.options.replace("U(xcally-mixmonitor-context)",""));if(o.ringgroup.appType&&"custom"===o.ringgroup.appType);else switch((o.ringgroup.app||o.ringgroup.appType).toLowerCase()){case"set":o.ringgroup.appdata=o.ringgroup.name+"="+o.ringgroup.value;break;case"custom":break;default:e[0]=o.ringgroup.multipleUsers.join("&"),e[1]=o.ringgroup.timeout,e[2]=o.ringgroup.options,e[3]=o.ringgroup.url,o.ringgroup.appdata=e.join(",")}l(o.ringgroup)},o.closeDialog=l,i.user.get({fields:"name",sort:"name"}).$promise.then(function(e){o.users=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppringgroupDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.set=angular.copy(e),o.set.appdata)switch(o.set.appType?o.set.appType.toLowerCase():o.set.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.set.appdata.split(",");o.set.key=s[0],o.set.language=s[1],o.set.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.set.appdata.split(",");o.set.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.set.text=s.slice(1,s.length).join(",");break;case"message":o.set.text=o.set.appdata;break;case"set":o.set.name=o.set.appdata.split("=")[0],o.set.value=o.set.appdata.split("=")[1];break;case"agi":o.set.project=o.set.appdata;break;default:var r=o.set.appdata.split("=");o.set.name=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.set.value=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.set.type&&"outbound"===o.set.type.toLowerCase()&&"outbounddial"===o.set.appType.toLowerCase()&&(o.set.prefix=o.set.phone?o.set.phone.split("$")[0]:void 0,o.set.callerId=o.set.callerID?"CALLERID(all)="+o.set.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.set.type&&"outbound"===o.set.type.toLowerCase()&&"outboundDial"===o.set.appType&&(o.set.phone=a.cutdigits?(o.set.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.set.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.set.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.set.options+="U(xcally-mixmonitor-context)"):o.set.options=o.set.options.replace("U(xcally-mixmonitor-context)",""));if(o.set.appType&&"custom"===o.set.appType);else switch((o.set.app||o.set.appType).toLowerCase()){case"set":o.set.appdata=o.set.name+"="+o.set.value;break;case"custom":break;default:e[0]=o.set.name,e[1]=o.set.value,o.set.appdata=e.join("=")}l(o.set)},o.closeDialog=l,i.variable.get({fields:"name",sort:"name"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppsetDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.voicemail=angular.copy(e),o.voicemail.appdata)switch(o.voicemail.appType?o.voicemail.appType.toLowerCase():o.voicemail.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.voicemail.appdata.split(",");o.voicemail.key=s[0],o.voicemail.language=s[1],o.voicemail.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.voicemail.appdata.split(",");o.voicemail.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.voicemail.text=s.slice(1,s.length).join(",");break;case"message":o.voicemail.text=o.voicemail.appdata;break;case"set":o.voicemail.name=o.voicemail.appdata.split("=")[0],o.voicemail.value=o.voicemail.appdata.split("=")[1];break;case"agi":o.voicemail.project=o.voicemail.appdata;break;default:var r=o.voicemail.appdata.split(",");o.voicemail.voiceMail=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.voicemail.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.voicemail.type&&"outbound"===o.voicemail.type.toLowerCase()&&"outbounddial"===o.voicemail.appType.toLowerCase()&&(o.voicemail.prefix=o.voicemail.phone?o.voicemail.phone.split("$")[0]:void 0,o.voicemail.callerId=o.voicemail.callerID?"CALLERID(all)="+o.voicemail.callerID:void 0),o.saveInboundRouteApp=function(){o.errors=[];var e=[];o.voicemail.type&&"outbound"===o.voicemail.type.toLowerCase()&&"outboundDial"===o.voicemail.appType&&(o.voicemail.phone=a.cutdigits?(o.voicemail.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.voicemail.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.voicemail.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.voicemail.options+="U(xcally-mixmonitor-context)"):o.voicemail.options=o.voicemail.options.replace("U(xcally-mixmonitor-context)",""));if(o.voicemail.appType&&"custom"===o.voicemail.appType);else switch((o.voicemail.app||o.voicemail.appType).toLowerCase()){case"set":o.voicemail.appdata=o.voicemail.name+"="+o.voicemail.value;break;case"custom":break;default:e[0]=o.voicemail.voiceMail,e[1]=o.voicemail.options,o.voicemail.appdata=e.join(",")}l(o.voicemail)},o.closeDialog=l,i.voiceMail.get({fields:"mailbox",sort:"mailbox"}).$promise.then(function(e){o.voiceMails=e.rows||[]}).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","toasty","inboundrouteApp","inboundroute","api"],angular.module("app.voice").controller("EditInboundAppvoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.inboundroute=d||e.params.inboundroute||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoInboundRoutes=function(){e.go("app.voice.inboundroutes")},c.saveInboundRoute=function(){s.voiceExtension.update({id:c.inboundroute.id},c.inboundroute).$promise.then(function(){r.success({title:"InboundRoute updated!",msg:c.inboundroute.name?c.inboundroute.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","inboundroute"],angular.module("app.voice").controller("InboundRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.inboundroutes=r||{count:0,rows:[]},v.table="inboundroutes",v.listOrder="",v.listOrderAsc=null,v.selectedInboundRoutes=[],v.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"inbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},v.editstate=function(e,t){n.go("app.voice.inboundroutes.edit",{id:e.id,inboundroute:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the inboundroute?").htmlContent("<b>"+(e.name||"inboundroute")+"</b> will be deleted.").ariaLabel("delete inboundroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getInboundRoutes=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceExtension.get(v.query,f).$promise},v.createOrEditInboundRoute=function(e,t){i.show({controller:"CreateOrEditInboundRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/inboundroutes/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{inboundroute:t,inboundroutes:v.inboundroutes.rows,license:v.license,setting:v.setting}})},v.deleteInboundRoute=A,v.exportSelectedInboundRoutes=function(){var e=angular.copy(v.selectedInboundRoutes);return v.selectedInboundRoutes=[],e},v.deleteSelectedInboundRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected inboundroutes?").htmlContent("<b>"+v.selectedInboundRoutes.length+" selected</b> will be deleted.").ariaLabel("delete InboundRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedInboundRoutes.forEach(function(e){A(e)}),v.selectedInboundRoutes=[]})},v.deselectInboundRoutes=function(){v.selectedInboundRoutes=[]},v.selectAllInboundRoutes=function(){v.selectedInboundRoutes=v.inboundroutes.rows},l.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){v.contexts=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.inboundroutes=e||{count:0,rows:[]}}function A(e){l.voiceExtension.delete({id:e.id}).$promise.then(function(){_.remove(v.inboundroutes.rows,{id:e.id}),v.inboundroutes.count-=1,v.inboundroutes.rows.length||v.getInboundRoutes(),c.success({title:"InboundRoute deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];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:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getInboundRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","inboundroutes","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("InboundRoutesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_INTERNALROUTE",u.internalroute=angular.copy(r),u.internalroutes=s,u.newInternalRoute=!1,u.internalroute||(u.internalroute={appdata:"Internal Call",type:"internal",context:"from-sip"},u.title="VOICE.NEW_INTERNALROUTE",u.newInternalRoute=!0),u.addNewInternalRoute=function(){u.errors=[],l.voiceExtension.save(u.internalroute).$promise.then(function(e){u.internalroutes.unshift(e.toJSON()),o.success({title:"InternalRoute properly created",msg:u.internalroute.name?u.internalroute.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveInternalRoute=function(){u.errors=[],l.voiceExtension.update({id:u.internalroute.id},u.internalroute).$promise.then(function(e){var t=_.find(u.internalroutes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"InternalRoute properly saved!",msg:u.internalroute.name?u.internalroute.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteInternalRoute=function(e){u.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(){l.voiceExtension.delete({id:u.internalroute.id}).$promise.then(function(){_.remove(u.internalroutes,{id:u.internalroute.id}),o.success({title:"InternalRoute properly deleted!",msg:(u.internalroute.name||"internalroute")+" has been deleted!"}),p(u.internalroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){u.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","toasty","internalroutes","internalroute","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditInternalRouteDialogController",e)}(),function(){"use strict";function e(m,i,a,o,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}}).then(function(e){e&&(e.id?u.internalrouteApps.rows[t]=e:u.internalrouteApps.rows.splice(t,0,e),s())}).catch(function(e){e&&o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function s(){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 o=u.internalrouteApps.rows[a],s=[],r=[];o.intervals="*,*,*,*"!==o.interval?[o.interval]:o.IntervalId?_.map(_.filter(u.intervals.rows,{IntervalId:o.IntervalId}),"interval"):[],o.context=u.internalroute.context,o.exten=u.internalroute.exten,o.type&&(o.type=o.type.toLowerCase()),o.hasOwnProperty("answer")&&e.includes(o.app.toLowerCase())&&"custom"!==o.appType&&(o.answer?(s.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-ANSWER}=0]?Answer",context:u.internalroute.context,exten:u.internalroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id}),s.push({type:o.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-ANSWER=1",context:u.internalroute.context,exten:u.internalroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id})):(s.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-PROGRESS}=0]?Progress",context:u.internalroute.context,exten:u.internalroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id}),s.push({type:o.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-PROGRESS=1",context:u.internalroute.context,exten:u.internalroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id})));for(var l=0;l<o.intervals.length;l++){var d=t+o.intervals.length,c=l===o.intervals.length-1?t+s.length+r.length+2:t+l+1;s.splice(l,0,{type:"internal",app:"GotoIfTime",appdata:o.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})}o.priority=s.length?_.last(s).priority+1:t,t=(r.length?_.last(r).priority:o.priority)+1,n=_.concat(n,s,[o],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.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",route:"sound",filters:{fields:"name,save_name",sort:"name"}},{name:"queues",route:"voiceQueue",filters:{type:"inbound",fields:"id,name,type",sort:"name",nolimit:!0}}],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",route:"sound",filters:{fields:"name,save_name",sort:"name"}}],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",route:"user",filters:{fields:"name",sort:"name"}}],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",route:"trunk",filters:{fields:"name",sort:"name"}}],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",route:"user",filters:{fields:"name",sort:"name"}}],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",route:"squareProject",filters:{fields:"name",sort:"name"}}],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",route:"voiceContext",filters:{fields:"name",sort:"name"}}],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",route:"variable",filters:{fields:"name",sort:"name"}}],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",route:"voiceMail",filters:{fields:"mailbox",sort:"mailbox"}}],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){s()}},u.init=function(e){u.internalroute=e,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),s()},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:[]}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,s())})}},u.deleteInternalRouteApp=function(e){_.remove(u.internalrouteApps.rows,{id:e.id}),s(),o.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=[],s()})},u.rewriteRouting=s,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,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.agi=angular.copy(e),o.agi.appdata)switch(o.agi.appType?o.agi.appType.toLowerCase():o.agi.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.agi.appdata.split(",");o.agi.key=s[0],o.agi.language=s[1],o.agi.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.agi.appdata.split(",");o.agi.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.agi.text=s.slice(1,s.length).join(",");break;case"message":o.agi.text=o.agi.appdata;break;case"set":o.agi.name=o.agi.appdata.split("=")[0],o.agi.value=o.agi.appdata.split("=")[1];break;case"agi":o.agi.project=o.agi.appdata;break;default:var r=o.agi.appdata.split(",");o.agi.project=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.agi.type&&"outbound"===o.agi.type.toLowerCase()&&"outbounddial"===o.agi.appType.toLowerCase()&&(o.agi.prefix=o.agi.phone?o.agi.phone.split("$")[0]:void 0,o.agi.callerId=o.agi.callerID?"CALLERID(all)="+o.agi.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.agi.type&&"outbound"===o.agi.type.toLowerCase()&&"outboundDial"===o.agi.appType&&(o.agi.phone=a.cutdigits?(o.agi.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.agi.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.agi.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.agi.options+="U(xcally-mixmonitor-context)"):o.agi.options=o.agi.options.replace("U(xcally-mixmonitor-context)",""));if(o.agi.appType&&"custom"===o.agi.appType);else switch((o.agi.app||o.agi.appType).toLowerCase()){case"set":o.agi.appdata=o.agi.name+"="+o.agi.value;break;case"custom":break;default:e[0]=o.agi.project,o.agi.appdata=e.join(",")}l(o.agi)},o.closeDialog=l,i.squareProject.get({fields:"name",sort:"name"}).$promise.then(function(e){o.projects=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppagiDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.custom=angular.copy(n),o.custom.appdata)switch(o.custom.appType?o.custom.appType.toLowerCase():o.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.custom.appdata.split(",");o.custom.key=s[0],o.custom.language=s[1],o.custom.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.custom.appdata.split(",");o.custom.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.custom.text=s.slice(1,s.length).join(",");break;case"message":o.custom.text=o.custom.appdata;break;case"set":o.custom.name=o.custom.appdata.split("=")[0],o.custom.value=o.custom.appdata.split("=")[1];break;case"agi":o.custom.project=o.custom.appdata;break;default:var r=o.custom.appdata.split(",");o.custom.app=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.custom.appdata=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outbounddial"===o.custom.appType.toLowerCase()&&(o.custom.prefix=o.custom.phone?o.custom.phone.split("$")[0]:void 0,o.custom.callerId=o.custom.callerID?"CALLERID(all)="+o.custom.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outboundDial"===o.custom.appType&&(o.custom.phone=a.cutdigits?(o.custom.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.custom.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.custom.options+="U(xcally-mixmonitor-context)"):o.custom.options=o.custom.options.replace("U(xcally-mixmonitor-context)",""));if(o.custom.appType&&"custom"===o.custom.appType);else switch((o.custom.app||o.custom.appType).toLowerCase()){case"set":o.custom.appdata=o.custom.name+"="+o.custom.value;break;case"custom":break;default:e[0]=o.custom.app,e[1]=o.custom.appdata,o.custom.appdata=e.join(",")}l(o.custom)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppcustomDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.dial=angular.copy(n),o.dial.appdata)switch(o.dial.appType?o.dial.appType.toLowerCase():o.dial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.dial.appdata.split(",");o.dial.key=s[0],o.dial.language=s[1],o.dial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.dial.appdata.split(",");o.dial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.dial.text=s.slice(1,s.length).join(",");break;case"message":o.dial.text=o.dial.appdata;break;case"set":o.dial.name=o.dial.appdata.split("=")[0],o.dial.value=o.dial.appdata.split("=")[1];break;case"agi":o.dial.project=o.dial.appdata;break;default:var r=o.dial.appdata.split(",");o.dial.tech=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.dial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.dial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.dial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.dial.type&&"outbound"===o.dial.type.toLowerCase()&&"outbounddial"===o.dial.appType.toLowerCase()&&(o.dial.prefix=o.dial.phone?o.dial.phone.split("$")[0]:void 0,o.dial.callerId=o.dial.callerID?"CALLERID(all)="+o.dial.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.dial.type&&"outbound"===o.dial.type.toLowerCase()&&"outboundDial"===o.dial.appType&&(o.dial.phone=a.cutdigits?(o.dial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.dial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.dial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.dial.options+="U(xcally-mixmonitor-context)"):o.dial.options=o.dial.options.replace("U(xcally-mixmonitor-context)",""));if(o.dial.appType&&"custom"===o.dial.appType);else switch((o.dial.app||o.dial.appType).toLowerCase()){case"set":o.dial.appdata=o.dial.name+"="+o.dial.value;break;case"custom":break;default:e[0]=o.dial.tech,e[1]=o.dial.timeout,e[2]=o.dial.options,e[3]=o.dial.url,o.dial.appdata=e.join(",")}l(o.dial)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppdialDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.externaldial=angular.copy(e),o.externaldial.appdata)switch(o.externaldial.appType?o.externaldial.appType.toLowerCase():o.externaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.externaldial.appdata.split(",");o.externaldial.key=s[0],o.externaldial.language=s[1],o.externaldial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.externaldial.appdata.split(",");o.externaldial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.externaldial.text=s.slice(1,s.length).join(",");break;case"message":o.externaldial.text=o.externaldial.appdata;break;case"set":o.externaldial.name=o.externaldial.appdata.split("=")[0],o.externaldial.value=o.externaldial.appdata.split("=")[1];break;case"agi":o.externaldial.project=o.externaldial.appdata;break;default:var r=o.externaldial.appdata.split(",");o.externaldial.trunk=r[0].split("/")[1],o.externaldial.phone=r[0].split("/")[2],o.externaldial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.externaldial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.externaldial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.externaldial.type&&"outbound"===o.externaldial.type.toLowerCase()&&"outbounddial"===o.externaldial.appType.toLowerCase()&&(o.externaldial.prefix=o.externaldial.phone?o.externaldial.phone.split("$")[0]:void 0,o.externaldial.callerId=o.externaldial.callerID?"CALLERID(all)="+o.externaldial.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.externaldial.type&&"outbound"===o.externaldial.type.toLowerCase()&&"outboundDial"===o.externaldial.appType&&(o.externaldial.phone=a.cutdigits?(o.externaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.externaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.externaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.externaldial.options+="U(xcally-mixmonitor-context)"):o.externaldial.options=o.externaldial.options.replace("U(xcally-mixmonitor-context)",""));if(o.externaldial.appType&&"custom"===o.externaldial.appType);else switch((o.externaldial.app||o.externaldial.appType).toLowerCase()){case"set":o.externaldial.appdata=o.externaldial.name+"="+o.externaldial.value;break;case"custom":break;default:e[0]=["SIP",o.externaldial.trunk,o.externaldial.phone].join("/"),e[1]=o.externaldial.timeout,e[2]=o.externaldial.options,e[3]=o.externaldial.url,o.externaldial.appdata=e.join(",")}l(o.externaldial)},o.closeDialog=l,i.trunk.get({fields:"name",sort:"name"}).$promise.then(function(e){o.trunks=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppexternaldialDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.goto=angular.copy(e),o.goto.appdata)switch(o.goto.appType?o.goto.appType.toLowerCase():o.goto.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.goto.appdata.split(",");o.goto.key=s[0],o.goto.language=s[1],o.goto.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.goto.appdata.split(",");o.goto.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.goto.text=s.slice(1,s.length).join(",");break;case"message":o.goto.text=o.goto.appdata;break;case"set":o.goto.name=o.goto.appdata.split("=")[0],o.goto.value=o.goto.appdata.split("=")[1];break;case"agi":o.goto.project=o.goto.appdata;break;default:var r=o.goto.appdata.split(",");o.goto.context=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.goto.extension=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.goto.priority=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10)}function l(e){t.hide(e)}o.goto.type&&"outbound"===o.goto.type.toLowerCase()&&"outbounddial"===o.goto.appType.toLowerCase()&&(o.goto.prefix=o.goto.phone?o.goto.phone.split("$")[0]:void 0,o.goto.callerId=o.goto.callerID?"CALLERID(all)="+o.goto.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.goto.type&&"outbound"===o.goto.type.toLowerCase()&&"outboundDial"===o.goto.appType&&(o.goto.phone=a.cutdigits?(o.goto.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.goto.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.goto.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.goto.options+="U(xcally-mixmonitor-context)"):o.goto.options=o.goto.options.replace("U(xcally-mixmonitor-context)",""));if(o.goto.appType&&"custom"===o.goto.appType);else switch((o.goto.app||o.goto.appType).toLowerCase()){case"set":o.goto.appdata=o.goto.name+"="+o.goto.value;break;case"custom":break;default:e[0]=o.goto.context,e[1]=o.goto.extension,e[2]=o.goto.priority,o.goto.appdata=e.join(",")}l(o.goto)},o.closeDialog=l,i.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){o.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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppgotoDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.hangup=angular.copy(n),o.hangup.appdata)switch(o.hangup.appType?o.hangup.appType.toLowerCase():o.hangup.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.hangup.appdata.split(",");o.hangup.key=s[0],o.hangup.language=s[1],o.hangup.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.hangup.appdata.split(",");o.hangup.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.hangup.text=s.slice(1,s.length).join(",");break;case"message":o.hangup.text=o.hangup.appdata;break;case"set":o.hangup.name=o.hangup.appdata.split("=")[0],o.hangup.value=o.hangup.appdata.split("=")[1];break;case"agi":o.hangup.project=o.hangup.appdata;break;default:var r=o.hangup.appdata.split(",");o.hangup.appdata=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10)}function l(e){t.hide(e)}o.hangup.type&&"outbound"===o.hangup.type.toLowerCase()&&"outbounddial"===o.hangup.appType.toLowerCase()&&(o.hangup.prefix=o.hangup.phone?o.hangup.phone.split("$")[0]:void 0,o.hangup.callerId=o.hangup.callerID?"CALLERID(all)="+o.hangup.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.hangup.type&&"outbound"===o.hangup.type.toLowerCase()&&"outboundDial"===o.hangup.appType&&(o.hangup.phone=a.cutdigits?(o.hangup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.hangup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.hangup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.hangup.options+="U(xcally-mixmonitor-context)"):o.hangup.options=o.hangup.options.replace("U(xcally-mixmonitor-context)",""));if(o.hangup.appType&&"custom"===o.hangup.appType);else switch((o.hangup.app||o.hangup.appType).toLowerCase()){case"set":o.hangup.appdata=o.hangup.name+"="+o.hangup.value;break;case"custom":break;default:e[0]=o.hangup.appdata,o.hangup.appdata=e.join(",")}l(o.hangup)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalApphangupDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.internaldial=angular.copy(e),o.internaldial.appdata)switch(o.internaldial.appType?o.internaldial.appType.toLowerCase():o.internaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.internaldial.appdata.split(",");o.internaldial.key=s[0],o.internaldial.language=s[1],o.internaldial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.internaldial.appdata.split(",");o.internaldial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.internaldial.text=s.slice(1,s.length).join(",");break;case"message":o.internaldial.text=o.internaldial.appdata;break;case"set":o.internaldial.name=o.internaldial.appdata.split("=")[0],o.internaldial.value=o.internaldial.appdata.split("=")[1];break;case"agi":o.internaldial.project=o.internaldial.appdata;break;default:var r=o.internaldial.appdata.split(",");o.internaldial.user=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.internaldial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.internaldial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.internaldial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.internaldial.type&&"outbound"===o.internaldial.type.toLowerCase()&&"outbounddial"===o.internaldial.appType.toLowerCase()&&(o.internaldial.prefix=o.internaldial.phone?o.internaldial.phone.split("$")[0]:void 0,o.internaldial.callerId=o.internaldial.callerID?"CALLERID(all)="+o.internaldial.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.internaldial.type&&"outbound"===o.internaldial.type.toLowerCase()&&"outboundDial"===o.internaldial.appType&&(o.internaldial.phone=a.cutdigits?(o.internaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.internaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.internaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.internaldial.options+="U(xcally-mixmonitor-context)"):o.internaldial.options=o.internaldial.options.replace("U(xcally-mixmonitor-context)",""));if(o.internaldial.appType&&"custom"===o.internaldial.appType);else switch((o.internaldial.app||o.internaldial.appType).toLowerCase()){case"set":o.internaldial.appdata=o.internaldial.name+"="+o.internaldial.value;break;case"custom":break;default:e[0]=o.internaldial.user,e[1]=o.internaldial.timeout,e[2]=o.internaldial.options,e[3]=o.internaldial.url,o.internaldial.appdata=e.join(",")}l(o.internaldial)},o.closeDialog=l,i.user.get({fields:"name",sort:"name"}).$promise.then(function(e){o.users=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppinternaldialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditInternalAppintervalDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.playback=angular.copy(e),o.playback.appdata)switch(o.playback.appType?o.playback.appType.toLowerCase():o.playback.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.playback.appdata.split(",");o.playback.key=s[0],o.playback.language=s[1],o.playback.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.playback.appdata.split(",");o.playback.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.playback.text=s.slice(1,s.length).join(",");break;case"message":o.playback.text=o.playback.appdata;break;case"set":o.playback.name=o.playback.appdata.split("=")[0],o.playback.value=o.playback.appdata.split("=")[1];break;case"agi":o.playback.project=o.playback.appdata;break;default:var r=o.playback.appdata.split(",");o.playback.appdata=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.playback.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.playback.type&&"outbound"===o.playback.type.toLowerCase()&&"outbounddial"===o.playback.appType.toLowerCase()&&(o.playback.prefix=o.playback.phone?o.playback.phone.split("$")[0]:void 0,o.playback.callerId=o.playback.callerID?"CALLERID(all)="+o.playback.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.playback.type&&"outbound"===o.playback.type.toLowerCase()&&"outboundDial"===o.playback.appType&&(o.playback.phone=a.cutdigits?(o.playback.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.playback.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.playback.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.playback.options+="U(xcally-mixmonitor-context)"):o.playback.options=o.playback.options.replace("U(xcally-mixmonitor-context)",""));if(o.playback.appType&&"custom"===o.playback.appType);else switch((o.playback.app||o.playback.appType).toLowerCase()){case"set":o.playback.appdata=o.playback.name+"="+o.playback.value;break;case"custom":break;default:e[0]=o.playback.appdata,e[1]=o.playback.options,o.playback.appdata=e.join(",")}l(o.playback)},o.closeDialog=l,i.sound.get({fields:"name,save_name",sort:"name"}).$promise.then(function(e){o.sounds=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppplaybackDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.queue=angular.copy(e),o.queue.appdata)switch(o.queue.appType?o.queue.appType.toLowerCase():o.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.queue.appdata.split(",");o.queue.key=s[0],o.queue.language=s[1],o.queue.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.queue.appdata.split(",");o.queue.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.queue.text=s.slice(1,s.length).join(",");break;case"message":o.queue.text=o.queue.appdata;break;case"set":o.queue.name=o.queue.appdata.split("=")[0],o.queue.value=o.queue.appdata.split("=")[1];break;case"agi":o.queue.project=o.queue.appdata;break;default:var r=o.queue.appdata.split(",");o.queue.queue=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.queue.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.queue.URL=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.queue.sound=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10),o.queue.timeout=_.isEmpty(r[4])?r[4]:isNaN(r[4])?r[4]:parseInt(r[4],10),o.queue.agi=_.isEmpty(r[5])?r[5]:isNaN(r[5])?r[5]:parseInt(r[5],10),o.queue.macro=_.isEmpty(r[6])?r[6]:isNaN(r[6])?r[6]:parseInt(r[6],10),o.queue.gosub=_.isEmpty(r[7])?r[7]:isNaN(r[7])?r[7]:parseInt(r[7],10),o.queue.rule=_.isEmpty(r[8])?r[8]:isNaN(r[8])?r[8]:parseInt(r[8],10),o.queue.position=_.isEmpty(r[9])?r[9]:isNaN(r[9])?r[9]:parseInt(r[9],10)}function l(e){t.hide(e)}o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outbounddial"===o.queue.appType.toLowerCase()&&(o.queue.prefix=o.queue.phone?o.queue.phone.split("$")[0]:void 0,o.queue.callerId=o.queue.callerID?"CALLERID(all)="+o.queue.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.queue.type&&"outbound"===o.queue.type.toLowerCase()&&"outboundDial"===o.queue.appType&&(o.queue.phone=a.cutdigits?(o.queue.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.queue.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.queue.options+="U(xcally-mixmonitor-context)"):o.queue.options=o.queue.options.replace("U(xcally-mixmonitor-context)",""));if(o.queue.appType&&"custom"===o.queue.appType);else switch((o.queue.app||o.queue.appType).toLowerCase()){case"set":o.queue.appdata=o.queue.name+"="+o.queue.value;break;case"custom":break;default:e[0]=o.queue.queue,e[1]=o.queue.options,e[2]=o.queue.URL,e[3]=o.queue.sound,e[4]=o.queue.timeout,e[5]=o.queue.agi,e[6]=o.queue.macro,e[7]=o.queue.gosub,e[8]=o.queue.rule,e[9]=o.queue.position,o.queue.appdata=e.join(",")}l(o.queue)},o.closeDialog=l,i.sound.get({fields:"name,save_name",sort:"name"}).$promise.then(function(e){o.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){o.queues=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppqueueDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.ringgroup=angular.copy(e),o.ringgroup.appdata)switch(o.ringgroup.appType?o.ringgroup.appType.toLowerCase():o.ringgroup.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.ringgroup.appdata.split(",");o.ringgroup.key=s[0],o.ringgroup.language=s[1],o.ringgroup.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.ringgroup.appdata.split(",");o.ringgroup.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.ringgroup.text=s.slice(1,s.length).join(",");break;case"message":o.ringgroup.text=o.ringgroup.appdata;break;case"set":o.ringgroup.name=o.ringgroup.appdata.split("=")[0],o.ringgroup.value=o.ringgroup.appdata.split("=")[1];break;case"agi":o.ringgroup.project=o.ringgroup.appdata;break;default:var r=o.ringgroup.appdata.split(",");o.ringgroup.multipleUsers=r[0].split("&"),o.ringgroup.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.ringgroup.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.ringgroup.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.ringgroup.type&&"outbound"===o.ringgroup.type.toLowerCase()&&"outbounddial"===o.ringgroup.appType.toLowerCase()&&(o.ringgroup.prefix=o.ringgroup.phone?o.ringgroup.phone.split("$")[0]:void 0,o.ringgroup.callerId=o.ringgroup.callerID?"CALLERID(all)="+o.ringgroup.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.ringgroup.type&&"outbound"===o.ringgroup.type.toLowerCase()&&"outboundDial"===o.ringgroup.appType&&(o.ringgroup.phone=a.cutdigits?(o.ringgroup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.ringgroup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.ringgroup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.ringgroup.options+="U(xcally-mixmonitor-context)"):o.ringgroup.options=o.ringgroup.options.replace("U(xcally-mixmonitor-context)",""));if(o.ringgroup.appType&&"custom"===o.ringgroup.appType);else switch((o.ringgroup.app||o.ringgroup.appType).toLowerCase()){case"set":o.ringgroup.appdata=o.ringgroup.name+"="+o.ringgroup.value;break;case"custom":break;default:e[0]=o.ringgroup.multipleUsers.join("&"),e[1]=o.ringgroup.timeout,e[2]=o.ringgroup.options,e[3]=o.ringgroup.url,o.ringgroup.appdata=e.join(",")}l(o.ringgroup)},o.closeDialog=l,i.user.get({fields:"name",sort:"name"}).$promise.then(function(e){o.users=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppringgroupDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.set=angular.copy(e),o.set.appdata)switch(o.set.appType?o.set.appType.toLowerCase():o.set.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.set.appdata.split(",");o.set.key=s[0],o.set.language=s[1],o.set.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.set.appdata.split(",");o.set.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.set.text=s.slice(1,s.length).join(",");break;case"message":o.set.text=o.set.appdata;break;case"set":o.set.name=o.set.appdata.split("=")[0],o.set.value=o.set.appdata.split("=")[1];break;case"agi":o.set.project=o.set.appdata;break;default:var r=o.set.appdata.split("=");o.set.name=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.set.value=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.set.type&&"outbound"===o.set.type.toLowerCase()&&"outbounddial"===o.set.appType.toLowerCase()&&(o.set.prefix=o.set.phone?o.set.phone.split("$")[0]:void 0,o.set.callerId=o.set.callerID?"CALLERID(all)="+o.set.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.set.type&&"outbound"===o.set.type.toLowerCase()&&"outboundDial"===o.set.appType&&(o.set.phone=a.cutdigits?(o.set.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.set.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.set.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.set.options+="U(xcally-mixmonitor-context)"):o.set.options=o.set.options.replace("U(xcally-mixmonitor-context)",""));if(o.set.appType&&"custom"===o.set.appType);else switch((o.set.app||o.set.appType).toLowerCase()){case"set":o.set.appdata=o.set.name+"="+o.set.value;break;case"custom":break;default:e[0]=o.set.name,e[1]=o.set.value,o.set.appdata=e.join("=")}l(o.set)},o.closeDialog=l,i.variable.get({fields:"name",sort:"name"}).$promise.then(function(e){o.variables=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppsetDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.voicemail=angular.copy(e),o.voicemail.appdata)switch(o.voicemail.appType?o.voicemail.appType.toLowerCase():o.voicemail.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.voicemail.appdata.split(",");o.voicemail.key=s[0],o.voicemail.language=s[1],o.voicemail.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.voicemail.appdata.split(",");o.voicemail.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.voicemail.text=s.slice(1,s.length).join(",");break;case"message":o.voicemail.text=o.voicemail.appdata;break;case"set":o.voicemail.name=o.voicemail.appdata.split("=")[0],o.voicemail.value=o.voicemail.appdata.split("=")[1];break;case"agi":o.voicemail.project=o.voicemail.appdata;break;default:var r=o.voicemail.appdata.split(",");o.voicemail.voiceMail=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.voicemail.options=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.voicemail.type&&"outbound"===o.voicemail.type.toLowerCase()&&"outbounddial"===o.voicemail.appType.toLowerCase()&&(o.voicemail.prefix=o.voicemail.phone?o.voicemail.phone.split("$")[0]:void 0,o.voicemail.callerId=o.voicemail.callerID?"CALLERID(all)="+o.voicemail.callerID:void 0),o.saveInternalRouteApp=function(){o.errors=[];var e=[];o.voicemail.type&&"outbound"===o.voicemail.type.toLowerCase()&&"outboundDial"===o.voicemail.appType&&(o.voicemail.phone=a.cutdigits?(o.voicemail.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.voicemail.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.voicemail.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.voicemail.options+="U(xcally-mixmonitor-context)"):o.voicemail.options=o.voicemail.options.replace("U(xcally-mixmonitor-context)",""));if(o.voicemail.appType&&"custom"===o.voicemail.appType);else switch((o.voicemail.app||o.voicemail.appType).toLowerCase()){case"set":o.voicemail.appdata=o.voicemail.name+"="+o.voicemail.value;break;case"custom":break;default:e[0]=o.voicemail.voiceMail,e[1]=o.voicemail.options,o.voicemail.appdata=e.join(",")}l(o.voicemail)},o.closeDialog=l,i.voiceMail.get({fields:"mailbox",sort:"mailbox"}).$promise.then(function(e){o.voiceMails=e.rows||[]}).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","toasty","internalrouteApp","internalroute","api"],angular.module("app.voice").controller("EditInternalAppvoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.internalroute=d||e.params.internalroute||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoInternalRoutes=function(){e.go("app.voice.internalroutes")},c.saveInternalRoute=function(){s.voiceExtension.update({id:c.internalroute.id},c.internalroute).$promise.then(function(){r.success({title:"InternalRoute updated!",msg:c.internalroute.name?c.internalroute.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","internalroute"],angular.module("app.voice").controller("InternalRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.internalroutes=r||{count:0,rows:[]},v.table="internalroutes",v.listOrder="",v.listOrderAsc=null,v.selectedInternalRoutes=[],v.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"internal",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},v.editstate=function(e,t){n.go("app.voice.internalroutes.edit",{id:e.id,internalroute:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the internalroute?").htmlContent("<b>"+(e.name||"internalroute")+"</b> will be deleted.").ariaLabel("delete internalroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getInternalRoutes=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceExtension.get(v.query,f).$promise},v.createOrEditInternalRoute=function(e,t){i.show({controller:"CreateOrEditInternalRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/internalroutes/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{internalroute:t,internalroutes:v.internalroutes.rows,license:v.license,setting:v.setting}})},v.deleteInternalRoute=A,v.exportSelectedInternalRoutes=function(){var e=angular.copy(v.selectedInternalRoutes);return v.selectedInternalRoutes=[],e},v.deleteSelectedInternalRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected internalroutes?").htmlContent("<b>"+v.selectedInternalRoutes.length+" selected</b> will be deleted.").ariaLabel("delete InternalRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedInternalRoutes.forEach(function(e){A(e)}),v.selectedInternalRoutes=[]})},v.deselectInternalRoutes=function(){v.selectedInternalRoutes=[]},v.selectAllInternalRoutes=function(){v.selectedInternalRoutes=v.internalroutes.rows},l.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){v.contexts=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.internalroutes=e||{count:0,rows:[]}}function A(e){l.voiceExtension.delete({id:e.id}).$promise.then(function(){_.remove(v.internalroutes.rows,{id:e.id}),v.internalroutes.count-=1,v.internalroutes.rows.length||v.getInternalRoutes(),c.success({title:"InternalRoute deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];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:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getInternalRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","internalroutes","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("InternalRoutesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_MUSICONHOLD",u.musiconhold=angular.copy(r),u.musiconholds=s,u.newMusicOnHold=!1,u.musiconhold||(u.musiconhold={mode:"files"},u.title="VOICE.NEW_MUSICONHOLD",u.newMusicOnHold=!0),u.addNewMusicOnHold=function(){u.errors=[],l.voiceMusicOnHold.save(u.musiconhold).$promise.then(function(e){u.musiconholds.unshift(e.toJSON()),o.success({title:"MusicOnHold properly created",msg:u.musiconhold.name?u.musiconhold.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMusicOnHold=function(){u.errors=[],l.voiceMusicOnHold.update({id:u.musiconhold.id},u.musiconhold).$promise.then(function(e){var t=_.find(u.musiconholds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MusicOnHold properly saved!",msg:u.musiconhold.name?u.musiconhold.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMusicOnHold=function(e){u.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(){l.voiceMusicOnHold.delete({id:u.musiconhold.id}).$promise.then(function(){_.remove(u.musiconholds,{id:u.musiconhold.id}),o.success({title:"MusicOnHold properly deleted!",msg:(u.musiconhold.name||"musiconhold")+" has been deleted!"}),p(u.musiconhold)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","musiconholds","musiconhold","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditMusicOnHoldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.musiconhold={},c.musiconholdMohSounds={count:0,rows:[]},c.selectedMusicOnHoldMohSounds=[],c.query={fields:"createdAt,updatedAt,id,save_name,converted_format,audio",limit:10,page:1},c.init=function(e){c.musiconhold=e,c.query.id=c.musiconhold.id,c.query.VoiceMusicOnHoldId=c.musiconhold.id,c.getMusicOnHoldMohSounds()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.voiceMusicOnHoldDownload=function(o,e){return l.sound.download({id:o.id,exists:!0}).$promise.then(function(e){var t=[e.buffer],n="mohSound"+o.id,a=new Blob(t,{type:e.type});n=o.converted_format?o.save_name+"."+o.converted_format:o.save_name;var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),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){o.show({controller:"CreateOrEditMohSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/musiconholds/edit/mohSounds/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{musiconhold:c.musiconhold,mohSound:t,mohSounds:c.musiconholdMohSounds.rows,license:null,setting:null}})},c.exportSelectedMusicOnHoldMohSounds=function(){var e=angular.copy(c.selectedMusicOnHoldMohSounds);return c.selectedMusicOnHoldMohSounds=[],e},c.deleteMusicOnHoldMohSound=g,c.deleteSelectedMusicOnHoldMohSounds=function(e){var t=o.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");o.show(t).then(function(){c.selectedMusicOnHoldMohSounds.forEach(function(e){g(e)}),c.selectedMusicOnHoldMohSounds=[]})},l.sound.get({fields:"name,id",sort:"name"}).$promise.then(function(e){c.sounds=_.keyBy(e.rows||[],"id")}).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,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_MOHSOUND",u.mohSound=angular.copy(r),u.mohSounds=s,u.newMohSound=!1,u.mohSound||(u.mohSound={},u.title="VOICE.NEW_MOHSOUND",u.newMohSound=!0),t.params.id&&(u.mohSound.VoiceMusicOnHoldId=t.params.id),u.addNewMohSound=function(){u.errors=[],l.voiceMusicOnHold.addSound({id:t.params.id},u.mohSound).$promise.then(function(e){u.mohSounds.unshift(e.toJSON()),o.success({title:"MohSound properly created",msg:u.mohSound.name?u.mohSound.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveMohSound=function(){u.errors=[],l.voiceMusicOnHold.update({id:u.mohSound.id},u.mohSound).$promise.then(function(e){var t=_.find(u.mohSounds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MohSound properly saved!",msg:u.mohSound.name?u.mohSound.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteMohSound=function(e){u.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(){l.voiceMusicOnHold.delete({id:u.mohSound.id}).$promise.then(function(){_.remove(u.mohSounds,{id:u.mohSound.id}),o.success({title:"MohSound properly deleted!",msg:(u.mohSound.name||"mohSound")+" has been deleted!"}),p(u.mohSound)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.sound.get({fields:"name,id",sort:"name"}).$promise.then(function(e){u.sounds=e.rows||[]}).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","toasty","mohSounds","mohSound","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditMohSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.musiconhold=d||e.params.musiconhold||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoMusicOnHolds=function(){e.go("app.voice.musiconholds")},c.saveMusicOnHold=function(){s.voiceMusicOnHold.update({id:c.musiconhold.id},c.musiconhold).$promise.then(function(){r.success({title:"MusicOnHold updated!",msg:c.musiconhold.name?c.musiconhold.name+" has been updated!":""})}).catch(function(e){r.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","license","setting","api","toasty","Auth","musiconhold"],angular.module("app.voice").controller("MusicOnHoldController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.musiconholds=r||{count:0,rows:[]},v.table="musiconholds",v.listOrder="",v.listOrderAsc=null,v.selectedMusicOnHolds=[],v.query={fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",defaultEntry:"false",limit:10,page:1},v.arraymode=_.keyBy([{option:"Files",value:"'files'"},{option:"Custom",value:"'custom'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysort=_.keyBy([{option:"Random",value:"'random'"},{option:"Alphabetical",value:"'alpha'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.voice.musiconholds.edit",{id:e.id,musiconhold:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the musiconhold?").htmlContent("<b>"+(e.name||"musiconhold")+"</b> will be deleted.").ariaLabel("delete musiconhold").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getMusicOnHolds=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceMusicOnHold.get(v.query,f).$promise},v.createOrEditMusicOnHold=function(e,t){i.show({controller:"CreateOrEditMusicOnHoldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/musiconholds/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{musiconhold:t,musiconholds:v.musiconholds.rows,license:v.license,setting:v.setting}})},v.deleteMusicOnHold=A,v.exportSelectedMusicOnHolds=function(){var e=angular.copy(v.selectedMusicOnHolds);return v.selectedMusicOnHolds=[],e},v.deleteSelectedMusicOnHolds=function(e){var t=i.confirm().title("Are you sure want to delete the selected musiconholds?").htmlContent("<b>"+v.selectedMusicOnHolds.length+" selected</b> will be deleted.").ariaLabel("delete MusicOnHolds").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedMusicOnHolds.forEach(function(e){A(e)}),v.selectedMusicOnHolds=[]})},v.deselectMusicOnHolds=function(){v.selectedMusicOnHolds=[]},v.selectAllMusicOnHolds=function(){v.selectedMusicOnHolds=v.musiconholds.rows};var h=!0,b=1;function f(e){v.musiconholds=e||{count:0,rows:[]}}function A(e){l.voiceMusicOnHold.delete({id:e.id}).$promise.then(function(){_.remove(v.musiconholds.rows,{id:e.id}),v.musiconholds.count-=1,v.musiconholds.rows.length||v.getMusicOnHolds(),c.success({title:"MusicOnHold deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceMusicOnHold"}];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:"SYSTEM:DELETEvoiceMusicOnHold",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getMusicOnHolds())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","musiconholds","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("MusicOnHoldsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,h,l,d,c){var b=this;function m(){var e=2,t=[];t.push({type:"outbound",app:"Set",appdata:"CDR(type)=outbound",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"CDR(destination)="+(b.outboundroute.cutdigits?"${EXTEN:"+b.outboundroute.cutdigits+"}":"${EXTEN}"),context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"outboundrouteid="+b.outboundroute.id,context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),b.outboundroute.hasOwnProperty("recordingFormat")&&"none"!==b.outboundroute.recordingFormat&&(t.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_FORMAT="+b.outboundroute.recordingFormat||"wav",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:e++,VoiceExtensionId:b.outboundroute.id}));for(var n=0,a=0;n<b.outboundrouteApps.rows.length;n++,a=0){var i=b.outboundrouteApps.rows[n],o=[],s=[];i.intervals="*,*,*,*"!==i.interval?[i.interval]:i.IntervalId?_.map(_.filter(b.intervals.rows,{IntervalId:i.IntervalId}),"interval"):[],i.context=b.outboundroute.context,i.exten=b.outboundroute.exten,i.type&&(i.type=i.type.toLowerCase()),i.hasOwnProperty("tag")&&i.tag&&"--"!==i.tag&&o.push({type:i.type.toLowerCase(),app:"Set",appdata:"CDR(tag)="+i.tag,context:b.outboundroute.context,exten:b.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:b.outboundroute.id}),i.callerID?o.push({type:i.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)="+i.callerID+")",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:b.outboundroute.id}):o.push({type:i.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No number available)",context:b.outboundroute.context,exten:b.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:b.outboundroute.id});for(var r=0;r<i.intervals.length;r++){var l=e+i.intervals.length,d=r===i.intervals.length-1?e+o.length+s.length+2:e+r+1;o.splice(r,0,{type:"outbound",app:"GotoIfTime",appdata:i.intervals[r]+"?"+b.outboundroute.context+",${EXTEN},"+l+":"+b.outboundroute.context+",${EXTEN},"+d,exten:b.outboundroute.exten,context:b.outboundroute.context,priority:e+r,VoiceExtensionId:b.outboundroute.id})}if("outboundDial"===i.appType){var c=_.find(b.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=b.outboundroute.cutdigits?(m.prefix||"")+"${EXTEN:"+b.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"!==b.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=o.length?_.last(o).priority+1:e,e=(s.length?_.last(s).priority:i.priority)+1,t=_.concat(t,o,[i],s)}t.push({type:"outbound",app:"Hangup",exten:b.outboundroute.exten,context:b.outboundroute.context,priority:e,VoiceExtensionId:b.outboundroute.id}),h.voiceExtension.addApplications({id:b.outboundroute.id},_.sortBy(t,"priority")).$promise.then(function(e){b.outboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function u(e){a.hide(e)}b.errors=[],b.setting=c,b.license=d,b.passwordPattern=b.setting&&b.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",b.title="VOICE.EDIT_OUTBOUNDROUTE",b.outboundroute=angular.copy(r),b.outboundroutes=s,b.newOutboundRoute=!1,b.outboundrouteApps={count:0,rows:[]},b.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}),b.outboundroute||(b.outboundroute={appdata:"Outbound Call",type:"outbound",context:"from-sip",recordingFormat:"none"},b.title="VOICE.NEW_OUTBOUNDROUTE",b.newOutboundRoute=!0),b.addNewOutboundRoute=function(){b.errors=[],h.voiceExtension.save(b.outboundroute).$promise.then(function(e){b.outboundroutes.unshift(e.toJSON()),o.success({title:"OutboundRoute properly created",msg:b.outboundroute.name?b.outboundroute.name+" has been created!":""}),u(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.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()})})},b.saveOutboundRoute=function(){b.errors=[],h.voiceExtension.update({id:b.outboundroute.id},b.outboundroute).$promise.then(function(e){var t=_.find(b.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){b.outboundrouteApps=e,m()})),o.success({title:"OutboundRoute properly saved!",msg:b.outboundroute.name?b.outboundroute.name+" has been saved!":""}),u(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.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()})})},b.deleteOutboundRoute=function(n){h.voicePrefix.get({VoiceExtensionId:r.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"});b.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:b.outboundroute.id}).$promise.then(function(){_.remove(b.outboundroutes,{id:b.outboundroute.id}),o.success({title:"OutboundRoute properly deleted!",msg:(b.outboundroute.name||"outboundroute")+" has been deleted!"}),u(b.outboundroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.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(){})})},b.getDateFromString=function(e){return new Date(e)},b.rewriteRouting=m,b.closeDialog=u,h.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){b.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","toasty","outboundroutes","outboundroute","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditOutboundRouteDialogController",e)}(),function(){"use strict";function e(b,i,a,o,t,e,n){var f=this;function s(e,t){if(f.outboundrouteApps.rows.length){var n=f.outboundrouteApps.rows[t]?f.outboundrouteApps.rows[t]:f.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:f.outboundroute}}).then(function(e){e&&(e.id?f.outboundrouteApps.rows[t]=e:f.outboundrouteApps.rows.splice(t,0,e),r())}).catch(function(e){e&&o.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:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),n.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:t++,VoiceExtensionId:f.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"outboundrouteid="+f.outboundroute.id,context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),f.outboundroute.hasOwnProperty("recordingFormat")&&"none"!==f.outboundroute.recordingFormat&&(n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_FORMAT="+f.outboundroute.recordingFormat||"wav",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:t++,VoiceExtensionId:f.outboundroute.id}));for(var a=0,i=0;a<f.outboundrouteApps.rows.length;a++,i=0){var o=f.outboundrouteApps.rows[a],s=[],r=[];o.intervals="*,*,*,*"!==o.interval?[o.interval]:o.IntervalId?_.map(_.filter(f.intervals.rows,{IntervalId:o.IntervalId}),"interval"):[],o.context=f.outboundroute.context,o.exten=f.outboundroute.exten,o.type&&(o.type=o.type.toLowerCase()),o.hasOwnProperty("tag")&&o.tag&&"--"!==o.tag&&s.push({type:o.type.toLowerCase(),app:"Set",appdata:"CDR(tag)="+o.tag,context:f.outboundroute.context,exten:f.outboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:f.outboundroute.id}),o.callerID?s.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)="+o.callerID+")",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:o.intervals.length+t+i++,VoiceExtensionId:f.outboundroute.id}):s.push({type:o.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:o.intervals.length+t+i++,VoiceExtensionId:f.outboundroute.id});for(var l=0;l<o.intervals.length;l++){var d=t+o.intervals.length,c=l===o.intervals.length-1?t+s.length+r.length+2:t+l+1;s.splice(l,0,{type:"outbound",app:"GotoIfTime",appdata:o.intervals[l]+"?"+f.outboundroute.context+",${EXTEN},"+d+":"+f.outboundroute.context+",${EXTEN},"+c,exten:f.outboundroute.exten,context:f.outboundroute.context,priority:t+l,VoiceExtensionId:f.outboundroute.id})}if(e&&"outboundDial"===o.appType){var m=_.find(f.apps,{appType:"outboundDial"});if(m&&m.fields){for(var u={},p=o.appdata.split(","),g=[],v=0,h=m.fields.length;v<h;v++)if(m.fields[v].hasOwnProperty("param"))switch(m.fields[v].name){case"trunk":u.trunk=p[m.fields[v].param].split("/")[1],u.phone=p[m.fields[v].param].split("/")[2],u.prefix=u.phone?u.phone.split("$")[0]:void 0,u.phone=f.outboundroute.cutdigits?(u.prefix||"")+"${EXTEN:"+f.outboundroute.cutdigits+"}":(u.prefix||"")+"${EXTEN}",g[m.fields[v].param]=["SIP",u.trunk,u.phone].join("/");break;case"options":u.options=p[m.fields[v].param],"none"!==f.outboundroute.recordingFormat?u.options.indexOf("U(xcally-mixmonitor-context)")<0&&(u.options+="U(xcally-mixmonitor-context)"):u.options=u.options.replace("U(xcally-mixmonitor-context)",""),g[m.fields[v].param]=u.options;break;default:g[m.fields[v].param]=p[m.fields[v].param]}o.appdata=g.join(",")}}o.priority=s.length?_.last(s).priority+1:t,t=(r.length?_.last(r).priority:o.priority)+1,n=_.concat(n,s,[o],r)}n.push({type:"outbound",app:"Hangup",exten:f.outboundroute.exten,context:f.outboundroute.context,priority:t,VoiceExtensionId:f.outboundroute.id}),b.voiceExtension.addApplications({id:f.outboundroute.id},_.sortBy(n,"priority")).$promise.then(function(e){f.outboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function l(e){f.outboundrouteApps=e||{count:0,rows:[]}}f.currentUser=n.getCurrentUser(),f.outboundroute={},f.outboundrouteApps={count:0,rows:[]},f.selectedOutboundRouteApps=[],f.query={sort:"priority"},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.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},f.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){s(e,e.newIndex)},onSort:function(e){r()}},f.init=function(e){f.outboundroute=e,t.on("voiceExtension:update",f.onVoiceExtensionUpdate),f.query.VoiceExtensionId=e.id,f.query.isApp=!0,f.query.nolimit=!0,f.getOutboundRouteApps(),f.getIntervals()},f.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(){f.outboundrouteApps.rows.splice(t,1),r()},function(){console.log("CANCEL")})},f.getOutboundRouteApps=function(){f.promise=b.voiceExtension.get(f.query,l).$promise},f.editOutboundRouteApp=s,f.editInterval=function(e,t){if(f.outboundrouteApps.rows.length){var n=f.outboundrouteApps.rows[t]?f.outboundrouteApps.rows[t]:f.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:[]}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,r())})}},f.deleteOutboundRouteApp=function(e){_.remove(f.outboundrouteApps.rows,{id:e.id}),r(),o.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},f.deleteSelectedOutboundRouteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+f.selectedOutboundRouteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){f.selectedOutboundRouteApps.forEach(function(e){_.remove(f.outboundrouteApps.rows,{id:e.id})}),f.selectedOutboundRouteApps=[],r()})},f.rewriteRouting=r,f.getIntervals=function(){return b.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){f.intervals=e}).catch(function(e){console.error(e)})},f.onVoiceExtensionUpdate=function(e){e.VoiceExtensionId===f.outboundroute.id&&r(!0)},e.$on("$destroy",function(){t.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){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(n.appType||n.app).toUpperCase(),o.custom=angular.copy(n),o.custom.appdata)switch(o.custom.appType?o.custom.appType.toLowerCase():o.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.custom.appdata.split(",");o.custom.key=s[0],o.custom.language=s[1],o.custom.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.custom.appdata.split(",");o.custom.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.custom.text=s.slice(1,s.length).join(",");break;case"message":o.custom.text=o.custom.appdata;break;case"set":o.custom.name=o.custom.appdata.split("=")[0],o.custom.value=o.custom.appdata.split("=")[1];break;case"agi":o.custom.project=o.custom.appdata;break;default:var r=o.custom.appdata.split(",");o.custom.app=_.isEmpty(r[0])?r[0]:isNaN(r[0])?r[0]:parseInt(r[0],10),o.custom.appdata=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10)}function l(e){t.hide(e)}o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outbounddial"===o.custom.appType.toLowerCase()&&(o.custom.prefix=o.custom.phone?o.custom.phone.split("$")[0]:void 0,o.custom.callerId=o.custom.callerID?"CALLERID(all)="+o.custom.callerID:void 0),o.saveOutboundRouteApp=function(){o.errors=[];var e=[];o.custom.type&&"outbound"===o.custom.type.toLowerCase()&&"outboundDial"===o.custom.appType&&(o.custom.phone=a.cutdigits?(o.custom.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.custom.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.custom.options+="U(xcally-mixmonitor-context)"):o.custom.options=o.custom.options.replace("U(xcally-mixmonitor-context)",""));if(o.custom.appType&&"custom"===o.custom.appType);else switch((o.custom.app||o.custom.appType).toLowerCase()){case"set":o.custom.appdata=o.custom.name+"="+o.custom.value;break;case"custom":break;default:e[0]=o.custom.app,e[1]=o.custom.appdata,o.custom.appdata=e.join(",")}l(o.custom)},o.closeDialog=l}e.$inject=["$mdDialog","toasty","outboundrouteApp","outboundroute","api"],angular.module("app.voice").controller("EditoutboundAppcustomDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r){var l=this;if(l.errors=[],l.title="TOOLS.EDIT_INTERVAL",l.interval=angular.copy(i),l.intervals=o,l.newInterval=!1,l.types=["always","custom","list"],l.daysOfWeek=a.getDaysOfWeek(),l.monthNumber=a.getMonthNumber(),l.monthName=a.getMonthName(),l.daysOfMonth=a.getDaysOfMonth(),l.interval)if("*,*,*,*"!==l.interval.interval){l.type="custom";var d=l.interval.interval.split(","),c=d[0],m=d[1],u=d[2],p=d[3];if("*"!==c){var g,v=c.split("-")[0],h=c.split("-")[1];(g=new Date).setHours(Number(v.split(":")[0])),g.setMinutes(Number(v.split(":")[1])),l.timeRangeFrom=g,(g=new Date).setHours(Number(h.split(":")[0])),g.setMinutes(Number(h.split(":")[1])),l.timeRangeTo=g}"*"!==m&&(l.dayOfWeekFrom=m.split("-")[0],l.dayOfWeekTo=m.split("-")[1]),"*"!==u&&(l.monthDayFrom=u.split("-")[0],l.monthDayTo=u.split("-")[1]),"*"!==p&&(l.monthFrom=p.split("-")[0],l.monthTo=p.split("-")[1])}else l.type="always";else l.interval={interval:"*,*,*,*"},l.type="always",l.title="TOOLS.NEW_INTERVAL",l.newInterval=!0;function b(){switch(l.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==l.timeRangeFrom&&l.timeRangeFrom&&l.timeRangeTo){var t=(l.timeRangeFrom.getHours()<10?"0":"")+l.timeRangeFrom.getHours()+":"+(l.timeRangeFrom.getMinutes()<10?"0":"")+l.timeRangeFrom.getMinutes(),n=(l.timeRangeTo.getHours()<10?"0":"")+l.timeRangeTo.getHours()+":"+(l.timeRangeTo.getMinutes()<10?"0":"")+l.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return l.dayOfWeekFrom?l.dayOfWeekTo?e.push(l.dayOfWeekFrom+"-"+l.dayOfWeekTo):e.push(l.dayOfWeekFrom):e.push("*"),l.monthDayFrom?l.monthDayTo?e.push(l.monthDayFrom+"-"+l.monthDayTo):e.push(l.monthDayFrom):e.push("*"),l.monthFrom?l.monthTo?e.push(l.monthFrom+"-"+l.monthTo):e.push(l.monthFrom):e.push("*"),e.join()}}function f(e){t.hide(e)}e.params.id&&!l.interval.application&&(l.interval.IntervalId=e.params.id),l.interval.IntervalId&&l.interval.application&&(l.type="list"),l.addNewInterval=function(){l.errors=[],l.interval.interval=b(),r.interval.save(l.interval).$promise.then(function(e){l.intervals.push(e),s.success({title:"Interval properly created",msg:l.interval.name?l.interval.name+" has been created!":""}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},l.saveInterval=function(){l.errors=[],l.interval.interval=b(),l.interval.application?("list"!==l.type&&(l.interval.IntervalId=null),f(l.interval)):r.interval.update({id:l.interval.id},l.interval).$promise.then(function(e){var t=_.find(l.intervals,{id:e.id});t&&_.merge(t,e),s.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),f()}).catch(function(e){console.error(e),l.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},l.closeDialog=f,l.interval.application&&r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){l.intervals=e}).catch(function(e){console.error(e)})}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api"],angular.module("app.voice").controller("EditoutboundAppintervalDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i){var o=this;if(o.errors=[],o.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),o.outbounddial=angular.copy(e),o.outbounddial.appdata)switch(o.outbounddial.appType?o.outbounddial.appType.toLowerCase():o.outbounddial.app.toLowerCase()){case"custom":break;case"dialogflow":var s=o.outbounddial.appdata.split(",");o.outbounddial.key=s[0],o.outbounddial.language=s[1],o.outbounddial.welcomemessage=s.slice(2,s.length).join(",");case"autoreply":s=o.outbounddial.appdata.split(",");o.outbounddial.times=isNaN(s[0])?s[0]:parseInt(s[0],10),o.outbounddial.text=s.slice(1,s.length).join(",");break;case"message":o.outbounddial.text=o.outbounddial.appdata;break;case"set":o.outbounddial.name=o.outbounddial.appdata.split("=")[0],o.outbounddial.value=o.outbounddial.appdata.split("=")[1];break;case"agi":o.outbounddial.project=o.outbounddial.appdata;break;default:var r=o.outbounddial.appdata.split(",");o.outbounddial.trunk=r[0].split("/")[1],o.outbounddial.phone=r[0].split("/")[2],o.outbounddial.timeout=_.isEmpty(r[1])?r[1]:isNaN(r[1])?r[1]:parseInt(r[1],10),o.outbounddial.options=_.isEmpty(r[2])?r[2]:isNaN(r[2])?r[2]:parseInt(r[2],10),o.outbounddial.url=_.isEmpty(r[3])?r[3]:isNaN(r[3])?r[3]:parseInt(r[3],10)}function l(e){t.hide(e)}o.outbounddial.type&&"outbound"===o.outbounddial.type.toLowerCase()&&"outbounddial"===o.outbounddial.appType.toLowerCase()&&(o.outbounddial.prefix=o.outbounddial.phone?o.outbounddial.phone.split("$")[0]:void 0,o.outbounddial.callerId=o.outbounddial.callerID?"CALLERID(all)="+o.outbounddial.callerID:void 0),o.saveOutboundRouteApp=function(){o.errors=[];var e=[];o.outbounddial.type&&"outbound"===o.outbounddial.type.toLowerCase()&&"outboundDial"===o.outbounddial.appType&&(o.outbounddial.phone=a.cutdigits?(o.outbounddial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(o.outbounddial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?o.outbounddial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(o.outbounddial.options+="U(xcally-mixmonitor-context)"):o.outbounddial.options=o.outbounddial.options.replace("U(xcally-mixmonitor-context)",""));if(o.outbounddial.appType&&"custom"===o.outbounddial.appType);else switch((o.outbounddial.app||o.outbounddial.appType).toLowerCase()){case"set":o.outbounddial.appdata=o.outbounddial.name+"="+o.outbounddial.value;break;case"custom":break;default:e[0]=["SIP",o.outbounddial.trunk,o.outbounddial.phone].join("/"),e[1]=o.outbounddial.timeout,e[2]=o.outbounddial.options,e[3]=o.outbounddial.url,o.outbounddial.appdata=e.join(",")}l(o.outbounddial)},o.closeDialog=l,i.trunk.get({fields:"name",sort:"name"}).$promise.then(function(e){o.trunks=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.tag.get({fields:"name",sort:"name",nolimit:"true"}).$promise.then(function(e){o.tags=e.rows||[]}).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","toasty","outboundrouteApp","outboundroute","api"],angular.module("app.voice").controller("EditoutboundAppoutbounddialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.outboundroute=d||e.params.outboundroute||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoOutboundRoutes=function(){e.go("app.voice.outboundroutes")},c.saveOutboundRoute=function(){s.voiceExtension.update({id:c.outboundroute.id},c.outboundroute).$promise.then(function(){r.success({title:"OutboundRoute updated!",msg:c.outboundroute.name?c.outboundroute.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","outboundroute"],angular.module("app.voice").controller("OutboundRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.outboundroutes=r||{count:0,rows:[]},v.table="outboundroutes",v.listOrder="",v.listOrderAsc=null,v.selectedOutboundRoutes=[],v.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,recordingFormat,cutdigits,description",type:"outbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},v.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"),"")}),v.editstate=function(e,t){n.go("app.voice.outboundroutes.edit",{id:e.id,outboundroute:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the outboundroute?").htmlContent("<b>"+(e.name||"outboundroute")+"</b> will be deleted.").ariaLabel("delete outboundroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getOutboundRoutes=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceExtension.get(v.query,f).$promise},v.createOrEditOutboundRoute=function(e,t){i.show({controller:"CreateOrEditOutboundRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/outboundroutes/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{outboundroute:t,outboundroutes:v.outboundroutes.rows,license:v.license,setting:v.setting}})},v.deleteOutboundRoute=A,v.exportSelectedOutboundRoutes=function(){var e=angular.copy(v.selectedOutboundRoutes);return v.selectedOutboundRoutes=[],e},v.deleteSelectedOutboundRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected outboundroutes?").htmlContent("<b>"+v.selectedOutboundRoutes.length+" selected</b> will be deleted.").ariaLabel("delete OutboundRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedOutboundRoutes.forEach(function(e){A(e)}),v.selectedOutboundRoutes=[]})},v.deselectOutboundRoutes=function(){v.selectedOutboundRoutes=[]},v.selectAllOutboundRoutes=function(){v.selectedOutboundRoutes=v.outboundroutes.rows},l.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){v.contexts=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.outboundroutes=e||{count:0,rows:[]}}function A(t){l.voicePrefix.get({VoiceExtensionId:t.id}).$promise.then(function(e){if(e&&e.rows&&0<e.rows.length)return c.error({title:"Outbound route not deleted!",msg:"You can't remove an outbound route associated to an out prefix"});l.voiceExtension.delete({id:t.id}).$promise.then(function(){_.remove(v.outboundroutes.rows,{id:t.id}),v.outboundroutes.count-=1,v.outboundroutes.rows.length||v.getOutboundRoutes(),c.success({title:"OutboundRoute deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];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:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getOutboundRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","outboundroutes","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("OutboundRoutesController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l,d,c,m){var u=this,p=!0;function g(){var e=i.localStorage.getItem("motion2.realtime.abandoned.voice.contacts:"+u.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(u.query=_.merge(e.query,_.omit(u.query,["sort","limit","page"])),u.query=_.omit(u.query,"filter")),s.disposition.get({MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null"}).$promise.then(function(e){u.disposition=e?e.rows:[]}).catch(function(e){console.log(e)}),s.user.getQueues({id:r.getCurrentUser().id,fields:"id,name",channel:"voice",type:"inbound",nolimit:!0}).$promise.then(function(e){u.queues=e||{count:0,rows:[]},u.queuesMap=_.mapValues(_.keyBy(u.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){u.getContacts()})}function v(e){u.contacts=e||{count:0,rows:[]},p=!1,u.refresh=!0}u.showTooltip=!1,u.refresh=!0,u.disable=[],u.agents=m||[],u.currentUser=r.getCurrentUser(),u.localizationMap=c,u.pickerModel={dateStart:null,dateEnd:null},u.queues={},u.contacts={count:0,rows:[]},u.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},u.clearAll=function(){u.query.dateStart=void 0,u.query.dateEnd=void 0,u.pickerModel={dateStart:null,dateEnd:null},u.getContacts()},u.getContacts=function(){u.refresh=!1,u.query.dateStart=void 0,u.query.dateEnd=void 0,u.pickerModel.dateStart&&!p&&(u.query.dateStart=u.pickerModel.dateStart,u.query.dateEnd=u.pickerModel.dateEnd);u.query.queue=u.query.queue,u.query.offset=(u.query.page-1)*u.query.limit,i.localStorage.setItem("motion2.realtime.abandoned.voice.contacts:"+u.currentUser.id,JSON.stringify({query:_.omit(u.query,"queue")})),u.promise=s.voiceQueueReport.getVoiceQueuesReport(u.query,v).$promise},u.refreshContacts=function(){u.showTooltip=!1,u.getContacts()},u.onInit=g,u.assignedA=function(e,t){e&&(u.disable[e.id]=!0,s.voiceQueueReport.update({id:e.id,lastAssignedTo:t?t.name:null,assigned:!!t}).$promise.catch(function(e){console.log(e)}).finally(function(){u.disable[e.id]=!1}))},u.disposed=function(e,t){e&&s.voiceQueueReport.update({id:e.id,disposition:t||null}).$promise.catch(function(e){console.log(e)})},u.onSavevoiceQueueReport=function(e){e&&u.queuesMap&&"inbound"===e.type&&u.queuesMap[e.queue]&&(u.showTooltip=!0)},u.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(u.contacts.rows,["id",e.id]);0<=t&&_.merge(u.contacts.rows[t],e)}},l.onWithoutApply("voiceQueueReport:save",u.onSavevoiceQueueReport),l.on("voiceQueueReport:update",u.onUpdatevoiceQueueReport),g();var h=!0,b=1;e.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(b=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=b),u.getContacts())}),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","agents"],angular.module("app.voice").controller("AbandonedCallsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,s,t,n,a,i,o,r,l,d,c,m,u,p,g,v){var h=this,b=["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"],f=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var A in h.availableStates=["ringing","inuse","busy","onhold","not_inuse"],h.pauses=o||{count:0,rows:[]},h.license=g,h.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},h.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},h.paginatedAgents={},h.load=!1,h.order=[],h.agentInternal={},h.agents)h.agents.hasOwnProperty(A)&&(h.agents[A].init=!0);h.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},h.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"}),h.agents[e.id]&&(h.agents[e.id].online=!1),h.rpcAgents[e.id]&&(h.rpcAgents[e.id].online=!1),y()}).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()})})},h.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",realtime:!0,direction:"inbound"}})},h.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){h.agents[t.id]&&_.merge(h.agents[t.id],_.pick(e,b)),h.rpcAgents[t.id]&&_.merge(h.rpcAgents[t.id],_.pick(e,b)),x(h.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()})})},h.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},h.getAgentStatus=C,h.getAgentGlobalStatus=x,h.isPause=S,h.checkPause=function(e){return"pause"===e},h.isPartialPause=function(e){return"*pause"===e},h.onSave=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(_.omit(e,f),b)),_.merge(h.rpcAgents[e.id],_.pick(_.omit(e,f),b)),x(h.agents[e.id]))},h.onUpdate=function(e){h.agents[e.id]&&(_.merge(h.agents[e.id],_.pick(e,b)),_.merge(h.rpcAgents[e.id],_.pick(e,b)),e.lastPauseAt&&(h.agents[e.id].globalStatusTime=e.lastPauseAt,h.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(h.agents[e.id]))},h.onInit=y,h.onConnect=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(_.merge(h.agents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(h.rpcAgents[h.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},h.onComplete=function(e){h.agents[h.agentInternal[e.destaccountcode]]&&(h.agents[h.agentInternal[e.destaccountcode]]=_.omit(h.agents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),h.rpcAgents[h.agentInternal[e.destaccountcode]]=_.omit(h.rpcAgents[h.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},c.on("user:save",h.onSave),c.on("user:update",h.onUpdate),c.on("user:agentconnect",h.onConnect),c.on("user:agentcomplete",h.onComplete),y();var E=v(function(){h.load&&(h.load=!1,y())},999);function y(e){h.load=!1;var t,n,a=s.defer();h.promise=a.promise,h.filteredAgents=[],h.order=[],_.forIn(h.agents,function(e,t){h.rpcAgents[t]&&_.merge(e,_.pick(_.omit(h.rpcAgents[t],f),b)),x(e),e.online?(h.filteredAgents.push(e),h.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),h.query.globalStatusFilter&&_.remove(h.filteredAgents,function(e){return e.globalStatus!==h.query.globalStatusFilter}),h.query.pauseTypeFilter&&_.remove(h.filteredAgents,function(e){return e.pauseType!==h.query.pauseTypeFilter}),h.query.filter&&_.remove(h.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(h.query.filter.toLowerCase())<0}),h.filteredAgents=(t=h.filteredAgents,n=_.startsWith(h.query.order,"-")?"desc":"asc",_.orderBy(t,[h.query.order.replace("-","")],[n]));var i=(h.query.page-1)*h.query.limit;h.paginatedAgents=_.drop(h.filteredAgents,i).slice(0,h.query.limit);for(var o=0;o<h.paginatedAgents.length;o+=1)h.order.push(h.paginatedAgents[o].id);a.resolve(),h.load=!0}function S(e){return"pause"===e||"*pause"===e}function T(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function C(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"pause":_.some([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],S)?"*pause":_.every([C(e,"voice"),C(e,"chat"),C(e,"mail"),C(e,"openchannel"),C(e,"sms"),C(e,"fax")],T)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=S(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"),E&&(v.cancel(E),E=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","Auth","license","$interval"],angular.module("app.voice").controller("AgentsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,o){var s=this;s.calls=i||{rows:[],count:0},s.query={limit:10,page:1},s.channelStatus=o.channelStatusOut,s.onSave=function(e){var t=_.find(s.calls.rows,{channel:e.channel});e.channelstatedesc=e.dialstatus?"up":"ring",t?_.merge(t,e):e.channel&&s.calls.rows.push(e)},s.onRemove=function(e){var t=_.findIndex(s.calls.rows,{channel:e.channel});0<=t&&(s.calls.rows[t].status="hangup");n(function(){s.calls.rows.splice(t,1)},5e3)},a.on("voice_outbound_channel:save",s.onSave),a.on("voice_outbound_channel:remove",s.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,o,s,r,l){var d=this;d.agents=n||{count:0,rows:[]},d.rpcVoiceQueuesChannels=i?_.keyBy(i.rows?_.filter(i.rows,{type:"inbound"}):[],"uniqueid"):{},d.queryChannels={limit:10,page:1},d.getSize=function(e){return _.size(e)},d.onSave=function(e){"inbound"===e.type&&(d.rpcVoiceQueuesChannels[e.uniqueid]=e)},d.onRemove=function(e){d.rpcVoiceQueuesChannels[e.uniqueid]&&delete d.rpcVoiceQueuesChannels[e.uniqueid]},d.hangup=function(t){return o.rpc.getVoiceQueuesChannelHangup({uniqueid:t}).$promise.then(function(e){l.success({title:"Channel "+t+" properly hangup!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},d.redirectToAgent=function(t,e,n){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e,context:n}).$promise.then(function(e){l.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},d.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){l.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){l.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},s.on("voice_queue_channel:save",d.onSave),s.on("voice_queue_channel:remove",d.onRemove),e.$on("$destroy",function(){s.removeAllListeners("voice_queue_channel:save"),s.removeAllListeners("voice_queue_channel:remove")})}e.$inject=["$scope","$timeout","$mdDialog","agents","rpcVoiceQueuesChannels","api","socket","helperClasses","toasty"],angular.module("app.voice").controller("QueueCallsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r){var l=this,d=["total","answered","unmanaged","sumHoldTime","sumDuration","sumBillable"];function c(){_.forIn(l.queues,function(e,t){l.rpcQueues[t]&&_.merge(e,_.pick(l.rpcQueues[t],d))})}l.count=a.count,l.queues=a?_.keyBy(a.rows?a.rows:[],"id"):{},l.rpcQueues=i?_.keyBy(i.rows?i.rows:[],"id"):{},r.hasRole("admin")?l.query={type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1}:l.query={id:r.getCurrentUser().id,channel:"voice",type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1},l.success=p,l.getQueues=function(){l.query.offset=(l.query.page-1)*l.query.limit,r.hasRole("admin")?l.promise=o.voiceQueue.get(l.query,p).$promise:l.promise=o.user.getQueues(l.query,p).$promise},l.onSave=function(e){l.queues[e.id]&&_.merge(l.queues[e.id],_.pick(e,d))},l.$onInit=c,s.onWithoutApply("voice_queue:save",l.onSave),l.interval=t(function(){},999);var m=!0,u=1;function p(e){l.count=e.count,l.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},c()}e.$watch("vm.query.filter",function(e,t){m?n(function(){m=!1}):(t||(u=l.query.page),e!==t&&(l.query.page=1),e||(l.query.page=u),l.getQueues())}),e.$on("$destroy",function(){s.removeAllListeners("voice_queue:save"),l.interval&&t.cancel(l.interval)})}e.$inject=["$scope","$timeout","$interval","queues","rpcQueues","api","socket","Auth"],angular.module("app.voice").controller("QueueParamsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r,l,d,c,m){var u=this,p=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function g(){var n=[];return _.forIn(u.queues,function(e,t){e.paused=0,e.loggedInDb=0,u.queues[t].agents={},n.push(l.voiceQueue.getMembers({id:t}).$promise),u.rpcQueues[t]&&_.merge(e,_.pick(u.rpcQueues[t],p))}),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&&u.queues[e[t].rows[n].VoiceQueueId].paused++,u.queues[e[t].rows[n].VoiceQueueId].loggedInDb++,u.queues[e[t].rows[n].VoiceQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].VoiceQueueId}).catch(function(e){console.error(e)})}u.count=s.count?s.count:0,u.queues=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},m.hasRole("admin")?u.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:u.query={id:m.getCurrentUser().id,channel:"voice",type:"inbound",sort:"-updatedAt",limit:10,page:1},u.success=b,u.getQueues=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=l.voiceQueue.get(u.query,b).$promise:u.promise=l.user.getQueues(u.query,b).$promise},u.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(u.queues),license:null,setting:null}})},u.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:u.queues?u.queues.rows:[],realtime:!0}})},u.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})})},u.onSave=function(e){u.queues[e.id]&&_.merge(u.queues[e.id],_.pick(e,p))},u.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(u.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(u.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},u.onLogin=function(e){console.log("onLogged",e),u.queues[e.VoiceQueueId]&&(u.queues[e.VoiceQueueId].loggedInDb+=1,u.queues[e.VoiceQueueId].agents[e.UserId]=e.VoiceQueueId)},u.onLogout=function(e){console.log("onLogout",e),u.queues[e.VoiceQueueId]&&0<u.queues[e.VoiceQueueId].loggedInDb&&(u.queues[e.VoiceQueueId].loggedInDb-=1,delete u.queues[e.VoiceQueueId].agents[e.UserId])},u.$onInit=g,u.order=[],_.forIn(u.queues,function(e,t){u.order.push(e.id)}),d.onWithoutApply("voice_queue:save",u.onSave),u.interval=o(function(){},999),d.on("user:update",u.onPause),d.on("userVoiceQueue:remove",u.onLogout),d.on("userVoiceQueue:save",u.onLogin);var v=!0,h=1;function b(e){if(u.count=e.count,u.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){u.order=[];for(var t=0;t<e.rows.length;t++)u.order.push(e.rows[t].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.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("voice_queue:save"),u.interval&&o.cancel(u.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","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,o,s,r){var l=this,d=["fullname","internal","state","status"];function c(){_.forIn(l.telephones,function(e,t){l.rpcTelephones[t]&&_.merge(e,_.pick(l.rpcTelephones[t],d))})}l.count=a.count,l.attributes=["fullname","internal","state","status","address"],l.telephones=a?_.keyBy(a.rows?a.rows:[],"id"):{},l.rpcTelephones=i?_.keyBy(i.rows?i.rows:[],"id"):{},l.query={fields:"id,fullname,internal",role:"telephone",sort:"-updatedAt",limit:10,page:1},l.statusClass=r.status,l.stateClass=r.state,l.success=p,l.$onInit=c,l.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},l.getTelephones=function(){l.query.offset=(l.query.page-1)*l.query.limit,l.promise=o.user.get(l.query,p).$promise},l.onSave=function(e){l.telephones[e.id]&&_.merge(l.telephones[e.id],_.pick(e,d))},s.on("telephone:save",l.onSave);var m=!0,u=1;function p(e){l.telephones=e?_.keyBy(e.rows?e.rows:[],"id"):{},c()}e.$watch("vm.query.filter",function(e,t){m?n(function(){m=!1}):(t||(u=l.query.page),e!==t&&(l.query.page=1),e||(l.query.page=u),l.getTelephones())}),e.$on("$destroy",function(){s.removeAllListeners("telephone:save")})}e.$inject=["$scope","$timeout","$mdDialog","telephones","rpcTelephones","api","socket","helperClasses"],angular.module("app.voice").controller("TelephonesVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,o,s,r,l){var d=this,c=["status","stateRegistry","registry","host","port","internal","state","status"];function m(){for(var e,t=0;t<d.trunks.length;t+=1)0<=(e=_.findIndex(d.rpcTrunks,["id",d.trunks[t].id]))&&_.merge(d.trunks[t],_.pick(d.rpcTrunks[e],c))}function u(e,t,n){0<=t&&_.merge(e[t],_.pick(n,c))}d.count=a.count,d.trunks=a?a.rows:[],d.rpcTrunks=i&&i.rows?i.rows:[],d.query={fields:"id,name",active:!0,sort:"-updatedAt",limit:10,page:1},d.statusClass=r.status,d.stateClass=r.state,d.success=v,d.$onInit=m,d.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},d.getTrunks=function(){d.query.offset=(d.query.page-1)*d.query.limit,d.promise=o.trunk.get(d.query,v).$promise},d.goToTrunk=function(e,t){l.go("app.tools.trunks.edit",{id:t.id})},d.onSave=function(e){var t=_.findIndex(d.trunks,["id",e.id]),n=_.findIndex(d.rpcTrunks,["id",e.id]);u(d.trunks,t,e),u(d.rpcTrunks,n,e)},s.on("trunk:save",d.onSave);var p=!0,g=1;function v(e){d.count=e.count,d.trunks=e&&e.rows?e.rows:[],m()}e.$watch("vm.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=d.query.page),e!==t&&(d.query.page=1),e||(d.query.page=g),d.getTrunks())}),e.$on("$destroy",function(){s.removeAllListeners("trunk:save")})}e.$inject=["$scope","$timeout","$mdDialog","trunks","rpcTrunks","api","socket","helperClasses","$state"],angular.module("app.voice").controller("TrunksVoiceRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_VOICEMAIL",u.voicemail=angular.copy(r),u.voicemails=s,u.newVoicemail=!1,u.voicemail||(u.voicemail={attach:"no"},u.title="VOICE.NEW_VOICEMAIL",u.newVoicemail=!0),u.addNewVoicemail=function(){u.errors=[],l.voiceMail.save(u.voicemail).$promise.then(function(e){u.voicemails.unshift(e.toJSON()),o.success({title:"Voicemail properly created",msg:u.voicemail.name?u.voicemail.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVoicemail=function(){u.errors=[],l.voiceMail.update({id:u.voicemail.id},u.voicemail).$promise.then(function(e){var t=_.find(u.voicemails,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Voicemail properly saved!",msg:u.voicemail.name?u.voicemail.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVoicemail=function(e){u.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(){l.voiceMail.delete({id:u.voicemail.id}).$promise.then(function(){_.remove(u.voicemails,{id:u.voicemail.id}),o.success({title:"Voicemail properly deleted!",msg:(u.voicemail.name||"voicemail")+" has been deleted!"}),p(u.voicemail)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","voicemails","voicemail","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditVoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.voicemail={},c.voicemailMessages={count:0,rows:[]},c.selectedVoicemailMessages=[],c.query={fields:"createdAt,updatedAt,id,callerid,duration,audio,stamp,msg_id",sort:"-stamp",limit:10,page:1},c.init=function(e){c.voicemail=e,c.query.id=c.voicemail.id,c.getVoicemailMessages()},c.deleteConfirm=function(e,t){var n=o.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");o.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.voiceMailMessageDownload=function(o,e){return l.voiceMailMessage.download({id:o.id,exists:!0}).$promise.then(function(e){var t=[e.buffer],n="message"+o.id,a=new Blob(t,{type:e.type});n=o.msg_id+".wav";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),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){o.show({controller:"CreateOrEditMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicemails/edit/messages/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicemail:c.voicemail,message:t,messages:c.voicemailMessages.rows,license:null,setting:null}})},c.exportSelectedVoicemailMessages=function(){var e=angular.copy(c.selectedVoicemailMessages);return c.selectedVoicemailMessages=[],e},c.deleteVoicemailMessage=g,c.deleteSelectedVoicemailMessages=function(e){var t=o.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");o.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,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=i,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=t.protocol()+"://"+t.host(),c.voicemail=d||e.params.voicemail||{},c.selectedTab=e.params.tab||0,c.alert=r.info,c.gotoVoicemails=function(){e.go("app.voice.voicemails")},c.saveVoicemail=function(){s.voiceMail.update({id:c.voicemail.id},c.voicemail).$promise.then(function(){r.success({title:"Voicemail updated!",msg:c.voicemail.name?c.voicemail.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMail",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceContext.get({fields:"name",sort:"name"}).$promise.then(function(e){c.contexts=e.rows||[]}).catch(function(e){r.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","license","setting","api","toasty","Auth","voicemail"],angular.module("app.voice").controller("VoicemailController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.voicemails=r||{count:0,rows:[]},v.table="voicemails",v.listOrder="",v.listOrderAsc=null,v.selectedVoicemails=[],v.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},v.arrayattach=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayenvelope=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraydelete=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.voice.voicemails.edit",{id:e.id,voicemail:e})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the voicemail?").htmlContent("<b>"+(e.name||"voicemail")+"</b> will be deleted.").ariaLabel("delete voicemail").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getVoicemails=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceMail.get(v.query,f).$promise},v.createOrEditVoicemail=function(e,t){i.show({controller:"CreateOrEditVoicemailDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicemails/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicemail:t,voicemails:v.voicemails.rows,license:v.license,setting:v.setting}})},v.deleteVoicemail=A,v.exportSelectedVoicemails=function(){var e=angular.copy(v.selectedVoicemails);return v.selectedVoicemails=[],e},v.deleteSelectedVoicemails=function(e){var t=i.confirm().title("Are you sure want to delete the selected voicemails?").htmlContent("<b>"+v.selectedVoicemails.length+" selected</b> will be deleted.").ariaLabel("delete Voicemails").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVoicemails.forEach(function(e){A(e)}),v.selectedVoicemails=[]})},v.deselectVoicemails=function(){v.selectedVoicemails=[]},v.selectAllVoicemails=function(){v.selectedVoicemails=v.voicemails.rows};var h=!0,b=1;function f(e){v.voicemails=e||{count:0,rows:[]}}function A(e){l.voiceMail.delete({id:e.id}).$promise.then(function(){_.remove(v.voicemails.rows,{id:e.id}),v.voicemails.count-=1,v.voicemails.rows.length||v.getVoicemails(),c.success({title:"Voicemail deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceMail"}];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:"SYSTEM:DELETEvoiceMail",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVoicemails())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","voicemails","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoicemailsController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_VOICEPREFIX",u.voicePrefix=angular.copy(r),u.voicePrefixes=s,u.newvoicePrefix=!1,u.voicePrefix||(u.voicePrefix={},u.title="VOICE.NEW_VOICEPREFIX",u.newvoicePrefix=!0),u.addNewvoicePrefix=function(){u.errors=[],l.voicePrefix.save(u.voicePrefix).$promise.then(function(e){u.voicePrefixes.unshift(e.toJSON()),o.success({title:"voicePrefix properly created",msg:u.voicePrefix.name?u.voicePrefix.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.savevoicePrefix=function(){u.errors=[],l.voicePrefix.update({id:u.voicePrefix.id},u.voicePrefix).$promise.then(function(e){var t=_.find(u.voicePrefixes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"voicePrefix properly saved!",msg:u.voicePrefix.name?u.voicePrefix.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deletevoicePrefix=function(e){u.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(){l.voicePrefix.delete({id:u.voicePrefix.id}).$promise.then(function(){_.remove(u.voicePrefixes,{id:u.voicePrefix.id}),o.success({title:"voicePrefix properly deleted!",msg:(u.voicePrefix.name||"voicePrefix")+" has been deleted!"}),p(u.voicePrefix)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p,l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){u.outboundRoutes=e.rows||[]}).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","toasty","voicePrefixes","voicePrefix","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditvoicePrefixDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.voicePrefix[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.voicePrefix.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UservoicePrefix?"penalty "+e.UservoicePrefix.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UservoicePrefix?"penalty "+e.UservoicePrefix.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.voicePrefix=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,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){a.voicePrefix[t?"removeAgents":"addAgents"]({id:l.voicePrefix.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"voicePrefix properly "+(t?"removed":"added"),msg:"voicePrefix has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:voicePrefix.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","voicePrefix","voicePrefixes","realtime","$translate","Auth"],angular.module("app.voice").controller("voicePrefixagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.voicePrefixes=r||{count:0,rows:[]},v.table="voicePrefixes",v.listOrder="",v.listOrderAsc=null,v.selectedVoicePrefixes=[],v.query={fields:"createdAt,updatedAt,id,name,VoiceExtensionId,callerIdAll,description",limit:10,page:1},v.editdialog=function(e,t){i.show({controller:"CreateOrEditvoicePrefixDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/create/dialog.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{voicePrefix:e,voicePrefixes:v.voicePrefixes.rows,license:v.license,setting:null}})},v.agentadddialog=function(e,t){i.show({controller:"voicePrefixagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{voicePrefix:e,voicePrefixes:v.voicePrefixes?v.voicePrefixes.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the voicePrefix?").htmlContent("<b>"+(e.name||"voicePrefix")+"</b> will be deleted.").ariaLabel("delete voicePrefix").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getVoicePrefixes=function(){v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voicePrefix.get(v.query,f).$promise},v.createOrEditvoicePrefix=function(e,t){i.show({controller:"CreateOrEditvoicePrefixDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicePrefix:t,voicePrefixes:v.voicePrefixes.rows,license:v.license,setting:v.setting}})},v.deletevoicePrefix=A,v.exportSelectedVoicePrefixes=function(){var e=angular.copy(v.selectedVoicePrefixes);return v.selectedVoicePrefixes=[],e},v.deleteSelectedVoicePrefixes=function(e){var t=i.confirm().title("Are you sure want to delete the selected voicePrefixes?").htmlContent("<b>"+v.selectedVoicePrefixes.length+" selected</b> will be deleted.").ariaLabel("delete voicePrefixs").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVoicePrefixes.forEach(function(e){A(e)}),v.selectedVoicePrefixes=[]})},v.deselectVoicePrefixes=function(){v.selectedVoicePrefixes=[]},v.selectAllVoicePrefixes=function(){v.selectedVoicePrefixes=v.voicePrefixes.rows},l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){v.outboundRoutes=_.keyBy(e.rows||[],"id")}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=!0,b=1;function f(e){v.voicePrefixes=e||{count:0,rows:[]}}function A(e){l.voicePrefix.delete({id:e.id}).$promise.then(function(){_.remove(v.voicePrefixes.rows,{id:e.id}),v.voicePrefixes.count-=1,v.voicePrefixes.rows.length||v.getVoicePrefixes(),c.success({title:"voicePrefix deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoicePrefix"}];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:"SYSTEM:DELETEvoicePrefix",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVoicePrefixes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","voicePrefixes","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoicePrefixesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_VOICEQUEUE",u.voiceQueue=angular.copy(r),u.voiceQueues=s,u.newVoiceQueue=!1,u.voiceQueue||(u.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"},u.title="VOICE.NEW_VOICEQUEUE",u.newVoiceQueue=!0),u.addNewVoiceQueue=function(){u.errors=[],l.voiceQueue.save(u.voiceQueue).$promise.then(function(e){return l.user.addQueues({id:d.getCurrentUser().id,ids:[e.id],channel:"voice",penalty:0,realtime:!1}).$promise,e}).then(function(e){u.voiceQueues.unshift(e.toJSON()),o.success({title:"VoiceQueue properly created",msg:u.voiceQueue.name?u.voiceQueue.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVoiceQueue=function(){u.errors=[],l.voiceQueue.update({id:u.voiceQueue.id},u.voiceQueue).$promise.then(function(e){var t=_.find(u.voiceQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceQueue properly saved!",msg:u.voiceQueue.name?u.voiceQueue.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVoiceQueue=function(e){u.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(){l.voiceQueue.delete({id:u.voiceQueue.id}).$promise.then(function(){return l.voiceQueue.getAgents({id:u.voiceQueue.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(l.user.removeQueues({id:d.getCurrentUser().id,ids:[u.voiceQueue.id],channel:"voice",penalty:0,realtime:!1}).$promise);return i.all(t)}).then(function(){_.remove(u.voiceQueues,{id:u.voiceQueue.id}),o.success({title:"VoiceQueue properly deleted!",msg:(u.voiceQueue.name||"voiceQueue")+" has been deleted!"}),p(u.voiceQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","voiceQueues","voiceQueue","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditVoiceQueueDialogController",e)}(),function(){"use strict";function e(e,n,a,t,i,o,s,r){var l=this;function d(){return a.voiceQueue[l.isVoiceRealtime()?"getMembers":"getAgents"]({id:l.voiceQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){return l.isVoiceRealtime()?l.selectedItems=e.rows?_.map(e.rows,function(e){return e.id=e.UserId,e.fullname=e.membername,e.penalty=e.hasOwnProperty("penalty")?"penalty "+e.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[]:l.selectedItems=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",e.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.selectedItems=l.selectedItems,r.hasRole("admin")?a.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise:a.user.getAgents({id:r.getCurrentUser().id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise}).then(function(e){l.items=e.rows?_.map(e.rows,function(e){return e.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",e.internal=e.internal?"<"+e.internal+">":"",e}):[],l.dualMultiselectOptions.items=_.differenceBy(l.items,l.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS.GETAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}l.voiceQueue=t,l.penalty=0,l.items=[],l.selectedItems=[],l.closeDialog=function(){e.hide()},l.isVoiceRealtime=function(){return o},l.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!o,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){a.voiceQueue[t?"removeAgents":"addAgents"]({id:l.voiceQueue.id,ids:_.map(e,l.isVoiceRealtime()&&t?"UserId":"id"),penalty:l.penalty||0,realtime:o||!1}).$promise.then(function(){n.success({title:"VoiceQueue properly "+(t?"removed":"added"),msg:"VoiceQueue has been "+(t?"removed":"added")+"!"}),t||d()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:voiceQueue.ADDAGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},d()}e.$inject=["$mdDialog","toasty","api","voiceQueue","voiceQueues","realtime","$translate","Auth"],angular.module("app.voice").controller("VoiceQueueagentaddController",e)}(),function(){"use strict";function e(e,n,a,t,i){var o=this;o.voiceQueue=t,o.penalty=0,o.items=[],o.selectedItems=[],o.dualMultiselectOptions={items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:i.instant("VOICE.ALL_TEAMS"),labelSelected:i.instant("VOICE.SELECTED_TEAMS"),transferCallback:function(e,t){a.voiceQueue[t?"removeTeams":"addTeams"]({id:o.voiceQueue.id,ids:_.map(e,"id"),penalty:o.penalty||0}).$promise.then(function(){n.success({title:"Team properly "+(t?"removed":"added"),msg:"Team has been "+(t?"removed":"added")+"!"})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:voiceQueue.ADDTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},o.closeDialog=function(){e.hide()},a.voiceQueue.getTeams({id:o.voiceQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){return o.selectedItems=e.rows?e.rows:[],o.dualMultiselectOptions.selectedItems=o.selectedItems,a.team.get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){o.items=e.rows?e.rows:[],o.dualMultiselectOptions.items=_.differenceBy(o.items,o.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","toasty","api","voiceQueue","$translate"],angular.module("app.voice").controller("VoiceQueueteamaddController",e)}(),function(){"use strict";function e(n,e,a,i,t,o,s,r,l,d){var c=this;c.currentUser=l.getCurrentUser(),c.license=t,c.setting=o,c.passwordPattern=c.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",c.location=e.protocol()+"://"+e.host(),c.voiceQueue=d||n.params.voiceQueue||{},c.selectedTab=n.params.tab||0,c.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:c.voiceQueues?c.voiceQueues.rows:[]}})},c.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:c.voiceQueues?c.voiceQueues.rows:[],realtime:!1}})},c.gotogoto=function(e,t){n.go("app.voice.realtime.queues",{})},c.alert=r.info,c.gotoVoiceQueues=function(){n.go("app.voice.voiceQueues")},c.saveVoiceQueue=function(){s.voiceQueue.update({id:c.voiceQueue.id},c.voiceQueue).$promise.then(function(){r.success({title:"VoiceQueue updated!",msg:c.voiceQueue.name?c.voiceQueue.name+" has been updated!":""})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.voiceMusicOnHold.get({fields:"name",nolimit:"true"}).$promise.then(function(e){c.musiconholds=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmusiconholds",msg:e.data?JSON.stringify(e.data):e.toString()})}),s.sound.get({fields:"name,save_name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.sounds=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","license","setting","api","toasty","Auth","voiceQueue"],angular.module("app.voice").controller("VoiceQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.voiceQueues=r||{count:0,rows:[]},v.table="voiceQueues",v.listOrder="",v.listOrderAsc=null,v.selectedVoiceQueues=[],v.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",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,page:1},v.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"),"")}),v.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:"unknoww",value:"'unknown'"},{option:"wrapup",value:"'wrapup'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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:"unknoww",value:"'unknown'"},{option:"wrapup",value:"'wrapup'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayrandom_periodic_announce=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayannounce_holdtime=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Once",value:"'once'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arrayreportholdtime=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayautopause=_.keyBy([{option:"Yes",value:"'all'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arrayringinuse=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraytimeoutrestart=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.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"),"")}),v.arraysetinterfacevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysetqueuevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.arraysetqueueentryvar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),v.editstate=function(e,t){n.go("app.voice.voiceQueues.edit",{id:e.id,voiceQueue:e})},v.teamadddialog=function(e,t){i.show({controller:"VoiceQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/teamadd/teamadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:v.voiceQueues?v.voiceQueues.rows:[]}})},v.agentadddialog=function(e,t){i.show({controller:"VoiceQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/agentadd/agentadd.html",parent:angular.element(o.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:v.voiceQueues?v.voiceQueues.rows:[],realtime:!1}})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the voiceQueue?").htmlContent("<b>"+(e.name||"voiceQueue")+"</b> will be deleted.").ariaLabel("delete voiceQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.gotorealtimegoto=function(e,t){n.go("app.voice.realtime.queues",{})},v.success=f,v.getVoiceQueues=function(){v.query.offset=(v.query.page-1)*v.query.limit,m.hasRole("admin")?v.promise=l.voiceQueue.get(v.query,f).$promise:(v.query.id=v.currentUser.id,v.promise=l.user.getQueues(v.query,f).$promise)},v.createOrEditVoiceQueue=function(e,t){i.show({controller:"CreateOrEditVoiceQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceQueue:t,voiceQueues:v.voiceQueues.rows,license:v.license,setting:v.setting}})},v.deleteVoiceQueue=A,v.exportSelectedVoiceQueues=function(){var e=angular.copy(v.selectedVoiceQueues);return v.selectedVoiceQueues=[],e},v.deleteSelectedVoiceQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected voiceQueues?").htmlContent("<b>"+v.selectedVoiceQueues.length+" selected</b> will be deleted.").ariaLabel("delete VoiceQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVoiceQueues.forEach(function(e){A(e)}),v.selectedVoiceQueues=[]})},v.deselectVoiceQueues=function(){v.selectedVoiceQueues=[]},v.selectAllVoiceQueues=function(){v.selectedVoiceQueues=v.voiceQueues.rows};var h=!0,b=1;function f(e){v.voiceQueues=e||{count:0,rows:[]}}function A(e){l.voiceQueue.delete({id:e.id}).$promise.then(function(){_.remove(v.voiceQueues.rows,{id:e.id}),v.voiceQueues.count-=1,v.voiceQueues.rows.length||v.getVoiceQueues(),c.success({title:"VoiceQueue deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceQueue"}];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:"SYSTEM:DELETEvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVoiceQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","voiceQueues","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoiceQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m){var u=this;function p(e){a.hide(e)}u.errors=[],u.setting=m,u.license=c,u.passwordPattern=u.setting&&u.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",u.title="VOICE.EDIT_VOICERECORDING",u.voiceRecording=angular.copy(r),u.voiceRecordings=s,u.newVoiceRecording=!1,u.voiceRecording||(u.voiceRecording={},u.title="VOICE.NEW_VOICERECORDING",u.newVoiceRecording=!0),u.addNewVoiceRecording=function(){u.errors=[],l.voiceRecording.save(u.voiceRecording).$promise.then(function(e){u.voiceRecordings.unshift(e.toJSON()),o.success({title:"VoiceRecording properly created",msg:u.voiceRecording.name?u.voiceRecording.name+" has been created!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.saveVoiceRecording=function(){u.errors=[],l.voiceRecording.update({id:u.voiceRecording.id},u.voiceRecording).$promise.then(function(e){var t=_.find(u.voiceRecordings,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceRecording properly saved!",msg:u.voiceRecording.name?u.voiceRecording.name+" has been saved!":""}),p(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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()})})},u.deleteVoiceRecording=function(e){u.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(){l.voiceRecording.delete({id:u.voiceRecording.id}).$promise.then(function(){_.remove(u.voiceRecordings,{id:u.voiceRecording.id}),o.success({title:"VoiceRecording properly deleted!",msg:(u.voiceRecording.name||"voiceRecording")+" has been deleted!"}),p(u.voiceRecording)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){u.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(){})},u.getDateFromString=function(e){return new Date(e)},u.closeDialog=p}e.$inject=["$scope","$state","$location","$mdDialog","$q","toasty","voiceRecordings","voiceRecording","api","Auth","license","setting"],angular.module("app.voice").controller("CreateOrEditVoiceRecordingDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g){var v=this;v.license=u,v.setting=p,v.currentUser=m.getCurrentUser(),v.voiceRecordings=r||{count:0,rows:[]},v.table="voiceRecordings",v.listOrder="",v.listOrderAsc=null,v.selectedVoiceRecordings=[],v.query={fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,membername,rating,audio,userDisposition",sort:"-updatedAt",limit:10,page:1},v.localizationMap=g,v.pickerModel={dateStart:null},v.downloadfile2=function(o,e){return l.voiceRecording.download({id:o.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=o.uniqueid+o.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++)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.voiceRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the voiceRecording?").htmlContent("<b>"+(e.name||"voiceRecording")+"</b> will be deleted.").ariaLabel("delete voiceRecording").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){A(e)},function(){console.log("CANCEL")})},v.success=f,v.getVoiceRecordings=function(){v.query.dateStart=void 0,v.query.dateEnd=void 0,v.pickerModel.dateStart&&(v.query.dateStart=v.pickerModel.dateStart,v.query.dateEnd=v.pickerModel.dateEnd);v.query.offset=(v.query.page-1)*v.query.limit,v.promise=l.voiceRecording.get(v.query,f).$promise},v.createOrEditVoiceRecording=function(e,t){i.show({controller:"CreateOrEditVoiceRecordingDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceRecordings/create/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceRecording:t,voiceRecordings:v.voiceRecordings.rows,license:v.license,setting:v.setting}})},v.deleteVoiceRecording=A,v.exportSelectedVoiceRecordings=function(){var e=angular.copy(v.selectedVoiceRecordings);return v.selectedVoiceRecordings=[],e},v.deleteSelectedVoiceRecordings=function(e){var t=i.confirm().title("Are you sure want to delete the selected voiceRecordings?").htmlContent("<b>"+v.selectedVoiceRecordings.length+" selected</b> will be deleted.").ariaLabel("delete VoiceRecordings").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){v.selectedVoiceRecordings.forEach(function(e){A(e)}),v.selectedVoiceRecordings=[]})},v.deselectVoiceRecordings=function(){v.selectedVoiceRecordings=[]},v.selectAllVoiceRecordings=function(){v.selectedVoiceRecordings=v.voiceRecordings.rows},v.clearDateFilter=function(){v.pickerModel={dateStart:null},v.getVoiceRecordings()};var h=!0,b=1;function f(e){v.voiceRecordings=e||{count:0,rows:[]}}function A(e){l.voiceRecording.delete({id:e.id}).$promise.then(function(){_.remove(v.voiceRecordings.rows,{id:e.id}),v.voiceRecordings.count-=1,v.voiceRecordings.rows.length||v.getVoiceRecordings(),c.success({title:"VoiceRecording deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceRecording"}];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:"SYSTEM:DELETEvoiceRecording",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){h?s(function(){h=!1}):(t||(b=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=b),v.getVoiceRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","voiceRecordings","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoiceRecordingsController",e)}(),function(){"use strict";function e(t,n,o,a,s,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 s.hasRole("agent")||!s.hasPermission(e)&&!s.hasRole("admin")}}}function c(e,t){return{id:e,title:t.name||"NONAME",state:"app.plugins.plugin",stateParams:t,weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(e)&&!s.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!s.hasPermission(e)}})}l.isAgent=function(){return s.getCurrentUser()&&s.hasRole("agent")},o.saveItem("apps",{title:"APPS",group:!0,weight:1,hidden:function(){return s.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(){o.saveItem("version",{title:"VERSION "+l.version,group:!0,weight:2,hidden:function(){return s.hasRole("agent")}})}),s.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,o.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){o.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",weight:17,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1900)&&!s.hasRole("admin")}});for(var a=0;a<n.length;a+=1)t=88888+n[a].id,o.saveItem("apps.plugins.plugin_"+t,c(t,n[a]));o.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),o.saveItem("apps.dashboards",{id:100,title:"Dashboards",translate:"DASHBOARDS.DASHBOARDS",icon:"icon-tile-four",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(100)&&!s.hasRole("admin")}}),o.saveItem("apps.dashboards.general",{id:101,title:"General",route:"",translate:"DASHBOARDS.GENERAL",state:"app.dashboards.general",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(101)&&!s.hasRole("admin")}}),o.saveItem("apps.staff",{id:200,title:"Staff",translate:"STAFF.STAFF",icon:"icon-account-multiple",weight:3,hidden:function(){return s.hasRole("agent")||!s.hasPermission(200)&&!s.hasRole("admin")}}),o.saveItem("apps.staff.users",{id:201,title:"Users",route:"user",translate:"STAFF.USERS",state:"app.staff.users",weight:1,hidden:function(){return s.hasRole("agent")||s.hasRole("user")||!s.hasPermission(201)&&!s.hasRole("admin")}}),o.saveItem("apps.staff.agents",{id:202,title:"Agents",route:"user",translate:"STAFF.AGENTS",state:"app.staff.agents",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(202)&&!s.hasRole("admin")}}),o.saveItem("apps.staff.telephones",{id:203,title:"Telephones",route:"user",translate:"STAFF.TELEPHONES",state:"app.staff.telephones",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(203)&&!s.hasRole("admin")}}),o.saveItem("apps.staff.teams",{id:204,title:"Teams",route:"team",translate:"STAFF.TEAMS",state:"app.staff.teams",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(204)&&!s.hasRole("admin")}}),o.saveItem("apps.contactmanager",{id:300,title:"ContactManager",translate:"CONTACTMANAGER.CONTACTMANAGER",icon:"icon-account-circle",weight:4,hidden:function(){return!e.cm||s.hasRole("agent")||!s.hasPermission(300)&&!s.hasRole("admin")}}),o.saveItem("apps.contactmanager.lists",{id:301,title:"Lists",route:"cmList",translate:"CONTACTMANAGER.LISTS",state:"app.contactmanager.lists",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(301)&&!s.hasRole("admin")}}),o.saveItem("apps.contactmanager.companies",{id:302,title:"Companies",route:"cmCompany",translate:"CONTACTMANAGER.COMPANIES",state:"app.contactmanager.companies",weight:3,hidden:function(){return s.hasRole("agent")||!s.hasPermission(302)&&!s.hasRole("admin")}}),o.saveItem("apps.contactmanager.globalCustomFields",{id:304,title:"GlobalCustomFields",route:"cmCustomField",translate:"CONTACTMANAGER.GLOBALCUSTOMFIELDS",state:"app.contactmanager.globalCustomFields",weight:4,hidden:function(){return s.hasRole("agent")||!s.hasPermission(304)&&!s.hasRole("admin")}}),o.saveItem("apps.contactmanager.contacts",{id:303,title:"Contacts",route:"",translate:"CONTACTMANAGER.CONTACTS",state:"app.contactmanager.contacts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(303)&&!s.hasRole("admin")}}),o.saveItem("apps.voice",{id:400,title:"Voice",translate:"VOICE.VOICE",icon:"icon-phone",weight:5,hidden:function(){return!e.voice||s.hasRole("agent")||!s.hasPermission(400)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.voiceQueues",{id:401,title:"VoiceQueues",route:"voiceQueue",channel:"voice",translate:"VOICE.VOICEQUEUES",state:"app.voice.voiceQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(401)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.inboundroutes",{id:402,title:"InboundRoutes",route:"voiceExtension",translate:"VOICE.INBOUNDROUTES",state:"app.voice.inboundroutes",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(402)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.outboundroutes",{id:403,title:"OutboundRoutes",route:"voiceExtension",translate:"VOICE.OUTBOUNDROUTES",state:"app.voice.outboundroutes",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(403)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.internalroutes",{id:404,title:"InternalRoutes",route:"voiceExtension",translate:"VOICE.INTERNALROUTES",state:"app.voice.internalroutes",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(404)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.contexts",{id:405,title:"Contexts",route:"voiceContext",translate:"VOICE.CONTEXTS",state:"app.voice.contexts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(405)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.voicemails",{id:406,title:"Voicemails",route:"voiceMail",translate:"VOICE.VOICEMAILS",state:"app.voice.voicemails",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(406)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.musiconholds",{id:407,title:"MusicOnHolds",route:"voiceMusicOnHold",translate:"VOICE.MUSICONHOLDS",state:"app.voice.musiconholds",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(407)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.voiceRecordings",{id:408,title:"VoiceRecordings",route:"voiceRecording",translate:"VOICE.VOICERECORDINGS",state:"app.voice.voiceRecordings",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(408)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.chanSpies",{id:409,title:"ChanSpies",route:"voiceChanSpy",translate:"VOICE.CHANSPIES",state:"app.voice.chanSpies",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(409)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.voicePrefixes",{id:410,title:"VoicePrefixes",route:"voicePrefix",translate:"VOICE.VOICEPREFIXES",state:"app.voice.voicePrefixes",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(410)&&!s.hasRole("admin")}}),o.saveItem("apps.voice.realtime",{id:411,title:"Realtime",route:"",translate:"VOICE.REALTIME",state:"app.voice.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(411)&&!s.hasRole("admin")}}),o.saveItem("apps.chat",{id:500,title:"Chat",translate:"CHAT.CHAT",icon:"icon-hangouts",weight:6,hidden:function(){return!e.chat||s.hasRole("agent")||!s.hasPermission(500)&&!s.hasRole("admin")}}),o.saveItem("apps.chat.chatQueues",{id:501,title:"ChatQueues",route:"chatQueue",channel:"chat",translate:"CHAT.CHATQUEUES",state:"app.chat.chatQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(501)&&!s.hasRole("admin")}}),o.saveItem("apps.chat.chatWebsites",{id:502,title:"ChatWebsites",route:"chatWebsite",channel:"chat",translate:"CHAT.CHATWEBSITES",state:"app.chat.chatWebsites",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(502)&&!s.hasRole("admin")}}),o.saveItem("apps.chat.realtime",{id:510,title:"Realtime",route:"",translate:"CHAT.REALTIME",state:"app.chat.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(510)&&!s.hasRole("admin")}}),o.saveItem("apps.mail",{id:600,title:"Mail",translate:"MAIL.MAIL",icon:"icon-email",weight:7,hidden:function(){return!e.mail||s.hasRole("agent")||!s.hasPermission(600)&&!s.hasRole("admin")}}),o.saveItem("apps.mail.mailQueues",{id:601,title:"MailQueues",route:"mailQueue",channel:"mail",translate:"MAIL.MAILQUEUES",state:"app.mail.mailQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(601)&&!s.hasRole("admin")}}),o.saveItem("apps.mail.mailAccounts",{id:602,title:"MailAccounts",route:"mailAccount",channel:"mail",translate:"MAIL.MAILACCOUNTS",state:"app.mail.mailAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(602)&&!s.hasRole("admin")}}),o.saveItem("apps.mail.mailSubtatuses",{id:603,title:"MailSubstatuses",route:"mailSubstatus",channel:"mail",translate:"MAIL.MAILSUBSTATUSES",state:"app.mail.mailSubtatuses",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(603)&&!s.hasRole("admin")}}),o.saveItem("apps.mail.realtime",{id:610,title:"Realtime",route:"",translate:"MAIL.REALTIME",state:"app.mail.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(610)&&!s.hasRole("admin")}}),o.saveItem("apps.sms",{id:700,title:"Sms",translate:"SMS.SMS",icon:"icon-message-text",weight:8,hidden:function(){return!e.messaging||s.hasRole("agent")||!s.hasPermission(700)&&!s.hasRole("admin")}}),o.saveItem("apps.sms.smsQueues",{id:701,title:"SmsQueues",route:"smsQueue",channel:"sms",translate:"SMS.SMSQUEUES",state:"app.sms.smsQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(701)&&!s.hasRole("admin")}}),o.saveItem("apps.sms.smsAccounts",{id:702,title:"SmsAccounts",route:"smsAccount",channel:"sms",translate:"SMS.SMSACCOUNTS",state:"app.sms.smsAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(702)&&!s.hasRole("admin")}}),o.saveItem("apps.sms.realtime",{id:710,title:"Realtime",route:"",translate:"SMS.REALTIME",state:"app.sms.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(710)&&!s.hasRole("admin")}}),o.saveItem("apps.openchannel",{id:800,title:"Openchannel",translate:"OPENCHANNEL.OPENCHANNEL",icon:"icon-google-earth",weight:9,hidden:function(){return!e.openchannel||s.hasRole("agent")||!s.hasPermission(800)&&!s.hasRole("admin")}}),o.saveItem("apps.openchannel.openchannelQueues",{id:801,title:"OpenchannelQueues",route:"openchannelQueue",channel:"openChannel",translate:"OPENCHANNEL.OPENCHANNELQUEUES",state:"app.openchannel.openchannelQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(801)&&!s.hasRole("admin")}}),o.saveItem("apps.openchannel.openchannelAccounts",{id:802,title:"OpenchannelAccounts",route:"openchannelAccount",channel:"openChannel",translate:"OPENCHANNEL.OPENCHANNELACCOUNTS",state:"app.openchannel.openchannelAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(802)&&!s.hasRole("admin")}}),o.saveItem("apps.openchannel.realtime",{id:810,title:"Realtime",route:"",translate:"OPENCHANNEL.REALTIME",state:"app.openchannel.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(810)&&!s.hasRole("admin")}}),o.saveItem("apps.fax",{id:900,title:"Fax",translate:"FAX.FAX",icon:"icon-deskphone",weight:10,hidden:function(){return!e.fax||s.hasRole("agent")||!s.hasPermission(900)&&!s.hasRole("admin")}}),o.saveItem("apps.fax.faxQueues",{id:901,title:"FaxQueues",route:"faxQueue",channel:"fax",translate:"FAX.FAXQUEUES",state:"app.fax.faxQueues",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(901)&&!s.hasRole("admin")}}),o.saveItem("apps.fax.faxAccounts",{id:902,title:"FaxAccounts",route:"faxAccount",channel:"fax",translate:"FAX.FAXACCOUNTS",state:"app.fax.faxAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(902)&&!s.hasRole("admin")}}),o.saveItem("apps.fax.realtime",{id:910,title:"Realtime",route:"",translate:"FAX.REALTIME",state:"app.fax.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(910)&&!s.hasRole("admin")}}),o.saveItem("apps.tools",{id:1e3,title:"Tools",translate:"TOOLS.TOOLS",icon:"icon-auto-fix",weight:13,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1e3)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.cannedAnswers",{id:1002,title:"CannedAnswers",route:"cannedAnswer",translate:"TOOLS.CANNEDANSWERS",state:"app.tools.cannedAnswers",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1002)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.dispositions",{id:1002,title:"Dispositions",route:"disposition",translate:"TOOLS.DISPOSITIONS",state:"app.tools.dispositions",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1002)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.customDashboards",{id:1003,title:"CustomDashboards",route:"dashboard",translate:"TOOLS.CUSTOMDASHBOARDS",state:"app.tools.customDashboards",weight:3,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1003)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.intervals",{id:1004,title:"Intervals",route:"interval",translate:"TOOLS.INTERVALS",state:"app.tools.intervals",weight:4,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1004)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.pauses",{id:1005,title:"Pauses",route:"pause",translate:"TOOLS.PAUSES",state:"app.tools.pauses",weight:5,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1005)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.schedules",{id:42,title:"Scheduler",route:"schedule",translate:"TOOLS.SCHEDULER",state:"app.tools.schedules",weight:6,hidden:function(){return s.hasRole("agent")||!s.hasPermission(42)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.sounds",{id:1006,title:"Sounds",route:"sound",translate:"TOOLS.SOUNDS",state:"app.tools.sounds",weight:7,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1006)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.tags",{id:1007,title:"Tags",route:"tag",translate:"TOOLS.TAGS",state:"app.tools.tags",weight:8,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1007)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.templates",{id:1008,title:"Templates",route:"template",translate:"TOOLS.TEMPLATES",state:"app.tools.templates",weight:9,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1008)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.triggers",{id:1009,title:"Triggers",route:"trigger",translate:"TOOLS.TRIGGERS",state:"app.tools.triggers",weight:10,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1009)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.trunks",{id:1010,title:"Trunks",route:"trunk",translate:"TOOLS.TRUNKS",state:"app.tools.trunks",weight:11,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1010)&&!s.hasRole("admin")}}),o.saveItem("apps.tools.variables",{id:1011,title:"Variables",route:"variable",translate:"TOOLS.VARIABLES",state:"app.tools.variables",weight:12,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1011)&&!s.hasRole("admin")}}),o.saveItem("apps.callysquare",{id:1100,title:"CallySquare",translate:"CALLYSQUARE.CALLYSQUARE",icon:"icon-sitemap",weight:11,hidden:function(){return!e.voice||s.hasRole("agent")||!s.hasPermission(1100)&&!s.hasRole("admin")}}),o.saveItem("apps.callysquare.odbcs",{id:1101,title:"ODBC",route:"squareOdbc",translate:"CALLYSQUARE.ODBC",state:"app.callysquare.odbcs",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1101)&&!s.hasRole("admin")}}),o.saveItem("apps.callysquare.squareRecordings",{id:1102,title:"SquareRecordings",route:"squareRecording",translate:"CALLYSQUARE.SQUARERECORDINGS",state:"app.callysquare.squareRecordings",weight:3,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1102)&&!s.hasRole("admin")}}),o.saveItem("apps.callysquare.projects",{id:1103,title:"Projects",route:"squareProject",translate:"CALLYSQUARE.PROJECTS",state:"app.callysquare.projects",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1103)&&!s.hasRole("admin")}}),o.saveItem("apps.analytics",{id:1200,title:"Analytics",translate:"ANALYTICS.ANALYTICS",icon:"icon-chart-line",weight:14,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1200)&&!s.hasRole("admin")}}),o.saveItem("apps.analytics.metrics",{id:1201,title:"Metrics",route:"analyticMetric",translate:"ANALYTICS.METRICS",state:"app.analytics.metrics",weight:3,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1201)&&!s.hasRole("admin")}}),o.saveItem("apps.analytics.extractedReports",{id:1202,title:"ExtractedReports",route:"analyticExtractedReport",translate:"ANALYTICS.EXTRACTEDREPORTS",state:"app.analytics.extractedReports",weight:2,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1202)&&!s.hasRole("admin")}}),o.saveItem("apps.analytics.reports",{id:1203,title:"Reports",route:"",translate:"ANALYTICS.REPORTS",state:"app.analytics.reports",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1203)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations",{id:1300,title:"Integrations",translate:"INTEGRATIONS.INTEGRATIONS",icon:"icon-heart",weight:15,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1300)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.zendeskAccounts",{id:1301,title:"ZendeskAccounts",route:"intZendeskAccount",translate:"INTEGRATIONS.ZENDESKACCOUNTS",state:"app.integrations.zendeskAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1301)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.salesforceAccounts",{id:1302,title:"SalesforceAccounts",route:"intSalesforceAccount",translate:"INTEGRATIONS.SALESFORCEACCOUNTS",state:"app.integrations.salesforceAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1302)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.freshdeskAccounts",{id:1303,title:"FreshdeskAccounts",route:"intFreshdeskAccount",translate:"INTEGRATIONS.FRESHDESKACCOUNTS",state:"app.integrations.freshdeskAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1303)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.sugarcrmAccounts",{id:1305,title:"SugarcrmAccounts",route:"intSugarcrmAccount",translate:"INTEGRATIONS.SUGARCRMACCOUNTS",state:"app.integrations.sugarcrmAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1305)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.deskAccounts",{id:1306,title:"DeskAccounts",route:"intDeskAccount",translate:"INTEGRATIONS.DESKACCOUNTS",state:"app.integrations.deskAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1306)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.zohoAccounts",{id:1307,title:"ZohoAccounts",route:"intZohoAccount",translate:"INTEGRATIONS.ZOHOACCOUNTS",state:"app.integrations.zohoAccounts",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1307)&&!s.hasRole("admin")}}),o.saveItem("apps.integrations.vtigerAccounts",{id:1308,title:"VtigerAccounts",route:"intVtigerAccount",translate:"INTEGRATIONS.VTIGERACCOUNTS",state:"app.integrations.vtigerAccounts",weight:1,badge:{content:"beta",color:"orange"},hidden:function(){return s.hasRole("agent")||!s.hasPermission(1308)&&!s.hasRole("admin")}}),o.saveItem("apps.settings",{id:1400,title:"Settings",translate:"SETTINGS.SETTINGS",icon:"icon-cog",weight:18,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1400)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.generals",{id:1401,title:"General",route:"setting",translate:"SETTINGS.GENERAL",state:"app.settings.generals",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1401)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.smtps",{id:1402,title:"Smtp",route:"mailAccount",translate:"SETTINGS.SMTP",state:"app.settings.smtps",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1402)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.networks",{id:1403,title:"Networks",route:"network",translate:"SETTINGS.NETWORKS",state:"app.settings.networks",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1403)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.customizations",{id:1407,title:"Customizations",route:"setting",translate:"SETTINGS.CUSTOMIZATIONS",state:"app.settings.customizations",weight:1,hidden:function(){return!e.custom||s.hasRole("agent")||!s.hasPermission(1407)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.updates",{id:1404,title:"Updates",route:"",translate:"SETTINGS.UPDATES",state:"app.settings.updates",weight:1,hidden:function(){return!e.update||s.hasRole("agent")||!s.hasPermission(1404)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.license",{id:1405,title:"License",route:"",translate:"SETTINGS.LICENSE",state:"app.settings.license",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1405)&&!s.hasRole("admin")}}),o.saveItem("apps.settings.system",{id:1406,title:"System",route:"",translate:"SETTINGS.SYSTEM",state:"app.settings.system",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1406)&&!s.hasRole("admin")}}),o.saveItem("apps.help",{id:1600,title:"Help",translate:"HELP.HELP",icon:"icon-help",weight:19,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1600)&&!s.hasRole("admin")}}),o.saveItem("apps.help.about",{id:1601,title:"About",route:"",translate:"HELP.ABOUT",state:"app.help.about",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1601)&&!s.hasRole("admin")}}),o.saveItem("apps.motiondialer",{id:1500,title:"MotionDialer",translate:"MOTIONDIALER.MOTIONDIALER",icon:"icon-fire",weight:5,hidden:function(){return!e.dialer||s.hasRole("agent")||!s.hasPermission(1500)&&!s.hasRole("admin")}}),o.saveItem("apps.motiondialer.queueCampaigns",{id:1501,title:"QueueCampaigns",route:"voiceQueue",channel:"bull",translate:"MOTIONDIALER.QUEUECAMPAIGNS",state:"app.motiondialer.queueCampaigns",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1501)&&!s.hasRole("admin")}}),o.saveItem("apps.motiondialer.ivrCampaigns",{id:1502,title:"IvrCampaigns",route:"campaign",translate:"MOTIONDIALER.IVRCAMPAIGNS",state:"app.motiondialer.ivrCampaigns",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1502)&&!s.hasRole("admin")}}),o.saveItem("apps.motiondialer.realtime",{id:1510,title:"Realtime",route:"",translate:"MOTIONDIALER.REALTIME",state:"app.motiondialer.realtime",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1510)&&!s.hasRole("admin")}}),o.saveItem("apps.jscripty",{id:1700,title:"jscripty",translate:"JSCRIPTY.JSCRIPTY",icon:"icon-script",weight:12,hidden:function(){return!e.jscripty||s.hasRole("agent")||!s.hasPermission(1700)&&!s.hasRole("admin")}}),o.saveItem("apps.jscripty.projects",{id:1701,title:"Projects",route:"jscriptyProject",translate:"JSCRIPTY.PROJECTS",state:"app.jscripty.projects",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1701)&&!s.hasRole("admin")}}),o.saveItem("apps.marketplace",{id:1800,title:"Marketplace",translate:"MARKETPLACE.MARKETPLACE",icon:"icon-cart",weight:16,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1800)&&!s.hasRole("admin")}}),o.saveItem("apps.marketplace.plugins",{id:1801,title:"Plugins",route:"plugin",translate:"MARKETPLACE.PLUGINS",state:"app.marketplace.plugins",weight:1,hidden:function(){return s.hasRole("agent")||!s.hasPermission(1801)&&!s.hasRole("admin")}}),o.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!s.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||!s.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||!s.hasPermission(103)}}),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||!s.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||!s.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||!s.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||!s.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||!s.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||!s.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||!s.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||!s.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,s,r){var i=this;function o(e){if(e&&e.id){var t=99999+e.id;s.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){s.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;s.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")}}),s.sort()}}else{t=88888+e.id;n=1900,a=t,i=s.getNavigation(),(o=_.find(i[0].children,{id:n}))&&_.some(o.children,{id:a})&&("always"==e.sidebar||"adminOnly"==e.sidebar)&&(s.deleteItem("apps.plugins.plugin_"+t),d(1900)||s.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",weight:17,hidden:function(){return!0}}))}var n,a,i,o}function d(e){var t=s.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",o),a.on("dashboard:update",o),a.on("dashboard:remove",function(e){if(e&&e.id){var t=99999+e.id;s.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||(s.deleteItem("apps.plugins.plugin_"+t),d(1900)||s.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,o,s,r){var l=this;function d(n){s.isSupported()?s.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},s.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),o.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),o.user.getGroups({id:l.currentUser.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(o.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,o,s,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))},o.on("chatInternalMessage:save",u.onMessageSave),o.on("chatInternalMessage:update",u.onMessageUpdate),o.on("user:update",u.onUserUpdate),s("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(){o.removeAllListeners("chatInternalMessage:save"),o.removeAllListeners("chatInternalMessage:update"),o.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,o,s,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=s.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=[],o.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,o.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,o,t,s,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 s.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){o.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 r.user.get({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=o.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");o.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){o.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 s.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 s.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 s.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,o,s,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,o){var s=this;s.form={token:o.token},s.setting={},s.resetPassword=function(){return i.auth.reset(s.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})})},s.onInit=function(){e.isLoggedIn()&&a.go("app.dashboards.general");return i.setting.gdpr({id:1}).$promise.then(function(e){s.setting=e,s.passwordPattern=s.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:""}).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,o){var s=this;function r(){e.hide()}s.errors=[],s.user=a,s.setting=i,s.reset=o,s.passwordPattern=s.setting.securePassword?/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/:"",s.savePassword=function(){s.errors=[],n.user.changePassword({id:s.user.id},{oldPassword:s.oldPassword,newPassword:s.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),s.errors=e.data.errors&&e.data.errors.length?e.data.errors:[{message:e.data.message||"Authorization error",type:"api.user.changePassword"}]})},s.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,o,s,r){var l=this,d=[];function c(e){_.isNil(e)&&o.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.preview=s,l.originated=!1,l.disable=!1,l.disableGetContact=!1,d.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,d=[],c(!0)):o.rpc.getVoiceQueuesPreview({id:l.preview.id}).$promise.then(function(e){c(!0)}).catch(function(e){i.error({title:"Message",msg:e.data}),c(!0)}).finally(function(){l.disable=!1,d=[]})},l.closeDialog=c,l.nextContact=function(){l.disableGetContact=!0,l.originated||o.cmHopper.update({id:l.preview.id,UserId:null});return o.cmHopper.getPreview({hopperIds:d}).$promise.then(function(e){_.isNil(e)||_.isNil(e.Queue)||!e.Queue.dialActive?i.info({title:"PREVIEW",msg:"CAMPAIGN NOT ACTIVE"}):(l.preview=e,d.push(l.preview.id))}).catch(function(e){if(d=[],a.hide(),404===e.status)i.info({title:"PREVIEW",msg:"CONTACT NOT AVAILABLE"});else if(e.data&&e.data.errors&&e.data.errors.length){l.errors=e.data.errors||[{message:e.toString(),type:"api preview"}];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"],e)},l.isNil=function(e){return _.isNil(e)},e.$on("$destroy",function(){l.originated||o.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(e,t,o,n,s,a,i,r,l,d,c,m,u,p,g,v,h,b,f,A,E){var y,S=this;function T(e){S.voiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}function C(){S.promise=b.user.getQueues(S.query,T).$promise}function x(e){return v.logout(e).then(function(){return h.disconnect(),t.$broadcast("webrtc::logout"),n.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:A,reset:t}})}S.voiceQueues={},S.polling=!0,t.global={search:""},S.pauses=[],S.license=f,S.currentUser=v.getCurrentUser(),S.unreadTotalMessages=0,S.unreadTotalGroupMessages=0,S.contcts=0,"agent"===S.currentUser.role&&(y=E(function(){_.some(S.voiceQueues,{dialMethod:"preview",dialActive:!0})&&S.license.dialer&&S.polling?(S.polling=!1,b.cmHopper.getOpenContacts().$promise.then(function(e){e&&_.isNumber(e.contacts)&&(S.contacts=e.contacts)}).finally(function(){S.polling=!0})):S.contacts=0},14999)),S.setting=A,S.bodyEl=angular.element("body"),S.conf={realm:"asterisk",host:a.host(),protocol:a.protocol(),remotePlayerId:"remote-audio",ua:"Motion WebRTC Bar 0.2.0",license:S.license.webrtc,phoneBarExpires:S.currentUser.phoneBarExpires},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"},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-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"}},S.toggleSidenav=function(e){i(e).toggle()},S.logout=x,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"===n.current.name&&d.location.reload()},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=o.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 s(function(){a.resolve(e)},1e3),a.promise},S.searchResultClick=function(e){e.uisref&&(e.stateParams?n.go(e.state,e.stateParams):n.go(e.state))},S.openSettings=function(e){t.$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){x(!0)}).finally(function(){_.merge(S.user,e),v.updateCurrentUser(S.user)})}else x(!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.extravar||"Not defined")+"</span><br>              </div>",showClose:!0,timeout:1e4,html:!0})},S.pause=function(e){return b.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 b.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,b.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(b.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(),b.chatInternalMessage.get({fields:"FromId",ToId:S.currentUser.id,read:!1,nolimit:!0}).$promise.then(function(e){S.unreadTotalMessages=e.rows.length}),e.$on("$destroy",function(){h.removeAllListeners("user:called"),h.removeAllListeners("user:update"),h.removeAllListeners("chatInternalMessage:save"),h.removeAllListeners("chatInternalMessage:update"),h.removeAllListeners("userVoiceQueue:save"),h.removeAllListeners("voiceQueue:save"),h.removeAllListeners("userVoiceQueue:remove"),h.removeAllListeners("voiceQueue:remove"),h.removeAllListeners("voiceQueue:update"),y&&(E.cancel(y),y=null)})}e.$inject=["$scope","$rootScope","$q","$state","$timeout","$location","$mdSidenav","$translate","$mdToast","$window","$mdDialog","$document","$cookies","toasty","msNavigationService","Auth","socket","api","license","setting","$interval"],angular.module("app.toolbar").controller("ToolbarController",e)}();var urlParams=function(e){var t=new Object,n=e.lastIndexOf("?");if(0<n)for(var a=e.substring(n+1).split("&"),i=0;i<a.length;i++)0<(n=a[i].indexOf("="))&&(t[a[i].substring(0,n)]=a[i].substring(n+1));return t}(window.location.href),t0=new Date,MAX_REQUEST_SIZE=10485760,MAX_WIDTH=12e3,MAX_HEIGHT=12e3,EXPORT_URL="http://exp.draw.io/ImageExport2/export",SHARE_HOST="http://localhost:3000",SAVE_URL="api/square/projects/",VARIABLE_URL="/api/variables",STENCIL_PATH="/assets/plugins/square/stencils",SHAPES_PATH="/assets/plugins/square/shapes",IMAGE_PATH="/assets/plugins/square/images",STYLE_PATH="/assets/plugins/square/styles",CSS_PATH="/assets/plugins/square/styles",OPEN_FORM="api/square/projects/open",TEMPLATE_PATH="/assets/plugins/square/templates",RESOURCES_PATH="/assets/plugins/square/resources",RESOURCE_BASE=RESOURCES_PATH+"/grapheditor",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 o=mxLog.window.getElement();e=function(e,t){mxLog.textarea.style.height=Math.max(0,o.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 o=e.charAt(i);"{"==o?a="":null!=a&&"}"==o?(0<=(a=parseInt(a)-1)&&a<t.length&&n.push(t[a]),a=null):null!=a?a+=o:n.push(o)}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,o=(n.geometry.x-n.previous.x)*i,s=(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-=o,a.y-=s,a.width-=r,a.height-=i):(a.x+=o/10,a.y+=s/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 o=e.model.getChildAt(t,i),s=e.getView().getState(o);null!=s&&(mxUtils.setOpacity(s.shape.node,n),mxEffects.cascadeOpacity(e,o,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,o){a=a||40,i=i||30;var s=t||100;if(mxUtils.setOpacity(e,s),o||null==o){var r=function(){s=Math.max(s-a,0),mxUtils.setOpacity(e,s),0<s?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 o=0;o<i.length;o++){var s=mxUtils.htmlEntities(i[o].nodeValue);a.push(" "+i[o].nodeName+'="'+s+'"')}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,o){return mxUtils.link(e,t,function(){n[a](i)},o)},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,o=(a.scrollLeft||i.scrollLeft)+(a.clientWidth||i.clientWidth);o<t+n&&(e.style.left=Math.max(a.scrollLeft||i.scrollLeft,o-n)+"px"),t=parseInt(e.offsetTop),n=parseInt(e.offsetHeight),(o=(a.scrollTop||i.scrollTop)+Math.max(a.clientHeight||0,i.clientHeight))<t+n&&(e.style.top=Math.max(a.scrollTop||i.scrollTop,o-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,o,s,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=(o=1<(v=(c=i*i)/(g=n*n)+(p=d*d)/(A=a*a))?(n*=Math.sqrt(v),a*=Math.sqrt(v),0):(v=1,o===s&&(v=-1),v*Math.sqrt((g*A-g*p-A*c)/(g*p+A*c))))*n*d/a)-h*(p=-1*o*a*i/n)+r/2,l=h*c+m*p+l/2,o=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==s&&0<i?i-=2*Math.PI:0!=s&&i<0&&(i+=2*Math.PI),s=2*i/Math.PI,i/=s=Math.ceil(s<0?-1*s:s),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(o),p=-d*(c*(f=Math.sin(o))+a*u),g=-d*(n*f-m*u),v=A=0,h=[],b=0;b<s;++b){o+=i;var f,A=c*(u=Math.cos(o))-a*(f=Math.sin(o))+r,E=(v=n*u+m*f+l,-d*(c*f+a*u));u=-d*(n*f-m*u);h[f=6*b]=Number(p+e),h[f+1]=Number(g+t),h[f+2]=Number(A-E+e),h[f+3]=Number(v-u+t),h[f+4]=Number(A+e),h[f+5]=Number(v+t),p=A+E,g=v+u}return h},getBoundingBox:function(e,t){var n=null;if(null!=e&&null!=t&&0!=t){var a=mxUtils.toRadians(t),i=(n=Math.cos(a),Math.sin(a)),o=new mxPoint(e.x+e.width/2,e.y+e.height/2),s=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);s=mxUtils.getRotatedPoint(s,n,i,o),a=mxUtils.getRotatedPoint(a,n,i,o),r=mxUtils.getRotatedPoint(r,n,i,o),l=mxUtils.getRotatedPoint(l,n,i,o);(n=new mxRectangle(s.x,s.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],o=null,s=1;s<e.absolutePoints.length;s++){var r=e.absolutePoints[s];i=mxUtils.ptSegDistSq(i.x,i.y,r.x,r.y,t,n);(null==o||i<o)&&(o=i,a=s-1),i=r}return a},rectangleIntersectsSegment:function(e,t,n){var a=e.y,i=e.x,o=a+e.height,s=i+e.width;e=t.x;var r=n.x;if(t.x>n.x&&(e=n.x,r=t.x),s<r&&(r=s),e<i&&(e=i),r<e)return!1;i=t.y,s=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),s=n*r+t),s<i&&(t=s,s=i,i=t),o<s&&(s=o),i<a&&(i=a),!(s<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,o=t.height;if(i<=0||o<=0||n<=0||a<=0)return!1;var s=e.x,r=e.y,l=t.x,d=t.y;o+=d,n+=s,a+=r;return((i=i+l)<l||s<i)&&(o<d||r<o)&&(n<s||l<n)&&(a<r||d<a)},intersectsHotspot:function(e,t,n,a,i,o){if(i=null!=i?i:0,o=null!=o?o:0,0<(a=null!=a?a:1)){var s=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):(s=e.x+c/2,l=c)),l=Math.max(i,l*a),d=Math.max(i,d*a),0<o&&(l=Math.min(l,o),d=Math.min(d,o)),a=new mxRectangle(s-l/2,r-d/2,l,d),0!=(s=mxUtils.toRadians(mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION)||0))&&(i=Math.cos(-s),o=Math.sin(-s),s=new mxPoint(e.getCenterX(),e.getCenterY()),t=(e=mxUtils.getRotatedPoint(new mxPoint(t,n),i,o,s)).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,o=document.documentElement;n=n+(i.scrollLeft||o.scrollLeft),a=a+(i.scrollTop||o.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,o,s,r){var l=(r-o)*(n-e)-(s-i)*(a-t);return s=((s-i)*(t-o)-(r-o)*(e-i))/l,i=((n-e)*(t-o)-(a-t)*(e-i))/l,0<=s&&s<=1&&0<=i&&i<=1?new mxPoint(e+s*(n-e),t+s*(a-t)):null},ptSegDistSq:function(e,t,n,a,i,o){return n=(i-=e)*(n-=e)+(o-=t)*(a-=t)<=0?0:(e=(i=n-i)*n+(o=a-o)*a)<=0?0:e*e/(n*n+a*a),(i=i*i+o*o-n)<0&&(i=0),i},relativeCcw:function(e,t,n,a,i,o){return 0==(e=(i-=e)*(a-=t)-(o-=t)*(n-=e))&&(0<(e=i*n+o*a)&&((e=(i-n)*n+(o-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,o){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 o=new mxDictionary;return e.sort(function(e,t){var n=o.get(e);null==n&&(n=mxCellPath.create(e).split(mxCellPath.PATH_SEPARATOR),o.put(e,n));var a=o.get(t);return null==a&&(a=mxCellPath.create(t).split(mxCellPath.PATH_SEPARATOR),o.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 o=mxUtils.setStyle(e.getStyle(t[i]),n,a);e.setStyle(t[i],o)}}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 o=0;o<t.length;o++)if(null!=t[o]){var s=mxUtils.setStyleFlag(e.getStyle(t[o]),n,a,i);e.setStyle(t[o],s)}}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 o=e.indexOf(";",i),s="";s=o<0?e.substring(i+t.length+1):e.substring(i+t.length+1,o),s=null==a?parseInt(s)^n:a?parseInt(s)|n:parseInt(s)&~n;e=e.substring(0,i)+t+"="+s+(0<=o?e.substring(o):"")}}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 o=e.getView(),s=null,r=o.isEventsEnabled();o.setEventsEnabled(!1);var l=o.drawPane,d=o.overlayPane;e.dialect==mxConstants.DIALECT_SVG?(o.drawPane=document.createElementNS(mxConstants.NS_SVG,"g"),o.canvas.appendChild(o.drawPane),o.overlayPane=document.createElementNS(mxConstants.NS_SVG,"g")):(o.drawPane=o.drawPane.cloneNode(!1),o.canvas.appendChild(o.drawPane),o.overlayPane=o.overlayPane.cloneNode(!1)),o.canvas.appendChild(o.overlayPane);var c=o.getTranslate();o.translate=new mxPoint(a,i),t=new mxTemporaryCellStates(e.getView(),t,n);try{s=(new mxCodec).encode(e.getView())}finally{t.destroy(),o.translate=c,o.canvas.removeChild(o.drawPane),o.canvas.removeChild(o.overlayPane),o.drawPane=l,o.overlayPane=d,o.setEventsEnabled(r)}return s},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 o=Math.sqrt(n);if(n=a*o,a/=o,n<1&&e<a){var s=a/e;a=e,n/=s}for(a<1&&e<n&&(s=n/e,n=e,a/=s),s=Math.ceil(n)*Math.ceil(a),o=0;e<s;){s=Math.floor(n)/n;var r=Math.floor(a)/a;if(1==s&&(s=Math.floor(n-1)/n),1==r&&(r=Math.floor(a-1)/a),n*=s=r<s?s:r,a*=s,s=Math.ceil(n)*Math.ceil(a),10<++o)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>",o=document.getElementsByTagName("base"),s=0;s<o.length;s++)i+=o[s].outerHTML;for(i+="<style>",s=0;s<document.styleSheets.length;s++)try{i+=document.styleSheets(s).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>"),o=document.getElementsByTagName("base"),s=0;s<o.length;s++)t.writeln(mxUtils.getOuterHtml(o[s]));for(o=document.getElementsByTagName("link"),s=0;s<o.length;s++)t.writeln(mxUtils.getOuterHtml(o[s]));for(o=document.getElementsByTagName("style"),s=0;s<o.length;s++)t.writeln(mxUtils.getOuterHtml(o[s]));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;)s=e.cloneNode(!0),t.body.appendChild(s),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 o=document.createElement("img");o.setAttribute("src",a||mxUtils.errorImage),o.setAttribute("valign","bottom"),o.style.verticalAlign="middle",i.appendChild(o),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 s=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){s.destroy()}),mxUtils.write(n,mxResources.get(mxUtils.closeResource)||mxUtils.closeResource),t.appendChild(n),i.appendChild(t),mxUtils.br(i),s.setClosable(!0)),s.setVisible(!0),s},makeDraggable:function(e,t,n,i,a,o,s,r,l,d){return(e=new mxDragSource(e,n)).dragOffset=new mxPoint(null!=a?a:0,null!=o?o:mxConstants.TOOLTIP_VERTICAL_OFFSET),e.autoscroll=s,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,o,s){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!=o?o(e):mxEvent.isConsumed(e)||n.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,r(e)))}),mxEvent.addListener(e,"dblclick",function(e){if(null!=s)s(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,o){this.url=e,this.params=t,this.method=n||"POST",this.async=null==a||a,this.username=i,this.password=o}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(),o=0;o<i.length;o++){if(0<(s=i[o].indexOf("="))){var s,r=i[o].substring(0,s),l=i[o].substring(s+1);(s=e.createElement("textarea")).setAttribute("name",r),l=l.replace(/\n/g,"&#xa;"),r=e.createTextNode(l),s.appendChild(r),a.appendChild(s)}}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,o,s,r,l,d){null!=t&&(s=null==s||s,this.content=t,this.init(n,a,i,o,d),this.installMaximizeHandler(),this.installMinimizeHandler(),this.installCloseHandler(),this.setMinimizable(s),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),o=this.div.offsetWidth,s=this.div.offsetHeight,t=mxUtils.bind(this,function(e){var t=mxEvent.getClientX(e)-a,n=mxEvent.getClientY(e)-i;this.setSize(o+t,s+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,o=null,s=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=o,this.div.style.width=s,"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=o,this.table.style.width=s,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),o=this.table.style.height,s=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),o=this.getX(),s=this.getY(),t=mxUtils.bind(this,function(e){var t=mxEvent.getClientX(e)-a,n=mxEvent.getClientY(e)-i;this.setLocation(o+t,s+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),o=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(o)&&0<=i&&0<=o&&0<t-i-o&&(this.div.style.height=t-i-o+"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),o=mxUtils.getScrollOrigin();return n>=i.x-o.x&&a>=i.y-o.y&&n<=i.x-o.x+e.container.offsetWidth&&a<=i.y-o.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 o=!0;if(null!=this.currentGuide&&this.currentGuide.isEnabledForEvent(t))o=new mxRectangle(0,0,o=parseInt(this.previewElement.style.width),s=parseInt(this.previewElement.style.height)),n=new mxPoint(i,n),n=this.currentGuide.move(o,n,a),o=!1,i=n.x,n=n.y;else if(a){a=e.view.scale;var s=e.view.translate,r=e.gridSize/2;i=(e.snap(i/a-s.x-r)+s.x)*a,n=(e.snap(n/a-s.y-r)+s.y)*a}null!=this.currentGuide&&o&&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,o){var s=document.createElement(null!=t?"img":"button"),r=i||(null!=o?"mxToolbarMode":"mxToolbarItem");return s.className=r,s.setAttribute("src",t),null!=e&&(null!=t?s.setAttribute("title",e):mxUtils.write(s,e)),this.container.appendChild(s),null!=n&&(mxEvent.addListener(s,"click",n),mxClient.IS_TOUCH&&mxEvent.addListener(s,"touchend",n)),e=mxUtils.bind(this,function(e){null!=a?s.setAttribute("src",t):s.style.backgroundColor=""}),mxEvent.addGestureListeners(s,mxUtils.bind(this,function(e){if(null!=a?s.setAttribute("src",a):s.style.backgroundColor="gray",null!=o){null==this.menu&&(this.menu=new mxPopupMenu,this.menu.init());var t=this.currentImg;this.menu.isMenuShowing()&&this.menu.hideMenu(),t!=s&&(this.currentImg=s,this.menu.factoryMethod=o,t=new mxPoint(s.offsetLeft,s.offsetTop+s.offsetHeight),this.menu.popup(t.x,t.y,null,e),this.menu.isMenuShowing()&&(s.className=r+"Selected",this.menu.hideMenu=function(){mxPopupMenu.prototype.hideMenu.apply(this),s.className=r,this.currentImg=null}))}}),null,e),mxEvent.addListener(s,"mouseout",e),s},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 o=document.createElement("img");return o.initialClassName=i||"mxToolbarMode",o.className=o.initialClassName,o.setAttribute("src",t),o.altIcon=a,null!=e&&o.setAttribute("title",e),mxEvent.addListener(o,"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=o),null!=(e=(this.selectedMode=o).altIcon)?(o.altIcon=o.getAttribute("src"),o.setAttribute("src",e)):o.className=o.initialClassName+"Selected",this.fireEvent(new mxEventObject(mxEvent.SELECT)),n()})),this.container.appendChild(o),null==this.defaultMode&&(this.defaultMode=o,this.selectMode(o),n()),o},mxToolbar.prototype.addMode=function(e,t,n,a,i,o){o=null==o||o;var s=document.createElement(null!=t?"img":"button");return s.initialClassName=i||"mxToolbarMode",s.className=s.initialClassName,s.setAttribute("src",t),s.altIcon=a,null!=e&&s.setAttribute("title",e),this.enabled&&o&&(mxEvent.addListener(s,"click",mxUtils.bind(this,function(e){this.selectMode(s,n),this.noReset=!1})),mxEvent.addListener(s,"dblclick",mxUtils.bind(this,function(e){this.selectMode(s,n),this.noReset=!0})),null==this.defaultMode&&(this.defaultMode=s,this.defaultFunction=n,this.selectMode(s,n))),this.container.appendChild(s),s},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 o=this.codec.encode(e[i]);n=n+mxUtils.getXml(o,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(o){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()})},o.addMouseListener(this.mouseListener),mxEvent.addListener(document,"mouseup",mxUtils.bind(this,function(){this.active&&this.stop()}));var s=mxUtils.bind(this,function(){return this.scrollbars=mxUtils.hasScrollbars(o.container),this.scrollLeft=o.container.scrollLeft,this.scrollTop=o.container.scrollTop,window.setInterval(mxUtils.bind(this,function(){if(this.tdx-=this.dx,this.tdy-=this.dy,this.scrollbars){var e=-o.container.scrollLeft-Math.ceil(this.dx),t=-o.container.scrollTop-Math.ceil(this.dy);o.panGraph(e,t),o.panDx=this.scrollLeft-o.container.scrollLeft,o.panDy=this.scrollTop-o.container.scrollTop,o.fireEvent(new mxEventObject(mxEvent.PAN))}else o.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=o.view.translate.x,this.t0y=o.view.translate.y,this.active=!0},this.panTo=function(e,t,n,a){this.active||this.start(),this.scrollLeft=o.container.scrollLeft,this.scrollTop=o.container.scrollTop,a=null!=a?a:0;var i=o.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=s())):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)o.panDx=0,o.panDy=0,o.fireEvent(new mxEventObject(mxEvent.PAN));else{var e=o.panDx,t=o.panDy;0==e&&0==t||(o.panGraph(0,0),o.view.setTranslate(this.t0x+e/o.view.scale,this.t0y+t/o.view.scale))}},this.destroy=function(){o.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,o){a=a||this,this.itemCount++,a.willAddSeparator&&(a.containsItems&&this.addSeparator(a,!0),a.willAddSeparator=!1),a.containsItems=!0;var s=document.createElement("tr");s.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)),s.appendChild(r),this.labels&&((r=document.createElement("td")).className="mxPopupMenuItem"+(null==o||o?"":" disabled"),mxUtils.write(r,e),r.align="left",s.appendChild(r),(e=document.createElement("td")).className="mxPopupMenuItem"+(null==o||o?"":" disabled"),e.style.paddingRight="6px",e.style.textAlign="right",s.appendChild(e),null==a.div&&this.createSubmenu(a)),a.tbody.appendChild(s),(null==o||o)&&(mxEvent.addGestureListeners(s,mxUtils.bind(this,function(e){this.eventReceiver=s,a.activeRow!=s&&a.activeRow!=a&&(null!=a.activeRow&&null!=a.activeRow.div.parentNode&&this.hideSubmenu(a),null!=s.div&&(this.showSubmenu(a,s),a.activeRow=s)),mxEvent.consume(e)}),mxUtils.bind(this,function(e){a.activeRow!=s&&a.activeRow!=a&&(null!=a.activeRow&&null!=a.activeRow.div.parentNode&&this.hideSubmenu(a),this.autoExpand&&null!=s.div&&(this.showSubmenu(a,s),a.activeRow=s)),s.className="mxPopupMenuItemHover"}),mxUtils.bind(this,function(e){this.eventReceiver==s&&(a.activeRow!=s&&this.hideMenu(),null!=n&&n(e)),this.eventReceiver=null,mxEvent.consume(e)})),mxEvent.addListener(s,"mouseout",mxUtils.bind(this,function(e){s.className="mxPopupMenuItem"}))),s},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,o=document.documentElement;n+a>(i.scrollLeft||o.scrollLeft)+(i.clientWidth||o.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 o=this.graph.view.getTranslate(),s=this.graph.view.getScale();i.x+=o.x*s,i.y+=o.y*s,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),o=0;o<i;o++){var s=a.view.getState(a.model.getChildAt(e.cell,o));this.visitStatesRecursive(s,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,o,s,r,l){(n=this.state).fillColor=e,n.fillAlpha=null!=r?r:1,n.gradientColor=t,n.gradientAlpha=null!=l?l:1,n.gradientDirection=s},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,o){this.addOp(this.curveOp,e,t,n,a,i,o)},mxAbstractCanvas2D.prototype.arcTo=function(e,t,n,a,i,o,s){for(e=mxUtils.arcToCurves(this.lastX,this.lastY,e,t,n,a,i,o,s),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,o){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 o=this.createElement("rotate");(0!=e||t||n)&&(o.setAttribute("theta",this.format(e)),o.setAttribute("flipH",t?"1":"0"),o.setAttribute("flipV",n?"1":"0"),o.setAttribute("cx",this.format(a)),o.setAttribute("cy",this.format(i)),this.root.appendChild(o))},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,o,s,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(o)),null!=s&&d.setAttribute("direction",s),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,o){var s=this.createElement("roundrect");s.setAttribute("x",this.format(e)),s.setAttribute("y",this.format(t)),s.setAttribute("w",this.format(n)),s.setAttribute("h",this.format(a)),s.setAttribute("dx",this.format(i)),s.setAttribute("dy",this.format(o)),this.root.appendChild(s)},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,o,s,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",o?"1":"0"),l.setAttribute("flipH",s?"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,o){var s=this.createElement("curve");s.setAttribute("x1",this.format(e)),s.setAttribute("y1",this.format(t)),s.setAttribute("x2",this.format(n)),s.setAttribute("y2",this.format(a)),s.setAttribute("x3",this.format(i)),s.setAttribute("y3",this.format(o)),this.root.appendChild(s),this.lastX=i,this.lastY=o},mxXmlCanvas2D.prototype.close=function(){this.root.appendChild(this.createElement("close"))},mxXmlCanvas2D.prototype.text=function(e,t,n,a,i,o,s,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!=o&&u.setAttribute("align",o),null!=s&&u.setAttribute("valign",s),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 o=this.createGradientId(e,t,n,a,i),s=this.gradients[o];if(null==s){var r=this.root.ownerSVGElement,l=0,d=o+"-"+l;if(null!=r)for(s=r.ownerDocument.getElementById(d);null!=s&&s.ownerSVGElement!=r;)d=o+"-"+l++,s=r.ownerDocument.getElementById(d);else d="id"+ ++this.refCount;null==s&&((s=this.createSvgGradient(e,t,n,a,i)).setAttribute("id",d),null!=this.defs?this.defs.appendChild(s):r.appendChild(s)),this.gradients[o]=s}return s.getAttribute("id")},mxSvgCanvas2D.prototype.createSvgGradient=function(e,t,n,a,i){var o=this.createElement("linearGradient");return o.setAttribute("x1","0%"),o.setAttribute("y1","0%"),o.setAttribute("x2","0%"),o.setAttribute("y2","0%"),null==i||i==mxConstants.DIRECTION_SOUTH?o.setAttribute("y2","100%"):i==mxConstants.DIRECTION_EAST?o.setAttribute("x2","100%"):i==mxConstants.DIRECTION_NORTH?o.setAttribute("y1","100%"):i==mxConstants.DIRECTION_WEST&&o.setAttribute("x1","100%"),n=n<1?";stop-opacity:"+n:"",(i=this.createElement("stop")).setAttribute("offset","0%"),i.setAttribute("style","stop-color:"+e+n),o.appendChild(i),n=a<1?";stop-opacity:"+a:"",(i=this.createElement("stop")).setAttribute("offset","100%"),i.setAttribute("style","stop-color:"+t+n),o.appendChild(i),o},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 o=this.state;if(a+=o.dx,i+=o.dy,a*=o.scale,i*=o.scale,o.transform=o.transform||"",t&&n)e+=180;else if(t^n){var s=t?a:0,r=t?-1:1,l=n?i:0,d=n?-1:1;o.transform+="translate("+this.format(s)+","+this.format(l)+")scale("+this.format(r)+","+this.format(d)+")translate("+this.format(-s)+","+this.format(-l)+")"}(t?!n:n)&&(e*=-1),0!=e&&(o.transform+="rotate("+this.format(e)+","+this.format(a)+","+this.format(i)+")"),o.rotation+=e,o.rotationCx=a,o.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,o=this.createElement("rect");o.setAttribute("x",this.format((e+i.dx)*i.scale)),o.setAttribute("y",this.format((t+i.dy)*i.scale)),o.setAttribute("width",this.format(n*i.scale)),o.setAttribute("height",this.format(a*i.scale)),this.node=o},mxSvgCanvas2D.prototype.roundrect=function(e,t,n,a,i,o){this.rect(e,t,n,a),0<i&&this.node.setAttribute("rx",this.format(i*this.state.scale)),0<o&&this.node.setAttribute("ry",this.format(o*this.state.scale))},mxSvgCanvas2D.prototype.ellipse=function(e,t,n,a){var i=this.state,o=this.createElement("ellipse");o.setAttribute("cx",Math.round((e+n/2+i.dx)*i.scale)),o.setAttribute("cy",Math.round((t+a/2+i.dy)*i.scale)),o.setAttribute("rx",n/2*i.scale),o.setAttribute("ry",a/2*i.scale),this.node=o},mxSvgCanvas2D.prototype.image=function(e,t,n,a,i,o,s,r){i=this.converter.convert(i),o=null==o||o,s=null!=s&&s,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),o||d.setAttribute("preserveAspectRatio","none"),l.alpha<1&&d.setAttribute("opacity",l.alpha),i=this.state.transform||"",s||r){var c=o=1,m=0,u=0;s&&(o=-1,m=-n-2*e),r&&(c=-1,u=-a-2*t),i+="scale("+o+","+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,o,s,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,o,s,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,o==mxConstants.ALIGN_CENTER?i-=n/2:o==mxConstants.ALIGN_RIGHT&&(i-=n),e+=i,s==mxConstants.ALIGN_MIDDLE?d-=a/2:s==mxConstants.ALIGN_BOTTOM&&(d-=a),t+=d,o=1!=u.scale?"scale("+u.scale+")":"",0!=u.rotation&&this.rotateHtml?(o+="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&&(o+="rotate("+m+","+-i+","+-d+")"),r.setAttribute("transform","translate("+Math.round(e)+","+Math.round(t)+")"+o),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,o,s,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)),o=0,s=i+"-"+o;null!=document.getElementById(s);)s=i+"-"+ ++o;return clip=this.createElement("clipPath"),clip.setAttribute("id",s),(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,o,s,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,o==mxConstants.ALIGN_CENTER?g-=n/2:o==mxConstants.ALIGN_RIGHT&&(g-=n),s==mxConstants.ALIGN_MIDDLE?c-=a/2:s==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,o),"start"!=(c=o==mxConstants.ALIGN_RIGHT?"end":o==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,s==mxConstants.ALIGN_MIDDLE?c-=(a=(this.matchHtmlAlignment&&d&&0<a?Math.min(v,a):v)/2)+1:s==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,o,s,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,o,s,r,l){var d=this.state;if(null!=d.fontBackgroundColor||null!=d.fontBorderColor){var c=null;null!=(c=l?(s==mxConstants.ALIGN_CENTER?n-=i/2:s==mxConstants.ALIGN_RIGHT&&(n-=i),r==mxConstants.ALIGN_MIDDLE?a-=o/2:r==mxConstants.ALIGN_BOTTOM&&(a-=o),new mxRectangle((n+1)*d.scale,a*d.scale,(i-2)*d.scale,(o+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,o=c.offsetHeight,c.parentNode.removeChild(c),s==mxConstants.ALIGN_CENTER?n-=i/2:s==mxConstants.ALIGN_RIGHT&&(n-=i),r==mxConstants.ALIGN_MIDDLE?a-=o/2:r==mxConstants.ALIGN_BOTTOM&&(a-=o),new mxRectangle((n+1)*d.scale,(a+2)*d.scale,i*d.scale,(o+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),o=Math.cos(i),s=(i=Math.sin(i),a.shadowDx*a.scale),r=a.shadowDy*a.scale;"x"==this.root.style.flip?s*=-1:"y"==this.root.style.flip&&(r*=-1);var l=e.cloneNode(!0);return l.style.marginLeft=Math.round(s*o-r*i)+"px",l.style.marginTop=Math.round(s*i+r*o)+"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,o=(this.lastX+i.dx)*i.scale,s=(this.lastY+i.dy)*i.scale;e=(e+i.dx)*i.scale;s+=2/3*((t=(t+i.dy)*i.scale)-s);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(o+2/3*(e-o))+" "+this.format(s)+" "+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 o=this.state;return(e=document.createElement(e)).style.position="absolute",e.style.left=this.format((t+o.dx)*o.scale)+"px",e.style.top=this.format((n+o.dy)*o.scale)+"px",e.style.width=this.format(a*o.scale)+"px",e.style.height=this.format(i*o.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,o){this.node=this.createRect(mxClient.VML_PREFIX+":roundrect",e,t,n,a),this.node.setAttribute("arcsize",Math.max(100*i/n,100*o/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,o,s,r){var l=null;o?((l=this.createRect(mxClient.VML_PREFIX+":rect",e,t,n,a)).stroked="false",(e=document.createElement(mxClient.VML_PREFIX+":fill")).aspect=o?"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,s&&r?l.style.rotation="180":s?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,o="";return null!=i.fontBackgroundColor&&(o+="background-color:"+i.fontBackgroundColor+";"),null!=i.fontBorderColor&&(o+="border:1px solid "+i.fontBorderColor+";"),mxUtils.isNode(e)?n.appendChild(e):0<o.length&&!a?((a=document.createElement("div")).style.cssText=o,a.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",a.style.zoom="1",a.innerHTML=e,n.appendChild(a)):(n.style.cssText=o,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,o,s,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(o,s)).x,v=v.y;if(i=this.createDiv(i,o,s,d),o=document.createElement("div"),i.style.whiteSpace=r?(!c&&0<n&&(i.style.width=Math.round(n)+"px"),"normal"):"nowrap",r=u.rotation+(m||0),this.rotateHtml&&0!=r?(o.style.display="inline",o.style.zoom="1",o.appendChild(i),8==document.documentMode&&"DIV"!=this.root.nodeName?(p.appendChild(o),l.appendChild(p)):l.appendChild(o)):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),s=Math.cos(n);var h=Math.sin(n);8==document.documentMode&&(i.style.display="inline-block",o.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*s+n*-h)/2-m*n*(g+.5)+r*a*(v+.5),d=(n-n*s+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"),o.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11="+r+", M12="+m+", M21="+-m+", M22="+r+", sizingMethod='auto expand')",o.style.backgroundColor=this.rotatedHtmlBackground,this.state.alpha<1&&(o.style.filter+="alpha(opacity="+100*this.state.alpha+")"),i.style.visibility="",o.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),o,s,r,l,d,c,m)}},mxVmlCanvas2D.prototype.plainText=function(e,t,n,a,i,o,s,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:"+o,d.style.align=o,d.style.fontFamily=a.fontFamily,d.string=i,d.on="true",o=Math.round(a.fontSize*a.scale/this.vmlScale),d.style.fontSize=o+"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=o+((i=i.split("\n")).length-1)*o*mxConstants.LINE_HEIGHT,o=i=0,s==mxConstants.ALIGN_BOTTOM?o=-a/2:s!=mxConstants.ALIGN_MIDDLE&&(o=a/2),null!=m&&(s=(n.style.rotation=m)*(Math.PI/180),i=Math.sin(s)*o,o*=Math.cos(s)),n.appendChild(d),n.style.left=this.format(e-i)+"px",n.style.top=this.format(t+o)+"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,o=e.x,s=e.y,r=!1,l=!1,d=b=this.getGuideTolerance(),c=b;(b=a.clone()).x+=e.x,b.y+=e.y;var m=b.x,u=b.x+b.width,p=b.getCenterX(),g=b.y,v=b.y+b.height,h=b.getCenterY();e=function(e){e+=this.graph.panDx;var t=!1;if(Math.abs(e-p)<d?(o=e-a.getCenterX(),d=Math.abs(e-p),t=!0):Math.abs(e-m)<d?(o=e-a.x,d=Math.abs(e-m),t=!0):Math.abs(e-u)<d&&(o=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 b=function(e){e+=this.graph.panDy;var t=!1;if(Math.abs(e-h)<c?(s=e-a.getCenterY(),c=Math.abs(e-h),t=!0):Math.abs(e-g)<c?(s=e-a.y,c=Math.abs(e-g),t=!0):Math.abs(e-v)<c&&(s=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},f=0;f<this.states.length;f++){var A=this.states[f];null!=A&&(this.horizontal&&(e.call(this,A.getCenterX()),e.call(this,A.x),e.call(this,A.x+A.width)),this.vertical&&(b.call(this,A.getCenterY()),b.call(this,A.y),b.call(this,A.y+A.height)))}r||null==this.guideX?null!=this.guideX&&(this.guideX.node.style.visibility="visible",this.guideX.redraw()):this.guideX.node.style.visibility="hidden",l||null==this.guideY?null!=this.guideY&&(this.guideY.node.style.visibility="visible",this.guideY.redraw()):this.guideY.node.style.visibility="hidden",t&&(r||(t=a.x-(this.graph.snap(a.x/i-n.x)+n.x)*i,o=this.graph.snap(o/i)*i-t),l||(n=a.y-(this.graph.snap(a.y/i-n.y)+n.y)*i,s=this.graph.snap(s/i)*i-n)),e=new mxPoint(o,s)}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,o){this.drawChildren(e,t,n,a,i,o,this.bgNode,!1),this.drawChildren(e,t,n,a,i,o,this.fgNode,!0)},mxStencil.prototype.drawChildren=function(e,t,n,a,i,o,s,r){if(null!=s){var l=mxUtils.getValue(t.style,mxConstants.STYLE_DIRECTION,null);for(n=this.computeAspect(t.style,n,a,i,o,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),s=s.firstChild;null!=s;)s.nodeType==mxConstants.NODETYPE_ELEMENT&&this.drawNode(e,t,s,n,r),s=s.nextSibling}},mxStencil.prototype.computeAspect=function(e,t,n,a,i,o){e=t,t=a/this.w0;var s=i/this.h0;if(o="north"==o||"south"==o){s=a/this.h0,t=i/this.w0;var r=(a-i)/2;e+=r,n-=r}return"fixed"==this.aspect&&(t=s=Math.min(t,s),o?(e+=(i-this.w0*t)/2,n+=(a-this.h0*s)/2):(e+=(a-this.w0*t)/2,n+=(i-this.h0*s)/2)),new mxRectangle(e,n,t,s)},mxStencil.prototype.drawNode=function(e,t,n,a,i){var o=n.nodeName,s=a.x,r=a.y,l=a.width,d=a.height,c=Math.min(l,d);if("save"==o)e.save();else if("restore"==o)e.restore();else if("path"==o)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"==o)e.close();else if("move"==o)e.moveTo(s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("line"==o)e.lineTo(s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("quad"==o)e.quadTo(s+Number(n.getAttribute("x1"))*l,r+Number(n.getAttribute("y1"))*d,s+Number(n.getAttribute("x2"))*l,r+Number(n.getAttribute("y2"))*d);else if("curve"==o)e.curveTo(s+Number(n.getAttribute("x1"))*l,r+Number(n.getAttribute("y1"))*d,s+Number(n.getAttribute("x2"))*l,r+Number(n.getAttribute("y2"))*d,s+Number(n.getAttribute("x3"))*l,r+Number(n.getAttribute("y3"))*d);else if("arc"==o)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")),s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("rect"==o)e.rect(s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,Number(n.getAttribute("w"))*l,Number(n.getAttribute("h"))*d);else if("roundrect"==o)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(s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,c,a,t,t);else if("ellipse"==o)e.ellipse(s+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,Number(n.getAttribute("w"))*l,Number(n.getAttribute("h"))*d);else if("image"==o)t=this.evaluateAttribute(n,"src",t),e.image(s+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"==o){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(s+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"==o)null!=(m=mxStencilRegistry.getStencil(n.getAttribute("name")))&&(s+=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,s,r,c,a));else if("fillstroke"==o)e.fillAndStroke();else if("fill"==o)e.fill();else if("stroke"==o)e.stroke();else if("strokewidth"==o)e.setStrokeWidth(Number(n.getAttribute("width"))*c);else if("dashed"==o)e.setDashed("1"==n.getAttribute("dashed"));else if("dashpattern"==o){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"==o?e.setStrokeColor(n.getAttribute("color")):"linecap"==o?e.setLineCap(n.getAttribute("cap")):"linejoin"==o?e.setLineJoin(n.getAttribute("join")):"miterlimit"==o?e.setMiterLimit(Number(n.getAttribute("limit"))):"fillcolor"==o?e.setFillColor(n.getAttribute("color")):"alpha"==o?e.setAlpha(n.getAttribute("alpha")):"fontcolor"==o?e.setFontColor(n.getAttribute("color")):"fontstyle"==o?e.setFontStyle(n.getAttribute("style")):"fontfamily"==o?e.setFontFamily(n.getAttribute("family")):"fontsize"==o&&e.setFontSize(Number(n.getAttribute("size"))*c);i&&("fillstroke"==o||"fill"==o||"stroke"==o)&&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,o=this.bounds.height/t;if(this.isPaintBoundsInverted()){n=n+(s=(i-o)/2),a=a-s;var s=i;i=o,o=s}if(this.updateTransform(e,n,a,i,o),this.configureCanvas(e,n,a,i,o),null!=this.stencil)this.paintStencilShape(e,n,a,i,o);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,o)},mxShape.prototype.configureCanvas=function(e,t,n,a,i){var o=null;null!=this.style&&(o=this.style.dashPattern),e.setAlpha(this.opacity/100),null!=this.isShadow&&e.setShadow(this.isShadow),null!=this.isDashed&&e.setDashed(this.isDashed),null!=o&&e.setDashPattern(o),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,o){var s=Math.ceil(this.strokewidth/2);e.setGradient("#ffffff","#ffffff",t,n,a,.6*i,"south",.9,.1),e.begin(),o+=2*s,this.isRounded?(e.moveTo(t-s+o,n-s),e.quadTo(t-s,n-s,t-s,n-s+o),e.lineTo(t-s,n+.4*i),e.quadTo(t+.5*a,n+.7*i,t+a+s,n+.4*i),e.lineTo(t+a+s,n-s+o),e.quadTo(t+a+s,n-s,t+a+s-o,n-s)):(e.moveTo(t-s,n-s),e.lineTo(t-s,n+.4*i),e.quadTo(t+.5*a,n+.7*i,t+a+s,n+.4*i),e.lineTo(t+a+s,n-s)),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,o,s,r,l,d){var c=mxMarker.markers[n];return null!=c?c(e,t,n,a,i,o,s,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,o,s){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!=o?o:mxConstants.ARROW_SPACING,this.endSize=null!=s?s:mxConstants.ARROW_SIZE}function mxText(e,t,n,a,i,o,s,r,l,d,c,m,u,p,g,v,h,b,f,A){mxShape.call(this),this.value=e,this.bounds=t,this.color=null!=i?i:"black",this.align=null!=n?n:"",this.valign=null!=a?a:"",this.family=null!=o?o:mxConstants.DEFAULT_FONTFAMILY,this.size=null!=s?s: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!=b&&b,this.overflow=null!=f?f:"visible",this.labelPadding=null!=A?A:0,this.rotation=0}function mxTriangle(){mxActor.call(this)}function mxHexagon(){mxActor.call(this)}function mxLine(e,t,n){mxShape.call(this),this.bounds=e,this.stroke=t,this.strokewidth=null!=n?n:1}function mxImageShape(e,t,n,a,i){mxShape.call(this),this.bounds=e,this.image=t,this.fill=n,this.stroke=a,this.strokewidth=null!=i?i:1,this.shadow=!1}function mxLabel(e,t,n,a){mxRectangleShape.call(this,e,t,n,a)}function mxCylinder(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxConnector(e,t,n){mxPolyline.call(this,e,t,n)}function mxSwimlane(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxGraphLayout(e){this.graph=e}function mxStackLayout(e,t,n,a,i,o){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!=o?o: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 o=0;o<i.length;o++){var s=i[o];if(null!=(r=s.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==(s.target=l).connectsAsTarget.length&&(l.connectsAsTarget=[]),mxUtils.indexOf(l.connectsAsTarget,s)<0&&l.connectsAsTarget.push(s))}}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,o){this.layout=e,this.intraCellSpacing=t,this.interRankCellSpacing=n,this.orientation=a,this.initialX=i,this.parallelEdgeSpacing=o}!function(){function e(e,t,n,a,i,o,s,r,l,d){t=1.118*i*l,r=1.118*o*l,i*=s+l,o*=s+l;var c=a.clone();return c.x-=t,c.y-=r,s=n!=mxConstants.ARROW_CLASSIC?1:.75,a.x+=-i*s-t,a.y+=-o*s-r,function(){e.begin(),e.moveTo(c.x,c.y),e.lineTo(c.x-i-o/2,c.y-o+i/2),n==mxConstants.ARROW_CLASSIC&&e.lineTo(c.x-3*i/4,c.y-3*o/4),e.lineTo(c.x+o/2-i,c.y-o-i/2),e.close(),d?e.fillAndStroke():e.stroke()}}function t(e,t,n,a,i,o,s,r,l,d){r=n==mxConstants.ARROW_DIAMOND?.7071:.9862,t=i*l*r,r*=o*l,i*=s+l,o*=s+l;var c=a.clone();c.x-=t,c.y-=r,a.x+=-i-t,a.y+=-o-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-o/m,c.y+i/m-o/2),e.lineTo(c.x-i,c.y-o),e.lineTo(c.x-i/2+o/m,c.y-o/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,o,s,r,l,d){t=1.118*i*l,n=1.118*o*l,i*=s+l,o*=s+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-o/2,c.y-o+i/2),e.lineTo(c.x,c.y),e.lineTo(c.x+o/2-i,c.y-o-i/2),e.stroke()}}),mxMarker.addMarker("oval",function(e,t,n,a,i,o,s,r,l,d){var c=s/2,m=a.clone();return a.x-=i*c,a.y-=o*c,function(){e.ellipse(m.x-c,m.y-c,s,s),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 o=mxUtils.getValue(this.style,mxConstants.STYLE_ARCSIZE,100*mxConstants.RECTANGLE_ROUNDING_FACTOR)/100;o=Math.min(a*o,i*o);e.roundrect(t,n,a,i,o,o)}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",o={east:0,south:1,west:2,north:3},s=null!=this.direction?o[this.direction]:0;null!=this.gradientDirection&&(s=mxUtils.mod(s+o[this.gradientDirection]-1,4)),1==s?(i="1",o=n,n=a,a=o):2==s?(o=n,n=a,a=o):3==s&&(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 o=Math.min(4,Math.min(a/5,i/5));i-=2*o,0<(a-=2*o)&&0<i&&e.ellipse(t+o,n+o,a,i),e.stroke()},mxUtils.extend(mxRhombus,mxShape),mxRhombus.prototype.paintVertexShape=function(e,t,n,a,i){var o=a/2,s=i/2;e.begin(),e.moveTo(t+o,n),e.lineTo(t+a,n+s),e.lineTo(t+o,n+i),e.lineTo(t,n+s),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],o=t[t.length-1];e.begin(),e.moveTo(i.x,i.y);for(var s=1;s<t.length-1;s++){var r=t[s],l=i.x-r.x;i=i.y-r.y;if(n&&s<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[s+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(o.x,o.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,o=t[0],s=t[t.length-1],r=s.x-o.x,l=s.y-o.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=o.x-c/2+n*r)+c),u=(o=o.y-a/2+n*l)+a,p=m+d*r,g=p+c,v=(d=u+d*l)+a,h=g-3*c,b=v-3*a;e.begin(),e.moveTo(i,o),e.lineTo(m,u),e.lineTo(p,d),e.lineTo(g,v),e.lineTo(s.x-n*r,s.y-n*l),e.lineTo(h,b),e.lineTo(h+c,b+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 o=mxUtils.isNode(this.value)||this.dialect==mxConstants.DIALECT_STRICTHTML,s=o||e instanceof mxVmlCanvas2D?"html":"",r=this.value;!o&&"html"==s&&(r=mxUtils.htmlEntities(r,!1)),r=!mxUtils.isNode(this.value)&&this.replaceLinefeeds&&"html"==s?r.replace(/\n/g,"<br/>"):r,e.text(n,a,i,t,r,this.align,this.valign,this.wrap,s,"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;t[mxClient.CSS_PREFIX+"Transform"]=0!=e?(t[mxClient.CSS_PREFIX+"TransformOrigin"]=100*-n+"% "+100*-a+"%","translate("+100*n+"%,"+100*a+"%)scale("+this.scale+") rotate("+e+"deg)"):(t[mxClient.CSS_PREFIX+"TransformOrigin"]="0% 0%","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,o=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 s=this.value;this.dialect!=mxConstants.DIALECT_STRICTHTML&&(s=mxUtils.htmlEntities(s,!1)),s=this.replaceLinefeeds?s.replace(/\n/g,"<br/>"):s,r.innerHTML=s}i=r.offsetWidth+2,o=r.offsetHeight+2}else i=this.node.offsetWidth,o=this.node.offsetHeight+1;this.offsetWidth=i,this.offsetHeight=o,r=this.bounds.width/a,s=this.bounds.height/a,mxClient.IS_QUIRKS&&(this.clipped||"fill"==this.overflow)&&0<s?(s=Math.min(s,o),e.height=Math.round(s+1)+"px"):s=o,"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);s*=a;var r=r*a,l=(i=this.getTextRotation()*(Math.PI/180),o=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=(s-s*d+r*c)/2+l*(t=r*-(t+.5))-o*(n=s*-(n+.5));0!=i&&(e.filter="progid:DXImageTransform.Microsoft.Matrix(M11="+o+", M12="+l+", M21="+-l+", M22="+o+", sizingMethod='auto expand')"),e.zoom=a,e.left=Math.round(this.bounds.x+((r-r*d+s*c)/2-o*t-l*n)-r/2)+"px",e.top=Math.round(this.bounds.y+m-s/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 o=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BACKGROUND,null),s=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BORDER,null);null==o&&null==s||(e.setFillColor(o),e.setStrokeColor(s),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),o=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),s=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-s)/2:i==mxConstants.ALIGN_RIGHT?e+(n-s-l):e+l,t=o==mxConstants.ALIGN_TOP?t+l:o==mxConstants.ALIGN_BOTTOM?t+(a-r-l):t+(a-r)/2,s,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),o=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),s=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-s-l):i==mxConstants.ALIGN_CENTER?e+(n-s)/2:e+l,t=o==mxConstants.ALIGN_BOTTOM?t+(a-r-l):o==mxConstants.ALIGN_TOP?t+l:t+(a-r)/2,s,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,o){t=Math.min(this.maxHeight,Math.round(i/5)),(o&&null!=this.fill||!o&&null==this.fill)&&(e.moveTo(0,t),e.curveTo(0,2*t,a,2*t,a,t),o||(e.stroke(),e.begin())),o||(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],o=t[n+1];e.quadTo(i.x,i.y,(i.x+o.x)/2,(i.y+o.y)/2)}i=t[a-2],o=t[a-1],e.quadTo(i.x,i.y,o.x,o.y),e.stroke()},mxConnector.prototype.createMarker=function(e,t,n){var a=t.length,i=n?t[1]:t[a-2],o=(a=(t=n?t[0]:t[a-1]).x-i.x,t.y-i.y),s=(i=a/(s=Math.max(1,Math.sqrt(a*a+o*o))),a=o/s,o=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,s,t,i,a,o,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 o=Math.min(i,mxUtils.getValue(this.style,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),s=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,o),this.paintRoundedSwimlane(e,t,n,a,i,o,l,s,r)):this.paintSwimlane(e,t,n,a,i,o,s,r),s=mxUtils.getValue(this.style,mxConstants.STYLE_SEPARATORCOLOR,mxConstants.NONE),this.paintSeparator(e,a,o,i,s),null!=this.image&&(i=this.getImageBounds(t,o,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,o,l))},mxSwimlane.prototype.paintSwimlane=function(e,t,n,a,i,o,s,r){s!=mxConstants.NONE&&(e.save(),e.setFillColor(s),e.rect(0,0,a,i),e.fillAndStroke(),e.restore(),e.setShadow(!1)),e.begin(),e.moveTo(0,o),e.lineTo(0,0),e.lineTo(a,0),e.lineTo(a,o),r&&e.close(),e.fillAndStroke(),o<i&&s==mxConstants.NONE&&(e.pointerEvents=!1,e.begin(),e.moveTo(0,o),e.lineTo(0,i),e.lineTo(a,i),e.lineTo(a,o),e.stroke())},mxSwimlane.prototype.paintRoundedSwimlane=function(e,t,n,a,i,o,s,r,l){r!=mxConstants.NONE&&(e.save(),e.setFillColor(r),e.roundrect(0,0,a,i,s,s),e.fillAndStroke(),e.restore(),e.setShadow(!1)),e.begin(),e.moveTo(a,o),e.lineTo(a,s),e.quadTo(a,0,a-Math.min(a/2,s),0),e.lineTo(Math.min(a/2,s),0),e.quadTo(0,0,0,s),e.lineTo(0,o),l&&e.close(),e.fillAndStroke(),o<i&&r==mxConstants.NONE&&(e.pointerEvents=!1,e.begin(),e.moveTo(0,o),e.lineTo(0,i-s),e.quadTo(0,i,Math.min(a/2,s),i),e.lineTo(a-Math.min(a/2,s),i),e.quadTo(a,i,a,i-s),e.lineTo(a,o),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 o=mxCellPath.create(e);if(null==i[o]&&(null==(a=n(i[o]=e,a))||a)&&0<(a=this.graph.model.getEdgeCount(e)))for(o=0;o<a;o++){var s=this.graph.model.getEdgeAt(e,o),r=this.graph.model.getTerminal(s,!0)==e;t&&!r||(r=this.graph.view.getVisibleTerminal(s,!r),this.traverse(r,t,n,s,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),o=(i=this.getParentOffset(i),0);o<t.length;o++)t[o].x-=i.x,t[o].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),o=null;if(null!=i){if(o=new mxRectangle(t,n,i.width,i.height),this.useBoundingBox){var s=this.graph.getView().getState(e);if(null!=s&&null!=s.text&&null!=s.text.boundingBox){var r=this.graph.getView().scale,l=s.text.boundingBox;s.text.boundingBox.x<s.x&&(t+=(s.x-l.x)/r,o.width=l.width),s.text.boundingBox.y<s.y&&(n+=(s.y-l.y)/r,o.height=l.height)}}null!=this.parent&&(null!=(s=a.getParent(e))&&s!=this.parent&&(t-=(s=this.getParentOffset(s)).x,n-=s.y)),i.x==t&&i.y==n||((i=i.clone()).x=t,i.y=n,a.setGeometry(e,i))}return o},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,o=Math.max(r.y-a.y,0)/n,s=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-o,t.width+i+s,t.height+o+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),o=this.graph.getBoundingBoxFromGeometry(i),s=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!=o&&null!=s&&((s=s.clone()).x=s.x+o.x-t-r,s.y=s.y+o.y-t-l,s.width=o.width+2*t+r,s.height=o.height+2*t+l,this.graph.getModel().setGeometry(a,s),this.graph.moveCells(i,t+r-o.x,t+l-o.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),o=this.isHorizontal();if(null!=e&&null!=i){var s=0,r=0,l=a.getChildCount(i);for(t=o?t:n,null!=(s=this.graph.getView().getState(i))&&(t-=o?s.x:s.y),s=0;s<l;s++)if((n=a.getChildAt(i,s))!=e&&null!=(n=a.getGeometry(n))){if(n=o?n.x+n.width/2:n.y+n.height/2,r<t&&t<n)break;r=n}o=i.getIndex(e),o=Math.max(0,s-(o<s?1:0)),a.add(i,e,o)}},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 o=this.x0+this.border,s=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?s+=l:o+=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?s+=l+this.spacing:o+=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=o:u.y=s),t?u.y=s:u.x=o,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,o=0,s=n.getChildCount(a);for(i=0;i<s;i++){var r=n.getChildAt(a,i);if(null!=(r=this.getVertexBounds(r))){if(r=r.x+r.width/2,o<t&&t<r)break;o=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=[],o=n.getChildCount(e),s=0;s<o;s++){var r=n.getChildAt(e,s);!this.isVertexIgnored(r)&&this.isVertexMovable(r)&&i.push(r)}if(0<(o=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+(o-1)*this.spacing,0<(a=t?(a.width-l-e)/o:(a.height-d-e)/o)){n.beginUpdate();try{for(s=0;s<o;s++){r=i[s];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<(s=this.graph.findTreeRoots(e,!0,this.invert)).length)for(var a=0;a<s.length;a++)if(!this.isVertexIgnored(s[a])&&0<this.graph.getEdges(s[a],null,this.invert,!this.invert,!1).length){t=s[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 o=this.graph.gridSize,s=o;if(!this.moveTree){var r=this.getVertexBounds(t);null!=r&&(o=r.x,s=r.y)}if((r=null)!=(r=this.isHorizontal()?this.horizontalLayout(i,o,s):this.verticalLayout(i,null,o,s))){var l=a=0;r.x<0&&(a=Math.abs(o-r.x)),r.y<0&&(l=Math.abs(s-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 o=null;e=this.graph.getEdges(e,t,this.invert,!this.invert,!1,!0);for(var s=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=s.getState(l))?d.getVisibleTerminal(this.invert):s.getVisibleTerminal(l,this.invert);null!=(d=this.dfs(l,t,n))&&null!=a.getGeometry(l)&&(null==o?i.child=d:o.next=d,o=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 o=this.merge(e.contour,n.contour);n.offsetY=o+a,n.offsetX=0,i+=o+(a=n.width+t),n=n.next}return i},mxCompactTreeLayout.prototype.merge=function(e,t){for(var n=0,a=0,i=0,o=e.lowerHead,s=t.upperHead;null!=s&&null!=o;){var r=this.offset(n,a,s.dx,s.dy,o.dx,o.dy);a=a+r,i=i+r;n+s.dx<=o.dx?(n+=s.dx,a+=s.dy,s=s.next):(n-=o.dx,a-=o.dy,o=o.next)}return null!=s?(n=this.bridge(e.upperTail,0,0,s,n,a),e.upperTail=null!=n.next?t.upperTail:n,e.lowerTail=t.lowerTail):null==(n=this.bridge(t.lowerTail,n,a,o,0,0)).next&&(e.lowerTail=n),e.lowerHead=t.lowerHead,i},mxCompactTreeLayout.prototype.offset=function(e,t,n,a,i,o){var s;return i<=e||e+n<=0?0:0<(s=0<i*a-n*o?e<0?e*a/n-t:0<e?e*o/i-t:-t:i<e+n?o-(t+(i-e)*a/n):e+n<i?(n+e)*o/i-(t+a):o-(t+a))?s:0},mxCompactTreeLayout.prototype.bridge=function(e,t,n,a,i,o){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,o+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 o=t.x;this.horizontal&&(o=t.y),i.push(new WeightedCellSorter(t,o)),t=t.next}i.sort(WeightedCellSorter.prototype.compare),(o=e.width)>(s=(a+1)*this.prefHozEdgeSep)+2*this.prefHozEdgeSep&&(o-=2*this.prefHozEdgeSep),t=(e=o/a)/2,o>s+2*this.prefHozEdgeSep&&(t+=this.prefHozEdgeSep);o=this.minEdgeJetty-this.prefVertEdgeOff;for(var s=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+o,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+o,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?o+=this.prefVertEdgeOff:a/2<l&&(o-=this.prefVertEdgeOff),t+=e,s=Math.max(s,o)}},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,o=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 s=this.vertexArray[a];this.cellLocation[a]=[];var r=mxCellPath.create(s);this.indices[r]=a;var l=this.getVertexBounds(s),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<o;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(o)),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++)s=this.vertexArray[a],this.isVertexMovable(s)&&(null!=(l=this.getVertexBounds(s))&&(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(s,m,u),n=null==n?m:Math.min(n,m),e=null==e?u:Math.min(e,u)));a=1-(n||0),s=1-(e||0),null!=i&&(a+=i.x,s+=i.y),this.graph.moveCells(this.vertexArray,a,s)}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=(o=this.cellLocation[e][0]-this.cellLocation[n][0])*o+(s=this.cellLocation[e][1]-this.cellLocation[n][1])*s-this.radiusSquared[e]-this.radiusSquared[n])<this.minDistanceLimitSquared&&(a=this.minDistanceLimitSquared);var a,i=Math.sqrt(a),o=o/i*(a=a/this.forceConstant),s=s/i*a;this.dispX[e]-=o,this.dispY[e]-=s,this.dispX[n]+=o,this.dispY[n]+=s}}},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 o=Math.sqrt(a*a+i*i),s=o-this.radius[t]-this.radius[n];s>this.maxDistanceLimit||(s<this.minDistanceLimit&&(s=this.minDistanceLimit),a=a/o*(s=this.forceConstantSquared/s),i=i/o*s,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,o=[],s=t.getChildCount(e),r=0;r<s;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{o.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(o.length,n);this.moveCircle&&(i=this.x0,a=this.y0),this.circle(o,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,o=2*Math.PI/i,s=0;s<i;s++)this.isVertexMovable(e[s])&&this.setVertexLocation(e[s],n+t+t*Math.sin(s*o),a+t+t*Math.cos(s*o))},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 o=t.getChildAt(e,i);if(!this.isEdgeIgnored(o)){var s=this.getEdgeId(o);null!=s&&(null==n[s]&&(n[s]=[]),n[s].push(o))}}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((s=(n=this.graph.getModel()).getGeometry(n.getTerminal(t,!0)))==(o=n.getGeometry(n.getTerminal(t,!1)))){t=s.x+s.width+this.spacing;for(var n=s.y+s.height/2,a=0;a<e.length;a++)this.route(e[a],t,n),t+=this.spacing}else if(null!=s&&null!=o){t=s.x+s.width/2,n=s.y+s.height/2,a=o.x+o.width/2-t;var i=o.y+o.height/2-n,o=Math.sqrt(a*a+i*i),s=i*this.spacing/o;for(o=a*this.spacing/o,t=t+a/2+s*(e.length-1)/2,n=n+i/2-o*(e.length-1)/2,a=0;a<e.length;a++)this.route(e[a],t,n),t-=s,n+=o}},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=[],o=n.getChildCount(e),s=0;s<o;s++){var r=n.getChildAt(e,s),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 o=0;o<e.length;o++){var s=e[o];null!=s&&this.avoid(i,s)}}}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,o=-a.y+t.y+t.height;i=Math.abs(i)<Math.abs(o)?i:o,o=-a.x-a.width+t.x,a=-a.x+t.x+t.width,a=Math.abs(o)<Math.abs(a)?o:a;Math.abs(a)<Math.abs(i)?i=0:a=0,null!=(o=n.getGeometry(e.cell))&&(null!=(o=o.clone()).offset?(o.offset.x+=a,o.offset.y+=i):o.offset=new mxPoint(a,i),n.setGeometry(e.cell,o))}},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 o=mxCellPath.create(t[i]);this.vertexMapper[o]=n[i],o=e.getEdges(t[i]),n[i].connectsAsSource=[];for(var s=0;s<o.length;s++){if((d=e.getVisibleTerminal(o[s],!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 o,s;o=(n=e[0]).connectsAsTarget,s=n.connectsAsSource;var r=!0,l=this.SOURCESCANSTARTRANK;for(t=0;t<o.length;t++){var d=o[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!=s)for(t=0;t<s.length;t++)(d=s[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,o=(n=i[t]).connectsAsSource,a=0;a<o.length;a++)d=(d=o[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 o=[];this.ranks=[];for(var e=0;e<this.maxRank+1;e++)o[e]=[],this.ranks[e]=o[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&&(o[t.temp[0]].push(t),t.maxRank=t.temp[0],t.minRank=t.temp[0],t.temp[0]=o[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++)o[e].push(n),n.setGeneralPurposeVariable(e,o[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 o=t[i];null!=o&&(null==a&&(a={}),n?(o.hashCode=[],o.hashCode[0]=this.dfsCount,o.hashCode[1]=i,this.extendedDfs(null,o,null,e,a,o.hashCode,i,0)):this.dfs(null,o,null,e,a,0))}this.dfsCount++}},mxGraphHierarchyModel.prototype.dfs=function(e,t,n,a,i,o){if(null!=t){var s=mxCellPath.create(t.cell);if(null==i[s])for(a(e,i[s]=t,n,o,0),e=t.connectsAsSource.slice(),n=0;n<e.length;n++)s=e[n],this.dfs(t,s.target,s,a,i,o+1);else a(e,t,n,o,1)}},mxGraphHierarchyModel.prototype.extendedDfs=function(e,t,n,a,i,o,s,r){if(null!=t)if(null==e||null!=t.hashCode&&t.hashCode[0]==e.hashCode[0]||(o=e.hashCode.length+1,t.hashCode=e.hashCode.slice(),t.hashCode[o-1]=s),null==i[s=mxCellPath.create(t.cell)])for(a(e,i[s]=t,n,r,0),e=t.connectsAsSource.slice(),n=0;n<e.length;n++)s=e[n],this.extendedDfs(t,s.target,s,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 o=e.ranks[i],s=0;s<o.length;s++){var r=o[s];this.nestedBestRanks[i][r.getGeneralPurposeVariable(i)]=r}else for(n++,i=0;i<this.nestedBestRanks.length;i++)for(o=e.ranks[i],s=0;s<o.length;s++)(r=o[s]).setGeneralPurposeVariable(i,s);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,o=t.ranks[e-1].length,s=[],r=0;r<i;r++)s[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);s[l][m]=201207}for(r=0;r<i;r++)for(c=0;c<o;c++)if(201207==s[r][c]){for(a=r+1;a<i;a++)for(l=0;l<c;l++)201207==s[a][l]&&n++;for(a=0;a<r;a++)for(l=c+1;l<o;l++)201207==s[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,o=(n=!1,0);o<t.ranks.length;o++){for(var s=t.ranks[o],r=[],l=0;l<s.length;l++){(f=(b=s[l]).getGeneralPurposeVariable(o))<0&&(f=l),r[f]=b}var d=f=b=null,c=null,m=null,u=null,p=null,g=null,v=null,h=null;for(l=0;l<s.length-1;l++){if(0==l){for(var b=(v=r[l]).getNextLayerConnectedCells(o),f=v.getPreviousLayerConnectedCells(o),A=(m=[],u=[],0);A<b.length;A++)m[A]=b[A].getGeneralPurposeVariable(o+1);for(A=0;A<f.length;A++)u[A]=f[A].getGeneralPurposeVariable(o-1)}else b=d,f=c,m=p,u=g,v=h;for(d=(h=r[l+1]).getNextLayerConnectedCells(o),c=h.getPreviousLayerConnectedCells(o),p=[],g=[],A=0;A<d.length;A++)p[A]=d[A].getGeneralPurposeVariable(o+1);for(A=0;A<c.length;A++)g[A]=c[A].getGeneralPurposeVariable(o-1);var E=0,y=0;for(A=0;A<m.length;A++)for(var S=0;S<p.length;S++)m[A]>p[S]&&E++,m[A]<p[S]&&y++;for(A=0;A<u.length;A++)for(S=0;S<g.length;S++)u[A]>g[S]&&E++,u[A]<g[S]&&y++;(y<E||y==E&&i)&&(d=v.getGeneralPurposeVariable(o),v.setGeneralPurposeVariable(o,h.getGeneralPurposeVariable(o)),h.setGeneralPurposeVariable(o,d),d=b,c=f,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=[],o=0;o<n;o++){var s,r,l=this.nestedBestRanks[e][o],d=new MedianCellSorter;d.cell=l,r=t?e+1:e-1,null!=(s=t?l.getNextLayerConnectedCells(e):l.getPreviousLayerConnectedCells(e))&&0!=s.length?(d.medianValue=this.medianValue(s,r),a.push(d)):i[l.getGeneralPurposeVariable(e)]=!0}for(a.sort(MedianCellSorter.prototype.compare),o=0;o<n;o++)null==i[o]&&(l=a.shift().cell).setGeneralPurposeVariable(e,o)},mxMedianHybridCrossingReduction.prototype.medianValue=function(e,t){for(var n=[],a=0,i=0;i<e.length;i++){var o=e[i];n[a++]=o.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:(o=n[(i=a/2)-1]-n[0],a=n[a-1]-n[i],(n[i-1]*a+n[i]*o)/(o+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(),o={},s=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),o[e]=t,delete s[e]},n,!0,null),n=null,0<s.lenth&&(n=mxUtils.clone(s,null,!0)),e=mxUtils.clone(o,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),o[e]=t,delete s[e]},s,!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],o=0;o<i.length;o++){var s=i[o];s.setX(a,s.getGeneralPurposeVariable(a))}t=this.currentXDelta}else for(a=0;a<e.ranks.length;a++)for(i=e.ranks[a],o=0;o<i.length;o++)(s=i[o]).setGeneralPurposeVariable(a,s.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 o=0;o<a[i].length;o++){var s=a[i][o];(r=new WeightedCellSorter(s,i)).rankIndex=o,r.visited=!0,t.push(r),n[s=mxCellPath.create(s.getCoreCell())]=r}}for(e=10*t.length,o=0;0<t.length&&o<=e;){i=(r=t.shift()).cell;var r,l=r.weightedValue,d=parseInt(r.rankIndex),c=(s=i.getNextLayerConnectedCells(l),i.getPreviousLayerConnectedCells(l)),m=s.length,u=c.length,p=this.medianXValue(s,l+1),g=this.medianXValue(c,l-1),v=m+u,h=i.getGeneralPurposeVariable(l),b=h;if(0<v&&(b=(p*m+g*u)/v),m=!1,b<h-1?0==d?(i.setGeneralPurposeVariable(l,b),m=!0):(h=(h=(d=a[l][d-1]).getGeneralPurposeVariable(l))+d.width/2+this.intraCellSpacing+i.width/2)<b?(i.setGeneralPurposeVariable(l,b),m=!0):h<i.getGeneralPurposeVariable(l)-1&&(i.setGeneralPurposeVariable(l,h),m=!0):h+1<b&&(d==a[l].length-1?(i.setGeneralPurposeVariable(l,b),m=!0):b<(h=(h=(d=a[l][d+1]).getGeneralPurposeVariable(l))-d.width/2-this.intraCellSpacing-i.width/2)?(i.setGeneralPurposeVariable(l,b),m=!0):h>i.getGeneralPurposeVariable(l)+1&&(i.setGeneralPurposeVariable(l,h),m=!0)),m){for(i=0;i<s.length;i++)l=s[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,o++}},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=[],o=0;o<t.length;o++){var s=t[o];a[o]=new WeightedCellSorter,a[o].cell=s,a[o].rankIndex=o;var r=mxCellPath.create(s.getCoreCell());i[r]=a[o];var l=null;l=n<e?s.getPreviousLayerConnectedCells(e):s.getNextLayerConnectedCells(e);a[o].weightedValue=this.calculatedWeightedValue(s,l)}for(a.sort(WeightedCellSorter.prototype.compare),o=0;o<a.length;o++){r=0,s=a[o].cell,r=0,null!=(l=n<e?s.getPreviousLayerConnectedCells(e).slice():s.getNextLayerConnectedCells(e).slice())&&(r=0<(r=l.length)?this.medianXValue(l,n):s.getGeneralPurposeVariable(e));for(var d=0,c=(l=-1e8,a[o].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+s.width/2,c=-1):(d+=u.width+this.intraCellSpacing,c--)}}for(d=0,u=1e8,c=a[o].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-s.width/2,c=a.length):(d+=p.width+this.intraCellSpacing,c++)}l<=r&&r<=u?s.setGeneralPurposeVariable(e,r):r<l?(s.setGeneralPurposeVariable(e,l),this.currentXDelta+=l-r):u<r&&(s.setGeneralPurposeVariable(e,u),this.currentXDelta+=r-u),a[o].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,o=0;o<t.length;o++){var s=t[o];if(s.isVertex()){var r=this.layout.getVertexBounds(s.cell);null!=r?this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(s.width=r.width,s.height=r.height):(s.width=r.height,s.height=r.width):i=!0,n=Math.max(n,s.height)}else s.isEdge()&&(r=1,null!=s.edges?r=s.edges.length:mxLog.warn("edge.edges is null"),s.width=(r-1)*this.parallelEdgeSpacing);a+=s.width/2,s.setX(e,a),s.setGeneralPurposeVariable(e,a),a+=s.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 o=0,s=t.ranks[i],r=this.initialX,l=!1,d=0;d<s.length;d++){var c=s[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,o=Math.max(o,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=o/2+a/2+this.interRankCellSpacing,a=o,n=this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_WEST?n+r:n-r,d=0;d<s.length;d++)s[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 o=i.getGeneralPurposeVariable(i.minRank+1),s=!0,r=0,l=i.minRank+2;l<i.maxRank;l++){o!=(d=i.getGeneralPurposeVariable(l))?(s=!1,o=d):r++}if(!s){s=o=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,o++):this.repositionValid(t,i,l+1,m)?(d[l-i.minRank-1]=m,o++):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,s++):this.repositionValid(t,i,l-1,m)?(c[l-i.minRank-2]=m,s++):(c[l-i.minRank-2]=i.getX(l-1),m=u);if(r<s||r<o)if(o<=s)for(l=i.maxRank-2;l>i.minRank;l--)i.setX(l,c[l-i.minRank-1]);else if(s<o)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,o=0;o<e.length;o++)if(t==e[o]){i=o;break}if(i<0)return!1;if(a<(o=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(o<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,o=t.vertexMapper;for(a in o){var s=o[a];if(this.setVertexLocation(s),this.layout.resizeParent){s=e.model.getParent(s.cell);var r=mxCellPath.create(s);null==n[r]&&(n[r]=s)}}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 o=i.getPreviousLayerConnectedCells(t),s=t-1,r=0;r<2;r++){if(-1<s&&s<e.ranks.length&&null!=o&&0<o.length){for(var l=[],d=0;d<o.length;d++){var c=new WeightedCellSorter(o[d],o[d].getX(s));l.push(c)}l.sort(WeightedCellSorter.prototype.compare);var m=(c=i.x[0]-i.width/2)+i.width,u=o=0;for(s=[],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||(o+=p[v].edges.length,u++,s.push(p[v]))}else o+=g.edges.length,u++,s.push(g)}for(i.width>(o+1)*this.prefHozEdgeSep+2*this.prefHozEdgeSep&&(c+=this.prefHozEdgeSep,m-=this.prefHozEdgeSep),c+=(l=(m-c)/o)/2,m=this.minEdgeJetty-this.prefVertEdgeOff,d=u=0;d<s.length;d++){for(g=s[d].edges.length,v=mxCellPath.create(s[d].edges[0]),null==(p=this.jettyPositions[v])&&(p=[],this.jettyPositions[v]=p),d<o/2?m+=this.prefVertEdgeOff:o/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)}}o=i.getNextLayerConnectedCells(t),s=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,o=mxCellPath.create(e.edges[0]),s=(o=this.jettyPositions[o],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!=s&&(p=!p),null!=o){var g=p?2:0,v=p?this.rankTopY[a]:this.rankBottomY[n],h=o[4*i+1+g];p&&(h=-h),v+=h,g=o[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 b=(this.rankTopY[c]+this.rankBottomY[c+1])/2,f=(this.rankTopY[c-1]+this.rankBottomY[c])/2;if(p){var A=b;b=f,f=A}this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(u.push(new mxPoint(m,b)),u.push(new mxPoint(m,f))):(u.push(new mxPoint(b,m)),u.push(new mxPoint(f,m))),this.limitX=Math.max(this.limitX,m),c+=v}null!=o&&(g=p?2:0,v=p?this.rankBottomY[n]:this.rankTopY[a],h=o[4*i+3-g],p&&(h=-h),v-=h,g=o[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,o=null,s=-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),s<(l=d-c)&&(s=l,o=r)}}0==n.length&&null!=o&&n.push(o)}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),o=n.getChildCount(e),s=0;s<o;s++){var r=n.getChildAt(e,s);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=[],s=0;s<a.length;s++)((i=this.getVisibleTerminal(a[s],!0))==(o=this.getVisibleTerminal(a[s],!1))||i!=o&&(o==e&&(null==this.parent||this.graph.isValidAncestor(i,this.parent,this.traverseAncestors))||i==e&&(null==this.parent||this.graph.isValidAncestor(o,this.parent,this.traverseAncestors))))&&n.push(a[s]);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,o=!0;for(i in a)if(null!=a[i]){o=!1;break}for(;!o;){var s=this.findRoots(e,a);for(o=0;o<s.length;o++){var r=[];t.push(r),this.traverse(s[o],!0,null,n,r,t,a)}for(o=0;o<s.length;o++)this.roots.push(s[o]);for(i in o=!0,a)if(null!=a[i]){o=!1;break}}}else for(o=0;o<roots.length;o++)r=[],t.push(r),traverse(roots.get(o),!0,null,n,r,t,null);for(o=n=0;o<t.length;o++){for(i in a=[],r=t[o])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 o=n.getChildAt(e,i);this.isPort(o)||this.filterDescendants(o,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=[],o=0;o<a.length;o++){var s=this.getVisibleTerminal(a[o],!0),r=this.getVisibleTerminal(a[o],!1);(s==e&&r==t||!n&&s==t&&r==e)&&i.push(a[o])}return i},mxHierarchicalLayout.prototype.traverse=function(e,t,n,a,i,o,s){if(null!=e&&null!=a){var r=mxCellPath.create(e);if(null!=a[r]||null!=s&&null==s[r]){if(null==i[r])for(n=0;n<o.length;n++)if(null!=(e=o[n])[r]){for(l in i)e[l]=i[l];return o.pop(),e}}else{null==i[r]&&(i[r]=e),null==a[r]&&(a[r]=e),delete s[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,o,s))}}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 o=this.getChildAt(t,i);n=n.concat(this.filterDescendants(e,o))}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 o=this.getOrigin(this.getParent(e)),s=this.getOrigin(i);a=s.x-o.x,o=s.y-o.y;(n=n.clone()).translate(-a,-o),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!=(o=mxCellPath.create(t))&&0<o.length)){var n=e,a=mxCellPath.create(n);if(o.length<a.length){n=t;var i=a,o=(a=o,i)}for(;null!=n;){if(i=this.getParent(n),0==o.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=[],o=0;o<a;o++){var s=this.getChildAt(e,o);(!n&&!t||n&&this.isEdge(s)||t&&this.isVertex(s))&&i.push(s)}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),o=0;o<i;o++){var s=this.getEdgeAt(e,o);s!=n&&this.getTerminal(s,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),o=[],s=0;s<i;s++){var r=this.getEdgeAt(e,s),l=this.getTerminal(r,!0),d=this.getTerminal(r,!1);(a&&l==d||l!=d&&(t&&d==e||n&&l==e))&&o.push(r)}return o},mxGraphModel.prototype.getEdgesBetween=function(e,t,n){n=null!=n&&n;var a=this.getEdgeCount(e),i=this.getEdgeCount(t),o=e,s=a;for(i<a&&(s=i,o=t),a=[],i=0;i<s;i++){var r=this.getEdgeAt(o,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 o=0;o<e.length;o++){var s=this.getTerminal(e[o],!0),r=this.getTerminal(e[o],!1);s==t&&null!=r&&r!=t&&a?i.push(r):r==t&&null!=s&&s!=t&&n&&i.push(s)}return i},mxGraphModel.prototype.getTopmostCells=function(e){for(var t=[],n=0;n<e.length;n++){for(var a=e[n],i=!0,o=this.getParent(a);null!=o;){if(0<=mxUtils.indexOf(e,o)){i=!1;break}o=this.getParent(o)}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 o=a[i],s=this.getTerminal(o,!0);null!=s&&(s=a[mxCellPath.create(s)],this.setTerminal(o,s,!0)),null!=(s=this.getTerminal(o,!1))&&(s=a[mxCellPath.create(s)],this.setTerminal(o,s,!1))}}finally{this.endUpdate()}},mxGraphModel.prototype.mergeChildrenImpl=function(e,t,n,a){this.beginUpdate();try{for(var i=e.getChildCount(),o=0;o<i;o++){var s=e.getChildAt(o);if("function"==typeof s.getId){var r=s.getId(),l=null==r||this.isEdge(s)&&n?null:this.getCell(r);if(null==l){var d=s.clone();d.setId(r),d.setTerminal(s.getTerminal(!0),!0),d.setTerminal(s.getTerminal(!1),!1),l=t.insert(d),this.cellAdded(l)}a[mxCellPath.create(s)]=l,this.mergeChildrenImpl(s,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 o=mxCellPath.create(i);null==n[o]&&(n[o]=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 o=this.cloneCellImpl(this.getChildAt(e,i),t,!0);a.insert(o)}}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(),o=Math.atan2(n.y-i,n.x-t),s=new mxPoint(0,0),r=Math.PI,l=Math.PI/2-o,d=Math.atan2(e.height,e.width);return o<-r+d||r-d<o?(s.x=e.x,s.y=i-e.width*Math.tan(o)/2):o<-d?(s.y=e.y,s.x=t-e.height*Math.tan(l)/2):o<d?(s.x=e.x+e.width,s.y=i+e.width*Math.tan(o)/2):(s.y=e.y+e.height,s.x=t+e.height*Math.tan(l)/2),a&&(n.x>=e.x&&n.x<=e.x+e.width?s.x=n.x:n.y>=e.y&&n.y<=e.y+e.height&&(s.y=n.y),n.x<e.x?s.x=e.x:n.x>e.x+e.width&&(s.x=e.x+e.width),n.y<e.y?s.y=e.y:n.y>e.y+e.height&&(s.y=e.y+e.height)),s},EllipsePerimeter:function(e,t,n,a){var i=e.x,o=e.y,s=e.width/2,r=e.height/2,l=i+s,d=o+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(o<=n&&n<=o+e.height)return e=n-d,e=Math.sqrt(s*s*(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/(s*s)))||0,n<=o&&(e=-e),new mxPoint(t,d+e)}return d-=(i=m/c)*l,l=i*(s=(-(e=-2*l*(o=s*s*i*i+r*r))+(r=Math.sqrt(e*e-4*o*(s*s*i*i*l*l+r*r*l*l-s*s*r*r))))/(2*o))+d,d=i*(r=(-e-r)/(2*o))+d,i=Math.sqrt(Math.pow(s-t,2)+Math.pow(l-n,2)),t=Math.sqrt(Math.pow(r-t,2)+Math.pow(d-n,2)),o=n=0,new mxPoint(n,o=i<t?(n=s,l):(n=r,d))},RhombusPerimeter:function(e,t,n,a){t=e.x;var i=e.y,o=e.width,s=t+o/2,r=i+(e=e.height)/2,l=n.x;if(n=n.y,s==l)return new mxPoint(s,n<r?i:i+e);if(r==n)return new mxPoint(l<s?t:t+o,r);var d=s,c=r;return a&&(t<=l&&l<=t+o?d=l:i<=n&&n<=i+e&&(c=n)),l<s?n<r?mxUtils.intersection(l,n,d,c,s,i,t,r):mxUtils.intersection(l,n,d,c,s,i+e,t,r):n<r?mxUtils.intersection(l,n,d,c,s,i,t+o,r):mxUtils.intersection(l,n,d,c,s,i+e,t+o,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,o=e.x,s=e.y,r=e.width,l=o+r/2,d=s+(e=e.height)/2,c=new mxPoint(o,s),m=new mxPoint(o+r,d),u=new mxPoint(o,s+e);t==mxConstants.DIRECTION_NORTH?(c=u,m=new mxPoint(l,s),u=new mxPoint(o+r,s+e)):t==mxConstants.DIRECTION_SOUTH?(m=new mxPoint(l,s+e),u=new mxPoint(o+r,s)):t==mxConstants.DIRECTION_WEST&&(c=new mxPoint(o+r,s),m=new mxPoint(o,d),u=new mxPoint(o+r,s+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(o+r/2+e*Math.tan(p)/2,s+e):t==mxConstants.DIRECTION_SOUTH?new mxPoint(o+r/2-e*Math.tan(p)/2,s):t==mxConstants.DIRECTION_WEST?new mxPoint(o+r,s+e/2+r*Math.tan(p)/2):new mxPoint(o,s+e/2-r*Math.tan(p)/2):(a&&(a=new mxPoint(l,d),n.y>=s&&n.y<=s+e?(a.x=i?l:t==mxConstants.DIRECTION_WEST?o+r:o,a.y=n.y):n.x>=o&&n.x<=o+r&&(a.x=n.x,a.y=i?t==mxConstants.DIRECTION_NORTH?s+e:s:d),l=a.x,d=a.y),i&&n.x<=o+r/2||!i&&n.y<=s+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,o,s,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!=o?o:0,this.borderColor=s,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 o=this.graph.getGraphBounds().clone(),s=this.graph.getView().getScale(),r=s/this.scale,l=this.graph.getView().getTranslate();this.autoOrigin||(this.x0=-l.x*this.scale,this.y0=-l.y*this.scale,o.width+=o.x,o.height+=o.y,o.x=0,this.border=o.y=0),o.width/=r,o.height/=r;var d=this.pageFormat.width-2*this.border,c=this.pageFormat.height-2*this.border,m=Math.max(1,Math.ceil((o.width+this.x0)/d)),u=Math.max(1,Math.ceil((o.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!=(b=this.getCoverPages(this.pageFormat.width,this.pageFormat.height)))for(var g=0;g<b.length;g++)e(b[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+(o.y-l.y*s)/s,b=0;b<m;b++){if(null==this.wnd)return null;var f=b*d/this.scale-this.x0/this.scale+(o.x-l.x*s)/s,A=g*m+b+1;(n=this.renderPage(this.pageFormat.width,this.pageFormat.height,mxUtils.bind(this,function(e){this.addGraphFragment(-f,-h,this.scale,A,e)}))).setAttribute("id","mxPage-"+A),e(n,null!=v||g<u-1||b<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"),o=0;o<e;o++){for(var s=n.createElement("tr"),r=0;r<t;r++){var l=o*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);s.appendChild(d)}i.appendChild(s)}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 o=this.graph.container;this.graph.container=i;var s=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=o,a.canvas=s,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 o=(s=a[i]).indexOf("=");if(0<=o){var s,r=s.substring(0,o);(s=s.substring(o+1))==mxConstants.NONE?delete n[r]:mxUtils.isNumeric(s)?n[r]=parseFloat(s):n[r]=s}else if(null!=(s=this.styles[s]))for(r in s)n[r]=s[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 o=null!=e.text?e.text.margin:null;null==o&&(o=mxUtils.getValue(e.style,mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER),e=mxUtils.getValue(e.style,mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),o=mxUtils.getAlignmentAsPoint(o,e)),null!=o&&(!t&&n||(this.textarea.style.left=Math.max(0,Math.round(this.bounds.x-o.x*this.bounds.width+o.x*a)-3)+"px"),this.textarea.style.top=Math.max(0,Math.round(this.bounds.y-o.y*this.bounds.height+o.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)),o=mxUtils.getValue(n.style,mxConstants.STYLE_FONTCOLOR,"black"),s=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=s,this.textarea.style.color=o,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,o=parseInt(e.style[mxConstants.STYLE_SPACING]||2)*n,s=parseInt(e.style[mxConstants.STYLE_SPACING_TOP]||0)*n+o,r=parseInt(e.style[mxConstants.STYLE_SPACING_RIGHT]||0)*n+o,l=parseInt(e.style[mxConstants.STYLE_SPACING_BOTTOM]||0)*n+o;n=parseInt(e.style[mxConstants.STYLE_SPACING_LEFT]||0)*n+o,r=new mxRectangle(e.x,e.y,Math.max(a,e.width-n-r),Math.max(i,e.height-s-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+=s,null!=e.text&&null!=e.text.boundingBox&&(r.height=t?(r.width=Math.max(a,e.text.boundingBox.width),Math.max(i,e.text.boundingBox.height)):(r.width=Math.max(r.width,e.text.boundingBox.width),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(),o=e.cell,s=i.getParent(o);null!=s&&null==n;)n=this.findPreviousStateInContainer(a,s,o,t),o=s,s=i.getParent(o);return n},mxCellRenderer.prototype.findPreviousStateInContainer=function(e,t,n,a){var i=null,o=e.getModel();for(n=null!=n?t.getIndex(n)-1:o.getChildCount(t)-1;0<=n&&null==i;n--)i=this.findPreviousStateInContainer(e,o.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]);e.shape=null!=t?new mxShape(t):new(t=this.getShapeConstructor(e)),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,o=null;"inherit"==a?o=i.model.getParent(e.cell):"swimlane"==a?(o=null!=i.model.getTerminal(e.cell,!1)?i.model.getTerminal(e.cell,!1):e.cell,o=i.getSwimlane(o),n=i.swimlaneIndicatorColorAttribute):"indicated"==a&&(e.shape[t]=e.shape.indicatorColor),null!=o&&(a=i.getView().getState(o),(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,o=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,o(e)))}),mxUtils.bind(this,function(e){this.isLabelEvent(n,e)&&(a.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,o(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 o=mxClient.IS_TOUCH?"gestureend":"dblclick";mxEvent.addListener(n.shape.node,o,mxUtils.bind(this,function(e){i=!1,"gestureend"==o?(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),o=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(o)||(e.text.value=n,e.text.bounds=o,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(o,s){if(this.createCellOverlays(o),null!=o.overlays){var r=mxUtils.mod(mxUtils.getValue(o.style,mxConstants.STYLE_ROTATION,0),90),e=mxUtils.toRadians(r),l=Math.cos(e),d=Math.sin(e);o.overlays.visit(function(e,t){var n=t.overlay.getBounds(o);if(!o.view.graph.getModel().isEdge(o.cell)&&null!=o.shape&&0!=r){var a=n.getCenterX(),i=n.getCenterY();a=(i=mxUtils.getRotatedPoint(new mxPoint(a,i),l,d,new mxPoint(o.getCenterX(),o.getCenterY()))).x,i=i.y;n.x=Math.round(a-n.width/2),n.y=Math.round(i-n.height/2)}!s&&null!=t.bounds&&t.scale==o.view.scale&&t.bounds.equals(n)||(t.bounds=n,t.scale=o.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(),o=e.getCenterY();if(!e.view.graph.getModel().isEdge(e.cell)&&(i=e.x+n*a,o=e.y+t*a,null!=e.shape)){var s=e.shape.getShapeRotation();if(this.legacyControlPosition)s=mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION,0);else if(e.shape.isPaintBoundsInverted()){var r=(e.width-e.height)/2;i=i+r,o=o-r}0!=s&&(r=mxUtils.toRadians(s),s=Math.cos(r),r=Math.sin(r),i=(o=mxUtils.getRotatedPoint(new mxPoint(i,o),s,r,new mxPoint(e.getCenterX(),e.getCenterY()))).x,o=o.y)}return e.view.graph.getModel().isEdge(e.cell),new mxRectangle(Math.round(i-n/2*a),Math.round(o-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 o=e.view,s=o.graph;a=mxUtils.getValue(e.style,mxConstants.STYLE_SEGMENT,mxConstants.ENTITY_SEGMENT)*o.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=s.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=s.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=o.getRoutingCenterY(t),s=r?n.x:n.x+n.width,n=o.getRoutingCenterY(n),o=new mxPoint(e+(d?-a:a),t),l=new mxPoint(s+(r?-a:a),n),d==r?(a=d?Math.min(e,s)-a:Math.max(e,s)+a,i.push(new mxPoint(a,t)),i.push(new mxPoint(a,n))):(o.x<l.x==d?(a=t+(n-t)/2,i.push(o),i.push(new mxPoint(o.x,a)),i.push(new mxPoint(l.x,a))):i.push(o),i.push(l)))},Loop:function(e,t,n,a,i){if(null!=t){var o=(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 s=0,r=0,l=0,d=0;o=mxUtils.getValue(e.style,mxConstants.STYLE_SEGMENT,o.gridSize)*n.scale;(e=mxUtils.getValue(e.style,mxConstants.STYLE_DIRECTION,mxConstants.DIRECTION_WEST))==mxConstants.DIRECTION_NORTH||e==mxConstants.DIRECTION_SOUTH?(s=n.getRoutingCenterX(t),r=o):(l=n.getRoutingCenterY(t),d=o),null==a||a.x<t.x||a.x>t.x+t.width?null!=a?(s=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:s=e==mxConstants.DIRECTION_EAST?t.x-2*d:t.x+t.width+2*d:null!=a&&(s=n.getRoutingCenterX(t),r=Math.max(Math.abs(s-a.x),d),l=a.y,d=0),i.push(new mxPoint(s-r,l-d)),i.push(new mxPoint(s+r,l+d))}},ElbowConnector:function(e,t,n,a,i){var o=null!=a&&0<a.length?a[0]:null,s=!1,r=!1;if(null!=t&&null!=n)if(null!=o){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));s=(o=e.view.transformControlPoint(e,o)).y<r||o.y>c,r=o.x<l||o.x>d}else(s=(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||!s&&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 o=e.view;a=null!=a&&0<a.length?a[0]:null;var s=(r=e.absolutePoints)[0],r=r[r.length-1];null!=a&&(a=o.transformControlPoint(e,a)),null!=s&&((t=new mxCellState).x=s.x,t.y=s.y),null!=r&&((n=new mxCellState).x=r.x,n.y=r.y),null!=t&&null!=n&&(e=Math.max(t.x,n.x),s=Math.min(t.x+t.width,n.x+n.width),e=null!=a?a.x:s+(e-s)/2,s=o.getRoutingCenterY(t),o=o.getRoutingCenterY(n),null!=a&&(a.y>=t.y&&a.y<=t.y+t.height&&(s=a.y),a.y>=n.y&&a.y<=n.y+n.height&&(o=a.y)),!mxUtils.contains(n,e,s)&&!mxUtils.contains(t,e,s)&&i.push(new mxPoint(e,s)),!mxUtils.contains(n,e,o)&&!mxUtils.contains(t,e,o)&&i.push(new mxPoint(e,o)),1==i.length&&(null!=a?!mxUtils.contains(n,e,a.y)&&!mxUtils.contains(t,e,a.y)&&i.push(new mxPoint(e,a.y)):(o=Math.max(t.y,n.y),t=Math.min(t.y+t.height,n.y+n.height),i.push(new mxPoint(e,o+(t-o)/2)))))},TopToBottom:function(e,t,n,a,i){var o=e.view;a=null!=a&&0<a.length?a[0]:null;var s=(r=e.absolutePoints)[0],r=r[r.length-1];null!=a&&(a=o.transformControlPoint(e,a)),null!=s&&((t=new mxCellState).x=s.x,t.y=s.y),null!=r&&((n=new mxCellState).x=r.x,n.y=r.y),null!=t&&null!=n&&(s=Math.max(t.y,n.y),r=Math.min(t.y+t.height,n.y+n.height),e=o.getRoutingCenterX(t),null!=a&&a.x>=t.x&&a.x<=t.x+t.width&&(e=a.x),s=null!=a?a.y:r+(s-r)/2,!mxUtils.contains(n,e,s)&&!mxUtils.contains(t,e,s)&&i.push(new mxPoint(e,s)),e=null!=a&&a.x>=n.x&&a.x<=n.x+n.width?a.x:o.getRoutingCenterX(n),!mxUtils.contains(n,e,s)&&!mxUtils.contains(t,e,s)&&i.push(new mxPoint(e,s)),1==i.length&&(null!=a&&1==i.length?!mxUtils.contains(n,a.x,s)&&!mxUtils.contains(t,a.x,s)&&i.push(new mxPoint(a.x,s)):(o=Math.max(t.x,n.x),t=Math.min(t.x+t.width,n.x+n.width),i.push(new mxPoint(o+(t-o)/2,s)))))},SegmentConnector:function(e,t,n,a,i){var o=e.absolutePoints,s=!0,r=null,l=o[0];null==l&&null!=t?l=new mxPoint(e.view.getRoutingCenterX(t),e.view.getRoutingCenterY(t)):null!=l&&(l=l.clone());var d=o.length-1;if(null!=a&&0<a.length){r=e.view.transformControlPoint(e,a[0]);for(var c=t,m=o[0],u=!1,p=!1,g=(u=r,a.length),v=0;v<2;v++){var h=null!=m&&m.x==u.x,b=null!=m&&m.y==u.y,f=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=b||null==m&&f,p=h||null==m&&c;if(null!=m&&!b&&!h&&(f||c)){s=!f;break}if(p||u){s=u,1==v&&(s=0==a.length%2?u:p);break}c=n,m=o[d],u=e.view.transformControlPoint(e,a[g-1])}for(s&&(null!=o[0]&&o[0].y!=r.y||null==o[0]&&null!=t&&(r.y<t.y||r.y>t.y+t.height))?i.push(new mxPoint(l.x,r.y)):!s&&(null!=o[0]&&o[0].x!=r.x||null==o[0]&&null!=t&&(r.x<t.x||r.x>t.x+t.width))&&i.push(new mxPoint(r.x,l.y)),s?l.y=r.y:l.x=r.x,v=0;v<a.length;v++)s=!s,r=e.view.transformControlPoint(e,a[v]),s?l.y=r.y:l.x=r.x,i.push(l.clone())}else r=l,s=!0;if(null==(l=o[d])&&null!=n&&(l=new mxPoint(e.view.getRoutingCenterX(n),e.view.getRoutingCenterY(n))),s&&(null!=o[d]&&o[d].y!=r.y||null==o[d]&&null!=n&&(r.y<n.y||r.y>n.y+n.height))?i.push(new mxPoint(l.x,r.y)):!s&&(null!=o[d]&&o[d].x!=r.x||null==o[d]&&null!=n&&(r.x<n.x||r.x>n.x+n.width))&&i.push(new mxPoint(r.x,l.y)),null==o[0]&&null!=t)for(;1<i.length&&mxUtils.contains(t,i[1].x,i[1].y);)i=i.splice(1,1);if(null==o[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 o=e.view.graph,s=null!=t&&o.getModel().isEdge(t.cell);o=null!=n&&o.getModel().isEdge(n.cell);if(null!=a&&0<a.length||s||o)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;s=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=(o=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,s,d,c],[m,u,p,g]],d=0;d<2;d++)mxEdgeStyle.limits[d][1]=a[d][0]-o,mxEdgeStyle.limits[d][2]=a[d][1]-o,mxEdgeStyle.limits[d][4]=a[d][0]+a[d][2]+o,mxEdgeStyle.limits[d][8]=a[d][1]+a[d][3]+o;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<(s=0)?s=c<0?2:1:c<=0&&(s=3,0==d&&(s=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*o,0),mxEdgeStyle.vertexSeperations[2]=Math.max(d-2*o,0),mxEdgeStyle.vertexSeperations[4]=Math.max(m-2*o,0),mxEdgeStyle.vertexSeperations[3]=Math.max(u-2*o,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*o<m&&2*o<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*o<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*o<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-=s)<1&&(d+=4),(v-=s)<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]-=o,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]+o;break;case mxConstants.DIRECTION_MASK_EAST:mxEdgeStyle.wayPoints1[0][0]+=a[0][2]+o,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]-=o}for(r=n=(o=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+=s)&&(g-=4),c=mxEdgeStyle.dirVectors[g-1],(l=0<g%2?0:1)!=n&&(o++,mxEdgeStyle.wayPoints1[o][0]=mxEdgeStyle.wayPoints1[o-1][0],mxEdgeStyle.wayPoints1[o][1]=mxEdgeStyle.wayPoints1[o-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)<<s)&&(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[o][0])*c[0])&&(mxEdgeStyle.wayPoints1[o][0]+=c[0]*m):0<(m=(g-mxEdgeStyle.wayPoints1[o][1])*c[1])&&(mxEdgeStyle.wayPoints1[o][1]+=c[1]*m)):u&&(mxEdgeStyle.wayPoints1[o][0]+=c[0]*Math.abs(mxEdgeStyle.vertexSeperations[g]/2),mxEdgeStyle.wayPoints1[o][1]+=c[1]*Math.abs(mxEdgeStyle.vertexSeperations[g]/2)),0<o&&mxEdgeStyle.wayPoints1[o][l]==mxEdgeStyle.wayPoints1[o-1][l]?o--:n=l}for(d=0;d<=o&&(d!=o||((0<(e[1]&(mxConstants.DIRECTION_MASK_EAST|mxConstants.DIRECTION_MASK_WEST))?0:1)==r?0:1)==(o+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,o){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!=o?o:"help"}function mxOutline(e,t){this.source=e,null!=t&&this.init(t)}function mxMultiplicity(e,t,n,a,i,o,s,r,l,d){this.source=e,this.type=t,this.attr=n,this.value=a,this.min=null!=i?i:0,this.max=null!=o?o:"n",this.validNeighbors=s,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 o=e.validatePoints(t,n[a]);null==i?i=o:i.add(o)}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!=(s=this.getState(e))&&(s.invalid=!0,a&&(s.orderChanged=!0)),t)for(var o=i.getChildCount(e),s=0;s<o;s++){var r=i.getChildAt(e,s);this.invalidate(r,t,n,a)}if(n)for(a=i.getEdgeCount(e),s=0;s<a;s++)this.invalidate(i.getEdgeAt(e,s),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!=(o=this.graph.getCellGeometry(t))){if(!n.isEdge(t)){var i=o.offset||this.EMPTY_POINT;o.relative?(a.origin.x+=o.x*e.width/this.scale+i.x,a.origin.y+=o.y*e.height/this.scale+i.y):(a.absoluteOffset.x=this.scale*i.x,a.absoluteOffset.y=this.scale*i.y,a.origin.x+=o.x,a.origin.y+=o.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*o.width,a.height=this.scale*o.height,n.isVertex(t)){if(o.relative&&0!=(i=mxUtils.toRadians(e.style[mxConstants.STYLE_ROTATION]||"0"))){var o=Math.cos(i),s=(i=Math.sin(i),new mxPoint(a.getCenterX(),a.getCenterY())),r=new mxPoint(e.getCenterX(),e.getCenterY());o=mxUtils.getRotatedPoint(s,o,i,r);a.x=o.x-a.width/2,a.y=o.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(o=n.getChildCount(t),i=0;i<o;i++)s=n.getChildAt(t,i),this.validateBounds(a,s)},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 o=this.graph.getCellGeometry(t);if(null!=o&&n.isEdge(t)){var s=this.getState(this.getVisibleTerminal(t,!0));if(a.setVisibleTerminalState(s,!0),null!=s&&n.isEdge(s.cell)&&!n.isAncestor(s.cell,t)){var r=this.getState(n.getParent(s.cell));this.validatePoints(r,s.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,s,l),this.updatePoints(a,o.points,s,l),this.updateFloatingTerminalPoints(a,s,l),this.updateEdgeBounds(a),this.updateEdgeLabelOffset(a)}else null!=o&&o.relative&&null!=e&&n.isEdge(e.cell)&&(null!=(o=this.getPoint(e,o))&&(a.x=o.x,a.y=o.y,o.x=o.x/this.scale-this.translate.x,o.y=o.y/this.scale-this.translate.y,a.origin=o,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(o=n.getChildCount(t),s=0;s<o;s++)r=n.getChildAt(t,s),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),o=0;o<i;o++)this.validateBounds(t,a.getChildAt(n,o))},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 o=e.origin;null!=(i=this.graph.getCellGeometry(e.cell).getTerminalPoint(n))&&(i=new mxPoint(t*(a.x+i.x+o.x),t*(a.y+i.y+o.y)))}e.setAbsoluteTerminalPoint(i,n)},mxGraphView.prototype.updatePoints=function(e,t,n,a){if(null!=e){var i=[];i.push(e.absolutePoints[0]);var o=this.getEdgeStyle(e,t,n,a);if(null!=o)o(e,n=this.getTerminalPort(e,n,!0),a=this.getTerminalPort(e,a,!1),t,i);else if(null!=t)for(o=0;o<t.length;o++)null!=t[o]&&(a=mxUtils.clone(t[o]),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),o=this.graph.isOrthogonal(e);n=mxUtils.toRadians(Number(t.style[mxConstants.STYLE_ROTATION]||"0"));var s=new mxPoint(t.getCenterX(),t.getCenterY());if(0!=n){var r=Math.cos(-n),l=Math.sin(-n);i=mxUtils.getRotatedPoint(i,r,l,s)}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&&o,r),0!=n&&(r=Math.cos(n),l=Math.sin(n),t=mxUtils.getRotatedPoint(t,r,l,s)),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 o=this.getPerimeterFunction(e);null!=o&&null!=t&&(0<(a=this.getPerimeterBounds(e,a)).width||0<a.height)&&(i=o(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,o=a.y-n.y;e.terminalDistance=Math.sqrt(i*i+o*o)}else e.terminalDistance=0;a=0;var s=[];if(null!=(o=n)){n=o.x;for(var r=o.y,l=n,d=r,c=1;c<t.length;c++){var m=t[c];null!=m&&(i=o.x-m.x,o=o.y-m.y,i=Math.sqrt(i*i+o*o),s.push(i),a+=i,o=m,n=Math.min(o.x,n),r=Math.min(o.y,r),l=Math.max(o.x,l),d=Math.max(o.y,d))}e.length=a,e.segments=s,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,o=(.5+(null!=t?t.x/2:0))*e.length,s=e.segments[0],r=0,l=1;r+s<o&&l<i-1;)r+=s,s=e.segments[l++];if(i=0==s?0:(o-r)/s,o=e.absolutePoints[l-1],l=e.absolutePoints[l],null!=o&&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-o.x,l=l.y-o.y,n=o.x+d*i+((0==s?0:l/s)*a+n)*this.scale,a=o.y+l*i-((0==s?0:d/s)*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,o=e.segments,s=e.absolutePoints[0],r=e.absolutePoints[1],l=mxUtils.ptSegDistSq(s.x,s.y,r.x,r.y,t,n),d=0,c=0,m=0,u=2;u<a;u++)c+=o[u-2],r=e.absolutePoints[u],(s=mxUtils.ptSegDistSq(s.x,s.y,r.x,r.y,t,n))<=l&&(l=s,d=u-1,m=c),s=r;return a=o[d],s=e.absolutePoints[d],l=(r=e.absolutePoints[d+1]).x,o=r.y,o=(l=(e=s.x-l)-(l=t-l))*e+(o=(d=s.y-o)-(o=n-o))*d,a<(e=Math.sqrt(o<=0?0:o*o/(e*e+d*d)))&&(e=a),a=Math.sqrt(mxUtils.ptSegDistSq(s.x,s.y,r.x,r.y,t,n)),-1==mxUtils.relativeCcw(s.x,s.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,o=a.y-n.y,s=a=0;null!=(i=i.offset)&&(a=i.x,s=i.y),i=n.y+o/2+s*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){return e=new mxCellState(this,e,this.graph.getCellStyle(e)),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 o=i.scrollLeft+i.clientWidth-e;if(o<a){if(e=i.scrollLeft,i.scrollLeft+=a-o,n&&e==i.scrollLeft){if(this.dialect==mxConstants.DIALECT_SVG){e=this.view.getDrawPane().ownerSVGElement;var s=this.container.scrollWidth+a-o}else s=Math.max(i.clientWidth,i.scrollWidth)+a-o,e=this.view.getCanvas();e.style.width=s+"px",i.scrollLeft+=a-o}}else(o=e-i.scrollLeft)<a&&(i.scrollLeft-=a-o);(o=i.scrollTop+i.clientHeight-t)<a?(e=i.scrollTop,i.scrollTop+=a-o,e==i.scrollTop&&n&&(this.dialect==mxConstants.DIALECT_SVG?(e=this.view.getDrawPane().ownerSVGElement,t=this.container.scrollHeight+a-o):(t=Math.max(i.clientHeight,i.scrollHeight)+a-o,e=this.view.getCanvas()),e.style.height=t+"px",i.scrollTop+=a-o)):(o=t-i.scrollTop)<a&&(i.scrollTop-=a-o)}}},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,o=e*this.pageScale;i=new mxRectangle(0,0,i.width*o,i.height*o);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,o=this.pageFormat,s=a*this.pageScale;i=new mxRectangle(a*i.x,a*i.y,o.width*s,o.height*s);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),o=e?Math.ceil((t-i.x)/i.width):0,e=e?Math.ceil((n-i.y)/i.height):0,null==this.horizontalPageBreaks&&0<o&&(this.horizontalPageBreaks=[]),null!=this.horizontalPageBreaks){for(s=0;s<=o;s++){var r=[new mxPoint(i.x+s*i.width,1),new mxPoint(i.x+s*i.width,n)];null!=this.horizontalPageBreaks[s]?(this.horizontalPageBreaks[s].scale=1,this.horizontalPageBreaks[s].points=r,this.horizontalPageBreaks[s].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[s]=r)}for(s=o;s<this.horizontalPageBreaks.length;s++)this.horizontalPageBreaks[s].destroy();this.horizontalPageBreaks.splice(o,this.horizontalPageBreaks.length-o)}if(null==this.verticalPageBreaks&&0<e&&(this.verticalPageBreaks=[]),null!=this.verticalPageBreaks){for(s=0;s<=e;s++)r=[new mxPoint(1,i.y+s*i.height),new mxPoint(t,i.y+s*i.height)],null!=this.verticalPageBreaks[s]?(this.verticalPageBreaks[s].scale=1,this.verticalPageBreaks[s].points=r,this.verticalPageBreaks[s].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[s]=r);for(s=e;s<this.verticalPageBreaks.length;s++)this.verticalPageBreaks[s].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 o=this.model.getChildCount(i);this.cellsAdded([e],i,o,null,null,!1),o=this.model.getChildCount(e),this.cellsAdded(n,e,o,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(),o=this.model.getParent(e[a]),s=this.model.getChildCount(o);this.cellsAdded(i,o,s,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 o=this.getBoundingBoxFromGeometry(i);if(0<o.width&&0<o.height){var s=this.isSwimlane(e[a])?this.getStartSize(e[a]):new mxRectangle,r=r.clone();n&&(r.x+=o.x-s.width-t,r.y+=o.y-s.height-t),r.width=o.width+s.width+2*t,r.height=o.height+s.height+2*t,this.model.setGeometry(e[a],r),this.moveCells(i,-o.x+s.width+t,-o.y+s.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[o=mxCellPath.create(e[i])]=e[i],n.push(e[i])}if(0<n.length){var o=this.view.scale,s=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/o-s.x,l[0].y/o-s.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/o-s.x,l[m].y/o-s.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,o,s,r,l){return t=this.createVertex(e,t,n,a,i,o,s,r,l),this.addCell(t,e)},mxGraph.prototype.createVertex=function(e,t,n,a,i,o,s,r,l){return(e=new mxGeometry(a,i,o,s)).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,o){return t=this.createEdge(e,t,n,a,i,o),this.addEdge(t,e,a,i)},mxGraph.prototype.createEdge=function(e,t,n,a,i,o){return(e=new mxCell(n,new mxGeometry,o)).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,o,s){if(null!=e&&null!=t&&null!=n){this.model.beginUpdate();try{for(var r=null!=(d=o?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==s||s)&&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",o))}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 o=mxCellPath.create(e[i]);a[o]=e[i]}for(i=0;i<e.length;i++){for(var s=this.getConnections(e[i]),r=0;r<s.length;r++)if(null==a[o=mxCellPath.create(s[r])]){if(null!=(d=this.model.getGeometry(s[r]))){var l=this.view.getState(s[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(s[r],null,c),this.model.setGeometry(s[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 o=this.model.getParent(e),s=this.model.getTerminal(e,!0);this.model.beginUpdate();try{this.cellsMoved(t,a,i,!1,!1),this.cellsAdded(t,o,this.model.getChildCount(o),null,null,!0),this.cellsAdded([n],o,this.model.getChildCount(o),s,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 o=this.model.getChildren(e[i]);this.foldCells(o,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 o=this.view.getState(e),s=null!=o?o.style:this.getCellStyle(e),r=this.model.getStyle(e);null==r&&(r=""),mxUtils.getValue(s,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,o=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&&(o+=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)),o+=2*(a[mxConstants.STYLE_SPACING]||0),o+=a[mxConstants.STYLE_SPACING_LEFT]||0,o+=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))&&(o+=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+o,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,o=e.height*t.scale,s=e.y-(o-e.height)/2;n=new mxRectangle(this.snap((e.x-(i-e.width)/2)/n)-a.x,this.snap(s/n)-a.y,this.snap(i/n),this.snap(o/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 o=i.offset;null!=o&&(o.x+=a.x-i.x,o.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,o){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 s=this.isAllowNegativeCoordinates();if(null!=i&&this.setAllowNegativeCoordinates(!0),this.cellsMoved(e,t,n,!a&&this.isDisconnectOnMove()&&this.isAllowDanglingEdges(),null==i),this.setAllowNegativeCoordinates(s),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",o))}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 o=0;o<e.length;o++)this.translateCell(e[o],t,n),i&&this.constrainChild(e[o]);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 o=this.view.getState(i[a]),s=null!=o?o.getVisibleTerminal(!0):this.view.getVisibleTerminal(i[a],!0),r=null!=o?o.getVisibleTerminal(!1):this.view.getVisibleTerminal(i[a],!1),l=mxCellPath.create(s),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()),o=e.style[mxConstants.STYLE_DIRECTION],s=0;if(null!=o&&("north"==o?s+=270:"west"==o?s+=180:"south"==o&&(s+=90),"north"==o||"south"==o)){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"!=o&&"south"!=o||(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)}o=e.style[mxConstants.STYLE_ROTATION]||0,t.perimeter?(0!=s&&null!=n&&(r=a=0,90==s?r=1:180==s?a=-1:270==o&&(r=-1),n=mxUtils.getRotatedPoint(n,a,r,i)),null!=n&&t.perimeter&&(n=this.view.getPerimeterPoint(e,n,!1))):o+=s,0!=o&&null!=n&&(s=mxUtils.toRadians(o),a=Math.cos(s),r=Math.sin(s),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 o=this.view.getState(e[i]),s=this.view.getState(this.model.getParent(e[i]));if(null!=o&&null!=s){var r=r.clone(),l=-s.origin.x,d=-s.origin.y,c=o.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 o=this.getCellBounds(this.model.getChildAt(e,i),t,!0);null!=a?a.add(o):a=o}}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 o=i.points;if(null!=o&&0<o.length){for(var s=new mxRectangle(o[0].x,o[0].y,0,0),r=function(e){null!=e&&s.add(new mxRectangle(e.x,e.y,0,0))},l=1;l<o.length;l++)r(o[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 o=this.shiftPreview1;for(a=this.container.firstChild;null!=a;)i=a.nextSibling,a!=n.parentNode?o.appendChild(a):o=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 o=(e-1)/(2*n);a=a*-o,i=i*-o}else a*=o=(1/e-1)/(2*this.view.scale),i*=o;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 o=this.view.scale,s=i.width/o,r=i.height/o;null!=this.backgroundImage&&(s=Math.max(s,this.backgroundImage.width-i.x/o),r=Math.max(r,this.backgroundImage.height-i.y/o));var l=t?e:2*e;n=Math.floor(100*Math.min(n/(s+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/o)*n-e-Math.max(0,(this.container.clientWidth-s*n)/2)),null!=i.y&&(this.container.scrollTop=Math.round(i.y/o)*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/o+e+1):e,null!=i.y?Math.floor(this.view.translate.y-i.y/o+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),o=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 s=n.scrollLeft-e.x;a=Math.max(s-n.scrollLeft,0);0<s?n.scrollLeft-=s+2:0<(s=e.x+i-n.scrollLeft-n.clientWidth)&&(n.scrollLeft+=s+2),i=n.scrollTop-e.y,s=Math.max(0,i-n.scrollTop),0<i?n.scrollTop-=i+2:0<(i=e.y+o-n.scrollTop-n.clientHeight)&&(n.scrollTop+=i+2),!this.useScrollbarsForPanning&&(0!=a||0!=s)&&this.view.setTranslate(a,s)}else{s=-this.view.translate.x;var r=-this.view.translate.y,l=this.view.scale;e.x+i>s+n&&(this.view.translate.x-=(e.x+i-n-s)/l,t=!0),e.y+o>r+a&&(this.view.translate.y-=(e.y+o-a-r)/l,t=!0),e.x<s&&(this.view.translate.x+=(s-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),o=this.model.getDirectedEdgeCount(n,!1,e);if(null!=this.multiplicities)for(var s=0;s<this.multiplicities.length;s++){var r=this.multiplicities[s].check(this,e,t,n,i,o);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 o=this.model.getChildAt(e,i),s=t;this.isValidRoot(o)&&(s={}),null!=(s=this.validateGraph(o,s))?this.setCellWarning(o,s.replace(/\n/g,"<br>")):this.setCellWarning(o,null),n=n&&null==s}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 o=this.multiplicities[i];o.source&&mxUtils.isNode(e,o.type,o.attr,o.value)&&(0==o.max&&0<t||1==o.min&&0==t||1==o.max&&1<t)?a+=o.countError+"\n":!o.source&&mxUtils.isNode(e,o.type,o.attr,o.value)&&(0==o.max&&0<n||1==o.min&&0==n||1==o.max&&1<n)&&(a+=o.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 o=this.model.getChildAt(n,i),s=this.getSwimlaneAt(e,t,o);if(null!=s)return s;if(this.isSwimlane(o)&&(s=this.view.getState(o),this.intersects(s,e,t)))return o}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 o=this.model.getChildCount(n)-1;0<=o;o--){var s=this.model.getChildAt(n,o),r=this.getCellAt(e,t,s,a,i);if(null!=r)return r;if(this.isCellVisible(s)&&(i&&this.model.isEdge(s)||a&&this.model.isVertex(s))&&(r=this.view.getState(s),this.intersects(r,e,t)))return s}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],o=1;o<a.length;o++){var s=a[o];if(mxUtils.ptSegDistSq(i.x,i.y,s.x,s.y,t,n)<=e)return!0;i=s}}else if(0!=(i=mxUtils.toRadians(mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION)||0))&&(a=Math.cos(-i),i=Math.sin(-i),o=new mxPoint(e.getCenterX(),e.getCenterY()),t=(i=mxUtils.getRotatedPoint(new mxPoint(t,n),a,i,o)).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,o){n=null==n||n,a=null==a||a,i=null==i||i,o=null!=o&&o;for(var s=[],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)||(s=s.concat(this.model.getEdges(c,n,a)))}for(s=s.concat(this.model.getEdges(e,n,a)),r=[],d=0;d<s.length;d++)l=null!=(c=this.view.getState(s[d]))?c.getVisibleTerminal(!0):this.view.getVisibleTerminal(s[d],!0),c=null!=c?c.getVisibleTerminal(!1):this.view.getVisibleTerminal(s[d],!1),(i&&l==c||l!=c&&(n&&c==e&&(null==t||this.isValidAncestor(l,t,o))||a&&l==e&&(null==t||this.isValidAncestor(c,t,o))))&&r.push(s[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=[],o={};if(null!=e)for(var s=0;s<e.length;s++){var r=null!=(l=this.view.getState(e[s]))?l.getVisibleTerminal(!0):this.view.getVisibleTerminal(e[s],!0),l=null!=l?l.getVisibleTerminal(!1):this.view.getVisibleTerminal(e[s],!1);if(r==t&&null!=l&&l!=t&&a){var d=mxCellPath.create(l);null==o[d]&&(o[d]=l,i.push(l))}else l==t&&null!=r&&r!=t&&n&&(null==o[d=mxCellPath.create(r)]&&(o[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=[],o=0;o<a.length;o++){var s=null!=(r=this.view.getState(a[o]))?r.getVisibleTerminal(!0):this.view.getVisibleTerminal(a[o],!0),r=null!=r?r.getVisibleTerminal(!1):this.view.getVisibleTerminal(a[o],!1);(s==e&&r==t||!n&&s==t&&r==e)&&i.push(a[o])}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,o=0!=t?this.gridSize/2:0;return n.x=this.snap(n.x/a-i.x-o),n.y=this.snap(n.y/a-i.y-o),n},mxGraph.prototype.getCells=function(e,t,n,a,i,o){if(o=null!=o?o:[],0<n||0<a){var s=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<=s?o.push(c):this.getCells(e,t,n,a,c,o)}}}return o},mxGraph.prototype.getCellsBeyond=function(e,t,n,a,i){var o=[];if((a||i)&&(null==n&&(n=this.getDefaultParent()),null!=n))for(var s=this.model.getChildCount(n),r=0;r<s;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)&&o.push(l)}return o},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(),o=i.getChildCount(e),s=null,r=0,l=0;l<o;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,s=d)}}0==a.length&&null!=s&&a.push(s)}return a},mxGraph.prototype.traverse=function(e,t,n,a,i){if(null!=n&&null!=e){t=null==t||t,i=i||[];var o=mxCellPath.create(e);if(null==i[o]&&(null==(a=n(i[o]=e,a))||a)&&0<(a=this.model.getEdgeCount(e)))for(o=0;o<a;o++){var s=this.model.getEdgeAt(e,o),r=this.model.getTerminal(s,!0)==e;t&&!r||(r=this.model.getTerminal(s,!r),this.traverse(r,t,n,s,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(),o=this.model.getChildCount(i);null==a&&0<o?(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<o&&(t=i.getIndex(a),e=e?(t++,this.model.getChildAt(i,t%o)):(t--,this.model.getChildAt(i,t<0?o-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,o=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-(o*this.defaultOverlap-this.offset.y)*n),i*n,o*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);(o=n.clone()).add(a);var i=this.getSourceContainerSize(),o=(a=Math.max(i.width/t,o.width),t=Math.max(i.height/t,o.height),Math.max(0,this.outline.container.clientWidth-this.border));i=Math.max(0,this.outline.container.clientHeight-this.border);if(0<(o=Math.min(o/a,i/t))){this.outline.getView().scale!=o&&(this.outline.getView().scale=o,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 s=t.y+this.source.panDy;null!=(o=this.getOutlineOffset(o))&&(i+=o.x,s+=o.y),n.x<0&&(i-=n.x),n.y<0&&(s-=n.y),a.translate.x==i&&a.translate.y==s||(a.translate.x=i,a.translate.y=s,e=!0);n=a.translate,i=(o=this.source.getView().scale)/a.scale,s=1/a.scale;var r=this.source.container;this.bounds=new mxRectangle((n.x-t.x-this.source.panDx)/s,(n.y-t.y-this.source.panDy)/s,r.clientWidth/i,r.clientHeight/i),this.bounds.x+=this.source.container.scrollLeft*a.scale/o,this.bounds.y+=this.source.container.scrollTop*a.scale/o,(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 o=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/o*this.source.getView().scale,a=a/o*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,o){var s="";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||o>=this.max))&&(s+=this.countError+"\n"),null!=this.validNeighbors&&null!=this.typeError&&0<this.validNeighbors.length&&(this.checkNeighbors(e,t,n,a)||(s+=this.typeError+"\n"))),0<s.length?s: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,o=0;o<i.length;o++){if(this.source&&this.checkType(e,a,i[o])){n=this.validNeighborsAllowed;break}if(!this.source&&this.checkType(e,t,i[o])){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 o=this.getLayout(a.getParent(e[i]));null!=o&&o.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),o=0;o<i.length;o++)if(null!=i[o]){var s=mxCellPath.create(i[o]);null==n[s]&&(n[s]=i[o],t.push(i[o]))}}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),o=n.getState(a.getParent(e));if(null!=i&&null!=o){var s=this.getCellsToShift(i),r=a.getGeometry(e);if(null!=s&&null!=r){var l=n.translate,d=n.scale,c=(n=i.x-o.origin.x-l.x*d,o=i.y-o.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+o-r.y*d,p=1-r.width*d/i.width;i=1-r.height*d/i.height;a.beginUpdate();try{for(r=0;r<s.length;r++)s[r]!=e&&this.isCellShiftable(s[r])&&this.shiftCell(s[r],m,u,n,o,l,c,p,i,this.isExtendParents()&&t.isExtendParent(s[r]))}finally{a.endUpdate()}}}},mxSpaceManager.prototype.shiftCell=function(e,t,n,a,i,o,s,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>=o)(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>=s)(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,o=0;o<a;o++){var s=t.getChildAt(n,o);if(s!=e&&!this.isSwimlaneIgnored(s)&&null!=(i=t.getGeometry(s)))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),o=s=e[n];null!=o;){var s=o,r=(o=t.getParent(o),this.graph.isSwimlane(o)?this.graph.getStartSize(o):new mxRectangle);i.width+=r.width,i.height+=r.height}this.resizeSwimlane(s,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 o=this.graph.isSwimlane(e)?this.graph.getStartSize(e):new mxRectangle;t-=o.width,n-=o.height;for(var s=a.getChildCount(e),r=0;r<s;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 o=mxCellPath.create(e.cell),s=this.deltas[o];return null==s?(s=new mxPoint(t,n),this.deltas[o]=s,this.count++):a?(s.X+=t,s.Y+=n):(s.X=t,s.Y=n),i&&this.addEdges(e),s},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),o=this.graph.view.getState(i),s=this.deltas[t];i=this.graph.view.getState(n.getParent(i));this.translateState(i,o,s.x,s.y)}for(t in this.deltas)i=mxCellPath.resolve(a,t),o=this.graph.view.getState(i),s=this.deltas[t],i=this.graph.view.getState(n.getParent(i)),this.revalidateState(i,o,s.x,s.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 o=mxCellPath.create(t.cell);0==n&&0==a||null==e||e.relative&&null==this.deltas[o]||(t.x+=n,t.y+=a)}for(e=i.getChildCount(t.cell),o=0;o<e;o++)this.translateState(t,this.graph.view.getState(i.getChildAt(t.cell,o)),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 o=mxCellPath.create(t.cell),s=this.graph.getModel(),r=this.graph.getCellGeometry(t.cell);for(0==n&&0==a||null==r||!r.relative||!s.isVertex(t.cell)||null!=e&&!s.isVertex(e.cell)&&null==this.deltas[o]||(t.x+=n,t.y+=a,this.graph.cellRenderer.redraw(t)),null!=i&&i(t),e=s.getChildCount(t.cell),o=0;o<e;o++)this.revalidateState(t,this.graph.view.getState(s.getChildAt(t.cell,o)),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 o=i;n.isVertex(e[a])&&null!=i.shape&&null!=i.shape.boundingBox&&(o=i.shape.boundingBox),null==t?t=new mxRectangle(o.x,o.y,o.width,o.height):t.add(o)}}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=(o=mxUtils.convertPoint(n.container,t.getX(),t.getY())).x-this.first.x,i=o.y-this.first.y,o=n.tolerance;if(null!=this.shape||Math.abs(a)>o||Math.abs(i)>o){null==this.highlight&&(this.highlight=new mxCellHighlight(this.graph,mxConstants.DROP_TARGET_COLOR,3)),null==this.shape&&(this.shape=this.createPreviewShape(this.bounds));var s=n.isGridEnabledEvent(t.getEvent());o=!0;if(null!=this.guide&&this.useGuidesForEvent(t))o=!1,a=(i=this.guide.move(this.bounds,new mxPoint(a,i),s)).x,i=i.y;else if(s){var r=n.getView().translate,l=n.getView().scale;s=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-s,i=i.y-r}for(null!=this.guide&&o&&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(),o=null,i=t.getCell(),n.isDropEnabled()&&this.highlightEnabled&&(o=n.getDropTarget(this.cells,t.getEvent(),i)),s=o,r=n.getModel();null!=s&&s!=this.cells[0];)s=r.getParent(s);l=n.isCloneEvent(t.getEvent())&&n.isCellsCloneable()&&this.isCloneEnabled();var d=!1;null==(a=n.getView().getState(o))||null!=s||r.getParent(this.cell)==o&&!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!=o&&(this.target=o,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(),o=this.currentDx/a,s=(a=this.currentDy/a,t.getCell());this.connectOnDrop&&null==this.target&&null!=s&&n.getModel().isVertex(s)&&n.isCellConnectable(s)&&n.isEdgeValid(null,this.cell,s)?n.connectionHandler.connect(this.cell,s,t.getEvent()):(s=this.target,n.isSplitEnabled()&&n.isSplitTarget(s,this.cells,t.getEvent())?n.splitEdge(s,this.cells,null,o,a):this.moveCells(this.cells,o,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,o){a&&(e=this.graph.getCloneableCells(e)),null==i&&this.isRemoveCellsFromParent()&&this.shouldRemoveCellsFromParent(this.graph.getModel().getParent(this.cell),e,o)&&(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,o),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,o=this.graph.getView().translate;this.graph.panGraph(0,0),this.panGraph(o.x+n/i,o.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!=(o=this.graph.getStartSize(t.cell)).width?t.x+o.width*n/2:a,i=0!=o.height?t.y+o.height*n/2:i;if(0!=(o=mxUtils.toRadians(mxUtils.getValue(t.style,mxConstants.STYLE_ROTATION)||0))){n=Math.cos(o);var o=Math.sin(o),s=new mxPoint(t.getCenterX(),t.getCenterY());a=(i=mxUtils.getRotatedPoint(new mxPoint(a,i),n,o,s)).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 o=this.first;if(null!=this.selectedIcon){var s=this.selectedIcon.bounds.width,r=this.selectedIcon.bounds.height;null!=this.currentState&&this.targetConnectImage?(s=this.getIconPosition(this.selectedIcon,this.currentState),this.selectedIcon.bounds.x=s.x,this.selectedIcon.bounds.y=s.y):(s=new mxRectangle(t.getGraphX()+this.connectIconOffset.x,t.getGraphY()+this.connectIconOffset.y,s,r),this.selectedIcon.bounds=s),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)),(o=null)!=this.waypoints)for(o=[],i=0;i<this.waypoints.length;i++)a=this.waypoints[i].clone(),this.convertWaypoint(a),o[i]=a;this.graph.view.updatePoints(this.edgeState,o,this.previous,this.currentState),this.graph.view.updateFloatingTerminalPoints(this.edgeState,this.previous,this.currentState),i=this.edgeState.absolutePoints[this.edgeState.absolutePoints.length-1],o=this.edgeState.absolutePoints[0]}else null!=this.currentState&&null==this.constraintHandler.currentConstraint&&(null!=(s=this.getTargetPerimeterPoint(this.currentState,t))&&(i=s)),null==this.sourceConstraint&&null!=this.previous&&(null!=(s=this.getSourcePerimeterPoint(this.previous,null!=this.waypoints&&0<this.waypoints.length?this.waypoints[0]:i,t))&&(o=s));if(null==this.currentState&&this.movePreviewAway){if(s=o,null!=this.edgeState&&2<this.edgeState.absolutePoints.length&&(null!=(a=this.edgeState.absolutePoints[this.edgeState.absolutePoints.length-2])&&(s=a)),a=i.x-s.x,s=i.y-s.y,0==(r=Math.sqrt(a*a+s*s)))return;i.x-=4*a/r,i.y-=4*s/r}null==this.shape&&(a=Math.abs(n.x-this.first.x),s=Math.abs(n.y-this.first.y),a>this.graph.tolerance||s>this.graph.tolerance)&&(this.shape=this.createShape(),this.updateCurrentState(t)),null!=this.shape&&(null!=this.edgeState?this.shape.points=this.edgeState.absolutePoints:(n=[o],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,o=t.getSource(),i=0;i<this.icons.length&&!n;i++)n=o==this.icons[i].node||o.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,o=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,o,!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),o=new mxPoint(e.getCenterX(),e.getCenterY());if(null!=i){var s=mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION,0),r=-s*(Math.PI/180);0!=s&&(t=mxUtils.getRotatedPoint(new mxPoint(t.x,t.y),Math.cos(r),Math.sin(r),o)),null!=(e=i(a.getPerimeterBounds(e),e,t,!1))&&(0!=s&&(e=mxUtils.getRotatedPoint(new mxPoint(e.x,e.y),Math.cos(-r),Math.sin(-r),o)),n=e)}else n=o;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(),o=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 s=this.graph.getView().getState(a);if(null!=s){var r=i.getGeometry(t);r.x-=s.origin.x,r.y-=s.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=s=null,null!=this.edgeState&&(s=this.edgeState.cell.value,r=this.edgeState.cell.style),null!=(o=this.insertEdge(l,null,s,e,t,r))){this.graph.setConnectionConstraint(o,e,!0,this.sourceConstraint),this.graph.setConnectionConstraint(o,t,!1,this.constraintHandler.currentConstraint),null!=this.edgeState&&i.setGeometry(o,this.edgeState.cell.geometry);var d=i.getGeometry(o);if(null==d&&((d=new mxGeometry).relative=!0,i.setGeometry(o,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",o,"event",n,"target",a))}}catch(e){mxLog.show(),mxLog.debug(e.message)}finally{i.endUpdate()}this.select&&this.selectCells(o,t)}},mxConnectionHandler.prototype.selectCells=function(e,t){this.graph.setSelectionCell(e)},mxConnectionHandler.prototype.insertEdge=function(e,t,n,a,i,o){return null==this.factoryMethod?this.graph.insertEdge(e,t,n,a,i,o):(t=this.createEdge(n,a,i,o),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 o=this.graph.view.getState(t);if(null!=o){var s=this.getAlignmentTolerance();Math.abs(this.graph.snap(this.first.x)-this.graph.snap(i.x))<=s?n.x=o.x:Math.abs(this.graph.snap(this.first.y)-this.graph.snap(i.y))<=s&&(n.y=o.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 o,s=this.graph.getConnectionPoint(e.getState(),this.constraints[i]),r=(o=this.getImageForConstraint(e.getState(),this.constraints[i],s)).src;(o=new mxImageShape(o=new mxRectangle(s.x-o.width/2,s.y-o.height/2,o.width,o.height),r)).dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG,o.preserveImageAspect=!1,o.init(this.graph.getView().getOverlayPane()),null!=o.node.previousSibling&&o.node.parentNode.insertBefore(o.node,o.node.parentNode.firstChild),r=mxUtils.bind(this,function(){return null!=this.currentFocus?this.currentFocus:e.getState()}),o.redraw(),mxEvent.redirectMouseEvents(o.node,this.graph,r),this.currentFocusArea.add(o.bounds),this.focusIcons.push(o),this.focusPoints.push(s)}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,o=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,o(e))}),this.dropHandler=mxUtils.bind(this,function(e){this.mouseUp(this.graph,o(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,o=this.first.y-n,s=this.graph.tolerance;(null!=this.div||Math.abs(i)>s||Math.abs(o)>s)&&(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 o=this.state.x+this.state.width/2-n.x,s=this.state.y+this.state.height/2-n.y;this.currentAlpha=0!=o?180*Math.atan(s/o)/Math.PI+90:s<0?180:0,0<o&&(this.currentAlpha-=180),this.rotationRaster&&(o=n.x-this.state.getCenterX(),s=n.y-this.state.getCenterY(),o=Math.abs(Math.sqrt(o*o+s*s)-this.state.height/2-20),o=Math.max(1,5*Math.min(3,Math.max(0,Math.round(80/Math.abs(o))))),this.currentAlpha=Math.round(this.currentAlpha/o)*o),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=(o=n.x-this.startX,s=n.y-this.startY,n=this.graph.view.translate,d*o+l*s);o=l*o-d*s;this.bounds=this.union(this.selectionBounds,o,m,this.index,a,i,n),l=Math.cos(r),c=(d=Math.sin(r))*(o=(s=new mxPoint(this.bounds.getCenterX(),this.bounds.getCenterY())).x-c.x)+l*(s=s.y-c.y)-s,this.bounds.x+=l*o-d*s-o,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"),o=Math.cos(-i),s=Math.sin(-i),r=(n=s*(r=n.x-this.startX)+o*(l=n.y-this.startY),o*r-s*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!=(o=e==this.state?this.state:this.graph.view.getState(e))&&this.graph.setCellStyles(mxConstants.STYLE_ROTATION,(o.style[mxConstants.STYLE_ROTATION]||0)+t,[e]),this.state.cell!=e&&(null!=(o=this.graph.getCellGeometry(e))&&!o.relative))if(0!=t){var a=this.graph.getModel().getParent(e),i=this.graph.getCellGeometry(a);if(!o.relative&&null!=i){var o,s=mxUtils.toRadians(t),r=(a=Math.cos(s),s=Math.sin(s),new mxPoint(o.getCenterX(),o.getCenterY()));i=new mxPoint(i.width/2,i.height/2),a=mxUtils.getRotatedPoint(r,a,s,i);(o=o.clone()).x=a.x-o.width/2,o.y=a.y-o.height/2,n.setGeometry(e,o)}}else(o=o.clone()).x+=dx,o.y+=dy,n.setGeometry(e,o);for(o=n.getChildCount(e),a=0;a<o;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 o=this.graph.model.getGeometry(e);if(null!=o)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==(o=o.clone()).offset?o.offset=new mxPoint(t,n):(o.offset.x+=t,o.offset.y+=n),this.graph.model.setGeometry(e,o);else{if(a=this.union(o,t,n,a,i,1,new mxPoint(0,0)),0!=(r=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"))){t=a.getCenterX()-o.getCenterX(),n=a.getCenterY()-o.getCenterY(),i=Math.cos(r);var s=Math.sin(r),r=i*t-s*n-t;t=s*t+i*n-n,n=a.x-o.x;var l=a.y-o.y,d=i*n-s*l;i=s*n+i*l,a.x+=r,a.y+=t,this.graph.isCellCollapsed(e)||0==r&&0==t||(n=o.x-a.x+d,l=o.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),o=0;o<i;o++){var s=a.getChildAt(e,o);if(a.isVertex(s)){var r=this.graph.getCellGeometry(s);null!=r&&!r.relative&&((r=r.clone()).x+=t,r.y+=n,a.setGeometry(s,r))}}},mxVertexHandler.prototype.union=function(e,t,n,a,i,o,s){if(this.singleSizer){s=e.x+e.width+t;var r=e.y+e.height+n;return i&&(s=this.graph.snap(s/o)*o,r=this.graph.snap(r/o)*o),(o=new mxRectangle(e.x,e.y,0,0)).add(new mxRectangle(s,r,0,0)),o}var l=(r=e.x-s.x*o)+e.width,d=e.y-s.y*o;return e=d+e.height,4<a?(e+=n,i&&(e=this.graph.snap(e/o)*o)):a<3&&(d+=n,i&&(d=this.graph.snap(d/o)*o)),0==a||3==a||5==a?(r+=t,i&&(r=this.graph.snap(r/o)*o)):2!=a&&4!=a&&7!=a||(l+=t,i&&(l=this.graph.snap(l/o)*o)),e-=d,(i=l-r)<0&&(r+=i,i=Math.abs(i)),e<0&&(d+=e,e=Math.abs(e)),new mxRectangle(r+s.x*o,d+s.y*o,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 o=mxUtils.toRadians(e.style[mxConstants.STYLE_ROTATION]||"0"),s=Math.cos(o),r=(o=Math.sin(o),new mxPoint(e.getCenterX(),e.getCenterY())),l=mxUtils.getRotatedPoint(new mxPoint(e.x,e.y),s,o,r);this.moveSizerTo(this.sizers[0],l.x,l.y),l.x=a,l.y=e.y,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[1],l.x,l.y),l.x=t,l.y=e.y,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[2],l.x,l.y),l.x=e.x,l.y=i,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[3],l.x,l.y),l.x=t,l.y=i,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[4],l.x,l.y),l.x=e.x,l.y=n,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[5],l.x,l.y),l.x=a,l.y=n,l=mxUtils.getRotatedPoint(l,s,o,r),this.moveSizerTo(this.sizers[6],l.x,l.y),l.x=t,l.y=n,l=mxUtils.getRotatedPoint(l,s,o,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&&(o=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"),s=Math.cos(o),o=Math.sin(o),r=new mxPoint(this.state.getCenterX(),this.state.getCenterY()),l=mxUtils.getRotatedPoint(new mxPoint(e.x+e.width/2,e.y-16),s,o,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 o=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,o)}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,o=!1;if(this.snapToTerminals&&0<a){var s=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,o=!0)}},r=function(e){null!=e&&s.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&&s.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),o||(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),o=this.graph.getConnectionConstraint(e,a,!0),s=this.graph.getConnectionConstraint(e,i,!1),r=this.constraintHandler.currentConstraint;null==r&&(r=new mxConnectionConstraint),this.isSource?o=r:this.isTarget&&(s=r),(!this.isSource||null!=a)&&e.view.updateFixedTerminalPoint(e,a,!0,o),(!this.isTarget||null!=i)&&e.view.updateFixedTerminalPoint(e,i,!1,s),(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(),o=this.graph.getView().getRelativePoint(e,t,n);i.x=o.x,i.y=o.y;var s=this.graph.getView().scale;i.offset=new mxPoint(0,0),o=this.graph.view.getPoint(e,i),i.offset=new mxPoint((t-o.x)/s,(n-o.y)/s),a.setGeometry(e.cell,i)}},mxEdgeHandler.prototype.connect=function(e,t,n,a,i){var o=(i=this.graph.getModel()).getParent(e);i.beginUpdate();try{if(a){var s=e.clone();i.add(o,s,i.getChildCount(o));var r=i.getTerminal(e,!n);this.graph.connectCell(s,r,!n),e=s}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,o=(n=this.abspoints[n].y,this.bends.length-1);t=this.bends[o].bounds;this.bends[o].bounds=new mxRectangle(Math.round(i-t.width/2),Math.round(n-t.height/2),t.width,t.height),this.bends[o].fill=this.getHandleFillColor(o),this.bends[o].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,o=this.abspoints[a].y,s=this.bends[a].bounds;this.bends[a].node.style.visibility="visible",this.bends[a].bounds=new mxRectangle(Math.round(i-s.width/2),Math.round(o-s.height/2),s.width,s.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 o=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(o,this.labelShape.bounds)&&(a+=3,i+=3,o=new mxRectangle(Math.round(n.x-a/2),Math.round(n.y-i/2),a,i)),this.bends[1].bounds=o,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 o=t[i].clone();this.convertPoint(o,!1),i==this.index&&(n.x==o.x?(n.x=e.x,o.x=e.x):(n.y=e.y,o.y=e.y)),i<t.length-1&&a.push(o),n=o}if(1==a.length){if(n=this.state.view,i=this.state.getVisibleTerminalState(!0),null!=(o=this.state.getVisibleTerminalState(!1))&null!=i){var s=this.state.origin.x,r=this.state.origin.y;mxUtils.contains(o,a[0].x+s,a[0].y+r)?t[1].y==t[2].y?a[0].y=n.getRoutingCenterY(i)-r:a[0].x=n.getRoutingCenterX(i)-s:mxUtils.contains(i,a[0].x+s,a[0].y+r)&&(t[1].y==t[0].y?a[0].y=n.getRoutingCenterY(o)-r:a[0].x=n.getRoutingCenterX(o)-s)}}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 o=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(o.x-n/2),Math.round(o.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],o=2;o<n.length;o++){var s=n[o];Math.round(a.x)==Math.round(i.x)&&Math.round(i.x)==Math.round(s.x)||Math.round(a.y)==Math.round(i.y)&&Math.round(i.y)==Math.round(s.y)||(i=(a=i).clone(),this.convertPoint(i,!1),t.push(i)),i=s}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(),o=e.getY(),s=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,o);this.show(e,i,o),this.state=n,this.node=a,this.stateSource=s}}),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,o,s){for(var r=!1;null!=o;){if("add"==o.nodeName){if(null==(l=o.getAttribute("if"))||i[l]){var l=o.getAttribute("as"),d=(l=mxResources.get(l)||l,mxUtils.eval(mxUtils.getTextContent(o))),c=o.getAttribute("action"),m=o.getAttribute("icon"),u=o.getAttribute("iconCls");r&&(t.addSeparator(s),r=!1),null!=m&&this.imageBasePath&&(m=this.imageBasePath+m),l=this.addAction(t,e,l,m,d,c,n,s,u),this.addItems(e,t,n,a,i,o.firstChild,l)}}else"separator"==o.nodeName&&(r=!0);o=o.nextSibling}},mxDefaultPopupMenu.prototype.addAction=function(e,t,n,a,i,o,s,r,l){return e.addItem(n,a,function(e){"function"==typeof i&&i.call(t,t,s,e),null!=o&&t.execute(o,s,e)},r,l)},mxDefaultPopupMenu.prototype.createConditions=function(e,t,n){var a=e.graph.getModel(),i=a.getChildCount(t),o=[];for(o.nocell=null==t,o.ncells=1<e.graph.getSelectionCount(),o.notRoot=a.getRoot()!=a.getParent(e.graph.getDefaultParent()),o.cell=null!=t,a=null!=t&&1==e.graph.getSelectionCount(),o.nonEmpty=a&&0<i,o.expandable=a&&e.graph.isCellFoldable(t,!1),o.collapsable=a&&e.graph.isCellFoldable(t,!0),o.validRoot=a&&e.graph.isValidRoot(t),o.emptyValidRoot=o.validRoot&&0==i,o.swimlane=a&&e.graph.isSwimlane(t),i=this.config.getElementsByTagName("condition"),a=0;a<i.length;a++){var s=mxUtils.eval(mxUtils.getTextContent(i[a])),r=i[a].getAttribute("name");null!=r&&"function"==typeof s&&(o[r]=s(e,t,n))}return o},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 o=mxUtils.bind(this,function(){this.editor.setMode(n),null!=i&&i(this.editor)});return this.toolbar.addSwitchMode(e,t,o,a)},mxDefaultToolbar.prototype.addPrototype=function(e,t,n,a,i,o){var s=function(){return"function"==typeof n?n():null!=n?n.clone():null},r=mxUtils.bind(this,function(e,t){"function"==typeof i?i(this.editor,s(),e,t):this.drop(s(),e,t),this.toolbar.resetMode(),mxEvent.consume(e)});return e=this.toolbar.addMode(e,t,r,a,null,o),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),o=mxEvent.getClientY(t);i=mxUtils.convertPoint(a.container,i,o);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 o=a.getGeometry(n),s=a.getGeometry(e).clone();s.x=o.x+(o.width-s.width)/2,s.y=o.y+(o.height-s.height)/2;var r=this.spacing*t.gridSize,l=20*a.getDirectedEdgeCount(n,!0);this.editor.horizontalFlow?s.x+=(s.width+o.width)/2+r+l:s.y+=(s.height+o.height)/2+r+l,e.setGeometry(s);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(o){var e=mxUtils.bind(this,function(e,t){this.setModified(!0),1==this.validating&&o.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}}});o.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,o=null,s=null,r=null,l=null;a.isVertex(n)&&(null!=(i=a.getGeometry(n))&&(o=t.addText("top",i.y),s=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(s.value),i.y=parseFloat(o.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 o=this.graph.getView().scale,s=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*o,a-=l.origin.y*o,this.graph.isConstrainedMoving){r=s.width;var d=s.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*o,a-=r.y*o)}}(s=s.clone()).x=this.graph.snap(n/o-this.graph.getView().translate.x-this.graph.gridSize/2),s.y=this.graph.snap(a/o-this.graph.getView().translate.y-this.graph.gridSize/2),t.setGeometry(s),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,o=t[i];null!=o&&!this.isExcluded(t,i,o,!0)&&(mxUtils.isNumeric(i)&&(i=null),this.encodeValue(e,t,i,o,n))}},mxObjectCodec.prototype.encodeValue=function(e,t,n,a,i){if(null!=a){if(this.isReference(t,n,a,!0)){var o=e.getId(a);if(null==o)return void mxLog.warn("mxObjectCodec.encode: No ID for "+this.getName()+"."+n+"="+a);a=o}o=this.template[n],(null==n||e.encodeDefaults||o!=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=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),o=null;"add"==t.nodeName?null==(o=t.getAttribute("value"))&&(o=mxUtils.eval(mxUtils.getTextContent(t))):o=e.decode(t,i),this.addObjectValue(n,a,o,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 o=a.getAttribute(i);if(null!=o){a.removeAttribute(i);var s=e.objects[o]||e.lookup(o);null==s&&(null!=(o=e.getElementById(o))&&(s=(mxCodecRegistry.codecs[o.nodeName]||this).decode(e,o))),n[i]=s}}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),o=a.getParent(n);if(null==o||null!=i){var s=a.getChildCount(n),r=t.graph.getCellGeometry(n),l=null;if(o==a.getRoot()?l="layer":null==o?l="graph":a.isEdge(n)?l="edge":0<s&&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==o){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(o=i.style[c])&&"object"==typeof o&&(o=mxStyleRegistry.getName(o)),null!=o&&"function"!=typeof o&&"object"!=typeof o&&d.setAttribute(c,o);if(null!=(o=i.absolutePoints)&&0<o.length){for(r=Math.round(o[0].x)+","+Math.round(o[0].y),c=1;c<o.length;c++)r+=" "+Math.round(o[c].x)+","+Math.round(o[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<s;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],o=e.document.createElement("add");if(null!=n){for(var s in o.setAttribute("as",n),i){var r=this.getStringValue(s,i[s]);if(null!=r){var l=e.document.createElement("add");l.setAttribute("value",r),l.setAttribute("as",s),o.appendChild(l)}}0<o.childNodes.length&&a.appendChild(o)}}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"),o=null!=i?mxUtils.clone(n.styles[i]):null;for(null==o&&(null!=i&&mxLog.warn("mxStylesheetCodec.decode: stylesheet "+i+" not found to extend"),o={}),i=t.firstChild;null!=i;){if(i.nodeType==mxConstants.NODETYPE_ELEMENT){var s=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&&(o[s]=l)}else"remove"==i.nodeName&&delete o[s]}i=i.nextSibling}n.putCellStyle(a,o)}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"),o=t.getAttribute("control");n.bindAction(a,i,o)}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"),o=(i=mxResources.get(i)||i,t.getAttribute("icon")),s=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,o,r,s);else if(null!=l){var p=mxUtils.eval(m);u=n.addMode(i,o,l,s,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,o,u,s,d,c);else if(0<(s=mxUtils.getChildNodes(t)).length)if(null==o)for(d=n.addActionCombo(i),i=0;i<s.length;i++)"separator"==(c=s[i]).nodeName?n.addOption(d,"---"):"add"==c.nodeName&&(o=c.getAttribute("as"),c=c.getAttribute("action"),n.addActionOption(d,o,c));else{var g=null,v=n.addPrototype(i,o,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<s.length;i++)"separator"==(c=s[i]).nodeName?n.addOption(g,"---"):"add"==c.nodeName&&(o=c.getAttribute("as"),m=c.getAttribute("template"),n.addOption(g,o,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"),o=null;if(null!=a)null!=(o=document.getElementById(a))&&null!=i&&(o.style.cssText+=";"+i);else{a=parseInt(e.getAttribute("x"));var s=parseInt(e.getAttribute("y")),r=e.getAttribute("width"),l=e.getAttribute("height");(o=document.createElement("div")).style.cssText=i,new mxWindow(mxResources.get(t)||t,o,a,s,r,l,!1,!0).setVisible(!0)}"graph"==t?n.setGraphContainer(o):"toolbar"==t?n.setToolbarContainer(o):"title"==t?n.setTitleContainer(o):"status"==t?n.setStatusContainer(o):"map"==t&&n.setMapContainer(o)}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"),o=t[a].firstChild;null!=o&&1!=o.nodeType;)o=o.nextSibling;null!=o&&(n.templates[i]=e.decodeCell(o))}},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;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();var o=mxUtils.bind(this,function(e){return null==e&&(e=window.event),!!this.isSelectionAllowed(e)||a.isEditing()});this.container==document.body&&(this.menubarContainer.onselectstart=o,this.menubarContainer.onmousedown=o,this.toolbarContainer.onselectstart=o,this.toolbarContainer.onmousedown=o,this.diagramContainer.onselectstart=o,this.diagramContainer.onmousedown=o,this.sidebarContainer.onselectstart=o,this.sidebarContainer.onmousedown=o,this.footerContainer.onselectstart=o,this.footerContainer.onmousedown=o),mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?(mxEvent.addListener(this.diagramContainer,"contextmenu",o),mxEvent.addListener(this.sidebarContainer,"contextmenu",o)):(this.diagramContainer.oncontextmenu=o,this.sidebarContainer.oncontextmenu=o),a.init(this.diagramContainer),a.refresh(),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 s=a.fireMouseEvent;a.fireMouseEvent=function(e,t,n){e==mxEvent.MOUSE_DOWN&&this.container.focus(),s.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"],[[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,"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"],[[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"]]),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),!this.isEnabled()||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.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.createKeyHandler(t);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.isSelectionAllowed=function(e){return!1},EditorUi.prototype.exportXML=function(e){var t=window.document.createElement("a");t.href="data:attachment/text;charset=utf-8,"+encodeURI(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),o=0;o<i;o++){var s=n.model.getChildAt(e,o),r=t;n.isValidRoot(s)&&(r={}),null!=(r=this.validate(s,r))?n.setCellWarning(s,r.replace(/\n/g,"<br>")):n.setCellWarning(s,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+=0<=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"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":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n";break;case"lumenvoxasr":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("noUriInserted")+"\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"}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!=(o=n.validateCell(e,t))&&(i+=o),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 o=0;o<i.length;o++){var s=i[o];if(e.getModel().isEdge(s)&&(a=!0),e.getModel().isVertex(s)&&(n=!0),a&&n)break}var r=["cut","copy","delete","duplicate","bold","italic","style","underline","toFront","toBack","dashed","rounded","shadow","tilt","autosize"];for(o=0;o<r.length;o++)this.actions.get(r[o]).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(o=0;o<d.length;o++)this.menus.get(d[o]).setEnabled(t);d=["line","lineend","linestart"];for(o=0;o<d.length;o++)this.menus.get(d[o]).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 o=this.menubarHeight+this.toolbarHeight;if(mxClient.IS_QUIRKS||(o+=1),this.sidebarContainer.style.top=o+"px",this.sidebarContainer.style.width=a+"px",this.outlineContainer.style.width=a+"px",this.outlineContainer.style.height=i+"px",this.diagramContainer.style.left=a+this.splitSize+"px",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 s=n-i-this.splitSize-this.menubarHeight-this.toolbarHeight;this.sidebarContainer.style.height=s+"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.container.appendChild(this.menubarContainer),this.container.appendChild(this.toolbarContainer),this.container.appendChild(this.sidebarContainer),this.container.appendChild(this.outlineContainer),this.container.appendChild(this.diagramContainer),this.container.appendChild(this.footerContainer),this.container.appendChild(this.hsplit),this.container.appendChild(this.vsplit),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 o=null,s=null;function r(e){if(null!=o){var t=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e));i(Math.max(0,s+(n?t.x-o.x:o.y-t.y)-a)),mxEvent.consume(e)}}function e(e){r(e),s=o=null}mxEvent.addGestureListeners(t,function(e){o=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e)),s=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 o=new mxMorphing(a);o.addListener(mxEvent.DONE,mxUtils.bind(this,function(){a.getModel().endUpdate()})),o.startAnimation()}else a.getModel().endUpdate()}},EditorUi.prototype.createKeyHandler=function(e){var a=this.editor.graph,s=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())}}s.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 o=function(){i.enabled&&i.funct()};t?a?s.bindControlShiftKey(e,o):s.bindControlKey(e,o):a?s.bindShiftKey(e,o):s.bindKey(e,o)}});return s.enter=function(){},s.bindKey(8,function(){a.foldCells(!0)}),s.bindKey(13,function(){a.foldCells(!1)}),s.bindKey(33,function(){a.exitGroup()}),s.bindKey(34,function(){a.enterGroup()}),s.bindKey(36,function(){a.home()}),s.bindKey(35,function(){a.refresh()}),s.bindKey(37,function(){t(37)}),s.bindKey(38,function(){t(38)}),s.bindKey(39,function(){t(39)}),s.bindKey(40,function(){t(40)}),s.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),s},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,o,s,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],m.selected=o&&s?(m.value=s,o.forEach(function(e){m.value=m.value.replace("%"+e+"%",t[e])}),m.value==n):(m.value=t[i],t[i]==n),c.appendChild(m))}),c.className="form-control select2",c}function createDropdownWithOptgroupFromApi(e,t,n,a,i,o){var s=new XMLHttpRequest;s.open("GET",e,!1),s.setRequestHeader("Authorization","Bearer "+i.editor.data.token),s.send(null);var r=[];200===s.status&&(r=JSON.parse(s.response));var l=document.createElement("select"),d=document.createElement("option");d.text="-- None --",d.value="-1",l.appendChild(d);var c=_.groupBy(r.rows,o);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,o){var s=new XMLHttpRequest;s.open("GET",e,!1),s.setRequestHeader("Authorization","Bearer "+i.editor.data.token),s.send(null);var r=[];200===s.status&&(r=JSON.parse(s.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[o].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 o=i.response.RMI.rows;for(var s in o)n[o[s].id]=o[s].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,o,s){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=s,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"),o=n.createHeader("h4");mxUtils.write(o,mxResources.get("import")+" XML");var s=mxUtils.button("",function(){n.hideDialog()});s.className="close",t.appendChild(s),t.appendChild(o);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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("about")+" Cally Square");var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("saveAs"));var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("new"));var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("description"));var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("variable"));var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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 b=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});b.className="btn default",i.appendChild(h),i.appendChild(b),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"),o=e.createHeader("h4");mxUtils.write(o,mxResources.get("open"));var s=mxUtils.button("",function(){e.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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 b=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});b.className="btn default",i.appendChild(h),i.appendChild(b),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"),o=n.createHeader("h4");mxUtils.write(o,mxResources.get("rename"));var s=mxUtils.button("",function(){n.hideDialog()});s.className="close",t.appendChild(s),t.appendChild(o);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"),o=t.createHeader("h4");mxUtils.write(o,mxResources.get("edit"));var s=mxUtils.button("",function(){t.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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"),o=t.createHeader("h4");mxUtils.write(o,mxResources.get("export")+" XML");var s=mxUtils.button("",function(){t.hideDialog()});s.className="close",n.appendChild(s),n.appendChild(o);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,o){console.log("general");var s=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(o.value.nodeName));var l=mxUtils.button("",function(){i.hideDialog()});l.className="close",t.appendChild(l),t.appendChild(r);for(var d=o.value.attributes.length,c=i.createDiv("form-horizontal form-row-seperated"),m=0;m<d;m++){var u,p=o.value.attributes[m].name,g="_"+p,v=o.value.attributes[m].value,h=i.createDiv(m==d-1?"form-group last":"form-group"),b=document.createElement("label");switch(b.className="col-sm-4 control-label",mxUtils.write(b,mxResources.get(p)),h.appendChild(b),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"==o.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 f=i.createDiv("col-sm-8");if(f.appendChild(u),mxResources.get("help_"+p)){var A=i.createDiv("p");A.className="help-block",mxUtils.write(A,mxResources.get("help_"+p)),f.appendChild(A)}h.appendChild(f),c.appendChild(h)}n.appendChild(c);var E=mxUtils.button(mxResources.get("save"),mxUtils.bind(this,function(e){for(var t=0;t<o.value.attributes.length;t++){var n="_"+o.value.attributes[t].name,a=o.value.attributes[t].name;o.setAttribute(a,document.getElementById(n).value)}s.refresh(o),i.hideDialog()}));E.className="btn blue";var y=mxUtils.button(mxResources.get("cancel"),function(){i.hideDialog()});y.className="btn default",a.appendChild(E),a.appendChild(y),e.appendChild(t),e.appendChild(n),e.appendChild(a),this.container=e}Editor=function(){mxEventSource.call(this),this.init(),this.initStencilRegistry(),this.graph=new Graph,this.outline=new mxOutline(this.graph),this.outline.updateOnPan=!0,this.undoManager=this.createUndoManager(),this.status="",this.filename=null,this.getOrCreateFilename=function(){return this.filename||mxResources.get("drawing",[counter])+".xml"},this.getFilename=function(){return this.filename},this.setStatus=function(e){this.status=e,this.fireEvent(new mxEventObject("statusChanged"))},this.getStatus=function(){return this.status},this.modified=!1,this.graphChangeListener=function(){this.modified=!0},this.graph.getModel().addListener(mxEvent.CHANGE,mxUtils.bind(this,function(){this.graphChangeListener.apply(this,arguments)})),window.onbeforeunload=mxUtils.bind(this,function(){if(this.modified)return mxResources.get("allChangesLost")}),this.graph.resetViewOnRootChange=!1,this.graph.scrollbars=!0,this.graph.background=null},mxUtils.extend(Editor,mxEventSource),Editor.prototype.gridImage=IMAGE_PATH+"/grid.gif",Editor.prototype.transparentImage=IMAGE_PATH+"/transparent.gif",Editor.prototype.setGraphXml=function(e){var t=new mxCodec(e.ownerDocument);if("mxGraphModel"==e.nodeName){this.graph.view.scale=Number(e.getAttribute("scale")||1),this.graph.gridEnabled="0"!=e.getAttribute("grid"),this.graph.graphHandler.guidesEnabled="0"!=e.getAttribute("guides"),this.graph.setTooltips("0"!=e.getAttribute("tooltips")),this.graph.setConnectable("0"!=e.getAttribute("connect")),this.graph.foldingEnabled="0"!=e.getAttribute("fold"),this.graph.scrollbars="0"!=e.getAttribute("scrollbars"),this.graph.scrollbars||(this.graph.container.scrollLeft=0,this.graph.container.scrollTop=0,this.graph.view.translate.x=Number(e.getAttribute("dx")||0),this.graph.view.translate.y=Number(e.getAttribute("dy")||0)),this.graph.pageVisible="1"==e.getAttribute("page"),this.graph.pageBreaksVisible=this.graph.pageVisible,this.graph.preferPageSize=this.graph.pageBreaksVisible;var n=e.getAttribute("pageScale");this.graph.pageScale=null!=n?n:1.5;var a=e.getAttribute("pageWidth"),i=e.getAttribute("pageHeight");null!=a&&null!=i&&(this.graph.pageFormat=new mxRectangle(0,0,parseFloat(a),parseFloat(i)),this.outline.outline.pageFormat=this.graph.pageFormat);var o=e.getAttribute("background");null!=o&&0<o.length&&(this.graph.background=o),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,o=this.graph.pageFormat,s=this.graph.pageScale,r=o.width*s,l=o.height*s,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,o=this.pageFormat,s=a*this.pageScale,r=this.view.getBackgroundPageBounds();t=r.width,n=r.height;var l=new mxRectangle(a*i.x,a*i.y,o.width*s,o.height*s),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 o=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 o.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,o){var s=r.apply(this,arguments);return null==o||o||mxEvent.addListener(s,"mousedown",function(e){mxEvent.consume(e)}),s};var s=mxGraphHandler.prototype.getInitialCellForEvent;mxGraphHandler.prototype.getInitialCellForEvent=function(e){var t=this.graph.getModel(),n=t.getParent(this.graph.getSelectionCell()),a=s.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 o=this.graph,n=new mxUndoManager,e=function(e,t){n.undoableEditHappened(t.getProperty("edit"))};o.getModel().addListener(mxEvent.UNDO,e),o.getView().addListener(mxEvent.UNDO,e);var t=function(e,t){for(var n=o.getSelectionCellsForChanges(t.getProperty("edit").changes),a=[],i=1;i<n.length;i++)null!=o.view.getState(n[i])&&a.push(n[i]);o.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 o=a[i];if(".xml"==o.toLowerCase().substring(o.length-4,o.length))mxStencilRegistry.loadStencilSet(o,null);else if(".js"==o.toLowerCase().substring(o.length-3,o.length)){var s=mxUtils.load(o);null!=s&&eval.call(window,s.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,o="",s=a.getAttribute("name");for(null!=s&&(o=s+".");null!=i;){if(i.nodeType==mxConstants.NODETYPE_ELEMENT&&null!=(s=i.getAttribute("name"))){o=o.toLowerCase();var r=s.replace(/ /g,"_");if(n&&mxStencilRegistry.addStencil(o+r.toLowerCase(),new mxStencil(i)),null!=t){var l=i.getAttribute("w"),d=i.getAttribute("h");t(o,r,s,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"],["GoogleTTS","ISpeechTTS","AWSPolly","LumenvoxTTS"]),this.addImagePalette("asr","ASR",e+"/asr/","_128x128.png",["googleasr","ispeechasr","lumenvoxasr","tildeasr"],["GoogleASR","ISpeechASR","LumenvoxASR","TildeASR"]),this.addImagePalette("integrationServer",mxResources.get("integrationServer"),e+"/integration_server/","_128x128.png",["database","sendMail","sendSMS","dialogflow"],[mxResources.get("database"),mxResources.get("sendMail"),mxResources.get("sendSMS"),"Dialogflow"]),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),o=-Math.round(e.y-this.tooltipBorder),s=document.body,r=document.documentElement,l=(s.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!=o?this.graph2.view.canvas.setAttribute("transform","translate("+i+","+o+")"):this.graph2.view.canvas.removeAttribute("transform"):(this.graph2.view.drawPane.style.left=i+"px",this.graph2.view.drawPane.style.top=o+"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 o=e.toLowerCase().split(" "),s=new mxDictionary,r=(n+1)*t,l=[],d=0,c=0;c<o.length;c++)if(0<o[c].length){var m=this.taglist[o[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==s.get(m))&&(u.put(m,m),l.push(m),c==o.length-1&&l.length==r))return void a(l.slice(n*t,r),r,!0)}}else l=[];s=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,o=document.createElement("img");o.setAttribute("src",Sidebar.prototype.searchImage),o.setAttribute("title",mxResources.get("search")),o.style.position="relative",o.style.left="-18px",mxClient.IS_QUIRKS?(a.style.height="28px",o.style.top="-4px"):o.style.top="2px",o.style.background="url('"+this.editorUi.editor.transparentImage+"')",n.appendChild(o),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 s=new Object;this.currentSearch=s,this.searchEntries(c,v,p,mxUtils.bind(this,function(e,t,n){if(this.currentSearch==s){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 o=document.createElement("div");o.className="geTitle",o.style.backgroundColor="transparent",o.style.borderColor="transparent",o.style.color="gray",o.style.padding="0px",o.style.margin="0px 8px 0px 8px",o.style.paddingTop="6px",o.style.textAlign="center",o.style.cursor="default",mxUtils.write(o,mxResources.get("noResultsFor",[c])),r.appendChild(o)}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="",o.style.display="none"}),mxEvent.addListener(a,"blur",function(){a.style.paddingRight="20px",o.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 s=document.createElement("div");s.appendChild(r),this.container.appendChild(s),this.palettes.search=[t,s]},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,o,s,r,l){this.graph.labelsVisible=null==o||o;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!=s){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,o,s){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,o);var d=new mxRectangle(0,0,i,o);if(1<t.length||t[0].vertex){var c=this.createDragSource(r,this.createDropHandler(t,!0,s,d),this.createDragPreview(i,o),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,s,d),this.createDragPreview(i,o),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,b){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 o=null!=n&&e.isValidDropTarget(n,g,t),s=null;if(null==n||o||(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-b.width/2,i-b.height/2),s=r}else 0<g.length&&(s=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<s.length;p++)l.moveCell(s[p],m,u)}h&&e.fireEvent(new mxEventObject("cellsInserted","cells",s))}finally{e.model.endUpdate()}null!=s&&0<s.length&&(e.scrollCellToVisible(s[0]),e.setSelectionCells(s))}}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,o=null;mxEvent.addGestureListeners(e,function(e){o=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e))});var s=a.mouseUp;a.mouseUp=function(e){if(!mxEvent.isPopupTrigger(e)&&null==this.currentGraph&&null!=o){var t=i.tolerance;if(Math.abs(o.x-mxEvent.getClientX(e))<=t&&Math.abs(o.y-mxEvent.getClientY(e))<=t){var n=i.getGridSize();a.drop(i,e,null,n,n)}}s.apply(this,arguments),o=null}},Sidebar.prototype.createVertexTemplateEntry=function(e,t,n,a,i,o,s,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,o,s)}))},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,o,s,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":l=["text","options"],d=["",""];break;case"lumenvoxasr":l=["grammar","options"],d=["",""];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"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;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,o,s,r)},Sidebar.prototype.createVertexTemplateFromCells=function(e,t,n,a,i,o,s){return this.createItem(e,a,i,o,t,n,s)},Sidebar.prototype.createEdgeTemplate=function(e,t,n,a,i,o,s){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,o,s)},Sidebar.prototype.createEdgeTemplateFromCells=function(e,t,n,a,i,o){return this.createItem(e,a,i,!0,t,n,o)},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 o=document.createElement("div");o.className="geSidebar",mxClient.IS_POINTER&&(o.style.touchAction="none"),mxEvent.addListener(o,"mousemove",mxUtils.bind(this,function(e){mxEvent.getSource(e)==o?o.setAttribute("title",mxResources.get("sidebarTooltip")):o.removeAttribute("title")})),n?(a(o),a=null):o.style.display="none",this.addFoldingHandler(i,o,a);var s=document.createElement("div");return s.appendChild(o),this.container.appendChild(s),null!=e&&(this.palettes[e]=[i,s]),o},Sidebar.prototype.addFoldingHandler=function(n,a,i){var o=!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(o)a.style.display="block";else if(o=!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,o,s,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;labelBackgroundColor=#ffffff;image="+o+e+s,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 o=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?o.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 o=!1,s=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()?(o=!1,s=null):(s=t.getCell(),o=null!=s?this.isCellSelected(s):this.isSelectionEmpty());else if(e==mxEvent.MOUSE_UP){if(o&&!this.isEditing()){if(!this.panningHandler.isMenuShowing()){var a=mxEvent.getClientX(t.getEvent()),i=mxEvent.getClientY(t.getEvent());this.panningHandler.popup(a+16,i,s,t.getEvent())}return o=!1,s=null,void t.consume()}o=!1,s=null}mxGraph.prototype.fireMouseEvent.apply(this,arguments),e==mxEvent.MOUSE_MOVE&&t.isConsumed()&&(o=!1,s=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 o=mxVertexHandler.prototype.redraw;mxVertexHandler.prototype.redraw=function(){o.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 s=mxVertexHandler.prototype.destroy;mxVertexHandler.prototype.destroy=function(e,t){s.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()};o=mxVertexHandler.prototype.redraw;mxVertexHandler.prototype.redraw=function(){o.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"))};s=mxVertexHandler.prototype.destroy;mxVertexHandler.prototype.destroy=function(e,t){s.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()}),this.addAction("open",function(){t.projectDesignController.openProject()}),this.addAction("save",function(){t.projectDesignController.saveOrPublishProject(mxUtils.getPrettyXml(l.getGraphXml())),t.editor.modified=!1},null,null,"Ctrl+S"),this.addAction("saveAs",function(){t.projectDesignController.saveProjectAs(mxUtils.getPrettyXml(l.getGraphXml()))},null,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))},null,null,"Ctrl+Shift+P"),this.addAction("variable",function(){t.projectDesignController.newVariable()}),this.addAction("import",function(){t.projectDesignController.importXML(function(e){l.setGraphXml(mxUtils.parseXml(e).documentElement)})}),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)})}),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 o=d.view.getState(n);if(null!=o){var s=o.style[mxConstants.STYLE_DIRECTION]||"east";"east"==s?s="south":"south"==s?s="west":"west"==s?s="north":"north"==s&&(s="east"),d.setCellStyles(mxConstants.STYLE_DIRECTION,s,[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,o=n.y,s=d.getModel().getParent(e),r=d.getCellGeometry(s);d.getModel().isVertex(s)&&null!=r&&(i+=r.x,o+=r.y),t.addPointAt(t.state,d.panningHandler.triggerX/a-i,d.panningHandler.triggerY/a-o)}}}),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 o=d.getGridSize();a=i=[d.insertVertex(d.getDefaultParent(),null,"",o,o,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 s=i[0],r=d.getModel().getGeometry(s);null!=r&&((r=r.clone()).width=t,r.height=n,d.getModel().setGeometry(s,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,o){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()}}),o,i)},Menus.prototype.promptChange=function(e,t,a,i,o,n,s){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[o]||t),null!=(t=mxUtils.prompt(mxResources.get("enterValue")+(0<a.length?" "+a:""),t))&&0<t.length&&e.setCellStyles(o,t)}),n,null,s)},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 o=a.selectionCellsHandler.getHandler(t);if(o instanceof mxEdgeHandler&&null!=o.bends&&2<o.bends.length){var s=o.getHandleForEvent(new mxMouseEvent(n)),r=this.editorUi.actions.get("removeWaypoint");r.handler=o,i=0<(r.index=s)&&s<o.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){for(var t=new Menubar(this.editorUi,e),n=["file","edit","view","format","text","arrange","help"],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,o){if(null!=o){var s=!0,t=mxUtils.bind(this,function(e){if(s&&null==i.enabled||i.enabled){this.editorUi.editor.graph.panningHandler.hideMenu();var t=new mxPopupMenu(o);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}s=!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(){s=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(){this.addItems(["save","publish","-","print","undo","redo","-","copy","cut","paste","delete","-","duplicate","-","actualSize","zoomIn","zoomOut","-"]);this.editorUi.editor.graph},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),o=this.addMenuFunction(e,t,n,i.funct);return i.addListener("stateChanged",function(){o.setEnabled(i.enabled)}),o},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 o=this.editorUi.editor.graph,s=null;mxEvent.addListener(t,"click",mxUtils.bind(this,function(e){(null==t.enabled||t.enabled)&&(o.panningHandler.hideMenu(),(s=new mxPopupMenu(a)).div.className+=" geToolbarMenu",s.showDisabled=i,s.labels=n,s.autoExpand=!0,s.popup(t.offsetLeft,t.offsetTop+t.offsetHeight+34,null,e),this.currentMenu=s),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/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="Search...">\n        </md-input-container>\n        <md-content class="border h-300">\n            <md-list class="md-dense" layout-fill layout-align="center center">\n                <md-list-item class="md-3-line" ng-repeat="item in options.items | filter: query | orderBy: options.orderBy" ng-click="transfer(options.items, options.selectedItems, options.items.indexOf(item), 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                    </div>\n                    <md-icon 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" 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="Search...">\n        </md-input-container>\n        <md-content class="border h-300">\n            <md-list class="md-dense" layout-fill layout-align="center center">\n                <md-list-item class="md-3-line" ng-repeat="item in options.selectedItems | filter: selectedQuery | orderBy: options.orderBy" ng-click="transfer(options.selectedItems, options.items, options.selectedItems.indexOf(item), true)">\n                    <md-icon 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                    </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" 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" 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" ng-class="{\'active md-accent-bg md-accent-fg\': vm.isActive}" 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" ng-class="{\'has-children\': vm.hasChildren}" 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" ng-class="{\'collapsed\': vm.collapsed, \'has-children\': vm.hasChildren}" 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\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}} <timer ng-if="vm_pb.registered" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></span></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"\n                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!-- 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"><timer interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></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" 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" 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"\n        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/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"\n                   ng-click="MsSearchBar.expand()"\n                   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"\n             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}"\n            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)}"\n                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)}\"\n"+'    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}"\n                    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"><font color="red">{{vm.message}}</font></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                <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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="ANALYTICS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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 ng-if="extractedReport.status == \'Completed\'">\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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.editdialog(metric, $event)" translate="ANALYTICS.EDIT_METRIC">\n                                                    Edit Metric\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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)"\n                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">\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.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">\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}}</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}}</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}}</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" 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" 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" 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" 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">\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.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-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-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)">\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-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 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">\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"></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">\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">\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 Report\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 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                        </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)">\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.currentNode.custom && (vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\')" 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.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.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.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="id">{{report.id}}</td>\n                            <td ng-click="vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="name">{{report.name}}</td>\n                            <td ng-click="vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="description">{{report.description}}</td>\n                            <td ng-click="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>\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.currentNode.custom"></md-menu-divider>\n                                        <md-menu-item ng-if="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.currentNode.custom && (vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\')">\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"\n                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"\n                    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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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">\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.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">\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-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|sms_account_id|findBy|pause_id|aws_text_type|dialogflow_language"\n                    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]">{{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-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\'">{{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\'">{{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" 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" 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" 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" 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" string-to-number>\n                    <input ng-switch-when-separator="|" ng-switch-when="retry|response|hiddendigitsnum|priority|delay" type="number" step="any" name="{{attribute.name}}" min="1" ng-model="attribute.value" ng-required="attribute.required" 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" ng-required="attribute.required"></textarea>\n                    \x3c!--  END TEXTAREA 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">\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">\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>\n                </span>\n                <md-button class="md-icon-button" ng-click="vm.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>\n                </span>\n                <md-button class="md-icon-button" ng-click="vm.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>\n                </span>\n                <md-button class="md-icon-button" ng-click="vm.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>\n                </span>\n                <md-button class="md-icon-button" ng-click="vm.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>\n                </span>\n                <md-button class="md-icon-button" ng-click="vm.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">\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-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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditProject($event, project)" md-cell class="id ">{{project.id}}</td>\n                                <td ng-click="vm.createOrEditProject($event, project)" md-cell class="name ">{{project.name}}</td>\n                                <td ng-click="vm.createOrEditProject($event, project)" md-cell class="description ">{{project.description}}</td>\n                                <td ng-click="vm.createOrEditProject($event, project)" md-cell class="notes ">{{project.notes}}</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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\n                                                <md-button ng-click="vm.managePermissions(project, ev)" translate="CALLYSQUARE.ADDUSER_PROJECTS">\n                                                    Add User To Project\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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-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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditChatQueue($event, chatQueue)" md-cell class="id ">{{chatQueue.id}}</td>\n                                <td ng-click="vm.createOrEditChatQueue($event, chatQueue)" md-cell class="name ">{{chatQueue.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatQueues/edit/teamadd/teamadd.html",'<md-dialog class="chatQueue-dialog" aria-label="chatQueue">\n    <form name="chatQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CHAT.TEAMADD_CHATQUEUE">Add Team in 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    </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                        <span ng-if="vm.chatQueue.exten">{{vm.chatQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditChatWebsite($event, chatWebsite)" md-cell class="id ">{{chatWebsite.id}}</td>\n                                <td ng-click="vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="name ">{{chatWebsite.name}}</td>\n                                <td ng-click="vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="key ">{{chatWebsite.key}}</td>\n                                <td ng-click="vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="address ">{{chatWebsite.address}}</td>\n                                <td ng-click="vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="remote ">{{chatWebsite.remote}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\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\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                <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\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\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                <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\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\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">{{ 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">{{ 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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" required autofocus>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents">{{ 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">\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">\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" required autofocus>\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" md-maxlength="255" 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 ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.TEXT_MAX_LENGTH" translate-values=\'{max: 255}\'>Text 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">\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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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>\n                    <md-option ng-value="\'en\'">English</md-option>\n                    <md-option ng-value="\'it\'">Italian</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                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.WELCOMEMESSAGE_REQUIRED">welcomemessage field is required</span>\n                    </div>\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">\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>\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\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">\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">\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">\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>\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">\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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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">\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>\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\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">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables">{{ 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">\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" required autofocus>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newChatCannedAnswer" ng-click="vm.saveChatCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="chatCannedAnswerForm.$invalid || chatCannedAnswerForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE"\n                    translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                <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                <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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                        <span ng-if="vm.chatWebsite.exten">{{vm.chatWebsite.exten}}</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\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (scriptForm.$invalid) || (intervalForm.$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)"\n                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\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 ng-disabled="true">\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\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                                <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\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\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                                <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\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\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">{{ 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">\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">\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">\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\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"><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"><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, removePlugins: \'magicline\' }"\n                                    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"><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">\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"><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">\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\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>\n                                    <md-option ng-value="null">Always</md-option>\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval">{{ 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">\n                                    < <div class="hint"><span translate="CHAT.HELP.TIMEZONE"></span></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    </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\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"\n                        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"\n                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"\n    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"\n        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">\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">\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"><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"><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">\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">\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">\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">\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\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\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>\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\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\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">\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\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\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"><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">\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\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\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">\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\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\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">\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\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\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">\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\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\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">\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\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\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block">\n                    <md-switch ng-model="vm.chatWebsite.enableRating" aria-label="enableRating"><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">\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">\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"><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"><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">\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\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\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">\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\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\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"><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"><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">\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\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\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">\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\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\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">\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\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\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>\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">\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\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\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">\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">\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\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\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">\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\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\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">\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\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\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">\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\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\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block">\n                    <md-switch ng-model="vm.chatWebsite.enableCustomerWriting" aria-label="enableCustomerWriting"><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">\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\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\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">\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\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\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">\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\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\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"><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"><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"><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">\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\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\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"><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)" 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()"\n                    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>\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)" 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()"\n                    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>\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)" 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()"\n                    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>\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)" 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()"\n                    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>\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\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\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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                            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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                            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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                            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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editChatWebsiteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                Edit App\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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></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 ng-if="vm_dc.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                            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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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>{{ ContactId = vm_dc.contacts[offlineMessage.ContactId]; ContactId.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                            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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'CHAT.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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"\n    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">\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"\n    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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditCompany($event, company)" md-cell class="id ">{{company.id}}</td>\n                                <td ng-click="vm.createOrEditCompany($event, company)" md-cell class="name ">{{company.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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\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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                        <span ng-if="vm.company.exten">{{vm.company.exten}}</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\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()" 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\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>\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\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                                <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\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                                <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\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                                <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\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                                <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\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                                <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\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                                <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\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\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                                <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\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                                <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">\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\n                                </div>\n                            </md-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\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>\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\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">\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\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">\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\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">\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\n                                </div>\n                            </md-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\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>\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\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">\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\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">\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\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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 = []"><md-icon md-font-icon="icon-refresh"></md-icon>{{ \'CONTACTMANAGER.ALL_CONTACTS\' | translate }}</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>\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="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.createOrEditContact($event, contact)" md-cell class="id">{{contact.id}}</td>\n                                    <td ng-click="vm.createOrEditContact($event, contact)" md-cell class="firstName">{{contact.firstName}} {{contact.lastName}}</td>\n                                    <td ng-click="vm.createOrEditContact($event, contact)" md-cell class="phone">{{contact.phone}}</td>\n                                    <td ng-click="vm.createOrEditContact($event, contact)" md-cell class="email">{{contact.email}}</td>\n                                    <td ng-click="vm.createOrEditContact($event, contact)" md-cell class="list">{{vm.listsMap[contact.ListId]}}</td>\n                                    <td ng-click="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">\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>\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>\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>\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></md-menu-divider>\n                                                <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                        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-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            \x3c!-- OLD IMPORT --\x3e\n            \x3c!-- <md-button class="md-fab md-mini md-warn" ng-click="vm.uploadContacts($event)" aria-label="add contact" translate translate-attr-aria-label="CONTACTMANAGER.UPLOAD_CSV">\n                <md-tooltip md-direction="left" md-visible="tooltipVisible" md-autohide="false">\n                    {{\'CONTACTMANAGER.UPLOAD_CSV\' | translate}}\n                </md-tooltip>\n                <md-icon md-font-icon="icon-upload"></md-icon>\n            </md-button> --\x3e\n            \x3c!-- NEW IMPORT --\x3e\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="!!{csv:1}[$file.getExtension()]" aria-label="Select File"\n                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">\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.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-optgroup label="Lists">\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\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">\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">\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>\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" 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>\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">\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">\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">\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">\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">\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-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">\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-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                                            <md-button class="md-accent" translate="CONTACTMANAGER.ADD_COMPANY">Add Company</md-button>\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>\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                                        <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_TAGS">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">\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">\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">\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">\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"></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">\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="icon-message"></md-icon>\n                                            <input type="text" name="line" ng-model="vm.contact.line" class="text-truncate">\n                                        </md-input-container>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Viber</label>\n                                            <md-icon md-font-icon="icon-message"></md-icon>\n                                            <input type="text" name="viber" ng-model="vm.contact.viber" 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">\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">\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">\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="hopper.VoiceQueueId" ng-click="vm.editHopper($event, hopper)" translate="CONTACTMANAGER.EDIT_HOPPER">\n                                                                Edit Hopper\n                                                            </md-button>\n                                                            <md-button ng-if="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.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]"\n                                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]"\n                                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]"\n                                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]"\n                                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/contacts/upload/upload.html",'<md-dialog class="upload-dialog" aria-label="Upload contact">\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" translate="CONTACTMANAGER.UPLOAD_CONTACTS">Upload Contacts</span>\n                <md-button ng-if="vm.finished || !vm.uploading" class="md-icon-button" ng-click="vm.closeDialog()">\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.uploading" 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 layout="row" layout-align="center center" ng-show="!vm.fileSelected">\n                <md-button flow-init="vm.ngFlowOptions" flow-name="vm.ngFlow.flow" flow-btn flow-file-added="vm.fileAdded($event, $file, $flow)" flow-file-success="vm.fileSuccess($file, $message, $flow)" class="md-accent md-raised md-warn" aria-label="Select File" translate\n                    translate-attr-aria-label="CONTACTMANAGER.SELECT_FILE">\n                    <span translate="CONTACTMANAGER.SELECT_FILE">Select File</span>\n                    <md-icon md-font-icon="icon-upload"></md-icon>\n                    </md-button>\n            </div>\n\n            <div>\n                <md-content ng-show="!vm.uploading && !vm.finished && vm.fileSelected">\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"><em>{{ \'CONTACTMANAGER.NONE\' | translate }}</em></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"><em>{{ \'CONTACTMANAGER.NONE\' | translate }}</em></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"><em translate="CONTACTMANAGER.NONE">None</em></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                </md-content>\n\n                <div layout="row" ng-if="vm.uploading || vm.finished">\n                    \x3c!-- WIDGET SUCCESS --\x3e\n                    <ms-widget 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"><span ng-bind="vm.success"></span></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 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"><span ng-bind="vm.errors"></span></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 class="h-140" flex ng-if="vm.duplicate">\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"><span ng-bind="vm.duplicate"></span></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 class="error-list" ng-if="vm.finished">\n                    <div class="info" layout="row" layout-align="space-between center">\n                        <div>\n                            <div class="message">{{\'CONTACTMANAGER.UPLOAD_COMPLETED\' | translate | uppercase}}</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>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row">\n                <md-button ng-disabled="uploadForm.$invalid || uploadForm.$pristine || vm.uploading || vm.finished || !vm.fileSelected" ng-click="vm.uploadCsv()" class="md-accent md-raised" aria-label="UPLOAD" translate="CONTACTMANAGER.UPLOAD" translate-attr-aria-label="CONTACTMANAGER.UPLOAD">\n                    UPLOAD\n                </md-button>\n                <md-button ng-if="vm.showStopButton && !vm.finished" ng-disabled="vm.disableStopButton" 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.rows.length" ng-csv="vm.exportErrors()" class="md-accent md-raised" aria-label="Export Errors" filename="contacts_upload_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/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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.list.exten">{{vm.list.exten}}</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\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()" 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\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>\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\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                                <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\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">\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\n                                </div>\n                            </md-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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                                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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                                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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditList($event, list)" md-cell class="id ">{{list.id}}</td>\n                                <td ng-click="vm.createOrEditList($event, list)" md-cell class="name ">{{list.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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.currentUser.role == \'admin\'" 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"\n        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"\n            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"\n        ng-init="vm.init(tab)"></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\'"\n        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/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"><timer start-time="call.answeredAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></span>\n                                <div flex></div>\n                                <span ng-if="call.disposedAt" class="text-boxed amber-200-bg"><timer start-time="call.disposedAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></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" 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" 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" 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" 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                            <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="icon-message"></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="icon-message"></md-icon>\n                                    <input type="text" name="viber" ng-model="vm.contact.viber" class="text-truncate">\n                                </md-input-container>\n                            </div>\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    <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        <div ng-if="vm.isReschedule" 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    <md-dialog-actions ng-if="!vm.isReschedule" layout="row">\n        <md-button ng-disabled="!(vm.choice || vm.note)" 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 ng-if="vm.dialerCall" class="send-button md-raised md-primary" translate="DASHBOARDS.RESCHEDULE" ng-click="vm.saveDisposition(\'reschedule\')">\n            Reschedule\n        </md-button>\n        <md-button ng-if="vm.dialerCall" 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.dialerCall && 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-disabled="vm.disable" ng-click="vm.saveReschedule()" 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</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.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_bull.query.lastAssignedTo" ng-change="vm_bull.getContacts()">\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.getContacts()">\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.refreshContacts($event)" aria-label="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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.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="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.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_bull.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="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.calleridnum" license="vm_home.license" disabled="contact.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[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.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-switch no-margin ng-if="contact.lastAssignedTo === vm_bull.currentUser.name || !contact.lastAssignedTo" ng-disabled="vm_bull.disable[contact.id]" ng-model="contact.assigned" aria-label="reserved" ng-change="vm_bull.reserved(contact, contact.disposition)">\n                            \x3c!-- <span>{{ contact.assigned ? \'DASHBOARDS.RESERVED\' : \'DASHBOARDS.FREE\' | translate }}</span> --\x3e\n                        </md-switch>\n                    </td>\n                    <td md-cell class="list">{{contact.lastAssignedTo}}</td>\n                    <td md-cell class="actions">\n                        <md-menu ng-if="contact.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(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_bull.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_bull.query.page" md-total="{{vm_bull.contacts.count}}" md-on-paginate="vm_bull.getContacts" 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.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_voice.query.lastAssignedTo" ng-change="vm_voice.getContacts()">\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.getContacts()">\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.refreshContacts($event)" aria-label="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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.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="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.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_voice.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="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.calleridnum" license="vm_home.license" disabled="contact.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[contact.queue]}}</td>\n                    <td md-cell class="list">{{contact.queuecallerabandonAt ? (contact.queuecallerabandonAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{contact.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-switch no-margin ng-if="contact.lastAssignedTo === vm_voice.currentUser.name || !contact.lastAssignedTo" ng-disabled="vm_voice.disable[contact.id]" ng-model="contact.assigned" aria-label="reserved" ng-change="vm_voice.reserved(contact, contact.disposition)">\n                            \x3c!-- <span>{{ contact.assigned ? \'DASHBOARDS.RESERVED\' : \'DASHBOARDS.FREE\' | translate }}</span> --\x3e\n                        </md-switch>\n                    </td>\n                    <td md-cell class="list">{{contact.lastAssignedTo}}</td>\n                    <td md-cell class="actions">\n                        <md-menu ng-if="contact.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(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_voice.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_voice.query.page" md-total="{{vm_voice.contacts.count}}" md-on-paginate="vm_voice.getContacts" 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="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)"\n            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><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></span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{chatInteraction.lastMsgAt | formatdate }}</span>\n                            </div </div>\n                            <span ng-if="!chatInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <span ng-if="chatInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="chatInteraction.disposition">- {{chatInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="chatInteraction.closed">{{chatInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!chatInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="chatInteraction.substatus"> - {{chatInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate" 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="3">\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-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"\n        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="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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(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"\n            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><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></span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{faxInteraction.lastMsgAt | formatdate }}</span>\n                            </div </div>\n                            <span ng-if="!faxInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <span ng-if="faxInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="faxInteraction.disposition">- {{faxInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="faxInteraction.closed">{{faxInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!faxInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="faxInteraction.substatus"> - {{faxInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate" 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="3">\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-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"\n        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><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></span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{mailInteraction.lastMsgAt | formatdate }}</span>\n                            </div </div>\n                            <span ng-if="!mailInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <span ng-if="mailInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="mailInteraction.disposition">- {{mailInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="mailInteraction.closed">{{mailInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!mailInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="mailInteraction.substatus"> - {{mailInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate" 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="3">\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-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"\n        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="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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><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></span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{openchannelInteraction.lastMsgAt | formatdate }}</span>\n                            </div </div>\n                            <span ng-if="!openchannelInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <span ng-if="openchannelInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="openchannelInteraction.disposition">- {{openchannelInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="openchannelInteraction.closed">{{openchannelInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!openchannelInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="openchannelInteraction.substatus"> - {{openchannelInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate" 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="3">\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-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"\n        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">Inbound</md-option>\n                    <md-option value="outbound">Outbound</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></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/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><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></span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{smsInteraction.lastMsgAt | formatdate }}</span>\n                            </div </div>\n                            <span ng-if="!smsInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <span ng-if="smsInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="smsInteraction.disposition">- {{smsInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="smsInteraction.closed">{{smsInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!smsInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="smsInteraction.substatus"> - {{smsInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate" 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="3">\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-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"\n        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">Inbound</md-option>\n                    <md-option value="outbound">Outbound</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"\n                        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"\n                        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 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"\n                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"\n                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"\n                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">\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(true)" 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" 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(false)" 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"\n                        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"\n                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"\n        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>\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.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.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\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)">{{ vm.getLabelByMessage(message) }} - {{message.createdAt | date: \'medium\'}}</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" 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'),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\n                        <div layout="column" layout-align="start start">\n                            <div layout="row" layout-align="start start">\n                                \x3c!-- <div>\n                                <img ng-if="message.direction ===\'in\'" ng-src="assets/images/avatars/customer.png" class="avatar" alt="customer" />\n\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                            </div> --\x3e\n\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\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\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\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\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\n\n                            \x3c!-- <md-menu>\n                        <md-button aria-label="More" class="md-icon-button"\n                                   ng-click="$mdOpenMenu($event)"\n                                   translate translate-aria-label="MAIL.MORE">\n                            <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 aria-label="Print" translate-aria-label="MAIL.PRINT">\n                                    <md-icon md-font-icon="icon-printer"></md-icon>\n                                    <span translate="MAIL.PRINT">Print</span>\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu> --\x3e\n                        </div>\n\n\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-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">\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">{{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-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>'),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"><timer start-time="vm.starttime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></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}}</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                <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\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                <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\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\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">{{ 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                <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\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">{{ 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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" required autofocus>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents">{{ 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">\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">\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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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">\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>\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">\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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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">\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>\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\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">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables">{{ 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">\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" required autofocus>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.faxAccount.exten">{{vm.faxAccount.exten}}</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\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (advancedForm.$invalid) || (faxDispositionsForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)"\n                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\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>\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\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                                <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\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\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">\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\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">{{ 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">\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\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">{{ 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">\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">\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\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"><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"><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, removePlugins: \'magicline\' }"\n                                    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"><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">\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"><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">\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\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" required autofocus>\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>\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>\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">\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\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">\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\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">\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\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">\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>\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                </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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editFaxAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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 ng-if="vm_dc.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditFaxAccount($event, faxAccount)" md-cell class="id ">{{faxAccount.id}}</td>\n                                <td ng-click="vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="name ">{{faxAccount.name}}</td>\n                                <td ng-click="vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="key ">{{faxAccount.key}}</td>\n                                <td ng-click="vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="TrunkId ">{{ TrunkId = vm.trunks[faxAccount.TrunkId]; TrunkId.name }}</td>\n                                <td ng-click="vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="localstationid ">{{faxAccount.localstationid}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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}}"\n                    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 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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxQueues/edit/teamadd/teamadd.html",'<md-dialog class="faxQueue-dialog" aria-label="faxQueue">\n    <form name="faxQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="FAX.TEAMADD_FAXQUEUE">Add Team in 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    </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                        <span ng-if="vm.faxQueue.exten">{{vm.faxQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditFaxQueue($event, faxQueue)" md-cell class="id ">{{faxQueue.id}}</td>\n                                <td ng-click="vm.createOrEditFaxQueue($event, faxQueue)" md-cell class="name ">{{faxQueue.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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}}"\n                    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 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><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></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><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></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">\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.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}}"\n    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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'FAX.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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}}"\n    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">\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}}"\n    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">\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}}"\n    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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditDeskAccount($event, deskAccount)" md-cell class="id ">{{deskAccount.id}}</td>\n                                <td ng-click="vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="name ">{{deskAccount.name}}</td>\n                                <td ng-click="vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="remoteUri ">{{deskAccount.remoteUri}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="deskAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="deskAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.deskAccount.exten">{{vm.deskAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveDeskAccount()" 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\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>\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\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="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">\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\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="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">\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\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">\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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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/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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newFreshdeskAccount" ng-click="vm.saveFreshdeskAccount()" class="send-button md-accent md-raised" ng-disabled="freshdeskAccountForm.$invalid || freshdeskAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newFreshdeskConfiguration" ng-click="vm.saveFreshdeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="freshdeskConfigurationForm.$invalid || freshdeskConfigurationForm.$pristine" aria-label="SAVE"\n                    translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newFreshdeskConfiguration" ng-click="vm.addNewFreshdeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="freshdeskConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_FRESHDESKCONFIGURATION"\n                        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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="freshdeskAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="freshdeskAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.freshdeskAccount.exten">{{vm.freshdeskAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveFreshdeskAccount()" 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\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>\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\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                                <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\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                                <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\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                                <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\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                                <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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="id ">{{freshdeskAccount.id}}</td>\n                                <td ng-click="vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="name ">{{freshdeskAccount.name}}</td>\n                                <td ng-click="vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="username ">{{freshdeskAccount.username}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newSalesforceAccount" ng-click="vm.saveSalesforceAccount()" class="send-button md-accent md-raised" ng-disabled="salesforceAccountForm.$invalid || salesforceAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                <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\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newSalesforceConfiguration" ng-click="vm.saveSalesforceConfiguration()" class="send-button md-accent md-raised" ng-disabled="salesforceConfigurationForm.$invalid || salesforceConfigurationForm.$pristine" aria-label="SAVE"\n                    translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newSalesforceConfiguration" ng-click="vm.addNewSalesforceConfiguration()" class="send-button md-accent md-raised" ng-disabled="salesforceConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SALESFORCECONFIGURATION"\n                        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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="salesforceAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="salesforceAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.salesforceAccount.exten">{{vm.salesforceAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveSalesforceAccount()" 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\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>\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\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="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">\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\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                                <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\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">\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\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                                <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\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                                <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\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                                <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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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()">\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()">\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" 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="id ">{{salesforceAccount.id}}</td>\n                                <td ng-click="vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="name ">{{salesforceAccount.name}}</td>\n                                <td ng-click="vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="username ">{{salesforceAccount.username}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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/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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newSugarcrmAccount" ng-click="vm.saveSugarcrmAccount()" class="send-button md-accent md-raised" ng-disabled="sugarcrmAccountForm.$invalid || sugarcrmAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newSugarcrmConfiguration" ng-click="vm.addNewSugarcrmConfiguration()" class="send-button md-accent md-raised" ng-disabled="sugarcrmConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SUGARCRMCONFIGURATION"\n                        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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="sugarcrmAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="sugarcrmAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.sugarcrmAccount.exten">{{vm.sugarcrmAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveSugarcrmAccount()" 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\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>\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\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                                <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\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                                <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\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">\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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="id ">{{sugarcrmAccount.id}}</td>\n                                <td ng-click="vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="name ">{{sugarcrmAccount.name}}</td>\n                                <td ng-click="vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="username ">{{sugarcrmAccount.username}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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 ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newVtigerConfiguration" ng-click="vm.addNewVtigerConfiguration()" class="send-button md-accent md-raised" ng-disabled="vtigerConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_VTIGERCONFIGURATION"\n                        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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="vtigerAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="vtigerAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.vtigerAccount.exten">{{vm.vtigerAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveVtigerAccount()" 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\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>\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\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                                <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\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                                <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\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                                <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\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                                <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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="id ">{{vtigerAccount.id}}</td>\n                                <td ng-click="vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="name ">{{vtigerAccount.name}}</td>\n                                <td ng-click="vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="username ">{{vtigerAccount.username}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newZendeskAccount" ng-click="vm.saveZendeskAccount()" class="send-button md-accent md-raised" ng-disabled="zendeskAccountForm.$invalid || zendeskAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="zendeskAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="zendeskAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.zendeskAccount.exten">{{vm.zendeskAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveZendeskAccount()" 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\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>\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\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="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">\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\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                                <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\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="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">\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\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                                <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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newZendeskConfiguration" ng-click="vm.addNewZendeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="zendeskConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_ZENDESKCONFIGURATION"\n                        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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="id ">{{zendeskAccount.id}}</td>\n                                <td ng-click="vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="name ">{{zendeskAccount.name}}</td>\n                                <td ng-click="vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="username ">{{zendeskAccount.username}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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"\n                    translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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 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 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 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 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 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}}</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 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}}</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                            <md-select name="customField" ng-model="vm.customField" required>\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}</md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}</md-option>\n                                </md-optgroup>\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 required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n                        \x3c!-- CUSTOM FIELD --\x3e\n                        <div ng-if="vm.customField && vm.customField.custom" ng-include="\'/subject.html\'"></div>\n                        \x3c!-- / CUSTOM FIELD --\x3e\n                        \x3c!-- STANDARD FIELD --\x3e\n                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\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                            <div ng-messages="zohoAccountItemForm.option.$error" 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                        <md-input-container class="md-block" ng-if="vm.customField && !vm.customField.custom && !vm.customField.options.length">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <input type="text" name="option" ng-model="vm.item.content" required>\n                            <div ng-messages="zohoAccountItemForm.option.$error" 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                        \x3c!-- / STANDARD FIELD --\x3e\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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="/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" 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()" required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}</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 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.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                        <span ng-if="vm.zohoAccount.exten">{{vm.zohoAccount.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveZohoAccount()" 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\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>\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\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="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">\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\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                                <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\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                                <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\n                                </div>\n                            </md-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\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)" 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-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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-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>\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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 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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_cc.currentUser.role === \'admin\'">\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" 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditZohoAccount($event, zohoAccount)" md-cell class="id ">{{zohoAccount.id}}</td>\n                                <td ng-click="vm.createOrEditZohoAccount($event, zohoAccount)" md-cell class="name ">{{zohoAccount.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\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                        <span ng-if="vm.project.exten">{{vm.project.exten}}</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\n        <div ng-cloak>\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (builderForm.$invalid) || (previewForm.$invalid) || (sessionsForm.$invalid) || (answersForm.$invalid)" translate="JSCRIPTY.SAVE"\n                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\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 ng-disabled="true">\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\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.project.enableUncompleteSave" aria-label="EnableUncompleteSave"><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">\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\n                                </div>\n                            </md-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\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\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditProject($event, project)" md-cell class="id ">{{project.id}}</td>\n                                <td ng-click="vm.createOrEditProject($event, project)" md-cell class="name ">{{project.name}}</td>\n                                <td ng-click="vm.createOrEditProject($event, project)" md-cell class="description ">{{project.description}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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>\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 ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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" 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                <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\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                <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\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\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                <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">{{ 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                <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\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                <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                <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\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                <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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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" required autofocus>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents">{{ 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">\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">\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" required autofocus>\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, removePlugins: \'magicline\' }"\n                    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">\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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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">\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>\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">\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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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">\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>\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\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">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables">{{ 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">\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" required autofocus>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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                <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, removePlugins: \'magicline\' }"\n                    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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newMailCannedAnswer" ng-click="vm.saveMailCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="mailCannedAnswerForm.$invalid || mailCannedAnswerForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE"\n                    translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.mailAccount.exten">{{vm.mailAccount.exten}}</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\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (imapForm.$invalid) || (smtpForm.$invalid) || (mailDispositionsForm.$invalid) || (mailCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)"\n                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\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>\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\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                                <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\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\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                                <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>\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists">{{ 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"><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">\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, removePlugins: \'magicline\' }"\n                                    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"><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">\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">\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\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"><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"><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, removePlugins: \'magicline\' }"\n                                    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"><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">\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"><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">\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\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" required autofocus>\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">\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\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                                <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"><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"><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">\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\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">\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\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">\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">\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\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" required autofocus>\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">\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\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                                <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"><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"><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">\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\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.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editMailAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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 ng-if="vm_dc.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditMailAccount($event, mailAccount)" md-cell class="id ">{{mailAccount.id}}</td>\n                                <td ng-click="vm.createOrEditMailAccount($event, mailAccount)" md-cell class="name ">{{mailAccount.name}}</td>\n                                <td ng-click="vm.createOrEditMailAccount($event, mailAccount)" md-cell class="key ">{{mailAccount.key}}</td>\n                                <td ng-click="vm.createOrEditMailAccount($event, mailAccount)" md-cell class="email ">{{mailAccount.email}}</td>\n                                <td ng-click="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.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailQueues/edit/teamadd/teamadd.html",'<md-dialog class="mailQueue-dialog" aria-label="mailQueue">\n    <form name="mailQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MAIL.TEAMADD_MAILQUEUE">Add Team in 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    </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                        <span ng-if="vm.mailQueue.exten">{{vm.mailQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditMailQueue($event, mailQueue)" md-cell class="id ">{{mailQueue.id}}</td>\n                                <td ng-click="vm.createOrEditMailQueue($event, mailQueue)" md-cell class="name ">{{mailQueue.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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.editdialog(mailSubstatus, $event)" translate="MAIL.EDIT_MAILSUBSTATUS">\n                                                    Edit MailSubstatus\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\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"\n                    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 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><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></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><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></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>\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"\n    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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'MAIL.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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"\n    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">\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"\n    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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                        <span ng-if="vm.plugin.exten">{{vm.plugin.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.savePlugin()" 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\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>\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\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="true">\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\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">\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\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                                <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\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="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">\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\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                                <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\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="true">\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\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                                <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\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="true">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditPlugin($event, plugin)" md-cell class="name ">{{plugin.name}}</td>\n                                <td ng-click="vm.createOrEditPlugin($event, plugin)" md-cell class="type ">{{plugin.type}}</td>\n                                <td ng-click="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.createOrEditPlugin($event, plugin)" md-cell class="description ">{{plugin.description}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="!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>\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="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="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="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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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)"\n                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                <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\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">{{ 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">{{ 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">{{ 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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\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">\n            <div layout="row" layout-align="start center">\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="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.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="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.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">\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    </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                        <span ng-if="vm.ivrCampaign.exten">{{vm.ivrCampaign.exten}}</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\n        <div ng-cloak>\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>\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()" 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)"\n                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\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 ng-disabled="true">\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\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">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="TrunkBackupId.id" ng-repeat="TrunkBackupId in vm.trunks">{{ 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>\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval">{{ 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>\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">\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">\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\n                                </div>\n                            </md-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\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" required autofocus>\n                                    <md-option ng-value="SquareProjectId.id" ng-repeat="SquareProjectId in vm.projects">{{ 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">\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>\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\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">\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\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">\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">\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+$/">\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\n                                </div>\n                            </md-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\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>\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>\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">\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>\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">\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>\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">\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\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>\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>\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\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>\n                                    < <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEZONE"></span></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"><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">\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">\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">\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">\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">\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">\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">\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">\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">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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_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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                        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\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)">\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]"\n                        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\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)">\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>\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>\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>\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>\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>\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>\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>\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-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 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">\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_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]"\n                        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\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)">\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]"\n                        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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="id ">{{ivrCampaign.id}}</td>\n                                <td ng-click="vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="name ">{{ivrCampaign.name}}</td>\n                                <td ng-click="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.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="TrunkId ">{{ TrunkId = vm.trunks[ivrCampaign.TrunkId]; TrunkId.name }}</td>\n                                <td ng-click="vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="SquareProjectId ">{{ SquareProjectId = vm.projects[ivrCampaign.SquareProjectId]; SquareProjectId.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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                <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\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">{{ 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">{{ 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                <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                <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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.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.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    </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                <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\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">{{ 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">\n            <div layout="row" layout-align="start center">\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="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.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="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.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">\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    </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">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.TEAMADD_QUEUECAMPAIGN">Add Team 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            <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    </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                        <span ng-if="vm.queueCampaign.exten">{{vm.queueCampaign.exten}}</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\n        <div ng-cloak>\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>\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()" 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)"\n                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\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 ng-disabled="true">\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\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">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="TrunkBackupId.id" ng-repeat="TrunkBackupId in vm.trunks">{{ 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>\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval">{{ 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>\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">\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">\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\n                                </div>\n                            </md-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\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" required autofocus>\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">\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">\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">\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>\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\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                                <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>\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">\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">\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">\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">\n                                    <md-option ng-value="musiconhold.name" ng-repeat="musiconhold in vm.musiconholds">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject.name" ng-repeat="dialQueueProject in vm.projects">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject2.name" ng-repeat="dialQueueProject2 in vm.projects">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject.name" ng-repeat="dialQueueProject in vm.projects">{{ 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">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject2.name" ng-repeat="dialQueueProject2 in vm.projects">{{ 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"><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>\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\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">\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\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">\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">\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+$/">\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\n                                </div>\n                            </md-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\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>\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>\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">\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>\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">\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>\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">\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\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"><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">\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">\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">\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">\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">\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">\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">\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\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">\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">\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">\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">\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 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"><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">\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">\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">\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\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>\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"><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>\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\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>\n                                    < <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEZONE"></span></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"><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">\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">\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">\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">\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">\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">\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">\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">\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">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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_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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                        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\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)">\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]"\n                        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\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)">\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>\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>\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>\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>\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>\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>\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>\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-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 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">\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_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]"\n                        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\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)">\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]"\n                        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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="id ">{{queueCampaign.id}}</td>\n                                <td ng-click="vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="name ">{{queueCampaign.name}}</td>\n                                <td ng-click="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.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="TrunkId ">{{ TrunkId = vm.trunks[queueCampaign.TrunkId]; TrunkId.name }}</td>\n                                <td ng-click="vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="dialMethod ">{{ vm.arraydialMethod[queueCampaign.dialMethod].option }}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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]"\n                    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 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="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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\n                        <md-menu-content width="2">\n                            <md-menu-item>\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.disposition.length" ng-repeat="disposition in vm.disposition">\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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'MOTIONDIALER.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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]"\n    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">\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.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]"\n    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">\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            \x3c!-- <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.channelStatusClass[call.status.toLowerCase()]"></i>\n        </td>\n        <td md-cell>{{call.exten}}</td>\n        <td md-cell>{{call.queue}}</td>\n        <td md-cell><span ng-if="call.calleridname">{{call.calleridname}}, </span>{{call.calleridnum}}</td>\n        <td md-cell>\n          <span ng-if="call.queuecallerleaveAt">\n            {{call.connectedlinename}}, {{call.connectedlinenum}}\n            <span class="text-boxed">\n              <timer start-time="call.queuecallerleaveAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            </span>\n          </span>\n          <span ng-if="!call.queuecallerleaveAt" class="text-boxed" translate="MOTIONDIALER.WAITING_FOR_AGENT">\n            Waiting for agent...\n            <span class="text-boxed">\n              <timer start-time="call.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            </span>\n          </span>\n        </td>\n        <td md-cell>\n          <span class="text-boxed">\n            <timer ng-if="call.queuecallerjoinAt" start-time="call.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            <span ng-if="call.queuecallercomplete || call.queuecallerabandon || call.queuecallerexit" translate="MOTIONDIALER.CLOSING">Closing</span>\n          </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="2">\n              <md-menu-item>\n                <md-button ng-click="vm.hangup(call.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, call.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(call.uniqueid, agent.name)">{{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> --\x3e\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]"\n    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>{{\' MOTIONDIALER.NAME\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.TOTAL\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.TOTAL_OFFERED\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.MANAGED\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.ABANDONED\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.DROPPED\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.AVG_HOLD_TIME\' | translate}}</th>\n                <th md-column>{{\' MOTIONDIALER.AVG_DURATION\' | translate}}</th>\n                <th md-column>{{\' 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]"\n    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">\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]"\n    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                <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\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                <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\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\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                <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\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">{{ 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newOpenchannelAccount" ng-click="vm.saveOpenchannelAccount()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountForm.$invalid || openchannelAccountForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE"\n                    translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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">\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    </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" required autofocus>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents">{{ 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">\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">\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" required autofocus>\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" md-maxlength="255" 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 ng-message="md-maxlength">\n                        <span translate="OPENCHANNEL.ERRORS.TEXT_MAX_LENGTH" translate-values=\'{max: 255}\'>Text 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">\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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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">\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>\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">\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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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">\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>\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\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">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables">{{ 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">\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" required autofocus>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newOpenchannelCannedAnswer" ng-click="vm.saveOpenchannelCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="openchannelCannedAnswerForm.$invalid || openchannelCannedAnswerForm.$pristine" aria-label="SAVE"\n                    translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newOpenchannelCannedAnswer" ng-click="vm.addNewOpenchannelCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="openchannelCannedAnswerForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELCANNEDANSWER"\n                        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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newOpenchannelDisposition" ng-click="vm.saveOpenchannelDisposition()" class="send-button md-accent md-raised" ng-disabled="openchannelDispositionForm.$invalid || openchannelDispositionForm.$pristine" aria-label="SAVE"\n                    translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="vm.newOpenchannelDisposition" ng-click="vm.addNewOpenchannelDisposition()" class="send-button md-accent md-raised" ng-disabled="openchannelDispositionForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELDISPOSITION"\n                        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.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                        <span ng-if="vm.openchannelAccount.exten">{{vm.openchannelAccount.exten}}</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\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (proxyForm.$invalid) || (openchannelDispositionsForm.$invalid) || (openchannelCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)"\n                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\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 ng-disabled="true">\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\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                                <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\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\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                                <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\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">{{ 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">\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">\n                                    <md-option ng-value="\'\'">None</md-option>\n                                    <md-optgroup label="standard">\n                                        <md-option ng-value="mapKey.value" ng-repeat="mapKey in vm.attributes">{{ mapKey.option }}</md-option>\n                                    </md-optgroup>\n                                    <md-optgroup label="custom">\n                                        <md-option ng-value="mapKey.value" ng-repeat="mapKey in vm.customFields">{{ mapKey.option }}</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">\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\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"><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"><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, removePlugins: \'magicline\' }"\n                                    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"><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">\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"><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">\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\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 ng-disabled="true">\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\n                                </div>\n                            </md-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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                                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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                                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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editOpenchannelAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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 ng-if="vm_dc.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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]"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="id ">{{openchannelAccount.id}}</td>\n                                <td ng-click="vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="name ">{{openchannelAccount.name}}</td>\n                                <td ng-click="vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="key ">{{openchannelAccount.key}}</td>\n                                <td ng-click="vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="replyUri ">{{openchannelAccount.replyUri}}</td>\n                                <td ng-click="vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="ListId ">{{ ListId = vm.lists[openchannelAccount.ListId]; ListId.name }}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.newOpenchannelQueue" ng-click="vm.saveOpenchannelQueue()" class="send-button md-accent md-raised" ng-disabled="openchannelQueueForm.$invalid || openchannelQueueForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE"\n                    translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                    </md-button>\n\n                    <md-button type="submit" ng-if="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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelQueues/edit/teamadd/teamadd.html",'<md-dialog class="openchannelQueue-dialog" aria-label="openchannelQueue">\n    <form name="openchannelQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="OPENCHANNEL.TEAMADD_OPENCHANNELQUEUE">Add Team in 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    </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                        <span ng-if="vm.openchannelQueue.exten">{{vm.openchannelQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditOpenchannelQueue($event, openchannelQueue)" md-cell class="id ">{{openchannelQueue.id}}</td>\n                                <td ng-click="vm.createOrEditOpenchannelQueue($event, openchannelQueue)" md-cell class="name ">{{openchannelQueue.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'OPENCHANNEL.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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"\n    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">\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"\n    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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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) || (customizationsForm.$invalid || logoForm.$invalid || logologinForm.$invalid)" class="send-button md-accent md-raised"\n                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                        <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\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                        <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\n                        </div>\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()"\n                        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()"\n                    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>\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                <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                <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                <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\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                <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\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                <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\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                <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\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                <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                <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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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)"\n                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                        <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                        <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                        <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\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                        <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\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                        <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\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                        <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\n                        </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                        <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\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                        <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                        <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                        <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" required autofocus>\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])$/"\n                    ng-required="true">\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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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-if="!vm.newNetwork" 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-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\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 ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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                <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\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                <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                <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\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                <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                <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\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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <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\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                        <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                        <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\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                        <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                        <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\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                        <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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'SMS.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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}}"\n    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">\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}}"\n    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                <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\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                <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\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\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                <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\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\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">{{ 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.PHONE">Phone</label>\n                <input type="text" name="phone" ng-model="vm.smsAccount.phone" ng-required="true">\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\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-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 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                <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\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                <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\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                <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\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="\'basic\'">Basic</md-option>\n                    <md-option ng-value="\'classic\'">Classic</md-option>\n                    <md-option ng-value="\'classic+\'">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\'" 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                <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\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\'">\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 class="md-block">\n                <label translate="SMS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.smsAccount.description">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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" required autofocus>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents">{{ 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">\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">\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" required autofocus>\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" md-maxlength="255" 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 ng-message="md-maxlength">\n                        <span translate="SMS.ERRORS.TEXT_MAX_LENGTH" translate-values=\'{max: 255}\'>Text 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">\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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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">\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>\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">\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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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>\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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">\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>\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\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">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables">{{ 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">\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" required autofocus>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.smsAccount.exten">{{vm.smsAccount.exten}}</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\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()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (proxyForm.$invalid) || (smsDispositionsForm.$invalid) || (smsCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)"\n                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\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 ng-disabled="true">\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\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                                <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\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\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">{{ 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.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.smsAccount.phone" ng-required="true">\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\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-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 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                                <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\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                                <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\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                                <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\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="\'basic\'">Basic</md-option>\n                                    <md-option ng-value="\'classic\'">Classic</md-option>\n                                    <md-option ng-value="\'classic+\'">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\'" 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                                <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\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\'">\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 == \'skebby\' && vm.smsAccount.smsMethod == \'classic+\') || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'plivo\'" 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">\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\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\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.smsAccount.type == \'skebby\' && vm.smsAccount.smsMethod == \'classic+\') || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\'" class="md-block">\n                                <md-switch ng-model="vm.smsAccount.deliveryReport" aria-label="deliveryReport"><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">\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">\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\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 == \'classic+\') || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\' ) && 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" 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"><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"><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, removePlugins: \'magicline\' }"\n                                    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"><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">\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"><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">\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\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 ng-disabled="true">\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\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                                <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\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\n                                </div>\n                            </md-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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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.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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editSmsAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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 ng-if="vm_dc.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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="phone">{{ \'SMS.PHONE\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'SMS.TYPE\' | 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.createOrEditSmsAccount($event, smsAccount)" md-cell class="id ">{{smsAccount.id}}</td>\n                                <td ng-click="vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="name ">{{smsAccount.name}}</td>\n                                <td ng-click="vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="key ">{{smsAccount.key}}</td>\n                                <td ng-click="vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="ListId ">{{ ListId = vm.lists[smsAccount.ListId]; ListId.name }}</td>\n                                <td ng-click="vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="phone ">{{smsAccount.phone}}</td>\n                                <td ng-click="vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="type ">{{ vm.arraytype[smsAccount.type].option }}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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}}"\n                    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 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                <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\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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsQueues/edit/teamadd/teamadd.html",'<md-dialog class="smsQueue-dialog" aria-label="smsQueue">\n    <form name="smsQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="SMS.TEAMADD_SMSQUEUE">Add Team in 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    </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                        <span ng-if="vm.smsQueue.exten">{{vm.smsQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditSmsQueue($event, smsQueue)" md-cell class="id ">{{smsQueue.id}}</td>\n                                <td ng-click="vm.createOrEditSmsQueue($event, smsQueue)" md-cell class="name ">{{smsQueue.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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}}"\n                    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 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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="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="7">\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.createOrEditAgent($event, agent)" md-cell class="fullname font-weight-600">{{agent.fullname}}</td>\n                                <td ng-click="vm.createOrEditAgent($event, agent)" md-cell class="name ">{{agent.name}}</td>\n                                <td ng-click="vm.createOrEditAgent($event, agent)" md-cell class="email ">{{agent.email}}</td>\n                                <td ng-click="vm.createOrEditAgent($event, agent)" md-cell class="phone ">{{agent.phone}}</td>\n                                <td ng-click="vm.createOrEditAgent($event, agent)" md-cell class="mobile ">{{agent.mobile}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\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                <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\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                <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">\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 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 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                <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\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                <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\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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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">\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.isVoiceChannel()">\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    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",'<md-dialog class="agent-dialog" aria-label="agent">\n    <form name="agentForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="STAFF.TEAMADD_AGENT">Add Team in AGENT</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/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                        <span ng-if="vm.agent.exten">{{vm.agent.exten}}</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\n        <div ng-cloak ng-if="vm.agent.role !== \'admin\'">\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>\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()" 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)"\n                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\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>\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\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="true">\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\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                                <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\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                                <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">\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\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">\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\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="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                                <md-switch ng-model="vm.agent.loginInPause" aria-label="LoginInPause"><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">\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\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 ng-disabled="true">\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\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" ng-disabled="true">\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\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)" 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()"\n                                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>\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\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 ng-disabled="true">\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\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>\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">\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\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" required multiple>\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">\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" required multiple>\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-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">\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\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>\n                            <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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">\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\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.agent.chanspy" aria-label="chanSpy"><span translate="STAFF.CHANSPY">chanSpy</span></md-switch>\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>\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\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>\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">\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">\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">\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">\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\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"><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"><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">\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"><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"><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"><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"><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"><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"><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.phoneBarPrefixRequired" aria-label="PrefixRequired"><span translate="STAFF.PREFIXREQUIRED">PrefixRequired</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"><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"><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                        <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>\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">\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"><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">\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\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\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>\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\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">\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\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.agent.phoneBarEnableSettings" aria-label="EnableSettings"><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"><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">\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"><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"><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>\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\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"><span translate="STAFF.ENABLEMESSENGER">EnableMessenger</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)" 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)"></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-button ng-if="vm_pc.allowPermissions(child)" ng-disabled="!father.enabled || !child.enabled" class="md-fab md-mini md-primary" aria-label="Permissions" ng-click="vm_pc.addPermissions(child)">\n                                    <md-icon md-font-icon="icon-eye"></md-icon>\n                                </md-button>\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)"></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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\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                <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">\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                <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\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                <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\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.telephone.exten">{{vm.telephone.exten}}</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\n        <div ng-cloak>\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()" 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\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>\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\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="true">\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\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                                <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">\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\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">\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\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">\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\n                                </div>\n                            </md-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\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 ng-disabled="true">\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\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" required multiple>\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" required multiple>\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" required multiple>\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-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">\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\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>\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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">\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\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditTelephone($event, telephone)" md-cell class="fullname font-weight-600">{{telephone.fullname}}</td>\n                                <td ng-click="vm.createOrEditTelephone($event, telephone)" md-cell class="name ">{{telephone.name}}</td>\n                                <td ng-click="vm.createOrEditTelephone($event, telephone)" md-cell class="email ">{{telephone.email}}</td>\n                                <td ng-click="vm.createOrEditTelephone($event, telephone)" md-cell class="internal ">{{telephone.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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/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" required autofocus 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 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                <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\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                <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\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                <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">\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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/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/permissionadd/permissionadd.html",'<md-dialog class="user-dialog" aria-label="user">\n    <form name="userForm" 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            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/users/edit/queueadd/queueadd.html",'<md-dialog class="user-dialog" aria-label="user">\n    <form name="userForm" 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.user.role === \'agent\' && vm.isVoiceChannel()">\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="userForm.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    </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                        <span ng-if="vm.user.exten">{{vm.user.exten}}</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\n        <div ng-cloak>\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()" class="send-button md-accent md-raised" ng-disabled="(personal_infoForm.$invalid) || (security_suiteForm.$invalid) || (change_avatarForm.$invalid) || (generalForm.$invalid) || (general_permissionsForm.$invalid) || (permissionsForm.$invalid)"\n                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\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" required autofocus ng-disabled="true">\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 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                                <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\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="true">\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\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                                <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">\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\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">\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\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">\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\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 ng-disabled="true">\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\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" ng-disabled="true">\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\n                                </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)" 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()"\n                                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>\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\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 ng-disabled="true">\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\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" required multiple>\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" required multiple>\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" required multiple>\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-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>\n                            <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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">\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\n                        </div>\n                    </md-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\n        <md-tab-body>\n            <div ng-if="vm.currentUser.role === \'admin\' && vm.user.role !== \'admin\'" class="user-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                        <label translate="STAFF.EDITPERMISSIONS">EditPermissions</label>\n                        <md-select name="crudPermissions" ng-model="vm.user.crudPermissions" autofocus>\n\n                            <md-option ng-value="0"> {{ \'STAFF.READANDEDITANDDELETE\' | translate }}</md-option>\n\n                            <md-option ng-value="1"> {{ \'STAFF.READANDEDIT\' | translate }}</md-option>\n                        </md-select>\n                        <div ng-messages="general_permissionsForm[\'crudPermissions\'].$error" ng-show="general_permissionsForm[\'crudPermissions\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="STAFF.ERRORS.EDITPERMISSIONS_REQUIRED">EditPermissions field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="user-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="UserPermissionsController as vm_pc" ng-init="vm_pc.init(vm.user)" class="user-detail-form-container">\n                    <md-list ng-repeat="father in vm_pc.navigation[0].children" ng-include="\'permission-nested.html\'" ng-if="vm_pc.user.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.user.permissions.includes(father.id)"></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-button ng-if="vm_pc.allowPermissions(child)" ng-disabled="!father.enabled || !child.enabled" class="md-fab md-mini md-primary" aria-label="Permissions" ng-click="vm_pc.addPermissions(child)">\n                                    <md-icon md-font-icon="icon-eye"></md-icon>\n                                </md-button>\n                                <md-switch ng-model="child.enabled" ng-change="vm_pc.onChange(father, child)" ng-init="child.enabled = vm_pc.user.permissions.includes(child.id)"></md-switch>\n                            </md-list-item>\n                        </md-list>\n                    <\/script>\n                    \x3c!-- / Nested navigation template --\x3e\n\n                    <span ng-if="vm_pc.user.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/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="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="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="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.createOrEditUser($event, user)" md-cell class="role ">{{ vm.arrayrole[user.role].option }}</td>\n                                <td ng-click="vm.createOrEditUser($event, user)" md-cell class="fullname font-weight-600">{{user.fullname}}</td>\n                                <td ng-click="vm.createOrEditUser($event, user)" md-cell class="name ">{{user.name}}</td>\n                                <td ng-click="vm.createOrEditUser($event, user)" md-cell class="email ">{{user.email}}</td>\n                                <td ng-click="vm.createOrEditUser($event, user)" md-cell class="phone ">{{user.phone}}</td>\n                                <td ng-click="vm.createOrEditUser($event, user)" md-cell class="mobile ">{{user.mobile}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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 ng-if="vm.currentUser.role === \'admin\' && user.id !== vm.currentUser.id">\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"\n                    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 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditCustomDashboard($event, customDashboard)" md-cell class="id ">{{customDashboard.id}}</td>\n                                <td ng-click="vm.createOrEditCustomDashboard($event, customDashboard)" md-cell class="name ">{{customDashboard.name}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.role == \'admin\'">\n                                                <md-button ng-click="vm.useradddialog(customDashboard, $event)" translate="TOOLS.USERADD_CUSTOMDASHBOARD">\n                                                    useradd CustomDashboard\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\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                <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\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\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                <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\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                <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\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                <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\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.REFRESH">Refresh</label>\n                <input type="number" name="attrRefresh" ng-model="vm.dashboarditem.attrRefresh" min="5" ng-required="true">\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="vm.dashboarditem.type == \'web-report\'" class="md-block">\n                <label translate="TOOLS.REPORT">Report</label>\n                <md-select name="attrReport" ng-model="vm.dashboarditem.attrReport" required>\n                    <md-option ng-value="attrReport.id" ng-repeat="attrReport in vm.customReports">{{ attrReport.name }}</md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrReport\'].$error" ng-show="dashboarditemForm[\'attrReport\'].$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="[\'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">{{ 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                <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"\n                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"\n                    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                        <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\n                        </div>\n                    </md-input-container>\n\n                    <div class="error-list">\n                        <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                            <div>\n                                <span class="message">{{error.message}}</span>\n                                <span class="type">({{error.type}})</span>\n                            </div>\n                            <md-button class="md-icon-button">\n                                <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                            </md-button>\n                        </div>\n                    </div>\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.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.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.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/useradd/useradd.html",'<md-dialog class="customDashboard-dialog" aria-label="customDashboard">\n    <form name="customDashboardForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="TOOLS.USERADD_CUSTOMDASHBOARD">Add User to customDashboard</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/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                        <span ng-if="vm.customDashboard.exten">{{vm.customDashboard.exten}}</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\n        <div ng-cloak>\n            <md-button ng-click="vm.useradddialog(vm.customDashboard, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="useradd" ng-if="vm.currentUser.role == \'admin\'">\n                <md-tooltip><span translate="TOOLS.USERADD_CUSTOMDASHBOARD"></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.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()" 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\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>\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\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                                <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\n                                </div>\n                            </md-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\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)" 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()" 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/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                <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\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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" 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" 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.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}}" 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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.interval.exten">{{vm.interval.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveInterval()" 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\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>\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\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                                <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\n                                </div>\n                            </md-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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditInterval($event, interval)" md-cell class="id ">{{interval.id}}</td>\n                                <td ng-click="vm.createOrEditInterval($event, interval)" md-cell class="name ">{{interval.name}}</td>\n                                <td ng-click="vm.createOrEditInterval($event, interval)" md-cell class="description ">{{interval.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.REPORTTYPE">ReportType</label>\n                <md-select name="type" ng-model="vm.schedule.type" required>\n                    <md-option ng-value="\'default\'">Default</md-option>\n                    <md-option ng-value="\'custom\'">Custom</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'type\'].$error" ng-show="scheduleForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.REPORTTYPE_REQUIRED">ReportType field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.type == \'default\'" class="md-block">\n                <label translate="TOOLS.REPORT">Report</label>\n                <md-select name="DefaultReportId" ng-model="vm.schedule.DefaultReportId" required>\n                    <md-option ng-value="DefaultReportId.id" ng-repeat="DefaultReportId in vm.defaultReports">{{ DefaultReportId.name }}</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'DefaultReportId\'].$error" ng-show="scheduleForm[\'DefaultReportId\'].$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.schedule.type == \'custom\'" class="md-block">\n                <label translate="TOOLS.REPORT">Report</label>\n                <md-select name="CustomReportId" ng-model="vm.schedule.CustomReportId" required>\n                    <md-option ng-value="CustomReportId.id" ng-repeat="CustomReportId in vm.customReports">{{ CustomReportId.name }}</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'CustomReportId\'].$error" ng-show="scheduleForm[\'CustomReportId\'].$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                <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">{{ 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                <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\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                <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\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                <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\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                <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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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/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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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)"\n                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                <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\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                <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\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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, removePlugins: \'magicline\' }"\n                    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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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" required autofocus 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\'"> {{ \'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                </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">{{ 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">{{ 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                <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\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" required>\n                    <md-option ng-value="\'zendesk\'">Zendesk</md-option>\n                    <md-option ng-value="\'salesforce\'">Salesforce</md-option>\n                    <md-option ng-value="\'sugarcrm\'">SugarCRM</md-option>\n                    <md-option ng-value="\'freshdesk\'">Freshdesk</md-option>\n                    <md-option ng-value="\'desk\'">Desk</md-option>\n                    <md-option ng-value="\'zoho\'">Zoho</md-option>\n                    <md-option ng-value="\'vtiger\'">vTiger</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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.zendeskAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.deskAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.zohoAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.salesforceAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.sugarcrmAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.freshdeskAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.vtigerAccounts">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.zendeskConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.deskConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.zohoConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.salesforceConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.sugarcrmConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.freshdeskConfigurations | filter:{AccountId:vm.action.data2}">{{ 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>\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.vtigerConfigurations | filter:{AccountId:vm.action.data2}">{{ 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                <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\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                <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\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                <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\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">{{ 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">{{ 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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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" required autofocus>\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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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" required autofocus>\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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">{{ 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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.trigger.exten">{{vm.trigger.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveTrigger()" 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\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>\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\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="true">\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"><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                                <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\n                                </div>\n                            </md-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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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>{{ value = vm_dc.chatAccounts[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'mail\' && allCondition.field == \'account\'" md-cell>{{ value = vm_dc.mailAccounts[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'sms\' && allCondition.field == \'account\'" md-cell>{{ value = vm_dc.smsAccounts[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'fax\' && allCondition.field == \'account\'" md-cell>{{ value = vm_dc.faxAccounts[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'openchannel\' && allCondition.field == \'account\'" md-cell>{{ value = vm_dc.openchannelAccounts[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'queue\'" md-cell>{{ value = vm_dc.queues[allCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'routeId\'" md-cell>{{ value = vm_dc.outboundRoutes[allCondition.value]; value.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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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>{{ value = vm_dc.chatAccounts[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'mail\' && anyCondition.field == \'account\'" md-cell>{{ value = vm_dc.mailAccounts[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'sms\' && anyCondition.field == \'account\'" md-cell>{{ value = vm_dc.smsAccounts[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'fax\' && anyCondition.field == \'account\'" md-cell>{{ value = vm_dc.faxAccounts[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'openchannel\' && anyCondition.field == \'account\'" md-cell>{{ value = vm_dc.openchannelAccounts[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'queue\'" md-cell>{{ value = vm_dc.queues[anyCondition.value]; value.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'routeId\'" md-cell>{{ value = vm_dc.outboundRoutes[anyCondition.value]; value.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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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>{{ data1 = vm_dc.projects[action.data1]; data1.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>{{ data1 = vm_dc.lists[action.data1]; data1.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.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>{{ data2 = vm_dc.zendeskAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'desk\'" md-cell>{{ data2 = vm_dc.deskAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'zoho\'" md-cell>{{ data2 = vm_dc.zohoAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'salesforce\'" md-cell>{{ data2 = vm_dc.salesforceAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'sugarcrm\'" md-cell>{{ data2 = vm_dc.sugarcrmAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'freshdesk\'" md-cell>{{ data2 = vm_dc.freshdeskAccounts[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'vtiger\'" md-cell>{{ data2 = vm_dc.vtigerAccounts[action.data2]; data2.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>{{ data2 = vm_dc.templates[action.data2]; data2.name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'browser\' && action.data1 == \'0\'" md-cell>{{ data2 = vm_dc.templates[action.data2]; data2.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">\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>\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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="39">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditTrigger($event, trigger)" md-cell class="id ">{{trigger.id}}</td>\n                                <td ng-click="vm.createOrEditTrigger($event, trigger)" md-cell class="name ">{{trigger.name}}</td>\n                                <td ng-click="vm.createOrEditTrigger($event, trigger)" md-cell class="channel ">{{ \'TOOLS.\' + vm.arraychannel[trigger.channel].option | uppercase | translate }}</td>\n                                <td ng-click="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.createOrEditTrigger($event, trigger)" md-cell class="description ">{{trigger.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\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                <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\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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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\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                        <span ng-if="vm.trunk.exten">{{vm.trunk.exten}}</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\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>\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()" 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\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 ng-disabled="true">\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\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                                <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\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">\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\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>\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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>\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>\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" required multiple>\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>\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" required multiple>\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-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" required multiple>\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">\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">\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\n                                </div>\n                            </md-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\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>\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\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>\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>\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">\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\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">\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\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">\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\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>\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>\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>\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>\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">\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" required multiple>\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">\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\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditTrunk($event, trunk)" md-cell class="id ">{{trunk.id}}</td>\n                                <td ng-click="vm.createOrEditTrunk($event, trunk)" md-cell class="name ">{{trunk.name}}</td>\n                                <td ng-click="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.createOrEditTrunk($event, trunk)" md-cell class="host ">{{trunk.host}}</td>\n                                <td ng-click="vm.createOrEditTrunk($event, trunk)" md-cell class="registry ">{{trunk.registry}}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.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.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">\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.editdialog(chanSpy, $event)" translate="VOICE.EDIT_CHANSPY">\n                                                    Edit chanSpy\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\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" required multiple>\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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">\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.editdialog(context, $event)" translate="VOICE.EDIT_CONTEXT">\n                                                    Edit Context\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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                <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\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">{{ 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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" required autofocus>\n                    <md-option ng-value="\'agi://127.0.0.1/square,{{project.name}}\'" ng-repeat="project in vm.projects">{{ 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">\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>\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks">{{ 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">\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\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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\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">\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" required autofocus>\n                    <md-option ng-value="\'SIP/{{user.name}}\'" ng-repeat="user in vm.users">{{ 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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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" required autofocus>\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}\'" ng-repeat="appdata in vm.sounds">{{ 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">\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\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.playback.answer" aria-label="Answer"><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">\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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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\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">\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\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">\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">{{ 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">\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">\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\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">\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\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">\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\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">\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\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">\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"><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">\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" required autofocus multiple>\n                    <md-option ng-value="\'SIP/{{multipleUsers.name}}\'" ng-repeat="multipleUsers in vm.users">{{ 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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="name.name" ng-repeat="name in vm.variables">{{ 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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="\'{{voiceMail.mailbox}}@from-voicemail\'" ng-repeat="voiceMail in vm.voiceMails">{{ 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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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                        <span ng-if="vm.inboundroute.exten">{{vm.inboundroute.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveInboundRoute()" 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\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>\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\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">{{ 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">\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\n                                </div>\n                            </md-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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editInboundRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditInboundRoute($event, inboundroute)" md-cell class="id ">{{inboundroute.id}}</td>\n                                <td ng-click="vm.createOrEditInboundRoute($event, inboundroute)" md-cell class="exten ">{{inboundroute.exten}}</td>\n                                <td ng-click="vm.createOrEditInboundRoute($event, inboundroute)" md-cell class="description ">{{inboundroute.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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">{{ 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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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" required autofocus>\n                    <md-option ng-value="\'agi://127.0.0.1/square,{{project.name}}\'" ng-repeat="project in vm.projects">{{ 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">\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>\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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>\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\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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks">{{ 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">\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\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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\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">\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" required autofocus>\n                    <md-option ng-value="\'SIP/{{user.name}}\'" ng-repeat="user in vm.users">{{ 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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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" required autofocus>\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}\'" ng-repeat="appdata in vm.sounds">{{ 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">\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\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.playback.answer" aria-label="Answer"><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">\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" required autofocus>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues">{{ 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">\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\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">\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\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">\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">{{ 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">\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">\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\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">\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\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">\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\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">\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\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">\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"><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">\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" required autofocus multiple>\n                    <md-option ng-value="\'SIP/{{multipleUsers.name}}\'" ng-repeat="multipleUsers in vm.users">{{ 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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="name.name" ng-repeat="name in vm.variables">{{ 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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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" required autofocus>\n                    <md-option ng-value="\'{{voiceMail.mailbox}}@from-voicemail\'" ng-repeat="voiceMail in vm.voiceMails">{{ 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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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                        <span ng-if="vm.internalroute.exten">{{vm.internalroute.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveInternalRoute()" 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\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>\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\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">{{ 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">\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\n                                </div>\n                            </md-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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editInternalRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditInternalRoute($event, internalroute)" md-cell class="id ">{{internalroute.id}}</td>\n                                <td ng-click="vm.createOrEditInternalRoute($event, internalroute)" md-cell class="exten ">{{internalroute.exten}}</td>\n                                <td ng-click="vm.createOrEditInternalRoute($event, internalroute)" md-cell class="description ">{{internalroute.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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                <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\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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">{{ 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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.musiconhold.exten">{{vm.musiconhold.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveMusicOnHold()" 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\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 ng-disabled="true">\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\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="true">\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">\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">\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\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="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\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)">\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 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditMusicOnHold($event, musiconhold)" md-cell class="id ">{{musiconhold.id}}</td>\n                                <td ng-click="vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="name ">{{musiconhold.name}}</td>\n                                <td ng-click="vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="mode ">{{ \'VOICE.\' + vm.arraymode[musiconhold.mode].option | uppercase | translate }}</td>\n                                <td ng-click="vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="sort ">{{ \'VOICE.\' + vm.arraysort[musiconhold.sort].option | uppercase | translate }}</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.editstate(musiconhold, $event)" translate="VOICE.EDIT_MUSICONHOLD">\n                                                    Edit MusicOnHold\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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">{{ 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                <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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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>\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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">\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">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals.rows">{{ 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">\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" 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">\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">\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">\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">\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">\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">\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" 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" 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" required autofocus>\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks">{{ 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-pattern="/&quot;(.*)&quot;\\s&lt;(.*?)&gt;$/">\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 ng-message="pattern">\n                        <span translate="VOICE.ERRORS.CALLER_ID_MUST_VALID_PATTERN" translate-values="{ regex: \'/&quot;(.*)&quot;\\s&lt;(.*?)&gt;$/\' }">Caller_ID must be valid pattern </span>\n                    </div>\n\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">\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\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">\n                    <md-option ng-value="\'--\'">None</md-option>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags">{{ 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">\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">\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\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">\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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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                        <span ng-if="vm.outboundroute.exten">{{vm.outboundroute.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveOutboundRoute()" 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\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>\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\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">{{ 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>\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">\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">\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\n                                </div>\n                            </md-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\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)" 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">\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="75">\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'" 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">\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_ac.editOutboundRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm_ac.currentUser.role === \'admin\'">\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditOutboundRoute($event, outboundroute)" md-cell class="id ">{{outboundroute.id}}</td>\n                                <td ng-click="vm.createOrEditOutboundRoute($event, outboundroute)" md-cell class="exten ">{{outboundroute.exten}}</td>\n                                <td ng-click="vm.createOrEditOutboundRoute($event, outboundroute)" md-cell class="description ">{{outboundroute.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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="refresh Contacts" translate translate-attr-label="DASHBOARDS.REFRESH_CONTACTS">\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\n                        <md-menu-content width="2">\n                            <md-menu-item>\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.disposition.length" ng-repeat="disposition in vm.disposition">\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        \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        <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="3">{{ \'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                \x3c!-- <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSE\' | translate }}</th>\n                <th md-column width="10px"></th> --\x3e\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="globalStatusTime">{{ \'VOICE.TIMER\' | 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].globalStatusTime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class="bt bl">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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\',\'talking\':\'indigo-100-bg\',\'ringing\':\'orange-400-bg\',\'pause\':\'amber-200-bg\'}[vm.agents[value].voiceStatus]">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        </div>\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                \x3c!-- <td class="bt">--</td>\n                <td class="bt">--</td> --\x3e\n                <td class="bt bl" ng-if="vm.license.chat">\n                    <div layout="row">\n                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                \x3c!-- <td class="bt padding-5 text-center">{{ agent.chatCurrentCapacity }}/{{ agent.chatCapacity > 0 ? agent.chatCapacity : \'∞\' }}</td> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">5</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">10</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">4</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">89</span>\n              </div>\n            </div> --\x3e\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                        \x3c!-- <div class="column">\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon></span>\n                <span class="md-capture green-fg">7</span>\n              </div>\n              <div class="row">\n                <span><md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon></span>\n                <span class="md-capture blue-fg">2</span>\n              </div>\n            </div> --\x3e\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">\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"\n    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"><timer ng-if="call.answertime" start-time="call.answertime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer></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"\n    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">\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            \x3c!-- <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.channelStatusClass[call.status.toLowerCase()]"></i>\n        </td>\n        <td md-cell>{{call.exten}}</td>\n        <td md-cell>{{call.queue}}</td>\n        <td md-cell><span ng-if="call.calleridname">{{call.calleridname}}, </span>{{call.calleridnum}}</td>\n        <td md-cell>\n          <span ng-if="call.queuecallerleaveAt">\n            {{call.connectedlinename}}, {{call.connectedlinenum}}\n            <span class="text-boxed">\n              <timer start-time="call.queuecallerleaveAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            </span>\n          </span>\n          <span ng-if="!call.queuecallerleaveAt" class="text-boxed" translate="VOICE.WAITING_FOR_AGENT">\n            Waiting for agent...\n            <span class="text-boxed">\n              <timer start-time="call.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            </span>\n          </span>\n        </td>\n        <td md-cell>\n          <span class="text-boxed">\n            <timer ng-if="call.queuecallerjoinAt" start-time="call.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            <span ng-if="call.queuecallercomplete || call.queuecallerabandon || call.queuecallerexit" translate="VOICE.CLOSING">Closing</span>\n          </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="2">\n              <md-menu-item>\n                <md-button ng-click="vm.hangup(call.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, call.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(call.uniqueid, agent.name)">{{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> --\x3e\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]"\n    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>{{\' VOICE.NAME\' | translate}}</th>\n                <th md-column>{{\' VOICE.TOTAL_OFFERED\' | translate}}</th>\n                <th md-column>{{\' VOICE.ANSWERED\' | translate}}</th>\n                <th md-column>{{\' VOICE.ABANDONED\' | translate}}</th>\n                <th md-column>{{\' VOICE.UNMANAGED\' | translate}}</th>\n                <th md-column>{{\' VOICE.AVG_HOLD_TIME\' | translate}}</th>\n                <th md-column>{{\' VOICE.AVG_DURATION\' | translate}}</th>\n                <th md-column>{{\' 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                    <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.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.total - queue.answered - queue.unmanaged) || 0}} ({{(queue.total) ? ((queue.total - queue.answered - queue.unmanaged) || 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 / 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]"\n    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">\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"\n    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"\n    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">\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"\n    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                <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\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                <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">\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                <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\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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                        <span ng-if="vm.voicemail.exten">{{vm.voicemail.exten}}</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\n        <div>\n            <md-button type="submit" ng-click="vm.saveVoicemail()" 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\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>\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\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                                <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">\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" ng-disabled="true">\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\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>\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ 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\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>\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\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="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">\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">\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">\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\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">\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\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">\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">\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\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)">\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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'" 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.currentUser.crudPermissions === 0 || vm_dc.currentUser.role === \'admin\'">\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"\n                                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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditVoicemail($event, voicemail)" md-cell class="id ">{{voicemail.id}}</td>\n                                <td ng-click="vm.createOrEditVoicemail($event, voicemail)" md-cell class="fullname ">{{voicemail.fullname}}</td>\n                                <td ng-click="vm.createOrEditVoicemail($event, voicemail)" md-cell class="email ">{{voicemail.email}}</td>\n                                <td ng-click="vm.createOrEditVoicemail($event, voicemail)" md-cell class="mailbox ">{{voicemail.mailbox}}</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.editstate(voicemail, $event)" translate="VOICE.EDIT_VOICEMAIL">\n                                                    Edit Voicemail\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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">{{ 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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 ">{{ VoiceExtensionId = vm.outboundRoutes[voicePrefix.VoiceExtensionId]; VoiceExtensionId.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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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                <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\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                <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\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\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.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.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.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">\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    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voiceQueues/edit/teamadd/teamadd.html",'<md-dialog class="voiceQueue-dialog" aria-label="voiceQueue">\n    <form name="voiceQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="VOICE.TEAMADD_VOICEQUEUE">Add Team in 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    </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                        <span ng-if="vm.voiceQueue.exten">{{vm.voiceQueue.exten}}</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\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()" 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\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 ng-disabled="true">\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\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="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">\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">\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">\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">\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">\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>\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\'">unknoww</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>\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\'">unknoww</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">\n                                    <md-option ng-value="musiconhold.name" ng-repeat="musiconhold in vm.musiconholds">{{ 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">\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">{{ 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">\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\n                                </div>\n                            </md-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\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>\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">\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">\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">\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">\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">\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">\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">\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>\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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">\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">{{ 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\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"><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">\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">\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">\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">\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">\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">\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">\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\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">\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">\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">\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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="id ">{{voiceQueue.id}}</td>\n                                <td ng-click="vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="name ">{{voiceQueue.name}}</td>\n                                <td ng-click="vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="strategy ">{{ vm.arraystrategy[voiceQueue.strategy].option }}</td>\n                                <td ng-click="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\n                                        <md-menu-content width="3">\n                                            <md-menu-item>\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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 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>\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">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!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.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.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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'" 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></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\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.currentUser.crudPermissions === 0 || vm.currentUser.role === \'admin\'">\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"\n                    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">\n</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">\n                <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</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</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">{{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">{{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"\n                    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"\n                    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">{{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">{{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" 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 class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <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 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            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" style="padding-right: 16px;">\n            <md-button type="submit" ng-disabled="vm.disable" ng-click="vm.originatePreview($event)" class="send-button md-accent md-raised" aria-label="CALL" translate="TOOLS.CALL" translate-attr-aria-label="TOOLS.CALL">\n                CALL\n            </md-button>\n            <md-button type="submit" ng-disabled="vm.disableGetContact" ng-click="vm.nextContact($event)" class="send-button md-accent md-raised" aria-label="NEXTCONTACT" translate="TOOLS.NEXTCONTACT" translate-attr-aria-label="TOOLS.NEXTCONTACT">\n                NEXTCONTACT\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>')}]);
\ No newline at end of file
index 42529a1..052355a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8acc=['STRING','contactManager','integration','motionbar','jscripty','urlForward','browser','Allowed\x20values:\x20contactManager,\x20integration,\x20motionbar,\x20jscripty,\x20urlForward,\x20browser','integration[AccountId],\x20motionbar[TemplateId,URL,WinAppPath],\x20urlForward[URL]','TEXT','sequelize','getDataValue','action'];(function(_0x1de7bb,_0x444ad0){var _0x41f84e=function(_0x398b55){while(--_0x398b55){_0x1de7bb['push'](_0x1de7bb['shift']());}};_0x41f84e(++_0x444ad0);}(_0x8acc,0x19d));var _0xc8ac=function(_0x385b04,_0x2ce85e){_0x385b04=_0x385b04-0x0;var _0x21ec67=_0x8acc[_0x385b04];return _0x21ec67;};'use strict';var Sequelize=require(_0xc8ac('0x0'));module['exports']={'name':{'type':Sequelize['VIRTUAL'],'get':function(_0x39a9bf){return this[_0xc8ac('0x1')](_0xc8ac('0x2'));}},'action':{'type':Sequelize[_0xc8ac('0x3')],'allowNull':![],'validate':{'isIn':{'args':[[_0xc8ac('0x4'),_0xc8ac('0x5'),_0xc8ac('0x6'),_0xc8ac('0x7'),_0xc8ac('0x8'),_0xc8ac('0x9')]],'msg':'Allowed\x20values:\x20contactManager,\x20integration,\x20motionbar,\x20jscripty,\x20urlForward,\x20browser'}},'comment':_0xc8ac('0xa')},'data1':{'type':Sequelize['STRING'](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[_0xc8ac('0x3')](0x1000),'comment':_0xc8ac('0xb')},'data3':{'type':Sequelize[_0xc8ac('0x3')](0x1000),'comment':'motionbar[NULL,NULL,WinAppArguments]'},'data4':{'type':Sequelize[_0xc8ac('0x3')](0x1000)},'data5':{'type':Sequelize[_0xc8ac('0x3')](0x1000)},'data6':{'type':Sequelize[_0xc8ac('0x3')]},'data7':{'type':Sequelize[_0xc8ac('0xc')]}};
\ No newline at end of file
+var _0x97ff=['integration','motionbar','browser','Allowed\x20values:\x20contactManager,\x20integration,\x20motionbar,\x20jscripty,\x20urlForward,\x20browser','contactManager[ListId],\x20integration[intName(zendesk)],\x20motionbar[Popup(0),URL(1),WinApp(2)],\x20urlForward[GET,POST],\x20browser[TemplateId(0),URL(1)]','integration[AccountId],\x20motionbar[TemplateId,URL,WinAppPath],\x20urlForward[URL]','motionbar[NULL,NULL,WinAppArguments]','TEXT','sequelize','exports','VIRTUAL','getDataValue','action','STRING','contactManager'];(function(_0x337417,_0x2a55b3){var _0x544065=function(_0x28ac0b){while(--_0x28ac0b){_0x337417['push'](_0x337417['shift']());}};_0x544065(++_0x2a55b3);}(_0x97ff,0x80));var _0xf97f=function(_0x19ccd8,_0x451bdd){_0x19ccd8=_0x19ccd8-0x0;var _0x10fb86=_0x97ff[_0x19ccd8];return _0x10fb86;};'use strict';var Sequelize=require(_0xf97f('0x0'));module[_0xf97f('0x1')]={'name':{'type':Sequelize[_0xf97f('0x2')],'get':function(_0x2797cd){return this[_0xf97f('0x3')](_0xf97f('0x4'));}},'action':{'type':Sequelize[_0xf97f('0x5')],'allowNull':![],'validate':{'isIn':{'args':[[_0xf97f('0x6'),_0xf97f('0x7'),_0xf97f('0x8'),'jscripty','urlForward',_0xf97f('0x9')]],'msg':'Allowed\x20values:\x20contactManager,\x20integration,\x20motionbar,\x20jscripty,\x20urlForward,\x20browser'}},'comment':_0xf97f('0xa')},'data1':{'type':Sequelize[_0xf97f('0x5')](0x1000),'comment':_0xf97f('0xb')},'data2':{'type':Sequelize['STRING'](0x1000),'comment':_0xf97f('0xc')},'data3':{'type':Sequelize[_0xf97f('0x5')](0x1000),'comment':_0xf97f('0xd')},'data4':{'type':Sequelize[_0xf97f('0x5')](0x1000)},'data5':{'type':Sequelize['STRING'](0x1000)},'data6':{'type':Sequelize[_0xf97f('0x5')]},'data7':{'type':Sequelize[_0xf97f('0xe')]}};
\ No newline at end of file
index 2cc0581..5b5a09e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a46=['api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','error','stack','name','body','params','catch','Action','find','fast-json-patch','request-promise','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs'];(function(_0x34ddf1,_0x494e77){var _0x264cd6=function(_0x3b1d1a){while(--_0x3b1d1a){_0x34ddf1['push'](_0x34ddf1['shift']());}};_0x264cd6(++_0x494e77);}(_0x7a46,0x1d2));var _0x67a4=function(_0x41aa99,_0x464859){_0x41aa99=_0x41aa99-0x0;var _0x2a5ab5=_0x7a46[_0x41aa99];return _0x2a5ab5;};'use strict';var jsonpatch=require(_0x67a4('0x0'));var rp=require(_0x67a4('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x67a4('0x2'));var util=require(_0x67a4('0x3'));var path=require('path');var sox=require(_0x67a4('0x4'));var csv=require(_0x67a4('0x5'));var ejs=require(_0x67a4('0x6'));var fs=require('fs');var _=require(_0x67a4('0x7'));var squel=require(_0x67a4('0x8'));var crypto=require(_0x67a4('0x9'));var jsforce=require(_0x67a4('0xa'));var deskjs=require(_0x67a4('0xb'));var toCsv=require('to-csv');var querystring=require(_0x67a4('0xc'));var Papa=require('papaparse');var qs=require(_0x67a4('0xd'));var logger=require('../../config/logger')(_0x67a4('0xe'));var utils=require(_0x67a4('0xf'));var config=require(_0x67a4('0x10'));var db=require(_0x67a4('0x11'))['db'];function respondWithStatusCode(_0x50d620,_0x9684a8){_0x9684a8=_0x9684a8||0xcc;return function(_0x221d66){if(_0x221d66){return _0x50d620[_0x67a4('0x12')](_0x9684a8);}return _0x50d620[_0x67a4('0x13')](_0x9684a8)[_0x67a4('0x14')]();};}function respondWithResult(_0x352f4f,_0x339ac3){_0x339ac3=_0x339ac3||0xc8;return function(_0x2196ad){if(_0x2196ad){return _0x352f4f[_0x67a4('0x13')](_0x339ac3)[_0x67a4('0x15')](_0x2196ad);}};}function respondWithFilteredResult(_0x25888b,_0xc46e48){return function(_0x4ac9eb){if(_0x4ac9eb){var _0x3c6b9b=_0x4ac9eb[_0x67a4('0x16')],_0x1ff729=_0xc46e48[_0x67a4('0x17')],_0x173a0d=_0xc46e48[_0x67a4('0x17')]+_0xc46e48[_0x67a4('0x18')],_0x51b5ca;if(_0x173a0d>=_0x3c6b9b){_0x173a0d=_0x3c6b9b;_0x51b5ca=0xc8;}else{_0x51b5ca=0xce;}_0x25888b[_0x67a4('0x13')](_0x51b5ca);return _0x25888b[_0x67a4('0x19')](_0x67a4('0x1a'),_0x1ff729+'-'+_0x173a0d+'/'+_0x3c6b9b)['json'](_0x4ac9eb);}return null;};}function patchUpdates(_0x12ffa8){return function(_0x1b0623){try{jsonpatch[_0x67a4('0x1b')](_0x1b0623,_0x12ffa8,!![]);}catch(_0x4d1b44){return BPromise[_0x67a4('0x1c')](_0x4d1b44);}return _0x1b0623['save']();};}function saveUpdates(_0x37f6c5,_0x29e826){return function(_0x16e7d9){if(_0x16e7d9){return _0x16e7d9[_0x67a4('0x1d')](_0x37f6c5)[_0x67a4('0x1e')](function(_0x467dc9){return _0x467dc9;});}return null;};}function removeEntity(_0x187ad2,_0xe629d3){return function(_0x190755){if(_0x190755){return _0x190755[_0x67a4('0x1f')]()[_0x67a4('0x1e')](function(){_0x187ad2[_0x67a4('0x13')](0xcc)[_0x67a4('0x14')]();});}};}function handleEntityNotFound(_0x45179f,_0x5706ea){return function(_0x54d0e9){if(!_0x54d0e9){_0x45179f['sendStatus'](0x194);}return _0x54d0e9;};}function handleError(_0x510e9d,_0x3add50){_0x3add50=_0x3add50||0x1f4;return function(_0x467e38){logger[_0x67a4('0x20')](_0x467e38[_0x67a4('0x21')]);if(_0x467e38[_0x67a4('0x22')]){delete _0x467e38[_0x67a4('0x22')];}_0x510e9d[_0x67a4('0x13')](_0x3add50)['send'](_0x467e38);};}exports['update']=function(_0x47ec56,_0x463ecc){if(_0x47ec56[_0x67a4('0x23')]['id']){delete _0x47ec56['body']['id'];}return db['Action']['find']({'where':{'id':_0x47ec56[_0x67a4('0x24')]['id']}})[_0x67a4('0x1e')](handleEntityNotFound(_0x463ecc,null))[_0x67a4('0x1e')](saveUpdates(_0x47ec56[_0x67a4('0x23')],null))[_0x67a4('0x1e')](respondWithResult(_0x463ecc,null))[_0x67a4('0x25')](handleError(_0x463ecc,null));};exports['destroy']=function(_0x5a7956,_0x2e7a60){return db[_0x67a4('0x26')][_0x67a4('0x27')]({'where':{'id':_0x5a7956['params']['id']}})[_0x67a4('0x1e')](handleEntityNotFound(_0x2e7a60,null))[_0x67a4('0x1e')](removeEntity(_0x2e7a60,null))[_0x67a4('0x25')](handleError(_0x2e7a60,null));};
\ No newline at end of file
+var _0x3b65=['../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','json','apply','reject','save','update','then','stack','name','send','body','Action','find','params','catch','request-promise','moment','mustache','util','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','../../components/parsers/qs','../../config/logger','api','../../config/utils'];(function(_0x571dbc,_0x400df9){var _0x55043c=function(_0x47df3b){while(--_0x47df3b){_0x571dbc['push'](_0x571dbc['shift']());}};_0x55043c(++_0x400df9);}(_0x3b65,0x1e9));var _0x53b6=function(_0x23661c,_0x2cd175){_0x23661c=_0x23661c-0x0;var _0x4295c1=_0x3b65[_0x23661c];return _0x4295c1;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x53b6('0x0'));var moment=require(_0x53b6('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x53b6('0x2'));var util=require(_0x53b6('0x3'));var path=require('path');var sox=require('sox');var csv=require(_0x53b6('0x4'));var ejs=require(_0x53b6('0x5'));var fs=require('fs');var _=require(_0x53b6('0x6'));var squel=require(_0x53b6('0x7'));var crypto=require(_0x53b6('0x8'));var jsforce=require('jsforce');var deskjs=require(_0x53b6('0x9'));var toCsv=require(_0x53b6('0x4'));var querystring=require(_0x53b6('0xa'));var Papa=require('papaparse');var qs=require(_0x53b6('0xb'));var logger=require(_0x53b6('0xc'))(_0x53b6('0xd'));var utils=require(_0x53b6('0xe'));var config=require(_0x53b6('0xf'));var db=require(_0x53b6('0x10'))['db'];function respondWithStatusCode(_0x3d1ea9,_0x4dfba4){_0x4dfba4=_0x4dfba4||0xcc;return function(_0x1f3c1b){if(_0x1f3c1b){return _0x3d1ea9[_0x53b6('0x11')](_0x4dfba4);}return _0x3d1ea9[_0x53b6('0x12')](_0x4dfba4)[_0x53b6('0x13')]();};}function respondWithResult(_0x283cd7,_0x5deca8){_0x5deca8=_0x5deca8||0xc8;return function(_0x555669){if(_0x555669){return _0x283cd7['status'](_0x5deca8)['json'](_0x555669);}};}function respondWithFilteredResult(_0x37267d,_0x2f1de7){return function(_0x25c14d){if(_0x25c14d){var _0x588581=_0x25c14d[_0x53b6('0x14')],_0x537bda=_0x2f1de7[_0x53b6('0x15')],_0x3305a8=_0x2f1de7['offset']+_0x2f1de7['limit'],_0x5eda05;if(_0x3305a8>=_0x588581){_0x3305a8=_0x588581;_0x5eda05=0xc8;}else{_0x5eda05=0xce;}_0x37267d[_0x53b6('0x12')](_0x5eda05);return _0x37267d['set']('Content-Range',_0x537bda+'-'+_0x3305a8+'/'+_0x588581)[_0x53b6('0x16')](_0x25c14d);}return null;};}function patchUpdates(_0x28f961){return function(_0x18997b){try{jsonpatch[_0x53b6('0x17')](_0x18997b,_0x28f961,!![]);}catch(_0x5428ca){return BPromise[_0x53b6('0x18')](_0x5428ca);}return _0x18997b[_0x53b6('0x19')]();};}function saveUpdates(_0x543e1d,_0x17a572){return function(_0x12008d){if(_0x12008d){return _0x12008d[_0x53b6('0x1a')](_0x543e1d)[_0x53b6('0x1b')](function(_0x1afbc3){return _0x1afbc3;});}return null;};}function removeEntity(_0x259153,_0x489588){return function(_0x309cad){if(_0x309cad){return _0x309cad['destroy']()[_0x53b6('0x1b')](function(){_0x259153[_0x53b6('0x12')](0xcc)[_0x53b6('0x13')]();});}};}function handleEntityNotFound(_0x26ba00,_0x299125){return function(_0x46aacb){if(!_0x46aacb){_0x26ba00[_0x53b6('0x11')](0x194);}return _0x46aacb;};}function handleError(_0x3758b2,_0x90039c){_0x90039c=_0x90039c||0x1f4;return function(_0x44e2ad){logger['error'](_0x44e2ad[_0x53b6('0x1c')]);if(_0x44e2ad[_0x53b6('0x1d')]){delete _0x44e2ad[_0x53b6('0x1d')];}_0x3758b2[_0x53b6('0x12')](_0x90039c)[_0x53b6('0x1e')](_0x44e2ad);};}exports[_0x53b6('0x1a')]=function(_0x3a3c09,_0x418086){if(_0x3a3c09[_0x53b6('0x1f')]['id']){delete _0x3a3c09[_0x53b6('0x1f')]['id'];}return db[_0x53b6('0x20')][_0x53b6('0x21')]({'where':{'id':_0x3a3c09[_0x53b6('0x22')]['id']}})[_0x53b6('0x1b')](handleEntityNotFound(_0x418086,null))[_0x53b6('0x1b')](saveUpdates(_0x3a3c09[_0x53b6('0x1f')],null))[_0x53b6('0x1b')](respondWithResult(_0x418086,null))[_0x53b6('0x23')](handleError(_0x418086,null));};exports['destroy']=function(_0xa90066,_0x2e75c3){return db[_0x53b6('0x20')][_0x53b6('0x21')]({'where':{'id':_0xa90066[_0x53b6('0x22')]['id']}})[_0x53b6('0x1b')](handleEntityNotFound(_0x2e75c3,null))[_0x53b6('0x1b')](removeEntity(_0x2e75c3,null))[_0x53b6('0x23')](handleError(_0x2e75c3,null));};
\ No newline at end of file
index f05534d..264cdf4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2408=['bluebird','request-promise','./action.attributes','define','Action','lodash','../../config/logger','api','moment'];(function(_0x3d5a4d,_0x3f24f0){var _0x52c10a=function(_0x17b66c){while(--_0x17b66c){_0x3d5a4d['push'](_0x3d5a4d['shift']());}};_0x52c10a(++_0x3f24f0);}(_0x2408,0x10a));var _0x8240=function(_0x10775e,_0x560a11){_0x10775e=_0x10775e-0x0;var _0x4e175c=_0x2408[_0x10775e];return _0x4e175c;};'use strict';var _=require(_0x8240('0x0'));var util=require('util');var logger=require(_0x8240('0x1'))(_0x8240('0x2'));var moment=require(_0x8240('0x3'));var BPromise=require(_0x8240('0x4'));var rp=require(_0x8240('0x5'));var attributes=require(_0x8240('0x6'));module['exports']=function(_0x3971e9,_0x4f22ae){return _0x3971e9[_0x8240('0x7')](_0x8240('0x8'),attributes,{'tableName':'tools_actions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8834=['define','Action','tools_actions','util','api','moment','bluebird','request-promise','./action.attributes','exports'];(function(_0x30d92f,_0x1c36a0){var _0x4adebc=function(_0x16151a){while(--_0x16151a){_0x30d92f['push'](_0x30d92f['shift']());}};_0x4adebc(++_0x1c36a0);}(_0x8834,0xf3));var _0x4883=function(_0x27ccc9,_0x4e8d0b){_0x27ccc9=_0x27ccc9-0x0;var _0x1e9e14=_0x8834[_0x27ccc9];return _0x1e9e14;};'use strict';var _=require('lodash');var util=require(_0x4883('0x0'));var logger=require('../../config/logger')(_0x4883('0x1'));var moment=require(_0x4883('0x2'));var BPromise=require(_0x4883('0x3'));var rp=require(_0x4883('0x4'));var attributes=require(_0x4883('0x5'));module[_0x4883('0x6')]=function(_0x4620d9,_0xbf4fe3){return _0x4620d9[_0x4883('0x7')](_0x4883('0x8'),attributes,{'tableName':_0x4883('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 032218a..6f376e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc274=['result','catch','moment','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','Action,\x20%s,\x20%s','request\x20sent','Action,\x20%s,\x20%s,\x20%s','stringify','error','message'];(function(_0x51464a,_0x24614b){var _0x407e48=function(_0x2724f0){while(--_0x2724f0){_0x51464a['push'](_0x51464a['shift']());}};_0x407e48(++_0x24614b);}(_0xc274,0x17e));var _0x4c27=function(_0x525484,_0x1fa70a){_0x525484=_0x525484-0x0;var _0x5b351f=_0xc274[_0x525484];return _0x5b351f;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x4c27('0x0'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0x4c27('0x1'))['db'];var utils=require(_0x4c27('0x2'));var logger=require(_0x4c27('0x3'))(_0x4c27('0x4'));var config=require(_0x4c27('0x5'));var jayson=require(_0x4c27('0x6'));var client=jayson[_0x4c27('0x7')][_0x4c27('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x8699e7,_0x308ed5,_0x11ff15){return new BPromise(function(_0x237f54,_0x4eb328){return client[_0x4c27('0x9')](_0x8699e7,_0x11ff15)[_0x4c27('0xa')](function(_0x481ca3){logger[_0x4c27('0xb')](_0x4c27('0xc'),_0x308ed5,_0x4c27('0xd'));logger['debug'](_0x4c27('0xe'),_0x308ed5,_0x4c27('0xd'),JSON[_0x4c27('0xf')](_0x481ca3));if(_0x481ca3[_0x4c27('0x10')]){if(_0x481ca3[_0x4c27('0x10')]['code']===0x1f4){logger[_0x4c27('0x10')](_0x4c27('0xc'),_0x308ed5,_0x481ca3['error'][_0x4c27('0x11')]);return _0x4eb328(_0x481ca3[_0x4c27('0x10')][_0x4c27('0x11')]);}logger[_0x4c27('0x10')]('Action,\x20%s,\x20%s',_0x308ed5,_0x481ca3['error'][_0x4c27('0x11')]);return _0x237f54(_0x481ca3[_0x4c27('0x10')][_0x4c27('0x11')]);}else{logger[_0x4c27('0xb')]('Action,\x20%s,\x20%s',_0x308ed5,_0x4c27('0xd'));_0x237f54(_0x481ca3[_0x4c27('0x12')][_0x4c27('0x11')]);}})[_0x4c27('0x13')](function(_0x7dfdfb){logger['error'](_0x4c27('0xc'),_0x308ed5,_0x7dfdfb);_0x4eb328(_0x7dfdfb);});});}
\ No newline at end of file
+var _0xd9e1=['message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','info','request\x20sent','debug','Action,\x20%s,\x20%s,\x20%s','error','code','Action,\x20%s,\x20%s'];(function(_0x16e0c8,_0x4861eb){var _0xe4b5af=function(_0x5248bc){while(--_0x5248bc){_0x16e0c8['push'](_0x16e0c8['shift']());}};_0xe4b5af(++_0x4861eb);}(_0xd9e1,0x100));var _0x1d9e=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0xd9e1[_0x19950b];return _0x3c6b41;};'use strict';var _=require(_0x1d9e('0x0'));var util=require(_0x1d9e('0x1'));var moment=require(_0x1d9e('0x2'));var BPromise=require(_0x1d9e('0x3'));var rs=require(_0x1d9e('0x4'));var fs=require('fs');var db=require(_0x1d9e('0x5'))['db'];var utils=require(_0x1d9e('0x6'));var logger=require(_0x1d9e('0x7'))(_0x1d9e('0x8'));var config=require(_0x1d9e('0x9'));var jayson=require(_0x1d9e('0xa'));var client=jayson['client'][_0x1d9e('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x4a3236,_0x259951,_0x46ffb3){return new BPromise(function(_0x368391,_0x525c7a){return client[_0x1d9e('0xc')](_0x4a3236,_0x46ffb3)['then'](function(_0x5795aa){logger[_0x1d9e('0xd')]('Action,\x20%s,\x20%s',_0x259951,_0x1d9e('0xe'));logger[_0x1d9e('0xf')](_0x1d9e('0x10'),_0x259951,_0x1d9e('0xe'),JSON['stringify'](_0x5795aa));if(_0x5795aa['error']){if(_0x5795aa[_0x1d9e('0x11')][_0x1d9e('0x12')]===0x1f4){logger['error'](_0x1d9e('0x13'),_0x259951,_0x5795aa[_0x1d9e('0x11')]['message']);return _0x525c7a(_0x5795aa[_0x1d9e('0x11')][_0x1d9e('0x14')]);}logger['error'](_0x1d9e('0x13'),_0x259951,_0x5795aa[_0x1d9e('0x11')]['message']);return _0x368391(_0x5795aa[_0x1d9e('0x11')][_0x1d9e('0x14')]);}else{logger[_0x1d9e('0xd')](_0x1d9e('0x13'),_0x259951,'request\x20sent');_0x368391(_0x5795aa[_0x1d9e('0x15')][_0x1d9e('0x14')]);}})[_0x1d9e('0x16')](function(_0x3df6c7){logger[_0x1d9e('0x11')](_0x1d9e('0x13'),_0x259951,_0x3df6c7);_0x525c7a(_0x3df6c7);});});}
\ No newline at end of file
index bd36cac..d91f2d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc58c=['../../config/environment','put','/:id','delete','isAuthenticated','destroy','exports','multer','util','path','Router','../../components/auth/service'];(function(_0xcc96f2,_0x114df0){var _0x2b3d38=function(_0x56049b){while(--_0x56049b){_0xcc96f2['push'](_0xcc96f2['shift']());}};_0x2b3d38(++_0x114df0);}(_0xc58c,0xc7));var _0xcc58=function(_0x589f6f,_0x2e5078){_0x589f6f=_0x589f6f-0x0;var _0x410069=_0xc58c[_0x589f6f];return _0x410069;};'use strict';var multer=require(_0xcc58('0x0'));var util=require(_0xcc58('0x1'));var path=require(_0xcc58('0x2'));var express=require('express');var router=express[_0xcc58('0x3')]();var auth=require(_0xcc58('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xcc58('0x5'));var controller=require('./action.controller');router[_0xcc58('0x6')](_0xcc58('0x7'),auth['isAuthenticated'](),controller['update']);router[_0xcc58('0x8')](_0xcc58('0x7'),auth[_0xcc58('0x9')](),controller[_0xcc58('0xa')]);module[_0xcc58('0xb')]=router;
\ No newline at end of file
+var _0x28dd=['multer','util','path','express','Router','../../components/interaction/service','./action.controller','put','update','/:id','isAuthenticated','destroy','exports'];(function(_0x508300,_0x2c3e7d){var _0x31c05a=function(_0x42d5c3){while(--_0x42d5c3){_0x508300['push'](_0x508300['shift']());}};_0x31c05a(++_0x2c3e7d);}(_0x28dd,0x15f));var _0xd28d=function(_0xbdf091,_0x35a06c){_0xbdf091=_0xbdf091-0x0;var _0x129fd5=_0x28dd[_0xbdf091];return _0x129fd5;};'use strict';var multer=require(_0xd28d('0x0'));var util=require(_0xd28d('0x1'));var path=require(_0xd28d('0x2'));var express=require(_0xd28d('0x3'));var router=express[_0xd28d('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xd28d('0x5'));var config=require('../../config/environment');var controller=require(_0xd28d('0x6'));router[_0xd28d('0x7')]('/:id',auth['isAuthenticated'](),controller[_0xd28d('0x8')]);router['delete'](_0xd28d('0x9'),auth[_0xd28d('0xa')](),controller[_0xd28d('0xb')]);module[_0xd28d('0xc')]=router;
\ No newline at end of file
index 914b28c..0fc3e75 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe4e4=['exports','STRING','TEXT','sequelize'];(function(_0x1d33d7,_0x15b12f){var _0x1e363e=function(_0x5bc1df){while(--_0x5bc1df){_0x1d33d7['push'](_0x1d33d7['shift']());}};_0x1e363e(++_0x15b12f);}(_0xe4e4,0x183));var _0x4e4e=function(_0x2d05ba,_0x442e6c){_0x2d05ba=_0x2d05ba-0x0;var _0x20ab68=_0xe4e4[_0x2d05ba];return _0x20ab68;};'use strict';var Sequelize=require(_0x4e4e('0x0'));module[_0x4e4e('0x1')]={'name':{'type':Sequelize[_0x4e4e('0x2')],'allowNull':![]},'description':{'type':Sequelize['STRING']},'parent':{'type':Sequelize['STRING']},'table':{'type':Sequelize['STRING']},'conditions':{'type':Sequelize[_0x4e4e('0x3')]},'joins':{'type':Sequelize['TEXT']}};
\ No newline at end of file
+var _0x6e1f=['exports','STRING','TEXT','sequelize'];(function(_0x57e263,_0x192bd7){var _0x27a01e=function(_0x4047db){while(--_0x4047db){_0x57e263['push'](_0x57e263['shift']());}};_0x27a01e(++_0x192bd7);}(_0x6e1f,0x1cb));var _0xf6e1=function(_0x428ac9,_0x24b1ee){_0x428ac9=_0x428ac9-0x0;var _0x29818e=_0x6e1f[_0x428ac9];return _0x29818e;};'use strict';var Sequelize=require(_0xf6e1('0x0'));module[_0xf6e1('0x1')]={'name':{'type':Sequelize[_0xf6e1('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0xf6e1('0x2')]},'parent':{'type':Sequelize[_0xf6e1('0x2')]},'table':{'type':Sequelize[_0xf6e1('0x2')]},'conditions':{'type':Sequelize['TEXT']},'joins':{'type':Sequelize[_0xf6e1('0x3')]}};
\ No newline at end of file
index c22bc85..310a332 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ff8=['IS\x20NOT\x20NULL','IS\x20NOT\x20EMPTY','rules','operator','group','field','condition','value','getFields','Sequelize','ValidationError','Please\x20insert\x20at\x20least\x20one\x20field!','AnalyticMetric','keyBy','select','from','table','MetricId','metric','function','replace','format','groupBy','orderBy','DESC','joins','parse','type','parentKey','foreignTable','foreignKey','%s.%s\x20=\x20%s.%s','conditions','clone','debug','Limited\x20Query:','toString','sequelize','QueryTypes','SELECT','SUM(%s)','MAX(%s)','IS\x20EMPTY','alias','No\x20Data!','output','web','fullPath','%s-%s.%s','randomstring','generate','AnalyticExtractedReport','.createdAt\x20BETWEEN\x20?\x20AND\x20?','startDate','Run\x20Query:','child_process','fork','join','../../files/reports','savename','run','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','papaparse','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','json','save','update','then','destroy','error','name','index','AnalyticCustomReport','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','fields','attributes','length','nolimit','order','where','add','day','merge','filter','map','options','includeAll','include','findAll','rows','catch','params','create','body','find','left_join','right_join','outer_join','cross_join','COUNT(%s)','COUNT(DISTINCT\x20%s)','MIN(%s)','AVG(%s)','GROUP_CONCAT(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','SEC_TO_TIME(%s)','DATE(%s)','HOUR(%s)','ROUND(%s)','UNIX_TIMESTAMP(%s)','includes','IS\x20NULL'];(function(_0x10f6e8,_0x351db6){var _0x35bb3c=function(_0x30a39b){while(--_0x30a39b){_0x10f6e8['push'](_0x10f6e8['shift']());}};_0x35bb3c(++_0x351db6);}(_0x4ff8,0x1e2));var _0x84ff=function(_0x5f1dca,_0x4e6a4e){_0x5f1dca=_0x5f1dca-0x0;var _0x5953f3=_0x4ff8[_0x5f1dca];return _0x5953f3;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x84ff('0x0'));var moment=require('moment');var BPromise=require(_0x84ff('0x1'));var Mustache=require(_0x84ff('0x2'));var util=require(_0x84ff('0x3'));var path=require(_0x84ff('0x4'));var sox=require(_0x84ff('0x5'));var csv=require(_0x84ff('0x6'));var ejs=require(_0x84ff('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0x84ff('0x8'));var crypto=require(_0x84ff('0x9'));var jsforce=require(_0x84ff('0xa'));var deskjs=require('desk.js');var toCsv=require(_0x84ff('0x6'));var querystring=require('querystring');var Papa=require(_0x84ff('0xb'));var qs=require(_0x84ff('0xc'));var logger=require('../../config/logger')('api');var utils=require(_0x84ff('0xd'));var config=require(_0x84ff('0xe'));var db=require(_0x84ff('0xf'))['db'];function respondWithStatusCode(_0x49198c,_0x2c742d){_0x2c742d=_0x2c742d||0xcc;return function(_0x1ecf7e){if(_0x1ecf7e){return _0x49198c[_0x84ff('0x10')](_0x2c742d);}return _0x49198c[_0x84ff('0x11')](_0x2c742d)[_0x84ff('0x12')]();};}function respondWithResult(_0x20971f,_0xb235e3){_0xb235e3=_0xb235e3||0xc8;return function(_0x31d63a){if(_0x31d63a){return _0x20971f[_0x84ff('0x11')](_0xb235e3)['json'](_0x31d63a);}};}function respondWithFilteredResult(_0x24809a,_0x2e920f){return function(_0x1f1090){if(_0x1f1090){var _0x3f6a2a=_0x1f1090[_0x84ff('0x13')],_0x151dd5=_0x2e920f[_0x84ff('0x14')],_0xe08772=_0x2e920f[_0x84ff('0x14')]+_0x2e920f[_0x84ff('0x15')],_0x407e20;if(_0xe08772>=_0x3f6a2a){_0xe08772=_0x3f6a2a;_0x407e20=0xc8;}else{_0x407e20=0xce;}_0x24809a[_0x84ff('0x11')](_0x407e20);return _0x24809a[_0x84ff('0x16')]('Content-Range',_0x151dd5+'-'+_0xe08772+'/'+_0x3f6a2a)[_0x84ff('0x17')](_0x1f1090);}return null;};}function patchUpdates(_0x4285bc){return function(_0x32298a){try{jsonpatch['apply'](_0x32298a,_0x4285bc,!![]);}catch(_0x31f948){return BPromise['reject'](_0x31f948);}return _0x32298a[_0x84ff('0x18')]();};}function saveUpdates(_0x2251eb,_0x5b023c){return function(_0x465ca0){if(_0x465ca0){return _0x465ca0[_0x84ff('0x19')](_0x2251eb)[_0x84ff('0x1a')](function(_0x42c938){return _0x42c938;});}return null;};}function removeEntity(_0x1a1709,_0x3473c9){return function(_0x120ad0){if(_0x120ad0){return _0x120ad0[_0x84ff('0x1b')]()[_0x84ff('0x1a')](function(){_0x1a1709[_0x84ff('0x11')](0xcc)[_0x84ff('0x12')]();});}};}function handleEntityNotFound(_0x596b2b,_0x29cec9){return function(_0x505149){if(!_0x505149){_0x596b2b[_0x84ff('0x10')](0x194);}return _0x505149;};}function handleError(_0x58e512,_0x25711c){_0x25711c=_0x25711c||0x1f4;return function(_0x29b2dd){logger[_0x84ff('0x1c')](_0x29b2dd['stack']);if(_0x29b2dd[_0x84ff('0x1d')]){delete _0x29b2dd['name'];}_0x58e512[_0x84ff('0x11')](_0x25711c)['send'](_0x29b2dd);};}exports[_0x84ff('0x1e')]=function(_0x1db376,_0x3c745a){var _0x4c6dbe={},_0x28e3fd={},_0x157919={'count':0x0,'rows':[]};var _0x2f83ae=db[_0x84ff('0x1f')][_0x84ff('0x20')];_0x28e3fd[_0x84ff('0x21')]=_[_0x84ff('0x22')](_0x2f83ae);var _0x37f942={'dateStart':_0x1db376[_0x84ff('0x23')][_0x84ff('0x24')],'dateEnd':_0x1db376[_0x84ff('0x23')][_0x84ff('0x25')]};delete _0x1db376[_0x84ff('0x23')][_0x84ff('0x24')];delete _0x1db376[_0x84ff('0x23')][_0x84ff('0x25')];_0x28e3fd[_0x84ff('0x23')]=_['keys'](_0x1db376[_0x84ff('0x23')]);_0x28e3fd[_0x84ff('0x26')]=_[_0x84ff('0x27')](_0x28e3fd['model'],_0x28e3fd[_0x84ff('0x23')]);_0x4c6dbe['attributes']=_[_0x84ff('0x27')](_0x28e3fd['model'],qs[_0x84ff('0x28')](_0x1db376[_0x84ff('0x23')][_0x84ff('0x28')]));_0x4c6dbe[_0x84ff('0x29')]=_0x4c6dbe['attributes'][_0x84ff('0x2a')]?_0x4c6dbe[_0x84ff('0x29')]:_0x28e3fd[_0x84ff('0x21')];if(!_0x1db376['query']['hasOwnProperty'](_0x84ff('0x2b'))){_0x4c6dbe['limit']=qs[_0x84ff('0x15')](_0x1db376[_0x84ff('0x23')][_0x84ff('0x15')]);_0x4c6dbe[_0x84ff('0x14')]=qs[_0x84ff('0x14')](_0x1db376['query']['offset']);}_0x4c6dbe[_0x84ff('0x2c')]=qs['sort'](_0x1db376[_0x84ff('0x23')]['sort']);_0x4c6dbe[_0x84ff('0x2d')]=qs['filters'](_['pick'](_0x1db376[_0x84ff('0x23')],_0x28e3fd[_0x84ff('0x26')]));if(_0x37f942[_0x84ff('0x24')]){if(_0x37f942[_0x84ff('0x25')]){_0x37f942[_0x84ff('0x25')]=moment(_0x37f942[_0x84ff('0x25')])[_0x84ff('0x2e')](0x1,_0x84ff('0x2f'));}else{_0x37f942[_0x84ff('0x25')]=moment(_0x37f942[_0x84ff('0x24')])[_0x84ff('0x2e')](0x1,_0x84ff('0x2f'));}_[_0x84ff('0x30')](_0x4c6dbe[_0x84ff('0x2d')],{'createdAt':{'$gte':_0x37f942['dateStart'],'$lte':_0x37f942[_0x84ff('0x25')]}});}if(_0x1db376[_0x84ff('0x23')][_0x84ff('0x31')]){_0x4c6dbe[_0x84ff('0x2d')]=_[_0x84ff('0x30')](_0x4c6dbe[_0x84ff('0x2d')],{'$or':_[_0x84ff('0x32')](_0x4c6dbe[_0x84ff('0x29')],function(_0xebcf3e){var _0x5e6b6e={};_0x5e6b6e[_0xebcf3e]={'$like':'%'+_0x1db376[_0x84ff('0x23')]['filter']+'%'};return _0x5e6b6e;})});}_0x4c6dbe=_[_0x84ff('0x30')]({},_0x4c6dbe,_0x1db376[_0x84ff('0x33')]);var _0x24d2a7={'where':_0x4c6dbe[_0x84ff('0x2d')]};return db[_0x84ff('0x1f')][_0x84ff('0x13')](_0x24d2a7)[_0x84ff('0x1a')](function(_0x138b4b){_0x157919[_0x84ff('0x13')]=_0x138b4b;if(_0x1db376[_0x84ff('0x23')][_0x84ff('0x34')]){_0x4c6dbe[_0x84ff('0x35')]=[{'all':!![]}];}return db[_0x84ff('0x1f')][_0x84ff('0x36')](_0x4c6dbe);})['then'](function(_0x2a906f){_0x157919[_0x84ff('0x37')]=_0x2a906f;return _0x157919;})[_0x84ff('0x1a')](respondWithFilteredResult(_0x3c745a,_0x4c6dbe))[_0x84ff('0x38')](handleError(_0x3c745a,null));};exports['show']=function(_0x4a0a51,_0x311a9c){var _0x5b1f12={'raw':![],'where':{'id':_0x4a0a51[_0x84ff('0x39')]['id']}},_0xdca146={};_0xdca146['model']=_['keys'](db[_0x84ff('0x1f')]['rawAttributes']);_0xdca146[_0x84ff('0x23')]=_[_0x84ff('0x22')](_0x4a0a51[_0x84ff('0x23')]);_0xdca146['filters']=_[_0x84ff('0x27')](_0xdca146['model'],_0xdca146[_0x84ff('0x23')]);_0x5b1f12[_0x84ff('0x29')]=_[_0x84ff('0x27')](_0xdca146[_0x84ff('0x21')],qs['fields'](_0x4a0a51[_0x84ff('0x23')][_0x84ff('0x28')]));_0x5b1f12[_0x84ff('0x29')]=_0x5b1f12['attributes'][_0x84ff('0x2a')]?_0x5b1f12['attributes']:_0xdca146[_0x84ff('0x21')];if(_0x4a0a51[_0x84ff('0x23')]['includeAll']){_0x5b1f12[_0x84ff('0x35')]=[{'all':!![]}];}_0x5b1f12=_[_0x84ff('0x30')]({},_0x5b1f12,_0x4a0a51[_0x84ff('0x33')]);return db[_0x84ff('0x1f')]['find'](_0x5b1f12)[_0x84ff('0x1a')](handleEntityNotFound(_0x311a9c,null))[_0x84ff('0x1a')](respondWithResult(_0x311a9c,null))[_0x84ff('0x38')](handleError(_0x311a9c,null));};exports[_0x84ff('0x3a')]=function(_0x1b806f,_0x1b6480){return db[_0x84ff('0x1f')]['create'](_0x1b806f['body'],{})[_0x84ff('0x1a')](respondWithResult(_0x1b6480,0xc9))['catch'](handleError(_0x1b6480,null));};exports[_0x84ff('0x19')]=function(_0x9ac997,_0x723a8d){if(_0x9ac997[_0x84ff('0x3b')]['id']){delete _0x9ac997['body']['id'];}return db[_0x84ff('0x1f')][_0x84ff('0x3c')]({'where':{'id':_0x9ac997[_0x84ff('0x39')]['id']}})[_0x84ff('0x1a')](handleEntityNotFound(_0x723a8d,null))['then'](saveUpdates(_0x9ac997[_0x84ff('0x3b')],null))['then'](respondWithResult(_0x723a8d,null))[_0x84ff('0x38')](handleError(_0x723a8d,null));};exports['destroy']=function(_0x5e683b,_0x1332e6){return db[_0x84ff('0x1f')][_0x84ff('0x3c')]({'where':{'id':_0x5e683b[_0x84ff('0x39')]['id']}})[_0x84ff('0x1a')](handleEntityNotFound(_0x1332e6,null))[_0x84ff('0x1a')](removeEntity(_0x1332e6,null))[_0x84ff('0x38')](handleError(_0x1332e6,null));};exports['preview']=function(_0x5a7de6,_0x1dfc67){var _0x38a9db=0xa;var _0x3c3781=['join',_0x84ff('0x3d'),_0x84ff('0x3e'),_0x84ff('0x3f'),_0x84ff('0x40')];var _0x42d6dd={'SUM':'SUM(%s)','COUNT':_0x84ff('0x41'),'COUNT DISTINCT':_0x84ff('0x42'),'MAX':'MAX(%s)','MIN':_0x84ff('0x43'),'AVG':_0x84ff('0x44'),'GROUP_CONCAT':_0x84ff('0x45'),'GROUP_CONCAT ASC':_0x84ff('0x46'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x2754b4={'SEC_TO_TIME':_0x84ff('0x47'),'DATE':_0x84ff('0x48'),'HOUR':_0x84ff('0x49'),'ROUND':_0x84ff('0x4a'),'UNIX_TIMESTAMP':_0x84ff('0x4b')};var _0x535a64=function(_0x2c6937){return!_[_0x84ff('0x4c')]([_0x84ff('0x4d'),_0x84ff('0x4e'),'IS\x20EMPTY',_0x84ff('0x4f')],_0x2c6937);};var _0x18dde5=function(_0x34a055){if(!_0x34a055||!_0x34a055[_0x84ff('0x50')][_0x84ff('0x2a')]){return'';}for(var _0x361fe4='(',_0x1e4080=0x0;_0x1e4080<_0x34a055[_0x84ff('0x50')][_0x84ff('0x2a')];_0x1e4080+=0x1){_0x1e4080>0x0&&(_0x361fe4+='\x20'+_0x34a055[_0x84ff('0x51')]+'\x20');_0x361fe4+=_0x34a055[_0x84ff('0x50')][_0x1e4080][_0x84ff('0x52')]?_0x18dde5(_0x34a055['rules'][_0x1e4080]['group']):_0x34a055[_0x84ff('0x50')][_0x1e4080][_0x84ff('0x53')]+'\x20'+_0x34a055[_0x84ff('0x50')][_0x1e4080]['condition']+(_0x535a64(_0x34a055[_0x84ff('0x50')][_0x1e4080][_0x84ff('0x54')])?'\x20'+_0x34a055[_0x84ff('0x50')][_0x1e4080][_0x84ff('0x55')]:'');}return _0x361fe4+')';};var _0x567e2f={'where':{'id':_0x5a7de6[_0x84ff('0x39')]['id']}},_0x4c6301,_0x251a5b,_0xbac6eb,_0x3260c6,_0x2e5d7c;_0x567e2f=_[_0x84ff('0x30')]({},_0x567e2f,_0x5a7de6[_0x84ff('0x33')]);return db['AnalyticCustomReport'][_0x84ff('0x3c')](_0x567e2f)[_0x84ff('0x1a')](function(_0x50cbb4){if(_0x50cbb4){_0x4c6301=_0x50cbb4;return _0x50cbb4[_0x84ff('0x56')]();}return null;})[_0x84ff('0x1a')](function(_0x5ee211){if(_0x5ee211){if(!_0x5ee211[_0x84ff('0x2a')]){throw new db[(_0x84ff('0x57'))][(_0x84ff('0x58'))](_0x84ff('0x59'));}_0x251a5b=_0x5ee211;return db[_0x84ff('0x5a')]['findAll']({'raw':!![]});}return null;})[_0x84ff('0x1a')](function(_0x4b9163){if(_0x4b9163){_0xbac6eb=_[_0x84ff('0x5b')](_0x4b9163,'id');var _0x2ae347;var _0x52b2c8=squel[_0x84ff('0x5c')]();_0x52b2c8[_0x84ff('0x5d')](_0x4c6301[_0x84ff('0x5e')]);for(var _0x249a09=0x0;_0x249a09<_0x251a5b[_0x84ff('0x2a')];_0x249a09+=0x1){_0x2ae347=_0x251a5b[_0x249a09][_0x84ff('0x5f')]?_0xbac6eb[_0x251a5b[_0x249a09]['MetricId']][_0x84ff('0x60')]:_0x251a5b[_0x249a09][_0x84ff('0x53')];_0x2ae347=_0x251a5b[_0x249a09][_0x84ff('0x61')]?_[_0x84ff('0x62')](_0x42d6dd[_0x251a5b[_0x249a09][_0x84ff('0x61')]],'%s',_0x2ae347):_0x2ae347;_0x2ae347=_0x251a5b[_0x249a09]['format']?_[_0x84ff('0x62')](_0x2754b4[_0x251a5b[_0x249a09][_0x84ff('0x63')]],'%s',_0x2ae347):_0x2ae347;if(_0x251a5b[_0x249a09][_0x84ff('0x64')]){_0x52b2c8[_0x84ff('0x52')](_0x2ae347);}_0x251a5b[_0x249a09][_0x84ff('0x65')]&&_0x52b2c8[_0x84ff('0x2c')](_0x2ae347,_0x251a5b[_0x249a09][_0x84ff('0x65')]===_0x84ff('0x66')?![]:!![]);_0x52b2c8[_0x84ff('0x53')](_0x2ae347,_0x251a5b[_0x249a09]['alias']||_0x2ae347);}if(_0x4c6301['joins']){_0x4c6301[_0x84ff('0x67')]=JSON[_0x84ff('0x68')](_0x4c6301['joins']);for(var _0x555f78=0x0;_0x555f78<_0x4c6301[_0x84ff('0x67')]['length'];_0x555f78+=0x1){if(_0x4c6301[_0x84ff('0x67')][_0x555f78][_0x84ff('0x69')]&&_[_0x84ff('0x4c')](_0x3c3781,_0x4c6301[_0x84ff('0x67')][_0x555f78][_0x84ff('0x69')])&&_0x4c6301[_0x84ff('0x67')][_0x555f78][_0x84ff('0x6a')]&&_0x4c6301[_0x84ff('0x67')][_0x555f78][_0x84ff('0x6b')]&&_0x4c6301['joins'][_0x555f78][_0x84ff('0x6c')]){_0x52b2c8[_0x4c6301['joins'][_0x555f78][_0x84ff('0x69')]](_0x4c6301[_0x84ff('0x67')][_0x555f78]['foreignTable'],null,util[_0x84ff('0x63')](_0x84ff('0x6d'),_0x4c6301['table'],_0x4c6301['joins'][_0x555f78][_0x84ff('0x6a')],_0x4c6301[_0x84ff('0x67')][_0x555f78][_0x84ff('0x6b')],_0x4c6301[_0x84ff('0x67')][_0x555f78][_0x84ff('0x6c')]));}}}if(_0x4c6301[_0x84ff('0x6e')]){_0x4c6301[_0x84ff('0x6e')]=JSON[_0x84ff('0x68')](_0x4c6301['conditions']);_0x52b2c8[_0x84ff('0x2d')](_0x18dde5(_0x4c6301['conditions'][_0x84ff('0x52')]));}_0x2e5d7c=_0x52b2c8[_0x84ff('0x6f')]();_0x52b2c8['limit'](_0x38a9db);_0x52b2c8['offset'](0x0);logger[_0x84ff('0x70')](_0x84ff('0x71'),_0x52b2c8[_0x84ff('0x72')]());return db[_0x84ff('0x73')][_0x84ff('0x23')](_0x52b2c8[_0x84ff('0x72')](),{'type':db[_0x84ff('0x73')][_0x84ff('0x74')][_0x84ff('0x75')]});}})['then'](respondWithResult(_0x1dfc67,null))[_0x84ff('0x38')](handleError(_0x1dfc67,null));};function runReport(_0xad29ba,_0x4b2914,_0x1b45f6){var _0x239e0f=_0x4b2914[_0x84ff('0x1d')];var _0x3ba935=0xa;var _0x9e050=['join',_0x84ff('0x3d'),_0x84ff('0x3e'),'outer_join',_0x84ff('0x40')];var _0x50d199={'SUM':_0x84ff('0x76'),'COUNT':_0x84ff('0x41'),'COUNT DISTINCT':_0x84ff('0x42'),'MAX':_0x84ff('0x77'),'MIN':_0x84ff('0x43'),'AVG':'AVG(%s)','GROUP_CONCAT':_0x84ff('0x45'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x428665={'SEC_TO_TIME':_0x84ff('0x47'),'DATE':_0x84ff('0x48'),'HOUR':'HOUR(%s)','ROUND':'ROUND(%s)','UNIX_TIMESTAMP':_0x84ff('0x4b')};var _0x3fc292=function(_0x12a78e){return!_[_0x84ff('0x4c')]([_0x84ff('0x4d'),_0x84ff('0x4e'),_0x84ff('0x78'),'IS\x20NOT\x20EMPTY'],_0x12a78e);};var _0x38e3e2=function(_0x38b7a6){if(!_0x38b7a6||!_0x38b7a6[_0x84ff('0x50')][_0x84ff('0x2a')]){return'';}for(var _0x2f55b4='(',_0x3b5f75=0x0;_0x3b5f75<_0x38b7a6[_0x84ff('0x50')][_0x84ff('0x2a')];_0x3b5f75+=0x1){_0x3b5f75>0x0&&(_0x2f55b4+='\x20'+_0x38b7a6[_0x84ff('0x51')]+'\x20');_0x2f55b4+=_0x38b7a6[_0x84ff('0x50')][_0x3b5f75][_0x84ff('0x52')]?_0x38e3e2(_0x38b7a6[_0x84ff('0x50')][_0x3b5f75][_0x84ff('0x52')]):_0x38b7a6[_0x84ff('0x50')][_0x3b5f75][_0x84ff('0x53')]+'\x20'+_0x38b7a6['rules'][_0x3b5f75][_0x84ff('0x54')]+(_0x3fc292(_0x38b7a6[_0x84ff('0x50')][_0x3b5f75][_0x84ff('0x54')])?'\x20'+_0x38b7a6[_0x84ff('0x50')][_0x3b5f75]['value']:'');}return _0x2f55b4+')';};var _0x289d85={'where':{'id':_0xad29ba['id']}},_0x3ac988,_0x587ed1,_0x1b3e07,_0x3feb91,_0x2cbf8e;_0x289d85=_[_0x84ff('0x30')]({},_0x289d85,_0x1b45f6);return db['AnalyticCustomReport']['find'](_0x289d85)[_0x84ff('0x1a')](function(_0x35e12e){if(_0x35e12e){_0x3ac988=_0x35e12e;return _0x35e12e['getFields']();}return null;})['then'](function(_0x517f74){if(_0x517f74){if(!_0x517f74[_0x84ff('0x2a')]){throw new db[(_0x84ff('0x57'))]['ValidationError'](_0x84ff('0x59'));}_0x587ed1=_0x517f74;return db[_0x84ff('0x5a')]['findAll']({'raw':!![]});}return null;})[_0x84ff('0x1a')](function(_0x162552){if(_0x162552){_0x1b3e07=_[_0x84ff('0x5b')](_0x162552,'id');var _0x3ce110;var _0x119835=squel['select']();_0x119835['from'](_0x3ac988[_0x84ff('0x5e')]);for(var _0x2ff515=0x0;_0x2ff515<_0x587ed1['length'];_0x2ff515+=0x1){_0x3ce110=_0x587ed1[_0x2ff515]['MetricId']?_0x1b3e07[_0x587ed1[_0x2ff515][_0x84ff('0x5f')]][_0x84ff('0x60')]:_0x587ed1[_0x2ff515]['field'];_0x3ce110=_0x587ed1[_0x2ff515][_0x84ff('0x61')]?_[_0x84ff('0x62')](_0x50d199[_0x587ed1[_0x2ff515][_0x84ff('0x61')]],'%s',_0x3ce110):_0x3ce110;_0x3ce110=_0x587ed1[_0x2ff515][_0x84ff('0x63')]?_[_0x84ff('0x62')](_0x428665[_0x587ed1[_0x2ff515][_0x84ff('0x63')]],'%s',_0x3ce110):_0x3ce110;if(_0x587ed1[_0x2ff515][_0x84ff('0x64')]){_0x119835[_0x84ff('0x52')](_0x3ce110);}_0x587ed1[_0x2ff515][_0x84ff('0x65')]&&_0x119835[_0x84ff('0x2c')](_0x3ce110,_0x587ed1[_0x2ff515]['orderBy']===_0x84ff('0x66')?![]:!![]);_0x119835[_0x84ff('0x53')](_0x3ce110,_0x587ed1[_0x2ff515][_0x84ff('0x79')]||_0x3ce110);}if(_0x3ac988[_0x84ff('0x67')]){_0x3ac988[_0x84ff('0x67')]=JSON[_0x84ff('0x68')](_0x3ac988['joins']);for(var _0x10d2fd=0x0;_0x10d2fd<_0x3ac988['joins'][_0x84ff('0x2a')];_0x10d2fd+=0x1){if(_0x3ac988[_0x84ff('0x67')][_0x10d2fd][_0x84ff('0x69')]&&_['includes'](_0x9e050,_0x3ac988[_0x84ff('0x67')][_0x10d2fd][_0x84ff('0x69')])&&_0x3ac988[_0x84ff('0x67')][_0x10d2fd][_0x84ff('0x6a')]&&_0x3ac988[_0x84ff('0x67')][_0x10d2fd][_0x84ff('0x6b')]&&_0x3ac988[_0x84ff('0x67')][_0x10d2fd][_0x84ff('0x6c')]){_0x119835[_0x3ac988[_0x84ff('0x67')][_0x10d2fd]['type']](_0x3ac988[_0x84ff('0x67')][_0x10d2fd][_0x84ff('0x6b')],null,util['format'](_0x84ff('0x6d'),_0x3ac988[_0x84ff('0x5e')],_0x3ac988['joins'][_0x10d2fd][_0x84ff('0x6a')],_0x3ac988[_0x84ff('0x67')][_0x10d2fd][_0x84ff('0x6b')],_0x3ac988[_0x84ff('0x67')][_0x10d2fd][_0x84ff('0x6c')]));}}}if(_0x3ac988[_0x84ff('0x6e')]){_0x3ac988['conditions']=JSON[_0x84ff('0x68')](_0x3ac988[_0x84ff('0x6e')]);_0x119835[_0x84ff('0x2d')](_0x38e3e2(_0x3ac988[_0x84ff('0x6e')][_0x84ff('0x52')]));}_0x2cbf8e=_0x119835[_0x84ff('0x6f')]();_0x119835[_0x84ff('0x15')](_0x3ba935);_0x119835['offset'](0x0);logger[_0x84ff('0x70')](_0x84ff('0x71'),_0x119835[_0x84ff('0x72')]());return db[_0x84ff('0x73')][_0x84ff('0x23')](_0x119835['toString'](),{'type':db[_0x84ff('0x73')]['QueryTypes'][_0x84ff('0x75')]});}})[_0x84ff('0x1a')](function(_0x4365b4){if(!_0x4365b4[_0x84ff('0x2a')]){throw new db[(_0x84ff('0x57'))][(_0x84ff('0x58'))](_0x84ff('0x7a'));}if(_0x4b2914[_0x84ff('0x7b')]===_0x84ff('0x7c')){return null;}var _0x3a1b6a=_[_0x84ff('0x30')](_0x4b2914,{'name':_0x4b2914[_0x84ff('0x7d')]||_0x4b2914[_0x84ff('0x1d')]||_0x3ac988['name'],'basename':_0x239e0f,'savename':util[_0x84ff('0x63')](_0x84ff('0x7e'),_0x4b2914[_0x84ff('0x1d')]||_0x3ac988[_0x84ff('0x1d')],require(_0x84ff('0x7f'))[_0x84ff('0x80')](0x4),_0x4b2914[_0x84ff('0x7b')]||'csv')});return db[_0x84ff('0x81')]['create'](_0x3a1b6a,{'raw':!![]});})['then'](function(_0x4451b1){_0x2cbf8e[_0x84ff('0x2d')](_0x3ac988['table']+_0x84ff('0x82'),_0x4b2914[_0x84ff('0x83')],_0x4b2914['endDate']);if(_0x4451b1){logger['info'](_0x84ff('0x84'),_0x2cbf8e[_0x84ff('0x72')]());require(_0x84ff('0x85'))[_0x84ff('0x86')](path['join'](__dirname,'../../components/export/',_0x4451b1['output']),[_0x4451b1['id'],_0x2cbf8e[_0x84ff('0x72')](),path[_0x84ff('0x87')](__dirname,_0x84ff('0x88'),_0x4451b1[_0x84ff('0x89')]),_0x239e0f]);return _0x4451b1;}else{var _0x39ac73=squel[_0x84ff('0x5c')]();_0x39ac73['from']('('+_0x2cbf8e[_0x84ff('0x72')]()+')','countTable');_0x39ac73['field']('COUNT(*)',_0x84ff('0x13'));_0x2cbf8e[_0x84ff('0x15')](_0x4b2914['limit']||_0x3ba935);_0x2cbf8e[_0x84ff('0x14')](_0x4b2914[_0x84ff('0x14')]||0x0);return db[_0x84ff('0x73')][_0x84ff('0x23')](_0x39ac73['toString'](),{'type':db[_0x84ff('0x73')][_0x84ff('0x74')][_0x84ff('0x75')]})[_0x84ff('0x1a')](function(_0x4f3f3d){if(!_0x4f3f3d['length']){_0x3feb91=0x0;}else{_0x3feb91=_0x4f3f3d[0x0][_0x84ff('0x13')]||0x0;}return db[_0x84ff('0x73')][_0x84ff('0x23')](_0x2cbf8e['toString'](),{'type':db['sequelize']['QueryTypes'][_0x84ff('0x75')]});})[_0x84ff('0x1a')](function(_0x901178){return{'rows':_0x901178||[],'count':_0x3feb91};});}});}exports[_0x84ff('0x8a')]=function(_0x3f7911,_0xb4af2a){return runReport(_0x3f7911['params'],_0x3f7911['query'],_0x3f7911['options'])['then'](respondWithResult(_0xb4af2a,null))[_0x84ff('0x38')](handleError(_0xb4af2a,null));};exports['runReport']=runReport;exports[_0x84ff('0x23')]=function(_0x13fed9,_0x2cfc9a){var _0x1c56f6=0xa;var _0x2f776f=[_0x84ff('0x87'),_0x84ff('0x3d'),_0x84ff('0x3e'),_0x84ff('0x3f'),'cross_join'];var _0x386def={'SUM':'SUM(%s)','COUNT':_0x84ff('0x41'),'COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0x84ff('0x77'),'MIN':_0x84ff('0x43'),'AVG':_0x84ff('0x44'),'GROUP_CONCAT':_0x84ff('0x45'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0x84ff('0x8b')};var _0x2c57e9={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0x84ff('0x48'),'HOUR':_0x84ff('0x49'),'ROUND':_0x84ff('0x4a'),'UNIX_TIMESTAMP':_0x84ff('0x4b')};var _0x390fd5=function(_0x22463f){return!_[_0x84ff('0x4c')]([_0x84ff('0x4d'),_0x84ff('0x4e'),'IS\x20EMPTY','IS\x20NOT\x20EMPTY'],_0x22463f);};var _0x2618d9=function(_0x3231d9){if(!_0x3231d9||!_0x3231d9['rules'][_0x84ff('0x2a')]){return'';}for(var _0x1da655='(',_0x4c251b=0x0;_0x4c251b<_0x3231d9[_0x84ff('0x50')]['length'];_0x4c251b+=0x1){_0x4c251b>0x0&&(_0x1da655+='\x20'+_0x3231d9[_0x84ff('0x51')]+'\x20');_0x1da655+=_0x3231d9[_0x84ff('0x50')][_0x4c251b][_0x84ff('0x52')]?_0x2618d9(_0x3231d9[_0x84ff('0x50')][_0x4c251b]['group']):_0x3231d9[_0x84ff('0x50')][_0x4c251b][_0x84ff('0x53')]+'\x20'+_0x3231d9[_0x84ff('0x50')][_0x4c251b][_0x84ff('0x54')]+(_0x390fd5(_0x3231d9['rules'][_0x4c251b][_0x84ff('0x54')])?'\x20'+_0x3231d9[_0x84ff('0x50')][_0x4c251b][_0x84ff('0x55')]:'');}return _0x1da655+')';};var _0x129542={'where':{'id':_0x13fed9['params']['id']}},_0x11afce,_0x43499c,_0x4c6e09,_0x137469,_0x1ec345;_0x129542=_[_0x84ff('0x30')]({},_0x129542,_0x13fed9[_0x84ff('0x33')]);return db[_0x84ff('0x1f')][_0x84ff('0x3c')](_0x129542)['then'](function(_0x6304e7){if(_0x6304e7){_0x11afce=_0x6304e7;return _0x6304e7['getFields']();}return null;})['then'](function(_0xa61219){if(_0xa61219){if(!_0xa61219[_0x84ff('0x2a')]){throw new db[(_0x84ff('0x57'))]['ValidationError']('Please\x20insert\x20at\x20least\x20one\x20field!');}_0x43499c=_0xa61219;return db[_0x84ff('0x5a')]['findAll']({'raw':!![]});}return null;})[_0x84ff('0x1a')](function(_0x59c298){if(_0x59c298){_0x4c6e09=_['keyBy'](_0x59c298,'id');var _0x19f8ce;var _0x32f7ee=squel[_0x84ff('0x5c')]();_0x32f7ee[_0x84ff('0x5d')](_0x11afce[_0x84ff('0x5e')]);for(var _0x44b8c3=0x0;_0x44b8c3<_0x43499c[_0x84ff('0x2a')];_0x44b8c3+=0x1){_0x19f8ce=_0x43499c[_0x44b8c3][_0x84ff('0x5f')]?_0x4c6e09[_0x43499c[_0x44b8c3][_0x84ff('0x5f')]][_0x84ff('0x60')]:_0x43499c[_0x44b8c3][_0x84ff('0x53')];_0x19f8ce=_0x43499c[_0x44b8c3][_0x84ff('0x61')]?_['replace'](_0x386def[_0x43499c[_0x44b8c3][_0x84ff('0x61')]],'%s',_0x19f8ce):_0x19f8ce;_0x19f8ce=_0x43499c[_0x44b8c3]['format']?_[_0x84ff('0x62')](_0x2c57e9[_0x43499c[_0x44b8c3]['format']],'%s',_0x19f8ce):_0x19f8ce;if(_0x43499c[_0x44b8c3][_0x84ff('0x64')]){_0x32f7ee['group'](_0x19f8ce);}_0x43499c[_0x44b8c3][_0x84ff('0x65')]&&_0x32f7ee['order'](_0x19f8ce,_0x43499c[_0x44b8c3][_0x84ff('0x65')]===_0x84ff('0x66')?![]:!![]);_0x32f7ee['field'](_0x19f8ce,_0x43499c[_0x44b8c3][_0x84ff('0x79')]||_0x19f8ce);}if(_0x11afce[_0x84ff('0x67')]){_0x11afce[_0x84ff('0x67')]=JSON['parse'](_0x11afce[_0x84ff('0x67')]);for(var _0x455405=0x0;_0x455405<_0x11afce['joins']['length'];_0x455405+=0x1){if(_0x11afce[_0x84ff('0x67')][_0x455405][_0x84ff('0x69')]&&_[_0x84ff('0x4c')](_0x2f776f,_0x11afce[_0x84ff('0x67')][_0x455405][_0x84ff('0x69')])&&_0x11afce[_0x84ff('0x67')][_0x455405][_0x84ff('0x6a')]&&_0x11afce['joins'][_0x455405]['foreignTable']&&_0x11afce[_0x84ff('0x67')][_0x455405][_0x84ff('0x6c')]){_0x32f7ee[_0x11afce[_0x84ff('0x67')][_0x455405][_0x84ff('0x69')]](_0x11afce[_0x84ff('0x67')][_0x455405][_0x84ff('0x6b')],null,util[_0x84ff('0x63')]('%s.%s\x20=\x20%s.%s',_0x11afce['table'],_0x11afce[_0x84ff('0x67')][_0x455405][_0x84ff('0x6a')],_0x11afce[_0x84ff('0x67')][_0x455405][_0x84ff('0x6b')],_0x11afce[_0x84ff('0x67')][_0x455405][_0x84ff('0x6c')]));}}}if(_0x11afce[_0x84ff('0x6e')]){_0x11afce[_0x84ff('0x6e')]=JSON[_0x84ff('0x68')](_0x11afce['conditions']);_0x32f7ee['where'](_0x2618d9(_0x11afce[_0x84ff('0x6e')][_0x84ff('0x52')]));}_0x1ec345=_0x32f7ee[_0x84ff('0x6f')]();_0x32f7ee[_0x84ff('0x15')](_0x1c56f6);_0x32f7ee[_0x84ff('0x14')](0x0);logger['debug'](_0x84ff('0x71'),_0x32f7ee[_0x84ff('0x72')]());return db['sequelize'][_0x84ff('0x23')](_0x32f7ee[_0x84ff('0x72')](),{'type':db[_0x84ff('0x73')][_0x84ff('0x74')][_0x84ff('0x75')]});}})[_0x84ff('0x1a')](function(){return{'sql':_0x1ec345['toString']()};})['then'](respondWithResult(_0x2cfc9a,null))[_0x84ff('0x38')](handleError(_0x2cfc9a,null));};
\ No newline at end of file
+var _0xba92=['fast-json-patch','request-promise','bluebird','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','status','count','offset','limit','set','Content-Range','apply','reject','save','then','end','sendStatus','error','stack','send','index','AnalyticCustomReport','rawAttributes','model','keys','query','dateEnd','dateStart','intersection','fields','hasOwnProperty','nolimit','order','sort','where','pick','filters','add','day','merge','filter','map','attributes','includeAll','include','rows','catch','show','length','options','find','create','body','params','destroy','preview','left_join','right_join','outer_join','cross_join','COUNT(%s)','MAX(%s)','MIN(%s)','AVG(%s)','GROUP_CONCAT(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','SEC_TO_TIME(%s)','DATE(%s)','HOUR(%s)','ROUND(%s)','UNIX_TIMESTAMP(%s)','includes','IS\x20NULL','IS\x20NOT\x20NULL','rules','operator','group','field','condition','value','getFields','Sequelize','Please\x20insert\x20at\x20least\x20one\x20field!','AnalyticMetric','findAll','keyBy','select','from','table','MetricId','metric','function','replace','format','groupBy','orderBy','DESC','alias','joins','parse','type','foreignTable','%s.%s\x20=\x20%s.%s','parentKey','conditions','clone','debug','Limited\x20Query:','toString','sequelize','QueryTypes','SELECT','SUM(%s)','COUNT(DISTINCT\x20%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','IS\x20EMPTY','ValidationError','foreignKey','No\x20Data!','web','fullPath','name','%s-%s.%s','generate','csv','.createdAt\x20BETWEEN\x20?\x20AND\x20?','endDate','info','Run\x20Query:','child_process','fork','join','../../components/export/','../../files/reports','COUNT(*)','runReport','IS\x20NOT\x20EMPTY'];(function(_0x4a3623,_0x21cce8){var _0x471ec8=function(_0x498659){while(--_0x498659){_0x4a3623['push'](_0x4a3623['shift']());}};_0x471ec8(++_0x21cce8);}(_0xba92,0x1c2));var _0x2ba9=function(_0x3f63ad,_0x1dd4dd){_0x3f63ad=_0x3f63ad-0x0;var _0x4deab0=_0xba92[_0x3f63ad];return _0x4deab0;};'use strict';var jsonpatch=require(_0x2ba9('0x0'));var rp=require(_0x2ba9('0x1'));var moment=require('moment');var BPromise=require(_0x2ba9('0x2'));var Mustache=require('mustache');var util=require(_0x2ba9('0x3'));var path=require(_0x2ba9('0x4'));var sox=require(_0x2ba9('0x5'));var csv=require(_0x2ba9('0x6'));var ejs=require(_0x2ba9('0x7'));var fs=require('fs');var _=require(_0x2ba9('0x8'));var squel=require(_0x2ba9('0x9'));var crypto=require('crypto');var jsforce=require(_0x2ba9('0xa'));var deskjs=require(_0x2ba9('0xb'));var toCsv=require(_0x2ba9('0x6'));var querystring=require(_0x2ba9('0xc'));var Papa=require('papaparse');var qs=require(_0x2ba9('0xd'));var logger=require(_0x2ba9('0xe'))(_0x2ba9('0xf'));var utils=require(_0x2ba9('0x10'));var config=require(_0x2ba9('0x11'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4a9ef7,_0x276ef3){_0x276ef3=_0x276ef3||0xcc;return function(_0x40905a){if(_0x40905a){return _0x4a9ef7['sendStatus'](_0x276ef3);}return _0x4a9ef7[_0x2ba9('0x12')](_0x276ef3)['end']();};}function respondWithResult(_0x438e84,_0x30b65b){_0x30b65b=_0x30b65b||0xc8;return function(_0x542588){if(_0x542588){return _0x438e84[_0x2ba9('0x12')](_0x30b65b)['json'](_0x542588);}};}function respondWithFilteredResult(_0x16e290,_0x41fd68){return function(_0x710245){if(_0x710245){var _0xb28993=_0x710245[_0x2ba9('0x13')],_0x3da656=_0x41fd68[_0x2ba9('0x14')],_0x52cde7=_0x41fd68['offset']+_0x41fd68[_0x2ba9('0x15')],_0x36ae92;if(_0x52cde7>=_0xb28993){_0x52cde7=_0xb28993;_0x36ae92=0xc8;}else{_0x36ae92=0xce;}_0x16e290[_0x2ba9('0x12')](_0x36ae92);return _0x16e290[_0x2ba9('0x16')](_0x2ba9('0x17'),_0x3da656+'-'+_0x52cde7+'/'+_0xb28993)['json'](_0x710245);}return null;};}function patchUpdates(_0x1c3476){return function(_0x3ce6aa){try{jsonpatch[_0x2ba9('0x18')](_0x3ce6aa,_0x1c3476,!![]);}catch(_0x4648fd){return BPromise[_0x2ba9('0x19')](_0x4648fd);}return _0x3ce6aa[_0x2ba9('0x1a')]();};}function saveUpdates(_0x2de748,_0x3e4934){return function(_0xf302ce){if(_0xf302ce){return _0xf302ce['update'](_0x2de748)[_0x2ba9('0x1b')](function(_0x54bb50){return _0x54bb50;});}return null;};}function removeEntity(_0xae77b6,_0x174c24){return function(_0xfea267){if(_0xfea267){return _0xfea267['destroy']()[_0x2ba9('0x1b')](function(){_0xae77b6['status'](0xcc)[_0x2ba9('0x1c')]();});}};}function handleEntityNotFound(_0x37b5b7,_0x6341ef){return function(_0x50d177){if(!_0x50d177){_0x37b5b7[_0x2ba9('0x1d')](0x194);}return _0x50d177;};}function handleError(_0x18f338,_0x742b13){_0x742b13=_0x742b13||0x1f4;return function(_0x3d5ab9){logger[_0x2ba9('0x1e')](_0x3d5ab9[_0x2ba9('0x1f')]);if(_0x3d5ab9['name']){delete _0x3d5ab9['name'];}_0x18f338['status'](_0x742b13)[_0x2ba9('0x20')](_0x3d5ab9);};}exports[_0x2ba9('0x21')]=function(_0x27579f,_0x2dda44){var _0x2d9602={},_0x20864b={},_0x46a54c={'count':0x0,'rows':[]};var _0x5a4a8f=db[_0x2ba9('0x22')][_0x2ba9('0x23')];_0x20864b[_0x2ba9('0x24')]=_[_0x2ba9('0x25')](_0x5a4a8f);var _0x1778e6={'dateStart':_0x27579f[_0x2ba9('0x26')]['dateStart'],'dateEnd':_0x27579f['query'][_0x2ba9('0x27')]};delete _0x27579f[_0x2ba9('0x26')][_0x2ba9('0x28')];delete _0x27579f[_0x2ba9('0x26')][_0x2ba9('0x27')];_0x20864b[_0x2ba9('0x26')]=_['keys'](_0x27579f[_0x2ba9('0x26')]);_0x20864b['filters']=_['intersection'](_0x20864b[_0x2ba9('0x24')],_0x20864b[_0x2ba9('0x26')]);_0x2d9602['attributes']=_[_0x2ba9('0x29')](_0x20864b[_0x2ba9('0x24')],qs['fields'](_0x27579f[_0x2ba9('0x26')][_0x2ba9('0x2a')]));_0x2d9602['attributes']=_0x2d9602['attributes']['length']?_0x2d9602['attributes']:_0x20864b[_0x2ba9('0x24')];if(!_0x27579f['query'][_0x2ba9('0x2b')](_0x2ba9('0x2c'))){_0x2d9602[_0x2ba9('0x15')]=qs[_0x2ba9('0x15')](_0x27579f[_0x2ba9('0x26')][_0x2ba9('0x15')]);_0x2d9602[_0x2ba9('0x14')]=qs['offset'](_0x27579f[_0x2ba9('0x26')][_0x2ba9('0x14')]);}_0x2d9602[_0x2ba9('0x2d')]=qs[_0x2ba9('0x2e')](_0x27579f[_0x2ba9('0x26')]['sort']);_0x2d9602[_0x2ba9('0x2f')]=qs['filters'](_[_0x2ba9('0x30')](_0x27579f[_0x2ba9('0x26')],_0x20864b[_0x2ba9('0x31')]));if(_0x1778e6['dateStart']){if(_0x1778e6[_0x2ba9('0x27')]){_0x1778e6[_0x2ba9('0x27')]=moment(_0x1778e6[_0x2ba9('0x27')])[_0x2ba9('0x32')](0x1,_0x2ba9('0x33'));}else{_0x1778e6[_0x2ba9('0x27')]=moment(_0x1778e6['dateStart'])['add'](0x1,_0x2ba9('0x33'));}_[_0x2ba9('0x34')](_0x2d9602['where'],{'createdAt':{'$gte':_0x1778e6[_0x2ba9('0x28')],'$lte':_0x1778e6[_0x2ba9('0x27')]}});}if(_0x27579f[_0x2ba9('0x26')][_0x2ba9('0x35')]){_0x2d9602['where']=_[_0x2ba9('0x34')](_0x2d9602['where'],{'$or':_[_0x2ba9('0x36')](_0x2d9602[_0x2ba9('0x37')],function(_0x1dfed5){var _0x1aaa66={};_0x1aaa66[_0x1dfed5]={'$like':'%'+_0x27579f['query'][_0x2ba9('0x35')]+'%'};return _0x1aaa66;})});}_0x2d9602=_[_0x2ba9('0x34')]({},_0x2d9602,_0x27579f['options']);var _0x5853bc={'where':_0x2d9602[_0x2ba9('0x2f')]};return db[_0x2ba9('0x22')]['count'](_0x5853bc)['then'](function(_0x409c31){_0x46a54c['count']=_0x409c31;if(_0x27579f['query'][_0x2ba9('0x38')]){_0x2d9602[_0x2ba9('0x39')]=[{'all':!![]}];}return db[_0x2ba9('0x22')]['findAll'](_0x2d9602);})['then'](function(_0x80a6ea){_0x46a54c[_0x2ba9('0x3a')]=_0x80a6ea;return _0x46a54c;})[_0x2ba9('0x1b')](respondWithFilteredResult(_0x2dda44,_0x2d9602))[_0x2ba9('0x3b')](handleError(_0x2dda44,null));};exports[_0x2ba9('0x3c')]=function(_0x451919,_0x4d2fe4){var _0x23f578={'raw':![],'where':{'id':_0x451919['params']['id']}},_0x575d98={};_0x575d98[_0x2ba9('0x24')]=_[_0x2ba9('0x25')](db[_0x2ba9('0x22')][_0x2ba9('0x23')]);_0x575d98[_0x2ba9('0x26')]=_[_0x2ba9('0x25')](_0x451919[_0x2ba9('0x26')]);_0x575d98['filters']=_[_0x2ba9('0x29')](_0x575d98[_0x2ba9('0x24')],_0x575d98[_0x2ba9('0x26')]);_0x23f578['attributes']=_[_0x2ba9('0x29')](_0x575d98[_0x2ba9('0x24')],qs['fields'](_0x451919['query'][_0x2ba9('0x2a')]));_0x23f578[_0x2ba9('0x37')]=_0x23f578['attributes'][_0x2ba9('0x3d')]?_0x23f578[_0x2ba9('0x37')]:_0x575d98[_0x2ba9('0x24')];if(_0x451919[_0x2ba9('0x26')]['includeAll']){_0x23f578[_0x2ba9('0x39')]=[{'all':!![]}];}_0x23f578=_[_0x2ba9('0x34')]({},_0x23f578,_0x451919[_0x2ba9('0x3e')]);return db[_0x2ba9('0x22')][_0x2ba9('0x3f')](_0x23f578)['then'](handleEntityNotFound(_0x4d2fe4,null))[_0x2ba9('0x1b')](respondWithResult(_0x4d2fe4,null))[_0x2ba9('0x3b')](handleError(_0x4d2fe4,null));};exports[_0x2ba9('0x40')]=function(_0x3a37b8,_0x23261b){return db[_0x2ba9('0x22')]['create'](_0x3a37b8[_0x2ba9('0x41')],{})['then'](respondWithResult(_0x23261b,0xc9))[_0x2ba9('0x3b')](handleError(_0x23261b,null));};exports['update']=function(_0xff2a7,_0x1fd0e4){if(_0xff2a7[_0x2ba9('0x41')]['id']){delete _0xff2a7[_0x2ba9('0x41')]['id'];}return db['AnalyticCustomReport']['find']({'where':{'id':_0xff2a7[_0x2ba9('0x42')]['id']}})['then'](handleEntityNotFound(_0x1fd0e4,null))[_0x2ba9('0x1b')](saveUpdates(_0xff2a7['body'],null))[_0x2ba9('0x1b')](respondWithResult(_0x1fd0e4,null))[_0x2ba9('0x3b')](handleError(_0x1fd0e4,null));};exports[_0x2ba9('0x43')]=function(_0x9d9d06,_0x266276){return db[_0x2ba9('0x22')][_0x2ba9('0x3f')]({'where':{'id':_0x9d9d06[_0x2ba9('0x42')]['id']}})['then'](handleEntityNotFound(_0x266276,null))[_0x2ba9('0x1b')](removeEntity(_0x266276,null))[_0x2ba9('0x3b')](handleError(_0x266276,null));};exports[_0x2ba9('0x44')]=function(_0x596ed2,_0x253e62){var _0x34e002=0xa;var _0x4a65a8=['join',_0x2ba9('0x45'),_0x2ba9('0x46'),_0x2ba9('0x47'),_0x2ba9('0x48')];var _0x394edd={'SUM':'SUM(%s)','COUNT':_0x2ba9('0x49'),'COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0x2ba9('0x4a'),'MIN':_0x2ba9('0x4b'),'AVG':_0x2ba9('0x4c'),'GROUP_CONCAT':_0x2ba9('0x4d'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0x2ba9('0x4e')};var _0x4807e4={'SEC_TO_TIME':_0x2ba9('0x4f'),'DATE':_0x2ba9('0x50'),'HOUR':_0x2ba9('0x51'),'ROUND':_0x2ba9('0x52'),'UNIX_TIMESTAMP':_0x2ba9('0x53')};var _0x38907c=function(_0x14dd3e){return!_[_0x2ba9('0x54')]([_0x2ba9('0x55'),_0x2ba9('0x56'),'IS\x20EMPTY','IS\x20NOT\x20EMPTY'],_0x14dd3e);};var _0xc8e2fb=function(_0x21a86a){if(!_0x21a86a||!_0x21a86a['rules'][_0x2ba9('0x3d')]){return'';}for(var _0xcd96c1='(',_0x5e7bac=0x0;_0x5e7bac<_0x21a86a[_0x2ba9('0x57')]['length'];_0x5e7bac+=0x1){_0x5e7bac>0x0&&(_0xcd96c1+='\x20'+_0x21a86a[_0x2ba9('0x58')]+'\x20');_0xcd96c1+=_0x21a86a['rules'][_0x5e7bac][_0x2ba9('0x59')]?_0xc8e2fb(_0x21a86a['rules'][_0x5e7bac][_0x2ba9('0x59')]):_0x21a86a[_0x2ba9('0x57')][_0x5e7bac][_0x2ba9('0x5a')]+'\x20'+_0x21a86a[_0x2ba9('0x57')][_0x5e7bac][_0x2ba9('0x5b')]+(_0x38907c(_0x21a86a['rules'][_0x5e7bac]['condition'])?'\x20'+_0x21a86a[_0x2ba9('0x57')][_0x5e7bac][_0x2ba9('0x5c')]:'');}return _0xcd96c1+')';};var _0x47a937={'where':{'id':_0x596ed2[_0x2ba9('0x42')]['id']}},_0x40abb3,_0x1cf277,_0x14ddb8,_0x4881c3,_0x45fa8a;_0x47a937=_[_0x2ba9('0x34')]({},_0x47a937,_0x596ed2[_0x2ba9('0x3e')]);return db[_0x2ba9('0x22')]['find'](_0x47a937)[_0x2ba9('0x1b')](function(_0x4ccea2){if(_0x4ccea2){_0x40abb3=_0x4ccea2;return _0x4ccea2[_0x2ba9('0x5d')]();}return null;})[_0x2ba9('0x1b')](function(_0x486aa1){if(_0x486aa1){if(!_0x486aa1[_0x2ba9('0x3d')]){throw new db[(_0x2ba9('0x5e'))]['ValidationError'](_0x2ba9('0x5f'));}_0x1cf277=_0x486aa1;return db[_0x2ba9('0x60')][_0x2ba9('0x61')]({'raw':!![]});}return null;})[_0x2ba9('0x1b')](function(_0x274d35){if(_0x274d35){_0x14ddb8=_[_0x2ba9('0x62')](_0x274d35,'id');var _0x46c231;var _0x559247=squel[_0x2ba9('0x63')]();_0x559247[_0x2ba9('0x64')](_0x40abb3[_0x2ba9('0x65')]);for(var _0x95339b=0x0;_0x95339b<_0x1cf277[_0x2ba9('0x3d')];_0x95339b+=0x1){_0x46c231=_0x1cf277[_0x95339b][_0x2ba9('0x66')]?_0x14ddb8[_0x1cf277[_0x95339b]['MetricId']][_0x2ba9('0x67')]:_0x1cf277[_0x95339b][_0x2ba9('0x5a')];_0x46c231=_0x1cf277[_0x95339b][_0x2ba9('0x68')]?_[_0x2ba9('0x69')](_0x394edd[_0x1cf277[_0x95339b][_0x2ba9('0x68')]],'%s',_0x46c231):_0x46c231;_0x46c231=_0x1cf277[_0x95339b][_0x2ba9('0x6a')]?_[_0x2ba9('0x69')](_0x4807e4[_0x1cf277[_0x95339b][_0x2ba9('0x6a')]],'%s',_0x46c231):_0x46c231;if(_0x1cf277[_0x95339b][_0x2ba9('0x6b')]){_0x559247[_0x2ba9('0x59')](_0x46c231);}_0x1cf277[_0x95339b][_0x2ba9('0x6c')]&&_0x559247['order'](_0x46c231,_0x1cf277[_0x95339b][_0x2ba9('0x6c')]===_0x2ba9('0x6d')?![]:!![]);_0x559247[_0x2ba9('0x5a')](_0x46c231,_0x1cf277[_0x95339b][_0x2ba9('0x6e')]||_0x46c231);}if(_0x40abb3[_0x2ba9('0x6f')]){_0x40abb3[_0x2ba9('0x6f')]=JSON[_0x2ba9('0x70')](_0x40abb3[_0x2ba9('0x6f')]);for(var _0x2973fd=0x0;_0x2973fd<_0x40abb3['joins'][_0x2ba9('0x3d')];_0x2973fd+=0x1){if(_0x40abb3[_0x2ba9('0x6f')][_0x2973fd][_0x2ba9('0x71')]&&_[_0x2ba9('0x54')](_0x4a65a8,_0x40abb3[_0x2ba9('0x6f')][_0x2973fd][_0x2ba9('0x71')])&&_0x40abb3[_0x2ba9('0x6f')][_0x2973fd]['parentKey']&&_0x40abb3[_0x2ba9('0x6f')][_0x2973fd][_0x2ba9('0x72')]&&_0x40abb3[_0x2ba9('0x6f')][_0x2973fd]['foreignKey']){_0x559247[_0x40abb3[_0x2ba9('0x6f')][_0x2973fd][_0x2ba9('0x71')]](_0x40abb3[_0x2ba9('0x6f')][_0x2973fd]['foreignTable'],null,util[_0x2ba9('0x6a')](_0x2ba9('0x73'),_0x40abb3['table'],_0x40abb3[_0x2ba9('0x6f')][_0x2973fd][_0x2ba9('0x74')],_0x40abb3[_0x2ba9('0x6f')][_0x2973fd][_0x2ba9('0x72')],_0x40abb3['joins'][_0x2973fd]['foreignKey']));}}}if(_0x40abb3['conditions']){_0x40abb3[_0x2ba9('0x75')]=JSON[_0x2ba9('0x70')](_0x40abb3[_0x2ba9('0x75')]);_0x559247[_0x2ba9('0x2f')](_0xc8e2fb(_0x40abb3[_0x2ba9('0x75')][_0x2ba9('0x59')]));}_0x45fa8a=_0x559247[_0x2ba9('0x76')]();_0x559247[_0x2ba9('0x15')](_0x34e002);_0x559247[_0x2ba9('0x14')](0x0);logger[_0x2ba9('0x77')](_0x2ba9('0x78'),_0x559247[_0x2ba9('0x79')]());return db[_0x2ba9('0x7a')][_0x2ba9('0x26')](_0x559247[_0x2ba9('0x79')](),{'type':db[_0x2ba9('0x7a')][_0x2ba9('0x7b')][_0x2ba9('0x7c')]});}})[_0x2ba9('0x1b')](respondWithResult(_0x253e62,null))['catch'](handleError(_0x253e62,null));};function runReport(_0xad40a7,_0x45a9a5,_0x172a8c){var _0x1fbe0e=_0x45a9a5['name'];var _0x1e0544=0xa;var _0x5b9d02=['join',_0x2ba9('0x45'),_0x2ba9('0x46'),'outer_join',_0x2ba9('0x48')];var _0x188800={'SUM':_0x2ba9('0x7d'),'COUNT':'COUNT(%s)','COUNT DISTINCT':_0x2ba9('0x7e'),'MAX':_0x2ba9('0x4a'),'MIN':_0x2ba9('0x4b'),'AVG':'AVG(%s)','GROUP_CONCAT':_0x2ba9('0x4d'),'GROUP_CONCAT ASC':_0x2ba9('0x7f'),'GROUP_CONCAT DESC':_0x2ba9('0x4e')};var _0x443168={'SEC_TO_TIME':_0x2ba9('0x4f'),'DATE':_0x2ba9('0x50'),'HOUR':'HOUR(%s)','ROUND':_0x2ba9('0x52'),'UNIX_TIMESTAMP':_0x2ba9('0x53')};var _0x422f45=function(_0x40dce1){return!_[_0x2ba9('0x54')](['IS\x20NULL',_0x2ba9('0x56'),_0x2ba9('0x80'),'IS\x20NOT\x20EMPTY'],_0x40dce1);};var _0x525864=function(_0x4178ce){if(!_0x4178ce||!_0x4178ce[_0x2ba9('0x57')][_0x2ba9('0x3d')]){return'';}for(var _0xc3fd2b='(',_0x117aff=0x0;_0x117aff<_0x4178ce['rules'][_0x2ba9('0x3d')];_0x117aff+=0x1){_0x117aff>0x0&&(_0xc3fd2b+='\x20'+_0x4178ce[_0x2ba9('0x58')]+'\x20');_0xc3fd2b+=_0x4178ce[_0x2ba9('0x57')][_0x117aff][_0x2ba9('0x59')]?_0x525864(_0x4178ce['rules'][_0x117aff][_0x2ba9('0x59')]):_0x4178ce['rules'][_0x117aff][_0x2ba9('0x5a')]+'\x20'+_0x4178ce[_0x2ba9('0x57')][_0x117aff][_0x2ba9('0x5b')]+(_0x422f45(_0x4178ce[_0x2ba9('0x57')][_0x117aff][_0x2ba9('0x5b')])?'\x20'+_0x4178ce[_0x2ba9('0x57')][_0x117aff][_0x2ba9('0x5c')]:'');}return _0xc3fd2b+')';};var _0xd4c3f7={'where':{'id':_0xad40a7['id']}},_0x183fe8,_0x1a405b,_0x41bccf,_0x503cbe,_0x28dc67;_0xd4c3f7=_[_0x2ba9('0x34')]({},_0xd4c3f7,_0x172a8c);return db[_0x2ba9('0x22')]['find'](_0xd4c3f7)[_0x2ba9('0x1b')](function(_0x5c0f86){if(_0x5c0f86){_0x183fe8=_0x5c0f86;return _0x5c0f86[_0x2ba9('0x5d')]();}return null;})[_0x2ba9('0x1b')](function(_0x590bec){if(_0x590bec){if(!_0x590bec[_0x2ba9('0x3d')]){throw new db[(_0x2ba9('0x5e'))][(_0x2ba9('0x81'))](_0x2ba9('0x5f'));}_0x1a405b=_0x590bec;return db[_0x2ba9('0x60')]['findAll']({'raw':!![]});}return null;})['then'](function(_0x58c504){if(_0x58c504){_0x41bccf=_[_0x2ba9('0x62')](_0x58c504,'id');var _0x4682fb;var _0x10419f=squel['select']();_0x10419f['from'](_0x183fe8[_0x2ba9('0x65')]);for(var _0x3d192b=0x0;_0x3d192b<_0x1a405b[_0x2ba9('0x3d')];_0x3d192b+=0x1){_0x4682fb=_0x1a405b[_0x3d192b][_0x2ba9('0x66')]?_0x41bccf[_0x1a405b[_0x3d192b][_0x2ba9('0x66')]][_0x2ba9('0x67')]:_0x1a405b[_0x3d192b][_0x2ba9('0x5a')];_0x4682fb=_0x1a405b[_0x3d192b][_0x2ba9('0x68')]?_[_0x2ba9('0x69')](_0x188800[_0x1a405b[_0x3d192b][_0x2ba9('0x68')]],'%s',_0x4682fb):_0x4682fb;_0x4682fb=_0x1a405b[_0x3d192b][_0x2ba9('0x6a')]?_[_0x2ba9('0x69')](_0x443168[_0x1a405b[_0x3d192b][_0x2ba9('0x6a')]],'%s',_0x4682fb):_0x4682fb;if(_0x1a405b[_0x3d192b][_0x2ba9('0x6b')]){_0x10419f[_0x2ba9('0x59')](_0x4682fb);}_0x1a405b[_0x3d192b][_0x2ba9('0x6c')]&&_0x10419f['order'](_0x4682fb,_0x1a405b[_0x3d192b][_0x2ba9('0x6c')]===_0x2ba9('0x6d')?![]:!![]);_0x10419f[_0x2ba9('0x5a')](_0x4682fb,_0x1a405b[_0x3d192b][_0x2ba9('0x6e')]||_0x4682fb);}if(_0x183fe8['joins']){_0x183fe8[_0x2ba9('0x6f')]=JSON['parse'](_0x183fe8[_0x2ba9('0x6f')]);for(var _0x126689=0x0;_0x126689<_0x183fe8[_0x2ba9('0x6f')][_0x2ba9('0x3d')];_0x126689+=0x1){if(_0x183fe8[_0x2ba9('0x6f')][_0x126689][_0x2ba9('0x71')]&&_['includes'](_0x5b9d02,_0x183fe8[_0x2ba9('0x6f')][_0x126689][_0x2ba9('0x71')])&&_0x183fe8[_0x2ba9('0x6f')][_0x126689][_0x2ba9('0x74')]&&_0x183fe8[_0x2ba9('0x6f')][_0x126689]['foreignTable']&&_0x183fe8[_0x2ba9('0x6f')][_0x126689][_0x2ba9('0x82')]){_0x10419f[_0x183fe8['joins'][_0x126689][_0x2ba9('0x71')]](_0x183fe8[_0x2ba9('0x6f')][_0x126689][_0x2ba9('0x72')],null,util[_0x2ba9('0x6a')](_0x2ba9('0x73'),_0x183fe8['table'],_0x183fe8[_0x2ba9('0x6f')][_0x126689][_0x2ba9('0x74')],_0x183fe8['joins'][_0x126689][_0x2ba9('0x72')],_0x183fe8['joins'][_0x126689]['foreignKey']));}}}if(_0x183fe8['conditions']){_0x183fe8[_0x2ba9('0x75')]=JSON[_0x2ba9('0x70')](_0x183fe8[_0x2ba9('0x75')]);_0x10419f[_0x2ba9('0x2f')](_0x525864(_0x183fe8[_0x2ba9('0x75')]['group']));}_0x28dc67=_0x10419f[_0x2ba9('0x76')]();_0x10419f[_0x2ba9('0x15')](_0x1e0544);_0x10419f[_0x2ba9('0x14')](0x0);logger[_0x2ba9('0x77')]('Limited\x20Query:',_0x10419f[_0x2ba9('0x79')]());return db[_0x2ba9('0x7a')]['query'](_0x10419f[_0x2ba9('0x79')](),{'type':db[_0x2ba9('0x7a')]['QueryTypes']['SELECT']});}})[_0x2ba9('0x1b')](function(_0x204090){if(!_0x204090['length']){throw new db[(_0x2ba9('0x5e'))][(_0x2ba9('0x81'))](_0x2ba9('0x83'));}if(_0x45a9a5['output']===_0x2ba9('0x84')){return null;}var _0x82433e=_[_0x2ba9('0x34')](_0x45a9a5,{'name':_0x45a9a5[_0x2ba9('0x85')]||_0x45a9a5[_0x2ba9('0x86')]||_0x183fe8[_0x2ba9('0x86')],'basename':_0x1fbe0e,'savename':util['format'](_0x2ba9('0x87'),_0x45a9a5['name']||_0x183fe8[_0x2ba9('0x86')],require('randomstring')[_0x2ba9('0x88')](0x4),_0x45a9a5['output']||_0x2ba9('0x89'))});return db['AnalyticExtractedReport'][_0x2ba9('0x40')](_0x82433e,{'raw':!![]});})['then'](function(_0x258b22){_0x28dc67[_0x2ba9('0x2f')](_0x183fe8[_0x2ba9('0x65')]+_0x2ba9('0x8a'),_0x45a9a5['startDate'],_0x45a9a5[_0x2ba9('0x8b')]);if(_0x258b22){logger[_0x2ba9('0x8c')](_0x2ba9('0x8d'),_0x28dc67['toString']());require(_0x2ba9('0x8e'))[_0x2ba9('0x8f')](path[_0x2ba9('0x90')](__dirname,_0x2ba9('0x91'),_0x258b22['output']),[_0x258b22['id'],_0x28dc67[_0x2ba9('0x79')](),path[_0x2ba9('0x90')](__dirname,_0x2ba9('0x92'),_0x258b22['savename']),_0x1fbe0e]);return _0x258b22;}else{var _0x141ed8=squel[_0x2ba9('0x63')]();_0x141ed8[_0x2ba9('0x64')]('('+_0x28dc67['toString']()+')','countTable');_0x141ed8[_0x2ba9('0x5a')](_0x2ba9('0x93'),_0x2ba9('0x13'));_0x28dc67[_0x2ba9('0x15')](_0x45a9a5[_0x2ba9('0x15')]||_0x1e0544);_0x28dc67[_0x2ba9('0x14')](_0x45a9a5[_0x2ba9('0x14')]||0x0);return db['sequelize']['query'](_0x141ed8[_0x2ba9('0x79')](),{'type':db['sequelize'][_0x2ba9('0x7b')][_0x2ba9('0x7c')]})[_0x2ba9('0x1b')](function(_0x242801){if(!_0x242801['length']){_0x503cbe=0x0;}else{_0x503cbe=_0x242801[0x0][_0x2ba9('0x13')]||0x0;}return db[_0x2ba9('0x7a')]['query'](_0x28dc67[_0x2ba9('0x79')](),{'type':db[_0x2ba9('0x7a')][_0x2ba9('0x7b')][_0x2ba9('0x7c')]});})[_0x2ba9('0x1b')](function(_0x1b391f){return{'rows':_0x1b391f||[],'count':_0x503cbe};});}});}exports['run']=function(_0x549809,_0x109d72){return runReport(_0x549809[_0x2ba9('0x42')],_0x549809[_0x2ba9('0x26')],_0x549809[_0x2ba9('0x3e')])[_0x2ba9('0x1b')](respondWithResult(_0x109d72,null))[_0x2ba9('0x3b')](handleError(_0x109d72,null));};exports[_0x2ba9('0x94')]=runReport;exports[_0x2ba9('0x26')]=function(_0x3747cd,_0x1b5988){var _0x3102cc=0xa;var _0x4126f6=[_0x2ba9('0x90'),_0x2ba9('0x45'),_0x2ba9('0x46'),_0x2ba9('0x47'),_0x2ba9('0x48')];var _0x2e625b={'SUM':_0x2ba9('0x7d'),'COUNT':_0x2ba9('0x49'),'COUNT DISTINCT':_0x2ba9('0x7e'),'MAX':_0x2ba9('0x4a'),'MIN':_0x2ba9('0x4b'),'AVG':_0x2ba9('0x4c'),'GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':_0x2ba9('0x7f'),'GROUP_CONCAT DESC':_0x2ba9('0x4e')};var _0x134046={'SEC_TO_TIME':_0x2ba9('0x4f'),'DATE':_0x2ba9('0x50'),'HOUR':_0x2ba9('0x51'),'ROUND':_0x2ba9('0x52'),'UNIX_TIMESTAMP':_0x2ba9('0x53')};var _0x41923c=function(_0x45aae7){return!_[_0x2ba9('0x54')]([_0x2ba9('0x55'),_0x2ba9('0x56'),_0x2ba9('0x80'),_0x2ba9('0x95')],_0x45aae7);};var _0x18da89=function(_0x53b24f){if(!_0x53b24f||!_0x53b24f[_0x2ba9('0x57')][_0x2ba9('0x3d')]){return'';}for(var _0x73b23e='(',_0x4ae4ca=0x0;_0x4ae4ca<_0x53b24f[_0x2ba9('0x57')][_0x2ba9('0x3d')];_0x4ae4ca+=0x1){_0x4ae4ca>0x0&&(_0x73b23e+='\x20'+_0x53b24f[_0x2ba9('0x58')]+'\x20');_0x73b23e+=_0x53b24f[_0x2ba9('0x57')][_0x4ae4ca][_0x2ba9('0x59')]?_0x18da89(_0x53b24f[_0x2ba9('0x57')][_0x4ae4ca][_0x2ba9('0x59')]):_0x53b24f[_0x2ba9('0x57')][_0x4ae4ca]['field']+'\x20'+_0x53b24f[_0x2ba9('0x57')][_0x4ae4ca][_0x2ba9('0x5b')]+(_0x41923c(_0x53b24f['rules'][_0x4ae4ca][_0x2ba9('0x5b')])?'\x20'+_0x53b24f[_0x2ba9('0x57')][_0x4ae4ca][_0x2ba9('0x5c')]:'');}return _0x73b23e+')';};var _0x1dea21={'where':{'id':_0x3747cd[_0x2ba9('0x42')]['id']}},_0x2eb65a,_0x360a07,_0x509360,_0x1a07fd,_0xbe5475;_0x1dea21=_[_0x2ba9('0x34')]({},_0x1dea21,_0x3747cd['options']);return db[_0x2ba9('0x22')][_0x2ba9('0x3f')](_0x1dea21)[_0x2ba9('0x1b')](function(_0x422944){if(_0x422944){_0x2eb65a=_0x422944;return _0x422944['getFields']();}return null;})['then'](function(_0x2afb8f){if(_0x2afb8f){if(!_0x2afb8f[_0x2ba9('0x3d')]){throw new db[(_0x2ba9('0x5e'))][(_0x2ba9('0x81'))](_0x2ba9('0x5f'));}_0x360a07=_0x2afb8f;return db[_0x2ba9('0x60')]['findAll']({'raw':!![]});}return null;})[_0x2ba9('0x1b')](function(_0x4434d5){if(_0x4434d5){_0x509360=_[_0x2ba9('0x62')](_0x4434d5,'id');var _0xd5ad7f;var _0x2dc4ce=squel[_0x2ba9('0x63')]();_0x2dc4ce[_0x2ba9('0x64')](_0x2eb65a['table']);for(var _0x24312b=0x0;_0x24312b<_0x360a07[_0x2ba9('0x3d')];_0x24312b+=0x1){_0xd5ad7f=_0x360a07[_0x24312b]['MetricId']?_0x509360[_0x360a07[_0x24312b][_0x2ba9('0x66')]][_0x2ba9('0x67')]:_0x360a07[_0x24312b][_0x2ba9('0x5a')];_0xd5ad7f=_0x360a07[_0x24312b][_0x2ba9('0x68')]?_[_0x2ba9('0x69')](_0x2e625b[_0x360a07[_0x24312b][_0x2ba9('0x68')]],'%s',_0xd5ad7f):_0xd5ad7f;_0xd5ad7f=_0x360a07[_0x24312b]['format']?_[_0x2ba9('0x69')](_0x134046[_0x360a07[_0x24312b][_0x2ba9('0x6a')]],'%s',_0xd5ad7f):_0xd5ad7f;if(_0x360a07[_0x24312b]['groupBy']){_0x2dc4ce['group'](_0xd5ad7f);}_0x360a07[_0x24312b][_0x2ba9('0x6c')]&&_0x2dc4ce['order'](_0xd5ad7f,_0x360a07[_0x24312b]['orderBy']===_0x2ba9('0x6d')?![]:!![]);_0x2dc4ce[_0x2ba9('0x5a')](_0xd5ad7f,_0x360a07[_0x24312b][_0x2ba9('0x6e')]||_0xd5ad7f);}if(_0x2eb65a[_0x2ba9('0x6f')]){_0x2eb65a[_0x2ba9('0x6f')]=JSON[_0x2ba9('0x70')](_0x2eb65a[_0x2ba9('0x6f')]);for(var _0x38a1e9=0x0;_0x38a1e9<_0x2eb65a[_0x2ba9('0x6f')][_0x2ba9('0x3d')];_0x38a1e9+=0x1){if(_0x2eb65a[_0x2ba9('0x6f')][_0x38a1e9][_0x2ba9('0x71')]&&_[_0x2ba9('0x54')](_0x4126f6,_0x2eb65a[_0x2ba9('0x6f')][_0x38a1e9]['type'])&&_0x2eb65a['joins'][_0x38a1e9][_0x2ba9('0x74')]&&_0x2eb65a['joins'][_0x38a1e9]['foreignTable']&&_0x2eb65a['joins'][_0x38a1e9]['foreignKey']){_0x2dc4ce[_0x2eb65a['joins'][_0x38a1e9][_0x2ba9('0x71')]](_0x2eb65a['joins'][_0x38a1e9]['foreignTable'],null,util[_0x2ba9('0x6a')](_0x2ba9('0x73'),_0x2eb65a[_0x2ba9('0x65')],_0x2eb65a[_0x2ba9('0x6f')][_0x38a1e9][_0x2ba9('0x74')],_0x2eb65a[_0x2ba9('0x6f')][_0x38a1e9]['foreignTable'],_0x2eb65a[_0x2ba9('0x6f')][_0x38a1e9][_0x2ba9('0x82')]));}}}if(_0x2eb65a[_0x2ba9('0x75')]){_0x2eb65a[_0x2ba9('0x75')]=JSON[_0x2ba9('0x70')](_0x2eb65a[_0x2ba9('0x75')]);_0x2dc4ce['where'](_0x18da89(_0x2eb65a[_0x2ba9('0x75')][_0x2ba9('0x59')]));}_0xbe5475=_0x2dc4ce['clone']();_0x2dc4ce[_0x2ba9('0x15')](_0x3102cc);_0x2dc4ce[_0x2ba9('0x14')](0x0);logger['debug'](_0x2ba9('0x78'),_0x2dc4ce[_0x2ba9('0x79')]());return db[_0x2ba9('0x7a')]['query'](_0x2dc4ce[_0x2ba9('0x79')](),{'type':db[_0x2ba9('0x7a')][_0x2ba9('0x7b')]['SELECT']});}})[_0x2ba9('0x1b')](function(){return{'sql':_0xbe5475[_0x2ba9('0x79')]()};})[_0x2ba9('0x1b')](respondWithResult(_0x1b5988,null))[_0x2ba9('0x3b')](handleError(_0x1b5988,null));};
\ No newline at end of file
index 1ca95bd..dd0d68d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xefa0=['exports','define','AnalyticCustomReport','analytics_custom_reports','lodash','moment','bluebird','request-promise','./analyticCustomReport.attributes'];(function(_0x3eb6e0,_0x4f11a2){var _0x478c07=function(_0x3d8ba6){while(--_0x3d8ba6){_0x3eb6e0['push'](_0x3eb6e0['shift']());}};_0x478c07(++_0x4f11a2);}(_0xefa0,0x1ab));var _0x0efa=function(_0x46698a,_0x8de1e4){_0x46698a=_0x46698a-0x0;var _0x356db0=_0xefa0[_0x46698a];return _0x356db0;};'use strict';var _=require(_0x0efa('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0x0efa('0x1'));var BPromise=require(_0x0efa('0x2'));var rp=require(_0x0efa('0x3'));var attributes=require(_0x0efa('0x4'));module[_0x0efa('0x5')]=function(_0xde0563,_0x208412){return _0xde0563[_0x0efa('0x6')](_0x0efa('0x7'),attributes,{'tableName':_0x0efa('0x8'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7749=['util','../../config/logger','api','moment','bluebird','request-promise','exports','define','AnalyticCustomReport','analytics_custom_reports','lodash'];(function(_0x1ec511,_0x5bd843){var _0x1421b2=function(_0x531d0f){while(--_0x531d0f){_0x1ec511['push'](_0x1ec511['shift']());}};_0x1421b2(++_0x5bd843);}(_0x7749,0x15f));var _0x9774=function(_0x41be0e,_0x5ee133){_0x41be0e=_0x41be0e-0x0;var _0x47959e=_0x7749[_0x41be0e];return _0x47959e;};'use strict';var _=require(_0x9774('0x0'));var util=require(_0x9774('0x1'));var logger=require(_0x9774('0x2'))(_0x9774('0x3'));var moment=require(_0x9774('0x4'));var BPromise=require(_0x9774('0x5'));var rp=require(_0x9774('0x6'));var attributes=require('./analyticCustomReport.attributes');module[_0x9774('0x7')]=function(_0x5f6282,_0x593f9b){return _0x5f6282[_0x9774('0x8')](_0x9774('0x9'),attributes,{'tableName':_0x9774('0xa'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 68a0f31..9e191cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf93a=['code','message','result','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','client','http','request','then','info','AnalyticCustomReport,\x20%s,\x20%s','debug','AnalyticCustomReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error'];(function(_0x3979d9,_0x4479fe){var _0x56074c=function(_0x37fd5a){while(--_0x37fd5a){_0x3979d9['push'](_0x3979d9['shift']());}};_0x56074c(++_0x4479fe);}(_0xf93a,0x114));var _0xaf93=function(_0x42c038,_0x4b4f3e){_0x42c038=_0x42c038-0x0;var _0x18d6e8=_0xf93a[_0x42c038];return _0x18d6e8;};'use strict';var _=require(_0xaf93('0x0'));var util=require('util');var moment=require(_0xaf93('0x1'));var BPromise=require(_0xaf93('0x2'));var rs=require(_0xaf93('0x3'));var fs=require('fs');var db=require(_0xaf93('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xaf93('0x5'))(_0xaf93('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xaf93('0x7')][_0xaf93('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x2c33da,_0x15908d,_0x280335){return new BPromise(function(_0xc6ecf0,_0x29f0fb){return client[_0xaf93('0x9')](_0x2c33da,_0x280335)[_0xaf93('0xa')](function(_0xfc9ce1){logger[_0xaf93('0xb')](_0xaf93('0xc'),_0x15908d,'request\x20sent');logger[_0xaf93('0xd')](_0xaf93('0xe'),_0x15908d,_0xaf93('0xf'),JSON[_0xaf93('0x10')](_0xfc9ce1));if(_0xfc9ce1['error']){if(_0xfc9ce1[_0xaf93('0x11')][_0xaf93('0x12')]===0x1f4){logger['error'](_0xaf93('0xc'),_0x15908d,_0xfc9ce1[_0xaf93('0x11')][_0xaf93('0x13')]);return _0x29f0fb(_0xfc9ce1[_0xaf93('0x11')][_0xaf93('0x13')]);}logger[_0xaf93('0x11')]('AnalyticCustomReport,\x20%s,\x20%s',_0x15908d,_0xfc9ce1[_0xaf93('0x11')][_0xaf93('0x13')]);return _0xc6ecf0(_0xfc9ce1[_0xaf93('0x11')][_0xaf93('0x13')]);}else{logger[_0xaf93('0xb')]('AnalyticCustomReport,\x20%s,\x20%s',_0x15908d,_0xaf93('0xf'));_0xc6ecf0(_0xfc9ce1[_0xaf93('0x14')][_0xaf93('0x13')]);}})['catch'](function(_0x548e67){logger[_0xaf93('0x11')](_0xaf93('0xc'),_0x15908d,_0x548e67);_0x29f0fb(_0x548e67);});});}
\ No newline at end of file
+var _0xbad5=['error','code','message','result','catch','lodash','moment','bluebird','../../mysqldb','rpc','jayson/promise','client','http','request','then','info','AnalyticCustomReport,\x20%s,\x20%s','AnalyticCustomReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify'];(function(_0x5ff9fd,_0x34828a){var _0xec7eb1=function(_0x4f604d){while(--_0x4f604d){_0x5ff9fd['push'](_0x5ff9fd['shift']());}};_0xec7eb1(++_0x34828a);}(_0xbad5,0xa5));var _0x5bad=function(_0x26e85e,_0x53fb9e){_0x26e85e=_0x26e85e-0x0;var _0x2fb16a=_0xbad5[_0x26e85e];return _0x2fb16a;};'use strict';var _=require(_0x5bad('0x0'));var util=require('util');var moment=require(_0x5bad('0x1'));var BPromise=require(_0x5bad('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x5bad('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x5bad('0x4'));var config=require('../../config/environment');var jayson=require(_0x5bad('0x5'));var client=jayson[_0x5bad('0x6')][_0x5bad('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x43bd80,_0x3e499b,_0x413aa7){return new BPromise(function(_0x6c9ee1,_0x1f83f0){return client[_0x5bad('0x8')](_0x43bd80,_0x413aa7)[_0x5bad('0x9')](function(_0x4877ac){logger[_0x5bad('0xa')](_0x5bad('0xb'),_0x3e499b,'request\x20sent');logger['debug'](_0x5bad('0xc'),_0x3e499b,_0x5bad('0xd'),JSON[_0x5bad('0xe')](_0x4877ac));if(_0x4877ac['error']){if(_0x4877ac[_0x5bad('0xf')][_0x5bad('0x10')]===0x1f4){logger['error']('AnalyticCustomReport,\x20%s,\x20%s',_0x3e499b,_0x4877ac[_0x5bad('0xf')][_0x5bad('0x11')]);return _0x1f83f0(_0x4877ac[_0x5bad('0xf')]['message']);}logger[_0x5bad('0xf')](_0x5bad('0xb'),_0x3e499b,_0x4877ac[_0x5bad('0xf')][_0x5bad('0x11')]);return _0x6c9ee1(_0x4877ac[_0x5bad('0xf')][_0x5bad('0x11')]);}else{logger[_0x5bad('0xa')](_0x5bad('0xb'),_0x3e499b,_0x5bad('0xd'));_0x6c9ee1(_0x4877ac[_0x5bad('0x12')]['message']);}})[_0x5bad('0x13')](function(_0x12db89){logger['error']('AnalyticCustomReport,\x20%s,\x20%s',_0x3e499b,_0x12db89);_0x1f83f0(_0x12db89);});});}
\ No newline at end of file
index 2b3e24b..9f1ee1c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x644f=['/:id/query','query','post','create','put','update','delete','destroy','multer','util','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticCustomReport.controller','isAuthenticated','index','/:id','show','get','/:id/preview','preview','/:id/run','run'];(function(_0x2fa457,_0x7021df){var _0x4f250a=function(_0xef901e){while(--_0xef901e){_0x2fa457['push'](_0x2fa457['shift']());}};_0x4f250a(++_0x7021df);}(_0x644f,0x133));var _0xf644=function(_0x5948dd,_0x1f6ac8){_0x5948dd=_0x5948dd-0x0;var _0xb1f8be=_0x644f[_0x5948dd];return _0xb1f8be;};'use strict';var multer=require(_0xf644('0x0'));var util=require(_0xf644('0x1'));var path=require('path');var express=require('express');var router=express['Router']();var auth=require(_0xf644('0x2'));var interaction=require(_0xf644('0x3'));var config=require(_0xf644('0x4'));var controller=require(_0xf644('0x5'));router['get']('/',auth[_0xf644('0x6')](),controller[_0xf644('0x7')]);router['get'](_0xf644('0x8'),auth[_0xf644('0x6')](),controller[_0xf644('0x9')]);router[_0xf644('0xa')](_0xf644('0xb'),auth[_0xf644('0x6')](),controller[_0xf644('0xc')]);router['get'](_0xf644('0xd'),auth[_0xf644('0x6')](),controller[_0xf644('0xe')]);router[_0xf644('0xa')](_0xf644('0xf'),auth[_0xf644('0x6')](),controller[_0xf644('0x10')]);router[_0xf644('0x11')]('/',auth[_0xf644('0x6')](),controller[_0xf644('0x12')]);router[_0xf644('0x13')]('/:id',auth[_0xf644('0x6')](),controller[_0xf644('0x14')]);router[_0xf644('0x15')](_0xf644('0x8'),auth[_0xf644('0x6')](),controller[_0xf644('0x16')]);module['exports']=router;
\ No newline at end of file
+var _0xdb3e=['../../components/interaction/service','../../config/environment','./analyticCustomReport.controller','get','isAuthenticated','index','/:id','show','/:id/preview','preview','/:id/query','query','post','create','put','update','exports','multer','path','express','Router','../../components/auth/service'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xdb3e,0x15b));var _0xedb3=function(_0x50668e,_0x4421ea){_0x50668e=_0x50668e-0x0;var _0x1b92b8=_0xdb3e[_0x50668e];return _0x1b92b8;};'use strict';var multer=require(_0xedb3('0x0'));var util=require('util');var path=require(_0xedb3('0x1'));var express=require(_0xedb3('0x2'));var router=express[_0xedb3('0x3')]();var auth=require(_0xedb3('0x4'));var interaction=require(_0xedb3('0x5'));var config=require(_0xedb3('0x6'));var controller=require(_0xedb3('0x7'));router[_0xedb3('0x8')]('/',auth[_0xedb3('0x9')](),controller[_0xedb3('0xa')]);router['get'](_0xedb3('0xb'),auth['isAuthenticated'](),controller[_0xedb3('0xc')]);router[_0xedb3('0x8')](_0xedb3('0xd'),auth['isAuthenticated'](),controller[_0xedb3('0xe')]);router['get']('/:id/run',auth[_0xedb3('0x9')](),controller['run']);router[_0xedb3('0x8')](_0xedb3('0xf'),auth[_0xedb3('0x9')](),controller[_0xedb3('0x10')]);router[_0xedb3('0x11')]('/',auth[_0xedb3('0x9')](),controller[_0xedb3('0x12')]);router[_0xedb3('0x13')](_0xedb3('0xb'),auth[_0xedb3('0x9')](),controller[_0xedb3('0x14')]);router['delete'](_0xedb3('0xb'),auth['isAuthenticated'](),controller['destroy']);module[_0xedb3('0x15')]=router;
\ No newline at end of file
index 7b9c8e7..bfd2cdf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8aa=['STRING','TEXT','sequelize','exports'];(function(_0x32e2ea,_0x3c644a){var _0x560aa9=function(_0x41d1ea){while(--_0x41d1ea){_0x32e2ea['push'](_0x32e2ea['shift']());}};_0x560aa9(++_0x3c644a);}(_0xd8aa,0x6a));var _0xad8a=function(_0x17d9e3,_0x1f969c){_0x17d9e3=_0x17d9e3-0x0;var _0x14192d=_0xd8aa[_0x17d9e3];return _0x14192d;};'use strict';var Sequelize=require(_0xad8a('0x0'));module[_0xad8a('0x1')]={'name':{'type':Sequelize[_0xad8a('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0xad8a('0x2')]},'parent':{'type':Sequelize['STRING']},'table':{'type':Sequelize[_0xad8a('0x2')]},'conditions':{'type':Sequelize[_0xad8a('0x3')]},'joins':{'type':Sequelize['TEXT']}};
\ No newline at end of file
+var _0xd59a=['sequelize','exports','STRING','TEXT'];(function(_0x51bb38,_0x4e57a0){var _0x51c09b=function(_0x3321e2){while(--_0x3321e2){_0x51bb38['push'](_0x51bb38['shift']());}};_0x51c09b(++_0x4e57a0);}(_0xd59a,0x154));var _0xad59=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0xd59a[_0x2641f9];return _0x585741;};'use strict';var Sequelize=require(_0xad59('0x0'));module[_0xad59('0x1')]={'name':{'type':Sequelize[_0xad59('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0xad59('0x2')]},'parent':{'type':Sequelize['STRING']},'table':{'type':Sequelize[_0xad59('0x2')]},'conditions':{'type':Sequelize[_0xad59('0x3')]},'joins':{'type':Sequelize[_0xad59('0x3')]}};
\ No newline at end of file
index 7c11bb3..5decfa5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd0e1=['COUNT(%s)','COUNT(DISTINCT\x20%s)','MAX(%s)','MIN(%s)','AVG(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','SEC_TO_TIME(%s)','ROUND(%s)','UNIX_TIMESTAMP(%s)','includes','IS\x20NULL','IS\x20NOT\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','operator','rules','group','field','condition','Sequelize','ValidationError','Please\x20insert\x20at\x20least\x20one\x20field!','AnalyticMetric','keyBy','select','from','table','MetricId','function','replace','format','orderBy','DESC','alias','joins','parentKey','foreignTable','foreignKey','%s.%s\x20=\x20%s.%s','conditions','clone','debug','Limited\x20Query:','toString','sequelize','QueryTypes','cross_join','GROUP_CONCAT(%s)','DATE(%s)','HOUR(%s)','value','metric','groupBy','parse','type','output','fullPath','randomstring','generate','csv','AnalyticExtractedReport','startDate','endDate','Run\x20Query:','child_process','fork','../../files/reports','countTable','COUNT(*)','SELECT','run','getFields','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','end','status','offset','limit','set','Content-Range','reject','update','then','error','stack','name','send','rawAttributes','model','dateStart','query','dateEnd','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','filter','options','AnalyticDefaultReport','includeAll','include','findAll','show','params','merge','find','create','body','catch','preview','join','left_join','right_join','outer_join','SUM(%s)'];(function(_0x5920ff,_0x493180){var _0x15bd7d=function(_0x2dc354){while(--_0x2dc354){_0x5920ff['push'](_0x5920ff['shift']());}};_0x15bd7d(++_0x493180);}(_0xd0e1,0x169));var _0x1d0e=function(_0x406c20,_0x138d0a){_0x406c20=_0x406c20-0x0;var _0x3e0b2d=_0xd0e1[_0x406c20];return _0x3e0b2d;};'use strict';var jsonpatch=require(_0x1d0e('0x0'));var rp=require(_0x1d0e('0x1'));var moment=require('moment');var BPromise=require(_0x1d0e('0x2'));var Mustache=require(_0x1d0e('0x3'));var util=require(_0x1d0e('0x4'));var path=require(_0x1d0e('0x5'));var sox=require(_0x1d0e('0x6'));var csv=require(_0x1d0e('0x7'));var ejs=require(_0x1d0e('0x8'));var fs=require('fs');var _=require(_0x1d0e('0x9'));var squel=require('squel');var crypto=require(_0x1d0e('0xa'));var jsforce=require(_0x1d0e('0xb'));var deskjs=require(_0x1d0e('0xc'));var toCsv=require(_0x1d0e('0x7'));var querystring=require(_0x1d0e('0xd'));var Papa=require(_0x1d0e('0xe'));var qs=require(_0x1d0e('0xf'));var logger=require(_0x1d0e('0x10'))(_0x1d0e('0x11'));var utils=require('../../config/utils');var config=require(_0x1d0e('0x12'));var db=require(_0x1d0e('0x13'))['db'];function respondWithStatusCode(_0x4d2570,_0x27f216){_0x27f216=_0x27f216||0xcc;return function(_0x45c391){if(_0x45c391){return _0x4d2570['sendStatus'](_0x27f216);}return _0x4d2570['status'](_0x27f216)[_0x1d0e('0x14')]();};}function respondWithResult(_0x45734b,_0xb8bc86){_0xb8bc86=_0xb8bc86||0xc8;return function(_0x38214a){if(_0x38214a){return _0x45734b[_0x1d0e('0x15')](_0xb8bc86)['json'](_0x38214a);}};}function respondWithFilteredResult(_0x2f9224,_0x1ca6a5){return function(_0x30dcf1){if(_0x30dcf1){var _0x58191e=_0x30dcf1['count'],_0xe64e02=_0x1ca6a5[_0x1d0e('0x16')],_0x5b8f92=_0x1ca6a5[_0x1d0e('0x16')]+_0x1ca6a5[_0x1d0e('0x17')],_0x5a7d78;if(_0x5b8f92>=_0x58191e){_0x5b8f92=_0x58191e;_0x5a7d78=0xc8;}else{_0x5a7d78=0xce;}_0x2f9224[_0x1d0e('0x15')](_0x5a7d78);return _0x2f9224[_0x1d0e('0x18')](_0x1d0e('0x19'),_0xe64e02+'-'+_0x5b8f92+'/'+_0x58191e)['json'](_0x30dcf1);}return null;};}function patchUpdates(_0x58fd6f){return function(_0x38b343){try{jsonpatch['apply'](_0x38b343,_0x58fd6f,!![]);}catch(_0x3aeacb){return BPromise[_0x1d0e('0x1a')](_0x3aeacb);}return _0x38b343['save']();};}function saveUpdates(_0x51d63e,_0x341185){return function(_0xe82b56){if(_0xe82b56){return _0xe82b56[_0x1d0e('0x1b')](_0x51d63e)[_0x1d0e('0x1c')](function(_0x15c7e9){return _0x15c7e9;});}return null;};}function removeEntity(_0x11f193,_0x3003c4){return function(_0x44386b){if(_0x44386b){return _0x44386b['destroy']()[_0x1d0e('0x1c')](function(){_0x11f193[_0x1d0e('0x15')](0xcc)[_0x1d0e('0x14')]();});}};}function handleEntityNotFound(_0x3dae43,_0x58cc97){return function(_0xc7cd1b){if(!_0xc7cd1b){_0x3dae43['sendStatus'](0x194);}return _0xc7cd1b;};}function handleError(_0x4608cc,_0xee7990){_0xee7990=_0xee7990||0x1f4;return function(_0x2f8e1d){logger[_0x1d0e('0x1d')](_0x2f8e1d[_0x1d0e('0x1e')]);if(_0x2f8e1d['name']){delete _0x2f8e1d[_0x1d0e('0x1f')];}_0x4608cc['status'](_0xee7990)[_0x1d0e('0x20')](_0x2f8e1d);};}exports['index']=function(_0x174d8c,_0x11da31){var _0x44bdae={},_0x86eb0c={},_0x6cb5a5={'count':0x0,'rows':[]};var _0x5accf0=db['AnalyticDefaultReport'][_0x1d0e('0x21')];_0x86eb0c[_0x1d0e('0x22')]=_['keys'](_0x5accf0);var _0xcd96e2={'dateStart':_0x174d8c['query'][_0x1d0e('0x23')],'dateEnd':_0x174d8c[_0x1d0e('0x24')][_0x1d0e('0x25')]};delete _0x174d8c[_0x1d0e('0x24')][_0x1d0e('0x23')];delete _0x174d8c[_0x1d0e('0x24')][_0x1d0e('0x25')];_0x86eb0c[_0x1d0e('0x24')]=_[_0x1d0e('0x26')](_0x174d8c[_0x1d0e('0x24')]);_0x86eb0c[_0x1d0e('0x27')]=_['intersection'](_0x86eb0c[_0x1d0e('0x22')],_0x86eb0c[_0x1d0e('0x24')]);_0x44bdae['attributes']=_[_0x1d0e('0x28')](_0x86eb0c[_0x1d0e('0x22')],qs['fields'](_0x174d8c[_0x1d0e('0x24')][_0x1d0e('0x29')]));_0x44bdae['attributes']=_0x44bdae[_0x1d0e('0x2a')][_0x1d0e('0x2b')]?_0x44bdae[_0x1d0e('0x2a')]:_0x86eb0c[_0x1d0e('0x22')];if(!_0x174d8c[_0x1d0e('0x24')][_0x1d0e('0x2c')](_0x1d0e('0x2d'))){_0x44bdae[_0x1d0e('0x17')]=qs['limit'](_0x174d8c[_0x1d0e('0x24')][_0x1d0e('0x17')]);_0x44bdae[_0x1d0e('0x16')]=qs[_0x1d0e('0x16')](_0x174d8c[_0x1d0e('0x24')]['offset']);}_0x44bdae[_0x1d0e('0x2e')]=qs[_0x1d0e('0x2f')](_0x174d8c['query'][_0x1d0e('0x2f')]);_0x44bdae[_0x1d0e('0x30')]=qs[_0x1d0e('0x27')](_[_0x1d0e('0x31')](_0x174d8c[_0x1d0e('0x24')],_0x86eb0c[_0x1d0e('0x27')]));if(_0xcd96e2['dateStart']){if(_0xcd96e2[_0x1d0e('0x25')]){_0xcd96e2[_0x1d0e('0x25')]=moment(_0xcd96e2[_0x1d0e('0x25')])[_0x1d0e('0x32')](0x1,'day');}else{_0xcd96e2[_0x1d0e('0x25')]=moment(_0xcd96e2[_0x1d0e('0x23')])[_0x1d0e('0x32')](0x1,_0x1d0e('0x33'));}_['merge'](_0x44bdae[_0x1d0e('0x30')],{'createdAt':{'$gte':_0xcd96e2['dateStart'],'$lte':_0xcd96e2[_0x1d0e('0x25')]}});}if(_0x174d8c[_0x1d0e('0x24')][_0x1d0e('0x34')]){_0x44bdae[_0x1d0e('0x30')]=_['merge'](_0x44bdae['where'],{'$or':_['map'](_0x44bdae['attributes'],function(_0x5810de){var _0x5a8eb2={};_0x5a8eb2[_0x5810de]={'$like':'%'+_0x174d8c['query']['filter']+'%'};return _0x5a8eb2;})});}_0x44bdae=_['merge']({},_0x44bdae,_0x174d8c[_0x1d0e('0x35')]);var _0xe5d439={'where':_0x44bdae['where']};return db[_0x1d0e('0x36')]['count'](_0xe5d439)[_0x1d0e('0x1c')](function(_0x5c2c6d){_0x6cb5a5['count']=_0x5c2c6d;if(_0x174d8c[_0x1d0e('0x24')][_0x1d0e('0x37')]){_0x44bdae[_0x1d0e('0x38')]=[{'all':!![]}];}return db[_0x1d0e('0x36')][_0x1d0e('0x39')](_0x44bdae);})[_0x1d0e('0x1c')](function(_0x25e4b6){_0x6cb5a5['rows']=_0x25e4b6;return _0x6cb5a5;})[_0x1d0e('0x1c')](respondWithFilteredResult(_0x11da31,_0x44bdae))['catch'](handleError(_0x11da31,null));};exports[_0x1d0e('0x3a')]=function(_0x42c6ae,_0x4aca46){var _0xd25236={'raw':!![],'where':{'id':_0x42c6ae[_0x1d0e('0x3b')]['id']}},_0x41ee51={};_0x41ee51['model']=_['keys'](db[_0x1d0e('0x36')][_0x1d0e('0x21')]);_0x41ee51['query']=_[_0x1d0e('0x26')](_0x42c6ae[_0x1d0e('0x24')]);_0x41ee51[_0x1d0e('0x27')]=_['intersection'](_0x41ee51['model'],_0x41ee51['query']);_0xd25236[_0x1d0e('0x2a')]=_['intersection'](_0x41ee51['model'],qs[_0x1d0e('0x29')](_0x42c6ae['query'][_0x1d0e('0x29')]));_0xd25236['attributes']=_0xd25236[_0x1d0e('0x2a')][_0x1d0e('0x2b')]?_0xd25236['attributes']:_0x41ee51['model'];if(_0x42c6ae[_0x1d0e('0x24')]['includeAll']){_0xd25236[_0x1d0e('0x38')]=[{'all':!![]}];}_0xd25236=_[_0x1d0e('0x3c')]({},_0xd25236,_0x42c6ae[_0x1d0e('0x35')]);return db['AnalyticDefaultReport'][_0x1d0e('0x3d')](_0xd25236)[_0x1d0e('0x1c')](handleEntityNotFound(_0x4aca46,null))[_0x1d0e('0x1c')](respondWithResult(_0x4aca46,null))['catch'](handleError(_0x4aca46,null));};exports[_0x1d0e('0x3e')]=function(_0x54bbea,_0x212267){return db[_0x1d0e('0x36')][_0x1d0e('0x3e')](_0x54bbea[_0x1d0e('0x3f')],{})[_0x1d0e('0x1c')](respondWithResult(_0x212267,0xc9))[_0x1d0e('0x40')](handleError(_0x212267,null));};exports[_0x1d0e('0x1b')]=function(_0x5f5ad5,_0x4b2c70){if(_0x5f5ad5[_0x1d0e('0x3f')]['id']){delete _0x5f5ad5[_0x1d0e('0x3f')]['id'];}return db[_0x1d0e('0x36')][_0x1d0e('0x3d')]({'where':{'id':_0x5f5ad5['params']['id']}})['then'](handleEntityNotFound(_0x4b2c70,null))[_0x1d0e('0x1c')](saveUpdates(_0x5f5ad5[_0x1d0e('0x3f')],null))[_0x1d0e('0x1c')](respondWithResult(_0x4b2c70,null))['catch'](handleError(_0x4b2c70,null));};exports['destroy']=function(_0x38f812,_0x4b77c7){return db['AnalyticDefaultReport']['find']({'where':{'id':_0x38f812[_0x1d0e('0x3b')]['id']}})[_0x1d0e('0x1c')](handleEntityNotFound(_0x4b77c7,null))[_0x1d0e('0x1c')](removeEntity(_0x4b77c7,null))[_0x1d0e('0x40')](handleError(_0x4b77c7,null));};exports[_0x1d0e('0x41')]=function(_0x54a1b2,_0xb2f1bf){var _0x3daa78=0xa;var _0x3bad3b=[_0x1d0e('0x42'),_0x1d0e('0x43'),_0x1d0e('0x44'),_0x1d0e('0x45'),'cross_join'];var _0x41d562={'SUM':_0x1d0e('0x46'),'COUNT':_0x1d0e('0x47'),'COUNT DISTINCT':_0x1d0e('0x48'),'MAX':_0x1d0e('0x49'),'MIN':_0x1d0e('0x4a'),'AVG':_0x1d0e('0x4b'),'GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':_0x1d0e('0x4c'),'GROUP_CONCAT DESC':_0x1d0e('0x4d')};var _0x3553be={'SEC_TO_TIME':_0x1d0e('0x4e'),'DATE':'DATE(%s)','HOUR':'HOUR(%s)','ROUND':_0x1d0e('0x4f'),'UNIX_TIMESTAMP':_0x1d0e('0x50')};var _0x215171=function(_0x3af847){return!_[_0x1d0e('0x51')]([_0x1d0e('0x52'),_0x1d0e('0x53'),_0x1d0e('0x54'),_0x1d0e('0x55')],_0x3af847);};var _0x1efe28=function(_0x44ada1){if(!_0x44ada1||!_0x44ada1['rules']['length']){return'';}for(var _0x1c1b2b='(',_0x5288bf=0x0;_0x5288bf<_0x44ada1['rules'][_0x1d0e('0x2b')];_0x5288bf+=0x1){_0x5288bf>0x0&&(_0x1c1b2b+='\x20'+_0x44ada1[_0x1d0e('0x56')]+'\x20');_0x1c1b2b+=_0x44ada1[_0x1d0e('0x57')][_0x5288bf][_0x1d0e('0x58')]?_0x1efe28(_0x44ada1[_0x1d0e('0x57')][_0x5288bf]['group']):_0x44ada1[_0x1d0e('0x57')][_0x5288bf][_0x1d0e('0x59')]+'\x20'+_0x44ada1[_0x1d0e('0x57')][_0x5288bf][_0x1d0e('0x5a')]+(_0x215171(_0x44ada1[_0x1d0e('0x57')][_0x5288bf][_0x1d0e('0x5a')])?'\x20'+_0x44ada1[_0x1d0e('0x57')][_0x5288bf]['value']:'');}return _0x1c1b2b+')';};var _0x4ec4e0={'where':{'id':_0x54a1b2[_0x1d0e('0x3b')]['id']}},_0x57c8e5,_0x2a50ea,_0x4237fc,_0x51bfca,_0x1460a3;_0x4ec4e0=_[_0x1d0e('0x3c')]({},_0x4ec4e0,_0x54a1b2[_0x1d0e('0x35')]);return db[_0x1d0e('0x36')][_0x1d0e('0x3d')](_0x4ec4e0)['then'](function(_0x1b7b72){if(_0x1b7b72){_0x57c8e5=_0x1b7b72;return _0x1b7b72['getFields']();}return null;})[_0x1d0e('0x1c')](function(_0x3a6eef){if(_0x3a6eef){if(!_0x3a6eef['length']){throw new db[(_0x1d0e('0x5b'))][(_0x1d0e('0x5c'))](_0x1d0e('0x5d'));}_0x2a50ea=_0x3a6eef;return db[_0x1d0e('0x5e')][_0x1d0e('0x39')]({'raw':!![]});}return null;})['then'](function(_0x1d0f22){if(_0x1d0f22){_0x4237fc=_[_0x1d0e('0x5f')](_0x1d0f22,'id');var _0x201a8c;var _0x886f9a=squel[_0x1d0e('0x60')]();_0x886f9a[_0x1d0e('0x61')](_0x57c8e5[_0x1d0e('0x62')]);for(var _0x3a412f=0x0;_0x3a412f<_0x2a50ea['length'];_0x3a412f+=0x1){_0x201a8c=_0x2a50ea[_0x3a412f][_0x1d0e('0x63')]?_0x4237fc[_0x2a50ea[_0x3a412f]['MetricId']]['metric']:_0x2a50ea[_0x3a412f]['field'];_0x201a8c=_0x2a50ea[_0x3a412f][_0x1d0e('0x64')]?_[_0x1d0e('0x65')](_0x41d562[_0x2a50ea[_0x3a412f]['function']],'%s',_0x201a8c):_0x201a8c;_0x201a8c=_0x2a50ea[_0x3a412f][_0x1d0e('0x66')]?_[_0x1d0e('0x65')](_0x3553be[_0x2a50ea[_0x3a412f][_0x1d0e('0x66')]],'%s',_0x201a8c):_0x201a8c;if(_0x2a50ea[_0x3a412f]['groupBy']){_0x886f9a['group'](_0x201a8c);}_0x2a50ea[_0x3a412f][_0x1d0e('0x67')]&&_0x886f9a['order'](_0x201a8c,_0x2a50ea[_0x3a412f][_0x1d0e('0x67')]===_0x1d0e('0x68')?![]:!![]);_0x886f9a[_0x1d0e('0x59')](_0x201a8c,_0x2a50ea[_0x3a412f][_0x1d0e('0x69')]||_0x201a8c);}if(_0x57c8e5[_0x1d0e('0x6a')]){_0x57c8e5[_0x1d0e('0x6a')]=JSON['parse'](_0x57c8e5[_0x1d0e('0x6a')]);for(var _0x500f85=0x0;_0x500f85<_0x57c8e5['joins']['length'];_0x500f85+=0x1){if(_0x57c8e5['joins'][_0x500f85]['type']&&_[_0x1d0e('0x51')](_0x3bad3b,_0x57c8e5[_0x1d0e('0x6a')][_0x500f85]['type'])&&_0x57c8e5[_0x1d0e('0x6a')][_0x500f85][_0x1d0e('0x6b')]&&_0x57c8e5['joins'][_0x500f85][_0x1d0e('0x6c')]&&_0x57c8e5[_0x1d0e('0x6a')][_0x500f85][_0x1d0e('0x6d')]){_0x886f9a[_0x57c8e5[_0x1d0e('0x6a')][_0x500f85]['type']](_0x57c8e5[_0x1d0e('0x6a')][_0x500f85][_0x1d0e('0x6c')],null,util[_0x1d0e('0x66')](_0x1d0e('0x6e'),_0x57c8e5[_0x1d0e('0x62')],_0x57c8e5[_0x1d0e('0x6a')][_0x500f85][_0x1d0e('0x6b')],_0x57c8e5['joins'][_0x500f85][_0x1d0e('0x6c')],_0x57c8e5['joins'][_0x500f85]['foreignKey']));}}}if(_0x57c8e5['conditions']){_0x57c8e5[_0x1d0e('0x6f')]=JSON['parse'](_0x57c8e5[_0x1d0e('0x6f')]);_0x886f9a[_0x1d0e('0x30')](_0x1efe28(_0x57c8e5[_0x1d0e('0x6f')]['group']));}_0x1460a3=_0x886f9a[_0x1d0e('0x70')]();_0x886f9a[_0x1d0e('0x17')](_0x3daa78);_0x886f9a[_0x1d0e('0x16')](0x0);logger[_0x1d0e('0x71')](_0x1d0e('0x72'),_0x886f9a[_0x1d0e('0x73')]());return db[_0x1d0e('0x74')][_0x1d0e('0x24')](_0x886f9a[_0x1d0e('0x73')](),{'type':db[_0x1d0e('0x74')][_0x1d0e('0x75')]['SELECT']});}})[_0x1d0e('0x1c')](respondWithResult(_0xb2f1bf,null))[_0x1d0e('0x40')](handleError(_0xb2f1bf,null));};function runReport(_0x1c32e0,_0xddcbbc,_0x2c3946){var _0x34c07e=_0xddcbbc['name'];var _0x2553f6=0xa;var _0x76cb9d=['join',_0x1d0e('0x43'),'right_join',_0x1d0e('0x45'),_0x1d0e('0x76')];var _0x1364d8={'SUM':_0x1d0e('0x46'),'COUNT':'COUNT(%s)','COUNT DISTINCT':_0x1d0e('0x48'),'MAX':_0x1d0e('0x49'),'MIN':_0x1d0e('0x4a'),'AVG':_0x1d0e('0x4b'),'GROUP_CONCAT':_0x1d0e('0x77'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0x1d0e('0x4d')};var _0x2e3041={'SEC_TO_TIME':_0x1d0e('0x4e'),'DATE':_0x1d0e('0x78'),'HOUR':_0x1d0e('0x79'),'ROUND':_0x1d0e('0x4f'),'UNIX_TIMESTAMP':_0x1d0e('0x50')};var _0x11dabb=function(_0x41e60f){return!_[_0x1d0e('0x51')]([_0x1d0e('0x52'),_0x1d0e('0x53'),_0x1d0e('0x54'),_0x1d0e('0x55')],_0x41e60f);};var _0x203ef1=function(_0x54d0bf){if(!_0x54d0bf||!_0x54d0bf[_0x1d0e('0x57')][_0x1d0e('0x2b')]){return'';}for(var _0x513378='(',_0x3e7c07=0x0;_0x3e7c07<_0x54d0bf[_0x1d0e('0x57')][_0x1d0e('0x2b')];_0x3e7c07+=0x1){_0x3e7c07>0x0&&(_0x513378+='\x20'+_0x54d0bf[_0x1d0e('0x56')]+'\x20');_0x513378+=_0x54d0bf[_0x1d0e('0x57')][_0x3e7c07][_0x1d0e('0x58')]?_0x203ef1(_0x54d0bf['rules'][_0x3e7c07][_0x1d0e('0x58')]):_0x54d0bf[_0x1d0e('0x57')][_0x3e7c07]['field']+'\x20'+_0x54d0bf[_0x1d0e('0x57')][_0x3e7c07][_0x1d0e('0x5a')]+(_0x11dabb(_0x54d0bf[_0x1d0e('0x57')][_0x3e7c07]['condition'])?'\x20'+_0x54d0bf['rules'][_0x3e7c07][_0x1d0e('0x7a')]:'');}return _0x513378+')';};var _0x32b421={'where':{'id':_0x1c32e0['id']}},_0x4da1bf,_0x5077a6,_0x3f3568,_0x217bfe,_0x363ee3;_0x32b421=_[_0x1d0e('0x3c')]({},_0x32b421,_0x2c3946);return db['AnalyticDefaultReport'][_0x1d0e('0x3d')](_0x32b421)[_0x1d0e('0x1c')](function(_0x5af12d){if(_0x5af12d){_0x4da1bf=_0x5af12d;return _0x5af12d['getFields']();}return null;})[_0x1d0e('0x1c')](function(_0x463572){if(_0x463572){if(!_0x463572[_0x1d0e('0x2b')]){throw new db[(_0x1d0e('0x5b'))][(_0x1d0e('0x5c'))](_0x1d0e('0x5d'));}_0x5077a6=_0x463572;return db[_0x1d0e('0x5e')][_0x1d0e('0x39')]({'raw':!![]});}return null;})[_0x1d0e('0x1c')](function(_0x4af614){if(_0x4af614){_0x3f3568=_[_0x1d0e('0x5f')](_0x4af614,'id');var _0x267512;var _0x23e8c8=squel['select']();_0x23e8c8[_0x1d0e('0x61')](_0x4da1bf['table']);for(var _0x308d4d=0x0;_0x308d4d<_0x5077a6['length'];_0x308d4d+=0x1){_0x267512=_0x5077a6[_0x308d4d]['MetricId']?_0x3f3568[_0x5077a6[_0x308d4d][_0x1d0e('0x63')]][_0x1d0e('0x7b')]:_0x5077a6[_0x308d4d][_0x1d0e('0x59')];_0x267512=_0x5077a6[_0x308d4d][_0x1d0e('0x64')]?_[_0x1d0e('0x65')](_0x1364d8[_0x5077a6[_0x308d4d][_0x1d0e('0x64')]],'%s',_0x267512):_0x267512;_0x267512=_0x5077a6[_0x308d4d][_0x1d0e('0x66')]?_[_0x1d0e('0x65')](_0x2e3041[_0x5077a6[_0x308d4d]['format']],'%s',_0x267512):_0x267512;if(_0x5077a6[_0x308d4d][_0x1d0e('0x7c')]){_0x23e8c8[_0x1d0e('0x58')](_0x267512);}_0x5077a6[_0x308d4d][_0x1d0e('0x67')]&&_0x23e8c8[_0x1d0e('0x2e')](_0x267512,_0x5077a6[_0x308d4d][_0x1d0e('0x67')]===_0x1d0e('0x68')?![]:!![]);_0x23e8c8['field'](_0x267512,_0x5077a6[_0x308d4d][_0x1d0e('0x69')]||_0x267512);}if(_0x4da1bf['joins']){_0x4da1bf['joins']=JSON[_0x1d0e('0x7d')](_0x4da1bf[_0x1d0e('0x6a')]);for(var _0x5a54f1=0x0;_0x5a54f1<_0x4da1bf[_0x1d0e('0x6a')][_0x1d0e('0x2b')];_0x5a54f1+=0x1){if(_0x4da1bf[_0x1d0e('0x6a')][_0x5a54f1][_0x1d0e('0x7e')]&&_['includes'](_0x76cb9d,_0x4da1bf[_0x1d0e('0x6a')][_0x5a54f1]['type'])&&_0x4da1bf[_0x1d0e('0x6a')][_0x5a54f1][_0x1d0e('0x6b')]&&_0x4da1bf[_0x1d0e('0x6a')][_0x5a54f1][_0x1d0e('0x6c')]&&_0x4da1bf['joins'][_0x5a54f1][_0x1d0e('0x6d')]){_0x23e8c8[_0x4da1bf['joins'][_0x5a54f1][_0x1d0e('0x7e')]](_0x4da1bf['joins'][_0x5a54f1][_0x1d0e('0x6c')],null,util[_0x1d0e('0x66')](_0x1d0e('0x6e'),_0x4da1bf[_0x1d0e('0x62')],_0x4da1bf[_0x1d0e('0x6a')][_0x5a54f1][_0x1d0e('0x6b')],_0x4da1bf['joins'][_0x5a54f1][_0x1d0e('0x6c')],_0x4da1bf[_0x1d0e('0x6a')][_0x5a54f1]['foreignKey']));}}}if(_0x4da1bf['conditions']){_0x4da1bf[_0x1d0e('0x6f')]=JSON[_0x1d0e('0x7d')](_0x4da1bf['conditions']);_0x23e8c8['where'](_0x203ef1(_0x4da1bf['conditions'][_0x1d0e('0x58')]));}_0x363ee3=_0x23e8c8[_0x1d0e('0x70')]();_0x23e8c8[_0x1d0e('0x17')](_0x2553f6);_0x23e8c8['offset'](0x0);logger[_0x1d0e('0x71')](_0x1d0e('0x72'),_0x23e8c8[_0x1d0e('0x73')]());return db[_0x1d0e('0x74')][_0x1d0e('0x24')](_0x23e8c8[_0x1d0e('0x73')](),{'type':db['sequelize']['QueryTypes']['SELECT']});}})[_0x1d0e('0x1c')](function(_0x293ac8){if(!_0x293ac8[_0x1d0e('0x2b')]){throw new db[(_0x1d0e('0x5b'))][(_0x1d0e('0x5c'))]('No\x20Data!');}if(_0xddcbbc[_0x1d0e('0x7f')]==='web'){return null;}var _0x2a7f06=_[_0x1d0e('0x3c')](_0xddcbbc,{'name':_0xddcbbc[_0x1d0e('0x80')]||_0xddcbbc['name']||_0x4da1bf[_0x1d0e('0x1f')],'basename':_0x34c07e,'savename':util[_0x1d0e('0x66')]('%s-%s.%s',_0xddcbbc['name']||_0x4da1bf[_0x1d0e('0x1f')],require(_0x1d0e('0x81'))[_0x1d0e('0x82')](0x4),_0xddcbbc[_0x1d0e('0x7f')]||_0x1d0e('0x83'))});return db[_0x1d0e('0x84')][_0x1d0e('0x3e')](_0x2a7f06,{'raw':!![]});})[_0x1d0e('0x1c')](function(_0x2fb818){_0x363ee3[_0x1d0e('0x30')](_0x4da1bf['table']+'.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0xddcbbc[_0x1d0e('0x85')],_0xddcbbc[_0x1d0e('0x86')]);if(_0x2fb818){logger['info'](_0x1d0e('0x87'),_0x363ee3[_0x1d0e('0x73')]());require(_0x1d0e('0x88'))[_0x1d0e('0x89')](path['join'](__dirname,'../../components/export/',_0x2fb818['output']),[_0x2fb818['id'],_0x363ee3[_0x1d0e('0x73')](),path[_0x1d0e('0x42')](__dirname,_0x1d0e('0x8a'),_0x2fb818['savename']),_0x34c07e]);return _0x2fb818;}else{var _0x2c1eb2=squel[_0x1d0e('0x60')]();_0x2c1eb2['from']('('+_0x363ee3[_0x1d0e('0x73')]()+')',_0x1d0e('0x8b'));_0x2c1eb2[_0x1d0e('0x59')](_0x1d0e('0x8c'),'count');_0x363ee3['limit'](_0xddcbbc['limit']||_0x2553f6);_0x363ee3['offset'](_0xddcbbc[_0x1d0e('0x16')]||0x0);return db[_0x1d0e('0x74')][_0x1d0e('0x24')](_0x2c1eb2[_0x1d0e('0x73')](),{'type':db[_0x1d0e('0x74')][_0x1d0e('0x75')]['SELECT']})[_0x1d0e('0x1c')](function(_0x22283b){if(!_0x22283b[_0x1d0e('0x2b')]){_0x217bfe=0x0;}else{_0x217bfe=_0x22283b[0x0]['count']||0x0;}return db[_0x1d0e('0x74')][_0x1d0e('0x24')](_0x363ee3[_0x1d0e('0x73')](),{'type':db[_0x1d0e('0x74')][_0x1d0e('0x75')][_0x1d0e('0x8d')]});})[_0x1d0e('0x1c')](function(_0x2dac0f){return{'rows':_0x2dac0f||[],'count':_0x217bfe};});}});}exports[_0x1d0e('0x8e')]=function(_0x118621,_0x30b678){return runReport(_0x118621[_0x1d0e('0x3b')],_0x118621[_0x1d0e('0x24')],_0x118621['options'])[_0x1d0e('0x1c')](respondWithResult(_0x30b678,null))[_0x1d0e('0x40')](handleError(_0x30b678,null));};exports['runReport']=runReport;exports[_0x1d0e('0x24')]=function(_0x2faf2a,_0x3bde50){var _0x44d369=0xa;var _0x4bbfc5=[_0x1d0e('0x42'),_0x1d0e('0x43'),_0x1d0e('0x44'),_0x1d0e('0x45'),_0x1d0e('0x76')];var _0x1342a6={'SUM':_0x1d0e('0x46'),'COUNT':_0x1d0e('0x47'),'COUNT DISTINCT':_0x1d0e('0x48'),'MAX':_0x1d0e('0x49'),'MIN':'MIN(%s)','AVG':_0x1d0e('0x4b'),'GROUP_CONCAT':_0x1d0e('0x77'),'GROUP_CONCAT ASC':_0x1d0e('0x4c'),'GROUP_CONCAT DESC':_0x1d0e('0x4d')};var _0x302084={'SEC_TO_TIME':_0x1d0e('0x4e'),'DATE':_0x1d0e('0x78'),'HOUR':'HOUR(%s)','ROUND':_0x1d0e('0x4f'),'UNIX_TIMESTAMP':_0x1d0e('0x50')};var _0x12317a=function(_0x2bbb13){return!_[_0x1d0e('0x51')]([_0x1d0e('0x52'),_0x1d0e('0x53'),_0x1d0e('0x54'),_0x1d0e('0x55')],_0x2bbb13);};var _0x328b93=function(_0x5cd93c){if(!_0x5cd93c||!_0x5cd93c[_0x1d0e('0x57')][_0x1d0e('0x2b')]){return'';}for(var _0x21ee08='(',_0x5bd0f5=0x0;_0x5bd0f5<_0x5cd93c[_0x1d0e('0x57')][_0x1d0e('0x2b')];_0x5bd0f5+=0x1){_0x5bd0f5>0x0&&(_0x21ee08+='\x20'+_0x5cd93c['operator']+'\x20');_0x21ee08+=_0x5cd93c[_0x1d0e('0x57')][_0x5bd0f5][_0x1d0e('0x58')]?_0x328b93(_0x5cd93c[_0x1d0e('0x57')][_0x5bd0f5][_0x1d0e('0x58')]):_0x5cd93c[_0x1d0e('0x57')][_0x5bd0f5][_0x1d0e('0x59')]+'\x20'+_0x5cd93c[_0x1d0e('0x57')][_0x5bd0f5][_0x1d0e('0x5a')]+(_0x12317a(_0x5cd93c[_0x1d0e('0x57')][_0x5bd0f5][_0x1d0e('0x5a')])?'\x20'+_0x5cd93c[_0x1d0e('0x57')][_0x5bd0f5][_0x1d0e('0x7a')]:'');}return _0x21ee08+')';};var _0x12a024={'where':{'id':_0x2faf2a[_0x1d0e('0x3b')]['id']}},_0xc81518,_0x43f220,_0x5c3386,_0x518bf1,_0x1d0764;_0x12a024=_[_0x1d0e('0x3c')]({},_0x12a024,_0x2faf2a[_0x1d0e('0x35')]);return db['AnalyticDefaultReport'][_0x1d0e('0x3d')](_0x12a024)[_0x1d0e('0x1c')](function(_0x3ffd58){if(_0x3ffd58){_0xc81518=_0x3ffd58;return _0x3ffd58[_0x1d0e('0x8f')]();}return null;})[_0x1d0e('0x1c')](function(_0x34a3e2){if(_0x34a3e2){if(!_0x34a3e2['length']){throw new db[(_0x1d0e('0x5b'))][(_0x1d0e('0x5c'))](_0x1d0e('0x5d'));}_0x43f220=_0x34a3e2;return db[_0x1d0e('0x5e')][_0x1d0e('0x39')]({'raw':!![]});}return null;})[_0x1d0e('0x1c')](function(_0x36ee4a){if(_0x36ee4a){_0x5c3386=_[_0x1d0e('0x5f')](_0x36ee4a,'id');var _0x1244df;var _0x273b6e=squel['select']();_0x273b6e[_0x1d0e('0x61')](_0xc81518[_0x1d0e('0x62')]);for(var _0x4a2e81=0x0;_0x4a2e81<_0x43f220[_0x1d0e('0x2b')];_0x4a2e81+=0x1){_0x1244df=_0x43f220[_0x4a2e81]['MetricId']?_0x5c3386[_0x43f220[_0x4a2e81]['MetricId']][_0x1d0e('0x7b')]:_0x43f220[_0x4a2e81][_0x1d0e('0x59')];_0x1244df=_0x43f220[_0x4a2e81][_0x1d0e('0x64')]?_[_0x1d0e('0x65')](_0x1342a6[_0x43f220[_0x4a2e81]['function']],'%s',_0x1244df):_0x1244df;_0x1244df=_0x43f220[_0x4a2e81][_0x1d0e('0x66')]?_['replace'](_0x302084[_0x43f220[_0x4a2e81][_0x1d0e('0x66')]],'%s',_0x1244df):_0x1244df;if(_0x43f220[_0x4a2e81][_0x1d0e('0x7c')]){_0x273b6e[_0x1d0e('0x58')](_0x1244df);}_0x43f220[_0x4a2e81]['orderBy']&&_0x273b6e['order'](_0x1244df,_0x43f220[_0x4a2e81][_0x1d0e('0x67')]===_0x1d0e('0x68')?![]:!![]);_0x273b6e[_0x1d0e('0x59')](_0x1244df,_0x43f220[_0x4a2e81]['alias']||_0x1244df);}if(_0xc81518['joins']){_0xc81518[_0x1d0e('0x6a')]=JSON[_0x1d0e('0x7d')](_0xc81518[_0x1d0e('0x6a')]);for(var _0x5dfeb2=0x0;_0x5dfeb2<_0xc81518[_0x1d0e('0x6a')][_0x1d0e('0x2b')];_0x5dfeb2+=0x1){if(_0xc81518[_0x1d0e('0x6a')][_0x5dfeb2][_0x1d0e('0x7e')]&&_['includes'](_0x4bbfc5,_0xc81518['joins'][_0x5dfeb2][_0x1d0e('0x7e')])&&_0xc81518[_0x1d0e('0x6a')][_0x5dfeb2][_0x1d0e('0x6b')]&&_0xc81518[_0x1d0e('0x6a')][_0x5dfeb2][_0x1d0e('0x6c')]&&_0xc81518['joins'][_0x5dfeb2][_0x1d0e('0x6d')]){_0x273b6e[_0xc81518[_0x1d0e('0x6a')][_0x5dfeb2]['type']](_0xc81518[_0x1d0e('0x6a')][_0x5dfeb2][_0x1d0e('0x6c')],null,util[_0x1d0e('0x66')]('%s.%s\x20=\x20%s.%s',_0xc81518['table'],_0xc81518[_0x1d0e('0x6a')][_0x5dfeb2][_0x1d0e('0x6b')],_0xc81518['joins'][_0x5dfeb2]['foreignTable'],_0xc81518[_0x1d0e('0x6a')][_0x5dfeb2][_0x1d0e('0x6d')]));}}}if(_0xc81518[_0x1d0e('0x6f')]){_0xc81518[_0x1d0e('0x6f')]=JSON[_0x1d0e('0x7d')](_0xc81518[_0x1d0e('0x6f')]);_0x273b6e['where'](_0x328b93(_0xc81518['conditions'][_0x1d0e('0x58')]));}_0x1d0764=_0x273b6e[_0x1d0e('0x70')]();_0x273b6e[_0x1d0e('0x17')](_0x44d369);_0x273b6e[_0x1d0e('0x16')](0x0);logger['debug'](_0x1d0e('0x72'),_0x273b6e['toString']());return db[_0x1d0e('0x74')][_0x1d0e('0x24')](_0x273b6e[_0x1d0e('0x73')](),{'type':db[_0x1d0e('0x74')]['QueryTypes'][_0x1d0e('0x8d')]});}})['then'](function(){return{'sql':_0x1d0764[_0x1d0e('0x73')]()};})['then'](respondWithResult(_0x3bde50,null))['catch'](handleError(_0x3bde50,null));};
\ No newline at end of file
+var _0xe984=['savename','countTable','COUNT(*)','run','runReport','COUNT(DISTINCT\x20%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','value','keyBy','fast-json-patch','moment','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','sendStatus','status','end','offset','limit','Content-Range','json','apply','reject','save','update','then','destroy','error','name','send','AnalyticDefaultReport','rawAttributes','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','filter','map','options','count','findAll','rows','catch','show','params','fields','includeAll','include','find','create','body','preview','join','right_join','outer_join','MAX(%s)','MIN(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','SEC_TO_TIME(%s)','UNIX_TIMESTAMP(%s)','IS\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','operator','rules','group','field','condition','getFields','Please\x20insert\x20at\x20least\x20one\x20field!','AnalyticMetric','select','table','MetricId','metric','function','format','replace','orderBy','DESC','joins','parse','type','includes','parentKey','foreignKey','foreignTable','%s.%s\x20=\x20%s.%s','conditions','clone','debug','Limited\x20Query:','toString','sequelize','QueryTypes','left_join','cross_join','SUM(%s)','COUNT(%s)','AVG(%s)','GROUP_CONCAT(%s)','DATE(%s)','HOUR(%s)','ROUND(%s)','IS\x20NOT\x20NULL','Sequelize','ValidationError','from','groupBy','alias','SELECT','output','web','%s-%s.%s','randomstring','generate','csv','AnalyticExtractedReport','.createdAt\x20BETWEEN\x20?\x20AND\x20?','startDate','endDate','info','Run\x20Query:','child_process','fork','../../components/export/','../../files/reports'];(function(_0x15e6fe,_0x1a5c39){var _0x34894d=function(_0x32eec2){while(--_0x32eec2){_0x15e6fe['push'](_0x15e6fe['shift']());}};_0x34894d(++_0x1a5c39);}(_0xe984,0x1d4));var _0x4e98=function(_0x414f67,_0x861aed){_0x414f67=_0x414f67-0x0;var _0x338537=_0xe984[_0x414f67];return _0x338537;};'use strict';var jsonpatch=require(_0x4e98('0x0'));var rp=require('request-promise');var moment=require(_0x4e98('0x1'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x4e98('0x2'));var path=require(_0x4e98('0x3'));var sox=require(_0x4e98('0x4'));var csv=require('to-csv');var ejs=require(_0x4e98('0x5'));var fs=require('fs');var _=require(_0x4e98('0x6'));var squel=require(_0x4e98('0x7'));var crypto=require(_0x4e98('0x8'));var jsforce=require(_0x4e98('0x9'));var deskjs=require(_0x4e98('0xa'));var toCsv=require('to-csv');var querystring=require(_0x4e98('0xb'));var Papa=require(_0x4e98('0xc'));var qs=require(_0x4e98('0xd'));var logger=require(_0x4e98('0xe'))(_0x4e98('0xf'));var utils=require('../../config/utils');var config=require(_0x4e98('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x10ca21,_0x46b604){_0x46b604=_0x46b604||0xcc;return function(_0xf3a0ee){if(_0xf3a0ee){return _0x10ca21[_0x4e98('0x11')](_0x46b604);}return _0x10ca21[_0x4e98('0x12')](_0x46b604)[_0x4e98('0x13')]();};}function respondWithResult(_0x56dba6,_0x2af5b1){_0x2af5b1=_0x2af5b1||0xc8;return function(_0x23b803){if(_0x23b803){return _0x56dba6[_0x4e98('0x12')](_0x2af5b1)['json'](_0x23b803);}};}function respondWithFilteredResult(_0x4851fc,_0x29e3b5){return function(_0x5ad28e){if(_0x5ad28e){var _0xf8751d=_0x5ad28e['count'],_0x1b7292=_0x29e3b5[_0x4e98('0x14')],_0x5efdd5=_0x29e3b5[_0x4e98('0x14')]+_0x29e3b5[_0x4e98('0x15')],_0x365888;if(_0x5efdd5>=_0xf8751d){_0x5efdd5=_0xf8751d;_0x365888=0xc8;}else{_0x365888=0xce;}_0x4851fc['status'](_0x365888);return _0x4851fc['set'](_0x4e98('0x16'),_0x1b7292+'-'+_0x5efdd5+'/'+_0xf8751d)[_0x4e98('0x17')](_0x5ad28e);}return null;};}function patchUpdates(_0x595188){return function(_0x51ff74){try{jsonpatch[_0x4e98('0x18')](_0x51ff74,_0x595188,!![]);}catch(_0x102a50){return BPromise[_0x4e98('0x19')](_0x102a50);}return _0x51ff74[_0x4e98('0x1a')]();};}function saveUpdates(_0x32bbdc,_0x186812){return function(_0x30f586){if(_0x30f586){return _0x30f586[_0x4e98('0x1b')](_0x32bbdc)[_0x4e98('0x1c')](function(_0x23c077){return _0x23c077;});}return null;};}function removeEntity(_0x41e790,_0x47ee4c){return function(_0x1e4d6d){if(_0x1e4d6d){return _0x1e4d6d[_0x4e98('0x1d')]()[_0x4e98('0x1c')](function(){_0x41e790[_0x4e98('0x12')](0xcc)[_0x4e98('0x13')]();});}};}function handleEntityNotFound(_0x150b5c,_0x9df986){return function(_0x484134){if(!_0x484134){_0x150b5c[_0x4e98('0x11')](0x194);}return _0x484134;};}function handleError(_0x53ad16,_0x1badbb){_0x1badbb=_0x1badbb||0x1f4;return function(_0x867695){logger[_0x4e98('0x1e')](_0x867695['stack']);if(_0x867695[_0x4e98('0x1f')]){delete _0x867695['name'];}_0x53ad16[_0x4e98('0x12')](_0x1badbb)[_0x4e98('0x20')](_0x867695);};}exports['index']=function(_0x2e6972,_0x465167){var _0xcfec5d={},_0x2afdea={},_0x4487b6={'count':0x0,'rows':[]};var _0x21b56f=db[_0x4e98('0x21')][_0x4e98('0x22')];_0x2afdea[_0x4e98('0x23')]=_[_0x4e98('0x24')](_0x21b56f);var _0x28c1cf={'dateStart':_0x2e6972['query'][_0x4e98('0x25')],'dateEnd':_0x2e6972[_0x4e98('0x26')]['dateEnd']};delete _0x2e6972['query']['dateStart'];delete _0x2e6972[_0x4e98('0x26')][_0x4e98('0x27')];_0x2afdea[_0x4e98('0x26')]=_['keys'](_0x2e6972[_0x4e98('0x26')]);_0x2afdea[_0x4e98('0x28')]=_[_0x4e98('0x29')](_0x2afdea['model'],_0x2afdea[_0x4e98('0x26')]);_0xcfec5d['attributes']=_[_0x4e98('0x29')](_0x2afdea[_0x4e98('0x23')],qs['fields'](_0x2e6972[_0x4e98('0x26')]['fields']));_0xcfec5d[_0x4e98('0x2a')]=_0xcfec5d['attributes'][_0x4e98('0x2b')]?_0xcfec5d[_0x4e98('0x2a')]:_0x2afdea[_0x4e98('0x23')];if(!_0x2e6972[_0x4e98('0x26')][_0x4e98('0x2c')](_0x4e98('0x2d'))){_0xcfec5d[_0x4e98('0x15')]=qs[_0x4e98('0x15')](_0x2e6972[_0x4e98('0x26')]['limit']);_0xcfec5d[_0x4e98('0x14')]=qs[_0x4e98('0x14')](_0x2e6972[_0x4e98('0x26')][_0x4e98('0x14')]);}_0xcfec5d[_0x4e98('0x2e')]=qs[_0x4e98('0x2f')](_0x2e6972[_0x4e98('0x26')][_0x4e98('0x2f')]);_0xcfec5d[_0x4e98('0x30')]=qs[_0x4e98('0x28')](_[_0x4e98('0x31')](_0x2e6972[_0x4e98('0x26')],_0x2afdea[_0x4e98('0x28')]));if(_0x28c1cf[_0x4e98('0x25')]){if(_0x28c1cf[_0x4e98('0x27')]){_0x28c1cf[_0x4e98('0x27')]=moment(_0x28c1cf[_0x4e98('0x27')])[_0x4e98('0x32')](0x1,_0x4e98('0x33'));}else{_0x28c1cf['dateEnd']=moment(_0x28c1cf[_0x4e98('0x25')])[_0x4e98('0x32')](0x1,_0x4e98('0x33'));}_[_0x4e98('0x34')](_0xcfec5d[_0x4e98('0x30')],{'createdAt':{'$gte':_0x28c1cf[_0x4e98('0x25')],'$lte':_0x28c1cf[_0x4e98('0x27')]}});}if(_0x2e6972[_0x4e98('0x26')][_0x4e98('0x35')]){_0xcfec5d[_0x4e98('0x30')]=_['merge'](_0xcfec5d['where'],{'$or':_[_0x4e98('0x36')](_0xcfec5d['attributes'],function(_0x165e3f){var _0x46f55d={};_0x46f55d[_0x165e3f]={'$like':'%'+_0x2e6972['query']['filter']+'%'};return _0x46f55d;})});}_0xcfec5d=_[_0x4e98('0x34')]({},_0xcfec5d,_0x2e6972[_0x4e98('0x37')]);var _0x9b95be={'where':_0xcfec5d[_0x4e98('0x30')]};return db[_0x4e98('0x21')][_0x4e98('0x38')](_0x9b95be)[_0x4e98('0x1c')](function(_0x5c09b1){_0x4487b6[_0x4e98('0x38')]=_0x5c09b1;if(_0x2e6972['query']['includeAll']){_0xcfec5d['include']=[{'all':!![]}];}return db[_0x4e98('0x21')][_0x4e98('0x39')](_0xcfec5d);})[_0x4e98('0x1c')](function(_0x376660){_0x4487b6[_0x4e98('0x3a')]=_0x376660;return _0x4487b6;})[_0x4e98('0x1c')](respondWithFilteredResult(_0x465167,_0xcfec5d))[_0x4e98('0x3b')](handleError(_0x465167,null));};exports[_0x4e98('0x3c')]=function(_0xc9a6ee,_0x1a1a71){var _0x5c2123={'raw':!![],'where':{'id':_0xc9a6ee[_0x4e98('0x3d')]['id']}},_0x4cb82f={};_0x4cb82f[_0x4e98('0x23')]=_[_0x4e98('0x24')](db[_0x4e98('0x21')][_0x4e98('0x22')]);_0x4cb82f[_0x4e98('0x26')]=_['keys'](_0xc9a6ee[_0x4e98('0x26')]);_0x4cb82f[_0x4e98('0x28')]=_[_0x4e98('0x29')](_0x4cb82f[_0x4e98('0x23')],_0x4cb82f[_0x4e98('0x26')]);_0x5c2123[_0x4e98('0x2a')]=_['intersection'](_0x4cb82f[_0x4e98('0x23')],qs['fields'](_0xc9a6ee[_0x4e98('0x26')][_0x4e98('0x3e')]));_0x5c2123[_0x4e98('0x2a')]=_0x5c2123['attributes'][_0x4e98('0x2b')]?_0x5c2123['attributes']:_0x4cb82f[_0x4e98('0x23')];if(_0xc9a6ee[_0x4e98('0x26')][_0x4e98('0x3f')]){_0x5c2123[_0x4e98('0x40')]=[{'all':!![]}];}_0x5c2123=_[_0x4e98('0x34')]({},_0x5c2123,_0xc9a6ee[_0x4e98('0x37')]);return db['AnalyticDefaultReport'][_0x4e98('0x41')](_0x5c2123)['then'](handleEntityNotFound(_0x1a1a71,null))[_0x4e98('0x1c')](respondWithResult(_0x1a1a71,null))[_0x4e98('0x3b')](handleError(_0x1a1a71,null));};exports[_0x4e98('0x42')]=function(_0xdba34d,_0x2ebee8){return db['AnalyticDefaultReport'][_0x4e98('0x42')](_0xdba34d['body'],{})[_0x4e98('0x1c')](respondWithResult(_0x2ebee8,0xc9))[_0x4e98('0x3b')](handleError(_0x2ebee8,null));};exports['update']=function(_0x26f561,_0xc25671){if(_0x26f561['body']['id']){delete _0x26f561[_0x4e98('0x43')]['id'];}return db[_0x4e98('0x21')][_0x4e98('0x41')]({'where':{'id':_0x26f561[_0x4e98('0x3d')]['id']}})[_0x4e98('0x1c')](handleEntityNotFound(_0xc25671,null))[_0x4e98('0x1c')](saveUpdates(_0x26f561[_0x4e98('0x43')],null))[_0x4e98('0x1c')](respondWithResult(_0xc25671,null))[_0x4e98('0x3b')](handleError(_0xc25671,null));};exports[_0x4e98('0x1d')]=function(_0x4c6fd5,_0x110251){return db['AnalyticDefaultReport']['find']({'where':{'id':_0x4c6fd5[_0x4e98('0x3d')]['id']}})[_0x4e98('0x1c')](handleEntityNotFound(_0x110251,null))[_0x4e98('0x1c')](removeEntity(_0x110251,null))[_0x4e98('0x3b')](handleError(_0x110251,null));};exports[_0x4e98('0x44')]=function(_0x2421ec,_0x227cc9){var _0x320abd=0xa;var _0xd5329c=[_0x4e98('0x45'),'left_join',_0x4e98('0x46'),_0x4e98('0x47'),'cross_join'];var _0x18435c={'SUM':'SUM(%s)','COUNT':'COUNT(%s)','COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0x4e98('0x48'),'MIN':_0x4e98('0x49'),'AVG':'AVG(%s)','GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':_0x4e98('0x4a'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x3b1514={'SEC_TO_TIME':_0x4e98('0x4b'),'DATE':'DATE(%s)','HOUR':'HOUR(%s)','ROUND':'ROUND(%s)','UNIX_TIMESTAMP':_0x4e98('0x4c')};var _0x55ea93=function(_0x44cfd5){return!_['includes']([_0x4e98('0x4d'),'IS\x20NOT\x20NULL',_0x4e98('0x4e'),_0x4e98('0x4f')],_0x44cfd5);};var _0x42fafd=function(_0x204d27){if(!_0x204d27||!_0x204d27['rules']['length']){return'';}for(var _0x52b825='(',_0x1baf9c=0x0;_0x1baf9c<_0x204d27['rules'][_0x4e98('0x2b')];_0x1baf9c+=0x1){_0x1baf9c>0x0&&(_0x52b825+='\x20'+_0x204d27[_0x4e98('0x50')]+'\x20');_0x52b825+=_0x204d27[_0x4e98('0x51')][_0x1baf9c][_0x4e98('0x52')]?_0x42fafd(_0x204d27[_0x4e98('0x51')][_0x1baf9c][_0x4e98('0x52')]):_0x204d27[_0x4e98('0x51')][_0x1baf9c][_0x4e98('0x53')]+'\x20'+_0x204d27[_0x4e98('0x51')][_0x1baf9c][_0x4e98('0x54')]+(_0x55ea93(_0x204d27[_0x4e98('0x51')][_0x1baf9c]['condition'])?'\x20'+_0x204d27[_0x4e98('0x51')][_0x1baf9c]['value']:'');}return _0x52b825+')';};var _0x179e70={'where':{'id':_0x2421ec[_0x4e98('0x3d')]['id']}},_0x111e97,_0x62214,_0x256a88,_0x54f3e0,_0x1d5a28;_0x179e70=_[_0x4e98('0x34')]({},_0x179e70,_0x2421ec[_0x4e98('0x37')]);return db['AnalyticDefaultReport'][_0x4e98('0x41')](_0x179e70)['then'](function(_0x4a837f){if(_0x4a837f){_0x111e97=_0x4a837f;return _0x4a837f[_0x4e98('0x55')]();}return null;})[_0x4e98('0x1c')](function(_0x1b5c0c){if(_0x1b5c0c){if(!_0x1b5c0c['length']){throw new db['Sequelize']['ValidationError'](_0x4e98('0x56'));}_0x62214=_0x1b5c0c;return db[_0x4e98('0x57')][_0x4e98('0x39')]({'raw':!![]});}return null;})[_0x4e98('0x1c')](function(_0x32be9f){if(_0x32be9f){_0x256a88=_['keyBy'](_0x32be9f,'id');var _0x449f52;var _0x4175fb=squel[_0x4e98('0x58')]();_0x4175fb['from'](_0x111e97[_0x4e98('0x59')]);for(var _0x210b7c=0x0;_0x210b7c<_0x62214[_0x4e98('0x2b')];_0x210b7c+=0x1){_0x449f52=_0x62214[_0x210b7c][_0x4e98('0x5a')]?_0x256a88[_0x62214[_0x210b7c][_0x4e98('0x5a')]][_0x4e98('0x5b')]:_0x62214[_0x210b7c]['field'];_0x449f52=_0x62214[_0x210b7c][_0x4e98('0x5c')]?_['replace'](_0x18435c[_0x62214[_0x210b7c][_0x4e98('0x5c')]],'%s',_0x449f52):_0x449f52;_0x449f52=_0x62214[_0x210b7c][_0x4e98('0x5d')]?_[_0x4e98('0x5e')](_0x3b1514[_0x62214[_0x210b7c][_0x4e98('0x5d')]],'%s',_0x449f52):_0x449f52;if(_0x62214[_0x210b7c]['groupBy']){_0x4175fb[_0x4e98('0x52')](_0x449f52);}_0x62214[_0x210b7c][_0x4e98('0x5f')]&&_0x4175fb[_0x4e98('0x2e')](_0x449f52,_0x62214[_0x210b7c][_0x4e98('0x5f')]===_0x4e98('0x60')?![]:!![]);_0x4175fb[_0x4e98('0x53')](_0x449f52,_0x62214[_0x210b7c]['alias']||_0x449f52);}if(_0x111e97[_0x4e98('0x61')]){_0x111e97['joins']=JSON[_0x4e98('0x62')](_0x111e97['joins']);for(var _0x5c10c4=0x0;_0x5c10c4<_0x111e97[_0x4e98('0x61')][_0x4e98('0x2b')];_0x5c10c4+=0x1){if(_0x111e97[_0x4e98('0x61')][_0x5c10c4][_0x4e98('0x63')]&&_[_0x4e98('0x64')](_0xd5329c,_0x111e97[_0x4e98('0x61')][_0x5c10c4][_0x4e98('0x63')])&&_0x111e97[_0x4e98('0x61')][_0x5c10c4][_0x4e98('0x65')]&&_0x111e97[_0x4e98('0x61')][_0x5c10c4]['foreignTable']&&_0x111e97[_0x4e98('0x61')][_0x5c10c4][_0x4e98('0x66')]){_0x4175fb[_0x111e97[_0x4e98('0x61')][_0x5c10c4][_0x4e98('0x63')]](_0x111e97[_0x4e98('0x61')][_0x5c10c4][_0x4e98('0x67')],null,util[_0x4e98('0x5d')](_0x4e98('0x68'),_0x111e97[_0x4e98('0x59')],_0x111e97[_0x4e98('0x61')][_0x5c10c4][_0x4e98('0x65')],_0x111e97[_0x4e98('0x61')][_0x5c10c4][_0x4e98('0x67')],_0x111e97[_0x4e98('0x61')][_0x5c10c4][_0x4e98('0x66')]));}}}if(_0x111e97['conditions']){_0x111e97[_0x4e98('0x69')]=JSON[_0x4e98('0x62')](_0x111e97[_0x4e98('0x69')]);_0x4175fb[_0x4e98('0x30')](_0x42fafd(_0x111e97['conditions'][_0x4e98('0x52')]));}_0x1d5a28=_0x4175fb[_0x4e98('0x6a')]();_0x4175fb[_0x4e98('0x15')](_0x320abd);_0x4175fb[_0x4e98('0x14')](0x0);logger[_0x4e98('0x6b')](_0x4e98('0x6c'),_0x4175fb[_0x4e98('0x6d')]());return db[_0x4e98('0x6e')][_0x4e98('0x26')](_0x4175fb[_0x4e98('0x6d')](),{'type':db['sequelize'][_0x4e98('0x6f')]['SELECT']});}})[_0x4e98('0x1c')](respondWithResult(_0x227cc9,null))[_0x4e98('0x3b')](handleError(_0x227cc9,null));};function runReport(_0x527b02,_0x5b1bd3,_0x3a057a){var _0xc519d2=_0x5b1bd3['name'];var _0x38eaf5=0xa;var _0x2d161e=['join',_0x4e98('0x70'),'right_join','outer_join',_0x4e98('0x71')];var _0x36180a={'SUM':_0x4e98('0x72'),'COUNT':_0x4e98('0x73'),'COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0x4e98('0x48'),'MIN':_0x4e98('0x49'),'AVG':_0x4e98('0x74'),'GROUP_CONCAT':_0x4e98('0x75'),'GROUP_CONCAT ASC':_0x4e98('0x4a'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x30edd0={'SEC_TO_TIME':_0x4e98('0x4b'),'DATE':_0x4e98('0x76'),'HOUR':_0x4e98('0x77'),'ROUND':_0x4e98('0x78'),'UNIX_TIMESTAMP':_0x4e98('0x4c')};var _0x1e4a95=function(_0xd7c02){return!_['includes']([_0x4e98('0x4d'),_0x4e98('0x79'),_0x4e98('0x4e'),_0x4e98('0x4f')],_0xd7c02);};var _0x5b9cde=function(_0x392968){if(!_0x392968||!_0x392968[_0x4e98('0x51')][_0x4e98('0x2b')]){return'';}for(var _0x76e4ec='(',_0x1a1741=0x0;_0x1a1741<_0x392968[_0x4e98('0x51')]['length'];_0x1a1741+=0x1){_0x1a1741>0x0&&(_0x76e4ec+='\x20'+_0x392968[_0x4e98('0x50')]+'\x20');_0x76e4ec+=_0x392968[_0x4e98('0x51')][_0x1a1741]['group']?_0x5b9cde(_0x392968['rules'][_0x1a1741][_0x4e98('0x52')]):_0x392968['rules'][_0x1a1741][_0x4e98('0x53')]+'\x20'+_0x392968['rules'][_0x1a1741][_0x4e98('0x54')]+(_0x1e4a95(_0x392968[_0x4e98('0x51')][_0x1a1741][_0x4e98('0x54')])?'\x20'+_0x392968[_0x4e98('0x51')][_0x1a1741]['value']:'');}return _0x76e4ec+')';};var _0x1271ab={'where':{'id':_0x527b02['id']}},_0x5ea08a,_0x31edec,_0x38a9d8,_0x1894d4,_0x37d915;_0x1271ab=_[_0x4e98('0x34')]({},_0x1271ab,_0x3a057a);return db[_0x4e98('0x21')][_0x4e98('0x41')](_0x1271ab)[_0x4e98('0x1c')](function(_0xf8653a){if(_0xf8653a){_0x5ea08a=_0xf8653a;return _0xf8653a[_0x4e98('0x55')]();}return null;})['then'](function(_0x408e23){if(_0x408e23){if(!_0x408e23['length']){throw new db[(_0x4e98('0x7a'))][(_0x4e98('0x7b'))](_0x4e98('0x56'));}_0x31edec=_0x408e23;return db[_0x4e98('0x57')][_0x4e98('0x39')]({'raw':!![]});}return null;})[_0x4e98('0x1c')](function(_0x371a78){if(_0x371a78){_0x38a9d8=_['keyBy'](_0x371a78,'id');var _0x4006d0;var _0x59b013=squel[_0x4e98('0x58')]();_0x59b013[_0x4e98('0x7c')](_0x5ea08a[_0x4e98('0x59')]);for(var _0x4efeff=0x0;_0x4efeff<_0x31edec['length'];_0x4efeff+=0x1){_0x4006d0=_0x31edec[_0x4efeff][_0x4e98('0x5a')]?_0x38a9d8[_0x31edec[_0x4efeff][_0x4e98('0x5a')]][_0x4e98('0x5b')]:_0x31edec[_0x4efeff]['field'];_0x4006d0=_0x31edec[_0x4efeff][_0x4e98('0x5c')]?_[_0x4e98('0x5e')](_0x36180a[_0x31edec[_0x4efeff]['function']],'%s',_0x4006d0):_0x4006d0;_0x4006d0=_0x31edec[_0x4efeff][_0x4e98('0x5d')]?_[_0x4e98('0x5e')](_0x30edd0[_0x31edec[_0x4efeff]['format']],'%s',_0x4006d0):_0x4006d0;if(_0x31edec[_0x4efeff][_0x4e98('0x7d')]){_0x59b013['group'](_0x4006d0);}_0x31edec[_0x4efeff][_0x4e98('0x5f')]&&_0x59b013[_0x4e98('0x2e')](_0x4006d0,_0x31edec[_0x4efeff]['orderBy']==='DESC'?![]:!![]);_0x59b013[_0x4e98('0x53')](_0x4006d0,_0x31edec[_0x4efeff][_0x4e98('0x7e')]||_0x4006d0);}if(_0x5ea08a[_0x4e98('0x61')]){_0x5ea08a[_0x4e98('0x61')]=JSON[_0x4e98('0x62')](_0x5ea08a['joins']);for(var _0x4f9d22=0x0;_0x4f9d22<_0x5ea08a[_0x4e98('0x61')][_0x4e98('0x2b')];_0x4f9d22+=0x1){if(_0x5ea08a[_0x4e98('0x61')][_0x4f9d22][_0x4e98('0x63')]&&_[_0x4e98('0x64')](_0x2d161e,_0x5ea08a['joins'][_0x4f9d22]['type'])&&_0x5ea08a[_0x4e98('0x61')][_0x4f9d22]['parentKey']&&_0x5ea08a['joins'][_0x4f9d22][_0x4e98('0x67')]&&_0x5ea08a['joins'][_0x4f9d22]['foreignKey']){_0x59b013[_0x5ea08a[_0x4e98('0x61')][_0x4f9d22][_0x4e98('0x63')]](_0x5ea08a[_0x4e98('0x61')][_0x4f9d22][_0x4e98('0x67')],null,util[_0x4e98('0x5d')](_0x4e98('0x68'),_0x5ea08a['table'],_0x5ea08a[_0x4e98('0x61')][_0x4f9d22]['parentKey'],_0x5ea08a[_0x4e98('0x61')][_0x4f9d22][_0x4e98('0x67')],_0x5ea08a[_0x4e98('0x61')][_0x4f9d22]['foreignKey']));}}}if(_0x5ea08a[_0x4e98('0x69')]){_0x5ea08a[_0x4e98('0x69')]=JSON[_0x4e98('0x62')](_0x5ea08a['conditions']);_0x59b013['where'](_0x5b9cde(_0x5ea08a['conditions'][_0x4e98('0x52')]));}_0x37d915=_0x59b013['clone']();_0x59b013['limit'](_0x38eaf5);_0x59b013['offset'](0x0);logger['debug'](_0x4e98('0x6c'),_0x59b013['toString']());return db['sequelize']['query'](_0x59b013[_0x4e98('0x6d')](),{'type':db['sequelize'][_0x4e98('0x6f')][_0x4e98('0x7f')]});}})['then'](function(_0x429e66){if(!_0x429e66['length']){throw new db[(_0x4e98('0x7a'))][(_0x4e98('0x7b'))]('No\x20Data!');}if(_0x5b1bd3[_0x4e98('0x80')]===_0x4e98('0x81')){return null;}var _0x5a4e34=_[_0x4e98('0x34')](_0x5b1bd3,{'name':_0x5b1bd3['fullPath']||_0x5b1bd3['name']||_0x5ea08a['name'],'basename':_0xc519d2,'savename':util['format'](_0x4e98('0x82'),_0x5b1bd3[_0x4e98('0x1f')]||_0x5ea08a[_0x4e98('0x1f')],require(_0x4e98('0x83'))[_0x4e98('0x84')](0x4),_0x5b1bd3[_0x4e98('0x80')]||_0x4e98('0x85'))});return db[_0x4e98('0x86')][_0x4e98('0x42')](_0x5a4e34,{'raw':!![]});})[_0x4e98('0x1c')](function(_0x184874){_0x37d915['where'](_0x5ea08a[_0x4e98('0x59')]+_0x4e98('0x87'),_0x5b1bd3[_0x4e98('0x88')],_0x5b1bd3[_0x4e98('0x89')]);if(_0x184874){logger[_0x4e98('0x8a')](_0x4e98('0x8b'),_0x37d915[_0x4e98('0x6d')]());require(_0x4e98('0x8c'))[_0x4e98('0x8d')](path[_0x4e98('0x45')](__dirname,_0x4e98('0x8e'),_0x184874[_0x4e98('0x80')]),[_0x184874['id'],_0x37d915[_0x4e98('0x6d')](),path[_0x4e98('0x45')](__dirname,_0x4e98('0x8f'),_0x184874[_0x4e98('0x90')]),_0xc519d2]);return _0x184874;}else{var _0x586b74=squel[_0x4e98('0x58')]();_0x586b74[_0x4e98('0x7c')]('('+_0x37d915['toString']()+')',_0x4e98('0x91'));_0x586b74[_0x4e98('0x53')](_0x4e98('0x92'),'count');_0x37d915[_0x4e98('0x15')](_0x5b1bd3['limit']||_0x38eaf5);_0x37d915[_0x4e98('0x14')](_0x5b1bd3[_0x4e98('0x14')]||0x0);return db['sequelize'][_0x4e98('0x26')](_0x586b74[_0x4e98('0x6d')](),{'type':db[_0x4e98('0x6e')]['QueryTypes'][_0x4e98('0x7f')]})[_0x4e98('0x1c')](function(_0x1dea40){if(!_0x1dea40[_0x4e98('0x2b')]){_0x1894d4=0x0;}else{_0x1894d4=_0x1dea40[0x0][_0x4e98('0x38')]||0x0;}return db['sequelize'][_0x4e98('0x26')](_0x37d915[_0x4e98('0x6d')](),{'type':db[_0x4e98('0x6e')]['QueryTypes']['SELECT']});})[_0x4e98('0x1c')](function(_0x1d28fe){return{'rows':_0x1d28fe||[],'count':_0x1894d4};});}});}exports[_0x4e98('0x93')]=function(_0x9a60ea,_0x3c37d9){return runReport(_0x9a60ea['params'],_0x9a60ea[_0x4e98('0x26')],_0x9a60ea['options'])[_0x4e98('0x1c')](respondWithResult(_0x3c37d9,null))['catch'](handleError(_0x3c37d9,null));};exports[_0x4e98('0x94')]=runReport;exports[_0x4e98('0x26')]=function(_0x33f6f5,_0x38d522){var _0x6577eb=0xa;var _0x3b5bc5=['join','left_join',_0x4e98('0x46'),'outer_join',_0x4e98('0x71')];var _0x5c0141={'SUM':_0x4e98('0x72'),'COUNT':_0x4e98('0x73'),'COUNT DISTINCT':_0x4e98('0x95'),'MAX':_0x4e98('0x48'),'MIN':'MIN(%s)','AVG':_0x4e98('0x74'),'GROUP_CONCAT':_0x4e98('0x75'),'GROUP_CONCAT ASC':_0x4e98('0x4a'),'GROUP_CONCAT DESC':_0x4e98('0x96')};var _0x1e3059={'SEC_TO_TIME':_0x4e98('0x4b'),'DATE':_0x4e98('0x76'),'HOUR':_0x4e98('0x77'),'ROUND':'ROUND(%s)','UNIX_TIMESTAMP':_0x4e98('0x4c')};var _0x3e9b51=function(_0x3030db){return!_['includes']([_0x4e98('0x4d'),_0x4e98('0x79'),_0x4e98('0x4e'),_0x4e98('0x4f')],_0x3030db);};var _0x524f78=function(_0x22bc8b){if(!_0x22bc8b||!_0x22bc8b[_0x4e98('0x51')][_0x4e98('0x2b')]){return'';}for(var _0x455807='(',_0x277dc7=0x0;_0x277dc7<_0x22bc8b['rules'][_0x4e98('0x2b')];_0x277dc7+=0x1){_0x277dc7>0x0&&(_0x455807+='\x20'+_0x22bc8b[_0x4e98('0x50')]+'\x20');_0x455807+=_0x22bc8b['rules'][_0x277dc7][_0x4e98('0x52')]?_0x524f78(_0x22bc8b[_0x4e98('0x51')][_0x277dc7][_0x4e98('0x52')]):_0x22bc8b[_0x4e98('0x51')][_0x277dc7][_0x4e98('0x53')]+'\x20'+_0x22bc8b[_0x4e98('0x51')][_0x277dc7][_0x4e98('0x54')]+(_0x3e9b51(_0x22bc8b['rules'][_0x277dc7][_0x4e98('0x54')])?'\x20'+_0x22bc8b['rules'][_0x277dc7][_0x4e98('0x97')]:'');}return _0x455807+')';};var _0x22f62d={'where':{'id':_0x33f6f5['params']['id']}},_0xfa28b2,_0x3054a3,_0x1242ef,_0x4664f9,_0x327eeb;_0x22f62d=_[_0x4e98('0x34')]({},_0x22f62d,_0x33f6f5[_0x4e98('0x37')]);return db[_0x4e98('0x21')][_0x4e98('0x41')](_0x22f62d)[_0x4e98('0x1c')](function(_0x3a35d7){if(_0x3a35d7){_0xfa28b2=_0x3a35d7;return _0x3a35d7[_0x4e98('0x55')]();}return null;})[_0x4e98('0x1c')](function(_0x5228ad){if(_0x5228ad){if(!_0x5228ad[_0x4e98('0x2b')]){throw new db['Sequelize'][(_0x4e98('0x7b'))]('Please\x20insert\x20at\x20least\x20one\x20field!');}_0x3054a3=_0x5228ad;return db[_0x4e98('0x57')][_0x4e98('0x39')]({'raw':!![]});}return null;})[_0x4e98('0x1c')](function(_0x5d5121){if(_0x5d5121){_0x1242ef=_[_0x4e98('0x98')](_0x5d5121,'id');var _0x3fbff1;var _0x44ae89=squel[_0x4e98('0x58')]();_0x44ae89[_0x4e98('0x7c')](_0xfa28b2[_0x4e98('0x59')]);for(var _0x54eb1d=0x0;_0x54eb1d<_0x3054a3[_0x4e98('0x2b')];_0x54eb1d+=0x1){_0x3fbff1=_0x3054a3[_0x54eb1d]['MetricId']?_0x1242ef[_0x3054a3[_0x54eb1d][_0x4e98('0x5a')]][_0x4e98('0x5b')]:_0x3054a3[_0x54eb1d][_0x4e98('0x53')];_0x3fbff1=_0x3054a3[_0x54eb1d][_0x4e98('0x5c')]?_[_0x4e98('0x5e')](_0x5c0141[_0x3054a3[_0x54eb1d]['function']],'%s',_0x3fbff1):_0x3fbff1;_0x3fbff1=_0x3054a3[_0x54eb1d][_0x4e98('0x5d')]?_['replace'](_0x1e3059[_0x3054a3[_0x54eb1d]['format']],'%s',_0x3fbff1):_0x3fbff1;if(_0x3054a3[_0x54eb1d][_0x4e98('0x7d')]){_0x44ae89[_0x4e98('0x52')](_0x3fbff1);}_0x3054a3[_0x54eb1d][_0x4e98('0x5f')]&&_0x44ae89[_0x4e98('0x2e')](_0x3fbff1,_0x3054a3[_0x54eb1d][_0x4e98('0x5f')]==='DESC'?![]:!![]);_0x44ae89['field'](_0x3fbff1,_0x3054a3[_0x54eb1d][_0x4e98('0x7e')]||_0x3fbff1);}if(_0xfa28b2[_0x4e98('0x61')]){_0xfa28b2[_0x4e98('0x61')]=JSON[_0x4e98('0x62')](_0xfa28b2[_0x4e98('0x61')]);for(var _0x1497f3=0x0;_0x1497f3<_0xfa28b2[_0x4e98('0x61')][_0x4e98('0x2b')];_0x1497f3+=0x1){if(_0xfa28b2[_0x4e98('0x61')][_0x1497f3]['type']&&_[_0x4e98('0x64')](_0x3b5bc5,_0xfa28b2['joins'][_0x1497f3][_0x4e98('0x63')])&&_0xfa28b2[_0x4e98('0x61')][_0x1497f3][_0x4e98('0x65')]&&_0xfa28b2[_0x4e98('0x61')][_0x1497f3][_0x4e98('0x67')]&&_0xfa28b2['joins'][_0x1497f3][_0x4e98('0x66')]){_0x44ae89[_0xfa28b2[_0x4e98('0x61')][_0x1497f3][_0x4e98('0x63')]](_0xfa28b2['joins'][_0x1497f3]['foreignTable'],null,util[_0x4e98('0x5d')]('%s.%s\x20=\x20%s.%s',_0xfa28b2[_0x4e98('0x59')],_0xfa28b2[_0x4e98('0x61')][_0x1497f3]['parentKey'],_0xfa28b2['joins'][_0x1497f3][_0x4e98('0x67')],_0xfa28b2[_0x4e98('0x61')][_0x1497f3][_0x4e98('0x66')]));}}}if(_0xfa28b2[_0x4e98('0x69')]){_0xfa28b2[_0x4e98('0x69')]=JSON[_0x4e98('0x62')](_0xfa28b2[_0x4e98('0x69')]);_0x44ae89[_0x4e98('0x30')](_0x524f78(_0xfa28b2[_0x4e98('0x69')][_0x4e98('0x52')]));}_0x327eeb=_0x44ae89[_0x4e98('0x6a')]();_0x44ae89['limit'](_0x6577eb);_0x44ae89[_0x4e98('0x14')](0x0);logger[_0x4e98('0x6b')](_0x4e98('0x6c'),_0x44ae89[_0x4e98('0x6d')]());return db[_0x4e98('0x6e')]['query'](_0x44ae89[_0x4e98('0x6d')](),{'type':db[_0x4e98('0x6e')][_0x4e98('0x6f')][_0x4e98('0x7f')]});}})['then'](function(){return{'sql':_0x327eeb[_0x4e98('0x6d')]()};})['then'](respondWithResult(_0x38d522,null))[_0x4e98('0x3b')](handleError(_0x38d522,null));};
\ No newline at end of file
index 3f01310..256089e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcaaa=['define','AnalyticDefaultReport','../../config/logger','api','moment','bluebird','request-promise','./analyticDefaultReport.attributes','exports'];(function(_0x4604ee,_0x336e3d){var _0x2dc012=function(_0x26d2fb){while(--_0x26d2fb){_0x4604ee['push'](_0x4604ee['shift']());}};_0x2dc012(++_0x336e3d);}(_0xcaaa,0x65));var _0xacaa=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xcaaa[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xacaa('0x0'))(_0xacaa('0x1'));var moment=require(_0xacaa('0x2'));var BPromise=require(_0xacaa('0x3'));var rp=require(_0xacaa('0x4'));var attributes=require(_0xacaa('0x5'));module[_0xacaa('0x6')]=function(_0x3b4631,_0x25f8d7){return _0x3b4631[_0xacaa('0x7')](_0xacaa('0x8'),attributes,{'tableName':'analytics_default_reports','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2cdf=['bluebird','request-promise','exports','AnalyticDefaultReport','util','../../config/logger','api'];(function(_0x5a5365,_0x4a3c7f){var _0x2b1919=function(_0xaa73c8){while(--_0xaa73c8){_0x5a5365['push'](_0x5a5365['shift']());}};_0x2b1919(++_0x4a3c7f);}(_0x2cdf,0x18c));var _0xf2cd=function(_0x40220a,_0x22feb1){_0x40220a=_0x40220a-0x0;var _0x3903cc=_0x2cdf[_0x40220a];return _0x3903cc;};'use strict';var _=require('lodash');var util=require(_0xf2cd('0x0'));var logger=require(_0xf2cd('0x1'))(_0xf2cd('0x2'));var moment=require('moment');var BPromise=require(_0xf2cd('0x3'));var rp=require(_0xf2cd('0x4'));var attributes=require('./analyticDefaultReport.attributes');module[_0xf2cd('0x5')]=function(_0x4dc25f,_0x4c6a09){return _0x4dc25f['define'](_0xf2cd('0x6'),attributes,{'tableName':'analytics_default_reports','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bc709d2..53cb821 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfbac=['moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','request','info','AnalyticDefaultReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticDefaultReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','util'];(function(_0xbb091,_0x3fe7ee){var _0x467a04=function(_0x3a978d){while(--_0x3a978d){_0xbb091['push'](_0xbb091['shift']());}};_0x467a04(++_0x3fe7ee);}(_0xfbac,0x167));var _0xcfba=function(_0x491f99,_0x3f6cf8){_0x491f99=_0x491f99-0x0;var _0x451873=_0xfbac[_0x491f99];return _0x451873;};'use strict';var _=require('lodash');var util=require(_0xcfba('0x0'));var moment=require(_0xcfba('0x1'));var BPromise=require(_0xcfba('0x2'));var rs=require(_0xcfba('0x3'));var fs=require('fs');var db=require(_0xcfba('0x4'))['db'];var utils=require(_0xcfba('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0xcfba('0x6'));var jayson=require(_0xcfba('0x7'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x3bb3af,_0x5af20d,_0x2ca4c6){return new BPromise(function(_0x5b7669,_0x15e8d6){return client[_0xcfba('0x8')](_0x3bb3af,_0x2ca4c6)['then'](function(_0x25aa73){logger[_0xcfba('0x9')](_0xcfba('0xa'),_0x5af20d,_0xcfba('0xb'));logger[_0xcfba('0xc')](_0xcfba('0xd'),_0x5af20d,_0xcfba('0xb'),JSON[_0xcfba('0xe')](_0x25aa73));if(_0x25aa73[_0xcfba('0xf')]){if(_0x25aa73[_0xcfba('0xf')][_0xcfba('0x10')]===0x1f4){logger[_0xcfba('0xf')]('AnalyticDefaultReport,\x20%s,\x20%s',_0x5af20d,_0x25aa73['error'][_0xcfba('0x11')]);return _0x15e8d6(_0x25aa73[_0xcfba('0xf')]['message']);}logger[_0xcfba('0xf')](_0xcfba('0xa'),_0x5af20d,_0x25aa73[_0xcfba('0xf')][_0xcfba('0x11')]);return _0x5b7669(_0x25aa73[_0xcfba('0xf')][_0xcfba('0x11')]);}else{logger[_0xcfba('0x9')](_0xcfba('0xa'),_0x5af20d,_0xcfba('0xb'));_0x5b7669(_0x25aa73[_0xcfba('0x12')][_0xcfba('0x11')]);}})[_0xcfba('0x13')](function(_0x3fa029){logger['error'](_0xcfba('0xa'),_0x5af20d,_0x3fa029);_0x15e8d6(_0x3fa029);});});}
\ No newline at end of file
+var _0x82c8=['stringify','error','code','message','result','catch','lodash','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','AnalyticDefaultReport,\x20%s,\x20%s','request\x20sent'];(function(_0xde3b94,_0x55dc69){var _0x19467b=function(_0x41767e){while(--_0x41767e){_0xde3b94['push'](_0xde3b94['shift']());}};_0x19467b(++_0x55dc69);}(_0x82c8,0x102));var _0x882c=function(_0x3273cf,_0x13aae9){_0x3273cf=_0x3273cf-0x0;var _0x16ba43=_0x82c8[_0x3273cf];return _0x16ba43;};'use strict';var _=require(_0x882c('0x0'));var util=require('util');var moment=require(_0x882c('0x1'));var BPromise=require('bluebird');var rs=require(_0x882c('0x2'));var fs=require('fs');var db=require(_0x882c('0x3'))['db'];var utils=require(_0x882c('0x4'));var logger=require(_0x882c('0x5'))(_0x882c('0x6'));var config=require(_0x882c('0x7'));var jayson=require(_0x882c('0x8'));var client=jayson[_0x882c('0x9')][_0x882c('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4f6687,_0xb0dc3c,_0x43f9c0){return new BPromise(function(_0x19e1bc,_0xd44a3a){return client['request'](_0x4f6687,_0x43f9c0)[_0x882c('0xb')](function(_0x502f9d){logger[_0x882c('0xc')](_0x882c('0xd'),_0xb0dc3c,_0x882c('0xe'));logger['debug']('AnalyticDefaultReport,\x20%s,\x20%s,\x20%s',_0xb0dc3c,_0x882c('0xe'),JSON[_0x882c('0xf')](_0x502f9d));if(_0x502f9d[_0x882c('0x10')]){if(_0x502f9d[_0x882c('0x10')][_0x882c('0x11')]===0x1f4){logger['error'](_0x882c('0xd'),_0xb0dc3c,_0x502f9d[_0x882c('0x10')][_0x882c('0x12')]);return _0xd44a3a(_0x502f9d[_0x882c('0x10')][_0x882c('0x12')]);}logger[_0x882c('0x10')](_0x882c('0xd'),_0xb0dc3c,_0x502f9d[_0x882c('0x10')]['message']);return _0x19e1bc(_0x502f9d['error']['message']);}else{logger[_0x882c('0xc')](_0x882c('0xd'),_0xb0dc3c,_0x882c('0xe'));_0x19e1bc(_0x502f9d[_0x882c('0x13')][_0x882c('0x12')]);}})[_0x882c('0x14')](function(_0x474977){logger[_0x882c('0x10')](_0x882c('0xd'),_0xb0dc3c,_0x474977);_0xd44a3a(_0x474977);});});}
\ No newline at end of file
index 376ded0..259c450 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6e37=['/:id/query','query','post','create','update','delete','destroy','exports','multer','util','path','Router','../../components/auth/service','../../config/environment','./analyticDefaultReport.controller','get','isAuthenticated','index','/:id','show','/:id/preview','/:id/run','run'];(function(_0x11ca17,_0x5174bc){var _0x407d1b=function(_0x10f108){while(--_0x10f108){_0x11ca17['push'](_0x11ca17['shift']());}};_0x407d1b(++_0x5174bc);}(_0x6e37,0xee));var _0x76e3=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x6e37[_0x321bb2];return _0x9c12ed;};'use strict';var multer=require(_0x76e3('0x0'));var util=require(_0x76e3('0x1'));var path=require(_0x76e3('0x2'));var express=require('express');var router=express[_0x76e3('0x3')]();var auth=require(_0x76e3('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x76e3('0x5'));var controller=require(_0x76e3('0x6'));router[_0x76e3('0x7')]('/',auth[_0x76e3('0x8')](),controller[_0x76e3('0x9')]);router[_0x76e3('0x7')](_0x76e3('0xa'),auth[_0x76e3('0x8')](),controller[_0x76e3('0xb')]);router[_0x76e3('0x7')](_0x76e3('0xc'),auth[_0x76e3('0x8')](),controller['preview']);router[_0x76e3('0x7')](_0x76e3('0xd'),auth[_0x76e3('0x8')](),controller[_0x76e3('0xe')]);router[_0x76e3('0x7')](_0x76e3('0xf'),auth[_0x76e3('0x8')](),controller[_0x76e3('0x10')]);router[_0x76e3('0x11')]('/',auth['isAuthenticated'](),controller[_0x76e3('0x12')]);router['put'](_0x76e3('0xa'),auth[_0x76e3('0x8')](),controller[_0x76e3('0x13')]);router[_0x76e3('0x14')]('/:id',auth[_0x76e3('0x8')](),controller[_0x76e3('0x15')]);module[_0x76e3('0x16')]=router;
\ No newline at end of file
+var _0x2622=['path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticDefaultReport.controller','isAuthenticated','index','get','/:id','preview','run','/:id/query','query','put','update','delete','destroy','exports','multer'];(function(_0x3609ca,_0x574a47){var _0x5354e1=function(_0x4d8b85){while(--_0x4d8b85){_0x3609ca['push'](_0x3609ca['shift']());}};_0x5354e1(++_0x574a47);}(_0x2622,0x179));var _0x2262=function(_0x35f0e9,_0x393330){_0x35f0e9=_0x35f0e9-0x0;var _0x1c09af=_0x2622[_0x35f0e9];return _0x1c09af;};'use strict';var multer=require(_0x2262('0x0'));var util=require('util');var path=require(_0x2262('0x1'));var express=require(_0x2262('0x2'));var router=express[_0x2262('0x3')]();var auth=require(_0x2262('0x4'));var interaction=require(_0x2262('0x5'));var config=require(_0x2262('0x6'));var controller=require(_0x2262('0x7'));router['get']('/',auth[_0x2262('0x8')](),controller[_0x2262('0x9')]);router[_0x2262('0xa')](_0x2262('0xb'),auth[_0x2262('0x8')](),controller['show']);router[_0x2262('0xa')]('/:id/preview',auth[_0x2262('0x8')](),controller[_0x2262('0xc')]);router[_0x2262('0xa')]('/:id/run',auth[_0x2262('0x8')](),controller[_0x2262('0xd')]);router['get'](_0x2262('0xe'),auth[_0x2262('0x8')](),controller[_0x2262('0xf')]);router['post']('/',auth[_0x2262('0x8')](),controller['create']);router[_0x2262('0x10')]('/:id',auth[_0x2262('0x8')](),controller[_0x2262('0x11')]);router[_0x2262('0x12')]('/:id',auth['isAuthenticated'](),controller[_0x2262('0x13')]);module[_0x2262('0x14')]=router;
\ No newline at end of file
index 080b7b0..f14defe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8f2d=['moment','exports','STRING','ENUM','csv','DATE','Loading','manual','sequelize'];(function(_0x50d7af,_0x32ce25){var _0x2ac07e=function(_0x9e2f19){while(--_0x9e2f19){_0x50d7af['push'](_0x50d7af['shift']());}};_0x2ac07e(++_0x32ce25);}(_0x8f2d,0xaa));var _0xd8f2=function(_0x57a6cf,_0x585bba){_0x57a6cf=_0x57a6cf-0x0;var _0x5f1be3=_0x8f2d[_0x57a6cf];return _0x5f1be3;};'use strict';var Sequelize=require(_0xd8f2('0x0'));var moment=require(_0xd8f2('0x1'));module[_0xd8f2('0x2')]={'name':{'type':Sequelize[_0xd8f2('0x3')],'allowNull':![]},'basename':{'type':Sequelize['STRING'],'allowNull':![]},'output':{'type':Sequelize[_0xd8f2('0x4')](_0xd8f2('0x5'),'pdf','xlsx'),'allowNull':![],'defaultValue':_0xd8f2('0x5')},'savename':{'type':Sequelize['STRING'],'allowNull':![]},'startDate':{'type':Sequelize[_0xd8f2('0x6')]},'endDate':{'type':Sequelize[_0xd8f2('0x6')]},'status':{'type':Sequelize[_0xd8f2('0x3')],'defaultValue':_0xd8f2('0x7')},'type':{'type':Sequelize[_0xd8f2('0x4')](_0xd8f2('0x8'),'scheduled'),'allowNull':![],'defaultValue':_0xd8f2('0x8')}};
\ No newline at end of file
+var _0x87b4=['STRING','ENUM','csv','pdf','DATE','manual','scheduled','sequelize','exports'];(function(_0x5beda8,_0x1e8554){var _0x2aa042=function(_0x510f45){while(--_0x510f45){_0x5beda8['push'](_0x5beda8['shift']());}};_0x2aa042(++_0x1e8554);}(_0x87b4,0x1ae));var _0x487b=function(_0x220fca,_0x5efcf8){_0x220fca=_0x220fca-0x0;var _0x237575=_0x87b4[_0x220fca];return _0x237575;};'use strict';var Sequelize=require(_0x487b('0x0'));var moment=require('moment');module[_0x487b('0x1')]={'name':{'type':Sequelize[_0x487b('0x2')],'allowNull':![]},'basename':{'type':Sequelize[_0x487b('0x2')],'allowNull':![]},'output':{'type':Sequelize[_0x487b('0x3')](_0x487b('0x4'),_0x487b('0x5'),'xlsx'),'allowNull':![],'defaultValue':_0x487b('0x4')},'savename':{'type':Sequelize[_0x487b('0x2')],'allowNull':![]},'startDate':{'type':Sequelize[_0x487b('0x6')]},'endDate':{'type':Sequelize[_0x487b('0x6')]},'status':{'type':Sequelize[_0x487b('0x2')],'defaultValue':'Loading'},'type':{'type':Sequelize[_0x487b('0x3')](_0x487b('0x7'),_0x487b('0x8')),'allowNull':![],'defaultValue':'manual'}};
\ No newline at end of file
index baa1163..0b03624 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb883=['keys','dateStart','dateEnd','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','pick','add','day','merge','filter','map','includeAll','include','findAll','rows','catch','params','options','create','update','find','body','basename','output','existsSync','join','root','Sequelize','Report\x20not\x20found\x20or\x20empty','exists','download','server/files/reports','savename','format','%s.%s','fast-json-patch','request-promise','moment','bluebird','util','path','to-csv','ejs','lodash','crypto','jsforce','querystring','../../components/parsers/qs','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','destroy','then','error','stack','name','AnalyticExtractedReport','rawAttributes','model'];(function(_0x1293fa,_0x446d6b){var _0x1dd054=function(_0x1b2d93){while(--_0x1b2d93){_0x1293fa['push'](_0x1293fa['shift']());}};_0x1dd054(++_0x446d6b);}(_0xb883,0xc8));var _0x3b88=function(_0x13e685,_0x57a3b6){_0x13e685=_0x13e685-0x0;var _0x1dffe5=_0xb883[_0x13e685];return _0x1dffe5;};'use strict';var jsonpatch=require(_0x3b88('0x0'));var rp=require(_0x3b88('0x1'));var moment=require(_0x3b88('0x2'));var BPromise=require(_0x3b88('0x3'));var Mustache=require('mustache');var util=require(_0x3b88('0x4'));var path=require(_0x3b88('0x5'));var sox=require('sox');var csv=require(_0x3b88('0x6'));var ejs=require(_0x3b88('0x7'));var fs=require('fs');var _=require(_0x3b88('0x8'));var squel=require('squel');var crypto=require(_0x3b88('0x9'));var jsforce=require(_0x3b88('0xa'));var deskjs=require('desk.js');var toCsv=require(_0x3b88('0x6'));var querystring=require(_0x3b88('0xb'));var Papa=require('papaparse');var qs=require(_0x3b88('0xc'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0x3b88('0xd'));var db=require(_0x3b88('0xe'))['db'];function respondWithStatusCode(_0x22338f,_0x4af8ae){_0x4af8ae=_0x4af8ae||0xcc;return function(_0xaefa6e){if(_0xaefa6e){return _0x22338f[_0x3b88('0xf')](_0x4af8ae);}return _0x22338f[_0x3b88('0x10')](_0x4af8ae)[_0x3b88('0x11')]();};}function respondWithResult(_0x38fac4,_0x4024a9){_0x4024a9=_0x4024a9||0xc8;return function(_0x3ee2a4){if(_0x3ee2a4){return _0x38fac4[_0x3b88('0x10')](_0x4024a9)[_0x3b88('0x12')](_0x3ee2a4);}};}function respondWithFilteredResult(_0x165f7a,_0x109f47){return function(_0x237ed0){if(_0x237ed0){var _0x1856f4=_0x237ed0[_0x3b88('0x13')],_0xf40c7e=_0x109f47['offset'],_0x3336af=_0x109f47[_0x3b88('0x14')]+_0x109f47['limit'],_0x1bb324;if(_0x3336af>=_0x1856f4){_0x3336af=_0x1856f4;_0x1bb324=0xc8;}else{_0x1bb324=0xce;}_0x165f7a['status'](_0x1bb324);return _0x165f7a[_0x3b88('0x15')](_0x3b88('0x16'),_0xf40c7e+'-'+_0x3336af+'/'+_0x1856f4)[_0x3b88('0x12')](_0x237ed0);}return null;};}function patchUpdates(_0x353b4d){return function(_0x2f5753){try{jsonpatch[_0x3b88('0x17')](_0x2f5753,_0x353b4d,!![]);}catch(_0x3d998b){return BPromise[_0x3b88('0x18')](_0x3d998b);}return _0x2f5753[_0x3b88('0x19')]();};}function saveUpdates(_0x12d351,_0x46146d){return function(_0x2fbbd7){if(_0x2fbbd7){return _0x2fbbd7['update'](_0x12d351)['then'](function(_0x2cedf8){return _0x2cedf8;});}return null;};}function removeEntity(_0x1827d9,_0x22d865){return function(_0x435b46){if(_0x435b46){return _0x435b46[_0x3b88('0x1a')]()[_0x3b88('0x1b')](function(){_0x1827d9['status'](0xcc)[_0x3b88('0x11')]();});}};}function handleEntityNotFound(_0x4fc699,_0x577637){return function(_0xc164c6){if(!_0xc164c6){_0x4fc699[_0x3b88('0xf')](0x194);}return _0xc164c6;};}function handleError(_0x3657e3,_0x40e8f3){_0x40e8f3=_0x40e8f3||0x1f4;return function(_0x3068dc){logger[_0x3b88('0x1c')](_0x3068dc[_0x3b88('0x1d')]);if(_0x3068dc[_0x3b88('0x1e')]){delete _0x3068dc[_0x3b88('0x1e')];}_0x3657e3[_0x3b88('0x10')](_0x40e8f3)['send'](_0x3068dc);};}exports['index']=function(_0x5647fc,_0x5a2471){var _0x2f6783={},_0x3803a1={},_0x1b296e={'count':0x0,'rows':[]};var _0x89cbb=db[_0x3b88('0x1f')][_0x3b88('0x20')];_0x3803a1[_0x3b88('0x21')]=_[_0x3b88('0x22')](_0x89cbb);var _0x5b96ee={'dateStart':_0x5647fc['query'][_0x3b88('0x23')],'dateEnd':_0x5647fc['query'][_0x3b88('0x24')]};delete _0x5647fc[_0x3b88('0x25')]['dateStart'];delete _0x5647fc[_0x3b88('0x25')]['dateEnd'];_0x3803a1[_0x3b88('0x25')]=_[_0x3b88('0x22')](_0x5647fc['query']);_0x3803a1[_0x3b88('0x26')]=_[_0x3b88('0x27')](_0x3803a1['model'],_0x3803a1[_0x3b88('0x25')]);_0x2f6783[_0x3b88('0x28')]=_[_0x3b88('0x27')](_0x3803a1[_0x3b88('0x21')],qs[_0x3b88('0x29')](_0x5647fc['query'][_0x3b88('0x29')]));_0x2f6783['attributes']=_0x2f6783[_0x3b88('0x28')][_0x3b88('0x2a')]?_0x2f6783[_0x3b88('0x28')]:_0x3803a1[_0x3b88('0x21')];if(!_0x5647fc[_0x3b88('0x25')][_0x3b88('0x2b')](_0x3b88('0x2c'))){_0x2f6783['limit']=qs[_0x3b88('0x2d')](_0x5647fc['query']['limit']);_0x2f6783[_0x3b88('0x14')]=qs['offset'](_0x5647fc[_0x3b88('0x25')][_0x3b88('0x14')]);}_0x2f6783['order']=qs[_0x3b88('0x2e')](_0x5647fc['query'][_0x3b88('0x2e')]);_0x2f6783[_0x3b88('0x2f')]=qs[_0x3b88('0x26')](_[_0x3b88('0x30')](_0x5647fc[_0x3b88('0x25')],_0x3803a1[_0x3b88('0x26')]));if(_0x5b96ee[_0x3b88('0x23')]){if(_0x5b96ee['dateEnd']){_0x5b96ee['dateEnd']=moment(_0x5b96ee[_0x3b88('0x24')])[_0x3b88('0x31')](0x1,_0x3b88('0x32'));}else{_0x5b96ee['dateEnd']=moment(_0x5b96ee['dateStart'])[_0x3b88('0x31')](0x1,'day');}_[_0x3b88('0x33')](_0x2f6783[_0x3b88('0x2f')],{'createdAt':{'$gte':_0x5b96ee[_0x3b88('0x23')],'$lte':_0x5b96ee[_0x3b88('0x24')]}});}if(_0x5647fc['query'][_0x3b88('0x34')]){_0x2f6783[_0x3b88('0x2f')]=_[_0x3b88('0x33')](_0x2f6783[_0x3b88('0x2f')],{'$or':_[_0x3b88('0x35')](_0x2f6783[_0x3b88('0x28')],function(_0x31ce70){var _0x4be08f={};_0x4be08f[_0x31ce70]={'$like':'%'+_0x5647fc[_0x3b88('0x25')][_0x3b88('0x34')]+'%'};return _0x4be08f;})});}_0x2f6783=_[_0x3b88('0x33')]({},_0x2f6783,_0x5647fc['options']);var _0x1d69a4={'where':_0x2f6783[_0x3b88('0x2f')]};return db[_0x3b88('0x1f')]['count'](_0x1d69a4)[_0x3b88('0x1b')](function(_0x125d1b){_0x1b296e[_0x3b88('0x13')]=_0x125d1b;if(_0x5647fc[_0x3b88('0x25')][_0x3b88('0x36')]){_0x2f6783[_0x3b88('0x37')]=[{'all':!![]}];}return db[_0x3b88('0x1f')][_0x3b88('0x38')](_0x2f6783);})[_0x3b88('0x1b')](function(_0x146b5c){_0x1b296e[_0x3b88('0x39')]=_0x146b5c;return _0x1b296e;})[_0x3b88('0x1b')](respondWithFilteredResult(_0x5a2471,_0x2f6783))[_0x3b88('0x3a')](handleError(_0x5a2471,null));};exports['show']=function(_0x543d63,_0x3fb46c){var _0x3aa412={'raw':!![],'where':{'id':_0x543d63[_0x3b88('0x3b')]['id']}},_0x5923e1={};_0x5923e1[_0x3b88('0x21')]=_['keys'](db[_0x3b88('0x1f')][_0x3b88('0x20')]);_0x5923e1[_0x3b88('0x25')]=_[_0x3b88('0x22')](_0x543d63[_0x3b88('0x25')]);_0x5923e1[_0x3b88('0x26')]=_['intersection'](_0x5923e1[_0x3b88('0x21')],_0x5923e1[_0x3b88('0x25')]);_0x3aa412[_0x3b88('0x28')]=_[_0x3b88('0x27')](_0x5923e1[_0x3b88('0x21')],qs[_0x3b88('0x29')](_0x543d63[_0x3b88('0x25')][_0x3b88('0x29')]));_0x3aa412['attributes']=_0x3aa412[_0x3b88('0x28')][_0x3b88('0x2a')]?_0x3aa412[_0x3b88('0x28')]:_0x5923e1[_0x3b88('0x21')];if(_0x543d63[_0x3b88('0x25')][_0x3b88('0x36')]){_0x3aa412[_0x3b88('0x37')]=[{'all':!![]}];}_0x3aa412=_[_0x3b88('0x33')]({},_0x3aa412,_0x543d63[_0x3b88('0x3c')]);return db[_0x3b88('0x1f')]['find'](_0x3aa412)['then'](handleEntityNotFound(_0x3fb46c,null))[_0x3b88('0x1b')](respondWithResult(_0x3fb46c,null))[_0x3b88('0x3a')](handleError(_0x3fb46c,null));};exports[_0x3b88('0x3d')]=function(_0x261403,_0x3b58ae){return db[_0x3b88('0x1f')]['create'](_0x261403['body'],{})[_0x3b88('0x1b')](respondWithResult(_0x3b58ae,0xc9))[_0x3b88('0x3a')](handleError(_0x3b58ae,null));};exports[_0x3b88('0x3e')]=function(_0x2bcbc6,_0x128bbd){if(_0x2bcbc6['body']['id']){delete _0x2bcbc6['body']['id'];}return db[_0x3b88('0x1f')][_0x3b88('0x3f')]({'where':{'id':_0x2bcbc6['params']['id']}})[_0x3b88('0x1b')](handleEntityNotFound(_0x128bbd,null))[_0x3b88('0x1b')](saveUpdates(_0x2bcbc6[_0x3b88('0x40')],null))[_0x3b88('0x1b')](respondWithResult(_0x128bbd,null))[_0x3b88('0x3a')](handleError(_0x128bbd,null));};exports['destroy']=function(_0x5309a1,_0xe989df){return db['AnalyticExtractedReport'][_0x3b88('0x3f')]({'where':{'id':_0x5309a1['params']['id']}})[_0x3b88('0x1b')](handleEntityNotFound(_0xe989df,null))[_0x3b88('0x1b')](removeEntity(_0xe989df,null))[_0x3b88('0x3a')](handleError(_0xe989df,null));};exports['download']=function(_0xb85250,_0xfda48e,_0x1ec4bd){return db[_0x3b88('0x1f')]['find']({'where':{'id':_0xb85250[_0x3b88('0x3b')]['id']},'attributes':[_0x3b88('0x1e'),_0x3b88('0x41'),'savename',_0x3b88('0x42')],'raw':!![]})[_0x3b88('0x1b')](handleEntityNotFound(_0xfda48e,null))[_0x3b88('0x1b')](function(_0x3522f9){if(_0x3522f9){if(!fs[_0x3b88('0x43')](path[_0x3b88('0x44')](config[_0x3b88('0x45')],'server/files/reports',_0x3522f9['savename']))){throw new db[(_0x3b88('0x46'))]['ValidationError'](_0x3b88('0x47'));}if(_0xb85250[_0x3b88('0x25')][_0x3b88('0x48')]){return _0xfda48e[_0x3b88('0xf')](0xc8);}return _0xfda48e[_0x3b88('0x49')](path[_0x3b88('0x44')](config[_0x3b88('0x45')],_0x3b88('0x4a'),_0x3522f9[_0x3b88('0x4b')]),util[_0x3b88('0x4c')](_0x3b88('0x4d'),_0x3522f9[_0x3b88('0x41')]||_0x3522f9[_0x3b88('0x1e')],_0x3522f9['output']['toLowerCase']()));}})[_0x3b88('0x3a')](handleError(_0xfda48e,null));};
\ No newline at end of file
+var _0xfd1c=['sort','where','add','day','merge','filter','options','count','findAll','rows','catch','show','params','includeAll','find','create','body','basename','output','existsSync','Sequelize','ValidationError','Report\x20not\x20found\x20or\x20empty','exists','download','server/files/reports','savename','format','%s.%s','toLowerCase','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','../../config/logger','api','../../config/utils','../../config/environment','end','status','json','offset','set','Content-Range','reject','update','then','destroy','sendStatus','error','stack','name','send','index','AnalyticExtractedReport','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','length','limit','order'];(function(_0x2c91e9,_0x2fb965){var _0x13f0ff=function(_0xb39edf){while(--_0xb39edf){_0x2c91e9['push'](_0x2c91e9['shift']());}};_0x13f0ff(++_0x2fb965);}(_0xfd1c,0x108));var _0xcfd1=function(_0x58ee19,_0xdf0765){_0x58ee19=_0x58ee19-0x0;var _0x49af25=_0xfd1c[_0x58ee19];return _0x49af25;};'use strict';var jsonpatch=require(_0xcfd1('0x0'));var rp=require(_0xcfd1('0x1'));var moment=require(_0xcfd1('0x2'));var BPromise=require('bluebird');var Mustache=require(_0xcfd1('0x3'));var util=require(_0xcfd1('0x4'));var path=require(_0xcfd1('0x5'));var sox=require(_0xcfd1('0x6'));var csv=require(_0xcfd1('0x7'));var ejs=require(_0xcfd1('0x8'));var fs=require('fs');var _=require(_0xcfd1('0x9'));var squel=require(_0xcfd1('0xa'));var crypto=require(_0xcfd1('0xb'));var jsforce=require(_0xcfd1('0xc'));var deskjs=require(_0xcfd1('0xd'));var toCsv=require(_0xcfd1('0x7'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0xcfd1('0xe'))(_0xcfd1('0xf'));var utils=require(_0xcfd1('0x10'));var config=require(_0xcfd1('0x11'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x33445a,_0x1fc732){_0x1fc732=_0x1fc732||0xcc;return function(_0x38eca4){if(_0x38eca4){return _0x33445a['sendStatus'](_0x1fc732);}return _0x33445a['status'](_0x1fc732)[_0xcfd1('0x12')]();};}function respondWithResult(_0x26b941,_0x1f7da5){_0x1f7da5=_0x1f7da5||0xc8;return function(_0x460a7b){if(_0x460a7b){return _0x26b941[_0xcfd1('0x13')](_0x1f7da5)[_0xcfd1('0x14')](_0x460a7b);}};}function respondWithFilteredResult(_0x1233d3,_0x4a4099){return function(_0x49a6b2){if(_0x49a6b2){var _0x2fb7cc=_0x49a6b2['count'],_0x44b88c=_0x4a4099[_0xcfd1('0x15')],_0x4593b9=_0x4a4099[_0xcfd1('0x15')]+_0x4a4099['limit'],_0x156ef1;if(_0x4593b9>=_0x2fb7cc){_0x4593b9=_0x2fb7cc;_0x156ef1=0xc8;}else{_0x156ef1=0xce;}_0x1233d3['status'](_0x156ef1);return _0x1233d3[_0xcfd1('0x16')](_0xcfd1('0x17'),_0x44b88c+'-'+_0x4593b9+'/'+_0x2fb7cc)[_0xcfd1('0x14')](_0x49a6b2);}return null;};}function patchUpdates(_0x5d610f){return function(_0x477907){try{jsonpatch['apply'](_0x477907,_0x5d610f,!![]);}catch(_0x48b632){return BPromise[_0xcfd1('0x18')](_0x48b632);}return _0x477907['save']();};}function saveUpdates(_0x38d16a,_0xd034b3){return function(_0x53584b){if(_0x53584b){return _0x53584b[_0xcfd1('0x19')](_0x38d16a)[_0xcfd1('0x1a')](function(_0x2dde40){return _0x2dde40;});}return null;};}function removeEntity(_0x2480a6,_0x4d420a){return function(_0x2124b8){if(_0x2124b8){return _0x2124b8[_0xcfd1('0x1b')]()['then'](function(){_0x2480a6[_0xcfd1('0x13')](0xcc)[_0xcfd1('0x12')]();});}};}function handleEntityNotFound(_0x253234,_0x84e953){return function(_0x317631){if(!_0x317631){_0x253234[_0xcfd1('0x1c')](0x194);}return _0x317631;};}function handleError(_0x1b64bc,_0x37a121){_0x37a121=_0x37a121||0x1f4;return function(_0x535772){logger[_0xcfd1('0x1d')](_0x535772[_0xcfd1('0x1e')]);if(_0x535772[_0xcfd1('0x1f')]){delete _0x535772[_0xcfd1('0x1f')];}_0x1b64bc[_0xcfd1('0x13')](_0x37a121)[_0xcfd1('0x20')](_0x535772);};}exports[_0xcfd1('0x21')]=function(_0x1a2e36,_0x516a6d){var _0x25a494={},_0x22c2e6={},_0x1bd3f3={'count':0x0,'rows':[]};var _0x2d88c6=db[_0xcfd1('0x22')][_0xcfd1('0x23')];_0x22c2e6['model']=_[_0xcfd1('0x24')](_0x2d88c6);var _0x4cd211={'dateStart':_0x1a2e36[_0xcfd1('0x25')][_0xcfd1('0x26')],'dateEnd':_0x1a2e36[_0xcfd1('0x25')][_0xcfd1('0x27')]};delete _0x1a2e36[_0xcfd1('0x25')]['dateStart'];delete _0x1a2e36[_0xcfd1('0x25')]['dateEnd'];_0x22c2e6[_0xcfd1('0x25')]=_[_0xcfd1('0x24')](_0x1a2e36['query']);_0x22c2e6[_0xcfd1('0x28')]=_[_0xcfd1('0x29')](_0x22c2e6[_0xcfd1('0x2a')],_0x22c2e6[_0xcfd1('0x25')]);_0x25a494[_0xcfd1('0x2b')]=_['intersection'](_0x22c2e6[_0xcfd1('0x2a')],qs[_0xcfd1('0x2c')](_0x1a2e36[_0xcfd1('0x25')][_0xcfd1('0x2c')]));_0x25a494[_0xcfd1('0x2b')]=_0x25a494['attributes'][_0xcfd1('0x2d')]?_0x25a494[_0xcfd1('0x2b')]:_0x22c2e6[_0xcfd1('0x2a')];if(!_0x1a2e36[_0xcfd1('0x25')]['hasOwnProperty']('nolimit')){_0x25a494[_0xcfd1('0x2e')]=qs[_0xcfd1('0x2e')](_0x1a2e36[_0xcfd1('0x25')][_0xcfd1('0x2e')]);_0x25a494[_0xcfd1('0x15')]=qs[_0xcfd1('0x15')](_0x1a2e36[_0xcfd1('0x25')][_0xcfd1('0x15')]);}_0x25a494[_0xcfd1('0x2f')]=qs['sort'](_0x1a2e36[_0xcfd1('0x25')][_0xcfd1('0x30')]);_0x25a494[_0xcfd1('0x31')]=qs[_0xcfd1('0x28')](_['pick'](_0x1a2e36[_0xcfd1('0x25')],_0x22c2e6['filters']));if(_0x4cd211['dateStart']){if(_0x4cd211['dateEnd']){_0x4cd211[_0xcfd1('0x27')]=moment(_0x4cd211[_0xcfd1('0x27')])[_0xcfd1('0x32')](0x1,'day');}else{_0x4cd211[_0xcfd1('0x27')]=moment(_0x4cd211[_0xcfd1('0x26')])[_0xcfd1('0x32')](0x1,_0xcfd1('0x33'));}_[_0xcfd1('0x34')](_0x25a494[_0xcfd1('0x31')],{'createdAt':{'$gte':_0x4cd211[_0xcfd1('0x26')],'$lte':_0x4cd211[_0xcfd1('0x27')]}});}if(_0x1a2e36[_0xcfd1('0x25')][_0xcfd1('0x35')]){_0x25a494[_0xcfd1('0x31')]=_[_0xcfd1('0x34')](_0x25a494[_0xcfd1('0x31')],{'$or':_['map'](_0x25a494[_0xcfd1('0x2b')],function(_0x492197){var _0x2a625e={};_0x2a625e[_0x492197]={'$like':'%'+_0x1a2e36[_0xcfd1('0x25')][_0xcfd1('0x35')]+'%'};return _0x2a625e;})});}_0x25a494=_['merge']({},_0x25a494,_0x1a2e36[_0xcfd1('0x36')]);var _0x4d3efa={'where':_0x25a494['where']};return db[_0xcfd1('0x22')][_0xcfd1('0x37')](_0x4d3efa)['then'](function(_0x1a8bd6){_0x1bd3f3[_0xcfd1('0x37')]=_0x1a8bd6;if(_0x1a2e36[_0xcfd1('0x25')]['includeAll']){_0x25a494['include']=[{'all':!![]}];}return db[_0xcfd1('0x22')][_0xcfd1('0x38')](_0x25a494);})[_0xcfd1('0x1a')](function(_0x2cea0f){_0x1bd3f3[_0xcfd1('0x39')]=_0x2cea0f;return _0x1bd3f3;})[_0xcfd1('0x1a')](respondWithFilteredResult(_0x516a6d,_0x25a494))[_0xcfd1('0x3a')](handleError(_0x516a6d,null));};exports[_0xcfd1('0x3b')]=function(_0x45fc9a,_0x1b270d){var _0x33ff66={'raw':!![],'where':{'id':_0x45fc9a[_0xcfd1('0x3c')]['id']}},_0x3eae34={};_0x3eae34[_0xcfd1('0x2a')]=_[_0xcfd1('0x24')](db[_0xcfd1('0x22')][_0xcfd1('0x23')]);_0x3eae34[_0xcfd1('0x25')]=_[_0xcfd1('0x24')](_0x45fc9a['query']);_0x3eae34[_0xcfd1('0x28')]=_['intersection'](_0x3eae34[_0xcfd1('0x2a')],_0x3eae34[_0xcfd1('0x25')]);_0x33ff66[_0xcfd1('0x2b')]=_['intersection'](_0x3eae34[_0xcfd1('0x2a')],qs['fields'](_0x45fc9a['query'][_0xcfd1('0x2c')]));_0x33ff66[_0xcfd1('0x2b')]=_0x33ff66[_0xcfd1('0x2b')][_0xcfd1('0x2d')]?_0x33ff66[_0xcfd1('0x2b')]:_0x3eae34[_0xcfd1('0x2a')];if(_0x45fc9a[_0xcfd1('0x25')][_0xcfd1('0x3d')]){_0x33ff66['include']=[{'all':!![]}];}_0x33ff66=_['merge']({},_0x33ff66,_0x45fc9a[_0xcfd1('0x36')]);return db[_0xcfd1('0x22')][_0xcfd1('0x3e')](_0x33ff66)[_0xcfd1('0x1a')](handleEntityNotFound(_0x1b270d,null))[_0xcfd1('0x1a')](respondWithResult(_0x1b270d,null))['catch'](handleError(_0x1b270d,null));};exports['create']=function(_0x517707,_0x2a1428){return db['AnalyticExtractedReport'][_0xcfd1('0x3f')](_0x517707[_0xcfd1('0x40')],{})[_0xcfd1('0x1a')](respondWithResult(_0x2a1428,0xc9))[_0xcfd1('0x3a')](handleError(_0x2a1428,null));};exports[_0xcfd1('0x19')]=function(_0x6b86ef,_0x4c474d){if(_0x6b86ef[_0xcfd1('0x40')]['id']){delete _0x6b86ef[_0xcfd1('0x40')]['id'];}return db[_0xcfd1('0x22')]['find']({'where':{'id':_0x6b86ef[_0xcfd1('0x3c')]['id']}})['then'](handleEntityNotFound(_0x4c474d,null))[_0xcfd1('0x1a')](saveUpdates(_0x6b86ef['body'],null))[_0xcfd1('0x1a')](respondWithResult(_0x4c474d,null))[_0xcfd1('0x3a')](handleError(_0x4c474d,null));};exports[_0xcfd1('0x1b')]=function(_0x1359dd,_0x3e8c5c){return db[_0xcfd1('0x22')]['find']({'where':{'id':_0x1359dd['params']['id']}})[_0xcfd1('0x1a')](handleEntityNotFound(_0x3e8c5c,null))[_0xcfd1('0x1a')](removeEntity(_0x3e8c5c,null))[_0xcfd1('0x3a')](handleError(_0x3e8c5c,null));};exports['download']=function(_0x28a21e,_0x2ea3e7,_0x56532a){return db[_0xcfd1('0x22')][_0xcfd1('0x3e')]({'where':{'id':_0x28a21e[_0xcfd1('0x3c')]['id']},'attributes':[_0xcfd1('0x1f'),_0xcfd1('0x41'),'savename',_0xcfd1('0x42')],'raw':!![]})['then'](handleEntityNotFound(_0x2ea3e7,null))[_0xcfd1('0x1a')](function(_0x4c2cf1){if(_0x4c2cf1){if(!fs[_0xcfd1('0x43')](path['join'](config['root'],'server/files/reports',_0x4c2cf1['savename']))){throw new db[(_0xcfd1('0x44'))][(_0xcfd1('0x45'))](_0xcfd1('0x46'));}if(_0x28a21e[_0xcfd1('0x25')][_0xcfd1('0x47')]){return _0x2ea3e7['sendStatus'](0xc8);}return _0x2ea3e7[_0xcfd1('0x48')](path['join'](config['root'],_0xcfd1('0x49'),_0x4c2cf1[_0xcfd1('0x4a')]),util[_0xcfd1('0x4b')](_0xcfd1('0x4c'),_0x4c2cf1['basename']||_0x4c2cf1['name'],_0x4c2cf1[_0xcfd1('0x42')][_0xcfd1('0x4d')]()));}})[_0xcfd1('0x3a')](handleError(_0x2ea3e7,null));};
\ No newline at end of file
index 84d3c4f..c58d206 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9a1b=['analytics_extracted_reports','lodash','moment','bluebird','request-promise','./analyticExtractedReport.attributes','AnalyticExtractedReport'];(function(_0x3eff21,_0x5bf36c){var _0x1945bb=function(_0x319a9e){while(--_0x319a9e){_0x3eff21['push'](_0x3eff21['shift']());}};_0x1945bb(++_0x5bf36c);}(_0x9a1b,0x1ba));var _0xb9a1=function(_0x311f8e,_0x7daa49){_0x311f8e=_0x311f8e-0x0;var _0x29b60d=_0x9a1b[_0x311f8e];return _0x29b60d;};'use strict';var _=require(_0xb9a1('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0xb9a1('0x1'));var BPromise=require(_0xb9a1('0x2'));var rp=require(_0xb9a1('0x3'));var attributes=require(_0xb9a1('0x4'));module['exports']=function(_0x20ac68,_0xc70825){return _0x20ac68['define'](_0xb9a1('0x5'),attributes,{'tableName':_0xb9a1('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd3d3=['define','analytics_extracted_reports','../../config/logger','api','./analyticExtractedReport.attributes','exports'];(function(_0x7499e1,_0x55fc11){var _0x5b9253=function(_0x2f8a6e){while(--_0x2f8a6e){_0x7499e1['push'](_0x7499e1['shift']());}};_0x5b9253(++_0x55fc11);}(_0xd3d3,0x19a));var _0x3d3d=function(_0x4a747d,_0x3b747f){_0x4a747d=_0x4a747d-0x0;var _0x3a5b5c=_0xd3d3[_0x4a747d];return _0x3a5b5c;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x3d3d('0x0'))(_0x3d3d('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x3d3d('0x2'));module[_0x3d3d('0x3')]=function(_0x2fceb1,_0x4f0996){return _0x2fceb1[_0x3d3d('0x4')]('AnalyticExtractedReport',attributes,{'tableName':_0x3d3d('0x5'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 93cc236..53b9efc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa8e9=['request','then','info','AnalyticExtractedReport,\x20%s,\x20%s','request\x20sent','AnalyticExtractedReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','util','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http'];(function(_0x4b2a40,_0x5191ca){var _0x241a92=function(_0x559874){while(--_0x559874){_0x4b2a40['push'](_0x4b2a40['shift']());}};_0x241a92(++_0x5191ca);}(_0xa8e9,0x173));var _0x9a8e=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xa8e9[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x9a8e('0x0'));var util=require(_0x9a8e('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0x9a8e('0x2'))['db'];var utils=require(_0x9a8e('0x3'));var logger=require(_0x9a8e('0x4'))(_0x9a8e('0x5'));var config=require(_0x9a8e('0x6'));var jayson=require(_0x9a8e('0x7'));var client=jayson['client'][_0x9a8e('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x29786c,_0x864c61,_0x3ce819){return new BPromise(function(_0x3cc9a5,_0x261ae0){return client[_0x9a8e('0x9')](_0x29786c,_0x3ce819)[_0x9a8e('0xa')](function(_0x102c3b){logger[_0x9a8e('0xb')](_0x9a8e('0xc'),_0x864c61,_0x9a8e('0xd'));logger['debug'](_0x9a8e('0xe'),_0x864c61,_0x9a8e('0xd'),JSON[_0x9a8e('0xf')](_0x102c3b));if(_0x102c3b['error']){if(_0x102c3b[_0x9a8e('0x10')][_0x9a8e('0x11')]===0x1f4){logger[_0x9a8e('0x10')](_0x9a8e('0xc'),_0x864c61,_0x102c3b[_0x9a8e('0x10')][_0x9a8e('0x12')]);return _0x261ae0(_0x102c3b[_0x9a8e('0x10')][_0x9a8e('0x12')]);}logger[_0x9a8e('0x10')](_0x9a8e('0xc'),_0x864c61,_0x102c3b[_0x9a8e('0x10')]['message']);return _0x3cc9a5(_0x102c3b[_0x9a8e('0x10')][_0x9a8e('0x12')]);}else{logger['info'](_0x9a8e('0xc'),_0x864c61,_0x9a8e('0xd'));_0x3cc9a5(_0x102c3b[_0x9a8e('0x13')][_0x9a8e('0x12')]);}})['catch'](function(_0xb0c904){logger['error']('AnalyticExtractedReport,\x20%s,\x20%s',_0x864c61,_0xb0c904);_0x261ae0(_0xb0c904);});});}
\ No newline at end of file
+var _0xc380=['lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','AnalyticExtractedReport,\x20%s,\x20%s','debug','AnalyticExtractedReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch'];(function(_0x1cfa0d,_0x4391f2){var _0xe33279=function(_0x3ce7c1){while(--_0x3ce7c1){_0x1cfa0d['push'](_0x1cfa0d['shift']());}};_0xe33279(++_0x4391f2);}(_0xc380,0x90));var _0x0c38=function(_0x2c4c0c,_0x29e0ea){_0x2c4c0c=_0x2c4c0c-0x0;var _0x3542cb=_0xc380[_0x2c4c0c];return _0x3542cb;};'use strict';var _=require(_0x0c38('0x0'));var util=require(_0x0c38('0x1'));var moment=require(_0x0c38('0x2'));var BPromise=require(_0x0c38('0x3'));var rs=require(_0x0c38('0x4'));var fs=require('fs');var db=require(_0x0c38('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x0c38('0x6'))(_0x0c38('0x7'));var config=require(_0x0c38('0x8'));var jayson=require(_0x0c38('0x9'));var client=jayson[_0x0c38('0xa')][_0x0c38('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x40d286,_0xe94dd7,_0x16588c){return new BPromise(function(_0x38d46e,_0x2bffe9){return client['request'](_0x40d286,_0x16588c)[_0x0c38('0xc')](function(_0x4570ed){logger[_0x0c38('0xd')](_0x0c38('0xe'),_0xe94dd7,'request\x20sent');logger[_0x0c38('0xf')](_0x0c38('0x10'),_0xe94dd7,'request\x20sent',JSON[_0x0c38('0x11')](_0x4570ed));if(_0x4570ed[_0x0c38('0x12')]){if(_0x4570ed[_0x0c38('0x12')][_0x0c38('0x13')]===0x1f4){logger['error'](_0x0c38('0xe'),_0xe94dd7,_0x4570ed[_0x0c38('0x12')][_0x0c38('0x14')]);return _0x2bffe9(_0x4570ed['error'][_0x0c38('0x14')]);}logger['error'](_0x0c38('0xe'),_0xe94dd7,_0x4570ed[_0x0c38('0x12')][_0x0c38('0x14')]);return _0x38d46e(_0x4570ed[_0x0c38('0x12')]['message']);}else{logger[_0x0c38('0xd')]('AnalyticExtractedReport,\x20%s,\x20%s',_0xe94dd7,_0x0c38('0x15'));_0x38d46e(_0x4570ed[_0x0c38('0x16')][_0x0c38('0x14')]);}})[_0x0c38('0x17')](function(_0x57f5a4){logger[_0x0c38('0x12')](_0x0c38('0xe'),_0xe94dd7,_0x57f5a4);_0x2bffe9(_0x57f5a4);});});}
\ No newline at end of file
index 7e5ad71..9b32e18 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8ca=['put','delete','destroy','multer','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticExtractedReport.controller','get','isAuthenticated','index','/:id','show','download','post','create'];(function(_0x29e3ec,_0x138a18){var _0x25727e=function(_0x2bea0d){while(--_0x2bea0d){_0x29e3ec['push'](_0x29e3ec['shift']());}};_0x25727e(++_0x138a18);}(_0xd8ca,0x18a));var _0xad8c=function(_0x173060,_0xf5ad1){_0x173060=_0x173060-0x0;var _0x122cad=_0xd8ca[_0x173060];return _0x122cad;};'use strict';var multer=require(_0xad8c('0x0'));var util=require('util');var path=require('path');var express=require('express');var router=express[_0xad8c('0x1')]();var auth=require(_0xad8c('0x2'));var interaction=require(_0xad8c('0x3'));var config=require(_0xad8c('0x4'));var controller=require(_0xad8c('0x5'));router[_0xad8c('0x6')]('/',auth[_0xad8c('0x7')](),controller[_0xad8c('0x8')]);router['get'](_0xad8c('0x9'),auth[_0xad8c('0x7')](),controller[_0xad8c('0xa')]);router[_0xad8c('0x6')]('/:id/download',auth[_0xad8c('0x7')](),controller[_0xad8c('0xb')]);router[_0xad8c('0xc')]('/',auth[_0xad8c('0x7')](),controller[_0xad8c('0xd')]);router[_0xad8c('0xe')](_0xad8c('0x9'),auth[_0xad8c('0x7')](),controller['update']);router[_0xad8c('0xf')](_0xad8c('0x9'),auth[_0xad8c('0x7')](),controller[_0xad8c('0x10')]);module['exports']=router;
\ No newline at end of file
+var _0xff37=['multer','util','path','Router','../../components/interaction/service','../../config/environment','./analyticExtractedReport.controller','get','index','/:id','isAuthenticated','show','/:id/download','create','update','delete','destroy','exports'];(function(_0x199941,_0x9dd3de){var _0x3a6987=function(_0x498294){while(--_0x498294){_0x199941['push'](_0x199941['shift']());}};_0x3a6987(++_0x9dd3de);}(_0xff37,0x19e));var _0x7ff3=function(_0x36cc32,_0x2232e4){_0x36cc32=_0x36cc32-0x0;var _0x156a81=_0xff37[_0x36cc32];return _0x156a81;};'use strict';var multer=require(_0x7ff3('0x0'));var util=require(_0x7ff3('0x1'));var path=require(_0x7ff3('0x2'));var express=require('express');var router=express[_0x7ff3('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x7ff3('0x4'));var config=require(_0x7ff3('0x5'));var controller=require(_0x7ff3('0x6'));router[_0x7ff3('0x7')]('/',auth['isAuthenticated'](),controller[_0x7ff3('0x8')]);router['get'](_0x7ff3('0x9'),auth[_0x7ff3('0xa')](),controller[_0x7ff3('0xb')]);router[_0x7ff3('0x7')](_0x7ff3('0xc'),auth[_0x7ff3('0xa')](),controller['download']);router['post']('/',auth[_0x7ff3('0xa')](),controller[_0x7ff3('0xd')]);router['put'](_0x7ff3('0x9'),auth[_0x7ff3('0xa')](),controller[_0x7ff3('0xe')]);router[_0x7ff3('0xf')](_0x7ff3('0x9'),auth[_0x7ff3('0xa')](),controller[_0x7ff3('0x10')]);module[_0x7ff3('0x11')]=router;
\ No newline at end of file
index f2e96ac..4123903 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc03e=['exports','STRING','BOOLEAN','sequelize'];(function(_0x24ff87,_0x5c59a1){var _0x8677bb=function(_0x37bfcd){while(--_0x37bfcd){_0x24ff87['push'](_0x24ff87['shift']());}};_0x8677bb(++_0x5c59a1);}(_0xc03e,0x11b));var _0xec03=function(_0x5e238b,_0x17ae49){_0x5e238b=_0x5e238b-0x0;var _0x389bea=_0xc03e[_0x5e238b];return _0x389bea;};'use strict';var Sequelize=require(_0xec03('0x0'));module[_0xec03('0x1')]={'field':{'type':Sequelize['TEXT']},'alias':{'type':Sequelize[_0xec03('0x2')]},'function':{'type':Sequelize[_0xec03('0x2')]},'format':{'type':Sequelize[_0xec03('0x2')]},'groupBy':{'type':Sequelize[_0xec03('0x3')],'defaultValue':![]},'orderBy':{'type':Sequelize[_0xec03('0x2')]},'custom':{'type':Sequelize[_0xec03('0x3')],'defaultValue':![]}};
\ No newline at end of file
+var _0x3a82=['exports','TEXT','STRING','BOOLEAN','sequelize'];(function(_0x3ec75d,_0x35c795){var _0x44bc58=function(_0x4bad3f){while(--_0x4bad3f){_0x3ec75d['push'](_0x3ec75d['shift']());}};_0x44bc58(++_0x35c795);}(_0x3a82,0xae));var _0x23a8=function(_0xa6adac,_0x45bbdf){_0xa6adac=_0xa6adac-0x0;var _0x161830=_0x3a82[_0xa6adac];return _0x161830;};'use strict';var Sequelize=require(_0x23a8('0x0'));module[_0x23a8('0x1')]={'field':{'type':Sequelize[_0x23a8('0x2')]},'alias':{'type':Sequelize[_0x23a8('0x3')]},'function':{'type':Sequelize[_0x23a8('0x3')]},'format':{'type':Sequelize['STRING']},'groupBy':{'type':Sequelize[_0x23a8('0x4')],'defaultValue':![]},'orderBy':{'type':Sequelize[_0x23a8('0x3')]},'custom':{'type':Sequelize[_0x23a8('0x4')],'defaultValue':![]}};
\ No newline at end of file
index d71ce6d..ed95e6b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x77d4=['Content-Range','json','save','update','then','destroy','sendStatus','error','stack','name','send','index','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','nolimit','order','sort','where','pick','add','day','merge','filter','options','AnalyticFieldReport','includeAll','findAll','rows','catch','show','params','rawAttributes','include','find','create','body','bulkCreate','bulkDestroy','ids','AnalyticCustomReport','findOne','sequelize','transaction','request-promise','bluebird','util','path','ejs','lodash','squel','crypto','jsforce','desk.js','papaparse','api','../../config/utils','../../config/environment','../../mysqldb','status','end','count','offset','limit'];(function(_0x3d7517,_0x28482e){var _0x137f67=function(_0x33d7c5){while(--_0x33d7c5){_0x3d7517['push'](_0x3d7517['shift']());}};_0x137f67(++_0x28482e);}(_0x77d4,0x108));var _0x477d=function(_0x5e9f06,_0x3dd75c){_0x5e9f06=_0x5e9f06-0x0;var _0x4c9dd5=_0x77d4[_0x5e9f06];return _0x4c9dd5;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x477d('0x0'));var moment=require('moment');var BPromise=require(_0x477d('0x1'));var Mustache=require('mustache');var util=require(_0x477d('0x2'));var path=require(_0x477d('0x3'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x477d('0x4'));var fs=require('fs');var _=require(_0x477d('0x5'));var squel=require(_0x477d('0x6'));var crypto=require(_0x477d('0x7'));var jsforce=require(_0x477d('0x8'));var deskjs=require(_0x477d('0x9'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x477d('0xa'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x477d('0xb'));var utils=require(_0x477d('0xc'));var config=require(_0x477d('0xd'));var db=require(_0x477d('0xe'))['db'];function respondWithStatusCode(_0x1cef1c,_0x58ff29){_0x58ff29=_0x58ff29||0xcc;return function(_0x932cc9){if(_0x932cc9){return _0x1cef1c['sendStatus'](_0x58ff29);}return _0x1cef1c[_0x477d('0xf')](_0x58ff29)[_0x477d('0x10')]();};}function respondWithResult(_0x55ace3,_0x472012){_0x472012=_0x472012||0xc8;return function(_0x3d362a){if(_0x3d362a){return _0x55ace3['status'](_0x472012)['json'](_0x3d362a);}};}function respondWithFilteredResult(_0x6ff724,_0x420779){return function(_0x55bdfd){if(_0x55bdfd){var _0x290d46=_0x55bdfd[_0x477d('0x11')],_0x1d5699=_0x420779['offset'],_0x48c73a=_0x420779[_0x477d('0x12')]+_0x420779[_0x477d('0x13')],_0x4b2021;if(_0x48c73a>=_0x290d46){_0x48c73a=_0x290d46;_0x4b2021=0xc8;}else{_0x4b2021=0xce;}_0x6ff724[_0x477d('0xf')](_0x4b2021);return _0x6ff724['set'](_0x477d('0x14'),_0x1d5699+'-'+_0x48c73a+'/'+_0x290d46)[_0x477d('0x15')](_0x55bdfd);}return null;};}function patchUpdates(_0x29c6f8){return function(_0x19c5a7){try{jsonpatch['apply'](_0x19c5a7,_0x29c6f8,!![]);}catch(_0x28f17a){return BPromise['reject'](_0x28f17a);}return _0x19c5a7[_0x477d('0x16')]();};}function saveUpdates(_0x1399d7,_0x159beb){return function(_0x458489){if(_0x458489){return _0x458489[_0x477d('0x17')](_0x1399d7)[_0x477d('0x18')](function(_0x5bea7e){return _0x5bea7e;});}return null;};}function removeEntity(_0x33db7a,_0x49c442){return function(_0xe934a7){if(_0xe934a7){return _0xe934a7[_0x477d('0x19')]()[_0x477d('0x18')](function(){_0x33db7a[_0x477d('0xf')](0xcc)[_0x477d('0x10')]();});}};}function handleEntityNotFound(_0x3b3cda,_0x435a3b){return function(_0x17154d){if(!_0x17154d){_0x3b3cda[_0x477d('0x1a')](0x194);}return _0x17154d;};}function handleError(_0x5981a,_0x3d2943){_0x3d2943=_0x3d2943||0x1f4;return function(_0x3525e8){logger[_0x477d('0x1b')](_0x3525e8[_0x477d('0x1c')]);if(_0x3525e8['name']){delete _0x3525e8[_0x477d('0x1d')];}_0x5981a['status'](_0x3d2943)[_0x477d('0x1e')](_0x3525e8);};}exports[_0x477d('0x1f')]=function(_0x26a4b2,_0x2287b4){var _0x4bb50e={},_0xd6dca5={},_0x2dfa90={'count':0x0,'rows':[]};var _0x1ca4fe=db['AnalyticFieldReport']['rawAttributes'];_0xd6dca5[_0x477d('0x20')]=_[_0x477d('0x21')](_0x1ca4fe);var _0x386df5={'dateStart':_0x26a4b2['query'][_0x477d('0x22')],'dateEnd':_0x26a4b2[_0x477d('0x23')][_0x477d('0x24')]};delete _0x26a4b2[_0x477d('0x23')][_0x477d('0x22')];delete _0x26a4b2['query'][_0x477d('0x24')];_0xd6dca5[_0x477d('0x23')]=_[_0x477d('0x21')](_0x26a4b2[_0x477d('0x23')]);_0xd6dca5[_0x477d('0x25')]=_[_0x477d('0x26')](_0xd6dca5[_0x477d('0x20')],_0xd6dca5[_0x477d('0x23')]);_0x4bb50e[_0x477d('0x27')]=_[_0x477d('0x26')](_0xd6dca5[_0x477d('0x20')],qs[_0x477d('0x28')](_0x26a4b2[_0x477d('0x23')][_0x477d('0x28')]));_0x4bb50e[_0x477d('0x27')]=_0x4bb50e[_0x477d('0x27')][_0x477d('0x29')]?_0x4bb50e[_0x477d('0x27')]:_0xd6dca5[_0x477d('0x20')];if(!_0x26a4b2[_0x477d('0x23')]['hasOwnProperty'](_0x477d('0x2a'))){_0x4bb50e['limit']=qs[_0x477d('0x13')](_0x26a4b2[_0x477d('0x23')][_0x477d('0x13')]);_0x4bb50e['offset']=qs[_0x477d('0x12')](_0x26a4b2[_0x477d('0x23')][_0x477d('0x12')]);}_0x4bb50e[_0x477d('0x2b')]=qs[_0x477d('0x2c')](_0x26a4b2[_0x477d('0x23')][_0x477d('0x2c')]);_0x4bb50e[_0x477d('0x2d')]=qs[_0x477d('0x25')](_[_0x477d('0x2e')](_0x26a4b2['query'],_0xd6dca5[_0x477d('0x25')]));if(_0x386df5[_0x477d('0x22')]){if(_0x386df5[_0x477d('0x24')]){_0x386df5['dateEnd']=moment(_0x386df5[_0x477d('0x24')])[_0x477d('0x2f')](0x1,_0x477d('0x30'));}else{_0x386df5['dateEnd']=moment(_0x386df5['dateStart'])[_0x477d('0x2f')](0x1,_0x477d('0x30'));}_[_0x477d('0x31')](_0x4bb50e[_0x477d('0x2d')],{'createdAt':{'$gte':_0x386df5[_0x477d('0x22')],'$lte':_0x386df5['dateEnd']}});}if(_0x26a4b2[_0x477d('0x23')]['filter']){_0x4bb50e[_0x477d('0x2d')]=_[_0x477d('0x31')](_0x4bb50e[_0x477d('0x2d')],{'$or':_['map'](_0x4bb50e['attributes'],function(_0x184d50){var _0x2c7089={};_0x2c7089[_0x184d50]={'$like':'%'+_0x26a4b2[_0x477d('0x23')][_0x477d('0x32')]+'%'};return _0x2c7089;})});}_0x4bb50e=_['merge']({},_0x4bb50e,_0x26a4b2[_0x477d('0x33')]);var _0xc091e={'where':_0x4bb50e[_0x477d('0x2d')]};return db[_0x477d('0x34')][_0x477d('0x11')](_0xc091e)['then'](function(_0x472149){_0x2dfa90[_0x477d('0x11')]=_0x472149;if(_0x26a4b2['query'][_0x477d('0x35')]){_0x4bb50e['include']=[{'all':!![]}];}return db[_0x477d('0x34')][_0x477d('0x36')](_0x4bb50e);})[_0x477d('0x18')](function(_0x335b2a){_0x2dfa90[_0x477d('0x37')]=_0x335b2a;return _0x2dfa90;})[_0x477d('0x18')](respondWithFilteredResult(_0x2287b4,_0x4bb50e))[_0x477d('0x38')](handleError(_0x2287b4,null));};exports[_0x477d('0x39')]=function(_0x43ffd1,_0x4c22f5){var _0x5759f={'raw':![],'where':{'id':_0x43ffd1[_0x477d('0x3a')]['id']}},_0x31c9a1={};_0x31c9a1[_0x477d('0x20')]=_['keys'](db['AnalyticFieldReport'][_0x477d('0x3b')]);_0x31c9a1[_0x477d('0x23')]=_['keys'](_0x43ffd1[_0x477d('0x23')]);_0x31c9a1['filters']=_['intersection'](_0x31c9a1[_0x477d('0x20')],_0x31c9a1[_0x477d('0x23')]);_0x5759f[_0x477d('0x27')]=_[_0x477d('0x26')](_0x31c9a1[_0x477d('0x20')],qs[_0x477d('0x28')](_0x43ffd1['query'][_0x477d('0x28')]));_0x5759f[_0x477d('0x27')]=_0x5759f[_0x477d('0x27')][_0x477d('0x29')]?_0x5759f[_0x477d('0x27')]:_0x31c9a1['model'];if(_0x43ffd1['query'][_0x477d('0x35')]){_0x5759f[_0x477d('0x3c')]=[{'all':!![]}];}_0x5759f=_[_0x477d('0x31')]({},_0x5759f,_0x43ffd1['options']);return db[_0x477d('0x34')][_0x477d('0x3d')](_0x5759f)[_0x477d('0x18')](handleEntityNotFound(_0x4c22f5,null))[_0x477d('0x18')](respondWithResult(_0x4c22f5,null))[_0x477d('0x38')](handleError(_0x4c22f5,null));};exports[_0x477d('0x3e')]=function(_0x13f606,_0x4d4e19){return db[_0x477d('0x34')][_0x477d('0x3e')](_0x13f606[_0x477d('0x3f')],{})[_0x477d('0x18')](respondWithResult(_0x4d4e19,0xc9))[_0x477d('0x38')](handleError(_0x4d4e19,null));};exports[_0x477d('0x40')]=function(_0x2aad84,_0x30e474){return db[_0x477d('0x34')][_0x477d('0x40')](_0x2aad84[_0x477d('0x3f')],{'raw':![],'individualHooks':!![]})[_0x477d('0x18')](respondWithResult(_0x30e474,0xc9))[_0x477d('0x38')](handleError(_0x30e474,null));};exports[_0x477d('0x17')]=function(_0x38a9b1,_0x5074cd){if(_0x38a9b1[_0x477d('0x3f')]['id']){delete _0x38a9b1[_0x477d('0x3f')]['id'];}return db['AnalyticFieldReport']['find']({'where':{'id':_0x38a9b1['params']['id']}})[_0x477d('0x18')](handleEntityNotFound(_0x5074cd,null))[_0x477d('0x18')](saveUpdates(_0x38a9b1[_0x477d('0x3f')],null))[_0x477d('0x18')](respondWithResult(_0x5074cd,null))[_0x477d('0x38')](handleError(_0x5074cd,null));};exports[_0x477d('0x19')]=function(_0x4257ab,_0x342f18){return db['AnalyticFieldReport'][_0x477d('0x3d')]({'where':{'id':_0x4257ab[_0x477d('0x3a')]['id']}})[_0x477d('0x18')](handleEntityNotFound(_0x342f18,null))[_0x477d('0x18')](removeEntity(_0x342f18,null))[_0x477d('0x38')](handleError(_0x342f18,null));};exports[_0x477d('0x41')]=function(_0x22fc49,_0x20e6b1){return db['AnalyticFieldReport'][_0x477d('0x19')]({'where':{'id':_0x22fc49[_0x477d('0x23')][_0x477d('0x42')]||[]},'raw':![],'individualHooks':!![]})[_0x477d('0x18')](respondWithResult(_0x20e6b1,0xcc))[_0x477d('0x38')](handleError(_0x20e6b1,null));};exports['addFields']=function(_0x1c496a,_0x215f73,_0x3ce50f){return db[_0x477d('0x43')][_0x477d('0x44')]({'where':{'id':_0x1c496a['params']['id']}})['then'](handleEntityNotFound(_0x215f73,null))[_0x477d('0x18')](function(_0xb175d1){if(_0xb175d1){return db[_0x477d('0x45')][_0x477d('0x46')](function(_0x2a19c1){return db[_0x477d('0x34')][_0x477d('0x19')]({'where':{'CustomReportId':_0x1c496a[_0x477d('0x3a')]['id']},'transaction':_0x2a19c1})['then'](function(_0x53aa58){var _0x54a32f=_['map'](_0x1c496a['body'],function(_0x1e238f){delete _0x1e238f['id'];_0x1e238f['CustomReportId']=_0x1c496a[_0x477d('0x3a')]['id'];return _0x1e238f;});return db['AnalyticFieldReport'][_0x477d('0x40')](_0x54a32f,{'transaction':_0x2a19c1});});})[_0x477d('0x18')](function(){return db['AnalyticFieldReport'][_0x477d('0x36')]({'where':{'CustomReportId':_0x1c496a[_0x477d('0x3a')]['id']}});});}})[_0x477d('0x18')](respondWithResult(_0x215f73,null))[_0x477d('0x38')](handleError(_0x215f73,null));};
\ No newline at end of file
+var _0xba34=['json','apply','reject','save','update','then','destroy','sendStatus','stack','name','send','index','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','order','sort','where','pick','add','day','merge','filter','options','AnalyticFieldReport','includeAll','include','findAll','rows','catch','show','find','body','bulkCreate','params','bulkDestroy','ids','AnalyticCustomReport','findOne','sequelize','transaction','map','fast-json-patch','request-promise','moment','bluebird','mustache','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','count','offset','limit','set','Content-Range'];(function(_0xd8323,_0x28a00e){var _0x583d69=function(_0x286db9){while(--_0x286db9){_0xd8323['push'](_0xd8323['shift']());}};_0x583d69(++_0x28a00e);}(_0xba34,0x119));var _0x4ba3=function(_0x1e7ba2,_0xc61d5){_0x1e7ba2=_0x1e7ba2-0x0;var _0x47fe88=_0xba34[_0x1e7ba2];return _0x47fe88;};'use strict';var jsonpatch=require(_0x4ba3('0x0'));var rp=require(_0x4ba3('0x1'));var moment=require(_0x4ba3('0x2'));var BPromise=require(_0x4ba3('0x3'));var Mustache=require(_0x4ba3('0x4'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x4ba3('0x5'));var ejs=require(_0x4ba3('0x6'));var fs=require('fs');var _=require(_0x4ba3('0x7'));var squel=require(_0x4ba3('0x8'));var crypto=require(_0x4ba3('0x9'));var jsforce=require(_0x4ba3('0xa'));var deskjs=require(_0x4ba3('0xb'));var toCsv=require('to-csv');var querystring=require(_0x4ba3('0xc'));var Papa=require(_0x4ba3('0xd'));var qs=require(_0x4ba3('0xe'));var logger=require(_0x4ba3('0xf'))(_0x4ba3('0x10'));var utils=require(_0x4ba3('0x11'));var config=require(_0x4ba3('0x12'));var db=require(_0x4ba3('0x13'))['db'];function respondWithStatusCode(_0x2ed106,_0x14ebf2){_0x14ebf2=_0x14ebf2||0xcc;return function(_0x2d215b){if(_0x2d215b){return _0x2ed106['sendStatus'](_0x14ebf2);}return _0x2ed106[_0x4ba3('0x14')](_0x14ebf2)[_0x4ba3('0x15')]();};}function respondWithResult(_0x485782,_0x3ff93a){_0x3ff93a=_0x3ff93a||0xc8;return function(_0x567709){if(_0x567709){return _0x485782[_0x4ba3('0x14')](_0x3ff93a)['json'](_0x567709);}};}function respondWithFilteredResult(_0x256f02,_0x4419b4){return function(_0x29e498){if(_0x29e498){var _0x3515e9=_0x29e498[_0x4ba3('0x16')],_0x2bc796=_0x4419b4[_0x4ba3('0x17')],_0x3d2ace=_0x4419b4[_0x4ba3('0x17')]+_0x4419b4[_0x4ba3('0x18')],_0x3a74f7;if(_0x3d2ace>=_0x3515e9){_0x3d2ace=_0x3515e9;_0x3a74f7=0xc8;}else{_0x3a74f7=0xce;}_0x256f02[_0x4ba3('0x14')](_0x3a74f7);return _0x256f02[_0x4ba3('0x19')](_0x4ba3('0x1a'),_0x2bc796+'-'+_0x3d2ace+'/'+_0x3515e9)[_0x4ba3('0x1b')](_0x29e498);}return null;};}function patchUpdates(_0x1b7776){return function(_0x58d20a){try{jsonpatch[_0x4ba3('0x1c')](_0x58d20a,_0x1b7776,!![]);}catch(_0x788277){return BPromise[_0x4ba3('0x1d')](_0x788277);}return _0x58d20a[_0x4ba3('0x1e')]();};}function saveUpdates(_0x556290,_0x2519bb){return function(_0xe4eff9){if(_0xe4eff9){return _0xe4eff9[_0x4ba3('0x1f')](_0x556290)[_0x4ba3('0x20')](function(_0x184332){return _0x184332;});}return null;};}function removeEntity(_0x125944,_0x4b2791){return function(_0x57de6a){if(_0x57de6a){return _0x57de6a[_0x4ba3('0x21')]()['then'](function(){_0x125944[_0x4ba3('0x14')](0xcc)[_0x4ba3('0x15')]();});}};}function handleEntityNotFound(_0x413bb3,_0xbc7023){return function(_0x46f1f5){if(!_0x46f1f5){_0x413bb3[_0x4ba3('0x22')](0x194);}return _0x46f1f5;};}function handleError(_0x4a0823,_0x143c78){_0x143c78=_0x143c78||0x1f4;return function(_0x1f87e1){logger['error'](_0x1f87e1[_0x4ba3('0x23')]);if(_0x1f87e1['name']){delete _0x1f87e1[_0x4ba3('0x24')];}_0x4a0823[_0x4ba3('0x14')](_0x143c78)[_0x4ba3('0x25')](_0x1f87e1);};}exports[_0x4ba3('0x26')]=function(_0x152e41,_0xe29a49){var _0x159596={},_0xe1f7d2={},_0x6cecf3={'count':0x0,'rows':[]};var _0x2e67a0=db['AnalyticFieldReport'][_0x4ba3('0x27')];_0xe1f7d2[_0x4ba3('0x28')]=_[_0x4ba3('0x29')](_0x2e67a0);var _0x5adaab={'dateStart':_0x152e41[_0x4ba3('0x2a')][_0x4ba3('0x2b')],'dateEnd':_0x152e41[_0x4ba3('0x2a')]['dateEnd']};delete _0x152e41[_0x4ba3('0x2a')][_0x4ba3('0x2b')];delete _0x152e41[_0x4ba3('0x2a')][_0x4ba3('0x2c')];_0xe1f7d2['query']=_['keys'](_0x152e41[_0x4ba3('0x2a')]);_0xe1f7d2[_0x4ba3('0x2d')]=_[_0x4ba3('0x2e')](_0xe1f7d2[_0x4ba3('0x28')],_0xe1f7d2[_0x4ba3('0x2a')]);_0x159596[_0x4ba3('0x2f')]=_['intersection'](_0xe1f7d2[_0x4ba3('0x28')],qs[_0x4ba3('0x30')](_0x152e41[_0x4ba3('0x2a')][_0x4ba3('0x30')]));_0x159596[_0x4ba3('0x2f')]=_0x159596[_0x4ba3('0x2f')][_0x4ba3('0x31')]?_0x159596[_0x4ba3('0x2f')]:_0xe1f7d2[_0x4ba3('0x28')];if(!_0x152e41[_0x4ba3('0x2a')]['hasOwnProperty']('nolimit')){_0x159596['limit']=qs[_0x4ba3('0x18')](_0x152e41[_0x4ba3('0x2a')][_0x4ba3('0x18')]);_0x159596[_0x4ba3('0x17')]=qs[_0x4ba3('0x17')](_0x152e41[_0x4ba3('0x2a')][_0x4ba3('0x17')]);}_0x159596[_0x4ba3('0x32')]=qs[_0x4ba3('0x33')](_0x152e41[_0x4ba3('0x2a')][_0x4ba3('0x33')]);_0x159596[_0x4ba3('0x34')]=qs['filters'](_[_0x4ba3('0x35')](_0x152e41[_0x4ba3('0x2a')],_0xe1f7d2[_0x4ba3('0x2d')]));if(_0x5adaab['dateStart']){if(_0x5adaab[_0x4ba3('0x2c')]){_0x5adaab['dateEnd']=moment(_0x5adaab[_0x4ba3('0x2c')])[_0x4ba3('0x36')](0x1,_0x4ba3('0x37'));}else{_0x5adaab[_0x4ba3('0x2c')]=moment(_0x5adaab[_0x4ba3('0x2b')])[_0x4ba3('0x36')](0x1,'day');}_[_0x4ba3('0x38')](_0x159596[_0x4ba3('0x34')],{'createdAt':{'$gte':_0x5adaab[_0x4ba3('0x2b')],'$lte':_0x5adaab['dateEnd']}});}if(_0x152e41[_0x4ba3('0x2a')][_0x4ba3('0x39')]){_0x159596['where']=_[_0x4ba3('0x38')](_0x159596['where'],{'$or':_['map'](_0x159596[_0x4ba3('0x2f')],function(_0x1acc74){var _0x38b64d={};_0x38b64d[_0x1acc74]={'$like':'%'+_0x152e41[_0x4ba3('0x2a')][_0x4ba3('0x39')]+'%'};return _0x38b64d;})});}_0x159596=_['merge']({},_0x159596,_0x152e41[_0x4ba3('0x3a')]);var _0x10e4b5={'where':_0x159596[_0x4ba3('0x34')]};return db[_0x4ba3('0x3b')][_0x4ba3('0x16')](_0x10e4b5)[_0x4ba3('0x20')](function(_0x349af4){_0x6cecf3[_0x4ba3('0x16')]=_0x349af4;if(_0x152e41['query'][_0x4ba3('0x3c')]){_0x159596[_0x4ba3('0x3d')]=[{'all':!![]}];}return db[_0x4ba3('0x3b')][_0x4ba3('0x3e')](_0x159596);})[_0x4ba3('0x20')](function(_0x25b2c9){_0x6cecf3[_0x4ba3('0x3f')]=_0x25b2c9;return _0x6cecf3;})[_0x4ba3('0x20')](respondWithFilteredResult(_0xe29a49,_0x159596))[_0x4ba3('0x40')](handleError(_0xe29a49,null));};exports[_0x4ba3('0x41')]=function(_0x3b9a0a,_0x1c58d2){var _0x1d031b={'raw':![],'where':{'id':_0x3b9a0a['params']['id']}},_0x28b649={};_0x28b649['model']=_['keys'](db['AnalyticFieldReport']['rawAttributes']);_0x28b649[_0x4ba3('0x2a')]=_['keys'](_0x3b9a0a[_0x4ba3('0x2a')]);_0x28b649['filters']=_[_0x4ba3('0x2e')](_0x28b649[_0x4ba3('0x28')],_0x28b649[_0x4ba3('0x2a')]);_0x1d031b[_0x4ba3('0x2f')]=_[_0x4ba3('0x2e')](_0x28b649['model'],qs[_0x4ba3('0x30')](_0x3b9a0a['query'][_0x4ba3('0x30')]));_0x1d031b['attributes']=_0x1d031b[_0x4ba3('0x2f')][_0x4ba3('0x31')]?_0x1d031b[_0x4ba3('0x2f')]:_0x28b649[_0x4ba3('0x28')];if(_0x3b9a0a[_0x4ba3('0x2a')][_0x4ba3('0x3c')]){_0x1d031b[_0x4ba3('0x3d')]=[{'all':!![]}];}_0x1d031b=_['merge']({},_0x1d031b,_0x3b9a0a[_0x4ba3('0x3a')]);return db[_0x4ba3('0x3b')][_0x4ba3('0x42')](_0x1d031b)[_0x4ba3('0x20')](handleEntityNotFound(_0x1c58d2,null))[_0x4ba3('0x20')](respondWithResult(_0x1c58d2,null))['catch'](handleError(_0x1c58d2,null));};exports['create']=function(_0xa4bbb2,_0x1fe115){return db[_0x4ba3('0x3b')]['create'](_0xa4bbb2[_0x4ba3('0x43')],{})[_0x4ba3('0x20')](respondWithResult(_0x1fe115,0xc9))[_0x4ba3('0x40')](handleError(_0x1fe115,null));};exports['bulkCreate']=function(_0x47f588,_0x34dc04){return db['AnalyticFieldReport'][_0x4ba3('0x44')](_0x47f588[_0x4ba3('0x43')],{'raw':![],'individualHooks':!![]})[_0x4ba3('0x20')](respondWithResult(_0x34dc04,0xc9))[_0x4ba3('0x40')](handleError(_0x34dc04,null));};exports[_0x4ba3('0x1f')]=function(_0x213eb0,_0x590739){if(_0x213eb0[_0x4ba3('0x43')]['id']){delete _0x213eb0[_0x4ba3('0x43')]['id'];}return db['AnalyticFieldReport'][_0x4ba3('0x42')]({'where':{'id':_0x213eb0[_0x4ba3('0x45')]['id']}})[_0x4ba3('0x20')](handleEntityNotFound(_0x590739,null))[_0x4ba3('0x20')](saveUpdates(_0x213eb0[_0x4ba3('0x43')],null))['then'](respondWithResult(_0x590739,null))[_0x4ba3('0x40')](handleError(_0x590739,null));};exports[_0x4ba3('0x21')]=function(_0x588ee1,_0x43f820){return db[_0x4ba3('0x3b')][_0x4ba3('0x42')]({'where':{'id':_0x588ee1[_0x4ba3('0x45')]['id']}})[_0x4ba3('0x20')](handleEntityNotFound(_0x43f820,null))[_0x4ba3('0x20')](removeEntity(_0x43f820,null))[_0x4ba3('0x40')](handleError(_0x43f820,null));};exports[_0x4ba3('0x46')]=function(_0x18c757,_0x428a27){return db[_0x4ba3('0x3b')][_0x4ba3('0x21')]({'where':{'id':_0x18c757[_0x4ba3('0x2a')][_0x4ba3('0x47')]||[]},'raw':![],'individualHooks':!![]})[_0x4ba3('0x20')](respondWithResult(_0x428a27,0xcc))['catch'](handleError(_0x428a27,null));};exports['addFields']=function(_0x589d82,_0x14c014,_0x1b7ad1){return db[_0x4ba3('0x48')][_0x4ba3('0x49')]({'where':{'id':_0x589d82[_0x4ba3('0x45')]['id']}})['then'](handleEntityNotFound(_0x14c014,null))[_0x4ba3('0x20')](function(_0x4620ae){if(_0x4620ae){return db[_0x4ba3('0x4a')][_0x4ba3('0x4b')](function(_0x5359d1){return db[_0x4ba3('0x3b')][_0x4ba3('0x21')]({'where':{'CustomReportId':_0x589d82[_0x4ba3('0x45')]['id']},'transaction':_0x5359d1})[_0x4ba3('0x20')](function(_0xcb2e97){var _0x16a8d1=_[_0x4ba3('0x4c')](_0x589d82[_0x4ba3('0x43')],function(_0x328314){delete _0x328314['id'];_0x328314['CustomReportId']=_0x589d82[_0x4ba3('0x45')]['id'];return _0x328314;});return db[_0x4ba3('0x3b')][_0x4ba3('0x44')](_0x16a8d1,{'transaction':_0x5359d1});});})[_0x4ba3('0x20')](function(){return db[_0x4ba3('0x3b')][_0x4ba3('0x3e')]({'where':{'CustomReportId':_0x589d82[_0x4ba3('0x45')]['id']}});});}})[_0x4ba3('0x20')](respondWithResult(_0x14c014,null))['catch'](handleError(_0x14c014,null));};
\ No newline at end of file
index 83bae62..87ab564 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb9bc=['AnalyticFieldReport','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x12ce1d,_0x27dad7){var _0x3e987f=function(_0x2eb0b6){while(--_0x2eb0b6){_0x12ce1d['push'](_0x12ce1d['shift']());}};_0x3e987f(++_0x27dad7);}(_0xb9bc,0x127));var _0xcb9b=function(_0xffd8b0,_0x12c51f){_0xffd8b0=_0xffd8b0-0x0;var _0x301ba0=_0xb9bc[_0xffd8b0];return _0x301ba0;};'use strict';var _=require(_0xcb9b('0x0'));var util=require(_0xcb9b('0x1'));var logger=require(_0xcb9b('0x2'))(_0xcb9b('0x3'));var moment=require(_0xcb9b('0x4'));var BPromise=require(_0xcb9b('0x5'));var rp=require('request-promise');var attributes=require('./analyticFieldReport.attributes');module['exports']=function(_0xc2e7cf,_0x57ba6d){return _0xc2e7cf['define'](_0xcb9b('0x6'),attributes,{'tableName':'analytics_report_fields','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xc4ad=['exports','define','AnalyticFieldReport','analytics_report_fields','lodash','../../config/logger','api','moment','bluebird','request-promise','./analyticFieldReport.attributes'];(function(_0x136290,_0x3e6b8f){var _0x290e92=function(_0x4095d6){while(--_0x4095d6){_0x136290['push'](_0x136290['shift']());}};_0x290e92(++_0x3e6b8f);}(_0xc4ad,0x14e));var _0xdc4a=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xc4ad[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xdc4a('0x0'));var util=require('util');var logger=require(_0xdc4a('0x1'))(_0xdc4a('0x2'));var moment=require(_0xdc4a('0x3'));var BPromise=require(_0xdc4a('0x4'));var rp=require(_0xdc4a('0x5'));var attributes=require(_0xdc4a('0x6'));module[_0xdc4a('0x7')]=function(_0x2ced96,_0xa1f6e4){return _0x2ced96[_0xdc4a('0x8')](_0xdc4a('0x9'),attributes,{'tableName':_0xdc4a('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ff17570..d65e7ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1841=['stringify','error','code','message','result','util','moment','randomstring','../../mysqldb','../../config/logger','client','http','then','info','AnalyticFieldReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticFieldReport,\x20%s,\x20%s,\x20%s'];(function(_0x57bb74,_0x4755ac){var _0x44e0eb=function(_0x19e800){while(--_0x19e800){_0x57bb74['push'](_0x57bb74['shift']());}};_0x44e0eb(++_0x4755ac);}(_0x1841,0x16d));var _0x1184=function(_0x81d080,_0x583746){_0x81d080=_0x81d080-0x0;var _0x562832=_0x1841[_0x81d080];return _0x562832;};'use strict';var _=require('lodash');var util=require(_0x1184('0x0'));var moment=require(_0x1184('0x1'));var BPromise=require('bluebird');var rs=require(_0x1184('0x2'));var fs=require('fs');var db=require(_0x1184('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x1184('0x4'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x1184('0x5')][_0x1184('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x353ef6,_0x119a25,_0xf43833){return new BPromise(function(_0x108112,_0x612ba6){return client['request'](_0x353ef6,_0xf43833)[_0x1184('0x7')](function(_0x4a56d7){logger[_0x1184('0x8')](_0x1184('0x9'),_0x119a25,_0x1184('0xa'));logger[_0x1184('0xb')](_0x1184('0xc'),_0x119a25,_0x1184('0xa'),JSON[_0x1184('0xd')](_0x4a56d7));if(_0x4a56d7[_0x1184('0xe')]){if(_0x4a56d7[_0x1184('0xe')][_0x1184('0xf')]===0x1f4){logger[_0x1184('0xe')](_0x1184('0x9'),_0x119a25,_0x4a56d7[_0x1184('0xe')][_0x1184('0x10')]);return _0x612ba6(_0x4a56d7['error']['message']);}logger[_0x1184('0xe')]('AnalyticFieldReport,\x20%s,\x20%s',_0x119a25,_0x4a56d7[_0x1184('0xe')]['message']);return _0x108112(_0x4a56d7[_0x1184('0xe')][_0x1184('0x10')]);}else{logger[_0x1184('0x8')](_0x1184('0x9'),_0x119a25,_0x1184('0xa'));_0x108112(_0x4a56d7[_0x1184('0x11')]['message']);}})['catch'](function(_0x553e8a){logger['error'](_0x1184('0x9'),_0x119a25,_0x553e8a);_0x612ba6(_0x553e8a);});});}
\ No newline at end of file
+var _0xfdfc=['moment','randomstring','../../config/utils','../../config/logger','../../config/environment','client','http','request','then','info','AnalyticFieldReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticFieldReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util'];(function(_0x35af19,_0x53a8c3){var _0x12ce38=function(_0x505db2){while(--_0x505db2){_0x35af19['push'](_0x35af19['shift']());}};_0x12ce38(++_0x53a8c3);}(_0xfdfc,0xae));var _0xcfdf=function(_0x4ae6ef,_0xc2af80){_0x4ae6ef=_0x4ae6ef-0x0;var _0x3cbb4e=_0xfdfc[_0x4ae6ef];return _0x3cbb4e;};'use strict';var _=require(_0xcfdf('0x0'));var util=require(_0xcfdf('0x1'));var moment=require(_0xcfdf('0x2'));var BPromise=require('bluebird');var rs=require(_0xcfdf('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xcfdf('0x4'));var logger=require(_0xcfdf('0x5'))('rpc');var config=require(_0xcfdf('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xcfdf('0x7')][_0xcfdf('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x2cfb8a,_0x5267e0,_0x452b2d){return new BPromise(function(_0x3f1fab,_0x204067){return client[_0xcfdf('0x9')](_0x2cfb8a,_0x452b2d)[_0xcfdf('0xa')](function(_0x1f11fb){logger[_0xcfdf('0xb')](_0xcfdf('0xc'),_0x5267e0,_0xcfdf('0xd'));logger[_0xcfdf('0xe')](_0xcfdf('0xf'),_0x5267e0,_0xcfdf('0xd'),JSON[_0xcfdf('0x10')](_0x1f11fb));if(_0x1f11fb['error']){if(_0x1f11fb[_0xcfdf('0x11')][_0xcfdf('0x12')]===0x1f4){logger[_0xcfdf('0x11')]('AnalyticFieldReport,\x20%s,\x20%s',_0x5267e0,_0x1f11fb[_0xcfdf('0x11')][_0xcfdf('0x13')]);return _0x204067(_0x1f11fb['error'][_0xcfdf('0x13')]);}logger['error'](_0xcfdf('0xc'),_0x5267e0,_0x1f11fb['error'][_0xcfdf('0x13')]);return _0x3f1fab(_0x1f11fb['error']['message']);}else{logger[_0xcfdf('0xb')](_0xcfdf('0xc'),_0x5267e0,_0xcfdf('0xd'));_0x3f1fab(_0x1f11fb[_0xcfdf('0x14')][_0xcfdf('0x13')]);}})[_0xcfdf('0x15')](function(_0x280bf3){logger[_0xcfdf('0x11')](_0xcfdf('0xc'),_0x5267e0,_0x280bf3);_0x204067(_0x280bf3);});});}
\ No newline at end of file
index a470d4c..c456be6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9ebc=['delete','exports','multer','path','express','Router','../../components/auth/service','./analyticFieldReport.controller','get','isAuthenticated','index','/:id','show','post','create','/create_many','/:id/create_many','addFields','put','update'];(function(_0x1cbfe1,_0x50e351){var _0x462030=function(_0x572c21){while(--_0x572c21){_0x1cbfe1['push'](_0x1cbfe1['shift']());}};_0x462030(++_0x50e351);}(_0x9ebc,0x156));var _0xc9eb=function(_0x3dd972,_0x429701){_0x3dd972=_0x3dd972-0x0;var _0x24c607=_0x9ebc[_0x3dd972];return _0x24c607;};'use strict';var multer=require(_0xc9eb('0x0'));var util=require('util');var path=require(_0xc9eb('0x1'));var express=require(_0xc9eb('0x2'));var router=express[_0xc9eb('0x3')]();var auth=require(_0xc9eb('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xc9eb('0x5'));router[_0xc9eb('0x6')]('/',auth[_0xc9eb('0x7')](),controller[_0xc9eb('0x8')]);router[_0xc9eb('0x6')](_0xc9eb('0x9'),auth[_0xc9eb('0x7')](),controller[_0xc9eb('0xa')]);router[_0xc9eb('0xb')]('/',auth['isAuthenticated'](),controller[_0xc9eb('0xc')]);router[_0xc9eb('0xb')](_0xc9eb('0xd'),auth['isAuthenticated'](),controller['bulkCreate']);router[_0xc9eb('0xb')](_0xc9eb('0xe'),auth[_0xc9eb('0x7')](),controller[_0xc9eb('0xf')]);router[_0xc9eb('0x10')](_0xc9eb('0x9'),auth['isAuthenticated'](),controller[_0xc9eb('0x11')]);router[_0xc9eb('0x12')]('/destroy_many',auth['isAuthenticated'](),controller['bulkDestroy']);router[_0xc9eb('0x12')]('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0xc9eb('0x13')]=router;
\ No newline at end of file
+var _0x1394=['addFields','update','/destroy_many','bulkDestroy','delete','destroy','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','isAuthenticated','index','get','/:id','post','create','/create_many','bulkCreate'];(function(_0xc2a2a9,_0x29bdc5){var _0x34bb05=function(_0x3a28b4){while(--_0x3a28b4){_0xc2a2a9['push'](_0xc2a2a9['shift']());}};_0x34bb05(++_0x29bdc5);}(_0x1394,0x1ab));var _0x4139=function(_0x7a4e76,_0x1d54ab){_0x7a4e76=_0x7a4e76-0x0;var _0x149407=_0x1394[_0x7a4e76];return _0x149407;};'use strict';var multer=require(_0x4139('0x0'));var util=require(_0x4139('0x1'));var path=require('path');var express=require(_0x4139('0x2'));var router=express[_0x4139('0x3')]();var auth=require(_0x4139('0x4'));var interaction=require(_0x4139('0x5'));var config=require('../../config/environment');var controller=require('./analyticFieldReport.controller');router['get']('/',auth[_0x4139('0x6')](),controller[_0x4139('0x7')]);router[_0x4139('0x8')](_0x4139('0x9'),auth['isAuthenticated'](),controller['show']);router[_0x4139('0xa')]('/',auth[_0x4139('0x6')](),controller[_0x4139('0xb')]);router[_0x4139('0xa')](_0x4139('0xc'),auth[_0x4139('0x6')](),controller[_0x4139('0xd')]);router[_0x4139('0xa')]('/:id/create_many',auth[_0x4139('0x6')](),controller[_0x4139('0xe')]);router['put'](_0x4139('0x9'),auth[_0x4139('0x6')](),controller[_0x4139('0xf')]);router['delete'](_0x4139('0x10'),auth[_0x4139('0x6')](),controller[_0x4139('0x11')]);router[_0x4139('0x12')](_0x4139('0x9'),auth['isAuthenticated'](),controller[_0x4139('0x13')]);module[_0x4139('0x14')]=router;
\ No newline at end of file
index a9c69b2..70538a5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b17=['TEXT','sequelize','STRING','name'];(function(_0x40a045,_0x516f0e){var _0x1a687c=function(_0x48c9fe){while(--_0x48c9fe){_0x40a045['push'](_0x40a045['shift']());}};_0x1a687c(++_0x516f0e);}(_0x8b17,0x1d5));var _0x78b1=function(_0x13ec2b,_0x40b664){_0x13ec2b=_0x13ec2b-0x0;var _0x1fb3f4=_0x8b17[_0x13ec2b];return _0x1fb3f4;};'use strict';var Sequelize=require(_0x78b1('0x0'));module['exports']={'name':{'type':Sequelize[_0x78b1('0x1')],'allowNull':![],'unique':_0x78b1('0x2')},'table':{'type':Sequelize[_0x78b1('0x1')]},'metric':{'type':Sequelize[_0x78b1('0x3')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xed24=['TEXT','exports','STRING'];(function(_0x51fe04,_0x4735eb){var _0x111d72=function(_0x5e3b49){while(--_0x5e3b49){_0x51fe04['push'](_0x51fe04['shift']());}};_0x111d72(++_0x4735eb);}(_0xed24,0x13c));var _0x4ed2=function(_0x1eca59,_0x331955){_0x1eca59=_0x1eca59-0x0;var _0x424466=_0xed24[_0x1eca59];return _0x424466;};'use strict';var Sequelize=require('sequelize');module[_0x4ed2('0x0')]={'name':{'type':Sequelize[_0x4ed2('0x1')],'allowNull':![],'unique':'name'},'table':{'type':Sequelize['STRING']},'metric':{'type':Sequelize[_0x4ed2('0x2')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index e848678..2abdcc7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf7f=['../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','update','destroy','then','error','stack','name','send','index','AnalyticMetric','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','where','pick','day','add','merge','filter','options','includeAll','include','findAll','rows','catch','show','rawAttributes','find','create','body','params','request-promise','mustache','util','path','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0xdf7f,0x1b9));var _0xfdf7=function(_0x3ecb91,_0x2b83dd){_0x3ecb91=_0x3ecb91-0x0;var _0x56f94e=_0xdf7f[_0x3ecb91];return _0x56f94e;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xfdf7('0x0'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xfdf7('0x1'));var util=require(_0xfdf7('0x2'));var path=require(_0xfdf7('0x3'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xfdf7('0x4'));var fs=require('fs');var _=require(_0xfdf7('0x5'));var squel=require('squel');var crypto=require(_0xfdf7('0x6'));var jsforce=require(_0xfdf7('0x7'));var deskjs=require(_0xfdf7('0x8'));var toCsv=require('to-csv');var querystring=require(_0xfdf7('0x9'));var Papa=require(_0xfdf7('0xa'));var qs=require(_0xfdf7('0xb'));var logger=require(_0xfdf7('0xc'))('api');var utils=require(_0xfdf7('0xd'));var config=require('../../config/environment');var db=require(_0xfdf7('0xe'))['db'];function respondWithStatusCode(_0x674336,_0xf269c){_0xf269c=_0xf269c||0xcc;return function(_0x5d406d){if(_0x5d406d){return _0x674336[_0xfdf7('0xf')](_0xf269c);}return _0x674336[_0xfdf7('0x10')](_0xf269c)[_0xfdf7('0x11')]();};}function respondWithResult(_0xfa77c2,_0x16e3eb){_0x16e3eb=_0x16e3eb||0xc8;return function(_0x3c3ebc){if(_0x3c3ebc){return _0xfa77c2[_0xfdf7('0x10')](_0x16e3eb)[_0xfdf7('0x12')](_0x3c3ebc);}};}function respondWithFilteredResult(_0x21ad9e,_0x1a00ed){return function(_0x5313d7){if(_0x5313d7){var _0x536e4f=_0x5313d7[_0xfdf7('0x13')],_0x27716e=_0x1a00ed[_0xfdf7('0x14')],_0x72763f=_0x1a00ed['offset']+_0x1a00ed['limit'],_0x2cc18f;if(_0x72763f>=_0x536e4f){_0x72763f=_0x536e4f;_0x2cc18f=0xc8;}else{_0x2cc18f=0xce;}_0x21ad9e[_0xfdf7('0x10')](_0x2cc18f);return _0x21ad9e[_0xfdf7('0x15')](_0xfdf7('0x16'),_0x27716e+'-'+_0x72763f+'/'+_0x536e4f)['json'](_0x5313d7);}return null;};}function patchUpdates(_0x1d34bf){return function(_0x2b8369){try{jsonpatch[_0xfdf7('0x17')](_0x2b8369,_0x1d34bf,!![]);}catch(_0x92e846){return BPromise[_0xfdf7('0x18')](_0x92e846);}return _0x2b8369['save']();};}function saveUpdates(_0x5c3f96,_0x3062d3){return function(_0xd2b618){if(_0xd2b618){return _0xd2b618[_0xfdf7('0x19')](_0x5c3f96)['then'](function(_0xfce06b){return _0xfce06b;});}return null;};}function removeEntity(_0x3e48e5,_0x2de25a){return function(_0x29358a){if(_0x29358a){return _0x29358a[_0xfdf7('0x1a')]()[_0xfdf7('0x1b')](function(){_0x3e48e5['status'](0xcc)[_0xfdf7('0x11')]();});}};}function handleEntityNotFound(_0x42c216,_0x5bf278){return function(_0x2f8fd9){if(!_0x2f8fd9){_0x42c216['sendStatus'](0x194);}return _0x2f8fd9;};}function handleError(_0x35188d,_0x406a0d){_0x406a0d=_0x406a0d||0x1f4;return function(_0x1dfbca){logger[_0xfdf7('0x1c')](_0x1dfbca[_0xfdf7('0x1d')]);if(_0x1dfbca[_0xfdf7('0x1e')]){delete _0x1dfbca['name'];}_0x35188d['status'](_0x406a0d)[_0xfdf7('0x1f')](_0x1dfbca);};}exports[_0xfdf7('0x20')]=function(_0x1e8890,_0x472b83){var _0x516069={},_0x2c167c={},_0xe9ec64={'count':0x0,'rows':[]};var _0x175dd4=db[_0xfdf7('0x21')]['rawAttributes'];_0x2c167c['model']=_[_0xfdf7('0x22')](_0x175dd4);var _0x20ba47={'dateStart':_0x1e8890[_0xfdf7('0x23')][_0xfdf7('0x24')],'dateEnd':_0x1e8890[_0xfdf7('0x23')]['dateEnd']};delete _0x1e8890['query'][_0xfdf7('0x24')];delete _0x1e8890[_0xfdf7('0x23')][_0xfdf7('0x25')];_0x2c167c[_0xfdf7('0x23')]=_[_0xfdf7('0x22')](_0x1e8890[_0xfdf7('0x23')]);_0x2c167c[_0xfdf7('0x26')]=_[_0xfdf7('0x27')](_0x2c167c[_0xfdf7('0x28')],_0x2c167c[_0xfdf7('0x23')]);_0x516069[_0xfdf7('0x29')]=_[_0xfdf7('0x27')](_0x2c167c[_0xfdf7('0x28')],qs[_0xfdf7('0x2a')](_0x1e8890[_0xfdf7('0x23')]['fields']));_0x516069[_0xfdf7('0x29')]=_0x516069[_0xfdf7('0x29')][_0xfdf7('0x2b')]?_0x516069[_0xfdf7('0x29')]:_0x2c167c['model'];if(!_0x1e8890[_0xfdf7('0x23')][_0xfdf7('0x2c')](_0xfdf7('0x2d'))){_0x516069[_0xfdf7('0x2e')]=qs[_0xfdf7('0x2e')](_0x1e8890['query'][_0xfdf7('0x2e')]);_0x516069[_0xfdf7('0x14')]=qs[_0xfdf7('0x14')](_0x1e8890['query'][_0xfdf7('0x14')]);}_0x516069['order']=qs['sort'](_0x1e8890[_0xfdf7('0x23')]['sort']);_0x516069[_0xfdf7('0x2f')]=qs['filters'](_[_0xfdf7('0x30')](_0x1e8890['query'],_0x2c167c[_0xfdf7('0x26')]));if(_0x20ba47[_0xfdf7('0x24')]){if(_0x20ba47['dateEnd']){_0x20ba47[_0xfdf7('0x25')]=moment(_0x20ba47[_0xfdf7('0x25')])['add'](0x1,_0xfdf7('0x31'));}else{_0x20ba47[_0xfdf7('0x25')]=moment(_0x20ba47[_0xfdf7('0x24')])[_0xfdf7('0x32')](0x1,'day');}_[_0xfdf7('0x33')](_0x516069[_0xfdf7('0x2f')],{'createdAt':{'$gte':_0x20ba47[_0xfdf7('0x24')],'$lte':_0x20ba47[_0xfdf7('0x25')]}});}if(_0x1e8890['query'][_0xfdf7('0x34')]){_0x516069['where']=_[_0xfdf7('0x33')](_0x516069[_0xfdf7('0x2f')],{'$or':_['map'](_0x516069[_0xfdf7('0x29')],function(_0x2f3ceb){var _0xfb804f={};_0xfb804f[_0x2f3ceb]={'$like':'%'+_0x1e8890['query'][_0xfdf7('0x34')]+'%'};return _0xfb804f;})});}_0x516069=_[_0xfdf7('0x33')]({},_0x516069,_0x1e8890[_0xfdf7('0x35')]);var _0x39a067={'where':_0x516069[_0xfdf7('0x2f')]};return db['AnalyticMetric'][_0xfdf7('0x13')](_0x39a067)['then'](function(_0x55807a){_0xe9ec64[_0xfdf7('0x13')]=_0x55807a;if(_0x1e8890[_0xfdf7('0x23')][_0xfdf7('0x36')]){_0x516069[_0xfdf7('0x37')]=[{'all':!![]}];}return db['AnalyticMetric'][_0xfdf7('0x38')](_0x516069);})[_0xfdf7('0x1b')](function(_0xd660b8){_0xe9ec64[_0xfdf7('0x39')]=_0xd660b8;return _0xe9ec64;})['then'](respondWithFilteredResult(_0x472b83,_0x516069))[_0xfdf7('0x3a')](handleError(_0x472b83,null));};exports[_0xfdf7('0x3b')]=function(_0x4d66ee,_0x5031f7){var _0x47f811={'raw':!![],'where':{'id':_0x4d66ee['params']['id']}},_0x3ce372={};_0x3ce372[_0xfdf7('0x28')]=_[_0xfdf7('0x22')](db['AnalyticMetric'][_0xfdf7('0x3c')]);_0x3ce372[_0xfdf7('0x23')]=_[_0xfdf7('0x22')](_0x4d66ee[_0xfdf7('0x23')]);_0x3ce372['filters']=_[_0xfdf7('0x27')](_0x3ce372[_0xfdf7('0x28')],_0x3ce372['query']);_0x47f811[_0xfdf7('0x29')]=_[_0xfdf7('0x27')](_0x3ce372[_0xfdf7('0x28')],qs[_0xfdf7('0x2a')](_0x4d66ee['query'][_0xfdf7('0x2a')]));_0x47f811[_0xfdf7('0x29')]=_0x47f811[_0xfdf7('0x29')][_0xfdf7('0x2b')]?_0x47f811[_0xfdf7('0x29')]:_0x3ce372[_0xfdf7('0x28')];if(_0x4d66ee['query'][_0xfdf7('0x36')]){_0x47f811[_0xfdf7('0x37')]=[{'all':!![]}];}_0x47f811=_[_0xfdf7('0x33')]({},_0x47f811,_0x4d66ee[_0xfdf7('0x35')]);return db['AnalyticMetric'][_0xfdf7('0x3d')](_0x47f811)[_0xfdf7('0x1b')](handleEntityNotFound(_0x5031f7,null))[_0xfdf7('0x1b')](respondWithResult(_0x5031f7,null))[_0xfdf7('0x3a')](handleError(_0x5031f7,null));};exports[_0xfdf7('0x3e')]=function(_0x42f4a4,_0x25c8a2){return db[_0xfdf7('0x21')][_0xfdf7('0x3e')](_0x42f4a4[_0xfdf7('0x3f')],{})[_0xfdf7('0x1b')](respondWithResult(_0x25c8a2,0xc9))['catch'](handleError(_0x25c8a2,null));};exports[_0xfdf7('0x19')]=function(_0x20dfc9,_0x48842f){if(_0x20dfc9[_0xfdf7('0x3f')]['id']){delete _0x20dfc9[_0xfdf7('0x3f')]['id'];}return db[_0xfdf7('0x21')]['find']({'where':{'id':_0x20dfc9[_0xfdf7('0x40')]['id']}})[_0xfdf7('0x1b')](handleEntityNotFound(_0x48842f,null))[_0xfdf7('0x1b')](saveUpdates(_0x20dfc9[_0xfdf7('0x3f')],null))[_0xfdf7('0x1b')](respondWithResult(_0x48842f,null))[_0xfdf7('0x3a')](handleError(_0x48842f,null));};exports[_0xfdf7('0x1a')]=function(_0x59dd22,_0x3ef0d4){return db[_0xfdf7('0x21')][_0xfdf7('0x3d')]({'where':{'id':_0x59dd22[_0xfdf7('0x40')]['id']}})[_0xfdf7('0x1b')](handleEntityNotFound(_0x3ef0d4,null))[_0xfdf7('0x1b')](removeEntity(_0x3ef0d4,null))['catch'](handleError(_0x3ef0d4,null));};
\ No newline at end of file
+var _0x464c=['api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','destroy','then','error','stack','name','send','index','AnalyticMetric','rawAttributes','model','keys','query','dateEnd','filters','intersection','attributes','fields','length','order','sort','pick','dateStart','day','add','merge','where','map','filter','options','includeAll','include','rows','catch','params','create','body','update','find','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger'];(function(_0x217c27,_0x4325db){var _0xb7b87=function(_0x2c0b41){while(--_0x2c0b41){_0x217c27['push'](_0x217c27['shift']());}};_0xb7b87(++_0x4325db);}(_0x464c,0xc1));var _0xc464=function(_0x4301c7,_0x34373b){_0x4301c7=_0x4301c7-0x0;var _0x167782=_0x464c[_0x4301c7];return _0x167782;};'use strict';var jsonpatch=require(_0xc464('0x0'));var rp=require(_0xc464('0x1'));var moment=require('moment');var BPromise=require(_0xc464('0x2'));var Mustache=require(_0xc464('0x3'));var util=require(_0xc464('0x4'));var path=require(_0xc464('0x5'));var sox=require(_0xc464('0x6'));var csv=require(_0xc464('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xc464('0x8'));var squel=require(_0xc464('0x9'));var crypto=require(_0xc464('0xa'));var jsforce=require(_0xc464('0xb'));var deskjs=require(_0xc464('0xc'));var toCsv=require(_0xc464('0x7'));var querystring=require(_0xc464('0xd'));var Papa=require(_0xc464('0xe'));var qs=require(_0xc464('0xf'));var logger=require(_0xc464('0x10'))(_0xc464('0x11'));var utils=require(_0xc464('0x12'));var config=require(_0xc464('0x13'));var db=require(_0xc464('0x14'))['db'];function respondWithStatusCode(_0x3ed6f1,_0x7762f6){_0x7762f6=_0x7762f6||0xcc;return function(_0x298b03){if(_0x298b03){return _0x3ed6f1[_0xc464('0x15')](_0x7762f6);}return _0x3ed6f1[_0xc464('0x16')](_0x7762f6)[_0xc464('0x17')]();};}function respondWithResult(_0x19eefe,_0x2814c5){_0x2814c5=_0x2814c5||0xc8;return function(_0x24cd2f){if(_0x24cd2f){return _0x19eefe['status'](_0x2814c5)[_0xc464('0x18')](_0x24cd2f);}};}function respondWithFilteredResult(_0xb814b3,_0x472e0c){return function(_0x52b1cd){if(_0x52b1cd){var _0x39ae13=_0x52b1cd[_0xc464('0x19')],_0x5dd02f=_0x472e0c[_0xc464('0x1a')],_0x1dafab=_0x472e0c[_0xc464('0x1a')]+_0x472e0c[_0xc464('0x1b')],_0x5cc6b7;if(_0x1dafab>=_0x39ae13){_0x1dafab=_0x39ae13;_0x5cc6b7=0xc8;}else{_0x5cc6b7=0xce;}_0xb814b3[_0xc464('0x16')](_0x5cc6b7);return _0xb814b3[_0xc464('0x1c')](_0xc464('0x1d'),_0x5dd02f+'-'+_0x1dafab+'/'+_0x39ae13)['json'](_0x52b1cd);}return null;};}function patchUpdates(_0x5277e3){return function(_0x28c978){try{jsonpatch['apply'](_0x28c978,_0x5277e3,!![]);}catch(_0x2acfaa){return BPromise[_0xc464('0x1e')](_0x2acfaa);}return _0x28c978[_0xc464('0x1f')]();};}function saveUpdates(_0x37487b,_0x2e17ce){return function(_0x35fbc6){if(_0x35fbc6){return _0x35fbc6['update'](_0x37487b)['then'](function(_0x41dfd8){return _0x41dfd8;});}return null;};}function removeEntity(_0x576dd0,_0x491604){return function(_0x39c3f2){if(_0x39c3f2){return _0x39c3f2[_0xc464('0x20')]()[_0xc464('0x21')](function(){_0x576dd0[_0xc464('0x16')](0xcc)[_0xc464('0x17')]();});}};}function handleEntityNotFound(_0x439a58,_0x1b2db7){return function(_0x2b7752){if(!_0x2b7752){_0x439a58[_0xc464('0x15')](0x194);}return _0x2b7752;};}function handleError(_0x559de7,_0x909199){_0x909199=_0x909199||0x1f4;return function(_0x2d5713){logger[_0xc464('0x22')](_0x2d5713[_0xc464('0x23')]);if(_0x2d5713['name']){delete _0x2d5713[_0xc464('0x24')];}_0x559de7[_0xc464('0x16')](_0x909199)[_0xc464('0x25')](_0x2d5713);};}exports[_0xc464('0x26')]=function(_0x35ceee,_0x4a2101){var _0x15ada9={},_0x35830e={},_0x12d9fc={'count':0x0,'rows':[]};var _0x530411=db[_0xc464('0x27')][_0xc464('0x28')];_0x35830e[_0xc464('0x29')]=_[_0xc464('0x2a')](_0x530411);var _0x197cb9={'dateStart':_0x35ceee['query']['dateStart'],'dateEnd':_0x35ceee[_0xc464('0x2b')][_0xc464('0x2c')]};delete _0x35ceee[_0xc464('0x2b')]['dateStart'];delete _0x35ceee['query'][_0xc464('0x2c')];_0x35830e[_0xc464('0x2b')]=_[_0xc464('0x2a')](_0x35ceee[_0xc464('0x2b')]);_0x35830e[_0xc464('0x2d')]=_[_0xc464('0x2e')](_0x35830e[_0xc464('0x29')],_0x35830e[_0xc464('0x2b')]);_0x15ada9[_0xc464('0x2f')]=_[_0xc464('0x2e')](_0x35830e[_0xc464('0x29')],qs[_0xc464('0x30')](_0x35ceee[_0xc464('0x2b')][_0xc464('0x30')]));_0x15ada9[_0xc464('0x2f')]=_0x15ada9[_0xc464('0x2f')][_0xc464('0x31')]?_0x15ada9[_0xc464('0x2f')]:_0x35830e[_0xc464('0x29')];if(!_0x35ceee[_0xc464('0x2b')]['hasOwnProperty']('nolimit')){_0x15ada9[_0xc464('0x1b')]=qs['limit'](_0x35ceee[_0xc464('0x2b')][_0xc464('0x1b')]);_0x15ada9['offset']=qs['offset'](_0x35ceee[_0xc464('0x2b')][_0xc464('0x1a')]);}_0x15ada9[_0xc464('0x32')]=qs[_0xc464('0x33')](_0x35ceee[_0xc464('0x2b')][_0xc464('0x33')]);_0x15ada9['where']=qs['filters'](_[_0xc464('0x34')](_0x35ceee['query'],_0x35830e[_0xc464('0x2d')]));if(_0x197cb9[_0xc464('0x35')]){if(_0x197cb9['dateEnd']){_0x197cb9[_0xc464('0x2c')]=moment(_0x197cb9[_0xc464('0x2c')])['add'](0x1,_0xc464('0x36'));}else{_0x197cb9['dateEnd']=moment(_0x197cb9[_0xc464('0x35')])[_0xc464('0x37')](0x1,_0xc464('0x36'));}_[_0xc464('0x38')](_0x15ada9[_0xc464('0x39')],{'createdAt':{'$gte':_0x197cb9[_0xc464('0x35')],'$lte':_0x197cb9[_0xc464('0x2c')]}});}if(_0x35ceee[_0xc464('0x2b')]['filter']){_0x15ada9[_0xc464('0x39')]=_[_0xc464('0x38')](_0x15ada9[_0xc464('0x39')],{'$or':_[_0xc464('0x3a')](_0x15ada9[_0xc464('0x2f')],function(_0xc4e9b7){var _0x5c6e2b={};_0x5c6e2b[_0xc4e9b7]={'$like':'%'+_0x35ceee['query'][_0xc464('0x3b')]+'%'};return _0x5c6e2b;})});}_0x15ada9=_['merge']({},_0x15ada9,_0x35ceee[_0xc464('0x3c')]);var _0x5b97c3={'where':_0x15ada9[_0xc464('0x39')]};return db[_0xc464('0x27')][_0xc464('0x19')](_0x5b97c3)['then'](function(_0x1d6010){_0x12d9fc[_0xc464('0x19')]=_0x1d6010;if(_0x35ceee['query'][_0xc464('0x3d')]){_0x15ada9[_0xc464('0x3e')]=[{'all':!![]}];}return db['AnalyticMetric']['findAll'](_0x15ada9);})[_0xc464('0x21')](function(_0x1c95ba){_0x12d9fc[_0xc464('0x3f')]=_0x1c95ba;return _0x12d9fc;})['then'](respondWithFilteredResult(_0x4a2101,_0x15ada9))[_0xc464('0x40')](handleError(_0x4a2101,null));};exports['show']=function(_0x465ea0,_0x11746f){var _0xe56aff={'raw':!![],'where':{'id':_0x465ea0[_0xc464('0x41')]['id']}},_0x29fca8={};_0x29fca8[_0xc464('0x29')]=_[_0xc464('0x2a')](db[_0xc464('0x27')][_0xc464('0x28')]);_0x29fca8['query']=_[_0xc464('0x2a')](_0x465ea0[_0xc464('0x2b')]);_0x29fca8[_0xc464('0x2d')]=_['intersection'](_0x29fca8[_0xc464('0x29')],_0x29fca8[_0xc464('0x2b')]);_0xe56aff[_0xc464('0x2f')]=_[_0xc464('0x2e')](_0x29fca8[_0xc464('0x29')],qs['fields'](_0x465ea0[_0xc464('0x2b')]['fields']));_0xe56aff[_0xc464('0x2f')]=_0xe56aff[_0xc464('0x2f')][_0xc464('0x31')]?_0xe56aff[_0xc464('0x2f')]:_0x29fca8[_0xc464('0x29')];if(_0x465ea0[_0xc464('0x2b')][_0xc464('0x3d')]){_0xe56aff['include']=[{'all':!![]}];}_0xe56aff=_['merge']({},_0xe56aff,_0x465ea0[_0xc464('0x3c')]);return db[_0xc464('0x27')]['find'](_0xe56aff)[_0xc464('0x21')](handleEntityNotFound(_0x11746f,null))[_0xc464('0x21')](respondWithResult(_0x11746f,null))[_0xc464('0x40')](handleError(_0x11746f,null));};exports[_0xc464('0x42')]=function(_0x333410,_0x563376){return db[_0xc464('0x27')][_0xc464('0x42')](_0x333410[_0xc464('0x43')],{})['then'](respondWithResult(_0x563376,0xc9))[_0xc464('0x40')](handleError(_0x563376,null));};exports[_0xc464('0x44')]=function(_0x3ca2dc,_0x58dc09){if(_0x3ca2dc[_0xc464('0x43')]['id']){delete _0x3ca2dc[_0xc464('0x43')]['id'];}return db[_0xc464('0x27')][_0xc464('0x45')]({'where':{'id':_0x3ca2dc[_0xc464('0x41')]['id']}})['then'](handleEntityNotFound(_0x58dc09,null))['then'](saveUpdates(_0x3ca2dc[_0xc464('0x43')],null))[_0xc464('0x21')](respondWithResult(_0x58dc09,null))[_0xc464('0x40')](handleError(_0x58dc09,null));};exports['destroy']=function(_0x2b0926,_0x1a54df){return db[_0xc464('0x27')][_0xc464('0x45')]({'where':{'id':_0x2b0926[_0xc464('0x41')]['id']}})[_0xc464('0x21')](handleEntityNotFound(_0x1a54df,null))['then'](removeEntity(_0x1a54df,null))[_0xc464('0x40')](handleError(_0x1a54df,null));};
\ No newline at end of file
index d116339..cef4c33 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6c73=['api','moment','request-promise','./analyticMetric.attributes','define','AnalyticMetric','analytics_metrics','lodash','../../config/logger'];(function(_0x386df1,_0x12d9d8){var _0x2fc977=function(_0x2e6d6e){while(--_0x2e6d6e){_0x386df1['push'](_0x386df1['shift']());}};_0x2fc977(++_0x12d9d8);}(_0x6c73,0x6a));var _0x36c7=function(_0x2d0500,_0x4412e9){_0x2d0500=_0x2d0500-0x0;var _0x4db83b=_0x6c73[_0x2d0500];return _0x4db83b;};'use strict';var _=require(_0x36c7('0x0'));var util=require('util');var logger=require(_0x36c7('0x1'))(_0x36c7('0x2'));var moment=require(_0x36c7('0x3'));var BPromise=require('bluebird');var rp=require(_0x36c7('0x4'));var attributes=require(_0x36c7('0x5'));module['exports']=function(_0x1ec0bd,_0x5ac01b){return _0x1ec0bd[_0x36c7('0x6')](_0x36c7('0x7'),attributes,{'tableName':_0x36c7('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5811=['AnalyticMetric','analytics_metrics','lodash','util','../../config/logger','moment','request-promise','./analyticMetric.attributes','define'];(function(_0x41f9ff,_0x5c8733){var _0x5e4c4e=function(_0x480f76){while(--_0x480f76){_0x41f9ff['push'](_0x41f9ff['shift']());}};_0x5e4c4e(++_0x5c8733);}(_0x5811,0x1f1));var _0x1581=function(_0x509b2a,_0xf91802){_0x509b2a=_0x509b2a-0x0;var _0x59ff9e=_0x5811[_0x509b2a];return _0x59ff9e;};'use strict';var _=require(_0x1581('0x0'));var util=require(_0x1581('0x1'));var logger=require(_0x1581('0x2'))('api');var moment=require(_0x1581('0x3'));var BPromise=require('bluebird');var rp=require(_0x1581('0x4'));var attributes=require(_0x1581('0x5'));module['exports']=function(_0xed61ff,_0x1f6ba9){return _0xed61ff[_0x1581('0x6')](_0x1581('0x7'),attributes,{'tableName':_0x1581('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6261cb8..390472b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['AnalyticMetric,\x20%s,\x20%s','request\x20sent','debug','AnalyticMetric,\x20%s,\x20%s,\x20%s','error','message','result','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','info'];(function(_0x5f0089,_0x227e2c){var _0x193892=function(_0x24051f){while(--_0x24051f){_0x5f0089['push'](_0x5f0089['shift']());}};_0x193892(++_0x227e2c);}(_0x9957,0x93));var _0x7995=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0x9957[_0x1facfa];return _0x9ec701;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));var BPromise=require(_0x7995('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x7995('0x4'))['db'];var utils=require(_0x7995('0x5'));var logger=require(_0x7995('0x6'))(_0x7995('0x7'));var config=require('../../config/environment');var jayson=require(_0x7995('0x8'));var client=jayson[_0x7995('0x9')][_0x7995('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x219534,_0xbda126,_0x326741){return new BPromise(function(_0x4996ca,_0x465276){return client[_0x7995('0xb')](_0x219534,_0x326741)['then'](function(_0xa2e5f0){logger[_0x7995('0xc')](_0x7995('0xd'),_0xbda126,_0x7995('0xe'));logger[_0x7995('0xf')](_0x7995('0x10'),_0xbda126,_0x7995('0xe'),JSON['stringify'](_0xa2e5f0));if(_0xa2e5f0[_0x7995('0x11')]){if(_0xa2e5f0[_0x7995('0x11')]['code']===0x1f4){logger[_0x7995('0x11')](_0x7995('0xd'),_0xbda126,_0xa2e5f0[_0x7995('0x11')][_0x7995('0x12')]);return _0x465276(_0xa2e5f0[_0x7995('0x11')][_0x7995('0x12')]);}logger[_0x7995('0x11')]('AnalyticMetric,\x20%s,\x20%s',_0xbda126,_0xa2e5f0['error'][_0x7995('0x12')]);return _0x4996ca(_0xa2e5f0[_0x7995('0x11')][_0x7995('0x12')]);}else{logger[_0x7995('0xc')](_0x7995('0xd'),_0xbda126,_0x7995('0xe'));_0x4996ca(_0xa2e5f0[_0x7995('0x13')][_0x7995('0x12')]);}})['catch'](function(_0x2eeacc){logger['error'](_0x7995('0xd'),_0xbda126,_0x2eeacc);_0x465276(_0x2eeacc);});});}
\ No newline at end of file
+var _0xa9e0=['error','message','lodash','util','moment','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','info','AnalyticMetric,\x20%s,\x20%s','request\x20sent','debug','AnalyticMetric,\x20%s,\x20%s,\x20%s'];(function(_0x56d78c,_0x2b65d6){var _0x9a8155=function(_0x3cb3ad){while(--_0x3cb3ad){_0x56d78c['push'](_0x56d78c['shift']());}};_0x9a8155(++_0x2b65d6);}(_0xa9e0,0x123));var _0x0a9e=function(_0x21aec3,_0x5c97e9){_0x21aec3=_0x21aec3-0x0;var _0x288bbc=_0xa9e0[_0x21aec3];return _0x288bbc;};'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 db=require(_0x0a9e('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x0a9e('0x4'))(_0x0a9e('0x5'));var config=require(_0x0a9e('0x6'));var jayson=require(_0x0a9e('0x7'));var client=jayson[_0x0a9e('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x219af0,_0x441e3a,_0x2cc193){return new BPromise(function(_0x5f41ea,_0x503809){return client[_0x0a9e('0x9')](_0x219af0,_0x2cc193)['then'](function(_0x52cace){logger[_0x0a9e('0xa')](_0x0a9e('0xb'),_0x441e3a,_0x0a9e('0xc'));logger[_0x0a9e('0xd')](_0x0a9e('0xe'),_0x441e3a,_0x0a9e('0xc'),JSON['stringify'](_0x52cace));if(_0x52cace['error']){if(_0x52cace['error']['code']===0x1f4){logger[_0x0a9e('0xf')](_0x0a9e('0xb'),_0x441e3a,_0x52cace[_0x0a9e('0xf')][_0x0a9e('0x10')]);return _0x503809(_0x52cace[_0x0a9e('0xf')][_0x0a9e('0x10')]);}logger['error'](_0x0a9e('0xb'),_0x441e3a,_0x52cace[_0x0a9e('0xf')][_0x0a9e('0x10')]);return _0x5f41ea(_0x52cace[_0x0a9e('0xf')][_0x0a9e('0x10')]);}else{logger[_0x0a9e('0xa')]('AnalyticMetric,\x20%s,\x20%s',_0x441e3a,_0x0a9e('0xc'));_0x5f41ea(_0x52cace['result'][_0x0a9e('0x10')]);}})['catch'](function(_0x16033c){logger[_0x0a9e('0xf')]('AnalyticMetric,\x20%s,\x20%s',_0x441e3a,_0x16033c);_0x503809(_0x16033c);});});}
\ No newline at end of file
index f441668..7684809 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd3f4=['./analyticMetric.controller','get','isAuthenticated','index','show','post','create','/:id','update','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x1ac595,_0x5d2081){var _0x455fff=function(_0x3043ee){while(--_0x3043ee){_0x1ac595['push'](_0x1ac595['shift']());}};_0x455fff(++_0x5d2081);}(_0xd3f4,0x187));var _0x4d3f=function(_0x65e76e,_0x4b6fad){_0x65e76e=_0x65e76e-0x0;var _0x5e8ca9=_0xd3f4[_0x65e76e];return _0x5e8ca9;};'use strict';var multer=require(_0x4d3f('0x0'));var util=require(_0x4d3f('0x1'));var path=require(_0x4d3f('0x2'));var express=require(_0x4d3f('0x3'));var router=express[_0x4d3f('0x4')]();var auth=require(_0x4d3f('0x5'));var interaction=require(_0x4d3f('0x6'));var config=require(_0x4d3f('0x7'));var controller=require(_0x4d3f('0x8'));router[_0x4d3f('0x9')]('/',auth[_0x4d3f('0xa')](),controller[_0x4d3f('0xb')]);router[_0x4d3f('0x9')]('/:id',auth['isAuthenticated'](),controller[_0x4d3f('0xc')]);router[_0x4d3f('0xd')]('/',auth[_0x4d3f('0xa')](),controller[_0x4d3f('0xe')]);router['put'](_0x4d3f('0xf'),auth['isAuthenticated'](),controller[_0x4d3f('0x10')]);router['delete'](_0x4d3f('0xf'),auth[_0x4d3f('0xa')](),controller[_0x4d3f('0x11')]);module[_0x4d3f('0x12')]=router;
\ No newline at end of file
+var _0xd8a1=['get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../config/environment'];(function(_0x2e5cfd,_0x3e18a1){var _0x171636=function(_0xdf3162){while(--_0xdf3162){_0x2e5cfd['push'](_0x2e5cfd['shift']());}};_0x171636(++_0x3e18a1);}(_0xd8a1,0x116));var _0x1d8a=function(_0xb54e91,_0x5172fa){_0xb54e91=_0xb54e91-0x0;var _0x3725b6=_0xd8a1[_0xb54e91];return _0x3725b6;};'use strict';var multer=require(_0x1d8a('0x0'));var util=require(_0x1d8a('0x1'));var path=require(_0x1d8a('0x2'));var express=require(_0x1d8a('0x3'));var router=express[_0x1d8a('0x4')]();var auth=require(_0x1d8a('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x1d8a('0x6'));var controller=require('./analyticMetric.controller');router[_0x1d8a('0x7')]('/',auth[_0x1d8a('0x8')](),controller[_0x1d8a('0x9')]);router[_0x1d8a('0x7')](_0x1d8a('0xa'),auth['isAuthenticated'](),controller[_0x1d8a('0xb')]);router[_0x1d8a('0xc')]('/',auth[_0x1d8a('0x8')](),controller[_0x1d8a('0xd')]);router[_0x1d8a('0xe')]('/:id',auth[_0x1d8a('0x8')](),controller[_0x1d8a('0xf')]);router[_0x1d8a('0x10')](_0x1d8a('0xa'),auth[_0x1d8a('0x8')](),controller[_0x1d8a('0x11')]);module[_0x1d8a('0x12')]=router;
\ No newline at end of file
index 70c80e0..0812284 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb854=['exports','TEXT','sequelize'];(function(_0x5b27e8,_0x180c40){var _0x60c039=function(_0x9457d8){while(--_0x9457d8){_0x5b27e8['push'](_0x5b27e8['shift']());}};_0x60c039(++_0x180c40);}(_0xb854,0x6e));var _0x4b85=function(_0x1f53bf,_0x16774d){_0x1f53bf=_0x1f53bf-0x0;var _0x4674b4=_0xb854[_0x1f53bf];return _0x4674b4;};'use strict';var Sequelize=require(_0x4b85('0x0'));module[_0x4b85('0x1')]={'tree':{'type':Sequelize[_0x4b85('0x2')],'allowNull':![]}};
\ No newline at end of file
+var _0xcb0d=['exports','sequelize'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0xcb0d,0x1a5));var _0xdcb0=function(_0x129f74,_0x3d64d8){_0x129f74=_0x129f74-0x0;var _0x1cf683=_0xcb0d[_0x129f74];return _0x1cf683;};'use strict';var Sequelize=require(_0xdcb0('0x0'));module[_0xdcb0('0x1')]={'tree':{'type':Sequelize['TEXT'],'allowNull':![]}};
\ No newline at end of file
index 3630210..ad5396b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd589=['moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','save','update','destroy','error','stack','name','index','rawAttributes','model','keys','query','dateEnd','dateStart','filters','intersection','attributes','fields','length','hasOwnProperty','sort','where','pick','day','add','merge','filter','map','options','AnalyticTreeReport','then','includeAll','include','findAll','rows','catch','show','find','body','params','fast-json-patch','request-promise'];(function(_0x49301a,_0x2c99c2){var _0x5d895a=function(_0x5c34c8){while(--_0x5c34c8){_0x49301a['push'](_0x49301a['shift']());}};_0x5d895a(++_0x2c99c2);}(_0xd589,0x11a));var _0x9d58=function(_0x4cbdb6,_0xdeb873){_0x4cbdb6=_0x4cbdb6-0x0;var _0x447e6e=_0xd589[_0x4cbdb6];return _0x447e6e;};'use strict';var jsonpatch=require(_0x9d58('0x0'));var rp=require(_0x9d58('0x1'));var moment=require(_0x9d58('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x9d58('0x3'));var util=require(_0x9d58('0x4'));var path=require(_0x9d58('0x5'));var sox=require(_0x9d58('0x6'));var csv=require(_0x9d58('0x7'));var ejs=require(_0x9d58('0x8'));var fs=require('fs');var _=require(_0x9d58('0x9'));var squel=require(_0x9d58('0xa'));var crypto=require(_0x9d58('0xb'));var jsforce=require(_0x9d58('0xc'));var deskjs=require(_0x9d58('0xd'));var toCsv=require('to-csv');var querystring=require(_0x9d58('0xe'));var Papa=require(_0x9d58('0xf'));var qs=require(_0x9d58('0x10'));var logger=require('../../config/logger')(_0x9d58('0x11'));var utils=require(_0x9d58('0x12'));var config=require(_0x9d58('0x13'));var db=require(_0x9d58('0x14'))['db'];function respondWithStatusCode(_0x569259,_0x255b0c){_0x255b0c=_0x255b0c||0xcc;return function(_0x3ab234){if(_0x3ab234){return _0x569259[_0x9d58('0x15')](_0x255b0c);}return _0x569259[_0x9d58('0x16')](_0x255b0c)[_0x9d58('0x17')]();};}function respondWithResult(_0x46cd06,_0x3625fc){_0x3625fc=_0x3625fc||0xc8;return function(_0x3a0949){if(_0x3a0949){return _0x46cd06[_0x9d58('0x16')](_0x3625fc)['json'](_0x3a0949);}};}function respondWithFilteredResult(_0x170dc,_0x173b1c){return function(_0x293e94){if(_0x293e94){var _0x1200c4=_0x293e94[_0x9d58('0x18')],_0x586aad=_0x173b1c[_0x9d58('0x19')],_0x4b7551=_0x173b1c[_0x9d58('0x19')]+_0x173b1c[_0x9d58('0x1a')],_0x10d3a1;if(_0x4b7551>=_0x1200c4){_0x4b7551=_0x1200c4;_0x10d3a1=0xc8;}else{_0x10d3a1=0xce;}_0x170dc['status'](_0x10d3a1);return _0x170dc[_0x9d58('0x1b')](_0x9d58('0x1c'),_0x586aad+'-'+_0x4b7551+'/'+_0x1200c4)[_0x9d58('0x1d')](_0x293e94);}return null;};}function patchUpdates(_0xd78331){return function(_0x215141){try{jsonpatch[_0x9d58('0x1e')](_0x215141,_0xd78331,!![]);}catch(_0x2fa6eb){return BPromise[_0x9d58('0x1f')](_0x2fa6eb);}return _0x215141[_0x9d58('0x20')]();};}function saveUpdates(_0xccb1c2,_0x179894){return function(_0x3a453e){if(_0x3a453e){return _0x3a453e[_0x9d58('0x21')](_0xccb1c2)['then'](function(_0x326518){return _0x326518;});}return null;};}function removeEntity(_0x26bca8,_0x59891b){return function(_0x56c31c){if(_0x56c31c){return _0x56c31c[_0x9d58('0x22')]()['then'](function(){_0x26bca8[_0x9d58('0x16')](0xcc)[_0x9d58('0x17')]();});}};}function handleEntityNotFound(_0x27b039,_0x559c42){return function(_0x5ce88a){if(!_0x5ce88a){_0x27b039[_0x9d58('0x15')](0x194);}return _0x5ce88a;};}function handleError(_0x34d400,_0x15410e){_0x15410e=_0x15410e||0x1f4;return function(_0x17d591){logger[_0x9d58('0x23')](_0x17d591[_0x9d58('0x24')]);if(_0x17d591['name']){delete _0x17d591[_0x9d58('0x25')];}_0x34d400[_0x9d58('0x16')](_0x15410e)['send'](_0x17d591);};}exports[_0x9d58('0x26')]=function(_0x554825,_0x4c40b3){var _0x3c171f={},_0x280668={},_0x2b2981={'count':0x0,'rows':[]};var _0x316f7c=db['AnalyticTreeReport'][_0x9d58('0x27')];_0x280668[_0x9d58('0x28')]=_[_0x9d58('0x29')](_0x316f7c);var _0x14bee2={'dateStart':_0x554825[_0x9d58('0x2a')]['dateStart'],'dateEnd':_0x554825['query'][_0x9d58('0x2b')]};delete _0x554825[_0x9d58('0x2a')][_0x9d58('0x2c')];delete _0x554825[_0x9d58('0x2a')][_0x9d58('0x2b')];_0x280668[_0x9d58('0x2a')]=_[_0x9d58('0x29')](_0x554825[_0x9d58('0x2a')]);_0x280668[_0x9d58('0x2d')]=_[_0x9d58('0x2e')](_0x280668[_0x9d58('0x28')],_0x280668[_0x9d58('0x2a')]);_0x3c171f[_0x9d58('0x2f')]=_['intersection'](_0x280668[_0x9d58('0x28')],qs[_0x9d58('0x30')](_0x554825[_0x9d58('0x2a')][_0x9d58('0x30')]));_0x3c171f['attributes']=_0x3c171f[_0x9d58('0x2f')][_0x9d58('0x31')]?_0x3c171f[_0x9d58('0x2f')]:_0x280668['model'];if(!_0x554825[_0x9d58('0x2a')][_0x9d58('0x32')]('nolimit')){_0x3c171f['limit']=qs[_0x9d58('0x1a')](_0x554825[_0x9d58('0x2a')]['limit']);_0x3c171f[_0x9d58('0x19')]=qs[_0x9d58('0x19')](_0x554825[_0x9d58('0x2a')][_0x9d58('0x19')]);}_0x3c171f['order']=qs[_0x9d58('0x33')](_0x554825['query'][_0x9d58('0x33')]);_0x3c171f[_0x9d58('0x34')]=qs[_0x9d58('0x2d')](_[_0x9d58('0x35')](_0x554825['query'],_0x280668[_0x9d58('0x2d')]));if(_0x14bee2['dateStart']){if(_0x14bee2['dateEnd']){_0x14bee2['dateEnd']=moment(_0x14bee2['dateEnd'])['add'](0x1,_0x9d58('0x36'));}else{_0x14bee2[_0x9d58('0x2b')]=moment(_0x14bee2[_0x9d58('0x2c')])[_0x9d58('0x37')](0x1,_0x9d58('0x36'));}_[_0x9d58('0x38')](_0x3c171f[_0x9d58('0x34')],{'createdAt':{'$gte':_0x14bee2[_0x9d58('0x2c')],'$lte':_0x14bee2['dateEnd']}});}if(_0x554825[_0x9d58('0x2a')][_0x9d58('0x39')]){_0x3c171f[_0x9d58('0x34')]=_[_0x9d58('0x38')](_0x3c171f[_0x9d58('0x34')],{'$or':_[_0x9d58('0x3a')](_0x3c171f[_0x9d58('0x2f')],function(_0x5344ab){var _0xd4bd77={};_0xd4bd77[_0x5344ab]={'$like':'%'+_0x554825['query']['filter']+'%'};return _0xd4bd77;})});}_0x3c171f=_['merge']({},_0x3c171f,_0x554825[_0x9d58('0x3b')]);var _0x2b5dc7={'where':_0x3c171f[_0x9d58('0x34')]};return db[_0x9d58('0x3c')][_0x9d58('0x18')](_0x2b5dc7)[_0x9d58('0x3d')](function(_0x21d026){_0x2b2981[_0x9d58('0x18')]=_0x21d026;if(_0x554825['query'][_0x9d58('0x3e')]){_0x3c171f[_0x9d58('0x3f')]=[{'all':!![]}];}return db[_0x9d58('0x3c')][_0x9d58('0x40')](_0x3c171f);})[_0x9d58('0x3d')](function(_0x269e88){_0x2b2981[_0x9d58('0x41')]=_0x269e88;return _0x2b2981;})[_0x9d58('0x3d')](respondWithFilteredResult(_0x4c40b3,_0x3c171f))[_0x9d58('0x42')](handleError(_0x4c40b3,null));};exports[_0x9d58('0x43')]=function(_0x2bc3c1,_0x21b97e){var _0x14da9e={'raw':!![],'where':{'id':_0x2bc3c1['params']['id']}},_0x3e5fad={};_0x3e5fad['model']=_['keys'](db['AnalyticTreeReport'][_0x9d58('0x27')]);_0x3e5fad[_0x9d58('0x2a')]=_['keys'](_0x2bc3c1[_0x9d58('0x2a')]);_0x3e5fad[_0x9d58('0x2d')]=_[_0x9d58('0x2e')](_0x3e5fad['model'],_0x3e5fad[_0x9d58('0x2a')]);_0x14da9e['attributes']=_[_0x9d58('0x2e')](_0x3e5fad[_0x9d58('0x28')],qs[_0x9d58('0x30')](_0x2bc3c1[_0x9d58('0x2a')]['fields']));_0x14da9e[_0x9d58('0x2f')]=_0x14da9e[_0x9d58('0x2f')][_0x9d58('0x31')]?_0x14da9e[_0x9d58('0x2f')]:_0x3e5fad[_0x9d58('0x28')];if(_0x2bc3c1[_0x9d58('0x2a')][_0x9d58('0x3e')]){_0x14da9e[_0x9d58('0x3f')]=[{'all':!![]}];}_0x14da9e=_[_0x9d58('0x38')]({},_0x14da9e,_0x2bc3c1[_0x9d58('0x3b')]);return db[_0x9d58('0x3c')][_0x9d58('0x44')](_0x14da9e)[_0x9d58('0x3d')](handleEntityNotFound(_0x21b97e,null))[_0x9d58('0x3d')](respondWithResult(_0x21b97e,null))[_0x9d58('0x42')](handleError(_0x21b97e,null));};exports['create']=function(_0x12063f,_0xd14fb4){return db[_0x9d58('0x3c')]['create'](_0x12063f[_0x9d58('0x45')],{})['then'](respondWithResult(_0xd14fb4,0xc9))[_0x9d58('0x42')](handleError(_0xd14fb4,null));};exports['update']=function(_0x4d1629,_0x2d03a){if(_0x4d1629[_0x9d58('0x45')]['id']){delete _0x4d1629[_0x9d58('0x45')]['id'];}return db['AnalyticTreeReport']['find']({'where':{'id':_0x4d1629[_0x9d58('0x46')]['id']}})[_0x9d58('0x3d')](handleEntityNotFound(_0x2d03a,null))[_0x9d58('0x3d')](saveUpdates(_0x4d1629[_0x9d58('0x45')],null))[_0x9d58('0x3d')](respondWithResult(_0x2d03a,null))['catch'](handleError(_0x2d03a,null));};exports[_0x9d58('0x22')]=function(_0x472ef4,_0xa8983a){return db['AnalyticTreeReport'][_0x9d58('0x44')]({'where':{'id':_0x472ef4[_0x9d58('0x46')]['id']}})[_0x9d58('0x3d')](handleEntityNotFound(_0xa8983a,null))[_0x9d58('0x3d')](removeEntity(_0xa8983a,null))[_0x9d58('0x42')](handleError(_0xa8983a,null));};
\ No newline at end of file
+var _0x9710=['lodash','squel','crypto','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','end','status','json','count','offset','limit','Content-Range','apply','save','update','then','error','stack','send','AnalyticTreeReport','rawAttributes','dateStart','query','dateEnd','keys','filters','intersection','attributes','model','fields','hasOwnProperty','order','sort','where','pick','add','day','filter','merge','options','includeAll','findAll','catch','show','params','length','include','find','create','body','destroy','fast-json-patch','moment','bluebird','sox','to-csv'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x9710,0x122));var _0x0971=function(_0x468d4b,_0x4c84fc){_0x468d4b=_0x468d4b-0x0;var _0x3381c1=_0x9710[_0x468d4b];return _0x3381c1;};'use strict';var jsonpatch=require(_0x0971('0x0'));var rp=require('request-promise');var moment=require(_0x0971('0x1'));var BPromise=require(_0x0971('0x2'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0x0971('0x3'));var csv=require(_0x0971('0x4'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x0971('0x5'));var squel=require(_0x0971('0x6'));var crypto=require(_0x0971('0x7'));var jsforce=require(_0x0971('0x8'));var deskjs=require(_0x0971('0x9'));var toCsv=require(_0x0971('0x4'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0971('0xa'));var logger=require('../../config/logger')('api');var utils=require(_0x0971('0xb'));var config=require(_0x0971('0xc'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x20a861,_0x468f39){_0x468f39=_0x468f39||0xcc;return function(_0x2d8260){if(_0x2d8260){return _0x20a861['sendStatus'](_0x468f39);}return _0x20a861['status'](_0x468f39)[_0x0971('0xd')]();};}function respondWithResult(_0x53ca17,_0x492c29){_0x492c29=_0x492c29||0xc8;return function(_0x5803f6){if(_0x5803f6){return _0x53ca17[_0x0971('0xe')](_0x492c29)[_0x0971('0xf')](_0x5803f6);}};}function respondWithFilteredResult(_0x20b72f,_0x53e57c){return function(_0x4e2313){if(_0x4e2313){var _0xf35a56=_0x4e2313[_0x0971('0x10')],_0xa45047=_0x53e57c[_0x0971('0x11')],_0x327af7=_0x53e57c[_0x0971('0x11')]+_0x53e57c[_0x0971('0x12')],_0x4a1814;if(_0x327af7>=_0xf35a56){_0x327af7=_0xf35a56;_0x4a1814=0xc8;}else{_0x4a1814=0xce;}_0x20b72f[_0x0971('0xe')](_0x4a1814);return _0x20b72f['set'](_0x0971('0x13'),_0xa45047+'-'+_0x327af7+'/'+_0xf35a56)['json'](_0x4e2313);}return null;};}function patchUpdates(_0x136311){return function(_0x45bddc){try{jsonpatch[_0x0971('0x14')](_0x45bddc,_0x136311,!![]);}catch(_0x442fad){return BPromise['reject'](_0x442fad);}return _0x45bddc[_0x0971('0x15')]();};}function saveUpdates(_0x509710,_0x27d505){return function(_0x2f082e){if(_0x2f082e){return _0x2f082e[_0x0971('0x16')](_0x509710)['then'](function(_0x5c57a9){return _0x5c57a9;});}return null;};}function removeEntity(_0x3e821d,_0x3e2259){return function(_0x46a771){if(_0x46a771){return _0x46a771['destroy']()[_0x0971('0x17')](function(){_0x3e821d['status'](0xcc)[_0x0971('0xd')]();});}};}function handleEntityNotFound(_0x1ba36a,_0x5d766d){return function(_0x136c97){if(!_0x136c97){_0x1ba36a['sendStatus'](0x194);}return _0x136c97;};}function handleError(_0x458262,_0x40c4f7){_0x40c4f7=_0x40c4f7||0x1f4;return function(_0x46de5b){logger[_0x0971('0x18')](_0x46de5b[_0x0971('0x19')]);if(_0x46de5b['name']){delete _0x46de5b['name'];}_0x458262[_0x0971('0xe')](_0x40c4f7)[_0x0971('0x1a')](_0x46de5b);};}exports['index']=function(_0x41886c,_0x301bf0){var _0x5dcdd5={},_0x38da61={},_0x1925e1={'count':0x0,'rows':[]};var _0x198c38=db[_0x0971('0x1b')][_0x0971('0x1c')];_0x38da61['model']=_['keys'](_0x198c38);var _0x400f77={'dateStart':_0x41886c['query'][_0x0971('0x1d')],'dateEnd':_0x41886c[_0x0971('0x1e')][_0x0971('0x1f')]};delete _0x41886c[_0x0971('0x1e')]['dateStart'];delete _0x41886c[_0x0971('0x1e')][_0x0971('0x1f')];_0x38da61[_0x0971('0x1e')]=_[_0x0971('0x20')](_0x41886c['query']);_0x38da61[_0x0971('0x21')]=_[_0x0971('0x22')](_0x38da61['model'],_0x38da61[_0x0971('0x1e')]);_0x5dcdd5[_0x0971('0x23')]=_[_0x0971('0x22')](_0x38da61[_0x0971('0x24')],qs[_0x0971('0x25')](_0x41886c[_0x0971('0x1e')][_0x0971('0x25')]));_0x5dcdd5[_0x0971('0x23')]=_0x5dcdd5[_0x0971('0x23')]['length']?_0x5dcdd5['attributes']:_0x38da61[_0x0971('0x24')];if(!_0x41886c[_0x0971('0x1e')][_0x0971('0x26')]('nolimit')){_0x5dcdd5[_0x0971('0x12')]=qs[_0x0971('0x12')](_0x41886c[_0x0971('0x1e')]['limit']);_0x5dcdd5[_0x0971('0x11')]=qs[_0x0971('0x11')](_0x41886c[_0x0971('0x1e')][_0x0971('0x11')]);}_0x5dcdd5[_0x0971('0x27')]=qs['sort'](_0x41886c[_0x0971('0x1e')][_0x0971('0x28')]);_0x5dcdd5[_0x0971('0x29')]=qs[_0x0971('0x21')](_[_0x0971('0x2a')](_0x41886c[_0x0971('0x1e')],_0x38da61[_0x0971('0x21')]));if(_0x400f77['dateStart']){if(_0x400f77[_0x0971('0x1f')]){_0x400f77[_0x0971('0x1f')]=moment(_0x400f77[_0x0971('0x1f')])[_0x0971('0x2b')](0x1,_0x0971('0x2c'));}else{_0x400f77['dateEnd']=moment(_0x400f77[_0x0971('0x1d')])['add'](0x1,_0x0971('0x2c'));}_['merge'](_0x5dcdd5['where'],{'createdAt':{'$gte':_0x400f77['dateStart'],'$lte':_0x400f77[_0x0971('0x1f')]}});}if(_0x41886c[_0x0971('0x1e')][_0x0971('0x2d')]){_0x5dcdd5['where']=_[_0x0971('0x2e')](_0x5dcdd5[_0x0971('0x29')],{'$or':_['map'](_0x5dcdd5['attributes'],function(_0x24f89c){var _0x14193e={};_0x14193e[_0x24f89c]={'$like':'%'+_0x41886c[_0x0971('0x1e')][_0x0971('0x2d')]+'%'};return _0x14193e;})});}_0x5dcdd5=_[_0x0971('0x2e')]({},_0x5dcdd5,_0x41886c[_0x0971('0x2f')]);var _0x351c44={'where':_0x5dcdd5[_0x0971('0x29')]};return db[_0x0971('0x1b')][_0x0971('0x10')](_0x351c44)['then'](function(_0x12e9a3){_0x1925e1[_0x0971('0x10')]=_0x12e9a3;if(_0x41886c['query'][_0x0971('0x30')]){_0x5dcdd5['include']=[{'all':!![]}];}return db[_0x0971('0x1b')][_0x0971('0x31')](_0x5dcdd5);})[_0x0971('0x17')](function(_0x3212aa){_0x1925e1['rows']=_0x3212aa;return _0x1925e1;})[_0x0971('0x17')](respondWithFilteredResult(_0x301bf0,_0x5dcdd5))[_0x0971('0x32')](handleError(_0x301bf0,null));};exports[_0x0971('0x33')]=function(_0x596787,_0x4fd9de){var _0x1849b6={'raw':!![],'where':{'id':_0x596787[_0x0971('0x34')]['id']}},_0x31edbc={};_0x31edbc[_0x0971('0x24')]=_[_0x0971('0x20')](db[_0x0971('0x1b')][_0x0971('0x1c')]);_0x31edbc[_0x0971('0x1e')]=_[_0x0971('0x20')](_0x596787[_0x0971('0x1e')]);_0x31edbc[_0x0971('0x21')]=_[_0x0971('0x22')](_0x31edbc[_0x0971('0x24')],_0x31edbc[_0x0971('0x1e')]);_0x1849b6[_0x0971('0x23')]=_[_0x0971('0x22')](_0x31edbc[_0x0971('0x24')],qs[_0x0971('0x25')](_0x596787[_0x0971('0x1e')][_0x0971('0x25')]));_0x1849b6['attributes']=_0x1849b6[_0x0971('0x23')][_0x0971('0x35')]?_0x1849b6[_0x0971('0x23')]:_0x31edbc[_0x0971('0x24')];if(_0x596787[_0x0971('0x1e')][_0x0971('0x30')]){_0x1849b6[_0x0971('0x36')]=[{'all':!![]}];}_0x1849b6=_[_0x0971('0x2e')]({},_0x1849b6,_0x596787[_0x0971('0x2f')]);return db[_0x0971('0x1b')][_0x0971('0x37')](_0x1849b6)[_0x0971('0x17')](handleEntityNotFound(_0x4fd9de,null))[_0x0971('0x17')](respondWithResult(_0x4fd9de,null))['catch'](handleError(_0x4fd9de,null));};exports[_0x0971('0x38')]=function(_0x3caff,_0x470b3b){return db[_0x0971('0x1b')][_0x0971('0x38')](_0x3caff[_0x0971('0x39')],{})[_0x0971('0x17')](respondWithResult(_0x470b3b,0xc9))['catch'](handleError(_0x470b3b,null));};exports[_0x0971('0x16')]=function(_0x319490,_0x11f9d3){if(_0x319490[_0x0971('0x39')]['id']){delete _0x319490['body']['id'];}return db[_0x0971('0x1b')][_0x0971('0x37')]({'where':{'id':_0x319490[_0x0971('0x34')]['id']}})[_0x0971('0x17')](handleEntityNotFound(_0x11f9d3,null))[_0x0971('0x17')](saveUpdates(_0x319490[_0x0971('0x39')],null))[_0x0971('0x17')](respondWithResult(_0x11f9d3,null))[_0x0971('0x32')](handleError(_0x11f9d3,null));};exports[_0x0971('0x3a')]=function(_0x32a548,_0x4eca61){return db['AnalyticTreeReport'][_0x0971('0x37')]({'where':{'id':_0x32a548[_0x0971('0x34')]['id']}})[_0x0971('0x17')](handleEntityNotFound(_0x4eca61,null))[_0x0971('0x17')](removeEntity(_0x4eca61,null))['catch'](handleError(_0x4eca61,null));};
\ No newline at end of file
index 2ed29e6..8febd4c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa2f=['analytics_report_trees','lodash','util','../../config/logger','moment','request-promise','./analyticTreeReport.attributes','define','AnalyticTreeReport'];(function(_0x5dc3d1,_0x1c7d3d){var _0x3334d7=function(_0x4b3706){while(--_0x4b3706){_0x5dc3d1['push'](_0x5dc3d1['shift']());}};_0x3334d7(++_0x1c7d3d);}(_0xaa2f,0x13c));var _0xfaa2=function(_0x279368,_0x41c002){_0x279368=_0x279368-0x0;var _0x40b6d0=_0xaa2f[_0x279368];return _0x40b6d0;};'use strict';var _=require(_0xfaa2('0x0'));var util=require(_0xfaa2('0x1'));var logger=require(_0xfaa2('0x2'))('api');var moment=require(_0xfaa2('0x3'));var BPromise=require('bluebird');var rp=require(_0xfaa2('0x4'));var attributes=require(_0xfaa2('0x5'));module['exports']=function(_0x4242f2,_0x37aa9c){return _0x4242f2[_0xfaa2('0x6')](_0xfaa2('0x7'),attributes,{'tableName':_0xfaa2('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf271=['moment','bluebird','request-promise','./analyticTreeReport.attributes','define','AnalyticTreeReport','analytics_report_trees','lodash','api'];(function(_0x369403,_0x3ddc8f){var _0x28af89=function(_0x541f1e){while(--_0x541f1e){_0x369403['push'](_0x369403['shift']());}};_0x28af89(++_0x3ddc8f);}(_0xf271,0x130));var _0x1f27=function(_0xf8a7e5,_0x1930b8){_0xf8a7e5=_0xf8a7e5-0x0;var _0x5aa004=_0xf271[_0xf8a7e5];return _0x5aa004;};'use strict';var _=require(_0x1f27('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x1f27('0x1'));var moment=require(_0x1f27('0x2'));var BPromise=require(_0x1f27('0x3'));var rp=require(_0x1f27('0x4'));var attributes=require(_0x1f27('0x5'));module['exports']=function(_0x3d04c7,_0x4461d3){return _0x3d04c7[_0x1f27('0x6')](_0x1f27('0x7'),attributes,{'tableName':_0x1f27('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2276684..a1cf018 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa79a=['request\x20sent','debug','AnalyticTreeReport,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util','moment','bluebird','../../config/utils','../../config/logger','rpc','../../config/environment','http','request','then','info','AnalyticTreeReport,\x20%s,\x20%s'];(function(_0x968f4d,_0x5f1499){var _0x1338b6=function(_0x398a30){while(--_0x398a30){_0x968f4d['push'](_0x968f4d['shift']());}};_0x1338b6(++_0x5f1499);}(_0xa79a,0x12e));var _0xaa79=function(_0x9154ee,_0x5f2a85){_0x9154ee=_0x9154ee-0x0;var _0x24c414=_0xa79a[_0x9154ee];return _0x24c414;};'use strict';var _=require(_0xaa79('0x0'));var util=require(_0xaa79('0x1'));var moment=require(_0xaa79('0x2'));var BPromise=require(_0xaa79('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xaa79('0x4'));var logger=require(_0xaa79('0x5'))(_0xaa79('0x6'));var config=require(_0xaa79('0x7'));var jayson=require('jayson/promise');var client=jayson['client'][_0xaa79('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x1e4d0f,_0x38184d,_0x343ba4){return new BPromise(function(_0x368a4c,_0x287fe3){return client[_0xaa79('0x9')](_0x1e4d0f,_0x343ba4)[_0xaa79('0xa')](function(_0xd0e620){logger[_0xaa79('0xb')](_0xaa79('0xc'),_0x38184d,_0xaa79('0xd'));logger[_0xaa79('0xe')](_0xaa79('0xf'),_0x38184d,'request\x20sent',JSON[_0xaa79('0x10')](_0xd0e620));if(_0xd0e620['error']){if(_0xd0e620[_0xaa79('0x11')]['code']===0x1f4){logger[_0xaa79('0x11')](_0xaa79('0xc'),_0x38184d,_0xd0e620[_0xaa79('0x11')][_0xaa79('0x12')]);return _0x287fe3(_0xd0e620['error'][_0xaa79('0x12')]);}logger[_0xaa79('0x11')]('AnalyticTreeReport,\x20%s,\x20%s',_0x38184d,_0xd0e620[_0xaa79('0x11')]['message']);return _0x368a4c(_0xd0e620[_0xaa79('0x11')][_0xaa79('0x12')]);}else{logger[_0xaa79('0xb')](_0xaa79('0xc'),_0x38184d,_0xaa79('0xd'));_0x368a4c(_0xd0e620[_0xaa79('0x13')][_0xaa79('0x12')]);}})[_0xaa79('0x14')](function(_0x4de90e){logger[_0xaa79('0x11')]('AnalyticTreeReport,\x20%s,\x20%s',_0x38184d,_0x4de90e);_0x287fe3(_0x4de90e);});});}
\ No newline at end of file
+var _0x38cb=['request','then','AnalyticTreeReport,\x20%s,\x20%s','request\x20sent','debug','error','code','message','info','result','catch','lodash','util','bluebird','../../config/utils','rpc','client','http'];(function(_0x2803ab,_0x1c33f2){var _0x3d6e8e=function(_0x8a86f1){while(--_0x8a86f1){_0x2803ab['push'](_0x2803ab['shift']());}};_0x3d6e8e(++_0x1c33f2);}(_0x38cb,0xf5));var _0xb38c=function(_0x29b609,_0x19d388){_0x29b609=_0x29b609-0x0;var _0x54c952=_0x38cb[_0x29b609];return _0x54c952;};'use strict';var _=require(_0xb38c('0x0'));var util=require(_0xb38c('0x1'));var moment=require('moment');var BPromise=require(_0xb38c('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xb38c('0x3'));var logger=require('../../config/logger')(_0xb38c('0x4'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xb38c('0x5')][_0xb38c('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x1e95aa,_0x2efdfd,_0x216d4a){return new BPromise(function(_0x135ec6,_0x3c5f8e){return client[_0xb38c('0x7')](_0x1e95aa,_0x216d4a)[_0xb38c('0x8')](function(_0x30bbba){logger['info'](_0xb38c('0x9'),_0x2efdfd,_0xb38c('0xa'));logger[_0xb38c('0xb')]('AnalyticTreeReport,\x20%s,\x20%s,\x20%s',_0x2efdfd,_0xb38c('0xa'),JSON['stringify'](_0x30bbba));if(_0x30bbba[_0xb38c('0xc')]){if(_0x30bbba[_0xb38c('0xc')][_0xb38c('0xd')]===0x1f4){logger[_0xb38c('0xc')](_0xb38c('0x9'),_0x2efdfd,_0x30bbba[_0xb38c('0xc')][_0xb38c('0xe')]);return _0x3c5f8e(_0x30bbba[_0xb38c('0xc')]['message']);}logger['error'](_0xb38c('0x9'),_0x2efdfd,_0x30bbba[_0xb38c('0xc')]['message']);return _0x135ec6(_0x30bbba[_0xb38c('0xc')]['message']);}else{logger[_0xb38c('0xf')](_0xb38c('0x9'),_0x2efdfd,'request\x20sent');_0x135ec6(_0x30bbba[_0xb38c('0x10')][_0xb38c('0xe')]);}})[_0xb38c('0x11')](function(_0x4140e2){logger[_0xb38c('0xc')](_0xb38c('0x9'),_0x2efdfd,_0x4140e2);_0x3c5f8e(_0x4140e2);});});}
\ No newline at end of file
index 5b32a33..ad07882 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x982b=['get','isAuthenticated','/:id','show','post','create','put','update','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticTreeReport.controller'];(function(_0xbb091,_0x3fe7ee){var _0x467a04=function(_0x3a978d){while(--_0x3a978d){_0xbb091['push'](_0xbb091['shift']());}};_0x467a04(++_0x3fe7ee);}(_0x982b,0x69));var _0xb982=function(_0x3e58f2,_0xb41915){_0x3e58f2=_0x3e58f2-0x0;var _0x3a3169=_0x982b[_0x3e58f2];return _0x3a3169;};'use strict';var multer=require(_0xb982('0x0'));var util=require(_0xb982('0x1'));var path=require(_0xb982('0x2'));var express=require(_0xb982('0x3'));var router=express[_0xb982('0x4')]();var auth=require(_0xb982('0x5'));var interaction=require(_0xb982('0x6'));var config=require(_0xb982('0x7'));var controller=require(_0xb982('0x8'));router[_0xb982('0x9')]('/',auth[_0xb982('0xa')](),controller['index']);router[_0xb982('0x9')](_0xb982('0xb'),auth['isAuthenticated'](),controller[_0xb982('0xc')]);router[_0xb982('0xd')]('/',auth[_0xb982('0xa')](),controller[_0xb982('0xe')]);router[_0xb982('0xf')]('/:id',auth[_0xb982('0xa')](),controller[_0xb982('0x10')]);router['delete'](_0xb982('0xb'),auth['isAuthenticated'](),controller[_0xb982('0x11')]);module[_0xb982('0x12')]=router;
\ No newline at end of file
+var _0xbaed=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticTreeReport.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','delete','exports','multer','util','path','express'];(function(_0xd93b26,_0x12bbf2){var _0x25f668=function(_0x133ff7){while(--_0x133ff7){_0xd93b26['push'](_0xd93b26['shift']());}};_0x25f668(++_0x12bbf2);}(_0xbaed,0x164));var _0xdbae=function(_0x4a5494,_0x3ad336){_0x4a5494=_0x4a5494-0x0;var _0x57cbb5=_0xbaed[_0x4a5494];return _0x57cbb5;};'use strict';var multer=require(_0xdbae('0x0'));var util=require(_0xdbae('0x1'));var path=require(_0xdbae('0x2'));var express=require(_0xdbae('0x3'));var router=express[_0xdbae('0x4')]();var auth=require(_0xdbae('0x5'));var interaction=require(_0xdbae('0x6'));var config=require(_0xdbae('0x7'));var controller=require(_0xdbae('0x8'));router[_0xdbae('0x9')]('/',auth[_0xdbae('0xa')](),controller[_0xdbae('0xb')]);router[_0xdbae('0x9')](_0xdbae('0xc'),auth[_0xdbae('0xa')](),controller[_0xdbae('0xd')]);router[_0xdbae('0xe')]('/',auth['isAuthenticated'](),controller[_0xdbae('0xf')]);router[_0xdbae('0x10')](_0xdbae('0xc'),auth[_0xdbae('0xa')](),controller[_0xdbae('0x11')]);router[_0xdbae('0x12')](_0xdbae('0xc'),auth['isAuthenticated'](),controller['destroy']);module[_0xdbae('0x13')]=router;
\ No newline at end of file
index 4dbc3f4..8078c0e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a67=['exports','STRING','sequelize'];(function(_0x4702ee,_0xaf6a45){var _0x62ca7d=function(_0x5b3af7){while(--_0x5b3af7){_0x4702ee['push'](_0x4702ee['shift']());}};_0x62ca7d(++_0xaf6a45);}(_0x0a67,0x1e5));var _0x70a6=function(_0x2c8118,_0x15932a){_0x2c8118=_0x2c8118-0x0;var _0x2fcb8f=_0x0a67[_0x2c8118];return _0x2fcb8f;};'use strict';var Sequelize=require(_0x70a6('0x0'));module[_0x70a6('0x1')]={'name':{'type':Sequelize[_0x70a6('0x2')]},'basename':{'type':Sequelize[_0x70a6('0x2')]},'type':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x1f22=['STRING','sequelize'];(function(_0x27af45,_0x1b57aa){var _0x18df21=function(_0x4b7679){while(--_0x4b7679){_0x27af45['push'](_0x27af45['shift']());}};_0x18df21(++_0x1b57aa);}(_0x1f22,0x1e7));var _0x21f2=function(_0x48fffd,_0x886b8f){_0x48fffd=_0x48fffd-0x0;var _0x3c403c=_0x1f22[_0x48fffd];return _0x3c403c;};'use strict';var Sequelize=require(_0x21f2('0x0'));module['exports']={'name':{'type':Sequelize['STRING']},'basename':{'type':Sequelize[_0x21f2('0x1')]},'type':{'type':Sequelize[_0x21f2('0x1')]}};
\ No newline at end of file
index 3da64ba..e7d7a77 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x06e0=['model','keys','query','dateStart','dateEnd','filters','intersection','fields','attributes','hasOwnProperty','limit','order','sort','where','pick','add','day','merge','map','options','Attachment','includeAll','include','rows','catch','show','params','length','find','update','body','file','basename','filename','type','mimetype','create','download','findOne','root','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','count','offset','set','Content-Range','json','apply','save','then','destroy','name','index','rawAttributes'];(function(_0x5b7707,_0x2aaa97){var _0x1b06bf=function(_0x2affdf){while(--_0x2affdf){_0x5b7707['push'](_0x5b7707['shift']());}};_0x1b06bf(++_0x2aaa97);}(_0x06e0,0x154));var _0x006e=function(_0x2944a4,_0x21a845){_0x2944a4=_0x2944a4-0x0;var _0x46476e=_0x06e0[_0x2944a4];return _0x46476e;};'use strict';var jsonpatch=require(_0x006e('0x0'));var rp=require(_0x006e('0x1'));var moment=require(_0x006e('0x2'));var BPromise=require(_0x006e('0x3'));var Mustache=require(_0x006e('0x4'));var util=require(_0x006e('0x5'));var path=require(_0x006e('0x6'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x006e('0x7'));var fs=require('fs');var _=require(_0x006e('0x8'));var squel=require(_0x006e('0x9'));var crypto=require(_0x006e('0xa'));var jsforce=require(_0x006e('0xb'));var deskjs=require(_0x006e('0xc'));var toCsv=require('to-csv');var querystring=require(_0x006e('0xd'));var Papa=require(_0x006e('0xe'));var qs=require('../../components/parsers/qs');var logger=require(_0x006e('0xf'))(_0x006e('0x10'));var utils=require(_0x006e('0x11'));var config=require(_0x006e('0x12'));var db=require(_0x006e('0x13'))['db'];function respondWithStatusCode(_0x4e63d0,_0x4d3a96){_0x4d3a96=_0x4d3a96||0xcc;return function(_0x3958df){if(_0x3958df){return _0x4e63d0[_0x006e('0x14')](_0x4d3a96);}return _0x4e63d0['status'](_0x4d3a96)[_0x006e('0x15')]();};}function respondWithResult(_0x13d33f,_0xeb1097){_0xeb1097=_0xeb1097||0xc8;return function(_0x5e80fe){if(_0x5e80fe){return _0x13d33f[_0x006e('0x16')](_0xeb1097)['json'](_0x5e80fe);}};}function respondWithFilteredResult(_0x217b80,_0x15ac50){return function(_0x4c6677){if(_0x4c6677){var _0xa3b1cf=_0x4c6677[_0x006e('0x17')],_0x96e233=_0x15ac50[_0x006e('0x18')],_0x1b855a=_0x15ac50[_0x006e('0x18')]+_0x15ac50['limit'],_0x5caebf;if(_0x1b855a>=_0xa3b1cf){_0x1b855a=_0xa3b1cf;_0x5caebf=0xc8;}else{_0x5caebf=0xce;}_0x217b80[_0x006e('0x16')](_0x5caebf);return _0x217b80[_0x006e('0x19')](_0x006e('0x1a'),_0x96e233+'-'+_0x1b855a+'/'+_0xa3b1cf)[_0x006e('0x1b')](_0x4c6677);}return null;};}function patchUpdates(_0xf4bc8){return function(_0x40f6ab){try{jsonpatch[_0x006e('0x1c')](_0x40f6ab,_0xf4bc8,!![]);}catch(_0x3892c9){return BPromise['reject'](_0x3892c9);}return _0x40f6ab[_0x006e('0x1d')]();};}function saveUpdates(_0x3861f7,_0x1579ee){return function(_0x22b680){if(_0x22b680){return _0x22b680['update'](_0x3861f7)[_0x006e('0x1e')](function(_0x1eb35c){return _0x1eb35c;});}return null;};}function removeEntity(_0x1cbeca,_0x3be03a){return function(_0xe31491){if(_0xe31491){return _0xe31491[_0x006e('0x1f')]()[_0x006e('0x1e')](function(){_0x1cbeca[_0x006e('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x55bacf,_0x4561ab){return function(_0x333073){if(!_0x333073){_0x55bacf['sendStatus'](0x194);}return _0x333073;};}function handleError(_0x55c3c1,_0x525ccc){_0x525ccc=_0x525ccc||0x1f4;return function(_0x120167){logger['error'](_0x120167['stack']);if(_0x120167[_0x006e('0x20')]){delete _0x120167['name'];}_0x55c3c1[_0x006e('0x16')](_0x525ccc)['send'](_0x120167);};}exports[_0x006e('0x21')]=function(_0x1c63fa,_0x26dc53){var _0x19ab75={},_0x29f61e={},_0x58b832={'count':0x0,'rows':[]};var _0x142b81=db['Attachment'][_0x006e('0x22')];_0x29f61e[_0x006e('0x23')]=_[_0x006e('0x24')](_0x142b81);var _0x1ee777={'dateStart':_0x1c63fa[_0x006e('0x25')][_0x006e('0x26')],'dateEnd':_0x1c63fa[_0x006e('0x25')]['dateEnd']};delete _0x1c63fa[_0x006e('0x25')][_0x006e('0x26')];delete _0x1c63fa['query'][_0x006e('0x27')];_0x29f61e[_0x006e('0x25')]=_[_0x006e('0x24')](_0x1c63fa[_0x006e('0x25')]);_0x29f61e[_0x006e('0x28')]=_[_0x006e('0x29')](_0x29f61e[_0x006e('0x23')],_0x29f61e['query']);_0x19ab75['attributes']=_[_0x006e('0x29')](_0x29f61e[_0x006e('0x23')],qs['fields'](_0x1c63fa[_0x006e('0x25')][_0x006e('0x2a')]));_0x19ab75[_0x006e('0x2b')]=_0x19ab75[_0x006e('0x2b')]['length']?_0x19ab75['attributes']:_0x29f61e[_0x006e('0x23')];if(!_0x1c63fa[_0x006e('0x25')][_0x006e('0x2c')]('nolimit')){_0x19ab75[_0x006e('0x2d')]=qs['limit'](_0x1c63fa[_0x006e('0x25')]['limit']);_0x19ab75[_0x006e('0x18')]=qs[_0x006e('0x18')](_0x1c63fa['query']['offset']);}_0x19ab75[_0x006e('0x2e')]=qs[_0x006e('0x2f')](_0x1c63fa[_0x006e('0x25')][_0x006e('0x2f')]);_0x19ab75[_0x006e('0x30')]=qs['filters'](_[_0x006e('0x31')](_0x1c63fa[_0x006e('0x25')],_0x29f61e[_0x006e('0x28')]));if(_0x1ee777[_0x006e('0x26')]){if(_0x1ee777['dateEnd']){_0x1ee777[_0x006e('0x27')]=moment(_0x1ee777[_0x006e('0x27')])[_0x006e('0x32')](0x1,'day');}else{_0x1ee777['dateEnd']=moment(_0x1ee777[_0x006e('0x26')])[_0x006e('0x32')](0x1,_0x006e('0x33'));}_[_0x006e('0x34')](_0x19ab75[_0x006e('0x30')],{'createdAt':{'$gte':_0x1ee777[_0x006e('0x26')],'$lte':_0x1ee777[_0x006e('0x27')]}});}if(_0x1c63fa[_0x006e('0x25')]['filter']){_0x19ab75[_0x006e('0x30')]=_[_0x006e('0x34')](_0x19ab75[_0x006e('0x30')],{'$or':_[_0x006e('0x35')](_0x19ab75['attributes'],function(_0x18573e){var _0x2a79f9={};_0x2a79f9[_0x18573e]={'$like':'%'+_0x1c63fa[_0x006e('0x25')]['filter']+'%'};return _0x2a79f9;})});}_0x19ab75=_[_0x006e('0x34')]({},_0x19ab75,_0x1c63fa[_0x006e('0x36')]);var _0x302348={'where':_0x19ab75[_0x006e('0x30')]};return db[_0x006e('0x37')][_0x006e('0x17')](_0x302348)[_0x006e('0x1e')](function(_0x3d88b3){_0x58b832[_0x006e('0x17')]=_0x3d88b3;if(_0x1c63fa['query'][_0x006e('0x38')]){_0x19ab75[_0x006e('0x39')]=[{'all':!![]}];}return db[_0x006e('0x37')]['findAll'](_0x19ab75);})['then'](function(_0x32fc36){_0x58b832[_0x006e('0x3a')]=_0x32fc36;return _0x58b832;})[_0x006e('0x1e')](respondWithFilteredResult(_0x26dc53,_0x19ab75))[_0x006e('0x3b')](handleError(_0x26dc53,null));};exports[_0x006e('0x3c')]=function(_0x57ec72,_0x470154){var _0xbb4f8e={'raw':!![],'where':{'id':_0x57ec72[_0x006e('0x3d')]['id']}},_0x2c878d={};_0x2c878d[_0x006e('0x23')]=_['keys'](db[_0x006e('0x37')][_0x006e('0x22')]);_0x2c878d[_0x006e('0x25')]=_[_0x006e('0x24')](_0x57ec72[_0x006e('0x25')]);_0x2c878d[_0x006e('0x28')]=_[_0x006e('0x29')](_0x2c878d[_0x006e('0x23')],_0x2c878d[_0x006e('0x25')]);_0xbb4f8e['attributes']=_[_0x006e('0x29')](_0x2c878d[_0x006e('0x23')],qs[_0x006e('0x2a')](_0x57ec72[_0x006e('0x25')][_0x006e('0x2a')]));_0xbb4f8e[_0x006e('0x2b')]=_0xbb4f8e[_0x006e('0x2b')][_0x006e('0x3e')]?_0xbb4f8e['attributes']:_0x2c878d[_0x006e('0x23')];if(_0x57ec72['query'][_0x006e('0x38')]){_0xbb4f8e[_0x006e('0x39')]=[{'all':!![]}];}_0xbb4f8e=_[_0x006e('0x34')]({},_0xbb4f8e,_0x57ec72[_0x006e('0x36')]);return db[_0x006e('0x37')][_0x006e('0x3f')](_0xbb4f8e)[_0x006e('0x1e')](handleEntityNotFound(_0x470154,null))[_0x006e('0x1e')](respondWithResult(_0x470154,null))[_0x006e('0x3b')](handleError(_0x470154,null));};exports[_0x006e('0x40')]=function(_0x378304,_0x546c8e){if(_0x378304[_0x006e('0x41')]['id']){delete _0x378304['body']['id'];}return db[_0x006e('0x37')][_0x006e('0x3f')]({'where':{'id':_0x378304[_0x006e('0x3d')]['id']}})[_0x006e('0x1e')](handleEntityNotFound(_0x546c8e,null))[_0x006e('0x1e')](saveUpdates(_0x378304[_0x006e('0x41')],null))['then'](respondWithResult(_0x546c8e,null))[_0x006e('0x3b')](handleError(_0x546c8e,null));};exports[_0x006e('0x1f')]=function(_0x4450a3,_0x2e7848){return db[_0x006e('0x37')][_0x006e('0x3f')]({'where':{'id':_0x4450a3[_0x006e('0x3d')]['id']}})[_0x006e('0x1e')](handleEntityNotFound(_0x2e7848,null))[_0x006e('0x1e')](removeEntity(_0x2e7848,null))[_0x006e('0x3b')](handleError(_0x2e7848,null));};exports['create']=function(_0x4d8dda,_0x232e4b,_0x32130c){_0x4d8dda[_0x006e('0x41')][_0x006e('0x20')]=_0x4d8dda[_0x006e('0x42')]['originalname'];_0x4d8dda['body'][_0x006e('0x43')]=_0x4d8dda[_0x006e('0x42')][_0x006e('0x44')];_0x4d8dda['body'][_0x006e('0x45')]=_0x4d8dda[_0x006e('0x42')][_0x006e('0x46')];return db[_0x006e('0x37')][_0x006e('0x47')](_0x4d8dda[_0x006e('0x41')])[_0x006e('0x1e')](respondWithResult(_0x232e4b,0xc9))[_0x006e('0x3b')](handleError(_0x232e4b,null));};exports[_0x006e('0x48')]=function(_0x551001,_0x317e1f,_0x179255){return db[_0x006e('0x37')][_0x006e('0x49')]({'where':{'id':_0x551001[_0x006e('0x3d')]['id']},'raw':!![]})[_0x006e('0x1e')](handleEntityNotFound(_0x317e1f,null))['then'](function(_0x5dd5ea){if(_0x5dd5ea){return _0x317e1f[_0x006e('0x48')](path['join'](config[_0x006e('0x4a')],'server/files/attachments/',_0x5dd5ea[_0x006e('0x43')]));}})['catch'](handleError(_0x317e1f,null));};
\ No newline at end of file
+var _0xf88b=['rawAttributes','model','keys','query','dateEnd','dateStart','filters','intersection','attributes','fields','length','nolimit','order','sort','pick','add','day','merge','where','map','filter','options','includeAll','include','findAll','catch','show','params','find','update','body','create','file','originalname','basename','type','mimetype','download','findOne','join','server/files/attachments/','fast-json-patch','request-promise','moment','mustache','util','path','lodash','squel','jsforce','desk.js','to-csv','querystring','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','end','status','count','offset','limit','Content-Range','json','reject','save','then','error','stack','name','send','Attachment'];(function(_0x340892,_0x51867a){var _0xb68d80=function(_0xe328e7){while(--_0xe328e7){_0x340892['push'](_0x340892['shift']());}};_0xb68d80(++_0x51867a);}(_0xf88b,0x1e5));var _0xbf88=function(_0x3c36a7,_0x5716d3){_0x3c36a7=_0x3c36a7-0x0;var _0x51a883=_0xf88b[_0x3c36a7];return _0x51a883;};'use strict';var jsonpatch=require(_0xbf88('0x0'));var rp=require(_0xbf88('0x1'));var moment=require(_0xbf88('0x2'));var BPromise=require('bluebird');var Mustache=require(_0xbf88('0x3'));var util=require(_0xbf88('0x4'));var path=require(_0xbf88('0x5'));var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xbf88('0x6'));var squel=require(_0xbf88('0x7'));var crypto=require('crypto');var jsforce=require(_0xbf88('0x8'));var deskjs=require(_0xbf88('0x9'));var toCsv=require(_0xbf88('0xa'));var querystring=require(_0xbf88('0xb'));var Papa=require('papaparse');var qs=require(_0xbf88('0xc'));var logger=require(_0xbf88('0xd'))(_0xbf88('0xe'));var utils=require('../../config/utils');var config=require(_0xbf88('0xf'));var db=require(_0xbf88('0x10'))['db'];function respondWithStatusCode(_0x293cea,_0x1b9271){_0x1b9271=_0x1b9271||0xcc;return function(_0x1795d9){if(_0x1795d9){return _0x293cea[_0xbf88('0x11')](_0x1b9271);}return _0x293cea['status'](_0x1b9271)[_0xbf88('0x12')]();};}function respondWithResult(_0x3a15a9,_0x587f80){_0x587f80=_0x587f80||0xc8;return function(_0x8774c3){if(_0x8774c3){return _0x3a15a9[_0xbf88('0x13')](_0x587f80)['json'](_0x8774c3);}};}function respondWithFilteredResult(_0x3d1587,_0xfeaa03){return function(_0x2949c0){if(_0x2949c0){var _0x455692=_0x2949c0[_0xbf88('0x14')],_0x23dbe2=_0xfeaa03[_0xbf88('0x15')],_0x47c97b=_0xfeaa03[_0xbf88('0x15')]+_0xfeaa03[_0xbf88('0x16')],_0x642858;if(_0x47c97b>=_0x455692){_0x47c97b=_0x455692;_0x642858=0xc8;}else{_0x642858=0xce;}_0x3d1587[_0xbf88('0x13')](_0x642858);return _0x3d1587['set'](_0xbf88('0x17'),_0x23dbe2+'-'+_0x47c97b+'/'+_0x455692)[_0xbf88('0x18')](_0x2949c0);}return null;};}function patchUpdates(_0x1209c2){return function(_0x291300){try{jsonpatch['apply'](_0x291300,_0x1209c2,!![]);}catch(_0x11802b){return BPromise[_0xbf88('0x19')](_0x11802b);}return _0x291300[_0xbf88('0x1a')]();};}function saveUpdates(_0x17fa4e,_0x213688){return function(_0x2a9eee){if(_0x2a9eee){return _0x2a9eee['update'](_0x17fa4e)['then'](function(_0x13dc03){return _0x13dc03;});}return null;};}function removeEntity(_0x12bf7b,_0x43a68a){return function(_0x1966ec){if(_0x1966ec){return _0x1966ec['destroy']()[_0xbf88('0x1b')](function(){_0x12bf7b['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x501aaa,_0x2e0b16){return function(_0x469892){if(!_0x469892){_0x501aaa[_0xbf88('0x11')](0x194);}return _0x469892;};}function handleError(_0x431134,_0x246f0d){_0x246f0d=_0x246f0d||0x1f4;return function(_0x1b1d1a){logger[_0xbf88('0x1c')](_0x1b1d1a[_0xbf88('0x1d')]);if(_0x1b1d1a[_0xbf88('0x1e')]){delete _0x1b1d1a[_0xbf88('0x1e')];}_0x431134[_0xbf88('0x13')](_0x246f0d)[_0xbf88('0x1f')](_0x1b1d1a);};}exports['index']=function(_0x47e6f4,_0x21d300){var _0x35efbb={},_0x135af9={},_0x637588={'count':0x0,'rows':[]};var _0x388525=db[_0xbf88('0x20')][_0xbf88('0x21')];_0x135af9[_0xbf88('0x22')]=_[_0xbf88('0x23')](_0x388525);var _0x68de88={'dateStart':_0x47e6f4[_0xbf88('0x24')]['dateStart'],'dateEnd':_0x47e6f4[_0xbf88('0x24')][_0xbf88('0x25')]};delete _0x47e6f4[_0xbf88('0x24')][_0xbf88('0x26')];delete _0x47e6f4[_0xbf88('0x24')][_0xbf88('0x25')];_0x135af9[_0xbf88('0x24')]=_[_0xbf88('0x23')](_0x47e6f4['query']);_0x135af9[_0xbf88('0x27')]=_[_0xbf88('0x28')](_0x135af9[_0xbf88('0x22')],_0x135af9['query']);_0x35efbb[_0xbf88('0x29')]=_['intersection'](_0x135af9[_0xbf88('0x22')],qs[_0xbf88('0x2a')](_0x47e6f4[_0xbf88('0x24')][_0xbf88('0x2a')]));_0x35efbb[_0xbf88('0x29')]=_0x35efbb[_0xbf88('0x29')][_0xbf88('0x2b')]?_0x35efbb[_0xbf88('0x29')]:_0x135af9[_0xbf88('0x22')];if(!_0x47e6f4[_0xbf88('0x24')]['hasOwnProperty'](_0xbf88('0x2c'))){_0x35efbb[_0xbf88('0x16')]=qs[_0xbf88('0x16')](_0x47e6f4['query'][_0xbf88('0x16')]);_0x35efbb[_0xbf88('0x15')]=qs['offset'](_0x47e6f4['query'][_0xbf88('0x15')]);}_0x35efbb[_0xbf88('0x2d')]=qs['sort'](_0x47e6f4[_0xbf88('0x24')][_0xbf88('0x2e')]);_0x35efbb['where']=qs[_0xbf88('0x27')](_[_0xbf88('0x2f')](_0x47e6f4[_0xbf88('0x24')],_0x135af9[_0xbf88('0x27')]));if(_0x68de88['dateStart']){if(_0x68de88[_0xbf88('0x25')]){_0x68de88[_0xbf88('0x25')]=moment(_0x68de88[_0xbf88('0x25')])[_0xbf88('0x30')](0x1,_0xbf88('0x31'));}else{_0x68de88[_0xbf88('0x25')]=moment(_0x68de88[_0xbf88('0x26')])[_0xbf88('0x30')](0x1,_0xbf88('0x31'));}_[_0xbf88('0x32')](_0x35efbb[_0xbf88('0x33')],{'createdAt':{'$gte':_0x68de88[_0xbf88('0x26')],'$lte':_0x68de88[_0xbf88('0x25')]}});}if(_0x47e6f4[_0xbf88('0x24')]['filter']){_0x35efbb['where']=_['merge'](_0x35efbb[_0xbf88('0x33')],{'$or':_[_0xbf88('0x34')](_0x35efbb['attributes'],function(_0x4b4764){var _0x1c5f83={};_0x1c5f83[_0x4b4764]={'$like':'%'+_0x47e6f4[_0xbf88('0x24')][_0xbf88('0x35')]+'%'};return _0x1c5f83;})});}_0x35efbb=_[_0xbf88('0x32')]({},_0x35efbb,_0x47e6f4[_0xbf88('0x36')]);var _0x41d95e={'where':_0x35efbb[_0xbf88('0x33')]};return db[_0xbf88('0x20')][_0xbf88('0x14')](_0x41d95e)[_0xbf88('0x1b')](function(_0x3ab979){_0x637588['count']=_0x3ab979;if(_0x47e6f4[_0xbf88('0x24')][_0xbf88('0x37')]){_0x35efbb[_0xbf88('0x38')]=[{'all':!![]}];}return db[_0xbf88('0x20')][_0xbf88('0x39')](_0x35efbb);})[_0xbf88('0x1b')](function(_0x1217d4){_0x637588['rows']=_0x1217d4;return _0x637588;})[_0xbf88('0x1b')](respondWithFilteredResult(_0x21d300,_0x35efbb))[_0xbf88('0x3a')](handleError(_0x21d300,null));};exports[_0xbf88('0x3b')]=function(_0xa8091c,_0x166c02){var _0x4d7821={'raw':!![],'where':{'id':_0xa8091c[_0xbf88('0x3c')]['id']}},_0x43a3f5={};_0x43a3f5[_0xbf88('0x22')]=_[_0xbf88('0x23')](db['Attachment'][_0xbf88('0x21')]);_0x43a3f5['query']=_[_0xbf88('0x23')](_0xa8091c[_0xbf88('0x24')]);_0x43a3f5[_0xbf88('0x27')]=_[_0xbf88('0x28')](_0x43a3f5[_0xbf88('0x22')],_0x43a3f5[_0xbf88('0x24')]);_0x4d7821[_0xbf88('0x29')]=_['intersection'](_0x43a3f5[_0xbf88('0x22')],qs[_0xbf88('0x2a')](_0xa8091c[_0xbf88('0x24')][_0xbf88('0x2a')]));_0x4d7821[_0xbf88('0x29')]=_0x4d7821[_0xbf88('0x29')][_0xbf88('0x2b')]?_0x4d7821[_0xbf88('0x29')]:_0x43a3f5[_0xbf88('0x22')];if(_0xa8091c['query']['includeAll']){_0x4d7821[_0xbf88('0x38')]=[{'all':!![]}];}_0x4d7821=_[_0xbf88('0x32')]({},_0x4d7821,_0xa8091c[_0xbf88('0x36')]);return db['Attachment'][_0xbf88('0x3d')](_0x4d7821)[_0xbf88('0x1b')](handleEntityNotFound(_0x166c02,null))[_0xbf88('0x1b')](respondWithResult(_0x166c02,null))[_0xbf88('0x3a')](handleError(_0x166c02,null));};exports[_0xbf88('0x3e')]=function(_0xf15e7a,_0x5256cf){if(_0xf15e7a[_0xbf88('0x3f')]['id']){delete _0xf15e7a[_0xbf88('0x3f')]['id'];}return db[_0xbf88('0x20')][_0xbf88('0x3d')]({'where':{'id':_0xf15e7a[_0xbf88('0x3c')]['id']}})[_0xbf88('0x1b')](handleEntityNotFound(_0x5256cf,null))[_0xbf88('0x1b')](saveUpdates(_0xf15e7a[_0xbf88('0x3f')],null))[_0xbf88('0x1b')](respondWithResult(_0x5256cf,null))[_0xbf88('0x3a')](handleError(_0x5256cf,null));};exports['destroy']=function(_0x2b251c,_0x4c3956){return db['Attachment'][_0xbf88('0x3d')]({'where':{'id':_0x2b251c[_0xbf88('0x3c')]['id']}})['then'](handleEntityNotFound(_0x4c3956,null))['then'](removeEntity(_0x4c3956,null))[_0xbf88('0x3a')](handleError(_0x4c3956,null));};exports[_0xbf88('0x40')]=function(_0x2794cc,_0x18a8f1,_0x2fdb83){_0x2794cc[_0xbf88('0x3f')][_0xbf88('0x1e')]=_0x2794cc[_0xbf88('0x41')][_0xbf88('0x42')];_0x2794cc['body'][_0xbf88('0x43')]=_0x2794cc[_0xbf88('0x41')]['filename'];_0x2794cc['body'][_0xbf88('0x44')]=_0x2794cc['file'][_0xbf88('0x45')];return db[_0xbf88('0x20')][_0xbf88('0x40')](_0x2794cc['body'])[_0xbf88('0x1b')](respondWithResult(_0x18a8f1,0xc9))[_0xbf88('0x3a')](handleError(_0x18a8f1,null));};exports[_0xbf88('0x46')]=function(_0x4be18a,_0x1575d2,_0x2da65b){return db['Attachment'][_0xbf88('0x47')]({'where':{'id':_0x4be18a[_0xbf88('0x3c')]['id']},'raw':!![]})[_0xbf88('0x1b')](handleEntityNotFound(_0x1575d2,null))[_0xbf88('0x1b')](function(_0x3da69c){if(_0x3da69c){return _0x1575d2[_0xbf88('0x46')](path[_0xbf88('0x48')](config['root'],_0xbf88('0x49'),_0x3da69c[_0xbf88('0x43')]));}})[_0xbf88('0x3a')](handleError(_0x1575d2,null));};
\ No newline at end of file
index d7c4cd7..d141e08 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6aa7=['lodash','../../config/logger','api','moment','bluebird','./attachment.attributes','exports','Attachment'];(function(_0x108efe,_0x21f41e){var _0x33de88=function(_0x3f0a5a){while(--_0x3f0a5a){_0x108efe['push'](_0x108efe['shift']());}};_0x33de88(++_0x21f41e);}(_0x6aa7,0x178));var _0x76aa=function(_0xb73a52,_0x139fb9){_0xb73a52=_0xb73a52-0x0;var _0x3dc32f=_0x6aa7[_0xb73a52];return _0x3dc32f;};'use strict';var _=require(_0x76aa('0x0'));var util=require('util');var logger=require(_0x76aa('0x1'))(_0x76aa('0x2'));var moment=require(_0x76aa('0x3'));var BPromise=require(_0x76aa('0x4'));var rp=require('request-promise');var attributes=require(_0x76aa('0x5'));module[_0x76aa('0x6')]=function(_0x1d6e04,_0x511588){return _0x1d6e04['define'](_0x76aa('0x7'),attributes,{'tableName':'attachments','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x55ca=['bluebird','request-promise','exports','define','Attachment','attachments','lodash','util'];(function(_0x3070dc,_0x40cf11){var _0x431489=function(_0x49bc2a){while(--_0x49bc2a){_0x3070dc['push'](_0x3070dc['shift']());}};_0x431489(++_0x40cf11);}(_0x55ca,0x126));var _0xa55c=function(_0x212b03,_0x1f1b50){_0x212b03=_0x212b03-0x0;var _0x423115=_0x55ca[_0x212b03];return _0x423115;};'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('./attachment.attributes');module[_0xa55c('0x4')]=function(_0x2db02a,_0xcb02e3){return _0x2db02a[_0xa55c('0x5')](_0xa55c('0x6'),attributes,{'tableName':_0xa55c('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ed280ea..f7c68ec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7e22=['../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http','request','then','info','Attachment,\x20%s,\x20%s','request\x20sent','Attachment,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','Attachment','create','body','options','raw','CreateAttachment','debug','lodash','moment','bluebird','randomstring'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x7e22,0x1d8));var _0x27e2=function(_0x393020,_0xd2af5){_0x393020=_0x393020-0x0;var _0x220d0b=_0x7e22[_0x393020];return _0x220d0b;};'use strict';var _=require(_0x27e2('0x0'));var util=require('util');var moment=require(_0x27e2('0x1'));var BPromise=require(_0x27e2('0x2'));var rs=require(_0x27e2('0x3'));var fs=require('fs');var db=require(_0x27e2('0x4'))['db'];var utils=require(_0x27e2('0x5'));var logger=require(_0x27e2('0x6'))('rpc');var config=require(_0x27e2('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x27e2('0x8')][_0x27e2('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3eb3cd,_0x8ec259,_0x54c99e){return new BPromise(function(_0x207ab6,_0x419985){return client[_0x27e2('0xa')](_0x3eb3cd,_0x54c99e)[_0x27e2('0xb')](function(_0x29d007){logger[_0x27e2('0xc')](_0x27e2('0xd'),_0x8ec259,_0x27e2('0xe'));logger['debug'](_0x27e2('0xf'),_0x8ec259,_0x27e2('0xe'),JSON['stringify'](_0x29d007));if(_0x29d007[_0x27e2('0x10')]){if(_0x29d007[_0x27e2('0x10')][_0x27e2('0x11')]===0x1f4){logger[_0x27e2('0x10')]('Attachment,\x20%s,\x20%s',_0x8ec259,_0x29d007[_0x27e2('0x10')]['message']);return _0x419985(_0x29d007[_0x27e2('0x10')][_0x27e2('0x12')]);}logger[_0x27e2('0x10')](_0x27e2('0xd'),_0x8ec259,_0x29d007[_0x27e2('0x10')]['message']);return _0x207ab6(_0x29d007[_0x27e2('0x10')]['message']);}else{logger[_0x27e2('0xc')](_0x27e2('0xd'),_0x8ec259,_0x27e2('0xe'));_0x207ab6(_0x29d007[_0x27e2('0x13')][_0x27e2('0x12')]);}})[_0x27e2('0x14')](function(_0x371885){logger[_0x27e2('0x10')]('Attachment,\x20%s,\x20%s',_0x8ec259,_0x371885);_0x419985(_0x371885);});});}exports['CreateAttachment']=function(_0x14ce22){var _0x1c5847=this;return new Promise(function(_0x54e0d7,_0x88d0a3){return db[_0x27e2('0x15')][_0x27e2('0x16')](_0x14ce22[_0x27e2('0x17')],{'raw':_0x14ce22[_0x27e2('0x18')]?_0x14ce22['options'][_0x27e2('0x19')]===undefined?!![]:![]:!![]})[_0x27e2('0xb')](function(_0x74986d){logger['info'](_0x27e2('0x1a'),_0x14ce22);logger[_0x27e2('0x1b')]('CreateAttachment',_0x14ce22,JSON['stringify'](_0x74986d));_0x54e0d7(_0x74986d);})[_0x27e2('0x14')](function(_0x43cc48){logger[_0x27e2('0x10')](_0x27e2('0x1a'),_0x43cc48[_0x27e2('0x12')],_0x14ce22);_0x88d0a3(_0x1c5847[_0x27e2('0x10')](0x1f4,_0x43cc48[_0x27e2('0x12')]));});});};
\ No newline at end of file
+var _0x80ed=['bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','info','Attachment,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','CreateAttachment','Attachment','body','options','lodash','moment'];(function(_0xebea7e,_0x5c68f9){var _0x1e5d40=function(_0x253365){while(--_0x253365){_0xebea7e['push'](_0xebea7e['shift']());}};_0x1e5d40(++_0x5c68f9);}(_0x80ed,0x11c));var _0xd80e=function(_0x2c5fef,_0x1b3dec){_0x2c5fef=_0x2c5fef-0x0;var _0x1ac4c1=_0x80ed[_0x2c5fef];return _0x1ac4c1;};'use strict';var _=require(_0xd80e('0x0'));var util=require('util');var moment=require(_0xd80e('0x1'));var BPromise=require(_0xd80e('0x2'));var rs=require(_0xd80e('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xd80e('0x4'));var logger=require(_0xd80e('0x5'))(_0xd80e('0x6'));var config=require(_0xd80e('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xd80e('0x8')][_0xd80e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x252fec,_0x51c361,_0x411b3a){return new BPromise(function(_0x438f7d,_0x3b4f35){return client[_0xd80e('0xa')](_0x252fec,_0x411b3a)[_0xd80e('0xb')](function(_0x298c29){logger[_0xd80e('0xc')](_0xd80e('0xd'),_0x51c361,_0xd80e('0xe'));logger[_0xd80e('0xf')]('Attachment,\x20%s,\x20%s,\x20%s',_0x51c361,_0xd80e('0xe'),JSON[_0xd80e('0x10')](_0x298c29));if(_0x298c29[_0xd80e('0x11')]){if(_0x298c29[_0xd80e('0x11')][_0xd80e('0x12')]===0x1f4){logger[_0xd80e('0x11')](_0xd80e('0xd'),_0x51c361,_0x298c29[_0xd80e('0x11')][_0xd80e('0x13')]);return _0x3b4f35(_0x298c29['error']['message']);}logger['error']('Attachment,\x20%s,\x20%s',_0x51c361,_0x298c29[_0xd80e('0x11')][_0xd80e('0x13')]);return _0x438f7d(_0x298c29[_0xd80e('0x11')][_0xd80e('0x13')]);}else{logger[_0xd80e('0xc')]('Attachment,\x20%s,\x20%s',_0x51c361,_0xd80e('0xe'));_0x438f7d(_0x298c29[_0xd80e('0x14')][_0xd80e('0x13')]);}})[_0xd80e('0x15')](function(_0x40a4d5){logger[_0xd80e('0x11')](_0xd80e('0xd'),_0x51c361,_0x40a4d5);_0x3b4f35(_0x40a4d5);});});}exports[_0xd80e('0x16')]=function(_0x49e3e5){var _0x21ceec=this;return new Promise(function(_0x1cc576,_0x3b543d){return db[_0xd80e('0x17')]['create'](_0x49e3e5[_0xd80e('0x18')],{'raw':_0x49e3e5[_0xd80e('0x19')]?_0x49e3e5[_0xd80e('0x19')]['raw']===undefined?!![]:![]:!![]})[_0xd80e('0xb')](function(_0x2ef8a1){logger[_0xd80e('0xc')](_0xd80e('0x16'),_0x49e3e5);logger[_0xd80e('0xf')]('CreateAttachment',_0x49e3e5,JSON['stringify'](_0x2ef8a1));_0x1cc576(_0x2ef8a1);})[_0xd80e('0x15')](function(_0x3fa159){logger[_0xd80e('0x11')](_0xd80e('0x16'),_0x3fa159[_0xd80e('0x13')],_0x49e3e5);_0x3b543d(_0x21ceec[_0xd80e('0x11')](0x1f4,_0x3fa159[_0xd80e('0x13')]));});});};
\ No newline at end of file
index 043fc45..e6ba574 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb22=['server/files/attachments/','format','originalname','post','file','create','update','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./attachment.controller','get','isAuthenticated','/:id','show','download','join','root'];(function(_0x89d941,_0x432917){var _0x1fe01c=function(_0x39eb81){while(--_0x39eb81){_0x89d941['push'](_0x89d941['shift']());}};_0x1fe01c(++_0x432917);}(_0xcb22,0xc8));var _0x2cb2=function(_0x4f13d5,_0x32ddaa){_0x4f13d5=_0x4f13d5-0x0;var _0x13a873=_0xcb22[_0x4f13d5];return _0x13a873;};'use strict';var multer=require(_0x2cb2('0x0'));var util=require(_0x2cb2('0x1'));var path=require(_0x2cb2('0x2'));var express=require(_0x2cb2('0x3'));var router=express[_0x2cb2('0x4')]();var auth=require(_0x2cb2('0x5'));var interaction=require(_0x2cb2('0x6'));var config=require(_0x2cb2('0x7'));var controller=require(_0x2cb2('0x8'));router[_0x2cb2('0x9')]('/',auth[_0x2cb2('0xa')](),controller['index']);router[_0x2cb2('0x9')](_0x2cb2('0xb'),auth[_0x2cb2('0xa')](),controller[_0x2cb2('0xc')]);router[_0x2cb2('0x9')]('/:id/download',auth[_0x2cb2('0xa')](),controller[_0x2cb2('0xd')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x16b59d,_0x34170f,_0xe8c23e){_0xe8c23e(null,path[_0x2cb2('0xe')](config[_0x2cb2('0xf')],_0x2cb2('0x10')));},'filename':function(_0x4b6b96,_0x4ed684,_0x1e2e62){_0x1e2e62(null,util[_0x2cb2('0x11')]('%s-%s',Date['now'](),_0x4ed684[_0x2cb2('0x12')]['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x2cb2('0x13')]('/',upload['single'](_0x2cb2('0x14')),controller[_0x2cb2('0x15')]);router['put'](_0x2cb2('0xb'),auth[_0x2cb2('0xa')](),controller[_0x2cb2('0x16')]);router['delete'](_0x2cb2('0xb'),auth[_0x2cb2('0xa')](),controller['destroy']);module[_0x2cb2('0x17')]=router;
\ No newline at end of file
+var _0xd5fc=['create','put','update','delete','destroy','exports','multer','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./attachment.controller','get','index','/:id','isAuthenticated','diskStorage','root','format','now','originalname','post','single','file'];(function(_0x159a03,_0x8355f3){var _0x163636=function(_0x5b6073){while(--_0x5b6073){_0x159a03['push'](_0x159a03['shift']());}};_0x163636(++_0x8355f3);}(_0xd5fc,0xae));var _0xcd5f=function(_0x321184,_0x43ff65){_0x321184=_0x321184-0x0;var _0x4dc5fb=_0xd5fc[_0x321184];return _0x4dc5fb;};'use strict';var multer=require(_0xcd5f('0x0'));var util=require('util');var path=require('path');var express=require('express');var router=express[_0xcd5f('0x1')]();var auth=require(_0xcd5f('0x2'));var interaction=require(_0xcd5f('0x3'));var config=require(_0xcd5f('0x4'));var controller=require(_0xcd5f('0x5'));router[_0xcd5f('0x6')]('/',auth['isAuthenticated'](),controller[_0xcd5f('0x7')]);router['get'](_0xcd5f('0x8'),auth[_0xcd5f('0x9')](),controller['show']);router['get']('/:id/download',auth[_0xcd5f('0x9')](),controller['download']);var upload=multer({'storage':multer[_0xcd5f('0xa')]({'destination':function(_0x3e63d4,_0x5e5019,_0x11a3b4){_0x11a3b4(null,path['join'](config[_0xcd5f('0xb')],'server/files/attachments/'));},'filename':function(_0x3592c0,_0x19996,_0x45f43f){_0x45f43f(null,util[_0xcd5f('0xc')]('%s-%s',Date[_0xcd5f('0xd')](),_0x19996[_0xcd5f('0xe')]['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0xcd5f('0xf')]('/',upload[_0xcd5f('0x10')](_0xcd5f('0x11')),controller[_0xcd5f('0x12')]);router[_0xcd5f('0x13')]('/:id',auth[_0xcd5f('0x9')](),controller[_0xcd5f('0x14')]);router[_0xcd5f('0x15')](_0xcd5f('0x8'),auth[_0xcd5f('0x9')](),controller[_0xcd5f('0x16')]);module[_0xcd5f('0x17')]=router;
\ No newline at end of file
index 55904b2..610b864 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda60=['passport-google-oauth20','Strategy','../../mysqldb','signToken','google','/login','profile','email','callback','authenticate','clientID','clientSecret','secret','find','emails','value','admin','user','agent','then','catch','lodash','passport'];(function(_0x406696,_0x39f9b1){var _0x10e35c=function(_0x108de3){while(--_0x108de3){_0x406696['push'](_0x406696['shift']());}};_0x10e35c(++_0x39f9b1);}(_0xda60,0xe4));var _0x0da6=function(_0x685346,_0x3ef2e5){_0x685346=_0x685346-0x0;var _0x52e15b=_0xda60[_0x685346];return _0x52e15b;};'use strict';var _=require(_0x0da6('0x0'));var passport=require(_0x0da6('0x1'));var GoogleStrategy=require(_0x0da6('0x2'))[_0x0da6('0x3')];var db=require(_0x0da6('0x4'))['db'];var config=require('../../config/environment');var signToken=require('../../components/auth/service')[_0x0da6('0x5')];exports['login']=passport['authenticate'](_0x0da6('0x6'),{'failureRedirect':_0x0da6('0x7'),'scope':[_0x0da6('0x8'),_0x0da6('0x9')],'session':![]});exports[_0x0da6('0xa')]=passport[_0x0da6('0xb')](_0x0da6('0x6'),{'failureRedirect':_0x0da6('0x7'),'session':![]});passport['use'](new GoogleStrategy({'clientID':config[_0x0da6('0x6')]?config[_0x0da6('0x6')][_0x0da6('0xc')]:'id','clientSecret':config[_0x0da6('0x6')]?config[_0x0da6('0x6')][_0x0da6('0xd')]:_0x0da6('0xe'),'callbackURL':config[_0x0da6('0x6')]?config[_0x0da6('0x6')]['callbackURL']:''},function(_0x5e0af7,_0x1b5b77,_0x53f1de,_0x5afbee){db['User'][_0x0da6('0xf')]({'where':{'email':_['map'](_0x53f1de[_0x0da6('0x10')],_0x0da6('0x11')),'role':{'$or':[_0x0da6('0x12'),_0x0da6('0x13'),_0x0da6('0x14')]}}})[_0x0da6('0x15')](function(_0x136268){if(_0x136268){return _0x5afbee(null,_0x136268);}_0x5afbee('User\x20email\x20not\x20found!');})[_0x0da6('0x16')](function(_0x1964ac){_0x5afbee(_0x1964ac);});}));
\ No newline at end of file
+var _0xff9d=['signToken','login','authenticate','google','/login','profile','email','callback','clientID','secret','find','emails','value','user','agent','User\x20email\x20not\x20found!','catch','passport','passport-google-oauth20','Strategy','../../mysqldb','../../config/environment','../../components/auth/service'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xff9d,0x16a));var _0xdff9=function(_0x2e4c41,_0x4280c4){_0x2e4c41=_0x2e4c41-0x0;var _0x2eec68=_0xff9d[_0x2e4c41];return _0x2eec68;};'use strict';var _=require('lodash');var passport=require(_0xdff9('0x0'));var GoogleStrategy=require(_0xdff9('0x1'))[_0xdff9('0x2')];var db=require(_0xdff9('0x3'))['db'];var config=require(_0xdff9('0x4'));var signToken=require(_0xdff9('0x5'))[_0xdff9('0x6')];exports[_0xdff9('0x7')]=passport[_0xdff9('0x8')](_0xdff9('0x9'),{'failureRedirect':_0xdff9('0xa'),'scope':[_0xdff9('0xb'),_0xdff9('0xc')],'session':![]});exports[_0xdff9('0xd')]=passport[_0xdff9('0x8')](_0xdff9('0x9'),{'failureRedirect':'/login','session':![]});passport['use'](new GoogleStrategy({'clientID':config[_0xdff9('0x9')]?config[_0xdff9('0x9')][_0xdff9('0xe')]:'id','clientSecret':config['google']?config[_0xdff9('0x9')]['clientSecret']:_0xdff9('0xf'),'callbackURL':config['google']?config[_0xdff9('0x9')]['callbackURL']:''},function(_0x2d91e5,_0x527c28,_0x21eaec,_0x32e320){db['User'][_0xdff9('0x10')]({'where':{'email':_['map'](_0x21eaec[_0xdff9('0x11')],_0xdff9('0x12')),'role':{'$or':['admin',_0xdff9('0x13'),_0xdff9('0x14')]}}})['then'](function(_0x7da3ba){if(_0x7da3ba){return _0x32e320(null,_0x7da3ba);}_0x32e320(_0xdff9('0x15'));})[_0xdff9('0x16')](function(_0x164116){_0x32e320(_0x164116);});}));
\ No newline at end of file
index b18356d..f4b2261 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9abe=['/callback','callback','exports','express','Router','./authGoogle.controller','../../components/auth/service','setTokenCookie','get','login'];(function(_0xb7a459,_0xc13228){var _0x104ab5=function(_0x186a0e){while(--_0x186a0e){_0xb7a459['push'](_0xb7a459['shift']());}};_0x104ab5(++_0xc13228);}(_0x9abe,0x1e3));var _0xe9ab=function(_0x1a021f,_0x2d06a0){_0x1a021f=_0x1a021f-0x0;var _0x5157f8=_0x9abe[_0x1a021f];return _0x5157f8;};'use strict';var express=require(_0xe9ab('0x0'));var passport=require('passport');var router=express[_0xe9ab('0x1')]();var controller=require(_0xe9ab('0x2'));var setTokenCookie=require(_0xe9ab('0x3'))[_0xe9ab('0x4')];router[_0xe9ab('0x5')]('/',controller[_0xe9ab('0x6')]);router[_0xe9ab('0x5')](_0xe9ab('0x7'),controller[_0xe9ab('0x8')],setTokenCookie);module[_0xe9ab('0x9')]=router;
\ No newline at end of file
+var _0x5bb2=['setTokenCookie','get','login','/callback','express','passport','Router','./authGoogle.controller','../../components/auth/service'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x5bb2,0x1cf));var _0x25bb=function(_0x34c617,_0x98a538){_0x34c617=_0x34c617-0x0;var _0x585859=_0x5bb2[_0x34c617];return _0x585859;};'use strict';var express=require(_0x25bb('0x0'));var passport=require(_0x25bb('0x1'));var router=express[_0x25bb('0x2')]();var controller=require(_0x25bb('0x3'));var setTokenCookie=require(_0x25bb('0x4'))[_0x25bb('0x5')];router[_0x25bb('0x6')]('/',controller[_0x25bb('0x7')]);router[_0x25bb('0x6')](_0x25bb('0x8'),controller['callback'],setTokenCookie);module['exports']=router;
\ No newline at end of file
index 7dcc64d..7a28c5f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xefdd=['count','then','../../config/license/util','getLicense','agents','Maximum\x20login\x20has\x20been\x20reached','catch','find','This\x20name\x20is\x20not\x20registered.','authenticate','This\x20password\x20is\x20not\x20correct.','MailAccount','name','email','MailServerOut','Smtp','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','service','host','port','secure','authentication','user','pass','merge','format','request','error','stringify','message','login','local','Something\x20went\x20wrong,\x20please\x20try\x20again.','online','forgot','body','Email\x20parameter\x20is\x20missing','trim','toLowerCase','This\x20email\x20is\x20not\x20registered.','resetPasswordToken','save','xCally\x20Motion\x20Password\x20Reset','Please\x20click\x20on\x20the\x20following\x20link,\x20or\x20paste\x20this\x20into\x20your\x20browser\x20to\x20complete\x20the\x20process:\x0a\x0a','http://','headers','status','send','Reset\x20Email\x20sent!','token','now','Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.','password','resetPasswordExpires','Password\x20reset!','use','util','passport','passport-local','Strategy','bluebird','jayson/promise','lodash','../../config/logger','api','randomstring','../../components/auth/service','signToken','role','agent','User'];(function(_0x277731,_0x4df294){var _0x5019c0=function(_0x1024f1){while(--_0x1024f1){_0x277731['push'](_0x277731['shift']());}};_0x5019c0(++_0x4df294);}(_0xefdd,0x10d));var _0xdefd=function(_0x173ab0,_0x3a4843){_0x173ab0=_0x173ab0-0x0;var _0x698971=_0xefdd[_0x173ab0];return _0x698971;};'use strict';var util=require(_0xdefd('0x0'));var passport=require(_0xdefd('0x1'));var LocalStrategy=require(_0xdefd('0x2'))[_0xdefd('0x3')];var BPromise=require(_0xdefd('0x4'));var jayson=require(_0xdefd('0x5'));var _=require(_0xdefd('0x6'));var logger=require(_0xdefd('0x7'))(_0xdefd('0x8'));var rs=require(_0xdefd('0x9'));var db=require('../../mysqldb')['db'];var signToken=require(_0xdefd('0xa'))[_0xdefd('0xb')];var client=jayson['client']['http']({'port':0x232b});var getLicense=function(_0x1f73f0){return new BPromise(function(_0x5b9d1a,_0x13043c){var _0x259e0b=0x0;_0x1f73f0[_0xdefd('0xc')]!==_0xdefd('0xd')&&_0x5b9d1a(_0x1f73f0);return db[_0xdefd('0xe')][_0xdefd('0xf')]({'where':{'role':_0xdefd('0xd'),'online':!![],'id':{'$ne':_0x1f73f0['id']}}})[_0xdefd('0x10')](function(_0x54150a){_0x259e0b=_0x54150a;return require(_0xdefd('0x11'))[_0xdefd('0x12')]();})[_0xdefd('0x10')](function(_0x102aec){if(_0x102aec&&_0x102aec[_0xdefd('0x13')]&&_0x259e0b>=_0x102aec[_0xdefd('0x13')]){return _0x13043c({'message':_0xdefd('0x14')});}return _0x5b9d1a(_0x1f73f0);})[_0xdefd('0x15')](function(_0x16382d){return _0x13043c(_0x16382d);});});};function localAuthenticate(_0x14c692,_0x309c65,_0x1a0d9b,_0x48ea37){var _0x4c9d2a;_0x14c692[_0xdefd('0x16')]({'where':{'name':_0x309c65['trim'](),'role':{'$or':['admin','user',_0xdefd('0xd')]}}})['then'](function(_0x2e53fc){if(!_0x2e53fc){return _0x48ea37(null,![],{'message':_0xdefd('0x17')});}return getLicense(_0x2e53fc);})[_0xdefd('0x10')](function(_0x5013b8){_0x5013b8[_0xdefd('0x18')](_0x1a0d9b,function(_0x1aa7e5,_0x2aef3c){if(_0x1aa7e5){return _0x48ea37(_0x1aa7e5);}if(!_0x2aef3c){return _0x48ea37(null,![],{'message':_0xdefd('0x19')});}else{return _0x48ea37(null,_0x5013b8);}});})[_0xdefd('0x15')](function(_0x44495f){_0x48ea37(_0x44495f);});}function sendServiceMail(_0x2027c){return db[_0xdefd('0x1a')][_0xdefd('0x16')]({'where':{'service':!![]},'attributes':['id',_0xdefd('0x1b'),_0xdefd('0x1c')],'include':[{'model':db[_0xdefd('0x1d')],'as':_0xdefd('0x1e')}]})[_0xdefd('0x10')](function(_0x58c888){if(!_0x58c888){throw new Error(_0xdefd('0x1f'));}var _0x16b290={'tls':{'rejectUnauthorized':![]}};if(_0x58c888['Smtp'][_0xdefd('0x20')]){_0x16b290[_0xdefd('0x20')]=_0x58c888[_0xdefd('0x1e')][_0xdefd('0x20')];}else{_0x16b290[_0xdefd('0x21')]=_0x58c888[_0xdefd('0x1e')][_0xdefd('0x21')];_0x16b290[_0xdefd('0x22')]=_0x58c888[_0xdefd('0x1e')][_0xdefd('0x22')];_0x16b290[_0xdefd('0x23')]=_0x58c888[_0xdefd('0x1e')][_0xdefd('0x23')];}if(_0x58c888['Smtp'][_0xdefd('0x24')]){_0x16b290['auth']={'user':_0x58c888[_0xdefd('0x1e')][_0xdefd('0x25')],'pass':_0x58c888[_0xdefd('0x1e')][_0xdefd('0x26')]};}var _0x146025={'account':_0x16b290,'message':_[_0xdefd('0x27')]({'from':util[_0xdefd('0x28')]('\x22%s\x22\x20<%s>',_0x58c888[_0xdefd('0x1b')],_0x58c888['email']||_0x58c888[_0xdefd('0x1e')][_0xdefd('0x25')])},_0x2027c)};return client[_0xdefd('0x29')]('SendMail',_0x146025);})[_0xdefd('0x10')](function(_0x31037f){if(_0x31037f[_0xdefd('0x2a')]){throw new Error(util[_0xdefd('0x28')]('SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!',_0x31037f['error']['message']||JSON[_0xdefd('0x2b')](_0x31037f[_0xdefd('0x2a')])));}return!![];});}function handleError(_0x1c7104,_0x4f97c7,_0xda7cb2){return _0x1c7104['status'](_0x4f97c7||0x1f4)['send']({'message':_0xda7cb2?_0xda7cb2[_0xdefd('0x2c')]||_0xda7cb2:''});}exports[_0xdefd('0x2d')]=function(_0x1ec962,_0x5b2c65,_0x51dea2){passport[_0xdefd('0x18')](_0xdefd('0x2e'),function(_0x321730,_0x25bb67,_0x95ebac){var _0x342893=_0x321730||_0x95ebac;if(_0x342893){return handleError(_0x5b2c65,0x191,_0x342893);}if(!_0x25bb67){return handleError(_0x5b2c65,0x194,{'message':_0xdefd('0x2f')});}var _0x423677=signToken(_0x25bb67['id'],_0x25bb67[_0xdefd('0xc')]);_0x5b2c65['json']({'id':_0x25bb67['id'],'token':_0x423677,'statusCall':'','isAlreadyLogged':_0x25bb67[_0xdefd('0x30')]});})(_0x1ec962,_0x5b2c65,_0x51dea2);};exports[_0xdefd('0x31')]=function(_0x430b46,_0x2809be,_0x4f1f6a){if(!_0x430b46[_0xdefd('0x32')]['email']){return handleError(_0x2809be,0x1f4,{'message':_0xdefd('0x33')});}var _0x4a8a52=rs['generate']();_0x430b46[_0xdefd('0x32')][_0xdefd('0x1c')]=_0x430b46[_0xdefd('0x32')][_0xdefd('0x1c')][_0xdefd('0x34')]()[_0xdefd('0x35')]();return db[_0xdefd('0xe')]['find']({'where':{'email':_0x430b46[_0xdefd('0x32')][_0xdefd('0x1c')]}})[_0xdefd('0x10')](function(_0x1e23ab){if(!_0x1e23ab){throw new Error(_0xdefd('0x36'));}_0x1e23ab[_0xdefd('0x37')]=_0x4a8a52;_0x1e23ab['resetPasswordExpires']=Date['now']()+0x36ee80;return _0x1e23ab[_0xdefd('0x38')]();})['then'](function(){return sendServiceMail({'to':_0x430b46[_0xdefd('0x32')][_0xdefd('0x1c')],'subject':_0xdefd('0x39'),'text':'You\x20are\x20receiving\x20this\x20because\x20you\x20(or\x20someone\x20else)\x20have\x20requested\x20the\x20reset\x20of\x20the\x20password\x20for\x20your\x20account.\x0a\x0a'+_0xdefd('0x3a')+_0xdefd('0x3b')+_0x430b46[_0xdefd('0x3c')][_0xdefd('0x21')]+'/reset/'+_0x4a8a52+'\x0a\x0a'+'If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a'});})[_0xdefd('0x10')](function(){_0x2809be[_0xdefd('0x3d')](0xc8)[_0xdefd('0x3e')]({'message':_0xdefd('0x3f')});})['catch'](function(_0x54113d){return handleError(_0x2809be,0x1f4,_0x54113d);});};exports['reset']=function(_0x37e039,_0x129c80,_0x142fe3){return db[_0xdefd('0xe')]['find']({'where':{'resetPasswordToken':_0x37e039['params'][_0xdefd('0x40')],'resetPasswordExpires':{'$gt':Date[_0xdefd('0x41')]()}}})['then'](function(_0x3d3a02){if(!_0x3d3a02){throw new Error(_0xdefd('0x42'));}_0x3d3a02[_0xdefd('0x43')]=_0x37e039[_0xdefd('0x32')][_0xdefd('0x43')];_0x3d3a02[_0xdefd('0x37')]=null;_0x3d3a02[_0xdefd('0x44')]=null;return _0x3d3a02['save']();})[_0xdefd('0x10')](function(){_0x129c80[_0xdefd('0x3d')](0xc8)['send']({'message':_0xdefd('0x45')});})[_0xdefd('0x15')](function(_0x18d15e){return handleError(_0x129c80,0x1f4,_0x18d15e);});};passport[_0xdefd('0x46')](new LocalStrategy({'usernameField':'name','passwordField':_0xdefd('0x43')},function(_0x3f9de4,_0xe95d6e,_0x428694){return localAuthenticate(db[_0xdefd('0xe')],_0x3f9de4,_0xe95d6e,_0x428694);}));
\ No newline at end of file
+var _0x4cc3=['Something\x20went\x20wrong,\x20please\x20try\x20again.','json','forgot','body','email','Email\x20parameter\x20is\x20missing','generate','toLowerCase','This\x20email\x20is\x20not\x20registered.','resetPasswordToken','now','save','You\x20are\x20receiving\x20this\x20because\x20you\x20(or\x20someone\x20else)\x20have\x20requested\x20the\x20reset\x20of\x20the\x20password\x20for\x20your\x20account.\x0a\x0a','Please\x20click\x20on\x20the\x20following\x20link,\x20or\x20paste\x20this\x20into\x20your\x20browser\x20to\x20complete\x20the\x20process:\x0a\x0a','headers','/reset/','If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a','Reset\x20Email\x20sent!','reset','params','token','password','resetPasswordExpires','status','send','Password\x20reset!','use','passport','Strategy','jayson/promise','lodash','../../config/logger','randomstring','signToken','client','role','User','agent','then','../../config/license/util','getLicense','agents','Maximum\x20login\x20has\x20been\x20reached','catch','find','trim','admin','user','authenticate','This\x20password\x20is\x20not\x20correct.','MailAccount','Smtp','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','service','host','port','secure','auth','pass','merge','name','request','SendMail','error','format','SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!','message','login','local'];(function(_0x357ae5,_0x59df38){var _0x1c6db9=function(_0x5e3e6a){while(--_0x5e3e6a){_0x357ae5['push'](_0x357ae5['shift']());}};_0x1c6db9(++_0x59df38);}(_0x4cc3,0xa5));var _0x34cc=function(_0x4b0546,_0x21bbe4){_0x4b0546=_0x4b0546-0x0;var _0x2332fd=_0x4cc3[_0x4b0546];return _0x2332fd;};'use strict';var util=require('util');var passport=require(_0x34cc('0x0'));var LocalStrategy=require('passport-local')[_0x34cc('0x1')];var BPromise=require('bluebird');var jayson=require(_0x34cc('0x2'));var _=require(_0x34cc('0x3'));var logger=require(_0x34cc('0x4'))('api');var rs=require(_0x34cc('0x5'));var db=require('../../mysqldb')['db'];var signToken=require('../../components/auth/service')[_0x34cc('0x6')];var client=jayson[_0x34cc('0x7')]['http']({'port':0x232b});var getLicense=function(_0x3b2dba){return new BPromise(function(_0xb8a14c,_0x4f8807){var _0x21af83=0x0;_0x3b2dba[_0x34cc('0x8')]!=='agent'&&_0xb8a14c(_0x3b2dba);return db[_0x34cc('0x9')]['count']({'where':{'role':_0x34cc('0xa'),'online':!![],'id':{'$ne':_0x3b2dba['id']}}})[_0x34cc('0xb')](function(_0x46d67f){_0x21af83=_0x46d67f;return require(_0x34cc('0xc'))[_0x34cc('0xd')]();})['then'](function(_0x367b0d){if(_0x367b0d&&_0x367b0d['agents']&&_0x21af83>=_0x367b0d[_0x34cc('0xe')]){return _0x4f8807({'message':_0x34cc('0xf')});}return _0xb8a14c(_0x3b2dba);})[_0x34cc('0x10')](function(_0x1272e6){return _0x4f8807(_0x1272e6);});});};function localAuthenticate(_0x5c9cc2,_0x1e88c8,_0x1170b9,_0x2c2dcc){var _0x40731e;_0x5c9cc2[_0x34cc('0x11')]({'where':{'name':_0x1e88c8[_0x34cc('0x12')](),'role':{'$or':[_0x34cc('0x13'),_0x34cc('0x14'),'agent']}}})['then'](function(_0x55cc43){if(!_0x55cc43){return _0x2c2dcc(null,![],{'message':'This\x20name\x20is\x20not\x20registered.'});}return getLicense(_0x55cc43);})[_0x34cc('0xb')](function(_0x2ad421){_0x2ad421[_0x34cc('0x15')](_0x1170b9,function(_0x253391,_0x42ec80){if(_0x253391){return _0x2c2dcc(_0x253391);}if(!_0x42ec80){return _0x2c2dcc(null,![],{'message':_0x34cc('0x16')});}else{return _0x2c2dcc(null,_0x2ad421);}});})[_0x34cc('0x10')](function(_0x42bebf){_0x2c2dcc(_0x42bebf);});}function sendServiceMail(_0x52df46){return db[_0x34cc('0x17')]['find']({'where':{'service':!![]},'attributes':['id','name','email'],'include':[{'model':db['MailServerOut'],'as':_0x34cc('0x18')}]})[_0x34cc('0xb')](function(_0x5c08f8){if(!_0x5c08f8){throw new Error(_0x34cc('0x19'));}var _0x477bdb={'tls':{'rejectUnauthorized':![]}};if(_0x5c08f8[_0x34cc('0x18')][_0x34cc('0x1a')]){_0x477bdb[_0x34cc('0x1a')]=_0x5c08f8[_0x34cc('0x18')]['service'];}else{_0x477bdb[_0x34cc('0x1b')]=_0x5c08f8[_0x34cc('0x18')]['host'];_0x477bdb[_0x34cc('0x1c')]=_0x5c08f8[_0x34cc('0x18')][_0x34cc('0x1c')];_0x477bdb['secure']=_0x5c08f8[_0x34cc('0x18')][_0x34cc('0x1d')];}if(_0x5c08f8[_0x34cc('0x18')]['authentication']){_0x477bdb[_0x34cc('0x1e')]={'user':_0x5c08f8[_0x34cc('0x18')]['user'],'pass':_0x5c08f8[_0x34cc('0x18')][_0x34cc('0x1f')]};}var _0x1e2fab={'account':_0x477bdb,'message':_[_0x34cc('0x20')]({'from':util['format']('\x22%s\x22\x20<%s>',_0x5c08f8[_0x34cc('0x21')],_0x5c08f8['email']||_0x5c08f8[_0x34cc('0x18')][_0x34cc('0x14')])},_0x52df46)};return client[_0x34cc('0x22')](_0x34cc('0x23'),_0x1e2fab);})[_0x34cc('0xb')](function(_0x5a65fd){if(_0x5a65fd[_0x34cc('0x24')]){throw new Error(util[_0x34cc('0x25')](_0x34cc('0x26'),_0x5a65fd[_0x34cc('0x24')][_0x34cc('0x27')]||JSON['stringify'](_0x5a65fd[_0x34cc('0x24')])));}return!![];});}function handleError(_0x1a79ca,_0x2c6e21,_0x45d88a){return _0x1a79ca['status'](_0x2c6e21||0x1f4)['send']({'message':_0x45d88a?_0x45d88a['message']||_0x45d88a:''});}exports[_0x34cc('0x28')]=function(_0x47b2e4,_0x534757,_0x465f2d){passport['authenticate'](_0x34cc('0x29'),function(_0x202c8e,_0x242cc2,_0x35a5f1){var _0x3ab820=_0x202c8e||_0x35a5f1;if(_0x3ab820){return handleError(_0x534757,0x191,_0x3ab820);}if(!_0x242cc2){return handleError(_0x534757,0x194,{'message':_0x34cc('0x2a')});}var _0x3225ae=signToken(_0x242cc2['id'],_0x242cc2[_0x34cc('0x8')]);_0x534757[_0x34cc('0x2b')]({'id':_0x242cc2['id'],'token':_0x3225ae,'statusCall':'','isAlreadyLogged':_0x242cc2['online']});})(_0x47b2e4,_0x534757,_0x465f2d);};exports[_0x34cc('0x2c')]=function(_0x1f9bf4,_0x3427b5,_0x55fc2b){if(!_0x1f9bf4[_0x34cc('0x2d')][_0x34cc('0x2e')]){return handleError(_0x3427b5,0x1f4,{'message':_0x34cc('0x2f')});}var _0x55262f=rs[_0x34cc('0x30')]();_0x1f9bf4[_0x34cc('0x2d')][_0x34cc('0x2e')]=_0x1f9bf4[_0x34cc('0x2d')][_0x34cc('0x2e')][_0x34cc('0x12')]()[_0x34cc('0x31')]();return db['User']['find']({'where':{'email':_0x1f9bf4['body'][_0x34cc('0x2e')]}})[_0x34cc('0xb')](function(_0x248f65){if(!_0x248f65){throw new Error(_0x34cc('0x32'));}_0x248f65[_0x34cc('0x33')]=_0x55262f;_0x248f65['resetPasswordExpires']=Date[_0x34cc('0x34')]()+0x36ee80;return _0x248f65[_0x34cc('0x35')]();})[_0x34cc('0xb')](function(){return sendServiceMail({'to':_0x1f9bf4[_0x34cc('0x2d')][_0x34cc('0x2e')],'subject':'xCally\x20Motion\x20Password\x20Reset','text':_0x34cc('0x36')+_0x34cc('0x37')+'http://'+_0x1f9bf4[_0x34cc('0x38')]['host']+_0x34cc('0x39')+_0x55262f+'\x0a\x0a'+_0x34cc('0x3a')});})[_0x34cc('0xb')](function(){_0x3427b5['status'](0xc8)['send']({'message':_0x34cc('0x3b')});})['catch'](function(_0x48fcde){return handleError(_0x3427b5,0x1f4,_0x48fcde);});};exports[_0x34cc('0x3c')]=function(_0x46938a,_0x23dba4,_0x1c33d6){return db['User'][_0x34cc('0x11')]({'where':{'resetPasswordToken':_0x46938a[_0x34cc('0x3d')][_0x34cc('0x3e')],'resetPasswordExpires':{'$gt':Date['now']()}}})['then'](function(_0x28a1f5){if(!_0x28a1f5){throw new Error('Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.');}_0x28a1f5[_0x34cc('0x3f')]=_0x46938a[_0x34cc('0x2d')][_0x34cc('0x3f')];_0x28a1f5[_0x34cc('0x33')]=null;_0x28a1f5[_0x34cc('0x40')]=null;return _0x28a1f5[_0x34cc('0x35')]();})[_0x34cc('0xb')](function(){_0x23dba4[_0x34cc('0x41')](0xc8)[_0x34cc('0x42')]({'message':_0x34cc('0x43')});})[_0x34cc('0x10')](function(_0x119a6d){return handleError(_0x23dba4,0x1f4,_0x119a6d);});};passport[_0x34cc('0x44')](new LocalStrategy({'usernameField':_0x34cc('0x21'),'passwordField':_0x34cc('0x3f')},function(_0x2b0810,_0x22191a,_0x5462c6){return localAuthenticate(db[_0x34cc('0x9')],_0x2b0810,_0x22191a,_0x5462c6);}));
\ No newline at end of file
index d1576db..273b63a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x45ff=['login','/forgot','forgot','reset','exports','express','Router','./authLocal.controller','post'];(function(_0x4e3ed9,_0x22fb66){var _0x2a654a=function(_0x1436ec){while(--_0x1436ec){_0x4e3ed9['push'](_0x4e3ed9['shift']());}};_0x2a654a(++_0x22fb66);}(_0x45ff,0x152));var _0xf45f=function(_0x40015a,_0x415db5){_0x40015a=_0x40015a-0x0;var _0x42f8a4=_0x45ff[_0x40015a];return _0x42f8a4;};'use strict';var express=require(_0xf45f('0x0'));var router=express[_0xf45f('0x1')]();var controller=require(_0xf45f('0x2'));router[_0xf45f('0x3')]('/',controller[_0xf45f('0x4')]);router[_0xf45f('0x3')](_0xf45f('0x5'),controller[_0xf45f('0x6')]);router[_0xf45f('0x3')]('/reset/:token',controller[_0xf45f('0x7')]);module[_0xf45f('0x8')]=router;
\ No newline at end of file
+var _0x94ff=['reset','exports','express','post','/forgot','forgot','/reset/:token'];(function(_0x4e676e,_0x2a7c6d){var _0x336a3c=function(_0x4767c4){while(--_0x4767c4){_0x4e676e['push'](_0x4e676e['shift']());}};_0x336a3c(++_0x2a7c6d);}(_0x94ff,0x72));var _0xf94f=function(_0x5f1dbf,_0x477148){_0x5f1dbf=_0x5f1dbf-0x0;var _0x3c0ebd=_0x94ff[_0x5f1dbf];return _0x3c0ebd;};'use strict';var express=require(_0xf94f('0x0'));var router=express['Router']();var controller=require('./authLocal.controller');router[_0xf94f('0x1')]('/',controller['login']);router[_0xf94f('0x1')](_0xf94f('0x2'),controller[_0xf94f('0x3')]);router[_0xf94f('0x1')](_0xf94f('0x4'),controller[_0xf94f('0x5')]);module[_0xf94f('0x6')]=router;
\ No newline at end of file
index 79effbe..c7fc430 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d08=['BOOLEAN','sequelize','exports','STRING'];(function(_0x57e0cf,_0x1ab0ac){var _0x16c243=function(_0xdc3e4){while(--_0xdc3e4){_0x57e0cf['push'](_0x57e0cf['shift']());}};_0x16c243(++_0x1ab0ac);}(_0x2d08,0x129));var _0x82d0=function(_0x7ad123,_0xeeeef3){_0x7ad123=_0x7ad123-0x0;var _0x37d073=_0x2d08[_0x7ad123];return _0x37d073;};'use strict';var Sequelize=require(_0x82d0('0x0'));module[_0x82d0('0x1')]={'name':{'type':Sequelize[_0x82d0('0x2')],'allowNull':![]},'channel':{'type':Sequelize[_0x82d0('0x2')]},'description':{'type':Sequelize[_0x82d0('0x2')]},'status':{'type':Sequelize[_0x82d0('0x3')],'defaultValue':![]},'timeout':{'type':Sequelize['INTEGER'],'defaultValue':0xa}};
\ No newline at end of file
+var _0x2ab7=['STRING','BOOLEAN','INTEGER','exports'];(function(_0x4e5bc0,_0x350dc6){var _0x3b0dd3=function(_0x53c30b){while(--_0x53c30b){_0x4e5bc0['push'](_0x4e5bc0['shift']());}};_0x3b0dd3(++_0x350dc6);}(_0x2ab7,0x187));var _0x72ab=function(_0x407051,_0x45cdff){_0x407051=_0x407051-0x0;var _0x43d081=_0x2ab7[_0x407051];return _0x43d081;};'use strict';var Sequelize=require('sequelize');module[_0x72ab('0x0')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'channel':{'type':Sequelize[_0x72ab('0x1')]},'description':{'type':Sequelize['STRING']},'status':{'type':Sequelize[_0x72ab('0x2')],'defaultValue':![]},'timeout':{'type':Sequelize[_0x72ab('0x3')],'defaultValue':0xa}};
\ No newline at end of file
index 8e2033d..0c3125f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0106=['find','create','body','addConditions','Condition','omit','ids','getConditions','findOne','order','map','nolimit','addActions','Action','fast-json-patch','request-promise','moment','util','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/environment','status','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','end','name','send','rawAttributes','query','dateStart','dateEnd','intersection','model','attributes','fields','length','hasOwnProperty','sort','where','pick','filters','add','day','merge','filter','options','Automation','count','then','includeAll','include','findAll','rows','catch','params','keys'];(function(_0x2dc6ef,_0x3e224f){var _0x48593a=function(_0x536f8c){while(--_0x536f8c){_0x2dc6ef['push'](_0x2dc6ef['shift']());}};_0x48593a(++_0x3e224f);}(_0x0106,0x1c4));var _0x6010=function(_0x3a61c3,_0x2d5509){_0x3a61c3=_0x3a61c3-0x0;var _0x4e2483=_0x0106[_0x3a61c3];return _0x4e2483;};'use strict';var jsonpatch=require(_0x6010('0x0'));var rp=require(_0x6010('0x1'));var moment=require(_0x6010('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x6010('0x3'));var path=require('path');var sox=require('sox');var csv=require(_0x6010('0x4'));var ejs=require(_0x6010('0x5'));var fs=require('fs');var _=require(_0x6010('0x6'));var squel=require(_0x6010('0x7'));var crypto=require(_0x6010('0x8'));var jsforce=require(_0x6010('0x9'));var deskjs=require(_0x6010('0xa'));var toCsv=require(_0x6010('0x4'));var querystring=require(_0x6010('0xb'));var Papa=require(_0x6010('0xc'));var qs=require(_0x6010('0xd'));var logger=require(_0x6010('0xe'))('api');var utils=require('../../config/utils');var config=require(_0x6010('0xf'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x11bcd0,_0x380ba1){_0x380ba1=_0x380ba1||0xcc;return function(_0x1a93fb){if(_0x1a93fb){return _0x11bcd0['sendStatus'](_0x380ba1);}return _0x11bcd0[_0x6010('0x10')](_0x380ba1)['end']();};}function respondWithResult(_0x5c8775,_0x1fe97a){_0x1fe97a=_0x1fe97a||0xc8;return function(_0x3b9d1e){if(_0x3b9d1e){return _0x5c8775['status'](_0x1fe97a)[_0x6010('0x11')](_0x3b9d1e);}};}function respondWithFilteredResult(_0x4ec0a6,_0x258a55){return function(_0x104cf8){if(_0x104cf8){var _0x57cc6e=_0x104cf8['count'],_0x350999=_0x258a55[_0x6010('0x12')],_0x4b2284=_0x258a55['offset']+_0x258a55[_0x6010('0x13')],_0x442951;if(_0x4b2284>=_0x57cc6e){_0x4b2284=_0x57cc6e;_0x442951=0xc8;}else{_0x442951=0xce;}_0x4ec0a6[_0x6010('0x10')](_0x442951);return _0x4ec0a6[_0x6010('0x14')](_0x6010('0x15'),_0x350999+'-'+_0x4b2284+'/'+_0x57cc6e)[_0x6010('0x11')](_0x104cf8);}return null;};}function patchUpdates(_0x104d06){return function(_0x49b13f){try{jsonpatch[_0x6010('0x16')](_0x49b13f,_0x104d06,!![]);}catch(_0x5a8321){return BPromise[_0x6010('0x17')](_0x5a8321);}return _0x49b13f[_0x6010('0x18')]();};}function saveUpdates(_0x1446ac,_0x846ea9){return function(_0x5cfef9){if(_0x5cfef9){return _0x5cfef9[_0x6010('0x19')](_0x1446ac)['then'](function(_0x20bc27){return _0x20bc27;});}return null;};}function removeEntity(_0x521b3a,_0x1714a7){return function(_0x503815){if(_0x503815){return _0x503815[_0x6010('0x1a')]()['then'](function(){_0x521b3a[_0x6010('0x10')](0xcc)[_0x6010('0x1b')]();});}};}function handleEntityNotFound(_0x1b3923,_0x2602c7){return function(_0x4ee2ab){if(!_0x4ee2ab){_0x1b3923['sendStatus'](0x194);}return _0x4ee2ab;};}function handleError(_0x24a7cf,_0x2b07b9){_0x2b07b9=_0x2b07b9||0x1f4;return function(_0x30ec0b){logger['error'](_0x30ec0b['stack']);if(_0x30ec0b[_0x6010('0x1c')]){delete _0x30ec0b[_0x6010('0x1c')];}_0x24a7cf[_0x6010('0x10')](_0x2b07b9)[_0x6010('0x1d')](_0x30ec0b);};}exports['index']=function(_0x43a2e5,_0x1d0904){var _0x4bfb5a={},_0x1bcad7={},_0x4aa1ce={'count':0x0,'rows':[]};var _0x22bbaa=db['Automation'][_0x6010('0x1e')];_0x1bcad7['model']=_['keys'](_0x22bbaa);var _0x230aec={'dateStart':_0x43a2e5[_0x6010('0x1f')][_0x6010('0x20')],'dateEnd':_0x43a2e5[_0x6010('0x1f')][_0x6010('0x21')]};delete _0x43a2e5[_0x6010('0x1f')][_0x6010('0x20')];delete _0x43a2e5[_0x6010('0x1f')]['dateEnd'];_0x1bcad7[_0x6010('0x1f')]=_['keys'](_0x43a2e5[_0x6010('0x1f')]);_0x1bcad7['filters']=_[_0x6010('0x22')](_0x1bcad7[_0x6010('0x23')],_0x1bcad7[_0x6010('0x1f')]);_0x4bfb5a[_0x6010('0x24')]=_[_0x6010('0x22')](_0x1bcad7[_0x6010('0x23')],qs[_0x6010('0x25')](_0x43a2e5[_0x6010('0x1f')][_0x6010('0x25')]));_0x4bfb5a['attributes']=_0x4bfb5a[_0x6010('0x24')][_0x6010('0x26')]?_0x4bfb5a[_0x6010('0x24')]:_0x1bcad7[_0x6010('0x23')];if(!_0x43a2e5[_0x6010('0x1f')][_0x6010('0x27')]('nolimit')){_0x4bfb5a[_0x6010('0x13')]=qs[_0x6010('0x13')](_0x43a2e5[_0x6010('0x1f')]['limit']);_0x4bfb5a[_0x6010('0x12')]=qs['offset'](_0x43a2e5[_0x6010('0x1f')][_0x6010('0x12')]);}_0x4bfb5a['order']=qs[_0x6010('0x28')](_0x43a2e5[_0x6010('0x1f')][_0x6010('0x28')]);_0x4bfb5a[_0x6010('0x29')]=qs['filters'](_[_0x6010('0x2a')](_0x43a2e5['query'],_0x1bcad7[_0x6010('0x2b')]));if(_0x230aec[_0x6010('0x20')]){if(_0x230aec[_0x6010('0x21')]){_0x230aec[_0x6010('0x21')]=moment(_0x230aec[_0x6010('0x21')])[_0x6010('0x2c')](0x1,_0x6010('0x2d'));}else{_0x230aec[_0x6010('0x21')]=moment(_0x230aec[_0x6010('0x20')])['add'](0x1,_0x6010('0x2d'));}_[_0x6010('0x2e')](_0x4bfb5a[_0x6010('0x29')],{'createdAt':{'$gte':_0x230aec[_0x6010('0x20')],'$lte':_0x230aec[_0x6010('0x21')]}});}if(_0x43a2e5[_0x6010('0x1f')]['filter']){_0x4bfb5a[_0x6010('0x29')]=_[_0x6010('0x2e')](_0x4bfb5a[_0x6010('0x29')],{'$or':_['map'](_0x4bfb5a[_0x6010('0x24')],function(_0x5d3885){var _0x382a20={};_0x382a20[_0x5d3885]={'$like':'%'+_0x43a2e5[_0x6010('0x1f')][_0x6010('0x2f')]+'%'};return _0x382a20;})});}_0x4bfb5a=_[_0x6010('0x2e')]({},_0x4bfb5a,_0x43a2e5[_0x6010('0x30')]);var _0x51577a={'where':_0x4bfb5a[_0x6010('0x29')]};return db[_0x6010('0x31')][_0x6010('0x32')](_0x51577a)[_0x6010('0x33')](function(_0x53b680){_0x4aa1ce[_0x6010('0x32')]=_0x53b680;if(_0x43a2e5['query'][_0x6010('0x34')]){_0x4bfb5a[_0x6010('0x35')]=[{'all':!![]}];}return db[_0x6010('0x31')][_0x6010('0x36')](_0x4bfb5a);})[_0x6010('0x33')](function(_0x14ed04){_0x4aa1ce[_0x6010('0x37')]=_0x14ed04;return _0x4aa1ce;})[_0x6010('0x33')](respondWithFilteredResult(_0x1d0904,_0x4bfb5a))[_0x6010('0x38')](handleError(_0x1d0904,null));};exports['show']=function(_0x546fde,_0x4dc440){var _0x14f54a={'raw':![],'where':{'id':_0x546fde[_0x6010('0x39')]['id']}},_0x2c10c1={};_0x2c10c1[_0x6010('0x23')]=_[_0x6010('0x3a')](db[_0x6010('0x31')][_0x6010('0x1e')]);_0x2c10c1[_0x6010('0x1f')]=_[_0x6010('0x3a')](_0x546fde[_0x6010('0x1f')]);_0x2c10c1['filters']=_['intersection'](_0x2c10c1[_0x6010('0x23')],_0x2c10c1[_0x6010('0x1f')]);_0x14f54a[_0x6010('0x24')]=_['intersection'](_0x2c10c1[_0x6010('0x23')],qs[_0x6010('0x25')](_0x546fde[_0x6010('0x1f')]['fields']));_0x14f54a[_0x6010('0x24')]=_0x14f54a[_0x6010('0x24')][_0x6010('0x26')]?_0x14f54a[_0x6010('0x24')]:_0x2c10c1[_0x6010('0x23')];if(_0x546fde[_0x6010('0x1f')][_0x6010('0x34')]){_0x14f54a[_0x6010('0x35')]=[{'all':!![]}];}_0x14f54a=_[_0x6010('0x2e')]({},_0x14f54a,_0x546fde[_0x6010('0x30')]);return db[_0x6010('0x31')][_0x6010('0x3b')](_0x14f54a)[_0x6010('0x33')](handleEntityNotFound(_0x4dc440,null))[_0x6010('0x33')](respondWithResult(_0x4dc440,null))[_0x6010('0x38')](handleError(_0x4dc440,null));};exports['create']=function(_0x535981,_0x4ba35c){return db[_0x6010('0x31')][_0x6010('0x3c')](_0x535981[_0x6010('0x3d')],{})['then'](respondWithResult(_0x4ba35c,0xc9))[_0x6010('0x38')](handleError(_0x4ba35c,null));};exports[_0x6010('0x19')]=function(_0x36e337,_0x13cabb){if(_0x36e337[_0x6010('0x3d')]['id']){delete _0x36e337['body']['id'];}return db[_0x6010('0x31')][_0x6010('0x3b')]({'where':{'id':_0x36e337['params']['id']}})[_0x6010('0x33')](handleEntityNotFound(_0x13cabb,null))[_0x6010('0x33')](saveUpdates(_0x36e337[_0x6010('0x3d')],null))[_0x6010('0x33')](respondWithResult(_0x13cabb,null))[_0x6010('0x38')](handleError(_0x13cabb,null));};exports[_0x6010('0x1a')]=function(_0x342c45,_0x2ababc){return db[_0x6010('0x31')][_0x6010('0x3b')]({'where':{'id':_0x342c45[_0x6010('0x39')]['id']}})[_0x6010('0x33')](handleEntityNotFound(_0x2ababc,null))['then'](removeEntity(_0x2ababc,null))['catch'](handleError(_0x2ababc,null));};exports[_0x6010('0x3e')]=function(_0x46d3c0,_0xe275f2,_0x462966){return db[_0x6010('0x3f')][_0x6010('0x3b')]({'where':{'id':_0x46d3c0[_0x6010('0x39')]['id']}})[_0x6010('0x33')](handleEntityNotFound(_0xe275f2,null))[_0x6010('0x33')](function(_0x47a0c9){if(_0x47a0c9){return _0x47a0c9[_0x6010('0x3e')](_0x46d3c0[_0x6010('0x3d')]['ids'],_[_0x6010('0x40')](_0x46d3c0[_0x6010('0x3d')],[_0x6010('0x41'),'id'])||{});}})['then'](respondWithResult(_0xe275f2,null))[_0x6010('0x38')](handleError(_0xe275f2,null));};exports[_0x6010('0x42')]=function(_0x1f9e41,_0x2eb619,_0xf0ef76){var _0x35639={};var _0x36cece={};var _0x4a1972;var _0xaee901;return db[_0x6010('0x31')][_0x6010('0x43')]({'where':{'id':_0x1f9e41[_0x6010('0x39')]['id']}})[_0x6010('0x33')](handleEntityNotFound(_0x2eb619,null))['then'](function(_0x105a0e){if(_0x105a0e){_0x4a1972=_0x105a0e;_0x36cece[_0x6010('0x23')]=_[_0x6010('0x3a')](db[_0x6010('0x3f')][_0x6010('0x1e')]);_0x36cece['query']=_[_0x6010('0x3a')](_0x1f9e41[_0x6010('0x1f')]);_0x36cece[_0x6010('0x2b')]=_[_0x6010('0x22')](_0x36cece['model'],_0x36cece[_0x6010('0x1f')]);_0x35639[_0x6010('0x24')]=_[_0x6010('0x22')](_0x36cece[_0x6010('0x23')],qs[_0x6010('0x25')](_0x1f9e41['query'][_0x6010('0x25')]));_0x35639[_0x6010('0x24')]=_0x35639[_0x6010('0x24')][_0x6010('0x26')]?_0x35639['attributes']:_0x36cece['model'];_0x35639[_0x6010('0x44')]=qs[_0x6010('0x28')](_0x1f9e41[_0x6010('0x1f')][_0x6010('0x28')]);_0x35639[_0x6010('0x29')]=qs[_0x6010('0x2b')](_['pick'](_0x1f9e41[_0x6010('0x1f')],_0x36cece[_0x6010('0x2b')]));if(_0x1f9e41[_0x6010('0x1f')]['filter']){_0x35639['where']=_[_0x6010('0x2e')](_0x35639[_0x6010('0x29')],{'$or':_[_0x6010('0x45')](_0x35639[_0x6010('0x24')],function(_0x3833c6){var _0x3d2838={};_0x3d2838[_0x3833c6]={'$like':'%'+_0x1f9e41[_0x6010('0x1f')][_0x6010('0x2f')]+'%'};return _0x3d2838;})});}_0x35639=_[_0x6010('0x2e')]({},_0x35639,_0x1f9e41[_0x6010('0x30')]);return _0x4a1972[_0x6010('0x42')](_0x35639);}})[_0x6010('0x33')](function(_0x43a5d1){if(_0x43a5d1){_0xaee901=_0x43a5d1[_0x6010('0x26')];if(!_0x1f9e41['query']['hasOwnProperty'](_0x6010('0x46'))){_0x35639[_0x6010('0x13')]=qs['limit'](_0x1f9e41[_0x6010('0x1f')]['limit']);_0x35639[_0x6010('0x12')]=qs[_0x6010('0x12')](_0x1f9e41[_0x6010('0x1f')][_0x6010('0x12')]);}return _0x4a1972[_0x6010('0x42')](_0x35639);}})[_0x6010('0x33')](function(_0x402d25){if(_0x402d25){return _0x402d25?{'count':_0xaee901,'rows':_0x402d25}:null;}})[_0x6010('0x33')](respondWithResult(_0x2eb619,null))[_0x6010('0x38')](handleError(_0x2eb619,null));};exports[_0x6010('0x47')]=function(_0x3520bb,_0x259ba1,_0x86a6bf){return db[_0x6010('0x48')][_0x6010('0x3b')]({'where':{'id':_0x3520bb[_0x6010('0x39')]['id']}})[_0x6010('0x33')](handleEntityNotFound(_0x259ba1,null))['then'](function(_0x5dcfcb){if(_0x5dcfcb){return _0x5dcfcb[_0x6010('0x47')](_0x3520bb[_0x6010('0x3d')]['ids'],_['omit'](_0x3520bb['body'],['ids','id'])||{});}})[_0x6010('0x33')](respondWithResult(_0x259ba1,null))['catch'](handleError(_0x259ba1,null));};exports['getActions']=function(_0xf0f48,_0x4339a5,_0x327a9e){var _0x49e2c6={};var _0xafab14={};var _0xbc591d;var _0x59dfac;return db['Automation']['findOne']({'where':{'id':_0xf0f48[_0x6010('0x39')]['id']}})[_0x6010('0x33')](handleEntityNotFound(_0x4339a5,null))['then'](function(_0x4f903a){if(_0x4f903a){_0xbc591d=_0x4f903a;_0xafab14['model']=_[_0x6010('0x3a')](db[_0x6010('0x48')][_0x6010('0x1e')]);_0xafab14[_0x6010('0x1f')]=_['keys'](_0xf0f48[_0x6010('0x1f')]);_0xafab14[_0x6010('0x2b')]=_[_0x6010('0x22')](_0xafab14[_0x6010('0x23')],_0xafab14[_0x6010('0x1f')]);_0x49e2c6[_0x6010('0x24')]=_[_0x6010('0x22')](_0xafab14[_0x6010('0x23')],qs[_0x6010('0x25')](_0xf0f48[_0x6010('0x1f')]['fields']));_0x49e2c6[_0x6010('0x24')]=_0x49e2c6[_0x6010('0x24')]['length']?_0x49e2c6['attributes']:_0xafab14['model'];_0x49e2c6[_0x6010('0x44')]=qs['sort'](_0xf0f48[_0x6010('0x1f')][_0x6010('0x28')]);_0x49e2c6['where']=qs[_0x6010('0x2b')](_[_0x6010('0x2a')](_0xf0f48[_0x6010('0x1f')],_0xafab14[_0x6010('0x2b')]));if(_0xf0f48[_0x6010('0x1f')]['filter']){_0x49e2c6[_0x6010('0x29')]=_[_0x6010('0x2e')](_0x49e2c6[_0x6010('0x29')],{'$or':_[_0x6010('0x45')](_0x49e2c6[_0x6010('0x24')],function(_0x18c240){var _0x35932b={};_0x35932b[_0x18c240]={'$like':'%'+_0xf0f48[_0x6010('0x1f')][_0x6010('0x2f')]+'%'};return _0x35932b;})});}_0x49e2c6=_[_0x6010('0x2e')]({},_0x49e2c6,_0xf0f48[_0x6010('0x30')]);return _0xbc591d['getActions'](_0x49e2c6);}})[_0x6010('0x33')](function(_0x5ac0c5){if(_0x5ac0c5){_0x59dfac=_0x5ac0c5[_0x6010('0x26')];if(!_0xf0f48['query'][_0x6010('0x27')](_0x6010('0x46'))){_0x49e2c6['limit']=qs[_0x6010('0x13')](_0xf0f48['query'][_0x6010('0x13')]);_0x49e2c6[_0x6010('0x12')]=qs[_0x6010('0x12')](_0xf0f48[_0x6010('0x1f')]['offset']);}return _0xbc591d['getActions'](_0x49e2c6);}})[_0x6010('0x33')](function(_0xd7b1b6){if(_0xd7b1b6){return _0xd7b1b6?{'count':_0x59dfac,'rows':_0xd7b1b6}:null;}})[_0x6010('0x33')](respondWithResult(_0x4339a5,null))['catch'](handleError(_0x4339a5,null));};
\ No newline at end of file
+var _0x6dee=['include','findAll','rows','catch','show','params','find','create','body','Condition','addConditions','omit','ids','getConditions','findOne','Action','addActions','getActions','fast-json-patch','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../mysqldb','sendStatus','end','status','json','count','offset','set','Content-Range','apply','save','update','destroy','then','error','stack','name','send','index','Automation','rawAttributes','keys','query','dateStart','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','filters','pick','dateEnd','add','day','filter','map','merge','options','includeAll'];(function(_0x30fe74,_0x4a8d1e){var _0x1826bd=function(_0x564649){while(--_0x564649){_0x30fe74['push'](_0x30fe74['shift']());}};_0x1826bd(++_0x4a8d1e);}(_0x6dee,0xff));var _0xe6de=function(_0xe9e0ae,_0x5364ba){_0xe9e0ae=_0xe9e0ae-0x0;var _0x13c349=_0x6dee[_0xe9e0ae];return _0x13c349;};'use strict';var jsonpatch=require(_0xe6de('0x0'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xe6de('0x1'));var Mustache=require(_0xe6de('0x2'));var util=require(_0xe6de('0x3'));var path=require(_0xe6de('0x4'));var sox=require(_0xe6de('0x5'));var csv=require(_0xe6de('0x6'));var ejs=require(_0xe6de('0x7'));var fs=require('fs');var _=require(_0xe6de('0x8'));var squel=require('squel');var crypto=require(_0xe6de('0x9'));var jsforce=require('jsforce');var deskjs=require(_0xe6de('0xa'));var toCsv=require(_0xe6de('0x6'));var querystring=require(_0xe6de('0xb'));var Papa=require(_0xe6de('0xc'));var qs=require(_0xe6de('0xd'));var logger=require('../../config/logger')(_0xe6de('0xe'));var utils=require(_0xe6de('0xf'));var config=require('../../config/environment');var db=require(_0xe6de('0x10'))['db'];function respondWithStatusCode(_0x39ab1e,_0xe36b2a){_0xe36b2a=_0xe36b2a||0xcc;return function(_0x4c3135){if(_0x4c3135){return _0x39ab1e[_0xe6de('0x11')](_0xe36b2a);}return _0x39ab1e['status'](_0xe36b2a)[_0xe6de('0x12')]();};}function respondWithResult(_0x3ad857,_0x3f528c){_0x3f528c=_0x3f528c||0xc8;return function(_0x3d3826){if(_0x3d3826){return _0x3ad857[_0xe6de('0x13')](_0x3f528c)[_0xe6de('0x14')](_0x3d3826);}};}function respondWithFilteredResult(_0x31397e,_0xaa01d9){return function(_0x4d717d){if(_0x4d717d){var _0x6fd1ab=_0x4d717d[_0xe6de('0x15')],_0x36975d=_0xaa01d9[_0xe6de('0x16')],_0x385a7a=_0xaa01d9[_0xe6de('0x16')]+_0xaa01d9['limit'],_0x277d35;if(_0x385a7a>=_0x6fd1ab){_0x385a7a=_0x6fd1ab;_0x277d35=0xc8;}else{_0x277d35=0xce;}_0x31397e['status'](_0x277d35);return _0x31397e[_0xe6de('0x17')](_0xe6de('0x18'),_0x36975d+'-'+_0x385a7a+'/'+_0x6fd1ab)['json'](_0x4d717d);}return null;};}function patchUpdates(_0x5decd5){return function(_0x1c88fd){try{jsonpatch[_0xe6de('0x19')](_0x1c88fd,_0x5decd5,!![]);}catch(_0x4da0dc){return BPromise['reject'](_0x4da0dc);}return _0x1c88fd[_0xe6de('0x1a')]();};}function saveUpdates(_0x5b5487,_0x149191){return function(_0x563673){if(_0x563673){return _0x563673[_0xe6de('0x1b')](_0x5b5487)['then'](function(_0x219d7b){return _0x219d7b;});}return null;};}function removeEntity(_0x1c09f2,_0x25f392){return function(_0x2cedd4){if(_0x2cedd4){return _0x2cedd4[_0xe6de('0x1c')]()[_0xe6de('0x1d')](function(){_0x1c09f2[_0xe6de('0x13')](0xcc)[_0xe6de('0x12')]();});}};}function handleEntityNotFound(_0x352bb4,_0x1b62e6){return function(_0x3f2483){if(!_0x3f2483){_0x352bb4[_0xe6de('0x11')](0x194);}return _0x3f2483;};}function handleError(_0x39d685,_0x24cb7b){_0x24cb7b=_0x24cb7b||0x1f4;return function(_0x3b1dfa){logger[_0xe6de('0x1e')](_0x3b1dfa[_0xe6de('0x1f')]);if(_0x3b1dfa[_0xe6de('0x20')]){delete _0x3b1dfa[_0xe6de('0x20')];}_0x39d685[_0xe6de('0x13')](_0x24cb7b)[_0xe6de('0x21')](_0x3b1dfa);};}exports[_0xe6de('0x22')]=function(_0x53bbbb,_0x1d7ed7){var _0x21c304={},_0x58df6b={},_0x56747c={'count':0x0,'rows':[]};var _0x51a38d=db[_0xe6de('0x23')][_0xe6de('0x24')];_0x58df6b['model']=_[_0xe6de('0x25')](_0x51a38d);var _0x33f948={'dateStart':_0x53bbbb[_0xe6de('0x26')][_0xe6de('0x27')],'dateEnd':_0x53bbbb[_0xe6de('0x26')]['dateEnd']};delete _0x53bbbb[_0xe6de('0x26')]['dateStart'];delete _0x53bbbb[_0xe6de('0x26')]['dateEnd'];_0x58df6b[_0xe6de('0x26')]=_[_0xe6de('0x25')](_0x53bbbb[_0xe6de('0x26')]);_0x58df6b['filters']=_[_0xe6de('0x28')](_0x58df6b['model'],_0x58df6b[_0xe6de('0x26')]);_0x21c304[_0xe6de('0x29')]=_[_0xe6de('0x28')](_0x58df6b[_0xe6de('0x2a')],qs[_0xe6de('0x2b')](_0x53bbbb['query'][_0xe6de('0x2b')]));_0x21c304[_0xe6de('0x29')]=_0x21c304[_0xe6de('0x29')][_0xe6de('0x2c')]?_0x21c304[_0xe6de('0x29')]:_0x58df6b[_0xe6de('0x2a')];if(!_0x53bbbb[_0xe6de('0x26')][_0xe6de('0x2d')](_0xe6de('0x2e'))){_0x21c304[_0xe6de('0x2f')]=qs[_0xe6de('0x2f')](_0x53bbbb[_0xe6de('0x26')]['limit']);_0x21c304[_0xe6de('0x16')]=qs['offset'](_0x53bbbb[_0xe6de('0x26')][_0xe6de('0x16')]);}_0x21c304[_0xe6de('0x30')]=qs[_0xe6de('0x31')](_0x53bbbb[_0xe6de('0x26')][_0xe6de('0x31')]);_0x21c304[_0xe6de('0x32')]=qs[_0xe6de('0x33')](_[_0xe6de('0x34')](_0x53bbbb['query'],_0x58df6b[_0xe6de('0x33')]));if(_0x33f948['dateStart']){if(_0x33f948['dateEnd']){_0x33f948['dateEnd']=moment(_0x33f948[_0xe6de('0x35')])[_0xe6de('0x36')](0x1,'day');}else{_0x33f948[_0xe6de('0x35')]=moment(_0x33f948[_0xe6de('0x27')])[_0xe6de('0x36')](0x1,_0xe6de('0x37'));}_['merge'](_0x21c304[_0xe6de('0x32')],{'createdAt':{'$gte':_0x33f948[_0xe6de('0x27')],'$lte':_0x33f948[_0xe6de('0x35')]}});}if(_0x53bbbb[_0xe6de('0x26')][_0xe6de('0x38')]){_0x21c304[_0xe6de('0x32')]=_['merge'](_0x21c304['where'],{'$or':_[_0xe6de('0x39')](_0x21c304['attributes'],function(_0x1c80c6){var _0xf69429={};_0xf69429[_0x1c80c6]={'$like':'%'+_0x53bbbb[_0xe6de('0x26')]['filter']+'%'};return _0xf69429;})});}_0x21c304=_[_0xe6de('0x3a')]({},_0x21c304,_0x53bbbb[_0xe6de('0x3b')]);var _0x59ad51={'where':_0x21c304[_0xe6de('0x32')]};return db[_0xe6de('0x23')]['count'](_0x59ad51)[_0xe6de('0x1d')](function(_0x195bba){_0x56747c[_0xe6de('0x15')]=_0x195bba;if(_0x53bbbb['query'][_0xe6de('0x3c')]){_0x21c304[_0xe6de('0x3d')]=[{'all':!![]}];}return db[_0xe6de('0x23')][_0xe6de('0x3e')](_0x21c304);})[_0xe6de('0x1d')](function(_0x2ae603){_0x56747c[_0xe6de('0x3f')]=_0x2ae603;return _0x56747c;})[_0xe6de('0x1d')](respondWithFilteredResult(_0x1d7ed7,_0x21c304))[_0xe6de('0x40')](handleError(_0x1d7ed7,null));};exports[_0xe6de('0x41')]=function(_0x10d8bd,_0x3646dc){var _0x3dbc55={'raw':![],'where':{'id':_0x10d8bd[_0xe6de('0x42')]['id']}},_0x3bfc20={};_0x3bfc20['model']=_['keys'](db[_0xe6de('0x23')]['rawAttributes']);_0x3bfc20[_0xe6de('0x26')]=_[_0xe6de('0x25')](_0x10d8bd[_0xe6de('0x26')]);_0x3bfc20['filters']=_[_0xe6de('0x28')](_0x3bfc20[_0xe6de('0x2a')],_0x3bfc20['query']);_0x3dbc55[_0xe6de('0x29')]=_[_0xe6de('0x28')](_0x3bfc20['model'],qs['fields'](_0x10d8bd['query']['fields']));_0x3dbc55[_0xe6de('0x29')]=_0x3dbc55[_0xe6de('0x29')][_0xe6de('0x2c')]?_0x3dbc55[_0xe6de('0x29')]:_0x3bfc20[_0xe6de('0x2a')];if(_0x10d8bd[_0xe6de('0x26')][_0xe6de('0x3c')]){_0x3dbc55[_0xe6de('0x3d')]=[{'all':!![]}];}_0x3dbc55=_[_0xe6de('0x3a')]({},_0x3dbc55,_0x10d8bd[_0xe6de('0x3b')]);return db['Automation'][_0xe6de('0x43')](_0x3dbc55)[_0xe6de('0x1d')](handleEntityNotFound(_0x3646dc,null))[_0xe6de('0x1d')](respondWithResult(_0x3646dc,null))[_0xe6de('0x40')](handleError(_0x3646dc,null));};exports['create']=function(_0xf166c0,_0x306552){return db[_0xe6de('0x23')][_0xe6de('0x44')](_0xf166c0[_0xe6de('0x45')],{})[_0xe6de('0x1d')](respondWithResult(_0x306552,0xc9))[_0xe6de('0x40')](handleError(_0x306552,null));};exports[_0xe6de('0x1b')]=function(_0x25c3c5,_0x59cc62){if(_0x25c3c5[_0xe6de('0x45')]['id']){delete _0x25c3c5[_0xe6de('0x45')]['id'];}return db[_0xe6de('0x23')][_0xe6de('0x43')]({'where':{'id':_0x25c3c5['params']['id']}})[_0xe6de('0x1d')](handleEntityNotFound(_0x59cc62,null))[_0xe6de('0x1d')](saveUpdates(_0x25c3c5[_0xe6de('0x45')],null))[_0xe6de('0x1d')](respondWithResult(_0x59cc62,null))[_0xe6de('0x40')](handleError(_0x59cc62,null));};exports[_0xe6de('0x1c')]=function(_0x76e7d9,_0x4ff8b4){return db[_0xe6de('0x23')][_0xe6de('0x43')]({'where':{'id':_0x76e7d9[_0xe6de('0x42')]['id']}})['then'](handleEntityNotFound(_0x4ff8b4,null))[_0xe6de('0x1d')](removeEntity(_0x4ff8b4,null))[_0xe6de('0x40')](handleError(_0x4ff8b4,null));};exports['addConditions']=function(_0x39f09b,_0x488425,_0x49decf){return db[_0xe6de('0x46')][_0xe6de('0x43')]({'where':{'id':_0x39f09b[_0xe6de('0x42')]['id']}})['then'](handleEntityNotFound(_0x488425,null))['then'](function(_0x5cc417){if(_0x5cc417){return _0x5cc417[_0xe6de('0x47')](_0x39f09b[_0xe6de('0x45')]['ids'],_[_0xe6de('0x48')](_0x39f09b[_0xe6de('0x45')],[_0xe6de('0x49'),'id'])||{});}})[_0xe6de('0x1d')](respondWithResult(_0x488425,null))[_0xe6de('0x40')](handleError(_0x488425,null));};exports[_0xe6de('0x4a')]=function(_0x125bd7,_0x5ecc3d,_0x42fef6){var _0x45d9bd={};var _0x1d45e8={};var _0x30811f;var _0x2ce74b;return db[_0xe6de('0x23')][_0xe6de('0x4b')]({'where':{'id':_0x125bd7['params']['id']}})[_0xe6de('0x1d')](handleEntityNotFound(_0x5ecc3d,null))[_0xe6de('0x1d')](function(_0x2225f5){if(_0x2225f5){_0x30811f=_0x2225f5;_0x1d45e8['model']=_[_0xe6de('0x25')](db['Condition'][_0xe6de('0x24')]);_0x1d45e8[_0xe6de('0x26')]=_[_0xe6de('0x25')](_0x125bd7[_0xe6de('0x26')]);_0x1d45e8[_0xe6de('0x33')]=_['intersection'](_0x1d45e8['model'],_0x1d45e8[_0xe6de('0x26')]);_0x45d9bd[_0xe6de('0x29')]=_[_0xe6de('0x28')](_0x1d45e8[_0xe6de('0x2a')],qs['fields'](_0x125bd7[_0xe6de('0x26')][_0xe6de('0x2b')]));_0x45d9bd[_0xe6de('0x29')]=_0x45d9bd['attributes']['length']?_0x45d9bd[_0xe6de('0x29')]:_0x1d45e8[_0xe6de('0x2a')];_0x45d9bd['order']=qs[_0xe6de('0x31')](_0x125bd7[_0xe6de('0x26')][_0xe6de('0x31')]);_0x45d9bd[_0xe6de('0x32')]=qs['filters'](_[_0xe6de('0x34')](_0x125bd7[_0xe6de('0x26')],_0x1d45e8[_0xe6de('0x33')]));if(_0x125bd7['query'][_0xe6de('0x38')]){_0x45d9bd[_0xe6de('0x32')]=_['merge'](_0x45d9bd[_0xe6de('0x32')],{'$or':_['map'](_0x45d9bd[_0xe6de('0x29')],function(_0xe1e23e){var _0x550977={};_0x550977[_0xe1e23e]={'$like':'%'+_0x125bd7[_0xe6de('0x26')][_0xe6de('0x38')]+'%'};return _0x550977;})});}_0x45d9bd=_[_0xe6de('0x3a')]({},_0x45d9bd,_0x125bd7[_0xe6de('0x3b')]);return _0x30811f[_0xe6de('0x4a')](_0x45d9bd);}})[_0xe6de('0x1d')](function(_0x351fdb){if(_0x351fdb){_0x2ce74b=_0x351fdb[_0xe6de('0x2c')];if(!_0x125bd7[_0xe6de('0x26')][_0xe6de('0x2d')]('nolimit')){_0x45d9bd[_0xe6de('0x2f')]=qs[_0xe6de('0x2f')](_0x125bd7[_0xe6de('0x26')][_0xe6de('0x2f')]);_0x45d9bd[_0xe6de('0x16')]=qs[_0xe6de('0x16')](_0x125bd7['query'][_0xe6de('0x16')]);}return _0x30811f[_0xe6de('0x4a')](_0x45d9bd);}})[_0xe6de('0x1d')](function(_0x2606dc){if(_0x2606dc){return _0x2606dc?{'count':_0x2ce74b,'rows':_0x2606dc}:null;}})[_0xe6de('0x1d')](respondWithResult(_0x5ecc3d,null))[_0xe6de('0x40')](handleError(_0x5ecc3d,null));};exports['addActions']=function(_0x106a31,_0x282123,_0x180bdc){return db[_0xe6de('0x4c')][_0xe6de('0x43')]({'where':{'id':_0x106a31[_0xe6de('0x42')]['id']}})['then'](handleEntityNotFound(_0x282123,null))[_0xe6de('0x1d')](function(_0x4f081a){if(_0x4f081a){return _0x4f081a[_0xe6de('0x4d')](_0x106a31[_0xe6de('0x45')][_0xe6de('0x49')],_[_0xe6de('0x48')](_0x106a31[_0xe6de('0x45')],[_0xe6de('0x49'),'id'])||{});}})['then'](respondWithResult(_0x282123,null))[_0xe6de('0x40')](handleError(_0x282123,null));};exports[_0xe6de('0x4e')]=function(_0x11e5ab,_0xca873,_0x576bd2){var _0x1a463a={};var _0x88225a={};var _0xe118e4;var _0x5d10b6;return db[_0xe6de('0x23')][_0xe6de('0x4b')]({'where':{'id':_0x11e5ab[_0xe6de('0x42')]['id']}})[_0xe6de('0x1d')](handleEntityNotFound(_0xca873,null))[_0xe6de('0x1d')](function(_0x668f64){if(_0x668f64){_0xe118e4=_0x668f64;_0x88225a[_0xe6de('0x2a')]=_[_0xe6de('0x25')](db[_0xe6de('0x4c')][_0xe6de('0x24')]);_0x88225a[_0xe6de('0x26')]=_[_0xe6de('0x25')](_0x11e5ab['query']);_0x88225a[_0xe6de('0x33')]=_[_0xe6de('0x28')](_0x88225a[_0xe6de('0x2a')],_0x88225a[_0xe6de('0x26')]);_0x1a463a['attributes']=_['intersection'](_0x88225a[_0xe6de('0x2a')],qs[_0xe6de('0x2b')](_0x11e5ab['query'][_0xe6de('0x2b')]));_0x1a463a[_0xe6de('0x29')]=_0x1a463a['attributes'][_0xe6de('0x2c')]?_0x1a463a['attributes']:_0x88225a['model'];_0x1a463a[_0xe6de('0x30')]=qs[_0xe6de('0x31')](_0x11e5ab[_0xe6de('0x26')]['sort']);_0x1a463a[_0xe6de('0x32')]=qs[_0xe6de('0x33')](_['pick'](_0x11e5ab['query'],_0x88225a['filters']));if(_0x11e5ab[_0xe6de('0x26')][_0xe6de('0x38')]){_0x1a463a[_0xe6de('0x32')]=_[_0xe6de('0x3a')](_0x1a463a[_0xe6de('0x32')],{'$or':_[_0xe6de('0x39')](_0x1a463a[_0xe6de('0x29')],function(_0x31eb16){var _0x32cc40={};_0x32cc40[_0x31eb16]={'$like':'%'+_0x11e5ab[_0xe6de('0x26')][_0xe6de('0x38')]+'%'};return _0x32cc40;})});}_0x1a463a=_[_0xe6de('0x3a')]({},_0x1a463a,_0x11e5ab['options']);return _0xe118e4['getActions'](_0x1a463a);}})['then'](function(_0x2cfa4f){if(_0x2cfa4f){_0x5d10b6=_0x2cfa4f[_0xe6de('0x2c')];if(!_0x11e5ab[_0xe6de('0x26')][_0xe6de('0x2d')](_0xe6de('0x2e'))){_0x1a463a['limit']=qs[_0xe6de('0x2f')](_0x11e5ab[_0xe6de('0x26')]['limit']);_0x1a463a[_0xe6de('0x16')]=qs[_0xe6de('0x16')](_0x11e5ab[_0xe6de('0x26')]['offset']);}return _0xe118e4[_0xe6de('0x4e')](_0x1a463a);}})[_0xe6de('0x1d')](function(_0x5c4da4){if(_0x5c4da4){return _0x5c4da4?{'count':_0x5d10b6,'rows':_0x5c4da4}:null;}})['then'](respondWithResult(_0xca873,null))[_0xe6de('0x40')](handleError(_0xca873,null));};
\ No newline at end of file
index a9db026..f67c79f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb1e6=['moment','bluebird','./automation.attributes','exports','define','util','../../config/logger','api'];(function(_0x383a82,_0xb1f66c){var _0x5489fe=function(_0x2dc8cc){while(--_0x2dc8cc){_0x383a82['push'](_0x383a82['shift']());}};_0x5489fe(++_0xb1f66c);}(_0xb1e6,0x75));var _0x6b1e=function(_0xec034,_0x16c358){_0xec034=_0xec034-0x0;var _0x2c5a19=_0xb1e6[_0xec034];return _0x2c5a19;};'use strict';var _=require('lodash');var util=require(_0x6b1e('0x0'));var logger=require(_0x6b1e('0x1'))(_0x6b1e('0x2'));var moment=require(_0x6b1e('0x3'));var BPromise=require(_0x6b1e('0x4'));var rp=require('request-promise');var attributes=require(_0x6b1e('0x5'));module[_0x6b1e('0x6')]=function(_0xfbfb4d,_0x130f5d){return _0xfbfb4d[_0x6b1e('0x7')]('Automation',attributes,{'tableName':'tools_automations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd1aa=['bluebird','./automation.attributes','Automation','tools_automations','lodash','api','moment'];(function(_0x559c9c,_0x514bef){var _0x459a67=function(_0x59765b){while(--_0x59765b){_0x559c9c['push'](_0x559c9c['shift']());}};_0x459a67(++_0x514bef);}(_0xd1aa,0x13f));var _0xad1a=function(_0x12f9e3,_0x3fadc1){_0x12f9e3=_0x12f9e3-0x0;var _0x2de0c8=_0xd1aa[_0x12f9e3];return _0x2de0c8;};'use strict';var _=require(_0xad1a('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xad1a('0x1'));var moment=require(_0xad1a('0x2'));var BPromise=require(_0xad1a('0x3'));var rp=require('request-promise');var attributes=require(_0xad1a('0x4'));module['exports']=function(_0x5b1814,_0x3eb416){return _0x5b1814['define'](_0xad1a('0x5'),attributes,{'tableName':_0xad1a('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1171c3b..562037b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xedf8=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','Automation,\x20%s,\x20%s','request\x20sent','debug','Automation,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','randomstring','../../mysqldb'];(function(_0x44741c,_0x65f70b){var _0x3b744d=function(_0x2f5314){while(--_0x2f5314){_0x44741c['push'](_0x44741c['shift']());}};_0x3b744d(++_0x65f70b);}(_0xedf8,0x189));var _0x8edf=function(_0x1d78f0,_0x41c506){_0x1d78f0=_0x1d78f0-0x0;var _0x401009=_0xedf8[_0x1d78f0];return _0x401009;};'use strict';var _=require(_0x8edf('0x0'));var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x8edf('0x1'));var fs=require('fs');var db=require(_0x8edf('0x2'))['db'];var utils=require(_0x8edf('0x3'));var logger=require(_0x8edf('0x4'))(_0x8edf('0x5'));var config=require(_0x8edf('0x6'));var jayson=require(_0x8edf('0x7'));var client=jayson[_0x8edf('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1e9a8c,_0x5bc57f,_0x4473eb){return new BPromise(function(_0x584ce0,_0x24c69a){return client[_0x8edf('0x9')](_0x1e9a8c,_0x4473eb)[_0x8edf('0xa')](function(_0x4863b6){logger[_0x8edf('0xb')](_0x8edf('0xc'),_0x5bc57f,_0x8edf('0xd'));logger[_0x8edf('0xe')](_0x8edf('0xf'),_0x5bc57f,'request\x20sent',JSON[_0x8edf('0x10')](_0x4863b6));if(_0x4863b6[_0x8edf('0x11')]){if(_0x4863b6[_0x8edf('0x11')][_0x8edf('0x12')]===0x1f4){logger[_0x8edf('0x11')](_0x8edf('0xc'),_0x5bc57f,_0x4863b6['error'][_0x8edf('0x13')]);return _0x24c69a(_0x4863b6[_0x8edf('0x11')][_0x8edf('0x13')]);}logger[_0x8edf('0x11')](_0x8edf('0xc'),_0x5bc57f,_0x4863b6[_0x8edf('0x11')][_0x8edf('0x13')]);return _0x584ce0(_0x4863b6['error'][_0x8edf('0x13')]);}else{logger[_0x8edf('0xb')]('Automation,\x20%s,\x20%s',_0x5bc57f,_0x8edf('0xd'));_0x584ce0(_0x4863b6[_0x8edf('0x14')][_0x8edf('0x13')]);}})[_0x8edf('0x15')](function(_0x41d3ad){logger['error']('Automation,\x20%s,\x20%s',_0x5bc57f,_0x41d3ad);_0x24c69a(_0x41d3ad);});});}
\ No newline at end of file
+var _0x3168=['../../config/environment','jayson/promise','client','http','request','then','request\x20sent','Automation,\x20%s,\x20%s,\x20%s','stringify','error','code','Automation,\x20%s,\x20%s','message','info','result','catch','util','moment','randomstring','../../mysqldb'];(function(_0x3b9c02,_0x24655d){var _0x2bc33e=function(_0x5786b7){while(--_0x5786b7){_0x3b9c02['push'](_0x3b9c02['shift']());}};_0x2bc33e(++_0x24655d);}(_0x3168,0xec));var _0x8316=function(_0x2e0197,_0x1e29ec){_0x2e0197=_0x2e0197-0x0;var _0x1a4c3d=_0x3168[_0x2e0197];return _0x1a4c3d;};'use strict';var _=require('lodash');var util=require(_0x8316('0x0'));var moment=require(_0x8316('0x1'));var BPromise=require('bluebird');var rs=require(_0x8316('0x2'));var fs=require('fs');var db=require(_0x8316('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require(_0x8316('0x4'));var jayson=require(_0x8316('0x5'));var client=jayson[_0x8316('0x6')][_0x8316('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x462cec,_0x58f386,_0x1f8030){return new BPromise(function(_0xc6234e,_0x5273dc){return client[_0x8316('0x8')](_0x462cec,_0x1f8030)[_0x8316('0x9')](function(_0x20406e){logger['info']('Automation,\x20%s,\x20%s',_0x58f386,_0x8316('0xa'));logger['debug'](_0x8316('0xb'),_0x58f386,_0x8316('0xa'),JSON[_0x8316('0xc')](_0x20406e));if(_0x20406e['error']){if(_0x20406e[_0x8316('0xd')][_0x8316('0xe')]===0x1f4){logger[_0x8316('0xd')](_0x8316('0xf'),_0x58f386,_0x20406e[_0x8316('0xd')]['message']);return _0x5273dc(_0x20406e[_0x8316('0xd')]['message']);}logger[_0x8316('0xd')](_0x8316('0xf'),_0x58f386,_0x20406e[_0x8316('0xd')]['message']);return _0xc6234e(_0x20406e[_0x8316('0xd')][_0x8316('0x10')]);}else{logger[_0x8316('0x11')](_0x8316('0xf'),_0x58f386,_0x8316('0xa'));_0xc6234e(_0x20406e[_0x8316('0x12')][_0x8316('0x10')]);}})[_0x8316('0x13')](function(_0x140794){logger['error'](_0x8316('0xf'),_0x58f386,_0x140794);_0x5273dc(_0x140794);});});}
\ No newline at end of file
index 7dc3d6d..482682c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['./automation.controller','isAuthenticated','index','get','/:id','show','/:id/conditions','/:id/actions','getActions','post','create','addActions','put','destroy','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x16fb62,_0x146bb0){var _0x41c703=function(_0x3f1e9e){while(--_0x3f1e9e){_0x16fb62['push'](_0x16fb62['shift']());}};_0x41c703(++_0x146bb0);}(_0x9957,0x93));var _0x7995=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x9957[_0x4cf98e];return _0x1623ac;};'use strict';var multer=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var path=require(_0x7995('0x2'));var express=require(_0x7995('0x3'));var router=express['Router']();var auth=require(_0x7995('0x4'));var interaction=require(_0x7995('0x5'));var config=require(_0x7995('0x6'));var controller=require(_0x7995('0x7'));router['get']('/',auth[_0x7995('0x8')](),controller[_0x7995('0x9')]);router[_0x7995('0xa')](_0x7995('0xb'),auth[_0x7995('0x8')](),controller[_0x7995('0xc')]);router['get'](_0x7995('0xd'),auth[_0x7995('0x8')](),controller['getConditions']);router[_0x7995('0xa')](_0x7995('0xe'),auth[_0x7995('0x8')](),controller[_0x7995('0xf')]);router[_0x7995('0x10')]('/',auth[_0x7995('0x8')](),controller[_0x7995('0x11')]);router['post'](_0x7995('0xd'),auth[_0x7995('0x8')](),controller['addConditions']);router[_0x7995('0x10')](_0x7995('0xe'),auth[_0x7995('0x8')](),controller[_0x7995('0x12')]);router[_0x7995('0x13')](_0x7995('0xb'),auth[_0x7995('0x8')](),controller['update']);router['delete'](_0x7995('0xb'),auth[_0x7995('0x8')](),controller[_0x7995('0x14')]);module[_0x7995('0x15')]=router;
\ No newline at end of file
+var _0x7a54=['path','Router','../../components/auth/service','../../config/environment','./automation.controller','get','isAuthenticated','index','/:id','show','getActions','/:id/conditions','addConditions','post','/:id/actions','addActions','update','delete','destroy','exports','multer','util'];(function(_0xf83df2,_0x7104ba){var _0x14001a=function(_0x4b0ce2){while(--_0x4b0ce2){_0xf83df2['push'](_0xf83df2['shift']());}};_0x14001a(++_0x7104ba);}(_0x7a54,0x106));var _0x47a5=function(_0x27fa9d,_0x4c0a24){_0x27fa9d=_0x27fa9d-0x0;var _0x5e1071=_0x7a54[_0x27fa9d];return _0x5e1071;};'use strict';var multer=require(_0x47a5('0x0'));var util=require(_0x47a5('0x1'));var path=require(_0x47a5('0x2'));var express=require('express');var router=express[_0x47a5('0x3')]();var auth=require(_0x47a5('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x47a5('0x5'));var controller=require(_0x47a5('0x6'));router[_0x47a5('0x7')]('/',auth[_0x47a5('0x8')](),controller[_0x47a5('0x9')]);router['get'](_0x47a5('0xa'),auth['isAuthenticated'](),controller[_0x47a5('0xb')]);router[_0x47a5('0x7')]('/:id/conditions',auth[_0x47a5('0x8')](),controller['getConditions']);router['get']('/:id/actions',auth[_0x47a5('0x8')](),controller[_0x47a5('0xc')]);router['post']('/',auth[_0x47a5('0x8')](),controller['create']);router['post'](_0x47a5('0xd'),auth[_0x47a5('0x8')](),controller[_0x47a5('0xe')]);router[_0x47a5('0xf')](_0x47a5('0x10'),auth[_0x47a5('0x8')](),controller[_0x47a5('0x11')]);router['put'](_0x47a5('0xa'),auth[_0x47a5('0x8')](),controller[_0x47a5('0x12')]);router[_0x47a5('0x13')](_0x47a5('0xa'),auth[_0x47a5('0x8')](),controller[_0x47a5('0x14')]);module[_0x47a5('0x15')]=router;
\ No newline at end of file
index ed80f36..cffe1f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc981=['#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)','DESC','ASC','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','sequelize','exports','ivr','STRING','BOOLEAN','Active/Disactive\x20Campaign','INTEGER','Max\x20200\x20calls.','UNSIGNED','#Congestion\x20Retry\x20(min:1,\x20max:999)','Congestion\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Busy\x20Retry\x20(min:1,\x20max:999)','Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)','ENUM','always','never','onlyIfOpen','Active/Disactive\x20AMD','#AMD\x20Greeting','#AMD\x20After\x20Greeting\x20Silence'];(function(_0x14b04c,_0x52e6f8){var _0x282006=function(_0x16400a){while(--_0x16400a){_0x14b04c['push'](_0x14b04c['shift']());}};_0x282006(++_0x52e6f8);}(_0xc981,0x13e));var _0x1c98=function(_0x545450,_0xd87cf7){_0x545450=_0x545450-0x0;var _0xbe1afe=_0xc981[_0x545450];return _0xbe1afe;};'use strict';var Sequelize=require(_0x1c98('0x0'));module[_0x1c98('0x1')]={'name':{'type':Sequelize['STRING'],'unique':'name','allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'type':{'type':Sequelize['ENUM'](_0x1c98('0x2')),'allowNull':![],'defaultValue':_0x1c98('0x2')},'description':{'type':Sequelize[_0x1c98('0x3')]},'active':{'type':Sequelize[_0x1c98('0x4')],'defaultValue':0x0,'comment':_0x1c98('0x5')},'limitCalls':{'type':Sequelize[_0x1c98('0x6')](0x4)['UNSIGNED'],'defaultValue':0x1e,'validate':{'min':0x1,'max':0xc8},'comment':_0x1c98('0x7')},'dialOriginateCallerIdName':{'type':Sequelize[_0x1c98('0x3')]},'dialOriginateCallerIdNumber':{'type':Sequelize[_0x1c98('0x3')]},'dialOriginateTimeout':{'type':Sequelize[_0x1c98('0x6')](0x3)[_0x1c98('0x8')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':'Originate\x20Timeout\x20Seconds\x20(min:1,\x20max:999)'},'dialCongestionMaxRetry':{'type':Sequelize[_0x1c98('0x6')](0x3)[_0x1c98('0x8')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x1c98('0x9')},'dialCongestionRetryFrequency':{'type':Sequelize[_0x1c98('0x6')](0x5)[_0x1c98('0x8')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x1c98('0xa')},'dialBusyMaxRetry':{'type':Sequelize[_0x1c98('0x6')](0x3)[_0x1c98('0x8')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x1c98('0xb')},'dialBusyRetryFrequency':{'type':Sequelize['INTEGER'](0x5)[_0x1c98('0x8')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x1c98('0xc')},'dialNoAnswerMaxRetry':{'type':Sequelize[_0x1c98('0x6')](0x3)[_0x1c98('0x8')],'defaultValue':0x3,'comment':_0x1c98('0xd')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0x1c98('0x6')](0x5)[_0x1c98('0x8')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x1c98('0xe')},'dialGlobalMaxRetry':{'type':Sequelize[_0x1c98('0x6')](0x3)[_0x1c98('0x8')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0x1c98('0xf')},'dialTimezone':{'type':Sequelize[_0x1c98('0x3')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize['STRING'],'defaultValue':'07:00-22:00,*,*,*'},'dialCheckDuplicateType':{'type':Sequelize[_0x1c98('0x10')](_0x1c98('0x11'),_0x1c98('0x12'),_0x1c98('0x13')),'defaultValue':_0x1c98('0x11')},'dialAMDActive':{'type':Sequelize[_0x1c98('0x4')],'defaultValue':0x0,'comment':_0x1c98('0x14')},'dialAMDInitialSilence':{'type':Sequelize[_0x1c98('0x6')](0x9)[_0x1c98('0x8')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':'#AMD\x20Initial\x20Silence'},'dialAMDGreeting':{'type':Sequelize[_0x1c98('0x6')](0x9)[_0x1c98('0x8')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0x1c98('0x15')},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0x1c98('0x6')](0x9)[_0x1c98('0x8')],'defaultValue':0x320,'validate':{'min':0x0},'comment':_0x1c98('0x16')},'dialAMDTotalAnalysisTime':{'type':Sequelize['INTEGER'](0x9)[_0x1c98('0x8')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x1c98('0x17')},'dialAMDMinWordLength':{'type':Sequelize[_0x1c98('0x6')](0x9)[_0x1c98('0x8')],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0x1c98('0x18')},'dialAMDBetweenWordsSilence':{'type':Sequelize[_0x1c98('0x6')](0x9)['UNSIGNED'],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0x1c98('0x19')},'dialAMDMaximumNumberOfWords':{'type':Sequelize['INTEGER'](0x9)[_0x1c98('0x8')],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0x1c98('0x1a')},'dialAMDSilenceThreshold':{'type':Sequelize[_0x1c98('0x6')](0x5)['UNSIGNED'],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0x1c98('0x1b')},'dialAMDMaximumWordLength':{'type':Sequelize[_0x1c98('0x6')](0x9)[_0x1c98('0x8')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':'#AMD\x20Maximum\x20Word\x20Length'},'dialOrderByScheduledAt':{'type':Sequelize[_0x1c98('0x10')](_0x1c98('0x1c'),_0x1c98('0x1d')),'defaultValue':_0x1c98('0x1c')},'dialPrefix':{'type':Sequelize[_0x1c98('0x3')],'defaultValue':null},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0x1c98('0x6')](0x3)[_0x1c98('0x8')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x1c98('0x1e')},'dialCutDigit':{'type':Sequelize[_0x1c98('0x6')](0x3)[_0x1c98('0x8')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':'Cut\x20Digit\x20(min:1,\x20max:15)'}};
\ No newline at end of file
+var _0xd140=['DESC','ASC','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','sequelize','exports','STRING','name','ivr','BOOLEAN','INTEGER','UNSIGNED','Originate\x20Timeout\x20Seconds\x20(min:1,\x20max:999)','Congestion\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)','07:00-22:00,*,*,*','ENUM','always','never','Active/Disactive\x20AMD','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#AMD\x20After\x20Greeting\x20Silence','#AMD\x20Total\x20Analysis\x20Time','#AMD\x20Min\x20Word\x20Length','#AMD\x20Maximum\x20Number\x20Of\x20Words','#AMD\x20Maximum\x20Word\x20Length'];(function(_0x2f5ac5,_0x1ee939){var _0x37c9a8=function(_0x15031f){while(--_0x15031f){_0x2f5ac5['push'](_0x2f5ac5['shift']());}};_0x37c9a8(++_0x1ee939);}(_0xd140,0x73));var _0x0d14=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xd140[_0x321bb2];return _0x9c12ed;};'use strict';var Sequelize=require(_0x0d14('0x0'));module[_0x0d14('0x1')]={'name':{'type':Sequelize[_0x0d14('0x2')],'unique':_0x0d14('0x3'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'type':{'type':Sequelize['ENUM'](_0x0d14('0x4')),'allowNull':![],'defaultValue':'ivr'},'description':{'type':Sequelize[_0x0d14('0x2')]},'active':{'type':Sequelize[_0x0d14('0x5')],'defaultValue':0x0,'comment':'Active/Disactive\x20Campaign'},'limitCalls':{'type':Sequelize[_0x0d14('0x6')](0x4)[_0x0d14('0x7')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0xc8},'comment':'Max\x20200\x20calls.'},'dialOriginateCallerIdName':{'type':Sequelize[_0x0d14('0x2')]},'dialOriginateCallerIdNumber':{'type':Sequelize['STRING']},'dialOriginateTimeout':{'type':Sequelize[_0x0d14('0x6')](0x3)[_0x0d14('0x7')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0x0d14('0x8')},'dialCongestionMaxRetry':{'type':Sequelize['INTEGER'](0x3)[_0x0d14('0x7')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'#Congestion\x20Retry\x20(min:1,\x20max:999)'},'dialCongestionRetryFrequency':{'type':Sequelize['INTEGER'](0x5)[_0x0d14('0x7')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x0d14('0x9')},'dialBusyMaxRetry':{'type':Sequelize[_0x0d14('0x6')](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'#Busy\x20Retry\x20(min:1,\x20max:999)'},'dialBusyRetryFrequency':{'type':Sequelize[_0x0d14('0x6')](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x0d14('0xa')},'dialNoAnswerMaxRetry':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0x3,'comment':_0x0d14('0xb')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0x0d14('0x6')](0x5)[_0x0d14('0x7')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialGlobalMaxRetry':{'type':Sequelize[_0x0d14('0x6')](0x3)[_0x0d14('0x7')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0x0d14('0xc')},'dialTimezone':{'type':Sequelize['STRING'],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0x0d14('0x2')],'defaultValue':_0x0d14('0xd')},'dialCheckDuplicateType':{'type':Sequelize[_0x0d14('0xe')](_0x0d14('0xf'),_0x0d14('0x10'),'onlyIfOpen'),'defaultValue':_0x0d14('0xf')},'dialAMDActive':{'type':Sequelize[_0x0d14('0x5')],'defaultValue':0x0,'comment':_0x0d14('0x11')},'dialAMDInitialSilence':{'type':Sequelize[_0x0d14('0x6')](0x9)[_0x0d14('0x7')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0x0d14('0x12')},'dialAMDGreeting':{'type':Sequelize[_0x0d14('0x6')](0x9)[_0x0d14('0x7')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0x0d14('0x13')},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0x0d14('0x6')](0x9)['UNSIGNED'],'defaultValue':0x320,'validate':{'min':0x0},'comment':_0x0d14('0x14')},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0x0d14('0x6')](0x9)[_0x0d14('0x7')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x0d14('0x15')},'dialAMDMinWordLength':{'type':Sequelize[_0x0d14('0x6')](0x9)['UNSIGNED'],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0x0d14('0x16')},'dialAMDBetweenWordsSilence':{'type':Sequelize['INTEGER'](0x9)[_0x0d14('0x7')],'defaultValue':0x32,'validate':{'min':0x0},'comment':'#AMD\x20Between\x20Words\x20Silence'},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0x0d14('0x6')](0x9)[_0x0d14('0x7')],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0x0d14('0x17')},'dialAMDSilenceThreshold':{'type':Sequelize[_0x0d14('0x6')](0x5)['UNSIGNED'],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':'#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)'},'dialAMDMaximumWordLength':{'type':Sequelize[_0x0d14('0x6')](0x9)[_0x0d14('0x7')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x0d14('0x18')},'dialOrderByScheduledAt':{'type':Sequelize[_0x0d14('0xe')](_0x0d14('0x19'),_0x0d14('0x1a')),'defaultValue':_0x0d14('0x19')},'dialPrefix':{'type':Sequelize['STRING'],'defaultValue':null},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0x0d14('0x6')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x0d14('0x1b')},'dialCutDigit':{'type':Sequelize[_0x0d14('0x6')](0x3)[_0x0d14('0x7')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':'Cut\x20Digit\x20(min:1,\x20max:15)'}};
\ No newline at end of file
index 78a2e63..ab71011 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x910e=['ContactId','ListId','select','field','phone','NOW()','CmListId','toString','from','cm_contacts','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20NOT\x20IN\x20(?)','calleridnum','cm_hopper_final','CampaignId\x20=\x20?','onlyIfOpen','fromQuery','scheduledAt','phone\x20IS\x20NOT\x20NULL','into','sequelize','all','removeLists','CmList','addBlackLists','cm_hopper_black','push','removeBlackLists','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','sendStatus','status','count','offset','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','error','stack','name','index','Campaign','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','order','where','add','day','merge','map','filter','options','includeAll','include','findAll','show','params','find','catch','create','body','clone','get','createdAt','omit','updatedAt','findOne','nolimit','sort','CampaignId','CmHopper','rows','getHopperHistories','CmHopperHistory','hasOwnProperty','pick','getHopperFinals','CmHopperFinal','getHopperBlacks','CmHopperBlack','getLists','addLists','ids','spread','dialCheckDuplicateType','insert','cm_hopper'];(function(_0x6977db,_0xf1b5a4){var _0x28409d=function(_0x433a62){while(--_0x433a62){_0x6977db['push'](_0x6977db['shift']());}};_0x28409d(++_0xf1b5a4);}(_0x910e,0x182));var _0xe910=function(_0x215669,_0x2333da){_0x215669=_0x215669-0x0;var _0x3fea10=_0x910e[_0x215669];return _0x3fea10;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xe910('0x0'));var moment=require(_0xe910('0x1'));var BPromise=require(_0xe910('0x2'));var Mustache=require('mustache');var util=require(_0xe910('0x3'));var path=require(_0xe910('0x4'));var sox=require(_0xe910('0x5'));var csv=require(_0xe910('0x6'));var ejs=require(_0xe910('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0xe910('0x8'));var crypto=require(_0xe910('0x9'));var jsforce=require(_0xe910('0xa'));var deskjs=require(_0xe910('0xb'));var toCsv=require(_0xe910('0x6'));var querystring=require('querystring');var Papa=require(_0xe910('0xc'));var qs=require(_0xe910('0xd'));var logger=require(_0xe910('0xe'))(_0xe910('0xf'));var utils=require('../../config/utils');var config=require(_0xe910('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x573af9,_0x34f71f){_0x34f71f=_0x34f71f||0xcc;return function(_0x221e38){if(_0x221e38){return _0x573af9[_0xe910('0x11')](_0x34f71f);}return _0x573af9[_0xe910('0x12')](_0x34f71f)['end']();};}function respondWithResult(_0x57f8e3,_0x212ce1){_0x212ce1=_0x212ce1||0xc8;return function(_0x577891){if(_0x577891){return _0x57f8e3[_0xe910('0x12')](_0x212ce1)['json'](_0x577891);}};}function respondWithFilteredResult(_0x27a861,_0xad5c92){return function(_0x4b8a10){if(_0x4b8a10){var _0x4399c3=_0x4b8a10[_0xe910('0x13')],_0x26aba4=_0xad5c92[_0xe910('0x14')],_0x562b89=_0xad5c92['offset']+_0xad5c92[_0xe910('0x15')],_0x36fb71;if(_0x562b89>=_0x4399c3){_0x562b89=_0x4399c3;_0x36fb71=0xc8;}else{_0x36fb71=0xce;}_0x27a861[_0xe910('0x12')](_0x36fb71);return _0x27a861[_0xe910('0x16')](_0xe910('0x17'),_0x26aba4+'-'+_0x562b89+'/'+_0x4399c3)[_0xe910('0x18')](_0x4b8a10);}return null;};}function patchUpdates(_0x31059a){return function(_0x230809){try{jsonpatch[_0xe910('0x19')](_0x230809,_0x31059a,!![]);}catch(_0x2d379b){return BPromise[_0xe910('0x1a')](_0x2d379b);}return _0x230809[_0xe910('0x1b')]();};}function saveUpdates(_0x1709d5,_0x437aa4){return function(_0x3b2d94){if(_0x3b2d94){return _0x3b2d94[_0xe910('0x1c')](_0x1709d5)[_0xe910('0x1d')](function(_0x94cb98){return _0x94cb98;});}return null;};}function removeEntity(_0x5f1cc6,_0x3c25c3){return function(_0x1379a8){if(_0x1379a8){return _0x1379a8[_0xe910('0x1e')]()[_0xe910('0x1d')](function(){_0x5f1cc6[_0xe910('0x12')](0xcc)['end']();});}};}function handleEntityNotFound(_0x8d201e,_0x2a0d06){return function(_0x4f3096){if(!_0x4f3096){_0x8d201e[_0xe910('0x11')](0x194);}return _0x4f3096;};}function handleError(_0x3c7b47,_0x2862a2){_0x2862a2=_0x2862a2||0x1f4;return function(_0x4bf3bc){logger[_0xe910('0x1f')](_0x4bf3bc[_0xe910('0x20')]);if(_0x4bf3bc[_0xe910('0x21')]){delete _0x4bf3bc['name'];}_0x3c7b47['status'](_0x2862a2)['send'](_0x4bf3bc);};}exports[_0xe910('0x22')]=function(_0x3c32c2,_0x18f29b){var _0x2a42bb={},_0x45a655={},_0x3d4e9c={'count':0x0,'rows':[]};var _0x62b808=db[_0xe910('0x23')][_0xe910('0x24')];_0x45a655[_0xe910('0x25')]=_[_0xe910('0x26')](_0x62b808);var _0x3683cb={'dateStart':_0x3c32c2[_0xe910('0x27')][_0xe910('0x28')],'dateEnd':_0x3c32c2[_0xe910('0x27')][_0xe910('0x29')]};delete _0x3c32c2['query'][_0xe910('0x28')];delete _0x3c32c2[_0xe910('0x27')]['dateEnd'];_0x45a655[_0xe910('0x27')]=_[_0xe910('0x26')](_0x3c32c2[_0xe910('0x27')]);_0x45a655[_0xe910('0x2a')]=_[_0xe910('0x2b')](_0x45a655[_0xe910('0x25')],_0x45a655[_0xe910('0x27')]);_0x2a42bb[_0xe910('0x2c')]=_[_0xe910('0x2b')](_0x45a655[_0xe910('0x25')],qs[_0xe910('0x2d')](_0x3c32c2['query'][_0xe910('0x2d')]));_0x2a42bb[_0xe910('0x2c')]=_0x2a42bb[_0xe910('0x2c')][_0xe910('0x2e')]?_0x2a42bb[_0xe910('0x2c')]:_0x45a655[_0xe910('0x25')];if(!_0x3c32c2[_0xe910('0x27')]['hasOwnProperty']('nolimit')){_0x2a42bb[_0xe910('0x15')]=qs['limit'](_0x3c32c2[_0xe910('0x27')][_0xe910('0x15')]);_0x2a42bb[_0xe910('0x14')]=qs[_0xe910('0x14')](_0x3c32c2[_0xe910('0x27')][_0xe910('0x14')]);}_0x2a42bb[_0xe910('0x2f')]=qs['sort'](_0x3c32c2[_0xe910('0x27')]['sort']);_0x2a42bb[_0xe910('0x30')]=qs[_0xe910('0x2a')](_['pick'](_0x3c32c2['query'],_0x45a655['filters']));if(_0x3683cb[_0xe910('0x28')]){if(_0x3683cb[_0xe910('0x29')]){_0x3683cb['dateEnd']=moment(_0x3683cb[_0xe910('0x29')])[_0xe910('0x31')](0x1,'day');}else{_0x3683cb[_0xe910('0x29')]=moment(_0x3683cb['dateStart'])['add'](0x1,_0xe910('0x32'));}_[_0xe910('0x33')](_0x2a42bb[_0xe910('0x30')],{'createdAt':{'$gte':_0x3683cb[_0xe910('0x28')],'$lte':_0x3683cb[_0xe910('0x29')]}});}if(_0x3c32c2[_0xe910('0x27')]['filter']){_0x2a42bb[_0xe910('0x30')]=_[_0xe910('0x33')](_0x2a42bb[_0xe910('0x30')],{'$or':_[_0xe910('0x34')](_0x2a42bb[_0xe910('0x2c')],function(_0x184b6b){var _0x38b651={};_0x38b651[_0x184b6b]={'$like':'%'+_0x3c32c2['query'][_0xe910('0x35')]+'%'};return _0x38b651;})});}_0x2a42bb=_[_0xe910('0x33')]({},_0x2a42bb,_0x3c32c2[_0xe910('0x36')]);var _0xe73427={'where':_0x2a42bb[_0xe910('0x30')]};return db[_0xe910('0x23')][_0xe910('0x13')](_0xe73427)['then'](function(_0x1a4df4){_0x3d4e9c[_0xe910('0x13')]=_0x1a4df4;if(_0x3c32c2[_0xe910('0x27')][_0xe910('0x37')]){_0x2a42bb[_0xe910('0x38')]=[{'all':!![]}];}return db[_0xe910('0x23')][_0xe910('0x39')](_0x2a42bb);})[_0xe910('0x1d')](function(_0x683aee){_0x3d4e9c['rows']=_0x683aee;return _0x3d4e9c;})[_0xe910('0x1d')](respondWithFilteredResult(_0x18f29b,_0x2a42bb))['catch'](handleError(_0x18f29b,null));};exports[_0xe910('0x3a')]=function(_0x37b2f6,_0x3d39ad){var _0x313fde={'raw':![],'where':{'id':_0x37b2f6[_0xe910('0x3b')]['id']}},_0x20a088={};_0x20a088[_0xe910('0x25')]=_['keys'](db[_0xe910('0x23')][_0xe910('0x24')]);_0x20a088[_0xe910('0x27')]=_[_0xe910('0x26')](_0x37b2f6['query']);_0x20a088[_0xe910('0x2a')]=_[_0xe910('0x2b')](_0x20a088[_0xe910('0x25')],_0x20a088['query']);_0x313fde[_0xe910('0x2c')]=_[_0xe910('0x2b')](_0x20a088[_0xe910('0x25')],qs['fields'](_0x37b2f6[_0xe910('0x27')]['fields']));_0x313fde[_0xe910('0x2c')]=_0x313fde[_0xe910('0x2c')][_0xe910('0x2e')]?_0x313fde[_0xe910('0x2c')]:_0x20a088['model'];if(_0x37b2f6['query'][_0xe910('0x37')]){_0x313fde[_0xe910('0x38')]=[{'all':!![]}];}_0x313fde=_[_0xe910('0x33')]({},_0x313fde,_0x37b2f6[_0xe910('0x36')]);return db[_0xe910('0x23')][_0xe910('0x3c')](_0x313fde)[_0xe910('0x1d')](handleEntityNotFound(_0x3d39ad,null))[_0xe910('0x1d')](respondWithResult(_0x3d39ad,null))[_0xe910('0x3d')](handleError(_0x3d39ad,null));};exports['create']=function(_0x432410,_0x5d4467){return db[_0xe910('0x23')][_0xe910('0x3e')](_0x432410[_0xe910('0x3f')],{})[_0xe910('0x1d')](respondWithResult(_0x5d4467,0xc9))[_0xe910('0x3d')](handleError(_0x5d4467,null));};exports[_0xe910('0x40')]=function(_0x5d03bb,_0x5c9735){var _0x45e900={'raw':![],'where':{'id':_0x5d03bb['params']['id']}},_0x57ed32={};_0x57ed32[_0xe910('0x25')]=_['keys'](db[_0xe910('0x23')][_0xe910('0x24')]);_0x45e900['attributes']=_[_0xe910('0x2b')](_0x57ed32['model'],qs[_0xe910('0x2d')](_0x5d03bb[_0xe910('0x27')][_0xe910('0x2d')]));_0x45e900[_0xe910('0x2c')]=_0x45e900[_0xe910('0x2c')][_0xe910('0x2e')]?_0x45e900[_0xe910('0x2c')]:_0x57ed32[_0xe910('0x25')];if(_0x5d03bb[_0xe910('0x27')][_0xe910('0x37')]){_0x45e900[_0xe910('0x38')]=[{'all':!![]}];}_0x45e900=_['merge']({},_0x45e900,_0x5d03bb[_0xe910('0x36')]);return db[_0xe910('0x23')]['find'](_0x45e900)[_0xe910('0x1d')](handleEntityNotFound(_0x5c9735,null))[_0xe910('0x1d')](function(_0x49777b){if(_0x49777b){var _0x2878ca=_0x49777b[_0xe910('0x41')]({'plain':!![]});_0x2878ca=qs['omit'](_0x2878ca,['id',_0xe910('0x42'),'updatedAt']);_0x5d03bb['body']=_[_0xe910('0x43')](_0x5d03bb[_0xe910('0x3f')],['id',_0xe910('0x42'),_0xe910('0x44')]);return db[_0xe910('0x23')][_0xe910('0x3e')](_['merge'](_0x2878ca,_0x5d03bb[_0xe910('0x3f')]),{'include':_0x5d03bb[_0xe910('0x27')][_0xe910('0x37')]?[{'all':!![]}]:undefined});}})[_0xe910('0x1d')](respondWithResult(_0x5c9735,0xc9))['catch'](handleError(_0x5c9735,null));};exports[_0xe910('0x1c')]=function(_0x462a3e,_0x2a2d4f){if(_0x462a3e[_0xe910('0x3f')]['id']){delete _0x462a3e[_0xe910('0x3f')]['id'];}return db[_0xe910('0x23')]['find']({'where':{'id':_0x462a3e['params']['id']}})[_0xe910('0x1d')](handleEntityNotFound(_0x2a2d4f,null))[_0xe910('0x1d')](saveUpdates(_0x462a3e[_0xe910('0x3f')],null))['then'](respondWithResult(_0x2a2d4f,null))[_0xe910('0x3d')](handleError(_0x2a2d4f,null));};exports[_0xe910('0x1e')]=function(_0x5e0f2a,_0x794e66){return db[_0xe910('0x23')][_0xe910('0x3c')]({'where':{'id':_0x5e0f2a['params']['id']}})[_0xe910('0x1d')](handleEntityNotFound(_0x794e66,null))[_0xe910('0x1d')](removeEntity(_0x794e66,null))[_0xe910('0x3d')](handleError(_0x794e66,null));};exports['getHoppers']=function(_0x401649,_0x1b1ff6,_0x5cf3e9){var _0x264edb={'raw':!![],'where':{}};var _0x3e13db={};var _0x12b723={'count':0x0,'rows':[]};return db[_0xe910('0x23')][_0xe910('0x45')]({'where':{'id':_0x401649['params']['id']}})['then'](handleEntityNotFound(_0x1b1ff6,null))[_0xe910('0x1d')](function(_0x1e5ff6){if(_0x1e5ff6){_0x3e13db[_0xe910('0x25')]=_[_0xe910('0x26')](db['CmHopper'][_0xe910('0x24')]);_0x3e13db[_0xe910('0x27')]=_[_0xe910('0x26')](_0x401649[_0xe910('0x27')]);_0x3e13db[_0xe910('0x2a')]=_[_0xe910('0x2b')](_0x3e13db[_0xe910('0x25')],_0x3e13db[_0xe910('0x27')]);_0x264edb[_0xe910('0x2c')]=_['intersection'](_0x3e13db[_0xe910('0x25')],qs[_0xe910('0x2d')](_0x401649[_0xe910('0x27')][_0xe910('0x2d')]));_0x264edb[_0xe910('0x2c')]=_0x264edb[_0xe910('0x2c')][_0xe910('0x2e')]?_0x264edb[_0xe910('0x2c')]:_0x3e13db['model'];if(!_0x401649[_0xe910('0x27')]['hasOwnProperty'](_0xe910('0x46'))){_0x264edb[_0xe910('0x15')]=qs[_0xe910('0x15')](_0x401649['query'][_0xe910('0x15')]);_0x264edb[_0xe910('0x14')]=qs[_0xe910('0x14')](_0x401649[_0xe910('0x27')]['offset']);}_0x264edb[_0xe910('0x2f')]=qs['sort'](_0x401649[_0xe910('0x27')][_0xe910('0x47')]);_0x264edb['where']=qs[_0xe910('0x2a')](_['pick'](_0x401649[_0xe910('0x27')],_0x3e13db[_0xe910('0x2a')]));_0x264edb[_0xe910('0x30')][_0xe910('0x48')]=_0x1e5ff6['id'];if(_0x401649['query']['filter']){_0x264edb[_0xe910('0x30')]=_[_0xe910('0x33')](_0x264edb[_0xe910('0x30')],{'$or':_[_0xe910('0x34')](_0x264edb[_0xe910('0x2c')],function(_0x54bf1b){var _0x40a0cd={};_0x40a0cd[_0x54bf1b]={'$like':'%'+_0x401649[_0xe910('0x27')]['filter']+'%'};return _0x40a0cd;})});}_0x264edb=_[_0xe910('0x33')]({},_0x264edb,_0x401649[_0xe910('0x36')]);return db[_0xe910('0x49')][_0xe910('0x13')]({'where':_0x264edb[_0xe910('0x30')]})[_0xe910('0x1d')](function(_0x4056d7){_0x12b723[_0xe910('0x13')]=_0x4056d7;if(_0x401649[_0xe910('0x27')]['includeAll']){_0x264edb['include']=[{'all':!![]}];}return db[_0xe910('0x49')][_0xe910('0x39')](_0x264edb);})['then'](function(_0x52fe38){_0x12b723[_0xe910('0x4a')]=_0x52fe38;return _0x12b723;});}})[_0xe910('0x1d')](respondWithFilteredResult(_0x1b1ff6,_0x264edb))[_0xe910('0x3d')](handleError(_0x1b1ff6,null));};exports[_0xe910('0x4b')]=function(_0x2d9533,_0x10b177,_0x2390a5){var _0x36595c={'raw':!![],'where':{}};var _0x37a7d1={};var _0x56db53={'count':0x0,'rows':[]};return db[_0xe910('0x23')][_0xe910('0x45')]({'where':{'id':_0x2d9533[_0xe910('0x3b')]['id']}})[_0xe910('0x1d')](handleEntityNotFound(_0x10b177,null))[_0xe910('0x1d')](function(_0x371bea){if(_0x371bea){_0x37a7d1[_0xe910('0x25')]=_[_0xe910('0x26')](db[_0xe910('0x4c')]['rawAttributes']);_0x37a7d1[_0xe910('0x27')]=_[_0xe910('0x26')](_0x2d9533[_0xe910('0x27')]);_0x37a7d1[_0xe910('0x2a')]=_[_0xe910('0x2b')](_0x37a7d1[_0xe910('0x25')],_0x37a7d1[_0xe910('0x27')]);_0x36595c['attributes']=_[_0xe910('0x2b')](_0x37a7d1[_0xe910('0x25')],qs[_0xe910('0x2d')](_0x2d9533[_0xe910('0x27')][_0xe910('0x2d')]));_0x36595c[_0xe910('0x2c')]=_0x36595c[_0xe910('0x2c')][_0xe910('0x2e')]?_0x36595c['attributes']:_0x37a7d1[_0xe910('0x25')];if(!_0x2d9533[_0xe910('0x27')][_0xe910('0x4d')](_0xe910('0x46'))){_0x36595c[_0xe910('0x15')]=qs['limit'](_0x2d9533[_0xe910('0x27')][_0xe910('0x15')]);_0x36595c[_0xe910('0x14')]=qs[_0xe910('0x14')](_0x2d9533[_0xe910('0x27')][_0xe910('0x14')]);}_0x36595c[_0xe910('0x2f')]=qs[_0xe910('0x47')](_0x2d9533['query'][_0xe910('0x47')]);_0x36595c[_0xe910('0x30')]=qs[_0xe910('0x2a')](_[_0xe910('0x4e')](_0x2d9533[_0xe910('0x27')],_0x37a7d1[_0xe910('0x2a')]));_0x36595c[_0xe910('0x30')][_0xe910('0x48')]=_0x371bea['id'];if(_0x2d9533['query']['filter']){_0x36595c[_0xe910('0x30')]=_[_0xe910('0x33')](_0x36595c['where'],{'$or':_[_0xe910('0x34')](_0x36595c[_0xe910('0x2c')],function(_0x22aff0){var _0x56fc78={};_0x56fc78[_0x22aff0]={'$like':'%'+_0x2d9533[_0xe910('0x27')]['filter']+'%'};return _0x56fc78;})});}_0x36595c=_[_0xe910('0x33')]({},_0x36595c,_0x2d9533['options']);return db['CmHopperHistory'][_0xe910('0x13')]({'where':_0x36595c['where']})['then'](function(_0x1d1a36){_0x56db53[_0xe910('0x13')]=_0x1d1a36;if(_0x2d9533['query'][_0xe910('0x37')]){_0x36595c[_0xe910('0x38')]=[{'all':!![]}];}return db[_0xe910('0x4c')][_0xe910('0x39')](_0x36595c);})[_0xe910('0x1d')](function(_0x26a648){_0x56db53[_0xe910('0x4a')]=_0x26a648;return _0x56db53;});}})[_0xe910('0x1d')](respondWithFilteredResult(_0x10b177,_0x36595c))['catch'](handleError(_0x10b177,null));};exports[_0xe910('0x4f')]=function(_0x1a5ac2,_0x282a8f,_0x4f3618){var _0x20dbbe={'raw':!![],'where':{}};var _0x25870d={};var _0x1c3618={'count':0x0,'rows':[]};return db[_0xe910('0x23')]['findOne']({'where':{'id':_0x1a5ac2['params']['id']}})[_0xe910('0x1d')](handleEntityNotFound(_0x282a8f,null))[_0xe910('0x1d')](function(_0x273191){if(_0x273191){_0x25870d[_0xe910('0x25')]=_[_0xe910('0x26')](db[_0xe910('0x50')]['rawAttributes']);_0x25870d['query']=_[_0xe910('0x26')](_0x1a5ac2['query']);_0x25870d[_0xe910('0x2a')]=_[_0xe910('0x2b')](_0x25870d[_0xe910('0x25')],_0x25870d[_0xe910('0x27')]);_0x20dbbe[_0xe910('0x2c')]=_[_0xe910('0x2b')](_0x25870d[_0xe910('0x25')],qs[_0xe910('0x2d')](_0x1a5ac2['query'][_0xe910('0x2d')]));_0x20dbbe[_0xe910('0x2c')]=_0x20dbbe['attributes'][_0xe910('0x2e')]?_0x20dbbe['attributes']:_0x25870d['model'];if(!_0x1a5ac2[_0xe910('0x27')][_0xe910('0x4d')]('nolimit')){_0x20dbbe['limit']=qs[_0xe910('0x15')](_0x1a5ac2[_0xe910('0x27')][_0xe910('0x15')]);_0x20dbbe[_0xe910('0x14')]=qs['offset'](_0x1a5ac2[_0xe910('0x27')][_0xe910('0x14')]);}_0x20dbbe['order']=qs[_0xe910('0x47')](_0x1a5ac2[_0xe910('0x27')]['sort']);_0x20dbbe[_0xe910('0x30')]=qs[_0xe910('0x2a')](_['pick'](_0x1a5ac2[_0xe910('0x27')],_0x25870d[_0xe910('0x2a')]));_0x20dbbe[_0xe910('0x30')][_0xe910('0x48')]=_0x273191['id'];if(_0x1a5ac2[_0xe910('0x27')][_0xe910('0x35')]){_0x20dbbe[_0xe910('0x30')]=_['merge'](_0x20dbbe['where'],{'$or':_[_0xe910('0x34')](_0x20dbbe[_0xe910('0x2c')],function(_0x5e7af7){var _0x373cb1={};_0x373cb1[_0x5e7af7]={'$like':'%'+_0x1a5ac2[_0xe910('0x27')][_0xe910('0x35')]+'%'};return _0x373cb1;})});}_0x20dbbe=_[_0xe910('0x33')]({},_0x20dbbe,_0x1a5ac2['options']);return db[_0xe910('0x50')][_0xe910('0x13')]({'where':_0x20dbbe[_0xe910('0x30')]})[_0xe910('0x1d')](function(_0x15a937){_0x1c3618[_0xe910('0x13')]=_0x15a937;if(_0x1a5ac2[_0xe910('0x27')][_0xe910('0x37')]){_0x20dbbe[_0xe910('0x38')]=[{'all':!![]}];}return db['CmHopperFinal']['findAll'](_0x20dbbe);})[_0xe910('0x1d')](function(_0x48bb39){_0x1c3618[_0xe910('0x4a')]=_0x48bb39;return _0x1c3618;});}})[_0xe910('0x1d')](respondWithFilteredResult(_0x282a8f,_0x20dbbe))[_0xe910('0x3d')](handleError(_0x282a8f,null));};exports[_0xe910('0x51')]=function(_0x13aa54,_0x30d7e8,_0x59ec29){var _0x5ff6e6={'raw':!![],'where':{}};var _0x14cb8b={};var _0x572c76={'count':0x0,'rows':[]};return db[_0xe910('0x23')][_0xe910('0x45')]({'where':{'id':_0x13aa54[_0xe910('0x3b')]['id']}})[_0xe910('0x1d')](handleEntityNotFound(_0x30d7e8,null))['then'](function(_0x4baa01){if(_0x4baa01){_0x14cb8b[_0xe910('0x25')]=_['keys'](db[_0xe910('0x52')][_0xe910('0x24')]);_0x14cb8b[_0xe910('0x27')]=_[_0xe910('0x26')](_0x13aa54[_0xe910('0x27')]);_0x14cb8b['filters']=_[_0xe910('0x2b')](_0x14cb8b['model'],_0x14cb8b[_0xe910('0x27')]);_0x5ff6e6[_0xe910('0x2c')]=_[_0xe910('0x2b')](_0x14cb8b[_0xe910('0x25')],qs[_0xe910('0x2d')](_0x13aa54[_0xe910('0x27')][_0xe910('0x2d')]));_0x5ff6e6['attributes']=_0x5ff6e6['attributes'][_0xe910('0x2e')]?_0x5ff6e6['attributes']:_0x14cb8b[_0xe910('0x25')];if(!_0x13aa54[_0xe910('0x27')]['hasOwnProperty'](_0xe910('0x46'))){_0x5ff6e6['limit']=qs['limit'](_0x13aa54['query'][_0xe910('0x15')]);_0x5ff6e6['offset']=qs[_0xe910('0x14')](_0x13aa54[_0xe910('0x27')][_0xe910('0x14')]);}_0x5ff6e6[_0xe910('0x2f')]=qs[_0xe910('0x47')](_0x13aa54[_0xe910('0x27')][_0xe910('0x47')]);_0x5ff6e6[_0xe910('0x30')]=qs[_0xe910('0x2a')](_[_0xe910('0x4e')](_0x13aa54[_0xe910('0x27')],_0x14cb8b[_0xe910('0x2a')]));_0x5ff6e6[_0xe910('0x30')][_0xe910('0x48')]=_0x4baa01['id'];if(_0x13aa54['query'][_0xe910('0x35')]){_0x5ff6e6[_0xe910('0x30')]=_[_0xe910('0x33')](_0x5ff6e6[_0xe910('0x30')],{'$or':_[_0xe910('0x34')](_0x5ff6e6[_0xe910('0x2c')],function(_0x190d80){var _0x30d7={};_0x30d7[_0x190d80]={'$like':'%'+_0x13aa54[_0xe910('0x27')][_0xe910('0x35')]+'%'};return _0x30d7;})});}_0x5ff6e6=_[_0xe910('0x33')]({},_0x5ff6e6,_0x13aa54[_0xe910('0x36')]);return db[_0xe910('0x52')]['count']({'where':_0x5ff6e6[_0xe910('0x30')]})[_0xe910('0x1d')](function(_0x65a5ea){_0x572c76[_0xe910('0x13')]=_0x65a5ea;if(_0x13aa54[_0xe910('0x27')][_0xe910('0x37')]){_0x5ff6e6['include']=[{'all':!![]}];}return db['CmHopperBlack']['findAll'](_0x5ff6e6);})['then'](function(_0x3a7864){_0x572c76[_0xe910('0x4a')]=_0x3a7864;return _0x572c76;});}})['then'](respondWithFilteredResult(_0x30d7e8,_0x5ff6e6))['catch'](handleError(_0x30d7e8,null));};exports['getLists']=function(_0x4d2869,_0x597384,_0x20feb3){var _0x4c5630={};var _0x320d33={};var _0x1ecb3b;var _0x100f5b;return db['Campaign'][_0xe910('0x45')]({'where':{'id':_0x4d2869[_0xe910('0x3b')]['id']}})[_0xe910('0x1d')](handleEntityNotFound(_0x597384,null))['then'](function(_0x3c4c5b){if(_0x3c4c5b){_0x1ecb3b=_0x3c4c5b;_0x320d33['model']=_[_0xe910('0x26')](db['CmList'][_0xe910('0x24')]);_0x320d33[_0xe910('0x27')]=_['keys'](_0x4d2869[_0xe910('0x27')]);_0x320d33[_0xe910('0x2a')]=_[_0xe910('0x2b')](_0x320d33['model'],_0x320d33['query']);_0x4c5630['attributes']=_[_0xe910('0x2b')](_0x320d33[_0xe910('0x25')],qs[_0xe910('0x2d')](_0x4d2869[_0xe910('0x27')][_0xe910('0x2d')]));_0x4c5630[_0xe910('0x2c')]=_0x4c5630[_0xe910('0x2c')][_0xe910('0x2e')]?_0x4c5630[_0xe910('0x2c')]:_0x320d33[_0xe910('0x25')];_0x4c5630[_0xe910('0x2f')]=qs[_0xe910('0x47')](_0x4d2869[_0xe910('0x27')][_0xe910('0x47')]);_0x4c5630['where']=qs[_0xe910('0x2a')](_[_0xe910('0x4e')](_0x4d2869[_0xe910('0x27')],_0x320d33[_0xe910('0x2a')]));if(_0x4d2869[_0xe910('0x27')][_0xe910('0x35')]){_0x4c5630[_0xe910('0x30')]=_[_0xe910('0x33')](_0x4c5630[_0xe910('0x30')],{'$or':_[_0xe910('0x34')](_0x4c5630[_0xe910('0x2c')],function(_0xaa6bcf){var _0x1872cc={};_0x1872cc[_0xaa6bcf]={'$like':'%'+_0x4d2869[_0xe910('0x27')][_0xe910('0x35')]+'%'};return _0x1872cc;})});}_0x4c5630=_[_0xe910('0x33')]({},_0x4c5630,_0x4d2869['options']);return _0x1ecb3b[_0xe910('0x53')](_0x4c5630);}})[_0xe910('0x1d')](function(_0x494cd3){if(_0x494cd3){_0x100f5b=_0x494cd3[_0xe910('0x2e')];if(!_0x4d2869['query'][_0xe910('0x4d')](_0xe910('0x46'))){_0x4c5630[_0xe910('0x15')]=qs[_0xe910('0x15')](_0x4d2869[_0xe910('0x27')][_0xe910('0x15')]);_0x4c5630[_0xe910('0x14')]=qs[_0xe910('0x14')](_0x4d2869[_0xe910('0x27')]['offset']);}return _0x1ecb3b[_0xe910('0x53')](_0x4c5630);}})['then'](function(_0x46fe1c){if(_0x46fe1c){return _0x46fe1c?{'count':_0x100f5b,'rows':_0x46fe1c}:null;}})['then'](respondWithResult(_0x597384,null))[_0xe910('0x3d')](handleError(_0x597384,null));};exports[_0xe910('0x54')]=function(_0x363f27,_0x372357,_0x2b9561){var _0x43aee4,_0x5b1aa9;return db[_0xe910('0x23')][_0xe910('0x3c')]({'where':{'id':_0x363f27['params']['id']}})[_0xe910('0x1d')](handleEntityNotFound(_0x372357,null))[_0xe910('0x1d')](function(_0x1fc0a1){if(_0x1fc0a1){_0x5b1aa9=_0x1fc0a1;return _0x1fc0a1['addLists'](_0x363f27[_0xe910('0x3f')][_0xe910('0x55')],_[_0xe910('0x43')](_0x363f27[_0xe910('0x3f')],[_0xe910('0x55'),'id'])||{});}return null;})[_0xe910('0x56')](function(_0x1d9c15){var _0xc59ba2;_0x43aee4=_0x1d9c15||[];var _0x1f9c4c=[];if(_0x1d9c15){for(var _0x495d07=0x0;_0x495d07<_0x1d9c15[_0xe910('0x2e')];_0x495d07+=0x1){var _0x3f6a1b=_0x1d9c15[_0x495d07][_0xe910('0x41')]({'plain':!![]});_0x5b1aa9[_0xe910('0x57')]=_0x363f27['body'][_0xe910('0x57')]?_0x363f27[_0xe910('0x3f')][_0xe910('0x57')]:_0x5b1aa9[_0xe910('0x57')];switch(_0x5b1aa9[_0xe910('0x57')]){case'always':_0xc59ba2=squel[_0xe910('0x58')]()['into'](_0xe910('0x59'))['fromQuery'](['phone','scheduledAt',_0xe910('0x5a'),_0xe910('0x5b'),_0xe910('0x48'),'createdAt',_0xe910('0x44')],squel[_0xe910('0x5c')]()[_0xe910('0x5d')](_0xe910('0x5e'),'phone')[_0xe910('0x5d')](_0xe910('0x5f'),'scheduledAt')[_0xe910('0x5d')]('id',_0xe910('0x5a'))['field'](_0x3f6a1b[_0xe910('0x60')][_0xe910('0x61')](),_0xe910('0x5b'))['field'](_0x363f27[_0xe910('0x3b')]['id'][_0xe910('0x61')](),_0xe910('0x48'))[_0xe910('0x5d')](_0xe910('0x5f'),_0xe910('0x42'))[_0xe910('0x5d')](_0xe910('0x5f'),_0xe910('0x44'))[_0xe910('0x62')](_0xe910('0x63'))[_0xe910('0x30')](_0xe910('0x64'))[_0xe910('0x30')](_0xe910('0x65'),_0x3f6a1b[_0xe910('0x60')][_0xe910('0x61')]())[_0xe910('0x30')]('phone\x20IS\x20NOT\x20NULL')[_0xe910('0x30')](_0xe910('0x66'),squel[_0xe910('0x5c')]()[_0xe910('0x5d')](_0xe910('0x67'))[_0xe910('0x62')](_0xe910('0x68'))[_0xe910('0x30')](_0xe910('0x69'),_0x363f27[_0xe910('0x3b')]['id'][_0xe910('0x61')]()))['where'](_0xe910('0x66'),squel['select']()[_0xe910('0x5d')](_0xe910('0x5e'))[_0xe910('0x62')]('cm_hopper')[_0xe910('0x30')](_0xe910('0x69'),_0x363f27[_0xe910('0x3b')]['id'][_0xe910('0x61')]())))['toString']();break;case _0xe910('0x6a'):_0xc59ba2=squel['insert']()['into'](_0xe910('0x59'))[_0xe910('0x6b')]([_0xe910('0x5e'),_0xe910('0x6c'),_0xe910('0x5a'),_0xe910('0x5b'),'CampaignId',_0xe910('0x42'),_0xe910('0x44')],squel[_0xe910('0x5c')]()[_0xe910('0x5d')](_0xe910('0x5e'),_0xe910('0x5e'))[_0xe910('0x5d')](_0xe910('0x5f'),_0xe910('0x6c'))['field']('id',_0xe910('0x5a'))['field'](_0x3f6a1b['CmListId'][_0xe910('0x61')](),'ListId')[_0xe910('0x5d')](_0x363f27[_0xe910('0x3b')]['id'][_0xe910('0x61')](),_0xe910('0x48'))[_0xe910('0x5d')](_0xe910('0x5f'),'createdAt')['field'](_0xe910('0x5f'),'updatedAt')['from']('cm_contacts')[_0xe910('0x30')]('deletedAt\x20IS\x20NULL')[_0xe910('0x30')](_0xe910('0x65'),_0x3f6a1b[_0xe910('0x60')][_0xe910('0x61')]())['where'](_0xe910('0x6d'))['where'](_0xe910('0x66'),squel[_0xe910('0x5c')]()[_0xe910('0x5d')]('phone')[_0xe910('0x62')](_0xe910('0x59'))[_0xe910('0x30')](_0xe910('0x69'),_0x363f27['params']['id']['toString']())))['toString']();break;default:_0xc59ba2=squel[_0xe910('0x58')]()[_0xe910('0x6e')]('cm_hopper')[_0xe910('0x6b')]([_0xe910('0x5e'),'scheduledAt','ContactId',_0xe910('0x5b'),'CampaignId','createdAt',_0xe910('0x44')],squel[_0xe910('0x5c')]()[_0xe910('0x5d')](_0xe910('0x5e'),_0xe910('0x5e'))[_0xe910('0x5d')](_0xe910('0x5f'),'scheduledAt')[_0xe910('0x5d')]('id',_0xe910('0x5a'))[_0xe910('0x5d')](_0x3f6a1b[_0xe910('0x60')][_0xe910('0x61')](),_0xe910('0x5b'))[_0xe910('0x5d')](_0x363f27['params']['id'][_0xe910('0x61')](),'CampaignId')['field'](_0xe910('0x5f'),'createdAt')[_0xe910('0x5d')]('NOW()',_0xe910('0x44'))[_0xe910('0x62')]('cm_contacts')[_0xe910('0x30')](_0xe910('0x64'))[_0xe910('0x30')](_0xe910('0x65'),_0x3f6a1b['CmListId'][_0xe910('0x61')]())['where']('phone\x20IS\x20NOT\x20NULL'))[_0xe910('0x61')]();}_0x1f9c4c['push'](db[_0xe910('0x6f')][_0xe910('0x27')](_0xc59ba2));}return BPromise[_0xe910('0x70')](_0x1f9c4c);}})[_0xe910('0x1d')](function(){return _0x43aee4;})[_0xe910('0x1d')](respondWithResult(_0x372357,null))[_0xe910('0x3d')](handleError(_0x372357,null));};exports[_0xe910('0x71')]=function(_0x265225,_0x2cda99,_0xfb213e){var _0x4b173e;return db['Campaign'][_0xe910('0x3c')]({'where':{'id':_0x265225[_0xe910('0x3b')]['id']}})[_0xe910('0x1d')](handleEntityNotFound(_0x2cda99,null))[_0xe910('0x1d')](function(_0x359f38){if(_0x359f38){return _0x359f38[_0xe910('0x71')](_0x265225[_0xe910('0x27')][_0xe910('0x55')]);}})[_0xe910('0x1d')](function(_0x530c1c){if(_0x530c1c){_0x4b173e=_0x530c1c;return db[_0xe910('0x49')][_0xe910('0x1e')]({'where':{'ListId':_0x265225[_0xe910('0x27')][_0xe910('0x55')],'CampaignId':_0x265225[_0xe910('0x3b')]['id']}})[_0xe910('0x1d')](function(){return _0x4b173e;});}})[_0xe910('0x1d')](respondWithStatusCode(_0x2cda99,null))[_0xe910('0x3d')](handleError(_0x2cda99,null));};exports['getBlackLists']=function(_0x2be581,_0x99e89c,_0xa5c33d){var _0x50ded9={'raw':!![],'where':{}};var _0xef0aa5={};var _0xf1ad2a={'count':0x0,'rows':[]};return db[_0xe910('0x23')][_0xe910('0x45')]({'where':{'id':_0x2be581['params']['id']}})['then'](handleEntityNotFound(_0x99e89c,null))[_0xe910('0x1d')](function(_0x46cd24){if(_0x46cd24){_0xef0aa5['model']=_['keys'](db['CmList'][_0xe910('0x24')]);_0xef0aa5[_0xe910('0x27')]=_[_0xe910('0x26')](_0x2be581[_0xe910('0x27')]);_0xef0aa5['filters']=_[_0xe910('0x2b')](_0xef0aa5[_0xe910('0x25')],_0xef0aa5['query']);_0x50ded9[_0xe910('0x2c')]=_['intersection'](_0xef0aa5['model'],qs[_0xe910('0x2d')](_0x2be581[_0xe910('0x27')][_0xe910('0x2d')]));_0x50ded9[_0xe910('0x2c')]=_0x50ded9[_0xe910('0x2c')][_0xe910('0x2e')]?_0x50ded9[_0xe910('0x2c')]:_0xef0aa5[_0xe910('0x25')];if(!_0x2be581[_0xe910('0x27')]['hasOwnProperty']('nolimit')){_0x50ded9['limit']=qs[_0xe910('0x15')](_0x2be581[_0xe910('0x27')]['limit']);_0x50ded9[_0xe910('0x14')]=qs['offset'](_0x2be581[_0xe910('0x27')][_0xe910('0x14')]);}_0x50ded9[_0xe910('0x2f')]=qs[_0xe910('0x47')](_0x2be581[_0xe910('0x27')][_0xe910('0x47')]);_0x50ded9[_0xe910('0x30')]=qs['filters'](_[_0xe910('0x4e')](_0x2be581[_0xe910('0x27')],_0xef0aa5['filters']));_0x50ded9['where'][_0xe910('0x48')]=_0x46cd24['id'];if(_0x2be581[_0xe910('0x27')][_0xe910('0x35')]){_0x50ded9['where']=_[_0xe910('0x33')](_0x50ded9[_0xe910('0x30')],{'$or':_['map'](_0x50ded9[_0xe910('0x2c')],function(_0x5c27a5){var _0x40c3e6={};_0x40c3e6[_0x5c27a5]={'$like':'%'+_0x2be581[_0xe910('0x27')]['filter']+'%'};return _0x40c3e6;})});}_0x50ded9=_[_0xe910('0x33')]({},_0x50ded9,_0x2be581[_0xe910('0x36')]);return db[_0xe910('0x72')]['count']({'where':_0x50ded9['where']})[_0xe910('0x1d')](function(_0x2a3019){_0xf1ad2a[_0xe910('0x13')]=_0x2a3019;if(_0x2be581[_0xe910('0x27')][_0xe910('0x37')]){_0x50ded9[_0xe910('0x38')]=[{'all':!![]}];}return db[_0xe910('0x72')][_0xe910('0x39')](_0x50ded9);})[_0xe910('0x1d')](function(_0x1d7c28){_0xf1ad2a['rows']=_0x1d7c28;return _0xf1ad2a;});}})['then'](respondWithFilteredResult(_0x99e89c,_0x50ded9))[_0xe910('0x3d')](handleError(_0x99e89c,null));};exports[_0xe910('0x73')]=function(_0x12eb1f,_0x81878d,_0x40d094){var _0x36dc24,_0x4ab5dd;return db['Campaign']['find']({'where':{'id':_0x12eb1f['params']['id']}})[_0xe910('0x1d')](handleEntityNotFound(_0x81878d,null))[_0xe910('0x1d')](function(_0x330231){if(_0x330231){_0x4ab5dd=_0x330231;return _0x330231[_0xe910('0x73')](_0x12eb1f[_0xe910('0x3f')][_0xe910('0x55')],_[_0xe910('0x43')](_0x12eb1f[_0xe910('0x3f')],[_0xe910('0x55'),'id'])||{});}return null;})['spread'](function(_0x197958){var _0x2a04fb;_0x36dc24=_0x197958||[];var _0x2033a9=[];if(_0x197958){for(var _0x480477=0x0;_0x480477<_0x197958['length'];_0x480477+=0x1){var _0x540931=_0x197958[_0x480477][_0xe910('0x41')]({'plain':!![]});_0x2a04fb=squel['insert']()['into'](_0xe910('0x74'))[_0xe910('0x6b')](['phone',_0xe910('0x5a'),'ListId',_0xe910('0x48'),_0xe910('0x42'),_0xe910('0x44')],squel[_0xe910('0x5c')]()[_0xe910('0x5d')](_0xe910('0x5e'),_0xe910('0x5e'))[_0xe910('0x5d')]('id',_0xe910('0x5a'))[_0xe910('0x5d')](_0x540931[_0xe910('0x60')]['toString'](),_0xe910('0x5b'))[_0xe910('0x5d')](_0x12eb1f['params']['id'][_0xe910('0x61')](),_0xe910('0x48'))[_0xe910('0x5d')](_0xe910('0x5f'),_0xe910('0x42'))['field']('NOW()',_0xe910('0x44'))[_0xe910('0x62')](_0xe910('0x63'))[_0xe910('0x30')](_0xe910('0x64'))[_0xe910('0x30')](_0xe910('0x65'),_0x540931[_0xe910('0x60')]['toString']())[_0xe910('0x30')](_0xe910('0x6d')))['toString']();_0x2033a9[_0xe910('0x75')](db[_0xe910('0x6f')][_0xe910('0x27')](_0x2a04fb));}return BPromise[_0xe910('0x70')](_0x2033a9);}})['then'](function(){return _0x36dc24;})[_0xe910('0x1d')](respondWithResult(_0x81878d,null))[_0xe910('0x3d')](handleError(_0x81878d,null));};exports['removeBlackLists']=function(_0x71f4c2,_0x546dea,_0x31569f){var _0x32eb36;return db[_0xe910('0x23')][_0xe910('0x3c')]({'where':{'id':_0x71f4c2[_0xe910('0x3b')]['id']}})[_0xe910('0x1d')](handleEntityNotFound(_0x546dea,null))[_0xe910('0x1d')](function(_0x1816b6){if(_0x1816b6){return _0x1816b6[_0xe910('0x76')](_0x71f4c2[_0xe910('0x27')]['ids']);}})[_0xe910('0x1d')](function(_0x4be4d3){if(_0x4be4d3){_0x32eb36=_0x4be4d3;return db['CmHopperBlack']['destroy']({'where':{'ListId':_0x71f4c2['query'][_0xe910('0x55')],'CampaignId':_0x71f4c2[_0xe910('0x3b')]['id']}})[_0xe910('0x1d')](function(){return _0x32eb36;});}})[_0xe910('0x1d')](respondWithStatusCode(_0x546dea,null))[_0xe910('0x3d')](handleError(_0x546dea,null));};
\ No newline at end of file
+var _0x2422=['find','clone','get','omit','createdAt','body','updatedAt','create','destroy','getHoppers','findOne','CmHopper','CampaignId','map','getHopperHistories','CmHopperHistory','CmHopperFinal','CmHopperBlack','getLists','CmList','addLists','ids','spread','dialCheckDuplicateType','always','insert','into','fromQuery','scheduledAt','ListId','select','field','ContactId','toString','NOW()','cm_contacts','deletedAt\x20IS\x20NULL','CmListId','phone\x20IS\x20NOT\x20NULL','cm_hopper_final','phone\x20NOT\x20IN\x20(?)','phone','from','CampaignId\x20=\x20?','cm_hopper','ListId\x20=\x20?','push','sequelize','all','removeLists','addBlackLists','cm_hopper_black','removeBlackLists','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','limit','apply','reject','save','update','then','error','stack','name','model','keys','query','dateStart','dateEnd','intersection','attributes','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','add','day','merge','filter','options','Campaign','includeAll','findAll','rows','catch','show','params','rawAttributes','fields','include'];(function(_0x52df21,_0x234152){var _0xe9624a=function(_0x1f3383){while(--_0x1f3383){_0x52df21['push'](_0x52df21['shift']());}};_0xe9624a(++_0x234152);}(_0x2422,0x197));var _0x2242=function(_0x99cb9d,_0x14fbd1){_0x99cb9d=_0x99cb9d-0x0;var _0x21d1ef=_0x2422[_0x99cb9d];return _0x21d1ef;};'use strict';var jsonpatch=require(_0x2242('0x0'));var rp=require(_0x2242('0x1'));var moment=require(_0x2242('0x2'));var BPromise=require(_0x2242('0x3'));var Mustache=require(_0x2242('0x4'));var util=require(_0x2242('0x5'));var path=require(_0x2242('0x6'));var sox=require(_0x2242('0x7'));var csv=require(_0x2242('0x8'));var ejs=require(_0x2242('0x9'));var fs=require('fs');var _=require(_0x2242('0xa'));var squel=require(_0x2242('0xb'));var crypto=require('crypto');var jsforce=require(_0x2242('0xc'));var deskjs=require(_0x2242('0xd'));var toCsv=require(_0x2242('0x8'));var querystring=require('querystring');var Papa=require(_0x2242('0xe'));var qs=require(_0x2242('0xf'));var logger=require(_0x2242('0x10'))(_0x2242('0x11'));var utils=require(_0x2242('0x12'));var config=require('../../config/environment');var db=require(_0x2242('0x13'))['db'];function respondWithStatusCode(_0x288592,_0x507e50){_0x507e50=_0x507e50||0xcc;return function(_0x26f198){if(_0x26f198){return _0x288592[_0x2242('0x14')](_0x507e50);}return _0x288592[_0x2242('0x15')](_0x507e50)[_0x2242('0x16')]();};}function respondWithResult(_0x3214da,_0x37af1a){_0x37af1a=_0x37af1a||0xc8;return function(_0x171a20){if(_0x171a20){return _0x3214da[_0x2242('0x15')](_0x37af1a)[_0x2242('0x17')](_0x171a20);}};}function respondWithFilteredResult(_0x45214d,_0x394776){return function(_0x5570ca){if(_0x5570ca){var _0x288b02=_0x5570ca[_0x2242('0x18')],_0x36b807=_0x394776[_0x2242('0x19')],_0x20b6de=_0x394776[_0x2242('0x19')]+_0x394776[_0x2242('0x1a')],_0x285717;if(_0x20b6de>=_0x288b02){_0x20b6de=_0x288b02;_0x285717=0xc8;}else{_0x285717=0xce;}_0x45214d['status'](_0x285717);return _0x45214d['set']('Content-Range',_0x36b807+'-'+_0x20b6de+'/'+_0x288b02)[_0x2242('0x17')](_0x5570ca);}return null;};}function patchUpdates(_0x3f2862){return function(_0x8dae9f){try{jsonpatch[_0x2242('0x1b')](_0x8dae9f,_0x3f2862,!![]);}catch(_0x4ee26f){return BPromise[_0x2242('0x1c')](_0x4ee26f);}return _0x8dae9f[_0x2242('0x1d')]();};}function saveUpdates(_0x4798b5,_0x475bc3){return function(_0x3c3819){if(_0x3c3819){return _0x3c3819[_0x2242('0x1e')](_0x4798b5)[_0x2242('0x1f')](function(_0x173419){return _0x173419;});}return null;};}function removeEntity(_0x26787f,_0x14e86f){return function(_0x22afd8){if(_0x22afd8){return _0x22afd8['destroy']()[_0x2242('0x1f')](function(){_0x26787f[_0x2242('0x15')](0xcc)[_0x2242('0x16')]();});}};}function handleEntityNotFound(_0x4b5214,_0x46d79d){return function(_0x53ec44){if(!_0x53ec44){_0x4b5214[_0x2242('0x14')](0x194);}return _0x53ec44;};}function handleError(_0x363a33,_0x1e27fa){_0x1e27fa=_0x1e27fa||0x1f4;return function(_0x57fa7d){logger[_0x2242('0x20')](_0x57fa7d[_0x2242('0x21')]);if(_0x57fa7d[_0x2242('0x22')]){delete _0x57fa7d[_0x2242('0x22')];}_0x363a33['status'](_0x1e27fa)['send'](_0x57fa7d);};}exports['index']=function(_0x11d68d,_0xf60d4e){var _0x2cbd63={},_0x10989b={},_0x4d6bc1={'count':0x0,'rows':[]};var _0x179c42=db['Campaign']['rawAttributes'];_0x10989b[_0x2242('0x23')]=_[_0x2242('0x24')](_0x179c42);var _0xfd90ac={'dateStart':_0x11d68d[_0x2242('0x25')][_0x2242('0x26')],'dateEnd':_0x11d68d[_0x2242('0x25')]['dateEnd']};delete _0x11d68d['query']['dateStart'];delete _0x11d68d[_0x2242('0x25')][_0x2242('0x27')];_0x10989b[_0x2242('0x25')]=_['keys'](_0x11d68d[_0x2242('0x25')]);_0x10989b['filters']=_[_0x2242('0x28')](_0x10989b[_0x2242('0x23')],_0x10989b['query']);_0x2cbd63[_0x2242('0x29')]=_[_0x2242('0x28')](_0x10989b[_0x2242('0x23')],qs['fields'](_0x11d68d[_0x2242('0x25')]['fields']));_0x2cbd63['attributes']=_0x2cbd63[_0x2242('0x29')][_0x2242('0x2a')]?_0x2cbd63['attributes']:_0x10989b['model'];if(!_0x11d68d[_0x2242('0x25')][_0x2242('0x2b')](_0x2242('0x2c'))){_0x2cbd63[_0x2242('0x1a')]=qs[_0x2242('0x1a')](_0x11d68d[_0x2242('0x25')]['limit']);_0x2cbd63[_0x2242('0x19')]=qs['offset'](_0x11d68d['query'][_0x2242('0x19')]);}_0x2cbd63[_0x2242('0x2d')]=qs['sort'](_0x11d68d['query'][_0x2242('0x2e')]);_0x2cbd63[_0x2242('0x2f')]=qs[_0x2242('0x30')](_[_0x2242('0x31')](_0x11d68d[_0x2242('0x25')],_0x10989b['filters']));if(_0xfd90ac[_0x2242('0x26')]){if(_0xfd90ac[_0x2242('0x27')]){_0xfd90ac['dateEnd']=moment(_0xfd90ac[_0x2242('0x27')])['add'](0x1,'day');}else{_0xfd90ac[_0x2242('0x27')]=moment(_0xfd90ac[_0x2242('0x26')])[_0x2242('0x32')](0x1,_0x2242('0x33'));}_[_0x2242('0x34')](_0x2cbd63[_0x2242('0x2f')],{'createdAt':{'$gte':_0xfd90ac['dateStart'],'$lte':_0xfd90ac['dateEnd']}});}if(_0x11d68d[_0x2242('0x25')][_0x2242('0x35')]){_0x2cbd63[_0x2242('0x2f')]=_[_0x2242('0x34')](_0x2cbd63[_0x2242('0x2f')],{'$or':_['map'](_0x2cbd63[_0x2242('0x29')],function(_0xfa8c7e){var _0xdb9363={};_0xdb9363[_0xfa8c7e]={'$like':'%'+_0x11d68d[_0x2242('0x25')][_0x2242('0x35')]+'%'};return _0xdb9363;})});}_0x2cbd63=_[_0x2242('0x34')]({},_0x2cbd63,_0x11d68d[_0x2242('0x36')]);var _0x22eedf={'where':_0x2cbd63[_0x2242('0x2f')]};return db[_0x2242('0x37')][_0x2242('0x18')](_0x22eedf)['then'](function(_0x5458f2){_0x4d6bc1[_0x2242('0x18')]=_0x5458f2;if(_0x11d68d['query'][_0x2242('0x38')]){_0x2cbd63['include']=[{'all':!![]}];}return db[_0x2242('0x37')][_0x2242('0x39')](_0x2cbd63);})['then'](function(_0x3ca9d3){_0x4d6bc1[_0x2242('0x3a')]=_0x3ca9d3;return _0x4d6bc1;})['then'](respondWithFilteredResult(_0xf60d4e,_0x2cbd63))[_0x2242('0x3b')](handleError(_0xf60d4e,null));};exports[_0x2242('0x3c')]=function(_0x362732,_0x490881){var _0x3d9b5e={'raw':![],'where':{'id':_0x362732[_0x2242('0x3d')]['id']}},_0x2337f9={};_0x2337f9[_0x2242('0x23')]=_[_0x2242('0x24')](db['Campaign'][_0x2242('0x3e')]);_0x2337f9['query']=_[_0x2242('0x24')](_0x362732[_0x2242('0x25')]);_0x2337f9['filters']=_[_0x2242('0x28')](_0x2337f9[_0x2242('0x23')],_0x2337f9[_0x2242('0x25')]);_0x3d9b5e['attributes']=_[_0x2242('0x28')](_0x2337f9[_0x2242('0x23')],qs[_0x2242('0x3f')](_0x362732['query'][_0x2242('0x3f')]));_0x3d9b5e[_0x2242('0x29')]=_0x3d9b5e[_0x2242('0x29')][_0x2242('0x2a')]?_0x3d9b5e[_0x2242('0x29')]:_0x2337f9[_0x2242('0x23')];if(_0x362732[_0x2242('0x25')][_0x2242('0x38')]){_0x3d9b5e[_0x2242('0x40')]=[{'all':!![]}];}_0x3d9b5e=_['merge']({},_0x3d9b5e,_0x362732[_0x2242('0x36')]);return db['Campaign'][_0x2242('0x41')](_0x3d9b5e)[_0x2242('0x1f')](handleEntityNotFound(_0x490881,null))['then'](respondWithResult(_0x490881,null))['catch'](handleError(_0x490881,null));};exports['create']=function(_0x16e353,_0x422f20){return db[_0x2242('0x37')]['create'](_0x16e353['body'],{})[_0x2242('0x1f')](respondWithResult(_0x422f20,0xc9))[_0x2242('0x3b')](handleError(_0x422f20,null));};exports[_0x2242('0x42')]=function(_0x5780d8,_0x43e4db){var _0x11a75b={'raw':![],'where':{'id':_0x5780d8[_0x2242('0x3d')]['id']}},_0x216740={};_0x216740[_0x2242('0x23')]=_['keys'](db[_0x2242('0x37')][_0x2242('0x3e')]);_0x11a75b[_0x2242('0x29')]=_[_0x2242('0x28')](_0x216740['model'],qs[_0x2242('0x3f')](_0x5780d8[_0x2242('0x25')][_0x2242('0x3f')]));_0x11a75b['attributes']=_0x11a75b['attributes'][_0x2242('0x2a')]?_0x11a75b['attributes']:_0x216740[_0x2242('0x23')];if(_0x5780d8[_0x2242('0x25')]['includeAll']){_0x11a75b[_0x2242('0x40')]=[{'all':!![]}];}_0x11a75b=_[_0x2242('0x34')]({},_0x11a75b,_0x5780d8[_0x2242('0x36')]);return db[_0x2242('0x37')]['find'](_0x11a75b)[_0x2242('0x1f')](handleEntityNotFound(_0x43e4db,null))[_0x2242('0x1f')](function(_0x457754){if(_0x457754){var _0x40e137=_0x457754[_0x2242('0x43')]({'plain':!![]});_0x40e137=qs[_0x2242('0x44')](_0x40e137,['id',_0x2242('0x45'),'updatedAt']);_0x5780d8[_0x2242('0x46')]=_['omit'](_0x5780d8[_0x2242('0x46')],['id','createdAt',_0x2242('0x47')]);return db[_0x2242('0x37')][_0x2242('0x48')](_[_0x2242('0x34')](_0x40e137,_0x5780d8[_0x2242('0x46')]),{'include':_0x5780d8[_0x2242('0x25')]['includeAll']?[{'all':!![]}]:undefined});}})[_0x2242('0x1f')](respondWithResult(_0x43e4db,0xc9))[_0x2242('0x3b')](handleError(_0x43e4db,null));};exports['update']=function(_0xa62c85,_0x10c0d8){if(_0xa62c85[_0x2242('0x46')]['id']){delete _0xa62c85[_0x2242('0x46')]['id'];}return db['Campaign'][_0x2242('0x41')]({'where':{'id':_0xa62c85['params']['id']}})[_0x2242('0x1f')](handleEntityNotFound(_0x10c0d8,null))[_0x2242('0x1f')](saveUpdates(_0xa62c85[_0x2242('0x46')],null))[_0x2242('0x1f')](respondWithResult(_0x10c0d8,null))['catch'](handleError(_0x10c0d8,null));};exports[_0x2242('0x49')]=function(_0x44fac5,_0x18ba78){return db[_0x2242('0x37')][_0x2242('0x41')]({'where':{'id':_0x44fac5[_0x2242('0x3d')]['id']}})[_0x2242('0x1f')](handleEntityNotFound(_0x18ba78,null))[_0x2242('0x1f')](removeEntity(_0x18ba78,null))[_0x2242('0x3b')](handleError(_0x18ba78,null));};exports[_0x2242('0x4a')]=function(_0x190862,_0x5de9bd,_0x3928f2){var _0x2860a0={'raw':!![],'where':{}};var _0x5703d7={};var _0x1eaead={'count':0x0,'rows':[]};return db[_0x2242('0x37')][_0x2242('0x4b')]({'where':{'id':_0x190862['params']['id']}})[_0x2242('0x1f')](handleEntityNotFound(_0x5de9bd,null))[_0x2242('0x1f')](function(_0x5cbd34){if(_0x5cbd34){_0x5703d7[_0x2242('0x23')]=_['keys'](db[_0x2242('0x4c')]['rawAttributes']);_0x5703d7[_0x2242('0x25')]=_['keys'](_0x190862[_0x2242('0x25')]);_0x5703d7['filters']=_[_0x2242('0x28')](_0x5703d7['model'],_0x5703d7['query']);_0x2860a0['attributes']=_[_0x2242('0x28')](_0x5703d7[_0x2242('0x23')],qs['fields'](_0x190862[_0x2242('0x25')][_0x2242('0x3f')]));_0x2860a0[_0x2242('0x29')]=_0x2860a0[_0x2242('0x29')]['length']?_0x2860a0[_0x2242('0x29')]:_0x5703d7[_0x2242('0x23')];if(!_0x190862['query']['hasOwnProperty'](_0x2242('0x2c'))){_0x2860a0[_0x2242('0x1a')]=qs[_0x2242('0x1a')](_0x190862[_0x2242('0x25')][_0x2242('0x1a')]);_0x2860a0[_0x2242('0x19')]=qs[_0x2242('0x19')](_0x190862[_0x2242('0x25')]['offset']);}_0x2860a0['order']=qs['sort'](_0x190862[_0x2242('0x25')]['sort']);_0x2860a0[_0x2242('0x2f')]=qs[_0x2242('0x30')](_[_0x2242('0x31')](_0x190862['query'],_0x5703d7[_0x2242('0x30')]));_0x2860a0['where'][_0x2242('0x4d')]=_0x5cbd34['id'];if(_0x190862[_0x2242('0x25')]['filter']){_0x2860a0[_0x2242('0x2f')]=_[_0x2242('0x34')](_0x2860a0[_0x2242('0x2f')],{'$or':_[_0x2242('0x4e')](_0x2860a0[_0x2242('0x29')],function(_0x4b7d32){var _0x1671f8={};_0x1671f8[_0x4b7d32]={'$like':'%'+_0x190862[_0x2242('0x25')][_0x2242('0x35')]+'%'};return _0x1671f8;})});}_0x2860a0=_['merge']({},_0x2860a0,_0x190862[_0x2242('0x36')]);return db['CmHopper'][_0x2242('0x18')]({'where':_0x2860a0['where']})[_0x2242('0x1f')](function(_0x52d99c){_0x1eaead[_0x2242('0x18')]=_0x52d99c;if(_0x190862[_0x2242('0x25')][_0x2242('0x38')]){_0x2860a0[_0x2242('0x40')]=[{'all':!![]}];}return db['CmHopper'][_0x2242('0x39')](_0x2860a0);})[_0x2242('0x1f')](function(_0x57da31){_0x1eaead[_0x2242('0x3a')]=_0x57da31;return _0x1eaead;});}})[_0x2242('0x1f')](respondWithFilteredResult(_0x5de9bd,_0x2860a0))[_0x2242('0x3b')](handleError(_0x5de9bd,null));};exports[_0x2242('0x4f')]=function(_0x122d7a,_0x34b983,_0x2e1bde){var _0x4da6f6={'raw':!![],'where':{}};var _0x1ee571={};var _0x4e17d={'count':0x0,'rows':[]};return db['Campaign']['findOne']({'where':{'id':_0x122d7a[_0x2242('0x3d')]['id']}})[_0x2242('0x1f')](handleEntityNotFound(_0x34b983,null))['then'](function(_0x5f4d0b){if(_0x5f4d0b){_0x1ee571[_0x2242('0x23')]=_[_0x2242('0x24')](db[_0x2242('0x50')]['rawAttributes']);_0x1ee571[_0x2242('0x25')]=_[_0x2242('0x24')](_0x122d7a[_0x2242('0x25')]);_0x1ee571[_0x2242('0x30')]=_['intersection'](_0x1ee571[_0x2242('0x23')],_0x1ee571[_0x2242('0x25')]);_0x4da6f6[_0x2242('0x29')]=_[_0x2242('0x28')](_0x1ee571[_0x2242('0x23')],qs['fields'](_0x122d7a['query'][_0x2242('0x3f')]));_0x4da6f6[_0x2242('0x29')]=_0x4da6f6[_0x2242('0x29')]['length']?_0x4da6f6[_0x2242('0x29')]:_0x1ee571[_0x2242('0x23')];if(!_0x122d7a[_0x2242('0x25')][_0x2242('0x2b')]('nolimit')){_0x4da6f6[_0x2242('0x1a')]=qs[_0x2242('0x1a')](_0x122d7a['query'][_0x2242('0x1a')]);_0x4da6f6['offset']=qs[_0x2242('0x19')](_0x122d7a['query'][_0x2242('0x19')]);}_0x4da6f6[_0x2242('0x2d')]=qs[_0x2242('0x2e')](_0x122d7a[_0x2242('0x25')][_0x2242('0x2e')]);_0x4da6f6[_0x2242('0x2f')]=qs[_0x2242('0x30')](_[_0x2242('0x31')](_0x122d7a[_0x2242('0x25')],_0x1ee571['filters']));_0x4da6f6['where']['CampaignId']=_0x5f4d0b['id'];if(_0x122d7a[_0x2242('0x25')][_0x2242('0x35')]){_0x4da6f6[_0x2242('0x2f')]=_[_0x2242('0x34')](_0x4da6f6[_0x2242('0x2f')],{'$or':_[_0x2242('0x4e')](_0x4da6f6['attributes'],function(_0x272666){var _0x5d0678={};_0x5d0678[_0x272666]={'$like':'%'+_0x122d7a[_0x2242('0x25')]['filter']+'%'};return _0x5d0678;})});}_0x4da6f6=_[_0x2242('0x34')]({},_0x4da6f6,_0x122d7a[_0x2242('0x36')]);return db['CmHopperHistory'][_0x2242('0x18')]({'where':_0x4da6f6['where']})['then'](function(_0x1acc1a){_0x4e17d['count']=_0x1acc1a;if(_0x122d7a[_0x2242('0x25')][_0x2242('0x38')]){_0x4da6f6[_0x2242('0x40')]=[{'all':!![]}];}return db[_0x2242('0x50')]['findAll'](_0x4da6f6);})['then'](function(_0x2b7a1f){_0x4e17d[_0x2242('0x3a')]=_0x2b7a1f;return _0x4e17d;});}})[_0x2242('0x1f')](respondWithFilteredResult(_0x34b983,_0x4da6f6))[_0x2242('0x3b')](handleError(_0x34b983,null));};exports['getHopperFinals']=function(_0x5265ee,_0x4f6dd4,_0xefc5a0){var _0x4dba3a={'raw':!![],'where':{}};var _0x2e1ef8={};var _0x487098={'count':0x0,'rows':[]};return db[_0x2242('0x37')][_0x2242('0x4b')]({'where':{'id':_0x5265ee['params']['id']}})[_0x2242('0x1f')](handleEntityNotFound(_0x4f6dd4,null))[_0x2242('0x1f')](function(_0xf910cb){if(_0xf910cb){_0x2e1ef8[_0x2242('0x23')]=_[_0x2242('0x24')](db[_0x2242('0x51')][_0x2242('0x3e')]);_0x2e1ef8['query']=_[_0x2242('0x24')](_0x5265ee[_0x2242('0x25')]);_0x2e1ef8['filters']=_[_0x2242('0x28')](_0x2e1ef8['model'],_0x2e1ef8['query']);_0x4dba3a[_0x2242('0x29')]=_[_0x2242('0x28')](_0x2e1ef8[_0x2242('0x23')],qs['fields'](_0x5265ee[_0x2242('0x25')][_0x2242('0x3f')]));_0x4dba3a['attributes']=_0x4dba3a['attributes'][_0x2242('0x2a')]?_0x4dba3a[_0x2242('0x29')]:_0x2e1ef8[_0x2242('0x23')];if(!_0x5265ee[_0x2242('0x25')][_0x2242('0x2b')](_0x2242('0x2c'))){_0x4dba3a[_0x2242('0x1a')]=qs[_0x2242('0x1a')](_0x5265ee['query']['limit']);_0x4dba3a[_0x2242('0x19')]=qs['offset'](_0x5265ee[_0x2242('0x25')][_0x2242('0x19')]);}_0x4dba3a[_0x2242('0x2d')]=qs[_0x2242('0x2e')](_0x5265ee[_0x2242('0x25')]['sort']);_0x4dba3a[_0x2242('0x2f')]=qs[_0x2242('0x30')](_[_0x2242('0x31')](_0x5265ee[_0x2242('0x25')],_0x2e1ef8[_0x2242('0x30')]));_0x4dba3a[_0x2242('0x2f')]['CampaignId']=_0xf910cb['id'];if(_0x5265ee[_0x2242('0x25')][_0x2242('0x35')]){_0x4dba3a[_0x2242('0x2f')]=_[_0x2242('0x34')](_0x4dba3a[_0x2242('0x2f')],{'$or':_[_0x2242('0x4e')](_0x4dba3a[_0x2242('0x29')],function(_0x275be1){var _0x19fdc4={};_0x19fdc4[_0x275be1]={'$like':'%'+_0x5265ee[_0x2242('0x25')][_0x2242('0x35')]+'%'};return _0x19fdc4;})});}_0x4dba3a=_[_0x2242('0x34')]({},_0x4dba3a,_0x5265ee[_0x2242('0x36')]);return db[_0x2242('0x51')][_0x2242('0x18')]({'where':_0x4dba3a['where']})[_0x2242('0x1f')](function(_0x4b1c43){_0x487098[_0x2242('0x18')]=_0x4b1c43;if(_0x5265ee['query'][_0x2242('0x38')]){_0x4dba3a[_0x2242('0x40')]=[{'all':!![]}];}return db['CmHopperFinal'][_0x2242('0x39')](_0x4dba3a);})[_0x2242('0x1f')](function(_0x4cc5e6){_0x487098[_0x2242('0x3a')]=_0x4cc5e6;return _0x487098;});}})[_0x2242('0x1f')](respondWithFilteredResult(_0x4f6dd4,_0x4dba3a))[_0x2242('0x3b')](handleError(_0x4f6dd4,null));};exports['getHopperBlacks']=function(_0x1f12b6,_0x17d3e6,_0x15d6e3){var _0x39c9ab={'raw':!![],'where':{}};var _0x5235ff={};var _0x18cdec={'count':0x0,'rows':[]};return db['Campaign'][_0x2242('0x4b')]({'where':{'id':_0x1f12b6[_0x2242('0x3d')]['id']}})[_0x2242('0x1f')](handleEntityNotFound(_0x17d3e6,null))[_0x2242('0x1f')](function(_0x551ff5){if(_0x551ff5){_0x5235ff[_0x2242('0x23')]=_[_0x2242('0x24')](db['CmHopperBlack']['rawAttributes']);_0x5235ff[_0x2242('0x25')]=_[_0x2242('0x24')](_0x1f12b6[_0x2242('0x25')]);_0x5235ff[_0x2242('0x30')]=_[_0x2242('0x28')](_0x5235ff['model'],_0x5235ff[_0x2242('0x25')]);_0x39c9ab[_0x2242('0x29')]=_['intersection'](_0x5235ff[_0x2242('0x23')],qs['fields'](_0x1f12b6['query'][_0x2242('0x3f')]));_0x39c9ab[_0x2242('0x29')]=_0x39c9ab[_0x2242('0x29')]['length']?_0x39c9ab[_0x2242('0x29')]:_0x5235ff[_0x2242('0x23')];if(!_0x1f12b6[_0x2242('0x25')]['hasOwnProperty'](_0x2242('0x2c'))){_0x39c9ab['limit']=qs[_0x2242('0x1a')](_0x1f12b6['query'][_0x2242('0x1a')]);_0x39c9ab[_0x2242('0x19')]=qs[_0x2242('0x19')](_0x1f12b6[_0x2242('0x25')][_0x2242('0x19')]);}_0x39c9ab[_0x2242('0x2d')]=qs['sort'](_0x1f12b6[_0x2242('0x25')]['sort']);_0x39c9ab['where']=qs['filters'](_[_0x2242('0x31')](_0x1f12b6[_0x2242('0x25')],_0x5235ff['filters']));_0x39c9ab[_0x2242('0x2f')]['CampaignId']=_0x551ff5['id'];if(_0x1f12b6['query'][_0x2242('0x35')]){_0x39c9ab['where']=_[_0x2242('0x34')](_0x39c9ab['where'],{'$or':_['map'](_0x39c9ab[_0x2242('0x29')],function(_0x135a0a){var _0x346e1a={};_0x346e1a[_0x135a0a]={'$like':'%'+_0x1f12b6[_0x2242('0x25')][_0x2242('0x35')]+'%'};return _0x346e1a;})});}_0x39c9ab=_['merge']({},_0x39c9ab,_0x1f12b6[_0x2242('0x36')]);return db['CmHopperBlack']['count']({'where':_0x39c9ab[_0x2242('0x2f')]})[_0x2242('0x1f')](function(_0x150455){_0x18cdec[_0x2242('0x18')]=_0x150455;if(_0x1f12b6['query'][_0x2242('0x38')]){_0x39c9ab[_0x2242('0x40')]=[{'all':!![]}];}return db[_0x2242('0x52')][_0x2242('0x39')](_0x39c9ab);})['then'](function(_0x4093d3){_0x18cdec[_0x2242('0x3a')]=_0x4093d3;return _0x18cdec;});}})[_0x2242('0x1f')](respondWithFilteredResult(_0x17d3e6,_0x39c9ab))[_0x2242('0x3b')](handleError(_0x17d3e6,null));};exports[_0x2242('0x53')]=function(_0x444bc6,_0xb1d96f,_0x1318d5){var _0x5be327={};var _0x523005={};var _0x4af78c;var _0x5e3489;return db[_0x2242('0x37')][_0x2242('0x4b')]({'where':{'id':_0x444bc6['params']['id']}})[_0x2242('0x1f')](handleEntityNotFound(_0xb1d96f,null))[_0x2242('0x1f')](function(_0x12420f){if(_0x12420f){_0x4af78c=_0x12420f;_0x523005[_0x2242('0x23')]=_[_0x2242('0x24')](db[_0x2242('0x54')][_0x2242('0x3e')]);_0x523005[_0x2242('0x25')]=_['keys'](_0x444bc6[_0x2242('0x25')]);_0x523005[_0x2242('0x30')]=_[_0x2242('0x28')](_0x523005['model'],_0x523005['query']);_0x5be327['attributes']=_[_0x2242('0x28')](_0x523005[_0x2242('0x23')],qs['fields'](_0x444bc6[_0x2242('0x25')][_0x2242('0x3f')]));_0x5be327[_0x2242('0x29')]=_0x5be327[_0x2242('0x29')][_0x2242('0x2a')]?_0x5be327[_0x2242('0x29')]:_0x523005[_0x2242('0x23')];_0x5be327['order']=qs[_0x2242('0x2e')](_0x444bc6[_0x2242('0x25')]['sort']);_0x5be327[_0x2242('0x2f')]=qs['filters'](_[_0x2242('0x31')](_0x444bc6[_0x2242('0x25')],_0x523005[_0x2242('0x30')]));if(_0x444bc6['query']['filter']){_0x5be327[_0x2242('0x2f')]=_[_0x2242('0x34')](_0x5be327[_0x2242('0x2f')],{'$or':_['map'](_0x5be327[_0x2242('0x29')],function(_0x286737){var _0x3d9bea={};_0x3d9bea[_0x286737]={'$like':'%'+_0x444bc6[_0x2242('0x25')][_0x2242('0x35')]+'%'};return _0x3d9bea;})});}_0x5be327=_['merge']({},_0x5be327,_0x444bc6[_0x2242('0x36')]);return _0x4af78c[_0x2242('0x53')](_0x5be327);}})[_0x2242('0x1f')](function(_0x58bf07){if(_0x58bf07){_0x5e3489=_0x58bf07['length'];if(!_0x444bc6[_0x2242('0x25')][_0x2242('0x2b')](_0x2242('0x2c'))){_0x5be327[_0x2242('0x1a')]=qs['limit'](_0x444bc6[_0x2242('0x25')][_0x2242('0x1a')]);_0x5be327[_0x2242('0x19')]=qs[_0x2242('0x19')](_0x444bc6['query'][_0x2242('0x19')]);}return _0x4af78c[_0x2242('0x53')](_0x5be327);}})['then'](function(_0x2b93d1){if(_0x2b93d1){return _0x2b93d1?{'count':_0x5e3489,'rows':_0x2b93d1}:null;}})[_0x2242('0x1f')](respondWithResult(_0xb1d96f,null))[_0x2242('0x3b')](handleError(_0xb1d96f,null));};exports[_0x2242('0x55')]=function(_0x5b7456,_0x24b1e6,_0xde69b1){var _0x4cb651,_0xaf84ef;return db['Campaign'][_0x2242('0x41')]({'where':{'id':_0x5b7456[_0x2242('0x3d')]['id']}})['then'](handleEntityNotFound(_0x24b1e6,null))[_0x2242('0x1f')](function(_0x520c37){if(_0x520c37){_0xaf84ef=_0x520c37;return _0x520c37[_0x2242('0x55')](_0x5b7456[_0x2242('0x46')][_0x2242('0x56')],_[_0x2242('0x44')](_0x5b7456[_0x2242('0x46')],[_0x2242('0x56'),'id'])||{});}return null;})[_0x2242('0x57')](function(_0x4b5a71){var _0x2d7c2b;_0x4cb651=_0x4b5a71||[];var _0x36bbc0=[];if(_0x4b5a71){for(var _0x36ebfa=0x0;_0x36ebfa<_0x4b5a71['length'];_0x36ebfa+=0x1){var _0x584f00=_0x4b5a71[_0x36ebfa][_0x2242('0x43')]({'plain':!![]});_0xaf84ef[_0x2242('0x58')]=_0x5b7456[_0x2242('0x46')][_0x2242('0x58')]?_0x5b7456[_0x2242('0x46')][_0x2242('0x58')]:_0xaf84ef[_0x2242('0x58')];switch(_0xaf84ef[_0x2242('0x58')]){case _0x2242('0x59'):_0x2d7c2b=squel[_0x2242('0x5a')]()[_0x2242('0x5b')]('cm_hopper')[_0x2242('0x5c')](['phone',_0x2242('0x5d'),'ContactId',_0x2242('0x5e'),'CampaignId',_0x2242('0x45'),'updatedAt'],squel[_0x2242('0x5f')]()['field']('phone','phone')[_0x2242('0x60')]('NOW()',_0x2242('0x5d'))[_0x2242('0x60')]('id',_0x2242('0x61'))['field'](_0x584f00['CmListId'][_0x2242('0x62')](),_0x2242('0x5e'))[_0x2242('0x60')](_0x5b7456['params']['id'][_0x2242('0x62')](),_0x2242('0x4d'))[_0x2242('0x60')](_0x2242('0x63'),_0x2242('0x45'))[_0x2242('0x60')](_0x2242('0x63'),_0x2242('0x47'))['from'](_0x2242('0x64'))[_0x2242('0x2f')](_0x2242('0x65'))['where']('ListId\x20=\x20?',_0x584f00[_0x2242('0x66')][_0x2242('0x62')]())[_0x2242('0x2f')](_0x2242('0x67'))[_0x2242('0x2f')]('phone\x20NOT\x20IN\x20(?)',squel[_0x2242('0x5f')]()[_0x2242('0x60')]('calleridnum')['from'](_0x2242('0x68'))[_0x2242('0x2f')]('CampaignId\x20=\x20?',_0x5b7456[_0x2242('0x3d')]['id']['toString']()))[_0x2242('0x2f')](_0x2242('0x69'),squel[_0x2242('0x5f')]()['field'](_0x2242('0x6a'))[_0x2242('0x6b')]('cm_hopper')[_0x2242('0x2f')](_0x2242('0x6c'),_0x5b7456['params']['id'][_0x2242('0x62')]())))[_0x2242('0x62')]();break;case'onlyIfOpen':_0x2d7c2b=squel[_0x2242('0x5a')]()['into'](_0x2242('0x6d'))[_0x2242('0x5c')]([_0x2242('0x6a'),_0x2242('0x5d'),_0x2242('0x61'),_0x2242('0x5e'),'CampaignId','createdAt',_0x2242('0x47')],squel['select']()['field']('phone','phone')['field'](_0x2242('0x63'),'scheduledAt')[_0x2242('0x60')]('id',_0x2242('0x61'))[_0x2242('0x60')](_0x584f00['CmListId']['toString'](),'ListId')[_0x2242('0x60')](_0x5b7456[_0x2242('0x3d')]['id'][_0x2242('0x62')](),'CampaignId')[_0x2242('0x60')]('NOW()',_0x2242('0x45'))[_0x2242('0x60')](_0x2242('0x63'),'updatedAt')[_0x2242('0x6b')](_0x2242('0x64'))['where'](_0x2242('0x65'))['where'](_0x2242('0x6e'),_0x584f00['CmListId']['toString']())[_0x2242('0x2f')](_0x2242('0x67'))['where'](_0x2242('0x69'),squel[_0x2242('0x5f')]()[_0x2242('0x60')](_0x2242('0x6a'))[_0x2242('0x6b')](_0x2242('0x6d'))[_0x2242('0x2f')]('CampaignId\x20=\x20?',_0x5b7456['params']['id'][_0x2242('0x62')]())))[_0x2242('0x62')]();break;default:_0x2d7c2b=squel[_0x2242('0x5a')]()[_0x2242('0x5b')](_0x2242('0x6d'))[_0x2242('0x5c')]([_0x2242('0x6a'),_0x2242('0x5d'),_0x2242('0x61'),_0x2242('0x5e'),_0x2242('0x4d'),'createdAt',_0x2242('0x47')],squel[_0x2242('0x5f')]()[_0x2242('0x60')](_0x2242('0x6a'),_0x2242('0x6a'))[_0x2242('0x60')](_0x2242('0x63'),_0x2242('0x5d'))[_0x2242('0x60')]('id',_0x2242('0x61'))[_0x2242('0x60')](_0x584f00[_0x2242('0x66')][_0x2242('0x62')](),'ListId')['field'](_0x5b7456[_0x2242('0x3d')]['id'][_0x2242('0x62')](),_0x2242('0x4d'))[_0x2242('0x60')](_0x2242('0x63'),'createdAt')[_0x2242('0x60')](_0x2242('0x63'),'updatedAt')[_0x2242('0x6b')](_0x2242('0x64'))[_0x2242('0x2f')]('deletedAt\x20IS\x20NULL')[_0x2242('0x2f')](_0x2242('0x6e'),_0x584f00[_0x2242('0x66')]['toString']())[_0x2242('0x2f')]('phone\x20IS\x20NOT\x20NULL'))[_0x2242('0x62')]();}_0x36bbc0[_0x2242('0x6f')](db[_0x2242('0x70')]['query'](_0x2d7c2b));}return BPromise[_0x2242('0x71')](_0x36bbc0);}})[_0x2242('0x1f')](function(){return _0x4cb651;})['then'](respondWithResult(_0x24b1e6,null))[_0x2242('0x3b')](handleError(_0x24b1e6,null));};exports[_0x2242('0x72')]=function(_0x3c2588,_0x1ec974,_0x192781){var _0x225935;return db[_0x2242('0x37')][_0x2242('0x41')]({'where':{'id':_0x3c2588[_0x2242('0x3d')]['id']}})['then'](handleEntityNotFound(_0x1ec974,null))[_0x2242('0x1f')](function(_0x3b4fe2){if(_0x3b4fe2){return _0x3b4fe2[_0x2242('0x72')](_0x3c2588[_0x2242('0x25')]['ids']);}})[_0x2242('0x1f')](function(_0x18ede1){if(_0x18ede1){_0x225935=_0x18ede1;return db[_0x2242('0x4c')]['destroy']({'where':{'ListId':_0x3c2588[_0x2242('0x25')][_0x2242('0x56')],'CampaignId':_0x3c2588[_0x2242('0x3d')]['id']}})[_0x2242('0x1f')](function(){return _0x225935;});}})[_0x2242('0x1f')](respondWithStatusCode(_0x1ec974,null))['catch'](handleError(_0x1ec974,null));};exports['getBlackLists']=function(_0x535e69,_0x5c175d,_0x191202){var _0x2e642d={'raw':!![],'where':{}};var _0x14e163={};var _0x1383d6={'count':0x0,'rows':[]};return db[_0x2242('0x37')]['findOne']({'where':{'id':_0x535e69['params']['id']}})[_0x2242('0x1f')](handleEntityNotFound(_0x5c175d,null))[_0x2242('0x1f')](function(_0x4c966b){if(_0x4c966b){_0x14e163[_0x2242('0x23')]=_[_0x2242('0x24')](db[_0x2242('0x54')][_0x2242('0x3e')]);_0x14e163[_0x2242('0x25')]=_[_0x2242('0x24')](_0x535e69[_0x2242('0x25')]);_0x14e163['filters']=_['intersection'](_0x14e163[_0x2242('0x23')],_0x14e163['query']);_0x2e642d[_0x2242('0x29')]=_['intersection'](_0x14e163[_0x2242('0x23')],qs[_0x2242('0x3f')](_0x535e69[_0x2242('0x25')]['fields']));_0x2e642d[_0x2242('0x29')]=_0x2e642d[_0x2242('0x29')][_0x2242('0x2a')]?_0x2e642d[_0x2242('0x29')]:_0x14e163['model'];if(!_0x535e69[_0x2242('0x25')][_0x2242('0x2b')](_0x2242('0x2c'))){_0x2e642d[_0x2242('0x1a')]=qs[_0x2242('0x1a')](_0x535e69['query'][_0x2242('0x1a')]);_0x2e642d['offset']=qs[_0x2242('0x19')](_0x535e69[_0x2242('0x25')]['offset']);}_0x2e642d[_0x2242('0x2d')]=qs[_0x2242('0x2e')](_0x535e69['query'][_0x2242('0x2e')]);_0x2e642d[_0x2242('0x2f')]=qs[_0x2242('0x30')](_['pick'](_0x535e69['query'],_0x14e163['filters']));_0x2e642d['where'][_0x2242('0x4d')]=_0x4c966b['id'];if(_0x535e69[_0x2242('0x25')][_0x2242('0x35')]){_0x2e642d[_0x2242('0x2f')]=_[_0x2242('0x34')](_0x2e642d[_0x2242('0x2f')],{'$or':_['map'](_0x2e642d[_0x2242('0x29')],function(_0x496384){var _0x2e8958={};_0x2e8958[_0x496384]={'$like':'%'+_0x535e69['query'][_0x2242('0x35')]+'%'};return _0x2e8958;})});}_0x2e642d=_[_0x2242('0x34')]({},_0x2e642d,_0x535e69['options']);return db['CmList'][_0x2242('0x18')]({'where':_0x2e642d[_0x2242('0x2f')]})[_0x2242('0x1f')](function(_0x41b6aa){_0x1383d6[_0x2242('0x18')]=_0x41b6aa;if(_0x535e69['query'][_0x2242('0x38')]){_0x2e642d[_0x2242('0x40')]=[{'all':!![]}];}return db[_0x2242('0x54')]['findAll'](_0x2e642d);})[_0x2242('0x1f')](function(_0xe75dc6){_0x1383d6[_0x2242('0x3a')]=_0xe75dc6;return _0x1383d6;});}})[_0x2242('0x1f')](respondWithFilteredResult(_0x5c175d,_0x2e642d))[_0x2242('0x3b')](handleError(_0x5c175d,null));};exports['addBlackLists']=function(_0x385206,_0x17cc5d,_0x403a90){var _0x421a74,_0x1f9c9b;return db['Campaign'][_0x2242('0x41')]({'where':{'id':_0x385206[_0x2242('0x3d')]['id']}})['then'](handleEntityNotFound(_0x17cc5d,null))['then'](function(_0x16c609){if(_0x16c609){_0x1f9c9b=_0x16c609;return _0x16c609[_0x2242('0x73')](_0x385206[_0x2242('0x46')]['ids'],_['omit'](_0x385206[_0x2242('0x46')],[_0x2242('0x56'),'id'])||{});}return null;})[_0x2242('0x57')](function(_0x80da1d){var _0x26b91f;_0x421a74=_0x80da1d||[];var _0x44dc45=[];if(_0x80da1d){for(var _0x75c834=0x0;_0x75c834<_0x80da1d[_0x2242('0x2a')];_0x75c834+=0x1){var _0x55c0e1=_0x80da1d[_0x75c834][_0x2242('0x43')]({'plain':!![]});_0x26b91f=squel[_0x2242('0x5a')]()[_0x2242('0x5b')](_0x2242('0x74'))['fromQuery']([_0x2242('0x6a'),'ContactId',_0x2242('0x5e'),_0x2242('0x4d'),_0x2242('0x45'),_0x2242('0x47')],squel[_0x2242('0x5f')]()[_0x2242('0x60')](_0x2242('0x6a'),_0x2242('0x6a'))[_0x2242('0x60')]('id','ContactId')[_0x2242('0x60')](_0x55c0e1['CmListId'][_0x2242('0x62')](),_0x2242('0x5e'))['field'](_0x385206[_0x2242('0x3d')]['id'][_0x2242('0x62')](),'CampaignId')[_0x2242('0x60')]('NOW()',_0x2242('0x45'))[_0x2242('0x60')](_0x2242('0x63'),_0x2242('0x47'))[_0x2242('0x6b')](_0x2242('0x64'))[_0x2242('0x2f')](_0x2242('0x65'))[_0x2242('0x2f')](_0x2242('0x6e'),_0x55c0e1['CmListId'][_0x2242('0x62')]())[_0x2242('0x2f')](_0x2242('0x67')))['toString']();_0x44dc45[_0x2242('0x6f')](db['sequelize'][_0x2242('0x25')](_0x26b91f));}return BPromise[_0x2242('0x71')](_0x44dc45);}})['then'](function(){return _0x421a74;})[_0x2242('0x1f')](respondWithResult(_0x17cc5d,null))[_0x2242('0x3b')](handleError(_0x17cc5d,null));};exports[_0x2242('0x75')]=function(_0x4b757c,_0x25a60a,_0x3fcb92){var _0x1754e2;return db[_0x2242('0x37')][_0x2242('0x41')]({'where':{'id':_0x4b757c[_0x2242('0x3d')]['id']}})[_0x2242('0x1f')](handleEntityNotFound(_0x25a60a,null))[_0x2242('0x1f')](function(_0x223b54){if(_0x223b54){return _0x223b54[_0x2242('0x75')](_0x4b757c['query'][_0x2242('0x56')]);}})[_0x2242('0x1f')](function(_0x4dfaeb){if(_0x4dfaeb){_0x1754e2=_0x4dfaeb;return db['CmHopperBlack'][_0x2242('0x49')]({'where':{'ListId':_0x4b757c[_0x2242('0x25')][_0x2242('0x56')],'CampaignId':_0x4b757c[_0x2242('0x3d')]['id']}})['then'](function(){return _0x1754e2;});}})[_0x2242('0x1f')](respondWithStatusCode(_0x25a60a,null))['catch'](handleError(_0x25a60a,null));};
\ No newline at end of file
index dbf8d19..2a5c55f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e19=['exports','define','Campaign','campaigns','lodash','../../config/logger','api','moment','bluebird','./campaign.attributes'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x4e19,0xc2));var _0x94e1=function(_0x291f8b,_0x3b5591){_0x291f8b=_0x291f8b-0x0;var _0x275171=_0x4e19[_0x291f8b];return _0x275171;};'use strict';var _=require(_0x94e1('0x0'));var util=require('util');var logger=require(_0x94e1('0x1'))(_0x94e1('0x2'));var moment=require(_0x94e1('0x3'));var BPromise=require(_0x94e1('0x4'));var rp=require('request-promise');var attributes=require(_0x94e1('0x5'));module[_0x94e1('0x6')]=function(_0x191d74,_0x3630b6){return _0x191d74[_0x94e1('0x7')](_0x94e1('0x8'),attributes,{'tableName':_0x94e1('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xaa29=['moment','exports','define','Campaign','campaigns','lodash','../../config/logger'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xaa29,0x1b0));var _0x9aa2=function(_0x21df8a,_0x13059e){_0x21df8a=_0x21df8a-0x0;var _0x3cab2b=_0xaa29[_0x21df8a];return _0x3cab2b;};'use strict';var _=require(_0x9aa2('0x0'));var util=require('util');var logger=require(_0x9aa2('0x1'))('api');var moment=require(_0x9aa2('0x2'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require('./campaign.attributes');module[_0x9aa2('0x3')]=function(_0x4fa889,_0x8dd894){return _0x4fa889[_0x9aa2('0x4')](_0x9aa2('0x5'),attributes,{'tableName':_0x9aa2('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 22e4787..00c41b2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1f0b=['model','attributes','map','lodash','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','debug','Campaign,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','Campaign,\x20%s,\x20%s','message','result','catch','GetCampaign','Campaign','findAll','options','where','limit','include'];(function(_0x5898ad,_0x54be28){var _0x5b1aed=function(_0x58f7cc){while(--_0x58f7cc){_0x5898ad['push'](_0x5898ad['shift']());}};_0x5b1aed(++_0x54be28);}(_0x1f0b,0xa3));var _0xb1f0=function(_0x335647,_0x13f7a0){_0x335647=_0x335647-0x0;var _0x5dbf94=_0x1f0b[_0x335647];return _0x5dbf94;};'use strict';var _=require(_0xb1f0('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xb1f0('0x1'));var rs=require(_0xb1f0('0x2'));var fs=require('fs');var db=require(_0xb1f0('0x3'))['db'];var utils=require(_0xb1f0('0x4'));var logger=require(_0xb1f0('0x5'))(_0xb1f0('0x6'));var config=require('../../config/environment');var jayson=require(_0xb1f0('0x7'));var client=jayson[_0xb1f0('0x8')][_0xb1f0('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x1c8b7e,_0x399494,_0x47b4a2){return new BPromise(function(_0xeca02f,_0x46d217){return client[_0xb1f0('0xa')](_0x1c8b7e,_0x47b4a2)[_0xb1f0('0xb')](function(_0x1a4ade){logger[_0xb1f0('0xc')]('Campaign,\x20%s,\x20%s',_0x399494,'request\x20sent');logger[_0xb1f0('0xd')](_0xb1f0('0xe'),_0x399494,_0xb1f0('0xf'),JSON[_0xb1f0('0x10')](_0x1a4ade));if(_0x1a4ade['error']){if(_0x1a4ade['error']['code']===0x1f4){logger[_0xb1f0('0x11')](_0xb1f0('0x12'),_0x399494,_0x1a4ade[_0xb1f0('0x11')][_0xb1f0('0x13')]);return _0x46d217(_0x1a4ade[_0xb1f0('0x11')]['message']);}logger[_0xb1f0('0x11')]('Campaign,\x20%s,\x20%s',_0x399494,_0x1a4ade['error'][_0xb1f0('0x13')]);return _0xeca02f(_0x1a4ade[_0xb1f0('0x11')][_0xb1f0('0x13')]);}else{logger[_0xb1f0('0xc')](_0xb1f0('0x12'),_0x399494,_0xb1f0('0xf'));_0xeca02f(_0x1a4ade[_0xb1f0('0x14')][_0xb1f0('0x13')]);}})[_0xb1f0('0x15')](function(_0x3e807c){logger[_0xb1f0('0x11')]('Campaign,\x20%s,\x20%s',_0x399494,_0x3e807c);_0x46d217(_0x3e807c);});});}exports[_0xb1f0('0x16')]=function(_0x5987f1){var _0xafba28=this;return new Promise(function(_0xaceb90,_0x509981){return db[_0xb1f0('0x17')][_0xb1f0('0x18')]({'raw':_0x5987f1['options']?_0x5987f1[_0xb1f0('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x5987f1[_0xb1f0('0x19')]?_0x5987f1[_0xb1f0('0x19')][_0xb1f0('0x1a')]||null:null,'attributes':_0x5987f1[_0xb1f0('0x19')]?_0x5987f1['options']['attributes']||null:null,'limit':_0x5987f1['options']?_0x5987f1[_0xb1f0('0x19')][_0xb1f0('0x1b')]||null:null,'include':_0x5987f1[_0xb1f0('0x19')]?_0x5987f1[_0xb1f0('0x19')][_0xb1f0('0x1c')]?_['map'](_0x5987f1[_0xb1f0('0x19')][_0xb1f0('0x1c')],function(_0x5e4589){return{'model':db[_0x5e4589[_0xb1f0('0x1d')]],'as':_0x5e4589['as'],'attributes':_0x5e4589[_0xb1f0('0x1e')],'include':_0x5e4589['include']?_[_0xb1f0('0x1f')](_0x5e4589[_0xb1f0('0x1c')],function(_0x3e7024){return{'model':db[_0x3e7024[_0xb1f0('0x1d')]],'as':_0x3e7024['as'],'attributes':_0x3e7024[_0xb1f0('0x1e')],'include':_0x3e7024[_0xb1f0('0x1c')]?_[_0xb1f0('0x1f')](_0x3e7024[_0xb1f0('0x1c')],function(_0x1c8558){return{'model':db[_0x1c8558[_0xb1f0('0x1d')]],'as':_0x1c8558['as'],'attributes':_0x1c8558[_0xb1f0('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xb1f0('0xb')](function(_0xaadcca){logger['info']('GetCampaign',_0x5987f1);logger[_0xb1f0('0xd')](_0xb1f0('0x16'),_0x5987f1,JSON[_0xb1f0('0x10')](_0xaadcca));_0xaceb90(_0xaadcca);})[_0xb1f0('0x15')](function(_0x54b691){logger['error'](_0xb1f0('0x16'),_0x54b691[_0xb1f0('0x13')],_0x5987f1);_0x509981(_0xafba28[_0xb1f0('0x11')](0x1f4,_0x54b691[_0xb1f0('0x13')]));});});};
\ No newline at end of file
+var _0x8061=['where','attributes','limit','include','map','model','then','util','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','jayson/promise','client','http','request','request\x20sent','debug','Campaign,\x20%s,\x20%s,\x20%s','stringify','error','Campaign,\x20%s,\x20%s','message','info','result','catch','GetCampaign','Campaign','findAll','options','raw'];(function(_0x710eb,_0x358784){var _0x141b3d=function(_0x1f96c7){while(--_0x1f96c7){_0x710eb['push'](_0x710eb['shift']());}};_0x141b3d(++_0x358784);}(_0x8061,0x127));var _0x1806=function(_0x2f2f90,_0xbceba7){_0x2f2f90=_0x2f2f90-0x0;var _0x1f0901=_0x8061[_0x2f2f90];return _0x1f0901;};'use strict';var _=require('lodash');var util=require(_0x1806('0x0'));var moment=require('moment');var BPromise=require(_0x1806('0x1'));var rs=require(_0x1806('0x2'));var fs=require('fs');var db=require(_0x1806('0x3'))['db'];var utils=require(_0x1806('0x4'));var logger=require('../../config/logger')(_0x1806('0x5'));var config=require('../../config/environment');var jayson=require(_0x1806('0x6'));var client=jayson[_0x1806('0x7')][_0x1806('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x357103,_0x386540,_0x4a67cf){return new BPromise(function(_0x36d4e7,_0x55dee7){return client[_0x1806('0x9')](_0x357103,_0x4a67cf)['then'](function(_0x2277fc){logger['info']('Campaign,\x20%s,\x20%s',_0x386540,_0x1806('0xa'));logger[_0x1806('0xb')](_0x1806('0xc'),_0x386540,_0x1806('0xa'),JSON[_0x1806('0xd')](_0x2277fc));if(_0x2277fc[_0x1806('0xe')]){if(_0x2277fc[_0x1806('0xe')]['code']===0x1f4){logger[_0x1806('0xe')](_0x1806('0xf'),_0x386540,_0x2277fc['error'][_0x1806('0x10')]);return _0x55dee7(_0x2277fc[_0x1806('0xe')][_0x1806('0x10')]);}logger['error'](_0x1806('0xf'),_0x386540,_0x2277fc[_0x1806('0xe')][_0x1806('0x10')]);return _0x36d4e7(_0x2277fc[_0x1806('0xe')][_0x1806('0x10')]);}else{logger[_0x1806('0x11')]('Campaign,\x20%s,\x20%s',_0x386540,_0x1806('0xa'));_0x36d4e7(_0x2277fc[_0x1806('0x12')]['message']);}})[_0x1806('0x13')](function(_0x4da8b7){logger[_0x1806('0xe')](_0x1806('0xf'),_0x386540,_0x4da8b7);_0x55dee7(_0x4da8b7);});});}exports[_0x1806('0x14')]=function(_0x53a09b){var _0x1b7a4e=this;return new Promise(function(_0x9e6282,_0x4e8c16){return db[_0x1806('0x15')][_0x1806('0x16')]({'raw':_0x53a09b[_0x1806('0x17')]?_0x53a09b['options'][_0x1806('0x18')]===undefined?!![]:![]:!![],'where':_0x53a09b[_0x1806('0x17')]?_0x53a09b['options'][_0x1806('0x19')]||null:null,'attributes':_0x53a09b['options']?_0x53a09b[_0x1806('0x17')][_0x1806('0x1a')]||null:null,'limit':_0x53a09b[_0x1806('0x17')]?_0x53a09b[_0x1806('0x17')][_0x1806('0x1b')]||null:null,'include':_0x53a09b[_0x1806('0x17')]?_0x53a09b[_0x1806('0x17')][_0x1806('0x1c')]?_[_0x1806('0x1d')](_0x53a09b['options'][_0x1806('0x1c')],function(_0xc46336){return{'model':db[_0xc46336['model']],'as':_0xc46336['as'],'attributes':_0xc46336[_0x1806('0x1a')],'include':_0xc46336[_0x1806('0x1c')]?_[_0x1806('0x1d')](_0xc46336['include'],function(_0x1eb7ea){return{'model':db[_0x1eb7ea[_0x1806('0x1e')]],'as':_0x1eb7ea['as'],'attributes':_0x1eb7ea[_0x1806('0x1a')],'include':_0x1eb7ea['include']?_[_0x1806('0x1d')](_0x1eb7ea[_0x1806('0x1c')],function(_0x4859b2){return{'model':db[_0x4859b2[_0x1806('0x1e')]],'as':_0x4859b2['as'],'attributes':_0x4859b2[_0x1806('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x1806('0x1f')](function(_0x1e42dd){logger[_0x1806('0x11')]('GetCampaign',_0x53a09b);logger[_0x1806('0xb')]('GetCampaign',_0x53a09b,JSON['stringify'](_0x1e42dd));_0x9e6282(_0x1e42dd);})[_0x1806('0x13')](function(_0x1c5423){logger[_0x1806('0xe')](_0x1806('0x14'),_0x1c5423[_0x1806('0x10')],_0x53a09b);_0x4e8c16(_0x1b7a4e[_0x1806('0xe')](0x1f4,_0x1c5423[_0x1806('0x10')]));});});};
\ No newline at end of file
index 9923f93..86e2430 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe81d=['path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./campaign.controller','index','get','isAuthenticated','show','/:id/hoppers','getHopperHistories','/:id/hopper_finals','/:id/hopper_black','getHopperBlacks','/:id/lists','/:id/blacklists','post','create','/:id/clone','clone','addBlackLists','put','/:id','update','destroy','delete','removeLists','removeBlackLists','exports','multer','util'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xe81d,0xc4));var _0xde81=function(_0x364c18,_0x1c01a1){_0x364c18=_0x364c18-0x0;var _0x3bbfd3=_0xe81d[_0x364c18];return _0x3bbfd3;};'use strict';var multer=require(_0xde81('0x0'));var util=require(_0xde81('0x1'));var path=require(_0xde81('0x2'));var express=require(_0xde81('0x3'));var router=express[_0xde81('0x4')]();var auth=require(_0xde81('0x5'));var interaction=require(_0xde81('0x6'));var config=require(_0xde81('0x7'));var controller=require(_0xde81('0x8'));router['get']('/',auth['isAuthenticated'](),controller[_0xde81('0x9')]);router[_0xde81('0xa')]('/:id',auth[_0xde81('0xb')](),controller[_0xde81('0xc')]);router[_0xde81('0xa')](_0xde81('0xd'),auth[_0xde81('0xb')](),controller['getHoppers']);router[_0xde81('0xa')]('/:id/hopper_histories',auth[_0xde81('0xb')](),controller[_0xde81('0xe')]);router[_0xde81('0xa')](_0xde81('0xf'),auth['isAuthenticated'](),controller['getHopperFinals']);router[_0xde81('0xa')](_0xde81('0x10'),auth[_0xde81('0xb')](),controller[_0xde81('0x11')]);router['get'](_0xde81('0x12'),auth['isAuthenticated'](),controller['getLists']);router[_0xde81('0xa')](_0xde81('0x13'),auth[_0xde81('0xb')](),controller['getBlackLists']);router[_0xde81('0x14')]('/',auth[_0xde81('0xb')](),controller[_0xde81('0x15')]);router['post'](_0xde81('0x16'),auth[_0xde81('0xb')](),controller[_0xde81('0x17')]);router[_0xde81('0x14')]('/:id/lists',auth[_0xde81('0xb')](),controller['addLists']);router[_0xde81('0x14')](_0xde81('0x13'),auth[_0xde81('0xb')](),controller[_0xde81('0x18')]);router[_0xde81('0x19')](_0xde81('0x1a'),auth['isAuthenticated'](),controller[_0xde81('0x1b')]);router['delete'](_0xde81('0x1a'),auth[_0xde81('0xb')](),controller[_0xde81('0x1c')]);router[_0xde81('0x1d')](_0xde81('0x12'),auth[_0xde81('0xb')](),controller[_0xde81('0x1e')]);router[_0xde81('0x1d')](_0xde81('0x13'),auth['isAuthenticated'](),controller[_0xde81('0x1f')]);module[_0xde81('0x20')]=router;
\ No newline at end of file
+var _0xb4c7=['../../components/interaction/service','../../config/environment','./campaign.controller','get','isAuthenticated','/:id','/:id/hoppers','getHoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','getHopperFinals','getHopperBlacks','/:id/lists','getLists','/:id/blacklists','getBlackLists','post','create','/:id/clone','clone','addBlackLists','update','delete','destroy','removeLists','removeBlackLists','exports','multer','util','path','express','Router'];(function(_0x33f750,_0x3a0638){var _0xd2186a=function(_0x20b011){while(--_0x20b011){_0x33f750['push'](_0x33f750['shift']());}};_0xd2186a(++_0x3a0638);}(_0xb4c7,0x1ea));var _0x7b4c=function(_0x4dc673,_0x5b9575){_0x4dc673=_0x4dc673-0x0;var _0x5e4d01=_0xb4c7[_0x4dc673];return _0x5e4d01;};'use strict';var multer=require(_0x7b4c('0x0'));var util=require(_0x7b4c('0x1'));var path=require(_0x7b4c('0x2'));var express=require(_0x7b4c('0x3'));var router=express[_0x7b4c('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x7b4c('0x5'));var config=require(_0x7b4c('0x6'));var controller=require(_0x7b4c('0x7'));router[_0x7b4c('0x8')]('/',auth[_0x7b4c('0x9')](),controller['index']);router[_0x7b4c('0x8')](_0x7b4c('0xa'),auth[_0x7b4c('0x9')](),controller['show']);router[_0x7b4c('0x8')](_0x7b4c('0xb'),auth['isAuthenticated'](),controller[_0x7b4c('0xc')]);router[_0x7b4c('0x8')](_0x7b4c('0xd'),auth[_0x7b4c('0x9')](),controller[_0x7b4c('0xe')]);router[_0x7b4c('0x8')](_0x7b4c('0xf'),auth[_0x7b4c('0x9')](),controller[_0x7b4c('0x10')]);router[_0x7b4c('0x8')]('/:id/hopper_black',auth['isAuthenticated'](),controller[_0x7b4c('0x11')]);router[_0x7b4c('0x8')](_0x7b4c('0x12'),auth[_0x7b4c('0x9')](),controller[_0x7b4c('0x13')]);router[_0x7b4c('0x8')](_0x7b4c('0x14'),auth[_0x7b4c('0x9')](),controller[_0x7b4c('0x15')]);router[_0x7b4c('0x16')]('/',auth['isAuthenticated'](),controller[_0x7b4c('0x17')]);router[_0x7b4c('0x16')](_0x7b4c('0x18'),auth[_0x7b4c('0x9')](),controller[_0x7b4c('0x19')]);router[_0x7b4c('0x16')](_0x7b4c('0x12'),auth[_0x7b4c('0x9')](),controller['addLists']);router[_0x7b4c('0x16')](_0x7b4c('0x14'),auth[_0x7b4c('0x9')](),controller[_0x7b4c('0x1a')]);router['put'](_0x7b4c('0xa'),auth[_0x7b4c('0x9')](),controller[_0x7b4c('0x1b')]);router[_0x7b4c('0x1c')](_0x7b4c('0xa'),auth[_0x7b4c('0x9')](),controller[_0x7b4c('0x1d')]);router[_0x7b4c('0x1c')](_0x7b4c('0x12'),auth['isAuthenticated'](),controller[_0x7b4c('0x1e')]);router[_0x7b4c('0x1c')](_0x7b4c('0x14'),auth[_0x7b4c('0x9')](),controller[_0x7b4c('0x1f')]);module[_0x7b4c('0x20')]=router;
\ No newline at end of file
index 349ae80..cd86280 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3f8a=['TEXT','sequelize','exports','STRING'];(function(_0x13431e,_0x52005c){var _0x2b5997=function(_0x3953eb){while(--_0x3953eb){_0x13431e['push'](_0x13431e['shift']());}};_0x2b5997(++_0x52005c);}(_0x3f8a,0x1d5));var _0xa3f8=function(_0x4107b4,_0x4b554f){_0x4107b4=_0x4107b4-0x0;var _0x107b4d=_0x3f8a[_0x4107b4];return _0x107b4d;};'use strict';var Sequelize=require(_0xa3f8('0x0'));module[_0xa3f8('0x1')]={'key':{'type':Sequelize[_0xa3f8('0x2')],'allowNull':![]},'value':{'type':Sequelize[_0xa3f8('0x3')],'allowNull':![]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x2bd8=['TEXT','sequelize','STRING'];(function(_0x5c6046,_0x25dcd8){var _0x4c462d=function(_0x4615c8){while(--_0x4615c8){_0x5c6046['push'](_0x5c6046['shift']());}};_0x4c462d(++_0x25dcd8);}(_0x2bd8,0x130));var _0x82bd=function(_0x55061e,_0x590649){_0x55061e=_0x55061e-0x0;var _0x5f2965=_0x2bd8[_0x55061e];return _0x5f2965;};'use strict';var Sequelize=require(_0x82bd('0x0'));module['exports']={'key':{'type':Sequelize[_0x82bd('0x1')],'allowNull':![]},'value':{'type':Sequelize[_0x82bd('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x82bd('0x1')]}};
\ No newline at end of file
index 14e79a5..2a7fb0e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffce=['CannedAnswer','keys','query','dateEnd','filters','intersection','model','fields','attributes','length','hasOwnProperty','order','pick','dateStart','add','day','merge','where','filter','map','options','includeAll','rows','catch','show','rawAttributes','include','find','body','params','create','key','MailAccountId','SmsAccountId','OpenchannelAccountId','ChatWebsiteId','Sequelize','ValidationError','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','json','count','offset','limit','status','set','Content-Range','apply','reject','save','update','then','destroy','end','stack','name','send','index'];(function(_0x277025,_0x2c2c05){var _0x1537e8=function(_0x7dca02){while(--_0x7dca02){_0x277025['push'](_0x277025['shift']());}};_0x1537e8(++_0x2c2c05);}(_0xffce,0xc2));var _0xeffc=function(_0x12e67a,_0x183485){_0x12e67a=_0x12e67a-0x0;var _0x9ec38b=_0xffce[_0x12e67a];return _0x9ec38b;};'use strict';var jsonpatch=require(_0xeffc('0x0'));var rp=require(_0xeffc('0x1'));var moment=require(_0xeffc('0x2'));var BPromise=require(_0xeffc('0x3'));var Mustache=require(_0xeffc('0x4'));var util=require(_0xeffc('0x5'));var path=require(_0xeffc('0x6'));var sox=require(_0xeffc('0x7'));var csv=require(_0xeffc('0x8'));var ejs=require(_0xeffc('0x9'));var fs=require('fs');var _=require(_0xeffc('0xa'));var squel=require(_0xeffc('0xb'));var crypto=require(_0xeffc('0xc'));var jsforce=require(_0xeffc('0xd'));var deskjs=require('desk.js');var toCsv=require(_0xeffc('0x8'));var querystring=require(_0xeffc('0xe'));var Papa=require(_0xeffc('0xf'));var qs=require(_0xeffc('0x10'));var logger=require('../../config/logger')(_0xeffc('0x11'));var utils=require(_0xeffc('0x12'));var config=require(_0xeffc('0x13'));var db=require(_0xeffc('0x14'))['db'];function respondWithStatusCode(_0xe586ba,_0x1c1668){_0x1c1668=_0x1c1668||0xcc;return function(_0x480a6f){if(_0x480a6f){return _0xe586ba[_0xeffc('0x15')](_0x1c1668);}return _0xe586ba['status'](_0x1c1668)['end']();};}function respondWithResult(_0x116e52,_0x3277f5){_0x3277f5=_0x3277f5||0xc8;return function(_0x13e0ba){if(_0x13e0ba){return _0x116e52['status'](_0x3277f5)[_0xeffc('0x16')](_0x13e0ba);}};}function respondWithFilteredResult(_0x1af0cb,_0x1dfb41){return function(_0x2f449e){if(_0x2f449e){var _0x50ccc9=_0x2f449e[_0xeffc('0x17')],_0x1b9c56=_0x1dfb41['offset'],_0x540e3d=_0x1dfb41[_0xeffc('0x18')]+_0x1dfb41[_0xeffc('0x19')],_0x24f20e;if(_0x540e3d>=_0x50ccc9){_0x540e3d=_0x50ccc9;_0x24f20e=0xc8;}else{_0x24f20e=0xce;}_0x1af0cb[_0xeffc('0x1a')](_0x24f20e);return _0x1af0cb[_0xeffc('0x1b')](_0xeffc('0x1c'),_0x1b9c56+'-'+_0x540e3d+'/'+_0x50ccc9)[_0xeffc('0x16')](_0x2f449e);}return null;};}function patchUpdates(_0x46aac1){return function(_0xf27cdd){try{jsonpatch[_0xeffc('0x1d')](_0xf27cdd,_0x46aac1,!![]);}catch(_0x2b45c3){return BPromise[_0xeffc('0x1e')](_0x2b45c3);}return _0xf27cdd[_0xeffc('0x1f')]();};}function saveUpdates(_0x1191cb,_0x3ee11b){return function(_0x3f59d1){if(_0x3f59d1){return _0x3f59d1[_0xeffc('0x20')](_0x1191cb)[_0xeffc('0x21')](function(_0x366c47){return _0x366c47;});}return null;};}function removeEntity(_0x5b5d83,_0x34540b){return function(_0x4d9df3){if(_0x4d9df3){return _0x4d9df3[_0xeffc('0x22')]()[_0xeffc('0x21')](function(){_0x5b5d83[_0xeffc('0x1a')](0xcc)[_0xeffc('0x23')]();});}};}function handleEntityNotFound(_0x501b7e,_0x5af886){return function(_0x4fd558){if(!_0x4fd558){_0x501b7e['sendStatus'](0x194);}return _0x4fd558;};}function handleError(_0x1a9fcd,_0x213f19){_0x213f19=_0x213f19||0x1f4;return function(_0x2cd63f){logger['error'](_0x2cd63f[_0xeffc('0x24')]);if(_0x2cd63f[_0xeffc('0x25')]){delete _0x2cd63f[_0xeffc('0x25')];}_0x1a9fcd[_0xeffc('0x1a')](_0x213f19)[_0xeffc('0x26')](_0x2cd63f);};}exports[_0xeffc('0x27')]=function(_0x1f49f8,_0x2c5525){var _0x5ddb35={},_0x3eb9b5={},_0x34a093={'count':0x0,'rows':[]};var _0x49bd6d=db[_0xeffc('0x28')]['rawAttributes'];_0x3eb9b5['model']=_[_0xeffc('0x29')](_0x49bd6d);var _0x16c756={'dateStart':_0x1f49f8[_0xeffc('0x2a')]['dateStart'],'dateEnd':_0x1f49f8[_0xeffc('0x2a')][_0xeffc('0x2b')]};delete _0x1f49f8[_0xeffc('0x2a')]['dateStart'];delete _0x1f49f8[_0xeffc('0x2a')][_0xeffc('0x2b')];_0x3eb9b5[_0xeffc('0x2a')]=_[_0xeffc('0x29')](_0x1f49f8[_0xeffc('0x2a')]);_0x3eb9b5[_0xeffc('0x2c')]=_[_0xeffc('0x2d')](_0x3eb9b5[_0xeffc('0x2e')],_0x3eb9b5[_0xeffc('0x2a')]);_0x5ddb35['attributes']=_[_0xeffc('0x2d')](_0x3eb9b5[_0xeffc('0x2e')],qs[_0xeffc('0x2f')](_0x1f49f8[_0xeffc('0x2a')][_0xeffc('0x2f')]));_0x5ddb35[_0xeffc('0x30')]=_0x5ddb35[_0xeffc('0x30')][_0xeffc('0x31')]?_0x5ddb35[_0xeffc('0x30')]:_0x3eb9b5[_0xeffc('0x2e')];if(!_0x1f49f8[_0xeffc('0x2a')][_0xeffc('0x32')]('nolimit')){_0x5ddb35[_0xeffc('0x19')]=qs['limit'](_0x1f49f8[_0xeffc('0x2a')][_0xeffc('0x19')]);_0x5ddb35['offset']=qs[_0xeffc('0x18')](_0x1f49f8[_0xeffc('0x2a')][_0xeffc('0x18')]);}_0x5ddb35[_0xeffc('0x33')]=qs['sort'](_0x1f49f8[_0xeffc('0x2a')]['sort']);_0x5ddb35['where']=qs[_0xeffc('0x2c')](_[_0xeffc('0x34')](_0x1f49f8[_0xeffc('0x2a')],_0x3eb9b5[_0xeffc('0x2c')]));if(_0x16c756[_0xeffc('0x35')]){if(_0x16c756[_0xeffc('0x2b')]){_0x16c756[_0xeffc('0x2b')]=moment(_0x16c756[_0xeffc('0x2b')])[_0xeffc('0x36')](0x1,'day');}else{_0x16c756[_0xeffc('0x2b')]=moment(_0x16c756[_0xeffc('0x35')])[_0xeffc('0x36')](0x1,_0xeffc('0x37'));}_[_0xeffc('0x38')](_0x5ddb35[_0xeffc('0x39')],{'createdAt':{'$gte':_0x16c756[_0xeffc('0x35')],'$lte':_0x16c756[_0xeffc('0x2b')]}});}if(_0x1f49f8[_0xeffc('0x2a')][_0xeffc('0x3a')]){_0x5ddb35[_0xeffc('0x39')]=_['merge'](_0x5ddb35['where'],{'$or':_[_0xeffc('0x3b')](_0x5ddb35[_0xeffc('0x30')],function(_0x1a0985){var _0x33a431={};_0x33a431[_0x1a0985]={'$like':'%'+_0x1f49f8[_0xeffc('0x2a')][_0xeffc('0x3a')]+'%'};return _0x33a431;})});}_0x5ddb35=_[_0xeffc('0x38')]({},_0x5ddb35,_0x1f49f8[_0xeffc('0x3c')]);var _0x2fe9e3={'where':_0x5ddb35[_0xeffc('0x39')]};return db[_0xeffc('0x28')][_0xeffc('0x17')](_0x2fe9e3)[_0xeffc('0x21')](function(_0x226d54){_0x34a093[_0xeffc('0x17')]=_0x226d54;if(_0x1f49f8['query'][_0xeffc('0x3d')]){_0x5ddb35['include']=[{'all':!![]}];}return db[_0xeffc('0x28')]['findAll'](_0x5ddb35);})['then'](function(_0x215836){_0x34a093[_0xeffc('0x3e')]=_0x215836;return _0x34a093;})[_0xeffc('0x21')](respondWithFilteredResult(_0x2c5525,_0x5ddb35))[_0xeffc('0x3f')](handleError(_0x2c5525,null));};exports[_0xeffc('0x40')]=function(_0x102d08,_0x5bfd57){var _0x1c5dab={'raw':!![],'where':{'id':_0x102d08['params']['id']}},_0x2c424e={};_0x2c424e['model']=_[_0xeffc('0x29')](db[_0xeffc('0x28')][_0xeffc('0x41')]);_0x2c424e[_0xeffc('0x2a')]=_[_0xeffc('0x29')](_0x102d08[_0xeffc('0x2a')]);_0x2c424e[_0xeffc('0x2c')]=_[_0xeffc('0x2d')](_0x2c424e[_0xeffc('0x2e')],_0x2c424e[_0xeffc('0x2a')]);_0x1c5dab[_0xeffc('0x30')]=_[_0xeffc('0x2d')](_0x2c424e[_0xeffc('0x2e')],qs[_0xeffc('0x2f')](_0x102d08['query'][_0xeffc('0x2f')]));_0x1c5dab[_0xeffc('0x30')]=_0x1c5dab['attributes'][_0xeffc('0x31')]?_0x1c5dab[_0xeffc('0x30')]:_0x2c424e['model'];if(_0x102d08[_0xeffc('0x2a')]['includeAll']){_0x1c5dab[_0xeffc('0x42')]=[{'all':!![]}];}_0x1c5dab=_[_0xeffc('0x38')]({},_0x1c5dab,_0x102d08[_0xeffc('0x3c')]);return db[_0xeffc('0x28')][_0xeffc('0x43')](_0x1c5dab)['then'](handleEntityNotFound(_0x5bfd57,null))[_0xeffc('0x21')](respondWithResult(_0x5bfd57,null))[_0xeffc('0x3f')](handleError(_0x5bfd57,null));};exports[_0xeffc('0x20')]=function(_0x57331d,_0x4189a3){if(_0x57331d[_0xeffc('0x44')]['id']){delete _0x57331d[_0xeffc('0x44')]['id'];}return db[_0xeffc('0x28')][_0xeffc('0x43')]({'where':{'id':_0x57331d[_0xeffc('0x45')]['id']}})[_0xeffc('0x21')](handleEntityNotFound(_0x4189a3,null))[_0xeffc('0x21')](saveUpdates(_0x57331d[_0xeffc('0x44')],null))[_0xeffc('0x21')](respondWithResult(_0x4189a3,null))[_0xeffc('0x3f')](handleError(_0x4189a3,null));};exports['destroy']=function(_0x196ce4,_0x143c4b){return db[_0xeffc('0x28')][_0xeffc('0x43')]({'where':{'id':_0x196ce4[_0xeffc('0x45')]['id']}})[_0xeffc('0x21')](handleEntityNotFound(_0x143c4b,null))[_0xeffc('0x21')](removeEntity(_0x143c4b,null))[_0xeffc('0x3f')](handleError(_0x143c4b,null));};exports[_0xeffc('0x46')]=function(_0x28a742,_0x53a7e8){var _0x49150e={'key':_0x28a742['body'][_0xeffc('0x47')]};if(_0x28a742[_0xeffc('0x44')][_0xeffc('0x48')]){_0x49150e[_0xeffc('0x48')]=_0x28a742[_0xeffc('0x44')][_0xeffc('0x48')];}else if(_0x28a742[_0xeffc('0x44')][_0xeffc('0x49')]){_0x49150e[_0xeffc('0x49')]=_0x28a742['body'][_0xeffc('0x49')];}else if(_0x28a742[_0xeffc('0x44')][_0xeffc('0x4a')]){_0x49150e['OpenchannelAccountId']=_0x28a742[_0xeffc('0x44')]['OpenchannelAccountId'];}else if(_0x28a742['body'][_0xeffc('0x4b')]){_0x49150e['ChatWebsiteId']=_0x28a742['body'][_0xeffc('0x4b')];}return db[_0xeffc('0x28')][_0xeffc('0x43')]({'where':_0x49150e})[_0xeffc('0x21')](function(_0x3bee75){if(_0x3bee75){throw new db[(_0xeffc('0x4c'))][(_0xeffc('0x4d'))]('The\x20inserted\x20key\x20already\x20exists.');}return db['CannedAnswer']['create'](_0x28a742[_0xeffc('0x44')]);})[_0xeffc('0x21')](respondWithResult(_0x53a7e8,0xc9))[_0xeffc('0x3f')](handleError(_0x53a7e8,null));};
\ No newline at end of file
+var _0xa793=['fields','length','hasOwnProperty','nolimit','sort','where','pick','add','day','merge','filter','map','options','findAll','params','include','catch','body','find','destroy','create','key','MailAccountId','SmsAccountId','OpenchannelAccountId','ChatWebsiteId','Sequelize','ValidationError','The\x20inserted\x20key\x20already\x20exists.','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','desk.js','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','error','stack','name','send','index','CannedAnswer','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes'];(function(_0x347541,_0x137cf){var _0x5c0e38=function(_0x32a276){while(--_0x32a276){_0x347541['push'](_0x347541['shift']());}};_0x5c0e38(++_0x137cf);}(_0xa793,0x19e));var _0x3a79=function(_0x46800d,_0x588500){_0x46800d=_0x46800d-0x0;var _0x3824cd=_0xa793[_0x46800d];return _0x3824cd;};'use strict';var jsonpatch=require(_0x3a79('0x0'));var rp=require(_0x3a79('0x1'));var moment=require(_0x3a79('0x2'));var BPromise=require(_0x3a79('0x3'));var Mustache=require(_0x3a79('0x4'));var util=require(_0x3a79('0x5'));var path=require(_0x3a79('0x6'));var sox=require(_0x3a79('0x7'));var csv=require(_0x3a79('0x8'));var ejs=require(_0x3a79('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x3a79('0xa'));var crypto=require(_0x3a79('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x3a79('0xc'));var toCsv=require(_0x3a79('0x8'));var querystring=require('querystring');var Papa=require(_0x3a79('0xd'));var qs=require(_0x3a79('0xe'));var logger=require(_0x3a79('0xf'))(_0x3a79('0x10'));var utils=require(_0x3a79('0x11'));var config=require(_0x3a79('0x12'));var db=require(_0x3a79('0x13'))['db'];function respondWithStatusCode(_0x2281c4,_0x1c54a5){_0x1c54a5=_0x1c54a5||0xcc;return function(_0x23fa14){if(_0x23fa14){return _0x2281c4[_0x3a79('0x14')](_0x1c54a5);}return _0x2281c4[_0x3a79('0x15')](_0x1c54a5)[_0x3a79('0x16')]();};}function respondWithResult(_0x5d1f0b,_0x13f859){_0x13f859=_0x13f859||0xc8;return function(_0x5eabb3){if(_0x5eabb3){return _0x5d1f0b[_0x3a79('0x15')](_0x13f859)[_0x3a79('0x17')](_0x5eabb3);}};}function respondWithFilteredResult(_0x1ad953,_0x3b8834){return function(_0x827d7b){if(_0x827d7b){var _0x1d2c9b=_0x827d7b[_0x3a79('0x18')],_0x34e334=_0x3b8834['offset'],_0x2158b9=_0x3b8834[_0x3a79('0x19')]+_0x3b8834[_0x3a79('0x1a')],_0x4a7671;if(_0x2158b9>=_0x1d2c9b){_0x2158b9=_0x1d2c9b;_0x4a7671=0xc8;}else{_0x4a7671=0xce;}_0x1ad953['status'](_0x4a7671);return _0x1ad953[_0x3a79('0x1b')](_0x3a79('0x1c'),_0x34e334+'-'+_0x2158b9+'/'+_0x1d2c9b)[_0x3a79('0x17')](_0x827d7b);}return null;};}function patchUpdates(_0x3f352d){return function(_0x188a42){try{jsonpatch[_0x3a79('0x1d')](_0x188a42,_0x3f352d,!![]);}catch(_0x5f1d20){return BPromise[_0x3a79('0x1e')](_0x5f1d20);}return _0x188a42['save']();};}function saveUpdates(_0x227819,_0x45d01a){return function(_0x1715f5){if(_0x1715f5){return _0x1715f5[_0x3a79('0x1f')](_0x227819)[_0x3a79('0x20')](function(_0x2c5ea8){return _0x2c5ea8;});}return null;};}function removeEntity(_0x5a0eef,_0x54ed85){return function(_0x1cfadd){if(_0x1cfadd){return _0x1cfadd['destroy']()['then'](function(){_0x5a0eef[_0x3a79('0x15')](0xcc)[_0x3a79('0x16')]();});}};}function handleEntityNotFound(_0x18de6b,_0x22f6c8){return function(_0x59330f){if(!_0x59330f){_0x18de6b[_0x3a79('0x14')](0x194);}return _0x59330f;};}function handleError(_0x209777,_0x36539e){_0x36539e=_0x36539e||0x1f4;return function(_0x3696a6){logger[_0x3a79('0x21')](_0x3696a6[_0x3a79('0x22')]);if(_0x3696a6[_0x3a79('0x23')]){delete _0x3696a6['name'];}_0x209777['status'](_0x36539e)[_0x3a79('0x24')](_0x3696a6);};}exports[_0x3a79('0x25')]=function(_0x57546c,_0x4e281b){var _0x45c816={},_0x2c21bb={},_0x10439e={'count':0x0,'rows':[]};var _0x3bb1c6=db[_0x3a79('0x26')][_0x3a79('0x27')];_0x2c21bb[_0x3a79('0x28')]=_[_0x3a79('0x29')](_0x3bb1c6);var _0xe8c52b={'dateStart':_0x57546c[_0x3a79('0x2a')][_0x3a79('0x2b')],'dateEnd':_0x57546c[_0x3a79('0x2a')][_0x3a79('0x2c')]};delete _0x57546c[_0x3a79('0x2a')][_0x3a79('0x2b')];delete _0x57546c[_0x3a79('0x2a')]['dateEnd'];_0x2c21bb[_0x3a79('0x2a')]=_[_0x3a79('0x29')](_0x57546c[_0x3a79('0x2a')]);_0x2c21bb[_0x3a79('0x2d')]=_[_0x3a79('0x2e')](_0x2c21bb[_0x3a79('0x28')],_0x2c21bb[_0x3a79('0x2a')]);_0x45c816[_0x3a79('0x2f')]=_[_0x3a79('0x2e')](_0x2c21bb[_0x3a79('0x28')],qs['fields'](_0x57546c['query'][_0x3a79('0x30')]));_0x45c816[_0x3a79('0x2f')]=_0x45c816[_0x3a79('0x2f')][_0x3a79('0x31')]?_0x45c816[_0x3a79('0x2f')]:_0x2c21bb[_0x3a79('0x28')];if(!_0x57546c['query'][_0x3a79('0x32')](_0x3a79('0x33'))){_0x45c816[_0x3a79('0x1a')]=qs[_0x3a79('0x1a')](_0x57546c[_0x3a79('0x2a')][_0x3a79('0x1a')]);_0x45c816[_0x3a79('0x19')]=qs[_0x3a79('0x19')](_0x57546c[_0x3a79('0x2a')][_0x3a79('0x19')]);}_0x45c816['order']=qs['sort'](_0x57546c[_0x3a79('0x2a')][_0x3a79('0x34')]);_0x45c816[_0x3a79('0x35')]=qs[_0x3a79('0x2d')](_[_0x3a79('0x36')](_0x57546c['query'],_0x2c21bb['filters']));if(_0xe8c52b['dateStart']){if(_0xe8c52b[_0x3a79('0x2c')]){_0xe8c52b[_0x3a79('0x2c')]=moment(_0xe8c52b[_0x3a79('0x2c')])[_0x3a79('0x37')](0x1,_0x3a79('0x38'));}else{_0xe8c52b['dateEnd']=moment(_0xe8c52b['dateStart'])[_0x3a79('0x37')](0x1,_0x3a79('0x38'));}_[_0x3a79('0x39')](_0x45c816[_0x3a79('0x35')],{'createdAt':{'$gte':_0xe8c52b['dateStart'],'$lte':_0xe8c52b[_0x3a79('0x2c')]}});}if(_0x57546c[_0x3a79('0x2a')][_0x3a79('0x3a')]){_0x45c816[_0x3a79('0x35')]=_[_0x3a79('0x39')](_0x45c816[_0x3a79('0x35')],{'$or':_[_0x3a79('0x3b')](_0x45c816[_0x3a79('0x2f')],function(_0x5c533c){var _0x55210d={};_0x55210d[_0x5c533c]={'$like':'%'+_0x57546c[_0x3a79('0x2a')][_0x3a79('0x3a')]+'%'};return _0x55210d;})});}_0x45c816=_[_0x3a79('0x39')]({},_0x45c816,_0x57546c[_0x3a79('0x3c')]);var _0x2a2245={'where':_0x45c816[_0x3a79('0x35')]};return db['CannedAnswer'][_0x3a79('0x18')](_0x2a2245)[_0x3a79('0x20')](function(_0x45872e){_0x10439e[_0x3a79('0x18')]=_0x45872e;if(_0x57546c[_0x3a79('0x2a')]['includeAll']){_0x45c816['include']=[{'all':!![]}];}return db[_0x3a79('0x26')][_0x3a79('0x3d')](_0x45c816);})[_0x3a79('0x20')](function(_0x57cec0){_0x10439e['rows']=_0x57cec0;return _0x10439e;})['then'](respondWithFilteredResult(_0x4e281b,_0x45c816))['catch'](handleError(_0x4e281b,null));};exports['show']=function(_0xdd164,_0x292abc){var _0x3cfd8d={'raw':!![],'where':{'id':_0xdd164[_0x3a79('0x3e')]['id']}},_0x4bd218={};_0x4bd218['model']=_[_0x3a79('0x29')](db[_0x3a79('0x26')][_0x3a79('0x27')]);_0x4bd218[_0x3a79('0x2a')]=_[_0x3a79('0x29')](_0xdd164[_0x3a79('0x2a')]);_0x4bd218[_0x3a79('0x2d')]=_[_0x3a79('0x2e')](_0x4bd218[_0x3a79('0x28')],_0x4bd218['query']);_0x3cfd8d['attributes']=_[_0x3a79('0x2e')](_0x4bd218[_0x3a79('0x28')],qs[_0x3a79('0x30')](_0xdd164[_0x3a79('0x2a')][_0x3a79('0x30')]));_0x3cfd8d['attributes']=_0x3cfd8d[_0x3a79('0x2f')][_0x3a79('0x31')]?_0x3cfd8d['attributes']:_0x4bd218[_0x3a79('0x28')];if(_0xdd164[_0x3a79('0x2a')]['includeAll']){_0x3cfd8d[_0x3a79('0x3f')]=[{'all':!![]}];}_0x3cfd8d=_['merge']({},_0x3cfd8d,_0xdd164[_0x3a79('0x3c')]);return db[_0x3a79('0x26')]['find'](_0x3cfd8d)[_0x3a79('0x20')](handleEntityNotFound(_0x292abc,null))['then'](respondWithResult(_0x292abc,null))[_0x3a79('0x40')](handleError(_0x292abc,null));};exports['update']=function(_0x2fa566,_0x36fb28){if(_0x2fa566['body']['id']){delete _0x2fa566[_0x3a79('0x41')]['id'];}return db[_0x3a79('0x26')][_0x3a79('0x42')]({'where':{'id':_0x2fa566[_0x3a79('0x3e')]['id']}})[_0x3a79('0x20')](handleEntityNotFound(_0x36fb28,null))[_0x3a79('0x20')](saveUpdates(_0x2fa566[_0x3a79('0x41')],null))['then'](respondWithResult(_0x36fb28,null))['catch'](handleError(_0x36fb28,null));};exports[_0x3a79('0x43')]=function(_0x49699d,_0x130d37){return db[_0x3a79('0x26')][_0x3a79('0x42')]({'where':{'id':_0x49699d[_0x3a79('0x3e')]['id']}})[_0x3a79('0x20')](handleEntityNotFound(_0x130d37,null))[_0x3a79('0x20')](removeEntity(_0x130d37,null))[_0x3a79('0x40')](handleError(_0x130d37,null));};exports[_0x3a79('0x44')]=function(_0xd16575,_0x468f43){var _0x180259={'key':_0xd16575[_0x3a79('0x41')][_0x3a79('0x45')]};if(_0xd16575['body'][_0x3a79('0x46')]){_0x180259[_0x3a79('0x46')]=_0xd16575['body'][_0x3a79('0x46')];}else if(_0xd16575['body']['SmsAccountId']){_0x180259[_0x3a79('0x47')]=_0xd16575[_0x3a79('0x41')]['SmsAccountId'];}else if(_0xd16575[_0x3a79('0x41')][_0x3a79('0x48')]){_0x180259[_0x3a79('0x48')]=_0xd16575[_0x3a79('0x41')][_0x3a79('0x48')];}else if(_0xd16575[_0x3a79('0x41')]['ChatWebsiteId']){_0x180259[_0x3a79('0x49')]=_0xd16575[_0x3a79('0x41')][_0x3a79('0x49')];}return db['CannedAnswer'][_0x3a79('0x42')]({'where':_0x180259})[_0x3a79('0x20')](function(_0x1058c6){if(_0x1058c6){throw new db[(_0x3a79('0x4a'))][(_0x3a79('0x4b'))](_0x3a79('0x4c'));}return db[_0x3a79('0x26')][_0x3a79('0x44')](_0xd16575[_0x3a79('0x41')]);})[_0x3a79('0x20')](respondWithResult(_0x468f43,0xc9))[_0x3a79('0x40')](handleError(_0x468f43,null));};
\ No newline at end of file
index 7dcfff5..78970b5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee62=['lodash','util','../../config/logger','api','moment','bluebird','./cannedAnswer.attributes','define','CannedAnswer','tools_canned_answers'];(function(_0x4d1c84,_0x9247f3){var _0x2949e2=function(_0x5d0c0a){while(--_0x5d0c0a){_0x4d1c84['push'](_0x4d1c84['shift']());}};_0x2949e2(++_0x9247f3);}(_0xee62,0x1ea));var _0x2ee6=function(_0x1d0512,_0x491295){_0x1d0512=_0x1d0512-0x0;var _0x5aac74=_0xee62[_0x1d0512];return _0x5aac74;};'use strict';var _=require(_0x2ee6('0x0'));var util=require(_0x2ee6('0x1'));var logger=require(_0x2ee6('0x2'))(_0x2ee6('0x3'));var moment=require(_0x2ee6('0x4'));var BPromise=require(_0x2ee6('0x5'));var rp=require('request-promise');var attributes=require(_0x2ee6('0x6'));module['exports']=function(_0x4bab7d,_0x45a02f){return _0x4bab7d[_0x2ee6('0x7')](_0x2ee6('0x8'),attributes,{'tableName':_0x2ee6('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3c11=['CannedAnswer','api','bluebird','request-promise','./cannedAnswer.attributes','exports','define'];(function(_0x2d72bc,_0x4797db){var _0x7a16e6=function(_0x58ea48){while(--_0x58ea48){_0x2d72bc['push'](_0x2d72bc['shift']());}};_0x7a16e6(++_0x4797db);}(_0x3c11,0x71));var _0x13c1=function(_0x424e0d,_0x2ccac3){_0x424e0d=_0x424e0d-0x0;var _0x26881e=_0x3c11[_0x424e0d];return _0x26881e;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')(_0x13c1('0x0'));var moment=require('moment');var BPromise=require(_0x13c1('0x1'));var rp=require(_0x13c1('0x2'));var attributes=require(_0x13c1('0x3'));module[_0x13c1('0x4')]=function(_0x1db122,_0x40e8cd){return _0x1db122[_0x13c1('0x5')](_0x13c1('0x6'),attributes,{'tableName':'tools_canned_answers','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 660b3f8..8f437a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd743=['jayson/promise','client','http','request','then','error','CannedAnswer,\x20%s,\x20%s','message','request\x20sent','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment'];(function(_0x2b84b3,_0x55f007){var _0x3fedc1=function(_0x49a3cc){while(--_0x49a3cc){_0x2b84b3['push'](_0x2b84b3['shift']());}};_0x3fedc1(++_0x55f007);}(_0xd743,0xee));var _0x3d74=function(_0x310cae,_0x2e5899){_0x310cae=_0x310cae-0x0;var _0x112a6d=_0xd743[_0x310cae];return _0x112a6d;};'use strict';var _=require('lodash');var util=require(_0x3d74('0x0'));var moment=require(_0x3d74('0x1'));var BPromise=require(_0x3d74('0x2'));var rs=require(_0x3d74('0x3'));var fs=require('fs');var db=require(_0x3d74('0x4'))['db'];var utils=require(_0x3d74('0x5'));var logger=require(_0x3d74('0x6'))(_0x3d74('0x7'));var config=require(_0x3d74('0x8'));var jayson=require(_0x3d74('0x9'));var client=jayson[_0x3d74('0xa')][_0x3d74('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x3647a4,_0x39768d,_0x1b9d78){return new BPromise(function(_0x473056,_0x32696e){return client[_0x3d74('0xc')](_0x3647a4,_0x1b9d78)[_0x3d74('0xd')](function(_0x2a804c){logger['info']('CannedAnswer,\x20%s,\x20%s',_0x39768d,'request\x20sent');logger['debug']('CannedAnswer,\x20%s,\x20%s,\x20%s',_0x39768d,'request\x20sent',JSON['stringify'](_0x2a804c));if(_0x2a804c[_0x3d74('0xe')]){if(_0x2a804c[_0x3d74('0xe')]['code']===0x1f4){logger[_0x3d74('0xe')](_0x3d74('0xf'),_0x39768d,_0x2a804c[_0x3d74('0xe')][_0x3d74('0x10')]);return _0x32696e(_0x2a804c['error'][_0x3d74('0x10')]);}logger['error']('CannedAnswer,\x20%s,\x20%s',_0x39768d,_0x2a804c['error'][_0x3d74('0x10')]);return _0x473056(_0x2a804c[_0x3d74('0xe')]['message']);}else{logger['info'](_0x3d74('0xf'),_0x39768d,_0x3d74('0x11'));_0x473056(_0x2a804c['result'][_0x3d74('0x10')]);}})[_0x3d74('0x12')](function(_0x52a65d){logger[_0x3d74('0xe')]('CannedAnswer,\x20%s,\x20%s',_0x39768d,_0x52a65d);_0x32696e(_0x52a65d);});});}
\ No newline at end of file
+var _0x6592=['catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','client','request','then','CannedAnswer,\x20%s,\x20%s','debug','CannedAnswer,\x20%s,\x20%s,\x20%s','error','code','message','info','request\x20sent','result'];(function(_0x44104e,_0x2d2d96){var _0x51e6a8=function(_0x11d488){while(--_0x11d488){_0x44104e['push'](_0x44104e['shift']());}};_0x51e6a8(++_0x2d2d96);}(_0x6592,0xd3));var _0x2659=function(_0x449158,_0x44e1b0){_0x449158=_0x449158-0x0;var _0x1f3c3a=_0x6592[_0x449158];return _0x1f3c3a;};'use strict';var _=require('lodash');var util=require(_0x2659('0x0'));var moment=require(_0x2659('0x1'));var BPromise=require(_0x2659('0x2'));var rs=require(_0x2659('0x3'));var fs=require('fs');var db=require(_0x2659('0x4'))['db'];var utils=require(_0x2659('0x5'));var logger=require('../../config/logger')(_0x2659('0x6'));var config=require(_0x2659('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x2659('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x42650f,_0x1d8953,_0x14459e){return new BPromise(function(_0xbae971,_0x338876){return client[_0x2659('0x9')](_0x42650f,_0x14459e)[_0x2659('0xa')](function(_0x40e7f1){logger['info'](_0x2659('0xb'),_0x1d8953,'request\x20sent');logger[_0x2659('0xc')](_0x2659('0xd'),_0x1d8953,'request\x20sent',JSON['stringify'](_0x40e7f1));if(_0x40e7f1[_0x2659('0xe')]){if(_0x40e7f1[_0x2659('0xe')][_0x2659('0xf')]===0x1f4){logger['error']('CannedAnswer,\x20%s,\x20%s',_0x1d8953,_0x40e7f1[_0x2659('0xe')][_0x2659('0x10')]);return _0x338876(_0x40e7f1[_0x2659('0xe')][_0x2659('0x10')]);}logger[_0x2659('0xe')]('CannedAnswer,\x20%s,\x20%s',_0x1d8953,_0x40e7f1[_0x2659('0xe')][_0x2659('0x10')]);return _0xbae971(_0x40e7f1[_0x2659('0xe')][_0x2659('0x10')]);}else{logger[_0x2659('0x11')](_0x2659('0xb'),_0x1d8953,_0x2659('0x12'));_0xbae971(_0x40e7f1[_0x2659('0x13')][_0x2659('0x10')]);}})[_0x2659('0x14')](function(_0x29339a){logger['error'](_0x2659('0xb'),_0x1d8953,_0x29339a);_0x338876(_0x29339a);});});}
\ No newline at end of file
index c6a234c..df102b5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf6b2=['express','Router','../../components/auth/service','../../config/environment','./cannedAnswer.controller','get','index','/:id','post','isAuthenticated','put','update','delete','exports','multer','util','path'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0xf6b2,0xda));var _0x2f6b=function(_0x301757,_0x1ca66d){_0x301757=_0x301757-0x0;var _0x396f07=_0xf6b2[_0x301757];return _0x396f07;};'use strict';var multer=require(_0x2f6b('0x0'));var util=require(_0x2f6b('0x1'));var path=require(_0x2f6b('0x2'));var express=require(_0x2f6b('0x3'));var router=express[_0x2f6b('0x4')]();var auth=require(_0x2f6b('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x2f6b('0x6'));var controller=require(_0x2f6b('0x7'));router[_0x2f6b('0x8')]('/',auth['isAuthenticated'](),controller[_0x2f6b('0x9')]);router[_0x2f6b('0x8')](_0x2f6b('0xa'),auth['isAuthenticated'](),controller['show']);router[_0x2f6b('0xb')]('/',auth[_0x2f6b('0xc')](),controller['create']);router[_0x2f6b('0xd')]('/:id',auth[_0x2f6b('0xc')](),controller[_0x2f6b('0xe')]);router[_0x2f6b('0xf')](_0x2f6b('0xa'),auth[_0x2f6b('0xc')](),controller['destroy']);module[_0x2f6b('0x10')]=router;
\ No newline at end of file
+var _0x9e79=['./cannedAnswer.controller','get','index','/:id','isAuthenticated','show','create','update','delete','destroy','exports','util','path','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x46dc0b,_0x5c145b){var _0x4b41ff=function(_0xeb401d){while(--_0xeb401d){_0x46dc0b['push'](_0x46dc0b['shift']());}};_0x4b41ff(++_0x5c145b);}(_0x9e79,0xc6));var _0x99e7=function(_0xf99dff,_0x19222a){_0xf99dff=_0xf99dff-0x0;var _0x4619e5=_0x9e79[_0xf99dff];return _0x4619e5;};'use strict';var multer=require('multer');var util=require(_0x99e7('0x0'));var path=require(_0x99e7('0x1'));var express=require(_0x99e7('0x2'));var router=express[_0x99e7('0x3')]();var auth=require(_0x99e7('0x4'));var interaction=require(_0x99e7('0x5'));var config=require('../../config/environment');var controller=require(_0x99e7('0x6'));router[_0x99e7('0x7')]('/',auth['isAuthenticated'](),controller[_0x99e7('0x8')]);router['get'](_0x99e7('0x9'),auth[_0x99e7('0xa')](),controller[_0x99e7('0xb')]);router['post']('/',auth[_0x99e7('0xa')](),controller[_0x99e7('0xc')]);router['put']('/:id',auth['isAuthenticated'](),controller[_0x99e7('0xd')]);router[_0x99e7('0xe')](_0x99e7('0x9'),auth['isAuthenticated'](),controller[_0x99e7('0xf')]);module[_0x99e7('0x10')]=router;
\ No newline at end of file
index fa2453d..6015133 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xddb7=['1970-01-01\x2000:00:01','STRING','INTEGER','sequelize','exports','DATE'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0xddb7,0x16b));var _0x7ddb=function(_0x2ad6fc,_0x497724){_0x2ad6fc=_0x2ad6fc-0x0;var _0xd7aafd=_0xddb7[_0x2ad6fc];return _0xd7aafd;};'use strict';var Sequelize=require(_0x7ddb('0x0'));module[_0x7ddb('0x1')]={'calldate':{'type':Sequelize[_0x7ddb('0x2')],'allowNull':![],'defaultValue':_0x7ddb('0x3')},'clid':{'type':Sequelize['STRING']},'src':{'type':Sequelize['STRING']},'dst':{'type':Sequelize[_0x7ddb('0x4')]},'dcontext':{'type':Sequelize[_0x7ddb('0x4')]},'channel':{'type':Sequelize[_0x7ddb('0x4')]},'dstchannel':{'type':Sequelize[_0x7ddb('0x4')]},'lastapp':{'type':Sequelize[_0x7ddb('0x4')]},'lastdata':{'type':Sequelize['STRING']},'duration':{'type':Sequelize[_0x7ddb('0x5')],'allowNull':![],'defaultValue':0x0},'billsec':{'type':Sequelize[_0x7ddb('0x5')],'allowNull':![],'defaultValue':0x0},'disposition':{'type':Sequelize[_0x7ddb('0x4')]},'amaflags':{'type':Sequelize[_0x7ddb('0x5')],'allowNull':![],'defaultValue':0x0},'accountcode':{'type':Sequelize[_0x7ddb('0x4')]},'userfield':{'type':Sequelize[_0x7ddb('0x4')]},'uniqueid':{'type':Sequelize[_0x7ddb('0x4')]},'linkedid':{'type':Sequelize[_0x7ddb('0x4')]},'sequence':{'type':Sequelize[_0x7ddb('0x4')]},'peeraccount':{'type':Sequelize['STRING']},'type':{'type':Sequelize['STRING']},'tag':{'type':Sequelize[_0x7ddb('0x4')]}};
\ No newline at end of file
+var _0x8ff4=['1970-01-01\x2000:00:01','STRING','sequelize','exports','DATE'];(function(_0x2844d2,_0x2612ba){var _0x4854eb=function(_0x65b62){while(--_0x65b62){_0x2844d2['push'](_0x2844d2['shift']());}};_0x4854eb(++_0x2612ba);}(_0x8ff4,0x156));var _0x48ff=function(_0x3dc30d,_0x3eee3c){_0x3dc30d=_0x3dc30d-0x0;var _0x225236=_0x8ff4[_0x3dc30d];return _0x225236;};'use strict';var Sequelize=require(_0x48ff('0x0'));module[_0x48ff('0x1')]={'calldate':{'type':Sequelize[_0x48ff('0x2')],'allowNull':![],'defaultValue':_0x48ff('0x3')},'clid':{'type':Sequelize[_0x48ff('0x4')]},'src':{'type':Sequelize[_0x48ff('0x4')]},'dst':{'type':Sequelize[_0x48ff('0x4')]},'dcontext':{'type':Sequelize[_0x48ff('0x4')]},'channel':{'type':Sequelize[_0x48ff('0x4')]},'dstchannel':{'type':Sequelize[_0x48ff('0x4')]},'lastapp':{'type':Sequelize[_0x48ff('0x4')]},'lastdata':{'type':Sequelize['STRING']},'duration':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x0},'billsec':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x0},'disposition':{'type':Sequelize[_0x48ff('0x4')]},'amaflags':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x0},'accountcode':{'type':Sequelize['STRING']},'userfield':{'type':Sequelize[_0x48ff('0x4')]},'uniqueid':{'type':Sequelize['STRING']},'linkedid':{'type':Sequelize[_0x48ff('0x4')]},'sequence':{'type':Sequelize['STRING']},'peeraccount':{'type':Sequelize[_0x48ff('0x4')]},'type':{'type':Sequelize[_0x48ff('0x4')]},'tag':{'type':Sequelize[_0x48ff('0x4')]}};
\ No newline at end of file
index ff1f98c..52d817e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8de6=['desk.js','querystring','papaparse','../../components/parsers/qs','../../config/utils','../../config/environment','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','end','error','stack','name','send','rawAttributes','model','query','dateEnd','dateStart','keys','filters','attributes','intersection','fields','length','sort','pick','day','add','merge','where','map','filter','options','includeAll','Cdr','findAll','rows','catch','show','include','body','find','params','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto'];(function(_0x13be1d,_0x5b6f4b){var _0x34a001=function(_0x1b2237){while(--_0x1b2237){_0x13be1d['push'](_0x13be1d['shift']());}};_0x34a001(++_0x5b6f4b);}(_0x8de6,0x147));var _0x68de=function(_0x77ccc3,_0x4a6479){_0x77ccc3=_0x77ccc3-0x0;var _0x5d7059=_0x8de6[_0x77ccc3];return _0x5d7059;};'use strict';var jsonpatch=require(_0x68de('0x0'));var rp=require(_0x68de('0x1'));var moment=require(_0x68de('0x2'));var BPromise=require(_0x68de('0x3'));var Mustache=require(_0x68de('0x4'));var util=require(_0x68de('0x5'));var path=require(_0x68de('0x6'));var sox=require(_0x68de('0x7'));var csv=require(_0x68de('0x8'));var ejs=require(_0x68de('0x9'));var fs=require('fs');var _=require(_0x68de('0xa'));var squel=require(_0x68de('0xb'));var crypto=require(_0x68de('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x68de('0xd'));var toCsv=require(_0x68de('0x8'));var querystring=require(_0x68de('0xe'));var Papa=require(_0x68de('0xf'));var qs=require(_0x68de('0x10'));var logger=require('../../config/logger')('api');var utils=require(_0x68de('0x11'));var config=require(_0x68de('0x12'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4a2f5b,_0xa204a9){_0xa204a9=_0xa204a9||0xcc;return function(_0x59237b){if(_0x59237b){return _0x4a2f5b[_0x68de('0x13')](_0xa204a9);}return _0x4a2f5b[_0x68de('0x14')](_0xa204a9)['end']();};}function respondWithResult(_0x11a73f,_0x59ee23){_0x59ee23=_0x59ee23||0xc8;return function(_0x3e411e){if(_0x3e411e){return _0x11a73f[_0x68de('0x14')](_0x59ee23)[_0x68de('0x15')](_0x3e411e);}};}function respondWithFilteredResult(_0x3a5405,_0x1cf835){return function(_0x368bf3){if(_0x368bf3){var _0x585a3d=_0x368bf3[_0x68de('0x16')],_0x443fcc=_0x1cf835[_0x68de('0x17')],_0x3952d7=_0x1cf835[_0x68de('0x17')]+_0x1cf835[_0x68de('0x18')],_0xc8c471;if(_0x3952d7>=_0x585a3d){_0x3952d7=_0x585a3d;_0xc8c471=0xc8;}else{_0xc8c471=0xce;}_0x3a5405[_0x68de('0x14')](_0xc8c471);return _0x3a5405[_0x68de('0x19')](_0x68de('0x1a'),_0x443fcc+'-'+_0x3952d7+'/'+_0x585a3d)[_0x68de('0x15')](_0x368bf3);}return null;};}function patchUpdates(_0x42f646){return function(_0xee0b22){try{jsonpatch[_0x68de('0x1b')](_0xee0b22,_0x42f646,!![]);}catch(_0x4b9311){return BPromise[_0x68de('0x1c')](_0x4b9311);}return _0xee0b22[_0x68de('0x1d')]();};}function saveUpdates(_0x394e1f,_0x1973ef){return function(_0x46bee9){if(_0x46bee9){return _0x46bee9[_0x68de('0x1e')](_0x394e1f)[_0x68de('0x1f')](function(_0x9efc5){return _0x9efc5;});}return null;};}function removeEntity(_0xa2dd3b,_0x5bfbd4){return function(_0x24a139){if(_0x24a139){return _0x24a139[_0x68de('0x20')]()[_0x68de('0x1f')](function(){_0xa2dd3b[_0x68de('0x14')](0xcc)[_0x68de('0x21')]();});}};}function handleEntityNotFound(_0x5a017b,_0x18dacc){return function(_0x2d98d6){if(!_0x2d98d6){_0x5a017b[_0x68de('0x13')](0x194);}return _0x2d98d6;};}function handleError(_0x1cf8f9,_0x3b9f13){_0x3b9f13=_0x3b9f13||0x1f4;return function(_0x156c40){logger[_0x68de('0x22')](_0x156c40[_0x68de('0x23')]);if(_0x156c40['name']){delete _0x156c40[_0x68de('0x24')];}_0x1cf8f9['status'](_0x3b9f13)[_0x68de('0x25')](_0x156c40);};}exports['index']=function(_0x35ef80,_0x2828fa){var _0x1e08ed={},_0x53fe62={},_0x45bcbe={'count':0x0,'rows':[]};var _0x5081d7=db['Cdr'][_0x68de('0x26')];_0x53fe62[_0x68de('0x27')]=_['keys'](_0x5081d7);var _0x3a63df={'dateStart':_0x35ef80[_0x68de('0x28')]['dateStart'],'dateEnd':_0x35ef80['query'][_0x68de('0x29')]};delete _0x35ef80[_0x68de('0x28')][_0x68de('0x2a')];delete _0x35ef80['query']['dateEnd'];_0x53fe62[_0x68de('0x28')]=_[_0x68de('0x2b')](_0x35ef80[_0x68de('0x28')]);_0x53fe62[_0x68de('0x2c')]=_['intersection'](_0x53fe62['model'],_0x53fe62[_0x68de('0x28')]);_0x1e08ed[_0x68de('0x2d')]=_[_0x68de('0x2e')](_0x53fe62[_0x68de('0x27')],qs[_0x68de('0x2f')](_0x35ef80[_0x68de('0x28')][_0x68de('0x2f')]));_0x1e08ed[_0x68de('0x2d')]=_0x1e08ed['attributes'][_0x68de('0x30')]?_0x1e08ed[_0x68de('0x2d')]:_0x53fe62[_0x68de('0x27')];if(!_0x35ef80[_0x68de('0x28')]['hasOwnProperty']('nolimit')){_0x1e08ed[_0x68de('0x18')]=qs[_0x68de('0x18')](_0x35ef80['query'][_0x68de('0x18')]);_0x1e08ed[_0x68de('0x17')]=qs[_0x68de('0x17')](_0x35ef80['query'][_0x68de('0x17')]);}_0x1e08ed['order']=qs['sort'](_0x35ef80['query'][_0x68de('0x31')]);_0x1e08ed['where']=qs[_0x68de('0x2c')](_[_0x68de('0x32')](_0x35ef80[_0x68de('0x28')],_0x53fe62[_0x68de('0x2c')]));if(_0x3a63df[_0x68de('0x2a')]){if(_0x3a63df[_0x68de('0x29')]){_0x3a63df[_0x68de('0x29')]=moment(_0x3a63df[_0x68de('0x29')])['add'](0x1,_0x68de('0x33'));}else{_0x3a63df['dateEnd']=moment(_0x3a63df[_0x68de('0x2a')])[_0x68de('0x34')](0x1,_0x68de('0x33'));}_[_0x68de('0x35')](_0x1e08ed[_0x68de('0x36')],{'createdAt':{'$gte':_0x3a63df[_0x68de('0x2a')],'$lte':_0x3a63df[_0x68de('0x29')]}});}if(_0x35ef80[_0x68de('0x28')]['filter']){_0x1e08ed[_0x68de('0x36')]=_[_0x68de('0x35')](_0x1e08ed[_0x68de('0x36')],{'$or':_[_0x68de('0x37')](_0x1e08ed[_0x68de('0x2d')],function(_0x49933f){var _0xe10562={};_0xe10562[_0x49933f]={'$like':'%'+_0x35ef80['query'][_0x68de('0x38')]+'%'};return _0xe10562;})});}_0x1e08ed=_[_0x68de('0x35')]({},_0x1e08ed,_0x35ef80[_0x68de('0x39')]);var _0x273ad3={'where':_0x1e08ed['where']};return db['Cdr'][_0x68de('0x16')](_0x273ad3)['then'](function(_0x84932b){_0x45bcbe[_0x68de('0x16')]=_0x84932b;if(_0x35ef80[_0x68de('0x28')][_0x68de('0x3a')]){_0x1e08ed['include']=[{'all':!![]}];}return db[_0x68de('0x3b')][_0x68de('0x3c')](_0x1e08ed);})[_0x68de('0x1f')](function(_0x1bc6b1){_0x45bcbe[_0x68de('0x3d')]=_0x1bc6b1;return _0x45bcbe;})[_0x68de('0x1f')](respondWithFilteredResult(_0x2828fa,_0x1e08ed))[_0x68de('0x3e')](handleError(_0x2828fa,null));};exports[_0x68de('0x3f')]=function(_0x2c0b86,_0x4fa520){var _0x5ed74f={'raw':!![],'where':{'id':_0x2c0b86['params']['id']}},_0x399711={};_0x399711[_0x68de('0x27')]=_[_0x68de('0x2b')](db[_0x68de('0x3b')]['rawAttributes']);_0x399711[_0x68de('0x28')]=_[_0x68de('0x2b')](_0x2c0b86[_0x68de('0x28')]);_0x399711['filters']=_[_0x68de('0x2e')](_0x399711[_0x68de('0x27')],_0x399711[_0x68de('0x28')]);_0x5ed74f[_0x68de('0x2d')]=_['intersection'](_0x399711[_0x68de('0x27')],qs[_0x68de('0x2f')](_0x2c0b86[_0x68de('0x28')][_0x68de('0x2f')]));_0x5ed74f[_0x68de('0x2d')]=_0x5ed74f[_0x68de('0x2d')]['length']?_0x5ed74f[_0x68de('0x2d')]:_0x399711['model'];if(_0x2c0b86[_0x68de('0x28')][_0x68de('0x3a')]){_0x5ed74f[_0x68de('0x40')]=[{'all':!![]}];}_0x5ed74f=_[_0x68de('0x35')]({},_0x5ed74f,_0x2c0b86['options']);return db[_0x68de('0x3b')]['find'](_0x5ed74f)[_0x68de('0x1f')](handleEntityNotFound(_0x4fa520,null))[_0x68de('0x1f')](respondWithResult(_0x4fa520,null))[_0x68de('0x3e')](handleError(_0x4fa520,null));};exports['create']=function(_0x5086f8,_0x1cba3a){return db[_0x68de('0x3b')]['create'](_0x5086f8[_0x68de('0x41')],{})[_0x68de('0x1f')](respondWithResult(_0x1cba3a,0xc9))[_0x68de('0x3e')](handleError(_0x1cba3a,null));};exports[_0x68de('0x1e')]=function(_0x26f949,_0x5dbf54){if(_0x26f949['body']['id']){delete _0x26f949[_0x68de('0x41')]['id'];}return db[_0x68de('0x3b')][_0x68de('0x42')]({'where':{'id':_0x26f949[_0x68de('0x43')]['id']}})[_0x68de('0x1f')](handleEntityNotFound(_0x5dbf54,null))[_0x68de('0x1f')](saveUpdates(_0x26f949[_0x68de('0x41')],null))[_0x68de('0x1f')](respondWithResult(_0x5dbf54,null))[_0x68de('0x3e')](handleError(_0x5dbf54,null));};exports[_0x68de('0x20')]=function(_0x14ddaa,_0x13c4ea){return db['Cdr'][_0x68de('0x42')]({'where':{'id':_0x14ddaa[_0x68de('0x43')]['id']}})[_0x68de('0x1f')](handleEntityNotFound(_0x13c4ea,null))[_0x68de('0x1f')](removeEntity(_0x13c4ea,null))[_0x68de('0x3e')](handleError(_0x13c4ea,null));};
\ No newline at end of file
+var _0xb450=['options','catch','length','includeAll','include','create','body','find','params','destroy','moment','bluebird','mustache','util','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','sendStatus','error','name','send','index','Cdr','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','fields','attributes','hasOwnProperty','sort','where','pick','day','filter','merge'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0xb450,0xc7));var _0x0b45=function(_0x5d472d,_0x16bc4d){_0x5d472d=_0x5d472d-0x0;var _0x1eb49d=_0xb450[_0x5d472d];return _0x1eb49d;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x0b45('0x0'));var BPromise=require(_0x0b45('0x1'));var Mustache=require(_0x0b45('0x2'));var util=require(_0x0b45('0x3'));var path=require('path');var sox=require(_0x0b45('0x4'));var csv=require('to-csv');var ejs=require(_0x0b45('0x5'));var fs=require('fs');var _=require(_0x0b45('0x6'));var squel=require(_0x0b45('0x7'));var crypto=require(_0x0b45('0x8'));var jsforce=require(_0x0b45('0x9'));var deskjs=require(_0x0b45('0xa'));var toCsv=require(_0x0b45('0xb'));var querystring=require('querystring');var Papa=require(_0x0b45('0xc'));var qs=require(_0x0b45('0xd'));var logger=require('../../config/logger')(_0x0b45('0xe'));var utils=require(_0x0b45('0xf'));var config=require(_0x0b45('0x10'));var db=require(_0x0b45('0x11'))['db'];function respondWithStatusCode(_0x1d8065,_0x303961){_0x303961=_0x303961||0xcc;return function(_0x248c86){if(_0x248c86){return _0x1d8065['sendStatus'](_0x303961);}return _0x1d8065[_0x0b45('0x12')](_0x303961)[_0x0b45('0x13')]();};}function respondWithResult(_0x16bf9e,_0x39b038){_0x39b038=_0x39b038||0xc8;return function(_0x2454e5){if(_0x2454e5){return _0x16bf9e[_0x0b45('0x12')](_0x39b038)[_0x0b45('0x14')](_0x2454e5);}};}function respondWithFilteredResult(_0x591f02,_0x576d8a){return function(_0x16a1f6){if(_0x16a1f6){var _0x5d4c14=_0x16a1f6[_0x0b45('0x15')],_0x5d821b=_0x576d8a[_0x0b45('0x16')],_0x36b2bb=_0x576d8a['offset']+_0x576d8a[_0x0b45('0x17')],_0x47441d;if(_0x36b2bb>=_0x5d4c14){_0x36b2bb=_0x5d4c14;_0x47441d=0xc8;}else{_0x47441d=0xce;}_0x591f02['status'](_0x47441d);return _0x591f02[_0x0b45('0x18')](_0x0b45('0x19'),_0x5d821b+'-'+_0x36b2bb+'/'+_0x5d4c14)['json'](_0x16a1f6);}return null;};}function patchUpdates(_0x30d0fd){return function(_0x59aa9b){try{jsonpatch['apply'](_0x59aa9b,_0x30d0fd,!![]);}catch(_0x558681){return BPromise[_0x0b45('0x1a')](_0x558681);}return _0x59aa9b[_0x0b45('0x1b')]();};}function saveUpdates(_0x3f9b13,_0x27fc76){return function(_0x3e83db){if(_0x3e83db){return _0x3e83db[_0x0b45('0x1c')](_0x3f9b13)['then'](function(_0x4d2184){return _0x4d2184;});}return null;};}function removeEntity(_0x2bca41,_0x509918){return function(_0x18099e){if(_0x18099e){return _0x18099e['destroy']()[_0x0b45('0x1d')](function(){_0x2bca41[_0x0b45('0x12')](0xcc)[_0x0b45('0x13')]();});}};}function handleEntityNotFound(_0xa9bf9d,_0x444485){return function(_0x1c9e2d){if(!_0x1c9e2d){_0xa9bf9d[_0x0b45('0x1e')](0x194);}return _0x1c9e2d;};}function handleError(_0x4ec9d2,_0x371bda){_0x371bda=_0x371bda||0x1f4;return function(_0xa25abb){logger[_0x0b45('0x1f')](_0xa25abb['stack']);if(_0xa25abb['name']){delete _0xa25abb[_0x0b45('0x20')];}_0x4ec9d2[_0x0b45('0x12')](_0x371bda)[_0x0b45('0x21')](_0xa25abb);};}exports[_0x0b45('0x22')]=function(_0x447cba,_0x54cad6){var _0x4bf59a={},_0x3464bf={},_0x495183={'count':0x0,'rows':[]};var _0x5b13ee=db[_0x0b45('0x23')][_0x0b45('0x24')];_0x3464bf[_0x0b45('0x25')]=_[_0x0b45('0x26')](_0x5b13ee);var _0xd68d9c={'dateStart':_0x447cba[_0x0b45('0x27')][_0x0b45('0x28')],'dateEnd':_0x447cba[_0x0b45('0x27')][_0x0b45('0x29')]};delete _0x447cba[_0x0b45('0x27')][_0x0b45('0x28')];delete _0x447cba[_0x0b45('0x27')]['dateEnd'];_0x3464bf['query']=_['keys'](_0x447cba[_0x0b45('0x27')]);_0x3464bf[_0x0b45('0x2a')]=_[_0x0b45('0x2b')](_0x3464bf[_0x0b45('0x25')],_0x3464bf[_0x0b45('0x27')]);_0x4bf59a['attributes']=_[_0x0b45('0x2b')](_0x3464bf[_0x0b45('0x25')],qs[_0x0b45('0x2c')](_0x447cba[_0x0b45('0x27')]['fields']));_0x4bf59a[_0x0b45('0x2d')]=_0x4bf59a[_0x0b45('0x2d')]['length']?_0x4bf59a[_0x0b45('0x2d')]:_0x3464bf[_0x0b45('0x25')];if(!_0x447cba['query'][_0x0b45('0x2e')]('nolimit')){_0x4bf59a[_0x0b45('0x17')]=qs[_0x0b45('0x17')](_0x447cba[_0x0b45('0x27')][_0x0b45('0x17')]);_0x4bf59a[_0x0b45('0x16')]=qs[_0x0b45('0x16')](_0x447cba[_0x0b45('0x27')][_0x0b45('0x16')]);}_0x4bf59a['order']=qs['sort'](_0x447cba['query'][_0x0b45('0x2f')]);_0x4bf59a[_0x0b45('0x30')]=qs[_0x0b45('0x2a')](_[_0x0b45('0x31')](_0x447cba[_0x0b45('0x27')],_0x3464bf['filters']));if(_0xd68d9c[_0x0b45('0x28')]){if(_0xd68d9c[_0x0b45('0x29')]){_0xd68d9c['dateEnd']=moment(_0xd68d9c[_0x0b45('0x29')])['add'](0x1,_0x0b45('0x32'));}else{_0xd68d9c[_0x0b45('0x29')]=moment(_0xd68d9c[_0x0b45('0x28')])['add'](0x1,'day');}_['merge'](_0x4bf59a[_0x0b45('0x30')],{'createdAt':{'$gte':_0xd68d9c[_0x0b45('0x28')],'$lte':_0xd68d9c[_0x0b45('0x29')]}});}if(_0x447cba[_0x0b45('0x27')][_0x0b45('0x33')]){_0x4bf59a[_0x0b45('0x30')]=_[_0x0b45('0x34')](_0x4bf59a['where'],{'$or':_['map'](_0x4bf59a[_0x0b45('0x2d')],function(_0x4e1216){var _0x12a3e4={};_0x12a3e4[_0x4e1216]={'$like':'%'+_0x447cba['query']['filter']+'%'};return _0x12a3e4;})});}_0x4bf59a=_[_0x0b45('0x34')]({},_0x4bf59a,_0x447cba[_0x0b45('0x35')]);var _0x41929b={'where':_0x4bf59a[_0x0b45('0x30')]};return db[_0x0b45('0x23')][_0x0b45('0x15')](_0x41929b)[_0x0b45('0x1d')](function(_0x135f3c){_0x495183[_0x0b45('0x15')]=_0x135f3c;if(_0x447cba['query']['includeAll']){_0x4bf59a['include']=[{'all':!![]}];}return db[_0x0b45('0x23')]['findAll'](_0x4bf59a);})[_0x0b45('0x1d')](function(_0x250fcd){_0x495183['rows']=_0x250fcd;return _0x495183;})['then'](respondWithFilteredResult(_0x54cad6,_0x4bf59a))[_0x0b45('0x36')](handleError(_0x54cad6,null));};exports['show']=function(_0xcae6a4,_0x11f76b){var _0x1cbc0e={'raw':!![],'where':{'id':_0xcae6a4['params']['id']}},_0x246a93={};_0x246a93[_0x0b45('0x25')]=_[_0x0b45('0x26')](db[_0x0b45('0x23')][_0x0b45('0x24')]);_0x246a93['query']=_['keys'](_0xcae6a4['query']);_0x246a93[_0x0b45('0x2a')]=_[_0x0b45('0x2b')](_0x246a93['model'],_0x246a93[_0x0b45('0x27')]);_0x1cbc0e[_0x0b45('0x2d')]=_[_0x0b45('0x2b')](_0x246a93[_0x0b45('0x25')],qs[_0x0b45('0x2c')](_0xcae6a4[_0x0b45('0x27')]['fields']));_0x1cbc0e['attributes']=_0x1cbc0e[_0x0b45('0x2d')][_0x0b45('0x37')]?_0x1cbc0e[_0x0b45('0x2d')]:_0x246a93['model'];if(_0xcae6a4[_0x0b45('0x27')][_0x0b45('0x38')]){_0x1cbc0e[_0x0b45('0x39')]=[{'all':!![]}];}_0x1cbc0e=_['merge']({},_0x1cbc0e,_0xcae6a4[_0x0b45('0x35')]);return db[_0x0b45('0x23')]['find'](_0x1cbc0e)['then'](handleEntityNotFound(_0x11f76b,null))['then'](respondWithResult(_0x11f76b,null))['catch'](handleError(_0x11f76b,null));};exports[_0x0b45('0x3a')]=function(_0x3cbdc8,_0x2ce9d7){return db[_0x0b45('0x23')][_0x0b45('0x3a')](_0x3cbdc8[_0x0b45('0x3b')],{})[_0x0b45('0x1d')](respondWithResult(_0x2ce9d7,0xc9))[_0x0b45('0x36')](handleError(_0x2ce9d7,null));};exports[_0x0b45('0x1c')]=function(_0x2d6c7b,_0x5e12f5){if(_0x2d6c7b[_0x0b45('0x3b')]['id']){delete _0x2d6c7b[_0x0b45('0x3b')]['id'];}return db[_0x0b45('0x23')][_0x0b45('0x3c')]({'where':{'id':_0x2d6c7b[_0x0b45('0x3d')]['id']}})[_0x0b45('0x1d')](handleEntityNotFound(_0x5e12f5,null))[_0x0b45('0x1d')](saveUpdates(_0x2d6c7b[_0x0b45('0x3b')],null))[_0x0b45('0x1d')](respondWithResult(_0x5e12f5,null))[_0x0b45('0x36')](handleError(_0x5e12f5,null));};exports[_0x0b45('0x3e')]=function(_0x3d0a1f,_0x49b040){return db['Cdr'][_0x0b45('0x3c')]({'where':{'id':_0x3d0a1f[_0x0b45('0x3d')]['id']}})[_0x0b45('0x1d')](handleEntityNotFound(_0x49b040,null))['then'](removeEntity(_0x49b040,null))['catch'](handleError(_0x49b040,null));};
\ No newline at end of file
index 82e04f3..7ee981a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8620=['Cdr','cdr','accountcode','calldate','disposition','dst','src','uniqueid','lodash','util','api','moment','bluebird','request-promise','./cdr.attributes','define'];(function(_0x4c94a8,_0x35829a){var _0x2e52fd=function(_0x100ccc){while(--_0x100ccc){_0x4c94a8['push'](_0x4c94a8['shift']());}};_0x2e52fd(++_0x35829a);}(_0x8620,0xa8));var _0x0862=function(_0xa04bb9,_0x206d89){_0xa04bb9=_0xa04bb9-0x0;var _0x584e38=_0x8620[_0xa04bb9];return _0x584e38;};'use strict';var _=require(_0x0862('0x0'));var util=require(_0x0862('0x1'));var logger=require('../../config/logger')(_0x0862('0x2'));var moment=require(_0x0862('0x3'));var BPromise=require(_0x0862('0x4'));var rp=require(_0x0862('0x5'));var attributes=require(_0x0862('0x6'));module['exports']=function(_0x42ceee,_0x372a76){return _0x42ceee[_0x0862('0x7')](_0x0862('0x8'),attributes,{'tableName':_0x0862('0x9'),'paranoid':![],'indexes':[{'name':_0x0862('0xa'),'fields':[_0x0862('0xa')]},{'name':_0x0862('0xb'),'fields':[_0x0862('0xb')]},{'name':_0x0862('0xc'),'fields':['disposition']},{'name':_0x0862('0xd'),'fields':[_0x0862('0xd')]},{'name':'src','fields':[_0x0862('0xe')]},{'name':_0x0862('0xf'),'fields':[_0x0862('0xf')]}],'timestamps':![]});};
\ No newline at end of file
+var _0xd39e=['dst','src','uniqueid','lodash','util','../../config/logger','api','moment','request-promise','define','Cdr','accountcode','calldate','disposition'];(function(_0x1a0c9d,_0x4143c2){var _0x51a182=function(_0x327207){while(--_0x327207){_0x1a0c9d['push'](_0x1a0c9d['shift']());}};_0x51a182(++_0x4143c2);}(_0xd39e,0xf1));var _0xed39=function(_0x3758dd,_0x3608b9){_0x3758dd=_0x3758dd-0x0;var _0x16ba2f=_0xd39e[_0x3758dd];return _0x16ba2f;};'use strict';var _=require(_0xed39('0x0'));var util=require(_0xed39('0x1'));var logger=require(_0xed39('0x2'))(_0xed39('0x3'));var moment=require(_0xed39('0x4'));var BPromise=require('bluebird');var rp=require(_0xed39('0x5'));var attributes=require('./cdr.attributes');module['exports']=function(_0x116ebd,_0xcba28c){return _0x116ebd[_0xed39('0x6')](_0xed39('0x7'),attributes,{'tableName':'cdr','paranoid':![],'indexes':[{'name':_0xed39('0x8'),'fields':['accountcode']},{'name':_0xed39('0x9'),'fields':[_0xed39('0x9')]},{'name':'disposition','fields':[_0xed39('0xa')]},{'name':_0xed39('0xb'),'fields':[_0xed39('0xb')]},{'name':_0xed39('0xc'),'fields':[_0xed39('0xc')]},{'name':_0xed39('0xd'),'fields':[_0xed39('0xd')]}],'timestamps':![]});};
\ No newline at end of file
index 7e56ff0..328a764 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6bed=['lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','jayson/promise','http','request','then','info','Cdr,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch'];(function(_0x2e3107,_0x25f970){var _0x833d69=function(_0x420e78){while(--_0x420e78){_0x2e3107['push'](_0x2e3107['shift']());}};_0x833d69(++_0x25f970);}(_0x6bed,0x7e));var _0xd6be=function(_0x818e9b,_0x44dfcd){_0x818e9b=_0x818e9b-0x0;var _0x504d8e=_0x6bed[_0x818e9b];return _0x504d8e;};'use strict';var _=require(_0xd6be('0x0'));var util=require(_0xd6be('0x1'));var moment=require(_0xd6be('0x2'));var BPromise=require(_0xd6be('0x3'));var rs=require(_0xd6be('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xd6be('0x5'));var logger=require(_0xd6be('0x6'))(_0xd6be('0x7'));var config=require('../../config/environment');var jayson=require(_0xd6be('0x8'));var client=jayson['client'][_0xd6be('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x404048,_0xedbd2e,_0x14f55b){return new BPromise(function(_0x3d0635,_0x23f612){return client[_0xd6be('0xa')](_0x404048,_0x14f55b)[_0xd6be('0xb')](function(_0x5cfe79){logger[_0xd6be('0xc')](_0xd6be('0xd'),_0xedbd2e,_0xd6be('0xe'));logger[_0xd6be('0xf')]('Cdr,\x20%s,\x20%s,\x20%s',_0xedbd2e,_0xd6be('0xe'),JSON['stringify'](_0x5cfe79));if(_0x5cfe79[_0xd6be('0x10')]){if(_0x5cfe79[_0xd6be('0x10')][_0xd6be('0x11')]===0x1f4){logger[_0xd6be('0x10')]('Cdr,\x20%s,\x20%s',_0xedbd2e,_0x5cfe79[_0xd6be('0x10')]['message']);return _0x23f612(_0x5cfe79[_0xd6be('0x10')][_0xd6be('0x12')]);}logger[_0xd6be('0x10')]('Cdr,\x20%s,\x20%s',_0xedbd2e,_0x5cfe79[_0xd6be('0x10')][_0xd6be('0x12')]);return _0x3d0635(_0x5cfe79[_0xd6be('0x10')][_0xd6be('0x12')]);}else{logger[_0xd6be('0xc')](_0xd6be('0xd'),_0xedbd2e,'request\x20sent');_0x3d0635(_0x5cfe79[_0xd6be('0x13')][_0xd6be('0x12')]);}})[_0xd6be('0x14')](function(_0x49cc68){logger[_0xd6be('0x10')]('Cdr,\x20%s,\x20%s',_0xedbd2e,_0x49cc68);_0x23f612(_0x49cc68);});});}
\ No newline at end of file
+var _0x3624=['result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','stringify','code','error','Cdr,\x20%s,\x20%s','message'];(function(_0x51c3f7,_0x4c0942){var _0x477b1e=function(_0x985f31){while(--_0x985f31){_0x51c3f7['push'](_0x51c3f7['shift']());}};_0x477b1e(++_0x4c0942);}(_0x3624,0x152));var _0x4362=function(_0xfcbcb8,_0x35bf6b){_0xfcbcb8=_0xfcbcb8-0x0;var _0x1b1f97=_0x3624[_0xfcbcb8];return _0x1b1f97;};'use strict';var _=require(_0x4362('0x0'));var util=require(_0x4362('0x1'));var moment=require(_0x4362('0x2'));var BPromise=require(_0x4362('0x3'));var rs=require(_0x4362('0x4'));var fs=require('fs');var db=require(_0x4362('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x4362('0x6'))(_0x4362('0x7'));var config=require(_0x4362('0x8'));var jayson=require(_0x4362('0x9'));var client=jayson[_0x4362('0xa')][_0x4362('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5cbf17,_0x11328c,_0x4e1c61){return new BPromise(function(_0x56105a,_0x248838){return client[_0x4362('0xc')](_0x5cbf17,_0x4e1c61)[_0x4362('0xd')](function(_0x4d2ada){logger[_0x4362('0xe')]('Cdr,\x20%s,\x20%s',_0x11328c,_0x4362('0xf'));logger[_0x4362('0x10')]('Cdr,\x20%s,\x20%s,\x20%s',_0x11328c,'request\x20sent',JSON[_0x4362('0x11')](_0x4d2ada));if(_0x4d2ada['error']){if(_0x4d2ada['error'][_0x4362('0x12')]===0x1f4){logger[_0x4362('0x13')](_0x4362('0x14'),_0x11328c,_0x4d2ada['error'][_0x4362('0x15')]);return _0x248838(_0x4d2ada['error'][_0x4362('0x15')]);}logger[_0x4362('0x13')]('Cdr,\x20%s,\x20%s',_0x11328c,_0x4d2ada[_0x4362('0x13')][_0x4362('0x15')]);return _0x56105a(_0x4d2ada['error'][_0x4362('0x15')]);}else{logger[_0x4362('0xe')](_0x4362('0x14'),_0x11328c,_0x4362('0xf'));_0x56105a(_0x4d2ada[_0x4362('0x16')][_0x4362('0x15')]);}})[_0x4362('0x17')](function(_0x3428f4){logger[_0x4362('0x13')](_0x4362('0x14'),_0x11328c,_0x3428f4);_0x248838(_0x3428f4);});});}
\ No newline at end of file
index 59af091..a0dc1f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x00bb=['show','post','create','put','update','delete','/:id','destroy','multer','util','path','Router','../../components/interaction/service','../../config/environment','get','isAuthenticated'];(function(_0x4522c2,_0x462b07){var _0x204183=function(_0x21765a){while(--_0x21765a){_0x4522c2['push'](_0x4522c2['shift']());}};_0x204183(++_0x462b07);}(_0x00bb,0x1d8));var _0xb00b=function(_0x4baae2,_0x487ab6){_0x4baae2=_0x4baae2-0x0;var _0x1a2285=_0x00bb[_0x4baae2];return _0x1a2285;};'use strict';var multer=require(_0xb00b('0x0'));var util=require(_0xb00b('0x1'));var path=require(_0xb00b('0x2'));var express=require('express');var router=express[_0xb00b('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xb00b('0x4'));var config=require(_0xb00b('0x5'));var controller=require('./cdr.controller');router[_0xb00b('0x6')]('/',auth[_0xb00b('0x7')](),controller['index']);router['get']('/:id',auth[_0xb00b('0x7')](),controller[_0xb00b('0x8')]);router[_0xb00b('0x9')]('/',auth[_0xb00b('0x7')](),controller[_0xb00b('0xa')]);router[_0xb00b('0xb')]('/:id',auth['isAuthenticated'](),controller[_0xb00b('0xc')]);router[_0xb00b('0xd')](_0xb00b('0xe'),auth[_0xb00b('0x7')](),controller[_0xb00b('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0x0624=['../../components/interaction/service','../../config/environment','./cdr.controller','get','/:id','isAuthenticated','show','post','create','update','delete','destroy','Router','../../components/auth/service'];(function(_0x103862,_0x37d9bd){var _0x273895=function(_0x9b2b3d){while(--_0x9b2b3d){_0x103862['push'](_0x103862['shift']());}};_0x273895(++_0x37d9bd);}(_0x0624,0x132));var _0x4062=function(_0x564ac4,_0x569a2c){_0x564ac4=_0x564ac4-0x0;var _0xa56636=_0x0624[_0x564ac4];return _0xa56636;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var express=require('express');var router=express[_0x4062('0x0')]();var auth=require(_0x4062('0x1'));var interaction=require(_0x4062('0x2'));var config=require(_0x4062('0x3'));var controller=require(_0x4062('0x4'));router[_0x4062('0x5')]('/',auth['isAuthenticated'](),controller['index']);router[_0x4062('0x5')](_0x4062('0x6'),auth[_0x4062('0x7')](),controller[_0x4062('0x8')]);router[_0x4062('0x9')]('/',auth['isAuthenticated'](),controller[_0x4062('0xa')]);router['put'](_0x4062('0x6'),auth[_0x4062('0x7')](),controller[_0x4062('0xb')]);router[_0x4062('0xc')](_0x4062('0x6'),auth[_0x4062('0x7')](),controller[_0x4062('0xd')]);module['exports']=router;
\ No newline at end of file
index 5bd5e42..76e4d51 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe0fb=['INTEGER','STRING','noop','*,*,*,*','sequelize','exports'];(function(_0x4060b4,_0x82eb25){var _0x32aaa1=function(_0x8c91af){while(--_0x8c91af){_0x4060b4['push'](_0x4060b4['shift']());}};_0x32aaa1(++_0x82eb25);}(_0xe0fb,0xa6));var _0xbe0f=function(_0x465a0c,_0x19d4d5){_0x465a0c=_0x465a0c-0x0;var _0x1e202e=_0xe0fb[_0x465a0c];return _0x1e202e;};'use strict';var Sequelize=require(_0xbe0f('0x0'));module[_0xbe0f('0x1')]={'priority':{'type':Sequelize[_0xbe0f('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0xbe0f('0x3')],'allowNull':![],'defaultValue':_0xbe0f('0x4')},'appdata':{'type':Sequelize[_0xbe0f('0x3')](0x1000),'defaultValue':''},'description':{'type':Sequelize[_0xbe0f('0x3')]},'interval':{'type':Sequelize[_0xbe0f('0x3')],'defaultValue':_0xbe0f('0x5')}};
\ No newline at end of file
+var _0xd3cc=['noop','*,*,*,*','sequelize','STRING'];(function(_0x1559a5,_0x41924e){var _0x17a783=function(_0x152c63){while(--_0x152c63){_0x1559a5['push'](_0x1559a5['shift']());}};_0x17a783(++_0x41924e);}(_0xd3cc,0x126));var _0xcd3c=function(_0x34b446,_0x52dbed){_0x34b446=_0x34b446-0x0;var _0xf25d51=_0xd3cc[_0x34b446];return _0xf25d51;};'use strict';var Sequelize=require(_0xcd3c('0x0'));module['exports']={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize[_0xcd3c('0x1')],'allowNull':![],'defaultValue':_0xcd3c('0x2')},'appdata':{'type':Sequelize['STRING'](0x1000),'defaultValue':''},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize[_0xcd3c('0x1')],'defaultValue':_0xcd3c('0x3')}};
\ No newline at end of file
index 4b03188..cd12545 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x53a6=['Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','show','params','model','keys','ChatApplication','query','intersection','attributes','fields','length','merge','options','find','catch','body','fast-json-patch','request-promise','bluebird','mustache','path','sox','to-csv','lodash','squel','crypto','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set'];(function(_0x52fe60,_0x2b0221){var _0x1cfbb0=function(_0x2aed71){while(--_0x2aed71){_0x52fe60['push'](_0x52fe60['shift']());}};_0x1cfbb0(++_0x2b0221);}(_0x53a6,0x146));var _0x653a=function(_0x378d48,_0x192570){_0x378d48=_0x378d48-0x0;var _0x317f9f=_0x53a6[_0x378d48];return _0x317f9f;};'use strict';var jsonpatch=require(_0x653a('0x0'));var rp=require(_0x653a('0x1'));var moment=require('moment');var BPromise=require(_0x653a('0x2'));var Mustache=require(_0x653a('0x3'));var util=require('util');var path=require(_0x653a('0x4'));var sox=require(_0x653a('0x5'));var csv=require(_0x653a('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x653a('0x7'));var squel=require(_0x653a('0x8'));var crypto=require(_0x653a('0x9'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x653a('0xa'));var qs=require(_0x653a('0xb'));var logger=require(_0x653a('0xc'))(_0x653a('0xd'));var utils=require('../../config/utils');var config=require(_0x653a('0xe'));var db=require(_0x653a('0xf'))['db'];function respondWithStatusCode(_0x2efa6b,_0x5df343){_0x5df343=_0x5df343||0xcc;return function(_0x1556bf){if(_0x1556bf){return _0x2efa6b[_0x653a('0x10')](_0x5df343);}return _0x2efa6b[_0x653a('0x11')](_0x5df343)[_0x653a('0x12')]();};}function respondWithResult(_0x4d1581,_0x19e5bd){_0x19e5bd=_0x19e5bd||0xc8;return function(_0x3dc2a4){if(_0x3dc2a4){return _0x4d1581[_0x653a('0x11')](_0x19e5bd)[_0x653a('0x13')](_0x3dc2a4);}};}function respondWithFilteredResult(_0x21dddb,_0x35e227){return function(_0x1b7a4d){if(_0x1b7a4d){var _0x249b85=_0x1b7a4d[_0x653a('0x14')],_0x35c520=_0x35e227[_0x653a('0x15')],_0x148e3d=_0x35e227[_0x653a('0x15')]+_0x35e227[_0x653a('0x16')],_0x1f8cac;if(_0x148e3d>=_0x249b85){_0x148e3d=_0x249b85;_0x1f8cac=0xc8;}else{_0x1f8cac=0xce;}_0x21dddb[_0x653a('0x11')](_0x1f8cac);return _0x21dddb[_0x653a('0x17')](_0x653a('0x18'),_0x35c520+'-'+_0x148e3d+'/'+_0x249b85)[_0x653a('0x13')](_0x1b7a4d);}return null;};}function patchUpdates(_0x1e88d7){return function(_0x2c6bf2){try{jsonpatch[_0x653a('0x19')](_0x2c6bf2,_0x1e88d7,!![]);}catch(_0x541157){return BPromise[_0x653a('0x1a')](_0x541157);}return _0x2c6bf2[_0x653a('0x1b')]();};}function saveUpdates(_0x1f0a51,_0x2d4c10){return function(_0x1e6b2a){if(_0x1e6b2a){return _0x1e6b2a[_0x653a('0x1c')](_0x1f0a51)[_0x653a('0x1d')](function(_0x5ecad4){return _0x5ecad4;});}return null;};}function removeEntity(_0x5ebba0,_0x8ed46b){return function(_0xafe6f0){if(_0xafe6f0){return _0xafe6f0[_0x653a('0x1e')]()['then'](function(){_0x5ebba0['status'](0xcc)[_0x653a('0x12')]();});}};}function handleEntityNotFound(_0x1fff6f,_0x2119fe){return function(_0x4f7365){if(!_0x4f7365){_0x1fff6f[_0x653a('0x10')](0x194);}return _0x4f7365;};}function handleError(_0x2e277e,_0x1c8302){_0x1c8302=_0x1c8302||0x1f4;return function(_0x45ca79){logger[_0x653a('0x1f')](_0x45ca79[_0x653a('0x20')]);if(_0x45ca79[_0x653a('0x21')]){delete _0x45ca79[_0x653a('0x21')];}_0x2e277e[_0x653a('0x11')](_0x1c8302)[_0x653a('0x22')](_0x45ca79);};}exports[_0x653a('0x23')]=function(_0x42812f,_0x1dadc2){var _0x1ec5f9={'raw':!![],'where':{'id':_0x42812f[_0x653a('0x24')]['id']}},_0x51fb9d={};_0x51fb9d[_0x653a('0x25')]=_[_0x653a('0x26')](db[_0x653a('0x27')]['rawAttributes']);_0x51fb9d[_0x653a('0x28')]=_[_0x653a('0x26')](_0x42812f[_0x653a('0x28')]);_0x51fb9d['filters']=_[_0x653a('0x29')](_0x51fb9d[_0x653a('0x25')],_0x51fb9d[_0x653a('0x28')]);_0x1ec5f9[_0x653a('0x2a')]=_[_0x653a('0x29')](_0x51fb9d[_0x653a('0x25')],qs[_0x653a('0x2b')](_0x42812f[_0x653a('0x28')][_0x653a('0x2b')]));_0x1ec5f9[_0x653a('0x2a')]=_0x1ec5f9['attributes'][_0x653a('0x2c')]?_0x1ec5f9[_0x653a('0x2a')]:_0x51fb9d[_0x653a('0x25')];if(_0x42812f[_0x653a('0x28')]['includeAll']){_0x1ec5f9['include']=[{'all':!![]}];}_0x1ec5f9=_[_0x653a('0x2d')]({},_0x1ec5f9,_0x42812f[_0x653a('0x2e')]);return db[_0x653a('0x27')][_0x653a('0x2f')](_0x1ec5f9)['then'](handleEntityNotFound(_0x1dadc2,null))[_0x653a('0x1d')](respondWithResult(_0x1dadc2,null))[_0x653a('0x30')](handleError(_0x1dadc2,null));};exports[_0x653a('0x1c')]=function(_0x2ddabf,_0x28960b){if(_0x2ddabf['body']['id']){delete _0x2ddabf[_0x653a('0x31')]['id'];}return db[_0x653a('0x27')]['find']({'where':{'id':_0x2ddabf[_0x653a('0x24')]['id']}})['then'](handleEntityNotFound(_0x28960b,null))[_0x653a('0x1d')](saveUpdates(_0x2ddabf[_0x653a('0x31')],null))[_0x653a('0x1d')](respondWithResult(_0x28960b,null))['catch'](handleError(_0x28960b,null));};exports[_0x653a('0x1e')]=function(_0x4b611e,_0x1d4d9b){return db[_0x653a('0x27')][_0x653a('0x2f')]({'where':{'id':_0x4b611e[_0x653a('0x24')]['id']}})[_0x653a('0x1d')](handleEntityNotFound(_0x1d4d9b,null))[_0x653a('0x1d')](removeEntity(_0x1d4d9b,null))[_0x653a('0x30')](handleError(_0x1d4d9b,null));};
\ No newline at end of file
+var _0x2776=['jsforce','querystring','papaparse','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','then','destroy','name','send','show','params','ChatApplication','rawAttributes','query','filters','intersection','model','attributes','fields','includeAll','merge','find','catch','update','body','fast-json-patch','request-promise','moment','mustache','util','sox','to-csv','ejs','lodash','squel','crypto'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0x2776,0x14c));var _0x6277=function(_0x1bf22f,_0x4c78b6){_0x1bf22f=_0x1bf22f-0x0;var _0x6f4488=_0x2776[_0x1bf22f];return _0x6f4488;};'use strict';var jsonpatch=require(_0x6277('0x0'));var rp=require(_0x6277('0x1'));var moment=require(_0x6277('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x6277('0x3'));var util=require(_0x6277('0x4'));var path=require('path');var sox=require(_0x6277('0x5'));var csv=require(_0x6277('0x6'));var ejs=require(_0x6277('0x7'));var fs=require('fs');var _=require(_0x6277('0x8'));var squel=require(_0x6277('0x9'));var crypto=require(_0x6277('0xa'));var jsforce=require(_0x6277('0xb'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x6277('0xc'));var Papa=require(_0x6277('0xd'));var qs=require('../../components/parsers/qs');var logger=require(_0x6277('0xe'))('api');var utils=require(_0x6277('0xf'));var config=require(_0x6277('0x10'));var db=require(_0x6277('0x11'))['db'];function respondWithStatusCode(_0x31db43,_0x40d678){_0x40d678=_0x40d678||0xcc;return function(_0x129645){if(_0x129645){return _0x31db43[_0x6277('0x12')](_0x40d678);}return _0x31db43[_0x6277('0x13')](_0x40d678)[_0x6277('0x14')]();};}function respondWithResult(_0x20fade,_0x50aab8){_0x50aab8=_0x50aab8||0xc8;return function(_0x21fb9b){if(_0x21fb9b){return _0x20fade[_0x6277('0x13')](_0x50aab8)[_0x6277('0x15')](_0x21fb9b);}};}function respondWithFilteredResult(_0x5dfa83,_0x1da1af){return function(_0x3ab7ee){if(_0x3ab7ee){var _0x218537=_0x3ab7ee[_0x6277('0x16')],_0xb6878a=_0x1da1af[_0x6277('0x17')],_0x1d20ca=_0x1da1af[_0x6277('0x17')]+_0x1da1af[_0x6277('0x18')],_0x5ae552;if(_0x1d20ca>=_0x218537){_0x1d20ca=_0x218537;_0x5ae552=0xc8;}else{_0x5ae552=0xce;}_0x5dfa83[_0x6277('0x13')](_0x5ae552);return _0x5dfa83[_0x6277('0x19')]('Content-Range',_0xb6878a+'-'+_0x1d20ca+'/'+_0x218537)['json'](_0x3ab7ee);}return null;};}function patchUpdates(_0x51af35){return function(_0x3658bd){try{jsonpatch[_0x6277('0x1a')](_0x3658bd,_0x51af35,!![]);}catch(_0x4ed86b){return BPromise[_0x6277('0x1b')](_0x4ed86b);}return _0x3658bd[_0x6277('0x1c')]();};}function saveUpdates(_0xde947c,_0x1b7027){return function(_0x51f61d){if(_0x51f61d){return _0x51f61d['update'](_0xde947c)[_0x6277('0x1d')](function(_0x4c2d1f){return _0x4c2d1f;});}return null;};}function removeEntity(_0x100a08,_0x4c4565){return function(_0x1b0fb5){if(_0x1b0fb5){return _0x1b0fb5[_0x6277('0x1e')]()['then'](function(){_0x100a08['status'](0xcc)[_0x6277('0x14')]();});}};}function handleEntityNotFound(_0x2c6b7b,_0x34452c){return function(_0x27ea1f){if(!_0x27ea1f){_0x2c6b7b[_0x6277('0x12')](0x194);}return _0x27ea1f;};}function handleError(_0x4280ea,_0x5f1ff5){_0x5f1ff5=_0x5f1ff5||0x1f4;return function(_0x4ee219){logger['error'](_0x4ee219['stack']);if(_0x4ee219[_0x6277('0x1f')]){delete _0x4ee219[_0x6277('0x1f')];}_0x4280ea[_0x6277('0x13')](_0x5f1ff5)[_0x6277('0x20')](_0x4ee219);};}exports[_0x6277('0x21')]=function(_0x4e154c,_0xc8bc70){var _0x7502b8={'raw':!![],'where':{'id':_0x4e154c[_0x6277('0x22')]['id']}},_0x27a7d2={};_0x27a7d2['model']=_['keys'](db[_0x6277('0x23')][_0x6277('0x24')]);_0x27a7d2[_0x6277('0x25')]=_['keys'](_0x4e154c['query']);_0x27a7d2[_0x6277('0x26')]=_[_0x6277('0x27')](_0x27a7d2[_0x6277('0x28')],_0x27a7d2['query']);_0x7502b8[_0x6277('0x29')]=_[_0x6277('0x27')](_0x27a7d2[_0x6277('0x28')],qs[_0x6277('0x2a')](_0x4e154c[_0x6277('0x25')][_0x6277('0x2a')]));_0x7502b8[_0x6277('0x29')]=_0x7502b8['attributes']['length']?_0x7502b8[_0x6277('0x29')]:_0x27a7d2[_0x6277('0x28')];if(_0x4e154c[_0x6277('0x25')][_0x6277('0x2b')]){_0x7502b8['include']=[{'all':!![]}];}_0x7502b8=_[_0x6277('0x2c')]({},_0x7502b8,_0x4e154c['options']);return db[_0x6277('0x23')][_0x6277('0x2d')](_0x7502b8)[_0x6277('0x1d')](handleEntityNotFound(_0xc8bc70,null))[_0x6277('0x1d')](respondWithResult(_0xc8bc70,null))[_0x6277('0x2e')](handleError(_0xc8bc70,null));};exports[_0x6277('0x2f')]=function(_0x3e7788,_0x415a73){if(_0x3e7788[_0x6277('0x30')]['id']){delete _0x3e7788['body']['id'];}return db['ChatApplication'][_0x6277('0x2d')]({'where':{'id':_0x3e7788[_0x6277('0x22')]['id']}})[_0x6277('0x1d')](handleEntityNotFound(_0x415a73,null))[_0x6277('0x1d')](saveUpdates(_0x3e7788[_0x6277('0x30')],null))['then'](respondWithResult(_0x415a73,null))[_0x6277('0x2e')](handleError(_0x415a73,null));};exports[_0x6277('0x1e')]=function(_0x3232b4,_0x54c591){return db[_0x6277('0x23')][_0x6277('0x2d')]({'where':{'id':_0x3232b4[_0x6277('0x22')]['id']}})[_0x6277('0x1d')](handleEntityNotFound(_0x54c591,null))[_0x6277('0x1d')](removeEntity(_0x54c591,null))[_0x6277('0x2e')](handleError(_0x54c591,null));};
\ No newline at end of file
index 01b75f9..977df96 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa218=['./chatApplication.attributes','exports','define','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x220afa,_0xf5f6cc){var _0x1b79d1=function(_0x178a39){while(--_0x178a39){_0x220afa['push'](_0x220afa['shift']());}};_0x1b79d1(++_0xf5f6cc);}(_0xa218,0x125));var _0x8a21=function(_0x45d55e,_0x2fede3){_0x45d55e=_0x45d55e-0x0;var _0x29812a=_0xa218[_0x45d55e];return _0x29812a;};'use strict';var _=require(_0x8a21('0x0'));var util=require(_0x8a21('0x1'));var logger=require(_0x8a21('0x2'))(_0x8a21('0x3'));var moment=require(_0x8a21('0x4'));var BPromise=require(_0x8a21('0x5'));var rp=require(_0x8a21('0x6'));var attributes=require(_0x8a21('0x7'));module[_0x8a21('0x8')]=function(_0x462b30,_0x4359c5){return _0x462b30[_0x8a21('0x9')]('ChatApplication',attributes,{'tableName':'chat_applications','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2ffe=['util','../../config/logger','api','moment','bluebird','request-promise','./chatApplication.attributes','ChatApplication','chat_applications','lodash'];(function(_0x5b84e5,_0x26076b){var _0xff9066=function(_0x3f17df){while(--_0x3f17df){_0x5b84e5['push'](_0x5b84e5['shift']());}};_0xff9066(++_0x26076b);}(_0x2ffe,0x77));var _0xe2ff=function(_0x2ab869,_0x11475f){_0x2ab869=_0x2ab869-0x0;var _0x42cdeb=_0x2ffe[_0x2ab869];return _0x42cdeb;};'use strict';var _=require(_0xe2ff('0x0'));var util=require(_0xe2ff('0x1'));var logger=require(_0xe2ff('0x2'))(_0xe2ff('0x3'));var moment=require(_0xe2ff('0x4'));var BPromise=require(_0xe2ff('0x5'));var rp=require(_0xe2ff('0x6'));var attributes=require(_0xe2ff('0x7'));module['exports']=function(_0x314272,_0x29723e){return _0x314272['define'](_0xe2ff('0x8'),attributes,{'tableName':_0xe2ff('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 0f5cc04..917f708 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x874a=['info','debug','ChatApplication,\x20%s,\x20%s,\x20%s','error','code','ChatApplication,\x20%s,\x20%s','message','result','catch','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request'];(function(_0x53f0db,_0x35c67c){var _0xae0a5c=function(_0x4bd6fb){while(--_0x4bd6fb){_0x53f0db['push'](_0x53f0db['shift']());}};_0xae0a5c(++_0x35c67c);}(_0x874a,0x185));var _0xa874=function(_0x54e0d7,_0x34e0d9){_0x54e0d7=_0x54e0d7-0x0;var _0x4c4895=_0x874a[_0x54e0d7];return _0x4c4895;};'use strict';var _=require(_0xa874('0x0'));var util=require(_0xa874('0x1'));var moment=require('moment');var BPromise=require(_0xa874('0x2'));var rs=require(_0xa874('0x3'));var fs=require('fs');var db=require(_0xa874('0x4'))['db'];var utils=require(_0xa874('0x5'));var logger=require(_0xa874('0x6'))(_0xa874('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xa874('0x8')][_0xa874('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x589267,_0x3de07e,_0x1a337c){return new BPromise(function(_0x1c36fc,_0x2925d9){return client[_0xa874('0xa')](_0x589267,_0x1a337c)['then'](function(_0x344865){logger[_0xa874('0xb')]('ChatApplication,\x20%s,\x20%s',_0x3de07e,'request\x20sent');logger[_0xa874('0xc')](_0xa874('0xd'),_0x3de07e,'request\x20sent',JSON['stringify'](_0x344865));if(_0x344865[_0xa874('0xe')]){if(_0x344865[_0xa874('0xe')][_0xa874('0xf')]===0x1f4){logger[_0xa874('0xe')](_0xa874('0x10'),_0x3de07e,_0x344865[_0xa874('0xe')][_0xa874('0x11')]);return _0x2925d9(_0x344865[_0xa874('0xe')][_0xa874('0x11')]);}logger[_0xa874('0xe')](_0xa874('0x10'),_0x3de07e,_0x344865[_0xa874('0xe')]['message']);return _0x1c36fc(_0x344865[_0xa874('0xe')]['message']);}else{logger['info']('ChatApplication,\x20%s,\x20%s',_0x3de07e,'request\x20sent');_0x1c36fc(_0x344865[_0xa874('0x12')][_0xa874('0x11')]);}})[_0xa874('0x13')](function(_0x14ed5f){logger[_0xa874('0xe')](_0xa874('0x10'),_0x3de07e,_0x14ed5f);_0x2925d9(_0x14ed5f);});});}
\ No newline at end of file
+var _0x60d3=['ChatApplication,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','lodash','util','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','ChatApplication,\x20%s,\x20%s','debug'];(function(_0x8a0d94,_0x16fcee){var _0x48f382=function(_0x46ab83){while(--_0x46ab83){_0x8a0d94['push'](_0x8a0d94['shift']());}};_0x48f382(++_0x16fcee);}(_0x60d3,0xf9));var _0x360d=function(_0x2d8d69,_0x8e47ff){_0x2d8d69=_0x2d8d69-0x0;var _0x39ae22=_0x60d3[_0x2d8d69];return _0x39ae22;};'use strict';var _=require(_0x360d('0x0'));var util=require(_0x360d('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x360d('0x2'));var fs=require('fs');var db=require(_0x360d('0x3'))['db'];var utils=require(_0x360d('0x4'));var logger=require(_0x360d('0x5'))(_0x360d('0x6'));var config=require(_0x360d('0x7'));var jayson=require(_0x360d('0x8'));var client=jayson[_0x360d('0x9')][_0x360d('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x13a9d3,_0x2d4561,_0x58685c){return new BPromise(function(_0x1d93fe,_0x4fd845){return client[_0x360d('0xb')](_0x13a9d3,_0x58685c)[_0x360d('0xc')](function(_0x9c48dd){logger['info'](_0x360d('0xd'),_0x2d4561,'request\x20sent');logger[_0x360d('0xe')](_0x360d('0xf'),_0x2d4561,_0x360d('0x10'),JSON[_0x360d('0x11')](_0x9c48dd));if(_0x9c48dd[_0x360d('0x12')]){if(_0x9c48dd[_0x360d('0x12')][_0x360d('0x13')]===0x1f4){logger['error'](_0x360d('0xd'),_0x2d4561,_0x9c48dd[_0x360d('0x12')]['message']);return _0x4fd845(_0x9c48dd['error'][_0x360d('0x14')]);}logger[_0x360d('0x12')](_0x360d('0xd'),_0x2d4561,_0x9c48dd[_0x360d('0x12')][_0x360d('0x14')]);return _0x1d93fe(_0x9c48dd['error'][_0x360d('0x14')]);}else{logger[_0x360d('0x15')](_0x360d('0xd'),_0x2d4561,'request\x20sent');_0x1d93fe(_0x9c48dd[_0x360d('0x16')][_0x360d('0x14')]);}})[_0x360d('0x17')](function(_0x34996c){logger[_0x360d('0x12')]('ChatApplication,\x20%s,\x20%s',_0x2d4561,_0x34996c);_0x4fd845(_0x34996c);});});}
\ No newline at end of file
index 32d7a3a..1f37932 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4088=['put','update','multer','util','path','express','Router','../../components/auth/service','../../config/environment','./chatApplication.controller','get','/:id','isAuthenticated'];(function(_0x4a2e1b,_0x24ebb6){var _0x3a0616=function(_0x39b405){while(--_0x39b405){_0x4a2e1b['push'](_0x4a2e1b['shift']());}};_0x3a0616(++_0x24ebb6);}(_0x4088,0x84));var _0x8408=function(_0x1b25d4,_0x2e9817){_0x1b25d4=_0x1b25d4-0x0;var _0x1e8324=_0x4088[_0x1b25d4];return _0x1e8324;};'use strict';var multer=require(_0x8408('0x0'));var util=require(_0x8408('0x1'));var path=require(_0x8408('0x2'));var express=require(_0x8408('0x3'));var router=express[_0x8408('0x4')]();var auth=require(_0x8408('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x8408('0x6'));var controller=require(_0x8408('0x7'));router[_0x8408('0x8')](_0x8408('0x9'),auth[_0x8408('0xa')](),controller['show']);router[_0x8408('0xb')](_0x8408('0x9'),auth[_0x8408('0xa')](),controller[_0x8408('0xc')]);router['delete']('/:id',auth[_0x8408('0xa')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x817d=['express','Router','../../components/interaction/service','../../config/environment','get','show','put','/:id','isAuthenticated','update','destroy','exports','multer','util','path'];(function(_0x5d6456,_0x58ecc7){var _0x4d66c1=function(_0x4335e3){while(--_0x4335e3){_0x5d6456['push'](_0x5d6456['shift']());}};_0x4d66c1(++_0x58ecc7);}(_0x817d,0xfc));var _0xd817=function(_0x41311b,_0x360f99){_0x41311b=_0x41311b-0x0;var _0xdeb0a1=_0x817d[_0x41311b];return _0xdeb0a1;};'use strict';var multer=require(_0xd817('0x0'));var util=require(_0xd817('0x1'));var path=require(_0xd817('0x2'));var express=require(_0xd817('0x3'));var router=express[_0xd817('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xd817('0x5'));var config=require(_0xd817('0x6'));var controller=require('./chatApplication.controller');router[_0xd817('0x7')]('/:id',auth['isAuthenticated'](),controller[_0xd817('0x8')]);router[_0xd817('0x9')](_0xd817('0xa'),auth[_0xd817('0xb')](),controller[_0xd817('0xc')]);router['delete'](_0xd817('0xa'),auth[_0xd817('0xb')](),controller[_0xd817('0xd')]);module[_0xd817('0xe')]=router;
\ No newline at end of file
index 25454c3..baf05f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd34f=['STRING','BOOLEAN'];(function(_0x3b22b2,_0x2e982e){var _0x20bfdd=function(_0x42a945){while(--_0x42a945){_0x3b22b2['push'](_0x3b22b2['shift']());}};_0x20bfdd(++_0x2e982e);}(_0xd34f,0x6a));var _0xfd34=function(_0x310d80,_0x350219){_0x310d80=_0x310d80-0x0;var _0x211642=_0xd34f[_0x310d80];return _0x211642;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0xfd34('0x0')],'allowNull':![]},'description':{'type':Sequelize[_0xfd34('0x0')]},'write':{'type':Sequelize[_0xfd34('0x1')],'defaultValue':!![]}};
\ No newline at end of file
+var _0xa812=['STRING','BOOLEAN','sequelize','exports'];(function(_0x2023e1,_0xeca985){var _0x1fe133=function(_0x526d5f){while(--_0x526d5f){_0x2023e1['push'](_0x2023e1['shift']());}};_0x1fe133(++_0xeca985);}(_0xa812,0xd6));var _0x2a81=function(_0x3511d3,_0x4107ae){_0x3511d3=_0x3511d3-0x0;var _0x5d6321=_0xa812[_0x3511d3];return _0x5d6321;};'use strict';var Sequelize=require(_0x2a81('0x0'));module[_0x2a81('0x1')]={'name':{'type':Sequelize[_0x2a81('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x2a81('0x2')]},'write':{'type':Sequelize[_0x2a81('0x3')],'defaultValue':!![]}};
\ No newline at end of file
index 94edbaf..304dee9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb91=['toInteger','addMembers','ids','omit','findOne','getMembers','nolimit','removeMembers','addMessage','ChatGroupId','getMessages','order','pick','$gte','split','YYYY-MM-DD\x20HH:mm:ss','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../mysqldb','socket.io-emitter','localhost','./chatGroup.socket','register','jayson/promise','http','request','info','ChatGroup,\x20%s,\x20%s','request\x20sent','ChatGroup,\x20%s,\x20%s,\x20%s','error','code','message','end','status','json','count','limit','set','Content-Range','reject','update','then','destroy','sendStatus','stack','name','send','index','model','keys','query','dateStart','dateEnd','intersection','fields','attributes','hasOwnProperty','offset','sort','where','filters','add','day','merge','filter','map','options','ChatGroup','includeAll','include','findAll','rows','show','params','rawAttributes','length','create','body','find','catch','describe','getUnread','ChatInternalMessage','user'];(function(_0x335a0a,_0x1e7e0e){var _0x1a9fc0=function(_0xb7d5ee){while(--_0xb7d5ee){_0x335a0a['push'](_0x335a0a['shift']());}};_0x1a9fc0(++_0x1e7e0e);}(_0xbb91,0xda));var _0x1bb9=function(_0x2be8c2,_0x14a4b5){_0x2be8c2=_0x2be8c2-0x0;var _0x97f531=_0xbb91[_0x2be8c2];return _0x97f531;};'use strict';var jsonpatch=require(_0x1bb9('0x0'));var rp=require(_0x1bb9('0x1'));var moment=require(_0x1bb9('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x1bb9('0x3'));var util=require(_0x1bb9('0x4'));var path=require(_0x1bb9('0x5'));var sox=require(_0x1bb9('0x6'));var csv=require(_0x1bb9('0x7'));var ejs=require(_0x1bb9('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x1bb9('0x9'));var crypto=require(_0x1bb9('0xa'));var jsforce=require(_0x1bb9('0xb'));var deskjs=require(_0x1bb9('0xc'));var toCsv=require('to-csv');var querystring=require(_0x1bb9('0xd'));var Papa=require(_0x1bb9('0xe'));var qs=require('../../components/parsers/qs');var logger=require(_0x1bb9('0xf'))(_0x1bb9('0x10'));var utils=require(_0x1bb9('0x11'));var config=require('../../config/environment');var db=require(_0x1bb9('0x12'))['db'];var socket=require(_0x1bb9('0x13'))({'host':_0x1bb9('0x14'),'port':0x18eb});require(_0x1bb9('0x15'))[_0x1bb9('0x16')](socket);var jayson=require(_0x1bb9('0x17'));var client=jayson['client'][_0x1bb9('0x18')]({'port':0x232a});function respondWithRpcPromise(_0x434693,_0x40434d,_0x36def3,_0x55479c){return new BPromise(function(_0x387037,_0x1bf2f1){var _0x440b38=_0x55479c||client;return _0x440b38[_0x1bb9('0x19')](_0x434693,_0x36def3)['then'](function(_0x3c62da){logger[_0x1bb9('0x1a')](_0x1bb9('0x1b'),_0x40434d,_0x1bb9('0x1c'));logger['debug'](_0x1bb9('0x1d'),_0x40434d,_0x1bb9('0x1c'),JSON['stringify'](_0x3c62da));if(_0x3c62da[_0x1bb9('0x1e')]){if(_0x3c62da[_0x1bb9('0x1e')][_0x1bb9('0x1f')]===0x1f4){logger[_0x1bb9('0x1e')]('ChatGroup,\x20%s,\x20%s',_0x40434d,_0x3c62da[_0x1bb9('0x1e')][_0x1bb9('0x20')]);return _0x1bf2f1(_0x3c62da[_0x1bb9('0x1e')]['message']);}logger[_0x1bb9('0x1e')](_0x1bb9('0x1b'),_0x40434d,_0x3c62da[_0x1bb9('0x1e')][_0x1bb9('0x20')]);return _0x387037(_0x3c62da[_0x1bb9('0x1e')][_0x1bb9('0x20')]);}else{logger['info'](_0x1bb9('0x1b'),_0x40434d,_0x1bb9('0x1c'));_0x387037(_0x3c62da['result']['message']);}})['catch'](function(_0xcdda0e){logger['error'](_0x1bb9('0x1b'),_0x40434d,_0xcdda0e);_0x1bf2f1(_0xcdda0e);});});}function respondWithStatusCode(_0x50da47,_0x5054f4){_0x5054f4=_0x5054f4||0xcc;return function(_0x568f58){if(_0x568f58){return _0x50da47['sendStatus'](_0x5054f4);}return _0x50da47['status'](_0x5054f4)[_0x1bb9('0x21')]();};}function respondWithResult(_0x14c157,_0x5bb858){_0x5bb858=_0x5bb858||0xc8;return function(_0x265715){if(_0x265715){return _0x14c157[_0x1bb9('0x22')](_0x5bb858)[_0x1bb9('0x23')](_0x265715);}};}function respondWithFilteredResult(_0x411e40,_0x4acd0c){return function(_0xbf6a8){if(_0xbf6a8){var _0x1e6f0c=_0xbf6a8[_0x1bb9('0x24')],_0x145cd0=_0x4acd0c['offset'],_0x56cb1d=_0x4acd0c['offset']+_0x4acd0c[_0x1bb9('0x25')],_0x4ee738;if(_0x56cb1d>=_0x1e6f0c){_0x56cb1d=_0x1e6f0c;_0x4ee738=0xc8;}else{_0x4ee738=0xce;}_0x411e40[_0x1bb9('0x22')](_0x4ee738);return _0x411e40[_0x1bb9('0x26')](_0x1bb9('0x27'),_0x145cd0+'-'+_0x56cb1d+'/'+_0x1e6f0c)['json'](_0xbf6a8);}return null;};}function patchUpdates(_0x52919b){return function(_0x2cf58a){try{jsonpatch['apply'](_0x2cf58a,_0x52919b,!![]);}catch(_0x3af676){return BPromise[_0x1bb9('0x28')](_0x3af676);}return _0x2cf58a['save']();};}function saveUpdates(_0x14a0e5,_0x5acb9c){return function(_0x2e7e40){if(_0x2e7e40){return _0x2e7e40[_0x1bb9('0x29')](_0x14a0e5)[_0x1bb9('0x2a')](function(_0x3cf214){return _0x3cf214;});}return null;};}function removeEntity(_0x1471c5,_0x38095e){return function(_0x3fd990){if(_0x3fd990){return _0x3fd990[_0x1bb9('0x2b')]()['then'](function(){_0x1471c5[_0x1bb9('0x22')](0xcc)[_0x1bb9('0x21')]();});}};}function handleEntityNotFound(_0x5ff21c,_0x2dd54a){return function(_0x12f823){if(!_0x12f823){_0x5ff21c[_0x1bb9('0x2c')](0x194);}return _0x12f823;};}function handleError(_0x3236be,_0x5d8d8c){_0x5d8d8c=_0x5d8d8c||0x1f4;return function(_0x42dce6){logger[_0x1bb9('0x1e')](_0x42dce6[_0x1bb9('0x2d')]);if(_0x42dce6[_0x1bb9('0x2e')]){delete _0x42dce6[_0x1bb9('0x2e')];}_0x3236be[_0x1bb9('0x22')](_0x5d8d8c)[_0x1bb9('0x2f')](_0x42dce6);};}exports[_0x1bb9('0x30')]=function(_0x3772c8,_0x4b1853){var _0x408b0e={},_0x1db269={},_0x3f5a25={'count':0x0,'rows':[]};var _0x50918a=db['ChatGroup']['rawAttributes'];_0x1db269[_0x1bb9('0x31')]=_[_0x1bb9('0x32')](_0x50918a);var _0x3dc3f9={'dateStart':_0x3772c8[_0x1bb9('0x33')][_0x1bb9('0x34')],'dateEnd':_0x3772c8['query'][_0x1bb9('0x35')]};delete _0x3772c8[_0x1bb9('0x33')][_0x1bb9('0x34')];delete _0x3772c8[_0x1bb9('0x33')][_0x1bb9('0x35')];_0x1db269[_0x1bb9('0x33')]=_[_0x1bb9('0x32')](_0x3772c8[_0x1bb9('0x33')]);_0x1db269['filters']=_[_0x1bb9('0x36')](_0x1db269[_0x1bb9('0x31')],_0x1db269[_0x1bb9('0x33')]);_0x408b0e['attributes']=_['intersection'](_0x1db269[_0x1bb9('0x31')],qs[_0x1bb9('0x37')](_0x3772c8[_0x1bb9('0x33')][_0x1bb9('0x37')]));_0x408b0e['attributes']=_0x408b0e[_0x1bb9('0x38')]['length']?_0x408b0e['attributes']:_0x1db269[_0x1bb9('0x31')];if(!_0x3772c8[_0x1bb9('0x33')][_0x1bb9('0x39')]('nolimit')){_0x408b0e[_0x1bb9('0x25')]=qs[_0x1bb9('0x25')](_0x3772c8[_0x1bb9('0x33')][_0x1bb9('0x25')]);_0x408b0e[_0x1bb9('0x3a')]=qs[_0x1bb9('0x3a')](_0x3772c8[_0x1bb9('0x33')][_0x1bb9('0x3a')]);}_0x408b0e['order']=qs['sort'](_0x3772c8[_0x1bb9('0x33')][_0x1bb9('0x3b')]);_0x408b0e[_0x1bb9('0x3c')]=qs[_0x1bb9('0x3d')](_['pick'](_0x3772c8[_0x1bb9('0x33')],_0x1db269[_0x1bb9('0x3d')]));if(_0x3dc3f9['dateStart']){if(_0x3dc3f9[_0x1bb9('0x35')]){_0x3dc3f9[_0x1bb9('0x35')]=moment(_0x3dc3f9['dateEnd'])[_0x1bb9('0x3e')](0x1,_0x1bb9('0x3f'));}else{_0x3dc3f9[_0x1bb9('0x35')]=moment(_0x3dc3f9[_0x1bb9('0x34')])[_0x1bb9('0x3e')](0x1,_0x1bb9('0x3f'));}_[_0x1bb9('0x40')](_0x408b0e[_0x1bb9('0x3c')],{'createdAt':{'$gte':_0x3dc3f9['dateStart'],'$lte':_0x3dc3f9[_0x1bb9('0x35')]}});}if(_0x3772c8[_0x1bb9('0x33')][_0x1bb9('0x41')]){_0x408b0e[_0x1bb9('0x3c')]=_[_0x1bb9('0x40')](_0x408b0e[_0x1bb9('0x3c')],{'$or':_[_0x1bb9('0x42')](_0x408b0e[_0x1bb9('0x38')],function(_0xffb8a2){var _0x292795={};_0x292795[_0xffb8a2]={'$like':'%'+_0x3772c8['query'][_0x1bb9('0x41')]+'%'};return _0x292795;})});}_0x408b0e=_[_0x1bb9('0x40')]({},_0x408b0e,_0x3772c8[_0x1bb9('0x43')]);var _0x51a945={'where':_0x408b0e[_0x1bb9('0x3c')]};return db[_0x1bb9('0x44')][_0x1bb9('0x24')](_0x51a945)[_0x1bb9('0x2a')](function(_0x461d3e){_0x3f5a25[_0x1bb9('0x24')]=_0x461d3e;if(_0x3772c8['query'][_0x1bb9('0x45')]){_0x408b0e[_0x1bb9('0x46')]=[{'all':!![]}];}return db[_0x1bb9('0x44')][_0x1bb9('0x47')](_0x408b0e);})[_0x1bb9('0x2a')](function(_0x4876dc){_0x3f5a25[_0x1bb9('0x48')]=_0x4876dc;return _0x3f5a25;})[_0x1bb9('0x2a')](respondWithFilteredResult(_0x4b1853,_0x408b0e))['catch'](handleError(_0x4b1853,null));};exports[_0x1bb9('0x49')]=function(_0x32d4b4,_0x15c2db){var _0x3eae69={'raw':!![],'where':{'id':_0x32d4b4[_0x1bb9('0x4a')]['id']}},_0x5dbaed={};_0x5dbaed[_0x1bb9('0x31')]=_[_0x1bb9('0x32')](db[_0x1bb9('0x44')][_0x1bb9('0x4b')]);_0x5dbaed[_0x1bb9('0x33')]=_[_0x1bb9('0x32')](_0x32d4b4[_0x1bb9('0x33')]);_0x5dbaed['filters']=_[_0x1bb9('0x36')](_0x5dbaed[_0x1bb9('0x31')],_0x5dbaed[_0x1bb9('0x33')]);_0x3eae69[_0x1bb9('0x38')]=_[_0x1bb9('0x36')](_0x5dbaed[_0x1bb9('0x31')],qs[_0x1bb9('0x37')](_0x32d4b4['query'][_0x1bb9('0x37')]));_0x3eae69[_0x1bb9('0x38')]=_0x3eae69[_0x1bb9('0x38')][_0x1bb9('0x4c')]?_0x3eae69['attributes']:_0x5dbaed[_0x1bb9('0x31')];if(_0x32d4b4[_0x1bb9('0x33')][_0x1bb9('0x45')]){_0x3eae69[_0x1bb9('0x46')]=[{'all':!![]}];}_0x3eae69=_[_0x1bb9('0x40')]({},_0x3eae69,_0x32d4b4[_0x1bb9('0x43')]);return db['ChatGroup']['find'](_0x3eae69)[_0x1bb9('0x2a')](handleEntityNotFound(_0x15c2db,null))[_0x1bb9('0x2a')](respondWithResult(_0x15c2db,null))['catch'](handleError(_0x15c2db,null));};exports['create']=function(_0x318774,_0x4ffcc4){return db[_0x1bb9('0x44')][_0x1bb9('0x4d')](_0x318774['body'],{})[_0x1bb9('0x2a')](respondWithResult(_0x4ffcc4,0xc9))['catch'](handleError(_0x4ffcc4,null));};exports[_0x1bb9('0x29')]=function(_0x35b1cd,_0x26c21e){if(_0x35b1cd[_0x1bb9('0x4e')]['id']){delete _0x35b1cd[_0x1bb9('0x4e')]['id'];}return db['ChatGroup'][_0x1bb9('0x4f')]({'where':{'id':_0x35b1cd[_0x1bb9('0x4a')]['id']}})[_0x1bb9('0x2a')](handleEntityNotFound(_0x26c21e,null))[_0x1bb9('0x2a')](saveUpdates(_0x35b1cd['body'],null))[_0x1bb9('0x2a')](respondWithResult(_0x26c21e,null))[_0x1bb9('0x50')](handleError(_0x26c21e,null));};exports[_0x1bb9('0x2b')]=function(_0x38cc2b,_0x26f895){return db[_0x1bb9('0x44')][_0x1bb9('0x4f')]({'where':{'id':_0x38cc2b[_0x1bb9('0x4a')]['id']}})[_0x1bb9('0x2a')](handleEntityNotFound(_0x26f895,null))[_0x1bb9('0x2a')](removeEntity(_0x26f895,null))[_0x1bb9('0x50')](handleError(_0x26f895,null));};exports[_0x1bb9('0x51')]=function(_0x1ce9df,_0x2c341a){return db[_0x1bb9('0x44')][_0x1bb9('0x51')]()[_0x1bb9('0x2a')](respondWithResult(_0x2c341a,null))[_0x1bb9('0x50')](handleError(_0x2c341a,null));};exports[_0x1bb9('0x52')]=function(_0x29051b,_0x1e5cf5,_0x518072){return db[_0x1bb9('0x53')][_0x1bb9('0x24')]({'where':{'ChatGroupId':_0x29051b[_0x1bb9('0x4a')]['id'],'ToId':_0x29051b[_0x1bb9('0x54')]['id'],'read':![]}})[_0x1bb9('0x2a')](function(_0x511b04){return{'id':_[_0x1bb9('0x55')](_0x29051b[_0x1bb9('0x4a')]['id']),'count':_0x511b04};})['then'](respondWithResult(_0x1e5cf5,null))[_0x1bb9('0x50')](handleError(_0x1e5cf5,null));};exports[_0x1bb9('0x56')]=function(_0x2aa6bf,_0x3b3463,_0x128a1b){return db['ChatGroup']['find']({'where':{'id':_0x2aa6bf['params']['id']}})[_0x1bb9('0x2a')](handleEntityNotFound(_0x3b3463,null))[_0x1bb9('0x2a')](function(_0x2f8bd5){if(_0x2f8bd5){return _0x2f8bd5[_0x1bb9('0x56')](_0x2aa6bf[_0x1bb9('0x4e')][_0x1bb9('0x57')],_[_0x1bb9('0x58')](_0x2aa6bf[_0x1bb9('0x4e')],[_0x1bb9('0x57'),'id'])||{});}})[_0x1bb9('0x2a')](respondWithResult(_0x3b3463,null))['catch'](handleError(_0x3b3463,null));};exports['getMembers']=function(_0x512a76,_0x18debb,_0x598011){var _0x583daa={};var _0x37808e={};var _0x55917b;var _0x5dd992;return db[_0x1bb9('0x44')][_0x1bb9('0x59')]({'where':{'id':_0x512a76['params']['id']}})[_0x1bb9('0x2a')](handleEntityNotFound(_0x18debb,null))[_0x1bb9('0x2a')](function(_0x52b2af){if(_0x52b2af){_0x55917b=_0x52b2af;_0x37808e[_0x1bb9('0x31')]=_['keys'](db['User'][_0x1bb9('0x4b')]);_0x37808e['query']=_['keys'](_0x512a76[_0x1bb9('0x33')]);_0x37808e[_0x1bb9('0x3d')]=_[_0x1bb9('0x36')](_0x37808e['model'],_0x37808e[_0x1bb9('0x33')]);_0x583daa[_0x1bb9('0x38')]=_[_0x1bb9('0x36')](_0x37808e['model'],qs[_0x1bb9('0x37')](_0x512a76[_0x1bb9('0x33')][_0x1bb9('0x37')]));_0x583daa['attributes']=_0x583daa[_0x1bb9('0x38')][_0x1bb9('0x4c')]?_0x583daa['attributes']:_0x37808e[_0x1bb9('0x31')];_0x583daa['order']=qs[_0x1bb9('0x3b')](_0x512a76[_0x1bb9('0x33')][_0x1bb9('0x3b')]);_0x583daa['where']=qs[_0x1bb9('0x3d')](_['pick'](_0x512a76[_0x1bb9('0x33')],_0x37808e['filters']));if(_0x512a76['query'][_0x1bb9('0x41')]){_0x583daa['where']=_[_0x1bb9('0x40')](_0x583daa['where'],{'$or':_[_0x1bb9('0x42')](_0x583daa[_0x1bb9('0x38')],function(_0x5b7ab5){var _0x4f2c02={};_0x4f2c02[_0x5b7ab5]={'$like':'%'+_0x512a76[_0x1bb9('0x33')][_0x1bb9('0x41')]+'%'};return _0x4f2c02;})});}_0x583daa=_[_0x1bb9('0x40')]({},_0x583daa,_0x512a76[_0x1bb9('0x43')]);return _0x55917b[_0x1bb9('0x5a')](_0x583daa);}})[_0x1bb9('0x2a')](function(_0x5bea31){if(_0x5bea31){_0x5dd992=_0x5bea31['length'];if(!_0x512a76['query'][_0x1bb9('0x39')](_0x1bb9('0x5b'))){_0x583daa[_0x1bb9('0x25')]=qs[_0x1bb9('0x25')](_0x512a76[_0x1bb9('0x33')]['limit']);_0x583daa[_0x1bb9('0x3a')]=qs['offset'](_0x512a76[_0x1bb9('0x33')][_0x1bb9('0x3a')]);}return _0x55917b[_0x1bb9('0x5a')](_0x583daa);}})[_0x1bb9('0x2a')](function(_0x3b4ee0){if(_0x3b4ee0){return _0x3b4ee0?{'count':_0x5dd992,'rows':_0x3b4ee0}:null;}})[_0x1bb9('0x2a')](respondWithResult(_0x18debb,null))[_0x1bb9('0x50')](handleError(_0x18debb,null));};exports[_0x1bb9('0x5c')]=function(_0x579cb4,_0x5e023f,_0x4f442a){var _0x23ad7d;return db[_0x1bb9('0x44')][_0x1bb9('0x4f')]({'where':{'id':_0x579cb4[_0x1bb9('0x4a')]['id']}})[_0x1bb9('0x2a')](handleEntityNotFound(_0x5e023f,null))[_0x1bb9('0x2a')](function(_0x5b691b){if(_0x5b691b){return _0x5b691b[_0x1bb9('0x5c')](_0x579cb4['query'][_0x1bb9('0x57')]);}})['then'](respondWithStatusCode(_0x5e023f,null))[_0x1bb9('0x50')](handleError(_0x5e023f,null));};exports[_0x1bb9('0x5d')]=function(_0x104381,_0x2c7b4d,_0x30c226){if(_0x104381[_0x1bb9('0x4e')]['id']){delete _0x104381['body']['id'];}return db[_0x1bb9('0x44')][_0x1bb9('0x4f')]({'where':{'id':_0x104381['params']['id']}})[_0x1bb9('0x2a')](handleEntityNotFound(_0x2c7b4d,null))[_0x1bb9('0x2a')](function(_0x5bd1cb){if(_0x5bd1cb){_0x104381[_0x1bb9('0x4e')][_0x1bb9('0x5e')]=_0x5bd1cb['id'];return db[_0x1bb9('0x53')]['create'](_0x104381[_0x1bb9('0x4e')]);}})[_0x1bb9('0x2a')](respondWithResult(_0x2c7b4d,null))[_0x1bb9('0x50')](handleError(_0x2c7b4d,null));};exports[_0x1bb9('0x5f')]=function(_0x2ab73f,_0x35f84b,_0x5ee9f3){var _0x3d9f65={};var _0x61c54={};var _0x3f6b0e;var _0x2856a0;return db[_0x1bb9('0x44')][_0x1bb9('0x59')]({'where':{'id':_0x2ab73f['params']['id']}})['then'](handleEntityNotFound(_0x35f84b,null))[_0x1bb9('0x2a')](function(_0x444052){if(_0x444052){_0x3f6b0e=_0x444052;_0x61c54[_0x1bb9('0x31')]=_['keys'](db[_0x1bb9('0x53')][_0x1bb9('0x4b')]);_0x61c54['query']=_[_0x1bb9('0x32')](_0x2ab73f[_0x1bb9('0x33')]);_0x61c54[_0x1bb9('0x3d')]=_['intersection'](_0x61c54[_0x1bb9('0x31')],_0x61c54[_0x1bb9('0x33')]);_0x3d9f65[_0x1bb9('0x38')]=_[_0x1bb9('0x36')](_0x61c54[_0x1bb9('0x31')],qs[_0x1bb9('0x37')](_0x2ab73f[_0x1bb9('0x33')]['fields']));_0x3d9f65['attributes']=_0x3d9f65[_0x1bb9('0x38')]['length']?_0x3d9f65[_0x1bb9('0x38')]:_0x61c54['model'];_0x3d9f65[_0x1bb9('0x60')]=qs[_0x1bb9('0x3b')](_0x2ab73f[_0x1bb9('0x33')][_0x1bb9('0x3b')]);_0x3d9f65[_0x1bb9('0x3c')]=qs[_0x1bb9('0x3d')](_[_0x1bb9('0x61')](_0x2ab73f[_0x1bb9('0x33')],_0x61c54[_0x1bb9('0x3d')]));if(_0x2ab73f[_0x1bb9('0x33')]['filter']){_0x3d9f65[_0x1bb9('0x3c')]=_['merge'](_0x3d9f65[_0x1bb9('0x3c')],{'$or':_[_0x1bb9('0x42')](_0x3d9f65['attributes'],function(_0x30a31a){var _0x44e00f={};_0x44e00f[_0x30a31a]={'$like':'%'+_0x2ab73f['query'][_0x1bb9('0x41')]+'%'};return _0x44e00f;})});}if(_0x2ab73f[_0x1bb9('0x33')][_0x1bb9('0x62')]){var _0x599a52=_0x2ab73f[_0x1bb9('0x33')][_0x1bb9('0x62')][_0x1bb9('0x63')](',');var _0xc2ad60={};_0xc2ad60[_0x599a52[0x0]]={'$gte':moment(_0x599a52[0x1])['format'](_0x1bb9('0x64'))};_0x3d9f65[_0x1bb9('0x3c')]=_['merge'](_0x3d9f65[_0x1bb9('0x3c')],_0xc2ad60);}_0x3d9f65=_[_0x1bb9('0x40')]({},_0x3d9f65,_0x2ab73f[_0x1bb9('0x43')]);return _0x3f6b0e[_0x1bb9('0x5f')](_0x3d9f65);}})[_0x1bb9('0x2a')](function(_0x38a4b5){if(_0x38a4b5){_0x2856a0=_0x38a4b5[_0x1bb9('0x4c')];if(!_0x2ab73f[_0x1bb9('0x33')][_0x1bb9('0x39')]('nolimit')){_0x3d9f65[_0x1bb9('0x25')]=qs[_0x1bb9('0x25')](_0x2ab73f['query']['limit']);_0x3d9f65[_0x1bb9('0x3a')]=qs['offset'](_0x2ab73f[_0x1bb9('0x33')][_0x1bb9('0x3a')]);}return _0x3f6b0e['getMessages'](_0x3d9f65);}})[_0x1bb9('0x2a')](function(_0xb5ba94){if(_0xb5ba94){return _0xb5ba94?{'count':_0x2856a0,'rows':_0xb5ba94}:null;}})['then'](respondWithResult(_0x35f84b,null))['catch'](handleError(_0x35f84b,null));};
\ No newline at end of file
+var _0x1e00=['client','http','info','ChatGroup,\x20%s,\x20%s','request\x20sent','debug','ChatGroup,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','end','json','offset','set','apply','reject','save','update','then','status','sendStatus','stack','name','index','ChatGroup','rawAttributes','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','add','day','filter','merge','map','options','count','findAll','show','params','includeAll','include','body','find','destroy','describe','getUnread','user','addMembers','ids','omit','getMembers','findOne','User','removeMembers','addMessage','ChatGroupId','ChatInternalMessage','getMessages','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','fast-json-patch','moment','mustache','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','../../components/parsers/qs','api','../../config/environment','../../mysqldb','localhost','./chatGroup.socket','register','jayson/promise'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x1e00,0x1db));var _0x01e0=function(_0x1fa30a,_0x12e033){_0x1fa30a=_0x1fa30a-0x0;var _0x509ba6=_0x1e00[_0x1fa30a];return _0x509ba6;};'use strict';var jsonpatch=require(_0x01e0('0x0'));var rp=require('request-promise');var moment=require(_0x01e0('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x01e0('0x2'));var util=require('util');var path=require(_0x01e0('0x3'));var sox=require(_0x01e0('0x4'));var csv=require(_0x01e0('0x5'));var ejs=require(_0x01e0('0x6'));var fs=require('fs');var _=require(_0x01e0('0x7'));var squel=require(_0x01e0('0x8'));var crypto=require('crypto');var jsforce=require(_0x01e0('0x9'));var deskjs=require(_0x01e0('0xa'));var toCsv=require(_0x01e0('0x5'));var querystring=require('querystring');var Papa=require(_0x01e0('0xb'));var qs=require(_0x01e0('0xc'));var logger=require('../../config/logger')(_0x01e0('0xd'));var utils=require('../../config/utils');var config=require(_0x01e0('0xe'));var db=require(_0x01e0('0xf'))['db'];var socket=require('socket.io-emitter')({'host':_0x01e0('0x10'),'port':0x18eb});require(_0x01e0('0x11'))[_0x01e0('0x12')](socket);var jayson=require(_0x01e0('0x13'));var client=jayson[_0x01e0('0x14')][_0x01e0('0x15')]({'port':0x232a});function respondWithRpcPromise(_0x484cef,_0x29393a,_0x7f2021,_0x577ed6){return new BPromise(function(_0x44d935,_0xaefb6d){var _0x1fcf33=_0x577ed6||client;return _0x1fcf33['request'](_0x484cef,_0x7f2021)['then'](function(_0x1a2ce7){logger[_0x01e0('0x16')](_0x01e0('0x17'),_0x29393a,_0x01e0('0x18'));logger[_0x01e0('0x19')](_0x01e0('0x1a'),_0x29393a,_0x01e0('0x18'),JSON[_0x01e0('0x1b')](_0x1a2ce7));if(_0x1a2ce7[_0x01e0('0x1c')]){if(_0x1a2ce7[_0x01e0('0x1c')][_0x01e0('0x1d')]===0x1f4){logger[_0x01e0('0x1c')]('ChatGroup,\x20%s,\x20%s',_0x29393a,_0x1a2ce7[_0x01e0('0x1c')][_0x01e0('0x1e')]);return _0xaefb6d(_0x1a2ce7[_0x01e0('0x1c')][_0x01e0('0x1e')]);}logger[_0x01e0('0x1c')](_0x01e0('0x17'),_0x29393a,_0x1a2ce7[_0x01e0('0x1c')][_0x01e0('0x1e')]);return _0x44d935(_0x1a2ce7['error'][_0x01e0('0x1e')]);}else{logger[_0x01e0('0x16')]('ChatGroup,\x20%s,\x20%s',_0x29393a,_0x01e0('0x18'));_0x44d935(_0x1a2ce7[_0x01e0('0x1f')][_0x01e0('0x1e')]);}})[_0x01e0('0x20')](function(_0x25d9db){logger[_0x01e0('0x1c')](_0x01e0('0x17'),_0x29393a,_0x25d9db);_0xaefb6d(_0x25d9db);});});}function respondWithStatusCode(_0x5446ea,_0x53a191){_0x53a191=_0x53a191||0xcc;return function(_0x305acd){if(_0x305acd){return _0x5446ea['sendStatus'](_0x53a191);}return _0x5446ea['status'](_0x53a191)[_0x01e0('0x21')]();};}function respondWithResult(_0x4f3dc0,_0x57cc73){_0x57cc73=_0x57cc73||0xc8;return function(_0x204fdc){if(_0x204fdc){return _0x4f3dc0['status'](_0x57cc73)[_0x01e0('0x22')](_0x204fdc);}};}function respondWithFilteredResult(_0x1d621a,_0x349f69){return function(_0x50b5a7){if(_0x50b5a7){var _0x2b4f87=_0x50b5a7['count'],_0xf7fa49=_0x349f69[_0x01e0('0x23')],_0x1323a1=_0x349f69['offset']+_0x349f69['limit'],_0xe4179e;if(_0x1323a1>=_0x2b4f87){_0x1323a1=_0x2b4f87;_0xe4179e=0xc8;}else{_0xe4179e=0xce;}_0x1d621a['status'](_0xe4179e);return _0x1d621a[_0x01e0('0x24')]('Content-Range',_0xf7fa49+'-'+_0x1323a1+'/'+_0x2b4f87)[_0x01e0('0x22')](_0x50b5a7);}return null;};}function patchUpdates(_0x38c103){return function(_0x565496){try{jsonpatch[_0x01e0('0x25')](_0x565496,_0x38c103,!![]);}catch(_0x244b99){return BPromise[_0x01e0('0x26')](_0x244b99);}return _0x565496[_0x01e0('0x27')]();};}function saveUpdates(_0x5252e9,_0xf270a){return function(_0x44c45e){if(_0x44c45e){return _0x44c45e[_0x01e0('0x28')](_0x5252e9)[_0x01e0('0x29')](function(_0x464772){return _0x464772;});}return null;};}function removeEntity(_0x471a08,_0x48b9ed){return function(_0x162ed7){if(_0x162ed7){return _0x162ed7['destroy']()[_0x01e0('0x29')](function(){_0x471a08[_0x01e0('0x2a')](0xcc)[_0x01e0('0x21')]();});}};}function handleEntityNotFound(_0xd4b1bb,_0x5ecb18){return function(_0x4ffff0){if(!_0x4ffff0){_0xd4b1bb[_0x01e0('0x2b')](0x194);}return _0x4ffff0;};}function handleError(_0x4de607,_0x59fbc4){_0x59fbc4=_0x59fbc4||0x1f4;return function(_0x437d6d){logger[_0x01e0('0x1c')](_0x437d6d[_0x01e0('0x2c')]);if(_0x437d6d[_0x01e0('0x2d')]){delete _0x437d6d[_0x01e0('0x2d')];}_0x4de607['status'](_0x59fbc4)['send'](_0x437d6d);};}exports[_0x01e0('0x2e')]=function(_0x1af7f3,_0x4998db){var _0xef0015={},_0x4a1824={},_0x1b9e5c={'count':0x0,'rows':[]};var _0x1c88a2=db[_0x01e0('0x2f')][_0x01e0('0x30')];_0x4a1824[_0x01e0('0x31')]=_[_0x01e0('0x32')](_0x1c88a2);var _0x54cfa8={'dateStart':_0x1af7f3['query'][_0x01e0('0x33')],'dateEnd':_0x1af7f3[_0x01e0('0x34')][_0x01e0('0x35')]};delete _0x1af7f3[_0x01e0('0x34')]['dateStart'];delete _0x1af7f3[_0x01e0('0x34')][_0x01e0('0x35')];_0x4a1824['query']=_[_0x01e0('0x32')](_0x1af7f3[_0x01e0('0x34')]);_0x4a1824[_0x01e0('0x36')]=_[_0x01e0('0x37')](_0x4a1824[_0x01e0('0x31')],_0x4a1824[_0x01e0('0x34')]);_0xef0015[_0x01e0('0x38')]=_[_0x01e0('0x37')](_0x4a1824[_0x01e0('0x31')],qs[_0x01e0('0x39')](_0x1af7f3['query'][_0x01e0('0x39')]));_0xef0015['attributes']=_0xef0015['attributes'][_0x01e0('0x3a')]?_0xef0015[_0x01e0('0x38')]:_0x4a1824[_0x01e0('0x31')];if(!_0x1af7f3[_0x01e0('0x34')][_0x01e0('0x3b')](_0x01e0('0x3c'))){_0xef0015[_0x01e0('0x3d')]=qs[_0x01e0('0x3d')](_0x1af7f3['query'][_0x01e0('0x3d')]);_0xef0015[_0x01e0('0x23')]=qs['offset'](_0x1af7f3['query'][_0x01e0('0x23')]);}_0xef0015[_0x01e0('0x3e')]=qs[_0x01e0('0x3f')](_0x1af7f3[_0x01e0('0x34')]['sort']);_0xef0015[_0x01e0('0x40')]=qs[_0x01e0('0x36')](_[_0x01e0('0x41')](_0x1af7f3[_0x01e0('0x34')],_0x4a1824[_0x01e0('0x36')]));if(_0x54cfa8[_0x01e0('0x33')]){if(_0x54cfa8[_0x01e0('0x35')]){_0x54cfa8['dateEnd']=moment(_0x54cfa8[_0x01e0('0x35')])[_0x01e0('0x42')](0x1,_0x01e0('0x43'));}else{_0x54cfa8[_0x01e0('0x35')]=moment(_0x54cfa8[_0x01e0('0x33')])[_0x01e0('0x42')](0x1,_0x01e0('0x43'));}_['merge'](_0xef0015[_0x01e0('0x40')],{'createdAt':{'$gte':_0x54cfa8[_0x01e0('0x33')],'$lte':_0x54cfa8[_0x01e0('0x35')]}});}if(_0x1af7f3[_0x01e0('0x34')][_0x01e0('0x44')]){_0xef0015[_0x01e0('0x40')]=_[_0x01e0('0x45')](_0xef0015[_0x01e0('0x40')],{'$or':_[_0x01e0('0x46')](_0xef0015[_0x01e0('0x38')],function(_0x2b16f4){var _0xccfdb9={};_0xccfdb9[_0x2b16f4]={'$like':'%'+_0x1af7f3['query'][_0x01e0('0x44')]+'%'};return _0xccfdb9;})});}_0xef0015=_[_0x01e0('0x45')]({},_0xef0015,_0x1af7f3[_0x01e0('0x47')]);var _0xad4831={'where':_0xef0015['where']};return db['ChatGroup'][_0x01e0('0x48')](_0xad4831)[_0x01e0('0x29')](function(_0x1cb75c){_0x1b9e5c['count']=_0x1cb75c;if(_0x1af7f3['query']['includeAll']){_0xef0015['include']=[{'all':!![]}];}return db[_0x01e0('0x2f')][_0x01e0('0x49')](_0xef0015);})[_0x01e0('0x29')](function(_0x291bb6){_0x1b9e5c['rows']=_0x291bb6;return _0x1b9e5c;})['then'](respondWithFilteredResult(_0x4998db,_0xef0015))['catch'](handleError(_0x4998db,null));};exports[_0x01e0('0x4a')]=function(_0x24ff24,_0x1c9e28){var _0x575cd0={'raw':!![],'where':{'id':_0x24ff24[_0x01e0('0x4b')]['id']}},_0x1e3b1f={};_0x1e3b1f[_0x01e0('0x31')]=_[_0x01e0('0x32')](db[_0x01e0('0x2f')][_0x01e0('0x30')]);_0x1e3b1f[_0x01e0('0x34')]=_[_0x01e0('0x32')](_0x24ff24[_0x01e0('0x34')]);_0x1e3b1f[_0x01e0('0x36')]=_[_0x01e0('0x37')](_0x1e3b1f['model'],_0x1e3b1f[_0x01e0('0x34')]);_0x575cd0[_0x01e0('0x38')]=_[_0x01e0('0x37')](_0x1e3b1f[_0x01e0('0x31')],qs['fields'](_0x24ff24[_0x01e0('0x34')][_0x01e0('0x39')]));_0x575cd0[_0x01e0('0x38')]=_0x575cd0[_0x01e0('0x38')][_0x01e0('0x3a')]?_0x575cd0[_0x01e0('0x38')]:_0x1e3b1f[_0x01e0('0x31')];if(_0x24ff24[_0x01e0('0x34')][_0x01e0('0x4c')]){_0x575cd0[_0x01e0('0x4d')]=[{'all':!![]}];}_0x575cd0=_[_0x01e0('0x45')]({},_0x575cd0,_0x24ff24[_0x01e0('0x47')]);return db[_0x01e0('0x2f')]['find'](_0x575cd0)[_0x01e0('0x29')](handleEntityNotFound(_0x1c9e28,null))[_0x01e0('0x29')](respondWithResult(_0x1c9e28,null))['catch'](handleError(_0x1c9e28,null));};exports['create']=function(_0x12bce1,_0x21cb61){return db['ChatGroup']['create'](_0x12bce1[_0x01e0('0x4e')],{})[_0x01e0('0x29')](respondWithResult(_0x21cb61,0xc9))[_0x01e0('0x20')](handleError(_0x21cb61,null));};exports['update']=function(_0xf25d8d,_0x515a3a){if(_0xf25d8d['body']['id']){delete _0xf25d8d['body']['id'];}return db[_0x01e0('0x2f')][_0x01e0('0x4f')]({'where':{'id':_0xf25d8d[_0x01e0('0x4b')]['id']}})[_0x01e0('0x29')](handleEntityNotFound(_0x515a3a,null))['then'](saveUpdates(_0xf25d8d[_0x01e0('0x4e')],null))[_0x01e0('0x29')](respondWithResult(_0x515a3a,null))['catch'](handleError(_0x515a3a,null));};exports[_0x01e0('0x50')]=function(_0x8249f0,_0x5fec37){return db['ChatGroup'][_0x01e0('0x4f')]({'where':{'id':_0x8249f0[_0x01e0('0x4b')]['id']}})[_0x01e0('0x29')](handleEntityNotFound(_0x5fec37,null))['then'](removeEntity(_0x5fec37,null))[_0x01e0('0x20')](handleError(_0x5fec37,null));};exports['describe']=function(_0xd4dbb4,_0x3c7549){return db[_0x01e0('0x2f')][_0x01e0('0x51')]()['then'](respondWithResult(_0x3c7549,null))['catch'](handleError(_0x3c7549,null));};exports[_0x01e0('0x52')]=function(_0x3c94dd,_0x3ebe7c,_0x562b6e){return db['ChatInternalMessage'][_0x01e0('0x48')]({'where':{'ChatGroupId':_0x3c94dd['params']['id'],'ToId':_0x3c94dd[_0x01e0('0x53')]['id'],'read':![]}})['then'](function(_0x3678ad){return{'id':_['toInteger'](_0x3c94dd['params']['id']),'count':_0x3678ad};})[_0x01e0('0x29')](respondWithResult(_0x3ebe7c,null))[_0x01e0('0x20')](handleError(_0x3ebe7c,null));};exports[_0x01e0('0x54')]=function(_0x59c72b,_0x4d066a,_0x195883){return db[_0x01e0('0x2f')][_0x01e0('0x4f')]({'where':{'id':_0x59c72b[_0x01e0('0x4b')]['id']}})['then'](handleEntityNotFound(_0x4d066a,null))[_0x01e0('0x29')](function(_0x24ecfd){if(_0x24ecfd){return _0x24ecfd[_0x01e0('0x54')](_0x59c72b[_0x01e0('0x4e')][_0x01e0('0x55')],_[_0x01e0('0x56')](_0x59c72b[_0x01e0('0x4e')],[_0x01e0('0x55'),'id'])||{});}})[_0x01e0('0x29')](respondWithResult(_0x4d066a,null))[_0x01e0('0x20')](handleError(_0x4d066a,null));};exports[_0x01e0('0x57')]=function(_0x22248c,_0x5673a1,_0x4b9be1){var _0x1f9fe4={};var _0x490482={};var _0x4c8bdf;var _0x45765c;return db[_0x01e0('0x2f')][_0x01e0('0x58')]({'where':{'id':_0x22248c[_0x01e0('0x4b')]['id']}})[_0x01e0('0x29')](handleEntityNotFound(_0x5673a1,null))[_0x01e0('0x29')](function(_0x4909d7){if(_0x4909d7){_0x4c8bdf=_0x4909d7;_0x490482[_0x01e0('0x31')]=_[_0x01e0('0x32')](db[_0x01e0('0x59')]['rawAttributes']);_0x490482[_0x01e0('0x34')]=_[_0x01e0('0x32')](_0x22248c[_0x01e0('0x34')]);_0x490482[_0x01e0('0x36')]=_[_0x01e0('0x37')](_0x490482[_0x01e0('0x31')],_0x490482[_0x01e0('0x34')]);_0x1f9fe4[_0x01e0('0x38')]=_[_0x01e0('0x37')](_0x490482[_0x01e0('0x31')],qs['fields'](_0x22248c['query']['fields']));_0x1f9fe4[_0x01e0('0x38')]=_0x1f9fe4[_0x01e0('0x38')][_0x01e0('0x3a')]?_0x1f9fe4[_0x01e0('0x38')]:_0x490482[_0x01e0('0x31')];_0x1f9fe4[_0x01e0('0x3e')]=qs[_0x01e0('0x3f')](_0x22248c[_0x01e0('0x34')][_0x01e0('0x3f')]);_0x1f9fe4[_0x01e0('0x40')]=qs[_0x01e0('0x36')](_[_0x01e0('0x41')](_0x22248c[_0x01e0('0x34')],_0x490482[_0x01e0('0x36')]));if(_0x22248c[_0x01e0('0x34')][_0x01e0('0x44')]){_0x1f9fe4['where']=_['merge'](_0x1f9fe4[_0x01e0('0x40')],{'$or':_[_0x01e0('0x46')](_0x1f9fe4[_0x01e0('0x38')],function(_0x34ecf4){var _0x4d2e40={};_0x4d2e40[_0x34ecf4]={'$like':'%'+_0x22248c[_0x01e0('0x34')][_0x01e0('0x44')]+'%'};return _0x4d2e40;})});}_0x1f9fe4=_[_0x01e0('0x45')]({},_0x1f9fe4,_0x22248c['options']);return _0x4c8bdf['getMembers'](_0x1f9fe4);}})[_0x01e0('0x29')](function(_0x5287fa){if(_0x5287fa){_0x45765c=_0x5287fa[_0x01e0('0x3a')];if(!_0x22248c['query'][_0x01e0('0x3b')](_0x01e0('0x3c'))){_0x1f9fe4['limit']=qs['limit'](_0x22248c[_0x01e0('0x34')]['limit']);_0x1f9fe4[_0x01e0('0x23')]=qs[_0x01e0('0x23')](_0x22248c[_0x01e0('0x34')]['offset']);}return _0x4c8bdf[_0x01e0('0x57')](_0x1f9fe4);}})[_0x01e0('0x29')](function(_0xeb8942){if(_0xeb8942){return _0xeb8942?{'count':_0x45765c,'rows':_0xeb8942}:null;}})['then'](respondWithResult(_0x5673a1,null))[_0x01e0('0x20')](handleError(_0x5673a1,null));};exports[_0x01e0('0x5a')]=function(_0x1bb8c3,_0x13ecbd,_0x304dbf){var _0x2119d1;return db[_0x01e0('0x2f')][_0x01e0('0x4f')]({'where':{'id':_0x1bb8c3['params']['id']}})[_0x01e0('0x29')](handleEntityNotFound(_0x13ecbd,null))['then'](function(_0xcbb3d3){if(_0xcbb3d3){return _0xcbb3d3['removeMembers'](_0x1bb8c3['query'][_0x01e0('0x55')]);}})['then'](respondWithStatusCode(_0x13ecbd,null))[_0x01e0('0x20')](handleError(_0x13ecbd,null));};exports[_0x01e0('0x5b')]=function(_0x272b87,_0x5d7afd,_0xcb491e){if(_0x272b87[_0x01e0('0x4e')]['id']){delete _0x272b87[_0x01e0('0x4e')]['id'];}return db[_0x01e0('0x2f')][_0x01e0('0x4f')]({'where':{'id':_0x272b87[_0x01e0('0x4b')]['id']}})['then'](handleEntityNotFound(_0x5d7afd,null))['then'](function(_0x127131){if(_0x127131){_0x272b87[_0x01e0('0x4e')][_0x01e0('0x5c')]=_0x127131['id'];return db[_0x01e0('0x5d')]['create'](_0x272b87['body']);}})['then'](respondWithResult(_0x5d7afd,null))['catch'](handleError(_0x5d7afd,null));};exports[_0x01e0('0x5e')]=function(_0x383c63,_0x4ef497,_0x33a1ad){var _0x132b1e={};var _0x43ca81={};var _0x15cafb;var _0x4b45c3;return db[_0x01e0('0x2f')]['findOne']({'where':{'id':_0x383c63[_0x01e0('0x4b')]['id']}})['then'](handleEntityNotFound(_0x4ef497,null))['then'](function(_0x20d24f){if(_0x20d24f){_0x15cafb=_0x20d24f;_0x43ca81[_0x01e0('0x31')]=_[_0x01e0('0x32')](db['ChatInternalMessage']['rawAttributes']);_0x43ca81[_0x01e0('0x34')]=_[_0x01e0('0x32')](_0x383c63[_0x01e0('0x34')]);_0x43ca81[_0x01e0('0x36')]=_[_0x01e0('0x37')](_0x43ca81[_0x01e0('0x31')],_0x43ca81[_0x01e0('0x34')]);_0x132b1e[_0x01e0('0x38')]=_['intersection'](_0x43ca81[_0x01e0('0x31')],qs[_0x01e0('0x39')](_0x383c63['query'][_0x01e0('0x39')]));_0x132b1e[_0x01e0('0x38')]=_0x132b1e[_0x01e0('0x38')][_0x01e0('0x3a')]?_0x132b1e[_0x01e0('0x38')]:_0x43ca81[_0x01e0('0x31')];_0x132b1e[_0x01e0('0x3e')]=qs[_0x01e0('0x3f')](_0x383c63['query'][_0x01e0('0x3f')]);_0x132b1e[_0x01e0('0x40')]=qs[_0x01e0('0x36')](_[_0x01e0('0x41')](_0x383c63[_0x01e0('0x34')],_0x43ca81[_0x01e0('0x36')]));if(_0x383c63[_0x01e0('0x34')][_0x01e0('0x44')]){_0x132b1e[_0x01e0('0x40')]=_[_0x01e0('0x45')](_0x132b1e[_0x01e0('0x40')],{'$or':_[_0x01e0('0x46')](_0x132b1e['attributes'],function(_0x30f15c){var _0x24d9fe={};_0x24d9fe[_0x30f15c]={'$like':'%'+_0x383c63[_0x01e0('0x34')]['filter']+'%'};return _0x24d9fe;})});}if(_0x383c63['query'][_0x01e0('0x5f')]){var _0x42369c=_0x383c63[_0x01e0('0x34')][_0x01e0('0x5f')][_0x01e0('0x60')](',');var _0x37ae8f={};_0x37ae8f[_0x42369c[0x0]]={'$gte':moment(_0x42369c[0x1])[_0x01e0('0x61')](_0x01e0('0x62'))};_0x132b1e[_0x01e0('0x40')]=_[_0x01e0('0x45')](_0x132b1e['where'],_0x37ae8f);}_0x132b1e=_[_0x01e0('0x45')]({},_0x132b1e,_0x383c63[_0x01e0('0x47')]);return _0x15cafb[_0x01e0('0x5e')](_0x132b1e);}})['then'](function(_0x2d5a14){if(_0x2d5a14){_0x4b45c3=_0x2d5a14[_0x01e0('0x3a')];if(!_0x383c63[_0x01e0('0x34')][_0x01e0('0x3b')]('nolimit')){_0x132b1e[_0x01e0('0x3d')]=qs[_0x01e0('0x3d')](_0x383c63[_0x01e0('0x34')][_0x01e0('0x3d')]);_0x132b1e['offset']=qs[_0x01e0('0x23')](_0x383c63['query']['offset']);}return _0x15cafb[_0x01e0('0x5e')](_0x132b1e);}})[_0x01e0('0x29')](function(_0x6a7c60){if(_0x6a7c60){return _0x6a7c60?{'count':_0x4b45c3,'rows':_0x6a7c60}:null;}})[_0x01e0('0x29')](respondWithResult(_0x4ef497,null))['catch'](handleError(_0x4ef497,null));};
\ No newline at end of file
index 2bb26d2..37b4be4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xae81=['hook','exports','events','../../mysqldb','setMaxListeners','save','update','remove','emit'];(function(_0x3a33a1,_0x4f9b01){var _0xce10dc=function(_0x469bd4){while(--_0x469bd4){_0x3a33a1['push'](_0x3a33a1['shift']());}};_0xce10dc(++_0x4f9b01);}(_0xae81,0x65));var _0x1ae8=function(_0x181e9f,_0x482a9f){_0x181e9f=_0x181e9f-0x0;var _0x2e419b=_0xae81[_0x181e9f];return _0x2e419b;};'use strict';var EventEmitter=require(_0x1ae8('0x0'));var ChatGroup=require(_0x1ae8('0x1'))['db']['ChatGroup'];var ChatGroupEvents=new EventEmitter();ChatGroupEvents[_0x1ae8('0x2')](0x0);var events={'afterCreate':_0x1ae8('0x3'),'afterUpdate':_0x1ae8('0x4'),'afterDestroy':_0x1ae8('0x5')};function emitEvent(_0x48946b){return function(_0x34b39b,_0x3ad4ab,_0x1f2664){ChatGroupEvents[_0x1ae8('0x6')](_0x48946b+':'+_0x34b39b['id'],_0x34b39b);ChatGroupEvents['emit'](_0x48946b,_0x34b39b);_0x1f2664(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];ChatGroup[_0x1ae8('0x7')](e,emitEvent(event));}}module[_0x1ae8('0x8')]=ChatGroupEvents;
\ No newline at end of file
+var _0xb3a5=['emit','hasOwnProperty','hook','exports','../../mysqldb','ChatGroup','update','remove'];(function(_0x3f382d,_0x30ae65){var _0x2cc5cf=function(_0x3be85f){while(--_0x3be85f){_0x3f382d['push'](_0x3f382d['shift']());}};_0x2cc5cf(++_0x30ae65);}(_0xb3a5,0x11c));var _0x5b3a=function(_0x4eca97,_0x2ae2b0){_0x4eca97=_0x4eca97-0x0;var _0xc536c0=_0xb3a5[_0x4eca97];return _0xc536c0;};'use strict';var EventEmitter=require('events');var ChatGroup=require(_0x5b3a('0x0'))['db'][_0x5b3a('0x1')];var ChatGroupEvents=new EventEmitter();ChatGroupEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0x5b3a('0x2'),'afterDestroy':_0x5b3a('0x3')};function emitEvent(_0x218199){return function(_0x29ccc4,_0x50778f,_0x14b7a3){ChatGroupEvents[_0x5b3a('0x4')](_0x218199+':'+_0x29ccc4['id'],_0x29ccc4);ChatGroupEvents[_0x5b3a('0x4')](_0x218199,_0x29ccc4);_0x14b7a3(null);};}for(var e in events){if(events[_0x5b3a('0x5')](e)){var event=events[e];ChatGroup[_0x5b3a('0x6')](e,emitEvent(event));}}module[_0x5b3a('0x7')]=ChatGroupEvents;
\ No newline at end of file
index c238a29..57f406d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd12=['lodash','util','../../config/logger','api','bluebird','request-promise','./chatGroup.attributes','exports','ChatGroup','chat_groups'];(function(_0x4f4f59,_0x4215c1){var _0x322725=function(_0x4eda03){while(--_0x4eda03){_0x4f4f59['push'](_0x4f4f59['shift']());}};_0x322725(++_0x4215c1);}(_0xcd12,0x104));var _0x2cd1=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xcd12[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x2cd1('0x0'));var util=require(_0x2cd1('0x1'));var logger=require(_0x2cd1('0x2'))(_0x2cd1('0x3'));var moment=require('moment');var BPromise=require(_0x2cd1('0x4'));var rp=require(_0x2cd1('0x5'));var attributes=require(_0x2cd1('0x6'));module[_0x2cd1('0x7')]=function(_0x4ca8da,_0x3d00e7){return _0x4ca8da['define'](_0x2cd1('0x8'),attributes,{'tableName':_0x2cd1('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf98f=['lodash','util','../../config/logger','api','moment','bluebird','./chatGroup.attributes','define','ChatGroup'];(function(_0x4de586,_0x183427){var _0x46baf5=function(_0x1157f0){while(--_0x1157f0){_0x4de586['push'](_0x4de586['shift']());}};_0x46baf5(++_0x183427);}(_0xf98f,0x1a7));var _0xff98=function(_0x787895,_0xd37a3b){_0x787895=_0x787895-0x0;var _0x4b1565=_0xf98f[_0x787895];return _0x4b1565;};'use strict';var _=require(_0xff98('0x0'));var util=require(_0xff98('0x1'));var logger=require(_0xff98('0x2'))(_0xff98('0x3'));var moment=require(_0xff98('0x4'));var BPromise=require(_0xff98('0x5'));var rp=require('request-promise');var attributes=require(_0xff98('0x6'));module['exports']=function(_0x2790f1,_0x2c0e84){return _0x2790f1[_0xff98('0x7')](_0xff98('0x8'),attributes,{'tableName':'chat_groups','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4c6e985..bc59df3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9be2=['moment','randomstring','../../config/utils','rpc','jayson/promise','client','http','socket.io-emitter','localhost','./chatGroup.socket','request','then','info','request\x20sent','ChatGroup,\x20%s,\x20%s,\x20%s','stringify','error','code','ChatGroup,\x20%s,\x20%s','message','catch','lodash','util'];(function(_0x1e6fd6,_0x1c3e3c){var _0x31fd85=function(_0xbf3e27){while(--_0xbf3e27){_0x1e6fd6['push'](_0x1e6fd6['shift']());}};_0x31fd85(++_0x1c3e3c);}(_0x9be2,0x140));var _0x29be=function(_0x37d8fe,_0x53e663){_0x37d8fe=_0x37d8fe-0x0;var _0x4b506b=_0x9be2[_0x37d8fe];return _0x4b506b;};'use strict';var _=require(_0x29be('0x0'));var util=require(_0x29be('0x1'));var moment=require(_0x29be('0x2'));var BPromise=require('bluebird');var rs=require(_0x29be('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x29be('0x4'));var logger=require('../../config/logger')(_0x29be('0x5'));var config=require('../../config/environment');var jayson=require(_0x29be('0x6'));var client=jayson[_0x29be('0x7')][_0x29be('0x8')]({'port':0x232a});var socket=require(_0x29be('0x9'))({'host':_0x29be('0xa'),'port':0x18eb});require(_0x29be('0xb'))['register'](socket);function respondWithRpcPromise(_0x1809fc,_0x1a9e84,_0x7fa349){return new BPromise(function(_0x59ee57,_0x4bf65b){return client[_0x29be('0xc')](_0x1809fc,_0x7fa349)[_0x29be('0xd')](function(_0x3fa88d){logger[_0x29be('0xe')]('ChatGroup,\x20%s,\x20%s',_0x1a9e84,_0x29be('0xf'));logger['debug'](_0x29be('0x10'),_0x1a9e84,_0x29be('0xf'),JSON[_0x29be('0x11')](_0x3fa88d));if(_0x3fa88d[_0x29be('0x12')]){if(_0x3fa88d[_0x29be('0x12')][_0x29be('0x13')]===0x1f4){logger[_0x29be('0x12')](_0x29be('0x14'),_0x1a9e84,_0x3fa88d[_0x29be('0x12')][_0x29be('0x15')]);return _0x4bf65b(_0x3fa88d['error'][_0x29be('0x15')]);}logger[_0x29be('0x12')](_0x29be('0x14'),_0x1a9e84,_0x3fa88d[_0x29be('0x12')][_0x29be('0x15')]);return _0x59ee57(_0x3fa88d[_0x29be('0x12')][_0x29be('0x15')]);}else{logger[_0x29be('0xe')](_0x29be('0x14'),_0x1a9e84,_0x29be('0xf'));_0x59ee57(_0x3fa88d['result'][_0x29be('0x15')]);}})[_0x29be('0x16')](function(_0x3b1cf1){logger[_0x29be('0x12')](_0x29be('0x14'),_0x1a9e84,_0x3b1cf1);_0x4bf65b(_0x3b1cf1);});});}
\ No newline at end of file
+var _0x56e8=['../../config/environment','jayson/promise','http','socket.io-emitter','./chatGroup.socket','register','request','then','info','ChatGroup,\x20%s,\x20%s','debug','ChatGroup,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','lodash','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x377751,_0x36ece3){var _0x562a61=function(_0x22df56){while(--_0x22df56){_0x377751['push'](_0x377751['shift']());}};_0x562a61(++_0x36ece3);}(_0x56e8,0xf3));var _0x856e=function(_0x32d004,_0x17e605){_0x32d004=_0x32d004-0x0;var _0x787d39=_0x56e8[_0x32d004];return _0x787d39;};'use strict';var _=require(_0x856e('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x856e('0x1'));var rs=require(_0x856e('0x2'));var fs=require('fs');var db=require(_0x856e('0x3'))['db'];var utils=require(_0x856e('0x4'));var logger=require(_0x856e('0x5'))(_0x856e('0x6'));var config=require(_0x856e('0x7'));var jayson=require(_0x856e('0x8'));var client=jayson['client'][_0x856e('0x9')]({'port':0x232a});var socket=require(_0x856e('0xa'))({'host':'localhost','port':0x18eb});require(_0x856e('0xb'))[_0x856e('0xc')](socket);function respondWithRpcPromise(_0x3c1284,_0x2228ca,_0x41c3e2){return new BPromise(function(_0x47ea81,_0xeaf2fd){return client[_0x856e('0xd')](_0x3c1284,_0x41c3e2)[_0x856e('0xe')](function(_0xd99118){logger[_0x856e('0xf')](_0x856e('0x10'),_0x2228ca,'request\x20sent');logger[_0x856e('0x11')](_0x856e('0x12'),_0x2228ca,_0x856e('0x13'),JSON[_0x856e('0x14')](_0xd99118));if(_0xd99118['error']){if(_0xd99118[_0x856e('0x15')][_0x856e('0x16')]===0x1f4){logger[_0x856e('0x15')](_0x856e('0x10'),_0x2228ca,_0xd99118[_0x856e('0x15')][_0x856e('0x17')]);return _0xeaf2fd(_0xd99118[_0x856e('0x15')][_0x856e('0x17')]);}logger[_0x856e('0x15')]('ChatGroup,\x20%s,\x20%s',_0x2228ca,_0xd99118[_0x856e('0x15')][_0x856e('0x17')]);return _0x47ea81(_0xd99118[_0x856e('0x15')][_0x856e('0x17')]);}else{logger[_0x856e('0xf')]('ChatGroup,\x20%s,\x20%s',_0x2228ca,_0x856e('0x13'));_0x47ea81(_0xd99118['result'][_0x856e('0x17')]);}})[_0x856e('0x18')](function(_0x1b9f76){logger[_0x856e('0x15')](_0x856e('0x10'),_0x2228ca,_0x1b9f76);_0xeaf2fd(_0x1b9f76);});});}
\ No newline at end of file
index 4d898f2..e385d7a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb48d=['./chatGroup.events','remove','emit','register'];(function(_0x1ec65c,_0x354923){var _0x5249c2=function(_0x451341){while(--_0x451341){_0x1ec65c['push'](_0x1ec65c['shift']());}};_0x5249c2(++_0x354923);}(_0xb48d,0x194));var _0xdb48=function(_0x9fd887,_0x47f76c){_0x9fd887=_0x9fd887-0x0;var _0x1a54ab=_0xb48d[_0x9fd887];return _0x1a54ab;};'use strict';var ChatGroupEvents=require(_0xdb48('0x0'));var events=['save',_0xdb48('0x1'),'update'];function createListener(_0x3e0f84,_0xb19310){return function(_0x407f6e){_0xb19310[_0xdb48('0x2')](_0x3e0f84,_0x407f6e);};}function removeListener(_0x56dd38,_0x26783c){return function(){ChatGroupEvents['removeListener'](_0x56dd38,_0x26783c);};}exports[_0xdb48('0x3')]=function(_0x77f099){for(var _0x3c547e=0x0,_0x5db721=events['length'];_0x3c547e<_0x5db721;_0x3c547e++){var _0x251ce5=events[_0x3c547e];var _0x173933=createListener('chatGroup:'+_0x251ce5,_0x77f099);ChatGroupEvents['on'](_0x251ce5,_0x173933);}};
\ No newline at end of file
+var _0xf4dd=['./chatGroup.events','save','remove','update','removeListener','chatGroup:'];(function(_0x2b20c7,_0x278d49){var _0x3a6e02=function(_0x485469){while(--_0x485469){_0x2b20c7['push'](_0x2b20c7['shift']());}};_0x3a6e02(++_0x278d49);}(_0xf4dd,0xb4));var _0xdf4d=function(_0x10e164,_0x246406){_0x10e164=_0x10e164-0x0;var _0x3a89f0=_0xf4dd[_0x10e164];return _0x3a89f0;};'use strict';var ChatGroupEvents=require(_0xdf4d('0x0'));var events=[_0xdf4d('0x1'),_0xdf4d('0x2'),_0xdf4d('0x3')];function createListener(_0x9ef2ad,_0x3f6a00){return function(_0x309103){_0x3f6a00['emit'](_0x9ef2ad,_0x309103);};}function removeListener(_0x1974da,_0x539191){return function(){ChatGroupEvents[_0xdf4d('0x4')](_0x1974da,_0x539191);};}exports['register']=function(_0x41d806){for(var _0x50ebf6=0x0,_0x4334b0=events['length'];_0x50ebf6<_0x4334b0;_0x50ebf6++){var _0x64c256=events[_0x50ebf6];var _0x4a3e29=createListener(_0xdf4d('0x5')+_0x64c256,_0x41d806);ChatGroupEvents['on'](_0x64c256,_0x4a3e29);}};
\ No newline at end of file
index 5187763..2f95467 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd75c=['../../components/interaction/service','../../config/environment','get','index','isAuthenticated','/:id','show','/:id/unread','/:id/members','/:id/messages','getMessages','post','create','addMessage','put','update','destroy','removeMembers','exports','util','path','Router','../../components/auth/service'];(function(_0x13e63a,_0x5e8d24){var _0x1b4f37=function(_0x3d8386){while(--_0x3d8386){_0x13e63a['push'](_0x13e63a['shift']());}};_0x1b4f37(++_0x5e8d24);}(_0xd75c,0xb4));var _0xcd75=function(_0x544da7,_0x5d5ac1){_0x544da7=_0x544da7-0x0;var _0x163310=_0xd75c[_0x544da7];return _0x163310;};'use strict';var multer=require('multer');var util=require(_0xcd75('0x0'));var path=require(_0xcd75('0x1'));var express=require('express');var router=express[_0xcd75('0x2')]();var auth=require(_0xcd75('0x3'));var interaction=require(_0xcd75('0x4'));var config=require(_0xcd75('0x5'));var controller=require('./chatGroup.controller');router[_0xcd75('0x6')]('/',auth['isAuthenticated'](),controller[_0xcd75('0x7')]);router[_0xcd75('0x6')]('/describe',auth[_0xcd75('0x8')](),controller['describe']);router[_0xcd75('0x6')](_0xcd75('0x9'),auth[_0xcd75('0x8')](),controller[_0xcd75('0xa')]);router[_0xcd75('0x6')](_0xcd75('0xb'),auth['isAuthenticated'](),controller['getUnread']);router[_0xcd75('0x6')](_0xcd75('0xc'),auth[_0xcd75('0x8')](),controller['getMembers']);router[_0xcd75('0x6')](_0xcd75('0xd'),auth[_0xcd75('0x8')](),controller[_0xcd75('0xe')]);router[_0xcd75('0xf')]('/',auth[_0xcd75('0x8')](),controller[_0xcd75('0x10')]);router[_0xcd75('0xf')](_0xcd75('0xc'),auth['isAuthenticated'](),controller['addMembers']);router[_0xcd75('0xf')](_0xcd75('0xd'),auth['isAuthenticated'](),controller[_0xcd75('0x11')]);router[_0xcd75('0x12')](_0xcd75('0x9'),auth[_0xcd75('0x8')](),controller[_0xcd75('0x13')]);router['delete']('/:id',auth[_0xcd75('0x8')](),controller[_0xcd75('0x14')]);router['delete'](_0xcd75('0xc'),auth[_0xcd75('0x8')](),controller[_0xcd75('0x15')]);module[_0xcd75('0x16')]=router;
\ No newline at end of file
+var _0x8e70=['destroy','exports','util','path','express','../../components/auth/service','isAuthenticated','index','get','describe','/:id','show','/:id/unread','/:id/members','getMembers','/:id/messages','getMessages','create','post','addMembers','addMessage','put','delete'];(function(_0x11d7ae,_0x3e75cc){var _0xf3d528=function(_0x3816ac){while(--_0x3816ac){_0x11d7ae['push'](_0x11d7ae['shift']());}};_0xf3d528(++_0x3e75cc);}(_0x8e70,0x172));var _0x08e7=function(_0x1da527,_0x2dc953){_0x1da527=_0x1da527-0x0;var _0x40fc7c=_0x8e70[_0x1da527];return _0x40fc7c;};'use strict';var multer=require('multer');var util=require(_0x08e7('0x0'));var path=require(_0x08e7('0x1'));var express=require(_0x08e7('0x2'));var router=express['Router']();var auth=require(_0x08e7('0x3'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./chatGroup.controller');router['get']('/',auth[_0x08e7('0x4')](),controller[_0x08e7('0x5')]);router[_0x08e7('0x6')]('/describe',auth[_0x08e7('0x4')](),controller[_0x08e7('0x7')]);router[_0x08e7('0x6')](_0x08e7('0x8'),auth[_0x08e7('0x4')](),controller[_0x08e7('0x9')]);router['get'](_0x08e7('0xa'),auth[_0x08e7('0x4')](),controller['getUnread']);router['get'](_0x08e7('0xb'),auth[_0x08e7('0x4')](),controller[_0x08e7('0xc')]);router['get'](_0x08e7('0xd'),auth[_0x08e7('0x4')](),controller[_0x08e7('0xe')]);router['post']('/',auth['isAuthenticated'](),controller[_0x08e7('0xf')]);router[_0x08e7('0x10')]('/:id/members',auth[_0x08e7('0x4')](),controller[_0x08e7('0x11')]);router[_0x08e7('0x10')]('/:id/messages',auth[_0x08e7('0x4')](),controller[_0x08e7('0x12')]);router[_0x08e7('0x13')](_0x08e7('0x8'),auth[_0x08e7('0x4')](),controller['update']);router[_0x08e7('0x14')](_0x08e7('0x8'),auth[_0x08e7('0x4')](),controller[_0x08e7('0x15')]);router[_0x08e7('0x14')](_0x08e7('0xb'),auth['isAuthenticated'](),controller['removeMembers']);module[_0x08e7('0x16')]=router;
\ No newline at end of file
index 786ae89..eaa8849 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6324=['long','ENUM','out','sequelize','exports','BOOLEAN','INTEGER','star','TEXT','DATE','STRING'];(function(_0x71f46e,_0x15da68){var _0x1a0031=function(_0x21df88){while(--_0x21df88){_0x71f46e['push'](_0x71f46e['shift']());}};_0x1a0031(++_0x15da68);}(_0x6324,0x142));var _0x4632=function(_0x15fab0,_0x416c7d){_0x15fab0=_0x15fab0-0x0;var _0x1b41a8=_0x6324[_0x15fab0];return _0x1b41a8;};'use strict';var Sequelize=require(_0x4632('0x0'));module[_0x4632('0x1')]={'closed':{'type':Sequelize[_0x4632('0x2')],'defaultValue':![]},'ratingValue':{'type':Sequelize[_0x4632('0x3')]},'ratingType':{'type':Sequelize['ENUM'](_0x4632('0x4'),'thumb'),'defaultValue':_0x4632('0x4')},'ratingMessage':{'type':Sequelize['TEXT']},'pathTranscript':{'type':Sequelize[_0x4632('0x5')]},'mailTranscript':{'type':Sequelize['STRING'],'validate':{'isEmail':!![]}},'closedAt':{'type':Sequelize[_0x4632('0x6')]},'disposition':{'type':Sequelize[_0x4632('0x7')]},'note':{'type':Sequelize[_0x4632('0x7')]},'browserName':{'type':Sequelize[_0x4632('0x7')]},'browserVersion':{'type':Sequelize['STRING']},'osName':{'type':Sequelize[_0x4632('0x7')]},'osVersion':{'type':Sequelize[_0x4632('0x7')]},'deviceModel':{'type':Sequelize[_0x4632('0x7')]},'deviceVendor':{'type':Sequelize['STRING']},'deviceType':{'type':Sequelize[_0x4632('0x7')]},'referer':{'type':Sequelize[_0x4632('0x7')]},'customerIp':{'type':Sequelize['STRING']},'formData':{'type':Sequelize['TEXT'](_0x4632('0x8'))},'read1stAt':{'type':Sequelize[_0x4632('0x6')]},'lastMsgAt':{'type':Sequelize[_0x4632('0x6')]},'lastMsgDirection':{'type':Sequelize[_0x4632('0x9')]('in',_0x4632('0xa')),'defaultValue':'in','allowNull':![]},'closeReason':{'type':Sequelize[_0x4632('0x7')]}};
\ No newline at end of file
+var _0xa571=['exports','BOOLEAN','INTEGER','star','thumb','TEXT','DATE','STRING','long','ENUM','out','sequelize'];(function(_0x56d6a6,_0x357d7c){var _0x247b30=function(_0x41c343){while(--_0x41c343){_0x56d6a6['push'](_0x56d6a6['shift']());}};_0x247b30(++_0x357d7c);}(_0xa571,0x107));var _0x1a57=function(_0x216edc,_0x57df05){_0x216edc=_0x216edc-0x0;var _0x745d3e=_0xa571[_0x216edc];return _0x745d3e;};'use strict';var Sequelize=require(_0x1a57('0x0'));module[_0x1a57('0x1')]={'closed':{'type':Sequelize[_0x1a57('0x2')],'defaultValue':![]},'ratingValue':{'type':Sequelize[_0x1a57('0x3')]},'ratingType':{'type':Sequelize['ENUM'](_0x1a57('0x4'),_0x1a57('0x5')),'defaultValue':'star'},'ratingMessage':{'type':Sequelize['TEXT']},'pathTranscript':{'type':Sequelize[_0x1a57('0x6')]},'mailTranscript':{'type':Sequelize['STRING'],'validate':{'isEmail':!![]}},'closedAt':{'type':Sequelize[_0x1a57('0x7')]},'disposition':{'type':Sequelize[_0x1a57('0x8')]},'note':{'type':Sequelize[_0x1a57('0x8')]},'browserName':{'type':Sequelize[_0x1a57('0x8')]},'browserVersion':{'type':Sequelize[_0x1a57('0x8')]},'osName':{'type':Sequelize[_0x1a57('0x8')]},'osVersion':{'type':Sequelize['STRING']},'deviceModel':{'type':Sequelize[_0x1a57('0x8')]},'deviceVendor':{'type':Sequelize[_0x1a57('0x8')]},'deviceType':{'type':Sequelize[_0x1a57('0x8')]},'referer':{'type':Sequelize['STRING']},'customerIp':{'type':Sequelize[_0x1a57('0x8')]},'formData':{'type':Sequelize[_0x1a57('0x6')](_0x1a57('0x9'))},'read1stAt':{'type':Sequelize[_0x1a57('0x7')]},'lastMsgAt':{'type':Sequelize[_0x1a57('0x7')]},'lastMsgDirection':{'type':Sequelize[_0x1a57('0xa')]('in',_0x1a57('0xb')),'defaultValue':'in','allowNull':![]},'closeReason':{'type':Sequelize[_0x1a57('0x8')]}};
\ No newline at end of file
index 83e90ba..434d110 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7182=['now','ChatWebsiteId','CmContact','ContactId','%s%d','agentAlias','System','agentIdentifier','website_alias','agent_alias','alias','agent_fullname','[%s]\x20%s:\x20%s\x0a','secret','appendFileSync','MailAccount','Smtp','service','host','port','secure','authentication','user','pass','SendMail','\x22%s\x22\x20<%s>','email','Mail\x20Transcript','addMessage','omit','ids','getMessages','hasOwnProperty','pick','ChatInteractionId','map','$gte','split','YYYY-MM-DD\x20HH:mm:ss','getMyMessages','includeAgent','addTags','setTags','emit','chatInteractionTags:save','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./chatInteraction.socket','jayson/promise','http','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','info','result','catch','sendStatus','end','status','json','count','offset','limit','set','apply','save','update','then','destroy','stack','name','index','ChatInteraction','rawAttributes','model','dateStart','query','dateEnd','keys','attributes','fields','nolimit','order','sort','add','day','filter','where','merge','options','include','push','Tag','Tags','read','Messages','createdAt','distinct','includeAll','User','Users','fullname','Contact','Owner','internal','ChatWebsite','Account','key','ChatMessage','direction','color','tag','ThroughTags','findAll','rows','show','params','filters','intersection','length','find','body','describe','customUpdate','abandon','entity\x20not\x20found','UserId','ValidationError','Interaction\x20already\x20assigned','closed','closedAt','disposition','file','originalname','basename','type','mimetype','Attachment','create','attachmentDownload','findOne','Unauthorized','attachId','root','server/files/attachments/','close','mailTranscript','join','format','transcript-%s.txt'];(function(_0x275374,_0x1cddb9){var _0x1b2839=function(_0x33fb19){while(--_0x33fb19){_0x275374['push'](_0x275374['shift']());}};_0x1b2839(++_0x1cddb9);}(_0x7182,0x187));var _0x2718=function(_0x1371ad,_0x225e19){_0x1371ad=_0x1371ad-0x0;var _0x114a20=_0x7182[_0x1371ad];return _0x114a20;};'use strict';var jsonpatch=require(_0x2718('0x0'));var rp=require(_0x2718('0x1'));var moment=require(_0x2718('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x2718('0x3'));var path=require('path');var sox=require(_0x2718('0x4'));var csv=require(_0x2718('0x5'));var ejs=require(_0x2718('0x6'));var fs=require('fs');var _=require(_0x2718('0x7'));var squel=require('squel');var crypto=require(_0x2718('0x8'));var jsforce=require(_0x2718('0x9'));var deskjs=require(_0x2718('0xa'));var toCsv=require(_0x2718('0x5'));var querystring=require(_0x2718('0xb'));var Papa=require(_0x2718('0xc'));var qs=require(_0x2718('0xd'));var logger=require(_0x2718('0xe'))(_0x2718('0xf'));var utils=require(_0x2718('0x10'));var config=require(_0x2718('0x11'));var db=require(_0x2718('0x12'))['db'];var socket=require(_0x2718('0x13'))({'host':_0x2718('0x14'),'port':0x18eb});require(_0x2718('0x15'))['register'](socket);var jayson=require(_0x2718('0x16'));var client=jayson['client']['http']({'port':0x232b});var client9004=jayson['client'][_0x2718('0x17')]({'port':0x232c});function respondWithRpcPromise(_0x5b394a,_0x520706,_0x3c6e2e,_0x1f24be){return new BPromise(function(_0x4fe0e9,_0x4a9e32){var _0x442c10=_0x1f24be||client;return _0x442c10['request'](_0x5b394a,_0x3c6e2e)['then'](function(_0x1161d3){logger['info'](_0x2718('0x18'),_0x520706,_0x2718('0x19'));logger[_0x2718('0x1a')]('ChatInteraction,\x20%s,\x20%s,\x20%s',_0x520706,'request\x20sent',JSON[_0x2718('0x1b')](_0x1161d3));if(_0x1161d3[_0x2718('0x1c')]){if(_0x1161d3[_0x2718('0x1c')][_0x2718('0x1d')]===0x1f4){logger[_0x2718('0x1c')](_0x2718('0x18'),_0x520706,_0x1161d3['error'][_0x2718('0x1e')]);return _0x4a9e32(_0x1161d3['error'][_0x2718('0x1e')]);}logger[_0x2718('0x1c')](_0x2718('0x18'),_0x520706,_0x1161d3[_0x2718('0x1c')][_0x2718('0x1e')]);return _0x4fe0e9(_0x1161d3[_0x2718('0x1c')][_0x2718('0x1e')]);}else{logger[_0x2718('0x1f')](_0x2718('0x18'),_0x520706,_0x2718('0x19'));_0x4fe0e9(_0x1161d3[_0x2718('0x20')][_0x2718('0x1e')]);}})[_0x2718('0x21')](function(_0x5ebae0){logger[_0x2718('0x1c')](_0x2718('0x18'),_0x520706,_0x5ebae0);_0x4a9e32(_0x5ebae0);});});}function respondWithStatusCode(_0x51356f,_0x3ecde5){_0x3ecde5=_0x3ecde5||0xcc;return function(_0x4db4b5){if(_0x4db4b5){return _0x51356f[_0x2718('0x22')](_0x3ecde5);}return _0x51356f['status'](_0x3ecde5)[_0x2718('0x23')]();};}function respondWithResult(_0x4d0387,_0x5eedd9){_0x5eedd9=_0x5eedd9||0xc8;return function(_0x2d2854){if(_0x2d2854){return _0x4d0387[_0x2718('0x24')](_0x5eedd9)[_0x2718('0x25')](_0x2d2854);}};}function respondWithFilteredResult(_0x5d0e75,_0x4c947e){return function(_0x48abdd){if(_0x48abdd){var _0x563d73=_0x48abdd[_0x2718('0x26')],_0x2c15c0=_0x4c947e[_0x2718('0x27')],_0x5e8ee2=_0x4c947e[_0x2718('0x27')]+_0x4c947e[_0x2718('0x28')],_0x4f541c;if(_0x5e8ee2>=_0x563d73){_0x5e8ee2=_0x563d73;_0x4f541c=0xc8;}else{_0x4f541c=0xce;}_0x5d0e75[_0x2718('0x24')](_0x4f541c);return _0x5d0e75[_0x2718('0x29')]('Content-Range',_0x2c15c0+'-'+_0x5e8ee2+'/'+_0x563d73)[_0x2718('0x25')](_0x48abdd);}return null;};}function patchUpdates(_0x173db1){return function(_0x4f3736){try{jsonpatch[_0x2718('0x2a')](_0x4f3736,_0x173db1,!![]);}catch(_0x59aa3e){return BPromise['reject'](_0x59aa3e);}return _0x4f3736[_0x2718('0x2b')]();};}function saveUpdates(_0x3061ae,_0x779f41){return function(_0x20a302){if(_0x20a302){return _0x20a302[_0x2718('0x2c')](_0x3061ae)[_0x2718('0x2d')](function(_0x37f30e){return _0x37f30e;});}return null;};}function removeEntity(_0x5540d3,_0x3c1d10){return function(_0x11c1d4){if(_0x11c1d4){return _0x11c1d4[_0x2718('0x2e')]()[_0x2718('0x2d')](function(){_0x5540d3[_0x2718('0x24')](0xcc)[_0x2718('0x23')]();});}};}function handleEntityNotFound(_0x496d1d,_0x39e9d5){return function(_0x37f1d8){if(!_0x37f1d8){_0x496d1d[_0x2718('0x22')](0x194);}return _0x37f1d8;};}function handleError(_0x2968e2,_0x16433d){_0x16433d=_0x16433d||0x1f4;return function(_0x55b18b){logger[_0x2718('0x1c')](_0x55b18b[_0x2718('0x2f')]);if(_0x55b18b['name']){delete _0x55b18b[_0x2718('0x30')];}_0x2968e2['status'](_0x16433d)['send'](_0x55b18b);};}exports[_0x2718('0x31')]=function(_0x5052f0,_0x1fbd52){var _0x50e1dc={},_0x4fb8b4={},_0x4c759d={'count':0x0,'rows':[]};var _0x397e57=db[_0x2718('0x32')][_0x2718('0x33')];_0x4fb8b4[_0x2718('0x34')]=_['keys'](_0x397e57);var _0x48b3b0={'dateStart':_0x5052f0['query'][_0x2718('0x35')],'dateEnd':_0x5052f0[_0x2718('0x36')]['dateEnd']};delete _0x5052f0[_0x2718('0x36')][_0x2718('0x35')];delete _0x5052f0[_0x2718('0x36')][_0x2718('0x37')];_0x4fb8b4['query']=_[_0x2718('0x38')](_0x5052f0[_0x2718('0x36')]);_0x4fb8b4['filters']=_['intersection'](_0x4fb8b4[_0x2718('0x34')],_0x4fb8b4[_0x2718('0x36')]);_0x50e1dc[_0x2718('0x39')]=_['intersection'](_0x4fb8b4[_0x2718('0x34')],qs[_0x2718('0x3a')](_0x5052f0[_0x2718('0x36')][_0x2718('0x3a')]));_0x50e1dc[_0x2718('0x39')]=_0x50e1dc['attributes']['length']?_0x50e1dc[_0x2718('0x39')]:_0x4fb8b4['model'];if(!_0x5052f0[_0x2718('0x36')]['hasOwnProperty'](_0x2718('0x3b'))){_0x50e1dc[_0x2718('0x28')]=qs[_0x2718('0x28')](_0x5052f0[_0x2718('0x36')][_0x2718('0x28')]);_0x50e1dc[_0x2718('0x27')]=qs[_0x2718('0x27')](_0x5052f0['query'][_0x2718('0x27')]);}_0x50e1dc[_0x2718('0x3c')]=qs[_0x2718('0x3d')](_0x5052f0[_0x2718('0x36')][_0x2718('0x3d')]);_0x50e1dc['where']=qs['filters'](_['pick'](_0x5052f0['query'],_0x4fb8b4['filters']));if(_0x48b3b0[_0x2718('0x35')]){if(_0x48b3b0[_0x2718('0x37')]){_0x48b3b0[_0x2718('0x37')]=moment(_0x48b3b0[_0x2718('0x37')])[_0x2718('0x3e')](0x1,_0x2718('0x3f'));}else{_0x48b3b0['dateEnd']=moment(_0x48b3b0[_0x2718('0x35')])[_0x2718('0x3e')](0x1,'day');}_['merge'](_0x50e1dc['where'],{'createdAt':{'$gte':_0x48b3b0[_0x2718('0x35')],'$lte':_0x48b3b0[_0x2718('0x37')]}});}if(_0x5052f0[_0x2718('0x36')][_0x2718('0x40')]){_0x50e1dc[_0x2718('0x41')]=_[_0x2718('0x42')](_0x50e1dc['where'],{'$or':_['map'](_0x50e1dc[_0x2718('0x39')],function(_0x40e352){var _0x487fe0={};_0x487fe0[_0x40e352]={'$like':'%'+_0x5052f0[_0x2718('0x36')][_0x2718('0x40')]+'%'};return _0x487fe0;})});}_0x50e1dc=_[_0x2718('0x42')]({},_0x50e1dc,_0x5052f0[_0x2718('0x43')]);var _0x138b0f={'where':_0x50e1dc[_0x2718('0x41')]};_0x138b0f['include']=[];if(_0x5052f0['query']['tag']){_0x138b0f[_0x2718('0x44')][_0x2718('0x45')]({'model':db[_0x2718('0x46')],'as':_0x2718('0x47'),'attributes':['id'],'where':{'id':_0x5052f0[_0x2718('0x36')]['tag']},'required':!![]});_0x138b0f['distinct']=!![];}if(_0x5052f0[_0x2718('0x36')][_0x2718('0x48')]){_0x138b0f['include']['push']({'model':db['ChatMessage'],'as':_0x2718('0x49'),'attributes':['id','direction',_0x2718('0x4a'),_0x2718('0x48')],'where':{'direction':'in','read':_0x5052f0['query'][_0x2718('0x48')]||![]},'required':!![]});_0x138b0f[_0x2718('0x4b')]=!![];}return db[_0x2718('0x32')][_0x2718('0x26')](_0x138b0f)[_0x2718('0x2d')](function(_0x494bb4){_0x4c759d['count']=_0x494bb4;if(_0x5052f0[_0x2718('0x36')][_0x2718('0x4c')]){_0x50e1dc[_0x2718('0x44')]=[{'model':db[_0x2718('0x4d')],'as':_0x2718('0x4e'),'required':![],'attributes':['id',_0x2718('0x30'),_0x2718('0x4f')]},{'model':db['CmContact'],'as':_0x2718('0x50'),'required':![]},{'model':db['User'],'as':_0x2718('0x51'),'attributes':['name',_0x2718('0x4f'),_0x2718('0x52')],'required':![]},{'model':db[_0x2718('0x53')],'as':_0x2718('0x54'),'attributes':[_0x2718('0x30'),_0x2718('0x55')],'required':![]},{'model':db[_0x2718('0x56')],'as':'Messages','attributes':['id',_0x2718('0x57'),_0x2718('0x4a'),_0x2718('0x48')],'where':{'direction':'in','read':_0x5052f0[_0x2718('0x36')][_0x2718('0x48')]||![]},'required':_0x5052f0[_0x2718('0x36')][_0x2718('0x48')]||![]},{'model':db[_0x2718('0x46')],'as':'Tags','attributes':['id','name',_0x2718('0x58')],'required':_0x5052f0[_0x2718('0x36')][_0x2718('0x59')]?!![]:![]},{'model':db[_0x2718('0x46')],'as':_0x2718('0x5a'),'attributes':['id',_0x2718('0x30'),_0x2718('0x58')],'through':_0x5052f0[_0x2718('0x36')][_0x2718('0x59')]?{'attributes':[],'where':{'TagId':_0x5052f0['query']['tag']||undefined}}:{},'required':_0x5052f0[_0x2718('0x36')][_0x2718('0x59')]?!![]:![]}];}return db[_0x2718('0x32')][_0x2718('0x5b')](_0x50e1dc);})[_0x2718('0x2d')](function(_0x37148c){_0x4c759d[_0x2718('0x5c')]=_0x37148c;return _0x4c759d;})[_0x2718('0x2d')](respondWithFilteredResult(_0x1fbd52,_0x50e1dc))[_0x2718('0x21')](handleError(_0x1fbd52,null));};exports[_0x2718('0x5d')]=function(_0x31b66d,_0x6b6d8d){var _0x4f1dc5={'raw':![],'where':{'id':_0x31b66d[_0x2718('0x5e')]['id']}},_0x164271={};_0x164271[_0x2718('0x34')]=_[_0x2718('0x38')](db[_0x2718('0x32')]['rawAttributes']);_0x164271[_0x2718('0x36')]=_[_0x2718('0x38')](_0x31b66d[_0x2718('0x36')]);_0x164271[_0x2718('0x5f')]=_[_0x2718('0x60')](_0x164271['model'],_0x164271[_0x2718('0x36')]);_0x4f1dc5[_0x2718('0x39')]=_[_0x2718('0x60')](_0x164271[_0x2718('0x34')],qs[_0x2718('0x3a')](_0x31b66d['query'][_0x2718('0x3a')]));_0x4f1dc5[_0x2718('0x39')]=_0x4f1dc5[_0x2718('0x39')][_0x2718('0x61')]?_0x4f1dc5['attributes']:_0x164271[_0x2718('0x34')];if(_0x31b66d[_0x2718('0x36')][_0x2718('0x4c')]){_0x4f1dc5['include']=[{'all':!![]}];}_0x4f1dc5=_[_0x2718('0x42')]({},_0x4f1dc5,_0x31b66d[_0x2718('0x43')]);return db[_0x2718('0x32')][_0x2718('0x62')](_0x4f1dc5)[_0x2718('0x2d')](handleEntityNotFound(_0x6b6d8d,null))['then'](respondWithResult(_0x6b6d8d,null))[_0x2718('0x21')](handleError(_0x6b6d8d,null));};exports['create']=function(_0x59956c,_0x33f710){return db[_0x2718('0x32')]['create'](_0x59956c[_0x2718('0x63')],{})[_0x2718('0x2d')](respondWithResult(_0x33f710,0xc9))['catch'](handleError(_0x33f710,null));};exports[_0x2718('0x2c')]=function(_0x4dc4ad,_0x3daa3f){if(_0x4dc4ad[_0x2718('0x63')]['id']){delete _0x4dc4ad[_0x2718('0x63')]['id'];}return db[_0x2718('0x32')][_0x2718('0x62')]({'where':{'id':_0x4dc4ad['params']['id']}})['then'](handleEntityNotFound(_0x3daa3f,null))['then'](saveUpdates(_0x4dc4ad[_0x2718('0x63')],null))[_0x2718('0x2d')](respondWithResult(_0x3daa3f,null))['catch'](handleError(_0x3daa3f,null));};exports[_0x2718('0x2e')]=function(_0x473830,_0x2153c4){return db[_0x2718('0x32')][_0x2718('0x62')]({'where':{'id':_0x473830[_0x2718('0x5e')]['id']}})[_0x2718('0x2d')](handleEntityNotFound(_0x2153c4,null))[_0x2718('0x2d')](removeEntity(_0x2153c4,null))[_0x2718('0x21')](handleError(_0x2153c4,null));};exports[_0x2718('0x64')]=function(_0x22b157,_0x1a860f){return db['ChatInteraction']['describe']()[_0x2718('0x2d')](respondWithResult(_0x1a860f,null))[_0x2718('0x21')](handleError(_0x1a860f,null));};exports[_0x2718('0x65')]=function(_0x5ec581,_0x1b26a0){if(_0x5ec581['body']['id']){delete _0x5ec581['body']['id'];}return db['ChatInteraction']['find']({'where':{'id':_0x5ec581[_0x2718('0x5e')]['id']}})[_0x2718('0x2d')](handleEntityNotFound(_0x1b26a0,null))[_0x2718('0x2d')](saveUpdates(_0x5ec581['body'],null))[_0x2718('0x2d')](respondWithResult(_0x1b26a0,null))['catch'](handleError(_0x1b26a0,null));};exports[_0x2718('0x66')]=function(_0x3f5501,_0x507b3e,_0x2ad73c){if(_0x3f5501[_0x2718('0x63')]['id']){delete _0x3f5501[_0x2718('0x63')]['id'];}return db[_0x2718('0x32')][_0x2718('0x62')]({'where':{'id':_0x3f5501[_0x2718('0x5e')]['id']}})['then'](function(_0x54511f){if(!_0x54511f){logger[_0x2718('0x1c')]('abandonInteraction,\x20%s,\x20%s,\x20%s',_0x2718('0x66'),0x194,_0x2718('0x67'));_0x507b3e[_0x2718('0x22')](0x194);}else{if(_0x54511f[_0x2718('0x68')]){throw new db['Sequelize'][(_0x2718('0x69'))](_0x2718('0x6a'));}}return _0x54511f;})['then'](function(_0x4b3f6d){if(_0x4b3f6d){return _0x4b3f6d['update']({'closed':_0x3f5501[_0x2718('0x63')][_0x2718('0x6b')],'closedAt':_0x3f5501['body'][_0x2718('0x6c')],'disposition':_0x3f5501[_0x2718('0x63')][_0x2718('0x6d')]})['then'](function(_0x2ab69c){return _0x2ab69c;});}})[_0x2718('0x2d')](function(_0x40a849){return respondWithRpcPromise('AbandonInteraction',_0x2718('0x66'),_0x3f5501['body'],client9004);})['then'](respondWithResult(_0x507b3e,null))['catch'](handleError(_0x507b3e,null));};exports['attachmentUpload']=function(_0x271744,_0x5a24a8,_0xf0c8ad){_0x271744[_0x2718('0x63')]['name']=_0x271744[_0x2718('0x6e')][_0x2718('0x6f')];_0x271744[_0x2718('0x63')][_0x2718('0x70')]=_0x271744['file']['filename'];_0x271744[_0x2718('0x63')][_0x2718('0x71')]=_0x271744[_0x2718('0x6e')][_0x2718('0x72')];return db[_0x2718('0x73')][_0x2718('0x74')](_0x271744['body'])[_0x2718('0x2d')](respondWithResult(_0x5a24a8,0xc9))[_0x2718('0x21')](handleError(_0x5a24a8,null));};exports[_0x2718('0x75')]=function(_0x362764,_0x3f19f9,_0x445b9b){return db[_0x2718('0x32')][_0x2718('0x76')]({'where':{'id':_0x362764[_0x2718('0x5e')]['id']},'raw':!![]})[_0x2718('0x2d')](handleEntityNotFound(_0x3f19f9,null))[_0x2718('0x2d')](function(_0x20fc34){if(_0x20fc34){if(_0x20fc34[_0x2718('0x6b')]){return _0x3f19f9['status'](0x193)[_0x2718('0x25')]({'status':0x193,'message':_0x2718('0x77')});}return db[_0x2718('0x73')]['findOne']({'where':{'id':_0x362764[_0x2718('0x36')][_0x2718('0x78')]},'raw':!![]})[_0x2718('0x2d')](handleEntityNotFound(_0x3f19f9,null));}})[_0x2718('0x2d')](function(_0x340184){if(_0x340184){return _0x3f19f9['download'](path['join'](config[_0x2718('0x79')],_0x2718('0x7a'),_0x340184[_0x2718('0x70')]));}})[_0x2718('0x21')](handleError(_0x3f19f9,null));};exports[_0x2718('0x7b')]=function(_0x4d01c7,_0x46ecc3){var _0x13d9a8=null;var _0x4daafb=null;var _0x3e45f6=null;var _0x56ab21=null;if(_0x4d01c7[_0x2718('0x63')]['id']){delete _0x4d01c7[_0x2718('0x63')]['id'];}if(_0x4d01c7[_0x2718('0x63')][_0x2718('0x7c')]){_0x56ab21=path[_0x2718('0x7d')](config[_0x2718('0x79')],'server/files/chat/upload/',util[_0x2718('0x7e')](_0x2718('0x7f'),Date[_0x2718('0x80')]()));_0x4d01c7[_0x2718('0x63')]['pathTranscript']=_0x56ab21;}return db[_0x2718('0x32')][_0x2718('0x62')]({'where':{'id':_0x4d01c7[_0x2718('0x5e')]['id']},'include':[{'model':db[_0x2718('0x56')],'as':'Messages','include':[{'model':db['User'],'as':_0x2718('0x4d')}]}]})[_0x2718('0x2d')](handleEntityNotFound(_0x46ecc3,null))[_0x2718('0x2d')](saveUpdates(_0x4d01c7[_0x2718('0x63')],null))[_0x2718('0x2d')](function(_0x3f8024){if(_0x3f8024){_0x13d9a8=_0x3f8024;return db[_0x2718('0x53')][_0x2718('0x62')]({'where':{'id':_0x13d9a8[_0x2718('0x81')]}});}})['then'](function(_0x21b276){if(_0x21b276){_0x3e45f6=_0x21b276;return db[_0x2718('0x82')][_0x2718('0x62')]({'where':{'id':_0x13d9a8[_0x2718('0x83')]}});}})['then'](function(_0x2e02f8){if(_0x2e02f8){_0x4daafb=_0x2e02f8;if(_0x56ab21){var _0x17c7c3=null;for(var _0x2e83e6=0x1;_0x2e83e6<_0x13d9a8['Messages']['length'];++_0x2e83e6){_0x17c7c3=_0x13d9a8[_0x2718('0x49')][_0x2e83e6];var _0x5442fd=_0x17c7c3[_0x2718('0x68')]?util[_0x2718('0x7e')](_0x2718('0x84'),_0x3e45f6[_0x2718('0x85')],_0x17c7c3[_0x2718('0x68')]):_0x2718('0x86');var _0x4098ac=_0x4d01c7[_0x2718('0x63')]['customer']||util[_0x2718('0x7e')](_0x2718('0x84'),'Visitor',_0x17c7c3['ContactId']);switch(_0x3e45f6[_0x2718('0x87')]){case _0x2718('0x88'):_0x5442fd=_0x17c7c3['UserId']?util[_0x2718('0x7e')]('%s%d',_0x3e45f6['agentAlias'],_0x17c7c3['UserId']):_0x2718('0x86');break;case _0x2718('0x89'):_0x5442fd=_0x17c7c3[_0x2718('0x68')]?_0x17c7c3[_0x2718('0x4d')][_0x2718('0x8a')]||_0x17c7c3[_0x2718('0x4d')][_0x2718('0x4f')]:_0x2718('0x86');break;case _0x2718('0x8b'):_0x5442fd=_0x17c7c3[_0x2718('0x68')]?_0x17c7c3[_0x2718('0x4d')][_0x2718('0x4f')]:_0x2718('0x86');break;default:_0x5442fd=_0x17c7c3[_0x2718('0x68')]?util[_0x2718('0x7e')](_0x2718('0x84'),_0x3e45f6['agentAlias'],_0x17c7c3['UserId']):_0x2718('0x86');}var _0x4e41ee=util[_0x2718('0x7e')](_0x2718('0x8c'),moment(_0x17c7c3[_0x2718('0x4a')])[_0x2718('0x7e')]('MM/DD/YYYY\x20HH:mm:ss'),_0x17c7c3[_0x2718('0x57')]==='in'?_0x4098ac:_0x5442fd,_0x17c7c3[_0x2718('0x63')]);if(!_0x17c7c3[_0x2718('0x8d')]){fs[_0x2718('0x8e')](_0x56ab21,_0x4e41ee);}}return db[_0x2718('0x8f')][_0x2718('0x76')]({'where':{'service':!![]},'include':[{'model':db['MailServerOut'],'as':_0x2718('0x90'),'raw':!![]}]});}}})[_0x2718('0x2d')](function(_0x57c131){if(_0x57c131&&_0x57c131['Smtp']&&_0x4d01c7[_0x2718('0x63')]){var _0x9b001a={'tls':{'rejectUnauthorized':![]}};if(_0x57c131['Smtp'][_0x2718('0x91')]){_0x9b001a[_0x2718('0x91')]=_0x57c131[_0x2718('0x90')][_0x2718('0x91')];}else{_0x9b001a[_0x2718('0x92')]=_0x57c131['Smtp'][_0x2718('0x92')];_0x9b001a[_0x2718('0x93')]=_0x57c131[_0x2718('0x90')]['port'];_0x9b001a[_0x2718('0x94')]=_0x57c131[_0x2718('0x90')]['secure'];}if(_0x57c131['Smtp'][_0x2718('0x95')]){_0x9b001a['auth']={'user':_0x57c131[_0x2718('0x90')][_0x2718('0x96')],'pass':_0x57c131[_0x2718('0x90')][_0x2718('0x97')]};}return respondWithRpcPromise(_0x2718('0x98'),'sendMail',{'account':_0x9b001a,'message':{'from':util[_0x2718('0x7e')](_0x2718('0x99'),_0x57c131[_0x2718('0x30')],_0x57c131[_0x2718('0x9a')]||_0x57c131[_0x2718('0x90')][_0x2718('0x96')]),'to':_0x4d01c7[_0x2718('0x63')]['mailTranscript'],'subject':_0x2718('0x9b'),'text':util[_0x2718('0x7e')]('Hi\x20%s,\x20attached\x20you\x20can\x20find\x20your\x20transcript\x20file.\x20\x0a\x0aRegards.\x20\x0a\x0a',_0x4d01c7['body'][_0x2718('0x7c')]),'attachments':[{'path':_0x56ab21}]}})['then'](function(){return _0x13d9a8;})[_0x2718('0x21')](function(_0x949a54){console['error'](_0x949a54);});}else{return _0x13d9a8;}})['then'](respondWithStatusCode(_0x46ecc3,0xc8))[_0x2718('0x21')](handleError(_0x46ecc3,null));};exports['addMessage']=function(_0x53d4cc,_0x1abeff,_0x429cb0){return db['ChatMessage'][_0x2718('0x62')]({'where':{'id':_0x53d4cc[_0x2718('0x5e')]['id']}})['then'](handleEntityNotFound(_0x1abeff,null))[_0x2718('0x2d')](function(_0x4c1193){if(_0x4c1193){return _0x4c1193[_0x2718('0x9c')](_0x53d4cc[_0x2718('0x63')]['ids'],_[_0x2718('0x9d')](_0x53d4cc[_0x2718('0x63')],[_0x2718('0x9e'),'id'])||{});}})[_0x2718('0x2d')](respondWithResult(_0x1abeff,null))[_0x2718('0x21')](handleError(_0x1abeff,null));};exports[_0x2718('0x9f')]=function(_0x19820f,_0xfebd2b,_0xfac848){var _0x2bc535={'raw':![],'where':{}};var _0x4670dd={};var _0x14ab62={'count':0x0,'rows':[]};return db[_0x2718('0x32')][_0x2718('0x76')]({'where':{'id':_0x19820f[_0x2718('0x5e')]['id']}})[_0x2718('0x2d')](handleEntityNotFound(_0xfebd2b,null))[_0x2718('0x2d')](function(_0x562f0a){if(_0x562f0a){_0x4670dd[_0x2718('0x34')]=_['keys'](db[_0x2718('0x56')][_0x2718('0x33')]);_0x4670dd[_0x2718('0x36')]=_[_0x2718('0x38')](_0x19820f[_0x2718('0x36')]);_0x4670dd[_0x2718('0x5f')]=_['intersection'](_0x4670dd['model'],_0x4670dd['query']);_0x2bc535[_0x2718('0x39')]=_['intersection'](_0x4670dd[_0x2718('0x34')],qs['fields'](_0x19820f[_0x2718('0x36')][_0x2718('0x3a')]));_0x2bc535['attributes']=_0x2bc535[_0x2718('0x39')]['length']?_0x2bc535[_0x2718('0x39')]:_0x4670dd[_0x2718('0x34')];if(!_0x19820f[_0x2718('0x36')][_0x2718('0xa0')](_0x2718('0x3b'))){_0x2bc535['limit']=qs['limit'](_0x19820f['query'][_0x2718('0x28')]);_0x2bc535['offset']=qs[_0x2718('0x27')](_0x19820f['query'][_0x2718('0x27')]);}_0x2bc535[_0x2718('0x3c')]=qs[_0x2718('0x3d')](_0x19820f[_0x2718('0x36')][_0x2718('0x3d')]);_0x2bc535[_0x2718('0x41')]=qs[_0x2718('0x5f')](_[_0x2718('0xa1')](_0x19820f[_0x2718('0x36')],_0x4670dd['filters']));_0x2bc535[_0x2718('0x41')][_0x2718('0xa2')]=_0x562f0a['id'];if(_0x19820f['query'][_0x2718('0x40')]){_0x2bc535[_0x2718('0x41')]=_[_0x2718('0x42')](_0x2bc535[_0x2718('0x41')],{'$or':_[_0x2718('0xa3')](_0x2bc535[_0x2718('0x39')],function(_0x3a6743){var _0x4e2b4a={};_0x4e2b4a[_0x3a6743]={'$like':'%'+_0x19820f[_0x2718('0x36')]['filter']+'%'};return _0x4e2b4a;})});}if(_0x19820f[_0x2718('0x36')][_0x2718('0xa4')]){var _0x5a662a=_0x19820f[_0x2718('0x36')][_0x2718('0xa4')][_0x2718('0xa5')](',');var _0x121ee4={};_0x121ee4[_0x5a662a[0x0]]={'$gte':moment(_0x5a662a[0x1])[_0x2718('0x7e')](_0x2718('0xa6'))};_0x2bc535[_0x2718('0x41')]=_[_0x2718('0x42')](_0x2bc535[_0x2718('0x41')],_0x121ee4);}_0x2bc535=_[_0x2718('0x42')]({},_0x2bc535,_0x19820f[_0x2718('0x43')]);return db[_0x2718('0x56')][_0x2718('0x26')]({'where':_0x2bc535[_0x2718('0x41')]})[_0x2718('0x2d')](function(_0x2d4d49){_0x14ab62[_0x2718('0x26')]=_0x2d4d49;if(_0x19820f[_0x2718('0x36')]['includeAll']){_0x2bc535[_0x2718('0x44')]=[{'all':!![]}];}return db[_0x2718('0x56')]['findAll'](_0x2bc535);})[_0x2718('0x2d')](function(_0x426706){_0x14ab62[_0x2718('0x5c')]=_0x426706;return _0x14ab62;});}})[_0x2718('0x2d')](respondWithFilteredResult(_0xfebd2b,_0x2bc535))['catch'](handleError(_0xfebd2b,null));};exports[_0x2718('0xa7')]=function(_0xeaebc5,_0x287794,_0x461ed4){var _0x2b41db={'where':{}},_0x3993fe={},_0x436de3={'count':0x0,'rows':[]};return db[_0x2718('0x32')][_0x2718('0x76')]({'where':{'id':_0xeaebc5[_0x2718('0x5e')]['id']}})[_0x2718('0x2d')](handleEntityNotFound(_0x287794,null))[_0x2718('0x2d')](function(_0x1b5ea5){if(_0x1b5ea5){_0x3993fe['model']=_[_0x2718('0x38')](db[_0x2718('0x56')][_0x2718('0x33')]);_0x3993fe[_0x2718('0x36')]=_[_0x2718('0x38')](_0xeaebc5[_0x2718('0x36')]);_0x3993fe[_0x2718('0x5f')]=_['intersection'](_0x3993fe[_0x2718('0x34')],_0x3993fe[_0x2718('0x36')]);_0x2b41db[_0x2718('0x39')]=_['intersection'](_0x3993fe['model'],qs['fields'](_0xeaebc5['query'][_0x2718('0x3a')]));_0x2b41db[_0x2718('0x39')]=_0x2b41db[_0x2718('0x39')]['length']?_0x2b41db[_0x2718('0x39')]:_0x3993fe[_0x2718('0x34')];if(!_0xeaebc5[_0x2718('0x36')]['hasOwnProperty']('nolimit')){_0x2b41db[_0x2718('0x28')]=qs[_0x2718('0x28')](_0xeaebc5['query'][_0x2718('0x28')]);_0x2b41db[_0x2718('0x27')]=qs[_0x2718('0x27')](_0xeaebc5[_0x2718('0x36')]['offset']);}_0x2b41db[_0x2718('0x3c')]=qs[_0x2718('0x3d')](_0xeaebc5['query'][_0x2718('0x3d')]);_0x2b41db[_0x2718('0x41')]=qs[_0x2718('0x5f')](_[_0x2718('0xa1')](_0xeaebc5[_0x2718('0x36')],_0x3993fe[_0x2718('0x5f')]));_0x2b41db[_0x2718('0x41')][_0x2718('0xa2')]=_0x1b5ea5['id'];if(_0xeaebc5['query']['filter']){_0x2b41db['where']=_[_0x2718('0x42')](_0x2b41db[_0x2718('0x41')],{'$or':_[_0x2718('0xa3')](_0x2b41db[_0x2718('0x39')],function(_0x54d722){var _0x585d3a={};_0x585d3a[_0x54d722]={'$like':'%'+_0xeaebc5[_0x2718('0x36')]['filter']+'%'};return _0x585d3a;})});}_0x2b41db[_0x2718('0x41')]['secret']=![];if(_0xeaebc5[_0x2718('0x36')]['id']){_0x2b41db['where']['id']={'$gt':_0xeaebc5[_0x2718('0x36')]['id']};}_0x2b41db=_[_0x2718('0x42')]({},_0x2b41db,_0xeaebc5[_0x2718('0x43')]);return db[_0x2718('0x56')]['count']({'where':_0x2b41db['where']})[_0x2718('0x2d')](function(_0x3a20ef){_0x436de3[_0x2718('0x26')]=_0x3a20ef;_0x2b41db[_0x2718('0x44')]=[];if(_0xeaebc5['query'][_0x2718('0xa8')]){_0x2b41db[_0x2718('0x44')]['push']({'model':db[_0x2718('0x4d')],'as':_0x2718('0x4d'),'attributes':['id',_0x2718('0x4f'),_0x2718('0x8a')]});}if(_0xeaebc5[_0x2718('0x36')][_0x2718('0x4c')]){_0x2b41db[_0x2718('0x44')]=[{'all':!![]}];}return db[_0x2718('0x56')][_0x2718('0x5b')](_0x2b41db);})['then'](function(_0x22ff1d){_0x436de3[_0x2718('0x5c')]=_0x22ff1d;return _0x436de3;});}})[_0x2718('0x2d')](respondWithFilteredResult(_0x287794,_0x2b41db))[_0x2718('0x21')](handleError(_0x287794,null));};exports[_0x2718('0xa9')]=function(_0x5b2d7b,_0x4ae689,_0x8685e){return db[_0x2718('0x32')][_0x2718('0x62')]({'where':{'id':_0x5b2d7b[_0x2718('0x5e')]['id']}})[_0x2718('0x2d')](handleEntityNotFound(_0x4ae689,null))['then'](function(_0x443154){if(_0x443154){return _0x443154[_0x2718('0xaa')](_0x5b2d7b[_0x2718('0x63')]['ids'],_[_0x2718('0x9d')](_0x5b2d7b['body'],['ids','id'])||{})['spread'](function(){return db['Tag'][_0x2718('0x5b')]({'attributes':['id','name',_0x2718('0x58')],'where':{'id':_0x5b2d7b[_0x2718('0x63')][_0x2718('0x9e')]}});})['then'](function(_0x525d76){socket[_0x2718('0xab')](_0x2718('0xac'),{'id':Number(_0x5b2d7b['params']['id']),'tags':_0x525d76||[]});return{'id':Number(_0x5b2d7b[_0x2718('0x5e')]['id']),'tags':_0x525d76||[]};});}})['then'](respondWithResult(_0x4ae689,null))['catch'](handleError(_0x4ae689,null));};exports['removeTags']=function(_0x219ba8,_0x51b7fe,_0x5999da){var _0x215a74;return db[_0x2718('0x32')][_0x2718('0x62')]({'where':{'id':_0x219ba8['params']['id']}})['then'](handleEntityNotFound(_0x51b7fe,null))[_0x2718('0x2d')](function(_0x25b5c8){if(_0x25b5c8){return _0x25b5c8['removeTags'](_0x219ba8['query'][_0x2718('0x9e')]);}})[_0x2718('0x2d')](respondWithStatusCode(_0x51b7fe,null))[_0x2718('0x21')](handleError(_0x51b7fe,null));};
\ No newline at end of file
+var _0xcf90=['create','body','describe','customUpdate','abandon','UserId','Sequelize','ValidationError','closed','disposition','file','originalname','basename','filename','type','mimetype','Attachment','attachmentDownload','findOne','join','root','server/files/attachments/','close','mailTranscript','server/files/chat/upload/','format','transcript-%s.txt','now','Messages','ContactId','%s%d','agentAlias','System','customer','Visitor','website_alias','agent_alias','[%s]\x20%s:\x20%s\x0a','MM/DD/YYYY\x20HH:mm:ss','appendFileSync','MailAccount','MailServerOut','Smtp','service','host','port','secure','auth','user','SendMail','email','Hi\x20%s,\x20attached\x20you\x20can\x20find\x20your\x20transcript\x20file.\x20\x0a\x0aRegards.\x20\x0a\x0a','addMessage','ids','omit','getMessages','hasOwnProperty','order','ChatInteractionId','$gte','YYYY-MM-DD\x20HH:mm:ss','getMyMessages','alias','findAll','addTags','spread','emit','chatInteractionTags:save','removeTags','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/utils','../../config/environment','./chatInteraction.socket','register','jayson/promise','client','http','request','then','info','ChatInteraction,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','sendStatus','status','end','json','count','Content-Range','apply','save','update','stack','name','ChatInteraction','model','dateStart','dateEnd','query','keys','intersection','fields','attributes','length','nolimit','limit','offset','sort','pick','day','add','where','filter','merge','map','options','include','push','Tag','Tags','tag','read','ChatMessage','createdAt','distinct','includeAll','Users','fullname','CmContact','Contact','User','Owner','internal','ChatWebsite','Account','key','direction','color','ThroughTags','rows','show','params','rawAttributes','filters','find'];(function(_0xd0b415,_0x149675){var _0x2bdf2c=function(_0x59fbfa){while(--_0x59fbfa){_0xd0b415['push'](_0xd0b415['shift']());}};_0x2bdf2c(++_0x149675);}(_0xcf90,0xe9));var _0x0cf9=function(_0x5edd55,_0x39f266){_0x5edd55=_0x5edd55-0x0;var _0x140cfa=_0xcf90[_0x5edd55];return _0x140cfa;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x0cf9('0x0'));var moment=require(_0x0cf9('0x1'));var BPromise=require(_0x0cf9('0x2'));var Mustache=require(_0x0cf9('0x3'));var util=require(_0x0cf9('0x4'));var path=require(_0x0cf9('0x5'));var sox=require(_0x0cf9('0x6'));var csv=require(_0x0cf9('0x7'));var ejs=require(_0x0cf9('0x8'));var fs=require('fs');var _=require(_0x0cf9('0x9'));var squel=require('squel');var crypto=require(_0x0cf9('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x0cf9('0xb'));var toCsv=require(_0x0cf9('0x7'));var querystring=require(_0x0cf9('0xc'));var Papa=require(_0x0cf9('0xd'));var qs=require(_0x0cf9('0xe'));var logger=require('../../config/logger')('api');var utils=require(_0x0cf9('0xf'));var config=require(_0x0cf9('0x10'));var db=require('../../mysqldb')['db'];var socket=require('socket.io-emitter')({'host':'localhost','port':0x18eb});require(_0x0cf9('0x11'))[_0x0cf9('0x12')](socket);var jayson=require(_0x0cf9('0x13'));var client=jayson[_0x0cf9('0x14')][_0x0cf9('0x15')]({'port':0x232b});var client9004=jayson[_0x0cf9('0x14')][_0x0cf9('0x15')]({'port':0x232c});function respondWithRpcPromise(_0x3b555b,_0x5dbae8,_0x29ebb1,_0x11c241){return new BPromise(function(_0x602c7d,_0x5f153a){var _0x22e42e=_0x11c241||client;return _0x22e42e[_0x0cf9('0x16')](_0x3b555b,_0x29ebb1)[_0x0cf9('0x17')](function(_0xdece32){logger[_0x0cf9('0x18')](_0x0cf9('0x19'),_0x5dbae8,'request\x20sent');logger['debug']('ChatInteraction,\x20%s,\x20%s,\x20%s',_0x5dbae8,_0x0cf9('0x1a'),JSON[_0x0cf9('0x1b')](_0xdece32));if(_0xdece32[_0x0cf9('0x1c')]){if(_0xdece32['error'][_0x0cf9('0x1d')]===0x1f4){logger['error'](_0x0cf9('0x19'),_0x5dbae8,_0xdece32[_0x0cf9('0x1c')][_0x0cf9('0x1e')]);return _0x5f153a(_0xdece32[_0x0cf9('0x1c')][_0x0cf9('0x1e')]);}logger[_0x0cf9('0x1c')](_0x0cf9('0x19'),_0x5dbae8,_0xdece32[_0x0cf9('0x1c')][_0x0cf9('0x1e')]);return _0x602c7d(_0xdece32[_0x0cf9('0x1c')]['message']);}else{logger['info'](_0x0cf9('0x19'),_0x5dbae8,_0x0cf9('0x1a'));_0x602c7d(_0xdece32[_0x0cf9('0x1f')][_0x0cf9('0x1e')]);}})[_0x0cf9('0x20')](function(_0x10ddf6){logger[_0x0cf9('0x1c')](_0x0cf9('0x19'),_0x5dbae8,_0x10ddf6);_0x5f153a(_0x10ddf6);});});}function respondWithStatusCode(_0x3be3db,_0xfca73){_0xfca73=_0xfca73||0xcc;return function(_0x29ce48){if(_0x29ce48){return _0x3be3db[_0x0cf9('0x21')](_0xfca73);}return _0x3be3db[_0x0cf9('0x22')](_0xfca73)[_0x0cf9('0x23')]();};}function respondWithResult(_0x2c0efa,_0x197dd3){_0x197dd3=_0x197dd3||0xc8;return function(_0x4f3f8f){if(_0x4f3f8f){return _0x2c0efa[_0x0cf9('0x22')](_0x197dd3)[_0x0cf9('0x24')](_0x4f3f8f);}};}function respondWithFilteredResult(_0x11a93e,_0x5876cd){return function(_0xadab3c){if(_0xadab3c){var _0xd30140=_0xadab3c[_0x0cf9('0x25')],_0x282cea=_0x5876cd['offset'],_0x49c920=_0x5876cd['offset']+_0x5876cd['limit'],_0x322141;if(_0x49c920>=_0xd30140){_0x49c920=_0xd30140;_0x322141=0xc8;}else{_0x322141=0xce;}_0x11a93e['status'](_0x322141);return _0x11a93e['set'](_0x0cf9('0x26'),_0x282cea+'-'+_0x49c920+'/'+_0xd30140)[_0x0cf9('0x24')](_0xadab3c);}return null;};}function patchUpdates(_0x50a454){return function(_0x4c2492){try{jsonpatch[_0x0cf9('0x27')](_0x4c2492,_0x50a454,!![]);}catch(_0xf71d84){return BPromise['reject'](_0xf71d84);}return _0x4c2492[_0x0cf9('0x28')]();};}function saveUpdates(_0x265cb4,_0x33ad67){return function(_0x50e4db){if(_0x50e4db){return _0x50e4db[_0x0cf9('0x29')](_0x265cb4)[_0x0cf9('0x17')](function(_0x5cb342){return _0x5cb342;});}return null;};}function removeEntity(_0x2e181e,_0x1f173f){return function(_0x210d8d){if(_0x210d8d){return _0x210d8d['destroy']()[_0x0cf9('0x17')](function(){_0x2e181e[_0x0cf9('0x22')](0xcc)[_0x0cf9('0x23')]();});}};}function handleEntityNotFound(_0x1cc298,_0x132188){return function(_0x135ee0){if(!_0x135ee0){_0x1cc298[_0x0cf9('0x21')](0x194);}return _0x135ee0;};}function handleError(_0x2de4a7,_0x2bafa1){_0x2bafa1=_0x2bafa1||0x1f4;return function(_0x3b769e){logger[_0x0cf9('0x1c')](_0x3b769e[_0x0cf9('0x2a')]);if(_0x3b769e[_0x0cf9('0x2b')]){delete _0x3b769e['name'];}_0x2de4a7[_0x0cf9('0x22')](_0x2bafa1)['send'](_0x3b769e);};}exports['index']=function(_0x2b8134,_0x3b163a){var _0x402606={},_0x56fba4={},_0x41860b={'count':0x0,'rows':[]};var _0x13448c=db[_0x0cf9('0x2c')]['rawAttributes'];_0x56fba4[_0x0cf9('0x2d')]=_['keys'](_0x13448c);var _0x16eceb={'dateStart':_0x2b8134['query'][_0x0cf9('0x2e')],'dateEnd':_0x2b8134['query'][_0x0cf9('0x2f')]};delete _0x2b8134[_0x0cf9('0x30')][_0x0cf9('0x2e')];delete _0x2b8134['query'][_0x0cf9('0x2f')];_0x56fba4[_0x0cf9('0x30')]=_[_0x0cf9('0x31')](_0x2b8134[_0x0cf9('0x30')]);_0x56fba4['filters']=_['intersection'](_0x56fba4[_0x0cf9('0x2d')],_0x56fba4[_0x0cf9('0x30')]);_0x402606['attributes']=_[_0x0cf9('0x32')](_0x56fba4[_0x0cf9('0x2d')],qs[_0x0cf9('0x33')](_0x2b8134['query'][_0x0cf9('0x33')]));_0x402606[_0x0cf9('0x34')]=_0x402606[_0x0cf9('0x34')][_0x0cf9('0x35')]?_0x402606[_0x0cf9('0x34')]:_0x56fba4[_0x0cf9('0x2d')];if(!_0x2b8134[_0x0cf9('0x30')]['hasOwnProperty'](_0x0cf9('0x36'))){_0x402606[_0x0cf9('0x37')]=qs[_0x0cf9('0x37')](_0x2b8134[_0x0cf9('0x30')][_0x0cf9('0x37')]);_0x402606[_0x0cf9('0x38')]=qs[_0x0cf9('0x38')](_0x2b8134[_0x0cf9('0x30')][_0x0cf9('0x38')]);}_0x402606['order']=qs[_0x0cf9('0x39')](_0x2b8134[_0x0cf9('0x30')]['sort']);_0x402606['where']=qs['filters'](_[_0x0cf9('0x3a')](_0x2b8134['query'],_0x56fba4['filters']));if(_0x16eceb[_0x0cf9('0x2e')]){if(_0x16eceb[_0x0cf9('0x2f')]){_0x16eceb[_0x0cf9('0x2f')]=moment(_0x16eceb[_0x0cf9('0x2f')])['add'](0x1,_0x0cf9('0x3b'));}else{_0x16eceb[_0x0cf9('0x2f')]=moment(_0x16eceb['dateStart'])[_0x0cf9('0x3c')](0x1,_0x0cf9('0x3b'));}_['merge'](_0x402606[_0x0cf9('0x3d')],{'createdAt':{'$gte':_0x16eceb['dateStart'],'$lte':_0x16eceb[_0x0cf9('0x2f')]}});}if(_0x2b8134[_0x0cf9('0x30')][_0x0cf9('0x3e')]){_0x402606['where']=_[_0x0cf9('0x3f')](_0x402606[_0x0cf9('0x3d')],{'$or':_[_0x0cf9('0x40')](_0x402606[_0x0cf9('0x34')],function(_0x398a76){var _0xc9bc14={};_0xc9bc14[_0x398a76]={'$like':'%'+_0x2b8134['query'][_0x0cf9('0x3e')]+'%'};return _0xc9bc14;})});}_0x402606=_[_0x0cf9('0x3f')]({},_0x402606,_0x2b8134[_0x0cf9('0x41')]);var _0x4b7536={'where':_0x402606['where']};_0x4b7536[_0x0cf9('0x42')]=[];if(_0x2b8134['query']['tag']){_0x4b7536['include'][_0x0cf9('0x43')]({'model':db[_0x0cf9('0x44')],'as':_0x0cf9('0x45'),'attributes':['id'],'where':{'id':_0x2b8134[_0x0cf9('0x30')][_0x0cf9('0x46')]},'required':!![]});_0x4b7536['distinct']=!![];}if(_0x2b8134[_0x0cf9('0x30')][_0x0cf9('0x47')]){_0x4b7536[_0x0cf9('0x42')]['push']({'model':db[_0x0cf9('0x48')],'as':'Messages','attributes':['id','direction',_0x0cf9('0x49'),_0x0cf9('0x47')],'where':{'direction':'in','read':_0x2b8134[_0x0cf9('0x30')][_0x0cf9('0x47')]||![]},'required':!![]});_0x4b7536[_0x0cf9('0x4a')]=!![];}return db['ChatInteraction'][_0x0cf9('0x25')](_0x4b7536)['then'](function(_0x4cf795){_0x41860b['count']=_0x4cf795;if(_0x2b8134['query'][_0x0cf9('0x4b')]){_0x402606['include']=[{'model':db['User'],'as':_0x0cf9('0x4c'),'required':![],'attributes':['id',_0x0cf9('0x2b'),_0x0cf9('0x4d')]},{'model':db[_0x0cf9('0x4e')],'as':_0x0cf9('0x4f'),'required':![]},{'model':db[_0x0cf9('0x50')],'as':_0x0cf9('0x51'),'attributes':[_0x0cf9('0x2b'),_0x0cf9('0x4d'),_0x0cf9('0x52')],'required':![]},{'model':db[_0x0cf9('0x53')],'as':_0x0cf9('0x54'),'attributes':['name',_0x0cf9('0x55')],'required':![]},{'model':db[_0x0cf9('0x48')],'as':'Messages','attributes':['id',_0x0cf9('0x56'),'createdAt',_0x0cf9('0x47')],'where':{'direction':'in','read':_0x2b8134['query'][_0x0cf9('0x47')]||![]},'required':_0x2b8134['query'][_0x0cf9('0x47')]||![]},{'model':db['Tag'],'as':_0x0cf9('0x45'),'attributes':['id',_0x0cf9('0x2b'),_0x0cf9('0x57')],'required':_0x2b8134[_0x0cf9('0x30')][_0x0cf9('0x46')]?!![]:![]},{'model':db[_0x0cf9('0x44')],'as':_0x0cf9('0x58'),'attributes':['id',_0x0cf9('0x2b'),_0x0cf9('0x57')],'through':_0x2b8134['query']['tag']?{'attributes':[],'where':{'TagId':_0x2b8134[_0x0cf9('0x30')][_0x0cf9('0x46')]||undefined}}:{},'required':_0x2b8134[_0x0cf9('0x30')][_0x0cf9('0x46')]?!![]:![]}];}return db[_0x0cf9('0x2c')]['findAll'](_0x402606);})[_0x0cf9('0x17')](function(_0x460a25){_0x41860b[_0x0cf9('0x59')]=_0x460a25;return _0x41860b;})[_0x0cf9('0x17')](respondWithFilteredResult(_0x3b163a,_0x402606))[_0x0cf9('0x20')](handleError(_0x3b163a,null));};exports[_0x0cf9('0x5a')]=function(_0xd355cf,_0x4a784a){var _0x30bfe5={'raw':![],'where':{'id':_0xd355cf[_0x0cf9('0x5b')]['id']}},_0x59a555={};_0x59a555[_0x0cf9('0x2d')]=_[_0x0cf9('0x31')](db[_0x0cf9('0x2c')][_0x0cf9('0x5c')]);_0x59a555[_0x0cf9('0x30')]=_[_0x0cf9('0x31')](_0xd355cf[_0x0cf9('0x30')]);_0x59a555[_0x0cf9('0x5d')]=_['intersection'](_0x59a555[_0x0cf9('0x2d')],_0x59a555[_0x0cf9('0x30')]);_0x30bfe5[_0x0cf9('0x34')]=_[_0x0cf9('0x32')](_0x59a555[_0x0cf9('0x2d')],qs[_0x0cf9('0x33')](_0xd355cf['query']['fields']));_0x30bfe5['attributes']=_0x30bfe5[_0x0cf9('0x34')][_0x0cf9('0x35')]?_0x30bfe5[_0x0cf9('0x34')]:_0x59a555[_0x0cf9('0x2d')];if(_0xd355cf[_0x0cf9('0x30')][_0x0cf9('0x4b')]){_0x30bfe5[_0x0cf9('0x42')]=[{'all':!![]}];}_0x30bfe5=_[_0x0cf9('0x3f')]({},_0x30bfe5,_0xd355cf[_0x0cf9('0x41')]);return db[_0x0cf9('0x2c')][_0x0cf9('0x5e')](_0x30bfe5)[_0x0cf9('0x17')](handleEntityNotFound(_0x4a784a,null))['then'](respondWithResult(_0x4a784a,null))[_0x0cf9('0x20')](handleError(_0x4a784a,null));};exports['create']=function(_0x514ad7,_0x343894){return db[_0x0cf9('0x2c')][_0x0cf9('0x5f')](_0x514ad7['body'],{})[_0x0cf9('0x17')](respondWithResult(_0x343894,0xc9))[_0x0cf9('0x20')](handleError(_0x343894,null));};exports[_0x0cf9('0x29')]=function(_0x384751,_0x49f864){if(_0x384751[_0x0cf9('0x60')]['id']){delete _0x384751[_0x0cf9('0x60')]['id'];}return db[_0x0cf9('0x2c')][_0x0cf9('0x5e')]({'where':{'id':_0x384751[_0x0cf9('0x5b')]['id']}})[_0x0cf9('0x17')](handleEntityNotFound(_0x49f864,null))[_0x0cf9('0x17')](saveUpdates(_0x384751['body'],null))['then'](respondWithResult(_0x49f864,null))['catch'](handleError(_0x49f864,null));};exports['destroy']=function(_0x5c6c1d,_0x28637e){return db[_0x0cf9('0x2c')][_0x0cf9('0x5e')]({'where':{'id':_0x5c6c1d[_0x0cf9('0x5b')]['id']}})[_0x0cf9('0x17')](handleEntityNotFound(_0x28637e,null))[_0x0cf9('0x17')](removeEntity(_0x28637e,null))[_0x0cf9('0x20')](handleError(_0x28637e,null));};exports['describe']=function(_0x1e22ba,_0x565f5c){return db[_0x0cf9('0x2c')][_0x0cf9('0x61')]()[_0x0cf9('0x17')](respondWithResult(_0x565f5c,null))['catch'](handleError(_0x565f5c,null));};exports[_0x0cf9('0x62')]=function(_0x3cd7de,_0x154203){if(_0x3cd7de['body']['id']){delete _0x3cd7de[_0x0cf9('0x60')]['id'];}return db[_0x0cf9('0x2c')][_0x0cf9('0x5e')]({'where':{'id':_0x3cd7de['params']['id']}})[_0x0cf9('0x17')](handleEntityNotFound(_0x154203,null))[_0x0cf9('0x17')](saveUpdates(_0x3cd7de[_0x0cf9('0x60')],null))[_0x0cf9('0x17')](respondWithResult(_0x154203,null))[_0x0cf9('0x20')](handleError(_0x154203,null));};exports[_0x0cf9('0x63')]=function(_0x2b6560,_0x416e6d,_0x2eda4f){if(_0x2b6560[_0x0cf9('0x60')]['id']){delete _0x2b6560[_0x0cf9('0x60')]['id'];}return db[_0x0cf9('0x2c')][_0x0cf9('0x5e')]({'where':{'id':_0x2b6560[_0x0cf9('0x5b')]['id']}})[_0x0cf9('0x17')](function(_0x18b3c2){if(!_0x18b3c2){logger[_0x0cf9('0x1c')]('abandonInteraction,\x20%s,\x20%s,\x20%s','abandon',0x194,'entity\x20not\x20found');_0x416e6d[_0x0cf9('0x21')](0x194);}else{if(_0x18b3c2[_0x0cf9('0x64')]){throw new db[(_0x0cf9('0x65'))][(_0x0cf9('0x66'))]('Interaction\x20already\x20assigned');}}return _0x18b3c2;})[_0x0cf9('0x17')](function(_0x5bbe33){if(_0x5bbe33){return _0x5bbe33['update']({'closed':_0x2b6560[_0x0cf9('0x60')][_0x0cf9('0x67')],'closedAt':_0x2b6560['body']['closedAt'],'disposition':_0x2b6560['body'][_0x0cf9('0x68')]})[_0x0cf9('0x17')](function(_0x3a911f){return _0x3a911f;});}})[_0x0cf9('0x17')](function(_0x50859b){return respondWithRpcPromise('AbandonInteraction',_0x0cf9('0x63'),_0x2b6560[_0x0cf9('0x60')],client9004);})[_0x0cf9('0x17')](respondWithResult(_0x416e6d,null))[_0x0cf9('0x20')](handleError(_0x416e6d,null));};exports['attachmentUpload']=function(_0x20c277,_0x16031e,_0x33de3a){_0x20c277[_0x0cf9('0x60')][_0x0cf9('0x2b')]=_0x20c277[_0x0cf9('0x69')][_0x0cf9('0x6a')];_0x20c277[_0x0cf9('0x60')][_0x0cf9('0x6b')]=_0x20c277[_0x0cf9('0x69')][_0x0cf9('0x6c')];_0x20c277[_0x0cf9('0x60')][_0x0cf9('0x6d')]=_0x20c277[_0x0cf9('0x69')][_0x0cf9('0x6e')];return db[_0x0cf9('0x6f')]['create'](_0x20c277[_0x0cf9('0x60')])[_0x0cf9('0x17')](respondWithResult(_0x16031e,0xc9))[_0x0cf9('0x20')](handleError(_0x16031e,null));};exports[_0x0cf9('0x70')]=function(_0x31ef4a,_0x3f67f8,_0x37e2fc){return db[_0x0cf9('0x2c')]['findOne']({'where':{'id':_0x31ef4a[_0x0cf9('0x5b')]['id']},'raw':!![]})[_0x0cf9('0x17')](handleEntityNotFound(_0x3f67f8,null))[_0x0cf9('0x17')](function(_0x5a736a){if(_0x5a736a){if(_0x5a736a[_0x0cf9('0x67')]){return _0x3f67f8[_0x0cf9('0x22')](0x193)[_0x0cf9('0x24')]({'status':0x193,'message':'Unauthorized'});}return db[_0x0cf9('0x6f')][_0x0cf9('0x71')]({'where':{'id':_0x31ef4a[_0x0cf9('0x30')]['attachId']},'raw':!![]})[_0x0cf9('0x17')](handleEntityNotFound(_0x3f67f8,null));}})[_0x0cf9('0x17')](function(_0x465146){if(_0x465146){return _0x3f67f8['download'](path[_0x0cf9('0x72')](config[_0x0cf9('0x73')],_0x0cf9('0x74'),_0x465146[_0x0cf9('0x6b')]));}})['catch'](handleError(_0x3f67f8,null));};exports[_0x0cf9('0x75')]=function(_0x5424d2,_0x83e908){var _0x4f7222=null;var _0xc2ba46=null;var _0x503fe8=null;var _0x1478b3=null;if(_0x5424d2[_0x0cf9('0x60')]['id']){delete _0x5424d2[_0x0cf9('0x60')]['id'];}if(_0x5424d2[_0x0cf9('0x60')][_0x0cf9('0x76')]){_0x1478b3=path[_0x0cf9('0x72')](config[_0x0cf9('0x73')],_0x0cf9('0x77'),util[_0x0cf9('0x78')](_0x0cf9('0x79'),Date[_0x0cf9('0x7a')]()));_0x5424d2[_0x0cf9('0x60')]['pathTranscript']=_0x1478b3;}return db[_0x0cf9('0x2c')]['find']({'where':{'id':_0x5424d2[_0x0cf9('0x5b')]['id']},'include':[{'model':db['ChatMessage'],'as':_0x0cf9('0x7b'),'include':[{'model':db['User'],'as':'User'}]}]})[_0x0cf9('0x17')](handleEntityNotFound(_0x83e908,null))['then'](saveUpdates(_0x5424d2['body'],null))[_0x0cf9('0x17')](function(_0x8212fb){if(_0x8212fb){_0x4f7222=_0x8212fb;return db[_0x0cf9('0x53')][_0x0cf9('0x5e')]({'where':{'id':_0x4f7222['ChatWebsiteId']}});}})[_0x0cf9('0x17')](function(_0x1c5cac){if(_0x1c5cac){_0x503fe8=_0x1c5cac;return db['CmContact'][_0x0cf9('0x5e')]({'where':{'id':_0x4f7222[_0x0cf9('0x7c')]}});}})['then'](function(_0x3bad7b){if(_0x3bad7b){_0xc2ba46=_0x3bad7b;if(_0x1478b3){var _0x455ff4=null;for(var _0x4c7d22=0x1;_0x4c7d22<_0x4f7222[_0x0cf9('0x7b')]['length'];++_0x4c7d22){_0x455ff4=_0x4f7222[_0x0cf9('0x7b')][_0x4c7d22];var _0x1c576d=_0x455ff4[_0x0cf9('0x64')]?util[_0x0cf9('0x78')](_0x0cf9('0x7d'),_0x503fe8[_0x0cf9('0x7e')],_0x455ff4[_0x0cf9('0x64')]):_0x0cf9('0x7f');var _0x2a29fc=_0x5424d2[_0x0cf9('0x60')][_0x0cf9('0x80')]||util['format'](_0x0cf9('0x7d'),_0x0cf9('0x81'),_0x455ff4[_0x0cf9('0x7c')]);switch(_0x503fe8['agentIdentifier']){case _0x0cf9('0x82'):_0x1c576d=_0x455ff4[_0x0cf9('0x64')]?util[_0x0cf9('0x78')](_0x0cf9('0x7d'),_0x503fe8['agentAlias'],_0x455ff4[_0x0cf9('0x64')]):_0x0cf9('0x7f');break;case _0x0cf9('0x83'):_0x1c576d=_0x455ff4[_0x0cf9('0x64')]?_0x455ff4[_0x0cf9('0x50')]['alias']||_0x455ff4[_0x0cf9('0x50')][_0x0cf9('0x4d')]:_0x0cf9('0x7f');break;case'agent_fullname':_0x1c576d=_0x455ff4[_0x0cf9('0x64')]?_0x455ff4[_0x0cf9('0x50')][_0x0cf9('0x4d')]:_0x0cf9('0x7f');break;default:_0x1c576d=_0x455ff4[_0x0cf9('0x64')]?util[_0x0cf9('0x78')]('%s%d',_0x503fe8[_0x0cf9('0x7e')],_0x455ff4[_0x0cf9('0x64')]):_0x0cf9('0x7f');}var _0x3af804=util['format'](_0x0cf9('0x84'),moment(_0x455ff4[_0x0cf9('0x49')])[_0x0cf9('0x78')](_0x0cf9('0x85')),_0x455ff4[_0x0cf9('0x56')]==='in'?_0x2a29fc:_0x1c576d,_0x455ff4[_0x0cf9('0x60')]);if(!_0x455ff4['secret']){fs[_0x0cf9('0x86')](_0x1478b3,_0x3af804);}}return db[_0x0cf9('0x87')]['findOne']({'where':{'service':!![]},'include':[{'model':db[_0x0cf9('0x88')],'as':_0x0cf9('0x89'),'raw':!![]}]});}}})[_0x0cf9('0x17')](function(_0x35df0e){if(_0x35df0e&&_0x35df0e[_0x0cf9('0x89')]&&_0x5424d2[_0x0cf9('0x60')]){var _0x550699={'tls':{'rejectUnauthorized':![]}};if(_0x35df0e[_0x0cf9('0x89')][_0x0cf9('0x8a')]){_0x550699[_0x0cf9('0x8a')]=_0x35df0e[_0x0cf9('0x89')][_0x0cf9('0x8a')];}else{_0x550699[_0x0cf9('0x8b')]=_0x35df0e[_0x0cf9('0x89')][_0x0cf9('0x8b')];_0x550699[_0x0cf9('0x8c')]=_0x35df0e[_0x0cf9('0x89')][_0x0cf9('0x8c')];_0x550699['secure']=_0x35df0e[_0x0cf9('0x89')][_0x0cf9('0x8d')];}if(_0x35df0e[_0x0cf9('0x89')]['authentication']){_0x550699[_0x0cf9('0x8e')]={'user':_0x35df0e[_0x0cf9('0x89')][_0x0cf9('0x8f')],'pass':_0x35df0e['Smtp']['pass']};}return respondWithRpcPromise(_0x0cf9('0x90'),'sendMail',{'account':_0x550699,'message':{'from':util[_0x0cf9('0x78')]('\x22%s\x22\x20<%s>',_0x35df0e[_0x0cf9('0x2b')],_0x35df0e[_0x0cf9('0x91')]||_0x35df0e[_0x0cf9('0x89')][_0x0cf9('0x8f')]),'to':_0x5424d2[_0x0cf9('0x60')][_0x0cf9('0x76')],'subject':'Mail\x20Transcript','text':util[_0x0cf9('0x78')](_0x0cf9('0x92'),_0x5424d2['body'][_0x0cf9('0x76')]),'attachments':[{'path':_0x1478b3}]}})['then'](function(){return _0x4f7222;})[_0x0cf9('0x20')](function(_0x852743){console['error'](_0x852743);});}else{return _0x4f7222;}})[_0x0cf9('0x17')](respondWithStatusCode(_0x83e908,0xc8))[_0x0cf9('0x20')](handleError(_0x83e908,null));};exports[_0x0cf9('0x93')]=function(_0x4dbaa8,_0x2a3bbe,_0x3f2f4d){return db[_0x0cf9('0x48')]['find']({'where':{'id':_0x4dbaa8[_0x0cf9('0x5b')]['id']}})[_0x0cf9('0x17')](handleEntityNotFound(_0x2a3bbe,null))[_0x0cf9('0x17')](function(_0x13a021){if(_0x13a021){return _0x13a021[_0x0cf9('0x93')](_0x4dbaa8[_0x0cf9('0x60')][_0x0cf9('0x94')],_[_0x0cf9('0x95')](_0x4dbaa8['body'],[_0x0cf9('0x94'),'id'])||{});}})[_0x0cf9('0x17')](respondWithResult(_0x2a3bbe,null))[_0x0cf9('0x20')](handleError(_0x2a3bbe,null));};exports[_0x0cf9('0x96')]=function(_0x4ec138,_0x1d9b54,_0x5ba43c){var _0x5a2582={'raw':![],'where':{}};var _0x44b530={};var _0x45f098={'count':0x0,'rows':[]};return db['ChatInteraction'][_0x0cf9('0x71')]({'where':{'id':_0x4ec138[_0x0cf9('0x5b')]['id']}})[_0x0cf9('0x17')](handleEntityNotFound(_0x1d9b54,null))['then'](function(_0x4878e8){if(_0x4878e8){_0x44b530[_0x0cf9('0x2d')]=_[_0x0cf9('0x31')](db[_0x0cf9('0x48')]['rawAttributes']);_0x44b530[_0x0cf9('0x30')]=_[_0x0cf9('0x31')](_0x4ec138['query']);_0x44b530[_0x0cf9('0x5d')]=_['intersection'](_0x44b530[_0x0cf9('0x2d')],_0x44b530['query']);_0x5a2582[_0x0cf9('0x34')]=_[_0x0cf9('0x32')](_0x44b530['model'],qs[_0x0cf9('0x33')](_0x4ec138['query'][_0x0cf9('0x33')]));_0x5a2582[_0x0cf9('0x34')]=_0x5a2582[_0x0cf9('0x34')][_0x0cf9('0x35')]?_0x5a2582[_0x0cf9('0x34')]:_0x44b530[_0x0cf9('0x2d')];if(!_0x4ec138[_0x0cf9('0x30')][_0x0cf9('0x97')](_0x0cf9('0x36'))){_0x5a2582[_0x0cf9('0x37')]=qs['limit'](_0x4ec138[_0x0cf9('0x30')]['limit']);_0x5a2582[_0x0cf9('0x38')]=qs['offset'](_0x4ec138[_0x0cf9('0x30')]['offset']);}_0x5a2582[_0x0cf9('0x98')]=qs[_0x0cf9('0x39')](_0x4ec138['query'][_0x0cf9('0x39')]);_0x5a2582[_0x0cf9('0x3d')]=qs[_0x0cf9('0x5d')](_['pick'](_0x4ec138[_0x0cf9('0x30')],_0x44b530[_0x0cf9('0x5d')]));_0x5a2582['where'][_0x0cf9('0x99')]=_0x4878e8['id'];if(_0x4ec138['query'][_0x0cf9('0x3e')]){_0x5a2582['where']=_[_0x0cf9('0x3f')](_0x5a2582[_0x0cf9('0x3d')],{'$or':_[_0x0cf9('0x40')](_0x5a2582[_0x0cf9('0x34')],function(_0x189ca5){var _0x43c689={};_0x43c689[_0x189ca5]={'$like':'%'+_0x4ec138['query'][_0x0cf9('0x3e')]+'%'};return _0x43c689;})});}if(_0x4ec138[_0x0cf9('0x30')][_0x0cf9('0x9a')]){var _0x2499e4=_0x4ec138[_0x0cf9('0x30')]['$gte']['split'](',');var _0x201177={};_0x201177[_0x2499e4[0x0]]={'$gte':moment(_0x2499e4[0x1])['format'](_0x0cf9('0x9b'))};_0x5a2582[_0x0cf9('0x3d')]=_[_0x0cf9('0x3f')](_0x5a2582['where'],_0x201177);}_0x5a2582=_[_0x0cf9('0x3f')]({},_0x5a2582,_0x4ec138[_0x0cf9('0x41')]);return db['ChatMessage'][_0x0cf9('0x25')]({'where':_0x5a2582[_0x0cf9('0x3d')]})[_0x0cf9('0x17')](function(_0x5679da){_0x45f098[_0x0cf9('0x25')]=_0x5679da;if(_0x4ec138[_0x0cf9('0x30')][_0x0cf9('0x4b')]){_0x5a2582[_0x0cf9('0x42')]=[{'all':!![]}];}return db[_0x0cf9('0x48')]['findAll'](_0x5a2582);})[_0x0cf9('0x17')](function(_0x5c1be9){_0x45f098[_0x0cf9('0x59')]=_0x5c1be9;return _0x45f098;});}})[_0x0cf9('0x17')](respondWithFilteredResult(_0x1d9b54,_0x5a2582))[_0x0cf9('0x20')](handleError(_0x1d9b54,null));};exports[_0x0cf9('0x9c')]=function(_0x35c73b,_0x134b37,_0x4c78b7){var _0x5ecafc={'where':{}},_0x595196={},_0x4a075f={'count':0x0,'rows':[]};return db[_0x0cf9('0x2c')][_0x0cf9('0x71')]({'where':{'id':_0x35c73b[_0x0cf9('0x5b')]['id']}})['then'](handleEntityNotFound(_0x134b37,null))[_0x0cf9('0x17')](function(_0x188b60){if(_0x188b60){_0x595196['model']=_[_0x0cf9('0x31')](db[_0x0cf9('0x48')][_0x0cf9('0x5c')]);_0x595196[_0x0cf9('0x30')]=_[_0x0cf9('0x31')](_0x35c73b[_0x0cf9('0x30')]);_0x595196[_0x0cf9('0x5d')]=_[_0x0cf9('0x32')](_0x595196[_0x0cf9('0x2d')],_0x595196['query']);_0x5ecafc[_0x0cf9('0x34')]=_[_0x0cf9('0x32')](_0x595196['model'],qs[_0x0cf9('0x33')](_0x35c73b['query']['fields']));_0x5ecafc['attributes']=_0x5ecafc[_0x0cf9('0x34')][_0x0cf9('0x35')]?_0x5ecafc[_0x0cf9('0x34')]:_0x595196[_0x0cf9('0x2d')];if(!_0x35c73b['query']['hasOwnProperty'](_0x0cf9('0x36'))){_0x5ecafc[_0x0cf9('0x37')]=qs[_0x0cf9('0x37')](_0x35c73b['query'][_0x0cf9('0x37')]);_0x5ecafc[_0x0cf9('0x38')]=qs[_0x0cf9('0x38')](_0x35c73b[_0x0cf9('0x30')][_0x0cf9('0x38')]);}_0x5ecafc['order']=qs[_0x0cf9('0x39')](_0x35c73b[_0x0cf9('0x30')]['sort']);_0x5ecafc[_0x0cf9('0x3d')]=qs[_0x0cf9('0x5d')](_[_0x0cf9('0x3a')](_0x35c73b[_0x0cf9('0x30')],_0x595196[_0x0cf9('0x5d')]));_0x5ecafc[_0x0cf9('0x3d')][_0x0cf9('0x99')]=_0x188b60['id'];if(_0x35c73b[_0x0cf9('0x30')]['filter']){_0x5ecafc[_0x0cf9('0x3d')]=_[_0x0cf9('0x3f')](_0x5ecafc[_0x0cf9('0x3d')],{'$or':_['map'](_0x5ecafc['attributes'],function(_0x45de0d){var _0x46df04={};_0x46df04[_0x45de0d]={'$like':'%'+_0x35c73b[_0x0cf9('0x30')]['filter']+'%'};return _0x46df04;})});}_0x5ecafc[_0x0cf9('0x3d')]['secret']=![];if(_0x35c73b[_0x0cf9('0x30')]['id']){_0x5ecafc[_0x0cf9('0x3d')]['id']={'$gt':_0x35c73b['query']['id']};}_0x5ecafc=_['merge']({},_0x5ecafc,_0x35c73b[_0x0cf9('0x41')]);return db[_0x0cf9('0x48')]['count']({'where':_0x5ecafc[_0x0cf9('0x3d')]})['then'](function(_0x39a5df){_0x4a075f['count']=_0x39a5df;_0x5ecafc[_0x0cf9('0x42')]=[];if(_0x35c73b[_0x0cf9('0x30')]['includeAgent']){_0x5ecafc[_0x0cf9('0x42')]['push']({'model':db['User'],'as':_0x0cf9('0x50'),'attributes':['id',_0x0cf9('0x4d'),_0x0cf9('0x9d')]});}if(_0x35c73b[_0x0cf9('0x30')]['includeAll']){_0x5ecafc[_0x0cf9('0x42')]=[{'all':!![]}];}return db[_0x0cf9('0x48')][_0x0cf9('0x9e')](_0x5ecafc);})[_0x0cf9('0x17')](function(_0x2a8974){_0x4a075f[_0x0cf9('0x59')]=_0x2a8974;return _0x4a075f;});}})[_0x0cf9('0x17')](respondWithFilteredResult(_0x134b37,_0x5ecafc))[_0x0cf9('0x20')](handleError(_0x134b37,null));};exports[_0x0cf9('0x9f')]=function(_0x8ff17b,_0x24909b,_0x3e1c23){return db[_0x0cf9('0x2c')][_0x0cf9('0x5e')]({'where':{'id':_0x8ff17b[_0x0cf9('0x5b')]['id']}})[_0x0cf9('0x17')](handleEntityNotFound(_0x24909b,null))['then'](function(_0x5501cb){if(_0x5501cb){return _0x5501cb['setTags'](_0x8ff17b[_0x0cf9('0x60')][_0x0cf9('0x94')],_[_0x0cf9('0x95')](_0x8ff17b[_0x0cf9('0x60')],[_0x0cf9('0x94'),'id'])||{})[_0x0cf9('0xa0')](function(){return db[_0x0cf9('0x44')][_0x0cf9('0x9e')]({'attributes':['id','name','color'],'where':{'id':_0x8ff17b[_0x0cf9('0x60')][_0x0cf9('0x94')]}});})['then'](function(_0x5ad6db){socket[_0x0cf9('0xa1')](_0x0cf9('0xa2'),{'id':Number(_0x8ff17b[_0x0cf9('0x5b')]['id']),'tags':_0x5ad6db||[]});return{'id':Number(_0x8ff17b[_0x0cf9('0x5b')]['id']),'tags':_0x5ad6db||[]};});}})['then'](respondWithResult(_0x24909b,null))[_0x0cf9('0x20')](handleError(_0x24909b,null));};exports[_0x0cf9('0xa3')]=function(_0x52e8b0,_0x81438f,_0x379be4){var _0x14aa5f;return db[_0x0cf9('0x2c')][_0x0cf9('0x5e')]({'where':{'id':_0x52e8b0['params']['id']}})[_0x0cf9('0x17')](handleEntityNotFound(_0x81438f,null))[_0x0cf9('0x17')](function(_0x447886){if(_0x447886){return _0x447886[_0x0cf9('0xa3')](_0x52e8b0[_0x0cf9('0x30')]['ids']);}})[_0x0cf9('0x17')](respondWithStatusCode(_0x81438f,null))[_0x0cf9('0x20')](handleError(_0x81438f,null));};
\ No newline at end of file
index 666485a..7ce406e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5047=['emit','hasOwnProperty','hook','exports','events','../../mysqldb','ChatInteraction','setMaxListeners','save','update','remove'];(function(_0x28d241,_0xa3319e){var _0x4f8ecf=function(_0xa950e6){while(--_0xa950e6){_0x28d241['push'](_0x28d241['shift']());}};_0x4f8ecf(++_0xa3319e);}(_0x5047,0xe0));var _0x7504=function(_0x4c0622,_0x5dacaf){_0x4c0622=_0x4c0622-0x0;var _0x1799d8=_0x5047[_0x4c0622];return _0x1799d8;};'use strict';var EventEmitter=require(_0x7504('0x0'));var ChatInteraction=require(_0x7504('0x1'))['db'][_0x7504('0x2')];var ChatInteractionEvents=new EventEmitter();ChatInteractionEvents[_0x7504('0x3')](0x0);var events={'afterCreate':_0x7504('0x4'),'afterUpdate':_0x7504('0x5'),'afterDestroy':_0x7504('0x6')};function emitEvent(_0x54f860){return function(_0x20fc53,_0x18dea8,_0x2b15ac){ChatInteractionEvents['emit'](_0x54f860+':'+_0x20fc53['id'],_0x20fc53);ChatInteractionEvents[_0x7504('0x7')](_0x54f860,_0x20fc53);_0x2b15ac(null);};}for(var e in events){if(events[_0x7504('0x8')](e)){var event=events[e];ChatInteraction[_0x7504('0x9')](e,emitEvent(event));}}module[_0x7504('0xa')]=ChatInteractionEvents;
\ No newline at end of file
+var _0xc82f=['setMaxListeners','remove','emit','hasOwnProperty','hook','exports','../../mysqldb','ChatInteraction'];(function(_0x23a63c,_0x4e2272){var _0x2e078a=function(_0x4ae24b){while(--_0x4ae24b){_0x23a63c['push'](_0x23a63c['shift']());}};_0x2e078a(++_0x4e2272);}(_0xc82f,0xf6));var _0xfc82=function(_0x18d00f,_0x133106){_0x18d00f=_0x18d00f-0x0;var _0xee06f5=_0xc82f[_0x18d00f];return _0xee06f5;};'use strict';var EventEmitter=require('events');var ChatInteraction=require(_0xfc82('0x0'))['db'][_0xfc82('0x1')];var ChatInteractionEvents=new EventEmitter();ChatInteractionEvents[_0xfc82('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0xfc82('0x3')};function emitEvent(_0x1ff4b7){return function(_0x4a286d,_0x48c312,_0x24f503){ChatInteractionEvents[_0xfc82('0x4')](_0x1ff4b7+':'+_0x4a286d['id'],_0x4a286d);ChatInteractionEvents[_0xfc82('0x4')](_0x1ff4b7,_0x4a286d);_0x24f503(null);};}for(var e in events){if(events[_0xfc82('0x5')](e)){var event=events[e];ChatInteraction[_0xfc82('0x6')](e,emitEvent(event));}}module[_0xfc82('0x7')]=ChatInteractionEvents;
\ No newline at end of file
index 49e4e78..1c06f9e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x855d=['chat_interactions','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','bluebird','exports','define','ChatInteraction'];(function(_0x175f50,_0x509758){var _0x16afce=function(_0x1889cb){while(--_0x1889cb){_0x175f50['push'](_0x175f50['shift']());}};_0x16afce(++_0x509758);}(_0x855d,0x1ba));var _0xd855=function(_0x1380fd,_0x5b73e3){_0x1380fd=_0x1380fd-0x0;var _0x3f9f79=_0x855d[_0x1380fd];return _0x3f9f79;};'use strict';var _=require(_0xd855('0x0'));var util=require(_0xd855('0x1'));var logger=require(_0xd855('0x2'))(_0xd855('0x3'));var moment=require(_0xd855('0x4'));var BPromise=require(_0xd855('0x5'));var rp=require('request-promise');var attributes=require('./chatInteraction.attributes');module[_0xd855('0x6')]=function(_0xcfbda8,_0x2a44a1){return _0xcfbda8[_0xd855('0x7')](_0xd855('0x8'),attributes,{'tableName':_0xd855('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':_0xd855('0xa')});};
\ No newline at end of file
+var _0xa3b0=['lodash','api','moment','bluebird','./chatInteraction.attributes','define','ChatInteraction','chat_interactions','utf8mb4_unicode_ci'];(function(_0x44039a,_0x2ac8a8){var _0x525de5=function(_0x1dc635){while(--_0x1dc635){_0x44039a['push'](_0x44039a['shift']());}};_0x525de5(++_0x2ac8a8);}(_0xa3b0,0x171));var _0x0a3b=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0xa3b0[_0x2641f9];return _0x585741;};'use strict';var _=require(_0x0a3b('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x0a3b('0x1'));var moment=require(_0x0a3b('0x2'));var BPromise=require(_0x0a3b('0x3'));var rp=require('request-promise');var attributes=require(_0x0a3b('0x4'));module['exports']=function(_0x59368c,_0x2f135d){return _0x59368c[_0x0a3b('0x5')](_0x0a3b('0x6'),attributes,{'tableName':_0x0a3b('0x7'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':_0x0a3b('0x8')});};
\ No newline at end of file
index edc3a5f..4ea4354 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0561=['ChatInteraction','addTags','ids','omit','AddTags','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','localhost','./chatInteraction.socket','register','then','info','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','ChatInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','UpdateChatInteraction','body','options','where','attributes','AddTagsToChatInteraction'];(function(_0x1f13ff,_0x29b9b9){var _0xb1c768=function(_0x4c00f3){while(--_0x4c00f3){_0x1f13ff['push'](_0x1f13ff['shift']());}};_0xb1c768(++_0x29b9b9);}(_0x0561,0x71));var _0x1056=function(_0x2c2530,_0x406474){_0x2c2530=_0x2c2530-0x0;var _0x404b27=_0x0561[_0x2c2530];return _0x404b27;};'use strict';var _=require(_0x1056('0x0'));var util=require(_0x1056('0x1'));var moment=require(_0x1056('0x2'));var BPromise=require('bluebird');var rs=require(_0x1056('0x3'));var fs=require('fs');var db=require(_0x1056('0x4'))['db'];var utils=require(_0x1056('0x5'));var logger=require('../../config/logger')(_0x1056('0x6'));var config=require(_0x1056('0x7'));var jayson=require(_0x1056('0x8'));var client=jayson[_0x1056('0x9')]['http']({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0x1056('0xa'),'port':0x18eb});require(_0x1056('0xb'))[_0x1056('0xc')](socket);function respondWithRpcPromise(_0x2d79a7,_0x1e3d5e,_0x128647){return new BPromise(function(_0x141e98,_0x5727ce){return client['request'](_0x2d79a7,_0x128647)[_0x1056('0xd')](function(_0x3a7c3b){logger[_0x1056('0xe')](_0x1056('0xf'),_0x1e3d5e,_0x1056('0x10'));logger[_0x1056('0x11')](_0x1056('0x12'),_0x1e3d5e,_0x1056('0x10'),JSON[_0x1056('0x13')](_0x3a7c3b));if(_0x3a7c3b[_0x1056('0x14')]){if(_0x3a7c3b['error'][_0x1056('0x15')]===0x1f4){logger[_0x1056('0x14')](_0x1056('0xf'),_0x1e3d5e,_0x3a7c3b[_0x1056('0x14')][_0x1056('0x16')]);return _0x5727ce(_0x3a7c3b[_0x1056('0x14')][_0x1056('0x16')]);}logger[_0x1056('0x14')](_0x1056('0xf'),_0x1e3d5e,_0x3a7c3b[_0x1056('0x14')][_0x1056('0x16')]);return _0x141e98(_0x3a7c3b[_0x1056('0x14')]['message']);}else{logger['info']('ChatInteraction,\x20%s,\x20%s',_0x1e3d5e,_0x1056('0x10'));_0x141e98(_0x3a7c3b[_0x1056('0x17')]['message']);}})[_0x1056('0x18')](function(_0x579c8c){logger['error'](_0x1056('0xf'),_0x1e3d5e,_0x579c8c);_0x5727ce(_0x579c8c);});});}exports[_0x1056('0x19')]=function(_0x5a86b6){var _0x1bb8ef=this;return new Promise(function(_0xb9d2f8,_0x485520){return db['ChatInteraction']['update'](_0x5a86b6[_0x1056('0x1a')],{'raw':_0x5a86b6[_0x1056('0x1b')]?_0x5a86b6[_0x1056('0x1b')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5a86b6[_0x1056('0x1b')]?_0x5a86b6[_0x1056('0x1b')][_0x1056('0x1c')]||null:null,'attributes':_0x5a86b6[_0x1056('0x1b')]?_0x5a86b6[_0x1056('0x1b')][_0x1056('0x1d')]||null:null,'limit':_0x5a86b6[_0x1056('0x1b')]?_0x5a86b6['options']['limit']||null:null})[_0x1056('0xd')](function(_0x3ac02f){logger[_0x1056('0xe')](_0x1056('0x19'),_0x5a86b6);logger[_0x1056('0x11')](_0x1056('0x19'),_0x5a86b6,JSON[_0x1056('0x13')](_0x3ac02f));_0xb9d2f8(_0x3ac02f);})[_0x1056('0x18')](function(_0x50f56c){logger['error'](_0x1056('0x19'),_0x50f56c[_0x1056('0x16')],_0x5a86b6);_0x485520(_0x1bb8ef[_0x1056('0x14')](0x1f4,_0x50f56c[_0x1056('0x16')]));});});};exports[_0x1056('0x1e')]=function(_0x332e35){return new Promise(function(_0x1c20e9,_0x46fd93){return db[_0x1056('0x1f')]['find']({'where':_0x332e35[_0x1056('0x1b')]?_0x332e35[_0x1056('0x1b')][_0x1056('0x1c')]||null:null})[_0x1056('0xd')](function(_0x694e8b){if(_0x694e8b){return _0x694e8b[_0x1056('0x20')](_0x332e35['body'][_0x1056('0x21')],_[_0x1056('0x22')](_0x332e35['body'],[_0x1056('0x21'),'id'])||{});}})['spread'](function(_0x44e19f){logger[_0x1056('0xe')](_0x1056('0x23'),_0x332e35);logger['debug'](_0x1056('0x23'),_0x332e35,JSON[_0x1056('0x13')](_0x44e19f));_0x1c20e9(_0x44e19f);})['catch'](function(_0x6c2746){logger[_0x1056('0x14')](_0x1056('0x23'),_0x6c2746[_0x1056('0x16')],_0x332e35);_0x46fd93(_this[_0x1056('0x14')](0x1f4,_0x6c2746[_0x1056('0x16')]));});});};
\ No newline at end of file
+var _0xabdc=['localhost','register','request','then','info','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','ChatInteraction,\x20%s,\x20%s,\x20%s','error','code','message','result','UpdateChatInteraction','ChatInteraction','body','options','where','attributes','stringify','AddTagsToChatInteraction','find','omit','ids','AddTags','catch','util','moment','bluebird','randomstring','../../config/logger','rpc','client','socket.io-emitter'];(function(_0x2d2c16,_0x4e88b6){var _0x53f2fb=function(_0x6b6dac){while(--_0x6b6dac){_0x2d2c16['push'](_0x2d2c16['shift']());}};_0x53f2fb(++_0x4e88b6);}(_0xabdc,0xc4));var _0xcabd=function(_0x2ede89,_0x55f872){_0x2ede89=_0x2ede89-0x0;var _0x2ff58f=_0xabdc[_0x2ede89];return _0x2ff58f;};'use strict';var _=require('lodash');var util=require(_0xcabd('0x0'));var moment=require(_0xcabd('0x1'));var BPromise=require(_0xcabd('0x2'));var rs=require(_0xcabd('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xcabd('0x4'))(_0xcabd('0x5'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xcabd('0x6')]['http']({'port':0x232a});var socket=require(_0xcabd('0x7'))({'host':_0xcabd('0x8'),'port':0x18eb});require('./chatInteraction.socket')[_0xcabd('0x9')](socket);function respondWithRpcPromise(_0x136cc8,_0x2aad26,_0x582f2f){return new BPromise(function(_0x1e13ce,_0x1d115e){return client[_0xcabd('0xa')](_0x136cc8,_0x582f2f)[_0xcabd('0xb')](function(_0x27f384){logger[_0xcabd('0xc')](_0xcabd('0xd'),_0x2aad26,_0xcabd('0xe'));logger[_0xcabd('0xf')](_0xcabd('0x10'),_0x2aad26,_0xcabd('0xe'),JSON['stringify'](_0x27f384));if(_0x27f384[_0xcabd('0x11')]){if(_0x27f384[_0xcabd('0x11')][_0xcabd('0x12')]===0x1f4){logger['error'](_0xcabd('0xd'),_0x2aad26,_0x27f384[_0xcabd('0x11')]['message']);return _0x1d115e(_0x27f384[_0xcabd('0x11')][_0xcabd('0x13')]);}logger['error']('ChatInteraction,\x20%s,\x20%s',_0x2aad26,_0x27f384[_0xcabd('0x11')][_0xcabd('0x13')]);return _0x1e13ce(_0x27f384[_0xcabd('0x11')][_0xcabd('0x13')]);}else{logger[_0xcabd('0xc')](_0xcabd('0xd'),_0x2aad26,_0xcabd('0xe'));_0x1e13ce(_0x27f384[_0xcabd('0x14')][_0xcabd('0x13')]);}})['catch'](function(_0x5d38e9){logger[_0xcabd('0x11')](_0xcabd('0xd'),_0x2aad26,_0x5d38e9);_0x1d115e(_0x5d38e9);});});}exports[_0xcabd('0x15')]=function(_0x4d6b03){var _0x38c4b7=this;return new Promise(function(_0x54988e,_0x32af65){return db[_0xcabd('0x16')]['update'](_0x4d6b03[_0xcabd('0x17')],{'raw':_0x4d6b03[_0xcabd('0x18')]?_0x4d6b03[_0xcabd('0x18')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x4d6b03[_0xcabd('0x18')]?_0x4d6b03[_0xcabd('0x18')][_0xcabd('0x19')]||null:null,'attributes':_0x4d6b03[_0xcabd('0x18')]?_0x4d6b03['options'][_0xcabd('0x1a')]||null:null,'limit':_0x4d6b03[_0xcabd('0x18')]?_0x4d6b03[_0xcabd('0x18')]['limit']||null:null})[_0xcabd('0xb')](function(_0x276b45){logger[_0xcabd('0xc')](_0xcabd('0x15'),_0x4d6b03);logger[_0xcabd('0xf')]('UpdateChatInteraction',_0x4d6b03,JSON[_0xcabd('0x1b')](_0x276b45));_0x54988e(_0x276b45);})['catch'](function(_0x129921){logger['error'](_0xcabd('0x15'),_0x129921[_0xcabd('0x13')],_0x4d6b03);_0x32af65(_0x38c4b7[_0xcabd('0x11')](0x1f4,_0x129921['message']));});});};exports[_0xcabd('0x1c')]=function(_0x55757b){return new Promise(function(_0x52d283,_0x36ea32){return db[_0xcabd('0x16')][_0xcabd('0x1d')]({'where':_0x55757b[_0xcabd('0x18')]?_0x55757b[_0xcabd('0x18')]['where']||null:null})[_0xcabd('0xb')](function(_0x224cb6){if(_0x224cb6){return _0x224cb6['addTags'](_0x55757b[_0xcabd('0x17')]['ids'],_[_0xcabd('0x1e')](_0x55757b['body'],[_0xcabd('0x1f'),'id'])||{});}})['spread'](function(_0x113435){logger[_0xcabd('0xc')](_0xcabd('0x20'),_0x55757b);logger[_0xcabd('0xf')](_0xcabd('0x20'),_0x55757b,JSON['stringify'](_0x113435));_0x52d283(_0x113435);})[_0xcabd('0x21')](function(_0x3bccdc){logger[_0xcabd('0x11')](_0xcabd('0x20'),_0x3bccdc[_0xcabd('0x13')],_0x55757b);_0x36ea32(_this['error'](0x1f4,_0x3bccdc[_0xcabd('0x13')]));});});};
\ No newline at end of file
index 1f1a8d5..a7fb699 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed90=['register','length','chatInteraction:','./chatInteraction.events','remove','update','emit','removeListener'];(function(_0xc6a3e4,_0x25fbce){var _0x1dee04=function(_0x5f17e7){while(--_0x5f17e7){_0xc6a3e4['push'](_0xc6a3e4['shift']());}};_0x1dee04(++_0x25fbce);}(_0xed90,0x16b));var _0x0ed9=function(_0x400b68,_0x5f0b10){_0x400b68=_0x400b68-0x0;var _0x1e4114=_0xed90[_0x400b68];return _0x1e4114;};'use strict';var ChatInteractionEvents=require(_0x0ed9('0x0'));var events=['save',_0x0ed9('0x1'),_0x0ed9('0x2')];function createListener(_0xd96961,_0x2bf717){return function(_0x5b27c4){_0x2bf717[_0x0ed9('0x3')](_0xd96961,_0x5b27c4);};}function removeListener(_0x5c42fa,_0x5d59f8){return function(){ChatInteractionEvents[_0x0ed9('0x4')](_0x5c42fa,_0x5d59f8);};}exports[_0x0ed9('0x5')]=function(_0x488a40){for(var _0x32957e=0x0,_0x19f3e3=events[_0x0ed9('0x6')];_0x32957e<_0x19f3e3;_0x32957e++){var _0x232f24=events[_0x32957e];var _0x29ebc6=createListener(_0x0ed9('0x7')+_0x232f24,_0x488a40);ChatInteractionEvents['on'](_0x232f24,_0x29ebc6);}};
\ No newline at end of file
+var _0xeaa5=['./chatInteraction.events','save','update','emit','removeListener','register','length','chatInteraction:'];(function(_0xacb49,_0xb25bf1){var _0x5045b9=function(_0x45e8bd){while(--_0x45e8bd){_0xacb49['push'](_0xacb49['shift']());}};_0x5045b9(++_0xb25bf1);}(_0xeaa5,0x1f0));var _0x5eaa=function(_0x78bf1b,_0x29c555){_0x78bf1b=_0x78bf1b-0x0;var _0x3a5127=_0xeaa5[_0x78bf1b];return _0x3a5127;};'use strict';var ChatInteractionEvents=require(_0x5eaa('0x0'));var events=[_0x5eaa('0x1'),'remove',_0x5eaa('0x2')];function createListener(_0x3cd821,_0x17dc1d){return function(_0x13131b){_0x17dc1d[_0x5eaa('0x3')](_0x3cd821,_0x13131b);};}function removeListener(_0x4260a8,_0x20a06d){return function(){ChatInteractionEvents[_0x5eaa('0x4')](_0x4260a8,_0x20a06d);};}exports[_0x5eaa('0x5')]=function(_0x54570c){for(var _0x4f69e0=0x0,_0x3feb75=events[_0x5eaa('0x6')];_0x4f69e0<_0x3feb75;_0x4f69e0++){var _0x599f7b=events[_0x4f69e0];var _0x3eb1=createListener(_0x5eaa('0x7')+_0x599f7b,_0x54570c);ChatInteractionEvents['on'](_0x599f7b,_0x3eb1);}};
\ No newline at end of file
index bb316f2..e78b3bd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7ece=['path','Router','../../components/auth/service','../../components/interaction/service','./chatInteraction.controller','get','isAuthenticated','/describe','show','/:id/attachment_download','isChatInteractionAuthorized','attachmentDownload','/:id/messages','getMessages','getMyMessages','post','create','diskStorage','join','server/files/attachments/','format','%s-%s','replace','/:id/attachment_upload','single','attachmentUpload','addMessage','chat','chatinteraction:addtags','addTags','put','tracked','/:id/custom_update','/:id/abandon','abandon','/:id/close','close','delete','/:id','destroy','removeTags','exports','multer','util'];(function(_0x101096,_0x10d80b){var _0x4faa86=function(_0x30098d){while(--_0x30098d){_0x101096['push'](_0x101096['shift']());}};_0x4faa86(++_0x10d80b);}(_0x7ece,0x15e));var _0xe7ec=function(_0x5a776b,_0x46f785){_0x5a776b=_0x5a776b-0x0;var _0xbbef59=_0x7ece[_0x5a776b];return _0xbbef59;};'use strict';var multer=require(_0xe7ec('0x0'));var util=require(_0xe7ec('0x1'));var path=require(_0xe7ec('0x2'));var express=require('express');var router=express[_0xe7ec('0x3')]();var auth=require(_0xe7ec('0x4'));var interaction=require(_0xe7ec('0x5'));var config=require('../../config/environment');var controller=require(_0xe7ec('0x6'));router[_0xe7ec('0x7')]('/',auth[_0xe7ec('0x8')](),controller['index']);router[_0xe7ec('0x7')](_0xe7ec('0x9'),auth[_0xe7ec('0x8')](),controller['describe']);router[_0xe7ec('0x7')]('/:id',auth['isChatInteractionAuthorized'](),controller[_0xe7ec('0xa')]);router[_0xe7ec('0x7')](_0xe7ec('0xb'),auth[_0xe7ec('0xc')](),controller[_0xe7ec('0xd')]);router['get'](_0xe7ec('0xe'),auth[_0xe7ec('0x8')](),controller[_0xe7ec('0xf')]);router['get']('/:id/my_messages',auth[_0xe7ec('0xc')](),controller[_0xe7ec('0x10')]);router[_0xe7ec('0x11')]('/',auth[_0xe7ec('0x8')](),controller[_0xe7ec('0x12')]);var upload=multer({'storage':multer[_0xe7ec('0x13')]({'destination':function(_0x541f05,_0x2c94e8,_0x522707){_0x522707(null,path[_0xe7ec('0x14')](config['root'],_0xe7ec('0x15')));},'filename':function(_0x10f974,_0x48b516,_0x4eed6d){_0x4eed6d(null,util[_0xe7ec('0x16')](_0xe7ec('0x17'),Date['now'](),_0x48b516['originalname'][_0xe7ec('0x18')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0xe7ec('0x11')](_0xe7ec('0x19'),upload[_0xe7ec('0x1a')]('file'),controller[_0xe7ec('0x1b')]);router[_0xe7ec('0x11')](_0xe7ec('0xe'),auth[_0xe7ec('0xc')](),controller[_0xe7ec('0x1c')]);router[_0xe7ec('0x11')]('/:id/tags',auth['isAuthenticated'](),interaction['tracked'](_0xe7ec('0x1d'),_0xe7ec('0x1e')),controller[_0xe7ec('0x1f')]);router[_0xe7ec('0x20')]('/:id',auth[_0xe7ec('0x8')](),interaction[_0xe7ec('0x21')](_0xe7ec('0x1d'),'chatinteraction:update'),controller['update']);router[_0xe7ec('0x20')](_0xe7ec('0x22'),controller['customUpdate']);router[_0xe7ec('0x20')](_0xe7ec('0x23'),auth['isChatInteractionAuthorized'](),controller[_0xe7ec('0x24')]);router['put'](_0xe7ec('0x25'),controller[_0xe7ec('0x26')]);router[_0xe7ec('0x27')](_0xe7ec('0x28'),auth[_0xe7ec('0x8')](),interaction[_0xe7ec('0x21')]('chat','chatinteraction:destroy'),controller[_0xe7ec('0x29')]);router[_0xe7ec('0x27')]('/:id/tags',auth[_0xe7ec('0x8')](),controller[_0xe7ec('0x2a')]);module[_0xe7ec('0x2b')]=router;
\ No newline at end of file
+var _0x0349=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatInteraction.controller','get','index','/describe','isAuthenticated','describe','/:id','isChatInteractionAuthorized','show','attachmentDownload','/:id/messages','getMessages','/:id/my_messages','getMyMessages','join','root','server/files/attachments/','format','%s-%s','now','originalname','replace','post','file','attachmentUpload','addMessage','tracked','chat','chatinteraction:addtags','addTags','put','chatinteraction:update','update','customUpdate','/:id/abandon','/:id/close','delete','chatinteraction:destroy','destroy','/:id/tags','exports','multer','util','path'];(function(_0x2ac4fc,_0x43e4fd){var _0x5744fb=function(_0x20d254){while(--_0x20d254){_0x2ac4fc['push'](_0x2ac4fc['shift']());}};_0x5744fb(++_0x43e4fd);}(_0x0349,0x1e7));var _0x9034=function(_0x4914e2,_0x48be8f){_0x4914e2=_0x4914e2-0x0;var _0x2dcd07=_0x0349[_0x4914e2];return _0x2dcd07;};'use strict';var multer=require(_0x9034('0x0'));var util=require(_0x9034('0x1'));var path=require(_0x9034('0x2'));var express=require(_0x9034('0x3'));var router=express[_0x9034('0x4')]();var auth=require(_0x9034('0x5'));var interaction=require(_0x9034('0x6'));var config=require(_0x9034('0x7'));var controller=require(_0x9034('0x8'));router[_0x9034('0x9')]('/',auth['isAuthenticated'](),controller[_0x9034('0xa')]);router[_0x9034('0x9')](_0x9034('0xb'),auth[_0x9034('0xc')](),controller[_0x9034('0xd')]);router[_0x9034('0x9')](_0x9034('0xe'),auth[_0x9034('0xf')](),controller[_0x9034('0x10')]);router[_0x9034('0x9')]('/:id/attachment_download',auth[_0x9034('0xf')](),controller[_0x9034('0x11')]);router['get'](_0x9034('0x12'),auth['isAuthenticated'](),controller[_0x9034('0x13')]);router[_0x9034('0x9')](_0x9034('0x14'),auth[_0x9034('0xf')](),controller[_0x9034('0x15')]);router['post']('/',auth[_0x9034('0xc')](),controller['create']);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x5bc036,_0x2f6f68,_0x330d5c){_0x330d5c(null,path[_0x9034('0x16')](config[_0x9034('0x17')],_0x9034('0x18')));},'filename':function(_0x129d9f,_0x1726cf,_0x2eb177){_0x2eb177(null,util[_0x9034('0x19')](_0x9034('0x1a'),Date[_0x9034('0x1b')](),_0x1726cf[_0x9034('0x1c')][_0x9034('0x1d')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x9034('0x1e')]('/:id/attachment_upload',upload['single'](_0x9034('0x1f')),controller[_0x9034('0x20')]);router[_0x9034('0x1e')](_0x9034('0x12'),auth[_0x9034('0xf')](),controller[_0x9034('0x21')]);router[_0x9034('0x1e')]('/:id/tags',auth[_0x9034('0xc')](),interaction[_0x9034('0x22')](_0x9034('0x23'),_0x9034('0x24')),controller[_0x9034('0x25')]);router[_0x9034('0x26')](_0x9034('0xe'),auth['isAuthenticated'](),interaction['tracked']('chat',_0x9034('0x27')),controller[_0x9034('0x28')]);router[_0x9034('0x26')]('/:id/custom_update',controller[_0x9034('0x29')]);router[_0x9034('0x26')](_0x9034('0x2a'),auth[_0x9034('0xf')](),controller['abandon']);router['put'](_0x9034('0x2b'),controller['close']);router[_0x9034('0x2c')](_0x9034('0xe'),auth[_0x9034('0xc')](),interaction[_0x9034('0x22')](_0x9034('0x23'),_0x9034('0x2d')),controller[_0x9034('0x2e')]);router[_0x9034('0x2c')](_0x9034('0x2f'),auth[_0x9034('0xc')](),controller['removeTags']);module[_0x9034('0x30')]=router;
\ No newline at end of file
index e048631..52af07e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f6f=['sequelize','exports','TEXT','medium','BOOLEAN'];(function(_0x5c1cdc,_0x322014){var _0x2e8317=function(_0x2e9dfa){while(--_0x2e9dfa){_0x5c1cdc['push'](_0x5c1cdc['shift']());}};_0x2e8317(++_0x322014);}(_0x5f6f,0x1ef));var _0xf5f6=function(_0x13c5bf,_0x336fca){_0x13c5bf=_0x13c5bf-0x0;var _0x242af1=_0x5f6f[_0x13c5bf];return _0x242af1;};'use strict';var Sequelize=require(_0xf5f6('0x0'));module[_0xf5f6('0x1')]={'body':{'type':Sequelize[_0xf5f6('0x2')](_0xf5f6('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0xf5f6('0x4')],'defaultValue':![]},'ChatInternalMessageId':{'type':Sequelize['INTEGER']}};
\ No newline at end of file
+var _0x6ac2=['medium','BOOLEAN','INTEGER','sequelize','TEXT'];(function(_0x436754,_0xec2538){var _0x16fd93=function(_0x4fd61b){while(--_0x4fd61b){_0x436754['push'](_0x436754['shift']());}};_0x16fd93(++_0xec2538);}(_0x6ac2,0x184));var _0x26ac=function(_0x3526cb,_0x363562){_0x3526cb=_0x3526cb-0x0;var _0x32e434=_0x6ac2[_0x3526cb];return _0x32e434;};'use strict';var Sequelize=require(_0x26ac('0x0'));module['exports']={'body':{'type':Sequelize[_0x26ac('0x1')](_0x26ac('0x2')),'allowNull':![]},'read':{'type':Sequelize[_0x26ac('0x3')],'defaultValue':![]},'ChatInternalMessageId':{'type':Sequelize[_0x26ac('0x4')]}};
\ No newline at end of file
index 4b84ead..d43dda7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2e8c=['allowmessenger','-online','VoiceQueues','push','FromId','ToId','read','all','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','api','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./chatInternalMessage.socket','register','sendStatus','status','json','count','offset','limit','set','apply','reject','save','update','then','destroy','end','error','name','index','ChatInternalMessage','rawAttributes','query','dateStart','dateEnd','filters','model','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','filter','options','includeAll','include','findAll','rows','catch','show','params','keys','find','create','body','describe','get','messages','createdAt','lastMessage','YYYY-MM-DD\x20HH:mm:ss','getUsers','User','agent','user','userpic','internal','online','lastLoginAt'];(function(_0x16b944,_0x546984){var _0x5b594d=function(_0x4d7fdf){while(--_0x4d7fdf){_0x16b944['push'](_0x16b944['shift']());}};_0x5b594d(++_0x546984);}(_0x2e8c,0x119));var _0xc2e8=function(_0x291db4,_0x2180fb){_0x291db4=_0x291db4-0x0;var _0x3e9126=_0x2e8c[_0x291db4];return _0x3e9126;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xc2e8('0x0'));var moment=require('moment');var BPromise=require(_0xc2e8('0x1'));var Mustache=require(_0xc2e8('0x2'));var util=require(_0xc2e8('0x3'));var path=require(_0xc2e8('0x4'));var sox=require(_0xc2e8('0x5'));var csv=require(_0xc2e8('0x6'));var ejs=require(_0xc2e8('0x7'));var fs=require('fs');var _=require(_0xc2e8('0x8'));var squel=require('squel');var crypto=require(_0xc2e8('0x9'));var jsforce=require(_0xc2e8('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xc2e8('0xb'));var Papa=require(_0xc2e8('0xc'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0xc2e8('0xd'));var utils=require('../../config/utils');var config=require(_0xc2e8('0xe'));var db=require(_0xc2e8('0xf'))['db'];var socket=require(_0xc2e8('0x10'))({'host':_0xc2e8('0x11'),'port':0x18eb});require(_0xc2e8('0x12'))[_0xc2e8('0x13')](socket);function respondWithStatusCode(_0x3a86d6,_0x1504fb){_0x1504fb=_0x1504fb||0xcc;return function(_0x2aeea4){if(_0x2aeea4){return _0x3a86d6[_0xc2e8('0x14')](_0x1504fb);}return _0x3a86d6['status'](_0x1504fb)['end']();};}function respondWithResult(_0x445a68,_0xfb3121){_0xfb3121=_0xfb3121||0xc8;return function(_0x4462ea){if(_0x4462ea){return _0x445a68[_0xc2e8('0x15')](_0xfb3121)[_0xc2e8('0x16')](_0x4462ea);}};}function respondWithFilteredResult(_0x1f0c56,_0x35fd9c){return function(_0x293002){if(_0x293002){var _0x2b6020=_0x293002[_0xc2e8('0x17')],_0x4d06f0=_0x35fd9c[_0xc2e8('0x18')],_0x26a97c=_0x35fd9c[_0xc2e8('0x18')]+_0x35fd9c[_0xc2e8('0x19')],_0x6745a5;if(_0x26a97c>=_0x2b6020){_0x26a97c=_0x2b6020;_0x6745a5=0xc8;}else{_0x6745a5=0xce;}_0x1f0c56[_0xc2e8('0x15')](_0x6745a5);return _0x1f0c56[_0xc2e8('0x1a')]('Content-Range',_0x4d06f0+'-'+_0x26a97c+'/'+_0x2b6020)['json'](_0x293002);}return null;};}function patchUpdates(_0x24040d){return function(_0x2a2cbe){try{jsonpatch[_0xc2e8('0x1b')](_0x2a2cbe,_0x24040d,!![]);}catch(_0x2f10b8){return BPromise[_0xc2e8('0x1c')](_0x2f10b8);}return _0x2a2cbe[_0xc2e8('0x1d')]();};}function saveUpdates(_0x25cd5c,_0x56d307){return function(_0x241adc){if(_0x241adc){return _0x241adc[_0xc2e8('0x1e')](_0x25cd5c)[_0xc2e8('0x1f')](function(_0xaeabd){return _0xaeabd;});}return null;};}function removeEntity(_0x133380,_0x451415){return function(_0x4835e5){if(_0x4835e5){return _0x4835e5[_0xc2e8('0x20')]()[_0xc2e8('0x1f')](function(){_0x133380[_0xc2e8('0x15')](0xcc)[_0xc2e8('0x21')]();});}};}function handleEntityNotFound(_0x3ccbb3,_0x1633aa){return function(_0x1c9604){if(!_0x1c9604){_0x3ccbb3[_0xc2e8('0x14')](0x194);}return _0x1c9604;};}function handleError(_0x15b6ef,_0x45b4f0){_0x45b4f0=_0x45b4f0||0x1f4;return function(_0x105ed0){logger[_0xc2e8('0x22')](_0x105ed0['stack']);if(_0x105ed0[_0xc2e8('0x23')]){delete _0x105ed0[_0xc2e8('0x23')];}_0x15b6ef[_0xc2e8('0x15')](_0x45b4f0)['send'](_0x105ed0);};}exports[_0xc2e8('0x24')]=function(_0x142019,_0x797605){var _0x528ab1={},_0x777c51={},_0x3717d7={'count':0x0,'rows':[]};var _0x1095de=db[_0xc2e8('0x25')][_0xc2e8('0x26')];_0x777c51['model']=_['keys'](_0x1095de);var _0x1a68cf={'dateStart':_0x142019[_0xc2e8('0x27')]['dateStart'],'dateEnd':_0x142019[_0xc2e8('0x27')]['dateEnd']};delete _0x142019['query'][_0xc2e8('0x28')];delete _0x142019[_0xc2e8('0x27')][_0xc2e8('0x29')];_0x777c51['query']=_['keys'](_0x142019[_0xc2e8('0x27')]);_0x777c51[_0xc2e8('0x2a')]=_['intersection'](_0x777c51[_0xc2e8('0x2b')],_0x777c51[_0xc2e8('0x27')]);_0x528ab1['attributes']=_['intersection'](_0x777c51[_0xc2e8('0x2b')],qs[_0xc2e8('0x2c')](_0x142019[_0xc2e8('0x27')][_0xc2e8('0x2c')]));_0x528ab1[_0xc2e8('0x2d')]=_0x528ab1[_0xc2e8('0x2d')][_0xc2e8('0x2e')]?_0x528ab1[_0xc2e8('0x2d')]:_0x777c51[_0xc2e8('0x2b')];if(!_0x142019[_0xc2e8('0x27')][_0xc2e8('0x2f')](_0xc2e8('0x30'))){_0x528ab1[_0xc2e8('0x19')]=qs[_0xc2e8('0x19')](_0x142019['query']['limit']);_0x528ab1[_0xc2e8('0x18')]=qs[_0xc2e8('0x18')](_0x142019[_0xc2e8('0x27')][_0xc2e8('0x18')]);}_0x528ab1[_0xc2e8('0x31')]=qs[_0xc2e8('0x32')](_0x142019[_0xc2e8('0x27')][_0xc2e8('0x32')]);_0x528ab1[_0xc2e8('0x33')]=qs[_0xc2e8('0x2a')](_[_0xc2e8('0x34')](_0x142019[_0xc2e8('0x27')],_0x777c51[_0xc2e8('0x2a')]));if(_0x1a68cf[_0xc2e8('0x28')]){if(_0x1a68cf[_0xc2e8('0x29')]){_0x1a68cf['dateEnd']=moment(_0x1a68cf['dateEnd'])[_0xc2e8('0x35')](0x1,_0xc2e8('0x36'));}else{_0x1a68cf[_0xc2e8('0x29')]=moment(_0x1a68cf[_0xc2e8('0x28')])[_0xc2e8('0x35')](0x1,'day');}_['merge'](_0x528ab1[_0xc2e8('0x33')],{'createdAt':{'$gte':_0x1a68cf[_0xc2e8('0x28')],'$lte':_0x1a68cf[_0xc2e8('0x29')]}});}if(_0x142019['query']['filter']){_0x528ab1['where']=_[_0xc2e8('0x37')](_0x528ab1['where'],{'$or':_['map'](_0x528ab1[_0xc2e8('0x2d')],function(_0x21b647){var _0x26e024={};_0x26e024[_0x21b647]={'$like':'%'+_0x142019[_0xc2e8('0x27')][_0xc2e8('0x38')]+'%'};return _0x26e024;})});}_0x528ab1=_[_0xc2e8('0x37')]({},_0x528ab1,_0x142019[_0xc2e8('0x39')]);var _0x3925a2={'where':_0x528ab1[_0xc2e8('0x33')]};return db[_0xc2e8('0x25')]['count'](_0x3925a2)['then'](function(_0x5736d5){_0x3717d7[_0xc2e8('0x17')]=_0x5736d5;if(_0x142019[_0xc2e8('0x27')][_0xc2e8('0x3a')]){_0x528ab1[_0xc2e8('0x3b')]=[{'all':!![]}];}return db[_0xc2e8('0x25')][_0xc2e8('0x3c')](_0x528ab1);})[_0xc2e8('0x1f')](function(_0xe76dfc){_0x3717d7[_0xc2e8('0x3d')]=_0xe76dfc;return _0x3717d7;})['then'](respondWithFilteredResult(_0x797605,_0x528ab1))[_0xc2e8('0x3e')](handleError(_0x797605,null));};exports[_0xc2e8('0x3f')]=function(_0x5b90dc,_0x51e055){var _0x5541da={'raw':!![],'where':{'id':_0x5b90dc[_0xc2e8('0x40')]['id']}},_0x259dd6={};_0x259dd6[_0xc2e8('0x2b')]=_[_0xc2e8('0x41')](db[_0xc2e8('0x25')]['rawAttributes']);_0x259dd6[_0xc2e8('0x27')]=_[_0xc2e8('0x41')](_0x5b90dc[_0xc2e8('0x27')]);_0x259dd6[_0xc2e8('0x2a')]=_['intersection'](_0x259dd6[_0xc2e8('0x2b')],_0x259dd6['query']);_0x5541da['attributes']=_['intersection'](_0x259dd6['model'],qs['fields'](_0x5b90dc[_0xc2e8('0x27')]['fields']));_0x5541da['attributes']=_0x5541da['attributes'][_0xc2e8('0x2e')]?_0x5541da[_0xc2e8('0x2d')]:_0x259dd6['model'];if(_0x5b90dc[_0xc2e8('0x27')][_0xc2e8('0x3a')]){_0x5541da[_0xc2e8('0x3b')]=[{'all':!![]}];}_0x5541da=_[_0xc2e8('0x37')]({},_0x5541da,_0x5b90dc['options']);return db[_0xc2e8('0x25')][_0xc2e8('0x42')](_0x5541da)[_0xc2e8('0x1f')](handleEntityNotFound(_0x51e055,null))['then'](respondWithResult(_0x51e055,null))['catch'](handleError(_0x51e055,null));};exports[_0xc2e8('0x43')]=function(_0x16fa87,_0x3763ae){return db[_0xc2e8('0x25')][_0xc2e8('0x43')](_0x16fa87['body'],{})[_0xc2e8('0x1f')](respondWithResult(_0x3763ae,0xc9))[_0xc2e8('0x3e')](handleError(_0x3763ae,null));};exports[_0xc2e8('0x1e')]=function(_0x372598,_0x3ccb2f){if(_0x372598['body']['id']){delete _0x372598['body']['id'];}return db[_0xc2e8('0x25')][_0xc2e8('0x42')]({'where':{'id':_0x372598['params']['id']}})[_0xc2e8('0x1f')](handleEntityNotFound(_0x3ccb2f,null))[_0xc2e8('0x1f')](saveUpdates(_0x372598[_0xc2e8('0x44')],null))[_0xc2e8('0x1f')](respondWithResult(_0x3ccb2f,null))[_0xc2e8('0x3e')](handleError(_0x3ccb2f,null));};exports[_0xc2e8('0x20')]=function(_0x45f2f5,_0x592b84){return db[_0xc2e8('0x25')][_0xc2e8('0x42')]({'where':{'id':_0x45f2f5[_0xc2e8('0x40')]['id']}})['then'](handleEntityNotFound(_0x592b84,null))[_0xc2e8('0x1f')](removeEntity(_0x592b84,null))[_0xc2e8('0x3e')](handleError(_0x592b84,null));};exports[_0xc2e8('0x45')]=function(_0x1ec003,_0x470dcc){return db[_0xc2e8('0x25')]['describe']()[_0xc2e8('0x1f')](respondWithResult(_0x470dcc,null))['catch'](handleError(_0x470dcc,null));};function wrapUser(_0x24ec17){return function(_0x196902){var _0x566ba7=_0x24ec17[_0xc2e8('0x46')]({'plain':!![]});_0x566ba7[_0xc2e8('0x47')]=[];if(_0x196902){_0x566ba7['lastMessageAt']=_0x196902[_0xc2e8('0x48')];_0x566ba7[_0xc2e8('0x49')]=_0x196902;}else{_0x566ba7['lastMessageAt']=moment(0x0)['format'](_0xc2e8('0x4a'));_0x566ba7[_0xc2e8('0x49')]={};}return _0x566ba7;};}exports[_0xc2e8('0x4b')]=function(_0x516a3a,_0x383812,_0x3c16f0){var _0x4cfba3=[];return db[_0xc2e8('0x4c')][_0xc2e8('0x3c')]({'where':{'role':[_0xc2e8('0x4d'),'admin',_0xc2e8('0x4e')]},'attributes':['id','fullname',_0xc2e8('0x23'),'role',_0xc2e8('0x4f'),_0xc2e8('0x50'),_0xc2e8('0x51'),_0xc2e8('0x52'),_0xc2e8('0x53'),'showWebBar'],'order':qs['sort'](_0xc2e8('0x54')),'include':[{'model':db['VoiceQueue'],'as':_0xc2e8('0x55'),'attributes':['id',_0xc2e8('0x23'),'type'],'through':{'attributes':[]}}]})[_0xc2e8('0x1f')](function(_0x54c1ed){var _0x1af430=[];if(_0x54c1ed){_0x4cfba3=_0x54c1ed;for(var _0x2c9901=0x0;_0x2c9901<_0x54c1ed[_0xc2e8('0x2e')];_0x2c9901+=0x1){_0x4cfba3[_0x2c9901][_0xc2e8('0x47')]=[];_0x1af430[_0xc2e8('0x56')](db[_0xc2e8('0x25')][_0xc2e8('0x42')]({'where':{'FromId':[_0x516a3a['user']['id'],_0x54c1ed[_0x2c9901]['id']],'ToId':[_0x516a3a[_0xc2e8('0x4e')]['id'],_0x54c1ed[_0x2c9901]['id']],'ChatGroupId':null},'attributes':['id',_0xc2e8('0x48'),_0xc2e8('0x57'),_0xc2e8('0x58'),_0xc2e8('0x59'),_0xc2e8('0x44')],'order':qs['sort']('-createdAt'),'limit':0x1,'offset':0x0,'raw':!![]})[_0xc2e8('0x1f')](wrapUser(_0x54c1ed[_0x2c9901])));}return BPromise[_0xc2e8('0x5a')](_0x1af430);}return[];})['then'](function(_0x66918e){return{'rows':_0x66918e,'count':_0x66918e[_0xc2e8('0x2e')]};})['then'](respondWithResult(_0x383812,null))[_0xc2e8('0x3e')](handleError(_0x383812,null));};
\ No newline at end of file
+var _0x1ed0=['save','update','then','destroy','end','stack','name','send','index','ChatInternalMessage','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','add','day','merge','filter','map','options','includeAll','findAll','rows','catch','show','params','create','body','find','describe','get','messages','lastMessageAt','format','lastMessage','getUsers','User','admin','fullname','userpic','online','showWebBar','-online','VoiceQueue','VoiceQueues','type','user','FromId','ToId','read','-createdAt','all','fast-json-patch','request-promise','moment','mustache','util','path','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','register','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject'];(function(_0x29b609,_0x19d388){var _0x54c952=function(_0xb3c38d){while(--_0xb3c38d){_0x29b609['push'](_0x29b609['shift']());}};_0x54c952(++_0x19d388);}(_0x1ed0,0x103));var _0x01ed=function(_0x1163c3,_0x3aedc6){_0x1163c3=_0x1163c3-0x0;var _0x7a7cb5=_0x1ed0[_0x1163c3];return _0x7a7cb5;};'use strict';var jsonpatch=require(_0x01ed('0x0'));var rp=require(_0x01ed('0x1'));var moment=require(_0x01ed('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x01ed('0x3'));var util=require(_0x01ed('0x4'));var path=require(_0x01ed('0x5'));var sox=require(_0x01ed('0x6'));var csv=require('to-csv');var ejs=require(_0x01ed('0x7'));var fs=require('fs');var _=require(_0x01ed('0x8'));var squel=require(_0x01ed('0x9'));var crypto=require('crypto');var jsforce=require(_0x01ed('0xa'));var deskjs=require(_0x01ed('0xb'));var toCsv=require(_0x01ed('0xc'));var querystring=require(_0x01ed('0xd'));var Papa=require(_0x01ed('0xe'));var qs=require('../../components/parsers/qs');var logger=require(_0x01ed('0xf'))(_0x01ed('0x10'));var utils=require(_0x01ed('0x11'));var config=require(_0x01ed('0x12'));var db=require(_0x01ed('0x13'))['db'];var socket=require(_0x01ed('0x14'))({'host':_0x01ed('0x15'),'port':0x18eb});require('./chatInternalMessage.socket')[_0x01ed('0x16')](socket);function respondWithStatusCode(_0x5abf0e,_0x33b50d){_0x33b50d=_0x33b50d||0xcc;return function(_0x402ce9){if(_0x402ce9){return _0x5abf0e[_0x01ed('0x17')](_0x33b50d);}return _0x5abf0e[_0x01ed('0x18')](_0x33b50d)['end']();};}function respondWithResult(_0x622b62,_0x5cfb26){_0x5cfb26=_0x5cfb26||0xc8;return function(_0x18d6b9){if(_0x18d6b9){return _0x622b62[_0x01ed('0x18')](_0x5cfb26)[_0x01ed('0x19')](_0x18d6b9);}};}function respondWithFilteredResult(_0x141f32,_0x2b966e){return function(_0x55423e){if(_0x55423e){var _0x5c3dfa=_0x55423e[_0x01ed('0x1a')],_0xff842f=_0x2b966e[_0x01ed('0x1b')],_0x4ed10c=_0x2b966e['offset']+_0x2b966e[_0x01ed('0x1c')],_0x40cf48;if(_0x4ed10c>=_0x5c3dfa){_0x4ed10c=_0x5c3dfa;_0x40cf48=0xc8;}else{_0x40cf48=0xce;}_0x141f32[_0x01ed('0x18')](_0x40cf48);return _0x141f32['set'](_0x01ed('0x1d'),_0xff842f+'-'+_0x4ed10c+'/'+_0x5c3dfa)[_0x01ed('0x19')](_0x55423e);}return null;};}function patchUpdates(_0x50397a){return function(_0x6c23ad){try{jsonpatch[_0x01ed('0x1e')](_0x6c23ad,_0x50397a,!![]);}catch(_0x568d7a){return BPromise[_0x01ed('0x1f')](_0x568d7a);}return _0x6c23ad[_0x01ed('0x20')]();};}function saveUpdates(_0x390eec,_0x15d20b){return function(_0x34f753){if(_0x34f753){return _0x34f753[_0x01ed('0x21')](_0x390eec)[_0x01ed('0x22')](function(_0x17759b){return _0x17759b;});}return null;};}function removeEntity(_0x52c1a4,_0x3769bb){return function(_0x5ea2a5){if(_0x5ea2a5){return _0x5ea2a5[_0x01ed('0x23')]()[_0x01ed('0x22')](function(){_0x52c1a4[_0x01ed('0x18')](0xcc)[_0x01ed('0x24')]();});}};}function handleEntityNotFound(_0x3fc076,_0x296825){return function(_0x48e5b4){if(!_0x48e5b4){_0x3fc076['sendStatus'](0x194);}return _0x48e5b4;};}function handleError(_0x6d54cd,_0x53a857){_0x53a857=_0x53a857||0x1f4;return function(_0x4f64b2){logger['error'](_0x4f64b2[_0x01ed('0x25')]);if(_0x4f64b2[_0x01ed('0x26')]){delete _0x4f64b2[_0x01ed('0x26')];}_0x6d54cd[_0x01ed('0x18')](_0x53a857)[_0x01ed('0x27')](_0x4f64b2);};}exports[_0x01ed('0x28')]=function(_0xadd2c,_0x17b87b){var _0x4e713c={},_0x2066b3={},_0x15cc3a={'count':0x0,'rows':[]};var _0x39fde3=db[_0x01ed('0x29')][_0x01ed('0x2a')];_0x2066b3[_0x01ed('0x2b')]=_[_0x01ed('0x2c')](_0x39fde3);var _0x4c29d4={'dateStart':_0xadd2c[_0x01ed('0x2d')][_0x01ed('0x2e')],'dateEnd':_0xadd2c[_0x01ed('0x2d')][_0x01ed('0x2f')]};delete _0xadd2c[_0x01ed('0x2d')][_0x01ed('0x2e')];delete _0xadd2c[_0x01ed('0x2d')][_0x01ed('0x2f')];_0x2066b3[_0x01ed('0x2d')]=_[_0x01ed('0x2c')](_0xadd2c[_0x01ed('0x2d')]);_0x2066b3['filters']=_[_0x01ed('0x30')](_0x2066b3['model'],_0x2066b3['query']);_0x4e713c[_0x01ed('0x31')]=_[_0x01ed('0x30')](_0x2066b3[_0x01ed('0x2b')],qs[_0x01ed('0x32')](_0xadd2c[_0x01ed('0x2d')][_0x01ed('0x32')]));_0x4e713c['attributes']=_0x4e713c[_0x01ed('0x31')][_0x01ed('0x33')]?_0x4e713c[_0x01ed('0x31')]:_0x2066b3[_0x01ed('0x2b')];if(!_0xadd2c['query'][_0x01ed('0x34')](_0x01ed('0x35'))){_0x4e713c['limit']=qs[_0x01ed('0x1c')](_0xadd2c[_0x01ed('0x2d')][_0x01ed('0x1c')]);_0x4e713c[_0x01ed('0x1b')]=qs[_0x01ed('0x1b')](_0xadd2c['query'][_0x01ed('0x1b')]);}_0x4e713c[_0x01ed('0x36')]=qs[_0x01ed('0x37')](_0xadd2c[_0x01ed('0x2d')][_0x01ed('0x37')]);_0x4e713c[_0x01ed('0x38')]=qs[_0x01ed('0x39')](_[_0x01ed('0x3a')](_0xadd2c[_0x01ed('0x2d')],_0x2066b3[_0x01ed('0x39')]));if(_0x4c29d4['dateStart']){if(_0x4c29d4[_0x01ed('0x2f')]){_0x4c29d4[_0x01ed('0x2f')]=moment(_0x4c29d4[_0x01ed('0x2f')])[_0x01ed('0x3b')](0x1,_0x01ed('0x3c'));}else{_0x4c29d4[_0x01ed('0x2f')]=moment(_0x4c29d4[_0x01ed('0x2e')])[_0x01ed('0x3b')](0x1,_0x01ed('0x3c'));}_[_0x01ed('0x3d')](_0x4e713c['where'],{'createdAt':{'$gte':_0x4c29d4[_0x01ed('0x2e')],'$lte':_0x4c29d4['dateEnd']}});}if(_0xadd2c[_0x01ed('0x2d')][_0x01ed('0x3e')]){_0x4e713c[_0x01ed('0x38')]=_['merge'](_0x4e713c[_0x01ed('0x38')],{'$or':_[_0x01ed('0x3f')](_0x4e713c[_0x01ed('0x31')],function(_0x3f8750){var _0x49474b={};_0x49474b[_0x3f8750]={'$like':'%'+_0xadd2c['query'][_0x01ed('0x3e')]+'%'};return _0x49474b;})});}_0x4e713c=_['merge']({},_0x4e713c,_0xadd2c[_0x01ed('0x40')]);var _0x1c40f9={'where':_0x4e713c[_0x01ed('0x38')]};return db[_0x01ed('0x29')][_0x01ed('0x1a')](_0x1c40f9)[_0x01ed('0x22')](function(_0x2fd419){_0x15cc3a[_0x01ed('0x1a')]=_0x2fd419;if(_0xadd2c[_0x01ed('0x2d')][_0x01ed('0x41')]){_0x4e713c['include']=[{'all':!![]}];}return db['ChatInternalMessage'][_0x01ed('0x42')](_0x4e713c);})['then'](function(_0x1e8064){_0x15cc3a[_0x01ed('0x43')]=_0x1e8064;return _0x15cc3a;})[_0x01ed('0x22')](respondWithFilteredResult(_0x17b87b,_0x4e713c))[_0x01ed('0x44')](handleError(_0x17b87b,null));};exports[_0x01ed('0x45')]=function(_0x3424b6,_0xfc4ff1){var _0x4a7748={'raw':!![],'where':{'id':_0x3424b6[_0x01ed('0x46')]['id']}},_0x19baf1={};_0x19baf1[_0x01ed('0x2b')]=_['keys'](db[_0x01ed('0x29')][_0x01ed('0x2a')]);_0x19baf1[_0x01ed('0x2d')]=_[_0x01ed('0x2c')](_0x3424b6[_0x01ed('0x2d')]);_0x19baf1[_0x01ed('0x39')]=_[_0x01ed('0x30')](_0x19baf1[_0x01ed('0x2b')],_0x19baf1[_0x01ed('0x2d')]);_0x4a7748[_0x01ed('0x31')]=_[_0x01ed('0x30')](_0x19baf1[_0x01ed('0x2b')],qs[_0x01ed('0x32')](_0x3424b6[_0x01ed('0x2d')][_0x01ed('0x32')]));_0x4a7748[_0x01ed('0x31')]=_0x4a7748['attributes'][_0x01ed('0x33')]?_0x4a7748['attributes']:_0x19baf1[_0x01ed('0x2b')];if(_0x3424b6[_0x01ed('0x2d')][_0x01ed('0x41')]){_0x4a7748['include']=[{'all':!![]}];}_0x4a7748=_[_0x01ed('0x3d')]({},_0x4a7748,_0x3424b6[_0x01ed('0x40')]);return db[_0x01ed('0x29')]['find'](_0x4a7748)['then'](handleEntityNotFound(_0xfc4ff1,null))[_0x01ed('0x22')](respondWithResult(_0xfc4ff1,null))['catch'](handleError(_0xfc4ff1,null));};exports[_0x01ed('0x47')]=function(_0x14ea05,_0x4ffbff){return db[_0x01ed('0x29')]['create'](_0x14ea05[_0x01ed('0x48')],{})[_0x01ed('0x22')](respondWithResult(_0x4ffbff,0xc9))[_0x01ed('0x44')](handleError(_0x4ffbff,null));};exports[_0x01ed('0x21')]=function(_0x1a1def,_0x35ae8d){if(_0x1a1def[_0x01ed('0x48')]['id']){delete _0x1a1def[_0x01ed('0x48')]['id'];}return db[_0x01ed('0x29')][_0x01ed('0x49')]({'where':{'id':_0x1a1def[_0x01ed('0x46')]['id']}})['then'](handleEntityNotFound(_0x35ae8d,null))['then'](saveUpdates(_0x1a1def[_0x01ed('0x48')],null))[_0x01ed('0x22')](respondWithResult(_0x35ae8d,null))[_0x01ed('0x44')](handleError(_0x35ae8d,null));};exports['destroy']=function(_0xfc9d64,_0x18412b){return db[_0x01ed('0x29')]['find']({'where':{'id':_0xfc9d64[_0x01ed('0x46')]['id']}})['then'](handleEntityNotFound(_0x18412b,null))[_0x01ed('0x22')](removeEntity(_0x18412b,null))[_0x01ed('0x44')](handleError(_0x18412b,null));};exports[_0x01ed('0x4a')]=function(_0x2ab088,_0x13e2c6){return db['ChatInternalMessage']['describe']()[_0x01ed('0x22')](respondWithResult(_0x13e2c6,null))[_0x01ed('0x44')](handleError(_0x13e2c6,null));};function wrapUser(_0x599050){return function(_0x3c554c){var _0x3a84f6=_0x599050[_0x01ed('0x4b')]({'plain':!![]});_0x3a84f6[_0x01ed('0x4c')]=[];if(_0x3c554c){_0x3a84f6[_0x01ed('0x4d')]=_0x3c554c['createdAt'];_0x3a84f6['lastMessage']=_0x3c554c;}else{_0x3a84f6[_0x01ed('0x4d')]=moment(0x0)[_0x01ed('0x4e')]('YYYY-MM-DD\x20HH:mm:ss');_0x3a84f6[_0x01ed('0x4f')]={};}return _0x3a84f6;};}exports[_0x01ed('0x50')]=function(_0x22e6cf,_0x1f380d,_0x5bd368){var _0x1507c5=[];return db[_0x01ed('0x51')][_0x01ed('0x42')]({'where':{'role':['agent',_0x01ed('0x52'),'user']},'attributes':['id',_0x01ed('0x53'),_0x01ed('0x26'),'role',_0x01ed('0x54'),'internal',_0x01ed('0x55'),'lastLoginAt','allowmessenger',_0x01ed('0x56')],'order':qs[_0x01ed('0x37')](_0x01ed('0x57')),'include':[{'model':db[_0x01ed('0x58')],'as':_0x01ed('0x59'),'attributes':['id',_0x01ed('0x26'),_0x01ed('0x5a')],'through':{'attributes':[]}}]})[_0x01ed('0x22')](function(_0x5a177d){var _0x2d0d8f=[];if(_0x5a177d){_0x1507c5=_0x5a177d;for(var _0x29d635=0x0;_0x29d635<_0x5a177d[_0x01ed('0x33')];_0x29d635+=0x1){_0x1507c5[_0x29d635]['messages']=[];_0x2d0d8f['push'](db[_0x01ed('0x29')]['find']({'where':{'FromId':[_0x22e6cf[_0x01ed('0x5b')]['id'],_0x5a177d[_0x29d635]['id']],'ToId':[_0x22e6cf['user']['id'],_0x5a177d[_0x29d635]['id']],'ChatGroupId':null},'attributes':['id','createdAt',_0x01ed('0x5c'),_0x01ed('0x5d'),_0x01ed('0x5e'),_0x01ed('0x48')],'order':qs[_0x01ed('0x37')](_0x01ed('0x5f')),'limit':0x1,'offset':0x0,'raw':!![]})['then'](wrapUser(_0x5a177d[_0x29d635])));}return BPromise[_0x01ed('0x60')](_0x2d0d8f);}return[];})['then'](function(_0x344ef1){return{'rows':_0x344ef1,'count':_0x344ef1['length']};})['then'](respondWithResult(_0x1f380d,null))[_0x01ed('0x44')](handleError(_0x1f380d,null));};
\ No newline at end of file
index 5cd5127..079f748 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8008=['events','../../mysqldb','ChatInternalMessage','setMaxListeners','remove','emit','hasOwnProperty','hook','exports'];(function(_0x2a16c8,_0x336d60){var _0xa0342d=function(_0x1fc05a){while(--_0x1fc05a){_0x2a16c8['push'](_0x2a16c8['shift']());}};_0xa0342d(++_0x336d60);}(_0x8008,0xc6));var _0x8800=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x8008[_0x20a584];return _0x4b41a8;};'use strict';var EventEmitter=require(_0x8800('0x0'));var ChatInternalMessage=require(_0x8800('0x1'))['db'][_0x8800('0x2')];var ChatInternalMessageEvents=new EventEmitter();ChatInternalMessageEvents[_0x8800('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x8800('0x4')};function emitEvent(_0x599628){return function(_0x4eabde,_0xb44ef6,_0x1e7768){ChatInternalMessageEvents[_0x8800('0x5')](_0x599628+':'+_0x4eabde['id'],_0x4eabde);ChatInternalMessageEvents[_0x8800('0x5')](_0x599628,_0x4eabde);_0x1e7768(null);};}for(var e in events){if(events[_0x8800('0x6')](e)){var event=events[e];ChatInternalMessage[_0x8800('0x7')](e,emitEvent(event));}}module[_0x8800('0x8')]=ChatInternalMessageEvents;
\ No newline at end of file
+var _0x6d51=['update','remove','emit','hasOwnProperty','hook','exports','../../mysqldb','ChatInternalMessage','setMaxListeners','save'];(function(_0x39d544,_0x35c14f){var _0x5a5ff2=function(_0x2271fb){while(--_0x2271fb){_0x39d544['push'](_0x39d544['shift']());}};_0x5a5ff2(++_0x35c14f);}(_0x6d51,0x114));var _0x16d5=function(_0xa48a17,_0x5c16e4){_0xa48a17=_0xa48a17-0x0;var _0x43d476=_0x6d51[_0xa48a17];return _0x43d476;};'use strict';var EventEmitter=require('events');var ChatInternalMessage=require(_0x16d5('0x0'))['db'][_0x16d5('0x1')];var ChatInternalMessageEvents=new EventEmitter();ChatInternalMessageEvents[_0x16d5('0x2')](0x0);var events={'afterCreate':_0x16d5('0x3'),'afterUpdate':_0x16d5('0x4'),'afterDestroy':_0x16d5('0x5')};function emitEvent(_0x4a7f13){return function(_0x408e6f,_0x535b41,_0x35dee8){ChatInternalMessageEvents['emit'](_0x4a7f13+':'+_0x408e6f['id'],_0x408e6f);ChatInternalMessageEvents[_0x16d5('0x6')](_0x4a7f13,_0x408e6f);_0x35dee8(null);};}for(var e in events){if(events[_0x16d5('0x7')](e)){var event=events[e];ChatInternalMessage[_0x16d5('0x8')](e,emitEvent(event));}}module[_0x16d5('0x9')]=ChatInternalMessageEvents;
\ No newline at end of file
index 9c319d3..a41f256 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x028a=['request-promise','./chatInternalMessage.attributes','exports','define','ChatInternalMessage','chat_internal_messages','utf8mb4_unicode_ci','util','api'];(function(_0x1780f8,_0x11ba93){var _0x33a410=function(_0x2a015f){while(--_0x2a015f){_0x1780f8['push'](_0x1780f8['shift']());}};_0x33a410(++_0x11ba93);}(_0x028a,0x130));var _0xa028=function(_0x28ffd3,_0x6551c2){_0x28ffd3=_0x28ffd3-0x0;var _0x6f98c1=_0x028a[_0x28ffd3];return _0x6f98c1;};'use strict';var _=require('lodash');var util=require(_0xa028('0x0'));var logger=require('../../config/logger')(_0xa028('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xa028('0x2'));var attributes=require(_0xa028('0x3'));module[_0xa028('0x4')]=function(_0x20d7de,_0x2dfea2){return _0x20d7de[_0xa028('0x5')](_0xa028('0x6'),attributes,{'tableName':_0xa028('0x7'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':_0xa028('0x8')});};
\ No newline at end of file
+var _0x381a=['utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','bluebird','./chatInternalMessage.attributes','define','ChatInternalMessage'];(function(_0x24c40f,_0x2423f5){var _0x15769f=function(_0xe832a){while(--_0xe832a){_0x24c40f['push'](_0x24c40f['shift']());}};_0x15769f(++_0x2423f5);}(_0x381a,0x7a));var _0xa381=function(_0x1395d7,_0x183dbf){_0x1395d7=_0x1395d7-0x0;var _0x4541c5=_0x381a[_0x1395d7];return _0x4541c5;};'use strict';var _=require(_0xa381('0x0'));var util=require(_0xa381('0x1'));var logger=require(_0xa381('0x2'))(_0xa381('0x3'));var moment=require('moment');var BPromise=require(_0xa381('0x4'));var rp=require('request-promise');var attributes=require(_0xa381('0x5'));module['exports']=function(_0x24c7ae,_0x5dde40){return _0x24c7ae[_0xa381('0x6')](_0xa381('0x7'),attributes,{'tableName':'chat_internal_messages','paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xa381('0x8'),'collate':_0xa381('0x9')});};
\ No newline at end of file
index 14db57e..43fd52d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ad9=['bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','./chatInternalMessage.socket','register','request','then','info','ChatInternalMessage,\x20%s,\x20%s','request\x20sent','ChatInternalMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','util','moment'];(function(_0xcfa98c,_0x2670be){var _0x4312de=function(_0x5026c3){while(--_0x5026c3){_0xcfa98c['push'](_0xcfa98c['shift']());}};_0x4312de(++_0x2670be);}(_0x6ad9,0xce));var _0x96ad=function(_0x25be4f,_0x571326){_0x25be4f=_0x25be4f-0x0;var _0x5450aa=_0x6ad9[_0x25be4f];return _0x5450aa;};'use strict';var _=require('lodash');var util=require(_0x96ad('0x0'));var moment=require(_0x96ad('0x1'));var BPromise=require(_0x96ad('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x96ad('0x3'))['db'];var utils=require(_0x96ad('0x4'));var logger=require(_0x96ad('0x5'))(_0x96ad('0x6'));var config=require(_0x96ad('0x7'));var jayson=require(_0x96ad('0x8'));var client=jayson[_0x96ad('0x9')][_0x96ad('0xa')]({'port':0x232a});var socket=require(_0x96ad('0xb'))({'host':_0x96ad('0xc'),'port':0x18eb});require(_0x96ad('0xd'))[_0x96ad('0xe')](socket);function respondWithRpcPromise(_0x21019e,_0x4a6670,_0x279f13){return new BPromise(function(_0x3b3765,_0x2e161c){return client[_0x96ad('0xf')](_0x21019e,_0x279f13)[_0x96ad('0x10')](function(_0x2d9d23){logger[_0x96ad('0x11')](_0x96ad('0x12'),_0x4a6670,_0x96ad('0x13'));logger['debug'](_0x96ad('0x14'),_0x4a6670,_0x96ad('0x13'),JSON[_0x96ad('0x15')](_0x2d9d23));if(_0x2d9d23[_0x96ad('0x16')]){if(_0x2d9d23[_0x96ad('0x16')][_0x96ad('0x17')]===0x1f4){logger['error']('ChatInternalMessage,\x20%s,\x20%s',_0x4a6670,_0x2d9d23['error'][_0x96ad('0x18')]);return _0x2e161c(_0x2d9d23['error'][_0x96ad('0x18')]);}logger['error'](_0x96ad('0x12'),_0x4a6670,_0x2d9d23['error'][_0x96ad('0x18')]);return _0x3b3765(_0x2d9d23[_0x96ad('0x16')][_0x96ad('0x18')]);}else{logger[_0x96ad('0x11')](_0x96ad('0x12'),_0x4a6670,_0x96ad('0x13'));_0x3b3765(_0x2d9d23['result'][_0x96ad('0x18')]);}})[_0x96ad('0x19')](function(_0x3b54c3){logger[_0x96ad('0x16')](_0x96ad('0x12'),_0x4a6670,_0x3b54c3);_0x2e161c(_0x3b54c3);});});}
\ No newline at end of file
+var _0x560b=['stringify','code','error','ChatInternalMessage,\x20%s,\x20%s','message','result','catch','util','moment','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','./chatInternalMessage.socket','register','info','debug','ChatInternalMessage,\x20%s,\x20%s,\x20%s','request\x20sent'];(function(_0x4bef24,_0xe720cb){var _0x184324=function(_0x8cdb43){while(--_0x8cdb43){_0x4bef24['push'](_0x4bef24['shift']());}};_0x184324(++_0xe720cb);}(_0x560b,0xcf));var _0xb560=function(_0x2906da,_0x1b261e){_0x2906da=_0x2906da-0x0;var _0x617224=_0x560b[_0x2906da];return _0x617224;};'use strict';var _=require('lodash');var util=require(_0xb560('0x0'));var moment=require(_0xb560('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0xb560('0x2'))['db'];var utils=require(_0xb560('0x3'));var logger=require(_0xb560('0x4'))(_0xb560('0x5'));var config=require(_0xb560('0x6'));var jayson=require(_0xb560('0x7'));var client=jayson[_0xb560('0x8')][_0xb560('0x9')]({'port':0x232a});var socket=require(_0xb560('0xa'))({'host':_0xb560('0xb'),'port':0x18eb});require(_0xb560('0xc'))[_0xb560('0xd')](socket);function respondWithRpcPromise(_0x105ebe,_0x207ebc,_0x35381a){return new BPromise(function(_0x4649,_0x2ff0a7){return client['request'](_0x105ebe,_0x35381a)['then'](function(_0x286a18){logger[_0xb560('0xe')]('ChatInternalMessage,\x20%s,\x20%s',_0x207ebc,'request\x20sent');logger[_0xb560('0xf')](_0xb560('0x10'),_0x207ebc,_0xb560('0x11'),JSON[_0xb560('0x12')](_0x286a18));if(_0x286a18['error']){if(_0x286a18['error'][_0xb560('0x13')]===0x1f4){logger[_0xb560('0x14')](_0xb560('0x15'),_0x207ebc,_0x286a18[_0xb560('0x14')][_0xb560('0x16')]);return _0x2ff0a7(_0x286a18[_0xb560('0x14')][_0xb560('0x16')]);}logger[_0xb560('0x14')](_0xb560('0x15'),_0x207ebc,_0x286a18[_0xb560('0x14')]['message']);return _0x4649(_0x286a18[_0xb560('0x14')]['message']);}else{logger[_0xb560('0xe')]('ChatInternalMessage,\x20%s,\x20%s',_0x207ebc,_0xb560('0x11'));_0x4649(_0x286a18[_0xb560('0x17')][_0xb560('0x16')]);}})[_0xb560('0x18')](function(_0x5f4c36){logger['error'](_0xb560('0x15'),_0x207ebc,_0x5f4c36);_0x2ff0a7(_0x5f4c36);});});}
\ No newline at end of file
index e8d32c4..6b26122 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x91bc=['./chatInternalMessage.events','save','update','emit','removeListener','length'];(function(_0x2c26aa,_0x5a0b70){var _0x278e1e=function(_0x39fec5){while(--_0x39fec5){_0x2c26aa['push'](_0x2c26aa['shift']());}};_0x278e1e(++_0x5a0b70);}(_0x91bc,0x6c));var _0xc91b=function(_0x3e0d7c,_0x547c9e){_0x3e0d7c=_0x3e0d7c-0x0;var _0x95924f=_0x91bc[_0x3e0d7c];return _0x95924f;};'use strict';var ChatInternalMessageEvents=require(_0xc91b('0x0'));var events=[_0xc91b('0x1'),'remove',_0xc91b('0x2')];function createListener(_0xe5eb5a,_0x473123){return function(_0x4a45ea){_0x473123[_0xc91b('0x3')](_0xe5eb5a,_0x4a45ea);};}function removeListener(_0x1cfd3c,_0x91629e){return function(){ChatInternalMessageEvents[_0xc91b('0x4')](_0x1cfd3c,_0x91629e);};}exports['register']=function(_0x222e1d){for(var _0x1f524f=0x0,_0x51e524=events[_0xc91b('0x5')];_0x1f524f<_0x51e524;_0x1f524f++){var _0xd288ff=events[_0x1f524f];var _0x4c99c4=createListener('chatInternalMessage:'+_0xd288ff,_0x222e1d);ChatInternalMessageEvents['on'](_0xd288ff,_0x4c99c4);}};
\ No newline at end of file
+var _0xf829=['chatInternalMessage:','save','remove','emit','register'];(function(_0x4deff,_0x42c328){var _0x440123=function(_0x2d7dde){while(--_0x2d7dde){_0x4deff['push'](_0x4deff['shift']());}};_0x440123(++_0x42c328);}(_0xf829,0x182));var _0x9f82=function(_0x1a422a,_0x3468fd){_0x1a422a=_0x1a422a-0x0;var _0x4dcab4=_0xf829[_0x1a422a];return _0x4dcab4;};'use strict';var ChatInternalMessageEvents=require('./chatInternalMessage.events');var events=[_0x9f82('0x0'),_0x9f82('0x1'),'update'];function createListener(_0x3fd880,_0xdb06ae){return function(_0x3e7dd1){_0xdb06ae[_0x9f82('0x2')](_0x3fd880,_0x3e7dd1);};}function removeListener(_0x3f4281,_0x3020ad){return function(){ChatInternalMessageEvents['removeListener'](_0x3f4281,_0x3020ad);};}exports[_0x9f82('0x3')]=function(_0x39833e){for(var _0x511199=0x0,_0x1d3e85=events['length'];_0x511199<_0x1d3e85;_0x511199++){var _0x584494=events[_0x511199];var _0x5652a4=createListener(_0x9f82('0x4')+_0x584494,_0x39833e);ChatInternalMessageEvents['on'](_0x584494,_0x5652a4);}};
\ No newline at end of file
index 4380268..8786f50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x757a=['exports','util','path','../../components/interaction/service','../../config/environment','./chatInternalMessage.controller','get','isAuthenticated','index','/describe','/users','getUsers','show','post','create','put','/:id'];(function(_0x323c4b,_0x594080){var _0x1d71d4=function(_0x54a985){while(--_0x54a985){_0x323c4b['push'](_0x323c4b['shift']());}};_0x1d71d4(++_0x594080);}(_0x757a,0xde));var _0xa757=function(_0x3f9976,_0x3a837e){_0x3f9976=_0x3f9976-0x0;var _0x2c756d=_0x757a[_0x3f9976];return _0x2c756d;};'use strict';var multer=require('multer');var util=require(_0xa757('0x0'));var path=require(_0xa757('0x1'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xa757('0x2'));var config=require(_0xa757('0x3'));var controller=require(_0xa757('0x4'));router[_0xa757('0x5')]('/',auth[_0xa757('0x6')](),controller[_0xa757('0x7')]);router['get'](_0xa757('0x8'),auth[_0xa757('0x6')](),controller['describe']);router[_0xa757('0x5')](_0xa757('0x9'),auth[_0xa757('0x6')](),controller[_0xa757('0xa')]);router[_0xa757('0x5')]('/:id',auth[_0xa757('0x6')](),controller[_0xa757('0xb')]);router[_0xa757('0xc')]('/',auth[_0xa757('0x6')](),controller[_0xa757('0xd')]);router[_0xa757('0xe')](_0xa757('0xf'),controller['update']);router['delete']('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0xa757('0x10')]=router;
\ No newline at end of file
+var _0xbaf0=['update','delete','destroy','exports','util','path','express','Router','../../components/auth/service','../../components/interaction/service','./chatInternalMessage.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','put'];(function(_0x43c466,_0x161585){var _0x488769=function(_0x453625){while(--_0x453625){_0x43c466['push'](_0x43c466['shift']());}};_0x488769(++_0x161585);}(_0xbaf0,0x12a));var _0x0baf=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0xbaf0[_0x19e35c];return _0x3e1fe8;};'use strict';var multer=require('multer');var util=require(_0x0baf('0x0'));var path=require(_0x0baf('0x1'));var express=require(_0x0baf('0x2'));var router=express[_0x0baf('0x3')]();var auth=require(_0x0baf('0x4'));var interaction=require(_0x0baf('0x5'));var config=require('../../config/environment');var controller=require(_0x0baf('0x6'));router[_0x0baf('0x7')]('/',auth[_0x0baf('0x8')](),controller[_0x0baf('0x9')]);router[_0x0baf('0x7')](_0x0baf('0xa'),auth[_0x0baf('0x8')](),controller[_0x0baf('0xb')]);router[_0x0baf('0x7')]('/users',auth[_0x0baf('0x8')](),controller['getUsers']);router[_0x0baf('0x7')](_0x0baf('0xc'),auth[_0x0baf('0x8')](),controller[_0x0baf('0xd')]);router[_0x0baf('0xe')]('/',auth[_0x0baf('0x8')](),controller[_0x0baf('0xf')]);router[_0x0baf('0x10')](_0x0baf('0xc'),controller[_0x0baf('0x11')]);router[_0x0baf('0x12')]('/:id',auth['isAuthenticated'](),controller[_0x0baf('0x13')]);module[_0x0baf('0x14')]=router;
\ No newline at end of file
index 2ce3723..6dbe67e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8822=['sequelize','exports','TEXT','medium','BOOLEAN','out','DATE'];(function(_0x45df40,_0x1f3ddc){var _0x2296a5=function(_0x45a766){while(--_0x45a766){_0x45df40['push'](_0x45df40['shift']());}};_0x2296a5(++_0x1f3ddc);}(_0x8822,0x13b));var _0x2882=function(_0x533505,_0x3cf939){_0x533505=_0x533505-0x0;var _0x37c301=_0x8822[_0x533505];return _0x37c301;};'use strict';var Sequelize=require(_0x2882('0x0'));module[_0x2882('0x1')]={'body':{'type':Sequelize[_0x2882('0x2')](_0x2882('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0x2882('0x4')],'defaultValue':![]},'secret':{'type':Sequelize[_0x2882('0x4')],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in',_0x2882('0x5')),'defaultValue':_0x2882('0x5'),'allowNull':![]},'readAt':{'type':Sequelize[_0x2882('0x6')]}};
\ No newline at end of file
+var _0x94ce=['medium','BOOLEAN','out','DATE','sequelize','exports'];(function(_0x41c792,_0x27dd28){var _0x4402e2=function(_0x11168d){while(--_0x11168d){_0x41c792['push'](_0x41c792['shift']());}};_0x4402e2(++_0x27dd28);}(_0x94ce,0x1a8));var _0xe94c=function(_0xd08223,_0x40e304){_0xd08223=_0xd08223-0x0;var _0xf957ef=_0x94ce[_0xd08223];return _0xf957ef;};'use strict';var Sequelize=require(_0xe94c('0x0'));module[_0xe94c('0x1')]={'body':{'type':Sequelize['TEXT'](_0xe94c('0x2')),'allowNull':![]},'read':{'type':Sequelize[_0xe94c('0x3')],'defaultValue':![]},'secret':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in',_0xe94c('0x4')),'defaultValue':_0xe94c('0x4'),'allowNull':![]},'readAt':{'type':Sequelize[_0xe94c('0x5')]}};
\ No newline at end of file
index 6752a3d..fd3e3bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb53e=['read1stAt','YYYY-MM-DD\x20HH:mm:ss','interaction','role','null','AcceptMessage','acceptMessage','manual','interface','format','SIP/%s','channel','EventManager','acceptmessage','parse','formData','agent','[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','rejectMessage','event','fast-json-patch','request-promise','moment','bluebird','path','sox','ejs','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','localhost','register','jayson/promise','client','request','ChatMessage,\x20%s,\x20%s','request\x20sent','debug','ChatMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','status','end','offset','limit','set','Content-Range','json','apply','reject','save','update','then','sendStatus','stack','name','index','model','query','dateStart','dateEnd','keys','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','add','day','merge','where','filter','map','options','ChatMessage','count','includeAll','include','findAll','show','params','length','create','body','find','destroy','describe','chat-interactions','accept','chat','read','readAt','UserId','user','Contact','get','ChatInteraction','ChatInteractionId'];(function(_0x3b7db2,_0x5edd58){var _0x3a819e=function(_0x207221){while(--_0x207221){_0x3b7db2['push'](_0x3b7db2['shift']());}};_0x3a819e(++_0x5edd58);}(_0xb53e,0x168));var _0xeb53=function(_0x316753,_0x271ba4){_0x316753=_0x316753-0x0;var _0x1a6bbc=_0xb53e[_0x316753];return _0x1a6bbc;};'use strict';var jsonpatch=require(_0xeb53('0x0'));var rp=require(_0xeb53('0x1'));var moment=require(_0xeb53('0x2'));var BPromise=require(_0xeb53('0x3'));var Mustache=require('mustache');var util=require('util');var path=require(_0xeb53('0x4'));var sox=require(_0xeb53('0x5'));var csv=require('to-csv');var ejs=require(_0xeb53('0x6'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xeb53('0x7'));var jsforce=require('jsforce');var deskjs=require(_0xeb53('0x8'));var toCsv=require('to-csv');var querystring=require(_0xeb53('0x9'));var Papa=require(_0xeb53('0xa'));var qs=require(_0xeb53('0xb'));var logger=require(_0xeb53('0xc'))('api');var utils=require(_0xeb53('0xd'));var config=require(_0xeb53('0xe'));var db=require('../../mysqldb')['db'];var socket=require('socket.io-emitter')({'host':_0xeb53('0xf'),'port':0x18eb});require('./chatMessage.socket')[_0xeb53('0x10')](socket);var jayson=require(_0xeb53('0x11'));var client=jayson[_0xeb53('0x12')]['http']({'port':0x232c});var client9002=jayson[_0xeb53('0x12')]['http']({'port':0x232a});function respondWithRpcPromise(_0x55a11c,_0x240342,_0x232790,_0x47e488){return new BPromise(function(_0x4cec97,_0x58cc0e){var _0x53f64c=_0x47e488||client;return _0x53f64c[_0xeb53('0x13')](_0x55a11c,_0x232790)['then'](function(_0x243db1){logger['info'](_0xeb53('0x14'),_0x240342,_0xeb53('0x15'));logger[_0xeb53('0x16')](_0xeb53('0x17'),_0x240342,_0xeb53('0x15'),JSON[_0xeb53('0x18')](_0x243db1));if(_0x243db1[_0xeb53('0x19')]){if(_0x243db1['error'][_0xeb53('0x1a')]===0x1f4){logger[_0xeb53('0x19')](_0xeb53('0x14'),_0x240342,_0x243db1['error']['message']);return _0x58cc0e(_0x243db1[_0xeb53('0x19')][_0xeb53('0x1b')]);}logger[_0xeb53('0x19')]('ChatMessage,\x20%s,\x20%s',_0x240342,_0x243db1[_0xeb53('0x19')][_0xeb53('0x1b')]);return _0x4cec97(_0x243db1[_0xeb53('0x19')][_0xeb53('0x1b')]);}else{logger[_0xeb53('0x1c')](_0xeb53('0x14'),_0x240342,_0xeb53('0x15'));_0x4cec97(_0x243db1[_0xeb53('0x1d')]['message']);}})[_0xeb53('0x1e')](function(_0x2080b5){logger[_0xeb53('0x19')](_0xeb53('0x14'),_0x240342,_0x2080b5);_0x58cc0e(_0x2080b5);});});}function respondWithStatusCode(_0x3e42b1,_0x2db6ea){_0x2db6ea=_0x2db6ea||0xcc;return function(_0x422811){if(_0x422811){return _0x3e42b1['sendStatus'](_0x2db6ea);}return _0x3e42b1[_0xeb53('0x1f')](_0x2db6ea)[_0xeb53('0x20')]();};}function respondWithResult(_0x1dafad,_0x1b501c){_0x1b501c=_0x1b501c||0xc8;return function(_0x346330){if(_0x346330){return _0x1dafad[_0xeb53('0x1f')](_0x1b501c)['json'](_0x346330);}};}function respondWithFilteredResult(_0xb8f289,_0x20fd3c){return function(_0x593345){if(_0x593345){var _0x27bf11=_0x593345['count'],_0x70f35c=_0x20fd3c[_0xeb53('0x21')],_0x2e3a97=_0x20fd3c[_0xeb53('0x21')]+_0x20fd3c[_0xeb53('0x22')],_0x367e97;if(_0x2e3a97>=_0x27bf11){_0x2e3a97=_0x27bf11;_0x367e97=0xc8;}else{_0x367e97=0xce;}_0xb8f289[_0xeb53('0x1f')](_0x367e97);return _0xb8f289[_0xeb53('0x23')](_0xeb53('0x24'),_0x70f35c+'-'+_0x2e3a97+'/'+_0x27bf11)[_0xeb53('0x25')](_0x593345);}return null;};}function patchUpdates(_0x4db82e){return function(_0x113224){try{jsonpatch[_0xeb53('0x26')](_0x113224,_0x4db82e,!![]);}catch(_0x212e93){return BPromise[_0xeb53('0x27')](_0x212e93);}return _0x113224[_0xeb53('0x28')]();};}function saveUpdates(_0x5aaf1e,_0x3b48b0){return function(_0xaab91b){if(_0xaab91b){return _0xaab91b[_0xeb53('0x29')](_0x5aaf1e)['then'](function(_0x43164d){return _0x43164d;});}return null;};}function removeEntity(_0x5dc37b,_0x4946fe){return function(_0x178833){if(_0x178833){return _0x178833['destroy']()[_0xeb53('0x2a')](function(){_0x5dc37b[_0xeb53('0x1f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x19cb57,_0x1f9b63){return function(_0x29c23c){if(!_0x29c23c){_0x19cb57[_0xeb53('0x2b')](0x194);}return _0x29c23c;};}function handleError(_0x396b4f,_0x38feda){_0x38feda=_0x38feda||0x1f4;return function(_0x3174f8){logger[_0xeb53('0x19')](_0x3174f8[_0xeb53('0x2c')]);if(_0x3174f8[_0xeb53('0x2d')]){delete _0x3174f8[_0xeb53('0x2d')];}_0x396b4f['status'](_0x38feda)['send'](_0x3174f8);};}exports[_0xeb53('0x2e')]=function(_0x1c2ef5,_0x26a4c7){var _0x1ab7a4={},_0x35564c={},_0x524444={'count':0x0,'rows':[]};var _0xbacee3=db['ChatMessage']['rawAttributes'];_0x35564c[_0xeb53('0x2f')]=_['keys'](_0xbacee3);var _0x2576ae={'dateStart':_0x1c2ef5[_0xeb53('0x30')][_0xeb53('0x31')],'dateEnd':_0x1c2ef5['query'][_0xeb53('0x32')]};delete _0x1c2ef5[_0xeb53('0x30')][_0xeb53('0x31')];delete _0x1c2ef5[_0xeb53('0x30')][_0xeb53('0x32')];_0x35564c[_0xeb53('0x30')]=_[_0xeb53('0x33')](_0x1c2ef5[_0xeb53('0x30')]);_0x35564c[_0xeb53('0x34')]=_[_0xeb53('0x35')](_0x35564c['model'],_0x35564c['query']);_0x1ab7a4[_0xeb53('0x36')]=_[_0xeb53('0x35')](_0x35564c['model'],qs[_0xeb53('0x37')](_0x1c2ef5[_0xeb53('0x30')][_0xeb53('0x37')]));_0x1ab7a4[_0xeb53('0x36')]=_0x1ab7a4['attributes']['length']?_0x1ab7a4[_0xeb53('0x36')]:_0x35564c[_0xeb53('0x2f')];if(!_0x1c2ef5[_0xeb53('0x30')][_0xeb53('0x38')](_0xeb53('0x39'))){_0x1ab7a4[_0xeb53('0x22')]=qs[_0xeb53('0x22')](_0x1c2ef5[_0xeb53('0x30')][_0xeb53('0x22')]);_0x1ab7a4[_0xeb53('0x21')]=qs[_0xeb53('0x21')](_0x1c2ef5['query'][_0xeb53('0x21')]);}_0x1ab7a4[_0xeb53('0x3a')]=qs['sort'](_0x1c2ef5[_0xeb53('0x30')][_0xeb53('0x3b')]);_0x1ab7a4['where']=qs[_0xeb53('0x34')](_[_0xeb53('0x3c')](_0x1c2ef5[_0xeb53('0x30')],_0x35564c[_0xeb53('0x34')]));if(_0x2576ae['dateStart']){if(_0x2576ae[_0xeb53('0x32')]){_0x2576ae[_0xeb53('0x32')]=moment(_0x2576ae[_0xeb53('0x32')])[_0xeb53('0x3d')](0x1,_0xeb53('0x3e'));}else{_0x2576ae[_0xeb53('0x32')]=moment(_0x2576ae[_0xeb53('0x31')])[_0xeb53('0x3d')](0x1,_0xeb53('0x3e'));}_[_0xeb53('0x3f')](_0x1ab7a4[_0xeb53('0x40')],{'createdAt':{'$gte':_0x2576ae['dateStart'],'$lte':_0x2576ae[_0xeb53('0x32')]}});}if(_0x1c2ef5['query'][_0xeb53('0x41')]){_0x1ab7a4[_0xeb53('0x40')]=_['merge'](_0x1ab7a4[_0xeb53('0x40')],{'$or':_[_0xeb53('0x42')](_0x1ab7a4['attributes'],function(_0x2782b0){var _0x368cc1={};_0x368cc1[_0x2782b0]={'$like':'%'+_0x1c2ef5['query'][_0xeb53('0x41')]+'%'};return _0x368cc1;})});}_0x1ab7a4=_['merge']({},_0x1ab7a4,_0x1c2ef5[_0xeb53('0x43')]);var _0x22a009={'where':_0x1ab7a4['where']};return db[_0xeb53('0x44')][_0xeb53('0x45')](_0x22a009)[_0xeb53('0x2a')](function(_0x3adf9f){_0x524444[_0xeb53('0x45')]=_0x3adf9f;if(_0x1c2ef5[_0xeb53('0x30')][_0xeb53('0x46')]){_0x1ab7a4[_0xeb53('0x47')]=[{'all':!![]}];}return db[_0xeb53('0x44')][_0xeb53('0x48')](_0x1ab7a4);})[_0xeb53('0x2a')](function(_0x32dff2){_0x524444['rows']=_0x32dff2;return _0x524444;})[_0xeb53('0x2a')](respondWithFilteredResult(_0x26a4c7,_0x1ab7a4))[_0xeb53('0x1e')](handleError(_0x26a4c7,null));};exports[_0xeb53('0x49')]=function(_0x2733c2,_0x329017){var _0x18dc52={'raw':!![],'where':{'id':_0x2733c2[_0xeb53('0x4a')]['id']}},_0x23b48a={};_0x23b48a['model']=_[_0xeb53('0x33')](db[_0xeb53('0x44')]['rawAttributes']);_0x23b48a[_0xeb53('0x30')]=_[_0xeb53('0x33')](_0x2733c2[_0xeb53('0x30')]);_0x23b48a[_0xeb53('0x34')]=_['intersection'](_0x23b48a[_0xeb53('0x2f')],_0x23b48a[_0xeb53('0x30')]);_0x18dc52[_0xeb53('0x36')]=_[_0xeb53('0x35')](_0x23b48a[_0xeb53('0x2f')],qs[_0xeb53('0x37')](_0x2733c2[_0xeb53('0x30')][_0xeb53('0x37')]));_0x18dc52[_0xeb53('0x36')]=_0x18dc52[_0xeb53('0x36')][_0xeb53('0x4b')]?_0x18dc52[_0xeb53('0x36')]:_0x23b48a['model'];if(_0x2733c2[_0xeb53('0x30')][_0xeb53('0x46')]){_0x18dc52[_0xeb53('0x47')]=[{'all':!![]}];}_0x18dc52=_[_0xeb53('0x3f')]({},_0x18dc52,_0x2733c2[_0xeb53('0x43')]);return db[_0xeb53('0x44')]['find'](_0x18dc52)['then'](handleEntityNotFound(_0x329017,null))[_0xeb53('0x2a')](respondWithResult(_0x329017,null))[_0xeb53('0x1e')](handleError(_0x329017,null));};exports[_0xeb53('0x4c')]=function(_0x18355c,_0x142c76){return db[_0xeb53('0x44')]['create'](_0x18355c[_0xeb53('0x4d')],{})['then'](respondWithResult(_0x142c76,0xc9))[_0xeb53('0x1e')](handleError(_0x142c76,null));};exports[_0xeb53('0x29')]=function(_0x48f670,_0xbb736a){if(_0x48f670['body']['id']){delete _0x48f670[_0xeb53('0x4d')]['id'];}return db[_0xeb53('0x44')][_0xeb53('0x4e')]({'where':{'id':_0x48f670[_0xeb53('0x4a')]['id']}})[_0xeb53('0x2a')](handleEntityNotFound(_0xbb736a,null))[_0xeb53('0x2a')](saveUpdates(_0x48f670[_0xeb53('0x4d')],null))[_0xeb53('0x2a')](respondWithResult(_0xbb736a,null))[_0xeb53('0x1e')](handleError(_0xbb736a,null));};exports[_0xeb53('0x4f')]=function(_0x2906ac,_0x2f3294){return db[_0xeb53('0x44')][_0xeb53('0x4e')]({'where':{'id':_0x2906ac[_0xeb53('0x4a')]['id']}})[_0xeb53('0x2a')](handleEntityNotFound(_0x2f3294,null))[_0xeb53('0x2a')](removeEntity(_0x2f3294,null))[_0xeb53('0x1e')](handleError(_0x2f3294,null));};exports[_0xeb53('0x50')]=function(_0x336d1e,_0x5edb13){return db[_0xeb53('0x44')][_0xeb53('0x50')]()['then'](respondWithResult(_0x5edb13,null))[_0xeb53('0x1e')](handleError(_0x5edb13,null));};var interaction_log=require(_0xeb53('0xc'))(_0xeb53('0x51'));exports[_0xeb53('0x52')]=function(_0x39b37a,_0x262e4f,_0x27f6f0){var _0x4b488c={'channel':_0xeb53('0x53')};if(_0x39b37a[_0xeb53('0x4d')]['id']){delete _0x39b37a['body']['id'];}_0x39b37a['body'][_0xeb53('0x54')]=!![];_0x39b37a[_0xeb53('0x4d')][_0xeb53('0x55')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');_0x39b37a[_0xeb53('0x4d')]['UserId']=_0x39b37a[_0xeb53('0x4d')][_0xeb53('0x56')]||_0x39b37a[_0xeb53('0x57')]['id'];return db[_0xeb53('0x44')]['find']({'where':{'id':_0x39b37a[_0xeb53('0x4a')]['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0xeb53('0x58')}]})[_0xeb53('0x2a')](handleEntityNotFound(_0x262e4f,null))[_0xeb53('0x2a')](saveUpdates(_0x39b37a[_0xeb53('0x4d')],null))[_0xeb53('0x2a')](function(_0x3b628c){if(_0x3b628c){_0x4b488c[_0xeb53('0x1b')]=_0x3b628c[_0xeb53('0x59')]({'plain':!![]});return db[_0xeb53('0x5a')]['find']({'where':{'id':_0x3b628c[_0xeb53('0x5b')]}});}return null;})[_0xeb53('0x2a')](handleEntityNotFound(_0x262e4f,null))[_0xeb53('0x2a')](function(_0x409e44){if(_0x409e44){return _0x409e44[_0xeb53('0x29')]({'UserId':_0x39b37a[_0xeb53('0x4d')][_0xeb53('0x56')],'read1stAt':_['isNil'](_0x409e44[_0xeb53('0x5c')])?moment()['format'](_0xeb53('0x5d')):undefined});}return null;})[_0xeb53('0x2a')](function(_0x4a1150){if(_0x4a1150){_0x4b488c[_0xeb53('0x5e')]=_0x4a1150['get']({'plain':!![]});interaction_log['info']('[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x39b37a[_0xeb53('0x57')]['id'],_0x39b37a['user'][_0xeb53('0x2d')],_0x39b37a[_0xeb53('0x57')][_0xeb53('0x5f')],_0x4b488c[_0xeb53('0x5e')]['id'],_0x39b37a[_0xeb53('0x4d')]?JSON[_0xeb53('0x18')](_0x39b37a['body']):_0xeb53('0x60'));return respondWithRpcPromise(_0xeb53('0x61'),_0xeb53('0x62'),_0x4b488c);}return null;})[_0xeb53('0x2a')](function(_0x2e3698){if(_0x2e3698){if(_0x39b37a['body'][_0xeb53('0x63')]){_0x4b488c[_0xeb53('0x1b')][_0xeb53('0x64')]=util[_0xeb53('0x65')](_0xeb53('0x66'),_0x39b37a[_0xeb53('0x57')]['name']);_0x4b488c[_0xeb53('0x1b')][_0xeb53('0x67')]=_0x4b488c[_0xeb53('0x67')];_0x4b488c[_0xeb53('0x1b')]['event']=_0xeb53('0x52');return respondWithRpcPromise(_0xeb53('0x68'),_0xeb53('0x68'),{'event':_0xeb53('0x69'),'message':_['merge'](_0x4b488c['message'],JSON[_0xeb53('0x6a')](_0x4b488c[_0xeb53('0x5e')][_0xeb53('0x6b')]))},client9002)[_0xeb53('0x2a')](function(){return _0x4b488c;});}return _0x4b488c;}return null;})['then'](respondWithResult(_0x262e4f,null))[_0xeb53('0x1e')](handleError(_0x262e4f,null));};var interaction_log=require(_0xeb53('0xc'))(_0xeb53('0x51'));exports[_0xeb53('0x27')]=function(_0x431420,_0x132de7,_0x1ba276){var _0x4301f5={'agent':{},'channel':_0xeb53('0x53')};if(_0x431420[_0xeb53('0x4d')]['id']){delete _0x431420[_0xeb53('0x4d')]['id'];}_0x431420[_0xeb53('0x4d')][_0xeb53('0x56')]=_0x431420[_0xeb53('0x4d')][_0xeb53('0x56')]||_0x431420[_0xeb53('0x57')]['id'];_0x4301f5[_0xeb53('0x6c')]['id']=_0x431420[_0xeb53('0x4d')][_0xeb53('0x56')];return db[_0xeb53('0x44')][_0xeb53('0x4e')]({'where':{'id':_0x431420[_0xeb53('0x4a')]['id'],'UserId':null}})[_0xeb53('0x2a')](handleEntityNotFound(_0x132de7,null))[_0xeb53('0x2a')](function(_0xc548c5){if(_0xc548c5){_0x4301f5['message']=_0xc548c5[_0xeb53('0x59')]({'plain':!![]});return db[_0xeb53('0x5a')][_0xeb53('0x4e')]({'where':{'id':_0xc548c5['ChatInteractionId']}});}return null;})[_0xeb53('0x2a')](handleEntityNotFound(_0x132de7,null))[_0xeb53('0x2a')](function(_0x1e9c45){if(_0x1e9c45){_0x4301f5[_0xeb53('0x5e')]=_0x1e9c45[_0xeb53('0x59')]({'plain':!![]});interaction_log[_0xeb53('0x1c')](_0xeb53('0x6d'),_0x431420['user']['id'],_0x431420['user']['name'],_0x431420[_0xeb53('0x57')]['role'],_0x4301f5[_0xeb53('0x5e')]['id'],_0x431420[_0xeb53('0x4d')]?JSON[_0xeb53('0x18')](_0x431420[_0xeb53('0x4d')]):_0xeb53('0x60'));return respondWithRpcPromise(_0xeb53('0x6e'),_0xeb53('0x6f'),_0x4301f5);}return null;})[_0xeb53('0x2a')](function(_0x57ba08){if(_0x57ba08){_0x57ba08[_0xeb53('0x1b')][_0xeb53('0x64')]=util[_0xeb53('0x65')](_0xeb53('0x66'),_0x431420[_0xeb53('0x57')][_0xeb53('0x2d')]);_0x57ba08[_0xeb53('0x1b')][_0xeb53('0x67')]=_0x4301f5[_0xeb53('0x67')];_0x57ba08[_0xeb53('0x1b')][_0xeb53('0x70')]=_0xeb53('0x27');respondWithRpcPromise(_0xeb53('0x68'),'EventManager',{'event':'rejectmessage','message':_0x57ba08[_0xeb53('0x1b')]},client9002);return _0x4301f5;}return null;})[_0xeb53('0x2a')](respondWithResult(_0x132de7,null))['catch'](handleError(_0x132de7,null));};
\ No newline at end of file
+var _0xd8e1=['chat','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact','ChatInteraction','ChatInteractionId','isNil','read1stAt','interaction','get','[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','null','AcceptMessage','acceptMessage','SIP/%s','channel','event','EventManager','acceptmessage','formData','agent','role','RejectMessage','rejectMessage','interface','fast-json-patch','request-promise','moment','mustache','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./chatMessage.socket','jayson/promise','client','http','then','ChatMessage,\x20%s,\x20%s','request\x20sent','debug','ChatMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','sendStatus','status','end','offset','limit','set','Content-Range','json','apply','reject','save','update','destroy','stack','name','send','ChatMessage','rawAttributes','model','keys','dateStart','dateEnd','query','filters','intersection','attributes','fields','length','add','day','merge','where','filter','map','options','includeAll','findAll','rows','params','include','create','body','find','describe','accept'];(function(_0x4932a6,_0x530e29){var _0x3b45b9=function(_0x1d1eb7){while(--_0x1d1eb7){_0x4932a6['push'](_0x4932a6['shift']());}};_0x3b45b9(++_0x530e29);}(_0xd8e1,0x8d));var _0x1d8e=function(_0x8e20a1,_0x45f48f){_0x8e20a1=_0x8e20a1-0x0;var _0x1868f8=_0xd8e1[_0x8e20a1];return _0x1868f8;};'use strict';var jsonpatch=require(_0x1d8e('0x0'));var rp=require(_0x1d8e('0x1'));var moment=require(_0x1d8e('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x1d8e('0x3'));var util=require('util');var path=require(_0x1d8e('0x4'));var sox=require(_0x1d8e('0x5'));var csv=require('to-csv');var ejs=require(_0x1d8e('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x1d8e('0x7'));var crypto=require(_0x1d8e('0x8'));var jsforce=require(_0x1d8e('0x9'));var deskjs=require(_0x1d8e('0xa'));var toCsv=require(_0x1d8e('0xb'));var querystring=require(_0x1d8e('0xc'));var Papa=require(_0x1d8e('0xd'));var qs=require(_0x1d8e('0xe'));var logger=require(_0x1d8e('0xf'))(_0x1d8e('0x10'));var utils=require(_0x1d8e('0x11'));var config=require(_0x1d8e('0x12'));var db=require(_0x1d8e('0x13'))['db'];var socket=require(_0x1d8e('0x14'))({'host':_0x1d8e('0x15'),'port':0x18eb});require(_0x1d8e('0x16'))['register'](socket);var jayson=require(_0x1d8e('0x17'));var client=jayson[_0x1d8e('0x18')]['http']({'port':0x232c});var client9002=jayson[_0x1d8e('0x18')][_0x1d8e('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x188e1b,_0x18c1e5,_0x5f1efd,_0x37d922){return new BPromise(function(_0x14fc8f,_0x18e0bd){var _0x219f5c=_0x37d922||client;return _0x219f5c['request'](_0x188e1b,_0x5f1efd)[_0x1d8e('0x1a')](function(_0x5ee1b8){logger['info'](_0x1d8e('0x1b'),_0x18c1e5,_0x1d8e('0x1c'));logger[_0x1d8e('0x1d')](_0x1d8e('0x1e'),_0x18c1e5,_0x1d8e('0x1c'),JSON[_0x1d8e('0x1f')](_0x5ee1b8));if(_0x5ee1b8[_0x1d8e('0x20')]){if(_0x5ee1b8['error'][_0x1d8e('0x21')]===0x1f4){logger[_0x1d8e('0x20')](_0x1d8e('0x1b'),_0x18c1e5,_0x5ee1b8[_0x1d8e('0x20')]['message']);return _0x18e0bd(_0x5ee1b8[_0x1d8e('0x20')][_0x1d8e('0x22')]);}logger[_0x1d8e('0x20')](_0x1d8e('0x1b'),_0x18c1e5,_0x5ee1b8[_0x1d8e('0x20')]['message']);return _0x14fc8f(_0x5ee1b8[_0x1d8e('0x20')][_0x1d8e('0x22')]);}else{logger[_0x1d8e('0x23')](_0x1d8e('0x1b'),_0x18c1e5,_0x1d8e('0x1c'));_0x14fc8f(_0x5ee1b8[_0x1d8e('0x24')][_0x1d8e('0x22')]);}})[_0x1d8e('0x25')](function(_0x25170c){logger[_0x1d8e('0x20')](_0x1d8e('0x1b'),_0x18c1e5,_0x25170c);_0x18e0bd(_0x25170c);});});}function respondWithStatusCode(_0x1a5b56,_0x547983){_0x547983=_0x547983||0xcc;return function(_0x3db432){if(_0x3db432){return _0x1a5b56[_0x1d8e('0x26')](_0x547983);}return _0x1a5b56[_0x1d8e('0x27')](_0x547983)[_0x1d8e('0x28')]();};}function respondWithResult(_0x1e50e6,_0x1007a1){_0x1007a1=_0x1007a1||0xc8;return function(_0x4664b6){if(_0x4664b6){return _0x1e50e6['status'](_0x1007a1)['json'](_0x4664b6);}};}function respondWithFilteredResult(_0x220ead,_0x290399){return function(_0x24c972){if(_0x24c972){var _0x4b6fdc=_0x24c972['count'],_0x1ede13=_0x290399[_0x1d8e('0x29')],_0x683bd4=_0x290399[_0x1d8e('0x29')]+_0x290399[_0x1d8e('0x2a')],_0x321db5;if(_0x683bd4>=_0x4b6fdc){_0x683bd4=_0x4b6fdc;_0x321db5=0xc8;}else{_0x321db5=0xce;}_0x220ead[_0x1d8e('0x27')](_0x321db5);return _0x220ead[_0x1d8e('0x2b')](_0x1d8e('0x2c'),_0x1ede13+'-'+_0x683bd4+'/'+_0x4b6fdc)[_0x1d8e('0x2d')](_0x24c972);}return null;};}function patchUpdates(_0x194cf2){return function(_0x3b49ce){try{jsonpatch[_0x1d8e('0x2e')](_0x3b49ce,_0x194cf2,!![]);}catch(_0x57d88f){return BPromise[_0x1d8e('0x2f')](_0x57d88f);}return _0x3b49ce[_0x1d8e('0x30')]();};}function saveUpdates(_0x318aa4,_0x15015c){return function(_0x48a432){if(_0x48a432){return _0x48a432[_0x1d8e('0x31')](_0x318aa4)[_0x1d8e('0x1a')](function(_0xa1cf71){return _0xa1cf71;});}return null;};}function removeEntity(_0x3d1b0d,_0x2500ec){return function(_0x22934b){if(_0x22934b){return _0x22934b[_0x1d8e('0x32')]()[_0x1d8e('0x1a')](function(){_0x3d1b0d[_0x1d8e('0x27')](0xcc)[_0x1d8e('0x28')]();});}};}function handleEntityNotFound(_0x389915,_0x289ffe){return function(_0x428838){if(!_0x428838){_0x389915[_0x1d8e('0x26')](0x194);}return _0x428838;};}function handleError(_0x95c18,_0x2ea85d){_0x2ea85d=_0x2ea85d||0x1f4;return function(_0x421296){logger[_0x1d8e('0x20')](_0x421296[_0x1d8e('0x33')]);if(_0x421296[_0x1d8e('0x34')]){delete _0x421296['name'];}_0x95c18[_0x1d8e('0x27')](_0x2ea85d)[_0x1d8e('0x35')](_0x421296);};}exports['index']=function(_0x2c903c,_0x59def2){var _0x124f60={},_0x2fa44c={},_0x5997d4={'count':0x0,'rows':[]};var _0x3ab44b=db[_0x1d8e('0x36')][_0x1d8e('0x37')];_0x2fa44c[_0x1d8e('0x38')]=_[_0x1d8e('0x39')](_0x3ab44b);var _0x147006={'dateStart':_0x2c903c['query'][_0x1d8e('0x3a')],'dateEnd':_0x2c903c['query'][_0x1d8e('0x3b')]};delete _0x2c903c['query']['dateStart'];delete _0x2c903c[_0x1d8e('0x3c')]['dateEnd'];_0x2fa44c[_0x1d8e('0x3c')]=_[_0x1d8e('0x39')](_0x2c903c[_0x1d8e('0x3c')]);_0x2fa44c[_0x1d8e('0x3d')]=_[_0x1d8e('0x3e')](_0x2fa44c['model'],_0x2fa44c[_0x1d8e('0x3c')]);_0x124f60[_0x1d8e('0x3f')]=_[_0x1d8e('0x3e')](_0x2fa44c[_0x1d8e('0x38')],qs[_0x1d8e('0x40')](_0x2c903c[_0x1d8e('0x3c')][_0x1d8e('0x40')]));_0x124f60['attributes']=_0x124f60[_0x1d8e('0x3f')][_0x1d8e('0x41')]?_0x124f60[_0x1d8e('0x3f')]:_0x2fa44c['model'];if(!_0x2c903c[_0x1d8e('0x3c')]['hasOwnProperty']('nolimit')){_0x124f60[_0x1d8e('0x2a')]=qs[_0x1d8e('0x2a')](_0x2c903c[_0x1d8e('0x3c')][_0x1d8e('0x2a')]);_0x124f60[_0x1d8e('0x29')]=qs[_0x1d8e('0x29')](_0x2c903c['query']['offset']);}_0x124f60['order']=qs['sort'](_0x2c903c[_0x1d8e('0x3c')]['sort']);_0x124f60['where']=qs[_0x1d8e('0x3d')](_['pick'](_0x2c903c[_0x1d8e('0x3c')],_0x2fa44c[_0x1d8e('0x3d')]));if(_0x147006[_0x1d8e('0x3a')]){if(_0x147006['dateEnd']){_0x147006[_0x1d8e('0x3b')]=moment(_0x147006[_0x1d8e('0x3b')])[_0x1d8e('0x42')](0x1,_0x1d8e('0x43'));}else{_0x147006[_0x1d8e('0x3b')]=moment(_0x147006[_0x1d8e('0x3a')])[_0x1d8e('0x42')](0x1,'day');}_[_0x1d8e('0x44')](_0x124f60[_0x1d8e('0x45')],{'createdAt':{'$gte':_0x147006['dateStart'],'$lte':_0x147006['dateEnd']}});}if(_0x2c903c[_0x1d8e('0x3c')][_0x1d8e('0x46')]){_0x124f60['where']=_[_0x1d8e('0x44')](_0x124f60['where'],{'$or':_[_0x1d8e('0x47')](_0x124f60[_0x1d8e('0x3f')],function(_0x414675){var _0x2d3e9b={};_0x2d3e9b[_0x414675]={'$like':'%'+_0x2c903c[_0x1d8e('0x3c')][_0x1d8e('0x46')]+'%'};return _0x2d3e9b;})});}_0x124f60=_[_0x1d8e('0x44')]({},_0x124f60,_0x2c903c[_0x1d8e('0x48')]);var _0xe6a6ef={'where':_0x124f60[_0x1d8e('0x45')]};return db[_0x1d8e('0x36')]['count'](_0xe6a6ef)['then'](function(_0x37f969){_0x5997d4['count']=_0x37f969;if(_0x2c903c[_0x1d8e('0x3c')][_0x1d8e('0x49')]){_0x124f60['include']=[{'all':!![]}];}return db[_0x1d8e('0x36')][_0x1d8e('0x4a')](_0x124f60);})[_0x1d8e('0x1a')](function(_0x325fc9){_0x5997d4[_0x1d8e('0x4b')]=_0x325fc9;return _0x5997d4;})[_0x1d8e('0x1a')](respondWithFilteredResult(_0x59def2,_0x124f60))[_0x1d8e('0x25')](handleError(_0x59def2,null));};exports['show']=function(_0x526378,_0x3bc705){var _0x5d2442={'raw':!![],'where':{'id':_0x526378[_0x1d8e('0x4c')]['id']}},_0x2fc002={};_0x2fc002[_0x1d8e('0x38')]=_[_0x1d8e('0x39')](db[_0x1d8e('0x36')][_0x1d8e('0x37')]);_0x2fc002['query']=_[_0x1d8e('0x39')](_0x526378[_0x1d8e('0x3c')]);_0x2fc002[_0x1d8e('0x3d')]=_['intersection'](_0x2fc002[_0x1d8e('0x38')],_0x2fc002['query']);_0x5d2442[_0x1d8e('0x3f')]=_[_0x1d8e('0x3e')](_0x2fc002[_0x1d8e('0x38')],qs[_0x1d8e('0x40')](_0x526378[_0x1d8e('0x3c')][_0x1d8e('0x40')]));_0x5d2442[_0x1d8e('0x3f')]=_0x5d2442[_0x1d8e('0x3f')][_0x1d8e('0x41')]?_0x5d2442[_0x1d8e('0x3f')]:_0x2fc002[_0x1d8e('0x38')];if(_0x526378[_0x1d8e('0x3c')][_0x1d8e('0x49')]){_0x5d2442[_0x1d8e('0x4d')]=[{'all':!![]}];}_0x5d2442=_[_0x1d8e('0x44')]({},_0x5d2442,_0x526378[_0x1d8e('0x48')]);return db[_0x1d8e('0x36')]['find'](_0x5d2442)[_0x1d8e('0x1a')](handleEntityNotFound(_0x3bc705,null))['then'](respondWithResult(_0x3bc705,null))['catch'](handleError(_0x3bc705,null));};exports[_0x1d8e('0x4e')]=function(_0x537546,_0x51108f){return db[_0x1d8e('0x36')][_0x1d8e('0x4e')](_0x537546[_0x1d8e('0x4f')],{})[_0x1d8e('0x1a')](respondWithResult(_0x51108f,0xc9))[_0x1d8e('0x25')](handleError(_0x51108f,null));};exports[_0x1d8e('0x31')]=function(_0x364b75,_0x11d8c6){if(_0x364b75['body']['id']){delete _0x364b75[_0x1d8e('0x4f')]['id'];}return db[_0x1d8e('0x36')][_0x1d8e('0x50')]({'where':{'id':_0x364b75['params']['id']}})['then'](handleEntityNotFound(_0x11d8c6,null))[_0x1d8e('0x1a')](saveUpdates(_0x364b75[_0x1d8e('0x4f')],null))[_0x1d8e('0x1a')](respondWithResult(_0x11d8c6,null))[_0x1d8e('0x25')](handleError(_0x11d8c6,null));};exports[_0x1d8e('0x32')]=function(_0x4ca3fd,_0x3bca57){return db[_0x1d8e('0x36')]['find']({'where':{'id':_0x4ca3fd[_0x1d8e('0x4c')]['id']}})[_0x1d8e('0x1a')](handleEntityNotFound(_0x3bca57,null))[_0x1d8e('0x1a')](removeEntity(_0x3bca57,null))[_0x1d8e('0x25')](handleError(_0x3bca57,null));};exports[_0x1d8e('0x51')]=function(_0x5a5660,_0x367c83){return db['ChatMessage'][_0x1d8e('0x51')]()[_0x1d8e('0x1a')](respondWithResult(_0x367c83,null))['catch'](handleError(_0x367c83,null));};var interaction_log=require('../../config/logger')('chat-interactions');exports[_0x1d8e('0x52')]=function(_0x54c77e,_0x16f752,_0x186753){var _0x25faf3={'channel':_0x1d8e('0x53')};if(_0x54c77e['body']['id']){delete _0x54c77e[_0x1d8e('0x4f')]['id'];}_0x54c77e['body'][_0x1d8e('0x54')]=!![];_0x54c77e['body'][_0x1d8e('0x55')]=moment()[_0x1d8e('0x56')](_0x1d8e('0x57'));_0x54c77e[_0x1d8e('0x4f')][_0x1d8e('0x58')]=_0x54c77e[_0x1d8e('0x4f')][_0x1d8e('0x58')]||_0x54c77e[_0x1d8e('0x59')]['id'];return db[_0x1d8e('0x36')][_0x1d8e('0x50')]({'where':{'id':_0x54c77e['params']['id'],'UserId':null},'include':[{'model':db[_0x1d8e('0x5a')],'as':'Contact'}]})[_0x1d8e('0x1a')](handleEntityNotFound(_0x16f752,null))[_0x1d8e('0x1a')](saveUpdates(_0x54c77e[_0x1d8e('0x4f')],null))[_0x1d8e('0x1a')](function(_0x32c80f){if(_0x32c80f){_0x25faf3[_0x1d8e('0x22')]=_0x32c80f['get']({'plain':!![]});return db[_0x1d8e('0x5b')][_0x1d8e('0x50')]({'where':{'id':_0x32c80f[_0x1d8e('0x5c')]}});}return null;})['then'](handleEntityNotFound(_0x16f752,null))[_0x1d8e('0x1a')](function(_0x309f3c){if(_0x309f3c){return _0x309f3c[_0x1d8e('0x31')]({'UserId':_0x54c77e[_0x1d8e('0x4f')][_0x1d8e('0x58')],'read1stAt':_[_0x1d8e('0x5d')](_0x309f3c[_0x1d8e('0x5e')])?moment()['format'](_0x1d8e('0x57')):undefined});}return null;})[_0x1d8e('0x1a')](function(_0x3c77ef){if(_0x3c77ef){_0x25faf3[_0x1d8e('0x5f')]=_0x3c77ef[_0x1d8e('0x60')]({'plain':!![]});interaction_log[_0x1d8e('0x23')](_0x1d8e('0x61'),_0x54c77e[_0x1d8e('0x59')]['id'],_0x54c77e[_0x1d8e('0x59')][_0x1d8e('0x34')],_0x54c77e[_0x1d8e('0x59')]['role'],_0x25faf3[_0x1d8e('0x5f')]['id'],_0x54c77e[_0x1d8e('0x4f')]?JSON[_0x1d8e('0x1f')](_0x54c77e['body']):_0x1d8e('0x62'));return respondWithRpcPromise(_0x1d8e('0x63'),_0x1d8e('0x64'),_0x25faf3);}return null;})[_0x1d8e('0x1a')](function(_0x4a53c0){if(_0x4a53c0){if(_0x54c77e['body']['manual']){_0x25faf3[_0x1d8e('0x22')]['interface']=util[_0x1d8e('0x56')](_0x1d8e('0x65'),_0x54c77e[_0x1d8e('0x59')][_0x1d8e('0x34')]);_0x25faf3[_0x1d8e('0x22')][_0x1d8e('0x66')]=_0x25faf3[_0x1d8e('0x66')];_0x25faf3['message'][_0x1d8e('0x67')]=_0x1d8e('0x52');return respondWithRpcPromise(_0x1d8e('0x68'),_0x1d8e('0x68'),{'event':_0x1d8e('0x69'),'message':_['merge'](_0x25faf3[_0x1d8e('0x22')],JSON['parse'](_0x25faf3[_0x1d8e('0x5f')][_0x1d8e('0x6a')]))},client9002)[_0x1d8e('0x1a')](function(){return _0x25faf3;});}return _0x25faf3;}return null;})[_0x1d8e('0x1a')](respondWithResult(_0x16f752,null))[_0x1d8e('0x25')](handleError(_0x16f752,null));};var interaction_log=require(_0x1d8e('0xf'))('chat-interactions');exports['reject']=function(_0x184187,_0x57daf1,_0x1b7553){var _0x1822f2={'agent':{},'channel':_0x1d8e('0x53')};if(_0x184187[_0x1d8e('0x4f')]['id']){delete _0x184187['body']['id'];}_0x184187['body']['UserId']=_0x184187[_0x1d8e('0x4f')][_0x1d8e('0x58')]||_0x184187['user']['id'];_0x1822f2[_0x1d8e('0x6b')]['id']=_0x184187[_0x1d8e('0x4f')]['UserId'];return db[_0x1d8e('0x36')][_0x1d8e('0x50')]({'where':{'id':_0x184187[_0x1d8e('0x4c')]['id'],'UserId':null}})[_0x1d8e('0x1a')](handleEntityNotFound(_0x57daf1,null))[_0x1d8e('0x1a')](function(_0x5850f1){if(_0x5850f1){_0x1822f2[_0x1d8e('0x22')]=_0x5850f1[_0x1d8e('0x60')]({'plain':!![]});return db[_0x1d8e('0x5b')]['find']({'where':{'id':_0x5850f1[_0x1d8e('0x5c')]}});}return null;})[_0x1d8e('0x1a')](handleEntityNotFound(_0x57daf1,null))[_0x1d8e('0x1a')](function(_0x5c5714){if(_0x5c5714){_0x1822f2[_0x1d8e('0x5f')]=_0x5c5714[_0x1d8e('0x60')]({'plain':!![]});interaction_log[_0x1d8e('0x23')]('[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x184187['user']['id'],_0x184187[_0x1d8e('0x59')][_0x1d8e('0x34')],_0x184187[_0x1d8e('0x59')][_0x1d8e('0x6c')],_0x1822f2[_0x1d8e('0x5f')]['id'],_0x184187['body']?JSON[_0x1d8e('0x1f')](_0x184187['body']):_0x1d8e('0x62'));return respondWithRpcPromise(_0x1d8e('0x6d'),_0x1d8e('0x6e'),_0x1822f2);}return null;})[_0x1d8e('0x1a')](function(_0x9ef144){if(_0x9ef144){_0x9ef144[_0x1d8e('0x22')][_0x1d8e('0x6f')]=util[_0x1d8e('0x56')]('SIP/%s',_0x184187[_0x1d8e('0x59')]['name']);_0x9ef144[_0x1d8e('0x22')][_0x1d8e('0x66')]=_0x1822f2['channel'];_0x9ef144[_0x1d8e('0x22')][_0x1d8e('0x67')]=_0x1d8e('0x2f');respondWithRpcPromise('EventManager',_0x1d8e('0x68'),{'event':'rejectmessage','message':_0x9ef144[_0x1d8e('0x22')]},client9002);return _0x1822f2;}return null;})[_0x1d8e('0x1a')](respondWithResult(_0x57daf1,null))[_0x1d8e('0x25')](handleError(_0x57daf1,null));};
\ No newline at end of file
index 1282e1f..f42185f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f7e=['../../mysqldb','save','remove','emit','exports'];(function(_0x37ce3a,_0x1b2a64){var _0x2441b9=function(_0x5050de){while(--_0x5050de){_0x37ce3a['push'](_0x37ce3a['shift']());}};_0x2441b9(++_0x1b2a64);}(_0x9f7e,0x19f));var _0xe9f7=function(_0x195e23,_0x501dea){_0x195e23=_0x195e23-0x0;var _0x39471d=_0x9f7e[_0x195e23];return _0x39471d;};'use strict';var EventEmitter=require('events');var ChatMessage=require(_0xe9f7('0x0'))['db']['ChatMessage'];var ChatMessageEvents=new EventEmitter();ChatMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xe9f7('0x1'),'afterUpdate':'update','afterDestroy':_0xe9f7('0x2')};function emitEvent(_0x8fa1b2){return function(_0x555f15,_0x488ec0,_0x57d1a7){ChatMessageEvents[_0xe9f7('0x3')](_0x8fa1b2+':'+_0x555f15['id'],_0x555f15);ChatMessageEvents[_0xe9f7('0x3')](_0x8fa1b2,_0x555f15);_0x57d1a7(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];ChatMessage['hook'](e,emitEvent(event));}}module[_0xe9f7('0x4')]=ChatMessageEvents;
\ No newline at end of file
+var _0x44f4=['remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','ChatMessage','setMaxListeners','save','update'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0x44f4,0x17b));var _0x444f=function(_0x234093,_0xdd9610){_0x234093=_0x234093-0x0;var _0x3a2710=_0x44f4[_0x234093];return _0x3a2710;};'use strict';var EventEmitter=require(_0x444f('0x0'));var ChatMessage=require(_0x444f('0x1'))['db'][_0x444f('0x2')];var ChatMessageEvents=new EventEmitter();ChatMessageEvents[_0x444f('0x3')](0x0);var events={'afterCreate':_0x444f('0x4'),'afterUpdate':_0x444f('0x5'),'afterDestroy':_0x444f('0x6')};function emitEvent(_0x6b12bd){return function(_0x4bd6f8,_0x28a604,_0x55fc6b){ChatMessageEvents[_0x444f('0x7')](_0x6b12bd+':'+_0x4bd6f8['id'],_0x4bd6f8);ChatMessageEvents['emit'](_0x6b12bd,_0x4bd6f8);_0x55fc6b(null);};}for(var e in events){if(events[_0x444f('0x8')](e)){var event=events[e];ChatMessage[_0x444f('0x9')](e,emitEvent(event));}}module[_0x444f('0xa')]=ChatMessageEvents;
\ No newline at end of file
index b7f4747..0c72455 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbaaa=['direction','toLowerCase','out','isNil','UserId','ChatInteraction','findOne','update','body','catch','error','utf8mb4_unicode_ci','lodash','../../config/logger','api','moment','request-promise','./chatMessage.attributes','exports','define','chat_messages','models','get'];(function(_0x3aee6b,_0x2fd8c6){var _0x182898=function(_0x3e607a){while(--_0x3e607a){_0x3aee6b['push'](_0x3aee6b['shift']());}};_0x182898(++_0x2fd8c6);}(_0xbaaa,0x137));var _0xabaa=function(_0x45d3f0,_0x4be53f){_0x45d3f0=_0x45d3f0-0x0;var _0x314b79=_0xbaaa[_0x45d3f0];return _0x314b79;};'use strict';var _=require(_0xabaa('0x0'));var util=require('util');var logger=require(_0xabaa('0x1'))(_0xabaa('0x2'));var moment=require(_0xabaa('0x3'));var BPromise=require('bluebird');var rp=require(_0xabaa('0x4'));var attributes=require(_0xabaa('0x5'));module[_0xabaa('0x6')]=function(_0x53cfcc,_0x66ca79){return _0x53cfcc[_0xabaa('0x7')]('ChatMessage',attributes,{'tableName':_0xabaa('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x4b4960,_0x413554,_0x4e4d67){var _0x2f249=_0x53cfcc[_0xabaa('0x9')];var _0x326097=_0x4b4960[_0xabaa('0xa')]({'plain':!![]});if(_0x326097[_0xabaa('0xb')][_0xabaa('0xc')]()==='in'||_0x326097[_0xabaa('0xb')][_0xabaa('0xc')]()===_0xabaa('0xd')&&!_0x326097['secret']&&!_[_0xabaa('0xe')](_0x326097[_0xabaa('0xf')])){_0x2f249[_0xabaa('0x10')][_0xabaa('0x11')]({'where':{'id':_0x326097['ChatInteractionId']}})['then'](function(_0x145ecc){if(_0x145ecc){_0x145ecc[_0xabaa('0x12')]({'lastMsgAt':_0x326097['createdAt'],'lastMsgDirection':_0x326097[_0xabaa('0xb')]['toLowerCase'](),'lastMsgBody':_0x326097[_0xabaa('0x13')]});}})[_0xabaa('0x14')](function(_0x58389d){console[_0xabaa('0x15')](_0x58389d);});}_0x4e4d67();}},'charset':'utf8mb4','collate':_0xabaa('0x16')});};
\ No newline at end of file
+var _0xa5d7=['chat_messages','models','get','direction','toLowerCase','out','secret','isNil','UserId','ChatInteraction','findOne','ChatInteractionId','then','update','createdAt','body','error','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','bluebird','./chatMessage.attributes','define','ChatMessage'];(function(_0x52c828,_0x25dc17){var _0x371589=function(_0x41a675){while(--_0x41a675){_0x52c828['push'](_0x52c828['shift']());}};_0x371589(++_0x25dc17);}(_0xa5d7,0x1c3));var _0x7a5d=function(_0x4459a6,_0x1ba771){_0x4459a6=_0x4459a6-0x0;var _0x2d8cfc=_0xa5d7[_0x4459a6];return _0x2d8cfc;};'use strict';var _=require(_0x7a5d('0x0'));var util=require(_0x7a5d('0x1'));var logger=require(_0x7a5d('0x2'))(_0x7a5d('0x3'));var moment=require('moment');var BPromise=require(_0x7a5d('0x4'));var rp=require('request-promise');var attributes=require(_0x7a5d('0x5'));module['exports']=function(_0x3cff5c,_0x50c8c1){return _0x3cff5c[_0x7a5d('0x6')](_0x7a5d('0x7'),attributes,{'tableName':_0x7a5d('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x4cb015,_0x2092de,_0xc34a6a){var _0x5e6442=_0x3cff5c[_0x7a5d('0x9')];var _0x5d793f=_0x4cb015[_0x7a5d('0xa')]({'plain':!![]});if(_0x5d793f[_0x7a5d('0xb')][_0x7a5d('0xc')]()==='in'||_0x5d793f['direction'][_0x7a5d('0xc')]()===_0x7a5d('0xd')&&!_0x5d793f[_0x7a5d('0xe')]&&!_[_0x7a5d('0xf')](_0x5d793f[_0x7a5d('0x10')])){_0x5e6442[_0x7a5d('0x11')][_0x7a5d('0x12')]({'where':{'id':_0x5d793f[_0x7a5d('0x13')]}})[_0x7a5d('0x14')](function(_0xc4d232){if(_0xc4d232){_0xc4d232[_0x7a5d('0x15')]({'lastMsgAt':_0x5d793f[_0x7a5d('0x16')],'lastMsgDirection':_0x5d793f['direction']['toLowerCase'](),'lastMsgBody':_0x5d793f[_0x7a5d('0x17')]});}})['catch'](function(_0x1e6179){console[_0x7a5d('0x18')](_0x1e6179);});}_0xc34a6a();}},'charset':_0x7a5d('0x19'),'collate':_0x7a5d('0x1a')});};
\ No newline at end of file
index e2a7677..b3c6d1a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb28=['error','code','message','ChatMessage,\x20%s,\x20%s','catch','CreateChatMessage','ChatMessage','create','options','raw','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','./chatMessage.socket','register','then','info','request\x20sent','debug','stringify'];(function(_0x270fff,_0x141ccb){var _0x50e87a=function(_0x3b0f49){while(--_0x3b0f49){_0x270fff['push'](_0x270fff['shift']());}};_0x50e87a(++_0x141ccb);}(_0xdb28,0x106));var _0x8db2=function(_0x3675c8,_0x451705){_0x3675c8=_0x3675c8-0x0;var _0x5695fc=_0xdb28[_0x3675c8];return _0x5695fc;};'use strict';var _=require(_0x8db2('0x0'));var util=require(_0x8db2('0x1'));var moment=require(_0x8db2('0x2'));var BPromise=require(_0x8db2('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x8db2('0x4'))['db'];var utils=require(_0x8db2('0x5'));var logger=require(_0x8db2('0x6'))(_0x8db2('0x7'));var config=require(_0x8db2('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x8db2('0x9')][_0x8db2('0xa')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':'localhost','port':0x18eb});require(_0x8db2('0xb'))[_0x8db2('0xc')](socket);function respondWithRpcPromise(_0x131537,_0x29f698,_0x2f3f2f){return new BPromise(function(_0x1ff362,_0x126c78){return client['request'](_0x131537,_0x2f3f2f)[_0x8db2('0xd')](function(_0x476216){logger[_0x8db2('0xe')]('ChatMessage,\x20%s,\x20%s',_0x29f698,_0x8db2('0xf'));logger[_0x8db2('0x10')]('ChatMessage,\x20%s,\x20%s,\x20%s',_0x29f698,_0x8db2('0xf'),JSON[_0x8db2('0x11')](_0x476216));if(_0x476216[_0x8db2('0x12')]){if(_0x476216[_0x8db2('0x12')][_0x8db2('0x13')]===0x1f4){logger['error']('ChatMessage,\x20%s,\x20%s',_0x29f698,_0x476216[_0x8db2('0x12')][_0x8db2('0x14')]);return _0x126c78(_0x476216[_0x8db2('0x12')][_0x8db2('0x14')]);}logger[_0x8db2('0x12')](_0x8db2('0x15'),_0x29f698,_0x476216[_0x8db2('0x12')][_0x8db2('0x14')]);return _0x1ff362(_0x476216[_0x8db2('0x12')][_0x8db2('0x14')]);}else{logger['info'](_0x8db2('0x15'),_0x29f698,_0x8db2('0xf'));_0x1ff362(_0x476216['result'][_0x8db2('0x14')]);}})[_0x8db2('0x16')](function(_0x21db8c){logger[_0x8db2('0x12')](_0x8db2('0x15'),_0x29f698,_0x21db8c);_0x126c78(_0x21db8c);});});}exports[_0x8db2('0x17')]=function(_0x51d60d){var _0x5df464=this;return new Promise(function(_0x77789,_0x104e33){return db[_0x8db2('0x18')][_0x8db2('0x19')](_0x51d60d['body'],{'raw':_0x51d60d[_0x8db2('0x1a')]?_0x51d60d[_0x8db2('0x1a')][_0x8db2('0x1b')]===undefined?!![]:![]:!![]})[_0x8db2('0xd')](function(_0x3dbe8e){logger['info'](_0x8db2('0x17'),_0x51d60d);logger[_0x8db2('0x10')](_0x8db2('0x17'),_0x51d60d,JSON[_0x8db2('0x11')](_0x3dbe8e));_0x77789(_0x3dbe8e);})[_0x8db2('0x16')](function(_0x21704c){logger[_0x8db2('0x12')]('CreateChatMessage',_0x21704c[_0x8db2('0x14')],_0x51d60d);_0x104e33(_0x5df464['error'](0x1f4,_0x21704c['message']));});});};
\ No newline at end of file
+var _0xda2d=['randomstring','../../mysqldb','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','./chatMessage.socket','register','then','info','ChatMessage,\x20%s,\x20%s','request\x20sent','debug','ChatMessage,\x20%s,\x20%s,\x20%s','code','error','message','CreateChatMessage','ChatMessage','create','body','options','raw','catch','util','moment','bluebird'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xda2d,0x102));var _0xdda2=function(_0x2c9f8c,_0x21fd3e){_0x2c9f8c=_0x2c9f8c-0x0;var _0x29cf1a=_0xda2d[_0x2c9f8c];return _0x29cf1a;};'use strict';var _=require('lodash');var util=require(_0xdda2('0x0'));var moment=require(_0xdda2('0x1'));var BPromise=require(_0xdda2('0x2'));var rs=require(_0xdda2('0x3'));var fs=require('fs');var db=require(_0xdda2('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require(_0xdda2('0x5'));var jayson=require(_0xdda2('0x6'));var client=jayson[_0xdda2('0x7')][_0xdda2('0x8')]({'port':0x232a});var socket=require(_0xdda2('0x9'))({'host':_0xdda2('0xa'),'port':0x18eb});require(_0xdda2('0xb'))[_0xdda2('0xc')](socket);function respondWithRpcPromise(_0x2e2523,_0x341c7b,_0x4a97f3){return new BPromise(function(_0x1a774e,_0x22c6e5){return client['request'](_0x2e2523,_0x4a97f3)[_0xdda2('0xd')](function(_0x2f3454){logger[_0xdda2('0xe')](_0xdda2('0xf'),_0x341c7b,_0xdda2('0x10'));logger[_0xdda2('0x11')](_0xdda2('0x12'),_0x341c7b,_0xdda2('0x10'),JSON['stringify'](_0x2f3454));if(_0x2f3454['error']){if(_0x2f3454['error'][_0xdda2('0x13')]===0x1f4){logger[_0xdda2('0x14')](_0xdda2('0xf'),_0x341c7b,_0x2f3454[_0xdda2('0x14')][_0xdda2('0x15')]);return _0x22c6e5(_0x2f3454[_0xdda2('0x14')][_0xdda2('0x15')]);}logger['error'](_0xdda2('0xf'),_0x341c7b,_0x2f3454['error'][_0xdda2('0x15')]);return _0x1a774e(_0x2f3454[_0xdda2('0x14')][_0xdda2('0x15')]);}else{logger[_0xdda2('0xe')](_0xdda2('0xf'),_0x341c7b,'request\x20sent');_0x1a774e(_0x2f3454['result'][_0xdda2('0x15')]);}})['catch'](function(_0x1a5192){logger[_0xdda2('0x14')](_0xdda2('0xf'),_0x341c7b,_0x1a5192);_0x22c6e5(_0x1a5192);});});}exports[_0xdda2('0x16')]=function(_0x8d44b7){var _0x17015f=this;return new Promise(function(_0x3ca127,_0x351151){return db[_0xdda2('0x17')][_0xdda2('0x18')](_0x8d44b7[_0xdda2('0x19')],{'raw':_0x8d44b7[_0xdda2('0x1a')]?_0x8d44b7['options'][_0xdda2('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0xc4567c){logger[_0xdda2('0xe')](_0xdda2('0x16'),_0x8d44b7);logger['debug'](_0xdda2('0x16'),_0x8d44b7,JSON['stringify'](_0xc4567c));_0x3ca127(_0xc4567c);})[_0xdda2('0x1c')](function(_0x107ee4){logger['error'](_0xdda2('0x16'),_0x107ee4[_0xdda2('0x15')],_0x8d44b7);_0x351151(_0x17015f[_0xdda2('0x14')](0x1f4,_0x107ee4[_0xdda2('0x15')]));});});};
\ No newline at end of file
index 47bf0a8..8034a12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e74=['emit','removeListener','register','length','chatMessage:','./chatMessage.events','remove','update'];(function(_0x474bc0,_0x26989c){var _0x4b24cf=function(_0x4be866){while(--_0x4be866){_0x474bc0['push'](_0x474bc0['shift']());}};_0x4b24cf(++_0x26989c);}(_0x3e74,0x175));var _0x43e7=function(_0x38f2a7,_0x1a716a){_0x38f2a7=_0x38f2a7-0x0;var _0x2c7f58=_0x3e74[_0x38f2a7];return _0x2c7f58;};'use strict';var ChatMessageEvents=require(_0x43e7('0x0'));var events=['save',_0x43e7('0x1'),_0x43e7('0x2')];function createListener(_0x151ad2,_0x494e45){return function(_0x490ced){_0x494e45[_0x43e7('0x3')](_0x151ad2,_0x490ced);};}function removeListener(_0x4f9bbe,_0x128b0f){return function(){ChatMessageEvents[_0x43e7('0x4')](_0x4f9bbe,_0x128b0f);};}exports[_0x43e7('0x5')]=function(_0x1c503b){for(var _0xc98b9c=0x0,_0x503698=events[_0x43e7('0x6')];_0xc98b9c<_0x503698;_0xc98b9c++){var _0x3491d6=events[_0xc98b9c];var _0x2ede2d=createListener(_0x43e7('0x7')+_0x3491d6,_0x1c503b);ChatMessageEvents['on'](_0x3491d6,_0x2ede2d);}};
\ No newline at end of file
+var _0x9c44=['emit','removeListener','length','chatMessage:','remove','update'];(function(_0x1dacfe,_0x340802){var _0x17c4fa=function(_0xb8f12b){while(--_0xb8f12b){_0x1dacfe['push'](_0x1dacfe['shift']());}};_0x17c4fa(++_0x340802);}(_0x9c44,0x178));var _0x49c4=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0x9c44[_0x2641f9];return _0x585741;};'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 ee7db65..4d6bf64 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x75ea=['destroy','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatMessage.controller','isAuthenticated','index','get','/describe','describe','show','post','tracked','chat','chatmessage:create','create','put','/:id/accept','accept','/:id/reject','reject','delete','/:id'];(function(_0x4bd950,_0x184ed5){var _0x5dc59a=function(_0x6ff30f){while(--_0x6ff30f){_0x4bd950['push'](_0x4bd950['shift']());}};_0x5dc59a(++_0x184ed5);}(_0x75ea,0x160));var _0xa75e=function(_0x2147f1,_0x3f93a2){_0x2147f1=_0x2147f1-0x0;var _0x2a7c8d=_0x75ea[_0x2147f1];return _0x2a7c8d;};'use strict';var multer=require(_0xa75e('0x0'));var util=require('util');var path=require(_0xa75e('0x1'));var express=require(_0xa75e('0x2'));var router=express[_0xa75e('0x3')]();var auth=require(_0xa75e('0x4'));var interaction=require(_0xa75e('0x5'));var config=require(_0xa75e('0x6'));var controller=require(_0xa75e('0x7'));router['get']('/',auth[_0xa75e('0x8')](),controller[_0xa75e('0x9')]);router[_0xa75e('0xa')](_0xa75e('0xb'),auth[_0xa75e('0x8')](),controller[_0xa75e('0xc')]);router[_0xa75e('0xa')]('/:id',auth[_0xa75e('0x8')](),controller[_0xa75e('0xd')]);router[_0xa75e('0xe')]('/',auth[_0xa75e('0x8')](),interaction[_0xa75e('0xf')](_0xa75e('0x10'),_0xa75e('0x11')),controller[_0xa75e('0x12')]);router[_0xa75e('0x13')]('/:id',controller['update']);router[_0xa75e('0x13')](_0xa75e('0x14'),auth['isAuthenticated'](),controller[_0xa75e('0x15')]);router[_0xa75e('0x13')](_0xa75e('0x16'),auth['isAuthenticated'](),controller[_0xa75e('0x17')]);router[_0xa75e('0x18')](_0xa75e('0x19'),auth[_0xa75e('0x8')](),controller[_0xa75e('0x1a')]);module['exports']=router;
\ No newline at end of file
+var _0xd575=['update','/:id/accept','/:id/reject','reject','delete','multer','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','chat','chatmessage:create','put'];(function(_0x646be2,_0x44196f){var _0x295943=function(_0x556db6){while(--_0x556db6){_0x646be2['push'](_0x646be2['shift']());}};_0x295943(++_0x44196f);}(_0xd575,0x194));var _0x5d57=function(_0x4f5880,_0x30f20e){_0x4f5880=_0x4f5880-0x0;var _0x379d79=_0xd575[_0x4f5880];return _0x379d79;};'use strict';var multer=require(_0x5d57('0x0'));var util=require(_0x5d57('0x1'));var path=require(_0x5d57('0x2'));var express=require('express');var router=express[_0x5d57('0x3')]();var auth=require(_0x5d57('0x4'));var interaction=require(_0x5d57('0x5'));var config=require(_0x5d57('0x6'));var controller=require('./chatMessage.controller');router[_0x5d57('0x7')]('/',auth[_0x5d57('0x8')](),controller[_0x5d57('0x9')]);router[_0x5d57('0x7')]('/describe',auth[_0x5d57('0x8')](),controller['describe']);router[_0x5d57('0x7')](_0x5d57('0xa'),auth[_0x5d57('0x8')](),controller['show']);router['post']('/',auth[_0x5d57('0x8')](),interaction['tracked'](_0x5d57('0xb'),_0x5d57('0xc')),controller['create']);router[_0x5d57('0xd')](_0x5d57('0xa'),controller[_0x5d57('0xe')]);router['put'](_0x5d57('0xf'),auth[_0x5d57('0x8')](),controller['accept']);router[_0x5d57('0xd')](_0x5d57('0x10'),auth[_0x5d57('0x8')](),controller[_0x5d57('0x11')]);router[_0x5d57('0x12')](_0x5d57('0xa'),auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index d891107..9503987 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd711=['TEXT','sequelize'];(function(_0x260648,_0x1ea61b){var _0x2ab88b=function(_0x4586a0){while(--_0x4586a0){_0x260648['push'](_0x260648['shift']());}};_0x2ab88b(++_0x1ea61b);}(_0xd711,0xcf));var _0x1d71=function(_0x4863e2,_0x35fe83){_0x4863e2=_0x4863e2-0x0;var _0x2572bd=_0xd711[_0x4863e2];return _0x2572bd;};'use strict';var Sequelize=require(_0x1d71('0x0'));module['exports']={'body':{'type':Sequelize[_0x1d71('0x1')]('medium'),'allowNull':![]}};
\ No newline at end of file
+var _0x71f3=['sequelize','exports','TEXT','medium'];(function(_0xc8d3f9,_0x1ca2f8){var _0x569ec7=function(_0x509efc){while(--_0x509efc){_0xc8d3f9['push'](_0xc8d3f9['shift']());}};_0x569ec7(++_0x1ca2f8);}(_0x71f3,0x1b4));var _0x371f=function(_0x449659,_0xbfb5aa){_0x449659=_0x449659-0x0;var _0x3e91e1=_0x71f3[_0x449659];return _0x3e91e1;};'use strict';var Sequelize=require(_0x371f('0x0'));module[_0x371f('0x1')]={'body':{'type':Sequelize[_0x371f('0x2')](_0x371f('0x3')),'allowNull':![]}};
\ No newline at end of file
index 40b099d..fa4055e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x96a0=['hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','filter','attributes','options','include','findAll','rows','show','params','find','catch','create','ChatOfflineMessage','body','destroy','describe','fast-json-patch','request-promise','util','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','api','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','update','then','error','stack','name','index','rawAttributes','keys','dateStart','query','dateEnd','filters','intersection','model','fields','length'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0x96a0,0x18c));var _0x096a=function(_0x2be1d6,_0x6ee010){_0x2be1d6=_0x2be1d6-0x0;var _0xea43e4=_0x96a0[_0x2be1d6];return _0xea43e4;};'use strict';var jsonpatch=require(_0x096a('0x0'));var rp=require(_0x096a('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x096a('0x2'));var path=require('path');var sox=require(_0x096a('0x3'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x096a('0x4'));var squel=require(_0x096a('0x5'));var crypto=require(_0x096a('0x6'));var jsforce=require(_0x096a('0x7'));var deskjs=require(_0x096a('0x8'));var toCsv=require(_0x096a('0x9'));var querystring=require(_0x096a('0xa'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x096a('0xb'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5e0769,_0x1bcf41){_0x1bcf41=_0x1bcf41||0xcc;return function(_0x4697ed){if(_0x4697ed){return _0x5e0769[_0x096a('0xc')](_0x1bcf41);}return _0x5e0769[_0x096a('0xd')](_0x1bcf41)['end']();};}function respondWithResult(_0x397d7a,_0x23f0c8){_0x23f0c8=_0x23f0c8||0xc8;return function(_0x350fca){if(_0x350fca){return _0x397d7a[_0x096a('0xd')](_0x23f0c8)[_0x096a('0xe')](_0x350fca);}};}function respondWithFilteredResult(_0x5de4e4,_0x4c64bb){return function(_0x2d0f45){if(_0x2d0f45){var _0x39e43c=_0x2d0f45[_0x096a('0xf')],_0x181b01=_0x4c64bb[_0x096a('0x10')],_0x139475=_0x4c64bb[_0x096a('0x10')]+_0x4c64bb[_0x096a('0x11')],_0x5a7ed1;if(_0x139475>=_0x39e43c){_0x139475=_0x39e43c;_0x5a7ed1=0xc8;}else{_0x5a7ed1=0xce;}_0x5de4e4['status'](_0x5a7ed1);return _0x5de4e4[_0x096a('0x12')](_0x096a('0x13'),_0x181b01+'-'+_0x139475+'/'+_0x39e43c)['json'](_0x2d0f45);}return null;};}function patchUpdates(_0x1ecfcf){return function(_0x57c31b){try{jsonpatch[_0x096a('0x14')](_0x57c31b,_0x1ecfcf,!![]);}catch(_0x365ab7){return BPromise[_0x096a('0x15')](_0x365ab7);}return _0x57c31b['save']();};}function saveUpdates(_0x4e29f9,_0x5fd997){return function(_0x964ae8){if(_0x964ae8){return _0x964ae8[_0x096a('0x16')](_0x4e29f9)[_0x096a('0x17')](function(_0x470ef2){return _0x470ef2;});}return null;};}function removeEntity(_0x58b7c3,_0x171222){return function(_0x985ab7){if(_0x985ab7){return _0x985ab7['destroy']()[_0x096a('0x17')](function(){_0x58b7c3[_0x096a('0xd')](0xcc)['end']();});}};}function handleEntityNotFound(_0x581b12,_0x1277d6){return function(_0x19dde9){if(!_0x19dde9){_0x581b12[_0x096a('0xc')](0x194);}return _0x19dde9;};}function handleError(_0x1975b5,_0x2cc27e){_0x2cc27e=_0x2cc27e||0x1f4;return function(_0x2a42e3){logger[_0x096a('0x18')](_0x2a42e3[_0x096a('0x19')]);if(_0x2a42e3[_0x096a('0x1a')]){delete _0x2a42e3[_0x096a('0x1a')];}_0x1975b5[_0x096a('0xd')](_0x2cc27e)['send'](_0x2a42e3);};}exports[_0x096a('0x1b')]=function(_0xa1c138,_0x10bad3){var _0x256c1d={},_0x4b33c4={},_0x352070={'count':0x0,'rows':[]};var _0x4a539a=db['ChatOfflineMessage'][_0x096a('0x1c')];_0x4b33c4['model']=_[_0x096a('0x1d')](_0x4a539a);var _0x509c17={'dateStart':_0xa1c138['query'][_0x096a('0x1e')],'dateEnd':_0xa1c138[_0x096a('0x1f')][_0x096a('0x20')]};delete _0xa1c138['query'][_0x096a('0x1e')];delete _0xa1c138[_0x096a('0x1f')][_0x096a('0x20')];_0x4b33c4[_0x096a('0x1f')]=_[_0x096a('0x1d')](_0xa1c138[_0x096a('0x1f')]);_0x4b33c4[_0x096a('0x21')]=_[_0x096a('0x22')](_0x4b33c4[_0x096a('0x23')],_0x4b33c4[_0x096a('0x1f')]);_0x256c1d['attributes']=_['intersection'](_0x4b33c4[_0x096a('0x23')],qs[_0x096a('0x24')](_0xa1c138['query'][_0x096a('0x24')]));_0x256c1d['attributes']=_0x256c1d['attributes'][_0x096a('0x25')]?_0x256c1d['attributes']:_0x4b33c4[_0x096a('0x23')];if(!_0xa1c138[_0x096a('0x1f')][_0x096a('0x26')](_0x096a('0x27'))){_0x256c1d['limit']=qs[_0x096a('0x11')](_0xa1c138[_0x096a('0x1f')][_0x096a('0x11')]);_0x256c1d[_0x096a('0x10')]=qs['offset'](_0xa1c138[_0x096a('0x1f')][_0x096a('0x10')]);}_0x256c1d[_0x096a('0x28')]=qs[_0x096a('0x29')](_0xa1c138[_0x096a('0x1f')][_0x096a('0x29')]);_0x256c1d[_0x096a('0x2a')]=qs[_0x096a('0x21')](_[_0x096a('0x2b')](_0xa1c138[_0x096a('0x1f')],_0x4b33c4[_0x096a('0x21')]));if(_0x509c17[_0x096a('0x1e')]){if(_0x509c17[_0x096a('0x20')]){_0x509c17[_0x096a('0x20')]=moment(_0x509c17[_0x096a('0x20')])[_0x096a('0x2c')](0x1,_0x096a('0x2d'));}else{_0x509c17[_0x096a('0x20')]=moment(_0x509c17['dateStart'])['add'](0x1,'day');}_[_0x096a('0x2e')](_0x256c1d[_0x096a('0x2a')],{'createdAt':{'$gte':_0x509c17[_0x096a('0x1e')],'$lte':_0x509c17['dateEnd']}});}if(_0xa1c138['query'][_0x096a('0x2f')]){_0x256c1d[_0x096a('0x2a')]=_['merge'](_0x256c1d[_0x096a('0x2a')],{'$or':_['map'](_0x256c1d[_0x096a('0x30')],function(_0x5c8077){var _0x4270d9={};_0x4270d9[_0x5c8077]={'$like':'%'+_0xa1c138[_0x096a('0x1f')][_0x096a('0x2f')]+'%'};return _0x4270d9;})});}_0x256c1d=_['merge']({},_0x256c1d,_0xa1c138[_0x096a('0x31')]);var _0x1e6c3b={'where':_0x256c1d[_0x096a('0x2a')]};return db['ChatOfflineMessage'][_0x096a('0xf')](_0x1e6c3b)[_0x096a('0x17')](function(_0x4adb7b){_0x352070[_0x096a('0xf')]=_0x4adb7b;if(_0xa1c138[_0x096a('0x1f')]['includeAll']){_0x256c1d[_0x096a('0x32')]=[{'all':!![]}];}return db['ChatOfflineMessage'][_0x096a('0x33')](_0x256c1d);})[_0x096a('0x17')](function(_0x3187a0){_0x352070[_0x096a('0x34')]=_0x3187a0;return _0x352070;})[_0x096a('0x17')](respondWithFilteredResult(_0x10bad3,_0x256c1d))['catch'](handleError(_0x10bad3,null));};exports[_0x096a('0x35')]=function(_0x4d120a,_0x2d5a41){var _0x50a37a={'raw':!![],'where':{'id':_0x4d120a[_0x096a('0x36')]['id']}},_0x5be248={};_0x5be248[_0x096a('0x23')]=_[_0x096a('0x1d')](db['ChatOfflineMessage']['rawAttributes']);_0x5be248[_0x096a('0x1f')]=_[_0x096a('0x1d')](_0x4d120a[_0x096a('0x1f')]);_0x5be248[_0x096a('0x21')]=_['intersection'](_0x5be248[_0x096a('0x23')],_0x5be248[_0x096a('0x1f')]);_0x50a37a[_0x096a('0x30')]=_[_0x096a('0x22')](_0x5be248['model'],qs[_0x096a('0x24')](_0x4d120a[_0x096a('0x1f')][_0x096a('0x24')]));_0x50a37a[_0x096a('0x30')]=_0x50a37a[_0x096a('0x30')][_0x096a('0x25')]?_0x50a37a[_0x096a('0x30')]:_0x5be248[_0x096a('0x23')];if(_0x4d120a[_0x096a('0x1f')]['includeAll']){_0x50a37a[_0x096a('0x32')]=[{'all':!![]}];}_0x50a37a=_[_0x096a('0x2e')]({},_0x50a37a,_0x4d120a[_0x096a('0x31')]);return db['ChatOfflineMessage'][_0x096a('0x37')](_0x50a37a)[_0x096a('0x17')](handleEntityNotFound(_0x2d5a41,null))[_0x096a('0x17')](respondWithResult(_0x2d5a41,null))[_0x096a('0x38')](handleError(_0x2d5a41,null));};exports[_0x096a('0x39')]=function(_0x564feb,_0x2dcc6c){return db[_0x096a('0x3a')][_0x096a('0x39')](_0x564feb['body'],{})[_0x096a('0x17')](respondWithResult(_0x2dcc6c,0xc9))[_0x096a('0x38')](handleError(_0x2dcc6c,null));};exports[_0x096a('0x16')]=function(_0x5c12c5,_0x1adb2a){if(_0x5c12c5[_0x096a('0x3b')]['id']){delete _0x5c12c5[_0x096a('0x3b')]['id'];}return db[_0x096a('0x3a')]['find']({'where':{'id':_0x5c12c5['params']['id']}})[_0x096a('0x17')](handleEntityNotFound(_0x1adb2a,null))['then'](saveUpdates(_0x5c12c5['body'],null))[_0x096a('0x17')](respondWithResult(_0x1adb2a,null))['catch'](handleError(_0x1adb2a,null));};exports[_0x096a('0x3c')]=function(_0x312aef,_0x90447){return db['ChatOfflineMessage']['find']({'where':{'id':_0x312aef[_0x096a('0x36')]['id']}})[_0x096a('0x17')](handleEntityNotFound(_0x90447,null))[_0x096a('0x17')](removeEntity(_0x90447,null))[_0x096a('0x38')](handleError(_0x90447,null));};exports['describe']=function(_0x1e3015,_0x426246){return db[_0x096a('0x3a')][_0x096a('0x3d')]()[_0x096a('0x17')](respondWithResult(_0x426246,null))[_0x096a('0x38')](handleError(_0x426246,null));};
\ No newline at end of file
+var _0xa896=['../../config/environment','sendStatus','end','json','count','offset','limit','status','set','Content-Range','apply','reject','save','update','then','error','stack','name','send','index','ChatOfflineMessage','model','keys','query','dateStart','dateEnd','filters','attributes','intersection','fields','length','order','sort','pick','add','day','where','filter','merge','map','options','include','findAll','rows','catch','params','rawAttributes','includeAll','find','create','body','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','papaparse'];(function(_0x28367b,_0x283e2e){var _0x65225b=function(_0xdedd20){while(--_0xdedd20){_0x28367b['push'](_0x28367b['shift']());}};_0x65225b(++_0x283e2e);}(_0xa896,0xb3));var _0x6a89=function(_0x3752be,_0xdb398e){_0x3752be=_0x3752be-0x0;var _0x23f88e=_0xa896[_0x3752be];return _0x23f88e;};'use strict';var jsonpatch=require(_0x6a89('0x0'));var rp=require('request-promise');var moment=require(_0x6a89('0x1'));var BPromise=require(_0x6a89('0x2'));var Mustache=require(_0x6a89('0x3'));var util=require(_0x6a89('0x4'));var path=require('path');var sox=require(_0x6a89('0x5'));var csv=require(_0x6a89('0x6'));var ejs=require(_0x6a89('0x7'));var fs=require('fs');var _=require(_0x6a89('0x8'));var squel=require('squel');var crypto=require(_0x6a89('0x9'));var jsforce=require(_0x6a89('0xa'));var deskjs=require(_0x6a89('0xb'));var toCsv=require(_0x6a89('0x6'));var querystring=require('querystring');var Papa=require(_0x6a89('0xc'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0x6a89('0xd'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x411640,_0x4fd8ff){_0x4fd8ff=_0x4fd8ff||0xcc;return function(_0x1bbd11){if(_0x1bbd11){return _0x411640[_0x6a89('0xe')](_0x4fd8ff);}return _0x411640['status'](_0x4fd8ff)[_0x6a89('0xf')]();};}function respondWithResult(_0x5e5e6f,_0x219c04){_0x219c04=_0x219c04||0xc8;return function(_0x296c34){if(_0x296c34){return _0x5e5e6f['status'](_0x219c04)[_0x6a89('0x10')](_0x296c34);}};}function respondWithFilteredResult(_0x3e423d,_0x515225){return function(_0x432bce){if(_0x432bce){var _0x277f4a=_0x432bce[_0x6a89('0x11')],_0x2a7484=_0x515225[_0x6a89('0x12')],_0x560e21=_0x515225[_0x6a89('0x12')]+_0x515225[_0x6a89('0x13')],_0x295dbb;if(_0x560e21>=_0x277f4a){_0x560e21=_0x277f4a;_0x295dbb=0xc8;}else{_0x295dbb=0xce;}_0x3e423d[_0x6a89('0x14')](_0x295dbb);return _0x3e423d[_0x6a89('0x15')](_0x6a89('0x16'),_0x2a7484+'-'+_0x560e21+'/'+_0x277f4a)['json'](_0x432bce);}return null;};}function patchUpdates(_0x50614a){return function(_0x5aece9){try{jsonpatch[_0x6a89('0x17')](_0x5aece9,_0x50614a,!![]);}catch(_0x3fc4b5){return BPromise[_0x6a89('0x18')](_0x3fc4b5);}return _0x5aece9[_0x6a89('0x19')]();};}function saveUpdates(_0x477633,_0x3a03b9){return function(_0x4f77f9){if(_0x4f77f9){return _0x4f77f9[_0x6a89('0x1a')](_0x477633)['then'](function(_0x432bfb){return _0x432bfb;});}return null;};}function removeEntity(_0x1f30b9,_0x4e3ca6){return function(_0x10c1ba){if(_0x10c1ba){return _0x10c1ba['destroy']()[_0x6a89('0x1b')](function(){_0x1f30b9[_0x6a89('0x14')](0xcc)[_0x6a89('0xf')]();});}};}function handleEntityNotFound(_0x84d6a1,_0x59943e){return function(_0x2a67a9){if(!_0x2a67a9){_0x84d6a1[_0x6a89('0xe')](0x194);}return _0x2a67a9;};}function handleError(_0x3c1671,_0x23b871){_0x23b871=_0x23b871||0x1f4;return function(_0x43d4b0){logger[_0x6a89('0x1c')](_0x43d4b0[_0x6a89('0x1d')]);if(_0x43d4b0[_0x6a89('0x1e')]){delete _0x43d4b0[_0x6a89('0x1e')];}_0x3c1671[_0x6a89('0x14')](_0x23b871)[_0x6a89('0x1f')](_0x43d4b0);};}exports[_0x6a89('0x20')]=function(_0x1d22b0,_0x15517f){var _0xbf7120={},_0x2fca65={},_0x164c19={'count':0x0,'rows':[]};var _0x12534f=db[_0x6a89('0x21')]['rawAttributes'];_0x2fca65[_0x6a89('0x22')]=_[_0x6a89('0x23')](_0x12534f);var _0x5b2d1f={'dateStart':_0x1d22b0[_0x6a89('0x24')][_0x6a89('0x25')],'dateEnd':_0x1d22b0[_0x6a89('0x24')][_0x6a89('0x26')]};delete _0x1d22b0[_0x6a89('0x24')][_0x6a89('0x25')];delete _0x1d22b0[_0x6a89('0x24')][_0x6a89('0x26')];_0x2fca65[_0x6a89('0x24')]=_['keys'](_0x1d22b0['query']);_0x2fca65[_0x6a89('0x27')]=_['intersection'](_0x2fca65[_0x6a89('0x22')],_0x2fca65['query']);_0xbf7120[_0x6a89('0x28')]=_[_0x6a89('0x29')](_0x2fca65[_0x6a89('0x22')],qs[_0x6a89('0x2a')](_0x1d22b0['query'][_0x6a89('0x2a')]));_0xbf7120[_0x6a89('0x28')]=_0xbf7120[_0x6a89('0x28')][_0x6a89('0x2b')]?_0xbf7120[_0x6a89('0x28')]:_0x2fca65[_0x6a89('0x22')];if(!_0x1d22b0[_0x6a89('0x24')]['hasOwnProperty']('nolimit')){_0xbf7120[_0x6a89('0x13')]=qs[_0x6a89('0x13')](_0x1d22b0[_0x6a89('0x24')][_0x6a89('0x13')]);_0xbf7120[_0x6a89('0x12')]=qs[_0x6a89('0x12')](_0x1d22b0[_0x6a89('0x24')][_0x6a89('0x12')]);}_0xbf7120[_0x6a89('0x2c')]=qs['sort'](_0x1d22b0[_0x6a89('0x24')][_0x6a89('0x2d')]);_0xbf7120['where']=qs['filters'](_[_0x6a89('0x2e')](_0x1d22b0[_0x6a89('0x24')],_0x2fca65[_0x6a89('0x27')]));if(_0x5b2d1f['dateStart']){if(_0x5b2d1f[_0x6a89('0x26')]){_0x5b2d1f[_0x6a89('0x26')]=moment(_0x5b2d1f[_0x6a89('0x26')])[_0x6a89('0x2f')](0x1,_0x6a89('0x30'));}else{_0x5b2d1f[_0x6a89('0x26')]=moment(_0x5b2d1f[_0x6a89('0x25')])[_0x6a89('0x2f')](0x1,'day');}_['merge'](_0xbf7120[_0x6a89('0x31')],{'createdAt':{'$gte':_0x5b2d1f[_0x6a89('0x25')],'$lte':_0x5b2d1f[_0x6a89('0x26')]}});}if(_0x1d22b0[_0x6a89('0x24')][_0x6a89('0x32')]){_0xbf7120[_0x6a89('0x31')]=_[_0x6a89('0x33')](_0xbf7120[_0x6a89('0x31')],{'$or':_[_0x6a89('0x34')](_0xbf7120[_0x6a89('0x28')],function(_0x5736bb){var _0x4cf9ae={};_0x4cf9ae[_0x5736bb]={'$like':'%'+_0x1d22b0[_0x6a89('0x24')][_0x6a89('0x32')]+'%'};return _0x4cf9ae;})});}_0xbf7120=_['merge']({},_0xbf7120,_0x1d22b0[_0x6a89('0x35')]);var _0x30e0ba={'where':_0xbf7120[_0x6a89('0x31')]};return db[_0x6a89('0x21')][_0x6a89('0x11')](_0x30e0ba)[_0x6a89('0x1b')](function(_0x114705){_0x164c19[_0x6a89('0x11')]=_0x114705;if(_0x1d22b0[_0x6a89('0x24')]['includeAll']){_0xbf7120[_0x6a89('0x36')]=[{'all':!![]}];}return db['ChatOfflineMessage'][_0x6a89('0x37')](_0xbf7120);})['then'](function(_0xdcf1fc){_0x164c19[_0x6a89('0x38')]=_0xdcf1fc;return _0x164c19;})[_0x6a89('0x1b')](respondWithFilteredResult(_0x15517f,_0xbf7120))[_0x6a89('0x39')](handleError(_0x15517f,null));};exports['show']=function(_0x1a8c68,_0x4ce445){var _0x41bce9={'raw':!![],'where':{'id':_0x1a8c68[_0x6a89('0x3a')]['id']}},_0x57bc06={};_0x57bc06[_0x6a89('0x22')]=_[_0x6a89('0x23')](db['ChatOfflineMessage'][_0x6a89('0x3b')]);_0x57bc06[_0x6a89('0x24')]=_[_0x6a89('0x23')](_0x1a8c68[_0x6a89('0x24')]);_0x57bc06['filters']=_[_0x6a89('0x29')](_0x57bc06[_0x6a89('0x22')],_0x57bc06[_0x6a89('0x24')]);_0x41bce9['attributes']=_[_0x6a89('0x29')](_0x57bc06[_0x6a89('0x22')],qs[_0x6a89('0x2a')](_0x1a8c68[_0x6a89('0x24')][_0x6a89('0x2a')]));_0x41bce9[_0x6a89('0x28')]=_0x41bce9[_0x6a89('0x28')][_0x6a89('0x2b')]?_0x41bce9['attributes']:_0x57bc06['model'];if(_0x1a8c68[_0x6a89('0x24')][_0x6a89('0x3c')]){_0x41bce9[_0x6a89('0x36')]=[{'all':!![]}];}_0x41bce9=_['merge']({},_0x41bce9,_0x1a8c68[_0x6a89('0x35')]);return db[_0x6a89('0x21')][_0x6a89('0x3d')](_0x41bce9)[_0x6a89('0x1b')](handleEntityNotFound(_0x4ce445,null))[_0x6a89('0x1b')](respondWithResult(_0x4ce445,null))[_0x6a89('0x39')](handleError(_0x4ce445,null));};exports[_0x6a89('0x3e')]=function(_0x533f86,_0x5aaf38){return db[_0x6a89('0x21')][_0x6a89('0x3e')](_0x533f86[_0x6a89('0x3f')],{})['then'](respondWithResult(_0x5aaf38,0xc9))[_0x6a89('0x39')](handleError(_0x5aaf38,null));};exports[_0x6a89('0x1a')]=function(_0x45f4b6,_0x56aff0){if(_0x45f4b6['body']['id']){delete _0x45f4b6[_0x6a89('0x3f')]['id'];}return db[_0x6a89('0x21')]['find']({'where':{'id':_0x45f4b6[_0x6a89('0x3a')]['id']}})[_0x6a89('0x1b')](handleEntityNotFound(_0x56aff0,null))[_0x6a89('0x1b')](saveUpdates(_0x45f4b6[_0x6a89('0x3f')],null))['then'](respondWithResult(_0x56aff0,null))['catch'](handleError(_0x56aff0,null));};exports['destroy']=function(_0x41c259,_0x3e64f0){return db['ChatOfflineMessage'][_0x6a89('0x3d')]({'where':{'id':_0x41c259[_0x6a89('0x3a')]['id']}})[_0x6a89('0x1b')](handleEntityNotFound(_0x3e64f0,null))[_0x6a89('0x1b')](removeEntity(_0x3e64f0,null))[_0x6a89('0x39')](handleError(_0x3e64f0,null));};exports['describe']=function(_0x4d8a9e,_0xc335db){return db[_0x6a89('0x21')]['describe']()['then'](respondWithResult(_0xc335db,null))[_0x6a89('0x39')](handleError(_0xc335db,null));};
\ No newline at end of file
index f3daf23..796b3fc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc2e5=['ChatOfflineMessage','utf8mb4','utf8mb4_unicode_ci','util','../../config/logger','moment','bluebird','./chatOfflineMessage.attributes'];(function(_0x1df6f4,_0x5ee5e1){var _0x5c24f9=function(_0x15f5d4){while(--_0x15f5d4){_0x1df6f4['push'](_0x1df6f4['shift']());}};_0x5c24f9(++_0x5ee5e1);}(_0xc2e5,0x83));var _0x5c2e=function(_0x187499,_0x5e416a){_0x187499=_0x187499-0x0;var _0x2965fe=_0xc2e5[_0x187499];return _0x2965fe;};'use strict';var _=require('lodash');var util=require(_0x5c2e('0x0'));var logger=require(_0x5c2e('0x1'))('api');var moment=require(_0x5c2e('0x2'));var BPromise=require(_0x5c2e('0x3'));var rp=require('request-promise');var attributes=require(_0x5c2e('0x4'));module['exports']=function(_0x2d74bf,_0x10b967){return _0x2d74bf['define'](_0x5c2e('0x5'),attributes,{'tableName':'chat_offline_messages','paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x5c2e('0x6'),'collate':_0x5c2e('0x7')});};
\ No newline at end of file
+var _0x8c2d=['chat_offline_messages','utf8mb4','lodash','util','../../config/logger','moment','request-promise','./chatOfflineMessage.attributes','exports','define','ChatOfflineMessage'];(function(_0x5416db,_0x55683a){var _0x243e35=function(_0x1eb623){while(--_0x1eb623){_0x5416db['push'](_0x5416db['shift']());}};_0x243e35(++_0x55683a);}(_0x8c2d,0x1f1));var _0xd8c2=function(_0x4bc88a,_0x5f1427){_0x4bc88a=_0x4bc88a-0x0;var _0x5429c0=_0x8c2d[_0x4bc88a];return _0x5429c0;};'use strict';var _=require(_0xd8c2('0x0'));var util=require(_0xd8c2('0x1'));var logger=require(_0xd8c2('0x2'))('api');var moment=require(_0xd8c2('0x3'));var BPromise=require('bluebird');var rp=require(_0xd8c2('0x4'));var attributes=require(_0xd8c2('0x5'));module[_0xd8c2('0x6')]=function(_0x45345a,_0x1aaac2){return _0x45345a[_0xd8c2('0x7')](_0xd8c2('0x8'),attributes,{'tableName':_0xd8c2('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xd8c2('0xa'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index b578346..b67210e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6845=['../../config/logger','rpc','../../config/environment','client','http','request','info','ChatOfflineMessage,\x20%s,\x20%s','ChatOfflineMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','catch','lodash','util','randomstring','../../mysqldb','../../config/utils'];(function(_0x1ddedd,_0x485606){var _0xa3e1ac=function(_0x580444){while(--_0x580444){_0x1ddedd['push'](_0x1ddedd['shift']());}};_0xa3e1ac(++_0x485606);}(_0x6845,0x1ef));var _0x5684=function(_0x90c4c2,_0x5962ff){_0x90c4c2=_0x90c4c2-0x0;var _0x1f57a9=_0x6845[_0x90c4c2];return _0x1f57a9;};'use strict';var _=require(_0x5684('0x0'));var util=require(_0x5684('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x5684('0x2'));var fs=require('fs');var db=require(_0x5684('0x3'))['db'];var utils=require(_0x5684('0x4'));var logger=require(_0x5684('0x5'))(_0x5684('0x6'));var config=require(_0x5684('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x5684('0x8')][_0x5684('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5d77f0,_0x1ddad9,_0x4ae8a4){return new BPromise(function(_0x475f26,_0x4b666a){return client[_0x5684('0xa')](_0x5d77f0,_0x4ae8a4)['then'](function(_0x305fa2){logger[_0x5684('0xb')](_0x5684('0xc'),_0x1ddad9,'request\x20sent');logger['debug'](_0x5684('0xd'),_0x1ddad9,_0x5684('0xe'),JSON[_0x5684('0xf')](_0x305fa2));if(_0x305fa2[_0x5684('0x10')]){if(_0x305fa2[_0x5684('0x10')]['code']===0x1f4){logger[_0x5684('0x10')]('ChatOfflineMessage,\x20%s,\x20%s',_0x1ddad9,_0x305fa2[_0x5684('0x10')]['message']);return _0x4b666a(_0x305fa2[_0x5684('0x10')][_0x5684('0x11')]);}logger['error'](_0x5684('0xc'),_0x1ddad9,_0x305fa2[_0x5684('0x10')][_0x5684('0x11')]);return _0x475f26(_0x305fa2[_0x5684('0x10')]['message']);}else{logger[_0x5684('0xb')](_0x5684('0xc'),_0x1ddad9,'request\x20sent');_0x475f26(_0x305fa2[_0x5684('0x12')][_0x5684('0x11')]);}})[_0x5684('0x13')](function(_0x272157){logger[_0x5684('0x10')](_0x5684('0xc'),_0x1ddad9,_0x272157);_0x4b666a(_0x272157);});});}
\ No newline at end of file
+var _0xda59=['info','ChatOfflineMessage,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then'];(function(_0x2d056d,_0x53f6c3){var _0x430fca=function(_0x38e4ee){while(--_0x38e4ee){_0x2d056d['push'](_0x2d056d['shift']());}};_0x430fca(++_0x53f6c3);}(_0xda59,0x66));var _0x9da5=function(_0x5d5120,_0x46f626){_0x5d5120=_0x5d5120-0x0;var _0x2c7f6d=_0xda59[_0x5d5120];return _0x2c7f6d;};'use strict';var _=require(_0x9da5('0x0'));var util=require(_0x9da5('0x1'));var moment=require(_0x9da5('0x2'));var BPromise=require('bluebird');var rs=require(_0x9da5('0x3'));var fs=require('fs');var db=require(_0x9da5('0x4'))['db'];var utils=require(_0x9da5('0x5'));var logger=require(_0x9da5('0x6'))('rpc');var config=require(_0x9da5('0x7'));var jayson=require(_0x9da5('0x8'));var client=jayson[_0x9da5('0x9')][_0x9da5('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3433e1,_0x3ab4b2,_0x472289){return new BPromise(function(_0x34ffb8,_0x4030bf){return client[_0x9da5('0xb')](_0x3433e1,_0x472289)[_0x9da5('0xc')](function(_0x2b8e42){logger[_0x9da5('0xd')](_0x9da5('0xe'),_0x3ab4b2,_0x9da5('0xf'));logger[_0x9da5('0x10')]('ChatOfflineMessage,\x20%s,\x20%s,\x20%s',_0x3ab4b2,_0x9da5('0xf'),JSON[_0x9da5('0x11')](_0x2b8e42));if(_0x2b8e42[_0x9da5('0x12')]){if(_0x2b8e42[_0x9da5('0x12')][_0x9da5('0x13')]===0x1f4){logger[_0x9da5('0x12')](_0x9da5('0xe'),_0x3ab4b2,_0x2b8e42['error'][_0x9da5('0x14')]);return _0x4030bf(_0x2b8e42['error']['message']);}logger['error'](_0x9da5('0xe'),_0x3ab4b2,_0x2b8e42[_0x9da5('0x12')]['message']);return _0x34ffb8(_0x2b8e42[_0x9da5('0x12')][_0x9da5('0x14')]);}else{logger[_0x9da5('0xd')](_0x9da5('0xe'),_0x3ab4b2,_0x9da5('0xf'));_0x34ffb8(_0x2b8e42[_0x9da5('0x15')][_0x9da5('0x14')]);}})[_0x9da5('0x16')](function(_0x235f72){logger[_0x9da5('0x12')](_0x9da5('0xe'),_0x3ab4b2,_0x235f72);_0x4030bf(_0x235f72);});});}
\ No newline at end of file
index cb56de0..f0a526e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd9ef=['../../config/environment','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','put','update','delete','destroy','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service'];(function(_0x2cf2e9,_0xd58ea1){var _0xd3670d=function(_0x272868){while(--_0x272868){_0x2cf2e9['push'](_0x2cf2e9['shift']());}};_0xd3670d(++_0xd58ea1);}(_0xd9ef,0x1dd));var _0xfd9e=function(_0x16ce08,_0x4ed328){_0x16ce08=_0x16ce08-0x0;var _0x1a293e=_0xd9ef[_0x16ce08];return _0x1a293e;};'use strict';var multer=require(_0xfd9e('0x0'));var util=require(_0xfd9e('0x1'));var path=require(_0xfd9e('0x2'));var express=require(_0xfd9e('0x3'));var router=express['Router']();var auth=require(_0xfd9e('0x4'));var interaction=require(_0xfd9e('0x5'));var config=require(_0xfd9e('0x6'));var controller=require('./chatOfflineMessage.controller');router[_0xfd9e('0x7')]('/',auth[_0xfd9e('0x8')](),controller[_0xfd9e('0x9')]);router[_0xfd9e('0x7')](_0xfd9e('0xa'),auth[_0xfd9e('0x8')](),controller[_0xfd9e('0xb')]);router[_0xfd9e('0x7')](_0xfd9e('0xc'),auth[_0xfd9e('0x8')](),controller[_0xfd9e('0xd')]);router[_0xfd9e('0xe')]('/',auth[_0xfd9e('0x8')](),controller[_0xfd9e('0xf')]);router[_0xfd9e('0x10')](_0xfd9e('0xc'),auth[_0xfd9e('0x8')](),controller[_0xfd9e('0x11')]);router[_0xfd9e('0x12')](_0xfd9e('0xc'),auth['isAuthenticated'](),controller[_0xfd9e('0x13')]);module[_0xfd9e('0x14')]=router;
\ No newline at end of file
+var _0x0ab4=['Router','../../components/auth/service','../../config/environment','./chatOfflineMessage.controller','get','index','isAuthenticated','describe','/:id','show','post','create','put','update','delete','exports','util','path','express'];(function(_0x4dac30,_0x3d42c8){var _0x52a5ad=function(_0x328f9b){while(--_0x328f9b){_0x4dac30['push'](_0x4dac30['shift']());}};_0x52a5ad(++_0x3d42c8);}(_0x0ab4,0x19f));var _0x40ab=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x0ab4[_0x321bb2];return _0x9c12ed;};'use strict';var multer=require('multer');var util=require(_0x40ab('0x0'));var path=require(_0x40ab('0x1'));var express=require(_0x40ab('0x2'));var router=express[_0x40ab('0x3')]();var auth=require(_0x40ab('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x40ab('0x5'));var controller=require(_0x40ab('0x6'));router[_0x40ab('0x7')]('/',auth['isAuthenticated'](),controller[_0x40ab('0x8')]);router[_0x40ab('0x7')]('/describe',auth[_0x40ab('0x9')](),controller[_0x40ab('0xa')]);router[_0x40ab('0x7')](_0x40ab('0xb'),auth['isAuthenticated'](),controller[_0x40ab('0xc')]);router[_0x40ab('0xd')]('/',auth[_0x40ab('0x9')](),controller[_0x40ab('0xe')]);router[_0x40ab('0xf')]('/:id',auth[_0x40ab('0x9')](),controller[_0x40ab('0x10')]);router[_0x40ab('0x11')](_0x40ab('0xb'),auth['isAuthenticated'](),controller['destroy']);module[_0x40ab('0x12')]=router;
\ No newline at end of file
index 2e2e46e..96c7c64 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6960=['exports','STRING','mouseOver','timeout','sequelize'];(function(_0x14090e,_0x30c2f7){var _0x554da7=function(_0x165d16){while(--_0x165d16){_0x14090e['push'](_0x14090e['shift']());}};_0x554da7(++_0x30c2f7);}(_0x6960,0xae));var _0x0696=function(_0x178e48,_0x3c9509){_0x178e48=_0x178e48-0x0;var _0x440d7e=_0x6960[_0x178e48];return _0x440d7e;};'use strict';var Sequelize=require(_0x0696('0x0'));module[_0x0696('0x1')]={'name':{'type':Sequelize[_0x0696('0x2')],'allowNull':![]},'type':{'type':Sequelize['ENUM'](_0x0696('0x3'),_0x0696('0x4')),'defaultValue':_0x0696('0x3')},'selector':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize['INTEGER']}};
\ No newline at end of file
+var _0x6b68=['INTEGER','sequelize','exports','STRING','mouseOver'];(function(_0x36f47c,_0x38ef4d){var _0x296c55=function(_0x403eec){while(--_0x403eec){_0x36f47c['push'](_0x36f47c['shift']());}};_0x296c55(++_0x38ef4d);}(_0x6b68,0x1be));var _0x86b6=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x6b68[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x86b6('0x0'));module[_0x86b6('0x1')]={'name':{'type':Sequelize[_0x86b6('0x2')],'allowNull':![]},'type':{'type':Sequelize['ENUM'](_0x86b6('0x3'),'timeout'),'defaultValue':_0x86b6('0x3')},'selector':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0x86b6('0x4')]}};
\ No newline at end of file
index 6ac8c20..965ba93 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca27=['includeAll','include','merge','options','find','catch','create','body','params','fast-json-patch','request-promise','moment','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','error','stack','name','send','model','keys','ChatProactiveAction','query','intersection','attributes','fields','length'];(function(_0x4a1956,_0x7e86c0){var _0x37ea3f=function(_0x3e9c1b){while(--_0x3e9c1b){_0x4a1956['push'](_0x4a1956['shift']());}};_0x37ea3f(++_0x7e86c0);}(_0xca27,0x1a9));var _0x7ca2=function(_0x108b41,_0x58b2bf){_0x108b41=_0x108b41-0x0;var _0x3b26ec=_0xca27[_0x108b41];return _0x3b26ec;};'use strict';var jsonpatch=require(_0x7ca2('0x0'));var rp=require(_0x7ca2('0x1'));var moment=require(_0x7ca2('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x7ca2('0x3'));var path=require(_0x7ca2('0x4'));var sox=require(_0x7ca2('0x5'));var csv=require(_0x7ca2('0x6'));var ejs=require(_0x7ca2('0x7'));var fs=require('fs');var _=require(_0x7ca2('0x8'));var squel=require(_0x7ca2('0x9'));var crypto=require(_0x7ca2('0xa'));var jsforce=require(_0x7ca2('0xb'));var deskjs=require(_0x7ca2('0xc'));var toCsv=require(_0x7ca2('0x6'));var querystring=require('querystring');var Papa=require(_0x7ca2('0xd'));var qs=require(_0x7ca2('0xe'));var logger=require('../../config/logger')(_0x7ca2('0xf'));var utils=require(_0x7ca2('0x10'));var config=require(_0x7ca2('0x11'));var db=require(_0x7ca2('0x12'))['db'];function respondWithStatusCode(_0x3bca85,_0x3733e0){_0x3733e0=_0x3733e0||0xcc;return function(_0x3a4bdf){if(_0x3a4bdf){return _0x3bca85['sendStatus'](_0x3733e0);}return _0x3bca85[_0x7ca2('0x13')](_0x3733e0)['end']();};}function respondWithResult(_0x4ebb68,_0x5beca2){_0x5beca2=_0x5beca2||0xc8;return function(_0x151c17){if(_0x151c17){return _0x4ebb68[_0x7ca2('0x13')](_0x5beca2)[_0x7ca2('0x14')](_0x151c17);}};}function respondWithFilteredResult(_0x3827d0,_0x43ae3b){return function(_0x3111d8){if(_0x3111d8){var _0x37dad4=_0x3111d8[_0x7ca2('0x15')],_0x4785a9=_0x43ae3b[_0x7ca2('0x16')],_0x3dc337=_0x43ae3b['offset']+_0x43ae3b[_0x7ca2('0x17')],_0x1a18ae;if(_0x3dc337>=_0x37dad4){_0x3dc337=_0x37dad4;_0x1a18ae=0xc8;}else{_0x1a18ae=0xce;}_0x3827d0[_0x7ca2('0x13')](_0x1a18ae);return _0x3827d0[_0x7ca2('0x18')](_0x7ca2('0x19'),_0x4785a9+'-'+_0x3dc337+'/'+_0x37dad4)[_0x7ca2('0x14')](_0x3111d8);}return null;};}function patchUpdates(_0x3811b3){return function(_0x24fbdb){try{jsonpatch[_0x7ca2('0x1a')](_0x24fbdb,_0x3811b3,!![]);}catch(_0x427625){return BPromise['reject'](_0x427625);}return _0x24fbdb[_0x7ca2('0x1b')]();};}function saveUpdates(_0x3dd65c,_0x3503a9){return function(_0x3343c5){if(_0x3343c5){return _0x3343c5[_0x7ca2('0x1c')](_0x3dd65c)[_0x7ca2('0x1d')](function(_0x468985){return _0x468985;});}return null;};}function removeEntity(_0x384093,_0x4f275b){return function(_0x4dda6f){if(_0x4dda6f){return _0x4dda6f[_0x7ca2('0x1e')]()[_0x7ca2('0x1d')](function(){_0x384093[_0x7ca2('0x13')](0xcc)['end']();});}};}function handleEntityNotFound(_0x575552,_0x24d036){return function(_0x285d89){if(!_0x285d89){_0x575552['sendStatus'](0x194);}return _0x285d89;};}function handleError(_0x3d6f84,_0x87c77){_0x87c77=_0x87c77||0x1f4;return function(_0x1d6037){logger[_0x7ca2('0x1f')](_0x1d6037[_0x7ca2('0x20')]);if(_0x1d6037[_0x7ca2('0x21')]){delete _0x1d6037[_0x7ca2('0x21')];}_0x3d6f84[_0x7ca2('0x13')](_0x87c77)[_0x7ca2('0x22')](_0x1d6037);};}exports['show']=function(_0x8babd,_0x494957){var _0x62cfe8={'raw':!![],'where':{'id':_0x8babd['params']['id']}},_0x984225={};_0x984225[_0x7ca2('0x23')]=_[_0x7ca2('0x24')](db[_0x7ca2('0x25')]['rawAttributes']);_0x984225[_0x7ca2('0x26')]=_[_0x7ca2('0x24')](_0x8babd[_0x7ca2('0x26')]);_0x984225['filters']=_[_0x7ca2('0x27')](_0x984225[_0x7ca2('0x23')],_0x984225[_0x7ca2('0x26')]);_0x62cfe8[_0x7ca2('0x28')]=_[_0x7ca2('0x27')](_0x984225['model'],qs[_0x7ca2('0x29')](_0x8babd[_0x7ca2('0x26')][_0x7ca2('0x29')]));_0x62cfe8[_0x7ca2('0x28')]=_0x62cfe8['attributes'][_0x7ca2('0x2a')]?_0x62cfe8[_0x7ca2('0x28')]:_0x984225[_0x7ca2('0x23')];if(_0x8babd['query'][_0x7ca2('0x2b')]){_0x62cfe8[_0x7ca2('0x2c')]=[{'all':!![]}];}_0x62cfe8=_[_0x7ca2('0x2d')]({},_0x62cfe8,_0x8babd[_0x7ca2('0x2e')]);return db[_0x7ca2('0x25')][_0x7ca2('0x2f')](_0x62cfe8)[_0x7ca2('0x1d')](handleEntityNotFound(_0x494957,null))['then'](respondWithResult(_0x494957,null))[_0x7ca2('0x30')](handleError(_0x494957,null));};exports[_0x7ca2('0x31')]=function(_0xaf6b61,_0x9df76e){return db[_0x7ca2('0x25')][_0x7ca2('0x31')](_0xaf6b61['body'],{})['then'](respondWithResult(_0x9df76e,0xc9))['catch'](handleError(_0x9df76e,null));};exports[_0x7ca2('0x1c')]=function(_0x1f6035,_0x48770f){if(_0x1f6035['body']['id']){delete _0x1f6035[_0x7ca2('0x32')]['id'];}return db[_0x7ca2('0x25')][_0x7ca2('0x2f')]({'where':{'id':_0x1f6035['params']['id']}})[_0x7ca2('0x1d')](handleEntityNotFound(_0x48770f,null))[_0x7ca2('0x1d')](saveUpdates(_0x1f6035[_0x7ca2('0x32')],null))[_0x7ca2('0x1d')](respondWithResult(_0x48770f,null))[_0x7ca2('0x30')](handleError(_0x48770f,null));};exports['destroy']=function(_0x5e6203,_0x4638ab){return db[_0x7ca2('0x25')][_0x7ca2('0x2f')]({'where':{'id':_0x5e6203[_0x7ca2('0x33')]['id']}})[_0x7ca2('0x1d')](handleEntityNotFound(_0x4638ab,null))[_0x7ca2('0x1d')](removeEntity(_0x4638ab,null))[_0x7ca2('0x30')](handleError(_0x4638ab,null));};
\ No newline at end of file
+var _0x9fa3=['ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','sendStatus','error','stack','name','show','params','model','keys','ChatProactiveAction','rawAttributes','query','filters','attributes','intersection','fields','length','includeAll','include','merge','options','find','catch','create','body','request-promise','moment','mustache','util','path'];(function(_0x3aeb36,_0x312dc9){var _0xa2ef21=function(_0x50a46b){while(--_0x50a46b){_0x3aeb36['push'](_0x3aeb36['shift']());}};_0xa2ef21(++_0x312dc9);}(_0x9fa3,0x67));var _0x39fa=function(_0x4464df,_0x2af1d2){_0x4464df=_0x4464df-0x0;var _0x2bca41=_0x9fa3[_0x4464df];return _0x2bca41;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x39fa('0x0'));var moment=require(_0x39fa('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x39fa('0x2'));var util=require(_0x39fa('0x3'));var path=require(_0x39fa('0x4'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x39fa('0x5'));var fs=require('fs');var _=require(_0x39fa('0x6'));var squel=require(_0x39fa('0x7'));var crypto=require(_0x39fa('0x8'));var jsforce=require(_0x39fa('0x9'));var deskjs=require(_0x39fa('0xa'));var toCsv=require('to-csv');var querystring=require(_0x39fa('0xb'));var Papa=require(_0x39fa('0xc'));var qs=require('../../components/parsers/qs');var logger=require(_0x39fa('0xd'))(_0x39fa('0xe'));var utils=require(_0x39fa('0xf'));var config=require(_0x39fa('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4eb804,_0xcf7b8f){_0xcf7b8f=_0xcf7b8f||0xcc;return function(_0x22ce40){if(_0x22ce40){return _0x4eb804['sendStatus'](_0xcf7b8f);}return _0x4eb804[_0x39fa('0x11')](_0xcf7b8f)[_0x39fa('0x12')]();};}function respondWithResult(_0x334455,_0x2a2069){_0x2a2069=_0x2a2069||0xc8;return function(_0x301e71){if(_0x301e71){return _0x334455['status'](_0x2a2069)[_0x39fa('0x13')](_0x301e71);}};}function respondWithFilteredResult(_0x57708e,_0x194e85){return function(_0x1ff451){if(_0x1ff451){var _0x4d000a=_0x1ff451[_0x39fa('0x14')],_0x194723=_0x194e85[_0x39fa('0x15')],_0x58d857=_0x194e85[_0x39fa('0x15')]+_0x194e85[_0x39fa('0x16')],_0x3d6eb5;if(_0x58d857>=_0x4d000a){_0x58d857=_0x4d000a;_0x3d6eb5=0xc8;}else{_0x3d6eb5=0xce;}_0x57708e[_0x39fa('0x11')](_0x3d6eb5);return _0x57708e[_0x39fa('0x17')](_0x39fa('0x18'),_0x194723+'-'+_0x58d857+'/'+_0x4d000a)[_0x39fa('0x13')](_0x1ff451);}return null;};}function patchUpdates(_0x48bcf5){return function(_0x5c9d58){try{jsonpatch[_0x39fa('0x19')](_0x5c9d58,_0x48bcf5,!![]);}catch(_0x314f68){return BPromise['reject'](_0x314f68);}return _0x5c9d58[_0x39fa('0x1a')]();};}function saveUpdates(_0x59e7e0,_0x1e4167){return function(_0x52d8a0){if(_0x52d8a0){return _0x52d8a0[_0x39fa('0x1b')](_0x59e7e0)[_0x39fa('0x1c')](function(_0x5b340c){return _0x5b340c;});}return null;};}function removeEntity(_0x38b6d8,_0x33eaa2){return function(_0x368e86){if(_0x368e86){return _0x368e86[_0x39fa('0x1d')]()[_0x39fa('0x1c')](function(){_0x38b6d8['status'](0xcc)[_0x39fa('0x12')]();});}};}function handleEntityNotFound(_0x1bc409,_0x816248){return function(_0x572a40){if(!_0x572a40){_0x1bc409[_0x39fa('0x1e')](0x194);}return _0x572a40;};}function handleError(_0x701d23,_0x1d2583){_0x1d2583=_0x1d2583||0x1f4;return function(_0x284565){logger[_0x39fa('0x1f')](_0x284565[_0x39fa('0x20')]);if(_0x284565[_0x39fa('0x21')]){delete _0x284565[_0x39fa('0x21')];}_0x701d23['status'](_0x1d2583)['send'](_0x284565);};}exports[_0x39fa('0x22')]=function(_0x45f238,_0xe992c9){var _0x43d741={'raw':!![],'where':{'id':_0x45f238[_0x39fa('0x23')]['id']}},_0x573568={};_0x573568[_0x39fa('0x24')]=_[_0x39fa('0x25')](db[_0x39fa('0x26')][_0x39fa('0x27')]);_0x573568[_0x39fa('0x28')]=_[_0x39fa('0x25')](_0x45f238[_0x39fa('0x28')]);_0x573568[_0x39fa('0x29')]=_['intersection'](_0x573568['model'],_0x573568[_0x39fa('0x28')]);_0x43d741[_0x39fa('0x2a')]=_[_0x39fa('0x2b')](_0x573568[_0x39fa('0x24')],qs[_0x39fa('0x2c')](_0x45f238[_0x39fa('0x28')]['fields']));_0x43d741[_0x39fa('0x2a')]=_0x43d741[_0x39fa('0x2a')][_0x39fa('0x2d')]?_0x43d741[_0x39fa('0x2a')]:_0x573568[_0x39fa('0x24')];if(_0x45f238['query'][_0x39fa('0x2e')]){_0x43d741[_0x39fa('0x2f')]=[{'all':!![]}];}_0x43d741=_[_0x39fa('0x30')]({},_0x43d741,_0x45f238[_0x39fa('0x31')]);return db[_0x39fa('0x26')][_0x39fa('0x32')](_0x43d741)[_0x39fa('0x1c')](handleEntityNotFound(_0xe992c9,null))['then'](respondWithResult(_0xe992c9,null))[_0x39fa('0x33')](handleError(_0xe992c9,null));};exports[_0x39fa('0x34')]=function(_0x39fc61,_0x47bad2){return db[_0x39fa('0x26')]['create'](_0x39fc61['body'],{})[_0x39fa('0x1c')](respondWithResult(_0x47bad2,0xc9))[_0x39fa('0x33')](handleError(_0x47bad2,null));};exports[_0x39fa('0x1b')]=function(_0x3f4810,_0x1d1c30){if(_0x3f4810[_0x39fa('0x35')]['id']){delete _0x3f4810[_0x39fa('0x35')]['id'];}return db[_0x39fa('0x26')][_0x39fa('0x32')]({'where':{'id':_0x3f4810[_0x39fa('0x23')]['id']}})[_0x39fa('0x1c')](handleEntityNotFound(_0x1d1c30,null))[_0x39fa('0x1c')](saveUpdates(_0x3f4810['body'],null))[_0x39fa('0x1c')](respondWithResult(_0x1d1c30,null))[_0x39fa('0x33')](handleError(_0x1d1c30,null));};exports[_0x39fa('0x1d')]=function(_0x18bb1a,_0x14fa92){return db[_0x39fa('0x26')][_0x39fa('0x32')]({'where':{'id':_0x18bb1a['params']['id']}})[_0x39fa('0x1c')](handleEntityNotFound(_0x14fa92,null))[_0x39fa('0x1c')](removeEntity(_0x14fa92,null))[_0x39fa('0x33')](handleError(_0x14fa92,null));};
\ No newline at end of file
index 25ed559..7cfd751 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0295=['lodash','api','request-promise','./chatProactiveAction.attributes','exports','define','ChatProactiveAction','chat_proactive_actions'];(function(_0x48ad92,_0x3881cc){var _0x40a008=function(_0x14a769){while(--_0x14a769){_0x48ad92['push'](_0x48ad92['shift']());}};_0x40a008(++_0x3881cc);}(_0x0295,0x1f0));var _0x5029=function(_0x34ecbf,_0x210898){_0x34ecbf=_0x34ecbf-0x0;var _0x115f8a=_0x0295[_0x34ecbf];return _0x115f8a;};'use strict';var _=require(_0x5029('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x5029('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x5029('0x2'));var attributes=require(_0x5029('0x3'));module[_0x5029('0x4')]=function(_0x3d0af1,_0x170504){return _0x3d0af1[_0x5029('0x5')](_0x5029('0x6'),attributes,{'tableName':_0x5029('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0b0e=['chat_proactive_actions','lodash','../../config/logger','moment','bluebird','request-promise','./chatProactiveAction.attributes','exports','define','ChatProactiveAction'];(function(_0x278e3c,_0x1c9cfd){var _0x3e2d9b=function(_0x34d928){while(--_0x34d928){_0x278e3c['push'](_0x278e3c['shift']());}};_0x3e2d9b(++_0x1c9cfd);}(_0x0b0e,0x187));var _0xe0b0=function(_0x3d4ef1,_0x5a957c){_0x3d4ef1=_0x3d4ef1-0x0;var _0x409423=_0x0b0e[_0x3d4ef1];return _0x409423;};'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':[],'timestamps':!![]});};
\ No newline at end of file
index 5cef2db..fae5a04 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffae=['stringify','code','error','message','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','info','ChatProactiveAction,\x20%s,\x20%s','request\x20sent','debug','ChatProactiveAction,\x20%s,\x20%s,\x20%s'];(function(_0x1bdf36,_0x57d2e2){var _0x29c1ae=function(_0x4d8764){while(--_0x4d8764){_0x1bdf36['push'](_0x1bdf36['shift']());}};_0x29c1ae(++_0x57d2e2);}(_0xffae,0x73));var _0xeffa=function(_0x44df17,_0x11f7ff){_0x44df17=_0x44df17-0x0;var _0x3fa45b=_0xffae[_0x44df17];return _0x3fa45b;};'use strict';var _=require(_0xeffa('0x0'));var util=require(_0xeffa('0x1'));var moment=require(_0xeffa('0x2'));var BPromise=require(_0xeffa('0x3'));var rs=require(_0xeffa('0x4'));var fs=require('fs');var db=require(_0xeffa('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xeffa('0x6'))(_0xeffa('0x7'));var config=require(_0xeffa('0x8'));var jayson=require(_0xeffa('0x9'));var client=jayson[_0xeffa('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3fd013,_0x254e01,_0x38e716){return new BPromise(function(_0x3a01a4,_0x416a4d){return client[_0xeffa('0xb')](_0x3fd013,_0x38e716)['then'](function(_0x133780){logger[_0xeffa('0xc')](_0xeffa('0xd'),_0x254e01,_0xeffa('0xe'));logger[_0xeffa('0xf')](_0xeffa('0x10'),_0x254e01,_0xeffa('0xe'),JSON[_0xeffa('0x11')](_0x133780));if(_0x133780['error']){if(_0x133780['error'][_0xeffa('0x12')]===0x1f4){logger[_0xeffa('0x13')](_0xeffa('0xd'),_0x254e01,_0x133780[_0xeffa('0x13')][_0xeffa('0x14')]);return _0x416a4d(_0x133780['error'][_0xeffa('0x14')]);}logger[_0xeffa('0x13')](_0xeffa('0xd'),_0x254e01,_0x133780[_0xeffa('0x13')][_0xeffa('0x14')]);return _0x3a01a4(_0x133780['error'][_0xeffa('0x14')]);}else{logger[_0xeffa('0xc')]('ChatProactiveAction,\x20%s,\x20%s',_0x254e01,_0xeffa('0xe'));_0x3a01a4(_0x133780['result'][_0xeffa('0x14')]);}})[_0xeffa('0x15')](function(_0x2f3a63){logger[_0xeffa('0x13')](_0xeffa('0xd'),_0x254e01,_0x2f3a63);_0x416a4d(_0x2f3a63);});});}
\ No newline at end of file
+var _0x1543=['error','ChatProactiveAction,\x20%s,\x20%s','message','request\x20sent','catch','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','then','info','ChatProactiveAction,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x50b516,_0x10d9a1){var _0x551565=function(_0x1bab55){while(--_0x1bab55){_0x50b516['push'](_0x50b516['shift']());}};_0x551565(++_0x10d9a1);}(_0x1543,0x109));var _0x3154=function(_0x4df4bf,_0x41fd3e){_0x4df4bf=_0x4df4bf-0x0;var _0x2d8faa=_0x1543[_0x4df4bf];return _0x2d8faa;};'use strict';var _=require(_0x3154('0x0'));var util=require(_0x3154('0x1'));var moment=require('moment');var BPromise=require(_0x3154('0x2'));var rs=require(_0x3154('0x3'));var fs=require('fs');var db=require(_0x3154('0x4'))['db'];var utils=require(_0x3154('0x5'));var logger=require(_0x3154('0x6'))(_0x3154('0x7'));var config=require(_0x3154('0x8'));var jayson=require(_0x3154('0x9'));var client=jayson[_0x3154('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2c8d62,_0x217cac,_0x14d74b){return new BPromise(function(_0x5ba44c,_0x1ef5fa){return client['request'](_0x2c8d62,_0x14d74b)[_0x3154('0xb')](function(_0xf4837b){logger[_0x3154('0xc')]('ChatProactiveAction,\x20%s,\x20%s',_0x217cac,'request\x20sent');logger['debug'](_0x3154('0xd'),_0x217cac,'request\x20sent',JSON[_0x3154('0xe')](_0xf4837b));if(_0xf4837b[_0x3154('0xf')]){if(_0xf4837b[_0x3154('0xf')]['code']===0x1f4){logger[_0x3154('0xf')](_0x3154('0x10'),_0x217cac,_0xf4837b[_0x3154('0xf')][_0x3154('0x11')]);return _0x1ef5fa(_0xf4837b[_0x3154('0xf')]['message']);}logger[_0x3154('0xf')](_0x3154('0x10'),_0x217cac,_0xf4837b[_0x3154('0xf')][_0x3154('0x11')]);return _0x5ba44c(_0xf4837b[_0x3154('0xf')]['message']);}else{logger[_0x3154('0xc')](_0x3154('0x10'),_0x217cac,_0x3154('0x12'));_0x5ba44c(_0xf4837b['result'][_0x3154('0x11')]);}})[_0x3154('0x13')](function(_0x3cd4f6){logger[_0x3154('0xf')](_0x3154('0x10'),_0x217cac,_0x3cd4f6);_0x1ef5fa(_0x3cd4f6);});});}
\ No newline at end of file
index dd3a254..9a8fb7f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f4d=['put','update','delete','/:id','destroy','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatProactiveAction.controller','get','isAuthenticated','show','create'];(function(_0x5b7494,_0x2958ec){var _0x5a4682=function(_0x353aa0){while(--_0x353aa0){_0x5b7494['push'](_0x5b7494['shift']());}};_0x5a4682(++_0x2958ec);}(_0x9f4d,0x1d0));var _0xd9f4=function(_0x123a99,_0x5f0db9){_0x123a99=_0x123a99-0x0;var _0x3ba390=_0x9f4d[_0x123a99];return _0x3ba390;};'use strict';var multer=require('multer');var util=require(_0xd9f4('0x0'));var path=require(_0xd9f4('0x1'));var express=require(_0xd9f4('0x2'));var router=express[_0xd9f4('0x3')]();var auth=require(_0xd9f4('0x4'));var interaction=require(_0xd9f4('0x5'));var config=require(_0xd9f4('0x6'));var controller=require(_0xd9f4('0x7'));router[_0xd9f4('0x8')]('/:id',auth[_0xd9f4('0x9')](),controller[_0xd9f4('0xa')]);router['post']('/',auth[_0xd9f4('0x9')](),controller[_0xd9f4('0xb')]);router[_0xd9f4('0xc')]('/:id',auth[_0xd9f4('0x9')](),controller[_0xd9f4('0xd')]);router[_0xd9f4('0xe')](_0xd9f4('0xf'),auth[_0xd9f4('0x9')](),controller[_0xd9f4('0x10')]);module['exports']=router;
\ No newline at end of file
+var _0xd427=['create','put','update','delete','destroy','exports','multer','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatProactiveAction.controller','/:id','show','post','isAuthenticated'];(function(_0x4fe9ef,_0x257b55){var _0x1d20fa=function(_0x104d2f){while(--_0x104d2f){_0x4fe9ef['push'](_0x4fe9ef['shift']());}};_0x1d20fa(++_0x257b55);}(_0xd427,0x138));var _0x7d42=function(_0x4ee75b,_0x8edf86){_0x4ee75b=_0x4ee75b-0x0;var _0x325722=_0xd427[_0x4ee75b];return _0x325722;};'use strict';var multer=require(_0x7d42('0x0'));var util=require('util');var path=require(_0x7d42('0x1'));var express=require(_0x7d42('0x2'));var router=express['Router']();var auth=require(_0x7d42('0x3'));var interaction=require(_0x7d42('0x4'));var config=require(_0x7d42('0x5'));var controller=require(_0x7d42('0x6'));router['get'](_0x7d42('0x7'),auth['isAuthenticated'](),controller[_0x7d42('0x8')]);router[_0x7d42('0x9')]('/',auth[_0x7d42('0xa')](),controller[_0x7d42('0xb')]);router[_0x7d42('0xc')](_0x7d42('0x7'),auth[_0x7d42('0xa')](),controller[_0x7d42('0xd')]);router[_0x7d42('0xe')]('/:id',auth[_0x7d42('0xa')](),controller[_0x7d42('0xf')]);module[_0x7d42('0x10')]=router;
\ No newline at end of file
index 0652132..a0472c5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x59d3=['name','rrmemory','beepall','roundrobin','sequelize','exports','STRING'];(function(_0x2bf141,_0x31eac7){var _0x48277b=function(_0x9fe560){while(--_0x9fe560){_0x2bf141['push'](_0x2bf141['shift']());}};_0x48277b(++_0x31eac7);}(_0x59d3,0x1e7));var _0x359d=function(_0x2d3ca8,_0x4fe5da){_0x2d3ca8=_0x2d3ca8-0x0;var _0x19ef9d=_0x59d3[_0x2d3ca8];return _0x19ef9d;};'use strict';var Sequelize=require(_0x359d('0x0'));module[_0x359d('0x1')]={'name':{'type':Sequelize[_0x359d('0x2')],'unique':_0x359d('0x3'),'allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0x359d('0x4'),_0x359d('0x5'),_0x359d('0x6'))}};
\ No newline at end of file
+var _0xcfc8=['sequelize','STRING','rrmemory'];(function(_0x6f90ec,_0x4efa55){var _0x4736c5=function(_0x1d3613){while(--_0x1d3613){_0x6f90ec['push'](_0x6f90ec['shift']());}};_0x4736c5(++_0x4efa55);}(_0xcfc8,0x19e));var _0x8cfc=function(_0xaf5379,_0x3c0322){_0xaf5379=_0xaf5379-0x0;var _0x410db8=_0xcfc8[_0xaf5379];return _0x410db8;};'use strict';var Sequelize=require(_0x8cfc('0x0'));module['exports']={'name':{'type':Sequelize[_0x8cfc('0x1')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x8cfc('0x1')]},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0x8cfc('0x2'),'beepall','roundrobin')}};
\ No newline at end of file
index 1eb8352..194beea 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1bd1=['index','ChatQueue','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','length','nolimit','limit','offset','sort','filters','day','add','where','filter','merge','map','options','includeAll','rows','catch','show','params','include','find','create','body','describe','getMembers','findOne','UserChatQueue','order','pick','ChatQueueId','findAll','User','findAndCountAll','UserId','agent','updatedAt','%s/%s','SIP','chatPause','createdAt','getTeams','hasOwnProperty','addTeams','Team','ids','Agents','union','addAgents','penalty','removeTeams','removeAgents','omit','emit','userChatQueue:save','isArray','userChatQueue:remove','getAgents','fast-json-patch','request-promise','moment','mustache','ejs','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','api','../../mysqldb','socket.io-emitter','localhost','./chatQueue.socket','register','jayson/promise','client','http','request','info','ChatQueue,\x20%s,\x20%s','request\x20sent','ChatQueue,\x20%s,\x20%s,\x20%s','error','code','message','result','sendStatus','status','end','json','count','set','Content-Range','apply','reject','update','then','destroy','stack','name'];(function(_0x3dd991,_0x4bef12){var _0x251609=function(_0x371481){while(--_0x371481){_0x3dd991['push'](_0x3dd991['shift']());}};_0x251609(++_0x4bef12);}(_0x1bd1,0x123));var _0x11bd=function(_0x73029b,_0x3df32d){_0x73029b=_0x73029b-0x0;var _0x4ef368=_0x1bd1[_0x73029b];return _0x4ef368;};'use strict';var jsonpatch=require(_0x11bd('0x0'));var rp=require(_0x11bd('0x1'));var moment=require(_0x11bd('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x11bd('0x3'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x11bd('0x4'));var fs=require('fs');var _=require(_0x11bd('0x5'));var squel=require(_0x11bd('0x6'));var crypto=require(_0x11bd('0x7'));var jsforce=require('jsforce');var deskjs=require(_0x11bd('0x8'));var toCsv=require(_0x11bd('0x9'));var querystring=require(_0x11bd('0xa'));var Papa=require(_0x11bd('0xb'));var qs=require(_0x11bd('0xc'));var logger=require('../../config/logger')(_0x11bd('0xd'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x11bd('0xe'))['db'];var socket=require(_0x11bd('0xf'))({'host':_0x11bd('0x10'),'port':0x18eb});require(_0x11bd('0x11'))[_0x11bd('0x12')](socket);var jayson=require(_0x11bd('0x13'));var client=jayson[_0x11bd('0x14')][_0x11bd('0x15')]({'port':0x232a});function respondWithRpcPromise(_0x4a4226,_0x87842a,_0x1afe14,_0x2ceee2){return new BPromise(function(_0x39b6b9,_0x3d146b){var _0x16a0b2=_0x2ceee2||client;return _0x16a0b2[_0x11bd('0x16')](_0x4a4226,_0x1afe14)['then'](function(_0x5e4cc4){logger[_0x11bd('0x17')](_0x11bd('0x18'),_0x87842a,_0x11bd('0x19'));logger['debug'](_0x11bd('0x1a'),_0x87842a,'request\x20sent',JSON['stringify'](_0x5e4cc4));if(_0x5e4cc4[_0x11bd('0x1b')]){if(_0x5e4cc4[_0x11bd('0x1b')][_0x11bd('0x1c')]===0x1f4){logger[_0x11bd('0x1b')](_0x11bd('0x18'),_0x87842a,_0x5e4cc4['error'][_0x11bd('0x1d')]);return _0x3d146b(_0x5e4cc4[_0x11bd('0x1b')][_0x11bd('0x1d')]);}logger[_0x11bd('0x1b')](_0x11bd('0x18'),_0x87842a,_0x5e4cc4[_0x11bd('0x1b')][_0x11bd('0x1d')]);return _0x39b6b9(_0x5e4cc4[_0x11bd('0x1b')]['message']);}else{logger['info'](_0x11bd('0x18'),_0x87842a,_0x11bd('0x19'));_0x39b6b9(_0x5e4cc4[_0x11bd('0x1e')][_0x11bd('0x1d')]);}})['catch'](function(_0x109590){logger['error'](_0x11bd('0x18'),_0x87842a,_0x109590);_0x3d146b(_0x109590);});});}function respondWithStatusCode(_0x104357,_0x1d7984){_0x1d7984=_0x1d7984||0xcc;return function(_0x513201){if(_0x513201){return _0x104357[_0x11bd('0x1f')](_0x1d7984);}return _0x104357[_0x11bd('0x20')](_0x1d7984)[_0x11bd('0x21')]();};}function respondWithResult(_0x27c98c,_0x3343da){_0x3343da=_0x3343da||0xc8;return function(_0x443d2c){if(_0x443d2c){return _0x27c98c[_0x11bd('0x20')](_0x3343da)[_0x11bd('0x22')](_0x443d2c);}};}function respondWithFilteredResult(_0x2c5785,_0x39fbf9){return function(_0x344826){if(_0x344826){var _0x3c6dab=_0x344826[_0x11bd('0x23')],_0x4fb6e0=_0x39fbf9['offset'],_0x255365=_0x39fbf9['offset']+_0x39fbf9['limit'],_0xfbe811;if(_0x255365>=_0x3c6dab){_0x255365=_0x3c6dab;_0xfbe811=0xc8;}else{_0xfbe811=0xce;}_0x2c5785[_0x11bd('0x20')](_0xfbe811);return _0x2c5785[_0x11bd('0x24')](_0x11bd('0x25'),_0x4fb6e0+'-'+_0x255365+'/'+_0x3c6dab)[_0x11bd('0x22')](_0x344826);}return null;};}function patchUpdates(_0x39c2e3){return function(_0x4312b3){try{jsonpatch[_0x11bd('0x26')](_0x4312b3,_0x39c2e3,!![]);}catch(_0x599f40){return BPromise[_0x11bd('0x27')](_0x599f40);}return _0x4312b3['save']();};}function saveUpdates(_0x161cb1,_0x42312c){return function(_0x48bf2b){if(_0x48bf2b){return _0x48bf2b[_0x11bd('0x28')](_0x161cb1)[_0x11bd('0x29')](function(_0x7e5030){return _0x7e5030;});}return null;};}function removeEntity(_0x2cd9c4,_0x15ee67){return function(_0x253441){if(_0x253441){return _0x253441[_0x11bd('0x2a')]()[_0x11bd('0x29')](function(){_0x2cd9c4['status'](0xcc)[_0x11bd('0x21')]();});}};}function handleEntityNotFound(_0x410f2a,_0x30d5e9){return function(_0x331c93){if(!_0x331c93){_0x410f2a[_0x11bd('0x1f')](0x194);}return _0x331c93;};}function handleError(_0xa3a169,_0x2377c9){_0x2377c9=_0x2377c9||0x1f4;return function(_0x1098f1){logger[_0x11bd('0x1b')](_0x1098f1[_0x11bd('0x2b')]);if(_0x1098f1['name']){delete _0x1098f1[_0x11bd('0x2c')];}_0xa3a169[_0x11bd('0x20')](_0x2377c9)['send'](_0x1098f1);};}exports[_0x11bd('0x2d')]=function(_0x281f22,_0x4768fc){var _0x2b2397={},_0x5c04d0={},_0x39969b={'count':0x0,'rows':[]};var _0x485915=db[_0x11bd('0x2e')][_0x11bd('0x2f')];_0x5c04d0[_0x11bd('0x30')]=_[_0x11bd('0x31')](_0x485915);var _0x3446b9={'dateStart':_0x281f22[_0x11bd('0x32')][_0x11bd('0x33')],'dateEnd':_0x281f22[_0x11bd('0x32')][_0x11bd('0x34')]};delete _0x281f22[_0x11bd('0x32')][_0x11bd('0x33')];delete _0x281f22[_0x11bd('0x32')][_0x11bd('0x34')];_0x5c04d0[_0x11bd('0x32')]=_['keys'](_0x281f22['query']);_0x5c04d0['filters']=_[_0x11bd('0x35')](_0x5c04d0[_0x11bd('0x30')],_0x5c04d0['query']);_0x2b2397[_0x11bd('0x36')]=_[_0x11bd('0x35')](_0x5c04d0[_0x11bd('0x30')],qs['fields'](_0x281f22[_0x11bd('0x32')][_0x11bd('0x37')]));_0x2b2397[_0x11bd('0x36')]=_0x2b2397[_0x11bd('0x36')][_0x11bd('0x38')]?_0x2b2397[_0x11bd('0x36')]:_0x5c04d0['model'];if(!_0x281f22[_0x11bd('0x32')]['hasOwnProperty'](_0x11bd('0x39'))){_0x2b2397['limit']=qs[_0x11bd('0x3a')](_0x281f22[_0x11bd('0x32')][_0x11bd('0x3a')]);_0x2b2397[_0x11bd('0x3b')]=qs[_0x11bd('0x3b')](_0x281f22[_0x11bd('0x32')][_0x11bd('0x3b')]);}_0x2b2397['order']=qs['sort'](_0x281f22[_0x11bd('0x32')][_0x11bd('0x3c')]);_0x2b2397['where']=qs[_0x11bd('0x3d')](_['pick'](_0x281f22[_0x11bd('0x32')],_0x5c04d0[_0x11bd('0x3d')]));if(_0x3446b9[_0x11bd('0x33')]){if(_0x3446b9[_0x11bd('0x34')]){_0x3446b9[_0x11bd('0x34')]=moment(_0x3446b9[_0x11bd('0x34')])['add'](0x1,_0x11bd('0x3e'));}else{_0x3446b9[_0x11bd('0x34')]=moment(_0x3446b9[_0x11bd('0x33')])[_0x11bd('0x3f')](0x1,_0x11bd('0x3e'));}_['merge'](_0x2b2397[_0x11bd('0x40')],{'createdAt':{'$gte':_0x3446b9['dateStart'],'$lte':_0x3446b9[_0x11bd('0x34')]}});}if(_0x281f22[_0x11bd('0x32')][_0x11bd('0x41')]){_0x2b2397['where']=_[_0x11bd('0x42')](_0x2b2397[_0x11bd('0x40')],{'$or':_[_0x11bd('0x43')](_0x2b2397[_0x11bd('0x36')],function(_0x4dd9de){var _0x14d832={};_0x14d832[_0x4dd9de]={'$like':'%'+_0x281f22[_0x11bd('0x32')][_0x11bd('0x41')]+'%'};return _0x14d832;})});}_0x2b2397=_[_0x11bd('0x42')]({},_0x2b2397,_0x281f22[_0x11bd('0x44')]);var _0x3ad982={'where':_0x2b2397[_0x11bd('0x40')]};return db[_0x11bd('0x2e')][_0x11bd('0x23')](_0x3ad982)['then'](function(_0x2d81b9){_0x39969b[_0x11bd('0x23')]=_0x2d81b9;if(_0x281f22['query'][_0x11bd('0x45')]){_0x2b2397['include']=[{'all':!![]}];}return db['ChatQueue']['findAll'](_0x2b2397);})[_0x11bd('0x29')](function(_0x2cf21d){_0x39969b[_0x11bd('0x46')]=_0x2cf21d;return _0x39969b;})[_0x11bd('0x29')](respondWithFilteredResult(_0x4768fc,_0x2b2397))[_0x11bd('0x47')](handleError(_0x4768fc,null));};exports[_0x11bd('0x48')]=function(_0x108327,_0x1d2bc2){var _0x4c66e0={'raw':!![],'where':{'id':_0x108327[_0x11bd('0x49')]['id']}},_0x51b47a={};_0x51b47a[_0x11bd('0x30')]=_[_0x11bd('0x31')](db[_0x11bd('0x2e')][_0x11bd('0x2f')]);_0x51b47a[_0x11bd('0x32')]=_['keys'](_0x108327[_0x11bd('0x32')]);_0x51b47a[_0x11bd('0x3d')]=_[_0x11bd('0x35')](_0x51b47a['model'],_0x51b47a[_0x11bd('0x32')]);_0x4c66e0[_0x11bd('0x36')]=_[_0x11bd('0x35')](_0x51b47a[_0x11bd('0x30')],qs[_0x11bd('0x37')](_0x108327[_0x11bd('0x32')][_0x11bd('0x37')]));_0x4c66e0[_0x11bd('0x36')]=_0x4c66e0[_0x11bd('0x36')][_0x11bd('0x38')]?_0x4c66e0[_0x11bd('0x36')]:_0x51b47a[_0x11bd('0x30')];if(_0x108327[_0x11bd('0x32')]['includeAll']){_0x4c66e0[_0x11bd('0x4a')]=[{'all':!![]}];}_0x4c66e0=_[_0x11bd('0x42')]({},_0x4c66e0,_0x108327[_0x11bd('0x44')]);return db['ChatQueue'][_0x11bd('0x4b')](_0x4c66e0)[_0x11bd('0x29')](handleEntityNotFound(_0x1d2bc2,null))[_0x11bd('0x29')](respondWithResult(_0x1d2bc2,null))['catch'](handleError(_0x1d2bc2,null));};exports[_0x11bd('0x4c')]=function(_0x2f7304,_0x1194af){return db[_0x11bd('0x2e')][_0x11bd('0x4c')](_0x2f7304[_0x11bd('0x4d')],{})[_0x11bd('0x29')](respondWithResult(_0x1194af,0xc9))[_0x11bd('0x47')](handleError(_0x1194af,null));};exports[_0x11bd('0x28')]=function(_0x32e430,_0x394b6d){if(_0x32e430['body']['id']){delete _0x32e430[_0x11bd('0x4d')]['id'];}return db[_0x11bd('0x2e')][_0x11bd('0x4b')]({'where':{'id':_0x32e430[_0x11bd('0x49')]['id']}})['then'](handleEntityNotFound(_0x394b6d,null))['then'](saveUpdates(_0x32e430[_0x11bd('0x4d')],null))[_0x11bd('0x29')](respondWithResult(_0x394b6d,null))[_0x11bd('0x47')](handleError(_0x394b6d,null));};exports[_0x11bd('0x2a')]=function(_0x4a1ab4,_0x5587ca){return db[_0x11bd('0x2e')]['find']({'where':{'id':_0x4a1ab4[_0x11bd('0x49')]['id']}})[_0x11bd('0x29')](handleEntityNotFound(_0x5587ca,null))[_0x11bd('0x29')](removeEntity(_0x5587ca,null))[_0x11bd('0x47')](handleError(_0x5587ca,null));};exports[_0x11bd('0x4e')]=function(_0x52fcb0,_0x39b7b8){return db[_0x11bd('0x2e')][_0x11bd('0x4e')]()[_0x11bd('0x29')](respondWithResult(_0x39b7b8,null))[_0x11bd('0x47')](handleError(_0x39b7b8,null));};exports[_0x11bd('0x4f')]=function(_0x151d19,_0x32b56b,_0x178bee){var _0x30dbda={'raw':!![],'where':{}},_0x877797={},_0x409508;return db[_0x11bd('0x2e')][_0x11bd('0x50')]({'where':{'id':_0x151d19['params']['id']}})[_0x11bd('0x29')](handleEntityNotFound(_0x32b56b,null))[_0x11bd('0x29')](function(_0x22590c){if(_0x22590c){_0x409508=_0x22590c['get']({'plain':!![]});_0x877797[_0x11bd('0x30')]=_[_0x11bd('0x31')](db[_0x11bd('0x51')]['rawAttributes']);_0x877797[_0x11bd('0x32')]=_[_0x11bd('0x31')](_0x151d19[_0x11bd('0x32')]);_0x877797[_0x11bd('0x3d')]=_['intersection'](_0x877797[_0x11bd('0x30')],_0x877797[_0x11bd('0x32')]);_0x30dbda[_0x11bd('0x36')]=_['intersection'](_0x877797['model'],qs[_0x11bd('0x37')](_0x151d19[_0x11bd('0x32')][_0x11bd('0x37')]));_0x30dbda[_0x11bd('0x36')]=_0x30dbda[_0x11bd('0x36')][_0x11bd('0x38')]?_0x30dbda[_0x11bd('0x36')]:_0x877797[_0x11bd('0x30')];if(!_0x151d19[_0x11bd('0x32')]['hasOwnProperty'](_0x11bd('0x39'))){_0x30dbda['limit']=qs[_0x11bd('0x3a')](_0x151d19[_0x11bd('0x32')][_0x11bd('0x3a')]);_0x30dbda[_0x11bd('0x3b')]=qs['offset'](_0x151d19[_0x11bd('0x32')][_0x11bd('0x3b')]);}_0x30dbda[_0x11bd('0x52')]=qs[_0x11bd('0x3c')](_0x151d19['query'][_0x11bd('0x3c')]);_0x30dbda['where']=qs[_0x11bd('0x3d')](_[_0x11bd('0x53')](_0x151d19[_0x11bd('0x32')],_0x877797[_0x11bd('0x3d')]));_0x30dbda[_0x11bd('0x40')][_0x11bd('0x54')]=_0x22590c['id'];if(_0x151d19['query'][_0x11bd('0x41')]){_0x30dbda[_0x11bd('0x40')]=_[_0x11bd('0x42')](_0x30dbda['where'],{'$or':_['map'](_0x30dbda[_0x11bd('0x36')],function(_0x4cc08f){var _0x3efb7d={};_0x3efb7d[_0x4cc08f]={'$like':'%'+_0x151d19[_0x11bd('0x32')][_0x11bd('0x41')]+'%'};return _0x3efb7d;})});}_0x30dbda=_[_0x11bd('0x42')]({},_0x30dbda,_0x151d19['options']);return db[_0x11bd('0x51')][_0x11bd('0x55')](_0x30dbda);}})[_0x11bd('0x29')](function(_0x2157b5){if(_0x2157b5){return db[_0x11bd('0x56')][_0x11bd('0x57')]({'where':{'id':_[_0x11bd('0x43')](_0x2157b5,_0x11bd('0x58')),'role':_0x11bd('0x59')},'attributes':['id',_0x11bd('0x2c'),'chatPause',_0x11bd('0x5a'),'createdAt']});}})[_0x11bd('0x29')](function(_0x3583a3){if(_0x3583a3){return{'count':_0x3583a3[_0x11bd('0x23')],'rows':_[_0x11bd('0x43')](_0x3583a3[_0x11bd('0x46')],function(_0x9fa49e){return{'membername':_0x9fa49e[_0x11bd('0x2c')],'UserId':_0x9fa49e['id'],'queue_name':_0x409508[_0x11bd('0x2c')],'ChatQueueId':_0x409508['id'],'interface':util['format'](_0x11bd('0x5b'),_0x11bd('0x5c'),_0x9fa49e['name']),'penalty':0x0,'paused':_0x9fa49e[_0x11bd('0x5d')],'createdAt':_0x9fa49e[_0x11bd('0x5e')],'updatedAt':_0x9fa49e[_0x11bd('0x5a')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x11bd('0x29')](respondWithFilteredResult(_0x32b56b,_0x30dbda))[_0x11bd('0x47')](handleError(_0x32b56b,null));};exports[_0x11bd('0x5f')]=function(_0x32c033,_0x179a9d,_0xf865ed){var _0x946da1={};var _0x39f4d5={};var _0x4d6788;var _0x29b26f;return db[_0x11bd('0x2e')][_0x11bd('0x50')]({'where':{'id':_0x32c033['params']['id']}})[_0x11bd('0x29')](handleEntityNotFound(_0x179a9d,null))['then'](function(_0x5146b4){if(_0x5146b4){_0x4d6788=_0x5146b4;_0x39f4d5[_0x11bd('0x30')]=_[_0x11bd('0x31')](db['Team'][_0x11bd('0x2f')]);_0x39f4d5[_0x11bd('0x32')]=_['keys'](_0x32c033['query']);_0x39f4d5[_0x11bd('0x3d')]=_[_0x11bd('0x35')](_0x39f4d5[_0x11bd('0x30')],_0x39f4d5[_0x11bd('0x32')]);_0x946da1['attributes']=_[_0x11bd('0x35')](_0x39f4d5['model'],qs['fields'](_0x32c033[_0x11bd('0x32')][_0x11bd('0x37')]));_0x946da1['attributes']=_0x946da1['attributes'][_0x11bd('0x38')]?_0x946da1[_0x11bd('0x36')]:_0x39f4d5[_0x11bd('0x30')];_0x946da1[_0x11bd('0x52')]=qs[_0x11bd('0x3c')](_0x32c033[_0x11bd('0x32')][_0x11bd('0x3c')]);_0x946da1['where']=qs[_0x11bd('0x3d')](_[_0x11bd('0x53')](_0x32c033['query'],_0x39f4d5['filters']));if(_0x32c033[_0x11bd('0x32')][_0x11bd('0x41')]){_0x946da1[_0x11bd('0x40')]=_['merge'](_0x946da1[_0x11bd('0x40')],{'$or':_['map'](_0x946da1[_0x11bd('0x36')],function(_0x5b3342){var _0xaff75e={};_0xaff75e[_0x5b3342]={'$like':'%'+_0x32c033['query'][_0x11bd('0x41')]+'%'};return _0xaff75e;})});}_0x946da1=_[_0x11bd('0x42')]({},_0x946da1,_0x32c033[_0x11bd('0x44')]);return _0x4d6788[_0x11bd('0x5f')](_0x946da1);}})[_0x11bd('0x29')](function(_0x22818c){if(_0x22818c){_0x29b26f=_0x22818c[_0x11bd('0x38')];if(!_0x32c033[_0x11bd('0x32')][_0x11bd('0x60')]('nolimit')){_0x946da1[_0x11bd('0x3a')]=qs['limit'](_0x32c033['query'][_0x11bd('0x3a')]);_0x946da1[_0x11bd('0x3b')]=qs[_0x11bd('0x3b')](_0x32c033['query']['offset']);}return _0x4d6788[_0x11bd('0x5f')](_0x946da1);}})['then'](function(_0x4e3002){if(_0x4e3002){return _0x4e3002?{'count':_0x29b26f,'rows':_0x4e3002}:null;}})[_0x11bd('0x29')](respondWithResult(_0x179a9d,null))[_0x11bd('0x47')](handleError(_0x179a9d,null));};exports[_0x11bd('0x61')]=function(_0x8ddb45,_0x1c97d5,_0x54f5c6){var _0x10984b=[];var _0x18b80d;return db[_0x11bd('0x62')][_0x11bd('0x55')]({'where':{'id':_0x8ddb45[_0x11bd('0x4d')][_0x11bd('0x63')]},'attributes':['id'],'include':[{'model':db[_0x11bd('0x56')],'as':_0x11bd('0x64'),'attributes':['id'],'raw':!![]}]})[_0x11bd('0x29')](function(_0x29121a){if(_0x29121a){for(var _0x45589d=0x0;_0x45589d<_0x29121a[_0x11bd('0x38')];_0x45589d+=0x1){for(var _0x25859b=0x0;_0x25859b<_0x29121a[_0x45589d][_0x11bd('0x64')][_0x11bd('0x38')];_0x25859b+=0x1){_0x10984b=_[_0x11bd('0x65')](_0x10984b,[_0x29121a[_0x45589d][_0x11bd('0x64')][_0x25859b]['id']]);}}return _0x10984b;}})['then'](function(_0x27eb00){if(_0x27eb00){return db['ChatQueue'][_0x11bd('0x4b')]({'where':{'id':_0x8ddb45[_0x11bd('0x49')]['id']}});}})[_0x11bd('0x29')](function(_0x4727b8){if(_0x4727b8){_0x18b80d=_0x4727b8;return _0x18b80d[_0x11bd('0x66')](_0x10984b,{'penalty':_0x8ddb45['body'][_0x11bd('0x67')]});}})[_0x11bd('0x29')](function(_0x5ad9e9){if(_0x5ad9e9){return _0x18b80d['addTeams'](_0x8ddb45[_0x11bd('0x4d')]['ids']);}})['then'](handleEntityNotFound(_0x1c97d5,null))[_0x11bd('0x29')](respondWithStatusCode(_0x1c97d5,null))[_0x11bd('0x47')](handleError(_0x1c97d5,null));};exports[_0x11bd('0x68')]=function(_0xa9a3b4,_0x17b8c5,_0x31b9f0){var _0x9c3feb=[];var _0x37eddf;return db[_0x11bd('0x62')]['findAll']({'where':{'id':_0xa9a3b4[_0x11bd('0x32')][_0x11bd('0x63')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x11bd('0x64'),'attributes':['id'],'raw':!![]}]})[_0x11bd('0x29')](function(_0x50bde8){if(_0x50bde8){for(var _0x536c3e=0x0;_0x536c3e<_0x50bde8[_0x11bd('0x38')];_0x536c3e+=0x1){for(var _0x36c428=0x0;_0x36c428<_0x50bde8[_0x536c3e][_0x11bd('0x64')]['length'];_0x36c428+=0x1){_0x9c3feb=_['union'](_0x9c3feb,[_0x50bde8[_0x536c3e][_0x11bd('0x64')][_0x36c428]['id']]);}}return _0x9c3feb;}})[_0x11bd('0x29')](function(_0x23da31){if(_0x23da31){return db[_0x11bd('0x2e')][_0x11bd('0x4b')]({'where':{'id':_0xa9a3b4[_0x11bd('0x49')]['id']}});}})[_0x11bd('0x29')](function(_0x24643b){if(_0x24643b){_0x37eddf=_0x24643b;return _0x37eddf[_0x11bd('0x69')](_0x9c3feb);}})[_0x11bd('0x29')](function(_0x445374){if(_0x37eddf){return _0x37eddf[_0x11bd('0x68')](_0xa9a3b4[_0x11bd('0x32')][_0x11bd('0x63')]);}})['then'](handleEntityNotFound(_0x17b8c5,null))['then'](respondWithStatusCode(_0x17b8c5,null))['catch'](handleError(_0x17b8c5,null));};exports['addAgents']=function(_0x157150,_0x4120e8,_0x4f728f){return db[_0x11bd('0x2e')][_0x11bd('0x4b')]({'where':{'id':_0x157150[_0x11bd('0x49')]['id']}})[_0x11bd('0x29')](handleEntityNotFound(_0x4120e8,null))['then'](function(_0x2a6c32){if(_0x2a6c32){return _0x2a6c32[_0x11bd('0x66')](_0x157150['body']['ids'],_[_0x11bd('0x6a')](_0x157150[_0x11bd('0x4d')],[_0x11bd('0x63'),'id'])||{})['spread'](function(_0x25eedf){for(var _0x3989a3=0x0;_0x3989a3<_0x157150[_0x11bd('0x4d')][_0x11bd('0x63')]['length'];_0x3989a3+=0x1){socket[_0x11bd('0x6b')](_0x11bd('0x6c'),{'UserId':_0x157150[_0x11bd('0x4d')][_0x11bd('0x63')][_0x3989a3],'ChatQueueId':_0x157150['params']['id']});}return _0x25eedf;});}})[_0x11bd('0x29')](respondWithResult(_0x4120e8,null))['catch'](handleError(_0x4120e8,null));};exports[_0x11bd('0x69')]=function(_0x1f8c53,_0x5d53d0,_0x3e5c21){var _0x5b3f0c;return db['ChatQueue']['find']({'where':{'id':_0x1f8c53[_0x11bd('0x49')]['id']}})['then'](handleEntityNotFound(_0x5d53d0,null))[_0x11bd('0x29')](function(_0x3efe80){if(_0x3efe80){return _0x3efe80[_0x11bd('0x69')](_0x1f8c53['query'][_0x11bd('0x63')])[_0x11bd('0x29')](function(_0x3b8a73){if(_[_0x11bd('0x6d')](_0x1f8c53['query'][_0x11bd('0x63')])){for(var _0x47bb4f=0x0;_0x47bb4f<_0x1f8c53[_0x11bd('0x32')][_0x11bd('0x63')]['length'];_0x47bb4f+=0x1){socket[_0x11bd('0x6b')](_0x11bd('0x6e'),{'UserId':_0x1f8c53[_0x11bd('0x32')][_0x11bd('0x63')][_0x47bb4f],'ChatQueueId':_0x1f8c53[_0x11bd('0x49')]['id']});}}else{socket[_0x11bd('0x6b')](_0x11bd('0x6e'),{'UserId':_0x1f8c53[_0x11bd('0x32')][_0x11bd('0x63')],'ChatQueueId':_0x1f8c53[_0x11bd('0x49')]['id']});}});}})['then'](respondWithStatusCode(_0x5d53d0,null))[_0x11bd('0x47')](handleError(_0x5d53d0,null));};exports[_0x11bd('0x6f')]=function(_0x2dcb23,_0x419ab3,_0x3b24c2){var _0x3e4322={};var _0x138ffe={};var _0x307751;var _0x255b52;return db[_0x11bd('0x2e')][_0x11bd('0x50')]({'where':{'id':_0x2dcb23[_0x11bd('0x49')]['id']}})[_0x11bd('0x29')](handleEntityNotFound(_0x419ab3,null))[_0x11bd('0x29')](function(_0x4066b5){if(_0x4066b5){_0x307751=_0x4066b5;_0x138ffe[_0x11bd('0x30')]=_['keys'](db[_0x11bd('0x56')][_0x11bd('0x2f')]);_0x138ffe[_0x11bd('0x32')]=_[_0x11bd('0x31')](_0x2dcb23['query']);_0x138ffe[_0x11bd('0x3d')]=_[_0x11bd('0x35')](_0x138ffe[_0x11bd('0x30')],_0x138ffe[_0x11bd('0x32')]);_0x3e4322[_0x11bd('0x36')]=_['intersection'](_0x138ffe[_0x11bd('0x30')],qs['fields'](_0x2dcb23[_0x11bd('0x32')]['fields']));_0x3e4322[_0x11bd('0x36')]=_0x3e4322['attributes']['length']?_0x3e4322['attributes']:_0x138ffe[_0x11bd('0x30')];_0x3e4322['order']=qs[_0x11bd('0x3c')](_0x2dcb23[_0x11bd('0x32')]['sort']);_0x3e4322[_0x11bd('0x40')]=qs[_0x11bd('0x3d')](_[_0x11bd('0x53')](_0x2dcb23[_0x11bd('0x32')],_0x138ffe[_0x11bd('0x3d')]));if(_0x2dcb23[_0x11bd('0x32')][_0x11bd('0x41')]){_0x3e4322[_0x11bd('0x40')]=_[_0x11bd('0x42')](_0x3e4322['where'],{'$or':_[_0x11bd('0x43')](_0x3e4322[_0x11bd('0x36')],function(_0x1b3f66){var _0x51bd4c={};_0x51bd4c[_0x1b3f66]={'$like':'%'+_0x2dcb23['query'][_0x11bd('0x41')]+'%'};return _0x51bd4c;})});}_0x3e4322=_[_0x11bd('0x42')]({},_0x3e4322,_0x2dcb23[_0x11bd('0x44')]);return _0x307751[_0x11bd('0x6f')](_0x3e4322);}})[_0x11bd('0x29')](function(_0x2324db){if(_0x2324db){_0x255b52=_0x2324db['length'];if(!_0x2dcb23[_0x11bd('0x32')][_0x11bd('0x60')](_0x11bd('0x39'))){_0x3e4322['limit']=qs[_0x11bd('0x3a')](_0x2dcb23[_0x11bd('0x32')][_0x11bd('0x3a')]);_0x3e4322[_0x11bd('0x3b')]=qs[_0x11bd('0x3b')](_0x2dcb23[_0x11bd('0x32')][_0x11bd('0x3b')]);}return _0x307751[_0x11bd('0x6f')](_0x3e4322);}})[_0x11bd('0x29')](function(_0x274c94){if(_0x274c94){return _0x274c94?{'count':_0x255b52,'rows':_0x274c94}:null;}})[_0x11bd('0x29')](respondWithResult(_0x419ab3,null))[_0x11bd('0x47')](handleError(_0x419ab3,null));};
\ No newline at end of file
+var _0x3870=['removeAgents','isArray','emit','userChatQueue:remove','getAgents','fast-json-patch','request-promise','moment','mustache','path','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring','../../components/parsers/qs','../../config/logger','api','../../config/environment','localhost','./chatQueue.socket','register','jayson/promise','client','info','ChatQueue,\x20%s,\x20%s','ChatQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','sendStatus','status','end','json','offset','set','Content-Range','apply','save','destroy','then','name','send','ChatQueue','model','keys','query','dateEnd','dateStart','intersection','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where','pick','add','day','merge','map','filter','options','count','includeAll','include','findAll','rows','show','params','rawAttributes','filters','length','find','create','body','update','describe','getMembers','findOne','UserChatQueue','findAndCountAll','chatPause','createdAt','%s/%s','SIP','updatedAt','Team','getTeams','addTeams','ids','Agents','addAgents','penalty','removeTeams','User','union','spread'];(function(_0x5037ab,_0x43209e){var _0x512adb=function(_0x261783){while(--_0x261783){_0x5037ab['push'](_0x5037ab['shift']());}};_0x512adb(++_0x43209e);}(_0x3870,0x146));var _0x0387=function(_0x55d756,_0x22dca5){_0x55d756=_0x55d756-0x0;var _0x6c7410=_0x3870[_0x55d756];return _0x6c7410;};'use strict';var jsonpatch=require(_0x0387('0x0'));var rp=require(_0x0387('0x1'));var moment=require(_0x0387('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x0387('0x3'));var util=require('util');var path=require(_0x0387('0x4'));var sox=require(_0x0387('0x5'));var csv=require('to-csv');var ejs=require(_0x0387('0x6'));var fs=require('fs');var _=require(_0x0387('0x7'));var squel=require(_0x0387('0x8'));var crypto=require('crypto');var jsforce=require(_0x0387('0x9'));var deskjs=require(_0x0387('0xa'));var toCsv=require(_0x0387('0xb'));var querystring=require(_0x0387('0xc'));var Papa=require('papaparse');var qs=require(_0x0387('0xd'));var logger=require(_0x0387('0xe'))(_0x0387('0xf'));var utils=require('../../config/utils');var config=require(_0x0387('0x10'));var db=require('../../mysqldb')['db'];var socket=require('socket.io-emitter')({'host':_0x0387('0x11'),'port':0x18eb});require(_0x0387('0x12'))[_0x0387('0x13')](socket);var jayson=require(_0x0387('0x14'));var client=jayson[_0x0387('0x15')]['http']({'port':0x232a});function respondWithRpcPromise(_0x284bc2,_0x6d7dc6,_0x37e90c,_0x5d93c3){return new BPromise(function(_0x5df7d3,_0x30e2d5){var _0x5d82f5=_0x5d93c3||client;return _0x5d82f5['request'](_0x284bc2,_0x37e90c)['then'](function(_0xbf104e){logger[_0x0387('0x16')](_0x0387('0x17'),_0x6d7dc6,'request\x20sent');logger['debug'](_0x0387('0x18'),_0x6d7dc6,'request\x20sent',JSON[_0x0387('0x19')](_0xbf104e));if(_0xbf104e['error']){if(_0xbf104e[_0x0387('0x1a')][_0x0387('0x1b')]===0x1f4){logger[_0x0387('0x1a')](_0x0387('0x17'),_0x6d7dc6,_0xbf104e[_0x0387('0x1a')][_0x0387('0x1c')]);return _0x30e2d5(_0xbf104e['error'][_0x0387('0x1c')]);}logger[_0x0387('0x1a')](_0x0387('0x17'),_0x6d7dc6,_0xbf104e[_0x0387('0x1a')]['message']);return _0x5df7d3(_0xbf104e[_0x0387('0x1a')][_0x0387('0x1c')]);}else{logger[_0x0387('0x16')](_0x0387('0x17'),_0x6d7dc6,_0x0387('0x1d'));_0x5df7d3(_0xbf104e[_0x0387('0x1e')][_0x0387('0x1c')]);}})[_0x0387('0x1f')](function(_0x1a0844){logger[_0x0387('0x1a')](_0x0387('0x17'),_0x6d7dc6,_0x1a0844);_0x30e2d5(_0x1a0844);});});}function respondWithStatusCode(_0x4dd366,_0x33b00a){_0x33b00a=_0x33b00a||0xcc;return function(_0x3c8331){if(_0x3c8331){return _0x4dd366[_0x0387('0x20')](_0x33b00a);}return _0x4dd366[_0x0387('0x21')](_0x33b00a)[_0x0387('0x22')]();};}function respondWithResult(_0x5923c2,_0x4044a4){_0x4044a4=_0x4044a4||0xc8;return function(_0xf62ede){if(_0xf62ede){return _0x5923c2[_0x0387('0x21')](_0x4044a4)[_0x0387('0x23')](_0xf62ede);}};}function respondWithFilteredResult(_0x57aec0,_0x4282d1){return function(_0x1d467e){if(_0x1d467e){var _0x3c577a=_0x1d467e['count'],_0x122c53=_0x4282d1[_0x0387('0x24')],_0x3a339e=_0x4282d1['offset']+_0x4282d1['limit'],_0x1dc557;if(_0x3a339e>=_0x3c577a){_0x3a339e=_0x3c577a;_0x1dc557=0xc8;}else{_0x1dc557=0xce;}_0x57aec0[_0x0387('0x21')](_0x1dc557);return _0x57aec0[_0x0387('0x25')](_0x0387('0x26'),_0x122c53+'-'+_0x3a339e+'/'+_0x3c577a)[_0x0387('0x23')](_0x1d467e);}return null;};}function patchUpdates(_0x941f78){return function(_0x23a8ad){try{jsonpatch[_0x0387('0x27')](_0x23a8ad,_0x941f78,!![]);}catch(_0x49306f){return BPromise['reject'](_0x49306f);}return _0x23a8ad[_0x0387('0x28')]();};}function saveUpdates(_0x2dfbc0,_0xa6481e){return function(_0x442abb){if(_0x442abb){return _0x442abb['update'](_0x2dfbc0)['then'](function(_0x29aa9d){return _0x29aa9d;});}return null;};}function removeEntity(_0x2caf65,_0x20a9cc){return function(_0x46fa45){if(_0x46fa45){return _0x46fa45[_0x0387('0x29')]()[_0x0387('0x2a')](function(){_0x2caf65['status'](0xcc)[_0x0387('0x22')]();});}};}function handleEntityNotFound(_0x547bcb,_0x4a7959){return function(_0x4b2f54){if(!_0x4b2f54){_0x547bcb['sendStatus'](0x194);}return _0x4b2f54;};}function handleError(_0x566ef2,_0x2675e6){_0x2675e6=_0x2675e6||0x1f4;return function(_0x58628a){logger[_0x0387('0x1a')](_0x58628a['stack']);if(_0x58628a[_0x0387('0x2b')]){delete _0x58628a['name'];}_0x566ef2['status'](_0x2675e6)[_0x0387('0x2c')](_0x58628a);};}exports['index']=function(_0x57e84f,_0xcbb6ca){var _0x5319aa={},_0x171592={},_0x373686={'count':0x0,'rows':[]};var _0x4d8889=db[_0x0387('0x2d')]['rawAttributes'];_0x171592[_0x0387('0x2e')]=_[_0x0387('0x2f')](_0x4d8889);var _0x23d1dc={'dateStart':_0x57e84f[_0x0387('0x30')]['dateStart'],'dateEnd':_0x57e84f['query'][_0x0387('0x31')]};delete _0x57e84f[_0x0387('0x30')][_0x0387('0x32')];delete _0x57e84f[_0x0387('0x30')][_0x0387('0x31')];_0x171592[_0x0387('0x30')]=_['keys'](_0x57e84f[_0x0387('0x30')]);_0x171592['filters']=_[_0x0387('0x33')](_0x171592[_0x0387('0x2e')],_0x171592[_0x0387('0x30')]);_0x5319aa[_0x0387('0x34')]=_[_0x0387('0x33')](_0x171592[_0x0387('0x2e')],qs[_0x0387('0x35')](_0x57e84f['query'][_0x0387('0x35')]));_0x5319aa[_0x0387('0x34')]=_0x5319aa[_0x0387('0x34')]['length']?_0x5319aa[_0x0387('0x34')]:_0x171592[_0x0387('0x2e')];if(!_0x57e84f[_0x0387('0x30')][_0x0387('0x36')](_0x0387('0x37'))){_0x5319aa[_0x0387('0x38')]=qs[_0x0387('0x38')](_0x57e84f['query'][_0x0387('0x38')]);_0x5319aa[_0x0387('0x24')]=qs['offset'](_0x57e84f[_0x0387('0x30')][_0x0387('0x24')]);}_0x5319aa[_0x0387('0x39')]=qs[_0x0387('0x3a')](_0x57e84f[_0x0387('0x30')][_0x0387('0x3a')]);_0x5319aa[_0x0387('0x3b')]=qs['filters'](_[_0x0387('0x3c')](_0x57e84f[_0x0387('0x30')],_0x171592['filters']));if(_0x23d1dc[_0x0387('0x32')]){if(_0x23d1dc[_0x0387('0x31')]){_0x23d1dc[_0x0387('0x31')]=moment(_0x23d1dc[_0x0387('0x31')])[_0x0387('0x3d')](0x1,_0x0387('0x3e'));}else{_0x23d1dc[_0x0387('0x31')]=moment(_0x23d1dc[_0x0387('0x32')])[_0x0387('0x3d')](0x1,_0x0387('0x3e'));}_[_0x0387('0x3f')](_0x5319aa[_0x0387('0x3b')],{'createdAt':{'$gte':_0x23d1dc['dateStart'],'$lte':_0x23d1dc[_0x0387('0x31')]}});}if(_0x57e84f[_0x0387('0x30')]['filter']){_0x5319aa['where']=_[_0x0387('0x3f')](_0x5319aa[_0x0387('0x3b')],{'$or':_[_0x0387('0x40')](_0x5319aa[_0x0387('0x34')],function(_0x3f20ea){var _0x2d614d={};_0x2d614d[_0x3f20ea]={'$like':'%'+_0x57e84f['query'][_0x0387('0x41')]+'%'};return _0x2d614d;})});}_0x5319aa=_['merge']({},_0x5319aa,_0x57e84f[_0x0387('0x42')]);var _0x511253={'where':_0x5319aa[_0x0387('0x3b')]};return db[_0x0387('0x2d')][_0x0387('0x43')](_0x511253)[_0x0387('0x2a')](function(_0x493d9d){_0x373686[_0x0387('0x43')]=_0x493d9d;if(_0x57e84f[_0x0387('0x30')][_0x0387('0x44')]){_0x5319aa[_0x0387('0x45')]=[{'all':!![]}];}return db['ChatQueue'][_0x0387('0x46')](_0x5319aa);})[_0x0387('0x2a')](function(_0x4ac32c){_0x373686[_0x0387('0x47')]=_0x4ac32c;return _0x373686;})[_0x0387('0x2a')](respondWithFilteredResult(_0xcbb6ca,_0x5319aa))[_0x0387('0x1f')](handleError(_0xcbb6ca,null));};exports[_0x0387('0x48')]=function(_0x14f2b4,_0x25ca7e){var _0x4ef32d={'raw':!![],'where':{'id':_0x14f2b4[_0x0387('0x49')]['id']}},_0x422314={};_0x422314[_0x0387('0x2e')]=_[_0x0387('0x2f')](db[_0x0387('0x2d')][_0x0387('0x4a')]);_0x422314[_0x0387('0x30')]=_['keys'](_0x14f2b4[_0x0387('0x30')]);_0x422314[_0x0387('0x4b')]=_[_0x0387('0x33')](_0x422314[_0x0387('0x2e')],_0x422314['query']);_0x4ef32d[_0x0387('0x34')]=_[_0x0387('0x33')](_0x422314[_0x0387('0x2e')],qs[_0x0387('0x35')](_0x14f2b4[_0x0387('0x30')][_0x0387('0x35')]));_0x4ef32d[_0x0387('0x34')]=_0x4ef32d['attributes'][_0x0387('0x4c')]?_0x4ef32d[_0x0387('0x34')]:_0x422314[_0x0387('0x2e')];if(_0x14f2b4['query'][_0x0387('0x44')]){_0x4ef32d[_0x0387('0x45')]=[{'all':!![]}];}_0x4ef32d=_['merge']({},_0x4ef32d,_0x14f2b4[_0x0387('0x42')]);return db[_0x0387('0x2d')][_0x0387('0x4d')](_0x4ef32d)[_0x0387('0x2a')](handleEntityNotFound(_0x25ca7e,null))[_0x0387('0x2a')](respondWithResult(_0x25ca7e,null))[_0x0387('0x1f')](handleError(_0x25ca7e,null));};exports[_0x0387('0x4e')]=function(_0x3d6ccd,_0x2b1854){return db[_0x0387('0x2d')]['create'](_0x3d6ccd[_0x0387('0x4f')],{})[_0x0387('0x2a')](respondWithResult(_0x2b1854,0xc9))[_0x0387('0x1f')](handleError(_0x2b1854,null));};exports[_0x0387('0x50')]=function(_0x230a14,_0x3b1ed8){if(_0x230a14[_0x0387('0x4f')]['id']){delete _0x230a14['body']['id'];}return db[_0x0387('0x2d')]['find']({'where':{'id':_0x230a14[_0x0387('0x49')]['id']}})[_0x0387('0x2a')](handleEntityNotFound(_0x3b1ed8,null))[_0x0387('0x2a')](saveUpdates(_0x230a14[_0x0387('0x4f')],null))[_0x0387('0x2a')](respondWithResult(_0x3b1ed8,null))['catch'](handleError(_0x3b1ed8,null));};exports['destroy']=function(_0x20e942,_0x155028){return db[_0x0387('0x2d')][_0x0387('0x4d')]({'where':{'id':_0x20e942[_0x0387('0x49')]['id']}})[_0x0387('0x2a')](handleEntityNotFound(_0x155028,null))['then'](removeEntity(_0x155028,null))['catch'](handleError(_0x155028,null));};exports[_0x0387('0x51')]=function(_0x157c62,_0x53b299){return db[_0x0387('0x2d')]['describe']()[_0x0387('0x2a')](respondWithResult(_0x53b299,null))[_0x0387('0x1f')](handleError(_0x53b299,null));};exports[_0x0387('0x52')]=function(_0x3f9b83,_0x2d6a94,_0x4aa019){var _0x253177={'raw':!![],'where':{}},_0x2eca41={},_0x27b025;return db['ChatQueue'][_0x0387('0x53')]({'where':{'id':_0x3f9b83[_0x0387('0x49')]['id']}})[_0x0387('0x2a')](handleEntityNotFound(_0x2d6a94,null))[_0x0387('0x2a')](function(_0x181c73){if(_0x181c73){_0x27b025=_0x181c73['get']({'plain':!![]});_0x2eca41[_0x0387('0x2e')]=_[_0x0387('0x2f')](db[_0x0387('0x54')][_0x0387('0x4a')]);_0x2eca41[_0x0387('0x30')]=_[_0x0387('0x2f')](_0x3f9b83['query']);_0x2eca41[_0x0387('0x4b')]=_[_0x0387('0x33')](_0x2eca41[_0x0387('0x2e')],_0x2eca41['query']);_0x253177['attributes']=_[_0x0387('0x33')](_0x2eca41[_0x0387('0x2e')],qs[_0x0387('0x35')](_0x3f9b83[_0x0387('0x30')][_0x0387('0x35')]));_0x253177[_0x0387('0x34')]=_0x253177[_0x0387('0x34')]['length']?_0x253177[_0x0387('0x34')]:_0x2eca41[_0x0387('0x2e')];if(!_0x3f9b83[_0x0387('0x30')]['hasOwnProperty'](_0x0387('0x37'))){_0x253177[_0x0387('0x38')]=qs[_0x0387('0x38')](_0x3f9b83[_0x0387('0x30')][_0x0387('0x38')]);_0x253177[_0x0387('0x24')]=qs[_0x0387('0x24')](_0x3f9b83[_0x0387('0x30')][_0x0387('0x24')]);}_0x253177[_0x0387('0x39')]=qs[_0x0387('0x3a')](_0x3f9b83[_0x0387('0x30')][_0x0387('0x3a')]);_0x253177[_0x0387('0x3b')]=qs['filters'](_[_0x0387('0x3c')](_0x3f9b83[_0x0387('0x30')],_0x2eca41[_0x0387('0x4b')]));_0x253177[_0x0387('0x3b')]['ChatQueueId']=_0x181c73['id'];if(_0x3f9b83[_0x0387('0x30')][_0x0387('0x41')]){_0x253177[_0x0387('0x3b')]=_['merge'](_0x253177['where'],{'$or':_[_0x0387('0x40')](_0x253177[_0x0387('0x34')],function(_0x4a0df1){var _0x2ee02e={};_0x2ee02e[_0x4a0df1]={'$like':'%'+_0x3f9b83[_0x0387('0x30')]['filter']+'%'};return _0x2ee02e;})});}_0x253177=_[_0x0387('0x3f')]({},_0x253177,_0x3f9b83[_0x0387('0x42')]);return db[_0x0387('0x54')][_0x0387('0x46')](_0x253177);}})[_0x0387('0x2a')](function(_0x12816e){if(_0x12816e){return db['User'][_0x0387('0x55')]({'where':{'id':_[_0x0387('0x40')](_0x12816e,'UserId'),'role':'agent'},'attributes':['id',_0x0387('0x2b'),_0x0387('0x56'),'updatedAt',_0x0387('0x57')]});}})[_0x0387('0x2a')](function(_0x5b077c){if(_0x5b077c){return{'count':_0x5b077c[_0x0387('0x43')],'rows':_['map'](_0x5b077c[_0x0387('0x47')],function(_0x5e35c8){return{'membername':_0x5e35c8[_0x0387('0x2b')],'UserId':_0x5e35c8['id'],'queue_name':_0x27b025[_0x0387('0x2b')],'ChatQueueId':_0x27b025['id'],'interface':util['format'](_0x0387('0x58'),_0x0387('0x59'),_0x5e35c8['name']),'penalty':0x0,'paused':_0x5e35c8[_0x0387('0x56')],'createdAt':_0x5e35c8[_0x0387('0x57')],'updatedAt':_0x5e35c8[_0x0387('0x5a')]};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x2d6a94,_0x253177))[_0x0387('0x1f')](handleError(_0x2d6a94,null));};exports['getTeams']=function(_0x4728cd,_0x1822dd,_0x152eb3){var _0x50b366={};var _0x365965={};var _0x4e20af;var _0xdfee03;return db[_0x0387('0x2d')]['findOne']({'where':{'id':_0x4728cd[_0x0387('0x49')]['id']}})[_0x0387('0x2a')](handleEntityNotFound(_0x1822dd,null))['then'](function(_0x2e01a6){if(_0x2e01a6){_0x4e20af=_0x2e01a6;_0x365965['model']=_[_0x0387('0x2f')](db[_0x0387('0x5b')][_0x0387('0x4a')]);_0x365965[_0x0387('0x30')]=_[_0x0387('0x2f')](_0x4728cd['query']);_0x365965['filters']=_[_0x0387('0x33')](_0x365965[_0x0387('0x2e')],_0x365965[_0x0387('0x30')]);_0x50b366[_0x0387('0x34')]=_[_0x0387('0x33')](_0x365965[_0x0387('0x2e')],qs[_0x0387('0x35')](_0x4728cd['query'][_0x0387('0x35')]));_0x50b366[_0x0387('0x34')]=_0x50b366[_0x0387('0x34')][_0x0387('0x4c')]?_0x50b366['attributes']:_0x365965[_0x0387('0x2e')];_0x50b366[_0x0387('0x39')]=qs[_0x0387('0x3a')](_0x4728cd[_0x0387('0x30')][_0x0387('0x3a')]);_0x50b366[_0x0387('0x3b')]=qs[_0x0387('0x4b')](_[_0x0387('0x3c')](_0x4728cd[_0x0387('0x30')],_0x365965['filters']));if(_0x4728cd[_0x0387('0x30')][_0x0387('0x41')]){_0x50b366[_0x0387('0x3b')]=_['merge'](_0x50b366[_0x0387('0x3b')],{'$or':_['map'](_0x50b366[_0x0387('0x34')],function(_0x574e99){var _0x3c8636={};_0x3c8636[_0x574e99]={'$like':'%'+_0x4728cd['query']['filter']+'%'};return _0x3c8636;})});}_0x50b366=_[_0x0387('0x3f')]({},_0x50b366,_0x4728cd[_0x0387('0x42')]);return _0x4e20af[_0x0387('0x5c')](_0x50b366);}})[_0x0387('0x2a')](function(_0x5725a9){if(_0x5725a9){_0xdfee03=_0x5725a9[_0x0387('0x4c')];if(!_0x4728cd['query']['hasOwnProperty'](_0x0387('0x37'))){_0x50b366['limit']=qs[_0x0387('0x38')](_0x4728cd[_0x0387('0x30')]['limit']);_0x50b366[_0x0387('0x24')]=qs['offset'](_0x4728cd[_0x0387('0x30')][_0x0387('0x24')]);}return _0x4e20af[_0x0387('0x5c')](_0x50b366);}})[_0x0387('0x2a')](function(_0x5e4265){if(_0x5e4265){return _0x5e4265?{'count':_0xdfee03,'rows':_0x5e4265}:null;}})[_0x0387('0x2a')](respondWithResult(_0x1822dd,null))['catch'](handleError(_0x1822dd,null));};exports[_0x0387('0x5d')]=function(_0x344613,_0x4a48ef,_0x3f9b0f){var _0x5a89d7=[];var _0x53e2fe;return db[_0x0387('0x5b')]['findAll']({'where':{'id':_0x344613[_0x0387('0x4f')][_0x0387('0x5e')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x0387('0x5f'),'attributes':['id'],'raw':!![]}]})[_0x0387('0x2a')](function(_0x221ac0){if(_0x221ac0){for(var _0x1a927d=0x0;_0x1a927d<_0x221ac0[_0x0387('0x4c')];_0x1a927d+=0x1){for(var _0x1a4759=0x0;_0x1a4759<_0x221ac0[_0x1a927d][_0x0387('0x5f')]['length'];_0x1a4759+=0x1){_0x5a89d7=_['union'](_0x5a89d7,[_0x221ac0[_0x1a927d][_0x0387('0x5f')][_0x1a4759]['id']]);}}return _0x5a89d7;}})[_0x0387('0x2a')](function(_0x4a9bdd){if(_0x4a9bdd){return db['ChatQueue'][_0x0387('0x4d')]({'where':{'id':_0x344613['params']['id']}});}})[_0x0387('0x2a')](function(_0x236a77){if(_0x236a77){_0x53e2fe=_0x236a77;return _0x53e2fe[_0x0387('0x60')](_0x5a89d7,{'penalty':_0x344613[_0x0387('0x4f')][_0x0387('0x61')]});}})[_0x0387('0x2a')](function(_0x4ea50b){if(_0x4ea50b){return _0x53e2fe[_0x0387('0x5d')](_0x344613[_0x0387('0x4f')][_0x0387('0x5e')]);}})[_0x0387('0x2a')](handleEntityNotFound(_0x4a48ef,null))[_0x0387('0x2a')](respondWithStatusCode(_0x4a48ef,null))['catch'](handleError(_0x4a48ef,null));};exports[_0x0387('0x62')]=function(_0x257cbd,_0x5ced4e,_0x4a056f){var _0x1f0eaa=[];var _0x17c85b;return db[_0x0387('0x5b')][_0x0387('0x46')]({'where':{'id':_0x257cbd['query'][_0x0387('0x5e')]},'attributes':['id'],'include':[{'model':db[_0x0387('0x63')],'as':_0x0387('0x5f'),'attributes':['id'],'raw':!![]}]})[_0x0387('0x2a')](function(_0x3176c6){if(_0x3176c6){for(var _0x293476=0x0;_0x293476<_0x3176c6['length'];_0x293476+=0x1){for(var _0x1e536e=0x0;_0x1e536e<_0x3176c6[_0x293476]['Agents'][_0x0387('0x4c')];_0x1e536e+=0x1){_0x1f0eaa=_[_0x0387('0x64')](_0x1f0eaa,[_0x3176c6[_0x293476][_0x0387('0x5f')][_0x1e536e]['id']]);}}return _0x1f0eaa;}})[_0x0387('0x2a')](function(_0x40aad1){if(_0x40aad1){return db[_0x0387('0x2d')]['find']({'where':{'id':_0x257cbd[_0x0387('0x49')]['id']}});}})['then'](function(_0x16b02e){if(_0x16b02e){_0x17c85b=_0x16b02e;return _0x17c85b['removeAgents'](_0x1f0eaa);}})[_0x0387('0x2a')](function(_0x3b39b5){if(_0x17c85b){return _0x17c85b['removeTeams'](_0x257cbd['query'][_0x0387('0x5e')]);}})[_0x0387('0x2a')](handleEntityNotFound(_0x5ced4e,null))['then'](respondWithStatusCode(_0x5ced4e,null))['catch'](handleError(_0x5ced4e,null));};exports[_0x0387('0x60')]=function(_0x34de02,_0x346feb,_0x3f005e){return db['ChatQueue'][_0x0387('0x4d')]({'where':{'id':_0x34de02[_0x0387('0x49')]['id']}})[_0x0387('0x2a')](handleEntityNotFound(_0x346feb,null))['then'](function(_0x2f39f7){if(_0x2f39f7){return _0x2f39f7[_0x0387('0x60')](_0x34de02['body'][_0x0387('0x5e')],_['omit'](_0x34de02[_0x0387('0x4f')],['ids','id'])||{})[_0x0387('0x65')](function(_0x5cde0d){for(var _0x3d3d8b=0x0;_0x3d3d8b<_0x34de02['body'][_0x0387('0x5e')][_0x0387('0x4c')];_0x3d3d8b+=0x1){socket['emit']('userChatQueue:save',{'UserId':_0x34de02['body']['ids'][_0x3d3d8b],'ChatQueueId':_0x34de02[_0x0387('0x49')]['id']});}return _0x5cde0d;});}})[_0x0387('0x2a')](respondWithResult(_0x346feb,null))[_0x0387('0x1f')](handleError(_0x346feb,null));};exports['removeAgents']=function(_0x255914,_0x36a853,_0x197735){var _0x3c36bb;return db[_0x0387('0x2d')]['find']({'where':{'id':_0x255914['params']['id']}})[_0x0387('0x2a')](handleEntityNotFound(_0x36a853,null))[_0x0387('0x2a')](function(_0x581003){if(_0x581003){return _0x581003[_0x0387('0x66')](_0x255914[_0x0387('0x30')]['ids'])[_0x0387('0x2a')](function(_0x1f3b2f){if(_[_0x0387('0x67')](_0x255914[_0x0387('0x30')][_0x0387('0x5e')])){for(var _0x50580e=0x0;_0x50580e<_0x255914['query'][_0x0387('0x5e')][_0x0387('0x4c')];_0x50580e+=0x1){socket[_0x0387('0x68')](_0x0387('0x69'),{'UserId':_0x255914[_0x0387('0x30')]['ids'][_0x50580e],'ChatQueueId':_0x255914[_0x0387('0x49')]['id']});}}else{socket['emit'](_0x0387('0x69'),{'UserId':_0x255914[_0x0387('0x30')][_0x0387('0x5e')],'ChatQueueId':_0x255914[_0x0387('0x49')]['id']});}});}})[_0x0387('0x2a')](respondWithStatusCode(_0x36a853,null))['catch'](handleError(_0x36a853,null));};exports[_0x0387('0x6a')]=function(_0x424f94,_0x1a116d,_0x51cf62){var _0x503091={};var _0x1ea3ae={};var _0x4eb287;var _0x2c2540;return db[_0x0387('0x2d')][_0x0387('0x53')]({'where':{'id':_0x424f94[_0x0387('0x49')]['id']}})['then'](handleEntityNotFound(_0x1a116d,null))[_0x0387('0x2a')](function(_0x4e89ed){if(_0x4e89ed){_0x4eb287=_0x4e89ed;_0x1ea3ae[_0x0387('0x2e')]=_[_0x0387('0x2f')](db[_0x0387('0x63')][_0x0387('0x4a')]);_0x1ea3ae[_0x0387('0x30')]=_[_0x0387('0x2f')](_0x424f94[_0x0387('0x30')]);_0x1ea3ae[_0x0387('0x4b')]=_[_0x0387('0x33')](_0x1ea3ae[_0x0387('0x2e')],_0x1ea3ae[_0x0387('0x30')]);_0x503091['attributes']=_['intersection'](_0x1ea3ae[_0x0387('0x2e')],qs[_0x0387('0x35')](_0x424f94[_0x0387('0x30')][_0x0387('0x35')]));_0x503091['attributes']=_0x503091[_0x0387('0x34')]['length']?_0x503091[_0x0387('0x34')]:_0x1ea3ae['model'];_0x503091['order']=qs[_0x0387('0x3a')](_0x424f94[_0x0387('0x30')][_0x0387('0x3a')]);_0x503091[_0x0387('0x3b')]=qs[_0x0387('0x4b')](_[_0x0387('0x3c')](_0x424f94[_0x0387('0x30')],_0x1ea3ae[_0x0387('0x4b')]));if(_0x424f94[_0x0387('0x30')][_0x0387('0x41')]){_0x503091[_0x0387('0x3b')]=_['merge'](_0x503091[_0x0387('0x3b')],{'$or':_[_0x0387('0x40')](_0x503091['attributes'],function(_0x4c1003){var _0x2a8442={};_0x2a8442[_0x4c1003]={'$like':'%'+_0x424f94[_0x0387('0x30')][_0x0387('0x41')]+'%'};return _0x2a8442;})});}_0x503091=_['merge']({},_0x503091,_0x424f94['options']);return _0x4eb287[_0x0387('0x6a')](_0x503091);}})[_0x0387('0x2a')](function(_0x1e459b){if(_0x1e459b){_0x2c2540=_0x1e459b['length'];if(!_0x424f94[_0x0387('0x30')]['hasOwnProperty'](_0x0387('0x37'))){_0x503091['limit']=qs[_0x0387('0x38')](_0x424f94[_0x0387('0x30')][_0x0387('0x38')]);_0x503091[_0x0387('0x24')]=qs[_0x0387('0x24')](_0x424f94[_0x0387('0x30')]['offset']);}return _0x4eb287[_0x0387('0x6a')](_0x503091);}})[_0x0387('0x2a')](function(_0x173f0d){if(_0x173f0d){return _0x173f0d?{'count':_0x2c2540,'rows':_0x173f0d}:null;}})['then'](respondWithResult(_0x1a116d,null))[_0x0387('0x1f')](handleError(_0x1a116d,null));};
\ No newline at end of file
index db98997..08bd5d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4502=['../../mysqldb','ChatQueue','remove','emit','hasOwnProperty','exports','events'];(function(_0x5f3f88,_0x562baf){var _0xd08119=function(_0x42dbf7){while(--_0x42dbf7){_0x5f3f88['push'](_0x5f3f88['shift']());}};_0xd08119(++_0x562baf);}(_0x4502,0xa0));var _0x2450=function(_0x4f54ab,_0xd87c8c){_0x4f54ab=_0x4f54ab-0x0;var _0x255cc2=_0x4502[_0x4f54ab];return _0x255cc2;};'use strict';var EventEmitter=require(_0x2450('0x0'));var ChatQueue=require(_0x2450('0x1'))['db'][_0x2450('0x2')];var ChatQueueEvents=new EventEmitter();ChatQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x2450('0x3')};function emitEvent(_0x3d7eea){return function(_0x4a70eb,_0x358eaf,_0x2f2f0c){ChatQueueEvents[_0x2450('0x4')](_0x3d7eea+':'+_0x4a70eb['id'],_0x4a70eb);ChatQueueEvents[_0x2450('0x4')](_0x3d7eea,_0x4a70eb);_0x2f2f0c(null);};}for(var e in events){if(events[_0x2450('0x5')](e)){var event=events[e];ChatQueue['hook'](e,emitEvent(event));}}module[_0x2450('0x6')]=ChatQueueEvents;
\ No newline at end of file
+var _0xd01f=['hook','events','ChatQueue','save','update','emit','hasOwnProperty'];(function(_0x25e7cb,_0x3579b7){var _0x375d92=function(_0xe8cf3b){while(--_0xe8cf3b){_0x25e7cb['push'](_0x25e7cb['shift']());}};_0x375d92(++_0x3579b7);}(_0xd01f,0x1d6));var _0xfd01=function(_0x45969a,_0x17f84d){_0x45969a=_0x45969a-0x0;var _0x187203=_0xd01f[_0x45969a];return _0x187203;};'use strict';var EventEmitter=require(_0xfd01('0x0'));var ChatQueue=require('../../mysqldb')['db'][_0xfd01('0x1')];var ChatQueueEvents=new EventEmitter();ChatQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xfd01('0x2'),'afterUpdate':_0xfd01('0x3'),'afterDestroy':'remove'};function emitEvent(_0x1d090d){return function(_0x553fa6,_0x862009,_0x27c4fe){ChatQueueEvents[_0xfd01('0x4')](_0x1d090d+':'+_0x553fa6['id'],_0x553fa6);ChatQueueEvents['emit'](_0x1d090d,_0x553fa6);_0x27c4fe(null);};}for(var e in events){if(events[_0xfd01('0x5')](e)){var event=events[e];ChatQueue[_0xfd01('0x6')](e,emitEvent(event));}}module['exports']=ChatQueueEvents;
\ No newline at end of file
index 7fe4137..8c3caaf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcca7=['define','ChatQueue','chat_queues','lodash','util','../../config/logger','api','request-promise','exports'];(function(_0x82269f,_0x36d861){var _0x31f596=function(_0x392ac8){while(--_0x392ac8){_0x82269f['push'](_0x82269f['shift']());}};_0x31f596(++_0x36d861);}(_0xcca7,0x1aa));var _0x7cca=function(_0x28e3a,_0xf74e6d){_0x28e3a=_0x28e3a-0x0;var _0x35372b=_0xcca7[_0x28e3a];return _0x35372b;};'use strict';var _=require(_0x7cca('0x0'));var util=require(_0x7cca('0x1'));var logger=require(_0x7cca('0x2'))(_0x7cca('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x7cca('0x4'));var attributes=require('./chatQueue.attributes');module[_0x7cca('0x5')]=function(_0x9523f7,_0x2126f7){return _0x9523f7[_0x7cca('0x6')](_0x7cca('0x7'),attributes,{'tableName':_0x7cca('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb4c7=['lodash','util','../../config/logger','api','moment','request-promise','./chatQueue.attributes','exports','ChatQueue','chat_queues'];(function(_0x432f24,_0x2267e2){var _0x3267fe=function(_0x1cc646){while(--_0x1cc646){_0x432f24['push'](_0x432f24['shift']());}};_0x3267fe(++_0x2267e2);}(_0xb4c7,0x1ea));var _0x7b4c=function(_0x2fb697,_0x14871c){_0x2fb697=_0x2fb697-0x0;var _0x4592f1=_0xb4c7[_0x2fb697];return _0x4592f1;};'use strict';var _=require(_0x7b4c('0x0'));var util=require(_0x7b4c('0x1'));var logger=require(_0x7b4c('0x2'))(_0x7b4c('0x3'));var moment=require(_0x7b4c('0x4'));var BPromise=require('bluebird');var rp=require(_0x7b4c('0x5'));var attributes=require(_0x7b4c('0x6'));module[_0x7b4c('0x7')]=function(_0x17cea2,_0x2d9945){return _0x17cea2['define'](_0x7b4c('0x8'),attributes,{'tableName':_0x7b4c('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 7d640dd..4b50ab5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['rpc','../../config/environment','jayson/promise','client','socket.io-emitter','localhost','./chatQueue.socket','request','then','info','ChatQueue,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','GetChatQueue','ChatQueue','findAll','options','raw','where','limit','map','include','model','attributes','debug','ShowChatQueue','find','lodash','util','moment','../../mysqldb','../../config/logger'];(function(_0x2f5722,_0x2dc37a){var _0x4c2081=function(_0x3c39a2){while(--_0x3c39a2){_0x2f5722['push'](_0x2f5722['shift']());}};_0x4c2081(++_0x2dc37a);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4c7fb5,_0x2548ef){_0x4c7fb5=_0x4c7fb5-0x0;var _0x2e10ac=_0xa9e0[_0x4c7fb5];return _0x2e10ac;};'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 db=require(_0x0a9e('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x0a9e('0x4'))(_0x0a9e('0x5'));var config=require(_0x0a9e('0x6'));var jayson=require(_0x0a9e('0x7'));var client=jayson[_0x0a9e('0x8')]['http']({'port':0x232a});var socket=require(_0x0a9e('0x9'))({'host':_0x0a9e('0xa'),'port':0x18eb});require(_0x0a9e('0xb'))['register'](socket);function respondWithRpcPromise(_0x503809,_0xe42b77,_0x56465b){return new BPromise(function(_0x52cace,_0x39753a){return client[_0x0a9e('0xc')](_0x503809,_0x56465b)[_0x0a9e('0xd')](function(_0x3ab53f){logger[_0x0a9e('0xe')](_0x0a9e('0xf'),_0xe42b77,'request\x20sent');logger['debug']('ChatQueue,\x20%s,\x20%s,\x20%s',_0xe42b77,'request\x20sent',JSON[_0x0a9e('0x10')](_0x3ab53f));if(_0x3ab53f[_0x0a9e('0x11')]){if(_0x3ab53f[_0x0a9e('0x11')][_0x0a9e('0x12')]===0x1f4){logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x3ab53f['error'][_0x0a9e('0x13')]);return _0x39753a(_0x3ab53f[_0x0a9e('0x11')][_0x0a9e('0x13')]);}logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x3ab53f[_0x0a9e('0x11')]['message']);return _0x52cace(_0x3ab53f[_0x0a9e('0x11')]['message']);}else{logger[_0x0a9e('0xe')]('ChatQueue,\x20%s,\x20%s',_0xe42b77,_0x0a9e('0x14'));_0x52cace(_0x3ab53f[_0x0a9e('0x15')]['message']);}})[_0x0a9e('0x16')](function(_0x5a0a06){logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x5a0a06);_0x39753a(_0x5a0a06);});});}exports[_0x0a9e('0x17')]=function(_0x205fd6){var _0x31b1ca=this;return new Promise(function(_0x2eb11f,_0x530eb7){return db[_0x0a9e('0x18')][_0x0a9e('0x19')]({'raw':_0x205fd6[_0x0a9e('0x1a')]?_0x205fd6[_0x0a9e('0x1a')][_0x0a9e('0x1b')]===undefined?!![]:![]:!![],'where':_0x205fd6['options']?_0x205fd6[_0x0a9e('0x1a')][_0x0a9e('0x1c')]||null:null,'attributes':_0x205fd6['options']?_0x205fd6[_0x0a9e('0x1a')]['attributes']||null:null,'limit':_0x205fd6['options']?_0x205fd6[_0x0a9e('0x1a')][_0x0a9e('0x1d')]||null:null,'include':_0x205fd6[_0x0a9e('0x1a')]?_0x205fd6[_0x0a9e('0x1a')]['include']?_[_0x0a9e('0x1e')](_0x205fd6[_0x0a9e('0x1a')][_0x0a9e('0x1f')],function(_0x4d00e6){return{'model':db[_0x4d00e6[_0x0a9e('0x20')]],'as':_0x4d00e6['as'],'attributes':_0x4d00e6[_0x0a9e('0x21')],'include':_0x4d00e6[_0x0a9e('0x1f')]?_['map'](_0x4d00e6['include'],function(_0x197ec0){return{'model':db[_0x197ec0[_0x0a9e('0x20')]],'as':_0x197ec0['as'],'attributes':_0x197ec0[_0x0a9e('0x21')],'include':_0x197ec0[_0x0a9e('0x1f')]?_['map'](_0x197ec0[_0x0a9e('0x1f')],function(_0x479bc4){return{'model':db[_0x479bc4[_0x0a9e('0x20')]],'as':_0x479bc4['as'],'attributes':_0x479bc4['attributes']};}):[]};}):[]};}):[]:[]})[_0x0a9e('0xd')](function(_0x34dc65){logger[_0x0a9e('0xe')](_0x0a9e('0x17'),_0x205fd6);logger[_0x0a9e('0x22')](_0x0a9e('0x17'),_0x205fd6,JSON[_0x0a9e('0x10')](_0x34dc65));_0x2eb11f(_0x34dc65);})[_0x0a9e('0x16')](function(_0x5a101a){logger[_0x0a9e('0x11')](_0x0a9e('0x17'),_0x5a101a[_0x0a9e('0x13')],_0x205fd6);_0x530eb7(_0x31b1ca[_0x0a9e('0x11')](0x1f4,_0x5a101a['message']));});});};exports[_0x0a9e('0x23')]=function(_0x40e7a3){var _0x1843b2=this;return new Promise(function(_0x824a4f,_0x58b06f){return db[_0x0a9e('0x18')][_0x0a9e('0x24')]({'raw':_0x40e7a3[_0x0a9e('0x1a')]?_0x40e7a3[_0x0a9e('0x1a')]['raw']===undefined?!![]:![]:!![],'where':_0x40e7a3[_0x0a9e('0x1a')]?_0x40e7a3['options'][_0x0a9e('0x1c')]||null:null,'attributes':_0x40e7a3[_0x0a9e('0x1a')]?_0x40e7a3[_0x0a9e('0x1a')][_0x0a9e('0x21')]||null:null,'include':_0x40e7a3[_0x0a9e('0x1a')]?_0x40e7a3['options'][_0x0a9e('0x1f')]?_[_0x0a9e('0x1e')](_0x40e7a3[_0x0a9e('0x1a')][_0x0a9e('0x1f')],function(_0x2b45ea){return{'model':db[_0x2b45ea[_0x0a9e('0x20')]],'as':_0x2b45ea['as'],'attributes':_0x2b45ea[_0x0a9e('0x21')],'include':_0x2b45ea[_0x0a9e('0x1f')]?_['map'](_0x2b45ea[_0x0a9e('0x1f')],function(_0x5e7238){return{'model':db[_0x5e7238[_0x0a9e('0x20')]],'as':_0x5e7238['as'],'attributes':_0x5e7238[_0x0a9e('0x21')],'include':_0x5e7238[_0x0a9e('0x1f')]?_[_0x0a9e('0x1e')](_0x5e7238['include'],function(_0x191e91){return{'model':db[_0x191e91[_0x0a9e('0x20')]],'as':_0x191e91['as'],'attributes':_0x191e91[_0x0a9e('0x21')]};}):[]};}):[]};}):[]:[]})[_0x0a9e('0xd')](function(_0x4853b1){logger['info'](_0x0a9e('0x23'),_0x40e7a3);logger['debug'](_0x0a9e('0x23'),_0x40e7a3,JSON[_0x0a9e('0x10')](_0x4853b1));_0x824a4f(_0x4853b1);})[_0x0a9e('0x16')](function(_0x1ef87a){logger['error'](_0x0a9e('0x23'),_0x1ef87a[_0x0a9e('0x13')],_0x40e7a3);_0x58b06f(_0x1843b2[_0x0a9e('0x11')](0x1f4,_0x1ef87a['message']));});});};
\ No newline at end of file
+var _0xa9e0=['rpc','../../config/environment','jayson/promise','client','socket.io-emitter','localhost','./chatQueue.socket','request','then','info','ChatQueue,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','GetChatQueue','ChatQueue','findAll','options','raw','where','limit','map','include','model','attributes','debug','ShowChatQueue','find','lodash','util','moment','../../mysqldb','../../config/logger'];(function(_0x59ff99,_0x3693c1){var _0x280e9d=function(_0x4124f9){while(--_0x4124f9){_0x59ff99['push'](_0x59ff99['shift']());}};_0x280e9d(++_0x3693c1);}(_0xa9e0,0x123));var _0x0a9e=function(_0x30ae5e,_0x391fc4){_0x30ae5e=_0x30ae5e-0x0;var _0x1f2e93=_0xa9e0[_0x30ae5e];return _0x1f2e93;};'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 db=require(_0x0a9e('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x0a9e('0x4'))(_0x0a9e('0x5'));var config=require(_0x0a9e('0x6'));var jayson=require(_0x0a9e('0x7'));var client=jayson[_0x0a9e('0x8')]['http']({'port':0x232a});var socket=require(_0x0a9e('0x9'))({'host':_0x0a9e('0xa'),'port':0x18eb});require(_0x0a9e('0xb'))['register'](socket);function respondWithRpcPromise(_0x503809,_0xe42b77,_0x56465b){return new BPromise(function(_0x52cace,_0x39753a){return client[_0x0a9e('0xc')](_0x503809,_0x56465b)[_0x0a9e('0xd')](function(_0x3ab53f){logger[_0x0a9e('0xe')](_0x0a9e('0xf'),_0xe42b77,'request\x20sent');logger['debug']('ChatQueue,\x20%s,\x20%s,\x20%s',_0xe42b77,'request\x20sent',JSON[_0x0a9e('0x10')](_0x3ab53f));if(_0x3ab53f[_0x0a9e('0x11')]){if(_0x3ab53f[_0x0a9e('0x11')][_0x0a9e('0x12')]===0x1f4){logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x3ab53f['error'][_0x0a9e('0x13')]);return _0x39753a(_0x3ab53f[_0x0a9e('0x11')][_0x0a9e('0x13')]);}logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x3ab53f[_0x0a9e('0x11')]['message']);return _0x52cace(_0x3ab53f[_0x0a9e('0x11')]['message']);}else{logger[_0x0a9e('0xe')]('ChatQueue,\x20%s,\x20%s',_0xe42b77,_0x0a9e('0x14'));_0x52cace(_0x3ab53f[_0x0a9e('0x15')]['message']);}})[_0x0a9e('0x16')](function(_0x5a0a06){logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x5a0a06);_0x39753a(_0x5a0a06);});});}exports[_0x0a9e('0x17')]=function(_0x205fd6){var _0x31b1ca=this;return new Promise(function(_0x2eb11f,_0x530eb7){return db[_0x0a9e('0x18')][_0x0a9e('0x19')]({'raw':_0x205fd6[_0x0a9e('0x1a')]?_0x205fd6[_0x0a9e('0x1a')][_0x0a9e('0x1b')]===undefined?!![]:![]:!![],'where':_0x205fd6['options']?_0x205fd6[_0x0a9e('0x1a')][_0x0a9e('0x1c')]||null:null,'attributes':_0x205fd6['options']?_0x205fd6[_0x0a9e('0x1a')]['attributes']||null:null,'limit':_0x205fd6['options']?_0x205fd6[_0x0a9e('0x1a')][_0x0a9e('0x1d')]||null:null,'include':_0x205fd6[_0x0a9e('0x1a')]?_0x205fd6[_0x0a9e('0x1a')]['include']?_[_0x0a9e('0x1e')](_0x205fd6[_0x0a9e('0x1a')][_0x0a9e('0x1f')],function(_0x4d00e6){return{'model':db[_0x4d00e6[_0x0a9e('0x20')]],'as':_0x4d00e6['as'],'attributes':_0x4d00e6[_0x0a9e('0x21')],'include':_0x4d00e6[_0x0a9e('0x1f')]?_['map'](_0x4d00e6['include'],function(_0x197ec0){return{'model':db[_0x197ec0[_0x0a9e('0x20')]],'as':_0x197ec0['as'],'attributes':_0x197ec0[_0x0a9e('0x21')],'include':_0x197ec0[_0x0a9e('0x1f')]?_['map'](_0x197ec0[_0x0a9e('0x1f')],function(_0x479bc4){return{'model':db[_0x479bc4[_0x0a9e('0x20')]],'as':_0x479bc4['as'],'attributes':_0x479bc4['attributes']};}):[]};}):[]};}):[]:[]})[_0x0a9e('0xd')](function(_0x34dc65){logger[_0x0a9e('0xe')](_0x0a9e('0x17'),_0x205fd6);logger[_0x0a9e('0x22')](_0x0a9e('0x17'),_0x205fd6,JSON[_0x0a9e('0x10')](_0x34dc65));_0x2eb11f(_0x34dc65);})[_0x0a9e('0x16')](function(_0x5a101a){logger[_0x0a9e('0x11')](_0x0a9e('0x17'),_0x5a101a[_0x0a9e('0x13')],_0x205fd6);_0x530eb7(_0x31b1ca[_0x0a9e('0x11')](0x1f4,_0x5a101a['message']));});});};exports[_0x0a9e('0x23')]=function(_0x40e7a3){var _0x1843b2=this;return new Promise(function(_0x824a4f,_0x58b06f){return db[_0x0a9e('0x18')][_0x0a9e('0x24')]({'raw':_0x40e7a3[_0x0a9e('0x1a')]?_0x40e7a3[_0x0a9e('0x1a')]['raw']===undefined?!![]:![]:!![],'where':_0x40e7a3[_0x0a9e('0x1a')]?_0x40e7a3['options'][_0x0a9e('0x1c')]||null:null,'attributes':_0x40e7a3[_0x0a9e('0x1a')]?_0x40e7a3[_0x0a9e('0x1a')][_0x0a9e('0x21')]||null:null,'include':_0x40e7a3[_0x0a9e('0x1a')]?_0x40e7a3['options'][_0x0a9e('0x1f')]?_[_0x0a9e('0x1e')](_0x40e7a3[_0x0a9e('0x1a')][_0x0a9e('0x1f')],function(_0x2b45ea){return{'model':db[_0x2b45ea[_0x0a9e('0x20')]],'as':_0x2b45ea['as'],'attributes':_0x2b45ea[_0x0a9e('0x21')],'include':_0x2b45ea[_0x0a9e('0x1f')]?_['map'](_0x2b45ea[_0x0a9e('0x1f')],function(_0x5e7238){return{'model':db[_0x5e7238[_0x0a9e('0x20')]],'as':_0x5e7238['as'],'attributes':_0x5e7238[_0x0a9e('0x21')],'include':_0x5e7238[_0x0a9e('0x1f')]?_[_0x0a9e('0x1e')](_0x5e7238['include'],function(_0x191e91){return{'model':db[_0x191e91[_0x0a9e('0x20')]],'as':_0x191e91['as'],'attributes':_0x191e91[_0x0a9e('0x21')]};}):[]};}):[]};}):[]:[]})[_0x0a9e('0xd')](function(_0x4853b1){logger['info'](_0x0a9e('0x23'),_0x40e7a3);logger['debug'](_0x0a9e('0x23'),_0x40e7a3,JSON[_0x0a9e('0x10')](_0x4853b1));_0x824a4f(_0x4853b1);})[_0x0a9e('0x16')](function(_0x1ef87a){logger['error'](_0x0a9e('0x23'),_0x1ef87a[_0x0a9e('0x13')],_0x40e7a3);_0x58b06f(_0x1843b2[_0x0a9e('0x11')](0x1f4,_0x1ef87a['message']));});});};
\ No newline at end of file
index 4b25f4a..81bb585 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(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0xa9e0,0x123));var _0x0a9e=function(_0x47e7cb,_0x4c1b8d){_0x47e7cb=_0x47e7cb-0x0;var _0x2a8874=_0xa9e0[_0x47e7cb];return _0x2a8874;};'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(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0xa9e0[_0x3947c9];return _0x2e7871;};'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 0b09fb3..f453faa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x777d=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatQueue.controller','get','index','/describe','isAuthenticated','describe','/:id','show','/:id/members','getAgents','post','create','/:id/teams','addTeams','/:id/users','update','delete','destroy','removeTeams','removeAgents','exports','path','express'];(function(_0x13551a,_0xbc6b47){var _0x3aee18=function(_0x7e8d24){while(--_0x7e8d24){_0x13551a['push'](_0x13551a['shift']());}};_0x3aee18(++_0xbc6b47);}(_0x777d,0xa0));var _0xd777=function(_0x3616bb,_0x86fe00){_0x3616bb=_0x3616bb-0x0;var _0x1c0994=_0x777d[_0x3616bb];return _0x1c0994;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xd777('0x0'));var express=require(_0xd777('0x1'));var router=express[_0xd777('0x2')]();var auth=require(_0xd777('0x3'));var interaction=require(_0xd777('0x4'));var config=require(_0xd777('0x5'));var controller=require(_0xd777('0x6'));router[_0xd777('0x7')]('/',auth['isAuthenticated'](),controller[_0xd777('0x8')]);router['get'](_0xd777('0x9'),auth[_0xd777('0xa')](),controller[_0xd777('0xb')]);router[_0xd777('0x7')](_0xd777('0xc'),auth[_0xd777('0xa')](),controller[_0xd777('0xd')]);router[_0xd777('0x7')](_0xd777('0xe'),auth[_0xd777('0xa')](),controller['getMembers']);router[_0xd777('0x7')]('/:id/teams',auth[_0xd777('0xa')](),controller['getTeams']);router[_0xd777('0x7')]('/:id/users',auth[_0xd777('0xa')](),controller[_0xd777('0xf')]);router[_0xd777('0x10')]('/',auth['isAuthenticated'](),controller[_0xd777('0x11')]);router[_0xd777('0x10')](_0xd777('0x12'),auth['isAuthenticated'](),controller[_0xd777('0x13')]);router['post'](_0xd777('0x14'),auth[_0xd777('0xa')](),controller['addAgents']);router['put'](_0xd777('0xc'),auth[_0xd777('0xa')](),controller[_0xd777('0x15')]);router[_0xd777('0x16')](_0xd777('0xc'),auth[_0xd777('0xa')](),controller[_0xd777('0x17')]);router[_0xd777('0x16')]('/:id/teams',auth[_0xd777('0xa')](),controller[_0xd777('0x18')]);router[_0xd777('0x16')](_0xd777('0x14'),auth[_0xd777('0xa')](),controller[_0xd777('0x19')]);module[_0xd777('0x1a')]=router;
\ No newline at end of file
+var _0x4713=['/describe','isAuthenticated','/:id','show','/:id/teams','/:id/users','getAgents','post','create','addTeams','addAgents','put','update','delete','removeTeams','removeAgents','multer','path','express','Router','../../components/interaction/service','../../config/environment','index','get'];(function(_0x3623af,_0x5379c4){var _0x12de80=function(_0x2c2324){while(--_0x2c2324){_0x3623af['push'](_0x3623af['shift']());}};_0x12de80(++_0x5379c4);}(_0x4713,0x178));var _0x3471=function(_0x34311c,_0x52a317){_0x34311c=_0x34311c-0x0;var _0x4b8b35=_0x4713[_0x34311c];return _0x4b8b35;};'use strict';var multer=require(_0x3471('0x0'));var util=require('util');var path=require(_0x3471('0x1'));var express=require(_0x3471('0x2'));var router=express[_0x3471('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x3471('0x4'));var config=require(_0x3471('0x5'));var controller=require('./chatQueue.controller');router['get']('/',auth['isAuthenticated'](),controller[_0x3471('0x6')]);router[_0x3471('0x7')](_0x3471('0x8'),auth[_0x3471('0x9')](),controller['describe']);router[_0x3471('0x7')](_0x3471('0xa'),auth['isAuthenticated'](),controller[_0x3471('0xb')]);router[_0x3471('0x7')]('/:id/members',auth[_0x3471('0x9')](),controller['getMembers']);router[_0x3471('0x7')](_0x3471('0xc'),auth[_0x3471('0x9')](),controller['getTeams']);router[_0x3471('0x7')](_0x3471('0xd'),auth[_0x3471('0x9')](),controller[_0x3471('0xe')]);router[_0x3471('0xf')]('/',auth[_0x3471('0x9')](),controller[_0x3471('0x10')]);router[_0x3471('0xf')](_0x3471('0xc'),auth[_0x3471('0x9')](),controller[_0x3471('0x11')]);router[_0x3471('0xf')](_0x3471('0xd'),auth['isAuthenticated'](),controller[_0x3471('0x12')]);router[_0x3471('0x13')]('/:id',auth[_0x3471('0x9')](),controller[_0x3471('0x14')]);router[_0x3471('0x15')](_0x3471('0xa'),auth['isAuthenticated'](),controller['destroy']);router[_0x3471('0x15')](_0x3471('0xc'),auth[_0x3471('0x9')](),controller[_0x3471('0x16')]);router['delete']('/:id/users',auth['isAuthenticated'](),controller[_0x3471('0x17')]);module['exports']=router;
\ No newline at end of file
index 1977234..2bbe5c5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x28ae=['exports','STRING','DATE'];(function(_0x5316a9,_0xb1692e){var _0x30d7df=function(_0x555846){while(--_0x555846){_0x5316a9['push'](_0x5316a9['shift']());}};_0x30d7df(++_0xb1692e);}(_0x28ae,0x6c));var _0xe28a=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x28ae[_0x3dd15e];return _0x231fd0;};'use strict';var moment=require('moment');var Sequelize=require('sequelize');module[_0xe28a('0x0')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'from':{'type':Sequelize[_0xe28a('0x1')]},'joinAt':{'type':Sequelize[_0xe28a('0x2')]},'leaveAt':{'type':Sequelize[_0xe28a('0x2')]},'acceptAt':{'type':Sequelize[_0xe28a('0x2')]},'exitAt':{'type':Sequelize[_0xe28a('0x2')]},'reason':{'type':Sequelize[_0xe28a('0x1')]}};
\ No newline at end of file
+var _0xaa9b=['moment','sequelize','exports','STRING','DATE'];(function(_0x12d773,_0x253abd){var _0x152e37=function(_0x51b1f2){while(--_0x51b1f2){_0x12d773['push'](_0x12d773['shift']());}};_0x152e37(++_0x253abd);}(_0xaa9b,0x10e));var _0xbaa9=function(_0x4951a6,_0x339cdf){_0x4951a6=_0x4951a6-0x0;var _0x2c6b22=_0xaa9b[_0x4951a6];return _0x2c6b22;};'use strict';var moment=require(_0xbaa9('0x0'));var Sequelize=require(_0xbaa9('0x1'));module[_0xbaa9('0x2')]={'uniqueid':{'type':Sequelize[_0xbaa9('0x3')],'allowNull':![]},'from':{'type':Sequelize[_0xbaa9('0x3')]},'joinAt':{'type':Sequelize[_0xbaa9('0x4')]},'leaveAt':{'type':Sequelize[_0xbaa9('0x4')]},'acceptAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize[_0xbaa9('0x4')]},'reason':{'type':Sequelize[_0xbaa9('0x3')]}};
\ No newline at end of file
index bfc154f..80249cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf8b6=['save','update','then','destroy','error','stack','name','send','index','ChatQueueReport','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','fields','attributes','nolimit','limit','order','sort','where','pick','day','add','merge','filter','map','includeAll','include','rows','params','length','options','find','catch','create','body','describe','moment','sox','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','set','Content-Range','json','apply','reject'];(function(_0x57f2c8,_0x58182c){var _0x135982=function(_0x5ad54b){while(--_0x5ad54b){_0x57f2c8['push'](_0x57f2c8['shift']());}};_0x135982(++_0x58182c);}(_0xf8b6,0x132));var _0x6f8b=function(_0x2fbf6c,_0x2c8c21){_0x2fbf6c=_0x2fbf6c-0x0;var _0x468976=_0xf8b6[_0x2fbf6c];return _0x468976;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x6f8b('0x0'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0x6f8b('0x1'));var csv=require(_0x6f8b('0x2'));var ejs=require(_0x6f8b('0x3'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x6f8b('0x4'));var jsforce=require(_0x6f8b('0x5'));var deskjs=require(_0x6f8b('0x6'));var toCsv=require(_0x6f8b('0x2'));var querystring=require(_0x6f8b('0x7'));var Papa=require(_0x6f8b('0x8'));var qs=require(_0x6f8b('0x9'));var logger=require(_0x6f8b('0xa'))('api');var utils=require(_0x6f8b('0xb'));var config=require(_0x6f8b('0xc'));var db=require(_0x6f8b('0xd'))['db'];function respondWithStatusCode(_0x299bbe,_0x1fa198){_0x1fa198=_0x1fa198||0xcc;return function(_0x1f0761){if(_0x1f0761){return _0x299bbe[_0x6f8b('0xe')](_0x1fa198);}return _0x299bbe[_0x6f8b('0xf')](_0x1fa198)[_0x6f8b('0x10')]();};}function respondWithResult(_0x30f085,_0x3d5011){_0x3d5011=_0x3d5011||0xc8;return function(_0x48cee9){if(_0x48cee9){return _0x30f085[_0x6f8b('0xf')](_0x3d5011)['json'](_0x48cee9);}};}function respondWithFilteredResult(_0x104195,_0x57548d){return function(_0x37ad3c){if(_0x37ad3c){var _0x9a5ab1=_0x37ad3c[_0x6f8b('0x11')],_0x5a5387=_0x57548d['offset'],_0x42268b=_0x57548d[_0x6f8b('0x12')]+_0x57548d['limit'],_0x44f289;if(_0x42268b>=_0x9a5ab1){_0x42268b=_0x9a5ab1;_0x44f289=0xc8;}else{_0x44f289=0xce;}_0x104195[_0x6f8b('0xf')](_0x44f289);return _0x104195[_0x6f8b('0x13')](_0x6f8b('0x14'),_0x5a5387+'-'+_0x42268b+'/'+_0x9a5ab1)[_0x6f8b('0x15')](_0x37ad3c);}return null;};}function patchUpdates(_0x47063b){return function(_0x5f0eb6){try{jsonpatch[_0x6f8b('0x16')](_0x5f0eb6,_0x47063b,!![]);}catch(_0x2cd548){return BPromise[_0x6f8b('0x17')](_0x2cd548);}return _0x5f0eb6[_0x6f8b('0x18')]();};}function saveUpdates(_0x55f977,_0x2535fb){return function(_0x598892){if(_0x598892){return _0x598892[_0x6f8b('0x19')](_0x55f977)[_0x6f8b('0x1a')](function(_0xeda6f){return _0xeda6f;});}return null;};}function removeEntity(_0x2b22e4,_0x5726a7){return function(_0x356099){if(_0x356099){return _0x356099[_0x6f8b('0x1b')]()[_0x6f8b('0x1a')](function(){_0x2b22e4['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x1751a3,_0x8a6965){return function(_0x361004){if(!_0x361004){_0x1751a3[_0x6f8b('0xe')](0x194);}return _0x361004;};}function handleError(_0x3bbadc,_0x721bb3){_0x721bb3=_0x721bb3||0x1f4;return function(_0x1b671c){logger[_0x6f8b('0x1c')](_0x1b671c[_0x6f8b('0x1d')]);if(_0x1b671c[_0x6f8b('0x1e')]){delete _0x1b671c['name'];}_0x3bbadc[_0x6f8b('0xf')](_0x721bb3)[_0x6f8b('0x1f')](_0x1b671c);};}exports[_0x6f8b('0x20')]=function(_0x3be853,_0x15bb50){var _0x1107c2={},_0x26f2a5={},_0x4e9912={'count':0x0,'rows':[]};var _0x396d28=db[_0x6f8b('0x21')][_0x6f8b('0x22')];_0x26f2a5[_0x6f8b('0x23')]=_[_0x6f8b('0x24')](_0x396d28);var _0x40353c={'dateStart':_0x3be853[_0x6f8b('0x25')][_0x6f8b('0x26')],'dateEnd':_0x3be853[_0x6f8b('0x25')][_0x6f8b('0x27')]};delete _0x3be853['query'][_0x6f8b('0x26')];delete _0x3be853[_0x6f8b('0x25')][_0x6f8b('0x27')];_0x26f2a5[_0x6f8b('0x25')]=_[_0x6f8b('0x24')](_0x3be853[_0x6f8b('0x25')]);_0x26f2a5[_0x6f8b('0x28')]=_[_0x6f8b('0x29')](_0x26f2a5[_0x6f8b('0x23')],_0x26f2a5['query']);_0x1107c2['attributes']=_['intersection'](_0x26f2a5[_0x6f8b('0x23')],qs['fields'](_0x3be853[_0x6f8b('0x25')][_0x6f8b('0x2a')]));_0x1107c2[_0x6f8b('0x2b')]=_0x1107c2[_0x6f8b('0x2b')]['length']?_0x1107c2['attributes']:_0x26f2a5[_0x6f8b('0x23')];if(!_0x3be853['query']['hasOwnProperty'](_0x6f8b('0x2c'))){_0x1107c2[_0x6f8b('0x2d')]=qs[_0x6f8b('0x2d')](_0x3be853[_0x6f8b('0x25')][_0x6f8b('0x2d')]);_0x1107c2['offset']=qs[_0x6f8b('0x12')](_0x3be853[_0x6f8b('0x25')]['offset']);}_0x1107c2[_0x6f8b('0x2e')]=qs[_0x6f8b('0x2f')](_0x3be853[_0x6f8b('0x25')][_0x6f8b('0x2f')]);_0x1107c2[_0x6f8b('0x30')]=qs[_0x6f8b('0x28')](_[_0x6f8b('0x31')](_0x3be853[_0x6f8b('0x25')],_0x26f2a5[_0x6f8b('0x28')]));if(_0x40353c[_0x6f8b('0x26')]){if(_0x40353c[_0x6f8b('0x27')]){_0x40353c[_0x6f8b('0x27')]=moment(_0x40353c[_0x6f8b('0x27')])['add'](0x1,_0x6f8b('0x32'));}else{_0x40353c[_0x6f8b('0x27')]=moment(_0x40353c[_0x6f8b('0x26')])[_0x6f8b('0x33')](0x1,_0x6f8b('0x32'));}_[_0x6f8b('0x34')](_0x1107c2['where'],{'createdAt':{'$gte':_0x40353c[_0x6f8b('0x26')],'$lte':_0x40353c['dateEnd']}});}if(_0x3be853[_0x6f8b('0x25')][_0x6f8b('0x35')]){_0x1107c2[_0x6f8b('0x30')]=_[_0x6f8b('0x34')](_0x1107c2[_0x6f8b('0x30')],{'$or':_[_0x6f8b('0x36')](_0x1107c2[_0x6f8b('0x2b')],function(_0x419ba9){var _0x10717a={};_0x10717a[_0x419ba9]={'$like':'%'+_0x3be853['query'][_0x6f8b('0x35')]+'%'};return _0x10717a;})});}_0x1107c2=_[_0x6f8b('0x34')]({},_0x1107c2,_0x3be853['options']);var _0x3d2358={'where':_0x1107c2[_0x6f8b('0x30')]};return db['ChatQueueReport']['count'](_0x3d2358)[_0x6f8b('0x1a')](function(_0x26f769){_0x4e9912[_0x6f8b('0x11')]=_0x26f769;if(_0x3be853[_0x6f8b('0x25')][_0x6f8b('0x37')]){_0x1107c2[_0x6f8b('0x38')]=[{'all':!![]}];}return db[_0x6f8b('0x21')]['findAll'](_0x1107c2);})[_0x6f8b('0x1a')](function(_0x82fdd2){_0x4e9912[_0x6f8b('0x39')]=_0x82fdd2;return _0x4e9912;})['then'](respondWithFilteredResult(_0x15bb50,_0x1107c2))['catch'](handleError(_0x15bb50,null));};exports['show']=function(_0xd88bd9,_0xe4ec42){var _0x3f8d82={'raw':!![],'where':{'id':_0xd88bd9[_0x6f8b('0x3a')]['id']}},_0x4949ce={};_0x4949ce[_0x6f8b('0x23')]=_[_0x6f8b('0x24')](db[_0x6f8b('0x21')][_0x6f8b('0x22')]);_0x4949ce[_0x6f8b('0x25')]=_[_0x6f8b('0x24')](_0xd88bd9[_0x6f8b('0x25')]);_0x4949ce['filters']=_['intersection'](_0x4949ce[_0x6f8b('0x23')],_0x4949ce['query']);_0x3f8d82[_0x6f8b('0x2b')]=_[_0x6f8b('0x29')](_0x4949ce[_0x6f8b('0x23')],qs[_0x6f8b('0x2a')](_0xd88bd9[_0x6f8b('0x25')]['fields']));_0x3f8d82[_0x6f8b('0x2b')]=_0x3f8d82[_0x6f8b('0x2b')][_0x6f8b('0x3b')]?_0x3f8d82[_0x6f8b('0x2b')]:_0x4949ce[_0x6f8b('0x23')];if(_0xd88bd9[_0x6f8b('0x25')][_0x6f8b('0x37')]){_0x3f8d82[_0x6f8b('0x38')]=[{'all':!![]}];}_0x3f8d82=_[_0x6f8b('0x34')]({},_0x3f8d82,_0xd88bd9[_0x6f8b('0x3c')]);return db['ChatQueueReport'][_0x6f8b('0x3d')](_0x3f8d82)[_0x6f8b('0x1a')](handleEntityNotFound(_0xe4ec42,null))[_0x6f8b('0x1a')](respondWithResult(_0xe4ec42,null))[_0x6f8b('0x3e')](handleError(_0xe4ec42,null));};exports[_0x6f8b('0x3f')]=function(_0x3ef82b,_0x3abf67){return db['ChatQueueReport'][_0x6f8b('0x3f')](_0x3ef82b[_0x6f8b('0x40')],{})[_0x6f8b('0x1a')](respondWithResult(_0x3abf67,0xc9))[_0x6f8b('0x3e')](handleError(_0x3abf67,null));};exports['update']=function(_0x418d20,_0xae8234){if(_0x418d20[_0x6f8b('0x40')]['id']){delete _0x418d20['body']['id'];}return db[_0x6f8b('0x21')]['find']({'where':{'id':_0x418d20[_0x6f8b('0x3a')]['id']}})[_0x6f8b('0x1a')](handleEntityNotFound(_0xae8234,null))[_0x6f8b('0x1a')](saveUpdates(_0x418d20[_0x6f8b('0x40')],null))['then'](respondWithResult(_0xae8234,null))[_0x6f8b('0x3e')](handleError(_0xae8234,null));};exports[_0x6f8b('0x1b')]=function(_0x77bdfe,_0x41ad96){return db[_0x6f8b('0x21')][_0x6f8b('0x3d')]({'where':{'id':_0x77bdfe['params']['id']}})['then'](handleEntityNotFound(_0x41ad96,null))['then'](removeEntity(_0x41ad96,null))[_0x6f8b('0x3e')](handleError(_0x41ad96,null));};exports[_0x6f8b('0x41')]=function(_0x29ed75,_0x58d22b){return db['ChatQueueReport'][_0x6f8b('0x41')]()[_0x6f8b('0x1a')](respondWithResult(_0x58d22b,null))[_0x6f8b('0x3e')](handleError(_0x58d22b,null));};
\ No newline at end of file
+var _0xfc63=['nolimit','sort','pick','add','day','merge','filter','where','options','count','includeAll','findAll','rows','catch','show','params','include','find','create','body','destroy','describe','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../mysqldb','sendStatus','status','end','json','offset','limit','Content-Range','apply','reject','save','update','then','error','stack','name','send','index','ChatQueueReport','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','length'];(function(_0x379980,_0x57b50d){var _0x3ab5a4=function(_0x5c28d8){while(--_0x5c28d8){_0x379980['push'](_0x379980['shift']());}};_0x3ab5a4(++_0x57b50d);}(_0xfc63,0x132));var _0x3fc6=function(_0x234580,_0x6da567){_0x234580=_0x234580-0x0;var _0xeea8a4=_0xfc63[_0x234580];return _0xeea8a4;};'use strict';var jsonpatch=require(_0x3fc6('0x0'));var rp=require(_0x3fc6('0x1'));var moment=require(_0x3fc6('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x3fc6('0x3'));var util=require(_0x3fc6('0x4'));var path=require(_0x3fc6('0x5'));var sox=require(_0x3fc6('0x6'));var csv=require(_0x3fc6('0x7'));var ejs=require(_0x3fc6('0x8'));var fs=require('fs');var _=require(_0x3fc6('0x9'));var squel=require(_0x3fc6('0xa'));var crypto=require(_0x3fc6('0xb'));var jsforce=require(_0x3fc6('0xc'));var deskjs=require(_0x3fc6('0xd'));var toCsv=require(_0x3fc6('0x7'));var querystring=require(_0x3fc6('0xe'));var Papa=require(_0x3fc6('0xf'));var qs=require(_0x3fc6('0x10'));var logger=require(_0x3fc6('0x11'))(_0x3fc6('0x12'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x3fc6('0x13'))['db'];function respondWithStatusCode(_0x29bceb,_0x46451f){_0x46451f=_0x46451f||0xcc;return function(_0x5064cc){if(_0x5064cc){return _0x29bceb[_0x3fc6('0x14')](_0x46451f);}return _0x29bceb[_0x3fc6('0x15')](_0x46451f)[_0x3fc6('0x16')]();};}function respondWithResult(_0x18e0c0,_0x3bc4d0){_0x3bc4d0=_0x3bc4d0||0xc8;return function(_0x5e3616){if(_0x5e3616){return _0x18e0c0[_0x3fc6('0x15')](_0x3bc4d0)[_0x3fc6('0x17')](_0x5e3616);}};}function respondWithFilteredResult(_0x3683d5,_0xad41f1){return function(_0x3015b3){if(_0x3015b3){var _0xa01f14=_0x3015b3['count'],_0x261f5f=_0xad41f1['offset'],_0x1f3bd4=_0xad41f1[_0x3fc6('0x18')]+_0xad41f1[_0x3fc6('0x19')],_0x32cf4b;if(_0x1f3bd4>=_0xa01f14){_0x1f3bd4=_0xa01f14;_0x32cf4b=0xc8;}else{_0x32cf4b=0xce;}_0x3683d5[_0x3fc6('0x15')](_0x32cf4b);return _0x3683d5['set'](_0x3fc6('0x1a'),_0x261f5f+'-'+_0x1f3bd4+'/'+_0xa01f14)[_0x3fc6('0x17')](_0x3015b3);}return null;};}function patchUpdates(_0x48a849){return function(_0x33cb7c){try{jsonpatch[_0x3fc6('0x1b')](_0x33cb7c,_0x48a849,!![]);}catch(_0x228d4d){return BPromise[_0x3fc6('0x1c')](_0x228d4d);}return _0x33cb7c[_0x3fc6('0x1d')]();};}function saveUpdates(_0x20b23,_0x44c948){return function(_0x308a6d){if(_0x308a6d){return _0x308a6d[_0x3fc6('0x1e')](_0x20b23)[_0x3fc6('0x1f')](function(_0x7f0767){return _0x7f0767;});}return null;};}function removeEntity(_0x3dcc58,_0x64c926){return function(_0x3b92bf){if(_0x3b92bf){return _0x3b92bf['destroy']()[_0x3fc6('0x1f')](function(){_0x3dcc58[_0x3fc6('0x15')](0xcc)[_0x3fc6('0x16')]();});}};}function handleEntityNotFound(_0x13f363,_0xe5b923){return function(_0x544540){if(!_0x544540){_0x13f363[_0x3fc6('0x14')](0x194);}return _0x544540;};}function handleError(_0x4fd7af,_0x4f7b10){_0x4f7b10=_0x4f7b10||0x1f4;return function(_0x33070e){logger[_0x3fc6('0x20')](_0x33070e[_0x3fc6('0x21')]);if(_0x33070e[_0x3fc6('0x22')]){delete _0x33070e[_0x3fc6('0x22')];}_0x4fd7af[_0x3fc6('0x15')](_0x4f7b10)[_0x3fc6('0x23')](_0x33070e);};}exports[_0x3fc6('0x24')]=function(_0x586e42,_0x226928){var _0x475535={},_0x1dcd9b={},_0x2e6b5b={'count':0x0,'rows':[]};var _0x3581d4=db[_0x3fc6('0x25')][_0x3fc6('0x26')];_0x1dcd9b['model']=_[_0x3fc6('0x27')](_0x3581d4);var _0x1554d1={'dateStart':_0x586e42[_0x3fc6('0x28')][_0x3fc6('0x29')],'dateEnd':_0x586e42['query'][_0x3fc6('0x2a')]};delete _0x586e42[_0x3fc6('0x28')]['dateStart'];delete _0x586e42['query'][_0x3fc6('0x2a')];_0x1dcd9b[_0x3fc6('0x28')]=_[_0x3fc6('0x27')](_0x586e42[_0x3fc6('0x28')]);_0x1dcd9b[_0x3fc6('0x2b')]=_[_0x3fc6('0x2c')](_0x1dcd9b[_0x3fc6('0x2d')],_0x1dcd9b['query']);_0x475535[_0x3fc6('0x2e')]=_[_0x3fc6('0x2c')](_0x1dcd9b[_0x3fc6('0x2d')],qs['fields'](_0x586e42[_0x3fc6('0x28')][_0x3fc6('0x2f')]));_0x475535[_0x3fc6('0x2e')]=_0x475535[_0x3fc6('0x2e')][_0x3fc6('0x30')]?_0x475535[_0x3fc6('0x2e')]:_0x1dcd9b['model'];if(!_0x586e42[_0x3fc6('0x28')]['hasOwnProperty'](_0x3fc6('0x31'))){_0x475535[_0x3fc6('0x19')]=qs[_0x3fc6('0x19')](_0x586e42[_0x3fc6('0x28')]['limit']);_0x475535['offset']=qs[_0x3fc6('0x18')](_0x586e42[_0x3fc6('0x28')][_0x3fc6('0x18')]);}_0x475535['order']=qs[_0x3fc6('0x32')](_0x586e42[_0x3fc6('0x28')][_0x3fc6('0x32')]);_0x475535['where']=qs[_0x3fc6('0x2b')](_[_0x3fc6('0x33')](_0x586e42['query'],_0x1dcd9b[_0x3fc6('0x2b')]));if(_0x1554d1[_0x3fc6('0x29')]){if(_0x1554d1[_0x3fc6('0x2a')]){_0x1554d1[_0x3fc6('0x2a')]=moment(_0x1554d1[_0x3fc6('0x2a')])[_0x3fc6('0x34')](0x1,_0x3fc6('0x35'));}else{_0x1554d1[_0x3fc6('0x2a')]=moment(_0x1554d1[_0x3fc6('0x29')])[_0x3fc6('0x34')](0x1,_0x3fc6('0x35'));}_[_0x3fc6('0x36')](_0x475535['where'],{'createdAt':{'$gte':_0x1554d1[_0x3fc6('0x29')],'$lte':_0x1554d1['dateEnd']}});}if(_0x586e42[_0x3fc6('0x28')][_0x3fc6('0x37')]){_0x475535[_0x3fc6('0x38')]=_[_0x3fc6('0x36')](_0x475535[_0x3fc6('0x38')],{'$or':_['map'](_0x475535['attributes'],function(_0x13a2bd){var _0x5f0e3f={};_0x5f0e3f[_0x13a2bd]={'$like':'%'+_0x586e42[_0x3fc6('0x28')]['filter']+'%'};return _0x5f0e3f;})});}_0x475535=_[_0x3fc6('0x36')]({},_0x475535,_0x586e42[_0x3fc6('0x39')]);var _0x2a67ff={'where':_0x475535[_0x3fc6('0x38')]};return db['ChatQueueReport'][_0x3fc6('0x3a')](_0x2a67ff)[_0x3fc6('0x1f')](function(_0x5d637b){_0x2e6b5b[_0x3fc6('0x3a')]=_0x5d637b;if(_0x586e42[_0x3fc6('0x28')][_0x3fc6('0x3b')]){_0x475535['include']=[{'all':!![]}];}return db[_0x3fc6('0x25')][_0x3fc6('0x3c')](_0x475535);})[_0x3fc6('0x1f')](function(_0xc500fb){_0x2e6b5b[_0x3fc6('0x3d')]=_0xc500fb;return _0x2e6b5b;})[_0x3fc6('0x1f')](respondWithFilteredResult(_0x226928,_0x475535))[_0x3fc6('0x3e')](handleError(_0x226928,null));};exports[_0x3fc6('0x3f')]=function(_0x36b622,_0x239c1e){var _0x155b37={'raw':!![],'where':{'id':_0x36b622[_0x3fc6('0x40')]['id']}},_0x1f1136={};_0x1f1136[_0x3fc6('0x2d')]=_[_0x3fc6('0x27')](db[_0x3fc6('0x25')][_0x3fc6('0x26')]);_0x1f1136[_0x3fc6('0x28')]=_[_0x3fc6('0x27')](_0x36b622[_0x3fc6('0x28')]);_0x1f1136[_0x3fc6('0x2b')]=_['intersection'](_0x1f1136['model'],_0x1f1136[_0x3fc6('0x28')]);_0x155b37[_0x3fc6('0x2e')]=_[_0x3fc6('0x2c')](_0x1f1136[_0x3fc6('0x2d')],qs['fields'](_0x36b622[_0x3fc6('0x28')][_0x3fc6('0x2f')]));_0x155b37['attributes']=_0x155b37[_0x3fc6('0x2e')][_0x3fc6('0x30')]?_0x155b37[_0x3fc6('0x2e')]:_0x1f1136[_0x3fc6('0x2d')];if(_0x36b622[_0x3fc6('0x28')][_0x3fc6('0x3b')]){_0x155b37[_0x3fc6('0x41')]=[{'all':!![]}];}_0x155b37=_[_0x3fc6('0x36')]({},_0x155b37,_0x36b622['options']);return db[_0x3fc6('0x25')][_0x3fc6('0x42')](_0x155b37)[_0x3fc6('0x1f')](handleEntityNotFound(_0x239c1e,null))[_0x3fc6('0x1f')](respondWithResult(_0x239c1e,null))[_0x3fc6('0x3e')](handleError(_0x239c1e,null));};exports[_0x3fc6('0x43')]=function(_0x47fbe2,_0x3dbe9){return db['ChatQueueReport']['create'](_0x47fbe2['body'],{})[_0x3fc6('0x1f')](respondWithResult(_0x3dbe9,0xc9))['catch'](handleError(_0x3dbe9,null));};exports[_0x3fc6('0x1e')]=function(_0x4f4fc9,_0x298336){if(_0x4f4fc9[_0x3fc6('0x44')]['id']){delete _0x4f4fc9['body']['id'];}return db[_0x3fc6('0x25')][_0x3fc6('0x42')]({'where':{'id':_0x4f4fc9[_0x3fc6('0x40')]['id']}})[_0x3fc6('0x1f')](handleEntityNotFound(_0x298336,null))[_0x3fc6('0x1f')](saveUpdates(_0x4f4fc9['body'],null))[_0x3fc6('0x1f')](respondWithResult(_0x298336,null))['catch'](handleError(_0x298336,null));};exports[_0x3fc6('0x45')]=function(_0x1a8d0c,_0x2c48ec){return db[_0x3fc6('0x25')]['find']({'where':{'id':_0x1a8d0c[_0x3fc6('0x40')]['id']}})[_0x3fc6('0x1f')](handleEntityNotFound(_0x2c48ec,null))['then'](removeEntity(_0x2c48ec,null))['catch'](handleError(_0x2c48ec,null));};exports[_0x3fc6('0x46')]=function(_0x454580,_0x111704){return db['ChatQueueReport'][_0x3fc6('0x46')]()[_0x3fc6('0x1f')](respondWithResult(_0x111704,null))[_0x3fc6('0x3e')](handleError(_0x111704,null));};
\ No newline at end of file
index da32711..be176ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e74=['define','ChatQueueReport','report_chat_queue','uniqueid','lodash','../../config/logger','api','moment','./chatQueueReport.attributes'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x3e74,0x175));var _0x43e7=function(_0x53aedf,_0x727eed){_0x53aedf=_0x53aedf-0x0;var _0x2e4640=_0x3e74[_0x53aedf];return _0x2e4640;};'use strict';var _=require(_0x43e7('0x0'));var util=require('util');var logger=require(_0x43e7('0x1'))(_0x43e7('0x2'));var moment=require(_0x43e7('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x43e7('0x4'));module['exports']=function(_0x128b0f,_0xe838b4){return _0x128b0f[_0x43e7('0x5')](_0x43e7('0x6'),attributes,{'tableName':_0x43e7('0x7'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x43e7('0x8')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x34e8=['define','report_chat_queue','uniqueid','lodash','util','../../config/logger','api','bluebird','request-promise','./chatQueueReport.attributes','exports'];(function(_0x4709c0,_0x3396c7){var _0x13348b=function(_0x426235){while(--_0x426235){_0x4709c0['push'](_0x4709c0['shift']());}};_0x13348b(++_0x3396c7);}(_0x34e8,0x12c));var _0x834e=function(_0x3aa718,_0x2e2833){_0x3aa718=_0x3aa718-0x0;var _0x113360=_0x34e8[_0x3aa718];return _0x113360;};'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')]('ChatQueueReport',attributes,{'tableName':_0x834e('0x9'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x834e('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index 799fe25..f21485c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xae24=['CreateChatQueueReport','ChatQueueReport','options','then','body','raw','attributes','limit','UpdateChatQueueReport','lodash','moment','randomstring','../../mysqldb','rpc','jayson/promise','client','http','request','info','ChatQueueReport,\x20%s,\x20%s','debug','ChatQueueReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch'];(function(_0x9b504a,_0x2404a9){var _0x5112ca=function(_0x46a252){while(--_0x46a252){_0x9b504a['push'](_0x9b504a['shift']());}};_0x5112ca(++_0x2404a9);}(_0xae24,0x182));var _0x4ae2=function(_0x55fd20,_0xef3962){_0x55fd20=_0x55fd20-0x0;var _0x37b1e2=_0xae24[_0x55fd20];return _0x37b1e2;};'use strict';var _=require(_0x4ae2('0x0'));var util=require('util');var moment=require(_0x4ae2('0x1'));var BPromise=require('bluebird');var rs=require(_0x4ae2('0x2'));var fs=require('fs');var db=require(_0x4ae2('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x4ae2('0x4'));var config=require('../../config/environment');var jayson=require(_0x4ae2('0x5'));var client=jayson[_0x4ae2('0x6')][_0x4ae2('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x3e6055,_0x428054,_0x307247){return new BPromise(function(_0x4f2e84,_0x5f589a){return client[_0x4ae2('0x8')](_0x3e6055,_0x307247)['then'](function(_0x564ef9){logger[_0x4ae2('0x9')](_0x4ae2('0xa'),_0x428054,'request\x20sent');logger[_0x4ae2('0xb')](_0x4ae2('0xc'),_0x428054,_0x4ae2('0xd'),JSON[_0x4ae2('0xe')](_0x564ef9));if(_0x564ef9['error']){if(_0x564ef9[_0x4ae2('0xf')][_0x4ae2('0x10')]===0x1f4){logger[_0x4ae2('0xf')]('ChatQueueReport,\x20%s,\x20%s',_0x428054,_0x564ef9[_0x4ae2('0xf')][_0x4ae2('0x11')]);return _0x5f589a(_0x564ef9[_0x4ae2('0xf')][_0x4ae2('0x11')]);}logger[_0x4ae2('0xf')](_0x4ae2('0xa'),_0x428054,_0x564ef9[_0x4ae2('0xf')][_0x4ae2('0x11')]);return _0x4f2e84(_0x564ef9[_0x4ae2('0xf')]['message']);}else{logger['info']('ChatQueueReport,\x20%s,\x20%s',_0x428054,_0x4ae2('0xd'));_0x4f2e84(_0x564ef9[_0x4ae2('0x12')]['message']);}})[_0x4ae2('0x13')](function(_0x9fb8db){logger[_0x4ae2('0xf')](_0x4ae2('0xa'),_0x428054,_0x9fb8db);_0x5f589a(_0x9fb8db);});});}exports[_0x4ae2('0x14')]=function(_0x3b207c){var _0x3d4259=this;return new Promise(function(_0xdc8798,_0x41b672){return db[_0x4ae2('0x15')]['create'](_0x3b207c['body'],{'raw':_0x3b207c[_0x4ae2('0x16')]?_0x3b207c[_0x4ae2('0x16')]['raw']===undefined?!![]:![]:!![]})[_0x4ae2('0x17')](function(_0x343db1){logger[_0x4ae2('0x9')](_0x4ae2('0x14'),_0x3b207c);logger[_0x4ae2('0xb')]('CreateChatQueueReport',_0x3b207c,JSON[_0x4ae2('0xe')](_0x343db1));_0xdc8798(_0x343db1);})['catch'](function(_0x522165){logger[_0x4ae2('0xf')](_0x4ae2('0x14'),_0x522165[_0x4ae2('0x11')],_0x3b207c);_0x41b672(_0x3d4259[_0x4ae2('0xf')](0x1f4,_0x522165[_0x4ae2('0x11')]));});});};exports['UpdateChatQueueReport']=function(_0x1005e0){var _0x4a0ddb=this;return new Promise(function(_0x2049fa,_0x12b5d2){return db[_0x4ae2('0x15')]['update'](_0x1005e0[_0x4ae2('0x18')],{'raw':_0x1005e0[_0x4ae2('0x16')]?_0x1005e0[_0x4ae2('0x16')][_0x4ae2('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1005e0[_0x4ae2('0x16')]?_0x1005e0[_0x4ae2('0x16')]['where']||null:null,'attributes':_0x1005e0['options']?_0x1005e0[_0x4ae2('0x16')][_0x4ae2('0x1a')]||null:null,'limit':_0x1005e0[_0x4ae2('0x16')]?_0x1005e0[_0x4ae2('0x16')][_0x4ae2('0x1b')]||null:null})[_0x4ae2('0x17')](function(_0x57a377){logger['info'](_0x4ae2('0x1c'),_0x1005e0);logger['debug']('UpdateChatQueueReport',_0x1005e0,JSON['stringify'](_0x57a377));_0x2049fa(_0x57a377);})[_0x4ae2('0x13')](function(_0x28bedd){logger['error'](_0x4ae2('0x1c'),_0x28bedd[_0x4ae2('0x11')],_0x1005e0);_0x12b5d2(_0x4a0ddb[_0x4ae2('0xf')](0x1f4,_0x28bedd[_0x4ae2('0x11')]));});});};
\ No newline at end of file
+var _0xf2ca=['util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','then','info','request\x20sent','debug','ChatQueueReport,\x20%s,\x20%s,\x20%s','error','code','ChatQueueReport,\x20%s,\x20%s','message','result','catch','CreateChatQueueReport','create','body','options','raw','stringify','UpdateChatQueueReport','ChatQueueReport','update','where','limit','lodash'];(function(_0xf16ebd,_0x1835fa){var _0x371eac=function(_0x199905){while(--_0x199905){_0xf16ebd['push'](_0xf16ebd['shift']());}};_0x371eac(++_0x1835fa);}(_0xf2ca,0x16a));var _0xaf2c=function(_0x16b992,_0x43d74c){_0x16b992=_0x16b992-0x0;var _0x385c78=_0xf2ca[_0x16b992];return _0x385c78;};'use strict';var _=require(_0xaf2c('0x0'));var util=require(_0xaf2c('0x1'));var moment=require(_0xaf2c('0x2'));var BPromise=require('bluebird');var rs=require(_0xaf2c('0x3'));var fs=require('fs');var db=require(_0xaf2c('0x4'))['db'];var utils=require(_0xaf2c('0x5'));var logger=require(_0xaf2c('0x6'))(_0xaf2c('0x7'));var config=require(_0xaf2c('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xaf2c('0x9')][_0xaf2c('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x297740,_0x1f9531,_0x58351f){return new BPromise(function(_0x37fedd,_0x3c0421){return client['request'](_0x297740,_0x58351f)[_0xaf2c('0xb')](function(_0x4ba0a2){logger[_0xaf2c('0xc')]('ChatQueueReport,\x20%s,\x20%s',_0x1f9531,_0xaf2c('0xd'));logger[_0xaf2c('0xe')](_0xaf2c('0xf'),_0x1f9531,_0xaf2c('0xd'),JSON['stringify'](_0x4ba0a2));if(_0x4ba0a2['error']){if(_0x4ba0a2[_0xaf2c('0x10')][_0xaf2c('0x11')]===0x1f4){logger[_0xaf2c('0x10')](_0xaf2c('0x12'),_0x1f9531,_0x4ba0a2[_0xaf2c('0x10')]['message']);return _0x3c0421(_0x4ba0a2['error'][_0xaf2c('0x13')]);}logger[_0xaf2c('0x10')](_0xaf2c('0x12'),_0x1f9531,_0x4ba0a2[_0xaf2c('0x10')][_0xaf2c('0x13')]);return _0x37fedd(_0x4ba0a2[_0xaf2c('0x10')][_0xaf2c('0x13')]);}else{logger[_0xaf2c('0xc')](_0xaf2c('0x12'),_0x1f9531,_0xaf2c('0xd'));_0x37fedd(_0x4ba0a2[_0xaf2c('0x14')][_0xaf2c('0x13')]);}})[_0xaf2c('0x15')](function(_0x3432e4){logger[_0xaf2c('0x10')]('ChatQueueReport,\x20%s,\x20%s',_0x1f9531,_0x3432e4);_0x3c0421(_0x3432e4);});});}exports[_0xaf2c('0x16')]=function(_0x553163){var _0x278a28=this;return new Promise(function(_0x474c80,_0x1d544a){return db['ChatQueueReport'][_0xaf2c('0x17')](_0x553163[_0xaf2c('0x18')],{'raw':_0x553163[_0xaf2c('0x19')]?_0x553163[_0xaf2c('0x19')][_0xaf2c('0x1a')]===undefined?!![]:![]:!![]})[_0xaf2c('0xb')](function(_0x531609){logger[_0xaf2c('0xc')](_0xaf2c('0x16'),_0x553163);logger[_0xaf2c('0xe')](_0xaf2c('0x16'),_0x553163,JSON[_0xaf2c('0x1b')](_0x531609));_0x474c80(_0x531609);})['catch'](function(_0x396646){logger[_0xaf2c('0x10')](_0xaf2c('0x16'),_0x396646['message'],_0x553163);_0x1d544a(_0x278a28['error'](0x1f4,_0x396646[_0xaf2c('0x13')]));});});};exports[_0xaf2c('0x1c')]=function(_0x1cafad){var _0x99f78d=this;return new Promise(function(_0x591aff,_0x2b8f1a){return db[_0xaf2c('0x1d')][_0xaf2c('0x1e')](_0x1cafad[_0xaf2c('0x18')],{'raw':_0x1cafad[_0xaf2c('0x19')]?_0x1cafad[_0xaf2c('0x19')][_0xaf2c('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1cafad['options']?_0x1cafad[_0xaf2c('0x19')][_0xaf2c('0x1f')]||null:null,'attributes':_0x1cafad[_0xaf2c('0x19')]?_0x1cafad[_0xaf2c('0x19')]['attributes']||null:null,'limit':_0x1cafad[_0xaf2c('0x19')]?_0x1cafad['options'][_0xaf2c('0x20')]||null:null})[_0xaf2c('0xb')](function(_0x15466b){logger['info'](_0xaf2c('0x1c'),_0x1cafad);logger[_0xaf2c('0xe')](_0xaf2c('0x1c'),_0x1cafad,JSON['stringify'](_0x15466b));_0x591aff(_0x15466b);})[_0xaf2c('0x15')](function(_0x32d95c){logger[_0xaf2c('0x10')](_0xaf2c('0x1c'),_0x32d95c['message'],_0x1cafad);_0x2b8f1a(_0x99f78d[_0xaf2c('0x10')](0x1f4,_0x32d95c[_0xaf2c('0x13')]));});});};
\ No newline at end of file
index 95934be..3cf2e8e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x597a=['Router','../../components/interaction/service','get','isAuthenticated','index','/describe','/:id','show','create','update','delete','destroy','exports','multer','util','path','express'];(function(_0x166d93,_0x301f09){var _0xba708=function(_0x349bf7){while(--_0x349bf7){_0x166d93['push'](_0x166d93['shift']());}};_0xba708(++_0x301f09);}(_0x597a,0x194));var _0xa597=function(_0x10d6f2,_0x18ae62){_0x10d6f2=_0x10d6f2-0x0;var _0x59e5c7=_0x597a[_0x10d6f2];return _0x59e5c7;};'use strict';var multer=require(_0xa597('0x0'));var util=require(_0xa597('0x1'));var path=require(_0xa597('0x2'));var express=require(_0xa597('0x3'));var router=express[_0xa597('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xa597('0x5'));var config=require('../../config/environment');var controller=require('./chatQueueReport.controller');router[_0xa597('0x6')]('/',auth[_0xa597('0x7')](),controller[_0xa597('0x8')]);router[_0xa597('0x6')](_0xa597('0x9'),auth[_0xa597('0x7')](),controller['describe']);router[_0xa597('0x6')](_0xa597('0xa'),auth[_0xa597('0x7')](),controller[_0xa597('0xb')]);router['post']('/',auth[_0xa597('0x7')](),controller[_0xa597('0xc')]);router['put'](_0xa597('0xa'),auth['isAuthenticated'](),controller[_0xa597('0xd')]);router[_0xa597('0xe')]('/:id',auth[_0xa597('0x7')](),controller[_0xa597('0xf')]);module[_0xa597('0x10')]=router;
\ No newline at end of file
+var _0x2b56=['exports','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatQueueReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','put','update','delete','destroy'];(function(_0xd88427,_0x55d958){var _0x11b504=function(_0x5d41ba){while(--_0x5d41ba){_0xd88427['push'](_0xd88427['shift']());}};_0x11b504(++_0x55d958);}(_0x2b56,0x14b));var _0x62b5=function(_0x44a0c9,_0x5914f7){_0x44a0c9=_0x44a0c9-0x0;var _0x3ef0df=_0x2b56[_0x44a0c9];return _0x3ef0df;};'use strict';var multer=require('multer');var util=require(_0x62b5('0x0'));var path=require(_0x62b5('0x1'));var express=require(_0x62b5('0x2'));var router=express[_0x62b5('0x3')]();var auth=require(_0x62b5('0x4'));var interaction=require(_0x62b5('0x5'));var config=require(_0x62b5('0x6'));var controller=require(_0x62b5('0x7'));router[_0x62b5('0x8')]('/',auth[_0x62b5('0x9')](),controller[_0x62b5('0xa')]);router[_0x62b5('0x8')](_0x62b5('0xb'),auth[_0x62b5('0x9')](),controller[_0x62b5('0xc')]);router[_0x62b5('0x8')](_0x62b5('0xd'),auth[_0x62b5('0x9')](),controller[_0x62b5('0xe')]);router[_0x62b5('0xf')]('/',auth[_0x62b5('0x9')](),controller[_0x62b5('0x10')]);router[_0x62b5('0x11')]('/:id',auth[_0x62b5('0x9')](),controller[_0x62b5('0x12')]);router[_0x62b5('0x13')](_0x62b5('0xd'),auth[_0x62b5('0x9')](),controller[_0x62b5('0x14')]);module[_0x62b5('0x15')]=router;
\ No newline at end of file
index 5dd6546..9152087 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5a83=['STRING','ENUM','account','agent','queue','DATE','NOW','moment','sequelize','exports'];(function(_0x49bdc4,_0x1e2507){var _0x1f7437=function(_0x25a9f9){while(--_0x25a9f9){_0x49bdc4['push'](_0x49bdc4['shift']());}};_0x1f7437(++_0x1e2507);}(_0x5a83,0x1e7));var _0x35a8=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x5a83[_0x3ab51d];return _0x29a04e;};'use strict';var moment=require(_0x35a8('0x0'));var Sequelize=require(_0x35a8('0x1'));module[_0x35a8('0x2')]={'uniqueid':{'type':Sequelize[_0x35a8('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x35a8('0x4')](_0x35a8('0x5'),_0x35a8('0x6'),_0x35a8('0x7')),'allowNull':![],'defaultValue':'queue'},'transferredAt':{'type':Sequelize[_0x35a8('0x8')],'allowNull':![],'defaultValue':Sequelize[_0x35a8('0x9')]}};
\ No newline at end of file
+var _0xf813=['sequelize','exports','STRING','account','agent','queue','NOW','moment'];(function(_0x119d5a,_0x19b457){var _0x15bff4=function(_0x1b7c78){while(--_0x1b7c78){_0x119d5a['push'](_0x119d5a['shift']());}};_0x15bff4(++_0x19b457);}(_0xf813,0xff));var _0x3f81=function(_0x1162f9,_0x35f87c){_0x1162f9=_0x1162f9-0x0;var _0x75257c=_0xf813[_0x1162f9];return _0x75257c;};'use strict';var moment=require(_0x3f81('0x0'));var Sequelize=require(_0x3f81('0x1'));module[_0x3f81('0x2')]={'uniqueid':{'type':Sequelize[_0x3f81('0x3')],'allowNull':![]},'type':{'type':Sequelize['ENUM'](_0x3f81('0x4'),_0x3f81('0x5'),_0x3f81('0x6')),'allowNull':![],'defaultValue':_0x3f81('0x6')},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize[_0x3f81('0x7')]}};
\ No newline at end of file
index d1ba4cf..4197f6b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xab53=['querystring','papaparse','../../components/parsers/qs','api','../../config/utils','sendStatus','status','end','count','limit','set','Content-Range','apply','reject','save','update','then','destroy','stack','name','send','index','rawAttributes','model','keys','dateEnd','query','dateStart','intersection','attributes','length','hasOwnProperty','nolimit','offset','order','where','filters','pick','day','add','merge','options','ChatTransferReport','include','rows','catch','show','params','fields','includeAll','find','create','body','describe','fast-json-patch','request-promise','moment','bluebird','mustache','path','to-csv','ejs','jsforce','desk.js'];(function(_0x31b83b,_0x2e98da){var _0x5a2316=function(_0x521e79){while(--_0x521e79){_0x31b83b['push'](_0x31b83b['shift']());}};_0x5a2316(++_0x2e98da);}(_0xab53,0x176));var _0x3ab5=function(_0xaa0309,_0x1c8008){_0xaa0309=_0xaa0309-0x0;var _0x5de7ce=_0xab53[_0xaa0309];return _0x5de7ce;};'use strict';var jsonpatch=require(_0x3ab5('0x0'));var rp=require(_0x3ab5('0x1'));var moment=require(_0x3ab5('0x2'));var BPromise=require(_0x3ab5('0x3'));var Mustache=require(_0x3ab5('0x4'));var util=require('util');var path=require(_0x3ab5('0x5'));var sox=require('sox');var csv=require(_0x3ab5('0x6'));var ejs=require(_0x3ab5('0x7'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x3ab5('0x8'));var deskjs=require(_0x3ab5('0x9'));var toCsv=require('to-csv');var querystring=require(_0x3ab5('0xa'));var Papa=require(_0x3ab5('0xb'));var qs=require(_0x3ab5('0xc'));var logger=require('../../config/logger')(_0x3ab5('0xd'));var utils=require(_0x3ab5('0xe'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2c7504,_0x5e04e9){_0x5e04e9=_0x5e04e9||0xcc;return function(_0x34fb1a){if(_0x34fb1a){return _0x2c7504[_0x3ab5('0xf')](_0x5e04e9);}return _0x2c7504[_0x3ab5('0x10')](_0x5e04e9)[_0x3ab5('0x11')]();};}function respondWithResult(_0x309526,_0x356720){_0x356720=_0x356720||0xc8;return function(_0x50c03f){if(_0x50c03f){return _0x309526[_0x3ab5('0x10')](_0x356720)['json'](_0x50c03f);}};}function respondWithFilteredResult(_0x1dfb14,_0x126b63){return function(_0x1e831d){if(_0x1e831d){var _0x4b9bc6=_0x1e831d[_0x3ab5('0x12')],_0x354e09=_0x126b63['offset'],_0x3711e8=_0x126b63['offset']+_0x126b63[_0x3ab5('0x13')],_0xb8ad21;if(_0x3711e8>=_0x4b9bc6){_0x3711e8=_0x4b9bc6;_0xb8ad21=0xc8;}else{_0xb8ad21=0xce;}_0x1dfb14[_0x3ab5('0x10')](_0xb8ad21);return _0x1dfb14[_0x3ab5('0x14')](_0x3ab5('0x15'),_0x354e09+'-'+_0x3711e8+'/'+_0x4b9bc6)['json'](_0x1e831d);}return null;};}function patchUpdates(_0x5b1489){return function(_0x3e3dcb){try{jsonpatch[_0x3ab5('0x16')](_0x3e3dcb,_0x5b1489,!![]);}catch(_0xcbb677){return BPromise[_0x3ab5('0x17')](_0xcbb677);}return _0x3e3dcb[_0x3ab5('0x18')]();};}function saveUpdates(_0x3b3f82,_0xebcbbe){return function(_0x1098aa){if(_0x1098aa){return _0x1098aa[_0x3ab5('0x19')](_0x3b3f82)[_0x3ab5('0x1a')](function(_0x228b62){return _0x228b62;});}return null;};}function removeEntity(_0x51d19b,_0x5b817e){return function(_0x56c1d2){if(_0x56c1d2){return _0x56c1d2[_0x3ab5('0x1b')]()[_0x3ab5('0x1a')](function(){_0x51d19b[_0x3ab5('0x10')](0xcc)['end']();});}};}function handleEntityNotFound(_0x288de3,_0x5b8b50){return function(_0x3c970){if(!_0x3c970){_0x288de3['sendStatus'](0x194);}return _0x3c970;};}function handleError(_0x183a38,_0x16d90c){_0x16d90c=_0x16d90c||0x1f4;return function(_0x49828c){logger['error'](_0x49828c[_0x3ab5('0x1c')]);if(_0x49828c['name']){delete _0x49828c[_0x3ab5('0x1d')];}_0x183a38[_0x3ab5('0x10')](_0x16d90c)[_0x3ab5('0x1e')](_0x49828c);};}exports[_0x3ab5('0x1f')]=function(_0x4757db,_0x309767){var _0x1273fa={},_0x23cfec={},_0x42c641={'count':0x0,'rows':[]};var _0x1486f5=db['ChatTransferReport'][_0x3ab5('0x20')];_0x23cfec[_0x3ab5('0x21')]=_[_0x3ab5('0x22')](_0x1486f5);var _0x4cccfc={'dateStart':_0x4757db['query']['dateStart'],'dateEnd':_0x4757db['query'][_0x3ab5('0x23')]};delete _0x4757db[_0x3ab5('0x24')][_0x3ab5('0x25')];delete _0x4757db['query']['dateEnd'];_0x23cfec['query']=_['keys'](_0x4757db['query']);_0x23cfec['filters']=_[_0x3ab5('0x26')](_0x23cfec['model'],_0x23cfec[_0x3ab5('0x24')]);_0x1273fa[_0x3ab5('0x27')]=_[_0x3ab5('0x26')](_0x23cfec[_0x3ab5('0x21')],qs['fields'](_0x4757db[_0x3ab5('0x24')]['fields']));_0x1273fa[_0x3ab5('0x27')]=_0x1273fa[_0x3ab5('0x27')][_0x3ab5('0x28')]?_0x1273fa[_0x3ab5('0x27')]:_0x23cfec[_0x3ab5('0x21')];if(!_0x4757db['query'][_0x3ab5('0x29')](_0x3ab5('0x2a'))){_0x1273fa[_0x3ab5('0x13')]=qs[_0x3ab5('0x13')](_0x4757db[_0x3ab5('0x24')][_0x3ab5('0x13')]);_0x1273fa[_0x3ab5('0x2b')]=qs[_0x3ab5('0x2b')](_0x4757db[_0x3ab5('0x24')][_0x3ab5('0x2b')]);}_0x1273fa[_0x3ab5('0x2c')]=qs['sort'](_0x4757db[_0x3ab5('0x24')]['sort']);_0x1273fa[_0x3ab5('0x2d')]=qs[_0x3ab5('0x2e')](_[_0x3ab5('0x2f')](_0x4757db[_0x3ab5('0x24')],_0x23cfec['filters']));if(_0x4cccfc['dateStart']){if(_0x4cccfc[_0x3ab5('0x23')]){_0x4cccfc['dateEnd']=moment(_0x4cccfc[_0x3ab5('0x23')])['add'](0x1,_0x3ab5('0x30'));}else{_0x4cccfc[_0x3ab5('0x23')]=moment(_0x4cccfc['dateStart'])[_0x3ab5('0x31')](0x1,_0x3ab5('0x30'));}_[_0x3ab5('0x32')](_0x1273fa[_0x3ab5('0x2d')],{'createdAt':{'$gte':_0x4cccfc['dateStart'],'$lte':_0x4cccfc[_0x3ab5('0x23')]}});}if(_0x4757db[_0x3ab5('0x24')]['filter']){_0x1273fa[_0x3ab5('0x2d')]=_[_0x3ab5('0x32')](_0x1273fa['where'],{'$or':_['map'](_0x1273fa[_0x3ab5('0x27')],function(_0x36023a){var _0x3b9b50={};_0x3b9b50[_0x36023a]={'$like':'%'+_0x4757db[_0x3ab5('0x24')]['filter']+'%'};return _0x3b9b50;})});}_0x1273fa=_[_0x3ab5('0x32')]({},_0x1273fa,_0x4757db[_0x3ab5('0x33')]);var _0x22f070={'where':_0x1273fa[_0x3ab5('0x2d')]};return db[_0x3ab5('0x34')][_0x3ab5('0x12')](_0x22f070)[_0x3ab5('0x1a')](function(_0x4cc71d){_0x42c641[_0x3ab5('0x12')]=_0x4cc71d;if(_0x4757db[_0x3ab5('0x24')]['includeAll']){_0x1273fa[_0x3ab5('0x35')]=[{'all':!![]}];}return db['ChatTransferReport']['findAll'](_0x1273fa);})[_0x3ab5('0x1a')](function(_0x4c58e3){_0x42c641[_0x3ab5('0x36')]=_0x4c58e3;return _0x42c641;})['then'](respondWithFilteredResult(_0x309767,_0x1273fa))[_0x3ab5('0x37')](handleError(_0x309767,null));};exports[_0x3ab5('0x38')]=function(_0x28bacd,_0x1d26cc){var _0x124821={'raw':!![],'where':{'id':_0x28bacd[_0x3ab5('0x39')]['id']}},_0xe71874={};_0xe71874[_0x3ab5('0x21')]=_[_0x3ab5('0x22')](db['ChatTransferReport']['rawAttributes']);_0xe71874[_0x3ab5('0x24')]=_[_0x3ab5('0x22')](_0x28bacd['query']);_0xe71874[_0x3ab5('0x2e')]=_[_0x3ab5('0x26')](_0xe71874[_0x3ab5('0x21')],_0xe71874[_0x3ab5('0x24')]);_0x124821[_0x3ab5('0x27')]=_[_0x3ab5('0x26')](_0xe71874['model'],qs[_0x3ab5('0x3a')](_0x28bacd['query']['fields']));_0x124821['attributes']=_0x124821[_0x3ab5('0x27')]['length']?_0x124821[_0x3ab5('0x27')]:_0xe71874['model'];if(_0x28bacd[_0x3ab5('0x24')][_0x3ab5('0x3b')]){_0x124821[_0x3ab5('0x35')]=[{'all':!![]}];}_0x124821=_[_0x3ab5('0x32')]({},_0x124821,_0x28bacd[_0x3ab5('0x33')]);return db[_0x3ab5('0x34')][_0x3ab5('0x3c')](_0x124821)[_0x3ab5('0x1a')](handleEntityNotFound(_0x1d26cc,null))[_0x3ab5('0x1a')](respondWithResult(_0x1d26cc,null))[_0x3ab5('0x37')](handleError(_0x1d26cc,null));};exports[_0x3ab5('0x3d')]=function(_0x539125,_0x2f8a7f){return db[_0x3ab5('0x34')][_0x3ab5('0x3d')](_0x539125[_0x3ab5('0x3e')],{})[_0x3ab5('0x1a')](respondWithResult(_0x2f8a7f,0xc9))[_0x3ab5('0x37')](handleError(_0x2f8a7f,null));};exports[_0x3ab5('0x19')]=function(_0x4bb7a2,_0x3d8ebb){if(_0x4bb7a2[_0x3ab5('0x3e')]['id']){delete _0x4bb7a2[_0x3ab5('0x3e')]['id'];}return db[_0x3ab5('0x34')][_0x3ab5('0x3c')]({'where':{'id':_0x4bb7a2[_0x3ab5('0x39')]['id']}})[_0x3ab5('0x1a')](handleEntityNotFound(_0x3d8ebb,null))[_0x3ab5('0x1a')](saveUpdates(_0x4bb7a2['body'],null))[_0x3ab5('0x1a')](respondWithResult(_0x3d8ebb,null))[_0x3ab5('0x37')](handleError(_0x3d8ebb,null));};exports[_0x3ab5('0x1b')]=function(_0x31c18a,_0x3b028b){return db['ChatTransferReport'][_0x3ab5('0x3c')]({'where':{'id':_0x31c18a[_0x3ab5('0x39')]['id']}})[_0x3ab5('0x1a')](handleEntityNotFound(_0x3b028b,null))['then'](removeEntity(_0x3b028b,null))[_0x3ab5('0x37')](handleError(_0x3b028b,null));};exports[_0x3ab5('0x3f')]=function(_0xbcbfd3,_0x4ec301){return db[_0x3ab5('0x34')][_0x3ab5('0x3f')]()['then'](respondWithResult(_0x4ec301,null))[_0x3ab5('0x37')](handleError(_0x4ec301,null));};
\ No newline at end of file
+var _0xd704=['sox','to-csv','ejs','squel','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','offset','limit','Content-Range','apply','reject','update','then','destroy','sendStatus','error','stack','name','index','ChatTransferReport','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','add','merge','filter','where','map','options','count','includeAll','include','findAll','rows','catch','show','params','find','create','body','describe','fast-json-patch','request-promise','moment','bluebird','util'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xd704,0x1de));var _0x4d70=function(_0x31ee23,_0x179a9f){_0x31ee23=_0x31ee23-0x0;var _0x532f09=_0xd704[_0x31ee23];return _0x532f09;};'use strict';var jsonpatch=require(_0x4d70('0x0'));var rp=require(_0x4d70('0x1'));var moment=require(_0x4d70('0x2'));var BPromise=require(_0x4d70('0x3'));var Mustache=require('mustache');var util=require(_0x4d70('0x4'));var path=require('path');var sox=require(_0x4d70('0x5'));var csv=require(_0x4d70('0x6'));var ejs=require(_0x4d70('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0x4d70('0x8'));var crypto=require(_0x4d70('0x9'));var jsforce=require('jsforce');var deskjs=require(_0x4d70('0xa'));var toCsv=require('to-csv');var querystring=require(_0x4d70('0xb'));var Papa=require(_0x4d70('0xc'));var qs=require(_0x4d70('0xd'));var logger=require(_0x4d70('0xe'))(_0x4d70('0xf'));var utils=require(_0x4d70('0x10'));var config=require(_0x4d70('0x11'));var db=require(_0x4d70('0x12'))['db'];function respondWithStatusCode(_0x893a9e,_0x471b73){_0x471b73=_0x471b73||0xcc;return function(_0x7027b7){if(_0x7027b7){return _0x893a9e['sendStatus'](_0x471b73);}return _0x893a9e[_0x4d70('0x13')](_0x471b73)[_0x4d70('0x14')]();};}function respondWithResult(_0x840b59,_0x1ad5fb){_0x1ad5fb=_0x1ad5fb||0xc8;return function(_0x2fb590){if(_0x2fb590){return _0x840b59[_0x4d70('0x13')](_0x1ad5fb)[_0x4d70('0x15')](_0x2fb590);}};}function respondWithFilteredResult(_0x3da2e5,_0xc7970){return function(_0x1da862){if(_0x1da862){var _0x47287a=_0x1da862['count'],_0x3ab068=_0xc7970[_0x4d70('0x16')],_0x1e997f=_0xc7970[_0x4d70('0x16')]+_0xc7970[_0x4d70('0x17')],_0x3dd3d4;if(_0x1e997f>=_0x47287a){_0x1e997f=_0x47287a;_0x3dd3d4=0xc8;}else{_0x3dd3d4=0xce;}_0x3da2e5[_0x4d70('0x13')](_0x3dd3d4);return _0x3da2e5['set'](_0x4d70('0x18'),_0x3ab068+'-'+_0x1e997f+'/'+_0x47287a)['json'](_0x1da862);}return null;};}function patchUpdates(_0x58321e){return function(_0xbe0049){try{jsonpatch[_0x4d70('0x19')](_0xbe0049,_0x58321e,!![]);}catch(_0x51e52d){return BPromise[_0x4d70('0x1a')](_0x51e52d);}return _0xbe0049['save']();};}function saveUpdates(_0x1dcafe,_0x5de04d){return function(_0x165768){if(_0x165768){return _0x165768[_0x4d70('0x1b')](_0x1dcafe)[_0x4d70('0x1c')](function(_0x36bf27){return _0x36bf27;});}return null;};}function removeEntity(_0x2f3064,_0x7f34b5){return function(_0x5957b4){if(_0x5957b4){return _0x5957b4[_0x4d70('0x1d')]()[_0x4d70('0x1c')](function(){_0x2f3064[_0x4d70('0x13')](0xcc)[_0x4d70('0x14')]();});}};}function handleEntityNotFound(_0x208f10,_0x13a314){return function(_0x13f122){if(!_0x13f122){_0x208f10[_0x4d70('0x1e')](0x194);}return _0x13f122;};}function handleError(_0x5ec932,_0x1807ce){_0x1807ce=_0x1807ce||0x1f4;return function(_0x5ad13e){logger[_0x4d70('0x1f')](_0x5ad13e[_0x4d70('0x20')]);if(_0x5ad13e[_0x4d70('0x21')]){delete _0x5ad13e[_0x4d70('0x21')];}_0x5ec932[_0x4d70('0x13')](_0x1807ce)['send'](_0x5ad13e);};}exports[_0x4d70('0x22')]=function(_0x17442b,_0x4e34ea){var _0x74fc1b={},_0x59a0b2={},_0x256751={'count':0x0,'rows':[]};var _0x3ada03=db[_0x4d70('0x23')]['rawAttributes'];_0x59a0b2[_0x4d70('0x24')]=_[_0x4d70('0x25')](_0x3ada03);var _0x24df18={'dateStart':_0x17442b['query'][_0x4d70('0x26')],'dateEnd':_0x17442b[_0x4d70('0x27')][_0x4d70('0x28')]};delete _0x17442b[_0x4d70('0x27')][_0x4d70('0x26')];delete _0x17442b[_0x4d70('0x27')]['dateEnd'];_0x59a0b2[_0x4d70('0x27')]=_[_0x4d70('0x25')](_0x17442b[_0x4d70('0x27')]);_0x59a0b2[_0x4d70('0x29')]=_[_0x4d70('0x2a')](_0x59a0b2[_0x4d70('0x24')],_0x59a0b2[_0x4d70('0x27')]);_0x74fc1b[_0x4d70('0x2b')]=_[_0x4d70('0x2a')](_0x59a0b2[_0x4d70('0x24')],qs[_0x4d70('0x2c')](_0x17442b[_0x4d70('0x27')][_0x4d70('0x2c')]));_0x74fc1b['attributes']=_0x74fc1b[_0x4d70('0x2b')][_0x4d70('0x2d')]?_0x74fc1b[_0x4d70('0x2b')]:_0x59a0b2[_0x4d70('0x24')];if(!_0x17442b[_0x4d70('0x27')][_0x4d70('0x2e')](_0x4d70('0x2f'))){_0x74fc1b[_0x4d70('0x17')]=qs[_0x4d70('0x17')](_0x17442b[_0x4d70('0x27')]['limit']);_0x74fc1b[_0x4d70('0x16')]=qs[_0x4d70('0x16')](_0x17442b['query'][_0x4d70('0x16')]);}_0x74fc1b[_0x4d70('0x30')]=qs['sort'](_0x17442b[_0x4d70('0x27')][_0x4d70('0x31')]);_0x74fc1b['where']=qs['filters'](_[_0x4d70('0x32')](_0x17442b[_0x4d70('0x27')],_0x59a0b2[_0x4d70('0x29')]));if(_0x24df18[_0x4d70('0x26')]){if(_0x24df18[_0x4d70('0x28')]){_0x24df18['dateEnd']=moment(_0x24df18['dateEnd'])[_0x4d70('0x33')](0x1,'day');}else{_0x24df18[_0x4d70('0x28')]=moment(_0x24df18[_0x4d70('0x26')])[_0x4d70('0x33')](0x1,'day');}_[_0x4d70('0x34')](_0x74fc1b['where'],{'createdAt':{'$gte':_0x24df18[_0x4d70('0x26')],'$lte':_0x24df18['dateEnd']}});}if(_0x17442b['query'][_0x4d70('0x35')]){_0x74fc1b[_0x4d70('0x36')]=_['merge'](_0x74fc1b[_0x4d70('0x36')],{'$or':_[_0x4d70('0x37')](_0x74fc1b[_0x4d70('0x2b')],function(_0x460071){var _0x47680b={};_0x47680b[_0x460071]={'$like':'%'+_0x17442b[_0x4d70('0x27')][_0x4d70('0x35')]+'%'};return _0x47680b;})});}_0x74fc1b=_[_0x4d70('0x34')]({},_0x74fc1b,_0x17442b[_0x4d70('0x38')]);var _0x37d421={'where':_0x74fc1b['where']};return db[_0x4d70('0x23')][_0x4d70('0x39')](_0x37d421)[_0x4d70('0x1c')](function(_0x171dbe){_0x256751[_0x4d70('0x39')]=_0x171dbe;if(_0x17442b[_0x4d70('0x27')][_0x4d70('0x3a')]){_0x74fc1b[_0x4d70('0x3b')]=[{'all':!![]}];}return db['ChatTransferReport'][_0x4d70('0x3c')](_0x74fc1b);})[_0x4d70('0x1c')](function(_0x12a317){_0x256751[_0x4d70('0x3d')]=_0x12a317;return _0x256751;})['then'](respondWithFilteredResult(_0x4e34ea,_0x74fc1b))[_0x4d70('0x3e')](handleError(_0x4e34ea,null));};exports[_0x4d70('0x3f')]=function(_0x50f97d,_0x43235f){var _0x529873={'raw':!![],'where':{'id':_0x50f97d[_0x4d70('0x40')]['id']}},_0x8abe3e={};_0x8abe3e['model']=_[_0x4d70('0x25')](db['ChatTransferReport']['rawAttributes']);_0x8abe3e['query']=_['keys'](_0x50f97d[_0x4d70('0x27')]);_0x8abe3e[_0x4d70('0x29')]=_['intersection'](_0x8abe3e['model'],_0x8abe3e[_0x4d70('0x27')]);_0x529873[_0x4d70('0x2b')]=_[_0x4d70('0x2a')](_0x8abe3e[_0x4d70('0x24')],qs[_0x4d70('0x2c')](_0x50f97d['query'][_0x4d70('0x2c')]));_0x529873[_0x4d70('0x2b')]=_0x529873[_0x4d70('0x2b')][_0x4d70('0x2d')]?_0x529873[_0x4d70('0x2b')]:_0x8abe3e[_0x4d70('0x24')];if(_0x50f97d[_0x4d70('0x27')][_0x4d70('0x3a')]){_0x529873[_0x4d70('0x3b')]=[{'all':!![]}];}_0x529873=_[_0x4d70('0x34')]({},_0x529873,_0x50f97d['options']);return db[_0x4d70('0x23')][_0x4d70('0x41')](_0x529873)[_0x4d70('0x1c')](handleEntityNotFound(_0x43235f,null))[_0x4d70('0x1c')](respondWithResult(_0x43235f,null))[_0x4d70('0x3e')](handleError(_0x43235f,null));};exports[_0x4d70('0x42')]=function(_0x3279f4,_0x32e34e){return db[_0x4d70('0x23')][_0x4d70('0x42')](_0x3279f4[_0x4d70('0x43')],{})['then'](respondWithResult(_0x32e34e,0xc9))[_0x4d70('0x3e')](handleError(_0x32e34e,null));};exports['update']=function(_0x3f9401,_0x4183e0){if(_0x3f9401[_0x4d70('0x43')]['id']){delete _0x3f9401[_0x4d70('0x43')]['id'];}return db[_0x4d70('0x23')][_0x4d70('0x41')]({'where':{'id':_0x3f9401[_0x4d70('0x40')]['id']}})[_0x4d70('0x1c')](handleEntityNotFound(_0x4183e0,null))[_0x4d70('0x1c')](saveUpdates(_0x3f9401[_0x4d70('0x43')],null))[_0x4d70('0x1c')](respondWithResult(_0x4183e0,null))[_0x4d70('0x3e')](handleError(_0x4183e0,null));};exports[_0x4d70('0x1d')]=function(_0x3f3e54,_0x19ae5f){return db['ChatTransferReport'][_0x4d70('0x41')]({'where':{'id':_0x3f3e54['params']['id']}})[_0x4d70('0x1c')](handleEntityNotFound(_0x19ae5f,null))[_0x4d70('0x1c')](removeEntity(_0x19ae5f,null))[_0x4d70('0x3e')](handleError(_0x19ae5f,null));};exports[_0x4d70('0x44')]=function(_0x2a3daf,_0x5c1730){return db[_0x4d70('0x23')][_0x4d70('0x44')]()[_0x4d70('0x1c')](respondWithResult(_0x5c1730,null))['catch'](handleError(_0x5c1730,null));};
\ No newline at end of file
index 446b9d1..26161be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa921=['exports','define','uniqueid','lodash','util','../../config/logger','api','bluebird','request-promise'];(function(_0x10aebf,_0x86df4){var _0x471b34=function(_0x584382){while(--_0x584382){_0x10aebf['push'](_0x10aebf['shift']());}};_0x471b34(++_0x86df4);}(_0xa921,0x1b3));var _0x1a92=function(_0x1aefa4,_0x23365c){_0x1aefa4=_0x1aefa4-0x0;var _0x5b3835=_0xa921[_0x1aefa4];return _0x5b3835;};'use strict';var _=require(_0x1a92('0x0'));var util=require(_0x1a92('0x1'));var logger=require(_0x1a92('0x2'))(_0x1a92('0x3'));var moment=require('moment');var BPromise=require(_0x1a92('0x4'));var rp=require(_0x1a92('0x5'));var attributes=require('./chatTransferReport.attributes');module[_0x1a92('0x6')]=function(_0x18a4f0,_0x1b9750){return _0x18a4f0[_0x1a92('0x7')]('ChatTransferReport',attributes,{'tableName':'report_chat_transfer','paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x1a92('0x8')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xef81=['ChatTransferReport','report_chat_transfer','uniqueid','lodash','util','../../config/logger','request-promise','define'];(function(_0x529296,_0x1a6a23){var _0x1796bf=function(_0x3cae53){while(--_0x3cae53){_0x529296['push'](_0x529296['shift']());}};_0x1796bf(++_0x1a6a23);}(_0xef81,0xdb));var _0x1ef8=function(_0x39b18f,_0x42d1a2){_0x39b18f=_0x39b18f-0x0;var _0x2ae29e=_0xef81[_0x39b18f];return _0x2ae29e;};'use strict';var _=require(_0x1ef8('0x0'));var util=require(_0x1ef8('0x1'));var logger=require(_0x1ef8('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x1ef8('0x3'));var attributes=require('./chatTransferReport.attributes');module['exports']=function(_0x1b313c,_0x5b0164){return _0x1b313c[_0x1ef8('0x4')](_0x1ef8('0x5'),attributes,{'tableName':_0x1ef8('0x6'),'paranoid':![],'indexes':[{'name':_0x1ef8('0x7'),'fields':[_0x1ef8('0x7')]}],'timestamps':!![]});};
\ No newline at end of file
index 58820f6..9c4e3f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc2ce=['message','info','result','catch','lodash','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','ChatTransferReport,\x20%s,\x20%s','request\x20sent','debug','ChatTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x2d2144,_0x547a31){var _0xbd2293=function(_0x2521a0){while(--_0x2521a0){_0x2d2144['push'](_0x2d2144['shift']());}};_0xbd2293(++_0x547a31);}(_0xc2ce,0x97));var _0xec2c=function(_0x286726,_0x20a337){_0x286726=_0x286726-0x0;var _0xcd4fe9=_0xc2ce[_0x286726];return _0xcd4fe9;};'use strict';var _=require(_0xec2c('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xec2c('0x1'));var rs=require(_0xec2c('0x2'));var fs=require('fs');var db=require(_0xec2c('0x3'))['db'];var utils=require(_0xec2c('0x4'));var logger=require(_0xec2c('0x5'))(_0xec2c('0x6'));var config=require(_0xec2c('0x7'));var jayson=require(_0xec2c('0x8'));var client=jayson[_0xec2c('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x53d60c,_0x25f69f,_0x23c334){return new BPromise(function(_0x567df7,_0x3b6afa){return client['request'](_0x53d60c,_0x23c334)['then'](function(_0x2ceec7){logger['info'](_0xec2c('0xa'),_0x25f69f,_0xec2c('0xb'));logger[_0xec2c('0xc')](_0xec2c('0xd'),_0x25f69f,'request\x20sent',JSON[_0xec2c('0xe')](_0x2ceec7));if(_0x2ceec7['error']){if(_0x2ceec7[_0xec2c('0xf')][_0xec2c('0x10')]===0x1f4){logger['error'](_0xec2c('0xa'),_0x25f69f,_0x2ceec7['error'][_0xec2c('0x11')]);return _0x3b6afa(_0x2ceec7[_0xec2c('0xf')][_0xec2c('0x11')]);}logger[_0xec2c('0xf')](_0xec2c('0xa'),_0x25f69f,_0x2ceec7['error'][_0xec2c('0x11')]);return _0x567df7(_0x2ceec7[_0xec2c('0xf')][_0xec2c('0x11')]);}else{logger[_0xec2c('0x12')](_0xec2c('0xa'),_0x25f69f,_0xec2c('0xb'));_0x567df7(_0x2ceec7[_0xec2c('0x13')][_0xec2c('0x11')]);}})[_0xec2c('0x14')](function(_0x3c6cd0){logger[_0xec2c('0xf')](_0xec2c('0xa'),_0x25f69f,_0x3c6cd0);_0x3b6afa(_0x3c6cd0);});});}
\ No newline at end of file
+var _0x2401=['../../config/logger','rpc','../../config/environment','client','http','request','then','info','request\x20sent','stringify','error','code','ChatTransferReport,\x20%s,\x20%s','message','lodash','util','moment','randomstring','../../mysqldb'];(function(_0x5c34b8,_0xd440c){var _0x51faa5=function(_0x2efb93){while(--_0x2efb93){_0x5c34b8['push'](_0x5c34b8['shift']());}};_0x51faa5(++_0xd440c);}(_0x2401,0x93));var _0x1240=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0x2401[_0x397e5f];return _0x5302b8;};'use strict';var _=require(_0x1240('0x0'));var util=require(_0x1240('0x1'));var moment=require(_0x1240('0x2'));var BPromise=require('bluebird');var rs=require(_0x1240('0x3'));var fs=require('fs');var db=require(_0x1240('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x1240('0x5'))(_0x1240('0x6'));var config=require(_0x1240('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x1240('0x8')][_0x1240('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x9cf456,_0x50a967,_0x3ef81d){return new BPromise(function(_0x279b12,_0x1af1f7){return client[_0x1240('0xa')](_0x9cf456,_0x3ef81d)[_0x1240('0xb')](function(_0x300ebb){logger[_0x1240('0xc')]('ChatTransferReport,\x20%s,\x20%s',_0x50a967,'request\x20sent');logger['debug']('ChatTransferReport,\x20%s,\x20%s,\x20%s',_0x50a967,_0x1240('0xd'),JSON[_0x1240('0xe')](_0x300ebb));if(_0x300ebb[_0x1240('0xf')]){if(_0x300ebb[_0x1240('0xf')][_0x1240('0x10')]===0x1f4){logger[_0x1240('0xf')](_0x1240('0x11'),_0x50a967,_0x300ebb[_0x1240('0xf')]['message']);return _0x1af1f7(_0x300ebb[_0x1240('0xf')]['message']);}logger['error'](_0x1240('0x11'),_0x50a967,_0x300ebb[_0x1240('0xf')][_0x1240('0x12')]);return _0x279b12(_0x300ebb[_0x1240('0xf')][_0x1240('0x12')]);}else{logger[_0x1240('0xc')]('ChatTransferReport,\x20%s,\x20%s',_0x50a967,_0x1240('0xd'));_0x279b12(_0x300ebb['result']['message']);}})['catch'](function(_0x3534fc){logger[_0x1240('0xf')](_0x1240('0x11'),_0x50a967,_0x3534fc);_0x1af1f7(_0x3534fc);});});}
\ No newline at end of file
index 0044e1b..82f63ae 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x757a=['../../components/interaction/service','../../config/environment','./chatTransferReport.controller','get','isAuthenticated','index','/describe','/:id','show','post','create','put','update','delete','util','path'];(function(_0x5c4f6b,_0x2cdfce){var _0x104c4e=function(_0x31171b){while(--_0x31171b){_0x5c4f6b['push'](_0x5c4f6b['shift']());}};_0x104c4e(++_0x2cdfce);}(_0x757a,0xde));var _0xa757=function(_0x8e9252,_0xe54ad6){_0x8e9252=_0x8e9252-0x0;var _0x3a0b6c=_0x757a[_0x8e9252];return _0x3a0b6c;};'use strict';var multer=require('multer');var util=require(_0xa757('0x0'));var path=require(_0xa757('0x1'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xa757('0x2'));var config=require(_0xa757('0x3'));var controller=require(_0xa757('0x4'));router[_0xa757('0x5')]('/',auth[_0xa757('0x6')](),controller[_0xa757('0x7')]);router['get'](_0xa757('0x8'),auth[_0xa757('0x6')](),controller['describe']);router[_0xa757('0x5')](_0xa757('0x9'),auth[_0xa757('0x6')](),controller[_0xa757('0xa')]);router[_0xa757('0xb')]('/',auth['isAuthenticated'](),controller[_0xa757('0xc')]);router[_0xa757('0xd')](_0xa757('0x9'),auth[_0xa757('0x6')](),controller[_0xa757('0xe')]);router[_0xa757('0xf')](_0xa757('0x9'),auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0xbdb7=['path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatTransferReport.controller','isAuthenticated','/describe','/:id','create','put','update','delete','multer','util'];(function(_0x4116d1,_0x576689){var _0x5c2946=function(_0x1aeec5){while(--_0x1aeec5){_0x4116d1['push'](_0x4116d1['shift']());}};_0x5c2946(++_0x576689);}(_0xbdb7,0x12e));var _0x7bdb=function(_0x210200,_0x150b2e){_0x210200=_0x210200-0x0;var _0x52e0e5=_0xbdb7[_0x210200];return _0x52e0e5;};'use strict';var multer=require(_0x7bdb('0x0'));var util=require(_0x7bdb('0x1'));var path=require(_0x7bdb('0x2'));var express=require(_0x7bdb('0x3'));var router=express[_0x7bdb('0x4')]();var auth=require(_0x7bdb('0x5'));var interaction=require(_0x7bdb('0x6'));var config=require(_0x7bdb('0x7'));var controller=require(_0x7bdb('0x8'));router['get']('/',auth[_0x7bdb('0x9')](),controller['index']);router['get'](_0x7bdb('0xa'),auth[_0x7bdb('0x9')](),controller['describe']);router['get'](_0x7bdb('0xb'),auth[_0x7bdb('0x9')](),controller['show']);router['post']('/',auth[_0x7bdb('0x9')](),controller[_0x7bdb('0xc')]);router[_0x7bdb('0xd')](_0x7bdb('0xb'),auth[_0x7bdb('0x9')](),controller[_0x7bdb('0xe')]);router[_0x7bdb('0xf')](_0x7bdb('0xb'),auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 28eac9a..72ef2e6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b47=['Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','website_alias','alternate','#fafafa','System','randomstring','STRING','address','email','#9f946a','#ffffff','INTEGER','BOOLEAN','ENUM','rounded','squared','We\x20are\x20here!','Chat','Send','Powered\x20by\x20xCALLY','TEXT','Do\x20you\x20want\x20to\x20close\x20the\x20interaction?','Form\x20properly\x20submitted','Note','Thanks\x20you\x20for\x20your\x20time!','star','stringify','input','name','getDataValue','onlineForm','parse','setDataValue','textarea','Comments','offlineForm','generate','All\x20of\x20our\x20agents\x20are\x20busy\x20at\x20this\x20time.\x20Your\x20chat\x20is\x20very\x20important\x20to\x20us.'];(function(_0x7f287d,_0xe3b36e){var _0x21514f=function(_0x2e392e){while(--_0x2e392e){_0x7f287d['push'](_0x7f287d['shift']());}};_0x21514f(++_0xe3b36e);}(_0x6b47,0xe9));var _0x76b4=function(_0x14a69f,_0x159b4e){_0x14a69f=_0x14a69f-0x0;var _0x4d542c=_0x6b47[_0x14a69f];return _0x4d542c;};'use strict';var Sequelize=require('sequelize');var rs=require(_0x76b4('0x0'));module['exports']={'name':{'type':Sequelize[_0x76b4('0x1')],'allowNull':![]},'address':{'type':Sequelize[_0x76b4('0x1')],'allowNull':![],'unique':_0x76b4('0x2')},'description':{'type':Sequelize[_0x76b4('0x1')]},'mapKey':{'type':Sequelize['STRING'],'defaultValue':_0x76b4('0x3')},'mapKeyOffline':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0x3')},'key':{'type':Sequelize[_0x76b4('0x1')],'allowNull':![]},'agentAlias':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':'Agent'},'customerAlias':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':'Me'},'color':{'type':Sequelize[_0x76b4('0x1')],'allowNull':![],'defaultValue':_0x76b4('0x4'),'validate':{'notEmpty':!![]}},'color_button':{'type':Sequelize[_0x76b4('0x1')],'allowNull':![],'defaultValue':_0x76b4('0x4'),'validate':{'notEmpty':!![]}},'textColor':{'type':Sequelize[_0x76b4('0x1')],'allowNull':![],'defaultValue':_0x76b4('0x5'),'validate':{'notEmpty':!![]}},'fontSize':{'type':Sequelize[_0x76b4('0x6')],'defaultValue':0xf},'remote':{'type':Sequelize[_0x76b4('0x1')]},'animation':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':!![]},'header_shape':{'type':Sequelize[_0x76b4('0x8')](_0x76b4('0x9'),_0x76b4('0xa')),'defaultValue':'rounded'},'header_online':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0xb')},'start_chat_button':{'type':Sequelize['STRING'],'defaultValue':_0x76b4('0xc')},'offline_chat_button':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0xd')},'header_offline':{'type':Sequelize['STRING'],'defaultValue':'Contact\x20us'},'download_transcript':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':!![]},'timeout':{'type':Sequelize[_0x76b4('0x6')],'defaultValue':0x0},'whiteLabel':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0xe')},'defaultWhiteLabel':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':!![]},'sitepic':{'type':Sequelize[_0x76b4('0xf')]},'closingQuestion':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0x10')},'formSubmitSuccessMessage':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0x11')},'formSubmitFailureMessage':{'type':Sequelize['STRING'],'defaultValue':'Form\x20submission\x20error'},'noteTitle':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0x12')},'placeholderMessage':{'type':Sequelize['STRING'],'defaultValue':'Type\x20a\x20message'},'closingMessage':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0x13')},'closingMessageButton':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0xd')},'skipMessageButton':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':'Skip'},'conditionAgreement':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'enableRating':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'enableFeedback':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'ratingType':{'type':Sequelize[_0x76b4('0x8')](_0x76b4('0x14'),'thumb'),'defaultValue':_0x76b4('0x14')},'ratingStarsNumber':{'type':Sequelize['INTEGER'],'defaultValue':0x5},'onlineForm':{'type':Sequelize['TEXT'],'defaultValue':function(){return JSON[_0x76b4('0x15')]({'items':[{'type':_0x76b4('0x16'),'variable':null,'config':{'placeholder':_0x76b4('0x17'),'type':'text','required':!![]},'props':{'title':_0x76b4('0x17'),'helpText':''}},{'type':'input','props':{'title':_0x76b4('0x3'),'helpText':''},'config':{'required':!![],'placeholder':_0x76b4('0x3'),'type':_0x76b4('0x3')},'variable':null}],'fromKey':0x1});},'get':function(){return this[_0x76b4('0x18')](_0x76b4('0x19'))?JSON[_0x76b4('0x1a')](this[_0x76b4('0x18')](_0x76b4('0x19'))):{};},'set':function(_0x5ab95f){return this[_0x76b4('0x1b')]('onlineForm',JSON[_0x76b4('0x15')](_0x5ab95f));}},'offlineForm':{'type':Sequelize['TEXT'],'defaultValue':function(){return JSON[_0x76b4('0x15')]({'items':[{'type':'input','props':{'title':_0x76b4('0x3'),'helpText':''},'config':{'required':!![],'placeholder':_0x76b4('0x3'),'type':'email'},'variable':null},{'type':_0x76b4('0x1c'),'config':{'placeholder':_0x76b4('0x1d')},'props':{'title':_0x76b4('0x1d'),'helpText':'Leave\x20your\x20comments'}}],'fromKey':0x0});},'get':function(){return this[_0x76b4('0x18')](_0x76b4('0x1e'))?JSON[_0x76b4('0x1a')](this['getDataValue'](_0x76b4('0x1e'))):{};},'set':function(_0x5dd986){return this[_0x76b4('0x1b')](_0x76b4('0x1e'),JSON[_0x76b4('0x15')](_0x5dd986));}},'token':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':function(){return rs[_0x76b4('0x1f')]();}},'autoclose':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':!![]},'enableCustomerWriting':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'forwardTranscript':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'forwardTranscriptMessage':{'type':Sequelize[_0x76b4('0x1')]},'forwardOffline':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'forwardOfflineAddress':{'type':Sequelize['STRING']},'waitingTitle':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0x20')},'waitingMessage':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':'Please\x20hold\x20and\x20we\x20will\x20answer\x20your\x20request\x20as\x20soon\x20as\x20possible.'},'offlineMessageSubject':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':'New\x20offline\x20message\x20from\x20websiteName'},'offlineMessageBody':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':'You\x20received\x20a\x20new\x20offline\x20message\x20from\x20websiteName.\x20Here\x20you\x20can\x20find\x20the\x20details\x20of\x20the\x20request:'},'enableUnmanagedNote':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':!![]},'unmanagedMessage':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':'Your\x20request\x20has\x20not\x20been\x20processed.'},'skipUnmanaged':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':'Skip'},'sendUnmanaged':{'type':Sequelize['STRING'],'defaultValue':_0x76b4('0xd')},'enableCustomerAttachment':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'enableCustomerCheckmarks':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentAvatar':{'type':Sequelize['TEXT']},'showAgentAvatar':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'timezone':{'type':Sequelize[_0x76b4('0x1')]},'notificationTemplate':{'type':Sequelize[_0x76b4('0xf')],'defaultValue':function(){return _0x76b4('0x21');}},'notificationSound':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':!![]},'notificationShake':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'hideWhenOffline':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentIdentifier':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0x22')},'waitForTheAssignedAgent':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'alignment':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':'bottom_right'},'verticalAlignment':{'type':Sequelize[_0x76b4('0x6')],'defaultValue':0x1e},'messagesAlignment':{'type':Sequelize[_0x76b4('0x1')],'defaultValue':_0x76b4('0x23')},'defaultTitle':{'type':Sequelize[_0x76b4('0x1')]},'customerAvatar':{'type':Sequelize['TEXT']},'showCustomerAvatar':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'messageFontSize':{'type':Sequelize[_0x76b4('0x6')],'defaultValue':0xc},'backgroundColor':{'type':Sequelize[_0x76b4('0x1')],'allowNull':![],'defaultValue':_0x76b4('0x24'),'validate':{'notEmpty':!![]}},'queueTransfer':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x76b4('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x76b4('0x7')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x76b4('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'systemAlias':{'type':Sequelize['STRING'],'defaultValue':_0x76b4('0x25')},'systemAvatar':{'type':Sequelize[_0x76b4('0xf')]}};
\ No newline at end of file
+var _0xc6c0=['parse','getDataValue','stringify','textarea','Comments','Leave\x20your\x20comments','offlineForm','setDataValue','generate','All\x20of\x20our\x20agents\x20are\x20busy\x20at\x20this\x20time.\x20Your\x20chat\x20is\x20very\x20important\x20to\x20us.','Please\x20hold\x20and\x20we\x20will\x20answer\x20your\x20request\x20as\x20soon\x20as\x20possible.','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.','Skip','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','website_alias','bottom_right','System','randomstring','exports','STRING','email','Agent','#9f946a','#ffffff','INTEGER','BOOLEAN','ENUM','squared','We\x20are\x20here!','Contact\x20us','Powered\x20by\x20xCALLY','TEXT','Do\x20you\x20want\x20to\x20close\x20the\x20interaction?','Form\x20properly\x20submitted','Form\x20submission\x20error','Note','Type\x20a\x20message','Thanks\x20you\x20for\x20your\x20time!','Send','star','thumb','input','name','onlineForm'];(function(_0x3d4876,_0x366386){var _0x58ca9d=function(_0x5bd045){while(--_0x5bd045){_0x3d4876['push'](_0x3d4876['shift']());}};_0x58ca9d(++_0x366386);}(_0xc6c0,0x1b1));var _0x0c6c=function(_0x175a55,_0x4082fd){_0x175a55=_0x175a55-0x0;var _0x167adf=_0xc6c0[_0x175a55];return _0x167adf;};'use strict';var Sequelize=require('sequelize');var rs=require(_0x0c6c('0x0'));module[_0x0c6c('0x1')]={'name':{'type':Sequelize[_0x0c6c('0x2')],'allowNull':![]},'address':{'type':Sequelize[_0x0c6c('0x2')],'allowNull':![],'unique':'address'},'description':{'type':Sequelize[_0x0c6c('0x2')]},'mapKey':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x3')},'mapKeyOffline':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x3')},'key':{'type':Sequelize[_0x0c6c('0x2')],'allowNull':![]},'agentAlias':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x4')},'customerAlias':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':'Me'},'color':{'type':Sequelize[_0x0c6c('0x2')],'allowNull':![],'defaultValue':'#9f946a','validate':{'notEmpty':!![]}},'color_button':{'type':Sequelize[_0x0c6c('0x2')],'allowNull':![],'defaultValue':_0x0c6c('0x5'),'validate':{'notEmpty':!![]}},'textColor':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x0c6c('0x6'),'validate':{'notEmpty':!![]}},'fontSize':{'type':Sequelize[_0x0c6c('0x7')],'defaultValue':0xf},'remote':{'type':Sequelize[_0x0c6c('0x2')]},'animation':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':!![]},'header_shape':{'type':Sequelize[_0x0c6c('0x9')]('rounded',_0x0c6c('0xa')),'defaultValue':'rounded'},'header_online':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0xb')},'start_chat_button':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':'Chat'},'offline_chat_button':{'type':Sequelize['STRING'],'defaultValue':'Send'},'header_offline':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0xc')},'download_transcript':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':!![]},'timeout':{'type':Sequelize[_0x0c6c('0x7')],'defaultValue':0x0},'whiteLabel':{'type':Sequelize['STRING'],'defaultValue':_0x0c6c('0xd')},'defaultWhiteLabel':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':!![]},'sitepic':{'type':Sequelize[_0x0c6c('0xe')]},'closingQuestion':{'type':Sequelize['STRING'],'defaultValue':_0x0c6c('0xf')},'formSubmitSuccessMessage':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x10')},'formSubmitFailureMessage':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x11')},'noteTitle':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x12')},'placeholderMessage':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x13')},'closingMessage':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x14')},'closingMessageButton':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x15')},'skipMessageButton':{'type':Sequelize['STRING'],'defaultValue':'Skip'},'conditionAgreement':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':![]},'enableRating':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':![]},'enableFeedback':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':![]},'ratingType':{'type':Sequelize['ENUM'](_0x0c6c('0x16'),_0x0c6c('0x17')),'defaultValue':_0x0c6c('0x16')},'ratingStarsNumber':{'type':Sequelize[_0x0c6c('0x7')],'defaultValue':0x5},'onlineForm':{'type':Sequelize[_0x0c6c('0xe')],'defaultValue':function(){return JSON['stringify']({'items':[{'type':_0x0c6c('0x18'),'variable':null,'config':{'placeholder':_0x0c6c('0x19'),'type':'text','required':!![]},'props':{'title':_0x0c6c('0x19'),'helpText':''}},{'type':'input','props':{'title':_0x0c6c('0x3'),'helpText':''},'config':{'required':!![],'placeholder':'email','type':_0x0c6c('0x3')},'variable':null}],'fromKey':0x1});},'get':function(){return this['getDataValue'](_0x0c6c('0x1a'))?JSON[_0x0c6c('0x1b')](this[_0x0c6c('0x1c')](_0x0c6c('0x1a'))):{};},'set':function(_0x5aac3f){return this['setDataValue'](_0x0c6c('0x1a'),JSON[_0x0c6c('0x1d')](_0x5aac3f));}},'offlineForm':{'type':Sequelize[_0x0c6c('0xe')],'defaultValue':function(){return JSON[_0x0c6c('0x1d')]({'items':[{'type':'input','props':{'title':_0x0c6c('0x3'),'helpText':''},'config':{'required':!![],'placeholder':_0x0c6c('0x3'),'type':_0x0c6c('0x3')},'variable':null},{'type':_0x0c6c('0x1e'),'config':{'placeholder':_0x0c6c('0x1f')},'props':{'title':_0x0c6c('0x1f'),'helpText':_0x0c6c('0x20')}}],'fromKey':0x0});},'get':function(){return this[_0x0c6c('0x1c')](_0x0c6c('0x21'))?JSON[_0x0c6c('0x1b')](this[_0x0c6c('0x1c')](_0x0c6c('0x21'))):{};},'set':function(_0x26b1cd){return this[_0x0c6c('0x22')](_0x0c6c('0x21'),JSON[_0x0c6c('0x1d')](_0x26b1cd));}},'token':{'type':Sequelize['STRING'],'defaultValue':function(){return rs[_0x0c6c('0x23')]();}},'autoclose':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'enableCustomerWriting':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'forwardTranscript':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':![]},'forwardTranscriptMessage':{'type':Sequelize[_0x0c6c('0x2')]},'forwardOffline':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':![]},'forwardOfflineAddress':{'type':Sequelize[_0x0c6c('0x2')]},'waitingTitle':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x24')},'waitingMessage':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x25')},'offlineMessageSubject':{'type':Sequelize['STRING'],'defaultValue':_0x0c6c('0x26')},'offlineMessageBody':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x27')},'enableUnmanagedNote':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':!![]},'unmanagedMessage':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x28')},'skipUnmanaged':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x29')},'sendUnmanaged':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x15')},'enableCustomerAttachment':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'enableCustomerCheckmarks':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':![]},'agentAvatar':{'type':Sequelize[_0x0c6c('0xe')]},'showAgentAvatar':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':![]},'timezone':{'type':Sequelize['STRING']},'notificationTemplate':{'type':Sequelize[_0x0c6c('0xe')],'defaultValue':function(){return _0x0c6c('0x2a');}},'notificationSound':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':![]},'hideWhenOffline':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentIdentifier':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x2b')},'waitForTheAssignedAgent':{'type':Sequelize[_0x0c6c('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'alignment':{'type':Sequelize['STRING'],'defaultValue':_0x0c6c('0x2c')},'verticalAlignment':{'type':Sequelize['INTEGER'],'defaultValue':0x1e},'messagesAlignment':{'type':Sequelize['STRING'],'defaultValue':'alternate'},'defaultTitle':{'type':Sequelize['STRING']},'customerAvatar':{'type':Sequelize['TEXT']},'showCustomerAvatar':{'type':Sequelize[_0x0c6c('0x8')],'defaultValue':![]},'messageFontSize':{'type':Sequelize[_0x0c6c('0x7')],'defaultValue':0xc},'backgroundColor':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'#fafafa','validate':{'notEmpty':!![]}},'queueTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x0c6c('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'systemAlias':{'type':Sequelize[_0x0c6c('0x2')],'defaultValue':_0x0c6c('0x2d')},'systemAvatar':{'type':Sequelize[_0x0c6c('0xe')]}};
\ No newline at end of file
index 4ecdc0e..7aa75a5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6eb1=['where','pick','dateStart','add','day','filter','merge','options','ChatWebsite','includeAll','include','findAll','show','catch','body','params','find','ChatWebsiteId','Disposition','create','getDispositions','sort','map','rows','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','removeAnswers','sitepic','file','agentAvatar','filename','addCustomerAvatar','customerAvatar','systemAvatar','getLogo','join','root','../../config/license/util','getLicense','custom','isNil','server/files/images/logos/','download','getAvatar','existsSync','server/files/images/avatars/','server/files/images/avatars/customer_avatar.png','showCustomerAvatar','getSystemAvatar','server/files/images/avatars/system_avatar.png','notify','user-agent-parser','setUA','user-agent','getResult','chat','CmContact','Sequelize','no\x20available\x20attributes','difference','createdAt','updatedAt','ListId','from','ValidationError','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','List','Contacts','DESC','ChatApplication','Applications','account','applications','list','priority','contact','firstName','lastName','customerIp','referer','browser','format','version','unknown','%s\x20%s','device','%s\x20%s\x20%s','vendor','type','threadId','ChatInteraction','externalUrl','ContactId','interaction','spread','get','autoclose','push','close','*,*,*,*','ChatMessage','AttachmentId','UserId','User','unshift','forcedOwnership','Start','startRouting','EventManager','offline','describe','CompanyId','from\x20is\x20mandatory','mapKeyOffline\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','mapKeyOffline','mapKeyOffline\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','defaults','findOrCreate','readFileSync','server/files/templates/chatOfflineMessage.ejs','utf8','render','toPairs','offlineMessageBody','ChatOfflineMessage','MailAccount','MailServerOut','Smtp','service','host','port','secure','authentication','auth','user','pass','sendMail','\x22%s\x22\x20<%s>','forwardOfflineAddress','offlineMessageSubject','addInteraction','omit','getInteractions','findOne','Contact','fullname','internal','Tag','Tags','color','tag','Command','interval','indexOf','true','[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)','ONLINE','timezone','inspect','No\x20timezone','getSnippet','Interval','getProactiveActions','License','chatLicenseExceeded','Intervals','all','server/files/chat/iframe.js','remote','headers','x-real-ip','alignment','verticalAlignment','addApplications','sequelize','transaction','bulkCreate','getApplications','addProactiveActions','false','items','fromKey','getOfflineMessages','addAgents','emit','userChatWebsite:save','removeAgents','isArray','userChatWebsite:remove','getAgents','request-promise','moment','mustache','util','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../mysqldb','socket.io-emitter','localhost','./chatWebsite.socket','jayson/promise','client','http','request','ChatWebsite,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','info','result','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','then','destroy','stack','name','send','index','rawAttributes','model','keys','query','dateEnd','filters','intersection','fields','length','attributes','hasOwnProperty','nolimit','order'];(function(_0x423a54,_0x547112){var _0x30bcd0=function(_0x34261b){while(--_0x34261b){_0x423a54['push'](_0x423a54['shift']());}};_0x30bcd0(++_0x547112);}(_0x6eb1,0x1cb));var _0x16eb=function(_0x133296,_0xe8ff9a){_0x133296=_0x133296-0x0;var _0x193517=_0x6eb1[_0x133296];return _0x193517;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x16eb('0x0'));var moment=require(_0x16eb('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x16eb('0x2'));var util=require(_0x16eb('0x3'));var path=require('path');var sox=require('sox');var csv=require(_0x16eb('0x4'));var ejs=require(_0x16eb('0x5'));var fs=require('fs');var _=require(_0x16eb('0x6'));var squel=require(_0x16eb('0x7'));var crypto=require(_0x16eb('0x8'));var jsforce=require(_0x16eb('0x9'));var deskjs=require('desk.js');var toCsv=require(_0x16eb('0x4'));var querystring=require(_0x16eb('0xa'));var Papa=require(_0x16eb('0xb'));var qs=require(_0x16eb('0xc'));var logger=require('../../config/logger')(_0x16eb('0xd'));var utils=require(_0x16eb('0xe'));var config=require('../../config/environment');var db=require(_0x16eb('0xf'))['db'];var socket=require(_0x16eb('0x10'))({'host':_0x16eb('0x11'),'port':0x18eb});require(_0x16eb('0x12'))['register'](socket);var jayson=require(_0x16eb('0x13'));var client=jayson[_0x16eb('0x14')][_0x16eb('0x15')]({'port':0x232c});var client9002=jayson[_0x16eb('0x14')][_0x16eb('0x15')]({'port':0x232a});var client9003=jayson[_0x16eb('0x14')]['http']({'port':0x232b});function respondWithRpcPromise(_0x20bea0,_0x5c82fa,_0x3f6d19,_0x59b05e){return new BPromise(function(_0x2fc9ef,_0x12bff7){var _0x5b5d78=_0x59b05e||client;return _0x5b5d78[_0x16eb('0x16')](_0x20bea0,_0x3f6d19)['then'](function(_0x4014a1){logger['info'](_0x16eb('0x17'),_0x5c82fa,_0x16eb('0x18'));logger[_0x16eb('0x19')]('ChatWebsite,\x20%s,\x20%s,\x20%s',_0x5c82fa,_0x16eb('0x18'),JSON[_0x16eb('0x1a')](_0x4014a1));if(_0x4014a1[_0x16eb('0x1b')]){if(_0x4014a1[_0x16eb('0x1b')][_0x16eb('0x1c')]===0x1f4){logger['error'](_0x16eb('0x17'),_0x5c82fa,_0x4014a1[_0x16eb('0x1b')][_0x16eb('0x1d')]);return _0x12bff7(_0x4014a1['error'][_0x16eb('0x1d')]);}logger['error'](_0x16eb('0x17'),_0x5c82fa,_0x4014a1[_0x16eb('0x1b')][_0x16eb('0x1d')]);return _0x2fc9ef(_0x4014a1[_0x16eb('0x1b')][_0x16eb('0x1d')]);}else{logger[_0x16eb('0x1e')](_0x16eb('0x17'),_0x5c82fa,_0x16eb('0x18'));_0x2fc9ef(_0x4014a1[_0x16eb('0x1f')][_0x16eb('0x1d')]);}})['catch'](function(_0x32f40b){logger[_0x16eb('0x1b')](_0x16eb('0x17'),_0x5c82fa,_0x32f40b);_0x12bff7(_0x32f40b);});});}function respondWithStatusCode(_0x1e3544,_0x123eb8){_0x123eb8=_0x123eb8||0xcc;return function(_0x378f88){if(_0x378f88){return _0x1e3544[_0x16eb('0x20')](_0x123eb8);}return _0x1e3544[_0x16eb('0x21')](_0x123eb8)[_0x16eb('0x22')]();};}function respondWithResult(_0x3b366b,_0xa91d93){_0xa91d93=_0xa91d93||0xc8;return function(_0x59e8a3){if(_0x59e8a3){return _0x3b366b[_0x16eb('0x21')](_0xa91d93)[_0x16eb('0x23')](_0x59e8a3);}};}function respondWithFilteredResult(_0x55bb64,_0x27cf4b){return function(_0x4c0aa5){if(_0x4c0aa5){var _0x14e30d=_0x4c0aa5[_0x16eb('0x24')],_0x582734=_0x27cf4b['offset'],_0x5d26d0=_0x27cf4b[_0x16eb('0x25')]+_0x27cf4b[_0x16eb('0x26')],_0x6dd11a;if(_0x5d26d0>=_0x14e30d){_0x5d26d0=_0x14e30d;_0x6dd11a=0xc8;}else{_0x6dd11a=0xce;}_0x55bb64[_0x16eb('0x21')](_0x6dd11a);return _0x55bb64[_0x16eb('0x27')]('Content-Range',_0x582734+'-'+_0x5d26d0+'/'+_0x14e30d)[_0x16eb('0x23')](_0x4c0aa5);}return null;};}function patchUpdates(_0x15a6ed){return function(_0x5520d2){try{jsonpatch[_0x16eb('0x28')](_0x5520d2,_0x15a6ed,!![]);}catch(_0x33ce86){return BPromise[_0x16eb('0x29')](_0x33ce86);}return _0x5520d2[_0x16eb('0x2a')]();};}function saveUpdates(_0x438975,_0xcd3088){return function(_0x31c5b9){if(_0x31c5b9){return _0x31c5b9[_0x16eb('0x2b')](_0x438975)[_0x16eb('0x2c')](function(_0x2c9e01){return _0x2c9e01;});}return null;};}function removeEntity(_0x190bee,_0x3eb761){return function(_0x3c7dee){if(_0x3c7dee){return _0x3c7dee[_0x16eb('0x2d')]()[_0x16eb('0x2c')](function(){_0x190bee[_0x16eb('0x21')](0xcc)[_0x16eb('0x22')]();});}};}function handleEntityNotFound(_0x4ee3d4,_0x23060d){return function(_0x5a7cee){if(!_0x5a7cee){_0x4ee3d4[_0x16eb('0x20')](0x194);}return _0x5a7cee;};}function handleError(_0x47c90b,_0x5e3ce3){_0x5e3ce3=_0x5e3ce3||0x1f4;return function(_0x450763){logger[_0x16eb('0x1b')](_0x450763[_0x16eb('0x2e')]);if(_0x450763[_0x16eb('0x2f')]){delete _0x450763[_0x16eb('0x2f')];}_0x47c90b[_0x16eb('0x21')](_0x5e3ce3)[_0x16eb('0x30')](_0x450763);};}exports[_0x16eb('0x31')]=function(_0x225745,_0x116e25){var _0x1e9103={},_0x2f12d6={},_0xaedf11={'count':0x0,'rows':[]};var _0x441aa2=db['ChatWebsite'][_0x16eb('0x32')];_0x2f12d6[_0x16eb('0x33')]=_[_0x16eb('0x34')](_0x441aa2);var _0x4fb129={'dateStart':_0x225745[_0x16eb('0x35')]['dateStart'],'dateEnd':_0x225745['query']['dateEnd']};delete _0x225745[_0x16eb('0x35')]['dateStart'];delete _0x225745[_0x16eb('0x35')][_0x16eb('0x36')];_0x2f12d6[_0x16eb('0x35')]=_[_0x16eb('0x34')](_0x225745[_0x16eb('0x35')]);_0x2f12d6[_0x16eb('0x37')]=_[_0x16eb('0x38')](_0x2f12d6[_0x16eb('0x33')],_0x2f12d6[_0x16eb('0x35')]);_0x1e9103['attributes']=_[_0x16eb('0x38')](_0x2f12d6['model'],qs[_0x16eb('0x39')](_0x225745[_0x16eb('0x35')][_0x16eb('0x39')]));_0x1e9103['attributes']=_0x1e9103['attributes'][_0x16eb('0x3a')]?_0x1e9103[_0x16eb('0x3b')]:_0x2f12d6['model'];if(!_0x225745[_0x16eb('0x35')][_0x16eb('0x3c')](_0x16eb('0x3d'))){_0x1e9103[_0x16eb('0x26')]=qs[_0x16eb('0x26')](_0x225745['query']['limit']);_0x1e9103[_0x16eb('0x25')]=qs[_0x16eb('0x25')](_0x225745[_0x16eb('0x35')]['offset']);}_0x1e9103[_0x16eb('0x3e')]=qs['sort'](_0x225745[_0x16eb('0x35')]['sort']);_0x1e9103[_0x16eb('0x3f')]=qs['filters'](_[_0x16eb('0x40')](_0x225745[_0x16eb('0x35')],_0x2f12d6[_0x16eb('0x37')]));if(_0x4fb129[_0x16eb('0x41')]){if(_0x4fb129[_0x16eb('0x36')]){_0x4fb129[_0x16eb('0x36')]=moment(_0x4fb129[_0x16eb('0x36')])[_0x16eb('0x42')](0x1,_0x16eb('0x43'));}else{_0x4fb129[_0x16eb('0x36')]=moment(_0x4fb129[_0x16eb('0x41')])[_0x16eb('0x42')](0x1,'day');}_['merge'](_0x1e9103[_0x16eb('0x3f')],{'createdAt':{'$gte':_0x4fb129[_0x16eb('0x41')],'$lte':_0x4fb129['dateEnd']}});}if(_0x225745[_0x16eb('0x35')][_0x16eb('0x44')]){_0x1e9103[_0x16eb('0x3f')]=_[_0x16eb('0x45')](_0x1e9103[_0x16eb('0x3f')],{'$or':_['map'](_0x1e9103[_0x16eb('0x3b')],function(_0x48adda){var _0x1bfbec={};_0x1bfbec[_0x48adda]={'$like':'%'+_0x225745[_0x16eb('0x35')][_0x16eb('0x44')]+'%'};return _0x1bfbec;})});}_0x1e9103=_[_0x16eb('0x45')]({},_0x1e9103,_0x225745[_0x16eb('0x46')]);var _0x169d11={'where':_0x1e9103[_0x16eb('0x3f')]};return db[_0x16eb('0x47')][_0x16eb('0x24')](_0x169d11)['then'](function(_0x2bb536){_0xaedf11[_0x16eb('0x24')]=_0x2bb536;if(_0x225745['query'][_0x16eb('0x48')]){_0x1e9103[_0x16eb('0x49')]=[{'all':!![]}];}return db[_0x16eb('0x47')][_0x16eb('0x4a')](_0x1e9103);})[_0x16eb('0x2c')](function(_0xcb5c7d){_0xaedf11['rows']=_0xcb5c7d;return _0xaedf11;})[_0x16eb('0x2c')](respondWithFilteredResult(_0x116e25,_0x1e9103))['catch'](handleError(_0x116e25,null));};exports[_0x16eb('0x4b')]=function(_0x199a2d,_0x5c8e89){var _0x1a6b1f={'raw':![],'where':{'id':_0x199a2d['params']['id']}},_0x58d369={};_0x58d369[_0x16eb('0x33')]=_[_0x16eb('0x34')](db[_0x16eb('0x47')]['rawAttributes']);_0x58d369[_0x16eb('0x35')]=_['keys'](_0x199a2d[_0x16eb('0x35')]);_0x58d369[_0x16eb('0x37')]=_[_0x16eb('0x38')](_0x58d369[_0x16eb('0x33')],_0x58d369[_0x16eb('0x35')]);_0x1a6b1f[_0x16eb('0x3b')]=_[_0x16eb('0x38')](_0x58d369[_0x16eb('0x33')],qs[_0x16eb('0x39')](_0x199a2d['query'][_0x16eb('0x39')]));_0x1a6b1f[_0x16eb('0x3b')]=_0x1a6b1f[_0x16eb('0x3b')][_0x16eb('0x3a')]?_0x1a6b1f[_0x16eb('0x3b')]:_0x58d369[_0x16eb('0x33')];if(_0x199a2d[_0x16eb('0x35')][_0x16eb('0x48')]){_0x1a6b1f[_0x16eb('0x49')]=[{'all':!![]}];}_0x1a6b1f=_['merge']({},_0x1a6b1f,_0x199a2d[_0x16eb('0x46')]);return db['ChatWebsite']['find'](_0x1a6b1f)[_0x16eb('0x2c')](handleEntityNotFound(_0x5c8e89,null))[_0x16eb('0x2c')](respondWithResult(_0x5c8e89,null))[_0x16eb('0x4c')](handleError(_0x5c8e89,null));};exports['create']=function(_0x274f8f,_0x5ed649){return db[_0x16eb('0x47')]['create'](_0x274f8f[_0x16eb('0x4d')],{})[_0x16eb('0x2c')](respondWithResult(_0x5ed649,0xc9))['catch'](handleError(_0x5ed649,null));};exports[_0x16eb('0x2b')]=function(_0x44d525,_0x491fbc){if(_0x44d525[_0x16eb('0x4d')]['id']){delete _0x44d525[_0x16eb('0x4d')]['id'];}return db[_0x16eb('0x47')]['find']({'where':{'id':_0x44d525[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x491fbc,null))[_0x16eb('0x2c')](saveUpdates(_0x44d525['body'],null))[_0x16eb('0x2c')](respondWithResult(_0x491fbc,null))['catch'](handleError(_0x491fbc,null));};exports['destroy']=function(_0x41ab26,_0x38a985){return db[_0x16eb('0x47')]['find']({'where':{'id':_0x41ab26[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x38a985,null))['then'](removeEntity(_0x38a985,null))[_0x16eb('0x4c')](handleError(_0x38a985,null));};exports['describe']=function(_0x391f43,_0x16451c){return db[_0x16eb('0x47')]['describe']()[_0x16eb('0x2c')](respondWithResult(_0x16451c,null))['catch'](handleError(_0x16451c,null));};exports['addDisposition']=function(_0x4eab52,_0x5ee6b3,_0x1185d2){if(_0x4eab52[_0x16eb('0x4d')]['id']){delete _0x4eab52[_0x16eb('0x4d')]['id'];}return db[_0x16eb('0x47')][_0x16eb('0x4f')]({'where':{'id':_0x4eab52[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x5ee6b3,null))['then'](function(_0x34ebc5){if(_0x34ebc5){_0x4eab52[_0x16eb('0x4d')][_0x16eb('0x50')]=_0x34ebc5['id'];return db[_0x16eb('0x51')][_0x16eb('0x52')](_0x4eab52[_0x16eb('0x4d')]);}})[_0x16eb('0x2c')](respondWithResult(_0x5ee6b3,null))[_0x16eb('0x4c')](handleError(_0x5ee6b3,null));};exports[_0x16eb('0x53')]=function(_0x48bd9f,_0x241b80,_0x3d4c8d){var _0x179f57={'raw':![],'where':{}};var _0xb9f6e={};var _0x53923a={'count':0x0,'rows':[]};return db[_0x16eb('0x47')]['findOne']({'where':{'id':_0x48bd9f[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x241b80,null))[_0x16eb('0x2c')](function(_0x3a6d6e){if(_0x3a6d6e){_0xb9f6e[_0x16eb('0x33')]=_['keys'](db[_0x16eb('0x51')][_0x16eb('0x32')]);_0xb9f6e['query']=_[_0x16eb('0x34')](_0x48bd9f[_0x16eb('0x35')]);_0xb9f6e[_0x16eb('0x37')]=_[_0x16eb('0x38')](_0xb9f6e[_0x16eb('0x33')],_0xb9f6e[_0x16eb('0x35')]);_0x179f57[_0x16eb('0x3b')]=_[_0x16eb('0x38')](_0xb9f6e['model'],qs['fields'](_0x48bd9f[_0x16eb('0x35')]['fields']));_0x179f57['attributes']=_0x179f57['attributes'][_0x16eb('0x3a')]?_0x179f57[_0x16eb('0x3b')]:_0xb9f6e[_0x16eb('0x33')];if(!_0x48bd9f[_0x16eb('0x35')][_0x16eb('0x3c')]('nolimit')){_0x179f57[_0x16eb('0x26')]=qs['limit'](_0x48bd9f[_0x16eb('0x35')]['limit']);_0x179f57[_0x16eb('0x25')]=qs[_0x16eb('0x25')](_0x48bd9f['query'][_0x16eb('0x25')]);}_0x179f57[_0x16eb('0x3e')]=qs[_0x16eb('0x54')](_0x48bd9f[_0x16eb('0x35')][_0x16eb('0x54')]);_0x179f57['where']=qs[_0x16eb('0x37')](_[_0x16eb('0x40')](_0x48bd9f[_0x16eb('0x35')],_0xb9f6e[_0x16eb('0x37')]));_0x179f57[_0x16eb('0x3f')][_0x16eb('0x50')]=_0x3a6d6e['id'];if(_0x48bd9f[_0x16eb('0x35')][_0x16eb('0x44')]){_0x179f57[_0x16eb('0x3f')]=_[_0x16eb('0x45')](_0x179f57[_0x16eb('0x3f')],{'$or':_[_0x16eb('0x55')](_0x179f57[_0x16eb('0x3b')],function(_0x3cf0d7){var _0x531cbc={};_0x531cbc[_0x3cf0d7]={'$like':'%'+_0x48bd9f[_0x16eb('0x35')][_0x16eb('0x44')]+'%'};return _0x531cbc;})});}_0x179f57=_[_0x16eb('0x45')]({},_0x179f57,_0x48bd9f[_0x16eb('0x46')]);return db[_0x16eb('0x51')][_0x16eb('0x24')]({'where':_0x179f57[_0x16eb('0x3f')]})[_0x16eb('0x2c')](function(_0xfcdf28){_0x53923a[_0x16eb('0x24')]=_0xfcdf28;if(_0x48bd9f[_0x16eb('0x35')][_0x16eb('0x48')]){_0x179f57['include']=[{'all':!![]}];}return db[_0x16eb('0x51')][_0x16eb('0x4a')](_0x179f57);})[_0x16eb('0x2c')](function(_0x57c48a){_0x53923a[_0x16eb('0x56')]=_0x57c48a;return _0x53923a;});}})[_0x16eb('0x2c')](respondWithFilteredResult(_0x241b80,_0x179f57))[_0x16eb('0x4c')](handleError(_0x241b80,null));};exports[_0x16eb('0x57')]=function(_0x3fd2bd,_0x385650,_0xfde239){var _0x4c30ae;return db[_0x16eb('0x47')][_0x16eb('0x4f')]({'where':{'id':_0x3fd2bd[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x385650,null))[_0x16eb('0x2c')](function(_0x13f8ce){if(_0x13f8ce){return _0x13f8ce['removeDispositions'](_0x3fd2bd['query'][_0x16eb('0x58')]);}})[_0x16eb('0x2c')](respondWithStatusCode(_0x385650,null))[_0x16eb('0x4c')](handleError(_0x385650,null));};exports[_0x16eb('0x59')]=function(_0x265411,_0x1cae4f,_0x2fd3d0){if(_0x265411[_0x16eb('0x4d')]['id']){delete _0x265411['body']['id'];}return db['ChatWebsite'][_0x16eb('0x4f')]({'where':{'id':_0x265411[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x1cae4f,null))[_0x16eb('0x2c')](function(_0x523a3a){if(_0x523a3a){_0x265411[_0x16eb('0x4d')][_0x16eb('0x50')]=_0x523a3a['id'];return db[_0x16eb('0x5a')][_0x16eb('0x52')](_0x265411[_0x16eb('0x4d')]);}})[_0x16eb('0x2c')](respondWithResult(_0x1cae4f,null))[_0x16eb('0x4c')](handleError(_0x1cae4f,null));};exports[_0x16eb('0x5b')]=function(_0x59c718,_0x387206,_0x5a48aa){var _0x31fc33={'raw':![],'where':{}};var _0x290de7={};var _0x5e2fd6={'count':0x0,'rows':[]};return db[_0x16eb('0x47')]['findOne']({'where':{'id':_0x59c718[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x387206,null))[_0x16eb('0x2c')](function(_0x56e31f){if(_0x56e31f){_0x290de7['model']=_[_0x16eb('0x34')](db[_0x16eb('0x5a')]['rawAttributes']);_0x290de7[_0x16eb('0x35')]=_[_0x16eb('0x34')](_0x59c718[_0x16eb('0x35')]);_0x290de7['filters']=_[_0x16eb('0x38')](_0x290de7[_0x16eb('0x33')],_0x290de7['query']);_0x31fc33[_0x16eb('0x3b')]=_[_0x16eb('0x38')](_0x290de7[_0x16eb('0x33')],qs[_0x16eb('0x39')](_0x59c718[_0x16eb('0x35')]['fields']));_0x31fc33[_0x16eb('0x3b')]=_0x31fc33[_0x16eb('0x3b')][_0x16eb('0x3a')]?_0x31fc33[_0x16eb('0x3b')]:_0x290de7[_0x16eb('0x33')];if(!_0x59c718[_0x16eb('0x35')]['hasOwnProperty']('nolimit')){_0x31fc33[_0x16eb('0x26')]=qs['limit'](_0x59c718['query'][_0x16eb('0x26')]);_0x31fc33[_0x16eb('0x25')]=qs[_0x16eb('0x25')](_0x59c718['query'][_0x16eb('0x25')]);}_0x31fc33['order']=qs[_0x16eb('0x54')](_0x59c718[_0x16eb('0x35')][_0x16eb('0x54')]);_0x31fc33['where']=qs[_0x16eb('0x37')](_[_0x16eb('0x40')](_0x59c718[_0x16eb('0x35')],_0x290de7[_0x16eb('0x37')]));_0x31fc33[_0x16eb('0x3f')][_0x16eb('0x50')]=_0x56e31f['id'];if(_0x59c718[_0x16eb('0x35')]['filter']){_0x31fc33[_0x16eb('0x3f')]=_[_0x16eb('0x45')](_0x31fc33[_0x16eb('0x3f')],{'$or':_[_0x16eb('0x55')](_0x31fc33[_0x16eb('0x3b')],function(_0x53e1bf){var _0x487f14={};_0x487f14[_0x53e1bf]={'$like':'%'+_0x59c718[_0x16eb('0x35')][_0x16eb('0x44')]+'%'};return _0x487f14;})});}_0x31fc33=_['merge']({},_0x31fc33,_0x59c718[_0x16eb('0x46')]);return db[_0x16eb('0x5a')][_0x16eb('0x24')]({'where':_0x31fc33[_0x16eb('0x3f')]})[_0x16eb('0x2c')](function(_0x31f98a){_0x5e2fd6[_0x16eb('0x24')]=_0x31f98a;if(_0x59c718[_0x16eb('0x35')][_0x16eb('0x48')]){_0x31fc33[_0x16eb('0x49')]=[{'all':!![]}];}return db['CannedAnswer'][_0x16eb('0x4a')](_0x31fc33);})['then'](function(_0x3aae68){_0x5e2fd6['rows']=_0x3aae68;return _0x5e2fd6;});}})[_0x16eb('0x2c')](respondWithFilteredResult(_0x387206,_0x31fc33))['catch'](handleError(_0x387206,null));};exports[_0x16eb('0x5c')]=function(_0x2dfd3b,_0x3b85aa,_0x4bb938){var _0x2721be;return db[_0x16eb('0x47')][_0x16eb('0x4f')]({'where':{'id':_0x2dfd3b[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x3b85aa,null))[_0x16eb('0x2c')](function(_0xb1821a){if(_0xb1821a){return _0xb1821a['removeAnswers'](_0x2dfd3b[_0x16eb('0x35')][_0x16eb('0x58')]);}})[_0x16eb('0x2c')](respondWithStatusCode(_0x3b85aa,null))[_0x16eb('0x4c')](handleError(_0x3b85aa,null));};exports['addLogo']=function(_0x31b9de,_0x424a09,_0x157a86){_0x31b9de[_0x16eb('0x4d')][_0x16eb('0x5d')]=_0x31b9de[_0x16eb('0x5e')]['filename'];return db['ChatWebsite']['find']({'where':{'id':_0x31b9de[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x424a09,null))[_0x16eb('0x2c')](saveUpdates(_0x31b9de[_0x16eb('0x4d')],null))[_0x16eb('0x2c')](respondWithResult(_0x424a09,null))[_0x16eb('0x4c')](handleError(_0x424a09,null));};exports['addAvatar']=function(_0x3c4a37,_0x2b298e,_0x653a4e){_0x3c4a37[_0x16eb('0x4d')][_0x16eb('0x5f')]=_0x3c4a37['file'][_0x16eb('0x60')];return db[_0x16eb('0x47')]['find']({'where':{'id':_0x3c4a37[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x2b298e,null))[_0x16eb('0x2c')](saveUpdates(_0x3c4a37[_0x16eb('0x4d')],null))[_0x16eb('0x2c')](respondWithResult(_0x2b298e,null))[_0x16eb('0x4c')](handleError(_0x2b298e,null));};exports[_0x16eb('0x61')]=function(_0x16239d,_0x50555b,_0x1975a6){_0x16239d['body'][_0x16eb('0x62')]=_0x16239d['file'][_0x16eb('0x60')];return db['ChatWebsite'][_0x16eb('0x4f')]({'where':{'id':_0x16239d[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x50555b,null))[_0x16eb('0x2c')](saveUpdates(_0x16239d[_0x16eb('0x4d')],null))['then'](respondWithResult(_0x50555b,null))[_0x16eb('0x4c')](handleError(_0x50555b,null));};exports['addSystemAvatar']=function(_0x5871fb,_0x35057c,_0x381f94){_0x5871fb['body'][_0x16eb('0x63')]=_0x5871fb['file'][_0x16eb('0x60')];return db[_0x16eb('0x47')]['find']({'where':{'id':_0x5871fb[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x35057c,null))[_0x16eb('0x2c')](saveUpdates(_0x5871fb[_0x16eb('0x4d')],null))[_0x16eb('0x2c')](respondWithResult(_0x35057c,null))['catch'](handleError(_0x35057c,null));};exports[_0x16eb('0x64')]=function(_0x4aaa06,_0xa9da99,_0x2c0a21){var _0x33f3b9=path[_0x16eb('0x65')](config[_0x16eb('0x66')],'server/files/images/logos/default_logo.png');var _0x53ec9f={'where':{'id':_0x4aaa06['params']['id']},'attributes':['id','sitepic'],'raw':!![]};var _0x4286d3=![];return require(_0x16eb('0x67'))[_0x16eb('0x68')]()[_0x16eb('0x2c')](function(_0x223189){if(_0x223189){_0x4286d3=_0x223189[_0x16eb('0x69')];}})[_0x16eb('0x2c')](function(){return db[_0x16eb('0x47')][_0x16eb('0x4f')](_0x53ec9f);})['then'](handleEntityNotFound(_0xa9da99,null))['then'](function(_0x5a93b9){if(_0x5a93b9){if(!_[_0x16eb('0x6a')](_0x5a93b9[_0x16eb('0x5d')])){if(fs['existsSync'](path['join'](config[_0x16eb('0x66')],_0x16eb('0x6b'),_0x5a93b9[_0x16eb('0x5d')]))&&_0x4286d3){_0x33f3b9=path[_0x16eb('0x65')](config[_0x16eb('0x66')],_0x16eb('0x6b'),_0x5a93b9[_0x16eb('0x5d')]);}}return _0xa9da99[_0x16eb('0x6c')](_0x33f3b9);}})[_0x16eb('0x4c')](handleError(_0xa9da99,null));};exports[_0x16eb('0x6d')]=function(_0x4239a4,_0x4e6d91,_0x4ecc8b){var _0x2d15f6=path[_0x16eb('0x65')](config['root'],'server/files/images/avatars/default_avatar.png');var _0x2edf72={'where':{'id':_0x4239a4[_0x16eb('0x4e')]['id']},'attributes':['id',_0x16eb('0x5f')],'raw':!![]};return db['ChatWebsite'][_0x16eb('0x4f')](_0x2edf72)[_0x16eb('0x2c')](handleEntityNotFound(_0x4e6d91,null))['then'](function(_0x38897c){if(_0x38897c){if(!_[_0x16eb('0x6a')](_0x38897c['agentAvatar'])){if(fs[_0x16eb('0x6e')](path[_0x16eb('0x65')](config[_0x16eb('0x66')],'server/files/images/avatars/',_0x38897c[_0x16eb('0x5f')]))){_0x2d15f6=path[_0x16eb('0x65')](config[_0x16eb('0x66')],_0x16eb('0x6f'),_0x38897c[_0x16eb('0x5f')]);}}return _0x4e6d91[_0x16eb('0x6c')](_0x2d15f6);}})[_0x16eb('0x4c')](handleError(_0x4e6d91,null));};exports['getCustomerAvatar']=function(_0x1412b4,_0x31f827,_0x56745f){var _0x29eb77=path['join'](config['root'],_0x16eb('0x70'));var _0x3faff3={'where':{'id':_0x1412b4['params']['id']},'attributes':['id',_0x16eb('0x62'),_0x16eb('0x71')],'raw':!![]};return db[_0x16eb('0x47')][_0x16eb('0x4f')](_0x3faff3)[_0x16eb('0x2c')](handleEntityNotFound(_0x31f827,null))[_0x16eb('0x2c')](function(_0x343f33){if(_0x343f33){if(!_[_0x16eb('0x6a')](_0x343f33['customerAvatar'])){if(fs[_0x16eb('0x6e')](path['join'](config[_0x16eb('0x66')],_0x16eb('0x6f'),_0x343f33[_0x16eb('0x62')]))&&_0x343f33[_0x16eb('0x71')]){_0x29eb77=path[_0x16eb('0x65')](config[_0x16eb('0x66')],'server/files/images/avatars/',_0x343f33[_0x16eb('0x62')]);}}return _0x31f827['download'](_0x29eb77);}})[_0x16eb('0x4c')](handleError(_0x31f827,null));};exports[_0x16eb('0x72')]=function(_0x4f0ea7,_0x227e8f,_0x5f4509){var _0x44fa6b=path[_0x16eb('0x65')](config['root'],_0x16eb('0x73'));var _0x3f2c5c={'where':{'id':_0x4f0ea7[_0x16eb('0x4e')]['id']},'attributes':['id','systemAvatar'],'raw':!![]};return db['ChatWebsite'][_0x16eb('0x4f')](_0x3f2c5c)[_0x16eb('0x2c')](handleEntityNotFound(_0x227e8f,null))['then'](function(_0x5f7d28){if(_0x5f7d28){if(!_[_0x16eb('0x6a')](_0x5f7d28[_0x16eb('0x63')])){if(fs['existsSync'](path[_0x16eb('0x65')](config[_0x16eb('0x66')],_0x16eb('0x6f'),_0x5f7d28[_0x16eb('0x63')]))){_0x44fa6b=path[_0x16eb('0x65')](config[_0x16eb('0x66')],_0x16eb('0x6f'),_0x5f7d28[_0x16eb('0x63')]);}}return _0x227e8f[_0x16eb('0x6c')](_0x44fa6b);}})[_0x16eb('0x4c')](handleError(_0x227e8f,null));};exports[_0x16eb('0x74')]=function(_0x51cee6,_0x4c10ed,_0x154e14){var _0x1bd4a5=require(_0x16eb('0x75'));var _0x362092=new _0x1bd4a5();var _0x4ca7ac=_0x362092[_0x16eb('0x76')](_0x51cee6['headers'][_0x16eb('0x77')])[_0x16eb('0x78')]();var _0x51d8a6={'body':_0x51cee6[_0x16eb('0x4d')],'channel':_0x16eb('0x79')};var _0xeaa021=[];var _0x532a5d=[];var _0x5e7406={};var _0x42ae3c=![];return db[_0x16eb('0x7a')]['describe']()[_0x16eb('0x2c')](function(_0x480446){if(!_0x480446){throw new db[(_0x16eb('0x7b'))]['ValidationError'](_0x16eb('0x7c'));}_0xeaa021=_[_0x16eb('0x7d')](_[_0x16eb('0x34')](_0x480446),[_0x16eb('0x7e'),_0x16eb('0x7f')]);_0x532a5d=_[_0x16eb('0x7d')](_[_0x16eb('0x34')](_0x480446),[_0x16eb('0x7e'),_0x16eb('0x7f'),'CompanyId',_0x16eb('0x80')]);if(_0x51cee6[_0x16eb('0x4d')]['id']){delete _0x51cee6[_0x16eb('0x4d')]['id'];}if(_[_0x16eb('0x6a')](_0x51cee6['body'][_0x16eb('0x81')])){throw new db[(_0x16eb('0x7b'))]['ValidationError']('from\x20is\x20mandatory');}if(_[_0x16eb('0x6a')](_0x51cee6[_0x16eb('0x4d')][_0x16eb('0x4d')])||_0x51cee6[_0x16eb('0x4d')]['body']===''){throw new db[(_0x16eb('0x7b'))][(_0x16eb('0x82'))](_0x16eb('0x83'));}if(_['isNil'](_0x51cee6[_0x16eb('0x4d')][_0x16eb('0x84')])){throw new db[(_0x16eb('0x7b'))]['ValidationError'](_0x16eb('0x85')+_0x532a5d);}if(!_[_0x16eb('0x86')](_0x532a5d,_0x51cee6[_0x16eb('0x4d')][_0x16eb('0x84')])){throw new db[(_0x16eb('0x7b'))]['ValidationError'](_0x16eb('0x87')+_0x532a5d);}_0x5e7406[_0x51cee6[_0x16eb('0x4d')][_0x16eb('0x84')]]=_0x51cee6[_0x16eb('0x4d')][_0x16eb('0x81')];})['then'](function(){return db[_0x16eb('0x47')][_0x16eb('0x4f')]({'where':{'id':_0x51cee6[_0x16eb('0x4e')]['id']},'include':[{'model':db[_0x16eb('0x88')],'as':_0x16eb('0x89'),'include':[{'model':db[_0x16eb('0x7a')],'as':_0x16eb('0x8a'),'where':_0x5e7406,'limit':0x1,'order':[[_0x16eb('0x7f'),_0x16eb('0x8b')]]}]},{'model':db[_0x16eb('0x8c')],'as':_0x16eb('0x8d')}]});})[_0x16eb('0x2c')](handleEntityNotFound(_0x4c10ed,null))['then'](function(_0x519f51){if(_0x519f51&&_0x519f51[_0x16eb('0x89')]){_0x51d8a6[_0x16eb('0x8e')]=_0x519f51;_0x51d8a6[_0x16eb('0x8f')]=_0x519f51[_0x16eb('0x8d')];_0x51d8a6[_0x16eb('0x90')]=_0x519f51[_0x16eb('0x89')];_0x51d8a6['applications']=_['orderBy'](_0x51d8a6[_0x16eb('0x8f')],[_0x16eb('0x91')],['asc']);if(_0x51d8a6[_0x16eb('0x8e')]['Applications']){delete _0x51d8a6[_0x16eb('0x8e')][_0x16eb('0x8d')];}if(_0x51d8a6['account']['List']&&_0x51d8a6[_0x16eb('0x8e')][_0x16eb('0x89')][_0x16eb('0x8a')][_0x16eb('0x3a')]){return _0x51d8a6[_0x16eb('0x8e')][_0x16eb('0x89')]['Contacts'][0x0];}var _0x584fae=_['defaults'](_0x51cee6[_0x16eb('0x4d')],{'firstName':_0x51cee6[_0x16eb('0x4d')]['from'],'ListId':_0x519f51['ListId']});_0x584fae[_0x51cee6[_0x16eb('0x4d')][_0x16eb('0x84')]]=_0x51cee6[_0x16eb('0x4d')]['from'];return db['CmContact'][_0x16eb('0x52')](_0x584fae,{'fields':_0xeaa021,'raw':!![]});}})[_0x16eb('0x2c')](handleEntityNotFound(_0x4c10ed,null))[_0x16eb('0x2c')](function(_0x30f8b2){_0x51d8a6[_0x16eb('0x92')]=_0x30f8b2;if(_0x30f8b2){var _0x5423e9={'ContactId':_0x30f8b2['id'],'ChatWebsiteId':_0x51cee6['params']['id'],'from':(_0x30f8b2[_0x16eb('0x93')]||'')+'\x20'+(_0x30f8b2[_0x16eb('0x94')]||''),'customerIp':_0x51cee6[_0x16eb('0x4d')][_0x16eb('0x95')],'referer':_0x51cee6[_0x16eb('0x4d')][_0x16eb('0x96')],'browserName':_0x4ca7ac['browser']['name']&&_0x4ca7ac[_0x16eb('0x97')]['version']?util[_0x16eb('0x98')]('%s\x20%s',_0x4ca7ac['browser'][_0x16eb('0x2f')],_0x4ca7ac[_0x16eb('0x97')]['version']):'unknown','browserVersion':_0x4ca7ac[_0x16eb('0x97')][_0x16eb('0x99')]||_0x16eb('0x9a'),'osName':util[_0x16eb('0x98')](_0x16eb('0x9b'),_0x4ca7ac['os'][_0x16eb('0x2f')],_0x4ca7ac['os']['version']),'osVersion':_0x4ca7ac['os']['version'],'deviceModel':_0x4ca7ac[_0x16eb('0x9c')][_0x16eb('0x33')]&&_0x4ca7ac['device']['vendor']?util[_0x16eb('0x98')](_0x16eb('0x9d'),_0x4ca7ac[_0x16eb('0x9c')][_0x16eb('0x33')],_0x4ca7ac[_0x16eb('0x9c')][_0x16eb('0x9e')],_0x4ca7ac[_0x16eb('0x9c')]['type']):null,'deviceVendor':_0x4ca7ac[_0x16eb('0x9c')][_0x16eb('0x9e')],'deviceType':_0x4ca7ac[_0x16eb('0x9c')][_0x16eb('0x9f')],'formData':JSON[_0x16eb('0x1a')](_0x51cee6[_0x16eb('0x4d')])};var _0x47dd05={'ChatWebsiteId':_0x51cee6[_0x16eb('0x4e')]['id'],'closed':![]};if(_0x51cee6[_0x16eb('0x4d')][_0x16eb('0xa0')]){_0x47dd05[_0x16eb('0xa0')]=_0x51cee6[_0x16eb('0x4d')][_0x16eb('0xa0')];return db[_0x16eb('0xa1')][_0x16eb('0x4f')]({'where':_0x47dd05})['then'](function(_0x33c942){if(_0x33c942){return[_0x33c942,![]];}_0x5423e9['threadId']=_0x51cee6[_0x16eb('0x4d')][_0x16eb('0xa0')];_0x5423e9[_0x16eb('0xa2')]=_0x51cee6['body'][_0x16eb('0xa2')];return db['ChatInteraction'][_0x16eb('0x52')](_0x5423e9)[_0x16eb('0x2c')](function(_0x308ec1){return[_0x308ec1,!![]];});});}_0x47dd05[_0x16eb('0xa3')]=_0x30f8b2['id'];if(_0x51cee6[_0x16eb('0x4d')][_0x16eb('0xa4')]&&_0x51cee6['body']['interaction']['id']){_0x47dd05['id']=_0x51cee6[_0x16eb('0x4d')][_0x16eb('0xa4')]['id'];return db[_0x16eb('0xa1')][_0x16eb('0x4f')]({'where':_0x47dd05})['then'](function(_0x547c44){if(_0x547c44){return[_0x547c44,![]];}return db[_0x16eb('0xa1')][_0x16eb('0x52')](_0x5423e9)[_0x16eb('0x2c')](function(_0x452291){return[_0x452291,!![]];});});}return db[_0x16eb('0xa1')][_0x16eb('0x52')](_0x5423e9)[_0x16eb('0x2c')](function(_0x2c5ac2){return[_0x2c5ac2,!![]];});}})[_0x16eb('0xa5')](function(_0x4bea5e,_0x3fde2a){if(_0x4bea5e){_0x42ae3c=_0x3fde2a;if(!_0x3fde2a){return _0x4bea5e[_0x16eb('0x2b')]({'from':(_0x51d8a6['contact'][_0x16eb('0x93')]||'')+'\x20'+(_0x51d8a6[_0x16eb('0x92')][_0x16eb('0x94')]||'')});}else{return _0x4bea5e;}}})[_0x16eb('0x2c')](function(_0x4825b4){_0x51d8a6[_0x16eb('0xa4')]=_0x4825b4[_0x16eb('0xa6')]({'plain':!![]});_0x51d8a6[_0x16eb('0xa4')]['created']=_0x42ae3c;if(_0x51d8a6[_0x16eb('0xa4')]['created']){if(_0x51d8a6[_0x16eb('0x8e')][_0x16eb('0xa7')]){_0x51d8a6['applications'][_0x16eb('0xa8')]({'id':0x0,'priority':_0x51d8a6[_0x16eb('0x8f')]['length']+0x1,'app':_0x16eb('0xa9'),'appdata':'unmanaged','interval':_0x16eb('0xaa')});}}return db[_0x16eb('0xab')][_0x16eb('0x52')]({'body':_0x51cee6[_0x16eb('0x4d')]['body'],'ChatWebsiteId':_0x51cee6['params']['id'],'ChatInteractionId':_0x4825b4['id'],'direction':'in','ContactId':_0x51d8a6[_0x16eb('0x92')]['id'],'AttachmentId':_0x51cee6[_0x16eb('0x4d')][_0x16eb('0xac')]});})[_0x16eb('0x2c')](function(_0x2eedec){_0x51d8a6[_0x16eb('0x1d')]=_0x2eedec;if(_0x51d8a6['interaction'][_0x16eb('0xad')]){return db[_0x16eb('0xae')][_0x16eb('0x4f')]({'attributes':['id','name'],'where':{'id':_0x51d8a6[_0x16eb('0xa4')]['UserId']}})['then'](function(_0x3010a1){if(_0x3010a1){_0x51d8a6[_0x16eb('0x8f')][_0x16eb('0xaf')]({'id':0x0,'priority':0x0,'app':'agent','appdata':_0x3010a1[_0x16eb('0x2f')]+','+(_0x51d8a6['account']['waitForTheAssignedAgent']||0xa),'interval':_0x16eb('0xaa')});_0x51d8a6[_0x16eb('0xb0')]=!![];}return respondWithRpcPromise(_0x16eb('0xb1'),_0x16eb('0xb2'),_0x51d8a6);});}return respondWithRpcPromise(_0x16eb('0xb1'),_0x16eb('0xb2'),_0x51d8a6);})[_0x16eb('0x2c')](function(_0x207822){respondWithRpcPromise(_0x16eb('0xb3'),_0x16eb('0xb3'),{'event':_0x16eb('0x74'),'message':_0x207822},client9002);return _0x207822;})[_0x16eb('0x2c')](respondWithResult(_0x4c10ed,null))[_0x16eb('0x4c')](handleError(_0x4c10ed,null));};exports[_0x16eb('0xb4')]=function(_0x4848f3,_0x65c6b7,_0x473412){var _0x3eac0c,_0x310dd3,_0x509149;var _0x5bf716=[];var _0x6fb666=[];var _0x1341c7={};return db['CmContact'][_0x16eb('0xb5')]()[_0x16eb('0x2c')](function(_0x3e09e5){if(!_0x3e09e5){throw new db[(_0x16eb('0x7b'))][(_0x16eb('0x82'))](_0x16eb('0x7c'));}_0x6fb666=_[_0x16eb('0x7d')](_['keys'](_0x3e09e5),['createdAt',_0x16eb('0x7f')]);_0x5bf716=_['difference'](_[_0x16eb('0x34')](_0x3e09e5),[_0x16eb('0x7e'),_0x16eb('0x7f'),_0x16eb('0xb6'),'ListId']);if(_0x4848f3['body']['id']){delete _0x4848f3['body']['id'];}if(_[_0x16eb('0x6a')](_0x4848f3[_0x16eb('0x4d')][_0x16eb('0x81')])){throw _0x65c6b7[_0x16eb('0x21')](0x1f4)['send'](new db[(_0x16eb('0x7b'))]['ValidationError'](_0x16eb('0xb7')));}if(_[_0x16eb('0x6a')](_0x4848f3['body'][_0x16eb('0x4d')])||_0x4848f3['body']['body']===''){throw _0x65c6b7[_0x16eb('0x21')](0x1f4)[_0x16eb('0x30')](new db[(_0x16eb('0x7b'))][(_0x16eb('0x82'))](_0x16eb('0x83')));}if(_[_0x16eb('0x6a')](_0x4848f3[_0x16eb('0x4d')]['mapKeyOffline'])){throw _0x65c6b7[_0x16eb('0x21')](0x1f4)[_0x16eb('0x30')](new db[(_0x16eb('0x7b'))][(_0x16eb('0x82'))](_0x16eb('0xb8')+_0x5bf716));}if(!_[_0x16eb('0x86')](_0x5bf716,_0x4848f3['body'][_0x16eb('0xb9')])){throw _0x65c6b7['status'](0x1f4)[_0x16eb('0x30')](new db[(_0x16eb('0x7b'))][(_0x16eb('0x82'))](_0x16eb('0xba')+_0x5bf716));}_0x1341c7[_0x4848f3[_0x16eb('0x4d')][_0x16eb('0xb9')]]=_0x4848f3[_0x16eb('0x4d')][_0x16eb('0x81')];})[_0x16eb('0x2c')](function(){return db[_0x16eb('0x47')]['find']({'where':{'id':_0x4848f3[_0x16eb('0x4e')]['id']},'include':[{'model':db[_0x16eb('0x88')],'as':_0x16eb('0x89')}]});})[_0x16eb('0x2c')](handleEntityNotFound(_0x65c6b7,null))[_0x16eb('0x2c')](function(_0x405757){if(_0x405757&&_0x405757['List']){_0x310dd3=_0x405757;var _0x57a04f=_[_0x16eb('0xbb')](_0x4848f3[_0x16eb('0x4d')],{'firstName':_0x4848f3[_0x16eb('0x4d')][_0x16eb('0x81')],'phone':_0x4848f3[_0x16eb('0x4d')][_0x16eb('0x81')],'ListId':_0x405757['ListId']});_0x57a04f[_0x4848f3[_0x16eb('0x4d')][_0x16eb('0xb9')]]=_0x4848f3[_0x16eb('0x4d')]['from'];return db[_0x16eb('0x7a')][_0x16eb('0xbc')]({'where':_0x1341c7,'defaults':_0x57a04f});}})[_0x16eb('0xa5')](function(_0x129991){if(_0x129991){_0x509149=_0x129991;var _0x2bfc05=fs[_0x16eb('0xbd')](path[_0x16eb('0x65')](config['root'],_0x16eb('0xbe')),_0x16eb('0xbf'));var _0x1fd15b=ejs[_0x16eb('0xc0')](_0x2bfc05,{'body':_[_0x16eb('0xc1')](_0x4848f3['body']['body']),'bodyTitle':_0x310dd3[_0x16eb('0xc2')]});return db[_0x16eb('0xc3')][_0x16eb('0x52')]({'body':_0x1fd15b,'ContactId':_0x129991['id'],'ChatWebsiteId':_0x310dd3['id']});}})[_0x16eb('0x2c')](function(_0x28e46e){if(_0x28e46e){_0x3eac0c=_0x28e46e;return db[_0x16eb('0xc4')]['findOne']({'where':{'service':!![]},'include':[{'model':db[_0x16eb('0xc5')],'as':'Smtp','raw':!![]}]});}})[_0x16eb('0x2c')](function(_0x1137a4){if(_0x1137a4&&_0x1137a4[_0x16eb('0xc6')]&&_0x310dd3['forwardOfflineAddress']){var _0x149e81={'tls':{'rejectUnauthorized':![]}};if(_0x1137a4['Smtp'][_0x16eb('0xc7')]){_0x149e81[_0x16eb('0xc7')]=_0x1137a4[_0x16eb('0xc6')][_0x16eb('0xc7')];}else{_0x149e81[_0x16eb('0xc8')]=_0x1137a4[_0x16eb('0xc6')][_0x16eb('0xc8')];_0x149e81[_0x16eb('0xc9')]=_0x1137a4[_0x16eb('0xc6')][_0x16eb('0xc9')];_0x149e81[_0x16eb('0xca')]=_0x1137a4[_0x16eb('0xc6')]['secure'];}if(_0x1137a4[_0x16eb('0xc6')][_0x16eb('0xcb')]){_0x149e81[_0x16eb('0xcc')]={'user':_0x1137a4[_0x16eb('0xc6')][_0x16eb('0xcd')],'pass':_0x1137a4[_0x16eb('0xc6')][_0x16eb('0xce')]};}return respondWithRpcPromise('SendMail',_0x16eb('0xcf'),{'account':_0x149e81,'message':{'from':util[_0x16eb('0x98')](_0x16eb('0xd0'),_0x1137a4[_0x16eb('0x2f')],_0x1137a4['email']||_0x1137a4[_0x16eb('0xc6')]['user']),'to':_0x310dd3[_0x16eb('0xd1')],'subject':_0x310dd3[_0x16eb('0xd2')],'text':_0x3eac0c[_0x16eb('0x4d')]}},client9003)['then'](function(){return _0x3eac0c;})[_0x16eb('0x4c')](function(_0x2145d8){console[_0x16eb('0x1b')](_0x2145d8);});}})[_0x16eb('0x2c')](function(){if(_0x3eac0c){return _0x3eac0c;}})[_0x16eb('0x2c')](respondWithResult(_0x65c6b7,null))[_0x16eb('0x4c')](handleError(_0x65c6b7,null));};exports[_0x16eb('0xd3')]=function(_0x208945,_0x2122a9,_0x3ee4dd){return db[_0x16eb('0xa1')][_0x16eb('0x4f')]({'where':{'id':_0x208945[_0x16eb('0x4e')]['id']}})['then'](handleEntityNotFound(_0x2122a9,null))[_0x16eb('0x2c')](function(_0x114fc3){if(_0x114fc3){return _0x114fc3[_0x16eb('0xd3')](_0x208945[_0x16eb('0x4d')][_0x16eb('0x58')],_[_0x16eb('0xd4')](_0x208945[_0x16eb('0x4d')],[_0x16eb('0x58'),'id'])||{});}})[_0x16eb('0x2c')](respondWithResult(_0x2122a9,null))[_0x16eb('0x4c')](handleError(_0x2122a9,null));};exports[_0x16eb('0xd5')]=function(_0xa6e21,_0x4a917f,_0x1a31fa){var _0x35e58d={'raw':![],'where':{}};var _0x199c3f={};var _0x20026c={'count':0x0,'rows':[]};return db[_0x16eb('0x47')][_0x16eb('0xd6')]({'where':{'id':_0xa6e21[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x4a917f,null))[_0x16eb('0x2c')](function(_0x4a852c){if(_0x4a852c){_0x199c3f['model']=_[_0x16eb('0x34')](db['ChatInteraction']['rawAttributes']);_0x199c3f[_0x16eb('0x35')]=_['keys'](_0xa6e21[_0x16eb('0x35')]);_0x199c3f[_0x16eb('0x37')]=_[_0x16eb('0x38')](_0x199c3f['model'],_0x199c3f[_0x16eb('0x35')]);_0x35e58d['attributes']=_['intersection'](_0x199c3f[_0x16eb('0x33')],qs['fields'](_0xa6e21['query'][_0x16eb('0x39')]));_0x35e58d[_0x16eb('0x3b')]=_0x35e58d[_0x16eb('0x3b')][_0x16eb('0x3a')]?_0x35e58d[_0x16eb('0x3b')]:_0x199c3f[_0x16eb('0x33')];if(!_0xa6e21[_0x16eb('0x35')][_0x16eb('0x3c')](_0x16eb('0x3d'))){_0x35e58d[_0x16eb('0x26')]=qs['limit'](_0xa6e21['query'][_0x16eb('0x26')]);_0x35e58d[_0x16eb('0x25')]=qs[_0x16eb('0x25')](_0xa6e21[_0x16eb('0x35')][_0x16eb('0x25')]);}_0x35e58d[_0x16eb('0x3e')]=qs[_0x16eb('0x54')](_0xa6e21[_0x16eb('0x35')][_0x16eb('0x54')]);_0x35e58d[_0x16eb('0x3f')]=qs[_0x16eb('0x37')](_[_0x16eb('0x40')](_0xa6e21[_0x16eb('0x35')],_0x199c3f[_0x16eb('0x37')]));_0x35e58d[_0x16eb('0x3f')]['ChatWebsiteId']=_0x4a852c['id'];if(_0xa6e21[_0x16eb('0x35')]['filter']){_0x35e58d[_0x16eb('0x3f')]=_[_0x16eb('0x45')](_0x35e58d[_0x16eb('0x3f')],{'$or':_['map'](_0x35e58d[_0x16eb('0x3b')],function(_0x4faf47){var _0x4276f7={};_0x4276f7[_0x4faf47]={'$like':'%'+_0xa6e21[_0x16eb('0x35')][_0x16eb('0x44')]+'%'};return _0x4276f7;})});}_0x35e58d=_[_0x16eb('0x45')]({},_0x35e58d,_0xa6e21[_0x16eb('0x46')]);return db['ChatInteraction'][_0x16eb('0x24')]({'where':_0x35e58d[_0x16eb('0x3f')]})[_0x16eb('0x2c')](function(_0x351e54){_0x20026c[_0x16eb('0x24')]=_0x351e54;if(_0xa6e21[_0x16eb('0x35')]['includeAll']){_0x35e58d['include']=[{'model':db[_0x16eb('0x7a')],'as':_0x16eb('0xd7'),'required':![]},{'model':db['User'],'as':'Owner','attributes':[_0x16eb('0x2f'),_0x16eb('0xd8'),_0x16eb('0xd9')],'required':![]},{'model':db[_0x16eb('0xda')],'as':_0x16eb('0xdb'),'attributes':['id',_0x16eb('0x2f'),_0x16eb('0xdc')],'where':_0xa6e21['query'][_0x16eb('0xdd')]?{'id':_0xa6e21['query'][_0x16eb('0xdd')]}:undefined,'required':_0xa6e21[_0x16eb('0x35')][_0x16eb('0xdd')]?!![]:![]}];}return db['ChatInteraction'][_0x16eb('0x4a')](_0x35e58d);})[_0x16eb('0x2c')](function(_0x4d40e2){_0x20026c[_0x16eb('0x56')]=_0x4d40e2;return _0x20026c;});}})['then'](respondWithFilteredResult(_0x4a917f,_0x35e58d))['catch'](handleError(_0x4a917f,null));};function iftimePromise(_0x1ba33d,_0x5e92b9){return respondWithRpcPromise(_0x16eb('0xde'),'getSnippet',{'command':_0x5e92b9['timezone']?util[_0x16eb('0x98')]('iftime\x20%s,%s',_0x1ba33d[_0x16eb('0xdf')],_0x5e92b9['timezone']):util['format']('iftime\x20%s',_0x1ba33d['interval'])},client9002)[_0x16eb('0x2c')](function(_0x19fb41){var _0x2009b9=_0x19fb41&&_0x19fb41[_0x16eb('0xe0')](_0x16eb('0xe1'))>=0x0?!![]:![];logger[_0x16eb('0x1e')](_0x16eb('0xe2'),_0x5e92b9['id'],_0x1ba33d['id'],_0x1ba33d[_0x16eb('0xdf')],_0x2009b9?_0x16eb('0xe3'):'OFFLINE',_0x5e92b9[_0x16eb('0xe4')]?_0x5e92b9[_0x16eb('0xe4')]:'No\x20timezone');return _0x2009b9;})[_0x16eb('0x4c')](function(_0x3984d1){logger[_0x16eb('0x1b')](_0x16eb('0xe2'),_0x5e92b9['id'],_0x1ba33d['id'],_0x1ba33d['interval'],util[_0x16eb('0xe5')](_0x3984d1,{'showHidden':![],'depth':null}),_0x5e92b9['timezone']?_0x5e92b9['timezone']:_0x16eb('0xe6'));return![];});}exports[_0x16eb('0xe7')]=function(_0x37b467,_0xb9f642,_0x5d59a4){var _0x31a71f=0x0;var _0x291232=0x0;var _0xd1c641=![];var _0x2eba3f;var _0x59f276;return db['ChatWebsite'][_0x16eb('0x4f')]({'where':{'id':_0x37b467[_0x16eb('0x4e')]['id']},'include':[{'model':db['Interval'],'as':_0x16eb('0xe8'),'include':[{'model':db['Interval'],'as':'Intervals','attributes':['id',_0x16eb('0xdf')],'raw':!![]}]}]})[_0x16eb('0x2c')](handleEntityNotFound(_0xb9f642,null))['then'](function(_0x349dfa){if(_0x349dfa){_0x2eba3f=_0x349dfa;return _0x349dfa[_0x16eb('0xe9')]({'raw':!![]});}})[_0x16eb('0x2c')](function(_0x338ebe){if(_0x2eba3f){if(_0x338ebe){_0x59f276=_0x338ebe;}}return require(_0x16eb('0x67'))[_0x16eb('0x68')]();})[_0x16eb('0x2c')](function(_0x4c0682){if(_0x4c0682){_0x291232=_0x4c0682['virtual'];_0xd1c641=_0x4c0682[_0x16eb('0x69')];}})['then'](function(){return db[_0x16eb('0xa1')][_0x16eb('0x24')]({'where':{'closed':![]}});})[_0x16eb('0x2c')](function(_0xcb8e49){_0x31a71f=_0xcb8e49;if(_0x291232&&_0xcb8e49>_0x291232){return db[_0x16eb('0xea')][_0x16eb('0xd6')]({'where':{'id':0x1}})[_0x16eb('0x2c')](function(_0x1f87a3){if(_0x1f87a3){_0x1f87a3['increment'](_0x16eb('0xeb'));}});}})[_0x16eb('0x2c')](function(){if(_0x2eba3f[_0x16eb('0xe8')]&&_0x2eba3f['Interval'][_0x16eb('0xec')]){var _0x1999c2=[];for(var _0x3518bc=0x0;_0x3518bc<_0x2eba3f[_0x16eb('0xe8')]['Intervals'][_0x16eb('0x3a')];_0x3518bc++){var _0x42eabd=_0x2eba3f['Interval'][_0x16eb('0xec')][_0x3518bc][_0x16eb('0xa6')]({'plain':!![]});_0x1999c2['push'](iftimePromise(_0x42eabd,_0x2eba3f));}return BPromise[_0x16eb('0xed')](_0x1999c2)['then'](function(_0x56ef19){return _['some'](_0x56ef19);});}else{return!![];}})[_0x16eb('0x2c')](function(_0x2ed24b){var _0x4837c5=fs[_0x16eb('0xbd')](path[_0x16eb('0x65')](config['root'],_0x16eb('0xee')),_0x16eb('0xbf'));var _0xa0622c={'remote':_0x2eba3f[_0x16eb('0xef')],'query':querystring[_0x16eb('0x1a')](_[_0x16eb('0x45')](_0x2eba3f['get']({'plain':!![]}),{'customerIp':_0x37b467[_0x16eb('0xf0')]['x-forwarded-for']||_0x37b467['headers'][_0x16eb('0xf1')]||_0x37b467['connection']['remoteAddress']||_0x37b467['ip'],'referer':_0x37b467[_0x16eb('0xf0')][_0x16eb('0x96')],'openedInteractions':_0x31a71f,'maxInteractions':_0x291232,'virtual':_0xd1c641['virtual'],'online':_0x2ed24b,'custom':_0xd1c641}))['replace'](/'/g,'\x5c\x27')};_0xb9f642[_0x16eb('0x30')](ejs[_0x16eb('0xc0')](Mustache[_0x16eb('0xc0')](_0x4837c5,_0xa0622c),{'proactiveActions':_0x59f276,'alignment':_0x2eba3f[_0x16eb('0xf2')],'verticalAlignment':_0x2eba3f[_0x16eb('0xf3')]}));})[_0x16eb('0x4c')](handleError(_0xb9f642,null));};exports[_0x16eb('0xf4')]=function(_0xd04bab,_0x59565f,_0x5ee55c){return db[_0x16eb('0x47')]['findOne']({'where':{'id':_0xd04bab[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x59565f,null))[_0x16eb('0x2c')](function(_0x152c53){if(_0x152c53){return db[_0x16eb('0xf5')][_0x16eb('0xf6')](function(_0x3527c1){return db[_0x16eb('0x8c')][_0x16eb('0x2d')]({'where':{'ChatWebsiteId':_0xd04bab[_0x16eb('0x4e')]['id']},'transaction':_0x3527c1})[_0x16eb('0x2c')](function(_0x2de099){var _0x4077c9=_[_0x16eb('0x55')](_0xd04bab['body'],function(_0x1651bd){_0x1651bd[_0x16eb('0x50')]=_0xd04bab[_0x16eb('0x4e')]['id'];return _0x1651bd;});return db[_0x16eb('0x8c')][_0x16eb('0xf7')](_0x4077c9,{'transaction':_0x3527c1});});})[_0x16eb('0x2c')](function(){return db[_0x16eb('0x8c')]['findAndCountAll']({'where':{'ChatWebsiteId':_0xd04bab[_0x16eb('0x4e')]['id']},'order':_0x16eb('0x91')});});}})['then'](respondWithResult(_0x59565f,null))[_0x16eb('0x4c')](handleError(_0x59565f,null));};exports[_0x16eb('0xf8')]=function(_0x442593,_0x12775f,_0x194988){var _0xa4066d={};var _0x2ed5ad={};var _0x2e569a;var _0x4bfc63;return db[_0x16eb('0x47')][_0x16eb('0xd6')]({'where':{'id':_0x442593[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x12775f,null))['then'](function(_0x92efab){if(_0x92efab){_0x2e569a=_0x92efab;_0x2ed5ad[_0x16eb('0x33')]=_[_0x16eb('0x34')](db['ChatApplication'][_0x16eb('0x32')]);_0x2ed5ad[_0x16eb('0x35')]=_[_0x16eb('0x34')](_0x442593[_0x16eb('0x35')]);_0x2ed5ad['filters']=_['intersection'](_0x2ed5ad[_0x16eb('0x33')],_0x2ed5ad[_0x16eb('0x35')]);_0xa4066d[_0x16eb('0x3b')]=_['intersection'](_0x2ed5ad[_0x16eb('0x33')],qs[_0x16eb('0x39')](_0x442593['query']['fields']));_0xa4066d[_0x16eb('0x3b')]=_0xa4066d[_0x16eb('0x3b')][_0x16eb('0x3a')]?_0xa4066d[_0x16eb('0x3b')]:_0x2ed5ad[_0x16eb('0x33')];_0xa4066d[_0x16eb('0x3e')]=qs[_0x16eb('0x54')](_0x442593[_0x16eb('0x35')][_0x16eb('0x54')]);_0xa4066d[_0x16eb('0x3f')]=qs[_0x16eb('0x37')](_[_0x16eb('0x40')](_0x442593[_0x16eb('0x35')],_0x2ed5ad[_0x16eb('0x37')]));if(_0x442593[_0x16eb('0x35')][_0x16eb('0x44')]){_0xa4066d[_0x16eb('0x3f')]=_[_0x16eb('0x45')](_0xa4066d[_0x16eb('0x3f')],{'$or':_[_0x16eb('0x55')](_0xa4066d[_0x16eb('0x3b')],function(_0x2a170a){var _0x50387f={};_0x50387f[_0x2a170a]={'$like':'%'+_0x442593[_0x16eb('0x35')]['filter']+'%'};return _0x50387f;})});}_0xa4066d=_[_0x16eb('0x45')]({},_0xa4066d,_0x442593[_0x16eb('0x46')]);return _0x2e569a[_0x16eb('0xf8')](_0xa4066d);}})['then'](function(_0x338bf6){if(_0x338bf6){_0x4bfc63=_0x338bf6[_0x16eb('0x3a')];if(!_0x442593['query'][_0x16eb('0x3c')](_0x16eb('0x3d'))){_0xa4066d[_0x16eb('0x26')]=qs[_0x16eb('0x26')](_0x442593['query'][_0x16eb('0x26')]);_0xa4066d[_0x16eb('0x25')]=qs[_0x16eb('0x25')](_0x442593[_0x16eb('0x35')]['offset']);}return _0x2e569a[_0x16eb('0xf8')](_0xa4066d);}})[_0x16eb('0x2c')](function(_0x586682){if(_0x586682){return _0x586682?{'count':_0x4bfc63,'rows':_0x586682}:null;}})['then'](respondWithResult(_0x12775f,null))[_0x16eb('0x4c')](handleError(_0x12775f,null));};exports[_0x16eb('0xf9')]=function(_0x481952,_0x40f671,_0x33095e){return db['chatProactiveAction'][_0x16eb('0x4f')]({'where':{'id':_0x481952[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x40f671,null))[_0x16eb('0x2c')](function(_0x3d8c7b){if(_0x3d8c7b){return _0x3d8c7b[_0x16eb('0xf9')](_0x481952[_0x16eb('0x4d')][_0x16eb('0x58')],_[_0x16eb('0xd4')](_0x481952['body'],[_0x16eb('0x58'),'id'])||{});}})[_0x16eb('0x2c')](respondWithResult(_0x40f671,null))[_0x16eb('0x4c')](handleError(_0x40f671,null));};exports[_0x16eb('0xe9')]=function(_0x35f2b8,_0x3d2194,_0x5b8aee){var _0x154931={};var _0x161959={};var _0x2939da;var _0x1ca1dc;return db['ChatWebsite'][_0x16eb('0xd6')]({'where':{'id':_0x35f2b8['params']['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x3d2194,null))['then'](function(_0x39629a){if(_0x39629a){_0x2939da=_0x39629a;_0x161959['model']=_['keys'](db['ChatProactiveAction']['rawAttributes']);_0x161959[_0x16eb('0x35')]=_[_0x16eb('0x34')](_0x35f2b8[_0x16eb('0x35')]);_0x161959['filters']=_[_0x16eb('0x38')](_0x161959[_0x16eb('0x33')],_0x161959[_0x16eb('0x35')]);_0x154931[_0x16eb('0x3b')]=_[_0x16eb('0x38')](_0x161959[_0x16eb('0x33')],qs[_0x16eb('0x39')](_0x35f2b8[_0x16eb('0x35')][_0x16eb('0x39')]));_0x154931['attributes']=_0x154931[_0x16eb('0x3b')][_0x16eb('0x3a')]?_0x154931[_0x16eb('0x3b')]:_0x161959[_0x16eb('0x33')];_0x154931[_0x16eb('0x3e')]=qs[_0x16eb('0x54')](_0x35f2b8[_0x16eb('0x35')][_0x16eb('0x54')]);_0x154931[_0x16eb('0x3f')]=qs[_0x16eb('0x37')](_['pick'](_0x35f2b8[_0x16eb('0x35')],_0x161959[_0x16eb('0x37')]));if(_0x35f2b8[_0x16eb('0x35')]['filter']){_0x154931[_0x16eb('0x3f')]=_['merge'](_0x154931[_0x16eb('0x3f')],{'$or':_[_0x16eb('0x55')](_0x154931[_0x16eb('0x3b')],function(_0x40f242){var _0x599d8e={};_0x599d8e[_0x40f242]={'$like':'%'+_0x35f2b8[_0x16eb('0x35')][_0x16eb('0x44')]+'%'};return _0x599d8e;})});}_0x154931=_[_0x16eb('0x45')]({},_0x154931,_0x35f2b8[_0x16eb('0x46')]);return _0x2939da[_0x16eb('0xe9')](_0x154931);}})[_0x16eb('0x2c')](function(_0x1441cf){if(_0x1441cf){_0x1ca1dc=_0x1441cf[_0x16eb('0x3a')];if(!_0x35f2b8[_0x16eb('0x35')][_0x16eb('0x3c')](_0x16eb('0x3d'))){_0x154931['limit']=qs['limit'](_0x35f2b8[_0x16eb('0x35')]['limit']);_0x154931[_0x16eb('0x25')]=qs[_0x16eb('0x25')](_0x35f2b8[_0x16eb('0x35')][_0x16eb('0x25')]);}return _0x2939da[_0x16eb('0xe9')](_0x154931);}})[_0x16eb('0x2c')](function(_0xf15ccf){if(_0xf15ccf){return _0xf15ccf?{'count':_0x1ca1dc,'rows':_0xf15ccf}:null;}})[_0x16eb('0x2c')](respondWithResult(_0x3d2194,null))[_0x16eb('0x4c')](handleError(_0x3d2194,null));};exports['getFields']=function(_0x58976c,_0x518bcc,_0x20d0b8){var _0xc255de=_0x58976c[_0x16eb('0x35')]['online']===_0x16eb('0xfa')?'offlineForm':'onlineForm';return db[_0x16eb('0x47')][_0x16eb('0x4f')]({'attributes':['id',_0xc255de],'where':{'id':_0x58976c[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x518bcc,null))['then'](function(_0x4d4689){if(_0x4d4689){var _0x2f6218=_0x4d4689[_0xc255de];var _0x5350c3=_0x2f6218&&_0x2f6218['items']?_0x2f6218[_0x16eb('0xfb')]:[];_0x518bcc['send']({'fromKey':_[_0x16eb('0x6a')](_0x2f6218[_0x16eb('0xfc')])?undefined:_0x2f6218[_0x16eb('0xfc')],'count':_0x5350c3[_0x16eb('0x3a')],'rows':_0x5350c3});}})[_0x16eb('0x4c')](handleError(_0x518bcc,null));};exports[_0x16eb('0xfd')]=function(_0x519053,_0x22c83c,_0x5b6838){var _0x1908a={'raw':!![],'where':{}};var _0x390b79={};var _0x36ad1c={'count':0x0,'rows':[]};return db[_0x16eb('0x47')]['findOne']({'where':{'id':_0x519053[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x22c83c,null))['then'](function(_0x138b3c){if(_0x138b3c){_0x390b79[_0x16eb('0x33')]=_[_0x16eb('0x34')](db[_0x16eb('0xc3')][_0x16eb('0x32')]);_0x390b79['query']=_[_0x16eb('0x34')](_0x519053[_0x16eb('0x35')]);_0x390b79[_0x16eb('0x37')]=_[_0x16eb('0x38')](_0x390b79['model'],_0x390b79['query']);_0x1908a['attributes']=_[_0x16eb('0x38')](_0x390b79[_0x16eb('0x33')],qs[_0x16eb('0x39')](_0x519053['query'][_0x16eb('0x39')]));_0x1908a[_0x16eb('0x3b')]=_0x1908a[_0x16eb('0x3b')][_0x16eb('0x3a')]?_0x1908a[_0x16eb('0x3b')]:_0x390b79[_0x16eb('0x33')];if(!_0x519053[_0x16eb('0x35')][_0x16eb('0x3c')](_0x16eb('0x3d'))){_0x1908a[_0x16eb('0x26')]=qs[_0x16eb('0x26')](_0x519053[_0x16eb('0x35')][_0x16eb('0x26')]);_0x1908a[_0x16eb('0x25')]=qs[_0x16eb('0x25')](_0x519053[_0x16eb('0x35')][_0x16eb('0x25')]);}_0x1908a['order']=qs[_0x16eb('0x54')](_0x519053[_0x16eb('0x35')][_0x16eb('0x54')]);_0x1908a[_0x16eb('0x3f')]=qs[_0x16eb('0x37')](_['pick'](_0x519053['query'],_0x390b79[_0x16eb('0x37')]));_0x1908a[_0x16eb('0x3f')]['ChatWebsiteId']=_0x138b3c['id'];if(_0x519053[_0x16eb('0x35')][_0x16eb('0x44')]){_0x1908a[_0x16eb('0x3f')]=_[_0x16eb('0x45')](_0x1908a[_0x16eb('0x3f')],{'$or':_[_0x16eb('0x55')](_0x1908a[_0x16eb('0x3b')],function(_0x312989){var _0x10700a={};_0x10700a[_0x312989]={'$like':'%'+_0x519053[_0x16eb('0x35')][_0x16eb('0x44')]+'%'};return _0x10700a;})});}_0x1908a=_[_0x16eb('0x45')]({},_0x1908a,_0x519053[_0x16eb('0x46')]);return db[_0x16eb('0xc3')][_0x16eb('0x24')]({'where':_0x1908a[_0x16eb('0x3f')]})[_0x16eb('0x2c')](function(_0x318b0f){_0x36ad1c['count']=_0x318b0f;if(_0x519053[_0x16eb('0x35')][_0x16eb('0x48')]){_0x1908a[_0x16eb('0x49')]=[{'all':!![]}];}return db[_0x16eb('0xc3')][_0x16eb('0x4a')](_0x1908a);})[_0x16eb('0x2c')](function(_0x27c126){_0x36ad1c[_0x16eb('0x56')]=_0x27c126;return _0x36ad1c;});}})[_0x16eb('0x2c')](respondWithFilteredResult(_0x22c83c,_0x1908a))[_0x16eb('0x4c')](handleError(_0x22c83c,null));};exports[_0x16eb('0xfe')]=function(_0x4d7b6f,_0x181c8e,_0x3f3d25){return db['ChatWebsite']['find']({'where':{'id':_0x4d7b6f[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x181c8e,null))[_0x16eb('0x2c')](function(_0x1dc94a){if(_0x1dc94a){return _0x1dc94a[_0x16eb('0xfe')](_0x4d7b6f[_0x16eb('0x4d')][_0x16eb('0x58')],_['omit'](_0x4d7b6f['body'],[_0x16eb('0x58'),'id'])||{})['spread'](function(_0x30b55){for(var _0x55364f=0x0;_0x55364f<_0x4d7b6f[_0x16eb('0x4d')][_0x16eb('0x58')][_0x16eb('0x3a')];_0x55364f+=0x1){socket[_0x16eb('0xff')](_0x16eb('0x100'),{'UserId':_0x4d7b6f[_0x16eb('0x4d')][_0x16eb('0x58')][_0x55364f],'ChatWebsiteId':_0x4d7b6f[_0x16eb('0x4e')]['id']});}return _0x30b55;});}})[_0x16eb('0x2c')](respondWithResult(_0x181c8e,null))[_0x16eb('0x4c')](handleError(_0x181c8e,null));};exports['removeAgents']=function(_0x105d1b,_0x131551,_0x469574){var _0x599533;return db[_0x16eb('0x47')][_0x16eb('0x4f')]({'where':{'id':_0x105d1b[_0x16eb('0x4e')]['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0x131551,null))['then'](function(_0x51e202){if(_0x51e202){return _0x51e202[_0x16eb('0x101')](_0x105d1b[_0x16eb('0x35')][_0x16eb('0x58')])['then'](function(_0x4fa976){if(_[_0x16eb('0x102')](_0x105d1b[_0x16eb('0x35')][_0x16eb('0x58')])){for(var _0x56733d=0x0;_0x56733d<_0x105d1b[_0x16eb('0x35')][_0x16eb('0x58')][_0x16eb('0x3a')];_0x56733d+=0x1){socket['emit']('userChatWebsite:remove',{'UserId':_0x105d1b[_0x16eb('0x35')][_0x16eb('0x58')][_0x56733d],'ChatWebsiteId':_0x105d1b[_0x16eb('0x4e')]['id']});}}else{socket[_0x16eb('0xff')](_0x16eb('0x103'),{'UserId':_0x105d1b[_0x16eb('0x35')][_0x16eb('0x58')],'ChatWebsiteId':_0x105d1b[_0x16eb('0x4e')]['id']});}});}})['then'](respondWithStatusCode(_0x131551,null))[_0x16eb('0x4c')](handleError(_0x131551,null));};exports[_0x16eb('0x104')]=function(_0x1c9248,_0xc561e9,_0x777cbf){var _0x5565b0={};var _0x46c443={};var _0x4c5c0a;var _0x11b48a;return db[_0x16eb('0x47')][_0x16eb('0xd6')]({'where':{'id':_0x1c9248['params']['id']}})[_0x16eb('0x2c')](handleEntityNotFound(_0xc561e9,null))[_0x16eb('0x2c')](function(_0x1689c5){if(_0x1689c5){_0x4c5c0a=_0x1689c5;_0x46c443[_0x16eb('0x33')]=_[_0x16eb('0x34')](db[_0x16eb('0xae')][_0x16eb('0x32')]);_0x46c443['query']=_[_0x16eb('0x34')](_0x1c9248[_0x16eb('0x35')]);_0x46c443[_0x16eb('0x37')]=_[_0x16eb('0x38')](_0x46c443['model'],_0x46c443[_0x16eb('0x35')]);_0x5565b0[_0x16eb('0x3b')]=_[_0x16eb('0x38')](_0x46c443[_0x16eb('0x33')],qs[_0x16eb('0x39')](_0x1c9248[_0x16eb('0x35')][_0x16eb('0x39')]));_0x5565b0[_0x16eb('0x3b')]=_0x5565b0[_0x16eb('0x3b')][_0x16eb('0x3a')]?_0x5565b0['attributes']:_0x46c443[_0x16eb('0x33')];_0x5565b0[_0x16eb('0x3e')]=qs[_0x16eb('0x54')](_0x1c9248[_0x16eb('0x35')][_0x16eb('0x54')]);_0x5565b0[_0x16eb('0x3f')]=qs[_0x16eb('0x37')](_['pick'](_0x1c9248['query'],_0x46c443[_0x16eb('0x37')]));if(_0x1c9248[_0x16eb('0x35')]['filter']){_0x5565b0['where']=_[_0x16eb('0x45')](_0x5565b0['where'],{'$or':_['map'](_0x5565b0[_0x16eb('0x3b')],function(_0x5147e4){var _0x3253c4={};_0x3253c4[_0x5147e4]={'$like':'%'+_0x1c9248[_0x16eb('0x35')][_0x16eb('0x44')]+'%'};return _0x3253c4;})});}_0x5565b0=_[_0x16eb('0x45')]({},_0x5565b0,_0x1c9248['options']);return _0x4c5c0a[_0x16eb('0x104')](_0x5565b0);}})[_0x16eb('0x2c')](function(_0x53724c){if(_0x53724c){_0x11b48a=_0x53724c['length'];if(!_0x1c9248[_0x16eb('0x35')][_0x16eb('0x3c')](_0x16eb('0x3d'))){_0x5565b0[_0x16eb('0x26')]=qs[_0x16eb('0x26')](_0x1c9248[_0x16eb('0x35')]['limit']);_0x5565b0['offset']=qs['offset'](_0x1c9248[_0x16eb('0x35')][_0x16eb('0x25')]);}return _0x4c5c0a[_0x16eb('0x104')](_0x5565b0);}})[_0x16eb('0x2c')](function(_0x5f26b3){if(_0x5f26b3){return _0x5f26b3?{'count':_0x11b48a,'rows':_0x5f26b3}:null;}})[_0x16eb('0x2c')](respondWithResult(_0xc561e9,null))[_0x16eb('0x4c')](handleError(_0xc561e9,null));};
\ No newline at end of file
+var _0x36e7=['querystring','papaparse','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','./chatWebsite.socket','register','jayson/promise','client','http','request','then','info','ChatWebsite,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','sendStatus','end','status','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','stack','name','send','ChatWebsite','keys','query','dateStart','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','dateEnd','add','day','where','map','filter','options','count','includeAll','include','findAll','rows','show','length','merge','find','create','body','params','describe','addDisposition','ChatWebsiteId','Disposition','getDispositions','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','findOne','rawAttributes','removeAnswers','addLogo','sitepic','file','filename','addAvatar','agentAvatar','addCustomerAvatar','customerAvatar','addSystemAvatar','systemAvatar','join','root','server/files/images/logos/default_logo.png','../../config/license/util','getLicense','custom','isNil','existsSync','server/files/images/logos/','download','getAvatar','server/files/images/avatars/default_avatar.png','server/files/images/avatars/','getCustomerAvatar','server/files/images/avatars/customer_avatar.png','showCustomerAvatar','getSystemAvatar','server/files/images/avatars/system_avatar.png','notify','user-agent-parser','setUA','headers','user-agent','getResult','chat','Sequelize','ValidationError','no\x20available\x20attributes','difference','createdAt','ListId','from','from\x20is\x20mandatory','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','List','Contacts','updatedAt','DESC','ChatApplication','Applications','account','list','orderBy','applications','asc','defaults','contact','lastName','browser','version','%s\x20%s','unknown','device','format','vendor','type','threadId','externalUrl','ChatInteraction','ContactId','interaction','spread','firstName','get','created','autoclose','push','unmanaged','*,*,*,*','ChatMessage','AttachmentId','UserId','User','agent','waitForTheAssignedAgent','forcedOwnership','Start','startRouting','EventManager','offline','CmContact','CompanyId','mapKeyOffline','mapKeyOffline\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','mapKeyOffline\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','findOrCreate','readFileSync','server/files/templates/chatOfflineMessage.ejs','render','toPairs','MailAccount','MailServerOut','Smtp','forwardOfflineAddress','service','host','port','secure','authentication','user','pass','SendMail','sendMail','\x22%s\x22\x20<%s>','email','offlineMessageSubject','addInteraction','omit','getInteractions','Contact','Owner','fullname','internal','Tag','color','tag','Command','getSnippet','timezone','iftime\x20%s,%s','interval','indexOf','true','[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)','ONLINE','OFFLINE','Interval','Intervals','virtual','License','increment','chatLicenseExceeded','all','some','server/files/chat/iframe.js','utf8','x-forwarded-for','x-real-ip','remoteAddress','replace','sequelize','transaction','bulkCreate','findAndCountAll','getApplications','addProactiveActions','chatProactiveAction','getProactiveActions','ChatProactiveAction','getFields','false','offlineForm','onlineForm','items','fromKey','getOfflineMessages','ChatOfflineMessage','addAgents','emit','userChatWebsite:save','removeAgents','isArray','userChatWebsite:remove','getAgents','fast-json-patch','request-promise','moment','bluebird','mustache','to-csv','ejs','lodash','squel','crypto','jsforce'];(function(_0x5d1d99,_0x10ca23){var _0x2957ec=function(_0x4f4ba){while(--_0x4f4ba){_0x5d1d99['push'](_0x5d1d99['shift']());}};_0x2957ec(++_0x10ca23);}(_0x36e7,0x108));var _0x736e=function(_0x3ddee0,_0x4611c0){_0x3ddee0=_0x3ddee0-0x0;var _0x948140=_0x36e7[_0x3ddee0];return _0x948140;};'use strict';var jsonpatch=require(_0x736e('0x0'));var rp=require(_0x736e('0x1'));var moment=require(_0x736e('0x2'));var BPromise=require(_0x736e('0x3'));var Mustache=require(_0x736e('0x4'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x736e('0x5'));var ejs=require(_0x736e('0x6'));var fs=require('fs');var _=require(_0x736e('0x7'));var squel=require(_0x736e('0x8'));var crypto=require(_0x736e('0x9'));var jsforce=require(_0x736e('0xa'));var deskjs=require('desk.js');var toCsv=require(_0x736e('0x5'));var querystring=require(_0x736e('0xb'));var Papa=require(_0x736e('0xc'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x736e('0xd'));var utils=require(_0x736e('0xe'));var config=require(_0x736e('0xf'));var db=require(_0x736e('0x10'))['db'];var socket=require(_0x736e('0x11'))({'host':'localhost','port':0x18eb});require(_0x736e('0x12'))[_0x736e('0x13')](socket);var jayson=require(_0x736e('0x14'));var client=jayson[_0x736e('0x15')][_0x736e('0x16')]({'port':0x232c});var client9002=jayson[_0x736e('0x15')]['http']({'port':0x232a});var client9003=jayson[_0x736e('0x15')]['http']({'port':0x232b});function respondWithRpcPromise(_0x22ad94,_0x37e053,_0x2b3d45,_0x5d08c9){return new BPromise(function(_0x28621b,_0x23de36){var _0x4ad4f7=_0x5d08c9||client;return _0x4ad4f7[_0x736e('0x17')](_0x22ad94,_0x2b3d45)[_0x736e('0x18')](function(_0x4849a3){logger[_0x736e('0x19')](_0x736e('0x1a'),_0x37e053,_0x736e('0x1b'));logger[_0x736e('0x1c')]('ChatWebsite,\x20%s,\x20%s,\x20%s',_0x37e053,_0x736e('0x1b'),JSON[_0x736e('0x1d')](_0x4849a3));if(_0x4849a3['error']){if(_0x4849a3[_0x736e('0x1e')]['code']===0x1f4){logger['error'](_0x736e('0x1a'),_0x37e053,_0x4849a3[_0x736e('0x1e')][_0x736e('0x1f')]);return _0x23de36(_0x4849a3[_0x736e('0x1e')][_0x736e('0x1f')]);}logger[_0x736e('0x1e')](_0x736e('0x1a'),_0x37e053,_0x4849a3[_0x736e('0x1e')][_0x736e('0x1f')]);return _0x28621b(_0x4849a3[_0x736e('0x1e')][_0x736e('0x1f')]);}else{logger[_0x736e('0x19')](_0x736e('0x1a'),_0x37e053,'request\x20sent');_0x28621b(_0x4849a3[_0x736e('0x20')]['message']);}})[_0x736e('0x21')](function(_0x54560c){logger[_0x736e('0x1e')](_0x736e('0x1a'),_0x37e053,_0x54560c);_0x23de36(_0x54560c);});});}function respondWithStatusCode(_0x16e6fa,_0x257a3b){_0x257a3b=_0x257a3b||0xcc;return function(_0x3647f6){if(_0x3647f6){return _0x16e6fa[_0x736e('0x22')](_0x257a3b);}return _0x16e6fa['status'](_0x257a3b)[_0x736e('0x23')]();};}function respondWithResult(_0x5ae796,_0x3211f4){_0x3211f4=_0x3211f4||0xc8;return function(_0x1c36c0){if(_0x1c36c0){return _0x5ae796[_0x736e('0x24')](_0x3211f4)[_0x736e('0x25')](_0x1c36c0);}};}function respondWithFilteredResult(_0x3060bb,_0x37741b){return function(_0x533717){if(_0x533717){var _0x2af4c0=_0x533717['count'],_0x27e48c=_0x37741b[_0x736e('0x26')],_0x407714=_0x37741b['offset']+_0x37741b[_0x736e('0x27')],_0x538f8c;if(_0x407714>=_0x2af4c0){_0x407714=_0x2af4c0;_0x538f8c=0xc8;}else{_0x538f8c=0xce;}_0x3060bb[_0x736e('0x24')](_0x538f8c);return _0x3060bb[_0x736e('0x28')](_0x736e('0x29'),_0x27e48c+'-'+_0x407714+'/'+_0x2af4c0)[_0x736e('0x25')](_0x533717);}return null;};}function patchUpdates(_0x393b1c){return function(_0x5080d1){try{jsonpatch[_0x736e('0x2a')](_0x5080d1,_0x393b1c,!![]);}catch(_0xe4f051){return BPromise[_0x736e('0x2b')](_0xe4f051);}return _0x5080d1[_0x736e('0x2c')]();};}function saveUpdates(_0x14ce2d,_0x3acb51){return function(_0x545840){if(_0x545840){return _0x545840[_0x736e('0x2d')](_0x14ce2d)[_0x736e('0x18')](function(_0x1da086){return _0x1da086;});}return null;};}function removeEntity(_0x3220b2,_0x258ed5){return function(_0x23a25e){if(_0x23a25e){return _0x23a25e[_0x736e('0x2e')]()[_0x736e('0x18')](function(){_0x3220b2['status'](0xcc)[_0x736e('0x23')]();});}};}function handleEntityNotFound(_0x2d11ff,_0x59f3b9){return function(_0x14c9c6){if(!_0x14c9c6){_0x2d11ff[_0x736e('0x22')](0x194);}return _0x14c9c6;};}function handleError(_0x1cac89,_0x4e148f){_0x4e148f=_0x4e148f||0x1f4;return function(_0x31a729){logger[_0x736e('0x1e')](_0x31a729[_0x736e('0x2f')]);if(_0x31a729[_0x736e('0x30')]){delete _0x31a729[_0x736e('0x30')];}_0x1cac89['status'](_0x4e148f)[_0x736e('0x31')](_0x31a729);};}exports['index']=function(_0x3eec33,_0x316ba8){var _0x3dbd45={},_0x23297a={},_0xb71fd={'count':0x0,'rows':[]};var _0x451317=db[_0x736e('0x32')]['rawAttributes'];_0x23297a['model']=_[_0x736e('0x33')](_0x451317);var _0x91dfbc={'dateStart':_0x3eec33[_0x736e('0x34')][_0x736e('0x35')],'dateEnd':_0x3eec33[_0x736e('0x34')]['dateEnd']};delete _0x3eec33['query'][_0x736e('0x35')];delete _0x3eec33[_0x736e('0x34')]['dateEnd'];_0x23297a['query']=_[_0x736e('0x33')](_0x3eec33[_0x736e('0x34')]);_0x23297a[_0x736e('0x36')]=_[_0x736e('0x37')](_0x23297a[_0x736e('0x38')],_0x23297a[_0x736e('0x34')]);_0x3dbd45[_0x736e('0x39')]=_[_0x736e('0x37')](_0x23297a[_0x736e('0x38')],qs[_0x736e('0x3a')](_0x3eec33[_0x736e('0x34')]['fields']));_0x3dbd45[_0x736e('0x39')]=_0x3dbd45['attributes']['length']?_0x3dbd45[_0x736e('0x39')]:_0x23297a[_0x736e('0x38')];if(!_0x3eec33[_0x736e('0x34')][_0x736e('0x3b')](_0x736e('0x3c'))){_0x3dbd45[_0x736e('0x27')]=qs[_0x736e('0x27')](_0x3eec33[_0x736e('0x34')]['limit']);_0x3dbd45[_0x736e('0x26')]=qs['offset'](_0x3eec33[_0x736e('0x34')][_0x736e('0x26')]);}_0x3dbd45[_0x736e('0x3d')]=qs[_0x736e('0x3e')](_0x3eec33[_0x736e('0x34')]['sort']);_0x3dbd45['where']=qs['filters'](_[_0x736e('0x3f')](_0x3eec33[_0x736e('0x34')],_0x23297a[_0x736e('0x36')]));if(_0x91dfbc[_0x736e('0x35')]){if(_0x91dfbc[_0x736e('0x40')]){_0x91dfbc[_0x736e('0x40')]=moment(_0x91dfbc['dateEnd'])[_0x736e('0x41')](0x1,_0x736e('0x42'));}else{_0x91dfbc[_0x736e('0x40')]=moment(_0x91dfbc[_0x736e('0x35')])[_0x736e('0x41')](0x1,_0x736e('0x42'));}_['merge'](_0x3dbd45['where'],{'createdAt':{'$gte':_0x91dfbc[_0x736e('0x35')],'$lte':_0x91dfbc[_0x736e('0x40')]}});}if(_0x3eec33['query']['filter']){_0x3dbd45[_0x736e('0x43')]=_['merge'](_0x3dbd45[_0x736e('0x43')],{'$or':_[_0x736e('0x44')](_0x3dbd45['attributes'],function(_0x5d70bd){var _0x1a0d90={};_0x1a0d90[_0x5d70bd]={'$like':'%'+_0x3eec33[_0x736e('0x34')][_0x736e('0x45')]+'%'};return _0x1a0d90;})});}_0x3dbd45=_['merge']({},_0x3dbd45,_0x3eec33[_0x736e('0x46')]);var _0x395b37={'where':_0x3dbd45[_0x736e('0x43')]};return db[_0x736e('0x32')][_0x736e('0x47')](_0x395b37)[_0x736e('0x18')](function(_0x14b46e){_0xb71fd[_0x736e('0x47')]=_0x14b46e;if(_0x3eec33[_0x736e('0x34')][_0x736e('0x48')]){_0x3dbd45[_0x736e('0x49')]=[{'all':!![]}];}return db[_0x736e('0x32')][_0x736e('0x4a')](_0x3dbd45);})[_0x736e('0x18')](function(_0x285079){_0xb71fd[_0x736e('0x4b')]=_0x285079;return _0xb71fd;})[_0x736e('0x18')](respondWithFilteredResult(_0x316ba8,_0x3dbd45))[_0x736e('0x21')](handleError(_0x316ba8,null));};exports[_0x736e('0x4c')]=function(_0x23024f,_0x29c963){var _0x2a01df={'raw':![],'where':{'id':_0x23024f['params']['id']}},_0xdbd065={};_0xdbd065[_0x736e('0x38')]=_[_0x736e('0x33')](db[_0x736e('0x32')]['rawAttributes']);_0xdbd065['query']=_['keys'](_0x23024f['query']);_0xdbd065[_0x736e('0x36')]=_['intersection'](_0xdbd065[_0x736e('0x38')],_0xdbd065[_0x736e('0x34')]);_0x2a01df[_0x736e('0x39')]=_[_0x736e('0x37')](_0xdbd065[_0x736e('0x38')],qs[_0x736e('0x3a')](_0x23024f[_0x736e('0x34')][_0x736e('0x3a')]));_0x2a01df[_0x736e('0x39')]=_0x2a01df['attributes'][_0x736e('0x4d')]?_0x2a01df[_0x736e('0x39')]:_0xdbd065[_0x736e('0x38')];if(_0x23024f[_0x736e('0x34')][_0x736e('0x48')]){_0x2a01df[_0x736e('0x49')]=[{'all':!![]}];}_0x2a01df=_[_0x736e('0x4e')]({},_0x2a01df,_0x23024f[_0x736e('0x46')]);return db[_0x736e('0x32')][_0x736e('0x4f')](_0x2a01df)[_0x736e('0x18')](handleEntityNotFound(_0x29c963,null))[_0x736e('0x18')](respondWithResult(_0x29c963,null))[_0x736e('0x21')](handleError(_0x29c963,null));};exports[_0x736e('0x50')]=function(_0x48c4ed,_0x1d0211){return db['ChatWebsite']['create'](_0x48c4ed['body'],{})[_0x736e('0x18')](respondWithResult(_0x1d0211,0xc9))[_0x736e('0x21')](handleError(_0x1d0211,null));};exports['update']=function(_0x3b633f,_0x400e43){if(_0x3b633f[_0x736e('0x51')]['id']){delete _0x3b633f[_0x736e('0x51')]['id'];}return db[_0x736e('0x32')][_0x736e('0x4f')]({'where':{'id':_0x3b633f[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x400e43,null))[_0x736e('0x18')](saveUpdates(_0x3b633f[_0x736e('0x51')],null))[_0x736e('0x18')](respondWithResult(_0x400e43,null))['catch'](handleError(_0x400e43,null));};exports['destroy']=function(_0x56a2cc,_0xeb175f){return db['ChatWebsite']['find']({'where':{'id':_0x56a2cc[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0xeb175f,null))[_0x736e('0x18')](removeEntity(_0xeb175f,null))['catch'](handleError(_0xeb175f,null));};exports[_0x736e('0x53')]=function(_0x1bbb2c,_0x4c51aa){return db['ChatWebsite'][_0x736e('0x53')]()[_0x736e('0x18')](respondWithResult(_0x4c51aa,null))[_0x736e('0x21')](handleError(_0x4c51aa,null));};exports[_0x736e('0x54')]=function(_0x512702,_0xd18586,_0x4a0a9c){if(_0x512702[_0x736e('0x51')]['id']){delete _0x512702[_0x736e('0x51')]['id'];}return db[_0x736e('0x32')][_0x736e('0x4f')]({'where':{'id':_0x512702[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0xd18586,null))[_0x736e('0x18')](function(_0x492700){if(_0x492700){_0x512702[_0x736e('0x51')][_0x736e('0x55')]=_0x492700['id'];return db[_0x736e('0x56')][_0x736e('0x50')](_0x512702['body']);}})[_0x736e('0x18')](respondWithResult(_0xd18586,null))[_0x736e('0x21')](handleError(_0xd18586,null));};exports[_0x736e('0x57')]=function(_0x1ff631,_0x2783cc,_0x2a390a){var _0x495712={'raw':![],'where':{}};var _0x294e9d={};var _0x3a4f37={'count':0x0,'rows':[]};return db[_0x736e('0x32')]['findOne']({'where':{'id':_0x1ff631[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x2783cc,null))[_0x736e('0x18')](function(_0x27c005){if(_0x27c005){_0x294e9d[_0x736e('0x38')]=_['keys'](db[_0x736e('0x56')]['rawAttributes']);_0x294e9d[_0x736e('0x34')]=_['keys'](_0x1ff631[_0x736e('0x34')]);_0x294e9d[_0x736e('0x36')]=_['intersection'](_0x294e9d['model'],_0x294e9d['query']);_0x495712[_0x736e('0x39')]=_[_0x736e('0x37')](_0x294e9d['model'],qs['fields'](_0x1ff631['query'][_0x736e('0x3a')]));_0x495712[_0x736e('0x39')]=_0x495712['attributes'][_0x736e('0x4d')]?_0x495712[_0x736e('0x39')]:_0x294e9d[_0x736e('0x38')];if(!_0x1ff631[_0x736e('0x34')][_0x736e('0x3b')]('nolimit')){_0x495712['limit']=qs[_0x736e('0x27')](_0x1ff631[_0x736e('0x34')][_0x736e('0x27')]);_0x495712[_0x736e('0x26')]=qs[_0x736e('0x26')](_0x1ff631[_0x736e('0x34')]['offset']);}_0x495712[_0x736e('0x3d')]=qs[_0x736e('0x3e')](_0x1ff631['query'][_0x736e('0x3e')]);_0x495712['where']=qs['filters'](_[_0x736e('0x3f')](_0x1ff631[_0x736e('0x34')],_0x294e9d[_0x736e('0x36')]));_0x495712[_0x736e('0x43')][_0x736e('0x55')]=_0x27c005['id'];if(_0x1ff631['query']['filter']){_0x495712['where']=_[_0x736e('0x4e')](_0x495712[_0x736e('0x43')],{'$or':_[_0x736e('0x44')](_0x495712[_0x736e('0x39')],function(_0x2ec637){var _0x3be98e={};_0x3be98e[_0x2ec637]={'$like':'%'+_0x1ff631['query'][_0x736e('0x45')]+'%'};return _0x3be98e;})});}_0x495712=_[_0x736e('0x4e')]({},_0x495712,_0x1ff631[_0x736e('0x46')]);return db[_0x736e('0x56')]['count']({'where':_0x495712[_0x736e('0x43')]})[_0x736e('0x18')](function(_0x5bea36){_0x3a4f37[_0x736e('0x47')]=_0x5bea36;if(_0x1ff631[_0x736e('0x34')][_0x736e('0x48')]){_0x495712['include']=[{'all':!![]}];}return db[_0x736e('0x56')][_0x736e('0x4a')](_0x495712);})[_0x736e('0x18')](function(_0x2a2a26){_0x3a4f37[_0x736e('0x4b')]=_0x2a2a26;return _0x3a4f37;});}})[_0x736e('0x18')](respondWithFilteredResult(_0x2783cc,_0x495712))[_0x736e('0x21')](handleError(_0x2783cc,null));};exports[_0x736e('0x58')]=function(_0x26c2df,_0x50de7f,_0x307cf1){var _0x34a613;return db[_0x736e('0x32')][_0x736e('0x4f')]({'where':{'id':_0x26c2df[_0x736e('0x52')]['id']}})['then'](handleEntityNotFound(_0x50de7f,null))[_0x736e('0x18')](function(_0x1d64ff){if(_0x1d64ff){return _0x1d64ff[_0x736e('0x58')](_0x26c2df[_0x736e('0x34')][_0x736e('0x59')]);}})[_0x736e('0x18')](respondWithStatusCode(_0x50de7f,null))[_0x736e('0x21')](handleError(_0x50de7f,null));};exports[_0x736e('0x5a')]=function(_0x1f2e58,_0x365d58,_0x29ef2f){if(_0x1f2e58[_0x736e('0x51')]['id']){delete _0x1f2e58[_0x736e('0x51')]['id'];}return db[_0x736e('0x32')][_0x736e('0x4f')]({'where':{'id':_0x1f2e58[_0x736e('0x52')]['id']}})['then'](handleEntityNotFound(_0x365d58,null))['then'](function(_0x1c7114){if(_0x1c7114){_0x1f2e58[_0x736e('0x51')]['ChatWebsiteId']=_0x1c7114['id'];return db[_0x736e('0x5b')][_0x736e('0x50')](_0x1f2e58[_0x736e('0x51')]);}})[_0x736e('0x18')](respondWithResult(_0x365d58,null))['catch'](handleError(_0x365d58,null));};exports[_0x736e('0x5c')]=function(_0x1c8c76,_0x20233a,_0xf6b2c0){var _0x56d7e4={'raw':![],'where':{}};var _0x3676fb={};var _0x848c30={'count':0x0,'rows':[]};return db[_0x736e('0x32')][_0x736e('0x5d')]({'where':{'id':_0x1c8c76[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x20233a,null))[_0x736e('0x18')](function(_0x581366){if(_0x581366){_0x3676fb[_0x736e('0x38')]=_[_0x736e('0x33')](db[_0x736e('0x5b')][_0x736e('0x5e')]);_0x3676fb[_0x736e('0x34')]=_[_0x736e('0x33')](_0x1c8c76['query']);_0x3676fb['filters']=_[_0x736e('0x37')](_0x3676fb['model'],_0x3676fb[_0x736e('0x34')]);_0x56d7e4[_0x736e('0x39')]=_[_0x736e('0x37')](_0x3676fb[_0x736e('0x38')],qs[_0x736e('0x3a')](_0x1c8c76['query']['fields']));_0x56d7e4[_0x736e('0x39')]=_0x56d7e4['attributes']['length']?_0x56d7e4[_0x736e('0x39')]:_0x3676fb[_0x736e('0x38')];if(!_0x1c8c76['query'][_0x736e('0x3b')](_0x736e('0x3c'))){_0x56d7e4[_0x736e('0x27')]=qs[_0x736e('0x27')](_0x1c8c76[_0x736e('0x34')][_0x736e('0x27')]);_0x56d7e4[_0x736e('0x26')]=qs[_0x736e('0x26')](_0x1c8c76[_0x736e('0x34')]['offset']);}_0x56d7e4[_0x736e('0x3d')]=qs[_0x736e('0x3e')](_0x1c8c76[_0x736e('0x34')][_0x736e('0x3e')]);_0x56d7e4[_0x736e('0x43')]=qs['filters'](_[_0x736e('0x3f')](_0x1c8c76[_0x736e('0x34')],_0x3676fb[_0x736e('0x36')]));_0x56d7e4['where'][_0x736e('0x55')]=_0x581366['id'];if(_0x1c8c76[_0x736e('0x34')][_0x736e('0x45')]){_0x56d7e4[_0x736e('0x43')]=_[_0x736e('0x4e')](_0x56d7e4['where'],{'$or':_['map'](_0x56d7e4[_0x736e('0x39')],function(_0x3e504f){var _0xc16d41={};_0xc16d41[_0x3e504f]={'$like':'%'+_0x1c8c76[_0x736e('0x34')][_0x736e('0x45')]+'%'};return _0xc16d41;})});}_0x56d7e4=_[_0x736e('0x4e')]({},_0x56d7e4,_0x1c8c76['options']);return db['CannedAnswer'][_0x736e('0x47')]({'where':_0x56d7e4['where']})[_0x736e('0x18')](function(_0x89576f){_0x848c30[_0x736e('0x47')]=_0x89576f;if(_0x1c8c76[_0x736e('0x34')][_0x736e('0x48')]){_0x56d7e4[_0x736e('0x49')]=[{'all':!![]}];}return db['CannedAnswer'][_0x736e('0x4a')](_0x56d7e4);})['then'](function(_0x8bb9e6){_0x848c30[_0x736e('0x4b')]=_0x8bb9e6;return _0x848c30;});}})[_0x736e('0x18')](respondWithFilteredResult(_0x20233a,_0x56d7e4))[_0x736e('0x21')](handleError(_0x20233a,null));};exports[_0x736e('0x5f')]=function(_0x4434f2,_0x278e80,_0x19c57c){var _0x423f0c;return db['ChatWebsite'][_0x736e('0x4f')]({'where':{'id':_0x4434f2[_0x736e('0x52')]['id']}})['then'](handleEntityNotFound(_0x278e80,null))[_0x736e('0x18')](function(_0x4288a4){if(_0x4288a4){return _0x4288a4[_0x736e('0x5f')](_0x4434f2[_0x736e('0x34')][_0x736e('0x59')]);}})[_0x736e('0x18')](respondWithStatusCode(_0x278e80,null))[_0x736e('0x21')](handleError(_0x278e80,null));};exports[_0x736e('0x60')]=function(_0x3e3616,_0x33d838,_0x2ab23a){_0x3e3616[_0x736e('0x51')][_0x736e('0x61')]=_0x3e3616[_0x736e('0x62')][_0x736e('0x63')];return db[_0x736e('0x32')]['find']({'where':{'id':_0x3e3616[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x33d838,null))[_0x736e('0x18')](saveUpdates(_0x3e3616[_0x736e('0x51')],null))['then'](respondWithResult(_0x33d838,null))['catch'](handleError(_0x33d838,null));};exports[_0x736e('0x64')]=function(_0x1a5c34,_0x16be19,_0x105666){_0x1a5c34[_0x736e('0x51')][_0x736e('0x65')]=_0x1a5c34[_0x736e('0x62')][_0x736e('0x63')];return db[_0x736e('0x32')]['find']({'where':{'id':_0x1a5c34['params']['id']}})['then'](handleEntityNotFound(_0x16be19,null))['then'](saveUpdates(_0x1a5c34['body'],null))[_0x736e('0x18')](respondWithResult(_0x16be19,null))['catch'](handleError(_0x16be19,null));};exports[_0x736e('0x66')]=function(_0x289d03,_0x254622,_0xf00a9e){_0x289d03['body'][_0x736e('0x67')]=_0x289d03[_0x736e('0x62')][_0x736e('0x63')];return db[_0x736e('0x32')][_0x736e('0x4f')]({'where':{'id':_0x289d03[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x254622,null))['then'](saveUpdates(_0x289d03['body'],null))['then'](respondWithResult(_0x254622,null))[_0x736e('0x21')](handleError(_0x254622,null));};exports[_0x736e('0x68')]=function(_0x11b658,_0x3b67e9,_0x299cd0){_0x11b658[_0x736e('0x51')][_0x736e('0x69')]=_0x11b658['file']['filename'];return db[_0x736e('0x32')][_0x736e('0x4f')]({'where':{'id':_0x11b658[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x3b67e9,null))['then'](saveUpdates(_0x11b658['body'],null))['then'](respondWithResult(_0x3b67e9,null))[_0x736e('0x21')](handleError(_0x3b67e9,null));};exports['getLogo']=function(_0x52dd6d,_0x3a8c8b,_0x1e3e75){var _0x123ae2=path[_0x736e('0x6a')](config[_0x736e('0x6b')],_0x736e('0x6c'));var _0x21c872={'where':{'id':_0x52dd6d[_0x736e('0x52')]['id']},'attributes':['id',_0x736e('0x61')],'raw':!![]};var _0x53da0e=![];return require(_0x736e('0x6d'))[_0x736e('0x6e')]()[_0x736e('0x18')](function(_0x1d4e91){if(_0x1d4e91){_0x53da0e=_0x1d4e91[_0x736e('0x6f')];}})[_0x736e('0x18')](function(){return db[_0x736e('0x32')][_0x736e('0x4f')](_0x21c872);})[_0x736e('0x18')](handleEntityNotFound(_0x3a8c8b,null))[_0x736e('0x18')](function(_0xb92eda){if(_0xb92eda){if(!_[_0x736e('0x70')](_0xb92eda[_0x736e('0x61')])){if(fs[_0x736e('0x71')](path[_0x736e('0x6a')](config[_0x736e('0x6b')],_0x736e('0x72'),_0xb92eda[_0x736e('0x61')]))&&_0x53da0e){_0x123ae2=path[_0x736e('0x6a')](config[_0x736e('0x6b')],_0x736e('0x72'),_0xb92eda['sitepic']);}}return _0x3a8c8b[_0x736e('0x73')](_0x123ae2);}})[_0x736e('0x21')](handleError(_0x3a8c8b,null));};exports[_0x736e('0x74')]=function(_0x59f419,_0x5d5f51,_0x458caf){var _0xdef52c=path['join'](config[_0x736e('0x6b')],_0x736e('0x75'));var _0x1beca0={'where':{'id':_0x59f419['params']['id']},'attributes':['id',_0x736e('0x65')],'raw':!![]};return db[_0x736e('0x32')][_0x736e('0x4f')](_0x1beca0)[_0x736e('0x18')](handleEntityNotFound(_0x5d5f51,null))[_0x736e('0x18')](function(_0x35df4c){if(_0x35df4c){if(!_[_0x736e('0x70')](_0x35df4c[_0x736e('0x65')])){if(fs[_0x736e('0x71')](path[_0x736e('0x6a')](config['root'],'server/files/images/avatars/',_0x35df4c['agentAvatar']))){_0xdef52c=path['join'](config[_0x736e('0x6b')],_0x736e('0x76'),_0x35df4c[_0x736e('0x65')]);}}return _0x5d5f51[_0x736e('0x73')](_0xdef52c);}})['catch'](handleError(_0x5d5f51,null));};exports[_0x736e('0x77')]=function(_0xcf515e,_0x169feb,_0x3b8933){var _0x53a324=path['join'](config[_0x736e('0x6b')],_0x736e('0x78'));var _0x278956={'where':{'id':_0xcf515e[_0x736e('0x52')]['id']},'attributes':['id','customerAvatar','showCustomerAvatar'],'raw':!![]};return db[_0x736e('0x32')][_0x736e('0x4f')](_0x278956)[_0x736e('0x18')](handleEntityNotFound(_0x169feb,null))['then'](function(_0x4951b7){if(_0x4951b7){if(!_[_0x736e('0x70')](_0x4951b7[_0x736e('0x67')])){if(fs['existsSync'](path[_0x736e('0x6a')](config[_0x736e('0x6b')],'server/files/images/avatars/',_0x4951b7[_0x736e('0x67')]))&&_0x4951b7[_0x736e('0x79')]){_0x53a324=path[_0x736e('0x6a')](config['root'],_0x736e('0x76'),_0x4951b7[_0x736e('0x67')]);}}return _0x169feb[_0x736e('0x73')](_0x53a324);}})[_0x736e('0x21')](handleError(_0x169feb,null));};exports[_0x736e('0x7a')]=function(_0x1926b7,_0x2123ae,_0x3179e7){var _0x162055=path[_0x736e('0x6a')](config[_0x736e('0x6b')],_0x736e('0x7b'));var _0x4eac1e={'where':{'id':_0x1926b7[_0x736e('0x52')]['id']},'attributes':['id','systemAvatar'],'raw':!![]};return db[_0x736e('0x32')][_0x736e('0x4f')](_0x4eac1e)['then'](handleEntityNotFound(_0x2123ae,null))[_0x736e('0x18')](function(_0xc85a0f){if(_0xc85a0f){if(!_[_0x736e('0x70')](_0xc85a0f[_0x736e('0x69')])){if(fs[_0x736e('0x71')](path[_0x736e('0x6a')](config[_0x736e('0x6b')],_0x736e('0x76'),_0xc85a0f['systemAvatar']))){_0x162055=path['join'](config[_0x736e('0x6b')],_0x736e('0x76'),_0xc85a0f[_0x736e('0x69')]);}}return _0x2123ae['download'](_0x162055);}})['catch'](handleError(_0x2123ae,null));};exports[_0x736e('0x7c')]=function(_0x1c74a6,_0x334c28,_0x31b3c4){var _0x5d5dec=require(_0x736e('0x7d'));var _0x459beb=new _0x5d5dec();var _0x15bfd8=_0x459beb[_0x736e('0x7e')](_0x1c74a6[_0x736e('0x7f')][_0x736e('0x80')])[_0x736e('0x81')]();var _0x130080={'body':_0x1c74a6['body'],'channel':_0x736e('0x82')};var _0x1c563e=[];var _0x405b34=[];var _0x510d6e={};var _0x21423f=![];return db['CmContact'][_0x736e('0x53')]()[_0x736e('0x18')](function(_0x217d79){if(!_0x217d79){throw new db[(_0x736e('0x83'))][(_0x736e('0x84'))](_0x736e('0x85'));}_0x1c563e=_[_0x736e('0x86')](_['keys'](_0x217d79),[_0x736e('0x87'),'updatedAt']);_0x405b34=_[_0x736e('0x86')](_['keys'](_0x217d79),[_0x736e('0x87'),'updatedAt','CompanyId',_0x736e('0x88')]);if(_0x1c74a6['body']['id']){delete _0x1c74a6[_0x736e('0x51')]['id'];}if(_[_0x736e('0x70')](_0x1c74a6[_0x736e('0x51')][_0x736e('0x89')])){throw new db[(_0x736e('0x83'))]['ValidationError'](_0x736e('0x8a'));}if(_[_0x736e('0x70')](_0x1c74a6[_0x736e('0x51')]['body'])||_0x1c74a6[_0x736e('0x51')][_0x736e('0x51')]===''){throw new db[(_0x736e('0x83'))][(_0x736e('0x84'))](_0x736e('0x8b'));}if(_['isNil'](_0x1c74a6[_0x736e('0x51')][_0x736e('0x8c')])){throw new db[(_0x736e('0x83'))][(_0x736e('0x84'))](_0x736e('0x8d')+_0x405b34);}if(!_[_0x736e('0x8e')](_0x405b34,_0x1c74a6[_0x736e('0x51')]['mapKey'])){throw new db[(_0x736e('0x83'))]['ValidationError'](_0x736e('0x8f')+_0x405b34);}_0x510d6e[_0x1c74a6[_0x736e('0x51')][_0x736e('0x8c')]]=_0x1c74a6[_0x736e('0x51')]['from'];})[_0x736e('0x18')](function(){return db[_0x736e('0x32')][_0x736e('0x4f')]({'where':{'id':_0x1c74a6[_0x736e('0x52')]['id']},'include':[{'model':db[_0x736e('0x90')],'as':_0x736e('0x91'),'include':[{'model':db['CmContact'],'as':_0x736e('0x92'),'where':_0x510d6e,'limit':0x1,'order':[[_0x736e('0x93'),_0x736e('0x94')]]}]},{'model':db[_0x736e('0x95')],'as':_0x736e('0x96')}]});})['then'](handleEntityNotFound(_0x334c28,null))[_0x736e('0x18')](function(_0x64f2eb){if(_0x64f2eb&&_0x64f2eb[_0x736e('0x91')]){_0x130080[_0x736e('0x97')]=_0x64f2eb;_0x130080['applications']=_0x64f2eb[_0x736e('0x96')];_0x130080[_0x736e('0x98')]=_0x64f2eb[_0x736e('0x91')];_0x130080['applications']=_[_0x736e('0x99')](_0x130080[_0x736e('0x9a')],['priority'],[_0x736e('0x9b')]);if(_0x130080['account'][_0x736e('0x96')]){delete _0x130080['account'][_0x736e('0x96')];}if(_0x130080[_0x736e('0x97')][_0x736e('0x91')]&&_0x130080[_0x736e('0x97')][_0x736e('0x91')]['Contacts']['length']){return _0x130080['account'][_0x736e('0x91')][_0x736e('0x92')][0x0];}var _0x15680f=_[_0x736e('0x9c')](_0x1c74a6['body'],{'firstName':_0x1c74a6[_0x736e('0x51')]['from'],'ListId':_0x64f2eb['ListId']});_0x15680f[_0x1c74a6[_0x736e('0x51')][_0x736e('0x8c')]]=_0x1c74a6[_0x736e('0x51')][_0x736e('0x89')];return db['CmContact'][_0x736e('0x50')](_0x15680f,{'fields':_0x1c563e,'raw':!![]});}})[_0x736e('0x18')](handleEntityNotFound(_0x334c28,null))[_0x736e('0x18')](function(_0xe0a3ba){_0x130080[_0x736e('0x9d')]=_0xe0a3ba;if(_0xe0a3ba){var _0x26b2c6={'ContactId':_0xe0a3ba['id'],'ChatWebsiteId':_0x1c74a6[_0x736e('0x52')]['id'],'from':(_0xe0a3ba['firstName']||'')+'\x20'+(_0xe0a3ba[_0x736e('0x9e')]||''),'customerIp':_0x1c74a6['body']['customerIp'],'referer':_0x1c74a6[_0x736e('0x51')]['referer'],'browserName':_0x15bfd8['browser']['name']&&_0x15bfd8[_0x736e('0x9f')][_0x736e('0xa0')]?util['format'](_0x736e('0xa1'),_0x15bfd8[_0x736e('0x9f')][_0x736e('0x30')],_0x15bfd8[_0x736e('0x9f')][_0x736e('0xa0')]):_0x736e('0xa2'),'browserVersion':_0x15bfd8[_0x736e('0x9f')][_0x736e('0xa0')]||_0x736e('0xa2'),'osName':util['format'](_0x736e('0xa1'),_0x15bfd8['os'][_0x736e('0x30')],_0x15bfd8['os'][_0x736e('0xa0')]),'osVersion':_0x15bfd8['os'][_0x736e('0xa0')],'deviceModel':_0x15bfd8[_0x736e('0xa3')][_0x736e('0x38')]&&_0x15bfd8[_0x736e('0xa3')]['vendor']?util[_0x736e('0xa4')]('%s\x20%s\x20%s',_0x15bfd8[_0x736e('0xa3')]['model'],_0x15bfd8[_0x736e('0xa3')][_0x736e('0xa5')],_0x15bfd8['device'][_0x736e('0xa6')]):null,'deviceVendor':_0x15bfd8['device'][_0x736e('0xa5')],'deviceType':_0x15bfd8[_0x736e('0xa3')][_0x736e('0xa6')],'formData':JSON[_0x736e('0x1d')](_0x1c74a6[_0x736e('0x51')])};var _0x2c1eb6={'ChatWebsiteId':_0x1c74a6[_0x736e('0x52')]['id'],'closed':![]};if(_0x1c74a6[_0x736e('0x51')][_0x736e('0xa7')]){_0x2c1eb6[_0x736e('0xa7')]=_0x1c74a6[_0x736e('0x51')][_0x736e('0xa7')];return db['ChatInteraction']['find']({'where':_0x2c1eb6})['then'](function(_0x4be980){if(_0x4be980){return[_0x4be980,![]];}_0x26b2c6[_0x736e('0xa7')]=_0x1c74a6[_0x736e('0x51')][_0x736e('0xa7')];_0x26b2c6[_0x736e('0xa8')]=_0x1c74a6[_0x736e('0x51')][_0x736e('0xa8')];return db[_0x736e('0xa9')][_0x736e('0x50')](_0x26b2c6)[_0x736e('0x18')](function(_0x2b0748){return[_0x2b0748,!![]];});});}_0x2c1eb6[_0x736e('0xaa')]=_0xe0a3ba['id'];if(_0x1c74a6[_0x736e('0x51')]['interaction']&&_0x1c74a6[_0x736e('0x51')][_0x736e('0xab')]['id']){_0x2c1eb6['id']=_0x1c74a6['body'][_0x736e('0xab')]['id'];return db[_0x736e('0xa9')]['find']({'where':_0x2c1eb6})[_0x736e('0x18')](function(_0x446c2e){if(_0x446c2e){return[_0x446c2e,![]];}return db[_0x736e('0xa9')][_0x736e('0x50')](_0x26b2c6)['then'](function(_0x3f2466){return[_0x3f2466,!![]];});});}return db[_0x736e('0xa9')][_0x736e('0x50')](_0x26b2c6)[_0x736e('0x18')](function(_0x46d1bd){return[_0x46d1bd,!![]];});}})[_0x736e('0xac')](function(_0x3b3857,_0x3967d4){if(_0x3b3857){_0x21423f=_0x3967d4;if(!_0x3967d4){return _0x3b3857[_0x736e('0x2d')]({'from':(_0x130080[_0x736e('0x9d')][_0x736e('0xad')]||'')+'\x20'+(_0x130080[_0x736e('0x9d')]['lastName']||'')});}else{return _0x3b3857;}}})[_0x736e('0x18')](function(_0xf5b14d){_0x130080['interaction']=_0xf5b14d[_0x736e('0xae')]({'plain':!![]});_0x130080[_0x736e('0xab')][_0x736e('0xaf')]=_0x21423f;if(_0x130080[_0x736e('0xab')][_0x736e('0xaf')]){if(_0x130080[_0x736e('0x97')][_0x736e('0xb0')]){_0x130080[_0x736e('0x9a')][_0x736e('0xb1')]({'id':0x0,'priority':_0x130080['applications'][_0x736e('0x4d')]+0x1,'app':'close','appdata':_0x736e('0xb2'),'interval':_0x736e('0xb3')});}}return db[_0x736e('0xb4')][_0x736e('0x50')]({'body':_0x1c74a6[_0x736e('0x51')][_0x736e('0x51')],'ChatWebsiteId':_0x1c74a6[_0x736e('0x52')]['id'],'ChatInteractionId':_0xf5b14d['id'],'direction':'in','ContactId':_0x130080[_0x736e('0x9d')]['id'],'AttachmentId':_0x1c74a6[_0x736e('0x51')][_0x736e('0xb5')]});})[_0x736e('0x18')](function(_0x30a35e){_0x130080[_0x736e('0x1f')]=_0x30a35e;if(_0x130080[_0x736e('0xab')][_0x736e('0xb6')]){return db[_0x736e('0xb7')][_0x736e('0x4f')]({'attributes':['id','name'],'where':{'id':_0x130080['interaction'][_0x736e('0xb6')]}})[_0x736e('0x18')](function(_0x31a60d){if(_0x31a60d){_0x130080[_0x736e('0x9a')]['unshift']({'id':0x0,'priority':0x0,'app':_0x736e('0xb8'),'appdata':_0x31a60d[_0x736e('0x30')]+','+(_0x130080['account'][_0x736e('0xb9')]||0xa),'interval':_0x736e('0xb3')});_0x130080[_0x736e('0xba')]=!![];}return respondWithRpcPromise(_0x736e('0xbb'),_0x736e('0xbc'),_0x130080);});}return respondWithRpcPromise('Start',_0x736e('0xbc'),_0x130080);})[_0x736e('0x18')](function(_0x5f09a9){respondWithRpcPromise('EventManager',_0x736e('0xbd'),{'event':_0x736e('0x7c'),'message':_0x5f09a9},client9002);return _0x5f09a9;})['then'](respondWithResult(_0x334c28,null))[_0x736e('0x21')](handleError(_0x334c28,null));};exports[_0x736e('0xbe')]=function(_0x22eac8,_0x299ce5,_0x5cbf96){var _0x1793ad,_0x3f93d4,_0x5ac49e;var _0x3318ba=[];var _0xe16d85=[];var _0x3dcde8={};return db[_0x736e('0xbf')][_0x736e('0x53')]()[_0x736e('0x18')](function(_0x3946cb){if(!_0x3946cb){throw new db[(_0x736e('0x83'))][(_0x736e('0x84'))]('no\x20available\x20attributes');}_0xe16d85=_[_0x736e('0x86')](_['keys'](_0x3946cb),[_0x736e('0x87'),_0x736e('0x93')]);_0x3318ba=_[_0x736e('0x86')](_['keys'](_0x3946cb),[_0x736e('0x87'),_0x736e('0x93'),_0x736e('0xc0'),'ListId']);if(_0x22eac8[_0x736e('0x51')]['id']){delete _0x22eac8['body']['id'];}if(_[_0x736e('0x70')](_0x22eac8[_0x736e('0x51')][_0x736e('0x89')])){throw _0x299ce5[_0x736e('0x24')](0x1f4)[_0x736e('0x31')](new db[(_0x736e('0x83'))][(_0x736e('0x84'))](_0x736e('0x8a')));}if(_['isNil'](_0x22eac8['body'][_0x736e('0x51')])||_0x22eac8['body'][_0x736e('0x51')]===''){throw _0x299ce5['status'](0x1f4)[_0x736e('0x31')](new db[(_0x736e('0x83'))]['ValidationError'](_0x736e('0x8b')));}if(_[_0x736e('0x70')](_0x22eac8[_0x736e('0x51')][_0x736e('0xc1')])){throw _0x299ce5['status'](0x1f4)[_0x736e('0x31')](new db[(_0x736e('0x83'))][(_0x736e('0x84'))](_0x736e('0xc2')+_0x3318ba));}if(!_[_0x736e('0x8e')](_0x3318ba,_0x22eac8[_0x736e('0x51')][_0x736e('0xc1')])){throw _0x299ce5['status'](0x1f4)[_0x736e('0x31')](new db[(_0x736e('0x83'))][(_0x736e('0x84'))](_0x736e('0xc3')+_0x3318ba));}_0x3dcde8[_0x22eac8[_0x736e('0x51')][_0x736e('0xc1')]]=_0x22eac8[_0x736e('0x51')][_0x736e('0x89')];})[_0x736e('0x18')](function(){return db[_0x736e('0x32')][_0x736e('0x4f')]({'where':{'id':_0x22eac8[_0x736e('0x52')]['id']},'include':[{'model':db[_0x736e('0x90')],'as':'List'}]});})[_0x736e('0x18')](handleEntityNotFound(_0x299ce5,null))[_0x736e('0x18')](function(_0x1b4e75){if(_0x1b4e75&&_0x1b4e75['List']){_0x3f93d4=_0x1b4e75;var _0x217551=_[_0x736e('0x9c')](_0x22eac8['body'],{'firstName':_0x22eac8['body'][_0x736e('0x89')],'phone':_0x22eac8[_0x736e('0x51')][_0x736e('0x89')],'ListId':_0x1b4e75[_0x736e('0x88')]});_0x217551[_0x22eac8[_0x736e('0x51')][_0x736e('0xc1')]]=_0x22eac8['body'][_0x736e('0x89')];return db[_0x736e('0xbf')][_0x736e('0xc4')]({'where':_0x3dcde8,'defaults':_0x217551});}})[_0x736e('0xac')](function(_0x31e988){if(_0x31e988){_0x5ac49e=_0x31e988;var _0x51d37c=fs[_0x736e('0xc5')](path[_0x736e('0x6a')](config[_0x736e('0x6b')],_0x736e('0xc6')),'utf8');var _0x2d639e=ejs[_0x736e('0xc7')](_0x51d37c,{'body':_[_0x736e('0xc8')](_0x22eac8['body'][_0x736e('0x51')]),'bodyTitle':_0x3f93d4['offlineMessageBody']});return db['ChatOfflineMessage'][_0x736e('0x50')]({'body':_0x2d639e,'ContactId':_0x31e988['id'],'ChatWebsiteId':_0x3f93d4['id']});}})[_0x736e('0x18')](function(_0x126fb9){if(_0x126fb9){_0x1793ad=_0x126fb9;return db[_0x736e('0xc9')]['findOne']({'where':{'service':!![]},'include':[{'model':db[_0x736e('0xca')],'as':_0x736e('0xcb'),'raw':!![]}]});}})[_0x736e('0x18')](function(_0x437b46){if(_0x437b46&&_0x437b46[_0x736e('0xcb')]&&_0x3f93d4[_0x736e('0xcc')]){var _0x19b5cf={'tls':{'rejectUnauthorized':![]}};if(_0x437b46[_0x736e('0xcb')][_0x736e('0xcd')]){_0x19b5cf[_0x736e('0xcd')]=_0x437b46['Smtp'][_0x736e('0xcd')];}else{_0x19b5cf['host']=_0x437b46[_0x736e('0xcb')][_0x736e('0xce')];_0x19b5cf[_0x736e('0xcf')]=_0x437b46['Smtp'][_0x736e('0xcf')];_0x19b5cf[_0x736e('0xd0')]=_0x437b46[_0x736e('0xcb')]['secure'];}if(_0x437b46['Smtp'][_0x736e('0xd1')]){_0x19b5cf['auth']={'user':_0x437b46[_0x736e('0xcb')][_0x736e('0xd2')],'pass':_0x437b46[_0x736e('0xcb')][_0x736e('0xd3')]};}return respondWithRpcPromise(_0x736e('0xd4'),_0x736e('0xd5'),{'account':_0x19b5cf,'message':{'from':util['format'](_0x736e('0xd6'),_0x437b46[_0x736e('0x30')],_0x437b46[_0x736e('0xd7')]||_0x437b46[_0x736e('0xcb')]['user']),'to':_0x3f93d4['forwardOfflineAddress'],'subject':_0x3f93d4[_0x736e('0xd8')],'text':_0x1793ad['body']}},client9003)[_0x736e('0x18')](function(){return _0x1793ad;})[_0x736e('0x21')](function(_0x3946aa){console[_0x736e('0x1e')](_0x3946aa);});}})[_0x736e('0x18')](function(){if(_0x1793ad){return _0x1793ad;}})[_0x736e('0x18')](respondWithResult(_0x299ce5,null))[_0x736e('0x21')](handleError(_0x299ce5,null));};exports[_0x736e('0xd9')]=function(_0x1f45be,_0x268bf1,_0x4e3041){return db[_0x736e('0xa9')]['find']({'where':{'id':_0x1f45be[_0x736e('0x52')]['id']}})['then'](handleEntityNotFound(_0x268bf1,null))[_0x736e('0x18')](function(_0x235f7d){if(_0x235f7d){return _0x235f7d['addInteraction'](_0x1f45be[_0x736e('0x51')]['ids'],_[_0x736e('0xda')](_0x1f45be[_0x736e('0x51')],[_0x736e('0x59'),'id'])||{});}})[_0x736e('0x18')](respondWithResult(_0x268bf1,null))['catch'](handleError(_0x268bf1,null));};exports[_0x736e('0xdb')]=function(_0x139aaa,_0xaba8ce,_0x4da58c){var _0x597dc8={'raw':![],'where':{}};var _0xe26bce={};var _0x2b9f6e={'count':0x0,'rows':[]};return db['ChatWebsite'][_0x736e('0x5d')]({'where':{'id':_0x139aaa['params']['id']}})[_0x736e('0x18')](handleEntityNotFound(_0xaba8ce,null))[_0x736e('0x18')](function(_0x3cb7fb){if(_0x3cb7fb){_0xe26bce[_0x736e('0x38')]=_['keys'](db[_0x736e('0xa9')]['rawAttributes']);_0xe26bce[_0x736e('0x34')]=_[_0x736e('0x33')](_0x139aaa[_0x736e('0x34')]);_0xe26bce[_0x736e('0x36')]=_['intersection'](_0xe26bce[_0x736e('0x38')],_0xe26bce[_0x736e('0x34')]);_0x597dc8['attributes']=_[_0x736e('0x37')](_0xe26bce['model'],qs[_0x736e('0x3a')](_0x139aaa[_0x736e('0x34')][_0x736e('0x3a')]));_0x597dc8[_0x736e('0x39')]=_0x597dc8[_0x736e('0x39')]['length']?_0x597dc8[_0x736e('0x39')]:_0xe26bce[_0x736e('0x38')];if(!_0x139aaa['query']['hasOwnProperty'](_0x736e('0x3c'))){_0x597dc8[_0x736e('0x27')]=qs[_0x736e('0x27')](_0x139aaa[_0x736e('0x34')][_0x736e('0x27')]);_0x597dc8[_0x736e('0x26')]=qs[_0x736e('0x26')](_0x139aaa[_0x736e('0x34')][_0x736e('0x26')]);}_0x597dc8['order']=qs[_0x736e('0x3e')](_0x139aaa[_0x736e('0x34')][_0x736e('0x3e')]);_0x597dc8['where']=qs[_0x736e('0x36')](_[_0x736e('0x3f')](_0x139aaa[_0x736e('0x34')],_0xe26bce[_0x736e('0x36')]));_0x597dc8['where']['ChatWebsiteId']=_0x3cb7fb['id'];if(_0x139aaa['query'][_0x736e('0x45')]){_0x597dc8['where']=_['merge'](_0x597dc8[_0x736e('0x43')],{'$or':_[_0x736e('0x44')](_0x597dc8['attributes'],function(_0x47f620){var _0x22f428={};_0x22f428[_0x47f620]={'$like':'%'+_0x139aaa[_0x736e('0x34')][_0x736e('0x45')]+'%'};return _0x22f428;})});}_0x597dc8=_['merge']({},_0x597dc8,_0x139aaa[_0x736e('0x46')]);return db['ChatInteraction'][_0x736e('0x47')]({'where':_0x597dc8[_0x736e('0x43')]})[_0x736e('0x18')](function(_0xe27d21){_0x2b9f6e['count']=_0xe27d21;if(_0x139aaa['query']['includeAll']){_0x597dc8[_0x736e('0x49')]=[{'model':db['CmContact'],'as':_0x736e('0xdc'),'required':![]},{'model':db[_0x736e('0xb7')],'as':_0x736e('0xdd'),'attributes':[_0x736e('0x30'),_0x736e('0xde'),_0x736e('0xdf')],'required':![]},{'model':db[_0x736e('0xe0')],'as':'Tags','attributes':['id',_0x736e('0x30'),_0x736e('0xe1')],'where':_0x139aaa[_0x736e('0x34')]['tag']?{'id':_0x139aaa[_0x736e('0x34')][_0x736e('0xe2')]}:undefined,'required':_0x139aaa['query']['tag']?!![]:![]}];}return db[_0x736e('0xa9')]['findAll'](_0x597dc8);})[_0x736e('0x18')](function(_0x138a9d){_0x2b9f6e[_0x736e('0x4b')]=_0x138a9d;return _0x2b9f6e;});}})[_0x736e('0x18')](respondWithFilteredResult(_0xaba8ce,_0x597dc8))[_0x736e('0x21')](handleError(_0xaba8ce,null));};function iftimePromise(_0x429ca9,_0x52363a){return respondWithRpcPromise(_0x736e('0xe3'),_0x736e('0xe4'),{'command':_0x52363a[_0x736e('0xe5')]?util[_0x736e('0xa4')](_0x736e('0xe6'),_0x429ca9[_0x736e('0xe7')],_0x52363a[_0x736e('0xe5')]):util[_0x736e('0xa4')]('iftime\x20%s',_0x429ca9['interval'])},client9002)[_0x736e('0x18')](function(_0x3b366e){var _0x879022=_0x3b366e&&_0x3b366e[_0x736e('0xe8')](_0x736e('0xe9'))>=0x0?!![]:![];logger[_0x736e('0x19')](_0x736e('0xea'),_0x52363a['id'],_0x429ca9['id'],_0x429ca9['interval'],_0x879022?_0x736e('0xeb'):_0x736e('0xec'),_0x52363a['timezone']?_0x52363a[_0x736e('0xe5')]:'No\x20timezone');return _0x879022;})[_0x736e('0x21')](function(_0x2d98dd){logger['error'](_0x736e('0xea'),_0x52363a['id'],_0x429ca9['id'],_0x429ca9['interval'],util['inspect'](_0x2d98dd,{'showHidden':![],'depth':null}),_0x52363a[_0x736e('0xe5')]?_0x52363a[_0x736e('0xe5')]:'No\x20timezone');return![];});}exports[_0x736e('0xe4')]=function(_0x4eef64,_0x3c193f,_0x42de04){var _0x18845c=0x0;var _0x5c1774=0x0;var _0x5243e6=![];var _0x1cd770;var _0x560f8c;return db[_0x736e('0x32')][_0x736e('0x4f')]({'where':{'id':_0x4eef64[_0x736e('0x52')]['id']},'include':[{'model':db[_0x736e('0xed')],'as':_0x736e('0xed'),'include':[{'model':db[_0x736e('0xed')],'as':_0x736e('0xee'),'attributes':['id',_0x736e('0xe7')],'raw':!![]}]}]})[_0x736e('0x18')](handleEntityNotFound(_0x3c193f,null))[_0x736e('0x18')](function(_0x504cc1){if(_0x504cc1){_0x1cd770=_0x504cc1;return _0x504cc1['getProactiveActions']({'raw':!![]});}})[_0x736e('0x18')](function(_0x386665){if(_0x1cd770){if(_0x386665){_0x560f8c=_0x386665;}}return require(_0x736e('0x6d'))[_0x736e('0x6e')]();})[_0x736e('0x18')](function(_0x2a33f7){if(_0x2a33f7){_0x5c1774=_0x2a33f7[_0x736e('0xef')];_0x5243e6=_0x2a33f7[_0x736e('0x6f')];}})[_0x736e('0x18')](function(){return db[_0x736e('0xa9')]['count']({'where':{'closed':![]}});})[_0x736e('0x18')](function(_0x1d65cd){_0x18845c=_0x1d65cd;if(_0x5c1774&&_0x1d65cd>_0x5c1774){return db[_0x736e('0xf0')][_0x736e('0x5d')]({'where':{'id':0x1}})[_0x736e('0x18')](function(_0x4fc21e){if(_0x4fc21e){_0x4fc21e[_0x736e('0xf1')](_0x736e('0xf2'));}});}})[_0x736e('0x18')](function(){if(_0x1cd770[_0x736e('0xed')]&&_0x1cd770[_0x736e('0xed')][_0x736e('0xee')]){var _0x569974=[];for(var _0x198aa1=0x0;_0x198aa1<_0x1cd770['Interval'][_0x736e('0xee')][_0x736e('0x4d')];_0x198aa1++){var _0x6ebe8b=_0x1cd770[_0x736e('0xed')][_0x736e('0xee')][_0x198aa1][_0x736e('0xae')]({'plain':!![]});_0x569974[_0x736e('0xb1')](iftimePromise(_0x6ebe8b,_0x1cd770));}return BPromise[_0x736e('0xf3')](_0x569974)[_0x736e('0x18')](function(_0x1793ef){return _[_0x736e('0xf4')](_0x1793ef);});}else{return!![];}})[_0x736e('0x18')](function(_0x295e8a){var _0x3bff19=fs[_0x736e('0xc5')](path[_0x736e('0x6a')](config['root'],_0x736e('0xf5')),_0x736e('0xf6'));var _0x165504={'remote':_0x1cd770['remote'],'query':querystring[_0x736e('0x1d')](_[_0x736e('0x4e')](_0x1cd770['get']({'plain':!![]}),{'customerIp':_0x4eef64[_0x736e('0x7f')][_0x736e('0xf7')]||_0x4eef64[_0x736e('0x7f')][_0x736e('0xf8')]||_0x4eef64['connection'][_0x736e('0xf9')]||_0x4eef64['ip'],'referer':_0x4eef64['headers']['referer'],'openedInteractions':_0x18845c,'maxInteractions':_0x5c1774,'virtual':_0x5243e6[_0x736e('0xef')],'online':_0x295e8a,'custom':_0x5243e6}))[_0x736e('0xfa')](/'/g,'\x5c\x27')};_0x3c193f[_0x736e('0x31')](ejs[_0x736e('0xc7')](Mustache[_0x736e('0xc7')](_0x3bff19,_0x165504),{'proactiveActions':_0x560f8c,'alignment':_0x1cd770['alignment'],'verticalAlignment':_0x1cd770['verticalAlignment']}));})[_0x736e('0x21')](handleError(_0x3c193f,null));};exports['addApplications']=function(_0x8f9301,_0x35378a,_0x2852b2){return db[_0x736e('0x32')]['findOne']({'where':{'id':_0x8f9301[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x35378a,null))['then'](function(_0x1d4e68){if(_0x1d4e68){return db[_0x736e('0xfb')][_0x736e('0xfc')](function(_0x196e80){return db[_0x736e('0x95')]['destroy']({'where':{'ChatWebsiteId':_0x8f9301[_0x736e('0x52')]['id']},'transaction':_0x196e80})[_0x736e('0x18')](function(_0x1425f0){var _0x52e543=_[_0x736e('0x44')](_0x8f9301[_0x736e('0x51')],function(_0x1d89e2){_0x1d89e2[_0x736e('0x55')]=_0x8f9301[_0x736e('0x52')]['id'];return _0x1d89e2;});return db[_0x736e('0x95')][_0x736e('0xfd')](_0x52e543,{'transaction':_0x196e80});});})[_0x736e('0x18')](function(){return db[_0x736e('0x95')][_0x736e('0xfe')]({'where':{'ChatWebsiteId':_0x8f9301[_0x736e('0x52')]['id']},'order':'priority'});});}})[_0x736e('0x18')](respondWithResult(_0x35378a,null))['catch'](handleError(_0x35378a,null));};exports[_0x736e('0xff')]=function(_0x470117,_0xa868c8,_0xc957be){var _0x267daf={};var _0x4dda41={};var _0x450a48;var _0x410a64;return db[_0x736e('0x32')][_0x736e('0x5d')]({'where':{'id':_0x470117[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0xa868c8,null))[_0x736e('0x18')](function(_0x5e60e8){if(_0x5e60e8){_0x450a48=_0x5e60e8;_0x4dda41[_0x736e('0x38')]=_[_0x736e('0x33')](db['ChatApplication'][_0x736e('0x5e')]);_0x4dda41[_0x736e('0x34')]=_[_0x736e('0x33')](_0x470117['query']);_0x4dda41[_0x736e('0x36')]=_[_0x736e('0x37')](_0x4dda41[_0x736e('0x38')],_0x4dda41[_0x736e('0x34')]);_0x267daf[_0x736e('0x39')]=_['intersection'](_0x4dda41['model'],qs['fields'](_0x470117[_0x736e('0x34')][_0x736e('0x3a')]));_0x267daf[_0x736e('0x39')]=_0x267daf[_0x736e('0x39')][_0x736e('0x4d')]?_0x267daf[_0x736e('0x39')]:_0x4dda41[_0x736e('0x38')];_0x267daf[_0x736e('0x3d')]=qs[_0x736e('0x3e')](_0x470117[_0x736e('0x34')][_0x736e('0x3e')]);_0x267daf['where']=qs[_0x736e('0x36')](_[_0x736e('0x3f')](_0x470117['query'],_0x4dda41[_0x736e('0x36')]));if(_0x470117[_0x736e('0x34')][_0x736e('0x45')]){_0x267daf[_0x736e('0x43')]=_[_0x736e('0x4e')](_0x267daf[_0x736e('0x43')],{'$or':_['map'](_0x267daf[_0x736e('0x39')],function(_0x4efaca){var _0xb7a6f4={};_0xb7a6f4[_0x4efaca]={'$like':'%'+_0x470117[_0x736e('0x34')][_0x736e('0x45')]+'%'};return _0xb7a6f4;})});}_0x267daf=_[_0x736e('0x4e')]({},_0x267daf,_0x470117[_0x736e('0x46')]);return _0x450a48[_0x736e('0xff')](_0x267daf);}})[_0x736e('0x18')](function(_0x3d333f){if(_0x3d333f){_0x410a64=_0x3d333f[_0x736e('0x4d')];if(!_0x470117[_0x736e('0x34')][_0x736e('0x3b')](_0x736e('0x3c'))){_0x267daf[_0x736e('0x27')]=qs['limit'](_0x470117[_0x736e('0x34')][_0x736e('0x27')]);_0x267daf[_0x736e('0x26')]=qs[_0x736e('0x26')](_0x470117[_0x736e('0x34')][_0x736e('0x26')]);}return _0x450a48['getApplications'](_0x267daf);}})[_0x736e('0x18')](function(_0x4449c8){if(_0x4449c8){return _0x4449c8?{'count':_0x410a64,'rows':_0x4449c8}:null;}})['then'](respondWithResult(_0xa868c8,null))[_0x736e('0x21')](handleError(_0xa868c8,null));};exports[_0x736e('0x100')]=function(_0x53a1ac,_0x15d877,_0x47a8e9){return db[_0x736e('0x101')][_0x736e('0x4f')]({'where':{'id':_0x53a1ac[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x15d877,null))[_0x736e('0x18')](function(_0x59760a){if(_0x59760a){return _0x59760a['addProactiveActions'](_0x53a1ac[_0x736e('0x51')][_0x736e('0x59')],_['omit'](_0x53a1ac['body'],['ids','id'])||{});}})[_0x736e('0x18')](respondWithResult(_0x15d877,null))[_0x736e('0x21')](handleError(_0x15d877,null));};exports[_0x736e('0x102')]=function(_0x3842f3,_0x11db79,_0x9a9d72){var _0x392502={};var _0x38ccf7={};var _0xa2f470;var _0x213047;return db[_0x736e('0x32')][_0x736e('0x5d')]({'where':{'id':_0x3842f3[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x11db79,null))[_0x736e('0x18')](function(_0x45d569){if(_0x45d569){_0xa2f470=_0x45d569;_0x38ccf7[_0x736e('0x38')]=_[_0x736e('0x33')](db[_0x736e('0x103')][_0x736e('0x5e')]);_0x38ccf7[_0x736e('0x34')]=_['keys'](_0x3842f3[_0x736e('0x34')]);_0x38ccf7[_0x736e('0x36')]=_[_0x736e('0x37')](_0x38ccf7[_0x736e('0x38')],_0x38ccf7[_0x736e('0x34')]);_0x392502['attributes']=_[_0x736e('0x37')](_0x38ccf7['model'],qs[_0x736e('0x3a')](_0x3842f3['query'][_0x736e('0x3a')]));_0x392502[_0x736e('0x39')]=_0x392502[_0x736e('0x39')][_0x736e('0x4d')]?_0x392502[_0x736e('0x39')]:_0x38ccf7[_0x736e('0x38')];_0x392502[_0x736e('0x3d')]=qs[_0x736e('0x3e')](_0x3842f3['query'][_0x736e('0x3e')]);_0x392502[_0x736e('0x43')]=qs['filters'](_['pick'](_0x3842f3[_0x736e('0x34')],_0x38ccf7[_0x736e('0x36')]));if(_0x3842f3[_0x736e('0x34')][_0x736e('0x45')]){_0x392502[_0x736e('0x43')]=_['merge'](_0x392502[_0x736e('0x43')],{'$or':_[_0x736e('0x44')](_0x392502[_0x736e('0x39')],function(_0x451598){var _0x48f138={};_0x48f138[_0x451598]={'$like':'%'+_0x3842f3['query'][_0x736e('0x45')]+'%'};return _0x48f138;})});}_0x392502=_[_0x736e('0x4e')]({},_0x392502,_0x3842f3[_0x736e('0x46')]);return _0xa2f470[_0x736e('0x102')](_0x392502);}})[_0x736e('0x18')](function(_0x57a3b8){if(_0x57a3b8){_0x213047=_0x57a3b8[_0x736e('0x4d')];if(!_0x3842f3[_0x736e('0x34')][_0x736e('0x3b')]('nolimit')){_0x392502['limit']=qs['limit'](_0x3842f3['query'][_0x736e('0x27')]);_0x392502[_0x736e('0x26')]=qs[_0x736e('0x26')](_0x3842f3['query'][_0x736e('0x26')]);}return _0xa2f470[_0x736e('0x102')](_0x392502);}})[_0x736e('0x18')](function(_0x42e22a){if(_0x42e22a){return _0x42e22a?{'count':_0x213047,'rows':_0x42e22a}:null;}})[_0x736e('0x18')](respondWithResult(_0x11db79,null))[_0x736e('0x21')](handleError(_0x11db79,null));};exports[_0x736e('0x104')]=function(_0xca0ec2,_0x2d41f9,_0xe7241d){var _0x52b00b=_0xca0ec2[_0x736e('0x34')]['online']===_0x736e('0x105')?_0x736e('0x106'):_0x736e('0x107');return db[_0x736e('0x32')]['find']({'attributes':['id',_0x52b00b],'where':{'id':_0xca0ec2['params']['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x2d41f9,null))[_0x736e('0x18')](function(_0x1b5e33){if(_0x1b5e33){var _0x5d8c6d=_0x1b5e33[_0x52b00b];var _0x174498=_0x5d8c6d&&_0x5d8c6d[_0x736e('0x108')]?_0x5d8c6d[_0x736e('0x108')]:[];_0x2d41f9[_0x736e('0x31')]({'fromKey':_[_0x736e('0x70')](_0x5d8c6d[_0x736e('0x109')])?undefined:_0x5d8c6d['fromKey'],'count':_0x174498[_0x736e('0x4d')],'rows':_0x174498});}})[_0x736e('0x21')](handleError(_0x2d41f9,null));};exports[_0x736e('0x10a')]=function(_0x240258,_0x3b5c2d,_0x1c3cb2){var _0x3af60e={'raw':!![],'where':{}};var _0x45dac2={};var _0x2cf175={'count':0x0,'rows':[]};return db[_0x736e('0x32')][_0x736e('0x5d')]({'where':{'id':_0x240258[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x3b5c2d,null))['then'](function(_0x2ba823){if(_0x2ba823){_0x45dac2[_0x736e('0x38')]=_['keys'](db['ChatOfflineMessage']['rawAttributes']);_0x45dac2[_0x736e('0x34')]=_[_0x736e('0x33')](_0x240258[_0x736e('0x34')]);_0x45dac2[_0x736e('0x36')]=_['intersection'](_0x45dac2[_0x736e('0x38')],_0x45dac2[_0x736e('0x34')]);_0x3af60e[_0x736e('0x39')]=_[_0x736e('0x37')](_0x45dac2['model'],qs[_0x736e('0x3a')](_0x240258[_0x736e('0x34')]['fields']));_0x3af60e['attributes']=_0x3af60e[_0x736e('0x39')][_0x736e('0x4d')]?_0x3af60e[_0x736e('0x39')]:_0x45dac2['model'];if(!_0x240258[_0x736e('0x34')][_0x736e('0x3b')](_0x736e('0x3c'))){_0x3af60e[_0x736e('0x27')]=qs[_0x736e('0x27')](_0x240258[_0x736e('0x34')][_0x736e('0x27')]);_0x3af60e[_0x736e('0x26')]=qs[_0x736e('0x26')](_0x240258['query'][_0x736e('0x26')]);}_0x3af60e[_0x736e('0x3d')]=qs[_0x736e('0x3e')](_0x240258[_0x736e('0x34')]['sort']);_0x3af60e[_0x736e('0x43')]=qs[_0x736e('0x36')](_[_0x736e('0x3f')](_0x240258[_0x736e('0x34')],_0x45dac2[_0x736e('0x36')]));_0x3af60e[_0x736e('0x43')]['ChatWebsiteId']=_0x2ba823['id'];if(_0x240258[_0x736e('0x34')][_0x736e('0x45')]){_0x3af60e[_0x736e('0x43')]=_[_0x736e('0x4e')](_0x3af60e[_0x736e('0x43')],{'$or':_[_0x736e('0x44')](_0x3af60e[_0x736e('0x39')],function(_0xce3c97){var _0x2162d4={};_0x2162d4[_0xce3c97]={'$like':'%'+_0x240258[_0x736e('0x34')][_0x736e('0x45')]+'%'};return _0x2162d4;})});}_0x3af60e=_[_0x736e('0x4e')]({},_0x3af60e,_0x240258[_0x736e('0x46')]);return db['ChatOfflineMessage']['count']({'where':_0x3af60e[_0x736e('0x43')]})[_0x736e('0x18')](function(_0x3d7dc3){_0x2cf175[_0x736e('0x47')]=_0x3d7dc3;if(_0x240258[_0x736e('0x34')][_0x736e('0x48')]){_0x3af60e['include']=[{'all':!![]}];}return db[_0x736e('0x10b')][_0x736e('0x4a')](_0x3af60e);})[_0x736e('0x18')](function(_0x52a1a4){_0x2cf175[_0x736e('0x4b')]=_0x52a1a4;return _0x2cf175;});}})['then'](respondWithFilteredResult(_0x3b5c2d,_0x3af60e))[_0x736e('0x21')](handleError(_0x3b5c2d,null));};exports['addAgents']=function(_0x13841c,_0xc96884,_0xca4e61){return db[_0x736e('0x32')][_0x736e('0x4f')]({'where':{'id':_0x13841c[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0xc96884,null))[_0x736e('0x18')](function(_0x5977bd){if(_0x5977bd){return _0x5977bd[_0x736e('0x10c')](_0x13841c[_0x736e('0x51')][_0x736e('0x59')],_[_0x736e('0xda')](_0x13841c[_0x736e('0x51')],[_0x736e('0x59'),'id'])||{})['spread'](function(_0x59b300){for(var _0x4d762a=0x0;_0x4d762a<_0x13841c[_0x736e('0x51')][_0x736e('0x59')]['length'];_0x4d762a+=0x1){socket[_0x736e('0x10d')](_0x736e('0x10e'),{'UserId':_0x13841c[_0x736e('0x51')][_0x736e('0x59')][_0x4d762a],'ChatWebsiteId':_0x13841c[_0x736e('0x52')]['id']});}return _0x59b300;});}})[_0x736e('0x18')](respondWithResult(_0xc96884,null))[_0x736e('0x21')](handleError(_0xc96884,null));};exports[_0x736e('0x10f')]=function(_0x15094c,_0x469527,_0x718264){var _0x12a9b7;return db['ChatWebsite']['find']({'where':{'id':_0x15094c[_0x736e('0x52')]['id']}})['then'](handleEntityNotFound(_0x469527,null))[_0x736e('0x18')](function(_0x1a453a){if(_0x1a453a){return _0x1a453a[_0x736e('0x10f')](_0x15094c['query']['ids'])['then'](function(_0x4bed79){if(_[_0x736e('0x110')](_0x15094c['query'][_0x736e('0x59')])){for(var _0x1a9212=0x0;_0x1a9212<_0x15094c[_0x736e('0x34')][_0x736e('0x59')][_0x736e('0x4d')];_0x1a9212+=0x1){socket['emit'](_0x736e('0x111'),{'UserId':_0x15094c[_0x736e('0x34')][_0x736e('0x59')][_0x1a9212],'ChatWebsiteId':_0x15094c[_0x736e('0x52')]['id']});}}else{socket[_0x736e('0x10d')](_0x736e('0x111'),{'UserId':_0x15094c[_0x736e('0x34')][_0x736e('0x59')],'ChatWebsiteId':_0x15094c[_0x736e('0x52')]['id']});}});}})['then'](respondWithStatusCode(_0x469527,null))[_0x736e('0x21')](handleError(_0x469527,null));};exports[_0x736e('0x112')]=function(_0x1c2429,_0x53c690,_0x1037e7){var _0x53298a={};var _0x521d91={};var _0x39f089;var _0x26c8b5;return db[_0x736e('0x32')]['findOne']({'where':{'id':_0x1c2429[_0x736e('0x52')]['id']}})[_0x736e('0x18')](handleEntityNotFound(_0x53c690,null))[_0x736e('0x18')](function(_0x5e686b){if(_0x5e686b){_0x39f089=_0x5e686b;_0x521d91[_0x736e('0x38')]=_[_0x736e('0x33')](db['User'][_0x736e('0x5e')]);_0x521d91['query']=_['keys'](_0x1c2429[_0x736e('0x34')]);_0x521d91[_0x736e('0x36')]=_['intersection'](_0x521d91[_0x736e('0x38')],_0x521d91['query']);_0x53298a[_0x736e('0x39')]=_[_0x736e('0x37')](_0x521d91[_0x736e('0x38')],qs[_0x736e('0x3a')](_0x1c2429[_0x736e('0x34')][_0x736e('0x3a')]));_0x53298a['attributes']=_0x53298a[_0x736e('0x39')]['length']?_0x53298a[_0x736e('0x39')]:_0x521d91[_0x736e('0x38')];_0x53298a[_0x736e('0x3d')]=qs['sort'](_0x1c2429[_0x736e('0x34')][_0x736e('0x3e')]);_0x53298a[_0x736e('0x43')]=qs[_0x736e('0x36')](_[_0x736e('0x3f')](_0x1c2429[_0x736e('0x34')],_0x521d91[_0x736e('0x36')]));if(_0x1c2429[_0x736e('0x34')][_0x736e('0x45')]){_0x53298a[_0x736e('0x43')]=_[_0x736e('0x4e')](_0x53298a[_0x736e('0x43')],{'$or':_[_0x736e('0x44')](_0x53298a['attributes'],function(_0x49255e){var _0x403f2c={};_0x403f2c[_0x49255e]={'$like':'%'+_0x1c2429[_0x736e('0x34')][_0x736e('0x45')]+'%'};return _0x403f2c;})});}_0x53298a=_[_0x736e('0x4e')]({},_0x53298a,_0x1c2429['options']);return _0x39f089['getAgents'](_0x53298a);}})[_0x736e('0x18')](function(_0x5984bf){if(_0x5984bf){_0x26c8b5=_0x5984bf[_0x736e('0x4d')];if(!_0x1c2429[_0x736e('0x34')]['hasOwnProperty']('nolimit')){_0x53298a['limit']=qs['limit'](_0x1c2429[_0x736e('0x34')][_0x736e('0x27')]);_0x53298a[_0x736e('0x26')]=qs[_0x736e('0x26')](_0x1c2429[_0x736e('0x34')][_0x736e('0x26')]);}return _0x39f089['getAgents'](_0x53298a);}})[_0x736e('0x18')](function(_0x252b91){if(_0x252b91){return _0x252b91?{'count':_0x26c8b5,'rows':_0x252b91}:null;}})['then'](respondWithResult(_0x53c690,null))[_0x736e('0x21')](handleError(_0x53c690,null));};
\ No newline at end of file
index 732bd72..976bbe8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x58f4=['../../mysqldb','ChatWebsite','setMaxListeners','save','update','remove','emit'];(function(_0x764874,_0x3ed544){var _0x29f9d5=function(_0x152dad){while(--_0x152dad){_0x764874['push'](_0x764874['shift']());}};_0x29f9d5(++_0x3ed544);}(_0x58f4,0x1b2));var _0x458f=function(_0x36e8af,_0x486191){_0x36e8af=_0x36e8af-0x0;var _0x5a92c5=_0x58f4[_0x36e8af];return _0x5a92c5;};'use strict';var EventEmitter=require('events');var ChatWebsite=require(_0x458f('0x0'))['db'][_0x458f('0x1')];var ChatWebsiteEvents=new EventEmitter();ChatWebsiteEvents[_0x458f('0x2')](0x0);var events={'afterCreate':_0x458f('0x3'),'afterUpdate':_0x458f('0x4'),'afterDestroy':_0x458f('0x5')};function emitEvent(_0x418696){return function(_0x1a7469,_0x46a3e0,_0x3d455d){ChatWebsiteEvents[_0x458f('0x6')](_0x418696+':'+_0x1a7469['id'],_0x1a7469);ChatWebsiteEvents[_0x458f('0x6')](_0x418696,_0x1a7469);_0x3d455d(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];ChatWebsite['hook'](e,emitEvent(event));}}module['exports']=ChatWebsiteEvents;
\ No newline at end of file
+var _0x70a1=['emit','hasOwnProperty','hook','exports','events','../../mysqldb','ChatWebsite','remove'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x70a1,0x154));var _0x170a=function(_0x16bb4b,_0x5fe431){_0x16bb4b=_0x16bb4b-0x0;var _0x8aeb84=_0x70a1[_0x16bb4b];return _0x8aeb84;};'use strict';var EventEmitter=require(_0x170a('0x0'));var ChatWebsite=require(_0x170a('0x1'))['db'][_0x170a('0x2')];var ChatWebsiteEvents=new EventEmitter();ChatWebsiteEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x170a('0x3')};function emitEvent(_0x31a95f){return function(_0x1dcca8,_0x5ed819,_0x381069){ChatWebsiteEvents[_0x170a('0x4')](_0x31a95f+':'+_0x1dcca8['id'],_0x1dcca8);ChatWebsiteEvents[_0x170a('0x4')](_0x31a95f,_0x1dcca8);_0x381069(null);};}for(var e in events){if(events[_0x170a('0x5')](e)){var event=events[e];ChatWebsite[_0x170a('0x6')](e,emitEvent(event));}}module[_0x170a('0x7')]=ChatWebsiteEvents;
\ No newline at end of file
index e8b53e3..6009b78 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a55=['./chatWebsite.attributes','define','ChatWebsite','chat_websites','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x2703cf,_0x526b31){var _0x28f18a=function(_0x10e33b){while(--_0x10e33b){_0x2703cf['push'](_0x2703cf['shift']());}};_0x28f18a(++_0x526b31);}(_0x8a55,0x185));var _0x58a5=function(_0x545db3,_0x4d90c1){_0x545db3=_0x545db3-0x0;var _0x59ffaf=_0x8a55[_0x545db3];return _0x59ffaf;};'use strict';var _=require(_0x58a5('0x0'));var util=require(_0x58a5('0x1'));var logger=require(_0x58a5('0x2'))(_0x58a5('0x3'));var moment=require(_0x58a5('0x4'));var BPromise=require(_0x58a5('0x5'));var rp=require(_0x58a5('0x6'));var attributes=require(_0x58a5('0x7'));module['exports']=function(_0x3d864a,_0x273ad2){return _0x3d864a[_0x58a5('0x8')](_0x58a5('0x9'),attributes,{'tableName':_0x58a5('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb821=['../../config/logger','bluebird','exports','define','chat_websites','util'];(function(_0x3740fe,_0x6c543c){var _0x55492b=function(_0x1f851f){while(--_0x1f851f){_0x3740fe['push'](_0x3740fe['shift']());}};_0x55492b(++_0x6c543c);}(_0xb821,0xa7));var _0x1b82=function(_0xf9c730,_0x5a0268){_0xf9c730=_0xf9c730-0x0;var _0x19f986=_0xb821[_0xf9c730];return _0x19f986;};'use strict';var _=require('lodash');var util=require(_0x1b82('0x0'));var logger=require(_0x1b82('0x1'))('api');var moment=require('moment');var BPromise=require(_0x1b82('0x2'));var rp=require('request-promise');var attributes=require('./chatWebsite.attributes');module[_0x1b82('0x3')]=function(_0x1403ab,_0x3fadf0){return _0x1403ab[_0x1b82('0x4')]('ChatWebsite',attributes,{'tableName':_0x1b82('0x5'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ebeadcb..04fb84b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x11db=['catch','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','./chatWebsite.socket','request','then','info','ChatWebsite,\x20%s,\x20%s','debug','request\x20sent','error','code','message'];(function(_0x59ee6f,_0x450239){var _0x4c0979=function(_0x565e92){while(--_0x565e92){_0x59ee6f['push'](_0x59ee6f['shift']());}};_0x4c0979(++_0x450239);}(_0x11db,0x146));var _0xb11d=function(_0x5cabfd,_0x5dea47){_0x5cabfd=_0x5cabfd-0x0;var _0x4bc06c=_0x11db[_0x5cabfd];return _0x4bc06c;};'use strict';var _=require(_0xb11d('0x0'));var util=require(_0xb11d('0x1'));var moment=require(_0xb11d('0x2'));var BPromise=require(_0xb11d('0x3'));var rs=require(_0xb11d('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xb11d('0x5'));var logger=require(_0xb11d('0x6'))(_0xb11d('0x7'));var config=require(_0xb11d('0x8'));var jayson=require(_0xb11d('0x9'));var client=jayson[_0xb11d('0xa')][_0xb11d('0xb')]({'port':0x232a});var socket=require(_0xb11d('0xc'))({'host':_0xb11d('0xd'),'port':0x18eb});require(_0xb11d('0xe'))['register'](socket);function respondWithRpcPromise(_0x3cafac,_0x32db13,_0x395495){return new BPromise(function(_0x597553,_0x216fbb){return client[_0xb11d('0xf')](_0x3cafac,_0x395495)[_0xb11d('0x10')](function(_0xc494f3){logger[_0xb11d('0x11')](_0xb11d('0x12'),_0x32db13,'request\x20sent');logger[_0xb11d('0x13')]('ChatWebsite,\x20%s,\x20%s,\x20%s',_0x32db13,_0xb11d('0x14'),JSON['stringify'](_0xc494f3));if(_0xc494f3[_0xb11d('0x15')]){if(_0xc494f3[_0xb11d('0x15')][_0xb11d('0x16')]===0x1f4){logger[_0xb11d('0x15')]('ChatWebsite,\x20%s,\x20%s',_0x32db13,_0xc494f3[_0xb11d('0x15')][_0xb11d('0x17')]);return _0x216fbb(_0xc494f3[_0xb11d('0x15')][_0xb11d('0x17')]);}logger[_0xb11d('0x15')](_0xb11d('0x12'),_0x32db13,_0xc494f3[_0xb11d('0x15')][_0xb11d('0x17')]);return _0x597553(_0xc494f3['error'][_0xb11d('0x17')]);}else{logger['info'](_0xb11d('0x12'),_0x32db13,_0xb11d('0x14'));_0x597553(_0xc494f3['result'][_0xb11d('0x17')]);}})[_0xb11d('0x18')](function(_0x2e1b36){logger[_0xb11d('0x15')](_0xb11d('0x12'),_0x32db13,_0x2e1b36);_0x216fbb(_0x2e1b36);});});}
\ No newline at end of file
+var _0x9ea8=['ChatWebsite,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','http','socket.io-emitter','localhost','register','then','info','ChatWebsite,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x25aec7,_0x3dfa44){var _0x452008=function(_0x5577db){while(--_0x5577db){_0x25aec7['push'](_0x25aec7['shift']());}};_0x452008(++_0x3dfa44);}(_0x9ea8,0x186));var _0x89ea=function(_0xb52b0,_0x709f95){_0xb52b0=_0xb52b0-0x0;var _0x175560=_0x9ea8[_0xb52b0];return _0x175560;};'use strict';var _=require(_0x89ea('0x0'));var util=require(_0x89ea('0x1'));var moment=require(_0x89ea('0x2'));var BPromise=require(_0x89ea('0x3'));var rs=require(_0x89ea('0x4'));var fs=require('fs');var db=require(_0x89ea('0x5'))['db'];var utils=require(_0x89ea('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0x89ea('0x7'));var jayson=require(_0x89ea('0x8'));var client=jayson['client'][_0x89ea('0x9')]({'port':0x232a});var socket=require(_0x89ea('0xa'))({'host':_0x89ea('0xb'),'port':0x18eb});require('./chatWebsite.socket')[_0x89ea('0xc')](socket);function respondWithRpcPromise(_0x5d6669,_0x4d0cb4,_0x2d27f1){return new BPromise(function(_0xc7a3e0,_0x29d0cf){return client['request'](_0x5d6669,_0x2d27f1)[_0x89ea('0xd')](function(_0x1f399f){logger[_0x89ea('0xe')](_0x89ea('0xf'),_0x4d0cb4,_0x89ea('0x10'));logger[_0x89ea('0x11')](_0x89ea('0x12'),_0x4d0cb4,_0x89ea('0x10'),JSON[_0x89ea('0x13')](_0x1f399f));if(_0x1f399f[_0x89ea('0x14')]){if(_0x1f399f[_0x89ea('0x14')][_0x89ea('0x15')]===0x1f4){logger['error'](_0x89ea('0xf'),_0x4d0cb4,_0x1f399f['error'][_0x89ea('0x16')]);return _0x29d0cf(_0x1f399f['error'][_0x89ea('0x16')]);}logger['error'](_0x89ea('0xf'),_0x4d0cb4,_0x1f399f[_0x89ea('0x14')]['message']);return _0xc7a3e0(_0x1f399f[_0x89ea('0x14')]['message']);}else{logger[_0x89ea('0xe')](_0x89ea('0xf'),_0x4d0cb4,_0x89ea('0x10'));_0xc7a3e0(_0x1f399f[_0x89ea('0x17')]['message']);}})['catch'](function(_0x396ba1){logger[_0x89ea('0x14')](_0x89ea('0xf'),_0x4d0cb4,_0x396ba1);_0x29d0cf(_0x396ba1);});});}
\ No newline at end of file
index 69bbcc3..6290b42 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x57e5=['remove','update','register','chatWebsite:'];(function(_0x3e17a9,_0x39afdc){var _0x402e91=function(_0x1a07b1){while(--_0x1a07b1){_0x3e17a9['push'](_0x3e17a9['shift']());}};_0x402e91(++_0x39afdc);}(_0x57e5,0xe8));var _0x557e=function(_0x411017,_0x4a8117){_0x411017=_0x411017-0x0;var _0x2adeea=_0x57e5[_0x411017];return _0x2adeea;};'use strict';var ChatWebsiteEvents=require('./chatWebsite.events');var events=['save',_0x557e('0x0'),_0x557e('0x1')];function createListener(_0x40f9b9,_0x32b1c8){return function(_0xe0c152){_0x32b1c8['emit'](_0x40f9b9,_0xe0c152);};}function removeListener(_0x2fad0d,_0x54888){return function(){ChatWebsiteEvents['removeListener'](_0x2fad0d,_0x54888);};}exports[_0x557e('0x2')]=function(_0x5a2efa){for(var _0x16e894=0x0,_0x4025ed=events['length'];_0x16e894<_0x4025ed;_0x16e894++){var _0x42ca4f=events[_0x16e894];var _0x18ceb5=createListener(_0x557e('0x3')+_0x42ca4f,_0x5a2efa);ChatWebsiteEvents['on'](_0x42ca4f,_0x18ceb5);}};
\ No newline at end of file
+var _0xcf35=['save','remove','register','length','chatWebsite:','./chatWebsite.events'];(function(_0x570837,_0x5764a8){var _0x25cc0c=function(_0x51c0cb){while(--_0x51c0cb){_0x570837['push'](_0x570837['shift']());}};_0x25cc0c(++_0x5764a8);}(_0xcf35,0x1c7));var _0x5cf3=function(_0x45f2e1,_0x48b816){_0x45f2e1=_0x45f2e1-0x0;var _0x461542=_0xcf35[_0x45f2e1];return _0x461542;};'use strict';var ChatWebsiteEvents=require(_0x5cf3('0x0'));var events=[_0x5cf3('0x1'),_0x5cf3('0x2'),'update'];function createListener(_0x6802d9,_0x20a621){return function(_0x4624d2){_0x20a621['emit'](_0x6802d9,_0x4624d2);};}function removeListener(_0x59c044,_0x7194bf){return function(){ChatWebsiteEvents['removeListener'](_0x59c044,_0x7194bf);};}exports[_0x5cf3('0x3')]=function(_0x3d7014){for(var _0x3ae4bf=0x0,_0x491bfe=events[_0x5cf3('0x4')];_0x3ae4bf<_0x491bfe;_0x3ae4bf++){var _0xac7260=events[_0x3ae4bf];var _0x46139d=createListener(_0x5cf3('0x5')+_0xac7260,_0x3d7014);ChatWebsiteEvents['on'](_0xac7260,_0x46139d);}};
\ No newline at end of file
index ba14118..255c6e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f64=['removeAnswers','removeAgents','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatWebsite.controller','isAuthenticated','get','describe','/:id','show','/:id/dispositions','getDispositions','/:id/canned_answers','getAnswers','getLogo','/:id/avatar','getAvatar','/:id/customer_avatar','getCustomerAvatar','/:id/system_avatar','getSystemAvatar','/:id/interactions','getInteractions','/:id/snippet','getSnippet','getApplications','/:id/proactive_actions','getProactiveActions','/:id/fields','/:id/offline_messages','getOfflineMessages','getAgents','post','create','addAnswer','diskStorage','root','server/files/images/logos/','format','%s-%s','now','originalname','/:id/logo','single','file','addLogo','join','addAvatar','server/files/images/avatars/','addSystemAvatar','/:id/notify','notify','/:id/offline','offline','/:id/applications','addApplications','/:id/users','destroy','delete','removeDispositions'];(function(_0x19454e,_0x436336){var _0x11e26e=function(_0x27b585){while(--_0x27b585){_0x19454e['push'](_0x19454e['shift']());}};_0x11e26e(++_0x436336);}(_0x4f64,0x14d));var _0x44f6=function(_0x4d8158,_0x534bb2){_0x4d8158=_0x4d8158-0x0;var _0x48e91d=_0x4f64[_0x4d8158];return _0x48e91d;};'use strict';var multer=require(_0x44f6('0x0'));var util=require(_0x44f6('0x1'));var path=require('path');var express=require(_0x44f6('0x2'));var router=express[_0x44f6('0x3')]();var auth=require(_0x44f6('0x4'));var interaction=require(_0x44f6('0x5'));var config=require(_0x44f6('0x6'));var controller=require(_0x44f6('0x7'));router['get']('/',auth[_0x44f6('0x8')](),controller['index']);router[_0x44f6('0x9')]('/describe',auth[_0x44f6('0x8')](),controller[_0x44f6('0xa')]);router[_0x44f6('0x9')](_0x44f6('0xb'),auth['isAuthenticated'](),controller[_0x44f6('0xc')]);router[_0x44f6('0x9')](_0x44f6('0xd'),auth['isAuthenticated'](),controller[_0x44f6('0xe')]);router[_0x44f6('0x9')](_0x44f6('0xf'),auth[_0x44f6('0x8')](),controller[_0x44f6('0x10')]);router[_0x44f6('0x9')]('/:id/logo',controller[_0x44f6('0x11')]);router[_0x44f6('0x9')](_0x44f6('0x12'),controller[_0x44f6('0x13')]);router[_0x44f6('0x9')](_0x44f6('0x14'),controller[_0x44f6('0x15')]);router[_0x44f6('0x9')](_0x44f6('0x16'),controller[_0x44f6('0x17')]);router[_0x44f6('0x9')](_0x44f6('0x18'),auth[_0x44f6('0x8')](),controller[_0x44f6('0x19')]);router[_0x44f6('0x9')](_0x44f6('0x1a'),controller[_0x44f6('0x1b')]);router[_0x44f6('0x9')]('/:id/applications',auth[_0x44f6('0x8')](),controller[_0x44f6('0x1c')]);router[_0x44f6('0x9')](_0x44f6('0x1d'),auth[_0x44f6('0x8')](),controller[_0x44f6('0x1e')]);router[_0x44f6('0x9')](_0x44f6('0x1f'),controller['getFields']);router['get'](_0x44f6('0x20'),auth[_0x44f6('0x8')](),controller[_0x44f6('0x21')]);router[_0x44f6('0x9')]('/:id/users',auth[_0x44f6('0x8')](),controller[_0x44f6('0x22')]);router[_0x44f6('0x23')]('/',auth[_0x44f6('0x8')](),controller[_0x44f6('0x24')]);router[_0x44f6('0x23')](_0x44f6('0xd'),auth[_0x44f6('0x8')](),controller['addDisposition']);router['post']('/:id/canned_answers',auth[_0x44f6('0x8')](),controller[_0x44f6('0x25')]);var upload=multer({'storage':multer[_0x44f6('0x26')]({'destination':function(_0x1bacdd,_0x10ac2f,_0xdb7bf0){_0xdb7bf0(null,path['join'](config[_0x44f6('0x27')],_0x44f6('0x28')));},'filename':function(_0x30c85d,_0x56525a,_0x54743b){_0x54743b(null,util[_0x44f6('0x29')](_0x44f6('0x2a'),Date[_0x44f6('0x2b')](),_0x56525a[_0x44f6('0x2c')]));}})});router[_0x44f6('0x23')](_0x44f6('0x2d'),upload[_0x44f6('0x2e')](_0x44f6('0x2f')),controller[_0x44f6('0x30')]);var upload=multer({'storage':multer[_0x44f6('0x26')]({'destination':function(_0x23d027,_0x172733,_0x5406f1){_0x5406f1(null,path[_0x44f6('0x31')](config[_0x44f6('0x27')],'server/files/images/avatars/'));},'filename':function(_0x3a4b97,_0x403bd2,_0x332b3a){_0x332b3a(null,util[_0x44f6('0x29')](_0x44f6('0x2a'),Date[_0x44f6('0x2b')](),_0x403bd2[_0x44f6('0x2c')]));}})});router[_0x44f6('0x23')](_0x44f6('0x12'),upload[_0x44f6('0x2e')](_0x44f6('0x2f')),controller[_0x44f6('0x32')]);var upload=multer({'storage':multer[_0x44f6('0x26')]({'destination':function(_0x5d4596,_0x112954,_0x3bb0f8){_0x3bb0f8(null,path[_0x44f6('0x31')](config[_0x44f6('0x27')],_0x44f6('0x33')));},'filename':function(_0x3e1f3d,_0x16ad7f,_0x92ecec){_0x92ecec(null,util[_0x44f6('0x29')](_0x44f6('0x2a'),Date['now'](),_0x16ad7f[_0x44f6('0x2c')]));}})});router[_0x44f6('0x23')](_0x44f6('0x14'),upload[_0x44f6('0x2e')](_0x44f6('0x2f')),controller['addCustomerAvatar']);var upload=multer({'storage':multer[_0x44f6('0x26')]({'destination':function(_0x34a071,_0x1612fd,_0x11deff){_0x11deff(null,path[_0x44f6('0x31')](config[_0x44f6('0x27')],_0x44f6('0x33')));},'filename':function(_0x296f35,_0x3a0dfb,_0x367518){_0x367518(null,util[_0x44f6('0x29')]('%s-%s',Date['now'](),_0x3a0dfb[_0x44f6('0x2c')]));}})});router[_0x44f6('0x23')](_0x44f6('0x16'),upload[_0x44f6('0x2e')](_0x44f6('0x2f')),controller[_0x44f6('0x34')]);router[_0x44f6('0x23')](_0x44f6('0x35'),controller[_0x44f6('0x36')]);router[_0x44f6('0x23')](_0x44f6('0x37'),controller[_0x44f6('0x38')]);router[_0x44f6('0x23')](_0x44f6('0x18'),auth[_0x44f6('0x8')](),controller['addInteraction']);router[_0x44f6('0x23')](_0x44f6('0x39'),auth['isAuthenticated'](),controller[_0x44f6('0x3a')]);router[_0x44f6('0x23')](_0x44f6('0x1d'),auth[_0x44f6('0x8')](),controller['addProactiveActions']);router['post'](_0x44f6('0x3b'),auth[_0x44f6('0x8')](),controller['addAgents']);router['put'](_0x44f6('0xb'),auth[_0x44f6('0x8')](),controller['update']);router['delete'](_0x44f6('0xb'),auth[_0x44f6('0x8')](),controller[_0x44f6('0x3c')]);router[_0x44f6('0x3d')](_0x44f6('0xd'),auth['isAuthenticated'](),controller[_0x44f6('0x3e')]);router[_0x44f6('0x3d')](_0x44f6('0xf'),auth[_0x44f6('0x8')](),controller[_0x44f6('0x3f')]);router['delete']('/:id/users',auth['isAuthenticated'](),controller[_0x44f6('0x40')]);module[_0x44f6('0x41')]=router;
\ No newline at end of file
+var _0x4a46=['%s-%s','now','originalname','single','file','addLogo','server/files/images/avatars/','addAvatar','addCustomerAvatar','/:id/system_avatar','notify','/:id/offline','offline','addInteraction','addApplications','addProactiveActions','destroy','delete','removeDispositions','removeAnswers','removeAgents','exports','multer','util','path','express','Router','../../components/interaction/service','../../config/environment','./chatWebsite.controller','isAuthenticated','index','get','describe','/:id','show','/:id/dispositions','getDispositions','getAnswers','/:id/logo','getLogo','/:id/avatar','getAvatar','getCustomerAvatar','/:id/interactions','getInteractions','/:id/snippet','/:id/applications','getApplications','/:id/proactive_actions','getProactiveActions','/:id/fields','getFields','/:id/offline_messages','/:id/users','getAgents','create','addDisposition','post','/:id/canned_answers','diskStorage','join','root','server/files/images/logos/'];(function(_0x1fc18b,_0x13d27d){var _0x16a351=function(_0x54a799){while(--_0x54a799){_0x1fc18b['push'](_0x1fc18b['shift']());}};_0x16a351(++_0x13d27d);}(_0x4a46,0xd6));var _0x64a4=function(_0x15aec3,_0x5eaef8){_0x15aec3=_0x15aec3-0x0;var _0x5de9e1=_0x4a46[_0x15aec3];return _0x5de9e1;};'use strict';var multer=require(_0x64a4('0x0'));var util=require(_0x64a4('0x1'));var path=require(_0x64a4('0x2'));var express=require(_0x64a4('0x3'));var router=express[_0x64a4('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x64a4('0x5'));var config=require(_0x64a4('0x6'));var controller=require(_0x64a4('0x7'));router['get']('/',auth[_0x64a4('0x8')](),controller[_0x64a4('0x9')]);router[_0x64a4('0xa')]('/describe',auth[_0x64a4('0x8')](),controller[_0x64a4('0xb')]);router['get'](_0x64a4('0xc'),auth[_0x64a4('0x8')](),controller[_0x64a4('0xd')]);router['get'](_0x64a4('0xe'),auth[_0x64a4('0x8')](),controller[_0x64a4('0xf')]);router['get']('/:id/canned_answers',auth[_0x64a4('0x8')](),controller[_0x64a4('0x10')]);router[_0x64a4('0xa')](_0x64a4('0x11'),controller[_0x64a4('0x12')]);router['get'](_0x64a4('0x13'),controller[_0x64a4('0x14')]);router[_0x64a4('0xa')]('/:id/customer_avatar',controller[_0x64a4('0x15')]);router[_0x64a4('0xa')]('/:id/system_avatar',controller['getSystemAvatar']);router[_0x64a4('0xa')](_0x64a4('0x16'),auth[_0x64a4('0x8')](),controller[_0x64a4('0x17')]);router[_0x64a4('0xa')](_0x64a4('0x18'),controller['getSnippet']);router[_0x64a4('0xa')](_0x64a4('0x19'),auth[_0x64a4('0x8')](),controller[_0x64a4('0x1a')]);router['get'](_0x64a4('0x1b'),auth['isAuthenticated'](),controller[_0x64a4('0x1c')]);router[_0x64a4('0xa')](_0x64a4('0x1d'),controller[_0x64a4('0x1e')]);router[_0x64a4('0xa')](_0x64a4('0x1f'),auth[_0x64a4('0x8')](),controller['getOfflineMessages']);router['get'](_0x64a4('0x20'),auth[_0x64a4('0x8')](),controller[_0x64a4('0x21')]);router['post']('/',auth[_0x64a4('0x8')](),controller[_0x64a4('0x22')]);router['post'](_0x64a4('0xe'),auth[_0x64a4('0x8')](),controller[_0x64a4('0x23')]);router[_0x64a4('0x24')](_0x64a4('0x25'),auth[_0x64a4('0x8')](),controller['addAnswer']);var upload=multer({'storage':multer[_0x64a4('0x26')]({'destination':function(_0x29ad93,_0x36c7b4,_0x33d49c){_0x33d49c(null,path[_0x64a4('0x27')](config[_0x64a4('0x28')],_0x64a4('0x29')));},'filename':function(_0x589068,_0x581db0,_0x2d3ecc){_0x2d3ecc(null,util['format'](_0x64a4('0x2a'),Date[_0x64a4('0x2b')](),_0x581db0[_0x64a4('0x2c')]));}})});router[_0x64a4('0x24')](_0x64a4('0x11'),upload[_0x64a4('0x2d')](_0x64a4('0x2e')),controller[_0x64a4('0x2f')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x347638,_0xded51c,_0x43afb7){_0x43afb7(null,path['join'](config[_0x64a4('0x28')],_0x64a4('0x30')));},'filename':function(_0x41f1b,_0x10ca08,_0x9c4a81){_0x9c4a81(null,util['format']('%s-%s',Date['now'](),_0x10ca08['originalname']));}})});router['post']('/:id/avatar',upload[_0x64a4('0x2d')](_0x64a4('0x2e')),controller[_0x64a4('0x31')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x139d5d,_0x6c30e4,_0x28eb2e){_0x28eb2e(null,path[_0x64a4('0x27')](config[_0x64a4('0x28')],'server/files/images/avatars/'));},'filename':function(_0x534a38,_0x30dc99,_0x5cc30d){_0x5cc30d(null,util['format'](_0x64a4('0x2a'),Date['now'](),_0x30dc99[_0x64a4('0x2c')]));}})});router[_0x64a4('0x24')]('/:id/customer_avatar',upload[_0x64a4('0x2d')](_0x64a4('0x2e')),controller[_0x64a4('0x32')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x2766df,_0x5323c7,_0x539327){_0x539327(null,path[_0x64a4('0x27')](config[_0x64a4('0x28')],_0x64a4('0x30')));},'filename':function(_0x34854a,_0x5184e7,_0x3e8ade){_0x3e8ade(null,util['format'](_0x64a4('0x2a'),Date[_0x64a4('0x2b')](),_0x5184e7['originalname']));}})});router[_0x64a4('0x24')](_0x64a4('0x33'),upload['single'](_0x64a4('0x2e')),controller['addSystemAvatar']);router['post']('/:id/notify',controller[_0x64a4('0x34')]);router[_0x64a4('0x24')](_0x64a4('0x35'),controller[_0x64a4('0x36')]);router[_0x64a4('0x24')](_0x64a4('0x16'),auth['isAuthenticated'](),controller[_0x64a4('0x37')]);router[_0x64a4('0x24')](_0x64a4('0x19'),auth[_0x64a4('0x8')](),controller[_0x64a4('0x38')]);router['post'](_0x64a4('0x1b'),auth[_0x64a4('0x8')](),controller[_0x64a4('0x39')]);router[_0x64a4('0x24')]('/:id/users',auth['isAuthenticated'](),controller['addAgents']);router['put']('/:id',auth[_0x64a4('0x8')](),controller['update']);router['delete']('/:id',auth[_0x64a4('0x8')](),controller[_0x64a4('0x3a')]);router[_0x64a4('0x3b')](_0x64a4('0xe'),auth['isAuthenticated'](),controller[_0x64a4('0x3c')]);router[_0x64a4('0x3b')](_0x64a4('0x25'),auth['isAuthenticated'](),controller[_0x64a4('0x3d')]);router[_0x64a4('0x3b')](_0x64a4('0x20'),auth[_0x64a4('0x8')](),controller[_0x64a4('0x3e')]);module[_0x64a4('0x3f')]=router;
\ No newline at end of file
index eef6183..390cf93 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf1b3=['exports','name','STRING','sequelize'];(function(_0x1e7996,_0x4425a2){var _0x1bb528=function(_0x124632){while(--_0x124632){_0x1e7996['push'](_0x1e7996['shift']());}};_0x1bb528(++_0x4425a2);}(_0xf1b3,0x8b));var _0x3f1b=function(_0x52322f,_0x1ebb3f){_0x52322f=_0x52322f-0x0;var _0x3ce1f2=_0xf1b3[_0x52322f];return _0x3ce1f2;};'use strict';var Sequelize=require(_0x3f1b('0x0'));module[_0x3f1b('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0x3f1b('0x2'),'allowNull':![],'validate':{'notEmpty':!![]}},'vat':{'type':Sequelize[_0x3f1b('0x3')]},'companyId':{'type':Sequelize[_0x3f1b('0x3')]},'website':{'type':Sequelize[_0x3f1b('0x3')]},'phone':{'type':Sequelize[_0x3f1b('0x3')]},'fax':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0x3f1b('0x3')]},'street':{'type':Sequelize[_0x3f1b('0x3')]},'postalCode':{'type':Sequelize['STRING']},'city':{'type':Sequelize[_0x3f1b('0x3')]},'country':{'type':Sequelize[_0x3f1b('0x3')]},'email':{'type':Sequelize[_0x3f1b('0x3')],'validate':{'isEmail':!![]}},'emailDomain':{'type':Sequelize[_0x3f1b('0x3')]},'sStreet':{'type':Sequelize[_0x3f1b('0x3')]},'sPostalCode':{'type':Sequelize[_0x3f1b('0x3')]},'sCity':{'type':Sequelize[_0x3f1b('0x3')]},'sCountry':{'type':Sequelize[_0x3f1b('0x3')]},'description':{'type':Sequelize[_0x3f1b('0x3')]}};
\ No newline at end of file
+var _0x6b46=['sequelize','name','STRING'];(function(_0x38ff1e,_0x3b9385){var _0x3755d4=function(_0x6e6692){while(--_0x6e6692){_0x38ff1e['push'](_0x38ff1e['shift']());}};_0x3755d4(++_0x3b9385);}(_0x6b46,0x19e));var _0x66b4=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x6b46[_0x3b380d];return _0x54502b;};'use strict';var Sequelize=require(_0x66b4('0x0'));module['exports']={'name':{'type':Sequelize['STRING'],'unique':_0x66b4('0x1'),'allowNull':![],'validate':{'notEmpty':!![]}},'vat':{'type':Sequelize[_0x66b4('0x2')]},'companyId':{'type':Sequelize[_0x66b4('0x2')]},'website':{'type':Sequelize[_0x66b4('0x2')]},'phone':{'type':Sequelize[_0x66b4('0x2')]},'fax':{'type':Sequelize[_0x66b4('0x2')]},'type':{'type':Sequelize['STRING']},'street':{'type':Sequelize[_0x66b4('0x2')]},'postalCode':{'type':Sequelize[_0x66b4('0x2')]},'city':{'type':Sequelize[_0x66b4('0x2')]},'country':{'type':Sequelize[_0x66b4('0x2')]},'email':{'type':Sequelize[_0x66b4('0x2')],'validate':{'isEmail':!![]}},'emailDomain':{'type':Sequelize['STRING']},'sStreet':{'type':Sequelize[_0x66b4('0x2')]},'sPostalCode':{'type':Sequelize[_0x66b4('0x2')]},'sCity':{'type':Sequelize[_0x66b4('0x2')]},'sCountry':{'type':Sequelize[_0x66b4('0x2')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 2e1c8ae..8512ec6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6857=['params','fields','create','body','find','addContacts','CmContact','ids','getContacts','findOne','filter','map','hasOwnProperty','nolimit','fast-json-patch','request-promise','bluebird','mustache','util','to-csv','squel','crypto','papaparse','../../components/parsers/qs','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','limit','Content-Range','reject','save','update','then','destroy','error','index','CmCompany','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','length','order','sort','pick','add','day','merge','where','options','includeAll','include','findAll','rows','catch','show'];(function(_0x416cdc,_0x5a8260){var _0x3c030c=function(_0x5d566e){while(--_0x5d566e){_0x416cdc['push'](_0x416cdc['shift']());}};_0x3c030c(++_0x5a8260);}(_0x6857,0x116));var _0x7685=function(_0x4ea3bd,_0x264498){_0x4ea3bd=_0x4ea3bd-0x0;var _0xd09f03=_0x6857[_0x4ea3bd];return _0xd09f03;};'use strict';var jsonpatch=require(_0x7685('0x0'));var rp=require(_0x7685('0x1'));var moment=require('moment');var BPromise=require(_0x7685('0x2'));var Mustache=require(_0x7685('0x3'));var util=require(_0x7685('0x4'));var path=require('path');var sox=require('sox');var csv=require(_0x7685('0x5'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x7685('0x6'));var crypto=require(_0x7685('0x7'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x7685('0x8'));var qs=require(_0x7685('0x9'));var logger=require('../../config/logger')('api');var utils=require(_0x7685('0xa'));var config=require(_0x7685('0xb'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3b12ca,_0x4e8621){_0x4e8621=_0x4e8621||0xcc;return function(_0x55661a){if(_0x55661a){return _0x3b12ca[_0x7685('0xc')](_0x4e8621);}return _0x3b12ca['status'](_0x4e8621)[_0x7685('0xd')]();};}function respondWithResult(_0x3ae679,_0x203222){_0x203222=_0x203222||0xc8;return function(_0x1eeaca){if(_0x1eeaca){return _0x3ae679[_0x7685('0xe')](_0x203222)[_0x7685('0xf')](_0x1eeaca);}};}function respondWithFilteredResult(_0x35ab5f,_0x2f4a91){return function(_0x354ba8){if(_0x354ba8){var _0x2ad412=_0x354ba8[_0x7685('0x10')],_0x454117=_0x2f4a91[_0x7685('0x11')],_0x2aabb2=_0x2f4a91['offset']+_0x2f4a91[_0x7685('0x12')],_0x3ab956;if(_0x2aabb2>=_0x2ad412){_0x2aabb2=_0x2ad412;_0x3ab956=0xc8;}else{_0x3ab956=0xce;}_0x35ab5f['status'](_0x3ab956);return _0x35ab5f['set'](_0x7685('0x13'),_0x454117+'-'+_0x2aabb2+'/'+_0x2ad412)[_0x7685('0xf')](_0x354ba8);}return null;};}function patchUpdates(_0x3d30e5){return function(_0x108d36){try{jsonpatch['apply'](_0x108d36,_0x3d30e5,!![]);}catch(_0xee3ce4){return BPromise[_0x7685('0x14')](_0xee3ce4);}return _0x108d36[_0x7685('0x15')]();};}function saveUpdates(_0x81bce3,_0x127e3c){return function(_0x488f7b){if(_0x488f7b){return _0x488f7b[_0x7685('0x16')](_0x81bce3)[_0x7685('0x17')](function(_0x3ee9b8){return _0x3ee9b8;});}return null;};}function removeEntity(_0x2c8b46,_0x4dd5b6){return function(_0x540d73){if(_0x540d73){return _0x540d73[_0x7685('0x18')]()['then'](function(){_0x2c8b46[_0x7685('0xe')](0xcc)[_0x7685('0xd')]();});}};}function handleEntityNotFound(_0x1850a0,_0x24c21a){return function(_0x44c52d){if(!_0x44c52d){_0x1850a0[_0x7685('0xc')](0x194);}return _0x44c52d;};}function handleError(_0x5ad095,_0x14af88){_0x14af88=_0x14af88||0x1f4;return function(_0xfe7dc1){logger[_0x7685('0x19')](_0xfe7dc1['stack']);if(_0xfe7dc1['name']){delete _0xfe7dc1['name'];}_0x5ad095[_0x7685('0xe')](_0x14af88)['send'](_0xfe7dc1);};}exports[_0x7685('0x1a')]=function(_0x1548ea,_0x7e03f3){var _0x4203e2={},_0x62510={},_0x206ebf={'count':0x0,'rows':[]};var _0x3e7b16=db[_0x7685('0x1b')][_0x7685('0x1c')];_0x62510[_0x7685('0x1d')]=_[_0x7685('0x1e')](_0x3e7b16);var _0x23b344={'dateStart':_0x1548ea[_0x7685('0x1f')]['dateStart'],'dateEnd':_0x1548ea[_0x7685('0x1f')]['dateEnd']};delete _0x1548ea[_0x7685('0x1f')][_0x7685('0x20')];delete _0x1548ea[_0x7685('0x1f')][_0x7685('0x21')];_0x62510['query']=_['keys'](_0x1548ea['query']);_0x62510[_0x7685('0x22')]=_[_0x7685('0x23')](_0x62510[_0x7685('0x1d')],_0x62510[_0x7685('0x1f')]);_0x4203e2[_0x7685('0x24')]=_[_0x7685('0x23')](_0x62510[_0x7685('0x1d')],qs['fields'](_0x1548ea['query']['fields']));_0x4203e2[_0x7685('0x24')]=_0x4203e2['attributes'][_0x7685('0x25')]?_0x4203e2[_0x7685('0x24')]:_0x62510['model'];if(!_0x1548ea[_0x7685('0x1f')]['hasOwnProperty']('nolimit')){_0x4203e2['limit']=qs[_0x7685('0x12')](_0x1548ea[_0x7685('0x1f')][_0x7685('0x12')]);_0x4203e2[_0x7685('0x11')]=qs[_0x7685('0x11')](_0x1548ea['query'][_0x7685('0x11')]);}_0x4203e2[_0x7685('0x26')]=qs['sort'](_0x1548ea[_0x7685('0x1f')][_0x7685('0x27')]);_0x4203e2['where']=qs[_0x7685('0x22')](_[_0x7685('0x28')](_0x1548ea[_0x7685('0x1f')],_0x62510[_0x7685('0x22')]));if(_0x23b344[_0x7685('0x20')]){if(_0x23b344['dateEnd']){_0x23b344['dateEnd']=moment(_0x23b344[_0x7685('0x21')])[_0x7685('0x29')](0x1,_0x7685('0x2a'));}else{_0x23b344[_0x7685('0x21')]=moment(_0x23b344[_0x7685('0x20')])[_0x7685('0x29')](0x1,_0x7685('0x2a'));}_[_0x7685('0x2b')](_0x4203e2[_0x7685('0x2c')],{'createdAt':{'$gte':_0x23b344[_0x7685('0x20')],'$lte':_0x23b344[_0x7685('0x21')]}});}if(_0x1548ea[_0x7685('0x1f')]['filter']){_0x4203e2[_0x7685('0x2c')]=_[_0x7685('0x2b')](_0x4203e2[_0x7685('0x2c')],{'$or':_['map'](_0x4203e2[_0x7685('0x24')],function(_0xfd1606){var _0x282140={};_0x282140[_0xfd1606]={'$like':'%'+_0x1548ea[_0x7685('0x1f')]['filter']+'%'};return _0x282140;})});}_0x4203e2=_[_0x7685('0x2b')]({},_0x4203e2,_0x1548ea[_0x7685('0x2d')]);var _0x529529={'where':_0x4203e2[_0x7685('0x2c')]};return db['CmCompany'][_0x7685('0x10')](_0x529529)[_0x7685('0x17')](function(_0x2cea24){_0x206ebf['count']=_0x2cea24;if(_0x1548ea[_0x7685('0x1f')][_0x7685('0x2e')]){_0x4203e2[_0x7685('0x2f')]=[{'all':!![]}];}return db[_0x7685('0x1b')][_0x7685('0x30')](_0x4203e2);})[_0x7685('0x17')](function(_0x1c9b20){_0x206ebf[_0x7685('0x31')]=_0x1c9b20;return _0x206ebf;})[_0x7685('0x17')](respondWithFilteredResult(_0x7e03f3,_0x4203e2))[_0x7685('0x32')](handleError(_0x7e03f3,null));};exports[_0x7685('0x33')]=function(_0x5e0bac,_0xf39547){var _0xc45876={'raw':![],'where':{'id':_0x5e0bac[_0x7685('0x34')]['id']}},_0x3d3cf5={};_0x3d3cf5[_0x7685('0x1d')]=_['keys'](db[_0x7685('0x1b')][_0x7685('0x1c')]);_0x3d3cf5['query']=_[_0x7685('0x1e')](_0x5e0bac['query']);_0x3d3cf5[_0x7685('0x22')]=_['intersection'](_0x3d3cf5[_0x7685('0x1d')],_0x3d3cf5[_0x7685('0x1f')]);_0xc45876['attributes']=_['intersection'](_0x3d3cf5[_0x7685('0x1d')],qs[_0x7685('0x35')](_0x5e0bac[_0x7685('0x1f')][_0x7685('0x35')]));_0xc45876[_0x7685('0x24')]=_0xc45876[_0x7685('0x24')][_0x7685('0x25')]?_0xc45876['attributes']:_0x3d3cf5[_0x7685('0x1d')];if(_0x5e0bac[_0x7685('0x1f')][_0x7685('0x2e')]){_0xc45876['include']=[{'all':!![]}];}_0xc45876=_['merge']({},_0xc45876,_0x5e0bac[_0x7685('0x2d')]);return db[_0x7685('0x1b')]['find'](_0xc45876)['then'](handleEntityNotFound(_0xf39547,null))[_0x7685('0x17')](respondWithResult(_0xf39547,null))['catch'](handleError(_0xf39547,null));};exports[_0x7685('0x36')]=function(_0x423a99,_0x1cdee4){return db[_0x7685('0x1b')][_0x7685('0x36')](_0x423a99['body'],{})['then'](respondWithResult(_0x1cdee4,0xc9))[_0x7685('0x32')](handleError(_0x1cdee4,null));};exports[_0x7685('0x16')]=function(_0x56e2da,_0x3353af){if(_0x56e2da[_0x7685('0x37')]['id']){delete _0x56e2da[_0x7685('0x37')]['id'];}return db[_0x7685('0x1b')][_0x7685('0x38')]({'where':{'id':_0x56e2da[_0x7685('0x34')]['id']}})[_0x7685('0x17')](handleEntityNotFound(_0x3353af,null))['then'](saveUpdates(_0x56e2da[_0x7685('0x37')],null))[_0x7685('0x17')](respondWithResult(_0x3353af,null))[_0x7685('0x32')](handleError(_0x3353af,null));};exports[_0x7685('0x18')]=function(_0x54a1af,_0x66fb8d){return db[_0x7685('0x1b')][_0x7685('0x38')]({'where':{'id':_0x54a1af['params']['id']}})[_0x7685('0x17')](handleEntityNotFound(_0x66fb8d,null))[_0x7685('0x17')](removeEntity(_0x66fb8d,null))[_0x7685('0x32')](handleError(_0x66fb8d,null));};exports[_0x7685('0x39')]=function(_0x362dd3,_0x3e07e2,_0x2b8bc7){return db[_0x7685('0x3a')][_0x7685('0x38')]({'where':{'id':_0x362dd3[_0x7685('0x34')]['id']}})[_0x7685('0x17')](handleEntityNotFound(_0x3e07e2,null))[_0x7685('0x17')](function(_0x3475d2){if(_0x3475d2){return _0x3475d2[_0x7685('0x39')](_0x362dd3[_0x7685('0x37')]['ids'],_['omit'](_0x362dd3[_0x7685('0x37')],[_0x7685('0x3b'),'id'])||{});}})[_0x7685('0x17')](respondWithResult(_0x3e07e2,null))['catch'](handleError(_0x3e07e2,null));};exports[_0x7685('0x3c')]=function(_0x374ded,_0x43faed,_0x7b1531){var _0x59d748={};var _0x1fa3cf={};var _0x5425f7;var _0x4d2b31;return db[_0x7685('0x1b')][_0x7685('0x3d')]({'where':{'id':_0x374ded[_0x7685('0x34')]['id']}})[_0x7685('0x17')](handleEntityNotFound(_0x43faed,null))[_0x7685('0x17')](function(_0xb69f86){if(_0xb69f86){_0x5425f7=_0xb69f86;_0x1fa3cf[_0x7685('0x1d')]=_[_0x7685('0x1e')](db['CmContact']['rawAttributes']);_0x1fa3cf[_0x7685('0x1f')]=_[_0x7685('0x1e')](_0x374ded[_0x7685('0x1f')]);_0x1fa3cf[_0x7685('0x22')]=_['intersection'](_0x1fa3cf[_0x7685('0x1d')],_0x1fa3cf[_0x7685('0x1f')]);_0x59d748[_0x7685('0x24')]=_[_0x7685('0x23')](_0x1fa3cf['model'],qs['fields'](_0x374ded[_0x7685('0x1f')][_0x7685('0x35')]));_0x59d748['attributes']=_0x59d748[_0x7685('0x24')][_0x7685('0x25')]?_0x59d748[_0x7685('0x24')]:_0x1fa3cf['model'];_0x59d748['order']=qs['sort'](_0x374ded['query'][_0x7685('0x27')]);_0x59d748[_0x7685('0x2c')]=qs[_0x7685('0x22')](_['pick'](_0x374ded[_0x7685('0x1f')],_0x1fa3cf[_0x7685('0x22')]));if(_0x374ded['query'][_0x7685('0x3e')]){_0x59d748[_0x7685('0x2c')]=_['merge'](_0x59d748['where'],{'$or':_[_0x7685('0x3f')](_0x59d748[_0x7685('0x24')],function(_0x3138fa){var _0x2e9569={};_0x2e9569[_0x3138fa]={'$like':'%'+_0x374ded[_0x7685('0x1f')][_0x7685('0x3e')]+'%'};return _0x2e9569;})});}_0x59d748=_['merge']({},_0x59d748,_0x374ded[_0x7685('0x2d')]);return _0x5425f7[_0x7685('0x3c')](_0x59d748);}})[_0x7685('0x17')](function(_0x161b12){if(_0x161b12){_0x4d2b31=_0x161b12[_0x7685('0x25')];if(!_0x374ded[_0x7685('0x1f')][_0x7685('0x40')](_0x7685('0x41'))){_0x59d748[_0x7685('0x12')]=qs[_0x7685('0x12')](_0x374ded[_0x7685('0x1f')][_0x7685('0x12')]);_0x59d748['offset']=qs[_0x7685('0x11')](_0x374ded[_0x7685('0x1f')][_0x7685('0x11')]);}return _0x5425f7[_0x7685('0x3c')](_0x59d748);}})[_0x7685('0x17')](function(_0x46d3de){if(_0x46d3de){return _0x46d3de?{'count':_0x4d2b31,'rows':_0x46d3de}:null;}})[_0x7685('0x17')](respondWithResult(_0x43faed,null))[_0x7685('0x32')](handleError(_0x43faed,null));};
\ No newline at end of file
+var _0x861c=['include','rows','show','params','rawAttributes','find','catch','body','addContacts','CmContact','ids','omit','getContacts','findOne','map','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','json','count','offset','limit','status','set','Content-Range','reject','save','then','destroy','error','stack','name','send','index','CmCompany','model','query','dateStart','dateEnd','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','filter','options','includeAll'];(function(_0x4eb00b,_0x22adaf){var _0x2dd4bf=function(_0x5e3d6e){while(--_0x5e3d6e){_0x4eb00b['push'](_0x4eb00b['shift']());}};_0x2dd4bf(++_0x22adaf);}(_0x861c,0x1d1));var _0xc861=function(_0x4565bf,_0x5ad9d6){_0x4565bf=_0x4565bf-0x0;var _0x5610ba=_0x861c[_0x4565bf];return _0x5610ba;};'use strict';var jsonpatch=require(_0xc861('0x0'));var rp=require(_0xc861('0x1'));var moment=require(_0xc861('0x2'));var BPromise=require(_0xc861('0x3'));var Mustache=require(_0xc861('0x4'));var util=require(_0xc861('0x5'));var path=require(_0xc861('0x6'));var sox=require(_0xc861('0x7'));var csv=require(_0xc861('0x8'));var ejs=require(_0xc861('0x9'));var fs=require('fs');var _=require(_0xc861('0xa'));var squel=require(_0xc861('0xb'));var crypto=require('crypto');var jsforce=require(_0xc861('0xc'));var deskjs=require(_0xc861('0xd'));var toCsv=require(_0xc861('0x8'));var querystring=require(_0xc861('0xe'));var Papa=require(_0xc861('0xf'));var qs=require('../../components/parsers/qs');var logger=require(_0xc861('0x10'))(_0xc861('0x11'));var utils=require(_0xc861('0x12'));var config=require('../../config/environment');var db=require(_0xc861('0x13'))['db'];function respondWithStatusCode(_0x3b03cd,_0x648f2a){_0x648f2a=_0x648f2a||0xcc;return function(_0x46be1c){if(_0x46be1c){return _0x3b03cd[_0xc861('0x14')](_0x648f2a);}return _0x3b03cd['status'](_0x648f2a)['end']();};}function respondWithResult(_0x130794,_0x8860f1){_0x8860f1=_0x8860f1||0xc8;return function(_0x5b9270){if(_0x5b9270){return _0x130794['status'](_0x8860f1)[_0xc861('0x15')](_0x5b9270);}};}function respondWithFilteredResult(_0xc26f34,_0x3ea6d7){return function(_0x1e712b){if(_0x1e712b){var _0x37039b=_0x1e712b[_0xc861('0x16')],_0x56fe20=_0x3ea6d7[_0xc861('0x17')],_0x29c088=_0x3ea6d7[_0xc861('0x17')]+_0x3ea6d7[_0xc861('0x18')],_0x551543;if(_0x29c088>=_0x37039b){_0x29c088=_0x37039b;_0x551543=0xc8;}else{_0x551543=0xce;}_0xc26f34[_0xc861('0x19')](_0x551543);return _0xc26f34[_0xc861('0x1a')](_0xc861('0x1b'),_0x56fe20+'-'+_0x29c088+'/'+_0x37039b)['json'](_0x1e712b);}return null;};}function patchUpdates(_0x119240){return function(_0x9c6463){try{jsonpatch['apply'](_0x9c6463,_0x119240,!![]);}catch(_0x4d797b){return BPromise[_0xc861('0x1c')](_0x4d797b);}return _0x9c6463[_0xc861('0x1d')]();};}function saveUpdates(_0x106862,_0x29ec26){return function(_0x221736){if(_0x221736){return _0x221736['update'](_0x106862)[_0xc861('0x1e')](function(_0x86b88e){return _0x86b88e;});}return null;};}function removeEntity(_0x113a77,_0x46530b){return function(_0x553ede){if(_0x553ede){return _0x553ede[_0xc861('0x1f')]()[_0xc861('0x1e')](function(){_0x113a77['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x7f13be,_0x2c68d7){return function(_0x55fddb){if(!_0x55fddb){_0x7f13be[_0xc861('0x14')](0x194);}return _0x55fddb;};}function handleError(_0x221e8f,_0x4ed363){_0x4ed363=_0x4ed363||0x1f4;return function(_0x15f764){logger[_0xc861('0x20')](_0x15f764[_0xc861('0x21')]);if(_0x15f764[_0xc861('0x22')]){delete _0x15f764[_0xc861('0x22')];}_0x221e8f[_0xc861('0x19')](_0x4ed363)[_0xc861('0x23')](_0x15f764);};}exports[_0xc861('0x24')]=function(_0x42a5ae,_0x2ee066){var _0x557367={},_0x5d7217={},_0x483ffa={'count':0x0,'rows':[]};var _0x598395=db[_0xc861('0x25')]['rawAttributes'];_0x5d7217[_0xc861('0x26')]=_['keys'](_0x598395);var _0x48a844={'dateStart':_0x42a5ae['query']['dateStart'],'dateEnd':_0x42a5ae[_0xc861('0x27')]['dateEnd']};delete _0x42a5ae[_0xc861('0x27')][_0xc861('0x28')];delete _0x42a5ae[_0xc861('0x27')][_0xc861('0x29')];_0x5d7217[_0xc861('0x27')]=_[_0xc861('0x2a')](_0x42a5ae[_0xc861('0x27')]);_0x5d7217[_0xc861('0x2b')]=_[_0xc861('0x2c')](_0x5d7217[_0xc861('0x26')],_0x5d7217['query']);_0x557367[_0xc861('0x2d')]=_['intersection'](_0x5d7217[_0xc861('0x26')],qs[_0xc861('0x2e')](_0x42a5ae[_0xc861('0x27')][_0xc861('0x2e')]));_0x557367['attributes']=_0x557367['attributes'][_0xc861('0x2f')]?_0x557367[_0xc861('0x2d')]:_0x5d7217[_0xc861('0x26')];if(!_0x42a5ae[_0xc861('0x27')][_0xc861('0x30')](_0xc861('0x31'))){_0x557367[_0xc861('0x18')]=qs[_0xc861('0x18')](_0x42a5ae[_0xc861('0x27')]['limit']);_0x557367[_0xc861('0x17')]=qs['offset'](_0x42a5ae[_0xc861('0x27')]['offset']);}_0x557367[_0xc861('0x32')]=qs[_0xc861('0x33')](_0x42a5ae[_0xc861('0x27')][_0xc861('0x33')]);_0x557367[_0xc861('0x34')]=qs[_0xc861('0x2b')](_[_0xc861('0x35')](_0x42a5ae[_0xc861('0x27')],_0x5d7217[_0xc861('0x2b')]));if(_0x48a844[_0xc861('0x28')]){if(_0x48a844[_0xc861('0x29')]){_0x48a844[_0xc861('0x29')]=moment(_0x48a844[_0xc861('0x29')])[_0xc861('0x36')](0x1,_0xc861('0x37'));}else{_0x48a844[_0xc861('0x29')]=moment(_0x48a844[_0xc861('0x28')])[_0xc861('0x36')](0x1,_0xc861('0x37'));}_[_0xc861('0x38')](_0x557367[_0xc861('0x34')],{'createdAt':{'$gte':_0x48a844[_0xc861('0x28')],'$lte':_0x48a844[_0xc861('0x29')]}});}if(_0x42a5ae[_0xc861('0x27')]['filter']){_0x557367['where']=_['merge'](_0x557367[_0xc861('0x34')],{'$or':_['map'](_0x557367['attributes'],function(_0xa43d91){var _0x534e68={};_0x534e68[_0xa43d91]={'$like':'%'+_0x42a5ae[_0xc861('0x27')][_0xc861('0x39')]+'%'};return _0x534e68;})});}_0x557367=_[_0xc861('0x38')]({},_0x557367,_0x42a5ae[_0xc861('0x3a')]);var _0x5c1c55={'where':_0x557367[_0xc861('0x34')]};return db['CmCompany'][_0xc861('0x16')](_0x5c1c55)[_0xc861('0x1e')](function(_0x4a9841){_0x483ffa['count']=_0x4a9841;if(_0x42a5ae['query'][_0xc861('0x3b')]){_0x557367[_0xc861('0x3c')]=[{'all':!![]}];}return db[_0xc861('0x25')]['findAll'](_0x557367);})['then'](function(_0x4fa958){_0x483ffa[_0xc861('0x3d')]=_0x4fa958;return _0x483ffa;})[_0xc861('0x1e')](respondWithFilteredResult(_0x2ee066,_0x557367))['catch'](handleError(_0x2ee066,null));};exports[_0xc861('0x3e')]=function(_0xd82684,_0x4d723d){var _0xd2bb1f={'raw':![],'where':{'id':_0xd82684[_0xc861('0x3f')]['id']}},_0x5edeaa={};_0x5edeaa[_0xc861('0x26')]=_[_0xc861('0x2a')](db[_0xc861('0x25')][_0xc861('0x40')]);_0x5edeaa[_0xc861('0x27')]=_[_0xc861('0x2a')](_0xd82684[_0xc861('0x27')]);_0x5edeaa[_0xc861('0x2b')]=_['intersection'](_0x5edeaa[_0xc861('0x26')],_0x5edeaa[_0xc861('0x27')]);_0xd2bb1f[_0xc861('0x2d')]=_[_0xc861('0x2c')](_0x5edeaa[_0xc861('0x26')],qs[_0xc861('0x2e')](_0xd82684[_0xc861('0x27')][_0xc861('0x2e')]));_0xd2bb1f[_0xc861('0x2d')]=_0xd2bb1f[_0xc861('0x2d')]['length']?_0xd2bb1f[_0xc861('0x2d')]:_0x5edeaa[_0xc861('0x26')];if(_0xd82684[_0xc861('0x27')][_0xc861('0x3b')]){_0xd2bb1f[_0xc861('0x3c')]=[{'all':!![]}];}_0xd2bb1f=_[_0xc861('0x38')]({},_0xd2bb1f,_0xd82684[_0xc861('0x3a')]);return db[_0xc861('0x25')][_0xc861('0x41')](_0xd2bb1f)[_0xc861('0x1e')](handleEntityNotFound(_0x4d723d,null))[_0xc861('0x1e')](respondWithResult(_0x4d723d,null))[_0xc861('0x42')](handleError(_0x4d723d,null));};exports['create']=function(_0x5f0dab,_0x4d8098){return db[_0xc861('0x25')]['create'](_0x5f0dab['body'],{})[_0xc861('0x1e')](respondWithResult(_0x4d8098,0xc9))['catch'](handleError(_0x4d8098,null));};exports['update']=function(_0x29d2d5,_0x452252){if(_0x29d2d5[_0xc861('0x43')]['id']){delete _0x29d2d5[_0xc861('0x43')]['id'];}return db[_0xc861('0x25')]['find']({'where':{'id':_0x29d2d5[_0xc861('0x3f')]['id']}})['then'](handleEntityNotFound(_0x452252,null))[_0xc861('0x1e')](saveUpdates(_0x29d2d5[_0xc861('0x43')],null))[_0xc861('0x1e')](respondWithResult(_0x452252,null))['catch'](handleError(_0x452252,null));};exports['destroy']=function(_0x4a0cbb,_0x3efee8){return db['CmCompany'][_0xc861('0x41')]({'where':{'id':_0x4a0cbb[_0xc861('0x3f')]['id']}})[_0xc861('0x1e')](handleEntityNotFound(_0x3efee8,null))[_0xc861('0x1e')](removeEntity(_0x3efee8,null))[_0xc861('0x42')](handleError(_0x3efee8,null));};exports[_0xc861('0x44')]=function(_0x208189,_0x2b5563,_0x33f2ec){return db[_0xc861('0x45')][_0xc861('0x41')]({'where':{'id':_0x208189[_0xc861('0x3f')]['id']}})['then'](handleEntityNotFound(_0x2b5563,null))['then'](function(_0x3e74fc){if(_0x3e74fc){return _0x3e74fc['addContacts'](_0x208189[_0xc861('0x43')][_0xc861('0x46')],_[_0xc861('0x47')](_0x208189[_0xc861('0x43')],[_0xc861('0x46'),'id'])||{});}})[_0xc861('0x1e')](respondWithResult(_0x2b5563,null))[_0xc861('0x42')](handleError(_0x2b5563,null));};exports[_0xc861('0x48')]=function(_0x5c3a62,_0xb15492,_0x42860c){var _0x27dbea={};var _0x3169b3={};var _0x3d1691;var _0xb3be30;return db[_0xc861('0x25')][_0xc861('0x49')]({'where':{'id':_0x5c3a62[_0xc861('0x3f')]['id']}})[_0xc861('0x1e')](handleEntityNotFound(_0xb15492,null))[_0xc861('0x1e')](function(_0x308016){if(_0x308016){_0x3d1691=_0x308016;_0x3169b3['model']=_[_0xc861('0x2a')](db[_0xc861('0x45')][_0xc861('0x40')]);_0x3169b3[_0xc861('0x27')]=_[_0xc861('0x2a')](_0x5c3a62['query']);_0x3169b3[_0xc861('0x2b')]=_[_0xc861('0x2c')](_0x3169b3['model'],_0x3169b3[_0xc861('0x27')]);_0x27dbea[_0xc861('0x2d')]=_['intersection'](_0x3169b3[_0xc861('0x26')],qs[_0xc861('0x2e')](_0x5c3a62[_0xc861('0x27')]['fields']));_0x27dbea[_0xc861('0x2d')]=_0x27dbea[_0xc861('0x2d')]['length']?_0x27dbea[_0xc861('0x2d')]:_0x3169b3[_0xc861('0x26')];_0x27dbea[_0xc861('0x32')]=qs[_0xc861('0x33')](_0x5c3a62[_0xc861('0x27')]['sort']);_0x27dbea['where']=qs[_0xc861('0x2b')](_[_0xc861('0x35')](_0x5c3a62[_0xc861('0x27')],_0x3169b3[_0xc861('0x2b')]));if(_0x5c3a62['query'][_0xc861('0x39')]){_0x27dbea[_0xc861('0x34')]=_[_0xc861('0x38')](_0x27dbea[_0xc861('0x34')],{'$or':_[_0xc861('0x4a')](_0x27dbea[_0xc861('0x2d')],function(_0x121fe4){var _0x45d004={};_0x45d004[_0x121fe4]={'$like':'%'+_0x5c3a62[_0xc861('0x27')][_0xc861('0x39')]+'%'};return _0x45d004;})});}_0x27dbea=_[_0xc861('0x38')]({},_0x27dbea,_0x5c3a62[_0xc861('0x3a')]);return _0x3d1691[_0xc861('0x48')](_0x27dbea);}})[_0xc861('0x1e')](function(_0x59ca0f){if(_0x59ca0f){_0xb3be30=_0x59ca0f[_0xc861('0x2f')];if(!_0x5c3a62[_0xc861('0x27')][_0xc861('0x30')](_0xc861('0x31'))){_0x27dbea[_0xc861('0x18')]=qs['limit'](_0x5c3a62[_0xc861('0x27')][_0xc861('0x18')]);_0x27dbea[_0xc861('0x17')]=qs[_0xc861('0x17')](_0x5c3a62[_0xc861('0x27')][_0xc861('0x17')]);}return _0x3d1691[_0xc861('0x48')](_0x27dbea);}})[_0xc861('0x1e')](function(_0x56d09d){if(_0x56d09d){return _0x56d09d?{'count':_0xb3be30,'rows':_0x56d09d}:null;}})[_0xc861('0x1e')](respondWithResult(_0xb15492,null))[_0xc861('0x42')](handleError(_0xb15492,null));};
\ No newline at end of file
index 70ffd74..77d95d3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6599=['bluebird','./cmCompany.attributes','define','CmCompany','cm_companies','util','../../config/logger','api','moment'];(function(_0x1354e2,_0x25e05d){var _0x13ea27=function(_0x40d903){while(--_0x40d903){_0x1354e2['push'](_0x1354e2['shift']());}};_0x13ea27(++_0x25e05d);}(_0x6599,0xb0));var _0x9659=function(_0x2298f0,_0x3bbf4f){_0x2298f0=_0x2298f0-0x0;var _0x39b136=_0x6599[_0x2298f0];return _0x39b136;};'use strict';var _=require('lodash');var util=require(_0x9659('0x0'));var logger=require(_0x9659('0x1'))(_0x9659('0x2'));var moment=require(_0x9659('0x3'));var BPromise=require(_0x9659('0x4'));var rp=require('request-promise');var attributes=require(_0x9659('0x5'));module['exports']=function(_0x2f5d38,_0x4fd132){return _0x2f5d38[_0x9659('0x6')](_0x9659('0x7'),attributes,{'tableName':_0x9659('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xc368=['./cmCompany.attributes','define','CmCompany','util','api','moment','bluebird','request-promise'];(function(_0x437562,_0x38c4dd){var _0xb52d2=function(_0x39535e){while(--_0x39535e){_0x437562['push'](_0x437562['shift']());}};_0xb52d2(++_0x38c4dd);}(_0xc368,0x7b));var _0x8c36=function(_0x4618a7,_0x288cf6){_0x4618a7=_0x4618a7-0x0;var _0x9fc86c=_0xc368[_0x4618a7];return _0x9fc86c;};'use strict';var _=require('lodash');var util=require(_0x8c36('0x0'));var logger=require('../../config/logger')(_0x8c36('0x1'));var moment=require(_0x8c36('0x2'));var BPromise=require(_0x8c36('0x3'));var rp=require(_0x8c36('0x4'));var attributes=require(_0x8c36('0x5'));module['exports']=function(_0x3e9034,_0x3bb30e){return _0x3e9034[_0x8c36('0x6')](_0x8c36('0x7'),attributes,{'tableName':'cm_companies','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bdf2bff..a37644b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeda8=['../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','debug','CmCompany,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','CmCompany,\x20%s,\x20%s','message','info','lodash','util','bluebird','randomstring'];(function(_0x43688e,_0x4125f8){var _0x4f626a=function(_0x3097a4){while(--_0x3097a4){_0x43688e['push'](_0x43688e['shift']());}};_0x4f626a(++_0x4125f8);}(_0xeda8,0x104));var _0x8eda=function(_0x24eebc,_0x83f873){_0x24eebc=_0x24eebc-0x0;var _0x466711=_0xeda8[_0x24eebc];return _0x466711;};'use strict';var _=require(_0x8eda('0x0'));var util=require(_0x8eda('0x1'));var moment=require('moment');var BPromise=require(_0x8eda('0x2'));var rs=require(_0x8eda('0x3'));var fs=require('fs');var db=require(_0x8eda('0x4'))['db'];var utils=require(_0x8eda('0x5'));var logger=require(_0x8eda('0x6'))(_0x8eda('0x7'));var config=require(_0x8eda('0x8'));var jayson=require(_0x8eda('0x9'));var client=jayson[_0x8eda('0xa')][_0x8eda('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x349361,_0x32abe8,_0x4e2ebb){return new BPromise(function(_0x28b721,_0x1b6a1d){return client[_0x8eda('0xc')](_0x349361,_0x4e2ebb)[_0x8eda('0xd')](function(_0x4be9df){logger['info']('CmCompany,\x20%s,\x20%s',_0x32abe8,'request\x20sent');logger[_0x8eda('0xe')](_0x8eda('0xf'),_0x32abe8,_0x8eda('0x10'),JSON['stringify'](_0x4be9df));if(_0x4be9df[_0x8eda('0x11')]){if(_0x4be9df['error'][_0x8eda('0x12')]===0x1f4){logger[_0x8eda('0x11')](_0x8eda('0x13'),_0x32abe8,_0x4be9df[_0x8eda('0x11')][_0x8eda('0x14')]);return _0x1b6a1d(_0x4be9df[_0x8eda('0x11')][_0x8eda('0x14')]);}logger[_0x8eda('0x11')]('CmCompany,\x20%s,\x20%s',_0x32abe8,_0x4be9df['error'][_0x8eda('0x14')]);return _0x28b721(_0x4be9df[_0x8eda('0x11')]['message']);}else{logger[_0x8eda('0x15')](_0x8eda('0x13'),_0x32abe8,_0x8eda('0x10'));_0x28b721(_0x4be9df['result'][_0x8eda('0x14')]);}})['catch'](function(_0xf7d764){logger['error'](_0x8eda('0x13'),_0x32abe8,_0xf7d764);_0x1b6a1d(_0xf7d764);});});}
\ No newline at end of file
+var _0x425d=['lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','CmCompany,\x20%s,\x20%s','request\x20sent','debug','CmCompany,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0x425d,0x1e0));var _0xd425=function(_0x4fecf3,_0x17fdb0){_0x4fecf3=_0x4fecf3-0x0;var _0x50161f=_0x425d[_0x4fecf3];return _0x50161f;};'use strict';var _=require(_0xd425('0x0'));var util=require('util');var moment=require(_0xd425('0x1'));var BPromise=require(_0xd425('0x2'));var rs=require(_0xd425('0x3'));var fs=require('fs');var db=require(_0xd425('0x4'))['db'];var utils=require(_0xd425('0x5'));var logger=require(_0xd425('0x6'))(_0xd425('0x7'));var config=require('../../config/environment');var jayson=require(_0xd425('0x8'));var client=jayson[_0xd425('0x9')][_0xd425('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x36866e,_0x1d97d9,_0x1d2ed0){return new BPromise(function(_0x50b061,_0xb6ba8e){return client[_0xd425('0xb')](_0x36866e,_0x1d2ed0)[_0xd425('0xc')](function(_0x3c4db2){logger[_0xd425('0xd')](_0xd425('0xe'),_0x1d97d9,_0xd425('0xf'));logger[_0xd425('0x10')](_0xd425('0x11'),_0x1d97d9,_0xd425('0xf'),JSON[_0xd425('0x12')](_0x3c4db2));if(_0x3c4db2[_0xd425('0x13')]){if(_0x3c4db2[_0xd425('0x13')][_0xd425('0x14')]===0x1f4){logger[_0xd425('0x13')](_0xd425('0xe'),_0x1d97d9,_0x3c4db2[_0xd425('0x13')][_0xd425('0x15')]);return _0xb6ba8e(_0x3c4db2[_0xd425('0x13')][_0xd425('0x15')]);}logger['error'](_0xd425('0xe'),_0x1d97d9,_0x3c4db2[_0xd425('0x13')][_0xd425('0x15')]);return _0x50b061(_0x3c4db2['error'][_0xd425('0x15')]);}else{logger[_0xd425('0xd')](_0xd425('0xe'),_0x1d97d9,_0xd425('0xf'));_0x50b061(_0x3c4db2[_0xd425('0x16')]['message']);}})[_0xd425('0x17')](function(_0x471267){logger[_0xd425('0x13')](_0xd425('0xe'),_0x1d97d9,_0x471267);_0xb6ba8e(_0x471267);});});}
\ No newline at end of file
index 012224b..5e71ad8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8c7f=['get','/:id','/:id/contacts','getContacts','post','addContacts','update','delete','destroy','exports','multer','util','path','express','Router','../../config/environment','./cmCompany.controller','isAuthenticated','index'];(function(_0x323b2b,_0xa419f6){var _0x5f2336=function(_0x3ba7d3){while(--_0x3ba7d3){_0x323b2b['push'](_0x323b2b['shift']());}};_0x5f2336(++_0xa419f6);}(_0x8c7f,0xa2));var _0xf8c7=function(_0x5ddb1c,_0x5ea4df){_0x5ddb1c=_0x5ddb1c-0x0;var _0x354adc=_0x8c7f[_0x5ddb1c];return _0x354adc;};'use strict';var multer=require(_0xf8c7('0x0'));var util=require(_0xf8c7('0x1'));var path=require(_0xf8c7('0x2'));var express=require(_0xf8c7('0x3'));var router=express[_0xf8c7('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xf8c7('0x5'));var controller=require(_0xf8c7('0x6'));router['get']('/',auth[_0xf8c7('0x7')](),controller[_0xf8c7('0x8')]);router[_0xf8c7('0x9')](_0xf8c7('0xa'),auth[_0xf8c7('0x7')](),controller['show']);router[_0xf8c7('0x9')](_0xf8c7('0xb'),auth['isAuthenticated'](),controller[_0xf8c7('0xc')]);router[_0xf8c7('0xd')]('/',auth[_0xf8c7('0x7')](),controller['create']);router[_0xf8c7('0xd')](_0xf8c7('0xb'),auth[_0xf8c7('0x7')](),controller[_0xf8c7('0xe')]);router['put'](_0xf8c7('0xa'),auth[_0xf8c7('0x7')](),controller[_0xf8c7('0xf')]);router[_0xf8c7('0x10')]('/:id',auth['isAuthenticated'](),controller[_0xf8c7('0x11')]);module[_0xf8c7('0x12')]=router;
\ No newline at end of file
+var _0x9d55=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmCompany.controller','isAuthenticated','index','/:id','/:id/contacts','getContacts','post','addContacts','delete','destroy','exports','multer'];(function(_0xcb7f66,_0x4ae4dd){var _0x307c76=function(_0x57b963){while(--_0x57b963){_0xcb7f66['push'](_0xcb7f66['shift']());}};_0x307c76(++_0x4ae4dd);}(_0x9d55,0x1b9));var _0x59d5=function(_0x25e615,_0x385a85){_0x25e615=_0x25e615-0x0;var _0x253401=_0x9d55[_0x25e615];return _0x253401;};'use strict';var multer=require(_0x59d5('0x0'));var util=require('util');var path=require('path');var express=require(_0x59d5('0x1'));var router=express[_0x59d5('0x2')]();var auth=require(_0x59d5('0x3'));var interaction=require(_0x59d5('0x4'));var config=require(_0x59d5('0x5'));var controller=require(_0x59d5('0x6'));router['get']('/',auth[_0x59d5('0x7')](),controller[_0x59d5('0x8')]);router['get'](_0x59d5('0x9'),auth[_0x59d5('0x7')](),controller['show']);router['get'](_0x59d5('0xa'),auth[_0x59d5('0x7')](),controller[_0x59d5('0xb')]);router[_0x59d5('0xc')]('/',auth[_0x59d5('0x7')](),controller['create']);router[_0x59d5('0xc')](_0x59d5('0xa'),auth['isAuthenticated'](),controller[_0x59d5('0xd')]);router['put']('/:id',auth['isAuthenticated'](),controller['update']);router[_0x59d5('0xe')]('/:id',auth[_0x59d5('0x7')](),controller[_0x59d5('0xf')]);module[_0x59d5('0x10')]=router;
\ No newline at end of file
index 948c7e1..eea5730 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x51ed=['sequelize','STRING','TEXT','INTEGER','UNSIGNED','DATE','NOW','lodash'];(function(_0x263b0e,_0xc6479f){var _0x113fee=function(_0x803881){while(--_0x803881){_0x263b0e['push'](_0x263b0e['shift']());}};_0x113fee(++_0xc6479f);}(_0x51ed,0xef));var _0xd51e=function(_0x1215cd,_0x35dc1f){_0x1215cd=_0x1215cd-0x0;var _0x52ecef=_0x51ed[_0x1215cd];return _0x52ecef;};'use strict';var _=require(_0xd51e('0x0'));var Sequelize=require(_0xd51e('0x1'));module['exports']={'firstName':{'type':Sequelize[_0xd51e('0x2')],'allowNull':![]},'lastName':{'type':Sequelize['STRING']},'street':{'type':Sequelize[_0xd51e('0x2')]},'postalCode':{'type':Sequelize[_0xd51e('0x2')]},'city':{'type':Sequelize[_0xd51e('0x2')]},'country':{'type':Sequelize[_0xd51e('0x2')]},'dateOfBirth':{'type':Sequelize[_0xd51e('0x2')]},'description':{'type':Sequelize[_0xd51e('0x3')]},'phone':{'type':Sequelize[_0xd51e('0x2')]},'mobile':{'type':Sequelize[_0xd51e('0x2')]},'fax':{'type':Sequelize[_0xd51e('0x2')]},'email':{'type':Sequelize[_0xd51e('0x2')]},'url':{'type':Sequelize[_0xd51e('0x2')]},'facebook':{'type':Sequelize[_0xd51e('0x2')]},'twitter':{'type':Sequelize[_0xd51e('0x2')]},'skype':{'type':Sequelize[_0xd51e('0x2')]},'teams':{'type':Sequelize['STRING']},'viber':{'type':Sequelize[_0xd51e('0x2')]},'line':{'type':Sequelize[_0xd51e('0x2')]},'UserId':{'type':Sequelize[_0xd51e('0x4')]},'priority':{'type':Sequelize[_0xd51e('0x4')](0x2)[_0xd51e('0x5')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'scheduledat':{'type':Sequelize[_0xd51e('0x6')],'defaultValue':Sequelize[_0xd51e('0x7')]}};
\ No newline at end of file
+var _0xbe72=['lodash','sequelize','STRING','TEXT','INTEGER','UNSIGNED','DATE','NOW'];(function(_0x116d5d,_0xc3260){var _0x17f7ae=function(_0x2915b8){while(--_0x2915b8){_0x116d5d['push'](_0x116d5d['shift']());}};_0x17f7ae(++_0xc3260);}(_0xbe72,0xe8));var _0x2be7=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0xbe72[_0x2dafbe];return _0x58a45a;};'use strict';var _=require(_0x2be7('0x0'));var Sequelize=require(_0x2be7('0x1'));module['exports']={'firstName':{'type':Sequelize['STRING'],'allowNull':![]},'lastName':{'type':Sequelize['STRING']},'street':{'type':Sequelize[_0x2be7('0x2')]},'postalCode':{'type':Sequelize[_0x2be7('0x2')]},'city':{'type':Sequelize[_0x2be7('0x2')]},'country':{'type':Sequelize[_0x2be7('0x2')]},'dateOfBirth':{'type':Sequelize[_0x2be7('0x2')]},'description':{'type':Sequelize[_0x2be7('0x3')]},'phone':{'type':Sequelize[_0x2be7('0x2')]},'mobile':{'type':Sequelize[_0x2be7('0x2')]},'fax':{'type':Sequelize[_0x2be7('0x2')]},'email':{'type':Sequelize[_0x2be7('0x2')]},'url':{'type':Sequelize[_0x2be7('0x2')]},'facebook':{'type':Sequelize[_0x2be7('0x2')]},'twitter':{'type':Sequelize[_0x2be7('0x2')]},'skype':{'type':Sequelize[_0x2be7('0x2')]},'teams':{'type':Sequelize['STRING']},'viber':{'type':Sequelize[_0x2be7('0x2')]},'line':{'type':Sequelize[_0x2be7('0x2')]},'UserId':{'type':Sequelize[_0x2be7('0x4')]},'priority':{'type':Sequelize[_0x2be7('0x4')](0x2)[_0x2be7('0x5')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'scheduledat':{'type':Sequelize[_0x2be7('0x6')],'defaultValue':Sequelize[_0x2be7('0x7')]}};
\ No newline at end of file
index e8b8bc6..eb752ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9276=['socket.io-emitter','localhost','./cmContact.socket','register','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','update','destroy','then','name','index','CmContact','describe','model','keys','query','dateStart','filters','intersection','attributes','fields','hasOwnProperty','nolimit','limit','sort','where','pick','dateEnd','add','day','merge','filter','map','include','tag','push','Tag','includeAll','Tags','color','ThroughTags','findAll','rows','params','catch','body','from','get','mergeWith','isArray','tags','join','info','CmHopper','[CmContact][merge][destroy][CmHopperBlack],\x20%s','create','ChatInteraction','ChatMessage','ChatOfflineMessage','MailInteraction','MailMessage','SmsInteraction','SmsMessage','FaxMessage','OpenchannelInteraction','OpenchannelMessage','CmHopperHistory','ReportAgentPreview','VoiceCallReport','ChatQueueReport','FaxQueueReport','JscriptySessionReport','length','each','duplicates','$or','ListId','findOrCreate','spread','show','find','CmCustomField','omit','pickBy','startsWith','cf_','format','cf_%d','isEmpty','table','setFields','id\x20=\x20?','toParam','sequelize','text','values','phone','getTags','findOne','rawAttributes','order','setTags','ids','getHoppers','options','getHopperHistories','ContactId','getHopperFinals','CmHopperFinal','getJscriptySessions','uploadCsv','binding_keys','No\x20association\x20values\x20specified!','socket_timestamp','Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed','split','binding_values','Incorrect\x20binding\x20parameters\x20passed!','zipObject','firstName','No\x20firstName\x20column\x20specified','root','server/files/tmp','file','chmodSync','child_process','fork','../../components/import/cm/csv','CompanyId','File\x20uploaded\x20correctly!','send','upload','createReadStream','parse','User','No\x20ListId\x20specified','binding','No\x20phone\x20column\x20specified','../../components/import/cm/csv2','stringify','message','start\x20child\x20process\x20correctly!','pid','exit','error\x20child\x20process','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment'];(function(_0x2c044c,_0x217c40){var _0x2144a0=function(_0x3a4696){while(--_0x3a4696){_0x2c044c['push'](_0x2c044c['shift']());}};_0x2144a0(++_0x217c40);}(_0x9276,0x145));var _0x6927=function(_0x1b4d3b,_0x39c995){_0x1b4d3b=_0x1b4d3b-0x0;var _0x51adeb=_0x9276[_0x1b4d3b];return _0x51adeb;};'use strict';var jsonpatch=require(_0x6927('0x0'));var rp=require(_0x6927('0x1'));var moment=require(_0x6927('0x2'));var BPromise=require(_0x6927('0x3'));var Mustache=require('mustache');var util=require(_0x6927('0x4'));var path=require(_0x6927('0x5'));var sox=require(_0x6927('0x6'));var csv=require(_0x6927('0x7'));var ejs=require(_0x6927('0x8'));var fs=require('fs');var _=require(_0x6927('0x9'));var squel=require(_0x6927('0xa'));var crypto=require('crypto');var jsforce=require(_0x6927('0xb'));var deskjs=require(_0x6927('0xc'));var toCsv=require('to-csv');var querystring=require(_0x6927('0xd'));var Papa=require(_0x6927('0xe'));var qs=require(_0x6927('0xf'));var logger=require(_0x6927('0x10'))('api');var utils=require(_0x6927('0x11'));var config=require(_0x6927('0x12'));var db=require('../../mysqldb')['db'];var socket=require(_0x6927('0x13'))({'host':_0x6927('0x14'),'port':0x18eb});require(_0x6927('0x15'))[_0x6927('0x16')](socket);function respondWithStatusCode(_0x1a5cfd,_0x4c0a26){_0x4c0a26=_0x4c0a26||0xcc;return function(_0x34730c){if(_0x34730c){return _0x1a5cfd[_0x6927('0x17')](_0x4c0a26);}return _0x1a5cfd[_0x6927('0x18')](_0x4c0a26)[_0x6927('0x19')]();};}function respondWithResult(_0x588416,_0xf87765){_0xf87765=_0xf87765||0xc8;return function(_0x3b3735){if(_0x3b3735){return _0x588416[_0x6927('0x18')](_0xf87765)[_0x6927('0x1a')](_0x3b3735);}};}function respondWithFilteredResult(_0x572171,_0x53bd72){return function(_0x464eb2){if(_0x464eb2){var _0x17a3fd=_0x464eb2[_0x6927('0x1b')],_0x50676f=_0x53bd72[_0x6927('0x1c')],_0xf9ed81=_0x53bd72[_0x6927('0x1c')]+_0x53bd72['limit'],_0x3b75a9;if(_0xf9ed81>=_0x17a3fd){_0xf9ed81=_0x17a3fd;_0x3b75a9=0xc8;}else{_0x3b75a9=0xce;}_0x572171[_0x6927('0x18')](_0x3b75a9);return _0x572171[_0x6927('0x1d')](_0x6927('0x1e'),_0x50676f+'-'+_0xf9ed81+'/'+_0x17a3fd)[_0x6927('0x1a')](_0x464eb2);}return null;};}function patchUpdates(_0x769b47){return function(_0x40395e){try{jsonpatch['apply'](_0x40395e,_0x769b47,!![]);}catch(_0x5f5740){return BPromise[_0x6927('0x1f')](_0x5f5740);}return _0x40395e[_0x6927('0x20')]();};}function saveUpdates(_0x15894a,_0x377da3){return function(_0x13be0c){if(_0x13be0c){return _0x13be0c[_0x6927('0x21')](_0x15894a)['then'](function(_0x29bdb1){return _0x29bdb1;});}return null;};}function removeEntity(_0x278a9a,_0x22288c){return function(_0xc8c329){if(_0xc8c329){return _0xc8c329[_0x6927('0x22')]()[_0x6927('0x23')](function(){_0x278a9a[_0x6927('0x18')](0xcc)[_0x6927('0x19')]();});}};}function handleEntityNotFound(_0x25d5d2,_0x501a9f){return function(_0x32b4ac){if(!_0x32b4ac){_0x25d5d2[_0x6927('0x17')](0x194);}return _0x32b4ac;};}function handleError(_0x2e92ea,_0x42d3ad){_0x42d3ad=_0x42d3ad||0x1f4;return function(_0xe7cbd4){logger['error'](_0xe7cbd4['stack']);if(_0xe7cbd4[_0x6927('0x24')]){delete _0xe7cbd4[_0x6927('0x24')];}_0x2e92ea['status'](_0x42d3ad)['send'](_0xe7cbd4);};}exports[_0x6927('0x25')]=function(_0x2366f5,_0x35830e){var _0x1d3a68={},_0x1e5d61={},_0xa75383={'count':0x0,'rows':[]};return db[_0x6927('0x26')][_0x6927('0x27')]()[_0x6927('0x23')](function(_0x47c36e){_0x1e5d61[_0x6927('0x28')]=_[_0x6927('0x29')](_0x47c36e);var _0x5d9282={'dateStart':_0x2366f5[_0x6927('0x2a')][_0x6927('0x2b')],'dateEnd':_0x2366f5[_0x6927('0x2a')]['dateEnd']};delete _0x2366f5[_0x6927('0x2a')][_0x6927('0x2b')];delete _0x2366f5[_0x6927('0x2a')]['dateEnd'];_0x1e5d61[_0x6927('0x2a')]=_[_0x6927('0x29')](_0x2366f5['query']);_0x1e5d61[_0x6927('0x2c')]=_[_0x6927('0x2d')](_0x1e5d61[_0x6927('0x28')],_0x1e5d61['query']);_0x1d3a68[_0x6927('0x2e')]=_[_0x6927('0x2d')](_0x1e5d61['model'],qs[_0x6927('0x2f')](_0x2366f5[_0x6927('0x2a')]['fields']));_0x1d3a68[_0x6927('0x2e')]=_0x1d3a68[_0x6927('0x2e')]['length']?_0x1d3a68[_0x6927('0x2e')]:_0x1e5d61['model'];if(!_0x2366f5['query'][_0x6927('0x30')](_0x6927('0x31'))){_0x1d3a68[_0x6927('0x32')]=qs[_0x6927('0x32')](_0x2366f5[_0x6927('0x2a')][_0x6927('0x32')]);_0x1d3a68[_0x6927('0x1c')]=qs[_0x6927('0x1c')](_0x2366f5['query'][_0x6927('0x1c')]);}_0x1d3a68['order']=qs[_0x6927('0x33')](_0x2366f5[_0x6927('0x2a')][_0x6927('0x33')]);_0x1d3a68[_0x6927('0x34')]=qs[_0x6927('0x2c')](_[_0x6927('0x35')](_0x2366f5[_0x6927('0x2a')],_0x1e5d61[_0x6927('0x2c')]));if(_0x5d9282[_0x6927('0x2b')]){if(_0x5d9282[_0x6927('0x36')]){_0x5d9282[_0x6927('0x36')]=moment(_0x5d9282['dateEnd'])[_0x6927('0x37')](0x1,_0x6927('0x38'));}else{_0x5d9282[_0x6927('0x36')]=moment(_0x5d9282['dateStart'])['add'](0x1,_0x6927('0x38'));}_[_0x6927('0x39')](_0x1d3a68[_0x6927('0x34')],{'createdAt':{'$gte':_0x5d9282[_0x6927('0x2b')],'$lte':_0x5d9282[_0x6927('0x36')]}});}if(_0x2366f5['query'][_0x6927('0x3a')]){_0x1d3a68['where']=_[_0x6927('0x39')](_0x1d3a68[_0x6927('0x34')],{'$or':_[_0x6927('0x3b')](_0x1d3a68[_0x6927('0x2e')],function(_0x490b2f){var _0x26cdb9={};_0x26cdb9[_0x490b2f]={'$like':'%'+_0x2366f5[_0x6927('0x2a')][_0x6927('0x3a')]+'%'};return _0x26cdb9;})});}_0x1d3a68=_[_0x6927('0x39')]({},_0x1d3a68,_0x2366f5['options']);var _0x57c5c6={'where':_0x1d3a68['where']};_0x57c5c6[_0x6927('0x3c')]=[];if(_0x2366f5[_0x6927('0x2a')][_0x6927('0x3d')]){_0x57c5c6[_0x6927('0x3c')][_0x6927('0x3e')]({'model':db[_0x6927('0x3f')],'as':'Tags','attributes':['id'],'where':{'id':_0x2366f5[_0x6927('0x2a')][_0x6927('0x3d')]},'required':!![]});_0x57c5c6['distinct']=!![];}return db[_0x6927('0x26')]['count'](_0x57c5c6)[_0x6927('0x23')](function(_0x121379){_0xa75383['count']=_0x121379;if(_0x2366f5[_0x6927('0x2a')][_0x6927('0x40')]){_0x1d3a68['include']=[{'model':db['Tag'],'as':_0x6927('0x41'),'attributes':['id','name',_0x6927('0x42')],'required':_0x2366f5['query'][_0x6927('0x3d')]?!![]:![]},{'model':db[_0x6927('0x3f')],'as':_0x6927('0x43'),'attributes':['id',_0x6927('0x24'),_0x6927('0x42')],'through':_0x2366f5[_0x6927('0x2a')]['tag']?{'attributes':[],'where':{'TagId':_0x2366f5[_0x6927('0x2a')][_0x6927('0x3d')]||undefined}}:{},'required':_0x2366f5[_0x6927('0x2a')][_0x6927('0x3d')]?!![]:![]}];}return db['CmContact'][_0x6927('0x44')](_0x1d3a68);})[_0x6927('0x23')](function(_0xbcf66a){_0xa75383[_0x6927('0x45')]=_0xbcf66a;return _0xa75383;})[_0x6927('0x23')](respondWithFilteredResult(_0x35830e,_0x1d3a68))['catch'](handleError(_0x35830e,null));});};exports[_0x6927('0x22')]=function(_0x115f53,_0x140fb5){return db[_0x6927('0x26')]['find']({'where':{'id':_0x115f53[_0x6927('0x46')]['id']}})[_0x6927('0x23')](handleEntityNotFound(_0x140fb5,null))['then'](removeEntity(_0x140fb5,null))[_0x6927('0x47')](handleError(_0x140fb5,null));};exports['describe']=function(_0xe7d898,_0x569f79){return db['CmContact'][_0x6927('0x27')]()[_0x6927('0x23')](respondWithResult(_0x569f79,null))[_0x6927('0x47')](handleError(_0x569f79,null));};exports['merge']=function(_0x22c9b3,_0x1688fe){var _0x3a42f5;var _0x3ee0a9;var _0x1a73d6;if(_0x22c9b3['body']['id']){delete _0x22c9b3[_0x6927('0x48')]['id'];}return db[_0x6927('0x26')][_0x6927('0x44')]({'where':{'id':[_0x22c9b3[_0x6927('0x48')]['to'],_0x22c9b3['body'][_0x6927('0x49')]]}})[_0x6927('0x23')](function(_0x2d7906){if(_0x2d7906){if(_0x2d7906['length']!==0x2){return null;}_0x2d7906[0x0]=_0x2d7906[0x0][_0x6927('0x4a')]({'plain':!![]});_0x2d7906[0x1]=_0x2d7906[0x1][_0x6927('0x4a')]({'plain':!![]});delete _0x2d7906[0x0]['id'];delete _0x2d7906[0x1]['id'];return _[_0x6927('0x4b')](_0x2d7906[0x0],_0x2d7906[0x1],function(_0x573fab,_0x3fd2fc){if(Array[_0x6927('0x4c')](_0x3fd2fc)&&!_0x3fd2fc['length']){return _0x573fab;}else if(!_0x3fd2fc){return _0x573fab;}});}})[_0x6927('0x23')](handleEntityNotFound(_0x1688fe,null))['then'](function(_0x3f5d98){if(_0x3f5d98){if(_0x3f5d98[_0x6927('0x4d')]&&_[_0x6927('0x4c')](_0x3f5d98[_0x6927('0x4d')])){_0x3f5d98['tags']=_0x3f5d98[_0x6927('0x4d')][_0x6927('0x4e')]();}logger[_0x6927('0x4f')]('[CmContact][merge]\x20to\x20%s\x20from\x20%s',_0x22c9b3[_0x6927('0x48')]['to'],_0x22c9b3['body']['from']);return db[_0x6927('0x50')][_0x6927('0x22')]({'where':{'ContactId':[_0x22c9b3[_0x6927('0x48')]['to'],_0x22c9b3[_0x6927('0x48')][_0x6927('0x49')]]}})[_0x6927('0x23')](function(_0x18b4c5){logger[_0x6927('0x4f')]('[CmContact][merge][destroy][CmHopper],\x20%s',_0x18b4c5);return db['CmHopperBlack'][_0x6927('0x22')]({'where':{'ContactId':[_0x22c9b3[_0x6927('0x48')]['to'],_0x22c9b3[_0x6927('0x48')][_0x6927('0x49')]]}})[_0x6927('0x23')](function(_0xe4ca09){logger[_0x6927('0x4f')](_0x6927('0x51'),_0xe4ca09);return db[_0x6927('0x26')][_0x6927('0x52')](_0x3f5d98);});});}})['then'](function(_0x5d863f){if(_0x5d863f){_0x3a42f5=_0x5d863f;_0x3ee0a9={'ContactId':_0x3a42f5['id']};_0x1a73d6={'where':{'ContactId':[_0x22c9b3[_0x6927('0x48')]['to'],_0x22c9b3[_0x6927('0x48')][_0x6927('0x49')]]}};return db[_0x6927('0x53')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})['then'](function(){if(_0x3a42f5){return db[_0x6927('0x54')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})['then'](function(){if(_0x3a42f5){return db[_0x6927('0x55')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x56')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x57')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x56')]['update'](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x57')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x58')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})['then'](function(){if(_0x3a42f5){return db[_0x6927('0x59')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db['FaxInteraction'][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x5a')]['update'](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x5b')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x5c')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db['CmHopperFinal'][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})['then'](function(){if(_0x3a42f5){return db[_0x6927('0x5d')]['update'](_0x3ee0a9,_0x1a73d6);}})['then'](function(){if(_0x3a42f5){return db[_0x6927('0x5e')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x5f')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x60')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})['then'](function(){if(_0x3a42f5){return db[_0x6927('0x61')][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db['MailQueueReport'][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db['OpenchannelQueueReport'][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})['then'](function(){if(_0x3a42f5){return db['SmsQueueReport'][_0x6927('0x21')](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db[_0x6927('0x62')]['update'](_0x3ee0a9,_0x1a73d6);}})[_0x6927('0x23')](function(){if(_0x3a42f5){return db['CmContact'][_0x6927('0x22')]({'where':{'id':[_0x22c9b3['body']['to'],_0x22c9b3[_0x6927('0x48')][_0x6927('0x49')]]}});}})[_0x6927('0x23')](function(){if(_0x3a42f5){return _0x3a42f5;}})[_0x6927('0x23')](respondWithResult(_0x1688fe,null))[_0x6927('0x47')](handleError(_0x1688fe,null));};exports['create']=function(_0x18a43f,_0xc735f2){return db['CmContact'][_0x6927('0x27')]()[_0x6927('0x23')](function(_0x15f72f){if(_0x18a43f[_0x6927('0x48')][_0x6927('0x4d')]&&_[_0x6927('0x4c')](_0x18a43f[_0x6927('0x48')][_0x6927('0x4d')])){if(_0x18a43f[_0x6927('0x48')][_0x6927('0x4d')][_0x6927('0x63')]){_0x18a43f[_0x6927('0x48')]['tags']=_0x18a43f[_0x6927('0x48')][_0x6927('0x4d')][_0x6927('0x4e')](';')+';';}else{_0x18a43f[_0x6927('0x48')]['tags']=null;}}else{_0x18a43f['body'][_0x6927('0x4d')]=null;}return db['CmContact'][_0x6927('0x52')](_0x18a43f[_0x6927('0x48')],{'fields':_[_0x6927('0x29')](_0x15f72f),'raw':!![]});})[_0x6927('0x23')](respondWithResult(_0xc735f2,0xc9))[_0x6927('0x47')](handleError(_0xc735f2,null));};exports['bulkCreate']=function(_0x2ab2ce,_0xd3a668){var _0x422c0a=[];var _0x2987df=0x0;var _0x342407=0x0;var _0x1395bb=0x0;return db[_0x6927('0x26')]['describe']()[_0x6927('0x23')](function(_0xa2a504){return BPromise[_0x6927('0x64')](_0x2ab2ce[_0x6927('0x48')],function(_0x4b5693){var _0x496bc4={'where':{'$or':[]},'defaults':_0x4b5693,'fields':_[_0x6927('0x29')](_0xa2a504),'raw':!![]};if(_0x4b5693[_0x6927('0x65')]){for(var _0x20a571=0x0;_0x20a571<_0x4b5693[_0x6927('0x65')][_0x6927('0x63')];_0x20a571++){var _0x57f749={};_0x57f749[_0x4b5693[_0x6927('0x65')][_0x20a571]]=_0x4b5693[_0x4b5693[_0x6927('0x65')][_0x20a571]];_0x496bc4['where'][_0x6927('0x66')][_0x6927('0x3e')](_0x57f749);}_0x496bc4[_0x6927('0x34')][_0x6927('0x67')]=_0x4b5693[_0x6927('0x67')];}return db[_0x6927('0x26')][_0x6927('0x68')](_0x496bc4)[_0x6927('0x69')](function(_0x6d5604,_0xa644aa){if(_0xa644aa){_0x2987df++;}else{_0x1395bb++;}})[_0x6927('0x47')](function(_0x4f8662){console['error'](_0x4f8662);_0x342407++;});});})['then'](function(_0x3c52d4){if(_0x3c52d4){return{'success':_0x2987df,'failure':_0x342407,'duplicates':_0x1395bb};}})[_0x6927('0x23')](respondWithResult(_0xd3a668,0xc9))['catch'](handleError(_0xd3a668,null));};exports[_0x6927('0x6a')]=function(_0x3a0e32,_0x5268be,_0x567bab){var _0x567049;return db[_0x6927('0x26')][_0x6927('0x27')]()['then'](function(_0x3be44b){return db[_0x6927('0x26')][_0x6927('0x6b')]({'where':{'id':_0x3a0e32[_0x6927('0x46')]['id']},'include':[{'model':db[_0x6927('0x3f')],'as':'Tags','attributes':['id','name','color'],'required':_0x3a0e32[_0x6927('0x2a')][_0x6927('0x3d')]?!![]:![]}],'attributes':_[_0x6927('0x29')](_0x3be44b)});})[_0x6927('0x23')](function(_0x1c27b6){_0x567049=_0x1c27b6[_0x6927('0x4a')]({'plain':!![]});var _0x372dbe={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x1c27b6&&_0x1c27b6[_0x6927('0x67')]){if(_0x1c27b6[_0x6927('0x67')]){_0x372dbe['where']['$and']['push']({'ListId':{'$ne':_0x1c27b6[_0x6927('0x67')]}});}}return db[_0x6927('0x6c')][_0x6927('0x44')](_0x372dbe);})[_0x6927('0x23')](function(_0x26bcf5){return _[_0x6927('0x6d')](_0x567049,_[_0x6927('0x3b')](_0x26bcf5,function(_0x1b69e0){return util['format']('cf_%d',_0x1b69e0['id']);}));})['then'](handleEntityNotFound(_0x5268be,null))[_0x6927('0x23')](respondWithResult(_0x5268be,null))[_0x6927('0x47')](handleError(_0x5268be,null));};exports[_0x6927('0x21')]=function(_0x175b05,_0x573869){var _0x15bffb;if(_0x175b05[_0x6927('0x48')]['id']){delete _0x175b05[_0x6927('0x48')]['id'];}return db[_0x6927('0x26')][_0x6927('0x6b')]({'where':{'id':_0x175b05[_0x6927('0x46')]['id']}})[_0x6927('0x23')](handleEntityNotFound(_0x573869,null))[_0x6927('0x23')](saveUpdates(_0x175b05['body'],null))[_0x6927('0x23')](function(_0x370002){_0x15bffb=_0x370002;var _0x53ab4e={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x370002&&_0x370002[_0x6927('0x67')]){if(_0x370002[_0x6927('0x67')]){_0x53ab4e['where']['$and'][_0x6927('0x3e')]({'ListId':{'$ne':_0x370002['ListId']}});}}return db[_0x6927('0x6c')][_0x6927('0x44')](_0x53ab4e);})[_0x6927('0x23')](function(_0x10e0eb){if(_0x10e0eb){return _[_0x6927('0x6d')](_[_0x6927('0x6e')](_0x175b05[_0x6927('0x48')],function(_0x501450,_0x34db9a){return _[_0x6927('0x6f')](_0x34db9a,_0x6927('0x70'));}),_[_0x6927('0x3b')](_0x10e0eb,function(_0x867cf5){return util[_0x6927('0x71')](_0x6927('0x72'),_0x867cf5['id']);}));}})[_0x6927('0x23')](function(_0x4266f5){if(_0x4266f5&&!_[_0x6927('0x73')](_0x4266f5)){var _0x47375b=squel[_0x6927('0x21')]()[_0x6927('0x74')]('cm_contacts')[_0x6927('0x75')](_0x4266f5)[_0x6927('0x34')](_0x6927('0x76'),_0x175b05['params']['id'])[_0x6927('0x77')]();return db[_0x6927('0x78')][_0x6927('0x2a')](_0x47375b[_0x6927('0x79')],{'replacements':_0x47375b[_0x6927('0x7a')]});}})[_0x6927('0x23')](function(){if(_0x175b05['body']['phone']&&_0x15bffb){return db['CmHopper'][_0x6927('0x21')]({'phone':_0x175b05[_0x6927('0x48')][_0x6927('0x7b')]},{'where':{'ContactId':_0x15bffb['id']}});}})[_0x6927('0x23')](function(){return _0x15bffb;})['then'](respondWithResult(_0x573869,null))[_0x6927('0x47')](handleError(_0x573869,null));};exports[_0x6927('0x7c')]=function(_0x640cd4,_0x118080,_0x2f27d8){var _0xc73903={};var _0x40bfa3={};var _0x1789a9;var _0x3aeccd;return db[_0x6927('0x26')][_0x6927('0x7d')]({'where':{'id':_0x640cd4['params']['id']}})[_0x6927('0x23')](handleEntityNotFound(_0x118080,null))[_0x6927('0x23')](function(_0x368acc){if(_0x368acc){_0x1789a9=_0x368acc;_0x40bfa3[_0x6927('0x28')]=_['keys'](db[_0x6927('0x3f')][_0x6927('0x7e')]);_0x40bfa3[_0x6927('0x2a')]=_['keys'](_0x640cd4[_0x6927('0x2a')]);_0x40bfa3[_0x6927('0x2c')]=_[_0x6927('0x2d')](_0x40bfa3[_0x6927('0x28')],_0x40bfa3[_0x6927('0x2a')]);_0xc73903['attributes']=_[_0x6927('0x2d')](_0x40bfa3[_0x6927('0x28')],qs[_0x6927('0x2f')](_0x640cd4[_0x6927('0x2a')][_0x6927('0x2f')]));_0xc73903[_0x6927('0x2e')]=_0xc73903[_0x6927('0x2e')]['length']?_0xc73903['attributes']:_0x40bfa3[_0x6927('0x28')];_0xc73903[_0x6927('0x7f')]=qs[_0x6927('0x33')](_0x640cd4[_0x6927('0x2a')][_0x6927('0x33')]);_0xc73903['where']=qs[_0x6927('0x2c')](_[_0x6927('0x35')](_0x640cd4[_0x6927('0x2a')],_0x40bfa3[_0x6927('0x2c')]));if(_0x640cd4['query']['filter']){_0xc73903[_0x6927('0x34')]=_[_0x6927('0x39')](_0xc73903[_0x6927('0x34')],{'$or':_[_0x6927('0x3b')](_0xc73903[_0x6927('0x2e')],function(_0x44fbe4){var _0x54503c={};_0x54503c[_0x44fbe4]={'$like':'%'+_0x640cd4[_0x6927('0x2a')][_0x6927('0x3a')]+'%'};return _0x54503c;})});}_0xc73903=_['merge']({},_0xc73903,_0x640cd4['options']);return _0x1789a9['getTags'](_0xc73903);}})['then'](function(_0x11ef95){if(_0x11ef95){_0x3aeccd=_0x11ef95[_0x6927('0x63')];if(!_0x640cd4[_0x6927('0x2a')][_0x6927('0x30')](_0x6927('0x31'))){_0xc73903[_0x6927('0x32')]=qs[_0x6927('0x32')](_0x640cd4[_0x6927('0x2a')][_0x6927('0x32')]);_0xc73903[_0x6927('0x1c')]=qs[_0x6927('0x1c')](_0x640cd4[_0x6927('0x2a')][_0x6927('0x1c')]);}return _0x1789a9['getTags'](_0xc73903);}})['then'](function(_0x44ff9e){if(_0x44ff9e){return _0x44ff9e?{'count':_0x3aeccd,'rows':_0x44ff9e}:null;}})[_0x6927('0x23')](respondWithResult(_0x118080,null))[_0x6927('0x47')](handleError(_0x118080,null));};exports[_0x6927('0x80')]=function(_0x2be7cf,_0x5bd43b,_0x2998f8){if(_0x2be7cf[_0x6927('0x48')]['id']){delete _0x2be7cf[_0x6927('0x48')]['id'];}return db[_0x6927('0x26')][_0x6927('0x7d')]({'where':{'id':_0x2be7cf[_0x6927('0x46')]['id']}})[_0x6927('0x23')](handleEntityNotFound(_0x5bd43b,null))[_0x6927('0x23')](function(_0xd5a0c3){if(_0xd5a0c3){return _0xd5a0c3[_0x6927('0x80')](_0x2be7cf[_0x6927('0x48')][_0x6927('0x81')]||[]);}return null;})[_0x6927('0x23')](respondWithResult(_0x5bd43b,null))[_0x6927('0x47')](handleError(_0x5bd43b,null));};exports[_0x6927('0x82')]=function(_0x25c8e4,_0x331cfe,_0x3cf9b5){var _0x45d924={'raw':![],'where':{}};var _0x4f4e68={};var _0x2cdff5={'count':0x0,'rows':[]};return db[_0x6927('0x26')][_0x6927('0x7d')]({'where':{'id':_0x25c8e4[_0x6927('0x46')]['id']}})[_0x6927('0x23')](handleEntityNotFound(_0x331cfe,null))['then'](function(_0x58caa0){if(_0x58caa0){_0x4f4e68[_0x6927('0x28')]=_[_0x6927('0x29')](db['CmHopper'][_0x6927('0x7e')]);_0x4f4e68['query']=_[_0x6927('0x29')](_0x25c8e4[_0x6927('0x2a')]);_0x4f4e68[_0x6927('0x2c')]=_['intersection'](_0x4f4e68[_0x6927('0x28')],_0x4f4e68[_0x6927('0x2a')]);_0x45d924['attributes']=_['intersection'](_0x4f4e68[_0x6927('0x28')],qs[_0x6927('0x2f')](_0x25c8e4[_0x6927('0x2a')][_0x6927('0x2f')]));_0x45d924['attributes']=_0x45d924[_0x6927('0x2e')]['length']?_0x45d924[_0x6927('0x2e')]:_0x4f4e68['model'];if(!_0x25c8e4[_0x6927('0x2a')][_0x6927('0x30')]('nolimit')){_0x45d924[_0x6927('0x32')]=qs['limit'](_0x25c8e4[_0x6927('0x2a')][_0x6927('0x32')]);_0x45d924[_0x6927('0x1c')]=qs[_0x6927('0x1c')](_0x25c8e4['query'][_0x6927('0x1c')]);}_0x45d924['order']=qs[_0x6927('0x33')](_0x25c8e4[_0x6927('0x2a')]['sort']);_0x45d924[_0x6927('0x34')]=qs['filters'](_['pick'](_0x25c8e4[_0x6927('0x2a')],_0x4f4e68[_0x6927('0x2c')]));_0x45d924[_0x6927('0x34')]['ContactId']=_0x58caa0['id'];if(_0x25c8e4[_0x6927('0x2a')][_0x6927('0x3a')]){_0x45d924[_0x6927('0x34')]=_[_0x6927('0x39')](_0x45d924[_0x6927('0x34')],{'$or':_[_0x6927('0x3b')](_0x45d924['attributes'],function(_0x335974){var _0x3118e9={};_0x3118e9[_0x335974]={'$like':'%'+_0x25c8e4[_0x6927('0x2a')][_0x6927('0x3a')]+'%'};return _0x3118e9;})});}_0x45d924=_[_0x6927('0x39')]({},_0x45d924,_0x25c8e4[_0x6927('0x83')]);return db[_0x6927('0x50')][_0x6927('0x1b')]({'where':_0x45d924['where']})['then'](function(_0x1d878e){_0x2cdff5[_0x6927('0x1b')]=_0x1d878e;if(_0x25c8e4[_0x6927('0x2a')][_0x6927('0x40')]){_0x45d924[_0x6927('0x3c')]=[{'all':!![]}];}return db[_0x6927('0x50')][_0x6927('0x44')](_0x45d924);})['then'](function(_0xa6d12b){_0x2cdff5[_0x6927('0x45')]=_0xa6d12b;return _0x2cdff5;});}})[_0x6927('0x23')](respondWithFilteredResult(_0x331cfe,_0x45d924))[_0x6927('0x47')](handleError(_0x331cfe,null));};exports[_0x6927('0x84')]=function(_0x3533d4,_0x5907e2,_0x41d014){var _0x22c0c1={'raw':!![],'where':{}};var _0xdd5387={};var _0x261a6a={'count':0x0,'rows':[]};return db[_0x6927('0x26')][_0x6927('0x7d')]({'where':{'id':_0x3533d4['params']['id']}})[_0x6927('0x23')](handleEntityNotFound(_0x5907e2,null))[_0x6927('0x23')](function(_0x458f10){if(_0x458f10){_0xdd5387[_0x6927('0x28')]=_[_0x6927('0x29')](db[_0x6927('0x5d')][_0x6927('0x7e')]);_0xdd5387['query']=_[_0x6927('0x29')](_0x3533d4[_0x6927('0x2a')]);_0xdd5387[_0x6927('0x2c')]=_[_0x6927('0x2d')](_0xdd5387[_0x6927('0x28')],_0xdd5387['query']);_0x22c0c1['attributes']=_[_0x6927('0x2d')](_0xdd5387[_0x6927('0x28')],qs['fields'](_0x3533d4[_0x6927('0x2a')]['fields']));_0x22c0c1[_0x6927('0x2e')]=_0x22c0c1['attributes']['length']?_0x22c0c1[_0x6927('0x2e')]:_0xdd5387[_0x6927('0x28')];if(!_0x3533d4[_0x6927('0x2a')][_0x6927('0x30')]('nolimit')){_0x22c0c1[_0x6927('0x32')]=qs[_0x6927('0x32')](_0x3533d4[_0x6927('0x2a')][_0x6927('0x32')]);_0x22c0c1[_0x6927('0x1c')]=qs[_0x6927('0x1c')](_0x3533d4[_0x6927('0x2a')][_0x6927('0x1c')]);}_0x22c0c1[_0x6927('0x7f')]=qs['sort'](_0x3533d4['query']['sort']);_0x22c0c1[_0x6927('0x34')]=qs[_0x6927('0x2c')](_['pick'](_0x3533d4[_0x6927('0x2a')],_0xdd5387[_0x6927('0x2c')]));_0x22c0c1[_0x6927('0x34')][_0x6927('0x85')]=_0x458f10['id'];if(_0x3533d4['query']['filter']){_0x22c0c1['where']=_[_0x6927('0x39')](_0x22c0c1[_0x6927('0x34')],{'$or':_[_0x6927('0x3b')](_0x22c0c1['attributes'],function(_0x1f8b7c){var _0x395800={};_0x395800[_0x1f8b7c]={'$like':'%'+_0x3533d4[_0x6927('0x2a')]['filter']+'%'};return _0x395800;})});}_0x22c0c1=_[_0x6927('0x39')]({},_0x22c0c1,_0x3533d4['options']);return db[_0x6927('0x5d')]['count']({'where':_0x22c0c1[_0x6927('0x34')]})[_0x6927('0x23')](function(_0x4cad88){_0x261a6a[_0x6927('0x1b')]=_0x4cad88;if(_0x3533d4[_0x6927('0x2a')][_0x6927('0x40')]){_0x22c0c1[_0x6927('0x3c')]=[{'all':!![]}];}return db['CmHopperHistory'][_0x6927('0x44')](_0x22c0c1);})[_0x6927('0x23')](function(_0x436523){_0x261a6a[_0x6927('0x45')]=_0x436523;return _0x261a6a;});}})[_0x6927('0x23')](respondWithFilteredResult(_0x5907e2,_0x22c0c1))[_0x6927('0x47')](handleError(_0x5907e2,null));};exports[_0x6927('0x86')]=function(_0x165d5f,_0x368675,_0x4eb867){var _0x15323f={'raw':!![],'where':{}};var _0x12cbfd={};var _0x19adae={'count':0x0,'rows':[]};return db[_0x6927('0x26')][_0x6927('0x7d')]({'where':{'id':_0x165d5f[_0x6927('0x46')]['id']}})[_0x6927('0x23')](handleEntityNotFound(_0x368675,null))[_0x6927('0x23')](function(_0x3daf8b){if(_0x3daf8b){_0x12cbfd[_0x6927('0x28')]=_[_0x6927('0x29')](db[_0x6927('0x87')][_0x6927('0x7e')]);_0x12cbfd['query']=_['keys'](_0x165d5f[_0x6927('0x2a')]);_0x12cbfd[_0x6927('0x2c')]=_[_0x6927('0x2d')](_0x12cbfd['model'],_0x12cbfd[_0x6927('0x2a')]);_0x15323f[_0x6927('0x2e')]=_[_0x6927('0x2d')](_0x12cbfd[_0x6927('0x28')],qs[_0x6927('0x2f')](_0x165d5f['query'][_0x6927('0x2f')]));_0x15323f['attributes']=_0x15323f[_0x6927('0x2e')][_0x6927('0x63')]?_0x15323f['attributes']:_0x12cbfd[_0x6927('0x28')];if(!_0x165d5f[_0x6927('0x2a')][_0x6927('0x30')]('nolimit')){_0x15323f[_0x6927('0x32')]=qs[_0x6927('0x32')](_0x165d5f['query']['limit']);_0x15323f[_0x6927('0x1c')]=qs[_0x6927('0x1c')](_0x165d5f[_0x6927('0x2a')][_0x6927('0x1c')]);}_0x15323f[_0x6927('0x7f')]=qs[_0x6927('0x33')](_0x165d5f['query'][_0x6927('0x33')]);_0x15323f['where']=qs[_0x6927('0x2c')](_['pick'](_0x165d5f['query'],_0x12cbfd[_0x6927('0x2c')]));_0x15323f[_0x6927('0x34')][_0x6927('0x85')]=_0x3daf8b['id'];if(_0x165d5f[_0x6927('0x2a')]['filter']){_0x15323f[_0x6927('0x34')]=_[_0x6927('0x39')](_0x15323f['where'],{'$or':_['map'](_0x15323f[_0x6927('0x2e')],function(_0x2a88f0){var _0x4d63b0={};_0x4d63b0[_0x2a88f0]={'$like':'%'+_0x165d5f['query'][_0x6927('0x3a')]+'%'};return _0x4d63b0;})});}_0x15323f=_[_0x6927('0x39')]({},_0x15323f,_0x165d5f[_0x6927('0x83')]);return db[_0x6927('0x87')][_0x6927('0x1b')]({'where':_0x15323f[_0x6927('0x34')]})[_0x6927('0x23')](function(_0x10b2f8){_0x19adae['count']=_0x10b2f8;if(_0x165d5f['query'][_0x6927('0x40')]){_0x15323f['include']=[{'all':!![]}];}return db[_0x6927('0x87')]['findAll'](_0x15323f);})['then'](function(_0x1ce3d5){_0x19adae[_0x6927('0x45')]=_0x1ce3d5;return _0x19adae;});}})['then'](respondWithFilteredResult(_0x368675,_0x15323f))[_0x6927('0x47')](handleError(_0x368675,null));};exports[_0x6927('0x88')]=function(_0x1898a5,_0x25ea7e,_0x5b94c7){var _0x540f8b={'raw':!![],'where':{}};var _0x2e5df5={};var _0x5576c3={'count':0x0,'rows':[]};return db[_0x6927('0x26')][_0x6927('0x7d')]({'where':{'id':_0x1898a5['params']['id']}})[_0x6927('0x23')](handleEntityNotFound(_0x25ea7e,null))[_0x6927('0x23')](function(_0x4fd824){if(_0x4fd824){_0x2e5df5[_0x6927('0x28')]=_[_0x6927('0x29')](db[_0x6927('0x62')][_0x6927('0x7e')]);_0x2e5df5['query']=_[_0x6927('0x29')](_0x1898a5['query']);_0x2e5df5[_0x6927('0x2c')]=_[_0x6927('0x2d')](_0x2e5df5[_0x6927('0x28')],_0x2e5df5[_0x6927('0x2a')]);_0x540f8b[_0x6927('0x2e')]=_[_0x6927('0x2d')](_0x2e5df5[_0x6927('0x28')],qs['fields'](_0x1898a5[_0x6927('0x2a')][_0x6927('0x2f')]));_0x540f8b[_0x6927('0x2e')]=_0x540f8b[_0x6927('0x2e')][_0x6927('0x63')]?_0x540f8b[_0x6927('0x2e')]:_0x2e5df5['model'];if(!_0x1898a5['query']['hasOwnProperty'](_0x6927('0x31'))){_0x540f8b[_0x6927('0x32')]=qs['limit'](_0x1898a5[_0x6927('0x2a')][_0x6927('0x32')]);_0x540f8b['offset']=qs[_0x6927('0x1c')](_0x1898a5['query'][_0x6927('0x1c')]);}_0x540f8b[_0x6927('0x7f')]=qs[_0x6927('0x33')](_0x1898a5['query'][_0x6927('0x33')]);_0x540f8b['where']=qs[_0x6927('0x2c')](_[_0x6927('0x35')](_0x1898a5[_0x6927('0x2a')],_0x2e5df5[_0x6927('0x2c')]));_0x540f8b[_0x6927('0x34')][_0x6927('0x85')]=_0x4fd824['id'];if(_0x1898a5['query'][_0x6927('0x3a')]){_0x540f8b['where']=_[_0x6927('0x39')](_0x540f8b[_0x6927('0x34')],{'$or':_[_0x6927('0x3b')](_0x540f8b[_0x6927('0x2e')],function(_0x2b4895){var _0xdfd525={};_0xdfd525[_0x2b4895]={'$like':'%'+_0x1898a5[_0x6927('0x2a')][_0x6927('0x3a')]+'%'};return _0xdfd525;})});}_0x540f8b=_[_0x6927('0x39')]({},_0x540f8b,_0x1898a5['options']);return db['JscriptySessionReport'][_0x6927('0x1b')]({'where':_0x540f8b[_0x6927('0x34')]})[_0x6927('0x23')](function(_0x145ec6){_0x5576c3['count']=_0x145ec6;if(_0x1898a5['query'][_0x6927('0x40')]){_0x540f8b[_0x6927('0x3c')]=[{'all':!![]}];}return db[_0x6927('0x62')][_0x6927('0x44')](_0x540f8b);})[_0x6927('0x23')](function(_0x475de7){_0x5576c3[_0x6927('0x45')]=_0x475de7;return _0x5576c3;});}})[_0x6927('0x23')](respondWithFilteredResult(_0x25ea7e,_0x540f8b))['catch'](handleError(_0x25ea7e,null));};exports[_0x6927('0x89')]=function(_0x446e7e,_0x2a7a74,_0x16cd52){try{if(!_0x446e7e[_0x6927('0x48')][_0x6927('0x67')]){throw new Error('No\x20ListId\x20specified');}if(!_0x446e7e['body'][_0x6927('0x8a')]){throw new Error('No\x20association\x20keys\x20specified!');}if(!_0x446e7e['body']['binding_values']){throw new Error(_0x6927('0x8b'));}if(!_0x446e7e[_0x6927('0x48')][_0x6927('0x8c')]){throw new Error(_0x6927('0x8d'));}var _0xb1ac1d=_0x446e7e[_0x6927('0x48')][_0x6927('0x8a')][_0x6927('0x8e')](',');var _0x573d3b=_0x446e7e[_0x6927('0x48')][_0x6927('0x8f')][_0x6927('0x8e')](',');if(!_0xb1ac1d[_0x6927('0x63')]||!_0x573d3b[_0x6927('0x63')]||_0xb1ac1d['length']!==_0x573d3b[_0x6927('0x63')]){throw new Error(_0x6927('0x90'));}_0x446e7e[_0x6927('0x48')][_0x6927('0x2f')]=_[_0x6927('0x91')](_0xb1ac1d,_0x573d3b);if(!_0x446e7e[_0x6927('0x48')][_0x6927('0x2f')][_0x6927('0x7b')]){throw new Error('No\x20phone\x20column\x20specified');}if(!_0x446e7e['body'][_0x6927('0x2f')][_0x6927('0x92')]){throw new Error(_0x6927('0x93'));}var _0x1627be=path[_0x6927('0x4e')](config[_0x6927('0x94')],_0x6927('0x95'),_0x446e7e[_0x6927('0x96')]['filename']);fs[_0x6927('0x97')](_0x1627be,parseInt('0777',0x8));var _0x578490=require(_0x6927('0x98'))[_0x6927('0x99')](path[_0x6927('0x4e')](__dirname,_0x6927('0x9a')),[_0x1627be,_0x446e7e[_0x6927('0x48')][_0x6927('0x8a')],_0x446e7e[_0x6927('0x48')][_0x6927('0x8f')],_0x446e7e[_0x6927('0x48')][_0x6927('0x67')],_0x446e7e['body'][_0x6927('0x9b')],_0x446e7e[_0x6927('0x48')][_0x6927('0x65')],_0x446e7e[_0x6927('0x48')][_0x6927('0x8c')]]);return _0x2a7a74[_0x6927('0x18')](0xc8)[_0x6927('0x1a')]({'message':_0x6927('0x9c'),'pid':_0x578490['pid']});}catch(_0x48c79c){return _0x2a7a74[_0x6927('0x18')](0x1f4)[_0x6927('0x9d')](_0x48c79c);}};exports[_0x6927('0x9e')]=function(_0x461a64,_0x420a8d,_0x35c6c8){var _0x25b6b1=fs[_0x6927('0x9f')](_0x461a64[_0x6927('0x96')][_0x6927('0x5')]);Papa[_0x6927('0xa0')](_0x25b6b1,{'header':!![],'skipEmptyLines':!![],'preview':0x1,'complete':function(_0x3c5bd0){return _0x420a8d[_0x6927('0x18')](0xc8)[_0x6927('0x1a')]({'file':_0x461a64[_0x6927('0x96')],'fields':_0x3c5bd0['meta'][_0x6927('0x2f')]});}});};exports['import']=function(_0x38cf15,_0x55518e,_0x1fe7a7){return db[_0x6927('0xa1')]['findAll']({'raw':!![],'attributes':['id'],'where':{'role':'agent'}})[_0x6927('0x23')](function(_0x124e41){var _0x33e03a=![];if(!_0x38cf15[_0x6927('0x48')][_0x6927('0x67')]){throw new Error(_0x6927('0xa2'));}if(!_0x38cf15[_0x6927('0x48')][_0x6927('0xa3')][_0x6927('0x7b')]){throw new Error(_0x6927('0xa4'));}if(!_0x38cf15['body'][_0x6927('0xa3')]['firstName']){throw new Error(_0x6927('0x93'));}if(!_0x38cf15['body'][_0x6927('0x8c')]){throw new Error(_0x6927('0x8d'));}var _0x2616ea=require(_0x6927('0x98'))[_0x6927('0x99')](path[_0x6927('0x4e')](__dirname,_0x6927('0xa5')),[_0x38cf15[_0x6927('0x46')]['id'],JSON[_0x6927('0xa6')](_0x38cf15[_0x6927('0x48')]),JSON[_0x6927('0xa6')](_0x124e41)]);_0x2616ea['on'](_0x6927('0xa7'),function(_0x21d6a5){_0x33e03a=!![];return _0x55518e[_0x6927('0x18')](0xc8)['json']({'message':_0x6927('0xa8'),'pid':_0x2616ea[_0x6927('0xa9')]});});_0x2616ea['on'](_0x6927('0xaa'),function(_0x284a0b){if(_0x284a0b&&!_0x33e03a){return _0x55518e[_0x6927('0x18')](0x1f4)[_0x6927('0x1a')]({'message':_0x6927('0xab'),'pid':_0x2616ea[_0x6927('0xa9')]});}});})['catch'](handleError(_0x55518e,null));};
\ No newline at end of file
+var _0x7571=['set','Content-Range','json','apply','reject','save','update','then','destroy','sendStatus','name','send','index','describe','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','length','nolimit','sort','where','pick','add','merge','filter','tag','include','push','Tag','Tags','CmContact','includeAll','color','ThroughTags','find','params','catch','findAll','body','from','mergeWith','isArray','tags','join','info','[CmContact][merge][destroy][CmHopper],\x20%s','CmHopperBlack','[CmContact][merge][destroy][CmHopperBlack],\x20%s','create','ChatInteraction','ChatOfflineMessage','MailInteraction','MailMessage','SmsInteraction','SmsMessage','FaxInteraction','FaxMessage','OpenchannelInteraction','OpenchannelMessage','CmHopperFinal','CmHopperHistory','ReportAgentPreview','VoiceCallReport','FaxQueueReport','SmsQueueReport','each','duplicates','ListId','findOrCreate','spread','show','$and','omit','format','CmCustomField','pickBy','startsWith','cf_','map','isEmpty','cm_contacts','setFields','id\x20=\x20?','text','values','phone','CmHopper','findOne','fields','order','getTags','setTags','getHoppers','rawAttributes','hasOwnProperty','ContactId','rows','getHopperFinals','getJscriptySessions','JscriptySessionReport','options','No\x20ListId\x20specified','binding_keys','No\x20association\x20keys\x20specified!','binding_values','No\x20association\x20values\x20specified!','split','Incorrect\x20binding\x20parameters\x20passed!','zipObject','No\x20phone\x20column\x20specified','firstName','No\x20firstName\x20column\x20specified','server/files/tmp','file','filename','chmodSync','0777','child_process','fork','CompanyId','socket_timestamp','File\x20uploaded\x20correctly!','pid','upload','createReadStream','parse','import','User','binding','../../components/import/cm/csv2','stringify','error\x20child\x20process','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','squel','crypto','jsforce','desk.js','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','socket.io-emitter','localhost','./cmContact.socket','register','status','end','count','offset','limit'];(function(_0x234bf2,_0x1f4844){var _0x5fd67b=function(_0x3a5435){while(--_0x3a5435){_0x234bf2['push'](_0x234bf2['shift']());}};_0x5fd67b(++_0x1f4844);}(_0x7571,0x12d));var _0x1757=function(_0x3ec94b,_0x447d3a){_0x3ec94b=_0x3ec94b-0x0;var _0x96df7d=_0x7571[_0x3ec94b];return _0x96df7d;};'use strict';var jsonpatch=require(_0x1757('0x0'));var rp=require(_0x1757('0x1'));var moment=require(_0x1757('0x2'));var BPromise=require(_0x1757('0x3'));var Mustache=require(_0x1757('0x4'));var util=require(_0x1757('0x5'));var path=require(_0x1757('0x6'));var sox=require(_0x1757('0x7'));var csv=require(_0x1757('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x1757('0x9'));var crypto=require(_0x1757('0xa'));var jsforce=require(_0x1757('0xb'));var deskjs=require(_0x1757('0xc'));var toCsv=require(_0x1757('0x8'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x1757('0xd'));var logger=require(_0x1757('0xe'))(_0x1757('0xf'));var utils=require(_0x1757('0x10'));var config=require(_0x1757('0x11'));var db=require('../../mysqldb')['db'];var socket=require(_0x1757('0x12'))({'host':_0x1757('0x13'),'port':0x18eb});require(_0x1757('0x14'))[_0x1757('0x15')](socket);function respondWithStatusCode(_0x342692,_0x43cc19){_0x43cc19=_0x43cc19||0xcc;return function(_0x394f3c){if(_0x394f3c){return _0x342692['sendStatus'](_0x43cc19);}return _0x342692[_0x1757('0x16')](_0x43cc19)[_0x1757('0x17')]();};}function respondWithResult(_0x4a7fa3,_0x1280da){_0x1280da=_0x1280da||0xc8;return function(_0x2908d5){if(_0x2908d5){return _0x4a7fa3['status'](_0x1280da)['json'](_0x2908d5);}};}function respondWithFilteredResult(_0x4c3de9,_0x11ea17){return function(_0x1087d5){if(_0x1087d5){var _0x387f56=_0x1087d5[_0x1757('0x18')],_0x9a48f=_0x11ea17[_0x1757('0x19')],_0x3e7fae=_0x11ea17[_0x1757('0x19')]+_0x11ea17[_0x1757('0x1a')],_0x337a0d;if(_0x3e7fae>=_0x387f56){_0x3e7fae=_0x387f56;_0x337a0d=0xc8;}else{_0x337a0d=0xce;}_0x4c3de9[_0x1757('0x16')](_0x337a0d);return _0x4c3de9[_0x1757('0x1b')](_0x1757('0x1c'),_0x9a48f+'-'+_0x3e7fae+'/'+_0x387f56)[_0x1757('0x1d')](_0x1087d5);}return null;};}function patchUpdates(_0x7910ab){return function(_0x3dda13){try{jsonpatch[_0x1757('0x1e')](_0x3dda13,_0x7910ab,!![]);}catch(_0x399e40){return BPromise[_0x1757('0x1f')](_0x399e40);}return _0x3dda13[_0x1757('0x20')]();};}function saveUpdates(_0x29181b,_0x2f3cfe){return function(_0x4420ee){if(_0x4420ee){return _0x4420ee[_0x1757('0x21')](_0x29181b)[_0x1757('0x22')](function(_0x2fc228){return _0x2fc228;});}return null;};}function removeEntity(_0x27f015,_0x26454a){return function(_0x3f6b61){if(_0x3f6b61){return _0x3f6b61[_0x1757('0x23')]()[_0x1757('0x22')](function(){_0x27f015[_0x1757('0x16')](0xcc)[_0x1757('0x17')]();});}};}function handleEntityNotFound(_0x3fde4f,_0x31d5ea){return function(_0x2d2a17){if(!_0x2d2a17){_0x3fde4f[_0x1757('0x24')](0x194);}return _0x2d2a17;};}function handleError(_0xfa199f,_0x504f5e){_0x504f5e=_0x504f5e||0x1f4;return function(_0x27314e){logger['error'](_0x27314e['stack']);if(_0x27314e['name']){delete _0x27314e[_0x1757('0x25')];}_0xfa199f[_0x1757('0x16')](_0x504f5e)[_0x1757('0x26')](_0x27314e);};}exports[_0x1757('0x27')]=function(_0x2c408a,_0x29b123){var _0x464b9b={},_0x2d06b1={},_0x1028d3={'count':0x0,'rows':[]};return db['CmContact'][_0x1757('0x28')]()[_0x1757('0x22')](function(_0x4fb34b){_0x2d06b1[_0x1757('0x29')]=_[_0x1757('0x2a')](_0x4fb34b);var _0x9a7bcc={'dateStart':_0x2c408a[_0x1757('0x2b')][_0x1757('0x2c')],'dateEnd':_0x2c408a[_0x1757('0x2b')]['dateEnd']};delete _0x2c408a[_0x1757('0x2b')][_0x1757('0x2c')];delete _0x2c408a[_0x1757('0x2b')][_0x1757('0x2d')];_0x2d06b1[_0x1757('0x2b')]=_[_0x1757('0x2a')](_0x2c408a['query']);_0x2d06b1[_0x1757('0x2e')]=_[_0x1757('0x2f')](_0x2d06b1[_0x1757('0x29')],_0x2d06b1[_0x1757('0x2b')]);_0x464b9b['attributes']=_[_0x1757('0x2f')](_0x2d06b1[_0x1757('0x29')],qs['fields'](_0x2c408a[_0x1757('0x2b')]['fields']));_0x464b9b[_0x1757('0x30')]=_0x464b9b[_0x1757('0x30')][_0x1757('0x31')]?_0x464b9b[_0x1757('0x30')]:_0x2d06b1['model'];if(!_0x2c408a[_0x1757('0x2b')]['hasOwnProperty'](_0x1757('0x32'))){_0x464b9b[_0x1757('0x1a')]=qs[_0x1757('0x1a')](_0x2c408a[_0x1757('0x2b')][_0x1757('0x1a')]);_0x464b9b[_0x1757('0x19')]=qs['offset'](_0x2c408a[_0x1757('0x2b')][_0x1757('0x19')]);}_0x464b9b['order']=qs[_0x1757('0x33')](_0x2c408a[_0x1757('0x2b')][_0x1757('0x33')]);_0x464b9b[_0x1757('0x34')]=qs['filters'](_[_0x1757('0x35')](_0x2c408a['query'],_0x2d06b1[_0x1757('0x2e')]));if(_0x9a7bcc[_0x1757('0x2c')]){if(_0x9a7bcc[_0x1757('0x2d')]){_0x9a7bcc[_0x1757('0x2d')]=moment(_0x9a7bcc[_0x1757('0x2d')])[_0x1757('0x36')](0x1,'day');}else{_0x9a7bcc['dateEnd']=moment(_0x9a7bcc[_0x1757('0x2c')])[_0x1757('0x36')](0x1,'day');}_[_0x1757('0x37')](_0x464b9b['where'],{'createdAt':{'$gte':_0x9a7bcc[_0x1757('0x2c')],'$lte':_0x9a7bcc[_0x1757('0x2d')]}});}if(_0x2c408a[_0x1757('0x2b')][_0x1757('0x38')]){_0x464b9b['where']=_[_0x1757('0x37')](_0x464b9b[_0x1757('0x34')],{'$or':_['map'](_0x464b9b[_0x1757('0x30')],function(_0x12cd7e){var _0x4de743={};_0x4de743[_0x12cd7e]={'$like':'%'+_0x2c408a[_0x1757('0x2b')]['filter']+'%'};return _0x4de743;})});}_0x464b9b=_['merge']({},_0x464b9b,_0x2c408a['options']);var _0x416f4f={'where':_0x464b9b[_0x1757('0x34')]};_0x416f4f['include']=[];if(_0x2c408a[_0x1757('0x2b')][_0x1757('0x39')]){_0x416f4f[_0x1757('0x3a')][_0x1757('0x3b')]({'model':db[_0x1757('0x3c')],'as':_0x1757('0x3d'),'attributes':['id'],'where':{'id':_0x2c408a[_0x1757('0x2b')][_0x1757('0x39')]},'required':!![]});_0x416f4f['distinct']=!![];}return db[_0x1757('0x3e')][_0x1757('0x18')](_0x416f4f)[_0x1757('0x22')](function(_0x18c8df){_0x1028d3[_0x1757('0x18')]=_0x18c8df;if(_0x2c408a[_0x1757('0x2b')][_0x1757('0x3f')]){_0x464b9b[_0x1757('0x3a')]=[{'model':db[_0x1757('0x3c')],'as':'Tags','attributes':['id',_0x1757('0x25'),_0x1757('0x40')],'required':_0x2c408a['query'][_0x1757('0x39')]?!![]:![]},{'model':db[_0x1757('0x3c')],'as':_0x1757('0x41'),'attributes':['id',_0x1757('0x25'),_0x1757('0x40')],'through':_0x2c408a[_0x1757('0x2b')][_0x1757('0x39')]?{'attributes':[],'where':{'TagId':_0x2c408a['query'][_0x1757('0x39')]||undefined}}:{},'required':_0x2c408a[_0x1757('0x2b')][_0x1757('0x39')]?!![]:![]}];}return db[_0x1757('0x3e')]['findAll'](_0x464b9b);})[_0x1757('0x22')](function(_0x2ee857){_0x1028d3['rows']=_0x2ee857;return _0x1028d3;})[_0x1757('0x22')](respondWithFilteredResult(_0x29b123,_0x464b9b))['catch'](handleError(_0x29b123,null));});};exports[_0x1757('0x23')]=function(_0x86132e,_0xa65f14){return db[_0x1757('0x3e')][_0x1757('0x42')]({'where':{'id':_0x86132e[_0x1757('0x43')]['id']}})[_0x1757('0x22')](handleEntityNotFound(_0xa65f14,null))[_0x1757('0x22')](removeEntity(_0xa65f14,null))[_0x1757('0x44')](handleError(_0xa65f14,null));};exports[_0x1757('0x28')]=function(_0x1e8493,_0x22fdc5){return db[_0x1757('0x3e')][_0x1757('0x28')]()[_0x1757('0x22')](respondWithResult(_0x22fdc5,null))['catch'](handleError(_0x22fdc5,null));};exports[_0x1757('0x37')]=function(_0x4c4a47,_0x2e3d9e){var _0x1a8e0f;var _0x32f88;var _0x4b7122;if(_0x4c4a47['body']['id']){delete _0x4c4a47['body']['id'];}return db[_0x1757('0x3e')][_0x1757('0x45')]({'where':{'id':[_0x4c4a47[_0x1757('0x46')]['to'],_0x4c4a47[_0x1757('0x46')][_0x1757('0x47')]]}})[_0x1757('0x22')](function(_0x4ddcdd){if(_0x4ddcdd){if(_0x4ddcdd[_0x1757('0x31')]!==0x2){return null;}_0x4ddcdd[0x0]=_0x4ddcdd[0x0]['get']({'plain':!![]});_0x4ddcdd[0x1]=_0x4ddcdd[0x1]['get']({'plain':!![]});delete _0x4ddcdd[0x0]['id'];delete _0x4ddcdd[0x1]['id'];return _[_0x1757('0x48')](_0x4ddcdd[0x0],_0x4ddcdd[0x1],function(_0x5b7479,_0x3fb176){if(Array[_0x1757('0x49')](_0x3fb176)&&!_0x3fb176[_0x1757('0x31')]){return _0x5b7479;}else if(!_0x3fb176){return _0x5b7479;}});}})[_0x1757('0x22')](handleEntityNotFound(_0x2e3d9e,null))[_0x1757('0x22')](function(_0x30c9a7){if(_0x30c9a7){if(_0x30c9a7[_0x1757('0x4a')]&&_['isArray'](_0x30c9a7[_0x1757('0x4a')])){_0x30c9a7[_0x1757('0x4a')]=_0x30c9a7[_0x1757('0x4a')][_0x1757('0x4b')]();}logger[_0x1757('0x4c')]('[CmContact][merge]\x20to\x20%s\x20from\x20%s',_0x4c4a47['body']['to'],_0x4c4a47[_0x1757('0x46')][_0x1757('0x47')]);return db['CmHopper'][_0x1757('0x23')]({'where':{'ContactId':[_0x4c4a47[_0x1757('0x46')]['to'],_0x4c4a47[_0x1757('0x46')][_0x1757('0x47')]]}})[_0x1757('0x22')](function(_0x3fbc6e){logger[_0x1757('0x4c')](_0x1757('0x4d'),_0x3fbc6e);return db[_0x1757('0x4e')][_0x1757('0x23')]({'where':{'ContactId':[_0x4c4a47['body']['to'],_0x4c4a47[_0x1757('0x46')][_0x1757('0x47')]]}})[_0x1757('0x22')](function(_0xcdfd70){logger['info'](_0x1757('0x4f'),_0xcdfd70);return db[_0x1757('0x3e')][_0x1757('0x50')](_0x30c9a7);});});}})[_0x1757('0x22')](function(_0xff3541){if(_0xff3541){_0x1a8e0f=_0xff3541;_0x32f88={'ContactId':_0x1a8e0f['id']};_0x4b7122={'where':{'ContactId':[_0x4c4a47[_0x1757('0x46')]['to'],_0x4c4a47[_0x1757('0x46')][_0x1757('0x47')]]}};return db[_0x1757('0x51')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db['ChatMessage']['update'](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x52')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})['then'](function(){if(_0x1a8e0f){return db[_0x1757('0x53')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x54')]['update'](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x53')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x54')]['update'](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x55')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})['then'](function(){if(_0x1a8e0f){return db[_0x1757('0x56')]['update'](_0x32f88,_0x4b7122);}})['then'](function(){if(_0x1a8e0f){return db[_0x1757('0x57')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x58')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x59')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x5a')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})['then'](function(){if(_0x1a8e0f){return db[_0x1757('0x5b')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})['then'](function(){if(_0x1a8e0f){return db[_0x1757('0x5c')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})['then'](function(){if(_0x1a8e0f){return db[_0x1757('0x5d')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x5e')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db['ChatQueueReport']['update'](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x5f')]['update'](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db['MailQueueReport'][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db['OpenchannelQueueReport'][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x60')][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db['JscriptySessionReport'][_0x1757('0x21')](_0x32f88,_0x4b7122);}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return db[_0x1757('0x3e')][_0x1757('0x23')]({'where':{'id':[_0x4c4a47[_0x1757('0x46')]['to'],_0x4c4a47[_0x1757('0x46')][_0x1757('0x47')]]}});}})[_0x1757('0x22')](function(){if(_0x1a8e0f){return _0x1a8e0f;}})[_0x1757('0x22')](respondWithResult(_0x2e3d9e,null))['catch'](handleError(_0x2e3d9e,null));};exports['create']=function(_0x1bae30,_0x27f886){return db['CmContact'][_0x1757('0x28')]()[_0x1757('0x22')](function(_0x494367){if(_0x1bae30[_0x1757('0x46')][_0x1757('0x4a')]&&_['isArray'](_0x1bae30['body'][_0x1757('0x4a')])){if(_0x1bae30[_0x1757('0x46')][_0x1757('0x4a')][_0x1757('0x31')]){_0x1bae30[_0x1757('0x46')][_0x1757('0x4a')]=_0x1bae30['body'][_0x1757('0x4a')][_0x1757('0x4b')](';')+';';}else{_0x1bae30[_0x1757('0x46')][_0x1757('0x4a')]=null;}}else{_0x1bae30[_0x1757('0x46')]['tags']=null;}return db[_0x1757('0x3e')][_0x1757('0x50')](_0x1bae30['body'],{'fields':_[_0x1757('0x2a')](_0x494367),'raw':!![]});})[_0x1757('0x22')](respondWithResult(_0x27f886,0xc9))[_0x1757('0x44')](handleError(_0x27f886,null));};exports['bulkCreate']=function(_0x540aa2,_0x12314d){var _0x7d442e=[];var _0x25056e=0x0;var _0x121b9b=0x0;var _0x9f38f=0x0;return db[_0x1757('0x3e')]['describe']()['then'](function(_0x27e75a){return BPromise[_0x1757('0x61')](_0x540aa2[_0x1757('0x46')],function(_0x238316){var _0xc5705d={'where':{'$or':[]},'defaults':_0x238316,'fields':_[_0x1757('0x2a')](_0x27e75a),'raw':!![]};if(_0x238316['duplicates']){for(var _0x533006=0x0;_0x533006<_0x238316[_0x1757('0x62')][_0x1757('0x31')];_0x533006++){var _0xff7409={};_0xff7409[_0x238316[_0x1757('0x62')][_0x533006]]=_0x238316[_0x238316[_0x1757('0x62')][_0x533006]];_0xc5705d[_0x1757('0x34')]['$or'][_0x1757('0x3b')](_0xff7409);}_0xc5705d[_0x1757('0x34')][_0x1757('0x63')]=_0x238316[_0x1757('0x63')];}return db[_0x1757('0x3e')][_0x1757('0x64')](_0xc5705d)[_0x1757('0x65')](function(_0x2a4701,_0xf2fdfe){if(_0xf2fdfe){_0x25056e++;}else{_0x9f38f++;}})[_0x1757('0x44')](function(_0x2befaa){console['error'](_0x2befaa);_0x121b9b++;});});})[_0x1757('0x22')](function(_0x38b613){if(_0x38b613){return{'success':_0x25056e,'failure':_0x121b9b,'duplicates':_0x9f38f};}})[_0x1757('0x22')](respondWithResult(_0x12314d,0xc9))[_0x1757('0x44')](handleError(_0x12314d,null));};exports[_0x1757('0x66')]=function(_0xeb1d6a,_0x24a0be,_0x4a3416){var _0x279cc8;return db['CmContact'][_0x1757('0x28')]()[_0x1757('0x22')](function(_0x5bd394){return db[_0x1757('0x3e')]['find']({'where':{'id':_0xeb1d6a[_0x1757('0x43')]['id']},'include':[{'model':db[_0x1757('0x3c')],'as':_0x1757('0x3d'),'attributes':['id',_0x1757('0x25'),_0x1757('0x40')],'required':_0xeb1d6a[_0x1757('0x2b')][_0x1757('0x39')]?!![]:![]}],'attributes':_[_0x1757('0x2a')](_0x5bd394)});})['then'](function(_0x2fbdce){_0x279cc8=_0x2fbdce['get']({'plain':!![]});var _0x9540e2={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x2fbdce&&_0x2fbdce[_0x1757('0x63')]){if(_0x2fbdce['ListId']){_0x9540e2[_0x1757('0x34')][_0x1757('0x67')][_0x1757('0x3b')]({'ListId':{'$ne':_0x2fbdce['ListId']}});}}return db['CmCustomField'][_0x1757('0x45')](_0x9540e2);})[_0x1757('0x22')](function(_0x528af8){return _[_0x1757('0x68')](_0x279cc8,_['map'](_0x528af8,function(_0x47012c){return util[_0x1757('0x69')]('cf_%d',_0x47012c['id']);}));})['then'](handleEntityNotFound(_0x24a0be,null))[_0x1757('0x22')](respondWithResult(_0x24a0be,null))[_0x1757('0x44')](handleError(_0x24a0be,null));};exports[_0x1757('0x21')]=function(_0x4157ae,_0x191727){var _0x8a544a;if(_0x4157ae[_0x1757('0x46')]['id']){delete _0x4157ae[_0x1757('0x46')]['id'];}return db['CmContact'][_0x1757('0x42')]({'where':{'id':_0x4157ae[_0x1757('0x43')]['id']}})['then'](handleEntityNotFound(_0x191727,null))['then'](saveUpdates(_0x4157ae[_0x1757('0x46')],null))[_0x1757('0x22')](function(_0x2b9cc4){_0x8a544a=_0x2b9cc4;var _0x2ee8e0={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x2b9cc4&&_0x2b9cc4['ListId']){if(_0x2b9cc4['ListId']){_0x2ee8e0[_0x1757('0x34')]['$and']['push']({'ListId':{'$ne':_0x2b9cc4[_0x1757('0x63')]}});}}return db[_0x1757('0x6a')][_0x1757('0x45')](_0x2ee8e0);})['then'](function(_0x1dbe46){if(_0x1dbe46){return _['omit'](_[_0x1757('0x6b')](_0x4157ae[_0x1757('0x46')],function(_0x16fea0,_0x5c0127){return _[_0x1757('0x6c')](_0x5c0127,_0x1757('0x6d'));}),_[_0x1757('0x6e')](_0x1dbe46,function(_0x5676e6){return util['format']('cf_%d',_0x5676e6['id']);}));}})[_0x1757('0x22')](function(_0x4be6df){if(_0x4be6df&&!_[_0x1757('0x6f')](_0x4be6df)){var _0x448486=squel[_0x1757('0x21')]()['table'](_0x1757('0x70'))[_0x1757('0x71')](_0x4be6df)['where'](_0x1757('0x72'),_0x4157ae[_0x1757('0x43')]['id'])['toParam']();return db['sequelize'][_0x1757('0x2b')](_0x448486[_0x1757('0x73')],{'replacements':_0x448486[_0x1757('0x74')]});}})[_0x1757('0x22')](function(){if(_0x4157ae['body'][_0x1757('0x75')]&&_0x8a544a){return db[_0x1757('0x76')][_0x1757('0x21')]({'phone':_0x4157ae[_0x1757('0x46')][_0x1757('0x75')]},{'where':{'ContactId':_0x8a544a['id']}});}})[_0x1757('0x22')](function(){return _0x8a544a;})['then'](respondWithResult(_0x191727,null))['catch'](handleError(_0x191727,null));};exports['getTags']=function(_0x5ec264,_0x44f2f3,_0x3ce396){var _0x39c06c={};var _0x7c9d4={};var _0x2a3a79;var _0x13930f;return db[_0x1757('0x3e')][_0x1757('0x77')]({'where':{'id':_0x5ec264[_0x1757('0x43')]['id']}})['then'](handleEntityNotFound(_0x44f2f3,null))[_0x1757('0x22')](function(_0x1467e0){if(_0x1467e0){_0x2a3a79=_0x1467e0;_0x7c9d4['model']=_[_0x1757('0x2a')](db[_0x1757('0x3c')]['rawAttributes']);_0x7c9d4['query']=_[_0x1757('0x2a')](_0x5ec264[_0x1757('0x2b')]);_0x7c9d4[_0x1757('0x2e')]=_[_0x1757('0x2f')](_0x7c9d4[_0x1757('0x29')],_0x7c9d4[_0x1757('0x2b')]);_0x39c06c['attributes']=_[_0x1757('0x2f')](_0x7c9d4['model'],qs['fields'](_0x5ec264[_0x1757('0x2b')][_0x1757('0x78')]));_0x39c06c[_0x1757('0x30')]=_0x39c06c[_0x1757('0x30')][_0x1757('0x31')]?_0x39c06c['attributes']:_0x7c9d4[_0x1757('0x29')];_0x39c06c[_0x1757('0x79')]=qs[_0x1757('0x33')](_0x5ec264[_0x1757('0x2b')][_0x1757('0x33')]);_0x39c06c['where']=qs[_0x1757('0x2e')](_[_0x1757('0x35')](_0x5ec264[_0x1757('0x2b')],_0x7c9d4['filters']));if(_0x5ec264[_0x1757('0x2b')][_0x1757('0x38')]){_0x39c06c[_0x1757('0x34')]=_['merge'](_0x39c06c[_0x1757('0x34')],{'$or':_['map'](_0x39c06c[_0x1757('0x30')],function(_0x3dabaf){var _0x5e5692={};_0x5e5692[_0x3dabaf]={'$like':'%'+_0x5ec264[_0x1757('0x2b')]['filter']+'%'};return _0x5e5692;})});}_0x39c06c=_[_0x1757('0x37')]({},_0x39c06c,_0x5ec264['options']);return _0x2a3a79[_0x1757('0x7a')](_0x39c06c);}})[_0x1757('0x22')](function(_0x501ba1){if(_0x501ba1){_0x13930f=_0x501ba1['length'];if(!_0x5ec264[_0x1757('0x2b')]['hasOwnProperty'](_0x1757('0x32'))){_0x39c06c['limit']=qs[_0x1757('0x1a')](_0x5ec264['query'][_0x1757('0x1a')]);_0x39c06c['offset']=qs[_0x1757('0x19')](_0x5ec264['query'][_0x1757('0x19')]);}return _0x2a3a79['getTags'](_0x39c06c);}})['then'](function(_0x399713){if(_0x399713){return _0x399713?{'count':_0x13930f,'rows':_0x399713}:null;}})[_0x1757('0x22')](respondWithResult(_0x44f2f3,null))[_0x1757('0x44')](handleError(_0x44f2f3,null));};exports[_0x1757('0x7b')]=function(_0x42b8db,_0x5729cc,_0x3a2d8c){if(_0x42b8db['body']['id']){delete _0x42b8db[_0x1757('0x46')]['id'];}return db[_0x1757('0x3e')][_0x1757('0x77')]({'where':{'id':_0x42b8db[_0x1757('0x43')]['id']}})[_0x1757('0x22')](handleEntityNotFound(_0x5729cc,null))['then'](function(_0x637a93){if(_0x637a93){return _0x637a93[_0x1757('0x7b')](_0x42b8db['body']['ids']||[]);}return null;})[_0x1757('0x22')](respondWithResult(_0x5729cc,null))['catch'](handleError(_0x5729cc,null));};exports[_0x1757('0x7c')]=function(_0x504003,_0x4560ed,_0xe4d20d){var _0x4e4126={'raw':![],'where':{}};var _0x2560f1={};var _0x2fa969={'count':0x0,'rows':[]};return db[_0x1757('0x3e')]['findOne']({'where':{'id':_0x504003[_0x1757('0x43')]['id']}})[_0x1757('0x22')](handleEntityNotFound(_0x4560ed,null))['then'](function(_0x5d7c83){if(_0x5d7c83){_0x2560f1[_0x1757('0x29')]=_['keys'](db['CmHopper'][_0x1757('0x7d')]);_0x2560f1[_0x1757('0x2b')]=_['keys'](_0x504003[_0x1757('0x2b')]);_0x2560f1[_0x1757('0x2e')]=_[_0x1757('0x2f')](_0x2560f1[_0x1757('0x29')],_0x2560f1[_0x1757('0x2b')]);_0x4e4126[_0x1757('0x30')]=_['intersection'](_0x2560f1[_0x1757('0x29')],qs['fields'](_0x504003['query'][_0x1757('0x78')]));_0x4e4126[_0x1757('0x30')]=_0x4e4126[_0x1757('0x30')][_0x1757('0x31')]?_0x4e4126[_0x1757('0x30')]:_0x2560f1[_0x1757('0x29')];if(!_0x504003['query'][_0x1757('0x7e')](_0x1757('0x32'))){_0x4e4126['limit']=qs[_0x1757('0x1a')](_0x504003[_0x1757('0x2b')][_0x1757('0x1a')]);_0x4e4126[_0x1757('0x19')]=qs['offset'](_0x504003[_0x1757('0x2b')][_0x1757('0x19')]);}_0x4e4126['order']=qs[_0x1757('0x33')](_0x504003[_0x1757('0x2b')][_0x1757('0x33')]);_0x4e4126[_0x1757('0x34')]=qs[_0x1757('0x2e')](_[_0x1757('0x35')](_0x504003[_0x1757('0x2b')],_0x2560f1[_0x1757('0x2e')]));_0x4e4126[_0x1757('0x34')][_0x1757('0x7f')]=_0x5d7c83['id'];if(_0x504003[_0x1757('0x2b')][_0x1757('0x38')]){_0x4e4126[_0x1757('0x34')]=_[_0x1757('0x37')](_0x4e4126[_0x1757('0x34')],{'$or':_[_0x1757('0x6e')](_0x4e4126[_0x1757('0x30')],function(_0x574387){var _0x4d6e8d={};_0x4d6e8d[_0x574387]={'$like':'%'+_0x504003[_0x1757('0x2b')][_0x1757('0x38')]+'%'};return _0x4d6e8d;})});}_0x4e4126=_[_0x1757('0x37')]({},_0x4e4126,_0x504003['options']);return db[_0x1757('0x76')][_0x1757('0x18')]({'where':_0x4e4126[_0x1757('0x34')]})[_0x1757('0x22')](function(_0x477be6){_0x2fa969['count']=_0x477be6;if(_0x504003[_0x1757('0x2b')]['includeAll']){_0x4e4126[_0x1757('0x3a')]=[{'all':!![]}];}return db['CmHopper'][_0x1757('0x45')](_0x4e4126);})[_0x1757('0x22')](function(_0x4ceb4a){_0x2fa969[_0x1757('0x80')]=_0x4ceb4a;return _0x2fa969;});}})[_0x1757('0x22')](respondWithFilteredResult(_0x4560ed,_0x4e4126))[_0x1757('0x44')](handleError(_0x4560ed,null));};exports['getHopperHistories']=function(_0x4ad6fd,_0x5c1d1b,_0x51cc73){var _0x4b1e95={'raw':!![],'where':{}};var _0x49667f={};var _0x2946d2={'count':0x0,'rows':[]};return db['CmContact'][_0x1757('0x77')]({'where':{'id':_0x4ad6fd[_0x1757('0x43')]['id']}})['then'](handleEntityNotFound(_0x5c1d1b,null))[_0x1757('0x22')](function(_0xdc34b5){if(_0xdc34b5){_0x49667f['model']=_[_0x1757('0x2a')](db['CmHopperHistory'][_0x1757('0x7d')]);_0x49667f[_0x1757('0x2b')]=_['keys'](_0x4ad6fd[_0x1757('0x2b')]);_0x49667f['filters']=_[_0x1757('0x2f')](_0x49667f[_0x1757('0x29')],_0x49667f[_0x1757('0x2b')]);_0x4b1e95[_0x1757('0x30')]=_[_0x1757('0x2f')](_0x49667f[_0x1757('0x29')],qs[_0x1757('0x78')](_0x4ad6fd[_0x1757('0x2b')]['fields']));_0x4b1e95[_0x1757('0x30')]=_0x4b1e95[_0x1757('0x30')][_0x1757('0x31')]?_0x4b1e95[_0x1757('0x30')]:_0x49667f[_0x1757('0x29')];if(!_0x4ad6fd[_0x1757('0x2b')][_0x1757('0x7e')](_0x1757('0x32'))){_0x4b1e95['limit']=qs[_0x1757('0x1a')](_0x4ad6fd[_0x1757('0x2b')][_0x1757('0x1a')]);_0x4b1e95['offset']=qs[_0x1757('0x19')](_0x4ad6fd[_0x1757('0x2b')][_0x1757('0x19')]);}_0x4b1e95[_0x1757('0x79')]=qs[_0x1757('0x33')](_0x4ad6fd[_0x1757('0x2b')]['sort']);_0x4b1e95[_0x1757('0x34')]=qs[_0x1757('0x2e')](_[_0x1757('0x35')](_0x4ad6fd[_0x1757('0x2b')],_0x49667f['filters']));_0x4b1e95[_0x1757('0x34')][_0x1757('0x7f')]=_0xdc34b5['id'];if(_0x4ad6fd[_0x1757('0x2b')][_0x1757('0x38')]){_0x4b1e95[_0x1757('0x34')]=_['merge'](_0x4b1e95[_0x1757('0x34')],{'$or':_[_0x1757('0x6e')](_0x4b1e95[_0x1757('0x30')],function(_0xbe9f38){var _0x522b29={};_0x522b29[_0xbe9f38]={'$like':'%'+_0x4ad6fd['query'][_0x1757('0x38')]+'%'};return _0x522b29;})});}_0x4b1e95=_[_0x1757('0x37')]({},_0x4b1e95,_0x4ad6fd['options']);return db['CmHopperHistory'][_0x1757('0x18')]({'where':_0x4b1e95[_0x1757('0x34')]})['then'](function(_0xe8f539){_0x2946d2[_0x1757('0x18')]=_0xe8f539;if(_0x4ad6fd[_0x1757('0x2b')][_0x1757('0x3f')]){_0x4b1e95[_0x1757('0x3a')]=[{'all':!![]}];}return db[_0x1757('0x5c')]['findAll'](_0x4b1e95);})[_0x1757('0x22')](function(_0x52b528){_0x2946d2['rows']=_0x52b528;return _0x2946d2;});}})[_0x1757('0x22')](respondWithFilteredResult(_0x5c1d1b,_0x4b1e95))[_0x1757('0x44')](handleError(_0x5c1d1b,null));};exports[_0x1757('0x81')]=function(_0x2c9eb9,_0x3a24b,_0x3af5f7){var _0x4f67fe={'raw':!![],'where':{}};var _0x291727={};var _0x2a9d06={'count':0x0,'rows':[]};return db['CmContact']['findOne']({'where':{'id':_0x2c9eb9[_0x1757('0x43')]['id']}})[_0x1757('0x22')](handleEntityNotFound(_0x3a24b,null))[_0x1757('0x22')](function(_0x106513){if(_0x106513){_0x291727[_0x1757('0x29')]=_[_0x1757('0x2a')](db['CmHopperFinal']['rawAttributes']);_0x291727[_0x1757('0x2b')]=_[_0x1757('0x2a')](_0x2c9eb9[_0x1757('0x2b')]);_0x291727['filters']=_[_0x1757('0x2f')](_0x291727[_0x1757('0x29')],_0x291727['query']);_0x4f67fe[_0x1757('0x30')]=_['intersection'](_0x291727[_0x1757('0x29')],qs['fields'](_0x2c9eb9['query'][_0x1757('0x78')]));_0x4f67fe['attributes']=_0x4f67fe[_0x1757('0x30')][_0x1757('0x31')]?_0x4f67fe[_0x1757('0x30')]:_0x291727[_0x1757('0x29')];if(!_0x2c9eb9[_0x1757('0x2b')][_0x1757('0x7e')]('nolimit')){_0x4f67fe[_0x1757('0x1a')]=qs[_0x1757('0x1a')](_0x2c9eb9[_0x1757('0x2b')]['limit']);_0x4f67fe[_0x1757('0x19')]=qs[_0x1757('0x19')](_0x2c9eb9[_0x1757('0x2b')][_0x1757('0x19')]);}_0x4f67fe[_0x1757('0x79')]=qs[_0x1757('0x33')](_0x2c9eb9[_0x1757('0x2b')]['sort']);_0x4f67fe[_0x1757('0x34')]=qs['filters'](_[_0x1757('0x35')](_0x2c9eb9[_0x1757('0x2b')],_0x291727[_0x1757('0x2e')]));_0x4f67fe[_0x1757('0x34')][_0x1757('0x7f')]=_0x106513['id'];if(_0x2c9eb9[_0x1757('0x2b')]['filter']){_0x4f67fe['where']=_[_0x1757('0x37')](_0x4f67fe[_0x1757('0x34')],{'$or':_[_0x1757('0x6e')](_0x4f67fe[_0x1757('0x30')],function(_0x23b650){var _0x1e5cb3={};_0x1e5cb3[_0x23b650]={'$like':'%'+_0x2c9eb9[_0x1757('0x2b')][_0x1757('0x38')]+'%'};return _0x1e5cb3;})});}_0x4f67fe=_[_0x1757('0x37')]({},_0x4f67fe,_0x2c9eb9['options']);return db['CmHopperFinal'][_0x1757('0x18')]({'where':_0x4f67fe[_0x1757('0x34')]})[_0x1757('0x22')](function(_0x3c8fca){_0x2a9d06[_0x1757('0x18')]=_0x3c8fca;if(_0x2c9eb9['query'][_0x1757('0x3f')]){_0x4f67fe['include']=[{'all':!![]}];}return db['CmHopperFinal']['findAll'](_0x4f67fe);})[_0x1757('0x22')](function(_0x2006a9){_0x2a9d06[_0x1757('0x80')]=_0x2006a9;return _0x2a9d06;});}})['then'](respondWithFilteredResult(_0x3a24b,_0x4f67fe))[_0x1757('0x44')](handleError(_0x3a24b,null));};exports[_0x1757('0x82')]=function(_0x41c56c,_0x3b4224,_0x34a307){var _0x198549={'raw':!![],'where':{}};var _0x324407={};var _0x5b0db7={'count':0x0,'rows':[]};return db['CmContact'][_0x1757('0x77')]({'where':{'id':_0x41c56c[_0x1757('0x43')]['id']}})[_0x1757('0x22')](handleEntityNotFound(_0x3b4224,null))[_0x1757('0x22')](function(_0x2ed04c){if(_0x2ed04c){_0x324407['model']=_['keys'](db[_0x1757('0x83')]['rawAttributes']);_0x324407['query']=_['keys'](_0x41c56c['query']);_0x324407[_0x1757('0x2e')]=_[_0x1757('0x2f')](_0x324407['model'],_0x324407[_0x1757('0x2b')]);_0x198549['attributes']=_[_0x1757('0x2f')](_0x324407[_0x1757('0x29')],qs[_0x1757('0x78')](_0x41c56c[_0x1757('0x2b')][_0x1757('0x78')]));_0x198549['attributes']=_0x198549[_0x1757('0x30')]['length']?_0x198549['attributes']:_0x324407['model'];if(!_0x41c56c['query']['hasOwnProperty'](_0x1757('0x32'))){_0x198549[_0x1757('0x1a')]=qs[_0x1757('0x1a')](_0x41c56c['query']['limit']);_0x198549[_0x1757('0x19')]=qs['offset'](_0x41c56c[_0x1757('0x2b')][_0x1757('0x19')]);}_0x198549[_0x1757('0x79')]=qs[_0x1757('0x33')](_0x41c56c[_0x1757('0x2b')][_0x1757('0x33')]);_0x198549[_0x1757('0x34')]=qs['filters'](_['pick'](_0x41c56c[_0x1757('0x2b')],_0x324407['filters']));_0x198549['where'][_0x1757('0x7f')]=_0x2ed04c['id'];if(_0x41c56c[_0x1757('0x2b')]['filter']){_0x198549[_0x1757('0x34')]=_[_0x1757('0x37')](_0x198549['where'],{'$or':_[_0x1757('0x6e')](_0x198549[_0x1757('0x30')],function(_0x160196){var _0x1cbb7b={};_0x1cbb7b[_0x160196]={'$like':'%'+_0x41c56c[_0x1757('0x2b')][_0x1757('0x38')]+'%'};return _0x1cbb7b;})});}_0x198549=_[_0x1757('0x37')]({},_0x198549,_0x41c56c[_0x1757('0x84')]);return db[_0x1757('0x83')][_0x1757('0x18')]({'where':_0x198549['where']})[_0x1757('0x22')](function(_0xc8a3db){_0x5b0db7[_0x1757('0x18')]=_0xc8a3db;if(_0x41c56c['query'][_0x1757('0x3f')]){_0x198549['include']=[{'all':!![]}];}return db[_0x1757('0x83')][_0x1757('0x45')](_0x198549);})[_0x1757('0x22')](function(_0x5044ea){_0x5b0db7[_0x1757('0x80')]=_0x5044ea;return _0x5b0db7;});}})[_0x1757('0x22')](respondWithFilteredResult(_0x3b4224,_0x198549))[_0x1757('0x44')](handleError(_0x3b4224,null));};exports['uploadCsv']=function(_0x12b96a,_0x32d341,_0xddf678){try{if(!_0x12b96a[_0x1757('0x46')][_0x1757('0x63')]){throw new Error(_0x1757('0x85'));}if(!_0x12b96a[_0x1757('0x46')][_0x1757('0x86')]){throw new Error(_0x1757('0x87'));}if(!_0x12b96a[_0x1757('0x46')][_0x1757('0x88')]){throw new Error(_0x1757('0x89'));}if(!_0x12b96a['body']['socket_timestamp']){throw new Error('Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed');}var _0x45614d=_0x12b96a[_0x1757('0x46')][_0x1757('0x86')]['split'](',');var _0x311e6e=_0x12b96a['body']['binding_values'][_0x1757('0x8a')](',');if(!_0x45614d[_0x1757('0x31')]||!_0x311e6e['length']||_0x45614d['length']!==_0x311e6e[_0x1757('0x31')]){throw new Error(_0x1757('0x8b'));}_0x12b96a[_0x1757('0x46')][_0x1757('0x78')]=_[_0x1757('0x8c')](_0x45614d,_0x311e6e);if(!_0x12b96a['body'][_0x1757('0x78')][_0x1757('0x75')]){throw new Error(_0x1757('0x8d'));}if(!_0x12b96a[_0x1757('0x46')]['fields'][_0x1757('0x8e')]){throw new Error(_0x1757('0x8f'));}var _0x52ad33=path[_0x1757('0x4b')](config['root'],_0x1757('0x90'),_0x12b96a[_0x1757('0x91')][_0x1757('0x92')]);fs[_0x1757('0x93')](_0x52ad33,parseInt(_0x1757('0x94'),0x8));var _0x4d430e=require(_0x1757('0x95'))[_0x1757('0x96')](path[_0x1757('0x4b')](__dirname,'../../components/import/cm/csv'),[_0x52ad33,_0x12b96a['body'][_0x1757('0x86')],_0x12b96a[_0x1757('0x46')][_0x1757('0x88')],_0x12b96a[_0x1757('0x46')][_0x1757('0x63')],_0x12b96a['body'][_0x1757('0x97')],_0x12b96a[_0x1757('0x46')]['duplicates'],_0x12b96a['body'][_0x1757('0x98')]]);return _0x32d341[_0x1757('0x16')](0xc8)[_0x1757('0x1d')]({'message':_0x1757('0x99'),'pid':_0x4d430e[_0x1757('0x9a')]});}catch(_0x14b976){return _0x32d341['status'](0x1f4)[_0x1757('0x26')](_0x14b976);}};exports[_0x1757('0x9b')]=function(_0xf46bdb,_0x4f2dcd,_0x337f0b){var _0x23e1c8=fs[_0x1757('0x9c')](_0xf46bdb[_0x1757('0x91')][_0x1757('0x6')]);Papa[_0x1757('0x9d')](_0x23e1c8,{'header':!![],'skipEmptyLines':!![],'preview':0x1,'complete':function(_0x3f3d18){return _0x4f2dcd[_0x1757('0x16')](0xc8)['json']({'file':_0xf46bdb['file'],'fields':_0x3f3d18['meta'][_0x1757('0x78')]});}});};exports[_0x1757('0x9e')]=function(_0x4b2494,_0x4070da,_0x1b08cd){return db[_0x1757('0x9f')][_0x1757('0x45')]({'raw':!![],'attributes':['id'],'where':{'role':'agent'}})[_0x1757('0x22')](function(_0x7677b2){var _0x13c2a8=![];if(!_0x4b2494[_0x1757('0x46')]['ListId']){throw new Error(_0x1757('0x85'));}if(!_0x4b2494[_0x1757('0x46')][_0x1757('0xa0')][_0x1757('0x75')]){throw new Error(_0x1757('0x8d'));}if(!_0x4b2494[_0x1757('0x46')][_0x1757('0xa0')][_0x1757('0x8e')]){throw new Error(_0x1757('0x8f'));}if(!_0x4b2494[_0x1757('0x46')][_0x1757('0x98')]){throw new Error('Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed');}var _0x5b3915=require('child_process')[_0x1757('0x96')](path[_0x1757('0x4b')](__dirname,_0x1757('0xa1')),[_0x4b2494['params']['id'],JSON[_0x1757('0xa2')](_0x4b2494[_0x1757('0x46')]),JSON['stringify'](_0x7677b2)]);_0x5b3915['on']('message',function(_0xb6aed0){_0x13c2a8=!![];return _0x4070da['status'](0xc8)[_0x1757('0x1d')]({'message':'start\x20child\x20process\x20correctly!','pid':_0x5b3915[_0x1757('0x9a')]});});_0x5b3915['on']('exit',function(_0x2103a7){if(_0x2103a7&&!_0x13c2a8){return _0x4070da[_0x1757('0x16')](0x1f4)[_0x1757('0x1d')]({'message':_0x1757('0xa3'),'pid':_0x5b3915['pid']});}});})[_0x1757('0x44')](handleError(_0x4070da,null));};
\ No newline at end of file
index e12ccc0..e385ada 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe0e8=['hook','events','CmContact','save','update','remove','emit','hasOwnProperty'];(function(_0x2fc515,_0x3a9b2a){var _0x5a1665=function(_0x42ee92){while(--_0x42ee92){_0x2fc515['push'](_0x2fc515['shift']());}};_0x5a1665(++_0x3a9b2a);}(_0xe0e8,0xe9));var _0x8e0e=function(_0x53e50a,_0x123a6f){_0x53e50a=_0x53e50a-0x0;var _0x2504ab=_0xe0e8[_0x53e50a];return _0x2504ab;};'use strict';var EventEmitter=require(_0x8e0e('0x0'));var CmContact=require('../../mysqldb')['db'][_0x8e0e('0x1')];var CmContactEvents=new EventEmitter();CmContactEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x8e0e('0x2'),'afterUpdate':_0x8e0e('0x3'),'afterDestroy':_0x8e0e('0x4')};function emitEvent(_0x5bacc7){return function(_0x1ba854,_0xaab575,_0x2e66cb){CmContactEvents[_0x8e0e('0x5')](_0x5bacc7+':'+_0x1ba854['id'],_0x1ba854);CmContactEvents[_0x8e0e('0x5')](_0x5bacc7,_0x1ba854);_0x2e66cb(null);};}for(var e in events){if(events[_0x8e0e('0x6')](e)){var event=events[e];CmContact[_0x8e0e('0x7')](e,emitEvent(event));}}module['exports']=CmContactEvents;
\ No newline at end of file
+var _0x07c7=['events','../../mysqldb','CmContact','save','update','emit','hasOwnProperty'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x07c7,0x1ab));var _0x707c=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x07c7[_0x14add3];return _0x4a174f;};'use strict';var EventEmitter=require(_0x707c('0x0'));var CmContact=require(_0x707c('0x1'))['db'][_0x707c('0x2')];var CmContactEvents=new EventEmitter();CmContactEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x707c('0x3'),'afterUpdate':_0x707c('0x4'),'afterDestroy':'remove'};function emitEvent(_0x3b3222){return function(_0x237ba1,_0x3c0a4a,_0x2b5946){CmContactEvents[_0x707c('0x5')](_0x3b3222+':'+_0x237ba1['id'],_0x237ba1);CmContactEvents[_0x707c('0x5')](_0x3b3222,_0x237ba1);_0x2b5946(null);};}for(var e in events){if(events[_0x707c('0x6')](e)){var event=events[e];CmContact['hook'](e,emitEvent(event));}}module['exports']=CmContactEvents;
\ No newline at end of file
index 09cecc7..f7be419 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa296=['outbound','CmList','Lists','length','always','onlyIfOpen','BlackLists','cmContact,\x20%s,\x20%s','message','Campaign','dialCheckDuplicateType','CmHopperBlack','List\x20not\x20found','models','isEmpty','destroy','ContactId','VoiceQueueId','CampaignId','push','all','[CmContact][afterDestroy][Error]','util','../../config/logger','moment','./cmContact.attributes','exports','CmContact','cm_contacts','phone','get','error','cmContact','afterCreate','CmHopper','findOne','then','isNil','cmContact,\x20afterCreate\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20onlyIfOpen,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','create','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','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20VoiceQueue\x20','ListId','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','cmContact,\x20afterCreate,\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20Campaign\x20','VoiceQueue','findAll'];(function(_0xff7321,_0x369a13){var _0x59dc47=function(_0x3837b6){while(--_0x3837b6){_0xff7321['push'](_0xff7321['shift']());}};_0x59dc47(++_0x369a13);}(_0xa296,0x172));var _0x6a29=function(_0x300a0a,_0x1653d4){_0x300a0a=_0x300a0a-0x0;var _0x28b718=_0xa296[_0x300a0a];return _0x28b718;};'use strict';var _=require('lodash');var util=require(_0x6a29('0x0'));var logger=require(_0x6a29('0x1'))('api');var moment=require(_0x6a29('0x2'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x6a29('0x3'));module[_0x6a29('0x4')]=function(_0x57df1d,_0x3a8033){return _0x57df1d['define'](_0x6a29('0x5'),attributes,{'tableName':_0x6a29('0x6'),'paranoid':!![],'indexes':[{'name':_0x6a29('0x7'),'fields':['phone']}],'timestamps':!![],'hooks':{'afterCreate':function(_0x6f6045,_0x28de38,_0x301896){var _0x4b5a27=_0x57df1d['models'];var _0x4d840d=_0x6f6045[_0x6a29('0x8')]({'plain':!![]});function _0x28b3ab(){return function(_0x37597c){logger[_0x6a29('0x9')](_0x6a29('0xa'),_0x6a29('0xb'),util['inspect'](_0x37597c,{'showHidden':![],'depth':null}));};}var _0x53c4a1=function(_0x275f97){return new BPromise(function(_0x2f6298,_0x2906d1){_0x4b5a27[_0x6a29('0xc')][_0x6a29('0xd')]({'where':{'phone':_0x4d840d['phone'],'VoiceQueueId':_0x275f97['id']}})[_0x6a29('0xe')](function(_0x45516c){if(!_[_0x6a29('0xf')](_0x45516c)){throw new Error(_0x6a29('0x10')+_0x4d840d[_0x6a29('0x7')]+_0x6a29('0x11')+_0x275f97['id']);}return _0x4b5a27[_0x6a29('0xc')][_0x6a29('0x12')]({'phone':_0x4d840d['phone'],'ContactId':_0x4d840d['id'],'ListId':_0x4d840d['ListId'],'priority':_0x4d840d[_0x6a29('0x13')]?_0x4d840d[_0x6a29('0x13')]:0x2,'scheduledat':_0x4d840d[_0x6a29('0x14')]?_0x4d840d[_0x6a29('0x14')]:moment()[_0x6a29('0x15')]('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0x4d840d[_0x6a29('0x16')]?!![]:![],'callbackuniqueid':_0x4d840d[_0x6a29('0x16')]?_0x4d840d['callbackUniqueid']:undefined,'callbackat':_0x4d840d[_0x6a29('0x16')]?moment()[_0x6a29('0x15')](_0x6a29('0x17')):undefined,'VoiceQueueId':_0x275f97['id']});})[_0x6a29('0x18')](function(_0x5ea02e){_0x2906d1(_0x5ea02e);});});};var _0x58391a=function(_0x2cd11c){return new BPromise(function(_0x24bc74,_0x1f3473){_0x4b5a27[_0x6a29('0xc')][_0x6a29('0xd')]({'where':{'phone':_0x4d840d['phone'],'VoiceQueueId':_0x2cd11c['id']}})[_0x6a29('0xe')](function(_0x2b83d7){if(!_[_0x6a29('0xf')](_0x2b83d7)){throw new Error(_0x6a29('0x10')+_0x4d840d[_0x6a29('0x7')]+_0x6a29('0x19')+_0x2cd11c['id']);}return _0x4b5a27[_0x6a29('0x1a')]['findOne']({'where':{'calleridnum':_0x4d840d['phone'],'VoiceQueueId':_0x2cd11c['id']}});})['then'](function(_0x20653a){if(!_[_0x6a29('0xf')](_0x20653a)){throw new Error('cmContact,\x20afterCreate,\x20'+_0x4d840d['phone']+_0x6a29('0x1b')+_0x2cd11c['id']);}return _0x4b5a27[_0x6a29('0xc')][_0x6a29('0x12')]({'phone':_0x4d840d[_0x6a29('0x7')],'ContactId':_0x4d840d['id'],'ListId':_0x4d840d[_0x6a29('0x1c')],'priority':_0x4d840d['priority']?_0x4d840d[_0x6a29('0x13')]:0x2,'scheduledat':_0x4d840d[_0x6a29('0x14')]?_0x4d840d[_0x6a29('0x14')]:moment()[_0x6a29('0x15')](_0x6a29('0x17')),'callback':_0x4d840d[_0x6a29('0x16')]?!![]:![],'callbackuniqueid':_0x4d840d['callbackUniqueid']?_0x4d840d['callbackUniqueid']:undefined,'callbackat':_0x4d840d['callbackUniqueid']?moment()['format'](_0x6a29('0x17')):undefined,'VoiceQueueId':_0x2cd11c['id']});})[_0x6a29('0x18')](function(_0x871737){_0x1f3473(_0x871737);});});};function _0x38c387(){return function(_0x5405cd){logger['error'](_0x6a29('0xa'),_0x6a29('0xb'),util[_0x6a29('0x1d')](_0x5405cd,{'showHidden':![],'depth':null}));};}var _0x4dedc0=function(_0x1ee201){return new BPromise(function(_0xa3bb95,_0x39b074){_0x4b5a27['CmHopper'][_0x6a29('0xd')]({'where':{'phone':_0x4d840d['phone'],'CampaignId':_0x1ee201['id']}})[_0x6a29('0xe')](function(_0x33eaca){if(!_[_0x6a29('0xf')](_0x33eaca)){throw new Error(_0x6a29('0x10')+_0x4d840d['phone']+_0x6a29('0x1e')+_0x1ee201['id']);}return _0x4b5a27['CmHopper']['create']({'phone':_0x4d840d[_0x6a29('0x7')],'ContactId':_0x4d840d['id'],'ListId':_0x4d840d[_0x6a29('0x1c')],'priority':_0x4d840d[_0x6a29('0x13')]?_0x4d840d[_0x6a29('0x13')]:0x2,'scheduledat':_0x4d840d[_0x6a29('0x14')]?_0x4d840d[_0x6a29('0x14')]:moment()[_0x6a29('0x15')](_0x6a29('0x17')),'callback':_0x4d840d[_0x6a29('0x16')]?!![]:![],'callbackuniqueid':_0x4d840d[_0x6a29('0x16')]?_0x4d840d['callbackUniqueid']:undefined,'callbackat':_0x4d840d['callbackUniqueid']?moment()[_0x6a29('0x15')]('YYYY-MM-DD\x20HH:mm:ss'):undefined,'CampaignId':_0x1ee201['id']});})['catch'](function(_0x155967){_0x39b074(_0x155967);});});};var _0x1a11cd=function(_0x598ce8){return new BPromise(function(_0x865dc3,_0x3943e8){_0x4b5a27['CmHopper'][_0x6a29('0xd')]({'where':{'phone':_0x4d840d[_0x6a29('0x7')],'CampaignId':_0x598ce8['id']}})[_0x6a29('0xe')](function(_0x572abb){if(!_[_0x6a29('0xf')](_0x572abb)){throw new Error(_0x6a29('0x10')+_0x4d840d['phone']+_0x6a29('0x1f')+_0x598ce8['id']);}return _0x4b5a27[_0x6a29('0x1a')][_0x6a29('0xd')]({'where':{'calleridnum':_0x4d840d[_0x6a29('0x7')],'CampaignId':_0x598ce8['id']}});})[_0x6a29('0xe')](function(_0x90ee92){if(!_[_0x6a29('0xf')](_0x90ee92)){throw new Error(_0x6a29('0x20')+_0x4d840d['phone']+_0x6a29('0x21')+_0x598ce8['id']);}return _0x4b5a27[_0x6a29('0xc')][_0x6a29('0x12')]({'phone':_0x4d840d[_0x6a29('0x7')],'ContactId':_0x4d840d['id'],'ListId':_0x4d840d['ListId'],'priority':_0x4d840d['priority']?_0x4d840d[_0x6a29('0x13')]:0x2,'scheduledat':_0x4d840d[_0x6a29('0x14')]?_0x4d840d[_0x6a29('0x14')]:moment()['format'](_0x6a29('0x17')),'callback':_0x4d840d[_0x6a29('0x16')]?!![]:![],'callbackuniqueid':_0x4d840d[_0x6a29('0x16')]?_0x4d840d[_0x6a29('0x16')]:undefined,'callbackat':_0x4d840d[_0x6a29('0x16')]?moment()['format'](_0x6a29('0x17')):undefined,'CampaignId':_0x598ce8['id']});})[_0x6a29('0x18')](function(_0x5464b4){_0x3943e8(_0x5464b4);});});};if(_0x4d840d[_0x6a29('0x1c')]){_0x4b5a27[_0x6a29('0x22')][_0x6a29('0x23')]({'where':{'type':_0x6a29('0x24')},'attributes':['id','dialCheckDuplicateType'],'include':[{'model':_0x4b5a27[_0x6a29('0x25')],'as':_0x6a29('0x26'),'where':{'id':_0x4d840d[_0x6a29('0x1c')]}}]})[_0x6a29('0xe')](function(_0x41973b){if(_0x41973b){var _0x1361e0=[];for(var _0x17896d=0x0,_0x47a534;_0x17896d<_0x41973b[_0x6a29('0x27')];_0x17896d+=0x1){_0x47a534=_0x41973b[_0x17896d]['get']({'plain':!![]});switch(_0x47a534['dialCheckDuplicateType']){case _0x6a29('0x28'):_0x58391a(_0x47a534)[_0x6a29('0x18')](_0x28b3ab());break;case _0x6a29('0x29'):_0x53c4a1(_0x47a534)['catch'](_0x28b3ab());break;default:_0x4b5a27[_0x6a29('0xc')][_0x6a29('0x12')]({'phone':_0x4d840d[_0x6a29('0x7')],'ContactId':_0x4d840d['id'],'ListId':_0x4d840d[_0x6a29('0x1c')],'scheduledat':_0x4d840d['scheduledAt']?_0x4d840d[_0x6a29('0x14')]:moment()[_0x6a29('0x15')]('YYYY-MM-DD\x20HH:mm:ss'),'priority':_0x4d840d['priority']?_0x4d840d[_0x6a29('0x13')]:0x2,'callback':_0x4d840d[_0x6a29('0x16')]?!![]:![],'callbackuniqueid':_0x4d840d[_0x6a29('0x16')]?_0x4d840d[_0x6a29('0x16')]:undefined,'callbackat':_0x4d840d[_0x6a29('0x16')]?moment()[_0x6a29('0x15')](_0x6a29('0x17')):undefined,'VoiceQueueId':_0x47a534['id']})['catch'](_0x28b3ab());}}}})['then'](function(){return _0x4b5a27[_0x6a29('0x22')][_0x6a29('0x23')]({'where':{'type':_0x6a29('0x24')},'attributes':['id'],'include':[{'model':_0x4b5a27[_0x6a29('0x25')],'as':_0x6a29('0x2a'),'where':{'id':_0x4d840d[_0x6a29('0x1c')]}}]})[_0x6a29('0xe')](function(_0x533b1b){if(_0x533b1b){var _0x20ec1c=[];for(var _0x573c35=0x0,_0x215849;_0x573c35<_0x533b1b[_0x6a29('0x27')];_0x573c35+=0x1){_0x215849=_0x533b1b[_0x573c35][_0x6a29('0x8')]({'plain':!![]});_0x4b5a27['CmHopperBlack']['create']({'phone':_0x4d840d[_0x6a29('0x7')],'ContactId':_0x4d840d['id'],'ListId':_0x4d840d[_0x6a29('0x1c')],'VoiceQueueId':_0x215849['id']})[_0x6a29('0x18')](function(_0x325564){logger[_0x6a29('0x9')](_0x6a29('0x2b'),_0x6a29('0xb'),_0x325564[_0x6a29('0x2c')]);});}}});})[_0x6a29('0xe')](function(){return _0x4b5a27[_0x6a29('0x2d')][_0x6a29('0x23')]({'attributes':['id',_0x6a29('0x2e')],'include':[{'model':_0x4b5a27[_0x6a29('0x25')],'as':_0x6a29('0x26'),'where':{'id':_0x4d840d['ListId']}}]})[_0x6a29('0xe')](function(_0x3153ac){if(_0x3153ac){var _0x42d0d3=[];for(var _0x4d0f31=0x0,_0x40cd85;_0x4d0f31<_0x3153ac[_0x6a29('0x27')];_0x4d0f31+=0x1){_0x40cd85=_0x3153ac[_0x4d0f31][_0x6a29('0x8')]({'plain':!![]});switch(_0x40cd85['dialCheckDuplicateType']){case'always':_0x1a11cd(_0x40cd85)[_0x6a29('0x18')](_0x38c387());break;case _0x6a29('0x29'):_0x4dedc0(_0x40cd85)[_0x6a29('0x18')](_0x38c387());break;default:_0x4b5a27[_0x6a29('0xc')][_0x6a29('0x12')]({'phone':_0x4d840d[_0x6a29('0x7')],'ContactId':_0x4d840d['id'],'ListId':_0x4d840d[_0x6a29('0x1c')],'scheduledat':_0x4d840d[_0x6a29('0x14')]?_0x4d840d[_0x6a29('0x14')]:moment()['format'](_0x6a29('0x17')),'priority':_0x4d840d[_0x6a29('0x13')]?_0x4d840d[_0x6a29('0x13')]:0x2,'callback':_0x4d840d[_0x6a29('0x16')]?!![]:![],'callbackuniqueid':_0x4d840d['callbackUniqueid']?_0x4d840d[_0x6a29('0x16')]:undefined,'callbackat':_0x4d840d['callbackUniqueid']?moment()[_0x6a29('0x15')](_0x6a29('0x17')):undefined,'CampaignId':_0x40cd85['id']})[_0x6a29('0x18')](_0x38c387());}}}});})[_0x6a29('0xe')](function(){return _0x4b5a27['Campaign'][_0x6a29('0x23')]({'attributes':['id'],'include':[{'model':_0x4b5a27['CmList'],'as':_0x6a29('0x2a'),'where':{'id':_0x4d840d['ListId']}}]})[_0x6a29('0xe')](function(_0x966012){if(_0x966012){var _0x1df562=[];for(var _0x1eac31=0x0,_0x11d820;_0x1eac31<_0x966012[_0x6a29('0x27')];_0x1eac31+=0x1){_0x11d820=_0x966012[_0x1eac31][_0x6a29('0x8')]({'plain':!![]});_0x4b5a27[_0x6a29('0x2f')][_0x6a29('0x12')]({'phone':_0x4d840d[_0x6a29('0x7')],'ContactId':_0x4d840d['id'],'ListId':_0x4d840d[_0x6a29('0x1c')],'CampaignId':_0x11d820['id']})[_0x6a29('0x18')](function(_0x4355d3){logger[_0x6a29('0x9')](_0x6a29('0x2b'),_0x6a29('0xb'),_0x4355d3[_0x6a29('0x2c')]);});}}});})[_0x6a29('0xe')](function(){_0x301896();})['catch'](function(_0x5a2867){logger[_0x6a29('0x9')](_0x6a29('0x2b'),_0x6a29('0xb'),_0x5a2867[_0x6a29('0x2c')]);_0x301896(_0x5a2867);});}else{_0x301896(new Error(_0x6a29('0x30')));}},'afterDestroy':function(_0x568c94,_0x579cd1,_0x19939f){var _0xa73cfa=_0x57df1d[_0x6a29('0x31')];var _0x490aed=_0x568c94[_0x6a29('0x8')]({'plain':!![]});return _0xa73cfa['CmHopper'][_0x6a29('0x23')]({'raw':!![],'where':{'ListId':_0x490aed['ListId'],'ContactId':_0x490aed['id']}})[_0x6a29('0xe')](function(_0x192d25){if(!_[_0x6a29('0x32')](_0x192d25)){var _0x206561=[];for(var _0x2209f2=0x0;_0x2209f2<_0x192d25['length'];_0x2209f2+=0x1){var _0x2f2698=_0xa73cfa[_0x6a29('0xc')][_0x6a29('0x33')]({'where':{'ListId':_0x192d25[_0x2209f2][_0x6a29('0x1c')],'ContactId':_0x192d25[_0x2209f2][_0x6a29('0x34')],'VoiceQueueId':_0x192d25[_0x2209f2][_0x6a29('0x35')],'CampaignId':_0x192d25[_0x2209f2][_0x6a29('0x36')]}});_0x206561[_0x6a29('0x37')](_0x2f2698);}return BPromise[_0x6a29('0x38')](_0x206561);}})[_0x6a29('0xe')](function(_0x331059){logger['info']('[CmContact][afterDestroy][Succesfull]',util[_0x6a29('0x1d')](_0x331059,{'showHidden':![],'depth':null}));_0x19939f();})['catch'](function(_0x337bf5){logger[_0x6a29('0x9')](_0x6a29('0x39'),util['inspect'](_0x337bf5,{'showHidden':![],'depth':null}));_0x19939f(_0x337bf5);});}}});};
\ No newline at end of file
+var _0x0371=['CmContact','phone','models','get','cmContact','afterCreate','inspect','findOne','then','isNil','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20onlyIfOpen,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','CmHopper','ListId','priority','scheduledAt','YYYY-MM-DD\x20HH:mm:ss','callbackUniqueid','catch','cmContact,\x20afterCreate\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','CmHopperFinal','cmContact,\x20afterCreate,\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20VoiceQueue\x20','format','error','\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','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20Campaign\x20','create','VoiceQueue','outbound','dialCheckDuplicateType','CmList','Lists','length','always','BlackLists','CmHopperBlack','cmContact,\x20%s,\x20%s','message','Campaign','onlyIfOpen','List\x20not\x20found','findAll','isEmpty','destroy','CampaignId','push','all','info','[CmContact][afterDestroy][Error]','lodash','api','moment','bluebird','request-promise','./cmContact.attributes','exports','define'];(function(_0x4cfa09,_0x3340f9){var _0xbfe4b1=function(_0x325671){while(--_0x325671){_0x4cfa09['push'](_0x4cfa09['shift']());}};_0xbfe4b1(++_0x3340f9);}(_0x0371,0x11f));var _0x1037=function(_0x38841c,_0x1af0bf){_0x38841c=_0x38841c-0x0;var _0x500610=_0x0371[_0x38841c];return _0x500610;};'use strict';var _=require(_0x1037('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x1037('0x1'));var moment=require(_0x1037('0x2'));var BPromise=require(_0x1037('0x3'));var rp=require(_0x1037('0x4'));var attributes=require(_0x1037('0x5'));module[_0x1037('0x6')]=function(_0x12c9a5,_0x1e0a45){return _0x12c9a5[_0x1037('0x7')](_0x1037('0x8'),attributes,{'tableName':'cm_contacts','paranoid':!![],'indexes':[{'name':'phone','fields':[_0x1037('0x9')]}],'timestamps':!![],'hooks':{'afterCreate':function(_0x368581,_0x27f3ab,_0x568045){var _0x347013=_0x12c9a5[_0x1037('0xa')];var _0xa49a6e=_0x368581[_0x1037('0xb')]({'plain':!![]});function _0x40f77b(){return function(_0x705f50){logger['error'](_0x1037('0xc'),_0x1037('0xd'),util[_0x1037('0xe')](_0x705f50,{'showHidden':![],'depth':null}));};}var _0x514db9=function(_0x64def9){return new BPromise(function(_0x21e35b,_0x2cff46){_0x347013['CmHopper'][_0x1037('0xf')]({'where':{'phone':_0xa49a6e['phone'],'VoiceQueueId':_0x64def9['id']}})[_0x1037('0x10')](function(_0x3b98eb){if(!_[_0x1037('0x11')](_0x3b98eb)){throw new Error('cmContact,\x20afterCreate\x20'+_0xa49a6e[_0x1037('0x9')]+_0x1037('0x12')+_0x64def9['id']);}return _0x347013[_0x1037('0x13')]['create']({'phone':_0xa49a6e[_0x1037('0x9')],'ContactId':_0xa49a6e['id'],'ListId':_0xa49a6e[_0x1037('0x14')],'priority':_0xa49a6e[_0x1037('0x15')]?_0xa49a6e[_0x1037('0x15')]:0x2,'scheduledat':_0xa49a6e[_0x1037('0x16')]?_0xa49a6e[_0x1037('0x16')]:moment()['format'](_0x1037('0x17')),'callback':_0xa49a6e[_0x1037('0x18')]?!![]:![],'callbackuniqueid':_0xa49a6e['callbackUniqueid']?_0xa49a6e['callbackUniqueid']:undefined,'callbackat':_0xa49a6e[_0x1037('0x18')]?moment()['format'](_0x1037('0x17')):undefined,'VoiceQueueId':_0x64def9['id']});})[_0x1037('0x19')](function(_0x1508a6){_0x2cff46(_0x1508a6);});});};var _0x5a1615=function(_0x4a43b5){return new BPromise(function(_0x164c06,_0x23d310){_0x347013[_0x1037('0x13')][_0x1037('0xf')]({'where':{'phone':_0xa49a6e[_0x1037('0x9')],'VoiceQueueId':_0x4a43b5['id']}})[_0x1037('0x10')](function(_0x4714e8){if(!_['isNil'](_0x4714e8)){throw new Error(_0x1037('0x1a')+_0xa49a6e['phone']+_0x1037('0x1b')+_0x4a43b5['id']);}return _0x347013[_0x1037('0x1c')][_0x1037('0xf')]({'where':{'calleridnum':_0xa49a6e[_0x1037('0x9')],'VoiceQueueId':_0x4a43b5['id']}});})[_0x1037('0x10')](function(_0x460ed5){if(!_['isNil'](_0x460ed5)){throw new Error(_0x1037('0x1d')+_0xa49a6e[_0x1037('0x9')]+_0x1037('0x1e')+_0x4a43b5['id']);}return _0x347013[_0x1037('0x13')]['create']({'phone':_0xa49a6e['phone'],'ContactId':_0xa49a6e['id'],'ListId':_0xa49a6e['ListId'],'priority':_0xa49a6e[_0x1037('0x15')]?_0xa49a6e['priority']:0x2,'scheduledat':_0xa49a6e[_0x1037('0x16')]?_0xa49a6e[_0x1037('0x16')]:moment()[_0x1037('0x1f')](_0x1037('0x17')),'callback':_0xa49a6e['callbackUniqueid']?!![]:![],'callbackuniqueid':_0xa49a6e[_0x1037('0x18')]?_0xa49a6e[_0x1037('0x18')]:undefined,'callbackat':_0xa49a6e[_0x1037('0x18')]?moment()[_0x1037('0x1f')](_0x1037('0x17')):undefined,'VoiceQueueId':_0x4a43b5['id']});})[_0x1037('0x19')](function(_0x134dac){_0x23d310(_0x134dac);});});};function _0x29d24e(){return function(_0x2781ec){logger[_0x1037('0x20')](_0x1037('0xc'),_0x1037('0xd'),util[_0x1037('0xe')](_0x2781ec,{'showHidden':![],'depth':null}));};}var _0x400465=function(_0x50a5c0){return new BPromise(function(_0x4fd4f2,_0x241953){_0x347013[_0x1037('0x13')][_0x1037('0xf')]({'where':{'phone':_0xa49a6e[_0x1037('0x9')],'CampaignId':_0x50a5c0['id']}})['then'](function(_0x255f12){if(!_['isNil'](_0x255f12)){throw new Error(_0x1037('0x1a')+_0xa49a6e['phone']+_0x1037('0x21')+_0x50a5c0['id']);}return _0x347013['CmHopper']['create']({'phone':_0xa49a6e[_0x1037('0x9')],'ContactId':_0xa49a6e['id'],'ListId':_0xa49a6e[_0x1037('0x14')],'priority':_0xa49a6e['priority']?_0xa49a6e[_0x1037('0x15')]:0x2,'scheduledat':_0xa49a6e['scheduledAt']?_0xa49a6e[_0x1037('0x16')]:moment()[_0x1037('0x1f')](_0x1037('0x17')),'callback':_0xa49a6e['callbackUniqueid']?!![]:![],'callbackuniqueid':_0xa49a6e[_0x1037('0x18')]?_0xa49a6e[_0x1037('0x18')]:undefined,'callbackat':_0xa49a6e['callbackUniqueid']?moment()[_0x1037('0x1f')]('YYYY-MM-DD\x20HH:mm:ss'):undefined,'CampaignId':_0x50a5c0['id']});})['catch'](function(_0x52e2c3){_0x241953(_0x52e2c3);});});};var _0x3e66b2=function(_0x276b61){return new BPromise(function(_0x562286,_0x47c533){_0x347013[_0x1037('0x13')][_0x1037('0xf')]({'where':{'phone':_0xa49a6e[_0x1037('0x9')],'CampaignId':_0x276b61['id']}})['then'](function(_0x3ace36){if(!_[_0x1037('0x11')](_0x3ace36)){throw new Error(_0x1037('0x1a')+_0xa49a6e[_0x1037('0x9')]+_0x1037('0x22')+_0x276b61['id']);}return _0x347013[_0x1037('0x1c')]['findOne']({'where':{'calleridnum':_0xa49a6e[_0x1037('0x9')],'CampaignId':_0x276b61['id']}});})[_0x1037('0x10')](function(_0x4ff51f){if(!_[_0x1037('0x11')](_0x4ff51f)){throw new Error('cmContact,\x20afterCreate,\x20'+_0xa49a6e['phone']+_0x1037('0x23')+_0x276b61['id']);}return _0x347013[_0x1037('0x13')][_0x1037('0x24')]({'phone':_0xa49a6e['phone'],'ContactId':_0xa49a6e['id'],'ListId':_0xa49a6e[_0x1037('0x14')],'priority':_0xa49a6e['priority']?_0xa49a6e['priority']:0x2,'scheduledat':_0xa49a6e[_0x1037('0x16')]?_0xa49a6e[_0x1037('0x16')]:moment()[_0x1037('0x1f')]('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0xa49a6e['callbackUniqueid']?!![]:![],'callbackuniqueid':_0xa49a6e[_0x1037('0x18')]?_0xa49a6e['callbackUniqueid']:undefined,'callbackat':_0xa49a6e[_0x1037('0x18')]?moment()[_0x1037('0x1f')](_0x1037('0x17')):undefined,'CampaignId':_0x276b61['id']});})[_0x1037('0x19')](function(_0x4e4caa){_0x47c533(_0x4e4caa);});});};if(_0xa49a6e[_0x1037('0x14')]){_0x347013[_0x1037('0x25')]['findAll']({'where':{'type':_0x1037('0x26')},'attributes':['id',_0x1037('0x27')],'include':[{'model':_0x347013[_0x1037('0x28')],'as':_0x1037('0x29'),'where':{'id':_0xa49a6e[_0x1037('0x14')]}}]})[_0x1037('0x10')](function(_0x147cda){if(_0x147cda){var _0x44b27e=[];for(var _0x5f7765=0x0,_0x23883f;_0x5f7765<_0x147cda[_0x1037('0x2a')];_0x5f7765+=0x1){_0x23883f=_0x147cda[_0x5f7765][_0x1037('0xb')]({'plain':!![]});switch(_0x23883f['dialCheckDuplicateType']){case _0x1037('0x2b'):_0x5a1615(_0x23883f)[_0x1037('0x19')](_0x40f77b());break;case'onlyIfOpen':_0x514db9(_0x23883f)[_0x1037('0x19')](_0x40f77b());break;default:_0x347013['CmHopper'][_0x1037('0x24')]({'phone':_0xa49a6e['phone'],'ContactId':_0xa49a6e['id'],'ListId':_0xa49a6e[_0x1037('0x14')],'scheduledat':_0xa49a6e[_0x1037('0x16')]?_0xa49a6e[_0x1037('0x16')]:moment()['format'](_0x1037('0x17')),'priority':_0xa49a6e[_0x1037('0x15')]?_0xa49a6e[_0x1037('0x15')]:0x2,'callback':_0xa49a6e[_0x1037('0x18')]?!![]:![],'callbackuniqueid':_0xa49a6e[_0x1037('0x18')]?_0xa49a6e[_0x1037('0x18')]:undefined,'callbackat':_0xa49a6e['callbackUniqueid']?moment()['format'](_0x1037('0x17')):undefined,'VoiceQueueId':_0x23883f['id']})[_0x1037('0x19')](_0x40f77b());}}}})['then'](function(){return _0x347013[_0x1037('0x25')]['findAll']({'where':{'type':_0x1037('0x26')},'attributes':['id'],'include':[{'model':_0x347013[_0x1037('0x28')],'as':_0x1037('0x2c'),'where':{'id':_0xa49a6e['ListId']}}]})[_0x1037('0x10')](function(_0x2cc9d5){if(_0x2cc9d5){var _0x1eeb97=[];for(var _0x2bbfff=0x0,_0x3d14f3;_0x2bbfff<_0x2cc9d5[_0x1037('0x2a')];_0x2bbfff+=0x1){_0x3d14f3=_0x2cc9d5[_0x2bbfff][_0x1037('0xb')]({'plain':!![]});_0x347013[_0x1037('0x2d')][_0x1037('0x24')]({'phone':_0xa49a6e['phone'],'ContactId':_0xa49a6e['id'],'ListId':_0xa49a6e[_0x1037('0x14')],'VoiceQueueId':_0x3d14f3['id']})['catch'](function(_0x104cd4){logger['error'](_0x1037('0x2e'),_0x1037('0xd'),_0x104cd4[_0x1037('0x2f')]);});}}});})[_0x1037('0x10')](function(){return _0x347013[_0x1037('0x30')]['findAll']({'attributes':['id','dialCheckDuplicateType'],'include':[{'model':_0x347013[_0x1037('0x28')],'as':_0x1037('0x29'),'where':{'id':_0xa49a6e[_0x1037('0x14')]}}]})[_0x1037('0x10')](function(_0x5e9180){if(_0x5e9180){var _0x486f50=[];for(var _0x3022b4=0x0,_0x5121c9;_0x3022b4<_0x5e9180[_0x1037('0x2a')];_0x3022b4+=0x1){_0x5121c9=_0x5e9180[_0x3022b4][_0x1037('0xb')]({'plain':!![]});switch(_0x5121c9['dialCheckDuplicateType']){case'always':_0x3e66b2(_0x5121c9)[_0x1037('0x19')](_0x29d24e());break;case _0x1037('0x31'):_0x400465(_0x5121c9)[_0x1037('0x19')](_0x29d24e());break;default:_0x347013[_0x1037('0x13')][_0x1037('0x24')]({'phone':_0xa49a6e[_0x1037('0x9')],'ContactId':_0xa49a6e['id'],'ListId':_0xa49a6e[_0x1037('0x14')],'scheduledat':_0xa49a6e[_0x1037('0x16')]?_0xa49a6e[_0x1037('0x16')]:moment()[_0x1037('0x1f')](_0x1037('0x17')),'priority':_0xa49a6e[_0x1037('0x15')]?_0xa49a6e[_0x1037('0x15')]:0x2,'callback':_0xa49a6e[_0x1037('0x18')]?!![]:![],'callbackuniqueid':_0xa49a6e[_0x1037('0x18')]?_0xa49a6e[_0x1037('0x18')]:undefined,'callbackat':_0xa49a6e[_0x1037('0x18')]?moment()[_0x1037('0x1f')](_0x1037('0x17')):undefined,'CampaignId':_0x5121c9['id']})[_0x1037('0x19')](_0x29d24e());}}}});})[_0x1037('0x10')](function(){return _0x347013['Campaign']['findAll']({'attributes':['id'],'include':[{'model':_0x347013[_0x1037('0x28')],'as':_0x1037('0x2c'),'where':{'id':_0xa49a6e['ListId']}}]})[_0x1037('0x10')](function(_0x13f6f2){if(_0x13f6f2){var _0x294df4=[];for(var _0x46fa73=0x0,_0x2014a4;_0x46fa73<_0x13f6f2[_0x1037('0x2a')];_0x46fa73+=0x1){_0x2014a4=_0x13f6f2[_0x46fa73][_0x1037('0xb')]({'plain':!![]});_0x347013['CmHopperBlack'][_0x1037('0x24')]({'phone':_0xa49a6e[_0x1037('0x9')],'ContactId':_0xa49a6e['id'],'ListId':_0xa49a6e['ListId'],'CampaignId':_0x2014a4['id']})[_0x1037('0x19')](function(_0x1320dd){logger['error'](_0x1037('0x2e'),'afterCreate',_0x1320dd['message']);});}}});})[_0x1037('0x10')](function(){_0x568045();})[_0x1037('0x19')](function(_0x37c34a){logger[_0x1037('0x20')]('cmContact,\x20%s,\x20%s',_0x1037('0xd'),_0x37c34a[_0x1037('0x2f')]);_0x568045(_0x37c34a);});}else{_0x568045(new Error(_0x1037('0x32')));}},'afterDestroy':function(_0x49b29c,_0x1d9a8f,_0x47b116){var _0x17e7d7=_0x12c9a5['models'];var _0x4ee2d2=_0x49b29c[_0x1037('0xb')]({'plain':!![]});return _0x17e7d7[_0x1037('0x13')][_0x1037('0x33')]({'raw':!![],'where':{'ListId':_0x4ee2d2['ListId'],'ContactId':_0x4ee2d2['id']}})[_0x1037('0x10')](function(_0x260565){if(!_[_0x1037('0x34')](_0x260565)){var _0x2eff83=[];for(var _0x42b7df=0x0;_0x42b7df<_0x260565[_0x1037('0x2a')];_0x42b7df+=0x1){var _0x37ea01=_0x17e7d7[_0x1037('0x13')][_0x1037('0x35')]({'where':{'ListId':_0x260565[_0x42b7df]['ListId'],'ContactId':_0x260565[_0x42b7df]['ContactId'],'VoiceQueueId':_0x260565[_0x42b7df]['VoiceQueueId'],'CampaignId':_0x260565[_0x42b7df][_0x1037('0x36')]}});_0x2eff83[_0x1037('0x37')](_0x37ea01);}return BPromise[_0x1037('0x38')](_0x2eff83);}})['then'](function(_0x578280){logger[_0x1037('0x39')]('[CmContact][afterDestroy][Succesfull]',util[_0x1037('0xe')](_0x578280,{'showHidden':![],'depth':null}));_0x47b116();})['catch'](function(_0x55bb7a){logger[_0x1037('0x20')](_0x1037('0x3a'),util[_0x1037('0xe')](_0x55bb7a,{'showHidden':![],'depth':null}));_0x47b116(_0x55bb7a);});}}});};
\ No newline at end of file
index 49ffc93..1b8486c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xec05=['http','socket.io-emitter','./cmContact.socket','register','request','then','CmContact,\x20%s,\x20%s','request\x20sent','debug','CmContact,\x20%s,\x20%s,\x20%s','stringify','error','message','info','catch','ShowCmContact','CmContact','find','options','raw','where','include','map','model','attributes','CreateCmContact','create','body','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment'];(function(_0x1cae43,_0x45070e){var _0x3468dd=function(_0x60bc7c){while(--_0x60bc7c){_0x1cae43['push'](_0x1cae43['shift']());}};_0x3468dd(++_0x45070e);}(_0xec05,0xd0));var _0x5ec0=function(_0x5f09d8,_0x2390a3){_0x5f09d8=_0x5f09d8-0x0;var _0x34cb55=_0xec05[_0x5f09d8];return _0x34cb55;};'use strict';var _=require('lodash');var util=require(_0x5ec0('0x0'));var moment=require(_0x5ec0('0x1'));var BPromise=require(_0x5ec0('0x2'));var rs=require(_0x5ec0('0x3'));var fs=require('fs');var db=require(_0x5ec0('0x4'))['db'];var utils=require(_0x5ec0('0x5'));var logger=require('../../config/logger')(_0x5ec0('0x6'));var config=require(_0x5ec0('0x7'));var jayson=require('jayson/promise');var client=jayson['client'][_0x5ec0('0x8')]({'port':0x232a});var socket=require(_0x5ec0('0x9'))({'host':'localhost','port':0x18eb});require(_0x5ec0('0xa'))[_0x5ec0('0xb')](socket);function respondWithRpcPromise(_0x26411a,_0x49523d,_0x475e1a){return new BPromise(function(_0x4bd737,_0x122216){return client[_0x5ec0('0xc')](_0x26411a,_0x475e1a)[_0x5ec0('0xd')](function(_0xbb1193){logger['info'](_0x5ec0('0xe'),_0x49523d,_0x5ec0('0xf'));logger[_0x5ec0('0x10')](_0x5ec0('0x11'),_0x49523d,_0x5ec0('0xf'),JSON[_0x5ec0('0x12')](_0xbb1193));if(_0xbb1193[_0x5ec0('0x13')]){if(_0xbb1193[_0x5ec0('0x13')]['code']===0x1f4){logger['error'](_0x5ec0('0xe'),_0x49523d,_0xbb1193[_0x5ec0('0x13')]['message']);return _0x122216(_0xbb1193[_0x5ec0('0x13')][_0x5ec0('0x14')]);}logger[_0x5ec0('0x13')](_0x5ec0('0xe'),_0x49523d,_0xbb1193[_0x5ec0('0x13')]['message']);return _0x4bd737(_0xbb1193[_0x5ec0('0x13')][_0x5ec0('0x14')]);}else{logger[_0x5ec0('0x15')](_0x5ec0('0xe'),_0x49523d,_0x5ec0('0xf'));_0x4bd737(_0xbb1193['result'][_0x5ec0('0x14')]);}})[_0x5ec0('0x16')](function(_0x1a5008){logger[_0x5ec0('0x13')]('CmContact,\x20%s,\x20%s',_0x49523d,_0x1a5008);_0x122216(_0x1a5008);});});}exports[_0x5ec0('0x17')]=function(_0x306e5f){var _0x59d814=this;return new Promise(function(_0x248573,_0x37b6eb){return db[_0x5ec0('0x18')][_0x5ec0('0x19')]({'raw':_0x306e5f['options']?_0x306e5f[_0x5ec0('0x1a')][_0x5ec0('0x1b')]===undefined?!![]:![]:!![],'where':_0x306e5f['options']?_0x306e5f[_0x5ec0('0x1a')][_0x5ec0('0x1c')]||null:null,'attributes':_0x306e5f[_0x5ec0('0x1a')]?_0x306e5f[_0x5ec0('0x1a')]['attributes']||null:null,'include':_0x306e5f['options']?_0x306e5f[_0x5ec0('0x1a')][_0x5ec0('0x1d')]?_[_0x5ec0('0x1e')](_0x306e5f[_0x5ec0('0x1a')][_0x5ec0('0x1d')],function(_0x4336e1){return{'model':db[_0x4336e1[_0x5ec0('0x1f')]],'as':_0x4336e1['as'],'attributes':_0x4336e1[_0x5ec0('0x20')],'include':_0x4336e1[_0x5ec0('0x1d')]?_[_0x5ec0('0x1e')](_0x4336e1[_0x5ec0('0x1d')],function(_0x5a39ce){return{'model':db[_0x5a39ce[_0x5ec0('0x1f')]],'as':_0x5a39ce['as'],'attributes':_0x5a39ce['attributes'],'include':_0x5a39ce[_0x5ec0('0x1d')]?_['map'](_0x5a39ce[_0x5ec0('0x1d')],function(_0x307fb1){return{'model':db[_0x307fb1[_0x5ec0('0x1f')]],'as':_0x307fb1['as'],'attributes':_0x307fb1[_0x5ec0('0x20')]};}):[]};}):[]};}):[]:[]})[_0x5ec0('0xd')](function(_0x1f8478){logger[_0x5ec0('0x15')](_0x5ec0('0x17'),_0x306e5f);logger[_0x5ec0('0x10')]('ShowCmContact',_0x306e5f,JSON[_0x5ec0('0x12')](_0x1f8478));_0x248573(_0x1f8478);})[_0x5ec0('0x16')](function(_0x5d2734){logger[_0x5ec0('0x13')](_0x5ec0('0x17'),_0x5d2734[_0x5ec0('0x14')],_0x306e5f);_0x37b6eb(_0x59d814[_0x5ec0('0x13')](0x1f4,_0x5d2734['message']));});});};exports[_0x5ec0('0x21')]=function(_0x26a546){var _0x3208d4=this;return new Promise(function(_0x50ec3b,_0x1620e8){return db[_0x5ec0('0x18')][_0x5ec0('0x22')](_0x26a546[_0x5ec0('0x23')],{'raw':_0x26a546[_0x5ec0('0x1a')]?_0x26a546[_0x5ec0('0x1a')][_0x5ec0('0x1b')]===undefined?!![]:![]:!![]})[_0x5ec0('0xd')](function(_0x14eb70){logger['info'](_0x5ec0('0x21'),_0x26a546);logger[_0x5ec0('0x10')]('CreateCmContact',_0x26a546,JSON['stringify'](_0x14eb70));_0x50ec3b(_0x14eb70);})['catch'](function(_0x48e5d7){logger[_0x5ec0('0x13')]('CreateCmContact',_0x48e5d7[_0x5ec0('0x14')],_0x26a546);_0x1620e8(_0x3208d4['error'](0x1f4,_0x48e5d7['message']));});});};
\ No newline at end of file
+var _0x177b=['include','model','map','CreateCmContact','raw','then','lodash','util','moment','bluebird','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','socket.io-emitter','localhost','./cmContact.socket','request','info','debug','CmContact,\x20%s,\x20%s,\x20%s','stringify','error','code','CmContact,\x20%s,\x20%s','message','catch','ShowCmContact','CmContact','options','where','attributes'];(function(_0x57b236,_0x30614e){var _0x4feb29=function(_0x26d3e6){while(--_0x26d3e6){_0x57b236['push'](_0x57b236['shift']());}};_0x4feb29(++_0x30614e);}(_0x177b,0x1d4));var _0xb177=function(_0x45f2fe,_0x3534e0){_0x45f2fe=_0x45f2fe-0x0;var _0x511a6d=_0x177b[_0x45f2fe];return _0x511a6d;};'use strict';var _=require(_0xb177('0x0'));var util=require(_0xb177('0x1'));var moment=require(_0xb177('0x2'));var BPromise=require(_0xb177('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xb177('0x4'));var logger=require(_0xb177('0x5'))('rpc');var config=require(_0xb177('0x6'));var jayson=require(_0xb177('0x7'));var client=jayson[_0xb177('0x8')]['http']({'port':0x232a});var socket=require(_0xb177('0x9'))({'host':_0xb177('0xa'),'port':0x18eb});require(_0xb177('0xb'))['register'](socket);function respondWithRpcPromise(_0x3a3917,_0x30184c,_0x2061ff){return new BPromise(function(_0x30d872,_0x59cb7e){return client[_0xb177('0xc')](_0x3a3917,_0x2061ff)['then'](function(_0xb85117){logger[_0xb177('0xd')]('CmContact,\x20%s,\x20%s',_0x30184c,'request\x20sent');logger[_0xb177('0xe')](_0xb177('0xf'),_0x30184c,'request\x20sent',JSON[_0xb177('0x10')](_0xb85117));if(_0xb85117[_0xb177('0x11')]){if(_0xb85117[_0xb177('0x11')][_0xb177('0x12')]===0x1f4){logger[_0xb177('0x11')](_0xb177('0x13'),_0x30184c,_0xb85117[_0xb177('0x11')][_0xb177('0x14')]);return _0x59cb7e(_0xb85117[_0xb177('0x11')][_0xb177('0x14')]);}logger[_0xb177('0x11')](_0xb177('0x13'),_0x30184c,_0xb85117['error'][_0xb177('0x14')]);return _0x30d872(_0xb85117[_0xb177('0x11')][_0xb177('0x14')]);}else{logger[_0xb177('0xd')](_0xb177('0x13'),_0x30184c,'request\x20sent');_0x30d872(_0xb85117['result'][_0xb177('0x14')]);}})[_0xb177('0x15')](function(_0x4c932c){logger[_0xb177('0x11')](_0xb177('0x13'),_0x30184c,_0x4c932c);_0x59cb7e(_0x4c932c);});});}exports[_0xb177('0x16')]=function(_0x5cd6f0){var _0x112f48=this;return new Promise(function(_0x18f872,_0x67f19f){return db[_0xb177('0x17')]['find']({'raw':_0x5cd6f0[_0xb177('0x18')]?_0x5cd6f0[_0xb177('0x18')]['raw']===undefined?!![]:![]:!![],'where':_0x5cd6f0['options']?_0x5cd6f0[_0xb177('0x18')][_0xb177('0x19')]||null:null,'attributes':_0x5cd6f0[_0xb177('0x18')]?_0x5cd6f0[_0xb177('0x18')][_0xb177('0x1a')]||null:null,'include':_0x5cd6f0[_0xb177('0x18')]?_0x5cd6f0[_0xb177('0x18')][_0xb177('0x1b')]?_['map'](_0x5cd6f0[_0xb177('0x18')][_0xb177('0x1b')],function(_0x508d67){return{'model':db[_0x508d67[_0xb177('0x1c')]],'as':_0x508d67['as'],'attributes':_0x508d67[_0xb177('0x1a')],'include':_0x508d67[_0xb177('0x1b')]?_[_0xb177('0x1d')](_0x508d67[_0xb177('0x1b')],function(_0xb37eac){return{'model':db[_0xb37eac[_0xb177('0x1c')]],'as':_0xb37eac['as'],'attributes':_0xb37eac[_0xb177('0x1a')],'include':_0xb37eac[_0xb177('0x1b')]?_[_0xb177('0x1d')](_0xb37eac['include'],function(_0x1717e6){return{'model':db[_0x1717e6[_0xb177('0x1c')]],'as':_0x1717e6['as'],'attributes':_0x1717e6[_0xb177('0x1a')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x4e2530){logger[_0xb177('0xd')](_0xb177('0x16'),_0x5cd6f0);logger[_0xb177('0xe')](_0xb177('0x16'),_0x5cd6f0,JSON[_0xb177('0x10')](_0x4e2530));_0x18f872(_0x4e2530);})[_0xb177('0x15')](function(_0x218975){logger[_0xb177('0x11')]('ShowCmContact',_0x218975['message'],_0x5cd6f0);_0x67f19f(_0x112f48[_0xb177('0x11')](0x1f4,_0x218975['message']));});});};exports[_0xb177('0x1e')]=function(_0x42f447){var _0x229ed3=this;return new Promise(function(_0x19a8e6,_0x474b20){return db['CmContact']['create'](_0x42f447['body'],{'raw':_0x42f447[_0xb177('0x18')]?_0x42f447[_0xb177('0x18')][_0xb177('0x1f')]===undefined?!![]:![]:!![]})[_0xb177('0x20')](function(_0x19d4a1){logger[_0xb177('0xd')]('CreateCmContact',_0x42f447);logger[_0xb177('0xe')](_0xb177('0x1e'),_0x42f447,JSON[_0xb177('0x10')](_0x19d4a1));_0x19a8e6(_0x19d4a1);})[_0xb177('0x15')](function(_0x429088){logger[_0xb177('0x11')](_0xb177('0x1e'),_0x429088[_0xb177('0x14')],_0x42f447);_0x474b20(_0x229ed3[_0xb177('0x11')](0x1f4,_0x429088[_0xb177('0x14')]));});});};
\ No newline at end of file
index 70e5e92..ddfb817 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf53f=['update','emit','removeListener','register','cmContact:','./cmContact.events','save','remove'];(function(_0x2ed2c4,_0xa61017){var _0x2a234f=function(_0x243460){while(--_0x243460){_0x2ed2c4['push'](_0x2ed2c4['shift']());}};_0x2a234f(++_0xa61017);}(_0xf53f,0x8d));var _0xff53=function(_0x308354,_0x1c1b7e){_0x308354=_0x308354-0x0;var _0x3205c6=_0xf53f[_0x308354];return _0x3205c6;};'use strict';var CmContactEvents=require(_0xff53('0x0'));var events=[_0xff53('0x1'),_0xff53('0x2'),_0xff53('0x3')];function createListener(_0x3b48fc,_0x4afcd){return function(_0x492e12){_0x4afcd[_0xff53('0x4')](_0x3b48fc,_0x492e12);};}function removeListener(_0x18b504,_0x2077b9){return function(){CmContactEvents[_0xff53('0x5')](_0x18b504,_0x2077b9);};}exports[_0xff53('0x6')]=function(_0x54d39c){for(var _0x54e637=0x0,_0x27b397=events['length'];_0x54e637<_0x27b397;_0x54e637++){var _0x1c27bb=events[_0x54e637];var _0x122746=createListener(_0xff53('0x7')+_0x1c27bb,_0x54d39c);CmContactEvents['on'](_0x1c27bb,_0x122746);}};
\ No newline at end of file
+var _0x6753=['save','remove','update','length','cmContact:','./cmContact.events'];(function(_0x58965a,_0x2e71db){var _0x254efc=function(_0xf14fb4){while(--_0xf14fb4){_0x58965a['push'](_0x58965a['shift']());}};_0x254efc(++_0x2e71db);}(_0x6753,0xa1));var _0x3675=function(_0x141bfe,_0x2e7878){_0x141bfe=_0x141bfe-0x0;var _0x26f075=_0x6753[_0x141bfe];return _0x26f075;};'use strict';var CmContactEvents=require(_0x3675('0x0'));var events=[_0x3675('0x1'),_0x3675('0x2'),_0x3675('0x3')];function createListener(_0x485956,_0x2efb4b){return function(_0x461046){_0x2efb4b['emit'](_0x485956,_0x461046);};}function removeListener(_0x2c892a,_0x2b2c83){return function(){CmContactEvents['removeListener'](_0x2c892a,_0x2b2c83);};}exports['register']=function(_0x4e4e73){for(var _0x396a35=0x0,_0x1fbfe8=events[_0x3675('0x4')];_0x396a35<_0x1fbfe8;_0x396a35++){var _0x1a5526=events[_0x396a35];var _0x154571=createListener(_0x3675('0x5')+_0x1a5526,_0x4e4e73);CmContactEvents['on'](_0x1a5526,_0x154571);}};
\ No newline at end of file
index f51d342..f590f87 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xef02=['import','put','update','delete','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','./cmContact.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/tags','getTags','/:id/hoppers','getHoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','getHopperFinals','/:id/jscripty_sessions','getJscriptySessions','post','/merge','create','setTags','server/files/tmp','originalname','replace','format','basename','now','extname','/csv','diskStorage','join','root','%s-%s%s','/upload','upload','/upload/:id'];(function(_0x13b8f3,_0x442821){var _0x1a6d06=function(_0x5126f2){while(--_0x5126f2){_0x13b8f3['push'](_0x13b8f3['shift']());}};_0x1a6d06(++_0x442821);}(_0xef02,0x155));var _0x2ef0=function(_0x37ae26,_0x2ecd70){_0x37ae26=_0x37ae26-0x0;var _0x1b1902=_0xef02[_0x37ae26];return _0x1b1902;};'use strict';var multer=require(_0x2ef0('0x0'));var util=require('util');var path=require(_0x2ef0('0x1'));var express=require(_0x2ef0('0x2'));var router=express[_0x2ef0('0x3')]();var auth=require(_0x2ef0('0x4'));var interaction=require(_0x2ef0('0x5'));var config=require('../../config/environment');var controller=require(_0x2ef0('0x6'));router[_0x2ef0('0x7')]('/',auth[_0x2ef0('0x8')](),controller[_0x2ef0('0x9')]);router[_0x2ef0('0x7')](_0x2ef0('0xa'),auth[_0x2ef0('0x8')](),controller[_0x2ef0('0xb')]);router[_0x2ef0('0x7')](_0x2ef0('0xc'),auth[_0x2ef0('0x8')](),controller[_0x2ef0('0xd')]);router['get'](_0x2ef0('0xe'),auth[_0x2ef0('0x8')](),controller[_0x2ef0('0xf')]);router[_0x2ef0('0x7')](_0x2ef0('0x10'),auth[_0x2ef0('0x8')](),controller[_0x2ef0('0x11')]);router[_0x2ef0('0x7')](_0x2ef0('0x12'),auth[_0x2ef0('0x8')](),controller[_0x2ef0('0x13')]);router['get'](_0x2ef0('0x14'),auth[_0x2ef0('0x8')](),controller[_0x2ef0('0x15')]);router[_0x2ef0('0x7')](_0x2ef0('0x16'),auth[_0x2ef0('0x8')](),controller[_0x2ef0('0x17')]);router[_0x2ef0('0x18')](_0x2ef0('0x19'),auth[_0x2ef0('0x8')](),controller['merge']);router[_0x2ef0('0x18')]('/',auth['isAuthenticated'](),controller[_0x2ef0('0x1a')]);router[_0x2ef0('0x18')]('/create_many',auth[_0x2ef0('0x8')](),controller['bulkCreate']);router[_0x2ef0('0x18')]('/:id/tags',auth[_0x2ef0('0x8')](),controller[_0x2ef0('0x1b')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x3d665e,_0x45f13f,_0x34e405){_0x34e405(null,path['join'](config['root'],_0x2ef0('0x1c')));},'filename':function(_0x1b0b95,_0x50e2dc,_0x2d80e9){_0x50e2dc[_0x2ef0('0x1d')]=_0x50e2dc[_0x2ef0('0x1d')][_0x2ef0('0x1e')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x2d80e9(null,util[_0x2ef0('0x1f')]('%s-%s%s',path[_0x2ef0('0x20')](_0x50e2dc['originalname'],path['extname'](_0x50e2dc[_0x2ef0('0x1d')])),Date[_0x2ef0('0x21')](),path[_0x2ef0('0x22')](_0x50e2dc[_0x2ef0('0x1d')])));}})});router[_0x2ef0('0x18')](_0x2ef0('0x23'),upload['single']('file'),controller['uploadCsv']);var upload=multer({'storage':multer[_0x2ef0('0x24')]({'destination':function(_0x155cbe,_0xf766d3,_0x4b819e){_0x4b819e(null,path[_0x2ef0('0x25')](config[_0x2ef0('0x26')],_0x2ef0('0x1c')));},'filename':function(_0x3c557c,_0x4eab7e,_0x44a44a){_0x4eab7e['originalname']=_0x4eab7e['originalname'][_0x2ef0('0x1e')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x44a44a(null,util['format'](_0x2ef0('0x27'),path['basename'](_0x4eab7e['originalname'],path['extname'](_0x4eab7e['originalname'])),Date[_0x2ef0('0x21')](),path[_0x2ef0('0x22')](_0x4eab7e['originalname'])));}})});router[_0x2ef0('0x18')](_0x2ef0('0x28'),upload['single']('file'),controller[_0x2ef0('0x29')]);router['post'](_0x2ef0('0x2a'),auth['isAuthenticated'](),controller[_0x2ef0('0x2b')]);router[_0x2ef0('0x2c')](_0x2ef0('0xc'),auth[_0x2ef0('0x8')](),controller[_0x2ef0('0x2d')]);router[_0x2ef0('0x2e')](_0x2ef0('0xc'),auth[_0x2ef0('0x8')](),controller['destroy']);module[_0x2ef0('0x2f')]=router;
\ No newline at end of file
+var _0x2575=['getTags','getHoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','getHopperFinals','/:id/jscripty_sessions','getJscriptySessions','post','/merge','merge','/create_many','diskStorage','join','root','server/files/tmp','originalname','format','%s-%s%s','basename','now','extname','file','uploadCsv','single','upload','/upload/:id','import','put','update','delete','destroy','exports','multer','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmContact.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/tags'];(function(_0x4c0e6a,_0x69357d){var _0x5b18da=function(_0x5ce450){while(--_0x5ce450){_0x4c0e6a['push'](_0x4c0e6a['shift']());}};_0x5b18da(++_0x69357d);}(_0x2575,0x191));var _0x5257=function(_0xc22982,_0x4ea32e){_0xc22982=_0xc22982-0x0;var _0xb7da93=_0x2575[_0xc22982];return _0xb7da93;};'use strict';var multer=require(_0x5257('0x0'));var util=require('util');var path=require('path');var express=require('express');var router=express['Router']();var auth=require(_0x5257('0x1'));var interaction=require(_0x5257('0x2'));var config=require(_0x5257('0x3'));var controller=require(_0x5257('0x4'));router[_0x5257('0x5')]('/',auth[_0x5257('0x6')](),controller[_0x5257('0x7')]);router[_0x5257('0x5')](_0x5257('0x8'),auth[_0x5257('0x6')](),controller[_0x5257('0x9')]);router[_0x5257('0x5')](_0x5257('0xa'),auth[_0x5257('0x6')](),controller[_0x5257('0xb')]);router[_0x5257('0x5')](_0x5257('0xc'),auth[_0x5257('0x6')](),controller[_0x5257('0xd')]);router[_0x5257('0x5')]('/:id/hoppers',auth[_0x5257('0x6')](),controller[_0x5257('0xe')]);router[_0x5257('0x5')](_0x5257('0xf'),auth[_0x5257('0x6')](),controller[_0x5257('0x10')]);router[_0x5257('0x5')](_0x5257('0x11'),auth['isAuthenticated'](),controller[_0x5257('0x12')]);router[_0x5257('0x5')](_0x5257('0x13'),auth[_0x5257('0x6')](),controller[_0x5257('0x14')]);router[_0x5257('0x15')](_0x5257('0x16'),auth[_0x5257('0x6')](),controller[_0x5257('0x17')]);router[_0x5257('0x15')]('/',auth[_0x5257('0x6')](),controller['create']);router[_0x5257('0x15')](_0x5257('0x18'),auth[_0x5257('0x6')](),controller['bulkCreate']);router[_0x5257('0x15')]('/:id/tags',auth[_0x5257('0x6')](),controller['setTags']);var upload=multer({'storage':multer[_0x5257('0x19')]({'destination':function(_0x4b02e0,_0x270f1c,_0x3eb78f){_0x3eb78f(null,path[_0x5257('0x1a')](config[_0x5257('0x1b')],_0x5257('0x1c')));},'filename':function(_0x2b019d,_0x200751,_0x3f7559){_0x200751['originalname']=_0x200751[_0x5257('0x1d')]['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x3f7559(null,util[_0x5257('0x1e')](_0x5257('0x1f'),path[_0x5257('0x20')](_0x200751[_0x5257('0x1d')],path['extname'](_0x200751[_0x5257('0x1d')])),Date[_0x5257('0x21')](),path[_0x5257('0x22')](_0x200751['originalname'])));}})});router[_0x5257('0x15')]('/csv',upload['single'](_0x5257('0x23')),controller[_0x5257('0x24')]);var upload=multer({'storage':multer[_0x5257('0x19')]({'destination':function(_0x315d08,_0x2f4e2d,_0x56ff36){_0x56ff36(null,path['join'](config[_0x5257('0x1b')],_0x5257('0x1c')));},'filename':function(_0x6a3a8d,_0x2915c,_0x26228b){_0x2915c[_0x5257('0x1d')]=_0x2915c['originalname']['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x26228b(null,util[_0x5257('0x1e')](_0x5257('0x1f'),path[_0x5257('0x20')](_0x2915c['originalname'],path[_0x5257('0x22')](_0x2915c['originalname'])),Date[_0x5257('0x21')](),path[_0x5257('0x22')](_0x2915c[_0x5257('0x1d')])));}})});router[_0x5257('0x15')]('/upload',upload[_0x5257('0x25')](_0x5257('0x23')),controller[_0x5257('0x26')]);router[_0x5257('0x15')](_0x5257('0x27'),auth[_0x5257('0x6')](),controller[_0x5257('0x28')]);router[_0x5257('0x29')](_0x5257('0xa'),auth[_0x5257('0x6')](),controller[_0x5257('0x2a')]);router[_0x5257('0x2b')](_0x5257('0xa'),auth['isAuthenticated'](),controller[_0x5257('0x2c')]);module[_0x5257('0x2d')]=router;
\ No newline at end of file
index 5f094a0..53299be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb0c8=['sequelize','VIRTUAL','getDataValue','STRING','setDataValue','alias','name','TEXT','long','type','select','parse','values','isArray','stringify','BOOLEAN'];(function(_0xeddf90,_0x29e82a){var _0x5afeff=function(_0x44de51){while(--_0x44de51){_0xeddf90['push'](_0xeddf90['shift']());}};_0x5afeff(++_0x29e82a);}(_0xb0c8,0x150));var _0x8b0c=function(_0x42bc2a,_0x20b50c){_0x42bc2a=_0x42bc2a-0x0;var _0x5ddf0f=_0xb0c8[_0x42bc2a];return _0x5ddf0f;};'use strict';var Sequelize=require(_0x8b0c('0x0'));var _=require('lodash');module['exports']={'name':{'type':Sequelize[_0x8b0c('0x1')],'get':function(_0x402176){return this[_0x8b0c('0x2')]('alias');}},'alias':{'type':Sequelize[_0x8b0c('0x3')],'allowNull':![],'set':function(_0x14cb7f){this[_0x8b0c('0x4')](_0x8b0c('0x5'),_0x14cb7f?_0x14cb7f:this['getDataValue'](_0x8b0c('0x6')));}},'type':{'type':Sequelize['STRING'],'allowNull':![]},'values':{'type':Sequelize[_0x8b0c('0x7')](_0x8b0c('0x8')),'get':function(){if(this[_0x8b0c('0x2')](_0x8b0c('0x9'))===_0x8b0c('0xa')){return JSON[_0x8b0c('0xb')](this['getDataValue'](_0x8b0c('0xc')));}else{return this['getDataValue'](_0x8b0c('0xc'));}},'set':function(_0x1f7dda){if(Array[_0x8b0c('0xd')](_0x1f7dda)){this[_0x8b0c('0x4')]('values',JSON[_0x8b0c('0xe')](_0x1f7dda));}else{this[_0x8b0c('0x4')](_0x8b0c('0xc'),_0x1f7dda);}}},'required':{'type':Sequelize[_0x8b0c('0xf')],'defaultValue':![]}};
\ No newline at end of file
+var _0x6c42=['lodash','exports','VIRTUAL','getDataValue','alias','STRING','name','select','values','isArray','BOOLEAN'];(function(_0xfdecd9,_0x1ec3c1){var _0x36b4af=function(_0x1cd18d){while(--_0x1cd18d){_0xfdecd9['push'](_0xfdecd9['shift']());}};_0x36b4af(++_0x1ec3c1);}(_0x6c42,0x14a));var _0x26c4=function(_0x37c22c,_0x28a70d){_0x37c22c=_0x37c22c-0x0;var _0x119d79=_0x6c42[_0x37c22c];return _0x119d79;};'use strict';var Sequelize=require('sequelize');var _=require(_0x26c4('0x0'));module[_0x26c4('0x1')]={'name':{'type':Sequelize[_0x26c4('0x2')],'get':function(_0x29ba86){return this[_0x26c4('0x3')](_0x26c4('0x4'));}},'alias':{'type':Sequelize[_0x26c4('0x5')],'allowNull':![],'set':function(_0x314e35){this['setDataValue']('alias',_0x314e35?_0x314e35:this[_0x26c4('0x3')](_0x26c4('0x6')));}},'type':{'type':Sequelize[_0x26c4('0x5')],'allowNull':![]},'values':{'type':Sequelize['TEXT']('long'),'get':function(){if(this[_0x26c4('0x3')]('type')===_0x26c4('0x7')){return JSON['parse'](this[_0x26c4('0x3')](_0x26c4('0x8')));}else{return this[_0x26c4('0x3')](_0x26c4('0x8'));}},'set':function(_0x4e77ea){if(Array[_0x26c4('0x9')](_0x4e77ea)){this['setDataValue'](_0x26c4('0x8'),JSON['stringify'](_0x4e77ea));}else{this['setDataValue'](_0x26c4('0x8'),_0x4e77ea);}}},'required':{'type':Sequelize[_0x26c4('0xa')],'defaultValue':![]}};
\ No newline at end of file
index 24ab02e..819aba0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc688=['rawAttributes','model','differenceBy','query','dateEnd','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','pick','dateStart','add','day','merge','where','filter','includeAll','include','findAll','catch','show','find','update','body','params','create','transaction','Sequelize','type','TEXT','number','INTEGER','switch','BOOLEAN','defaultValue','sequelize','queryInterface','addColumn','cm_contacts','fast-json-patch','request-promise','bluebird','mustache','path','sox','ejs','squel','to-csv','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','status','end','json','count','offset','set','reject','then','destroy','sendStatus','stack','name','send','CmCustomField'];(function(_0x126ca5,_0x38ee89){var _0x346324=function(_0x154866){while(--_0x154866){_0x126ca5['push'](_0x126ca5['shift']());}};_0x346324(++_0x38ee89);}(_0xc688,0xc0));var _0x8c68=function(_0x315c5d,_0x501010){_0x315c5d=_0x315c5d-0x0;var _0xfe01a4=_0xc688[_0x315c5d];return _0xfe01a4;};'use strict';var jsonpatch=require(_0x8c68('0x0'));var rp=require(_0x8c68('0x1'));var moment=require('moment');var BPromise=require(_0x8c68('0x2'));var Mustache=require(_0x8c68('0x3'));var util=require('util');var path=require(_0x8c68('0x4'));var sox=require(_0x8c68('0x5'));var csv=require('to-csv');var ejs=require(_0x8c68('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x8c68('0x7'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x8c68('0x8'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x8c68('0x9'));var logger=require(_0x8c68('0xa'))('api');var utils=require(_0x8c68('0xb'));var config=require('../../config/environment');var db=require(_0x8c68('0xc'))['db'];function respondWithStatusCode(_0x150f09,_0xcb9bee){_0xcb9bee=_0xcb9bee||0xcc;return function(_0x96f2f1){if(_0x96f2f1){return _0x150f09['sendStatus'](_0xcb9bee);}return _0x150f09[_0x8c68('0xd')](_0xcb9bee)[_0x8c68('0xe')]();};}function respondWithResult(_0x43a3f2,_0x5bb6ac){_0x5bb6ac=_0x5bb6ac||0xc8;return function(_0x1774c4){if(_0x1774c4){return _0x43a3f2[_0x8c68('0xd')](_0x5bb6ac)[_0x8c68('0xf')](_0x1774c4);}};}function respondWithFilteredResult(_0x2530e5,_0xda1135){return function(_0xc3b3c1){if(_0xc3b3c1){var _0xe5154=_0xc3b3c1[_0x8c68('0x10')],_0x33a4bb=_0xda1135['offset'],_0x142cbb=_0xda1135[_0x8c68('0x11')]+_0xda1135['limit'],_0x55a359;if(_0x142cbb>=_0xe5154){_0x142cbb=_0xe5154;_0x55a359=0xc8;}else{_0x55a359=0xce;}_0x2530e5['status'](_0x55a359);return _0x2530e5[_0x8c68('0x12')]('Content-Range',_0x33a4bb+'-'+_0x142cbb+'/'+_0xe5154)[_0x8c68('0xf')](_0xc3b3c1);}return null;};}function patchUpdates(_0x406e70){return function(_0x46b289){try{jsonpatch['apply'](_0x46b289,_0x406e70,!![]);}catch(_0x5f3697){return BPromise[_0x8c68('0x13')](_0x5f3697);}return _0x46b289['save']();};}function saveUpdates(_0x3334f2,_0x7f3209){return function(_0x1b6e32){if(_0x1b6e32){return _0x1b6e32['update'](_0x3334f2)[_0x8c68('0x14')](function(_0x323b91){return _0x323b91;});}return null;};}function removeEntity(_0x160caf,_0x327c4b){return function(_0xe5c625){if(_0xe5c625){return _0xe5c625[_0x8c68('0x15')]()['then'](function(){_0x160caf[_0x8c68('0xd')](0xcc)[_0x8c68('0xe')]();});}};}function handleEntityNotFound(_0x67d26d,_0x4d4d3a){return function(_0x14031b){if(!_0x14031b){_0x67d26d[_0x8c68('0x16')](0x194);}return _0x14031b;};}function handleError(_0x28dc8d,_0x41f2c3){_0x41f2c3=_0x41f2c3||0x1f4;return function(_0x1851f0){logger['error'](_0x1851f0[_0x8c68('0x17')]);if(_0x1851f0[_0x8c68('0x18')]){delete _0x1851f0['name'];}_0x28dc8d[_0x8c68('0xd')](_0x41f2c3)[_0x8c68('0x19')](_0x1851f0);};}exports['index']=function(_0x2c4038,_0x3639a6){var _0x4e9b1c={},_0x188918={},_0x5608f4={'count':0x0,'rows':[]};var _0x597543=db[_0x8c68('0x1a')][_0x8c68('0x1b')];_0x188918[_0x8c68('0x1c')]=_[_0x8c68('0x1d')](_['keys'](_0x597543),[_0x8c68('0x18')]);var _0x23c0e6={'dateStart':_0x2c4038[_0x8c68('0x1e')]['dateStart'],'dateEnd':_0x2c4038[_0x8c68('0x1e')][_0x8c68('0x1f')]};delete _0x2c4038[_0x8c68('0x1e')]['dateStart'];delete _0x2c4038[_0x8c68('0x1e')][_0x8c68('0x1f')];_0x188918[_0x8c68('0x1e')]=_[_0x8c68('0x20')](_0x2c4038[_0x8c68('0x1e')]);_0x188918[_0x8c68('0x21')]=_[_0x8c68('0x22')](_0x188918[_0x8c68('0x1c')],_0x188918['query']);_0x4e9b1c['attributes']=_[_0x8c68('0x22')](_0x188918[_0x8c68('0x1c')],qs[_0x8c68('0x23')](_0x2c4038[_0x8c68('0x1e')][_0x8c68('0x23')]));_0x4e9b1c['attributes']=_0x4e9b1c[_0x8c68('0x24')][_0x8c68('0x25')]?_0x4e9b1c[_0x8c68('0x24')]:_0x188918[_0x8c68('0x1c')];if(!_0x2c4038[_0x8c68('0x1e')][_0x8c68('0x26')](_0x8c68('0x27'))){_0x4e9b1c['limit']=qs[_0x8c68('0x28')](_0x2c4038[_0x8c68('0x1e')][_0x8c68('0x28')]);_0x4e9b1c[_0x8c68('0x11')]=qs[_0x8c68('0x11')](_0x2c4038['query'][_0x8c68('0x11')]);}_0x4e9b1c[_0x8c68('0x29')]=qs[_0x8c68('0x2a')](_0x2c4038[_0x8c68('0x1e')][_0x8c68('0x2a')]);_0x4e9b1c['where']=qs[_0x8c68('0x21')](_[_0x8c68('0x2b')](_0x2c4038[_0x8c68('0x1e')],_0x188918[_0x8c68('0x21')]));if(_0x23c0e6[_0x8c68('0x2c')]){if(_0x23c0e6[_0x8c68('0x1f')]){_0x23c0e6[_0x8c68('0x1f')]=moment(_0x23c0e6[_0x8c68('0x1f')])[_0x8c68('0x2d')](0x1,_0x8c68('0x2e'));}else{_0x23c0e6[_0x8c68('0x1f')]=moment(_0x23c0e6[_0x8c68('0x2c')])['add'](0x1,_0x8c68('0x2e'));}_[_0x8c68('0x2f')](_0x4e9b1c[_0x8c68('0x30')],{'createdAt':{'$gte':_0x23c0e6['dateStart'],'$lte':_0x23c0e6[_0x8c68('0x1f')]}});}if(_0x2c4038[_0x8c68('0x1e')][_0x8c68('0x31')]){_0x4e9b1c[_0x8c68('0x30')]=_[_0x8c68('0x2f')](_0x4e9b1c[_0x8c68('0x30')],{'$or':_['map'](_0x4e9b1c[_0x8c68('0x24')],function(_0x58a686){var _0x437ef5={};_0x437ef5[_0x58a686]={'$like':'%'+_0x2c4038[_0x8c68('0x1e')][_0x8c68('0x31')]+'%'};return _0x437ef5;})});}_0x4e9b1c=_['merge']({},_0x4e9b1c,_0x2c4038['options']);var _0x4897ac={'where':_0x4e9b1c['where']};return db[_0x8c68('0x1a')][_0x8c68('0x10')](_0x4897ac)['then'](function(_0x17da39){_0x5608f4[_0x8c68('0x10')]=_0x17da39;if(_0x2c4038[_0x8c68('0x1e')][_0x8c68('0x32')]){_0x4e9b1c[_0x8c68('0x33')]=[{'all':!![]}];}return db[_0x8c68('0x1a')][_0x8c68('0x34')](_0x4e9b1c);})[_0x8c68('0x14')](function(_0x3250ea){_0x5608f4['rows']=_0x3250ea;return _0x5608f4;})[_0x8c68('0x14')](respondWithFilteredResult(_0x3639a6,_0x4e9b1c))[_0x8c68('0x35')](handleError(_0x3639a6,null));};exports[_0x8c68('0x36')]=function(_0xc1aaf4,_0x3a59c7){var _0x5185d1={'raw':!![],'where':{'id':_0xc1aaf4['params']['id']}},_0x58f26e={};_0x58f26e[_0x8c68('0x1c')]=_[_0x8c68('0x20')](db['CmCustomField'][_0x8c68('0x1b')]);_0x58f26e[_0x8c68('0x1e')]=_[_0x8c68('0x20')](_0xc1aaf4['query']);_0x58f26e[_0x8c68('0x21')]=_[_0x8c68('0x22')](_0x58f26e[_0x8c68('0x1c')],_0x58f26e[_0x8c68('0x1e')]);_0x5185d1['attributes']=_['intersection'](_0x58f26e[_0x8c68('0x1c')],qs['fields'](_0xc1aaf4[_0x8c68('0x1e')]['fields']));_0x5185d1[_0x8c68('0x24')]=_0x5185d1[_0x8c68('0x24')]['length']?_0x5185d1[_0x8c68('0x24')]:_0x58f26e['model'];if(_0xc1aaf4['query'][_0x8c68('0x32')]){_0x5185d1[_0x8c68('0x33')]=[{'all':!![]}];}_0x5185d1=_['merge']({},_0x5185d1,_0xc1aaf4['options']);return db[_0x8c68('0x1a')][_0x8c68('0x37')](_0x5185d1)[_0x8c68('0x14')](handleEntityNotFound(_0x3a59c7,null))[_0x8c68('0x14')](respondWithResult(_0x3a59c7,null))[_0x8c68('0x35')](handleError(_0x3a59c7,null));};exports[_0x8c68('0x38')]=function(_0x4119e4,_0x428137){if(_0x4119e4[_0x8c68('0x39')]['id']){delete _0x4119e4[_0x8c68('0x39')]['id'];}return db[_0x8c68('0x1a')][_0x8c68('0x37')]({'where':{'id':_0x4119e4[_0x8c68('0x3a')]['id']}})[_0x8c68('0x14')](handleEntityNotFound(_0x428137,null))[_0x8c68('0x14')](saveUpdates(_0x4119e4[_0x8c68('0x39')],null))[_0x8c68('0x14')](respondWithResult(_0x428137,null))[_0x8c68('0x35')](handleError(_0x428137,null));};exports[_0x8c68('0x15')]=function(_0x2f9132,_0x2b80f4){return db[_0x8c68('0x1a')][_0x8c68('0x37')]({'where':{'id':_0x2f9132[_0x8c68('0x3a')]['id']}})[_0x8c68('0x14')](handleEntityNotFound(_0x2b80f4,null))[_0x8c68('0x14')](removeEntity(_0x2b80f4,null))['catch'](handleError(_0x2b80f4,null));};exports[_0x8c68('0x3b')]=function(_0x352765,_0x156fff){var _0x2968e6;return db['sequelize'][_0x8c68('0x3c')](function(_0x3deea9){return db['CmCustomField'][_0x8c68('0x3b')](_0x352765[_0x8c68('0x39')],{'transaction':_0x3deea9})[_0x8c68('0x14')](function(_0x5ee9b7){_0x2968e6=_0x5ee9b7;var _0x491cb6={'type':db[_0x8c68('0x3d')]['TEXT'],'transaction':_0x3deea9};switch(_0x352765['body'][_0x8c68('0x3e')]){case'text':_0x491cb6[_0x8c68('0x3e')]=db[_0x8c68('0x3d')][_0x8c68('0x3f')];break;case _0x8c68('0x40'):_0x491cb6['type']=db[_0x8c68('0x3d')][_0x8c68('0x41')];break;case _0x8c68('0x42'):_0x491cb6[_0x8c68('0x3e')]=db['Sequelize'][_0x8c68('0x43')];_0x491cb6[_0x8c68('0x44')]=![];break;default:}return db[_0x8c68('0x45')][_0x8c68('0x46')][_0x8c68('0x47')](_0x8c68('0x48'),util['format']('cf_%d',_0x2968e6['id']),_0x491cb6);})[_0x8c68('0x14')](function(){return _0x2968e6;});})['then'](respondWithResult(_0x156fff,0xc9))[_0x8c68('0x35')](handleError(_0x156fff,null));};
\ No newline at end of file
+var _0x3ee8=['switch','defaultValue','queryInterface','addColumn','cm_contacts','cf_%d','fast-json-patch','request-promise','util','sox','ejs','lodash','crypto','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','limit','set','reject','save','update','destroy','then','error','send','index','CmCustomField','rawAttributes','name','query','dateEnd','dateStart','attributes','model','fields','hasOwnProperty','order','sort','where','filters','pick','add','day','merge','filter','map','options','includeAll','include','findAll','rows','catch','show','intersection','length','find','body','params','transaction','create','Sequelize','type','text','TEXT','INTEGER'];(function(_0x2642cb,_0x4b917f){var _0xe6e41=function(_0x281676){while(--_0x281676){_0x2642cb['push'](_0x2642cb['shift']());}};_0xe6e41(++_0x4b917f);}(_0x3ee8,0x136));var _0x83ee=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x3ee8[_0x3dd15e];return _0x231fd0;};'use strict';var jsonpatch=require(_0x83ee('0x0'));var rp=require(_0x83ee('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x83ee('0x2'));var path=require('path');var sox=require(_0x83ee('0x3'));var csv=require('to-csv');var ejs=require(_0x83ee('0x4'));var fs=require('fs');var _=require(_0x83ee('0x5'));var squel=require('squel');var crypto=require(_0x83ee('0x6'));var jsforce=require('jsforce');var deskjs=require(_0x83ee('0x7'));var toCsv=require(_0x83ee('0x8'));var querystring=require(_0x83ee('0x9'));var Papa=require(_0x83ee('0xa'));var qs=require(_0x83ee('0xb'));var logger=require('../../config/logger')(_0x83ee('0xc'));var utils=require(_0x83ee('0xd'));var config=require(_0x83ee('0xe'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x7bdd73,_0x538550){_0x538550=_0x538550||0xcc;return function(_0x4a40c3){if(_0x4a40c3){return _0x7bdd73[_0x83ee('0xf')](_0x538550);}return _0x7bdd73['status'](_0x538550)[_0x83ee('0x10')]();};}function respondWithResult(_0x33f9f3,_0x23a84f){_0x23a84f=_0x23a84f||0xc8;return function(_0x394698){if(_0x394698){return _0x33f9f3[_0x83ee('0x11')](_0x23a84f)[_0x83ee('0x12')](_0x394698);}};}function respondWithFilteredResult(_0x38ebef,_0x4713c6){return function(_0x85319e){if(_0x85319e){var _0x3b80a7=_0x85319e[_0x83ee('0x13')],_0x123852=_0x4713c6[_0x83ee('0x14')],_0xad318c=_0x4713c6[_0x83ee('0x14')]+_0x4713c6[_0x83ee('0x15')],_0x4c0a2f;if(_0xad318c>=_0x3b80a7){_0xad318c=_0x3b80a7;_0x4c0a2f=0xc8;}else{_0x4c0a2f=0xce;}_0x38ebef['status'](_0x4c0a2f);return _0x38ebef[_0x83ee('0x16')]('Content-Range',_0x123852+'-'+_0xad318c+'/'+_0x3b80a7)[_0x83ee('0x12')](_0x85319e);}return null;};}function patchUpdates(_0x239123){return function(_0x5b0b47){try{jsonpatch['apply'](_0x5b0b47,_0x239123,!![]);}catch(_0x578495){return BPromise[_0x83ee('0x17')](_0x578495);}return _0x5b0b47[_0x83ee('0x18')]();};}function saveUpdates(_0x13c369,_0x44e0d3){return function(_0x3cc0c0){if(_0x3cc0c0){return _0x3cc0c0[_0x83ee('0x19')](_0x13c369)['then'](function(_0x1ec667){return _0x1ec667;});}return null;};}function removeEntity(_0x541e63,_0x42a955){return function(_0x4cc398){if(_0x4cc398){return _0x4cc398[_0x83ee('0x1a')]()[_0x83ee('0x1b')](function(){_0x541e63[_0x83ee('0x11')](0xcc)[_0x83ee('0x10')]();});}};}function handleEntityNotFound(_0x5eb934,_0x1c2501){return function(_0x3f5ec8){if(!_0x3f5ec8){_0x5eb934[_0x83ee('0xf')](0x194);}return _0x3f5ec8;};}function handleError(_0x30d201,_0x5e4a2e){_0x5e4a2e=_0x5e4a2e||0x1f4;return function(_0x16b074){logger[_0x83ee('0x1c')](_0x16b074['stack']);if(_0x16b074['name']){delete _0x16b074['name'];}_0x30d201[_0x83ee('0x11')](_0x5e4a2e)[_0x83ee('0x1d')](_0x16b074);};}exports[_0x83ee('0x1e')]=function(_0x33741c,_0x470d57){var _0x56a3cd={},_0x320ad4={},_0x4b572b={'count':0x0,'rows':[]};var _0x518fa8=db[_0x83ee('0x1f')][_0x83ee('0x20')];_0x320ad4['model']=_['differenceBy'](_['keys'](_0x518fa8),[_0x83ee('0x21')]);var _0x5ea8f0={'dateStart':_0x33741c['query']['dateStart'],'dateEnd':_0x33741c[_0x83ee('0x22')][_0x83ee('0x23')]};delete _0x33741c[_0x83ee('0x22')][_0x83ee('0x24')];delete _0x33741c[_0x83ee('0x22')]['dateEnd'];_0x320ad4['query']=_['keys'](_0x33741c['query']);_0x320ad4['filters']=_['intersection'](_0x320ad4['model'],_0x320ad4[_0x83ee('0x22')]);_0x56a3cd[_0x83ee('0x25')]=_['intersection'](_0x320ad4[_0x83ee('0x26')],qs[_0x83ee('0x27')](_0x33741c['query'][_0x83ee('0x27')]));_0x56a3cd[_0x83ee('0x25')]=_0x56a3cd['attributes']['length']?_0x56a3cd[_0x83ee('0x25')]:_0x320ad4[_0x83ee('0x26')];if(!_0x33741c[_0x83ee('0x22')][_0x83ee('0x28')]('nolimit')){_0x56a3cd[_0x83ee('0x15')]=qs['limit'](_0x33741c['query'][_0x83ee('0x15')]);_0x56a3cd['offset']=qs[_0x83ee('0x14')](_0x33741c['query'][_0x83ee('0x14')]);}_0x56a3cd[_0x83ee('0x29')]=qs[_0x83ee('0x2a')](_0x33741c[_0x83ee('0x22')]['sort']);_0x56a3cd[_0x83ee('0x2b')]=qs[_0x83ee('0x2c')](_[_0x83ee('0x2d')](_0x33741c[_0x83ee('0x22')],_0x320ad4[_0x83ee('0x2c')]));if(_0x5ea8f0['dateStart']){if(_0x5ea8f0[_0x83ee('0x23')]){_0x5ea8f0[_0x83ee('0x23')]=moment(_0x5ea8f0[_0x83ee('0x23')])['add'](0x1,'day');}else{_0x5ea8f0['dateEnd']=moment(_0x5ea8f0[_0x83ee('0x24')])[_0x83ee('0x2e')](0x1,_0x83ee('0x2f'));}_[_0x83ee('0x30')](_0x56a3cd[_0x83ee('0x2b')],{'createdAt':{'$gte':_0x5ea8f0[_0x83ee('0x24')],'$lte':_0x5ea8f0[_0x83ee('0x23')]}});}if(_0x33741c[_0x83ee('0x22')][_0x83ee('0x31')]){_0x56a3cd[_0x83ee('0x2b')]=_[_0x83ee('0x30')](_0x56a3cd[_0x83ee('0x2b')],{'$or':_[_0x83ee('0x32')](_0x56a3cd[_0x83ee('0x25')],function(_0x27e5ef){var _0x1cc9b7={};_0x1cc9b7[_0x27e5ef]={'$like':'%'+_0x33741c['query'][_0x83ee('0x31')]+'%'};return _0x1cc9b7;})});}_0x56a3cd=_[_0x83ee('0x30')]({},_0x56a3cd,_0x33741c[_0x83ee('0x33')]);var _0x123b3f={'where':_0x56a3cd[_0x83ee('0x2b')]};return db[_0x83ee('0x1f')][_0x83ee('0x13')](_0x123b3f)[_0x83ee('0x1b')](function(_0xe497b8){_0x4b572b[_0x83ee('0x13')]=_0xe497b8;if(_0x33741c['query'][_0x83ee('0x34')]){_0x56a3cd[_0x83ee('0x35')]=[{'all':!![]}];}return db['CmCustomField'][_0x83ee('0x36')](_0x56a3cd);})[_0x83ee('0x1b')](function(_0x3598f6){_0x4b572b[_0x83ee('0x37')]=_0x3598f6;return _0x4b572b;})[_0x83ee('0x1b')](respondWithFilteredResult(_0x470d57,_0x56a3cd))[_0x83ee('0x38')](handleError(_0x470d57,null));};exports[_0x83ee('0x39')]=function(_0x35d877,_0x4cc901){var _0x532de9={'raw':!![],'where':{'id':_0x35d877['params']['id']}},_0x559f8d={};_0x559f8d['model']=_['keys'](db[_0x83ee('0x1f')][_0x83ee('0x20')]);_0x559f8d[_0x83ee('0x22')]=_['keys'](_0x35d877[_0x83ee('0x22')]);_0x559f8d['filters']=_[_0x83ee('0x3a')](_0x559f8d['model'],_0x559f8d['query']);_0x532de9[_0x83ee('0x25')]=_[_0x83ee('0x3a')](_0x559f8d[_0x83ee('0x26')],qs['fields'](_0x35d877[_0x83ee('0x22')]['fields']));_0x532de9[_0x83ee('0x25')]=_0x532de9[_0x83ee('0x25')][_0x83ee('0x3b')]?_0x532de9[_0x83ee('0x25')]:_0x559f8d[_0x83ee('0x26')];if(_0x35d877[_0x83ee('0x22')][_0x83ee('0x34')]){_0x532de9[_0x83ee('0x35')]=[{'all':!![]}];}_0x532de9=_[_0x83ee('0x30')]({},_0x532de9,_0x35d877[_0x83ee('0x33')]);return db[_0x83ee('0x1f')][_0x83ee('0x3c')](_0x532de9)[_0x83ee('0x1b')](handleEntityNotFound(_0x4cc901,null))[_0x83ee('0x1b')](respondWithResult(_0x4cc901,null))['catch'](handleError(_0x4cc901,null));};exports[_0x83ee('0x19')]=function(_0x1fea19,_0x20e7bc){if(_0x1fea19[_0x83ee('0x3d')]['id']){delete _0x1fea19['body']['id'];}return db['CmCustomField']['find']({'where':{'id':_0x1fea19[_0x83ee('0x3e')]['id']}})[_0x83ee('0x1b')](handleEntityNotFound(_0x20e7bc,null))[_0x83ee('0x1b')](saveUpdates(_0x1fea19['body'],null))[_0x83ee('0x1b')](respondWithResult(_0x20e7bc,null))[_0x83ee('0x38')](handleError(_0x20e7bc,null));};exports[_0x83ee('0x1a')]=function(_0x2a6f7b,_0x42561d){return db[_0x83ee('0x1f')][_0x83ee('0x3c')]({'where':{'id':_0x2a6f7b[_0x83ee('0x3e')]['id']}})[_0x83ee('0x1b')](handleEntityNotFound(_0x42561d,null))['then'](removeEntity(_0x42561d,null))['catch'](handleError(_0x42561d,null));};exports['create']=function(_0x11ea84,_0x3e404f){var _0x53b789;return db['sequelize'][_0x83ee('0x3f')](function(_0x3eea64){return db['CmCustomField'][_0x83ee('0x40')](_0x11ea84[_0x83ee('0x3d')],{'transaction':_0x3eea64})[_0x83ee('0x1b')](function(_0x191b53){_0x53b789=_0x191b53;var _0x4b7a1d={'type':db[_0x83ee('0x41')]['TEXT'],'transaction':_0x3eea64};switch(_0x11ea84[_0x83ee('0x3d')][_0x83ee('0x42')]){case _0x83ee('0x43'):_0x4b7a1d[_0x83ee('0x42')]=db['Sequelize'][_0x83ee('0x44')];break;case'number':_0x4b7a1d[_0x83ee('0x42')]=db[_0x83ee('0x41')][_0x83ee('0x45')];break;case _0x83ee('0x46'):_0x4b7a1d[_0x83ee('0x42')]=db[_0x83ee('0x41')]['BOOLEAN'];_0x4b7a1d[_0x83ee('0x47')]=![];break;default:}return db['sequelize'][_0x83ee('0x48')][_0x83ee('0x49')](_0x83ee('0x4a'),util['format'](_0x83ee('0x4b'),_0x53b789['id']),_0x4b7a1d);})[_0x83ee('0x1b')](function(){return _0x53b789;});})[_0x83ee('0x1b')](respondWithResult(_0x3e404f,0xc9))[_0x83ee('0x38')](handleError(_0x3e404f,null));};
\ No newline at end of file
index 4ed3af4..d8c1499 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xad0c=['bluebird','request-promise','./cmCustomField.attributes','define','cm_custom_fields','lodash','util','api'];(function(_0x826dae,_0x4f40b2){var _0x1e2723=function(_0x3b894){while(--_0x3b894){_0x826dae['push'](_0x826dae['shift']());}};_0x1e2723(++_0x4f40b2);}(_0xad0c,0xad));var _0xcad0=function(_0xc393fe,_0x76651){_0xc393fe=_0xc393fe-0x0;var _0x2ad0f9=_0xad0c[_0xc393fe];return _0x2ad0f9;};'use strict';var _=require(_0xcad0('0x0'));var util=require(_0xcad0('0x1'));var logger=require('../../config/logger')(_0xcad0('0x2'));var moment=require('moment');var BPromise=require(_0xcad0('0x3'));var rp=require(_0xcad0('0x4'));var attributes=require(_0xcad0('0x5'));module['exports']=function(_0x430d53,_0x4b730c){return _0x430d53[_0xcad0('0x6')]('CmCustomField',attributes,{'tableName':_0xcad0('0x7'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfb32=['api','bluebird','./cmCustomField.attributes','exports','define','cm_custom_fields','lodash','../../config/logger'];(function(_0x460c0f,_0x17d817){var _0xf29dbc=function(_0x47cf98){while(--_0x47cf98){_0x460c0f['push'](_0x460c0f['shift']());}};_0xf29dbc(++_0x17d817);}(_0xfb32,0x12e));var _0x2fb3=function(_0x3ab9ee,_0x4a74b8){_0x3ab9ee=_0x3ab9ee-0x0;var _0x82ee88=_0xfb32[_0x3ab9ee];return _0x82ee88;};'use strict';var _=require(_0x2fb3('0x0'));var util=require('util');var logger=require(_0x2fb3('0x1'))(_0x2fb3('0x2'));var moment=require('moment');var BPromise=require(_0x2fb3('0x3'));var rp=require('request-promise');var attributes=require(_0x2fb3('0x4'));module[_0x2fb3('0x5')]=function(_0x10d55c,_0x482003){return _0x10d55c[_0x2fb3('0x6')]('CmCustomField',attributes,{'tableName':_0x2fb3('0x7'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 04aeb6a..a212484 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf2e0=['then','info','CmCustomField,\x20%s,\x20%s','request\x20sent','CmCustomField,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','bluebird','randomstring','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xf2e0,0xc7));var _0x0f2e=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0xf2e0[_0x19e35c];return _0x3e1fe8;};'use strict';var _=require(_0x0f2e('0x0'));var util=require(_0x0f2e('0x1'));var moment=require('moment');var BPromise=require(_0x0f2e('0x2'));var rs=require(_0x0f2e('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x0f2e('0x4'));var logger=require(_0x0f2e('0x5'))(_0x0f2e('0x6'));var config=require('../../config/environment');var jayson=require(_0x0f2e('0x7'));var client=jayson[_0x0f2e('0x8')][_0x0f2e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x47c448,_0x51a040,_0x140693){return new BPromise(function(_0x53de0f,_0x1e28ed){return client[_0x0f2e('0xa')](_0x47c448,_0x140693)[_0x0f2e('0xb')](function(_0x57c451){logger[_0x0f2e('0xc')](_0x0f2e('0xd'),_0x51a040,_0x0f2e('0xe'));logger['debug'](_0x0f2e('0xf'),_0x51a040,_0x0f2e('0xe'),JSON['stringify'](_0x57c451));if(_0x57c451[_0x0f2e('0x10')]){if(_0x57c451[_0x0f2e('0x10')][_0x0f2e('0x11')]===0x1f4){logger[_0x0f2e('0x10')](_0x0f2e('0xd'),_0x51a040,_0x57c451['error']['message']);return _0x1e28ed(_0x57c451[_0x0f2e('0x10')][_0x0f2e('0x12')]);}logger[_0x0f2e('0x10')](_0x0f2e('0xd'),_0x51a040,_0x57c451[_0x0f2e('0x10')][_0x0f2e('0x12')]);return _0x53de0f(_0x57c451[_0x0f2e('0x10')][_0x0f2e('0x12')]);}else{logger[_0x0f2e('0xc')](_0x0f2e('0xd'),_0x51a040,_0x0f2e('0xe'));_0x53de0f(_0x57c451[_0x0f2e('0x13')][_0x0f2e('0x12')]);}})[_0x0f2e('0x14')](function(_0x42fcc5){logger[_0x0f2e('0x10')](_0x0f2e('0xd'),_0x51a040,_0x42fcc5);_0x1e28ed(_0x42fcc5);});});}
\ No newline at end of file
+var _0x31a2=['error','code','message','result','catch','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','CmCustomField,\x20%s,\x20%s','request\x20sent','debug','CmCustomField,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x3d5f92,_0x17b373){var _0x32b7d5=function(_0x4b4937){while(--_0x4b4937){_0x3d5f92['push'](_0x3d5f92['shift']());}};_0x32b7d5(++_0x17b373);}(_0x31a2,0x116));var _0x231a=function(_0x2feed4,_0x2c684e){_0x2feed4=_0x2feed4-0x0;var _0x13e035=_0x31a2[_0x2feed4];return _0x13e035;};'use strict';var _=require('lodash');var util=require('util');var moment=require('moment');var BPromise=require(_0x231a('0x0'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x231a('0x1'))['db'];var utils=require(_0x231a('0x2'));var logger=require(_0x231a('0x3'))(_0x231a('0x4'));var config=require(_0x231a('0x5'));var jayson=require(_0x231a('0x6'));var client=jayson[_0x231a('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x26b5c9,_0x5f202c,_0x2ca8b8){return new BPromise(function(_0x26c637,_0x291516){return client[_0x231a('0x8')](_0x26b5c9,_0x2ca8b8)[_0x231a('0x9')](function(_0x30ab6d){logger[_0x231a('0xa')](_0x231a('0xb'),_0x5f202c,_0x231a('0xc'));logger[_0x231a('0xd')](_0x231a('0xe'),_0x5f202c,_0x231a('0xc'),JSON[_0x231a('0xf')](_0x30ab6d));if(_0x30ab6d[_0x231a('0x10')]){if(_0x30ab6d[_0x231a('0x10')][_0x231a('0x11')]===0x1f4){logger[_0x231a('0x10')](_0x231a('0xb'),_0x5f202c,_0x30ab6d[_0x231a('0x10')]['message']);return _0x291516(_0x30ab6d[_0x231a('0x10')][_0x231a('0x12')]);}logger['error'](_0x231a('0xb'),_0x5f202c,_0x30ab6d[_0x231a('0x10')][_0x231a('0x12')]);return _0x26c637(_0x30ab6d['error']['message']);}else{logger['info'](_0x231a('0xb'),_0x5f202c,_0x231a('0xc'));_0x26c637(_0x30ab6d[_0x231a('0x13')][_0x231a('0x12')]);}})[_0x231a('0x14')](function(_0x12d651){logger[_0x231a('0x10')]('CmCustomField,\x20%s,\x20%s',_0x5f202c,_0x12d651);_0x291516(_0x12d651);});});}
\ No newline at end of file
index dcd3e2b..cfe9386 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x86d6=['destroy','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmCustomField.controller','get','isAuthenticated','index','/:id','show','update'];(function(_0x138334,_0x150ef6){var _0x2ed02c=function(_0x12725c){while(--_0x12725c){_0x138334['push'](_0x138334['shift']());}};_0x2ed02c(++_0x150ef6);}(_0x86d6,0x6a));var _0x686d=function(_0xf69140,_0xff0f71){_0xf69140=_0xf69140-0x0;var _0x2242e6=_0x86d6[_0xf69140];return _0x2242e6;};'use strict';var multer=require(_0x686d('0x0'));var util=require('util');var path=require(_0x686d('0x1'));var express=require(_0x686d('0x2'));var router=express[_0x686d('0x3')]();var auth=require(_0x686d('0x4'));var interaction=require(_0x686d('0x5'));var config=require(_0x686d('0x6'));var controller=require(_0x686d('0x7'));router[_0x686d('0x8')]('/',auth[_0x686d('0x9')](),controller[_0x686d('0xa')]);router[_0x686d('0x8')](_0x686d('0xb'),auth['isAuthenticated'](),controller[_0x686d('0xc')]);router['post']('/',auth[_0x686d('0x9')](),controller['create']);router['put'](_0x686d('0xb'),auth['isAuthenticated'](),controller[_0x686d('0xd')]);router['delete'](_0x686d('0xb'),auth[_0x686d('0x9')](),controller[_0x686d('0xe')]);module['exports']=router;
\ No newline at end of file
+var _0xa2dc=['destroy','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmCustomField.controller','get','isAuthenticated','index','/:id','show','post','update','delete'];(function(_0x3e5086,_0x48f4a2){var _0xfeb102=function(_0x5a945f){while(--_0x5a945f){_0x3e5086['push'](_0x3e5086['shift']());}};_0xfeb102(++_0x48f4a2);}(_0xa2dc,0x157));var _0xca2d=function(_0x25cd2c,_0x57498e){_0x25cd2c=_0x25cd2c-0x0;var _0x1e364c=_0xa2dc[_0x25cd2c];return _0x1e364c;};'use strict';var multer=require(_0xca2d('0x0'));var util=require(_0xca2d('0x1'));var path=require(_0xca2d('0x2'));var express=require(_0xca2d('0x3'));var router=express[_0xca2d('0x4')]();var auth=require(_0xca2d('0x5'));var interaction=require(_0xca2d('0x6'));var config=require(_0xca2d('0x7'));var controller=require(_0xca2d('0x8'));router[_0xca2d('0x9')]('/',auth[_0xca2d('0xa')](),controller[_0xca2d('0xb')]);router[_0xca2d('0x9')](_0xca2d('0xc'),auth[_0xca2d('0xa')](),controller[_0xca2d('0xd')]);router[_0xca2d('0xe')]('/',auth['isAuthenticated'](),controller['create']);router['put'](_0xca2d('0xc'),auth[_0xca2d('0xa')](),controller[_0xca2d('0xf')]);router[_0xca2d('0x10')](_0xca2d('0xc'),auth[_0xca2d('0xa')](),controller[_0xca2d('0x11')]);module['exports']=router;
\ No newline at end of file
index 0b8ccb8..9291837 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe685=['BOOLEAN','DATE','format','INTEGER','STRING','contactListQueue','moment','sequelize'];(function(_0x1d352a,_0x5b9b85){var _0x441f49=function(_0x42def1){while(--_0x42def1){_0x1d352a['push'](_0x1d352a['shift']());}};_0x441f49(++_0x5b9b85);}(_0xe685,0x10e));var _0x5e68=function(_0x3e372e,_0x10f50b){_0x3e372e=_0x3e372e-0x0;var _0x206dbd=_0xe685[_0x3e372e];return _0x206dbd;};'use strict';var moment=require(_0x5e68('0x0'));var Sequelize=require(_0x5e68('0x1'));module['exports']={'phone':{'type':Sequelize['STRING'],'allowNull':![]},'active':{'type':Sequelize[_0x5e68('0x2')],'defaultValue':![]},'scheduledat':{'type':Sequelize[_0x5e68('0x3')],'defaultValue':moment()[_0x5e68('0x4')]('YYYY-MM-DD\x20HH:mm:ss')},'countbusyretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x5e68('0x5')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x5e68('0x5')],'defaultValue':0x0},'callback':{'type':Sequelize[_0x5e68('0x2')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x5e68('0x6')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x5e68('0x3')]},'priority':{'type':Sequelize[_0x5e68('0x5')](0x2)['UNSIGNED'],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'recallme':{'type':Sequelize[_0x5e68('0x2')],'defaultValue':![]},'ContactId':{'type':Sequelize[_0x5e68('0x5')],'unique':_0x5e68('0x7')},'ListId':{'type':Sequelize[_0x5e68('0x5')],'unique':_0x5e68('0x7')},'UserId':{'type':Sequelize[_0x5e68('0x5')]},'VoiceQueueId':{'type':Sequelize[_0x5e68('0x5')],'unique':'contactListQueue'},'CampaignId':{'type':Sequelize[_0x5e68('0x5')]}};
\ No newline at end of file
+var _0x1247=['INTEGER','BOOLEAN','UNSIGNED','contactListQueue','moment','sequelize','STRING','DATE','format','YYYY-MM-DD\x20HH:mm:ss'];(function(_0x3fa69a,_0xfc372b){var _0x457fea=function(_0x546c00){while(--_0x546c00){_0x3fa69a['push'](_0x3fa69a['shift']());}};_0x457fea(++_0xfc372b);}(_0x1247,0xe0));var _0x7124=function(_0x36436d,_0x20292c){_0x36436d=_0x36436d-0x0;var _0x34615d=_0x1247[_0x36436d];return _0x34615d;};'use strict';var moment=require(_0x7124('0x0'));var Sequelize=require(_0x7124('0x1'));module['exports']={'phone':{'type':Sequelize[_0x7124('0x2')],'allowNull':![]},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'scheduledat':{'type':Sequelize[_0x7124('0x3')],'defaultValue':moment()[_0x7124('0x4')](_0x7124('0x5'))},'countbusyretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x7124('0x6')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x7124('0x6')],'defaultValue':0x0},'callback':{'type':Sequelize[_0x7124('0x7')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x7124('0x2')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x7124('0x3')]},'priority':{'type':Sequelize[_0x7124('0x6')](0x2)[_0x7124('0x8')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'recallme':{'type':Sequelize[_0x7124('0x7')],'defaultValue':![]},'ContactId':{'type':Sequelize[_0x7124('0x6')],'unique':'contactListQueue'},'ListId':{'type':Sequelize['INTEGER'],'unique':'contactListQueue'},'UserId':{'type':Sequelize[_0x7124('0x6')]},'VoiceQueueId':{'type':Sequelize['INTEGER'],'unique':_0x7124('0x9')},'CampaignId':{'type':Sequelize['INTEGER']}};
\ No newline at end of file
index 84238f9..169eb36 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe600=['../../mysqldb','sendStatus','status','end','count','offset','limit','Content-Range','json','apply','reject','save','update','destroy','then','error','stack','name','send','model','keys','dateStart','dateEnd','query','intersection','fields','attributes','length','nolimit','order','sort','where','filters','pick','add','day','filter','merge','map','options','include','CmHopper','findAll','rows','catch','show','includeAll','create','body','find','params','describe','VoiceQueueId','Campaign','omit','dataValues','createdAt','updatedAt','state','statedesc','campaign','membername','user','deleted','deletedat','format','calleridnum','campaigntype','queue','ivr','CmContact','ContactId','firstName','isNil','lastName','finally','CmHopperFinal','getVoiceQueues','outbound','preview','dialOrderByScheduledAt','sequelize','transaction','YYYY-MM-DD\x20HH:mm:ss','isEmpty','hopperIds','scheduledat','priority','scheduledAt','UserId','LOCK','UPDATE','Contact','CmCompany','Company','CmList','List','VoiceQueue','dialActive','isNumber','CmHopper,\x20%s,\x20%s,\x20%s','getOpenContacts','entity\x20not\x20found','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment'];(function(_0x87eee5,_0x581852){var _0x17e2dc=function(_0x1122d2){while(--_0x1122d2){_0x87eee5['push'](_0x87eee5['shift']());}};_0x17e2dc(++_0x581852);}(_0xe600,0x159));var _0x0e60=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xe600[_0x321bb2];return _0x9c12ed;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x0e60('0x0'));var moment=require('moment');var BPromise=require(_0x0e60('0x1'));var Mustache=require(_0x0e60('0x2'));var util=require(_0x0e60('0x3'));var path=require(_0x0e60('0x4'));var sox=require(_0x0e60('0x5'));var csv=require(_0x0e60('0x6'));var ejs=require(_0x0e60('0x7'));var fs=require('fs');var _=require(_0x0e60('0x8'));var squel=require(_0x0e60('0x9'));var crypto=require(_0x0e60('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x0e60('0xb'));var toCsv=require(_0x0e60('0x6'));var querystring=require(_0x0e60('0xc'));var Papa=require(_0x0e60('0xd'));var qs=require('../../components/parsers/qs');var logger=require(_0x0e60('0xe'))(_0x0e60('0xf'));var utils=require(_0x0e60('0x10'));var config=require(_0x0e60('0x11'));var db=require(_0x0e60('0x12'))['db'];function respondWithStatusCode(_0x1659e4,_0x5e3246){_0x5e3246=_0x5e3246||0xcc;return function(_0x4f43ab){if(_0x4f43ab){return _0x1659e4[_0x0e60('0x13')](_0x5e3246);}return _0x1659e4[_0x0e60('0x14')](_0x5e3246)[_0x0e60('0x15')]();};}function respondWithResult(_0x2b3676,_0x2a4cf0){_0x2a4cf0=_0x2a4cf0||0xc8;return function(_0x1f2f3e){if(_0x1f2f3e){return _0x2b3676[_0x0e60('0x14')](_0x2a4cf0)['json'](_0x1f2f3e);}};}function respondWithFilteredResult(_0x2d848f,_0x3180a5){return function(_0x24c20f){if(_0x24c20f){var _0x1202fc=_0x24c20f[_0x0e60('0x16')],_0x45328b=_0x3180a5['offset'],_0x37bf95=_0x3180a5[_0x0e60('0x17')]+_0x3180a5[_0x0e60('0x18')],_0x5d7f84;if(_0x37bf95>=_0x1202fc){_0x37bf95=_0x1202fc;_0x5d7f84=0xc8;}else{_0x5d7f84=0xce;}_0x2d848f[_0x0e60('0x14')](_0x5d7f84);return _0x2d848f['set'](_0x0e60('0x19'),_0x45328b+'-'+_0x37bf95+'/'+_0x1202fc)[_0x0e60('0x1a')](_0x24c20f);}return null;};}function patchUpdates(_0xdb7760){return function(_0x223eb1){try{jsonpatch[_0x0e60('0x1b')](_0x223eb1,_0xdb7760,!![]);}catch(_0x4ed292){return BPromise[_0x0e60('0x1c')](_0x4ed292);}return _0x223eb1[_0x0e60('0x1d')]();};}function saveUpdates(_0x599c1d,_0x17ab47){return function(_0x43c09d){if(_0x43c09d){return _0x43c09d[_0x0e60('0x1e')](_0x599c1d)['then'](function(_0xc1a7b9){return _0xc1a7b9;});}return null;};}function removeEntity(_0x4a49e9,_0x13b04c){return function(_0x30c6a5){if(_0x30c6a5){return _0x30c6a5[_0x0e60('0x1f')]()[_0x0e60('0x20')](function(){_0x4a49e9[_0x0e60('0x14')](0xcc)[_0x0e60('0x15')]();});}};}function handleEntityNotFound(_0x38f677,_0x2ed72f){return function(_0x352633){if(!_0x352633){_0x38f677[_0x0e60('0x13')](0x194);}return _0x352633;};}function handleError(_0x22c0e0,_0x1082cc){_0x1082cc=_0x1082cc||0x1f4;return function(_0x300c66){logger[_0x0e60('0x21')](_0x300c66[_0x0e60('0x22')]);if(_0x300c66[_0x0e60('0x23')]){delete _0x300c66[_0x0e60('0x23')];}_0x22c0e0[_0x0e60('0x14')](_0x1082cc)[_0x0e60('0x24')](_0x300c66);};}exports['index']=function(_0x29f500,_0x41ad9a){var _0x5ea254={},_0x10451f={},_0x5ddd18={'count':0x0,'rows':[]};var _0x3ddc19=db['CmHopper']['rawAttributes'];_0x10451f[_0x0e60('0x25')]=_[_0x0e60('0x26')](_0x3ddc19);var _0x526aaa={'dateStart':_0x29f500['query'][_0x0e60('0x27')],'dateEnd':_0x29f500['query'][_0x0e60('0x28')]};delete _0x29f500['query']['dateStart'];delete _0x29f500[_0x0e60('0x29')][_0x0e60('0x28')];_0x10451f[_0x0e60('0x29')]=_['keys'](_0x29f500[_0x0e60('0x29')]);_0x10451f['filters']=_[_0x0e60('0x2a')](_0x10451f[_0x0e60('0x25')],_0x10451f[_0x0e60('0x29')]);_0x5ea254['attributes']=_[_0x0e60('0x2a')](_0x10451f[_0x0e60('0x25')],qs[_0x0e60('0x2b')](_0x29f500['query'][_0x0e60('0x2b')]));_0x5ea254[_0x0e60('0x2c')]=_0x5ea254[_0x0e60('0x2c')][_0x0e60('0x2d')]?_0x5ea254[_0x0e60('0x2c')]:_0x10451f['model'];if(!_0x29f500[_0x0e60('0x29')]['hasOwnProperty'](_0x0e60('0x2e'))){_0x5ea254['limit']=qs[_0x0e60('0x18')](_0x29f500[_0x0e60('0x29')][_0x0e60('0x18')]);_0x5ea254['offset']=qs[_0x0e60('0x17')](_0x29f500[_0x0e60('0x29')][_0x0e60('0x17')]);}_0x5ea254[_0x0e60('0x2f')]=qs[_0x0e60('0x30')](_0x29f500[_0x0e60('0x29')][_0x0e60('0x30')]);_0x5ea254[_0x0e60('0x31')]=qs[_0x0e60('0x32')](_[_0x0e60('0x33')](_0x29f500[_0x0e60('0x29')],_0x10451f[_0x0e60('0x32')]));if(_0x526aaa['dateStart']){if(_0x526aaa[_0x0e60('0x28')]){_0x526aaa[_0x0e60('0x28')]=moment(_0x526aaa[_0x0e60('0x28')])[_0x0e60('0x34')](0x1,'day');}else{_0x526aaa['dateEnd']=moment(_0x526aaa[_0x0e60('0x27')])['add'](0x1,_0x0e60('0x35'));}_['merge'](_0x5ea254[_0x0e60('0x31')],{'createdAt':{'$gte':_0x526aaa[_0x0e60('0x27')],'$lte':_0x526aaa[_0x0e60('0x28')]}});}if(_0x29f500[_0x0e60('0x29')][_0x0e60('0x36')]){_0x5ea254[_0x0e60('0x31')]=_[_0x0e60('0x37')](_0x5ea254[_0x0e60('0x31')],{'$or':_[_0x0e60('0x38')](_0x5ea254[_0x0e60('0x2c')],function(_0xb0a66c){var _0x3becf9={};_0x3becf9[_0xb0a66c]={'$like':'%'+_0x29f500['query'][_0x0e60('0x36')]+'%'};return _0x3becf9;})});}_0x5ea254=_['merge']({},_0x5ea254,_0x29f500[_0x0e60('0x39')]);var _0x266cae={'where':_0x5ea254['where']};return db['CmHopper'][_0x0e60('0x16')](_0x266cae)[_0x0e60('0x20')](function(_0x50b793){_0x5ddd18[_0x0e60('0x16')]=_0x50b793;if(_0x29f500[_0x0e60('0x29')]['includeAll']){_0x5ea254[_0x0e60('0x3a')]=[{'all':!![]}];}return db[_0x0e60('0x3b')][_0x0e60('0x3c')](_0x5ea254);})[_0x0e60('0x20')](function(_0x3ac0f0){_0x5ddd18[_0x0e60('0x3d')]=_0x3ac0f0;return _0x5ddd18;})[_0x0e60('0x20')](respondWithFilteredResult(_0x41ad9a,_0x5ea254))[_0x0e60('0x3e')](handleError(_0x41ad9a,null));};exports[_0x0e60('0x3f')]=function(_0x4c89b4,_0x4a2a10){var _0x535c06={'raw':!![],'where':{'id':_0x4c89b4['params']['id']}},_0x39c7d4={};_0x39c7d4[_0x0e60('0x25')]=_[_0x0e60('0x26')](db[_0x0e60('0x3b')]['rawAttributes']);_0x39c7d4[_0x0e60('0x29')]=_[_0x0e60('0x26')](_0x4c89b4['query']);_0x39c7d4['filters']=_[_0x0e60('0x2a')](_0x39c7d4[_0x0e60('0x25')],_0x39c7d4[_0x0e60('0x29')]);_0x535c06[_0x0e60('0x2c')]=_[_0x0e60('0x2a')](_0x39c7d4[_0x0e60('0x25')],qs['fields'](_0x4c89b4[_0x0e60('0x29')][_0x0e60('0x2b')]));_0x535c06[_0x0e60('0x2c')]=_0x535c06[_0x0e60('0x2c')][_0x0e60('0x2d')]?_0x535c06['attributes']:_0x39c7d4['model'];if(_0x4c89b4['query'][_0x0e60('0x40')]){_0x535c06[_0x0e60('0x3a')]=[{'all':!![]}];}_0x535c06=_[_0x0e60('0x37')]({},_0x535c06,_0x4c89b4[_0x0e60('0x39')]);return db['CmHopper']['find'](_0x535c06)['then'](handleEntityNotFound(_0x4a2a10,null))[_0x0e60('0x20')](respondWithResult(_0x4a2a10,null))[_0x0e60('0x3e')](handleError(_0x4a2a10,null));};exports[_0x0e60('0x41')]=function(_0x5fe304,_0x8777f4){return db['CmHopper']['create'](_0x5fe304[_0x0e60('0x42')],{})[_0x0e60('0x20')](respondWithResult(_0x8777f4,0xc9))[_0x0e60('0x3e')](handleError(_0x8777f4,null));};exports[_0x0e60('0x1e')]=function(_0x4ad156,_0x36a999){if(_0x4ad156[_0x0e60('0x42')]['id']){delete _0x4ad156[_0x0e60('0x42')]['id'];}return db['CmHopper'][_0x0e60('0x43')]({'where':{'id':_0x4ad156[_0x0e60('0x44')]['id']}})['then'](handleEntityNotFound(_0x36a999,null))[_0x0e60('0x20')](saveUpdates(_0x4ad156['body'],null))[_0x0e60('0x20')](respondWithResult(_0x36a999,null))[_0x0e60('0x3e')](handleError(_0x36a999,null));};exports[_0x0e60('0x45')]=function(_0x2e887c,_0x477a99){return db['CmHopper'][_0x0e60('0x45')]()[_0x0e60('0x20')](respondWithResult(_0x477a99,null))[_0x0e60('0x3e')](handleError(_0x477a99,null));};exports[_0x0e60('0x1f')]=function(_0x5c5074,_0x19d7bc){var _0x241c9e;return db[_0x0e60('0x3b')][_0x0e60('0x43')]({'where':{'id':_0x5c5074['params']['id']}})[_0x0e60('0x20')](handleEntityNotFound(_0x19d7bc,null))['then'](function(_0x246d3f){if(_0x246d3f){return _0x246d3f[_0x0e60('0x1f')]()[_0x0e60('0x20')](function(_0x9e4340){return _0x9e4340;});}})[_0x0e60('0x20')](function(_0xf1ee30){_0x241c9e=_0xf1ee30;if(_0xf1ee30){if(_0xf1ee30[_0x0e60('0x46')]||_0xf1ee30['CampaignId']){return db[_0xf1ee30[_0x0e60('0x46')]?'VoiceQueue':_0x0e60('0x47')][_0x0e60('0x43')]({'where':{'id':_0xf1ee30[_0x0e60('0x46')]?_0xf1ee30[_0x0e60('0x46')]:_0xf1ee30['CampaignId']},'attributes':['id','name'],'raw':!![]});}}})[_0x0e60('0x20')](function(_0x5a6c01){var _0x2893f1={};if(_0x5a6c01){_[_0x0e60('0x37')](_0x2893f1,_[_0x0e60('0x48')](_0x241c9e[_0x0e60('0x49')],[_0x0e60('0x4a'),_0x0e60('0x4b'),'id']));_0x2893f1[_0x0e60('0x4c')]=0x15;_0x2893f1[_0x0e60('0x4d')]='deleted';_0x2893f1[_0x0e60('0x4e')]=_0x5a6c01[_0x0e60('0x23')];_0x2893f1[_0x0e60('0x4f')]=_0x5c5074[_0x0e60('0x50')][_0x0e60('0x23')];_0x2893f1['UserId']=_0x5c5074[_0x0e60('0x50')]['id'];_0x2893f1[_0x0e60('0x51')]=!![];_0x2893f1[_0x0e60('0x52')]=moment()[_0x0e60('0x53')]('YYYY-MM-DD\x20HH:mm:ss');_0x2893f1[_0x0e60('0x54')]=_0x241c9e['phone'];_0x2893f1[_0x0e60('0x55')]=_0x241c9e[_0x0e60('0x46')]?_0x0e60('0x56'):_0x0e60('0x57');return db[_0x0e60('0x58')]['find']({'where':{'id':_0x2893f1[_0x0e60('0x59')]},'attributes':[_0x0e60('0x5a'),'lastName']})[_0x0e60('0x20')](function(_0x53b0a1){if(!_[_0x0e60('0x5b')](_0x19d7bc)&&!_[_0x0e60('0x5b')](_0x53b0a1['firstName'])){_0x2893f1['calleridname']=_0x53b0a1[_0x0e60('0x5a')];if(!_[_0x0e60('0x5b')](_0x53b0a1['lastName'])){_0x2893f1['calleridname']+='\x20'+_0x53b0a1[_0x0e60('0x5c')];}}})[_0x0e60('0x5d')](function(){return db[_0x0e60('0x5e')][_0x0e60('0x41')](_0x2893f1);});}})['then'](function(){return _0x19d7bc[_0x0e60('0x14')](0xcc)[_0x0e60('0x15')]();})[_0x0e60('0x3e')](handleError(_0x19d7bc,null));};exports['getPreview']=function(_0x268f13,_0x348993,_0x56850b){var _0x2cb9b2=[];return db[_0x0e60('0x58')]['describe']()[_0x0e60('0x20')](function(_0x1cddaa){_0x2cb9b2=_['keys'](_0x1cddaa);return _0x268f13['user'][_0x0e60('0x5f')]({'where':{'type':_0x0e60('0x60'),'dialActive':!![],'dialMethod':_0x0e60('0x61')},'attributes':['id',_0x0e60('0x62')],'raw':!![]});})[_0x0e60('0x20')](function(_0xec104b){if(_0xec104b&&_0xec104b[_0x0e60('0x2d')]){return db[_0x0e60('0x63')][_0x0e60('0x64')](function(_0x2d0c5d){var _0x1ca128={'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x0e60('0x53')](_0x0e60('0x65'))},'VoiceQueueId':{'$in':_[_0x0e60('0x38')](_0xec104b,'id')},'$or':[{'UserId':null},{'UserId':_0x268f13[_0x0e60('0x50')]['id']}]};if(!_[_0x0e60('0x66')](_0x268f13[_0x0e60('0x42')]['hopperIds'])){var _0x5e1127={'$notIn':_0x268f13[_0x0e60('0x42')][_0x0e60('0x67')]};_0x1ca128['id']=_0x5e1127;}return db[_0x0e60('0x3b')]['findOne']({'attributes':['id',_0x0e60('0x68')],'where':_0x1ca128,'order':[[_0x0e60('0x69'),'DESC'],[_0x0e60('0x6a'),_0xec104b[0x0][_0x0e60('0x62')]],[_0x0e60('0x6b'),'DESC'],['id','ASC']],'transaction':_0x2d0c5d,'lock':_0x2d0c5d[_0x0e60('0x6c')][_0x0e60('0x6d')],'include':[{'model':db[_0x0e60('0x58')],'as':_0x0e60('0x6e'),'attributes':_0x2cb9b2,'include':[{'model':db[_0x0e60('0x6f')],'as':_0x0e60('0x70'),'attributes':['id',_0x0e60('0x23')]}]},{'model':db[_0x0e60('0x71')],'as':_0x0e60('0x72'),'attributes':['id',_0x0e60('0x23')]},{'model':db[_0x0e60('0x73')],'as':'Queue','attributes':['id',_0x0e60('0x23'),_0x0e60('0x74')]}]})[_0x0e60('0x20')](function(_0x5674d){if(_0x5674d){return _0x5674d[_0x0e60('0x1e')]({'UserId':_0x268f13[_0x0e60('0x50')]['id']},{'transaction':_0x2d0c5d});}});});}})[_0x0e60('0x20')](handleEntityNotFound(_0x348993,null))[_0x0e60('0x20')](respondWithResult(_0x348993,null))[_0x0e60('0x3e')](handleError(_0x348993,null));};exports['getOpenContacts']=function(_0x321afc,_0x2375f7,_0x1926fb){return _0x321afc[_0x0e60('0x50')][_0x0e60('0x5f')]({'where':{'type':_0x0e60('0x60'),'dialActive':!![],'dialMethod':_0x0e60('0x61')},'attributes':['id'],'raw':!![]})['then'](function(_0x7fe767){if(_0x7fe767&&_0x7fe767['length']){return db[_0x0e60('0x3b')][_0x0e60('0x16')]({'where':{'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x0e60('0x53')](_0x0e60('0x65'))},'VoiceQueueId':{'$in':_['map'](_0x7fe767,'id')},'$or':[{'UserId':null},{'UserId':_0x321afc[_0x0e60('0x50')]['id']}]}});}return 0x0;})[_0x0e60('0x20')](function(_0x5a20cd){if(!_[_0x0e60('0x5b')](_0x5a20cd)&&_[_0x0e60('0x75')](_0x5a20cd)){return _0x2375f7[_0x0e60('0x14')](0xc8)[_0x0e60('0x1a')]({'contacts':_0x5a20cd});}else{logger[_0x0e60('0x21')](_0x0e60('0x76'),_0x0e60('0x77'),0x194,_0x0e60('0x78'));_0x2375f7[_0x0e60('0x13')](0x194);}})[_0x0e60('0x3e')](handleError(_0x2375f7,null));};
\ No newline at end of file
+var _0xf2fa=['reject','then','destroy','error','stack','send','index','CmHopper','query','dateEnd','dateStart','keys','filters','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','sort','where','add','day','merge','filter','count','includeAll','include','findAll','rows','show','rawAttributes','find','catch','create','body','update','describe','VoiceQueueId','CampaignId','VoiceQueue','Campaign','omit','createdAt','updatedAt','state','statedesc','deleted','campaign','name','user','UserId','deletedat','calleridnum','phone','campaigntype','queue','ivr','CmContact','firstName','isNil','calleridname','lastName','CmHopperFinal','getPreview','outbound','preview','dialOrderByScheduledAt','sequelize','transaction','format','map','isEmpty','hopperIds','findOne','scheduledat','DESC','scheduledAt','ASC','LOCK','Contact','CmCompany','CmList','Queue','dialActive','getVoiceQueues','YYYY-MM-DD\x20HH:mm:ss','isNumber','CmHopper,\x20%s,\x20%s,\x20%s','getOpenContacts','entity\x20not\x20found','fast-json-patch','bluebird','mustache','util','path','sox','to-csv','ejs','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/environment','../../mysqldb','sendStatus','status','end','offset','limit','set','Content-Range','json','apply'];(function(_0x23ce19,_0xcc84aa){var _0x137999=function(_0x27fbdf){while(--_0x27fbdf){_0x23ce19['push'](_0x23ce19['shift']());}};_0x137999(++_0xcc84aa);}(_0xf2fa,0xd0));var _0xaf2f=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xf2fa[_0x321bb2];return _0x9c12ed;};'use strict';var jsonpatch=require(_0xaf2f('0x0'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xaf2f('0x1'));var Mustache=require(_0xaf2f('0x2'));var util=require(_0xaf2f('0x3'));var path=require(_0xaf2f('0x4'));var sox=require(_0xaf2f('0x5'));var csv=require(_0xaf2f('0x6'));var ejs=require(_0xaf2f('0x7'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xaf2f('0x8'));var jsforce=require('jsforce');var deskjs=require(_0xaf2f('0x9'));var toCsv=require(_0xaf2f('0x6'));var querystring=require(_0xaf2f('0xa'));var Papa=require(_0xaf2f('0xb'));var qs=require(_0xaf2f('0xc'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0xaf2f('0xd'));var db=require(_0xaf2f('0xe'))['db'];function respondWithStatusCode(_0x530384,_0x9f0311){_0x9f0311=_0x9f0311||0xcc;return function(_0xa1081f){if(_0xa1081f){return _0x530384[_0xaf2f('0xf')](_0x9f0311);}return _0x530384[_0xaf2f('0x10')](_0x9f0311)[_0xaf2f('0x11')]();};}function respondWithResult(_0x5c4414,_0x3b8a79){_0x3b8a79=_0x3b8a79||0xc8;return function(_0xd4cf00){if(_0xd4cf00){return _0x5c4414[_0xaf2f('0x10')](_0x3b8a79)['json'](_0xd4cf00);}};}function respondWithFilteredResult(_0x57cdb0,_0x5a3459){return function(_0x264a63){if(_0x264a63){var _0x130c3b=_0x264a63['count'],_0x580fa6=_0x5a3459[_0xaf2f('0x12')],_0x305755=_0x5a3459['offset']+_0x5a3459[_0xaf2f('0x13')],_0x131862;if(_0x305755>=_0x130c3b){_0x305755=_0x130c3b;_0x131862=0xc8;}else{_0x131862=0xce;}_0x57cdb0[_0xaf2f('0x10')](_0x131862);return _0x57cdb0[_0xaf2f('0x14')](_0xaf2f('0x15'),_0x580fa6+'-'+_0x305755+'/'+_0x130c3b)[_0xaf2f('0x16')](_0x264a63);}return null;};}function patchUpdates(_0x32e829){return function(_0x3c09b5){try{jsonpatch[_0xaf2f('0x17')](_0x3c09b5,_0x32e829,!![]);}catch(_0xd7432a){return BPromise[_0xaf2f('0x18')](_0xd7432a);}return _0x3c09b5['save']();};}function saveUpdates(_0x1a2d28,_0x3376bb){return function(_0x4d5c24){if(_0x4d5c24){return _0x4d5c24['update'](_0x1a2d28)[_0xaf2f('0x19')](function(_0xee712f){return _0xee712f;});}return null;};}function removeEntity(_0x51003c,_0x39e470){return function(_0x593b86){if(_0x593b86){return _0x593b86[_0xaf2f('0x1a')]()['then'](function(){_0x51003c[_0xaf2f('0x10')](0xcc)[_0xaf2f('0x11')]();});}};}function handleEntityNotFound(_0x588ff4,_0x342cf7){return function(_0x42b7ae){if(!_0x42b7ae){_0x588ff4[_0xaf2f('0xf')](0x194);}return _0x42b7ae;};}function handleError(_0x19da71,_0x234b3f){_0x234b3f=_0x234b3f||0x1f4;return function(_0x40cca4){logger[_0xaf2f('0x1b')](_0x40cca4[_0xaf2f('0x1c')]);if(_0x40cca4['name']){delete _0x40cca4['name'];}_0x19da71[_0xaf2f('0x10')](_0x234b3f)[_0xaf2f('0x1d')](_0x40cca4);};}exports[_0xaf2f('0x1e')]=function(_0x52a5a1,_0x1f7440){var _0x38ecee={},_0x29fc22={},_0x153075={'count':0x0,'rows':[]};var _0x2f2068=db[_0xaf2f('0x1f')]['rawAttributes'];_0x29fc22['model']=_['keys'](_0x2f2068);var _0x3bbd67={'dateStart':_0x52a5a1['query']['dateStart'],'dateEnd':_0x52a5a1[_0xaf2f('0x20')][_0xaf2f('0x21')]};delete _0x52a5a1[_0xaf2f('0x20')][_0xaf2f('0x22')];delete _0x52a5a1[_0xaf2f('0x20')]['dateEnd'];_0x29fc22[_0xaf2f('0x20')]=_[_0xaf2f('0x23')](_0x52a5a1['query']);_0x29fc22[_0xaf2f('0x24')]=_[_0xaf2f('0x25')](_0x29fc22['model'],_0x29fc22[_0xaf2f('0x20')]);_0x38ecee[_0xaf2f('0x26')]=_[_0xaf2f('0x25')](_0x29fc22[_0xaf2f('0x27')],qs['fields'](_0x52a5a1[_0xaf2f('0x20')][_0xaf2f('0x28')]));_0x38ecee['attributes']=_0x38ecee['attributes'][_0xaf2f('0x29')]?_0x38ecee['attributes']:_0x29fc22[_0xaf2f('0x27')];if(!_0x52a5a1[_0xaf2f('0x20')][_0xaf2f('0x2a')](_0xaf2f('0x2b'))){_0x38ecee[_0xaf2f('0x13')]=qs['limit'](_0x52a5a1[_0xaf2f('0x20')]['limit']);_0x38ecee['offset']=qs[_0xaf2f('0x12')](_0x52a5a1[_0xaf2f('0x20')]['offset']);}_0x38ecee['order']=qs[_0xaf2f('0x2c')](_0x52a5a1[_0xaf2f('0x20')][_0xaf2f('0x2c')]);_0x38ecee[_0xaf2f('0x2d')]=qs[_0xaf2f('0x24')](_['pick'](_0x52a5a1[_0xaf2f('0x20')],_0x29fc22['filters']));if(_0x3bbd67[_0xaf2f('0x22')]){if(_0x3bbd67[_0xaf2f('0x21')]){_0x3bbd67[_0xaf2f('0x21')]=moment(_0x3bbd67[_0xaf2f('0x21')])[_0xaf2f('0x2e')](0x1,_0xaf2f('0x2f'));}else{_0x3bbd67[_0xaf2f('0x21')]=moment(_0x3bbd67[_0xaf2f('0x22')])['add'](0x1,'day');}_[_0xaf2f('0x30')](_0x38ecee['where'],{'createdAt':{'$gte':_0x3bbd67[_0xaf2f('0x22')],'$lte':_0x3bbd67['dateEnd']}});}if(_0x52a5a1[_0xaf2f('0x20')][_0xaf2f('0x31')]){_0x38ecee['where']=_[_0xaf2f('0x30')](_0x38ecee[_0xaf2f('0x2d')],{'$or':_['map'](_0x38ecee[_0xaf2f('0x26')],function(_0x1a72cb){var _0x5e9e9b={};_0x5e9e9b[_0x1a72cb]={'$like':'%'+_0x52a5a1[_0xaf2f('0x20')]['filter']+'%'};return _0x5e9e9b;})});}_0x38ecee=_[_0xaf2f('0x30')]({},_0x38ecee,_0x52a5a1['options']);var _0x4e9aa7={'where':_0x38ecee['where']};return db[_0xaf2f('0x1f')][_0xaf2f('0x32')](_0x4e9aa7)['then'](function(_0xf1faa7){_0x153075['count']=_0xf1faa7;if(_0x52a5a1['query'][_0xaf2f('0x33')]){_0x38ecee[_0xaf2f('0x34')]=[{'all':!![]}];}return db[_0xaf2f('0x1f')][_0xaf2f('0x35')](_0x38ecee);})[_0xaf2f('0x19')](function(_0x4ccb76){_0x153075[_0xaf2f('0x36')]=_0x4ccb76;return _0x153075;})[_0xaf2f('0x19')](respondWithFilteredResult(_0x1f7440,_0x38ecee))['catch'](handleError(_0x1f7440,null));};exports[_0xaf2f('0x37')]=function(_0x371551,_0x95e218){var _0x279c5b={'raw':!![],'where':{'id':_0x371551['params']['id']}},_0x42811f={};_0x42811f[_0xaf2f('0x27')]=_[_0xaf2f('0x23')](db[_0xaf2f('0x1f')][_0xaf2f('0x38')]);_0x42811f[_0xaf2f('0x20')]=_['keys'](_0x371551[_0xaf2f('0x20')]);_0x42811f[_0xaf2f('0x24')]=_['intersection'](_0x42811f[_0xaf2f('0x27')],_0x42811f['query']);_0x279c5b[_0xaf2f('0x26')]=_[_0xaf2f('0x25')](_0x42811f['model'],qs[_0xaf2f('0x28')](_0x371551[_0xaf2f('0x20')][_0xaf2f('0x28')]));_0x279c5b[_0xaf2f('0x26')]=_0x279c5b['attributes']['length']?_0x279c5b[_0xaf2f('0x26')]:_0x42811f[_0xaf2f('0x27')];if(_0x371551[_0xaf2f('0x20')]['includeAll']){_0x279c5b['include']=[{'all':!![]}];}_0x279c5b=_[_0xaf2f('0x30')]({},_0x279c5b,_0x371551['options']);return db[_0xaf2f('0x1f')][_0xaf2f('0x39')](_0x279c5b)['then'](handleEntityNotFound(_0x95e218,null))[_0xaf2f('0x19')](respondWithResult(_0x95e218,null))[_0xaf2f('0x3a')](handleError(_0x95e218,null));};exports[_0xaf2f('0x3b')]=function(_0x497bbb,_0x597d08){return db[_0xaf2f('0x1f')]['create'](_0x497bbb[_0xaf2f('0x3c')],{})[_0xaf2f('0x19')](respondWithResult(_0x597d08,0xc9))['catch'](handleError(_0x597d08,null));};exports[_0xaf2f('0x3d')]=function(_0x1e609e,_0x2b7d85){if(_0x1e609e[_0xaf2f('0x3c')]['id']){delete _0x1e609e[_0xaf2f('0x3c')]['id'];}return db['CmHopper']['find']({'where':{'id':_0x1e609e['params']['id']}})[_0xaf2f('0x19')](handleEntityNotFound(_0x2b7d85,null))[_0xaf2f('0x19')](saveUpdates(_0x1e609e['body'],null))['then'](respondWithResult(_0x2b7d85,null))[_0xaf2f('0x3a')](handleError(_0x2b7d85,null));};exports[_0xaf2f('0x3e')]=function(_0x2452d4,_0x650dcc){return db[_0xaf2f('0x1f')][_0xaf2f('0x3e')]()[_0xaf2f('0x19')](respondWithResult(_0x650dcc,null))['catch'](handleError(_0x650dcc,null));};exports['destroy']=function(_0x327797,_0x296be8){var _0x43c0e0;return db[_0xaf2f('0x1f')]['find']({'where':{'id':_0x327797['params']['id']}})[_0xaf2f('0x19')](handleEntityNotFound(_0x296be8,null))[_0xaf2f('0x19')](function(_0x357855){if(_0x357855){return _0x357855[_0xaf2f('0x1a')]()[_0xaf2f('0x19')](function(_0x35a423){return _0x35a423;});}})[_0xaf2f('0x19')](function(_0x24ab82){_0x43c0e0=_0x24ab82;if(_0x24ab82){if(_0x24ab82[_0xaf2f('0x3f')]||_0x24ab82[_0xaf2f('0x40')]){return db[_0x24ab82[_0xaf2f('0x3f')]?_0xaf2f('0x41'):_0xaf2f('0x42')]['find']({'where':{'id':_0x24ab82[_0xaf2f('0x3f')]?_0x24ab82[_0xaf2f('0x3f')]:_0x24ab82[_0xaf2f('0x40')]},'attributes':['id','name'],'raw':!![]});}}})['then'](function(_0x33aaaf){var _0x190f9a={};if(_0x33aaaf){_['merge'](_0x190f9a,_[_0xaf2f('0x43')](_0x43c0e0['dataValues'],[_0xaf2f('0x44'),_0xaf2f('0x45'),'id']));_0x190f9a[_0xaf2f('0x46')]=0x15;_0x190f9a[_0xaf2f('0x47')]=_0xaf2f('0x48');_0x190f9a[_0xaf2f('0x49')]=_0x33aaaf[_0xaf2f('0x4a')];_0x190f9a['membername']=_0x327797[_0xaf2f('0x4b')]['name'];_0x190f9a[_0xaf2f('0x4c')]=_0x327797['user']['id'];_0x190f9a[_0xaf2f('0x48')]=!![];_0x190f9a[_0xaf2f('0x4d')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');_0x190f9a[_0xaf2f('0x4e')]=_0x43c0e0[_0xaf2f('0x4f')];_0x190f9a[_0xaf2f('0x50')]=_0x43c0e0[_0xaf2f('0x3f')]?_0xaf2f('0x51'):_0xaf2f('0x52');return db[_0xaf2f('0x53')]['find']({'where':{'id':_0x190f9a['ContactId']},'attributes':[_0xaf2f('0x54'),'lastName']})[_0xaf2f('0x19')](function(_0x36bbb1){if(!_[_0xaf2f('0x55')](_0x296be8)&&!_[_0xaf2f('0x55')](_0x36bbb1[_0xaf2f('0x54')])){_0x190f9a[_0xaf2f('0x56')]=_0x36bbb1[_0xaf2f('0x54')];if(!_[_0xaf2f('0x55')](_0x36bbb1[_0xaf2f('0x57')])){_0x190f9a[_0xaf2f('0x56')]+='\x20'+_0x36bbb1[_0xaf2f('0x57')];}}})['finally'](function(){return db[_0xaf2f('0x58')][_0xaf2f('0x3b')](_0x190f9a);});}})[_0xaf2f('0x19')](function(){return _0x296be8[_0xaf2f('0x10')](0xcc)[_0xaf2f('0x11')]();})['catch'](handleError(_0x296be8,null));};exports[_0xaf2f('0x59')]=function(_0x1baa25,_0x52121b,_0x426203){var _0x56f905=[];return db[_0xaf2f('0x53')]['describe']()[_0xaf2f('0x19')](function(_0x1e2164){_0x56f905=_[_0xaf2f('0x23')](_0x1e2164);return _0x1baa25['user']['getVoiceQueues']({'where':{'type':_0xaf2f('0x5a'),'dialActive':!![],'dialMethod':_0xaf2f('0x5b')},'attributes':['id',_0xaf2f('0x5c')],'raw':!![]});})[_0xaf2f('0x19')](function(_0x2cdc5a){if(_0x2cdc5a&&_0x2cdc5a[_0xaf2f('0x29')]){return db[_0xaf2f('0x5d')][_0xaf2f('0x5e')](function(_0x560cfc){var _0x7b0b14={'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0xaf2f('0x5f')]('YYYY-MM-DD\x20HH:mm:ss')},'VoiceQueueId':{'$in':_[_0xaf2f('0x60')](_0x2cdc5a,'id')},'$or':[{'UserId':null},{'UserId':_0x1baa25[_0xaf2f('0x4b')]['id']}]};if(!_[_0xaf2f('0x61')](_0x1baa25[_0xaf2f('0x3c')][_0xaf2f('0x62')])){var _0x204834={'$notIn':_0x1baa25['body'][_0xaf2f('0x62')]};_0x7b0b14['id']=_0x204834;}return db[_0xaf2f('0x1f')][_0xaf2f('0x63')]({'attributes':['id',_0xaf2f('0x64')],'where':_0x7b0b14,'order':[['priority',_0xaf2f('0x65')],[_0xaf2f('0x66'),_0x2cdc5a[0x0]['dialOrderByScheduledAt']],[_0xaf2f('0x4c'),_0xaf2f('0x65')],['id',_0xaf2f('0x67')]],'transaction':_0x560cfc,'lock':_0x560cfc[_0xaf2f('0x68')]['UPDATE'],'include':[{'model':db[_0xaf2f('0x53')],'as':_0xaf2f('0x69'),'attributes':_0x56f905,'include':[{'model':db[_0xaf2f('0x6a')],'as':'Company','attributes':['id',_0xaf2f('0x4a')]}]},{'model':db[_0xaf2f('0x6b')],'as':'List','attributes':['id',_0xaf2f('0x4a')]},{'model':db[_0xaf2f('0x41')],'as':_0xaf2f('0x6c'),'attributes':['id',_0xaf2f('0x4a'),_0xaf2f('0x6d')]}]})[_0xaf2f('0x19')](function(_0x3e84a8){if(_0x3e84a8){return _0x3e84a8[_0xaf2f('0x3d')]({'UserId':_0x1baa25[_0xaf2f('0x4b')]['id']},{'transaction':_0x560cfc});}});});}})[_0xaf2f('0x19')](handleEntityNotFound(_0x52121b,null))[_0xaf2f('0x19')](respondWithResult(_0x52121b,null))[_0xaf2f('0x3a')](handleError(_0x52121b,null));};exports['getOpenContacts']=function(_0x4247f9,_0x1945fd,_0x22da76){return _0x4247f9[_0xaf2f('0x4b')][_0xaf2f('0x6e')]({'where':{'type':_0xaf2f('0x5a'),'dialActive':!![],'dialMethod':_0xaf2f('0x5b')},'attributes':['id'],'raw':!![]})[_0xaf2f('0x19')](function(_0x444279){if(_0x444279&&_0x444279[_0xaf2f('0x29')]){return db[_0xaf2f('0x1f')][_0xaf2f('0x32')]({'where':{'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0xaf2f('0x5f')](_0xaf2f('0x6f'))},'VoiceQueueId':{'$in':_['map'](_0x444279,'id')},'$or':[{'UserId':null},{'UserId':_0x4247f9['user']['id']}]}});}return 0x0;})['then'](function(_0x3c53d3){if(!_[_0xaf2f('0x55')](_0x3c53d3)&&_[_0xaf2f('0x70')](_0x3c53d3)){return _0x1945fd[_0xaf2f('0x10')](0xc8)[_0xaf2f('0x16')]({'contacts':_0x3c53d3});}else{logger[_0xaf2f('0x1b')](_0xaf2f('0x71'),_0xaf2f('0x72'),0x194,_0xaf2f('0x73'));_0x1945fd['sendStatus'](0x194);}})[_0xaf2f('0x3a')](handleError(_0x1945fd,null));};
\ No newline at end of file
index 14b2234..ea2b90f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8db1=['./cmHopper.attributes','exports','CmHopper','scheduledat','phone','priority','lodash','api','moment','bluebird'];(function(_0x7dbd65,_0x18da49){var _0x33d551=function(_0x7ce789){while(--_0x7ce789){_0x7dbd65['push'](_0x7dbd65['shift']());}};_0x33d551(++_0x18da49);}(_0x8db1,0xba));var _0x18db=function(_0x1f7909,_0x1aefbd){_0x1f7909=_0x1f7909-0x0;var _0x2cb51f=_0x8db1[_0x1f7909];return _0x2cb51f;};'use strict';var _=require(_0x18db('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x18db('0x1'));var moment=require(_0x18db('0x2'));var BPromise=require(_0x18db('0x3'));var rp=require('request-promise');var attributes=require(_0x18db('0x4'));module[_0x18db('0x5')]=function(_0x5be622,_0x39c492){return _0x5be622['define'](_0x18db('0x6'),attributes,{'tableName':'cm_hopper','paranoid':![],'indexes':[{'name':_0x18db('0x7'),'fields':[_0x18db('0x7')]},{'name':_0x18db('0x8'),'fields':[_0x18db('0x8')]},{'name':'priority','fields':[_0x18db('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x4fa4=['lodash','util','../../config/logger','moment','request-promise','./cmHopper.attributes','define','CmHopper','cm_hopper','scheduledat','phone','priority'];(function(_0x3ff085,_0x27c92e){var _0x2b68c3=function(_0x37811e){while(--_0x37811e){_0x3ff085['push'](_0x3ff085['shift']());}};_0x2b68c3(++_0x27c92e);}(_0x4fa4,0x138));var _0x44fa=function(_0x17b6e3,_0x4522ed){_0x17b6e3=_0x17b6e3-0x0;var _0x3906f3=_0x4fa4[_0x17b6e3];return _0x3906f3;};'use strict';var _=require(_0x44fa('0x0'));var util=require(_0x44fa('0x1'));var logger=require(_0x44fa('0x2'))('api');var moment=require(_0x44fa('0x3'));var BPromise=require('bluebird');var rp=require(_0x44fa('0x4'));var attributes=require(_0x44fa('0x5'));module['exports']=function(_0x48fc7e,_0x8fe17b){return _0x48fc7e[_0x44fa('0x6')](_0x44fa('0x7'),attributes,{'tableName':_0x44fa('0x8'),'paranoid':![],'indexes':[{'name':_0x44fa('0x9'),'fields':[_0x44fa('0x9')]},{'name':_0x44fa('0xa'),'fields':[_0x44fa('0xa')]},{'name':_0x44fa('0xb'),'fields':['priority']}],'timestamps':!![]});};
\ No newline at end of file
index 3f45c95..9003ba1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f9d=['catch','CreateCmHopper','create','UpdateCmHopper','update','body','DestroyCmHopper','destroy','GetContactDialer','describe','sequelize','transaction','UPDATE','CmContact','Contact','keys','length','MoveContactManagedDialer','CmHopperFinal','CountReScheduled','COUNT','`scheduledat`\x20>=\x20','format','\x22%s\x22','YYYY-MM-DD\x20HH:mm:ss','\x20,\x201,\x20null','contactsRescheduled','GetContactRecallMe','UserId','LOCK','all','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','then','info','CmHopper,\x20%s,\x20%s','request\x20sent','debug','stringify','code','error','message','result','CmHopper','findAll','options','where','attributes','limit','include','map','model','GetCmHopper','ShowCmHopper','find','raw'];(function(_0x737a1f,_0x235fef){var _0x16eba1=function(_0x292aa8){while(--_0x292aa8){_0x737a1f['push'](_0x737a1f['shift']());}};_0x16eba1(++_0x235fef);}(_0x5f9d,0x9d));var _0xd5f9=function(_0xbfe121,_0xd93104){_0xbfe121=_0xbfe121-0x0;var _0x3cf9a0=_0x5f9d[_0xbfe121];return _0x3cf9a0;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xd5f9('0x0'));var BPromise=require(_0xd5f9('0x1'));var rs=require(_0xd5f9('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xd5f9('0x3'));var logger=require(_0xd5f9('0x4'))(_0xd5f9('0x5'));var config=require(_0xd5f9('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xd5f9('0x7')][_0xd5f9('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x194e92,_0x1cbae0,_0x512120){return new BPromise(function(_0x281a05,_0x24c8eb){return client['request'](_0x194e92,_0x512120)[_0xd5f9('0x9')](function(_0x410d3d){logger[_0xd5f9('0xa')](_0xd5f9('0xb'),_0x1cbae0,_0xd5f9('0xc'));logger[_0xd5f9('0xd')]('CmHopper,\x20%s,\x20%s,\x20%s',_0x1cbae0,_0xd5f9('0xc'),JSON[_0xd5f9('0xe')](_0x410d3d));if(_0x410d3d['error']){if(_0x410d3d['error'][_0xd5f9('0xf')]===0x1f4){logger['error'](_0xd5f9('0xb'),_0x1cbae0,_0x410d3d[_0xd5f9('0x10')][_0xd5f9('0x11')]);return _0x24c8eb(_0x410d3d[_0xd5f9('0x10')][_0xd5f9('0x11')]);}logger[_0xd5f9('0x10')](_0xd5f9('0xb'),_0x1cbae0,_0x410d3d[_0xd5f9('0x10')]['message']);return _0x281a05(_0x410d3d['error'][_0xd5f9('0x11')]);}else{logger['info']('CmHopper,\x20%s,\x20%s',_0x1cbae0,_0xd5f9('0xc'));_0x281a05(_0x410d3d[_0xd5f9('0x12')]['message']);}})['catch'](function(_0x31b53d){logger[_0xd5f9('0x10')]('CmHopper,\x20%s,\x20%s',_0x1cbae0,_0x31b53d);_0x24c8eb(_0x31b53d);});});}exports['GetCmHopper']=function(_0x43bcb4){var _0x384b3c=this;return new Promise(function(_0x32a245,_0x4dda06){return db[_0xd5f9('0x13')][_0xd5f9('0x14')]({'raw':_0x43bcb4['options']?_0x43bcb4[_0xd5f9('0x15')]['raw']===undefined?!![]:![]:!![],'where':_0x43bcb4[_0xd5f9('0x15')]?_0x43bcb4[_0xd5f9('0x15')][_0xd5f9('0x16')]||null:null,'attributes':_0x43bcb4['options']?_0x43bcb4[_0xd5f9('0x15')][_0xd5f9('0x17')]||null:null,'limit':_0x43bcb4[_0xd5f9('0x15')]?_0x43bcb4['options'][_0xd5f9('0x18')]||null:null,'include':_0x43bcb4['options']?_0x43bcb4['options'][_0xd5f9('0x19')]?_['map'](_0x43bcb4[_0xd5f9('0x15')][_0xd5f9('0x19')],function(_0x4604cf){return{'model':db[_0x4604cf['model']],'as':_0x4604cf['as'],'attributes':_0x4604cf[_0xd5f9('0x17')],'include':_0x4604cf[_0xd5f9('0x19')]?_[_0xd5f9('0x1a')](_0x4604cf[_0xd5f9('0x19')],function(_0x4e057a){return{'model':db[_0x4e057a['model']],'as':_0x4e057a['as'],'attributes':_0x4e057a['attributes'],'include':_0x4e057a[_0xd5f9('0x19')]?_[_0xd5f9('0x1a')](_0x4e057a['include'],function(_0x4f9f16){return{'model':db[_0x4f9f16[_0xd5f9('0x1b')]],'as':_0x4f9f16['as'],'attributes':_0x4f9f16[_0xd5f9('0x17')]};}):[]};}):[]};}):[]:[]})[_0xd5f9('0x9')](function(_0x325a7b){logger[_0xd5f9('0xa')](_0xd5f9('0x1c'),_0x43bcb4);logger[_0xd5f9('0xd')](_0xd5f9('0x1c'),_0x43bcb4,JSON[_0xd5f9('0xe')](_0x325a7b));_0x32a245(_0x325a7b);})['catch'](function(_0x1680b2){logger[_0xd5f9('0x10')]('GetCmHopper',_0x1680b2[_0xd5f9('0x11')],_0x43bcb4);_0x4dda06(_0x384b3c['error'](0x1f4,_0x1680b2[_0xd5f9('0x11')]));});});};exports[_0xd5f9('0x1d')]=function(_0xaa9280){var _0x23baef=this;return new Promise(function(_0x13d88b,_0x40f47e){return db[_0xd5f9('0x13')][_0xd5f9('0x1e')]({'raw':_0xaa9280[_0xd5f9('0x15')]?_0xaa9280[_0xd5f9('0x15')][_0xd5f9('0x1f')]===undefined?!![]:![]:!![],'where':_0xaa9280[_0xd5f9('0x15')]?_0xaa9280[_0xd5f9('0x15')][_0xd5f9('0x16')]||null:null,'attributes':_0xaa9280[_0xd5f9('0x15')]?_0xaa9280[_0xd5f9('0x15')][_0xd5f9('0x17')]||null:null,'include':_0xaa9280[_0xd5f9('0x15')]?_0xaa9280[_0xd5f9('0x15')]['include']?_[_0xd5f9('0x1a')](_0xaa9280['options'][_0xd5f9('0x19')],function(_0x283010){return{'model':db[_0x283010[_0xd5f9('0x1b')]],'as':_0x283010['as'],'attributes':_0x283010[_0xd5f9('0x17')],'include':_0x283010[_0xd5f9('0x19')]?_['map'](_0x283010['include'],function(_0x292f32){return{'model':db[_0x292f32[_0xd5f9('0x1b')]],'as':_0x292f32['as'],'attributes':_0x292f32[_0xd5f9('0x17')],'include':_0x292f32[_0xd5f9('0x19')]?_[_0xd5f9('0x1a')](_0x292f32[_0xd5f9('0x19')],function(_0x444c93){return{'model':db[_0x444c93[_0xd5f9('0x1b')]],'as':_0x444c93['as'],'attributes':_0x444c93[_0xd5f9('0x17')]};}):[]};}):[]};}):[]:[]})[_0xd5f9('0x9')](function(_0x4aec7a){logger[_0xd5f9('0xa')](_0xd5f9('0x1d'),_0xaa9280);logger['debug'](_0xd5f9('0x1d'),_0xaa9280,JSON['stringify'](_0x4aec7a));_0x13d88b(_0x4aec7a);})[_0xd5f9('0x20')](function(_0x2bde42){logger[_0xd5f9('0x10')](_0xd5f9('0x1d'),_0x2bde42['message'],_0xaa9280);_0x40f47e(_0x23baef[_0xd5f9('0x10')](0x1f4,_0x2bde42[_0xd5f9('0x11')]));});});};exports[_0xd5f9('0x21')]=function(_0x2251da){var _0xc81065=this;return new Promise(function(_0x145236,_0x327dfb){return db[_0xd5f9('0x13')][_0xd5f9('0x22')](_0x2251da['body'],{'raw':_0x2251da[_0xd5f9('0x15')]?_0x2251da['options'][_0xd5f9('0x1f')]===undefined?!![]:![]:!![]})['then'](function(_0x2f73a1){logger[_0xd5f9('0xa')]('CreateCmHopper',_0x2251da);logger[_0xd5f9('0xd')](_0xd5f9('0x21'),_0x2251da,JSON[_0xd5f9('0xe')](_0x2f73a1));_0x145236(_0x2f73a1);})[_0xd5f9('0x20')](function(_0x161308){logger[_0xd5f9('0x10')](_0xd5f9('0x21'),_0x161308[_0xd5f9('0x11')],_0x2251da);_0x327dfb(_0xc81065['error'](0x1f4,_0x161308[_0xd5f9('0x11')]));});});};exports[_0xd5f9('0x23')]=function(_0x48f4c4){var _0x7dd5a5=this;return new Promise(function(_0x916e11,_0x1517cb){return db[_0xd5f9('0x13')][_0xd5f9('0x24')](_0x48f4c4[_0xd5f9('0x25')],{'raw':_0x48f4c4[_0xd5f9('0x15')]?_0x48f4c4[_0xd5f9('0x15')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x48f4c4[_0xd5f9('0x15')]?_0x48f4c4['options']['where']||null:null,'attributes':_0x48f4c4[_0xd5f9('0x15')]?_0x48f4c4[_0xd5f9('0x15')][_0xd5f9('0x17')]||null:null,'limit':_0x48f4c4[_0xd5f9('0x15')]?_0x48f4c4[_0xd5f9('0x15')][_0xd5f9('0x18')]||null:null})[_0xd5f9('0x9')](function(_0x4b747f){logger[_0xd5f9('0xa')](_0xd5f9('0x23'),_0x48f4c4);logger[_0xd5f9('0xd')]('UpdateCmHopper',_0x48f4c4,JSON[_0xd5f9('0xe')](_0x4b747f));_0x916e11(_0x4b747f);})[_0xd5f9('0x20')](function(_0x1c9969){logger[_0xd5f9('0x10')]('UpdateCmHopper',_0x1c9969[_0xd5f9('0x11')],_0x48f4c4);_0x1517cb(_0x7dd5a5[_0xd5f9('0x10')](0x1f4,_0x1c9969[_0xd5f9('0x11')]));});});};exports[_0xd5f9('0x26')]=function(_0x5c40f8){var _0x32531a=this;return new Promise(function(_0x5f0b9a,_0x51b393){return db[_0xd5f9('0x13')][_0xd5f9('0x27')]({'where':_0x5c40f8['options']?_0x5c40f8[_0xd5f9('0x15')][_0xd5f9('0x16')]||null:null})[_0xd5f9('0x9')](function(_0x5d3a1e){logger[_0xd5f9('0xa')](_0xd5f9('0x26'),_0x5c40f8);logger['debug'](_0xd5f9('0x26'),_0x5c40f8,JSON['stringify'](_0x5d3a1e));_0x5f0b9a(_0x5d3a1e);})['catch'](function(_0x1a1937){logger[_0xd5f9('0x10')]('DestroyCmHopper',_0x1a1937['message'],_0x5c40f8);_0x51b393(_0x32531a[_0xd5f9('0x10')](0x1f4,_0x1a1937[_0xd5f9('0x11')]));});});};exports[_0xd5f9('0x28')]=function(_0x2a77f7){var _0xe33f0c=this;return new Promise(function(_0x376b74,_0x101bbb){return db['CmContact'][_0xd5f9('0x29')]()[_0xd5f9('0x9')](function(_0x461c3c){return db[_0xd5f9('0x2a')][_0xd5f9('0x2b')](function(_0x10d4ec){return db[_0xd5f9('0x13')]['findAll']({'where':_0x2a77f7['options']?_0x2a77f7[_0xd5f9('0x15')][_0xd5f9('0x16')]||null:null,'attributes':_0x2a77f7[_0xd5f9('0x15')]?_0x2a77f7[_0xd5f9('0x15')][_0xd5f9('0x17')]||null:null,'limit':_0x2a77f7[_0xd5f9('0x15')]?_0x2a77f7[_0xd5f9('0x15')][_0xd5f9('0x18')]||null:null,'order':_0x2a77f7[_0xd5f9('0x15')]?_0x2a77f7['options']['order']||null:null,'transaction':_0x10d4ec,'lock':_0x10d4ec['LOCK'][_0xd5f9('0x2c')],'include':[{'model':db[_0xd5f9('0x2d')],'as':_0xd5f9('0x2e'),'attributes':_[_0xd5f9('0x2f')](_0x461c3c)}]})[_0xd5f9('0x9')](function(_0x464c26){var _0x29a1d2=[];for(var _0x515060=0x0;_0x515060<_0x464c26[_0xd5f9('0x30')];_0x515060+=0x1){_0x29a1d2['push'](_0x464c26[_0x515060][_0xd5f9('0x24')](_0x2a77f7['body'],{'transaction':_0x10d4ec}));}return BPromise['all'](_0x29a1d2);});})[_0xd5f9('0x9')](function(_0x1745dd){logger[_0xd5f9('0xa')](_0xd5f9('0x28'),_0x2a77f7);logger[_0xd5f9('0xd')](_0xd5f9('0x28'),_0x2a77f7,JSON[_0xd5f9('0xe')](_0x1745dd));_0x376b74(_0x1745dd);})['catch'](function(_0xb6cb98){logger[_0xd5f9('0x10')](_0xd5f9('0x28'),_0xb6cb98[_0xd5f9('0x11')],_0x2a77f7);_0x101bbb(_0xe33f0c['error'](0x1f4,_0xb6cb98[_0xd5f9('0x11')]));});});});};exports[_0xd5f9('0x31')]=function(_0x158981){var _0x80710f=this;return new Promise(function(_0x5168fc,_0x17047d){return db[_0xd5f9('0x2a')][_0xd5f9('0x2b')](function(_0xf377b4){return db[_0xd5f9('0x32')][_0xd5f9('0x22')](_0x158981[_0xd5f9('0x25')],{'raw':_0x158981[_0xd5f9('0x15')]?_0x158981[_0xd5f9('0x15')][_0xd5f9('0x1f')]===undefined?!![]:![]:!![],'transaction':_0xf377b4})['then'](function(){return db[_0xd5f9('0x13')][_0xd5f9('0x27')]({'where':_0x158981[_0xd5f9('0x15')]?_0x158981['options'][_0xd5f9('0x16')]||null:null,'transaction':_0xf377b4});});})['then'](function(_0x1722fe){logger['info'](_0xd5f9('0x31'),_0x158981);logger['debug'](_0xd5f9('0x31'),_0x158981,JSON[_0xd5f9('0xe')](_0x1722fe));_0x5168fc(_0x1722fe);})[_0xd5f9('0x20')](function(_0x18dd9a){logger['error'](_0xd5f9('0x31'),_0x18dd9a[_0xd5f9('0x11')],_0x158981);_0x17047d(_0x80710f[_0xd5f9('0x10')](0x1f4,_0x18dd9a[_0xd5f9('0x11')]));});});};exports[_0xd5f9('0x33')]=function(_0x492303){var _0x4897b6=this;return new Promise(function(_0x182958,_0x1781c1){return db[_0xd5f9('0x13')][_0xd5f9('0x14')]({'raw':_0x492303[_0xd5f9('0x15')]?_0x492303[_0xd5f9('0x15')][_0xd5f9('0x1f')]===undefined?!![]:![]:!![],'where':_0x492303['options']?_0x492303['options'][_0xd5f9('0x16')]||null:null,'attributes':[[db[_0xd5f9('0x2a')]['fn'](_0xd5f9('0x34'),db[_0xd5f9('0x2a')]['fn']('IF',db[_0xd5f9('0x2a')]['literal'](_0xd5f9('0x35')+util[_0xd5f9('0x36')](_0xd5f9('0x37'),moment()[_0xd5f9('0x36')](_0xd5f9('0x38')))+_0xd5f9('0x39')))),_0xd5f9('0x3a')]]})['then'](function(_0x3c9e8c){logger[_0xd5f9('0xa')](_0xd5f9('0x33'),_0x492303);logger[_0xd5f9('0xd')](_0xd5f9('0x33'),_0x492303,JSON[_0xd5f9('0xe')](_0x3c9e8c));_0x182958(_0x3c9e8c);})[_0xd5f9('0x20')](function(_0x5c31bf){logger['error'](_0xd5f9('0x33'),_0x5c31bf[_0xd5f9('0x11')],_0x492303);_0x1781c1(_0x4897b6['error'](0x1f4,_0x5c31bf[_0xd5f9('0x11')]));});});};exports[_0xd5f9('0x3b')]=function(_0x2352f9){var _0x3132b2=this;return new Promise(function(_0x523d55,_0x16ee8c){return db['CmContact']['describe']()[_0xd5f9('0x9')](function(_0x522081){return db[_0xd5f9('0x2a')]['transaction'](function(_0x1a592a){return db['CmHopper'][_0xd5f9('0x14')]({'where':_0x2352f9[_0xd5f9('0x15')]?_0x2352f9[_0xd5f9('0x15')]['where']||null:null,'attributes':_0x2352f9[_0xd5f9('0x15')]?_0x2352f9[_0xd5f9('0x15')][_0xd5f9('0x17')]||null:null,'limit':0x1,'order':_0x2352f9[_0xd5f9('0x15')]?_0x2352f9['options']['order']||null:null,'group':db[_0xd5f9('0x13')][_0xd5f9('0x3c')],'transaction':_0x1a592a,'lock':_0x1a592a[_0xd5f9('0x3d')][_0xd5f9('0x2c')],'include':_0x2352f9[_0xd5f9('0x15')]?_0x2352f9[_0xd5f9('0x15')][_0xd5f9('0x19')]?_[_0xd5f9('0x1a')](_0x2352f9[_0xd5f9('0x15')][_0xd5f9('0x19')],function(_0x4402d5){return{'model':db[_0x4402d5[_0xd5f9('0x1b')]],'as':_0x4402d5['as'],'attributes':_0x4402d5[_0xd5f9('0x17')],'include':_0x4402d5['include']?_[_0xd5f9('0x1a')](_0x4402d5['include'],function(_0x54a1b8){return{'model':db[_0x54a1b8[_0xd5f9('0x1b')]],'as':_0x54a1b8['as'],'attributes':_0x54a1b8[_0xd5f9('0x17')],'include':_0x54a1b8[_0xd5f9('0x19')]?_[_0xd5f9('0x1a')](_0x54a1b8[_0xd5f9('0x19')],function(_0x52d120){return{'model':db[_0x52d120[_0xd5f9('0x1b')]],'as':_0x52d120['as'],'attributes':_0x52d120['attributes']};}):[]};}):[]};}):[]:[]})[_0xd5f9('0x9')](function(_0x2e24a2){var _0xc26d35=[];for(var _0x16d61a=0x0;_0x16d61a<_0x2e24a2[_0xd5f9('0x30')];_0x16d61a+=0x1){_0xc26d35['push'](_0x2e24a2[_0x16d61a][_0xd5f9('0x24')](_0x2352f9[_0xd5f9('0x25')],{'transaction':_0x1a592a}));}return BPromise[_0xd5f9('0x3e')](_0xc26d35);});})[_0xd5f9('0x9')](function(_0x336fd5){logger['info']('GetContactRecallMe',_0x2352f9);logger['debug'](_0xd5f9('0x3b'),_0x2352f9,JSON[_0xd5f9('0xe')](_0x336fd5));_0x523d55(_0x336fd5);})[_0xd5f9('0x20')](function(_0x20708e){logger[_0xd5f9('0x10')]('GetContactRecallMe',_0x20708e[_0xd5f9('0x11')],_0x2352f9);_0x16ee8c(_0x3132b2[_0xd5f9('0x10')](0x1f4,_0x20708e['message']));});});});};
\ No newline at end of file
+var _0x1e3e=['map','model','attributes','include','then','ShowCmHopper','find','raw','create','body','CreateCmHopper','UpdateCmHopper','update','DestroyCmHopper','destroy','GetContactDialer','CmContact','sequelize','transaction','order','UPDATE','Contact','keys','length','push','all','MoveContactManagedDialer','CmHopperFinal','CountReScheduled','literal','format','\x22%s\x22','YYYY-MM-DD\x20HH:mm:ss','\x20,\x201,\x20null','GetContactRecallMe','LOCK','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','request\x20sent','debug','CmHopper,\x20%s,\x20%s,\x20%s','stringify','error','code','CmHopper,\x20%s,\x20%s','message','info','result','catch','CmHopper','findAll','options','where','limit'];(function(_0x387b85,_0x15fc08){var _0x3f4335=function(_0x4bb01b){while(--_0x4bb01b){_0x387b85['push'](_0x387b85['shift']());}};_0x3f4335(++_0x15fc08);}(_0x1e3e,0x1a4));var _0xe1e3=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0x1e3e[_0x2641f9];return _0x585741;};'use strict';var _=require('lodash');var util=require(_0xe1e3('0x0'));var moment=require(_0xe1e3('0x1'));var BPromise=require(_0xe1e3('0x2'));var rs=require(_0xe1e3('0x3'));var fs=require('fs');var db=require(_0xe1e3('0x4'))['db'];var utils=require(_0xe1e3('0x5'));var logger=require(_0xe1e3('0x6'))(_0xe1e3('0x7'));var config=require('../../config/environment');var jayson=require(_0xe1e3('0x8'));var client=jayson[_0xe1e3('0x9')][_0xe1e3('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x34803a,_0x1099db,_0xc99b67){return new BPromise(function(_0x1df3c9,_0x286014){return client[_0xe1e3('0xb')](_0x34803a,_0xc99b67)['then'](function(_0x51b832){logger['info']('CmHopper,\x20%s,\x20%s',_0x1099db,_0xe1e3('0xc'));logger[_0xe1e3('0xd')](_0xe1e3('0xe'),_0x1099db,_0xe1e3('0xc'),JSON[_0xe1e3('0xf')](_0x51b832));if(_0x51b832[_0xe1e3('0x10')]){if(_0x51b832[_0xe1e3('0x10')][_0xe1e3('0x11')]===0x1f4){logger[_0xe1e3('0x10')](_0xe1e3('0x12'),_0x1099db,_0x51b832[_0xe1e3('0x10')][_0xe1e3('0x13')]);return _0x286014(_0x51b832[_0xe1e3('0x10')][_0xe1e3('0x13')]);}logger[_0xe1e3('0x10')](_0xe1e3('0x12'),_0x1099db,_0x51b832[_0xe1e3('0x10')][_0xe1e3('0x13')]);return _0x1df3c9(_0x51b832[_0xe1e3('0x10')][_0xe1e3('0x13')]);}else{logger[_0xe1e3('0x14')](_0xe1e3('0x12'),_0x1099db,_0xe1e3('0xc'));_0x1df3c9(_0x51b832[_0xe1e3('0x15')][_0xe1e3('0x13')]);}})[_0xe1e3('0x16')](function(_0x3e3fea){logger['error'](_0xe1e3('0x12'),_0x1099db,_0x3e3fea);_0x286014(_0x3e3fea);});});}exports['GetCmHopper']=function(_0x2be69e){var _0x54caab=this;return new Promise(function(_0x1f238d,_0x428a48){return db[_0xe1e3('0x17')][_0xe1e3('0x18')]({'raw':_0x2be69e[_0xe1e3('0x19')]?_0x2be69e[_0xe1e3('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x2be69e['options']?_0x2be69e['options'][_0xe1e3('0x1a')]||null:null,'attributes':_0x2be69e[_0xe1e3('0x19')]?_0x2be69e['options']['attributes']||null:null,'limit':_0x2be69e[_0xe1e3('0x19')]?_0x2be69e[_0xe1e3('0x19')][_0xe1e3('0x1b')]||null:null,'include':_0x2be69e[_0xe1e3('0x19')]?_0x2be69e['options']['include']?_[_0xe1e3('0x1c')](_0x2be69e['options']['include'],function(_0x24773f){return{'model':db[_0x24773f[_0xe1e3('0x1d')]],'as':_0x24773f['as'],'attributes':_0x24773f[_0xe1e3('0x1e')],'include':_0x24773f['include']?_[_0xe1e3('0x1c')](_0x24773f['include'],function(_0x2e8cc2){return{'model':db[_0x2e8cc2['model']],'as':_0x2e8cc2['as'],'attributes':_0x2e8cc2[_0xe1e3('0x1e')],'include':_0x2e8cc2[_0xe1e3('0x1f')]?_['map'](_0x2e8cc2[_0xe1e3('0x1f')],function(_0x3cab4f){return{'model':db[_0x3cab4f[_0xe1e3('0x1d')]],'as':_0x3cab4f['as'],'attributes':_0x3cab4f[_0xe1e3('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xe1e3('0x20')](function(_0x490f91){logger[_0xe1e3('0x14')]('GetCmHopper',_0x2be69e);logger[_0xe1e3('0xd')]('GetCmHopper',_0x2be69e,JSON[_0xe1e3('0xf')](_0x490f91));_0x1f238d(_0x490f91);})[_0xe1e3('0x16')](function(_0x243b8a){logger['error']('GetCmHopper',_0x243b8a[_0xe1e3('0x13')],_0x2be69e);_0x428a48(_0x54caab[_0xe1e3('0x10')](0x1f4,_0x243b8a[_0xe1e3('0x13')]));});});};exports[_0xe1e3('0x21')]=function(_0x3a3f7a){var _0x509b47=this;return new Promise(function(_0x3320ef,_0x5446c7){return db[_0xe1e3('0x17')][_0xe1e3('0x22')]({'raw':_0x3a3f7a[_0xe1e3('0x19')]?_0x3a3f7a['options'][_0xe1e3('0x23')]===undefined?!![]:![]:!![],'where':_0x3a3f7a[_0xe1e3('0x19')]?_0x3a3f7a[_0xe1e3('0x19')][_0xe1e3('0x1a')]||null:null,'attributes':_0x3a3f7a[_0xe1e3('0x19')]?_0x3a3f7a[_0xe1e3('0x19')][_0xe1e3('0x1e')]||null:null,'include':_0x3a3f7a[_0xe1e3('0x19')]?_0x3a3f7a['options']['include']?_[_0xe1e3('0x1c')](_0x3a3f7a['options'][_0xe1e3('0x1f')],function(_0x57a9bf){return{'model':db[_0x57a9bf[_0xe1e3('0x1d')]],'as':_0x57a9bf['as'],'attributes':_0x57a9bf[_0xe1e3('0x1e')],'include':_0x57a9bf[_0xe1e3('0x1f')]?_[_0xe1e3('0x1c')](_0x57a9bf[_0xe1e3('0x1f')],function(_0xb51cfa){return{'model':db[_0xb51cfa['model']],'as':_0xb51cfa['as'],'attributes':_0xb51cfa[_0xe1e3('0x1e')],'include':_0xb51cfa['include']?_[_0xe1e3('0x1c')](_0xb51cfa[_0xe1e3('0x1f')],function(_0x5d0a36){return{'model':db[_0x5d0a36[_0xe1e3('0x1d')]],'as':_0x5d0a36['as'],'attributes':_0x5d0a36[_0xe1e3('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xe1e3('0x20')](function(_0x54c1ed){logger[_0xe1e3('0x14')](_0xe1e3('0x21'),_0x3a3f7a);logger[_0xe1e3('0xd')](_0xe1e3('0x21'),_0x3a3f7a,JSON[_0xe1e3('0xf')](_0x54c1ed));_0x3320ef(_0x54c1ed);})[_0xe1e3('0x16')](function(_0x32be85){logger[_0xe1e3('0x10')](_0xe1e3('0x21'),_0x32be85[_0xe1e3('0x13')],_0x3a3f7a);_0x5446c7(_0x509b47[_0xe1e3('0x10')](0x1f4,_0x32be85['message']));});});};exports['CreateCmHopper']=function(_0x4bf7c0){var _0x8d920d=this;return new Promise(function(_0xf3bc06,_0x53ef2b){return db[_0xe1e3('0x17')][_0xe1e3('0x24')](_0x4bf7c0[_0xe1e3('0x25')],{'raw':_0x4bf7c0[_0xe1e3('0x19')]?_0x4bf7c0[_0xe1e3('0x19')][_0xe1e3('0x23')]===undefined?!![]:![]:!![]})[_0xe1e3('0x20')](function(_0xfa582d){logger['info'](_0xe1e3('0x26'),_0x4bf7c0);logger['debug'](_0xe1e3('0x26'),_0x4bf7c0,JSON['stringify'](_0xfa582d));_0xf3bc06(_0xfa582d);})['catch'](function(_0x467f84){logger[_0xe1e3('0x10')](_0xe1e3('0x26'),_0x467f84['message'],_0x4bf7c0);_0x53ef2b(_0x8d920d[_0xe1e3('0x10')](0x1f4,_0x467f84[_0xe1e3('0x13')]));});});};exports[_0xe1e3('0x27')]=function(_0x268162){var _0x14e569=this;return new Promise(function(_0x2b21ae,_0x57da6b){return db[_0xe1e3('0x17')][_0xe1e3('0x28')](_0x268162[_0xe1e3('0x25')],{'raw':_0x268162[_0xe1e3('0x19')]?_0x268162[_0xe1e3('0x19')][_0xe1e3('0x23')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x268162[_0xe1e3('0x19')]?_0x268162[_0xe1e3('0x19')][_0xe1e3('0x1a')]||null:null,'attributes':_0x268162[_0xe1e3('0x19')]?_0x268162[_0xe1e3('0x19')][_0xe1e3('0x1e')]||null:null,'limit':_0x268162['options']?_0x268162[_0xe1e3('0x19')][_0xe1e3('0x1b')]||null:null})[_0xe1e3('0x20')](function(_0x4b64bd){logger['info']('UpdateCmHopper',_0x268162);logger[_0xe1e3('0xd')](_0xe1e3('0x27'),_0x268162,JSON[_0xe1e3('0xf')](_0x4b64bd));_0x2b21ae(_0x4b64bd);})[_0xe1e3('0x16')](function(_0x4f44ec){logger['error']('UpdateCmHopper',_0x4f44ec[_0xe1e3('0x13')],_0x268162);_0x57da6b(_0x14e569[_0xe1e3('0x10')](0x1f4,_0x4f44ec[_0xe1e3('0x13')]));});});};exports[_0xe1e3('0x29')]=function(_0x4fc351){var _0x2ee217=this;return new Promise(function(_0x5ce72e,_0x29c19e){return db[_0xe1e3('0x17')][_0xe1e3('0x2a')]({'where':_0x4fc351['options']?_0x4fc351[_0xe1e3('0x19')][_0xe1e3('0x1a')]||null:null})[_0xe1e3('0x20')](function(_0x1a1f5c){logger[_0xe1e3('0x14')](_0xe1e3('0x29'),_0x4fc351);logger[_0xe1e3('0xd')](_0xe1e3('0x29'),_0x4fc351,JSON['stringify'](_0x1a1f5c));_0x5ce72e(_0x1a1f5c);})[_0xe1e3('0x16')](function(_0xdfa47b){logger[_0xe1e3('0x10')](_0xe1e3('0x29'),_0xdfa47b['message'],_0x4fc351);_0x29c19e(_0x2ee217[_0xe1e3('0x10')](0x1f4,_0xdfa47b[_0xe1e3('0x13')]));});});};exports[_0xe1e3('0x2b')]=function(_0x412a71){var _0x28dd68=this;return new Promise(function(_0x72b437,_0x1c7e74){return db[_0xe1e3('0x2c')]['describe']()[_0xe1e3('0x20')](function(_0x13e38c){return db[_0xe1e3('0x2d')][_0xe1e3('0x2e')](function(_0x28a9c7){return db[_0xe1e3('0x17')]['findAll']({'where':_0x412a71[_0xe1e3('0x19')]?_0x412a71['options'][_0xe1e3('0x1a')]||null:null,'attributes':_0x412a71[_0xe1e3('0x19')]?_0x412a71[_0xe1e3('0x19')][_0xe1e3('0x1e')]||null:null,'limit':_0x412a71[_0xe1e3('0x19')]?_0x412a71[_0xe1e3('0x19')][_0xe1e3('0x1b')]||null:null,'order':_0x412a71['options']?_0x412a71[_0xe1e3('0x19')][_0xe1e3('0x2f')]||null:null,'transaction':_0x28a9c7,'lock':_0x28a9c7['LOCK'][_0xe1e3('0x30')],'include':[{'model':db['CmContact'],'as':_0xe1e3('0x31'),'attributes':_[_0xe1e3('0x32')](_0x13e38c)}]})[_0xe1e3('0x20')](function(_0x381198){var _0x157eee=[];for(var _0x39677a=0x0;_0x39677a<_0x381198[_0xe1e3('0x33')];_0x39677a+=0x1){_0x157eee[_0xe1e3('0x34')](_0x381198[_0x39677a]['update'](_0x412a71[_0xe1e3('0x25')],{'transaction':_0x28a9c7}));}return BPromise[_0xe1e3('0x35')](_0x157eee);});})[_0xe1e3('0x20')](function(_0xaac9f8){logger[_0xe1e3('0x14')](_0xe1e3('0x2b'),_0x412a71);logger['debug'](_0xe1e3('0x2b'),_0x412a71,JSON[_0xe1e3('0xf')](_0xaac9f8));_0x72b437(_0xaac9f8);})[_0xe1e3('0x16')](function(_0x4ceb58){logger[_0xe1e3('0x10')](_0xe1e3('0x2b'),_0x4ceb58[_0xe1e3('0x13')],_0x412a71);_0x1c7e74(_0x28dd68[_0xe1e3('0x10')](0x1f4,_0x4ceb58[_0xe1e3('0x13')]));});});});};exports[_0xe1e3('0x36')]=function(_0x4d6df2){var _0x273897=this;return new Promise(function(_0x48e004,_0x13c37f){return db[_0xe1e3('0x2d')][_0xe1e3('0x2e')](function(_0x22f818){return db[_0xe1e3('0x37')][_0xe1e3('0x24')](_0x4d6df2[_0xe1e3('0x25')],{'raw':_0x4d6df2[_0xe1e3('0x19')]?_0x4d6df2[_0xe1e3('0x19')]['raw']===undefined?!![]:![]:!![],'transaction':_0x22f818})['then'](function(){return db[_0xe1e3('0x17')][_0xe1e3('0x2a')]({'where':_0x4d6df2[_0xe1e3('0x19')]?_0x4d6df2['options']['where']||null:null,'transaction':_0x22f818});});})['then'](function(_0x378dda){logger[_0xe1e3('0x14')](_0xe1e3('0x36'),_0x4d6df2);logger['debug'](_0xe1e3('0x36'),_0x4d6df2,JSON[_0xe1e3('0xf')](_0x378dda));_0x48e004(_0x378dda);})['catch'](function(_0x496835){logger['error']('MoveContactManagedDialer',_0x496835[_0xe1e3('0x13')],_0x4d6df2);_0x13c37f(_0x273897['error'](0x1f4,_0x496835[_0xe1e3('0x13')]));});});};exports[_0xe1e3('0x38')]=function(_0x2bddab){var _0x57d366=this;return new Promise(function(_0x350de4,_0x311e4e){return db[_0xe1e3('0x17')]['findAll']({'raw':_0x2bddab[_0xe1e3('0x19')]?_0x2bddab['options'][_0xe1e3('0x23')]===undefined?!![]:![]:!![],'where':_0x2bddab[_0xe1e3('0x19')]?_0x2bddab[_0xe1e3('0x19')][_0xe1e3('0x1a')]||null:null,'attributes':[[db[_0xe1e3('0x2d')]['fn']('COUNT',db[_0xe1e3('0x2d')]['fn']('IF',db[_0xe1e3('0x2d')][_0xe1e3('0x39')]('`scheduledat`\x20>=\x20'+util[_0xe1e3('0x3a')](_0xe1e3('0x3b'),moment()[_0xe1e3('0x3a')](_0xe1e3('0x3c')))+_0xe1e3('0x3d')))),'contactsRescheduled']]})[_0xe1e3('0x20')](function(_0xacb69f){logger[_0xe1e3('0x14')](_0xe1e3('0x38'),_0x2bddab);logger['debug'](_0xe1e3('0x38'),_0x2bddab,JSON[_0xe1e3('0xf')](_0xacb69f));_0x350de4(_0xacb69f);})[_0xe1e3('0x16')](function(_0x38cdf3){logger[_0xe1e3('0x10')](_0xe1e3('0x38'),_0x38cdf3[_0xe1e3('0x13')],_0x2bddab);_0x311e4e(_0x57d366[_0xe1e3('0x10')](0x1f4,_0x38cdf3[_0xe1e3('0x13')]));});});};exports[_0xe1e3('0x3e')]=function(_0x1f0f0f){var _0x541841=this;return new Promise(function(_0xb186c3,_0x51440d){return db['CmContact']['describe']()['then'](function(_0x3f54e3){return db['sequelize']['transaction'](function(_0x17d533){return db[_0xe1e3('0x17')]['findAll']({'where':_0x1f0f0f['options']?_0x1f0f0f[_0xe1e3('0x19')][_0xe1e3('0x1a')]||null:null,'attributes':_0x1f0f0f['options']?_0x1f0f0f[_0xe1e3('0x19')]['attributes']||null:null,'limit':0x1,'order':_0x1f0f0f[_0xe1e3('0x19')]?_0x1f0f0f[_0xe1e3('0x19')][_0xe1e3('0x2f')]||null:null,'group':db[_0xe1e3('0x17')]['UserId'],'transaction':_0x17d533,'lock':_0x17d533[_0xe1e3('0x3f')][_0xe1e3('0x30')],'include':_0x1f0f0f[_0xe1e3('0x19')]?_0x1f0f0f[_0xe1e3('0x19')][_0xe1e3('0x1f')]?_['map'](_0x1f0f0f[_0xe1e3('0x19')][_0xe1e3('0x1f')],function(_0x20e2f6){return{'model':db[_0x20e2f6[_0xe1e3('0x1d')]],'as':_0x20e2f6['as'],'attributes':_0x20e2f6[_0xe1e3('0x1e')],'include':_0x20e2f6['include']?_['map'](_0x20e2f6[_0xe1e3('0x1f')],function(_0x22b299){return{'model':db[_0x22b299['model']],'as':_0x22b299['as'],'attributes':_0x22b299[_0xe1e3('0x1e')],'include':_0x22b299[_0xe1e3('0x1f')]?_[_0xe1e3('0x1c')](_0x22b299[_0xe1e3('0x1f')],function(_0x5c5747){return{'model':db[_0x5c5747[_0xe1e3('0x1d')]],'as':_0x5c5747['as'],'attributes':_0x5c5747[_0xe1e3('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xe1e3('0x20')](function(_0x210b34){var _0x45e084=[];for(var _0x583534=0x0;_0x583534<_0x210b34[_0xe1e3('0x33')];_0x583534+=0x1){_0x45e084['push'](_0x210b34[_0x583534][_0xe1e3('0x28')](_0x1f0f0f[_0xe1e3('0x25')],{'transaction':_0x17d533}));}return BPromise[_0xe1e3('0x35')](_0x45e084);});})['then'](function(_0x160a75){logger['info'](_0xe1e3('0x3e'),_0x1f0f0f);logger[_0xe1e3('0xd')]('GetContactRecallMe',_0x1f0f0f,JSON[_0xe1e3('0xf')](_0x160a75));_0xb186c3(_0x160a75);})['catch'](function(_0x5ba537){logger['error'](_0xe1e3('0x3e'),_0x5ba537[_0xe1e3('0x13')],_0x1f0f0f);_0x51440d(_0x541841[_0xe1e3('0x10')](0x1f4,_0x5ba537[_0xe1e3('0x13')]));});});});};
\ No newline at end of file
index e298f51..276db00 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbaf0=['getPreview','update','delete','destroy','util','path','express','Router','../../components/auth/service','../../components/interaction/service','./cmHopper.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','/preview'];(function(_0xe89f7e,_0x51b210){var _0x4c714b=function(_0xe41bfd){while(--_0xe41bfd){_0xe89f7e['push'](_0xe89f7e['shift']());}};_0x4c714b(++_0x51b210);}(_0xbaf0,0x12a));var _0x0baf=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0xbaf0[_0x6c993a];return _0x27f547;};'use strict';var multer=require('multer');var util=require(_0x0baf('0x0'));var path=require(_0x0baf('0x1'));var express=require(_0x0baf('0x2'));var router=express[_0x0baf('0x3')]();var auth=require(_0x0baf('0x4'));var interaction=require(_0x0baf('0x5'));var config=require('../../config/environment');var controller=require(_0x0baf('0x6'));router[_0x0baf('0x7')]('/',auth[_0x0baf('0x8')](),controller[_0x0baf('0x9')]);router[_0x0baf('0x7')](_0x0baf('0xa'),auth[_0x0baf('0x8')](),controller[_0x0baf('0xb')]);router[_0x0baf('0x7')]('/opencontacts',auth[_0x0baf('0x8')](),controller['getOpenContacts']);router[_0x0baf('0x7')](_0x0baf('0xc'),auth[_0x0baf('0x8')](),controller[_0x0baf('0xd')]);router[_0x0baf('0xe')]('/',auth[_0x0baf('0x8')](),controller[_0x0baf('0xf')]);router[_0x0baf('0xe')](_0x0baf('0x10'),auth[_0x0baf('0x8')](),controller[_0x0baf('0x11')]);router['put']('/:id',auth[_0x0baf('0x8')](),controller[_0x0baf('0x12')]);router[_0x0baf('0x13')](_0x0baf('0xc'),auth['isAuthenticated'](),controller[_0x0baf('0x14')]);module['exports']=router;
\ No newline at end of file
+var _0x757a=['../../components/interaction/service','../../config/environment','./cmHopper.controller','get','isAuthenticated','index','/describe','/opencontacts','getOpenContacts','show','post','create','/preview','update','util','path'];(function(_0x5c110f,_0x3c4bd8){var _0x5ebfc5=function(_0x2549df){while(--_0x2549df){_0x5c110f['push'](_0x5c110f['shift']());}};_0x5ebfc5(++_0x3c4bd8);}(_0x757a,0xde));var _0xa757=function(_0x83bb99,_0x39b7c1){_0x83bb99=_0x83bb99-0x0;var _0x1da978=_0x757a[_0x83bb99];return _0x1da978;};'use strict';var multer=require('multer');var util=require(_0xa757('0x0'));var path=require(_0xa757('0x1'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xa757('0x2'));var config=require(_0xa757('0x3'));var controller=require(_0xa757('0x4'));router[_0xa757('0x5')]('/',auth[_0xa757('0x6')](),controller[_0xa757('0x7')]);router['get'](_0xa757('0x8'),auth[_0xa757('0x6')](),controller['describe']);router[_0xa757('0x5')](_0xa757('0x9'),auth[_0xa757('0x6')](),controller[_0xa757('0xa')]);router[_0xa757('0x5')]('/:id',auth[_0xa757('0x6')](),controller[_0xa757('0xb')]);router[_0xa757('0xc')]('/',auth[_0xa757('0x6')](),controller[_0xa757('0xd')]);router[_0xa757('0xc')](_0xa757('0xe'),auth['isAuthenticated'](),controller['getPreview']);router['put']('/:id',auth['isAuthenticated'](),controller[_0xa757('0xf')]);router['delete']('/:id',auth[_0xa757('0x6')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 9931c0c..857713a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x95b8=['STRING','contactListQueue','INTEGER','exports'];(function(_0x442f02,_0x47d845){var _0xab6ef1=function(_0x4cad5c){while(--_0x4cad5c){_0x442f02['push'](_0x442f02['shift']());}};_0xab6ef1(++_0x47d845);}(_0x95b8,0xc3));var _0x895b=function(_0x3df87a,_0x20e4f2){_0x3df87a=_0x3df87a-0x0;var _0x58370f=_0x95b8[_0x3df87a];return _0x58370f;};'use strict';var moment=require('moment');var Sequelize=require('sequelize');module[_0x895b('0x0')]={'phone':{'type':Sequelize[_0x895b('0x1')],'allowNull':![]},'ContactId':{'type':Sequelize['INTEGER'],'unique':_0x895b('0x2')},'ListId':{'type':Sequelize[_0x895b('0x3')],'unique':_0x895b('0x2')},'VoiceQueueId':{'type':Sequelize[_0x895b('0x3')],'unique':_0x895b('0x2')}};
\ No newline at end of file
+var _0xecb1=['sequelize','STRING','INTEGER','contactListQueue','moment'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0xecb1,0x176));var _0x1ecb=function(_0x1fdf61,_0x19a7c4){_0x1fdf61=_0x1fdf61-0x0;var _0x515bb4=_0xecb1[_0x1fdf61];return _0x515bb4;};'use strict';var moment=require(_0x1ecb('0x0'));var Sequelize=require(_0x1ecb('0x1'));module['exports']={'phone':{'type':Sequelize[_0x1ecb('0x2')],'allowNull':![]},'ContactId':{'type':Sequelize[_0x1ecb('0x3')],'unique':'contactListQueue'},'ListId':{'type':Sequelize[_0x1ecb('0x3')],'unique':_0x1ecb('0x4')},'VoiceQueueId':{'type':Sequelize[_0x1ecb('0x3')],'unique':'contactListQueue'}};
\ No newline at end of file
index f972c14..e7a7cb0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee9b=['lodash','squel','crypto','jsforce','desk.js','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','error','name','index','CmHopperBlack','rawAttributes','model','dateStart','query','dateEnd','intersection','attributes','length','hasOwnProperty','order','sort','where','filters','pick','add','merge','filter','map','options','includeAll','include','findAll','rows','catch','show','params','fields','body','find','destroy','describe','fast-json-patch','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);}(_0xee9b,0x1d9));var _0xbee9=function(_0x4830fa,_0xdc942f){_0x4830fa=_0x4830fa-0x0;var _0x1b1e7a=_0xee9b[_0x4830fa];return _0x1b1e7a;};'use strict';var jsonpatch=require(_0xbee9('0x0'));var rp=require(_0xbee9('0x1'));var moment=require(_0xbee9('0x2'));var BPromise=require(_0xbee9('0x3'));var Mustache=require(_0xbee9('0x4'));var util=require(_0xbee9('0x5'));var path=require(_0xbee9('0x6'));var sox=require(_0xbee9('0x7'));var csv=require(_0xbee9('0x8'));var ejs=require(_0xbee9('0x9'));var fs=require('fs');var _=require(_0xbee9('0xa'));var squel=require(_0xbee9('0xb'));var crypto=require(_0xbee9('0xc'));var jsforce=require(_0xbee9('0xd'));var deskjs=require(_0xbee9('0xe'));var toCsv=require(_0xbee9('0x8'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0xbee9('0xf'));var logger=require(_0xbee9('0x10'))(_0xbee9('0x11'));var utils=require(_0xbee9('0x12'));var config=require(_0xbee9('0x13'));var db=require(_0xbee9('0x14'))['db'];function respondWithStatusCode(_0x548270,_0x2aa316){_0x2aa316=_0x2aa316||0xcc;return function(_0x27ca76){if(_0x27ca76){return _0x548270[_0xbee9('0x15')](_0x2aa316);}return _0x548270[_0xbee9('0x16')](_0x2aa316)[_0xbee9('0x17')]();};}function respondWithResult(_0x274e06,_0x376e6b){_0x376e6b=_0x376e6b||0xc8;return function(_0x11757e){if(_0x11757e){return _0x274e06[_0xbee9('0x16')](_0x376e6b)[_0xbee9('0x18')](_0x11757e);}};}function respondWithFilteredResult(_0x2ec931,_0x127dbb){return function(_0x365e1b){if(_0x365e1b){var _0x38b397=_0x365e1b[_0xbee9('0x19')],_0x9d33e2=_0x127dbb[_0xbee9('0x1a')],_0x77f66c=_0x127dbb[_0xbee9('0x1a')]+_0x127dbb[_0xbee9('0x1b')],_0x43ec79;if(_0x77f66c>=_0x38b397){_0x77f66c=_0x38b397;_0x43ec79=0xc8;}else{_0x43ec79=0xce;}_0x2ec931[_0xbee9('0x16')](_0x43ec79);return _0x2ec931[_0xbee9('0x1c')](_0xbee9('0x1d'),_0x9d33e2+'-'+_0x77f66c+'/'+_0x38b397)[_0xbee9('0x18')](_0x365e1b);}return null;};}function patchUpdates(_0x498787){return function(_0x104eff){try{jsonpatch['apply'](_0x104eff,_0x498787,!![]);}catch(_0x57bdcd){return BPromise[_0xbee9('0x1e')](_0x57bdcd);}return _0x104eff[_0xbee9('0x1f')]();};}function saveUpdates(_0x121693,_0x4adbad){return function(_0x4b0b24){if(_0x4b0b24){return _0x4b0b24[_0xbee9('0x20')](_0x121693)[_0xbee9('0x21')](function(_0x4b4494){return _0x4b4494;});}return null;};}function removeEntity(_0x23aaae,_0x10bb6b){return function(_0x26e661){if(_0x26e661){return _0x26e661['destroy']()['then'](function(){_0x23aaae[_0xbee9('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x16bc23,_0x45889e){return function(_0x55afa7){if(!_0x55afa7){_0x16bc23['sendStatus'](0x194);}return _0x55afa7;};}function handleError(_0x15bca5,_0x3642c9){_0x3642c9=_0x3642c9||0x1f4;return function(_0x1daf42){logger[_0xbee9('0x22')](_0x1daf42['stack']);if(_0x1daf42[_0xbee9('0x23')]){delete _0x1daf42[_0xbee9('0x23')];}_0x15bca5[_0xbee9('0x16')](_0x3642c9)['send'](_0x1daf42);};}exports[_0xbee9('0x24')]=function(_0x55eecc,_0x195a49){var _0x3c32c4={},_0x19ef2f={},_0x1f6662={'count':0x0,'rows':[]};var _0x51ad5f=db[_0xbee9('0x25')][_0xbee9('0x26')];_0x19ef2f[_0xbee9('0x27')]=_['keys'](_0x51ad5f);var _0x840566={'dateStart':_0x55eecc['query'][_0xbee9('0x28')],'dateEnd':_0x55eecc[_0xbee9('0x29')][_0xbee9('0x2a')]};delete _0x55eecc[_0xbee9('0x29')][_0xbee9('0x28')];delete _0x55eecc[_0xbee9('0x29')]['dateEnd'];_0x19ef2f['query']=_['keys'](_0x55eecc['query']);_0x19ef2f['filters']=_[_0xbee9('0x2b')](_0x19ef2f['model'],_0x19ef2f[_0xbee9('0x29')]);_0x3c32c4[_0xbee9('0x2c')]=_['intersection'](_0x19ef2f[_0xbee9('0x27')],qs['fields'](_0x55eecc[_0xbee9('0x29')]['fields']));_0x3c32c4[_0xbee9('0x2c')]=_0x3c32c4[_0xbee9('0x2c')][_0xbee9('0x2d')]?_0x3c32c4[_0xbee9('0x2c')]:_0x19ef2f[_0xbee9('0x27')];if(!_0x55eecc[_0xbee9('0x29')][_0xbee9('0x2e')]('nolimit')){_0x3c32c4['limit']=qs[_0xbee9('0x1b')](_0x55eecc['query']['limit']);_0x3c32c4['offset']=qs[_0xbee9('0x1a')](_0x55eecc[_0xbee9('0x29')][_0xbee9('0x1a')]);}_0x3c32c4[_0xbee9('0x2f')]=qs['sort'](_0x55eecc[_0xbee9('0x29')][_0xbee9('0x30')]);_0x3c32c4[_0xbee9('0x31')]=qs[_0xbee9('0x32')](_[_0xbee9('0x33')](_0x55eecc['query'],_0x19ef2f['filters']));if(_0x840566[_0xbee9('0x28')]){if(_0x840566[_0xbee9('0x2a')]){_0x840566[_0xbee9('0x2a')]=moment(_0x840566[_0xbee9('0x2a')])[_0xbee9('0x34')](0x1,'day');}else{_0x840566[_0xbee9('0x2a')]=moment(_0x840566[_0xbee9('0x28')])['add'](0x1,'day');}_[_0xbee9('0x35')](_0x3c32c4['where'],{'createdAt':{'$gte':_0x840566['dateStart'],'$lte':_0x840566[_0xbee9('0x2a')]}});}if(_0x55eecc['query'][_0xbee9('0x36')]){_0x3c32c4['where']=_['merge'](_0x3c32c4[_0xbee9('0x31')],{'$or':_[_0xbee9('0x37')](_0x3c32c4[_0xbee9('0x2c')],function(_0x4dfd42){var _0x2d7ade={};_0x2d7ade[_0x4dfd42]={'$like':'%'+_0x55eecc[_0xbee9('0x29')][_0xbee9('0x36')]+'%'};return _0x2d7ade;})});}_0x3c32c4=_['merge']({},_0x3c32c4,_0x55eecc[_0xbee9('0x38')]);var _0x1b6247={'where':_0x3c32c4[_0xbee9('0x31')]};return db[_0xbee9('0x25')]['count'](_0x1b6247)['then'](function(_0x4c050d){_0x1f6662[_0xbee9('0x19')]=_0x4c050d;if(_0x55eecc['query'][_0xbee9('0x39')]){_0x3c32c4[_0xbee9('0x3a')]=[{'all':!![]}];}return db[_0xbee9('0x25')][_0xbee9('0x3b')](_0x3c32c4);})['then'](function(_0x1b13d9){_0x1f6662[_0xbee9('0x3c')]=_0x1b13d9;return _0x1f6662;})[_0xbee9('0x21')](respondWithFilteredResult(_0x195a49,_0x3c32c4))[_0xbee9('0x3d')](handleError(_0x195a49,null));};exports[_0xbee9('0x3e')]=function(_0x48b4fb,_0x5e3287){var _0x6a4cd0={'raw':!![],'where':{'id':_0x48b4fb[_0xbee9('0x3f')]['id']}},_0x31f6bd={};_0x31f6bd[_0xbee9('0x27')]=_['keys'](db[_0xbee9('0x25')][_0xbee9('0x26')]);_0x31f6bd[_0xbee9('0x29')]=_['keys'](_0x48b4fb[_0xbee9('0x29')]);_0x31f6bd[_0xbee9('0x32')]=_[_0xbee9('0x2b')](_0x31f6bd[_0xbee9('0x27')],_0x31f6bd[_0xbee9('0x29')]);_0x6a4cd0['attributes']=_[_0xbee9('0x2b')](_0x31f6bd[_0xbee9('0x27')],qs['fields'](_0x48b4fb['query'][_0xbee9('0x40')]));_0x6a4cd0['attributes']=_0x6a4cd0['attributes'][_0xbee9('0x2d')]?_0x6a4cd0['attributes']:_0x31f6bd['model'];if(_0x48b4fb[_0xbee9('0x29')][_0xbee9('0x39')]){_0x6a4cd0['include']=[{'all':!![]}];}_0x6a4cd0=_[_0xbee9('0x35')]({},_0x6a4cd0,_0x48b4fb[_0xbee9('0x38')]);return db[_0xbee9('0x25')]['find'](_0x6a4cd0)['then'](handleEntityNotFound(_0x5e3287,null))[_0xbee9('0x21')](respondWithResult(_0x5e3287,null))[_0xbee9('0x3d')](handleError(_0x5e3287,null));};exports['update']=function(_0x10f391,_0x2bce3c){if(_0x10f391[_0xbee9('0x41')]['id']){delete _0x10f391[_0xbee9('0x41')]['id'];}return db[_0xbee9('0x25')][_0xbee9('0x42')]({'where':{'id':_0x10f391[_0xbee9('0x3f')]['id']}})[_0xbee9('0x21')](handleEntityNotFound(_0x2bce3c,null))[_0xbee9('0x21')](saveUpdates(_0x10f391[_0xbee9('0x41')],null))[_0xbee9('0x21')](respondWithResult(_0x2bce3c,null))[_0xbee9('0x3d')](handleError(_0x2bce3c,null));};exports[_0xbee9('0x43')]=function(_0x5e63af,_0x3c5687){return db[_0xbee9('0x25')][_0xbee9('0x42')]({'where':{'id':_0x5e63af[_0xbee9('0x3f')]['id']}})[_0xbee9('0x21')](handleEntityNotFound(_0x3c5687,null))[_0xbee9('0x21')](removeEntity(_0x3c5687,null))[_0xbee9('0x3d')](handleError(_0x3c5687,null));};exports[_0xbee9('0x44')]=function(_0x3dbbaf,_0x1fd032){return db['CmHopperBlack'][_0xbee9('0x44')]()[_0xbee9('0x21')](respondWithResult(_0x1fd032,null))[_0xbee9('0x3d')](handleError(_0x1fd032,null));};
\ No newline at end of file
+var _0xb33b=['ejs','lodash','squel','crypto','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','offset','limit','Content-Range','json','apply','save','update','destroy','then','error','stack','name','send','index','CmHopperBlack','rawAttributes','model','keys','dateStart','dateEnd','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','pick','add','day','merge','filter','where','map','count','includeAll','include','rows','catch','show','options','find','body','params','describe','request-promise','moment','path','sox','to-csv'];(function(_0x3f1351,_0x257e9b){var _0x36aedc=function(_0x964155){while(--_0x964155){_0x3f1351['push'](_0x3f1351['shift']());}};_0x36aedc(++_0x257e9b);}(_0xb33b,0x1d0));var _0xbb33=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xb33b[_0x3dd15e];return _0x231fd0;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xbb33('0x0'));var moment=require(_0xbb33('0x1'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0xbb33('0x2'));var sox=require(_0xbb33('0x3'));var csv=require(_0xbb33('0x4'));var ejs=require(_0xbb33('0x5'));var fs=require('fs');var _=require(_0xbb33('0x6'));var squel=require(_0xbb33('0x7'));var crypto=require(_0xbb33('0x8'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xbb33('0x4'));var querystring=require(_0xbb33('0x9'));var Papa=require(_0xbb33('0xa'));var qs=require(_0xbb33('0xb'));var logger=require(_0xbb33('0xc'))(_0xbb33('0xd'));var utils=require(_0xbb33('0xe'));var config=require(_0xbb33('0xf'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x416eb9,_0x26730e){_0x26730e=_0x26730e||0xcc;return function(_0x1c34e7){if(_0x1c34e7){return _0x416eb9[_0xbb33('0x10')](_0x26730e);}return _0x416eb9[_0xbb33('0x11')](_0x26730e)[_0xbb33('0x12')]();};}function respondWithResult(_0xf17ab0,_0x48eeaa){_0x48eeaa=_0x48eeaa||0xc8;return function(_0xc5092a){if(_0xc5092a){return _0xf17ab0[_0xbb33('0x11')](_0x48eeaa)['json'](_0xc5092a);}};}function respondWithFilteredResult(_0x17ca00,_0x194492){return function(_0x2dd986){if(_0x2dd986){var _0x8585b5=_0x2dd986['count'],_0x13b25e=_0x194492[_0xbb33('0x13')],_0x25934d=_0x194492['offset']+_0x194492[_0xbb33('0x14')],_0x1feb78;if(_0x25934d>=_0x8585b5){_0x25934d=_0x8585b5;_0x1feb78=0xc8;}else{_0x1feb78=0xce;}_0x17ca00[_0xbb33('0x11')](_0x1feb78);return _0x17ca00['set'](_0xbb33('0x15'),_0x13b25e+'-'+_0x25934d+'/'+_0x8585b5)[_0xbb33('0x16')](_0x2dd986);}return null;};}function patchUpdates(_0x1f88f7){return function(_0x442f5f){try{jsonpatch[_0xbb33('0x17')](_0x442f5f,_0x1f88f7,!![]);}catch(_0x2f4166){return BPromise['reject'](_0x2f4166);}return _0x442f5f[_0xbb33('0x18')]();};}function saveUpdates(_0x299521,_0x326a11){return function(_0x1637c3){if(_0x1637c3){return _0x1637c3[_0xbb33('0x19')](_0x299521)['then'](function(_0x3756f1){return _0x3756f1;});}return null;};}function removeEntity(_0x4b4339,_0x279110){return function(_0x4ad44c){if(_0x4ad44c){return _0x4ad44c[_0xbb33('0x1a')]()[_0xbb33('0x1b')](function(){_0x4b4339[_0xbb33('0x11')](0xcc)[_0xbb33('0x12')]();});}};}function handleEntityNotFound(_0x93ab0b,_0xfb972d){return function(_0x2aa5ee){if(!_0x2aa5ee){_0x93ab0b[_0xbb33('0x10')](0x194);}return _0x2aa5ee;};}function handleError(_0x193ecc,_0x2ca0c3){_0x2ca0c3=_0x2ca0c3||0x1f4;return function(_0x466f29){logger[_0xbb33('0x1c')](_0x466f29[_0xbb33('0x1d')]);if(_0x466f29[_0xbb33('0x1e')]){delete _0x466f29[_0xbb33('0x1e')];}_0x193ecc['status'](_0x2ca0c3)[_0xbb33('0x1f')](_0x466f29);};}exports[_0xbb33('0x20')]=function(_0xcb04b7,_0x2dff1b){var _0x5af038={},_0xabcefa={},_0x31ef2c={'count':0x0,'rows':[]};var _0x2b75fd=db[_0xbb33('0x21')][_0xbb33('0x22')];_0xabcefa[_0xbb33('0x23')]=_[_0xbb33('0x24')](_0x2b75fd);var _0xe7a95b={'dateStart':_0xcb04b7['query'][_0xbb33('0x25')],'dateEnd':_0xcb04b7['query'][_0xbb33('0x26')]};delete _0xcb04b7[_0xbb33('0x27')][_0xbb33('0x25')];delete _0xcb04b7[_0xbb33('0x27')][_0xbb33('0x26')];_0xabcefa[_0xbb33('0x27')]=_[_0xbb33('0x24')](_0xcb04b7['query']);_0xabcefa[_0xbb33('0x28')]=_[_0xbb33('0x29')](_0xabcefa[_0xbb33('0x23')],_0xabcefa[_0xbb33('0x27')]);_0x5af038['attributes']=_['intersection'](_0xabcefa[_0xbb33('0x23')],qs['fields'](_0xcb04b7[_0xbb33('0x27')][_0xbb33('0x2a')]));_0x5af038[_0xbb33('0x2b')]=_0x5af038['attributes'][_0xbb33('0x2c')]?_0x5af038[_0xbb33('0x2b')]:_0xabcefa[_0xbb33('0x23')];if(!_0xcb04b7[_0xbb33('0x27')][_0xbb33('0x2d')](_0xbb33('0x2e'))){_0x5af038[_0xbb33('0x14')]=qs['limit'](_0xcb04b7[_0xbb33('0x27')][_0xbb33('0x14')]);_0x5af038[_0xbb33('0x13')]=qs[_0xbb33('0x13')](_0xcb04b7[_0xbb33('0x27')][_0xbb33('0x13')]);}_0x5af038[_0xbb33('0x2f')]=qs[_0xbb33('0x30')](_0xcb04b7[_0xbb33('0x27')][_0xbb33('0x30')]);_0x5af038['where']=qs[_0xbb33('0x28')](_[_0xbb33('0x31')](_0xcb04b7[_0xbb33('0x27')],_0xabcefa[_0xbb33('0x28')]));if(_0xe7a95b['dateStart']){if(_0xe7a95b[_0xbb33('0x26')]){_0xe7a95b[_0xbb33('0x26')]=moment(_0xe7a95b[_0xbb33('0x26')])[_0xbb33('0x32')](0x1,'day');}else{_0xe7a95b[_0xbb33('0x26')]=moment(_0xe7a95b['dateStart'])[_0xbb33('0x32')](0x1,_0xbb33('0x33'));}_[_0xbb33('0x34')](_0x5af038['where'],{'createdAt':{'$gte':_0xe7a95b[_0xbb33('0x25')],'$lte':_0xe7a95b[_0xbb33('0x26')]}});}if(_0xcb04b7[_0xbb33('0x27')][_0xbb33('0x35')]){_0x5af038['where']=_['merge'](_0x5af038[_0xbb33('0x36')],{'$or':_[_0xbb33('0x37')](_0x5af038[_0xbb33('0x2b')],function(_0xbbfeb6){var _0x50c229={};_0x50c229[_0xbbfeb6]={'$like':'%'+_0xcb04b7[_0xbb33('0x27')][_0xbb33('0x35')]+'%'};return _0x50c229;})});}_0x5af038=_[_0xbb33('0x34')]({},_0x5af038,_0xcb04b7['options']);var _0x16011d={'where':_0x5af038[_0xbb33('0x36')]};return db[_0xbb33('0x21')][_0xbb33('0x38')](_0x16011d)['then'](function(_0x46bb7a){_0x31ef2c[_0xbb33('0x38')]=_0x46bb7a;if(_0xcb04b7[_0xbb33('0x27')][_0xbb33('0x39')]){_0x5af038[_0xbb33('0x3a')]=[{'all':!![]}];}return db['CmHopperBlack']['findAll'](_0x5af038);})['then'](function(_0x1e945d){_0x31ef2c[_0xbb33('0x3b')]=_0x1e945d;return _0x31ef2c;})['then'](respondWithFilteredResult(_0x2dff1b,_0x5af038))[_0xbb33('0x3c')](handleError(_0x2dff1b,null));};exports[_0xbb33('0x3d')]=function(_0x110564,_0x1a2c61){var _0x3cbfdd={'raw':!![],'where':{'id':_0x110564['params']['id']}},_0xe2a849={};_0xe2a849[_0xbb33('0x23')]=_[_0xbb33('0x24')](db[_0xbb33('0x21')]['rawAttributes']);_0xe2a849['query']=_[_0xbb33('0x24')](_0x110564['query']);_0xe2a849[_0xbb33('0x28')]=_[_0xbb33('0x29')](_0xe2a849[_0xbb33('0x23')],_0xe2a849[_0xbb33('0x27')]);_0x3cbfdd[_0xbb33('0x2b')]=_[_0xbb33('0x29')](_0xe2a849['model'],qs[_0xbb33('0x2a')](_0x110564[_0xbb33('0x27')][_0xbb33('0x2a')]));_0x3cbfdd['attributes']=_0x3cbfdd[_0xbb33('0x2b')][_0xbb33('0x2c')]?_0x3cbfdd[_0xbb33('0x2b')]:_0xe2a849['model'];if(_0x110564[_0xbb33('0x27')]['includeAll']){_0x3cbfdd[_0xbb33('0x3a')]=[{'all':!![]}];}_0x3cbfdd=_['merge']({},_0x3cbfdd,_0x110564[_0xbb33('0x3e')]);return db['CmHopperBlack'][_0xbb33('0x3f')](_0x3cbfdd)[_0xbb33('0x1b')](handleEntityNotFound(_0x1a2c61,null))[_0xbb33('0x1b')](respondWithResult(_0x1a2c61,null))['catch'](handleError(_0x1a2c61,null));};exports[_0xbb33('0x19')]=function(_0x3f631c,_0x75fc9f){if(_0x3f631c[_0xbb33('0x40')]['id']){delete _0x3f631c[_0xbb33('0x40')]['id'];}return db[_0xbb33('0x21')]['find']({'where':{'id':_0x3f631c[_0xbb33('0x41')]['id']}})[_0xbb33('0x1b')](handleEntityNotFound(_0x75fc9f,null))[_0xbb33('0x1b')](saveUpdates(_0x3f631c[_0xbb33('0x40')],null))[_0xbb33('0x1b')](respondWithResult(_0x75fc9f,null))[_0xbb33('0x3c')](handleError(_0x75fc9f,null));};exports['destroy']=function(_0x44e7e8,_0x655f4){return db['CmHopperBlack'][_0xbb33('0x3f')]({'where':{'id':_0x44e7e8[_0xbb33('0x41')]['id']}})['then'](handleEntityNotFound(_0x655f4,null))[_0xbb33('0x1b')](removeEntity(_0x655f4,null))[_0xbb33('0x3c')](handleError(_0x655f4,null));};exports[_0xbb33('0x42')]=function(_0x572e94,_0x111563){return db[_0xbb33('0x21')][_0xbb33('0x42')]()[_0xbb33('0x1b')](respondWithResult(_0x111563,null))['catch'](handleError(_0x111563,null));};
\ No newline at end of file
index b952022..7f3cf34 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6fe4=['util','../../config/logger','api','bluebird','request-promise','exports','define','CmHopperBlack','cm_hopper_black'];(function(_0x3adb8e,_0x247ca2){var _0x3eacdb=function(_0x127ddf){while(--_0x127ddf){_0x3adb8e['push'](_0x3adb8e['shift']());}};_0x3eacdb(++_0x247ca2);}(_0x6fe4,0x144));var _0x46fe=function(_0x428987,_0x1f1d47){_0x428987=_0x428987-0x0;var _0x5d0f4c=_0x6fe4[_0x428987];return _0x5d0f4c;};'use strict';var _=require('lodash');var util=require(_0x46fe('0x0'));var logger=require(_0x46fe('0x1'))(_0x46fe('0x2'));var moment=require('moment');var BPromise=require(_0x46fe('0x3'));var rp=require(_0x46fe('0x4'));var attributes=require('./cmHopperBlack.attributes');module[_0x46fe('0x5')]=function(_0x574e91,_0x3c3833){return _0x574e91[_0x46fe('0x6')](_0x46fe('0x7'),attributes,{'tableName':_0x46fe('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x19cf=['bluebird','./cmHopperBlack.attributes','exports','CmHopperBlack','lodash','util','../../config/logger','api','moment'];(function(_0x4d07cc,_0x587613){var _0x42de3b=function(_0x201f78){while(--_0x201f78){_0x4d07cc['push'](_0x4d07cc['shift']());}};_0x42de3b(++_0x587613);}(_0x19cf,0x1b4));var _0xf19c=function(_0x854943,_0x2d4b3f){_0x854943=_0x854943-0x0;var _0x451256=_0x19cf[_0x854943];return _0x451256;};'use strict';var _=require(_0xf19c('0x0'));var util=require(_0xf19c('0x1'));var logger=require(_0xf19c('0x2'))(_0xf19c('0x3'));var moment=require(_0xf19c('0x4'));var BPromise=require(_0xf19c('0x5'));var rp=require('request-promise');var attributes=require(_0xf19c('0x6'));module[_0xf19c('0x7')]=function(_0x45583b,_0x3da6d8){return _0x45583b['define'](_0xf19c('0x8'),attributes,{'tableName':'cm_hopper_black','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 274d8ee..77a37f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e1f=['bluebird','randomstring','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','CmHopperBlack,\x20%s,\x20%s','debug','CmHopperBlack,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','info','result','GetCmHopperBlack','CmHopperBlack','findAll','options','raw','include','map','model','attributes','then','catch','UpdateCmHopperBlack','update','body','where','limit','DestroyCmHopperBlack','destroy','lodash'];(function(_0x329989,_0x1b3c40){var _0x383e6a=function(_0xf33e41){while(--_0xf33e41){_0x329989['push'](_0x329989['shift']());}};_0x383e6a(++_0x1b3c40);}(_0x3e1f,0xdd));var _0xf3e1=function(_0xa8d7ef,_0x4b8b3d){_0xa8d7ef=_0xa8d7ef-0x0;var _0x239d5e=_0x3e1f[_0xa8d7ef];return _0x239d5e;};'use strict';var _=require(_0xf3e1('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xf3e1('0x1'));var rs=require(_0xf3e1('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xf3e1('0x3'));var logger=require(_0xf3e1('0x4'))('rpc');var config=require(_0xf3e1('0x5'));var jayson=require(_0xf3e1('0x6'));var client=jayson[_0xf3e1('0x7')][_0xf3e1('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x38e2c8,_0xa41ceb,_0x368f0f){return new BPromise(function(_0x3b03c0,_0x17b845){return client[_0xf3e1('0x9')](_0x38e2c8,_0x368f0f)['then'](function(_0x49e12d){logger['info'](_0xf3e1('0xa'),_0xa41ceb,'request\x20sent');logger[_0xf3e1('0xb')](_0xf3e1('0xc'),_0xa41ceb,_0xf3e1('0xd'),JSON[_0xf3e1('0xe')](_0x49e12d));if(_0x49e12d['error']){if(_0x49e12d['error']['code']===0x1f4){logger[_0xf3e1('0xf')](_0xf3e1('0xa'),_0xa41ceb,_0x49e12d['error'][_0xf3e1('0x10')]);return _0x17b845(_0x49e12d[_0xf3e1('0xf')]['message']);}logger['error'](_0xf3e1('0xa'),_0xa41ceb,_0x49e12d[_0xf3e1('0xf')]['message']);return _0x3b03c0(_0x49e12d[_0xf3e1('0xf')]['message']);}else{logger[_0xf3e1('0x11')](_0xf3e1('0xa'),_0xa41ceb,_0xf3e1('0xd'));_0x3b03c0(_0x49e12d[_0xf3e1('0x12')][_0xf3e1('0x10')]);}})['catch'](function(_0x2cda2f){logger[_0xf3e1('0xf')](_0xf3e1('0xa'),_0xa41ceb,_0x2cda2f);_0x17b845(_0x2cda2f);});});}exports[_0xf3e1('0x13')]=function(_0x4d4934){var _0x5cb829=this;return new Promise(function(_0x58ad0e,_0x61672b){return db[_0xf3e1('0x14')][_0xf3e1('0x15')]({'raw':_0x4d4934[_0xf3e1('0x16')]?_0x4d4934[_0xf3e1('0x16')][_0xf3e1('0x17')]===undefined?!![]:![]:!![],'where':_0x4d4934[_0xf3e1('0x16')]?_0x4d4934[_0xf3e1('0x16')]['where']||null:null,'attributes':_0x4d4934[_0xf3e1('0x16')]?_0x4d4934[_0xf3e1('0x16')]['attributes']||null:null,'limit':_0x4d4934[_0xf3e1('0x16')]?_0x4d4934[_0xf3e1('0x16')]['limit']||null:null,'include':_0x4d4934[_0xf3e1('0x16')]?_0x4d4934['options'][_0xf3e1('0x18')]?_[_0xf3e1('0x19')](_0x4d4934[_0xf3e1('0x16')][_0xf3e1('0x18')],function(_0x40180f){return{'model':db[_0x40180f['model']],'as':_0x40180f['as'],'attributes':_0x40180f['attributes'],'include':_0x40180f[_0xf3e1('0x18')]?_['map'](_0x40180f[_0xf3e1('0x18')],function(_0x462357){return{'model':db[_0x462357['model']],'as':_0x462357['as'],'attributes':_0x462357['attributes'],'include':_0x462357['include']?_[_0xf3e1('0x19')](_0x462357[_0xf3e1('0x18')],function(_0x28f8ea){return{'model':db[_0x28f8ea[_0xf3e1('0x1a')]],'as':_0x28f8ea['as'],'attributes':_0x28f8ea[_0xf3e1('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xf3e1('0x1c')](function(_0x29e908){logger[_0xf3e1('0x11')](_0xf3e1('0x13'),_0x4d4934);logger['debug'](_0xf3e1('0x13'),_0x4d4934,JSON[_0xf3e1('0xe')](_0x29e908));_0x58ad0e(_0x29e908);})[_0xf3e1('0x1d')](function(_0x3b0fe2){logger[_0xf3e1('0xf')](_0xf3e1('0x13'),_0x3b0fe2['message'],_0x4d4934);_0x61672b(_0x5cb829[_0xf3e1('0xf')](0x1f4,_0x3b0fe2[_0xf3e1('0x10')]));});});};exports[_0xf3e1('0x1e')]=function(_0x465306){var _0x200c25=this;return new Promise(function(_0x4482fd,_0x4a4764){return db[_0xf3e1('0x14')][_0xf3e1('0x1f')](_0x465306[_0xf3e1('0x20')],{'raw':_0x465306[_0xf3e1('0x16')]?_0x465306['options']['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x465306[_0xf3e1('0x16')]?_0x465306[_0xf3e1('0x16')][_0xf3e1('0x21')]||null:null,'attributes':_0x465306[_0xf3e1('0x16')]?_0x465306[_0xf3e1('0x16')]['attributes']||null:null,'limit':_0x465306[_0xf3e1('0x16')]?_0x465306[_0xf3e1('0x16')][_0xf3e1('0x22')]||null:null})['then'](function(_0x39f547){logger['info'](_0xf3e1('0x1e'),_0x465306);logger[_0xf3e1('0xb')]('UpdateCmHopperBlack',_0x465306,JSON[_0xf3e1('0xe')](_0x39f547));_0x4482fd(_0x39f547);})['catch'](function(_0x57d106){logger[_0xf3e1('0xf')](_0xf3e1('0x1e'),_0x57d106[_0xf3e1('0x10')],_0x465306);_0x4a4764(_0x200c25[_0xf3e1('0xf')](0x1f4,_0x57d106[_0xf3e1('0x10')]));});});};exports[_0xf3e1('0x23')]=function(_0x28c933){var _0x25f441=this;return new Promise(function(_0x22a8a0,_0xfce0a0){return db[_0xf3e1('0x14')][_0xf3e1('0x24')]({'where':_0x28c933[_0xf3e1('0x16')]?_0x28c933[_0xf3e1('0x16')][_0xf3e1('0x21')]||null:null})[_0xf3e1('0x1c')](function(_0x412c8b){logger[_0xf3e1('0x11')](_0xf3e1('0x23'),_0x28c933);logger[_0xf3e1('0xb')](_0xf3e1('0x23'),_0x28c933,JSON[_0xf3e1('0xe')](_0x412c8b));_0x22a8a0(_0x412c8b);})[_0xf3e1('0x1d')](function(_0x4efb0c){logger['error']('DestroyCmHopperBlack',_0x4efb0c[_0xf3e1('0x10')],_0x28c933);_0xfce0a0(_0x25f441[_0xf3e1('0xf')](0x1f4,_0x4efb0c[_0xf3e1('0x10')]));});});};
\ No newline at end of file
+var _0x1223=['model','update','body','UpdateCmHopperBlack','DestroyCmHopperBlack','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','then','info','CmHopperBlack,\x20%s,\x20%s','debug','stringify','error','message','request\x20sent','result','catch','GetCmHopperBlack','CmHopperBlack','findAll','options','raw','where','attributes','limit','include','map'];(function(_0x55c1cf,_0x864654){var _0x37c233=function(_0x4b2276){while(--_0x4b2276){_0x55c1cf['push'](_0x55c1cf['shift']());}};_0x37c233(++_0x864654);}(_0x1223,0xdd));var _0x3122=function(_0x1e6f1a,_0x598c23){_0x1e6f1a=_0x1e6f1a-0x0;var _0x1240a3=_0x1223[_0x1e6f1a];return _0x1240a3;};'use strict';var _=require(_0x3122('0x0'));var util=require(_0x3122('0x1'));var moment=require('moment');var BPromise=require(_0x3122('0x2'));var rs=require(_0x3122('0x3'));var fs=require('fs');var db=require(_0x3122('0x4'))['db'];var utils=require(_0x3122('0x5'));var logger=require(_0x3122('0x6'))(_0x3122('0x7'));var config=require(_0x3122('0x8'));var jayson=require(_0x3122('0x9'));var client=jayson['client'][_0x3122('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2e7f74,_0x548e99,_0x5ec1f6){return new BPromise(function(_0x3c9dec,_0x2bdea2){return client['request'](_0x2e7f74,_0x5ec1f6)[_0x3122('0xb')](function(_0x1ab80f){logger[_0x3122('0xc')](_0x3122('0xd'),_0x548e99,'request\x20sent');logger[_0x3122('0xe')]('CmHopperBlack,\x20%s,\x20%s,\x20%s',_0x548e99,'request\x20sent',JSON[_0x3122('0xf')](_0x1ab80f));if(_0x1ab80f[_0x3122('0x10')]){if(_0x1ab80f['error']['code']===0x1f4){logger[_0x3122('0x10')](_0x3122('0xd'),_0x548e99,_0x1ab80f[_0x3122('0x10')][_0x3122('0x11')]);return _0x2bdea2(_0x1ab80f[_0x3122('0x10')][_0x3122('0x11')]);}logger[_0x3122('0x10')](_0x3122('0xd'),_0x548e99,_0x1ab80f[_0x3122('0x10')][_0x3122('0x11')]);return _0x3c9dec(_0x1ab80f['error']['message']);}else{logger[_0x3122('0xc')](_0x3122('0xd'),_0x548e99,_0x3122('0x12'));_0x3c9dec(_0x1ab80f[_0x3122('0x13')]['message']);}})[_0x3122('0x14')](function(_0xdc1d7c){logger[_0x3122('0x10')](_0x3122('0xd'),_0x548e99,_0xdc1d7c);_0x2bdea2(_0xdc1d7c);});});}exports[_0x3122('0x15')]=function(_0x5f3556){var _0x4948ec=this;return new Promise(function(_0x144e4e,_0x293396){return db[_0x3122('0x16')][_0x3122('0x17')]({'raw':_0x5f3556[_0x3122('0x18')]?_0x5f3556[_0x3122('0x18')][_0x3122('0x19')]===undefined?!![]:![]:!![],'where':_0x5f3556[_0x3122('0x18')]?_0x5f3556[_0x3122('0x18')][_0x3122('0x1a')]||null:null,'attributes':_0x5f3556[_0x3122('0x18')]?_0x5f3556[_0x3122('0x18')][_0x3122('0x1b')]||null:null,'limit':_0x5f3556[_0x3122('0x18')]?_0x5f3556[_0x3122('0x18')][_0x3122('0x1c')]||null:null,'include':_0x5f3556['options']?_0x5f3556[_0x3122('0x18')][_0x3122('0x1d')]?_[_0x3122('0x1e')](_0x5f3556['options'][_0x3122('0x1d')],function(_0x1a3ff7){return{'model':db[_0x1a3ff7['model']],'as':_0x1a3ff7['as'],'attributes':_0x1a3ff7[_0x3122('0x1b')],'include':_0x1a3ff7[_0x3122('0x1d')]?_[_0x3122('0x1e')](_0x1a3ff7[_0x3122('0x1d')],function(_0x4f2908){return{'model':db[_0x4f2908['model']],'as':_0x4f2908['as'],'attributes':_0x4f2908[_0x3122('0x1b')],'include':_0x4f2908[_0x3122('0x1d')]?_['map'](_0x4f2908[_0x3122('0x1d')],function(_0x199654){return{'model':db[_0x199654[_0x3122('0x1f')]],'as':_0x199654['as'],'attributes':_0x199654[_0x3122('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x3122('0xb')](function(_0x465f2d){logger[_0x3122('0xc')](_0x3122('0x15'),_0x5f3556);logger[_0x3122('0xe')](_0x3122('0x15'),_0x5f3556,JSON[_0x3122('0xf')](_0x465f2d));_0x144e4e(_0x465f2d);})[_0x3122('0x14')](function(_0x1fc59f){logger[_0x3122('0x10')](_0x3122('0x15'),_0x1fc59f['message'],_0x5f3556);_0x293396(_0x4948ec[_0x3122('0x10')](0x1f4,_0x1fc59f['message']));});});};exports['UpdateCmHopperBlack']=function(_0x4c005a){var _0x2df924=this;return new Promise(function(_0x2bbd35,_0x1aa915){return db[_0x3122('0x16')][_0x3122('0x20')](_0x4c005a[_0x3122('0x21')],{'raw':_0x4c005a['options']?_0x4c005a[_0x3122('0x18')][_0x3122('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x4c005a[_0x3122('0x18')]?_0x4c005a['options'][_0x3122('0x1a')]||null:null,'attributes':_0x4c005a[_0x3122('0x18')]?_0x4c005a['options'][_0x3122('0x1b')]||null:null,'limit':_0x4c005a[_0x3122('0x18')]?_0x4c005a[_0x3122('0x18')]['limit']||null:null})[_0x3122('0xb')](function(_0x2bb611){logger['info'](_0x3122('0x22'),_0x4c005a);logger[_0x3122('0xe')](_0x3122('0x22'),_0x4c005a,JSON[_0x3122('0xf')](_0x2bb611));_0x2bbd35(_0x2bb611);})['catch'](function(_0x2ad7d6){logger[_0x3122('0x10')](_0x3122('0x22'),_0x2ad7d6['message'],_0x4c005a);_0x1aa915(_0x2df924[_0x3122('0x10')](0x1f4,_0x2ad7d6[_0x3122('0x11')]));});});};exports[_0x3122('0x23')]=function(_0x1434b1){var _0x1f0d81=this;return new Promise(function(_0x19a39d,_0x2fde51){return db[_0x3122('0x16')]['destroy']({'where':_0x1434b1[_0x3122('0x18')]?_0x1434b1[_0x3122('0x18')]['where']||null:null})[_0x3122('0xb')](function(_0x4eac7a){logger[_0x3122('0xc')](_0x3122('0x23'),_0x1434b1);logger['debug']('DestroyCmHopperBlack',_0x1434b1,JSON['stringify'](_0x4eac7a));_0x19a39d(_0x4eac7a);})[_0x3122('0x14')](function(_0x156d15){logger[_0x3122('0x10')](_0x3122('0x23'),_0x156d15[_0x3122('0x11')],_0x1434b1);_0x2fde51(_0x1f0d81[_0x3122('0x10')](0x1f4,_0x156d15[_0x3122('0x11')]));});});};
\ No newline at end of file
index 4855370..9dcc531 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x256b=['../../config/environment','./cmHopperBlack.controller','get','isAuthenticated','index','/describe','/:id','show','put','delete','destroy','exports','multer','path','express','../../components/auth/service','../../components/interaction/service'];(function(_0x136a0d,_0x476fe2){var _0x212ea5=function(_0xa288e){while(--_0xa288e){_0x136a0d['push'](_0x136a0d['shift']());}};_0x212ea5(++_0x476fe2);}(_0x256b,0x72));var _0xb256=function(_0x4a79c5,_0xc5943c){_0x4a79c5=_0x4a79c5-0x0;var _0x53255e=_0x256b[_0x4a79c5];return _0x53255e;};'use strict';var multer=require(_0xb256('0x0'));var util=require('util');var path=require(_0xb256('0x1'));var express=require(_0xb256('0x2'));var router=express['Router']();var auth=require(_0xb256('0x3'));var interaction=require(_0xb256('0x4'));var config=require(_0xb256('0x5'));var controller=require(_0xb256('0x6'));router[_0xb256('0x7')]('/',auth[_0xb256('0x8')](),controller[_0xb256('0x9')]);router[_0xb256('0x7')](_0xb256('0xa'),auth[_0xb256('0x8')](),controller['describe']);router[_0xb256('0x7')](_0xb256('0xb'),auth[_0xb256('0x8')](),controller[_0xb256('0xc')]);router[_0xb256('0xd')](_0xb256('0xb'),auth[_0xb256('0x8')](),controller['update']);router[_0xb256('0xe')](_0xb256('0xb'),auth[_0xb256('0x8')](),controller[_0xb256('0xf')]);module[_0xb256('0x10')]=router;
\ No newline at end of file
+var _0x98eb=['isAuthenticated','index','get','/describe','describe','delete','/:id','multer','util','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmHopperBlack.controller'];(function(_0x1f70d0,_0x4b4992){var _0x1947e1=function(_0x53f664){while(--_0x53f664){_0x1f70d0['push'](_0x1f70d0['shift']());}};_0x1947e1(++_0x4b4992);}(_0x98eb,0x149));var _0xb98e=function(_0x2e41e2,_0x4e7250){_0x2e41e2=_0x2e41e2-0x0;var _0x2844d6=_0x98eb[_0x2e41e2];return _0x2844d6;};'use strict';var multer=require(_0xb98e('0x0'));var util=require(_0xb98e('0x1'));var path=require('path');var express=require(_0xb98e('0x2'));var router=express['Router']();var auth=require(_0xb98e('0x3'));var interaction=require(_0xb98e('0x4'));var config=require(_0xb98e('0x5'));var controller=require(_0xb98e('0x6'));router['get']('/',auth[_0xb98e('0x7')](),controller[_0xb98e('0x8')]);router[_0xb98e('0x9')](_0xb98e('0xa'),auth[_0xb98e('0x7')](),controller[_0xb98e('0xb')]);router[_0xb98e('0x9')]('/:id',auth[_0xb98e('0x7')](),controller['show']);router['put']('/:id',auth[_0xb98e('0x7')](),controller['update']);router[_0xb98e('0xc')](_0xb98e('0xd'),auth[_0xb98e('0x7')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 4d2c8af..7ac3ea3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc0f6=['BOOLEAN','sequelize','moment','exports','INTEGER','STRING','DATE','getDataValue','endtime','setDataValue','followuptime','diff','seconds','dispositionat'];(function(_0x5de7db,_0x1c7c4e){var _0x11b042=function(_0x3f50e4){while(--_0x3f50e4){_0x5de7db['push'](_0x5de7db['shift']());}};_0x11b042(++_0x1c7c4e);}(_0xc0f6,0x17b));var _0x6c0f=function(_0x872f6f,_0x5efe7b){_0x872f6f=_0x872f6f-0x0;var _0x59a5f4=_0xc0f6[_0x872f6f];return _0x59a5f4;};'use strict';var Sequelize=require(_0x6c0f('0x0'));var moment=require(_0x6c0f('0x1'));module[_0x6c0f('0x2')]={'state':{'type':Sequelize[_0x6c0f('0x3')](0x2)},'statedesc':{'type':Sequelize[_0x6c0f('0x4')]},'scheduledat':{'type':Sequelize[_0x6c0f('0x5')]},'countbusyretry':{'type':Sequelize[_0x6c0f('0x3')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x6c0f('0x3')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0x6c0f('0x3')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0x6c0f('0x4')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x6c0f('0x4')]},'starttime':{'type':Sequelize[_0x6c0f('0x5')]},'responsetime':{'type':Sequelize[_0x6c0f('0x5')]},'answertime':{'type':Sequelize[_0x6c0f('0x5')]},'droptime':{'type':Sequelize[_0x6c0f('0x5')]},'endtime':{'type':Sequelize[_0x6c0f('0x5')]},'ringtime':{'type':Sequelize[_0x6c0f('0x3')],'defaultValue':0x0},'holdtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'talktime':{'type':Sequelize[_0x6c0f('0x3')],'defaultValue':0x0},'followuptime':{'type':Sequelize[_0x6c0f('0x3')],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0x6c0f('0x4')]},'campaign':{'type':Sequelize[_0x6c0f('0x4')]},'campaigntype':{'type':Sequelize['STRING']},'membername':{'type':Sequelize['STRING']},'reason':{'type':Sequelize[_0x6c0f('0x4')]},'disposition':{'type':Sequelize[_0x6c0f('0x4')]},'dispositionat':{'type':Sequelize[_0x6c0f('0x5')],'set':function(_0xec83f4){var _0x3f67df=this[_0x6c0f('0x6')](_0x6c0f('0x7'));if(_0x3f67df&&_0xec83f4){this[_0x6c0f('0x8')](_0x6c0f('0x9'),moment(_0xec83f4)[_0x6c0f('0xa')](moment(_0x3f67df),_0x6c0f('0xb')));}return this['setDataValue'](_0x6c0f('0xc'),_0xec83f4);}},'amd':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'fax':{'type':Sequelize[_0x6c0f('0xd')],'defaultValue':![]},'blacklist':{'type':Sequelize[_0x6c0f('0xd')],'defaultValue':![]},'rescheduled':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'rescheduledat':{'type':Sequelize[_0x6c0f('0x5')]},'callback':{'type':Sequelize[_0x6c0f('0xd')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x6c0f('0x4')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x6c0f('0x5')]},'deleted':{'type':Sequelize['STRING'],'defaultValue':null},'deletedat':{'type':Sequelize[_0x6c0f('0x5')]},'recallme':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agiafterat':{'type':Sequelize[_0x6c0f('0x5')]}};
\ No newline at end of file
+var _0x2e56=['getDataValue','endtime','followuptime','setDataValue','BOOLEAN','sequelize','moment','exports','STRING','DATE','INTEGER'];(function(_0x40ac5e,_0x2de228){var _0x2839d6=function(_0x123d47){while(--_0x123d47){_0x40ac5e['push'](_0x40ac5e['shift']());}};_0x2839d6(++_0x2de228);}(_0x2e56,0x19c));var _0x62e5=function(_0x48d6a3,_0x37c848){_0x48d6a3=_0x48d6a3-0x0;var _0x38bfa0=_0x2e56[_0x48d6a3];return _0x38bfa0;};'use strict';var Sequelize=require(_0x62e5('0x0'));var moment=require(_0x62e5('0x1'));module[_0x62e5('0x2')]={'state':{'type':Sequelize['INTEGER'](0x2)},'statedesc':{'type':Sequelize[_0x62e5('0x3')]},'scheduledat':{'type':Sequelize[_0x62e5('0x4')]},'countbusyretry':{'type':Sequelize[_0x62e5('0x5')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x62e5('0x5')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x62e5('0x5')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0x62e5('0x5')],'defaultValue':0x0},'uniqueid':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0x62e5('0x3')]},'calleridname':{'type':Sequelize['STRING']},'starttime':{'type':Sequelize[_0x62e5('0x4')]},'responsetime':{'type':Sequelize[_0x62e5('0x4')]},'answertime':{'type':Sequelize[_0x62e5('0x4')]},'droptime':{'type':Sequelize[_0x62e5('0x4')]},'endtime':{'type':Sequelize['DATE']},'ringtime':{'type':Sequelize[_0x62e5('0x5')],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0x62e5('0x5')],'defaultValue':0x0},'talktime':{'type':Sequelize[_0x62e5('0x5')],'defaultValue':0x0},'followuptime':{'type':Sequelize[_0x62e5('0x5')],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0x62e5('0x3')]},'campaign':{'type':Sequelize[_0x62e5('0x3')]},'campaigntype':{'type':Sequelize['STRING']},'membername':{'type':Sequelize[_0x62e5('0x3')]},'reason':{'type':Sequelize[_0x62e5('0x3')]},'disposition':{'type':Sequelize[_0x62e5('0x3')]},'dispositionat':{'type':Sequelize['DATE'],'set':function(_0x50162a){var _0x100ac1=this[_0x62e5('0x6')](_0x62e5('0x7'));if(_0x100ac1&&_0x50162a){this['setDataValue'](_0x62e5('0x8'),moment(_0x50162a)['diff'](moment(_0x100ac1),'seconds'));}return this[_0x62e5('0x9')]('dispositionat',_0x50162a);}},'amd':{'type':Sequelize[_0x62e5('0xa')],'defaultValue':![]},'fax':{'type':Sequelize[_0x62e5('0xa')],'defaultValue':![]},'blacklist':{'type':Sequelize[_0x62e5('0xa')],'defaultValue':![]},'rescheduled':{'type':Sequelize[_0x62e5('0xa')],'defaultValue':![]},'rescheduledat':{'type':Sequelize[_0x62e5('0x4')]},'callback':{'type':Sequelize[_0x62e5('0xa')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x62e5('0x3')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x62e5('0x4')]},'deleted':{'type':Sequelize['STRING'],'defaultValue':null},'deletedat':{'type':Sequelize[_0x62e5('0x4')]},'recallme':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agiafterat':{'type':Sequelize[_0x62e5('0x4')]}};
\ No newline at end of file
index cb87053..84651b3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa56=['CmHopperFinal','includeAll','include','findAll','params','options','find','catch','describe','update','body','uniqueid','countContactsQueueCampaignHopperFinal','sequelize','literal','COUNT','`state`\x20=\x203,\x201,\x20null','noAnswerContacts','`state`\x20=\x205,\x201,\x20null','`state`\x20=\x208,\x201,\x20null','congestionContacts','abandonedContacts','`state`\x20=\x2022,\x201,\x20null','reCallContacts','countContactsIvrCampaignHopperFinal','`state`\x20=\x200,\x201,\x20null','noSuchContacts','busyContacts','dropContacts','`state`\x20=\x2011\x20,\x201,\x20null','moveContactsQueueCampaignHopperFinal','VoiceQueue','into','fromQuery','phone','scheduledAt','ContactId','ListId','VoiceQueueId','createdAt','select','ANY_VALUE(calleridnum)','field','NOW()','ANY_VALUE(ContactId)','ANY_VALUE(ListId)','ANY_VALUE(VoiceQueueId)','updatedAt','from','cm_hopper_final','VoiceQueueId\x20=\x20?','toString','state','calleridnum\x20NOT\x20IN\x20(?)','cm_hopper','state\x20=\x204','group','Campaign','insert','CampaignId','ANY_VALUE(CampaignId)','CampaignId\x20=\x20?','state\x20=\x20?','calleridnum','checkContactHopper','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','to-csv','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../mysqldb','sendStatus','status','count','offset','limit','set','Content-Range','json','apply','reject','then','end','name','send','index','rawAttributes','model','keys','query','dateStart','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','filters','pick','dateEnd','day','merge','map','filter'];(function(_0x5db90d,_0x6f5285){var _0x4ece55=function(_0xc74df){while(--_0xc74df){_0x5db90d['push'](_0x5db90d['shift']());}};_0x4ece55(++_0x6f5285);}(_0xaa56,0xb8));var _0x6aa5=function(_0x41ecdb,_0xcf6ae6){_0x41ecdb=_0x41ecdb-0x0;var _0x537ec8=_0xaa56[_0x41ecdb];return _0x537ec8;};'use strict';var jsonpatch=require(_0x6aa5('0x0'));var rp=require(_0x6aa5('0x1'));var moment=require(_0x6aa5('0x2'));var BPromise=require(_0x6aa5('0x3'));var Mustache=require(_0x6aa5('0x4'));var util=require(_0x6aa5('0x5'));var path=require(_0x6aa5('0x6'));var sox=require(_0x6aa5('0x7'));var csv=require('to-csv');var ejs=require(_0x6aa5('0x8'));var fs=require('fs');var _=require(_0x6aa5('0x9'));var squel=require(_0x6aa5('0xa'));var crypto=require(_0x6aa5('0xb'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x6aa5('0xc'));var querystring=require(_0x6aa5('0xd'));var Papa=require(_0x6aa5('0xe'));var qs=require(_0x6aa5('0xf'));var logger=require('../../config/logger')(_0x6aa5('0x10'));var utils=require(_0x6aa5('0x11'));var config=require('../../config/environment');var db=require(_0x6aa5('0x12'))['db'];function respondWithStatusCode(_0x3a7ac4,_0x327b19){_0x327b19=_0x327b19||0xcc;return function(_0x436fb3){if(_0x436fb3){return _0x3a7ac4[_0x6aa5('0x13')](_0x327b19);}return _0x3a7ac4['status'](_0x327b19)['end']();};}function respondWithResult(_0x527c2d,_0x18453d){_0x18453d=_0x18453d||0xc8;return function(_0x46b8cd){if(_0x46b8cd){return _0x527c2d[_0x6aa5('0x14')](_0x18453d)['json'](_0x46b8cd);}};}function respondWithFilteredResult(_0xc69dc4,_0x5b1998){return function(_0x3b2581){if(_0x3b2581){var _0x1c2acc=_0x3b2581[_0x6aa5('0x15')],_0x415a14=_0x5b1998[_0x6aa5('0x16')],_0x552108=_0x5b1998['offset']+_0x5b1998[_0x6aa5('0x17')],_0x363769;if(_0x552108>=_0x1c2acc){_0x552108=_0x1c2acc;_0x363769=0xc8;}else{_0x363769=0xce;}_0xc69dc4['status'](_0x363769);return _0xc69dc4[_0x6aa5('0x18')](_0x6aa5('0x19'),_0x415a14+'-'+_0x552108+'/'+_0x1c2acc)[_0x6aa5('0x1a')](_0x3b2581);}return null;};}function patchUpdates(_0x1bdc62){return function(_0x238dbb){try{jsonpatch[_0x6aa5('0x1b')](_0x238dbb,_0x1bdc62,!![]);}catch(_0x1f10b0){return BPromise[_0x6aa5('0x1c')](_0x1f10b0);}return _0x238dbb['save']();};}function saveUpdates(_0x69a16f,_0x330bc){return function(_0x34acbe){if(_0x34acbe){return _0x34acbe['update'](_0x69a16f)[_0x6aa5('0x1d')](function(_0x2ecfa0){return _0x2ecfa0;});}return null;};}function removeEntity(_0x157027,_0x3b09d){return function(_0x1e4072){if(_0x1e4072){return _0x1e4072['destroy']()[_0x6aa5('0x1d')](function(){_0x157027[_0x6aa5('0x14')](0xcc)[_0x6aa5('0x1e')]();});}};}function handleEntityNotFound(_0x23a565,_0x3c4c3d){return function(_0x2039c5){if(!_0x2039c5){_0x23a565['sendStatus'](0x194);}return _0x2039c5;};}function handleError(_0x2294eb,_0x49e64e){_0x49e64e=_0x49e64e||0x1f4;return function(_0x4c9b18){logger['error'](_0x4c9b18['stack']);if(_0x4c9b18[_0x6aa5('0x1f')]){delete _0x4c9b18['name'];}_0x2294eb[_0x6aa5('0x14')](_0x49e64e)[_0x6aa5('0x20')](_0x4c9b18);};}exports[_0x6aa5('0x21')]=function(_0x3d558a,_0x28c811){var _0x3409a6={},_0x21e6f1={},_0x128411={'count':0x0,'rows':[]};var _0x348b0f=db['CmHopperFinal'][_0x6aa5('0x22')];_0x21e6f1[_0x6aa5('0x23')]=_[_0x6aa5('0x24')](_0x348b0f);var _0x41962a={'dateStart':_0x3d558a[_0x6aa5('0x25')][_0x6aa5('0x26')],'dateEnd':_0x3d558a['query']['dateEnd']};delete _0x3d558a['query'][_0x6aa5('0x26')];delete _0x3d558a[_0x6aa5('0x25')]['dateEnd'];_0x21e6f1['query']=_[_0x6aa5('0x24')](_0x3d558a[_0x6aa5('0x25')]);_0x21e6f1['filters']=_[_0x6aa5('0x27')](_0x21e6f1[_0x6aa5('0x23')],_0x21e6f1[_0x6aa5('0x25')]);_0x3409a6[_0x6aa5('0x28')]=_['intersection'](_0x21e6f1[_0x6aa5('0x23')],qs[_0x6aa5('0x29')](_0x3d558a[_0x6aa5('0x25')][_0x6aa5('0x29')]));_0x3409a6['attributes']=_0x3409a6[_0x6aa5('0x28')][_0x6aa5('0x2a')]?_0x3409a6[_0x6aa5('0x28')]:_0x21e6f1[_0x6aa5('0x23')];if(!_0x3d558a[_0x6aa5('0x25')][_0x6aa5('0x2b')]('nolimit')){_0x3409a6[_0x6aa5('0x17')]=qs['limit'](_0x3d558a[_0x6aa5('0x25')][_0x6aa5('0x17')]);_0x3409a6[_0x6aa5('0x16')]=qs[_0x6aa5('0x16')](_0x3d558a[_0x6aa5('0x25')][_0x6aa5('0x16')]);}_0x3409a6[_0x6aa5('0x2c')]=qs['sort'](_0x3d558a[_0x6aa5('0x25')][_0x6aa5('0x2d')]);_0x3409a6[_0x6aa5('0x2e')]=qs[_0x6aa5('0x2f')](_[_0x6aa5('0x30')](_0x3d558a[_0x6aa5('0x25')],_0x21e6f1[_0x6aa5('0x2f')]));if(_0x41962a[_0x6aa5('0x26')]){if(_0x41962a[_0x6aa5('0x31')]){_0x41962a[_0x6aa5('0x31')]=moment(_0x41962a[_0x6aa5('0x31')])['add'](0x1,_0x6aa5('0x32'));}else{_0x41962a['dateEnd']=moment(_0x41962a[_0x6aa5('0x26')])['add'](0x1,_0x6aa5('0x32'));}_[_0x6aa5('0x33')](_0x3409a6[_0x6aa5('0x2e')],{'createdAt':{'$gte':_0x41962a[_0x6aa5('0x26')],'$lte':_0x41962a[_0x6aa5('0x31')]}});}if(_0x3d558a['query']['filter']){_0x3409a6[_0x6aa5('0x2e')]=_[_0x6aa5('0x33')](_0x3409a6[_0x6aa5('0x2e')],{'$or':_[_0x6aa5('0x34')](_0x3409a6[_0x6aa5('0x28')],function(_0x529660){var _0x48e9f3={};_0x48e9f3[_0x529660]={'$like':'%'+_0x3d558a[_0x6aa5('0x25')][_0x6aa5('0x35')]+'%'};return _0x48e9f3;})});}_0x3409a6=_[_0x6aa5('0x33')]({},_0x3409a6,_0x3d558a['options']);var _0x53802b={'where':_0x3409a6[_0x6aa5('0x2e')]};return db[_0x6aa5('0x36')][_0x6aa5('0x15')](_0x53802b)['then'](function(_0x2dd0d5){_0x128411['count']=_0x2dd0d5;if(_0x3d558a[_0x6aa5('0x25')][_0x6aa5('0x37')]){_0x3409a6[_0x6aa5('0x38')]=[{'all':!![]}];}return db[_0x6aa5('0x36')][_0x6aa5('0x39')](_0x3409a6);})['then'](function(_0x212c4a){_0x128411['rows']=_0x212c4a;return _0x128411;})[_0x6aa5('0x1d')](respondWithFilteredResult(_0x28c811,_0x3409a6))['catch'](handleError(_0x28c811,null));};exports['show']=function(_0x1d2826,_0x5a6516){var _0x182a1e={'raw':!![],'where':{'id':_0x1d2826[_0x6aa5('0x3a')]['id']}},_0x1b280c={};_0x1b280c[_0x6aa5('0x23')]=_['keys'](db[_0x6aa5('0x36')][_0x6aa5('0x22')]);_0x1b280c[_0x6aa5('0x25')]=_[_0x6aa5('0x24')](_0x1d2826['query']);_0x1b280c['filters']=_[_0x6aa5('0x27')](_0x1b280c[_0x6aa5('0x23')],_0x1b280c[_0x6aa5('0x25')]);_0x182a1e['attributes']=_[_0x6aa5('0x27')](_0x1b280c[_0x6aa5('0x23')],qs[_0x6aa5('0x29')](_0x1d2826[_0x6aa5('0x25')][_0x6aa5('0x29')]));_0x182a1e[_0x6aa5('0x28')]=_0x182a1e[_0x6aa5('0x28')]['length']?_0x182a1e[_0x6aa5('0x28')]:_0x1b280c[_0x6aa5('0x23')];if(_0x1d2826[_0x6aa5('0x25')]['includeAll']){_0x182a1e[_0x6aa5('0x38')]=[{'all':!![]}];}_0x182a1e=_['merge']({},_0x182a1e,_0x1d2826[_0x6aa5('0x3b')]);return db[_0x6aa5('0x36')][_0x6aa5('0x3c')](_0x182a1e)['then'](handleEntityNotFound(_0x5a6516,null))[_0x6aa5('0x1d')](respondWithResult(_0x5a6516,null))[_0x6aa5('0x3d')](handleError(_0x5a6516,null));};exports[_0x6aa5('0x3e')]=function(_0x23e4ad,_0x23c5e4){return db[_0x6aa5('0x36')][_0x6aa5('0x3e')]()[_0x6aa5('0x1d')](respondWithResult(_0x23c5e4,null))[_0x6aa5('0x3d')](handleError(_0x23c5e4,null));};exports[_0x6aa5('0x3f')]=function(_0x271843,_0x32a742){if(_0x271843[_0x6aa5('0x40')]['uniqueid']){delete _0x271843[_0x6aa5('0x40')][_0x6aa5('0x41')];}return db[_0x6aa5('0x36')][_0x6aa5('0x3c')]({'where':{'uniqueid':_0x271843[_0x6aa5('0x3a')]['id']}})[_0x6aa5('0x1d')](handleEntityNotFound(_0x32a742,null))['then'](saveUpdates(_0x271843[_0x6aa5('0x40')],null))[_0x6aa5('0x1d')](respondWithResult(_0x32a742,null))[_0x6aa5('0x3d')](handleError(_0x32a742,null));};exports[_0x6aa5('0x42')]=function(_0x456aee,_0x10cf91,_0x2e9861){return db[_0x6aa5('0x36')][_0x6aa5('0x39')]({'raw':![],'where':{'VoiceQueueId':_0x456aee[_0x6aa5('0x3a')]['id']},'attributes':[[db[_0x6aa5('0x43')]['fn']('COUNT',db[_0x6aa5('0x43')]['fn']('IF',db['sequelize'][_0x6aa5('0x44')]('`state`\x20=\x200,\x201,\x20null'))),'noSuchContacts'],[db[_0x6aa5('0x43')]['fn'](_0x6aa5('0x45'),db[_0x6aa5('0x43')]['fn']('IF',db[_0x6aa5('0x43')]['literal'](_0x6aa5('0x46')))),_0x6aa5('0x47')],[db['sequelize']['fn'](_0x6aa5('0x45'),db['sequelize']['fn']('IF',db[_0x6aa5('0x43')][_0x6aa5('0x44')](_0x6aa5('0x48')))),'busyContacts'],[db['sequelize']['fn'](_0x6aa5('0x45'),db['sequelize']['fn']('IF',db[_0x6aa5('0x43')]['literal'](_0x6aa5('0x49')))),_0x6aa5('0x4a')],[db[_0x6aa5('0x43')]['fn'](_0x6aa5('0x45'),db[_0x6aa5('0x43')]['fn']('IF',db['sequelize']['literal']('`state`\x20=\x2010\x20,\x201,\x20null'))),'dropContacts'],[db[_0x6aa5('0x43')]['fn']('COUNT',db[_0x6aa5('0x43')]['fn']('IF',db[_0x6aa5('0x43')][_0x6aa5('0x44')]('`state`\x20=\x2011\x20,\x201,\x20null'))),_0x6aa5('0x4b')],[db['sequelize']['fn']('COUNT',db[_0x6aa5('0x43')]['fn']('IF',db[_0x6aa5('0x43')][_0x6aa5('0x44')](_0x6aa5('0x4c')))),_0x6aa5('0x4d')]]})[_0x6aa5('0x1d')](handleEntityNotFound(_0x10cf91,null))[_0x6aa5('0x1d')](respondWithResult(_0x10cf91,null))['catch'](handleError(_0x10cf91,null));};exports[_0x6aa5('0x4e')]=function(_0x4b9975,_0x46d137,_0x462fd3){return db[_0x6aa5('0x36')]['findAll']({'raw':![],'where':{'CampaignId':_0x4b9975[_0x6aa5('0x3a')]['id']},'attributes':[[db['sequelize']['fn']('COUNT',db['sequelize']['fn']('IF',db['sequelize']['literal'](_0x6aa5('0x4f')))),_0x6aa5('0x50')],[db[_0x6aa5('0x43')]['fn'](_0x6aa5('0x45'),db[_0x6aa5('0x43')]['fn']('IF',db[_0x6aa5('0x43')][_0x6aa5('0x44')](_0x6aa5('0x46')))),_0x6aa5('0x47')],[db['sequelize']['fn']('COUNT',db['sequelize']['fn']('IF',db[_0x6aa5('0x43')]['literal']('`state`\x20=\x205,\x201,\x20null'))),_0x6aa5('0x51')],[db[_0x6aa5('0x43')]['fn']('COUNT',db[_0x6aa5('0x43')]['fn']('IF',db[_0x6aa5('0x43')][_0x6aa5('0x44')](_0x6aa5('0x49')))),_0x6aa5('0x4a')],[db[_0x6aa5('0x43')]['fn']('COUNT',db[_0x6aa5('0x43')]['fn']('IF',db['sequelize']['literal']('`state`\x20=\x2010\x20,\x201,\x20null'))),_0x6aa5('0x52')],[db[_0x6aa5('0x43')]['fn'](_0x6aa5('0x45'),db[_0x6aa5('0x43')]['fn']('IF',db['sequelize'][_0x6aa5('0x44')](_0x6aa5('0x53')))),_0x6aa5('0x4b')],[db[_0x6aa5('0x43')]['fn'](_0x6aa5('0x45'),db[_0x6aa5('0x43')]['fn']('IF',db[_0x6aa5('0x43')][_0x6aa5('0x44')](_0x6aa5('0x4c')))),'reCallContacts']]})[_0x6aa5('0x1d')](handleEntityNotFound(_0x46d137,null))[_0x6aa5('0x1d')](respondWithResult(_0x46d137,null))[_0x6aa5('0x3d')](handleError(_0x46d137,null));};exports[_0x6aa5('0x54')]=function(_0x2404e2,_0x2dc0eb,_0x5b59d9){return db[_0x6aa5('0x55')]['find']({'where':{'id':_0x2404e2[_0x6aa5('0x3a')]['id']}})[_0x6aa5('0x1d')](handleEntityNotFound(_0x2dc0eb,null))[_0x6aa5('0x1d')](function(_0x1d3567){var _0x96fc72;if(_0x1d3567){_0x96fc72=squel['insert']()[_0x6aa5('0x56')]('cm_hopper')[_0x6aa5('0x57')]([_0x6aa5('0x58'),_0x6aa5('0x59'),_0x6aa5('0x5a'),_0x6aa5('0x5b'),_0x6aa5('0x5c'),_0x6aa5('0x5d'),'updatedAt'],squel[_0x6aa5('0x5e')]()['field'](_0x6aa5('0x5f'),_0x6aa5('0x58'))[_0x6aa5('0x60')](_0x6aa5('0x61'),_0x6aa5('0x59'))[_0x6aa5('0x60')](_0x6aa5('0x62'),_0x6aa5('0x5a'))[_0x6aa5('0x60')](_0x6aa5('0x63'),_0x6aa5('0x5b'))['field'](_0x6aa5('0x64'),'VoiceQueueId')[_0x6aa5('0x60')]('NOW()',_0x6aa5('0x5d'))[_0x6aa5('0x60')]('NOW()',_0x6aa5('0x65'))[_0x6aa5('0x66')](_0x6aa5('0x67'))[_0x6aa5('0x2e')](_0x6aa5('0x68'),_0x2404e2[_0x6aa5('0x3a')]['id'][_0x6aa5('0x69')]())[_0x6aa5('0x2e')]('state\x20=\x20?',_0x2404e2[_0x6aa5('0x40')][_0x6aa5('0x6a')][_0x6aa5('0x69')]())[_0x6aa5('0x2e')]('calleridnum\x20IS\x20NOT\x20NULL')[_0x6aa5('0x2e')](_0x6aa5('0x6b'),squel[_0x6aa5('0x5e')]()[_0x6aa5('0x60')](_0x6aa5('0x58'))[_0x6aa5('0x66')](_0x6aa5('0x6c'))[_0x6aa5('0x2e')](_0x6aa5('0x68'),_0x2404e2[_0x6aa5('0x3a')]['id'][_0x6aa5('0x69')]()))['where'](_0x6aa5('0x6b'),squel[_0x6aa5('0x5e')]()[_0x6aa5('0x60')]('calleridnum')[_0x6aa5('0x66')](_0x6aa5('0x67'))['where'](_0x6aa5('0x68'),_0x2404e2['params']['id']['toString']())[_0x6aa5('0x2e')](_0x6aa5('0x6d')))[_0x6aa5('0x6e')]('ContactId'))[_0x6aa5('0x69')]();return db[_0x6aa5('0x43')][_0x6aa5('0x25')](_0x96fc72);}return[];})[_0x6aa5('0x1d')](respondWithResult(_0x2dc0eb,null))[_0x6aa5('0x3d')](handleError(_0x2dc0eb,null));};exports['moveContactsIvrCampaignHopperFinal']=function(_0x5aff0f,_0x58d47b,_0x3e44c4){return db[_0x6aa5('0x6f')][_0x6aa5('0x3c')]({'where':{'id':_0x5aff0f['params']['id']}})[_0x6aa5('0x1d')](handleEntityNotFound(_0x58d47b,null))[_0x6aa5('0x1d')](function(_0x2f2bac){var _0x3a8341;if(_0x2f2bac){_0x3a8341=squel[_0x6aa5('0x70')]()[_0x6aa5('0x56')](_0x6aa5('0x6c'))[_0x6aa5('0x57')]([_0x6aa5('0x58'),'scheduledAt',_0x6aa5('0x5a'),'ListId',_0x6aa5('0x71'),_0x6aa5('0x5d'),_0x6aa5('0x65')],squel[_0x6aa5('0x5e')]()[_0x6aa5('0x60')](_0x6aa5('0x5f'),_0x6aa5('0x58'))['field'](_0x6aa5('0x61'),_0x6aa5('0x59'))[_0x6aa5('0x60')]('ANY_VALUE(ContactId)',_0x6aa5('0x5a'))[_0x6aa5('0x60')]('ANY_VALUE(ListId)',_0x6aa5('0x5b'))[_0x6aa5('0x60')](_0x6aa5('0x72'),_0x6aa5('0x71'))[_0x6aa5('0x60')](_0x6aa5('0x61'),_0x6aa5('0x5d'))['field']('NOW()','updatedAt')[_0x6aa5('0x66')]('cm_hopper_final')[_0x6aa5('0x2e')](_0x6aa5('0x73'),_0x5aff0f[_0x6aa5('0x3a')]['id'][_0x6aa5('0x69')]())['where'](_0x6aa5('0x74'),_0x5aff0f[_0x6aa5('0x40')]['state'][_0x6aa5('0x69')]())[_0x6aa5('0x2e')]('calleridnum\x20IS\x20NOT\x20NULL')[_0x6aa5('0x2e')](_0x6aa5('0x6b'),squel[_0x6aa5('0x5e')]()[_0x6aa5('0x60')](_0x6aa5('0x58'))[_0x6aa5('0x66')](_0x6aa5('0x6c'))[_0x6aa5('0x2e')](_0x6aa5('0x73'),_0x5aff0f['params']['id']['toString']()))[_0x6aa5('0x2e')](_0x6aa5('0x6b'),squel[_0x6aa5('0x5e')]()[_0x6aa5('0x60')](_0x6aa5('0x75'))['from']('cm_hopper_final')[_0x6aa5('0x2e')](_0x6aa5('0x73'),_0x5aff0f['params']['id']['toString']())[_0x6aa5('0x2e')](_0x6aa5('0x6d')))[_0x6aa5('0x6e')]('ContactId'))[_0x6aa5('0x69')]();return db['sequelize']['query'](_0x3a8341);}return[];})[_0x6aa5('0x1d')](respondWithResult(_0x58d47b,null))[_0x6aa5('0x3d')](handleError(_0x58d47b,null));};exports[_0x6aa5('0x76')]=function(_0xd4b78,_0x475d06,_0x1d060c){return db['CmHopper']['findOne']({'where':{'VoiceQueueId':_0xd4b78['body'][_0x6aa5('0x5c')],'CampaignId':_0xd4b78[_0x6aa5('0x40')]['CampaignId'],'ContactId':_0xd4b78['body'][_0x6aa5('0x5a')]}})[_0x6aa5('0x1d')](handleEntityNotFound(_0x475d06,null))['then'](function(_0x262305){if(_0x262305){return _0x262305;}return null;})['then'](respondWithResult(_0x475d06,null))['catch'](handleError(_0x475d06,null));};
\ No newline at end of file
+var _0xca80=['request-promise','bluebird','mustache','sox','to-csv','ejs','lodash','squel','crypto','jsforce','../../config/logger','../../config/utils','../../mysqldb','sendStatus','offset','limit','status','set','Content-Range','json','reject','then','destroy','end','stack','send','CmHopperFinal','rawAttributes','keys','query','dateStart','dateEnd','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filters','day','add','filter','merge','map','count','includeAll','rows','catch','include','options','find','describe','body','uniqueid','params','findAll','sequelize','literal','`state`\x20=\x200,\x201,\x20null','noSuchContacts','`state`\x20=\x203,\x201,\x20null','noAnswerContacts','COUNT','`state`\x20=\x205,\x201,\x20null','busyContacts','congestionContacts','`state`\x20=\x2010\x20,\x201,\x20null','dropContacts','`state`\x20=\x2011\x20,\x201,\x20null','abandonedContacts','reCallContacts','countContactsIvrCampaignHopperFinal','`state`\x20=\x208,\x201,\x20null','`state`\x20=\x2022,\x201,\x20null','moveContactsQueueCampaignHopperFinal','into','phone','scheduledAt','ContactId','ListId','VoiceQueueId','createdAt','select','field','ANY_VALUE(calleridnum)','NOW()','ANY_VALUE(ContactId)','ANY_VALUE(ListId)','updatedAt','from','cm_hopper_final','VoiceQueueId\x20=\x20?','state\x20=\x20?','state','toString','calleridnum\x20IS\x20NOT\x20NULL','calleridnum\x20NOT\x20IN\x20(?)','cm_hopper','calleridnum','state\x20=\x204','group','moveContactsIvrCampaignHopperFinal','Campaign','insert','fromQuery','ANY_VALUE(CampaignId)','CampaignId','CampaignId\x20=\x20?','checkContactHopper','CmHopper','findOne','fast-json-patch'];(function(_0x26c07d,_0x3eeb80){var _0x95bc1a=function(_0xbbc9fe){while(--_0xbbc9fe){_0x26c07d['push'](_0x26c07d['shift']());}};_0x95bc1a(++_0x3eeb80);}(_0xca80,0x1cf));var _0x0ca8=function(_0x490100,_0x5efc83){_0x490100=_0x490100-0x0;var _0x3f4209=_0xca80[_0x490100];return _0x3f4209;};'use strict';var jsonpatch=require(_0x0ca8('0x0'));var rp=require(_0x0ca8('0x1'));var moment=require('moment');var BPromise=require(_0x0ca8('0x2'));var Mustache=require(_0x0ca8('0x3'));var util=require('util');var path=require('path');var sox=require(_0x0ca8('0x4'));var csv=require(_0x0ca8('0x5'));var ejs=require(_0x0ca8('0x6'));var fs=require('fs');var _=require(_0x0ca8('0x7'));var squel=require(_0x0ca8('0x8'));var crypto=require(_0x0ca8('0x9'));var jsforce=require(_0x0ca8('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0x0ca8('0xb'))('api');var utils=require(_0x0ca8('0xc'));var config=require('../../config/environment');var db=require(_0x0ca8('0xd'))['db'];function respondWithStatusCode(_0x4f20b0,_0x14399e){_0x14399e=_0x14399e||0xcc;return function(_0x1f1d41){if(_0x1f1d41){return _0x4f20b0[_0x0ca8('0xe')](_0x14399e);}return _0x4f20b0['status'](_0x14399e)['end']();};}function respondWithResult(_0x4ccac1,_0x33dd4b){_0x33dd4b=_0x33dd4b||0xc8;return function(_0x27b1d0){if(_0x27b1d0){return _0x4ccac1['status'](_0x33dd4b)['json'](_0x27b1d0);}};}function respondWithFilteredResult(_0x314786,_0x880f02){return function(_0x5eb796){if(_0x5eb796){var _0x3973fb=_0x5eb796['count'],_0x199560=_0x880f02[_0x0ca8('0xf')],_0x522082=_0x880f02[_0x0ca8('0xf')]+_0x880f02[_0x0ca8('0x10')],_0x2912f2;if(_0x522082>=_0x3973fb){_0x522082=_0x3973fb;_0x2912f2=0xc8;}else{_0x2912f2=0xce;}_0x314786[_0x0ca8('0x11')](_0x2912f2);return _0x314786[_0x0ca8('0x12')](_0x0ca8('0x13'),_0x199560+'-'+_0x522082+'/'+_0x3973fb)[_0x0ca8('0x14')](_0x5eb796);}return null;};}function patchUpdates(_0x60b84c){return function(_0x2288bc){try{jsonpatch['apply'](_0x2288bc,_0x60b84c,!![]);}catch(_0x178195){return BPromise[_0x0ca8('0x15')](_0x178195);}return _0x2288bc['save']();};}function saveUpdates(_0x455651,_0x5de5c7){return function(_0x527a84){if(_0x527a84){return _0x527a84['update'](_0x455651)[_0x0ca8('0x16')](function(_0x2e972d){return _0x2e972d;});}return null;};}function removeEntity(_0x23be72,_0x2ca56f){return function(_0x2a08b1){if(_0x2a08b1){return _0x2a08b1[_0x0ca8('0x17')]()[_0x0ca8('0x16')](function(){_0x23be72[_0x0ca8('0x11')](0xcc)[_0x0ca8('0x18')]();});}};}function handleEntityNotFound(_0xe590d8,_0x322afb){return function(_0x48fbc7){if(!_0x48fbc7){_0xe590d8[_0x0ca8('0xe')](0x194);}return _0x48fbc7;};}function handleError(_0x43faf6,_0x132947){_0x132947=_0x132947||0x1f4;return function(_0x262ffb){logger['error'](_0x262ffb[_0x0ca8('0x19')]);if(_0x262ffb['name']){delete _0x262ffb['name'];}_0x43faf6['status'](_0x132947)[_0x0ca8('0x1a')](_0x262ffb);};}exports['index']=function(_0x1aa621,_0x5483ee){var _0x2af27c={},_0x41b796={},_0x17c391={'count':0x0,'rows':[]};var _0x50e735=db[_0x0ca8('0x1b')][_0x0ca8('0x1c')];_0x41b796['model']=_[_0x0ca8('0x1d')](_0x50e735);var _0x848e7d={'dateStart':_0x1aa621[_0x0ca8('0x1e')][_0x0ca8('0x1f')],'dateEnd':_0x1aa621[_0x0ca8('0x1e')][_0x0ca8('0x20')]};delete _0x1aa621[_0x0ca8('0x1e')][_0x0ca8('0x1f')];delete _0x1aa621['query'][_0x0ca8('0x20')];_0x41b796[_0x0ca8('0x1e')]=_['keys'](_0x1aa621['query']);_0x41b796['filters']=_[_0x0ca8('0x21')](_0x41b796[_0x0ca8('0x22')],_0x41b796[_0x0ca8('0x1e')]);_0x2af27c[_0x0ca8('0x23')]=_[_0x0ca8('0x21')](_0x41b796[_0x0ca8('0x22')],qs[_0x0ca8('0x24')](_0x1aa621['query'][_0x0ca8('0x24')]));_0x2af27c[_0x0ca8('0x23')]=_0x2af27c[_0x0ca8('0x23')][_0x0ca8('0x25')]?_0x2af27c[_0x0ca8('0x23')]:_0x41b796[_0x0ca8('0x22')];if(!_0x1aa621[_0x0ca8('0x1e')][_0x0ca8('0x26')](_0x0ca8('0x27'))){_0x2af27c['limit']=qs[_0x0ca8('0x10')](_0x1aa621['query'][_0x0ca8('0x10')]);_0x2af27c['offset']=qs[_0x0ca8('0xf')](_0x1aa621[_0x0ca8('0x1e')][_0x0ca8('0xf')]);}_0x2af27c['order']=qs[_0x0ca8('0x28')](_0x1aa621['query'][_0x0ca8('0x28')]);_0x2af27c[_0x0ca8('0x29')]=qs['filters'](_[_0x0ca8('0x2a')](_0x1aa621[_0x0ca8('0x1e')],_0x41b796[_0x0ca8('0x2b')]));if(_0x848e7d[_0x0ca8('0x1f')]){if(_0x848e7d[_0x0ca8('0x20')]){_0x848e7d['dateEnd']=moment(_0x848e7d[_0x0ca8('0x20')])['add'](0x1,_0x0ca8('0x2c'));}else{_0x848e7d['dateEnd']=moment(_0x848e7d[_0x0ca8('0x1f')])[_0x0ca8('0x2d')](0x1,_0x0ca8('0x2c'));}_['merge'](_0x2af27c[_0x0ca8('0x29')],{'createdAt':{'$gte':_0x848e7d[_0x0ca8('0x1f')],'$lte':_0x848e7d[_0x0ca8('0x20')]}});}if(_0x1aa621['query'][_0x0ca8('0x2e')]){_0x2af27c[_0x0ca8('0x29')]=_[_0x0ca8('0x2f')](_0x2af27c['where'],{'$or':_[_0x0ca8('0x30')](_0x2af27c[_0x0ca8('0x23')],function(_0x14d35e){var _0x37ddeb={};_0x37ddeb[_0x14d35e]={'$like':'%'+_0x1aa621[_0x0ca8('0x1e')]['filter']+'%'};return _0x37ddeb;})});}_0x2af27c=_[_0x0ca8('0x2f')]({},_0x2af27c,_0x1aa621['options']);var _0x1149d0={'where':_0x2af27c[_0x0ca8('0x29')]};return db[_0x0ca8('0x1b')][_0x0ca8('0x31')](_0x1149d0)[_0x0ca8('0x16')](function(_0x572b84){_0x17c391[_0x0ca8('0x31')]=_0x572b84;if(_0x1aa621[_0x0ca8('0x1e')][_0x0ca8('0x32')]){_0x2af27c['include']=[{'all':!![]}];}return db[_0x0ca8('0x1b')]['findAll'](_0x2af27c);})[_0x0ca8('0x16')](function(_0xba2c71){_0x17c391[_0x0ca8('0x33')]=_0xba2c71;return _0x17c391;})[_0x0ca8('0x16')](respondWithFilteredResult(_0x5483ee,_0x2af27c))[_0x0ca8('0x34')](handleError(_0x5483ee,null));};exports['show']=function(_0x18202b,_0x4c672e){var _0x3e6777={'raw':!![],'where':{'id':_0x18202b['params']['id']}},_0x3506cf={};_0x3506cf['model']=_[_0x0ca8('0x1d')](db[_0x0ca8('0x1b')][_0x0ca8('0x1c')]);_0x3506cf[_0x0ca8('0x1e')]=_[_0x0ca8('0x1d')](_0x18202b['query']);_0x3506cf['filters']=_[_0x0ca8('0x21')](_0x3506cf['model'],_0x3506cf[_0x0ca8('0x1e')]);_0x3e6777[_0x0ca8('0x23')]=_['intersection'](_0x3506cf[_0x0ca8('0x22')],qs['fields'](_0x18202b[_0x0ca8('0x1e')][_0x0ca8('0x24')]));_0x3e6777['attributes']=_0x3e6777[_0x0ca8('0x23')][_0x0ca8('0x25')]?_0x3e6777['attributes']:_0x3506cf['model'];if(_0x18202b[_0x0ca8('0x1e')][_0x0ca8('0x32')]){_0x3e6777[_0x0ca8('0x35')]=[{'all':!![]}];}_0x3e6777=_[_0x0ca8('0x2f')]({},_0x3e6777,_0x18202b[_0x0ca8('0x36')]);return db['CmHopperFinal'][_0x0ca8('0x37')](_0x3e6777)[_0x0ca8('0x16')](handleEntityNotFound(_0x4c672e,null))[_0x0ca8('0x16')](respondWithResult(_0x4c672e,null))[_0x0ca8('0x34')](handleError(_0x4c672e,null));};exports[_0x0ca8('0x38')]=function(_0x4a0d1d,_0x161a04){return db[_0x0ca8('0x1b')][_0x0ca8('0x38')]()[_0x0ca8('0x16')](respondWithResult(_0x161a04,null))[_0x0ca8('0x34')](handleError(_0x161a04,null));};exports['update']=function(_0xff88b2,_0x1563e9){if(_0xff88b2[_0x0ca8('0x39')][_0x0ca8('0x3a')]){delete _0xff88b2[_0x0ca8('0x39')]['uniqueid'];}return db[_0x0ca8('0x1b')][_0x0ca8('0x37')]({'where':{'uniqueid':_0xff88b2[_0x0ca8('0x3b')]['id']}})[_0x0ca8('0x16')](handleEntityNotFound(_0x1563e9,null))[_0x0ca8('0x16')](saveUpdates(_0xff88b2[_0x0ca8('0x39')],null))[_0x0ca8('0x16')](respondWithResult(_0x1563e9,null))[_0x0ca8('0x34')](handleError(_0x1563e9,null));};exports['countContactsQueueCampaignHopperFinal']=function(_0x25a8a8,_0x40c041,_0x4bb069){return db[_0x0ca8('0x1b')][_0x0ca8('0x3c')]({'raw':![],'where':{'VoiceQueueId':_0x25a8a8['params']['id']},'attributes':[[db['sequelize']['fn']('COUNT',db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')][_0x0ca8('0x3e')](_0x0ca8('0x3f')))),_0x0ca8('0x40')],[db[_0x0ca8('0x3d')]['fn']('COUNT',db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')][_0x0ca8('0x3e')](_0x0ca8('0x41')))),_0x0ca8('0x42')],[db[_0x0ca8('0x3d')]['fn'](_0x0ca8('0x43'),db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')][_0x0ca8('0x3e')](_0x0ca8('0x44')))),_0x0ca8('0x45')],[db[_0x0ca8('0x3d')]['fn'](_0x0ca8('0x43'),db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')]['literal']('`state`\x20=\x208,\x201,\x20null'))),_0x0ca8('0x46')],[db[_0x0ca8('0x3d')]['fn'](_0x0ca8('0x43'),db[_0x0ca8('0x3d')]['fn']('IF',db['sequelize'][_0x0ca8('0x3e')](_0x0ca8('0x47')))),_0x0ca8('0x48')],[db[_0x0ca8('0x3d')]['fn']('COUNT',db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')]['literal'](_0x0ca8('0x49')))),_0x0ca8('0x4a')],[db[_0x0ca8('0x3d')]['fn']('COUNT',db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')][_0x0ca8('0x3e')]('`state`\x20=\x2022,\x201,\x20null'))),_0x0ca8('0x4b')]]})[_0x0ca8('0x16')](handleEntityNotFound(_0x40c041,null))[_0x0ca8('0x16')](respondWithResult(_0x40c041,null))['catch'](handleError(_0x40c041,null));};exports[_0x0ca8('0x4c')]=function(_0x254849,_0x4a8b18,_0x28e0b7){return db[_0x0ca8('0x1b')]['findAll']({'raw':![],'where':{'CampaignId':_0x254849[_0x0ca8('0x3b')]['id']},'attributes':[[db['sequelize']['fn']('COUNT',db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')][_0x0ca8('0x3e')]('`state`\x20=\x200,\x201,\x20null'))),_0x0ca8('0x40')],[db['sequelize']['fn']('COUNT',db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')][_0x0ca8('0x3e')](_0x0ca8('0x41')))),_0x0ca8('0x42')],[db[_0x0ca8('0x3d')]['fn'](_0x0ca8('0x43'),db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')]['literal'](_0x0ca8('0x44')))),_0x0ca8('0x45')],[db[_0x0ca8('0x3d')]['fn'](_0x0ca8('0x43'),db['sequelize']['fn']('IF',db[_0x0ca8('0x3d')][_0x0ca8('0x3e')](_0x0ca8('0x4d')))),'congestionContacts'],[db[_0x0ca8('0x3d')]['fn']('COUNT',db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')][_0x0ca8('0x3e')](_0x0ca8('0x47')))),_0x0ca8('0x48')],[db['sequelize']['fn'](_0x0ca8('0x43'),db[_0x0ca8('0x3d')]['fn']('IF',db[_0x0ca8('0x3d')][_0x0ca8('0x3e')](_0x0ca8('0x49')))),_0x0ca8('0x4a')],[db[_0x0ca8('0x3d')]['fn'](_0x0ca8('0x43'),db[_0x0ca8('0x3d')]['fn']('IF',db['sequelize'][_0x0ca8('0x3e')](_0x0ca8('0x4e')))),_0x0ca8('0x4b')]]})[_0x0ca8('0x16')](handleEntityNotFound(_0x4a8b18,null))[_0x0ca8('0x16')](respondWithResult(_0x4a8b18,null))[_0x0ca8('0x34')](handleError(_0x4a8b18,null));};exports[_0x0ca8('0x4f')]=function(_0x141668,_0x2fc2e1,_0x471963){return db['VoiceQueue']['find']({'where':{'id':_0x141668[_0x0ca8('0x3b')]['id']}})['then'](handleEntityNotFound(_0x2fc2e1,null))['then'](function(_0x1d07e4){var _0x1ebfe0;if(_0x1d07e4){_0x1ebfe0=squel['insert']()[_0x0ca8('0x50')]('cm_hopper')['fromQuery']([_0x0ca8('0x51'),_0x0ca8('0x52'),_0x0ca8('0x53'),_0x0ca8('0x54'),_0x0ca8('0x55'),_0x0ca8('0x56'),'updatedAt'],squel[_0x0ca8('0x57')]()[_0x0ca8('0x58')](_0x0ca8('0x59'),'phone')[_0x0ca8('0x58')](_0x0ca8('0x5a'),_0x0ca8('0x52'))[_0x0ca8('0x58')](_0x0ca8('0x5b'),'ContactId')[_0x0ca8('0x58')](_0x0ca8('0x5c'),_0x0ca8('0x54'))[_0x0ca8('0x58')]('ANY_VALUE(VoiceQueueId)','VoiceQueueId')[_0x0ca8('0x58')](_0x0ca8('0x5a'),_0x0ca8('0x56'))['field'](_0x0ca8('0x5a'),_0x0ca8('0x5d'))[_0x0ca8('0x5e')](_0x0ca8('0x5f'))[_0x0ca8('0x29')](_0x0ca8('0x60'),_0x141668[_0x0ca8('0x3b')]['id']['toString']())[_0x0ca8('0x29')](_0x0ca8('0x61'),_0x141668[_0x0ca8('0x39')][_0x0ca8('0x62')][_0x0ca8('0x63')]())[_0x0ca8('0x29')](_0x0ca8('0x64'))[_0x0ca8('0x29')](_0x0ca8('0x65'),squel[_0x0ca8('0x57')]()[_0x0ca8('0x58')](_0x0ca8('0x51'))[_0x0ca8('0x5e')](_0x0ca8('0x66'))[_0x0ca8('0x29')](_0x0ca8('0x60'),_0x141668[_0x0ca8('0x3b')]['id']['toString']()))['where'](_0x0ca8('0x65'),squel[_0x0ca8('0x57')]()[_0x0ca8('0x58')](_0x0ca8('0x67'))[_0x0ca8('0x5e')](_0x0ca8('0x5f'))[_0x0ca8('0x29')](_0x0ca8('0x60'),_0x141668[_0x0ca8('0x3b')]['id'][_0x0ca8('0x63')]())[_0x0ca8('0x29')](_0x0ca8('0x68')))[_0x0ca8('0x69')](_0x0ca8('0x53')))[_0x0ca8('0x63')]();return db[_0x0ca8('0x3d')][_0x0ca8('0x1e')](_0x1ebfe0);}return[];})['then'](respondWithResult(_0x2fc2e1,null))[_0x0ca8('0x34')](handleError(_0x2fc2e1,null));};exports[_0x0ca8('0x6a')]=function(_0x992436,_0x122ee2,_0x50bc68){return db[_0x0ca8('0x6b')][_0x0ca8('0x37')]({'where':{'id':_0x992436[_0x0ca8('0x3b')]['id']}})[_0x0ca8('0x16')](handleEntityNotFound(_0x122ee2,null))[_0x0ca8('0x16')](function(_0x4c81af){var _0x5a435c;if(_0x4c81af){_0x5a435c=squel[_0x0ca8('0x6c')]()[_0x0ca8('0x50')](_0x0ca8('0x66'))[_0x0ca8('0x6d')](['phone',_0x0ca8('0x52'),_0x0ca8('0x53'),_0x0ca8('0x54'),'CampaignId',_0x0ca8('0x56'),_0x0ca8('0x5d')],squel[_0x0ca8('0x57')]()[_0x0ca8('0x58')](_0x0ca8('0x59'),'phone')['field'](_0x0ca8('0x5a'),_0x0ca8('0x52'))[_0x0ca8('0x58')](_0x0ca8('0x5b'),_0x0ca8('0x53'))[_0x0ca8('0x58')](_0x0ca8('0x5c'),'ListId')['field'](_0x0ca8('0x6e'),_0x0ca8('0x6f'))['field']('NOW()',_0x0ca8('0x56'))[_0x0ca8('0x58')](_0x0ca8('0x5a'),_0x0ca8('0x5d'))['from']('cm_hopper_final')[_0x0ca8('0x29')]('CampaignId\x20=\x20?',_0x992436['params']['id'][_0x0ca8('0x63')]())[_0x0ca8('0x29')](_0x0ca8('0x61'),_0x992436[_0x0ca8('0x39')][_0x0ca8('0x62')]['toString']())[_0x0ca8('0x29')](_0x0ca8('0x64'))['where'](_0x0ca8('0x65'),squel[_0x0ca8('0x57')]()['field']('phone')[_0x0ca8('0x5e')]('cm_hopper')[_0x0ca8('0x29')](_0x0ca8('0x70'),_0x992436[_0x0ca8('0x3b')]['id'][_0x0ca8('0x63')]()))['where'](_0x0ca8('0x65'),squel[_0x0ca8('0x57')]()[_0x0ca8('0x58')](_0x0ca8('0x67'))[_0x0ca8('0x5e')](_0x0ca8('0x5f'))[_0x0ca8('0x29')]('CampaignId\x20=\x20?',_0x992436['params']['id']['toString']())[_0x0ca8('0x29')](_0x0ca8('0x68')))[_0x0ca8('0x69')]('ContactId'))[_0x0ca8('0x63')]();return db[_0x0ca8('0x3d')][_0x0ca8('0x1e')](_0x5a435c);}return[];})[_0x0ca8('0x16')](respondWithResult(_0x122ee2,null))[_0x0ca8('0x34')](handleError(_0x122ee2,null));};exports[_0x0ca8('0x71')]=function(_0x320949,_0x70f994,_0x5d87bb){return db[_0x0ca8('0x72')][_0x0ca8('0x73')]({'where':{'VoiceQueueId':_0x320949[_0x0ca8('0x39')][_0x0ca8('0x55')],'CampaignId':_0x320949['body']['CampaignId'],'ContactId':_0x320949[_0x0ca8('0x39')][_0x0ca8('0x53')]}})['then'](handleEntityNotFound(_0x70f994,null))['then'](function(_0x187efa){if(_0x187efa){return _0x187efa;}return null;})[_0x0ca8('0x16')](respondWithResult(_0x70f994,null))['catch'](handleError(_0x70f994,null));};
\ No newline at end of file
index 9c5ba99..f47ee0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0295=['calleridnum','lodash','api','request-promise','./cmHopperFinal.attributes','exports','define','CmHopperFinal','cm_hopper_final'];(function(_0x411017,_0x4a8117){var _0x2adeea=function(_0x545222){while(--_0x545222){_0x411017['push'](_0x411017['shift']());}};_0x2adeea(++_0x4a8117);}(_0x0295,0x1f0));var _0x5029=function(_0x4f5de4,_0x286cb4){_0x4f5de4=_0x4f5de4-0x0;var _0x57b780=_0x0295[_0x4f5de4];return _0x57b780;};'use strict';var _=require(_0x5029('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x5029('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x5029('0x2'));var attributes=require(_0x5029('0x3'));module[_0x5029('0x4')]=function(_0x3d0af1,_0x170504){return _0x3d0af1[_0x5029('0x5')](_0x5029('0x6'),attributes,{'tableName':_0x5029('0x7'),'paranoid':![],'indexes':[{'name':_0x5029('0x8'),'fields':['calleridnum']},{'name':'uniqueid','fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0xadb5=['bluebird','./cmHopperFinal.attributes','exports','define','CmHopperFinal','cm_hopper_final','calleridnum','uniqueid','util','api','moment'];(function(_0x433a86,_0x175b5c){var _0x23000c=function(_0x4b1fa0){while(--_0x4b1fa0){_0x433a86['push'](_0x433a86['shift']());}};_0x23000c(++_0x175b5c);}(_0xadb5,0xad));var _0x5adb=function(_0x174f86,_0x525134){_0x174f86=_0x174f86-0x0;var _0x409e0a=_0xadb5[_0x174f86];return _0x409e0a;};'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':[{'name':_0x5adb('0x9'),'fields':[_0x5adb('0x9')]},{'name':_0x5adb('0xa'),'fields':[_0x5adb('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index 237ba45..522eb83 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d5f=['bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','then','info','CmHopperFinal,\x20%s,\x20%s','debug','CmHopperFinal,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','CmHopperFinal','create','options','raw','CreateCmHopperFinal','stringify','lodash','util','moment'];(function(_0x3c64e4,_0x385581){var _0x546166=function(_0x2759c0){while(--_0x2759c0){_0x3c64e4['push'](_0x3c64e4['shift']());}};_0x546166(++_0x385581);}(_0x4d5f,0x89));var _0xf4d5=function(_0x1035c1,_0x2d8583){_0x1035c1=_0x1035c1-0x0;var _0x308d67=_0x4d5f[_0x1035c1];return _0x308d67;};'use strict';var _=require(_0xf4d5('0x0'));var util=require(_0xf4d5('0x1'));var moment=require(_0xf4d5('0x2'));var BPromise=require(_0xf4d5('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xf4d5('0x4'))['db'];var utils=require(_0xf4d5('0x5'));var logger=require(_0xf4d5('0x6'))(_0xf4d5('0x7'));var config=require(_0xf4d5('0x8'));var jayson=require(_0xf4d5('0x9'));var client=jayson[_0xf4d5('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x52a0c1,_0x2c26db,_0x3dd8c6){return new BPromise(function(_0x283049,_0x4f5875){return client['request'](_0x52a0c1,_0x3dd8c6)[_0xf4d5('0xb')](function(_0x318db8){logger[_0xf4d5('0xc')](_0xf4d5('0xd'),_0x2c26db,'request\x20sent');logger[_0xf4d5('0xe')](_0xf4d5('0xf'),_0x2c26db,_0xf4d5('0x10'),JSON['stringify'](_0x318db8));if(_0x318db8['error']){if(_0x318db8[_0xf4d5('0x11')][_0xf4d5('0x12')]===0x1f4){logger[_0xf4d5('0x11')](_0xf4d5('0xd'),_0x2c26db,_0x318db8[_0xf4d5('0x11')][_0xf4d5('0x13')]);return _0x4f5875(_0x318db8[_0xf4d5('0x11')]['message']);}logger['error'](_0xf4d5('0xd'),_0x2c26db,_0x318db8[_0xf4d5('0x11')]['message']);return _0x283049(_0x318db8[_0xf4d5('0x11')]['message']);}else{logger[_0xf4d5('0xc')](_0xf4d5('0xd'),_0x2c26db,_0xf4d5('0x10'));_0x283049(_0x318db8[_0xf4d5('0x14')]['message']);}})[_0xf4d5('0x15')](function(_0x223936){logger['error'](_0xf4d5('0xd'),_0x2c26db,_0x223936);_0x4f5875(_0x223936);});});}exports['CreateCmHopperFinal']=function(_0x246d60){var _0x559cd1=this;return new Promise(function(_0x21fc28,_0x44264e){return db[_0xf4d5('0x16')][_0xf4d5('0x17')](_0x246d60['body'],{'raw':_0x246d60[_0xf4d5('0x18')]?_0x246d60[_0xf4d5('0x18')][_0xf4d5('0x19')]===undefined?!![]:![]:!![]})[_0xf4d5('0xb')](function(_0x149a71){logger[_0xf4d5('0xc')](_0xf4d5('0x1a'),_0x246d60);logger[_0xf4d5('0xe')]('CreateCmHopperFinal',_0x246d60,JSON[_0xf4d5('0x1b')](_0x149a71));_0x21fc28(_0x149a71);})[_0xf4d5('0x15')](function(_0x2ac6fc){logger[_0xf4d5('0x11')]('CreateCmHopperFinal',_0x2ac6fc['message'],_0x246d60);_0x44264e(_0x559cd1[_0xf4d5('0x11')](0x1f4,_0x2ac6fc['message']));});});};
\ No newline at end of file
+var _0x3082=['then','info','request\x20sent','debug','CmHopperFinal,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','CmHopperFinal,\x20%s,\x20%s','CmHopperFinal','create','body','options','raw','CreateCmHopperFinal','lodash','util','moment','bluebird','randomstring','../../mysqldb','rpc','../../config/environment','jayson/promise','client','request'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x3082,0x9d));var _0x2308=function(_0x4ce9d7,_0x55ec6e){_0x4ce9d7=_0x4ce9d7-0x0;var _0x1340c4=_0x3082[_0x4ce9d7];return _0x1340c4;};'use strict';var _=require(_0x2308('0x0'));var util=require(_0x2308('0x1'));var moment=require(_0x2308('0x2'));var BPromise=require(_0x2308('0x3'));var rs=require(_0x2308('0x4'));var fs=require('fs');var db=require(_0x2308('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x2308('0x6'));var config=require(_0x2308('0x7'));var jayson=require(_0x2308('0x8'));var client=jayson[_0x2308('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2bf530,_0x2fe0ce,_0x5481c2){return new BPromise(function(_0x5c4b02,_0x17da77){return client[_0x2308('0xa')](_0x2bf530,_0x5481c2)[_0x2308('0xb')](function(_0x197012){logger[_0x2308('0xc')]('CmHopperFinal,\x20%s,\x20%s',_0x2fe0ce,_0x2308('0xd'));logger[_0x2308('0xe')](_0x2308('0xf'),_0x2fe0ce,_0x2308('0xd'),JSON[_0x2308('0x10')](_0x197012));if(_0x197012[_0x2308('0x11')]){if(_0x197012[_0x2308('0x11')][_0x2308('0x12')]===0x1f4){logger[_0x2308('0x11')]('CmHopperFinal,\x20%s,\x20%s',_0x2fe0ce,_0x197012[_0x2308('0x11')][_0x2308('0x13')]);return _0x17da77(_0x197012[_0x2308('0x11')][_0x2308('0x13')]);}logger[_0x2308('0x11')]('CmHopperFinal,\x20%s,\x20%s',_0x2fe0ce,_0x197012[_0x2308('0x11')][_0x2308('0x13')]);return _0x5c4b02(_0x197012[_0x2308('0x11')][_0x2308('0x13')]);}else{logger['info']('CmHopperFinal,\x20%s,\x20%s',_0x2fe0ce,'request\x20sent');_0x5c4b02(_0x197012['result'][_0x2308('0x13')]);}})[_0x2308('0x14')](function(_0x2880c9){logger[_0x2308('0x11')](_0x2308('0x15'),_0x2fe0ce,_0x2880c9);_0x17da77(_0x2880c9);});});}exports['CreateCmHopperFinal']=function(_0x35300c){var _0x7421b5=this;return new Promise(function(_0x15d9b3,_0x3f88d6){return db[_0x2308('0x16')][_0x2308('0x17')](_0x35300c[_0x2308('0x18')],{'raw':_0x35300c[_0x2308('0x19')]?_0x35300c[_0x2308('0x19')][_0x2308('0x1a')]===undefined?!![]:![]:!![]})[_0x2308('0xb')](function(_0x3f4a88){logger['info'](_0x2308('0x1b'),_0x35300c);logger[_0x2308('0xe')](_0x2308('0x1b'),_0x35300c,JSON[_0x2308('0x10')](_0x3f4a88));_0x15d9b3(_0x3f4a88);})['catch'](function(_0x2e25af){logger[_0x2308('0x11')](_0x2308('0x1b'),_0x2e25af[_0x2308('0x13')],_0x35300c);_0x3f88d6(_0x7421b5['error'](0x1f4,_0x2e25af[_0x2308('0x13')]));});});};
\ No newline at end of file
index 28edca6..e3cea97 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x30bc=['post','/voice/queue/moveContacts/:id','moveContactsQueueCampaignHopperFinal','/voice/campaign/moveContacts/:id','/checkContactHopper','checkContactHopper','update','multer','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmHopperFinal.controller','get','isAuthenticated','index','/describe','describe','/:id','countContactsQueueCampaignHopperFinal','countContactsIvrCampaignHopperFinal'];(function(_0xb0ff05,_0x21565c){var _0x37288d=function(_0x44d247){while(--_0x44d247){_0xb0ff05['push'](_0xb0ff05['shift']());}};_0x37288d(++_0x21565c);}(_0x30bc,0x149));var _0xc30b=function(_0xca1091,_0x539dbf){_0xca1091=_0xca1091-0x0;var _0xd3019c=_0x30bc[_0xca1091];return _0xd3019c;};'use strict';var multer=require(_0xc30b('0x0'));var util=require(_0xc30b('0x1'));var path=require(_0xc30b('0x2'));var express=require('express');var router=express[_0xc30b('0x3')]();var auth=require(_0xc30b('0x4'));var interaction=require(_0xc30b('0x5'));var config=require(_0xc30b('0x6'));var controller=require(_0xc30b('0x7'));router[_0xc30b('0x8')]('/',auth[_0xc30b('0x9')](),controller[_0xc30b('0xa')]);router[_0xc30b('0x8')](_0xc30b('0xb'),auth['isAuthenticated'](),controller[_0xc30b('0xc')]);router[_0xc30b('0x8')](_0xc30b('0xd'),auth[_0xc30b('0x9')](),controller['show']);router[_0xc30b('0x8')]('/voice/queue/countAttributes/:id',auth[_0xc30b('0x9')](),controller[_0xc30b('0xe')]);router['get']('/campaign/countAttributes/:id',auth[_0xc30b('0x9')](),controller[_0xc30b('0xf')]);router[_0xc30b('0x10')](_0xc30b('0x11'),auth[_0xc30b('0x9')](),controller[_0xc30b('0x12')]);router['post'](_0xc30b('0x13'),auth[_0xc30b('0x9')](),controller['moveContactsIvrCampaignHopperFinal']);router[_0xc30b('0x10')](_0xc30b('0x14'),auth['isAuthenticated'](),controller[_0xc30b('0x15')]);router['put']('/:id',auth['isAuthenticated'](),controller[_0xc30b('0x16')]);module['exports']=router;
\ No newline at end of file
+var _0x6726=['/voice/queue/countAttributes/:id','/campaign/countAttributes/:id','countContactsIvrCampaignHopperFinal','post','/voice/queue/moveContacts/:id','moveContactsQueueCampaignHopperFinal','/voice/campaign/moveContacts/:id','moveContactsIvrCampaignHopperFinal','/checkContactHopper','checkContactHopper','put','update','util','path','Router','../../components/auth/service','../../config/environment','get','isAuthenticated','index','describe','/:id','show'];(function(_0x424a9a,_0x2dd9af){var _0xa7831c=function(_0x512534){while(--_0x512534){_0x424a9a['push'](_0x424a9a['shift']());}};_0xa7831c(++_0x2dd9af);}(_0x6726,0xdb));var _0x6672=function(_0x2defb5,_0x1cda14){_0x2defb5=_0x2defb5-0x0;var _0x229c53=_0x6726[_0x2defb5];return _0x229c53;};'use strict';var multer=require('multer');var util=require(_0x6672('0x0'));var path=require(_0x6672('0x1'));var express=require('express');var router=express[_0x6672('0x2')]();var auth=require(_0x6672('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x6672('0x4'));var controller=require('./cmHopperFinal.controller');router[_0x6672('0x5')]('/',auth[_0x6672('0x6')](),controller[_0x6672('0x7')]);router[_0x6672('0x5')]('/describe',auth[_0x6672('0x6')](),controller[_0x6672('0x8')]);router[_0x6672('0x5')](_0x6672('0x9'),auth[_0x6672('0x6')](),controller[_0x6672('0xa')]);router[_0x6672('0x5')](_0x6672('0xb'),auth[_0x6672('0x6')](),controller['countContactsQueueCampaignHopperFinal']);router[_0x6672('0x5')](_0x6672('0xc'),auth['isAuthenticated'](),controller[_0x6672('0xd')]);router[_0x6672('0xe')](_0x6672('0xf'),auth[_0x6672('0x6')](),controller[_0x6672('0x10')]);router[_0x6672('0xe')](_0x6672('0x11'),auth[_0x6672('0x6')](),controller[_0x6672('0x12')]);router['post'](_0x6672('0x13'),auth[_0x6672('0x6')](),controller[_0x6672('0x14')]);router[_0x6672('0x15')](_0x6672('0x9'),auth[_0x6672('0x6')](),controller[_0x6672('0x16')]);module['exports']=router;
\ No newline at end of file
index fc8771d..9aed507 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['DATE','BOOLEAN','sequelize','exports','INTEGER','STRING'];(function(_0x1694f5,_0x49b7c3){var _0x5b4321=function(_0x58c183){while(--_0x58c183){_0x1694f5['push'](_0x1694f5['shift']());}};_0x5b4321(++_0x49b7c3);}(_0x008c,0x188));var _0xc008=function(_0x58a239,_0x4b5d29){_0x58a239=_0x58a239-0x0;var _0x3ba432=_0x008c[_0x58a239];return _0x3ba432;};'use strict';var Sequelize=require(_0xc008('0x0'));module[_0xc008('0x1')]={'state':{'type':Sequelize[_0xc008('0x2')](0x2)},'statedesc':{'type':Sequelize[_0xc008('0x3')]},'scheduledat':{'type':Sequelize[_0xc008('0x4')]},'countbusyretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0xc008('0x2')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0xc008('0x2')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0xc008('0x2')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0xc008('0x3')]},'calleridnum':{'type':Sequelize[_0xc008('0x3')]},'calleridname':{'type':Sequelize[_0xc008('0x3')]},'starttime':{'type':Sequelize[_0xc008('0x4')]},'responsetime':{'type':Sequelize[_0xc008('0x4')]},'answertime':{'type':Sequelize[_0xc008('0x4')]},'droptime':{'type':Sequelize['DATE']},'endtime':{'type':Sequelize[_0xc008('0x4')]},'ringtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0xc008('0x2')],'defaultValue':0x0},'talktime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'followuptime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0xc008('0x3')]},'campaign':{'type':Sequelize[_0xc008('0x3')]},'campaigntype':{'type':Sequelize['STRING']},'membername':{'type':Sequelize['STRING']},'reason':{'type':Sequelize['STRING']},'amd':{'type':Sequelize[_0xc008('0x5')],'defaultValue':![]},'fax':{'type':Sequelize[_0xc008('0x5')],'defaultValue':![]},'callback':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0xc008('0x3')],'defaultValue':null},'callbackat':{'type':Sequelize[_0xc008('0x4')]},'recallme':{'type':Sequelize[_0xc008('0x5')],'defaultValue':![]},'editedat':{'type':Sequelize[_0xc008('0x4')]},'edited':{'type':Sequelize[_0xc008('0x5')],'defaultValue':![]}};
\ No newline at end of file
+var _0x008c=['DATE','BOOLEAN','sequelize','exports','INTEGER','STRING'];(function(_0x199572,_0x33e667){var _0x13cfa3=function(_0x53c075){while(--_0x53c075){_0x199572['push'](_0x199572['shift']());}};_0x13cfa3(++_0x33e667);}(_0x008c,0x188));var _0xc008=function(_0x5b7755,_0x44681c){_0x5b7755=_0x5b7755-0x0;var _0x1a9c39=_0x008c[_0x5b7755];return _0x1a9c39;};'use strict';var Sequelize=require(_0xc008('0x0'));module[_0xc008('0x1')]={'state':{'type':Sequelize[_0xc008('0x2')](0x2)},'statedesc':{'type':Sequelize[_0xc008('0x3')]},'scheduledat':{'type':Sequelize[_0xc008('0x4')]},'countbusyretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0xc008('0x2')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0xc008('0x2')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0xc008('0x2')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0xc008('0x3')]},'calleridnum':{'type':Sequelize[_0xc008('0x3')]},'calleridname':{'type':Sequelize[_0xc008('0x3')]},'starttime':{'type':Sequelize[_0xc008('0x4')]},'responsetime':{'type':Sequelize[_0xc008('0x4')]},'answertime':{'type':Sequelize[_0xc008('0x4')]},'droptime':{'type':Sequelize['DATE']},'endtime':{'type':Sequelize[_0xc008('0x4')]},'ringtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0xc008('0x2')],'defaultValue':0x0},'talktime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'followuptime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0xc008('0x3')]},'campaign':{'type':Sequelize[_0xc008('0x3')]},'campaigntype':{'type':Sequelize['STRING']},'membername':{'type':Sequelize['STRING']},'reason':{'type':Sequelize['STRING']},'amd':{'type':Sequelize[_0xc008('0x5')],'defaultValue':![]},'fax':{'type':Sequelize[_0xc008('0x5')],'defaultValue':![]},'callback':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0xc008('0x3')],'defaultValue':null},'callbackat':{'type':Sequelize[_0xc008('0x4')]},'recallme':{'type':Sequelize[_0xc008('0x5')],'defaultValue':![]},'editedat':{'type':Sequelize[_0xc008('0x4')]},'edited':{'type':Sequelize[_0xc008('0x5')],'defaultValue':![]}};
\ No newline at end of file
index 60bdf1f..527ecd3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb169=['../../config/environment','../../mysqldb','sendStatus','end','status','count','offset','limit','set','Content-Range','json','apply','reject','save','then','destroy','error','stack','name','send','index','CmHopperHistory','query','dateStart','dateEnd','keys','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','add','day','merge','map','options','includeAll','include','findAll','rows','catch','show','find','create','body','describe','update','uniqueid','params','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','../../config/utils'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xb169,0x15c));var _0x9b16=function(_0x1ccbcc,_0x5c948b){_0x1ccbcc=_0x1ccbcc-0x0;var _0x1e873f=_0xb169[_0x1ccbcc];return _0x1e873f;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x9b16('0x0'));var moment=require('moment');var BPromise=require(_0x9b16('0x1'));var Mustache=require(_0x9b16('0x2'));var util=require(_0x9b16('0x3'));var path=require(_0x9b16('0x4'));var sox=require(_0x9b16('0x5'));var csv=require(_0x9b16('0x6'));var ejs=require(_0x9b16('0x7'));var fs=require('fs');var _=require(_0x9b16('0x8'));var squel=require(_0x9b16('0x9'));var crypto=require(_0x9b16('0xa'));var jsforce=require(_0x9b16('0xb'));var deskjs=require(_0x9b16('0xc'));var toCsv=require(_0x9b16('0x6'));var querystring=require(_0x9b16('0xd'));var Papa=require('papaparse');var qs=require(_0x9b16('0xe'));var logger=require(_0x9b16('0xf'))('api');var utils=require(_0x9b16('0x10'));var config=require(_0x9b16('0x11'));var db=require(_0x9b16('0x12'))['db'];function respondWithStatusCode(_0x461e9c,_0x18fa52){_0x18fa52=_0x18fa52||0xcc;return function(_0x5e4323){if(_0x5e4323){return _0x461e9c[_0x9b16('0x13')](_0x18fa52);}return _0x461e9c['status'](_0x18fa52)[_0x9b16('0x14')]();};}function respondWithResult(_0x2ff3e5,_0x370449){_0x370449=_0x370449||0xc8;return function(_0x8f7f87){if(_0x8f7f87){return _0x2ff3e5[_0x9b16('0x15')](_0x370449)['json'](_0x8f7f87);}};}function respondWithFilteredResult(_0x5d8b6e,_0x4f8feb){return function(_0x52a759){if(_0x52a759){var _0xdafc53=_0x52a759[_0x9b16('0x16')],_0x21d24=_0x4f8feb[_0x9b16('0x17')],_0x28666b=_0x4f8feb[_0x9b16('0x17')]+_0x4f8feb[_0x9b16('0x18')],_0x287379;if(_0x28666b>=_0xdafc53){_0x28666b=_0xdafc53;_0x287379=0xc8;}else{_0x287379=0xce;}_0x5d8b6e['status'](_0x287379);return _0x5d8b6e[_0x9b16('0x19')](_0x9b16('0x1a'),_0x21d24+'-'+_0x28666b+'/'+_0xdafc53)[_0x9b16('0x1b')](_0x52a759);}return null;};}function patchUpdates(_0x46e30c){return function(_0x5a2e1b){try{jsonpatch[_0x9b16('0x1c')](_0x5a2e1b,_0x46e30c,!![]);}catch(_0x3c1010){return BPromise[_0x9b16('0x1d')](_0x3c1010);}return _0x5a2e1b[_0x9b16('0x1e')]();};}function saveUpdates(_0x47bc41,_0x2cead0){return function(_0x27fecb){if(_0x27fecb){return _0x27fecb['update'](_0x47bc41)[_0x9b16('0x1f')](function(_0x32e260){return _0x32e260;});}return null;};}function removeEntity(_0x1e8460,_0x181411){return function(_0x17480d){if(_0x17480d){return _0x17480d[_0x9b16('0x20')]()[_0x9b16('0x1f')](function(){_0x1e8460[_0x9b16('0x15')](0xcc)[_0x9b16('0x14')]();});}};}function handleEntityNotFound(_0x11ea13,_0x6c8af5){return function(_0x366fde){if(!_0x366fde){_0x11ea13[_0x9b16('0x13')](0x194);}return _0x366fde;};}function handleError(_0x3a7a17,_0x5a810e){_0x5a810e=_0x5a810e||0x1f4;return function(_0x5e5ddc){logger[_0x9b16('0x21')](_0x5e5ddc[_0x9b16('0x22')]);if(_0x5e5ddc[_0x9b16('0x23')]){delete _0x5e5ddc['name'];}_0x3a7a17['status'](_0x5a810e)[_0x9b16('0x24')](_0x5e5ddc);};}exports[_0x9b16('0x25')]=function(_0x1f6a35,_0x5d4b7c){var _0x2b2a11={},_0x18f968={},_0x2f64a9={'count':0x0,'rows':[]};var _0x189cbb=db[_0x9b16('0x26')]['rawAttributes'];_0x18f968['model']=_['keys'](_0x189cbb);var _0x4846c4={'dateStart':_0x1f6a35[_0x9b16('0x27')][_0x9b16('0x28')],'dateEnd':_0x1f6a35[_0x9b16('0x27')][_0x9b16('0x29')]};delete _0x1f6a35['query'][_0x9b16('0x28')];delete _0x1f6a35['query']['dateEnd'];_0x18f968['query']=_[_0x9b16('0x2a')](_0x1f6a35['query']);_0x18f968['filters']=_[_0x9b16('0x2b')](_0x18f968[_0x9b16('0x2c')],_0x18f968['query']);_0x2b2a11[_0x9b16('0x2d')]=_[_0x9b16('0x2b')](_0x18f968[_0x9b16('0x2c')],qs[_0x9b16('0x2e')](_0x1f6a35[_0x9b16('0x27')][_0x9b16('0x2e')]));_0x2b2a11[_0x9b16('0x2d')]=_0x2b2a11[_0x9b16('0x2d')][_0x9b16('0x2f')]?_0x2b2a11[_0x9b16('0x2d')]:_0x18f968['model'];if(!_0x1f6a35['query'][_0x9b16('0x30')](_0x9b16('0x31'))){_0x2b2a11[_0x9b16('0x18')]=qs[_0x9b16('0x18')](_0x1f6a35[_0x9b16('0x27')][_0x9b16('0x18')]);_0x2b2a11[_0x9b16('0x17')]=qs[_0x9b16('0x17')](_0x1f6a35['query'][_0x9b16('0x17')]);}_0x2b2a11[_0x9b16('0x32')]=qs['sort'](_0x1f6a35['query'][_0x9b16('0x33')]);_0x2b2a11[_0x9b16('0x34')]=qs[_0x9b16('0x35')](_[_0x9b16('0x36')](_0x1f6a35[_0x9b16('0x27')],_0x18f968['filters']));if(_0x4846c4['dateStart']){if(_0x4846c4[_0x9b16('0x29')]){_0x4846c4[_0x9b16('0x29')]=moment(_0x4846c4['dateEnd'])[_0x9b16('0x37')](0x1,_0x9b16('0x38'));}else{_0x4846c4['dateEnd']=moment(_0x4846c4['dateStart'])[_0x9b16('0x37')](0x1,_0x9b16('0x38'));}_['merge'](_0x2b2a11[_0x9b16('0x34')],{'createdAt':{'$gte':_0x4846c4[_0x9b16('0x28')],'$lte':_0x4846c4[_0x9b16('0x29')]}});}if(_0x1f6a35['query']['filter']){_0x2b2a11[_0x9b16('0x34')]=_[_0x9b16('0x39')](_0x2b2a11['where'],{'$or':_[_0x9b16('0x3a')](_0x2b2a11[_0x9b16('0x2d')],function(_0x5b6171){var _0x28b9b3={};_0x28b9b3[_0x5b6171]={'$like':'%'+_0x1f6a35[_0x9b16('0x27')]['filter']+'%'};return _0x28b9b3;})});}_0x2b2a11=_['merge']({},_0x2b2a11,_0x1f6a35[_0x9b16('0x3b')]);var _0x1257c3={'where':_0x2b2a11[_0x9b16('0x34')]};return db[_0x9b16('0x26')]['count'](_0x1257c3)[_0x9b16('0x1f')](function(_0x232022){_0x2f64a9[_0x9b16('0x16')]=_0x232022;if(_0x1f6a35[_0x9b16('0x27')][_0x9b16('0x3c')]){_0x2b2a11[_0x9b16('0x3d')]=[{'all':!![]}];}return db[_0x9b16('0x26')][_0x9b16('0x3e')](_0x2b2a11);})[_0x9b16('0x1f')](function(_0x345ed9){_0x2f64a9[_0x9b16('0x3f')]=_0x345ed9;return _0x2f64a9;})[_0x9b16('0x1f')](respondWithFilteredResult(_0x5d4b7c,_0x2b2a11))[_0x9b16('0x40')](handleError(_0x5d4b7c,null));};exports[_0x9b16('0x41')]=function(_0x5f2240,_0x21658a){var _0xae0e14={'raw':!![],'where':{'id':_0x5f2240['params']['id']}},_0x350af5={};_0x350af5[_0x9b16('0x2c')]=_[_0x9b16('0x2a')](db[_0x9b16('0x26')]['rawAttributes']);_0x350af5[_0x9b16('0x27')]=_[_0x9b16('0x2a')](_0x5f2240[_0x9b16('0x27')]);_0x350af5[_0x9b16('0x35')]=_[_0x9b16('0x2b')](_0x350af5['model'],_0x350af5[_0x9b16('0x27')]);_0xae0e14[_0x9b16('0x2d')]=_[_0x9b16('0x2b')](_0x350af5['model'],qs['fields'](_0x5f2240[_0x9b16('0x27')][_0x9b16('0x2e')]));_0xae0e14[_0x9b16('0x2d')]=_0xae0e14[_0x9b16('0x2d')][_0x9b16('0x2f')]?_0xae0e14[_0x9b16('0x2d')]:_0x350af5[_0x9b16('0x2c')];if(_0x5f2240['query'][_0x9b16('0x3c')]){_0xae0e14['include']=[{'all':!![]}];}_0xae0e14=_['merge']({},_0xae0e14,_0x5f2240[_0x9b16('0x3b')]);return db[_0x9b16('0x26')][_0x9b16('0x42')](_0xae0e14)[_0x9b16('0x1f')](handleEntityNotFound(_0x21658a,null))['then'](respondWithResult(_0x21658a,null))[_0x9b16('0x40')](handleError(_0x21658a,null));};exports[_0x9b16('0x43')]=function(_0x411918,_0x41cd75){return db[_0x9b16('0x26')][_0x9b16('0x43')](_0x411918[_0x9b16('0x44')],{})['then'](respondWithResult(_0x41cd75,0xc9))[_0x9b16('0x40')](handleError(_0x41cd75,null));};exports['describe']=function(_0x23f2d4,_0x3df9e3){return db[_0x9b16('0x26')][_0x9b16('0x45')]()[_0x9b16('0x1f')](respondWithResult(_0x3df9e3,null))[_0x9b16('0x40')](handleError(_0x3df9e3,null));};exports[_0x9b16('0x46')]=function(_0x485712,_0x5a5858){if(_0x485712['body'][_0x9b16('0x47')]){delete _0x485712[_0x9b16('0x44')]['uniqueid'];}return db[_0x9b16('0x26')][_0x9b16('0x42')]({'where':{'uniqueid':_0x485712[_0x9b16('0x48')]['id']}})[_0x9b16('0x1f')](handleEntityNotFound(_0x5a5858,null))[_0x9b16('0x1f')](saveUpdates(_0x485712['body'],null))[_0x9b16('0x1f')](respondWithResult(_0x5a5858,null))['catch'](handleError(_0x5a5858,null));};
\ No newline at end of file
+var _0x8586=['length','hasOwnProperty','order','sort','where','pick','add','day','merge','filter','options','CmHopperHistory','includeAll','include','findAll','params','find','catch','create','describe','uniqueid','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','desk.js','querystring','papaparse','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','end','error','name','send','rawAttributes','model','keys','dateStart','query','dateEnd','filters','attributes','intersection','fields'];(function(_0xb833b1,_0x1c3d3f){var _0x1ab87a=function(_0x1c9f6c){while(--_0x1c9f6c){_0xb833b1['push'](_0xb833b1['shift']());}};_0x1ab87a(++_0x1c3d3f);}(_0x8586,0x1ea));var _0x6858=function(_0x46e523,_0xe6fccb){_0x46e523=_0x46e523-0x0;var _0x5da0ee=_0x8586[_0x46e523];return _0x5da0ee;};'use strict';var jsonpatch=require(_0x6858('0x0'));var rp=require(_0x6858('0x1'));var moment=require(_0x6858('0x2'));var BPromise=require(_0x6858('0x3'));var Mustache=require(_0x6858('0x4'));var util=require(_0x6858('0x5'));var path=require('path');var sox=require(_0x6858('0x6'));var csv=require(_0x6858('0x7'));var ejs=require(_0x6858('0x8'));var fs=require('fs');var _=require(_0x6858('0x9'));var squel=require(_0x6858('0xa'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x6858('0xb'));var toCsv=require(_0x6858('0x7'));var querystring=require(_0x6858('0xc'));var Papa=require(_0x6858('0xd'));var qs=require('../../components/parsers/qs');var logger=require(_0x6858('0xe'))(_0x6858('0xf'));var utils=require('../../config/utils');var config=require(_0x6858('0x10'));var db=require(_0x6858('0x11'))['db'];function respondWithStatusCode(_0x4d7f1b,_0x25fa99){_0x25fa99=_0x25fa99||0xcc;return function(_0x2b4efa){if(_0x2b4efa){return _0x4d7f1b[_0x6858('0x12')](_0x25fa99);}return _0x4d7f1b[_0x6858('0x13')](_0x25fa99)['end']();};}function respondWithResult(_0x2adc71,_0x19c1dd){_0x19c1dd=_0x19c1dd||0xc8;return function(_0x1e22c8){if(_0x1e22c8){return _0x2adc71['status'](_0x19c1dd)[_0x6858('0x14')](_0x1e22c8);}};}function respondWithFilteredResult(_0x18f158,_0x239102){return function(_0x1860ed){if(_0x1860ed){var _0x5d4d17=_0x1860ed[_0x6858('0x15')],_0x2a99d7=_0x239102[_0x6858('0x16')],_0x636db2=_0x239102[_0x6858('0x16')]+_0x239102[_0x6858('0x17')],_0x358d4b;if(_0x636db2>=_0x5d4d17){_0x636db2=_0x5d4d17;_0x358d4b=0xc8;}else{_0x358d4b=0xce;}_0x18f158[_0x6858('0x13')](_0x358d4b);return _0x18f158[_0x6858('0x18')](_0x6858('0x19'),_0x2a99d7+'-'+_0x636db2+'/'+_0x5d4d17)['json'](_0x1860ed);}return null;};}function patchUpdates(_0x2cc3a2){return function(_0x68de7a){try{jsonpatch[_0x6858('0x1a')](_0x68de7a,_0x2cc3a2,!![]);}catch(_0x547452){return BPromise[_0x6858('0x1b')](_0x547452);}return _0x68de7a[_0x6858('0x1c')]();};}function saveUpdates(_0x4be2de,_0x4025a9){return function(_0x3ca6c2){if(_0x3ca6c2){return _0x3ca6c2[_0x6858('0x1d')](_0x4be2de)[_0x6858('0x1e')](function(_0x453579){return _0x453579;});}return null;};}function removeEntity(_0x129959,_0x3911a6){return function(_0x5a179e){if(_0x5a179e){return _0x5a179e[_0x6858('0x1f')]()[_0x6858('0x1e')](function(){_0x129959[_0x6858('0x13')](0xcc)[_0x6858('0x20')]();});}};}function handleEntityNotFound(_0x449212,_0x280d3b){return function(_0x4780bb){if(!_0x4780bb){_0x449212[_0x6858('0x12')](0x194);}return _0x4780bb;};}function handleError(_0xb80cf7,_0x71c295){_0x71c295=_0x71c295||0x1f4;return function(_0x23efb0){logger[_0x6858('0x21')](_0x23efb0['stack']);if(_0x23efb0[_0x6858('0x22')]){delete _0x23efb0[_0x6858('0x22')];}_0xb80cf7['status'](_0x71c295)[_0x6858('0x23')](_0x23efb0);};}exports['index']=function(_0xeac33a,_0x291172){var _0x520359={},_0x18fb8e={},_0x5f4cb5={'count':0x0,'rows':[]};var _0x2e8eb8=db['CmHopperHistory'][_0x6858('0x24')];_0x18fb8e[_0x6858('0x25')]=_[_0x6858('0x26')](_0x2e8eb8);var _0x215e5f={'dateStart':_0xeac33a['query'][_0x6858('0x27')],'dateEnd':_0xeac33a[_0x6858('0x28')][_0x6858('0x29')]};delete _0xeac33a[_0x6858('0x28')]['dateStart'];delete _0xeac33a[_0x6858('0x28')][_0x6858('0x29')];_0x18fb8e['query']=_[_0x6858('0x26')](_0xeac33a[_0x6858('0x28')]);_0x18fb8e[_0x6858('0x2a')]=_['intersection'](_0x18fb8e[_0x6858('0x25')],_0x18fb8e[_0x6858('0x28')]);_0x520359[_0x6858('0x2b')]=_[_0x6858('0x2c')](_0x18fb8e[_0x6858('0x25')],qs[_0x6858('0x2d')](_0xeac33a['query'][_0x6858('0x2d')]));_0x520359[_0x6858('0x2b')]=_0x520359[_0x6858('0x2b')][_0x6858('0x2e')]?_0x520359[_0x6858('0x2b')]:_0x18fb8e[_0x6858('0x25')];if(!_0xeac33a['query'][_0x6858('0x2f')]('nolimit')){_0x520359[_0x6858('0x17')]=qs[_0x6858('0x17')](_0xeac33a[_0x6858('0x28')][_0x6858('0x17')]);_0x520359['offset']=qs[_0x6858('0x16')](_0xeac33a[_0x6858('0x28')][_0x6858('0x16')]);}_0x520359[_0x6858('0x30')]=qs[_0x6858('0x31')](_0xeac33a['query'][_0x6858('0x31')]);_0x520359[_0x6858('0x32')]=qs[_0x6858('0x2a')](_[_0x6858('0x33')](_0xeac33a[_0x6858('0x28')],_0x18fb8e[_0x6858('0x2a')]));if(_0x215e5f[_0x6858('0x27')]){if(_0x215e5f[_0x6858('0x29')]){_0x215e5f[_0x6858('0x29')]=moment(_0x215e5f[_0x6858('0x29')])[_0x6858('0x34')](0x1,_0x6858('0x35'));}else{_0x215e5f['dateEnd']=moment(_0x215e5f[_0x6858('0x27')])['add'](0x1,_0x6858('0x35'));}_[_0x6858('0x36')](_0x520359[_0x6858('0x32')],{'createdAt':{'$gte':_0x215e5f[_0x6858('0x27')],'$lte':_0x215e5f[_0x6858('0x29')]}});}if(_0xeac33a[_0x6858('0x28')][_0x6858('0x37')]){_0x520359[_0x6858('0x32')]=_[_0x6858('0x36')](_0x520359['where'],{'$or':_['map'](_0x520359[_0x6858('0x2b')],function(_0x51e45a){var _0x544db5={};_0x544db5[_0x51e45a]={'$like':'%'+_0xeac33a[_0x6858('0x28')][_0x6858('0x37')]+'%'};return _0x544db5;})});}_0x520359=_[_0x6858('0x36')]({},_0x520359,_0xeac33a[_0x6858('0x38')]);var _0x335c44={'where':_0x520359[_0x6858('0x32')]};return db[_0x6858('0x39')]['count'](_0x335c44)[_0x6858('0x1e')](function(_0x1bbadd){_0x5f4cb5[_0x6858('0x15')]=_0x1bbadd;if(_0xeac33a['query'][_0x6858('0x3a')]){_0x520359[_0x6858('0x3b')]=[{'all':!![]}];}return db[_0x6858('0x39')][_0x6858('0x3c')](_0x520359);})[_0x6858('0x1e')](function(_0x464a8b){_0x5f4cb5['rows']=_0x464a8b;return _0x5f4cb5;})['then'](respondWithFilteredResult(_0x291172,_0x520359))['catch'](handleError(_0x291172,null));};exports['show']=function(_0xb4f1b1,_0x15f21b){var _0xb17e1={'raw':!![],'where':{'id':_0xb4f1b1[_0x6858('0x3d')]['id']}},_0x4f2f70={};_0x4f2f70['model']=_['keys'](db[_0x6858('0x39')][_0x6858('0x24')]);_0x4f2f70[_0x6858('0x28')]=_[_0x6858('0x26')](_0xb4f1b1[_0x6858('0x28')]);_0x4f2f70[_0x6858('0x2a')]=_['intersection'](_0x4f2f70['model'],_0x4f2f70[_0x6858('0x28')]);_0xb17e1[_0x6858('0x2b')]=_[_0x6858('0x2c')](_0x4f2f70[_0x6858('0x25')],qs['fields'](_0xb4f1b1[_0x6858('0x28')][_0x6858('0x2d')]));_0xb17e1['attributes']=_0xb17e1['attributes']['length']?_0xb17e1[_0x6858('0x2b')]:_0x4f2f70[_0x6858('0x25')];if(_0xb4f1b1[_0x6858('0x28')][_0x6858('0x3a')]){_0xb17e1[_0x6858('0x3b')]=[{'all':!![]}];}_0xb17e1=_[_0x6858('0x36')]({},_0xb17e1,_0xb4f1b1[_0x6858('0x38')]);return db[_0x6858('0x39')][_0x6858('0x3e')](_0xb17e1)[_0x6858('0x1e')](handleEntityNotFound(_0x15f21b,null))[_0x6858('0x1e')](respondWithResult(_0x15f21b,null))[_0x6858('0x3f')](handleError(_0x15f21b,null));};exports[_0x6858('0x40')]=function(_0x33c809,_0x3385c5){return db[_0x6858('0x39')][_0x6858('0x40')](_0x33c809['body'],{})[_0x6858('0x1e')](respondWithResult(_0x3385c5,0xc9))[_0x6858('0x3f')](handleError(_0x3385c5,null));};exports[_0x6858('0x41')]=function(_0x174633,_0x5a19f9){return db[_0x6858('0x39')][_0x6858('0x41')]()[_0x6858('0x1e')](respondWithResult(_0x5a19f9,null))[_0x6858('0x3f')](handleError(_0x5a19f9,null));};exports['update']=function(_0x2f684b,_0x34c402){if(_0x2f684b['body']['uniqueid']){delete _0x2f684b['body'][_0x6858('0x42')];}return db['CmHopperHistory'][_0x6858('0x3e')]({'where':{'uniqueid':_0x2f684b[_0x6858('0x3d')]['id']}})[_0x6858('0x1e')](handleEntityNotFound(_0x34c402,null))['then'](saveUpdates(_0x2f684b['body'],null))['then'](respondWithResult(_0x34c402,null))[_0x6858('0x3f')](handleError(_0x34c402,null));};
\ No newline at end of file
index bcc0ee9..c26b68d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2523=['cm_hopper_history','endtime','uniqueid','util','../../config/logger','api','bluebird','request-promise','./cmHopperHistory.attributes','define','CmHopperHistory'];(function(_0x3a371e,_0x37dc4f){var _0x26c039=function(_0x192fc1){while(--_0x192fc1){_0x3a371e['push'](_0x3a371e['shift']());}};_0x26c039(++_0x37dc4f);}(_0x2523,0x100));var _0x3252=function(_0xa36c4d,_0x12d21c){_0xa36c4d=_0xa36c4d-0x0;var _0x405afc=_0x2523[_0xa36c4d];return _0x405afc;};'use strict';var _=require('lodash');var util=require(_0x3252('0x0'));var logger=require(_0x3252('0x1'))(_0x3252('0x2'));var moment=require('moment');var BPromise=require(_0x3252('0x3'));var rp=require(_0x3252('0x4'));var attributes=require(_0x3252('0x5'));module['exports']=function(_0x375f3e,_0x25f784){return _0x375f3e[_0x3252('0x6')](_0x3252('0x7'),attributes,{'tableName':_0x3252('0x8'),'paranoid':![],'indexes':[{'name':_0x3252('0x9'),'fields':[_0x3252('0x9')]},{'name':'uniqueid','fields':[_0x3252('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x6680=['request-promise','./cmHopperHistory.attributes','exports','CmHopperHistory','cm_hopper_history','endtime','lodash','util','../../config/logger','bluebird'];(function(_0x2da1fc,_0x3502bb){var _0x13dd42=function(_0x41c490){while(--_0x41c490){_0x2da1fc['push'](_0x2da1fc['shift']());}};_0x13dd42(++_0x3502bb);}(_0x6680,0x1e6));var _0x0668=function(_0x41ba6a,_0x42c5d9){_0x41ba6a=_0x41ba6a-0x0;var _0x315f92=_0x6680[_0x41ba6a];return _0x315f92;};'use strict';var _=require(_0x0668('0x0'));var util=require(_0x0668('0x1'));var logger=require(_0x0668('0x2'))('api');var moment=require('moment');var BPromise=require(_0x0668('0x3'));var rp=require(_0x0668('0x4'));var attributes=require(_0x0668('0x5'));module[_0x0668('0x6')]=function(_0x3ecefa,_0x3b8344){return _0x3ecefa['define'](_0x0668('0x7'),attributes,{'tableName':_0x0668('0x8'),'paranoid':![],'indexes':[{'name':_0x0668('0x9'),'fields':['endtime']},{'name':'uniqueid','fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index 8552684..8b4fdd8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf12=['sequelize','col','predictiveIntervalTotalCalls','literal','`state`\x20=\x2010,\x201,\x20null','predictiveIntervalDroppedCallsTimeout','COUNT','`state`\x20=\x2011,\x201,\x20null','predictiveIntervalDroppedCallsCallersExit','`state`\x20=\x204,\x20`holdtime`,\x20null','predictiveIntervalAvgHoldtime','AVG','`state`\x20=\x204,\x20`talktime`,\x20null','predictiveIntervalAvgTalktime','catch','campaign','`state`\x20=\x200,\x201,\x20null','outboundNoSuchCallsDay','`state`\x20=\x203,\x201,\x20null','`state`\x20=\x204,\x201,\x20null','outboundAnswerCallsDay','`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','outboundBlacklistCallsDay','`state`\x20=\x2014,\x201,\x20null','outboundOriginateFailureCallsDay','`state`\x20=\x2018,\x201,\x20null','outboundAnswerAgiCallsDay','`state`\x20=\x2020,\x201,\x20null','`state`\x20=\x2022\x20or\x20`state`\x20=\x2023,\x201,\x20null','outboundReCallsDay','GetVoiceQueueHopperHistory','GetCampaignHopperHistory','ivrAnswerCallsDay','util','moment','bluebird','randomstring','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','CmHopperHistory,\x20%s,\x20%s','request\x20sent','debug','CmHopperHistory,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','CmHopperHistory','options','raw','CreateCmHopperHistory','AvgHandleTime','findAll','where'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0xcf12,0x70));var _0x2cf1=function(_0x781979,_0x411054){_0x781979=_0x781979-0x0;var _0x17aa58=_0xcf12[_0x781979];return _0x17aa58;};'use strict';var _=require('lodash');var util=require(_0x2cf1('0x0'));var moment=require(_0x2cf1('0x1'));var BPromise=require(_0x2cf1('0x2'));var rs=require(_0x2cf1('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x2cf1('0x4'))(_0x2cf1('0x5'));var config=require(_0x2cf1('0x6'));var jayson=require(_0x2cf1('0x7'));var client=jayson[_0x2cf1('0x8')][_0x2cf1('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x88ba7b,_0x183266,_0x4c7981){return new BPromise(function(_0x552b35,_0xb586ca){return client['request'](_0x88ba7b,_0x4c7981)[_0x2cf1('0xa')](function(_0x3dbcd2){logger[_0x2cf1('0xb')](_0x2cf1('0xc'),_0x183266,_0x2cf1('0xd'));logger[_0x2cf1('0xe')](_0x2cf1('0xf'),_0x183266,_0x2cf1('0xd'),JSON[_0x2cf1('0x10')](_0x3dbcd2));if(_0x3dbcd2[_0x2cf1('0x11')]){if(_0x3dbcd2[_0x2cf1('0x11')][_0x2cf1('0x12')]===0x1f4){logger[_0x2cf1('0x11')](_0x2cf1('0xc'),_0x183266,_0x3dbcd2[_0x2cf1('0x11')][_0x2cf1('0x13')]);return _0xb586ca(_0x3dbcd2[_0x2cf1('0x11')][_0x2cf1('0x13')]);}logger[_0x2cf1('0x11')](_0x2cf1('0xc'),_0x183266,_0x3dbcd2['error'][_0x2cf1('0x13')]);return _0x552b35(_0x3dbcd2[_0x2cf1('0x11')]['message']);}else{logger['info'](_0x2cf1('0xc'),_0x183266,_0x2cf1('0xd'));_0x552b35(_0x3dbcd2[_0x2cf1('0x14')][_0x2cf1('0x13')]);}})['catch'](function(_0x5e77c6){logger[_0x2cf1('0x11')](_0x2cf1('0xc'),_0x183266,_0x5e77c6);_0xb586ca(_0x5e77c6);});});}exports['CreateCmHopperHistory']=function(_0x2d5562){var _0x161803=this;return new Promise(function(_0x42b222,_0x5a046e){return db[_0x2cf1('0x15')]['create'](_0x2d5562['body'],{'raw':_0x2d5562[_0x2cf1('0x16')]?_0x2d5562[_0x2cf1('0x16')][_0x2cf1('0x17')]===undefined?!![]:![]:!![]})['then'](function(_0x306f9a){logger[_0x2cf1('0xb')]('CreateCmHopperHistory',_0x2d5562);logger[_0x2cf1('0xe')](_0x2cf1('0x18'),_0x2d5562,JSON[_0x2cf1('0x10')](_0x306f9a));_0x42b222(_0x306f9a);})['catch'](function(_0x772ffc){logger[_0x2cf1('0x11')](_0x2cf1('0x18'),_0x772ffc['message'],_0x2d5562);_0x5a046e(_0x161803['error'](0x1f4,_0x772ffc[_0x2cf1('0x13')]));});});};exports[_0x2cf1('0x19')]=function(_0x8a2cba){var _0x1c0e01=this;return new Promise(function(_0x4bffa3,_0x21aff4){return db[_0x2cf1('0x15')][_0x2cf1('0x1a')]({'raw':_0x8a2cba[_0x2cf1('0x16')]?_0x8a2cba[_0x2cf1('0x16')][_0x2cf1('0x17')]===undefined?!![]:![]:!![],'where':_0x8a2cba['options']?_0x8a2cba[_0x2cf1('0x16')][_0x2cf1('0x1b')]||null:null,'attributes':[[db[_0x2cf1('0x1c')]['fn']('COUNT',db[_0x2cf1('0x1c')][_0x2cf1('0x1d')]('id')),_0x2cf1('0x1e')],[db[_0x2cf1('0x1c')]['fn']('COUNT',db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')]('`state`\x20=\x204,\x201,\x20null'))),'predictiveIntervalAnsweredCalls'],[db['sequelize']['fn']('COUNT',db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x20')))),_0x2cf1('0x21')],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x23')))),_0x2cf1('0x24')],[db[_0x2cf1('0x1c')]['fn']('AVG',db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')]['literal'](_0x2cf1('0x25')))),_0x2cf1('0x26')],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x27'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')]['literal'](_0x2cf1('0x28')))),_0x2cf1('0x29')]]})[_0x2cf1('0xa')](function(_0x421f79){logger[_0x2cf1('0xb')](_0x2cf1('0x19'),_0x8a2cba);logger[_0x2cf1('0xe')]('AvgHandleTime',_0x8a2cba,JSON[_0x2cf1('0x10')](_0x421f79));_0x4bffa3(_0x421f79);})[_0x2cf1('0x2a')](function(_0x175b61){logger[_0x2cf1('0x11')]('AvgHandleTime',_0x175b61['message'],_0x8a2cba);_0x21aff4(_0x1c0e01[_0x2cf1('0x11')](0x1f4,_0x175b61[_0x2cf1('0x13')]));});});};exports['GetVoiceQueueHopperHistory']=function(_0x11b5d5){var _0xf1ce39=this;return new Promise(function(_0x3c2deb,_0x419a24){return db[_0x2cf1('0x15')]['findAll']({'raw':_0x11b5d5['options']?_0x11b5d5[_0x2cf1('0x16')][_0x2cf1('0x17')]===undefined?!![]:![]:!![],'where':_0x11b5d5['options']?_0x11b5d5[_0x2cf1('0x16')][_0x2cf1('0x1b')]||null:null,'attributes':[[_0x2cf1('0x2b'),'name'],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db['sequelize']['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x2c')))),_0x2cf1('0x2d')],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')]['literal'](_0x2cf1('0x2e')))),'outboundNoAnswerCallsDay'],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x2f')))),_0x2cf1('0x30')],[db['sequelize']['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x31')))),_0x2cf1('0x32')],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db['sequelize']['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x33')))),_0x2cf1('0x34')],[db[_0x2cf1('0x1c')]['fn']('COUNT',db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x35')))),_0x2cf1('0x36')],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x37')))),_0x2cf1('0x38')],[db['sequelize']['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db['sequelize']['literal'](_0x2cf1('0x39')))),_0x2cf1('0x3a')],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')]('`state`\x20=\x2013,\x201,\x20null'))),_0x2cf1('0x3b')],[db['sequelize']['fn']('COUNT',db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')]['literal'](_0x2cf1('0x3c')))),_0x2cf1('0x3d')],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')]['literal'](_0x2cf1('0x3e')))),'outboundRejectCallsDay'],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')]('`state`\x20=\x2016,\x201,\x20null'))),_0x2cf1('0x3f')],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x40')))),'outboundRejectCallsDay'],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x41')))),_0x2cf1('0x42')]],'group':[_0x2cf1('0x2b')]})['then'](function(_0x41759e){logger[_0x2cf1('0xb')](_0x2cf1('0x43'),_0x11b5d5);logger[_0x2cf1('0xe')]('GetVoiceQueueHopperHistory',_0x11b5d5,JSON['stringify'](_0x41759e));_0x3c2deb(_0x41759e);})[_0x2cf1('0x2a')](function(_0x5da468){logger['error'](_0x2cf1('0x43'),_0x5da468[_0x2cf1('0x13')],_0x11b5d5);_0x419a24(_0xf1ce39[_0x2cf1('0x11')](0x1f4,_0x5da468['message']));});});};exports[_0x2cf1('0x44')]=function(_0x4515b7){var _0x10ab7a=this;return new Promise(function(_0x348447,_0x505054){return db[_0x2cf1('0x15')][_0x2cf1('0x1a')]({'raw':_0x4515b7[_0x2cf1('0x16')]?_0x4515b7[_0x2cf1('0x16')][_0x2cf1('0x17')]===undefined?!![]:![]:!![],'where':_0x4515b7['options']?_0x4515b7[_0x2cf1('0x16')][_0x2cf1('0x1b')]||null:null,'attributes':[[_0x2cf1('0x2b'),'name'],[db['sequelize']['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['col']('id')),'ivrTotalCallsDays'],[db[_0x2cf1('0x1c')]['fn'](_0x2cf1('0x22'),db[_0x2cf1('0x1c')]['fn']('IF',db[_0x2cf1('0x1c')][_0x2cf1('0x1f')](_0x2cf1('0x2f')))),_0x2cf1('0x45')]],'group':[_0x2cf1('0x2b')]})[_0x2cf1('0xa')](function(_0x2c8bd6){logger[_0x2cf1('0xb')](_0x2cf1('0x44'),_0x4515b7);logger[_0x2cf1('0xe')](_0x2cf1('0x44'),_0x4515b7,JSON['stringify'](_0x2c8bd6));_0x348447(_0x2c8bd6);})[_0x2cf1('0x2a')](function(_0xd55e4c){logger['error'](_0x2cf1('0x44'),_0xd55e4c[_0x2cf1('0x13')],_0x4515b7);_0x505054(_0x10ab7a[_0x2cf1('0x11')](0x1f4,_0xd55e4c[_0x2cf1('0x13')]));});});};
\ No newline at end of file
+var _0x863e=['`state`\x20=\x2016,\x201,\x20null','outboundAnswerAgiCallsDay','`state`\x20=\x2022\x20or\x20`state`\x20=\x2023,\x201,\x20null','outboundReCallsDay','ivrTotalCallsDays','ivrAnswerCallsDay','GetCampaignHopperHistory','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','request\x20sent','debug','stringify','error','code','message','CmHopperHistory,\x20%s,\x20%s','result','catch','CreateCmHopperHistory','CmHopperHistory','body','AvgHandleTime','findAll','options','where','sequelize','COUNT','col','predictiveIntervalTotalCalls','`state`\x20=\x204,\x201,\x20null','literal','`state`\x20=\x2010,\x201,\x20null','predictiveIntervalDroppedCallsTimeout','AVG','`state`\x20=\x204,\x20`holdtime`,\x20null','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','GetVoiceQueueHopperHistory','raw','campaign','name','outboundNoSuchCallsDay','`state`\x20=\x203,\x201,\x20null','outboundAnswerCallsDay','`state`\x20=\x205,\x201,\x20null','outboundBusyCallsDay','`state`\x20=\x208,\x201,\x20null','outboundDropCallsDayTimeout','`state`\x20=\x2011\x20,\x201,\x20null','outboundDropCallsDayCallersExit','`state`\x20=\x2012,\x201,\x20null','outboundUnknownCallsDay','outboundBlacklistCallsDay','`state`\x20=\x2014,\x201,\x20null','outboundOriginateFailureCallsDay','`state`\x20=\x2018,\x201,\x20null','outboundRejectCallsDay'];(function(_0x25430a,_0x46ee6c){var _0x5f8fd7=function(_0x19f9dd){while(--_0x19f9dd){_0x25430a['push'](_0x25430a['shift']());}};_0x5f8fd7(++_0x46ee6c);}(_0x863e,0x1ab));var _0xe863=function(_0x26fac8,_0x4c4906){_0x26fac8=_0x26fac8-0x0;var _0x1c54cc=_0x863e[_0x26fac8];return _0x1c54cc;};'use strict';var _=require(_0xe863('0x0'));var util=require(_0xe863('0x1'));var moment=require(_0xe863('0x2'));var BPromise=require(_0xe863('0x3'));var rs=require(_0xe863('0x4'));var fs=require('fs');var db=require(_0xe863('0x5'))['db'];var utils=require(_0xe863('0x6'));var logger=require(_0xe863('0x7'))(_0xe863('0x8'));var config=require(_0xe863('0x9'));var jayson=require(_0xe863('0xa'));var client=jayson[_0xe863('0xb')][_0xe863('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x3ff1fc,_0x427063,_0x3c7a3d){return new BPromise(function(_0x382f04,_0x7adfe7){return client['request'](_0x3ff1fc,_0x3c7a3d)[_0xe863('0xd')](function(_0xfdc40f){logger[_0xe863('0xe')]('CmHopperHistory,\x20%s,\x20%s',_0x427063,_0xe863('0xf'));logger[_0xe863('0x10')]('CmHopperHistory,\x20%s,\x20%s,\x20%s',_0x427063,'request\x20sent',JSON[_0xe863('0x11')](_0xfdc40f));if(_0xfdc40f[_0xe863('0x12')]){if(_0xfdc40f['error'][_0xe863('0x13')]===0x1f4){logger['error']('CmHopperHistory,\x20%s,\x20%s',_0x427063,_0xfdc40f[_0xe863('0x12')][_0xe863('0x14')]);return _0x7adfe7(_0xfdc40f['error']['message']);}logger['error'](_0xe863('0x15'),_0x427063,_0xfdc40f[_0xe863('0x12')][_0xe863('0x14')]);return _0x382f04(_0xfdc40f['error'][_0xe863('0x14')]);}else{logger[_0xe863('0xe')](_0xe863('0x15'),_0x427063,_0xe863('0xf'));_0x382f04(_0xfdc40f[_0xe863('0x16')][_0xe863('0x14')]);}})[_0xe863('0x17')](function(_0x307d2e){logger[_0xe863('0x12')](_0xe863('0x15'),_0x427063,_0x307d2e);_0x7adfe7(_0x307d2e);});});}exports[_0xe863('0x18')]=function(_0x236086){var _0x227915=this;return new Promise(function(_0x323026,_0x24b9cf){return db[_0xe863('0x19')]['create'](_0x236086[_0xe863('0x1a')],{'raw':_0x236086['options']?_0x236086['options']['raw']===undefined?!![]:![]:!![]})[_0xe863('0xd')](function(_0x1db187){logger[_0xe863('0xe')](_0xe863('0x18'),_0x236086);logger[_0xe863('0x10')](_0xe863('0x18'),_0x236086,JSON[_0xe863('0x11')](_0x1db187));_0x323026(_0x1db187);})[_0xe863('0x17')](function(_0x5e6bde){logger['error']('CreateCmHopperHistory',_0x5e6bde[_0xe863('0x14')],_0x236086);_0x24b9cf(_0x227915[_0xe863('0x12')](0x1f4,_0x5e6bde['message']));});});};exports[_0xe863('0x1b')]=function(_0x1177d7){var _0x484419=this;return new Promise(function(_0x40dad4,_0x5720a8){return db[_0xe863('0x19')][_0xe863('0x1c')]({'raw':_0x1177d7['options']?_0x1177d7[_0xe863('0x1d')]['raw']===undefined?!![]:![]:!![],'where':_0x1177d7[_0xe863('0x1d')]?_0x1177d7[_0xe863('0x1d')][_0xe863('0x1e')]||null:null,'attributes':[[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db['sequelize'][_0xe863('0x21')]('id')),_0xe863('0x22')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db['sequelize']['literal'](_0xe863('0x23')))),'predictiveIntervalAnsweredCalls'],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db['sequelize'][_0xe863('0x24')](_0xe863('0x25')))),_0xe863('0x26')],[db['sequelize']['fn']('COUNT',db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')][_0xe863('0x24')]('`state`\x20=\x2011,\x201,\x20null'))),'predictiveIntervalDroppedCallsCallersExit'],[db[_0xe863('0x1f')]['fn'](_0xe863('0x27'),db['sequelize']['fn']('IF',db['sequelize'][_0xe863('0x24')](_0xe863('0x28')))),_0xe863('0x29')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x27'),db[_0xe863('0x1f')]['fn']('IF',db['sequelize'][_0xe863('0x24')]('`state`\x20=\x204,\x20`talktime`,\x20null'))),_0xe863('0x2a')]]})[_0xe863('0xd')](function(_0x1d9c4d){logger['info'](_0xe863('0x1b'),_0x1177d7);logger[_0xe863('0x10')](_0xe863('0x1b'),_0x1177d7,JSON[_0xe863('0x11')](_0x1d9c4d));_0x40dad4(_0x1d9c4d);})[_0xe863('0x17')](function(_0x1feab3){logger['error'](_0xe863('0x1b'),_0x1feab3[_0xe863('0x14')],_0x1177d7);_0x5720a8(_0x484419['error'](0x1f4,_0x1feab3[_0xe863('0x14')]));});});};exports[_0xe863('0x2b')]=function(_0x225102){var _0x227c2d=this;return new Promise(function(_0x1b59e8,_0xbdaa82){return db[_0xe863('0x19')][_0xe863('0x1c')]({'raw':_0x225102[_0xe863('0x1d')]?_0x225102[_0xe863('0x1d')][_0xe863('0x2c')]===undefined?!![]:![]:!![],'where':_0x225102['options']?_0x225102[_0xe863('0x1d')][_0xe863('0x1e')]||null:null,'attributes':[[_0xe863('0x2d'),_0xe863('0x2e')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')]['literal']('`state`\x20=\x200,\x201,\x20null'))),_0xe863('0x2f')],[db[_0xe863('0x1f')]['fn']('COUNT',db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')][_0xe863('0x24')](_0xe863('0x30')))),'outboundNoAnswerCallsDay'],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')]['literal'](_0xe863('0x23')))),_0xe863('0x31')],[db['sequelize']['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db['sequelize'][_0xe863('0x24')](_0xe863('0x32')))),_0xe863('0x33')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')]['literal'](_0xe863('0x34')))),'outboundCongestionCallsDay'],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')]['literal']('`state`\x20=\x2010\x20,\x201,\x20null'))),_0xe863('0x35')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')]['literal'](_0xe863('0x36')))),_0xe863('0x37')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')]['literal'](_0xe863('0x38')))),_0xe863('0x39')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')][_0xe863('0x24')]('`state`\x20=\x2013,\x201,\x20null'))),_0xe863('0x3a')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')]['literal'](_0xe863('0x3b')))),_0xe863('0x3c')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db['sequelize'][_0xe863('0x24')](_0xe863('0x3d')))),_0xe863('0x3e')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db['sequelize']['fn']('IF',db[_0xe863('0x1f')][_0xe863('0x24')](_0xe863('0x3f')))),_0xe863('0x40')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db[_0xe863('0x1f')][_0xe863('0x24')]('`state`\x20=\x2020,\x201,\x20null'))),'outboundRejectCallsDay'],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db['sequelize'][_0xe863('0x24')](_0xe863('0x41')))),_0xe863('0x42')]],'group':[_0xe863('0x2d')]})[_0xe863('0xd')](function(_0x3fbbf5){logger[_0xe863('0xe')](_0xe863('0x2b'),_0x225102);logger[_0xe863('0x10')](_0xe863('0x2b'),_0x225102,JSON[_0xe863('0x11')](_0x3fbbf5));_0x1b59e8(_0x3fbbf5);})[_0xe863('0x17')](function(_0x33e2c9){logger['error'](_0xe863('0x2b'),_0x33e2c9[_0xe863('0x14')],_0x225102);_0xbdaa82(_0x227c2d['error'](0x1f4,_0x33e2c9[_0xe863('0x14')]));});});};exports['GetCampaignHopperHistory']=function(_0x12ad07){var _0x4d8e18=this;return new Promise(function(_0x4c205b,_0x3b5a45){return db[_0xe863('0x19')][_0xe863('0x1c')]({'raw':_0x12ad07[_0xe863('0x1d')]?_0x12ad07[_0xe863('0x1d')]['raw']===undefined?!![]:![]:!![],'where':_0x12ad07[_0xe863('0x1d')]?_0x12ad07[_0xe863('0x1d')][_0xe863('0x1e')]||null:null,'attributes':[[_0xe863('0x2d'),'name'],[db[_0xe863('0x1f')]['fn']('COUNT',db[_0xe863('0x1f')][_0xe863('0x21')]('id')),_0xe863('0x43')],[db[_0xe863('0x1f')]['fn'](_0xe863('0x20'),db[_0xe863('0x1f')]['fn']('IF',db['sequelize'][_0xe863('0x24')](_0xe863('0x23')))),_0xe863('0x44')]],'group':[_0xe863('0x2d')]})[_0xe863('0xd')](function(_0x3673b2){logger[_0xe863('0xe')](_0xe863('0x45'),_0x12ad07);logger[_0xe863('0x10')](_0xe863('0x45'),_0x12ad07,JSON[_0xe863('0x11')](_0x3673b2));_0x4c205b(_0x3673b2);})[_0xe863('0x17')](function(_0x21df4d){logger[_0xe863('0x12')](_0xe863('0x45'),_0x21df4d['message'],_0x12ad07);_0x3b5a45(_0x4d8e18[_0xe863('0x12')](0x1f4,_0x21df4d[_0xe863('0x14')]));});});};
\ No newline at end of file
index b6efdc3..aba8b22 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9a86=['/:id','show','create','put','update','exports','util','express','Router','../../components/auth/service','../../components/interaction/service','./cmHopperHistory.controller','get','/describe','isAuthenticated','describe'];(function(_0x4b055c,_0x4b870b){var _0x4b62bb=function(_0x4884c2){while(--_0x4884c2){_0x4b055c['push'](_0x4b055c['shift']());}};_0x4b62bb(++_0x4b870b);}(_0x9a86,0x1c6));var _0x69a8=function(_0x243b2f,_0x30aa15){_0x243b2f=_0x243b2f-0x0;var _0xcb3c2d=_0x9a86[_0x243b2f];return _0xcb3c2d;};'use strict';var multer=require('multer');var util=require(_0x69a8('0x0'));var path=require('path');var express=require(_0x69a8('0x1'));var router=express[_0x69a8('0x2')]();var auth=require(_0x69a8('0x3'));var interaction=require(_0x69a8('0x4'));var config=require('../../config/environment');var controller=require(_0x69a8('0x5'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x69a8('0x6')](_0x69a8('0x7'),auth[_0x69a8('0x8')](),controller[_0x69a8('0x9')]);router[_0x69a8('0x6')](_0x69a8('0xa'),auth[_0x69a8('0x8')](),controller[_0x69a8('0xb')]);router['post']('/',auth[_0x69a8('0x8')](),controller[_0x69a8('0xc')]);router[_0x69a8('0xd')]('/:id',auth['isAuthenticated'](),controller[_0x69a8('0xe')]);module[_0x69a8('0xf')]=router;
\ No newline at end of file
+var _0xe49f=['../../components/interaction/service','../../config/environment','./cmHopperHistory.controller','get','isAuthenticated','/describe','/:id','show','create','put','update','multer','path','express','Router','../../components/auth/service'];(function(_0x2a6754,_0x277259){var _0x17feda=function(_0x5745be){while(--_0x5745be){_0x2a6754['push'](_0x2a6754['shift']());}};_0x17feda(++_0x277259);}(_0xe49f,0x17b));var _0xfe49=function(_0x3dadbe,_0x564517){_0x3dadbe=_0x3dadbe-0x0;var _0x1ad107=_0xe49f[_0x3dadbe];return _0x1ad107;};'use strict';var multer=require(_0xfe49('0x0'));var util=require('util');var path=require(_0xfe49('0x1'));var express=require(_0xfe49('0x2'));var router=express[_0xfe49('0x3')]();var auth=require(_0xfe49('0x4'));var interaction=require(_0xfe49('0x5'));var config=require(_0xfe49('0x6'));var controller=require(_0xfe49('0x7'));router[_0xfe49('0x8')]('/',auth[_0xfe49('0x9')](),controller['index']);router[_0xfe49('0x8')](_0xfe49('0xa'),auth[_0xfe49('0x9')](),controller['describe']);router[_0xfe49('0x8')](_0xfe49('0xb'),auth[_0xfe49('0x9')](),controller[_0xfe49('0xc')]);router['post']('/',auth[_0xfe49('0x9')](),controller[_0xfe49('0xd')]);router[_0xfe49('0xe')](_0xfe49('0xb'),auth[_0xfe49('0x9')](),controller[_0xfe49('0xf')]);module['exports']=router;
\ No newline at end of file
index 6305113..34cf421 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c5a=['exports','name','STRING','sequelize'];(function(_0x2b8077,_0x453634){var _0x308091=function(_0x426df7){while(--_0x426df7){_0x2b8077['push'](_0x2b8077['shift']());}};_0x308091(++_0x453634);}(_0x9c5a,0x1c3));var _0xa9c5=function(_0x2ec503,_0x51a4d5){_0x2ec503=_0x2ec503-0x0;var _0x36968b=_0x9c5a[_0x2ec503];return _0x36968b;};'use strict';var Sequelize=require(_0xa9c5('0x0'));module[_0xa9c5('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0xa9c5('0x2'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0xa9c5('0x3')]},'dialPrefix':{'type':Sequelize[_0xa9c5('0x3')]}};
\ No newline at end of file
+var _0x7217=['sequelize','STRING','name'];(function(_0x36cd0a,_0x3c3083){var _0x477725=function(_0x2fec48){while(--_0x2fec48){_0x36cd0a['push'](_0x36cd0a['shift']());}};_0x477725(++_0x3c3083);}(_0x7217,0x19e));var _0x7721=function(_0xae7c2f,_0xf31e04){_0xae7c2f=_0xae7c2f-0x0;var _0x5d7001=_0x7217[_0xae7c2f];return _0x5d7001;};'use strict';var Sequelize=require(_0x7721('0x0'));module['exports']={'name':{'type':Sequelize[_0x7721('0x1')],'unique':_0x7721('0x2'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x7721('0x1')]},'dialPrefix':{'type':Sequelize[_0x7721('0x1')]}};
\ No newline at end of file
index 1b2695e..9efa31f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe028=['crypto','desk.js','../../config/logger','api','../../config/environment','socket.io-emitter','localhost','./cmList.socket','register','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','index','CmList','rawAttributes','model','keys','query','dateEnd','dateStart','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','add','day','merge','filter','map','options','includeAll','include','findAll','catch','show','params','find','create','body','describe','addDisposition','ListId','Disposition','getDispositions','findOne','rows','removeDispositions','ids','CmContact','tags','isArray','each','push','dataValues','errors','message','getContacts','CustomFields','concat','format','pick','raw','cf_%d','isEmpty','now','writeFileSync','/tmp/list_%d_%s.csv','setHeader','Content-disposition','attachment;\x20filename=','list_%d_%s.csv','text/csv','download','sequelize','CmCustomField','addCustomFields','Sequelize','TEXT','text','type','number','INTEGER','switch','BOOLEAN','defaultValue','queryInterface','addColumn','cm_contacts','cf_%s','getCustomFields','findAndCountAll','addAgents','omit','spread','emit','userCmList:save','removeAgents','userCmList:remove','getAgents','User','request-promise','moment','bluebird','mustache','util','path','ejs','lodash'];(function(_0x58da07,_0x4abd2e){var _0x247a4c=function(_0x969724){while(--_0x969724){_0x58da07['push'](_0x58da07['shift']());}};_0x247a4c(++_0x4abd2e);}(_0xe028,0x79));var _0x8e02=function(_0x3c9e7c,_0x32b9df){_0x3c9e7c=_0x3c9e7c-0x0;var _0x3ca9e0=_0xe028[_0x3c9e7c];return _0x3ca9e0;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x8e02('0x0'));var moment=require(_0x8e02('0x1'));var BPromise=require(_0x8e02('0x2'));var Mustache=require(_0x8e02('0x3'));var util=require(_0x8e02('0x4'));var path=require(_0x8e02('0x5'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x8e02('0x6'));var fs=require('fs');var _=require(_0x8e02('0x7'));var squel=require('squel');var crypto=require(_0x8e02('0x8'));var jsforce=require('jsforce');var deskjs=require(_0x8e02('0x9'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0x8e02('0xa'))(_0x8e02('0xb'));var utils=require('../../config/utils');var config=require(_0x8e02('0xc'));var db=require('../../mysqldb')['db'];var socket=require(_0x8e02('0xd'))({'host':_0x8e02('0xe'),'port':0x18eb});require(_0x8e02('0xf'))[_0x8e02('0x10')](socket);function respondWithStatusCode(_0x32fcd6,_0x14fb0a){_0x14fb0a=_0x14fb0a||0xcc;return function(_0x3b1a07){if(_0x3b1a07){return _0x32fcd6[_0x8e02('0x11')](_0x14fb0a);}return _0x32fcd6['status'](_0x14fb0a)[_0x8e02('0x12')]();};}function respondWithResult(_0x1a967a,_0x45bff8){_0x45bff8=_0x45bff8||0xc8;return function(_0x1e1287){if(_0x1e1287){return _0x1a967a[_0x8e02('0x13')](_0x45bff8)[_0x8e02('0x14')](_0x1e1287);}};}function respondWithFilteredResult(_0x172f43,_0x5199a2){return function(_0x53da48){if(_0x53da48){var _0x1c4818=_0x53da48[_0x8e02('0x15')],_0x1cb420=_0x5199a2[_0x8e02('0x16')],_0xb9c556=_0x5199a2[_0x8e02('0x16')]+_0x5199a2[_0x8e02('0x17')],_0x53ecc3;if(_0xb9c556>=_0x1c4818){_0xb9c556=_0x1c4818;_0x53ecc3=0xc8;}else{_0x53ecc3=0xce;}_0x172f43['status'](_0x53ecc3);return _0x172f43[_0x8e02('0x18')](_0x8e02('0x19'),_0x1cb420+'-'+_0xb9c556+'/'+_0x1c4818)[_0x8e02('0x14')](_0x53da48);}return null;};}function patchUpdates(_0x18a34c){return function(_0x4d928f){try{jsonpatch[_0x8e02('0x1a')](_0x4d928f,_0x18a34c,!![]);}catch(_0x4e8a56){return BPromise[_0x8e02('0x1b')](_0x4e8a56);}return _0x4d928f[_0x8e02('0x1c')]();};}function saveUpdates(_0x179bc0,_0x100cd6){return function(_0x2352ad){if(_0x2352ad){return _0x2352ad[_0x8e02('0x1d')](_0x179bc0)[_0x8e02('0x1e')](function(_0x4c1788){return _0x4c1788;});}return null;};}function removeEntity(_0x588ac4,_0x278de9){return function(_0x16095b){if(_0x16095b){return _0x16095b[_0x8e02('0x1f')]()['then'](function(){_0x588ac4[_0x8e02('0x13')](0xcc)[_0x8e02('0x12')]();});}};}function handleEntityNotFound(_0x451a0d,_0x4e5178){return function(_0x4e58d9){if(!_0x4e58d9){_0x451a0d[_0x8e02('0x11')](0x194);}return _0x4e58d9;};}function handleError(_0x5f473e,_0x4d5783){_0x4d5783=_0x4d5783||0x1f4;return function(_0x33e83e){logger[_0x8e02('0x20')](_0x33e83e[_0x8e02('0x21')]);if(_0x33e83e[_0x8e02('0x22')]){delete _0x33e83e[_0x8e02('0x22')];}_0x5f473e['status'](_0x4d5783)['send'](_0x33e83e);};}exports[_0x8e02('0x23')]=function(_0xfc6b09,_0x5f008f){var _0x2f5ed1={},_0x2e184d={},_0x1ad269={'count':0x0,'rows':[]};var _0x20cdf9=db[_0x8e02('0x24')][_0x8e02('0x25')];_0x2e184d[_0x8e02('0x26')]=_[_0x8e02('0x27')](_0x20cdf9);var _0x342d3a={'dateStart':_0xfc6b09['query']['dateStart'],'dateEnd':_0xfc6b09[_0x8e02('0x28')][_0x8e02('0x29')]};delete _0xfc6b09['query'][_0x8e02('0x2a')];delete _0xfc6b09[_0x8e02('0x28')][_0x8e02('0x29')];_0x2e184d[_0x8e02('0x28')]=_[_0x8e02('0x27')](_0xfc6b09[_0x8e02('0x28')]);_0x2e184d[_0x8e02('0x2b')]=_['intersection'](_0x2e184d[_0x8e02('0x26')],_0x2e184d[_0x8e02('0x28')]);_0x2f5ed1[_0x8e02('0x2c')]=_[_0x8e02('0x2d')](_0x2e184d[_0x8e02('0x26')],qs[_0x8e02('0x2e')](_0xfc6b09[_0x8e02('0x28')][_0x8e02('0x2e')]));_0x2f5ed1[_0x8e02('0x2c')]=_0x2f5ed1[_0x8e02('0x2c')][_0x8e02('0x2f')]?_0x2f5ed1[_0x8e02('0x2c')]:_0x2e184d[_0x8e02('0x26')];if(!_0xfc6b09['query'][_0x8e02('0x30')](_0x8e02('0x31'))){_0x2f5ed1[_0x8e02('0x17')]=qs[_0x8e02('0x17')](_0xfc6b09[_0x8e02('0x28')][_0x8e02('0x17')]);_0x2f5ed1['offset']=qs[_0x8e02('0x16')](_0xfc6b09[_0x8e02('0x28')][_0x8e02('0x16')]);}_0x2f5ed1[_0x8e02('0x32')]=qs[_0x8e02('0x33')](_0xfc6b09['query']['sort']);_0x2f5ed1[_0x8e02('0x34')]=qs['filters'](_['pick'](_0xfc6b09[_0x8e02('0x28')],_0x2e184d[_0x8e02('0x2b')]));if(_0x342d3a[_0x8e02('0x2a')]){if(_0x342d3a[_0x8e02('0x29')]){_0x342d3a[_0x8e02('0x29')]=moment(_0x342d3a[_0x8e02('0x29')])[_0x8e02('0x35')](0x1,_0x8e02('0x36'));}else{_0x342d3a[_0x8e02('0x29')]=moment(_0x342d3a[_0x8e02('0x2a')])[_0x8e02('0x35')](0x1,_0x8e02('0x36'));}_[_0x8e02('0x37')](_0x2f5ed1[_0x8e02('0x34')],{'createdAt':{'$gte':_0x342d3a[_0x8e02('0x2a')],'$lte':_0x342d3a[_0x8e02('0x29')]}});}if(_0xfc6b09[_0x8e02('0x28')][_0x8e02('0x38')]){_0x2f5ed1['where']=_['merge'](_0x2f5ed1[_0x8e02('0x34')],{'$or':_[_0x8e02('0x39')](_0x2f5ed1[_0x8e02('0x2c')],function(_0x5491ee){var _0x49ddac={};_0x49ddac[_0x5491ee]={'$like':'%'+_0xfc6b09[_0x8e02('0x28')]['filter']+'%'};return _0x49ddac;})});}_0x2f5ed1=_[_0x8e02('0x37')]({},_0x2f5ed1,_0xfc6b09[_0x8e02('0x3a')]);var _0x56ad87={'where':_0x2f5ed1['where']};return db[_0x8e02('0x24')][_0x8e02('0x15')](_0x56ad87)['then'](function(_0x32eb11){_0x1ad269['count']=_0x32eb11;if(_0xfc6b09[_0x8e02('0x28')][_0x8e02('0x3b')]){_0x2f5ed1[_0x8e02('0x3c')]=[{'all':!![]}];}return db[_0x8e02('0x24')][_0x8e02('0x3d')](_0x2f5ed1);})[_0x8e02('0x1e')](function(_0x49c857){_0x1ad269['rows']=_0x49c857;return _0x1ad269;})[_0x8e02('0x1e')](respondWithFilteredResult(_0x5f008f,_0x2f5ed1))[_0x8e02('0x3e')](handleError(_0x5f008f,null));};exports[_0x8e02('0x3f')]=function(_0x4e64d4,_0x4648cd){var _0x23bf2f={'raw':![],'where':{'id':_0x4e64d4[_0x8e02('0x40')]['id']}},_0xa43e7f={};_0xa43e7f[_0x8e02('0x26')]=_[_0x8e02('0x27')](db[_0x8e02('0x24')][_0x8e02('0x25')]);_0xa43e7f[_0x8e02('0x28')]=_['keys'](_0x4e64d4[_0x8e02('0x28')]);_0xa43e7f[_0x8e02('0x2b')]=_['intersection'](_0xa43e7f[_0x8e02('0x26')],_0xa43e7f[_0x8e02('0x28')]);_0x23bf2f['attributes']=_[_0x8e02('0x2d')](_0xa43e7f[_0x8e02('0x26')],qs[_0x8e02('0x2e')](_0x4e64d4['query'][_0x8e02('0x2e')]));_0x23bf2f[_0x8e02('0x2c')]=_0x23bf2f[_0x8e02('0x2c')][_0x8e02('0x2f')]?_0x23bf2f['attributes']:_0xa43e7f['model'];if(_0x4e64d4['query'][_0x8e02('0x3b')]){_0x23bf2f[_0x8e02('0x3c')]=[{'all':!![]}];}_0x23bf2f=_[_0x8e02('0x37')]({},_0x23bf2f,_0x4e64d4[_0x8e02('0x3a')]);return db[_0x8e02('0x24')][_0x8e02('0x41')](_0x23bf2f)['then'](handleEntityNotFound(_0x4648cd,null))[_0x8e02('0x1e')](respondWithResult(_0x4648cd,null))['catch'](handleError(_0x4648cd,null));};exports[_0x8e02('0x42')]=function(_0x5e3f16,_0x32b42f){return db[_0x8e02('0x24')][_0x8e02('0x42')](_0x5e3f16[_0x8e02('0x43')],{})[_0x8e02('0x1e')](respondWithResult(_0x32b42f,0xc9))['catch'](handleError(_0x32b42f,null));};exports['update']=function(_0x16ecec,_0x18b77b){if(_0x16ecec[_0x8e02('0x43')]['id']){delete _0x16ecec['body']['id'];}return db[_0x8e02('0x24')][_0x8e02('0x41')]({'where':{'id':_0x16ecec[_0x8e02('0x40')]['id']}})[_0x8e02('0x1e')](handleEntityNotFound(_0x18b77b,null))[_0x8e02('0x1e')](saveUpdates(_0x16ecec[_0x8e02('0x43')],null))['then'](respondWithResult(_0x18b77b,null))[_0x8e02('0x3e')](handleError(_0x18b77b,null));};exports['destroy']=function(_0x19df9d,_0x2f4f55){return db[_0x8e02('0x24')][_0x8e02('0x41')]({'where':{'id':_0x19df9d[_0x8e02('0x40')]['id']}})[_0x8e02('0x1e')](handleEntityNotFound(_0x2f4f55,null))['then'](removeEntity(_0x2f4f55,null))[_0x8e02('0x3e')](handleError(_0x2f4f55,null));};exports[_0x8e02('0x44')]=function(_0x41781f,_0x4c0936){return db[_0x8e02('0x24')][_0x8e02('0x44')]()[_0x8e02('0x1e')](respondWithResult(_0x4c0936,null))[_0x8e02('0x3e')](handleError(_0x4c0936,null));};exports[_0x8e02('0x45')]=function(_0x161a8c,_0x3a62c3,_0x35aeb3){if(_0x161a8c[_0x8e02('0x43')]['id']){delete _0x161a8c[_0x8e02('0x43')]['id'];}return db['CmList'][_0x8e02('0x41')]({'where':{'id':_0x161a8c['params']['id']}})[_0x8e02('0x1e')](handleEntityNotFound(_0x3a62c3,null))[_0x8e02('0x1e')](function(_0x2c9704){if(_0x2c9704){_0x161a8c[_0x8e02('0x43')][_0x8e02('0x46')]=_0x2c9704['id'];return db[_0x8e02('0x47')]['create'](_0x161a8c[_0x8e02('0x43')]);}})[_0x8e02('0x1e')](respondWithResult(_0x3a62c3,null))[_0x8e02('0x3e')](handleError(_0x3a62c3,null));};exports[_0x8e02('0x48')]=function(_0x26dd3d,_0x508577,_0x560567){var _0x16a20b={'raw':![],'where':{}};var _0xa98dbd={};var _0x273288={'count':0x0,'rows':[]};return db[_0x8e02('0x24')][_0x8e02('0x49')]({'where':{'id':_0x26dd3d['params']['id']}})[_0x8e02('0x1e')](handleEntityNotFound(_0x508577,null))[_0x8e02('0x1e')](function(_0x3686e4){if(_0x3686e4){_0xa98dbd[_0x8e02('0x26')]=_[_0x8e02('0x27')](db[_0x8e02('0x47')][_0x8e02('0x25')]);_0xa98dbd[_0x8e02('0x28')]=_['keys'](_0x26dd3d[_0x8e02('0x28')]);_0xa98dbd[_0x8e02('0x2b')]=_[_0x8e02('0x2d')](_0xa98dbd[_0x8e02('0x26')],_0xa98dbd[_0x8e02('0x28')]);_0x16a20b[_0x8e02('0x2c')]=_['intersection'](_0xa98dbd['model'],qs[_0x8e02('0x2e')](_0x26dd3d[_0x8e02('0x28')][_0x8e02('0x2e')]));_0x16a20b[_0x8e02('0x2c')]=_0x16a20b[_0x8e02('0x2c')][_0x8e02('0x2f')]?_0x16a20b[_0x8e02('0x2c')]:_0xa98dbd[_0x8e02('0x26')];if(!_0x26dd3d['query'][_0x8e02('0x30')](_0x8e02('0x31'))){_0x16a20b[_0x8e02('0x17')]=qs['limit'](_0x26dd3d['query'][_0x8e02('0x17')]);_0x16a20b[_0x8e02('0x16')]=qs[_0x8e02('0x16')](_0x26dd3d[_0x8e02('0x28')][_0x8e02('0x16')]);}_0x16a20b[_0x8e02('0x32')]=qs['sort'](_0x26dd3d[_0x8e02('0x28')][_0x8e02('0x33')]);_0x16a20b[_0x8e02('0x34')]=qs[_0x8e02('0x2b')](_['pick'](_0x26dd3d[_0x8e02('0x28')],_0xa98dbd['filters']));_0x16a20b[_0x8e02('0x34')][_0x8e02('0x46')]=_0x3686e4['id'];if(_0x26dd3d[_0x8e02('0x28')][_0x8e02('0x38')]){_0x16a20b[_0x8e02('0x34')]=_['merge'](_0x16a20b[_0x8e02('0x34')],{'$or':_['map'](_0x16a20b[_0x8e02('0x2c')],function(_0x35c786){var _0x380d9b={};_0x380d9b[_0x35c786]={'$like':'%'+_0x26dd3d[_0x8e02('0x28')][_0x8e02('0x38')]+'%'};return _0x380d9b;})});}_0x16a20b=_[_0x8e02('0x37')]({},_0x16a20b,_0x26dd3d[_0x8e02('0x3a')]);return db[_0x8e02('0x47')][_0x8e02('0x15')]({'where':_0x16a20b['where']})['then'](function(_0x522289){_0x273288[_0x8e02('0x15')]=_0x522289;if(_0x26dd3d['query'][_0x8e02('0x3b')]){_0x16a20b[_0x8e02('0x3c')]=[{'all':!![]}];}return db[_0x8e02('0x47')][_0x8e02('0x3d')](_0x16a20b);})[_0x8e02('0x1e')](function(_0x105ec4){_0x273288[_0x8e02('0x4a')]=_0x105ec4;return _0x273288;});}})[_0x8e02('0x1e')](respondWithFilteredResult(_0x508577,_0x16a20b))[_0x8e02('0x3e')](handleError(_0x508577,null));};exports['removeDispositions']=function(_0x5917fa,_0x299614,_0x2cdd0a){var _0x2da920;return db['CmList'][_0x8e02('0x41')]({'where':{'id':_0x5917fa[_0x8e02('0x40')]['id']}})[_0x8e02('0x1e')](handleEntityNotFound(_0x299614,null))[_0x8e02('0x1e')](function(_0x573220){if(_0x573220){return _0x573220[_0x8e02('0x4b')](_0x5917fa[_0x8e02('0x28')][_0x8e02('0x4c')]);}})[_0x8e02('0x1e')](respondWithStatusCode(_0x299614,null))[_0x8e02('0x3e')](handleError(_0x299614,null));};exports['addContacts']=function(_0x480b96,_0x198f39,_0x2a8f41){return db['CmList']['find']({'where':{'id':_0x480b96['params']['id']}})[_0x8e02('0x1e')](handleEntityNotFound(_0x198f39,null))[_0x8e02('0x1e')](function(_0x32d8aa){if(_0x32d8aa){var _0x406db1=[];var _0x42ceb5={'success':[],'errors':[]};return db[_0x8e02('0x4d')]['describe']()['then'](function(_0x20a586){if(_0x480b96[_0x8e02('0x43')][_0x8e02('0x4e')]&&_[_0x8e02('0x4f')](_0x480b96[_0x8e02('0x43')]['tags'])){if(_0x480b96[_0x8e02('0x43')][_0x8e02('0x4e')][_0x8e02('0x2f')]){_0x480b96['body']['tags']=_0x480b96[_0x8e02('0x43')]['tags']['join'](';')+';';}else{_0x480b96[_0x8e02('0x43')][_0x8e02('0x4e')]=null;}}else{_0x480b96['body']['tags']=null;}if(_0x480b96[_0x8e02('0x43')]&&_[_0x8e02('0x4f')](_0x480b96['body'])){for(var _0x1aaefa=0x0;_0x1aaefa<_0x480b96[_0x8e02('0x43')][_0x8e02('0x2f')];_0x1aaefa+=0x1){_0x480b96['body'][_0x1aaefa][_0x8e02('0x46')]=_0x480b96['params']['id'];_0x406db1['push'](_0x480b96[_0x8e02('0x43')][_0x1aaefa]);}return BPromise[_0x8e02('0x50')](_0x406db1,function(_0x38c51d){return db[_0x8e02('0x4d')][_0x8e02('0x42')](_['omit'](_0x38c51d,[_0x8e02('0x4c'),'id'])||{},{'fields':_[_0x8e02('0x27')](_0x20a586),'raw':!![]})['then'](function(_0x5ee1a7){_0x42ceb5['success'][_0x8e02('0x51')](_0x5ee1a7[_0x8e02('0x52')]);})[_0x8e02('0x3e')](function(_0x5eb00e){_0x42ceb5[_0x8e02('0x53')]['push']({'data':_0x38c51d,'error':_0x5eb00e[_0x8e02('0x54')]});});})['then'](function(_0x59e2ce){return _0x42ceb5;})[_0x8e02('0x3e')](function(_0x254b3c){return _0x254b3c;});}else{_0x198f39['status'](0x190)[_0x8e02('0x14')]({'message':'Malformed\x20request\x20syntax'});}});}})[_0x8e02('0x1e')](respondWithResult(_0x198f39,null))[_0x8e02('0x3e')](handleError(_0x198f39,null));};exports[_0x8e02('0x55')]=function(_0x24f3cb,_0x2d995a,_0x1cc189){var _0x85e2ef;return db['CmList'][_0x8e02('0x41')]({'where':{'id':_0x24f3cb[_0x8e02('0x40')]['id']},'include':[{'model':db['CmCustomField'],'as':_0x8e02('0x56')}]})[_0x8e02('0x1e')](handleEntityNotFound(_0x2d995a,null))[_0x8e02('0x1e')](function(_0x33a20c){if(_0x33a20c){_0x85e2ef=_0x33a20c;return db[_0x8e02('0x4d')][_0x8e02('0x25')];}})[_0x8e02('0x1e')](function(_0xa2f6ba){if(_0xa2f6ba){var _0x36c13b={};var _0xb7c91e={};_0xb7c91e[_0x8e02('0x26')]=_[_0x8e02('0x57')](_[_0x8e02('0x27')](_0xa2f6ba),_[_0x8e02('0x39')](_0x85e2ef['CustomFields'],function(_0x3e7181){return util[_0x8e02('0x58')]('cf_%d',_0x3e7181['id']);}));_0xb7c91e[_0x8e02('0x28')]=_[_0x8e02('0x27')](_0x24f3cb[_0x8e02('0x28')]);_0xb7c91e[_0x8e02('0x2b')]=_[_0x8e02('0x2d')](_0xb7c91e['model'],_0xb7c91e[_0x8e02('0x28')]);_0x36c13b['attributes']=_[_0x8e02('0x2d')](_0xb7c91e['model'],qs['fields'](_0x24f3cb['query'][_0x8e02('0x2e')]));_0x36c13b[_0x8e02('0x2c')]=_0x36c13b[_0x8e02('0x2c')][_0x8e02('0x2f')]?_0x36c13b['attributes']:_0xb7c91e[_0x8e02('0x26')];if(!_0x24f3cb[_0x8e02('0x28')][_0x8e02('0x30')](_0x8e02('0x31'))){_0x36c13b[_0x8e02('0x17')]=qs['limit'](_0x24f3cb['query'][_0x8e02('0x17')]);_0x36c13b[_0x8e02('0x16')]=qs[_0x8e02('0x16')](_0x24f3cb[_0x8e02('0x28')][_0x8e02('0x16')]);}_0x36c13b[_0x8e02('0x32')]=qs[_0x8e02('0x33')](_0x24f3cb[_0x8e02('0x28')][_0x8e02('0x33')]);_0x36c13b[_0x8e02('0x34')]=qs[_0x8e02('0x2b')](_[_0x8e02('0x59')](_0x24f3cb['query'],_0xb7c91e[_0x8e02('0x2b')]));_0x36c13b[_0x8e02('0x5a')]=!![];if(_0x24f3cb[_0x8e02('0x28')]['filter']){_0x36c13b['where']=_['merge'](_0x36c13b[_0x8e02('0x34')],{'$or':_[_0x8e02('0x39')](_0x36c13b[_0x8e02('0x2c')],function(_0x1081de){var _0x2b75b7={};_0x2b75b7[_0x1081de]={'$like':'%'+_0x24f3cb[_0x8e02('0x28')]['filter']+'%'};return _0x2b75b7;})});}_0x36c13b=_['merge']({},_0x36c13b,_0x24f3cb[_0x8e02('0x3a')]);return _0x85e2ef[_0x8e02('0x55')](_0x36c13b);}})[_0x8e02('0x1e')](respondWithResult(_0x2d995a,null))[_0x8e02('0x3e')](handleError(_0x2d995a,null));};exports['getContactsCsv']=function(_0x50b7f1,_0x549509,_0x4e7063){var _0x55f217;return db[_0x8e02('0x24')][_0x8e02('0x41')]({'where':{'id':_0x50b7f1['params']['id']},'include':[{'model':db['CmCustomField'],'as':_0x8e02('0x56')}]})['then'](handleEntityNotFound(_0x549509,null))[_0x8e02('0x1e')](function(_0x343522){if(_0x343522){_0x55f217=_0x343522;return db[_0x8e02('0x4d')]['rawAttributes'];}})[_0x8e02('0x1e')](function(_0xcb5065){if(_0xcb5065){var _0x134907={};var _0x13d15c={};_0x13d15c[_0x8e02('0x26')]=_[_0x8e02('0x57')](_[_0x8e02('0x27')](_0xcb5065),_['map'](_0x55f217[_0x8e02('0x56')],function(_0x37c74c){return util[_0x8e02('0x58')](_0x8e02('0x5b'),_0x37c74c['id']);}));_0x13d15c[_0x8e02('0x28')]=_[_0x8e02('0x27')](_0x50b7f1[_0x8e02('0x28')]);_0x13d15c[_0x8e02('0x2b')]=_[_0x8e02('0x2d')](_0x13d15c['model'],_0x13d15c[_0x8e02('0x28')]);_0x134907[_0x8e02('0x2c')]=_['intersection'](_0x13d15c[_0x8e02('0x26')],qs[_0x8e02('0x2e')](_0x50b7f1[_0x8e02('0x28')][_0x8e02('0x2e')]));_0x134907['attributes']=_0x134907[_0x8e02('0x2c')][_0x8e02('0x2f')]?_0x134907[_0x8e02('0x2c')]:_0x13d15c['model'];if(!_0x50b7f1[_0x8e02('0x28')][_0x8e02('0x30')]('nolimit')){_0x134907['limit']=qs[_0x8e02('0x17')](_0x50b7f1[_0x8e02('0x28')]['limit']);_0x134907[_0x8e02('0x16')]=qs[_0x8e02('0x16')](_0x50b7f1[_0x8e02('0x28')][_0x8e02('0x16')]);}_0x134907[_0x8e02('0x32')]=qs[_0x8e02('0x33')](_0x50b7f1[_0x8e02('0x28')][_0x8e02('0x33')]);_0x134907[_0x8e02('0x34')]=qs['filters'](_[_0x8e02('0x59')](_0x50b7f1[_0x8e02('0x28')],_0x13d15c[_0x8e02('0x2b')]));_0x134907[_0x8e02('0x5a')]=!![];if(_0x50b7f1['query'][_0x8e02('0x38')]){_0x134907[_0x8e02('0x34')]=_[_0x8e02('0x37')](_0x134907['where'],{'$or':_[_0x8e02('0x39')](_0x134907[_0x8e02('0x2c')],function(_0x11d7d2){var _0x76e963={};_0x76e963[_0x11d7d2]={'$like':'%'+_0x50b7f1[_0x8e02('0x28')][_0x8e02('0x38')]+'%'};return _0x76e963;})});}_0x134907=_[_0x8e02('0x37')]({},_0x134907,_0x50b7f1[_0x8e02('0x3a')]);return _0x55f217['getContacts'](_0x134907);}})[_0x8e02('0x1e')](function(_0x76a56b){if(!_[_0x8e02('0x5c')](_0x76a56b)){var _0x2e63b2=toCsv(_0x76a56b);var _0x12f03e=Date[_0x8e02('0x5d')]();fs[_0x8e02('0x5e')](util[_0x8e02('0x58')](_0x8e02('0x5f'),_0x55f217['id'],_0x12f03e),_0x2e63b2);_0x549509[_0x8e02('0x60')](_0x8e02('0x61'),_0x8e02('0x62')+util[_0x8e02('0x58')](_0x8e02('0x63'),_0x55f217['id'],_0x12f03e));_0x549509[_0x8e02('0x60')]('Content-type',_0x8e02('0x64'));return _0x549509[_0x8e02('0x65')](util[_0x8e02('0x58')]('/tmp/list_%d_%s.csv',_0x55f217['id'],_0x12f03e));}else{return _0x549509[_0x8e02('0x11')](0xcc);}})[_0x8e02('0x3e')](handleError(_0x549509,null));};exports['addCustomField']=function(_0x45c594,_0x408bb9,_0x5e5abf){var _0x54aaf1;delete _0x45c594['body']['id'];return db[_0x8e02('0x24')][_0x8e02('0x49')]({'where':{'id':_0x45c594[_0x8e02('0x40')]['id']}})[_0x8e02('0x1e')](handleEntityNotFound(_0x408bb9,null))[_0x8e02('0x1e')](function(_0x1a8072){if(_0x1a8072){return db[_0x8e02('0x66')]['transaction'](function(_0x16d2e2){return db[_0x8e02('0x67')][_0x8e02('0x42')](_0x45c594[_0x8e02('0x43')],{'transaction':_0x16d2e2})[_0x8e02('0x1e')](function(_0x3f5447){_0x54aaf1=_0x3f5447;return _0x1a8072[_0x8e02('0x68')](_0x3f5447,{'transaction':_0x16d2e2});})['then'](function(){var _0x5d7405={'type':db[_0x8e02('0x69')][_0x8e02('0x6a')],'transaction':_0x16d2e2};switch(_0x45c594[_0x8e02('0x43')]['type']){case _0x8e02('0x6b'):_0x5d7405[_0x8e02('0x6c')]=db['Sequelize'][_0x8e02('0x6a')];break;case _0x8e02('0x6d'):_0x5d7405['type']=db[_0x8e02('0x69')][_0x8e02('0x6e')];break;case _0x8e02('0x6f'):_0x5d7405[_0x8e02('0x6c')]=db[_0x8e02('0x69')][_0x8e02('0x70')];_0x5d7405[_0x8e02('0x71')]=![];break;default:}return db['sequelize'][_0x8e02('0x72')][_0x8e02('0x73')](_0x8e02('0x74'),util[_0x8e02('0x58')](_0x8e02('0x75'),_0x54aaf1['id']),_0x5d7405);})['then'](function(){return _0x54aaf1;});});}})[_0x8e02('0x1e')](respondWithResult(_0x408bb9,null))[_0x8e02('0x3e')](handleError(_0x408bb9,null));};exports[_0x8e02('0x76')]=function(_0x3baf1e,_0x45bb66,_0x31e8a8){var _0x3ad4c0={};var _0x56f88a={};var _0x267d1b;var _0x1b21bd;return db[_0x8e02('0x24')]['findOne']({'where':{'id':_0x3baf1e[_0x8e02('0x40')]['id']}})['then'](handleEntityNotFound(_0x45bb66,null))['then'](function(_0x417a84){if(_0x417a84){_0x267d1b=_0x417a84;_0x56f88a['model']=_[_0x8e02('0x27')](db[_0x8e02('0x67')]['rawAttributes']);_0x56f88a['query']=_[_0x8e02('0x27')](_0x3baf1e[_0x8e02('0x28')]);_0x56f88a[_0x8e02('0x2b')]=_[_0x8e02('0x2d')](_0x56f88a['model'],_0x56f88a[_0x8e02('0x28')]);_0x3ad4c0[_0x8e02('0x2c')]=_[_0x8e02('0x2d')](_0x56f88a[_0x8e02('0x26')],qs[_0x8e02('0x2e')](_0x3baf1e[_0x8e02('0x28')][_0x8e02('0x2e')]));_0x3ad4c0[_0x8e02('0x2c')]=_0x3ad4c0['attributes'][_0x8e02('0x2f')]?_0x3ad4c0['attributes']:_0x56f88a[_0x8e02('0x26')];_0x3ad4c0['order']=qs[_0x8e02('0x33')](_0x3baf1e['query'][_0x8e02('0x33')]);_0x3ad4c0['where']=qs[_0x8e02('0x2b')](_[_0x8e02('0x59')](_0x3baf1e[_0x8e02('0x28')],_0x56f88a['filters']));_0x3ad4c0[_0x8e02('0x34')]=_[_0x8e02('0x37')](_0x3ad4c0[_0x8e02('0x34')],{'$or':[{'ListId':_0x417a84['id']},{'ListId':null}]});if(_0x3baf1e[_0x8e02('0x28')]['filter']){_0x3ad4c0[_0x8e02('0x34')]=_[_0x8e02('0x37')](_0x3ad4c0[_0x8e02('0x34')],{'$or':_[_0x8e02('0x39')](_0x3ad4c0[_0x8e02('0x2c')],function(_0x5ce192){var _0x282e26={};_0x282e26[_0x5ce192]={'$like':'%'+_0x3baf1e[_0x8e02('0x28')][_0x8e02('0x38')]+'%'};return _0x282e26;})});}_0x3ad4c0=_[_0x8e02('0x37')]({},_0x3ad4c0,_0x3baf1e[_0x8e02('0x3a')]);return db[_0x8e02('0x67')][_0x8e02('0x77')](_0x3ad4c0);}})[_0x8e02('0x1e')](respondWithResult(_0x45bb66,null))[_0x8e02('0x3e')](handleError(_0x45bb66,null));};exports[_0x8e02('0x78')]=function(_0x41691f,_0x5911fc,_0x50c7bd){return db[_0x8e02('0x24')][_0x8e02('0x41')]({'where':{'id':_0x41691f[_0x8e02('0x40')]['id']}})[_0x8e02('0x1e')](handleEntityNotFound(_0x5911fc,null))[_0x8e02('0x1e')](function(_0x21f711){if(_0x21f711){return _0x21f711[_0x8e02('0x78')](_0x41691f['body']['ids'],_[_0x8e02('0x79')](_0x41691f[_0x8e02('0x43')],[_0x8e02('0x4c'),'id'])||{})[_0x8e02('0x7a')](function(_0x145787){for(var _0x4bebc1=0x0;_0x4bebc1<_0x41691f[_0x8e02('0x43')][_0x8e02('0x4c')]['length'];_0x4bebc1+=0x1){socket[_0x8e02('0x7b')](_0x8e02('0x7c'),{'UserId':_0x41691f['body'][_0x8e02('0x4c')][_0x4bebc1],'CmListId':_0x41691f[_0x8e02('0x40')]['id']});}return _0x145787;});}})[_0x8e02('0x1e')](respondWithResult(_0x5911fc,null))['catch'](handleError(_0x5911fc,null));};exports[_0x8e02('0x7d')]=function(_0xad6629,_0x1628bb,_0x2f2a05){var _0x2ba17a;return db[_0x8e02('0x24')]['find']({'where':{'id':_0xad6629[_0x8e02('0x40')]['id']}})[_0x8e02('0x1e')](handleEntityNotFound(_0x1628bb,null))[_0x8e02('0x1e')](function(_0xf68dd4){if(_0xf68dd4){return _0xf68dd4[_0x8e02('0x7d')](_0xad6629[_0x8e02('0x28')][_0x8e02('0x4c')])[_0x8e02('0x1e')](function(_0x4c894a){if(_['isArray'](_0xad6629[_0x8e02('0x28')]['ids'])){for(var _0x188f98=0x0;_0x188f98<_0xad6629[_0x8e02('0x28')][_0x8e02('0x4c')][_0x8e02('0x2f')];_0x188f98+=0x1){socket[_0x8e02('0x7b')](_0x8e02('0x7e'),{'UserId':_0xad6629[_0x8e02('0x28')]['ids'][_0x188f98],'CmListId':_0xad6629['params']['id']});}}else{socket['emit'](_0x8e02('0x7e'),{'UserId':_0xad6629[_0x8e02('0x28')]['ids'],'CmListId':_0xad6629[_0x8e02('0x40')]['id']});}});}})[_0x8e02('0x1e')](respondWithStatusCode(_0x1628bb,null))[_0x8e02('0x3e')](handleError(_0x1628bb,null));};exports[_0x8e02('0x7f')]=function(_0x26c122,_0x4293c1,_0x15b6e2){var _0x109268={};var _0x1c2b4b={};var _0x4e5f5a;var _0x56ced1;return db[_0x8e02('0x24')]['findOne']({'where':{'id':_0x26c122[_0x8e02('0x40')]['id']}})[_0x8e02('0x1e')](handleEntityNotFound(_0x4293c1,null))[_0x8e02('0x1e')](function(_0x4fdc26){if(_0x4fdc26){_0x4e5f5a=_0x4fdc26;_0x1c2b4b[_0x8e02('0x26')]=_[_0x8e02('0x27')](db[_0x8e02('0x80')][_0x8e02('0x25')]);_0x1c2b4b[_0x8e02('0x28')]=_['keys'](_0x26c122[_0x8e02('0x28')]);_0x1c2b4b[_0x8e02('0x2b')]=_[_0x8e02('0x2d')](_0x1c2b4b[_0x8e02('0x26')],_0x1c2b4b[_0x8e02('0x28')]);_0x109268[_0x8e02('0x2c')]=_[_0x8e02('0x2d')](_0x1c2b4b['model'],qs[_0x8e02('0x2e')](_0x26c122[_0x8e02('0x28')]['fields']));_0x109268[_0x8e02('0x2c')]=_0x109268['attributes']['length']?_0x109268[_0x8e02('0x2c')]:_0x1c2b4b['model'];_0x109268['order']=qs[_0x8e02('0x33')](_0x26c122[_0x8e02('0x28')]['sort']);_0x109268[_0x8e02('0x34')]=qs['filters'](_[_0x8e02('0x59')](_0x26c122['query'],_0x1c2b4b[_0x8e02('0x2b')]));if(_0x26c122[_0x8e02('0x28')][_0x8e02('0x38')]){_0x109268[_0x8e02('0x34')]=_[_0x8e02('0x37')](_0x109268[_0x8e02('0x34')],{'$or':_[_0x8e02('0x39')](_0x109268[_0x8e02('0x2c')],function(_0x537d84){var _0x524ccf={};_0x524ccf[_0x537d84]={'$like':'%'+_0x26c122[_0x8e02('0x28')][_0x8e02('0x38')]+'%'};return _0x524ccf;})});}_0x109268=_[_0x8e02('0x37')]({},_0x109268,_0x26c122['options']);return _0x4e5f5a[_0x8e02('0x7f')](_0x109268);}})[_0x8e02('0x1e')](function(_0x11c70a){if(_0x11c70a){_0x56ced1=_0x11c70a[_0x8e02('0x2f')];if(!_0x26c122[_0x8e02('0x28')][_0x8e02('0x30')]('nolimit')){_0x109268[_0x8e02('0x17')]=qs[_0x8e02('0x17')](_0x26c122[_0x8e02('0x28')][_0x8e02('0x17')]);_0x109268[_0x8e02('0x16')]=qs['offset'](_0x26c122[_0x8e02('0x28')]['offset']);}return _0x4e5f5a[_0x8e02('0x7f')](_0x109268);}})[_0x8e02('0x1e')](function(_0x4289fc){if(_0x4289fc){return _0x4289fc?{'count':_0x56ced1,'rows':_0x4289fc}:null;}})[_0x8e02('0x1e')](respondWithResult(_0x4293c1,null))[_0x8e02('0x3e')](handleError(_0x4293c1,null));};
\ No newline at end of file
+var _0x81c4=['attachment;\x20filename=','list_%d_%s.csv','Content-type','text/csv','download','addCustomField','transaction','TEXT','type','Sequelize','number','INTEGER','switch','BOOLEAN','defaultValue','sequelize','queryInterface','addColumn','cm_contacts','cf_%s','getCustomFields','findAndCountAll','addAgents','emit','userCmList:save','removeAgents','userCmList:remove','User','getAgents','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./cmList.socket','register','sendStatus','status','offset','limit','Content-Range','json','apply','then','end','error','name','send','CmList','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','add','day','merge','filter','map','options','count','includeAll','include','rows','catch','create','body','destroy','find','describe','addDisposition','params','ListId','Disposition','getDispositions','findOne','nolimit','findAll','removeDispositions','ids','addContacts','CmContact','isArray','tags','join','push','each','omit','success','dataValues','message','getContacts','CustomFields','concat','format','raw','getContactsCsv','CmCustomField','cf_%d','isEmpty','now','setHeader'];(function(_0x23ce9c,_0x19efc2){var _0x15bac2=function(_0x532b9f){while(--_0x532b9f){_0x23ce9c['push'](_0x23ce9c['shift']());}};_0x15bac2(++_0x19efc2);}(_0x81c4,0x9e));var _0x481c=function(_0x580576,_0x2f107d){_0x580576=_0x580576-0x0;var _0x3f55a0=_0x81c4[_0x580576];return _0x3f55a0;};'use strict';var jsonpatch=require(_0x481c('0x0'));var rp=require(_0x481c('0x1'));var moment=require('moment');var BPromise=require(_0x481c('0x2'));var Mustache=require(_0x481c('0x3'));var util=require(_0x481c('0x4'));var path=require(_0x481c('0x5'));var sox=require(_0x481c('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x481c('0x7'));var squel=require(_0x481c('0x8'));var crypto=require(_0x481c('0x9'));var jsforce=require(_0x481c('0xa'));var deskjs=require(_0x481c('0xb'));var toCsv=require(_0x481c('0xc'));var querystring=require('querystring');var Papa=require(_0x481c('0xd'));var qs=require('../../components/parsers/qs');var logger=require(_0x481c('0xe'))(_0x481c('0xf'));var utils=require(_0x481c('0x10'));var config=require(_0x481c('0x11'));var db=require(_0x481c('0x12'))['db'];var socket=require(_0x481c('0x13'))({'host':_0x481c('0x14'),'port':0x18eb});require(_0x481c('0x15'))[_0x481c('0x16')](socket);function respondWithStatusCode(_0x5e019c,_0x7a9af7){_0x7a9af7=_0x7a9af7||0xcc;return function(_0x318194){if(_0x318194){return _0x5e019c[_0x481c('0x17')](_0x7a9af7);}return _0x5e019c[_0x481c('0x18')](_0x7a9af7)['end']();};}function respondWithResult(_0x240aea,_0x5ecc37){_0x5ecc37=_0x5ecc37||0xc8;return function(_0x221dd2){if(_0x221dd2){return _0x240aea[_0x481c('0x18')](_0x5ecc37)['json'](_0x221dd2);}};}function respondWithFilteredResult(_0x28e4b4,_0x57f25e){return function(_0x5e38be){if(_0x5e38be){var _0x53abf0=_0x5e38be['count'],_0x5c5fa3=_0x57f25e[_0x481c('0x19')],_0x37381c=_0x57f25e[_0x481c('0x19')]+_0x57f25e[_0x481c('0x1a')],_0x3f10e4;if(_0x37381c>=_0x53abf0){_0x37381c=_0x53abf0;_0x3f10e4=0xc8;}else{_0x3f10e4=0xce;}_0x28e4b4[_0x481c('0x18')](_0x3f10e4);return _0x28e4b4['set'](_0x481c('0x1b'),_0x5c5fa3+'-'+_0x37381c+'/'+_0x53abf0)[_0x481c('0x1c')](_0x5e38be);}return null;};}function patchUpdates(_0x1bd9d1){return function(_0x40850d){try{jsonpatch[_0x481c('0x1d')](_0x40850d,_0x1bd9d1,!![]);}catch(_0x2f8a3b){return BPromise['reject'](_0x2f8a3b);}return _0x40850d['save']();};}function saveUpdates(_0x4cf666,_0x295c9a){return function(_0x59f6d8){if(_0x59f6d8){return _0x59f6d8['update'](_0x4cf666)['then'](function(_0x29f76d){return _0x29f76d;});}return null;};}function removeEntity(_0x364157,_0x457adb){return function(_0x22288f){if(_0x22288f){return _0x22288f['destroy']()[_0x481c('0x1e')](function(){_0x364157[_0x481c('0x18')](0xcc)[_0x481c('0x1f')]();});}};}function handleEntityNotFound(_0x41d4e4,_0x51d4c6){return function(_0x548adc){if(!_0x548adc){_0x41d4e4[_0x481c('0x17')](0x194);}return _0x548adc;};}function handleError(_0x209c23,_0x5754dc){_0x5754dc=_0x5754dc||0x1f4;return function(_0x55c95c){logger[_0x481c('0x20')](_0x55c95c['stack']);if(_0x55c95c[_0x481c('0x21')]){delete _0x55c95c[_0x481c('0x21')];}_0x209c23[_0x481c('0x18')](_0x5754dc)[_0x481c('0x22')](_0x55c95c);};}exports['index']=function(_0x18b297,_0x30d541){var _0x2cd334={},_0x44f682={},_0x1db377={'count':0x0,'rows':[]};var _0x1ac18d=db[_0x481c('0x23')][_0x481c('0x24')];_0x44f682[_0x481c('0x25')]=_[_0x481c('0x26')](_0x1ac18d);var _0x4063d2={'dateStart':_0x18b297[_0x481c('0x27')]['dateStart'],'dateEnd':_0x18b297[_0x481c('0x27')]['dateEnd']};delete _0x18b297[_0x481c('0x27')][_0x481c('0x28')];delete _0x18b297[_0x481c('0x27')][_0x481c('0x29')];_0x44f682[_0x481c('0x27')]=_[_0x481c('0x26')](_0x18b297[_0x481c('0x27')]);_0x44f682[_0x481c('0x2a')]=_[_0x481c('0x2b')](_0x44f682[_0x481c('0x25')],_0x44f682[_0x481c('0x27')]);_0x2cd334[_0x481c('0x2c')]=_[_0x481c('0x2b')](_0x44f682[_0x481c('0x25')],qs['fields'](_0x18b297['query'][_0x481c('0x2d')]));_0x2cd334[_0x481c('0x2c')]=_0x2cd334[_0x481c('0x2c')][_0x481c('0x2e')]?_0x2cd334[_0x481c('0x2c')]:_0x44f682[_0x481c('0x25')];if(!_0x18b297[_0x481c('0x27')][_0x481c('0x2f')]('nolimit')){_0x2cd334['limit']=qs[_0x481c('0x1a')](_0x18b297[_0x481c('0x27')][_0x481c('0x1a')]);_0x2cd334[_0x481c('0x19')]=qs[_0x481c('0x19')](_0x18b297[_0x481c('0x27')][_0x481c('0x19')]);}_0x2cd334[_0x481c('0x30')]=qs[_0x481c('0x31')](_0x18b297['query'][_0x481c('0x31')]);_0x2cd334[_0x481c('0x32')]=qs[_0x481c('0x2a')](_[_0x481c('0x33')](_0x18b297['query'],_0x44f682[_0x481c('0x2a')]));if(_0x4063d2[_0x481c('0x28')]){if(_0x4063d2['dateEnd']){_0x4063d2[_0x481c('0x29')]=moment(_0x4063d2[_0x481c('0x29')])[_0x481c('0x34')](0x1,_0x481c('0x35'));}else{_0x4063d2[_0x481c('0x29')]=moment(_0x4063d2[_0x481c('0x28')])[_0x481c('0x34')](0x1,_0x481c('0x35'));}_[_0x481c('0x36')](_0x2cd334[_0x481c('0x32')],{'createdAt':{'$gte':_0x4063d2[_0x481c('0x28')],'$lte':_0x4063d2[_0x481c('0x29')]}});}if(_0x18b297[_0x481c('0x27')][_0x481c('0x37')]){_0x2cd334['where']=_[_0x481c('0x36')](_0x2cd334[_0x481c('0x32')],{'$or':_[_0x481c('0x38')](_0x2cd334[_0x481c('0x2c')],function(_0x5009cf){var _0x3e96ce={};_0x3e96ce[_0x5009cf]={'$like':'%'+_0x18b297['query'][_0x481c('0x37')]+'%'};return _0x3e96ce;})});}_0x2cd334=_[_0x481c('0x36')]({},_0x2cd334,_0x18b297[_0x481c('0x39')]);var _0x26a98f={'where':_0x2cd334['where']};return db[_0x481c('0x23')][_0x481c('0x3a')](_0x26a98f)[_0x481c('0x1e')](function(_0x244161){_0x1db377[_0x481c('0x3a')]=_0x244161;if(_0x18b297[_0x481c('0x27')][_0x481c('0x3b')]){_0x2cd334[_0x481c('0x3c')]=[{'all':!![]}];}return db[_0x481c('0x23')]['findAll'](_0x2cd334);})[_0x481c('0x1e')](function(_0x4ba0f5){_0x1db377[_0x481c('0x3d')]=_0x4ba0f5;return _0x1db377;})[_0x481c('0x1e')](respondWithFilteredResult(_0x30d541,_0x2cd334))[_0x481c('0x3e')](handleError(_0x30d541,null));};exports['show']=function(_0x59f7f3,_0x4f4da3){var _0x2aea77={'raw':![],'where':{'id':_0x59f7f3['params']['id']}},_0x593982={};_0x593982['model']=_[_0x481c('0x26')](db['CmList'][_0x481c('0x24')]);_0x593982[_0x481c('0x27')]=_[_0x481c('0x26')](_0x59f7f3[_0x481c('0x27')]);_0x593982[_0x481c('0x2a')]=_['intersection'](_0x593982[_0x481c('0x25')],_0x593982[_0x481c('0x27')]);_0x2aea77[_0x481c('0x2c')]=_[_0x481c('0x2b')](_0x593982[_0x481c('0x25')],qs[_0x481c('0x2d')](_0x59f7f3[_0x481c('0x27')][_0x481c('0x2d')]));_0x2aea77['attributes']=_0x2aea77[_0x481c('0x2c')][_0x481c('0x2e')]?_0x2aea77['attributes']:_0x593982[_0x481c('0x25')];if(_0x59f7f3[_0x481c('0x27')][_0x481c('0x3b')]){_0x2aea77[_0x481c('0x3c')]=[{'all':!![]}];}_0x2aea77=_['merge']({},_0x2aea77,_0x59f7f3[_0x481c('0x39')]);return db[_0x481c('0x23')]['find'](_0x2aea77)[_0x481c('0x1e')](handleEntityNotFound(_0x4f4da3,null))[_0x481c('0x1e')](respondWithResult(_0x4f4da3,null))['catch'](handleError(_0x4f4da3,null));};exports[_0x481c('0x3f')]=function(_0x2be1df,_0x39b2d0){return db[_0x481c('0x23')]['create'](_0x2be1df[_0x481c('0x40')],{})['then'](respondWithResult(_0x39b2d0,0xc9))[_0x481c('0x3e')](handleError(_0x39b2d0,null));};exports['update']=function(_0x575b82,_0x28671c){if(_0x575b82['body']['id']){delete _0x575b82['body']['id'];}return db['CmList']['find']({'where':{'id':_0x575b82['params']['id']}})[_0x481c('0x1e')](handleEntityNotFound(_0x28671c,null))[_0x481c('0x1e')](saveUpdates(_0x575b82['body'],null))[_0x481c('0x1e')](respondWithResult(_0x28671c,null))[_0x481c('0x3e')](handleError(_0x28671c,null));};exports[_0x481c('0x41')]=function(_0x5d4e3b,_0x38ff7d){return db[_0x481c('0x23')][_0x481c('0x42')]({'where':{'id':_0x5d4e3b['params']['id']}})[_0x481c('0x1e')](handleEntityNotFound(_0x38ff7d,null))[_0x481c('0x1e')](removeEntity(_0x38ff7d,null))['catch'](handleError(_0x38ff7d,null));};exports[_0x481c('0x43')]=function(_0x144e93,_0x562540){return db[_0x481c('0x23')]['describe']()[_0x481c('0x1e')](respondWithResult(_0x562540,null))[_0x481c('0x3e')](handleError(_0x562540,null));};exports[_0x481c('0x44')]=function(_0x3ce02c,_0x8fa030,_0x24ae31){if(_0x3ce02c[_0x481c('0x40')]['id']){delete _0x3ce02c[_0x481c('0x40')]['id'];}return db[_0x481c('0x23')][_0x481c('0x42')]({'where':{'id':_0x3ce02c[_0x481c('0x45')]['id']}})[_0x481c('0x1e')](handleEntityNotFound(_0x8fa030,null))[_0x481c('0x1e')](function(_0x91872c){if(_0x91872c){_0x3ce02c[_0x481c('0x40')][_0x481c('0x46')]=_0x91872c['id'];return db[_0x481c('0x47')][_0x481c('0x3f')](_0x3ce02c[_0x481c('0x40')]);}})[_0x481c('0x1e')](respondWithResult(_0x8fa030,null))[_0x481c('0x3e')](handleError(_0x8fa030,null));};exports[_0x481c('0x48')]=function(_0x202406,_0x35a0f6,_0x316126){var _0x21c367={'raw':![],'where':{}};var _0x1242b8={};var _0x3e6b97={'count':0x0,'rows':[]};return db[_0x481c('0x23')][_0x481c('0x49')]({'where':{'id':_0x202406[_0x481c('0x45')]['id']}})['then'](handleEntityNotFound(_0x35a0f6,null))[_0x481c('0x1e')](function(_0x534b58){if(_0x534b58){_0x1242b8[_0x481c('0x25')]=_[_0x481c('0x26')](db['Disposition'][_0x481c('0x24')]);_0x1242b8[_0x481c('0x27')]=_[_0x481c('0x26')](_0x202406[_0x481c('0x27')]);_0x1242b8[_0x481c('0x2a')]=_['intersection'](_0x1242b8[_0x481c('0x25')],_0x1242b8[_0x481c('0x27')]);_0x21c367[_0x481c('0x2c')]=_['intersection'](_0x1242b8[_0x481c('0x25')],qs[_0x481c('0x2d')](_0x202406[_0x481c('0x27')][_0x481c('0x2d')]));_0x21c367[_0x481c('0x2c')]=_0x21c367['attributes']['length']?_0x21c367[_0x481c('0x2c')]:_0x1242b8[_0x481c('0x25')];if(!_0x202406[_0x481c('0x27')][_0x481c('0x2f')](_0x481c('0x4a'))){_0x21c367[_0x481c('0x1a')]=qs[_0x481c('0x1a')](_0x202406['query'][_0x481c('0x1a')]);_0x21c367[_0x481c('0x19')]=qs[_0x481c('0x19')](_0x202406[_0x481c('0x27')][_0x481c('0x19')]);}_0x21c367[_0x481c('0x30')]=qs[_0x481c('0x31')](_0x202406['query'][_0x481c('0x31')]);_0x21c367['where']=qs[_0x481c('0x2a')](_['pick'](_0x202406['query'],_0x1242b8[_0x481c('0x2a')]));_0x21c367[_0x481c('0x32')]['ListId']=_0x534b58['id'];if(_0x202406['query'][_0x481c('0x37')]){_0x21c367[_0x481c('0x32')]=_[_0x481c('0x36')](_0x21c367['where'],{'$or':_[_0x481c('0x38')](_0x21c367[_0x481c('0x2c')],function(_0x4b690f){var _0x3275d4={};_0x3275d4[_0x4b690f]={'$like':'%'+_0x202406[_0x481c('0x27')][_0x481c('0x37')]+'%'};return _0x3275d4;})});}_0x21c367=_['merge']({},_0x21c367,_0x202406[_0x481c('0x39')]);return db[_0x481c('0x47')][_0x481c('0x3a')]({'where':_0x21c367[_0x481c('0x32')]})[_0x481c('0x1e')](function(_0x32a873){_0x3e6b97[_0x481c('0x3a')]=_0x32a873;if(_0x202406[_0x481c('0x27')][_0x481c('0x3b')]){_0x21c367['include']=[{'all':!![]}];}return db['Disposition'][_0x481c('0x4b')](_0x21c367);})[_0x481c('0x1e')](function(_0x1c297a){_0x3e6b97[_0x481c('0x3d')]=_0x1c297a;return _0x3e6b97;});}})[_0x481c('0x1e')](respondWithFilteredResult(_0x35a0f6,_0x21c367))[_0x481c('0x3e')](handleError(_0x35a0f6,null));};exports[_0x481c('0x4c')]=function(_0x2eabcb,_0x5856ab,_0x3b3b89){var _0x55df06;return db['CmList'][_0x481c('0x42')]({'where':{'id':_0x2eabcb[_0x481c('0x45')]['id']}})['then'](handleEntityNotFound(_0x5856ab,null))['then'](function(_0x335c4a){if(_0x335c4a){return _0x335c4a[_0x481c('0x4c')](_0x2eabcb[_0x481c('0x27')][_0x481c('0x4d')]);}})['then'](respondWithStatusCode(_0x5856ab,null))[_0x481c('0x3e')](handleError(_0x5856ab,null));};exports[_0x481c('0x4e')]=function(_0x4677ae,_0x1097be,_0x7a9097){return db[_0x481c('0x23')][_0x481c('0x42')]({'where':{'id':_0x4677ae[_0x481c('0x45')]['id']}})['then'](handleEntityNotFound(_0x1097be,null))[_0x481c('0x1e')](function(_0x51eeaf){if(_0x51eeaf){var _0x4cfb1e=[];var _0xb2f5eb={'success':[],'errors':[]};return db[_0x481c('0x4f')][_0x481c('0x43')]()[_0x481c('0x1e')](function(_0x3a5d78){if(_0x4677ae['body']['tags']&&_[_0x481c('0x50')](_0x4677ae[_0x481c('0x40')][_0x481c('0x51')])){if(_0x4677ae['body'][_0x481c('0x51')]['length']){_0x4677ae['body'][_0x481c('0x51')]=_0x4677ae['body'][_0x481c('0x51')][_0x481c('0x52')](';')+';';}else{_0x4677ae[_0x481c('0x40')][_0x481c('0x51')]=null;}}else{_0x4677ae[_0x481c('0x40')][_0x481c('0x51')]=null;}if(_0x4677ae[_0x481c('0x40')]&&_['isArray'](_0x4677ae[_0x481c('0x40')])){for(var _0x1e7b1c=0x0;_0x1e7b1c<_0x4677ae[_0x481c('0x40')][_0x481c('0x2e')];_0x1e7b1c+=0x1){_0x4677ae[_0x481c('0x40')][_0x1e7b1c][_0x481c('0x46')]=_0x4677ae['params']['id'];_0x4cfb1e[_0x481c('0x53')](_0x4677ae[_0x481c('0x40')][_0x1e7b1c]);}return BPromise[_0x481c('0x54')](_0x4cfb1e,function(_0x23278f){return db[_0x481c('0x4f')][_0x481c('0x3f')](_[_0x481c('0x55')](_0x23278f,[_0x481c('0x4d'),'id'])||{},{'fields':_['keys'](_0x3a5d78),'raw':!![]})[_0x481c('0x1e')](function(_0x3167cb){_0xb2f5eb[_0x481c('0x56')][_0x481c('0x53')](_0x3167cb[_0x481c('0x57')]);})[_0x481c('0x3e')](function(_0x2b46de){_0xb2f5eb['errors'][_0x481c('0x53')]({'data':_0x23278f,'error':_0x2b46de[_0x481c('0x58')]});});})[_0x481c('0x1e')](function(_0x5e9db4){return _0xb2f5eb;})[_0x481c('0x3e')](function(_0x5096a4){return _0x5096a4;});}else{_0x1097be[_0x481c('0x18')](0x190)['json']({'message':'Malformed\x20request\x20syntax'});}});}})[_0x481c('0x1e')](respondWithResult(_0x1097be,null))[_0x481c('0x3e')](handleError(_0x1097be,null));};exports[_0x481c('0x59')]=function(_0x1fa63a,_0x348a1f,_0x509a8a){var _0x5f4ce7;return db['CmList'][_0x481c('0x42')]({'where':{'id':_0x1fa63a[_0x481c('0x45')]['id']},'include':[{'model':db['CmCustomField'],'as':_0x481c('0x5a')}]})['then'](handleEntityNotFound(_0x348a1f,null))[_0x481c('0x1e')](function(_0x589050){if(_0x589050){_0x5f4ce7=_0x589050;return db[_0x481c('0x4f')]['rawAttributes'];}})[_0x481c('0x1e')](function(_0x245a0a){if(_0x245a0a){var _0x19e38b={};var _0x3af0e2={};_0x3af0e2[_0x481c('0x25')]=_[_0x481c('0x5b')](_[_0x481c('0x26')](_0x245a0a),_[_0x481c('0x38')](_0x5f4ce7[_0x481c('0x5a')],function(_0x11d7b0){return util[_0x481c('0x5c')]('cf_%d',_0x11d7b0['id']);}));_0x3af0e2[_0x481c('0x27')]=_[_0x481c('0x26')](_0x1fa63a[_0x481c('0x27')]);_0x3af0e2[_0x481c('0x2a')]=_[_0x481c('0x2b')](_0x3af0e2['model'],_0x3af0e2[_0x481c('0x27')]);_0x19e38b[_0x481c('0x2c')]=_[_0x481c('0x2b')](_0x3af0e2[_0x481c('0x25')],qs[_0x481c('0x2d')](_0x1fa63a['query']['fields']));_0x19e38b['attributes']=_0x19e38b[_0x481c('0x2c')]['length']?_0x19e38b[_0x481c('0x2c')]:_0x3af0e2[_0x481c('0x25')];if(!_0x1fa63a[_0x481c('0x27')][_0x481c('0x2f')]('nolimit')){_0x19e38b['limit']=qs[_0x481c('0x1a')](_0x1fa63a[_0x481c('0x27')][_0x481c('0x1a')]);_0x19e38b[_0x481c('0x19')]=qs[_0x481c('0x19')](_0x1fa63a[_0x481c('0x27')][_0x481c('0x19')]);}_0x19e38b[_0x481c('0x30')]=qs[_0x481c('0x31')](_0x1fa63a[_0x481c('0x27')]['sort']);_0x19e38b[_0x481c('0x32')]=qs[_0x481c('0x2a')](_[_0x481c('0x33')](_0x1fa63a['query'],_0x3af0e2[_0x481c('0x2a')]));_0x19e38b[_0x481c('0x5d')]=!![];if(_0x1fa63a[_0x481c('0x27')][_0x481c('0x37')]){_0x19e38b['where']=_[_0x481c('0x36')](_0x19e38b['where'],{'$or':_['map'](_0x19e38b['attributes'],function(_0x1be251){var _0x19ea9c={};_0x19ea9c[_0x1be251]={'$like':'%'+_0x1fa63a[_0x481c('0x27')]['filter']+'%'};return _0x19ea9c;})});}_0x19e38b=_[_0x481c('0x36')]({},_0x19e38b,_0x1fa63a[_0x481c('0x39')]);return _0x5f4ce7[_0x481c('0x59')](_0x19e38b);}})[_0x481c('0x1e')](respondWithResult(_0x348a1f,null))[_0x481c('0x3e')](handleError(_0x348a1f,null));};exports[_0x481c('0x5e')]=function(_0x367f79,_0x166201,_0x5b7718){var _0x1585c8;return db['CmList'][_0x481c('0x42')]({'where':{'id':_0x367f79['params']['id']},'include':[{'model':db[_0x481c('0x5f')],'as':_0x481c('0x5a')}]})[_0x481c('0x1e')](handleEntityNotFound(_0x166201,null))[_0x481c('0x1e')](function(_0x1d498f){if(_0x1d498f){_0x1585c8=_0x1d498f;return db[_0x481c('0x4f')][_0x481c('0x24')];}})['then'](function(_0x3d7979){if(_0x3d7979){var _0x789956={};var _0x382a08={};_0x382a08[_0x481c('0x25')]=_[_0x481c('0x5b')](_[_0x481c('0x26')](_0x3d7979),_['map'](_0x1585c8['CustomFields'],function(_0x2208dc){return util[_0x481c('0x5c')](_0x481c('0x60'),_0x2208dc['id']);}));_0x382a08[_0x481c('0x27')]=_[_0x481c('0x26')](_0x367f79[_0x481c('0x27')]);_0x382a08[_0x481c('0x2a')]=_[_0x481c('0x2b')](_0x382a08['model'],_0x382a08[_0x481c('0x27')]);_0x789956[_0x481c('0x2c')]=_[_0x481c('0x2b')](_0x382a08[_0x481c('0x25')],qs[_0x481c('0x2d')](_0x367f79[_0x481c('0x27')][_0x481c('0x2d')]));_0x789956['attributes']=_0x789956[_0x481c('0x2c')]['length']?_0x789956[_0x481c('0x2c')]:_0x382a08[_0x481c('0x25')];if(!_0x367f79[_0x481c('0x27')][_0x481c('0x2f')](_0x481c('0x4a'))){_0x789956['limit']=qs[_0x481c('0x1a')](_0x367f79[_0x481c('0x27')][_0x481c('0x1a')]);_0x789956[_0x481c('0x19')]=qs['offset'](_0x367f79['query'][_0x481c('0x19')]);}_0x789956[_0x481c('0x30')]=qs['sort'](_0x367f79['query'][_0x481c('0x31')]);_0x789956[_0x481c('0x32')]=qs['filters'](_[_0x481c('0x33')](_0x367f79[_0x481c('0x27')],_0x382a08[_0x481c('0x2a')]));_0x789956[_0x481c('0x5d')]=!![];if(_0x367f79[_0x481c('0x27')][_0x481c('0x37')]){_0x789956[_0x481c('0x32')]=_[_0x481c('0x36')](_0x789956['where'],{'$or':_[_0x481c('0x38')](_0x789956['attributes'],function(_0x387f48){var _0x386824={};_0x386824[_0x387f48]={'$like':'%'+_0x367f79[_0x481c('0x27')][_0x481c('0x37')]+'%'};return _0x386824;})});}_0x789956=_['merge']({},_0x789956,_0x367f79['options']);return _0x1585c8['getContacts'](_0x789956);}})[_0x481c('0x1e')](function(_0x1c40f1){if(!_[_0x481c('0x61')](_0x1c40f1)){var _0x172d9e=toCsv(_0x1c40f1);var _0x3eb8ba=Date[_0x481c('0x62')]();fs['writeFileSync'](util[_0x481c('0x5c')]('/tmp/list_%d_%s.csv',_0x1585c8['id'],_0x3eb8ba),_0x172d9e);_0x166201[_0x481c('0x63')]('Content-disposition',_0x481c('0x64')+util[_0x481c('0x5c')](_0x481c('0x65'),_0x1585c8['id'],_0x3eb8ba));_0x166201['setHeader'](_0x481c('0x66'),_0x481c('0x67'));return _0x166201[_0x481c('0x68')](util[_0x481c('0x5c')]('/tmp/list_%d_%s.csv',_0x1585c8['id'],_0x3eb8ba));}else{return _0x166201[_0x481c('0x17')](0xcc);}})[_0x481c('0x3e')](handleError(_0x166201,null));};exports[_0x481c('0x69')]=function(_0x10e290,_0x4c0b83,_0x2598d5){var _0x2d99f0;delete _0x10e290[_0x481c('0x40')]['id'];return db['CmList'][_0x481c('0x49')]({'where':{'id':_0x10e290[_0x481c('0x45')]['id']}})[_0x481c('0x1e')](handleEntityNotFound(_0x4c0b83,null))[_0x481c('0x1e')](function(_0x16841a){if(_0x16841a){return db['sequelize'][_0x481c('0x6a')](function(_0x54e22d){return db[_0x481c('0x5f')][_0x481c('0x3f')](_0x10e290[_0x481c('0x40')],{'transaction':_0x54e22d})[_0x481c('0x1e')](function(_0x54e133){_0x2d99f0=_0x54e133;return _0x16841a['addCustomFields'](_0x54e133,{'transaction':_0x54e22d});})[_0x481c('0x1e')](function(){var _0x51a852={'type':db['Sequelize'][_0x481c('0x6b')],'transaction':_0x54e22d};switch(_0x10e290[_0x481c('0x40')][_0x481c('0x6c')]){case'text':_0x51a852[_0x481c('0x6c')]=db[_0x481c('0x6d')][_0x481c('0x6b')];break;case _0x481c('0x6e'):_0x51a852['type']=db[_0x481c('0x6d')][_0x481c('0x6f')];break;case _0x481c('0x70'):_0x51a852[_0x481c('0x6c')]=db[_0x481c('0x6d')][_0x481c('0x71')];_0x51a852[_0x481c('0x72')]=![];break;default:}return db[_0x481c('0x73')][_0x481c('0x74')][_0x481c('0x75')](_0x481c('0x76'),util[_0x481c('0x5c')](_0x481c('0x77'),_0x2d99f0['id']),_0x51a852);})['then'](function(){return _0x2d99f0;});});}})[_0x481c('0x1e')](respondWithResult(_0x4c0b83,null))['catch'](handleError(_0x4c0b83,null));};exports[_0x481c('0x78')]=function(_0x2fb35c,_0x741ff5,_0xc584de){var _0x2216db={};var _0x9f5ec7={};var _0x4ae4a5;var _0x570b55;return db[_0x481c('0x23')][_0x481c('0x49')]({'where':{'id':_0x2fb35c[_0x481c('0x45')]['id']}})[_0x481c('0x1e')](handleEntityNotFound(_0x741ff5,null))[_0x481c('0x1e')](function(_0x3cad84){if(_0x3cad84){_0x4ae4a5=_0x3cad84;_0x9f5ec7[_0x481c('0x25')]=_[_0x481c('0x26')](db[_0x481c('0x5f')][_0x481c('0x24')]);_0x9f5ec7[_0x481c('0x27')]=_['keys'](_0x2fb35c[_0x481c('0x27')]);_0x9f5ec7[_0x481c('0x2a')]=_[_0x481c('0x2b')](_0x9f5ec7[_0x481c('0x25')],_0x9f5ec7['query']);_0x2216db[_0x481c('0x2c')]=_[_0x481c('0x2b')](_0x9f5ec7[_0x481c('0x25')],qs[_0x481c('0x2d')](_0x2fb35c[_0x481c('0x27')]['fields']));_0x2216db[_0x481c('0x2c')]=_0x2216db[_0x481c('0x2c')][_0x481c('0x2e')]?_0x2216db[_0x481c('0x2c')]:_0x9f5ec7[_0x481c('0x25')];_0x2216db['order']=qs[_0x481c('0x31')](_0x2fb35c[_0x481c('0x27')][_0x481c('0x31')]);_0x2216db[_0x481c('0x32')]=qs[_0x481c('0x2a')](_[_0x481c('0x33')](_0x2fb35c[_0x481c('0x27')],_0x9f5ec7[_0x481c('0x2a')]));_0x2216db[_0x481c('0x32')]=_['merge'](_0x2216db[_0x481c('0x32')],{'$or':[{'ListId':_0x3cad84['id']},{'ListId':null}]});if(_0x2fb35c[_0x481c('0x27')][_0x481c('0x37')]){_0x2216db['where']=_[_0x481c('0x36')](_0x2216db[_0x481c('0x32')],{'$or':_['map'](_0x2216db[_0x481c('0x2c')],function(_0x14fce8){var _0x29319c={};_0x29319c[_0x14fce8]={'$like':'%'+_0x2fb35c[_0x481c('0x27')]['filter']+'%'};return _0x29319c;})});}_0x2216db=_['merge']({},_0x2216db,_0x2fb35c[_0x481c('0x39')]);return db[_0x481c('0x5f')][_0x481c('0x79')](_0x2216db);}})[_0x481c('0x1e')](respondWithResult(_0x741ff5,null))[_0x481c('0x3e')](handleError(_0x741ff5,null));};exports[_0x481c('0x7a')]=function(_0x52f4b7,_0x3a6785,_0x232dd4){return db[_0x481c('0x23')][_0x481c('0x42')]({'where':{'id':_0x52f4b7[_0x481c('0x45')]['id']}})[_0x481c('0x1e')](handleEntityNotFound(_0x3a6785,null))[_0x481c('0x1e')](function(_0x331a53){if(_0x331a53){return _0x331a53[_0x481c('0x7a')](_0x52f4b7['body'][_0x481c('0x4d')],_['omit'](_0x52f4b7[_0x481c('0x40')],[_0x481c('0x4d'),'id'])||{})['spread'](function(_0x301539){for(var _0x102b13=0x0;_0x102b13<_0x52f4b7[_0x481c('0x40')][_0x481c('0x4d')][_0x481c('0x2e')];_0x102b13+=0x1){socket[_0x481c('0x7b')](_0x481c('0x7c'),{'UserId':_0x52f4b7[_0x481c('0x40')][_0x481c('0x4d')][_0x102b13],'CmListId':_0x52f4b7[_0x481c('0x45')]['id']});}return _0x301539;});}})[_0x481c('0x1e')](respondWithResult(_0x3a6785,null))['catch'](handleError(_0x3a6785,null));};exports[_0x481c('0x7d')]=function(_0xd06da3,_0x3ae86a,_0x5e726c){var _0xbb8771;return db[_0x481c('0x23')]['find']({'where':{'id':_0xd06da3[_0x481c('0x45')]['id']}})['then'](handleEntityNotFound(_0x3ae86a,null))['then'](function(_0x4acd27){if(_0x4acd27){return _0x4acd27['removeAgents'](_0xd06da3[_0x481c('0x27')]['ids'])[_0x481c('0x1e')](function(_0x58b3b5){if(_[_0x481c('0x50')](_0xd06da3[_0x481c('0x27')][_0x481c('0x4d')])){for(var _0x59f0e2=0x0;_0x59f0e2<_0xd06da3[_0x481c('0x27')][_0x481c('0x4d')][_0x481c('0x2e')];_0x59f0e2+=0x1){socket[_0x481c('0x7b')](_0x481c('0x7e'),{'UserId':_0xd06da3[_0x481c('0x27')][_0x481c('0x4d')][_0x59f0e2],'CmListId':_0xd06da3['params']['id']});}}else{socket[_0x481c('0x7b')](_0x481c('0x7e'),{'UserId':_0xd06da3[_0x481c('0x27')][_0x481c('0x4d')],'CmListId':_0xd06da3[_0x481c('0x45')]['id']});}});}})[_0x481c('0x1e')](respondWithStatusCode(_0x3ae86a,null))['catch'](handleError(_0x3ae86a,null));};exports['getAgents']=function(_0x4f76a7,_0x590e3e,_0x17c265){var _0x4d2566={};var _0x5eb8fa={};var _0x7e595;var _0x267fc3;return db['CmList']['findOne']({'where':{'id':_0x4f76a7[_0x481c('0x45')]['id']}})[_0x481c('0x1e')](handleEntityNotFound(_0x590e3e,null))[_0x481c('0x1e')](function(_0x275f3c){if(_0x275f3c){_0x7e595=_0x275f3c;_0x5eb8fa[_0x481c('0x25')]=_[_0x481c('0x26')](db[_0x481c('0x7f')]['rawAttributes']);_0x5eb8fa[_0x481c('0x27')]=_['keys'](_0x4f76a7[_0x481c('0x27')]);_0x5eb8fa[_0x481c('0x2a')]=_[_0x481c('0x2b')](_0x5eb8fa[_0x481c('0x25')],_0x5eb8fa['query']);_0x4d2566[_0x481c('0x2c')]=_[_0x481c('0x2b')](_0x5eb8fa[_0x481c('0x25')],qs[_0x481c('0x2d')](_0x4f76a7[_0x481c('0x27')]['fields']));_0x4d2566['attributes']=_0x4d2566['attributes'][_0x481c('0x2e')]?_0x4d2566[_0x481c('0x2c')]:_0x5eb8fa[_0x481c('0x25')];_0x4d2566[_0x481c('0x30')]=qs['sort'](_0x4f76a7[_0x481c('0x27')]['sort']);_0x4d2566[_0x481c('0x32')]=qs['filters'](_['pick'](_0x4f76a7[_0x481c('0x27')],_0x5eb8fa[_0x481c('0x2a')]));if(_0x4f76a7[_0x481c('0x27')][_0x481c('0x37')]){_0x4d2566[_0x481c('0x32')]=_[_0x481c('0x36')](_0x4d2566['where'],{'$or':_[_0x481c('0x38')](_0x4d2566[_0x481c('0x2c')],function(_0x57fd24){var _0x409b39={};_0x409b39[_0x57fd24]={'$like':'%'+_0x4f76a7[_0x481c('0x27')][_0x481c('0x37')]+'%'};return _0x409b39;})});}_0x4d2566=_['merge']({},_0x4d2566,_0x4f76a7[_0x481c('0x39')]);return _0x7e595[_0x481c('0x80')](_0x4d2566);}})[_0x481c('0x1e')](function(_0x69b371){if(_0x69b371){_0x267fc3=_0x69b371[_0x481c('0x2e')];if(!_0x4f76a7[_0x481c('0x27')][_0x481c('0x2f')](_0x481c('0x4a'))){_0x4d2566['limit']=qs[_0x481c('0x1a')](_0x4f76a7['query'][_0x481c('0x1a')]);_0x4d2566[_0x481c('0x19')]=qs[_0x481c('0x19')](_0x4f76a7['query'][_0x481c('0x19')]);}return _0x7e595[_0x481c('0x80')](_0x4d2566);}})[_0x481c('0x1e')](function(_0x14ce26){if(_0x14ce26){return _0x14ce26?{'count':_0x267fc3,'rows':_0x14ce26}:null;}})[_0x481c('0x1e')](respondWithResult(_0x590e3e,null))[_0x481c('0x3e')](handleError(_0x590e3e,null));};
\ No newline at end of file
index 1bbf20a..5315086 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa1b7=['hook','exports','../../mysqldb','save','update','remove','emit','hasOwnProperty'];(function(_0x25de14,_0x14daea){var _0x5d5cdf=function(_0x465a51){while(--_0x465a51){_0x25de14['push'](_0x25de14['shift']());}};_0x5d5cdf(++_0x14daea);}(_0xa1b7,0xf2));var _0x7a1b=function(_0x3cb67c,_0xc21935){_0x3cb67c=_0x3cb67c-0x0;var _0x4b9784=_0xa1b7[_0x3cb67c];return _0x4b9784;};'use strict';var EventEmitter=require('events');var CmList=require(_0x7a1b('0x0'))['db']['CmList'];var CmListEvents=new EventEmitter();CmListEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x7a1b('0x1'),'afterUpdate':_0x7a1b('0x2'),'afterDestroy':_0x7a1b('0x3')};function emitEvent(_0x13838f){return function(_0x2c9808,_0x8f27ee,_0x58c65b){CmListEvents[_0x7a1b('0x4')](_0x13838f+':'+_0x2c9808['id'],_0x2c9808);CmListEvents[_0x7a1b('0x4')](_0x13838f,_0x2c9808);_0x58c65b(null);};}for(var e in events){if(events[_0x7a1b('0x5')](e)){var event=events[e];CmList[_0x7a1b('0x6')](e,emitEvent(event));}}module[_0x7a1b('0x7')]=CmListEvents;
\ No newline at end of file
+var _0x03f9=['emit','hook','exports','../../mysqldb','setMaxListeners','save','remove'];(function(_0x442217,_0x2cd7f5){var _0x11be6c=function(_0x3e3e99){while(--_0x3e3e99){_0x442217['push'](_0x442217['shift']());}};_0x11be6c(++_0x2cd7f5);}(_0x03f9,0x161));var _0x903f=function(_0x3d7add,_0x37bdfe){_0x3d7add=_0x3d7add-0x0;var _0x55e63b=_0x03f9[_0x3d7add];return _0x55e63b;};'use strict';var EventEmitter=require('events');var CmList=require(_0x903f('0x0'))['db']['CmList'];var CmListEvents=new EventEmitter();CmListEvents[_0x903f('0x1')](0x0);var events={'afterCreate':_0x903f('0x2'),'afterUpdate':'update','afterDestroy':_0x903f('0x3')};function emitEvent(_0xa36056){return function(_0x52c9cd,_0xb8ffce,_0x43470e){CmListEvents['emit'](_0xa36056+':'+_0x52c9cd['id'],_0x52c9cd);CmListEvents[_0x903f('0x4')](_0xa36056,_0x52c9cd);_0x43470e(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];CmList[_0x903f('0x5')](e,emitEvent(event));}}module[_0x903f('0x6')]=CmListEvents;
\ No newline at end of file
index 56d6d9d..0f3a59d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf380=['moment','request-promise','define','cm_lists','lodash','../../config/logger','api'];(function(_0x5b0b0f,_0x522c30){var _0x42ea47=function(_0x4ac3a4){while(--_0x4ac3a4){_0x5b0b0f['push'](_0x5b0b0f['shift']());}};_0x42ea47(++_0x522c30);}(_0xf380,0x66));var _0x0f38=function(_0x73b96f,_0x468608){_0x73b96f=_0x73b96f-0x0;var _0x2376fe=_0xf380[_0x73b96f];return _0x2376fe;};'use strict';var _=require(_0x0f38('0x0'));var util=require('util');var logger=require(_0x0f38('0x1'))(_0x0f38('0x2'));var moment=require(_0x0f38('0x3'));var BPromise=require('bluebird');var rp=require(_0x0f38('0x4'));var attributes=require('./cmList.attributes');module['exports']=function(_0x30e16f,_0x47edf9){return _0x30e16f[_0x0f38('0x5')]('CmList',attributes,{'tableName':_0x0f38('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7c74=['./cmList.attributes','exports','cm_lists','lodash','util','../../config/logger','moment','bluebird','request-promise'];(function(_0x5be798,_0x5dcdf1){var _0x1ef662=function(_0x1b4106){while(--_0x1b4106){_0x5be798['push'](_0x5be798['shift']());}};_0x1ef662(++_0x5dcdf1);}(_0x7c74,0x8a));var _0x47c7=function(_0x2d7f0e,_0x3e6fbd){_0x2d7f0e=_0x2d7f0e-0x0;var _0x110b07=_0x7c74[_0x2d7f0e];return _0x110b07;};'use strict';var _=require(_0x47c7('0x0'));var util=require(_0x47c7('0x1'));var logger=require(_0x47c7('0x2'))('api');var moment=require(_0x47c7('0x3'));var BPromise=require(_0x47c7('0x4'));var rp=require(_0x47c7('0x5'));var attributes=require(_0x47c7('0x6'));module[_0x47c7('0x7')]=function(_0x36a126,_0x2b4f5e){return _0x36a126['define']('CmList',attributes,{'tableName':_0x47c7('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 795cbb8..9c05bef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb87f=['randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','socket.io-emitter','./cmList.socket','register','request','then','CmList,\x20%s,\x20%s','request\x20sent','debug','CmList,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','lodash','util','moment','bluebird'];(function(_0xb18ed8,_0x1b2530){var _0x3bc013=function(_0x271032){while(--_0x271032){_0xb18ed8['push'](_0xb18ed8['shift']());}};_0x3bc013(++_0x1b2530);}(_0xb87f,0x19c));var _0xfb87=function(_0x187b5f,_0x5b3e6a){_0x187b5f=_0x187b5f-0x0;var _0x2ec20c=_0xb87f[_0x187b5f];return _0x2ec20c;};'use strict';var _=require(_0xfb87('0x0'));var util=require(_0xfb87('0x1'));var moment=require(_0xfb87('0x2'));var BPromise=require(_0xfb87('0x3'));var rs=require(_0xfb87('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xfb87('0x5'));var logger=require(_0xfb87('0x6'))(_0xfb87('0x7'));var config=require(_0xfb87('0x8'));var jayson=require(_0xfb87('0x9'));var client=jayson[_0xfb87('0xa')]['http']({'port':0x232a});var socket=require(_0xfb87('0xb'))({'host':'localhost','port':0x18eb});require(_0xfb87('0xc'))[_0xfb87('0xd')](socket);function respondWithRpcPromise(_0x551fe0,_0x2656c9,_0x23ad78){return new BPromise(function(_0x4a6878,_0x56bae8){return client[_0xfb87('0xe')](_0x551fe0,_0x23ad78)[_0xfb87('0xf')](function(_0x7af19b){logger['info'](_0xfb87('0x10'),_0x2656c9,_0xfb87('0x11'));logger[_0xfb87('0x12')](_0xfb87('0x13'),_0x2656c9,_0xfb87('0x11'),JSON[_0xfb87('0x14')](_0x7af19b));if(_0x7af19b[_0xfb87('0x15')]){if(_0x7af19b[_0xfb87('0x15')]['code']===0x1f4){logger[_0xfb87('0x15')](_0xfb87('0x10'),_0x2656c9,_0x7af19b[_0xfb87('0x15')][_0xfb87('0x16')]);return _0x56bae8(_0x7af19b[_0xfb87('0x15')][_0xfb87('0x16')]);}logger[_0xfb87('0x15')](_0xfb87('0x10'),_0x2656c9,_0x7af19b['error']['message']);return _0x4a6878(_0x7af19b[_0xfb87('0x15')][_0xfb87('0x16')]);}else{logger[_0xfb87('0x17')]('CmList,\x20%s,\x20%s',_0x2656c9,_0xfb87('0x11'));_0x4a6878(_0x7af19b[_0xfb87('0x18')]['message']);}})[_0xfb87('0x19')](function(_0x5ab925){logger['error']('CmList,\x20%s,\x20%s',_0x2656c9,_0x5ab925);_0x56bae8(_0x5ab925);});});}
\ No newline at end of file
+var _0x1beb=['../../config/logger','../../config/environment','jayson/promise','client','http','localhost','./cmList.socket','register','request','then','CmList,\x20%s,\x20%s','request\x20sent','debug','CmList,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils'];(function(_0x40442c,_0x2603a8){var _0xfb62b9=function(_0xdd316a){while(--_0xdd316a){_0x40442c['push'](_0x40442c['shift']());}};_0xfb62b9(++_0x2603a8);}(_0x1beb,0x132));var _0xb1be=function(_0x12e1d1,_0x5b4223){_0x12e1d1=_0x12e1d1-0x0;var _0x32ee65=_0x1beb[_0x12e1d1];return _0x32ee65;};'use strict';var _=require(_0xb1be('0x0'));var util=require('util');var moment=require(_0xb1be('0x1'));var BPromise=require(_0xb1be('0x2'));var rs=require(_0xb1be('0x3'));var fs=require('fs');var db=require(_0xb1be('0x4'))['db'];var utils=require(_0xb1be('0x5'));var logger=require(_0xb1be('0x6'))('rpc');var config=require(_0xb1be('0x7'));var jayson=require(_0xb1be('0x8'));var client=jayson[_0xb1be('0x9')][_0xb1be('0xa')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0xb1be('0xb'),'port':0x18eb});require(_0xb1be('0xc'))[_0xb1be('0xd')](socket);function respondWithRpcPromise(_0x40bff2,_0x2a23d2,_0x2d6749){return new BPromise(function(_0x20fcf1,_0x4a13c8){return client[_0xb1be('0xe')](_0x40bff2,_0x2d6749)[_0xb1be('0xf')](function(_0x4852db){logger['info'](_0xb1be('0x10'),_0x2a23d2,_0xb1be('0x11'));logger[_0xb1be('0x12')](_0xb1be('0x13'),_0x2a23d2,_0xb1be('0x11'),JSON[_0xb1be('0x14')](_0x4852db));if(_0x4852db[_0xb1be('0x15')]){if(_0x4852db[_0xb1be('0x15')][_0xb1be('0x16')]===0x1f4){logger[_0xb1be('0x15')](_0xb1be('0x10'),_0x2a23d2,_0x4852db[_0xb1be('0x15')][_0xb1be('0x17')]);return _0x4a13c8(_0x4852db[_0xb1be('0x15')]['message']);}logger[_0xb1be('0x15')]('CmList,\x20%s,\x20%s',_0x2a23d2,_0x4852db[_0xb1be('0x15')]['message']);return _0x20fcf1(_0x4852db[_0xb1be('0x15')][_0xb1be('0x17')]);}else{logger['info'](_0xb1be('0x10'),_0x2a23d2,_0xb1be('0x11'));_0x20fcf1(_0x4852db[_0xb1be('0x18')][_0xb1be('0x17')]);}})[_0xb1be('0x19')](function(_0x3a6d35){logger[_0xb1be('0x15')](_0xb1be('0x10'),_0x2a23d2,_0x3a6d35);_0x4a13c8(_0x3a6d35);});});}
\ No newline at end of file
index 3a5ca86..3570d06 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x31fb=['cmList:','./cmList.events','save','remove','update','removeListener','length'];(function(_0x127c07,_0x12c0ff){var _0xf6662=function(_0x5b3bab){while(--_0x5b3bab){_0x127c07['push'](_0x127c07['shift']());}};_0xf6662(++_0x12c0ff);}(_0x31fb,0x1cf));var _0xb31f=function(_0x54d4fe,_0x55e869){_0x54d4fe=_0x54d4fe-0x0;var _0x1ab5bb=_0x31fb[_0x54d4fe];return _0x1ab5bb;};'use strict';var CmListEvents=require(_0xb31f('0x0'));var events=[_0xb31f('0x1'),_0xb31f('0x2'),_0xb31f('0x3')];function createListener(_0x955661,_0x3e5fdc){return function(_0xff32c9){_0x3e5fdc['emit'](_0x955661,_0xff32c9);};}function removeListener(_0x249a2d,_0x327bf2){return function(){CmListEvents[_0xb31f('0x4')](_0x249a2d,_0x327bf2);};}exports['register']=function(_0x22ca69){for(var _0x44fc85=0x0,_0x3d86ee=events[_0xb31f('0x5')];_0x44fc85<_0x3d86ee;_0x44fc85++){var _0x2e0a8f=events[_0x44fc85];var _0x1ecd50=createListener(_0xb31f('0x6')+_0x2e0a8f,_0x22ca69);CmListEvents['on'](_0x2e0a8f,_0x1ecd50);}};
\ No newline at end of file
+var _0x6669=['emit','removeListener','length','cmList:','./cmList.events','save','remove','update'];(function(_0x4a8276,_0x1911e6){var _0x501c54=function(_0x2bb097){while(--_0x2bb097){_0x4a8276['push'](_0x4a8276['shift']());}};_0x501c54(++_0x1911e6);}(_0x6669,0x184));var _0x9666=function(_0x1694f5,_0x49b7c3){_0x1694f5=_0x1694f5-0x0;var _0x5b4321=_0x6669[_0x1694f5];return _0x5b4321;};'use strict';var CmListEvents=require(_0x9666('0x0'));var events=[_0x9666('0x1'),_0x9666('0x2'),_0x9666('0x3')];function createListener(_0x23e1da,_0x156af3){return function(_0x7f776f){_0x156af3[_0x9666('0x4')](_0x23e1da,_0x7f776f);};}function removeListener(_0x4c6cd4,_0x3a0eac){return function(){CmListEvents[_0x9666('0x5')](_0x4c6cd4,_0x3a0eac);};}exports['register']=function(_0x55f0c3){for(var _0x174435=0x0,_0x57f31a=events[_0x9666('0x6')];_0x174435<_0x57f31a;_0x174435++){var _0x457aa8=events[_0x174435];var _0x36523f=createListener(_0x9666('0x7')+_0x457aa8,_0x55f0c3);CmListEvents['on'](_0x457aa8,_0x36523f);}};
\ No newline at end of file
index 9833a52..dac6952 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['create','addContacts','addCustomField','/:id/users','addAgents','put','/:id','update','delete','removeDispositions','removeAgents','exports','multer','util','path','../../components/auth/service','../../config/environment','./cmList.controller','get','isAuthenticated','index','/describe','describe','/:id/dispositions','getDispositions','/:id/contacts','getContactsCsv','/:id/fields','getCustomFields','getAgents','post'];(function(_0x1a88c1,_0x3d0850){var _0x1c92e5=function(_0x381b9b){while(--_0x381b9b){_0x1a88c1['push'](_0x1a88c1['shift']());}};_0x1c92e5(++_0x3d0850);}(_0xa9e0,0x123));var _0x0a9e=function(_0x173d7e,_0x3242fd){_0x173d7e=_0x173d7e-0x0;var _0x2220d6=_0xa9e0[_0x173d7e];return _0x2220d6;};'use strict';var multer=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var path=require(_0x0a9e('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x0a9e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x0a9e('0x4'));var controller=require(_0x0a9e('0x5'));router[_0x0a9e('0x6')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x8')]);router['get'](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xa')]);router['get']('/:id',auth[_0x0a9e('0x7')](),controller['show']);router['get'](_0x0a9e('0xb'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xc')]);router[_0x0a9e('0x6')](_0x0a9e('0xd'),auth[_0x0a9e('0x7')](),controller['getContacts']);router['get']('/:id/contacts/csv',auth['isAuthenticated'](),controller[_0x0a9e('0xe')]);router[_0x0a9e('0x6')](_0x0a9e('0xf'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x10')]);router[_0x0a9e('0x6')]('/:id/users',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x11')]);router[_0x0a9e('0x12')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x13')]);router[_0x0a9e('0x12')]('/:id/dispositions',auth[_0x0a9e('0x7')](),controller['addDisposition']);router[_0x0a9e('0x12')]('/:id/contacts',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x14')]);router['post'](_0x0a9e('0xf'),auth['isAuthenticated'](),controller[_0x0a9e('0x15')]);router[_0x0a9e('0x12')](_0x0a9e('0x16'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x17')]);router[_0x0a9e('0x18')](_0x0a9e('0x19'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x1a')]);router[_0x0a9e('0x1b')](_0x0a9e('0x19'),auth[_0x0a9e('0x7')](),controller['destroy']);router[_0x0a9e('0x1b')](_0x0a9e('0xb'),auth['isAuthenticated'](),controller[_0x0a9e('0x1c')]);router['delete']('/:id/users',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x1d')]);module[_0x0a9e('0x1e')]=router;
\ No newline at end of file
+var _0xa902=['Router','../../components/interaction/service','get','isAuthenticated','index','/describe','show','/:id/dispositions','getDispositions','/:id/contacts','getContacts','/:id/users','create','post','addDisposition','addContacts','/:id/fields','put','/:id','update','delete','destroy','removeDispositions','removeAgents','exports','multer','util','path','express'];(function(_0x11e001,_0xb3367b){var _0x417419=function(_0x33f535){while(--_0x33f535){_0x11e001['push'](_0x11e001['shift']());}};_0x417419(++_0xb3367b);}(_0xa902,0x8d));var _0x2a90=function(_0x2b8840,_0x5433f5){_0x2b8840=_0x2b8840-0x0;var _0x5c60f0=_0xa902[_0x2b8840];return _0x5c60f0;};'use strict';var multer=require(_0x2a90('0x0'));var util=require(_0x2a90('0x1'));var path=require(_0x2a90('0x2'));var express=require(_0x2a90('0x3'));var router=express[_0x2a90('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x2a90('0x5'));var config=require('../../config/environment');var controller=require('./cmList.controller');router[_0x2a90('0x6')]('/',auth[_0x2a90('0x7')](),controller[_0x2a90('0x8')]);router[_0x2a90('0x6')](_0x2a90('0x9'),auth[_0x2a90('0x7')](),controller['describe']);router[_0x2a90('0x6')]('/:id',auth['isAuthenticated'](),controller[_0x2a90('0xa')]);router[_0x2a90('0x6')](_0x2a90('0xb'),auth[_0x2a90('0x7')](),controller[_0x2a90('0xc')]);router['get'](_0x2a90('0xd'),auth[_0x2a90('0x7')](),controller[_0x2a90('0xe')]);router[_0x2a90('0x6')]('/:id/contacts/csv',auth[_0x2a90('0x7')](),controller['getContactsCsv']);router[_0x2a90('0x6')]('/:id/fields',auth[_0x2a90('0x7')](),controller['getCustomFields']);router[_0x2a90('0x6')](_0x2a90('0xf'),auth[_0x2a90('0x7')](),controller['getAgents']);router['post']('/',auth['isAuthenticated'](),controller[_0x2a90('0x10')]);router[_0x2a90('0x11')]('/:id/dispositions',auth[_0x2a90('0x7')](),controller[_0x2a90('0x12')]);router[_0x2a90('0x11')](_0x2a90('0xd'),auth[_0x2a90('0x7')](),controller[_0x2a90('0x13')]);router[_0x2a90('0x11')](_0x2a90('0x14'),auth[_0x2a90('0x7')](),controller['addCustomField']);router[_0x2a90('0x11')](_0x2a90('0xf'),auth[_0x2a90('0x7')](),controller['addAgents']);router[_0x2a90('0x15')](_0x2a90('0x16'),auth[_0x2a90('0x7')](),controller[_0x2a90('0x17')]);router[_0x2a90('0x18')](_0x2a90('0x16'),auth[_0x2a90('0x7')](),controller[_0x2a90('0x19')]);router[_0x2a90('0x18')](_0x2a90('0xb'),auth[_0x2a90('0x7')](),controller[_0x2a90('0x1a')]);router['delete'](_0x2a90('0xf'),auth[_0x2a90('0x7')](),controller[_0x2a90('0x1b')]);module[_0x2a90('0x1c')]=router;
\ No newline at end of file
index 2fbb964..6d08e4f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd7b9=['getDataValue','field','STRING','sequelize','exports','VIRTUAL'];(function(_0x22df4d,_0xa4790a){var _0x6a2020=function(_0x215c88){while(--_0x215c88){_0x22df4d['push'](_0x22df4d['shift']());}};_0x6a2020(++_0xa4790a);}(_0xd7b9,0x11d));var _0x9d7b=function(_0x49279c,_0x56da65){_0x49279c=_0x49279c-0x0;var _0x472c04=_0xd7b9[_0x49279c];return _0x472c04;};'use strict';var Sequelize=require(_0x9d7b('0x0'));module[_0x9d7b('0x1')]={'name':{'type':Sequelize[_0x9d7b('0x2')],'get':function(_0x404b6f){return this[_0x9d7b('0x3')](_0x9d7b('0x4'));}},'field':{'type':Sequelize['STRING'],'allowNull':![]},'operator':{'type':Sequelize[_0x9d7b('0x5')],'allowNull':![]},'value':{'type':Sequelize[_0x9d7b('0x5')],'allowNull':![]}};
\ No newline at end of file
+var _0x2920=['VIRTUAL','getDataValue','field','STRING','sequelize','exports'];(function(_0x3f175a,_0x267ae6){var _0x10c712=function(_0x271e34){while(--_0x271e34){_0x3f175a['push'](_0x3f175a['shift']());}};_0x10c712(++_0x267ae6);}(_0x2920,0x18a));var _0x0292=function(_0x368dbe,_0x56a12d){_0x368dbe=_0x368dbe-0x0;var _0x29b3f4=_0x2920[_0x368dbe];return _0x29b3f4;};'use strict';var Sequelize=require(_0x0292('0x0'));module[_0x0292('0x1')]={'name':{'type':Sequelize[_0x0292('0x2')],'get':function(_0x2511d5){return this[_0x0292('0x3')](_0x0292('0x4'));}},'field':{'type':Sequelize['STRING'],'allowNull':![]},'operator':{'type':Sequelize[_0x0292('0x5')],'allowNull':![]},'value':{'type':Sequelize[_0x0292('0x5')],'allowNull':![]}};
\ No newline at end of file
index cedf587..7668716 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','reject','save','update','then','stack','name','send','body','find','catch','destroy','params','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','jsforce'];(function(_0x4912a3,_0x453a7a){var _0x59a63f=function(_0x469863){while(--_0x469863){_0x4912a3['push'](_0x4912a3['shift']());}};_0x59a63f(++_0x453a7a);}(_0x34e8,0x12c));var _0x834e=function(_0x5fd72b,_0x473b9f){_0x5fd72b=_0x5fd72b-0x0;var _0x1422d7=_0x34e8[_0x5fd72b];return _0x1422d7;};'use strict';var jsonpatch=require(_0x834e('0x0'));var rp=require(_0x834e('0x1'));var moment=require(_0x834e('0x2'));var BPromise=require(_0x834e('0x3'));var Mustache=require('mustache');var util=require(_0x834e('0x4'));var path=require(_0x834e('0x5'));var sox=require(_0x834e('0x6'));var csv=require(_0x834e('0x7'));var ejs=require(_0x834e('0x8'));var fs=require('fs');var _=require(_0x834e('0x9'));var squel=require(_0x834e('0xa'));var crypto=require('crypto');var jsforce=require(_0x834e('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x834e('0x7'));var querystring=require(_0x834e('0xc'));var Papa=require(_0x834e('0xd'));var qs=require(_0x834e('0xe'));var logger=require(_0x834e('0xf'))(_0x834e('0x10'));var utils=require(_0x834e('0x11'));var config=require(_0x834e('0x12'));var db=require(_0x834e('0x13'))['db'];function respondWithStatusCode(_0x186b3b,_0x1e41fe){_0x1e41fe=_0x1e41fe||0xcc;return function(_0x36e124){if(_0x36e124){return _0x186b3b[_0x834e('0x14')](_0x1e41fe);}return _0x186b3b[_0x834e('0x15')](_0x1e41fe)[_0x834e('0x16')]();};}function respondWithResult(_0x1e00de,_0x2fd95c){_0x2fd95c=_0x2fd95c||0xc8;return function(_0x538bb3){if(_0x538bb3){return _0x1e00de[_0x834e('0x15')](_0x2fd95c)[_0x834e('0x17')](_0x538bb3);}};}function respondWithFilteredResult(_0x58a27e,_0x23848e){return function(_0x2d95f2){if(_0x2d95f2){var _0x28e659=_0x2d95f2[_0x834e('0x18')],_0x21cc0a=_0x23848e['offset'],_0x50e860=_0x23848e[_0x834e('0x19')]+_0x23848e['limit'],_0x43156c;if(_0x50e860>=_0x28e659){_0x50e860=_0x28e659;_0x43156c=0xc8;}else{_0x43156c=0xce;}_0x58a27e[_0x834e('0x15')](_0x43156c);return _0x58a27e[_0x834e('0x1a')]('Content-Range',_0x21cc0a+'-'+_0x50e860+'/'+_0x28e659)[_0x834e('0x17')](_0x2d95f2);}return null;};}function patchUpdates(_0x22106e){return function(_0x370fb5){try{jsonpatch['apply'](_0x370fb5,_0x22106e,!![]);}catch(_0x283e56){return BPromise[_0x834e('0x1b')](_0x283e56);}return _0x370fb5[_0x834e('0x1c')]();};}function saveUpdates(_0xb993a1,_0x237947){return function(_0x254677){if(_0x254677){return _0x254677[_0x834e('0x1d')](_0xb993a1)['then'](function(_0x2545b4){return _0x2545b4;});}return null;};}function removeEntity(_0x1fd2c6,_0x113ff4){return function(_0x325a99){if(_0x325a99){return _0x325a99['destroy']()[_0x834e('0x1e')](function(){_0x1fd2c6[_0x834e('0x15')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1b4bdf,_0x28d687){return function(_0x8d406e){if(!_0x8d406e){_0x1b4bdf['sendStatus'](0x194);}return _0x8d406e;};}function handleError(_0x4e3f48,_0x231619){_0x231619=_0x231619||0x1f4;return function(_0x34563b){logger['error'](_0x34563b[_0x834e('0x1f')]);if(_0x34563b[_0x834e('0x20')]){delete _0x34563b['name'];}_0x4e3f48[_0x834e('0x15')](_0x231619)[_0x834e('0x21')](_0x34563b);};}exports[_0x834e('0x1d')]=function(_0x561cd2,_0x24fcf7){if(_0x561cd2[_0x834e('0x22')]['id']){delete _0x561cd2['body']['id'];}return db['Condition'][_0x834e('0x23')]({'where':{'id':_0x561cd2['params']['id']}})[_0x834e('0x1e')](handleEntityNotFound(_0x24fcf7,null))[_0x834e('0x1e')](saveUpdates(_0x561cd2[_0x834e('0x22')],null))[_0x834e('0x1e')](respondWithResult(_0x24fcf7,null))[_0x834e('0x24')](handleError(_0x24fcf7,null));};exports[_0x834e('0x25')]=function(_0x491919,_0x510780){return db['Condition']['find']({'where':{'id':_0x491919[_0x834e('0x26')]['id']}})[_0x834e('0x1e')](handleEntityNotFound(_0x510780,null))[_0x834e('0x1e')](removeEntity(_0x510780,null))['catch'](handleError(_0x510780,null));};
\ No newline at end of file
+var _0x9c44=['params','catch','moment','bluebird','mustache','util','path','sox','lodash','crypto','jsforce','desk.js','to-csv','querystring','../../components/parsers/qs','../../config/logger','api','../../config/utils','sendStatus','status','json','count','offset','set','Content-Range','apply','then','destroy','end','stack','name','body','Condition','find'];(function(_0x5d32ab,_0x2a3260){var _0x5377e0=function(_0x2c0e98){while(--_0x2c0e98){_0x5d32ab['push'](_0x5d32ab['shift']());}};_0x5377e0(++_0x2a3260);}(_0x9c44,0x178));var _0x49c4=function(_0x5608a3,_0x5b33c5){_0x5608a3=_0x5608a3-0x0;var _0x1ed50a=_0x9c44[_0x5608a3];return _0x1ed50a;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x49c4('0x0'));var BPromise=require(_0x49c4('0x1'));var Mustache=require(_0x49c4('0x2'));var util=require(_0x49c4('0x3'));var path=require(_0x49c4('0x4'));var sox=require(_0x49c4('0x5'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x49c4('0x6'));var squel=require('squel');var crypto=require(_0x49c4('0x7'));var jsforce=require(_0x49c4('0x8'));var deskjs=require(_0x49c4('0x9'));var toCsv=require(_0x49c4('0xa'));var querystring=require(_0x49c4('0xb'));var Papa=require('papaparse');var qs=require(_0x49c4('0xc'));var logger=require(_0x49c4('0xd'))(_0x49c4('0xe'));var utils=require(_0x49c4('0xf'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x451ea6,_0x313e73){_0x313e73=_0x313e73||0xcc;return function(_0x58cad7){if(_0x58cad7){return _0x451ea6[_0x49c4('0x10')](_0x313e73);}return _0x451ea6[_0x49c4('0x11')](_0x313e73)['end']();};}function respondWithResult(_0x536d42,_0x1d19bf){_0x1d19bf=_0x1d19bf||0xc8;return function(_0x6d1b08){if(_0x6d1b08){return _0x536d42['status'](_0x1d19bf)[_0x49c4('0x12')](_0x6d1b08);}};}function respondWithFilteredResult(_0x403bfb,_0x5f2fd9){return function(_0x1909fe){if(_0x1909fe){var _0x280996=_0x1909fe[_0x49c4('0x13')],_0x21f15a=_0x5f2fd9[_0x49c4('0x14')],_0x2decee=_0x5f2fd9[_0x49c4('0x14')]+_0x5f2fd9['limit'],_0x12777c;if(_0x2decee>=_0x280996){_0x2decee=_0x280996;_0x12777c=0xc8;}else{_0x12777c=0xce;}_0x403bfb[_0x49c4('0x11')](_0x12777c);return _0x403bfb[_0x49c4('0x15')](_0x49c4('0x16'),_0x21f15a+'-'+_0x2decee+'/'+_0x280996)[_0x49c4('0x12')](_0x1909fe);}return null;};}function patchUpdates(_0x2abc78){return function(_0x53e3a2){try{jsonpatch[_0x49c4('0x17')](_0x53e3a2,_0x2abc78,!![]);}catch(_0x2891f4){return BPromise['reject'](_0x2891f4);}return _0x53e3a2['save']();};}function saveUpdates(_0x3c782d,_0x2f82d5){return function(_0x3addb2){if(_0x3addb2){return _0x3addb2['update'](_0x3c782d)[_0x49c4('0x18')](function(_0x50b151){return _0x50b151;});}return null;};}function removeEntity(_0x2cbd50,_0x1806c2){return function(_0xe31fcc){if(_0xe31fcc){return _0xe31fcc[_0x49c4('0x19')]()[_0x49c4('0x18')](function(){_0x2cbd50[_0x49c4('0x11')](0xcc)[_0x49c4('0x1a')]();});}};}function handleEntityNotFound(_0x46e475,_0x2197d2){return function(_0x578447){if(!_0x578447){_0x46e475['sendStatus'](0x194);}return _0x578447;};}function handleError(_0x57f502,_0x1c99b1){_0x1c99b1=_0x1c99b1||0x1f4;return function(_0x4f0b62){logger['error'](_0x4f0b62[_0x49c4('0x1b')]);if(_0x4f0b62[_0x49c4('0x1c')]){delete _0x4f0b62[_0x49c4('0x1c')];}_0x57f502[_0x49c4('0x11')](_0x1c99b1)['send'](_0x4f0b62);};}exports['update']=function(_0x180276,_0x9cb797){if(_0x180276['body']['id']){delete _0x180276[_0x49c4('0x1d')]['id'];}return db[_0x49c4('0x1e')][_0x49c4('0x1f')]({'where':{'id':_0x180276[_0x49c4('0x20')]['id']}})['then'](handleEntityNotFound(_0x9cb797,null))['then'](saveUpdates(_0x180276[_0x49c4('0x1d')],null))['then'](respondWithResult(_0x9cb797,null))[_0x49c4('0x21')](handleError(_0x9cb797,null));};exports[_0x49c4('0x19')]=function(_0x3f1708,_0x372a47){return db['Condition'][_0x49c4('0x1f')]({'where':{'id':_0x3f1708[_0x49c4('0x20')]['id']}})[_0x49c4('0x18')](handleEntityNotFound(_0x372a47,null))[_0x49c4('0x18')](removeEntity(_0x372a47,null))[_0x49c4('0x21')](handleError(_0x372a47,null));};
\ No newline at end of file
index 7c9d778..785fa19 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe15e=['../../config/logger','moment','bluebird','request-promise','./condition.attributes','exports','define','tools_conditions','lodash','util'];(function(_0x548200,_0x3241b8){var _0x1a6d74=function(_0x412f84){while(--_0x412f84){_0x548200['push'](_0x548200['shift']());}};_0x1a6d74(++_0x3241b8);}(_0xe15e,0x184));var _0xee15=function(_0x1d5400,_0x567e3c){_0x1d5400=_0x1d5400-0x0;var _0x21d9fe=_0xe15e[_0x1d5400];return _0x21d9fe;};'use strict';var _=require(_0xee15('0x0'));var util=require(_0xee15('0x1'));var logger=require(_0xee15('0x2'))('api');var moment=require(_0xee15('0x3'));var BPromise=require(_0xee15('0x4'));var rp=require(_0xee15('0x5'));var attributes=require(_0xee15('0x6'));module[_0xee15('0x7')]=function(_0xdb1bdf,_0x228192){return _0xdb1bdf[_0xee15('0x8')]('Condition',attributes,{'tableName':_0xee15('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xcd1a=['./condition.attributes','exports','define','tools_conditions','lodash','../../config/logger','api','bluebird','request-promise'];(function(_0x2764be,_0x376b6c){var _0x3397ea=function(_0x4b44dc){while(--_0x4b44dc){_0x2764be['push'](_0x2764be['shift']());}};_0x3397ea(++_0x376b6c);}(_0xcd1a,0x100));var _0xacd1=function(_0x26462c,_0xd20a35){_0x26462c=_0x26462c-0x0;var _0x509a42=_0xcd1a[_0x26462c];return _0x509a42;};'use strict';var _=require(_0xacd1('0x0'));var util=require('util');var logger=require(_0xacd1('0x1'))(_0xacd1('0x2'));var moment=require('moment');var BPromise=require(_0xacd1('0x3'));var rp=require(_0xacd1('0x4'));var attributes=require(_0xacd1('0x5'));module[_0xacd1('0x6')]=function(_0xe1387e,_0x238937){return _0xe1387e[_0xacd1('0x7')]('Condition',attributes,{'tableName':_0xacd1('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1c6072c..f0185e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x612d=['client','http','Condition,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','lodash','util','moment','bluebird','../../mysqldb','../../config/logger','../../config/environment','jayson/promise'];(function(_0x44abf9,_0x25790b){var _0x4e9de3=function(_0x20ffd3){while(--_0x20ffd3){_0x44abf9['push'](_0x44abf9['shift']());}};_0x4e9de3(++_0x25790b);}(_0x612d,0x158));var _0xd612=function(_0x22b70f,_0x4c853f){_0x22b70f=_0x22b70f-0x0;var _0x100985=_0x612d[_0x22b70f];return _0x100985;};'use strict';var _=require(_0xd612('0x0'));var util=require(_0xd612('0x1'));var moment=require(_0xd612('0x2'));var BPromise=require(_0xd612('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xd612('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xd612('0x5'))('rpc');var config=require(_0xd612('0x6'));var jayson=require(_0xd612('0x7'));var client=jayson[_0xd612('0x8')][_0xd612('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4724ad,_0x920a2f,_0x3ae7ae){return new BPromise(function(_0x1c4d91,_0x14a3f2){return client['request'](_0x4724ad,_0x3ae7ae)['then'](function(_0x2b875d){logger['info'](_0xd612('0xa'),_0x920a2f,_0xd612('0xb'));logger[_0xd612('0xc')]('Condition,\x20%s,\x20%s,\x20%s',_0x920a2f,'request\x20sent',JSON[_0xd612('0xd')](_0x2b875d));if(_0x2b875d[_0xd612('0xe')]){if(_0x2b875d[_0xd612('0xe')]['code']===0x1f4){logger[_0xd612('0xe')](_0xd612('0xa'),_0x920a2f,_0x2b875d[_0xd612('0xe')]['message']);return _0x14a3f2(_0x2b875d[_0xd612('0xe')][_0xd612('0xf')]);}logger[_0xd612('0xe')]('Condition,\x20%s,\x20%s',_0x920a2f,_0x2b875d[_0xd612('0xe')][_0xd612('0xf')]);return _0x1c4d91(_0x2b875d[_0xd612('0xe')][_0xd612('0xf')]);}else{logger['info'](_0xd612('0xa'),_0x920a2f,_0xd612('0xb'));_0x1c4d91(_0x2b875d['result'][_0xd612('0xf')]);}})['catch'](function(_0x16ec62){logger[_0xd612('0xe')](_0xd612('0xa'),_0x920a2f,_0x16ec62);_0x14a3f2(_0x16ec62);});});}
\ No newline at end of file
+var _0xf46d=['then','Condition,\x20%s,\x20%s','request\x20sent','debug','Condition,\x20%s,\x20%s,\x20%s','stringify','message','error','info','result','catch','util','bluebird','randomstring','../../config/logger','rpc','jayson/promise','client','http','request'];(function(_0x39c1b7,_0xc6646a){var _0x30ddc3=function(_0x4abb89){while(--_0x4abb89){_0x39c1b7['push'](_0x39c1b7['shift']());}};_0x30ddc3(++_0xc6646a);}(_0xf46d,0x1c3));var _0xdf46=function(_0x243217,_0x522951){_0x243217=_0x243217-0x0;var _0x478029=_0xf46d[_0x243217];return _0x478029;};'use strict';var _=require('lodash');var util=require(_0xdf46('0x0'));var moment=require('moment');var BPromise=require(_0xdf46('0x1'));var rs=require(_0xdf46('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xdf46('0x3'))(_0xdf46('0x4'));var config=require('../../config/environment');var jayson=require(_0xdf46('0x5'));var client=jayson[_0xdf46('0x6')][_0xdf46('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x34a96a,_0x53540d,_0x1bab63){return new BPromise(function(_0x376c6d,_0x4835d2){return client[_0xdf46('0x8')](_0x34a96a,_0x1bab63)[_0xdf46('0x9')](function(_0x242806){logger['info'](_0xdf46('0xa'),_0x53540d,_0xdf46('0xb'));logger[_0xdf46('0xc')](_0xdf46('0xd'),_0x53540d,_0xdf46('0xb'),JSON[_0xdf46('0xe')](_0x242806));if(_0x242806['error']){if(_0x242806['error']['code']===0x1f4){logger['error'](_0xdf46('0xa'),_0x53540d,_0x242806['error'][_0xdf46('0xf')]);return _0x4835d2(_0x242806[_0xdf46('0x10')][_0xdf46('0xf')]);}logger[_0xdf46('0x10')]('Condition,\x20%s,\x20%s',_0x53540d,_0x242806[_0xdf46('0x10')]['message']);return _0x376c6d(_0x242806[_0xdf46('0x10')][_0xdf46('0xf')]);}else{logger[_0xdf46('0x11')]('Condition,\x20%s,\x20%s',_0x53540d,_0xdf46('0xb'));_0x376c6d(_0x242806[_0xdf46('0x12')]['message']);}})[_0xdf46('0x13')](function(_0xacf1bb){logger[_0xdf46('0x10')](_0xdf46('0xa'),_0x53540d,_0xacf1bb);_0x4835d2(_0xacf1bb);});});}
\ No newline at end of file
index e081bee..26305c5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc79a=['update','delete','destroy','exports','multer','util','path','express','Router','../../components/interaction/service','./condition.controller','put','/:id','isAuthenticated'];(function(_0x5d6270,_0x83b57a){var _0x168f26=function(_0x258a27){while(--_0x258a27){_0x5d6270['push'](_0x5d6270['shift']());}};_0x168f26(++_0x83b57a);}(_0xc79a,0x162));var _0xac79=function(_0x27f9d3,_0x54ee48){_0x27f9d3=_0x27f9d3-0x0;var _0x1d2c10=_0xc79a[_0x27f9d3];return _0x1d2c10;};'use strict';var multer=require(_0xac79('0x0'));var util=require(_0xac79('0x1'));var path=require(_0xac79('0x2'));var express=require(_0xac79('0x3'));var router=express[_0xac79('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xac79('0x5'));var config=require('../../config/environment');var controller=require(_0xac79('0x6'));router[_0xac79('0x7')](_0xac79('0x8'),auth[_0xac79('0x9')](),controller[_0xac79('0xa')]);router[_0xac79('0xb')](_0xac79('0x8'),auth[_0xac79('0x9')](),controller[_0xac79('0xc')]);module[_0xac79('0xd')]=router;
\ No newline at end of file
+var _0x0445=['./condition.controller','put','/:id','delete','isAuthenticated','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x1989ec,_0x2b3626){var _0x10e2a0=function(_0x1917a8){while(--_0x1917a8){_0x1989ec['push'](_0x1989ec['shift']());}};_0x10e2a0(++_0x2b3626);}(_0x0445,0x9d));var _0x5044=function(_0x1f1170,_0x3b5783){_0x1f1170=_0x1f1170-0x0;var _0x127b7b=_0x0445[_0x1f1170];return _0x127b7b;};'use strict';var multer=require(_0x5044('0x0'));var util=require(_0x5044('0x1'));var path=require(_0x5044('0x2'));var express=require(_0x5044('0x3'));var router=express[_0x5044('0x4')]();var auth=require(_0x5044('0x5'));var interaction=require(_0x5044('0x6'));var config=require(_0x5044('0x7'));var controller=require(_0x5044('0x8'));router[_0x5044('0x9')](_0x5044('0xa'),auth['isAuthenticated'](),controller['update']);router[_0x5044('0xb')](_0x5044('0xa'),auth[_0x5044('0xc')](),controller[_0x5044('0xd')]);module[_0x5044('0xe')]=router;
\ No newline at end of file
index c9b587f..bfc3781 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a74=['sequelize','exports','STRING','name'];(function(_0x35d99d,_0x752489){var _0x26c930=function(_0x5b6608){while(--_0x5b6608){_0x35d99d['push'](_0x35d99d['shift']());}};_0x26c930(++_0x752489);}(_0x8a74,0xa0));var _0x48a7=function(_0x9dadc8,_0x5e9fe2){_0x9dadc8=_0x9dadc8-0x0;var _0x22159e=_0x8a74[_0x9dadc8];return _0x22159e;};'use strict';var Sequelize=require(_0x48a7('0x0'));module[_0x48a7('0x1')]={'name':{'type':Sequelize[_0x48a7('0x2')],'allowNull':![],'unique':_0x48a7('0x3')},'description':{'type':Sequelize[_0x48a7('0x2')]}};
\ No newline at end of file
+var _0xb230=['STRING','name','exports'];(function(_0x4bdd45,_0x4d161a){var _0x4b17c4=function(_0x2d8191){while(--_0x2d8191){_0x4bdd45['push'](_0x4bdd45['shift']());}};_0x4b17c4(++_0x4d161a);}(_0xb230,0x182));var _0x0b23=function(_0x162f69,_0x32b690){_0x162f69=_0x162f69-0x0;var _0x1bdbd8=_0xb230[_0x162f69];return _0x1bdbd8;};'use strict';var Sequelize=require('sequelize');module[_0x0b23('0x0')]={'name':{'type':Sequelize[_0x0b23('0x1')],'allowNull':![],'unique':_0x0b23('0x2')},'description':{'type':Sequelize[_0x0b23('0x1')]}};
\ No newline at end of file
index b6ca5cd..7ee019c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x00a9=['../../config/environment','../../mysqldb','socket.io-emitter','localhost','register','sendStatus','status','offset','limit','set','Content-Range','json','reject','save','update','then','destroy','end','error','stack','name','send','Dashboard','rawAttributes','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','add','day','merge','filter','map','options','where','count','includeAll','include','findAll','rows','catch','show','params','find','create','body','clone','get','omit','createdAt','updatedAt','type','iframe','attrUrl','attrs','https://','custom','attrPath','clock','attrHourFormat','value','HH:mm:ss','attrTimezone','0.00','attrFontSize','attrMetric','attrVoiceQueues','multibar-chart','pie-chart','attrSerie1','total','attrSerie2','attrSerie3','web-report','attrReport','attrRefresh','widgetAttributes:\x20%s','stringify','addItem','DashboardId','DashboardItem','getItems','fast-json-patch','request-promise','moment','mustache','util','path','sox','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils'];(function(_0x575e00,_0x559d6e){var _0x199f97=function(_0xd65d89){while(--_0xd65d89){_0x575e00['push'](_0x575e00['shift']());}};_0x199f97(++_0x559d6e);}(_0x00a9,0x1a7));var _0x900a=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x00a9[_0x42cae2];return _0x5f256f;};'use strict';var jsonpatch=require(_0x900a('0x0'));var rp=require(_0x900a('0x1'));var moment=require(_0x900a('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x900a('0x3'));var util=require(_0x900a('0x4'));var path=require(_0x900a('0x5'));var sox=require(_0x900a('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x900a('0x7'));var squel=require('squel');var crypto=require(_0x900a('0x8'));var jsforce=require(_0x900a('0x9'));var deskjs=require(_0x900a('0xa'));var toCsv=require(_0x900a('0xb'));var querystring=require(_0x900a('0xc'));var Papa=require(_0x900a('0xd'));var qs=require(_0x900a('0xe'));var logger=require(_0x900a('0xf'))('api');var utils=require(_0x900a('0x10'));var config=require(_0x900a('0x11'));var db=require(_0x900a('0x12'))['db'];var socket=require(_0x900a('0x13'))({'host':_0x900a('0x14'),'port':0x18eb});require('./dashboard.socket')[_0x900a('0x15')](socket);function respondWithStatusCode(_0x3eaaec,_0x3f5d9a){_0x3f5d9a=_0x3f5d9a||0xcc;return function(_0x3470a1){if(_0x3470a1){return _0x3eaaec[_0x900a('0x16')](_0x3f5d9a);}return _0x3eaaec[_0x900a('0x17')](_0x3f5d9a)['end']();};}function respondWithResult(_0x303f1c,_0x525c8b){_0x525c8b=_0x525c8b||0xc8;return function(_0x1d49fe){if(_0x1d49fe){return _0x303f1c[_0x900a('0x17')](_0x525c8b)['json'](_0x1d49fe);}};}function respondWithFilteredResult(_0x101552,_0x8c6ce1){return function(_0x3156b5){if(_0x3156b5){var _0x448965=_0x3156b5['count'],_0x43e5ab=_0x8c6ce1['offset'],_0x3a12fb=_0x8c6ce1[_0x900a('0x18')]+_0x8c6ce1[_0x900a('0x19')],_0x297493;if(_0x3a12fb>=_0x448965){_0x3a12fb=_0x448965;_0x297493=0xc8;}else{_0x297493=0xce;}_0x101552[_0x900a('0x17')](_0x297493);return _0x101552[_0x900a('0x1a')](_0x900a('0x1b'),_0x43e5ab+'-'+_0x3a12fb+'/'+_0x448965)[_0x900a('0x1c')](_0x3156b5);}return null;};}function patchUpdates(_0x7f57c1){return function(_0x213bbe){try{jsonpatch['apply'](_0x213bbe,_0x7f57c1,!![]);}catch(_0x116501){return BPromise[_0x900a('0x1d')](_0x116501);}return _0x213bbe[_0x900a('0x1e')]();};}function saveUpdates(_0x1a1ecc,_0x5af108){return function(_0x16b596){if(_0x16b596){return _0x16b596[_0x900a('0x1f')](_0x1a1ecc)[_0x900a('0x20')](function(_0x48eacb){return _0x48eacb;});}return null;};}function removeEntity(_0xedb253,_0x4342ad){return function(_0x4955a5){if(_0x4955a5){return _0x4955a5[_0x900a('0x21')]()['then'](function(){_0xedb253['status'](0xcc)[_0x900a('0x22')]();});}};}function handleEntityNotFound(_0x5cdb81,_0x571eb6){return function(_0x2d76d9){if(!_0x2d76d9){_0x5cdb81[_0x900a('0x16')](0x194);}return _0x2d76d9;};}function handleError(_0x1b9ac2,_0x35cac5){_0x35cac5=_0x35cac5||0x1f4;return function(_0x50edd4){logger[_0x900a('0x23')](_0x50edd4[_0x900a('0x24')]);if(_0x50edd4[_0x900a('0x25')]){delete _0x50edd4[_0x900a('0x25')];}_0x1b9ac2[_0x900a('0x17')](_0x35cac5)[_0x900a('0x26')](_0x50edd4);};}exports['index']=function(_0x245759,_0x3f2241){var _0x3b5d24={},_0x50c100={},_0x14af55={'count':0x0,'rows':[]};var _0x157b57=db[_0x900a('0x27')][_0x900a('0x28')];_0x50c100[_0x900a('0x29')]=_[_0x900a('0x2a')](_0x157b57);var _0x5b13f6={'dateStart':_0x245759['query'][_0x900a('0x2b')],'dateEnd':_0x245759[_0x900a('0x2c')]['dateEnd']};delete _0x245759[_0x900a('0x2c')][_0x900a('0x2b')];delete _0x245759[_0x900a('0x2c')][_0x900a('0x2d')];_0x50c100[_0x900a('0x2c')]=_[_0x900a('0x2a')](_0x245759[_0x900a('0x2c')]);_0x50c100[_0x900a('0x2e')]=_[_0x900a('0x2f')](_0x50c100[_0x900a('0x29')],_0x50c100[_0x900a('0x2c')]);_0x3b5d24[_0x900a('0x30')]=_[_0x900a('0x2f')](_0x50c100[_0x900a('0x29')],qs[_0x900a('0x31')](_0x245759[_0x900a('0x2c')][_0x900a('0x31')]));_0x3b5d24[_0x900a('0x30')]=_0x3b5d24[_0x900a('0x30')][_0x900a('0x32')]?_0x3b5d24[_0x900a('0x30')]:_0x50c100[_0x900a('0x29')];if(!_0x245759[_0x900a('0x2c')][_0x900a('0x33')](_0x900a('0x34'))){_0x3b5d24[_0x900a('0x19')]=qs[_0x900a('0x19')](_0x245759[_0x900a('0x2c')][_0x900a('0x19')]);_0x3b5d24[_0x900a('0x18')]=qs['offset'](_0x245759[_0x900a('0x2c')][_0x900a('0x18')]);}_0x3b5d24[_0x900a('0x35')]=qs[_0x900a('0x36')](_0x245759[_0x900a('0x2c')][_0x900a('0x36')]);_0x3b5d24['where']=qs[_0x900a('0x2e')](_[_0x900a('0x37')](_0x245759[_0x900a('0x2c')],_0x50c100[_0x900a('0x2e')]));if(_0x5b13f6[_0x900a('0x2b')]){if(_0x5b13f6['dateEnd']){_0x5b13f6[_0x900a('0x2d')]=moment(_0x5b13f6[_0x900a('0x2d')])[_0x900a('0x38')](0x1,_0x900a('0x39'));}else{_0x5b13f6[_0x900a('0x2d')]=moment(_0x5b13f6[_0x900a('0x2b')])[_0x900a('0x38')](0x1,_0x900a('0x39'));}_[_0x900a('0x3a')](_0x3b5d24['where'],{'createdAt':{'$gte':_0x5b13f6[_0x900a('0x2b')],'$lte':_0x5b13f6[_0x900a('0x2d')]}});}if(_0x245759[_0x900a('0x2c')][_0x900a('0x3b')]){_0x3b5d24['where']=_['merge'](_0x3b5d24['where'],{'$or':_[_0x900a('0x3c')](_0x3b5d24[_0x900a('0x30')],function(_0x62b7a6){var _0x140642={};_0x140642[_0x62b7a6]={'$like':'%'+_0x245759[_0x900a('0x2c')][_0x900a('0x3b')]+'%'};return _0x140642;})});}_0x3b5d24=_[_0x900a('0x3a')]({},_0x3b5d24,_0x245759[_0x900a('0x3d')]);var _0x5bfcf1={'where':_0x3b5d24[_0x900a('0x3e')]};return db[_0x900a('0x27')][_0x900a('0x3f')](_0x5bfcf1)[_0x900a('0x20')](function(_0x43cdf0){_0x14af55[_0x900a('0x3f')]=_0x43cdf0;if(_0x245759[_0x900a('0x2c')][_0x900a('0x40')]){_0x3b5d24[_0x900a('0x41')]=[{'all':!![]}];}return db[_0x900a('0x27')][_0x900a('0x42')](_0x3b5d24);})[_0x900a('0x20')](function(_0x46bd9c){_0x14af55[_0x900a('0x43')]=_0x46bd9c;return _0x14af55;})[_0x900a('0x20')](respondWithFilteredResult(_0x3f2241,_0x3b5d24))[_0x900a('0x44')](handleError(_0x3f2241,null));};exports[_0x900a('0x45')]=function(_0x2a515b,_0x40ecff){var _0x52160d={'raw':![],'where':{'id':_0x2a515b[_0x900a('0x46')]['id']}},_0x5b9d34={};_0x5b9d34[_0x900a('0x29')]=_[_0x900a('0x2a')](db[_0x900a('0x27')]['rawAttributes']);_0x5b9d34['query']=_[_0x900a('0x2a')](_0x2a515b[_0x900a('0x2c')]);_0x5b9d34[_0x900a('0x2e')]=_['intersection'](_0x5b9d34[_0x900a('0x29')],_0x5b9d34[_0x900a('0x2c')]);_0x52160d[_0x900a('0x30')]=_[_0x900a('0x2f')](_0x5b9d34[_0x900a('0x29')],qs['fields'](_0x2a515b[_0x900a('0x2c')][_0x900a('0x31')]));_0x52160d['attributes']=_0x52160d[_0x900a('0x30')]['length']?_0x52160d[_0x900a('0x30')]:_0x5b9d34[_0x900a('0x29')];if(_0x2a515b[_0x900a('0x2c')][_0x900a('0x40')]){_0x52160d[_0x900a('0x41')]=[{'all':!![]}];}_0x52160d=_[_0x900a('0x3a')]({},_0x52160d,_0x2a515b[_0x900a('0x3d')]);return db['Dashboard'][_0x900a('0x47')](_0x52160d)[_0x900a('0x20')](handleEntityNotFound(_0x40ecff,null))['then'](respondWithResult(_0x40ecff,null))['catch'](handleError(_0x40ecff,null));};exports[_0x900a('0x48')]=function(_0xe3db7b,_0x3bbdbb){return db['Dashboard'][_0x900a('0x48')](_0xe3db7b[_0x900a('0x49')],{})[_0x900a('0x20')](respondWithResult(_0x3bbdbb,0xc9))[_0x900a('0x44')](handleError(_0x3bbdbb,null));};exports[_0x900a('0x4a')]=function(_0x25e441,_0x531537){var _0x22b491={'raw':![],'where':{'id':_0x25e441[_0x900a('0x46')]['id']}},_0x5a6507={};_0x5a6507['model']=_['keys'](db[_0x900a('0x27')][_0x900a('0x28')]);_0x22b491[_0x900a('0x30')]=_[_0x900a('0x2f')](_0x5a6507[_0x900a('0x29')],qs['fields'](_0x25e441[_0x900a('0x2c')][_0x900a('0x31')]));_0x22b491[_0x900a('0x30')]=_0x22b491['attributes']['length']?_0x22b491[_0x900a('0x30')]:_0x5a6507[_0x900a('0x29')];if(_0x25e441[_0x900a('0x2c')][_0x900a('0x40')]){_0x22b491[_0x900a('0x41')]=[{'all':!![]}];}_0x22b491=_[_0x900a('0x3a')]({},_0x22b491,_0x25e441[_0x900a('0x3d')]);return db[_0x900a('0x27')][_0x900a('0x47')](_0x22b491)['then'](handleEntityNotFound(_0x531537,null))['then'](function(_0x496d21){if(_0x496d21){var _0x1f4af2=_0x496d21[_0x900a('0x4b')]({'plain':!![]});_0x1f4af2=qs[_0x900a('0x4c')](_0x1f4af2,['id',_0x900a('0x4d'),_0x900a('0x4e')]);_0x25e441[_0x900a('0x49')]=_[_0x900a('0x4c')](_0x25e441[_0x900a('0x49')],['id',_0x900a('0x4d'),_0x900a('0x4e')]);return db['Dashboard'][_0x900a('0x48')](_[_0x900a('0x3a')](_0x1f4af2,_0x25e441['body']),{'include':_0x25e441[_0x900a('0x2c')]['includeAll']?[{'all':!![]}]:undefined});}})['then'](respondWithResult(_0x531537,0xc9))[_0x900a('0x44')](handleError(_0x531537,null));};exports['update']=function(_0x23dc7b,_0x43fb72){if(_0x23dc7b['body']['id']){delete _0x23dc7b[_0x900a('0x49')]['id'];}return db[_0x900a('0x27')][_0x900a('0x47')]({'where':{'id':_0x23dc7b[_0x900a('0x46')]['id']}})[_0x900a('0x20')](handleEntityNotFound(_0x43fb72,null))[_0x900a('0x20')](saveUpdates(_0x23dc7b[_0x900a('0x49')],null))[_0x900a('0x20')](respondWithResult(_0x43fb72,null))[_0x900a('0x44')](handleError(_0x43fb72,null));};exports['destroy']=function(_0x1466ac,_0x3e4b74){return db[_0x900a('0x27')][_0x900a('0x47')]({'where':{'id':_0x1466ac[_0x900a('0x46')]['id']}})[_0x900a('0x20')](handleEntityNotFound(_0x3e4b74,null))[_0x900a('0x20')](removeEntity(_0x3e4b74,null))['catch'](handleError(_0x3e4b74,null));};function widgetAttributes(_0x2aa870){try{switch(_0x2aa870[_0x900a('0x4f')]){case _0x900a('0x50'):return[{'name':_0x900a('0x51'),'value':_0x2aa870[_0x900a('0x51')]||(_0x2aa870[_0x900a('0x52')]&&_0x2aa870[_0x900a('0x52')][0x0]?_0x2aa870['attrs'][0x0]['value']:undefined)||_0x900a('0x53')}];case _0x900a('0x54'):return[{'name':_0x900a('0x55'),'value':_0x2aa870['attrPath']||(_0x2aa870[_0x900a('0x52')]&&_0x2aa870[_0x900a('0x52')][0x0]?_0x2aa870[_0x900a('0x52')][0x0]['value']:undefined)||''}];case _0x900a('0x56'):return[{'name':_0x900a('0x57'),'value':_0x2aa870[_0x900a('0x57')]||(_0x2aa870[_0x900a('0x52')]&&_0x2aa870[_0x900a('0x52')][0x0]?_0x2aa870[_0x900a('0x52')][0x0][_0x900a('0x58')]:undefined)||_0x900a('0x59')},{'name':_0x900a('0x5a'),'value':_0x2aa870['attrTimezone']||(_0x2aa870[_0x900a('0x52')]&&_0x2aa870[_0x900a('0x52')][0x1]?_0x2aa870[_0x900a('0x52')][0x1][_0x900a('0x58')]:undefined)||_0x900a('0x5b')},{'name':_0x900a('0x5c'),'value':_0x2aa870[_0x900a('0x5c')]||(_0x2aa870['attrs']&&_0x2aa870[_0x900a('0x52')][0x2]?_0x2aa870['attrs'][0x2][_0x900a('0x58')]:undefined)||0xc}];case'counter':return[{'name':'attrMetric','value':_0x2aa870[_0x900a('0x5d')]||(_0x2aa870[_0x900a('0x52')]&&_0x2aa870[_0x900a('0x52')][0x0]?_0x2aa870[_0x900a('0x52')][0x0]['value']:undefined)||'total'},{'name':_0x900a('0x5e'),'value':_0x2aa870[_0x900a('0x5e')]||(_0x2aa870['attrs']&&_0x2aa870['attrs'][0x1]?_0x2aa870['attrs'][0x1]['value']:undefined)||[]},{'name':_0x900a('0x5c'),'value':_0x2aa870[_0x900a('0x5c')]||(_0x2aa870[_0x900a('0x52')]&&_0x2aa870[_0x900a('0x52')][0x2]?_0x2aa870[_0x900a('0x52')][0x2][_0x900a('0x58')]:undefined)||0x14}];case _0x900a('0x5f'):case _0x900a('0x60'):return[{'name':_0x900a('0x61'),'value':_0x2aa870['attrSerie1']||(_0x2aa870['attrs']&&_0x2aa870[_0x900a('0x52')][0x0]?_0x2aa870[_0x900a('0x52')][0x0][_0x900a('0x58')]:undefined)||_0x900a('0x62')},{'name':_0x900a('0x63'),'value':_0x2aa870[_0x900a('0x63')]||(_0x2aa870['attrs']&&_0x2aa870[_0x900a('0x52')][0x1]?_0x2aa870[_0x900a('0x52')][0x1][_0x900a('0x58')]:undefined)||null},{'name':_0x900a('0x64'),'value':_0x2aa870[_0x900a('0x64')]||(_0x2aa870['attrs']&&_0x2aa870[_0x900a('0x52')][0x2]?_0x2aa870[_0x900a('0x52')][0x2][_0x900a('0x58')]:undefined)||null},{'name':_0x900a('0x5e'),'value':_0x2aa870[_0x900a('0x5e')]||(_0x2aa870['attrs']&&_0x2aa870['attrs'][0x3]?_0x2aa870['attrs'][0x3]['value']:undefined)||[]}];case _0x900a('0x65'):return[{'name':_0x900a('0x66'),'value':_0x2aa870[_0x900a('0x66')]||(_0x2aa870[_0x900a('0x52')]&&_0x2aa870['attrs'][0x0]?_0x2aa870[_0x900a('0x52')][0x0][_0x900a('0x58')]:undefined)||null},{'name':_0x900a('0x67'),'value':_0x2aa870[_0x900a('0x67')]||(_0x2aa870[_0x900a('0x52')]&&_0x2aa870[_0x900a('0x52')][0x1]?_0x2aa870[_0x900a('0x52')][0x1][_0x900a('0x58')]:undefined)||0x0}];default:return[];}}catch(_0x23b3f4){logger['error'](_0x900a('0x68'),JSON[_0x900a('0x69')](_0x23b3f4));return[];}}exports[_0x900a('0x6a')]=function(_0x47e02a,_0x3c500a,_0x35efe4){if(_0x47e02a['body']['id']){delete _0x47e02a[_0x900a('0x49')]['id'];}return db['Dashboard'][_0x900a('0x47')]({'where':{'id':_0x47e02a[_0x900a('0x46')]['id']}})[_0x900a('0x20')](handleEntityNotFound(_0x3c500a,null))[_0x900a('0x20')](function(_0x57026c){if(_0x57026c){_0x47e02a['body'][_0x900a('0x6b')]=_0x57026c['id'];_0x47e02a[_0x900a('0x49')][_0x900a('0x52')]=widgetAttributes(_0x47e02a[_0x900a('0x49')]);return db[_0x900a('0x6c')]['create'](_0x47e02a[_0x900a('0x49')]);}})['then'](respondWithResult(_0x3c500a,null))[_0x900a('0x44')](handleError(_0x3c500a,null));};exports[_0x900a('0x6d')]=function(_0x34d168,_0x1c3838,_0x29150b){var _0x5898f5={};var _0x4f1482={};var _0x5210c4;var _0x1daf33;return db[_0x900a('0x27')]['findOne']({'where':{'id':_0x34d168[_0x900a('0x46')]['id']}})[_0x900a('0x20')](handleEntityNotFound(_0x1c3838,null))[_0x900a('0x20')](function(_0x1ee806){if(_0x1ee806){_0x5210c4=_0x1ee806;_0x4f1482['model']=_[_0x900a('0x2a')](db[_0x900a('0x6c')][_0x900a('0x28')]);_0x4f1482['query']=_[_0x900a('0x2a')](_0x34d168[_0x900a('0x2c')]);_0x4f1482[_0x900a('0x2e')]=_[_0x900a('0x2f')](_0x4f1482[_0x900a('0x29')],_0x4f1482[_0x900a('0x2c')]);_0x5898f5[_0x900a('0x30')]=_[_0x900a('0x2f')](_0x4f1482[_0x900a('0x29')],qs['fields'](_0x34d168['query'][_0x900a('0x31')]));_0x5898f5[_0x900a('0x30')]=_0x5898f5[_0x900a('0x30')][_0x900a('0x32')]?_0x5898f5[_0x900a('0x30')]:_0x4f1482[_0x900a('0x29')];_0x5898f5[_0x900a('0x35')]=qs[_0x900a('0x36')](_0x34d168['query'][_0x900a('0x36')]);_0x5898f5['where']=qs[_0x900a('0x2e')](_['pick'](_0x34d168[_0x900a('0x2c')],_0x4f1482[_0x900a('0x2e')]));if(_0x34d168['query'][_0x900a('0x3b')]){_0x5898f5[_0x900a('0x3e')]=_[_0x900a('0x3a')](_0x5898f5['where'],{'$or':_['map'](_0x5898f5[_0x900a('0x30')],function(_0xd56412){var _0x35e1b6={};_0x35e1b6[_0xd56412]={'$like':'%'+_0x34d168[_0x900a('0x2c')][_0x900a('0x3b')]+'%'};return _0x35e1b6;})});}_0x5898f5=_[_0x900a('0x3a')]({},_0x5898f5,_0x34d168['options']);return _0x5210c4[_0x900a('0x6d')](_0x5898f5);}})[_0x900a('0x20')](function(_0x369e40){if(_0x369e40){_0x1daf33=_0x369e40['length'];if(!_0x34d168[_0x900a('0x2c')][_0x900a('0x33')]('nolimit')){_0x5898f5[_0x900a('0x19')]=qs[_0x900a('0x19')](_0x34d168[_0x900a('0x2c')][_0x900a('0x19')]);_0x5898f5[_0x900a('0x18')]=qs[_0x900a('0x18')](_0x34d168[_0x900a('0x2c')][_0x900a('0x18')]);}return _0x5210c4[_0x900a('0x6d')](_0x5898f5);}})[_0x900a('0x20')](function(_0x125c34){if(_0x125c34){return _0x125c34?{'count':_0x1daf33,'rows':_0x125c34}:null;}})[_0x900a('0x20')](respondWithResult(_0x1c3838,null))[_0x900a('0x44')](handleError(_0x1c3838,null));};
\ No newline at end of file
+var _0x6772=['nolimit','limit','order','sort','where','filters','pick','day','filter','merge','map','options','includeAll','Dashboard','findAll','catch','show','params','rawAttributes','include','create','body','clone','find','get','omit','createdAt','updatedAt','iframe','attrUrl','attrs','value','https://','custom','attrPath','clock','attrHourFormat','attrTimezone','0.00','attrFontSize','counter','attrMetric','total','attrVoiceQueues','multibar-chart','attrSerie1','attrSerie2','attrSerie3','web-report','attrReport','attrRefresh','widgetAttributes:\x20%s','stringify','addItem','DashboardId','DashboardItem','getItems','fast-json-patch','moment','mustache','util','sox','to-csv','ejs','lodash','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','./dashboard.socket','register','sendStatus','status','end','json','count','offset','set','Content-Range','apply','update','then','destroy','error','stack','name','index','model','keys','dateStart','query','dateEnd','intersection','attributes','fields','length','hasOwnProperty'];(function(_0x36be14,_0x17fab1){var _0x3272c9=function(_0x529070){while(--_0x529070){_0x36be14['push'](_0x36be14['shift']());}};_0x3272c9(++_0x17fab1);}(_0x6772,0x107));var _0x2677=function(_0x3e30f5,_0x3d8853){_0x3e30f5=_0x3e30f5-0x0;var _0x3b69bb=_0x6772[_0x3e30f5];return _0x3b69bb;};'use strict';var jsonpatch=require(_0x2677('0x0'));var rp=require('request-promise');var moment=require(_0x2677('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x2677('0x2'));var util=require(_0x2677('0x3'));var path=require('path');var sox=require(_0x2677('0x4'));var csv=require(_0x2677('0x5'));var ejs=require(_0x2677('0x6'));var fs=require('fs');var _=require(_0x2677('0x7'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x2677('0x8'));var toCsv=require(_0x2677('0x5'));var querystring=require(_0x2677('0x9'));var Papa=require(_0x2677('0xa'));var qs=require(_0x2677('0xb'));var logger=require(_0x2677('0xc'))(_0x2677('0xd'));var utils=require(_0x2677('0xe'));var config=require(_0x2677('0xf'));var db=require(_0x2677('0x10'))['db'];var socket=require(_0x2677('0x11'))({'host':'localhost','port':0x18eb});require(_0x2677('0x12'))[_0x2677('0x13')](socket);function respondWithStatusCode(_0x4b7431,_0x19a2c2){_0x19a2c2=_0x19a2c2||0xcc;return function(_0x54b57d){if(_0x54b57d){return _0x4b7431[_0x2677('0x14')](_0x19a2c2);}return _0x4b7431[_0x2677('0x15')](_0x19a2c2)[_0x2677('0x16')]();};}function respondWithResult(_0x210f21,_0x3fcc36){_0x3fcc36=_0x3fcc36||0xc8;return function(_0x3a1ae5){if(_0x3a1ae5){return _0x210f21['status'](_0x3fcc36)[_0x2677('0x17')](_0x3a1ae5);}};}function respondWithFilteredResult(_0x25e02a,_0x1a44bc){return function(_0x3d7ce5){if(_0x3d7ce5){var _0x5f5dc8=_0x3d7ce5[_0x2677('0x18')],_0x80af5f=_0x1a44bc[_0x2677('0x19')],_0x4c99f9=_0x1a44bc[_0x2677('0x19')]+_0x1a44bc['limit'],_0x4119f1;if(_0x4c99f9>=_0x5f5dc8){_0x4c99f9=_0x5f5dc8;_0x4119f1=0xc8;}else{_0x4119f1=0xce;}_0x25e02a[_0x2677('0x15')](_0x4119f1);return _0x25e02a[_0x2677('0x1a')](_0x2677('0x1b'),_0x80af5f+'-'+_0x4c99f9+'/'+_0x5f5dc8)['json'](_0x3d7ce5);}return null;};}function patchUpdates(_0x2770aa){return function(_0x243988){try{jsonpatch[_0x2677('0x1c')](_0x243988,_0x2770aa,!![]);}catch(_0x27da76){return BPromise['reject'](_0x27da76);}return _0x243988['save']();};}function saveUpdates(_0xfa8db3,_0x438cf3){return function(_0x49399c){if(_0x49399c){return _0x49399c[_0x2677('0x1d')](_0xfa8db3)[_0x2677('0x1e')](function(_0x34a206){return _0x34a206;});}return null;};}function removeEntity(_0x37b0ab,_0xe5096a){return function(_0x1566de){if(_0x1566de){return _0x1566de[_0x2677('0x1f')]()[_0x2677('0x1e')](function(){_0x37b0ab[_0x2677('0x15')](0xcc)[_0x2677('0x16')]();});}};}function handleEntityNotFound(_0x3670f2,_0x5b4a5e){return function(_0x184510){if(!_0x184510){_0x3670f2[_0x2677('0x14')](0x194);}return _0x184510;};}function handleError(_0x369640,_0x46c0e9){_0x46c0e9=_0x46c0e9||0x1f4;return function(_0x27a1ff){logger[_0x2677('0x20')](_0x27a1ff[_0x2677('0x21')]);if(_0x27a1ff[_0x2677('0x22')]){delete _0x27a1ff['name'];}_0x369640[_0x2677('0x15')](_0x46c0e9)['send'](_0x27a1ff);};}exports[_0x2677('0x23')]=function(_0x3076d0,_0x2f4d5c){var _0x1f168f={},_0x264041={},_0x1425cc={'count':0x0,'rows':[]};var _0x5b6c78=db['Dashboard']['rawAttributes'];_0x264041[_0x2677('0x24')]=_[_0x2677('0x25')](_0x5b6c78);var _0x1eadad={'dateStart':_0x3076d0['query'][_0x2677('0x26')],'dateEnd':_0x3076d0[_0x2677('0x27')][_0x2677('0x28')]};delete _0x3076d0[_0x2677('0x27')][_0x2677('0x26')];delete _0x3076d0[_0x2677('0x27')][_0x2677('0x28')];_0x264041['query']=_[_0x2677('0x25')](_0x3076d0['query']);_0x264041['filters']=_[_0x2677('0x29')](_0x264041['model'],_0x264041[_0x2677('0x27')]);_0x1f168f[_0x2677('0x2a')]=_[_0x2677('0x29')](_0x264041[_0x2677('0x24')],qs[_0x2677('0x2b')](_0x3076d0[_0x2677('0x27')]['fields']));_0x1f168f[_0x2677('0x2a')]=_0x1f168f[_0x2677('0x2a')][_0x2677('0x2c')]?_0x1f168f[_0x2677('0x2a')]:_0x264041[_0x2677('0x24')];if(!_0x3076d0[_0x2677('0x27')][_0x2677('0x2d')](_0x2677('0x2e'))){_0x1f168f[_0x2677('0x2f')]=qs[_0x2677('0x2f')](_0x3076d0['query']['limit']);_0x1f168f[_0x2677('0x19')]=qs[_0x2677('0x19')](_0x3076d0[_0x2677('0x27')][_0x2677('0x19')]);}_0x1f168f[_0x2677('0x30')]=qs[_0x2677('0x31')](_0x3076d0[_0x2677('0x27')]['sort']);_0x1f168f[_0x2677('0x32')]=qs[_0x2677('0x33')](_[_0x2677('0x34')](_0x3076d0[_0x2677('0x27')],_0x264041[_0x2677('0x33')]));if(_0x1eadad[_0x2677('0x26')]){if(_0x1eadad[_0x2677('0x28')]){_0x1eadad[_0x2677('0x28')]=moment(_0x1eadad['dateEnd'])['add'](0x1,_0x2677('0x35'));}else{_0x1eadad[_0x2677('0x28')]=moment(_0x1eadad[_0x2677('0x26')])['add'](0x1,_0x2677('0x35'));}_['merge'](_0x1f168f['where'],{'createdAt':{'$gte':_0x1eadad[_0x2677('0x26')],'$lte':_0x1eadad['dateEnd']}});}if(_0x3076d0['query'][_0x2677('0x36')]){_0x1f168f['where']=_[_0x2677('0x37')](_0x1f168f[_0x2677('0x32')],{'$or':_[_0x2677('0x38')](_0x1f168f['attributes'],function(_0x10585c){var _0x173651={};_0x173651[_0x10585c]={'$like':'%'+_0x3076d0[_0x2677('0x27')][_0x2677('0x36')]+'%'};return _0x173651;})});}_0x1f168f=_[_0x2677('0x37')]({},_0x1f168f,_0x3076d0[_0x2677('0x39')]);var _0x4cf2d6={'where':_0x1f168f[_0x2677('0x32')]};return db['Dashboard'][_0x2677('0x18')](_0x4cf2d6)[_0x2677('0x1e')](function(_0x326879){_0x1425cc[_0x2677('0x18')]=_0x326879;if(_0x3076d0[_0x2677('0x27')][_0x2677('0x3a')]){_0x1f168f['include']=[{'all':!![]}];}return db[_0x2677('0x3b')][_0x2677('0x3c')](_0x1f168f);})['then'](function(_0x26fdaf){_0x1425cc['rows']=_0x26fdaf;return _0x1425cc;})['then'](respondWithFilteredResult(_0x2f4d5c,_0x1f168f))[_0x2677('0x3d')](handleError(_0x2f4d5c,null));};exports[_0x2677('0x3e')]=function(_0x2823ee,_0x25de0c){var _0x583820={'raw':![],'where':{'id':_0x2823ee[_0x2677('0x3f')]['id']}},_0x95d507={};_0x95d507['model']=_[_0x2677('0x25')](db[_0x2677('0x3b')][_0x2677('0x40')]);_0x95d507[_0x2677('0x27')]=_['keys'](_0x2823ee['query']);_0x95d507[_0x2677('0x33')]=_['intersection'](_0x95d507['model'],_0x95d507['query']);_0x583820[_0x2677('0x2a')]=_[_0x2677('0x29')](_0x95d507[_0x2677('0x24')],qs[_0x2677('0x2b')](_0x2823ee['query'][_0x2677('0x2b')]));_0x583820[_0x2677('0x2a')]=_0x583820[_0x2677('0x2a')][_0x2677('0x2c')]?_0x583820[_0x2677('0x2a')]:_0x95d507[_0x2677('0x24')];if(_0x2823ee[_0x2677('0x27')][_0x2677('0x3a')]){_0x583820[_0x2677('0x41')]=[{'all':!![]}];}_0x583820=_[_0x2677('0x37')]({},_0x583820,_0x2823ee[_0x2677('0x39')]);return db[_0x2677('0x3b')]['find'](_0x583820)[_0x2677('0x1e')](handleEntityNotFound(_0x25de0c,null))[_0x2677('0x1e')](respondWithResult(_0x25de0c,null))[_0x2677('0x3d')](handleError(_0x25de0c,null));};exports[_0x2677('0x42')]=function(_0x34e081,_0x1f31f7){return db[_0x2677('0x3b')][_0x2677('0x42')](_0x34e081[_0x2677('0x43')],{})[_0x2677('0x1e')](respondWithResult(_0x1f31f7,0xc9))[_0x2677('0x3d')](handleError(_0x1f31f7,null));};exports[_0x2677('0x44')]=function(_0x50c351,_0x338d9c){var _0x94b67e={'raw':![],'where':{'id':_0x50c351[_0x2677('0x3f')]['id']}},_0x299eea={};_0x299eea['model']=_[_0x2677('0x25')](db[_0x2677('0x3b')][_0x2677('0x40')]);_0x94b67e[_0x2677('0x2a')]=_[_0x2677('0x29')](_0x299eea['model'],qs[_0x2677('0x2b')](_0x50c351[_0x2677('0x27')][_0x2677('0x2b')]));_0x94b67e[_0x2677('0x2a')]=_0x94b67e[_0x2677('0x2a')][_0x2677('0x2c')]?_0x94b67e[_0x2677('0x2a')]:_0x299eea[_0x2677('0x24')];if(_0x50c351[_0x2677('0x27')]['includeAll']){_0x94b67e[_0x2677('0x41')]=[{'all':!![]}];}_0x94b67e=_[_0x2677('0x37')]({},_0x94b67e,_0x50c351[_0x2677('0x39')]);return db['Dashboard'][_0x2677('0x45')](_0x94b67e)[_0x2677('0x1e')](handleEntityNotFound(_0x338d9c,null))['then'](function(_0x445147){if(_0x445147){var _0x347f70=_0x445147[_0x2677('0x46')]({'plain':!![]});_0x347f70=qs[_0x2677('0x47')](_0x347f70,['id',_0x2677('0x48'),'updatedAt']);_0x50c351['body']=_[_0x2677('0x47')](_0x50c351[_0x2677('0x43')],['id',_0x2677('0x48'),_0x2677('0x49')]);return db[_0x2677('0x3b')][_0x2677('0x42')](_[_0x2677('0x37')](_0x347f70,_0x50c351[_0x2677('0x43')]),{'include':_0x50c351[_0x2677('0x27')][_0x2677('0x3a')]?[{'all':!![]}]:undefined});}})['then'](respondWithResult(_0x338d9c,0xc9))[_0x2677('0x3d')](handleError(_0x338d9c,null));};exports[_0x2677('0x1d')]=function(_0xf163b9,_0xb2c5d2){if(_0xf163b9[_0x2677('0x43')]['id']){delete _0xf163b9['body']['id'];}return db[_0x2677('0x3b')][_0x2677('0x45')]({'where':{'id':_0xf163b9['params']['id']}})[_0x2677('0x1e')](handleEntityNotFound(_0xb2c5d2,null))[_0x2677('0x1e')](saveUpdates(_0xf163b9[_0x2677('0x43')],null))['then'](respondWithResult(_0xb2c5d2,null))['catch'](handleError(_0xb2c5d2,null));};exports[_0x2677('0x1f')]=function(_0x2c3da9,_0x35e706){return db[_0x2677('0x3b')][_0x2677('0x45')]({'where':{'id':_0x2c3da9[_0x2677('0x3f')]['id']}})[_0x2677('0x1e')](handleEntityNotFound(_0x35e706,null))['then'](removeEntity(_0x35e706,null))[_0x2677('0x3d')](handleError(_0x35e706,null));};function widgetAttributes(_0x29e43a){try{switch(_0x29e43a['type']){case _0x2677('0x4a'):return[{'name':_0x2677('0x4b'),'value':_0x29e43a[_0x2677('0x4b')]||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a['attrs'][0x0]?_0x29e43a[_0x2677('0x4c')][0x0][_0x2677('0x4d')]:undefined)||_0x2677('0x4e')}];case _0x2677('0x4f'):return[{'name':_0x2677('0x50'),'value':_0x29e43a[_0x2677('0x50')]||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a[_0x2677('0x4c')][0x0]?_0x29e43a['attrs'][0x0][_0x2677('0x4d')]:undefined)||''}];case _0x2677('0x51'):return[{'name':_0x2677('0x52'),'value':_0x29e43a[_0x2677('0x52')]||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a['attrs'][0x0]?_0x29e43a[_0x2677('0x4c')][0x0]['value']:undefined)||'HH:mm:ss'},{'name':_0x2677('0x53'),'value':_0x29e43a[_0x2677('0x53')]||(_0x29e43a['attrs']&&_0x29e43a[_0x2677('0x4c')][0x1]?_0x29e43a['attrs'][0x1][_0x2677('0x4d')]:undefined)||_0x2677('0x54')},{'name':_0x2677('0x55'),'value':_0x29e43a[_0x2677('0x55')]||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a['attrs'][0x2]?_0x29e43a[_0x2677('0x4c')][0x2][_0x2677('0x4d')]:undefined)||0xc}];case _0x2677('0x56'):return[{'name':_0x2677('0x57'),'value':_0x29e43a[_0x2677('0x57')]||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a['attrs'][0x0]?_0x29e43a[_0x2677('0x4c')][0x0][_0x2677('0x4d')]:undefined)||_0x2677('0x58')},{'name':'attrVoiceQueues','value':_0x29e43a[_0x2677('0x59')]||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a[_0x2677('0x4c')][0x1]?_0x29e43a[_0x2677('0x4c')][0x1][_0x2677('0x4d')]:undefined)||[]},{'name':'attrFontSize','value':_0x29e43a['attrFontSize']||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a[_0x2677('0x4c')][0x2]?_0x29e43a[_0x2677('0x4c')][0x2][_0x2677('0x4d')]:undefined)||0x14}];case _0x2677('0x5a'):case'pie-chart':return[{'name':'attrSerie1','value':_0x29e43a[_0x2677('0x5b')]||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a[_0x2677('0x4c')][0x0]?_0x29e43a[_0x2677('0x4c')][0x0][_0x2677('0x4d')]:undefined)||_0x2677('0x58')},{'name':_0x2677('0x5c'),'value':_0x29e43a['attrSerie2']||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a[_0x2677('0x4c')][0x1]?_0x29e43a[_0x2677('0x4c')][0x1][_0x2677('0x4d')]:undefined)||null},{'name':_0x2677('0x5d'),'value':_0x29e43a[_0x2677('0x5d')]||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a[_0x2677('0x4c')][0x2]?_0x29e43a['attrs'][0x2]['value']:undefined)||null},{'name':_0x2677('0x59'),'value':_0x29e43a[_0x2677('0x59')]||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a[_0x2677('0x4c')][0x3]?_0x29e43a[_0x2677('0x4c')][0x3]['value']:undefined)||[]}];case _0x2677('0x5e'):return[{'name':_0x2677('0x5f'),'value':_0x29e43a['attrReport']||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a[_0x2677('0x4c')][0x0]?_0x29e43a[_0x2677('0x4c')][0x0][_0x2677('0x4d')]:undefined)||null},{'name':_0x2677('0x60'),'value':_0x29e43a['attrRefresh']||(_0x29e43a[_0x2677('0x4c')]&&_0x29e43a[_0x2677('0x4c')][0x1]?_0x29e43a[_0x2677('0x4c')][0x1][_0x2677('0x4d')]:undefined)||0x0}];default:return[];}}catch(_0x35dd1b){logger[_0x2677('0x20')](_0x2677('0x61'),JSON[_0x2677('0x62')](_0x35dd1b));return[];}}exports[_0x2677('0x63')]=function(_0x1f4d04,_0x5bb69c,_0xd20db3){if(_0x1f4d04[_0x2677('0x43')]['id']){delete _0x1f4d04[_0x2677('0x43')]['id'];}return db['Dashboard'][_0x2677('0x45')]({'where':{'id':_0x1f4d04[_0x2677('0x3f')]['id']}})[_0x2677('0x1e')](handleEntityNotFound(_0x5bb69c,null))[_0x2677('0x1e')](function(_0x3cd201){if(_0x3cd201){_0x1f4d04[_0x2677('0x43')][_0x2677('0x64')]=_0x3cd201['id'];_0x1f4d04[_0x2677('0x43')][_0x2677('0x4c')]=widgetAttributes(_0x1f4d04['body']);return db[_0x2677('0x65')][_0x2677('0x42')](_0x1f4d04[_0x2677('0x43')]);}})[_0x2677('0x1e')](respondWithResult(_0x5bb69c,null))[_0x2677('0x3d')](handleError(_0x5bb69c,null));};exports[_0x2677('0x66')]=function(_0x5c5c76,_0x233587,_0x289899){var _0x3ec60a={};var _0x4a1cdc={};var _0xcc04ae;var _0x421de4;return db[_0x2677('0x3b')]['findOne']({'where':{'id':_0x5c5c76[_0x2677('0x3f')]['id']}})['then'](handleEntityNotFound(_0x233587,null))[_0x2677('0x1e')](function(_0x461392){if(_0x461392){_0xcc04ae=_0x461392;_0x4a1cdc[_0x2677('0x24')]=_[_0x2677('0x25')](db['DashboardItem']['rawAttributes']);_0x4a1cdc[_0x2677('0x27')]=_['keys'](_0x5c5c76[_0x2677('0x27')]);_0x4a1cdc['filters']=_[_0x2677('0x29')](_0x4a1cdc[_0x2677('0x24')],_0x4a1cdc[_0x2677('0x27')]);_0x3ec60a[_0x2677('0x2a')]=_[_0x2677('0x29')](_0x4a1cdc[_0x2677('0x24')],qs['fields'](_0x5c5c76[_0x2677('0x27')][_0x2677('0x2b')]));_0x3ec60a[_0x2677('0x2a')]=_0x3ec60a[_0x2677('0x2a')][_0x2677('0x2c')]?_0x3ec60a[_0x2677('0x2a')]:_0x4a1cdc['model'];_0x3ec60a[_0x2677('0x30')]=qs[_0x2677('0x31')](_0x5c5c76['query'][_0x2677('0x31')]);_0x3ec60a['where']=qs[_0x2677('0x33')](_[_0x2677('0x34')](_0x5c5c76[_0x2677('0x27')],_0x4a1cdc['filters']));if(_0x5c5c76[_0x2677('0x27')][_0x2677('0x36')]){_0x3ec60a[_0x2677('0x32')]=_[_0x2677('0x37')](_0x3ec60a['where'],{'$or':_[_0x2677('0x38')](_0x3ec60a[_0x2677('0x2a')],function(_0x1138e8){var _0x3407d8={};_0x3407d8[_0x1138e8]={'$like':'%'+_0x5c5c76['query'][_0x2677('0x36')]+'%'};return _0x3407d8;})});}_0x3ec60a=_[_0x2677('0x37')]({},_0x3ec60a,_0x5c5c76[_0x2677('0x39')]);return _0xcc04ae['getItems'](_0x3ec60a);}})['then'](function(_0x130154){if(_0x130154){_0x421de4=_0x130154[_0x2677('0x2c')];if(!_0x5c5c76['query']['hasOwnProperty'](_0x2677('0x2e'))){_0x3ec60a[_0x2677('0x2f')]=qs[_0x2677('0x2f')](_0x5c5c76[_0x2677('0x27')][_0x2677('0x2f')]);_0x3ec60a[_0x2677('0x19')]=qs[_0x2677('0x19')](_0x5c5c76[_0x2677('0x27')][_0x2677('0x19')]);}return _0xcc04ae['getItems'](_0x3ec60a);}})[_0x2677('0x1e')](function(_0x1a5c52){if(_0x1a5c52){return _0x1a5c52?{'count':_0x421de4,'rows':_0x1a5c52}:null;}})[_0x2677('0x1e')](respondWithResult(_0x233587,null))[_0x2677('0x3d')](handleError(_0x233587,null));};
\ No newline at end of file
index 273347d..fa7a6a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0538=['update','remove','hasOwnProperty','hook','../../mysqldb','Dashboard','setMaxListeners'];(function(_0x2f1ac4,_0x236a72){var _0x18e1a5=function(_0x18f34b){while(--_0x18f34b){_0x2f1ac4['push'](_0x2f1ac4['shift']());}};_0x18e1a5(++_0x236a72);}(_0x0538,0x10e));var _0x8053=function(_0x9aada2,_0xd2d349){_0x9aada2=_0x9aada2-0x0;var _0x196dff=_0x0538[_0x9aada2];return _0x196dff;};'use strict';var EventEmitter=require('events');var Dashboard=require(_0x8053('0x0'))['db'][_0x8053('0x1')];var DashboardEvents=new EventEmitter();DashboardEvents[_0x8053('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0x8053('0x3'),'afterDestroy':_0x8053('0x4')};function emitEvent(_0x4fd550){return function(_0x35726f,_0x1ccb5f,_0x201a67){DashboardEvents['emit'](_0x4fd550+':'+_0x35726f['id'],_0x35726f);DashboardEvents['emit'](_0x4fd550,_0x35726f);_0x201a67(null);};}for(var e in events){if(events[_0x8053('0x5')](e)){var event=events[e];Dashboard[_0x8053('0x6')](e,emitEvent(event));}}module['exports']=DashboardEvents;
\ No newline at end of file
+var _0x5760=['save','update','remove','emit','hasOwnProperty','hook','events','../../mysqldb','Dashboard','setMaxListeners'];(function(_0x1f0881,_0x124c11){var _0x59b6cf=function(_0x54f8b3){while(--_0x54f8b3){_0x1f0881['push'](_0x1f0881['shift']());}};_0x59b6cf(++_0x124c11);}(_0x5760,0x6a));var _0x0576=function(_0x209941,_0x5c9988){_0x209941=_0x209941-0x0;var _0x1e8729=_0x5760[_0x209941];return _0x1e8729;};'use strict';var EventEmitter=require(_0x0576('0x0'));var Dashboard=require(_0x0576('0x1'))['db'][_0x0576('0x2')];var DashboardEvents=new EventEmitter();DashboardEvents[_0x0576('0x3')](0x0);var events={'afterCreate':_0x0576('0x4'),'afterUpdate':_0x0576('0x5'),'afterDestroy':_0x0576('0x6')};function emitEvent(_0x1d891c){return function(_0x2a24a8,_0x1f6246,_0x2ed563){DashboardEvents[_0x0576('0x7')](_0x1d891c+':'+_0x2a24a8['id'],_0x2a24a8);DashboardEvents[_0x0576('0x7')](_0x1d891c,_0x2a24a8);_0x2ed563(null);};}for(var e in events){if(events[_0x0576('0x8')](e)){var event=events[e];Dashboard[_0x0576('0x9')](e,emitEvent(event));}}module['exports']=DashboardEvents;
\ No newline at end of file
index 312086e..61bf488 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x202a=['bluebird','dashboards','util','../../config/logger','api'];(function(_0x4cab63,_0x57f957){var _0x3120e2=function(_0x23e1fb){while(--_0x23e1fb){_0x4cab63['push'](_0x4cab63['shift']());}};_0x3120e2(++_0x57f957);}(_0x202a,0xc0));var _0xa202=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x202a[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0xa202('0x0'));var logger=require(_0xa202('0x1'))(_0xa202('0x2'));var moment=require('moment');var BPromise=require(_0xa202('0x3'));var rp=require('request-promise');var attributes=require('./dashboard.attributes');module['exports']=function(_0x32f8b7,_0x1ce932){return _0x32f8b7['define']('Dashboard',attributes,{'tableName':_0xa202('0x4'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x73a1=['Dashboard','dashboards','../../config/logger','api','bluebird','request-promise','./dashboard.attributes','exports','define'];(function(_0x571760,_0x2a0363){var _0x441797=function(_0x1f83ef){while(--_0x1f83ef){_0x571760['push'](_0x571760['shift']());}};_0x441797(++_0x2a0363);}(_0x73a1,0x161));var _0x173a=function(_0x1d3577,_0x17a32e){_0x1d3577=_0x1d3577-0x0;var _0x277d9a=_0x73a1[_0x1d3577];return _0x277d9a;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x173a('0x0'))(_0x173a('0x1'));var moment=require('moment');var BPromise=require(_0x173a('0x2'));var rp=require(_0x173a('0x3'));var attributes=require(_0x173a('0x4'));module[_0x173a('0x5')]=function(_0x4a3f0f,_0x57edf4){return _0x4a3f0f[_0x173a('0x6')](_0x173a('0x7'),attributes,{'tableName':_0x173a('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 9c56533..a668bee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc0cf=['http','socket.io-emitter','./dashboard.socket','register','request','then','info','Dashboard,\x20%s,\x20%s','request\x20sent','Dashboard,\x20%s,\x20%s,\x20%s','error','code','message','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xc0cf,0x1d0));var _0xfc0c=function(_0x1b6b28,_0x551556){_0x1b6b28=_0x1b6b28-0x0;var _0x1939af=_0xc0cf[_0x1b6b28];return _0x1939af;};'use strict';var _=require(_0xfc0c('0x0'));var util=require(_0xfc0c('0x1'));var moment=require(_0xfc0c('0x2'));var BPromise=require(_0xfc0c('0x3'));var rs=require(_0xfc0c('0x4'));var fs=require('fs');var db=require(_0xfc0c('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xfc0c('0x6'))(_0xfc0c('0x7'));var config=require(_0xfc0c('0x8'));var jayson=require(_0xfc0c('0x9'));var client=jayson[_0xfc0c('0xa')][_0xfc0c('0xb')]({'port':0x232a});var socket=require(_0xfc0c('0xc'))({'host':'localhost','port':0x18eb});require(_0xfc0c('0xd'))[_0xfc0c('0xe')](socket);function respondWithRpcPromise(_0x55dbb3,_0x70cbbb,_0x2918c4){return new BPromise(function(_0x4903bd,_0xa73709){return client[_0xfc0c('0xf')](_0x55dbb3,_0x2918c4)[_0xfc0c('0x10')](function(_0x132be2){logger[_0xfc0c('0x11')](_0xfc0c('0x12'),_0x70cbbb,_0xfc0c('0x13'));logger['debug'](_0xfc0c('0x14'),_0x70cbbb,_0xfc0c('0x13'),JSON['stringify'](_0x132be2));if(_0x132be2[_0xfc0c('0x15')]){if(_0x132be2[_0xfc0c('0x15')][_0xfc0c('0x16')]===0x1f4){logger[_0xfc0c('0x15')](_0xfc0c('0x12'),_0x70cbbb,_0x132be2[_0xfc0c('0x15')]['message']);return _0xa73709(_0x132be2['error'][_0xfc0c('0x17')]);}logger[_0xfc0c('0x15')](_0xfc0c('0x12'),_0x70cbbb,_0x132be2[_0xfc0c('0x15')]['message']);return _0x4903bd(_0x132be2[_0xfc0c('0x15')][_0xfc0c('0x17')]);}else{logger['info'](_0xfc0c('0x12'),_0x70cbbb,'request\x20sent');_0x4903bd(_0x132be2['result'][_0xfc0c('0x17')]);}})[_0xfc0c('0x18')](function(_0xca17c){logger['error'](_0xfc0c('0x12'),_0x70cbbb,_0xca17c);_0xa73709(_0xca17c);});});}
\ No newline at end of file
+var _0x26fa=['socket.io-emitter','localhost','./dashboard.socket','register','then','info','request\x20sent','debug','Dashboard,\x20%s,\x20%s,\x20%s','stringify','error','code','message','Dashboard,\x20%s,\x20%s','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise'];(function(_0x356e8d,_0x24c719){var _0x39e65a=function(_0x27ecc2){while(--_0x27ecc2){_0x356e8d['push'](_0x356e8d['shift']());}};_0x39e65a(++_0x24c719);}(_0x26fa,0xfa));var _0xa26f=function(_0x7849e5,_0x41fd82){_0x7849e5=_0x7849e5-0x0;var _0x27303d=_0x26fa[_0x7849e5];return _0x27303d;};'use strict';var _=require(_0xa26f('0x0'));var util=require(_0xa26f('0x1'));var moment=require(_0xa26f('0x2'));var BPromise=require(_0xa26f('0x3'));var rs=require(_0xa26f('0x4'));var fs=require('fs');var db=require(_0xa26f('0x5'))['db'];var utils=require(_0xa26f('0x6'));var logger=require(_0xa26f('0x7'))(_0xa26f('0x8'));var config=require('../../config/environment');var jayson=require(_0xa26f('0x9'));var client=jayson['client']['http']({'port':0x232a});var socket=require(_0xa26f('0xa'))({'host':_0xa26f('0xb'),'port':0x18eb});require(_0xa26f('0xc'))[_0xa26f('0xd')](socket);function respondWithRpcPromise(_0x59299d,_0x25616e,_0x5ae9d3){return new BPromise(function(_0x18d603,_0x5a0c61){return client['request'](_0x59299d,_0x5ae9d3)[_0xa26f('0xe')](function(_0x21065e){logger[_0xa26f('0xf')]('Dashboard,\x20%s,\x20%s',_0x25616e,_0xa26f('0x10'));logger[_0xa26f('0x11')](_0xa26f('0x12'),_0x25616e,_0xa26f('0x10'),JSON[_0xa26f('0x13')](_0x21065e));if(_0x21065e[_0xa26f('0x14')]){if(_0x21065e[_0xa26f('0x14')][_0xa26f('0x15')]===0x1f4){logger[_0xa26f('0x14')]('Dashboard,\x20%s,\x20%s',_0x25616e,_0x21065e['error'][_0xa26f('0x16')]);return _0x5a0c61(_0x21065e[_0xa26f('0x14')][_0xa26f('0x16')]);}logger['error']('Dashboard,\x20%s,\x20%s',_0x25616e,_0x21065e[_0xa26f('0x14')][_0xa26f('0x16')]);return _0x18d603(_0x21065e[_0xa26f('0x14')][_0xa26f('0x16')]);}else{logger[_0xa26f('0xf')](_0xa26f('0x17'),_0x25616e,_0xa26f('0x10'));_0x18d603(_0x21065e[_0xa26f('0x18')]['message']);}})[_0xa26f('0x19')](function(_0x30c8c2){logger['error'](_0xa26f('0x17'),_0x25616e,_0x30c8c2);_0x5a0c61(_0x30c8c2);});});}
\ No newline at end of file
index ec7f1c6..0ff9c72 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x389e=['emit','removeListener','register','dashboard:','./dashboard.events','save','update'];(function(_0x126fb9,_0x122c59){var _0xc8a3b1=function(_0x355744){while(--_0x355744){_0x126fb9['push'](_0x126fb9['shift']());}};_0xc8a3b1(++_0x122c59);}(_0x389e,0x1b6));var _0xe389=function(_0x494d42,_0x3b5094){_0x494d42=_0x494d42-0x0;var _0x240c39=_0x389e[_0x494d42];return _0x240c39;};'use strict';var DashboardEvents=require(_0xe389('0x0'));var events=[_0xe389('0x1'),'remove',_0xe389('0x2')];function createListener(_0xec4266,_0x5f44fd){return function(_0x2489bb){_0x5f44fd[_0xe389('0x3')](_0xec4266,_0x2489bb);};}function removeListener(_0x1727b0,_0x318fad){return function(){DashboardEvents[_0xe389('0x4')](_0x1727b0,_0x318fad);};}exports[_0xe389('0x5')]=function(_0x3451af){for(var _0x1c95f8=0x0,_0x41b5eb=events['length'];_0x1c95f8<_0x41b5eb;_0x1c95f8++){var _0x2ccdb7=events[_0x1c95f8];var _0x9041a9=createListener(_0xe389('0x6')+_0x2ccdb7,_0x3451af);DashboardEvents['on'](_0x2ccdb7,_0x9041a9);}};
\ No newline at end of file
+var _0xfb3f=['dashboard:','./dashboard.events','remove','update','removeListener','register','length'];(function(_0x4eeeb8,_0x18a766){var _0x2532a0=function(_0x27c717){while(--_0x27c717){_0x4eeeb8['push'](_0x4eeeb8['shift']());}};_0x2532a0(++_0x18a766);}(_0xfb3f,0xb0));var _0xffb3=function(_0x148842,_0x382412){_0x148842=_0x148842-0x0;var _0x1b35f3=_0xfb3f[_0x148842];return _0x1b35f3;};'use strict';var DashboardEvents=require(_0xffb3('0x0'));var events=['save',_0xffb3('0x1'),_0xffb3('0x2')];function createListener(_0x5e9166,_0x10d59e){return function(_0x2bc865){_0x10d59e['emit'](_0x5e9166,_0x2bc865);};}function removeListener(_0x4d7720,_0x18fbea){return function(){DashboardEvents[_0xffb3('0x3')](_0x4d7720,_0x18fbea);};}exports[_0xffb3('0x4')]=function(_0x34b2a2){for(var _0x19c609=0x0,_0x1850d2=events[_0xffb3('0x5')];_0x19c609<_0x1850d2;_0x19c609++){var _0x3ff8ea=events[_0x19c609];var _0x5409a0=createListener(_0xffb3('0x6')+_0x3ff8ea,_0x34b2a2);DashboardEvents['on'](_0x3ff8ea,_0x5409a0);}};
\ No newline at end of file
index a9ed595..4ac38fc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf376=['../../components/interaction/service','../../config/environment','./dashboard.controller','get','isAuthenticated','/:id','show','/:id/items','getItems','post','create','/:id/clone','clone','put','update','exports','multer','util','path','express','Router'];(function(_0x412e32,_0x584d1a){var _0x3a3d20=function(_0x45580a){while(--_0x45580a){_0x412e32['push'](_0x412e32['shift']());}};_0x3a3d20(++_0x584d1a);}(_0xf376,0xa3));var _0x6f37=function(_0x2a695f,_0x4b3c04){_0x2a695f=_0x2a695f-0x0;var _0x1ed4d1=_0xf376[_0x2a695f];return _0x1ed4d1;};'use strict';var multer=require(_0x6f37('0x0'));var util=require(_0x6f37('0x1'));var path=require(_0x6f37('0x2'));var express=require(_0x6f37('0x3'));var router=express[_0x6f37('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x6f37('0x5'));var config=require(_0x6f37('0x6'));var controller=require(_0x6f37('0x7'));router[_0x6f37('0x8')]('/',auth[_0x6f37('0x9')](),controller['index']);router[_0x6f37('0x8')](_0x6f37('0xa'),auth['isAuthenticated'](),controller[_0x6f37('0xb')]);router['get'](_0x6f37('0xc'),auth[_0x6f37('0x9')](),controller[_0x6f37('0xd')]);router[_0x6f37('0xe')]('/',auth['isAuthenticated'](),controller[_0x6f37('0xf')]);router[_0x6f37('0xe')](_0x6f37('0x10'),auth['isAuthenticated'](),controller[_0x6f37('0x11')]);router[_0x6f37('0xe')]('/:id/items',auth[_0x6f37('0x9')](),controller['addItem']);router[_0x6f37('0x12')](_0x6f37('0xa'),auth[_0x6f37('0x9')](),controller[_0x6f37('0x13')]);router['delete'](_0x6f37('0xa'),auth[_0x6f37('0x9')](),controller['destroy']);module[_0x6f37('0x14')]=router;
\ No newline at end of file
+var _0x804e=['isAuthenticated','index','show','/:id/items','post','create','/:id/clone','addItem','put','/:id','update','delete','destroy','exports','multer','path','express','Router','../../components/interaction/service','get'];(function(_0x9a8257,_0x4ea548){var _0x27279b=function(_0x512c52){while(--_0x512c52){_0x9a8257['push'](_0x9a8257['shift']());}};_0x27279b(++_0x4ea548);}(_0x804e,0x1ee));var _0xe804=function(_0x4ed98f,_0x58b9d7){_0x4ed98f=_0x4ed98f-0x0;var _0x139c20=_0x804e[_0x4ed98f];return _0x139c20;};'use strict';var multer=require(_0xe804('0x0'));var util=require('util');var path=require(_0xe804('0x1'));var express=require(_0xe804('0x2'));var router=express[_0xe804('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xe804('0x4'));var config=require('../../config/environment');var controller=require('./dashboard.controller');router[_0xe804('0x5')]('/',auth[_0xe804('0x6')](),controller[_0xe804('0x7')]);router[_0xe804('0x5')]('/:id',auth['isAuthenticated'](),controller[_0xe804('0x8')]);router[_0xe804('0x5')](_0xe804('0x9'),auth[_0xe804('0x6')](),controller['getItems']);router[_0xe804('0xa')]('/',auth[_0xe804('0x6')](),controller[_0xe804('0xb')]);router[_0xe804('0xa')](_0xe804('0xc'),auth['isAuthenticated'](),controller['clone']);router[_0xe804('0xa')]('/:id/items',auth['isAuthenticated'](),controller[_0xe804('0xd')]);router[_0xe804('0xe')](_0xe804('0xf'),auth['isAuthenticated'](),controller[_0xe804('0x10')]);router[_0xe804('0x11')]('/:id',auth[_0xe804('0x6')](),controller[_0xe804('0x12')]);module[_0xe804('0x13')]=router;
\ No newline at end of file
index d7d3d38..c081fa6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd38=['sequelize','squel','STRING','long','getDataValue','attrs','setDataValue','stringify','INTEGER','#2196f3'];(function(_0x390757,_0x3d1baa){var _0x5d98ad=function(_0x33ad00){while(--_0x33ad00){_0x390757['push'](_0x390757['shift']());}};_0x5d98ad(++_0x3d1baa);}(_0xbd38,0x15e));var _0x8bd3=function(_0x30b216,_0x4964f3){_0x30b216=_0x30b216-0x0;var _0x4ae0ae=_0xbd38[_0x30b216];return _0x4ae0ae;};'use strict';var Sequelize=require(_0x8bd3('0x0'));var squel=require(_0x8bd3('0x1'));var _=require('lodash');module['exports']={'title':{'type':Sequelize[_0x8bd3('0x2')],'allowNull':![]},'type':{'type':Sequelize['STRING'](0x14),'allowNull':![],'validate':{'len':[0x1,0x14]}},'attrs':{'type':Sequelize['TEXT'](_0x8bd3('0x3')),'get':function(){try{return JSON['parse'](this[_0x8bd3('0x4')](_0x8bd3('0x5')));}catch(_0x564451){return[];}},'set':function(_0x233d23){try{this['setDataValue'](_0x8bd3('0x5'),JSON['stringify'](_0x233d23));}catch(_0x11f185){this[_0x8bd3('0x6')]('attrs',JSON[_0x8bd3('0x7')]([]));}}},'sizeX':{'type':Sequelize[_0x8bd3('0x8')],'allowNull':![],'defaultValue':0x1},'sizeY':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1},'row':{'type':Sequelize[_0x8bd3('0x8')]},'col':{'type':Sequelize['INTEGER']},'background':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'#ffffff','validate':{'notEmpty':!![]}},'foreground':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x8bd3('0x9'),'validate':{'notEmpty':!![]}},'link':{'type':Sequelize[_0x8bd3('0x2')]}};
\ No newline at end of file
+var _0xfb2f=['stringify','setDataValue','INTEGER','squel','lodash','STRING','long','parse','getDataValue','attrs'];(function(_0x2be8c2,_0x14a4b5){var _0x97f531=function(_0xcee58d){while(--_0xcee58d){_0x2be8c2['push'](_0x2be8c2['shift']());}};_0x97f531(++_0x14a4b5);}(_0xfb2f,0x1b1));var _0xffb2=function(_0x4002dd,_0x18dbb2){_0x4002dd=_0x4002dd-0x0;var _0x43ccc2=_0xfb2f[_0x4002dd];return _0x43ccc2;};'use strict';var Sequelize=require('sequelize');var squel=require(_0xffb2('0x0'));var _=require(_0xffb2('0x1'));module['exports']={'title':{'type':Sequelize[_0xffb2('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0xffb2('0x2')](0x14),'allowNull':![],'validate':{'len':[0x1,0x14]}},'attrs':{'type':Sequelize['TEXT'](_0xffb2('0x3')),'get':function(){try{return JSON[_0xffb2('0x4')](this[_0xffb2('0x5')]('attrs'));}catch(_0x58282e){return[];}},'set':function(_0x206f8f){try{this['setDataValue'](_0xffb2('0x6'),JSON[_0xffb2('0x7')](_0x206f8f));}catch(_0x4b55bc){this[_0xffb2('0x8')](_0xffb2('0x6'),JSON[_0xffb2('0x7')]([]));}}},'sizeX':{'type':Sequelize[_0xffb2('0x9')],'allowNull':![],'defaultValue':0x1},'sizeY':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1},'row':{'type':Sequelize['INTEGER']},'col':{'type':Sequelize[_0xffb2('0x9')]},'background':{'type':Sequelize[_0xffb2('0x2')],'allowNull':![],'defaultValue':'#ffffff','validate':{'notEmpty':!![]}},'foreground':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'#2196f3','validate':{'notEmpty':!![]}},'link':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 2efb17e..5165e12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdc68=['rawAttributes','query','filters','intersection','fields','attributes','length','includeAll','merge','options','find','catch','iframe','attrUrl','attrs','https://','custom','attrPath','clock','attrHourFormat','value','HH:mm:ss','attrTimezone','0.00','attrFontSize','counter','attrMetric','total','attrVoiceQueues','multibar-chart','pie-chart','attrSerie1','attrSerie2','attrSerie3','web-report','attrReport','attrRefresh','widgetAttributes:\x20%s','stringify','body','create','fast-json-patch','moment','mustache','path','to-csv','lodash','squel','crypto','jsforce','papaparse','../../components/parsers/qs','api','../../config/utils','../../mysqldb','socket.io-emitter','localhost','./dashboardItem.socket','register','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','error','stack','name','send','show','params','model','keys','DashboardItem'];(function(_0x465792,_0x55c848){var _0x482c0d=function(_0x91923d){while(--_0x91923d){_0x465792['push'](_0x465792['shift']());}};_0x482c0d(++_0x55c848);}(_0xdc68,0x11f));var _0x8dc6=function(_0x4bafe8,_0x1a3268){_0x4bafe8=_0x4bafe8-0x0;var _0x1eb815=_0xdc68[_0x4bafe8];return _0x1eb815;};'use strict';var jsonpatch=require(_0x8dc6('0x0'));var rp=require('request-promise');var moment=require(_0x8dc6('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x8dc6('0x2'));var util=require('util');var path=require(_0x8dc6('0x3'));var sox=require('sox');var csv=require(_0x8dc6('0x4'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x8dc6('0x5'));var squel=require(_0x8dc6('0x6'));var crypto=require(_0x8dc6('0x7'));var jsforce=require(_0x8dc6('0x8'));var deskjs=require('desk.js');var toCsv=require(_0x8dc6('0x4'));var querystring=require('querystring');var Papa=require(_0x8dc6('0x9'));var qs=require(_0x8dc6('0xa'));var logger=require('../../config/logger')(_0x8dc6('0xb'));var utils=require(_0x8dc6('0xc'));var config=require('../../config/environment');var db=require(_0x8dc6('0xd'))['db'];var socket=require(_0x8dc6('0xe'))({'host':_0x8dc6('0xf'),'port':0x18eb});require(_0x8dc6('0x10'))[_0x8dc6('0x11')](socket);function respondWithStatusCode(_0x228eaf,_0x283ac0){_0x283ac0=_0x283ac0||0xcc;return function(_0x4ed662){if(_0x4ed662){return _0x228eaf[_0x8dc6('0x12')](_0x283ac0);}return _0x228eaf[_0x8dc6('0x13')](_0x283ac0)[_0x8dc6('0x14')]();};}function respondWithResult(_0x44c1c2,_0xae8045){_0xae8045=_0xae8045||0xc8;return function(_0x711347){if(_0x711347){return _0x44c1c2[_0x8dc6('0x13')](_0xae8045)[_0x8dc6('0x15')](_0x711347);}};}function respondWithFilteredResult(_0x4998a6,_0x3b7b44){return function(_0x5b4773){if(_0x5b4773){var _0x353504=_0x5b4773[_0x8dc6('0x16')],_0x5efbe1=_0x3b7b44[_0x8dc6('0x17')],_0x546a70=_0x3b7b44['offset']+_0x3b7b44[_0x8dc6('0x18')],_0x3abae7;if(_0x546a70>=_0x353504){_0x546a70=_0x353504;_0x3abae7=0xc8;}else{_0x3abae7=0xce;}_0x4998a6[_0x8dc6('0x13')](_0x3abae7);return _0x4998a6[_0x8dc6('0x19')](_0x8dc6('0x1a'),_0x5efbe1+'-'+_0x546a70+'/'+_0x353504)[_0x8dc6('0x15')](_0x5b4773);}return null;};}function patchUpdates(_0x378bd2){return function(_0x5afd71){try{jsonpatch[_0x8dc6('0x1b')](_0x5afd71,_0x378bd2,!![]);}catch(_0x204017){return BPromise['reject'](_0x204017);}return _0x5afd71[_0x8dc6('0x1c')]();};}function saveUpdates(_0x595596,_0xe65e0c){return function(_0x3e7deb){if(_0x3e7deb){return _0x3e7deb[_0x8dc6('0x1d')](_0x595596)[_0x8dc6('0x1e')](function(_0x291e5){return _0x291e5;});}return null;};}function removeEntity(_0x321286,_0x35f473){return function(_0x26e032){if(_0x26e032){return _0x26e032[_0x8dc6('0x1f')]()[_0x8dc6('0x1e')](function(){_0x321286[_0x8dc6('0x13')](0xcc)['end']();});}};}function handleEntityNotFound(_0x184e95,_0x186ef2){return function(_0x16f9e5){if(!_0x16f9e5){_0x184e95['sendStatus'](0x194);}return _0x16f9e5;};}function handleError(_0x1b060c,_0x44bafa){_0x44bafa=_0x44bafa||0x1f4;return function(_0x3e0774){logger[_0x8dc6('0x20')](_0x3e0774[_0x8dc6('0x21')]);if(_0x3e0774[_0x8dc6('0x22')]){delete _0x3e0774[_0x8dc6('0x22')];}_0x1b060c[_0x8dc6('0x13')](_0x44bafa)[_0x8dc6('0x23')](_0x3e0774);};}exports[_0x8dc6('0x24')]=function(_0x332abe,_0x466f69){var _0xe7a52d={'raw':![],'where':{'id':_0x332abe[_0x8dc6('0x25')]['id']}},_0x581835={};_0x581835[_0x8dc6('0x26')]=_[_0x8dc6('0x27')](db[_0x8dc6('0x28')][_0x8dc6('0x29')]);_0x581835[_0x8dc6('0x2a')]=_[_0x8dc6('0x27')](_0x332abe['query']);_0x581835[_0x8dc6('0x2b')]=_[_0x8dc6('0x2c')](_0x581835[_0x8dc6('0x26')],_0x581835['query']);_0xe7a52d['attributes']=_[_0x8dc6('0x2c')](_0x581835[_0x8dc6('0x26')],qs['fields'](_0x332abe[_0x8dc6('0x2a')][_0x8dc6('0x2d')]));_0xe7a52d['attributes']=_0xe7a52d[_0x8dc6('0x2e')][_0x8dc6('0x2f')]?_0xe7a52d[_0x8dc6('0x2e')]:_0x581835['model'];if(_0x332abe[_0x8dc6('0x2a')][_0x8dc6('0x30')]){_0xe7a52d['include']=[{'all':!![]}];}_0xe7a52d=_[_0x8dc6('0x31')]({},_0xe7a52d,_0x332abe[_0x8dc6('0x32')]);return db[_0x8dc6('0x28')][_0x8dc6('0x33')](_0xe7a52d)[_0x8dc6('0x1e')](handleEntityNotFound(_0x466f69,null))['then'](respondWithResult(_0x466f69,null))[_0x8dc6('0x34')](handleError(_0x466f69,null));};exports[_0x8dc6('0x1f')]=function(_0x2227b7,_0x408bdc){return db[_0x8dc6('0x28')]['find']({'where':{'id':_0x2227b7[_0x8dc6('0x25')]['id']}})[_0x8dc6('0x1e')](handleEntityNotFound(_0x408bdc,null))['then'](removeEntity(_0x408bdc,null))[_0x8dc6('0x34')](handleError(_0x408bdc,null));};function widgetAttributes(_0x51a6ff){try{switch(_0x51a6ff['type']){case _0x8dc6('0x35'):return[{'name':_0x8dc6('0x36'),'value':_0x51a6ff[_0x8dc6('0x36')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff[_0x8dc6('0x37')][0x0]?_0x51a6ff[_0x8dc6('0x37')][0x0]['value']:undefined)||_0x8dc6('0x38')}];case _0x8dc6('0x39'):return[{'name':_0x8dc6('0x3a'),'value':_0x51a6ff[_0x8dc6('0x3a')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff[_0x8dc6('0x37')][0x0]?_0x51a6ff[_0x8dc6('0x37')][0x0]['value']:undefined)||''}];case _0x8dc6('0x3b'):return[{'name':_0x8dc6('0x3c'),'value':_0x51a6ff[_0x8dc6('0x3c')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff[_0x8dc6('0x37')][0x0]?_0x51a6ff[_0x8dc6('0x37')][0x0][_0x8dc6('0x3d')]:undefined)||_0x8dc6('0x3e')},{'name':_0x8dc6('0x3f'),'value':_0x51a6ff[_0x8dc6('0x3f')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff[_0x8dc6('0x37')][0x1]?_0x51a6ff[_0x8dc6('0x37')][0x1]['value']:undefined)||_0x8dc6('0x40')},{'name':'attrFontSize','value':_0x51a6ff[_0x8dc6('0x41')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff['attrs'][0x2]?_0x51a6ff[_0x8dc6('0x37')][0x2][_0x8dc6('0x3d')]:undefined)||0xc}];case _0x8dc6('0x42'):return[{'name':'attrMetric','value':_0x51a6ff[_0x8dc6('0x43')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff[_0x8dc6('0x37')][0x0]?_0x51a6ff[_0x8dc6('0x37')][0x0][_0x8dc6('0x3d')]:undefined)||_0x8dc6('0x44')},{'name':_0x8dc6('0x45'),'value':_0x51a6ff['attrVoiceQueues']||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff['attrs'][0x1]?_0x51a6ff[_0x8dc6('0x37')][0x1][_0x8dc6('0x3d')]:undefined)||[]},{'name':_0x8dc6('0x41'),'value':_0x51a6ff[_0x8dc6('0x41')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff[_0x8dc6('0x37')][0x2]?_0x51a6ff[_0x8dc6('0x37')][0x2][_0x8dc6('0x3d')]:undefined)||0x14}];case _0x8dc6('0x46'):case _0x8dc6('0x47'):return[{'name':_0x8dc6('0x48'),'value':_0x51a6ff[_0x8dc6('0x48')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff[_0x8dc6('0x37')][0x0]?_0x51a6ff[_0x8dc6('0x37')][0x0][_0x8dc6('0x3d')]:undefined)||'total'},{'name':_0x8dc6('0x49'),'value':_0x51a6ff[_0x8dc6('0x49')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff[_0x8dc6('0x37')][0x1]?_0x51a6ff[_0x8dc6('0x37')][0x1][_0x8dc6('0x3d')]:undefined)||null},{'name':_0x8dc6('0x4a'),'value':_0x51a6ff['attrSerie3']||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff[_0x8dc6('0x37')][0x2]?_0x51a6ff['attrs'][0x2][_0x8dc6('0x3d')]:undefined)||null},{'name':_0x8dc6('0x45'),'value':_0x51a6ff[_0x8dc6('0x45')]||(_0x51a6ff['attrs']&&_0x51a6ff[_0x8dc6('0x37')][0x3]?_0x51a6ff[_0x8dc6('0x37')][0x3]['value']:undefined)||[]}];case _0x8dc6('0x4b'):return[{'name':'attrReport','value':_0x51a6ff[_0x8dc6('0x4c')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff['attrs'][0x0]?_0x51a6ff[_0x8dc6('0x37')][0x0][_0x8dc6('0x3d')]:undefined)||null},{'name':_0x8dc6('0x4d'),'value':_0x51a6ff[_0x8dc6('0x4d')]||(_0x51a6ff[_0x8dc6('0x37')]&&_0x51a6ff[_0x8dc6('0x37')][0x1]?_0x51a6ff['attrs'][0x1]['value']:undefined)||0x0}];default:return[];}}catch(_0x22eac2){logger[_0x8dc6('0x20')](_0x8dc6('0x4e'),JSON[_0x8dc6('0x4f')](_0x22eac2));return[];}}exports['create']=function(_0x23f6d0,_0x6d4e38){if(_0x23f6d0[_0x8dc6('0x50')]){_0x23f6d0[_0x8dc6('0x50')][_0x8dc6('0x37')]=widgetAttributes(_0x23f6d0[_0x8dc6('0x50')]);}return db['DashboardItem'][_0x8dc6('0x51')](_0x23f6d0[_0x8dc6('0x50')],{})[_0x8dc6('0x1e')](respondWithResult(_0x6d4e38,0xc9))[_0x8dc6('0x34')](handleError(_0x6d4e38,null));};exports[_0x8dc6('0x1d')]=function(_0x495bd1,_0x3b514b){if(_0x495bd1[_0x8dc6('0x50')]['id']){delete _0x495bd1['body']['id'];}_0x495bd1['body']['attrs']=widgetAttributes(_0x495bd1[_0x8dc6('0x50')]);return db[_0x8dc6('0x28')][_0x8dc6('0x33')]({'where':{'id':_0x495bd1[_0x8dc6('0x25')]['id']}})[_0x8dc6('0x1e')](handleEntityNotFound(_0x3b514b,null))[_0x8dc6('0x1e')](saveUpdates(_0x495bd1[_0x8dc6('0x50')],null))[_0x8dc6('0x1e')](respondWithResult(_0x3b514b,null))[_0x8dc6('0x34')](handleError(_0x3b514b,null));};
\ No newline at end of file
+var _0xf950=['DashboardItem','query','intersection','model','attributes','fields','includeAll','include','merge','find','catch','type','iframe','attrUrl','attrs','value','https://','custom','attrPath','clock','attrHourFormat','HH:mm:ss','attrTimezone','attrFontSize','counter','total','attrVoiceQueues','multibar-chart','pie-chart','attrSerie1','attrSerie2','attrSerie3','web-report','attrReport','attrRefresh','widgetAttributes:\x20%s','create','body','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','jsforce','querystring','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./dashboardItem.socket','sendStatus','status','json','offset','limit','set','Content-Range','reject','save','update','then','destroy','end','error','stack','params','keys'];(function(_0x1c68c4,_0x22a605){var _0x212655=function(_0x26784e){while(--_0x26784e){_0x1c68c4['push'](_0x1c68c4['shift']());}};_0x212655(++_0x22a605);}(_0xf950,0x1ee));var _0x0f95=function(_0x17650f,_0x3770ab){_0x17650f=_0x17650f-0x0;var _0x437f97=_0xf950[_0x17650f];return _0x437f97;};'use strict';var jsonpatch=require(_0x0f95('0x0'));var rp=require(_0x0f95('0x1'));var moment=require(_0x0f95('0x2'));var BPromise=require(_0x0f95('0x3'));var Mustache=require(_0x0f95('0x4'));var util=require(_0x0f95('0x5'));var path=require(_0x0f95('0x6'));var sox=require('sox');var csv=require(_0x0f95('0x7'));var ejs=require(_0x0f95('0x8'));var fs=require('fs');var _=require(_0x0f95('0x9'));var squel=require(_0x0f95('0xa'));var crypto=require('crypto');var jsforce=require(_0x0f95('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x0f95('0x7'));var querystring=require(_0x0f95('0xc'));var Papa=require('papaparse');var qs=require(_0x0f95('0xd'));var logger=require(_0x0f95('0xe'))(_0x0f95('0xf'));var utils=require('../../config/utils');var config=require(_0x0f95('0x10'));var db=require(_0x0f95('0x11'))['db'];var socket=require(_0x0f95('0x12'))({'host':_0x0f95('0x13'),'port':0x18eb});require(_0x0f95('0x14'))['register'](socket);function respondWithStatusCode(_0x51b973,_0x445435){_0x445435=_0x445435||0xcc;return function(_0x55afbb){if(_0x55afbb){return _0x51b973[_0x0f95('0x15')](_0x445435);}return _0x51b973[_0x0f95('0x16')](_0x445435)['end']();};}function respondWithResult(_0x1a6563,_0x41b334){_0x41b334=_0x41b334||0xc8;return function(_0x3570d7){if(_0x3570d7){return _0x1a6563[_0x0f95('0x16')](_0x41b334)[_0x0f95('0x17')](_0x3570d7);}};}function respondWithFilteredResult(_0x5de5d4,_0x344ba4){return function(_0x52bd7e){if(_0x52bd7e){var _0x58f62e=_0x52bd7e['count'],_0x447d86=_0x344ba4[_0x0f95('0x18')],_0x607567=_0x344ba4[_0x0f95('0x18')]+_0x344ba4[_0x0f95('0x19')],_0x2310f9;if(_0x607567>=_0x58f62e){_0x607567=_0x58f62e;_0x2310f9=0xc8;}else{_0x2310f9=0xce;}_0x5de5d4[_0x0f95('0x16')](_0x2310f9);return _0x5de5d4[_0x0f95('0x1a')](_0x0f95('0x1b'),_0x447d86+'-'+_0x607567+'/'+_0x58f62e)[_0x0f95('0x17')](_0x52bd7e);}return null;};}function patchUpdates(_0x1457fa){return function(_0x44fd6f){try{jsonpatch['apply'](_0x44fd6f,_0x1457fa,!![]);}catch(_0x3664ee){return BPromise[_0x0f95('0x1c')](_0x3664ee);}return _0x44fd6f[_0x0f95('0x1d')]();};}function saveUpdates(_0x32cb34,_0x5923f){return function(_0x2a8bc7){if(_0x2a8bc7){return _0x2a8bc7[_0x0f95('0x1e')](_0x32cb34)[_0x0f95('0x1f')](function(_0x2d5e34){return _0x2d5e34;});}return null;};}function removeEntity(_0x507b14,_0x385507){return function(_0x4d1243){if(_0x4d1243){return _0x4d1243[_0x0f95('0x20')]()[_0x0f95('0x1f')](function(){_0x507b14['status'](0xcc)[_0x0f95('0x21')]();});}};}function handleEntityNotFound(_0xd0883f,_0x1e4f11){return function(_0x481941){if(!_0x481941){_0xd0883f[_0x0f95('0x15')](0x194);}return _0x481941;};}function handleError(_0x2914e7,_0xec17bc){_0xec17bc=_0xec17bc||0x1f4;return function(_0xe2fb5b){logger[_0x0f95('0x22')](_0xe2fb5b[_0x0f95('0x23')]);if(_0xe2fb5b['name']){delete _0xe2fb5b['name'];}_0x2914e7[_0x0f95('0x16')](_0xec17bc)['send'](_0xe2fb5b);};}exports['show']=function(_0x278cf9,_0x118df6){var _0x5ded84={'raw':![],'where':{'id':_0x278cf9[_0x0f95('0x24')]['id']}},_0x4ed404={};_0x4ed404['model']=_[_0x0f95('0x25')](db[_0x0f95('0x26')]['rawAttributes']);_0x4ed404[_0x0f95('0x27')]=_[_0x0f95('0x25')](_0x278cf9['query']);_0x4ed404['filters']=_[_0x0f95('0x28')](_0x4ed404[_0x0f95('0x29')],_0x4ed404[_0x0f95('0x27')]);_0x5ded84[_0x0f95('0x2a')]=_[_0x0f95('0x28')](_0x4ed404[_0x0f95('0x29')],qs[_0x0f95('0x2b')](_0x278cf9['query'][_0x0f95('0x2b')]));_0x5ded84[_0x0f95('0x2a')]=_0x5ded84['attributes']['length']?_0x5ded84[_0x0f95('0x2a')]:_0x4ed404[_0x0f95('0x29')];if(_0x278cf9['query'][_0x0f95('0x2c')]){_0x5ded84[_0x0f95('0x2d')]=[{'all':!![]}];}_0x5ded84=_[_0x0f95('0x2e')]({},_0x5ded84,_0x278cf9['options']);return db[_0x0f95('0x26')][_0x0f95('0x2f')](_0x5ded84)[_0x0f95('0x1f')](handleEntityNotFound(_0x118df6,null))['then'](respondWithResult(_0x118df6,null))[_0x0f95('0x30')](handleError(_0x118df6,null));};exports[_0x0f95('0x20')]=function(_0x44338e,_0x5b71a5){return db[_0x0f95('0x26')][_0x0f95('0x2f')]({'where':{'id':_0x44338e[_0x0f95('0x24')]['id']}})[_0x0f95('0x1f')](handleEntityNotFound(_0x5b71a5,null))[_0x0f95('0x1f')](removeEntity(_0x5b71a5,null))[_0x0f95('0x30')](handleError(_0x5b71a5,null));};function widgetAttributes(_0x16a2db){try{switch(_0x16a2db[_0x0f95('0x31')]){case _0x0f95('0x32'):return[{'name':'attrUrl','value':_0x16a2db[_0x0f95('0x33')]||(_0x16a2db[_0x0f95('0x34')]&&_0x16a2db[_0x0f95('0x34')][0x0]?_0x16a2db[_0x0f95('0x34')][0x0][_0x0f95('0x35')]:undefined)||_0x0f95('0x36')}];case _0x0f95('0x37'):return[{'name':_0x0f95('0x38'),'value':_0x16a2db[_0x0f95('0x38')]||(_0x16a2db[_0x0f95('0x34')]&&_0x16a2db[_0x0f95('0x34')][0x0]?_0x16a2db[_0x0f95('0x34')][0x0][_0x0f95('0x35')]:undefined)||''}];case _0x0f95('0x39'):return[{'name':_0x0f95('0x3a'),'value':_0x16a2db[_0x0f95('0x3a')]||(_0x16a2db[_0x0f95('0x34')]&&_0x16a2db['attrs'][0x0]?_0x16a2db[_0x0f95('0x34')][0x0][_0x0f95('0x35')]:undefined)||_0x0f95('0x3b')},{'name':_0x0f95('0x3c'),'value':_0x16a2db[_0x0f95('0x3c')]||(_0x16a2db[_0x0f95('0x34')]&&_0x16a2db[_0x0f95('0x34')][0x1]?_0x16a2db[_0x0f95('0x34')][0x1]['value']:undefined)||'0.00'},{'name':_0x0f95('0x3d'),'value':_0x16a2db[_0x0f95('0x3d')]||(_0x16a2db['attrs']&&_0x16a2db[_0x0f95('0x34')][0x2]?_0x16a2db[_0x0f95('0x34')][0x2][_0x0f95('0x35')]:undefined)||0xc}];case _0x0f95('0x3e'):return[{'name':'attrMetric','value':_0x16a2db['attrMetric']||(_0x16a2db['attrs']&&_0x16a2db[_0x0f95('0x34')][0x0]?_0x16a2db[_0x0f95('0x34')][0x0][_0x0f95('0x35')]:undefined)||_0x0f95('0x3f')},{'name':_0x0f95('0x40'),'value':_0x16a2db[_0x0f95('0x40')]||(_0x16a2db['attrs']&&_0x16a2db[_0x0f95('0x34')][0x1]?_0x16a2db['attrs'][0x1][_0x0f95('0x35')]:undefined)||[]},{'name':_0x0f95('0x3d'),'value':_0x16a2db[_0x0f95('0x3d')]||(_0x16a2db['attrs']&&_0x16a2db[_0x0f95('0x34')][0x2]?_0x16a2db[_0x0f95('0x34')][0x2]['value']:undefined)||0x14}];case _0x0f95('0x41'):case _0x0f95('0x42'):return[{'name':_0x0f95('0x43'),'value':_0x16a2db[_0x0f95('0x43')]||(_0x16a2db['attrs']&&_0x16a2db['attrs'][0x0]?_0x16a2db[_0x0f95('0x34')][0x0][_0x0f95('0x35')]:undefined)||_0x0f95('0x3f')},{'name':_0x0f95('0x44'),'value':_0x16a2db['attrSerie2']||(_0x16a2db[_0x0f95('0x34')]&&_0x16a2db[_0x0f95('0x34')][0x1]?_0x16a2db[_0x0f95('0x34')][0x1][_0x0f95('0x35')]:undefined)||null},{'name':'attrSerie3','value':_0x16a2db[_0x0f95('0x45')]||(_0x16a2db[_0x0f95('0x34')]&&_0x16a2db[_0x0f95('0x34')][0x2]?_0x16a2db[_0x0f95('0x34')][0x2][_0x0f95('0x35')]:undefined)||null},{'name':_0x0f95('0x40'),'value':_0x16a2db[_0x0f95('0x40')]||(_0x16a2db[_0x0f95('0x34')]&&_0x16a2db[_0x0f95('0x34')][0x3]?_0x16a2db[_0x0f95('0x34')][0x3]['value']:undefined)||[]}];case _0x0f95('0x46'):return[{'name':_0x0f95('0x47'),'value':_0x16a2db['attrReport']||(_0x16a2db[_0x0f95('0x34')]&&_0x16a2db[_0x0f95('0x34')][0x0]?_0x16a2db[_0x0f95('0x34')][0x0][_0x0f95('0x35')]:undefined)||null},{'name':'attrRefresh','value':_0x16a2db[_0x0f95('0x48')]||(_0x16a2db['attrs']&&_0x16a2db[_0x0f95('0x34')][0x1]?_0x16a2db[_0x0f95('0x34')][0x1]['value']:undefined)||0x0}];default:return[];}}catch(_0x378192){logger['error'](_0x0f95('0x49'),JSON['stringify'](_0x378192));return[];}}exports[_0x0f95('0x4a')]=function(_0x50fd05,_0x49461c){if(_0x50fd05[_0x0f95('0x4b')]){_0x50fd05[_0x0f95('0x4b')][_0x0f95('0x34')]=widgetAttributes(_0x50fd05[_0x0f95('0x4b')]);}return db[_0x0f95('0x26')]['create'](_0x50fd05[_0x0f95('0x4b')],{})[_0x0f95('0x1f')](respondWithResult(_0x49461c,0xc9))[_0x0f95('0x30')](handleError(_0x49461c,null));};exports[_0x0f95('0x1e')]=function(_0x50b7b4,_0x80878a){if(_0x50b7b4[_0x0f95('0x4b')]['id']){delete _0x50b7b4[_0x0f95('0x4b')]['id'];}_0x50b7b4[_0x0f95('0x4b')][_0x0f95('0x34')]=widgetAttributes(_0x50b7b4[_0x0f95('0x4b')]);return db[_0x0f95('0x26')][_0x0f95('0x2f')]({'where':{'id':_0x50b7b4[_0x0f95('0x24')]['id']}})[_0x0f95('0x1f')](handleEntityNotFound(_0x80878a,null))[_0x0f95('0x1f')](saveUpdates(_0x50b7b4[_0x0f95('0x4b')],null))[_0x0f95('0x1f')](respondWithResult(_0x80878a,null))[_0x0f95('0x30')](handleError(_0x80878a,null));};
\ No newline at end of file
index 89f6ad7..49d9dbb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2e14=['../../mysqldb','DashboardItem','setMaxListeners','update','remove','emit','hook','exports'];(function(_0x27ac8e,_0x4604c2){var _0x45d4a9=function(_0x4d25a4){while(--_0x4d25a4){_0x27ac8e['push'](_0x27ac8e['shift']());}};_0x45d4a9(++_0x4604c2);}(_0x2e14,0x110));var _0x42e1=function(_0x25a23f,_0x41d099){_0x25a23f=_0x25a23f-0x0;var _0x18643c=_0x2e14[_0x25a23f];return _0x18643c;};'use strict';var EventEmitter=require('events');var DashboardItem=require(_0x42e1('0x0'))['db'][_0x42e1('0x1')];var DashboardItemEvents=new EventEmitter();DashboardItemEvents[_0x42e1('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0x42e1('0x3'),'afterDestroy':_0x42e1('0x4')};function emitEvent(_0x1212ea){return function(_0x35d80f,_0x2c9fd2,_0x4d249e){DashboardItemEvents['emit'](_0x1212ea+':'+_0x35d80f['id'],_0x35d80f);DashboardItemEvents[_0x42e1('0x5')](_0x1212ea,_0x35d80f);_0x4d249e(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];DashboardItem[_0x42e1('0x6')](e,emitEvent(event));}}module[_0x42e1('0x7')]=DashboardItemEvents;
\ No newline at end of file
+var _0x0214=['../../mysqldb','setMaxListeners','save','update','emit','hasOwnProperty','hook','exports','events'];(function(_0xce186c,_0x401909){var _0x1a6f4d=function(_0x462008){while(--_0x462008){_0xce186c['push'](_0xce186c['shift']());}};_0x1a6f4d(++_0x401909);}(_0x0214,0x1c1));var _0x4021=function(_0x5f511f,_0x57a484){_0x5f511f=_0x5f511f-0x0;var _0x30aa77=_0x0214[_0x5f511f];return _0x30aa77;};'use strict';var EventEmitter=require(_0x4021('0x0'));var DashboardItem=require(_0x4021('0x1'))['db']['DashboardItem'];var DashboardItemEvents=new EventEmitter();DashboardItemEvents[_0x4021('0x2')](0x0);var events={'afterCreate':_0x4021('0x3'),'afterUpdate':_0x4021('0x4'),'afterDestroy':'remove'};function emitEvent(_0x426e89){return function(_0xbd5c09,_0x2fbbfa,_0x22ca11){DashboardItemEvents[_0x4021('0x5')](_0x426e89+':'+_0xbd5c09['id'],_0xbd5c09);DashboardItemEvents[_0x4021('0x5')](_0x426e89,_0xbd5c09);_0x22ca11(null);};}for(var e in events){if(events[_0x4021('0x6')](e)){var event=events[e];DashboardItem[_0x4021('0x7')](e,emitEvent(event));}}module[_0x4021('0x8')]=DashboardItemEvents;
\ No newline at end of file
index b9c28ed..db420c3 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(_0x5eb22e,_0x27cbac){var _0x27fed5=function(_0x565467){while(--_0x565467){_0x5eb22e['push'](_0x5eb22e['shift']());}};_0x27fed5(++_0x27cbac);}(_0x7a54,0x106));var _0x47a5=function(_0x57cc9b,_0x1c0788){_0x57cc9b=_0x57cc9b-0x0;var _0x306da6=_0x7a54[_0x57cc9b];return _0x306da6;};'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(_0x3c4116,_0x8a1a3d){var _0x1bbdcd=function(_0x4ad059){while(--_0x4ad059){_0x3c4116['push'](_0x3c4116['shift']());}};_0x1bbdcd(++_0x8a1a3d);}(_0x7a54,0x106));var _0x47a5=function(_0x3c7002,_0x414d2b){_0x3c7002=_0x3c7002-0x0;var _0x7e42d4=_0x7a54[_0x3c7002];return _0x7e42d4;};'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 b3af2e5..e701373 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['client','socket.io-emitter','localhost','./dashboardItem.socket','request','then','info','DashboardItem,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','lodash','util','moment','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0xbf09ab,_0x251a19){var _0x2a9aef=function(_0x22d793){while(--_0x22d793){_0xbf09ab['push'](_0xbf09ab['shift']());}};_0x2a9aef(++_0x251a19);}(_0xa9e0,0x123));var _0x0a9e=function(_0x8de54f,_0x271987){_0x8de54f=_0x8de54f-0x0;var _0x14cba4=_0xa9e0[_0x8de54f];return _0x14cba4;};'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 db=require(_0x0a9e('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x0a9e('0x4'))(_0x0a9e('0x5'));var config=require(_0x0a9e('0x6'));var jayson=require(_0x0a9e('0x7'));var client=jayson[_0x0a9e('0x8')]['http']({'port':0x232a});var socket=require(_0x0a9e('0x9'))({'host':_0x0a9e('0xa'),'port':0x18eb});require(_0x0a9e('0xb'))['register'](socket);function respondWithRpcPromise(_0x503809,_0xe42b77,_0x56465b){return new BPromise(function(_0x52cace,_0x39753a){return client[_0x0a9e('0xc')](_0x503809,_0x56465b)[_0x0a9e('0xd')](function(_0x3ab53f){logger[_0x0a9e('0xe')](_0x0a9e('0xf'),_0xe42b77,'request\x20sent');logger['debug']('DashboardItem,\x20%s,\x20%s,\x20%s',_0xe42b77,'request\x20sent',JSON[_0x0a9e('0x10')](_0x3ab53f));if(_0x3ab53f[_0x0a9e('0x11')]){if(_0x3ab53f[_0x0a9e('0x11')][_0x0a9e('0x12')]===0x1f4){logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x3ab53f['error'][_0x0a9e('0x13')]);return _0x39753a(_0x3ab53f[_0x0a9e('0x11')][_0x0a9e('0x13')]);}logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x3ab53f[_0x0a9e('0x11')]['message']);return _0x52cace(_0x3ab53f[_0x0a9e('0x11')]['message']);}else{logger[_0x0a9e('0xe')]('DashboardItem,\x20%s,\x20%s',_0xe42b77,_0x0a9e('0x14'));_0x52cace(_0x3ab53f[_0x0a9e('0x15')]['message']);}})[_0x0a9e('0x16')](function(_0x5a0a06){logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x5a0a06);_0x39753a(_0x5a0a06);});});}
\ No newline at end of file
+var _0xa9e0=['client','socket.io-emitter','localhost','./dashboardItem.socket','request','then','info','DashboardItem,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','lodash','util','moment','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x267484,_0x3eb131){var _0x14a356=function(_0x54703b){while(--_0x54703b){_0x267484['push'](_0x267484['shift']());}};_0x14a356(++_0x3eb131);}(_0xa9e0,0x123));var _0x0a9e=function(_0x46aff0,_0x122890){_0x46aff0=_0x46aff0-0x0;var _0x9d78cf=_0xa9e0[_0x46aff0];return _0x9d78cf;};'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 db=require(_0x0a9e('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x0a9e('0x4'))(_0x0a9e('0x5'));var config=require(_0x0a9e('0x6'));var jayson=require(_0x0a9e('0x7'));var client=jayson[_0x0a9e('0x8')]['http']({'port':0x232a});var socket=require(_0x0a9e('0x9'))({'host':_0x0a9e('0xa'),'port':0x18eb});require(_0x0a9e('0xb'))['register'](socket);function respondWithRpcPromise(_0x503809,_0xe42b77,_0x56465b){return new BPromise(function(_0x52cace,_0x39753a){return client[_0x0a9e('0xc')](_0x503809,_0x56465b)[_0x0a9e('0xd')](function(_0x3ab53f){logger[_0x0a9e('0xe')](_0x0a9e('0xf'),_0xe42b77,'request\x20sent');logger['debug']('DashboardItem,\x20%s,\x20%s,\x20%s',_0xe42b77,'request\x20sent',JSON[_0x0a9e('0x10')](_0x3ab53f));if(_0x3ab53f[_0x0a9e('0x11')]){if(_0x3ab53f[_0x0a9e('0x11')][_0x0a9e('0x12')]===0x1f4){logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x3ab53f['error'][_0x0a9e('0x13')]);return _0x39753a(_0x3ab53f[_0x0a9e('0x11')][_0x0a9e('0x13')]);}logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x3ab53f[_0x0a9e('0x11')]['message']);return _0x52cace(_0x3ab53f[_0x0a9e('0x11')]['message']);}else{logger[_0x0a9e('0xe')]('DashboardItem,\x20%s,\x20%s',_0xe42b77,_0x0a9e('0x14'));_0x52cace(_0x3ab53f[_0x0a9e('0x15')]['message']);}})[_0x0a9e('0x16')](function(_0x5a0a06){logger[_0x0a9e('0x11')](_0x0a9e('0xf'),_0xe42b77,_0x5a0a06);_0x39753a(_0x5a0a06);});});}
\ No newline at end of file
index 5e08c2c..6d0e635 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['./dashboardItem.events','save','remove','update','emit','removeListener','register','dashboardItem:'];(function(_0x578570,_0x23c1fa){var _0x12f0c3=function(_0x7e72d9){while(--_0x7e72d9){_0x578570['push'](_0x578570['shift']());}};_0x12f0c3(++_0x23c1fa);}(_0x008c,0x188));var _0xc008=function(_0x172133,_0x10246b){_0x172133=_0x172133-0x0;var _0x2460e5=_0x008c[_0x172133];return _0x2460e5;};'use strict';var DashboardItemEvents=require(_0xc008('0x0'));var events=[_0xc008('0x1'),_0xc008('0x2'),_0xc008('0x3')];function createListener(_0x1d119a,_0x544fdf){return function(_0x3641af){_0x544fdf[_0xc008('0x4')](_0x1d119a,_0x3641af);};}function removeListener(_0x10b33c,_0x163bd9){return function(){DashboardItemEvents[_0xc008('0x5')](_0x10b33c,_0x163bd9);};}exports[_0xc008('0x6')]=function(_0x13aa7){for(var _0x39bb5e=0x0,_0x9c8cb2=events['length'];_0x39bb5e<_0x9c8cb2;_0x39bb5e++){var _0x428fa9=events[_0x39bb5e];var _0x5aa09b=createListener(_0xc008('0x7')+_0x428fa9,_0x13aa7);DashboardItemEvents['on'](_0x428fa9,_0x5aa09b);}};
\ No newline at end of file
+var _0x008c=['./dashboardItem.events','save','remove','update','emit','removeListener','register','dashboardItem:'];(function(_0x281fad,_0x554939){var _0x5a0344=function(_0x37543f){while(--_0x37543f){_0x281fad['push'](_0x281fad['shift']());}};_0x5a0344(++_0x554939);}(_0x008c,0x188));var _0xc008=function(_0x54fbcb,_0x21a10f){_0x54fbcb=_0x54fbcb-0x0;var _0x58e047=_0x008c[_0x54fbcb];return _0x58e047;};'use strict';var DashboardItemEvents=require(_0xc008('0x0'));var events=[_0xc008('0x1'),_0xc008('0x2'),_0xc008('0x3')];function createListener(_0x1d119a,_0x544fdf){return function(_0x3641af){_0x544fdf[_0xc008('0x4')](_0x1d119a,_0x3641af);};}function removeListener(_0x10b33c,_0x163bd9){return function(){DashboardItemEvents[_0xc008('0x5')](_0x10b33c,_0x163bd9);};}exports[_0xc008('0x6')]=function(_0x13aa7){for(var _0x39bb5e=0x0,_0x9c8cb2=events['length'];_0x39bb5e<_0x9c8cb2;_0x39bb5e++){var _0x428fa9=events[_0x39bb5e];var _0x5aa09b=createListener(_0xc008('0x7')+_0x428fa9,_0x13aa7);DashboardItemEvents['on'](_0x428fa9,_0x5aa09b);}};
\ No newline at end of file
index 672fb72..a89d3cd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ff8=['util','path','../../components/auth/service','../../components/interaction/service','isAuthenticated','show','create','put','/:id','update','delete','destroy','exports','multer'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x6ff8,0x125));var _0x86ff=function(_0x321575,_0x458292){_0x321575=_0x321575-0x0;var _0x147fc3=_0x6ff8[_0x321575];return _0x147fc3;};'use strict';var multer=require(_0x86ff('0x0'));var util=require(_0x86ff('0x1'));var path=require(_0x86ff('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x86ff('0x3'));var interaction=require(_0x86ff('0x4'));var config=require('../../config/environment');var controller=require('./dashboardItem.controller');router['get']('/:id',auth[_0x86ff('0x5')](),controller[_0x86ff('0x6')]);router['post']('/',auth[_0x86ff('0x5')](),controller[_0x86ff('0x7')]);router[_0x86ff('0x8')](_0x86ff('0x9'),auth['isAuthenticated'](),controller[_0x86ff('0xa')]);router[_0x86ff('0xb')](_0x86ff('0x9'),auth[_0x86ff('0x5')](),controller[_0x86ff('0xc')]);module[_0x86ff('0xd')]=router;
\ No newline at end of file
+var _0xc592=['show','isAuthenticated','create','put','destroy','exports','multer','util','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./dashboardItem.controller','get','/:id'];(function(_0x2e73e6,_0x616a85){var _0x3c4f35=function(_0x1979a3){while(--_0x1979a3){_0x2e73e6['push'](_0x2e73e6['shift']());}};_0x3c4f35(++_0x616a85);}(_0xc592,0x18c));var _0x2c59=function(_0x1af616,_0x2a66f5){_0x1af616=_0x1af616-0x0;var _0x4dfae1=_0xc592[_0x1af616];return _0x4dfae1;};'use strict';var multer=require(_0x2c59('0x0'));var util=require(_0x2c59('0x1'));var path=require('path');var express=require(_0x2c59('0x2'));var router=express['Router']();var auth=require(_0x2c59('0x3'));var interaction=require(_0x2c59('0x4'));var config=require(_0x2c59('0x5'));var controller=require(_0x2c59('0x6'));router[_0x2c59('0x7')](_0x2c59('0x8'),auth['isAuthenticated'](),controller[_0x2c59('0x9')]);router['post']('/',auth[_0x2c59('0xa')](),controller[_0x2c59('0xb')]);router[_0x2c59('0xc')](_0x2c59('0x8'),auth[_0x2c59('0xa')](),controller['update']);router['delete'](_0x2c59('0x8'),auth[_0x2c59('0xa')](),controller[_0x2c59('0xd')]);module[_0x2c59('0xe')]=router;
\ No newline at end of file
index 8fa45e9..ebca04f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfdd2=['STRING','sequelize','exports'];(function(_0x374ccf,_0xa945c4){var _0x443cde=function(_0x27ff10){while(--_0x27ff10){_0x374ccf['push'](_0x374ccf['shift']());}};_0x443cde(++_0xa945c4);}(_0xfdd2,0x1d5));var _0x2fdd=function(_0x5d4364,_0x4a6c71){_0x5d4364=_0x5d4364-0x0;var _0x460809=_0xfdd2[_0x5d4364];return _0x460809;};'use strict';var Sequelize=require(_0x2fdd('0x0'));module[_0x2fdd('0x1')]={'name':{'type':Sequelize[_0x2fdd('0x2')],'allowNull':![]}};
\ No newline at end of file
+var _0x6316=['sequelize','exports'];(function(_0x264194,_0x48ee77){var _0x584be0=function(_0x4f9b57){while(--_0x4f9b57){_0x264194['push'](_0x264194['shift']());}};_0x584be0(++_0x48ee77);}(_0x6316,0x1da));var _0x6631=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x6316[_0x14add3];return _0x4a174f;};'use strict';var Sequelize=require(_0x6631('0x0'));module[_0x6631('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]}};
\ No newline at end of file
index a90274b..ddfc307 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['include','rows','show','params','rawAttributes','length','find','catch','create','body','fast-json-patch','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','end','error','stack','name','send','index','Disposition','model','keys','query','dateStart','dateEnd','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','filters','pick','add','day','where','merge','filter','options','includeAll'];(function(_0x45df27,_0x37dbfc){var _0x529812=function(_0x41d92b){while(--_0x41d92b){_0x45df27['push'](_0x45df27['shift']());}};_0x529812(++_0x37dbfc);}(_0xb10b,0x12a));var _0xbb10=function(_0x5c5c1b,_0x4a67da){_0x5c5c1b=_0x5c5c1b-0x0;var _0x27ab42=_0xb10b[_0x5c5c1b];return _0x27ab42;};'use strict';var jsonpatch=require(_0xbb10('0x0'));var rp=require('request-promise');var moment=require(_0xbb10('0x1'));var BPromise=require(_0xbb10('0x2'));var Mustache=require(_0xbb10('0x3'));var util=require('util');var path=require(_0xbb10('0x4'));var sox=require(_0xbb10('0x5'));var csv=require(_0xbb10('0x6'));var ejs=require(_0xbb10('0x7'));var fs=require('fs');var _=require(_0xbb10('0x8'));var squel=require(_0xbb10('0x9'));var crypto=require('crypto');var jsforce=require(_0xbb10('0xa'));var deskjs=require(_0xbb10('0xb'));var toCsv=require('to-csv');var querystring=require(_0xbb10('0xc'));var Papa=require(_0xbb10('0xd'));var qs=require(_0xbb10('0xe'));var logger=require(_0xbb10('0xf'))(_0xbb10('0x10'));var utils=require(_0xbb10('0x11'));var config=require(_0xbb10('0x12'));var db=require(_0xbb10('0x13'))['db'];function respondWithStatusCode(_0x5ab04a,_0x4e47f8){_0x4e47f8=_0x4e47f8||0xcc;return function(_0x20bd61){if(_0x20bd61){return _0x5ab04a[_0xbb10('0x14')](_0x4e47f8);}return _0x5ab04a[_0xbb10('0x15')](_0x4e47f8)['end']();};}function respondWithResult(_0x408248,_0x5be7e0){_0x5be7e0=_0x5be7e0||0xc8;return function(_0x44fb19){if(_0x44fb19){return _0x408248[_0xbb10('0x15')](_0x5be7e0)[_0xbb10('0x16')](_0x44fb19);}};}function respondWithFilteredResult(_0x193a27,_0x442548){return function(_0x147230){if(_0x147230){var _0x58a612=_0x147230[_0xbb10('0x17')],_0x26e021=_0x442548[_0xbb10('0x18')],_0x42d7e4=_0x442548[_0xbb10('0x18')]+_0x442548[_0xbb10('0x19')],_0x45b9d6;if(_0x42d7e4>=_0x58a612){_0x42d7e4=_0x58a612;_0x45b9d6=0xc8;}else{_0x45b9d6=0xce;}_0x193a27[_0xbb10('0x15')](_0x45b9d6);return _0x193a27[_0xbb10('0x1a')](_0xbb10('0x1b'),_0x26e021+'-'+_0x42d7e4+'/'+_0x58a612)['json'](_0x147230);}return null;};}function patchUpdates(_0x2eca0f){return function(_0x1145f1){try{jsonpatch[_0xbb10('0x1c')](_0x1145f1,_0x2eca0f,!![]);}catch(_0x42db98){return BPromise[_0xbb10('0x1d')](_0x42db98);}return _0x1145f1[_0xbb10('0x1e')]();};}function saveUpdates(_0x575cca,_0x30efc6){return function(_0xbf2906){if(_0xbf2906){return _0xbf2906[_0xbb10('0x1f')](_0x575cca)['then'](function(_0x5ff0cf){return _0x5ff0cf;});}return null;};}function removeEntity(_0x19f48d,_0x388fab){return function(_0x109908){if(_0x109908){return _0x109908[_0xbb10('0x20')]()[_0xbb10('0x21')](function(){_0x19f48d['status'](0xcc)[_0xbb10('0x22')]();});}};}function handleEntityNotFound(_0x12ef77,_0x50aea1){return function(_0x4c4b0d){if(!_0x4c4b0d){_0x12ef77[_0xbb10('0x14')](0x194);}return _0x4c4b0d;};}function handleError(_0x311abe,_0x2e911d){_0x2e911d=_0x2e911d||0x1f4;return function(_0x317da4){logger[_0xbb10('0x23')](_0x317da4[_0xbb10('0x24')]);if(_0x317da4[_0xbb10('0x25')]){delete _0x317da4[_0xbb10('0x25')];}_0x311abe[_0xbb10('0x15')](_0x2e911d)[_0xbb10('0x26')](_0x317da4);};}exports[_0xbb10('0x27')]=function(_0x26ad93,_0x537898){var _0x4fedac={},_0x4fb5e0={},_0xc93a04={'count':0x0,'rows':[]};var _0x3c5ae7=db[_0xbb10('0x28')]['rawAttributes'];_0x4fb5e0[_0xbb10('0x29')]=_[_0xbb10('0x2a')](_0x3c5ae7);var _0x6ed43b={'dateStart':_0x26ad93[_0xbb10('0x2b')][_0xbb10('0x2c')],'dateEnd':_0x26ad93[_0xbb10('0x2b')][_0xbb10('0x2d')]};delete _0x26ad93['query'][_0xbb10('0x2c')];delete _0x26ad93[_0xbb10('0x2b')][_0xbb10('0x2d')];_0x4fb5e0[_0xbb10('0x2b')]=_[_0xbb10('0x2a')](_0x26ad93[_0xbb10('0x2b')]);_0x4fb5e0['filters']=_[_0xbb10('0x2e')](_0x4fb5e0['model'],_0x4fb5e0[_0xbb10('0x2b')]);_0x4fedac['attributes']=_[_0xbb10('0x2e')](_0x4fb5e0[_0xbb10('0x29')],qs[_0xbb10('0x2f')](_0x26ad93['query']['fields']));_0x4fedac[_0xbb10('0x30')]=_0x4fedac[_0xbb10('0x30')]['length']?_0x4fedac[_0xbb10('0x30')]:_0x4fb5e0[_0xbb10('0x29')];if(!_0x26ad93[_0xbb10('0x2b')][_0xbb10('0x31')](_0xbb10('0x32'))){_0x4fedac[_0xbb10('0x19')]=qs[_0xbb10('0x19')](_0x26ad93['query'][_0xbb10('0x19')]);_0x4fedac[_0xbb10('0x18')]=qs[_0xbb10('0x18')](_0x26ad93[_0xbb10('0x2b')][_0xbb10('0x18')]);}_0x4fedac[_0xbb10('0x33')]=qs[_0xbb10('0x34')](_0x26ad93[_0xbb10('0x2b')][_0xbb10('0x34')]);_0x4fedac['where']=qs[_0xbb10('0x35')](_[_0xbb10('0x36')](_0x26ad93[_0xbb10('0x2b')],_0x4fb5e0[_0xbb10('0x35')]));if(_0x6ed43b['dateStart']){if(_0x6ed43b[_0xbb10('0x2d')]){_0x6ed43b['dateEnd']=moment(_0x6ed43b['dateEnd'])[_0xbb10('0x37')](0x1,_0xbb10('0x38'));}else{_0x6ed43b[_0xbb10('0x2d')]=moment(_0x6ed43b[_0xbb10('0x2c')])[_0xbb10('0x37')](0x1,_0xbb10('0x38'));}_['merge'](_0x4fedac[_0xbb10('0x39')],{'createdAt':{'$gte':_0x6ed43b[_0xbb10('0x2c')],'$lte':_0x6ed43b['dateEnd']}});}if(_0x26ad93['query']['filter']){_0x4fedac[_0xbb10('0x39')]=_[_0xbb10('0x3a')](_0x4fedac[_0xbb10('0x39')],{'$or':_['map'](_0x4fedac[_0xbb10('0x30')],function(_0x3e8538){var _0x4345f3={};_0x4345f3[_0x3e8538]={'$like':'%'+_0x26ad93['query'][_0xbb10('0x3b')]+'%'};return _0x4345f3;})});}_0x4fedac=_[_0xbb10('0x3a')]({},_0x4fedac,_0x26ad93[_0xbb10('0x3c')]);var _0x446f49={'where':_0x4fedac['where']};return db[_0xbb10('0x28')][_0xbb10('0x17')](_0x446f49)['then'](function(_0xe2040f){_0xc93a04[_0xbb10('0x17')]=_0xe2040f;if(_0x26ad93[_0xbb10('0x2b')][_0xbb10('0x3d')]){_0x4fedac[_0xbb10('0x3e')]=[{'all':!![]}];}return db[_0xbb10('0x28')]['findAll'](_0x4fedac);})[_0xbb10('0x21')](function(_0x1c7fae){_0xc93a04[_0xbb10('0x3f')]=_0x1c7fae;return _0xc93a04;})[_0xbb10('0x21')](respondWithFilteredResult(_0x537898,_0x4fedac))['catch'](handleError(_0x537898,null));};exports[_0xbb10('0x40')]=function(_0x331751,_0x23dc18){var _0x403beb={'raw':!![],'where':{'id':_0x331751[_0xbb10('0x41')]['id']}},_0x5e2cfa={};_0x5e2cfa[_0xbb10('0x29')]=_['keys'](db['Disposition'][_0xbb10('0x42')]);_0x5e2cfa['query']=_[_0xbb10('0x2a')](_0x331751[_0xbb10('0x2b')]);_0x5e2cfa['filters']=_[_0xbb10('0x2e')](_0x5e2cfa[_0xbb10('0x29')],_0x5e2cfa[_0xbb10('0x2b')]);_0x403beb['attributes']=_[_0xbb10('0x2e')](_0x5e2cfa[_0xbb10('0x29')],qs[_0xbb10('0x2f')](_0x331751[_0xbb10('0x2b')][_0xbb10('0x2f')]));_0x403beb[_0xbb10('0x30')]=_0x403beb[_0xbb10('0x30')][_0xbb10('0x43')]?_0x403beb[_0xbb10('0x30')]:_0x5e2cfa[_0xbb10('0x29')];if(_0x331751[_0xbb10('0x2b')][_0xbb10('0x3d')]){_0x403beb['include']=[{'all':!![]}];}_0x403beb=_[_0xbb10('0x3a')]({},_0x403beb,_0x331751[_0xbb10('0x3c')]);return db['Disposition'][_0xbb10('0x44')](_0x403beb)[_0xbb10('0x21')](handleEntityNotFound(_0x23dc18,null))[_0xbb10('0x21')](respondWithResult(_0x23dc18,null))[_0xbb10('0x45')](handleError(_0x23dc18,null));};exports[_0xbb10('0x46')]=function(_0x39f0de,_0x3e06b0){return db['Disposition']['create'](_0x39f0de[_0xbb10('0x47')],{})[_0xbb10('0x21')](respondWithResult(_0x3e06b0,0xc9))[_0xbb10('0x45')](handleError(_0x3e06b0,null));};exports['update']=function(_0x5f0c12,_0x3cd6f3){if(_0x5f0c12[_0xbb10('0x47')]['id']){delete _0x5f0c12[_0xbb10('0x47')]['id'];}return db[_0xbb10('0x28')][_0xbb10('0x44')]({'where':{'id':_0x5f0c12[_0xbb10('0x41')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x3cd6f3,null))[_0xbb10('0x21')](saveUpdates(_0x5f0c12[_0xbb10('0x47')],null))[_0xbb10('0x21')](respondWithResult(_0x3cd6f3,null))['catch'](handleError(_0x3cd6f3,null));};exports['destroy']=function(_0x412e13,_0x467dba){return db[_0xbb10('0x28')][_0xbb10('0x44')]({'where':{'id':_0x412e13[_0xbb10('0x41')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x467dba,null))[_0xbb10('0x21')](removeEntity(_0x467dba,null))[_0xbb10('0x45')](handleError(_0x467dba,null));};
\ No newline at end of file
+var _0xd8b0=['reject','save','then','destroy','error','stack','name','send','index','Disposition','rawAttributes','model','query','dateStart','dateEnd','keys','filters','attributes','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','filter','options','includeAll','include','findAll','rows','catch','show','length','find','create','body','update','params','fast-json-patch','request-promise','util','path','sox','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','Content-Range','apply'];(function(_0x30fa8e,_0x38ce8c){var _0x5188e4=function(_0x235e2f){while(--_0x235e2f){_0x30fa8e['push'](_0x30fa8e['shift']());}};_0x5188e4(++_0x38ce8c);}(_0xd8b0,0xad));var _0x0d8b=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xd8b0[_0x20a584];return _0x4b41a8;};'use strict';var jsonpatch=require(_0x0d8b('0x0'));var rp=require(_0x0d8b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0d8b('0x2'));var path=require(_0x0d8b('0x3'));var sox=require(_0x0d8b('0x4'));var csv=require(_0x0d8b('0x5'));var ejs=require(_0x0d8b('0x6'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x0d8b('0x7'));var jsforce=require(_0x0d8b('0x8'));var deskjs=require(_0x0d8b('0x9'));var toCsv=require('to-csv');var querystring=require(_0x0d8b('0xa'));var Papa=require(_0x0d8b('0xb'));var qs=require('../../components/parsers/qs');var logger=require(_0x0d8b('0xc'))(_0x0d8b('0xd'));var utils=require(_0x0d8b('0xe'));var config=require(_0x0d8b('0xf'));var db=require(_0x0d8b('0x10'))['db'];function respondWithStatusCode(_0x1cac62,_0x2c5e9e){_0x2c5e9e=_0x2c5e9e||0xcc;return function(_0x28f87c){if(_0x28f87c){return _0x1cac62['sendStatus'](_0x2c5e9e);}return _0x1cac62[_0x0d8b('0x11')](_0x2c5e9e)['end']();};}function respondWithResult(_0x4225c4,_0xc574a3){_0xc574a3=_0xc574a3||0xc8;return function(_0x340cc4){if(_0x340cc4){return _0x4225c4[_0x0d8b('0x11')](_0xc574a3)[_0x0d8b('0x12')](_0x340cc4);}};}function respondWithFilteredResult(_0x32bb1a,_0x15dd0f){return function(_0x31a8cc){if(_0x31a8cc){var _0x1d4bbc=_0x31a8cc[_0x0d8b('0x13')],_0x2ce75e=_0x15dd0f[_0x0d8b('0x14')],_0x5ad086=_0x15dd0f['offset']+_0x15dd0f[_0x0d8b('0x15')],_0xe65334;if(_0x5ad086>=_0x1d4bbc){_0x5ad086=_0x1d4bbc;_0xe65334=0xc8;}else{_0xe65334=0xce;}_0x32bb1a[_0x0d8b('0x11')](_0xe65334);return _0x32bb1a[_0x0d8b('0x16')](_0x0d8b('0x17'),_0x2ce75e+'-'+_0x5ad086+'/'+_0x1d4bbc)[_0x0d8b('0x12')](_0x31a8cc);}return null;};}function patchUpdates(_0x5cd485){return function(_0x106a01){try{jsonpatch[_0x0d8b('0x18')](_0x106a01,_0x5cd485,!![]);}catch(_0x2fd0fc){return BPromise[_0x0d8b('0x19')](_0x2fd0fc);}return _0x106a01[_0x0d8b('0x1a')]();};}function saveUpdates(_0x18dd2d,_0x264b39){return function(_0xa3612a){if(_0xa3612a){return _0xa3612a['update'](_0x18dd2d)[_0x0d8b('0x1b')](function(_0x23d58f){return _0x23d58f;});}return null;};}function removeEntity(_0x196c0a,_0x143372){return function(_0x24e8ed){if(_0x24e8ed){return _0x24e8ed[_0x0d8b('0x1c')]()[_0x0d8b('0x1b')](function(){_0x196c0a[_0x0d8b('0x11')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4f0a1a,_0x33fb87){return function(_0x54a9a7){if(!_0x54a9a7){_0x4f0a1a['sendStatus'](0x194);}return _0x54a9a7;};}function handleError(_0x5527d8,_0x238728){_0x238728=_0x238728||0x1f4;return function(_0x2b924f){logger[_0x0d8b('0x1d')](_0x2b924f[_0x0d8b('0x1e')]);if(_0x2b924f[_0x0d8b('0x1f')]){delete _0x2b924f[_0x0d8b('0x1f')];}_0x5527d8[_0x0d8b('0x11')](_0x238728)[_0x0d8b('0x20')](_0x2b924f);};}exports[_0x0d8b('0x21')]=function(_0x5e5bc3,_0xe8bbee){var _0x4463ee={},_0x5363e3={},_0xe1ef20={'count':0x0,'rows':[]};var _0x4a0ae4=db[_0x0d8b('0x22')][_0x0d8b('0x23')];_0x5363e3[_0x0d8b('0x24')]=_['keys'](_0x4a0ae4);var _0x59a905={'dateStart':_0x5e5bc3[_0x0d8b('0x25')][_0x0d8b('0x26')],'dateEnd':_0x5e5bc3['query'][_0x0d8b('0x27')]};delete _0x5e5bc3['query'][_0x0d8b('0x26')];delete _0x5e5bc3['query'][_0x0d8b('0x27')];_0x5363e3['query']=_[_0x0d8b('0x28')](_0x5e5bc3['query']);_0x5363e3[_0x0d8b('0x29')]=_['intersection'](_0x5363e3[_0x0d8b('0x24')],_0x5363e3[_0x0d8b('0x25')]);_0x4463ee[_0x0d8b('0x2a')]=_['intersection'](_0x5363e3['model'],qs['fields'](_0x5e5bc3[_0x0d8b('0x25')]['fields']));_0x4463ee[_0x0d8b('0x2a')]=_0x4463ee['attributes']['length']?_0x4463ee[_0x0d8b('0x2a')]:_0x5363e3[_0x0d8b('0x24')];if(!_0x5e5bc3[_0x0d8b('0x25')][_0x0d8b('0x2b')](_0x0d8b('0x2c'))){_0x4463ee[_0x0d8b('0x15')]=qs[_0x0d8b('0x15')](_0x5e5bc3[_0x0d8b('0x25')]['limit']);_0x4463ee[_0x0d8b('0x14')]=qs[_0x0d8b('0x14')](_0x5e5bc3['query'][_0x0d8b('0x14')]);}_0x4463ee[_0x0d8b('0x2d')]=qs[_0x0d8b('0x2e')](_0x5e5bc3['query'][_0x0d8b('0x2e')]);_0x4463ee[_0x0d8b('0x2f')]=qs[_0x0d8b('0x29')](_[_0x0d8b('0x30')](_0x5e5bc3[_0x0d8b('0x25')],_0x5363e3['filters']));if(_0x59a905[_0x0d8b('0x26')]){if(_0x59a905[_0x0d8b('0x27')]){_0x59a905['dateEnd']=moment(_0x59a905[_0x0d8b('0x27')])[_0x0d8b('0x31')](0x1,_0x0d8b('0x32'));}else{_0x59a905[_0x0d8b('0x27')]=moment(_0x59a905[_0x0d8b('0x26')])['add'](0x1,'day');}_[_0x0d8b('0x33')](_0x4463ee['where'],{'createdAt':{'$gte':_0x59a905['dateStart'],'$lte':_0x59a905[_0x0d8b('0x27')]}});}if(_0x5e5bc3[_0x0d8b('0x25')][_0x0d8b('0x34')]){_0x4463ee[_0x0d8b('0x2f')]=_[_0x0d8b('0x33')](_0x4463ee[_0x0d8b('0x2f')],{'$or':_['map'](_0x4463ee[_0x0d8b('0x2a')],function(_0x6a02ad){var _0x28fd82={};_0x28fd82[_0x6a02ad]={'$like':'%'+_0x5e5bc3[_0x0d8b('0x25')][_0x0d8b('0x34')]+'%'};return _0x28fd82;})});}_0x4463ee=_[_0x0d8b('0x33')]({},_0x4463ee,_0x5e5bc3[_0x0d8b('0x35')]);var _0x5c980b={'where':_0x4463ee[_0x0d8b('0x2f')]};return db[_0x0d8b('0x22')][_0x0d8b('0x13')](_0x5c980b)[_0x0d8b('0x1b')](function(_0x59d3ad){_0xe1ef20[_0x0d8b('0x13')]=_0x59d3ad;if(_0x5e5bc3['query'][_0x0d8b('0x36')]){_0x4463ee[_0x0d8b('0x37')]=[{'all':!![]}];}return db[_0x0d8b('0x22')][_0x0d8b('0x38')](_0x4463ee);})[_0x0d8b('0x1b')](function(_0x3e632e){_0xe1ef20[_0x0d8b('0x39')]=_0x3e632e;return _0xe1ef20;})[_0x0d8b('0x1b')](respondWithFilteredResult(_0xe8bbee,_0x4463ee))[_0x0d8b('0x3a')](handleError(_0xe8bbee,null));};exports[_0x0d8b('0x3b')]=function(_0x482069,_0x571acf){var _0x576050={'raw':!![],'where':{'id':_0x482069['params']['id']}},_0x4d0811={};_0x4d0811[_0x0d8b('0x24')]=_[_0x0d8b('0x28')](db[_0x0d8b('0x22')]['rawAttributes']);_0x4d0811['query']=_[_0x0d8b('0x28')](_0x482069[_0x0d8b('0x25')]);_0x4d0811[_0x0d8b('0x29')]=_['intersection'](_0x4d0811[_0x0d8b('0x24')],_0x4d0811[_0x0d8b('0x25')]);_0x576050['attributes']=_['intersection'](_0x4d0811[_0x0d8b('0x24')],qs['fields'](_0x482069[_0x0d8b('0x25')]['fields']));_0x576050['attributes']=_0x576050[_0x0d8b('0x2a')][_0x0d8b('0x3c')]?_0x576050['attributes']:_0x4d0811['model'];if(_0x482069['query']['includeAll']){_0x576050[_0x0d8b('0x37')]=[{'all':!![]}];}_0x576050=_[_0x0d8b('0x33')]({},_0x576050,_0x482069[_0x0d8b('0x35')]);return db['Disposition'][_0x0d8b('0x3d')](_0x576050)[_0x0d8b('0x1b')](handleEntityNotFound(_0x571acf,null))[_0x0d8b('0x1b')](respondWithResult(_0x571acf,null))[_0x0d8b('0x3a')](handleError(_0x571acf,null));};exports[_0x0d8b('0x3e')]=function(_0x2d5246,_0x11d22b){return db[_0x0d8b('0x22')][_0x0d8b('0x3e')](_0x2d5246[_0x0d8b('0x3f')],{})[_0x0d8b('0x1b')](respondWithResult(_0x11d22b,0xc9))[_0x0d8b('0x3a')](handleError(_0x11d22b,null));};exports[_0x0d8b('0x40')]=function(_0x3e569b,_0x570af8){if(_0x3e569b[_0x0d8b('0x3f')]['id']){delete _0x3e569b[_0x0d8b('0x3f')]['id'];}return db[_0x0d8b('0x22')][_0x0d8b('0x3d')]({'where':{'id':_0x3e569b['params']['id']}})[_0x0d8b('0x1b')](handleEntityNotFound(_0x570af8,null))['then'](saveUpdates(_0x3e569b['body'],null))[_0x0d8b('0x1b')](respondWithResult(_0x570af8,null))[_0x0d8b('0x3a')](handleError(_0x570af8,null));};exports[_0x0d8b('0x1c')]=function(_0x4396b5,_0x505d22){return db[_0x0d8b('0x22')][_0x0d8b('0x3d')]({'where':{'id':_0x4396b5[_0x0d8b('0x41')]['id']}})[_0x0d8b('0x1b')](handleEntityNotFound(_0x505d22,null))[_0x0d8b('0x1b')](removeEntity(_0x505d22,null))['catch'](handleError(_0x505d22,null));};
\ No newline at end of file
index c5f9819..a89beeb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x66fa=['tools_dispositions','name_voice','name','ListId','name_mail','MailAccountId','name_fax','name_openchannel','OpenchannelAccountId','lodash','util','api','moment','bluebird','request-promise','./disposition.attributes','exports','Disposition'];(function(_0x2cf391,_0x2acfb8){var _0x56aaca=function(_0x373c97){while(--_0x373c97){_0x2cf391['push'](_0x2cf391['shift']());}};_0x56aaca(++_0x2acfb8);}(_0x66fa,0x117));var _0xa66f=function(_0x8afd93,_0x38baf2){_0x8afd93=_0x8afd93-0x0;var _0xa82b41=_0x66fa[_0x8afd93];return _0xa82b41;};'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':[{'unique':!![],'name':_0xa66f('0xa'),'fields':[_0xa66f('0xb'),_0xa66f('0xc')]},{'unique':!![],'name':'name_chat','fields':[_0xa66f('0xb'),'ChatWebsiteId']},{'unique':!![],'name':_0xa66f('0xd'),'fields':['name',_0xa66f('0xe')]},{'unique':!![],'name':'name_sms','fields':['name','SmsAccountId']},{'unique':!![],'name':_0xa66f('0xf'),'fields':[_0xa66f('0xb'),'FaxAccountId']},{'unique':!![],'name':_0xa66f('0x10'),'fields':['name',_0xa66f('0x11')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x1967=['moment','bluebird','request-promise','./disposition.attributes','exports','Disposition','tools_dispositions','name_voice','name','ListId','name_chat','ChatWebsiteId','name_mail','MailAccountId','name_sms','name_fax','FaxAccountId','name_openchannel','OpenchannelAccountId','util','../../config/logger','api'];(function(_0x263c0d,_0x1a0b9a){var _0x384068=function(_0x143eb5){while(--_0x143eb5){_0x263c0d['push'](_0x263c0d['shift']());}};_0x384068(++_0x1a0b9a);}(_0x1967,0x173));var _0x7196=function(_0x267525,_0x262d27){_0x267525=_0x267525-0x0;var _0x201db5=_0x1967[_0x267525];return _0x201db5;};'use strict';var _=require('lodash');var util=require(_0x7196('0x0'));var logger=require(_0x7196('0x1'))(_0x7196('0x2'));var moment=require(_0x7196('0x3'));var BPromise=require(_0x7196('0x4'));var rp=require(_0x7196('0x5'));var attributes=require(_0x7196('0x6'));module[_0x7196('0x7')]=function(_0x458ae8,_0x3ae43f){return _0x458ae8['define'](_0x7196('0x8'),attributes,{'tableName':_0x7196('0x9'),'paranoid':![],'indexes':[{'unique':!![],'name':_0x7196('0xa'),'fields':[_0x7196('0xb'),_0x7196('0xc')]},{'unique':!![],'name':_0x7196('0xd'),'fields':['name',_0x7196('0xe')]},{'unique':!![],'name':_0x7196('0xf'),'fields':[_0x7196('0xb'),_0x7196('0x10')]},{'unique':!![],'name':_0x7196('0x11'),'fields':['name','SmsAccountId']},{'unique':!![],'name':_0x7196('0x12'),'fields':[_0x7196('0xb'),_0x7196('0x13')]},{'unique':!![],'name':_0x7196('0x14'),'fields':[_0x7196('0xb'),_0x7196('0x15')]}],'timestamps':!![]});};
\ No newline at end of file
index c27acf4..e8b7ff0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['result','catch','lodash','util','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','then','info','Disposition,\x20%s,\x20%s','request\x20sent','debug','Disposition,\x20%s,\x20%s,\x20%s','error','code','message'];(function(_0x5c3904,_0x4d9a96){var _0x2cd01c=function(_0x2d359b){while(--_0x2d359b){_0x5c3904['push'](_0x5c3904['shift']());}};_0x2cd01c(++_0x4d9a96);}(_0xd8b0,0xad));var _0x0d8b=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0xd8b0[_0x122ef9];return _0x42fba0;};'use strict';var _=require(_0x0d8b('0x0'));var util=require(_0x0d8b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0x0d8b('0x2'))['db'];var utils=require(_0x0d8b('0x3'));var logger=require(_0x0d8b('0x4'))(_0x0d8b('0x5'));var config=require(_0x0d8b('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0x0d8b('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x227c63,_0x39f43a,_0x4a4470){return new BPromise(function(_0x413284,_0x284169){return client['request'](_0x227c63,_0x4a4470)[_0x0d8b('0x8')](function(_0x348e65){logger[_0x0d8b('0x9')](_0x0d8b('0xa'),_0x39f43a,_0x0d8b('0xb'));logger[_0x0d8b('0xc')](_0x0d8b('0xd'),_0x39f43a,_0x0d8b('0xb'),JSON['stringify'](_0x348e65));if(_0x348e65[_0x0d8b('0xe')]){if(_0x348e65['error'][_0x0d8b('0xf')]===0x1f4){logger[_0x0d8b('0xe')](_0x0d8b('0xa'),_0x39f43a,_0x348e65[_0x0d8b('0xe')][_0x0d8b('0x10')]);return _0x284169(_0x348e65[_0x0d8b('0xe')][_0x0d8b('0x10')]);}logger[_0x0d8b('0xe')](_0x0d8b('0xa'),_0x39f43a,_0x348e65[_0x0d8b('0xe')][_0x0d8b('0x10')]);return _0x413284(_0x348e65[_0x0d8b('0xe')][_0x0d8b('0x10')]);}else{logger[_0x0d8b('0x9')]('Disposition,\x20%s,\x20%s',_0x39f43a,_0x0d8b('0xb'));_0x413284(_0x348e65[_0x0d8b('0x11')][_0x0d8b('0x10')]);}})[_0x0d8b('0x12')](function(_0x2cb03c){logger['error'](_0x0d8b('0xa'),_0x39f43a,_0x2cb03c);_0x284169(_0x2cb03c);});});}
\ No newline at end of file
+var _0x58a4=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','Disposition,\x20%s,\x20%s','request\x20sent','debug','Disposition,\x20%s,\x20%s,\x20%s','error','message','info','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils'];(function(_0x5d3276,_0xd38063){var _0x3562f5=function(_0x5c5594){while(--_0x5c5594){_0x5d3276['push'](_0x5d3276['shift']());}};_0x3562f5(++_0xd38063);}(_0x58a4,0xbf));var _0x458a=function(_0x329a33,_0x585897){_0x329a33=_0x329a33-0x0;var _0x2bef80=_0x58a4[_0x329a33];return _0x2bef80;};'use strict';var _=require(_0x458a('0x0'));var util=require(_0x458a('0x1'));var moment=require(_0x458a('0x2'));var BPromise=require(_0x458a('0x3'));var rs=require(_0x458a('0x4'));var fs=require('fs');var db=require(_0x458a('0x5'))['db'];var utils=require(_0x458a('0x6'));var logger=require(_0x458a('0x7'))(_0x458a('0x8'));var config=require(_0x458a('0x9'));var jayson=require(_0x458a('0xa'));var client=jayson[_0x458a('0xb')][_0x458a('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x57de3c,_0x5358c2,_0x30b095){return new BPromise(function(_0x11fcaa,_0x2029bc){return client[_0x458a('0xd')](_0x57de3c,_0x30b095)[_0x458a('0xe')](function(_0x55bf10){logger['info'](_0x458a('0xf'),_0x5358c2,_0x458a('0x10'));logger[_0x458a('0x11')](_0x458a('0x12'),_0x5358c2,_0x458a('0x10'),JSON['stringify'](_0x55bf10));if(_0x55bf10[_0x458a('0x13')]){if(_0x55bf10[_0x458a('0x13')]['code']===0x1f4){logger[_0x458a('0x13')](_0x458a('0xf'),_0x5358c2,_0x55bf10[_0x458a('0x13')][_0x458a('0x14')]);return _0x2029bc(_0x55bf10[_0x458a('0x13')]['message']);}logger['error'](_0x458a('0xf'),_0x5358c2,_0x55bf10['error'][_0x458a('0x14')]);return _0x11fcaa(_0x55bf10[_0x458a('0x13')][_0x458a('0x14')]);}else{logger[_0x458a('0x15')](_0x458a('0xf'),_0x5358c2,_0x458a('0x10'));_0x11fcaa(_0x55bf10['result']['message']);}})['catch'](function(_0x2faf6a){logger[_0x458a('0x13')](_0x458a('0xf'),_0x5358c2,_0x2faf6a);_0x2029bc(_0x2faf6a);});});}
\ No newline at end of file
index 414de44..e2b2bd3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb69f=['exports','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/:id','isAuthenticated','show','create','put','update','delete','destroy'];(function(_0x30faf7,_0x1b8e7c){var _0x41170e=function(_0x584dd5){while(--_0x584dd5){_0x30faf7['push'](_0x30faf7['shift']());}};_0x41170e(++_0x1b8e7c);}(_0xb69f,0x166));var _0xfb69=function(_0x14f216,_0x29cea1){_0x14f216=_0x14f216-0x0;var _0x2dbeeb=_0xb69f[_0x14f216];return _0x2dbeeb;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xfb69('0x0'));var express=require(_0xfb69('0x1'));var router=express[_0xfb69('0x2')]();var auth=require(_0xfb69('0x3'));var interaction=require(_0xfb69('0x4'));var config=require(_0xfb69('0x5'));var controller=require('./disposition.controller');router[_0xfb69('0x6')]('/',auth['isAuthenticated'](),controller[_0xfb69('0x7')]);router[_0xfb69('0x6')](_0xfb69('0x8'),auth[_0xfb69('0x9')](),controller[_0xfb69('0xa')]);router['post']('/',auth[_0xfb69('0x9')](),controller[_0xfb69('0xb')]);router[_0xfb69('0xc')](_0xfb69('0x8'),auth[_0xfb69('0x9')](),controller[_0xfb69('0xd')]);router[_0xfb69('0xe')]('/:id',auth[_0xfb69('0x9')](),controller[_0xfb69('0xf')]);module[_0xfb69('0x10')]=router;
\ No newline at end of file
+var _0xfac2=['destroy','exports','multer','path','../../components/auth/service','../../config/environment','./disposition.controller','get','isAuthenticated','index','/:id','create','put','update','delete'];(function(_0x1b0886,_0x7d4f2){var _0x3b9f02=function(_0x4118e1){while(--_0x4118e1){_0x1b0886['push'](_0x1b0886['shift']());}};_0x3b9f02(++_0x7d4f2);}(_0xfac2,0x16a));var _0x2fac=function(_0x1e2bd6,_0x2020d0){_0x1e2bd6=_0x1e2bd6-0x0;var _0x3c54c1=_0xfac2[_0x1e2bd6];return _0x3c54c1;};'use strict';var multer=require(_0x2fac('0x0'));var util=require('util');var path=require(_0x2fac('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0x2fac('0x2'));var interaction=require('../../components/interaction/service');var config=require(_0x2fac('0x3'));var controller=require(_0x2fac('0x4'));router[_0x2fac('0x5')]('/',auth[_0x2fac('0x6')](),controller[_0x2fac('0x7')]);router[_0x2fac('0x5')](_0x2fac('0x8'),auth[_0x2fac('0x6')](),controller['show']);router['post']('/',auth['isAuthenticated'](),controller[_0x2fac('0x9')]);router[_0x2fac('0xa')]('/:id',auth[_0x2fac('0x6')](),controller[_0x2fac('0xb')]);router[_0x2fac('0xc')](_0x2fac('0x8'),auth[_0x2fac('0x6')](),controller[_0x2fac('0xd')]);module[_0x2fac('0xe')]=router;
\ No newline at end of file
index 24796d4..5f62ee0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ba2=['9600','12000','2400','14400','v17,v27,v29','INTEGER','SIP','IAX','TEXT','BOOLEAN','sequelize','STRING','ENUM','yes','xCALLY\x20Motion\x20Fax','localstationid','4800'];(function(_0x282a1f,_0x49a6ef){var _0x296ea7=function(_0x4bac68){while(--_0x4bac68){_0x282a1f['push'](_0x282a1f['shift']());}};_0x296ea7(++_0x49a6ef);}(_0x1ba2,0xb4));var _0x21ba=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x1ba2[_0x14add3];return _0x4a174f;};'use strict';var Sequelize=require(_0x21ba('0x0'));module['exports']={'name':{'type':Sequelize[_0x21ba('0x1')],'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize['STRING']},'ecm':{'type':Sequelize[_0x21ba('0x2')](_0x21ba('0x3'),'no'),'defaultValue':_0x21ba('0x3')},'headerinfo':{'type':Sequelize[_0x21ba('0x1')],'defaultValue':_0x21ba('0x4')},'localstationid':{'type':Sequelize['STRING'],'unique':_0x21ba('0x5')},'minrate':{'type':Sequelize[_0x21ba('0x2')]('2400',_0x21ba('0x6'),'7200',_0x21ba('0x7'),_0x21ba('0x8'),'14400'),'defaultValue':_0x21ba('0x6')},'maxrate':{'type':Sequelize['ENUM'](_0x21ba('0x9'),_0x21ba('0x6'),'7200',_0x21ba('0x7'),_0x21ba('0x8'),_0x21ba('0xa')),'defaultValue':_0x21ba('0xa')},'modem':{'type':Sequelize[_0x21ba('0x1')],'defaultValue':_0x21ba('0xb')},'gateway':{'type':Sequelize[_0x21ba('0x1')],'defaultValue':'no','validate':{'is':/^(?:yes|no|[0-9]+)$/}},'faxdetect':{'type':Sequelize[_0x21ba('0x1')],'defaultValue':'no','validate':{'is':/^(?:yes|no|t38|cng|[0-9]+)$/}},'t38timeout':{'type':Sequelize[_0x21ba('0xc')],'defaultValue':0x1388,'validate':{'min':0x3e8}},'tech':{'type':Sequelize[_0x21ba('0x2')](_0x21ba('0xd'),_0x21ba('0xe'),'DADHI','KHOMP'),'defaultValue':_0x21ba('0xd')},'key':{'type':Sequelize[_0x21ba('0x1')],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0x21ba('0xf')],'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[_0x21ba('0x10')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0x21ba('0x10')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x21ba('0x10')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x21ba('0xc')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c}};
\ No newline at end of file
+var _0x67ed=['4800','12000','14400','v17,v27,v29','INTEGER','IAX','DADHI','KHOMP','SIP','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','BOOLEAN','exports','STRING','yes','xCALLY\x20Motion\x20Fax','localstationid','ENUM','2400','7200','9600'];(function(_0x531e5b,_0x3ef763){var _0x4de892=function(_0x4d29d2){while(--_0x4d29d2){_0x531e5b['push'](_0x531e5b['shift']());}};_0x4de892(++_0x3ef763);}(_0x67ed,0xde));var _0xd67e=function(_0x2efb1a,_0x529ed4){_0x2efb1a=_0x2efb1a-0x0;var _0x3e20ee=_0x67ed[_0x2efb1a];return _0x3e20ee;};'use strict';var Sequelize=require('sequelize');module[_0xd67e('0x0')]={'name':{'type':Sequelize[_0xd67e('0x1')],'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0xd67e('0x1')]},'ecm':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':_0xd67e('0x2')},'headerinfo':{'type':Sequelize[_0xd67e('0x1')],'defaultValue':_0xd67e('0x3')},'localstationid':{'type':Sequelize[_0xd67e('0x1')],'unique':_0xd67e('0x4')},'minrate':{'type':Sequelize[_0xd67e('0x5')](_0xd67e('0x6'),'4800',_0xd67e('0x7'),_0xd67e('0x8'),'12000','14400'),'defaultValue':_0xd67e('0x9')},'maxrate':{'type':Sequelize[_0xd67e('0x5')](_0xd67e('0x6'),_0xd67e('0x9'),'7200',_0xd67e('0x8'),_0xd67e('0xa'),'14400'),'defaultValue':_0xd67e('0xb')},'modem':{'type':Sequelize[_0xd67e('0x1')],'defaultValue':_0xd67e('0xc')},'gateway':{'type':Sequelize[_0xd67e('0x1')],'defaultValue':'no','validate':{'is':/^(?:yes|no|[0-9]+)$/}},'faxdetect':{'type':Sequelize['STRING'],'defaultValue':'no','validate':{'is':/^(?:yes|no|t38|cng|[0-9]+)$/}},'t38timeout':{'type':Sequelize[_0xd67e('0xd')],'defaultValue':0x1388,'validate':{'min':0x3e8}},'tech':{'type':Sequelize['ENUM']('SIP',_0xd67e('0xe'),_0xd67e('0xf'),_0xd67e('0x10')),'defaultValue':_0xd67e('0x11')},'key':{'type':Sequelize[_0xd67e('0x1')],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0xd67e('0x12')],'defaultValue':function(){return _0xd67e('0x13');}},'notificationSound':{'type':Sequelize[_0xd67e('0x14')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xd67e('0x14')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0xd67e('0xd')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xd67e('0x14')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xd67e('0xd')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xd67e('0x14')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xd67e('0xd')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c}};
\ No newline at end of file
index 10e7772..c96d4f6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd40=['end','stack','FaxAccount','rawAttributes','model','keys','dateStart','dateEnd','query','filters','intersection','attributes','fields','length','nolimit','limit','sort','pick','add','day','merge','filter','where','map','options','includeAll','include','catch','show','params','find','create','body','describe','addDisposition','FaxAccountId','Disposition','findOne','hasOwnProperty','findAll','rows','removeDispositions','ids','addAnswer','CannedAnswer','removeAnswers','addInteraction','FaxInteraction','getInteractions','order','CmContact','Contact','User','Owner','name','fullname','internal','Tag','tag','transaction','FaxApplication','destroy','findAndCountAll','priority','getApplications','context','from-voip-provider','exten','app','type','system','Fax\x20Extension','push','Answer','CDR(type)=inbound-fax','localstationid','gateway','minrate','modem','FAXOPT(','Set','Wait','/var/opt/motion2/server/files/attachments/fax-${CALLERID(num)}-${CUT(UNIQUEID,.,1)}-${CUT(UNIQUEID,.,2)}-${STRFTIME(,,%C%y%m%d%H%M%S)}-rx.tif,d','addAccountApplications','sequelize','get','bulkCreate','updateAccountApplications','VoiceExtension','omit','tech','key','TrunkId','ListId','findById','getMessages','FaxMessage','$gte','split','send','CmList','List','Contacts','updatedAt','attachments','join','root','server/files/attachments','basename','CheckAfterSend','isNil','from','format','\x22%s\x22\x20<%s>','defaults','Send\x20Fax\x20failed','out','filename','user','Messages','Contact\x20not\x20found','spread','ContactId','dataValues','SendFax','SendFaxRpc,\x20%s','addAgents','userFaxAccount:save','removeAgents','isArray','emit','userFaxAccount:remove','getAgents','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','register','jayson/promise','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','sendStatus','json','count','offset','status','set','Content-Range','apply','update'];(function(_0x3b3d09,_0x2f159d){var _0x51d9f1=function(_0x36a962){while(--_0x36a962){_0x3b3d09['push'](_0x3b3d09['shift']());}};_0x51d9f1(++_0x2f159d);}(_0xcd40,0x1eb));var _0x0cd4=function(_0x183f92,_0x13326f){_0x183f92=_0x183f92-0x0;var _0x2be6f2=_0xcd40[_0x183f92];return _0x2be6f2;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x0cd4('0x0'));var moment=require(_0x0cd4('0x1'));var BPromise=require(_0x0cd4('0x2'));var Mustache=require('mustache');var util=require(_0x0cd4('0x3'));var path=require(_0x0cd4('0x4'));var sox=require(_0x0cd4('0x5'));var csv=require(_0x0cd4('0x6'));var ejs=require(_0x0cd4('0x7'));var fs=require('fs');var _=require(_0x0cd4('0x8'));var squel=require(_0x0cd4('0x9'));var crypto=require('crypto');var jsforce=require(_0x0cd4('0xa'));var deskjs=require(_0x0cd4('0xb'));var toCsv=require('to-csv');var querystring=require(_0x0cd4('0xc'));var Papa=require(_0x0cd4('0xd'));var qs=require('../../components/parsers/qs');var logger=require(_0x0cd4('0xe'))(_0x0cd4('0xf'));var utils=require(_0x0cd4('0x10'));var config=require(_0x0cd4('0x11'));var db=require(_0x0cd4('0x12'))['db'];var socket=require(_0x0cd4('0x13'))({'host':_0x0cd4('0x14'),'port':0x18eb});require('./faxAccount.socket')[_0x0cd4('0x15')](socket);var jayson=require(_0x0cd4('0x16'));var client=jayson[_0x0cd4('0x17')]['http']({'port':0x232c});var client9002=jayson['client'][_0x0cd4('0x18')]({'port':0x232a});function respondWithRpcPromise(_0x480bd5,_0xe3b6b4,_0x41441a,_0x18df02){return new BPromise(function(_0x152202,_0x32240c){var _0x42f3a1=_0x18df02||client;return _0x42f3a1[_0x0cd4('0x19')](_0x480bd5,_0x41441a)[_0x0cd4('0x1a')](function(_0x4c022b){logger[_0x0cd4('0x1b')](_0x0cd4('0x1c'),_0xe3b6b4,_0x0cd4('0x1d'));logger[_0x0cd4('0x1e')](_0x0cd4('0x1f'),_0xe3b6b4,'request\x20sent',JSON[_0x0cd4('0x20')](_0x4c022b));if(_0x4c022b[_0x0cd4('0x21')]){if(_0x4c022b[_0x0cd4('0x21')][_0x0cd4('0x22')]===0x1f4){logger[_0x0cd4('0x21')](_0x0cd4('0x1c'),_0xe3b6b4,_0x4c022b[_0x0cd4('0x21')][_0x0cd4('0x23')]);return _0x32240c(_0x4c022b[_0x0cd4('0x21')][_0x0cd4('0x23')]);}logger[_0x0cd4('0x21')](_0x0cd4('0x1c'),_0xe3b6b4,_0x4c022b[_0x0cd4('0x21')]['message']);return _0x152202(_0x4c022b[_0x0cd4('0x21')][_0x0cd4('0x23')]);}else{logger[_0x0cd4('0x1b')](_0x0cd4('0x1c'),_0xe3b6b4,_0x0cd4('0x1d'));_0x152202(_0x4c022b[_0x0cd4('0x24')][_0x0cd4('0x23')]);}})['catch'](function(_0x2b70f4){logger[_0x0cd4('0x21')](_0x0cd4('0x1c'),_0xe3b6b4,_0x2b70f4);_0x32240c(_0x2b70f4);});});}function respondWithStatusCode(_0xc7c2b1,_0x38b582){_0x38b582=_0x38b582||0xcc;return function(_0x2ac62d){if(_0x2ac62d){return _0xc7c2b1[_0x0cd4('0x25')](_0x38b582);}return _0xc7c2b1['status'](_0x38b582)['end']();};}function respondWithResult(_0x10d44c,_0x1aff57){_0x1aff57=_0x1aff57||0xc8;return function(_0x463a48){if(_0x463a48){return _0x10d44c['status'](_0x1aff57)[_0x0cd4('0x26')](_0x463a48);}};}function respondWithFilteredResult(_0x3b2e1b,_0x121140){return function(_0x3798c9){if(_0x3798c9){var _0xf29dd3=_0x3798c9[_0x0cd4('0x27')],_0xb31a24=_0x121140[_0x0cd4('0x28')],_0x2147ae=_0x121140[_0x0cd4('0x28')]+_0x121140['limit'],_0x5c9d26;if(_0x2147ae>=_0xf29dd3){_0x2147ae=_0xf29dd3;_0x5c9d26=0xc8;}else{_0x5c9d26=0xce;}_0x3b2e1b[_0x0cd4('0x29')](_0x5c9d26);return _0x3b2e1b[_0x0cd4('0x2a')](_0x0cd4('0x2b'),_0xb31a24+'-'+_0x2147ae+'/'+_0xf29dd3)[_0x0cd4('0x26')](_0x3798c9);}return null;};}function patchUpdates(_0x3893f1){return function(_0x3686b2){try{jsonpatch[_0x0cd4('0x2c')](_0x3686b2,_0x3893f1,!![]);}catch(_0x1238cc){return BPromise['reject'](_0x1238cc);}return _0x3686b2['save']();};}function saveUpdates(_0x22eee8,_0x4e197b){return function(_0x39c3bb){if(_0x39c3bb){return _0x39c3bb[_0x0cd4('0x2d')](_0x22eee8)[_0x0cd4('0x1a')](function(_0x1601ef){return _0x1601ef;});}return null;};}function removeEntity(_0x1c5e51,_0x2083f6){return function(_0x30bf15){if(_0x30bf15){return _0x30bf15['destroy']()[_0x0cd4('0x1a')](function(){_0x1c5e51[_0x0cd4('0x29')](0xcc)[_0x0cd4('0x2e')]();});}};}function handleEntityNotFound(_0x5d08cb,_0xe91b38){return function(_0xd6e2b4){if(!_0xd6e2b4){_0x5d08cb[_0x0cd4('0x25')](0x194);}return _0xd6e2b4;};}function handleError(_0x50482d,_0x24c9bd){_0x24c9bd=_0x24c9bd||0x1f4;return function(_0x510b91){logger[_0x0cd4('0x21')](_0x510b91[_0x0cd4('0x2f')]);if(_0x510b91['name']){delete _0x510b91['name'];}_0x50482d[_0x0cd4('0x29')](_0x24c9bd)['send'](_0x510b91);};}exports['index']=function(_0x470f7d,_0x1450d7){var _0x24077d={},_0x2a6a53={},_0x48d9d1={'count':0x0,'rows':[]};var _0x3c1b47=db[_0x0cd4('0x30')][_0x0cd4('0x31')];_0x2a6a53[_0x0cd4('0x32')]=_[_0x0cd4('0x33')](_0x3c1b47);var _0x2cbd5a={'dateStart':_0x470f7d['query'][_0x0cd4('0x34')],'dateEnd':_0x470f7d['query'][_0x0cd4('0x35')]};delete _0x470f7d[_0x0cd4('0x36')]['dateStart'];delete _0x470f7d[_0x0cd4('0x36')][_0x0cd4('0x35')];_0x2a6a53['query']=_[_0x0cd4('0x33')](_0x470f7d['query']);_0x2a6a53[_0x0cd4('0x37')]=_[_0x0cd4('0x38')](_0x2a6a53[_0x0cd4('0x32')],_0x2a6a53[_0x0cd4('0x36')]);_0x24077d[_0x0cd4('0x39')]=_[_0x0cd4('0x38')](_0x2a6a53['model'],qs['fields'](_0x470f7d[_0x0cd4('0x36')][_0x0cd4('0x3a')]));_0x24077d['attributes']=_0x24077d[_0x0cd4('0x39')][_0x0cd4('0x3b')]?_0x24077d['attributes']:_0x2a6a53[_0x0cd4('0x32')];if(!_0x470f7d[_0x0cd4('0x36')]['hasOwnProperty'](_0x0cd4('0x3c'))){_0x24077d[_0x0cd4('0x3d')]=qs[_0x0cd4('0x3d')](_0x470f7d[_0x0cd4('0x36')][_0x0cd4('0x3d')]);_0x24077d[_0x0cd4('0x28')]=qs['offset'](_0x470f7d['query'][_0x0cd4('0x28')]);}_0x24077d['order']=qs[_0x0cd4('0x3e')](_0x470f7d['query'][_0x0cd4('0x3e')]);_0x24077d['where']=qs['filters'](_[_0x0cd4('0x3f')](_0x470f7d[_0x0cd4('0x36')],_0x2a6a53[_0x0cd4('0x37')]));if(_0x2cbd5a[_0x0cd4('0x34')]){if(_0x2cbd5a[_0x0cd4('0x35')]){_0x2cbd5a['dateEnd']=moment(_0x2cbd5a[_0x0cd4('0x35')])[_0x0cd4('0x40')](0x1,_0x0cd4('0x41'));}else{_0x2cbd5a[_0x0cd4('0x35')]=moment(_0x2cbd5a[_0x0cd4('0x34')])[_0x0cd4('0x40')](0x1,_0x0cd4('0x41'));}_[_0x0cd4('0x42')](_0x24077d['where'],{'createdAt':{'$gte':_0x2cbd5a['dateStart'],'$lte':_0x2cbd5a[_0x0cd4('0x35')]}});}if(_0x470f7d[_0x0cd4('0x36')][_0x0cd4('0x43')]){_0x24077d[_0x0cd4('0x44')]=_[_0x0cd4('0x42')](_0x24077d['where'],{'$or':_[_0x0cd4('0x45')](_0x24077d[_0x0cd4('0x39')],function(_0x48453e){var _0x32e731={};_0x32e731[_0x48453e]={'$like':'%'+_0x470f7d['query']['filter']+'%'};return _0x32e731;})});}_0x24077d=_[_0x0cd4('0x42')]({},_0x24077d,_0x470f7d[_0x0cd4('0x46')]);var _0x359409={'where':_0x24077d['where']};return db[_0x0cd4('0x30')]['count'](_0x359409)[_0x0cd4('0x1a')](function(_0x5b9460){_0x48d9d1[_0x0cd4('0x27')]=_0x5b9460;if(_0x470f7d[_0x0cd4('0x36')][_0x0cd4('0x47')]){_0x24077d[_0x0cd4('0x48')]=[{'all':!![]}];}return db[_0x0cd4('0x30')]['findAll'](_0x24077d);})[_0x0cd4('0x1a')](function(_0x11a1c0){_0x48d9d1['rows']=_0x11a1c0;return _0x48d9d1;})[_0x0cd4('0x1a')](respondWithFilteredResult(_0x1450d7,_0x24077d))[_0x0cd4('0x49')](handleError(_0x1450d7,null));};exports[_0x0cd4('0x4a')]=function(_0x3b26de,_0x1c96f6){var _0x4df2da={'raw':![],'where':{'id':_0x3b26de[_0x0cd4('0x4b')]['id']}},_0x59f26f={};_0x59f26f[_0x0cd4('0x32')]=_['keys'](db[_0x0cd4('0x30')][_0x0cd4('0x31')]);_0x59f26f['query']=_[_0x0cd4('0x33')](_0x3b26de[_0x0cd4('0x36')]);_0x59f26f[_0x0cd4('0x37')]=_[_0x0cd4('0x38')](_0x59f26f[_0x0cd4('0x32')],_0x59f26f[_0x0cd4('0x36')]);_0x4df2da[_0x0cd4('0x39')]=_['intersection'](_0x59f26f[_0x0cd4('0x32')],qs[_0x0cd4('0x3a')](_0x3b26de['query'][_0x0cd4('0x3a')]));_0x4df2da[_0x0cd4('0x39')]=_0x4df2da[_0x0cd4('0x39')][_0x0cd4('0x3b')]?_0x4df2da['attributes']:_0x59f26f[_0x0cd4('0x32')];if(_0x3b26de[_0x0cd4('0x36')][_0x0cd4('0x47')]){_0x4df2da[_0x0cd4('0x48')]=[{'all':!![]}];}_0x4df2da=_[_0x0cd4('0x42')]({},_0x4df2da,_0x3b26de[_0x0cd4('0x46')]);return db[_0x0cd4('0x30')][_0x0cd4('0x4c')](_0x4df2da)['then'](handleEntityNotFound(_0x1c96f6,null))[_0x0cd4('0x1a')](respondWithResult(_0x1c96f6,null))['catch'](handleError(_0x1c96f6,null));};exports[_0x0cd4('0x4d')]=function(_0x49022a,_0x13a958){return db[_0x0cd4('0x30')][_0x0cd4('0x4d')](_0x49022a[_0x0cd4('0x4e')],{})[_0x0cd4('0x1a')](respondWithResult(_0x13a958,0xc9))[_0x0cd4('0x49')](handleError(_0x13a958,null));};exports[_0x0cd4('0x2d')]=function(_0x4a6fb1,_0x5663fe){if(_0x4a6fb1[_0x0cd4('0x4e')]['id']){delete _0x4a6fb1[_0x0cd4('0x4e')]['id'];}return db[_0x0cd4('0x30')][_0x0cd4('0x4c')]({'where':{'id':_0x4a6fb1[_0x0cd4('0x4b')]['id']}})['then'](handleEntityNotFound(_0x5663fe,null))[_0x0cd4('0x1a')](saveUpdates(_0x4a6fb1[_0x0cd4('0x4e')],null))[_0x0cd4('0x1a')](respondWithResult(_0x5663fe,null))[_0x0cd4('0x49')](handleError(_0x5663fe,null));};exports['destroy']=function(_0x1306e1,_0xa039f0){return db['FaxAccount'][_0x0cd4('0x4c')]({'where':{'id':_0x1306e1[_0x0cd4('0x4b')]['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0xa039f0,null))[_0x0cd4('0x1a')](removeEntity(_0xa039f0,null))['catch'](handleError(_0xa039f0,null));};exports[_0x0cd4('0x4f')]=function(_0x1f6f27,_0xd9520e){return db[_0x0cd4('0x30')][_0x0cd4('0x4f')]()[_0x0cd4('0x1a')](respondWithResult(_0xd9520e,null))[_0x0cd4('0x49')](handleError(_0xd9520e,null));};exports[_0x0cd4('0x50')]=function(_0x339b21,_0x19158c,_0x27b824){if(_0x339b21[_0x0cd4('0x4e')]['id']){delete _0x339b21[_0x0cd4('0x4e')]['id'];}return db[_0x0cd4('0x30')][_0x0cd4('0x4c')]({'where':{'id':_0x339b21[_0x0cd4('0x4b')]['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x19158c,null))[_0x0cd4('0x1a')](function(_0x5b914f){if(_0x5b914f){_0x339b21[_0x0cd4('0x4e')][_0x0cd4('0x51')]=_0x5b914f['id'];return db[_0x0cd4('0x52')][_0x0cd4('0x4d')](_0x339b21[_0x0cd4('0x4e')]);}})['then'](respondWithResult(_0x19158c,null))[_0x0cd4('0x49')](handleError(_0x19158c,null));};exports['getDispositions']=function(_0xc232ca,_0x3e0c44,_0x26fa7d){var _0x15ce72={'raw':![],'where':{}};var _0x239bce={};var _0x51bd30={'count':0x0,'rows':[]};return db[_0x0cd4('0x30')][_0x0cd4('0x53')]({'where':{'id':_0xc232ca[_0x0cd4('0x4b')]['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x3e0c44,null))['then'](function(_0x46ec67){if(_0x46ec67){_0x239bce[_0x0cd4('0x32')]=_[_0x0cd4('0x33')](db[_0x0cd4('0x52')][_0x0cd4('0x31')]);_0x239bce[_0x0cd4('0x36')]=_[_0x0cd4('0x33')](_0xc232ca[_0x0cd4('0x36')]);_0x239bce[_0x0cd4('0x37')]=_['intersection'](_0x239bce['model'],_0x239bce[_0x0cd4('0x36')]);_0x15ce72[_0x0cd4('0x39')]=_[_0x0cd4('0x38')](_0x239bce['model'],qs[_0x0cd4('0x3a')](_0xc232ca['query'][_0x0cd4('0x3a')]));_0x15ce72[_0x0cd4('0x39')]=_0x15ce72[_0x0cd4('0x39')][_0x0cd4('0x3b')]?_0x15ce72['attributes']:_0x239bce[_0x0cd4('0x32')];if(!_0xc232ca[_0x0cd4('0x36')][_0x0cd4('0x54')]('nolimit')){_0x15ce72['limit']=qs['limit'](_0xc232ca['query'][_0x0cd4('0x3d')]);_0x15ce72[_0x0cd4('0x28')]=qs[_0x0cd4('0x28')](_0xc232ca[_0x0cd4('0x36')][_0x0cd4('0x28')]);}_0x15ce72['order']=qs[_0x0cd4('0x3e')](_0xc232ca[_0x0cd4('0x36')][_0x0cd4('0x3e')]);_0x15ce72[_0x0cd4('0x44')]=qs['filters'](_[_0x0cd4('0x3f')](_0xc232ca['query'],_0x239bce[_0x0cd4('0x37')]));_0x15ce72[_0x0cd4('0x44')]['FaxAccountId']=_0x46ec67['id'];if(_0xc232ca[_0x0cd4('0x36')]['filter']){_0x15ce72['where']=_['merge'](_0x15ce72[_0x0cd4('0x44')],{'$or':_[_0x0cd4('0x45')](_0x15ce72[_0x0cd4('0x39')],function(_0x4d78d7){var _0x44b3d4={};_0x44b3d4[_0x4d78d7]={'$like':'%'+_0xc232ca[_0x0cd4('0x36')]['filter']+'%'};return _0x44b3d4;})});}_0x15ce72=_[_0x0cd4('0x42')]({},_0x15ce72,_0xc232ca[_0x0cd4('0x46')]);return db[_0x0cd4('0x52')][_0x0cd4('0x27')]({'where':_0x15ce72[_0x0cd4('0x44')]})[_0x0cd4('0x1a')](function(_0x30cdc9){_0x51bd30['count']=_0x30cdc9;if(_0xc232ca[_0x0cd4('0x36')]['includeAll']){_0x15ce72[_0x0cd4('0x48')]=[{'all':!![]}];}return db[_0x0cd4('0x52')][_0x0cd4('0x55')](_0x15ce72);})['then'](function(_0x37ba6f){_0x51bd30[_0x0cd4('0x56')]=_0x37ba6f;return _0x51bd30;});}})[_0x0cd4('0x1a')](respondWithFilteredResult(_0x3e0c44,_0x15ce72))[_0x0cd4('0x49')](handleError(_0x3e0c44,null));};exports[_0x0cd4('0x57')]=function(_0x113a66,_0x5c2879,_0x1f7f1a){var _0x451ad1;return db[_0x0cd4('0x30')][_0x0cd4('0x4c')]({'where':{'id':_0x113a66[_0x0cd4('0x4b')]['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x5c2879,null))['then'](function(_0x13d81b){if(_0x13d81b){return _0x13d81b[_0x0cd4('0x57')](_0x113a66[_0x0cd4('0x36')][_0x0cd4('0x58')]);}})['then'](respondWithStatusCode(_0x5c2879,null))[_0x0cd4('0x49')](handleError(_0x5c2879,null));};exports[_0x0cd4('0x59')]=function(_0x47b4ac,_0x149735,_0x1b943b){if(_0x47b4ac[_0x0cd4('0x4e')]['id']){delete _0x47b4ac['body']['id'];}return db[_0x0cd4('0x30')]['find']({'where':{'id':_0x47b4ac[_0x0cd4('0x4b')]['id']}})['then'](handleEntityNotFound(_0x149735,null))[_0x0cd4('0x1a')](function(_0x12113a){if(_0x12113a){_0x47b4ac[_0x0cd4('0x4e')][_0x0cd4('0x51')]=_0x12113a['id'];return db[_0x0cd4('0x5a')][_0x0cd4('0x4d')](_0x47b4ac[_0x0cd4('0x4e')]);}})['then'](respondWithResult(_0x149735,null))['catch'](handleError(_0x149735,null));};exports['getAnswers']=function(_0x4f3a89,_0x1ddc53,_0x44edbe){var _0x4dc532={'raw':![],'where':{}};var _0x26bf63={};var _0x262aba={'count':0x0,'rows':[]};return db[_0x0cd4('0x30')][_0x0cd4('0x53')]({'where':{'id':_0x4f3a89['params']['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x1ddc53,null))[_0x0cd4('0x1a')](function(_0x531aec){if(_0x531aec){_0x26bf63[_0x0cd4('0x32')]=_['keys'](db[_0x0cd4('0x5a')][_0x0cd4('0x31')]);_0x26bf63[_0x0cd4('0x36')]=_[_0x0cd4('0x33')](_0x4f3a89[_0x0cd4('0x36')]);_0x26bf63[_0x0cd4('0x37')]=_[_0x0cd4('0x38')](_0x26bf63[_0x0cd4('0x32')],_0x26bf63[_0x0cd4('0x36')]);_0x4dc532['attributes']=_[_0x0cd4('0x38')](_0x26bf63[_0x0cd4('0x32')],qs[_0x0cd4('0x3a')](_0x4f3a89[_0x0cd4('0x36')][_0x0cd4('0x3a')]));_0x4dc532[_0x0cd4('0x39')]=_0x4dc532['attributes'][_0x0cd4('0x3b')]?_0x4dc532[_0x0cd4('0x39')]:_0x26bf63['model'];if(!_0x4f3a89['query'][_0x0cd4('0x54')](_0x0cd4('0x3c'))){_0x4dc532[_0x0cd4('0x3d')]=qs[_0x0cd4('0x3d')](_0x4f3a89[_0x0cd4('0x36')][_0x0cd4('0x3d')]);_0x4dc532[_0x0cd4('0x28')]=qs['offset'](_0x4f3a89[_0x0cd4('0x36')]['offset']);}_0x4dc532['order']=qs[_0x0cd4('0x3e')](_0x4f3a89[_0x0cd4('0x36')]['sort']);_0x4dc532[_0x0cd4('0x44')]=qs[_0x0cd4('0x37')](_[_0x0cd4('0x3f')](_0x4f3a89[_0x0cd4('0x36')],_0x26bf63[_0x0cd4('0x37')]));_0x4dc532[_0x0cd4('0x44')][_0x0cd4('0x51')]=_0x531aec['id'];if(_0x4f3a89[_0x0cd4('0x36')][_0x0cd4('0x43')]){_0x4dc532['where']=_[_0x0cd4('0x42')](_0x4dc532['where'],{'$or':_[_0x0cd4('0x45')](_0x4dc532[_0x0cd4('0x39')],function(_0x29e809){var _0x5521f1={};_0x5521f1[_0x29e809]={'$like':'%'+_0x4f3a89['query'][_0x0cd4('0x43')]+'%'};return _0x5521f1;})});}_0x4dc532=_['merge']({},_0x4dc532,_0x4f3a89['options']);return db[_0x0cd4('0x5a')][_0x0cd4('0x27')]({'where':_0x4dc532['where']})[_0x0cd4('0x1a')](function(_0x197555){_0x262aba['count']=_0x197555;if(_0x4f3a89['query']['includeAll']){_0x4dc532['include']=[{'all':!![]}];}return db[_0x0cd4('0x5a')][_0x0cd4('0x55')](_0x4dc532);})[_0x0cd4('0x1a')](function(_0x56b330){_0x262aba[_0x0cd4('0x56')]=_0x56b330;return _0x262aba;});}})['then'](respondWithFilteredResult(_0x1ddc53,_0x4dc532))[_0x0cd4('0x49')](handleError(_0x1ddc53,null));};exports[_0x0cd4('0x5b')]=function(_0x2865a9,_0x2d8e57,_0x318a08){var _0x1482fa;return db['FaxAccount']['find']({'where':{'id':_0x2865a9[_0x0cd4('0x4b')]['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x2d8e57,null))[_0x0cd4('0x1a')](function(_0x9b6226){if(_0x9b6226){return _0x9b6226[_0x0cd4('0x5b')](_0x2865a9['query'][_0x0cd4('0x58')]);}})[_0x0cd4('0x1a')](respondWithStatusCode(_0x2d8e57,null))['catch'](handleError(_0x2d8e57,null));};exports[_0x0cd4('0x5c')]=function(_0x4bd71a,_0x3f57ea,_0x5a3cc3){return db[_0x0cd4('0x5d')][_0x0cd4('0x4c')]({'where':{'id':_0x4bd71a['params']['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x3f57ea,null))[_0x0cd4('0x1a')](function(_0x4a26b8){if(_0x4a26b8){return _0x4a26b8[_0x0cd4('0x5c')](_0x4bd71a[_0x0cd4('0x4e')]['ids'],_['omit'](_0x4bd71a[_0x0cd4('0x4e')],[_0x0cd4('0x58'),'id'])||{});}})[_0x0cd4('0x1a')](respondWithResult(_0x3f57ea,null))['catch'](handleError(_0x3f57ea,null));};exports[_0x0cd4('0x5e')]=function(_0x37b941,_0x12c3ac,_0x80b7fc){var _0x3d8092={'raw':![],'where':{}};var _0x46cf99={};var _0x2452ba={'count':0x0,'rows':[]};return db[_0x0cd4('0x30')]['findOne']({'where':{'id':_0x37b941['params']['id']}})['then'](handleEntityNotFound(_0x12c3ac,null))[_0x0cd4('0x1a')](function(_0xfc151a){if(_0xfc151a){_0x46cf99[_0x0cd4('0x32')]=_['keys'](db[_0x0cd4('0x5d')][_0x0cd4('0x31')]);_0x46cf99[_0x0cd4('0x36')]=_[_0x0cd4('0x33')](_0x37b941[_0x0cd4('0x36')]);_0x46cf99[_0x0cd4('0x37')]=_[_0x0cd4('0x38')](_0x46cf99['model'],_0x46cf99[_0x0cd4('0x36')]);_0x3d8092[_0x0cd4('0x39')]=_[_0x0cd4('0x38')](_0x46cf99['model'],qs['fields'](_0x37b941[_0x0cd4('0x36')][_0x0cd4('0x3a')]));_0x3d8092[_0x0cd4('0x39')]=_0x3d8092[_0x0cd4('0x39')]['length']?_0x3d8092['attributes']:_0x46cf99[_0x0cd4('0x32')];if(!_0x37b941[_0x0cd4('0x36')][_0x0cd4('0x54')]('nolimit')){_0x3d8092[_0x0cd4('0x3d')]=qs['limit'](_0x37b941[_0x0cd4('0x36')][_0x0cd4('0x3d')]);_0x3d8092[_0x0cd4('0x28')]=qs[_0x0cd4('0x28')](_0x37b941['query'][_0x0cd4('0x28')]);}_0x3d8092[_0x0cd4('0x5f')]=qs['sort'](_0x37b941[_0x0cd4('0x36')]['sort']);_0x3d8092[_0x0cd4('0x44')]=qs[_0x0cd4('0x37')](_[_0x0cd4('0x3f')](_0x37b941[_0x0cd4('0x36')],_0x46cf99[_0x0cd4('0x37')]));_0x3d8092['where'][_0x0cd4('0x51')]=_0xfc151a['id'];if(_0x37b941[_0x0cd4('0x36')]['filter']){_0x3d8092[_0x0cd4('0x44')]=_[_0x0cd4('0x42')](_0x3d8092[_0x0cd4('0x44')],{'$or':_[_0x0cd4('0x45')](_0x3d8092[_0x0cd4('0x39')],function(_0x9e9425){var _0x96877={};_0x96877[_0x9e9425]={'$like':'%'+_0x37b941[_0x0cd4('0x36')][_0x0cd4('0x43')]+'%'};return _0x96877;})});}_0x3d8092=_['merge']({},_0x3d8092,_0x37b941['options']);return db[_0x0cd4('0x5d')][_0x0cd4('0x27')]({'where':_0x3d8092['where']})[_0x0cd4('0x1a')](function(_0x523d05){_0x2452ba[_0x0cd4('0x27')]=_0x523d05;if(_0x37b941[_0x0cd4('0x36')][_0x0cd4('0x47')]){_0x3d8092[_0x0cd4('0x48')]=[{'model':db[_0x0cd4('0x60')],'as':_0x0cd4('0x61'),'required':![]},{'model':db[_0x0cd4('0x62')],'as':_0x0cd4('0x63'),'attributes':[_0x0cd4('0x64'),_0x0cd4('0x65'),_0x0cd4('0x66')],'required':![]},{'model':db[_0x0cd4('0x67')],'as':'Tags','attributes':['id',_0x0cd4('0x64'),'color'],'where':_0x37b941[_0x0cd4('0x36')][_0x0cd4('0x68')]?{'id':_0x37b941[_0x0cd4('0x36')][_0x0cd4('0x68')]}:undefined,'required':_0x37b941[_0x0cd4('0x36')][_0x0cd4('0x68')]?!![]:![]}];}return db[_0x0cd4('0x5d')]['findAll'](_0x3d8092);})[_0x0cd4('0x1a')](function(_0x3d983c){_0x2452ba[_0x0cd4('0x56')]=_0x3d983c;return _0x2452ba;});}})['then'](respondWithFilteredResult(_0x12c3ac,_0x3d8092))[_0x0cd4('0x49')](handleError(_0x12c3ac,null));};exports['addApplications']=function(_0x528b27,_0x4db95a,_0x561275){return db[_0x0cd4('0x30')][_0x0cd4('0x53')]({'where':{'id':_0x528b27[_0x0cd4('0x4b')]['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x4db95a,null))[_0x0cd4('0x1a')](function(_0x1bd547){if(_0x1bd547){return db['sequelize'][_0x0cd4('0x69')](function(_0x46f5af){return db[_0x0cd4('0x6a')][_0x0cd4('0x6b')]({'where':{'FaxAccountId':_0x528b27[_0x0cd4('0x4b')]['id']},'transaction':_0x46f5af})[_0x0cd4('0x1a')](function(_0x4eb2ed){var _0x3ec433=_[_0x0cd4('0x45')](_0x528b27['body'],function(_0x3d21d8){_0x3d21d8[_0x0cd4('0x51')]=_0x528b27['params']['id'];return _0x3d21d8;});return db[_0x0cd4('0x6a')]['bulkCreate'](_0x3ec433,{'transaction':_0x46f5af});});})[_0x0cd4('0x1a')](function(){return db[_0x0cd4('0x6a')][_0x0cd4('0x6c')]({'where':{'FaxAccountId':_0x528b27[_0x0cd4('0x4b')]['id']},'order':_0x0cd4('0x6d')});});}})['then'](respondWithResult(_0x4db95a,null))[_0x0cd4('0x49')](handleError(_0x4db95a,null));};exports['getApplications']=function(_0x52332d,_0x1401dd,_0x25019b){var _0x248b0f={};var _0xd4857d={};var _0x3dbfbb;var _0x42eda7;return db[_0x0cd4('0x30')][_0x0cd4('0x53')]({'where':{'id':_0x52332d[_0x0cd4('0x4b')]['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x1401dd,null))[_0x0cd4('0x1a')](function(_0x988879){if(_0x988879){_0x3dbfbb=_0x988879;_0xd4857d['model']=_[_0x0cd4('0x33')](db['FaxApplication'][_0x0cd4('0x31')]);_0xd4857d[_0x0cd4('0x36')]=_[_0x0cd4('0x33')](_0x52332d['query']);_0xd4857d['filters']=_[_0x0cd4('0x38')](_0xd4857d[_0x0cd4('0x32')],_0xd4857d['query']);_0x248b0f['attributes']=_[_0x0cd4('0x38')](_0xd4857d[_0x0cd4('0x32')],qs['fields'](_0x52332d[_0x0cd4('0x36')][_0x0cd4('0x3a')]));_0x248b0f[_0x0cd4('0x39')]=_0x248b0f[_0x0cd4('0x39')][_0x0cd4('0x3b')]?_0x248b0f['attributes']:_0xd4857d[_0x0cd4('0x32')];_0x248b0f[_0x0cd4('0x5f')]=qs[_0x0cd4('0x3e')](_0x52332d[_0x0cd4('0x36')]['sort']);_0x248b0f['where']=qs[_0x0cd4('0x37')](_[_0x0cd4('0x3f')](_0x52332d[_0x0cd4('0x36')],_0xd4857d['filters']));if(_0x52332d[_0x0cd4('0x36')]['filter']){_0x248b0f[_0x0cd4('0x44')]=_[_0x0cd4('0x42')](_0x248b0f[_0x0cd4('0x44')],{'$or':_[_0x0cd4('0x45')](_0x248b0f['attributes'],function(_0x310b25){var _0x511e2e={};_0x511e2e[_0x310b25]={'$like':'%'+_0x52332d[_0x0cd4('0x36')][_0x0cd4('0x43')]+'%'};return _0x511e2e;})});}_0x248b0f=_[_0x0cd4('0x42')]({},_0x248b0f,_0x52332d[_0x0cd4('0x46')]);return _0x3dbfbb['getApplications'](_0x248b0f);}})[_0x0cd4('0x1a')](function(_0x446f12){if(_0x446f12){_0x42eda7=_0x446f12[_0x0cd4('0x3b')];if(!_0x52332d[_0x0cd4('0x36')]['hasOwnProperty'](_0x0cd4('0x3c'))){_0x248b0f[_0x0cd4('0x3d')]=qs[_0x0cd4('0x3d')](_0x52332d[_0x0cd4('0x36')][_0x0cd4('0x3d')]);_0x248b0f['offset']=qs[_0x0cd4('0x28')](_0x52332d['query'][_0x0cd4('0x28')]);}return _0x3dbfbb[_0x0cd4('0x6e')](_0x248b0f);}})['then'](function(_0x5a881d){if(_0x5a881d){return _0x5a881d?{'count':_0x42eda7,'rows':_0x5a881d}:null;}})[_0x0cd4('0x1a')](respondWithResult(_0x1401dd,null))['catch'](handleError(_0x1401dd,null));};function Extension(_0x2f5c41,_0x222d68,_0x327726,_0x11126f){this[_0x0cd4('0x6f')]=_0x0cd4('0x70');this[_0x0cd4('0x71')]=_0x2f5c41['localstationid'];this[_0x0cd4('0x72')]=_0x11126f;this[_0x0cd4('0x73')]=_0x0cd4('0x74');this['description']=_0x0cd4('0x75');this[_0x0cd4('0x51')]=_0x2f5c41['id'];this[_0x0cd4('0x6d')]=_0x222d68;this['appdata']=_0x327726;}function createExtensionsReciveFax(_0x370d02){var _0x2fcf79=0x1;var _0x19a0b3=[];_0x19a0b3[_0x0cd4('0x76')](new Extension(_0x370d02,_0x2fcf79,'',_0x0cd4('0x77')));_0x2fcf79+=0x1;_0x19a0b3['push'](new Extension(_0x370d02,_0x2fcf79,_0x0cd4('0x78'),'Set'));_0x2fcf79+=0x1;for(var _0xf1d1e in _0x370d02){if(_0x370d02[_0x0cd4('0x54')](_0xf1d1e)&&(_0xf1d1e==='ecm'||_0xf1d1e===_0x0cd4('0x79')||_0xf1d1e===_0x0cd4('0x7a')||_0xf1d1e==='faxdetect'||_0xf1d1e==='headerinfo'||_0xf1d1e==='maxrate'||_0xf1d1e===_0x0cd4('0x7b')||_0xf1d1e===_0x0cd4('0x7c')||_0xf1d1e==='t38timeout')){_0x19a0b3[_0x0cd4('0x76')](new Extension(_0x370d02,_0x2fcf79,_0x0cd4('0x7d')+_0xf1d1e+')='+_0x370d02[_0xf1d1e],_0x0cd4('0x7e')));_0x2fcf79+=0x1;}}_0x19a0b3[_0x0cd4('0x76')](new Extension(_0x370d02,_0x2fcf79,'6',_0x0cd4('0x7f')));_0x2fcf79+=0x1;_0x19a0b3[_0x0cd4('0x76')](new Extension(_0x370d02,_0x2fcf79,_0x0cd4('0x80'),'ReceiveFax'));_0x2fcf79=0x0;return _0x19a0b3;}exports[_0x0cd4('0x81')]=function(_0x401a64,_0x30c078,_0x56c82d){var _0xeeee29;return db[_0x0cd4('0x82')][_0x0cd4('0x69')](function(_0x1f94db){return db[_0x0cd4('0x30')][_0x0cd4('0x4d')](_0x401a64['body'],{'transaction':_0x1f94db})[_0x0cd4('0x1a')](function(_0x5c4e0d){_0xeeee29=_0x5c4e0d[_0x0cd4('0x83')]({'plain':!![]});return db['VoiceExtension'][_0x0cd4('0x84')](createExtensionsReciveFax(_0xeeee29),{'transaction':_0x1f94db});});})[_0x0cd4('0x1a')](function(){return _0xeeee29;})[_0x0cd4('0x1a')](respondWithResult(_0x30c078,null))['catch'](handleError(_0x30c078,null));};exports[_0x0cd4('0x85')]=function(_0x5a9336,_0x315a13,_0x5d18cf){var _0x299ab2;return db[_0x0cd4('0x82')][_0x0cd4('0x69')](function(_0xac1a81){return db[_0x0cd4('0x30')][_0x0cd4('0x2d')](_0x5a9336[_0x0cd4('0x4e')],{'where':{'id':_0x5a9336[_0x0cd4('0x4e')]['id']},'transaction':_0xac1a81})['then'](function(_0x55f255){return db[_0x0cd4('0x86')][_0x0cd4('0x6b')]({'where':{'FaxAccountId':_0x5a9336[_0x0cd4('0x4e')]['id']},'transaction':_0xac1a81})[_0x0cd4('0x1a')](function(_0xed88ba){return db[_0x0cd4('0x86')][_0x0cd4('0x84')](createExtensionsReciveFax(_[_0x0cd4('0x87')](_0x5a9336[_0x0cd4('0x4e')],[_0x0cd4('0x88'),_0x0cd4('0x89'),'createdAt','updatedAt',_0x0cd4('0x8a'),_0x0cd4('0x8b')])),{'transaction':_0xac1a81});});});})[_0x0cd4('0x1a')](function(){return db[_0x0cd4('0x30')][_0x0cd4('0x8c')](_0x5a9336[_0x0cd4('0x4e')]['id']);})[_0x0cd4('0x1a')](respondWithResult(_0x315a13,null))[_0x0cd4('0x49')](handleError(_0x315a13,null));};exports[_0x0cd4('0x8d')]=function(_0x7a1ed3,_0x50fa5e,_0x212685){var _0x3df1ca={'raw':!![],'where':{}};var _0x154007={};var _0xfc6004={'count':0x0,'rows':[]};return db[_0x0cd4('0x30')][_0x0cd4('0x53')]({'where':{'id':_0x7a1ed3['params']['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x50fa5e,null))[_0x0cd4('0x1a')](function(_0x5758b1){if(_0x5758b1){_0x154007[_0x0cd4('0x32')]=_[_0x0cd4('0x33')](db[_0x0cd4('0x8e')]['rawAttributes']);_0x154007[_0x0cd4('0x36')]=_[_0x0cd4('0x33')](_0x7a1ed3[_0x0cd4('0x36')]);_0x154007[_0x0cd4('0x37')]=_[_0x0cd4('0x38')](_0x154007[_0x0cd4('0x32')],_0x154007[_0x0cd4('0x36')]);_0x3df1ca[_0x0cd4('0x39')]=_[_0x0cd4('0x38')](_0x154007[_0x0cd4('0x32')],qs[_0x0cd4('0x3a')](_0x7a1ed3['query'][_0x0cd4('0x3a')]));_0x3df1ca[_0x0cd4('0x39')]=_0x3df1ca['attributes'][_0x0cd4('0x3b')]?_0x3df1ca[_0x0cd4('0x39')]:_0x154007['model'];if(!_0x7a1ed3[_0x0cd4('0x36')]['hasOwnProperty']('nolimit')){_0x3df1ca[_0x0cd4('0x3d')]=qs['limit'](_0x7a1ed3[_0x0cd4('0x36')][_0x0cd4('0x3d')]);_0x3df1ca[_0x0cd4('0x28')]=qs[_0x0cd4('0x28')](_0x7a1ed3[_0x0cd4('0x36')][_0x0cd4('0x28')]);}_0x3df1ca[_0x0cd4('0x5f')]=qs[_0x0cd4('0x3e')](_0x7a1ed3['query'][_0x0cd4('0x3e')]);_0x3df1ca['where']=qs[_0x0cd4('0x37')](_[_0x0cd4('0x3f')](_0x7a1ed3[_0x0cd4('0x36')],_0x154007[_0x0cd4('0x37')]));_0x3df1ca['where'][_0x0cd4('0x51')]=_0x5758b1['id'];if(_0x7a1ed3[_0x0cd4('0x36')][_0x0cd4('0x43')]){_0x3df1ca['where']=_[_0x0cd4('0x42')](_0x3df1ca[_0x0cd4('0x44')],{'$or':_[_0x0cd4('0x45')](_0x3df1ca[_0x0cd4('0x39')],function(_0x2a86f4){var _0x488dd3={};_0x488dd3[_0x2a86f4]={'$like':'%'+_0x7a1ed3['query'][_0x0cd4('0x43')]+'%'};return _0x488dd3;})});}if(_0x7a1ed3[_0x0cd4('0x36')][_0x0cd4('0x8f')]){var _0x4beb79=_0x7a1ed3[_0x0cd4('0x36')]['$gte'][_0x0cd4('0x90')](',');var _0x5862fc={};_0x5862fc[_0x4beb79[0x0]]={'$gte':moment(_0x4beb79[0x1])['format']('YYYY-MM-DD\x20HH:mm:ss')};_0x3df1ca[_0x0cd4('0x44')]=_[_0x0cd4('0x42')](_0x3df1ca[_0x0cd4('0x44')],_0x5862fc);}_0x3df1ca=_[_0x0cd4('0x42')]({},_0x3df1ca,_0x7a1ed3[_0x0cd4('0x46')]);return db[_0x0cd4('0x8e')][_0x0cd4('0x27')]({'where':_0x3df1ca[_0x0cd4('0x44')]})[_0x0cd4('0x1a')](function(_0x423162){_0xfc6004[_0x0cd4('0x27')]=_0x423162;if(_0x7a1ed3['query']['includeAll']){_0x3df1ca[_0x0cd4('0x48')]=[{'all':!![]}];}return db[_0x0cd4('0x8e')]['findAll'](_0x3df1ca);})[_0x0cd4('0x1a')](function(_0x5837d5){_0xfc6004['rows']=_0x5837d5;return _0xfc6004;});}})['then'](respondWithFilteredResult(_0x50fa5e,_0x3df1ca))[_0x0cd4('0x49')](handleError(_0x50fa5e,null));};exports[_0x0cd4('0x91')]=function(_0x256780,_0x3ee27c,_0xb3e86f){var _0x32daa3,_0x6659c6={},_0x31c680;if(_0x256780[_0x0cd4('0x4e')]['to']){_0x31c680=_0x256780[_0x0cd4('0x4e')]['to'][0x0];}return db['FaxAccount'][_0x0cd4('0x4c')]({'where':{'id':_0x256780['params']['id']},'include':[{'model':db[_0x0cd4('0x92')],'as':_0x0cd4('0x93'),'include':[{'model':db['CmContact'],'as':_0x0cd4('0x94'),'where':{'fax':_0x31c680},'limit':0x1,'order':[[_0x0cd4('0x95'),'DESC']]}]}]})[_0x0cd4('0x1a')](handleEntityNotFound(_0x3ee27c,null))[_0x0cd4('0x1a')](function(_0x1aaba9){_0x32daa3=_0x1aaba9;if(_0x256780['body']['attachments']&&_0x256780[_0x0cd4('0x4e')][_0x0cd4('0x96')][_0x0cd4('0x3b')]){for(var _0x39b26c=0x0;_0x39b26c<_0x256780['body'][_0x0cd4('0x96')][_0x0cd4('0x3b')];_0x39b26c+=0x1){_0x256780[_0x0cd4('0x4e')][_0x0cd4('0x96')][_0x39b26c]={'filename':_0x256780[_0x0cd4('0x4e')][_0x0cd4('0x96')][_0x39b26c][_0x0cd4('0x64')],'id':_0x256780[_0x0cd4('0x4e')]['attachments'][_0x39b26c]['id'],'path':path[_0x0cd4('0x97')](config[_0x0cd4('0x98')],_0x0cd4('0x99'),_0x256780['body']['attachments'][_0x39b26c][_0x0cd4('0x9a')])};}}return respondWithRpcPromise(_0x0cd4('0x9b'),_0x0cd4('0x9b'),{'FaxAccountId':_['isNil'](_0x256780[_0x0cd4('0x4b')]['id'])?undefined:_0x256780[_0x0cd4('0x4b')]['id'],'path':_[_0x0cd4('0x9c')](_0x256780['body'][_0x0cd4('0x96')][0x0][_0x0cd4('0x4')])?undefined:_0x256780[_0x0cd4('0x4e')][_0x0cd4('0x96')][0x0]['path'],'fax':_[_0x0cd4('0x9c')](_0x256780[_0x0cd4('0x4e')]['to'][0x0])?undefined:_0x256780[_0x0cd4('0x4e')]['to'][0x0]},client9002);})['then'](function(){if(_0x32daa3){if(_[_0x0cd4('0x9c')](_0x256780[_0x0cd4('0x4e')]['from'])){_0x256780[_0x0cd4('0x4e')][_0x0cd4('0x9d')]=util[_0x0cd4('0x9e')](_0x0cd4('0x9f'),_0x32daa3[_0x0cd4('0x64')],_0x32daa3['fax']);}if(_0x32daa3[_0x0cd4('0x93')]){if(_0x32daa3[_0x0cd4('0x93')]['Contacts'][_0x0cd4('0x3b')]){return _0x32daa3[_0x0cd4('0x93')][_0x0cd4('0x94')][0x0];}else{return db['CmContact']['create'](_[_0x0cd4('0xa0')](_0x256780[_0x0cd4('0x4e')],{'firstName':_0x256780[_0x0cd4('0x4e')]['to'][0x0],'phone':_0x256780[_0x0cd4('0x4e')]['to'][0x0],'fax':_0x256780[_0x0cd4('0x4e')]['to'][0x0],'ListId':_0x32daa3['ListId']}));}}else{throw new Error('List\x20not\x20found');}}else{throw new Error(_0x0cd4('0xa1'));}})[_0x0cd4('0x1a')](function(_0xdd6e02){if(_0xdd6e02){return db['FaxInteraction'][_0x0cd4('0x4c')]({'where':{'ContactId':_0xdd6e02['id'],'closed':![],'FaxAccountId':_0x32daa3['id']}})[_0x0cd4('0x1a')](function(_0x50bd8f){if(_0x50bd8f){return[_0x50bd8f,![]];}return db[_0x0cd4('0x5d')][_0x0cd4('0x4d')]({'UserId':_0x256780['user']['id'],'ContactId':_0xdd6e02['id'],'FaxAccountId':_0x32daa3['id'],'fax':_0x256780[_0x0cd4('0x4e')]['to'][0x0],'firstMsgDirection':_0x0cd4('0xa2'),'Messages':[_['merge'](_0x256780[_0x0cd4('0x4e')],{'read':![],'body':_0x256780[_0x0cd4('0x4e')][_0x0cd4('0x96')][0x0][_0x0cd4('0xa3')],'FaxAccountId':_0x32daa3['id'],'UserId':_0x256780[_0x0cd4('0xa4')]['id'],'ContactId':_0xdd6e02['id'],'AttachmentId':_0x256780[_0x0cd4('0x4e')][_0x0cd4('0x96')][0x0]['id']})]},{'include':[{'model':db[_0x0cd4('0x8e')],'as':_0x0cd4('0xa5')}]})[_0x0cd4('0x1a')](function(_0x5e036c){return[_0x5e036c,!![]];});});}else{throw new Error(_0x0cd4('0xa6'));}})[_0x0cd4('0xa7')](function(_0x38ced6,_0x878bea){if(_0x878bea){return _0x38ced6;}return db[_0x0cd4('0x8e')][_0x0cd4('0x4d')]({'direction':'out','read':![],'body':_0x256780[_0x0cd4('0x4e')]['attachments'][0x0][_0x0cd4('0xa3')],'FaxAccountId':_0x32daa3['id'],'FaxInteractionId':_0x38ced6['id'],'UserId':_0x256780[_0x0cd4('0xa4')]['id'],'ContactId':_0x38ced6[_0x0cd4('0xa8')],'AttachmentId':_0x256780[_0x0cd4('0x4e')][_0x0cd4('0x96')][0x0]['id']})[_0x0cd4('0x1a')](function(_0x27bce4){_0x38ced6[_0x0cd4('0xa9')][_0x0cd4('0xa5')]=[];_0x38ced6[_0x0cd4('0xa9')][_0x0cd4('0xa5')][_0x0cd4('0x76')](_0x27bce4[_0x0cd4('0xa9')]);return _0x38ced6;});})[_0x0cd4('0x1a')](function(_0x342ab3){respondWithRpcPromise(_0x0cd4('0xaa'),_0x0cd4('0xaa'),{'FaxAccountId':_['isNil'](_0x256780['params']['id'])?undefined:_0x256780['params']['id'],'path':_[_0x0cd4('0x9c')](_0x256780[_0x0cd4('0x4e')][_0x0cd4('0x96')][0x0][_0x0cd4('0x4')])?undefined:_0x256780[_0x0cd4('0x4e')][_0x0cd4('0x96')][0x0][_0x0cd4('0x4')],'fax':_[_0x0cd4('0x9c')](_0x256780['body']['to'][0x0])?undefined:_0x256780[_0x0cd4('0x4e')]['to'][0x0],'AttachmentId':_0x256780['body'][_0x0cd4('0x96')][0x0]['id']},client9002)[_0x0cd4('0x1a')](function(_0x4949b0){logger[_0x0cd4('0x1b')](_0x0cd4('0xab'),_0x4949b0);})[_0x0cd4('0x49')](function(_0x4f3ef4){logger['info'](_0x0cd4('0xab'),_0x4f3ef4);});return _0x342ab3;})[_0x0cd4('0x1a')](respondWithResult(_0x3ee27c,null))[_0x0cd4('0x49')](handleError(_0x3ee27c,null));};exports[_0x0cd4('0xac')]=function(_0x5c4316,_0x48e767,_0x15a56c){return db['FaxAccount'][_0x0cd4('0x4c')]({'where':{'id':_0x5c4316[_0x0cd4('0x4b')]['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x48e767,null))['then'](function(_0x57b4eb){if(_0x57b4eb){return _0x57b4eb[_0x0cd4('0xac')](_0x5c4316[_0x0cd4('0x4e')][_0x0cd4('0x58')],_['omit'](_0x5c4316[_0x0cd4('0x4e')],[_0x0cd4('0x58'),'id'])||{})[_0x0cd4('0xa7')](function(_0x512013){for(var _0x1bc1a7=0x0;_0x1bc1a7<_0x5c4316['body']['ids'][_0x0cd4('0x3b')];_0x1bc1a7+=0x1){socket['emit'](_0x0cd4('0xad'),{'UserId':_0x5c4316[_0x0cd4('0x4e')][_0x0cd4('0x58')][_0x1bc1a7],'FaxAccountId':_0x5c4316[_0x0cd4('0x4b')]['id']});}return _0x512013;});}})[_0x0cd4('0x1a')](respondWithResult(_0x48e767,null))[_0x0cd4('0x49')](handleError(_0x48e767,null));};exports['removeAgents']=function(_0x2ed0ba,_0x17988d,_0xfb8fad){var _0x2dafc7;return db[_0x0cd4('0x30')][_0x0cd4('0x4c')]({'where':{'id':_0x2ed0ba['params']['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x17988d,null))[_0x0cd4('0x1a')](function(_0x452245){if(_0x452245){return _0x452245[_0x0cd4('0xae')](_0x2ed0ba['query'][_0x0cd4('0x58')])[_0x0cd4('0x1a')](function(_0x4f0a16){if(_[_0x0cd4('0xaf')](_0x2ed0ba['query'][_0x0cd4('0x58')])){for(var _0x1d99d9=0x0;_0x1d99d9<_0x2ed0ba['query']['ids']['length'];_0x1d99d9+=0x1){socket[_0x0cd4('0xb0')]('userFaxAccount:remove',{'UserId':_0x2ed0ba[_0x0cd4('0x36')][_0x0cd4('0x58')][_0x1d99d9],'FaxAccountId':_0x2ed0ba['params']['id']});}}else{socket[_0x0cd4('0xb0')](_0x0cd4('0xb1'),{'UserId':_0x2ed0ba['query'][_0x0cd4('0x58')],'FaxAccountId':_0x2ed0ba[_0x0cd4('0x4b')]['id']});}});}})[_0x0cd4('0x1a')](respondWithStatusCode(_0x17988d,null))[_0x0cd4('0x49')](handleError(_0x17988d,null));};exports[_0x0cd4('0xb2')]=function(_0x20ed61,_0x1ebfce,_0x2d0dd6){var _0x32be78={};var _0x48a21c={};var _0x2baa47;var _0x9efed6;return db[_0x0cd4('0x30')][_0x0cd4('0x53')]({'where':{'id':_0x20ed61['params']['id']}})[_0x0cd4('0x1a')](handleEntityNotFound(_0x1ebfce,null))[_0x0cd4('0x1a')](function(_0xb7f39b){if(_0xb7f39b){_0x2baa47=_0xb7f39b;_0x48a21c[_0x0cd4('0x32')]=_[_0x0cd4('0x33')](db[_0x0cd4('0x62')][_0x0cd4('0x31')]);_0x48a21c[_0x0cd4('0x36')]=_['keys'](_0x20ed61[_0x0cd4('0x36')]);_0x48a21c['filters']=_[_0x0cd4('0x38')](_0x48a21c[_0x0cd4('0x32')],_0x48a21c[_0x0cd4('0x36')]);_0x32be78[_0x0cd4('0x39')]=_[_0x0cd4('0x38')](_0x48a21c[_0x0cd4('0x32')],qs['fields'](_0x20ed61['query'][_0x0cd4('0x3a')]));_0x32be78[_0x0cd4('0x39')]=_0x32be78['attributes'][_0x0cd4('0x3b')]?_0x32be78['attributes']:_0x48a21c[_0x0cd4('0x32')];_0x32be78[_0x0cd4('0x5f')]=qs[_0x0cd4('0x3e')](_0x20ed61[_0x0cd4('0x36')]['sort']);_0x32be78[_0x0cd4('0x44')]=qs[_0x0cd4('0x37')](_['pick'](_0x20ed61[_0x0cd4('0x36')],_0x48a21c[_0x0cd4('0x37')]));if(_0x20ed61[_0x0cd4('0x36')][_0x0cd4('0x43')]){_0x32be78['where']=_[_0x0cd4('0x42')](_0x32be78['where'],{'$or':_['map'](_0x32be78[_0x0cd4('0x39')],function(_0x5e987c){var _0x551d74={};_0x551d74[_0x5e987c]={'$like':'%'+_0x20ed61['query'][_0x0cd4('0x43')]+'%'};return _0x551d74;})});}_0x32be78=_['merge']({},_0x32be78,_0x20ed61[_0x0cd4('0x46')]);return _0x2baa47[_0x0cd4('0xb2')](_0x32be78);}})[_0x0cd4('0x1a')](function(_0x3073de){if(_0x3073de){_0x9efed6=_0x3073de[_0x0cd4('0x3b')];if(!_0x20ed61[_0x0cd4('0x36')]['hasOwnProperty']('nolimit')){_0x32be78['limit']=qs[_0x0cd4('0x3d')](_0x20ed61['query'][_0x0cd4('0x3d')]);_0x32be78[_0x0cd4('0x28')]=qs[_0x0cd4('0x28')](_0x20ed61[_0x0cd4('0x36')][_0x0cd4('0x28')]);}return _0x2baa47[_0x0cd4('0xb2')](_0x32be78);}})[_0x0cd4('0x1a')](function(_0x1d155b){if(_0x1d155b){return _0x1d155b?{'count':_0x9efed6,'rows':_0x1d155b}:null;}})[_0x0cd4('0x1a')](respondWithResult(_0x1ebfce,null))[_0x0cd4('0x49')](handleError(_0x1ebfce,null));};
\ No newline at end of file
+var _0x286b=['client','http','request','then','request\x20sent','debug','stringify','error','code','FaxAccount,\x20%s,\x20%s','message','catch','end','status','json','count','offset','limit','set','Content-Range','update','destroy','sendStatus','stack','name','send','index','FaxAccount','rawAttributes','model','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','sort','pick','dateStart','add','day','merge','where','filter','map','options','includeAll','include','findAll','rows','show','params','keys','create','body','find','describe','addDisposition','FaxAccountId','Disposition','getDispositions','order','removeDispositions','CannedAnswer','getAnswers','findOne','nolimit','removeAnswers','ids','addInteraction','FaxInteraction','omit','getInteractions','CmContact','Contact','User','Owner','fullname','internal','Tag','Tags','tag','addApplications','transaction','FaxApplication','findAndCountAll','getApplications','context','exten','localstationid','app','type','system','Fax\x20Extension','CDR(type)=inbound-fax','Set','ecm','gateway','faxdetect','headerinfo','maxrate','minrate','modem','t38timeout','push','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','addAccountApplications','sequelize','get','bulkCreate','updateAccountApplications','VoiceExtension','tech','key','createdAt','updatedAt','TrunkId','ListId','findById','getMessages','FaxMessage','$gte','format','YYYY-MM-DD\x20HH:mm:ss','List','Contacts','DESC','attachments','root','server/files/attachments','basename','CheckAfterSend','isNil','path','from','\x22%s\x22\x20<%s>','fax','Send\x20Fax\x20failed','user','out','filename','Messages','Contact\x20not\x20found','ContactId','dataValues','SendFax','info','SendFaxRpc,\x20%s','addAgents','userFaxAccount:save','removeAgents','isArray','emit','userFaxAccount:remove','getAgents','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','ejs','crypto','desk.js','to-csv','querystring','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','localhost','./faxAccount.socket','register','jayson/promise'];(function(_0xde50f5,_0x4f1c12){var _0x3023aa=function(_0x5d09f7){while(--_0x5d09f7){_0xde50f5['push'](_0xde50f5['shift']());}};_0x3023aa(++_0x4f1c12);}(_0x286b,0x151));var _0xb286=function(_0x9c82a8,_0xabe6ff){_0x9c82a8=_0x9c82a8-0x0;var _0x13dd36=_0x286b[_0x9c82a8];return _0x13dd36;};'use strict';var jsonpatch=require(_0xb286('0x0'));var rp=require(_0xb286('0x1'));var moment=require(_0xb286('0x2'));var BPromise=require(_0xb286('0x3'));var Mustache=require(_0xb286('0x4'));var util=require(_0xb286('0x5'));var path=require('path');var sox=require(_0xb286('0x6'));var csv=require('to-csv');var ejs=require(_0xb286('0x7'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xb286('0x8'));var jsforce=require('jsforce');var deskjs=require(_0xb286('0x9'));var toCsv=require(_0xb286('0xa'));var querystring=require(_0xb286('0xb'));var Papa=require('papaparse');var qs=require(_0xb286('0xc'));var logger=require(_0xb286('0xd'))('api');var utils=require(_0xb286('0xe'));var config=require(_0xb286('0xf'));var db=require(_0xb286('0x10'))['db'];var socket=require('socket.io-emitter')({'host':_0xb286('0x11'),'port':0x18eb});require(_0xb286('0x12'))[_0xb286('0x13')](socket);var jayson=require(_0xb286('0x14'));var client=jayson[_0xb286('0x15')][_0xb286('0x16')]({'port':0x232c});var client9002=jayson[_0xb286('0x15')][_0xb286('0x16')]({'port':0x232a});function respondWithRpcPromise(_0x44c358,_0x5b63e8,_0x511711,_0x30798e){return new BPromise(function(_0x210b84,_0x5a7193){var _0x10acf0=_0x30798e||client;return _0x10acf0[_0xb286('0x17')](_0x44c358,_0x511711)[_0xb286('0x18')](function(_0x2ad938){logger['info']('FaxAccount,\x20%s,\x20%s',_0x5b63e8,_0xb286('0x19'));logger[_0xb286('0x1a')]('FaxAccount,\x20%s,\x20%s,\x20%s',_0x5b63e8,_0xb286('0x19'),JSON[_0xb286('0x1b')](_0x2ad938));if(_0x2ad938[_0xb286('0x1c')]){if(_0x2ad938[_0xb286('0x1c')][_0xb286('0x1d')]===0x1f4){logger['error']('FaxAccount,\x20%s,\x20%s',_0x5b63e8,_0x2ad938['error']['message']);return _0x5a7193(_0x2ad938[_0xb286('0x1c')]['message']);}logger[_0xb286('0x1c')](_0xb286('0x1e'),_0x5b63e8,_0x2ad938[_0xb286('0x1c')][_0xb286('0x1f')]);return _0x210b84(_0x2ad938[_0xb286('0x1c')]['message']);}else{logger['info'](_0xb286('0x1e'),_0x5b63e8,'request\x20sent');_0x210b84(_0x2ad938['result'][_0xb286('0x1f')]);}})[_0xb286('0x20')](function(_0x33c600){logger['error'](_0xb286('0x1e'),_0x5b63e8,_0x33c600);_0x5a7193(_0x33c600);});});}function respondWithStatusCode(_0x3d855f,_0x42a686){_0x42a686=_0x42a686||0xcc;return function(_0x27fdb7){if(_0x27fdb7){return _0x3d855f['sendStatus'](_0x42a686);}return _0x3d855f['status'](_0x42a686)[_0xb286('0x21')]();};}function respondWithResult(_0x208abb,_0x286d1d){_0x286d1d=_0x286d1d||0xc8;return function(_0x831682){if(_0x831682){return _0x208abb[_0xb286('0x22')](_0x286d1d)[_0xb286('0x23')](_0x831682);}};}function respondWithFilteredResult(_0x5b7466,_0x5561ea){return function(_0x1f4c95){if(_0x1f4c95){var _0xf2ab96=_0x1f4c95[_0xb286('0x24')],_0xf481fb=_0x5561ea[_0xb286('0x25')],_0x2c2c8f=_0x5561ea[_0xb286('0x25')]+_0x5561ea[_0xb286('0x26')],_0x43ad3e;if(_0x2c2c8f>=_0xf2ab96){_0x2c2c8f=_0xf2ab96;_0x43ad3e=0xc8;}else{_0x43ad3e=0xce;}_0x5b7466[_0xb286('0x22')](_0x43ad3e);return _0x5b7466[_0xb286('0x27')](_0xb286('0x28'),_0xf481fb+'-'+_0x2c2c8f+'/'+_0xf2ab96)['json'](_0x1f4c95);}return null;};}function patchUpdates(_0x437667){return function(_0x120d9e){try{jsonpatch['apply'](_0x120d9e,_0x437667,!![]);}catch(_0x492508){return BPromise['reject'](_0x492508);}return _0x120d9e['save']();};}function saveUpdates(_0x4ef1e3,_0x554693){return function(_0x3e6cdb){if(_0x3e6cdb){return _0x3e6cdb[_0xb286('0x29')](_0x4ef1e3)['then'](function(_0x2715a5){return _0x2715a5;});}return null;};}function removeEntity(_0x12fb59,_0x1958a9){return function(_0x1ab60c){if(_0x1ab60c){return _0x1ab60c[_0xb286('0x2a')]()['then'](function(){_0x12fb59[_0xb286('0x22')](0xcc)[_0xb286('0x21')]();});}};}function handleEntityNotFound(_0x4ab348,_0x666350){return function(_0x3c9e69){if(!_0x3c9e69){_0x4ab348[_0xb286('0x2b')](0x194);}return _0x3c9e69;};}function handleError(_0x3b36cb,_0x45a96c){_0x45a96c=_0x45a96c||0x1f4;return function(_0x5831cd){logger[_0xb286('0x1c')](_0x5831cd[_0xb286('0x2c')]);if(_0x5831cd[_0xb286('0x2d')]){delete _0x5831cd['name'];}_0x3b36cb[_0xb286('0x22')](_0x45a96c)[_0xb286('0x2e')](_0x5831cd);};}exports[_0xb286('0x2f')]=function(_0x4242fa,_0x5b1a83){var _0x5ec803={},_0x2a3564={},_0x37e02b={'count':0x0,'rows':[]};var _0x4949db=db[_0xb286('0x30')][_0xb286('0x31')];_0x2a3564[_0xb286('0x32')]=_['keys'](_0x4949db);var _0x28f199={'dateStart':_0x4242fa['query']['dateStart'],'dateEnd':_0x4242fa[_0xb286('0x33')][_0xb286('0x34')]};delete _0x4242fa[_0xb286('0x33')]['dateStart'];delete _0x4242fa[_0xb286('0x33')][_0xb286('0x34')];_0x2a3564[_0xb286('0x33')]=_['keys'](_0x4242fa[_0xb286('0x33')]);_0x2a3564[_0xb286('0x35')]=_[_0xb286('0x36')](_0x2a3564['model'],_0x2a3564[_0xb286('0x33')]);_0x5ec803[_0xb286('0x37')]=_[_0xb286('0x36')](_0x2a3564[_0xb286('0x32')],qs[_0xb286('0x38')](_0x4242fa[_0xb286('0x33')][_0xb286('0x38')]));_0x5ec803[_0xb286('0x37')]=_0x5ec803['attributes'][_0xb286('0x39')]?_0x5ec803['attributes']:_0x2a3564['model'];if(!_0x4242fa[_0xb286('0x33')][_0xb286('0x3a')]('nolimit')){_0x5ec803[_0xb286('0x26')]=qs['limit'](_0x4242fa[_0xb286('0x33')]['limit']);_0x5ec803[_0xb286('0x25')]=qs[_0xb286('0x25')](_0x4242fa[_0xb286('0x33')][_0xb286('0x25')]);}_0x5ec803['order']=qs[_0xb286('0x3b')](_0x4242fa['query'][_0xb286('0x3b')]);_0x5ec803['where']=qs['filters'](_[_0xb286('0x3c')](_0x4242fa[_0xb286('0x33')],_0x2a3564[_0xb286('0x35')]));if(_0x28f199[_0xb286('0x3d')]){if(_0x28f199['dateEnd']){_0x28f199[_0xb286('0x34')]=moment(_0x28f199['dateEnd'])[_0xb286('0x3e')](0x1,_0xb286('0x3f'));}else{_0x28f199[_0xb286('0x34')]=moment(_0x28f199[_0xb286('0x3d')])[_0xb286('0x3e')](0x1,_0xb286('0x3f'));}_[_0xb286('0x40')](_0x5ec803[_0xb286('0x41')],{'createdAt':{'$gte':_0x28f199[_0xb286('0x3d')],'$lte':_0x28f199['dateEnd']}});}if(_0x4242fa[_0xb286('0x33')][_0xb286('0x42')]){_0x5ec803[_0xb286('0x41')]=_[_0xb286('0x40')](_0x5ec803['where'],{'$or':_[_0xb286('0x43')](_0x5ec803[_0xb286('0x37')],function(_0x4e66a1){var _0x17a3ed={};_0x17a3ed[_0x4e66a1]={'$like':'%'+_0x4242fa[_0xb286('0x33')][_0xb286('0x42')]+'%'};return _0x17a3ed;})});}_0x5ec803=_[_0xb286('0x40')]({},_0x5ec803,_0x4242fa[_0xb286('0x44')]);var _0x53b0bc={'where':_0x5ec803['where']};return db[_0xb286('0x30')][_0xb286('0x24')](_0x53b0bc)[_0xb286('0x18')](function(_0x1a373c){_0x37e02b[_0xb286('0x24')]=_0x1a373c;if(_0x4242fa[_0xb286('0x33')][_0xb286('0x45')]){_0x5ec803[_0xb286('0x46')]=[{'all':!![]}];}return db[_0xb286('0x30')][_0xb286('0x47')](_0x5ec803);})[_0xb286('0x18')](function(_0x3336fe){_0x37e02b[_0xb286('0x48')]=_0x3336fe;return _0x37e02b;})[_0xb286('0x18')](respondWithFilteredResult(_0x5b1a83,_0x5ec803))[_0xb286('0x20')](handleError(_0x5b1a83,null));};exports[_0xb286('0x49')]=function(_0x4075f7,_0x3fc77e){var _0xb0b3ba={'raw':![],'where':{'id':_0x4075f7[_0xb286('0x4a')]['id']}},_0x102e65={};_0x102e65[_0xb286('0x32')]=_[_0xb286('0x4b')](db[_0xb286('0x30')][_0xb286('0x31')]);_0x102e65['query']=_[_0xb286('0x4b')](_0x4075f7[_0xb286('0x33')]);_0x102e65['filters']=_[_0xb286('0x36')](_0x102e65[_0xb286('0x32')],_0x102e65[_0xb286('0x33')]);_0xb0b3ba[_0xb286('0x37')]=_[_0xb286('0x36')](_0x102e65[_0xb286('0x32')],qs[_0xb286('0x38')](_0x4075f7[_0xb286('0x33')][_0xb286('0x38')]));_0xb0b3ba[_0xb286('0x37')]=_0xb0b3ba[_0xb286('0x37')][_0xb286('0x39')]?_0xb0b3ba[_0xb286('0x37')]:_0x102e65[_0xb286('0x32')];if(_0x4075f7[_0xb286('0x33')]['includeAll']){_0xb0b3ba[_0xb286('0x46')]=[{'all':!![]}];}_0xb0b3ba=_[_0xb286('0x40')]({},_0xb0b3ba,_0x4075f7[_0xb286('0x44')]);return db[_0xb286('0x30')]['find'](_0xb0b3ba)[_0xb286('0x18')](handleEntityNotFound(_0x3fc77e,null))[_0xb286('0x18')](respondWithResult(_0x3fc77e,null))[_0xb286('0x20')](handleError(_0x3fc77e,null));};exports[_0xb286('0x4c')]=function(_0x54c89e,_0x49b422){return db[_0xb286('0x30')][_0xb286('0x4c')](_0x54c89e[_0xb286('0x4d')],{})[_0xb286('0x18')](respondWithResult(_0x49b422,0xc9))[_0xb286('0x20')](handleError(_0x49b422,null));};exports[_0xb286('0x29')]=function(_0x395c82,_0x2ac689){if(_0x395c82[_0xb286('0x4d')]['id']){delete _0x395c82[_0xb286('0x4d')]['id'];}return db[_0xb286('0x30')][_0xb286('0x4e')]({'where':{'id':_0x395c82[_0xb286('0x4a')]['id']}})['then'](handleEntityNotFound(_0x2ac689,null))[_0xb286('0x18')](saveUpdates(_0x395c82[_0xb286('0x4d')],null))[_0xb286('0x18')](respondWithResult(_0x2ac689,null))[_0xb286('0x20')](handleError(_0x2ac689,null));};exports[_0xb286('0x2a')]=function(_0x563a60,_0x3eee55){return db[_0xb286('0x30')][_0xb286('0x4e')]({'where':{'id':_0x563a60[_0xb286('0x4a')]['id']}})[_0xb286('0x18')](handleEntityNotFound(_0x3eee55,null))[_0xb286('0x18')](removeEntity(_0x3eee55,null))[_0xb286('0x20')](handleError(_0x3eee55,null));};exports[_0xb286('0x4f')]=function(_0x56dc5b,_0x5350a9){return db[_0xb286('0x30')][_0xb286('0x4f')]()[_0xb286('0x18')](respondWithResult(_0x5350a9,null))[_0xb286('0x20')](handleError(_0x5350a9,null));};exports[_0xb286('0x50')]=function(_0x1e4f2f,_0x5b9ce3,_0x3022cf){if(_0x1e4f2f[_0xb286('0x4d')]['id']){delete _0x1e4f2f[_0xb286('0x4d')]['id'];}return db['FaxAccount'][_0xb286('0x4e')]({'where':{'id':_0x1e4f2f['params']['id']}})[_0xb286('0x18')](handleEntityNotFound(_0x5b9ce3,null))[_0xb286('0x18')](function(_0x379b00){if(_0x379b00){_0x1e4f2f[_0xb286('0x4d')][_0xb286('0x51')]=_0x379b00['id'];return db[_0xb286('0x52')][_0xb286('0x4c')](_0x1e4f2f[_0xb286('0x4d')]);}})[_0xb286('0x18')](respondWithResult(_0x5b9ce3,null))['catch'](handleError(_0x5b9ce3,null));};exports[_0xb286('0x53')]=function(_0x9aa983,_0xeb8eb5,_0x1be168){var _0x4d6b9d={'raw':![],'where':{}};var _0x210935={};var _0xfd6e37={'count':0x0,'rows':[]};return db[_0xb286('0x30')]['findOne']({'where':{'id':_0x9aa983[_0xb286('0x4a')]['id']}})[_0xb286('0x18')](handleEntityNotFound(_0xeb8eb5,null))[_0xb286('0x18')](function(_0x5076a){if(_0x5076a){_0x210935[_0xb286('0x32')]=_[_0xb286('0x4b')](db[_0xb286('0x52')][_0xb286('0x31')]);_0x210935[_0xb286('0x33')]=_[_0xb286('0x4b')](_0x9aa983['query']);_0x210935[_0xb286('0x35')]=_[_0xb286('0x36')](_0x210935[_0xb286('0x32')],_0x210935[_0xb286('0x33')]);_0x4d6b9d[_0xb286('0x37')]=_[_0xb286('0x36')](_0x210935[_0xb286('0x32')],qs[_0xb286('0x38')](_0x9aa983[_0xb286('0x33')]['fields']));_0x4d6b9d['attributes']=_0x4d6b9d[_0xb286('0x37')][_0xb286('0x39')]?_0x4d6b9d[_0xb286('0x37')]:_0x210935['model'];if(!_0x9aa983[_0xb286('0x33')]['hasOwnProperty']('nolimit')){_0x4d6b9d[_0xb286('0x26')]=qs['limit'](_0x9aa983[_0xb286('0x33')][_0xb286('0x26')]);_0x4d6b9d[_0xb286('0x25')]=qs[_0xb286('0x25')](_0x9aa983[_0xb286('0x33')][_0xb286('0x25')]);}_0x4d6b9d[_0xb286('0x54')]=qs[_0xb286('0x3b')](_0x9aa983[_0xb286('0x33')][_0xb286('0x3b')]);_0x4d6b9d[_0xb286('0x41')]=qs['filters'](_[_0xb286('0x3c')](_0x9aa983['query'],_0x210935[_0xb286('0x35')]));_0x4d6b9d[_0xb286('0x41')][_0xb286('0x51')]=_0x5076a['id'];if(_0x9aa983[_0xb286('0x33')]['filter']){_0x4d6b9d[_0xb286('0x41')]=_[_0xb286('0x40')](_0x4d6b9d[_0xb286('0x41')],{'$or':_[_0xb286('0x43')](_0x4d6b9d[_0xb286('0x37')],function(_0x36f51a){var _0xc2a94c={};_0xc2a94c[_0x36f51a]={'$like':'%'+_0x9aa983['query'][_0xb286('0x42')]+'%'};return _0xc2a94c;})});}_0x4d6b9d=_[_0xb286('0x40')]({},_0x4d6b9d,_0x9aa983[_0xb286('0x44')]);return db[_0xb286('0x52')][_0xb286('0x24')]({'where':_0x4d6b9d[_0xb286('0x41')]})[_0xb286('0x18')](function(_0x53ca62){_0xfd6e37['count']=_0x53ca62;if(_0x9aa983[_0xb286('0x33')][_0xb286('0x45')]){_0x4d6b9d[_0xb286('0x46')]=[{'all':!![]}];}return db['Disposition'][_0xb286('0x47')](_0x4d6b9d);})[_0xb286('0x18')](function(_0x1cc7df){_0xfd6e37['rows']=_0x1cc7df;return _0xfd6e37;});}})[_0xb286('0x18')](respondWithFilteredResult(_0xeb8eb5,_0x4d6b9d))[_0xb286('0x20')](handleError(_0xeb8eb5,null));};exports[_0xb286('0x55')]=function(_0x42d4ed,_0xc6a0cb,_0x4c23d3){var _0x4134fc;return db['FaxAccount'][_0xb286('0x4e')]({'where':{'id':_0x42d4ed[_0xb286('0x4a')]['id']}})[_0xb286('0x18')](handleEntityNotFound(_0xc6a0cb,null))[_0xb286('0x18')](function(_0x4df2a8){if(_0x4df2a8){return _0x4df2a8[_0xb286('0x55')](_0x42d4ed[_0xb286('0x33')]['ids']);}})[_0xb286('0x18')](respondWithStatusCode(_0xc6a0cb,null))[_0xb286('0x20')](handleError(_0xc6a0cb,null));};exports['addAnswer']=function(_0x1f444f,_0x46c8aa,_0x5f5839){if(_0x1f444f['body']['id']){delete _0x1f444f[_0xb286('0x4d')]['id'];}return db[_0xb286('0x30')][_0xb286('0x4e')]({'where':{'id':_0x1f444f[_0xb286('0x4a')]['id']}})['then'](handleEntityNotFound(_0x46c8aa,null))[_0xb286('0x18')](function(_0x170f1d){if(_0x170f1d){_0x1f444f['body'][_0xb286('0x51')]=_0x170f1d['id'];return db[_0xb286('0x56')]['create'](_0x1f444f[_0xb286('0x4d')]);}})[_0xb286('0x18')](respondWithResult(_0x46c8aa,null))[_0xb286('0x20')](handleError(_0x46c8aa,null));};exports[_0xb286('0x57')]=function(_0x2136c4,_0x2b29ad,_0x2e720e){var _0x717790={'raw':![],'where':{}};var _0x6c8e2f={};var _0x2efc02={'count':0x0,'rows':[]};return db[_0xb286('0x30')][_0xb286('0x58')]({'where':{'id':_0x2136c4[_0xb286('0x4a')]['id']}})[_0xb286('0x18')](handleEntityNotFound(_0x2b29ad,null))['then'](function(_0x5186f1){if(_0x5186f1){_0x6c8e2f[_0xb286('0x32')]=_[_0xb286('0x4b')](db[_0xb286('0x56')][_0xb286('0x31')]);_0x6c8e2f[_0xb286('0x33')]=_[_0xb286('0x4b')](_0x2136c4[_0xb286('0x33')]);_0x6c8e2f[_0xb286('0x35')]=_[_0xb286('0x36')](_0x6c8e2f[_0xb286('0x32')],_0x6c8e2f[_0xb286('0x33')]);_0x717790['attributes']=_[_0xb286('0x36')](_0x6c8e2f[_0xb286('0x32')],qs[_0xb286('0x38')](_0x2136c4['query'][_0xb286('0x38')]));_0x717790[_0xb286('0x37')]=_0x717790[_0xb286('0x37')][_0xb286('0x39')]?_0x717790[_0xb286('0x37')]:_0x6c8e2f[_0xb286('0x32')];if(!_0x2136c4[_0xb286('0x33')]['hasOwnProperty'](_0xb286('0x59'))){_0x717790[_0xb286('0x26')]=qs['limit'](_0x2136c4[_0xb286('0x33')][_0xb286('0x26')]);_0x717790[_0xb286('0x25')]=qs[_0xb286('0x25')](_0x2136c4[_0xb286('0x33')][_0xb286('0x25')]);}_0x717790[_0xb286('0x54')]=qs[_0xb286('0x3b')](_0x2136c4[_0xb286('0x33')][_0xb286('0x3b')]);_0x717790[_0xb286('0x41')]=qs[_0xb286('0x35')](_['pick'](_0x2136c4[_0xb286('0x33')],_0x6c8e2f[_0xb286('0x35')]));_0x717790[_0xb286('0x41')]['FaxAccountId']=_0x5186f1['id'];if(_0x2136c4[_0xb286('0x33')][_0xb286('0x42')]){_0x717790[_0xb286('0x41')]=_[_0xb286('0x40')](_0x717790[_0xb286('0x41')],{'$or':_[_0xb286('0x43')](_0x717790[_0xb286('0x37')],function(_0x382f47){var _0x13b9fe={};_0x13b9fe[_0x382f47]={'$like':'%'+_0x2136c4[_0xb286('0x33')][_0xb286('0x42')]+'%'};return _0x13b9fe;})});}_0x717790=_[_0xb286('0x40')]({},_0x717790,_0x2136c4[_0xb286('0x44')]);return db[_0xb286('0x56')][_0xb286('0x24')]({'where':_0x717790[_0xb286('0x41')]})['then'](function(_0x4862ea){_0x2efc02['count']=_0x4862ea;if(_0x2136c4[_0xb286('0x33')][_0xb286('0x45')]){_0x717790[_0xb286('0x46')]=[{'all':!![]}];}return db[_0xb286('0x56')]['findAll'](_0x717790);})['then'](function(_0x1bd661){_0x2efc02[_0xb286('0x48')]=_0x1bd661;return _0x2efc02;});}})[_0xb286('0x18')](respondWithFilteredResult(_0x2b29ad,_0x717790))[_0xb286('0x20')](handleError(_0x2b29ad,null));};exports[_0xb286('0x5a')]=function(_0x51fac1,_0x1521ad,_0x26e7ba){var _0x1ed5ae;return db[_0xb286('0x30')][_0xb286('0x4e')]({'where':{'id':_0x51fac1[_0xb286('0x4a')]['id']}})[_0xb286('0x18')](handleEntityNotFound(_0x1521ad,null))[_0xb286('0x18')](function(_0x53324a){if(_0x53324a){return _0x53324a[_0xb286('0x5a')](_0x51fac1[_0xb286('0x33')][_0xb286('0x5b')]);}})[_0xb286('0x18')](respondWithStatusCode(_0x1521ad,null))[_0xb286('0x20')](handleError(_0x1521ad,null));};exports[_0xb286('0x5c')]=function(_0x4f245b,_0x6a2e2,_0x5ca366){return db[_0xb286('0x5d')][_0xb286('0x4e')]({'where':{'id':_0x4f245b[_0xb286('0x4a')]['id']}})['then'](handleEntityNotFound(_0x6a2e2,null))[_0xb286('0x18')](function(_0xdcb3c8){if(_0xdcb3c8){return _0xdcb3c8[_0xb286('0x5c')](_0x4f245b[_0xb286('0x4d')]['ids'],_[_0xb286('0x5e')](_0x4f245b[_0xb286('0x4d')],[_0xb286('0x5b'),'id'])||{});}})[_0xb286('0x18')](respondWithResult(_0x6a2e2,null))[_0xb286('0x20')](handleError(_0x6a2e2,null));};exports[_0xb286('0x5f')]=function(_0x467469,_0x2ccbdb,_0x4ebc9c){var _0x59fdb7={'raw':![],'where':{}};var _0x1d75f2={};var _0x271928={'count':0x0,'rows':[]};return db[_0xb286('0x30')][_0xb286('0x58')]({'where':{'id':_0x467469[_0xb286('0x4a')]['id']}})['then'](handleEntityNotFound(_0x2ccbdb,null))['then'](function(_0xcb05dd){if(_0xcb05dd){_0x1d75f2[_0xb286('0x32')]=_[_0xb286('0x4b')](db[_0xb286('0x5d')][_0xb286('0x31')]);_0x1d75f2[_0xb286('0x33')]=_[_0xb286('0x4b')](_0x467469[_0xb286('0x33')]);_0x1d75f2[_0xb286('0x35')]=_['intersection'](_0x1d75f2[_0xb286('0x32')],_0x1d75f2[_0xb286('0x33')]);_0x59fdb7[_0xb286('0x37')]=_[_0xb286('0x36')](_0x1d75f2['model'],qs['fields'](_0x467469[_0xb286('0x33')][_0xb286('0x38')]));_0x59fdb7[_0xb286('0x37')]=_0x59fdb7[_0xb286('0x37')][_0xb286('0x39')]?_0x59fdb7['attributes']:_0x1d75f2[_0xb286('0x32')];if(!_0x467469['query'][_0xb286('0x3a')](_0xb286('0x59'))){_0x59fdb7['limit']=qs[_0xb286('0x26')](_0x467469[_0xb286('0x33')]['limit']);_0x59fdb7[_0xb286('0x25')]=qs[_0xb286('0x25')](_0x467469[_0xb286('0x33')][_0xb286('0x25')]);}_0x59fdb7[_0xb286('0x54')]=qs['sort'](_0x467469[_0xb286('0x33')][_0xb286('0x3b')]);_0x59fdb7[_0xb286('0x41')]=qs[_0xb286('0x35')](_['pick'](_0x467469[_0xb286('0x33')],_0x1d75f2[_0xb286('0x35')]));_0x59fdb7[_0xb286('0x41')][_0xb286('0x51')]=_0xcb05dd['id'];if(_0x467469[_0xb286('0x33')]['filter']){_0x59fdb7[_0xb286('0x41')]=_['merge'](_0x59fdb7['where'],{'$or':_['map'](_0x59fdb7[_0xb286('0x37')],function(_0x2c1e03){var _0x343925={};_0x343925[_0x2c1e03]={'$like':'%'+_0x467469['query'][_0xb286('0x42')]+'%'};return _0x343925;})});}_0x59fdb7=_[_0xb286('0x40')]({},_0x59fdb7,_0x467469[_0xb286('0x44')]);return db[_0xb286('0x5d')][_0xb286('0x24')]({'where':_0x59fdb7[_0xb286('0x41')]})[_0xb286('0x18')](function(_0x114311){_0x271928[_0xb286('0x24')]=_0x114311;if(_0x467469['query'][_0xb286('0x45')]){_0x59fdb7[_0xb286('0x46')]=[{'model':db[_0xb286('0x60')],'as':_0xb286('0x61'),'required':![]},{'model':db[_0xb286('0x62')],'as':_0xb286('0x63'),'attributes':[_0xb286('0x2d'),_0xb286('0x64'),_0xb286('0x65')],'required':![]},{'model':db[_0xb286('0x66')],'as':_0xb286('0x67'),'attributes':['id',_0xb286('0x2d'),'color'],'where':_0x467469[_0xb286('0x33')][_0xb286('0x68')]?{'id':_0x467469['query'][_0xb286('0x68')]}:undefined,'required':_0x467469[_0xb286('0x33')][_0xb286('0x68')]?!![]:![]}];}return db[_0xb286('0x5d')][_0xb286('0x47')](_0x59fdb7);})[_0xb286('0x18')](function(_0x6f3a8d){_0x271928[_0xb286('0x48')]=_0x6f3a8d;return _0x271928;});}})['then'](respondWithFilteredResult(_0x2ccbdb,_0x59fdb7))[_0xb286('0x20')](handleError(_0x2ccbdb,null));};exports[_0xb286('0x69')]=function(_0x53f1bd,_0x50c050,_0x39cdf8){return db['FaxAccount'][_0xb286('0x58')]({'where':{'id':_0x53f1bd[_0xb286('0x4a')]['id']}})['then'](handleEntityNotFound(_0x50c050,null))[_0xb286('0x18')](function(_0x237e19){if(_0x237e19){return db['sequelize'][_0xb286('0x6a')](function(_0x4f3fd6){return db[_0xb286('0x6b')]['destroy']({'where':{'FaxAccountId':_0x53f1bd[_0xb286('0x4a')]['id']},'transaction':_0x4f3fd6})['then'](function(_0x47ceae){var _0x2f978d=_[_0xb286('0x43')](_0x53f1bd['body'],function(_0x568719){_0x568719[_0xb286('0x51')]=_0x53f1bd[_0xb286('0x4a')]['id'];return _0x568719;});return db[_0xb286('0x6b')]['bulkCreate'](_0x2f978d,{'transaction':_0x4f3fd6});});})[_0xb286('0x18')](function(){return db[_0xb286('0x6b')][_0xb286('0x6c')]({'where':{'FaxAccountId':_0x53f1bd[_0xb286('0x4a')]['id']},'order':'priority'});});}})[_0xb286('0x18')](respondWithResult(_0x50c050,null))[_0xb286('0x20')](handleError(_0x50c050,null));};exports[_0xb286('0x6d')]=function(_0x2bece9,_0x1ae97c,_0x282b25){var _0x179063={};var _0x44800b={};var _0x36a83;var _0x12d9d2;return db[_0xb286('0x30')]['findOne']({'where':{'id':_0x2bece9['params']['id']}})[_0xb286('0x18')](handleEntityNotFound(_0x1ae97c,null))['then'](function(_0x3fa623){if(_0x3fa623){_0x36a83=_0x3fa623;_0x44800b['model']=_[_0xb286('0x4b')](db[_0xb286('0x6b')][_0xb286('0x31')]);_0x44800b[_0xb286('0x33')]=_[_0xb286('0x4b')](_0x2bece9['query']);_0x44800b['filters']=_[_0xb286('0x36')](_0x44800b['model'],_0x44800b[_0xb286('0x33')]);_0x179063['attributes']=_[_0xb286('0x36')](_0x44800b['model'],qs[_0xb286('0x38')](_0x2bece9['query'][_0xb286('0x38')]));_0x179063[_0xb286('0x37')]=_0x179063[_0xb286('0x37')][_0xb286('0x39')]?_0x179063[_0xb286('0x37')]:_0x44800b[_0xb286('0x32')];_0x179063['order']=qs[_0xb286('0x3b')](_0x2bece9[_0xb286('0x33')][_0xb286('0x3b')]);_0x179063[_0xb286('0x41')]=qs['filters'](_[_0xb286('0x3c')](_0x2bece9['query'],_0x44800b[_0xb286('0x35')]));if(_0x2bece9[_0xb286('0x33')][_0xb286('0x42')]){_0x179063[_0xb286('0x41')]=_[_0xb286('0x40')](_0x179063['where'],{'$or':_['map'](_0x179063['attributes'],function(_0x1688eb){var _0x4d8305={};_0x4d8305[_0x1688eb]={'$like':'%'+_0x2bece9['query'][_0xb286('0x42')]+'%'};return _0x4d8305;})});}_0x179063=_['merge']({},_0x179063,_0x2bece9['options']);return _0x36a83['getApplications'](_0x179063);}})[_0xb286('0x18')](function(_0x74fa80){if(_0x74fa80){_0x12d9d2=_0x74fa80['length'];if(!_0x2bece9[_0xb286('0x33')]['hasOwnProperty']('nolimit')){_0x179063['limit']=qs['limit'](_0x2bece9[_0xb286('0x33')][_0xb286('0x26')]);_0x179063[_0xb286('0x25')]=qs[_0xb286('0x25')](_0x2bece9[_0xb286('0x33')]['offset']);}return _0x36a83[_0xb286('0x6d')](_0x179063);}})[_0xb286('0x18')](function(_0x3b89c0){if(_0x3b89c0){return _0x3b89c0?{'count':_0x12d9d2,'rows':_0x3b89c0}:null;}})[_0xb286('0x18')](respondWithResult(_0x1ae97c,null))['catch'](handleError(_0x1ae97c,null));};function Extension(_0x41b2b2,_0x301c5,_0x4a72c9,_0x4dec13){this[_0xb286('0x6e')]='from-voip-provider';this[_0xb286('0x6f')]=_0x41b2b2[_0xb286('0x70')];this[_0xb286('0x71')]=_0x4dec13;this[_0xb286('0x72')]=_0xb286('0x73');this['description']=_0xb286('0x74');this[_0xb286('0x51')]=_0x41b2b2['id'];this['priority']=_0x301c5;this['appdata']=_0x4a72c9;}function createExtensionsReciveFax(_0x1ac3f3){var _0x781c9=0x1;var _0x451d9c=[];_0x451d9c['push'](new Extension(_0x1ac3f3,_0x781c9,'','Answer'));_0x781c9+=0x1;_0x451d9c['push'](new Extension(_0x1ac3f3,_0x781c9,_0xb286('0x75'),_0xb286('0x76')));_0x781c9+=0x1;for(var _0x3151ea in _0x1ac3f3){if(_0x1ac3f3[_0xb286('0x3a')](_0x3151ea)&&(_0x3151ea===_0xb286('0x77')||_0x3151ea==='localstationid'||_0x3151ea===_0xb286('0x78')||_0x3151ea===_0xb286('0x79')||_0x3151ea===_0xb286('0x7a')||_0x3151ea===_0xb286('0x7b')||_0x3151ea===_0xb286('0x7c')||_0x3151ea===_0xb286('0x7d')||_0x3151ea===_0xb286('0x7e'))){_0x451d9c[_0xb286('0x7f')](new Extension(_0x1ac3f3,_0x781c9,'FAXOPT('+_0x3151ea+')='+_0x1ac3f3[_0x3151ea],_0xb286('0x76')));_0x781c9+=0x1;}}_0x451d9c[_0xb286('0x7f')](new Extension(_0x1ac3f3,_0x781c9,'6',_0xb286('0x80')));_0x781c9+=0x1;_0x451d9c[_0xb286('0x7f')](new Extension(_0x1ac3f3,_0x781c9,_0xb286('0x81'),'ReceiveFax'));_0x781c9=0x0;return _0x451d9c;}exports[_0xb286('0x82')]=function(_0x2fc83d,_0xf271e7,_0x178ab0){var _0xeeb87d;return db[_0xb286('0x83')][_0xb286('0x6a')](function(_0x1ad0e2){return db['FaxAccount'][_0xb286('0x4c')](_0x2fc83d['body'],{'transaction':_0x1ad0e2})[_0xb286('0x18')](function(_0x5c74d0){_0xeeb87d=_0x5c74d0[_0xb286('0x84')]({'plain':!![]});return db['VoiceExtension'][_0xb286('0x85')](createExtensionsReciveFax(_0xeeb87d),{'transaction':_0x1ad0e2});});})[_0xb286('0x18')](function(){return _0xeeb87d;})[_0xb286('0x18')](respondWithResult(_0xf271e7,null))[_0xb286('0x20')](handleError(_0xf271e7,null));};exports[_0xb286('0x86')]=function(_0x1ecc60,_0x296868,_0x49d945){var _0x5dba63;return db[_0xb286('0x83')][_0xb286('0x6a')](function(_0x4ed7d3){return db[_0xb286('0x30')][_0xb286('0x29')](_0x1ecc60[_0xb286('0x4d')],{'where':{'id':_0x1ecc60[_0xb286('0x4d')]['id']},'transaction':_0x4ed7d3})[_0xb286('0x18')](function(_0x216eed){return db[_0xb286('0x87')]['destroy']({'where':{'FaxAccountId':_0x1ecc60[_0xb286('0x4d')]['id']},'transaction':_0x4ed7d3})['then'](function(_0x8a608d){return db[_0xb286('0x87')][_0xb286('0x85')](createExtensionsReciveFax(_['omit'](_0x1ecc60[_0xb286('0x4d')],[_0xb286('0x88'),_0xb286('0x89'),_0xb286('0x8a'),_0xb286('0x8b'),_0xb286('0x8c'),_0xb286('0x8d')])),{'transaction':_0x4ed7d3});});});})['then'](function(){return db[_0xb286('0x30')][_0xb286('0x8e')](_0x1ecc60[_0xb286('0x4d')]['id']);})[_0xb286('0x18')](respondWithResult(_0x296868,null))['catch'](handleError(_0x296868,null));};exports[_0xb286('0x8f')]=function(_0x317d2f,_0x1bec37,_0x215ab7){var _0x3743c7={'raw':!![],'where':{}};var _0x4cf217={};var _0x504719={'count':0x0,'rows':[]};return db[_0xb286('0x30')][_0xb286('0x58')]({'where':{'id':_0x317d2f['params']['id']}})[_0xb286('0x18')](handleEntityNotFound(_0x1bec37,null))[_0xb286('0x18')](function(_0x35b046){if(_0x35b046){_0x4cf217[_0xb286('0x32')]=_[_0xb286('0x4b')](db[_0xb286('0x90')][_0xb286('0x31')]);_0x4cf217[_0xb286('0x33')]=_[_0xb286('0x4b')](_0x317d2f[_0xb286('0x33')]);_0x4cf217['filters']=_[_0xb286('0x36')](_0x4cf217[_0xb286('0x32')],_0x4cf217['query']);_0x3743c7[_0xb286('0x37')]=_[_0xb286('0x36')](_0x4cf217['model'],qs[_0xb286('0x38')](_0x317d2f[_0xb286('0x33')]['fields']));_0x3743c7[_0xb286('0x37')]=_0x3743c7[_0xb286('0x37')][_0xb286('0x39')]?_0x3743c7[_0xb286('0x37')]:_0x4cf217[_0xb286('0x32')];if(!_0x317d2f[_0xb286('0x33')][_0xb286('0x3a')]('nolimit')){_0x3743c7[_0xb286('0x26')]=qs['limit'](_0x317d2f[_0xb286('0x33')][_0xb286('0x26')]);_0x3743c7[_0xb286('0x25')]=qs[_0xb286('0x25')](_0x317d2f[_0xb286('0x33')][_0xb286('0x25')]);}_0x3743c7['order']=qs['sort'](_0x317d2f[_0xb286('0x33')][_0xb286('0x3b')]);_0x3743c7[_0xb286('0x41')]=qs[_0xb286('0x35')](_[_0xb286('0x3c')](_0x317d2f[_0xb286('0x33')],_0x4cf217[_0xb286('0x35')]));_0x3743c7[_0xb286('0x41')]['FaxAccountId']=_0x35b046['id'];if(_0x317d2f[_0xb286('0x33')][_0xb286('0x42')]){_0x3743c7[_0xb286('0x41')]=_['merge'](_0x3743c7[_0xb286('0x41')],{'$or':_[_0xb286('0x43')](_0x3743c7['attributes'],function(_0x5ca91e){var _0x245a56={};_0x245a56[_0x5ca91e]={'$like':'%'+_0x317d2f['query']['filter']+'%'};return _0x245a56;})});}if(_0x317d2f['query'][_0xb286('0x91')]){var _0x4c3879=_0x317d2f['query']['$gte']['split'](',');var _0x41c623={};_0x41c623[_0x4c3879[0x0]]={'$gte':moment(_0x4c3879[0x1])[_0xb286('0x92')](_0xb286('0x93'))};_0x3743c7['where']=_['merge'](_0x3743c7[_0xb286('0x41')],_0x41c623);}_0x3743c7=_[_0xb286('0x40')]({},_0x3743c7,_0x317d2f[_0xb286('0x44')]);return db[_0xb286('0x90')]['count']({'where':_0x3743c7['where']})[_0xb286('0x18')](function(_0x3b398f){_0x504719[_0xb286('0x24')]=_0x3b398f;if(_0x317d2f[_0xb286('0x33')][_0xb286('0x45')]){_0x3743c7[_0xb286('0x46')]=[{'all':!![]}];}return db['FaxMessage'][_0xb286('0x47')](_0x3743c7);})[_0xb286('0x18')](function(_0x2c1405){_0x504719['rows']=_0x2c1405;return _0x504719;});}})[_0xb286('0x18')](respondWithFilteredResult(_0x1bec37,_0x3743c7))[_0xb286('0x20')](handleError(_0x1bec37,null));};exports[_0xb286('0x2e')]=function(_0x10fcb2,_0xb94687,_0x1c731d){var _0x53d709,_0x266c77={},_0x3c43f5;if(_0x10fcb2[_0xb286('0x4d')]['to']){_0x3c43f5=_0x10fcb2[_0xb286('0x4d')]['to'][0x0];}return db['FaxAccount']['find']({'where':{'id':_0x10fcb2[_0xb286('0x4a')]['id']},'include':[{'model':db['CmList'],'as':_0xb286('0x94'),'include':[{'model':db[_0xb286('0x60')],'as':_0xb286('0x95'),'where':{'fax':_0x3c43f5},'limit':0x1,'order':[[_0xb286('0x8b'),_0xb286('0x96')]]}]}]})[_0xb286('0x18')](handleEntityNotFound(_0xb94687,null))[_0xb286('0x18')](function(_0x49f092){_0x53d709=_0x49f092;if(_0x10fcb2[_0xb286('0x4d')][_0xb286('0x97')]&&_0x10fcb2[_0xb286('0x4d')]['attachments'][_0xb286('0x39')]){for(var _0x15ced1=0x0;_0x15ced1<_0x10fcb2[_0xb286('0x4d')][_0xb286('0x97')]['length'];_0x15ced1+=0x1){_0x10fcb2[_0xb286('0x4d')][_0xb286('0x97')][_0x15ced1]={'filename':_0x10fcb2[_0xb286('0x4d')][_0xb286('0x97')][_0x15ced1][_0xb286('0x2d')],'id':_0x10fcb2[_0xb286('0x4d')][_0xb286('0x97')][_0x15ced1]['id'],'path':path['join'](config[_0xb286('0x98')],_0xb286('0x99'),_0x10fcb2[_0xb286('0x4d')][_0xb286('0x97')][_0x15ced1][_0xb286('0x9a')])};}}return respondWithRpcPromise(_0xb286('0x9b'),_0xb286('0x9b'),{'FaxAccountId':_[_0xb286('0x9c')](_0x10fcb2[_0xb286('0x4a')]['id'])?undefined:_0x10fcb2[_0xb286('0x4a')]['id'],'path':_['isNil'](_0x10fcb2[_0xb286('0x4d')]['attachments'][0x0][_0xb286('0x9d')])?undefined:_0x10fcb2[_0xb286('0x4d')]['attachments'][0x0][_0xb286('0x9d')],'fax':_['isNil'](_0x10fcb2[_0xb286('0x4d')]['to'][0x0])?undefined:_0x10fcb2[_0xb286('0x4d')]['to'][0x0]},client9002);})['then'](function(){if(_0x53d709){if(_['isNil'](_0x10fcb2[_0xb286('0x4d')][_0xb286('0x9e')])){_0x10fcb2[_0xb286('0x4d')][_0xb286('0x9e')]=util['format'](_0xb286('0x9f'),_0x53d709[_0xb286('0x2d')],_0x53d709[_0xb286('0xa0')]);}if(_0x53d709[_0xb286('0x94')]){if(_0x53d709[_0xb286('0x94')][_0xb286('0x95')][_0xb286('0x39')]){return _0x53d709[_0xb286('0x94')][_0xb286('0x95')][0x0];}else{return db[_0xb286('0x60')][_0xb286('0x4c')](_['defaults'](_0x10fcb2['body'],{'firstName':_0x10fcb2[_0xb286('0x4d')]['to'][0x0],'phone':_0x10fcb2[_0xb286('0x4d')]['to'][0x0],'fax':_0x10fcb2['body']['to'][0x0],'ListId':_0x53d709[_0xb286('0x8d')]}));}}else{throw new Error('List\x20not\x20found');}}else{throw new Error(_0xb286('0xa1'));}})[_0xb286('0x18')](function(_0x5be917){if(_0x5be917){return db[_0xb286('0x5d')]['find']({'where':{'ContactId':_0x5be917['id'],'closed':![],'FaxAccountId':_0x53d709['id']}})[_0xb286('0x18')](function(_0x4ea136){if(_0x4ea136){return[_0x4ea136,![]];}return db[_0xb286('0x5d')][_0xb286('0x4c')]({'UserId':_0x10fcb2[_0xb286('0xa2')]['id'],'ContactId':_0x5be917['id'],'FaxAccountId':_0x53d709['id'],'fax':_0x10fcb2['body']['to'][0x0],'firstMsgDirection':_0xb286('0xa3'),'Messages':[_[_0xb286('0x40')](_0x10fcb2['body'],{'read':![],'body':_0x10fcb2[_0xb286('0x4d')]['attachments'][0x0][_0xb286('0xa4')],'FaxAccountId':_0x53d709['id'],'UserId':_0x10fcb2[_0xb286('0xa2')]['id'],'ContactId':_0x5be917['id'],'AttachmentId':_0x10fcb2[_0xb286('0x4d')][_0xb286('0x97')][0x0]['id']})]},{'include':[{'model':db[_0xb286('0x90')],'as':_0xb286('0xa5')}]})['then'](function(_0x5cdb5f){return[_0x5cdb5f,!![]];});});}else{throw new Error(_0xb286('0xa6'));}})['spread'](function(_0x2421a9,_0x5394f4){if(_0x5394f4){return _0x2421a9;}return db['FaxMessage'][_0xb286('0x4c')]({'direction':_0xb286('0xa3'),'read':![],'body':_0x10fcb2[_0xb286('0x4d')][_0xb286('0x97')][0x0][_0xb286('0xa4')],'FaxAccountId':_0x53d709['id'],'FaxInteractionId':_0x2421a9['id'],'UserId':_0x10fcb2[_0xb286('0xa2')]['id'],'ContactId':_0x2421a9[_0xb286('0xa7')],'AttachmentId':_0x10fcb2[_0xb286('0x4d')]['attachments'][0x0]['id']})[_0xb286('0x18')](function(_0x4b616e){_0x2421a9['dataValues']['Messages']=[];_0x2421a9[_0xb286('0xa8')][_0xb286('0xa5')][_0xb286('0x7f')](_0x4b616e[_0xb286('0xa8')]);return _0x2421a9;});})[_0xb286('0x18')](function(_0xe05c8a){respondWithRpcPromise('SendFax',_0xb286('0xa9'),{'FaxAccountId':_['isNil'](_0x10fcb2['params']['id'])?undefined:_0x10fcb2[_0xb286('0x4a')]['id'],'path':_[_0xb286('0x9c')](_0x10fcb2[_0xb286('0x4d')]['attachments'][0x0][_0xb286('0x9d')])?undefined:_0x10fcb2[_0xb286('0x4d')][_0xb286('0x97')][0x0][_0xb286('0x9d')],'fax':_[_0xb286('0x9c')](_0x10fcb2['body']['to'][0x0])?undefined:_0x10fcb2[_0xb286('0x4d')]['to'][0x0],'AttachmentId':_0x10fcb2[_0xb286('0x4d')]['attachments'][0x0]['id']},client9002)['then'](function(_0x228bb5){logger[_0xb286('0xaa')]('SendFaxRpc,\x20%s',_0x228bb5);})[_0xb286('0x20')](function(_0xa6ff7c){logger[_0xb286('0xaa')](_0xb286('0xab'),_0xa6ff7c);});return _0xe05c8a;})[_0xb286('0x18')](respondWithResult(_0xb94687,null))['catch'](handleError(_0xb94687,null));};exports[_0xb286('0xac')]=function(_0x2e72d5,_0x5517f0,_0x5058cc){return db[_0xb286('0x30')]['find']({'where':{'id':_0x2e72d5[_0xb286('0x4a')]['id']}})[_0xb286('0x18')](handleEntityNotFound(_0x5517f0,null))[_0xb286('0x18')](function(_0x376bd2){if(_0x376bd2){return _0x376bd2[_0xb286('0xac')](_0x2e72d5['body'][_0xb286('0x5b')],_[_0xb286('0x5e')](_0x2e72d5[_0xb286('0x4d')],['ids','id'])||{})['spread'](function(_0x4f3aaf){for(var _0xc99be8=0x0;_0xc99be8<_0x2e72d5['body'][_0xb286('0x5b')][_0xb286('0x39')];_0xc99be8+=0x1){socket['emit'](_0xb286('0xad'),{'UserId':_0x2e72d5[_0xb286('0x4d')][_0xb286('0x5b')][_0xc99be8],'FaxAccountId':_0x2e72d5[_0xb286('0x4a')]['id']});}return _0x4f3aaf;});}})[_0xb286('0x18')](respondWithResult(_0x5517f0,null))[_0xb286('0x20')](handleError(_0x5517f0,null));};exports[_0xb286('0xae')]=function(_0xff4a4,_0x565d04,_0x1a5dbb){var _0x31bc7b;return db[_0xb286('0x30')][_0xb286('0x4e')]({'where':{'id':_0xff4a4[_0xb286('0x4a')]['id']}})[_0xb286('0x18')](handleEntityNotFound(_0x565d04,null))[_0xb286('0x18')](function(_0x54ac2e){if(_0x54ac2e){return _0x54ac2e[_0xb286('0xae')](_0xff4a4[_0xb286('0x33')]['ids'])[_0xb286('0x18')](function(_0x2c2deb){if(_[_0xb286('0xaf')](_0xff4a4[_0xb286('0x33')]['ids'])){for(var _0x55d007=0x0;_0x55d007<_0xff4a4[_0xb286('0x33')][_0xb286('0x5b')][_0xb286('0x39')];_0x55d007+=0x1){socket[_0xb286('0xb0')](_0xb286('0xb1'),{'UserId':_0xff4a4[_0xb286('0x33')][_0xb286('0x5b')][_0x55d007],'FaxAccountId':_0xff4a4[_0xb286('0x4a')]['id']});}}else{socket['emit'](_0xb286('0xb1'),{'UserId':_0xff4a4[_0xb286('0x33')][_0xb286('0x5b')],'FaxAccountId':_0xff4a4['params']['id']});}});}})[_0xb286('0x18')](respondWithStatusCode(_0x565d04,null))[_0xb286('0x20')](handleError(_0x565d04,null));};exports[_0xb286('0xb2')]=function(_0x54688d,_0x3b2850,_0x3adea7){var _0x51adc1={};var _0x2e400b={};var _0x4d4a8c;var _0x2f8c66;return db['FaxAccount']['findOne']({'where':{'id':_0x54688d[_0xb286('0x4a')]['id']}})[_0xb286('0x18')](handleEntityNotFound(_0x3b2850,null))[_0xb286('0x18')](function(_0x56e1d4){if(_0x56e1d4){_0x4d4a8c=_0x56e1d4;_0x2e400b['model']=_[_0xb286('0x4b')](db[_0xb286('0x62')][_0xb286('0x31')]);_0x2e400b[_0xb286('0x33')]=_['keys'](_0x54688d[_0xb286('0x33')]);_0x2e400b[_0xb286('0x35')]=_['intersection'](_0x2e400b[_0xb286('0x32')],_0x2e400b[_0xb286('0x33')]);_0x51adc1[_0xb286('0x37')]=_[_0xb286('0x36')](_0x2e400b[_0xb286('0x32')],qs['fields'](_0x54688d[_0xb286('0x33')][_0xb286('0x38')]));_0x51adc1[_0xb286('0x37')]=_0x51adc1[_0xb286('0x37')][_0xb286('0x39')]?_0x51adc1[_0xb286('0x37')]:_0x2e400b[_0xb286('0x32')];_0x51adc1[_0xb286('0x54')]=qs['sort'](_0x54688d[_0xb286('0x33')][_0xb286('0x3b')]);_0x51adc1[_0xb286('0x41')]=qs['filters'](_[_0xb286('0x3c')](_0x54688d['query'],_0x2e400b[_0xb286('0x35')]));if(_0x54688d[_0xb286('0x33')][_0xb286('0x42')]){_0x51adc1[_0xb286('0x41')]=_[_0xb286('0x40')](_0x51adc1[_0xb286('0x41')],{'$or':_[_0xb286('0x43')](_0x51adc1[_0xb286('0x37')],function(_0x5d27dc){var _0x37deea={};_0x37deea[_0x5d27dc]={'$like':'%'+_0x54688d['query'][_0xb286('0x42')]+'%'};return _0x37deea;})});}_0x51adc1=_[_0xb286('0x40')]({},_0x51adc1,_0x54688d[_0xb286('0x44')]);return _0x4d4a8c['getAgents'](_0x51adc1);}})[_0xb286('0x18')](function(_0x3ea5c6){if(_0x3ea5c6){_0x2f8c66=_0x3ea5c6[_0xb286('0x39')];if(!_0x54688d[_0xb286('0x33')]['hasOwnProperty'](_0xb286('0x59'))){_0x51adc1[_0xb286('0x26')]=qs['limit'](_0x54688d['query'][_0xb286('0x26')]);_0x51adc1['offset']=qs[_0xb286('0x25')](_0x54688d[_0xb286('0x33')]['offset']);}return _0x4d4a8c[_0xb286('0xb2')](_0x51adc1);}})[_0xb286('0x18')](function(_0x37cfd6){if(_0x37cfd6){return _0x37cfd6?{'count':_0x2f8c66,'rows':_0x37cfd6}:null;}})[_0xb286('0x18')](respondWithResult(_0x3b2850,null))[_0xb286('0x20')](handleError(_0x3b2850,null));};
\ No newline at end of file
index 01c82da..c219cf0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb1db=['FaxAccount','setMaxListeners','save','remove','emit','hasOwnProperty','events','../../mysqldb'];(function(_0x1c9f90,_0x538898){var _0x2e0c4c=function(_0x458786){while(--_0x458786){_0x1c9f90['push'](_0x1c9f90['shift']());}};_0x2e0c4c(++_0x538898);}(_0xb1db,0x1b6));var _0xbb1d=function(_0x5c1de9,_0x16b37a){_0x5c1de9=_0x5c1de9-0x0;var _0x452529=_0xb1db[_0x5c1de9];return _0x452529;};'use strict';var EventEmitter=require(_0xbb1d('0x0'));var FaxAccount=require(_0xbb1d('0x1'))['db'][_0xbb1d('0x2')];var FaxAccountEvents=new EventEmitter();FaxAccountEvents[_0xbb1d('0x3')](0x0);var events={'afterCreate':_0xbb1d('0x4'),'afterUpdate':'update','afterDestroy':_0xbb1d('0x5')};function emitEvent(_0x332e9c){return function(_0x28ac3f,_0x33bbc8,_0x426349){FaxAccountEvents[_0xbb1d('0x6')](_0x332e9c+':'+_0x28ac3f['id'],_0x28ac3f);FaxAccountEvents[_0xbb1d('0x6')](_0x332e9c,_0x28ac3f);_0x426349(null);};}for(var e in events){if(events[_0xbb1d('0x7')](e)){var event=events[e];FaxAccount['hook'](e,emitEvent(event));}}module['exports']=FaxAccountEvents;
\ No newline at end of file
+var _0x707c=['hook','../../mysqldb','setMaxListeners','save','remove','emit','hasOwnProperty'];(function(_0x2c18be,_0x1be7f4){var _0x17b3b6=function(_0x4bf03b){while(--_0x4bf03b){_0x2c18be['push'](_0x2c18be['shift']());}};_0x17b3b6(++_0x1be7f4);}(_0x707c,0x1b3));var _0xc707=function(_0x460150,_0x232949){_0x460150=_0x460150-0x0;var _0x340677=_0x707c[_0x460150];return _0x340677;};'use strict';var EventEmitter=require('events');var FaxAccount=require(_0xc707('0x0'))['db']['FaxAccount'];var FaxAccountEvents=new EventEmitter();FaxAccountEvents[_0xc707('0x1')](0x0);var events={'afterCreate':_0xc707('0x2'),'afterUpdate':'update','afterDestroy':_0xc707('0x3')};function emitEvent(_0x188d16){return function(_0x9ce8ca,_0xdfae3b,_0x20ec93){FaxAccountEvents[_0xc707('0x4')](_0x188d16+':'+_0x9ce8ca['id'],_0x9ce8ca);FaxAccountEvents[_0xc707('0x4')](_0x188d16,_0x9ce8ca);_0x20ec93(null);};}for(var e in events){if(events[_0xc707('0x5')](e)){var event=events[e];FaxAccount[_0xc707('0x6')](e,emitEvent(event));}}module['exports']=FaxAccountEvents;
\ No newline at end of file
index 7691eda..95fad44 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8c2e=['bluebird','request-promise','./faxAccount.attributes','exports','FaxAccount','fax_accounts','lodash','../../config/logger','api','moment'];(function(_0x411d1e,_0x3ae490){var _0x4aec00=function(_0x1ca734){while(--_0x1ca734){_0x411d1e['push'](_0x411d1e['shift']());}};_0x4aec00(++_0x3ae490);}(_0x8c2e,0xec));var _0xe8c2=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x8c2e[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xe8c2('0x0'));var util=require('util');var logger=require(_0xe8c2('0x1'))(_0xe8c2('0x2'));var moment=require(_0xe8c2('0x3'));var BPromise=require(_0xe8c2('0x4'));var rp=require(_0xe8c2('0x5'));var attributes=require(_0xe8c2('0x6'));module[_0xe8c2('0x7')]=function(_0x14de48,_0x52da4e){return _0x14de48['define'](_0xe8c2('0x8'),attributes,{'tableName':_0xe8c2('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6ecb=['bluebird','exports','define','FaxAccount','fax_accounts','lodash','util','../../config/logger','api','moment'];(function(_0x5abc26,_0x3894ca){var _0x2032c3=function(_0x4fb6f0){while(--_0x4fb6f0){_0x5abc26['push'](_0x5abc26['shift']());}};_0x2032c3(++_0x3894ca);}(_0x6ecb,0x14f));var _0xb6ec=function(_0x2c1483,_0x8cb4cb){_0x2c1483=_0x2c1483-0x0;var _0xcf67d7=_0x6ecb[_0x2c1483];return _0xcf67d7;};'use strict';var _=require(_0xb6ec('0x0'));var util=require(_0xb6ec('0x1'));var logger=require(_0xb6ec('0x2'))(_0xb6ec('0x3'));var moment=require(_0xb6ec('0x4'));var BPromise=require(_0xb6ec('0x5'));var rp=require('request-promise');var attributes=require('./faxAccount.attributes');module[_0xb6ec('0x6')]=function(_0x54a199,_0x46532d){return _0x54a199[_0xb6ec('0x7')](_0xb6ec('0x8'),attributes,{'tableName':_0xb6ec('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 60d6b33..e45b8dc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ff2=['model','map','GetFaxAccount','stringify','body','fax','CmContact','describe','Sequelize','ValidationError','no\x20available\x20attributes','difference','keys','updatedAt','createdAt','CompanyId','ListId','isNil','from','from\x20is\x20mandatory','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','account','CmList','List','Contacts','DESC','FaxApplication','Applications','get','applications','orderBy','asc','length','defaults','create','contact','FaxInteraction','Contact\x20not\x20found','spread','autoclose','push','unmanaged','*,*,*,*','created','interaction','FaxMessage','ContactId','AttachmentId','UserId','User','find','name','unshift','agent','waitForTheAssignedAgent','Start','startRouting','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','jayson/promise','http','localhost','./faxAccount.socket','register','request','then','request\x20sent','debug','FaxAccount,\x20%s,\x20%s,\x20%s','error','code','FaxAccount,\x20%s,\x20%s','message','info','result','catch','FaxAccount','findAll','options','raw','where','attributes','limit','include'];(function(_0x41e723,_0x5e6494){var _0x5cf973=function(_0x4ce435){while(--_0x4ce435){_0x41e723['push'](_0x41e723['shift']());}};_0x5cf973(++_0x5e6494);}(_0x8ff2,0xf7));var _0x28ff=function(_0x55c1f8,_0x263421){_0x55c1f8=_0x55c1f8-0x0;var _0x175312=_0x8ff2[_0x55c1f8];return _0x175312;};'use strict';var _=require(_0x28ff('0x0'));var util=require(_0x28ff('0x1'));var moment=require(_0x28ff('0x2'));var BPromise=require(_0x28ff('0x3'));var rs=require(_0x28ff('0x4'));var fs=require('fs');var db=require(_0x28ff('0x5'))['db'];var utils=require(_0x28ff('0x6'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0x28ff('0x7'));var client=jayson['client'][_0x28ff('0x8')]({'port':0x232c});var socket=require('socket.io-emitter')({'host':_0x28ff('0x9'),'port':0x18eb});require(_0x28ff('0xa'))[_0x28ff('0xb')](socket);function respondWithRpcPromise(_0x4616a3,_0x1036d8,_0x27083a){return new BPromise(function(_0x594062,_0x3cea7e){return client[_0x28ff('0xc')](_0x4616a3,_0x27083a)[_0x28ff('0xd')](function(_0x585d9e){logger['info']('FaxAccount,\x20%s,\x20%s',_0x1036d8,_0x28ff('0xe'));logger[_0x28ff('0xf')](_0x28ff('0x10'),_0x1036d8,_0x28ff('0xe'),JSON['stringify'](_0x585d9e));if(_0x585d9e['error']){if(_0x585d9e[_0x28ff('0x11')][_0x28ff('0x12')]===0x1f4){logger[_0x28ff('0x11')](_0x28ff('0x13'),_0x1036d8,_0x585d9e[_0x28ff('0x11')][_0x28ff('0x14')]);return _0x3cea7e(_0x585d9e['error'][_0x28ff('0x14')]);}logger[_0x28ff('0x11')](_0x28ff('0x13'),_0x1036d8,_0x585d9e['error'][_0x28ff('0x14')]);return _0x594062(_0x585d9e[_0x28ff('0x11')][_0x28ff('0x14')]);}else{logger[_0x28ff('0x15')](_0x28ff('0x13'),_0x1036d8,_0x28ff('0xe'));_0x594062(_0x585d9e[_0x28ff('0x16')][_0x28ff('0x14')]);}})[_0x28ff('0x17')](function(_0x1bab70){logger[_0x28ff('0x11')]('FaxAccount,\x20%s,\x20%s',_0x1036d8,_0x1bab70);_0x3cea7e(_0x1bab70);});});}exports['GetFaxAccount']=function(_0x313c23){var _0x658796=this;return new Promise(function(_0x2012b3,_0x1b9d7f){return db[_0x28ff('0x18')][_0x28ff('0x19')]({'raw':_0x313c23[_0x28ff('0x1a')]?_0x313c23['options'][_0x28ff('0x1b')]===undefined?!![]:![]:!![],'where':_0x313c23[_0x28ff('0x1a')]?_0x313c23['options'][_0x28ff('0x1c')]||null:null,'attributes':_0x313c23['options']?_0x313c23[_0x28ff('0x1a')][_0x28ff('0x1d')]||null:null,'limit':_0x313c23['options']?_0x313c23[_0x28ff('0x1a')][_0x28ff('0x1e')]||null:null,'include':_0x313c23[_0x28ff('0x1a')]?_0x313c23[_0x28ff('0x1a')][_0x28ff('0x1f')]?_['map'](_0x313c23[_0x28ff('0x1a')]['include'],function(_0x160364){return{'model':db[_0x160364['model']],'as':_0x160364['as'],'attributes':_0x160364[_0x28ff('0x1d')],'include':_0x160364[_0x28ff('0x1f')]?_['map'](_0x160364[_0x28ff('0x1f')],function(_0x3357da){return{'model':db[_0x3357da[_0x28ff('0x20')]],'as':_0x3357da['as'],'attributes':_0x3357da[_0x28ff('0x1d')],'include':_0x3357da['include']?_[_0x28ff('0x21')](_0x3357da[_0x28ff('0x1f')],function(_0x113e50){return{'model':db[_0x113e50[_0x28ff('0x20')]],'as':_0x113e50['as'],'attributes':_0x113e50[_0x28ff('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x28ff('0xd')](function(_0x5dfb26){logger[_0x28ff('0x15')]('GetFaxAccount',_0x313c23);logger[_0x28ff('0xf')](_0x28ff('0x22'),_0x313c23,JSON[_0x28ff('0x23')](_0x5dfb26));_0x2012b3(_0x5dfb26);})[_0x28ff('0x17')](function(_0x55608f){logger['error'](_0x28ff('0x22'),_0x55608f[_0x28ff('0x14')],_0x313c23);_0x1b9d7f(_0x658796[_0x28ff('0x11')](0x1f4,_0x55608f['message']));});});};exports['NotifyFaxAccount']=function(_0x23395e,_0x256249,_0x5af40d){var _0x22c0d0=this;return new Promise(function(_0x3602e0,_0x432905){var _0x24c381={'body':_0x23395e[_0x28ff('0x24')],'channel':_0x28ff('0x25')};var _0x20caa5=[];var _0x44df58=[];var _0x3365ca={};return db[_0x28ff('0x26')][_0x28ff('0x27')]()[_0x28ff('0xd')](function(_0x50dc52){if(!_0x50dc52){throw new db[(_0x28ff('0x28'))][(_0x28ff('0x29'))](_0x28ff('0x2a'));}_0x20caa5=_[_0x28ff('0x2b')](_[_0x28ff('0x2c')](_0x50dc52),['createdAt',_0x28ff('0x2d')]);_0x44df58=_[_0x28ff('0x2b')](_[_0x28ff('0x2c')](_0x50dc52),[_0x28ff('0x2e'),_0x28ff('0x2d'),_0x28ff('0x2f'),_0x28ff('0x30')]);if(_0x23395e['body']['id']){delete _0x23395e['body']['id'];}if(_[_0x28ff('0x31')](_0x23395e[_0x28ff('0x24')][_0x28ff('0x32')])){throw new db['Sequelize'][(_0x28ff('0x29'))](_0x28ff('0x33'));}if(_[_0x28ff('0x31')](_0x23395e[_0x28ff('0x24')][_0x28ff('0x24')])||_0x23395e['body'][_0x28ff('0x24')]===''){throw new db[(_0x28ff('0x28'))][(_0x28ff('0x29'))](_0x28ff('0x34'));}if(_[_0x28ff('0x31')](_0x23395e['body'][_0x28ff('0x35')])){throw new db[(_0x28ff('0x28'))][(_0x28ff('0x29'))](_0x28ff('0x36')+_0x44df58);}if(!_[_0x28ff('0x37')](_0x44df58,_0x23395e['body']['mapKey'])){throw new db[(_0x28ff('0x28'))][(_0x28ff('0x29'))](_0x28ff('0x38')+_0x44df58);}_0x3365ca[_0x23395e[_0x28ff('0x24')][_0x28ff('0x35')]]=_0x23395e[_0x28ff('0x24')]['from'];})[_0x28ff('0xd')](function(){return db[_0x28ff('0x18')]['find']({'where':{'id':_0x23395e[_0x28ff('0x39')]['id']},'include':[{'model':db[_0x28ff('0x3a')],'as':_0x28ff('0x3b'),'include':[{'model':db[_0x28ff('0x26')],'as':_0x28ff('0x3c'),'where':_0x3365ca,'limit':0x1,'order':[[_0x28ff('0x2d'),_0x28ff('0x3d')]]}]},{'model':db[_0x28ff('0x3e')],'as':_0x28ff('0x3f')}]});})[_0x28ff('0xd')](function(_0x30a645){if(_0x30a645&&_0x30a645[_0x28ff('0x3b')]){var _0x32a73c=_0x30a645[_0x28ff('0x40')]({'plain':!![]});_0x24c381[_0x28ff('0x39')]=_0x32a73c;_0x24c381[_0x28ff('0x41')]=_0x32a73c['Applications'];_0x24c381['list']=_0x32a73c['List'];_0x24c381[_0x28ff('0x41')]=_[_0x28ff('0x42')](_0x24c381[_0x28ff('0x41')],['priority'],[_0x28ff('0x43')]);if(_0x24c381[_0x28ff('0x39')][_0x28ff('0x3f')]){delete _0x24c381[_0x28ff('0x39')][_0x28ff('0x3f')];}if(_0x24c381[_0x28ff('0x39')][_0x28ff('0x3b')]&&_0x24c381[_0x28ff('0x39')][_0x28ff('0x3b')]['Contacts'][_0x28ff('0x44')]){return _0x24c381['account'][_0x28ff('0x3b')][_0x28ff('0x3c')][0x0];}var _0x16b470=_[_0x28ff('0x45')](_0x23395e[_0x28ff('0x24')],{'firstName':_0x23395e[_0x28ff('0x24')][_0x28ff('0x32')],'ListId':_0x32a73c[_0x28ff('0x30')]});_0x16b470[_0x23395e[_0x28ff('0x24')]['mapKey']]=_0x23395e[_0x28ff('0x24')][_0x28ff('0x32')];return db['CmContact'][_0x28ff('0x46')](_0x16b470,{'fields':_0x20caa5,'raw':!![]});}})[_0x28ff('0xd')](function(_0x2438b3){_0x24c381[_0x28ff('0x47')]=_0x2438b3;if(_0x2438b3){var _0x9e8ec5={'ContactId':_0x2438b3['id'],'FaxAccountId':_0x23395e['account']['id'],'fax':_0x2438b3[_0x28ff('0x25')]};return db[_0x28ff('0x48')]['find']({'where':{'ContactId':_0x2438b3['id'],'closed':![],'FaxAccountId':_0x23395e[_0x28ff('0x39')]['id']}})[_0x28ff('0xd')](function(_0x144d87){if(_0x144d87){return[_0x144d87,![]];}return db['FaxInteraction'][_0x28ff('0x46')](_0x9e8ec5)[_0x28ff('0xd')](function(_0x5295fa){return[_0x5295fa,!![]];});});}else{throw new Error(_0x28ff('0x49'));}})[_0x28ff('0x4a')](function(_0x37c8b0,_0x104d54){var _0x4de9a2=_0x37c8b0['get']({'plain':!![]});if(_0x104d54){if(_0x24c381[_0x28ff('0x39')][_0x28ff('0x4b')]){_0x24c381[_0x28ff('0x41')][_0x28ff('0x4c')]({'id':0x0,'priority':_0x24c381[_0x28ff('0x41')][_0x28ff('0x44')]+0x1,'app':'close','appdata':_0x28ff('0x4d'),'interval':_0x28ff('0x4e')});}_0x4de9a2[_0x28ff('0x4f')]=!![];}else{_0x4de9a2[_0x28ff('0x4f')]=![];}_0x24c381[_0x28ff('0x50')]=_0x4de9a2;return db[_0x28ff('0x51')][_0x28ff('0x46')]({'body':_0x23395e['body'][_0x28ff('0x24')],'FaxAccountId':_0x23395e['account']['id'],'FaxInteractionId':_0x37c8b0['id'],'direction':'in','ContactId':_0x37c8b0[_0x28ff('0x52')],'AttachmentId':_0x23395e[_0x28ff('0x24')][_0x28ff('0x53')]});})['then'](function(_0x33ce29){_0x24c381[_0x28ff('0x14')]=_0x33ce29;if(_0x24c381[_0x28ff('0x50')][_0x28ff('0x54')]){return db[_0x28ff('0x55')][_0x28ff('0x56')]({'attributes':['id',_0x28ff('0x57')],'where':{'id':_0x24c381['interaction'][_0x28ff('0x54')]}})[_0x28ff('0xd')](function(_0x31fbcf){if(_0x31fbcf){_0x24c381[_0x28ff('0x41')][_0x28ff('0x58')]({'id':0x0,'priority':0x0,'app':_0x28ff('0x59'),'appdata':_0x31fbcf[_0x28ff('0x57')]+','+(_0x24c381['account'][_0x28ff('0x5a')]||0xa),'interval':_0x28ff('0x4e')});}return respondWithRpcPromise(_0x28ff('0x5b'),_0x28ff('0x5c'),_0x24c381);});}return respondWithRpcPromise(_0x28ff('0x5b'),'startRouting',_0x24c381);})['then'](function(_0x173ab6){_0x3602e0(_0x173ab6);})['catch'](function(_0x1e389c){_0x432905(_0x22c0d0['error'](0x1f4,_0x1e389c[_0x28ff('0x14')]));});});};
\ No newline at end of file
+var _0xa340=['GetFaxAccount','FaxAccount','findAll','raw','options','where','attributes','limit','model','map','include','NotifyFaxAccount','body','fax','CmContact','ValidationError','no\x20available\x20attributes','keys','createdAt','updatedAt','difference','CompanyId','from','Sequelize','from\x20is\x20mandatory','isNil','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','find','account','Contacts','DESC','Applications','List','applications','list','orderBy','priority','asc','length','defaults','ListId','contact','FaxInteraction','create','Contact\x20not\x20found','spread','get','autoclose','push','close','unmanaged','*,*,*,*','created','interaction','FaxMessage','ContactId','AttachmentId','UserId','User','name','unshift','waitForTheAssignedAgent','Start','startRouting','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http','socket.io-emitter','localhost','./faxAccount.socket','register','request','then','info','request\x20sent','debug','FaxAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','FaxAccount,\x20%s,\x20%s','message','catch'];(function(_0x203d64,_0x1ec79c){var _0x462ab3=function(_0x55ee6e){while(--_0x55ee6e){_0x203d64['push'](_0x203d64['shift']());}};_0x462ab3(++_0x1ec79c);}(_0xa340,0x1b1));var _0x0a34=function(_0x15e86d,_0x19f542){_0x15e86d=_0x15e86d-0x0;var _0x1905c2=_0xa340[_0x15e86d];return _0x1905c2;};'use strict';var _=require(_0x0a34('0x0'));var util=require(_0x0a34('0x1'));var moment=require(_0x0a34('0x2'));var BPromise=require(_0x0a34('0x3'));var rs=require(_0x0a34('0x4'));var fs=require('fs');var db=require(_0x0a34('0x5'))['db'];var utils=require(_0x0a34('0x6'));var logger=require('../../config/logger')(_0x0a34('0x7'));var config=require(_0x0a34('0x8'));var jayson=require(_0x0a34('0x9'));var client=jayson['client'][_0x0a34('0xa')]({'port':0x232c});var socket=require(_0x0a34('0xb'))({'host':_0x0a34('0xc'),'port':0x18eb});require(_0x0a34('0xd'))[_0x0a34('0xe')](socket);function respondWithRpcPromise(_0x49f5cd,_0x1d1f86,_0x5d7335){return new BPromise(function(_0x44c00e,_0x25c1e9){return client[_0x0a34('0xf')](_0x49f5cd,_0x5d7335)[_0x0a34('0x10')](function(_0x4d7e78){logger[_0x0a34('0x11')]('FaxAccount,\x20%s,\x20%s',_0x1d1f86,_0x0a34('0x12'));logger[_0x0a34('0x13')](_0x0a34('0x14'),_0x1d1f86,_0x0a34('0x12'),JSON[_0x0a34('0x15')](_0x4d7e78));if(_0x4d7e78[_0x0a34('0x16')]){if(_0x4d7e78[_0x0a34('0x16')][_0x0a34('0x17')]===0x1f4){logger[_0x0a34('0x16')](_0x0a34('0x18'),_0x1d1f86,_0x4d7e78[_0x0a34('0x16')][_0x0a34('0x19')]);return _0x25c1e9(_0x4d7e78[_0x0a34('0x16')][_0x0a34('0x19')]);}logger['error'](_0x0a34('0x18'),_0x1d1f86,_0x4d7e78[_0x0a34('0x16')][_0x0a34('0x19')]);return _0x44c00e(_0x4d7e78[_0x0a34('0x16')]['message']);}else{logger['info']('FaxAccount,\x20%s,\x20%s',_0x1d1f86,_0x0a34('0x12'));_0x44c00e(_0x4d7e78['result'][_0x0a34('0x19')]);}})[_0x0a34('0x1a')](function(_0x2f5d87){logger[_0x0a34('0x16')](_0x0a34('0x18'),_0x1d1f86,_0x2f5d87);_0x25c1e9(_0x2f5d87);});});}exports[_0x0a34('0x1b')]=function(_0x18ff41){var _0x45dd17=this;return new Promise(function(_0x31193e,_0x5edd84){return db[_0x0a34('0x1c')][_0x0a34('0x1d')]({'raw':_0x18ff41['options']?_0x18ff41['options'][_0x0a34('0x1e')]===undefined?!![]:![]:!![],'where':_0x18ff41[_0x0a34('0x1f')]?_0x18ff41[_0x0a34('0x1f')][_0x0a34('0x20')]||null:null,'attributes':_0x18ff41[_0x0a34('0x1f')]?_0x18ff41[_0x0a34('0x1f')][_0x0a34('0x21')]||null:null,'limit':_0x18ff41[_0x0a34('0x1f')]?_0x18ff41[_0x0a34('0x1f')][_0x0a34('0x22')]||null:null,'include':_0x18ff41['options']?_0x18ff41[_0x0a34('0x1f')]['include']?_['map'](_0x18ff41[_0x0a34('0x1f')]['include'],function(_0x22ca51){return{'model':db[_0x22ca51[_0x0a34('0x23')]],'as':_0x22ca51['as'],'attributes':_0x22ca51[_0x0a34('0x21')],'include':_0x22ca51['include']?_[_0x0a34('0x24')](_0x22ca51['include'],function(_0x2ddcdd){return{'model':db[_0x2ddcdd[_0x0a34('0x23')]],'as':_0x2ddcdd['as'],'attributes':_0x2ddcdd[_0x0a34('0x21')],'include':_0x2ddcdd['include']?_['map'](_0x2ddcdd[_0x0a34('0x25')],function(_0x43b12a){return{'model':db[_0x43b12a[_0x0a34('0x23')]],'as':_0x43b12a['as'],'attributes':_0x43b12a['attributes']};}):[]};}):[]};}):[]:[]})[_0x0a34('0x10')](function(_0x215518){logger[_0x0a34('0x11')]('GetFaxAccount',_0x18ff41);logger[_0x0a34('0x13')](_0x0a34('0x1b'),_0x18ff41,JSON[_0x0a34('0x15')](_0x215518));_0x31193e(_0x215518);})['catch'](function(_0x574362){logger['error'](_0x0a34('0x1b'),_0x574362[_0x0a34('0x19')],_0x18ff41);_0x5edd84(_0x45dd17[_0x0a34('0x16')](0x1f4,_0x574362[_0x0a34('0x19')]));});});};exports[_0x0a34('0x26')]=function(_0x571c0b,_0x391a08,_0x4b7bd6){var _0x16f49b=this;return new Promise(function(_0x18aac7,_0x17d884){var _0x15ea4c={'body':_0x571c0b[_0x0a34('0x27')],'channel':_0x0a34('0x28')};var _0x5d51ae=[];var _0x2f68e7=[];var _0x5ecda0={};return db[_0x0a34('0x29')]['describe']()[_0x0a34('0x10')](function(_0x236680){if(!_0x236680){throw new db['Sequelize'][(_0x0a34('0x2a'))](_0x0a34('0x2b'));}_0x5d51ae=_['difference'](_[_0x0a34('0x2c')](_0x236680),[_0x0a34('0x2d'),_0x0a34('0x2e')]);_0x2f68e7=_[_0x0a34('0x2f')](_['keys'](_0x236680),['createdAt','updatedAt',_0x0a34('0x30'),'ListId']);if(_0x571c0b['body']['id']){delete _0x571c0b[_0x0a34('0x27')]['id'];}if(_['isNil'](_0x571c0b[_0x0a34('0x27')][_0x0a34('0x31')])){throw new db[(_0x0a34('0x32'))][(_0x0a34('0x2a'))](_0x0a34('0x33'));}if(_[_0x0a34('0x34')](_0x571c0b['body'][_0x0a34('0x27')])||_0x571c0b[_0x0a34('0x27')][_0x0a34('0x27')]===''){throw new db['Sequelize'][(_0x0a34('0x2a'))]('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0x0a34('0x34')](_0x571c0b[_0x0a34('0x27')][_0x0a34('0x35')])){throw new db['Sequelize'][(_0x0a34('0x2a'))](_0x0a34('0x36')+_0x2f68e7);}if(!_['includes'](_0x2f68e7,_0x571c0b[_0x0a34('0x27')][_0x0a34('0x35')])){throw new db[(_0x0a34('0x32'))][(_0x0a34('0x2a'))]('mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x2f68e7);}_0x5ecda0[_0x571c0b[_0x0a34('0x27')][_0x0a34('0x35')]]=_0x571c0b['body']['from'];})[_0x0a34('0x10')](function(){return db['FaxAccount'][_0x0a34('0x37')]({'where':{'id':_0x571c0b[_0x0a34('0x38')]['id']},'include':[{'model':db['CmList'],'as':'List','include':[{'model':db['CmContact'],'as':_0x0a34('0x39'),'where':_0x5ecda0,'limit':0x1,'order':[['updatedAt',_0x0a34('0x3a')]]}]},{'model':db['FaxApplication'],'as':_0x0a34('0x3b')}]});})['then'](function(_0x39cff8){if(_0x39cff8&&_0x39cff8[_0x0a34('0x3c')]){var _0x347ff0=_0x39cff8['get']({'plain':!![]});_0x15ea4c[_0x0a34('0x38')]=_0x347ff0;_0x15ea4c[_0x0a34('0x3d')]=_0x347ff0[_0x0a34('0x3b')];_0x15ea4c[_0x0a34('0x3e')]=_0x347ff0[_0x0a34('0x3c')];_0x15ea4c[_0x0a34('0x3d')]=_[_0x0a34('0x3f')](_0x15ea4c[_0x0a34('0x3d')],[_0x0a34('0x40')],[_0x0a34('0x41')]);if(_0x15ea4c[_0x0a34('0x38')][_0x0a34('0x3b')]){delete _0x15ea4c['account']['Applications'];}if(_0x15ea4c[_0x0a34('0x38')][_0x0a34('0x3c')]&&_0x15ea4c[_0x0a34('0x38')][_0x0a34('0x3c')][_0x0a34('0x39')][_0x0a34('0x42')]){return _0x15ea4c[_0x0a34('0x38')][_0x0a34('0x3c')]['Contacts'][0x0];}var _0x44a2cd=_[_0x0a34('0x43')](_0x571c0b['body'],{'firstName':_0x571c0b[_0x0a34('0x27')][_0x0a34('0x31')],'ListId':_0x347ff0[_0x0a34('0x44')]});_0x44a2cd[_0x571c0b[_0x0a34('0x27')][_0x0a34('0x35')]]=_0x571c0b[_0x0a34('0x27')][_0x0a34('0x31')];return db[_0x0a34('0x29')]['create'](_0x44a2cd,{'fields':_0x5d51ae,'raw':!![]});}})['then'](function(_0x21ece1){_0x15ea4c[_0x0a34('0x45')]=_0x21ece1;if(_0x21ece1){var _0x2f6d1e={'ContactId':_0x21ece1['id'],'FaxAccountId':_0x571c0b['account']['id'],'fax':_0x21ece1[_0x0a34('0x28')]};return db[_0x0a34('0x46')][_0x0a34('0x37')]({'where':{'ContactId':_0x21ece1['id'],'closed':![],'FaxAccountId':_0x571c0b[_0x0a34('0x38')]['id']}})['then'](function(_0x4dd3e6){if(_0x4dd3e6){return[_0x4dd3e6,![]];}return db['FaxInteraction'][_0x0a34('0x47')](_0x2f6d1e)['then'](function(_0x518a40){return[_0x518a40,!![]];});});}else{throw new Error(_0x0a34('0x48'));}})[_0x0a34('0x49')](function(_0x352a96,_0x39cb9b){var _0x42d6d7=_0x352a96[_0x0a34('0x4a')]({'plain':!![]});if(_0x39cb9b){if(_0x15ea4c[_0x0a34('0x38')][_0x0a34('0x4b')]){_0x15ea4c[_0x0a34('0x3d')][_0x0a34('0x4c')]({'id':0x0,'priority':_0x15ea4c['applications'][_0x0a34('0x42')]+0x1,'app':_0x0a34('0x4d'),'appdata':_0x0a34('0x4e'),'interval':_0x0a34('0x4f')});}_0x42d6d7[_0x0a34('0x50')]=!![];}else{_0x42d6d7[_0x0a34('0x50')]=![];}_0x15ea4c[_0x0a34('0x51')]=_0x42d6d7;return db[_0x0a34('0x52')][_0x0a34('0x47')]({'body':_0x571c0b[_0x0a34('0x27')][_0x0a34('0x27')],'FaxAccountId':_0x571c0b['account']['id'],'FaxInteractionId':_0x352a96['id'],'direction':'in','ContactId':_0x352a96[_0x0a34('0x53')],'AttachmentId':_0x571c0b['body'][_0x0a34('0x54')]});})[_0x0a34('0x10')](function(_0x5deb60){_0x15ea4c['message']=_0x5deb60;if(_0x15ea4c[_0x0a34('0x51')][_0x0a34('0x55')]){return db[_0x0a34('0x56')]['find']({'attributes':['id',_0x0a34('0x57')],'where':{'id':_0x15ea4c[_0x0a34('0x51')][_0x0a34('0x55')]}})['then'](function(_0x183b11){if(_0x183b11){_0x15ea4c[_0x0a34('0x3d')][_0x0a34('0x58')]({'id':0x0,'priority':0x0,'app':'agent','appdata':_0x183b11['name']+','+(_0x15ea4c[_0x0a34('0x38')][_0x0a34('0x59')]||0xa),'interval':'*,*,*,*'});}return respondWithRpcPromise(_0x0a34('0x5a'),'startRouting',_0x15ea4c);});}return respondWithRpcPromise(_0x0a34('0x5a'),_0x0a34('0x5b'),_0x15ea4c);})[_0x0a34('0x10')](function(_0x2b2511){_0x18aac7(_0x2b2511);})[_0x0a34('0x1a')](function(_0x1e5d11){_0x17d884(_0x16f49b[_0x0a34('0x16')](0x1f4,_0x1e5d11['message']));});});};
\ No newline at end of file
index 975c1bc..a08737e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6baf=['emit','register','length','faxAccount:','./faxAccount.events','remove','update'];(function(_0xdf8238,_0x279605){var _0x40451c=function(_0x2c28d7){while(--_0x2c28d7){_0xdf8238['push'](_0xdf8238['shift']());}};_0x40451c(++_0x279605);}(_0x6baf,0x1d9));var _0xf6ba=function(_0x147764,_0x26207b){_0x147764=_0x147764-0x0;var _0x5de8a3=_0x6baf[_0x147764];return _0x5de8a3;};'use strict';var FaxAccountEvents=require(_0xf6ba('0x0'));var events=['save',_0xf6ba('0x1'),_0xf6ba('0x2')];function createListener(_0x2c0623,_0x18c40c){return function(_0x87146b){_0x18c40c[_0xf6ba('0x3')](_0x2c0623,_0x87146b);};}function removeListener(_0x1f8ea7,_0x5cd71d){return function(){FaxAccountEvents['removeListener'](_0x1f8ea7,_0x5cd71d);};}exports[_0xf6ba('0x4')]=function(_0x5e0072){for(var _0x213915=0x0,_0x126090=events[_0xf6ba('0x5')];_0x213915<_0x126090;_0x213915++){var _0x451b57=events[_0x213915];var _0x300a43=createListener(_0xf6ba('0x6')+_0x451b57,_0x5e0072);FaxAccountEvents['on'](_0x451b57,_0x300a43);}};
\ No newline at end of file
+var _0x7a86=['save','remove','update','emit','removeListener','length','faxAccount:'];(function(_0x3ff86f,_0x2a2e39){var _0x4255aa=function(_0x39d152){while(--_0x39d152){_0x3ff86f['push'](_0x3ff86f['shift']());}};_0x4255aa(++_0x2a2e39);}(_0x7a86,0x157));var _0x67a8=function(_0x5643e7,_0x5b31b8){_0x5643e7=_0x5643e7-0x0;var _0x12d1ca=_0x7a86[_0x5643e7];return _0x12d1ca;};'use strict';var FaxAccountEvents=require('./faxAccount.events');var events=[_0x67a8('0x0'),_0x67a8('0x1'),_0x67a8('0x2')];function createListener(_0x5c5077,_0xd124a){return function(_0x145cca){_0xd124a[_0x67a8('0x3')](_0x5c5077,_0x145cca);};}function removeListener(_0x195058,_0x267828){return function(){FaxAccountEvents[_0x67a8('0x4')](_0x195058,_0x267828);};}exports['register']=function(_0x3fb073){for(var _0x20fcde=0x0,_0x48b317=events[_0x67a8('0x5')];_0x20fcde<_0x48b317;_0x20fcde++){var _0x200868=events[_0x20fcde];var _0x50392f=createListener(_0x67a8('0x6')+_0x200868,_0x3fb073);FaxAccountEvents['on'](_0x200868,_0x50392f);}};
\ No newline at end of file
index fe2d250..f552e41 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe0d5=['describe','/:id','show','/:id/dispositions','getDispositions','/:id/canned_answers','/:id/interactions','getInteractions','/:id/applications','getApplications','/:id/messages','getMessages','/:id/users','getAgents','post','addDisposition','addInteraction','addApplications','/addaccountapplications','send','put','update','delete','removeDispositions','removeAnswers','removeAgents','exports','multer','util','path','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxAccount.controller','get','isAuthenticated','index','/describe'];(function(_0x403ca6,_0x24e284){var _0x4e0e05=function(_0x3a76ba){while(--_0x3a76ba){_0x403ca6['push'](_0x403ca6['shift']());}};_0x4e0e05(++_0x24e284);}(_0xe0d5,0xb3));var _0x5e0d=function(_0x55e94c,_0x4a1dd4){_0x55e94c=_0x55e94c-0x0;var _0x3dd9d6=_0xe0d5[_0x55e94c];return _0x3dd9d6;};'use strict';var multer=require(_0x5e0d('0x0'));var util=require(_0x5e0d('0x1'));var path=require(_0x5e0d('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x5e0d('0x3'));var interaction=require(_0x5e0d('0x4'));var config=require(_0x5e0d('0x5'));var controller=require(_0x5e0d('0x6'));router[_0x5e0d('0x7')]('/',auth[_0x5e0d('0x8')](),controller[_0x5e0d('0x9')]);router[_0x5e0d('0x7')](_0x5e0d('0xa'),auth['isAuthenticated'](),controller[_0x5e0d('0xb')]);router[_0x5e0d('0x7')](_0x5e0d('0xc'),auth[_0x5e0d('0x8')](),controller[_0x5e0d('0xd')]);router[_0x5e0d('0x7')](_0x5e0d('0xe'),auth['isAuthenticated'](),controller[_0x5e0d('0xf')]);router[_0x5e0d('0x7')](_0x5e0d('0x10'),auth[_0x5e0d('0x8')](),controller['getAnswers']);router[_0x5e0d('0x7')](_0x5e0d('0x11'),auth[_0x5e0d('0x8')](),controller[_0x5e0d('0x12')]);router[_0x5e0d('0x7')](_0x5e0d('0x13'),auth[_0x5e0d('0x8')](),controller[_0x5e0d('0x14')]);router['get'](_0x5e0d('0x15'),auth[_0x5e0d('0x8')](),controller[_0x5e0d('0x16')]);router[_0x5e0d('0x7')](_0x5e0d('0x17'),auth['isAuthenticated'](),controller[_0x5e0d('0x18')]);router['post']('/',auth[_0x5e0d('0x8')](),controller['create']);router[_0x5e0d('0x19')](_0x5e0d('0xe'),auth[_0x5e0d('0x8')](),controller[_0x5e0d('0x1a')]);router['post'](_0x5e0d('0x10'),auth[_0x5e0d('0x8')](),controller['addAnswer']);router[_0x5e0d('0x19')](_0x5e0d('0x11'),auth['isAuthenticated'](),controller[_0x5e0d('0x1b')]);router[_0x5e0d('0x19')](_0x5e0d('0x13'),auth['isAuthenticated'](),controller[_0x5e0d('0x1c')]);router[_0x5e0d('0x19')](_0x5e0d('0x1d'),auth[_0x5e0d('0x8')](),controller['addAccountApplications']);router['post']('/updateaccountapplications',auth[_0x5e0d('0x8')](),controller['updateAccountApplications']);router[_0x5e0d('0x19')]('/:id/send',auth['isAuthenticated'](),controller[_0x5e0d('0x1e')]);router[_0x5e0d('0x19')](_0x5e0d('0x17'),auth[_0x5e0d('0x8')](),controller['addAgents']);router[_0x5e0d('0x1f')](_0x5e0d('0xc'),auth[_0x5e0d('0x8')](),controller[_0x5e0d('0x20')]);router[_0x5e0d('0x21')](_0x5e0d('0xc'),auth[_0x5e0d('0x8')](),controller['destroy']);router[_0x5e0d('0x21')](_0x5e0d('0xe'),auth[_0x5e0d('0x8')](),controller[_0x5e0d('0x22')]);router[_0x5e0d('0x21')](_0x5e0d('0x10'),auth['isAuthenticated'](),controller[_0x5e0d('0x23')]);router[_0x5e0d('0x21')]('/:id/users',auth[_0x5e0d('0x8')](),controller[_0x5e0d('0x24')]);module[_0x5e0d('0x25')]=router;
\ No newline at end of file
+var _0xe5f0=['/:id/canned_answers','getAnswers','/:id/interactions','getInteractions','/:id/applications','getApplications','/:id/messages','getMessages','/:id/users','getAgents','post','create','addDisposition','addInteraction','addApplications','/addaccountapplications','/updateaccountapplications','updateAccountApplications','/:id/send','addAgents','put','update','delete','destroy','removeDispositions','removeAnswers','removeAgents','exports','util','path','../../components/auth/service','../../config/environment','get','isAuthenticated','/:id','/:id/dispositions','getDispositions'];(function(_0x2859a9,_0x4f3d52){var _0x211886=function(_0x25bbed){while(--_0x25bbed){_0x2859a9['push'](_0x2859a9['shift']());}};_0x211886(++_0x4f3d52);}(_0xe5f0,0x11f));var _0x0e5f=function(_0x4d3410,_0x242200){_0x4d3410=_0x4d3410-0x0;var _0x2321d8=_0xe5f0[_0x4d3410];return _0x2321d8;};'use strict';var multer=require('multer');var util=require(_0x0e5f('0x0'));var path=require(_0x0e5f('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0x0e5f('0x2'));var interaction=require('../../components/interaction/service');var config=require(_0x0e5f('0x3'));var controller=require('./faxAccount.controller');router[_0x0e5f('0x4')]('/',auth[_0x0e5f('0x5')](),controller['index']);router[_0x0e5f('0x4')]('/describe',auth['isAuthenticated'](),controller['describe']);router[_0x0e5f('0x4')](_0x0e5f('0x6'),auth[_0x0e5f('0x5')](),controller['show']);router[_0x0e5f('0x4')](_0x0e5f('0x7'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x8')]);router[_0x0e5f('0x4')](_0x0e5f('0x9'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0xa')]);router['get'](_0x0e5f('0xb'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0xc')]);router[_0x0e5f('0x4')](_0x0e5f('0xd'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0xe')]);router[_0x0e5f('0x4')](_0x0e5f('0xf'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x10')]);router[_0x0e5f('0x4')](_0x0e5f('0x11'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x12')]);router[_0x0e5f('0x13')]('/',auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x14')]);router[_0x0e5f('0x13')](_0x0e5f('0x7'),auth['isAuthenticated'](),controller[_0x0e5f('0x15')]);router[_0x0e5f('0x13')](_0x0e5f('0x9'),auth[_0x0e5f('0x5')](),controller['addAnswer']);router[_0x0e5f('0x13')](_0x0e5f('0xb'),auth['isAuthenticated'](),controller[_0x0e5f('0x16')]);router[_0x0e5f('0x13')]('/:id/applications',auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x17')]);router[_0x0e5f('0x13')](_0x0e5f('0x18'),auth[_0x0e5f('0x5')](),controller['addAccountApplications']);router[_0x0e5f('0x13')](_0x0e5f('0x19'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x1a')]);router[_0x0e5f('0x13')](_0x0e5f('0x1b'),auth[_0x0e5f('0x5')](),controller['send']);router['post']('/:id/users',auth['isAuthenticated'](),controller[_0x0e5f('0x1c')]);router[_0x0e5f('0x1d')](_0x0e5f('0x6'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x1e')]);router[_0x0e5f('0x1f')](_0x0e5f('0x6'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x20')]);router['delete'](_0x0e5f('0x7'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x21')]);router[_0x0e5f('0x1f')](_0x0e5f('0x9'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x22')]);router[_0x0e5f('0x1f')](_0x0e5f('0x11'),auth[_0x0e5f('0x5')](),controller[_0x0e5f('0x23')]);module[_0x0e5f('0x24')]=router;
\ No newline at end of file
index fc69d18..59fd794 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x392b=['sequelize','exports','noop','STRING','*,*,*,*'];(function(_0x22d82e,_0x14ba30){var _0x6f441d=function(_0x22a025){while(--_0x22a025){_0x22d82e['push'](_0x22d82e['shift']());}};_0x6f441d(++_0x14ba30);}(_0x392b,0x1db));var _0xb392=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x392b[_0x19e35c];return _0x3e1fe8;};'use strict';var Sequelize=require(_0xb392('0x0'));module[_0xb392('0x1')]={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xb392('0x2')},'appdata':{'type':Sequelize['STRING'](0x1000),'defaultValue':''},'description':{'type':Sequelize[_0xb392('0x3')]},'interval':{'type':Sequelize[_0xb392('0x3')],'defaultValue':_0xb392('0x4')}};
\ No newline at end of file
+var _0x2072=['STRING','noop','*,*,*,*','sequelize','exports'];(function(_0x6b76ec,_0x2f0f6e){var _0x5552c0=function(_0x2b16d3){while(--_0x2b16d3){_0x6b76ec['push'](_0x6b76ec['shift']());}};_0x5552c0(++_0x2f0f6e);}(_0x2072,0x1e8));var _0x2207=function(_0x3ce8c9,_0x2ccfaa){_0x3ce8c9=_0x3ce8c9-0x0;var _0x184215=_0x2072[_0x3ce8c9];return _0x184215;};'use strict';var Sequelize=require(_0x2207('0x0'));module[_0x2207('0x1')]={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize[_0x2207('0x2')],'allowNull':![],'defaultValue':_0x2207('0x3')},'appdata':{'type':Sequelize[_0x2207('0x2')](0x1000),'defaultValue':''},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize['STRING'],'defaultValue':_0x2207('0x4')}};
\ No newline at end of file
index 92ca7a9..df5b687 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x22ec=['find','fast-json-patch','request-promise','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/environment','sendStatus','end','json','count','offset','limit','status','Content-Range','reject','save','update','then','destroy','error','stack','name','send','index','FaxApplication','model','dateStart','query','dateEnd','keys','filters','attributes','intersection','fields','length','hasOwnProperty','order','sort','pick','add','day','merge','where','map','filter','includeAll','include','findAll','rows','catch','show','params','rawAttributes','options','create','body'];(function(_0x38b346,_0x1471d6){var _0x94b5fd=function(_0x1f32a9){while(--_0x1f32a9){_0x38b346['push'](_0x38b346['shift']());}};_0x94b5fd(++_0x1471d6);}(_0x22ec,0xcd));var _0xc22e=function(_0x2d2de6,_0x1f42c4){_0x2d2de6=_0x2d2de6-0x0;var _0x45b8c6=_0x22ec[_0x2d2de6];return _0x45b8c6;};'use strict';var jsonpatch=require(_0xc22e('0x0'));var rp=require(_0xc22e('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xc22e('0x2'));var util=require(_0xc22e('0x3'));var path=require(_0xc22e('0x4'));var sox=require(_0xc22e('0x5'));var csv=require(_0xc22e('0x6'));var ejs=require(_0xc22e('0x7'));var fs=require('fs');var _=require(_0xc22e('0x8'));var squel=require('squel');var crypto=require(_0xc22e('0x9'));var jsforce=require(_0xc22e('0xa'));var deskjs=require(_0xc22e('0xb'));var toCsv=require(_0xc22e('0x6'));var querystring=require(_0xc22e('0xc'));var Papa=require(_0xc22e('0xd'));var qs=require(_0xc22e('0xe'));var logger=require(_0xc22e('0xf'))('api');var utils=require('../../config/utils');var config=require(_0xc22e('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x543e54,_0x4fa9b7){_0x4fa9b7=_0x4fa9b7||0xcc;return function(_0x2f62cd){if(_0x2f62cd){return _0x543e54[_0xc22e('0x11')](_0x4fa9b7);}return _0x543e54['status'](_0x4fa9b7)[_0xc22e('0x12')]();};}function respondWithResult(_0xaaef95,_0x534f36){_0x534f36=_0x534f36||0xc8;return function(_0x370f62){if(_0x370f62){return _0xaaef95['status'](_0x534f36)[_0xc22e('0x13')](_0x370f62);}};}function respondWithFilteredResult(_0x4d9822,_0x5417ef){return function(_0x1073e0){if(_0x1073e0){var _0x5c4457=_0x1073e0[_0xc22e('0x14')],_0x3b8ed3=_0x5417ef[_0xc22e('0x15')],_0x34d377=_0x5417ef[_0xc22e('0x15')]+_0x5417ef[_0xc22e('0x16')],_0x33a2b9;if(_0x34d377>=_0x5c4457){_0x34d377=_0x5c4457;_0x33a2b9=0xc8;}else{_0x33a2b9=0xce;}_0x4d9822[_0xc22e('0x17')](_0x33a2b9);return _0x4d9822['set'](_0xc22e('0x18'),_0x3b8ed3+'-'+_0x34d377+'/'+_0x5c4457)[_0xc22e('0x13')](_0x1073e0);}return null;};}function patchUpdates(_0x3bd1a7){return function(_0x38eca5){try{jsonpatch['apply'](_0x38eca5,_0x3bd1a7,!![]);}catch(_0x162c2c){return BPromise[_0xc22e('0x19')](_0x162c2c);}return _0x38eca5[_0xc22e('0x1a')]();};}function saveUpdates(_0x4adac5,_0x540873){return function(_0x355da2){if(_0x355da2){return _0x355da2[_0xc22e('0x1b')](_0x4adac5)[_0xc22e('0x1c')](function(_0x30ff2e){return _0x30ff2e;});}return null;};}function removeEntity(_0x733adb,_0x515efc){return function(_0x24158c){if(_0x24158c){return _0x24158c[_0xc22e('0x1d')]()[_0xc22e('0x1c')](function(){_0x733adb[_0xc22e('0x17')](0xcc)[_0xc22e('0x12')]();});}};}function handleEntityNotFound(_0x23e889,_0x589441){return function(_0x50d380){if(!_0x50d380){_0x23e889[_0xc22e('0x11')](0x194);}return _0x50d380;};}function handleError(_0x7068bd,_0x3372a5){_0x3372a5=_0x3372a5||0x1f4;return function(_0x53dec8){logger[_0xc22e('0x1e')](_0x53dec8[_0xc22e('0x1f')]);if(_0x53dec8[_0xc22e('0x20')]){delete _0x53dec8[_0xc22e('0x20')];}_0x7068bd[_0xc22e('0x17')](_0x3372a5)[_0xc22e('0x21')](_0x53dec8);};}exports[_0xc22e('0x22')]=function(_0x12544d,_0x575439){var _0x20430d={},_0x223de0={},_0x51040e={'count':0x0,'rows':[]};var _0x8a35db=db[_0xc22e('0x23')]['rawAttributes'];_0x223de0[_0xc22e('0x24')]=_['keys'](_0x8a35db);var _0x73bd66={'dateStart':_0x12544d['query'][_0xc22e('0x25')],'dateEnd':_0x12544d[_0xc22e('0x26')][_0xc22e('0x27')]};delete _0x12544d[_0xc22e('0x26')]['dateStart'];delete _0x12544d['query'][_0xc22e('0x27')];_0x223de0['query']=_[_0xc22e('0x28')](_0x12544d[_0xc22e('0x26')]);_0x223de0[_0xc22e('0x29')]=_['intersection'](_0x223de0[_0xc22e('0x24')],_0x223de0[_0xc22e('0x26')]);_0x20430d[_0xc22e('0x2a')]=_[_0xc22e('0x2b')](_0x223de0[_0xc22e('0x24')],qs[_0xc22e('0x2c')](_0x12544d['query'][_0xc22e('0x2c')]));_0x20430d[_0xc22e('0x2a')]=_0x20430d['attributes'][_0xc22e('0x2d')]?_0x20430d['attributes']:_0x223de0[_0xc22e('0x24')];if(!_0x12544d[_0xc22e('0x26')][_0xc22e('0x2e')]('nolimit')){_0x20430d[_0xc22e('0x16')]=qs['limit'](_0x12544d[_0xc22e('0x26')][_0xc22e('0x16')]);_0x20430d[_0xc22e('0x15')]=qs[_0xc22e('0x15')](_0x12544d[_0xc22e('0x26')]['offset']);}_0x20430d[_0xc22e('0x2f')]=qs[_0xc22e('0x30')](_0x12544d[_0xc22e('0x26')][_0xc22e('0x30')]);_0x20430d['where']=qs['filters'](_[_0xc22e('0x31')](_0x12544d[_0xc22e('0x26')],_0x223de0[_0xc22e('0x29')]));if(_0x73bd66['dateStart']){if(_0x73bd66['dateEnd']){_0x73bd66['dateEnd']=moment(_0x73bd66['dateEnd'])[_0xc22e('0x32')](0x1,_0xc22e('0x33'));}else{_0x73bd66['dateEnd']=moment(_0x73bd66[_0xc22e('0x25')])[_0xc22e('0x32')](0x1,'day');}_[_0xc22e('0x34')](_0x20430d[_0xc22e('0x35')],{'createdAt':{'$gte':_0x73bd66['dateStart'],'$lte':_0x73bd66[_0xc22e('0x27')]}});}if(_0x12544d['query']['filter']){_0x20430d['where']=_['merge'](_0x20430d[_0xc22e('0x35')],{'$or':_[_0xc22e('0x36')](_0x20430d[_0xc22e('0x2a')],function(_0x54d0ef){var _0x56fdd6={};_0x56fdd6[_0x54d0ef]={'$like':'%'+_0x12544d[_0xc22e('0x26')][_0xc22e('0x37')]+'%'};return _0x56fdd6;})});}_0x20430d=_[_0xc22e('0x34')]({},_0x20430d,_0x12544d['options']);var _0x49060c={'where':_0x20430d['where']};return db['FaxApplication'][_0xc22e('0x14')](_0x49060c)[_0xc22e('0x1c')](function(_0x6fcb70){_0x51040e[_0xc22e('0x14')]=_0x6fcb70;if(_0x12544d['query'][_0xc22e('0x38')]){_0x20430d[_0xc22e('0x39')]=[{'all':!![]}];}return db[_0xc22e('0x23')][_0xc22e('0x3a')](_0x20430d);})[_0xc22e('0x1c')](function(_0x3d5afd){_0x51040e[_0xc22e('0x3b')]=_0x3d5afd;return _0x51040e;})['then'](respondWithFilteredResult(_0x575439,_0x20430d))[_0xc22e('0x3c')](handleError(_0x575439,null));};exports[_0xc22e('0x3d')]=function(_0x5761cf,_0x3200a2){var _0x38fc14={'raw':!![],'where':{'id':_0x5761cf[_0xc22e('0x3e')]['id']}},_0x4a659a={};_0x4a659a['model']=_[_0xc22e('0x28')](db['FaxApplication'][_0xc22e('0x3f')]);_0x4a659a['query']=_[_0xc22e('0x28')](_0x5761cf['query']);_0x4a659a['filters']=_['intersection'](_0x4a659a[_0xc22e('0x24')],_0x4a659a[_0xc22e('0x26')]);_0x38fc14[_0xc22e('0x2a')]=_[_0xc22e('0x2b')](_0x4a659a[_0xc22e('0x24')],qs[_0xc22e('0x2c')](_0x5761cf['query'][_0xc22e('0x2c')]));_0x38fc14[_0xc22e('0x2a')]=_0x38fc14[_0xc22e('0x2a')][_0xc22e('0x2d')]?_0x38fc14[_0xc22e('0x2a')]:_0x4a659a[_0xc22e('0x24')];if(_0x5761cf[_0xc22e('0x26')]['includeAll']){_0x38fc14[_0xc22e('0x39')]=[{'all':!![]}];}_0x38fc14=_[_0xc22e('0x34')]({},_0x38fc14,_0x5761cf[_0xc22e('0x40')]);return db[_0xc22e('0x23')]['find'](_0x38fc14)[_0xc22e('0x1c')](handleEntityNotFound(_0x3200a2,null))[_0xc22e('0x1c')](respondWithResult(_0x3200a2,null))[_0xc22e('0x3c')](handleError(_0x3200a2,null));};exports[_0xc22e('0x41')]=function(_0x26faa5,_0x4714d4){return db[_0xc22e('0x23')]['create'](_0x26faa5[_0xc22e('0x42')],{})['then'](respondWithResult(_0x4714d4,0xc9))['catch'](handleError(_0x4714d4,null));};exports[_0xc22e('0x1b')]=function(_0x605209,_0x554cf9){if(_0x605209['body']['id']){delete _0x605209[_0xc22e('0x42')]['id'];}return db[_0xc22e('0x23')]['find']({'where':{'id':_0x605209['params']['id']}})['then'](handleEntityNotFound(_0x554cf9,null))[_0xc22e('0x1c')](saveUpdates(_0x605209[_0xc22e('0x42')],null))[_0xc22e('0x1c')](respondWithResult(_0x554cf9,null))[_0xc22e('0x3c')](handleError(_0x554cf9,null));};exports[_0xc22e('0x1d')]=function(_0x1b455e,_0x24428a){return db[_0xc22e('0x23')][_0xc22e('0x43')]({'where':{'id':_0x1b455e['params']['id']}})[_0xc22e('0x1c')](handleEntityNotFound(_0x24428a,null))[_0xc22e('0x1c')](removeEntity(_0x24428a,null))['catch'](handleError(_0x24428a,null));};
\ No newline at end of file
+var _0x5659=['Content-Range','apply','reject','save','then','destroy','error','stack','name','index','FaxApplication','rawAttributes','dateStart','dateEnd','query','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','pick','add','day','merge','map','filter','options','include','findAll','rows','catch','show','params','find','create','update','body','fast-json-patch','request-promise','util','path','sox','ejs','lodash','squel','crypto','desk.js','to-csv','papaparse','../../config/logger','api','../../config/environment','sendStatus','status','end','json','count','offset','set'];(function(_0x32b993,_0x1c5989){var _0x482780=function(_0x404179){while(--_0x404179){_0x32b993['push'](_0x32b993['shift']());}};_0x482780(++_0x1c5989);}(_0x5659,0xf2));var _0x9565=function(_0x387f26,_0x324ff6){_0x387f26=_0x387f26-0x0;var _0x4118b3=_0x5659[_0x387f26];return _0x4118b3;};'use strict';var jsonpatch=require(_0x9565('0x0'));var rp=require(_0x9565('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x9565('0x2'));var path=require(_0x9565('0x3'));var sox=require(_0x9565('0x4'));var csv=require('to-csv');var ejs=require(_0x9565('0x5'));var fs=require('fs');var _=require(_0x9565('0x6'));var squel=require(_0x9565('0x7'));var crypto=require(_0x9565('0x8'));var jsforce=require('jsforce');var deskjs=require(_0x9565('0x9'));var toCsv=require(_0x9565('0xa'));var querystring=require('querystring');var Papa=require(_0x9565('0xb'));var qs=require('../../components/parsers/qs');var logger=require(_0x9565('0xc'))(_0x9565('0xd'));var utils=require('../../config/utils');var config=require(_0x9565('0xe'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x37c4ce,_0x53265c){_0x53265c=_0x53265c||0xcc;return function(_0x2007d1){if(_0x2007d1){return _0x37c4ce[_0x9565('0xf')](_0x53265c);}return _0x37c4ce[_0x9565('0x10')](_0x53265c)[_0x9565('0x11')]();};}function respondWithResult(_0x4d6345,_0x23cd7d){_0x23cd7d=_0x23cd7d||0xc8;return function(_0x415e1c){if(_0x415e1c){return _0x4d6345[_0x9565('0x10')](_0x23cd7d)[_0x9565('0x12')](_0x415e1c);}};}function respondWithFilteredResult(_0x2f439f,_0x4904b7){return function(_0xac749c){if(_0xac749c){var _0x448e10=_0xac749c[_0x9565('0x13')],_0x4eb6e9=_0x4904b7[_0x9565('0x14')],_0x51c2c9=_0x4904b7[_0x9565('0x14')]+_0x4904b7['limit'],_0x449194;if(_0x51c2c9>=_0x448e10){_0x51c2c9=_0x448e10;_0x449194=0xc8;}else{_0x449194=0xce;}_0x2f439f[_0x9565('0x10')](_0x449194);return _0x2f439f[_0x9565('0x15')](_0x9565('0x16'),_0x4eb6e9+'-'+_0x51c2c9+'/'+_0x448e10)['json'](_0xac749c);}return null;};}function patchUpdates(_0x294f26){return function(_0xfcc772){try{jsonpatch[_0x9565('0x17')](_0xfcc772,_0x294f26,!![]);}catch(_0x9543f6){return BPromise[_0x9565('0x18')](_0x9543f6);}return _0xfcc772[_0x9565('0x19')]();};}function saveUpdates(_0x52652e,_0x1689a7){return function(_0x19feb4){if(_0x19feb4){return _0x19feb4['update'](_0x52652e)[_0x9565('0x1a')](function(_0x376f3f){return _0x376f3f;});}return null;};}function removeEntity(_0x493d98,_0x22c0d4){return function(_0x3ede8c){if(_0x3ede8c){return _0x3ede8c[_0x9565('0x1b')]()[_0x9565('0x1a')](function(){_0x493d98[_0x9565('0x10')](0xcc)[_0x9565('0x11')]();});}};}function handleEntityNotFound(_0x6d578f,_0x135ba0){return function(_0x446f70){if(!_0x446f70){_0x6d578f[_0x9565('0xf')](0x194);}return _0x446f70;};}function handleError(_0x2a0952,_0x4475e3){_0x4475e3=_0x4475e3||0x1f4;return function(_0x28f15f){logger[_0x9565('0x1c')](_0x28f15f[_0x9565('0x1d')]);if(_0x28f15f[_0x9565('0x1e')]){delete _0x28f15f[_0x9565('0x1e')];}_0x2a0952[_0x9565('0x10')](_0x4475e3)['send'](_0x28f15f);};}exports[_0x9565('0x1f')]=function(_0x18891e,_0x9508c5){var _0x19aaed={},_0x569534={},_0xa44a80={'count':0x0,'rows':[]};var _0x3c2934=db[_0x9565('0x20')][_0x9565('0x21')];_0x569534['model']=_['keys'](_0x3c2934);var _0x9f2e76={'dateStart':_0x18891e['query'][_0x9565('0x22')],'dateEnd':_0x18891e['query'][_0x9565('0x23')]};delete _0x18891e[_0x9565('0x24')][_0x9565('0x22')];delete _0x18891e[_0x9565('0x24')][_0x9565('0x23')];_0x569534[_0x9565('0x24')]=_[_0x9565('0x25')](_0x18891e['query']);_0x569534[_0x9565('0x26')]=_[_0x9565('0x27')](_0x569534[_0x9565('0x28')],_0x569534[_0x9565('0x24')]);_0x19aaed[_0x9565('0x29')]=_[_0x9565('0x27')](_0x569534['model'],qs[_0x9565('0x2a')](_0x18891e[_0x9565('0x24')][_0x9565('0x2a')]));_0x19aaed['attributes']=_0x19aaed[_0x9565('0x29')][_0x9565('0x2b')]?_0x19aaed[_0x9565('0x29')]:_0x569534[_0x9565('0x28')];if(!_0x18891e[_0x9565('0x24')][_0x9565('0x2c')](_0x9565('0x2d'))){_0x19aaed[_0x9565('0x2e')]=qs[_0x9565('0x2e')](_0x18891e[_0x9565('0x24')][_0x9565('0x2e')]);_0x19aaed[_0x9565('0x14')]=qs[_0x9565('0x14')](_0x18891e[_0x9565('0x24')][_0x9565('0x14')]);}_0x19aaed['order']=qs[_0x9565('0x2f')](_0x18891e[_0x9565('0x24')][_0x9565('0x2f')]);_0x19aaed[_0x9565('0x30')]=qs[_0x9565('0x26')](_[_0x9565('0x31')](_0x18891e[_0x9565('0x24')],_0x569534[_0x9565('0x26')]));if(_0x9f2e76[_0x9565('0x22')]){if(_0x9f2e76[_0x9565('0x23')]){_0x9f2e76[_0x9565('0x23')]=moment(_0x9f2e76[_0x9565('0x23')])[_0x9565('0x32')](0x1,_0x9565('0x33'));}else{_0x9f2e76[_0x9565('0x23')]=moment(_0x9f2e76[_0x9565('0x22')])[_0x9565('0x32')](0x1,_0x9565('0x33'));}_['merge'](_0x19aaed[_0x9565('0x30')],{'createdAt':{'$gte':_0x9f2e76[_0x9565('0x22')],'$lte':_0x9f2e76[_0x9565('0x23')]}});}if(_0x18891e[_0x9565('0x24')]['filter']){_0x19aaed[_0x9565('0x30')]=_[_0x9565('0x34')](_0x19aaed[_0x9565('0x30')],{'$or':_[_0x9565('0x35')](_0x19aaed[_0x9565('0x29')],function(_0x24d1a2){var _0x1182e7={};_0x1182e7[_0x24d1a2]={'$like':'%'+_0x18891e[_0x9565('0x24')][_0x9565('0x36')]+'%'};return _0x1182e7;})});}_0x19aaed=_[_0x9565('0x34')]({},_0x19aaed,_0x18891e[_0x9565('0x37')]);var _0x24c9f6={'where':_0x19aaed[_0x9565('0x30')]};return db[_0x9565('0x20')][_0x9565('0x13')](_0x24c9f6)[_0x9565('0x1a')](function(_0x7be03d){_0xa44a80[_0x9565('0x13')]=_0x7be03d;if(_0x18891e[_0x9565('0x24')]['includeAll']){_0x19aaed[_0x9565('0x38')]=[{'all':!![]}];}return db[_0x9565('0x20')][_0x9565('0x39')](_0x19aaed);})[_0x9565('0x1a')](function(_0x1452c0){_0xa44a80[_0x9565('0x3a')]=_0x1452c0;return _0xa44a80;})[_0x9565('0x1a')](respondWithFilteredResult(_0x9508c5,_0x19aaed))[_0x9565('0x3b')](handleError(_0x9508c5,null));};exports[_0x9565('0x3c')]=function(_0x10ae6d,_0x8c0e08){var _0xebd93e={'raw':!![],'where':{'id':_0x10ae6d[_0x9565('0x3d')]['id']}},_0x470cff={};_0x470cff[_0x9565('0x28')]=_[_0x9565('0x25')](db[_0x9565('0x20')][_0x9565('0x21')]);_0x470cff[_0x9565('0x24')]=_[_0x9565('0x25')](_0x10ae6d['query']);_0x470cff[_0x9565('0x26')]=_['intersection'](_0x470cff[_0x9565('0x28')],_0x470cff[_0x9565('0x24')]);_0xebd93e['attributes']=_[_0x9565('0x27')](_0x470cff[_0x9565('0x28')],qs[_0x9565('0x2a')](_0x10ae6d[_0x9565('0x24')][_0x9565('0x2a')]));_0xebd93e[_0x9565('0x29')]=_0xebd93e['attributes']['length']?_0xebd93e[_0x9565('0x29')]:_0x470cff[_0x9565('0x28')];if(_0x10ae6d[_0x9565('0x24')]['includeAll']){_0xebd93e[_0x9565('0x38')]=[{'all':!![]}];}_0xebd93e=_['merge']({},_0xebd93e,_0x10ae6d[_0x9565('0x37')]);return db[_0x9565('0x20')][_0x9565('0x3e')](_0xebd93e)['then'](handleEntityNotFound(_0x8c0e08,null))[_0x9565('0x1a')](respondWithResult(_0x8c0e08,null))[_0x9565('0x3b')](handleError(_0x8c0e08,null));};exports[_0x9565('0x3f')]=function(_0x165266,_0x1991bb){return db[_0x9565('0x20')][_0x9565('0x3f')](_0x165266['body'],{})[_0x9565('0x1a')](respondWithResult(_0x1991bb,0xc9))['catch'](handleError(_0x1991bb,null));};exports[_0x9565('0x40')]=function(_0x5a1dc1,_0x371c33){if(_0x5a1dc1[_0x9565('0x41')]['id']){delete _0x5a1dc1[_0x9565('0x41')]['id'];}return db[_0x9565('0x20')]['find']({'where':{'id':_0x5a1dc1[_0x9565('0x3d')]['id']}})[_0x9565('0x1a')](handleEntityNotFound(_0x371c33,null))[_0x9565('0x1a')](saveUpdates(_0x5a1dc1[_0x9565('0x41')],null))[_0x9565('0x1a')](respondWithResult(_0x371c33,null))['catch'](handleError(_0x371c33,null));};exports['destroy']=function(_0x3dd86d,_0x556ceb){return db[_0x9565('0x20')][_0x9565('0x3e')]({'where':{'id':_0x3dd86d[_0x9565('0x3d')]['id']}})[_0x9565('0x1a')](handleEntityNotFound(_0x556ceb,null))['then'](removeEntity(_0x556ceb,null))[_0x9565('0x3b')](handleError(_0x556ceb,null));};
\ No newline at end of file
index 283b09c..1dadde6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x21e8=['../../config/logger','request-promise','./faxApplication.attributes','FaxApplication','lodash'];(function(_0x56fe98,_0x43dc16){var _0x212f4f=function(_0xc3427d){while(--_0xc3427d){_0x56fe98['push'](_0x56fe98['shift']());}};_0x212f4f(++_0x43dc16);}(_0x21e8,0x149));var _0x821e=function(_0x2c143e,_0x229a7b){_0x2c143e=_0x2c143e-0x0;var _0x57c26f=_0x21e8[_0x2c143e];return _0x57c26f;};'use strict';var _=require(_0x821e('0x0'));var util=require('util');var logger=require(_0x821e('0x1'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x821e('0x2'));var attributes=require(_0x821e('0x3'));module['exports']=function(_0x5adaae,_0x5a079b){return _0x5adaae['define'](_0x821e('0x4'),attributes,{'tableName':'fax_applications','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7022=['request-promise','exports','define','fax_applications','lodash','api','bluebird'];(function(_0x3c6ae2,_0x5c52d8){var _0x4edda=function(_0x5593eb){while(--_0x5593eb){_0x3c6ae2['push'](_0x3c6ae2['shift']());}};_0x4edda(++_0x5c52d8);}(_0x7022,0xd6));var _0x2702=function(_0x3c588a,_0x173b7c){_0x3c588a=_0x3c588a-0x0;var _0x4c7cca=_0x7022[_0x3c588a];return _0x4c7cca;};'use strict';var _=require(_0x2702('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x2702('0x1'));var moment=require('moment');var BPromise=require(_0x2702('0x2'));var rp=require(_0x2702('0x3'));var attributes=require('./faxApplication.attributes');module[_0x2702('0x4')]=function(_0x512be5,_0x1fd738){return _0x512be5[_0x2702('0x5')]('FaxApplication',attributes,{'tableName':_0x2702('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 053d848..4a6a164 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e9d=['client','http','request','then','info','request\x20sent','debug','FaxApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','FaxApplication,\x20%s,\x20%s','message','result','catch','FaxApplication','body','options','raw','where','limit','UpdateFaxApplication','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','jayson/promise'];(function(_0xbf8ebe,_0x3b69a5){var _0x1e25e8=function(_0x40c390){while(--_0x40c390){_0xbf8ebe['push'](_0xbf8ebe['shift']());}};_0x1e25e8(++_0x3b69a5);}(_0x3e9d,0x1ba));var _0xd3e9=function(_0x5b1e00,_0x3e7977){_0x5b1e00=_0x5b1e00-0x0;var _0x2109d1=_0x3e9d[_0x5b1e00];return _0x2109d1;};'use strict';var _=require(_0xd3e9('0x0'));var util=require(_0xd3e9('0x1'));var moment=require('moment');var BPromise=require(_0xd3e9('0x2'));var rs=require(_0xd3e9('0x3'));var fs=require('fs');var db=require(_0xd3e9('0x4'))['db'];var utils=require(_0xd3e9('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0xd3e9('0x6'));var jayson=require(_0xd3e9('0x7'));var client=jayson[_0xd3e9('0x8')][_0xd3e9('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x568eea,_0x4dc1de,_0x17f2b0){return new BPromise(function(_0x140f2d,_0x45364e){return client[_0xd3e9('0xa')](_0x568eea,_0x17f2b0)[_0xd3e9('0xb')](function(_0x2e8fd1){logger[_0xd3e9('0xc')]('FaxApplication,\x20%s,\x20%s',_0x4dc1de,_0xd3e9('0xd'));logger[_0xd3e9('0xe')](_0xd3e9('0xf'),_0x4dc1de,_0xd3e9('0xd'),JSON[_0xd3e9('0x10')](_0x2e8fd1));if(_0x2e8fd1[_0xd3e9('0x11')]){if(_0x2e8fd1[_0xd3e9('0x11')][_0xd3e9('0x12')]===0x1f4){logger[_0xd3e9('0x11')](_0xd3e9('0x13'),_0x4dc1de,_0x2e8fd1['error'][_0xd3e9('0x14')]);return _0x45364e(_0x2e8fd1['error']['message']);}logger['error'](_0xd3e9('0x13'),_0x4dc1de,_0x2e8fd1[_0xd3e9('0x11')][_0xd3e9('0x14')]);return _0x140f2d(_0x2e8fd1[_0xd3e9('0x11')][_0xd3e9('0x14')]);}else{logger[_0xd3e9('0xc')](_0xd3e9('0x13'),_0x4dc1de,_0xd3e9('0xd'));_0x140f2d(_0x2e8fd1[_0xd3e9('0x15')]['message']);}})[_0xd3e9('0x16')](function(_0x57cf36){logger[_0xd3e9('0x11')]('FaxApplication,\x20%s,\x20%s',_0x4dc1de,_0x57cf36);_0x45364e(_0x57cf36);});});}exports['UpdateFaxApplication']=function(_0x423c7d){var _0x59c58d=this;return new Promise(function(_0x4b54bd,_0xcc095f){return db[_0xd3e9('0x17')]['update'](_0x423c7d[_0xd3e9('0x18')],{'raw':_0x423c7d[_0xd3e9('0x19')]?_0x423c7d['options'][_0xd3e9('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x423c7d['options']?_0x423c7d[_0xd3e9('0x19')][_0xd3e9('0x1b')]||null:null,'attributes':_0x423c7d[_0xd3e9('0x19')]?_0x423c7d['options']['attributes']||null:null,'limit':_0x423c7d[_0xd3e9('0x19')]?_0x423c7d['options'][_0xd3e9('0x1c')]||null:null})['then'](function(_0x8426d9){logger[_0xd3e9('0xc')]('UpdateFaxApplication',_0x423c7d);logger[_0xd3e9('0xe')](_0xd3e9('0x1d'),_0x423c7d,JSON[_0xd3e9('0x10')](_0x8426d9));_0x4b54bd(_0x8426d9);})['catch'](function(_0x54b5e6){logger['error'](_0xd3e9('0x1d'),_0x54b5e6[_0xd3e9('0x14')],_0x423c7d);_0xcc095f(_0x59c58d[_0xd3e9('0x11')](0x1f4,_0x54b5e6[_0xd3e9('0x14')]));});});};
\ No newline at end of file
+var _0x4b84=['result','UpdateFaxApplication','update','body','options','raw','where','attributes','limit','then','lodash','util','randomstring','../../config/logger','rpc','../../config/environment','info','FaxApplication,\x20%s,\x20%s','debug','FaxApplication,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message'];(function(_0x5f0089,_0x227e2c){var _0x193892=function(_0x24051f){while(--_0x24051f){_0x5f0089['push'](_0x5f0089['shift']());}};_0x193892(++_0x227e2c);}(_0x4b84,0x1cc));var _0x44b8=function(_0x1057a3,_0x28d9b7){_0x1057a3=_0x1057a3-0x0;var _0x131cdb=_0x4b84[_0x1057a3];return _0x131cdb;};'use strict';var _=require(_0x44b8('0x0'));var util=require(_0x44b8('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x44b8('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x44b8('0x3'))(_0x44b8('0x4'));var config=require(_0x44b8('0x5'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x996a8b,_0x54274b,_0x327f59){return new BPromise(function(_0x5947f7,_0x3e87c5){return client['request'](_0x996a8b,_0x327f59)['then'](function(_0x41d515){logger[_0x44b8('0x6')](_0x44b8('0x7'),_0x54274b,'request\x20sent');logger[_0x44b8('0x8')](_0x44b8('0x9'),_0x54274b,_0x44b8('0xa'),JSON[_0x44b8('0xb')](_0x41d515));if(_0x41d515[_0x44b8('0xc')]){if(_0x41d515[_0x44b8('0xc')][_0x44b8('0xd')]===0x1f4){logger['error'](_0x44b8('0x7'),_0x54274b,_0x41d515[_0x44b8('0xc')]['message']);return _0x3e87c5(_0x41d515[_0x44b8('0xc')]['message']);}logger[_0x44b8('0xc')](_0x44b8('0x7'),_0x54274b,_0x41d515['error'][_0x44b8('0xe')]);return _0x5947f7(_0x41d515['error']['message']);}else{logger[_0x44b8('0x6')](_0x44b8('0x7'),_0x54274b,_0x44b8('0xa'));_0x5947f7(_0x41d515[_0x44b8('0xf')]['message']);}})['catch'](function(_0x5d6349){logger[_0x44b8('0xc')]('FaxApplication,\x20%s,\x20%s',_0x54274b,_0x5d6349);_0x3e87c5(_0x5d6349);});});}exports[_0x44b8('0x10')]=function(_0x31651b){var _0x55e258=this;return new Promise(function(_0x36743e,_0xe3de8f){return db['FaxApplication'][_0x44b8('0x11')](_0x31651b[_0x44b8('0x12')],{'raw':_0x31651b['options']?_0x31651b[_0x44b8('0x13')][_0x44b8('0x14')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x31651b[_0x44b8('0x13')]?_0x31651b[_0x44b8('0x13')][_0x44b8('0x15')]||null:null,'attributes':_0x31651b[_0x44b8('0x13')]?_0x31651b[_0x44b8('0x13')][_0x44b8('0x16')]||null:null,'limit':_0x31651b[_0x44b8('0x13')]?_0x31651b[_0x44b8('0x13')][_0x44b8('0x17')]||null:null})[_0x44b8('0x18')](function(_0x48327e){logger[_0x44b8('0x6')](_0x44b8('0x10'),_0x31651b);logger[_0x44b8('0x8')](_0x44b8('0x10'),_0x31651b,JSON[_0x44b8('0xb')](_0x48327e));_0x36743e(_0x48327e);})['catch'](function(_0x402497){logger['error'](_0x44b8('0x10'),_0x402497[_0x44b8('0xe')],_0x31651b);_0xe3de8f(_0x55e258[_0x44b8('0xc')](0x1f4,_0x402497[_0x44b8('0xe')]));});});};
\ No newline at end of file
index abb1fe5..fbf21bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x524e=['/:id','show','create','put','update','delete','destroy','exports','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxApplication.controller','get','isAuthenticated','index'];(function(_0x4ad90a,_0x1130ce){var _0x3c1570=function(_0x183b48){while(--_0x183b48){_0x4ad90a['push'](_0x4ad90a['shift']());}};_0x3c1570(++_0x1130ce);}(_0x524e,0x15e));var _0xe524=function(_0x1f1f9b,_0xf9c5cb){_0x1f1f9b=_0x1f1f9b-0x0;var _0x1015b8=_0x524e[_0x1f1f9b];return _0x1015b8;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xe524('0x0'));var express=require(_0xe524('0x1'));var router=express[_0xe524('0x2')]();var auth=require(_0xe524('0x3'));var interaction=require(_0xe524('0x4'));var config=require(_0xe524('0x5'));var controller=require(_0xe524('0x6'));router[_0xe524('0x7')]('/',auth[_0xe524('0x8')](),controller[_0xe524('0x9')]);router['get'](_0xe524('0xa'),auth[_0xe524('0x8')](),controller[_0xe524('0xb')]);router['post']('/',auth[_0xe524('0x8')](),controller[_0xe524('0xc')]);router[_0xe524('0xd')](_0xe524('0xa'),auth[_0xe524('0x8')](),controller[_0xe524('0xe')]);router[_0xe524('0xf')](_0xe524('0xa'),auth[_0xe524('0x8')](),controller[_0xe524('0x10')]);module[_0xe524('0x11')]=router;
\ No newline at end of file
+var _0x7a54=['/:id','show','post','create','update','delete','multer','util','path','Router','../../components/auth/service','../../config/environment','./faxApplication.controller','get','isAuthenticated','index'];(function(_0x279d59,_0xf13cf1){var _0x3dfef9=function(_0x6ba195){while(--_0x6ba195){_0x279d59['push'](_0x279d59['shift']());}};_0x3dfef9(++_0xf13cf1);}(_0x7a54,0x106));var _0x47a5=function(_0x4c9956,_0x1c3cb2){_0x4c9956=_0x4c9956-0x0;var _0x16eb8c=_0x7a54[_0x4c9956];return _0x16eb8c;};'use strict';var multer=require(_0x47a5('0x0'));var util=require(_0x47a5('0x1'));var path=require(_0x47a5('0x2'));var express=require('express');var router=express[_0x47a5('0x3')]();var auth=require(_0x47a5('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x47a5('0x5'));var controller=require(_0x47a5('0x6'));router[_0x47a5('0x7')]('/',auth[_0x47a5('0x8')](),controller[_0x47a5('0x9')]);router['get'](_0x47a5('0xa'),auth['isAuthenticated'](),controller[_0x47a5('0xb')]);router[_0x47a5('0xc')]('/',auth['isAuthenticated'](),controller[_0x47a5('0xd')]);router['put']('/:id',auth['isAuthenticated'](),controller[_0x47a5('0xe')]);router[_0x47a5('0xf')]('/:id',auth[_0x47a5('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index d8ad817..50bedd6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfbf3=['DATE','STRING','ENUM','sequelize','BOOLEAN'];(function(_0x4e4519,_0x392ae){var _0x340044=function(_0x11721f){while(--_0x11721f){_0x4e4519['push'](_0x4e4519['shift']());}};_0x340044(++_0x392ae);}(_0xfbf3,0xf3));var _0x3fbf=function(_0x4ff28f,_0x50de1c){_0x4ff28f=_0x4ff28f-0x0;var _0x289da7=_0xfbf3[_0x4ff28f];return _0x289da7;};'use strict';var Sequelize=require(_0x3fbf('0x0'));module['exports']={'closed':{'type':Sequelize[_0x3fbf('0x1')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x3fbf('0x2')]},'disposition':{'type':Sequelize[_0x3fbf('0x3')]},'note':{'type':Sequelize['STRING']},'read1stAt':{'type':Sequelize['DATE']},'fax':{'type':Sequelize[_0x3fbf('0x3')]},'firstMsgDirection':{'type':Sequelize[_0x3fbf('0x4')]('in','out'),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x3fbf('0x2')]},'lastMsgDirection':{'type':Sequelize[_0x3fbf('0x4')]('in','out'),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
+var _0xdf03=['DATE','ENUM','out','sequelize','exports','BOOLEAN','STRING'];(function(_0x5e2499,_0x1c98bf){var _0x54665e=function(_0x1e5193){while(--_0x1e5193){_0x5e2499['push'](_0x5e2499['shift']());}};_0x54665e(++_0x1c98bf);}(_0xdf03,0x73));var _0x3df0=function(_0x319e2e,_0x2f727f){_0x319e2e=_0x319e2e-0x0;var _0x302524=_0xdf03[_0x319e2e];return _0x302524;};'use strict';var Sequelize=require(_0x3df0('0x0'));module[_0x3df0('0x1')]={'closed':{'type':Sequelize[_0x3df0('0x2')],'defaultValue':![]},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize[_0x3df0('0x3')]},'note':{'type':Sequelize[_0x3df0('0x3')]},'read1stAt':{'type':Sequelize[_0x3df0('0x4')]},'fax':{'type':Sequelize[_0x3df0('0x3')]},'firstMsgDirection':{'type':Sequelize[_0x3df0('0x5')]('in','out'),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x3df0('0x4')]},'lastMsgDirection':{'type':Sequelize['ENUM']('in',_0x3df0('0x6')),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
index 5e82766..3ccdf4c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1f63=['papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','register','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','update','then','destroy','error','name','send','FaxInteraction','rawAttributes','model','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','pick','day','add','merge','where','filter','map','options','include','tag','push','Tag','Tags','distinct','read','Messages','count','User','Users','fullname','CmContact','Contact','FaxAccount','Account','FaxMessage','direction','createdAt','color','ThroughTags','findAll','rows','catch','params','keys','find','create','body','describe','addMessage','ids','omit','getMessages','findOne','order','FaxInteractionId','split','format','YYYY-MM-DD\x20HH:mm:ss','includeAll','addTags','setTags','spread','faxInteractionTags:save','removeTags','fast-json-patch','moment','bluebird','mustache','util','path','to-csv','ejs','squel','jsforce','querystring'];(function(_0x17289e,_0x178569){var _0xb5fa1=function(_0x259078){while(--_0x259078){_0x17289e['push'](_0x17289e['shift']());}};_0xb5fa1(++_0x178569);}(_0x1f63,0x130));var _0x31f6=function(_0x7f978c,_0x41f733){_0x7f978c=_0x7f978c-0x0;var _0x164fe4=_0x1f63[_0x7f978c];return _0x164fe4;};'use strict';var jsonpatch=require(_0x31f6('0x0'));var rp=require('request-promise');var moment=require(_0x31f6('0x1'));var BPromise=require(_0x31f6('0x2'));var Mustache=require(_0x31f6('0x3'));var util=require(_0x31f6('0x4'));var path=require(_0x31f6('0x5'));var sox=require('sox');var csv=require(_0x31f6('0x6'));var ejs=require(_0x31f6('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0x31f6('0x8'));var crypto=require('crypto');var jsforce=require(_0x31f6('0x9'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x31f6('0xa'));var Papa=require(_0x31f6('0xb'));var qs=require(_0x31f6('0xc'));var logger=require(_0x31f6('0xd'))(_0x31f6('0xe'));var utils=require(_0x31f6('0xf'));var config=require(_0x31f6('0x10'));var db=require(_0x31f6('0x11'))['db'];var socket=require(_0x31f6('0x12'))({'host':_0x31f6('0x13'),'port':0x18eb});require('./faxInteraction.socket')[_0x31f6('0x14')](socket);function respondWithStatusCode(_0x1ca7e7,_0x4f7a24){_0x4f7a24=_0x4f7a24||0xcc;return function(_0x3b29e0){if(_0x3b29e0){return _0x1ca7e7[_0x31f6('0x15')](_0x4f7a24);}return _0x1ca7e7[_0x31f6('0x16')](_0x4f7a24)[_0x31f6('0x17')]();};}function respondWithResult(_0x28488b,_0x1efb66){_0x1efb66=_0x1efb66||0xc8;return function(_0x543a9a){if(_0x543a9a){return _0x28488b[_0x31f6('0x16')](_0x1efb66)[_0x31f6('0x18')](_0x543a9a);}};}function respondWithFilteredResult(_0x562033,_0xa6488a){return function(_0x19ab4d){if(_0x19ab4d){var _0x45f084=_0x19ab4d['count'],_0x889df5=_0xa6488a[_0x31f6('0x19')],_0x3dd98f=_0xa6488a[_0x31f6('0x19')]+_0xa6488a[_0x31f6('0x1a')],_0x3d4bfe;if(_0x3dd98f>=_0x45f084){_0x3dd98f=_0x45f084;_0x3d4bfe=0xc8;}else{_0x3d4bfe=0xce;}_0x562033['status'](_0x3d4bfe);return _0x562033[_0x31f6('0x1b')](_0x31f6('0x1c'),_0x889df5+'-'+_0x3dd98f+'/'+_0x45f084)[_0x31f6('0x18')](_0x19ab4d);}return null;};}function patchUpdates(_0x4c92c6){return function(_0x1e9aa2){try{jsonpatch[_0x31f6('0x1d')](_0x1e9aa2,_0x4c92c6,!![]);}catch(_0xa49915){return BPromise[_0x31f6('0x1e')](_0xa49915);}return _0x1e9aa2['save']();};}function saveUpdates(_0xa1c813,_0x1b0152){return function(_0x42cf27){if(_0x42cf27){return _0x42cf27[_0x31f6('0x1f')](_0xa1c813)[_0x31f6('0x20')](function(_0x500b63){return _0x500b63;});}return null;};}function removeEntity(_0x4a2856,_0x4c35ec){return function(_0x2095e5){if(_0x2095e5){return _0x2095e5[_0x31f6('0x21')]()[_0x31f6('0x20')](function(){_0x4a2856['status'](0xcc)[_0x31f6('0x17')]();});}};}function handleEntityNotFound(_0x33d2cb,_0x41edbb){return function(_0x23be35){if(!_0x23be35){_0x33d2cb[_0x31f6('0x15')](0x194);}return _0x23be35;};}function handleError(_0x2be2d9,_0x31c160){_0x31c160=_0x31c160||0x1f4;return function(_0x41a534){logger[_0x31f6('0x22')](_0x41a534['stack']);if(_0x41a534[_0x31f6('0x23')]){delete _0x41a534[_0x31f6('0x23')];}_0x2be2d9[_0x31f6('0x16')](_0x31c160)[_0x31f6('0x24')](_0x41a534);};}exports['index']=function(_0x1047d3,_0x48494f){var _0x44c487={},_0x1b300e={},_0x4b4ef4={'count':0x0,'rows':[]};var _0x1a47e9=db[_0x31f6('0x25')][_0x31f6('0x26')];_0x1b300e[_0x31f6('0x27')]=_['keys'](_0x1a47e9);var _0x1b0b4b={'dateStart':_0x1047d3['query'][_0x31f6('0x28')],'dateEnd':_0x1047d3[_0x31f6('0x29')]['dateEnd']};delete _0x1047d3['query'][_0x31f6('0x28')];delete _0x1047d3[_0x31f6('0x29')][_0x31f6('0x2a')];_0x1b300e['query']=_['keys'](_0x1047d3['query']);_0x1b300e[_0x31f6('0x2b')]=_[_0x31f6('0x2c')](_0x1b300e[_0x31f6('0x27')],_0x1b300e[_0x31f6('0x29')]);_0x44c487[_0x31f6('0x2d')]=_['intersection'](_0x1b300e[_0x31f6('0x27')],qs[_0x31f6('0x2e')](_0x1047d3[_0x31f6('0x29')]['fields']));_0x44c487[_0x31f6('0x2d')]=_0x44c487[_0x31f6('0x2d')][_0x31f6('0x2f')]?_0x44c487[_0x31f6('0x2d')]:_0x1b300e['model'];if(!_0x1047d3['query'][_0x31f6('0x30')](_0x31f6('0x31'))){_0x44c487[_0x31f6('0x1a')]=qs[_0x31f6('0x1a')](_0x1047d3[_0x31f6('0x29')][_0x31f6('0x1a')]);_0x44c487['offset']=qs[_0x31f6('0x19')](_0x1047d3[_0x31f6('0x29')][_0x31f6('0x19')]);}_0x44c487['order']=qs[_0x31f6('0x32')](_0x1047d3[_0x31f6('0x29')]['sort']);_0x44c487['where']=qs[_0x31f6('0x2b')](_[_0x31f6('0x33')](_0x1047d3[_0x31f6('0x29')],_0x1b300e[_0x31f6('0x2b')]));if(_0x1b0b4b[_0x31f6('0x28')]){if(_0x1b0b4b[_0x31f6('0x2a')]){_0x1b0b4b[_0x31f6('0x2a')]=moment(_0x1b0b4b[_0x31f6('0x2a')])['add'](0x1,_0x31f6('0x34'));}else{_0x1b0b4b[_0x31f6('0x2a')]=moment(_0x1b0b4b['dateStart'])[_0x31f6('0x35')](0x1,_0x31f6('0x34'));}_[_0x31f6('0x36')](_0x44c487[_0x31f6('0x37')],{'createdAt':{'$gte':_0x1b0b4b[_0x31f6('0x28')],'$lte':_0x1b0b4b['dateEnd']}});}if(_0x1047d3[_0x31f6('0x29')][_0x31f6('0x38')]){_0x44c487[_0x31f6('0x37')]=_[_0x31f6('0x36')](_0x44c487['where'],{'$or':_[_0x31f6('0x39')](_0x44c487['attributes'],function(_0x33fbef){var _0x309faf={};_0x309faf[_0x33fbef]={'$like':'%'+_0x1047d3[_0x31f6('0x29')][_0x31f6('0x38')]+'%'};return _0x309faf;})});}_0x44c487=_[_0x31f6('0x36')]({},_0x44c487,_0x1047d3[_0x31f6('0x3a')]);var _0xca783c={'where':_0x44c487[_0x31f6('0x37')]};_0xca783c[_0x31f6('0x3b')]=[];if(_0x1047d3[_0x31f6('0x29')][_0x31f6('0x3c')]){_0xca783c[_0x31f6('0x3b')][_0x31f6('0x3d')]({'model':db[_0x31f6('0x3e')],'as':_0x31f6('0x3f'),'attributes':['id'],'where':{'id':_0x1047d3[_0x31f6('0x29')]['tag']},'required':!![]});_0xca783c[_0x31f6('0x40')]=!![];}if(_0x1047d3[_0x31f6('0x29')][_0x31f6('0x41')]){_0xca783c[_0x31f6('0x3b')][_0x31f6('0x3d')]({'model':db['FaxMessage'],'as':_0x31f6('0x42'),'attributes':['id','direction','createdAt',_0x31f6('0x41')],'where':{'direction':'in','read':_0x1047d3[_0x31f6('0x29')]['read']||![]},'required':!![]});_0xca783c['distinct']=!![];}return db[_0x31f6('0x25')][_0x31f6('0x43')](_0xca783c)[_0x31f6('0x20')](function(_0x367b0e){_0x4b4ef4[_0x31f6('0x43')]=_0x367b0e;if(_0x1047d3['query']['includeAll']){_0x44c487[_0x31f6('0x3b')]=[{'model':db[_0x31f6('0x44')],'as':_0x31f6('0x45'),'required':![],'attributes':['id',_0x31f6('0x23'),_0x31f6('0x46')]},{'model':db[_0x31f6('0x47')],'as':_0x31f6('0x48'),'required':![]},{'model':db[_0x31f6('0x44')],'as':'Owner','attributes':[_0x31f6('0x23'),_0x31f6('0x46'),'internal'],'required':![]},{'model':db[_0x31f6('0x49')],'as':_0x31f6('0x4a'),'attributes':[_0x31f6('0x23'),'key'],'required':![]},{'model':db[_0x31f6('0x4b')],'as':_0x31f6('0x42'),'attributes':['id',_0x31f6('0x4c'),_0x31f6('0x4d'),_0x31f6('0x41')],'where':{'direction':'in','read':_0x1047d3['query'][_0x31f6('0x41')]||![]},'required':_0x1047d3[_0x31f6('0x29')][_0x31f6('0x41')]||![]},{'model':db[_0x31f6('0x3e')],'as':_0x31f6('0x3f'),'attributes':['id','name',_0x31f6('0x4e')],'required':_0x1047d3[_0x31f6('0x29')][_0x31f6('0x3c')]?!![]:![]},{'model':db['Tag'],'as':_0x31f6('0x4f'),'attributes':['id',_0x31f6('0x23'),_0x31f6('0x4e')],'through':_0x1047d3[_0x31f6('0x29')]['tag']?{'attributes':[],'where':{'TagId':_0x1047d3[_0x31f6('0x29')][_0x31f6('0x3c')]||undefined}}:{},'required':_0x1047d3['query']['tag']?!![]:![]}];}return db['FaxInteraction'][_0x31f6('0x50')](_0x44c487);})[_0x31f6('0x20')](function(_0x46cee1){_0x4b4ef4[_0x31f6('0x51')]=_0x46cee1;return _0x4b4ef4;})[_0x31f6('0x20')](respondWithFilteredResult(_0x48494f,_0x44c487))[_0x31f6('0x52')](handleError(_0x48494f,null));};exports['show']=function(_0x40b23c,_0x5189fd){var _0x43f6cb={'raw':![],'where':{'id':_0x40b23c[_0x31f6('0x53')]['id']}},_0x1afa2={};_0x1afa2[_0x31f6('0x27')]=_[_0x31f6('0x54')](db[_0x31f6('0x25')][_0x31f6('0x26')]);_0x1afa2[_0x31f6('0x29')]=_[_0x31f6('0x54')](_0x40b23c[_0x31f6('0x29')]);_0x1afa2[_0x31f6('0x2b')]=_['intersection'](_0x1afa2[_0x31f6('0x27')],_0x1afa2['query']);_0x43f6cb[_0x31f6('0x2d')]=_[_0x31f6('0x2c')](_0x1afa2[_0x31f6('0x27')],qs[_0x31f6('0x2e')](_0x40b23c[_0x31f6('0x29')][_0x31f6('0x2e')]));_0x43f6cb['attributes']=_0x43f6cb[_0x31f6('0x2d')]['length']?_0x43f6cb['attributes']:_0x1afa2[_0x31f6('0x27')];if(_0x40b23c[_0x31f6('0x29')]['includeAll']){_0x43f6cb[_0x31f6('0x3b')]=[{'all':!![]}];}_0x43f6cb=_[_0x31f6('0x36')]({},_0x43f6cb,_0x40b23c[_0x31f6('0x3a')]);return db[_0x31f6('0x25')][_0x31f6('0x55')](_0x43f6cb)[_0x31f6('0x20')](handleEntityNotFound(_0x5189fd,null))[_0x31f6('0x20')](respondWithResult(_0x5189fd,null))[_0x31f6('0x52')](handleError(_0x5189fd,null));};exports[_0x31f6('0x56')]=function(_0x52b665,_0x429997){return db[_0x31f6('0x25')][_0x31f6('0x56')](_0x52b665[_0x31f6('0x57')],{})[_0x31f6('0x20')](respondWithResult(_0x429997,0xc9))[_0x31f6('0x52')](handleError(_0x429997,null));};exports[_0x31f6('0x1f')]=function(_0x259e0e,_0x5ad1b1){if(_0x259e0e[_0x31f6('0x57')]['id']){delete _0x259e0e['body']['id'];}return db['FaxInteraction'][_0x31f6('0x55')]({'where':{'id':_0x259e0e[_0x31f6('0x53')]['id']}})[_0x31f6('0x20')](handleEntityNotFound(_0x5ad1b1,null))[_0x31f6('0x20')](saveUpdates(_0x259e0e[_0x31f6('0x57')],null))[_0x31f6('0x20')](respondWithResult(_0x5ad1b1,null))[_0x31f6('0x52')](handleError(_0x5ad1b1,null));};exports[_0x31f6('0x21')]=function(_0x20b1c7,_0x3b46b5){return db[_0x31f6('0x25')]['find']({'where':{'id':_0x20b1c7[_0x31f6('0x53')]['id']}})[_0x31f6('0x20')](handleEntityNotFound(_0x3b46b5,null))[_0x31f6('0x20')](removeEntity(_0x3b46b5,null))[_0x31f6('0x52')](handleError(_0x3b46b5,null));};exports[_0x31f6('0x58')]=function(_0x267f4b,_0x4b0062){return db['FaxInteraction'][_0x31f6('0x58')]()['then'](respondWithResult(_0x4b0062,null))[_0x31f6('0x52')](handleError(_0x4b0062,null));};exports[_0x31f6('0x59')]=function(_0x1896d4,_0x267af2,_0x494443){return db[_0x31f6('0x4b')][_0x31f6('0x55')]({'where':{'id':_0x1896d4[_0x31f6('0x53')]['id']}})[_0x31f6('0x20')](handleEntityNotFound(_0x267af2,null))[_0x31f6('0x20')](function(_0x42afa1){if(_0x42afa1){return _0x42afa1[_0x31f6('0x59')](_0x1896d4[_0x31f6('0x57')][_0x31f6('0x5a')],_[_0x31f6('0x5b')](_0x1896d4[_0x31f6('0x57')],[_0x31f6('0x5a'),'id'])||{});}})[_0x31f6('0x20')](respondWithResult(_0x267af2,null))[_0x31f6('0x52')](handleError(_0x267af2,null));};exports[_0x31f6('0x5c')]=function(_0x4e5b4f,_0x860036,_0x248ef8){var _0x4fc182={'raw':![],'where':{}};var _0x321d43={};var _0x15dc8b={'count':0x0,'rows':[]};return db[_0x31f6('0x25')][_0x31f6('0x5d')]({'where':{'id':_0x4e5b4f[_0x31f6('0x53')]['id']}})[_0x31f6('0x20')](handleEntityNotFound(_0x860036,null))['then'](function(_0x568964){if(_0x568964){_0x321d43['model']=_[_0x31f6('0x54')](db[_0x31f6('0x4b')][_0x31f6('0x26')]);_0x321d43[_0x31f6('0x29')]=_[_0x31f6('0x54')](_0x4e5b4f[_0x31f6('0x29')]);_0x321d43[_0x31f6('0x2b')]=_['intersection'](_0x321d43['model'],_0x321d43[_0x31f6('0x29')]);_0x4fc182['attributes']=_[_0x31f6('0x2c')](_0x321d43[_0x31f6('0x27')],qs[_0x31f6('0x2e')](_0x4e5b4f['query'][_0x31f6('0x2e')]));_0x4fc182[_0x31f6('0x2d')]=_0x4fc182['attributes']['length']?_0x4fc182[_0x31f6('0x2d')]:_0x321d43[_0x31f6('0x27')];if(!_0x4e5b4f[_0x31f6('0x29')][_0x31f6('0x30')](_0x31f6('0x31'))){_0x4fc182['limit']=qs[_0x31f6('0x1a')](_0x4e5b4f[_0x31f6('0x29')][_0x31f6('0x1a')]);_0x4fc182[_0x31f6('0x19')]=qs[_0x31f6('0x19')](_0x4e5b4f[_0x31f6('0x29')][_0x31f6('0x19')]);}_0x4fc182[_0x31f6('0x5e')]=qs[_0x31f6('0x32')](_0x4e5b4f[_0x31f6('0x29')][_0x31f6('0x32')]);_0x4fc182[_0x31f6('0x37')]=qs[_0x31f6('0x2b')](_['pick'](_0x4e5b4f['query'],_0x321d43[_0x31f6('0x2b')]));_0x4fc182[_0x31f6('0x37')][_0x31f6('0x5f')]=_0x568964['id'];if(_0x4e5b4f['query'][_0x31f6('0x38')]){_0x4fc182[_0x31f6('0x37')]=_[_0x31f6('0x36')](_0x4fc182[_0x31f6('0x37')],{'$or':_[_0x31f6('0x39')](_0x4fc182['attributes'],function(_0x3ae576){var _0x46d495={};_0x46d495[_0x3ae576]={'$like':'%'+_0x4e5b4f[_0x31f6('0x29')][_0x31f6('0x38')]+'%'};return _0x46d495;})});}if(_0x4e5b4f[_0x31f6('0x29')]['$gte']){var _0x2c22e3=_0x4e5b4f[_0x31f6('0x29')]['$gte'][_0x31f6('0x60')](',');var _0x2228a7={};_0x2228a7[_0x2c22e3[0x0]]={'$gte':moment(_0x2c22e3[0x1])[_0x31f6('0x61')](_0x31f6('0x62'))};_0x4fc182[_0x31f6('0x37')]=_[_0x31f6('0x36')](_0x4fc182['where'],_0x2228a7);}_0x4fc182=_[_0x31f6('0x36')]({},_0x4fc182,_0x4e5b4f[_0x31f6('0x3a')]);return db[_0x31f6('0x4b')][_0x31f6('0x43')]({'where':_0x4fc182[_0x31f6('0x37')]})[_0x31f6('0x20')](function(_0x2ecbb3){_0x15dc8b[_0x31f6('0x43')]=_0x2ecbb3;if(_0x4e5b4f[_0x31f6('0x29')][_0x31f6('0x63')]){_0x4fc182[_0x31f6('0x3b')]=[{'all':!![]}];}return db[_0x31f6('0x4b')][_0x31f6('0x50')](_0x4fc182);})[_0x31f6('0x20')](function(_0x39aa5f){_0x15dc8b[_0x31f6('0x51')]=_0x39aa5f;return _0x15dc8b;});}})[_0x31f6('0x20')](respondWithFilteredResult(_0x860036,_0x4fc182))[_0x31f6('0x52')](handleError(_0x860036,null));};exports[_0x31f6('0x64')]=function(_0x3f67bf,_0xdc2683,_0x14b782){return db[_0x31f6('0x25')]['find']({'where':{'id':_0x3f67bf[_0x31f6('0x53')]['id']}})[_0x31f6('0x20')](handleEntityNotFound(_0xdc2683,null))[_0x31f6('0x20')](function(_0x4ce7b1){if(_0x4ce7b1){return _0x4ce7b1[_0x31f6('0x65')](_0x3f67bf[_0x31f6('0x57')][_0x31f6('0x5a')],_[_0x31f6('0x5b')](_0x3f67bf[_0x31f6('0x57')],[_0x31f6('0x5a'),'id'])||{})[_0x31f6('0x66')](function(){return db['Tag'][_0x31f6('0x50')]({'attributes':['id',_0x31f6('0x23'),'color'],'where':{'id':_0x3f67bf[_0x31f6('0x57')]['ids']}});})['then'](function(_0x53a65f){socket['emit'](_0x31f6('0x67'),{'id':Number(_0x3f67bf[_0x31f6('0x53')]['id']),'tags':_0x53a65f||[]});return{'id':Number(_0x3f67bf['params']['id']),'tags':_0x53a65f||[]};});}})[_0x31f6('0x20')](respondWithResult(_0xdc2683,null))[_0x31f6('0x52')](handleError(_0xdc2683,null));};exports[_0x31f6('0x68')]=function(_0x5c3859,_0x33aca4,_0x5eddb0){var _0x35f69e;return db[_0x31f6('0x25')][_0x31f6('0x55')]({'where':{'id':_0x5c3859[_0x31f6('0x53')]['id']}})[_0x31f6('0x20')](handleEntityNotFound(_0x33aca4,null))[_0x31f6('0x20')](function(_0x51a2e4){if(_0x51a2e4){return _0x51a2e4[_0x31f6('0x68')](_0x5c3859['query'][_0x31f6('0x5a')]);}})[_0x31f6('0x20')](respondWithStatusCode(_0x33aca4,null))['catch'](handleError(_0x33aca4,null));};
\ No newline at end of file
+var _0x940c=['filters','model','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','pick','add','day','merge','where','filter','options','include','tag','Tags','distinct','read','push','Messages','direction','createdAt','count','includeAll','User','Contact','Owner','fullname','internal','FaxAccount','key','Tag','ThroughTags','color','findAll','rows','catch','show','rawAttributes','length','find','create','body','params','describe','omit','ids','findOne','FaxInteractionId','map','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','FaxMessage','addTags','setTags','spread','emit','removeTags','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/environment','../../mysqldb','socket.io-emitter','localhost','register','sendStatus','status','json','offset','limit','set','Content-Range','reject','save','update','then','stack','name','send','index','FaxInteraction','keys','query','dateEnd','dateStart'];(function(_0x8d93c2,_0xc109c2){var _0x4d3f14=function(_0x3dcda8){while(--_0x3dcda8){_0x8d93c2['push'](_0x8d93c2['shift']());}};_0x4d3f14(++_0xc109c2);}(_0x940c,0x111));var _0xc940=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x940c[_0x3dd15e];return _0x231fd0;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xc940('0x0'));var moment=require(_0xc940('0x1'));var BPromise=require(_0xc940('0x2'));var Mustache=require(_0xc940('0x3'));var util=require(_0xc940('0x4'));var path=require('path');var sox=require(_0xc940('0x5'));var csv=require(_0xc940('0x6'));var ejs=require(_0xc940('0x7'));var fs=require('fs');var _=require(_0xc940('0x8'));var squel=require(_0xc940('0x9'));var crypto=require(_0xc940('0xa'));var jsforce=require(_0xc940('0xb'));var deskjs=require(_0xc940('0xc'));var toCsv=require(_0xc940('0x6'));var querystring=require(_0xc940('0xd'));var Papa=require(_0xc940('0xe'));var qs=require(_0xc940('0xf'));var logger=require(_0xc940('0x10'))('api');var utils=require('../../config/utils');var config=require(_0xc940('0x11'));var db=require(_0xc940('0x12'))['db'];var socket=require(_0xc940('0x13'))({'host':_0xc940('0x14'),'port':0x18eb});require('./faxInteraction.socket')[_0xc940('0x15')](socket);function respondWithStatusCode(_0x2219fd,_0x3234e0){_0x3234e0=_0x3234e0||0xcc;return function(_0x28e1f6){if(_0x28e1f6){return _0x2219fd[_0xc940('0x16')](_0x3234e0);}return _0x2219fd[_0xc940('0x17')](_0x3234e0)['end']();};}function respondWithResult(_0x43746b,_0x43cce3){_0x43cce3=_0x43cce3||0xc8;return function(_0x592405){if(_0x592405){return _0x43746b[_0xc940('0x17')](_0x43cce3)[_0xc940('0x18')](_0x592405);}};}function respondWithFilteredResult(_0x1cd6ba,_0x30a8ed){return function(_0x33820d){if(_0x33820d){var _0x2515d7=_0x33820d['count'],_0x57350e=_0x30a8ed[_0xc940('0x19')],_0x153eea=_0x30a8ed['offset']+_0x30a8ed[_0xc940('0x1a')],_0x440988;if(_0x153eea>=_0x2515d7){_0x153eea=_0x2515d7;_0x440988=0xc8;}else{_0x440988=0xce;}_0x1cd6ba[_0xc940('0x17')](_0x440988);return _0x1cd6ba[_0xc940('0x1b')](_0xc940('0x1c'),_0x57350e+'-'+_0x153eea+'/'+_0x2515d7)[_0xc940('0x18')](_0x33820d);}return null;};}function patchUpdates(_0xf29066){return function(_0x87830c){try{jsonpatch['apply'](_0x87830c,_0xf29066,!![]);}catch(_0x51ba9d){return BPromise[_0xc940('0x1d')](_0x51ba9d);}return _0x87830c[_0xc940('0x1e')]();};}function saveUpdates(_0x46e750,_0x3f60ac){return function(_0x5896ae){if(_0x5896ae){return _0x5896ae[_0xc940('0x1f')](_0x46e750)[_0xc940('0x20')](function(_0x482a4a){return _0x482a4a;});}return null;};}function removeEntity(_0x57b06d,_0x3cf14a){return function(_0x36e71f){if(_0x36e71f){return _0x36e71f['destroy']()[_0xc940('0x20')](function(){_0x57b06d['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x3fe75e,_0x4a8ed8){return function(_0x28b106){if(!_0x28b106){_0x3fe75e[_0xc940('0x16')](0x194);}return _0x28b106;};}function handleError(_0x1a311b,_0x3e7103){_0x3e7103=_0x3e7103||0x1f4;return function(_0x2aedc2){logger['error'](_0x2aedc2[_0xc940('0x21')]);if(_0x2aedc2[_0xc940('0x22')]){delete _0x2aedc2['name'];}_0x1a311b[_0xc940('0x17')](_0x3e7103)[_0xc940('0x23')](_0x2aedc2);};}exports[_0xc940('0x24')]=function(_0x11d3b3,_0x5d7ec4){var _0x5d2417={},_0x58b60a={},_0x2f588c={'count':0x0,'rows':[]};var _0xb3835c=db[_0xc940('0x25')]['rawAttributes'];_0x58b60a['model']=_[_0xc940('0x26')](_0xb3835c);var _0x5940ab={'dateStart':_0x11d3b3['query']['dateStart'],'dateEnd':_0x11d3b3[_0xc940('0x27')][_0xc940('0x28')]};delete _0x11d3b3[_0xc940('0x27')][_0xc940('0x29')];delete _0x11d3b3[_0xc940('0x27')][_0xc940('0x28')];_0x58b60a[_0xc940('0x27')]=_[_0xc940('0x26')](_0x11d3b3[_0xc940('0x27')]);_0x58b60a[_0xc940('0x2a')]=_['intersection'](_0x58b60a[_0xc940('0x2b')],_0x58b60a[_0xc940('0x27')]);_0x5d2417['attributes']=_[_0xc940('0x2c')](_0x58b60a['model'],qs['fields'](_0x11d3b3['query'][_0xc940('0x2d')]));_0x5d2417[_0xc940('0x2e')]=_0x5d2417[_0xc940('0x2e')]['length']?_0x5d2417[_0xc940('0x2e')]:_0x58b60a[_0xc940('0x2b')];if(!_0x11d3b3[_0xc940('0x27')][_0xc940('0x2f')](_0xc940('0x30'))){_0x5d2417['limit']=qs[_0xc940('0x1a')](_0x11d3b3['query'][_0xc940('0x1a')]);_0x5d2417[_0xc940('0x19')]=qs[_0xc940('0x19')](_0x11d3b3[_0xc940('0x27')][_0xc940('0x19')]);}_0x5d2417[_0xc940('0x31')]=qs['sort'](_0x11d3b3[_0xc940('0x27')][_0xc940('0x32')]);_0x5d2417['where']=qs[_0xc940('0x2a')](_[_0xc940('0x33')](_0x11d3b3[_0xc940('0x27')],_0x58b60a['filters']));if(_0x5940ab[_0xc940('0x29')]){if(_0x5940ab['dateEnd']){_0x5940ab[_0xc940('0x28')]=moment(_0x5940ab[_0xc940('0x28')])['add'](0x1,'day');}else{_0x5940ab[_0xc940('0x28')]=moment(_0x5940ab[_0xc940('0x29')])[_0xc940('0x34')](0x1,_0xc940('0x35'));}_[_0xc940('0x36')](_0x5d2417[_0xc940('0x37')],{'createdAt':{'$gte':_0x5940ab[_0xc940('0x29')],'$lte':_0x5940ab['dateEnd']}});}if(_0x11d3b3[_0xc940('0x27')]['filter']){_0x5d2417[_0xc940('0x37')]=_['merge'](_0x5d2417[_0xc940('0x37')],{'$or':_['map'](_0x5d2417[_0xc940('0x2e')],function(_0x3d9f8d){var _0x3d5d7e={};_0x3d5d7e[_0x3d9f8d]={'$like':'%'+_0x11d3b3[_0xc940('0x27')][_0xc940('0x38')]+'%'};return _0x3d5d7e;})});}_0x5d2417=_[_0xc940('0x36')]({},_0x5d2417,_0x11d3b3[_0xc940('0x39')]);var _0xf3dba7={'where':_0x5d2417[_0xc940('0x37')]};_0xf3dba7[_0xc940('0x3a')]=[];if(_0x11d3b3[_0xc940('0x27')][_0xc940('0x3b')]){_0xf3dba7[_0xc940('0x3a')]['push']({'model':db['Tag'],'as':_0xc940('0x3c'),'attributes':['id'],'where':{'id':_0x11d3b3[_0xc940('0x27')]['tag']},'required':!![]});_0xf3dba7[_0xc940('0x3d')]=!![];}if(_0x11d3b3['query'][_0xc940('0x3e')]){_0xf3dba7['include'][_0xc940('0x3f')]({'model':db['FaxMessage'],'as':_0xc940('0x40'),'attributes':['id',_0xc940('0x41'),_0xc940('0x42'),_0xc940('0x3e')],'where':{'direction':'in','read':_0x11d3b3['query'][_0xc940('0x3e')]||![]},'required':!![]});_0xf3dba7[_0xc940('0x3d')]=!![];}return db['FaxInteraction'][_0xc940('0x43')](_0xf3dba7)['then'](function(_0x1159fd){_0x2f588c[_0xc940('0x43')]=_0x1159fd;if(_0x11d3b3[_0xc940('0x27')][_0xc940('0x44')]){_0x5d2417[_0xc940('0x3a')]=[{'model':db[_0xc940('0x45')],'as':'Users','required':![],'attributes':['id',_0xc940('0x22'),'fullname']},{'model':db['CmContact'],'as':_0xc940('0x46'),'required':![]},{'model':db[_0xc940('0x45')],'as':_0xc940('0x47'),'attributes':['name',_0xc940('0x48'),_0xc940('0x49')],'required':![]},{'model':db[_0xc940('0x4a')],'as':'Account','attributes':[_0xc940('0x22'),_0xc940('0x4b')],'required':![]},{'model':db['FaxMessage'],'as':_0xc940('0x40'),'attributes':['id',_0xc940('0x41'),_0xc940('0x42'),_0xc940('0x3e')],'where':{'direction':'in','read':_0x11d3b3[_0xc940('0x27')]['read']||![]},'required':_0x11d3b3[_0xc940('0x27')]['read']||![]},{'model':db[_0xc940('0x4c')],'as':_0xc940('0x3c'),'attributes':['id','name','color'],'required':_0x11d3b3[_0xc940('0x27')][_0xc940('0x3b')]?!![]:![]},{'model':db['Tag'],'as':_0xc940('0x4d'),'attributes':['id','name',_0xc940('0x4e')],'through':_0x11d3b3['query']['tag']?{'attributes':[],'where':{'TagId':_0x11d3b3[_0xc940('0x27')][_0xc940('0x3b')]||undefined}}:{},'required':_0x11d3b3[_0xc940('0x27')][_0xc940('0x3b')]?!![]:![]}];}return db[_0xc940('0x25')][_0xc940('0x4f')](_0x5d2417);})[_0xc940('0x20')](function(_0x40797f){_0x2f588c[_0xc940('0x50')]=_0x40797f;return _0x2f588c;})[_0xc940('0x20')](respondWithFilteredResult(_0x5d7ec4,_0x5d2417))[_0xc940('0x51')](handleError(_0x5d7ec4,null));};exports[_0xc940('0x52')]=function(_0xd06e69,_0x44efeb){var _0x3416c2={'raw':![],'where':{'id':_0xd06e69['params']['id']}},_0xb9a420={};_0xb9a420[_0xc940('0x2b')]=_[_0xc940('0x26')](db[_0xc940('0x25')][_0xc940('0x53')]);_0xb9a420['query']=_[_0xc940('0x26')](_0xd06e69[_0xc940('0x27')]);_0xb9a420[_0xc940('0x2a')]=_[_0xc940('0x2c')](_0xb9a420[_0xc940('0x2b')],_0xb9a420[_0xc940('0x27')]);_0x3416c2['attributes']=_[_0xc940('0x2c')](_0xb9a420[_0xc940('0x2b')],qs[_0xc940('0x2d')](_0xd06e69['query'][_0xc940('0x2d')]));_0x3416c2['attributes']=_0x3416c2[_0xc940('0x2e')][_0xc940('0x54')]?_0x3416c2[_0xc940('0x2e')]:_0xb9a420[_0xc940('0x2b')];if(_0xd06e69[_0xc940('0x27')]['includeAll']){_0x3416c2['include']=[{'all':!![]}];}_0x3416c2=_[_0xc940('0x36')]({},_0x3416c2,_0xd06e69[_0xc940('0x39')]);return db['FaxInteraction'][_0xc940('0x55')](_0x3416c2)[_0xc940('0x20')](handleEntityNotFound(_0x44efeb,null))['then'](respondWithResult(_0x44efeb,null))['catch'](handleError(_0x44efeb,null));};exports[_0xc940('0x56')]=function(_0x3dfc56,_0x2e43ac){return db[_0xc940('0x25')][_0xc940('0x56')](_0x3dfc56[_0xc940('0x57')],{})[_0xc940('0x20')](respondWithResult(_0x2e43ac,0xc9))[_0xc940('0x51')](handleError(_0x2e43ac,null));};exports[_0xc940('0x1f')]=function(_0x5b6725,_0x57649c){if(_0x5b6725[_0xc940('0x57')]['id']){delete _0x5b6725[_0xc940('0x57')]['id'];}return db['FaxInteraction']['find']({'where':{'id':_0x5b6725[_0xc940('0x58')]['id']}})[_0xc940('0x20')](handleEntityNotFound(_0x57649c,null))[_0xc940('0x20')](saveUpdates(_0x5b6725['body'],null))[_0xc940('0x20')](respondWithResult(_0x57649c,null))[_0xc940('0x51')](handleError(_0x57649c,null));};exports['destroy']=function(_0x51a64c,_0xbe7444){return db[_0xc940('0x25')][_0xc940('0x55')]({'where':{'id':_0x51a64c['params']['id']}})[_0xc940('0x20')](handleEntityNotFound(_0xbe7444,null))[_0xc940('0x20')](removeEntity(_0xbe7444,null))[_0xc940('0x51')](handleError(_0xbe7444,null));};exports[_0xc940('0x59')]=function(_0x171432,_0x486151){return db[_0xc940('0x25')][_0xc940('0x59')]()[_0xc940('0x20')](respondWithResult(_0x486151,null))[_0xc940('0x51')](handleError(_0x486151,null));};exports['addMessage']=function(_0x57a2d8,_0x24485a,_0x34ffb1){return db['FaxMessage'][_0xc940('0x55')]({'where':{'id':_0x57a2d8[_0xc940('0x58')]['id']}})[_0xc940('0x20')](handleEntityNotFound(_0x24485a,null))[_0xc940('0x20')](function(_0x14dea6){if(_0x14dea6){return _0x14dea6['addMessage'](_0x57a2d8[_0xc940('0x57')]['ids'],_[_0xc940('0x5a')](_0x57a2d8[_0xc940('0x57')],[_0xc940('0x5b'),'id'])||{});}})['then'](respondWithResult(_0x24485a,null))[_0xc940('0x51')](handleError(_0x24485a,null));};exports['getMessages']=function(_0x4e068b,_0x150f3b,_0x202e00){var _0xfda7e3={'raw':![],'where':{}};var _0x5a76d2={};var _0x59112a={'count':0x0,'rows':[]};return db[_0xc940('0x25')][_0xc940('0x5c')]({'where':{'id':_0x4e068b[_0xc940('0x58')]['id']}})[_0xc940('0x20')](handleEntityNotFound(_0x150f3b,null))[_0xc940('0x20')](function(_0x4eb20e){if(_0x4eb20e){_0x5a76d2[_0xc940('0x2b')]=_[_0xc940('0x26')](db['FaxMessage'][_0xc940('0x53')]);_0x5a76d2[_0xc940('0x27')]=_[_0xc940('0x26')](_0x4e068b[_0xc940('0x27')]);_0x5a76d2[_0xc940('0x2a')]=_[_0xc940('0x2c')](_0x5a76d2['model'],_0x5a76d2['query']);_0xfda7e3['attributes']=_['intersection'](_0x5a76d2[_0xc940('0x2b')],qs[_0xc940('0x2d')](_0x4e068b['query'][_0xc940('0x2d')]));_0xfda7e3[_0xc940('0x2e')]=_0xfda7e3[_0xc940('0x2e')]['length']?_0xfda7e3[_0xc940('0x2e')]:_0x5a76d2['model'];if(!_0x4e068b[_0xc940('0x27')][_0xc940('0x2f')](_0xc940('0x30'))){_0xfda7e3[_0xc940('0x1a')]=qs[_0xc940('0x1a')](_0x4e068b[_0xc940('0x27')][_0xc940('0x1a')]);_0xfda7e3[_0xc940('0x19')]=qs[_0xc940('0x19')](_0x4e068b['query'][_0xc940('0x19')]);}_0xfda7e3[_0xc940('0x31')]=qs['sort'](_0x4e068b[_0xc940('0x27')][_0xc940('0x32')]);_0xfda7e3[_0xc940('0x37')]=qs['filters'](_['pick'](_0x4e068b['query'],_0x5a76d2[_0xc940('0x2a')]));_0xfda7e3[_0xc940('0x37')][_0xc940('0x5d')]=_0x4eb20e['id'];if(_0x4e068b[_0xc940('0x27')][_0xc940('0x38')]){_0xfda7e3[_0xc940('0x37')]=_[_0xc940('0x36')](_0xfda7e3[_0xc940('0x37')],{'$or':_[_0xc940('0x5e')](_0xfda7e3[_0xc940('0x2e')],function(_0x5e2965){var _0xd6f247={};_0xd6f247[_0x5e2965]={'$like':'%'+_0x4e068b['query'][_0xc940('0x38')]+'%'};return _0xd6f247;})});}if(_0x4e068b[_0xc940('0x27')][_0xc940('0x5f')]){var _0x3aac4e=_0x4e068b['query']['$gte'][_0xc940('0x60')](',');var _0x1bb64e={};_0x1bb64e[_0x3aac4e[0x0]]={'$gte':moment(_0x3aac4e[0x1])[_0xc940('0x61')](_0xc940('0x62'))};_0xfda7e3[_0xc940('0x37')]=_[_0xc940('0x36')](_0xfda7e3[_0xc940('0x37')],_0x1bb64e);}_0xfda7e3=_['merge']({},_0xfda7e3,_0x4e068b[_0xc940('0x39')]);return db[_0xc940('0x63')]['count']({'where':_0xfda7e3[_0xc940('0x37')]})[_0xc940('0x20')](function(_0x5a92f3){_0x59112a[_0xc940('0x43')]=_0x5a92f3;if(_0x4e068b[_0xc940('0x27')][_0xc940('0x44')]){_0xfda7e3[_0xc940('0x3a')]=[{'all':!![]}];}return db[_0xc940('0x63')][_0xc940('0x4f')](_0xfda7e3);})[_0xc940('0x20')](function(_0x1ccec4){_0x59112a[_0xc940('0x50')]=_0x1ccec4;return _0x59112a;});}})[_0xc940('0x20')](respondWithFilteredResult(_0x150f3b,_0xfda7e3))[_0xc940('0x51')](handleError(_0x150f3b,null));};exports[_0xc940('0x64')]=function(_0x5c06ff,_0x515db1,_0x109f0e){return db[_0xc940('0x25')][_0xc940('0x55')]({'where':{'id':_0x5c06ff[_0xc940('0x58')]['id']}})['then'](handleEntityNotFound(_0x515db1,null))[_0xc940('0x20')](function(_0x2b02cf){if(_0x2b02cf){return _0x2b02cf[_0xc940('0x65')](_0x5c06ff[_0xc940('0x57')][_0xc940('0x5b')],_[_0xc940('0x5a')](_0x5c06ff[_0xc940('0x57')],[_0xc940('0x5b'),'id'])||{})[_0xc940('0x66')](function(){return db[_0xc940('0x4c')][_0xc940('0x4f')]({'attributes':['id',_0xc940('0x22'),_0xc940('0x4e')],'where':{'id':_0x5c06ff[_0xc940('0x57')][_0xc940('0x5b')]}});})[_0xc940('0x20')](function(_0x5d0ee4){socket[_0xc940('0x67')]('faxInteractionTags:save',{'id':Number(_0x5c06ff[_0xc940('0x58')]['id']),'tags':_0x5d0ee4||[]});return{'id':Number(_0x5c06ff[_0xc940('0x58')]['id']),'tags':_0x5d0ee4||[]};});}})[_0xc940('0x20')](respondWithResult(_0x515db1,null))[_0xc940('0x51')](handleError(_0x515db1,null));};exports[_0xc940('0x68')]=function(_0x4c5200,_0x5ab251,_0xc53f98){var _0x50939c;return db[_0xc940('0x25')][_0xc940('0x55')]({'where':{'id':_0x4c5200[_0xc940('0x58')]['id']}})['then'](handleEntityNotFound(_0x5ab251,null))['then'](function(_0x154ec0){if(_0x154ec0){return _0x154ec0[_0xc940('0x68')](_0x4c5200[_0xc940('0x27')][_0xc940('0x5b')]);}})[_0xc940('0x20')](respondWithStatusCode(_0x5ab251,null))['catch'](handleError(_0x5ab251,null));};
\ No newline at end of file
index 18e88db..266928a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x574d=['remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','FaxInteraction','setMaxListeners','save','update'];(function(_0x4ac6a0,_0x4d28f9){var _0x1d9a5e=function(_0x4e5bdc){while(--_0x4e5bdc){_0x4ac6a0['push'](_0x4ac6a0['shift']());}};_0x1d9a5e(++_0x4d28f9);}(_0x574d,0xc0));var _0xd574=function(_0x5f1391,_0x19c132){_0x5f1391=_0x5f1391-0x0;var _0x50ebe3=_0x574d[_0x5f1391];return _0x50ebe3;};'use strict';var EventEmitter=require(_0xd574('0x0'));var FaxInteraction=require(_0xd574('0x1'))['db'][_0xd574('0x2')];var FaxInteractionEvents=new EventEmitter();FaxInteractionEvents[_0xd574('0x3')](0x0);var events={'afterCreate':_0xd574('0x4'),'afterUpdate':_0xd574('0x5'),'afterDestroy':_0xd574('0x6')};function emitEvent(_0x593d3c){return function(_0x2a54ff,_0x1be154,_0x469ad7){FaxInteractionEvents[_0xd574('0x7')](_0x593d3c+':'+_0x2a54ff['id'],_0x2a54ff);FaxInteractionEvents['emit'](_0x593d3c,_0x2a54ff);_0x469ad7(null);};}for(var e in events){if(events[_0xd574('0x8')](e)){var event=events[e];FaxInteraction[_0xd574('0x9')](e,emitEvent(event));}}module[_0xd574('0xa')]=FaxInteractionEvents;
\ No newline at end of file
+var _0x26f9=['../../mysqldb','setMaxListeners','remove','emit','hasOwnProperty','hook','exports','events'];(function(_0x5a4e0c,_0x5ce590){var _0x386eee=function(_0x4bcc41){while(--_0x4bcc41){_0x5a4e0c['push'](_0x5a4e0c['shift']());}};_0x386eee(++_0x5ce590);}(_0x26f9,0x16f));var _0x926f=function(_0x1dc82c,_0x4f43eb){_0x1dc82c=_0x1dc82c-0x0;var _0x39b34a=_0x26f9[_0x1dc82c];return _0x39b34a;};'use strict';var EventEmitter=require(_0x926f('0x0'));var FaxInteraction=require(_0x926f('0x1'))['db']['FaxInteraction'];var FaxInteractionEvents=new EventEmitter();FaxInteractionEvents[_0x926f('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x926f('0x3')};function emitEvent(_0x1c54cc){return function(_0x542c64,_0x38dd25,_0x40adf5){FaxInteractionEvents[_0x926f('0x4')](_0x1c54cc+':'+_0x542c64['id'],_0x542c64);FaxInteractionEvents[_0x926f('0x4')](_0x1c54cc,_0x542c64);_0x40adf5(null);};}for(var e in events){if(events[_0x926f('0x5')](e)){var event=events[e];FaxInteraction[_0x926f('0x6')](e,emitEvent(event));}}module[_0x926f('0x7')]=FaxInteractionEvents;
\ No newline at end of file
index fcdadaa..ec3eaba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe89e=['./faxInteraction.attributes','define','FaxInteraction','fax_interactions','lodash','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x13e54e,_0x1bcf8f){var _0x4810c7=function(_0x14ac8c){while(--_0x14ac8c){_0x13e54e['push'](_0x13e54e['shift']());}};_0x4810c7(++_0x1bcf8f);}(_0xe89e,0x1b2));var _0xee89=function(_0x34ea88,_0x417a83){_0x34ea88=_0x34ea88-0x0;var _0x13ed95=_0xe89e[_0x34ea88];return _0x13ed95;};'use strict';var _=require(_0xee89('0x0'));var util=require('util');var logger=require(_0xee89('0x1'))(_0xee89('0x2'));var moment=require(_0xee89('0x3'));var BPromise=require(_0xee89('0x4'));var rp=require(_0xee89('0x5'));var attributes=require(_0xee89('0x6'));module['exports']=function(_0x5bc679,_0x495b26){return _0x5bc679[_0xee89('0x7')](_0xee89('0x8'),attributes,{'tableName':_0xee89('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x87e7=['./faxInteraction.attributes','exports','define','FaxInteraction','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x1035c1,_0x2d8583){var _0x308d67=function(_0x58ddb6){while(--_0x58ddb6){_0x1035c1['push'](_0x1035c1['shift']());}};_0x308d67(++_0x2d8583);}(_0x87e7,0x1a6));var _0x787e=function(_0x3ab0ac,_0x1ea9cf){_0x3ab0ac=_0x3ab0ac-0x0;var _0x1f743d=_0x87e7[_0x3ab0ac];return _0x1f743d;};'use strict';var _=require(_0x787e('0x0'));var util=require(_0x787e('0x1'));var logger=require(_0x787e('0x2'))(_0x787e('0x3'));var moment=require(_0x787e('0x4'));var BPromise=require(_0x787e('0x5'));var rp=require(_0x787e('0x6'));var attributes=require(_0x787e('0x7'));module[_0x787e('0x8')]=function(_0xcebc5a,_0x26ed4a){return _0xcebc5a[_0x787e('0x9')](_0x787e('0xa'),attributes,{'tableName':'fax_interactions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index cf90bef..4bce100 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4536=['find','omit','ids','spread','AddTags','lodash','util','moment','bluebird','randomstring','../../mysqldb','rpc','client','localhost','./faxInteraction.socket','request','FaxInteraction,\x20%s,\x20%s','request\x20sent','FaxInteraction,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','UpdateFaxInteraction','body','options','raw','where','limit','then','debug','FaxInteraction'];(function(_0x1458e2,_0x1b45c2){var _0x4d191c=function(_0x5e1696){while(--_0x5e1696){_0x1458e2['push'](_0x1458e2['shift']());}};_0x4d191c(++_0x1b45c2);}(_0x4536,0x19d));var _0x6453=function(_0x11f345,_0x3d1ac3){_0x11f345=_0x11f345-0x0;var _0x5d66c9=_0x4536[_0x11f345];return _0x5d66c9;};'use strict';var _=require(_0x6453('0x0'));var util=require(_0x6453('0x1'));var moment=require(_0x6453('0x2'));var BPromise=require(_0x6453('0x3'));var rs=require(_0x6453('0x4'));var fs=require('fs');var db=require(_0x6453('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x6453('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x6453('0x7')]['http']({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0x6453('0x8'),'port':0x18eb});require(_0x6453('0x9'))['register'](socket);function respondWithRpcPromise(_0x351ce7,_0x55c4cc,_0x26a19f){return new BPromise(function(_0x12eaef,_0x228b09){return client[_0x6453('0xa')](_0x351ce7,_0x26a19f)['then'](function(_0x562ea0){logger['info'](_0x6453('0xb'),_0x55c4cc,_0x6453('0xc'));logger['debug'](_0x6453('0xd'),_0x55c4cc,_0x6453('0xc'),JSON[_0x6453('0xe')](_0x562ea0));if(_0x562ea0['error']){if(_0x562ea0[_0x6453('0xf')]['code']===0x1f4){logger[_0x6453('0xf')](_0x6453('0xb'),_0x55c4cc,_0x562ea0[_0x6453('0xf')]['message']);return _0x228b09(_0x562ea0[_0x6453('0xf')][_0x6453('0x10')]);}logger[_0x6453('0xf')](_0x6453('0xb'),_0x55c4cc,_0x562ea0[_0x6453('0xf')]['message']);return _0x12eaef(_0x562ea0[_0x6453('0xf')][_0x6453('0x10')]);}else{logger[_0x6453('0x11')]('FaxInteraction,\x20%s,\x20%s',_0x55c4cc,'request\x20sent');_0x12eaef(_0x562ea0[_0x6453('0x12')][_0x6453('0x10')]);}})[_0x6453('0x13')](function(_0x28de7f){logger['error'](_0x6453('0xb'),_0x55c4cc,_0x28de7f);_0x228b09(_0x28de7f);});});}exports[_0x6453('0x14')]=function(_0x1094c2){var _0x134211=this;return new Promise(function(_0x412b3e,_0x1b54f3){return db['FaxInteraction']['update'](_0x1094c2[_0x6453('0x15')],{'raw':_0x1094c2['options']?_0x1094c2[_0x6453('0x16')][_0x6453('0x17')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1094c2[_0x6453('0x16')]?_0x1094c2[_0x6453('0x16')][_0x6453('0x18')]||null:null,'attributes':_0x1094c2['options']?_0x1094c2[_0x6453('0x16')]['attributes']||null:null,'limit':_0x1094c2[_0x6453('0x16')]?_0x1094c2[_0x6453('0x16')][_0x6453('0x19')]||null:null})[_0x6453('0x1a')](function(_0x57e5cf){logger[_0x6453('0x11')]('UpdateFaxInteraction',_0x1094c2);logger[_0x6453('0x1b')]('UpdateFaxInteraction',_0x1094c2,JSON[_0x6453('0xe')](_0x57e5cf));_0x412b3e(_0x57e5cf);})[_0x6453('0x13')](function(_0x1c4c09){logger['error']('UpdateFaxInteraction',_0x1c4c09['message'],_0x1094c2);_0x1b54f3(_0x134211[_0x6453('0xf')](0x1f4,_0x1c4c09[_0x6453('0x10')]));});});};exports['AddTagsToFaxInteraction']=function(_0x987cc3){return new Promise(function(_0xb174e4,_0x13ffa0){return db[_0x6453('0x1c')][_0x6453('0x1d')]({'where':_0x987cc3[_0x6453('0x16')]?_0x987cc3[_0x6453('0x16')][_0x6453('0x18')]||null:null})[_0x6453('0x1a')](function(_0x2b0761){if(_0x2b0761){return _0x2b0761['addTags'](_0x987cc3['body']['ids'],_[_0x6453('0x1e')](_0x987cc3[_0x6453('0x15')],[_0x6453('0x1f'),'id'])||{});}})[_0x6453('0x20')](function(_0x695ed4){logger[_0x6453('0x11')]('AddTags',_0x987cc3);logger['debug']('AddTags',_0x987cc3,JSON[_0x6453('0xe')](_0x695ed4));_0xb174e4(_0x695ed4);})['catch'](function(_0x33356e){logger['error'](_0x6453('0x21'),_0x33356e['message'],_0x987cc3);_0x13ffa0(_this[_0x6453('0xf')](0x1f4,_0x33356e[_0x6453('0x10')]));});});};
\ No newline at end of file
+var _0x8aa6=['localhost','./faxInteraction.socket','register','request','then','info','FaxInteraction,\x20%s,\x20%s','request\x20sent','FaxInteraction,\x20%s,\x20%s,\x20%s','stringify','code','error','message','catch','UpdateFaxInteraction','update','options','raw','where','attributes','debug','find','addTags','body','ids','omit','AddTags','lodash','util','moment','../../config/logger','jayson/promise','client','socket.io-emitter'];(function(_0x43e124,_0x4fd236){var _0x43bf76=function(_0x398cd0){while(--_0x398cd0){_0x43e124['push'](_0x43e124['shift']());}};_0x43bf76(++_0x4fd236);}(_0x8aa6,0xc5));var _0x68aa=function(_0x4a63fc,_0x167a02){_0x4a63fc=_0x4a63fc-0x0;var _0x30d4c3=_0x8aa6[_0x4a63fc];return _0x30d4c3;};'use strict';var _=require(_0x68aa('0x0'));var util=require(_0x68aa('0x1'));var moment=require(_0x68aa('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x68aa('0x3'))('rpc');var config=require('../../config/environment');var jayson=require(_0x68aa('0x4'));var client=jayson[_0x68aa('0x5')]['http']({'port':0x232a});var socket=require(_0x68aa('0x6'))({'host':_0x68aa('0x7'),'port':0x18eb});require(_0x68aa('0x8'))[_0x68aa('0x9')](socket);function respondWithRpcPromise(_0x58e1e4,_0x350ba4,_0x564066){return new BPromise(function(_0x2cd580,_0x48df62){return client[_0x68aa('0xa')](_0x58e1e4,_0x564066)[_0x68aa('0xb')](function(_0xad68c5){logger[_0x68aa('0xc')](_0x68aa('0xd'),_0x350ba4,_0x68aa('0xe'));logger['debug'](_0x68aa('0xf'),_0x350ba4,'request\x20sent',JSON[_0x68aa('0x10')](_0xad68c5));if(_0xad68c5['error']){if(_0xad68c5['error'][_0x68aa('0x11')]===0x1f4){logger[_0x68aa('0x12')](_0x68aa('0xd'),_0x350ba4,_0xad68c5[_0x68aa('0x12')][_0x68aa('0x13')]);return _0x48df62(_0xad68c5[_0x68aa('0x12')][_0x68aa('0x13')]);}logger[_0x68aa('0x12')](_0x68aa('0xd'),_0x350ba4,_0xad68c5[_0x68aa('0x12')][_0x68aa('0x13')]);return _0x2cd580(_0xad68c5[_0x68aa('0x12')]['message']);}else{logger[_0x68aa('0xc')](_0x68aa('0xd'),_0x350ba4,_0x68aa('0xe'));_0x2cd580(_0xad68c5['result']['message']);}})[_0x68aa('0x14')](function(_0x1bdecd){logger[_0x68aa('0x12')](_0x68aa('0xd'),_0x350ba4,_0x1bdecd);_0x48df62(_0x1bdecd);});});}exports[_0x68aa('0x15')]=function(_0x2f7f33){var _0x43f9e7=this;return new Promise(function(_0x515f2a,_0x4d7066){return db['FaxInteraction'][_0x68aa('0x16')](_0x2f7f33['body'],{'raw':_0x2f7f33['options']?_0x2f7f33[_0x68aa('0x17')][_0x68aa('0x18')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2f7f33[_0x68aa('0x17')]?_0x2f7f33[_0x68aa('0x17')][_0x68aa('0x19')]||null:null,'attributes':_0x2f7f33[_0x68aa('0x17')]?_0x2f7f33['options'][_0x68aa('0x1a')]||null:null,'limit':_0x2f7f33['options']?_0x2f7f33[_0x68aa('0x17')]['limit']||null:null})[_0x68aa('0xb')](function(_0x3518b6){logger[_0x68aa('0xc')](_0x68aa('0x15'),_0x2f7f33);logger[_0x68aa('0x1b')]('UpdateFaxInteraction',_0x2f7f33,JSON[_0x68aa('0x10')](_0x3518b6));_0x515f2a(_0x3518b6);})[_0x68aa('0x14')](function(_0x3dd6ed){logger[_0x68aa('0x12')](_0x68aa('0x15'),_0x3dd6ed[_0x68aa('0x13')],_0x2f7f33);_0x4d7066(_0x43f9e7[_0x68aa('0x12')](0x1f4,_0x3dd6ed['message']));});});};exports['AddTagsToFaxInteraction']=function(_0x37f2e2){return new Promise(function(_0x3ba950,_0xcf9da6){return db['FaxInteraction'][_0x68aa('0x1c')]({'where':_0x37f2e2['options']?_0x37f2e2[_0x68aa('0x17')][_0x68aa('0x19')]||null:null})['then'](function(_0x421272){if(_0x421272){return _0x421272[_0x68aa('0x1d')](_0x37f2e2[_0x68aa('0x1e')][_0x68aa('0x1f')],_[_0x68aa('0x20')](_0x37f2e2[_0x68aa('0x1e')],[_0x68aa('0x1f'),'id'])||{});}})['spread'](function(_0x1bd371){logger['info'](_0x68aa('0x21'),_0x37f2e2);logger['debug'](_0x68aa('0x21'),_0x37f2e2,JSON['stringify'](_0x1bd371));_0x3ba950(_0x1bd371);})[_0x68aa('0x14')](function(_0x212817){logger[_0x68aa('0x12')]('AddTags',_0x212817[_0x68aa('0x13')],_0x37f2e2);_0xcf9da6(_this['error'](0x1f4,_0x212817[_0x68aa('0x13')]));});});};
\ No newline at end of file
index 6dc9071..505f60d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc5d6=['save','update','emit','register','./faxInteraction.events'];(function(_0x362067,_0x44dc93){var _0x5923b0=function(_0x565184){while(--_0x565184){_0x362067['push'](_0x362067['shift']());}};_0x5923b0(++_0x44dc93);}(_0xc5d6,0x1e4));var _0x6c5d=function(_0x1daa94,_0x4091a7){_0x1daa94=_0x1daa94-0x0;var _0xb0d49b=_0xc5d6[_0x1daa94];return _0xb0d49b;};'use strict';var FaxInteractionEvents=require(_0x6c5d('0x0'));var events=[_0x6c5d('0x1'),'remove',_0x6c5d('0x2')];function createListener(_0xb40f86,_0x518e19){return function(_0x11b972){_0x518e19[_0x6c5d('0x3')](_0xb40f86,_0x11b972);};}function removeListener(_0x3934e5,_0x2b9cc1){return function(){FaxInteractionEvents['removeListener'](_0x3934e5,_0x2b9cc1);};}exports[_0x6c5d('0x4')]=function(_0x255e3e){for(var _0x5996ed=0x0,_0x4fd32f=events['length'];_0x5996ed<_0x4fd32f;_0x5996ed++){var _0x2c803e=events[_0x5996ed];var _0x24995b=createListener('faxInteraction:'+_0x2c803e,_0x255e3e);FaxInteractionEvents['on'](_0x2c803e,_0x24995b);}};
\ No newline at end of file
+var _0x7374=['save','remove','update','emit','register','length','./faxInteraction.events'];(function(_0x105e24,_0x55857a){var _0x4c7608=function(_0x3e2e0a){while(--_0x3e2e0a){_0x105e24['push'](_0x105e24['shift']());}};_0x4c7608(++_0x55857a);}(_0x7374,0x15d));var _0x4737=function(_0x403beb,_0x10a634){_0x403beb=_0x403beb-0x0;var _0x2c3bcc=_0x7374[_0x403beb];return _0x2c3bcc;};'use strict';var FaxInteractionEvents=require(_0x4737('0x0'));var events=[_0x4737('0x1'),_0x4737('0x2'),_0x4737('0x3')];function createListener(_0xbdc654,_0x20af2c){return function(_0x2d11ad){_0x20af2c[_0x4737('0x4')](_0xbdc654,_0x2d11ad);};}function removeListener(_0x43e654,_0x1596de){return function(){FaxInteractionEvents['removeListener'](_0x43e654,_0x1596de);};}exports[_0x4737('0x5')]=function(_0x58f621){for(var _0x250a20=0x0,_0x5d1907=events[_0x4737('0x6')];_0x250a20<_0x5d1907;_0x250a20++){var _0x1b576f=events[_0x250a20];var _0x5385ff=createListener('faxInteraction:'+_0x1b576f,_0x58f621);FaxInteractionEvents['on'](_0x1b576f,_0x5385ff);}};
\ No newline at end of file
index 0196707..2d6e090 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x54af=['isAuthenticated','index','/describe','describe','/:id','show','/:id/messages','getMessages','post','create','tracked','fax','faxinteraction:addtags','faxinteraction:update','update','delete','faxinteraction:destroy','/:id/tags','removeTags','multer','util','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxInteraction.controller','get'];(function(_0x102675,_0x1235fe){var _0xc32599=function(_0x3a661f){while(--_0x3a661f){_0x102675['push'](_0x102675['shift']());}};_0xc32599(++_0x1235fe);}(_0x54af,0x7f));var _0xf54a=function(_0x14e95c,_0xfdee55){_0x14e95c=_0x14e95c-0x0;var _0x37925f=_0x54af[_0x14e95c];return _0x37925f;};'use strict';var multer=require(_0xf54a('0x0'));var util=require(_0xf54a('0x1'));var path=require('path');var express=require('express');var router=express[_0xf54a('0x2')]();var auth=require(_0xf54a('0x3'));var interaction=require(_0xf54a('0x4'));var config=require(_0xf54a('0x5'));var controller=require(_0xf54a('0x6'));router[_0xf54a('0x7')]('/',auth[_0xf54a('0x8')](),controller[_0xf54a('0x9')]);router[_0xf54a('0x7')](_0xf54a('0xa'),auth['isAuthenticated'](),controller[_0xf54a('0xb')]);router[_0xf54a('0x7')](_0xf54a('0xc'),auth[_0xf54a('0x8')](),controller[_0xf54a('0xd')]);router[_0xf54a('0x7')](_0xf54a('0xe'),auth[_0xf54a('0x8')](),controller[_0xf54a('0xf')]);router[_0xf54a('0x10')]('/',auth['isAuthenticated'](),controller[_0xf54a('0x11')]);router[_0xf54a('0x10')](_0xf54a('0xe'),auth[_0xf54a('0x8')](),controller['addMessage']);router[_0xf54a('0x10')]('/:id/tags',auth[_0xf54a('0x8')](),interaction[_0xf54a('0x12')](_0xf54a('0x13'),_0xf54a('0x14')),controller['addTags']);router['put'](_0xf54a('0xc'),auth[_0xf54a('0x8')](),interaction[_0xf54a('0x12')](_0xf54a('0x13'),_0xf54a('0x15')),controller[_0xf54a('0x16')]);router[_0xf54a('0x17')](_0xf54a('0xc'),auth['isAuthenticated'](),interaction[_0xf54a('0x12')](_0xf54a('0x13'),_0xf54a('0x18')),controller['destroy']);router[_0xf54a('0x17')](_0xf54a('0x19'),auth[_0xf54a('0x8')](),controller[_0xf54a('0x1a')]);module['exports']=router;
\ No newline at end of file
+var _0x3e96=['multer','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxInteraction.controller','isAuthenticated','index','get','/describe','describe','show','/:id/messages','getMessages','post','create','addMessage','/:id/tags','tracked','fax','addTags','put','faxinteraction:update','update','delete','faxinteraction:destroy','destroy','removeTags'];(function(_0x11a1e4,_0x4c43ac){var _0x547c63=function(_0x1201c4){while(--_0x1201c4){_0x11a1e4['push'](_0x11a1e4['shift']());}};_0x547c63(++_0x4c43ac);}(_0x3e96,0xe8));var _0x63e9=function(_0x1a0c59,_0x3b4dcc){_0x1a0c59=_0x1a0c59-0x0;var _0xed67c9=_0x3e96[_0x1a0c59];return _0xed67c9;};'use strict';var multer=require(_0x63e9('0x0'));var util=require('util');var path=require('path');var express=require(_0x63e9('0x1'));var router=express[_0x63e9('0x2')]();var auth=require(_0x63e9('0x3'));var interaction=require(_0x63e9('0x4'));var config=require(_0x63e9('0x5'));var controller=require(_0x63e9('0x6'));router['get']('/',auth[_0x63e9('0x7')](),controller[_0x63e9('0x8')]);router[_0x63e9('0x9')](_0x63e9('0xa'),auth[_0x63e9('0x7')](),controller[_0x63e9('0xb')]);router[_0x63e9('0x9')]('/:id',auth['isAuthenticated'](),controller[_0x63e9('0xc')]);router['get'](_0x63e9('0xd'),auth[_0x63e9('0x7')](),controller[_0x63e9('0xe')]);router[_0x63e9('0xf')]('/',auth['isAuthenticated'](),controller[_0x63e9('0x10')]);router[_0x63e9('0xf')](_0x63e9('0xd'),auth['isAuthenticated'](),controller[_0x63e9('0x11')]);router[_0x63e9('0xf')](_0x63e9('0x12'),auth[_0x63e9('0x7')](),interaction[_0x63e9('0x13')](_0x63e9('0x14'),'faxinteraction:addtags'),controller[_0x63e9('0x15')]);router[_0x63e9('0x16')]('/:id',auth[_0x63e9('0x7')](),interaction['tracked'](_0x63e9('0x14'),_0x63e9('0x17')),controller[_0x63e9('0x18')]);router[_0x63e9('0x19')]('/:id',auth[_0x63e9('0x7')](),interaction[_0x63e9('0x13')](_0x63e9('0x14'),_0x63e9('0x1a')),controller[_0x63e9('0x1b')]);router[_0x63e9('0x19')](_0x63e9('0x12'),auth[_0x63e9('0x7')](),controller[_0x63e9('0x1c')]);module['exports']=router;
\ No newline at end of file
index 9248ade..4008485 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x33e0=['out','DATE','sequelize','exports','TEXT','BOOLEAN','ENUM'];(function(_0xafec2e,_0x262feb){var _0x3c6025=function(_0x2e96d5){while(--_0x2e96d5){_0xafec2e['push'](_0xafec2e['shift']());}};_0x3c6025(++_0x262feb);}(_0x33e0,0xe9));var _0x033e=function(_0x22dd85,_0x55b276){_0x22dd85=_0x22dd85-0x0;var _0x2b42ea=_0x33e0[_0x22dd85];return _0x2b42ea;};'use strict';var Sequelize=require(_0x033e('0x0'));module[_0x033e('0x1')]={'body':{'type':Sequelize[_0x033e('0x2')]('medium'),'allowNull':![]},'read':{'type':Sequelize[_0x033e('0x3')],'defaultValue':![]},'direction':{'type':Sequelize[_0x033e('0x4')]('in',_0x033e('0x5')),'defaultValue':_0x033e('0x5'),'allowNull':![]},'failMessage':{'type':Sequelize[_0x033e('0x2')],'defaultValue':null},'readAt':{'type':Sequelize[_0x033e('0x6')]}};
\ No newline at end of file
+var _0x7e9a=['TEXT','medium','BOOLEAN','ENUM','DATE','sequelize','exports'];(function(_0x13bb50,_0x4d6c60){var _0x205bbc=function(_0x4dcd3d){while(--_0x4dcd3d){_0x13bb50['push'](_0x13bb50['shift']());}};_0x205bbc(++_0x4d6c60);}(_0x7e9a,0x1b7));var _0xa7e9=function(_0xd71dc9,_0x4a11ae){_0xd71dc9=_0xd71dc9-0x0;var _0x4cbc85=_0x7e9a[_0xd71dc9];return _0x4cbc85;};'use strict';var Sequelize=require(_0xa7e9('0x0'));module[_0xa7e9('0x1')]={'body':{'type':Sequelize[_0xa7e9('0x2')](_0xa7e9('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0xa7e9('0x4')],'defaultValue':![]},'direction':{'type':Sequelize[_0xa7e9('0x5')]('in','out'),'defaultValue':'out','allowNull':![]},'failMessage':{'type':Sequelize['TEXT'],'defaultValue':null},'readAt':{'type':Sequelize[_0xa7e9('0x6')]}};
\ No newline at end of file
index 7529bdc..7180ad4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa46e=['AcceptMessage','acceptMessage','manual','interface','SIP/%s','channel','event','EventManager','acceptmessage','agent','FaxInteractionId','RejectMessage','rejectMessage','create','CmContact','findOne','Attachment','AttachmentId','SendFax','FaxAccountId','basename','fast-json-patch','request-promise','bluebird','mustache','util','sox','ejs','squel','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','socket.io-emitter','localhost','register','jayson/promise','client','http','request','then','info','FaxMessage,\x20%s,\x20%s','request\x20sent','debug','FaxMessage,\x20%s,\x20%s,\x20%s','stringify','error','message','sendStatus','end','json','count','offset','status','set','Content-Range','reject','save','update','destroy','stack','name','send','rawAttributes','model','query','dateStart','dateEnd','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','add','day','merge','filter','options','FaxMessage','include','rows','show','params','keys','includeAll','find','catch','body','describe','fax-interactions','accept','fax','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','Contact','get','FaxInteraction','isNil','interaction','[FAXMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','null'];(function(_0x3d7fb5,_0x16eb5c){var _0x3a9642=function(_0x3f5b2a){while(--_0x3f5b2a){_0x3d7fb5['push'](_0x3d7fb5['shift']());}};_0x3a9642(++_0x16eb5c);}(_0xa46e,0x8a));var _0xea46=function(_0x1ebeea,_0x2f54f4){_0x1ebeea=_0x1ebeea-0x0;var _0x576465=_0xa46e[_0x1ebeea];return _0x576465;};'use strict';var jsonpatch=require(_0xea46('0x0'));var rp=require(_0xea46('0x1'));var moment=require('moment');var BPromise=require(_0xea46('0x2'));var Mustache=require(_0xea46('0x3'));var util=require(_0xea46('0x4'));var path=require('path');var sox=require(_0xea46('0x5'));var csv=require('to-csv');var ejs=require(_0xea46('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0xea46('0x7'));var crypto=require('crypto');var jsforce=require(_0xea46('0x8'));var deskjs=require(_0xea46('0x9'));var toCsv=require('to-csv');var querystring=require(_0xea46('0xa'));var Papa=require(_0xea46('0xb'));var qs=require(_0xea46('0xc'));var logger=require(_0xea46('0xd'))(_0xea46('0xe'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var socket=require(_0xea46('0xf'))({'host':_0xea46('0x10'),'port':0x18eb});require('./faxMessage.socket')[_0xea46('0x11')](socket);var jayson=require(_0xea46('0x12'));var client=jayson[_0xea46('0x13')]['http']({'port':0x232c});var client9002=jayson[_0xea46('0x13')][_0xea46('0x14')]({'port':0x232a});function respondWithRpcPromise(_0x4e10f3,_0x13390c,_0x1a4fe2,_0x534aa3){return new BPromise(function(_0x20955e,_0x4e4d3f){var _0x3024af=_0x534aa3||client;return _0x3024af[_0xea46('0x15')](_0x4e10f3,_0x1a4fe2)[_0xea46('0x16')](function(_0x40bb42){logger[_0xea46('0x17')](_0xea46('0x18'),_0x13390c,_0xea46('0x19'));logger[_0xea46('0x1a')](_0xea46('0x1b'),_0x13390c,'request\x20sent',JSON[_0xea46('0x1c')](_0x40bb42));if(_0x40bb42[_0xea46('0x1d')]){if(_0x40bb42[_0xea46('0x1d')]['code']===0x1f4){logger['error'](_0xea46('0x18'),_0x13390c,_0x40bb42[_0xea46('0x1d')]['message']);return _0x4e4d3f(_0x40bb42['error'][_0xea46('0x1e')]);}logger[_0xea46('0x1d')]('FaxMessage,\x20%s,\x20%s',_0x13390c,_0x40bb42[_0xea46('0x1d')][_0xea46('0x1e')]);return _0x20955e(_0x40bb42[_0xea46('0x1d')][_0xea46('0x1e')]);}else{logger['info'](_0xea46('0x18'),_0x13390c,'request\x20sent');_0x20955e(_0x40bb42['result'][_0xea46('0x1e')]);}})['catch'](function(_0x4cc673){logger['error'](_0xea46('0x18'),_0x13390c,_0x4cc673);_0x4e4d3f(_0x4cc673);});});}function respondWithStatusCode(_0x36f982,_0x3d1850){_0x3d1850=_0x3d1850||0xcc;return function(_0x5beb44){if(_0x5beb44){return _0x36f982[_0xea46('0x1f')](_0x3d1850);}return _0x36f982['status'](_0x3d1850)[_0xea46('0x20')]();};}function respondWithResult(_0x2008b0,_0x528eae){_0x528eae=_0x528eae||0xc8;return function(_0xac33c3){if(_0xac33c3){return _0x2008b0['status'](_0x528eae)[_0xea46('0x21')](_0xac33c3);}};}function respondWithFilteredResult(_0x114bf9,_0xd4cf78){return function(_0x4bf494){if(_0x4bf494){var _0x5d2de1=_0x4bf494[_0xea46('0x22')],_0x44e797=_0xd4cf78['offset'],_0x38ac07=_0xd4cf78[_0xea46('0x23')]+_0xd4cf78['limit'],_0x4b369c;if(_0x38ac07>=_0x5d2de1){_0x38ac07=_0x5d2de1;_0x4b369c=0xc8;}else{_0x4b369c=0xce;}_0x114bf9[_0xea46('0x24')](_0x4b369c);return _0x114bf9[_0xea46('0x25')](_0xea46('0x26'),_0x44e797+'-'+_0x38ac07+'/'+_0x5d2de1)[_0xea46('0x21')](_0x4bf494);}return null;};}function patchUpdates(_0x146995){return function(_0x174345){try{jsonpatch['apply'](_0x174345,_0x146995,!![]);}catch(_0x382bbc){return BPromise[_0xea46('0x27')](_0x382bbc);}return _0x174345[_0xea46('0x28')]();};}function saveUpdates(_0x5e0e35,_0x3e7856){return function(_0x3cdf96){if(_0x3cdf96){return _0x3cdf96[_0xea46('0x29')](_0x5e0e35)['then'](function(_0x4a0635){return _0x4a0635;});}return null;};}function removeEntity(_0x4f05d8,_0x64e2d0){return function(_0x16f730){if(_0x16f730){return _0x16f730[_0xea46('0x2a')]()[_0xea46('0x16')](function(){_0x4f05d8[_0xea46('0x24')](0xcc)[_0xea46('0x20')]();});}};}function handleEntityNotFound(_0x45b628,_0x224911){return function(_0x142ccb){if(!_0x142ccb){_0x45b628[_0xea46('0x1f')](0x194);}return _0x142ccb;};}function handleError(_0x3a7cf5,_0x48bf17){_0x48bf17=_0x48bf17||0x1f4;return function(_0x41d02e){logger[_0xea46('0x1d')](_0x41d02e[_0xea46('0x2b')]);if(_0x41d02e[_0xea46('0x2c')]){delete _0x41d02e[_0xea46('0x2c')];}_0x3a7cf5[_0xea46('0x24')](_0x48bf17)[_0xea46('0x2d')](_0x41d02e);};}exports['index']=function(_0x2e6f6f,_0x195ebb){var _0x388449={},_0x23db8b={},_0x2e8857={'count':0x0,'rows':[]};var _0x51963a=db['FaxMessage'][_0xea46('0x2e')];_0x23db8b[_0xea46('0x2f')]=_['keys'](_0x51963a);var _0x38d970={'dateStart':_0x2e6f6f[_0xea46('0x30')][_0xea46('0x31')],'dateEnd':_0x2e6f6f[_0xea46('0x30')]['dateEnd']};delete _0x2e6f6f['query'][_0xea46('0x31')];delete _0x2e6f6f['query'][_0xea46('0x32')];_0x23db8b[_0xea46('0x30')]=_['keys'](_0x2e6f6f[_0xea46('0x30')]);_0x23db8b[_0xea46('0x33')]=_['intersection'](_0x23db8b[_0xea46('0x2f')],_0x23db8b[_0xea46('0x30')]);_0x388449['attributes']=_[_0xea46('0x34')](_0x23db8b[_0xea46('0x2f')],qs[_0xea46('0x35')](_0x2e6f6f[_0xea46('0x30')]['fields']));_0x388449[_0xea46('0x36')]=_0x388449[_0xea46('0x36')][_0xea46('0x37')]?_0x388449[_0xea46('0x36')]:_0x23db8b[_0xea46('0x2f')];if(!_0x2e6f6f['query'][_0xea46('0x38')](_0xea46('0x39'))){_0x388449['limit']=qs[_0xea46('0x3a')](_0x2e6f6f[_0xea46('0x30')][_0xea46('0x3a')]);_0x388449[_0xea46('0x23')]=qs['offset'](_0x2e6f6f[_0xea46('0x30')][_0xea46('0x23')]);}_0x388449[_0xea46('0x3b')]=qs['sort'](_0x2e6f6f[_0xea46('0x30')][_0xea46('0x3c')]);_0x388449[_0xea46('0x3d')]=qs[_0xea46('0x33')](_[_0xea46('0x3e')](_0x2e6f6f[_0xea46('0x30')],_0x23db8b[_0xea46('0x33')]));if(_0x38d970[_0xea46('0x31')]){if(_0x38d970[_0xea46('0x32')]){_0x38d970[_0xea46('0x32')]=moment(_0x38d970[_0xea46('0x32')])[_0xea46('0x3f')](0x1,_0xea46('0x40'));}else{_0x38d970[_0xea46('0x32')]=moment(_0x38d970[_0xea46('0x31')])['add'](0x1,'day');}_[_0xea46('0x41')](_0x388449[_0xea46('0x3d')],{'createdAt':{'$gte':_0x38d970[_0xea46('0x31')],'$lte':_0x38d970[_0xea46('0x32')]}});}if(_0x2e6f6f['query']['filter']){_0x388449['where']=_[_0xea46('0x41')](_0x388449[_0xea46('0x3d')],{'$or':_['map'](_0x388449[_0xea46('0x36')],function(_0x29caf0){var _0x18039b={};_0x18039b[_0x29caf0]={'$like':'%'+_0x2e6f6f[_0xea46('0x30')][_0xea46('0x42')]+'%'};return _0x18039b;})});}_0x388449=_['merge']({},_0x388449,_0x2e6f6f[_0xea46('0x43')]);var _0x4bd3f2={'where':_0x388449[_0xea46('0x3d')]};return db[_0xea46('0x44')][_0xea46('0x22')](_0x4bd3f2)[_0xea46('0x16')](function(_0x9c26cf){_0x2e8857[_0xea46('0x22')]=_0x9c26cf;if(_0x2e6f6f[_0xea46('0x30')]['includeAll']){_0x388449[_0xea46('0x45')]=[{'all':!![]}];}return db[_0xea46('0x44')]['findAll'](_0x388449);})[_0xea46('0x16')](function(_0x42e305){_0x2e8857[_0xea46('0x46')]=_0x42e305;return _0x2e8857;})['then'](respondWithFilteredResult(_0x195ebb,_0x388449))['catch'](handleError(_0x195ebb,null));};exports[_0xea46('0x47')]=function(_0x3a8787,_0x3c5a9f){var _0x1a4e64={'raw':!![],'where':{'id':_0x3a8787[_0xea46('0x48')]['id']}},_0x4641bf={};_0x4641bf[_0xea46('0x2f')]=_[_0xea46('0x49')](db[_0xea46('0x44')][_0xea46('0x2e')]);_0x4641bf['query']=_[_0xea46('0x49')](_0x3a8787['query']);_0x4641bf[_0xea46('0x33')]=_[_0xea46('0x34')](_0x4641bf[_0xea46('0x2f')],_0x4641bf['query']);_0x1a4e64[_0xea46('0x36')]=_[_0xea46('0x34')](_0x4641bf[_0xea46('0x2f')],qs[_0xea46('0x35')](_0x3a8787['query']['fields']));_0x1a4e64[_0xea46('0x36')]=_0x1a4e64[_0xea46('0x36')]['length']?_0x1a4e64[_0xea46('0x36')]:_0x4641bf['model'];if(_0x3a8787[_0xea46('0x30')][_0xea46('0x4a')]){_0x1a4e64[_0xea46('0x45')]=[{'all':!![]}];}_0x1a4e64=_[_0xea46('0x41')]({},_0x1a4e64,_0x3a8787[_0xea46('0x43')]);return db[_0xea46('0x44')][_0xea46('0x4b')](_0x1a4e64)['then'](handleEntityNotFound(_0x3c5a9f,null))['then'](respondWithResult(_0x3c5a9f,null))[_0xea46('0x4c')](handleError(_0x3c5a9f,null));};exports['update']=function(_0x855801,_0x16022f){if(_0x855801[_0xea46('0x4d')]['id']){delete _0x855801['body']['id'];}return db[_0xea46('0x44')]['find']({'where':{'id':_0x855801[_0xea46('0x48')]['id']}})[_0xea46('0x16')](handleEntityNotFound(_0x16022f,null))['then'](saveUpdates(_0x855801['body'],null))[_0xea46('0x16')](respondWithResult(_0x16022f,null))[_0xea46('0x4c')](handleError(_0x16022f,null));};exports[_0xea46('0x2a')]=function(_0x55fec0,_0x287a41){return db['FaxMessage'][_0xea46('0x4b')]({'where':{'id':_0x55fec0['params']['id']}})[_0xea46('0x16')](handleEntityNotFound(_0x287a41,null))[_0xea46('0x16')](removeEntity(_0x287a41,null))[_0xea46('0x4c')](handleError(_0x287a41,null));};exports[_0xea46('0x4e')]=function(_0x17ef10,_0x4c5beb){return db[_0xea46('0x44')][_0xea46('0x4e')]()[_0xea46('0x16')](respondWithResult(_0x4c5beb,null))['catch'](handleError(_0x4c5beb,null));};var interaction_log=require('../../config/logger')(_0xea46('0x4f'));exports[_0xea46('0x50')]=function(_0x2dd840,_0x12a242,_0x2d4e87){var _0x175a42={'channel':_0xea46('0x51')};if(_0x2dd840[_0xea46('0x4d')]['id']){delete _0x2dd840[_0xea46('0x4d')]['id'];}_0x2dd840[_0xea46('0x4d')][_0xea46('0x52')]=!![];_0x2dd840[_0xea46('0x4d')][_0xea46('0x53')]=moment()[_0xea46('0x54')](_0xea46('0x55'));_0x2dd840['body'][_0xea46('0x56')]=_0x2dd840[_0xea46('0x4d')][_0xea46('0x56')]||_0x2dd840[_0xea46('0x57')]['id'];return db['FaxMessage'][_0xea46('0x4b')]({'where':{'id':_0x2dd840[_0xea46('0x48')]['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0xea46('0x58')}]})[_0xea46('0x16')](handleEntityNotFound(_0x12a242,null))['then'](saveUpdates(_0x2dd840[_0xea46('0x4d')],null))[_0xea46('0x16')](function(_0x106643){if(_0x106643){_0x175a42['message']=_0x106643[_0xea46('0x59')]({'plain':!![]});return db[_0xea46('0x5a')][_0xea46('0x4b')]({'where':{'id':_0x106643['FaxInteractionId']}});}return null;})['then'](handleEntityNotFound(_0x12a242,null))['then'](function(_0x8f321){if(_0x8f321){return _0x8f321[_0xea46('0x29')]({'UserId':_0x2dd840[_0xea46('0x4d')][_0xea46('0x56')],'read1stAt':_[_0xea46('0x5b')](_0x8f321['read1stAt'])?moment()[_0xea46('0x54')]('YYYY-MM-DD\x20HH:mm:ss'):undefined});}return null;})[_0xea46('0x16')](function(_0x283dc8){if(_0x283dc8){_0x175a42[_0xea46('0x5c')]=_0x283dc8['get']({'plain':!![]});interaction_log['info'](_0xea46('0x5d'),_0x2dd840[_0xea46('0x57')]['id'],_0x2dd840['user'][_0xea46('0x2c')],_0x2dd840[_0xea46('0x57')][_0xea46('0x5e')],_0x175a42[_0xea46('0x5c')]['id'],_0x2dd840[_0xea46('0x4d')]?JSON['stringify'](_0x2dd840[_0xea46('0x4d')]):_0xea46('0x5f'));return respondWithRpcPromise(_0xea46('0x60'),_0xea46('0x61'),_0x175a42);}return null;})[_0xea46('0x16')](function(_0xd13bb7){if(_0xd13bb7){if(_0x2dd840[_0xea46('0x4d')][_0xea46('0x62')]){_0x175a42['message'][_0xea46('0x63')]=util[_0xea46('0x54')](_0xea46('0x64'),_0x2dd840[_0xea46('0x57')][_0xea46('0x2c')]);_0x175a42[_0xea46('0x1e')][_0xea46('0x65')]=_0x175a42['channel'];_0x175a42['message'][_0xea46('0x66')]=_0xea46('0x50');return respondWithRpcPromise(_0xea46('0x67'),_0xea46('0x67'),{'event':_0xea46('0x68'),'message':_0x175a42[_0xea46('0x1e')]},client9002)[_0xea46('0x16')](function(){return _0x175a42;});}return _0x175a42;}return null;})[_0xea46('0x16')](respondWithResult(_0x12a242,null))[_0xea46('0x4c')](handleError(_0x12a242,null));};var interaction_log=require(_0xea46('0xd'))(_0xea46('0x4f'));exports['reject']=function(_0x204435,_0x7fbb17,_0x2f36a1){var _0x3a4709={'agent':{},'channel':'fax'};if(_0x204435[_0xea46('0x4d')]['id']){delete _0x204435[_0xea46('0x4d')]['id'];}_0x204435[_0xea46('0x4d')][_0xea46('0x56')]=_0x204435['body'][_0xea46('0x56')]||_0x204435[_0xea46('0x57')]['id'];_0x3a4709[_0xea46('0x69')]['id']=_0x204435[_0xea46('0x4d')]['UserId'];return db[_0xea46('0x44')][_0xea46('0x4b')]({'where':{'id':_0x204435['params']['id'],'UserId':null}})['then'](handleEntityNotFound(_0x7fbb17,null))[_0xea46('0x16')](function(_0x3d8f31){if(_0x3d8f31){_0x3a4709[_0xea46('0x1e')]=_0x3d8f31[_0xea46('0x59')]({'plain':!![]});return db[_0xea46('0x5a')][_0xea46('0x4b')]({'where':{'id':_0x3d8f31[_0xea46('0x6a')]}});}return null;})[_0xea46('0x16')](handleEntityNotFound(_0x7fbb17,null))[_0xea46('0x16')](function(_0x1d87ea){if(_0x1d87ea){_0x3a4709[_0xea46('0x5c')]=_0x1d87ea[_0xea46('0x59')]({'plain':!![]});interaction_log[_0xea46('0x17')]('[FAXMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x204435[_0xea46('0x57')]['id'],_0x204435[_0xea46('0x57')]['name'],_0x204435[_0xea46('0x57')][_0xea46('0x5e')],_0x3a4709[_0xea46('0x5c')]['id'],_0x204435[_0xea46('0x4d')]?JSON['stringify'](_0x204435[_0xea46('0x4d')]):'null');return respondWithRpcPromise(_0xea46('0x6b'),_0xea46('0x6c'),_0x3a4709);}return null;})[_0xea46('0x16')](function(_0x199c97){if(_0x199c97){_0x199c97['message'][_0xea46('0x63')]=util['format'](_0xea46('0x64'),_0x204435[_0xea46('0x57')]['name']);_0x199c97[_0xea46('0x1e')][_0xea46('0x65')]=_0x3a4709['channel'];_0x199c97[_0xea46('0x1e')][_0xea46('0x66')]='reject';respondWithRpcPromise('EventManager','EventManager',{'event':'rejectmessage','message':_0x199c97[_0xea46('0x1e')]},client9002);return _0x3a4709;}return null;})[_0xea46('0x16')](respondWithResult(_0x7fbb17,null))[_0xea46('0x4c')](handleError(_0x7fbb17,null));};exports[_0xea46('0x6d')]=function(_0xad60e2,_0xe6c28b){var _0x346b4a;return db[_0xea46('0x44')]['create'](_0xad60e2[_0xea46('0x4d')],{})[_0xea46('0x16')](function(_0x19ee7e){_0x346b4a=_0x19ee7e;return db[_0xea46('0x6e')][_0xea46('0x6f')]({'where':{'id':_0x346b4a['ContactId']}});})['then'](function(_0x29136d){if(_[_0xea46('0x5b')](_0x29136d)){return;}else{_0x346b4a[_0xea46('0x51')]=_0x29136d[_0xea46('0x51')];return db[_0xea46('0x70')]['findOne']({'where':{'id':_0x346b4a[_0xea46('0x71')]}});}})[_0xea46('0x16')](function(_0x4dbf5f){return respondWithRpcPromise('SendFax',_0xea46('0x72'),{'FaxAccountId':_[_0xea46('0x5b')](_0xad60e2[_0xea46('0x4d')])?undefined:_0xad60e2[_0xea46('0x4d')][_0xea46('0x73')],'path':_['isNil'](_0x4dbf5f)?undefined:util[_0xea46('0x54')]('/var/opt/motion2/server/files/attachments/%s',_0x4dbf5f[_0xea46('0x74')]),'fax':_[_0xea46('0x5b')](_0x346b4a[_0xea46('0x51')])?undefined:_0x346b4a[_0xea46('0x51')],'AttachmentId':_0x346b4a['AttachmentId']},client9002);})[_0xea46('0x16')](respondWithResult(_0xe6c28b,0xc9))[_0xea46('0x4c')](handleError(_0xe6c28b,null));};
\ No newline at end of file
+var _0x6302=['AcceptMessage','acceptMessage','manual','interface','SIP/%s','channel','event','accept','acceptmessage','agent','rejectMessage','EventManager','rejectmessage','create','findOne','ContactId','Attachment','AttachmentId','SendFax','FaxAccountId','/var/opt/motion2/server/files/attachments/%s','request-promise','moment','bluebird','mustache','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','api','../../config/utils','../../mysqldb','localhost','register','jayson/promise','client','http','request','then','info','request\x20sent','debug','FaxMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','FaxMessage,\x20%s,\x20%s','message','result','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','destroy','name','send','FaxMessage','model','keys','query','dateStart','dateEnd','filters','attributes','intersection','fields','length','nolimit','limit','order','sort','where','pick','add','day','merge','filter','map','options','includeAll','findAll','rows','show','params','rawAttributes','find','update','body','catch','describe','../../config/logger','fax-interactions','fax','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact','Contact','get','FaxInteraction','FaxInteractionId','isNil','read1stAt','interaction','[FAXMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','null'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x6302,0x109));var _0x2630=function(_0x34aea4,_0x2f9423){_0x34aea4=_0x34aea4-0x0;var _0x2a4abb=_0x6302[_0x34aea4];return _0x2a4abb;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x2630('0x0'));var moment=require(_0x2630('0x1'));var BPromise=require(_0x2630('0x2'));var Mustache=require(_0x2630('0x3'));var util=require('util');var path=require('path');var sox=require(_0x2630('0x4'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x2630('0x5'));var squel=require(_0x2630('0x6'));var crypto=require(_0x2630('0x7'));var jsforce=require(_0x2630('0x8'));var deskjs=require(_0x2630('0x9'));var toCsv=require(_0x2630('0xa'));var querystring=require(_0x2630('0xb'));var Papa=require(_0x2630('0xc'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x2630('0xd'));var utils=require(_0x2630('0xe'));var config=require('../../config/environment');var db=require(_0x2630('0xf'))['db'];var socket=require('socket.io-emitter')({'host':_0x2630('0x10'),'port':0x18eb});require('./faxMessage.socket')[_0x2630('0x11')](socket);var jayson=require(_0x2630('0x12'));var client=jayson[_0x2630('0x13')][_0x2630('0x14')]({'port':0x232c});var client9002=jayson[_0x2630('0x13')][_0x2630('0x14')]({'port':0x232a});function respondWithRpcPromise(_0x50b8e5,_0x4424c1,_0x35ad63,_0x405a89){return new BPromise(function(_0x16b9c1,_0x4866f2){var _0x33f40d=_0x405a89||client;return _0x33f40d[_0x2630('0x15')](_0x50b8e5,_0x35ad63)[_0x2630('0x16')](function(_0x4dc77f){logger[_0x2630('0x17')]('FaxMessage,\x20%s,\x20%s',_0x4424c1,_0x2630('0x18'));logger[_0x2630('0x19')](_0x2630('0x1a'),_0x4424c1,_0x2630('0x18'),JSON[_0x2630('0x1b')](_0x4dc77f));if(_0x4dc77f[_0x2630('0x1c')]){if(_0x4dc77f[_0x2630('0x1c')][_0x2630('0x1d')]===0x1f4){logger['error'](_0x2630('0x1e'),_0x4424c1,_0x4dc77f['error']['message']);return _0x4866f2(_0x4dc77f['error'][_0x2630('0x1f')]);}logger[_0x2630('0x1c')](_0x2630('0x1e'),_0x4424c1,_0x4dc77f[_0x2630('0x1c')][_0x2630('0x1f')]);return _0x16b9c1(_0x4dc77f[_0x2630('0x1c')][_0x2630('0x1f')]);}else{logger[_0x2630('0x17')](_0x2630('0x1e'),_0x4424c1,_0x2630('0x18'));_0x16b9c1(_0x4dc77f[_0x2630('0x20')][_0x2630('0x1f')]);}})['catch'](function(_0x47a037){logger[_0x2630('0x1c')](_0x2630('0x1e'),_0x4424c1,_0x47a037);_0x4866f2(_0x47a037);});});}function respondWithStatusCode(_0x4f7617,_0x23049c){_0x23049c=_0x23049c||0xcc;return function(_0x5c67b7){if(_0x5c67b7){return _0x4f7617[_0x2630('0x21')](_0x23049c);}return _0x4f7617[_0x2630('0x22')](_0x23049c)[_0x2630('0x23')]();};}function respondWithResult(_0x22a617,_0x57f7e6){_0x57f7e6=_0x57f7e6||0xc8;return function(_0x3a9e7f){if(_0x3a9e7f){return _0x22a617[_0x2630('0x22')](_0x57f7e6)[_0x2630('0x24')](_0x3a9e7f);}};}function respondWithFilteredResult(_0x81ced7,_0x3468dc){return function(_0x161248){if(_0x161248){var _0x4ef7fb=_0x161248[_0x2630('0x25')],_0xb6442a=_0x3468dc[_0x2630('0x26')],_0x4acf70=_0x3468dc[_0x2630('0x26')]+_0x3468dc['limit'],_0x5497d9;if(_0x4acf70>=_0x4ef7fb){_0x4acf70=_0x4ef7fb;_0x5497d9=0xc8;}else{_0x5497d9=0xce;}_0x81ced7[_0x2630('0x22')](_0x5497d9);return _0x81ced7[_0x2630('0x27')](_0x2630('0x28'),_0xb6442a+'-'+_0x4acf70+'/'+_0x4ef7fb)['json'](_0x161248);}return null;};}function patchUpdates(_0x3ad356){return function(_0x4ad461){try{jsonpatch[_0x2630('0x29')](_0x4ad461,_0x3ad356,!![]);}catch(_0x4fe723){return BPromise[_0x2630('0x2a')](_0x4fe723);}return _0x4ad461[_0x2630('0x2b')]();};}function saveUpdates(_0x560dd8,_0x683f3d){return function(_0x552c05){if(_0x552c05){return _0x552c05['update'](_0x560dd8)[_0x2630('0x16')](function(_0xee67a1){return _0xee67a1;});}return null;};}function removeEntity(_0x572d28,_0x38c879){return function(_0x19d2fc){if(_0x19d2fc){return _0x19d2fc[_0x2630('0x2c')]()[_0x2630('0x16')](function(){_0x572d28[_0x2630('0x22')](0xcc)[_0x2630('0x23')]();});}};}function handleEntityNotFound(_0x357035,_0x51634d){return function(_0x1f21d0){if(!_0x1f21d0){_0x357035[_0x2630('0x21')](0x194);}return _0x1f21d0;};}function handleError(_0x50b882,_0x21f998){_0x21f998=_0x21f998||0x1f4;return function(_0x4ba47e){logger[_0x2630('0x1c')](_0x4ba47e['stack']);if(_0x4ba47e['name']){delete _0x4ba47e[_0x2630('0x2d')];}_0x50b882[_0x2630('0x22')](_0x21f998)[_0x2630('0x2e')](_0x4ba47e);};}exports['index']=function(_0x32d40d,_0x33d7f1){var _0x57fcf7={},_0x43b997={},_0x3975d1={'count':0x0,'rows':[]};var _0x49198c=db[_0x2630('0x2f')]['rawAttributes'];_0x43b997[_0x2630('0x30')]=_[_0x2630('0x31')](_0x49198c);var _0x55bb15={'dateStart':_0x32d40d[_0x2630('0x32')][_0x2630('0x33')],'dateEnd':_0x32d40d['query'][_0x2630('0x34')]};delete _0x32d40d[_0x2630('0x32')][_0x2630('0x33')];delete _0x32d40d[_0x2630('0x32')][_0x2630('0x34')];_0x43b997[_0x2630('0x32')]=_[_0x2630('0x31')](_0x32d40d[_0x2630('0x32')]);_0x43b997[_0x2630('0x35')]=_['intersection'](_0x43b997[_0x2630('0x30')],_0x43b997['query']);_0x57fcf7[_0x2630('0x36')]=_[_0x2630('0x37')](_0x43b997[_0x2630('0x30')],qs[_0x2630('0x38')](_0x32d40d[_0x2630('0x32')][_0x2630('0x38')]));_0x57fcf7['attributes']=_0x57fcf7[_0x2630('0x36')][_0x2630('0x39')]?_0x57fcf7['attributes']:_0x43b997['model'];if(!_0x32d40d[_0x2630('0x32')]['hasOwnProperty'](_0x2630('0x3a'))){_0x57fcf7[_0x2630('0x3b')]=qs[_0x2630('0x3b')](_0x32d40d['query'][_0x2630('0x3b')]);_0x57fcf7[_0x2630('0x26')]=qs['offset'](_0x32d40d['query'][_0x2630('0x26')]);}_0x57fcf7[_0x2630('0x3c')]=qs[_0x2630('0x3d')](_0x32d40d[_0x2630('0x32')]['sort']);_0x57fcf7[_0x2630('0x3e')]=qs[_0x2630('0x35')](_[_0x2630('0x3f')](_0x32d40d[_0x2630('0x32')],_0x43b997[_0x2630('0x35')]));if(_0x55bb15[_0x2630('0x33')]){if(_0x55bb15[_0x2630('0x34')]){_0x55bb15['dateEnd']=moment(_0x55bb15[_0x2630('0x34')])[_0x2630('0x40')](0x1,_0x2630('0x41'));}else{_0x55bb15[_0x2630('0x34')]=moment(_0x55bb15[_0x2630('0x33')])[_0x2630('0x40')](0x1,_0x2630('0x41'));}_[_0x2630('0x42')](_0x57fcf7['where'],{'createdAt':{'$gte':_0x55bb15['dateStart'],'$lte':_0x55bb15[_0x2630('0x34')]}});}if(_0x32d40d[_0x2630('0x32')][_0x2630('0x43')]){_0x57fcf7[_0x2630('0x3e')]=_[_0x2630('0x42')](_0x57fcf7['where'],{'$or':_[_0x2630('0x44')](_0x57fcf7['attributes'],function(_0x3d49d8){var _0x53d8ce={};_0x53d8ce[_0x3d49d8]={'$like':'%'+_0x32d40d[_0x2630('0x32')][_0x2630('0x43')]+'%'};return _0x53d8ce;})});}_0x57fcf7=_[_0x2630('0x42')]({},_0x57fcf7,_0x32d40d[_0x2630('0x45')]);var _0x489994={'where':_0x57fcf7[_0x2630('0x3e')]};return db[_0x2630('0x2f')][_0x2630('0x25')](_0x489994)['then'](function(_0x395e2e){_0x3975d1[_0x2630('0x25')]=_0x395e2e;if(_0x32d40d[_0x2630('0x32')][_0x2630('0x46')]){_0x57fcf7['include']=[{'all':!![]}];}return db[_0x2630('0x2f')][_0x2630('0x47')](_0x57fcf7);})['then'](function(_0x55fd9e){_0x3975d1[_0x2630('0x48')]=_0x55fd9e;return _0x3975d1;})[_0x2630('0x16')](respondWithFilteredResult(_0x33d7f1,_0x57fcf7))['catch'](handleError(_0x33d7f1,null));};exports[_0x2630('0x49')]=function(_0x119e79,_0x97d730){var _0x582beb={'raw':!![],'where':{'id':_0x119e79[_0x2630('0x4a')]['id']}},_0x13dc40={};_0x13dc40['model']=_['keys'](db['FaxMessage'][_0x2630('0x4b')]);_0x13dc40[_0x2630('0x32')]=_['keys'](_0x119e79[_0x2630('0x32')]);_0x13dc40[_0x2630('0x35')]=_['intersection'](_0x13dc40[_0x2630('0x30')],_0x13dc40[_0x2630('0x32')]);_0x582beb[_0x2630('0x36')]=_[_0x2630('0x37')](_0x13dc40[_0x2630('0x30')],qs[_0x2630('0x38')](_0x119e79[_0x2630('0x32')][_0x2630('0x38')]));_0x582beb[_0x2630('0x36')]=_0x582beb[_0x2630('0x36')][_0x2630('0x39')]?_0x582beb['attributes']:_0x13dc40['model'];if(_0x119e79[_0x2630('0x32')][_0x2630('0x46')]){_0x582beb['include']=[{'all':!![]}];}_0x582beb=_[_0x2630('0x42')]({},_0x582beb,_0x119e79[_0x2630('0x45')]);return db[_0x2630('0x2f')][_0x2630('0x4c')](_0x582beb)[_0x2630('0x16')](handleEntityNotFound(_0x97d730,null))[_0x2630('0x16')](respondWithResult(_0x97d730,null))['catch'](handleError(_0x97d730,null));};exports[_0x2630('0x4d')]=function(_0x486b3b,_0x5cb234){if(_0x486b3b[_0x2630('0x4e')]['id']){delete _0x486b3b['body']['id'];}return db[_0x2630('0x2f')][_0x2630('0x4c')]({'where':{'id':_0x486b3b['params']['id']}})[_0x2630('0x16')](handleEntityNotFound(_0x5cb234,null))[_0x2630('0x16')](saveUpdates(_0x486b3b[_0x2630('0x4e')],null))[_0x2630('0x16')](respondWithResult(_0x5cb234,null))[_0x2630('0x4f')](handleError(_0x5cb234,null));};exports[_0x2630('0x2c')]=function(_0x3f3e7b,_0x410c34){return db[_0x2630('0x2f')][_0x2630('0x4c')]({'where':{'id':_0x3f3e7b[_0x2630('0x4a')]['id']}})['then'](handleEntityNotFound(_0x410c34,null))[_0x2630('0x16')](removeEntity(_0x410c34,null))[_0x2630('0x4f')](handleError(_0x410c34,null));};exports[_0x2630('0x50')]=function(_0x2cf284,_0x39271d){return db[_0x2630('0x2f')][_0x2630('0x50')]()['then'](respondWithResult(_0x39271d,null))[_0x2630('0x4f')](handleError(_0x39271d,null));};var interaction_log=require(_0x2630('0x51'))(_0x2630('0x52'));exports['accept']=function(_0x2b527a,_0x11f8f4,_0x244a91){var _0x44b364={'channel':_0x2630('0x53')};if(_0x2b527a[_0x2630('0x4e')]['id']){delete _0x2b527a[_0x2630('0x4e')]['id'];}_0x2b527a['body'][_0x2630('0x54')]=!![];_0x2b527a[_0x2630('0x4e')][_0x2630('0x55')]=moment()[_0x2630('0x56')](_0x2630('0x57'));_0x2b527a['body'][_0x2630('0x58')]=_0x2b527a[_0x2630('0x4e')][_0x2630('0x58')]||_0x2b527a[_0x2630('0x59')]['id'];return db[_0x2630('0x2f')][_0x2630('0x4c')]({'where':{'id':_0x2b527a['params']['id'],'UserId':null},'include':[{'model':db[_0x2630('0x5a')],'as':_0x2630('0x5b')}]})['then'](handleEntityNotFound(_0x11f8f4,null))[_0x2630('0x16')](saveUpdates(_0x2b527a[_0x2630('0x4e')],null))[_0x2630('0x16')](function(_0x3f6dca){if(_0x3f6dca){_0x44b364[_0x2630('0x1f')]=_0x3f6dca[_0x2630('0x5c')]({'plain':!![]});return db[_0x2630('0x5d')][_0x2630('0x4c')]({'where':{'id':_0x3f6dca[_0x2630('0x5e')]}});}return null;})['then'](handleEntityNotFound(_0x11f8f4,null))[_0x2630('0x16')](function(_0x2ae04f){if(_0x2ae04f){return _0x2ae04f[_0x2630('0x4d')]({'UserId':_0x2b527a[_0x2630('0x4e')]['UserId'],'read1stAt':_[_0x2630('0x5f')](_0x2ae04f[_0x2630('0x60')])?moment()[_0x2630('0x56')]('YYYY-MM-DD\x20HH:mm:ss'):undefined});}return null;})[_0x2630('0x16')](function(_0x19a488){if(_0x19a488){_0x44b364[_0x2630('0x61')]=_0x19a488[_0x2630('0x5c')]({'plain':!![]});interaction_log['info'](_0x2630('0x62'),_0x2b527a[_0x2630('0x59')]['id'],_0x2b527a[_0x2630('0x59')][_0x2630('0x2d')],_0x2b527a['user'][_0x2630('0x63')],_0x44b364[_0x2630('0x61')]['id'],_0x2b527a[_0x2630('0x4e')]?JSON[_0x2630('0x1b')](_0x2b527a['body']):_0x2630('0x64'));return respondWithRpcPromise(_0x2630('0x65'),_0x2630('0x66'),_0x44b364);}return null;})[_0x2630('0x16')](function(_0xde2611){if(_0xde2611){if(_0x2b527a[_0x2630('0x4e')][_0x2630('0x67')]){_0x44b364['message'][_0x2630('0x68')]=util[_0x2630('0x56')](_0x2630('0x69'),_0x2b527a[_0x2630('0x59')]['name']);_0x44b364[_0x2630('0x1f')][_0x2630('0x6a')]=_0x44b364[_0x2630('0x6a')];_0x44b364['message'][_0x2630('0x6b')]=_0x2630('0x6c');return respondWithRpcPromise('EventManager','EventManager',{'event':_0x2630('0x6d'),'message':_0x44b364[_0x2630('0x1f')]},client9002)[_0x2630('0x16')](function(){return _0x44b364;});}return _0x44b364;}return null;})['then'](respondWithResult(_0x11f8f4,null))[_0x2630('0x4f')](handleError(_0x11f8f4,null));};var interaction_log=require(_0x2630('0x51'))(_0x2630('0x52'));exports[_0x2630('0x2a')]=function(_0x535c23,_0x1830d1,_0x252e72){var _0x6df29f={'agent':{},'channel':_0x2630('0x53')};if(_0x535c23[_0x2630('0x4e')]['id']){delete _0x535c23[_0x2630('0x4e')]['id'];}_0x535c23[_0x2630('0x4e')][_0x2630('0x58')]=_0x535c23[_0x2630('0x4e')][_0x2630('0x58')]||_0x535c23[_0x2630('0x59')]['id'];_0x6df29f[_0x2630('0x6e')]['id']=_0x535c23[_0x2630('0x4e')][_0x2630('0x58')];return db[_0x2630('0x2f')][_0x2630('0x4c')]({'where':{'id':_0x535c23['params']['id'],'UserId':null}})[_0x2630('0x16')](handleEntityNotFound(_0x1830d1,null))[_0x2630('0x16')](function(_0x53dd5b){if(_0x53dd5b){_0x6df29f[_0x2630('0x1f')]=_0x53dd5b[_0x2630('0x5c')]({'plain':!![]});return db[_0x2630('0x5d')][_0x2630('0x4c')]({'where':{'id':_0x53dd5b['FaxInteractionId']}});}return null;})['then'](handleEntityNotFound(_0x1830d1,null))[_0x2630('0x16')](function(_0x26fb0f){if(_0x26fb0f){_0x6df29f['interaction']=_0x26fb0f['get']({'plain':!![]});interaction_log[_0x2630('0x17')]('[FAXMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x535c23['user']['id'],_0x535c23[_0x2630('0x59')][_0x2630('0x2d')],_0x535c23[_0x2630('0x59')][_0x2630('0x63')],_0x6df29f[_0x2630('0x61')]['id'],_0x535c23[_0x2630('0x4e')]?JSON['stringify'](_0x535c23[_0x2630('0x4e')]):_0x2630('0x64'));return respondWithRpcPromise('RejectMessage',_0x2630('0x6f'),_0x6df29f);}return null;})[_0x2630('0x16')](function(_0x54f74b){if(_0x54f74b){_0x54f74b[_0x2630('0x1f')][_0x2630('0x68')]=util['format']('SIP/%s',_0x535c23[_0x2630('0x59')][_0x2630('0x2d')]);_0x54f74b['message'][_0x2630('0x6a')]=_0x6df29f[_0x2630('0x6a')];_0x54f74b['message'][_0x2630('0x6b')]=_0x2630('0x2a');respondWithRpcPromise(_0x2630('0x70'),_0x2630('0x70'),{'event':_0x2630('0x71'),'message':_0x54f74b[_0x2630('0x1f')]},client9002);return _0x6df29f;}return null;})[_0x2630('0x16')](respondWithResult(_0x1830d1,null))[_0x2630('0x4f')](handleError(_0x1830d1,null));};exports['create']=function(_0x986c10,_0x5a048){var _0x10676a;return db[_0x2630('0x2f')][_0x2630('0x72')](_0x986c10['body'],{})[_0x2630('0x16')](function(_0x201580){_0x10676a=_0x201580;return db[_0x2630('0x5a')][_0x2630('0x73')]({'where':{'id':_0x10676a[_0x2630('0x74')]}});})[_0x2630('0x16')](function(_0x4c8026){if(_[_0x2630('0x5f')](_0x4c8026)){return;}else{_0x10676a[_0x2630('0x53')]=_0x4c8026[_0x2630('0x53')];return db[_0x2630('0x75')][_0x2630('0x73')]({'where':{'id':_0x10676a[_0x2630('0x76')]}});}})[_0x2630('0x16')](function(_0xc89876){return respondWithRpcPromise(_0x2630('0x77'),_0x2630('0x77'),{'FaxAccountId':_[_0x2630('0x5f')](_0x986c10['body'])?undefined:_0x986c10[_0x2630('0x4e')][_0x2630('0x78')],'path':_[_0x2630('0x5f')](_0xc89876)?undefined:util['format'](_0x2630('0x79'),_0xc89876['basename']),'fax':_['isNil'](_0x10676a['fax'])?undefined:_0x10676a[_0x2630('0x53')],'AttachmentId':_0x10676a[_0x2630('0x76')]},client9002);})['then'](respondWithResult(_0x5a048,0xc9))['catch'](handleError(_0x5a048,null));};
\ No newline at end of file
index 590455c..dd4ccbf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7ef1=['save','emit','hasOwnProperty','hook','exports','events','../../mysqldb','setMaxListeners'];(function(_0x18dd23,_0x1ca58d){var _0x22eb36=function(_0x48be88){while(--_0x48be88){_0x18dd23['push'](_0x18dd23['shift']());}};_0x22eb36(++_0x1ca58d);}(_0x7ef1,0x12d));var _0x17ef=function(_0x90988,_0xfb892){_0x90988=_0x90988-0x0;var _0x16012f=_0x7ef1[_0x90988];return _0x16012f;};'use strict';var EventEmitter=require(_0x17ef('0x0'));var FaxMessage=require(_0x17ef('0x1'))['db']['FaxMessage'];var FaxMessageEvents=new EventEmitter();FaxMessageEvents[_0x17ef('0x2')](0x0);var events={'afterCreate':_0x17ef('0x3'),'afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x1b5068){return function(_0x2ff49b,_0x3263ad,_0x3a225c){FaxMessageEvents[_0x17ef('0x4')](_0x1b5068+':'+_0x2ff49b['id'],_0x2ff49b);FaxMessageEvents[_0x17ef('0x4')](_0x1b5068,_0x2ff49b);_0x3a225c(null);};}for(var e in events){if(events[_0x17ef('0x5')](e)){var event=events[e];FaxMessage[_0x17ef('0x6')](e,emitEvent(event));}}module[_0x17ef('0x7')]=FaxMessageEvents;
\ No newline at end of file
+var _0x9b4b=['hasOwnProperty','hook','../../mysqldb','FaxMessage','setMaxListeners','update','remove','emit'];(function(_0x1988b8,_0x12d46b){var _0x3fa5ad=function(_0x4996a4){while(--_0x4996a4){_0x1988b8['push'](_0x1988b8['shift']());}};_0x3fa5ad(++_0x12d46b);}(_0x9b4b,0x172));var _0xb9b4=function(_0x50f17d,_0x260de1){_0x50f17d=_0x50f17d-0x0;var _0x207fb8=_0x9b4b[_0x50f17d];return _0x207fb8;};'use strict';var EventEmitter=require('events');var FaxMessage=require(_0xb9b4('0x0'))['db'][_0xb9b4('0x1')];var FaxMessageEvents=new EventEmitter();FaxMessageEvents[_0xb9b4('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0xb9b4('0x3'),'afterDestroy':_0xb9b4('0x4')};function emitEvent(_0x514d06){return function(_0x5f071a,_0x5736c7,_0x141742){FaxMessageEvents[_0xb9b4('0x5')](_0x514d06+':'+_0x5f071a['id'],_0x5f071a);FaxMessageEvents[_0xb9b4('0x5')](_0x514d06,_0x5f071a);_0x141742(null);};}for(var e in events){if(events[_0xb9b4('0x6')](e)){var event=events[e];FaxMessage[_0xb9b4('0x7')](e,emitEvent(event));}}module['exports']=FaxMessageEvents;
\ No newline at end of file
index a71bd28..8093ea8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x43f9=['../../config/logger','api','moment','bluebird','request-promise','./faxMessage.attributes','exports','define','fax_messages','get','direction','toLowerCase','secret','isNil','FaxInteraction','findOne','then','update','body','error','utf8mb4','lodash','util'];(function(_0x3619e1,_0x1acda1){var _0x462c62=function(_0x4dca01){while(--_0x4dca01){_0x3619e1['push'](_0x3619e1['shift']());}};_0x462c62(++_0x1acda1);}(_0x43f9,0x112));var _0x943f=function(_0xba4dac,_0xd0c73d){_0xba4dac=_0xba4dac-0x0;var _0x466264=_0x43f9[_0xba4dac];return _0x466264;};'use strict';var _=require(_0x943f('0x0'));var util=require(_0x943f('0x1'));var logger=require(_0x943f('0x2'))(_0x943f('0x3'));var moment=require(_0x943f('0x4'));var BPromise=require(_0x943f('0x5'));var rp=require(_0x943f('0x6'));var attributes=require(_0x943f('0x7'));module[_0x943f('0x8')]=function(_0x39a6f9,_0x2ed737){return _0x39a6f9[_0x943f('0x9')]('FaxMessage',attributes,{'tableName':_0x943f('0xa'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x2a1117,_0x44516a,_0x1ac4b2){var _0x57002f=_0x39a6f9['models'];var _0x5eca13=_0x2a1117[_0x943f('0xb')]({'plain':!![]});if(_0x5eca13[_0x943f('0xc')][_0x943f('0xd')]()==='in'||_0x5eca13[_0x943f('0xc')][_0x943f('0xd')]()==='out'&&!_0x5eca13[_0x943f('0xe')]&&!_[_0x943f('0xf')](_0x5eca13['UserId'])){_0x57002f[_0x943f('0x10')][_0x943f('0x11')]({'where':{'id':_0x5eca13['FaxInteractionId']}})[_0x943f('0x12')](function(_0xb2ccf3){if(_0xb2ccf3){_0xb2ccf3[_0x943f('0x13')]({'lastMsgAt':_0x5eca13['createdAt'],'lastMsgDirection':_0x5eca13[_0x943f('0xc')][_0x943f('0xd')](),'lastMsgBody':_0x5eca13[_0x943f('0x14')]});}})['catch'](function(_0x324304){console[_0x943f('0x15')](_0x324304);});}_0x1ac4b2();}},'charset':_0x943f('0x16'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0x37fc=['isNil','UserId','FaxInteraction','findOne','FaxInteractionId','update','body','catch','error','utf8mb4','utf8mb4_unicode_ci','util','../../config/logger','api','moment','bluebird','request-promise','./faxMessage.attributes','exports','define','FaxMessage','fax_messages','models','get','direction','toLowerCase','out'];(function(_0x40f5b7,_0xb3243e){var _0x3c884a=function(_0x4fc27b){while(--_0x4fc27b){_0x40f5b7['push'](_0x40f5b7['shift']());}};_0x3c884a(++_0xb3243e);}(_0x37fc,0x77));var _0xc37f=function(_0x5e7c61,_0x395c64){_0x5e7c61=_0x5e7c61-0x0;var _0x436ab4=_0x37fc[_0x5e7c61];return _0x436ab4;};'use strict';var _=require('lodash');var util=require(_0xc37f('0x0'));var logger=require(_0xc37f('0x1'))(_0xc37f('0x2'));var moment=require(_0xc37f('0x3'));var BPromise=require(_0xc37f('0x4'));var rp=require(_0xc37f('0x5'));var attributes=require(_0xc37f('0x6'));module[_0xc37f('0x7')]=function(_0x490491,_0x28c8e5){return _0x490491[_0xc37f('0x8')](_0xc37f('0x9'),attributes,{'tableName':_0xc37f('0xa'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x1742af,_0xcff38e,_0x2e9d38){var _0x4c46b8=_0x490491[_0xc37f('0xb')];var _0x55489c=_0x1742af[_0xc37f('0xc')]({'plain':!![]});if(_0x55489c[_0xc37f('0xd')]['toLowerCase']()==='in'||_0x55489c[_0xc37f('0xd')][_0xc37f('0xe')]()===_0xc37f('0xf')&&!_0x55489c['secret']&&!_[_0xc37f('0x10')](_0x55489c[_0xc37f('0x11')])){_0x4c46b8[_0xc37f('0x12')][_0xc37f('0x13')]({'where':{'id':_0x55489c[_0xc37f('0x14')]}})['then'](function(_0xc71a9c){if(_0xc71a9c){_0xc71a9c[_0xc37f('0x15')]({'lastMsgAt':_0x55489c['createdAt'],'lastMsgDirection':_0x55489c[_0xc37f('0xd')][_0xc37f('0xe')](),'lastMsgBody':_0x55489c[_0xc37f('0x16')]});}})[_0xc37f('0x17')](function(_0x229623){console[_0xc37f('0x18')](_0x229623);});}_0x2e9d38();}},'charset':_0xc37f('0x19'),'collate':_0xc37f('0x1a')});};
\ No newline at end of file
index ed72885..fdf94e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8070=['where','attributes','limit','then','lodash','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','http','localhost','register','request','info','FaxMessage,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','CreateFaxMessage','create','body','options','catch','UpdateFaxMessage','update','raw'];(function(_0x342baa,_0x4a110f){var _0x1208f3=function(_0x56a645){while(--_0x56a645){_0x342baa['push'](_0x342baa['shift']());}};_0x1208f3(++_0x4a110f);}(_0x8070,0x1f3));var _0x0807=function(_0x26056c,_0x357057){_0x26056c=_0x26056c-0x0;var _0x28b572=_0x8070[_0x26056c];return _0x28b572;};'use strict';var _=require(_0x0807('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x0807('0x1'));var rs=require(_0x0807('0x2'));var fs=require('fs');var db=require(_0x0807('0x3'))['db'];var utils=require(_0x0807('0x4'));var logger=require(_0x0807('0x5'))('rpc');var config=require('../../config/environment');var jayson=require(_0x0807('0x6'));var client=jayson[_0x0807('0x7')][_0x0807('0x8')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0x0807('0x9'),'port':0x18eb});require('./faxMessage.socket')[_0x0807('0xa')](socket);function respondWithRpcPromise(_0xba967c,_0x4276b8,_0x50da71){return new BPromise(function(_0x2c0e16,_0x1f9477){return client[_0x0807('0xb')](_0xba967c,_0x50da71)['then'](function(_0xe69a0d){logger[_0x0807('0xc')](_0x0807('0xd'),_0x4276b8,_0x0807('0xe'));logger[_0x0807('0xf')]('FaxMessage,\x20%s,\x20%s,\x20%s',_0x4276b8,'request\x20sent',JSON[_0x0807('0x10')](_0xe69a0d));if(_0xe69a0d[_0x0807('0x11')]){if(_0xe69a0d[_0x0807('0x11')][_0x0807('0x12')]===0x1f4){logger['error']('FaxMessage,\x20%s,\x20%s',_0x4276b8,_0xe69a0d[_0x0807('0x11')][_0x0807('0x13')]);return _0x1f9477(_0xe69a0d[_0x0807('0x11')][_0x0807('0x13')]);}logger['error']('FaxMessage,\x20%s,\x20%s',_0x4276b8,_0xe69a0d[_0x0807('0x11')][_0x0807('0x13')]);return _0x2c0e16(_0xe69a0d[_0x0807('0x11')]['message']);}else{logger[_0x0807('0xc')](_0x0807('0xd'),_0x4276b8,_0x0807('0xe'));_0x2c0e16(_0xe69a0d[_0x0807('0x14')][_0x0807('0x13')]);}})['catch'](function(_0x55c316){logger[_0x0807('0x11')](_0x0807('0xd'),_0x4276b8,_0x55c316);_0x1f9477(_0x55c316);});});}exports[_0x0807('0x15')]=function(_0x3abc9e){var _0x5f39ef=this;return new Promise(function(_0x575b1e,_0x442ca6){return db['FaxMessage'][_0x0807('0x16')](_0x3abc9e[_0x0807('0x17')],{'raw':_0x3abc9e[_0x0807('0x18')]?_0x3abc9e[_0x0807('0x18')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x3f77f6){logger['info']('CreateFaxMessage',_0x3abc9e);logger[_0x0807('0xf')](_0x0807('0x15'),_0x3abc9e,JSON[_0x0807('0x10')](_0x3f77f6));_0x575b1e(_0x3f77f6);})[_0x0807('0x19')](function(_0x3629c6){logger[_0x0807('0x11')](_0x0807('0x15'),_0x3629c6['message'],_0x3abc9e);_0x442ca6(_0x5f39ef[_0x0807('0x11')](0x1f4,_0x3629c6[_0x0807('0x13')]));});});};exports[_0x0807('0x1a')]=function(_0x7ba636){var _0x471400=this;return new Promise(function(_0x34cffd,_0x25c138){return db['FaxMessage'][_0x0807('0x1b')](_0x7ba636[_0x0807('0x17')],{'raw':_0x7ba636['options']?_0x7ba636[_0x0807('0x18')][_0x0807('0x1c')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x7ba636[_0x0807('0x18')]?_0x7ba636['options'][_0x0807('0x1d')]||null:null,'attributes':_0x7ba636[_0x0807('0x18')]?_0x7ba636[_0x0807('0x18')][_0x0807('0x1e')]||null:null,'limit':_0x7ba636[_0x0807('0x18')]?_0x7ba636[_0x0807('0x18')][_0x0807('0x1f')]||null:null})[_0x0807('0x20')](function(_0x48a8da){logger['info']('UpdateFaxMessage',_0x7ba636);logger[_0x0807('0xf')]('UpdateFaxMessage',_0x7ba636,JSON['stringify'](_0x48a8da));_0x34cffd(_0x48a8da);})[_0x0807('0x19')](function(_0x807b5e){logger[_0x0807('0x11')](_0x0807('0x1a'),_0x807b5e[_0x0807('0x13')],_0x7ba636);_0x25c138(_0x471400[_0x0807('0x11')](0x1f4,_0x807b5e[_0x0807('0x13')]));});});};
\ No newline at end of file
+var _0x9f41=['FaxMessage','update','where','attributes','limit','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','socket.io-emitter','./faxMessage.socket','register','request','then','info','FaxMessage,\x20%s,\x20%s','debug','FaxMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','CreateFaxMessage','create','body','options','raw','UpdateFaxMessage'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x9f41,0x7a));var _0x19f4=function(_0x2dfe37,_0x1724bf){_0x2dfe37=_0x2dfe37-0x0;var _0x1a27ed=_0x9f41[_0x2dfe37];return _0x1a27ed;};'use strict';var _=require(_0x19f4('0x0'));var util=require(_0x19f4('0x1'));var moment=require(_0x19f4('0x2'));var BPromise=require(_0x19f4('0x3'));var rs=require(_0x19f4('0x4'));var fs=require('fs');var db=require(_0x19f4('0x5'))['db'];var utils=require(_0x19f4('0x6'));var logger=require(_0x19f4('0x7'))(_0x19f4('0x8'));var config=require(_0x19f4('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x19f4('0xa')][_0x19f4('0xb')]({'port':0x232a});var socket=require(_0x19f4('0xc'))({'host':'localhost','port':0x18eb});require(_0x19f4('0xd'))[_0x19f4('0xe')](socket);function respondWithRpcPromise(_0x42311b,_0x49008f,_0x4fdf89){return new BPromise(function(_0x4b500f,_0x199766){return client[_0x19f4('0xf')](_0x42311b,_0x4fdf89)[_0x19f4('0x10')](function(_0x535d24){logger[_0x19f4('0x11')](_0x19f4('0x12'),_0x49008f,'request\x20sent');logger[_0x19f4('0x13')](_0x19f4('0x14'),_0x49008f,_0x19f4('0x15'),JSON[_0x19f4('0x16')](_0x535d24));if(_0x535d24[_0x19f4('0x17')]){if(_0x535d24[_0x19f4('0x17')][_0x19f4('0x18')]===0x1f4){logger[_0x19f4('0x17')]('FaxMessage,\x20%s,\x20%s',_0x49008f,_0x535d24[_0x19f4('0x17')][_0x19f4('0x19')]);return _0x199766(_0x535d24[_0x19f4('0x17')]['message']);}logger[_0x19f4('0x17')](_0x19f4('0x12'),_0x49008f,_0x535d24[_0x19f4('0x17')][_0x19f4('0x19')]);return _0x4b500f(_0x535d24[_0x19f4('0x17')][_0x19f4('0x19')]);}else{logger[_0x19f4('0x11')]('FaxMessage,\x20%s,\x20%s',_0x49008f,_0x19f4('0x15'));_0x4b500f(_0x535d24[_0x19f4('0x1a')][_0x19f4('0x19')]);}})[_0x19f4('0x1b')](function(_0x21f2af){logger[_0x19f4('0x17')]('FaxMessage,\x20%s,\x20%s',_0x49008f,_0x21f2af);_0x199766(_0x21f2af);});});}exports[_0x19f4('0x1c')]=function(_0x22730d){var _0x3e2aec=this;return new Promise(function(_0x2530ce,_0x366a0f){return db['FaxMessage'][_0x19f4('0x1d')](_0x22730d[_0x19f4('0x1e')],{'raw':_0x22730d[_0x19f4('0x1f')]?_0x22730d['options'][_0x19f4('0x20')]===undefined?!![]:![]:!![]})[_0x19f4('0x10')](function(_0x5b7fd7){logger['info']('CreateFaxMessage',_0x22730d);logger[_0x19f4('0x13')]('CreateFaxMessage',_0x22730d,JSON[_0x19f4('0x16')](_0x5b7fd7));_0x2530ce(_0x5b7fd7);})[_0x19f4('0x1b')](function(_0x4b0977){logger[_0x19f4('0x17')](_0x19f4('0x1c'),_0x4b0977[_0x19f4('0x19')],_0x22730d);_0x366a0f(_0x3e2aec[_0x19f4('0x17')](0x1f4,_0x4b0977[_0x19f4('0x19')]));});});};exports[_0x19f4('0x21')]=function(_0x103de2){var _0xd13aba=this;return new Promise(function(_0x299e1c,_0x584fc7){return db[_0x19f4('0x22')][_0x19f4('0x23')](_0x103de2['body'],{'raw':_0x103de2['options']?_0x103de2[_0x19f4('0x1f')][_0x19f4('0x20')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x103de2[_0x19f4('0x1f')]?_0x103de2[_0x19f4('0x1f')][_0x19f4('0x24')]||null:null,'attributes':_0x103de2[_0x19f4('0x1f')]?_0x103de2[_0x19f4('0x1f')][_0x19f4('0x25')]||null:null,'limit':_0x103de2[_0x19f4('0x1f')]?_0x103de2[_0x19f4('0x1f')][_0x19f4('0x26')]||null:null})[_0x19f4('0x10')](function(_0x541dd6){logger[_0x19f4('0x11')](_0x19f4('0x21'),_0x103de2);logger[_0x19f4('0x13')](_0x19f4('0x21'),_0x103de2,JSON['stringify'](_0x541dd6));_0x299e1c(_0x541dd6);})['catch'](function(_0xbd9655){logger[_0x19f4('0x17')](_0x19f4('0x21'),_0xbd9655[_0x19f4('0x19')],_0x103de2);_0x584fc7(_0xd13aba[_0x19f4('0x17')](0x1f4,_0xbd9655[_0x19f4('0x19')]));});});};
\ No newline at end of file
index ccf29df..a4a4c2c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ba8=['faxMessage:','./faxMessage.events','update','removeListener'];(function(_0x5969fd,_0xee58ac){var _0x12fbe5=function(_0x50ac21){while(--_0x50ac21){_0x5969fd['push'](_0x5969fd['shift']());}};_0x12fbe5(++_0xee58ac);}(_0x1ba8,0x10d));var _0x81ba=function(_0x10269b,_0x1ae258){_0x10269b=_0x10269b-0x0;var _0x57ec7c=_0x1ba8[_0x10269b];return _0x57ec7c;};'use strict';var FaxMessageEvents=require(_0x81ba('0x0'));var events=['save','remove',_0x81ba('0x1')];function createListener(_0x5e070c,_0x38144d){return function(_0x57305e){_0x38144d['emit'](_0x5e070c,_0x57305e);};}function removeListener(_0x5414be,_0xb1fff9){return function(){FaxMessageEvents[_0x81ba('0x2')](_0x5414be,_0xb1fff9);};}exports['register']=function(_0x1faebd){for(var _0x3581e4=0x0,_0x5bf14b=events['length'];_0x3581e4<_0x5bf14b;_0x3581e4++){var _0xc45bdb=events[_0x3581e4];var _0x43a1a6=createListener(_0x81ba('0x3')+_0xc45bdb,_0x1faebd);FaxMessageEvents['on'](_0xc45bdb,_0x43a1a6);}};
\ No newline at end of file
+var _0xecd0=['length','faxMessage:','./faxMessage.events','save','remove','update','emit','register'];(function(_0x300202,_0x152b96){var _0x498b6e=function(_0xd7c803){while(--_0xd7c803){_0x300202['push'](_0x300202['shift']());}};_0x498b6e(++_0x152b96);}(_0xecd0,0x162));var _0x0ecd=function(_0x1d1963,_0x32cc0e){_0x1d1963=_0x1d1963-0x0;var _0x3f58bb=_0xecd0[_0x1d1963];return _0x3f58bb;};'use strict';var FaxMessageEvents=require(_0x0ecd('0x0'));var events=[_0x0ecd('0x1'),_0x0ecd('0x2'),_0x0ecd('0x3')];function createListener(_0x41cf87,_0x54409c){return function(_0x4068f0){_0x54409c[_0x0ecd('0x4')](_0x41cf87,_0x4068f0);};}function removeListener(_0x18c51d,_0x8df9d1){return function(){FaxMessageEvents['removeListener'](_0x18c51d,_0x8df9d1);};}exports[_0x0ecd('0x5')]=function(_0x1cde06){for(var _0xff2f1c=0x0,_0x1f6e6d=events[_0x0ecd('0x6')];_0xff2f1c<_0x1f6e6d;_0xff2f1c++){var _0x30edfa=events[_0xff2f1c];var _0xa72dbe=createListener(_0x0ecd('0x7')+_0x30edfa,_0x1cde06);FaxMessageEvents['on'](_0x30edfa,_0xa72dbe);}};
\ No newline at end of file
index 98e54a3..6dbf853 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f97=['post','tracked','fax','faxmessage:create','create','/:id','update','put','/:id/accept','accept','/:id/reject','reject','delete','destroy','util','path','express','Router','../../components/interaction/service','../../config/environment','./faxMessage.controller','get','isAuthenticated','index','/describe','describe'];(function(_0x4ede47,_0x51480c){var _0x865132=function(_0x21da73){while(--_0x21da73){_0x4ede47['push'](_0x4ede47['shift']());}};_0x865132(++_0x51480c);}(_0x0f97,0x12c));var _0x70f9=function(_0x597e38,_0x551ac2){_0x597e38=_0x597e38-0x0;var _0x5305d2=_0x0f97[_0x597e38];return _0x5305d2;};'use strict';var multer=require('multer');var util=require(_0x70f9('0x0'));var path=require(_0x70f9('0x1'));var express=require(_0x70f9('0x2'));var router=express[_0x70f9('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x70f9('0x4'));var config=require(_0x70f9('0x5'));var controller=require(_0x70f9('0x6'));router[_0x70f9('0x7')]('/',auth[_0x70f9('0x8')](),controller[_0x70f9('0x9')]);router['get'](_0x70f9('0xa'),auth[_0x70f9('0x8')](),controller[_0x70f9('0xb')]);router[_0x70f9('0x7')]('/:id',auth[_0x70f9('0x8')](),controller['show']);router[_0x70f9('0xc')]('/',auth[_0x70f9('0x8')](),interaction[_0x70f9('0xd')](_0x70f9('0xe'),_0x70f9('0xf')),controller[_0x70f9('0x10')]);router['put'](_0x70f9('0x11'),auth[_0x70f9('0x8')](),controller[_0x70f9('0x12')]);router[_0x70f9('0x13')](_0x70f9('0x14'),auth['isAuthenticated'](),controller[_0x70f9('0x15')]);router[_0x70f9('0x13')](_0x70f9('0x16'),auth[_0x70f9('0x8')](),controller[_0x70f9('0x17')]);router[_0x70f9('0x18')](_0x70f9('0x11'),auth[_0x70f9('0x8')](),controller[_0x70f9('0x19')]);module['exports']=router;
\ No newline at end of file
+var _0x8417=['../../config/environment','get','isAuthenticated','index','/describe','/:id','show','post','faxmessage:create','create','put','update','/:id/accept','/:id/reject','delete','destroy','multer','path','express','Router','../../components/auth/service'];(function(_0x5bede6,_0x46282e){var _0x266103=function(_0xeff0c9){while(--_0xeff0c9){_0x5bede6['push'](_0x5bede6['shift']());}};_0x266103(++_0x46282e);}(_0x8417,0xf7));var _0x7841=function(_0x4b29a9,_0x3938f2){_0x4b29a9=_0x4b29a9-0x0;var _0x30b9f0=_0x8417[_0x4b29a9];return _0x30b9f0;};'use strict';var multer=require(_0x7841('0x0'));var util=require('util');var path=require(_0x7841('0x1'));var express=require(_0x7841('0x2'));var router=express[_0x7841('0x3')]();var auth=require(_0x7841('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x7841('0x5'));var controller=require('./faxMessage.controller');router[_0x7841('0x6')]('/',auth[_0x7841('0x7')](),controller[_0x7841('0x8')]);router['get'](_0x7841('0x9'),auth[_0x7841('0x7')](),controller['describe']);router['get'](_0x7841('0xa'),auth[_0x7841('0x7')](),controller[_0x7841('0xb')]);router[_0x7841('0xc')]('/',auth[_0x7841('0x7')](),interaction['tracked']('fax',_0x7841('0xd')),controller[_0x7841('0xe')]);router[_0x7841('0xf')](_0x7841('0xa'),auth[_0x7841('0x7')](),controller[_0x7841('0x10')]);router[_0x7841('0xf')](_0x7841('0x11'),auth['isAuthenticated'](),controller['accept']);router['put'](_0x7841('0x12'),auth['isAuthenticated'](),controller['reject']);router[_0x7841('0x13')](_0x7841('0xa'),auth['isAuthenticated'](),controller[_0x7841('0x14')]);module['exports']=router;
\ No newline at end of file
index b0f1da9..abe2022 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb4a=['ENUM','rrmemory','sequelize','exports','STRING','name','INTEGER'];(function(_0x11a500,_0xaa37fd){var _0x2196a8=function(_0x3f31c0){while(--_0x3f31c0){_0x11a500['push'](_0x11a500['shift']());}};_0x2196a8(++_0xaa37fd);}(_0xdb4a,0x1c9));var _0xadb4=function(_0x45d3f0,_0x4be53f){_0x45d3f0=_0x45d3f0-0x0;var _0x314b79=_0xdb4a[_0x45d3f0];return _0x314b79;};'use strict';var Sequelize=require(_0xadb4('0x0'));module[_0xadb4('0x1')]={'name':{'type':Sequelize[_0xadb4('0x2')],'unique':_0xadb4('0x3'),'allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xadb4('0x2')]},'timeout':{'type':Sequelize[_0xadb4('0x4')],'allowNull':![],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xadb4('0x5')](_0xadb4('0x6'),'beepall','roundrobin'),'allowNull':![]},'lastAgent':{'type':Sequelize[_0xadb4('0x4')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x0be3=['ENUM','rrmemory','beepall','roundrobin','sequelize','exports','STRING','INTEGER'];(function(_0x3c22e0,_0x1dc6ea){var _0x215811=function(_0x1b453c){while(--_0x1b453c){_0x3c22e0['push'](_0x3c22e0['shift']());}};_0x215811(++_0x1dc6ea);}(_0x0be3,0x1ac));var _0x30be=function(_0x3654c5,_0x2f4ecd){_0x3654c5=_0x3654c5-0x0;var _0xf5f082=_0x0be3[_0x3654c5];return _0xf5f082;};'use strict';var Sequelize=require(_0x30be('0x0'));module[_0x30be('0x1')]={'name':{'type':Sequelize[_0x30be('0x2')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x30be('0x2')]},'timeout':{'type':Sequelize[_0x30be('0x3')],'allowNull':![],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x30be('0x4')](_0x30be('0x5'),_0x30be('0x6'),_0x30be('0x7')),'allowNull':![]},'lastAgent':{'type':Sequelize[_0x30be('0x3')],'defaultValue':0x0}};
\ No newline at end of file
index 0d78571..de6dd8f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfa33=['ids','Agents','find','addAgents','penalty','removeAgents','removeTeams','omit','spread','emit','userFaxQueue:save','isArray','userFaxQueue:remove','getAgents','order','fast-json-patch','request-promise','moment','bluebird','mustache','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./faxQueue.socket','register','sendStatus','end','json','count','offset','limit','set','Content-Range','reject','then','status','error','name','send','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','nolimit','sort','where','pick','add','merge','filter','map','options','FaxQueue','includeAll','include','findAll','rows','show','params','catch','create','body','update','destroy','describe','getMembers','findOne','get','UserFaxQueue','hasOwnProperty','FaxQueueId','User','UserId','agent','faxPause','updatedAt','format','%s/%s','getTeams','Team','addTeams'];(function(_0xb090f8,_0x369bf6){var _0x1daf6c=function(_0x4b81eb){while(--_0x4b81eb){_0xb090f8['push'](_0xb090f8['shift']());}};_0x1daf6c(++_0x369bf6);}(_0xfa33,0x73));var _0x3fa3=function(_0x145e9e,_0x2e6dd4){_0x145e9e=_0x145e9e-0x0;var _0x2264c2=_0xfa33[_0x145e9e];return _0x2264c2;};'use strict';var jsonpatch=require(_0x3fa3('0x0'));var rp=require(_0x3fa3('0x1'));var moment=require(_0x3fa3('0x2'));var BPromise=require(_0x3fa3('0x3'));var Mustache=require(_0x3fa3('0x4'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x3fa3('0x5'));var ejs=require(_0x3fa3('0x6'));var fs=require('fs');var _=require(_0x3fa3('0x7'));var squel=require('squel');var crypto=require(_0x3fa3('0x8'));var jsforce=require(_0x3fa3('0x9'));var deskjs=require(_0x3fa3('0xa'));var toCsv=require('to-csv');var querystring=require(_0x3fa3('0xb'));var Papa=require(_0x3fa3('0xc'));var qs=require(_0x3fa3('0xd'));var logger=require(_0x3fa3('0xe'))(_0x3fa3('0xf'));var utils=require('../../config/utils');var config=require(_0x3fa3('0x10'));var db=require(_0x3fa3('0x11'))['db'];var socket=require(_0x3fa3('0x12'))({'host':_0x3fa3('0x13'),'port':0x18eb});require(_0x3fa3('0x14'))[_0x3fa3('0x15')](socket);function respondWithStatusCode(_0x467759,_0x115fb6){_0x115fb6=_0x115fb6||0xcc;return function(_0x25e6b8){if(_0x25e6b8){return _0x467759[_0x3fa3('0x16')](_0x115fb6);}return _0x467759['status'](_0x115fb6)[_0x3fa3('0x17')]();};}function respondWithResult(_0x3f4b15,_0x285924){_0x285924=_0x285924||0xc8;return function(_0xa1dff1){if(_0xa1dff1){return _0x3f4b15['status'](_0x285924)[_0x3fa3('0x18')](_0xa1dff1);}};}function respondWithFilteredResult(_0x47828d,_0x19e11b){return function(_0x2f4168){if(_0x2f4168){var _0x3f7406=_0x2f4168[_0x3fa3('0x19')],_0x279aad=_0x19e11b[_0x3fa3('0x1a')],_0x1fdf97=_0x19e11b[_0x3fa3('0x1a')]+_0x19e11b[_0x3fa3('0x1b')],_0x92a356;if(_0x1fdf97>=_0x3f7406){_0x1fdf97=_0x3f7406;_0x92a356=0xc8;}else{_0x92a356=0xce;}_0x47828d['status'](_0x92a356);return _0x47828d[_0x3fa3('0x1c')](_0x3fa3('0x1d'),_0x279aad+'-'+_0x1fdf97+'/'+_0x3f7406)[_0x3fa3('0x18')](_0x2f4168);}return null;};}function patchUpdates(_0x59cb77){return function(_0x401bfe){try{jsonpatch['apply'](_0x401bfe,_0x59cb77,!![]);}catch(_0x5def39){return BPromise[_0x3fa3('0x1e')](_0x5def39);}return _0x401bfe['save']();};}function saveUpdates(_0xd8193b,_0x3a7942){return function(_0x1f434d){if(_0x1f434d){return _0x1f434d['update'](_0xd8193b)[_0x3fa3('0x1f')](function(_0x5c8418){return _0x5c8418;});}return null;};}function removeEntity(_0x22b4b0,_0x5d348a){return function(_0x157eaa){if(_0x157eaa){return _0x157eaa['destroy']()['then'](function(){_0x22b4b0[_0x3fa3('0x20')](0xcc)[_0x3fa3('0x17')]();});}};}function handleEntityNotFound(_0x4e111f,_0x11412f){return function(_0x5da66a){if(!_0x5da66a){_0x4e111f[_0x3fa3('0x16')](0x194);}return _0x5da66a;};}function handleError(_0x5b6b10,_0xcf63e0){_0xcf63e0=_0xcf63e0||0x1f4;return function(_0x3b87c7){logger[_0x3fa3('0x21')](_0x3b87c7['stack']);if(_0x3b87c7['name']){delete _0x3b87c7[_0x3fa3('0x22')];}_0x5b6b10[_0x3fa3('0x20')](_0xcf63e0)[_0x3fa3('0x23')](_0x3b87c7);};}exports['index']=function(_0x3c695d,_0xd25bb2){var _0x4e6566={},_0x14299b={},_0x5f4a97={'count':0x0,'rows':[]};var _0x10b5db=db['FaxQueue'][_0x3fa3('0x24')];_0x14299b[_0x3fa3('0x25')]=_[_0x3fa3('0x26')](_0x10b5db);var _0x56f7ef={'dateStart':_0x3c695d[_0x3fa3('0x27')][_0x3fa3('0x28')],'dateEnd':_0x3c695d[_0x3fa3('0x27')][_0x3fa3('0x29')]};delete _0x3c695d[_0x3fa3('0x27')]['dateStart'];delete _0x3c695d[_0x3fa3('0x27')][_0x3fa3('0x29')];_0x14299b[_0x3fa3('0x27')]=_[_0x3fa3('0x26')](_0x3c695d[_0x3fa3('0x27')]);_0x14299b[_0x3fa3('0x2a')]=_[_0x3fa3('0x2b')](_0x14299b[_0x3fa3('0x25')],_0x14299b[_0x3fa3('0x27')]);_0x4e6566[_0x3fa3('0x2c')]=_[_0x3fa3('0x2b')](_0x14299b[_0x3fa3('0x25')],qs[_0x3fa3('0x2d')](_0x3c695d['query'][_0x3fa3('0x2d')]));_0x4e6566[_0x3fa3('0x2c')]=_0x4e6566[_0x3fa3('0x2c')][_0x3fa3('0x2e')]?_0x4e6566[_0x3fa3('0x2c')]:_0x14299b['model'];if(!_0x3c695d[_0x3fa3('0x27')]['hasOwnProperty'](_0x3fa3('0x2f'))){_0x4e6566[_0x3fa3('0x1b')]=qs[_0x3fa3('0x1b')](_0x3c695d[_0x3fa3('0x27')][_0x3fa3('0x1b')]);_0x4e6566['offset']=qs[_0x3fa3('0x1a')](_0x3c695d[_0x3fa3('0x27')][_0x3fa3('0x1a')]);}_0x4e6566['order']=qs[_0x3fa3('0x30')](_0x3c695d[_0x3fa3('0x27')][_0x3fa3('0x30')]);_0x4e6566[_0x3fa3('0x31')]=qs['filters'](_[_0x3fa3('0x32')](_0x3c695d[_0x3fa3('0x27')],_0x14299b[_0x3fa3('0x2a')]));if(_0x56f7ef[_0x3fa3('0x28')]){if(_0x56f7ef[_0x3fa3('0x29')]){_0x56f7ef['dateEnd']=moment(_0x56f7ef[_0x3fa3('0x29')])[_0x3fa3('0x33')](0x1,'day');}else{_0x56f7ef['dateEnd']=moment(_0x56f7ef[_0x3fa3('0x28')])['add'](0x1,'day');}_[_0x3fa3('0x34')](_0x4e6566['where'],{'createdAt':{'$gte':_0x56f7ef[_0x3fa3('0x28')],'$lte':_0x56f7ef[_0x3fa3('0x29')]}});}if(_0x3c695d['query'][_0x3fa3('0x35')]){_0x4e6566['where']=_['merge'](_0x4e6566[_0x3fa3('0x31')],{'$or':_[_0x3fa3('0x36')](_0x4e6566[_0x3fa3('0x2c')],function(_0x2193bc){var _0x4cbda7={};_0x4cbda7[_0x2193bc]={'$like':'%'+_0x3c695d['query'][_0x3fa3('0x35')]+'%'};return _0x4cbda7;})});}_0x4e6566=_[_0x3fa3('0x34')]({},_0x4e6566,_0x3c695d[_0x3fa3('0x37')]);var _0x457fcd={'where':_0x4e6566[_0x3fa3('0x31')]};return db[_0x3fa3('0x38')][_0x3fa3('0x19')](_0x457fcd)[_0x3fa3('0x1f')](function(_0x2ffc88){_0x5f4a97[_0x3fa3('0x19')]=_0x2ffc88;if(_0x3c695d[_0x3fa3('0x27')][_0x3fa3('0x39')]){_0x4e6566[_0x3fa3('0x3a')]=[{'all':!![]}];}return db[_0x3fa3('0x38')][_0x3fa3('0x3b')](_0x4e6566);})['then'](function(_0x470e74){_0x5f4a97[_0x3fa3('0x3c')]=_0x470e74;return _0x5f4a97;})[_0x3fa3('0x1f')](respondWithFilteredResult(_0xd25bb2,_0x4e6566))['catch'](handleError(_0xd25bb2,null));};exports[_0x3fa3('0x3d')]=function(_0x425f9a,_0x5f7da0){var _0x237acd={'raw':!![],'where':{'id':_0x425f9a[_0x3fa3('0x3e')]['id']}},_0x180edd={};_0x180edd[_0x3fa3('0x25')]=_['keys'](db[_0x3fa3('0x38')][_0x3fa3('0x24')]);_0x180edd[_0x3fa3('0x27')]=_[_0x3fa3('0x26')](_0x425f9a[_0x3fa3('0x27')]);_0x180edd[_0x3fa3('0x2a')]=_[_0x3fa3('0x2b')](_0x180edd['model'],_0x180edd[_0x3fa3('0x27')]);_0x237acd[_0x3fa3('0x2c')]=_[_0x3fa3('0x2b')](_0x180edd[_0x3fa3('0x25')],qs['fields'](_0x425f9a[_0x3fa3('0x27')]['fields']));_0x237acd[_0x3fa3('0x2c')]=_0x237acd[_0x3fa3('0x2c')][_0x3fa3('0x2e')]?_0x237acd[_0x3fa3('0x2c')]:_0x180edd[_0x3fa3('0x25')];if(_0x425f9a[_0x3fa3('0x27')][_0x3fa3('0x39')]){_0x237acd['include']=[{'all':!![]}];}_0x237acd=_[_0x3fa3('0x34')]({},_0x237acd,_0x425f9a[_0x3fa3('0x37')]);return db[_0x3fa3('0x38')]['find'](_0x237acd)[_0x3fa3('0x1f')](handleEntityNotFound(_0x5f7da0,null))[_0x3fa3('0x1f')](respondWithResult(_0x5f7da0,null))[_0x3fa3('0x3f')](handleError(_0x5f7da0,null));};exports[_0x3fa3('0x40')]=function(_0x476a3e,_0x18df1a){return db['FaxQueue'][_0x3fa3('0x40')](_0x476a3e[_0x3fa3('0x41')],{})[_0x3fa3('0x1f')](respondWithResult(_0x18df1a,0xc9))['catch'](handleError(_0x18df1a,null));};exports[_0x3fa3('0x42')]=function(_0x1eb006,_0x31aad6){if(_0x1eb006[_0x3fa3('0x41')]['id']){delete _0x1eb006[_0x3fa3('0x41')]['id'];}return db['FaxQueue']['find']({'where':{'id':_0x1eb006[_0x3fa3('0x3e')]['id']}})[_0x3fa3('0x1f')](handleEntityNotFound(_0x31aad6,null))[_0x3fa3('0x1f')](saveUpdates(_0x1eb006[_0x3fa3('0x41')],null))[_0x3fa3('0x1f')](respondWithResult(_0x31aad6,null))[_0x3fa3('0x3f')](handleError(_0x31aad6,null));};exports[_0x3fa3('0x43')]=function(_0x4dde97,_0x346e7d){return db[_0x3fa3('0x38')]['find']({'where':{'id':_0x4dde97['params']['id']}})[_0x3fa3('0x1f')](handleEntityNotFound(_0x346e7d,null))[_0x3fa3('0x1f')](removeEntity(_0x346e7d,null))['catch'](handleError(_0x346e7d,null));};exports[_0x3fa3('0x44')]=function(_0x2f1102,_0x4314dc){return db['FaxQueue'][_0x3fa3('0x44')]()[_0x3fa3('0x1f')](respondWithResult(_0x4314dc,null))[_0x3fa3('0x3f')](handleError(_0x4314dc,null));};exports[_0x3fa3('0x45')]=function(_0x2d2d40,_0x514a52,_0x4c3c0c){var _0x38c96a={'raw':!![],'where':{}},_0x38119e={},_0x59d60c;return db[_0x3fa3('0x38')][_0x3fa3('0x46')]({'where':{'id':_0x2d2d40[_0x3fa3('0x3e')]['id']}})[_0x3fa3('0x1f')](handleEntityNotFound(_0x514a52,null))[_0x3fa3('0x1f')](function(_0x39dce9){if(_0x39dce9){_0x59d60c=_0x39dce9[_0x3fa3('0x47')]({'plain':!![]});_0x38119e[_0x3fa3('0x25')]=_[_0x3fa3('0x26')](db[_0x3fa3('0x48')][_0x3fa3('0x24')]);_0x38119e[_0x3fa3('0x27')]=_[_0x3fa3('0x26')](_0x2d2d40['query']);_0x38119e['filters']=_[_0x3fa3('0x2b')](_0x38119e[_0x3fa3('0x25')],_0x38119e[_0x3fa3('0x27')]);_0x38c96a['attributes']=_['intersection'](_0x38119e[_0x3fa3('0x25')],qs[_0x3fa3('0x2d')](_0x2d2d40[_0x3fa3('0x27')]['fields']));_0x38c96a[_0x3fa3('0x2c')]=_0x38c96a['attributes'][_0x3fa3('0x2e')]?_0x38c96a['attributes']:_0x38119e['model'];if(!_0x2d2d40[_0x3fa3('0x27')][_0x3fa3('0x49')]('nolimit')){_0x38c96a[_0x3fa3('0x1b')]=qs['limit'](_0x2d2d40[_0x3fa3('0x27')]['limit']);_0x38c96a[_0x3fa3('0x1a')]=qs[_0x3fa3('0x1a')](_0x2d2d40['query'][_0x3fa3('0x1a')]);}_0x38c96a['order']=qs[_0x3fa3('0x30')](_0x2d2d40[_0x3fa3('0x27')][_0x3fa3('0x30')]);_0x38c96a[_0x3fa3('0x31')]=qs[_0x3fa3('0x2a')](_['pick'](_0x2d2d40[_0x3fa3('0x27')],_0x38119e[_0x3fa3('0x2a')]));_0x38c96a['where'][_0x3fa3('0x4a')]=_0x39dce9['id'];if(_0x2d2d40[_0x3fa3('0x27')]['filter']){_0x38c96a[_0x3fa3('0x31')]=_[_0x3fa3('0x34')](_0x38c96a[_0x3fa3('0x31')],{'$or':_[_0x3fa3('0x36')](_0x38c96a[_0x3fa3('0x2c')],function(_0x4a7a43){var _0x2c3a3e={};_0x2c3a3e[_0x4a7a43]={'$like':'%'+_0x2d2d40[_0x3fa3('0x27')]['filter']+'%'};return _0x2c3a3e;})});}_0x38c96a=_[_0x3fa3('0x34')]({},_0x38c96a,_0x2d2d40['options']);return db[_0x3fa3('0x48')][_0x3fa3('0x3b')](_0x38c96a);}})[_0x3fa3('0x1f')](function(_0x114752){if(_0x114752){return db[_0x3fa3('0x4b')]['findAndCountAll']({'where':{'id':_[_0x3fa3('0x36')](_0x114752,_0x3fa3('0x4c')),'role':_0x3fa3('0x4d')},'attributes':['id','name',_0x3fa3('0x4e'),_0x3fa3('0x4f'),'createdAt']});}})[_0x3fa3('0x1f')](function(_0x496927){if(_0x496927){return{'count':_0x496927['count'],'rows':_[_0x3fa3('0x36')](_0x496927['rows'],function(_0x77d8fc){return{'membername':_0x77d8fc['name'],'UserId':_0x77d8fc['id'],'queue_name':_0x59d60c['name'],'FaxQueueId':_0x59d60c['id'],'interface':util[_0x3fa3('0x50')](_0x3fa3('0x51'),'SIP',_0x77d8fc[_0x3fa3('0x22')]),'penalty':0x0,'paused':_0x77d8fc[_0x3fa3('0x4e')],'createdAt':_0x77d8fc['createdAt'],'updatedAt':_0x77d8fc['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})[_0x3fa3('0x1f')](respondWithFilteredResult(_0x514a52,_0x38c96a))[_0x3fa3('0x3f')](handleError(_0x514a52,null));};exports[_0x3fa3('0x52')]=function(_0x21793d,_0x22caec,_0x1edc75){var _0x59db1e={};var _0x321b5c={};var _0x133719;var _0x10e085;return db[_0x3fa3('0x38')][_0x3fa3('0x46')]({'where':{'id':_0x21793d[_0x3fa3('0x3e')]['id']}})[_0x3fa3('0x1f')](handleEntityNotFound(_0x22caec,null))['then'](function(_0x1c5061){if(_0x1c5061){_0x133719=_0x1c5061;_0x321b5c[_0x3fa3('0x25')]=_[_0x3fa3('0x26')](db[_0x3fa3('0x53')]['rawAttributes']);_0x321b5c[_0x3fa3('0x27')]=_['keys'](_0x21793d[_0x3fa3('0x27')]);_0x321b5c[_0x3fa3('0x2a')]=_[_0x3fa3('0x2b')](_0x321b5c[_0x3fa3('0x25')],_0x321b5c[_0x3fa3('0x27')]);_0x59db1e['attributes']=_[_0x3fa3('0x2b')](_0x321b5c['model'],qs[_0x3fa3('0x2d')](_0x21793d['query']['fields']));_0x59db1e['attributes']=_0x59db1e[_0x3fa3('0x2c')]['length']?_0x59db1e['attributes']:_0x321b5c['model'];_0x59db1e['order']=qs[_0x3fa3('0x30')](_0x21793d['query'][_0x3fa3('0x30')]);_0x59db1e[_0x3fa3('0x31')]=qs[_0x3fa3('0x2a')](_['pick'](_0x21793d[_0x3fa3('0x27')],_0x321b5c[_0x3fa3('0x2a')]));if(_0x21793d['query'][_0x3fa3('0x35')]){_0x59db1e['where']=_[_0x3fa3('0x34')](_0x59db1e['where'],{'$or':_[_0x3fa3('0x36')](_0x59db1e[_0x3fa3('0x2c')],function(_0x463f86){var _0x9d7727={};_0x9d7727[_0x463f86]={'$like':'%'+_0x21793d['query'][_0x3fa3('0x35')]+'%'};return _0x9d7727;})});}_0x59db1e=_[_0x3fa3('0x34')]({},_0x59db1e,_0x21793d[_0x3fa3('0x37')]);return _0x133719[_0x3fa3('0x52')](_0x59db1e);}})['then'](function(_0x468982){if(_0x468982){_0x10e085=_0x468982[_0x3fa3('0x2e')];if(!_0x21793d['query'][_0x3fa3('0x49')]('nolimit')){_0x59db1e['limit']=qs[_0x3fa3('0x1b')](_0x21793d['query']['limit']);_0x59db1e[_0x3fa3('0x1a')]=qs[_0x3fa3('0x1a')](_0x21793d['query']['offset']);}return _0x133719[_0x3fa3('0x52')](_0x59db1e);}})[_0x3fa3('0x1f')](function(_0x2cae42){if(_0x2cae42){return _0x2cae42?{'count':_0x10e085,'rows':_0x2cae42}:null;}})[_0x3fa3('0x1f')](respondWithResult(_0x22caec,null))[_0x3fa3('0x3f')](handleError(_0x22caec,null));};exports[_0x3fa3('0x54')]=function(_0x3bff90,_0x258e29,_0x42fb67){var _0x1db344=[];var _0x146a6e;return db['Team'][_0x3fa3('0x3b')]({'where':{'id':_0x3bff90[_0x3fa3('0x41')][_0x3fa3('0x55')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x3fa3('0x56'),'attributes':['id'],'raw':!![]}]})['then'](function(_0x513543){if(_0x513543){for(var _0x301d04=0x0;_0x301d04<_0x513543['length'];_0x301d04+=0x1){for(var _0x4d4b68=0x0;_0x4d4b68<_0x513543[_0x301d04]['Agents'][_0x3fa3('0x2e')];_0x4d4b68+=0x1){_0x1db344=_['union'](_0x1db344,[_0x513543[_0x301d04][_0x3fa3('0x56')][_0x4d4b68]['id']]);}}return _0x1db344;}})['then'](function(_0x1d63e7){if(_0x1d63e7){return db['FaxQueue'][_0x3fa3('0x57')]({'where':{'id':_0x3bff90[_0x3fa3('0x3e')]['id']}});}})[_0x3fa3('0x1f')](function(_0x75d1a5){if(_0x75d1a5){_0x146a6e=_0x75d1a5;return _0x146a6e[_0x3fa3('0x58')](_0x1db344,{'penalty':_0x3bff90[_0x3fa3('0x41')][_0x3fa3('0x59')]});}})['then'](function(_0x182647){if(_0x182647){return _0x146a6e[_0x3fa3('0x54')](_0x3bff90[_0x3fa3('0x41')][_0x3fa3('0x55')]);}})[_0x3fa3('0x1f')](handleEntityNotFound(_0x258e29,null))['then'](respondWithStatusCode(_0x258e29,null))[_0x3fa3('0x3f')](handleError(_0x258e29,null));};exports['removeTeams']=function(_0x3391b0,_0x30bf80,_0x296b94){var _0x289841=[];var _0x582031;return db['Team'][_0x3fa3('0x3b')]({'where':{'id':_0x3391b0['query'][_0x3fa3('0x55')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x3fa3('0x56'),'attributes':['id'],'raw':!![]}]})[_0x3fa3('0x1f')](function(_0xf38f1){if(_0xf38f1){for(var _0x1cb770=0x0;_0x1cb770<_0xf38f1[_0x3fa3('0x2e')];_0x1cb770+=0x1){for(var _0x441eec=0x0;_0x441eec<_0xf38f1[_0x1cb770]['Agents']['length'];_0x441eec+=0x1){_0x289841=_['union'](_0x289841,[_0xf38f1[_0x1cb770][_0x3fa3('0x56')][_0x441eec]['id']]);}}return _0x289841;}})[_0x3fa3('0x1f')](function(_0x48653f){if(_0x48653f){return db[_0x3fa3('0x38')][_0x3fa3('0x57')]({'where':{'id':_0x3391b0[_0x3fa3('0x3e')]['id']}});}})[_0x3fa3('0x1f')](function(_0x2ebeef){if(_0x2ebeef){_0x582031=_0x2ebeef;return _0x582031[_0x3fa3('0x5a')](_0x289841);}})['then'](function(_0x16568b){if(_0x582031){return _0x582031[_0x3fa3('0x5b')](_0x3391b0[_0x3fa3('0x27')][_0x3fa3('0x55')]);}})[_0x3fa3('0x1f')](handleEntityNotFound(_0x30bf80,null))['then'](respondWithStatusCode(_0x30bf80,null))[_0x3fa3('0x3f')](handleError(_0x30bf80,null));};exports[_0x3fa3('0x58')]=function(_0x27b2f0,_0x28f591,_0x59bf0a){return db['FaxQueue'][_0x3fa3('0x57')]({'where':{'id':_0x27b2f0[_0x3fa3('0x3e')]['id']}})[_0x3fa3('0x1f')](handleEntityNotFound(_0x28f591,null))['then'](function(_0x130f1a){if(_0x130f1a){return _0x130f1a['addAgents'](_0x27b2f0[_0x3fa3('0x41')][_0x3fa3('0x55')],_[_0x3fa3('0x5c')](_0x27b2f0[_0x3fa3('0x41')],[_0x3fa3('0x55'),'id'])||{})[_0x3fa3('0x5d')](function(_0x653aa){for(var _0x34cfd4=0x0;_0x34cfd4<_0x27b2f0[_0x3fa3('0x41')][_0x3fa3('0x55')]['length'];_0x34cfd4+=0x1){socket[_0x3fa3('0x5e')](_0x3fa3('0x5f'),{'UserId':_0x27b2f0['body'][_0x3fa3('0x55')][_0x34cfd4],'FaxQueueId':_0x27b2f0[_0x3fa3('0x3e')]['id']});}return _0x653aa;});}})[_0x3fa3('0x1f')](respondWithResult(_0x28f591,null))[_0x3fa3('0x3f')](handleError(_0x28f591,null));};exports[_0x3fa3('0x5a')]=function(_0x1e549f,_0x22418e,_0x27a7ed){var _0x1d1639;return db[_0x3fa3('0x38')][_0x3fa3('0x57')]({'where':{'id':_0x1e549f[_0x3fa3('0x3e')]['id']}})[_0x3fa3('0x1f')](handleEntityNotFound(_0x22418e,null))[_0x3fa3('0x1f')](function(_0x152b28){if(_0x152b28){return _0x152b28[_0x3fa3('0x5a')](_0x1e549f[_0x3fa3('0x27')][_0x3fa3('0x55')])[_0x3fa3('0x1f')](function(_0xb7ce88){if(_[_0x3fa3('0x60')](_0x1e549f[_0x3fa3('0x27')][_0x3fa3('0x55')])){for(var _0x338a49=0x0;_0x338a49<_0x1e549f[_0x3fa3('0x27')]['ids'][_0x3fa3('0x2e')];_0x338a49+=0x1){socket[_0x3fa3('0x5e')](_0x3fa3('0x61'),{'UserId':_0x1e549f[_0x3fa3('0x27')]['ids'][_0x338a49],'FaxQueueId':_0x1e549f[_0x3fa3('0x3e')]['id']});}}else{socket[_0x3fa3('0x5e')]('userFaxQueue:remove',{'UserId':_0x1e549f[_0x3fa3('0x27')][_0x3fa3('0x55')],'FaxQueueId':_0x1e549f[_0x3fa3('0x3e')]['id']});}});}})[_0x3fa3('0x1f')](respondWithStatusCode(_0x22418e,null))[_0x3fa3('0x3f')](handleError(_0x22418e,null));};exports[_0x3fa3('0x62')]=function(_0x21f9d3,_0x4aa04f,_0x4d259c){var _0x3254b2={};var _0x4bbf92={};var _0x28cc7a;var _0x34d7f3;return db[_0x3fa3('0x38')][_0x3fa3('0x46')]({'where':{'id':_0x21f9d3['params']['id']}})[_0x3fa3('0x1f')](handleEntityNotFound(_0x4aa04f,null))[_0x3fa3('0x1f')](function(_0xb14865){if(_0xb14865){_0x28cc7a=_0xb14865;_0x4bbf92['model']=_[_0x3fa3('0x26')](db[_0x3fa3('0x4b')][_0x3fa3('0x24')]);_0x4bbf92['query']=_['keys'](_0x21f9d3[_0x3fa3('0x27')]);_0x4bbf92[_0x3fa3('0x2a')]=_['intersection'](_0x4bbf92[_0x3fa3('0x25')],_0x4bbf92[_0x3fa3('0x27')]);_0x3254b2[_0x3fa3('0x2c')]=_['intersection'](_0x4bbf92[_0x3fa3('0x25')],qs[_0x3fa3('0x2d')](_0x21f9d3['query']['fields']));_0x3254b2['attributes']=_0x3254b2['attributes'][_0x3fa3('0x2e')]?_0x3254b2[_0x3fa3('0x2c')]:_0x4bbf92[_0x3fa3('0x25')];_0x3254b2[_0x3fa3('0x63')]=qs[_0x3fa3('0x30')](_0x21f9d3['query'][_0x3fa3('0x30')]);_0x3254b2[_0x3fa3('0x31')]=qs[_0x3fa3('0x2a')](_[_0x3fa3('0x32')](_0x21f9d3[_0x3fa3('0x27')],_0x4bbf92[_0x3fa3('0x2a')]));if(_0x21f9d3[_0x3fa3('0x27')]['filter']){_0x3254b2[_0x3fa3('0x31')]=_[_0x3fa3('0x34')](_0x3254b2[_0x3fa3('0x31')],{'$or':_[_0x3fa3('0x36')](_0x3254b2['attributes'],function(_0x191936){var _0x58108c={};_0x58108c[_0x191936]={'$like':'%'+_0x21f9d3[_0x3fa3('0x27')][_0x3fa3('0x35')]+'%'};return _0x58108c;})});}_0x3254b2=_['merge']({},_0x3254b2,_0x21f9d3[_0x3fa3('0x37')]);return _0x28cc7a[_0x3fa3('0x62')](_0x3254b2);}})[_0x3fa3('0x1f')](function(_0x54036b){if(_0x54036b){_0x34d7f3=_0x54036b[_0x3fa3('0x2e')];if(!_0x21f9d3[_0x3fa3('0x27')][_0x3fa3('0x49')]('nolimit')){_0x3254b2['limit']=qs[_0x3fa3('0x1b')](_0x21f9d3[_0x3fa3('0x27')][_0x3fa3('0x1b')]);_0x3254b2['offset']=qs[_0x3fa3('0x1a')](_0x21f9d3[_0x3fa3('0x27')][_0x3fa3('0x1a')]);}return _0x28cc7a['getAgents'](_0x3254b2);}})[_0x3fa3('0x1f')](function(_0x50969a){if(_0x50969a){return _0x50969a?{'count':_0x34d7f3,'rows':_0x50969a}:null;}})[_0x3fa3('0x1f')](respondWithResult(_0x4aa04f,null))[_0x3fa3('0x3f')](handleError(_0x4aa04f,null));};
\ No newline at end of file
+var _0x8696=['User','UserId','agent','faxPause','rows','format','%s/%s','SIP','getTeams','length','addTeams','Team','ids','Agents','union','penalty','removeTeams','addAgents','omit','spread','emit','userFaxQueue:save','removeAgents','isArray','userFaxQueue:remove','getAgents','fast-json-patch','request-promise','bluebird','util','path','sox','ejs','squel','crypto','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','socket.io-emitter','localhost','./faxQueue.socket','sendStatus','status','end','offset','limit','Content-Range','json','apply','update','destroy','then','stack','name','send','index','FaxQueue','rawAttributes','model','keys','query','dateEnd','dateStart','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','filter','map','options','count','includeAll','include','catch','show','params','find','create','body','describe','findOne','get','UserFaxQueue','FaxQueueId','findAll'];(function(_0x419e17,_0x7fe78c){var _0x1f2044=function(_0x3723e6){while(--_0x3723e6){_0x419e17['push'](_0x419e17['shift']());}};_0x1f2044(++_0x7fe78c);}(_0x8696,0x143));var _0x6869=function(_0x7f0180,_0x562eef){_0x7f0180=_0x7f0180-0x0;var _0x2f02aa=_0x8696[_0x7f0180];return _0x2f02aa;};'use strict';var jsonpatch=require(_0x6869('0x0'));var rp=require(_0x6869('0x1'));var moment=require('moment');var BPromise=require(_0x6869('0x2'));var Mustache=require('mustache');var util=require(_0x6869('0x3'));var path=require(_0x6869('0x4'));var sox=require(_0x6869('0x5'));var csv=require('to-csv');var ejs=require(_0x6869('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x6869('0x7'));var crypto=require(_0x6869('0x8'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x6869('0x9'));var querystring=require(_0x6869('0xa'));var Papa=require(_0x6869('0xb'));var qs=require(_0x6869('0xc'));var logger=require(_0x6869('0xd'))(_0x6869('0xe'));var utils=require(_0x6869('0xf'));var config=require('../../config/environment');var db=require(_0x6869('0x10'))['db'];var socket=require(_0x6869('0x11'))({'host':_0x6869('0x12'),'port':0x18eb});require(_0x6869('0x13'))['register'](socket);function respondWithStatusCode(_0x5370de,_0x5e8d9b){_0x5e8d9b=_0x5e8d9b||0xcc;return function(_0x104e8b){if(_0x104e8b){return _0x5370de[_0x6869('0x14')](_0x5e8d9b);}return _0x5370de[_0x6869('0x15')](_0x5e8d9b)[_0x6869('0x16')]();};}function respondWithResult(_0x42958f,_0x5936ef){_0x5936ef=_0x5936ef||0xc8;return function(_0x1553e1){if(_0x1553e1){return _0x42958f[_0x6869('0x15')](_0x5936ef)['json'](_0x1553e1);}};}function respondWithFilteredResult(_0xc603fc,_0x3d5c59){return function(_0x1fda61){if(_0x1fda61){var _0x4b00f7=_0x1fda61['count'],_0x36a619=_0x3d5c59[_0x6869('0x17')],_0x4f943b=_0x3d5c59[_0x6869('0x17')]+_0x3d5c59[_0x6869('0x18')],_0x16f86f;if(_0x4f943b>=_0x4b00f7){_0x4f943b=_0x4b00f7;_0x16f86f=0xc8;}else{_0x16f86f=0xce;}_0xc603fc[_0x6869('0x15')](_0x16f86f);return _0xc603fc['set'](_0x6869('0x19'),_0x36a619+'-'+_0x4f943b+'/'+_0x4b00f7)[_0x6869('0x1a')](_0x1fda61);}return null;};}function patchUpdates(_0x36da1f){return function(_0x4e2905){try{jsonpatch[_0x6869('0x1b')](_0x4e2905,_0x36da1f,!![]);}catch(_0xdb1f89){return BPromise['reject'](_0xdb1f89);}return _0x4e2905['save']();};}function saveUpdates(_0x333809,_0x56b4f6){return function(_0x39794a){if(_0x39794a){return _0x39794a[_0x6869('0x1c')](_0x333809)['then'](function(_0x19259a){return _0x19259a;});}return null;};}function removeEntity(_0x18b29e,_0x4a487e){return function(_0x23d1a8){if(_0x23d1a8){return _0x23d1a8[_0x6869('0x1d')]()[_0x6869('0x1e')](function(){_0x18b29e[_0x6869('0x15')](0xcc)[_0x6869('0x16')]();});}};}function handleEntityNotFound(_0x22c5cf,_0x52efb9){return function(_0x4ebe88){if(!_0x4ebe88){_0x22c5cf[_0x6869('0x14')](0x194);}return _0x4ebe88;};}function handleError(_0x1dc71e,_0x35f962){_0x35f962=_0x35f962||0x1f4;return function(_0x4e37ff){logger['error'](_0x4e37ff[_0x6869('0x1f')]);if(_0x4e37ff[_0x6869('0x20')]){delete _0x4e37ff['name'];}_0x1dc71e[_0x6869('0x15')](_0x35f962)[_0x6869('0x21')](_0x4e37ff);};}exports[_0x6869('0x22')]=function(_0x5cd27e,_0x52c46d){var _0x2da99d={},_0xceb447={},_0x4e5f3b={'count':0x0,'rows':[]};var _0x424e44=db[_0x6869('0x23')][_0x6869('0x24')];_0xceb447[_0x6869('0x25')]=_[_0x6869('0x26')](_0x424e44);var _0x25842e={'dateStart':_0x5cd27e['query']['dateStart'],'dateEnd':_0x5cd27e[_0x6869('0x27')][_0x6869('0x28')]};delete _0x5cd27e[_0x6869('0x27')][_0x6869('0x29')];delete _0x5cd27e[_0x6869('0x27')][_0x6869('0x28')];_0xceb447[_0x6869('0x27')]=_['keys'](_0x5cd27e[_0x6869('0x27')]);_0xceb447[_0x6869('0x2a')]=_[_0x6869('0x2b')](_0xceb447[_0x6869('0x25')],_0xceb447[_0x6869('0x27')]);_0x2da99d[_0x6869('0x2c')]=_[_0x6869('0x2b')](_0xceb447['model'],qs['fields'](_0x5cd27e[_0x6869('0x27')][_0x6869('0x2d')]));_0x2da99d[_0x6869('0x2c')]=_0x2da99d[_0x6869('0x2c')]['length']?_0x2da99d[_0x6869('0x2c')]:_0xceb447[_0x6869('0x25')];if(!_0x5cd27e[_0x6869('0x27')][_0x6869('0x2e')](_0x6869('0x2f'))){_0x2da99d[_0x6869('0x18')]=qs[_0x6869('0x18')](_0x5cd27e[_0x6869('0x27')]['limit']);_0x2da99d[_0x6869('0x17')]=qs[_0x6869('0x17')](_0x5cd27e[_0x6869('0x27')][_0x6869('0x17')]);}_0x2da99d[_0x6869('0x30')]=qs['sort'](_0x5cd27e['query'][_0x6869('0x31')]);_0x2da99d[_0x6869('0x32')]=qs['filters'](_[_0x6869('0x33')](_0x5cd27e['query'],_0xceb447[_0x6869('0x2a')]));if(_0x25842e[_0x6869('0x29')]){if(_0x25842e[_0x6869('0x28')]){_0x25842e['dateEnd']=moment(_0x25842e['dateEnd'])[_0x6869('0x34')](0x1,_0x6869('0x35'));}else{_0x25842e[_0x6869('0x28')]=moment(_0x25842e['dateStart'])['add'](0x1,_0x6869('0x35'));}_[_0x6869('0x36')](_0x2da99d[_0x6869('0x32')],{'createdAt':{'$gte':_0x25842e[_0x6869('0x29')],'$lte':_0x25842e[_0x6869('0x28')]}});}if(_0x5cd27e[_0x6869('0x27')][_0x6869('0x37')]){_0x2da99d[_0x6869('0x32')]=_[_0x6869('0x36')](_0x2da99d[_0x6869('0x32')],{'$or':_[_0x6869('0x38')](_0x2da99d[_0x6869('0x2c')],function(_0x44b6ce){var _0x1013aa={};_0x1013aa[_0x44b6ce]={'$like':'%'+_0x5cd27e[_0x6869('0x27')][_0x6869('0x37')]+'%'};return _0x1013aa;})});}_0x2da99d=_[_0x6869('0x36')]({},_0x2da99d,_0x5cd27e[_0x6869('0x39')]);var _0x5638b1={'where':_0x2da99d[_0x6869('0x32')]};return db[_0x6869('0x23')][_0x6869('0x3a')](_0x5638b1)[_0x6869('0x1e')](function(_0x57dd5e){_0x4e5f3b[_0x6869('0x3a')]=_0x57dd5e;if(_0x5cd27e['query'][_0x6869('0x3b')]){_0x2da99d[_0x6869('0x3c')]=[{'all':!![]}];}return db[_0x6869('0x23')]['findAll'](_0x2da99d);})['then'](function(_0x15b938){_0x4e5f3b['rows']=_0x15b938;return _0x4e5f3b;})[_0x6869('0x1e')](respondWithFilteredResult(_0x52c46d,_0x2da99d))[_0x6869('0x3d')](handleError(_0x52c46d,null));};exports[_0x6869('0x3e')]=function(_0x2df26c,_0x5ee036){var _0x295187={'raw':!![],'where':{'id':_0x2df26c[_0x6869('0x3f')]['id']}},_0x497766={};_0x497766[_0x6869('0x25')]=_[_0x6869('0x26')](db[_0x6869('0x23')][_0x6869('0x24')]);_0x497766[_0x6869('0x27')]=_[_0x6869('0x26')](_0x2df26c[_0x6869('0x27')]);_0x497766[_0x6869('0x2a')]=_[_0x6869('0x2b')](_0x497766['model'],_0x497766[_0x6869('0x27')]);_0x295187[_0x6869('0x2c')]=_['intersection'](_0x497766['model'],qs[_0x6869('0x2d')](_0x2df26c[_0x6869('0x27')][_0x6869('0x2d')]));_0x295187[_0x6869('0x2c')]=_0x295187[_0x6869('0x2c')]['length']?_0x295187[_0x6869('0x2c')]:_0x497766[_0x6869('0x25')];if(_0x2df26c[_0x6869('0x27')]['includeAll']){_0x295187[_0x6869('0x3c')]=[{'all':!![]}];}_0x295187=_[_0x6869('0x36')]({},_0x295187,_0x2df26c[_0x6869('0x39')]);return db[_0x6869('0x23')][_0x6869('0x40')](_0x295187)[_0x6869('0x1e')](handleEntityNotFound(_0x5ee036,null))[_0x6869('0x1e')](respondWithResult(_0x5ee036,null))[_0x6869('0x3d')](handleError(_0x5ee036,null));};exports[_0x6869('0x41')]=function(_0x22ab73,_0x2b5603){return db[_0x6869('0x23')][_0x6869('0x41')](_0x22ab73['body'],{})[_0x6869('0x1e')](respondWithResult(_0x2b5603,0xc9))[_0x6869('0x3d')](handleError(_0x2b5603,null));};exports[_0x6869('0x1c')]=function(_0x50c79c,_0x465620){if(_0x50c79c[_0x6869('0x42')]['id']){delete _0x50c79c['body']['id'];}return db['FaxQueue'][_0x6869('0x40')]({'where':{'id':_0x50c79c[_0x6869('0x3f')]['id']}})['then'](handleEntityNotFound(_0x465620,null))[_0x6869('0x1e')](saveUpdates(_0x50c79c[_0x6869('0x42')],null))['then'](respondWithResult(_0x465620,null))[_0x6869('0x3d')](handleError(_0x465620,null));};exports[_0x6869('0x1d')]=function(_0x127e80,_0x1d08a7){return db[_0x6869('0x23')][_0x6869('0x40')]({'where':{'id':_0x127e80[_0x6869('0x3f')]['id']}})[_0x6869('0x1e')](handleEntityNotFound(_0x1d08a7,null))[_0x6869('0x1e')](removeEntity(_0x1d08a7,null))[_0x6869('0x3d')](handleError(_0x1d08a7,null));};exports[_0x6869('0x43')]=function(_0xff24,_0x100242){return db[_0x6869('0x23')]['describe']()[_0x6869('0x1e')](respondWithResult(_0x100242,null))[_0x6869('0x3d')](handleError(_0x100242,null));};exports['getMembers']=function(_0x4f1fc6,_0xccdf29,_0x8f4072){var _0x1cda9c={'raw':!![],'where':{}},_0x5ee671={},_0x2ffd48;return db['FaxQueue'][_0x6869('0x44')]({'where':{'id':_0x4f1fc6['params']['id']}})[_0x6869('0x1e')](handleEntityNotFound(_0xccdf29,null))[_0x6869('0x1e')](function(_0x513cf7){if(_0x513cf7){_0x2ffd48=_0x513cf7[_0x6869('0x45')]({'plain':!![]});_0x5ee671['model']=_['keys'](db[_0x6869('0x46')][_0x6869('0x24')]);_0x5ee671[_0x6869('0x27')]=_[_0x6869('0x26')](_0x4f1fc6['query']);_0x5ee671[_0x6869('0x2a')]=_[_0x6869('0x2b')](_0x5ee671[_0x6869('0x25')],_0x5ee671['query']);_0x1cda9c[_0x6869('0x2c')]=_[_0x6869('0x2b')](_0x5ee671[_0x6869('0x25')],qs['fields'](_0x4f1fc6[_0x6869('0x27')][_0x6869('0x2d')]));_0x1cda9c[_0x6869('0x2c')]=_0x1cda9c[_0x6869('0x2c')]['length']?_0x1cda9c[_0x6869('0x2c')]:_0x5ee671[_0x6869('0x25')];if(!_0x4f1fc6[_0x6869('0x27')][_0x6869('0x2e')](_0x6869('0x2f'))){_0x1cda9c[_0x6869('0x18')]=qs[_0x6869('0x18')](_0x4f1fc6[_0x6869('0x27')][_0x6869('0x18')]);_0x1cda9c[_0x6869('0x17')]=qs[_0x6869('0x17')](_0x4f1fc6[_0x6869('0x27')][_0x6869('0x17')]);}_0x1cda9c[_0x6869('0x30')]=qs[_0x6869('0x31')](_0x4f1fc6[_0x6869('0x27')][_0x6869('0x31')]);_0x1cda9c[_0x6869('0x32')]=qs[_0x6869('0x2a')](_[_0x6869('0x33')](_0x4f1fc6[_0x6869('0x27')],_0x5ee671[_0x6869('0x2a')]));_0x1cda9c['where'][_0x6869('0x47')]=_0x513cf7['id'];if(_0x4f1fc6['query'][_0x6869('0x37')]){_0x1cda9c[_0x6869('0x32')]=_[_0x6869('0x36')](_0x1cda9c[_0x6869('0x32')],{'$or':_[_0x6869('0x38')](_0x1cda9c[_0x6869('0x2c')],function(_0x127007){var _0x273348={};_0x273348[_0x127007]={'$like':'%'+_0x4f1fc6[_0x6869('0x27')][_0x6869('0x37')]+'%'};return _0x273348;})});}_0x1cda9c=_[_0x6869('0x36')]({},_0x1cda9c,_0x4f1fc6['options']);return db[_0x6869('0x46')][_0x6869('0x48')](_0x1cda9c);}})[_0x6869('0x1e')](function(_0x59ee7b){if(_0x59ee7b){return db[_0x6869('0x49')]['findAndCountAll']({'where':{'id':_[_0x6869('0x38')](_0x59ee7b,_0x6869('0x4a')),'role':_0x6869('0x4b')},'attributes':['id',_0x6869('0x20'),_0x6869('0x4c'),'updatedAt','createdAt']});}})[_0x6869('0x1e')](function(_0x2c0c81){if(_0x2c0c81){return{'count':_0x2c0c81[_0x6869('0x3a')],'rows':_[_0x6869('0x38')](_0x2c0c81[_0x6869('0x4d')],function(_0x4602d6){return{'membername':_0x4602d6[_0x6869('0x20')],'UserId':_0x4602d6['id'],'queue_name':_0x2ffd48[_0x6869('0x20')],'FaxQueueId':_0x2ffd48['id'],'interface':util[_0x6869('0x4e')](_0x6869('0x4f'),_0x6869('0x50'),_0x4602d6['name']),'penalty':0x0,'paused':_0x4602d6[_0x6869('0x4c')],'createdAt':_0x4602d6['createdAt'],'updatedAt':_0x4602d6['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0xccdf29,_0x1cda9c))['catch'](handleError(_0xccdf29,null));};exports[_0x6869('0x51')]=function(_0x242329,_0x90c277,_0x421bf8){var _0x3a13ef={};var _0x3ce1cf={};var _0x29282b;var _0xb3a48c;return db[_0x6869('0x23')][_0x6869('0x44')]({'where':{'id':_0x242329['params']['id']}})[_0x6869('0x1e')](handleEntityNotFound(_0x90c277,null))[_0x6869('0x1e')](function(_0x42f2c3){if(_0x42f2c3){_0x29282b=_0x42f2c3;_0x3ce1cf[_0x6869('0x25')]=_[_0x6869('0x26')](db['Team'][_0x6869('0x24')]);_0x3ce1cf[_0x6869('0x27')]=_['keys'](_0x242329[_0x6869('0x27')]);_0x3ce1cf['filters']=_[_0x6869('0x2b')](_0x3ce1cf[_0x6869('0x25')],_0x3ce1cf['query']);_0x3a13ef[_0x6869('0x2c')]=_[_0x6869('0x2b')](_0x3ce1cf['model'],qs['fields'](_0x242329[_0x6869('0x27')][_0x6869('0x2d')]));_0x3a13ef[_0x6869('0x2c')]=_0x3a13ef[_0x6869('0x2c')][_0x6869('0x52')]?_0x3a13ef[_0x6869('0x2c')]:_0x3ce1cf['model'];_0x3a13ef[_0x6869('0x30')]=qs[_0x6869('0x31')](_0x242329[_0x6869('0x27')][_0x6869('0x31')]);_0x3a13ef[_0x6869('0x32')]=qs[_0x6869('0x2a')](_[_0x6869('0x33')](_0x242329[_0x6869('0x27')],_0x3ce1cf[_0x6869('0x2a')]));if(_0x242329[_0x6869('0x27')][_0x6869('0x37')]){_0x3a13ef['where']=_[_0x6869('0x36')](_0x3a13ef[_0x6869('0x32')],{'$or':_[_0x6869('0x38')](_0x3a13ef[_0x6869('0x2c')],function(_0x3753ad){var _0x340402={};_0x340402[_0x3753ad]={'$like':'%'+_0x242329['query'][_0x6869('0x37')]+'%'};return _0x340402;})});}_0x3a13ef=_[_0x6869('0x36')]({},_0x3a13ef,_0x242329[_0x6869('0x39')]);return _0x29282b[_0x6869('0x51')](_0x3a13ef);}})[_0x6869('0x1e')](function(_0x1f2424){if(_0x1f2424){_0xb3a48c=_0x1f2424[_0x6869('0x52')];if(!_0x242329[_0x6869('0x27')][_0x6869('0x2e')](_0x6869('0x2f'))){_0x3a13ef[_0x6869('0x18')]=qs[_0x6869('0x18')](_0x242329['query'][_0x6869('0x18')]);_0x3a13ef[_0x6869('0x17')]=qs[_0x6869('0x17')](_0x242329['query']['offset']);}return _0x29282b[_0x6869('0x51')](_0x3a13ef);}})[_0x6869('0x1e')](function(_0x5910fe){if(_0x5910fe){return _0x5910fe?{'count':_0xb3a48c,'rows':_0x5910fe}:null;}})[_0x6869('0x1e')](respondWithResult(_0x90c277,null))[_0x6869('0x3d')](handleError(_0x90c277,null));};exports[_0x6869('0x53')]=function(_0x36d63a,_0x549d99,_0x5bee48){var _0x2cbe0d=[];var _0x327b36;return db[_0x6869('0x54')][_0x6869('0x48')]({'where':{'id':_0x36d63a[_0x6869('0x42')][_0x6869('0x55')]},'attributes':['id'],'include':[{'model':db[_0x6869('0x49')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x6869('0x1e')](function(_0x5a5181){if(_0x5a5181){for(var _0x31e9f4=0x0;_0x31e9f4<_0x5a5181[_0x6869('0x52')];_0x31e9f4+=0x1){for(var _0x5e5d6c=0x0;_0x5e5d6c<_0x5a5181[_0x31e9f4][_0x6869('0x56')][_0x6869('0x52')];_0x5e5d6c+=0x1){_0x2cbe0d=_[_0x6869('0x57')](_0x2cbe0d,[_0x5a5181[_0x31e9f4]['Agents'][_0x5e5d6c]['id']]);}}return _0x2cbe0d;}})['then'](function(_0x9540ed){if(_0x9540ed){return db[_0x6869('0x23')][_0x6869('0x40')]({'where':{'id':_0x36d63a['params']['id']}});}})[_0x6869('0x1e')](function(_0x5a25a6){if(_0x5a25a6){_0x327b36=_0x5a25a6;return _0x327b36['addAgents'](_0x2cbe0d,{'penalty':_0x36d63a[_0x6869('0x42')][_0x6869('0x58')]});}})['then'](function(_0x23a3a8){if(_0x23a3a8){return _0x327b36['addTeams'](_0x36d63a[_0x6869('0x42')][_0x6869('0x55')]);}})[_0x6869('0x1e')](handleEntityNotFound(_0x549d99,null))[_0x6869('0x1e')](respondWithStatusCode(_0x549d99,null))[_0x6869('0x3d')](handleError(_0x549d99,null));};exports[_0x6869('0x59')]=function(_0x5c0d14,_0x1322b0,_0x239080){var _0x2ba56a=[];var _0x560947;return db[_0x6869('0x54')][_0x6869('0x48')]({'where':{'id':_0x5c0d14['query'][_0x6869('0x55')]},'attributes':['id'],'include':[{'model':db[_0x6869('0x49')],'as':'Agents','attributes':['id'],'raw':!![]}]})['then'](function(_0x4758f6){if(_0x4758f6){for(var _0x953090=0x0;_0x953090<_0x4758f6[_0x6869('0x52')];_0x953090+=0x1){for(var _0x24708e=0x0;_0x24708e<_0x4758f6[_0x953090][_0x6869('0x56')][_0x6869('0x52')];_0x24708e+=0x1){_0x2ba56a=_['union'](_0x2ba56a,[_0x4758f6[_0x953090][_0x6869('0x56')][_0x24708e]['id']]);}}return _0x2ba56a;}})[_0x6869('0x1e')](function(_0x47b64f){if(_0x47b64f){return db['FaxQueue'][_0x6869('0x40')]({'where':{'id':_0x5c0d14[_0x6869('0x3f')]['id']}});}})['then'](function(_0x298e71){if(_0x298e71){_0x560947=_0x298e71;return _0x560947['removeAgents'](_0x2ba56a);}})[_0x6869('0x1e')](function(_0x4e3693){if(_0x560947){return _0x560947[_0x6869('0x59')](_0x5c0d14[_0x6869('0x27')][_0x6869('0x55')]);}})[_0x6869('0x1e')](handleEntityNotFound(_0x1322b0,null))[_0x6869('0x1e')](respondWithStatusCode(_0x1322b0,null))[_0x6869('0x3d')](handleError(_0x1322b0,null));};exports[_0x6869('0x5a')]=function(_0x46a313,_0x306c02,_0x3b646d){return db[_0x6869('0x23')][_0x6869('0x40')]({'where':{'id':_0x46a313[_0x6869('0x3f')]['id']}})[_0x6869('0x1e')](handleEntityNotFound(_0x306c02,null))[_0x6869('0x1e')](function(_0x946436){if(_0x946436){return _0x946436[_0x6869('0x5a')](_0x46a313[_0x6869('0x42')]['ids'],_[_0x6869('0x5b')](_0x46a313[_0x6869('0x42')],['ids','id'])||{})[_0x6869('0x5c')](function(_0x14b9ca){for(var _0x5139c0=0x0;_0x5139c0<_0x46a313[_0x6869('0x42')][_0x6869('0x55')][_0x6869('0x52')];_0x5139c0+=0x1){socket[_0x6869('0x5d')](_0x6869('0x5e'),{'UserId':_0x46a313[_0x6869('0x42')][_0x6869('0x55')][_0x5139c0],'FaxQueueId':_0x46a313['params']['id']});}return _0x14b9ca;});}})['then'](respondWithResult(_0x306c02,null))[_0x6869('0x3d')](handleError(_0x306c02,null));};exports[_0x6869('0x5f')]=function(_0x4500b4,_0x1f1511,_0x25e0de){var _0x2805b4;return db[_0x6869('0x23')][_0x6869('0x40')]({'where':{'id':_0x4500b4['params']['id']}})[_0x6869('0x1e')](handleEntityNotFound(_0x1f1511,null))[_0x6869('0x1e')](function(_0x561ad0){if(_0x561ad0){return _0x561ad0['removeAgents'](_0x4500b4['query'][_0x6869('0x55')])['then'](function(_0xea1441){if(_[_0x6869('0x60')](_0x4500b4[_0x6869('0x27')][_0x6869('0x55')])){for(var _0x1af754=0x0;_0x1af754<_0x4500b4[_0x6869('0x27')]['ids'][_0x6869('0x52')];_0x1af754+=0x1){socket['emit']('userFaxQueue:remove',{'UserId':_0x4500b4[_0x6869('0x27')][_0x6869('0x55')][_0x1af754],'FaxQueueId':_0x4500b4[_0x6869('0x3f')]['id']});}}else{socket['emit'](_0x6869('0x61'),{'UserId':_0x4500b4[_0x6869('0x27')]['ids'],'FaxQueueId':_0x4500b4[_0x6869('0x3f')]['id']});}});}})[_0x6869('0x1e')](respondWithStatusCode(_0x1f1511,null))[_0x6869('0x3d')](handleError(_0x1f1511,null));};exports[_0x6869('0x62')]=function(_0x4ec2ca,_0x1761b8,_0x3ee78d){var _0x286ce3={};var _0x2919d4={};var _0x25b3a0;var _0x3ef63f;return db['FaxQueue'][_0x6869('0x44')]({'where':{'id':_0x4ec2ca['params']['id']}})[_0x6869('0x1e')](handleEntityNotFound(_0x1761b8,null))[_0x6869('0x1e')](function(_0x1a7bfc){if(_0x1a7bfc){_0x25b3a0=_0x1a7bfc;_0x2919d4['model']=_[_0x6869('0x26')](db[_0x6869('0x49')][_0x6869('0x24')]);_0x2919d4[_0x6869('0x27')]=_['keys'](_0x4ec2ca[_0x6869('0x27')]);_0x2919d4[_0x6869('0x2a')]=_[_0x6869('0x2b')](_0x2919d4[_0x6869('0x25')],_0x2919d4[_0x6869('0x27')]);_0x286ce3[_0x6869('0x2c')]=_[_0x6869('0x2b')](_0x2919d4[_0x6869('0x25')],qs['fields'](_0x4ec2ca[_0x6869('0x27')][_0x6869('0x2d')]));_0x286ce3[_0x6869('0x2c')]=_0x286ce3[_0x6869('0x2c')][_0x6869('0x52')]?_0x286ce3['attributes']:_0x2919d4[_0x6869('0x25')];_0x286ce3[_0x6869('0x30')]=qs['sort'](_0x4ec2ca[_0x6869('0x27')][_0x6869('0x31')]);_0x286ce3[_0x6869('0x32')]=qs[_0x6869('0x2a')](_[_0x6869('0x33')](_0x4ec2ca['query'],_0x2919d4[_0x6869('0x2a')]));if(_0x4ec2ca['query'][_0x6869('0x37')]){_0x286ce3[_0x6869('0x32')]=_[_0x6869('0x36')](_0x286ce3[_0x6869('0x32')],{'$or':_[_0x6869('0x38')](_0x286ce3['attributes'],function(_0xf0f88){var _0x53b9da={};_0x53b9da[_0xf0f88]={'$like':'%'+_0x4ec2ca[_0x6869('0x27')]['filter']+'%'};return _0x53b9da;})});}_0x286ce3=_[_0x6869('0x36')]({},_0x286ce3,_0x4ec2ca['options']);return _0x25b3a0['getAgents'](_0x286ce3);}})[_0x6869('0x1e')](function(_0x40d9cd){if(_0x40d9cd){_0x3ef63f=_0x40d9cd[_0x6869('0x52')];if(!_0x4ec2ca[_0x6869('0x27')][_0x6869('0x2e')](_0x6869('0x2f'))){_0x286ce3['limit']=qs['limit'](_0x4ec2ca[_0x6869('0x27')]['limit']);_0x286ce3[_0x6869('0x17')]=qs[_0x6869('0x17')](_0x4ec2ca[_0x6869('0x27')][_0x6869('0x17')]);}return _0x25b3a0[_0x6869('0x62')](_0x286ce3);}})[_0x6869('0x1e')](function(_0x2a8061){if(_0x2a8061){return _0x2a8061?{'count':_0x3ef63f,'rows':_0x2a8061}:null;}})[_0x6869('0x1e')](respondWithResult(_0x1761b8,null))[_0x6869('0x3d')](handleError(_0x1761b8,null));};
\ No newline at end of file
index 89b60af..81d8a04 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3435=['emit','exports','events','../../mysqldb','FaxQueue','setMaxListeners','save','update'];(function(_0x278642,_0x1d5f0a){var _0x53755a=function(_0x484ebe){while(--_0x484ebe){_0x278642['push'](_0x278642['shift']());}};_0x53755a(++_0x1d5f0a);}(_0x3435,0xfa));var _0x5343=function(_0x1a0daa,_0x2a4634){_0x1a0daa=_0x1a0daa-0x0;var _0x1dbe15=_0x3435[_0x1a0daa];return _0x1dbe15;};'use strict';var EventEmitter=require(_0x5343('0x0'));var FaxQueue=require(_0x5343('0x1'))['db'][_0x5343('0x2')];var FaxQueueEvents=new EventEmitter();FaxQueueEvents[_0x5343('0x3')](0x0);var events={'afterCreate':_0x5343('0x4'),'afterUpdate':_0x5343('0x5'),'afterDestroy':'remove'};function emitEvent(_0x3f1d67){return function(_0x3ae07e,_0x578a24,_0x4ca9ba){FaxQueueEvents[_0x5343('0x6')](_0x3f1d67+':'+_0x3ae07e['id'],_0x3ae07e);FaxQueueEvents[_0x5343('0x6')](_0x3f1d67,_0x3ae07e);_0x4ca9ba(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];FaxQueue['hook'](e,emitEvent(event));}}module[_0x5343('0x7')]=FaxQueueEvents;
\ No newline at end of file
+var _0xca9e=['events','../../mysqldb','FaxQueue','setMaxListeners','save','update','remove','emit','hasOwnProperty','exports'];(function(_0x373d50,_0x4d0bc2){var _0x6e09bc=function(_0x247f10){while(--_0x247f10){_0x373d50['push'](_0x373d50['shift']());}};_0x6e09bc(++_0x4d0bc2);}(_0xca9e,0x136));var _0xeca9=function(_0x55382c,_0x4e7a0f){_0x55382c=_0x55382c-0x0;var _0x14b421=_0xca9e[_0x55382c];return _0x14b421;};'use strict';var EventEmitter=require(_0xeca9('0x0'));var FaxQueue=require(_0xeca9('0x1'))['db'][_0xeca9('0x2')];var FaxQueueEvents=new EventEmitter();FaxQueueEvents[_0xeca9('0x3')](0x0);var events={'afterCreate':_0xeca9('0x4'),'afterUpdate':_0xeca9('0x5'),'afterDestroy':_0xeca9('0x6')};function emitEvent(_0x2c6185){return function(_0x1b2864,_0x1e0a18,_0x3aba81){FaxQueueEvents[_0xeca9('0x7')](_0x2c6185+':'+_0x1b2864['id'],_0x1b2864);FaxQueueEvents[_0xeca9('0x7')](_0x2c6185,_0x1b2864);_0x3aba81(null);};}for(var e in events){if(events[_0xeca9('0x8')](e)){var event=events[e];FaxQueue['hook'](e,emitEvent(event));}}module[_0xeca9('0x9')]=FaxQueueEvents;
\ No newline at end of file
index 28a74e7..5da7229 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcef6=['./faxQueue.attributes','define','FaxQueue','util','../../config/logger','api','moment','request-promise'];(function(_0x2114b5,_0xde8c3e){var _0x3e11ab=function(_0x45c43e){while(--_0x45c43e){_0x2114b5['push'](_0x2114b5['shift']());}};_0x3e11ab(++_0xde8c3e);}(_0xcef6,0x93));var _0x6cef=function(_0x256684,_0x529c1e){_0x256684=_0x256684-0x0;var _0x37a0c9=_0xcef6[_0x256684];return _0x37a0c9;};'use strict';var _=require('lodash');var util=require(_0x6cef('0x0'));var logger=require(_0x6cef('0x1'))(_0x6cef('0x2'));var moment=require(_0x6cef('0x3'));var BPromise=require('bluebird');var rp=require(_0x6cef('0x4'));var attributes=require(_0x6cef('0x5'));module['exports']=function(_0x2361a4,_0xae34e2){return _0x2361a4[_0x6cef('0x6')](_0x6cef('0x7'),attributes,{'tableName':'fax_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1d95=['api','moment','bluebird','request-promise','./faxQueue.attributes','define','lodash','util','../../config/logger'];(function(_0x413aac,_0x5e2430){var _0x569b11=function(_0x52e060){while(--_0x52e060){_0x413aac['push'](_0x413aac['shift']());}};_0x569b11(++_0x5e2430);}(_0x1d95,0x19b));var _0x51d9=function(_0x117bed,_0xc76fe3){_0x117bed=_0x117bed-0x0;var _0x32487e=_0x1d95[_0x117bed];return _0x32487e;};'use strict';var _=require(_0x51d9('0x0'));var util=require(_0x51d9('0x1'));var logger=require(_0x51d9('0x2'))(_0x51d9('0x3'));var moment=require(_0x51d9('0x4'));var BPromise=require(_0x51d9('0x5'));var rp=require(_0x51d9('0x6'));var attributes=require(_0x51d9('0x7'));module['exports']=function(_0x390cf0,_0x38d54e){return _0x390cf0[_0x51d9('0x8')]('FaxQueue',attributes,{'tableName':'fax_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4c6858f..36db18f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0e75=['rpc','jayson/promise','client','http','./faxQueue.socket','register','request','then','FaxQueue,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','info','result','catch','FaxQueue','findAll','raw','options','limit','map','attributes','include','model','GetFaxQueue','ShowFaxQueue','find','where','lodash','moment','bluebird','randomstring','../../config/utils','../../config/logger'];(function(_0x2486b8,_0x3b819c){var _0x44b2be=function(_0x482386){while(--_0x482386){_0x2486b8['push'](_0x2486b8['shift']());}};_0x44b2be(++_0x3b819c);}(_0x0e75,0x1b6));var _0x50e7=function(_0xbf3b47,_0x3daf6a){_0xbf3b47=_0xbf3b47-0x0;var _0x5d1247=_0x0e75[_0xbf3b47];return _0x5d1247;};'use strict';var _=require(_0x50e7('0x0'));var util=require('util');var moment=require(_0x50e7('0x1'));var BPromise=require(_0x50e7('0x2'));var rs=require(_0x50e7('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x50e7('0x4'));var logger=require(_0x50e7('0x5'))(_0x50e7('0x6'));var config=require('../../config/environment');var jayson=require(_0x50e7('0x7'));var client=jayson[_0x50e7('0x8')][_0x50e7('0x9')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':'localhost','port':0x18eb});require(_0x50e7('0xa'))[_0x50e7('0xb')](socket);function respondWithRpcPromise(_0x462dbd,_0x435ba4,_0x1e5a56){return new BPromise(function(_0x475fc0,_0x5ea4f4){return client[_0x50e7('0xc')](_0x462dbd,_0x1e5a56)[_0x50e7('0xd')](function(_0x1f6f06){logger['info'](_0x50e7('0xe'),_0x435ba4,'request\x20sent');logger[_0x50e7('0xf')]('FaxQueue,\x20%s,\x20%s,\x20%s',_0x435ba4,_0x50e7('0x10'),JSON[_0x50e7('0x11')](_0x1f6f06));if(_0x1f6f06[_0x50e7('0x12')]){if(_0x1f6f06[_0x50e7('0x12')][_0x50e7('0x13')]===0x1f4){logger[_0x50e7('0x12')](_0x50e7('0xe'),_0x435ba4,_0x1f6f06[_0x50e7('0x12')]['message']);return _0x5ea4f4(_0x1f6f06[_0x50e7('0x12')][_0x50e7('0x14')]);}logger[_0x50e7('0x12')]('FaxQueue,\x20%s,\x20%s',_0x435ba4,_0x1f6f06[_0x50e7('0x12')][_0x50e7('0x14')]);return _0x475fc0(_0x1f6f06[_0x50e7('0x12')]['message']);}else{logger[_0x50e7('0x15')](_0x50e7('0xe'),_0x435ba4,'request\x20sent');_0x475fc0(_0x1f6f06[_0x50e7('0x16')][_0x50e7('0x14')]);}})[_0x50e7('0x17')](function(_0x1d4fb8){logger[_0x50e7('0x12')](_0x50e7('0xe'),_0x435ba4,_0x1d4fb8);_0x5ea4f4(_0x1d4fb8);});});}exports['GetFaxQueue']=function(_0x8d5bf1){var _0x183d4a=this;return new Promise(function(_0x36ea24,_0x4f502f){return db[_0x50e7('0x18')][_0x50e7('0x19')]({'raw':_0x8d5bf1['options']?_0x8d5bf1['options'][_0x50e7('0x1a')]===undefined?!![]:![]:!![],'where':_0x8d5bf1[_0x50e7('0x1b')]?_0x8d5bf1[_0x50e7('0x1b')]['where']||null:null,'attributes':_0x8d5bf1[_0x50e7('0x1b')]?_0x8d5bf1[_0x50e7('0x1b')]['attributes']||null:null,'limit':_0x8d5bf1['options']?_0x8d5bf1[_0x50e7('0x1b')][_0x50e7('0x1c')]||null:null,'include':_0x8d5bf1[_0x50e7('0x1b')]?_0x8d5bf1['options']['include']?_[_0x50e7('0x1d')](_0x8d5bf1[_0x50e7('0x1b')]['include'],function(_0x33733c){return{'model':db[_0x33733c['model']],'as':_0x33733c['as'],'attributes':_0x33733c[_0x50e7('0x1e')],'include':_0x33733c['include']?_[_0x50e7('0x1d')](_0x33733c[_0x50e7('0x1f')],function(_0x5c8d5d){return{'model':db[_0x5c8d5d[_0x50e7('0x20')]],'as':_0x5c8d5d['as'],'attributes':_0x5c8d5d[_0x50e7('0x1e')],'include':_0x5c8d5d['include']?_[_0x50e7('0x1d')](_0x5c8d5d[_0x50e7('0x1f')],function(_0x2a4db9){return{'model':db[_0x2a4db9['model']],'as':_0x2a4db9['as'],'attributes':_0x2a4db9[_0x50e7('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x50e7('0xd')](function(_0xf3a38c){logger[_0x50e7('0x15')](_0x50e7('0x21'),_0x8d5bf1);logger[_0x50e7('0xf')](_0x50e7('0x21'),_0x8d5bf1,JSON[_0x50e7('0x11')](_0xf3a38c));_0x36ea24(_0xf3a38c);})[_0x50e7('0x17')](function(_0x2ded07){logger['error'](_0x50e7('0x21'),_0x2ded07[_0x50e7('0x14')],_0x8d5bf1);_0x4f502f(_0x183d4a[_0x50e7('0x12')](0x1f4,_0x2ded07[_0x50e7('0x14')]));});});};exports[_0x50e7('0x22')]=function(_0x113449){var _0x51ed5e=this;return new Promise(function(_0x1f661a,_0x407364){return db[_0x50e7('0x18')][_0x50e7('0x23')]({'raw':_0x113449[_0x50e7('0x1b')]?_0x113449['options'][_0x50e7('0x1a')]===undefined?!![]:![]:!![],'where':_0x113449['options']?_0x113449[_0x50e7('0x1b')][_0x50e7('0x24')]||null:null,'attributes':_0x113449['options']?_0x113449[_0x50e7('0x1b')][_0x50e7('0x1e')]||null:null,'include':_0x113449[_0x50e7('0x1b')]?_0x113449['options'][_0x50e7('0x1f')]?_[_0x50e7('0x1d')](_0x113449['options'][_0x50e7('0x1f')],function(_0x239bef){return{'model':db[_0x239bef[_0x50e7('0x20')]],'as':_0x239bef['as'],'attributes':_0x239bef[_0x50e7('0x1e')],'include':_0x239bef['include']?_['map'](_0x239bef[_0x50e7('0x1f')],function(_0x39651d){return{'model':db[_0x39651d[_0x50e7('0x20')]],'as':_0x39651d['as'],'attributes':_0x39651d[_0x50e7('0x1e')],'include':_0x39651d[_0x50e7('0x1f')]?_[_0x50e7('0x1d')](_0x39651d['include'],function(_0xad9e38){return{'model':db[_0xad9e38[_0x50e7('0x20')]],'as':_0xad9e38['as'],'attributes':_0xad9e38[_0x50e7('0x1e')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x5d72d8){logger['info'](_0x50e7('0x22'),_0x113449);logger['debug'](_0x50e7('0x22'),_0x113449,JSON[_0x50e7('0x11')](_0x5d72d8));_0x1f661a(_0x5d72d8);})[_0x50e7('0x17')](function(_0x3eb8cc){logger[_0x50e7('0x12')]('ShowFaxQueue',_0x3eb8cc['message'],_0x113449);_0x407364(_0x51ed5e[_0x50e7('0x12')](0x1f4,_0x3eb8cc[_0x50e7('0x14')]));});});};
\ No newline at end of file
+var _0xb3eb=['moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','localhost','./faxQueue.socket','request','then','info','request\x20sent','debug','FaxQueue,\x20%s,\x20%s,\x20%s','error','message','FaxQueue,\x20%s,\x20%s','catch','GetFaxQueue','FaxQueue','findAll','options','raw','where','attributes','limit','include','map','model','stringify','ShowFaxQueue','find','lodash','util'];(function(_0x3f01dd,_0x128e0f){var _0x4bae40=function(_0x35a022){while(--_0x35a022){_0x3f01dd['push'](_0x3f01dd['shift']());}};_0x4bae40(++_0x128e0f);}(_0xb3eb,0x96));var _0xbb3e=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xb3eb[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xbb3e('0x0'));var util=require(_0xbb3e('0x1'));var moment=require(_0xbb3e('0x2'));var BPromise=require(_0xbb3e('0x3'));var rs=require(_0xbb3e('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xbb3e('0x5'));var logger=require(_0xbb3e('0x6'))(_0xbb3e('0x7'));var config=require(_0xbb3e('0x8'));var jayson=require(_0xbb3e('0x9'));var client=jayson[_0xbb3e('0xa')][_0xbb3e('0xb')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0xbb3e('0xc'),'port':0x18eb});require(_0xbb3e('0xd'))['register'](socket);function respondWithRpcPromise(_0x55643e,_0x220534,_0xb60947){return new BPromise(function(_0x456162,_0x383290){return client[_0xbb3e('0xe')](_0x55643e,_0xb60947)[_0xbb3e('0xf')](function(_0x7454c4){logger[_0xbb3e('0x10')]('FaxQueue,\x20%s,\x20%s',_0x220534,_0xbb3e('0x11'));logger[_0xbb3e('0x12')](_0xbb3e('0x13'),_0x220534,_0xbb3e('0x11'),JSON['stringify'](_0x7454c4));if(_0x7454c4[_0xbb3e('0x14')]){if(_0x7454c4[_0xbb3e('0x14')]['code']===0x1f4){logger[_0xbb3e('0x14')]('FaxQueue,\x20%s,\x20%s',_0x220534,_0x7454c4[_0xbb3e('0x14')][_0xbb3e('0x15')]);return _0x383290(_0x7454c4[_0xbb3e('0x14')]['message']);}logger['error'](_0xbb3e('0x16'),_0x220534,_0x7454c4[_0xbb3e('0x14')]['message']);return _0x456162(_0x7454c4[_0xbb3e('0x14')][_0xbb3e('0x15')]);}else{logger[_0xbb3e('0x10')](_0xbb3e('0x16'),_0x220534,_0xbb3e('0x11'));_0x456162(_0x7454c4['result'][_0xbb3e('0x15')]);}})[_0xbb3e('0x17')](function(_0x4d9fed){logger[_0xbb3e('0x14')](_0xbb3e('0x16'),_0x220534,_0x4d9fed);_0x383290(_0x4d9fed);});});}exports[_0xbb3e('0x18')]=function(_0x3a7dd1){var _0x208c8a=this;return new Promise(function(_0x55cd58,_0x18e757){return db[_0xbb3e('0x19')][_0xbb3e('0x1a')]({'raw':_0x3a7dd1[_0xbb3e('0x1b')]?_0x3a7dd1['options'][_0xbb3e('0x1c')]===undefined?!![]:![]:!![],'where':_0x3a7dd1[_0xbb3e('0x1b')]?_0x3a7dd1[_0xbb3e('0x1b')][_0xbb3e('0x1d')]||null:null,'attributes':_0x3a7dd1['options']?_0x3a7dd1[_0xbb3e('0x1b')][_0xbb3e('0x1e')]||null:null,'limit':_0x3a7dd1[_0xbb3e('0x1b')]?_0x3a7dd1['options'][_0xbb3e('0x1f')]||null:null,'include':_0x3a7dd1[_0xbb3e('0x1b')]?_0x3a7dd1['options'][_0xbb3e('0x20')]?_[_0xbb3e('0x21')](_0x3a7dd1[_0xbb3e('0x1b')][_0xbb3e('0x20')],function(_0x44b687){return{'model':db[_0x44b687[_0xbb3e('0x22')]],'as':_0x44b687['as'],'attributes':_0x44b687['attributes'],'include':_0x44b687['include']?_['map'](_0x44b687[_0xbb3e('0x20')],function(_0x401ba3){return{'model':db[_0x401ba3[_0xbb3e('0x22')]],'as':_0x401ba3['as'],'attributes':_0x401ba3[_0xbb3e('0x1e')],'include':_0x401ba3['include']?_['map'](_0x401ba3['include'],function(_0x35e8f5){return{'model':db[_0x35e8f5[_0xbb3e('0x22')]],'as':_0x35e8f5['as'],'attributes':_0x35e8f5[_0xbb3e('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xbb3e('0xf')](function(_0x321e82){logger[_0xbb3e('0x10')](_0xbb3e('0x18'),_0x3a7dd1);logger[_0xbb3e('0x12')](_0xbb3e('0x18'),_0x3a7dd1,JSON[_0xbb3e('0x23')](_0x321e82));_0x55cd58(_0x321e82);})['catch'](function(_0x371762){logger['error']('GetFaxQueue',_0x371762[_0xbb3e('0x15')],_0x3a7dd1);_0x18e757(_0x208c8a['error'](0x1f4,_0x371762['message']));});});};exports[_0xbb3e('0x24')]=function(_0x2ee1d8){var _0x169279=this;return new Promise(function(_0x5241c2,_0x512f49){return db[_0xbb3e('0x19')][_0xbb3e('0x25')]({'raw':_0x2ee1d8['options']?_0x2ee1d8[_0xbb3e('0x1b')][_0xbb3e('0x1c')]===undefined?!![]:![]:!![],'where':_0x2ee1d8[_0xbb3e('0x1b')]?_0x2ee1d8[_0xbb3e('0x1b')][_0xbb3e('0x1d')]||null:null,'attributes':_0x2ee1d8['options']?_0x2ee1d8[_0xbb3e('0x1b')][_0xbb3e('0x1e')]||null:null,'include':_0x2ee1d8[_0xbb3e('0x1b')]?_0x2ee1d8[_0xbb3e('0x1b')]['include']?_['map'](_0x2ee1d8['options']['include'],function(_0x52ab53){return{'model':db[_0x52ab53[_0xbb3e('0x22')]],'as':_0x52ab53['as'],'attributes':_0x52ab53['attributes'],'include':_0x52ab53['include']?_[_0xbb3e('0x21')](_0x52ab53[_0xbb3e('0x20')],function(_0x5a7172){return{'model':db[_0x5a7172[_0xbb3e('0x22')]],'as':_0x5a7172['as'],'attributes':_0x5a7172[_0xbb3e('0x1e')],'include':_0x5a7172[_0xbb3e('0x20')]?_[_0xbb3e('0x21')](_0x5a7172[_0xbb3e('0x20')],function(_0x5162dd){return{'model':db[_0x5162dd[_0xbb3e('0x22')]],'as':_0x5162dd['as'],'attributes':_0x5162dd['attributes']};}):[]};}):[]};}):[]:[]})[_0xbb3e('0xf')](function(_0x581b46){logger[_0xbb3e('0x10')](_0xbb3e('0x24'),_0x2ee1d8);logger[_0xbb3e('0x12')]('ShowFaxQueue',_0x2ee1d8,JSON[_0xbb3e('0x23')](_0x581b46));_0x5241c2(_0x581b46);})['catch'](function(_0x20c0eb){logger[_0xbb3e('0x14')](_0xbb3e('0x24'),_0x20c0eb[_0xbb3e('0x15')],_0x2ee1d8);_0x512f49(_0x169279[_0xbb3e('0x14')](0x1f4,_0x20c0eb['message']));});});};
\ No newline at end of file
index cd16b7d..346ee0c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee20=['save','remove','emit','removeListener','register','length','faxQueue:','./faxQueue.events'];(function(_0x17b41c,_0x2d3ab6){var _0x1d32e8=function(_0x30f75a){while(--_0x30f75a){_0x17b41c['push'](_0x17b41c['shift']());}};_0x1d32e8(++_0x2d3ab6);}(_0xee20,0x1af));var _0x0ee2=function(_0x4167c7,_0x424e25){_0x4167c7=_0x4167c7-0x0;var _0x59dc45=_0xee20[_0x4167c7];return _0x59dc45;};'use strict';var FaxQueueEvents=require(_0x0ee2('0x0'));var events=[_0x0ee2('0x1'),_0x0ee2('0x2'),'update'];function createListener(_0x447098,_0x3f6d34){return function(_0x249da8){_0x3f6d34[_0x0ee2('0x3')](_0x447098,_0x249da8);};}function removeListener(_0x21088d,_0x627b91){return function(){FaxQueueEvents[_0x0ee2('0x4')](_0x21088d,_0x627b91);};}exports[_0x0ee2('0x5')]=function(_0x263ec3){for(var _0x5468c3=0x0,_0x38ce34=events[_0x0ee2('0x6')];_0x5468c3<_0x38ce34;_0x5468c3++){var _0x30884b=events[_0x5468c3];var _0x2f8143=createListener(_0x0ee2('0x7')+_0x30884b,_0x263ec3);FaxQueueEvents['on'](_0x30884b,_0x2f8143);}};
\ No newline at end of file
+var _0x27d0=['./faxQueue.events','remove','removeListener','register','length','faxQueue:'];(function(_0x1fcf1b,_0x214549){var _0x5d2952=function(_0x3331b7){while(--_0x3331b7){_0x1fcf1b['push'](_0x1fcf1b['shift']());}};_0x5d2952(++_0x214549);}(_0x27d0,0xae));var _0x027d=function(_0x50f771,_0x6cb0f){_0x50f771=_0x50f771-0x0;var _0x37e285=_0x27d0[_0x50f771];return _0x37e285;};'use strict';var FaxQueueEvents=require(_0x027d('0x0'));var events=['save',_0x027d('0x1'),'update'];function createListener(_0x1483dc,_0x1e0201){return function(_0x56b1b8){_0x1e0201['emit'](_0x1483dc,_0x56b1b8);};}function removeListener(_0x174038,_0x5c5ee1){return function(){FaxQueueEvents[_0x027d('0x2')](_0x174038,_0x5c5ee1);};}exports[_0x027d('0x3')]=function(_0x3da681){for(var _0x21682e=0x0,_0x51d25c=events[_0x027d('0x4')];_0x21682e<_0x51d25c;_0x21682e++){var _0x434277=events[_0x21682e];var _0x54c81d=createListener(_0x027d('0x5')+_0x434277,_0x3da681);FaxQueueEvents['on'](_0x434277,_0x54c81d);}};
\ No newline at end of file
index d7757e2..a74dbff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdd6e=['express','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxQueue.controller','get','/describe','describe','/:id','isAuthenticated','show','getMembers','/:id/teams','getTeams','post','create','addTeams','/:id/users','addAgents','put','update','delete','destroy','removeAgents','exports','multer','util','path'];(function(_0x16d6a2,_0x266958){var _0x681283=function(_0xb758fd){while(--_0xb758fd){_0x16d6a2['push'](_0x16d6a2['shift']());}};_0x681283(++_0x266958);}(_0xdd6e,0xa5));var _0xedd6=function(_0x895f73,_0x8680a1){_0x895f73=_0x895f73-0x0;var _0x554b03=_0xdd6e[_0x895f73];return _0x554b03;};'use strict';var multer=require(_0xedd6('0x0'));var util=require(_0xedd6('0x1'));var path=require(_0xedd6('0x2'));var express=require(_0xedd6('0x3'));var router=express['Router']();var auth=require(_0xedd6('0x4'));var interaction=require(_0xedd6('0x5'));var config=require(_0xedd6('0x6'));var controller=require(_0xedd6('0x7'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0xedd6('0x8')](_0xedd6('0x9'),auth['isAuthenticated'](),controller[_0xedd6('0xa')]);router[_0xedd6('0x8')](_0xedd6('0xb'),auth[_0xedd6('0xc')](),controller[_0xedd6('0xd')]);router['get']('/:id/members',auth[_0xedd6('0xc')](),controller[_0xedd6('0xe')]);router['get'](_0xedd6('0xf'),auth[_0xedd6('0xc')](),controller[_0xedd6('0x10')]);router[_0xedd6('0x8')]('/:id/users',auth[_0xedd6('0xc')](),controller['getAgents']);router[_0xedd6('0x11')]('/',auth[_0xedd6('0xc')](),controller[_0xedd6('0x12')]);router[_0xedd6('0x11')]('/:id/teams',auth[_0xedd6('0xc')](),controller[_0xedd6('0x13')]);router[_0xedd6('0x11')](_0xedd6('0x14'),auth[_0xedd6('0xc')](),controller[_0xedd6('0x15')]);router[_0xedd6('0x16')](_0xedd6('0xb'),auth[_0xedd6('0xc')](),controller[_0xedd6('0x17')]);router[_0xedd6('0x18')](_0xedd6('0xb'),auth['isAuthenticated'](),controller[_0xedd6('0x19')]);router[_0xedd6('0x18')](_0xedd6('0xf'),auth[_0xedd6('0xc')](),controller['removeTeams']);router['delete'](_0xedd6('0x14'),auth['isAuthenticated'](),controller[_0xedd6('0x1a')]);module[_0xedd6('0x1b')]=router;
\ No newline at end of file
+var _0xc113=['addTeams','put','update','delete','removeTeams','removeAgents','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxQueue.controller','isAuthenticated','index','/describe','describe','/:id','/:id/members','get','/:id/teams','/:id/users','getAgents','post','create'];(function(_0x441cf3,_0x502605){var _0x2d3efb=function(_0x147915){while(--_0x147915){_0x441cf3['push'](_0x441cf3['shift']());}};_0x2d3efb(++_0x502605);}(_0xc113,0x1ab));var _0x3c11=function(_0x1f7c01,_0x5843f9){_0x1f7c01=_0x1f7c01-0x0;var _0x143b5a=_0xc113[_0x1f7c01];return _0x143b5a;};'use strict';var multer=require(_0x3c11('0x0'));var util=require(_0x3c11('0x1'));var path=require(_0x3c11('0x2'));var express=require(_0x3c11('0x3'));var router=express[_0x3c11('0x4')]();var auth=require(_0x3c11('0x5'));var interaction=require(_0x3c11('0x6'));var config=require(_0x3c11('0x7'));var controller=require(_0x3c11('0x8'));router['get']('/',auth[_0x3c11('0x9')](),controller[_0x3c11('0xa')]);router['get'](_0x3c11('0xb'),auth[_0x3c11('0x9')](),controller[_0x3c11('0xc')]);router['get'](_0x3c11('0xd'),auth['isAuthenticated'](),controller['show']);router['get'](_0x3c11('0xe'),auth[_0x3c11('0x9')](),controller['getMembers']);router[_0x3c11('0xf')](_0x3c11('0x10'),auth[_0x3c11('0x9')](),controller['getTeams']);router[_0x3c11('0xf')](_0x3c11('0x11'),auth[_0x3c11('0x9')](),controller[_0x3c11('0x12')]);router[_0x3c11('0x13')]('/',auth['isAuthenticated'](),controller[_0x3c11('0x14')]);router[_0x3c11('0x13')]('/:id/teams',auth[_0x3c11('0x9')](),controller[_0x3c11('0x15')]);router[_0x3c11('0x13')](_0x3c11('0x11'),auth[_0x3c11('0x9')](),controller['addAgents']);router[_0x3c11('0x16')](_0x3c11('0xd'),auth[_0x3c11('0x9')](),controller[_0x3c11('0x17')]);router[_0x3c11('0x18')]('/:id',auth['isAuthenticated'](),controller['destroy']);router[_0x3c11('0x18')](_0x3c11('0x10'),auth[_0x3c11('0x9')](),controller[_0x3c11('0x19')]);router[_0x3c11('0x18')](_0x3c11('0x11'),auth[_0x3c11('0x9')](),controller[_0x3c11('0x1a')]);module[_0x3c11('0x1b')]=router;
\ No newline at end of file
index 6ec0d1b..e0810f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1d70=['STRING','DATE','sequelize','exports'];(function(_0x3093aa,_0x17aa54){var _0x5f3510=function(_0x1cfad5){while(--_0x1cfad5){_0x3093aa['push'](_0x3093aa['shift']());}};_0x5f3510(++_0x17aa54);}(_0x1d70,0x136));var _0x01d7=function(_0xe2f91f,_0x236039){_0xe2f91f=_0xe2f91f-0x0;var _0x3dc520=_0x1d70[_0xe2f91f];return _0x3dc520;};'use strict';var moment=require('moment');var Sequelize=require(_0x01d7('0x0'));module[_0x01d7('0x1')]={'uniqueid':{'type':Sequelize[_0x01d7('0x2')],'allowNull':![]},'from':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize[_0x01d7('0x3')]},'leaveAt':{'type':Sequelize[_0x01d7('0x3')]},'acceptAt':{'type':Sequelize[_0x01d7('0x3')]},'exitAt':{'type':Sequelize[_0x01d7('0x3')]},'reason':{'type':Sequelize[_0x01d7('0x2')]}};
\ No newline at end of file
+var _0x4f47=['DATE','sequelize','STRING'];(function(_0x300e9d,_0x6790c7){var _0x63b783=function(_0x29d15f){while(--_0x29d15f){_0x300e9d['push'](_0x300e9d['shift']());}};_0x63b783(++_0x6790c7);}(_0x4f47,0x1bd));var _0x74f4=function(_0x3f1a89,_0x17ce94){_0x3f1a89=_0x3f1a89-0x0;var _0x3efe92=_0x4f47[_0x3f1a89];return _0x3efe92;};'use strict';var moment=require('moment');var Sequelize=require(_0x74f4('0x0'));module['exports']={'uniqueid':{'type':Sequelize[_0x74f4('0x1')],'allowNull':![]},'from':{'type':Sequelize[_0x74f4('0x1')]},'joinAt':{'type':Sequelize[_0x74f4('0x2')]},'leaveAt':{'type':Sequelize[_0x74f4('0x2')]},'acceptAt':{'type':Sequelize[_0x74f4('0x2')]},'exitAt':{'type':Sequelize[_0x74f4('0x2')]},'reason':{'type':Sequelize[_0x74f4('0x1')]}};
\ No newline at end of file
index dba1c53..8cae8ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6a82=['save','update','destroy','end','error','stack','name','send','index','rawAttributes','model','keys','query','dateEnd','dateStart','intersection','attributes','length','hasOwnProperty','nolimit','limit','sort','where','filters','pick','add','day','merge','filter','map','options','then','include','FaxQueueReport','findAll','rows','catch','show','params','fields','create','body','find','describe','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../mysqldb','status','json','count','offset','Content-Range','apply','reject'];(function(_0x10f384,_0x46f0cd){var _0x2a1beb=function(_0x39ddd2){while(--_0x39ddd2){_0x10f384['push'](_0x10f384['shift']());}};_0x2a1beb(++_0x46f0cd);}(_0x6a82,0xfe));var _0x26a8=function(_0x402ed8,_0x20b28e){_0x402ed8=_0x402ed8-0x0;var _0x3a9fb7=_0x6a82[_0x402ed8];return _0x3a9fb7;};'use strict';var jsonpatch=require(_0x26a8('0x0'));var rp=require(_0x26a8('0x1'));var moment=require(_0x26a8('0x2'));var BPromise=require(_0x26a8('0x3'));var Mustache=require(_0x26a8('0x4'));var util=require(_0x26a8('0x5'));var path=require(_0x26a8('0x6'));var sox=require('sox');var csv=require(_0x26a8('0x7'));var ejs=require(_0x26a8('0x8'));var fs=require('fs');var _=require(_0x26a8('0x9'));var squel=require(_0x26a8('0xa'));var crypto=require(_0x26a8('0xb'));var jsforce=require(_0x26a8('0xc'));var deskjs=require(_0x26a8('0xd'));var toCsv=require('to-csv');var querystring=require(_0x26a8('0xe'));var Papa=require(_0x26a8('0xf'));var qs=require('../../components/parsers/qs');var logger=require(_0x26a8('0x10'))(_0x26a8('0x11'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x26a8('0x12'))['db'];function respondWithStatusCode(_0x5beb9a,_0x243ec1){_0x243ec1=_0x243ec1||0xcc;return function(_0x1f13ed){if(_0x1f13ed){return _0x5beb9a['sendStatus'](_0x243ec1);}return _0x5beb9a[_0x26a8('0x13')](_0x243ec1)['end']();};}function respondWithResult(_0x827f44,_0x2eab18){_0x2eab18=_0x2eab18||0xc8;return function(_0x1ed728){if(_0x1ed728){return _0x827f44['status'](_0x2eab18)[_0x26a8('0x14')](_0x1ed728);}};}function respondWithFilteredResult(_0xe2ef85,_0x84f127){return function(_0x2d35e8){if(_0x2d35e8){var _0xf2fbf6=_0x2d35e8[_0x26a8('0x15')],_0x39195c=_0x84f127[_0x26a8('0x16')],_0x3c5c91=_0x84f127['offset']+_0x84f127['limit'],_0x35127c;if(_0x3c5c91>=_0xf2fbf6){_0x3c5c91=_0xf2fbf6;_0x35127c=0xc8;}else{_0x35127c=0xce;}_0xe2ef85[_0x26a8('0x13')](_0x35127c);return _0xe2ef85['set'](_0x26a8('0x17'),_0x39195c+'-'+_0x3c5c91+'/'+_0xf2fbf6)[_0x26a8('0x14')](_0x2d35e8);}return null;};}function patchUpdates(_0x5ec106){return function(_0x5d8c57){try{jsonpatch[_0x26a8('0x18')](_0x5d8c57,_0x5ec106,!![]);}catch(_0x164a80){return BPromise[_0x26a8('0x19')](_0x164a80);}return _0x5d8c57[_0x26a8('0x1a')]();};}function saveUpdates(_0x1a1c3a,_0x25c843){return function(_0x4ea74e){if(_0x4ea74e){return _0x4ea74e[_0x26a8('0x1b')](_0x1a1c3a)['then'](function(_0x176d92){return _0x176d92;});}return null;};}function removeEntity(_0x53c297,_0xabba0b){return function(_0x3919b7){if(_0x3919b7){return _0x3919b7[_0x26a8('0x1c')]()['then'](function(){_0x53c297[_0x26a8('0x13')](0xcc)[_0x26a8('0x1d')]();});}};}function handleEntityNotFound(_0x1d6aa9,_0x303cd3){return function(_0x154cd4){if(!_0x154cd4){_0x1d6aa9['sendStatus'](0x194);}return _0x154cd4;};}function handleError(_0x292768,_0x5e4f4b){_0x5e4f4b=_0x5e4f4b||0x1f4;return function(_0x30338b){logger[_0x26a8('0x1e')](_0x30338b[_0x26a8('0x1f')]);if(_0x30338b[_0x26a8('0x20')]){delete _0x30338b['name'];}_0x292768[_0x26a8('0x13')](_0x5e4f4b)[_0x26a8('0x21')](_0x30338b);};}exports[_0x26a8('0x22')]=function(_0x44fbc1,_0x43bd14){var _0x5de3d8={},_0x173313={},_0x47588b={'count':0x0,'rows':[]};var _0x49708b=db['FaxQueueReport'][_0x26a8('0x23')];_0x173313[_0x26a8('0x24')]=_[_0x26a8('0x25')](_0x49708b);var _0x399428={'dateStart':_0x44fbc1[_0x26a8('0x26')]['dateStart'],'dateEnd':_0x44fbc1[_0x26a8('0x26')][_0x26a8('0x27')]};delete _0x44fbc1['query'][_0x26a8('0x28')];delete _0x44fbc1[_0x26a8('0x26')]['dateEnd'];_0x173313[_0x26a8('0x26')]=_[_0x26a8('0x25')](_0x44fbc1[_0x26a8('0x26')]);_0x173313['filters']=_[_0x26a8('0x29')](_0x173313[_0x26a8('0x24')],_0x173313[_0x26a8('0x26')]);_0x5de3d8['attributes']=_[_0x26a8('0x29')](_0x173313[_0x26a8('0x24')],qs['fields'](_0x44fbc1[_0x26a8('0x26')]['fields']));_0x5de3d8[_0x26a8('0x2a')]=_0x5de3d8[_0x26a8('0x2a')][_0x26a8('0x2b')]?_0x5de3d8['attributes']:_0x173313[_0x26a8('0x24')];if(!_0x44fbc1[_0x26a8('0x26')][_0x26a8('0x2c')](_0x26a8('0x2d'))){_0x5de3d8[_0x26a8('0x2e')]=qs['limit'](_0x44fbc1['query'][_0x26a8('0x2e')]);_0x5de3d8[_0x26a8('0x16')]=qs['offset'](_0x44fbc1[_0x26a8('0x26')][_0x26a8('0x16')]);}_0x5de3d8['order']=qs['sort'](_0x44fbc1[_0x26a8('0x26')][_0x26a8('0x2f')]);_0x5de3d8[_0x26a8('0x30')]=qs[_0x26a8('0x31')](_[_0x26a8('0x32')](_0x44fbc1[_0x26a8('0x26')],_0x173313[_0x26a8('0x31')]));if(_0x399428['dateStart']){if(_0x399428[_0x26a8('0x27')]){_0x399428['dateEnd']=moment(_0x399428[_0x26a8('0x27')])[_0x26a8('0x33')](0x1,_0x26a8('0x34'));}else{_0x399428['dateEnd']=moment(_0x399428[_0x26a8('0x28')])['add'](0x1,'day');}_[_0x26a8('0x35')](_0x5de3d8[_0x26a8('0x30')],{'createdAt':{'$gte':_0x399428['dateStart'],'$lte':_0x399428[_0x26a8('0x27')]}});}if(_0x44fbc1[_0x26a8('0x26')][_0x26a8('0x36')]){_0x5de3d8['where']=_[_0x26a8('0x35')](_0x5de3d8[_0x26a8('0x30')],{'$or':_[_0x26a8('0x37')](_0x5de3d8[_0x26a8('0x2a')],function(_0x2ff71d){var _0x4b5a15={};_0x4b5a15[_0x2ff71d]={'$like':'%'+_0x44fbc1[_0x26a8('0x26')][_0x26a8('0x36')]+'%'};return _0x4b5a15;})});}_0x5de3d8=_[_0x26a8('0x35')]({},_0x5de3d8,_0x44fbc1[_0x26a8('0x38')]);var _0x7bb3ee={'where':_0x5de3d8[_0x26a8('0x30')]};return db['FaxQueueReport'][_0x26a8('0x15')](_0x7bb3ee)[_0x26a8('0x39')](function(_0x33fd85){_0x47588b[_0x26a8('0x15')]=_0x33fd85;if(_0x44fbc1[_0x26a8('0x26')]['includeAll']){_0x5de3d8[_0x26a8('0x3a')]=[{'all':!![]}];}return db[_0x26a8('0x3b')][_0x26a8('0x3c')](_0x5de3d8);})[_0x26a8('0x39')](function(_0x14e850){_0x47588b[_0x26a8('0x3d')]=_0x14e850;return _0x47588b;})[_0x26a8('0x39')](respondWithFilteredResult(_0x43bd14,_0x5de3d8))[_0x26a8('0x3e')](handleError(_0x43bd14,null));};exports[_0x26a8('0x3f')]=function(_0x266db8,_0x3f45a6){var _0x310de4={'raw':!![],'where':{'id':_0x266db8[_0x26a8('0x40')]['id']}},_0x1f5e4d={};_0x1f5e4d[_0x26a8('0x24')]=_[_0x26a8('0x25')](db['FaxQueueReport']['rawAttributes']);_0x1f5e4d['query']=_[_0x26a8('0x25')](_0x266db8['query']);_0x1f5e4d[_0x26a8('0x31')]=_[_0x26a8('0x29')](_0x1f5e4d[_0x26a8('0x24')],_0x1f5e4d[_0x26a8('0x26')]);_0x310de4[_0x26a8('0x2a')]=_[_0x26a8('0x29')](_0x1f5e4d['model'],qs['fields'](_0x266db8[_0x26a8('0x26')][_0x26a8('0x41')]));_0x310de4[_0x26a8('0x2a')]=_0x310de4['attributes']['length']?_0x310de4[_0x26a8('0x2a')]:_0x1f5e4d[_0x26a8('0x24')];if(_0x266db8['query']['includeAll']){_0x310de4[_0x26a8('0x3a')]=[{'all':!![]}];}_0x310de4=_[_0x26a8('0x35')]({},_0x310de4,_0x266db8[_0x26a8('0x38')]);return db[_0x26a8('0x3b')]['find'](_0x310de4)[_0x26a8('0x39')](handleEntityNotFound(_0x3f45a6,null))[_0x26a8('0x39')](respondWithResult(_0x3f45a6,null))[_0x26a8('0x3e')](handleError(_0x3f45a6,null));};exports[_0x26a8('0x42')]=function(_0x2053da,_0x18a3d1){return db['FaxQueueReport'][_0x26a8('0x42')](_0x2053da[_0x26a8('0x43')],{})[_0x26a8('0x39')](respondWithResult(_0x18a3d1,0xc9))['catch'](handleError(_0x18a3d1,null));};exports['update']=function(_0x5161b6,_0x1b9efd){if(_0x5161b6[_0x26a8('0x43')]['id']){delete _0x5161b6[_0x26a8('0x43')]['id'];}return db[_0x26a8('0x3b')][_0x26a8('0x44')]({'where':{'id':_0x5161b6[_0x26a8('0x40')]['id']}})['then'](handleEntityNotFound(_0x1b9efd,null))[_0x26a8('0x39')](saveUpdates(_0x5161b6[_0x26a8('0x43')],null))['then'](respondWithResult(_0x1b9efd,null))[_0x26a8('0x3e')](handleError(_0x1b9efd,null));};exports[_0x26a8('0x1c')]=function(_0x204a62,_0x35106b){return db[_0x26a8('0x3b')]['find']({'where':{'id':_0x204a62[_0x26a8('0x40')]['id']}})[_0x26a8('0x39')](handleEntityNotFound(_0x35106b,null))[_0x26a8('0x39')](removeEntity(_0x35106b,null))['catch'](handleError(_0x35106b,null));};exports[_0x26a8('0x45')]=function(_0x1e7bce,_0x58924e){return db['FaxQueueReport'][_0x26a8('0x45')]()['then'](respondWithResult(_0x58924e,null))['catch'](handleError(_0x58924e,null));};
\ No newline at end of file
+var _0x8810=['create','body','describe','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','error','stack','name','send','index','FaxQueueReport','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','hasOwnProperty','order','pick','add','day','merge','where','filter','options','includeAll','include','findAll','rows','catch','show','params','rawAttributes','length','find'];(function(_0x302764,_0x1f40f4){var _0x10e89a=function(_0x439287){while(--_0x439287){_0x302764['push'](_0x302764['shift']());}};_0x10e89a(++_0x1f40f4);}(_0x8810,0xd8));var _0x0881=function(_0x4231b4,_0x3bcb34){_0x4231b4=_0x4231b4-0x0;var _0x452e51=_0x8810[_0x4231b4];return _0x452e51;};'use strict';var jsonpatch=require(_0x0881('0x0'));var rp=require('request-promise');var moment=require(_0x0881('0x1'));var BPromise=require(_0x0881('0x2'));var Mustache=require(_0x0881('0x3'));var util=require(_0x0881('0x4'));var path=require(_0x0881('0x5'));var sox=require(_0x0881('0x6'));var csv=require(_0x0881('0x7'));var ejs=require(_0x0881('0x8'));var fs=require('fs');var _=require(_0x0881('0x9'));var squel=require(_0x0881('0xa'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0881('0xb'));var toCsv=require(_0x0881('0x7'));var querystring=require(_0x0881('0xc'));var Papa=require(_0x0881('0xd'));var qs=require(_0x0881('0xe'));var logger=require(_0x0881('0xf'))(_0x0881('0x10'));var utils=require(_0x0881('0x11'));var config=require(_0x0881('0x12'));var db=require(_0x0881('0x13'))['db'];function respondWithStatusCode(_0x21f9d8,_0x3b1fee){_0x3b1fee=_0x3b1fee||0xcc;return function(_0x2ae65a){if(_0x2ae65a){return _0x21f9d8[_0x0881('0x14')](_0x3b1fee);}return _0x21f9d8['status'](_0x3b1fee)[_0x0881('0x15')]();};}function respondWithResult(_0x4c76e9,_0x14cef0){_0x14cef0=_0x14cef0||0xc8;return function(_0x5e1602){if(_0x5e1602){return _0x4c76e9[_0x0881('0x16')](_0x14cef0)[_0x0881('0x17')](_0x5e1602);}};}function respondWithFilteredResult(_0x479564,_0x1cab07){return function(_0x5114d3){if(_0x5114d3){var _0x29d124=_0x5114d3[_0x0881('0x18')],_0x5908e5=_0x1cab07['offset'],_0x2bc8e1=_0x1cab07[_0x0881('0x19')]+_0x1cab07[_0x0881('0x1a')],_0x1ab226;if(_0x2bc8e1>=_0x29d124){_0x2bc8e1=_0x29d124;_0x1ab226=0xc8;}else{_0x1ab226=0xce;}_0x479564[_0x0881('0x16')](_0x1ab226);return _0x479564[_0x0881('0x1b')](_0x0881('0x1c'),_0x5908e5+'-'+_0x2bc8e1+'/'+_0x29d124)[_0x0881('0x17')](_0x5114d3);}return null;};}function patchUpdates(_0x13d780){return function(_0x408c71){try{jsonpatch['apply'](_0x408c71,_0x13d780,!![]);}catch(_0x5effaf){return BPromise[_0x0881('0x1d')](_0x5effaf);}return _0x408c71[_0x0881('0x1e')]();};}function saveUpdates(_0x530255,_0x21fb98){return function(_0x2db6eb){if(_0x2db6eb){return _0x2db6eb[_0x0881('0x1f')](_0x530255)[_0x0881('0x20')](function(_0x3a6daa){return _0x3a6daa;});}return null;};}function removeEntity(_0x42e784,_0x3c342d){return function(_0x58138b){if(_0x58138b){return _0x58138b[_0x0881('0x21')]()[_0x0881('0x20')](function(){_0x42e784[_0x0881('0x16')](0xcc)[_0x0881('0x15')]();});}};}function handleEntityNotFound(_0x17226d,_0x102276){return function(_0x4c1dc6){if(!_0x4c1dc6){_0x17226d[_0x0881('0x14')](0x194);}return _0x4c1dc6;};}function handleError(_0x5031f5,_0x2da109){_0x2da109=_0x2da109||0x1f4;return function(_0x49088c){logger[_0x0881('0x22')](_0x49088c[_0x0881('0x23')]);if(_0x49088c[_0x0881('0x24')]){delete _0x49088c[_0x0881('0x24')];}_0x5031f5[_0x0881('0x16')](_0x2da109)[_0x0881('0x25')](_0x49088c);};}exports[_0x0881('0x26')]=function(_0x19187f,_0x267b22){var _0x5dc25a={},_0x2d15ac={},_0x46c7ce={'count':0x0,'rows':[]};var _0x40f139=db[_0x0881('0x27')]['rawAttributes'];_0x2d15ac[_0x0881('0x28')]=_[_0x0881('0x29')](_0x40f139);var _0xe00afb={'dateStart':_0x19187f[_0x0881('0x2a')]['dateStart'],'dateEnd':_0x19187f[_0x0881('0x2a')]['dateEnd']};delete _0x19187f[_0x0881('0x2a')][_0x0881('0x2b')];delete _0x19187f['query'][_0x0881('0x2c')];_0x2d15ac['query']=_['keys'](_0x19187f[_0x0881('0x2a')]);_0x2d15ac[_0x0881('0x2d')]=_[_0x0881('0x2e')](_0x2d15ac[_0x0881('0x28')],_0x2d15ac[_0x0881('0x2a')]);_0x5dc25a[_0x0881('0x2f')]=_[_0x0881('0x2e')](_0x2d15ac[_0x0881('0x28')],qs[_0x0881('0x30')](_0x19187f[_0x0881('0x2a')][_0x0881('0x30')]));_0x5dc25a[_0x0881('0x2f')]=_0x5dc25a[_0x0881('0x2f')]['length']?_0x5dc25a[_0x0881('0x2f')]:_0x2d15ac[_0x0881('0x28')];if(!_0x19187f[_0x0881('0x2a')][_0x0881('0x31')]('nolimit')){_0x5dc25a[_0x0881('0x1a')]=qs[_0x0881('0x1a')](_0x19187f[_0x0881('0x2a')][_0x0881('0x1a')]);_0x5dc25a[_0x0881('0x19')]=qs[_0x0881('0x19')](_0x19187f['query'][_0x0881('0x19')]);}_0x5dc25a[_0x0881('0x32')]=qs['sort'](_0x19187f[_0x0881('0x2a')]['sort']);_0x5dc25a['where']=qs[_0x0881('0x2d')](_[_0x0881('0x33')](_0x19187f['query'],_0x2d15ac[_0x0881('0x2d')]));if(_0xe00afb['dateStart']){if(_0xe00afb[_0x0881('0x2c')]){_0xe00afb['dateEnd']=moment(_0xe00afb['dateEnd'])[_0x0881('0x34')](0x1,_0x0881('0x35'));}else{_0xe00afb[_0x0881('0x2c')]=moment(_0xe00afb[_0x0881('0x2b')])['add'](0x1,_0x0881('0x35'));}_[_0x0881('0x36')](_0x5dc25a[_0x0881('0x37')],{'createdAt':{'$gte':_0xe00afb[_0x0881('0x2b')],'$lte':_0xe00afb[_0x0881('0x2c')]}});}if(_0x19187f[_0x0881('0x2a')][_0x0881('0x38')]){_0x5dc25a[_0x0881('0x37')]=_['merge'](_0x5dc25a['where'],{'$or':_['map'](_0x5dc25a['attributes'],function(_0x44f0c3){var _0x22e947={};_0x22e947[_0x44f0c3]={'$like':'%'+_0x19187f[_0x0881('0x2a')][_0x0881('0x38')]+'%'};return _0x22e947;})});}_0x5dc25a=_['merge']({},_0x5dc25a,_0x19187f[_0x0881('0x39')]);var _0x42d3ce={'where':_0x5dc25a[_0x0881('0x37')]};return db[_0x0881('0x27')]['count'](_0x42d3ce)[_0x0881('0x20')](function(_0x1d8a92){_0x46c7ce[_0x0881('0x18')]=_0x1d8a92;if(_0x19187f[_0x0881('0x2a')][_0x0881('0x3a')]){_0x5dc25a[_0x0881('0x3b')]=[{'all':!![]}];}return db[_0x0881('0x27')][_0x0881('0x3c')](_0x5dc25a);})[_0x0881('0x20')](function(_0x44cfb5){_0x46c7ce[_0x0881('0x3d')]=_0x44cfb5;return _0x46c7ce;})[_0x0881('0x20')](respondWithFilteredResult(_0x267b22,_0x5dc25a))[_0x0881('0x3e')](handleError(_0x267b22,null));};exports[_0x0881('0x3f')]=function(_0x5d6d75,_0x4d6dc1){var _0x2bd049={'raw':!![],'where':{'id':_0x5d6d75[_0x0881('0x40')]['id']}},_0x8013a2={};_0x8013a2['model']=_[_0x0881('0x29')](db[_0x0881('0x27')][_0x0881('0x41')]);_0x8013a2[_0x0881('0x2a')]=_['keys'](_0x5d6d75['query']);_0x8013a2[_0x0881('0x2d')]=_[_0x0881('0x2e')](_0x8013a2['model'],_0x8013a2[_0x0881('0x2a')]);_0x2bd049[_0x0881('0x2f')]=_['intersection'](_0x8013a2[_0x0881('0x28')],qs[_0x0881('0x30')](_0x5d6d75['query'][_0x0881('0x30')]));_0x2bd049[_0x0881('0x2f')]=_0x2bd049['attributes'][_0x0881('0x42')]?_0x2bd049['attributes']:_0x8013a2[_0x0881('0x28')];if(_0x5d6d75[_0x0881('0x2a')][_0x0881('0x3a')]){_0x2bd049['include']=[{'all':!![]}];}_0x2bd049=_['merge']({},_0x2bd049,_0x5d6d75['options']);return db[_0x0881('0x27')][_0x0881('0x43')](_0x2bd049)[_0x0881('0x20')](handleEntityNotFound(_0x4d6dc1,null))[_0x0881('0x20')](respondWithResult(_0x4d6dc1,null))['catch'](handleError(_0x4d6dc1,null));};exports[_0x0881('0x44')]=function(_0x4faa37,_0x107ef6){return db['FaxQueueReport'][_0x0881('0x44')](_0x4faa37['body'],{})['then'](respondWithResult(_0x107ef6,0xc9))['catch'](handleError(_0x107ef6,null));};exports['update']=function(_0x4f9e0b,_0x17be22){if(_0x4f9e0b[_0x0881('0x45')]['id']){delete _0x4f9e0b[_0x0881('0x45')]['id'];}return db['FaxQueueReport']['find']({'where':{'id':_0x4f9e0b[_0x0881('0x40')]['id']}})[_0x0881('0x20')](handleEntityNotFound(_0x17be22,null))['then'](saveUpdates(_0x4f9e0b[_0x0881('0x45')],null))['then'](respondWithResult(_0x17be22,null))[_0x0881('0x3e')](handleError(_0x17be22,null));};exports[_0x0881('0x21')]=function(_0x5935b0,_0x4455a7){return db[_0x0881('0x27')]['find']({'where':{'id':_0x5935b0[_0x0881('0x40')]['id']}})[_0x0881('0x20')](handleEntityNotFound(_0x4455a7,null))[_0x0881('0x20')](removeEntity(_0x4455a7,null))['catch'](handleError(_0x4455a7,null));};exports[_0x0881('0x46')]=function(_0x1a5189,_0x41e83f){return db['FaxQueueReport'][_0x0881('0x46')]()['then'](respondWithResult(_0x41e83f,null))['catch'](handleError(_0x41e83f,null));};
\ No newline at end of file
index 29c0e62..8069813 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb993=['lodash','../../config/logger','moment','bluebird','exports','define','FaxQueueReport','report_fax_queue','uniqueid'];(function(_0x12854a,_0x3c67f3){var _0x1e1f36=function(_0x2bd0da){while(--_0x2bd0da){_0x12854a['push'](_0x12854a['shift']());}};_0x1e1f36(++_0x3c67f3);}(_0xb993,0x90));var _0x3b99=function(_0x14e95a,_0x121f17){_0x14e95a=_0x14e95a-0x0;var _0xb46fed=_0xb993[_0x14e95a];return _0xb46fed;};'use strict';var _=require(_0x3b99('0x0'));var util=require('util');var logger=require(_0x3b99('0x1'))('api');var moment=require(_0x3b99('0x2'));var BPromise=require(_0x3b99('0x3'));var rp=require('request-promise');var attributes=require('./faxQueueReport.attributes');module[_0x3b99('0x4')]=function(_0x30177d,_0x1a1ea3){return _0x30177d[_0x3b99('0x5')](_0x3b99('0x6'),attributes,{'tableName':_0x3b99('0x7'),'paranoid':![],'indexes':[{'name':_0x3b99('0x8'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x4d73=['lodash','../../config/logger','api','moment','bluebird','request-promise','./faxQueueReport.attributes','exports','define','FaxQueueReport','report_fax_queue'];(function(_0x157624,_0x3ee799){var _0x517e0c=function(_0x21c462){while(--_0x21c462){_0x157624['push'](_0x157624['shift']());}};_0x517e0c(++_0x3ee799);}(_0x4d73,0x14a));var _0x34d7=function(_0x352a98,_0x1e7671){_0x352a98=_0x352a98-0x0;var _0x4ea125=_0x4d73[_0x352a98];return _0x4ea125;};'use strict';var _=require(_0x34d7('0x0'));var util=require('util');var logger=require(_0x34d7('0x1'))(_0x34d7('0x2'));var moment=require(_0x34d7('0x3'));var BPromise=require(_0x34d7('0x4'));var rp=require(_0x34d7('0x5'));var attributes=require(_0x34d7('0x6'));module[_0x34d7('0x7')]=function(_0xfadbbd,_0x56b12b){return _0xfadbbd[_0x34d7('0x8')](_0x34d7('0x9'),attributes,{'tableName':_0x34d7('0xa'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index 3ea012d..1eb5e3f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d77=['bluebird','rpc','../../config/environment','client','http','request','then','FaxQueueReport,\x20%s,\x20%s','request\x20sent','debug','FaxQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','FaxQueueReport','create','body','options','raw','CreateFaxQueueReport','UpdateFaxQueueReport','update','attributes','limit','lodash','util'];(function(_0x576266,_0x4002b0){var _0x18234f=function(_0x4e9ad5){while(--_0x4e9ad5){_0x576266['push'](_0x576266['shift']());}};_0x18234f(++_0x4002b0);}(_0x5d77,0xee));var _0x75d7=function(_0x2811b1,_0xdb2d6e){_0x2811b1=_0x2811b1-0x0;var _0x1e52f6=_0x5d77[_0x2811b1];return _0x1e52f6;};'use strict';var _=require(_0x75d7('0x0'));var util=require(_0x75d7('0x1'));var moment=require('moment');var BPromise=require(_0x75d7('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x75d7('0x3'));var config=require(_0x75d7('0x4'));var jayson=require('jayson/promise');var client=jayson[_0x75d7('0x5')][_0x75d7('0x6')]({'port':0x232a});function respondWithRpcPromise(_0xf961f0,_0x4319dc,_0x200d53){return new BPromise(function(_0x484cf4,_0x50274c){return client[_0x75d7('0x7')](_0xf961f0,_0x200d53)[_0x75d7('0x8')](function(_0x2ce6b3){logger['info'](_0x75d7('0x9'),_0x4319dc,_0x75d7('0xa'));logger[_0x75d7('0xb')](_0x75d7('0xc'),_0x4319dc,'request\x20sent',JSON[_0x75d7('0xd')](_0x2ce6b3));if(_0x2ce6b3[_0x75d7('0xe')]){if(_0x2ce6b3[_0x75d7('0xe')][_0x75d7('0xf')]===0x1f4){logger[_0x75d7('0xe')](_0x75d7('0x9'),_0x4319dc,_0x2ce6b3[_0x75d7('0xe')][_0x75d7('0x10')]);return _0x50274c(_0x2ce6b3[_0x75d7('0xe')][_0x75d7('0x10')]);}logger['error']('FaxQueueReport,\x20%s,\x20%s',_0x4319dc,_0x2ce6b3['error'][_0x75d7('0x10')]);return _0x484cf4(_0x2ce6b3[_0x75d7('0xe')][_0x75d7('0x10')]);}else{logger[_0x75d7('0x11')](_0x75d7('0x9'),_0x4319dc,_0x75d7('0xa'));_0x484cf4(_0x2ce6b3[_0x75d7('0x12')][_0x75d7('0x10')]);}})[_0x75d7('0x13')](function(_0x393f35){logger['error']('FaxQueueReport,\x20%s,\x20%s',_0x4319dc,_0x393f35);_0x50274c(_0x393f35);});});}exports['CreateFaxQueueReport']=function(_0x1f5489){var _0x38a0b9=this;return new Promise(function(_0x1e0ffa,_0x477bee){return db[_0x75d7('0x14')][_0x75d7('0x15')](_0x1f5489[_0x75d7('0x16')],{'raw':_0x1f5489[_0x75d7('0x17')]?_0x1f5489['options'][_0x75d7('0x18')]===undefined?!![]:![]:!![]})[_0x75d7('0x8')](function(_0x40fbf5){logger[_0x75d7('0x11')]('CreateFaxQueueReport',_0x1f5489);logger['debug'](_0x75d7('0x19'),_0x1f5489,JSON[_0x75d7('0xd')](_0x40fbf5));_0x1e0ffa(_0x40fbf5);})[_0x75d7('0x13')](function(_0x541221){logger[_0x75d7('0xe')](_0x75d7('0x19'),_0x541221['message'],_0x1f5489);_0x477bee(_0x38a0b9[_0x75d7('0xe')](0x1f4,_0x541221['message']));});});};exports[_0x75d7('0x1a')]=function(_0x494b47){var _0x1f633e=this;return new Promise(function(_0x478b1b,_0x2bf8f7){return db['FaxQueueReport'][_0x75d7('0x1b')](_0x494b47[_0x75d7('0x16')],{'raw':_0x494b47[_0x75d7('0x17')]?_0x494b47['options']['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x494b47[_0x75d7('0x17')]?_0x494b47[_0x75d7('0x17')]['where']||null:null,'attributes':_0x494b47[_0x75d7('0x17')]?_0x494b47[_0x75d7('0x17')][_0x75d7('0x1c')]||null:null,'limit':_0x494b47[_0x75d7('0x17')]?_0x494b47[_0x75d7('0x17')][_0x75d7('0x1d')]||null:null})[_0x75d7('0x8')](function(_0x500e42){logger[_0x75d7('0x11')](_0x75d7('0x1a'),_0x494b47);logger[_0x75d7('0xb')](_0x75d7('0x1a'),_0x494b47,JSON['stringify'](_0x500e42));_0x478b1b(_0x500e42);})[_0x75d7('0x13')](function(_0x5da4b0){logger[_0x75d7('0xe')](_0x75d7('0x1a'),_0x5da4b0[_0x75d7('0x10')],_0x494b47);_0x2bf8f7(_0x1f633e[_0x75d7('0xe')](0x1f4,_0x5da4b0[_0x75d7('0x10')]));});});};
\ No newline at end of file
+var _0xeb80=['message','catch','create','body','options','raw','then','CreateFaxQueueReport','stringify','UpdateFaxQueueReport','FaxQueueReport','update','where','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','http','request','info','FaxQueueReport,\x20%s,\x20%s','request\x20sent','debug','FaxQueueReport,\x20%s,\x20%s,\x20%s','error'];(function(_0x49b207,_0x408ade){var _0x2dc8fa=function(_0x150975){while(--_0x150975){_0x49b207['push'](_0x49b207['shift']());}};_0x2dc8fa(++_0x408ade);}(_0xeb80,0xdf));var _0x0eb8=function(_0xe2e5dd,_0x2d7f68){_0xe2e5dd=_0xe2e5dd-0x0;var _0x3b536c=_0xeb80[_0xe2e5dd];return _0x3b536c;};'use strict';var _=require('lodash');var util=require(_0x0eb8('0x0'));var moment=require(_0x0eb8('0x1'));var BPromise=require(_0x0eb8('0x2'));var rs=require(_0x0eb8('0x3'));var fs=require('fs');var db=require(_0x0eb8('0x4'))['db'];var utils=require(_0x0eb8('0x5'));var logger=require(_0x0eb8('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x0eb8('0x7'));var client=jayson[_0x0eb8('0x8')][_0x0eb8('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x1faf04,_0x50c4d8,_0x37dfc4){return new BPromise(function(_0x5bbd72,_0x53613b){return client[_0x0eb8('0xa')](_0x1faf04,_0x37dfc4)['then'](function(_0x2b0cc3){logger[_0x0eb8('0xb')](_0x0eb8('0xc'),_0x50c4d8,_0x0eb8('0xd'));logger[_0x0eb8('0xe')](_0x0eb8('0xf'),_0x50c4d8,_0x0eb8('0xd'),JSON['stringify'](_0x2b0cc3));if(_0x2b0cc3[_0x0eb8('0x10')]){if(_0x2b0cc3[_0x0eb8('0x10')]['code']===0x1f4){logger[_0x0eb8('0x10')]('FaxQueueReport,\x20%s,\x20%s',_0x50c4d8,_0x2b0cc3[_0x0eb8('0x10')][_0x0eb8('0x11')]);return _0x53613b(_0x2b0cc3['error']['message']);}logger['error'](_0x0eb8('0xc'),_0x50c4d8,_0x2b0cc3['error']['message']);return _0x5bbd72(_0x2b0cc3[_0x0eb8('0x10')][_0x0eb8('0x11')]);}else{logger['info'](_0x0eb8('0xc'),_0x50c4d8,_0x0eb8('0xd'));_0x5bbd72(_0x2b0cc3['result']['message']);}})[_0x0eb8('0x12')](function(_0x5519b7){logger[_0x0eb8('0x10')]('FaxQueueReport,\x20%s,\x20%s',_0x50c4d8,_0x5519b7);_0x53613b(_0x5519b7);});});}exports['CreateFaxQueueReport']=function(_0x4eef5b){var _0xba7c84=this;return new Promise(function(_0x4ad570,_0xe5b573){return db['FaxQueueReport'][_0x0eb8('0x13')](_0x4eef5b[_0x0eb8('0x14')],{'raw':_0x4eef5b[_0x0eb8('0x15')]?_0x4eef5b[_0x0eb8('0x15')][_0x0eb8('0x16')]===undefined?!![]:![]:!![]})[_0x0eb8('0x17')](function(_0x5d00bf){logger[_0x0eb8('0xb')](_0x0eb8('0x18'),_0x4eef5b);logger[_0x0eb8('0xe')](_0x0eb8('0x18'),_0x4eef5b,JSON[_0x0eb8('0x19')](_0x5d00bf));_0x4ad570(_0x5d00bf);})[_0x0eb8('0x12')](function(_0x4fecb0){logger[_0x0eb8('0x10')](_0x0eb8('0x18'),_0x4fecb0[_0x0eb8('0x11')],_0x4eef5b);_0xe5b573(_0xba7c84[_0x0eb8('0x10')](0x1f4,_0x4fecb0[_0x0eb8('0x11')]));});});};exports[_0x0eb8('0x1a')]=function(_0x5de0e1){var _0x58125a=this;return new Promise(function(_0x58ca07,_0x1ea791){return db[_0x0eb8('0x1b')][_0x0eb8('0x1c')](_0x5de0e1[_0x0eb8('0x14')],{'raw':_0x5de0e1[_0x0eb8('0x15')]?_0x5de0e1['options']['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5de0e1[_0x0eb8('0x15')]?_0x5de0e1[_0x0eb8('0x15')][_0x0eb8('0x1d')]||null:null,'attributes':_0x5de0e1['options']?_0x5de0e1['options']['attributes']||null:null,'limit':_0x5de0e1[_0x0eb8('0x15')]?_0x5de0e1['options']['limit']||null:null})[_0x0eb8('0x17')](function(_0x4ff16f){logger[_0x0eb8('0xb')](_0x0eb8('0x1a'),_0x5de0e1);logger['debug'](_0x0eb8('0x1a'),_0x5de0e1,JSON['stringify'](_0x4ff16f));_0x58ca07(_0x4ff16f);})[_0x0eb8('0x12')](function(_0x44066f){logger[_0x0eb8('0x10')](_0x0eb8('0x1a'),_0x44066f[_0x0eb8('0x11')],_0x5de0e1);_0x1ea791(_0x58125a['error'](0x1f4,_0x44066f[_0x0eb8('0x11')]));});});};
\ No newline at end of file
index 179bdd0..df14b31 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x74af=['show','create','put','update','destroy','multer','util','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxQueueReport.controller','get','isAuthenticated','index','describe','/:id'];(function(_0xafcf00,_0x4429a3){var _0x513af4=function(_0x59554d){while(--_0x59554d){_0xafcf00['push'](_0xafcf00['shift']());}};_0x513af4(++_0x4429a3);}(_0x74af,0x159));var _0xf74a=function(_0x2c1165,_0x51a729){_0x2c1165=_0x2c1165-0x0;var _0x544ee4=_0x74af[_0x2c1165];return _0x544ee4;};'use strict';var multer=require(_0xf74a('0x0'));var util=require(_0xf74a('0x1'));var path=require('path');var express=require('express');var router=express[_0xf74a('0x2')]();var auth=require(_0xf74a('0x3'));var interaction=require(_0xf74a('0x4'));var config=require(_0xf74a('0x5'));var controller=require(_0xf74a('0x6'));router[_0xf74a('0x7')]('/',auth[_0xf74a('0x8')](),controller[_0xf74a('0x9')]);router[_0xf74a('0x7')]('/describe',auth[_0xf74a('0x8')](),controller[_0xf74a('0xa')]);router[_0xf74a('0x7')](_0xf74a('0xb'),auth[_0xf74a('0x8')](),controller[_0xf74a('0xc')]);router['post']('/',auth['isAuthenticated'](),controller[_0xf74a('0xd')]);router[_0xf74a('0xe')]('/:id',auth[_0xf74a('0x8')](),controller[_0xf74a('0xf')]);router['delete'](_0xf74a('0xb'),auth[_0xf74a('0x8')](),controller[_0xf74a('0x10')]);module['exports']=router;
\ No newline at end of file
+var _0x7567=['put','update','delete','destroy','exports','multer','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','/describe','describe','/:id','show','post','create'];(function(_0x26a815,_0xcde2b9){var _0x539ed1=function(_0x66f759){while(--_0x66f759){_0x26a815['push'](_0x26a815['shift']());}};_0x539ed1(++_0xcde2b9);}(_0x7567,0xe9));var _0x7756=function(_0x5eb079,_0x2e9b46){_0x5eb079=_0x5eb079-0x0;var _0x12e45b=_0x7567[_0x5eb079];return _0x12e45b;};'use strict';var multer=require(_0x7756('0x0'));var util=require('util');var path=require(_0x7756('0x1'));var express=require(_0x7756('0x2'));var router=express['Router']();var auth=require(_0x7756('0x3'));var interaction=require(_0x7756('0x4'));var config=require(_0x7756('0x5'));var controller=require('./faxQueueReport.controller');router[_0x7756('0x6')]('/',auth[_0x7756('0x7')](),controller['index']);router['get'](_0x7756('0x8'),auth[_0x7756('0x7')](),controller[_0x7756('0x9')]);router[_0x7756('0x6')](_0x7756('0xa'),auth['isAuthenticated'](),controller[_0x7756('0xb')]);router[_0x7756('0xc')]('/',auth[_0x7756('0x7')](),controller[_0x7756('0xd')]);router[_0x7756('0xe')]('/:id',auth[_0x7756('0x7')](),controller[_0x7756('0xf')]);router[_0x7756('0x10')](_0x7756('0xa'),auth[_0x7756('0x7')](),controller[_0x7756('0x11')]);module[_0x7756('0x12')]=router;
\ No newline at end of file
index 3823a75..e11ba48 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9098=['moment','exports','STRING','ENUM','queue','DATE','NOW'];(function(_0x29fd86,_0x4af119){var _0x16638d=function(_0x6d8312){while(--_0x6d8312){_0x29fd86['push'](_0x29fd86['shift']());}};_0x16638d(++_0x4af119);}(_0x9098,0xd2));var _0x8909=function(_0x21a9d9,_0x4d5ac8){_0x21a9d9=_0x21a9d9-0x0;var _0x46adce=_0x9098[_0x21a9d9];return _0x46adce;};'use strict';var moment=require(_0x8909('0x0'));var Sequelize=require('sequelize');module[_0x8909('0x1')]={'uniqueid':{'type':Sequelize[_0x8909('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0x8909('0x3')]('account','agent',_0x8909('0x4')),'allowNull':![],'defaultValue':'queue'},'transferredAt':{'type':Sequelize[_0x8909('0x5')],'allowNull':![],'defaultValue':Sequelize[_0x8909('0x6')]}};
\ No newline at end of file
+var _0x31c5=['queue','DATE','NOW','ENUM','account'];(function(_0x589917,_0x144a2d){var _0x13f433=function(_0x454aaf){while(--_0x454aaf){_0x589917['push'](_0x589917['shift']());}};_0x13f433(++_0x144a2d);}(_0x31c5,0xc1));var _0x531c=function(_0x666621,_0xe13bfd){_0x666621=_0x666621-0x0;var _0x3797f8=_0x31c5[_0x666621];return _0x3797f8;};'use strict';var moment=require('moment');var Sequelize=require('sequelize');module['exports']={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize[_0x531c('0x0')](_0x531c('0x1'),'agent',_0x531c('0x2')),'allowNull':![],'defaultValue':_0x531c('0x2')},'transferredAt':{'type':Sequelize[_0x531c('0x3')],'allowNull':![],'defaultValue':Sequelize[_0x531c('0x4')]}};
\ No newline at end of file
index 60d5784..8a4be93 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfdbd=['keys','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','dateStart','add','day','merge','filter','map','options','FaxTransferReport','count','includeAll','include','findAll','rows','show','find','catch','create','body','params','describe','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','crypto','jsforce','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','offset','limit','set','Content-Range','apply','save','update','then','destroy','sendStatus','error','name','send','rawAttributes','model'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0xfdbd,0xf0));var _0xdfdb=function(_0x142020,_0x1f7233){_0x142020=_0x142020-0x0;var _0x40da8f=_0xfdbd[_0x142020];return _0x40da8f;};'use strict';var jsonpatch=require(_0xdfdb('0x0'));var rp=require(_0xdfdb('0x1'));var moment=require(_0xdfdb('0x2'));var BPromise=require(_0xdfdb('0x3'));var Mustache=require(_0xdfdb('0x4'));var util=require(_0xdfdb('0x5'));var path=require(_0xdfdb('0x6'));var sox=require(_0xdfdb('0x7'));var csv=require(_0xdfdb('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xdfdb('0x9'));var squel=require('squel');var crypto=require(_0xdfdb('0xa'));var jsforce=require(_0xdfdb('0xb'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xdfdb('0xc'));var qs=require(_0xdfdb('0xd'));var logger=require('../../config/logger')(_0xdfdb('0xe'));var utils=require(_0xdfdb('0xf'));var config=require(_0xdfdb('0x10'));var db=require(_0xdfdb('0x11'))['db'];function respondWithStatusCode(_0x3a44a9,_0x1ace28){_0x1ace28=_0x1ace28||0xcc;return function(_0x2bb8d4){if(_0x2bb8d4){return _0x3a44a9['sendStatus'](_0x1ace28);}return _0x3a44a9[_0xdfdb('0x12')](_0x1ace28)[_0xdfdb('0x13')]();};}function respondWithResult(_0x527c05,_0x293714){_0x293714=_0x293714||0xc8;return function(_0x33a706){if(_0x33a706){return _0x527c05[_0xdfdb('0x12')](_0x293714)[_0xdfdb('0x14')](_0x33a706);}};}function respondWithFilteredResult(_0x2a95f1,_0x13ada2){return function(_0xf5d903){if(_0xf5d903){var _0x16017d=_0xf5d903['count'],_0x51162f=_0x13ada2[_0xdfdb('0x15')],_0x48a66a=_0x13ada2[_0xdfdb('0x15')]+_0x13ada2[_0xdfdb('0x16')],_0x2c44dc;if(_0x48a66a>=_0x16017d){_0x48a66a=_0x16017d;_0x2c44dc=0xc8;}else{_0x2c44dc=0xce;}_0x2a95f1[_0xdfdb('0x12')](_0x2c44dc);return _0x2a95f1[_0xdfdb('0x17')](_0xdfdb('0x18'),_0x51162f+'-'+_0x48a66a+'/'+_0x16017d)['json'](_0xf5d903);}return null;};}function patchUpdates(_0x4fd3d5){return function(_0x2a0295){try{jsonpatch[_0xdfdb('0x19')](_0x2a0295,_0x4fd3d5,!![]);}catch(_0x2c1070){return BPromise['reject'](_0x2c1070);}return _0x2a0295[_0xdfdb('0x1a')]();};}function saveUpdates(_0xb677b1,_0x467653){return function(_0xd60a30){if(_0xd60a30){return _0xd60a30[_0xdfdb('0x1b')](_0xb677b1)[_0xdfdb('0x1c')](function(_0x693a2c){return _0x693a2c;});}return null;};}function removeEntity(_0x29a639,_0x5b8cb5){return function(_0x14638a){if(_0x14638a){return _0x14638a[_0xdfdb('0x1d')]()[_0xdfdb('0x1c')](function(){_0x29a639['status'](0xcc)[_0xdfdb('0x13')]();});}};}function handleEntityNotFound(_0x397f7c,_0x2c7dd1){return function(_0x4d55e5){if(!_0x4d55e5){_0x397f7c[_0xdfdb('0x1e')](0x194);}return _0x4d55e5;};}function handleError(_0x789bd2,_0x334cdd){_0x334cdd=_0x334cdd||0x1f4;return function(_0x489fd4){logger[_0xdfdb('0x1f')](_0x489fd4['stack']);if(_0x489fd4[_0xdfdb('0x20')]){delete _0x489fd4[_0xdfdb('0x20')];}_0x789bd2[_0xdfdb('0x12')](_0x334cdd)[_0xdfdb('0x21')](_0x489fd4);};}exports['index']=function(_0x4c253e,_0x4363d8){var _0x956843={},_0x400663={},_0x27f872={'count':0x0,'rows':[]};var _0x305954=db['FaxTransferReport'][_0xdfdb('0x22')];_0x400663[_0xdfdb('0x23')]=_[_0xdfdb('0x24')](_0x305954);var _0x4f8057={'dateStart':_0x4c253e[_0xdfdb('0x25')]['dateStart'],'dateEnd':_0x4c253e[_0xdfdb('0x25')][_0xdfdb('0x26')]};delete _0x4c253e[_0xdfdb('0x25')]['dateStart'];delete _0x4c253e['query'][_0xdfdb('0x26')];_0x400663[_0xdfdb('0x25')]=_[_0xdfdb('0x24')](_0x4c253e[_0xdfdb('0x25')]);_0x400663[_0xdfdb('0x27')]=_[_0xdfdb('0x28')](_0x400663['model'],_0x400663[_0xdfdb('0x25')]);_0x956843[_0xdfdb('0x29')]=_[_0xdfdb('0x28')](_0x400663[_0xdfdb('0x23')],qs[_0xdfdb('0x2a')](_0x4c253e[_0xdfdb('0x25')][_0xdfdb('0x2a')]));_0x956843[_0xdfdb('0x29')]=_0x956843[_0xdfdb('0x29')][_0xdfdb('0x2b')]?_0x956843[_0xdfdb('0x29')]:_0x400663['model'];if(!_0x4c253e['query'][_0xdfdb('0x2c')]('nolimit')){_0x956843[_0xdfdb('0x16')]=qs[_0xdfdb('0x16')](_0x4c253e[_0xdfdb('0x25')][_0xdfdb('0x16')]);_0x956843['offset']=qs[_0xdfdb('0x15')](_0x4c253e['query'][_0xdfdb('0x15')]);}_0x956843[_0xdfdb('0x2d')]=qs[_0xdfdb('0x2e')](_0x4c253e[_0xdfdb('0x25')][_0xdfdb('0x2e')]);_0x956843[_0xdfdb('0x2f')]=qs['filters'](_[_0xdfdb('0x30')](_0x4c253e[_0xdfdb('0x25')],_0x400663['filters']));if(_0x4f8057[_0xdfdb('0x31')]){if(_0x4f8057[_0xdfdb('0x26')]){_0x4f8057[_0xdfdb('0x26')]=moment(_0x4f8057[_0xdfdb('0x26')])[_0xdfdb('0x32')](0x1,_0xdfdb('0x33'));}else{_0x4f8057[_0xdfdb('0x26')]=moment(_0x4f8057[_0xdfdb('0x31')])[_0xdfdb('0x32')](0x1,_0xdfdb('0x33'));}_[_0xdfdb('0x34')](_0x956843['where'],{'createdAt':{'$gte':_0x4f8057[_0xdfdb('0x31')],'$lte':_0x4f8057[_0xdfdb('0x26')]}});}if(_0x4c253e[_0xdfdb('0x25')][_0xdfdb('0x35')]){_0x956843[_0xdfdb('0x2f')]=_[_0xdfdb('0x34')](_0x956843[_0xdfdb('0x2f')],{'$or':_[_0xdfdb('0x36')](_0x956843['attributes'],function(_0x55d707){var _0x435557={};_0x435557[_0x55d707]={'$like':'%'+_0x4c253e[_0xdfdb('0x25')][_0xdfdb('0x35')]+'%'};return _0x435557;})});}_0x956843=_[_0xdfdb('0x34')]({},_0x956843,_0x4c253e[_0xdfdb('0x37')]);var _0x300884={'where':_0x956843[_0xdfdb('0x2f')]};return db[_0xdfdb('0x38')][_0xdfdb('0x39')](_0x300884)['then'](function(_0x175f57){_0x27f872[_0xdfdb('0x39')]=_0x175f57;if(_0x4c253e[_0xdfdb('0x25')][_0xdfdb('0x3a')]){_0x956843[_0xdfdb('0x3b')]=[{'all':!![]}];}return db['FaxTransferReport'][_0xdfdb('0x3c')](_0x956843);})[_0xdfdb('0x1c')](function(_0x3e9f88){_0x27f872[_0xdfdb('0x3d')]=_0x3e9f88;return _0x27f872;})[_0xdfdb('0x1c')](respondWithFilteredResult(_0x4363d8,_0x956843))['catch'](handleError(_0x4363d8,null));};exports[_0xdfdb('0x3e')]=function(_0xd2f8bd,_0xf0482a){var _0x5b4381={'raw':!![],'where':{'id':_0xd2f8bd['params']['id']}},_0x2b5139={};_0x2b5139[_0xdfdb('0x23')]=_['keys'](db[_0xdfdb('0x38')][_0xdfdb('0x22')]);_0x2b5139['query']=_[_0xdfdb('0x24')](_0xd2f8bd['query']);_0x2b5139[_0xdfdb('0x27')]=_[_0xdfdb('0x28')](_0x2b5139[_0xdfdb('0x23')],_0x2b5139[_0xdfdb('0x25')]);_0x5b4381[_0xdfdb('0x29')]=_['intersection'](_0x2b5139['model'],qs[_0xdfdb('0x2a')](_0xd2f8bd[_0xdfdb('0x25')]['fields']));_0x5b4381[_0xdfdb('0x29')]=_0x5b4381['attributes'][_0xdfdb('0x2b')]?_0x5b4381[_0xdfdb('0x29')]:_0x2b5139[_0xdfdb('0x23')];if(_0xd2f8bd[_0xdfdb('0x25')][_0xdfdb('0x3a')]){_0x5b4381[_0xdfdb('0x3b')]=[{'all':!![]}];}_0x5b4381=_[_0xdfdb('0x34')]({},_0x5b4381,_0xd2f8bd[_0xdfdb('0x37')]);return db[_0xdfdb('0x38')][_0xdfdb('0x3f')](_0x5b4381)[_0xdfdb('0x1c')](handleEntityNotFound(_0xf0482a,null))[_0xdfdb('0x1c')](respondWithResult(_0xf0482a,null))[_0xdfdb('0x40')](handleError(_0xf0482a,null));};exports[_0xdfdb('0x41')]=function(_0x1c08fb,_0x273477){return db['FaxTransferReport']['create'](_0x1c08fb[_0xdfdb('0x42')],{})[_0xdfdb('0x1c')](respondWithResult(_0x273477,0xc9))[_0xdfdb('0x40')](handleError(_0x273477,null));};exports['update']=function(_0x36149e,_0x4d4c90){if(_0x36149e[_0xdfdb('0x42')]['id']){delete _0x36149e[_0xdfdb('0x42')]['id'];}return db['FaxTransferReport'][_0xdfdb('0x3f')]({'where':{'id':_0x36149e[_0xdfdb('0x43')]['id']}})['then'](handleEntityNotFound(_0x4d4c90,null))[_0xdfdb('0x1c')](saveUpdates(_0x36149e[_0xdfdb('0x42')],null))[_0xdfdb('0x1c')](respondWithResult(_0x4d4c90,null))[_0xdfdb('0x40')](handleError(_0x4d4c90,null));};exports[_0xdfdb('0x1d')]=function(_0x10b490,_0x17dfdb){return db[_0xdfdb('0x38')][_0xdfdb('0x3f')]({'where':{'id':_0x10b490['params']['id']}})[_0xdfdb('0x1c')](handleEntityNotFound(_0x17dfdb,null))['then'](removeEntity(_0x17dfdb,null))[_0xdfdb('0x40')](handleError(_0x17dfdb,null));};exports[_0xdfdb('0x44')]=function(_0x282c14,_0x22608b){return db[_0xdfdb('0x38')][_0xdfdb('0x44')]()[_0xdfdb('0x1c')](respondWithResult(_0x22608b,null))['catch'](handleError(_0x22608b,null));};
\ No newline at end of file
+var _0xa979=['catch','params','find','create','body','describe','request-promise','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','save','update','destroy','then','error','stack','name','send','index','FaxTransferReport','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','length','sort','where','pick','add','day','merge','map','filter','options','includeAll','include','findAll','rows'];(function(_0x80a240,_0x5ceca7){var _0x23f9ba=function(_0x3e958b){while(--_0x3e958b){_0x80a240['push'](_0x80a240['shift']());}};_0x23f9ba(++_0x5ceca7);}(_0xa979,0x15f));var _0x9a97=function(_0x3d0678,_0x10e9ae){_0x3d0678=_0x3d0678-0x0;var _0x7f9a43=_0xa979[_0x3d0678];return _0x7f9a43;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x9a97('0x0'));var moment=require('moment');var BPromise=require(_0x9a97('0x1'));var Mustache=require(_0x9a97('0x2'));var util=require(_0x9a97('0x3'));var path=require('path');var sox=require(_0x9a97('0x4'));var csv=require(_0x9a97('0x5'));var ejs=require(_0x9a97('0x6'));var fs=require('fs');var _=require(_0x9a97('0x7'));var squel=require(_0x9a97('0x8'));var crypto=require('crypto');var jsforce=require(_0x9a97('0x9'));var deskjs=require(_0x9a97('0xa'));var toCsv=require(_0x9a97('0x5'));var querystring=require(_0x9a97('0xb'));var Papa=require(_0x9a97('0xc'));var qs=require('../../components/parsers/qs');var logger=require(_0x9a97('0xd'))(_0x9a97('0xe'));var utils=require(_0x9a97('0xf'));var config=require(_0x9a97('0x10'));var db=require(_0x9a97('0x11'))['db'];function respondWithStatusCode(_0x2b37cf,_0x433ed7){_0x433ed7=_0x433ed7||0xcc;return function(_0x2026c0){if(_0x2026c0){return _0x2b37cf[_0x9a97('0x12')](_0x433ed7);}return _0x2b37cf[_0x9a97('0x13')](_0x433ed7)[_0x9a97('0x14')]();};}function respondWithResult(_0x100e7e,_0x16e259){_0x16e259=_0x16e259||0xc8;return function(_0x72c0c9){if(_0x72c0c9){return _0x100e7e['status'](_0x16e259)['json'](_0x72c0c9);}};}function respondWithFilteredResult(_0x19d7f7,_0xf09f35){return function(_0x5dc4d1){if(_0x5dc4d1){var _0x14f0fc=_0x5dc4d1[_0x9a97('0x15')],_0x44326f=_0xf09f35['offset'],_0x387720=_0xf09f35[_0x9a97('0x16')]+_0xf09f35[_0x9a97('0x17')],_0x5c6266;if(_0x387720>=_0x14f0fc){_0x387720=_0x14f0fc;_0x5c6266=0xc8;}else{_0x5c6266=0xce;}_0x19d7f7['status'](_0x5c6266);return _0x19d7f7[_0x9a97('0x18')](_0x9a97('0x19'),_0x44326f+'-'+_0x387720+'/'+_0x14f0fc)[_0x9a97('0x1a')](_0x5dc4d1);}return null;};}function patchUpdates(_0x2cf026){return function(_0x4b127e){try{jsonpatch[_0x9a97('0x1b')](_0x4b127e,_0x2cf026,!![]);}catch(_0x224046){return BPromise[_0x9a97('0x1c')](_0x224046);}return _0x4b127e[_0x9a97('0x1d')]();};}function saveUpdates(_0x540c10,_0x9311c0){return function(_0x5582b3){if(_0x5582b3){return _0x5582b3[_0x9a97('0x1e')](_0x540c10)['then'](function(_0x562041){return _0x562041;});}return null;};}function removeEntity(_0x2ebdfd,_0x35181e){return function(_0x286c0d){if(_0x286c0d){return _0x286c0d[_0x9a97('0x1f')]()[_0x9a97('0x20')](function(){_0x2ebdfd[_0x9a97('0x13')](0xcc)['end']();});}};}function handleEntityNotFound(_0x533d26,_0x3a9d0a){return function(_0x4205ba){if(!_0x4205ba){_0x533d26['sendStatus'](0x194);}return _0x4205ba;};}function handleError(_0x50fa20,_0x63ee53){_0x63ee53=_0x63ee53||0x1f4;return function(_0x3229fe){logger[_0x9a97('0x21')](_0x3229fe[_0x9a97('0x22')]);if(_0x3229fe[_0x9a97('0x23')]){delete _0x3229fe[_0x9a97('0x23')];}_0x50fa20[_0x9a97('0x13')](_0x63ee53)[_0x9a97('0x24')](_0x3229fe);};}exports[_0x9a97('0x25')]=function(_0x4f2d70,_0x250c5d){var _0x12b809={},_0x3e6f6b={},_0x4ad4f8={'count':0x0,'rows':[]};var _0x4319be=db[_0x9a97('0x26')][_0x9a97('0x27')];_0x3e6f6b['model']=_[_0x9a97('0x28')](_0x4319be);var _0x24550c={'dateStart':_0x4f2d70[_0x9a97('0x29')][_0x9a97('0x2a')],'dateEnd':_0x4f2d70[_0x9a97('0x29')][_0x9a97('0x2b')]};delete _0x4f2d70[_0x9a97('0x29')][_0x9a97('0x2a')];delete _0x4f2d70[_0x9a97('0x29')][_0x9a97('0x2b')];_0x3e6f6b['query']=_[_0x9a97('0x28')](_0x4f2d70[_0x9a97('0x29')]);_0x3e6f6b[_0x9a97('0x2c')]=_[_0x9a97('0x2d')](_0x3e6f6b[_0x9a97('0x2e')],_0x3e6f6b[_0x9a97('0x29')]);_0x12b809[_0x9a97('0x2f')]=_[_0x9a97('0x2d')](_0x3e6f6b['model'],qs[_0x9a97('0x30')](_0x4f2d70[_0x9a97('0x29')][_0x9a97('0x30')]));_0x12b809[_0x9a97('0x2f')]=_0x12b809['attributes'][_0x9a97('0x31')]?_0x12b809['attributes']:_0x3e6f6b[_0x9a97('0x2e')];if(!_0x4f2d70[_0x9a97('0x29')]['hasOwnProperty']('nolimit')){_0x12b809[_0x9a97('0x17')]=qs[_0x9a97('0x17')](_0x4f2d70[_0x9a97('0x29')]['limit']);_0x12b809[_0x9a97('0x16')]=qs[_0x9a97('0x16')](_0x4f2d70[_0x9a97('0x29')][_0x9a97('0x16')]);}_0x12b809['order']=qs[_0x9a97('0x32')](_0x4f2d70['query'][_0x9a97('0x32')]);_0x12b809[_0x9a97('0x33')]=qs[_0x9a97('0x2c')](_[_0x9a97('0x34')](_0x4f2d70[_0x9a97('0x29')],_0x3e6f6b[_0x9a97('0x2c')]));if(_0x24550c[_0x9a97('0x2a')]){if(_0x24550c[_0x9a97('0x2b')]){_0x24550c['dateEnd']=moment(_0x24550c[_0x9a97('0x2b')])[_0x9a97('0x35')](0x1,'day');}else{_0x24550c[_0x9a97('0x2b')]=moment(_0x24550c[_0x9a97('0x2a')])[_0x9a97('0x35')](0x1,_0x9a97('0x36'));}_[_0x9a97('0x37')](_0x12b809[_0x9a97('0x33')],{'createdAt':{'$gte':_0x24550c[_0x9a97('0x2a')],'$lte':_0x24550c[_0x9a97('0x2b')]}});}if(_0x4f2d70[_0x9a97('0x29')]['filter']){_0x12b809[_0x9a97('0x33')]=_[_0x9a97('0x37')](_0x12b809[_0x9a97('0x33')],{'$or':_[_0x9a97('0x38')](_0x12b809[_0x9a97('0x2f')],function(_0x31b783){var _0x2df1db={};_0x2df1db[_0x31b783]={'$like':'%'+_0x4f2d70[_0x9a97('0x29')][_0x9a97('0x39')]+'%'};return _0x2df1db;})});}_0x12b809=_[_0x9a97('0x37')]({},_0x12b809,_0x4f2d70[_0x9a97('0x3a')]);var _0x1230b9={'where':_0x12b809['where']};return db['FaxTransferReport'][_0x9a97('0x15')](_0x1230b9)[_0x9a97('0x20')](function(_0x4c14f3){_0x4ad4f8[_0x9a97('0x15')]=_0x4c14f3;if(_0x4f2d70[_0x9a97('0x29')][_0x9a97('0x3b')]){_0x12b809[_0x9a97('0x3c')]=[{'all':!![]}];}return db[_0x9a97('0x26')][_0x9a97('0x3d')](_0x12b809);})['then'](function(_0x36fe68){_0x4ad4f8[_0x9a97('0x3e')]=_0x36fe68;return _0x4ad4f8;})[_0x9a97('0x20')](respondWithFilteredResult(_0x250c5d,_0x12b809))[_0x9a97('0x3f')](handleError(_0x250c5d,null));};exports['show']=function(_0x41ef7b,_0x55755c){var _0x3894e8={'raw':!![],'where':{'id':_0x41ef7b[_0x9a97('0x40')]['id']}},_0x399f4e={};_0x399f4e[_0x9a97('0x2e')]=_[_0x9a97('0x28')](db[_0x9a97('0x26')][_0x9a97('0x27')]);_0x399f4e[_0x9a97('0x29')]=_['keys'](_0x41ef7b[_0x9a97('0x29')]);_0x399f4e[_0x9a97('0x2c')]=_[_0x9a97('0x2d')](_0x399f4e[_0x9a97('0x2e')],_0x399f4e[_0x9a97('0x29')]);_0x3894e8['attributes']=_[_0x9a97('0x2d')](_0x399f4e[_0x9a97('0x2e')],qs[_0x9a97('0x30')](_0x41ef7b['query'][_0x9a97('0x30')]));_0x3894e8[_0x9a97('0x2f')]=_0x3894e8[_0x9a97('0x2f')][_0x9a97('0x31')]?_0x3894e8[_0x9a97('0x2f')]:_0x399f4e[_0x9a97('0x2e')];if(_0x41ef7b[_0x9a97('0x29')][_0x9a97('0x3b')]){_0x3894e8[_0x9a97('0x3c')]=[{'all':!![]}];}_0x3894e8=_[_0x9a97('0x37')]({},_0x3894e8,_0x41ef7b['options']);return db['FaxTransferReport'][_0x9a97('0x41')](_0x3894e8)[_0x9a97('0x20')](handleEntityNotFound(_0x55755c,null))[_0x9a97('0x20')](respondWithResult(_0x55755c,null))[_0x9a97('0x3f')](handleError(_0x55755c,null));};exports[_0x9a97('0x42')]=function(_0x2d42db,_0x319f10){return db[_0x9a97('0x26')][_0x9a97('0x42')](_0x2d42db[_0x9a97('0x43')],{})[_0x9a97('0x20')](respondWithResult(_0x319f10,0xc9))[_0x9a97('0x3f')](handleError(_0x319f10,null));};exports['update']=function(_0xd4715d,_0x97409f){if(_0xd4715d['body']['id']){delete _0xd4715d['body']['id'];}return db[_0x9a97('0x26')][_0x9a97('0x41')]({'where':{'id':_0xd4715d[_0x9a97('0x40')]['id']}})['then'](handleEntityNotFound(_0x97409f,null))[_0x9a97('0x20')](saveUpdates(_0xd4715d[_0x9a97('0x43')],null))[_0x9a97('0x20')](respondWithResult(_0x97409f,null))[_0x9a97('0x3f')](handleError(_0x97409f,null));};exports[_0x9a97('0x1f')]=function(_0xf2e3d5,_0x1edd7a){return db[_0x9a97('0x26')]['find']({'where':{'id':_0xf2e3d5[_0x9a97('0x40')]['id']}})[_0x9a97('0x20')](handleEntityNotFound(_0x1edd7a,null))[_0x9a97('0x20')](removeEntity(_0x1edd7a,null))['catch'](handleError(_0x1edd7a,null));};exports[_0x9a97('0x44')]=function(_0x53eb6d,_0x122ce9){return db[_0x9a97('0x26')][_0x9a97('0x44')]()[_0x9a97('0x20')](respondWithResult(_0x122ce9,null))[_0x9a97('0x3f')](handleError(_0x122ce9,null));};
\ No newline at end of file
index d746183..703d263 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb535=['util','../../config/logger','api','moment','bluebird','request-promise','./faxTransferReport.attributes','exports','define','FaxTransferReport','report_fax_transfer','uniqueid','lodash'];(function(_0x2c6474,_0x446e3f){var _0x5ecf12=function(_0x27afa6){while(--_0x27afa6){_0x2c6474['push'](_0x2c6474['shift']());}};_0x5ecf12(++_0x446e3f);}(_0xb535,0x1c6));var _0x5b53=function(_0x202c61,_0x3673e0){_0x202c61=_0x202c61-0x0;var _0x540691=_0xb535[_0x202c61];return _0x540691;};'use strict';var _=require(_0x5b53('0x0'));var util=require(_0x5b53('0x1'));var logger=require(_0x5b53('0x2'))(_0x5b53('0x3'));var moment=require(_0x5b53('0x4'));var BPromise=require(_0x5b53('0x5'));var rp=require(_0x5b53('0x6'));var attributes=require(_0x5b53('0x7'));module[_0x5b53('0x8')]=function(_0x564c20,_0x59ce09){return _0x564c20[_0x5b53('0x9')](_0x5b53('0xa'),attributes,{'tableName':_0x5b53('0xb'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x5b53('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x8a18=['../../config/logger','api','moment','bluebird','FaxTransferReport','report_fax_transfer','uniqueid','lodash','util'];(function(_0x50ad25,_0x1b04da){var _0x2ba541=function(_0x1472f2){while(--_0x1472f2){_0x50ad25['push'](_0x50ad25['shift']());}};_0x2ba541(++_0x1b04da);}(_0x8a18,0x6a));var _0x88a1=function(_0x5a4503,_0x3fac29){_0x5a4503=_0x5a4503-0x0;var _0xbd9b9d=_0x8a18[_0x5a4503];return _0xbd9b9d;};'use strict';var _=require(_0x88a1('0x0'));var util=require(_0x88a1('0x1'));var logger=require(_0x88a1('0x2'))(_0x88a1('0x3'));var moment=require(_0x88a1('0x4'));var BPromise=require(_0x88a1('0x5'));var rp=require('request-promise');var attributes=require('./faxTransferReport.attributes');module['exports']=function(_0x1d96fc,_0x220fc1){return _0x1d96fc['define'](_0x88a1('0x6'),attributes,{'tableName':_0x88a1('0x7'),'paranoid':![],'indexes':[{'name':_0x88a1('0x8'),'fields':[_0x88a1('0x8')]}],'timestamps':!![]});};
\ No newline at end of file
index 0198122..e7187f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x680c=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','FaxTransferReport,\x20%s,\x20%s','debug','FaxTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','info','result','lodash','util','moment','randomstring','../../mysqldb'];(function(_0x3d5fe4,_0x5dc521){var _0x28f72f=function(_0x437ef3){while(--_0x437ef3){_0x3d5fe4['push'](_0x3d5fe4['shift']());}};_0x28f72f(++_0x5dc521);}(_0x680c,0x1b0));var _0xc680=function(_0x5b3820,_0x51889c){_0x5b3820=_0x5b3820-0x0;var _0x442af8=_0x680c[_0x5b3820];return _0x442af8;};'use strict';var _=require(_0xc680('0x0'));var util=require(_0xc680('0x1'));var moment=require(_0xc680('0x2'));var BPromise=require('bluebird');var rs=require(_0xc680('0x3'));var fs=require('fs');var db=require(_0xc680('0x4'))['db'];var utils=require(_0xc680('0x5'));var logger=require(_0xc680('0x6'))(_0xc680('0x7'));var config=require(_0xc680('0x8'));var jayson=require(_0xc680('0x9'));var client=jayson[_0xc680('0xa')][_0xc680('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x4ebd5f,_0x4850f7,_0x76c0ff){return new BPromise(function(_0x559217,_0xc0164d){return client[_0xc680('0xc')](_0x4ebd5f,_0x76c0ff)[_0xc680('0xd')](function(_0x43c160){logger['info'](_0xc680('0xe'),_0x4850f7,'request\x20sent');logger[_0xc680('0xf')](_0xc680('0x10'),_0x4850f7,_0xc680('0x11'),JSON['stringify'](_0x43c160));if(_0x43c160['error']){if(_0x43c160[_0xc680('0x12')][_0xc680('0x13')]===0x1f4){logger[_0xc680('0x12')](_0xc680('0xe'),_0x4850f7,_0x43c160[_0xc680('0x12')]['message']);return _0xc0164d(_0x43c160[_0xc680('0x12')][_0xc680('0x14')]);}logger[_0xc680('0x12')](_0xc680('0xe'),_0x4850f7,_0x43c160[_0xc680('0x12')][_0xc680('0x14')]);return _0x559217(_0x43c160[_0xc680('0x12')][_0xc680('0x14')]);}else{logger[_0xc680('0x15')](_0xc680('0xe'),_0x4850f7,'request\x20sent');_0x559217(_0x43c160[_0xc680('0x16')][_0xc680('0x14')]);}})['catch'](function(_0x3ddcad){logger[_0xc680('0x12')](_0xc680('0xe'),_0x4850f7,_0x3ddcad);_0xc0164d(_0x3ddcad);});});}
\ No newline at end of file
+var _0x81af=['FaxTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','message','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','FaxTransferReport,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x1ef643,_0x15bbf8){var _0x5541f8=function(_0x36fdb8){while(--_0x36fdb8){_0x1ef643['push'](_0x1ef643['shift']());}};_0x5541f8(++_0x15bbf8);}(_0x81af,0xc1));var _0xf81a=function(_0x429aa4,_0x4dd621){_0x429aa4=_0x429aa4-0x0;var _0x488317=_0x81af[_0x429aa4];return _0x488317;};'use strict';var _=require(_0xf81a('0x0'));var util=require(_0xf81a('0x1'));var moment=require(_0xf81a('0x2'));var BPromise=require(_0xf81a('0x3'));var rs=require(_0xf81a('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xf81a('0x5'));var logger=require(_0xf81a('0x6'))(_0xf81a('0x7'));var config=require(_0xf81a('0x8'));var jayson=require(_0xf81a('0x9'));var client=jayson[_0xf81a('0xa')][_0xf81a('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x385d04,_0x29c7b9,_0x5490f5){return new BPromise(function(_0x248111,_0xda72cb){return client['request'](_0x385d04,_0x5490f5)[_0xf81a('0xc')](function(_0x2e90c6){logger[_0xf81a('0xd')](_0xf81a('0xe'),_0x29c7b9,_0xf81a('0xf'));logger[_0xf81a('0x10')](_0xf81a('0x11'),_0x29c7b9,'request\x20sent',JSON[_0xf81a('0x12')](_0x2e90c6));if(_0x2e90c6[_0xf81a('0x13')]){if(_0x2e90c6['error']['code']===0x1f4){logger[_0xf81a('0x13')](_0xf81a('0xe'),_0x29c7b9,_0x2e90c6[_0xf81a('0x13')]['message']);return _0xda72cb(_0x2e90c6[_0xf81a('0x13')][_0xf81a('0x14')]);}logger[_0xf81a('0x13')]('FaxTransferReport,\x20%s,\x20%s',_0x29c7b9,_0x2e90c6[_0xf81a('0x13')][_0xf81a('0x14')]);return _0x248111(_0x2e90c6[_0xf81a('0x13')][_0xf81a('0x14')]);}else{logger[_0xf81a('0xd')](_0xf81a('0xe'),_0x29c7b9,'request\x20sent');_0x248111(_0x2e90c6['result'][_0xf81a('0x14')]);}})['catch'](function(_0x1978dd){logger[_0xf81a('0x13')](_0xf81a('0xe'),_0x29c7b9,_0x1978dd);_0xda72cb(_0x1978dd);});});}
\ No newline at end of file
index 2f888c2..7cdc878 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc8de=['path','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxTransferReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show','create','put','update','delete','destroy','util'];(function(_0x20a890,_0x5c1114){var _0x381f81=function(_0x3c40d5){while(--_0x3c40d5){_0x20a890['push'](_0x20a890['shift']());}};_0x381f81(++_0x5c1114);}(_0xc8de,0x167));var _0xec8d=function(_0x59f186,_0x232bbd){_0x59f186=_0x59f186-0x0;var _0x32d764=_0xc8de[_0x59f186];return _0x32d764;};'use strict';var multer=require('multer');var util=require(_0xec8d('0x0'));var path=require(_0xec8d('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0xec8d('0x2'));var interaction=require(_0xec8d('0x3'));var config=require(_0xec8d('0x4'));var controller=require(_0xec8d('0x5'));router[_0xec8d('0x6')]('/',auth[_0xec8d('0x7')](),controller[_0xec8d('0x8')]);router['get'](_0xec8d('0x9'),auth['isAuthenticated'](),controller[_0xec8d('0xa')]);router['get'](_0xec8d('0xb'),auth['isAuthenticated'](),controller[_0xec8d('0xc')]);router['post']('/',auth[_0xec8d('0x7')](),controller[_0xec8d('0xd')]);router[_0xec8d('0xe')](_0xec8d('0xb'),auth[_0xec8d('0x7')](),controller[_0xec8d('0xf')]);router[_0xec8d('0x10')](_0xec8d('0xb'),auth[_0xec8d('0x7')](),controller[_0xec8d('0x11')]);module['exports']=router;
\ No newline at end of file
+var _0xcc92=['exports','multer','util','path','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','describe','/:id','show','create','update','delete','destroy'];(function(_0x2ae5ce,_0x481760){var _0x3ccd3c=function(_0x3b870c){while(--_0x3b870c){_0x2ae5ce['push'](_0x2ae5ce['shift']());}};_0x3ccd3c(++_0x481760);}(_0xcc92,0x141));var _0x2cc9=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xcc92[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x2cc9('0x0'));var util=require(_0x2cc9('0x1'));var path=require(_0x2cc9('0x2'));var express=require('express');var router=express[_0x2cc9('0x3')]();var auth=require(_0x2cc9('0x4'));var interaction=require(_0x2cc9('0x5'));var config=require('../../config/environment');var controller=require('./faxTransferReport.controller');router[_0x2cc9('0x6')]('/',auth[_0x2cc9('0x7')](),controller['index']);router[_0x2cc9('0x6')]('/describe',auth[_0x2cc9('0x7')](),controller[_0x2cc9('0x8')]);router[_0x2cc9('0x6')](_0x2cc9('0x9'),auth['isAuthenticated'](),controller[_0x2cc9('0xa')]);router['post']('/',auth[_0x2cc9('0x7')](),controller[_0x2cc9('0xb')]);router['put']('/:id',auth[_0x2cc9('0x7')](),controller[_0x2cc9('0xc')]);router[_0x2cc9('0xd')](_0x2cc9('0x9'),auth[_0x2cc9('0x7')](),controller[_0x2cc9('0xe')]);module[_0x2cc9('0xf')]=router;
\ No newline at end of file
index b7d7656..97292fd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x55e0=['multer','util','path','express','../../components/interaction/service','../../config/environment','./intDeskAccount.controller','get','isAuthenticated','index','/:id/configurations','getConfigurations','getFields','post','create','put','/:id','update','delete','exports'];(function(_0x2aaeac,_0x30bda5){var _0x757741=function(_0x5893d2){while(--_0x5893d2){_0x2aaeac['push'](_0x2aaeac['shift']());}};_0x757741(++_0x30bda5);}(_0x55e0,0xdc));var _0x055e=function(_0x303ed7,_0x4daabe){_0x303ed7=_0x303ed7-0x0;var _0x5dfda2=_0x55e0[_0x303ed7];return _0x5dfda2;};'use strict';var multer=require(_0x055e('0x0'));var util=require(_0x055e('0x1'));var path=require(_0x055e('0x2'));var express=require(_0x055e('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x055e('0x4'));var config=require(_0x055e('0x5'));var controller=require(_0x055e('0x6'));router[_0x055e('0x7')]('/',auth[_0x055e('0x8')](),controller[_0x055e('0x9')]);router['get']('/:id',auth[_0x055e('0x8')](),controller['show']);router[_0x055e('0x7')](_0x055e('0xa'),auth[_0x055e('0x8')](),controller[_0x055e('0xb')]);router[_0x055e('0x7')]('/:id/fields',auth[_0x055e('0x8')](),controller[_0x055e('0xc')]);router[_0x055e('0xd')]('/',auth[_0x055e('0x8')](),controller[_0x055e('0xe')]);router['post']('/:id/configurations',auth[_0x055e('0x8')](),controller['addConfiguration']);router[_0x055e('0xf')](_0x055e('0x10'),auth[_0x055e('0x8')](),controller[_0x055e('0x11')]);router[_0x055e('0x12')](_0x055e('0x10'),auth[_0x055e('0x8')](),controller['destroy']);module[_0x055e('0x13')]=router;
\ No newline at end of file
+var _0x55ca=['post','create','addConfiguration','put','delete','exports','multer','util','../../components/auth/service','../../components/interaction/service','./intDeskAccount.controller','get','isAuthenticated','index','/:id','/:id/configurations','getConfigurations','getFields'];(function(_0x5cabfd,_0x5dea47){var _0x4bc06c=function(_0x4a2fea){while(--_0x4a2fea){_0x5cabfd['push'](_0x5cabfd['shift']());}};_0x4bc06c(++_0x5dea47);}(_0x55ca,0x126));var _0xa55c=function(_0x390a19,_0x5dd137){_0x390a19=_0x390a19-0x0;var _0x5d8230=_0x55ca[_0x390a19];return _0x5d8230;};'use strict';var multer=require(_0xa55c('0x0'));var util=require(_0xa55c('0x1'));var path=require('path');var express=require('express');var router=express['Router']();var auth=require(_0xa55c('0x2'));var interaction=require(_0xa55c('0x3'));var config=require('../../config/environment');var controller=require(_0xa55c('0x4'));router[_0xa55c('0x5')]('/',auth[_0xa55c('0x6')](),controller[_0xa55c('0x7')]);router[_0xa55c('0x5')](_0xa55c('0x8'),auth[_0xa55c('0x6')](),controller['show']);router[_0xa55c('0x5')](_0xa55c('0x9'),auth['isAuthenticated'](),controller[_0xa55c('0xa')]);router[_0xa55c('0x5')]('/:id/fields',auth['isAuthenticated'](),controller[_0xa55c('0xb')]);router[_0xa55c('0xc')]('/',auth[_0xa55c('0x6')](),controller[_0xa55c('0xd')]);router[_0xa55c('0xc')](_0xa55c('0x9'),auth[_0xa55c('0x6')](),controller[_0xa55c('0xe')]);router[_0xa55c('0xf')](_0xa55c('0x8'),auth['isAuthenticated'](),controller['update']);router[_0xa55c('0x10')]('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0xa55c('0x11')]=router;
\ No newline at end of file
index 325282a..16fc582 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf69e=['basic','ENUM','integrationTab','newTab','sequelize','exports','STRING'];(function(_0x5bb14d,_0x3f61c7){var _0x2486a4=function(_0xf21640){while(--_0xf21640){_0x5bb14d['push'](_0x5bb14d['shift']());}};_0x2486a4(++_0x3f61c7);}(_0xf69e,0x66));var _0xef69=function(_0xea8911,_0x1982f1){_0xea8911=_0xea8911-0x0;var _0x134c17=_0xf69e[_0xea8911];return _0x134c17;};'use strict';var Sequelize=require(_0xef69('0x0'));module[_0xef69('0x1')]={'name':{'type':Sequelize[_0xef69('0x2')]},'description':{'type':Sequelize[_0xef69('0x2')]},'username':{'type':Sequelize[_0xef69('0x2')]},'remoteUri':{'type':Sequelize['STRING']},'authType':{'type':Sequelize['ENUM'](_0xef69('0x3')),'defaultValue':_0xef69('0x3')},'password':{'type':Sequelize[_0xef69('0x2')]},'consumerKey':{'type':Sequelize['STRING']},'consumerSecret':{'type':Sequelize[_0xef69('0x2')]},'token':{'type':Sequelize[_0xef69('0x2')]},'tokenSecret':{'type':Sequelize[_0xef69('0x2')]},'serverUrl':{'type':Sequelize[_0xef69('0x2')]},'type':{'type':Sequelize[_0xef69('0x4')](_0xef69('0x5'),_0xef69('0x6')),'defaultValue':_0xef69('0x5')}};
\ No newline at end of file
+var _0x99c3=['basic','integrationTab','newTab','sequelize','STRING','ENUM'];(function(_0x3ca57f,_0x521a50){var _0x2a45f2=function(_0x5772e0){while(--_0x5772e0){_0x3ca57f['push'](_0x3ca57f['shift']());}};_0x2a45f2(++_0x521a50);}(_0x99c3,0x111));var _0x399c=function(_0xfae23b,_0x2be4ba){_0xfae23b=_0xfae23b-0x0;var _0x200640=_0x99c3[_0xfae23b];return _0x200640;};'use strict';var Sequelize=require(_0x399c('0x0'));module['exports']={'name':{'type':Sequelize[_0x399c('0x1')]},'description':{'type':Sequelize[_0x399c('0x1')]},'username':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize[_0x399c('0x1')]},'authType':{'type':Sequelize[_0x399c('0x2')]('basic'),'defaultValue':_0x399c('0x3')},'password':{'type':Sequelize[_0x399c('0x1')]},'consumerKey':{'type':Sequelize[_0x399c('0x1')]},'consumerSecret':{'type':Sequelize[_0x399c('0x1')]},'token':{'type':Sequelize[_0x399c('0x1')]},'tokenSecret':{'type':Sequelize[_0x399c('0x1')]},'serverUrl':{'type':Sequelize[_0x399c('0x1')]},'type':{'type':Sequelize[_0x399c('0x2')](_0x399c('0x4'),_0x399c('0x5')),'defaultValue':_0x399c('0x4')}};
\ No newline at end of file
index 042cf11..6e6d756 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ca1=['Descriptions','getDescriptions','type','DeskField','priority','remoteUri','authType','password','consumerKey','consumerSecret','GET','format','%s/custom_fields','application/json','basic','headers','Authorization','Basic\x20%s','%s:%s','username','base64','entries','active','label','test','statusCode','getFields','Wrong\x20credentials','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../config/logger','../../config/utils','../../mysqldb','../../components/integrations/configuration','http','request','then','info','DeskAccount,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','status','json','count','offset','limit','set','Content-Range','reject','destroy','end','stack','name','send','index','DeskAccount','rawAttributes','keys','query','dateStart','dateEnd','intersection','model','fields','attributes','length','nolimit','order','sort','where','filters','pick','add','day','merge','map','options','includeAll','include','findAll','catch','show','create','body','update','params','find','getConfigurations','findOne','DeskConfiguration','filter','hasOwnProperty','addConfiguration','AccountId','getSubjects','channel'];(function(_0x44fc7f,_0x30272b){var _0x1e5914=function(_0x431e33){while(--_0x431e33){_0x44fc7f['push'](_0x44fc7f['shift']());}};_0x1e5914(++_0x30272b);}(_0x1ca1,0x8e));var _0x11ca=function(_0x4344ce,_0x525f14){_0x4344ce=_0x4344ce-0x0;var _0x33c6e1=_0x1ca1[_0x4344ce];return _0x33c6e1;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x11ca('0x0'));var moment=require(_0x11ca('0x1'));var BPromise=require(_0x11ca('0x2'));var Mustache=require(_0x11ca('0x3'));var util=require(_0x11ca('0x4'));var path=require(_0x11ca('0x5'));var sox=require(_0x11ca('0x6'));var csv=require(_0x11ca('0x7'));var ejs=require(_0x11ca('0x8'));var fs=require('fs');var _=require(_0x11ca('0x9'));var squel=require(_0x11ca('0xa'));var crypto=require('crypto');var jsforce=require(_0x11ca('0xb'));var deskjs=require(_0x11ca('0xc'));var toCsv=require(_0x11ca('0x7'));var querystring=require(_0x11ca('0xd'));var Papa=require(_0x11ca('0xe'));var qs=require('../../components/parsers/qs');var logger=require(_0x11ca('0xf'))('api');var utils=require(_0x11ca('0x10'));var config=require('../../config/environment');var db=require(_0x11ca('0x11'))['db'];var integrations=require(_0x11ca('0x12'));var jayson=require('jayson/promise');var client=jayson['client'][_0x11ca('0x13')]({'port':0x232a});function respondWithRpcPromise(_0x415220,_0x21ff51,_0x13aa7f,_0x1d01d6){return new BPromise(function(_0x22a824,_0x539055){var _0x3a2f76=_0x1d01d6||client;return _0x3a2f76[_0x11ca('0x14')](_0x415220,_0x13aa7f)[_0x11ca('0x15')](function(_0x50b4b5){logger[_0x11ca('0x16')](_0x11ca('0x17'),_0x21ff51,'request\x20sent');logger[_0x11ca('0x18')]('DeskAccount,\x20%s,\x20%s,\x20%s',_0x21ff51,_0x11ca('0x19'),JSON[_0x11ca('0x1a')](_0x50b4b5));if(_0x50b4b5[_0x11ca('0x1b')]){if(_0x50b4b5[_0x11ca('0x1b')][_0x11ca('0x1c')]===0x1f4){logger[_0x11ca('0x1b')]('DeskAccount,\x20%s,\x20%s',_0x21ff51,_0x50b4b5[_0x11ca('0x1b')]['message']);return _0x539055(_0x50b4b5[_0x11ca('0x1b')]['message']);}logger[_0x11ca('0x1b')](_0x11ca('0x17'),_0x21ff51,_0x50b4b5[_0x11ca('0x1b')]['message']);return _0x22a824(_0x50b4b5[_0x11ca('0x1b')][_0x11ca('0x1d')]);}else{logger[_0x11ca('0x16')](_0x11ca('0x17'),_0x21ff51,_0x11ca('0x19'));_0x22a824(_0x50b4b5[_0x11ca('0x1e')][_0x11ca('0x1d')]);}})['catch'](function(_0x220a07){logger[_0x11ca('0x1b')]('DeskAccount,\x20%s,\x20%s',_0x21ff51,_0x220a07);_0x539055(_0x220a07);});});}function respondWithStatusCode(_0x163b2d,_0x27daa6){_0x27daa6=_0x27daa6||0xcc;return function(_0x5a9fb9){if(_0x5a9fb9){return _0x163b2d['sendStatus'](_0x27daa6);}return _0x163b2d['status'](_0x27daa6)['end']();};}function respondWithResult(_0x237a72,_0x5d6d77){_0x5d6d77=_0x5d6d77||0xc8;return function(_0x12c12b){if(_0x12c12b){return _0x237a72[_0x11ca('0x1f')](_0x5d6d77)[_0x11ca('0x20')](_0x12c12b);}};}function respondWithFilteredResult(_0x103ec6,_0x1ec2e6){return function(_0x40f97e){if(_0x40f97e){var _0x14e8e1=_0x40f97e[_0x11ca('0x21')],_0x25ba66=_0x1ec2e6[_0x11ca('0x22')],_0x4f0822=_0x1ec2e6[_0x11ca('0x22')]+_0x1ec2e6[_0x11ca('0x23')],_0x2aa439;if(_0x4f0822>=_0x14e8e1){_0x4f0822=_0x14e8e1;_0x2aa439=0xc8;}else{_0x2aa439=0xce;}_0x103ec6[_0x11ca('0x1f')](_0x2aa439);return _0x103ec6[_0x11ca('0x24')](_0x11ca('0x25'),_0x25ba66+'-'+_0x4f0822+'/'+_0x14e8e1)[_0x11ca('0x20')](_0x40f97e);}return null;};}function patchUpdates(_0x3052ae){return function(_0x5ecef8){try{jsonpatch['apply'](_0x5ecef8,_0x3052ae,!![]);}catch(_0x39e69f){return BPromise[_0x11ca('0x26')](_0x39e69f);}return _0x5ecef8['save']();};}function saveUpdates(_0x3cfd78,_0x510b0a){return function(_0x5ae519){if(_0x5ae519){return _0x5ae519['update'](_0x3cfd78)[_0x11ca('0x15')](function(_0x3eb6d4){return _0x3eb6d4;});}return null;};}function removeEntity(_0x3f1f5e,_0x52b58a){return function(_0x27790f){if(_0x27790f){return _0x27790f[_0x11ca('0x27')]()[_0x11ca('0x15')](function(){_0x3f1f5e[_0x11ca('0x1f')](0xcc)[_0x11ca('0x28')]();});}};}function handleEntityNotFound(_0x2e6b13,_0x3a8e1a){return function(_0x3dff0e){if(!_0x3dff0e){_0x2e6b13['sendStatus'](0x194);}return _0x3dff0e;};}function handleError(_0x4cb4dd,_0x20cc35){_0x20cc35=_0x20cc35||0x1f4;return function(_0x5d85dc){logger[_0x11ca('0x1b')](_0x5d85dc[_0x11ca('0x29')]);if(_0x5d85dc['name']){delete _0x5d85dc[_0x11ca('0x2a')];}_0x4cb4dd['status'](_0x20cc35)[_0x11ca('0x2b')](_0x5d85dc);};}exports[_0x11ca('0x2c')]=function(_0x22f439,_0xfeac69){var _0x2d1c4c={},_0x2bdd6b={},_0x12cb5d={'count':0x0,'rows':[]};var _0xa44ade=db[_0x11ca('0x2d')][_0x11ca('0x2e')];_0x2bdd6b['model']=_[_0x11ca('0x2f')](_0xa44ade);var _0x3f7171={'dateStart':_0x22f439[_0x11ca('0x30')][_0x11ca('0x31')],'dateEnd':_0x22f439['query'][_0x11ca('0x32')]};delete _0x22f439[_0x11ca('0x30')][_0x11ca('0x31')];delete _0x22f439[_0x11ca('0x30')][_0x11ca('0x32')];_0x2bdd6b[_0x11ca('0x30')]=_[_0x11ca('0x2f')](_0x22f439['query']);_0x2bdd6b['filters']=_[_0x11ca('0x33')](_0x2bdd6b[_0x11ca('0x34')],_0x2bdd6b[_0x11ca('0x30')]);_0x2d1c4c['attributes']=_[_0x11ca('0x33')](_0x2bdd6b['model'],qs[_0x11ca('0x35')](_0x22f439[_0x11ca('0x30')][_0x11ca('0x35')]));_0x2d1c4c[_0x11ca('0x36')]=_0x2d1c4c[_0x11ca('0x36')][_0x11ca('0x37')]?_0x2d1c4c[_0x11ca('0x36')]:_0x2bdd6b['model'];if(!_0x22f439['query']['hasOwnProperty'](_0x11ca('0x38'))){_0x2d1c4c[_0x11ca('0x23')]=qs[_0x11ca('0x23')](_0x22f439['query']['limit']);_0x2d1c4c[_0x11ca('0x22')]=qs[_0x11ca('0x22')](_0x22f439[_0x11ca('0x30')][_0x11ca('0x22')]);}_0x2d1c4c[_0x11ca('0x39')]=qs[_0x11ca('0x3a')](_0x22f439[_0x11ca('0x30')][_0x11ca('0x3a')]);_0x2d1c4c[_0x11ca('0x3b')]=qs[_0x11ca('0x3c')](_[_0x11ca('0x3d')](_0x22f439['query'],_0x2bdd6b[_0x11ca('0x3c')]));if(_0x3f7171[_0x11ca('0x31')]){if(_0x3f7171['dateEnd']){_0x3f7171[_0x11ca('0x32')]=moment(_0x3f7171[_0x11ca('0x32')])[_0x11ca('0x3e')](0x1,_0x11ca('0x3f'));}else{_0x3f7171[_0x11ca('0x32')]=moment(_0x3f7171['dateStart'])['add'](0x1,'day');}_[_0x11ca('0x40')](_0x2d1c4c['where'],{'createdAt':{'$gte':_0x3f7171[_0x11ca('0x31')],'$lte':_0x3f7171[_0x11ca('0x32')]}});}if(_0x22f439[_0x11ca('0x30')]['filter']){_0x2d1c4c['where']=_[_0x11ca('0x40')](_0x2d1c4c['where'],{'$or':_[_0x11ca('0x41')](_0x2d1c4c[_0x11ca('0x36')],function(_0x294049){var _0x46ae54={};_0x46ae54[_0x294049]={'$like':'%'+_0x22f439[_0x11ca('0x30')]['filter']+'%'};return _0x46ae54;})});}_0x2d1c4c=_[_0x11ca('0x40')]({},_0x2d1c4c,_0x22f439[_0x11ca('0x42')]);var _0x34011b={'where':_0x2d1c4c[_0x11ca('0x3b')]};return db[_0x11ca('0x2d')][_0x11ca('0x21')](_0x34011b)['then'](function(_0x5cd9ec){_0x12cb5d[_0x11ca('0x21')]=_0x5cd9ec;if(_0x22f439[_0x11ca('0x30')][_0x11ca('0x43')]){_0x2d1c4c[_0x11ca('0x44')]=[{'all':!![]}];}return db[_0x11ca('0x2d')][_0x11ca('0x45')](_0x2d1c4c);})['then'](function(_0xa4e2fe){_0x12cb5d['rows']=_0xa4e2fe;return _0x12cb5d;})['then'](respondWithFilteredResult(_0xfeac69,_0x2d1c4c))[_0x11ca('0x46')](handleError(_0xfeac69,null));};exports[_0x11ca('0x47')]=function(_0x571386,_0x25950f){var _0x32498a={'raw':![],'where':{'id':_0x571386['params']['id']}},_0x2b7e13={};_0x2b7e13[_0x11ca('0x34')]=_[_0x11ca('0x2f')](db['DeskAccount'][_0x11ca('0x2e')]);_0x2b7e13[_0x11ca('0x30')]=_[_0x11ca('0x2f')](_0x571386['query']);_0x2b7e13[_0x11ca('0x3c')]=_[_0x11ca('0x33')](_0x2b7e13['model'],_0x2b7e13[_0x11ca('0x30')]);_0x32498a[_0x11ca('0x36')]=_[_0x11ca('0x33')](_0x2b7e13[_0x11ca('0x34')],qs[_0x11ca('0x35')](_0x571386[_0x11ca('0x30')][_0x11ca('0x35')]));_0x32498a[_0x11ca('0x36')]=_0x32498a[_0x11ca('0x36')][_0x11ca('0x37')]?_0x32498a[_0x11ca('0x36')]:_0x2b7e13[_0x11ca('0x34')];if(_0x571386[_0x11ca('0x30')][_0x11ca('0x43')]){_0x32498a[_0x11ca('0x44')]=[{'all':!![]}];}_0x32498a=_[_0x11ca('0x40')]({},_0x32498a,_0x571386['options']);return db[_0x11ca('0x2d')]['find'](_0x32498a)[_0x11ca('0x15')](handleEntityNotFound(_0x25950f,null))[_0x11ca('0x15')](respondWithResult(_0x25950f,null))[_0x11ca('0x46')](handleError(_0x25950f,null));};exports[_0x11ca('0x48')]=function(_0x195954,_0x479d6b){return db[_0x11ca('0x2d')][_0x11ca('0x48')](_0x195954[_0x11ca('0x49')],{})['then'](respondWithResult(_0x479d6b,0xc9))[_0x11ca('0x46')](handleError(_0x479d6b,null));};exports[_0x11ca('0x4a')]=function(_0x23293b,_0x170f4f){if(_0x23293b[_0x11ca('0x49')]['id']){delete _0x23293b[_0x11ca('0x49')]['id'];}return db[_0x11ca('0x2d')]['find']({'where':{'id':_0x23293b[_0x11ca('0x4b')]['id']}})[_0x11ca('0x15')](handleEntityNotFound(_0x170f4f,null))[_0x11ca('0x15')](saveUpdates(_0x23293b[_0x11ca('0x49')],null))[_0x11ca('0x15')](respondWithResult(_0x170f4f,null))['catch'](handleError(_0x170f4f,null));};exports[_0x11ca('0x27')]=function(_0x44ea9a,_0x4ef7bf){return db[_0x11ca('0x2d')][_0x11ca('0x4c')]({'where':{'id':_0x44ea9a['params']['id']}})[_0x11ca('0x15')](handleEntityNotFound(_0x4ef7bf,null))[_0x11ca('0x15')](removeEntity(_0x4ef7bf,null))[_0x11ca('0x46')](handleError(_0x4ef7bf,null));};exports[_0x11ca('0x4d')]=function(_0x9b27dc,_0x521938,_0x156174){var _0x223102={};var _0x20839c={};var _0xa37b62;var _0x1c9968;return db[_0x11ca('0x2d')][_0x11ca('0x4e')]({'where':{'id':_0x9b27dc['params']['id']}})[_0x11ca('0x15')](handleEntityNotFound(_0x521938,null))['then'](function(_0x5af830){if(_0x5af830){_0xa37b62=_0x5af830;_0x20839c[_0x11ca('0x34')]=_[_0x11ca('0x2f')](db[_0x11ca('0x4f')]['rawAttributes']);_0x20839c[_0x11ca('0x30')]=_[_0x11ca('0x2f')](_0x9b27dc[_0x11ca('0x30')]);_0x20839c['filters']=_[_0x11ca('0x33')](_0x20839c[_0x11ca('0x34')],_0x20839c[_0x11ca('0x30')]);_0x223102[_0x11ca('0x36')]=_['intersection'](_0x20839c['model'],qs[_0x11ca('0x35')](_0x9b27dc[_0x11ca('0x30')][_0x11ca('0x35')]));_0x223102[_0x11ca('0x36')]=_0x223102[_0x11ca('0x36')][_0x11ca('0x37')]?_0x223102[_0x11ca('0x36')]:_0x20839c[_0x11ca('0x34')];_0x223102['order']=qs[_0x11ca('0x3a')](_0x9b27dc[_0x11ca('0x30')][_0x11ca('0x3a')]);_0x223102[_0x11ca('0x3b')]=qs[_0x11ca('0x3c')](_[_0x11ca('0x3d')](_0x9b27dc[_0x11ca('0x30')],_0x20839c[_0x11ca('0x3c')]));if(_0x9b27dc['query']['filter']){_0x223102[_0x11ca('0x3b')]=_[_0x11ca('0x40')](_0x223102['where'],{'$or':_[_0x11ca('0x41')](_0x223102[_0x11ca('0x36')],function(_0x4fe5a5){var _0x38b96f={};_0x38b96f[_0x4fe5a5]={'$like':'%'+_0x9b27dc[_0x11ca('0x30')][_0x11ca('0x50')]+'%'};return _0x38b96f;})});}_0x223102=_['merge']({},_0x223102,_0x9b27dc['options']);return _0xa37b62[_0x11ca('0x4d')](_0x223102);}})['then'](function(_0x42fa71){if(_0x42fa71){_0x1c9968=_0x42fa71[_0x11ca('0x37')];if(!_0x9b27dc[_0x11ca('0x30')][_0x11ca('0x51')](_0x11ca('0x38'))){_0x223102[_0x11ca('0x23')]=qs['limit'](_0x9b27dc[_0x11ca('0x30')][_0x11ca('0x23')]);_0x223102[_0x11ca('0x22')]=qs[_0x11ca('0x22')](_0x9b27dc[_0x11ca('0x30')][_0x11ca('0x22')]);}return _0xa37b62['getConfigurations'](_0x223102);}})[_0x11ca('0x15')](function(_0x4245a8){if(_0x4245a8){return _0x4245a8?{'count':_0x1c9968,'rows':_0x4245a8}:null;}})[_0x11ca('0x15')](respondWithResult(_0x521938,null))[_0x11ca('0x46')](handleError(_0x521938,null));};exports[_0x11ca('0x52')]=function(_0x602ae6,_0x20e5fa,_0x99bb4a){if(_0x602ae6[_0x11ca('0x49')]['id']){delete _0x602ae6[_0x11ca('0x49')]['id'];}return db[_0x11ca('0x2d')][_0x11ca('0x4e')]({'where':{'id':_0x602ae6['params']['id']}})['then'](handleEntityNotFound(_0x20e5fa,null))[_0x11ca('0x15')](function(_0x4a91de){if(_0x4a91de){_0x602ae6['body'][_0x11ca('0x53')]=_0x4a91de['id'];_0x602ae6[_0x11ca('0x49')]['Subjects']=integrations[_0x11ca('0x54')](_0x602ae6[_0x11ca('0x49')][_0x11ca('0x55')],_0x602ae6['body']['type']);_0x602ae6[_0x11ca('0x49')][_0x11ca('0x56')]=integrations[_0x11ca('0x57')](_0x602ae6[_0x11ca('0x49')][_0x11ca('0x55')],_0x602ae6[_0x11ca('0x49')][_0x11ca('0x58')]);return db[_0x11ca('0x4f')][_0x11ca('0x48')](_0x602ae6[_0x11ca('0x49')],{'include':[{'model':db[_0x11ca('0x59')],'as':'Subjects'},{'model':db['DeskField'],'as':_0x11ca('0x56')}]});}return null;})[_0x11ca('0x15')](respondWithResult(_0x20e5fa,null))[_0x11ca('0x46')](handleError(_0x20e5fa,null));};exports['getFields']=function(_0x4c1cda,_0x452f7c,_0x47a96b){var _0x1bc4cd=[{'name':_0x11ca('0x5a'),'label':_0x11ca('0x5a'),'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}]}];return db[_0x11ca('0x2d')][_0x11ca('0x4e')]({'where':{'id':_0x4c1cda[_0x11ca('0x4b')]['id']},'attributes':['id',_0x11ca('0x5b'),_0x11ca('0x5c'),'username',_0x11ca('0x5d'),_0x11ca('0x5e'),_0x11ca('0x5f'),'token','tokenSecret']})[_0x11ca('0x15')](handleEntityNotFound(_0x452f7c,null))[_0x11ca('0x15')](function(_0x3fbda4){if(_0x3fbda4){var _0x587800={'method':_0x11ca('0x60'),'uri':util[_0x11ca('0x61')](_0x11ca('0x62'),_0x3fbda4['remoteUri']),'headers':{'Content-Type':_0x11ca('0x63'),'Accept':'application/json'},'json':!![]};if(_0x3fbda4['authType']===_0x11ca('0x64')){_0x587800[_0x11ca('0x65')][_0x11ca('0x66')]=util[_0x11ca('0x61')](_0x11ca('0x67'),new Buffer(util['format'](_0x11ca('0x68'),_0x3fbda4[_0x11ca('0x69')],_0x3fbda4[_0x11ca('0x5d')]))['toString'](_0x11ca('0x6a')));}return rp(_0x587800)[_0x11ca('0x15')](function(_0xf9bd4){return _0x1bc4cd['concat'](_['map'](_0xf9bd4['_embedded'][_0x11ca('0x6b')],function(_0x13f449){return{'id':_0x13f449[_0x11ca('0x2a')],'name':_0x13f449[_0x11ca('0x2a')],'type':_0x13f449[_0x11ca('0x58')],'active':_0x13f449[_0x11ca('0x6c')],'label':_0x13f449[_0x11ca('0x6d')],'custom':!![]};}));});}})[_0x11ca('0x15')](function(_0x380087){return{'count':_0x380087[_0x11ca('0x37')],'rows':_0x380087};})[_0x11ca('0x15')](respondWithResult(_0x452f7c,null))[_0x11ca('0x46')](function(_0x10949c){var _0x5e954d=_0x4c1cda[_0x11ca('0x30')][_0x11ca('0x6e')]?0x1f4:_0x10949c[_0x11ca('0x6f')]||0x1f4;logger[_0x11ca('0x1b')]('getFields,\x20%s,\x20%s,\x20%s',_0x11ca('0x70'),_0x5e954d,JSON[_0x11ca('0x1a')](_0x10949c));delete _0x10949c['name'];if(_0x5e954d===0x191){_0x5e954d=0x190;}_0x452f7c[_0x11ca('0x1f')](_0x5e954d)[_0x11ca('0x2b')](_0x4c1cda[_0x11ca('0x30')][_0x11ca('0x6e')]?{'message':_0x11ca('0x71'),'statusCode':_0x10949c['statusCode']}:_0x10949c);});};
\ No newline at end of file
+var _0xc2e5=['authType','username','consumerSecret','GET','remoteUri','application/json','basic','Authorization','format','Basic\x20%s','%s:%s','toString','base64','entries','active','label','test','statusCode','getFields','Wrong\x20credentials','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','lodash','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../components/integrations/configuration','jayson/promise','client','http','then','info','DeskAccount,\x20%s,\x20%s','request\x20sent','debug','DeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','status','count','offset','limit','set','Content-Range','json','apply','reject','save','update','destroy','end','sendStatus','stack','name','send','index','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','filter','merge','options','DeskAccount','includeAll','rows','show','params','include','find','create','body','getConfigurations','findOne','DeskConfiguration','map','Subjects','getSubjects','channel','type','Descriptions','getDescriptions','DeskField','priority'];(function(_0x3db518,_0x498b54){var _0x373f2c=function(_0x166ebf){while(--_0x166ebf){_0x3db518['push'](_0x3db518['shift']());}};_0x373f2c(++_0x498b54);}(_0xc2e5,0x87));var _0x5c2e=function(_0x2f89c0,_0x455702){_0x2f89c0=_0x2f89c0-0x0;var _0x164223=_0xc2e5[_0x2f89c0];return _0x164223;};'use strict';var jsonpatch=require(_0x5c2e('0x0'));var rp=require(_0x5c2e('0x1'));var moment=require(_0x5c2e('0x2'));var BPromise=require(_0x5c2e('0x3'));var Mustache=require(_0x5c2e('0x4'));var util=require('util');var path=require(_0x5c2e('0x5'));var sox=require(_0x5c2e('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x5c2e('0x7'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x5c2e('0x8'));var deskjs=require(_0x5c2e('0x9'));var toCsv=require(_0x5c2e('0xa'));var querystring=require(_0x5c2e('0xb'));var Papa=require(_0x5c2e('0xc'));var qs=require(_0x5c2e('0xd'));var logger=require(_0x5c2e('0xe'))(_0x5c2e('0xf'));var utils=require(_0x5c2e('0x10'));var config=require(_0x5c2e('0x11'));var db=require('../../mysqldb')['db'];var integrations=require(_0x5c2e('0x12'));var jayson=require(_0x5c2e('0x13'));var client=jayson[_0x5c2e('0x14')][_0x5c2e('0x15')]({'port':0x232a});function respondWithRpcPromise(_0x1b0ebd,_0x699c01,_0xf1cb1b,_0x5cd7e8){return new BPromise(function(_0x4436a3,_0x2ba158){var _0x5f2759=_0x5cd7e8||client;return _0x5f2759['request'](_0x1b0ebd,_0xf1cb1b)[_0x5c2e('0x16')](function(_0x4311ac){logger[_0x5c2e('0x17')](_0x5c2e('0x18'),_0x699c01,_0x5c2e('0x19'));logger[_0x5c2e('0x1a')](_0x5c2e('0x1b'),_0x699c01,_0x5c2e('0x19'),JSON[_0x5c2e('0x1c')](_0x4311ac));if(_0x4311ac[_0x5c2e('0x1d')]){if(_0x4311ac['error'][_0x5c2e('0x1e')]===0x1f4){logger[_0x5c2e('0x1d')]('DeskAccount,\x20%s,\x20%s',_0x699c01,_0x4311ac['error'][_0x5c2e('0x1f')]);return _0x2ba158(_0x4311ac['error'][_0x5c2e('0x1f')]);}logger[_0x5c2e('0x1d')]('DeskAccount,\x20%s,\x20%s',_0x699c01,_0x4311ac[_0x5c2e('0x1d')][_0x5c2e('0x1f')]);return _0x4436a3(_0x4311ac[_0x5c2e('0x1d')][_0x5c2e('0x1f')]);}else{logger['info'](_0x5c2e('0x18'),_0x699c01,_0x5c2e('0x19'));_0x4436a3(_0x4311ac[_0x5c2e('0x20')][_0x5c2e('0x1f')]);}})[_0x5c2e('0x21')](function(_0x459b2f){logger['error']('DeskAccount,\x20%s,\x20%s',_0x699c01,_0x459b2f);_0x2ba158(_0x459b2f);});});}function respondWithStatusCode(_0xadaf50,_0x4ec069){_0x4ec069=_0x4ec069||0xcc;return function(_0x455cc6){if(_0x455cc6){return _0xadaf50['sendStatus'](_0x4ec069);}return _0xadaf50['status'](_0x4ec069)['end']();};}function respondWithResult(_0x1e52a3,_0x294de8){_0x294de8=_0x294de8||0xc8;return function(_0x106d01){if(_0x106d01){return _0x1e52a3[_0x5c2e('0x22')](_0x294de8)['json'](_0x106d01);}};}function respondWithFilteredResult(_0x819453,_0x24b09f){return function(_0xe2132a){if(_0xe2132a){var _0x19d96a=_0xe2132a[_0x5c2e('0x23')],_0x317e3e=_0x24b09f[_0x5c2e('0x24')],_0x53c6f7=_0x24b09f['offset']+_0x24b09f[_0x5c2e('0x25')],_0x35a56b;if(_0x53c6f7>=_0x19d96a){_0x53c6f7=_0x19d96a;_0x35a56b=0xc8;}else{_0x35a56b=0xce;}_0x819453['status'](_0x35a56b);return _0x819453[_0x5c2e('0x26')](_0x5c2e('0x27'),_0x317e3e+'-'+_0x53c6f7+'/'+_0x19d96a)[_0x5c2e('0x28')](_0xe2132a);}return null;};}function patchUpdates(_0x214926){return function(_0x518af3){try{jsonpatch[_0x5c2e('0x29')](_0x518af3,_0x214926,!![]);}catch(_0x37d727){return BPromise[_0x5c2e('0x2a')](_0x37d727);}return _0x518af3[_0x5c2e('0x2b')]();};}function saveUpdates(_0x2de061,_0x588beb){return function(_0x533fd8){if(_0x533fd8){return _0x533fd8[_0x5c2e('0x2c')](_0x2de061)[_0x5c2e('0x16')](function(_0x27d230){return _0x27d230;});}return null;};}function removeEntity(_0x496816,_0xb245b6){return function(_0x2e5546){if(_0x2e5546){return _0x2e5546[_0x5c2e('0x2d')]()[_0x5c2e('0x16')](function(){_0x496816[_0x5c2e('0x22')](0xcc)[_0x5c2e('0x2e')]();});}};}function handleEntityNotFound(_0x7069f6,_0x1a75ad){return function(_0x5f4553){if(!_0x5f4553){_0x7069f6[_0x5c2e('0x2f')](0x194);}return _0x5f4553;};}function handleError(_0x939653,_0x3c94c0){_0x3c94c0=_0x3c94c0||0x1f4;return function(_0x177abe){logger[_0x5c2e('0x1d')](_0x177abe[_0x5c2e('0x30')]);if(_0x177abe[_0x5c2e('0x31')]){delete _0x177abe[_0x5c2e('0x31')];}_0x939653[_0x5c2e('0x22')](_0x3c94c0)[_0x5c2e('0x32')](_0x177abe);};}exports[_0x5c2e('0x33')]=function(_0x2ff2a3,_0x2fad06){var _0x29bd3a={},_0x45b341={},_0x65a4b2={'count':0x0,'rows':[]};var _0x22ceb0=db['DeskAccount'][_0x5c2e('0x34')];_0x45b341[_0x5c2e('0x35')]=_[_0x5c2e('0x36')](_0x22ceb0);var _0x5e33e2={'dateStart':_0x2ff2a3[_0x5c2e('0x37')]['dateStart'],'dateEnd':_0x2ff2a3[_0x5c2e('0x37')]['dateEnd']};delete _0x2ff2a3[_0x5c2e('0x37')][_0x5c2e('0x38')];delete _0x2ff2a3[_0x5c2e('0x37')][_0x5c2e('0x39')];_0x45b341[_0x5c2e('0x37')]=_[_0x5c2e('0x36')](_0x2ff2a3[_0x5c2e('0x37')]);_0x45b341[_0x5c2e('0x3a')]=_[_0x5c2e('0x3b')](_0x45b341[_0x5c2e('0x35')],_0x45b341['query']);_0x29bd3a[_0x5c2e('0x3c')]=_[_0x5c2e('0x3b')](_0x45b341[_0x5c2e('0x35')],qs[_0x5c2e('0x3d')](_0x2ff2a3[_0x5c2e('0x37')][_0x5c2e('0x3d')]));_0x29bd3a[_0x5c2e('0x3c')]=_0x29bd3a[_0x5c2e('0x3c')][_0x5c2e('0x3e')]?_0x29bd3a[_0x5c2e('0x3c')]:_0x45b341[_0x5c2e('0x35')];if(!_0x2ff2a3[_0x5c2e('0x37')][_0x5c2e('0x3f')](_0x5c2e('0x40'))){_0x29bd3a[_0x5c2e('0x25')]=qs[_0x5c2e('0x25')](_0x2ff2a3[_0x5c2e('0x37')][_0x5c2e('0x25')]);_0x29bd3a['offset']=qs[_0x5c2e('0x24')](_0x2ff2a3['query'][_0x5c2e('0x24')]);}_0x29bd3a[_0x5c2e('0x41')]=qs[_0x5c2e('0x42')](_0x2ff2a3[_0x5c2e('0x37')][_0x5c2e('0x42')]);_0x29bd3a[_0x5c2e('0x43')]=qs[_0x5c2e('0x3a')](_[_0x5c2e('0x44')](_0x2ff2a3[_0x5c2e('0x37')],_0x45b341[_0x5c2e('0x3a')]));if(_0x5e33e2[_0x5c2e('0x38')]){if(_0x5e33e2[_0x5c2e('0x39')]){_0x5e33e2['dateEnd']=moment(_0x5e33e2[_0x5c2e('0x39')])[_0x5c2e('0x45')](0x1,_0x5c2e('0x46'));}else{_0x5e33e2[_0x5c2e('0x39')]=moment(_0x5e33e2[_0x5c2e('0x38')])[_0x5c2e('0x45')](0x1,_0x5c2e('0x46'));}_['merge'](_0x29bd3a[_0x5c2e('0x43')],{'createdAt':{'$gte':_0x5e33e2['dateStart'],'$lte':_0x5e33e2[_0x5c2e('0x39')]}});}if(_0x2ff2a3[_0x5c2e('0x37')]['filter']){_0x29bd3a[_0x5c2e('0x43')]=_['merge'](_0x29bd3a[_0x5c2e('0x43')],{'$or':_['map'](_0x29bd3a[_0x5c2e('0x3c')],function(_0x589d66){var _0x162d16={};_0x162d16[_0x589d66]={'$like':'%'+_0x2ff2a3['query'][_0x5c2e('0x47')]+'%'};return _0x162d16;})});}_0x29bd3a=_[_0x5c2e('0x48')]({},_0x29bd3a,_0x2ff2a3[_0x5c2e('0x49')]);var _0x4c6bdf={'where':_0x29bd3a[_0x5c2e('0x43')]};return db[_0x5c2e('0x4a')][_0x5c2e('0x23')](_0x4c6bdf)[_0x5c2e('0x16')](function(_0x57e80a){_0x65a4b2[_0x5c2e('0x23')]=_0x57e80a;if(_0x2ff2a3[_0x5c2e('0x37')][_0x5c2e('0x4b')]){_0x29bd3a['include']=[{'all':!![]}];}return db[_0x5c2e('0x4a')]['findAll'](_0x29bd3a);})['then'](function(_0x2762d6){_0x65a4b2[_0x5c2e('0x4c')]=_0x2762d6;return _0x65a4b2;})[_0x5c2e('0x16')](respondWithFilteredResult(_0x2fad06,_0x29bd3a))['catch'](handleError(_0x2fad06,null));};exports[_0x5c2e('0x4d')]=function(_0x2fc512,_0x5ce185){var _0x2c7533={'raw':![],'where':{'id':_0x2fc512[_0x5c2e('0x4e')]['id']}},_0x36157c={};_0x36157c[_0x5c2e('0x35')]=_['keys'](db[_0x5c2e('0x4a')][_0x5c2e('0x34')]);_0x36157c['query']=_[_0x5c2e('0x36')](_0x2fc512[_0x5c2e('0x37')]);_0x36157c[_0x5c2e('0x3a')]=_[_0x5c2e('0x3b')](_0x36157c[_0x5c2e('0x35')],_0x36157c['query']);_0x2c7533[_0x5c2e('0x3c')]=_[_0x5c2e('0x3b')](_0x36157c[_0x5c2e('0x35')],qs['fields'](_0x2fc512[_0x5c2e('0x37')][_0x5c2e('0x3d')]));_0x2c7533['attributes']=_0x2c7533[_0x5c2e('0x3c')][_0x5c2e('0x3e')]?_0x2c7533[_0x5c2e('0x3c')]:_0x36157c[_0x5c2e('0x35')];if(_0x2fc512[_0x5c2e('0x37')]['includeAll']){_0x2c7533[_0x5c2e('0x4f')]=[{'all':!![]}];}_0x2c7533=_[_0x5c2e('0x48')]({},_0x2c7533,_0x2fc512[_0x5c2e('0x49')]);return db[_0x5c2e('0x4a')][_0x5c2e('0x50')](_0x2c7533)[_0x5c2e('0x16')](handleEntityNotFound(_0x5ce185,null))[_0x5c2e('0x16')](respondWithResult(_0x5ce185,null))[_0x5c2e('0x21')](handleError(_0x5ce185,null));};exports[_0x5c2e('0x51')]=function(_0x3cb3c0,_0x9a316b){return db[_0x5c2e('0x4a')][_0x5c2e('0x51')](_0x3cb3c0['body'],{})[_0x5c2e('0x16')](respondWithResult(_0x9a316b,0xc9))[_0x5c2e('0x21')](handleError(_0x9a316b,null));};exports[_0x5c2e('0x2c')]=function(_0x4adb8c,_0x4d5a11){if(_0x4adb8c['body']['id']){delete _0x4adb8c[_0x5c2e('0x52')]['id'];}return db[_0x5c2e('0x4a')][_0x5c2e('0x50')]({'where':{'id':_0x4adb8c['params']['id']}})[_0x5c2e('0x16')](handleEntityNotFound(_0x4d5a11,null))[_0x5c2e('0x16')](saveUpdates(_0x4adb8c[_0x5c2e('0x52')],null))[_0x5c2e('0x16')](respondWithResult(_0x4d5a11,null))[_0x5c2e('0x21')](handleError(_0x4d5a11,null));};exports['destroy']=function(_0x5059f2,_0x139a7a){return db[_0x5c2e('0x4a')][_0x5c2e('0x50')]({'where':{'id':_0x5059f2['params']['id']}})['then'](handleEntityNotFound(_0x139a7a,null))['then'](removeEntity(_0x139a7a,null))[_0x5c2e('0x21')](handleError(_0x139a7a,null));};exports[_0x5c2e('0x53')]=function(_0x123d4f,_0x23901e,_0x33140b){var _0x59f440={};var _0x2a7a31={};var _0x595489;var _0x471e93;return db[_0x5c2e('0x4a')][_0x5c2e('0x54')]({'where':{'id':_0x123d4f['params']['id']}})['then'](handleEntityNotFound(_0x23901e,null))[_0x5c2e('0x16')](function(_0x698e37){if(_0x698e37){_0x595489=_0x698e37;_0x2a7a31['model']=_[_0x5c2e('0x36')](db[_0x5c2e('0x55')][_0x5c2e('0x34')]);_0x2a7a31[_0x5c2e('0x37')]=_['keys'](_0x123d4f['query']);_0x2a7a31[_0x5c2e('0x3a')]=_[_0x5c2e('0x3b')](_0x2a7a31[_0x5c2e('0x35')],_0x2a7a31[_0x5c2e('0x37')]);_0x59f440[_0x5c2e('0x3c')]=_['intersection'](_0x2a7a31[_0x5c2e('0x35')],qs['fields'](_0x123d4f[_0x5c2e('0x37')][_0x5c2e('0x3d')]));_0x59f440[_0x5c2e('0x3c')]=_0x59f440['attributes'][_0x5c2e('0x3e')]?_0x59f440[_0x5c2e('0x3c')]:_0x2a7a31[_0x5c2e('0x35')];_0x59f440[_0x5c2e('0x41')]=qs[_0x5c2e('0x42')](_0x123d4f[_0x5c2e('0x37')][_0x5c2e('0x42')]);_0x59f440['where']=qs[_0x5c2e('0x3a')](_['pick'](_0x123d4f[_0x5c2e('0x37')],_0x2a7a31['filters']));if(_0x123d4f[_0x5c2e('0x37')][_0x5c2e('0x47')]){_0x59f440[_0x5c2e('0x43')]=_[_0x5c2e('0x48')](_0x59f440[_0x5c2e('0x43')],{'$or':_[_0x5c2e('0x56')](_0x59f440[_0x5c2e('0x3c')],function(_0x456282){var _0x12121b={};_0x12121b[_0x456282]={'$like':'%'+_0x123d4f[_0x5c2e('0x37')][_0x5c2e('0x47')]+'%'};return _0x12121b;})});}_0x59f440=_[_0x5c2e('0x48')]({},_0x59f440,_0x123d4f[_0x5c2e('0x49')]);return _0x595489[_0x5c2e('0x53')](_0x59f440);}})[_0x5c2e('0x16')](function(_0x36a678){if(_0x36a678){_0x471e93=_0x36a678[_0x5c2e('0x3e')];if(!_0x123d4f['query'][_0x5c2e('0x3f')](_0x5c2e('0x40'))){_0x59f440[_0x5c2e('0x25')]=qs['limit'](_0x123d4f['query']['limit']);_0x59f440[_0x5c2e('0x24')]=qs[_0x5c2e('0x24')](_0x123d4f[_0x5c2e('0x37')][_0x5c2e('0x24')]);}return _0x595489[_0x5c2e('0x53')](_0x59f440);}})['then'](function(_0x2320f3){if(_0x2320f3){return _0x2320f3?{'count':_0x471e93,'rows':_0x2320f3}:null;}})[_0x5c2e('0x16')](respondWithResult(_0x23901e,null))[_0x5c2e('0x21')](handleError(_0x23901e,null));};exports['addConfiguration']=function(_0x1ee27a,_0x2b3025,_0x35ef9b){if(_0x1ee27a[_0x5c2e('0x52')]['id']){delete _0x1ee27a[_0x5c2e('0x52')]['id'];}return db[_0x5c2e('0x4a')]['findOne']({'where':{'id':_0x1ee27a[_0x5c2e('0x4e')]['id']}})[_0x5c2e('0x16')](handleEntityNotFound(_0x2b3025,null))['then'](function(_0x26d7f7){if(_0x26d7f7){_0x1ee27a[_0x5c2e('0x52')]['AccountId']=_0x26d7f7['id'];_0x1ee27a[_0x5c2e('0x52')][_0x5c2e('0x57')]=integrations[_0x5c2e('0x58')](_0x1ee27a[_0x5c2e('0x52')][_0x5c2e('0x59')],_0x1ee27a['body'][_0x5c2e('0x5a')]);_0x1ee27a[_0x5c2e('0x52')][_0x5c2e('0x5b')]=integrations[_0x5c2e('0x5c')](_0x1ee27a[_0x5c2e('0x52')]['channel'],_0x1ee27a['body']['type']);return db[_0x5c2e('0x55')]['create'](_0x1ee27a[_0x5c2e('0x52')],{'include':[{'model':db['DeskField'],'as':_0x5c2e('0x57')},{'model':db[_0x5c2e('0x5d')],'as':_0x5c2e('0x5b')}]});}return null;})[_0x5c2e('0x16')](respondWithResult(_0x2b3025,null))['catch'](handleError(_0x2b3025,null));};exports['getFields']=function(_0x4d8c15,_0x407969,_0x4eedde){var _0x3f478e=[{'name':_0x5c2e('0x5e'),'label':_0x5c2e('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}]}];return db[_0x5c2e('0x4a')][_0x5c2e('0x54')]({'where':{'id':_0x4d8c15['params']['id']},'attributes':['id','remoteUri',_0x5c2e('0x5f'),_0x5c2e('0x60'),'password','consumerKey',_0x5c2e('0x61'),'token','tokenSecret']})[_0x5c2e('0x16')](handleEntityNotFound(_0x407969,null))[_0x5c2e('0x16')](function(_0x970c7a){if(_0x970c7a){var _0xe90376={'method':_0x5c2e('0x62'),'uri':util['format']('%s/custom_fields',_0x970c7a[_0x5c2e('0x63')]),'headers':{'Content-Type':_0x5c2e('0x64'),'Accept':_0x5c2e('0x64')},'json':!![]};if(_0x970c7a[_0x5c2e('0x5f')]===_0x5c2e('0x65')){_0xe90376['headers'][_0x5c2e('0x66')]=util[_0x5c2e('0x67')](_0x5c2e('0x68'),new Buffer(util[_0x5c2e('0x67')](_0x5c2e('0x69'),_0x970c7a['username'],_0x970c7a['password']))[_0x5c2e('0x6a')](_0x5c2e('0x6b')));}return rp(_0xe90376)[_0x5c2e('0x16')](function(_0x123f01){return _0x3f478e['concat'](_[_0x5c2e('0x56')](_0x123f01['_embedded'][_0x5c2e('0x6c')],function(_0x1576a3){return{'id':_0x1576a3['name'],'name':_0x1576a3[_0x5c2e('0x31')],'type':_0x1576a3[_0x5c2e('0x5a')],'active':_0x1576a3[_0x5c2e('0x6d')],'label':_0x1576a3[_0x5c2e('0x6e')],'custom':!![]};}));});}})[_0x5c2e('0x16')](function(_0x24dd17){return{'count':_0x24dd17['length'],'rows':_0x24dd17};})[_0x5c2e('0x16')](respondWithResult(_0x407969,null))[_0x5c2e('0x21')](function(_0x501db4){var _0xcc302a=_0x4d8c15[_0x5c2e('0x37')][_0x5c2e('0x6f')]?0x1f4:_0x501db4[_0x5c2e('0x70')]||0x1f4;logger['error']('getFields,\x20%s,\x20%s,\x20%s',_0x5c2e('0x71'),_0xcc302a,JSON['stringify'](_0x501db4));delete _0x501db4[_0x5c2e('0x31')];if(_0xcc302a===0x191){_0xcc302a=0x190;}_0x407969['status'](_0xcc302a)[_0x5c2e('0x32')](_0x4d8c15[_0x5c2e('0x37')][_0x5c2e('0x6f')]?{'message':_0x5c2e('0x72'),'statusCode':_0x501db4[_0x5c2e('0x70')]}:_0x501db4);});};
\ No newline at end of file
index d712768..14c539b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6d7=['define','DeskAccount','int_desk_accounts','lodash','util','../../config/logger','api','request-promise','./intDeskAccount.attributes','../../components/integrations/configuration','exports'];(function(_0x25dc6f,_0x367456){var _0x37fe5d=function(_0x5b13ed){while(--_0x5b13ed){_0x25dc6f['push'](_0x25dc6f['shift']());}};_0x37fe5d(++_0x367456);}(_0xc6d7,0x71));var _0x7c6d=function(_0x572357,_0x562c0e){_0x572357=_0x572357-0x0;var _0x40949a=_0xc6d7[_0x572357];return _0x40949a;};'use strict';var _=require(_0x7c6d('0x0'));var util=require(_0x7c6d('0x1'));var logger=require(_0x7c6d('0x2'))(_0x7c6d('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x7c6d('0x4'));var attributes=require(_0x7c6d('0x5'));var integrations=require(_0x7c6d('0x6'));module[_0x7c6d('0x7')]=function(_0x7b13c,_0x24d0fb){return _0x7b13c[_0x7c6d('0x8')](_0x7c6d('0x9'),attributes,{'tableName':_0x7c6d('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x29b1=['define','DeskAccount','lodash','util','../../config/logger','api','moment','request-promise','./intDeskAccount.attributes','../../components/integrations/configuration','exports'];(function(_0x40eec9,_0x817a67){var _0xfee890=function(_0x186640){while(--_0x186640){_0x40eec9['push'](_0x40eec9['shift']());}};_0xfee890(++_0x817a67);}(_0x29b1,0x16d));var _0x129b=function(_0x1ae5ab,_0xc5d441){_0x1ae5ab=_0x1ae5ab-0x0;var _0x1ce001=_0x29b1[_0x1ae5ab];return _0x1ce001;};'use strict';var _=require(_0x129b('0x0'));var util=require(_0x129b('0x1'));var logger=require(_0x129b('0x2'))(_0x129b('0x3'));var moment=require(_0x129b('0x4'));var BPromise=require('bluebird');var rp=require(_0x129b('0x5'));var attributes=require(_0x129b('0x6'));var integrations=require(_0x129b('0x7'));module[_0x129b('0x8')]=function(_0x2fcccd,_0x3bf771){return _0x2fcccd[_0x129b('0x9')](_0x129b('0xa'),attributes,{'tableName':'int_desk_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 5be5b6c..8548887 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf9eb=['rpc','../../config/environment','jayson/promise','client','http','request','then','info','DeskAccount,\x20%s,\x20%s','request\x20sent','DeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','GetDeskAccount','DeskAccount','options','raw','where','include','map','model','attributes','debug','find','ShowDeskAccount','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils'];(function(_0xf7dd85,_0x49044f){var _0x19673e=function(_0x54b2c3){while(--_0x54b2c3){_0xf7dd85['push'](_0xf7dd85['shift']());}};_0x19673e(++_0x49044f);}(_0xf9eb,0xee));var _0xbf9e=function(_0x175010,_0x27719f){_0x175010=_0x175010-0x0;var _0x17bb6b=_0xf9eb[_0x175010];return _0x17bb6b;};'use strict';var _=require(_0xbf9e('0x0'));var util=require(_0xbf9e('0x1'));var moment=require(_0xbf9e('0x2'));var BPromise=require(_0xbf9e('0x3'));var rs=require(_0xbf9e('0x4'));var fs=require('fs');var db=require(_0xbf9e('0x5'))['db'];var utils=require(_0xbf9e('0x6'));var logger=require('../../config/logger')(_0xbf9e('0x7'));var config=require(_0xbf9e('0x8'));var jayson=require(_0xbf9e('0x9'));var client=jayson[_0xbf9e('0xa')][_0xbf9e('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x300184,_0x22f933,_0xe7dd78){return new BPromise(function(_0x377c84,_0x2268aa){return client[_0xbf9e('0xc')](_0x300184,_0xe7dd78)[_0xbf9e('0xd')](function(_0x4a069b){logger[_0xbf9e('0xe')](_0xbf9e('0xf'),_0x22f933,_0xbf9e('0x10'));logger['debug'](_0xbf9e('0x11'),_0x22f933,_0xbf9e('0x10'),JSON[_0xbf9e('0x12')](_0x4a069b));if(_0x4a069b[_0xbf9e('0x13')]){if(_0x4a069b['error'][_0xbf9e('0x14')]===0x1f4){logger['error'](_0xbf9e('0xf'),_0x22f933,_0x4a069b[_0xbf9e('0x13')]['message']);return _0x2268aa(_0x4a069b[_0xbf9e('0x13')][_0xbf9e('0x15')]);}logger[_0xbf9e('0x13')](_0xbf9e('0xf'),_0x22f933,_0x4a069b[_0xbf9e('0x13')][_0xbf9e('0x15')]);return _0x377c84(_0x4a069b['error'][_0xbf9e('0x15')]);}else{logger[_0xbf9e('0xe')](_0xbf9e('0xf'),_0x22f933,_0xbf9e('0x10'));_0x377c84(_0x4a069b['result'][_0xbf9e('0x15')]);}})[_0xbf9e('0x16')](function(_0x2339b8){logger[_0xbf9e('0x13')](_0xbf9e('0xf'),_0x22f933,_0x2339b8);_0x2268aa(_0x2339b8);});});}exports[_0xbf9e('0x17')]=function(_0x36c80c){var _0x5da46b=this;return new Promise(function(_0x25f290,_0x19949e){return db[_0xbf9e('0x18')]['findAll']({'raw':_0x36c80c[_0xbf9e('0x19')]?_0x36c80c[_0xbf9e('0x19')][_0xbf9e('0x1a')]===undefined?!![]:![]:!![],'where':_0x36c80c[_0xbf9e('0x19')]?_0x36c80c[_0xbf9e('0x19')][_0xbf9e('0x1b')]||null:null,'attributes':_0x36c80c['options']?_0x36c80c[_0xbf9e('0x19')]['attributes']||null:null,'limit':_0x36c80c[_0xbf9e('0x19')]?_0x36c80c['options']['limit']||null:null,'include':_0x36c80c['options']?_0x36c80c[_0xbf9e('0x19')][_0xbf9e('0x1c')]?_[_0xbf9e('0x1d')](_0x36c80c[_0xbf9e('0x19')][_0xbf9e('0x1c')],function(_0x3830b2){return{'model':db[_0x3830b2[_0xbf9e('0x1e')]],'as':_0x3830b2['as'],'attributes':_0x3830b2['attributes'],'include':_0x3830b2[_0xbf9e('0x1c')]?_['map'](_0x3830b2[_0xbf9e('0x1c')],function(_0x602385){return{'model':db[_0x602385[_0xbf9e('0x1e')]],'as':_0x602385['as'],'attributes':_0x602385[_0xbf9e('0x1f')],'include':_0x602385[_0xbf9e('0x1c')]?_[_0xbf9e('0x1d')](_0x602385[_0xbf9e('0x1c')],function(_0x34dd36){return{'model':db[_0x34dd36[_0xbf9e('0x1e')]],'as':_0x34dd36['as'],'attributes':_0x34dd36[_0xbf9e('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xbf9e('0xd')](function(_0x3d4065){logger[_0xbf9e('0xe')]('GetDeskAccount',_0x36c80c);logger[_0xbf9e('0x20')]('GetDeskAccount',_0x36c80c,JSON['stringify'](_0x3d4065));_0x25f290(_0x3d4065);})[_0xbf9e('0x16')](function(_0x287c89){logger[_0xbf9e('0x13')](_0xbf9e('0x17'),_0x287c89[_0xbf9e('0x15')],_0x36c80c);_0x19949e(_0x5da46b[_0xbf9e('0x13')](0x1f4,_0x287c89[_0xbf9e('0x15')]));});});};exports['ShowDeskAccount']=function(_0x34fff5){var _0x36bde2=this;return new Promise(function(_0x4290f3,_0x2fa604){return db['DeskAccount'][_0xbf9e('0x21')]({'raw':_0x34fff5[_0xbf9e('0x19')]?_0x34fff5[_0xbf9e('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x34fff5['options']?_0x34fff5[_0xbf9e('0x19')][_0xbf9e('0x1b')]||null:null,'attributes':_0x34fff5[_0xbf9e('0x19')]?_0x34fff5['options'][_0xbf9e('0x1f')]||null:null,'include':_0x34fff5[_0xbf9e('0x19')]?_0x34fff5[_0xbf9e('0x19')][_0xbf9e('0x1c')]?_['map'](_0x34fff5[_0xbf9e('0x19')][_0xbf9e('0x1c')],function(_0xb7a435){return{'model':db[_0xb7a435[_0xbf9e('0x1e')]],'as':_0xb7a435['as'],'attributes':_0xb7a435[_0xbf9e('0x1f')],'include':_0xb7a435[_0xbf9e('0x1c')]?_['map'](_0xb7a435[_0xbf9e('0x1c')],function(_0x43232d){return{'model':db[_0x43232d[_0xbf9e('0x1e')]],'as':_0x43232d['as'],'attributes':_0x43232d[_0xbf9e('0x1f')],'include':_0x43232d[_0xbf9e('0x1c')]?_[_0xbf9e('0x1d')](_0x43232d[_0xbf9e('0x1c')],function(_0xaa341d){return{'model':db[_0xaa341d[_0xbf9e('0x1e')]],'as':_0xaa341d['as'],'attributes':_0xaa341d[_0xbf9e('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xbf9e('0xd')](function(_0x1c768e){logger[_0xbf9e('0xe')](_0xbf9e('0x22'),_0x34fff5);logger[_0xbf9e('0x20')]('ShowDeskAccount',_0x34fff5,JSON[_0xbf9e('0x12')](_0x1c768e));_0x4290f3(_0x1c768e);})[_0xbf9e('0x16')](function(_0x56d913){logger[_0xbf9e('0x13')](_0xbf9e('0x22'),_0x56d913[_0xbf9e('0x15')],_0x34fff5);_0x2fa604(_0x36bde2[_0xbf9e('0x13')](0x1f4,_0x56d913[_0xbf9e('0x15')]));});});};
\ No newline at end of file
+var _0xe9ff=['rpc','../../config/environment','jayson/promise','client','http','request','then','info','DeskAccount,\x20%s,\x20%s','debug','DeskAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','GetDeskAccount','DeskAccount','findAll','options','raw','where','attributes','include','map','model','find','ShowDeskAccount','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger'];(function(_0xecbee2,_0x160a81){var _0x5d0336=function(_0x3b3dd6){while(--_0x3b3dd6){_0xecbee2['push'](_0xecbee2['shift']());}};_0x5d0336(++_0x160a81);}(_0xe9ff,0x186));var _0xfe9f=function(_0x5300f2,_0x5903e6){_0x5300f2=_0x5300f2-0x0;var _0x357a35=_0xe9ff[_0x5300f2];return _0x357a35;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xfe9f('0x0'));var BPromise=require(_0xfe9f('0x1'));var rs=require(_0xfe9f('0x2'));var fs=require('fs');var db=require(_0xfe9f('0x3'))['db'];var utils=require(_0xfe9f('0x4'));var logger=require(_0xfe9f('0x5'))(_0xfe9f('0x6'));var config=require(_0xfe9f('0x7'));var jayson=require(_0xfe9f('0x8'));var client=jayson[_0xfe9f('0x9')][_0xfe9f('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x36e595,_0x33ef5d,_0x24d870){return new BPromise(function(_0x1a3556,_0x58fe65){return client[_0xfe9f('0xb')](_0x36e595,_0x24d870)[_0xfe9f('0xc')](function(_0x5e4dec){logger[_0xfe9f('0xd')](_0xfe9f('0xe'),_0x33ef5d,'request\x20sent');logger[_0xfe9f('0xf')](_0xfe9f('0x10'),_0x33ef5d,_0xfe9f('0x11'),JSON[_0xfe9f('0x12')](_0x5e4dec));if(_0x5e4dec[_0xfe9f('0x13')]){if(_0x5e4dec[_0xfe9f('0x13')][_0xfe9f('0x14')]===0x1f4){logger[_0xfe9f('0x13')](_0xfe9f('0xe'),_0x33ef5d,_0x5e4dec[_0xfe9f('0x13')][_0xfe9f('0x15')]);return _0x58fe65(_0x5e4dec[_0xfe9f('0x13')][_0xfe9f('0x15')]);}logger[_0xfe9f('0x13')](_0xfe9f('0xe'),_0x33ef5d,_0x5e4dec[_0xfe9f('0x13')][_0xfe9f('0x15')]);return _0x1a3556(_0x5e4dec['error'][_0xfe9f('0x15')]);}else{logger[_0xfe9f('0xd')](_0xfe9f('0xe'),_0x33ef5d,_0xfe9f('0x11'));_0x1a3556(_0x5e4dec[_0xfe9f('0x16')][_0xfe9f('0x15')]);}})[_0xfe9f('0x17')](function(_0x2664db){logger[_0xfe9f('0x13')](_0xfe9f('0xe'),_0x33ef5d,_0x2664db);_0x58fe65(_0x2664db);});});}exports[_0xfe9f('0x18')]=function(_0x59ce18){var _0x4bbd91=this;return new Promise(function(_0x386756,_0x1f0938){return db[_0xfe9f('0x19')][_0xfe9f('0x1a')]({'raw':_0x59ce18[_0xfe9f('0x1b')]?_0x59ce18[_0xfe9f('0x1b')][_0xfe9f('0x1c')]===undefined?!![]:![]:!![],'where':_0x59ce18[_0xfe9f('0x1b')]?_0x59ce18[_0xfe9f('0x1b')][_0xfe9f('0x1d')]||null:null,'attributes':_0x59ce18[_0xfe9f('0x1b')]?_0x59ce18[_0xfe9f('0x1b')][_0xfe9f('0x1e')]||null:null,'limit':_0x59ce18[_0xfe9f('0x1b')]?_0x59ce18[_0xfe9f('0x1b')]['limit']||null:null,'include':_0x59ce18['options']?_0x59ce18[_0xfe9f('0x1b')][_0xfe9f('0x1f')]?_[_0xfe9f('0x20')](_0x59ce18['options'][_0xfe9f('0x1f')],function(_0x3bbaa7){return{'model':db[_0x3bbaa7['model']],'as':_0x3bbaa7['as'],'attributes':_0x3bbaa7['attributes'],'include':_0x3bbaa7['include']?_[_0xfe9f('0x20')](_0x3bbaa7['include'],function(_0x55bf1a){return{'model':db[_0x55bf1a[_0xfe9f('0x21')]],'as':_0x55bf1a['as'],'attributes':_0x55bf1a['attributes'],'include':_0x55bf1a[_0xfe9f('0x1f')]?_[_0xfe9f('0x20')](_0x55bf1a[_0xfe9f('0x1f')],function(_0x4a7f9e){return{'model':db[_0x4a7f9e[_0xfe9f('0x21')]],'as':_0x4a7f9e['as'],'attributes':_0x4a7f9e[_0xfe9f('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xfe9f('0xc')](function(_0x3e4892){logger[_0xfe9f('0xd')]('GetDeskAccount',_0x59ce18);logger['debug'](_0xfe9f('0x18'),_0x59ce18,JSON[_0xfe9f('0x12')](_0x3e4892));_0x386756(_0x3e4892);})['catch'](function(_0x490a13){logger[_0xfe9f('0x13')](_0xfe9f('0x18'),_0x490a13[_0xfe9f('0x15')],_0x59ce18);_0x1f0938(_0x4bbd91[_0xfe9f('0x13')](0x1f4,_0x490a13[_0xfe9f('0x15')]));});});};exports['ShowDeskAccount']=function(_0x5a2973){var _0x31b40f=this;return new Promise(function(_0x3fff41,_0x4dac7e){return db['DeskAccount'][_0xfe9f('0x22')]({'raw':_0x5a2973[_0xfe9f('0x1b')]?_0x5a2973['options'][_0xfe9f('0x1c')]===undefined?!![]:![]:!![],'where':_0x5a2973[_0xfe9f('0x1b')]?_0x5a2973[_0xfe9f('0x1b')][_0xfe9f('0x1d')]||null:null,'attributes':_0x5a2973[_0xfe9f('0x1b')]?_0x5a2973[_0xfe9f('0x1b')]['attributes']||null:null,'include':_0x5a2973[_0xfe9f('0x1b')]?_0x5a2973[_0xfe9f('0x1b')][_0xfe9f('0x1f')]?_[_0xfe9f('0x20')](_0x5a2973['options'][_0xfe9f('0x1f')],function(_0x54fe1c){return{'model':db[_0x54fe1c[_0xfe9f('0x21')]],'as':_0x54fe1c['as'],'attributes':_0x54fe1c['attributes'],'include':_0x54fe1c[_0xfe9f('0x1f')]?_[_0xfe9f('0x20')](_0x54fe1c['include'],function(_0x506844){return{'model':db[_0x506844[_0xfe9f('0x21')]],'as':_0x506844['as'],'attributes':_0x506844[_0xfe9f('0x1e')],'include':_0x506844[_0xfe9f('0x1f')]?_['map'](_0x506844[_0xfe9f('0x1f')],function(_0x432671){return{'model':db[_0x432671[_0xfe9f('0x21')]],'as':_0x432671['as'],'attributes':_0x432671[_0xfe9f('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xfe9f('0xc')](function(_0x29fafb){logger[_0xfe9f('0xd')](_0xfe9f('0x23'),_0x5a2973);logger[_0xfe9f('0xf')](_0xfe9f('0x23'),_0x5a2973,JSON[_0xfe9f('0x12')](_0x29fafb));_0x3fff41(_0x29fafb);})[_0xfe9f('0x17')](function(_0x4284de){logger[_0xfe9f('0x13')]('ShowDeskAccount',_0x4284de[_0xfe9f('0x15')],_0x5a2973);_0x4dac7e(_0x31b40f[_0xfe9f('0x13')](0x1f4,_0x4284de['message']));});});};
\ No newline at end of file
index a0ff7a3..6820c2c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa88=['show','/:id/fields','/:id/subjects','/:id/descriptions','getDescriptions','/:id/tags','post','create','setTags','delete','destroy','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intDeskConfiguration.controller','get','isAuthenticated','/:id'];(function(_0x257699,_0x5a54d7){var _0x4d1d04=function(_0x369f32){while(--_0x369f32){_0x257699['push'](_0x257699['shift']());}};_0x4d1d04(++_0x5a54d7);}(_0xaa88,0x137));var _0x8aa8=function(_0x2468b5,_0x506b9e){_0x2468b5=_0x2468b5-0x0;var _0x1056e4=_0xaa88[_0x2468b5];return _0x1056e4;};'use strict';var multer=require(_0x8aa8('0x0'));var util=require(_0x8aa8('0x1'));var path=require(_0x8aa8('0x2'));var express=require(_0x8aa8('0x3'));var router=express['Router']();var auth=require(_0x8aa8('0x4'));var interaction=require(_0x8aa8('0x5'));var config=require(_0x8aa8('0x6'));var controller=require(_0x8aa8('0x7'));router[_0x8aa8('0x8')]('/',auth[_0x8aa8('0x9')](),controller['index']);router['get'](_0x8aa8('0xa'),auth['isAuthenticated'](),controller[_0x8aa8('0xb')]);router[_0x8aa8('0x8')](_0x8aa8('0xc'),auth[_0x8aa8('0x9')](),controller['getFields']);router[_0x8aa8('0x8')](_0x8aa8('0xd'),auth[_0x8aa8('0x9')](),controller['getSubjects']);router[_0x8aa8('0x8')](_0x8aa8('0xe'),auth[_0x8aa8('0x9')](),controller[_0x8aa8('0xf')]);router['get'](_0x8aa8('0x10'),auth[_0x8aa8('0x9')](),controller['getTags']);router[_0x8aa8('0x11')]('/',auth[_0x8aa8('0x9')](),controller[_0x8aa8('0x12')]);router['post'](_0x8aa8('0x10'),auth[_0x8aa8('0x9')](),controller[_0x8aa8('0x13')]);router['put'](_0x8aa8('0xa'),auth['isAuthenticated'](),controller['update']);router[_0x8aa8('0x14')](_0x8aa8('0xa'),auth[_0x8aa8('0x9')](),controller[_0x8aa8('0x15')]);module[_0x8aa8('0x16')]=router;
\ No newline at end of file
+var _0x008c=['./intDeskConfiguration.controller','get','isAuthenticated','index','/:id','/:id/subjects','getDescriptions','/:id/tags','getTags','post','create','setTags','update','delete','multer','util','path','express','Router','../../components/interaction/service','../../config/environment'];(function(_0x404004,_0x483f9a){var _0x211f81=function(_0x7c1b4d){while(--_0x7c1b4d){_0x404004['push'](_0x404004['shift']());}};_0x211f81(++_0x483f9a);}(_0x008c,0x188));var _0xc008=function(_0x2fa8b5,_0x2b4ca8){_0x2fa8b5=_0x2fa8b5-0x0;var _0x3007c4=_0x008c[_0x2fa8b5];return _0x3007c4;};'use strict';var multer=require(_0xc008('0x0'));var util=require(_0xc008('0x1'));var path=require(_0xc008('0x2'));var express=require(_0xc008('0x3'));var router=express[_0xc008('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xc008('0x5'));var config=require(_0xc008('0x6'));var controller=require(_0xc008('0x7'));router[_0xc008('0x8')]('/',auth[_0xc008('0x9')](),controller[_0xc008('0xa')]);router[_0xc008('0x8')](_0xc008('0xb'),auth[_0xc008('0x9')](),controller['show']);router[_0xc008('0x8')]('/:id/fields',auth[_0xc008('0x9')](),controller['getFields']);router['get'](_0xc008('0xc'),auth[_0xc008('0x9')](),controller['getSubjects']);router['get']('/:id/descriptions',auth[_0xc008('0x9')](),controller[_0xc008('0xd')]);router['get'](_0xc008('0xe'),auth[_0xc008('0x9')](),controller[_0xc008('0xf')]);router[_0xc008('0x10')]('/',auth[_0xc008('0x9')](),controller[_0xc008('0x11')]);router[_0xc008('0x10')]('/:id/tags',auth['isAuthenticated'](),controller[_0xc008('0x12')]);router['put'](_0xc008('0xb'),auth[_0xc008('0x9')](),controller[_0xc008('0x13')]);router[_0xc008('0x14')](_0xc008('0xb'),auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 784188f..aae2921 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb2a2=['STRING','exports'];(function(_0x1ee773,_0x56e425){var _0x31919f=function(_0x66d9a7){while(--_0x66d9a7){_0x1ee773['push'](_0x1ee773['shift']());}};_0x31919f(++_0x56e425);}(_0xb2a2,0x79));var _0x2b2a=function(_0x4580dd,_0x4da7b4){_0x4580dd=_0x4580dd-0x0;var _0x337ab2=_0xb2a2[_0x4580dd];return _0x337ab2;};'use strict';var Sequelize=require('sequelize');module[_0x2b2a('0x0')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x2b2a('0x1')]}};
\ No newline at end of file
+var _0x2f91=['exports','STRING','sequelize'];(function(_0x4517dc,_0x19b646){var _0x439090=function(_0x3cdeaf){while(--_0x3cdeaf){_0x4517dc['push'](_0x4517dc['shift']());}};_0x439090(++_0x19b646);}(_0x2f91,0x71));var _0x12f9=function(_0x4565ec,_0x20080d){_0x4565ec=_0x4565ec-0x0;var _0x15562b=_0x2f91[_0x4565ec];return _0x15562b;};'use strict';var Sequelize=require(_0x12f9('0x0'));module[_0x12f9('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x12f9('0x2')]}};
\ No newline at end of file
index acd2267..543cf1d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d82=['stringify','error','code','DeskConfiguration,\x20%s,\x20%s','message','info','catch','status','json','count','offset','limit','Content-Range','apply','reject','save','update','destroy','sendStatus','stack','name','send','index','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','pick','day','add','where','filter','merge','DeskConfiguration','includeAll','include','findAll','rows','show','params','options','find','create','body','getFields','findOne','DeskField','sort','map','getSubjects','getDescriptions','getTags','setTags','ids','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','http','then','request\x20sent','debug','DeskConfiguration,\x20%s,\x20%s,\x20%s'];(function(_0x18a4f7,_0x3f915c){var _0x368cf3=function(_0x173245){while(--_0x173245){_0x18a4f7['push'](_0x18a4f7['shift']());}};_0x368cf3(++_0x3f915c);}(_0x7d82,0xf6));var _0x27d8=function(_0x2a7bd0,_0x5d7fa5){_0x2a7bd0=_0x2a7bd0-0x0;var _0x1f8841=_0x7d82[_0x2a7bd0];return _0x1f8841;};'use strict';var jsonpatch=require(_0x27d8('0x0'));var rp=require(_0x27d8('0x1'));var moment=require(_0x27d8('0x2'));var BPromise=require(_0x27d8('0x3'));var Mustache=require(_0x27d8('0x4'));var util=require(_0x27d8('0x5'));var path=require(_0x27d8('0x6'));var sox=require(_0x27d8('0x7'));var csv=require('to-csv');var ejs=require(_0x27d8('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x27d8('0x9'));var crypto=require(_0x27d8('0xa'));var jsforce=require(_0x27d8('0xb'));var deskjs=require(_0x27d8('0xc'));var toCsv=require(_0x27d8('0xd'));var querystring=require(_0x27d8('0xe'));var Papa=require(_0x27d8('0xf'));var qs=require(_0x27d8('0x10'));var logger=require(_0x27d8('0x11'))(_0x27d8('0x12'));var utils=require(_0x27d8('0x13'));var config=require(_0x27d8('0x14'));var db=require(_0x27d8('0x15'))['db'];var jayson=require('jayson/promise');var client=jayson['client'][_0x27d8('0x16')]({'port':0x232a});function respondWithRpcPromise(_0x526c00,_0x402e4d,_0x240d82,_0x1deadc){return new BPromise(function(_0x175216,_0x15b419){var _0x4bcef0=_0x1deadc||client;return _0x4bcef0['request'](_0x526c00,_0x240d82)[_0x27d8('0x17')](function(_0x1fd385){logger['info']('DeskConfiguration,\x20%s,\x20%s',_0x402e4d,_0x27d8('0x18'));logger[_0x27d8('0x19')](_0x27d8('0x1a'),_0x402e4d,_0x27d8('0x18'),JSON[_0x27d8('0x1b')](_0x1fd385));if(_0x1fd385[_0x27d8('0x1c')]){if(_0x1fd385[_0x27d8('0x1c')][_0x27d8('0x1d')]===0x1f4){logger[_0x27d8('0x1c')](_0x27d8('0x1e'),_0x402e4d,_0x1fd385[_0x27d8('0x1c')][_0x27d8('0x1f')]);return _0x15b419(_0x1fd385[_0x27d8('0x1c')][_0x27d8('0x1f')]);}logger[_0x27d8('0x1c')]('DeskConfiguration,\x20%s,\x20%s',_0x402e4d,_0x1fd385['error']['message']);return _0x175216(_0x1fd385['error'][_0x27d8('0x1f')]);}else{logger[_0x27d8('0x20')]('DeskConfiguration,\x20%s,\x20%s',_0x402e4d,_0x27d8('0x18'));_0x175216(_0x1fd385['result']['message']);}})[_0x27d8('0x21')](function(_0x56d26d){logger[_0x27d8('0x1c')]('DeskConfiguration,\x20%s,\x20%s',_0x402e4d,_0x56d26d);_0x15b419(_0x56d26d);});});}function respondWithStatusCode(_0x388119,_0xe20e0f){_0xe20e0f=_0xe20e0f||0xcc;return function(_0x25cc6f){if(_0x25cc6f){return _0x388119['sendStatus'](_0xe20e0f);}return _0x388119[_0x27d8('0x22')](_0xe20e0f)['end']();};}function respondWithResult(_0x43814f,_0x196c52){_0x196c52=_0x196c52||0xc8;return function(_0x5946a4){if(_0x5946a4){return _0x43814f[_0x27d8('0x22')](_0x196c52)[_0x27d8('0x23')](_0x5946a4);}};}function respondWithFilteredResult(_0x57f6a6,_0x2223be){return function(_0x5b7f58){if(_0x5b7f58){var _0x217043=_0x5b7f58[_0x27d8('0x24')],_0xe897fb=_0x2223be[_0x27d8('0x25')],_0x4cae1d=_0x2223be['offset']+_0x2223be[_0x27d8('0x26')],_0x59929c;if(_0x4cae1d>=_0x217043){_0x4cae1d=_0x217043;_0x59929c=0xc8;}else{_0x59929c=0xce;}_0x57f6a6[_0x27d8('0x22')](_0x59929c);return _0x57f6a6['set'](_0x27d8('0x27'),_0xe897fb+'-'+_0x4cae1d+'/'+_0x217043)[_0x27d8('0x23')](_0x5b7f58);}return null;};}function patchUpdates(_0x7d6559){return function(_0x3cf733){try{jsonpatch[_0x27d8('0x28')](_0x3cf733,_0x7d6559,!![]);}catch(_0x2e537e){return BPromise[_0x27d8('0x29')](_0x2e537e);}return _0x3cf733[_0x27d8('0x2a')]();};}function saveUpdates(_0x595d29,_0xea6583){return function(_0x1d2908){if(_0x1d2908){return _0x1d2908[_0x27d8('0x2b')](_0x595d29)[_0x27d8('0x17')](function(_0x7d1b9b){return _0x7d1b9b;});}return null;};}function removeEntity(_0x34ee19,_0x1dbc31){return function(_0x463aa1){if(_0x463aa1){return _0x463aa1[_0x27d8('0x2c')]()[_0x27d8('0x17')](function(){_0x34ee19[_0x27d8('0x22')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5a26a6,_0x213a30){return function(_0x4febf5){if(!_0x4febf5){_0x5a26a6[_0x27d8('0x2d')](0x194);}return _0x4febf5;};}function handleError(_0x3d7afa,_0x3f4cef){_0x3f4cef=_0x3f4cef||0x1f4;return function(_0x2fe4c2){logger[_0x27d8('0x1c')](_0x2fe4c2[_0x27d8('0x2e')]);if(_0x2fe4c2[_0x27d8('0x2f')]){delete _0x2fe4c2[_0x27d8('0x2f')];}_0x3d7afa[_0x27d8('0x22')](_0x3f4cef)[_0x27d8('0x30')](_0x2fe4c2);};}exports[_0x27d8('0x31')]=function(_0x4a39c6,_0x1a0ddc){var _0x2fe9d5={},_0x4c5300={},_0x176c21={'count':0x0,'rows':[]};var _0x3a28f0=db['DeskConfiguration'][_0x27d8('0x32')];_0x4c5300['model']=_[_0x27d8('0x33')](_0x3a28f0);var _0x2250fe={'dateStart':_0x4a39c6[_0x27d8('0x34')][_0x27d8('0x35')],'dateEnd':_0x4a39c6['query'][_0x27d8('0x36')]};delete _0x4a39c6['query'][_0x27d8('0x35')];delete _0x4a39c6[_0x27d8('0x34')][_0x27d8('0x36')];_0x4c5300[_0x27d8('0x34')]=_[_0x27d8('0x33')](_0x4a39c6[_0x27d8('0x34')]);_0x4c5300[_0x27d8('0x37')]=_[_0x27d8('0x38')](_0x4c5300[_0x27d8('0x39')],_0x4c5300[_0x27d8('0x34')]);_0x2fe9d5[_0x27d8('0x3a')]=_[_0x27d8('0x38')](_0x4c5300[_0x27d8('0x39')],qs[_0x27d8('0x3b')](_0x4a39c6[_0x27d8('0x34')][_0x27d8('0x3b')]));_0x2fe9d5[_0x27d8('0x3a')]=_0x2fe9d5[_0x27d8('0x3a')][_0x27d8('0x3c')]?_0x2fe9d5[_0x27d8('0x3a')]:_0x4c5300[_0x27d8('0x39')];if(!_0x4a39c6[_0x27d8('0x34')][_0x27d8('0x3d')](_0x27d8('0x3e'))){_0x2fe9d5[_0x27d8('0x26')]=qs['limit'](_0x4a39c6[_0x27d8('0x34')][_0x27d8('0x26')]);_0x2fe9d5[_0x27d8('0x25')]=qs['offset'](_0x4a39c6[_0x27d8('0x34')][_0x27d8('0x25')]);}_0x2fe9d5[_0x27d8('0x3f')]=qs['sort'](_0x4a39c6['query']['sort']);_0x2fe9d5['where']=qs['filters'](_[_0x27d8('0x40')](_0x4a39c6[_0x27d8('0x34')],_0x4c5300[_0x27d8('0x37')]));if(_0x2250fe[_0x27d8('0x35')]){if(_0x2250fe[_0x27d8('0x36')]){_0x2250fe['dateEnd']=moment(_0x2250fe[_0x27d8('0x36')])['add'](0x1,_0x27d8('0x41'));}else{_0x2250fe[_0x27d8('0x36')]=moment(_0x2250fe[_0x27d8('0x35')])[_0x27d8('0x42')](0x1,'day');}_['merge'](_0x2fe9d5[_0x27d8('0x43')],{'createdAt':{'$gte':_0x2250fe[_0x27d8('0x35')],'$lte':_0x2250fe['dateEnd']}});}if(_0x4a39c6[_0x27d8('0x34')][_0x27d8('0x44')]){_0x2fe9d5[_0x27d8('0x43')]=_[_0x27d8('0x45')](_0x2fe9d5[_0x27d8('0x43')],{'$or':_['map'](_0x2fe9d5[_0x27d8('0x3a')],function(_0x501899){var _0x25ac1c={};_0x25ac1c[_0x501899]={'$like':'%'+_0x4a39c6[_0x27d8('0x34')][_0x27d8('0x44')]+'%'};return _0x25ac1c;})});}_0x2fe9d5=_[_0x27d8('0x45')]({},_0x2fe9d5,_0x4a39c6['options']);var _0x2cd6e3={'where':_0x2fe9d5[_0x27d8('0x43')]};return db[_0x27d8('0x46')][_0x27d8('0x24')](_0x2cd6e3)[_0x27d8('0x17')](function(_0x494a7b){_0x176c21[_0x27d8('0x24')]=_0x494a7b;if(_0x4a39c6[_0x27d8('0x34')][_0x27d8('0x47')]){_0x2fe9d5[_0x27d8('0x48')]=[{'all':!![]}];}return db[_0x27d8('0x46')][_0x27d8('0x49')](_0x2fe9d5);})[_0x27d8('0x17')](function(_0x33da85){_0x176c21[_0x27d8('0x4a')]=_0x33da85;return _0x176c21;})[_0x27d8('0x17')](respondWithFilteredResult(_0x1a0ddc,_0x2fe9d5))['catch'](handleError(_0x1a0ddc,null));};exports[_0x27d8('0x4b')]=function(_0x40d16a,_0x1c9424){var _0x7e7cc5={'raw':![],'where':{'id':_0x40d16a[_0x27d8('0x4c')]['id']}},_0x4549a5={};_0x4549a5[_0x27d8('0x39')]=_['keys'](db['DeskConfiguration']['rawAttributes']);_0x4549a5[_0x27d8('0x34')]=_['keys'](_0x40d16a[_0x27d8('0x34')]);_0x4549a5['filters']=_['intersection'](_0x4549a5[_0x27d8('0x39')],_0x4549a5[_0x27d8('0x34')]);_0x7e7cc5[_0x27d8('0x3a')]=_[_0x27d8('0x38')](_0x4549a5[_0x27d8('0x39')],qs[_0x27d8('0x3b')](_0x40d16a[_0x27d8('0x34')]['fields']));_0x7e7cc5[_0x27d8('0x3a')]=_0x7e7cc5[_0x27d8('0x3a')]['length']?_0x7e7cc5[_0x27d8('0x3a')]:_0x4549a5[_0x27d8('0x39')];if(_0x40d16a['query']['includeAll']){_0x7e7cc5[_0x27d8('0x48')]=[{'all':!![]}];}_0x7e7cc5=_['merge']({},_0x7e7cc5,_0x40d16a[_0x27d8('0x4d')]);return db[_0x27d8('0x46')][_0x27d8('0x4e')](_0x7e7cc5)['then'](handleEntityNotFound(_0x1c9424,null))[_0x27d8('0x17')](respondWithResult(_0x1c9424,null))[_0x27d8('0x21')](handleError(_0x1c9424,null));};exports[_0x27d8('0x4f')]=function(_0x4b060e,_0x493635){return db['DeskConfiguration']['create'](_0x4b060e[_0x27d8('0x50')],{})[_0x27d8('0x17')](respondWithResult(_0x493635,0xc9))[_0x27d8('0x21')](handleError(_0x493635,null));};exports[_0x27d8('0x2b')]=function(_0x26a866,_0x195b78){if(_0x26a866['body']['id']){delete _0x26a866['body']['id'];}return db[_0x27d8('0x46')][_0x27d8('0x4e')]({'where':{'id':_0x26a866[_0x27d8('0x4c')]['id']}})['then'](handleEntityNotFound(_0x195b78,null))['then'](saveUpdates(_0x26a866[_0x27d8('0x50')],null))[_0x27d8('0x17')](respondWithResult(_0x195b78,null))['catch'](handleError(_0x195b78,null));};exports['destroy']=function(_0x56c82c,_0x2e23cf){return db[_0x27d8('0x46')][_0x27d8('0x4e')]({'where':{'id':_0x56c82c['params']['id']}})['then'](handleEntityNotFound(_0x2e23cf,null))[_0x27d8('0x17')](removeEntity(_0x2e23cf,null))[_0x27d8('0x21')](handleError(_0x2e23cf,null));};exports[_0x27d8('0x51')]=function(_0x4616a5,_0x400ffd,_0xb3daa0){var _0x1d9e4f={};var _0xbd8a08={};var _0x2ae1fa;var _0x57f333;return db[_0x27d8('0x46')][_0x27d8('0x52')]({'where':{'id':_0x4616a5[_0x27d8('0x4c')]['id']}})[_0x27d8('0x17')](handleEntityNotFound(_0x400ffd,null))[_0x27d8('0x17')](function(_0x7188e4){if(_0x7188e4){_0x2ae1fa=_0x7188e4;_0xbd8a08[_0x27d8('0x39')]=_['keys'](db[_0x27d8('0x53')][_0x27d8('0x32')]);_0xbd8a08['query']=_['keys'](_0x4616a5[_0x27d8('0x34')]);_0xbd8a08[_0x27d8('0x37')]=_[_0x27d8('0x38')](_0xbd8a08[_0x27d8('0x39')],_0xbd8a08[_0x27d8('0x34')]);_0x1d9e4f[_0x27d8('0x3a')]=_[_0x27d8('0x38')](_0xbd8a08[_0x27d8('0x39')],qs[_0x27d8('0x3b')](_0x4616a5[_0x27d8('0x34')][_0x27d8('0x3b')]));_0x1d9e4f['attributes']=_0x1d9e4f['attributes'][_0x27d8('0x3c')]?_0x1d9e4f[_0x27d8('0x3a')]:_0xbd8a08['model'];_0x1d9e4f[_0x27d8('0x3f')]=qs[_0x27d8('0x54')](_0x4616a5[_0x27d8('0x34')][_0x27d8('0x54')]);_0x1d9e4f[_0x27d8('0x43')]=qs[_0x27d8('0x37')](_['pick'](_0x4616a5[_0x27d8('0x34')],_0xbd8a08['filters']));if(_0x4616a5[_0x27d8('0x34')][_0x27d8('0x44')]){_0x1d9e4f['where']=_[_0x27d8('0x45')](_0x1d9e4f['where'],{'$or':_[_0x27d8('0x55')](_0x1d9e4f[_0x27d8('0x3a')],function(_0x1407c9){var _0x5c608a={};_0x5c608a[_0x1407c9]={'$like':'%'+_0x4616a5['query']['filter']+'%'};return _0x5c608a;})});}_0x1d9e4f=_[_0x27d8('0x45')]({},_0x1d9e4f,_0x4616a5[_0x27d8('0x4d')]);return _0x2ae1fa[_0x27d8('0x51')](_0x1d9e4f);}})[_0x27d8('0x17')](function(_0x42160f){if(_0x42160f){_0x57f333=_0x42160f[_0x27d8('0x3c')];if(!_0x4616a5[_0x27d8('0x34')][_0x27d8('0x3d')](_0x27d8('0x3e'))){_0x1d9e4f[_0x27d8('0x26')]=qs[_0x27d8('0x26')](_0x4616a5[_0x27d8('0x34')][_0x27d8('0x26')]);_0x1d9e4f['offset']=qs[_0x27d8('0x25')](_0x4616a5[_0x27d8('0x34')][_0x27d8('0x25')]);}return _0x2ae1fa[_0x27d8('0x51')](_0x1d9e4f);}})['then'](function(_0xb72283){if(_0xb72283){return _0xb72283?{'count':_0x57f333,'rows':_0xb72283}:null;}})[_0x27d8('0x17')](respondWithResult(_0x400ffd,null))[_0x27d8('0x21')](handleError(_0x400ffd,null));};exports[_0x27d8('0x56')]=function(_0x21b5c7,_0x17641d,_0x1a1608){var _0x3e1c6c={};var _0xd887d0={};var _0x4a2353;var _0x5879ab;return db[_0x27d8('0x46')][_0x27d8('0x52')]({'where':{'id':_0x21b5c7[_0x27d8('0x4c')]['id']}})[_0x27d8('0x17')](handleEntityNotFound(_0x17641d,null))['then'](function(_0x10df7f){if(_0x10df7f){_0x4a2353=_0x10df7f;_0xd887d0['model']=_['keys'](db[_0x27d8('0x53')][_0x27d8('0x32')]);_0xd887d0[_0x27d8('0x34')]=_[_0x27d8('0x33')](_0x21b5c7['query']);_0xd887d0['filters']=_['intersection'](_0xd887d0['model'],_0xd887d0['query']);_0x3e1c6c[_0x27d8('0x3a')]=_['intersection'](_0xd887d0[_0x27d8('0x39')],qs[_0x27d8('0x3b')](_0x21b5c7[_0x27d8('0x34')][_0x27d8('0x3b')]));_0x3e1c6c[_0x27d8('0x3a')]=_0x3e1c6c[_0x27d8('0x3a')][_0x27d8('0x3c')]?_0x3e1c6c[_0x27d8('0x3a')]:_0xd887d0[_0x27d8('0x39')];_0x3e1c6c[_0x27d8('0x3f')]=qs[_0x27d8('0x54')](_0x21b5c7[_0x27d8('0x34')]['sort']);_0x3e1c6c['where']=qs[_0x27d8('0x37')](_[_0x27d8('0x40')](_0x21b5c7['query'],_0xd887d0[_0x27d8('0x37')]));if(_0x21b5c7[_0x27d8('0x34')][_0x27d8('0x44')]){_0x3e1c6c[_0x27d8('0x43')]=_[_0x27d8('0x45')](_0x3e1c6c[_0x27d8('0x43')],{'$or':_[_0x27d8('0x55')](_0x3e1c6c[_0x27d8('0x3a')],function(_0x10d37f){var _0x3fff87={};_0x3fff87[_0x10d37f]={'$like':'%'+_0x21b5c7[_0x27d8('0x34')]['filter']+'%'};return _0x3fff87;})});}_0x3e1c6c=_['merge']({},_0x3e1c6c,_0x21b5c7[_0x27d8('0x4d')]);return _0x4a2353['getSubjects'](_0x3e1c6c);}})[_0x27d8('0x17')](function(_0x249312){if(_0x249312){_0x5879ab=_0x249312[_0x27d8('0x3c')];if(!_0x21b5c7['query'][_0x27d8('0x3d')](_0x27d8('0x3e'))){_0x3e1c6c[_0x27d8('0x26')]=qs[_0x27d8('0x26')](_0x21b5c7[_0x27d8('0x34')][_0x27d8('0x26')]);_0x3e1c6c[_0x27d8('0x25')]=qs['offset'](_0x21b5c7['query'][_0x27d8('0x25')]);}return _0x4a2353[_0x27d8('0x56')](_0x3e1c6c);}})['then'](function(_0xc705fc){if(_0xc705fc){return _0xc705fc?{'count':_0x5879ab,'rows':_0xc705fc}:null;}})[_0x27d8('0x17')](respondWithResult(_0x17641d,null))[_0x27d8('0x21')](handleError(_0x17641d,null));};exports['getDescriptions']=function(_0x3d1b26,_0xb428f1,_0x229303){var _0x425c35={};var _0x10d6dc={};var _0x1641b4;var _0x3e3815;return db[_0x27d8('0x46')][_0x27d8('0x52')]({'where':{'id':_0x3d1b26[_0x27d8('0x4c')]['id']}})['then'](handleEntityNotFound(_0xb428f1,null))['then'](function(_0x34e314){if(_0x34e314){_0x1641b4=_0x34e314;_0x10d6dc['model']=_[_0x27d8('0x33')](db['DeskField'][_0x27d8('0x32')]);_0x10d6dc['query']=_[_0x27d8('0x33')](_0x3d1b26['query']);_0x10d6dc['filters']=_['intersection'](_0x10d6dc[_0x27d8('0x39')],_0x10d6dc[_0x27d8('0x34')]);_0x425c35[_0x27d8('0x3a')]=_[_0x27d8('0x38')](_0x10d6dc[_0x27d8('0x39')],qs[_0x27d8('0x3b')](_0x3d1b26[_0x27d8('0x34')][_0x27d8('0x3b')]));_0x425c35[_0x27d8('0x3a')]=_0x425c35[_0x27d8('0x3a')][_0x27d8('0x3c')]?_0x425c35[_0x27d8('0x3a')]:_0x10d6dc[_0x27d8('0x39')];_0x425c35[_0x27d8('0x3f')]=qs[_0x27d8('0x54')](_0x3d1b26['query'][_0x27d8('0x54')]);_0x425c35[_0x27d8('0x43')]=qs['filters'](_[_0x27d8('0x40')](_0x3d1b26[_0x27d8('0x34')],_0x10d6dc[_0x27d8('0x37')]));if(_0x3d1b26[_0x27d8('0x34')][_0x27d8('0x44')]){_0x425c35['where']=_[_0x27d8('0x45')](_0x425c35['where'],{'$or':_[_0x27d8('0x55')](_0x425c35[_0x27d8('0x3a')],function(_0xd5dcb3){var _0x2d7058={};_0x2d7058[_0xd5dcb3]={'$like':'%'+_0x3d1b26[_0x27d8('0x34')]['filter']+'%'};return _0x2d7058;})});}_0x425c35=_[_0x27d8('0x45')]({},_0x425c35,_0x3d1b26[_0x27d8('0x4d')]);return _0x1641b4[_0x27d8('0x57')](_0x425c35);}})[_0x27d8('0x17')](function(_0x52a9ce){if(_0x52a9ce){_0x3e3815=_0x52a9ce[_0x27d8('0x3c')];if(!_0x3d1b26[_0x27d8('0x34')]['hasOwnProperty']('nolimit')){_0x425c35['limit']=qs[_0x27d8('0x26')](_0x3d1b26[_0x27d8('0x34')][_0x27d8('0x26')]);_0x425c35[_0x27d8('0x25')]=qs['offset'](_0x3d1b26[_0x27d8('0x34')]['offset']);}return _0x1641b4[_0x27d8('0x57')](_0x425c35);}})[_0x27d8('0x17')](function(_0x54e0db){if(_0x54e0db){return _0x54e0db?{'count':_0x3e3815,'rows':_0x54e0db}:null;}})['then'](respondWithResult(_0xb428f1,null))[_0x27d8('0x21')](handleError(_0xb428f1,null));};exports[_0x27d8('0x58')]=function(_0x1f4355,_0x182f1d,_0x413162){var _0x51caf3={};var _0x190cf8={};var _0x3e83e7;var _0x3c21ec;return db[_0x27d8('0x46')]['findOne']({'where':{'id':_0x1f4355[_0x27d8('0x4c')]['id']}})[_0x27d8('0x17')](handleEntityNotFound(_0x182f1d,null))['then'](function(_0xf23f53){if(_0xf23f53){_0x3e83e7=_0xf23f53;_0x190cf8[_0x27d8('0x39')]=_[_0x27d8('0x33')](db['Tag'][_0x27d8('0x32')]);_0x190cf8[_0x27d8('0x34')]=_[_0x27d8('0x33')](_0x1f4355[_0x27d8('0x34')]);_0x190cf8['filters']=_[_0x27d8('0x38')](_0x190cf8[_0x27d8('0x39')],_0x190cf8[_0x27d8('0x34')]);_0x51caf3[_0x27d8('0x3a')]=_[_0x27d8('0x38')](_0x190cf8['model'],qs[_0x27d8('0x3b')](_0x1f4355['query'][_0x27d8('0x3b')]));_0x51caf3[_0x27d8('0x3a')]=_0x51caf3[_0x27d8('0x3a')][_0x27d8('0x3c')]?_0x51caf3[_0x27d8('0x3a')]:_0x190cf8[_0x27d8('0x39')];_0x51caf3[_0x27d8('0x3f')]=qs['sort'](_0x1f4355[_0x27d8('0x34')][_0x27d8('0x54')]);_0x51caf3[_0x27d8('0x43')]=qs[_0x27d8('0x37')](_[_0x27d8('0x40')](_0x1f4355[_0x27d8('0x34')],_0x190cf8[_0x27d8('0x37')]));if(_0x1f4355[_0x27d8('0x34')][_0x27d8('0x44')]){_0x51caf3[_0x27d8('0x43')]=_[_0x27d8('0x45')](_0x51caf3[_0x27d8('0x43')],{'$or':_[_0x27d8('0x55')](_0x51caf3[_0x27d8('0x3a')],function(_0x329dcf){var _0x7ffec4={};_0x7ffec4[_0x329dcf]={'$like':'%'+_0x1f4355[_0x27d8('0x34')][_0x27d8('0x44')]+'%'};return _0x7ffec4;})});}_0x51caf3=_['merge']({},_0x51caf3,_0x1f4355['options']);return _0x3e83e7[_0x27d8('0x58')](_0x51caf3);}})['then'](function(_0x3d511c){if(_0x3d511c){_0x3c21ec=_0x3d511c['length'];if(!_0x1f4355[_0x27d8('0x34')][_0x27d8('0x3d')]('nolimit')){_0x51caf3[_0x27d8('0x26')]=qs[_0x27d8('0x26')](_0x1f4355[_0x27d8('0x34')]['limit']);_0x51caf3[_0x27d8('0x25')]=qs[_0x27d8('0x25')](_0x1f4355[_0x27d8('0x34')][_0x27d8('0x25')]);}return _0x3e83e7['getTags'](_0x51caf3);}})[_0x27d8('0x17')](function(_0x290cf2){if(_0x290cf2){return _0x290cf2?{'count':_0x3c21ec,'rows':_0x290cf2}:null;}})[_0x27d8('0x17')](respondWithResult(_0x182f1d,null))[_0x27d8('0x21')](handleError(_0x182f1d,null));};exports[_0x27d8('0x59')]=function(_0x3e3ded,_0x406af3,_0x6f6f3c){if(_0x3e3ded['body']['id']){delete _0x3e3ded['body']['id'];}return db[_0x27d8('0x46')][_0x27d8('0x52')]({'where':{'id':_0x3e3ded[_0x27d8('0x4c')]['id']}})[_0x27d8('0x17')](handleEntityNotFound(_0x406af3,null))['then'](function(_0xfaf9ad){if(_0xfaf9ad){return _0xfaf9ad[_0x27d8('0x59')](_0x3e3ded['body'][_0x27d8('0x5a')]||[]);}return null;})['then'](respondWithResult(_0x406af3,null))[_0x27d8('0x21')](handleError(_0x406af3,null));};
\ No newline at end of file
+var _0x743a=['nolimit','offset','order','sort','add','day','merge','where','filter','map','options','DeskConfiguration','count','includeAll','findAll','rows','show','length','include','find','create','body','update','getFields','params','pick','getSubjects','findOne','DeskField','getDescriptions','Tag','getTags','setTags','ids','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/environment','../../mysqldb','client','http','request','then','info','DeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','DeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','status','end','json','limit','Content-Range','apply','reject','destroy','sendStatus','stack','name','send','index','rawAttributes','model','keys','query','dateStart','dateEnd','filters','attributes','intersection','fields','hasOwnProperty'];(function(_0x2ee0c7,_0x5f5097){var _0x2c4488=function(_0x38508c){while(--_0x38508c){_0x2ee0c7['push'](_0x2ee0c7['shift']());}};_0x2c4488(++_0x5f5097);}(_0x743a,0x186));var _0xa743=function(_0x4dfb23,_0x4a9908){_0x4dfb23=_0x4dfb23-0x0;var _0x37b5e6=_0x743a[_0x4dfb23];return _0x37b5e6;};'use strict';var jsonpatch=require(_0xa743('0x0'));var rp=require(_0xa743('0x1'));var moment=require('moment');var BPromise=require(_0xa743('0x2'));var Mustache=require(_0xa743('0x3'));var util=require(_0xa743('0x4'));var path=require(_0xa743('0x5'));var sox=require(_0xa743('0x6'));var csv=require(_0xa743('0x7'));var ejs=require(_0xa743('0x8'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xa743('0x9'));var deskjs=require(_0xa743('0xa'));var toCsv=require(_0xa743('0x7'));var querystring=require(_0xa743('0xb'));var Papa=require(_0xa743('0xc'));var qs=require(_0xa743('0xd'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0xa743('0xe'));var db=require(_0xa743('0xf'))['db'];var jayson=require('jayson/promise');var client=jayson[_0xa743('0x10')][_0xa743('0x11')]({'port':0x232a});function respondWithRpcPromise(_0x26a9f2,_0x5c69d9,_0x8bc997,_0x38dab3){return new BPromise(function(_0x590286,_0x53cf51){var _0x7d29aa=_0x38dab3||client;return _0x7d29aa[_0xa743('0x12')](_0x26a9f2,_0x8bc997)[_0xa743('0x13')](function(_0x27d220){logger[_0xa743('0x14')](_0xa743('0x15'),_0x5c69d9,_0xa743('0x16'));logger[_0xa743('0x17')](_0xa743('0x18'),_0x5c69d9,_0xa743('0x16'),JSON[_0xa743('0x19')](_0x27d220));if(_0x27d220[_0xa743('0x1a')]){if(_0x27d220['error'][_0xa743('0x1b')]===0x1f4){logger[_0xa743('0x1a')]('DeskConfiguration,\x20%s,\x20%s',_0x5c69d9,_0x27d220[_0xa743('0x1a')][_0xa743('0x1c')]);return _0x53cf51(_0x27d220[_0xa743('0x1a')][_0xa743('0x1c')]);}logger[_0xa743('0x1a')]('DeskConfiguration,\x20%s,\x20%s',_0x5c69d9,_0x27d220[_0xa743('0x1a')][_0xa743('0x1c')]);return _0x590286(_0x27d220[_0xa743('0x1a')][_0xa743('0x1c')]);}else{logger[_0xa743('0x14')](_0xa743('0x15'),_0x5c69d9,'request\x20sent');_0x590286(_0x27d220[_0xa743('0x1d')]['message']);}})[_0xa743('0x1e')](function(_0x4741a){logger[_0xa743('0x1a')](_0xa743('0x15'),_0x5c69d9,_0x4741a);_0x53cf51(_0x4741a);});});}function respondWithStatusCode(_0x48f078,_0x59352f){_0x59352f=_0x59352f||0xcc;return function(_0x20c9af){if(_0x20c9af){return _0x48f078['sendStatus'](_0x59352f);}return _0x48f078[_0xa743('0x1f')](_0x59352f)[_0xa743('0x20')]();};}function respondWithResult(_0x2f217b,_0x596e5a){_0x596e5a=_0x596e5a||0xc8;return function(_0x362df4){if(_0x362df4){return _0x2f217b[_0xa743('0x1f')](_0x596e5a)[_0xa743('0x21')](_0x362df4);}};}function respondWithFilteredResult(_0x12acbf,_0x4d56ed){return function(_0x52f09d){if(_0x52f09d){var _0x476db6=_0x52f09d['count'],_0x4b6cc6=_0x4d56ed['offset'],_0x89e3e9=_0x4d56ed['offset']+_0x4d56ed[_0xa743('0x22')],_0x1a2564;if(_0x89e3e9>=_0x476db6){_0x89e3e9=_0x476db6;_0x1a2564=0xc8;}else{_0x1a2564=0xce;}_0x12acbf[_0xa743('0x1f')](_0x1a2564);return _0x12acbf['set'](_0xa743('0x23'),_0x4b6cc6+'-'+_0x89e3e9+'/'+_0x476db6)['json'](_0x52f09d);}return null;};}function patchUpdates(_0x27e2ed){return function(_0x3af5e2){try{jsonpatch[_0xa743('0x24')](_0x3af5e2,_0x27e2ed,!![]);}catch(_0x15bbf9){return BPromise[_0xa743('0x25')](_0x15bbf9);}return _0x3af5e2['save']();};}function saveUpdates(_0x5e4a20,_0x197f25){return function(_0x4ece03){if(_0x4ece03){return _0x4ece03['update'](_0x5e4a20)[_0xa743('0x13')](function(_0x1e9d5c){return _0x1e9d5c;});}return null;};}function removeEntity(_0x4d23e1,_0x37d10a){return function(_0x1c7088){if(_0x1c7088){return _0x1c7088[_0xa743('0x26')]()['then'](function(){_0x4d23e1[_0xa743('0x1f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x21a333,_0x115d01){return function(_0x46960b){if(!_0x46960b){_0x21a333[_0xa743('0x27')](0x194);}return _0x46960b;};}function handleError(_0x286413,_0x132cfe){_0x132cfe=_0x132cfe||0x1f4;return function(_0xcca95e){logger[_0xa743('0x1a')](_0xcca95e[_0xa743('0x28')]);if(_0xcca95e[_0xa743('0x29')]){delete _0xcca95e[_0xa743('0x29')];}_0x286413[_0xa743('0x1f')](_0x132cfe)[_0xa743('0x2a')](_0xcca95e);};}exports[_0xa743('0x2b')]=function(_0x730fb0,_0x4b1995){var _0x38104e={},_0x1d04ef={},_0x3ad3c2={'count':0x0,'rows':[]};var _0x3dd431=db['DeskConfiguration'][_0xa743('0x2c')];_0x1d04ef[_0xa743('0x2d')]=_[_0xa743('0x2e')](_0x3dd431);var _0x311fc4={'dateStart':_0x730fb0[_0xa743('0x2f')][_0xa743('0x30')],'dateEnd':_0x730fb0[_0xa743('0x2f')][_0xa743('0x31')]};delete _0x730fb0[_0xa743('0x2f')][_0xa743('0x30')];delete _0x730fb0[_0xa743('0x2f')][_0xa743('0x31')];_0x1d04ef[_0xa743('0x2f')]=_[_0xa743('0x2e')](_0x730fb0[_0xa743('0x2f')]);_0x1d04ef[_0xa743('0x32')]=_['intersection'](_0x1d04ef[_0xa743('0x2d')],_0x1d04ef[_0xa743('0x2f')]);_0x38104e[_0xa743('0x33')]=_[_0xa743('0x34')](_0x1d04ef['model'],qs[_0xa743('0x35')](_0x730fb0[_0xa743('0x2f')]['fields']));_0x38104e[_0xa743('0x33')]=_0x38104e[_0xa743('0x33')]['length']?_0x38104e[_0xa743('0x33')]:_0x1d04ef[_0xa743('0x2d')];if(!_0x730fb0[_0xa743('0x2f')][_0xa743('0x36')](_0xa743('0x37'))){_0x38104e['limit']=qs[_0xa743('0x22')](_0x730fb0[_0xa743('0x2f')][_0xa743('0x22')]);_0x38104e[_0xa743('0x38')]=qs[_0xa743('0x38')](_0x730fb0[_0xa743('0x2f')][_0xa743('0x38')]);}_0x38104e[_0xa743('0x39')]=qs[_0xa743('0x3a')](_0x730fb0['query'][_0xa743('0x3a')]);_0x38104e['where']=qs[_0xa743('0x32')](_['pick'](_0x730fb0['query'],_0x1d04ef[_0xa743('0x32')]));if(_0x311fc4[_0xa743('0x30')]){if(_0x311fc4[_0xa743('0x31')]){_0x311fc4[_0xa743('0x31')]=moment(_0x311fc4[_0xa743('0x31')])[_0xa743('0x3b')](0x1,_0xa743('0x3c'));}else{_0x311fc4[_0xa743('0x31')]=moment(_0x311fc4[_0xa743('0x30')])[_0xa743('0x3b')](0x1,_0xa743('0x3c'));}_[_0xa743('0x3d')](_0x38104e[_0xa743('0x3e')],{'createdAt':{'$gte':_0x311fc4[_0xa743('0x30')],'$lte':_0x311fc4[_0xa743('0x31')]}});}if(_0x730fb0['query'][_0xa743('0x3f')]){_0x38104e['where']=_[_0xa743('0x3d')](_0x38104e['where'],{'$or':_[_0xa743('0x40')](_0x38104e['attributes'],function(_0x57543c){var _0x44ea94={};_0x44ea94[_0x57543c]={'$like':'%'+_0x730fb0['query'][_0xa743('0x3f')]+'%'};return _0x44ea94;})});}_0x38104e=_[_0xa743('0x3d')]({},_0x38104e,_0x730fb0[_0xa743('0x41')]);var _0x2ef46e={'where':_0x38104e[_0xa743('0x3e')]};return db[_0xa743('0x42')][_0xa743('0x43')](_0x2ef46e)[_0xa743('0x13')](function(_0x349330){_0x3ad3c2[_0xa743('0x43')]=_0x349330;if(_0x730fb0[_0xa743('0x2f')][_0xa743('0x44')]){_0x38104e['include']=[{'all':!![]}];}return db[_0xa743('0x42')][_0xa743('0x45')](_0x38104e);})[_0xa743('0x13')](function(_0xc21895){_0x3ad3c2[_0xa743('0x46')]=_0xc21895;return _0x3ad3c2;})['then'](respondWithFilteredResult(_0x4b1995,_0x38104e))['catch'](handleError(_0x4b1995,null));};exports[_0xa743('0x47')]=function(_0x5147e1,_0x2fe609){var _0x147d43={'raw':![],'where':{'id':_0x5147e1['params']['id']}},_0x3b1b95={};_0x3b1b95['model']=_[_0xa743('0x2e')](db[_0xa743('0x42')][_0xa743('0x2c')]);_0x3b1b95[_0xa743('0x2f')]=_[_0xa743('0x2e')](_0x5147e1['query']);_0x3b1b95[_0xa743('0x32')]=_[_0xa743('0x34')](_0x3b1b95[_0xa743('0x2d')],_0x3b1b95[_0xa743('0x2f')]);_0x147d43['attributes']=_[_0xa743('0x34')](_0x3b1b95[_0xa743('0x2d')],qs['fields'](_0x5147e1[_0xa743('0x2f')][_0xa743('0x35')]));_0x147d43[_0xa743('0x33')]=_0x147d43[_0xa743('0x33')][_0xa743('0x48')]?_0x147d43['attributes']:_0x3b1b95['model'];if(_0x5147e1[_0xa743('0x2f')]['includeAll']){_0x147d43[_0xa743('0x49')]=[{'all':!![]}];}_0x147d43=_[_0xa743('0x3d')]({},_0x147d43,_0x5147e1[_0xa743('0x41')]);return db[_0xa743('0x42')][_0xa743('0x4a')](_0x147d43)['then'](handleEntityNotFound(_0x2fe609,null))[_0xa743('0x13')](respondWithResult(_0x2fe609,null))[_0xa743('0x1e')](handleError(_0x2fe609,null));};exports[_0xa743('0x4b')]=function(_0x35ed03,_0x58eb01){return db[_0xa743('0x42')][_0xa743('0x4b')](_0x35ed03[_0xa743('0x4c')],{})[_0xa743('0x13')](respondWithResult(_0x58eb01,0xc9))[_0xa743('0x1e')](handleError(_0x58eb01,null));};exports[_0xa743('0x4d')]=function(_0x35fb16,_0x428b0c){if(_0x35fb16['body']['id']){delete _0x35fb16[_0xa743('0x4c')]['id'];}return db[_0xa743('0x42')][_0xa743('0x4a')]({'where':{'id':_0x35fb16['params']['id']}})[_0xa743('0x13')](handleEntityNotFound(_0x428b0c,null))[_0xa743('0x13')](saveUpdates(_0x35fb16[_0xa743('0x4c')],null))[_0xa743('0x13')](respondWithResult(_0x428b0c,null))['catch'](handleError(_0x428b0c,null));};exports[_0xa743('0x26')]=function(_0x5934e6,_0x77991d){return db[_0xa743('0x42')][_0xa743('0x4a')]({'where':{'id':_0x5934e6['params']['id']}})[_0xa743('0x13')](handleEntityNotFound(_0x77991d,null))[_0xa743('0x13')](removeEntity(_0x77991d,null))[_0xa743('0x1e')](handleError(_0x77991d,null));};exports[_0xa743('0x4e')]=function(_0x73e3e7,_0x4e5b26,_0x51434c){var _0x2868cb={};var _0x1adba0={};var _0x59c121;var _0x3e2289;return db['DeskConfiguration']['findOne']({'where':{'id':_0x73e3e7[_0xa743('0x4f')]['id']}})[_0xa743('0x13')](handleEntityNotFound(_0x4e5b26,null))[_0xa743('0x13')](function(_0x41e953){if(_0x41e953){_0x59c121=_0x41e953;_0x1adba0[_0xa743('0x2d')]=_['keys'](db['DeskField'][_0xa743('0x2c')]);_0x1adba0['query']=_[_0xa743('0x2e')](_0x73e3e7[_0xa743('0x2f')]);_0x1adba0['filters']=_['intersection'](_0x1adba0[_0xa743('0x2d')],_0x1adba0[_0xa743('0x2f')]);_0x2868cb[_0xa743('0x33')]=_['intersection'](_0x1adba0[_0xa743('0x2d')],qs[_0xa743('0x35')](_0x73e3e7['query'][_0xa743('0x35')]));_0x2868cb[_0xa743('0x33')]=_0x2868cb['attributes'][_0xa743('0x48')]?_0x2868cb[_0xa743('0x33')]:_0x1adba0[_0xa743('0x2d')];_0x2868cb[_0xa743('0x39')]=qs[_0xa743('0x3a')](_0x73e3e7[_0xa743('0x2f')][_0xa743('0x3a')]);_0x2868cb[_0xa743('0x3e')]=qs[_0xa743('0x32')](_[_0xa743('0x50')](_0x73e3e7['query'],_0x1adba0[_0xa743('0x32')]));if(_0x73e3e7['query'][_0xa743('0x3f')]){_0x2868cb[_0xa743('0x3e')]=_[_0xa743('0x3d')](_0x2868cb[_0xa743('0x3e')],{'$or':_['map'](_0x2868cb[_0xa743('0x33')],function(_0x38c23e){var _0x48302a={};_0x48302a[_0x38c23e]={'$like':'%'+_0x73e3e7[_0xa743('0x2f')][_0xa743('0x3f')]+'%'};return _0x48302a;})});}_0x2868cb=_[_0xa743('0x3d')]({},_0x2868cb,_0x73e3e7[_0xa743('0x41')]);return _0x59c121['getFields'](_0x2868cb);}})['then'](function(_0x3835cc){if(_0x3835cc){_0x3e2289=_0x3835cc[_0xa743('0x48')];if(!_0x73e3e7[_0xa743('0x2f')][_0xa743('0x36')](_0xa743('0x37'))){_0x2868cb[_0xa743('0x22')]=qs['limit'](_0x73e3e7[_0xa743('0x2f')][_0xa743('0x22')]);_0x2868cb[_0xa743('0x38')]=qs[_0xa743('0x38')](_0x73e3e7[_0xa743('0x2f')][_0xa743('0x38')]);}return _0x59c121['getFields'](_0x2868cb);}})['then'](function(_0x28c823){if(_0x28c823){return _0x28c823?{'count':_0x3e2289,'rows':_0x28c823}:null;}})[_0xa743('0x13')](respondWithResult(_0x4e5b26,null))[_0xa743('0x1e')](handleError(_0x4e5b26,null));};exports[_0xa743('0x51')]=function(_0xa7ae08,_0x6bc53,_0x3a9186){var _0x3c19e3={};var _0x5a334e={};var _0x4e62a2;var _0x498e51;return db[_0xa743('0x42')][_0xa743('0x52')]({'where':{'id':_0xa7ae08[_0xa743('0x4f')]['id']}})[_0xa743('0x13')](handleEntityNotFound(_0x6bc53,null))[_0xa743('0x13')](function(_0x2c2b98){if(_0x2c2b98){_0x4e62a2=_0x2c2b98;_0x5a334e[_0xa743('0x2d')]=_['keys'](db[_0xa743('0x53')][_0xa743('0x2c')]);_0x5a334e[_0xa743('0x2f')]=_[_0xa743('0x2e')](_0xa7ae08[_0xa743('0x2f')]);_0x5a334e['filters']=_[_0xa743('0x34')](_0x5a334e['model'],_0x5a334e[_0xa743('0x2f')]);_0x3c19e3['attributes']=_[_0xa743('0x34')](_0x5a334e[_0xa743('0x2d')],qs[_0xa743('0x35')](_0xa7ae08[_0xa743('0x2f')]['fields']));_0x3c19e3[_0xa743('0x33')]=_0x3c19e3[_0xa743('0x33')][_0xa743('0x48')]?_0x3c19e3[_0xa743('0x33')]:_0x5a334e[_0xa743('0x2d')];_0x3c19e3[_0xa743('0x39')]=qs[_0xa743('0x3a')](_0xa7ae08[_0xa743('0x2f')]['sort']);_0x3c19e3[_0xa743('0x3e')]=qs['filters'](_['pick'](_0xa7ae08[_0xa743('0x2f')],_0x5a334e[_0xa743('0x32')]));if(_0xa7ae08[_0xa743('0x2f')][_0xa743('0x3f')]){_0x3c19e3[_0xa743('0x3e')]=_[_0xa743('0x3d')](_0x3c19e3[_0xa743('0x3e')],{'$or':_[_0xa743('0x40')](_0x3c19e3['attributes'],function(_0x4d4303){var _0x3a8b0f={};_0x3a8b0f[_0x4d4303]={'$like':'%'+_0xa7ae08[_0xa743('0x2f')][_0xa743('0x3f')]+'%'};return _0x3a8b0f;})});}_0x3c19e3=_[_0xa743('0x3d')]({},_0x3c19e3,_0xa7ae08[_0xa743('0x41')]);return _0x4e62a2['getSubjects'](_0x3c19e3);}})['then'](function(_0x3dcd23){if(_0x3dcd23){_0x498e51=_0x3dcd23[_0xa743('0x48')];if(!_0xa7ae08[_0xa743('0x2f')][_0xa743('0x36')]('nolimit')){_0x3c19e3[_0xa743('0x22')]=qs[_0xa743('0x22')](_0xa7ae08[_0xa743('0x2f')][_0xa743('0x22')]);_0x3c19e3[_0xa743('0x38')]=qs[_0xa743('0x38')](_0xa7ae08[_0xa743('0x2f')][_0xa743('0x38')]);}return _0x4e62a2[_0xa743('0x51')](_0x3c19e3);}})[_0xa743('0x13')](function(_0x4b9927){if(_0x4b9927){return _0x4b9927?{'count':_0x498e51,'rows':_0x4b9927}:null;}})[_0xa743('0x13')](respondWithResult(_0x6bc53,null))['catch'](handleError(_0x6bc53,null));};exports[_0xa743('0x54')]=function(_0x23b32f,_0x2427dd,_0x14d561){var _0xe628b9={};var _0x3b421c={};var _0xa49303;var _0x24b45b;return db['DeskConfiguration'][_0xa743('0x52')]({'where':{'id':_0x23b32f['params']['id']}})[_0xa743('0x13')](handleEntityNotFound(_0x2427dd,null))['then'](function(_0xe1eff4){if(_0xe1eff4){_0xa49303=_0xe1eff4;_0x3b421c[_0xa743('0x2d')]=_[_0xa743('0x2e')](db[_0xa743('0x53')][_0xa743('0x2c')]);_0x3b421c[_0xa743('0x2f')]=_[_0xa743('0x2e')](_0x23b32f[_0xa743('0x2f')]);_0x3b421c[_0xa743('0x32')]=_[_0xa743('0x34')](_0x3b421c['model'],_0x3b421c['query']);_0xe628b9[_0xa743('0x33')]=_['intersection'](_0x3b421c[_0xa743('0x2d')],qs[_0xa743('0x35')](_0x23b32f[_0xa743('0x2f')][_0xa743('0x35')]));_0xe628b9[_0xa743('0x33')]=_0xe628b9[_0xa743('0x33')][_0xa743('0x48')]?_0xe628b9[_0xa743('0x33')]:_0x3b421c['model'];_0xe628b9[_0xa743('0x39')]=qs[_0xa743('0x3a')](_0x23b32f[_0xa743('0x2f')]['sort']);_0xe628b9['where']=qs['filters'](_['pick'](_0x23b32f[_0xa743('0x2f')],_0x3b421c[_0xa743('0x32')]));if(_0x23b32f['query'][_0xa743('0x3f')]){_0xe628b9[_0xa743('0x3e')]=_[_0xa743('0x3d')](_0xe628b9['where'],{'$or':_[_0xa743('0x40')](_0xe628b9['attributes'],function(_0x48bbac){var _0x25d0c6={};_0x25d0c6[_0x48bbac]={'$like':'%'+_0x23b32f[_0xa743('0x2f')]['filter']+'%'};return _0x25d0c6;})});}_0xe628b9=_[_0xa743('0x3d')]({},_0xe628b9,_0x23b32f[_0xa743('0x41')]);return _0xa49303[_0xa743('0x54')](_0xe628b9);}})[_0xa743('0x13')](function(_0x3b189d){if(_0x3b189d){_0x24b45b=_0x3b189d['length'];if(!_0x23b32f[_0xa743('0x2f')][_0xa743('0x36')]('nolimit')){_0xe628b9[_0xa743('0x22')]=qs[_0xa743('0x22')](_0x23b32f[_0xa743('0x2f')][_0xa743('0x22')]);_0xe628b9[_0xa743('0x38')]=qs[_0xa743('0x38')](_0x23b32f['query'][_0xa743('0x38')]);}return _0xa49303['getDescriptions'](_0xe628b9);}})[_0xa743('0x13')](function(_0x9cc3f1){if(_0x9cc3f1){return _0x9cc3f1?{'count':_0x24b45b,'rows':_0x9cc3f1}:null;}})['then'](respondWithResult(_0x2427dd,null))[_0xa743('0x1e')](handleError(_0x2427dd,null));};exports['getTags']=function(_0x2495c1,_0x331ff0,_0x51a060){var _0xf7e429={};var _0x26f652={};var _0x8db853;var _0x1d26f3;return db[_0xa743('0x42')]['findOne']({'where':{'id':_0x2495c1[_0xa743('0x4f')]['id']}})[_0xa743('0x13')](handleEntityNotFound(_0x331ff0,null))[_0xa743('0x13')](function(_0x27bd0b){if(_0x27bd0b){_0x8db853=_0x27bd0b;_0x26f652[_0xa743('0x2d')]=_[_0xa743('0x2e')](db[_0xa743('0x55')][_0xa743('0x2c')]);_0x26f652[_0xa743('0x2f')]=_[_0xa743('0x2e')](_0x2495c1[_0xa743('0x2f')]);_0x26f652[_0xa743('0x32')]=_['intersection'](_0x26f652[_0xa743('0x2d')],_0x26f652['query']);_0xf7e429[_0xa743('0x33')]=_[_0xa743('0x34')](_0x26f652[_0xa743('0x2d')],qs[_0xa743('0x35')](_0x2495c1['query']['fields']));_0xf7e429[_0xa743('0x33')]=_0xf7e429[_0xa743('0x33')]['length']?_0xf7e429['attributes']:_0x26f652['model'];_0xf7e429[_0xa743('0x39')]=qs[_0xa743('0x3a')](_0x2495c1[_0xa743('0x2f')][_0xa743('0x3a')]);_0xf7e429[_0xa743('0x3e')]=qs[_0xa743('0x32')](_['pick'](_0x2495c1[_0xa743('0x2f')],_0x26f652[_0xa743('0x32')]));if(_0x2495c1[_0xa743('0x2f')][_0xa743('0x3f')]){_0xf7e429['where']=_[_0xa743('0x3d')](_0xf7e429[_0xa743('0x3e')],{'$or':_[_0xa743('0x40')](_0xf7e429[_0xa743('0x33')],function(_0x149124){var _0x1f7caa={};_0x1f7caa[_0x149124]={'$like':'%'+_0x2495c1[_0xa743('0x2f')][_0xa743('0x3f')]+'%'};return _0x1f7caa;})});}_0xf7e429=_['merge']({},_0xf7e429,_0x2495c1['options']);return _0x8db853[_0xa743('0x56')](_0xf7e429);}})['then'](function(_0x3f4fe5){if(_0x3f4fe5){_0x1d26f3=_0x3f4fe5[_0xa743('0x48')];if(!_0x2495c1[_0xa743('0x2f')][_0xa743('0x36')](_0xa743('0x37'))){_0xf7e429[_0xa743('0x22')]=qs[_0xa743('0x22')](_0x2495c1[_0xa743('0x2f')][_0xa743('0x22')]);_0xf7e429[_0xa743('0x38')]=qs[_0xa743('0x38')](_0x2495c1[_0xa743('0x2f')][_0xa743('0x38')]);}return _0x8db853[_0xa743('0x56')](_0xf7e429);}})[_0xa743('0x13')](function(_0x2cbc05){if(_0x2cbc05){return _0x2cbc05?{'count':_0x1d26f3,'rows':_0x2cbc05}:null;}})[_0xa743('0x13')](respondWithResult(_0x331ff0,null))[_0xa743('0x1e')](handleError(_0x331ff0,null));};exports[_0xa743('0x57')]=function(_0x2b4743,_0x41fa39,_0xbf3c90){if(_0x2b4743['body']['id']){delete _0x2b4743[_0xa743('0x4c')]['id'];}return db[_0xa743('0x42')][_0xa743('0x52')]({'where':{'id':_0x2b4743[_0xa743('0x4f')]['id']}})[_0xa743('0x13')](handleEntityNotFound(_0x41fa39,null))[_0xa743('0x13')](function(_0x46377a){if(_0x46377a){return _0x46377a[_0xa743('0x57')](_0x2b4743[_0xa743('0x4c')][_0xa743('0x58')]||[]);}return null;})[_0xa743('0x13')](respondWithResult(_0x41fa39,null))['catch'](handleError(_0x41fa39,null));};
\ No newline at end of file
index 6921d24..880034b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4213=['../../config/logger','api','moment','bluebird','request-promise','exports','define','DeskConfiguration','int_desk_configurations','lodash','util'];(function(_0x3f6b1b,_0x58d3d6){var _0x4a3d2b=function(_0x5648f0){while(--_0x5648f0){_0x3f6b1b['push'](_0x3f6b1b['shift']());}};_0x4a3d2b(++_0x58d3d6);}(_0x4213,0x77));var _0x3421=function(_0x4be068,_0x3395fb){_0x4be068=_0x4be068-0x0;var _0x4e6c10=_0x4213[_0x4be068];return _0x4e6c10;};'use strict';var _=require(_0x3421('0x0'));var util=require(_0x3421('0x1'));var logger=require(_0x3421('0x2'))(_0x3421('0x3'));var moment=require(_0x3421('0x4'));var BPromise=require(_0x3421('0x5'));var rp=require(_0x3421('0x6'));var attributes=require('./intDeskConfiguration.attributes');module[_0x3421('0x7')]=function(_0x5c3719,_0x459c5e){return _0x5c3719[_0x3421('0x8')](_0x3421('0x9'),attributes,{'tableName':_0x3421('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8603=['util','../../config/logger','api','request-promise','./intDeskConfiguration.attributes','exports','DeskConfiguration','int_desk_configurations'];(function(_0x41c500,_0x38e4c7){var _0x53474b=function(_0x5e2edc){while(--_0x5e2edc){_0x41c500['push'](_0x41c500['shift']());}};_0x53474b(++_0x38e4c7);}(_0x8603,0x190));var _0x3860=function(_0x40d97c,_0x5c0276){_0x40d97c=_0x40d97c-0x0;var _0x5307a3=_0x8603[_0x40d97c];return _0x5307a3;};'use strict';var _=require('lodash');var util=require(_0x3860('0x0'));var logger=require(_0x3860('0x1'))(_0x3860('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x3860('0x3'));var attributes=require(_0x3860('0x4'));module[_0x3860('0x5')]=function(_0x490262,_0x2fc97a){return _0x490262['define'](_0x3860('0x6'),attributes,{'tableName':_0x3860('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index e8deb72..129efcd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbaf0=['http','request','info','DeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','DeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client'];(function(_0x3d0bc5,_0x14b150){var _0xefc0eb=function(_0x431d52){while(--_0x431d52){_0x3d0bc5['push'](_0x3d0bc5['shift']());}};_0xefc0eb(++_0x14b150);}(_0xbaf0,0x12a));var _0x0baf=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0xbaf0[_0x6c993a];return _0x27f547;};'use strict';var _=require('lodash');var util=require(_0x0baf('0x0'));var moment=require(_0x0baf('0x1'));var BPromise=require(_0x0baf('0x2'));var rs=require(_0x0baf('0x3'));var fs=require('fs');var db=require(_0x0baf('0x4'))['db'];var utils=require(_0x0baf('0x5'));var logger=require('../../config/logger')(_0x0baf('0x6'));var config=require(_0x0baf('0x7'));var jayson=require(_0x0baf('0x8'));var client=jayson[_0x0baf('0x9')][_0x0baf('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x335e24,_0x1a10b1,_0x2dcaac){return new BPromise(function(_0x1d0a0d,_0x5f5030){return client[_0x0baf('0xb')](_0x335e24,_0x2dcaac)['then'](function(_0x4605c3){logger[_0x0baf('0xc')](_0x0baf('0xd'),_0x1a10b1,_0x0baf('0xe'));logger[_0x0baf('0xf')](_0x0baf('0x10'),_0x1a10b1,_0x0baf('0xe'),JSON[_0x0baf('0x11')](_0x4605c3));if(_0x4605c3[_0x0baf('0x12')]){if(_0x4605c3[_0x0baf('0x12')][_0x0baf('0x13')]===0x1f4){logger['error']('DeskConfiguration,\x20%s,\x20%s',_0x1a10b1,_0x4605c3[_0x0baf('0x12')][_0x0baf('0x14')]);return _0x5f5030(_0x4605c3[_0x0baf('0x12')][_0x0baf('0x14')]);}logger['error'](_0x0baf('0xd'),_0x1a10b1,_0x4605c3['error'][_0x0baf('0x14')]);return _0x1d0a0d(_0x4605c3[_0x0baf('0x12')][_0x0baf('0x14')]);}else{logger[_0x0baf('0xc')](_0x0baf('0xd'),_0x1a10b1,_0x0baf('0xe'));_0x1d0a0d(_0x4605c3['result']['message']);}})[_0x0baf('0x15')](function(_0x38395b){logger[_0x0baf('0x12')](_0x0baf('0xd'),_0x1a10b1,_0x38395b);_0x5f5030(_0x38395b);});});}
\ No newline at end of file
+var _0xd8b0=['result','catch','lodash','util','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','then','info','DeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','DeskConfiguration,\x20%s,\x20%s,\x20%s','error','code','message'];(function(_0x2637ac,_0x377857){var _0x4a5758=function(_0x5d5043){while(--_0x5d5043){_0x2637ac['push'](_0x2637ac['shift']());}};_0x4a5758(++_0x377857);}(_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 db=require(_0x0d8b('0x2'))['db'];var utils=require(_0x0d8b('0x3'));var logger=require(_0x0d8b('0x4'))(_0x0d8b('0x5'));var config=require(_0x0d8b('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0x0d8b('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x227c63,_0x39f43a,_0x4a4470){return new BPromise(function(_0x413284,_0x284169){return client['request'](_0x227c63,_0x4a4470)[_0x0d8b('0x8')](function(_0x348e65){logger[_0x0d8b('0x9')](_0x0d8b('0xa'),_0x39f43a,_0x0d8b('0xb'));logger[_0x0d8b('0xc')](_0x0d8b('0xd'),_0x39f43a,_0x0d8b('0xb'),JSON['stringify'](_0x348e65));if(_0x348e65[_0x0d8b('0xe')]){if(_0x348e65['error'][_0x0d8b('0xf')]===0x1f4){logger[_0x0d8b('0xe')](_0x0d8b('0xa'),_0x39f43a,_0x348e65[_0x0d8b('0xe')][_0x0d8b('0x10')]);return _0x284169(_0x348e65[_0x0d8b('0xe')][_0x0d8b('0x10')]);}logger[_0x0d8b('0xe')](_0x0d8b('0xa'),_0x39f43a,_0x348e65[_0x0d8b('0xe')][_0x0d8b('0x10')]);return _0x413284(_0x348e65[_0x0d8b('0xe')][_0x0d8b('0x10')]);}else{logger[_0x0d8b('0x9')]('DeskConfiguration,\x20%s,\x20%s',_0x39f43a,_0x0d8b('0xb'));_0x413284(_0x348e65[_0x0d8b('0x11')][_0x0d8b('0x10')]);}})[_0x0d8b('0x12')](function(_0x2cb03c){logger['error'](_0x0d8b('0xa'),_0x39f43a,_0x2cb03c);_0x284169(_0x2cb03c);});});}
\ No newline at end of file
index feee5c1..4da7d1a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x32d6=['get','isAuthenticated','index','/:id','show','post','put','update','delete','destroy','exports','multer','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intDeskField.controller'];(function(_0x64ef5e,_0xb8a467){var _0x24651a=function(_0x5dc8f6){while(--_0x5dc8f6){_0x64ef5e['push'](_0x64ef5e['shift']());}};_0x24651a(++_0xb8a467);}(_0x32d6,0xf5));var _0x632d=function(_0x41a9d9,_0x1b390e){_0x41a9d9=_0x41a9d9-0x0;var _0x261f63=_0x32d6[_0x41a9d9];return _0x261f63;};'use strict';var multer=require(_0x632d('0x0'));var util=require('util');var path=require(_0x632d('0x1'));var express=require(_0x632d('0x2'));var router=express['Router']();var auth=require(_0x632d('0x3'));var interaction=require(_0x632d('0x4'));var config=require(_0x632d('0x5'));var controller=require(_0x632d('0x6'));router[_0x632d('0x7')]('/',auth[_0x632d('0x8')](),controller[_0x632d('0x9')]);router['get'](_0x632d('0xa'),auth[_0x632d('0x8')](),controller[_0x632d('0xb')]);router[_0x632d('0xc')]('/',auth[_0x632d('0x8')](),controller['create']);router[_0x632d('0xd')](_0x632d('0xa'),auth['isAuthenticated'](),controller[_0x632d('0xe')]);router[_0x632d('0xf')]('/:id',auth['isAuthenticated'](),controller[_0x632d('0x10')]);module[_0x632d('0x11')]=router;
\ No newline at end of file
+var _0x5225=['./intDeskField.controller','get','isAuthenticated','index','/:id','show','update','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x22431e,_0x5af0a3){var _0xd978e9=function(_0x2bbdd7){while(--_0x2bbdd7){_0x22431e['push'](_0x22431e['shift']());}};_0xd978e9(++_0x5af0a3);}(_0x5225,0xa2));var _0x5522=function(_0xbec8e6,_0x2841b5){_0xbec8e6=_0xbec8e6-0x0;var _0x4aa6f2=_0x5225[_0xbec8e6];return _0x4aa6f2;};'use strict';var multer=require(_0x5522('0x0'));var util=require(_0x5522('0x1'));var path=require('path');var express=require(_0x5522('0x2'));var router=express[_0x5522('0x3')]();var auth=require(_0x5522('0x4'));var interaction=require(_0x5522('0x5'));var config=require('../../config/environment');var controller=require(_0x5522('0x6'));router[_0x5522('0x7')]('/',auth[_0x5522('0x8')](),controller[_0x5522('0x9')]);router[_0x5522('0x7')](_0x5522('0xa'),auth[_0x5522('0x8')](),controller[_0x5522('0xb')]);router['post']('/',auth[_0x5522('0x8')](),controller['create']);router['put'](_0x5522('0xa'),auth[_0x5522('0x8')](),controller[_0x5522('0xc')]);router['delete'](_0x5522('0xa'),auth[_0x5522('0x8')](),controller['destroy']);module[_0x5522('0xd')]=router;
\ No newline at end of file
index a38070a..ccdb45d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa571=['exports','ENUM','string','customVariable','keyValue','STRING','variable','sequelize'];(function(_0x30525a,_0x35277d){var _0x2bf8c3=function(_0x396ac6){while(--_0x396ac6){_0x30525a['push'](_0x30525a['shift']());}};_0x2bf8c3(++_0x35277d);}(_0xa571,0x107));var _0x1a57=function(_0x48ec9e,_0x41d4c0){_0x48ec9e=_0x48ec9e-0x0;var _0x2e1558=_0xa571[_0x48ec9e];return _0x2e1558;};'use strict';var Sequelize=require(_0x1a57('0x0'));module[_0x1a57('0x1')]={'type':{'type':Sequelize[_0x1a57('0x2')](_0x1a57('0x3'),'variable',_0x1a57('0x4'),_0x1a57('0x5')),'defaultValue':'string'},'content':{'type':Sequelize['STRING']},'key':{'type':Sequelize[_0x1a57('0x6')]},'keyType':{'type':Sequelize['ENUM'](_0x1a57('0x3'),_0x1a57('0x7'),_0x1a57('0x4'))},'keyContent':{'type':Sequelize[_0x1a57('0x6')]},'idField':{'type':Sequelize[_0x1a57('0x6')]},'nameField':{'type':Sequelize[_0x1a57('0x6')]},'customField':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x1a57('0x6')]}};
\ No newline at end of file
+var _0x878f=['exports','ENUM','string','variable','customVariable','keyValue','STRING'];(function(_0x23b91d,_0x3a6d14){var _0x87475c=function(_0x59a099){while(--_0x59a099){_0x23b91d['push'](_0x23b91d['shift']());}};_0x87475c(++_0x3a6d14);}(_0x878f,0x173));var _0xf878=function(_0x24a54c,_0xb7443e){_0x24a54c=_0x24a54c-0x0;var _0x58ec01=_0x878f[_0x24a54c];return _0x58ec01;};'use strict';var Sequelize=require('sequelize');module[_0xf878('0x0')]={'type':{'type':Sequelize[_0xf878('0x1')](_0xf878('0x2'),_0xf878('0x3'),_0xf878('0x4'),_0xf878('0x5')),'defaultValue':_0xf878('0x2')},'content':{'type':Sequelize[_0xf878('0x6')]},'key':{'type':Sequelize[_0xf878('0x6')]},'keyType':{'type':Sequelize[_0xf878('0x1')](_0xf878('0x2'),'variable','customVariable')},'keyContent':{'type':Sequelize[_0xf878('0x6')]},'idField':{'type':Sequelize[_0xf878('0x6')]},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
index f8e2b0f..ad06887 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf3e2=['sort','where','filters','pick','dateEnd','day','merge','filter','map','options','includeAll','include','findAll','rows','show','find','catch','create','body','params','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','api','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','Content-Range','json','save','update','then','destroy','error','stack','name','send','DeskField','rawAttributes','model','keys','dateStart','query','intersection','attributes','fields','length','nolimit','order'];(function(_0x16145f,_0x4344ee){var _0xfcf3c9=function(_0x3ce37d){while(--_0x3ce37d){_0x16145f['push'](_0x16145f['shift']());}};_0xfcf3c9(++_0x4344ee);}(_0xf3e2,0x168));var _0x2f3e=function(_0x41ec44,_0x8b28c6){_0x41ec44=_0x41ec44-0x0;var _0x3da0ea=_0xf3e2[_0x41ec44];return _0x3da0ea;};'use strict';var jsonpatch=require(_0x2f3e('0x0'));var rp=require(_0x2f3e('0x1'));var moment=require(_0x2f3e('0x2'));var BPromise=require(_0x2f3e('0x3'));var Mustache=require(_0x2f3e('0x4'));var util=require(_0x2f3e('0x5'));var path=require(_0x2f3e('0x6'));var sox=require(_0x2f3e('0x7'));var csv=require('to-csv');var ejs=require(_0x2f3e('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x2f3e('0x9'));var crypto=require(_0x2f3e('0xa'));var jsforce=require(_0x2f3e('0xb'));var deskjs=require(_0x2f3e('0xc'));var toCsv=require(_0x2f3e('0xd'));var querystring=require(_0x2f3e('0xe'));var Papa=require(_0x2f3e('0xf'));var qs=require(_0x2f3e('0x10'));var logger=require('../../config/logger')(_0x2f3e('0x11'));var utils=require('../../config/utils');var config=require(_0x2f3e('0x12'));var db=require(_0x2f3e('0x13'))['db'];function respondWithStatusCode(_0x63ca9f,_0x32a9d8){_0x32a9d8=_0x32a9d8||0xcc;return function(_0x412819){if(_0x412819){return _0x63ca9f[_0x2f3e('0x14')](_0x32a9d8);}return _0x63ca9f[_0x2f3e('0x15')](_0x32a9d8)[_0x2f3e('0x16')]();};}function respondWithResult(_0x2c2539,_0x14c0bd){_0x14c0bd=_0x14c0bd||0xc8;return function(_0x1a7596){if(_0x1a7596){return _0x2c2539[_0x2f3e('0x15')](_0x14c0bd)['json'](_0x1a7596);}};}function respondWithFilteredResult(_0x25b913,_0x4c7499){return function(_0x4362c6){if(_0x4362c6){var _0x1b2c62=_0x4362c6[_0x2f3e('0x17')],_0x5f3734=_0x4c7499[_0x2f3e('0x18')],_0x536f5e=_0x4c7499[_0x2f3e('0x18')]+_0x4c7499[_0x2f3e('0x19')],_0x1ad130;if(_0x536f5e>=_0x1b2c62){_0x536f5e=_0x1b2c62;_0x1ad130=0xc8;}else{_0x1ad130=0xce;}_0x25b913[_0x2f3e('0x15')](_0x1ad130);return _0x25b913['set'](_0x2f3e('0x1a'),_0x5f3734+'-'+_0x536f5e+'/'+_0x1b2c62)[_0x2f3e('0x1b')](_0x4362c6);}return null;};}function patchUpdates(_0x15398d){return function(_0x3c076a){try{jsonpatch['apply'](_0x3c076a,_0x15398d,!![]);}catch(_0x127ebe){return BPromise['reject'](_0x127ebe);}return _0x3c076a[_0x2f3e('0x1c')]();};}function saveUpdates(_0x452bd8,_0x64f096){return function(_0x27eff9){if(_0x27eff9){return _0x27eff9[_0x2f3e('0x1d')](_0x452bd8)[_0x2f3e('0x1e')](function(_0x18068a){return _0x18068a;});}return null;};}function removeEntity(_0x1e6987,_0xdebdf){return function(_0x22ac6c){if(_0x22ac6c){return _0x22ac6c[_0x2f3e('0x1f')]()[_0x2f3e('0x1e')](function(){_0x1e6987[_0x2f3e('0x15')](0xcc)[_0x2f3e('0x16')]();});}};}function handleEntityNotFound(_0x1b6ad6,_0x421911){return function(_0x37a48a){if(!_0x37a48a){_0x1b6ad6[_0x2f3e('0x14')](0x194);}return _0x37a48a;};}function handleError(_0x22dd45,_0x226b5a){_0x226b5a=_0x226b5a||0x1f4;return function(_0x464fad){logger[_0x2f3e('0x20')](_0x464fad[_0x2f3e('0x21')]);if(_0x464fad[_0x2f3e('0x22')]){delete _0x464fad['name'];}_0x22dd45[_0x2f3e('0x15')](_0x226b5a)[_0x2f3e('0x23')](_0x464fad);};}exports['index']=function(_0x1b0bb2,_0x43a4c8){var _0x146cf0={},_0x6a2c1f={},_0x59231b={'count':0x0,'rows':[]};var _0x5e8389=db[_0x2f3e('0x24')][_0x2f3e('0x25')];_0x6a2c1f[_0x2f3e('0x26')]=_[_0x2f3e('0x27')](_0x5e8389);var _0x1699bf={'dateStart':_0x1b0bb2['query'][_0x2f3e('0x28')],'dateEnd':_0x1b0bb2['query']['dateEnd']};delete _0x1b0bb2[_0x2f3e('0x29')]['dateStart'];delete _0x1b0bb2[_0x2f3e('0x29')]['dateEnd'];_0x6a2c1f['query']=_[_0x2f3e('0x27')](_0x1b0bb2[_0x2f3e('0x29')]);_0x6a2c1f['filters']=_[_0x2f3e('0x2a')](_0x6a2c1f[_0x2f3e('0x26')],_0x6a2c1f[_0x2f3e('0x29')]);_0x146cf0[_0x2f3e('0x2b')]=_[_0x2f3e('0x2a')](_0x6a2c1f['model'],qs[_0x2f3e('0x2c')](_0x1b0bb2[_0x2f3e('0x29')]['fields']));_0x146cf0[_0x2f3e('0x2b')]=_0x146cf0[_0x2f3e('0x2b')][_0x2f3e('0x2d')]?_0x146cf0[_0x2f3e('0x2b')]:_0x6a2c1f[_0x2f3e('0x26')];if(!_0x1b0bb2['query']['hasOwnProperty'](_0x2f3e('0x2e'))){_0x146cf0[_0x2f3e('0x19')]=qs[_0x2f3e('0x19')](_0x1b0bb2[_0x2f3e('0x29')][_0x2f3e('0x19')]);_0x146cf0[_0x2f3e('0x18')]=qs['offset'](_0x1b0bb2[_0x2f3e('0x29')]['offset']);}_0x146cf0[_0x2f3e('0x2f')]=qs[_0x2f3e('0x30')](_0x1b0bb2[_0x2f3e('0x29')][_0x2f3e('0x30')]);_0x146cf0[_0x2f3e('0x31')]=qs[_0x2f3e('0x32')](_[_0x2f3e('0x33')](_0x1b0bb2[_0x2f3e('0x29')],_0x6a2c1f['filters']));if(_0x1699bf[_0x2f3e('0x28')]){if(_0x1699bf[_0x2f3e('0x34')]){_0x1699bf['dateEnd']=moment(_0x1699bf[_0x2f3e('0x34')])['add'](0x1,'day');}else{_0x1699bf[_0x2f3e('0x34')]=moment(_0x1699bf[_0x2f3e('0x28')])['add'](0x1,_0x2f3e('0x35'));}_[_0x2f3e('0x36')](_0x146cf0['where'],{'createdAt':{'$gte':_0x1699bf['dateStart'],'$lte':_0x1699bf[_0x2f3e('0x34')]}});}if(_0x1b0bb2[_0x2f3e('0x29')][_0x2f3e('0x37')]){_0x146cf0[_0x2f3e('0x31')]=_[_0x2f3e('0x36')](_0x146cf0[_0x2f3e('0x31')],{'$or':_[_0x2f3e('0x38')](_0x146cf0[_0x2f3e('0x2b')],function(_0x903b29){var _0x3968e4={};_0x3968e4[_0x903b29]={'$like':'%'+_0x1b0bb2[_0x2f3e('0x29')][_0x2f3e('0x37')]+'%'};return _0x3968e4;})});}_0x146cf0=_[_0x2f3e('0x36')]({},_0x146cf0,_0x1b0bb2[_0x2f3e('0x39')]);var _0x22ace7={'where':_0x146cf0['where']};return db[_0x2f3e('0x24')][_0x2f3e('0x17')](_0x22ace7)[_0x2f3e('0x1e')](function(_0x5286b4){_0x59231b[_0x2f3e('0x17')]=_0x5286b4;if(_0x1b0bb2[_0x2f3e('0x29')][_0x2f3e('0x3a')]){_0x146cf0[_0x2f3e('0x3b')]=[{'all':!![]}];}return db[_0x2f3e('0x24')][_0x2f3e('0x3c')](_0x146cf0);})[_0x2f3e('0x1e')](function(_0x326493){_0x59231b[_0x2f3e('0x3d')]=_0x326493;return _0x59231b;})[_0x2f3e('0x1e')](respondWithFilteredResult(_0x43a4c8,_0x146cf0))['catch'](handleError(_0x43a4c8,null));};exports[_0x2f3e('0x3e')]=function(_0x234406,_0x486a38){var _0x263011={'raw':!![],'where':{'id':_0x234406['params']['id']}},_0x16d83b={};_0x16d83b[_0x2f3e('0x26')]=_[_0x2f3e('0x27')](db[_0x2f3e('0x24')]['rawAttributes']);_0x16d83b[_0x2f3e('0x29')]=_[_0x2f3e('0x27')](_0x234406[_0x2f3e('0x29')]);_0x16d83b[_0x2f3e('0x32')]=_['intersection'](_0x16d83b[_0x2f3e('0x26')],_0x16d83b[_0x2f3e('0x29')]);_0x263011['attributes']=_[_0x2f3e('0x2a')](_0x16d83b['model'],qs[_0x2f3e('0x2c')](_0x234406[_0x2f3e('0x29')][_0x2f3e('0x2c')]));_0x263011[_0x2f3e('0x2b')]=_0x263011[_0x2f3e('0x2b')][_0x2f3e('0x2d')]?_0x263011[_0x2f3e('0x2b')]:_0x16d83b[_0x2f3e('0x26')];if(_0x234406['query']['includeAll']){_0x263011['include']=[{'all':!![]}];}_0x263011=_['merge']({},_0x263011,_0x234406[_0x2f3e('0x39')]);return db[_0x2f3e('0x24')][_0x2f3e('0x3f')](_0x263011)[_0x2f3e('0x1e')](handleEntityNotFound(_0x486a38,null))['then'](respondWithResult(_0x486a38,null))[_0x2f3e('0x40')](handleError(_0x486a38,null));};exports[_0x2f3e('0x41')]=function(_0x4f0654,_0x4d347a){return db[_0x2f3e('0x24')][_0x2f3e('0x41')](_0x4f0654[_0x2f3e('0x42')],{})[_0x2f3e('0x1e')](respondWithResult(_0x4d347a,0xc9))[_0x2f3e('0x40')](handleError(_0x4d347a,null));};exports[_0x2f3e('0x1d')]=function(_0x45cf90,_0x12b9a8){if(_0x45cf90['body']['id']){delete _0x45cf90[_0x2f3e('0x42')]['id'];}return db[_0x2f3e('0x24')][_0x2f3e('0x3f')]({'where':{'id':_0x45cf90[_0x2f3e('0x43')]['id']}})[_0x2f3e('0x1e')](handleEntityNotFound(_0x12b9a8,null))[_0x2f3e('0x1e')](saveUpdates(_0x45cf90[_0x2f3e('0x42')],null))['then'](respondWithResult(_0x12b9a8,null))[_0x2f3e('0x40')](handleError(_0x12b9a8,null));};exports[_0x2f3e('0x1f')]=function(_0x5c93e6,_0x45d5bf){return db[_0x2f3e('0x24')][_0x2f3e('0x3f')]({'where':{'id':_0x5c93e6[_0x2f3e('0x43')]['id']}})[_0x2f3e('0x1e')](handleEntityNotFound(_0x45d5bf,null))[_0x2f3e('0x1e')](removeEntity(_0x45d5bf,null))['catch'](handleError(_0x45d5bf,null));};
\ No newline at end of file
+var _0x1a37=['../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','Content-Range','apply','save','update','then','destroy','end','error','stack','name','send','index','DeskField','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','add','merge','map','filter','includeAll','include','findAll','catch','show','rawAttributes','options','find','create','body','params','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','jsforce','desk.js','querystring','../../config/utils'];(function(_0x2642cb,_0x4b917f){var _0xe6e41=function(_0x281676){while(--_0x281676){_0x2642cb['push'](_0x2642cb['shift']());}};_0xe6e41(++_0x4b917f);}(_0x1a37,0xb4));var _0x71a3=function(_0x45d55e,_0x2fede3){_0x45d55e=_0x45d55e-0x0;var _0x29812a=_0x1a37[_0x45d55e];return _0x29812a;};'use strict';var jsonpatch=require(_0x71a3('0x0'));var rp=require(_0x71a3('0x1'));var moment=require(_0x71a3('0x2'));var BPromise=require(_0x71a3('0x3'));var Mustache=require(_0x71a3('0x4'));var util=require(_0x71a3('0x5'));var path=require(_0x71a3('0x6'));var sox=require(_0x71a3('0x7'));var csv=require(_0x71a3('0x8'));var ejs=require(_0x71a3('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x71a3('0xa'));var crypto=require('crypto');var jsforce=require(_0x71a3('0xb'));var deskjs=require(_0x71a3('0xc'));var toCsv=require(_0x71a3('0x8'));var querystring=require(_0x71a3('0xd'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')('api');var utils=require(_0x71a3('0xe'));var config=require(_0x71a3('0xf'));var db=require(_0x71a3('0x10'))['db'];function respondWithStatusCode(_0x3aeb48,_0x3a7fc1){_0x3a7fc1=_0x3a7fc1||0xcc;return function(_0x2215f2){if(_0x2215f2){return _0x3aeb48[_0x71a3('0x11')](_0x3a7fc1);}return _0x3aeb48[_0x71a3('0x12')](_0x3a7fc1)['end']();};}function respondWithResult(_0x5ac7df,_0x5e37e8){_0x5e37e8=_0x5e37e8||0xc8;return function(_0x15923f){if(_0x15923f){return _0x5ac7df[_0x71a3('0x12')](_0x5e37e8)[_0x71a3('0x13')](_0x15923f);}};}function respondWithFilteredResult(_0x229134,_0x1bc117){return function(_0x2a2b06){if(_0x2a2b06){var _0x2bbc8c=_0x2a2b06[_0x71a3('0x14')],_0x3b256c=_0x1bc117['offset'],_0x4dc4ed=_0x1bc117[_0x71a3('0x15')]+_0x1bc117[_0x71a3('0x16')],_0x203ee1;if(_0x4dc4ed>=_0x2bbc8c){_0x4dc4ed=_0x2bbc8c;_0x203ee1=0xc8;}else{_0x203ee1=0xce;}_0x229134['status'](_0x203ee1);return _0x229134['set'](_0x71a3('0x17'),_0x3b256c+'-'+_0x4dc4ed+'/'+_0x2bbc8c)[_0x71a3('0x13')](_0x2a2b06);}return null;};}function patchUpdates(_0xee797f){return function(_0x201ed8){try{jsonpatch[_0x71a3('0x18')](_0x201ed8,_0xee797f,!![]);}catch(_0x318ff6){return BPromise['reject'](_0x318ff6);}return _0x201ed8[_0x71a3('0x19')]();};}function saveUpdates(_0x27bfb4,_0x5b955a){return function(_0x5f4562){if(_0x5f4562){return _0x5f4562[_0x71a3('0x1a')](_0x27bfb4)[_0x71a3('0x1b')](function(_0x21d6b4){return _0x21d6b4;});}return null;};}function removeEntity(_0x1c4ec2,_0x4a7980){return function(_0x596328){if(_0x596328){return _0x596328[_0x71a3('0x1c')]()[_0x71a3('0x1b')](function(){_0x1c4ec2[_0x71a3('0x12')](0xcc)[_0x71a3('0x1d')]();});}};}function handleEntityNotFound(_0x3c862f,_0x50ab3a){return function(_0x1af24b){if(!_0x1af24b){_0x3c862f['sendStatus'](0x194);}return _0x1af24b;};}function handleError(_0x3bf78e,_0x35d1d4){_0x35d1d4=_0x35d1d4||0x1f4;return function(_0x2982b9){logger[_0x71a3('0x1e')](_0x2982b9[_0x71a3('0x1f')]);if(_0x2982b9[_0x71a3('0x20')]){delete _0x2982b9['name'];}_0x3bf78e[_0x71a3('0x12')](_0x35d1d4)[_0x71a3('0x21')](_0x2982b9);};}exports[_0x71a3('0x22')]=function(_0x427518,_0xb0f3aa){var _0x4fd214={},_0x107fbd={},_0x2b414d={'count':0x0,'rows':[]};var _0x4c1a3d=db[_0x71a3('0x23')]['rawAttributes'];_0x107fbd[_0x71a3('0x24')]=_[_0x71a3('0x25')](_0x4c1a3d);var _0x211ea8={'dateStart':_0x427518[_0x71a3('0x26')][_0x71a3('0x27')],'dateEnd':_0x427518[_0x71a3('0x26')][_0x71a3('0x28')]};delete _0x427518[_0x71a3('0x26')][_0x71a3('0x27')];delete _0x427518[_0x71a3('0x26')][_0x71a3('0x28')];_0x107fbd[_0x71a3('0x26')]=_['keys'](_0x427518[_0x71a3('0x26')]);_0x107fbd[_0x71a3('0x29')]=_[_0x71a3('0x2a')](_0x107fbd[_0x71a3('0x24')],_0x107fbd['query']);_0x4fd214[_0x71a3('0x2b')]=_[_0x71a3('0x2a')](_0x107fbd[_0x71a3('0x24')],qs[_0x71a3('0x2c')](_0x427518[_0x71a3('0x26')][_0x71a3('0x2c')]));_0x4fd214[_0x71a3('0x2b')]=_0x4fd214['attributes'][_0x71a3('0x2d')]?_0x4fd214[_0x71a3('0x2b')]:_0x107fbd[_0x71a3('0x24')];if(!_0x427518[_0x71a3('0x26')][_0x71a3('0x2e')](_0x71a3('0x2f'))){_0x4fd214[_0x71a3('0x16')]=qs[_0x71a3('0x16')](_0x427518[_0x71a3('0x26')][_0x71a3('0x16')]);_0x4fd214[_0x71a3('0x15')]=qs[_0x71a3('0x15')](_0x427518[_0x71a3('0x26')]['offset']);}_0x4fd214['order']=qs[_0x71a3('0x30')](_0x427518[_0x71a3('0x26')]['sort']);_0x4fd214[_0x71a3('0x31')]=qs[_0x71a3('0x29')](_['pick'](_0x427518[_0x71a3('0x26')],_0x107fbd[_0x71a3('0x29')]));if(_0x211ea8[_0x71a3('0x27')]){if(_0x211ea8[_0x71a3('0x28')]){_0x211ea8[_0x71a3('0x28')]=moment(_0x211ea8[_0x71a3('0x28')])[_0x71a3('0x32')](0x1,'day');}else{_0x211ea8[_0x71a3('0x28')]=moment(_0x211ea8[_0x71a3('0x27')])[_0x71a3('0x32')](0x1,'day');}_[_0x71a3('0x33')](_0x4fd214[_0x71a3('0x31')],{'createdAt':{'$gte':_0x211ea8[_0x71a3('0x27')],'$lte':_0x211ea8[_0x71a3('0x28')]}});}if(_0x427518[_0x71a3('0x26')]['filter']){_0x4fd214['where']=_[_0x71a3('0x33')](_0x4fd214[_0x71a3('0x31')],{'$or':_[_0x71a3('0x34')](_0x4fd214[_0x71a3('0x2b')],function(_0x36ed2e){var _0x4e7d61={};_0x4e7d61[_0x36ed2e]={'$like':'%'+_0x427518[_0x71a3('0x26')][_0x71a3('0x35')]+'%'};return _0x4e7d61;})});}_0x4fd214=_[_0x71a3('0x33')]({},_0x4fd214,_0x427518['options']);var _0x17c467={'where':_0x4fd214['where']};return db[_0x71a3('0x23')][_0x71a3('0x14')](_0x17c467)[_0x71a3('0x1b')](function(_0x43c6d1){_0x2b414d[_0x71a3('0x14')]=_0x43c6d1;if(_0x427518[_0x71a3('0x26')][_0x71a3('0x36')]){_0x4fd214[_0x71a3('0x37')]=[{'all':!![]}];}return db[_0x71a3('0x23')][_0x71a3('0x38')](_0x4fd214);})['then'](function(_0xa49846){_0x2b414d['rows']=_0xa49846;return _0x2b414d;})[_0x71a3('0x1b')](respondWithFilteredResult(_0xb0f3aa,_0x4fd214))[_0x71a3('0x39')](handleError(_0xb0f3aa,null));};exports[_0x71a3('0x3a')]=function(_0x18974c,_0x59c7c9){var _0x412bce={'raw':!![],'where':{'id':_0x18974c['params']['id']}},_0x4b4fde={};_0x4b4fde[_0x71a3('0x24')]=_[_0x71a3('0x25')](db[_0x71a3('0x23')][_0x71a3('0x3b')]);_0x4b4fde['query']=_[_0x71a3('0x25')](_0x18974c[_0x71a3('0x26')]);_0x4b4fde[_0x71a3('0x29')]=_[_0x71a3('0x2a')](_0x4b4fde[_0x71a3('0x24')],_0x4b4fde[_0x71a3('0x26')]);_0x412bce[_0x71a3('0x2b')]=_[_0x71a3('0x2a')](_0x4b4fde[_0x71a3('0x24')],qs[_0x71a3('0x2c')](_0x18974c[_0x71a3('0x26')][_0x71a3('0x2c')]));_0x412bce[_0x71a3('0x2b')]=_0x412bce[_0x71a3('0x2b')][_0x71a3('0x2d')]?_0x412bce[_0x71a3('0x2b')]:_0x4b4fde['model'];if(_0x18974c[_0x71a3('0x26')][_0x71a3('0x36')]){_0x412bce['include']=[{'all':!![]}];}_0x412bce=_[_0x71a3('0x33')]({},_0x412bce,_0x18974c[_0x71a3('0x3c')]);return db[_0x71a3('0x23')][_0x71a3('0x3d')](_0x412bce)[_0x71a3('0x1b')](handleEntityNotFound(_0x59c7c9,null))['then'](respondWithResult(_0x59c7c9,null))['catch'](handleError(_0x59c7c9,null));};exports[_0x71a3('0x3e')]=function(_0x4305ee,_0x51d20d){return db[_0x71a3('0x23')][_0x71a3('0x3e')](_0x4305ee[_0x71a3('0x3f')],{})[_0x71a3('0x1b')](respondWithResult(_0x51d20d,0xc9))[_0x71a3('0x39')](handleError(_0x51d20d,null));};exports[_0x71a3('0x1a')]=function(_0x501a62,_0x1c9ba6){if(_0x501a62['body']['id']){delete _0x501a62[_0x71a3('0x3f')]['id'];}return db[_0x71a3('0x23')][_0x71a3('0x3d')]({'where':{'id':_0x501a62[_0x71a3('0x40')]['id']}})[_0x71a3('0x1b')](handleEntityNotFound(_0x1c9ba6,null))['then'](saveUpdates(_0x501a62[_0x71a3('0x3f')],null))[_0x71a3('0x1b')](respondWithResult(_0x1c9ba6,null))[_0x71a3('0x39')](handleError(_0x1c9ba6,null));};exports['destroy']=function(_0x6c34,_0x4e6423){return db[_0x71a3('0x23')][_0x71a3('0x3d')]({'where':{'id':_0x6c34['params']['id']}})[_0x71a3('0x1b')](handleEntityNotFound(_0x4e6423,null))[_0x71a3('0x1b')](removeEntity(_0x4e6423,null))[_0x71a3('0x39')](handleError(_0x4e6423,null));};
\ No newline at end of file
index 4c7e05a..209d1f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x303a=['bluebird','./intDeskField.attributes','exports','define','DeskField','int_desk_fields','lodash','../../config/logger','api','moment'];(function(_0x13ca54,_0x11cb9f){var _0xd6d7ce=function(_0x114876){while(--_0x114876){_0x13ca54['push'](_0x13ca54['shift']());}};_0xd6d7ce(++_0x11cb9f);}(_0x303a,0x1a0));var _0xa303=function(_0x37a3f3,_0x663b49){_0x37a3f3=_0x37a3f3-0x0;var _0x4da923=_0x303a[_0x37a3f3];return _0x4da923;};'use strict';var _=require(_0xa303('0x0'));var util=require('util');var logger=require(_0xa303('0x1'))(_0xa303('0x2'));var moment=require(_0xa303('0x3'));var BPromise=require(_0xa303('0x4'));var rp=require('request-promise');var attributes=require(_0xa303('0x5'));module[_0xa303('0x6')]=function(_0x38a354,_0x217275){return _0x38a354[_0xa303('0x7')](_0xa303('0x8'),attributes,{'tableName':_0xa303('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb903=['util','../../config/logger','api','bluebird','request-promise','./intDeskField.attributes','exports','define','int_desk_fields','lodash'];(function(_0x15c874,_0x5d5fdc){var _0x3cc9c6=function(_0x447ef0){while(--_0x447ef0){_0x15c874['push'](_0x15c874['shift']());}};_0x3cc9c6(++_0x5d5fdc);}(_0xb903,0x185));var _0x3b90=function(_0x234222,_0x5497b7){_0x234222=_0x234222-0x0;var _0x3df4ae=_0xb903[_0x234222];return _0x3df4ae;};'use strict';var _=require(_0x3b90('0x0'));var util=require(_0x3b90('0x1'));var logger=require(_0x3b90('0x2'))(_0x3b90('0x3'));var moment=require('moment');var BPromise=require(_0x3b90('0x4'));var rp=require(_0x3b90('0x5'));var attributes=require(_0x3b90('0x6'));module[_0x3b90('0x7')]=function(_0x30d8db,_0x40f726){return _0x30d8db[_0x3b90('0x8')]('DeskField',attributes,{'tableName':_0x3b90('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 8b6db1a..b640a50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xecb4=['catch','moment','bluebird','randomstring','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','request\x20sent','debug','stringify','error','code','message','DeskField,\x20%s,\x20%s','info','result'];(function(_0x5e4938,_0xdb1448){var _0x1335c8=function(_0x3c6715){while(--_0x3c6715){_0x5e4938['push'](_0x5e4938['shift']());}};_0x1335c8(++_0xdb1448);}(_0xecb4,0x1e4));var _0x4ecb=function(_0x14ae7d,_0x3a2c94){_0x14ae7d=_0x14ae7d-0x0;var _0x5d7881=_0xecb4[_0x14ae7d];return _0x5d7881;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x4ecb('0x0'));var BPromise=require(_0x4ecb('0x1'));var rs=require(_0x4ecb('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x4ecb('0x3'));var logger=require('../../config/logger')(_0x4ecb('0x4'));var config=require(_0x4ecb('0x5'));var jayson=require(_0x4ecb('0x6'));var client=jayson[_0x4ecb('0x7')][_0x4ecb('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x192c81,_0x57cf2f,_0x397bb7){return new BPromise(function(_0x57935f,_0x460961){return client[_0x4ecb('0x9')](_0x192c81,_0x397bb7)[_0x4ecb('0xa')](function(_0x5de289){logger['info']('DeskField,\x20%s,\x20%s',_0x57cf2f,_0x4ecb('0xb'));logger[_0x4ecb('0xc')]('DeskField,\x20%s,\x20%s,\x20%s',_0x57cf2f,_0x4ecb('0xb'),JSON[_0x4ecb('0xd')](_0x5de289));if(_0x5de289['error']){if(_0x5de289[_0x4ecb('0xe')][_0x4ecb('0xf')]===0x1f4){logger[_0x4ecb('0xe')]('DeskField,\x20%s,\x20%s',_0x57cf2f,_0x5de289[_0x4ecb('0xe')][_0x4ecb('0x10')]);return _0x460961(_0x5de289[_0x4ecb('0xe')][_0x4ecb('0x10')]);}logger[_0x4ecb('0xe')](_0x4ecb('0x11'),_0x57cf2f,_0x5de289[_0x4ecb('0xe')][_0x4ecb('0x10')]);return _0x57935f(_0x5de289[_0x4ecb('0xe')][_0x4ecb('0x10')]);}else{logger[_0x4ecb('0x12')](_0x4ecb('0x11'),_0x57cf2f,_0x4ecb('0xb'));_0x57935f(_0x5de289[_0x4ecb('0x13')][_0x4ecb('0x10')]);}})[_0x4ecb('0x14')](function(_0x5f1fba){logger[_0x4ecb('0xe')](_0x4ecb('0x11'),_0x57cf2f,_0x5f1fba);_0x460961(_0x5f1fba);});});}
\ No newline at end of file
+var _0xcf52=['lodash','util','moment','../../mysqldb','../../config/utils','rpc','../../config/environment','client','http','then','info','request\x20sent','debug','DeskField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','DeskField,\x20%s,\x20%s','result','catch'];(function(_0x463ae1,_0x4d1bd5){var _0x461cbd=function(_0x3b2c3d){while(--_0x3b2c3d){_0x463ae1['push'](_0x463ae1['shift']());}};_0x461cbd(++_0x4d1bd5);}(_0xcf52,0x150));var _0x2cf5=function(_0x5fe4f7,_0x4f2c6e){_0x5fe4f7=_0x5fe4f7-0x0;var _0x4871cf=_0xcf52[_0x5fe4f7];return _0x4871cf;};'use strict';var _=require(_0x2cf5('0x0'));var util=require(_0x2cf5('0x1'));var moment=require(_0x2cf5('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0x2cf5('0x3'))['db'];var utils=require(_0x2cf5('0x4'));var logger=require('../../config/logger')(_0x2cf5('0x5'));var config=require(_0x2cf5('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x2cf5('0x7')][_0x2cf5('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x4e6469,_0x35aa8f,_0x2e556e){return new BPromise(function(_0x387f05,_0x564810){return client['request'](_0x4e6469,_0x2e556e)[_0x2cf5('0x9')](function(_0x33f21e){logger[_0x2cf5('0xa')]('DeskField,\x20%s,\x20%s',_0x35aa8f,_0x2cf5('0xb'));logger[_0x2cf5('0xc')](_0x2cf5('0xd'),_0x35aa8f,'request\x20sent',JSON[_0x2cf5('0xe')](_0x33f21e));if(_0x33f21e[_0x2cf5('0xf')]){if(_0x33f21e['error'][_0x2cf5('0x10')]===0x1f4){logger[_0x2cf5('0xf')]('DeskField,\x20%s,\x20%s',_0x35aa8f,_0x33f21e['error']['message']);return _0x564810(_0x33f21e['error'][_0x2cf5('0x11')]);}logger['error'](_0x2cf5('0x12'),_0x35aa8f,_0x33f21e[_0x2cf5('0xf')][_0x2cf5('0x11')]);return _0x387f05(_0x33f21e[_0x2cf5('0xf')]['message']);}else{logger[_0x2cf5('0xa')](_0x2cf5('0x12'),_0x35aa8f,_0x2cf5('0xb'));_0x387f05(_0x33f21e[_0x2cf5('0x13')][_0x2cf5('0x11')]);}})[_0x2cf5('0x14')](function(_0x168e96){logger['error'](_0x2cf5('0x12'),_0x35aa8f,_0x168e96);_0x564810(_0x168e96);});});}
\ No newline at end of file
index b0a3c3e..26c16f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0959=['./intFreshdeskAccount.controller','isAuthenticated','index','get','/:id','show','/:id/configurations','/:id/fields','getFields','create','post','addConfiguration','put','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x101316,_0x66853){var _0x1ac282=function(_0x571a03){while(--_0x571a03){_0x101316['push'](_0x101316['shift']());}};_0x1ac282(++_0x66853);}(_0x0959,0x118));var _0x9095=function(_0x50a71b,_0x257679){_0x50a71b=_0x50a71b-0x0;var _0x20e3f3=_0x0959[_0x50a71b];return _0x20e3f3;};'use strict';var multer=require(_0x9095('0x0'));var util=require(_0x9095('0x1'));var path=require(_0x9095('0x2'));var express=require(_0x9095('0x3'));var router=express[_0x9095('0x4')]();var auth=require(_0x9095('0x5'));var interaction=require(_0x9095('0x6'));var config=require(_0x9095('0x7'));var controller=require(_0x9095('0x8'));router['get']('/',auth[_0x9095('0x9')](),controller[_0x9095('0xa')]);router[_0x9095('0xb')](_0x9095('0xc'),auth[_0x9095('0x9')](),controller[_0x9095('0xd')]);router[_0x9095('0xb')](_0x9095('0xe'),auth[_0x9095('0x9')](),controller['getConfigurations']);router[_0x9095('0xb')](_0x9095('0xf'),auth[_0x9095('0x9')](),controller[_0x9095('0x10')]);router['post']('/',auth[_0x9095('0x9')](),controller[_0x9095('0x11')]);router[_0x9095('0x12')](_0x9095('0xe'),auth[_0x9095('0x9')](),controller[_0x9095('0x13')]);router[_0x9095('0x14')](_0x9095('0xc'),auth['isAuthenticated'](),controller['update']);router[_0x9095('0x15')](_0x9095('0xc'),auth[_0x9095('0x9')](),controller[_0x9095('0x16')]);module[_0x9095('0x17')]=router;
\ No newline at end of file
+var _0x1be6=['delete','destroy','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intFreshdeskAccount.controller','get','isAuthenticated','index','/:id','show','/:id/configurations','getConfigurations','getFields','post','create','addConfiguration','put','update'];(function(_0x5da066,_0x43ee3f){var _0x4773b7=function(_0x2619fd){while(--_0x2619fd){_0x5da066['push'](_0x5da066['shift']());}};_0x4773b7(++_0x43ee3f);}(_0x1be6,0x10b));var _0x61be=function(_0x44e6ec,_0x3e07f9){_0x44e6ec=_0x44e6ec-0x0;var _0x4ca27f=_0x1be6[_0x44e6ec];return _0x4ca27f;};'use strict';var multer=require(_0x61be('0x0'));var util=require(_0x61be('0x1'));var path=require(_0x61be('0x2'));var express=require(_0x61be('0x3'));var router=express['Router']();var auth=require(_0x61be('0x4'));var interaction=require(_0x61be('0x5'));var config=require(_0x61be('0x6'));var controller=require(_0x61be('0x7'));router[_0x61be('0x8')]('/',auth[_0x61be('0x9')](),controller[_0x61be('0xa')]);router[_0x61be('0x8')](_0x61be('0xb'),auth[_0x61be('0x9')](),controller[_0x61be('0xc')]);router[_0x61be('0x8')](_0x61be('0xd'),auth[_0x61be('0x9')](),controller[_0x61be('0xe')]);router[_0x61be('0x8')]('/:id/fields',auth[_0x61be('0x9')](),controller[_0x61be('0xf')]);router[_0x61be('0x10')]('/',auth[_0x61be('0x9')](),controller[_0x61be('0x11')]);router[_0x61be('0x10')](_0x61be('0xd'),auth[_0x61be('0x9')](),controller[_0x61be('0x12')]);router[_0x61be('0x13')](_0x61be('0xb'),auth[_0x61be('0x9')](),controller[_0x61be('0x14')]);router[_0x61be('0x15')](_0x61be('0xb'),auth[_0x61be('0x9')](),controller[_0x61be('0x16')]);module[_0x61be('0x17')]=router;
\ No newline at end of file
index f5898b1..8258d3f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf4a5=['remoteUri','sequelize','exports','STRING'];(function(_0x110c3d,_0x12ee06){var _0x226d67=function(_0x1fb6e1){while(--_0x1fb6e1){_0x110c3d['push'](_0x110c3d['shift']());}};_0x226d67(++_0x12ee06);}(_0xf4a5,0x81));var _0x5f4a=function(_0x578a80,_0x412698){_0x578a80=_0x578a80-0x0;var _0x4b4ba8=_0xf4a5[_0x578a80];return _0x4b4ba8;};'use strict';var Sequelize=require(_0x5f4a('0x0'));module[_0x5f4a('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize['STRING'],'unique':'username'},'apiKey':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize[_0x5f4a('0x2')],'unique':_0x5f4a('0x3')},'serverUrl':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x52c6=['STRING','sequelize','exports'];(function(_0x3ec5a3,_0x40cac0){var _0x3bc8dc=function(_0x240980){while(--_0x240980){_0x3ec5a3['push'](_0x3ec5a3['shift']());}};_0x3bc8dc(++_0x40cac0);}(_0x52c6,0x17b));var _0x652c=function(_0x55f8b4,_0x43f30d){_0x55f8b4=_0x55f8b4-0x0;var _0x2475f9=_0x52c6[_0x55f8b4];return _0x2475f9;};'use strict';var Sequelize=require(_0x652c('0x0'));module[_0x652c('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0x652c('0x2')],'unique':'username'},'apiKey':{'type':Sequelize[_0x652c('0x2')]},'remoteUri':{'type':Sequelize[_0x652c('0x2')],'unique':'remoteUri'},'serverUrl':{'type':Sequelize[_0x652c('0x2')]}};
\ No newline at end of file
index 6372657..70881fc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9991=['debug','FreshdeskAccount,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','stack','name','send','index','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','add','day','merge','filter','options','includeAll','include','FreshdeskAccount','findAll','show','params','rawAttributes','find','create','body','getConfigurations','findOne','FreshdeskConfiguration','addConfiguration','getSubjects','channel','Descriptions','getDescriptions','type','FreshdeskField','Subjects','getFields','remoteUri','apiKey','GET','format','%s%s','Basic\x20%s','%s:X','toString','base64','agent','group','source','company','remove','includes','default','custom_text','map','label','choices','capitalize','test','statusCode','stringify','request-promise','moment','bluebird','mustache','util','path','ejs','squel','jsforce','desk.js','querystring','../../config/logger','api','../../config/utils','../../config/environment','../../components/integrations/configuration','jayson/promise','http','request','then','FreshdeskAccount,\x20%s,\x20%s','request\x20sent'];(function(_0x9bfb0a,_0x6c427){var _0x37bfe8=function(_0x186b0b){while(--_0x186b0b){_0x9bfb0a['push'](_0x9bfb0a['shift']());}};_0x37bfe8(++_0x6c427);}(_0x9991,0x1aa));var _0x1999=function(_0x21f8bd,_0x309fb5){_0x21f8bd=_0x21f8bd-0x0;var _0x150517=_0x9991[_0x21f8bd];return _0x150517;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x1999('0x0'));var moment=require(_0x1999('0x1'));var BPromise=require(_0x1999('0x2'));var Mustache=require(_0x1999('0x3'));var util=require(_0x1999('0x4'));var path=require(_0x1999('0x5'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x1999('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x1999('0x7'));var crypto=require('crypto');var jsforce=require(_0x1999('0x8'));var deskjs=require(_0x1999('0x9'));var toCsv=require('to-csv');var querystring=require(_0x1999('0xa'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0x1999('0xb'))(_0x1999('0xc'));var utils=require(_0x1999('0xd'));var config=require(_0x1999('0xe'));var db=require('../../mysqldb')['db'];var integrations=require(_0x1999('0xf'));var jayson=require(_0x1999('0x10'));var client=jayson['client'][_0x1999('0x11')]({'port':0x232a});function respondWithRpcPromise(_0x20b624,_0x1d1704,_0x2ea32b,_0x5d7c55){return new BPromise(function(_0x46454f,_0x39fae0){var _0x97ea7a=_0x5d7c55||client;return _0x97ea7a[_0x1999('0x12')](_0x20b624,_0x2ea32b)[_0x1999('0x13')](function(_0x48f682){logger['info'](_0x1999('0x14'),_0x1d1704,_0x1999('0x15'));logger[_0x1999('0x16')](_0x1999('0x17'),_0x1d1704,'request\x20sent',JSON['stringify'](_0x48f682));if(_0x48f682[_0x1999('0x18')]){if(_0x48f682[_0x1999('0x18')][_0x1999('0x19')]===0x1f4){logger[_0x1999('0x18')]('FreshdeskAccount,\x20%s,\x20%s',_0x1d1704,_0x48f682[_0x1999('0x18')][_0x1999('0x1a')]);return _0x39fae0(_0x48f682[_0x1999('0x18')][_0x1999('0x1a')]);}logger[_0x1999('0x18')](_0x1999('0x14'),_0x1d1704,_0x48f682[_0x1999('0x18')][_0x1999('0x1a')]);return _0x46454f(_0x48f682[_0x1999('0x18')][_0x1999('0x1a')]);}else{logger['info'](_0x1999('0x14'),_0x1d1704,_0x1999('0x15'));_0x46454f(_0x48f682[_0x1999('0x1b')][_0x1999('0x1a')]);}})[_0x1999('0x1c')](function(_0x215a3d){logger['error']('FreshdeskAccount,\x20%s,\x20%s',_0x1d1704,_0x215a3d);_0x39fae0(_0x215a3d);});});}function respondWithStatusCode(_0x21c7ec,_0x44d7c8){_0x44d7c8=_0x44d7c8||0xcc;return function(_0x4732ed){if(_0x4732ed){return _0x21c7ec['sendStatus'](_0x44d7c8);}return _0x21c7ec[_0x1999('0x1d')](_0x44d7c8)[_0x1999('0x1e')]();};}function respondWithResult(_0x504ce0,_0x23c7ee){_0x23c7ee=_0x23c7ee||0xc8;return function(_0x45b098){if(_0x45b098){return _0x504ce0[_0x1999('0x1d')](_0x23c7ee)[_0x1999('0x1f')](_0x45b098);}};}function respondWithFilteredResult(_0x1d74a3,_0x190af9){return function(_0x8dff27){if(_0x8dff27){var _0x3d4751=_0x8dff27[_0x1999('0x20')],_0x37a714=_0x190af9[_0x1999('0x21')],_0xe4d8c4=_0x190af9[_0x1999('0x21')]+_0x190af9[_0x1999('0x22')],_0x111462;if(_0xe4d8c4>=_0x3d4751){_0xe4d8c4=_0x3d4751;_0x111462=0xc8;}else{_0x111462=0xce;}_0x1d74a3['status'](_0x111462);return _0x1d74a3[_0x1999('0x23')](_0x1999('0x24'),_0x37a714+'-'+_0xe4d8c4+'/'+_0x3d4751)[_0x1999('0x1f')](_0x8dff27);}return null;};}function patchUpdates(_0x21e923){return function(_0x3cba6c){try{jsonpatch[_0x1999('0x25')](_0x3cba6c,_0x21e923,!![]);}catch(_0x44e7c9){return BPromise[_0x1999('0x26')](_0x44e7c9);}return _0x3cba6c[_0x1999('0x27')]();};}function saveUpdates(_0x20d599,_0x46b9e4){return function(_0x4f3d70){if(_0x4f3d70){return _0x4f3d70[_0x1999('0x28')](_0x20d599)[_0x1999('0x13')](function(_0x295378){return _0x295378;});}return null;};}function removeEntity(_0x51bc41,_0x215241){return function(_0x598f0d){if(_0x598f0d){return _0x598f0d[_0x1999('0x29')]()['then'](function(){_0x51bc41[_0x1999('0x1d')](0xcc)[_0x1999('0x1e')]();});}};}function handleEntityNotFound(_0x2e6921,_0x252587){return function(_0x3aed7d){if(!_0x3aed7d){_0x2e6921['sendStatus'](0x194);}return _0x3aed7d;};}function handleError(_0x5b198e,_0x21fe4c){_0x21fe4c=_0x21fe4c||0x1f4;return function(_0x2780bf){logger['error'](_0x2780bf[_0x1999('0x2a')]);if(_0x2780bf[_0x1999('0x2b')]){delete _0x2780bf[_0x1999('0x2b')];}_0x5b198e[_0x1999('0x1d')](_0x21fe4c)[_0x1999('0x2c')](_0x2780bf);};}exports[_0x1999('0x2d')]=function(_0x45273d,_0x1e63a8){var _0x550187={},_0x2cac82={},_0x30a79e={'count':0x0,'rows':[]};var _0x3279f8=db['FreshdeskAccount']['rawAttributes'];_0x2cac82[_0x1999('0x2e')]=_[_0x1999('0x2f')](_0x3279f8);var _0xc40f56={'dateStart':_0x45273d['query'][_0x1999('0x30')],'dateEnd':_0x45273d[_0x1999('0x31')][_0x1999('0x32')]};delete _0x45273d['query']['dateStart'];delete _0x45273d[_0x1999('0x31')][_0x1999('0x32')];_0x2cac82[_0x1999('0x31')]=_['keys'](_0x45273d[_0x1999('0x31')]);_0x2cac82[_0x1999('0x33')]=_[_0x1999('0x34')](_0x2cac82[_0x1999('0x2e')],_0x2cac82[_0x1999('0x31')]);_0x550187[_0x1999('0x35')]=_['intersection'](_0x2cac82[_0x1999('0x2e')],qs[_0x1999('0x36')](_0x45273d[_0x1999('0x31')][_0x1999('0x36')]));_0x550187[_0x1999('0x35')]=_0x550187[_0x1999('0x35')][_0x1999('0x37')]?_0x550187[_0x1999('0x35')]:_0x2cac82[_0x1999('0x2e')];if(!_0x45273d['query'][_0x1999('0x38')](_0x1999('0x39'))){_0x550187[_0x1999('0x22')]=qs[_0x1999('0x22')](_0x45273d[_0x1999('0x31')][_0x1999('0x22')]);_0x550187[_0x1999('0x21')]=qs['offset'](_0x45273d['query'][_0x1999('0x21')]);}_0x550187[_0x1999('0x3a')]=qs[_0x1999('0x3b')](_0x45273d[_0x1999('0x31')][_0x1999('0x3b')]);_0x550187[_0x1999('0x3c')]=qs['filters'](_['pick'](_0x45273d[_0x1999('0x31')],_0x2cac82[_0x1999('0x33')]));if(_0xc40f56[_0x1999('0x30')]){if(_0xc40f56[_0x1999('0x32')]){_0xc40f56[_0x1999('0x32')]=moment(_0xc40f56['dateEnd'])[_0x1999('0x3d')](0x1,_0x1999('0x3e'));}else{_0xc40f56[_0x1999('0x32')]=moment(_0xc40f56[_0x1999('0x30')])[_0x1999('0x3d')](0x1,'day');}_[_0x1999('0x3f')](_0x550187[_0x1999('0x3c')],{'createdAt':{'$gte':_0xc40f56[_0x1999('0x30')],'$lte':_0xc40f56[_0x1999('0x32')]}});}if(_0x45273d[_0x1999('0x31')][_0x1999('0x40')]){_0x550187[_0x1999('0x3c')]=_['merge'](_0x550187[_0x1999('0x3c')],{'$or':_['map'](_0x550187[_0x1999('0x35')],function(_0x5afb92){var _0x4e816b={};_0x4e816b[_0x5afb92]={'$like':'%'+_0x45273d[_0x1999('0x31')]['filter']+'%'};return _0x4e816b;})});}_0x550187=_['merge']({},_0x550187,_0x45273d[_0x1999('0x41')]);var _0x33deed={'where':_0x550187[_0x1999('0x3c')]};return db['FreshdeskAccount']['count'](_0x33deed)[_0x1999('0x13')](function(_0x1e80dd){_0x30a79e[_0x1999('0x20')]=_0x1e80dd;if(_0x45273d['query'][_0x1999('0x42')]){_0x550187[_0x1999('0x43')]=[{'all':!![]}];}return db[_0x1999('0x44')][_0x1999('0x45')](_0x550187);})[_0x1999('0x13')](function(_0x47043d){_0x30a79e['rows']=_0x47043d;return _0x30a79e;})['then'](respondWithFilteredResult(_0x1e63a8,_0x550187))[_0x1999('0x1c')](handleError(_0x1e63a8,null));};exports[_0x1999('0x46')]=function(_0x2809b7,_0x84f798){var _0x11796e={'raw':![],'where':{'id':_0x2809b7[_0x1999('0x47')]['id']}},_0x36b5b5={};_0x36b5b5[_0x1999('0x2e')]=_[_0x1999('0x2f')](db['FreshdeskAccount'][_0x1999('0x48')]);_0x36b5b5[_0x1999('0x31')]=_[_0x1999('0x2f')](_0x2809b7[_0x1999('0x31')]);_0x36b5b5[_0x1999('0x33')]=_[_0x1999('0x34')](_0x36b5b5[_0x1999('0x2e')],_0x36b5b5[_0x1999('0x31')]);_0x11796e['attributes']=_[_0x1999('0x34')](_0x36b5b5['model'],qs[_0x1999('0x36')](_0x2809b7[_0x1999('0x31')][_0x1999('0x36')]));_0x11796e['attributes']=_0x11796e['attributes'][_0x1999('0x37')]?_0x11796e[_0x1999('0x35')]:_0x36b5b5[_0x1999('0x2e')];if(_0x2809b7[_0x1999('0x31')][_0x1999('0x42')]){_0x11796e[_0x1999('0x43')]=[{'all':!![]}];}_0x11796e=_['merge']({},_0x11796e,_0x2809b7[_0x1999('0x41')]);return db['FreshdeskAccount'][_0x1999('0x49')](_0x11796e)[_0x1999('0x13')](handleEntityNotFound(_0x84f798,null))['then'](respondWithResult(_0x84f798,null))[_0x1999('0x1c')](handleError(_0x84f798,null));};exports[_0x1999('0x4a')]=function(_0x16e5aa,_0x251eeb){return db['FreshdeskAccount'][_0x1999('0x4a')](_0x16e5aa[_0x1999('0x4b')],{})[_0x1999('0x13')](respondWithResult(_0x251eeb,0xc9))[_0x1999('0x1c')](handleError(_0x251eeb,null));};exports[_0x1999('0x28')]=function(_0x20077c,_0x13b64e){if(_0x20077c[_0x1999('0x4b')]['id']){delete _0x20077c[_0x1999('0x4b')]['id'];}return db[_0x1999('0x44')][_0x1999('0x49')]({'where':{'id':_0x20077c['params']['id']}})['then'](handleEntityNotFound(_0x13b64e,null))[_0x1999('0x13')](saveUpdates(_0x20077c[_0x1999('0x4b')],null))[_0x1999('0x13')](respondWithResult(_0x13b64e,null))[_0x1999('0x1c')](handleError(_0x13b64e,null));};exports['destroy']=function(_0xe9316,_0x554a60){return db[_0x1999('0x44')][_0x1999('0x49')]({'where':{'id':_0xe9316[_0x1999('0x47')]['id']}})[_0x1999('0x13')](handleEntityNotFound(_0x554a60,null))[_0x1999('0x13')](removeEntity(_0x554a60,null))['catch'](handleError(_0x554a60,null));};exports[_0x1999('0x4c')]=function(_0x5af2fa,_0x5a665a,_0x142c4e){var _0x428901={};var _0x2bd71b={};var _0x29aab8;var _0xe077d6;return db[_0x1999('0x44')][_0x1999('0x4d')]({'where':{'id':_0x5af2fa[_0x1999('0x47')]['id']}})['then'](handleEntityNotFound(_0x5a665a,null))['then'](function(_0x18ae41){if(_0x18ae41){_0x29aab8=_0x18ae41;_0x2bd71b[_0x1999('0x2e')]=_['keys'](db[_0x1999('0x4e')][_0x1999('0x48')]);_0x2bd71b['query']=_['keys'](_0x5af2fa[_0x1999('0x31')]);_0x2bd71b[_0x1999('0x33')]=_[_0x1999('0x34')](_0x2bd71b[_0x1999('0x2e')],_0x2bd71b[_0x1999('0x31')]);_0x428901['attributes']=_['intersection'](_0x2bd71b[_0x1999('0x2e')],qs[_0x1999('0x36')](_0x5af2fa[_0x1999('0x31')][_0x1999('0x36')]));_0x428901['attributes']=_0x428901[_0x1999('0x35')][_0x1999('0x37')]?_0x428901['attributes']:_0x2bd71b[_0x1999('0x2e')];_0x428901['order']=qs[_0x1999('0x3b')](_0x5af2fa[_0x1999('0x31')][_0x1999('0x3b')]);_0x428901['where']=qs['filters'](_['pick'](_0x5af2fa['query'],_0x2bd71b[_0x1999('0x33')]));if(_0x5af2fa[_0x1999('0x31')][_0x1999('0x40')]){_0x428901[_0x1999('0x3c')]=_[_0x1999('0x3f')](_0x428901[_0x1999('0x3c')],{'$or':_['map'](_0x428901[_0x1999('0x35')],function(_0x5e60ee){var _0x11bce4={};_0x11bce4[_0x5e60ee]={'$like':'%'+_0x5af2fa['query'][_0x1999('0x40')]+'%'};return _0x11bce4;})});}_0x428901=_[_0x1999('0x3f')]({},_0x428901,_0x5af2fa['options']);return _0x29aab8[_0x1999('0x4c')](_0x428901);}})[_0x1999('0x13')](function(_0x126f32){if(_0x126f32){_0xe077d6=_0x126f32[_0x1999('0x37')];if(!_0x5af2fa[_0x1999('0x31')][_0x1999('0x38')](_0x1999('0x39'))){_0x428901['limit']=qs['limit'](_0x5af2fa[_0x1999('0x31')][_0x1999('0x22')]);_0x428901[_0x1999('0x21')]=qs[_0x1999('0x21')](_0x5af2fa[_0x1999('0x31')][_0x1999('0x21')]);}return _0x29aab8['getConfigurations'](_0x428901);}})[_0x1999('0x13')](function(_0x27631f){if(_0x27631f){return _0x27631f?{'count':_0xe077d6,'rows':_0x27631f}:null;}})[_0x1999('0x13')](respondWithResult(_0x5a665a,null))[_0x1999('0x1c')](handleError(_0x5a665a,null));};exports[_0x1999('0x4f')]=function(_0x479690,_0x46a5e8,_0x33f0df){if(_0x479690[_0x1999('0x4b')]['id']){delete _0x479690[_0x1999('0x4b')]['id'];}return db[_0x1999('0x44')][_0x1999('0x4d')]({'where':{'id':_0x479690['params']['id']}})['then'](handleEntityNotFound(_0x46a5e8,null))[_0x1999('0x13')](function(_0x5f2cd2){if(_0x5f2cd2){_0x479690[_0x1999('0x4b')]['AccountId']=_0x5f2cd2['id'];_0x479690[_0x1999('0x4b')]['Subjects']=integrations[_0x1999('0x50')](_0x479690[_0x1999('0x4b')][_0x1999('0x51')],_0x479690[_0x1999('0x4b')]['type']);_0x479690['body'][_0x1999('0x52')]=integrations[_0x1999('0x53')](_0x479690['body']['channel'],_0x479690[_0x1999('0x4b')][_0x1999('0x54')]);return db[_0x1999('0x4e')]['create'](_0x479690[_0x1999('0x4b')],{'include':[{'model':db[_0x1999('0x55')],'as':_0x1999('0x56')},{'model':db[_0x1999('0x55')],'as':_0x1999('0x52')}]});}return null;})[_0x1999('0x13')](respondWithResult(_0x46a5e8,null))[_0x1999('0x1c')](handleError(_0x46a5e8,null));};exports[_0x1999('0x57')]=function(_0x3e844a,_0x23f31c,_0x5ede66){return db[_0x1999('0x44')]['findOne']({'where':{'id':_0x3e844a[_0x1999('0x47')]['id']},'attributes':['id',_0x1999('0x58'),_0x1999('0x59')]})[_0x1999('0x13')](handleEntityNotFound(_0x23f31c,null))['then'](function(_0x312a11){if(_0x312a11){return rp({'method':_0x1999('0x5a'),'uri':util[_0x1999('0x5b')](_0x1999('0x5c'),_0x312a11[_0x1999('0x58')],'api/v2/ticket_fields'),'headers':{'Authorization':util[_0x1999('0x5b')](_0x1999('0x5d'),new Buffer(util[_0x1999('0x5b')](_0x1999('0x5e'),_0x312a11[_0x1999('0x59')]))[_0x1999('0x5f')](_0x1999('0x60')))},'json':!![]});}})[_0x1999('0x13')](function(_0x635a1){if(_0x635a1){var _0x1c9ad1=['requester','subject',_0x1999('0x61'),'description','status','priority',_0x1999('0x62'),_0x1999('0x63'),'ticket_type',_0x1999('0x62'),_0x1999('0x64')];_[_0x1999('0x65')](_0x635a1,function(_0x2d0587){return _0x1c9ad1[_0x1999('0x66')](_0x2d0587[_0x1999('0x2b')])||!_0x2d0587[_0x1999('0x67')]&&_0x2d0587['type']!==_0x1999('0x68');});return{'count':_0x635a1[_0x1999('0x37')],'rows':_[_0x1999('0x69')](_0x635a1,function(_0x20786e){return{'id':_0x20786e[_0x1999('0x2b')],'name':_0x20786e[_0x1999('0x6a')],'custom':!_0x20786e[_0x1999('0x67')],'options':_0x20786e[_0x1999('0x6b')]?_[_0x1999('0x69')](_0x20786e[_0x1999('0x6b')],function(_0x2b288e){return{'name':_[_0x1999('0x6c')](_0x2b288e),'value':_0x2b288e};}):[]};})};}})[_0x1999('0x13')](respondWithResult(_0x23f31c,null))[_0x1999('0x1c')](function(_0xe901d0){var _0x42c862=_0x3e844a['query'][_0x1999('0x6d')]?0x1f4:_0xe901d0[_0x1999('0x6e')]||0x1f4;logger[_0x1999('0x18')]('getFields,\x20%s,\x20%s,\x20%s','getFields',_0x42c862,JSON[_0x1999('0x6f')](_0xe901d0));delete _0xe901d0[_0x1999('0x2b')];if(_0x42c862===0x191){_0x42c862=0x190;}_0x23f31c['status'](_0x42c862)[_0x1999('0x2c')](_0x3e844a[_0x1999('0x31')]['test']?{'message':'Wrong\x20credentials','statusCode':_0xe901d0[_0x1999('0x6e')]}:_0xe901d0);});};
\ No newline at end of file
+var _0x96ab=['squel','crypto','jsforce','desk.js','papaparse','../../config/logger','../../components/integrations/configuration','jayson/promise','client','request','then','FreshdeskAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','info','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','stack','name','send','index','FreshdeskAccount','rawAttributes','model','keys','query','dateStart','dateEnd','attributes','intersection','fields','length','nolimit','sort','where','filters','pick','add','day','filter','merge','options','includeAll','include','findAll','rows','show','params','find','create','body','getConfigurations','order','map','hasOwnProperty','addConfiguration','findOne','getSubjects','channel','type','Descriptions','getDescriptions','FreshdeskConfiguration','FreshdeskField','getFields','remoteUri','apiKey','GET','format','api/v2/ticket_fields','%s:X','base64','requester','subject','description','priority','group','source','ticket_type','company','remove','includes','default','label','choices','capitalize','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','fast-json-patch','request-promise','moment','bluebird','util','sox','to-csv','ejs','lodash'];(function(_0x3f9883,_0x4778ed){var _0x4b8c8e=function(_0x2c9b58){while(--_0x2c9b58){_0x3f9883['push'](_0x3f9883['shift']());}};_0x4b8c8e(++_0x4778ed);}(_0x96ab,0x6a));var _0xb96a=function(_0x2cb632,_0x502b3e){_0x2cb632=_0x2cb632-0x0;var _0xe0ea95=_0x96ab[_0x2cb632];return _0xe0ea95;};'use strict';var jsonpatch=require(_0xb96a('0x0'));var rp=require(_0xb96a('0x1'));var moment=require(_0xb96a('0x2'));var BPromise=require(_0xb96a('0x3'));var Mustache=require('mustache');var util=require(_0xb96a('0x4'));var path=require('path');var sox=require(_0xb96a('0x5'));var csv=require(_0xb96a('0x6'));var ejs=require(_0xb96a('0x7'));var fs=require('fs');var _=require(_0xb96a('0x8'));var squel=require(_0xb96a('0x9'));var crypto=require(_0xb96a('0xa'));var jsforce=require(_0xb96a('0xb'));var deskjs=require(_0xb96a('0xc'));var toCsv=require(_0xb96a('0x6'));var querystring=require('querystring');var Papa=require(_0xb96a('0xd'));var qs=require('../../components/parsers/qs');var logger=require(_0xb96a('0xe'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var integrations=require(_0xb96a('0xf'));var jayson=require(_0xb96a('0x10'));var client=jayson[_0xb96a('0x11')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3260ce,_0x5b8a76,_0x13c41b,_0x5eeb78){return new BPromise(function(_0x4bf306,_0x183556){var _0x5cd1ab=_0x5eeb78||client;return _0x5cd1ab[_0xb96a('0x12')](_0x3260ce,_0x13c41b)[_0xb96a('0x13')](function(_0x371195){logger['info'](_0xb96a('0x14'),_0x5b8a76,_0xb96a('0x15'));logger[_0xb96a('0x16')]('FreshdeskAccount,\x20%s,\x20%s,\x20%s',_0x5b8a76,_0xb96a('0x15'),JSON[_0xb96a('0x17')](_0x371195));if(_0x371195[_0xb96a('0x18')]){if(_0x371195['error'][_0xb96a('0x19')]===0x1f4){logger['error'](_0xb96a('0x14'),_0x5b8a76,_0x371195[_0xb96a('0x18')][_0xb96a('0x1a')]);return _0x183556(_0x371195[_0xb96a('0x18')][_0xb96a('0x1a')]);}logger['error'](_0xb96a('0x14'),_0x5b8a76,_0x371195['error']['message']);return _0x4bf306(_0x371195['error']['message']);}else{logger[_0xb96a('0x1b')](_0xb96a('0x14'),_0x5b8a76,_0xb96a('0x15'));_0x4bf306(_0x371195['result'][_0xb96a('0x1a')]);}})[_0xb96a('0x1c')](function(_0x4d2c84){logger[_0xb96a('0x18')]('FreshdeskAccount,\x20%s,\x20%s',_0x5b8a76,_0x4d2c84);_0x183556(_0x4d2c84);});});}function respondWithStatusCode(_0x251da7,_0x138ea9){_0x138ea9=_0x138ea9||0xcc;return function(_0x190368){if(_0x190368){return _0x251da7[_0xb96a('0x1d')](_0x138ea9);}return _0x251da7[_0xb96a('0x1e')](_0x138ea9)[_0xb96a('0x1f')]();};}function respondWithResult(_0x20da44,_0x116d13){_0x116d13=_0x116d13||0xc8;return function(_0x3fc782){if(_0x3fc782){return _0x20da44[_0xb96a('0x1e')](_0x116d13)[_0xb96a('0x20')](_0x3fc782);}};}function respondWithFilteredResult(_0x228d6c,_0x1e153f){return function(_0xd42c31){if(_0xd42c31){var _0x159129=_0xd42c31[_0xb96a('0x21')],_0x1aef57=_0x1e153f[_0xb96a('0x22')],_0x5e6899=_0x1e153f['offset']+_0x1e153f[_0xb96a('0x23')],_0x153a75;if(_0x5e6899>=_0x159129){_0x5e6899=_0x159129;_0x153a75=0xc8;}else{_0x153a75=0xce;}_0x228d6c[_0xb96a('0x1e')](_0x153a75);return _0x228d6c[_0xb96a('0x24')](_0xb96a('0x25'),_0x1aef57+'-'+_0x5e6899+'/'+_0x159129)[_0xb96a('0x20')](_0xd42c31);}return null;};}function patchUpdates(_0x1e4432){return function(_0x4a481f){try{jsonpatch[_0xb96a('0x26')](_0x4a481f,_0x1e4432,!![]);}catch(_0x51a8ff){return BPromise[_0xb96a('0x27')](_0x51a8ff);}return _0x4a481f[_0xb96a('0x28')]();};}function saveUpdates(_0x8e612b,_0x2ed709){return function(_0x3132c9){if(_0x3132c9){return _0x3132c9[_0xb96a('0x29')](_0x8e612b)[_0xb96a('0x13')](function(_0x1261f6){return _0x1261f6;});}return null;};}function removeEntity(_0x267413,_0x342ffb){return function(_0x2f78fe){if(_0x2f78fe){return _0x2f78fe[_0xb96a('0x2a')]()[_0xb96a('0x13')](function(){_0x267413[_0xb96a('0x1e')](0xcc)[_0xb96a('0x1f')]();});}};}function handleEntityNotFound(_0x16ad30,_0x2b96bb){return function(_0x4c8252){if(!_0x4c8252){_0x16ad30[_0xb96a('0x1d')](0x194);}return _0x4c8252;};}function handleError(_0x27f776,_0x45fe43){_0x45fe43=_0x45fe43||0x1f4;return function(_0x3c30a8){logger[_0xb96a('0x18')](_0x3c30a8[_0xb96a('0x2b')]);if(_0x3c30a8[_0xb96a('0x2c')]){delete _0x3c30a8[_0xb96a('0x2c')];}_0x27f776[_0xb96a('0x1e')](_0x45fe43)[_0xb96a('0x2d')](_0x3c30a8);};}exports[_0xb96a('0x2e')]=function(_0x9aa5d2,_0x13b491){var _0x25576b={},_0x2e9e59={},_0x20e455={'count':0x0,'rows':[]};var _0x123ae1=db[_0xb96a('0x2f')][_0xb96a('0x30')];_0x2e9e59[_0xb96a('0x31')]=_[_0xb96a('0x32')](_0x123ae1);var _0x214c3b={'dateStart':_0x9aa5d2[_0xb96a('0x33')][_0xb96a('0x34')],'dateEnd':_0x9aa5d2[_0xb96a('0x33')][_0xb96a('0x35')]};delete _0x9aa5d2[_0xb96a('0x33')]['dateStart'];delete _0x9aa5d2[_0xb96a('0x33')][_0xb96a('0x35')];_0x2e9e59[_0xb96a('0x33')]=_[_0xb96a('0x32')](_0x9aa5d2['query']);_0x2e9e59['filters']=_['intersection'](_0x2e9e59[_0xb96a('0x31')],_0x2e9e59[_0xb96a('0x33')]);_0x25576b[_0xb96a('0x36')]=_[_0xb96a('0x37')](_0x2e9e59[_0xb96a('0x31')],qs[_0xb96a('0x38')](_0x9aa5d2['query']['fields']));_0x25576b[_0xb96a('0x36')]=_0x25576b[_0xb96a('0x36')][_0xb96a('0x39')]?_0x25576b[_0xb96a('0x36')]:_0x2e9e59[_0xb96a('0x31')];if(!_0x9aa5d2[_0xb96a('0x33')]['hasOwnProperty'](_0xb96a('0x3a'))){_0x25576b[_0xb96a('0x23')]=qs[_0xb96a('0x23')](_0x9aa5d2[_0xb96a('0x33')][_0xb96a('0x23')]);_0x25576b['offset']=qs['offset'](_0x9aa5d2['query'][_0xb96a('0x22')]);}_0x25576b['order']=qs['sort'](_0x9aa5d2[_0xb96a('0x33')][_0xb96a('0x3b')]);_0x25576b[_0xb96a('0x3c')]=qs[_0xb96a('0x3d')](_[_0xb96a('0x3e')](_0x9aa5d2[_0xb96a('0x33')],_0x2e9e59[_0xb96a('0x3d')]));if(_0x214c3b[_0xb96a('0x34')]){if(_0x214c3b['dateEnd']){_0x214c3b[_0xb96a('0x35')]=moment(_0x214c3b[_0xb96a('0x35')])[_0xb96a('0x3f')](0x1,_0xb96a('0x40'));}else{_0x214c3b[_0xb96a('0x35')]=moment(_0x214c3b[_0xb96a('0x34')])[_0xb96a('0x3f')](0x1,_0xb96a('0x40'));}_['merge'](_0x25576b[_0xb96a('0x3c')],{'createdAt':{'$gte':_0x214c3b[_0xb96a('0x34')],'$lte':_0x214c3b[_0xb96a('0x35')]}});}if(_0x9aa5d2['query']['filter']){_0x25576b[_0xb96a('0x3c')]=_['merge'](_0x25576b[_0xb96a('0x3c')],{'$or':_['map'](_0x25576b[_0xb96a('0x36')],function(_0x5b9d0a){var _0x5817c8={};_0x5817c8[_0x5b9d0a]={'$like':'%'+_0x9aa5d2['query'][_0xb96a('0x41')]+'%'};return _0x5817c8;})});}_0x25576b=_[_0xb96a('0x42')]({},_0x25576b,_0x9aa5d2[_0xb96a('0x43')]);var _0x3d9469={'where':_0x25576b[_0xb96a('0x3c')]};return db[_0xb96a('0x2f')]['count'](_0x3d9469)[_0xb96a('0x13')](function(_0x862f32){_0x20e455[_0xb96a('0x21')]=_0x862f32;if(_0x9aa5d2[_0xb96a('0x33')][_0xb96a('0x44')]){_0x25576b[_0xb96a('0x45')]=[{'all':!![]}];}return db['FreshdeskAccount'][_0xb96a('0x46')](_0x25576b);})['then'](function(_0xfeb8f8){_0x20e455[_0xb96a('0x47')]=_0xfeb8f8;return _0x20e455;})[_0xb96a('0x13')](respondWithFilteredResult(_0x13b491,_0x25576b))[_0xb96a('0x1c')](handleError(_0x13b491,null));};exports[_0xb96a('0x48')]=function(_0x320479,_0x1f5608){var _0x314ccc={'raw':![],'where':{'id':_0x320479[_0xb96a('0x49')]['id']}},_0x2c4236={};_0x2c4236['model']=_[_0xb96a('0x32')](db[_0xb96a('0x2f')][_0xb96a('0x30')]);_0x2c4236['query']=_[_0xb96a('0x32')](_0x320479[_0xb96a('0x33')]);_0x2c4236['filters']=_[_0xb96a('0x37')](_0x2c4236['model'],_0x2c4236[_0xb96a('0x33')]);_0x314ccc[_0xb96a('0x36')]=_[_0xb96a('0x37')](_0x2c4236[_0xb96a('0x31')],qs[_0xb96a('0x38')](_0x320479[_0xb96a('0x33')][_0xb96a('0x38')]));_0x314ccc[_0xb96a('0x36')]=_0x314ccc['attributes'][_0xb96a('0x39')]?_0x314ccc[_0xb96a('0x36')]:_0x2c4236[_0xb96a('0x31')];if(_0x320479[_0xb96a('0x33')]['includeAll']){_0x314ccc[_0xb96a('0x45')]=[{'all':!![]}];}_0x314ccc=_[_0xb96a('0x42')]({},_0x314ccc,_0x320479['options']);return db[_0xb96a('0x2f')][_0xb96a('0x4a')](_0x314ccc)[_0xb96a('0x13')](handleEntityNotFound(_0x1f5608,null))[_0xb96a('0x13')](respondWithResult(_0x1f5608,null))[_0xb96a('0x1c')](handleError(_0x1f5608,null));};exports[_0xb96a('0x4b')]=function(_0x2e7af7,_0x12d1ab){return db[_0xb96a('0x2f')][_0xb96a('0x4b')](_0x2e7af7[_0xb96a('0x4c')],{})[_0xb96a('0x13')](respondWithResult(_0x12d1ab,0xc9))[_0xb96a('0x1c')](handleError(_0x12d1ab,null));};exports[_0xb96a('0x29')]=function(_0xedc5b,_0xaf34d4){if(_0xedc5b[_0xb96a('0x4c')]['id']){delete _0xedc5b[_0xb96a('0x4c')]['id'];}return db[_0xb96a('0x2f')]['find']({'where':{'id':_0xedc5b['params']['id']}})['then'](handleEntityNotFound(_0xaf34d4,null))[_0xb96a('0x13')](saveUpdates(_0xedc5b[_0xb96a('0x4c')],null))['then'](respondWithResult(_0xaf34d4,null))[_0xb96a('0x1c')](handleError(_0xaf34d4,null));};exports[_0xb96a('0x2a')]=function(_0x26c40d,_0x4ac929){return db[_0xb96a('0x2f')][_0xb96a('0x4a')]({'where':{'id':_0x26c40d[_0xb96a('0x49')]['id']}})['then'](handleEntityNotFound(_0x4ac929,null))[_0xb96a('0x13')](removeEntity(_0x4ac929,null))[_0xb96a('0x1c')](handleError(_0x4ac929,null));};exports[_0xb96a('0x4d')]=function(_0x42f7f8,_0x3621e7,_0x2e76ce){var _0x5287b8={};var _0x1e7a6f={};var _0x21c15b;var _0x16fc79;return db[_0xb96a('0x2f')]['findOne']({'where':{'id':_0x42f7f8[_0xb96a('0x49')]['id']}})['then'](handleEntityNotFound(_0x3621e7,null))[_0xb96a('0x13')](function(_0x46c9b8){if(_0x46c9b8){_0x21c15b=_0x46c9b8;_0x1e7a6f[_0xb96a('0x31')]=_['keys'](db['FreshdeskConfiguration'][_0xb96a('0x30')]);_0x1e7a6f[_0xb96a('0x33')]=_[_0xb96a('0x32')](_0x42f7f8[_0xb96a('0x33')]);_0x1e7a6f['filters']=_[_0xb96a('0x37')](_0x1e7a6f[_0xb96a('0x31')],_0x1e7a6f[_0xb96a('0x33')]);_0x5287b8[_0xb96a('0x36')]=_[_0xb96a('0x37')](_0x1e7a6f['model'],qs['fields'](_0x42f7f8[_0xb96a('0x33')]['fields']));_0x5287b8[_0xb96a('0x36')]=_0x5287b8['attributes'][_0xb96a('0x39')]?_0x5287b8[_0xb96a('0x36')]:_0x1e7a6f['model'];_0x5287b8[_0xb96a('0x4e')]=qs[_0xb96a('0x3b')](_0x42f7f8[_0xb96a('0x33')][_0xb96a('0x3b')]);_0x5287b8[_0xb96a('0x3c')]=qs[_0xb96a('0x3d')](_[_0xb96a('0x3e')](_0x42f7f8[_0xb96a('0x33')],_0x1e7a6f[_0xb96a('0x3d')]));if(_0x42f7f8[_0xb96a('0x33')][_0xb96a('0x41')]){_0x5287b8[_0xb96a('0x3c')]=_[_0xb96a('0x42')](_0x5287b8[_0xb96a('0x3c')],{'$or':_[_0xb96a('0x4f')](_0x5287b8[_0xb96a('0x36')],function(_0x21451e){var _0x1c6bbf={};_0x1c6bbf[_0x21451e]={'$like':'%'+_0x42f7f8[_0xb96a('0x33')][_0xb96a('0x41')]+'%'};return _0x1c6bbf;})});}_0x5287b8=_[_0xb96a('0x42')]({},_0x5287b8,_0x42f7f8['options']);return _0x21c15b[_0xb96a('0x4d')](_0x5287b8);}})[_0xb96a('0x13')](function(_0x3ac89e){if(_0x3ac89e){_0x16fc79=_0x3ac89e[_0xb96a('0x39')];if(!_0x42f7f8['query'][_0xb96a('0x50')]('nolimit')){_0x5287b8['limit']=qs['limit'](_0x42f7f8[_0xb96a('0x33')][_0xb96a('0x23')]);_0x5287b8['offset']=qs[_0xb96a('0x22')](_0x42f7f8[_0xb96a('0x33')][_0xb96a('0x22')]);}return _0x21c15b[_0xb96a('0x4d')](_0x5287b8);}})[_0xb96a('0x13')](function(_0x319a1b){if(_0x319a1b){return _0x319a1b?{'count':_0x16fc79,'rows':_0x319a1b}:null;}})[_0xb96a('0x13')](respondWithResult(_0x3621e7,null))['catch'](handleError(_0x3621e7,null));};exports[_0xb96a('0x51')]=function(_0x17d691,_0x17211e,_0x10e635){if(_0x17d691[_0xb96a('0x4c')]['id']){delete _0x17d691[_0xb96a('0x4c')]['id'];}return db[_0xb96a('0x2f')][_0xb96a('0x52')]({'where':{'id':_0x17d691[_0xb96a('0x49')]['id']}})[_0xb96a('0x13')](handleEntityNotFound(_0x17211e,null))['then'](function(_0x3e27ba){if(_0x3e27ba){_0x17d691[_0xb96a('0x4c')]['AccountId']=_0x3e27ba['id'];_0x17d691[_0xb96a('0x4c')]['Subjects']=integrations[_0xb96a('0x53')](_0x17d691[_0xb96a('0x4c')][_0xb96a('0x54')],_0x17d691[_0xb96a('0x4c')][_0xb96a('0x55')]);_0x17d691['body'][_0xb96a('0x56')]=integrations[_0xb96a('0x57')](_0x17d691['body'][_0xb96a('0x54')],_0x17d691[_0xb96a('0x4c')]['type']);return db[_0xb96a('0x58')][_0xb96a('0x4b')](_0x17d691['body'],{'include':[{'model':db[_0xb96a('0x59')],'as':'Subjects'},{'model':db[_0xb96a('0x59')],'as':_0xb96a('0x56')}]});}return null;})['then'](respondWithResult(_0x17211e,null))['catch'](handleError(_0x17211e,null));};exports[_0xb96a('0x5a')]=function(_0x54ec51,_0x22378a,_0x1b3de7){return db[_0xb96a('0x2f')]['findOne']({'where':{'id':_0x54ec51[_0xb96a('0x49')]['id']},'attributes':['id',_0xb96a('0x5b'),_0xb96a('0x5c')]})[_0xb96a('0x13')](handleEntityNotFound(_0x22378a,null))['then'](function(_0x1c8834){if(_0x1c8834){return rp({'method':_0xb96a('0x5d'),'uri':util[_0xb96a('0x5e')]('%s%s',_0x1c8834['remoteUri'],_0xb96a('0x5f')),'headers':{'Authorization':util['format']('Basic\x20%s',new Buffer(util[_0xb96a('0x5e')](_0xb96a('0x60'),_0x1c8834[_0xb96a('0x5c')]))['toString'](_0xb96a('0x61')))},'json':!![]});}})[_0xb96a('0x13')](function(_0x46d7a0){if(_0x46d7a0){var _0x535c35=[_0xb96a('0x62'),_0xb96a('0x63'),'agent',_0xb96a('0x64'),_0xb96a('0x1e'),_0xb96a('0x65'),_0xb96a('0x66'),_0xb96a('0x67'),_0xb96a('0x68'),_0xb96a('0x66'),_0xb96a('0x69')];_[_0xb96a('0x6a')](_0x46d7a0,function(_0x951dbf){return _0x535c35[_0xb96a('0x6b')](_0x951dbf[_0xb96a('0x2c')])||!_0x951dbf[_0xb96a('0x6c')]&&_0x951dbf[_0xb96a('0x55')]!=='custom_text';});return{'count':_0x46d7a0['length'],'rows':_[_0xb96a('0x4f')](_0x46d7a0,function(_0x1cc6ab){return{'id':_0x1cc6ab[_0xb96a('0x2c')],'name':_0x1cc6ab[_0xb96a('0x6d')],'custom':!_0x1cc6ab['default'],'options':_0x1cc6ab['choices']?_[_0xb96a('0x4f')](_0x1cc6ab[_0xb96a('0x6e')],function(_0x56f7cb){return{'name':_[_0xb96a('0x6f')](_0x56f7cb),'value':_0x56f7cb};}):[]};})};}})[_0xb96a('0x13')](respondWithResult(_0x22378a,null))[_0xb96a('0x1c')](function(_0x5f3fe7){var _0x2a6b66=_0x54ec51[_0xb96a('0x33')][_0xb96a('0x70')]?0x1f4:_0x5f3fe7[_0xb96a('0x71')]||0x1f4;logger[_0xb96a('0x18')](_0xb96a('0x72'),_0xb96a('0x5a'),_0x2a6b66,JSON[_0xb96a('0x17')](_0x5f3fe7));delete _0x5f3fe7['name'];if(_0x2a6b66===0x191){_0x2a6b66=0x190;}_0x22378a['status'](_0x2a6b66)[_0xb96a('0x2d')](_0x54ec51[_0xb96a('0x33')]['test']?{'message':'Wrong\x20credentials','statusCode':_0x5f3fe7[_0xb96a('0x71')]}:_0x5f3fe7);});};
\ No newline at end of file
index dcfba7a..c082b4a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdd64=['FreshdeskAccount','lodash','util','../../config/logger','api','bluebird','./intFreshdeskAccount.attributes','../../components/integrations/configuration','exports','define'];(function(_0x4ed93d,_0x2f0f51){var _0x35c604=function(_0x1df5f9){while(--_0x1df5f9){_0x4ed93d['push'](_0x4ed93d['shift']());}};_0x35c604(++_0x2f0f51);}(_0xdd64,0xd3));var _0x4dd6=function(_0x54938b,_0x2eac96){_0x54938b=_0x54938b-0x0;var _0x363555=_0xdd64[_0x54938b];return _0x363555;};'use strict';var _=require(_0x4dd6('0x0'));var util=require(_0x4dd6('0x1'));var logger=require(_0x4dd6('0x2'))(_0x4dd6('0x3'));var moment=require('moment');var BPromise=require(_0x4dd6('0x4'));var rp=require('request-promise');var attributes=require(_0x4dd6('0x5'));var integrations=require(_0x4dd6('0x6'));module[_0x4dd6('0x7')]=function(_0x5a1516,_0x24bc6b){return _0x5a1516[_0x4dd6('0x8')](_0x4dd6('0x9'),attributes,{'tableName':'int_freshdesk_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xdeb7=['../../config/logger','moment','bluebird','request-promise','./intFreshdeskAccount.attributes','../../components/integrations/configuration','define','FreshdeskAccount','int_freshdesk_accounts','lodash','util'];(function(_0x4b0b8f,_0x2f7c35){var _0x32faf6=function(_0x88c8b4){while(--_0x88c8b4){_0x4b0b8f['push'](_0x4b0b8f['shift']());}};_0x32faf6(++_0x2f7c35);}(_0xdeb7,0x77));var _0x7deb=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0xdeb7[_0x2641f9];return _0x585741;};'use strict';var _=require(_0x7deb('0x0'));var util=require(_0x7deb('0x1'));var logger=require(_0x7deb('0x2'))('api');var moment=require(_0x7deb('0x3'));var BPromise=require(_0x7deb('0x4'));var rp=require(_0x7deb('0x5'));var attributes=require(_0x7deb('0x6'));var integrations=require(_0x7deb('0x7'));module['exports']=function(_0x370d71,_0x39505e){return _0x370d71[_0x7deb('0x8')](_0x7deb('0x9'),attributes,{'tableName':_0x7deb('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 8ed67de..c25140f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x63c6=['then','info','request\x20sent','debug','FreshdeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','FreshdeskAccount,\x20%s,\x20%s','message','result','catch','GetFreshdeskAccount','FreshdeskAccount','findAll','options','raw','where','attributes','include','map','ShowFreshdeskAccount','model','lodash','util','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http'];(function(_0x582df7,_0x3d02cf){var _0x5081fd=function(_0x3f197c){while(--_0x3f197c){_0x582df7['push'](_0x582df7['shift']());}};_0x5081fd(++_0x3d02cf);}(_0x63c6,0xbb));var _0x663c=function(_0x1a40a2,_0x448a85){_0x1a40a2=_0x1a40a2-0x0;var _0x2ac9fd=_0x63c6[_0x1a40a2];return _0x2ac9fd;};'use strict';var _=require(_0x663c('0x0'));var util=require(_0x663c('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x663c('0x2'));var fs=require('fs');var db=require(_0x663c('0x3'))['db'];var utils=require(_0x663c('0x4'));var logger=require(_0x663c('0x5'))(_0x663c('0x6'));var config=require(_0x663c('0x7'));var jayson=require(_0x663c('0x8'));var client=jayson[_0x663c('0x9')][_0x663c('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4fedf8,_0x1dbe47,_0xe6ac97){return new BPromise(function(_0x3eb551,_0xb32d9e){return client['request'](_0x4fedf8,_0xe6ac97)[_0x663c('0xb')](function(_0x4da574){logger[_0x663c('0xc')]('FreshdeskAccount,\x20%s,\x20%s',_0x1dbe47,_0x663c('0xd'));logger[_0x663c('0xe')](_0x663c('0xf'),_0x1dbe47,_0x663c('0xd'),JSON[_0x663c('0x10')](_0x4da574));if(_0x4da574[_0x663c('0x11')]){if(_0x4da574[_0x663c('0x11')]['code']===0x1f4){logger['error'](_0x663c('0x12'),_0x1dbe47,_0x4da574[_0x663c('0x11')]['message']);return _0xb32d9e(_0x4da574[_0x663c('0x11')][_0x663c('0x13')]);}logger[_0x663c('0x11')](_0x663c('0x12'),_0x1dbe47,_0x4da574['error'][_0x663c('0x13')]);return _0x3eb551(_0x4da574[_0x663c('0x11')]['message']);}else{logger[_0x663c('0xc')]('FreshdeskAccount,\x20%s,\x20%s',_0x1dbe47,_0x663c('0xd'));_0x3eb551(_0x4da574[_0x663c('0x14')][_0x663c('0x13')]);}})[_0x663c('0x15')](function(_0x1281e3){logger[_0x663c('0x11')](_0x663c('0x12'),_0x1dbe47,_0x1281e3);_0xb32d9e(_0x1281e3);});});}exports[_0x663c('0x16')]=function(_0x31895b){var _0x3c87fe=this;return new Promise(function(_0x517f70,_0x2fd707){return db[_0x663c('0x17')][_0x663c('0x18')]({'raw':_0x31895b['options']?_0x31895b[_0x663c('0x19')][_0x663c('0x1a')]===undefined?!![]:![]:!![],'where':_0x31895b[_0x663c('0x19')]?_0x31895b[_0x663c('0x19')][_0x663c('0x1b')]||null:null,'attributes':_0x31895b['options']?_0x31895b[_0x663c('0x19')][_0x663c('0x1c')]||null:null,'limit':_0x31895b[_0x663c('0x19')]?_0x31895b[_0x663c('0x19')]['limit']||null:null,'include':_0x31895b['options']?_0x31895b[_0x663c('0x19')][_0x663c('0x1d')]?_[_0x663c('0x1e')](_0x31895b[_0x663c('0x19')][_0x663c('0x1d')],function(_0x53986f){return{'model':db[_0x53986f['model']],'as':_0x53986f['as'],'attributes':_0x53986f['attributes'],'include':_0x53986f[_0x663c('0x1d')]?_[_0x663c('0x1e')](_0x53986f[_0x663c('0x1d')],function(_0x3ff83d){return{'model':db[_0x3ff83d['model']],'as':_0x3ff83d['as'],'attributes':_0x3ff83d[_0x663c('0x1c')],'include':_0x3ff83d[_0x663c('0x1d')]?_[_0x663c('0x1e')](_0x3ff83d[_0x663c('0x1d')],function(_0x3581a3){return{'model':db[_0x3581a3['model']],'as':_0x3581a3['as'],'attributes':_0x3581a3[_0x663c('0x1c')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x5ae88d){logger['info']('GetFreshdeskAccount',_0x31895b);logger[_0x663c('0xe')]('GetFreshdeskAccount',_0x31895b,JSON[_0x663c('0x10')](_0x5ae88d));_0x517f70(_0x5ae88d);})[_0x663c('0x15')](function(_0x30ff6f){logger[_0x663c('0x11')](_0x663c('0x16'),_0x30ff6f[_0x663c('0x13')],_0x31895b);_0x2fd707(_0x3c87fe[_0x663c('0x11')](0x1f4,_0x30ff6f['message']));});});};exports[_0x663c('0x1f')]=function(_0x29f074){var _0x43ad67=this;return new Promise(function(_0x248345,_0x3b3d39){return db[_0x663c('0x17')]['find']({'raw':_0x29f074[_0x663c('0x19')]?_0x29f074['options'][_0x663c('0x1a')]===undefined?!![]:![]:!![],'where':_0x29f074['options']?_0x29f074['options']['where']||null:null,'attributes':_0x29f074[_0x663c('0x19')]?_0x29f074[_0x663c('0x19')]['attributes']||null:null,'include':_0x29f074[_0x663c('0x19')]?_0x29f074[_0x663c('0x19')]['include']?_[_0x663c('0x1e')](_0x29f074[_0x663c('0x19')][_0x663c('0x1d')],function(_0xdc1ba6){return{'model':db[_0xdc1ba6[_0x663c('0x20')]],'as':_0xdc1ba6['as'],'attributes':_0xdc1ba6['attributes'],'include':_0xdc1ba6[_0x663c('0x1d')]?_[_0x663c('0x1e')](_0xdc1ba6[_0x663c('0x1d')],function(_0x4d29ef){return{'model':db[_0x4d29ef[_0x663c('0x20')]],'as':_0x4d29ef['as'],'attributes':_0x4d29ef[_0x663c('0x1c')],'include':_0x4d29ef[_0x663c('0x1d')]?_[_0x663c('0x1e')](_0x4d29ef['include'],function(_0x3178cc){return{'model':db[_0x3178cc[_0x663c('0x20')]],'as':_0x3178cc['as'],'attributes':_0x3178cc[_0x663c('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x663c('0xb')](function(_0x5752e1){logger['info'](_0x663c('0x1f'),_0x29f074);logger[_0x663c('0xe')]('ShowFreshdeskAccount',_0x29f074,JSON[_0x663c('0x10')](_0x5752e1));_0x248345(_0x5752e1);})[_0x663c('0x15')](function(_0x21690a){logger[_0x663c('0x11')]('ShowFreshdeskAccount',_0x21690a[_0x663c('0x13')],_0x29f074);_0x3b3d39(_0x43ad67[_0x663c('0x11')](0x1f4,_0x21690a['message']));});});};
\ No newline at end of file
+var _0x43c8=['../../config/logger','rpc','../../config/environment','client','http','request','request\x20sent','FreshdeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','FreshdeskAccount,\x20%s,\x20%s','message','info','result','catch','GetFreshdeskAccount','FreshdeskAccount','findAll','options','raw','attributes','limit','include','model','map','then','debug','ShowFreshdeskAccount','find','where','util','bluebird','randomstring','../../mysqldb','../../config/utils'];(function(_0x1f361b,_0x50ec5e){var _0x23ade6=function(_0x3afd30){while(--_0x3afd30){_0x1f361b['push'](_0x1f361b['shift']());}};_0x23ade6(++_0x50ec5e);}(_0x43c8,0xaf));var _0x843c=function(_0x2f7841,_0x22b056){_0x2f7841=_0x2f7841-0x0;var _0x42db6d=_0x43c8[_0x2f7841];return _0x42db6d;};'use strict';var _=require('lodash');var util=require(_0x843c('0x0'));var moment=require('moment');var BPromise=require(_0x843c('0x1'));var rs=require(_0x843c('0x2'));var fs=require('fs');var db=require(_0x843c('0x3'))['db'];var utils=require(_0x843c('0x4'));var logger=require(_0x843c('0x5'))(_0x843c('0x6'));var config=require(_0x843c('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x843c('0x8')][_0x843c('0x9')]({'port':0x232a});function respondWithRpcPromise(_0xc5913e,_0x15bb1f,_0xd198e5){return new BPromise(function(_0x49aee7,_0x327327){return client[_0x843c('0xa')](_0xc5913e,_0xd198e5)['then'](function(_0x2b065f){logger['info']('FreshdeskAccount,\x20%s,\x20%s',_0x15bb1f,_0x843c('0xb'));logger['debug'](_0x843c('0xc'),_0x15bb1f,_0x843c('0xb'),JSON[_0x843c('0xd')](_0x2b065f));if(_0x2b065f[_0x843c('0xe')]){if(_0x2b065f['error'][_0x843c('0xf')]===0x1f4){logger[_0x843c('0xe')](_0x843c('0x10'),_0x15bb1f,_0x2b065f[_0x843c('0xe')][_0x843c('0x11')]);return _0x327327(_0x2b065f[_0x843c('0xe')][_0x843c('0x11')]);}logger[_0x843c('0xe')](_0x843c('0x10'),_0x15bb1f,_0x2b065f[_0x843c('0xe')][_0x843c('0x11')]);return _0x49aee7(_0x2b065f[_0x843c('0xe')][_0x843c('0x11')]);}else{logger[_0x843c('0x12')](_0x843c('0x10'),_0x15bb1f,'request\x20sent');_0x49aee7(_0x2b065f[_0x843c('0x13')][_0x843c('0x11')]);}})[_0x843c('0x14')](function(_0x42558b){logger[_0x843c('0xe')]('FreshdeskAccount,\x20%s,\x20%s',_0x15bb1f,_0x42558b);_0x327327(_0x42558b);});});}exports[_0x843c('0x15')]=function(_0x807f83){var _0x1a7966=this;return new Promise(function(_0x2acf94,_0x47d16a){return db[_0x843c('0x16')][_0x843c('0x17')]({'raw':_0x807f83[_0x843c('0x18')]?_0x807f83[_0x843c('0x18')][_0x843c('0x19')]===undefined?!![]:![]:!![],'where':_0x807f83['options']?_0x807f83[_0x843c('0x18')]['where']||null:null,'attributes':_0x807f83[_0x843c('0x18')]?_0x807f83['options'][_0x843c('0x1a')]||null:null,'limit':_0x807f83[_0x843c('0x18')]?_0x807f83['options'][_0x843c('0x1b')]||null:null,'include':_0x807f83[_0x843c('0x18')]?_0x807f83[_0x843c('0x18')][_0x843c('0x1c')]?_['map'](_0x807f83['options']['include'],function(_0x3f914b){return{'model':db[_0x3f914b[_0x843c('0x1d')]],'as':_0x3f914b['as'],'attributes':_0x3f914b[_0x843c('0x1a')],'include':_0x3f914b[_0x843c('0x1c')]?_[_0x843c('0x1e')](_0x3f914b[_0x843c('0x1c')],function(_0x37bc86){return{'model':db[_0x37bc86['model']],'as':_0x37bc86['as'],'attributes':_0x37bc86[_0x843c('0x1a')],'include':_0x37bc86[_0x843c('0x1c')]?_[_0x843c('0x1e')](_0x37bc86['include'],function(_0x2a34d2){return{'model':db[_0x2a34d2['model']],'as':_0x2a34d2['as'],'attributes':_0x2a34d2[_0x843c('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x843c('0x1f')](function(_0x30534b){logger['info'](_0x843c('0x15'),_0x807f83);logger[_0x843c('0x20')](_0x843c('0x15'),_0x807f83,JSON[_0x843c('0xd')](_0x30534b));_0x2acf94(_0x30534b);})[_0x843c('0x14')](function(_0xb8b544){logger['error'](_0x843c('0x15'),_0xb8b544['message'],_0x807f83);_0x47d16a(_0x1a7966[_0x843c('0xe')](0x1f4,_0xb8b544[_0x843c('0x11')]));});});};exports[_0x843c('0x21')]=function(_0x309109){var _0x51aebb=this;return new Promise(function(_0x1ac9a5,_0x46b64a){return db[_0x843c('0x16')][_0x843c('0x22')]({'raw':_0x309109[_0x843c('0x18')]?_0x309109[_0x843c('0x18')][_0x843c('0x19')]===undefined?!![]:![]:!![],'where':_0x309109[_0x843c('0x18')]?_0x309109[_0x843c('0x18')][_0x843c('0x23')]||null:null,'attributes':_0x309109[_0x843c('0x18')]?_0x309109[_0x843c('0x18')]['attributes']||null:null,'include':_0x309109[_0x843c('0x18')]?_0x309109['options'][_0x843c('0x1c')]?_[_0x843c('0x1e')](_0x309109['options'][_0x843c('0x1c')],function(_0xdc72db){return{'model':db[_0xdc72db[_0x843c('0x1d')]],'as':_0xdc72db['as'],'attributes':_0xdc72db['attributes'],'include':_0xdc72db[_0x843c('0x1c')]?_[_0x843c('0x1e')](_0xdc72db['include'],function(_0x3907e3){return{'model':db[_0x3907e3['model']],'as':_0x3907e3['as'],'attributes':_0x3907e3[_0x843c('0x1a')],'include':_0x3907e3[_0x843c('0x1c')]?_[_0x843c('0x1e')](_0x3907e3['include'],function(_0x37a2ad){return{'model':db[_0x37a2ad[_0x843c('0x1d')]],'as':_0x37a2ad['as'],'attributes':_0x37a2ad[_0x843c('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x843c('0x1f')](function(_0x19a388){logger['info'](_0x843c('0x21'),_0x309109);logger[_0x843c('0x20')](_0x843c('0x21'),_0x309109,JSON[_0x843c('0xd')](_0x19a388));_0x1ac9a5(_0x19a388);})[_0x843c('0x14')](function(_0x2a5f73){logger['error'](_0x843c('0x21'),_0x2a5f73[_0x843c('0x11')],_0x309109);_0x46b64a(_0x51aebb[_0x843c('0xe')](0x1f4,_0x2a5f73[_0x843c('0x11')]));});});};
\ No newline at end of file
index d57201d..4b8dc82 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['index','/:id','show','/:id/subjects','getSubjects','/:id/descriptions','getTags','post','create','/:id/tags','setTags','put','update','delete','exports','multer','util','path','../../components/auth/service','../../config/environment','./intFreshdeskConfiguration.controller','get','isAuthenticated'];(function(_0x17174c,_0x266797){var _0x38125a=function(_0x551221){while(--_0x551221){_0x17174c['push'](_0x17174c['shift']());}};_0x38125a(++_0x266797);}(_0xa9e0,0x123));var _0x0a9e=function(_0xf71120,_0x25b7f9){_0xf71120=_0xf71120-0x0;var _0xbe2fd3=_0xa9e0[_0xf71120];return _0xbe2fd3;};'use strict';var multer=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var path=require(_0x0a9e('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x0a9e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x0a9e('0x4'));var controller=require(_0x0a9e('0x5'));router[_0x0a9e('0x6')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x8')]);router['get'](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xa')]);router['get']('/:id/fields',auth[_0x0a9e('0x7')](),controller['getFields']);router['get'](_0x0a9e('0xb'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xc')]);router[_0x0a9e('0x6')](_0x0a9e('0xd'),auth[_0x0a9e('0x7')](),controller['getDescriptions']);router['get']('/:id/tags',auth['isAuthenticated'](),controller[_0x0a9e('0xe')]);router[_0x0a9e('0xf')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x10')]);router[_0x0a9e('0xf')](_0x0a9e('0x11'),auth['isAuthenticated'](),controller[_0x0a9e('0x12')]);router[_0x0a9e('0x13')](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x14')]);router[_0x0a9e('0x15')]('/:id',auth[_0x0a9e('0x7')](),controller['destroy']);module[_0x0a9e('0x16')]=router;
\ No newline at end of file
+var _0xa9e0=['index','/:id','show','/:id/subjects','getSubjects','/:id/descriptions','getTags','post','create','/:id/tags','setTags','put','update','delete','exports','multer','util','path','../../components/auth/service','../../config/environment','./intFreshdeskConfiguration.controller','get','isAuthenticated'];(function(_0x465bcc,_0x16272c){var _0x3943e3=function(_0xd87261){while(--_0xd87261){_0x465bcc['push'](_0x465bcc['shift']());}};_0x3943e3(++_0x16272c);}(_0xa9e0,0x123));var _0x0a9e=function(_0x18a79d,_0x57bd2c){_0x18a79d=_0x18a79d-0x0;var _0x4f8848=_0xa9e0[_0x18a79d];return _0x4f8848;};'use strict';var multer=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var path=require(_0x0a9e('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x0a9e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x0a9e('0x4'));var controller=require(_0x0a9e('0x5'));router[_0x0a9e('0x6')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x8')]);router['get'](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xa')]);router['get']('/:id/fields',auth[_0x0a9e('0x7')](),controller['getFields']);router['get'](_0x0a9e('0xb'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xc')]);router[_0x0a9e('0x6')](_0x0a9e('0xd'),auth[_0x0a9e('0x7')](),controller['getDescriptions']);router['get']('/:id/tags',auth['isAuthenticated'](),controller[_0x0a9e('0xe')]);router[_0x0a9e('0xf')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x10')]);router[_0x0a9e('0xf')](_0x0a9e('0x11'),auth['isAuthenticated'](),controller[_0x0a9e('0x12')]);router[_0x0a9e('0x13')](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x14')]);router[_0x0a9e('0x15')]('/:id',auth[_0x0a9e('0x7')](),controller['destroy']);module[_0x0a9e('0x16')]=router;
\ No newline at end of file
index a458615..b5881c1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ecc=['exports','STRING'];(function(_0x5c78d9,_0x2736c7){var _0x69ae1f=function(_0x4b31ac){while(--_0x4b31ac){_0x5c78d9['push'](_0x5c78d9['shift']());}};_0x69ae1f(++_0x2736c7);}(_0x8ecc,0x9a));var _0xc8ec=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x8ecc[_0x14add3];return _0x4a174f;};'use strict';var Sequelize=require('sequelize');module[_0xc8ec('0x0')]={'name':{'type':Sequelize[_0xc8ec('0x1')]},'description':{'type':Sequelize[_0xc8ec('0x1')]}};
\ No newline at end of file
+var _0x2cd0=['STRING','exports'];(function(_0x4a028b,_0x1f985b){var _0x43be44=function(_0x46f6e7){while(--_0x46f6e7){_0x4a028b['push'](_0x4a028b['shift']());}};_0x43be44(++_0x1f985b);}(_0x2cd0,0xcf));var _0x02cd=function(_0x3e50f0,_0x486447){_0x3e50f0=_0x3e50f0-0x0;var _0x15c1cf=_0x2cd0[_0x3e50f0];return _0x15c1cf;};'use strict';var Sequelize=require('sequelize');module[_0x02cd('0x0')]={'name':{'type':Sequelize[_0x02cd('0x1')]},'description':{'type':Sequelize[_0x02cd('0x1')]}};
\ No newline at end of file
index d09aab4..54bd445 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f3c=['offset','limit','set','Content-Range','json','save','update','destroy','name','send','FreshdeskConfiguration','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','pick','add','day','merge','where','filter','map','include','rows','show','params','includeAll','catch','create','body','find','getFields','findOne','FreshdeskField','getSubjects','options','getDescriptions','getTags','Tag','setTags','ids','request-promise','bluebird','mustache','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','request','then','info','FreshdeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','sendStatus','status','end','count'];(function(_0x413feb,_0x10477f){var _0x40ee88=function(_0x32a3f6){while(--_0x32a3f6){_0x413feb['push'](_0x413feb['shift']());}};_0x40ee88(++_0x10477f);}(_0x4f3c,0xe4));var _0xc4f3=function(_0x154b4c,_0xa38e2){_0x154b4c=_0x154b4c-0x0;var _0x100586=_0x4f3c[_0x154b4c];return _0x100586;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xc4f3('0x0'));var moment=require('moment');var BPromise=require(_0xc4f3('0x1'));var Mustache=require(_0xc4f3('0x2'));var util=require('util');var path=require('path');var sox=require(_0xc4f3('0x3'));var csv=require(_0xc4f3('0x4'));var ejs=require(_0xc4f3('0x5'));var fs=require('fs');var _=require(_0xc4f3('0x6'));var squel=require(_0xc4f3('0x7'));var crypto=require(_0xc4f3('0x8'));var jsforce=require(_0xc4f3('0x9'));var deskjs=require(_0xc4f3('0xa'));var toCsv=require('to-csv');var querystring=require(_0xc4f3('0xb'));var Papa=require('papaparse');var qs=require(_0xc4f3('0xc'));var logger=require(_0xc4f3('0xd'))('api');var utils=require(_0xc4f3('0xe'));var config=require(_0xc4f3('0xf'));var db=require(_0xc4f3('0x10'))['db'];var jayson=require(_0xc4f3('0x11'));var client=jayson[_0xc4f3('0x12')][_0xc4f3('0x13')]({'port':0x232a});function respondWithRpcPromise(_0x59fe5e,_0x4f706a,_0x1a2328,_0x3f8e64){return new BPromise(function(_0x837af0,_0x34037c){var _0x1a462d=_0x3f8e64||client;return _0x1a462d[_0xc4f3('0x14')](_0x59fe5e,_0x1a2328)[_0xc4f3('0x15')](function(_0x27a759){logger[_0xc4f3('0x16')](_0xc4f3('0x17'),_0x4f706a,_0xc4f3('0x18'));logger[_0xc4f3('0x19')](_0xc4f3('0x1a'),_0x4f706a,_0xc4f3('0x18'),JSON[_0xc4f3('0x1b')](_0x27a759));if(_0x27a759['error']){if(_0x27a759[_0xc4f3('0x1c')][_0xc4f3('0x1d')]===0x1f4){logger['error'](_0xc4f3('0x17'),_0x4f706a,_0x27a759['error'][_0xc4f3('0x1e')]);return _0x34037c(_0x27a759[_0xc4f3('0x1c')][_0xc4f3('0x1e')]);}logger[_0xc4f3('0x1c')](_0xc4f3('0x17'),_0x4f706a,_0x27a759[_0xc4f3('0x1c')][_0xc4f3('0x1e')]);return _0x837af0(_0x27a759[_0xc4f3('0x1c')][_0xc4f3('0x1e')]);}else{logger['info']('FreshdeskConfiguration,\x20%s,\x20%s',_0x4f706a,_0xc4f3('0x18'));_0x837af0(_0x27a759[_0xc4f3('0x1f')][_0xc4f3('0x1e')]);}})['catch'](function(_0x4c261c){logger[_0xc4f3('0x1c')](_0xc4f3('0x17'),_0x4f706a,_0x4c261c);_0x34037c(_0x4c261c);});});}function respondWithStatusCode(_0x4696b5,_0x1be9a8){_0x1be9a8=_0x1be9a8||0xcc;return function(_0x18ef68){if(_0x18ef68){return _0x4696b5[_0xc4f3('0x20')](_0x1be9a8);}return _0x4696b5[_0xc4f3('0x21')](_0x1be9a8)[_0xc4f3('0x22')]();};}function respondWithResult(_0x168a06,_0x2c07fb){_0x2c07fb=_0x2c07fb||0xc8;return function(_0xd03eb1){if(_0xd03eb1){return _0x168a06[_0xc4f3('0x21')](_0x2c07fb)['json'](_0xd03eb1);}};}function respondWithFilteredResult(_0x2a8d13,_0xbf9d2e){return function(_0xb83406){if(_0xb83406){var _0x9536eb=_0xb83406[_0xc4f3('0x23')],_0x531b43=_0xbf9d2e[_0xc4f3('0x24')],_0x115027=_0xbf9d2e[_0xc4f3('0x24')]+_0xbf9d2e[_0xc4f3('0x25')],_0xe96f2f;if(_0x115027>=_0x9536eb){_0x115027=_0x9536eb;_0xe96f2f=0xc8;}else{_0xe96f2f=0xce;}_0x2a8d13['status'](_0xe96f2f);return _0x2a8d13[_0xc4f3('0x26')](_0xc4f3('0x27'),_0x531b43+'-'+_0x115027+'/'+_0x9536eb)[_0xc4f3('0x28')](_0xb83406);}return null;};}function patchUpdates(_0x31e7bf){return function(_0x5310f2){try{jsonpatch['apply'](_0x5310f2,_0x31e7bf,!![]);}catch(_0x5390ac){return BPromise['reject'](_0x5390ac);}return _0x5310f2[_0xc4f3('0x29')]();};}function saveUpdates(_0x40213a,_0x5a44c1){return function(_0xe48905){if(_0xe48905){return _0xe48905[_0xc4f3('0x2a')](_0x40213a)[_0xc4f3('0x15')](function(_0x388a5e){return _0x388a5e;});}return null;};}function removeEntity(_0x449d2e,_0x36ec8b){return function(_0x9abe0c){if(_0x9abe0c){return _0x9abe0c[_0xc4f3('0x2b')]()[_0xc4f3('0x15')](function(){_0x449d2e[_0xc4f3('0x21')](0xcc)[_0xc4f3('0x22')]();});}};}function handleEntityNotFound(_0x5a9fa2,_0x366fd9){return function(_0x4e0321){if(!_0x4e0321){_0x5a9fa2['sendStatus'](0x194);}return _0x4e0321;};}function handleError(_0x2fbda9,_0x57b7f5){_0x57b7f5=_0x57b7f5||0x1f4;return function(_0x5d099b){logger[_0xc4f3('0x1c')](_0x5d099b['stack']);if(_0x5d099b[_0xc4f3('0x2c')]){delete _0x5d099b[_0xc4f3('0x2c')];}_0x2fbda9['status'](_0x57b7f5)[_0xc4f3('0x2d')](_0x5d099b);};}exports['index']=function(_0xb5da22,_0x3d7511){var _0x382b6b={},_0x148a48={},_0x35b691={'count':0x0,'rows':[]};var _0x38d47d=db[_0xc4f3('0x2e')][_0xc4f3('0x2f')];_0x148a48[_0xc4f3('0x30')]=_[_0xc4f3('0x31')](_0x38d47d);var _0x3d72c4={'dateStart':_0xb5da22[_0xc4f3('0x32')][_0xc4f3('0x33')],'dateEnd':_0xb5da22[_0xc4f3('0x32')][_0xc4f3('0x34')]};delete _0xb5da22[_0xc4f3('0x32')]['dateStart'];delete _0xb5da22[_0xc4f3('0x32')][_0xc4f3('0x34')];_0x148a48[_0xc4f3('0x32')]=_[_0xc4f3('0x31')](_0xb5da22[_0xc4f3('0x32')]);_0x148a48[_0xc4f3('0x35')]=_[_0xc4f3('0x36')](_0x148a48[_0xc4f3('0x30')],_0x148a48[_0xc4f3('0x32')]);_0x382b6b['attributes']=_[_0xc4f3('0x36')](_0x148a48['model'],qs[_0xc4f3('0x37')](_0xb5da22['query']['fields']));_0x382b6b[_0xc4f3('0x38')]=_0x382b6b[_0xc4f3('0x38')][_0xc4f3('0x39')]?_0x382b6b[_0xc4f3('0x38')]:_0x148a48[_0xc4f3('0x30')];if(!_0xb5da22[_0xc4f3('0x32')][_0xc4f3('0x3a')](_0xc4f3('0x3b'))){_0x382b6b[_0xc4f3('0x25')]=qs[_0xc4f3('0x25')](_0xb5da22[_0xc4f3('0x32')][_0xc4f3('0x25')]);_0x382b6b['offset']=qs['offset'](_0xb5da22['query'][_0xc4f3('0x24')]);}_0x382b6b[_0xc4f3('0x3c')]=qs[_0xc4f3('0x3d')](_0xb5da22[_0xc4f3('0x32')][_0xc4f3('0x3d')]);_0x382b6b['where']=qs['filters'](_[_0xc4f3('0x3e')](_0xb5da22[_0xc4f3('0x32')],_0x148a48[_0xc4f3('0x35')]));if(_0x3d72c4[_0xc4f3('0x33')]){if(_0x3d72c4[_0xc4f3('0x34')]){_0x3d72c4['dateEnd']=moment(_0x3d72c4['dateEnd'])[_0xc4f3('0x3f')](0x1,_0xc4f3('0x40'));}else{_0x3d72c4['dateEnd']=moment(_0x3d72c4[_0xc4f3('0x33')])[_0xc4f3('0x3f')](0x1,'day');}_[_0xc4f3('0x41')](_0x382b6b[_0xc4f3('0x42')],{'createdAt':{'$gte':_0x3d72c4[_0xc4f3('0x33')],'$lte':_0x3d72c4['dateEnd']}});}if(_0xb5da22[_0xc4f3('0x32')][_0xc4f3('0x43')]){_0x382b6b[_0xc4f3('0x42')]=_[_0xc4f3('0x41')](_0x382b6b[_0xc4f3('0x42')],{'$or':_[_0xc4f3('0x44')](_0x382b6b[_0xc4f3('0x38')],function(_0x167cb2){var _0x6c6419={};_0x6c6419[_0x167cb2]={'$like':'%'+_0xb5da22['query'][_0xc4f3('0x43')]+'%'};return _0x6c6419;})});}_0x382b6b=_[_0xc4f3('0x41')]({},_0x382b6b,_0xb5da22['options']);var _0x42f126={'where':_0x382b6b[_0xc4f3('0x42')]};return db[_0xc4f3('0x2e')][_0xc4f3('0x23')](_0x42f126)[_0xc4f3('0x15')](function(_0x532a90){_0x35b691[_0xc4f3('0x23')]=_0x532a90;if(_0xb5da22['query']['includeAll']){_0x382b6b[_0xc4f3('0x45')]=[{'all':!![]}];}return db[_0xc4f3('0x2e')]['findAll'](_0x382b6b);})[_0xc4f3('0x15')](function(_0x5cc925){_0x35b691[_0xc4f3('0x46')]=_0x5cc925;return _0x35b691;})[_0xc4f3('0x15')](respondWithFilteredResult(_0x3d7511,_0x382b6b))['catch'](handleError(_0x3d7511,null));};exports[_0xc4f3('0x47')]=function(_0x5c2656,_0x2a55e2){var _0x14adca={'raw':![],'where':{'id':_0x5c2656[_0xc4f3('0x48')]['id']}},_0x3a3e59={};_0x3a3e59[_0xc4f3('0x30')]=_[_0xc4f3('0x31')](db['FreshdeskConfiguration'][_0xc4f3('0x2f')]);_0x3a3e59[_0xc4f3('0x32')]=_[_0xc4f3('0x31')](_0x5c2656['query']);_0x3a3e59[_0xc4f3('0x35')]=_[_0xc4f3('0x36')](_0x3a3e59[_0xc4f3('0x30')],_0x3a3e59[_0xc4f3('0x32')]);_0x14adca[_0xc4f3('0x38')]=_[_0xc4f3('0x36')](_0x3a3e59['model'],qs[_0xc4f3('0x37')](_0x5c2656[_0xc4f3('0x32')][_0xc4f3('0x37')]));_0x14adca['attributes']=_0x14adca[_0xc4f3('0x38')][_0xc4f3('0x39')]?_0x14adca[_0xc4f3('0x38')]:_0x3a3e59[_0xc4f3('0x30')];if(_0x5c2656[_0xc4f3('0x32')][_0xc4f3('0x49')]){_0x14adca[_0xc4f3('0x45')]=[{'all':!![]}];}_0x14adca=_['merge']({},_0x14adca,_0x5c2656['options']);return db[_0xc4f3('0x2e')]['find'](_0x14adca)['then'](handleEntityNotFound(_0x2a55e2,null))[_0xc4f3('0x15')](respondWithResult(_0x2a55e2,null))[_0xc4f3('0x4a')](handleError(_0x2a55e2,null));};exports['create']=function(_0x54fe95,_0x493a64){return db[_0xc4f3('0x2e')][_0xc4f3('0x4b')](_0x54fe95[_0xc4f3('0x4c')],{})[_0xc4f3('0x15')](respondWithResult(_0x493a64,0xc9))['catch'](handleError(_0x493a64,null));};exports['update']=function(_0x3bd9a0,_0x444c1){if(_0x3bd9a0[_0xc4f3('0x4c')]['id']){delete _0x3bd9a0[_0xc4f3('0x4c')]['id'];}return db[_0xc4f3('0x2e')][_0xc4f3('0x4d')]({'where':{'id':_0x3bd9a0[_0xc4f3('0x48')]['id']}})['then'](handleEntityNotFound(_0x444c1,null))[_0xc4f3('0x15')](saveUpdates(_0x3bd9a0['body'],null))['then'](respondWithResult(_0x444c1,null))[_0xc4f3('0x4a')](handleError(_0x444c1,null));};exports[_0xc4f3('0x2b')]=function(_0x321be0,_0x2bd7f1){return db[_0xc4f3('0x2e')]['find']({'where':{'id':_0x321be0[_0xc4f3('0x48')]['id']}})[_0xc4f3('0x15')](handleEntityNotFound(_0x2bd7f1,null))[_0xc4f3('0x15')](removeEntity(_0x2bd7f1,null))[_0xc4f3('0x4a')](handleError(_0x2bd7f1,null));};exports[_0xc4f3('0x4e')]=function(_0x54eed6,_0x47242a,_0x2f31df){var _0x2a420c={};var _0x34689e={};var _0x35c71a;var _0xe7692c;return db['FreshdeskConfiguration'][_0xc4f3('0x4f')]({'where':{'id':_0x54eed6[_0xc4f3('0x48')]['id']}})[_0xc4f3('0x15')](handleEntityNotFound(_0x47242a,null))[_0xc4f3('0x15')](function(_0x5ad86d){if(_0x5ad86d){_0x35c71a=_0x5ad86d;_0x34689e['model']=_['keys'](db[_0xc4f3('0x50')][_0xc4f3('0x2f')]);_0x34689e[_0xc4f3('0x32')]=_[_0xc4f3('0x31')](_0x54eed6[_0xc4f3('0x32')]);_0x34689e[_0xc4f3('0x35')]=_['intersection'](_0x34689e[_0xc4f3('0x30')],_0x34689e[_0xc4f3('0x32')]);_0x2a420c[_0xc4f3('0x38')]=_['intersection'](_0x34689e[_0xc4f3('0x30')],qs['fields'](_0x54eed6[_0xc4f3('0x32')][_0xc4f3('0x37')]));_0x2a420c[_0xc4f3('0x38')]=_0x2a420c[_0xc4f3('0x38')][_0xc4f3('0x39')]?_0x2a420c[_0xc4f3('0x38')]:_0x34689e[_0xc4f3('0x30')];_0x2a420c[_0xc4f3('0x3c')]=qs[_0xc4f3('0x3d')](_0x54eed6[_0xc4f3('0x32')][_0xc4f3('0x3d')]);_0x2a420c['where']=qs[_0xc4f3('0x35')](_[_0xc4f3('0x3e')](_0x54eed6[_0xc4f3('0x32')],_0x34689e['filters']));if(_0x54eed6[_0xc4f3('0x32')][_0xc4f3('0x43')]){_0x2a420c[_0xc4f3('0x42')]=_[_0xc4f3('0x41')](_0x2a420c[_0xc4f3('0x42')],{'$or':_[_0xc4f3('0x44')](_0x2a420c[_0xc4f3('0x38')],function(_0x5c947e){var _0xf5765a={};_0xf5765a[_0x5c947e]={'$like':'%'+_0x54eed6[_0xc4f3('0x32')][_0xc4f3('0x43')]+'%'};return _0xf5765a;})});}_0x2a420c=_[_0xc4f3('0x41')]({},_0x2a420c,_0x54eed6['options']);return _0x35c71a[_0xc4f3('0x4e')](_0x2a420c);}})[_0xc4f3('0x15')](function(_0x11699b){if(_0x11699b){_0xe7692c=_0x11699b['length'];if(!_0x54eed6[_0xc4f3('0x32')][_0xc4f3('0x3a')]('nolimit')){_0x2a420c[_0xc4f3('0x25')]=qs[_0xc4f3('0x25')](_0x54eed6[_0xc4f3('0x32')][_0xc4f3('0x25')]);_0x2a420c[_0xc4f3('0x24')]=qs[_0xc4f3('0x24')](_0x54eed6[_0xc4f3('0x32')][_0xc4f3('0x24')]);}return _0x35c71a[_0xc4f3('0x4e')](_0x2a420c);}})[_0xc4f3('0x15')](function(_0x325185){if(_0x325185){return _0x325185?{'count':_0xe7692c,'rows':_0x325185}:null;}})[_0xc4f3('0x15')](respondWithResult(_0x47242a,null))[_0xc4f3('0x4a')](handleError(_0x47242a,null));};exports[_0xc4f3('0x51')]=function(_0x13dea3,_0x5c3f3a,_0x4a44ec){var _0x2e4210={};var _0xc513b2={};var _0xd2135b;var _0x516798;return db['FreshdeskConfiguration'][_0xc4f3('0x4f')]({'where':{'id':_0x13dea3['params']['id']}})[_0xc4f3('0x15')](handleEntityNotFound(_0x5c3f3a,null))[_0xc4f3('0x15')](function(_0x937520){if(_0x937520){_0xd2135b=_0x937520;_0xc513b2[_0xc4f3('0x30')]=_[_0xc4f3('0x31')](db['FreshdeskField'][_0xc4f3('0x2f')]);_0xc513b2[_0xc4f3('0x32')]=_[_0xc4f3('0x31')](_0x13dea3['query']);_0xc513b2[_0xc4f3('0x35')]=_[_0xc4f3('0x36')](_0xc513b2['model'],_0xc513b2[_0xc4f3('0x32')]);_0x2e4210[_0xc4f3('0x38')]=_[_0xc4f3('0x36')](_0xc513b2[_0xc4f3('0x30')],qs[_0xc4f3('0x37')](_0x13dea3['query']['fields']));_0x2e4210[_0xc4f3('0x38')]=_0x2e4210[_0xc4f3('0x38')][_0xc4f3('0x39')]?_0x2e4210[_0xc4f3('0x38')]:_0xc513b2[_0xc4f3('0x30')];_0x2e4210['order']=qs['sort'](_0x13dea3[_0xc4f3('0x32')][_0xc4f3('0x3d')]);_0x2e4210['where']=qs['filters'](_[_0xc4f3('0x3e')](_0x13dea3[_0xc4f3('0x32')],_0xc513b2[_0xc4f3('0x35')]));if(_0x13dea3['query'][_0xc4f3('0x43')]){_0x2e4210[_0xc4f3('0x42')]=_[_0xc4f3('0x41')](_0x2e4210[_0xc4f3('0x42')],{'$or':_[_0xc4f3('0x44')](_0x2e4210[_0xc4f3('0x38')],function(_0x284e5b){var _0x3bce53={};_0x3bce53[_0x284e5b]={'$like':'%'+_0x13dea3['query'][_0xc4f3('0x43')]+'%'};return _0x3bce53;})});}_0x2e4210=_[_0xc4f3('0x41')]({},_0x2e4210,_0x13dea3[_0xc4f3('0x52')]);return _0xd2135b[_0xc4f3('0x51')](_0x2e4210);}})[_0xc4f3('0x15')](function(_0x47f08e){if(_0x47f08e){_0x516798=_0x47f08e[_0xc4f3('0x39')];if(!_0x13dea3[_0xc4f3('0x32')][_0xc4f3('0x3a')](_0xc4f3('0x3b'))){_0x2e4210['limit']=qs[_0xc4f3('0x25')](_0x13dea3[_0xc4f3('0x32')]['limit']);_0x2e4210['offset']=qs['offset'](_0x13dea3['query'][_0xc4f3('0x24')]);}return _0xd2135b[_0xc4f3('0x51')](_0x2e4210);}})['then'](function(_0x5f57e5){if(_0x5f57e5){return _0x5f57e5?{'count':_0x516798,'rows':_0x5f57e5}:null;}})[_0xc4f3('0x15')](respondWithResult(_0x5c3f3a,null))[_0xc4f3('0x4a')](handleError(_0x5c3f3a,null));};exports[_0xc4f3('0x53')]=function(_0x1e6e44,_0x2c07c4,_0x290318){var _0x243501={};var _0x21dfbb={};var _0x2fe433;var _0x25bc97;return db[_0xc4f3('0x2e')][_0xc4f3('0x4f')]({'where':{'id':_0x1e6e44[_0xc4f3('0x48')]['id']}})[_0xc4f3('0x15')](handleEntityNotFound(_0x2c07c4,null))['then'](function(_0x17c65e){if(_0x17c65e){_0x2fe433=_0x17c65e;_0x21dfbb[_0xc4f3('0x30')]=_[_0xc4f3('0x31')](db[_0xc4f3('0x50')][_0xc4f3('0x2f')]);_0x21dfbb[_0xc4f3('0x32')]=_[_0xc4f3('0x31')](_0x1e6e44[_0xc4f3('0x32')]);_0x21dfbb[_0xc4f3('0x35')]=_[_0xc4f3('0x36')](_0x21dfbb['model'],_0x21dfbb[_0xc4f3('0x32')]);_0x243501[_0xc4f3('0x38')]=_[_0xc4f3('0x36')](_0x21dfbb[_0xc4f3('0x30')],qs[_0xc4f3('0x37')](_0x1e6e44[_0xc4f3('0x32')][_0xc4f3('0x37')]));_0x243501[_0xc4f3('0x38')]=_0x243501[_0xc4f3('0x38')][_0xc4f3('0x39')]?_0x243501['attributes']:_0x21dfbb[_0xc4f3('0x30')];_0x243501[_0xc4f3('0x3c')]=qs[_0xc4f3('0x3d')](_0x1e6e44[_0xc4f3('0x32')][_0xc4f3('0x3d')]);_0x243501['where']=qs[_0xc4f3('0x35')](_[_0xc4f3('0x3e')](_0x1e6e44[_0xc4f3('0x32')],_0x21dfbb[_0xc4f3('0x35')]));if(_0x1e6e44[_0xc4f3('0x32')][_0xc4f3('0x43')]){_0x243501['where']=_['merge'](_0x243501[_0xc4f3('0x42')],{'$or':_[_0xc4f3('0x44')](_0x243501['attributes'],function(_0x369681){var _0x15455b={};_0x15455b[_0x369681]={'$like':'%'+_0x1e6e44[_0xc4f3('0x32')]['filter']+'%'};return _0x15455b;})});}_0x243501=_['merge']({},_0x243501,_0x1e6e44[_0xc4f3('0x52')]);return _0x2fe433[_0xc4f3('0x53')](_0x243501);}})[_0xc4f3('0x15')](function(_0x2e3fe1){if(_0x2e3fe1){_0x25bc97=_0x2e3fe1[_0xc4f3('0x39')];if(!_0x1e6e44[_0xc4f3('0x32')][_0xc4f3('0x3a')](_0xc4f3('0x3b'))){_0x243501[_0xc4f3('0x25')]=qs[_0xc4f3('0x25')](_0x1e6e44[_0xc4f3('0x32')]['limit']);_0x243501[_0xc4f3('0x24')]=qs[_0xc4f3('0x24')](_0x1e6e44[_0xc4f3('0x32')]['offset']);}return _0x2fe433[_0xc4f3('0x53')](_0x243501);}})['then'](function(_0x452522){if(_0x452522){return _0x452522?{'count':_0x25bc97,'rows':_0x452522}:null;}})[_0xc4f3('0x15')](respondWithResult(_0x2c07c4,null))[_0xc4f3('0x4a')](handleError(_0x2c07c4,null));};exports[_0xc4f3('0x54')]=function(_0x208dac,_0x16dda1,_0x27e1f3){var _0x427e9d={};var _0x2033e4={};var _0x3ee08d;var _0x247d93;return db[_0xc4f3('0x2e')][_0xc4f3('0x4f')]({'where':{'id':_0x208dac[_0xc4f3('0x48')]['id']}})['then'](handleEntityNotFound(_0x16dda1,null))[_0xc4f3('0x15')](function(_0xd36eb8){if(_0xd36eb8){_0x3ee08d=_0xd36eb8;_0x2033e4[_0xc4f3('0x30')]=_[_0xc4f3('0x31')](db[_0xc4f3('0x55')][_0xc4f3('0x2f')]);_0x2033e4[_0xc4f3('0x32')]=_[_0xc4f3('0x31')](_0x208dac['query']);_0x2033e4[_0xc4f3('0x35')]=_[_0xc4f3('0x36')](_0x2033e4[_0xc4f3('0x30')],_0x2033e4[_0xc4f3('0x32')]);_0x427e9d[_0xc4f3('0x38')]=_[_0xc4f3('0x36')](_0x2033e4['model'],qs[_0xc4f3('0x37')](_0x208dac[_0xc4f3('0x32')]['fields']));_0x427e9d[_0xc4f3('0x38')]=_0x427e9d['attributes']['length']?_0x427e9d[_0xc4f3('0x38')]:_0x2033e4['model'];_0x427e9d[_0xc4f3('0x3c')]=qs[_0xc4f3('0x3d')](_0x208dac['query']['sort']);_0x427e9d[_0xc4f3('0x42')]=qs[_0xc4f3('0x35')](_['pick'](_0x208dac['query'],_0x2033e4[_0xc4f3('0x35')]));if(_0x208dac['query'][_0xc4f3('0x43')]){_0x427e9d[_0xc4f3('0x42')]=_[_0xc4f3('0x41')](_0x427e9d[_0xc4f3('0x42')],{'$or':_[_0xc4f3('0x44')](_0x427e9d[_0xc4f3('0x38')],function(_0x36d256){var _0x3c86bf={};_0x3c86bf[_0x36d256]={'$like':'%'+_0x208dac['query'][_0xc4f3('0x43')]+'%'};return _0x3c86bf;})});}_0x427e9d=_[_0xc4f3('0x41')]({},_0x427e9d,_0x208dac['options']);return _0x3ee08d[_0xc4f3('0x54')](_0x427e9d);}})[_0xc4f3('0x15')](function(_0x16396c){if(_0x16396c){_0x247d93=_0x16396c[_0xc4f3('0x39')];if(!_0x208dac[_0xc4f3('0x32')][_0xc4f3('0x3a')](_0xc4f3('0x3b'))){_0x427e9d[_0xc4f3('0x25')]=qs['limit'](_0x208dac[_0xc4f3('0x32')]['limit']);_0x427e9d[_0xc4f3('0x24')]=qs['offset'](_0x208dac[_0xc4f3('0x32')][_0xc4f3('0x24')]);}return _0x3ee08d['getTags'](_0x427e9d);}})[_0xc4f3('0x15')](function(_0x50d38b){if(_0x50d38b){return _0x50d38b?{'count':_0x247d93,'rows':_0x50d38b}:null;}})[_0xc4f3('0x15')](respondWithResult(_0x16dda1,null))[_0xc4f3('0x4a')](handleError(_0x16dda1,null));};exports[_0xc4f3('0x56')]=function(_0x28135d,_0x23dec6,_0x3c1ba5){if(_0x28135d[_0xc4f3('0x4c')]['id']){delete _0x28135d['body']['id'];}return db[_0xc4f3('0x2e')][_0xc4f3('0x4f')]({'where':{'id':_0x28135d[_0xc4f3('0x48')]['id']}})['then'](handleEntityNotFound(_0x23dec6,null))[_0xc4f3('0x15')](function(_0x2e882b){if(_0x2e882b){return _0x2e882b['setTags'](_0x28135d[_0xc4f3('0x4c')][_0xc4f3('0x57')]||[]);}return null;})['then'](respondWithResult(_0x23dec6,null))[_0xc4f3('0x4a')](handleError(_0x23dec6,null));};
\ No newline at end of file
+var _0xc196=['options','includeAll','include','findAll','rows','show','params','find','create','body','destroy','getFields','FreshdeskField','getSubjects','map','getDescriptions','getTags','Tag','setTags','findOne','ids','fast-json-patch','bluebird','util','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','then','info','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','FreshdeskConfiguration,\x20%s,\x20%s','message','result','catch','status','count','offset','limit','set','Content-Range','json','reject','update','end','sendStatus','stack','name','send','index','FreshdeskConfiguration','rawAttributes','keys','query','dateStart','filters','model','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','dateEnd','add','day','merge','filter'];(function(_0x69588b,_0x526324){var _0x12dc9f=function(_0xf241df){while(--_0xf241df){_0x69588b['push'](_0x69588b['shift']());}};_0x12dc9f(++_0x526324);}(_0xc196,0x11d));var _0x6c19=function(_0x48bc2a,_0x1a3a4a){_0x48bc2a=_0x48bc2a-0x0;var _0x52b672=_0xc196[_0x48bc2a];return _0x52b672;};'use strict';var jsonpatch=require(_0x6c19('0x0'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x6c19('0x1'));var Mustache=require('mustache');var util=require(_0x6c19('0x2'));var path=require('path');var sox=require(_0x6c19('0x3'));var csv=require(_0x6c19('0x4'));var ejs=require(_0x6c19('0x5'));var fs=require('fs');var _=require(_0x6c19('0x6'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x6c19('0x7'));var deskjs=require(_0x6c19('0x8'));var toCsv=require(_0x6c19('0x4'));var querystring=require(_0x6c19('0x9'));var Papa=require(_0x6c19('0xa'));var qs=require(_0x6c19('0xb'));var logger=require(_0x6c19('0xc'))(_0x6c19('0xd'));var utils=require(_0x6c19('0xe'));var config=require(_0x6c19('0xf'));var db=require(_0x6c19('0x10'))['db'];var jayson=require(_0x6c19('0x11'));var client=jayson[_0x6c19('0x12')]['http']({'port':0x232a});function respondWithRpcPromise(_0x15bfe5,_0x326c20,_0x2eeeba,_0x3b38a9){return new BPromise(function(_0x249736,_0xf7be24){var _0x1c35c8=_0x3b38a9||client;return _0x1c35c8['request'](_0x15bfe5,_0x2eeeba)[_0x6c19('0x13')](function(_0x56f1f8){logger[_0x6c19('0x14')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x326c20,'request\x20sent');logger[_0x6c19('0x15')](_0x6c19('0x16'),_0x326c20,_0x6c19('0x17'),JSON['stringify'](_0x56f1f8));if(_0x56f1f8[_0x6c19('0x18')]){if(_0x56f1f8['error'][_0x6c19('0x19')]===0x1f4){logger['error'](_0x6c19('0x1a'),_0x326c20,_0x56f1f8['error'][_0x6c19('0x1b')]);return _0xf7be24(_0x56f1f8['error']['message']);}logger[_0x6c19('0x18')](_0x6c19('0x1a'),_0x326c20,_0x56f1f8[_0x6c19('0x18')][_0x6c19('0x1b')]);return _0x249736(_0x56f1f8[_0x6c19('0x18')]['message']);}else{logger[_0x6c19('0x14')](_0x6c19('0x1a'),_0x326c20,_0x6c19('0x17'));_0x249736(_0x56f1f8[_0x6c19('0x1c')]['message']);}})[_0x6c19('0x1d')](function(_0x53d25d){logger[_0x6c19('0x18')](_0x6c19('0x1a'),_0x326c20,_0x53d25d);_0xf7be24(_0x53d25d);});});}function respondWithStatusCode(_0x5f3cbc,_0x2fa349){_0x2fa349=_0x2fa349||0xcc;return function(_0xd60be8){if(_0xd60be8){return _0x5f3cbc['sendStatus'](_0x2fa349);}return _0x5f3cbc[_0x6c19('0x1e')](_0x2fa349)['end']();};}function respondWithResult(_0xb94985,_0x10fe56){_0x10fe56=_0x10fe56||0xc8;return function(_0x27bd99){if(_0x27bd99){return _0xb94985[_0x6c19('0x1e')](_0x10fe56)['json'](_0x27bd99);}};}function respondWithFilteredResult(_0x479ac2,_0x3ed435){return function(_0x44d567){if(_0x44d567){var _0x35289e=_0x44d567[_0x6c19('0x1f')],_0x5a8994=_0x3ed435[_0x6c19('0x20')],_0x367ebd=_0x3ed435[_0x6c19('0x20')]+_0x3ed435[_0x6c19('0x21')],_0x208731;if(_0x367ebd>=_0x35289e){_0x367ebd=_0x35289e;_0x208731=0xc8;}else{_0x208731=0xce;}_0x479ac2['status'](_0x208731);return _0x479ac2[_0x6c19('0x22')](_0x6c19('0x23'),_0x5a8994+'-'+_0x367ebd+'/'+_0x35289e)[_0x6c19('0x24')](_0x44d567);}return null;};}function patchUpdates(_0x5b3ebc){return function(_0x140448){try{jsonpatch['apply'](_0x140448,_0x5b3ebc,!![]);}catch(_0x2e1257){return BPromise[_0x6c19('0x25')](_0x2e1257);}return _0x140448['save']();};}function saveUpdates(_0x5afefb,_0x264265){return function(_0x39630e){if(_0x39630e){return _0x39630e[_0x6c19('0x26')](_0x5afefb)[_0x6c19('0x13')](function(_0x472a2d){return _0x472a2d;});}return null;};}function removeEntity(_0x378b95,_0x3f934a){return function(_0x1fc03f){if(_0x1fc03f){return _0x1fc03f['destroy']()[_0x6c19('0x13')](function(){_0x378b95[_0x6c19('0x1e')](0xcc)[_0x6c19('0x27')]();});}};}function handleEntityNotFound(_0x2caf5a,_0x3a07f3){return function(_0x5b6f82){if(!_0x5b6f82){_0x2caf5a[_0x6c19('0x28')](0x194);}return _0x5b6f82;};}function handleError(_0x20ad6a,_0x20c96f){_0x20c96f=_0x20c96f||0x1f4;return function(_0x516296){logger['error'](_0x516296[_0x6c19('0x29')]);if(_0x516296['name']){delete _0x516296[_0x6c19('0x2a')];}_0x20ad6a[_0x6c19('0x1e')](_0x20c96f)[_0x6c19('0x2b')](_0x516296);};}exports[_0x6c19('0x2c')]=function(_0x4e6f67,_0x1eda05){var _0x13a021={},_0x28b060={},_0x187c05={'count':0x0,'rows':[]};var _0x57361f=db[_0x6c19('0x2d')][_0x6c19('0x2e')];_0x28b060['model']=_[_0x6c19('0x2f')](_0x57361f);var _0x4fdc1e={'dateStart':_0x4e6f67[_0x6c19('0x30')][_0x6c19('0x31')],'dateEnd':_0x4e6f67[_0x6c19('0x30')]['dateEnd']};delete _0x4e6f67['query'][_0x6c19('0x31')];delete _0x4e6f67[_0x6c19('0x30')]['dateEnd'];_0x28b060['query']=_[_0x6c19('0x2f')](_0x4e6f67[_0x6c19('0x30')]);_0x28b060[_0x6c19('0x32')]=_['intersection'](_0x28b060[_0x6c19('0x33')],_0x28b060[_0x6c19('0x30')]);_0x13a021[_0x6c19('0x34')]=_[_0x6c19('0x35')](_0x28b060[_0x6c19('0x33')],qs[_0x6c19('0x36')](_0x4e6f67[_0x6c19('0x30')][_0x6c19('0x36')]));_0x13a021[_0x6c19('0x34')]=_0x13a021['attributes'][_0x6c19('0x37')]?_0x13a021[_0x6c19('0x34')]:_0x28b060['model'];if(!_0x4e6f67[_0x6c19('0x30')][_0x6c19('0x38')](_0x6c19('0x39'))){_0x13a021['limit']=qs[_0x6c19('0x21')](_0x4e6f67[_0x6c19('0x30')][_0x6c19('0x21')]);_0x13a021[_0x6c19('0x20')]=qs['offset'](_0x4e6f67[_0x6c19('0x30')][_0x6c19('0x20')]);}_0x13a021[_0x6c19('0x3a')]=qs['sort'](_0x4e6f67[_0x6c19('0x30')][_0x6c19('0x3b')]);_0x13a021[_0x6c19('0x3c')]=qs[_0x6c19('0x32')](_[_0x6c19('0x3d')](_0x4e6f67[_0x6c19('0x30')],_0x28b060[_0x6c19('0x32')]));if(_0x4fdc1e[_0x6c19('0x31')]){if(_0x4fdc1e[_0x6c19('0x3e')]){_0x4fdc1e[_0x6c19('0x3e')]=moment(_0x4fdc1e[_0x6c19('0x3e')])[_0x6c19('0x3f')](0x1,_0x6c19('0x40'));}else{_0x4fdc1e[_0x6c19('0x3e')]=moment(_0x4fdc1e[_0x6c19('0x31')])['add'](0x1,_0x6c19('0x40'));}_[_0x6c19('0x41')](_0x13a021[_0x6c19('0x3c')],{'createdAt':{'$gte':_0x4fdc1e[_0x6c19('0x31')],'$lte':_0x4fdc1e[_0x6c19('0x3e')]}});}if(_0x4e6f67['query'][_0x6c19('0x42')]){_0x13a021['where']=_[_0x6c19('0x41')](_0x13a021['where'],{'$or':_['map'](_0x13a021['attributes'],function(_0x510752){var _0x388c4b={};_0x388c4b[_0x510752]={'$like':'%'+_0x4e6f67[_0x6c19('0x30')][_0x6c19('0x42')]+'%'};return _0x388c4b;})});}_0x13a021=_[_0x6c19('0x41')]({},_0x13a021,_0x4e6f67[_0x6c19('0x43')]);var _0x3fd7bb={'where':_0x13a021['where']};return db['FreshdeskConfiguration'][_0x6c19('0x1f')](_0x3fd7bb)[_0x6c19('0x13')](function(_0x256dce){_0x187c05[_0x6c19('0x1f')]=_0x256dce;if(_0x4e6f67['query'][_0x6c19('0x44')]){_0x13a021[_0x6c19('0x45')]=[{'all':!![]}];}return db['FreshdeskConfiguration'][_0x6c19('0x46')](_0x13a021);})[_0x6c19('0x13')](function(_0x26b3b7){_0x187c05[_0x6c19('0x47')]=_0x26b3b7;return _0x187c05;})[_0x6c19('0x13')](respondWithFilteredResult(_0x1eda05,_0x13a021))[_0x6c19('0x1d')](handleError(_0x1eda05,null));};exports[_0x6c19('0x48')]=function(_0x1777bf,_0x45df04){var _0x38b77d={'raw':![],'where':{'id':_0x1777bf[_0x6c19('0x49')]['id']}},_0x1d6a1e={};_0x1d6a1e[_0x6c19('0x33')]=_[_0x6c19('0x2f')](db[_0x6c19('0x2d')][_0x6c19('0x2e')]);_0x1d6a1e['query']=_[_0x6c19('0x2f')](_0x1777bf[_0x6c19('0x30')]);_0x1d6a1e[_0x6c19('0x32')]=_[_0x6c19('0x35')](_0x1d6a1e[_0x6c19('0x33')],_0x1d6a1e[_0x6c19('0x30')]);_0x38b77d[_0x6c19('0x34')]=_[_0x6c19('0x35')](_0x1d6a1e[_0x6c19('0x33')],qs[_0x6c19('0x36')](_0x1777bf[_0x6c19('0x30')]['fields']));_0x38b77d[_0x6c19('0x34')]=_0x38b77d[_0x6c19('0x34')][_0x6c19('0x37')]?_0x38b77d[_0x6c19('0x34')]:_0x1d6a1e[_0x6c19('0x33')];if(_0x1777bf[_0x6c19('0x30')][_0x6c19('0x44')]){_0x38b77d[_0x6c19('0x45')]=[{'all':!![]}];}_0x38b77d=_['merge']({},_0x38b77d,_0x1777bf['options']);return db[_0x6c19('0x2d')][_0x6c19('0x4a')](_0x38b77d)['then'](handleEntityNotFound(_0x45df04,null))[_0x6c19('0x13')](respondWithResult(_0x45df04,null))[_0x6c19('0x1d')](handleError(_0x45df04,null));};exports[_0x6c19('0x4b')]=function(_0x22b476,_0x3f54c5){return db[_0x6c19('0x2d')]['create'](_0x22b476['body'],{})[_0x6c19('0x13')](respondWithResult(_0x3f54c5,0xc9))[_0x6c19('0x1d')](handleError(_0x3f54c5,null));};exports['update']=function(_0x24a0a3,_0x1244b3){if(_0x24a0a3[_0x6c19('0x4c')]['id']){delete _0x24a0a3[_0x6c19('0x4c')]['id'];}return db[_0x6c19('0x2d')]['find']({'where':{'id':_0x24a0a3['params']['id']}})[_0x6c19('0x13')](handleEntityNotFound(_0x1244b3,null))[_0x6c19('0x13')](saveUpdates(_0x24a0a3[_0x6c19('0x4c')],null))[_0x6c19('0x13')](respondWithResult(_0x1244b3,null))['catch'](handleError(_0x1244b3,null));};exports[_0x6c19('0x4d')]=function(_0x565472,_0x3dc65e){return db[_0x6c19('0x2d')][_0x6c19('0x4a')]({'where':{'id':_0x565472['params']['id']}})[_0x6c19('0x13')](handleEntityNotFound(_0x3dc65e,null))[_0x6c19('0x13')](removeEntity(_0x3dc65e,null))['catch'](handleError(_0x3dc65e,null));};exports[_0x6c19('0x4e')]=function(_0xf6eae9,_0x38a387,_0x491c0b){var _0x3109eb={};var _0x35a725={};var _0x3a1b4f;var _0x44e256;return db[_0x6c19('0x2d')]['findOne']({'where':{'id':_0xf6eae9['params']['id']}})[_0x6c19('0x13')](handleEntityNotFound(_0x38a387,null))[_0x6c19('0x13')](function(_0x114153){if(_0x114153){_0x3a1b4f=_0x114153;_0x35a725[_0x6c19('0x33')]=_[_0x6c19('0x2f')](db[_0x6c19('0x4f')][_0x6c19('0x2e')]);_0x35a725[_0x6c19('0x30')]=_[_0x6c19('0x2f')](_0xf6eae9['query']);_0x35a725[_0x6c19('0x32')]=_[_0x6c19('0x35')](_0x35a725[_0x6c19('0x33')],_0x35a725['query']);_0x3109eb[_0x6c19('0x34')]=_[_0x6c19('0x35')](_0x35a725['model'],qs['fields'](_0xf6eae9[_0x6c19('0x30')][_0x6c19('0x36')]));_0x3109eb[_0x6c19('0x34')]=_0x3109eb[_0x6c19('0x34')]['length']?_0x3109eb['attributes']:_0x35a725[_0x6c19('0x33')];_0x3109eb[_0x6c19('0x3a')]=qs[_0x6c19('0x3b')](_0xf6eae9[_0x6c19('0x30')][_0x6c19('0x3b')]);_0x3109eb[_0x6c19('0x3c')]=qs[_0x6c19('0x32')](_['pick'](_0xf6eae9[_0x6c19('0x30')],_0x35a725[_0x6c19('0x32')]));if(_0xf6eae9[_0x6c19('0x30')][_0x6c19('0x42')]){_0x3109eb[_0x6c19('0x3c')]=_[_0x6c19('0x41')](_0x3109eb['where'],{'$or':_['map'](_0x3109eb[_0x6c19('0x34')],function(_0x33201c){var _0x1ae65d={};_0x1ae65d[_0x33201c]={'$like':'%'+_0xf6eae9[_0x6c19('0x30')][_0x6c19('0x42')]+'%'};return _0x1ae65d;})});}_0x3109eb=_[_0x6c19('0x41')]({},_0x3109eb,_0xf6eae9[_0x6c19('0x43')]);return _0x3a1b4f['getFields'](_0x3109eb);}})[_0x6c19('0x13')](function(_0xb26576){if(_0xb26576){_0x44e256=_0xb26576[_0x6c19('0x37')];if(!_0xf6eae9['query']['hasOwnProperty'](_0x6c19('0x39'))){_0x3109eb[_0x6c19('0x21')]=qs[_0x6c19('0x21')](_0xf6eae9['query'][_0x6c19('0x21')]);_0x3109eb['offset']=qs[_0x6c19('0x20')](_0xf6eae9['query'][_0x6c19('0x20')]);}return _0x3a1b4f['getFields'](_0x3109eb);}})[_0x6c19('0x13')](function(_0x19b7ab){if(_0x19b7ab){return _0x19b7ab?{'count':_0x44e256,'rows':_0x19b7ab}:null;}})['then'](respondWithResult(_0x38a387,null))[_0x6c19('0x1d')](handleError(_0x38a387,null));};exports[_0x6c19('0x50')]=function(_0x5f5232,_0xc3e28d,_0x2d0951){var _0x5bc753={};var _0x53e14c={};var _0x4ffde5;var _0x35f7f3;return db['FreshdeskConfiguration']['findOne']({'where':{'id':_0x5f5232[_0x6c19('0x49')]['id']}})[_0x6c19('0x13')](handleEntityNotFound(_0xc3e28d,null))[_0x6c19('0x13')](function(_0x4e32f4){if(_0x4e32f4){_0x4ffde5=_0x4e32f4;_0x53e14c[_0x6c19('0x33')]=_[_0x6c19('0x2f')](db['FreshdeskField'][_0x6c19('0x2e')]);_0x53e14c[_0x6c19('0x30')]=_[_0x6c19('0x2f')](_0x5f5232[_0x6c19('0x30')]);_0x53e14c['filters']=_[_0x6c19('0x35')](_0x53e14c['model'],_0x53e14c[_0x6c19('0x30')]);_0x5bc753[_0x6c19('0x34')]=_[_0x6c19('0x35')](_0x53e14c[_0x6c19('0x33')],qs[_0x6c19('0x36')](_0x5f5232[_0x6c19('0x30')][_0x6c19('0x36')]));_0x5bc753['attributes']=_0x5bc753[_0x6c19('0x34')]['length']?_0x5bc753['attributes']:_0x53e14c[_0x6c19('0x33')];_0x5bc753[_0x6c19('0x3a')]=qs[_0x6c19('0x3b')](_0x5f5232[_0x6c19('0x30')]['sort']);_0x5bc753[_0x6c19('0x3c')]=qs[_0x6c19('0x32')](_[_0x6c19('0x3d')](_0x5f5232[_0x6c19('0x30')],_0x53e14c[_0x6c19('0x32')]));if(_0x5f5232[_0x6c19('0x30')][_0x6c19('0x42')]){_0x5bc753[_0x6c19('0x3c')]=_[_0x6c19('0x41')](_0x5bc753[_0x6c19('0x3c')],{'$or':_[_0x6c19('0x51')](_0x5bc753[_0x6c19('0x34')],function(_0xa7972a){var _0x124503={};_0x124503[_0xa7972a]={'$like':'%'+_0x5f5232[_0x6c19('0x30')][_0x6c19('0x42')]+'%'};return _0x124503;})});}_0x5bc753=_[_0x6c19('0x41')]({},_0x5bc753,_0x5f5232[_0x6c19('0x43')]);return _0x4ffde5[_0x6c19('0x50')](_0x5bc753);}})[_0x6c19('0x13')](function(_0x411991){if(_0x411991){_0x35f7f3=_0x411991['length'];if(!_0x5f5232['query'][_0x6c19('0x38')](_0x6c19('0x39'))){_0x5bc753[_0x6c19('0x21')]=qs[_0x6c19('0x21')](_0x5f5232[_0x6c19('0x30')][_0x6c19('0x21')]);_0x5bc753[_0x6c19('0x20')]=qs[_0x6c19('0x20')](_0x5f5232['query'][_0x6c19('0x20')]);}return _0x4ffde5[_0x6c19('0x50')](_0x5bc753);}})['then'](function(_0x41b2f9){if(_0x41b2f9){return _0x41b2f9?{'count':_0x35f7f3,'rows':_0x41b2f9}:null;}})[_0x6c19('0x13')](respondWithResult(_0xc3e28d,null))['catch'](handleError(_0xc3e28d,null));};exports['getDescriptions']=function(_0x3b9ef5,_0x2af2fa,_0x11d5ae){var _0x1732fd={};var _0x25738={};var _0x5b7d12;var _0x10cedd;return db[_0x6c19('0x2d')]['findOne']({'where':{'id':_0x3b9ef5['params']['id']}})[_0x6c19('0x13')](handleEntityNotFound(_0x2af2fa,null))[_0x6c19('0x13')](function(_0x4f5013){if(_0x4f5013){_0x5b7d12=_0x4f5013;_0x25738['model']=_['keys'](db['FreshdeskField'][_0x6c19('0x2e')]);_0x25738[_0x6c19('0x30')]=_[_0x6c19('0x2f')](_0x3b9ef5['query']);_0x25738['filters']=_[_0x6c19('0x35')](_0x25738['model'],_0x25738[_0x6c19('0x30')]);_0x1732fd[_0x6c19('0x34')]=_['intersection'](_0x25738[_0x6c19('0x33')],qs[_0x6c19('0x36')](_0x3b9ef5[_0x6c19('0x30')][_0x6c19('0x36')]));_0x1732fd[_0x6c19('0x34')]=_0x1732fd['attributes'][_0x6c19('0x37')]?_0x1732fd[_0x6c19('0x34')]:_0x25738[_0x6c19('0x33')];_0x1732fd['order']=qs['sort'](_0x3b9ef5[_0x6c19('0x30')][_0x6c19('0x3b')]);_0x1732fd['where']=qs['filters'](_[_0x6c19('0x3d')](_0x3b9ef5['query'],_0x25738[_0x6c19('0x32')]));if(_0x3b9ef5['query'][_0x6c19('0x42')]){_0x1732fd[_0x6c19('0x3c')]=_[_0x6c19('0x41')](_0x1732fd[_0x6c19('0x3c')],{'$or':_['map'](_0x1732fd[_0x6c19('0x34')],function(_0x2d0d37){var _0x561c4b={};_0x561c4b[_0x2d0d37]={'$like':'%'+_0x3b9ef5[_0x6c19('0x30')][_0x6c19('0x42')]+'%'};return _0x561c4b;})});}_0x1732fd=_[_0x6c19('0x41')]({},_0x1732fd,_0x3b9ef5['options']);return _0x5b7d12[_0x6c19('0x52')](_0x1732fd);}})[_0x6c19('0x13')](function(_0x32a0e9){if(_0x32a0e9){_0x10cedd=_0x32a0e9[_0x6c19('0x37')];if(!_0x3b9ef5[_0x6c19('0x30')][_0x6c19('0x38')]('nolimit')){_0x1732fd[_0x6c19('0x21')]=qs['limit'](_0x3b9ef5['query'][_0x6c19('0x21')]);_0x1732fd[_0x6c19('0x20')]=qs[_0x6c19('0x20')](_0x3b9ef5['query'][_0x6c19('0x20')]);}return _0x5b7d12[_0x6c19('0x52')](_0x1732fd);}})[_0x6c19('0x13')](function(_0x11f801){if(_0x11f801){return _0x11f801?{'count':_0x10cedd,'rows':_0x11f801}:null;}})['then'](respondWithResult(_0x2af2fa,null))[_0x6c19('0x1d')](handleError(_0x2af2fa,null));};exports[_0x6c19('0x53')]=function(_0x394440,_0x415017,_0x5006b2){var _0x46c6f4={};var _0x4b52fa={};var _0x4e869e;var _0x314eb6;return db[_0x6c19('0x2d')]['findOne']({'where':{'id':_0x394440['params']['id']}})[_0x6c19('0x13')](handleEntityNotFound(_0x415017,null))['then'](function(_0x7cee61){if(_0x7cee61){_0x4e869e=_0x7cee61;_0x4b52fa[_0x6c19('0x33')]=_[_0x6c19('0x2f')](db[_0x6c19('0x54')][_0x6c19('0x2e')]);_0x4b52fa[_0x6c19('0x30')]=_['keys'](_0x394440[_0x6c19('0x30')]);_0x4b52fa[_0x6c19('0x32')]=_[_0x6c19('0x35')](_0x4b52fa[_0x6c19('0x33')],_0x4b52fa[_0x6c19('0x30')]);_0x46c6f4['attributes']=_['intersection'](_0x4b52fa['model'],qs[_0x6c19('0x36')](_0x394440[_0x6c19('0x30')][_0x6c19('0x36')]));_0x46c6f4[_0x6c19('0x34')]=_0x46c6f4['attributes'][_0x6c19('0x37')]?_0x46c6f4[_0x6c19('0x34')]:_0x4b52fa['model'];_0x46c6f4[_0x6c19('0x3a')]=qs[_0x6c19('0x3b')](_0x394440[_0x6c19('0x30')][_0x6c19('0x3b')]);_0x46c6f4[_0x6c19('0x3c')]=qs[_0x6c19('0x32')](_['pick'](_0x394440[_0x6c19('0x30')],_0x4b52fa[_0x6c19('0x32')]));if(_0x394440[_0x6c19('0x30')][_0x6c19('0x42')]){_0x46c6f4['where']=_[_0x6c19('0x41')](_0x46c6f4[_0x6c19('0x3c')],{'$or':_['map'](_0x46c6f4[_0x6c19('0x34')],function(_0x247091){var _0xbd4259={};_0xbd4259[_0x247091]={'$like':'%'+_0x394440[_0x6c19('0x30')][_0x6c19('0x42')]+'%'};return _0xbd4259;})});}_0x46c6f4=_[_0x6c19('0x41')]({},_0x46c6f4,_0x394440['options']);return _0x4e869e[_0x6c19('0x53')](_0x46c6f4);}})[_0x6c19('0x13')](function(_0x33f324){if(_0x33f324){_0x314eb6=_0x33f324['length'];if(!_0x394440[_0x6c19('0x30')]['hasOwnProperty'](_0x6c19('0x39'))){_0x46c6f4['limit']=qs[_0x6c19('0x21')](_0x394440[_0x6c19('0x30')][_0x6c19('0x21')]);_0x46c6f4[_0x6c19('0x20')]=qs['offset'](_0x394440[_0x6c19('0x30')][_0x6c19('0x20')]);}return _0x4e869e[_0x6c19('0x53')](_0x46c6f4);}})[_0x6c19('0x13')](function(_0x31eef9){if(_0x31eef9){return _0x31eef9?{'count':_0x314eb6,'rows':_0x31eef9}:null;}})[_0x6c19('0x13')](respondWithResult(_0x415017,null))[_0x6c19('0x1d')](handleError(_0x415017,null));};exports[_0x6c19('0x55')]=function(_0x824e45,_0x29a0f3,_0x3e0a8f){if(_0x824e45[_0x6c19('0x4c')]['id']){delete _0x824e45[_0x6c19('0x4c')]['id'];}return db['FreshdeskConfiguration'][_0x6c19('0x56')]({'where':{'id':_0x824e45[_0x6c19('0x49')]['id']}})['then'](handleEntityNotFound(_0x29a0f3,null))[_0x6c19('0x13')](function(_0x2059b2){if(_0x2059b2){return _0x2059b2[_0x6c19('0x55')](_0x824e45[_0x6c19('0x4c')][_0x6c19('0x57')]||[]);}return null;})[_0x6c19('0x13')](respondWithResult(_0x29a0f3,null))[_0x6c19('0x1d')](handleError(_0x29a0f3,null));};
\ No newline at end of file
index e3681a7..d3fa86f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0d64=['FreshdeskConfiguration','int_freshdesk_configurations','lodash','../../config/logger','api','bluebird','request-promise','exports','define'];(function(_0x5a5ab6,_0x13926b){var _0x4af1ad=function(_0xee558a){while(--_0xee558a){_0x5a5ab6['push'](_0x5a5ab6['shift']());}};_0x4af1ad(++_0x13926b);}(_0x0d64,0x77));var _0x40d6=function(_0x3d3b05,_0x334c57){_0x3d3b05=_0x3d3b05-0x0;var _0x2c6ca3=_0x0d64[_0x3d3b05];return _0x2c6ca3;};'use strict';var _=require(_0x40d6('0x0'));var util=require('util');var logger=require(_0x40d6('0x1'))(_0x40d6('0x2'));var moment=require('moment');var BPromise=require(_0x40d6('0x3'));var rp=require(_0x40d6('0x4'));var attributes=require('./intFreshdeskConfiguration.attributes');module[_0x40d6('0x5')]=function(_0xa5722b,_0x1b6003){return _0xa5722b[_0x40d6('0x6')](_0x40d6('0x7'),attributes,{'tableName':_0x40d6('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x98a7=['../../config/logger','api','moment','bluebird','request-promise','exports','FreshdeskConfiguration','int_freshdesk_configurations','lodash','util'];(function(_0x319e2e,_0x2f727f){var _0x302524=function(_0x5cad9d){while(--_0x5cad9d){_0x319e2e['push'](_0x319e2e['shift']());}};_0x302524(++_0x2f727f);}(_0x98a7,0x9e));var _0x798a=function(_0x2d2297,_0x39649f){_0x2d2297=_0x2d2297-0x0;var _0x4aeab4=_0x98a7[_0x2d2297];return _0x4aeab4;};'use strict';var _=require(_0x798a('0x0'));var util=require(_0x798a('0x1'));var logger=require(_0x798a('0x2'))(_0x798a('0x3'));var moment=require(_0x798a('0x4'));var BPromise=require(_0x798a('0x5'));var rp=require(_0x798a('0x6'));var attributes=require('./intFreshdeskConfiguration.attributes');module[_0x798a('0x7')]=function(_0x3c85b6,_0x4dc381){return _0x3c85b6['define'](_0x798a('0x8'),attributes,{'tableName':_0x798a('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 84e1d10..e93ff53 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x43fe=['lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','request','then','FreshdeskConfiguration,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','catch'];(function(_0xfb461f,_0x2cfbb6){var _0x4f5e8e=function(_0x9561c6){while(--_0x9561c6){_0xfb461f['push'](_0xfb461f['shift']());}};_0x4f5e8e(++_0x2cfbb6);}(_0x43fe,0x12c));var _0xe43f=function(_0x1788b2,_0x1aae5d){_0x1788b2=_0x1788b2-0x0;var _0x305e06=_0x43fe[_0x1788b2];return _0x305e06;};'use strict';var _=require(_0xe43f('0x0'));var util=require(_0xe43f('0x1'));var moment=require(_0xe43f('0x2'));var BPromise=require(_0xe43f('0x3'));var rs=require(_0xe43f('0x4'));var fs=require('fs');var db=require(_0xe43f('0x5'))['db'];var utils=require(_0xe43f('0x6'));var logger=require(_0xe43f('0x7'))('rpc');var config=require('../../config/environment');var jayson=require(_0xe43f('0x8'));var client=jayson[_0xe43f('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x309f12,_0x461188,_0x5168bb){return new BPromise(function(_0x8480fb,_0x537409){return client[_0xe43f('0xa')](_0x309f12,_0x5168bb)[_0xe43f('0xb')](function(_0xa230ba){logger['info'](_0xe43f('0xc'),_0x461188,'request\x20sent');logger[_0xe43f('0xd')]('FreshdeskConfiguration,\x20%s,\x20%s,\x20%s',_0x461188,_0xe43f('0xe'),JSON[_0xe43f('0xf')](_0xa230ba));if(_0xa230ba[_0xe43f('0x10')]){if(_0xa230ba['error'][_0xe43f('0x11')]===0x1f4){logger[_0xe43f('0x10')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x461188,_0xa230ba[_0xe43f('0x10')][_0xe43f('0x12')]);return _0x537409(_0xa230ba[_0xe43f('0x10')][_0xe43f('0x12')]);}logger[_0xe43f('0x10')](_0xe43f('0xc'),_0x461188,_0xa230ba[_0xe43f('0x10')][_0xe43f('0x12')]);return _0x8480fb(_0xa230ba[_0xe43f('0x10')][_0xe43f('0x12')]);}else{logger['info'](_0xe43f('0xc'),_0x461188,_0xe43f('0xe'));_0x8480fb(_0xa230ba['result'][_0xe43f('0x12')]);}})[_0xe43f('0x13')](function(_0x9be2fe){logger[_0xe43f('0x10')](_0xe43f('0xc'),_0x461188,_0x9be2fe);_0x537409(_0x9be2fe);});});}
\ No newline at end of file
+var _0xd7b6=['info','result','catch','lodash','util','randomstring','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','request\x20sent','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','error','code','message','FreshdeskConfiguration,\x20%s,\x20%s'];(function(_0x29d94e,_0xf386d6){var _0x106237=function(_0x327501){while(--_0x327501){_0x29d94e['push'](_0x29d94e['shift']());}};_0x106237(++_0xf386d6);}(_0xd7b6,0xa3));var _0x6d7b=function(_0x32e036,_0x440c8c){_0x32e036=_0x32e036-0x0;var _0x2e868a=_0xd7b6[_0x32e036];return _0x2e868a;};'use strict';var _=require(_0x6d7b('0x0'));var util=require(_0x6d7b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x6d7b('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x6d7b('0x3'));var logger=require(_0x6d7b('0x4'))(_0x6d7b('0x5'));var config=require('../../config/environment');var jayson=require(_0x6d7b('0x6'));var client=jayson[_0x6d7b('0x7')][_0x6d7b('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x4a9247,_0x2fd9b2,_0x446601){return new BPromise(function(_0x679f04,_0x3f7fa4){return client[_0x6d7b('0x9')](_0x4a9247,_0x446601)['then'](function(_0x3eb0d7){logger['info']('FreshdeskConfiguration,\x20%s,\x20%s',_0x2fd9b2,_0x6d7b('0xa'));logger[_0x6d7b('0xb')](_0x6d7b('0xc'),_0x2fd9b2,_0x6d7b('0xa'),JSON['stringify'](_0x3eb0d7));if(_0x3eb0d7[_0x6d7b('0xd')]){if(_0x3eb0d7['error'][_0x6d7b('0xe')]===0x1f4){logger[_0x6d7b('0xd')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x2fd9b2,_0x3eb0d7[_0x6d7b('0xd')][_0x6d7b('0xf')]);return _0x3f7fa4(_0x3eb0d7[_0x6d7b('0xd')][_0x6d7b('0xf')]);}logger[_0x6d7b('0xd')](_0x6d7b('0x10'),_0x2fd9b2,_0x3eb0d7[_0x6d7b('0xd')][_0x6d7b('0xf')]);return _0x679f04(_0x3eb0d7['error'][_0x6d7b('0xf')]);}else{logger[_0x6d7b('0x11')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x2fd9b2,'request\x20sent');_0x679f04(_0x3eb0d7[_0x6d7b('0x12')][_0x6d7b('0xf')]);}})[_0x6d7b('0x13')](function(_0x29252f){logger['error'](_0x6d7b('0x10'),_0x2fd9b2,_0x29252f);_0x3f7fa4(_0x29252f);});});}
\ No newline at end of file
index c31e1fc..b0815b3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb4d4=['isAuthenticated','index','show','post','create','put','/:id','update','delete','destroy','multer','path','express','Router','../../components/interaction/service','./intFreshdeskField.controller','get'];(function(_0x5d9867,_0x5e9030){var _0x7d2118=function(_0x2e5149){while(--_0x2e5149){_0x5d9867['push'](_0x5d9867['shift']());}};_0x7d2118(++_0x5e9030);}(_0xb4d4,0xc5));var _0x4b4d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xb4d4[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x4b4d('0x0'));var util=require('util');var path=require(_0x4b4d('0x1'));var express=require(_0x4b4d('0x2'));var router=express[_0x4b4d('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x4b4d('0x4'));var config=require('../../config/environment');var controller=require(_0x4b4d('0x5'));router[_0x4b4d('0x6')]('/',auth[_0x4b4d('0x7')](),controller[_0x4b4d('0x8')]);router['get']('/:id',auth[_0x4b4d('0x7')](),controller[_0x4b4d('0x9')]);router[_0x4b4d('0xa')]('/',auth[_0x4b4d('0x7')](),controller[_0x4b4d('0xb')]);router[_0x4b4d('0xc')](_0x4b4d('0xd'),auth['isAuthenticated'](),controller[_0x4b4d('0xe')]);router[_0x4b4d('0xf')](_0x4b4d('0xd'),auth[_0x4b4d('0x7')](),controller[_0x4b4d('0x10')]);module['exports']=router;
\ No newline at end of file
+var _0x08bf=['util','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intFreshdeskField.controller','get','isAuthenticated','index','show','post','create','/:id','update','delete','destroy','exports','multer'];(function(_0x4b2cc6,_0x29ef43){var _0x3e0b08=function(_0x3b4131){while(--_0x3b4131){_0x4b2cc6['push'](_0x4b2cc6['shift']());}};_0x3e0b08(++_0x29ef43);}(_0x08bf,0x1af));var _0xf08b=function(_0xcd7c96,_0xea599b){_0xcd7c96=_0xcd7c96-0x0;var _0x343740=_0x08bf[_0xcd7c96];return _0x343740;};'use strict';var multer=require(_0xf08b('0x0'));var util=require(_0xf08b('0x1'));var path=require('path');var express=require(_0xf08b('0x2'));var router=express['Router']();var auth=require(_0xf08b('0x3'));var interaction=require(_0xf08b('0x4'));var config=require(_0xf08b('0x5'));var controller=require(_0xf08b('0x6'));router[_0xf08b('0x7')]('/',auth[_0xf08b('0x8')](),controller[_0xf08b('0x9')]);router['get']('/:id',auth['isAuthenticated'](),controller[_0xf08b('0xa')]);router[_0xf08b('0xb')]('/',auth[_0xf08b('0x8')](),controller[_0xf08b('0xc')]);router['put'](_0xf08b('0xd'),auth[_0xf08b('0x8')](),controller[_0xf08b('0xe')]);router[_0xf08b('0xf')]('/:id',auth[_0xf08b('0x8')](),controller[_0xf08b('0x10')]);module[_0xf08b('0x11')]=router;
\ No newline at end of file
index c5c2f3d..50847a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb91=['string','variable','customVariable','STRING','BOOLEAN','ENUM'];(function(_0x32b598,_0x1e3254){var _0x35fc8e=function(_0x391344){while(--_0x391344){_0x32b598['push'](_0x32b598['shift']());}};_0x35fc8e(++_0x1e3254);}(_0xcb91,0x1a9));var _0x1cb9=function(_0x1f27df,_0x4f1a64){_0x1f27df=_0x1f27df-0x0;var _0x286ee2=_0xcb91[_0x1f27df];return _0x286ee2;};'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
+var _0x0713=['BOOLEAN','ENUM','string','variable','customVariable','keyValue','STRING'];(function(_0x2e58c7,_0x23d092){var _0x26eb00=function(_0x343124){while(--_0x343124){_0x2e58c7['push'](_0x2e58c7['shift']());}};_0x26eb00(++_0x23d092);}(_0x0713,0x1ba));var _0x3071=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0713[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0x3071('0x0')](_0x3071('0x1'),_0x3071('0x2'),_0x3071('0x3'),_0x3071('0x4')),'defaultValue':'string'},'content':{'type':Sequelize[_0x3071('0x5')]},'key':{'type':Sequelize[_0x3071('0x5')]},'keyType':{'type':Sequelize[_0x3071('0x0')](_0x3071('0x1'),_0x3071('0x2'),_0x3071('0x3'))},'keyContent':{'type':Sequelize[_0x3071('0x5')]},'idField':{'type':Sequelize[_0x3071('0x5')]},'nameField':{'type':Sequelize[_0x3071('0x5')]},'customField':{'type':Sequelize[_0x3071('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x3071('0x5')]}};
\ No newline at end of file
index 01cb727..72f2fa9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3266=['limit','Content-Range','save','then','destroy','error','stack','name','index','FreshdeskField','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','length','hasOwnProperty','nolimit','sort','day','add','merge','where','filter','includeAll','include','findAll','rows','show','params','fields','options','find','create','body','catch','update','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','count','offset'];(function(_0x4e6994,_0x1fc889){var _0x33c306=function(_0x281fbf){while(--_0x281fbf){_0x4e6994['push'](_0x4e6994['shift']());}};_0x33c306(++_0x1fc889);}(_0x3266,0x6a));var _0x6326=function(_0x23b655,_0x4feb2b){_0x23b655=_0x23b655-0x0;var _0x364b32=_0x3266[_0x23b655];return _0x364b32;};'use strict';var jsonpatch=require(_0x6326('0x0'));var rp=require(_0x6326('0x1'));var moment=require(_0x6326('0x2'));var BPromise=require(_0x6326('0x3'));var Mustache=require(_0x6326('0x4'));var util=require(_0x6326('0x5'));var path=require(_0x6326('0x6'));var sox=require(_0x6326('0x7'));var csv=require(_0x6326('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x6326('0x9'));var squel=require('squel');var crypto=require(_0x6326('0xa'));var jsforce=require(_0x6326('0xb'));var deskjs=require(_0x6326('0xc'));var toCsv=require('to-csv');var querystring=require(_0x6326('0xd'));var Papa=require('papaparse');var qs=require(_0x6326('0xe'));var logger=require(_0x6326('0xf'))(_0x6326('0x10'));var utils=require(_0x6326('0x11'));var config=require(_0x6326('0x12'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1b45a7,_0x464a36){_0x464a36=_0x464a36||0xcc;return function(_0x3590ab){if(_0x3590ab){return _0x1b45a7[_0x6326('0x13')](_0x464a36);}return _0x1b45a7[_0x6326('0x14')](_0x464a36)[_0x6326('0x15')]();};}function respondWithResult(_0x1ba67d,_0x77c4e){_0x77c4e=_0x77c4e||0xc8;return function(_0x40a68a){if(_0x40a68a){return _0x1ba67d[_0x6326('0x14')](_0x77c4e)['json'](_0x40a68a);}};}function respondWithFilteredResult(_0x5381d0,_0x301f34){return function(_0x136946){if(_0x136946){var _0x591b81=_0x136946[_0x6326('0x16')],_0x425878=_0x301f34[_0x6326('0x17')],_0x4caef3=_0x301f34[_0x6326('0x17')]+_0x301f34[_0x6326('0x18')],_0x2d2d9b;if(_0x4caef3>=_0x591b81){_0x4caef3=_0x591b81;_0x2d2d9b=0xc8;}else{_0x2d2d9b=0xce;}_0x5381d0[_0x6326('0x14')](_0x2d2d9b);return _0x5381d0['set'](_0x6326('0x19'),_0x425878+'-'+_0x4caef3+'/'+_0x591b81)['json'](_0x136946);}return null;};}function patchUpdates(_0x5945ee){return function(_0x55dd9f){try{jsonpatch['apply'](_0x55dd9f,_0x5945ee,!![]);}catch(_0x5d402d){return BPromise['reject'](_0x5d402d);}return _0x55dd9f[_0x6326('0x1a')]();};}function saveUpdates(_0x1f4c11,_0x2be78e){return function(_0x556c4e){if(_0x556c4e){return _0x556c4e['update'](_0x1f4c11)[_0x6326('0x1b')](function(_0x42319c){return _0x42319c;});}return null;};}function removeEntity(_0x272b5c,_0x3db834){return function(_0x3c08db){if(_0x3c08db){return _0x3c08db[_0x6326('0x1c')]()[_0x6326('0x1b')](function(){_0x272b5c['status'](0xcc)[_0x6326('0x15')]();});}};}function handleEntityNotFound(_0x549f07,_0x3c5583){return function(_0x3c6cfa){if(!_0x3c6cfa){_0x549f07[_0x6326('0x13')](0x194);}return _0x3c6cfa;};}function handleError(_0x24fb78,_0x43cdfc){_0x43cdfc=_0x43cdfc||0x1f4;return function(_0x39fff1){logger[_0x6326('0x1d')](_0x39fff1[_0x6326('0x1e')]);if(_0x39fff1[_0x6326('0x1f')]){delete _0x39fff1[_0x6326('0x1f')];}_0x24fb78[_0x6326('0x14')](_0x43cdfc)['send'](_0x39fff1);};}exports[_0x6326('0x20')]=function(_0x325cfd,_0x575701){var _0x4e272b={},_0x4d28fd={},_0x405474={'count':0x0,'rows':[]};var _0x4dae28=db[_0x6326('0x21')][_0x6326('0x22')];_0x4d28fd['model']=_[_0x6326('0x23')](_0x4dae28);var _0x21ec69={'dateStart':_0x325cfd[_0x6326('0x24')][_0x6326('0x25')],'dateEnd':_0x325cfd[_0x6326('0x24')][_0x6326('0x26')]};delete _0x325cfd[_0x6326('0x24')][_0x6326('0x25')];delete _0x325cfd[_0x6326('0x24')][_0x6326('0x26')];_0x4d28fd[_0x6326('0x24')]=_[_0x6326('0x23')](_0x325cfd[_0x6326('0x24')]);_0x4d28fd[_0x6326('0x27')]=_[_0x6326('0x28')](_0x4d28fd[_0x6326('0x29')],_0x4d28fd['query']);_0x4e272b[_0x6326('0x2a')]=_[_0x6326('0x28')](_0x4d28fd[_0x6326('0x29')],qs['fields'](_0x325cfd[_0x6326('0x24')]['fields']));_0x4e272b['attributes']=_0x4e272b[_0x6326('0x2a')][_0x6326('0x2b')]?_0x4e272b[_0x6326('0x2a')]:_0x4d28fd[_0x6326('0x29')];if(!_0x325cfd[_0x6326('0x24')][_0x6326('0x2c')](_0x6326('0x2d'))){_0x4e272b[_0x6326('0x18')]=qs[_0x6326('0x18')](_0x325cfd[_0x6326('0x24')][_0x6326('0x18')]);_0x4e272b[_0x6326('0x17')]=qs['offset'](_0x325cfd[_0x6326('0x24')][_0x6326('0x17')]);}_0x4e272b['order']=qs[_0x6326('0x2e')](_0x325cfd[_0x6326('0x24')][_0x6326('0x2e')]);_0x4e272b['where']=qs[_0x6326('0x27')](_['pick'](_0x325cfd['query'],_0x4d28fd[_0x6326('0x27')]));if(_0x21ec69[_0x6326('0x25')]){if(_0x21ec69[_0x6326('0x26')]){_0x21ec69['dateEnd']=moment(_0x21ec69[_0x6326('0x26')])['add'](0x1,_0x6326('0x2f'));}else{_0x21ec69['dateEnd']=moment(_0x21ec69[_0x6326('0x25')])[_0x6326('0x30')](0x1,_0x6326('0x2f'));}_[_0x6326('0x31')](_0x4e272b[_0x6326('0x32')],{'createdAt':{'$gte':_0x21ec69[_0x6326('0x25')],'$lte':_0x21ec69['dateEnd']}});}if(_0x325cfd[_0x6326('0x24')][_0x6326('0x33')]){_0x4e272b['where']=_[_0x6326('0x31')](_0x4e272b['where'],{'$or':_['map'](_0x4e272b[_0x6326('0x2a')],function(_0x1f8dcf){var _0x3c170b={};_0x3c170b[_0x1f8dcf]={'$like':'%'+_0x325cfd[_0x6326('0x24')][_0x6326('0x33')]+'%'};return _0x3c170b;})});}_0x4e272b=_[_0x6326('0x31')]({},_0x4e272b,_0x325cfd['options']);var _0x485bed={'where':_0x4e272b[_0x6326('0x32')]};return db['FreshdeskField'][_0x6326('0x16')](_0x485bed)['then'](function(_0x282f33){_0x405474[_0x6326('0x16')]=_0x282f33;if(_0x325cfd[_0x6326('0x24')][_0x6326('0x34')]){_0x4e272b[_0x6326('0x35')]=[{'all':!![]}];}return db[_0x6326('0x21')][_0x6326('0x36')](_0x4e272b);})[_0x6326('0x1b')](function(_0x3b089b){_0x405474[_0x6326('0x37')]=_0x3b089b;return _0x405474;})[_0x6326('0x1b')](respondWithFilteredResult(_0x575701,_0x4e272b))['catch'](handleError(_0x575701,null));};exports[_0x6326('0x38')]=function(_0x5ce03a,_0x29f2fd){var _0x1d9d4c={'raw':!![],'where':{'id':_0x5ce03a[_0x6326('0x39')]['id']}},_0x16fc33={};_0x16fc33['model']=_[_0x6326('0x23')](db[_0x6326('0x21')]['rawAttributes']);_0x16fc33[_0x6326('0x24')]=_[_0x6326('0x23')](_0x5ce03a[_0x6326('0x24')]);_0x16fc33[_0x6326('0x27')]=_['intersection'](_0x16fc33[_0x6326('0x29')],_0x16fc33[_0x6326('0x24')]);_0x1d9d4c[_0x6326('0x2a')]=_[_0x6326('0x28')](_0x16fc33[_0x6326('0x29')],qs[_0x6326('0x3a')](_0x5ce03a[_0x6326('0x24')]['fields']));_0x1d9d4c[_0x6326('0x2a')]=_0x1d9d4c[_0x6326('0x2a')][_0x6326('0x2b')]?_0x1d9d4c[_0x6326('0x2a')]:_0x16fc33['model'];if(_0x5ce03a[_0x6326('0x24')]['includeAll']){_0x1d9d4c[_0x6326('0x35')]=[{'all':!![]}];}_0x1d9d4c=_[_0x6326('0x31')]({},_0x1d9d4c,_0x5ce03a[_0x6326('0x3b')]);return db[_0x6326('0x21')][_0x6326('0x3c')](_0x1d9d4c)['then'](handleEntityNotFound(_0x29f2fd,null))[_0x6326('0x1b')](respondWithResult(_0x29f2fd,null))['catch'](handleError(_0x29f2fd,null));};exports['create']=function(_0x2bca12,_0x44cf9d){return db['FreshdeskField'][_0x6326('0x3d')](_0x2bca12[_0x6326('0x3e')],{})[_0x6326('0x1b')](respondWithResult(_0x44cf9d,0xc9))[_0x6326('0x3f')](handleError(_0x44cf9d,null));};exports[_0x6326('0x40')]=function(_0x4f8dc0,_0x4af0ee){if(_0x4f8dc0[_0x6326('0x3e')]['id']){delete _0x4f8dc0[_0x6326('0x3e')]['id'];}return db[_0x6326('0x21')][_0x6326('0x3c')]({'where':{'id':_0x4f8dc0[_0x6326('0x39')]['id']}})[_0x6326('0x1b')](handleEntityNotFound(_0x4af0ee,null))[_0x6326('0x1b')](saveUpdates(_0x4f8dc0['body'],null))[_0x6326('0x1b')](respondWithResult(_0x4af0ee,null))[_0x6326('0x3f')](handleError(_0x4af0ee,null));};exports[_0x6326('0x1c')]=function(_0x3e7674,_0x1b5e9a){return db['FreshdeskField'][_0x6326('0x3c')]({'where':{'id':_0x3e7674['params']['id']}})[_0x6326('0x1b')](handleEntityNotFound(_0x1b5e9a,null))[_0x6326('0x1b')](removeEntity(_0x1b5e9a,null))['catch'](handleError(_0x1b5e9a,null));};
\ No newline at end of file
+var _0x47c5=['body','destroy','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','error','stack','name','send','index','rawAttributes','keys','query','dateEnd','dateStart','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','add','day','merge','map','filter','FreshdeskField','includeAll','include','findAll','show','params','options','find','catch','create'];(function(_0x35aa0c,_0x58bb11){var _0x1d54a1=function(_0x142cbc){while(--_0x142cbc){_0x35aa0c['push'](_0x35aa0c['shift']());}};_0x1d54a1(++_0x58bb11);}(_0x47c5,0x165));var _0x547c=function(_0x4e2fe3,_0x15fb77){_0x4e2fe3=_0x4e2fe3-0x0;var _0x4f9d24=_0x47c5[_0x4e2fe3];return _0x4f9d24;};'use strict';var jsonpatch=require(_0x547c('0x0'));var rp=require(_0x547c('0x1'));var moment=require(_0x547c('0x2'));var BPromise=require(_0x547c('0x3'));var Mustache=require(_0x547c('0x4'));var util=require(_0x547c('0x5'));var path=require('path');var sox=require(_0x547c('0x6'));var csv=require(_0x547c('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x547c('0x8'));var squel=require(_0x547c('0x9'));var crypto=require('crypto');var jsforce=require(_0x547c('0xa'));var deskjs=require(_0x547c('0xb'));var toCsv=require(_0x547c('0x7'));var querystring=require(_0x547c('0xc'));var Papa=require(_0x547c('0xd'));var qs=require(_0x547c('0xe'));var logger=require(_0x547c('0xf'))(_0x547c('0x10'));var utils=require(_0x547c('0x11'));var config=require(_0x547c('0x12'));var db=require(_0x547c('0x13'))['db'];function respondWithStatusCode(_0x2c54e,_0x111457){_0x111457=_0x111457||0xcc;return function(_0x2455e9){if(_0x2455e9){return _0x2c54e[_0x547c('0x14')](_0x111457);}return _0x2c54e[_0x547c('0x15')](_0x111457)[_0x547c('0x16')]();};}function respondWithResult(_0x549bf0,_0x13a103){_0x13a103=_0x13a103||0xc8;return function(_0x39dce7){if(_0x39dce7){return _0x549bf0['status'](_0x13a103)[_0x547c('0x17')](_0x39dce7);}};}function respondWithFilteredResult(_0x201d95,_0x171ae4){return function(_0x5016e9){if(_0x5016e9){var _0x392a35=_0x5016e9[_0x547c('0x18')],_0x150317=_0x171ae4[_0x547c('0x19')],_0x2bc289=_0x171ae4[_0x547c('0x19')]+_0x171ae4[_0x547c('0x1a')],_0xa3c7b0;if(_0x2bc289>=_0x392a35){_0x2bc289=_0x392a35;_0xa3c7b0=0xc8;}else{_0xa3c7b0=0xce;}_0x201d95[_0x547c('0x15')](_0xa3c7b0);return _0x201d95[_0x547c('0x1b')](_0x547c('0x1c'),_0x150317+'-'+_0x2bc289+'/'+_0x392a35)[_0x547c('0x17')](_0x5016e9);}return null;};}function patchUpdates(_0x39498d){return function(_0x19d3dd){try{jsonpatch['apply'](_0x19d3dd,_0x39498d,!![]);}catch(_0x4a6c57){return BPromise[_0x547c('0x1d')](_0x4a6c57);}return _0x19d3dd[_0x547c('0x1e')]();};}function saveUpdates(_0xeb059e,_0x4a8901){return function(_0x248aca){if(_0x248aca){return _0x248aca[_0x547c('0x1f')](_0xeb059e)[_0x547c('0x20')](function(_0x58ddc9){return _0x58ddc9;});}return null;};}function removeEntity(_0x4511d3,_0x41149f){return function(_0x496c38){if(_0x496c38){return _0x496c38['destroy']()[_0x547c('0x20')](function(){_0x4511d3[_0x547c('0x15')](0xcc)['end']();});}};}function handleEntityNotFound(_0x11e709,_0x16a3a6){return function(_0x592e46){if(!_0x592e46){_0x11e709[_0x547c('0x14')](0x194);}return _0x592e46;};}function handleError(_0x17fd97,_0x436e67){_0x436e67=_0x436e67||0x1f4;return function(_0x4c718c){logger[_0x547c('0x21')](_0x4c718c[_0x547c('0x22')]);if(_0x4c718c[_0x547c('0x23')]){delete _0x4c718c[_0x547c('0x23')];}_0x17fd97[_0x547c('0x15')](_0x436e67)[_0x547c('0x24')](_0x4c718c);};}exports[_0x547c('0x25')]=function(_0x17fa33,_0x507895){var _0x39c5f9={},_0x4c66b9={},_0x5b05f2={'count':0x0,'rows':[]};var _0x4855fd=db['FreshdeskField'][_0x547c('0x26')];_0x4c66b9['model']=_[_0x547c('0x27')](_0x4855fd);var _0x5729b0={'dateStart':_0x17fa33[_0x547c('0x28')]['dateStart'],'dateEnd':_0x17fa33[_0x547c('0x28')][_0x547c('0x29')]};delete _0x17fa33[_0x547c('0x28')][_0x547c('0x2a')];delete _0x17fa33[_0x547c('0x28')]['dateEnd'];_0x4c66b9['query']=_[_0x547c('0x27')](_0x17fa33['query']);_0x4c66b9[_0x547c('0x2b')]=_[_0x547c('0x2c')](_0x4c66b9[_0x547c('0x2d')],_0x4c66b9[_0x547c('0x28')]);_0x39c5f9[_0x547c('0x2e')]=_[_0x547c('0x2c')](_0x4c66b9[_0x547c('0x2d')],qs['fields'](_0x17fa33['query'][_0x547c('0x2f')]));_0x39c5f9[_0x547c('0x2e')]=_0x39c5f9[_0x547c('0x2e')][_0x547c('0x30')]?_0x39c5f9[_0x547c('0x2e')]:_0x4c66b9[_0x547c('0x2d')];if(!_0x17fa33[_0x547c('0x28')][_0x547c('0x31')](_0x547c('0x32'))){_0x39c5f9[_0x547c('0x1a')]=qs[_0x547c('0x1a')](_0x17fa33[_0x547c('0x28')][_0x547c('0x1a')]);_0x39c5f9[_0x547c('0x19')]=qs['offset'](_0x17fa33[_0x547c('0x28')]['offset']);}_0x39c5f9['order']=qs['sort'](_0x17fa33[_0x547c('0x28')][_0x547c('0x33')]);_0x39c5f9[_0x547c('0x34')]=qs[_0x547c('0x2b')](_[_0x547c('0x35')](_0x17fa33[_0x547c('0x28')],_0x4c66b9['filters']));if(_0x5729b0['dateStart']){if(_0x5729b0['dateEnd']){_0x5729b0[_0x547c('0x29')]=moment(_0x5729b0[_0x547c('0x29')])[_0x547c('0x36')](0x1,_0x547c('0x37'));}else{_0x5729b0[_0x547c('0x29')]=moment(_0x5729b0[_0x547c('0x2a')])['add'](0x1,_0x547c('0x37'));}_['merge'](_0x39c5f9[_0x547c('0x34')],{'createdAt':{'$gte':_0x5729b0[_0x547c('0x2a')],'$lte':_0x5729b0['dateEnd']}});}if(_0x17fa33[_0x547c('0x28')]['filter']){_0x39c5f9['where']=_[_0x547c('0x38')](_0x39c5f9[_0x547c('0x34')],{'$or':_[_0x547c('0x39')](_0x39c5f9[_0x547c('0x2e')],function(_0x4c36b9){var _0x52b962={};_0x52b962[_0x4c36b9]={'$like':'%'+_0x17fa33[_0x547c('0x28')][_0x547c('0x3a')]+'%'};return _0x52b962;})});}_0x39c5f9=_[_0x547c('0x38')]({},_0x39c5f9,_0x17fa33['options']);var _0x3886ae={'where':_0x39c5f9[_0x547c('0x34')]};return db[_0x547c('0x3b')]['count'](_0x3886ae)[_0x547c('0x20')](function(_0x3a6a0a){_0x5b05f2[_0x547c('0x18')]=_0x3a6a0a;if(_0x17fa33['query'][_0x547c('0x3c')]){_0x39c5f9[_0x547c('0x3d')]=[{'all':!![]}];}return db['FreshdeskField'][_0x547c('0x3e')](_0x39c5f9);})[_0x547c('0x20')](function(_0x9c3cb2){_0x5b05f2['rows']=_0x9c3cb2;return _0x5b05f2;})[_0x547c('0x20')](respondWithFilteredResult(_0x507895,_0x39c5f9))['catch'](handleError(_0x507895,null));};exports[_0x547c('0x3f')]=function(_0x5393a2,_0xb86f5f){var _0x414b9d={'raw':!![],'where':{'id':_0x5393a2[_0x547c('0x40')]['id']}},_0x3d37d7={};_0x3d37d7[_0x547c('0x2d')]=_[_0x547c('0x27')](db['FreshdeskField']['rawAttributes']);_0x3d37d7[_0x547c('0x28')]=_[_0x547c('0x27')](_0x5393a2[_0x547c('0x28')]);_0x3d37d7['filters']=_[_0x547c('0x2c')](_0x3d37d7[_0x547c('0x2d')],_0x3d37d7[_0x547c('0x28')]);_0x414b9d[_0x547c('0x2e')]=_[_0x547c('0x2c')](_0x3d37d7[_0x547c('0x2d')],qs['fields'](_0x5393a2[_0x547c('0x28')][_0x547c('0x2f')]));_0x414b9d[_0x547c('0x2e')]=_0x414b9d['attributes'][_0x547c('0x30')]?_0x414b9d[_0x547c('0x2e')]:_0x3d37d7[_0x547c('0x2d')];if(_0x5393a2[_0x547c('0x28')]['includeAll']){_0x414b9d[_0x547c('0x3d')]=[{'all':!![]}];}_0x414b9d=_['merge']({},_0x414b9d,_0x5393a2[_0x547c('0x41')]);return db['FreshdeskField'][_0x547c('0x42')](_0x414b9d)[_0x547c('0x20')](handleEntityNotFound(_0xb86f5f,null))['then'](respondWithResult(_0xb86f5f,null))[_0x547c('0x43')](handleError(_0xb86f5f,null));};exports[_0x547c('0x44')]=function(_0xa005cc,_0x1ddf30){return db['FreshdeskField'][_0x547c('0x44')](_0xa005cc['body'],{})['then'](respondWithResult(_0x1ddf30,0xc9))[_0x547c('0x43')](handleError(_0x1ddf30,null));};exports[_0x547c('0x1f')]=function(_0x3e3f52,_0x11a878){if(_0x3e3f52[_0x547c('0x45')]['id']){delete _0x3e3f52[_0x547c('0x45')]['id'];}return db[_0x547c('0x3b')][_0x547c('0x42')]({'where':{'id':_0x3e3f52[_0x547c('0x40')]['id']}})[_0x547c('0x20')](handleEntityNotFound(_0x11a878,null))[_0x547c('0x20')](saveUpdates(_0x3e3f52[_0x547c('0x45')],null))['then'](respondWithResult(_0x11a878,null))['catch'](handleError(_0x11a878,null));};exports[_0x547c('0x46')]=function(_0x21ea26,_0x48de6e){return db[_0x547c('0x3b')][_0x547c('0x42')]({'where':{'id':_0x21ea26[_0x547c('0x40')]['id']}})[_0x547c('0x20')](handleEntityNotFound(_0x48de6e,null))[_0x547c('0x20')](removeEntity(_0x48de6e,null))[_0x547c('0x43')](handleError(_0x48de6e,null));};
\ No newline at end of file
index 3b89d8c..7e8e8fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x937d=['./intFreshdeskField.attributes','exports','define','FreshdeskField','int_freshdesk_fields','lodash','moment','bluebird','request-promise'];(function(_0x1fc131,_0x301a42){var _0x253679=function(_0x214437){while(--_0x214437){_0x1fc131['push'](_0x1fc131['shift']());}};_0x253679(++_0x301a42);}(_0x937d,0x1f4));var _0xd937=function(_0x2e766c,_0x6a9e45){_0x2e766c=_0x2e766c-0x0;var _0x31e61b=_0x937d[_0x2e766c];return _0x31e61b;};'use strict';var _=require(_0xd937('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0xd937('0x1'));var BPromise=require(_0xd937('0x2'));var rp=require(_0xd937('0x3'));var attributes=require(_0xd937('0x4'));module[_0xd937('0x5')]=function(_0x2620ce,_0x4b2a8b){return _0x2620ce[_0xd937('0x6')](_0xd937('0x7'),attributes,{'tableName':_0xd937('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfb11=['FreshdeskField','int_freshdesk_fields','lodash','../../config/logger','api','bluebird','./intFreshdeskField.attributes'];(function(_0x362ffe,_0xf6d4c1){var _0x1071e1=function(_0x4ca807){while(--_0x4ca807){_0x362ffe['push'](_0x362ffe['shift']());}};_0x1071e1(++_0xf6d4c1);}(_0xfb11,0x1ad));var _0x1fb1=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0xfb11[_0x1facfa];return _0x9ec701;};'use strict';var _=require(_0x1fb1('0x0'));var util=require('util');var logger=require(_0x1fb1('0x1'))(_0x1fb1('0x2'));var moment=require('moment');var BPromise=require(_0x1fb1('0x3'));var rp=require('request-promise');var attributes=require(_0x1fb1('0x4'));module['exports']=function(_0x190f74,_0x2ae20f){return _0x190f74['define'](_0x1fb1('0x5'),attributes,{'tableName':_0x1fb1('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index febca64..0982e2c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf9c3=['info','debug','stringify','error','code','message','FreshdeskField,\x20%s,\x20%s','request\x20sent','result','catch','lodash','util','bluebird','../../mysqldb','../../config/utils','../../config/environment','client','request'];(function(_0xd2cfa2,_0x229078){var _0x1a5ae0=function(_0x3a818f){while(--_0x3a818f){_0xd2cfa2['push'](_0xd2cfa2['shift']());}};_0x1a5ae0(++_0x229078);}(_0xf9c3,0x14e));var _0x3f9c=function(_0x342465,_0x3aa51b){_0x342465=_0x342465-0x0;var _0x4a4da7=_0xf9c3[_0x342465];return _0x4a4da7;};'use strict';var _=require(_0x3f9c('0x0'));var util=require(_0x3f9c('0x1'));var moment=require('moment');var BPromise=require(_0x3f9c('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x3f9c('0x3'))['db'];var utils=require(_0x3f9c('0x4'));var logger=require('../../config/logger')('rpc');var config=require(_0x3f9c('0x5'));var jayson=require('jayson/promise');var client=jayson[_0x3f9c('0x6')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4b90b8,_0x2590bd,_0x51923d){return new BPromise(function(_0x20a5e4,_0xf1756b){return client[_0x3f9c('0x7')](_0x4b90b8,_0x51923d)['then'](function(_0x4293ab){logger[_0x3f9c('0x8')]('FreshdeskField,\x20%s,\x20%s',_0x2590bd,'request\x20sent');logger[_0x3f9c('0x9')]('FreshdeskField,\x20%s,\x20%s,\x20%s',_0x2590bd,'request\x20sent',JSON[_0x3f9c('0xa')](_0x4293ab));if(_0x4293ab['error']){if(_0x4293ab[_0x3f9c('0xb')][_0x3f9c('0xc')]===0x1f4){logger[_0x3f9c('0xb')]('FreshdeskField,\x20%s,\x20%s',_0x2590bd,_0x4293ab['error']['message']);return _0xf1756b(_0x4293ab[_0x3f9c('0xb')][_0x3f9c('0xd')]);}logger['error'](_0x3f9c('0xe'),_0x2590bd,_0x4293ab[_0x3f9c('0xb')][_0x3f9c('0xd')]);return _0x20a5e4(_0x4293ab['error'][_0x3f9c('0xd')]);}else{logger[_0x3f9c('0x8')](_0x3f9c('0xe'),_0x2590bd,_0x3f9c('0xf'));_0x20a5e4(_0x4293ab[_0x3f9c('0x10')]['message']);}})[_0x3f9c('0x11')](function(_0x1402ef){logger[_0x3f9c('0xb')](_0x3f9c('0xe'),_0x2590bd,_0x1402ef);_0xf1756b(_0x1402ef);});});}
\ No newline at end of file
+var _0x98f5=['request\x20sent','stringify','error','code','message','result','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','info','FreshdeskField,\x20%s,\x20%s'];(function(_0xefd519,_0xc62635){var _0x4bb882=function(_0x37e0a1){while(--_0x37e0a1){_0xefd519['push'](_0xefd519['shift']());}};_0x4bb882(++_0xc62635);}(_0x98f5,0x16e));var _0x598f=function(_0x27c75e,_0x37ff77){_0x27c75e=_0x27c75e-0x0;var _0x132f76=_0x98f5[_0x27c75e];return _0x132f76;};'use strict';var _=require('lodash');var util=require(_0x598f('0x0'));var moment=require(_0x598f('0x1'));var BPromise=require(_0x598f('0x2'));var rs=require(_0x598f('0x3'));var fs=require('fs');var db=require(_0x598f('0x4'))['db'];var utils=require(_0x598f('0x5'));var logger=require(_0x598f('0x6'))('rpc');var config=require(_0x598f('0x7'));var jayson=require(_0x598f('0x8'));var client=jayson['client'][_0x598f('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x595b7d,_0x3e8872,_0x4e681c){return new BPromise(function(_0x13cf06,_0x12ae91){return client['request'](_0x595b7d,_0x4e681c)['then'](function(_0x4db8e0){logger[_0x598f('0xa')](_0x598f('0xb'),_0x3e8872,_0x598f('0xc'));logger['debug']('FreshdeskField,\x20%s,\x20%s,\x20%s',_0x3e8872,_0x598f('0xc'),JSON[_0x598f('0xd')](_0x4db8e0));if(_0x4db8e0[_0x598f('0xe')]){if(_0x4db8e0['error'][_0x598f('0xf')]===0x1f4){logger[_0x598f('0xe')](_0x598f('0xb'),_0x3e8872,_0x4db8e0[_0x598f('0xe')][_0x598f('0x10')]);return _0x12ae91(_0x4db8e0[_0x598f('0xe')][_0x598f('0x10')]);}logger[_0x598f('0xe')](_0x598f('0xb'),_0x3e8872,_0x4db8e0[_0x598f('0xe')][_0x598f('0x10')]);return _0x13cf06(_0x4db8e0[_0x598f('0xe')][_0x598f('0x10')]);}else{logger[_0x598f('0xa')]('FreshdeskField,\x20%s,\x20%s',_0x3e8872,'request\x20sent');_0x13cf06(_0x4db8e0[_0x598f('0x11')][_0x598f('0x10')]);}})['catch'](function(_0x32be88){logger[_0x598f('0xe')](_0x598f('0xb'),_0x3e8872,_0x32be88);_0x12ae91(_0x32be88);});});}
\ No newline at end of file
index 637f68e..dbf89c5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4159=['post','addConfiguration','put','update','delete','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSalesforceAccount.controller','isAuthenticated','index','get','/:id','show','/:id/configurations','getConfigurations','/:id/fields','getFields','create'];(function(_0x13342f,_0x3d6303){var _0x2fc1fc=function(_0x2d991f){while(--_0x2d991f){_0x13342f['push'](_0x13342f['shift']());}};_0x2fc1fc(++_0x3d6303);}(_0x4159,0x7e));var _0x9415=function(_0x519a53,_0x2015be){_0x519a53=_0x519a53-0x0;var _0x476e25=_0x4159[_0x519a53];return _0x476e25;};'use strict';var multer=require(_0x9415('0x0'));var util=require('util');var path=require(_0x9415('0x1'));var express=require(_0x9415('0x2'));var router=express[_0x9415('0x3')]();var auth=require(_0x9415('0x4'));var interaction=require(_0x9415('0x5'));var config=require(_0x9415('0x6'));var controller=require(_0x9415('0x7'));router['get']('/',auth[_0x9415('0x8')](),controller[_0x9415('0x9')]);router[_0x9415('0xa')](_0x9415('0xb'),auth[_0x9415('0x8')](),controller[_0x9415('0xc')]);router[_0x9415('0xa')](_0x9415('0xd'),auth[_0x9415('0x8')](),controller[_0x9415('0xe')]);router[_0x9415('0xa')](_0x9415('0xf'),auth[_0x9415('0x8')](),controller[_0x9415('0x10')]);router['post']('/',auth[_0x9415('0x8')](),controller[_0x9415('0x11')]);router[_0x9415('0x12')](_0x9415('0xd'),auth[_0x9415('0x8')](),controller[_0x9415('0x13')]);router[_0x9415('0x14')](_0x9415('0xb'),auth[_0x9415('0x8')](),controller[_0x9415('0x15')]);router[_0x9415('0x16')](_0x9415('0xb'),auth[_0x9415('0x8')](),controller['destroy']);module[_0x9415('0x17')]=router;
\ No newline at end of file
+var _0xd094=['isAuthenticated','/:id/configurations','getConfigurations','post','addConfiguration','/:id','update','delete','exports','multer','util','path','Router','../../config/environment','./intSalesforceAccount.controller','get','index'];(function(_0x52e0ee,_0x52f7c1){var _0x32534c=function(_0x535d65){while(--_0x535d65){_0x52e0ee['push'](_0x52e0ee['shift']());}};_0x32534c(++_0x52f7c1);}(_0xd094,0xb3));var _0x4d09=function(_0x3845c6,_0x412736){_0x3845c6=_0x3845c6-0x0;var _0x26b8d6=_0xd094[_0x3845c6];return _0x26b8d6;};'use strict';var multer=require(_0x4d09('0x0'));var util=require(_0x4d09('0x1'));var path=require(_0x4d09('0x2'));var express=require('express');var router=express[_0x4d09('0x3')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x4d09('0x4'));var controller=require(_0x4d09('0x5'));router[_0x4d09('0x6')]('/',auth['isAuthenticated'](),controller[_0x4d09('0x7')]);router[_0x4d09('0x6')]('/:id',auth[_0x4d09('0x8')](),controller['show']);router[_0x4d09('0x6')](_0x4d09('0x9'),auth['isAuthenticated'](),controller[_0x4d09('0xa')]);router[_0x4d09('0x6')]('/:id/fields',auth[_0x4d09('0x8')](),controller['getFields']);router[_0x4d09('0xb')]('/',auth[_0x4d09('0x8')](),controller['create']);router['post'](_0x4d09('0x9'),auth['isAuthenticated'](),controller[_0x4d09('0xc')]);router['put'](_0x4d09('0xd'),auth[_0x4d09('0x8')](),controller[_0x4d09('0xe')]);router[_0x4d09('0xf')](_0x4d09('0xd'),auth[_0x4d09('0x8')](),controller['destroy']);module[_0x4d09('0x10')]=router;
\ No newline at end of file
index 175c358..70b9eb9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x22e7=['newTab','integrationTab','sequelize','exports','STRING'];(function(_0x3bf83f,_0x181cac){var _0x22c4a9=function(_0xb3ff0d){while(--_0xb3ff0d){_0x3bf83f['push'](_0x3bf83f['shift']());}};_0x22c4a9(++_0x181cac);}(_0x22e7,0x9d));var _0x722e=function(_0x2e5111,_0x386f38){_0x2e5111=_0x2e5111-0x0;var _0x3b714e=_0x22e7[_0x2e5111];return _0x3b714e;};'use strict';var Sequelize=require(_0x722e('0x0'));module[_0x722e('0x1')]={'name':{'type':Sequelize[_0x722e('0x2')]},'description':{'type':Sequelize[_0x722e('0x2')]},'username':{'type':Sequelize[_0x722e('0x2')],'unique':'username'},'remoteUri':{'type':Sequelize[_0x722e('0x2')]},'password':{'type':Sequelize[_0x722e('0x2')]},'clientId':{'type':Sequelize[_0x722e('0x2')]},'clientSecret':{'type':Sequelize[_0x722e('0x2')]},'securityToken':{'type':Sequelize[_0x722e('0x2')]},'serverUrl':{'type':Sequelize[_0x722e('0x2')]},'type':{'type':Sequelize['ENUM']('integrationTab',_0x722e('0x3')),'defaultValue':_0x722e('0x4')}};
\ No newline at end of file
+var _0xd33a=['STRING','username','integrationTab','newTab','exports'];(function(_0x3013b0,_0x5b1e79){var _0x311af0=function(_0x2c50f9){while(--_0x2c50f9){_0x3013b0['push'](_0x3013b0['shift']());}};_0x311af0(++_0x5b1e79);}(_0xd33a,0x7c));var _0xad33=function(_0x39f679,_0x1095a9){_0x39f679=_0x39f679-0x0;var _0x28a9f8=_0xd33a[_0x39f679];return _0x28a9f8;};'use strict';var Sequelize=require('sequelize');module[_0xad33('0x0')]={'name':{'type':Sequelize[_0xad33('0x1')]},'description':{'type':Sequelize[_0xad33('0x1')]},'username':{'type':Sequelize['STRING'],'unique':_0xad33('0x2')},'remoteUri':{'type':Sequelize[_0xad33('0x1')]},'password':{'type':Sequelize[_0xad33('0x1')]},'clientId':{'type':Sequelize['STRING']},'clientSecret':{'type':Sequelize[_0xad33('0x1')]},'securityToken':{'type':Sequelize[_0xad33('0x1')]},'serverUrl':{'type':Sequelize['STRING']},'type':{'type':Sequelize['ENUM'](_0xad33('0x3'),_0xad33('0x4')),'defaultValue':_0xad33('0x3')}};
\ No newline at end of file
index deb0543..f2a4e9f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb4c3=['sox','to-csv','squel','crypto','jsforce','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','jayson/promise','http','info','SalesforceAccount,\x20%s,\x20%s','SalesforceAccount,\x20%s,\x20%s,\x20%s','error','message','request\x20sent','result','sendStatus','end','json','count','offset','set','apply','reject','update','then','destroy','stack','name','status','send','SalesforceAccount','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','limit','order','sort','where','add','day','merge','map','filter','includeAll','include','catch','show','params','rawAttributes','options','find','create','body','getConfigurations','findOne','SalesforceConfiguration','addConfiguration','AccountId','Subjects','getSubjects','channel','type','getDescriptions','SalesforceField','Descriptions','remoteUri','clientId','username','securityToken','Connection','clientSecret','login','concat','sobject','Task','describe','CallDisposition','CallDurationInSeconds','CallObject','CallType','IsArchived','Status','Type','remove','label','custom','picklistValues','value','stringify','test','Wrong\x20credentials','fast-json-patch','moment','bluebird','util','path'];(function(_0x483f52,_0x8466d7){var _0x1b9605=function(_0x42eceb){while(--_0x42eceb){_0x483f52['push'](_0x483f52['shift']());}};_0x1b9605(++_0x8466d7);}(_0xb4c3,0x68));var _0x3b4c=function(_0x271964,_0x27c25a){_0x271964=_0x271964-0x0;var _0x37a5e3=_0xb4c3[_0x271964];return _0x37a5e3;};'use strict';var jsonpatch=require(_0x3b4c('0x0'));var rp=require('request-promise');var moment=require(_0x3b4c('0x1'));var BPromise=require(_0x3b4c('0x2'));var Mustache=require('mustache');var util=require(_0x3b4c('0x3'));var path=require(_0x3b4c('0x4'));var sox=require(_0x3b4c('0x5'));var csv=require(_0x3b4c('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x3b4c('0x7'));var crypto=require(_0x3b4c('0x8'));var jsforce=require(_0x3b4c('0x9'));var deskjs=require('desk.js');var toCsv=require(_0x3b4c('0x6'));var querystring=require('querystring');var Papa=require(_0x3b4c('0xa'));var qs=require(_0x3b4c('0xb'));var logger=require(_0x3b4c('0xc'))(_0x3b4c('0xd'));var utils=require(_0x3b4c('0xe'));var config=require(_0x3b4c('0xf'));var db=require('../../mysqldb')['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0x3b4c('0x10'));var client=jayson['client'][_0x3b4c('0x11')]({'port':0x232a});function respondWithRpcPromise(_0x4349e0,_0x4a4a5a,_0x2b2035,_0x547945){return new BPromise(function(_0x371e14,_0x5ebe47){var _0x5dd50e=_0x547945||client;return _0x5dd50e['request'](_0x4349e0,_0x2b2035)['then'](function(_0x205992){logger[_0x3b4c('0x12')](_0x3b4c('0x13'),_0x4a4a5a,'request\x20sent');logger['debug'](_0x3b4c('0x14'),_0x4a4a5a,'request\x20sent',JSON['stringify'](_0x205992));if(_0x205992[_0x3b4c('0x15')]){if(_0x205992[_0x3b4c('0x15')]['code']===0x1f4){logger[_0x3b4c('0x15')]('SalesforceAccount,\x20%s,\x20%s',_0x4a4a5a,_0x205992[_0x3b4c('0x15')][_0x3b4c('0x16')]);return _0x5ebe47(_0x205992[_0x3b4c('0x15')][_0x3b4c('0x16')]);}logger[_0x3b4c('0x15')](_0x3b4c('0x13'),_0x4a4a5a,_0x205992[_0x3b4c('0x15')][_0x3b4c('0x16')]);return _0x371e14(_0x205992['error']['message']);}else{logger[_0x3b4c('0x12')](_0x3b4c('0x13'),_0x4a4a5a,_0x3b4c('0x17'));_0x371e14(_0x205992[_0x3b4c('0x18')][_0x3b4c('0x16')]);}})['catch'](function(_0x455ac2){logger[_0x3b4c('0x15')]('SalesforceAccount,\x20%s,\x20%s',_0x4a4a5a,_0x455ac2);_0x5ebe47(_0x455ac2);});});}function respondWithStatusCode(_0x31b172,_0x3efd1d){_0x3efd1d=_0x3efd1d||0xcc;return function(_0x2fddbc){if(_0x2fddbc){return _0x31b172[_0x3b4c('0x19')](_0x3efd1d);}return _0x31b172['status'](_0x3efd1d)[_0x3b4c('0x1a')]();};}function respondWithResult(_0x4107f5,_0x4d258a){_0x4d258a=_0x4d258a||0xc8;return function(_0x1cc37e){if(_0x1cc37e){return _0x4107f5['status'](_0x4d258a)[_0x3b4c('0x1b')](_0x1cc37e);}};}function respondWithFilteredResult(_0x2a2412,_0x21f23f){return function(_0x30f1ca){if(_0x30f1ca){var _0x4a4470=_0x30f1ca[_0x3b4c('0x1c')],_0x23caa7=_0x21f23f['offset'],_0x2051b5=_0x21f23f[_0x3b4c('0x1d')]+_0x21f23f['limit'],_0x3bfad2;if(_0x2051b5>=_0x4a4470){_0x2051b5=_0x4a4470;_0x3bfad2=0xc8;}else{_0x3bfad2=0xce;}_0x2a2412['status'](_0x3bfad2);return _0x2a2412[_0x3b4c('0x1e')]('Content-Range',_0x23caa7+'-'+_0x2051b5+'/'+_0x4a4470)[_0x3b4c('0x1b')](_0x30f1ca);}return null;};}function patchUpdates(_0x2b6815){return function(_0xea97fd){try{jsonpatch[_0x3b4c('0x1f')](_0xea97fd,_0x2b6815,!![]);}catch(_0x5394be){return BPromise[_0x3b4c('0x20')](_0x5394be);}return _0xea97fd['save']();};}function saveUpdates(_0x34732f,_0x484647){return function(_0x198d2f){if(_0x198d2f){return _0x198d2f[_0x3b4c('0x21')](_0x34732f)[_0x3b4c('0x22')](function(_0x26cd95){return _0x26cd95;});}return null;};}function removeEntity(_0x38311a,_0x820836){return function(_0xb038a0){if(_0xb038a0){return _0xb038a0[_0x3b4c('0x23')]()[_0x3b4c('0x22')](function(){_0x38311a['status'](0xcc)[_0x3b4c('0x1a')]();});}};}function handleEntityNotFound(_0x141198,_0x166c30){return function(_0x52cb9e){if(!_0x52cb9e){_0x141198[_0x3b4c('0x19')](0x194);}return _0x52cb9e;};}function handleError(_0x2e7cb0,_0x10d47b){_0x10d47b=_0x10d47b||0x1f4;return function(_0x62570d){logger[_0x3b4c('0x15')](_0x62570d[_0x3b4c('0x24')]);if(_0x62570d[_0x3b4c('0x25')]){delete _0x62570d[_0x3b4c('0x25')];}_0x2e7cb0[_0x3b4c('0x26')](_0x10d47b)[_0x3b4c('0x27')](_0x62570d);};}exports['index']=function(_0x53f602,_0x318794){var _0x46b4af={},_0x2927af={},_0x104203={'count':0x0,'rows':[]};var _0x2ca230=db[_0x3b4c('0x28')]['rawAttributes'];_0x2927af[_0x3b4c('0x29')]=_[_0x3b4c('0x2a')](_0x2ca230);var _0x23e1a3={'dateStart':_0x53f602['query'][_0x3b4c('0x2b')],'dateEnd':_0x53f602['query']['dateEnd']};delete _0x53f602[_0x3b4c('0x2c')][_0x3b4c('0x2b')];delete _0x53f602[_0x3b4c('0x2c')][_0x3b4c('0x2d')];_0x2927af[_0x3b4c('0x2c')]=_['keys'](_0x53f602[_0x3b4c('0x2c')]);_0x2927af[_0x3b4c('0x2e')]=_[_0x3b4c('0x2f')](_0x2927af[_0x3b4c('0x29')],_0x2927af[_0x3b4c('0x2c')]);_0x46b4af[_0x3b4c('0x30')]=_[_0x3b4c('0x2f')](_0x2927af[_0x3b4c('0x29')],qs['fields'](_0x53f602[_0x3b4c('0x2c')][_0x3b4c('0x31')]));_0x46b4af[_0x3b4c('0x30')]=_0x46b4af[_0x3b4c('0x30')][_0x3b4c('0x32')]?_0x46b4af[_0x3b4c('0x30')]:_0x2927af[_0x3b4c('0x29')];if(!_0x53f602[_0x3b4c('0x2c')][_0x3b4c('0x33')]('nolimit')){_0x46b4af['limit']=qs[_0x3b4c('0x34')](_0x53f602[_0x3b4c('0x2c')][_0x3b4c('0x34')]);_0x46b4af['offset']=qs[_0x3b4c('0x1d')](_0x53f602['query'][_0x3b4c('0x1d')]);}_0x46b4af[_0x3b4c('0x35')]=qs['sort'](_0x53f602[_0x3b4c('0x2c')][_0x3b4c('0x36')]);_0x46b4af[_0x3b4c('0x37')]=qs[_0x3b4c('0x2e')](_['pick'](_0x53f602[_0x3b4c('0x2c')],_0x2927af[_0x3b4c('0x2e')]));if(_0x23e1a3[_0x3b4c('0x2b')]){if(_0x23e1a3[_0x3b4c('0x2d')]){_0x23e1a3[_0x3b4c('0x2d')]=moment(_0x23e1a3[_0x3b4c('0x2d')])[_0x3b4c('0x38')](0x1,_0x3b4c('0x39'));}else{_0x23e1a3[_0x3b4c('0x2d')]=moment(_0x23e1a3[_0x3b4c('0x2b')])['add'](0x1,'day');}_[_0x3b4c('0x3a')](_0x46b4af[_0x3b4c('0x37')],{'createdAt':{'$gte':_0x23e1a3['dateStart'],'$lte':_0x23e1a3[_0x3b4c('0x2d')]}});}if(_0x53f602['query']['filter']){_0x46b4af[_0x3b4c('0x37')]=_['merge'](_0x46b4af[_0x3b4c('0x37')],{'$or':_[_0x3b4c('0x3b')](_0x46b4af[_0x3b4c('0x30')],function(_0x5ece48){var _0x242616={};_0x242616[_0x5ece48]={'$like':'%'+_0x53f602[_0x3b4c('0x2c')][_0x3b4c('0x3c')]+'%'};return _0x242616;})});}_0x46b4af=_['merge']({},_0x46b4af,_0x53f602['options']);var _0x154191={'where':_0x46b4af[_0x3b4c('0x37')]};return db['SalesforceAccount'][_0x3b4c('0x1c')](_0x154191)[_0x3b4c('0x22')](function(_0x4c3b26){_0x104203[_0x3b4c('0x1c')]=_0x4c3b26;if(_0x53f602['query'][_0x3b4c('0x3d')]){_0x46b4af[_0x3b4c('0x3e')]=[{'all':!![]}];}return db[_0x3b4c('0x28')]['findAll'](_0x46b4af);})[_0x3b4c('0x22')](function(_0x41faee){_0x104203['rows']=_0x41faee;return _0x104203;})[_0x3b4c('0x22')](respondWithFilteredResult(_0x318794,_0x46b4af))[_0x3b4c('0x3f')](handleError(_0x318794,null));};exports[_0x3b4c('0x40')]=function(_0x1c8317,_0x3be742){var _0x31cdfa={'raw':![],'where':{'id':_0x1c8317[_0x3b4c('0x41')]['id']}},_0x56cf84={};_0x56cf84[_0x3b4c('0x29')]=_[_0x3b4c('0x2a')](db[_0x3b4c('0x28')][_0x3b4c('0x42')]);_0x56cf84[_0x3b4c('0x2c')]=_['keys'](_0x1c8317[_0x3b4c('0x2c')]);_0x56cf84[_0x3b4c('0x2e')]=_[_0x3b4c('0x2f')](_0x56cf84[_0x3b4c('0x29')],_0x56cf84[_0x3b4c('0x2c')]);_0x31cdfa[_0x3b4c('0x30')]=_[_0x3b4c('0x2f')](_0x56cf84[_0x3b4c('0x29')],qs[_0x3b4c('0x31')](_0x1c8317[_0x3b4c('0x2c')][_0x3b4c('0x31')]));_0x31cdfa[_0x3b4c('0x30')]=_0x31cdfa[_0x3b4c('0x30')][_0x3b4c('0x32')]?_0x31cdfa[_0x3b4c('0x30')]:_0x56cf84[_0x3b4c('0x29')];if(_0x1c8317[_0x3b4c('0x2c')][_0x3b4c('0x3d')]){_0x31cdfa[_0x3b4c('0x3e')]=[{'all':!![]}];}_0x31cdfa=_[_0x3b4c('0x3a')]({},_0x31cdfa,_0x1c8317[_0x3b4c('0x43')]);return db[_0x3b4c('0x28')][_0x3b4c('0x44')](_0x31cdfa)[_0x3b4c('0x22')](handleEntityNotFound(_0x3be742,null))[_0x3b4c('0x22')](respondWithResult(_0x3be742,null))['catch'](handleError(_0x3be742,null));};exports[_0x3b4c('0x45')]=function(_0x5ba244,_0x13d4e9){return db['SalesforceAccount'][_0x3b4c('0x45')](_0x5ba244[_0x3b4c('0x46')],{})[_0x3b4c('0x22')](respondWithResult(_0x13d4e9,0xc9))[_0x3b4c('0x3f')](handleError(_0x13d4e9,null));};exports['update']=function(_0x7f2b8e,_0x51d905){if(_0x7f2b8e[_0x3b4c('0x46')]['id']){delete _0x7f2b8e['body']['id'];}return db[_0x3b4c('0x28')][_0x3b4c('0x44')]({'where':{'id':_0x7f2b8e['params']['id']}})[_0x3b4c('0x22')](handleEntityNotFound(_0x51d905,null))[_0x3b4c('0x22')](saveUpdates(_0x7f2b8e[_0x3b4c('0x46')],null))[_0x3b4c('0x22')](respondWithResult(_0x51d905,null))[_0x3b4c('0x3f')](handleError(_0x51d905,null));};exports['destroy']=function(_0x50e5b3,_0x28aa9b){return db[_0x3b4c('0x28')]['find']({'where':{'id':_0x50e5b3[_0x3b4c('0x41')]['id']}})[_0x3b4c('0x22')](handleEntityNotFound(_0x28aa9b,null))[_0x3b4c('0x22')](removeEntity(_0x28aa9b,null))[_0x3b4c('0x3f')](handleError(_0x28aa9b,null));};exports[_0x3b4c('0x47')]=function(_0x1b9b29,_0x53f15d,_0x34463d){var _0x3ed7ce={};var _0x3c91b7={};var _0x57bc47;var _0x5c1dc8;return db['SalesforceAccount'][_0x3b4c('0x48')]({'where':{'id':_0x1b9b29[_0x3b4c('0x41')]['id']}})['then'](handleEntityNotFound(_0x53f15d,null))[_0x3b4c('0x22')](function(_0x49df01){if(_0x49df01){_0x57bc47=_0x49df01;_0x3c91b7[_0x3b4c('0x29')]=_[_0x3b4c('0x2a')](db[_0x3b4c('0x49')][_0x3b4c('0x42')]);_0x3c91b7[_0x3b4c('0x2c')]=_[_0x3b4c('0x2a')](_0x1b9b29[_0x3b4c('0x2c')]);_0x3c91b7['filters']=_[_0x3b4c('0x2f')](_0x3c91b7[_0x3b4c('0x29')],_0x3c91b7[_0x3b4c('0x2c')]);_0x3ed7ce[_0x3b4c('0x30')]=_[_0x3b4c('0x2f')](_0x3c91b7['model'],qs['fields'](_0x1b9b29[_0x3b4c('0x2c')][_0x3b4c('0x31')]));_0x3ed7ce[_0x3b4c('0x30')]=_0x3ed7ce[_0x3b4c('0x30')][_0x3b4c('0x32')]?_0x3ed7ce[_0x3b4c('0x30')]:_0x3c91b7[_0x3b4c('0x29')];_0x3ed7ce['order']=qs[_0x3b4c('0x36')](_0x1b9b29[_0x3b4c('0x2c')][_0x3b4c('0x36')]);_0x3ed7ce['where']=qs['filters'](_['pick'](_0x1b9b29[_0x3b4c('0x2c')],_0x3c91b7['filters']));if(_0x1b9b29[_0x3b4c('0x2c')][_0x3b4c('0x3c')]){_0x3ed7ce[_0x3b4c('0x37')]=_[_0x3b4c('0x3a')](_0x3ed7ce[_0x3b4c('0x37')],{'$or':_[_0x3b4c('0x3b')](_0x3ed7ce['attributes'],function(_0x2983b5){var _0x5b1a98={};_0x5b1a98[_0x2983b5]={'$like':'%'+_0x1b9b29['query'][_0x3b4c('0x3c')]+'%'};return _0x5b1a98;})});}_0x3ed7ce=_[_0x3b4c('0x3a')]({},_0x3ed7ce,_0x1b9b29[_0x3b4c('0x43')]);return _0x57bc47[_0x3b4c('0x47')](_0x3ed7ce);}})[_0x3b4c('0x22')](function(_0x384df9){if(_0x384df9){_0x5c1dc8=_0x384df9[_0x3b4c('0x32')];if(!_0x1b9b29[_0x3b4c('0x2c')]['hasOwnProperty']('nolimit')){_0x3ed7ce[_0x3b4c('0x34')]=qs[_0x3b4c('0x34')](_0x1b9b29[_0x3b4c('0x2c')]['limit']);_0x3ed7ce[_0x3b4c('0x1d')]=qs['offset'](_0x1b9b29['query'][_0x3b4c('0x1d')]);}return _0x57bc47[_0x3b4c('0x47')](_0x3ed7ce);}})[_0x3b4c('0x22')](function(_0x1c7b10){if(_0x1c7b10){return _0x1c7b10?{'count':_0x5c1dc8,'rows':_0x1c7b10}:null;}})[_0x3b4c('0x22')](respondWithResult(_0x53f15d,null))['catch'](handleError(_0x53f15d,null));};exports[_0x3b4c('0x4a')]=function(_0x4415f7,_0x12fbdc,_0x281b80){if(_0x4415f7['body']['id']){delete _0x4415f7[_0x3b4c('0x46')]['id'];}return db[_0x3b4c('0x28')][_0x3b4c('0x48')]({'where':{'id':_0x4415f7[_0x3b4c('0x41')]['id']}})[_0x3b4c('0x22')](handleEntityNotFound(_0x12fbdc,null))['then'](function(_0x2ce617){if(_0x2ce617){_0x4415f7[_0x3b4c('0x46')][_0x3b4c('0x4b')]=_0x2ce617['id'];_0x4415f7[_0x3b4c('0x46')][_0x3b4c('0x4c')]=integrations[_0x3b4c('0x4d')](_0x4415f7[_0x3b4c('0x46')][_0x3b4c('0x4e')],_0x4415f7[_0x3b4c('0x46')][_0x3b4c('0x4f')]);_0x4415f7['body']['Descriptions']=integrations[_0x3b4c('0x50')](_0x4415f7['body']['channel'],_0x4415f7['body'][_0x3b4c('0x4f')]);return db[_0x3b4c('0x49')][_0x3b4c('0x45')](_0x4415f7['body'],{'include':[{'model':db[_0x3b4c('0x51')],'as':_0x3b4c('0x4c')},{'model':db[_0x3b4c('0x51')],'as':_0x3b4c('0x52')}]});}return null;})[_0x3b4c('0x22')](respondWithResult(_0x12fbdc,null))['catch'](handleError(_0x12fbdc,null));};exports['getFields']=function(_0x2b62fd,_0x5ca7af,_0xbd3dd9){var _0x3d461f;return db[_0x3b4c('0x28')]['findOne']({'where':{'id':_0x2b62fd[_0x3b4c('0x41')]['id']},'attributes':['id',_0x3b4c('0x53'),_0x3b4c('0x54'),'clientSecret',_0x3b4c('0x55'),'password',_0x3b4c('0x56')]})[_0x3b4c('0x22')](handleEntityNotFound(_0x5ca7af,null))['then'](function(_0x430d23){if(_0x430d23){_0x3d461f=new jsforce[(_0x3b4c('0x57'))]({'oauth2':{'loginUrl':_0x430d23[_0x3b4c('0x53')],'clientId':_0x430d23['clientId'],'clientSecret':_0x430d23[_0x3b4c('0x58')]}});return _0x3d461f[_0x3b4c('0x59')](_0x430d23[_0x3b4c('0x55')],_0x430d23['password'][_0x3b4c('0x5a')](_0x430d23[_0x3b4c('0x56')]));}})['then'](function(_0x157ee5){if(_0x157ee5){return _0x3d461f[_0x3b4c('0x5b')](_0x3b4c('0x5c'))[_0x3b4c('0x5d')]();}})[_0x3b4c('0x22')](function(_0x196fee){var _0x3f954a=[_0x3b4c('0x5e'),_0x3b4c('0x5f'),_0x3b4c('0x60'),_0x3b4c('0x61'),_0x3b4c('0x62'),'Priority',_0x3b4c('0x63'),_0x3b4c('0x64')];if(_0x196fee){_[_0x3b4c('0x65')](_0x196fee['fields'],function(_0x3bea12){return _0x3bea12['custom']===![]&&!_0x3f954a['includes'](_0x3bea12[_0x3b4c('0x25')]);});return{'count':_0x196fee[_0x3b4c('0x31')][_0x3b4c('0x32')],'rows':_[_0x3b4c('0x3b')](_0x196fee[_0x3b4c('0x31')],function(_0x5597d2){return{'id':_0x5597d2['name'],'name':_0x5597d2[_0x3b4c('0x66')],'custom':_0x5597d2[_0x3b4c('0x67')],'options':_0x5597d2[_0x3b4c('0x68')]?_[_0x3b4c('0x3b')](_0x5597d2[_0x3b4c('0x68')],function(_0x454f29){return{'name':_0x454f29[_0x3b4c('0x66')],'value':_0x454f29[_0x3b4c('0x69')]};}):[]};})};}})[_0x3b4c('0x22')](respondWithResult(_0x5ca7af,null))['catch'](function(_0x2e8fee){var _0x2ccd3b=_0x2b62fd[_0x3b4c('0x2c')]['test']?0x1f4:_0x2e8fee['statusCode']||0x1f4;logger[_0x3b4c('0x15')]('getFields,\x20%s,\x20%s,\x20%s','getFields',_0x2ccd3b,JSON[_0x3b4c('0x6a')](_0x2e8fee));delete _0x2e8fee['name'];if(_0x2ccd3b===0x191){_0x2ccd3b=0x190;}_0x5ca7af[_0x3b4c('0x26')](_0x2ccd3b)[_0x3b4c('0x27')](_0x2b62fd[_0x3b4c('0x2c')][_0x3b4c('0x6b')]?{'message':_0x3b4c('0x6c'),'statusCode':_0x2e8fee['statusCode']}:_0x2e8fee);});};
\ No newline at end of file
+var _0x0212=['../../components/integrations/configuration','jayson/promise','client','http','request','then','info','SalesforceAccount,\x20%s,\x20%s','debug','SalesforceAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','sendStatus','status','end','json','count','offset','limit','Content-Range','apply','reject','destroy','stack','name','send','index','SalesforceAccount','rawAttributes','model','keys','query','dateEnd','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','filters','dateStart','day','add','merge','filter','options','includeAll','findAll','rows','show','params','include','find','create','update','body','getConfigurations','findOne','SalesforceConfiguration','pick','map','nolimit','addConfiguration','AccountId','getSubjects','channel','type','SalesforceField','Subjects','remoteUri','clientSecret','username','password','Connection','clientId','login','securityToken','sobject','Task','describe','CallDisposition','CallDurationInSeconds','CallObject','CallType','IsArchived','Type','remove','custom','includes','picklistValues','label','value','statusCode','getFields,\x20%s,\x20%s,\x20%s','getFields','test','Wrong\x20credentials','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb'];(function(_0x4e9b8c,_0x18cb8){var _0x4eee51=function(_0x4b9f2a){while(--_0x4b9f2a){_0x4e9b8c['push'](_0x4e9b8c['shift']());}};_0x4eee51(++_0x18cb8);}(_0x0212,0x1d5));var _0x2021=function(_0xee4cff,_0x211a83){_0xee4cff=_0xee4cff-0x0;var _0x129925=_0x0212[_0xee4cff];return _0x129925;};'use strict';var jsonpatch=require(_0x2021('0x0'));var rp=require(_0x2021('0x1'));var moment=require('moment');var BPromise=require(_0x2021('0x2'));var Mustache=require(_0x2021('0x3'));var util=require(_0x2021('0x4'));var path=require(_0x2021('0x5'));var sox=require(_0x2021('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x2021('0x7'));var jsforce=require(_0x2021('0x8'));var deskjs=require(_0x2021('0x9'));var toCsv=require(_0x2021('0xa'));var querystring=require(_0x2021('0xb'));var Papa=require(_0x2021('0xc'));var qs=require(_0x2021('0xd'));var logger=require(_0x2021('0xe'))(_0x2021('0xf'));var utils=require(_0x2021('0x10'));var config=require(_0x2021('0x11'));var db=require(_0x2021('0x12'))['db'];var integrations=require(_0x2021('0x13'));var jayson=require(_0x2021('0x14'));var client=jayson[_0x2021('0x15')][_0x2021('0x16')]({'port':0x232a});function respondWithRpcPromise(_0x1cae45,_0x1374dd,_0x222a2e,_0x4ed119){return new BPromise(function(_0x4d811d,_0x3db500){var _0x140f06=_0x4ed119||client;return _0x140f06[_0x2021('0x17')](_0x1cae45,_0x222a2e)[_0x2021('0x18')](function(_0x478dc0){logger[_0x2021('0x19')](_0x2021('0x1a'),_0x1374dd,'request\x20sent');logger[_0x2021('0x1b')](_0x2021('0x1c'),_0x1374dd,_0x2021('0x1d'),JSON[_0x2021('0x1e')](_0x478dc0));if(_0x478dc0[_0x2021('0x1f')]){if(_0x478dc0['error'][_0x2021('0x20')]===0x1f4){logger[_0x2021('0x1f')]('SalesforceAccount,\x20%s,\x20%s',_0x1374dd,_0x478dc0[_0x2021('0x1f')][_0x2021('0x21')]);return _0x3db500(_0x478dc0[_0x2021('0x1f')]['message']);}logger[_0x2021('0x1f')]('SalesforceAccount,\x20%s,\x20%s',_0x1374dd,_0x478dc0[_0x2021('0x1f')][_0x2021('0x21')]);return _0x4d811d(_0x478dc0['error'][_0x2021('0x21')]);}else{logger['info']('SalesforceAccount,\x20%s,\x20%s',_0x1374dd,_0x2021('0x1d'));_0x4d811d(_0x478dc0['result'][_0x2021('0x21')]);}})[_0x2021('0x22')](function(_0xcf7c4){logger[_0x2021('0x1f')](_0x2021('0x1a'),_0x1374dd,_0xcf7c4);_0x3db500(_0xcf7c4);});});}function respondWithStatusCode(_0x34f64a,_0x324865){_0x324865=_0x324865||0xcc;return function(_0x5e9c41){if(_0x5e9c41){return _0x34f64a[_0x2021('0x23')](_0x324865);}return _0x34f64a[_0x2021('0x24')](_0x324865)[_0x2021('0x25')]();};}function respondWithResult(_0xf160ec,_0x109bb5){_0x109bb5=_0x109bb5||0xc8;return function(_0x54d27a){if(_0x54d27a){return _0xf160ec[_0x2021('0x24')](_0x109bb5)[_0x2021('0x26')](_0x54d27a);}};}function respondWithFilteredResult(_0x1430d5,_0x463b9f){return function(_0x5e71d9){if(_0x5e71d9){var _0x4d5830=_0x5e71d9[_0x2021('0x27')],_0x264d65=_0x463b9f[_0x2021('0x28')],_0xc51dae=_0x463b9f[_0x2021('0x28')]+_0x463b9f[_0x2021('0x29')],_0x3ace00;if(_0xc51dae>=_0x4d5830){_0xc51dae=_0x4d5830;_0x3ace00=0xc8;}else{_0x3ace00=0xce;}_0x1430d5[_0x2021('0x24')](_0x3ace00);return _0x1430d5['set'](_0x2021('0x2a'),_0x264d65+'-'+_0xc51dae+'/'+_0x4d5830)[_0x2021('0x26')](_0x5e71d9);}return null;};}function patchUpdates(_0x986dea){return function(_0x85ea17){try{jsonpatch[_0x2021('0x2b')](_0x85ea17,_0x986dea,!![]);}catch(_0x3d3c7c){return BPromise[_0x2021('0x2c')](_0x3d3c7c);}return _0x85ea17['save']();};}function saveUpdates(_0x3692b0,_0x319175){return function(_0x56c399){if(_0x56c399){return _0x56c399['update'](_0x3692b0)[_0x2021('0x18')](function(_0x52ed6f){return _0x52ed6f;});}return null;};}function removeEntity(_0x3f38f1,_0x1c6700){return function(_0x597b0a){if(_0x597b0a){return _0x597b0a[_0x2021('0x2d')]()[_0x2021('0x18')](function(){_0x3f38f1[_0x2021('0x24')](0xcc)[_0x2021('0x25')]();});}};}function handleEntityNotFound(_0x4f6aef,_0x44eb23){return function(_0x305d4d){if(!_0x305d4d){_0x4f6aef[_0x2021('0x23')](0x194);}return _0x305d4d;};}function handleError(_0x5dd080,_0x5950c1){_0x5950c1=_0x5950c1||0x1f4;return function(_0x545dfe){logger[_0x2021('0x1f')](_0x545dfe[_0x2021('0x2e')]);if(_0x545dfe[_0x2021('0x2f')]){delete _0x545dfe[_0x2021('0x2f')];}_0x5dd080['status'](_0x5950c1)[_0x2021('0x30')](_0x545dfe);};}exports[_0x2021('0x31')]=function(_0x1e5620,_0x2aba8e){var _0x3b6d7c={},_0x140419={},_0x486185={'count':0x0,'rows':[]};var _0x4ebcaf=db[_0x2021('0x32')][_0x2021('0x33')];_0x140419[_0x2021('0x34')]=_[_0x2021('0x35')](_0x4ebcaf);var _0x3c649d={'dateStart':_0x1e5620[_0x2021('0x36')]['dateStart'],'dateEnd':_0x1e5620[_0x2021('0x36')][_0x2021('0x37')]};delete _0x1e5620[_0x2021('0x36')]['dateStart'];delete _0x1e5620['query']['dateEnd'];_0x140419[_0x2021('0x36')]=_[_0x2021('0x35')](_0x1e5620['query']);_0x140419['filters']=_[_0x2021('0x38')](_0x140419['model'],_0x140419['query']);_0x3b6d7c[_0x2021('0x39')]=_[_0x2021('0x38')](_0x140419[_0x2021('0x34')],qs[_0x2021('0x3a')](_0x1e5620[_0x2021('0x36')][_0x2021('0x3a')]));_0x3b6d7c['attributes']=_0x3b6d7c[_0x2021('0x39')][_0x2021('0x3b')]?_0x3b6d7c['attributes']:_0x140419[_0x2021('0x34')];if(!_0x1e5620[_0x2021('0x36')][_0x2021('0x3c')]('nolimit')){_0x3b6d7c['limit']=qs['limit'](_0x1e5620[_0x2021('0x36')][_0x2021('0x29')]);_0x3b6d7c[_0x2021('0x28')]=qs[_0x2021('0x28')](_0x1e5620['query']['offset']);}_0x3b6d7c[_0x2021('0x3d')]=qs[_0x2021('0x3e')](_0x1e5620[_0x2021('0x36')]['sort']);_0x3b6d7c[_0x2021('0x3f')]=qs['filters'](_['pick'](_0x1e5620[_0x2021('0x36')],_0x140419[_0x2021('0x40')]));if(_0x3c649d[_0x2021('0x41')]){if(_0x3c649d['dateEnd']){_0x3c649d['dateEnd']=moment(_0x3c649d[_0x2021('0x37')])['add'](0x1,_0x2021('0x42'));}else{_0x3c649d['dateEnd']=moment(_0x3c649d[_0x2021('0x41')])[_0x2021('0x43')](0x1,_0x2021('0x42'));}_[_0x2021('0x44')](_0x3b6d7c['where'],{'createdAt':{'$gte':_0x3c649d[_0x2021('0x41')],'$lte':_0x3c649d[_0x2021('0x37')]}});}if(_0x1e5620['query'][_0x2021('0x45')]){_0x3b6d7c[_0x2021('0x3f')]=_[_0x2021('0x44')](_0x3b6d7c[_0x2021('0x3f')],{'$or':_['map'](_0x3b6d7c[_0x2021('0x39')],function(_0x39a822){var _0x2ef97e={};_0x2ef97e[_0x39a822]={'$like':'%'+_0x1e5620[_0x2021('0x36')][_0x2021('0x45')]+'%'};return _0x2ef97e;})});}_0x3b6d7c=_[_0x2021('0x44')]({},_0x3b6d7c,_0x1e5620[_0x2021('0x46')]);var _0x11bc93={'where':_0x3b6d7c['where']};return db[_0x2021('0x32')][_0x2021('0x27')](_0x11bc93)[_0x2021('0x18')](function(_0x3bae38){_0x486185[_0x2021('0x27')]=_0x3bae38;if(_0x1e5620[_0x2021('0x36')][_0x2021('0x47')]){_0x3b6d7c['include']=[{'all':!![]}];}return db[_0x2021('0x32')][_0x2021('0x48')](_0x3b6d7c);})[_0x2021('0x18')](function(_0x3bbd9c){_0x486185[_0x2021('0x49')]=_0x3bbd9c;return _0x486185;})[_0x2021('0x18')](respondWithFilteredResult(_0x2aba8e,_0x3b6d7c))[_0x2021('0x22')](handleError(_0x2aba8e,null));};exports[_0x2021('0x4a')]=function(_0x609f6,_0xbedb86){var _0x186c9d={'raw':![],'where':{'id':_0x609f6[_0x2021('0x4b')]['id']}},_0x32aee4={};_0x32aee4['model']=_[_0x2021('0x35')](db[_0x2021('0x32')][_0x2021('0x33')]);_0x32aee4[_0x2021('0x36')]=_[_0x2021('0x35')](_0x609f6['query']);_0x32aee4['filters']=_['intersection'](_0x32aee4[_0x2021('0x34')],_0x32aee4['query']);_0x186c9d[_0x2021('0x39')]=_[_0x2021('0x38')](_0x32aee4[_0x2021('0x34')],qs['fields'](_0x609f6[_0x2021('0x36')][_0x2021('0x3a')]));_0x186c9d[_0x2021('0x39')]=_0x186c9d[_0x2021('0x39')][_0x2021('0x3b')]?_0x186c9d[_0x2021('0x39')]:_0x32aee4[_0x2021('0x34')];if(_0x609f6['query'][_0x2021('0x47')]){_0x186c9d[_0x2021('0x4c')]=[{'all':!![]}];}_0x186c9d=_[_0x2021('0x44')]({},_0x186c9d,_0x609f6[_0x2021('0x46')]);return db[_0x2021('0x32')][_0x2021('0x4d')](_0x186c9d)[_0x2021('0x18')](handleEntityNotFound(_0xbedb86,null))['then'](respondWithResult(_0xbedb86,null))['catch'](handleError(_0xbedb86,null));};exports['create']=function(_0x33b7c0,_0x583086){return db[_0x2021('0x32')][_0x2021('0x4e')](_0x33b7c0['body'],{})[_0x2021('0x18')](respondWithResult(_0x583086,0xc9))['catch'](handleError(_0x583086,null));};exports[_0x2021('0x4f')]=function(_0x2f3bc3,_0x25e560){if(_0x2f3bc3['body']['id']){delete _0x2f3bc3[_0x2021('0x50')]['id'];}return db[_0x2021('0x32')][_0x2021('0x4d')]({'where':{'id':_0x2f3bc3[_0x2021('0x4b')]['id']}})['then'](handleEntityNotFound(_0x25e560,null))['then'](saveUpdates(_0x2f3bc3[_0x2021('0x50')],null))['then'](respondWithResult(_0x25e560,null))['catch'](handleError(_0x25e560,null));};exports[_0x2021('0x2d')]=function(_0x4ea372,_0x575c66){return db['SalesforceAccount'][_0x2021('0x4d')]({'where':{'id':_0x4ea372['params']['id']}})[_0x2021('0x18')](handleEntityNotFound(_0x575c66,null))['then'](removeEntity(_0x575c66,null))[_0x2021('0x22')](handleError(_0x575c66,null));};exports[_0x2021('0x51')]=function(_0x27c59d,_0x57c4e8,_0x2d0ce6){var _0x3d3912={};var _0x5ac128={};var _0x57afae;var _0x2e9fd7;return db[_0x2021('0x32')][_0x2021('0x52')]({'where':{'id':_0x27c59d[_0x2021('0x4b')]['id']}})[_0x2021('0x18')](handleEntityNotFound(_0x57c4e8,null))['then'](function(_0x380d16){if(_0x380d16){_0x57afae=_0x380d16;_0x5ac128[_0x2021('0x34')]=_['keys'](db[_0x2021('0x53')][_0x2021('0x33')]);_0x5ac128['query']=_[_0x2021('0x35')](_0x27c59d[_0x2021('0x36')]);_0x5ac128[_0x2021('0x40')]=_[_0x2021('0x38')](_0x5ac128[_0x2021('0x34')],_0x5ac128['query']);_0x3d3912[_0x2021('0x39')]=_[_0x2021('0x38')](_0x5ac128[_0x2021('0x34')],qs[_0x2021('0x3a')](_0x27c59d[_0x2021('0x36')][_0x2021('0x3a')]));_0x3d3912[_0x2021('0x39')]=_0x3d3912[_0x2021('0x39')][_0x2021('0x3b')]?_0x3d3912[_0x2021('0x39')]:_0x5ac128[_0x2021('0x34')];_0x3d3912[_0x2021('0x3d')]=qs[_0x2021('0x3e')](_0x27c59d['query']['sort']);_0x3d3912[_0x2021('0x3f')]=qs['filters'](_[_0x2021('0x54')](_0x27c59d[_0x2021('0x36')],_0x5ac128[_0x2021('0x40')]));if(_0x27c59d[_0x2021('0x36')][_0x2021('0x45')]){_0x3d3912['where']=_['merge'](_0x3d3912[_0x2021('0x3f')],{'$or':_[_0x2021('0x55')](_0x3d3912[_0x2021('0x39')],function(_0x4d6610){var _0x3f20c9={};_0x3f20c9[_0x4d6610]={'$like':'%'+_0x27c59d[_0x2021('0x36')]['filter']+'%'};return _0x3f20c9;})});}_0x3d3912=_[_0x2021('0x44')]({},_0x3d3912,_0x27c59d[_0x2021('0x46')]);return _0x57afae['getConfigurations'](_0x3d3912);}})[_0x2021('0x18')](function(_0xf6047d){if(_0xf6047d){_0x2e9fd7=_0xf6047d[_0x2021('0x3b')];if(!_0x27c59d[_0x2021('0x36')][_0x2021('0x3c')](_0x2021('0x56'))){_0x3d3912[_0x2021('0x29')]=qs[_0x2021('0x29')](_0x27c59d[_0x2021('0x36')][_0x2021('0x29')]);_0x3d3912['offset']=qs[_0x2021('0x28')](_0x27c59d['query'][_0x2021('0x28')]);}return _0x57afae[_0x2021('0x51')](_0x3d3912);}})[_0x2021('0x18')](function(_0x42cbdc){if(_0x42cbdc){return _0x42cbdc?{'count':_0x2e9fd7,'rows':_0x42cbdc}:null;}})[_0x2021('0x18')](respondWithResult(_0x57c4e8,null))[_0x2021('0x22')](handleError(_0x57c4e8,null));};exports[_0x2021('0x57')]=function(_0x4c1a10,_0x1c4898,_0xe36212){if(_0x4c1a10['body']['id']){delete _0x4c1a10[_0x2021('0x50')]['id'];}return db['SalesforceAccount']['findOne']({'where':{'id':_0x4c1a10['params']['id']}})[_0x2021('0x18')](handleEntityNotFound(_0x1c4898,null))[_0x2021('0x18')](function(_0x4aa231){if(_0x4aa231){_0x4c1a10[_0x2021('0x50')][_0x2021('0x58')]=_0x4aa231['id'];_0x4c1a10[_0x2021('0x50')]['Subjects']=integrations[_0x2021('0x59')](_0x4c1a10[_0x2021('0x50')][_0x2021('0x5a')],_0x4c1a10[_0x2021('0x50')][_0x2021('0x5b')]);_0x4c1a10[_0x2021('0x50')]['Descriptions']=integrations['getDescriptions'](_0x4c1a10['body'][_0x2021('0x5a')],_0x4c1a10[_0x2021('0x50')][_0x2021('0x5b')]);return db[_0x2021('0x53')][_0x2021('0x4e')](_0x4c1a10['body'],{'include':[{'model':db[_0x2021('0x5c')],'as':_0x2021('0x5d')},{'model':db['SalesforceField'],'as':'Descriptions'}]});}return null;})[_0x2021('0x18')](respondWithResult(_0x1c4898,null))['catch'](handleError(_0x1c4898,null));};exports['getFields']=function(_0x47cbc2,_0x252649,_0x24c58a){var _0x5e94f4;return db['SalesforceAccount'][_0x2021('0x52')]({'where':{'id':_0x47cbc2[_0x2021('0x4b')]['id']},'attributes':['id',_0x2021('0x5e'),'clientId',_0x2021('0x5f'),_0x2021('0x60'),_0x2021('0x61'),'securityToken']})[_0x2021('0x18')](handleEntityNotFound(_0x252649,null))[_0x2021('0x18')](function(_0x547d2e){if(_0x547d2e){_0x5e94f4=new jsforce[(_0x2021('0x62'))]({'oauth2':{'loginUrl':_0x547d2e['remoteUri'],'clientId':_0x547d2e[_0x2021('0x63')],'clientSecret':_0x547d2e['clientSecret']}});return _0x5e94f4[_0x2021('0x64')](_0x547d2e[_0x2021('0x60')],_0x547d2e['password']['concat'](_0x547d2e[_0x2021('0x65')]));}})[_0x2021('0x18')](function(_0x30e867){if(_0x30e867){return _0x5e94f4[_0x2021('0x66')](_0x2021('0x67'))[_0x2021('0x68')]();}})['then'](function(_0x1f4c22){var _0x22b622=[_0x2021('0x69'),_0x2021('0x6a'),_0x2021('0x6b'),_0x2021('0x6c'),_0x2021('0x6d'),'Priority','Status',_0x2021('0x6e')];if(_0x1f4c22){_[_0x2021('0x6f')](_0x1f4c22[_0x2021('0x3a')],function(_0x3a32bf){return _0x3a32bf[_0x2021('0x70')]===![]&&!_0x22b622[_0x2021('0x71')](_0x3a32bf[_0x2021('0x2f')]);});return{'count':_0x1f4c22[_0x2021('0x3a')][_0x2021('0x3b')],'rows':_['map'](_0x1f4c22['fields'],function(_0x2b2196){return{'id':_0x2b2196['name'],'name':_0x2b2196['label'],'custom':_0x2b2196[_0x2021('0x70')],'options':_0x2b2196['picklistValues']?_['map'](_0x2b2196[_0x2021('0x72')],function(_0x51610b){return{'name':_0x51610b[_0x2021('0x73')],'value':_0x51610b[_0x2021('0x74')]};}):[]};})};}})[_0x2021('0x18')](respondWithResult(_0x252649,null))[_0x2021('0x22')](function(_0x6f0673){var _0x24e983=_0x47cbc2[_0x2021('0x36')]['test']?0x1f4:_0x6f0673[_0x2021('0x75')]||0x1f4;logger[_0x2021('0x1f')](_0x2021('0x76'),_0x2021('0x77'),_0x24e983,JSON[_0x2021('0x1e')](_0x6f0673));delete _0x6f0673['name'];if(_0x24e983===0x191){_0x24e983=0x190;}_0x252649[_0x2021('0x24')](_0x24e983)[_0x2021('0x30')](_0x47cbc2[_0x2021('0x36')][_0x2021('0x78')]?{'message':_0x2021('0x79'),'statusCode':_0x6f0673[_0x2021('0x75')]}:_0x6f0673);});};
\ No newline at end of file
index e323c15..db42082 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4061=['util','../../config/logger','moment','bluebird','./intSalesforceAccount.attributes','../../components/integrations/configuration','SalesforceAccount','int_salesforce_accounts','lodash'];(function(_0x1a957b,_0x3a5dca){var _0x2b79f4=function(_0x113582){while(--_0x113582){_0x1a957b['push'](_0x1a957b['shift']());}};_0x2b79f4(++_0x3a5dca);}(_0x4061,0x11f));var _0x1406=function(_0x2cf509,_0x572855){_0x2cf509=_0x2cf509-0x0;var _0x16a69d=_0x4061[_0x2cf509];return _0x16a69d;};'use strict';var _=require(_0x1406('0x0'));var util=require(_0x1406('0x1'));var logger=require(_0x1406('0x2'))('api');var moment=require(_0x1406('0x3'));var BPromise=require(_0x1406('0x4'));var rp=require('request-promise');var attributes=require(_0x1406('0x5'));var integrations=require(_0x1406('0x6'));module['exports']=function(_0x184880,_0x78052e){return _0x184880['define'](_0x1406('0x7'),attributes,{'tableName':_0x1406('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xcd97=['exports','define','int_salesforce_accounts','lodash','../../config/logger','moment','bluebird','request-promise','./intSalesforceAccount.attributes','../../components/integrations/configuration'];(function(_0x199572,_0x33e667){var _0x13cfa3=function(_0x53c075){while(--_0x53c075){_0x199572['push'](_0x199572['shift']());}};_0x13cfa3(++_0x33e667);}(_0xcd97,0x189));var _0x7cd9=function(_0xae03ec,_0x126329){_0xae03ec=_0xae03ec-0x0;var _0x26b415=_0xcd97[_0xae03ec];return _0x26b415;};'use strict';var _=require(_0x7cd9('0x0'));var util=require('util');var logger=require(_0x7cd9('0x1'))('api');var moment=require(_0x7cd9('0x2'));var BPromise=require(_0x7cd9('0x3'));var rp=require(_0x7cd9('0x4'));var attributes=require(_0x7cd9('0x5'));var integrations=require(_0x7cd9('0x6'));module[_0x7cd9('0x7')]=function(_0x425300,_0x3d29f2){return _0x425300[_0x7cd9('0x8')]('SalesforceAccount',attributes,{'tableName':_0x7cd9('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f5614e7..bc3f9fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9338=['request\x20sent','SalesforceAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','SalesforceAccount','findAll','options','where','attributes','include','model','map','GetSalesforceAccount','find','ShowSalesforceAccount','debug','lodash','bluebird','../../mysqldb','../../config/utils','../../config/environment','client','http','then','info','SalesforceAccount,\x20%s,\x20%s'];(function(_0x256b72,_0x340985){var _0x2183e3=function(_0xf7fd37){while(--_0xf7fd37){_0x256b72['push'](_0x256b72['shift']());}};_0x2183e3(++_0x340985);}(_0x9338,0x1e3));var _0x8933=function(_0x4c8a8f,_0x997ef){_0x4c8a8f=_0x4c8a8f-0x0;var _0x404500=_0x9338[_0x4c8a8f];return _0x404500;};'use strict';var _=require(_0x8933('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x8933('0x1'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x8933('0x2'))['db'];var utils=require(_0x8933('0x3'));var logger=require('../../config/logger')('rpc');var config=require(_0x8933('0x4'));var jayson=require('jayson/promise');var client=jayson[_0x8933('0x5')][_0x8933('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x2a84b2,_0x2468ed,_0x5524ed){return new BPromise(function(_0x15c5ff,_0xa85578){return client['request'](_0x2a84b2,_0x5524ed)[_0x8933('0x7')](function(_0x2d119c){logger[_0x8933('0x8')](_0x8933('0x9'),_0x2468ed,_0x8933('0xa'));logger['debug'](_0x8933('0xb'),_0x2468ed,_0x8933('0xa'),JSON[_0x8933('0xc')](_0x2d119c));if(_0x2d119c[_0x8933('0xd')]){if(_0x2d119c[_0x8933('0xd')][_0x8933('0xe')]===0x1f4){logger[_0x8933('0xd')](_0x8933('0x9'),_0x2468ed,_0x2d119c[_0x8933('0xd')]['message']);return _0xa85578(_0x2d119c[_0x8933('0xd')]['message']);}logger['error']('SalesforceAccount,\x20%s,\x20%s',_0x2468ed,_0x2d119c[_0x8933('0xd')][_0x8933('0xf')]);return _0x15c5ff(_0x2d119c[_0x8933('0xd')][_0x8933('0xf')]);}else{logger[_0x8933('0x8')](_0x8933('0x9'),_0x2468ed,_0x8933('0xa'));_0x15c5ff(_0x2d119c['result']['message']);}})[_0x8933('0x10')](function(_0x1d99d2){logger['error'](_0x8933('0x9'),_0x2468ed,_0x1d99d2);_0xa85578(_0x1d99d2);});});}exports['GetSalesforceAccount']=function(_0x3e1631){var _0x1570b7=this;return new Promise(function(_0x3592f1,_0xa6f1dd){return db[_0x8933('0x11')][_0x8933('0x12')]({'raw':_0x3e1631[_0x8933('0x13')]?_0x3e1631[_0x8933('0x13')]['raw']===undefined?!![]:![]:!![],'where':_0x3e1631['options']?_0x3e1631[_0x8933('0x13')][_0x8933('0x14')]||null:null,'attributes':_0x3e1631[_0x8933('0x13')]?_0x3e1631['options'][_0x8933('0x15')]||null:null,'limit':_0x3e1631['options']?_0x3e1631[_0x8933('0x13')]['limit']||null:null,'include':_0x3e1631[_0x8933('0x13')]?_0x3e1631[_0x8933('0x13')][_0x8933('0x16')]?_['map'](_0x3e1631[_0x8933('0x13')][_0x8933('0x16')],function(_0x5176f9){return{'model':db[_0x5176f9[_0x8933('0x17')]],'as':_0x5176f9['as'],'attributes':_0x5176f9['attributes'],'include':_0x5176f9[_0x8933('0x16')]?_[_0x8933('0x18')](_0x5176f9[_0x8933('0x16')],function(_0x595cf1){return{'model':db[_0x595cf1['model']],'as':_0x595cf1['as'],'attributes':_0x595cf1[_0x8933('0x15')],'include':_0x595cf1['include']?_[_0x8933('0x18')](_0x595cf1[_0x8933('0x16')],function(_0x3a5fc5){return{'model':db[_0x3a5fc5['model']],'as':_0x3a5fc5['as'],'attributes':_0x3a5fc5['attributes']};}):[]};}):[]};}):[]:[]})[_0x8933('0x7')](function(_0x3c18e0){logger[_0x8933('0x8')](_0x8933('0x19'),_0x3e1631);logger['debug'](_0x8933('0x19'),_0x3e1631,JSON[_0x8933('0xc')](_0x3c18e0));_0x3592f1(_0x3c18e0);})['catch'](function(_0x27f9e6){logger[_0x8933('0xd')](_0x8933('0x19'),_0x27f9e6[_0x8933('0xf')],_0x3e1631);_0xa6f1dd(_0x1570b7['error'](0x1f4,_0x27f9e6[_0x8933('0xf')]));});});};exports['ShowSalesforceAccount']=function(_0x4f31e3){var _0x12a277=this;return new Promise(function(_0x17928c,_0x400bc3){return db[_0x8933('0x11')][_0x8933('0x1a')]({'raw':_0x4f31e3[_0x8933('0x13')]?_0x4f31e3[_0x8933('0x13')]['raw']===undefined?!![]:![]:!![],'where':_0x4f31e3[_0x8933('0x13')]?_0x4f31e3[_0x8933('0x13')][_0x8933('0x14')]||null:null,'attributes':_0x4f31e3[_0x8933('0x13')]?_0x4f31e3[_0x8933('0x13')]['attributes']||null:null,'include':_0x4f31e3[_0x8933('0x13')]?_0x4f31e3[_0x8933('0x13')][_0x8933('0x16')]?_[_0x8933('0x18')](_0x4f31e3[_0x8933('0x13')][_0x8933('0x16')],function(_0x37f2db){return{'model':db[_0x37f2db['model']],'as':_0x37f2db['as'],'attributes':_0x37f2db[_0x8933('0x15')],'include':_0x37f2db[_0x8933('0x16')]?_[_0x8933('0x18')](_0x37f2db['include'],function(_0x5ce6b5){return{'model':db[_0x5ce6b5[_0x8933('0x17')]],'as':_0x5ce6b5['as'],'attributes':_0x5ce6b5[_0x8933('0x15')],'include':_0x5ce6b5[_0x8933('0x16')]?_['map'](_0x5ce6b5[_0x8933('0x16')],function(_0xb292e7){return{'model':db[_0xb292e7[_0x8933('0x17')]],'as':_0xb292e7['as'],'attributes':_0xb292e7[_0x8933('0x15')]};}):[]};}):[]};}):[]:[]})[_0x8933('0x7')](function(_0x1d6242){logger[_0x8933('0x8')](_0x8933('0x1b'),_0x4f31e3);logger[_0x8933('0x1c')]('ShowSalesforceAccount',_0x4f31e3,JSON['stringify'](_0x1d6242));_0x17928c(_0x1d6242);})[_0x8933('0x10')](function(_0x321345){logger[_0x8933('0xd')](_0x8933('0x1b'),_0x321345[_0x8933('0xf')],_0x4f31e3);_0x400bc3(_0x12a277[_0x8933('0xd')](0x1f4,_0x321345[_0x8933('0xf')]));});});};
\ No newline at end of file
+var _0x2e43=['raw','attributes','limit','include','model','map','ShowSalesforceAccount','find','lodash','util','moment','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','SalesforceAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','code','error','message','result','catch','GetSalesforceAccount','SalesforceAccount','findAll','options'];(function(_0xe8f68f,_0x32e7c3){var _0x15a1d9=function(_0x972d0e){while(--_0x972d0e){_0xe8f68f['push'](_0xe8f68f['shift']());}};_0x15a1d9(++_0x32e7c3);}(_0x2e43,0x6e));var _0x32e4=function(_0x407850,_0x152197){_0x407850=_0x407850-0x0;var _0x40d7ca=_0x2e43[_0x407850];return _0x40d7ca;};'use strict';var _=require(_0x32e4('0x0'));var util=require(_0x32e4('0x1'));var moment=require(_0x32e4('0x2'));var BPromise=require('bluebird');var rs=require(_0x32e4('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x32e4('0x4'));var logger=require(_0x32e4('0x5'))(_0x32e4('0x6'));var config=require(_0x32e4('0x7'));var jayson=require(_0x32e4('0x8'));var client=jayson[_0x32e4('0x9')][_0x32e4('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x795b5c,_0x2b334d,_0x11d188){return new BPromise(function(_0x18c0f5,_0x519cc3){return client['request'](_0x795b5c,_0x11d188)[_0x32e4('0xb')](function(_0x464812){logger[_0x32e4('0xc')](_0x32e4('0xd'),_0x2b334d,_0x32e4('0xe'));logger[_0x32e4('0xf')]('SalesforceAccount,\x20%s,\x20%s,\x20%s',_0x2b334d,_0x32e4('0xe'),JSON[_0x32e4('0x10')](_0x464812));if(_0x464812['error']){if(_0x464812['error'][_0x32e4('0x11')]===0x1f4){logger[_0x32e4('0x12')](_0x32e4('0xd'),_0x2b334d,_0x464812[_0x32e4('0x12')][_0x32e4('0x13')]);return _0x519cc3(_0x464812[_0x32e4('0x12')][_0x32e4('0x13')]);}logger[_0x32e4('0x12')](_0x32e4('0xd'),_0x2b334d,_0x464812[_0x32e4('0x12')][_0x32e4('0x13')]);return _0x18c0f5(_0x464812[_0x32e4('0x12')][_0x32e4('0x13')]);}else{logger['info'](_0x32e4('0xd'),_0x2b334d,_0x32e4('0xe'));_0x18c0f5(_0x464812[_0x32e4('0x14')][_0x32e4('0x13')]);}})[_0x32e4('0x15')](function(_0x40d185){logger[_0x32e4('0x12')](_0x32e4('0xd'),_0x2b334d,_0x40d185);_0x519cc3(_0x40d185);});});}exports[_0x32e4('0x16')]=function(_0x5efd9e){var _0x1a77a2=this;return new Promise(function(_0x2be723,_0x308cae){return db[_0x32e4('0x17')][_0x32e4('0x18')]({'raw':_0x5efd9e['options']?_0x5efd9e[_0x32e4('0x19')][_0x32e4('0x1a')]===undefined?!![]:![]:!![],'where':_0x5efd9e['options']?_0x5efd9e[_0x32e4('0x19')]['where']||null:null,'attributes':_0x5efd9e['options']?_0x5efd9e['options'][_0x32e4('0x1b')]||null:null,'limit':_0x5efd9e[_0x32e4('0x19')]?_0x5efd9e['options'][_0x32e4('0x1c')]||null:null,'include':_0x5efd9e[_0x32e4('0x19')]?_0x5efd9e[_0x32e4('0x19')][_0x32e4('0x1d')]?_['map'](_0x5efd9e[_0x32e4('0x19')]['include'],function(_0x56dab7){return{'model':db[_0x56dab7[_0x32e4('0x1e')]],'as':_0x56dab7['as'],'attributes':_0x56dab7[_0x32e4('0x1b')],'include':_0x56dab7['include']?_[_0x32e4('0x1f')](_0x56dab7[_0x32e4('0x1d')],function(_0x2f6acd){return{'model':db[_0x2f6acd[_0x32e4('0x1e')]],'as':_0x2f6acd['as'],'attributes':_0x2f6acd['attributes'],'include':_0x2f6acd[_0x32e4('0x1d')]?_['map'](_0x2f6acd[_0x32e4('0x1d')],function(_0x106bf9){return{'model':db[_0x106bf9[_0x32e4('0x1e')]],'as':_0x106bf9['as'],'attributes':_0x106bf9[_0x32e4('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x32e4('0xb')](function(_0x40c65e){logger[_0x32e4('0xc')](_0x32e4('0x16'),_0x5efd9e);logger[_0x32e4('0xf')](_0x32e4('0x16'),_0x5efd9e,JSON[_0x32e4('0x10')](_0x40c65e));_0x2be723(_0x40c65e);})[_0x32e4('0x15')](function(_0xc15766){logger['error'](_0x32e4('0x16'),_0xc15766[_0x32e4('0x13')],_0x5efd9e);_0x308cae(_0x1a77a2[_0x32e4('0x12')](0x1f4,_0xc15766[_0x32e4('0x13')]));});});};exports[_0x32e4('0x20')]=function(_0x2b045f){var _0x22a3b0=this;return new Promise(function(_0x176804,_0x428092){return db[_0x32e4('0x17')][_0x32e4('0x21')]({'raw':_0x2b045f[_0x32e4('0x19')]?_0x2b045f[_0x32e4('0x19')][_0x32e4('0x1a')]===undefined?!![]:![]:!![],'where':_0x2b045f['options']?_0x2b045f[_0x32e4('0x19')]['where']||null:null,'attributes':_0x2b045f[_0x32e4('0x19')]?_0x2b045f[_0x32e4('0x19')]['attributes']||null:null,'include':_0x2b045f[_0x32e4('0x19')]?_0x2b045f['options']['include']?_[_0x32e4('0x1f')](_0x2b045f[_0x32e4('0x19')][_0x32e4('0x1d')],function(_0x27641f){return{'model':db[_0x27641f['model']],'as':_0x27641f['as'],'attributes':_0x27641f[_0x32e4('0x1b')],'include':_0x27641f[_0x32e4('0x1d')]?_[_0x32e4('0x1f')](_0x27641f[_0x32e4('0x1d')],function(_0x3df499){return{'model':db[_0x3df499[_0x32e4('0x1e')]],'as':_0x3df499['as'],'attributes':_0x3df499[_0x32e4('0x1b')],'include':_0x3df499[_0x32e4('0x1d')]?_[_0x32e4('0x1f')](_0x3df499[_0x32e4('0x1d')],function(_0x580424){return{'model':db[_0x580424['model']],'as':_0x580424['as'],'attributes':_0x580424[_0x32e4('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x52b04d){logger[_0x32e4('0xc')](_0x32e4('0x20'),_0x2b045f);logger[_0x32e4('0xf')](_0x32e4('0x20'),_0x2b045f,JSON[_0x32e4('0x10')](_0x52b04d));_0x176804(_0x52b04d);})[_0x32e4('0x15')](function(_0x3e3892){logger['error'](_0x32e4('0x20'),_0x3e3892[_0x32e4('0x13')],_0x2b045f);_0x428092(_0x22a3b0['error'](0x1f4,_0x3e3892[_0x32e4('0x13')]));});});};
\ No newline at end of file
index 2cd7825..0975f87 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6478=['getDescriptions','post','create','put','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../config/environment','./intSalesforceConfiguration.controller','get','isAuthenticated','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','/:id/descriptions'];(function(_0x254610,_0x483b37){var _0x1e89a0=function(_0x277d0f){while(--_0x277d0f){_0x254610['push'](_0x254610['shift']());}};_0x1e89a0(++_0x483b37);}(_0x6478,0x1e7));var _0x8647=function(_0x593fa0,_0x23b388){_0x593fa0=_0x593fa0-0x0;var _0x452eee=_0x6478[_0x593fa0];return _0x452eee;};'use strict';var multer=require(_0x8647('0x0'));var util=require(_0x8647('0x1'));var path=require(_0x8647('0x2'));var express=require(_0x8647('0x3'));var router=express[_0x8647('0x4')]();var auth=require(_0x8647('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x8647('0x6'));var controller=require(_0x8647('0x7'));router[_0x8647('0x8')]('/',auth[_0x8647('0x9')](),controller['index']);router['get'](_0x8647('0xa'),auth[_0x8647('0x9')](),controller[_0x8647('0xb')]);router[_0x8647('0x8')](_0x8647('0xc'),auth[_0x8647('0x9')](),controller[_0x8647('0xd')]);router[_0x8647('0x8')](_0x8647('0xe'),auth[_0x8647('0x9')](),controller[_0x8647('0xf')]);router[_0x8647('0x8')](_0x8647('0x10'),auth[_0x8647('0x9')](),controller[_0x8647('0x11')]);router[_0x8647('0x12')]('/',auth[_0x8647('0x9')](),controller[_0x8647('0x13')]);router[_0x8647('0x14')]('/:id',auth[_0x8647('0x9')](),controller['update']);router[_0x8647('0x15')](_0x8647('0xa'),auth[_0x8647('0x9')](),controller[_0x8647('0x16')]);module[_0x8647('0x17')]=router;
\ No newline at end of file
+var _0x0fe8=['../../components/auth/service','../../components/interaction/service','../../config/environment','index','/:id','get','/:id/fields','getFields','/:id/subjects','isAuthenticated','getSubjects','/:id/descriptions','getDescriptions','create','put','delete','destroy','multer','util','path'];(function(_0x34aae7,_0xce8b26){var _0x393e42=function(_0x2249dd){while(--_0x2249dd){_0x34aae7['push'](_0x34aae7['shift']());}};_0x393e42(++_0xce8b26);}(_0x0fe8,0x89));var _0x80fe=function(_0x11700c,_0x269a51){_0x11700c=_0x11700c-0x0;var _0x2324f9=_0x0fe8[_0x11700c];return _0x2324f9;};'use strict';var multer=require(_0x80fe('0x0'));var util=require(_0x80fe('0x1'));var path=require(_0x80fe('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x80fe('0x3'));var interaction=require(_0x80fe('0x4'));var config=require(_0x80fe('0x5'));var controller=require('./intSalesforceConfiguration.controller');router['get']('/',auth['isAuthenticated'](),controller[_0x80fe('0x6')]);router['get'](_0x80fe('0x7'),auth['isAuthenticated'](),controller['show']);router[_0x80fe('0x8')](_0x80fe('0x9'),auth['isAuthenticated'](),controller[_0x80fe('0xa')]);router[_0x80fe('0x8')](_0x80fe('0xb'),auth[_0x80fe('0xc')](),controller[_0x80fe('0xd')]);router[_0x80fe('0x8')](_0x80fe('0xe'),auth['isAuthenticated'](),controller[_0x80fe('0xf')]);router['post']('/',auth[_0x80fe('0xc')](),controller[_0x80fe('0x10')]);router[_0x80fe('0x11')](_0x80fe('0x7'),auth['isAuthenticated'](),controller['update']);router[_0x80fe('0x12')](_0x80fe('0x7'),auth[_0x80fe('0xc')](),controller[_0x80fe('0x13')]);module['exports']=router;
\ No newline at end of file
index 7f334ef..3f5c00b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf323=['STRING','ENUM','contact_lead','contact','lead','exports'];(function(_0x44969c,_0x17151e){var _0x48afb3=function(_0x5e44f0){while(--_0x5e44f0){_0x44969c['push'](_0x44969c['shift']());}};_0x48afb3(++_0x17151e);}(_0xf323,0x65));var _0x3f32=function(_0x3e0dd4,_0x4341d8){_0x3e0dd4=_0x3e0dd4-0x0;var _0x126fcf=_0xf323[_0x3e0dd4];return _0x126fcf;};'use strict';var Sequelize=require('sequelize');module[_0x3f32('0x0')]={'name':{'type':Sequelize[_0x3f32('0x1')]},'description':{'type':Sequelize[_0x3f32('0x1')]},'moduleSearch':{'type':Sequelize[_0x3f32('0x2')](_0x3f32('0x3'),'contact','lead'),'defaultValue':_0x3f32('0x3')},'moduleCreate':{'type':Sequelize[_0x3f32('0x2')]('nothing',_0x3f32('0x4'),_0x3f32('0x5')),'defaultValue':'lead'}};
\ No newline at end of file
+var _0xe952=['lead','nothing','sequelize','exports','STRING','ENUM','contact_lead','contact'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xe952,0xca));var _0x2e95=function(_0x3cfada,_0x121949){_0x3cfada=_0x3cfada-0x0;var _0x2ea9ec=_0xe952[_0x3cfada];return _0x2ea9ec;};'use strict';var Sequelize=require(_0x2e95('0x0'));module[_0x2e95('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x2e95('0x2')]},'moduleSearch':{'type':Sequelize[_0x2e95('0x3')](_0x2e95('0x4'),_0x2e95('0x5'),_0x2e95('0x6')),'defaultValue':'contact_lead'},'moduleCreate':{'type':Sequelize['ENUM'](_0x2e95('0x7'),'contact',_0x2e95('0x6')),'defaultValue':_0x2e95('0x6')}};
\ No newline at end of file
index 70e4c94..c0351f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['limit','status','Content-Range','apply','reject','save','update','sendStatus','name','send','index','SalesforceConfiguration','rawAttributes','model','dateStart','query','dateEnd','keys','intersection','attributes','fields','length','nolimit','order','sort','where','filters','add','day','merge','filter','map','options','count','includeAll','rows','show','params','find','create','body','getFields','findOne','hasOwnProperty','getSubjects','SalesforceField','getDescriptions','pick','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','request','then','SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','debug','SalesforceConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','end','json','offset'];(function(_0x50991e,_0x232a05){var _0x168e29=function(_0x1972db){while(--_0x1972db){_0x50991e['push'](_0x50991e['shift']());}};_0x168e29(++_0x232a05);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4ea69d,_0x290f53){_0x4ea69d=_0x4ea69d-0x0;var _0x5318e0=_0xa9e0[_0x4ea69d];return _0x5318e0;};'use strict';var jsonpatch=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0a9e('0x3'));var path=require('path');var sox=require(_0x0a9e('0x4'));var csv=require(_0x0a9e('0x5'));var ejs=require(_0x0a9e('0x6'));var fs=require('fs');var _=require(_0x0a9e('0x7'));var squel=require(_0x0a9e('0x8'));var crypto=require('crypto');var jsforce=require(_0x0a9e('0x9'));var deskjs=require(_0x0a9e('0xa'));var toCsv=require(_0x0a9e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0a9e('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x0a9e('0xc'));var config=require(_0x0a9e('0xd'));var db=require(_0x0a9e('0xe'))['db'];var jayson=require(_0x0a9e('0xf'));var client=jayson[_0x0a9e('0x10')][_0x0a9e('0x11')]({'port':0x232a});function respondWithRpcPromise(_0x4a4c56,_0x50dfb2,_0x527cdd,_0x4cfe67){return new BPromise(function(_0x273d4d,_0x36471c){var _0xd5b662=_0x4cfe67||client;return _0xd5b662[_0x0a9e('0x12')](_0x4a4c56,_0x527cdd)[_0x0a9e('0x13')](function(_0x69aeb7){logger['info'](_0x0a9e('0x14'),_0x50dfb2,_0x0a9e('0x15'));logger[_0x0a9e('0x16')](_0x0a9e('0x17'),_0x50dfb2,_0x0a9e('0x15'),JSON[_0x0a9e('0x18')](_0x69aeb7));if(_0x69aeb7['error']){if(_0x69aeb7[_0x0a9e('0x19')]['code']===0x1f4){logger[_0x0a9e('0x19')]('SalesforceConfiguration,\x20%s,\x20%s',_0x50dfb2,_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);return _0x36471c(_0x69aeb7['error'][_0x0a9e('0x1a')]);}logger['error'](_0x0a9e('0x14'),_0x50dfb2,_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);return _0x273d4d(_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);}else{logger[_0x0a9e('0x1b')](_0x0a9e('0x14'),_0x50dfb2,_0x0a9e('0x15'));_0x273d4d(_0x69aeb7[_0x0a9e('0x1c')][_0x0a9e('0x1a')]);}})[_0x0a9e('0x1d')](function(_0x105080){logger['error'](_0x0a9e('0x14'),_0x50dfb2,_0x105080);_0x36471c(_0x105080);});});}function respondWithStatusCode(_0x155cce,_0x53682f){_0x53682f=_0x53682f||0xcc;return function(_0x20f109){if(_0x20f109){return _0x155cce['sendStatus'](_0x53682f);}return _0x155cce['status'](_0x53682f)[_0x0a9e('0x1e')]();};}function respondWithResult(_0x432e56,_0x38e7c4){_0x38e7c4=_0x38e7c4||0xc8;return function(_0x30bae6){if(_0x30bae6){return _0x432e56['status'](_0x38e7c4)[_0x0a9e('0x1f')](_0x30bae6);}};}function respondWithFilteredResult(_0x2fb0e4,_0x3b45bc){return function(_0x4d00e6){if(_0x4d00e6){var _0x370d86=_0x4d00e6['count'],_0x42ac8f=_0x3b45bc[_0x0a9e('0x20')],_0x16b1ca=_0x3b45bc[_0x0a9e('0x20')]+_0x3b45bc[_0x0a9e('0x21')],_0x5ea472;if(_0x16b1ca>=_0x370d86){_0x16b1ca=_0x370d86;_0x5ea472=0xc8;}else{_0x5ea472=0xce;}_0x2fb0e4[_0x0a9e('0x22')](_0x5ea472);return _0x2fb0e4['set'](_0x0a9e('0x23'),_0x42ac8f+'-'+_0x16b1ca+'/'+_0x370d86)['json'](_0x4d00e6);}return null;};}function patchUpdates(_0x45a1e7){return function(_0x5bfb33){try{jsonpatch[_0x0a9e('0x24')](_0x5bfb33,_0x45a1e7,!![]);}catch(_0x34dc65){return BPromise[_0x0a9e('0x25')](_0x34dc65);}return _0x5bfb33[_0x0a9e('0x26')]();};}function saveUpdates(_0x140511,_0x1538a4){return function(_0x11c3b6){if(_0x11c3b6){return _0x11c3b6[_0x0a9e('0x27')](_0x140511)['then'](function(_0x3652a7){return _0x3652a7;});}return null;};}function removeEntity(_0x468813,_0x2b1f27){return function(_0x2ec755){if(_0x2ec755){return _0x2ec755['destroy']()[_0x0a9e('0x13')](function(){_0x468813[_0x0a9e('0x22')](0xcc)[_0x0a9e('0x1e')]();});}};}function handleEntityNotFound(_0x824a4f,_0x58b06f){return function(_0x563b45){if(!_0x563b45){_0x824a4f[_0x0a9e('0x28')](0x194);}return _0x563b45;};}function handleError(_0x2e8759,_0x1dbde2){_0x1dbde2=_0x1dbde2||0x1f4;return function(_0x540530){logger[_0x0a9e('0x19')](_0x540530['stack']);if(_0x540530[_0x0a9e('0x29')]){delete _0x540530[_0x0a9e('0x29')];}_0x2e8759[_0x0a9e('0x22')](_0x1dbde2)[_0x0a9e('0x2a')](_0x540530);};}exports[_0x0a9e('0x2b')]=function(_0x5180f1,_0x66c1d2){var _0x46f0a5={},_0x40cb85={},_0x2da5c0={'count':0x0,'rows':[]};var _0x2b45ea=db[_0x0a9e('0x2c')][_0x0a9e('0x2d')];_0x40cb85[_0x0a9e('0x2e')]=_['keys'](_0x2b45ea);var _0x44295a={'dateStart':_0x5180f1['query'][_0x0a9e('0x2f')],'dateEnd':_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x31')]};delete _0x5180f1[_0x0a9e('0x30')]['dateStart'];delete _0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x31')];_0x40cb85[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x5180f1['query']);_0x40cb85['filters']=_[_0x0a9e('0x33')](_0x40cb85['model'],_0x40cb85[_0x0a9e('0x30')]);_0x46f0a5[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x40cb85[_0x0a9e('0x2e')],qs['fields'](_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x35')]));_0x46f0a5[_0x0a9e('0x34')]=_0x46f0a5['attributes'][_0x0a9e('0x36')]?_0x46f0a5[_0x0a9e('0x34')]:_0x40cb85[_0x0a9e('0x2e')];if(!_0x5180f1['query']['hasOwnProperty'](_0x0a9e('0x37'))){_0x46f0a5[_0x0a9e('0x21')]=qs['limit'](_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0x46f0a5[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x5180f1['query']['offset']);}_0x46f0a5[_0x0a9e('0x38')]=qs[_0x0a9e('0x39')](_0x5180f1['query'][_0x0a9e('0x39')]);_0x46f0a5[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x5180f1[_0x0a9e('0x30')],_0x40cb85[_0x0a9e('0x3b')]));if(_0x44295a[_0x0a9e('0x2f')]){if(_0x44295a[_0x0a9e('0x31')]){_0x44295a[_0x0a9e('0x31')]=moment(_0x44295a[_0x0a9e('0x31')])[_0x0a9e('0x3c')](0x1,_0x0a9e('0x3d'));}else{_0x44295a[_0x0a9e('0x31')]=moment(_0x44295a[_0x0a9e('0x2f')])[_0x0a9e('0x3c')](0x1,_0x0a9e('0x3d'));}_[_0x0a9e('0x3e')](_0x46f0a5[_0x0a9e('0x3a')],{'createdAt':{'$gte':_0x44295a[_0x0a9e('0x2f')],'$lte':_0x44295a['dateEnd']}});}if(_0x5180f1['query'][_0x0a9e('0x3f')]){_0x46f0a5[_0x0a9e('0x3a')]=_[_0x0a9e('0x3e')](_0x46f0a5[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x46f0a5[_0x0a9e('0x34')],function(_0x10b040){var _0x445e25={};_0x445e25[_0x10b040]={'$like':'%'+_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0x445e25;})});}_0x46f0a5=_[_0x0a9e('0x3e')]({},_0x46f0a5,_0x5180f1[_0x0a9e('0x41')]);var _0x5026aa={'where':_0x46f0a5[_0x0a9e('0x3a')]};return db[_0x0a9e('0x2c')][_0x0a9e('0x42')](_0x5026aa)[_0x0a9e('0x13')](function(_0x2e8caf){_0x2da5c0[_0x0a9e('0x42')]=_0x2e8caf;if(_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x43')]){_0x46f0a5['include']=[{'all':!![]}];}return db[_0x0a9e('0x2c')]['findAll'](_0x46f0a5);})[_0x0a9e('0x13')](function(_0x476688){_0x2da5c0[_0x0a9e('0x44')]=_0x476688;return _0x2da5c0;})['then'](respondWithFilteredResult(_0x66c1d2,_0x46f0a5))[_0x0a9e('0x1d')](handleError(_0x66c1d2,null));};exports[_0x0a9e('0x45')]=function(_0x4774f4,_0x34aa5a){var _0x45c845={'raw':![],'where':{'id':_0x4774f4[_0x0a9e('0x46')]['id']}},_0x37be73={};_0x37be73['model']=_[_0x0a9e('0x32')](db[_0x0a9e('0x2c')][_0x0a9e('0x2d')]);_0x37be73[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x4774f4[_0x0a9e('0x30')]);_0x37be73[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x37be73[_0x0a9e('0x2e')],_0x37be73['query']);_0x45c845[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x37be73['model'],qs['fields'](_0x4774f4['query'][_0x0a9e('0x35')]));_0x45c845[_0x0a9e('0x34')]=_0x45c845[_0x0a9e('0x34')][_0x0a9e('0x36')]?_0x45c845[_0x0a9e('0x34')]:_0x37be73[_0x0a9e('0x2e')];if(_0x4774f4[_0x0a9e('0x30')][_0x0a9e('0x43')]){_0x45c845['include']=[{'all':!![]}];}_0x45c845=_['merge']({},_0x45c845,_0x4774f4['options']);return db[_0x0a9e('0x2c')][_0x0a9e('0x47')](_0x45c845)[_0x0a9e('0x13')](handleEntityNotFound(_0x34aa5a,null))['then'](respondWithResult(_0x34aa5a,null))[_0x0a9e('0x1d')](handleError(_0x34aa5a,null));};exports[_0x0a9e('0x48')]=function(_0x53d113,_0x5a88da){return db[_0x0a9e('0x2c')]['create'](_0x53d113[_0x0a9e('0x49')],{})['then'](respondWithResult(_0x5a88da,0xc9))[_0x0a9e('0x1d')](handleError(_0x5a88da,null));};exports[_0x0a9e('0x27')]=function(_0x439340,_0x53613a){if(_0x439340[_0x0a9e('0x49')]['id']){delete _0x439340[_0x0a9e('0x49')]['id'];}return db['SalesforceConfiguration']['find']({'where':{'id':_0x439340[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x53613a,null))['then'](saveUpdates(_0x439340[_0x0a9e('0x49')],null))['then'](respondWithResult(_0x53613a,null))[_0x0a9e('0x1d')](handleError(_0x53613a,null));};exports['destroy']=function(_0xe22ccc,_0x4a6deb){return db['SalesforceConfiguration']['find']({'where':{'id':_0xe22ccc[_0x0a9e('0x46')]['id']}})['then'](handleEntityNotFound(_0x4a6deb,null))[_0x0a9e('0x13')](removeEntity(_0x4a6deb,null))[_0x0a9e('0x1d')](handleError(_0x4a6deb,null));};exports[_0x0a9e('0x4a')]=function(_0x19b4df,_0x232830,_0x272738){var _0xd10662={};var _0x28d814={};var _0x4e67ab;var _0x1c693e;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x19b4df[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x232830,null))[_0x0a9e('0x13')](function(_0x5d86e9){if(_0x5d86e9){_0x4e67ab=_0x5d86e9;_0x28d814[_0x0a9e('0x2e')]=_[_0x0a9e('0x32')](db['SalesforceField'][_0x0a9e('0x2d')]);_0x28d814['query']=_[_0x0a9e('0x32')](_0x19b4df['query']);_0x28d814['filters']=_['intersection'](_0x28d814[_0x0a9e('0x2e')],_0x28d814['query']);_0xd10662[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x28d814[_0x0a9e('0x2e')],qs[_0x0a9e('0x35')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x35')]));_0xd10662['attributes']=_0xd10662[_0x0a9e('0x34')]['length']?_0xd10662[_0x0a9e('0x34')]:_0x28d814[_0x0a9e('0x2e')];_0xd10662[_0x0a9e('0x38')]=qs['sort'](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x39')]);_0xd10662[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x19b4df[_0x0a9e('0x30')],_0x28d814[_0x0a9e('0x3b')]));if(_0x19b4df['query'][_0x0a9e('0x3f')]){_0xd10662[_0x0a9e('0x3a')]=_[_0x0a9e('0x3e')](_0xd10662[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0xd10662['attributes'],function(_0x176840){var _0x2937e0={};_0x2937e0[_0x176840]={'$like':'%'+_0x19b4df[_0x0a9e('0x30')]['filter']+'%'};return _0x2937e0;})});}_0xd10662=_[_0x0a9e('0x3e')]({},_0xd10662,_0x19b4df['options']);return _0x4e67ab['getFields'](_0xd10662);}})[_0x0a9e('0x13')](function(_0x4556c5){if(_0x4556c5){_0x1c693e=_0x4556c5[_0x0a9e('0x36')];if(!_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0xd10662[_0x0a9e('0x21')]=qs[_0x0a9e('0x21')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0xd10662[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x20')]);}return _0x4e67ab[_0x0a9e('0x4a')](_0xd10662);}})[_0x0a9e('0x13')](function(_0x2a28c0){if(_0x2a28c0){return _0x2a28c0?{'count':_0x1c693e,'rows':_0x2a28c0}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x232830,null))['catch'](handleError(_0x232830,null));};exports[_0x0a9e('0x4d')]=function(_0x295763,_0x243d12,_0x4edbb0){var _0x1148a1={};var _0x30944e={};var _0x4b341d;var _0x83f0b2;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x295763[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x243d12,null))['then'](function(_0x50cdce){if(_0x50cdce){_0x4b341d=_0x50cdce;_0x30944e['model']=_[_0x0a9e('0x32')](db[_0x0a9e('0x4e')][_0x0a9e('0x2d')]);_0x30944e[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x295763[_0x0a9e('0x30')]);_0x30944e[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x30944e['model'],_0x30944e[_0x0a9e('0x30')]);_0x1148a1[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x30944e['model'],qs[_0x0a9e('0x35')](_0x295763['query'][_0x0a9e('0x35')]));_0x1148a1[_0x0a9e('0x34')]=_0x1148a1['attributes'][_0x0a9e('0x36')]?_0x1148a1[_0x0a9e('0x34')]:_0x30944e[_0x0a9e('0x2e')];_0x1148a1[_0x0a9e('0x38')]=qs['sort'](_0x295763[_0x0a9e('0x30')][_0x0a9e('0x39')]);_0x1148a1[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x295763[_0x0a9e('0x30')],_0x30944e[_0x0a9e('0x3b')]));if(_0x295763[_0x0a9e('0x30')][_0x0a9e('0x3f')]){_0x1148a1['where']=_[_0x0a9e('0x3e')](_0x1148a1[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x1148a1[_0x0a9e('0x34')],function(_0x332367){var _0xdb98ca={};_0xdb98ca[_0x332367]={'$like':'%'+_0x295763[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0xdb98ca;})});}_0x1148a1=_[_0x0a9e('0x3e')]({},_0x1148a1,_0x295763[_0x0a9e('0x41')]);return _0x4b341d[_0x0a9e('0x4d')](_0x1148a1);}})[_0x0a9e('0x13')](function(_0x25744a){if(_0x25744a){_0x83f0b2=_0x25744a[_0x0a9e('0x36')];if(!_0x295763['query'][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0x1148a1[_0x0a9e('0x21')]=qs['limit'](_0x295763[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0x1148a1[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x295763['query']['offset']);}return _0x4b341d[_0x0a9e('0x4d')](_0x1148a1);}})[_0x0a9e('0x13')](function(_0x4c54fa){if(_0x4c54fa){return _0x4c54fa?{'count':_0x83f0b2,'rows':_0x4c54fa}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x243d12,null))['catch'](handleError(_0x243d12,null));};exports[_0x0a9e('0x4f')]=function(_0x8ebf02,_0x5637a1,_0x28a942){var _0x41cf12={};var _0x2d2286={};var _0x42b959;var _0x3755fe;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x8ebf02['params']['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x5637a1,null))[_0x0a9e('0x13')](function(_0x45c109){if(_0x45c109){_0x42b959=_0x45c109;_0x2d2286[_0x0a9e('0x2e')]=_['keys'](db[_0x0a9e('0x4e')][_0x0a9e('0x2d')]);_0x2d2286['query']=_[_0x0a9e('0x32')](_0x8ebf02['query']);_0x2d2286[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x2d2286[_0x0a9e('0x2e')],_0x2d2286[_0x0a9e('0x30')]);_0x41cf12['attributes']=_['intersection'](_0x2d2286[_0x0a9e('0x2e')],qs[_0x0a9e('0x35')](_0x8ebf02[_0x0a9e('0x30')]['fields']));_0x41cf12[_0x0a9e('0x34')]=_0x41cf12[_0x0a9e('0x34')]['length']?_0x41cf12['attributes']:_0x2d2286[_0x0a9e('0x2e')];_0x41cf12['order']=qs['sort'](_0x8ebf02['query'][_0x0a9e('0x39')]);_0x41cf12[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_[_0x0a9e('0x50')](_0x8ebf02[_0x0a9e('0x30')],_0x2d2286[_0x0a9e('0x3b')]));if(_0x8ebf02['query'][_0x0a9e('0x3f')]){_0x41cf12['where']=_[_0x0a9e('0x3e')](_0x41cf12[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x41cf12[_0x0a9e('0x34')],function(_0x50f8d7){var _0x46c9ac={};_0x46c9ac[_0x50f8d7]={'$like':'%'+_0x8ebf02[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0x46c9ac;})});}_0x41cf12=_['merge']({},_0x41cf12,_0x8ebf02[_0x0a9e('0x41')]);return _0x42b959[_0x0a9e('0x4f')](_0x41cf12);}})[_0x0a9e('0x13')](function(_0x22063c){if(_0x22063c){_0x3755fe=_0x22063c[_0x0a9e('0x36')];if(!_0x8ebf02[_0x0a9e('0x30')][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0x41cf12['limit']=qs[_0x0a9e('0x21')](_0x8ebf02[_0x0a9e('0x30')]['limit']);_0x41cf12[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x8ebf02[_0x0a9e('0x30')]['offset']);}return _0x42b959[_0x0a9e('0x4f')](_0x41cf12);}})['then'](function(_0x8c8fbe){if(_0x8c8fbe){return _0x8c8fbe?{'count':_0x3755fe,'rows':_0x8c8fbe}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x5637a1,null))[_0x0a9e('0x1d')](handleError(_0x5637a1,null));};
\ No newline at end of file
+var _0xa9e0=['limit','status','Content-Range','apply','reject','save','update','sendStatus','name','send','index','SalesforceConfiguration','rawAttributes','model','dateStart','query','dateEnd','keys','intersection','attributes','fields','length','nolimit','order','sort','where','filters','add','day','merge','filter','map','options','count','includeAll','rows','show','params','find','create','body','getFields','findOne','hasOwnProperty','getSubjects','SalesforceField','getDescriptions','pick','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','request','then','SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','debug','SalesforceConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','end','json','offset'];(function(_0x58cd9c,_0x584d3d){var _0x93fd95=function(_0x46baf0){while(--_0x46baf0){_0x58cd9c['push'](_0x58cd9c['shift']());}};_0x93fd95(++_0x584d3d);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4baae2,_0x487ab6){_0x4baae2=_0x4baae2-0x0;var _0x1a2285=_0xa9e0[_0x4baae2];return _0x1a2285;};'use strict';var jsonpatch=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0a9e('0x3'));var path=require('path');var sox=require(_0x0a9e('0x4'));var csv=require(_0x0a9e('0x5'));var ejs=require(_0x0a9e('0x6'));var fs=require('fs');var _=require(_0x0a9e('0x7'));var squel=require(_0x0a9e('0x8'));var crypto=require('crypto');var jsforce=require(_0x0a9e('0x9'));var deskjs=require(_0x0a9e('0xa'));var toCsv=require(_0x0a9e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0a9e('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x0a9e('0xc'));var config=require(_0x0a9e('0xd'));var db=require(_0x0a9e('0xe'))['db'];var jayson=require(_0x0a9e('0xf'));var client=jayson[_0x0a9e('0x10')][_0x0a9e('0x11')]({'port':0x232a});function respondWithRpcPromise(_0x4a4c56,_0x50dfb2,_0x527cdd,_0x4cfe67){return new BPromise(function(_0x273d4d,_0x36471c){var _0xd5b662=_0x4cfe67||client;return _0xd5b662[_0x0a9e('0x12')](_0x4a4c56,_0x527cdd)[_0x0a9e('0x13')](function(_0x69aeb7){logger['info'](_0x0a9e('0x14'),_0x50dfb2,_0x0a9e('0x15'));logger[_0x0a9e('0x16')](_0x0a9e('0x17'),_0x50dfb2,_0x0a9e('0x15'),JSON[_0x0a9e('0x18')](_0x69aeb7));if(_0x69aeb7['error']){if(_0x69aeb7[_0x0a9e('0x19')]['code']===0x1f4){logger[_0x0a9e('0x19')]('SalesforceConfiguration,\x20%s,\x20%s',_0x50dfb2,_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);return _0x36471c(_0x69aeb7['error'][_0x0a9e('0x1a')]);}logger['error'](_0x0a9e('0x14'),_0x50dfb2,_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);return _0x273d4d(_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);}else{logger[_0x0a9e('0x1b')](_0x0a9e('0x14'),_0x50dfb2,_0x0a9e('0x15'));_0x273d4d(_0x69aeb7[_0x0a9e('0x1c')][_0x0a9e('0x1a')]);}})[_0x0a9e('0x1d')](function(_0x105080){logger['error'](_0x0a9e('0x14'),_0x50dfb2,_0x105080);_0x36471c(_0x105080);});});}function respondWithStatusCode(_0x155cce,_0x53682f){_0x53682f=_0x53682f||0xcc;return function(_0x20f109){if(_0x20f109){return _0x155cce['sendStatus'](_0x53682f);}return _0x155cce['status'](_0x53682f)[_0x0a9e('0x1e')]();};}function respondWithResult(_0x432e56,_0x38e7c4){_0x38e7c4=_0x38e7c4||0xc8;return function(_0x30bae6){if(_0x30bae6){return _0x432e56['status'](_0x38e7c4)[_0x0a9e('0x1f')](_0x30bae6);}};}function respondWithFilteredResult(_0x2fb0e4,_0x3b45bc){return function(_0x4d00e6){if(_0x4d00e6){var _0x370d86=_0x4d00e6['count'],_0x42ac8f=_0x3b45bc[_0x0a9e('0x20')],_0x16b1ca=_0x3b45bc[_0x0a9e('0x20')]+_0x3b45bc[_0x0a9e('0x21')],_0x5ea472;if(_0x16b1ca>=_0x370d86){_0x16b1ca=_0x370d86;_0x5ea472=0xc8;}else{_0x5ea472=0xce;}_0x2fb0e4[_0x0a9e('0x22')](_0x5ea472);return _0x2fb0e4['set'](_0x0a9e('0x23'),_0x42ac8f+'-'+_0x16b1ca+'/'+_0x370d86)['json'](_0x4d00e6);}return null;};}function patchUpdates(_0x45a1e7){return function(_0x5bfb33){try{jsonpatch[_0x0a9e('0x24')](_0x5bfb33,_0x45a1e7,!![]);}catch(_0x34dc65){return BPromise[_0x0a9e('0x25')](_0x34dc65);}return _0x5bfb33[_0x0a9e('0x26')]();};}function saveUpdates(_0x140511,_0x1538a4){return function(_0x11c3b6){if(_0x11c3b6){return _0x11c3b6[_0x0a9e('0x27')](_0x140511)['then'](function(_0x3652a7){return _0x3652a7;});}return null;};}function removeEntity(_0x468813,_0x2b1f27){return function(_0x2ec755){if(_0x2ec755){return _0x2ec755['destroy']()[_0x0a9e('0x13')](function(){_0x468813[_0x0a9e('0x22')](0xcc)[_0x0a9e('0x1e')]();});}};}function handleEntityNotFound(_0x824a4f,_0x58b06f){return function(_0x563b45){if(!_0x563b45){_0x824a4f[_0x0a9e('0x28')](0x194);}return _0x563b45;};}function handleError(_0x2e8759,_0x1dbde2){_0x1dbde2=_0x1dbde2||0x1f4;return function(_0x540530){logger[_0x0a9e('0x19')](_0x540530['stack']);if(_0x540530[_0x0a9e('0x29')]){delete _0x540530[_0x0a9e('0x29')];}_0x2e8759[_0x0a9e('0x22')](_0x1dbde2)[_0x0a9e('0x2a')](_0x540530);};}exports[_0x0a9e('0x2b')]=function(_0x5180f1,_0x66c1d2){var _0x46f0a5={},_0x40cb85={},_0x2da5c0={'count':0x0,'rows':[]};var _0x2b45ea=db[_0x0a9e('0x2c')][_0x0a9e('0x2d')];_0x40cb85[_0x0a9e('0x2e')]=_['keys'](_0x2b45ea);var _0x44295a={'dateStart':_0x5180f1['query'][_0x0a9e('0x2f')],'dateEnd':_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x31')]};delete _0x5180f1[_0x0a9e('0x30')]['dateStart'];delete _0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x31')];_0x40cb85[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x5180f1['query']);_0x40cb85['filters']=_[_0x0a9e('0x33')](_0x40cb85['model'],_0x40cb85[_0x0a9e('0x30')]);_0x46f0a5[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x40cb85[_0x0a9e('0x2e')],qs['fields'](_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x35')]));_0x46f0a5[_0x0a9e('0x34')]=_0x46f0a5['attributes'][_0x0a9e('0x36')]?_0x46f0a5[_0x0a9e('0x34')]:_0x40cb85[_0x0a9e('0x2e')];if(!_0x5180f1['query']['hasOwnProperty'](_0x0a9e('0x37'))){_0x46f0a5[_0x0a9e('0x21')]=qs['limit'](_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0x46f0a5[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x5180f1['query']['offset']);}_0x46f0a5[_0x0a9e('0x38')]=qs[_0x0a9e('0x39')](_0x5180f1['query'][_0x0a9e('0x39')]);_0x46f0a5[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x5180f1[_0x0a9e('0x30')],_0x40cb85[_0x0a9e('0x3b')]));if(_0x44295a[_0x0a9e('0x2f')]){if(_0x44295a[_0x0a9e('0x31')]){_0x44295a[_0x0a9e('0x31')]=moment(_0x44295a[_0x0a9e('0x31')])[_0x0a9e('0x3c')](0x1,_0x0a9e('0x3d'));}else{_0x44295a[_0x0a9e('0x31')]=moment(_0x44295a[_0x0a9e('0x2f')])[_0x0a9e('0x3c')](0x1,_0x0a9e('0x3d'));}_[_0x0a9e('0x3e')](_0x46f0a5[_0x0a9e('0x3a')],{'createdAt':{'$gte':_0x44295a[_0x0a9e('0x2f')],'$lte':_0x44295a['dateEnd']}});}if(_0x5180f1['query'][_0x0a9e('0x3f')]){_0x46f0a5[_0x0a9e('0x3a')]=_[_0x0a9e('0x3e')](_0x46f0a5[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x46f0a5[_0x0a9e('0x34')],function(_0x10b040){var _0x445e25={};_0x445e25[_0x10b040]={'$like':'%'+_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0x445e25;})});}_0x46f0a5=_[_0x0a9e('0x3e')]({},_0x46f0a5,_0x5180f1[_0x0a9e('0x41')]);var _0x5026aa={'where':_0x46f0a5[_0x0a9e('0x3a')]};return db[_0x0a9e('0x2c')][_0x0a9e('0x42')](_0x5026aa)[_0x0a9e('0x13')](function(_0x2e8caf){_0x2da5c0[_0x0a9e('0x42')]=_0x2e8caf;if(_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x43')]){_0x46f0a5['include']=[{'all':!![]}];}return db[_0x0a9e('0x2c')]['findAll'](_0x46f0a5);})[_0x0a9e('0x13')](function(_0x476688){_0x2da5c0[_0x0a9e('0x44')]=_0x476688;return _0x2da5c0;})['then'](respondWithFilteredResult(_0x66c1d2,_0x46f0a5))[_0x0a9e('0x1d')](handleError(_0x66c1d2,null));};exports[_0x0a9e('0x45')]=function(_0x4774f4,_0x34aa5a){var _0x45c845={'raw':![],'where':{'id':_0x4774f4[_0x0a9e('0x46')]['id']}},_0x37be73={};_0x37be73['model']=_[_0x0a9e('0x32')](db[_0x0a9e('0x2c')][_0x0a9e('0x2d')]);_0x37be73[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x4774f4[_0x0a9e('0x30')]);_0x37be73[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x37be73[_0x0a9e('0x2e')],_0x37be73['query']);_0x45c845[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x37be73['model'],qs['fields'](_0x4774f4['query'][_0x0a9e('0x35')]));_0x45c845[_0x0a9e('0x34')]=_0x45c845[_0x0a9e('0x34')][_0x0a9e('0x36')]?_0x45c845[_0x0a9e('0x34')]:_0x37be73[_0x0a9e('0x2e')];if(_0x4774f4[_0x0a9e('0x30')][_0x0a9e('0x43')]){_0x45c845['include']=[{'all':!![]}];}_0x45c845=_['merge']({},_0x45c845,_0x4774f4['options']);return db[_0x0a9e('0x2c')][_0x0a9e('0x47')](_0x45c845)[_0x0a9e('0x13')](handleEntityNotFound(_0x34aa5a,null))['then'](respondWithResult(_0x34aa5a,null))[_0x0a9e('0x1d')](handleError(_0x34aa5a,null));};exports[_0x0a9e('0x48')]=function(_0x53d113,_0x5a88da){return db[_0x0a9e('0x2c')]['create'](_0x53d113[_0x0a9e('0x49')],{})['then'](respondWithResult(_0x5a88da,0xc9))[_0x0a9e('0x1d')](handleError(_0x5a88da,null));};exports[_0x0a9e('0x27')]=function(_0x439340,_0x53613a){if(_0x439340[_0x0a9e('0x49')]['id']){delete _0x439340[_0x0a9e('0x49')]['id'];}return db['SalesforceConfiguration']['find']({'where':{'id':_0x439340[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x53613a,null))['then'](saveUpdates(_0x439340[_0x0a9e('0x49')],null))['then'](respondWithResult(_0x53613a,null))[_0x0a9e('0x1d')](handleError(_0x53613a,null));};exports['destroy']=function(_0xe22ccc,_0x4a6deb){return db['SalesforceConfiguration']['find']({'where':{'id':_0xe22ccc[_0x0a9e('0x46')]['id']}})['then'](handleEntityNotFound(_0x4a6deb,null))[_0x0a9e('0x13')](removeEntity(_0x4a6deb,null))[_0x0a9e('0x1d')](handleError(_0x4a6deb,null));};exports[_0x0a9e('0x4a')]=function(_0x19b4df,_0x232830,_0x272738){var _0xd10662={};var _0x28d814={};var _0x4e67ab;var _0x1c693e;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x19b4df[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x232830,null))[_0x0a9e('0x13')](function(_0x5d86e9){if(_0x5d86e9){_0x4e67ab=_0x5d86e9;_0x28d814[_0x0a9e('0x2e')]=_[_0x0a9e('0x32')](db['SalesforceField'][_0x0a9e('0x2d')]);_0x28d814['query']=_[_0x0a9e('0x32')](_0x19b4df['query']);_0x28d814['filters']=_['intersection'](_0x28d814[_0x0a9e('0x2e')],_0x28d814['query']);_0xd10662[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x28d814[_0x0a9e('0x2e')],qs[_0x0a9e('0x35')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x35')]));_0xd10662['attributes']=_0xd10662[_0x0a9e('0x34')]['length']?_0xd10662[_0x0a9e('0x34')]:_0x28d814[_0x0a9e('0x2e')];_0xd10662[_0x0a9e('0x38')]=qs['sort'](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x39')]);_0xd10662[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x19b4df[_0x0a9e('0x30')],_0x28d814[_0x0a9e('0x3b')]));if(_0x19b4df['query'][_0x0a9e('0x3f')]){_0xd10662[_0x0a9e('0x3a')]=_[_0x0a9e('0x3e')](_0xd10662[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0xd10662['attributes'],function(_0x176840){var _0x2937e0={};_0x2937e0[_0x176840]={'$like':'%'+_0x19b4df[_0x0a9e('0x30')]['filter']+'%'};return _0x2937e0;})});}_0xd10662=_[_0x0a9e('0x3e')]({},_0xd10662,_0x19b4df['options']);return _0x4e67ab['getFields'](_0xd10662);}})[_0x0a9e('0x13')](function(_0x4556c5){if(_0x4556c5){_0x1c693e=_0x4556c5[_0x0a9e('0x36')];if(!_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0xd10662[_0x0a9e('0x21')]=qs[_0x0a9e('0x21')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0xd10662[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x20')]);}return _0x4e67ab[_0x0a9e('0x4a')](_0xd10662);}})[_0x0a9e('0x13')](function(_0x2a28c0){if(_0x2a28c0){return _0x2a28c0?{'count':_0x1c693e,'rows':_0x2a28c0}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x232830,null))['catch'](handleError(_0x232830,null));};exports[_0x0a9e('0x4d')]=function(_0x295763,_0x243d12,_0x4edbb0){var _0x1148a1={};var _0x30944e={};var _0x4b341d;var _0x83f0b2;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x295763[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x243d12,null))['then'](function(_0x50cdce){if(_0x50cdce){_0x4b341d=_0x50cdce;_0x30944e['model']=_[_0x0a9e('0x32')](db[_0x0a9e('0x4e')][_0x0a9e('0x2d')]);_0x30944e[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x295763[_0x0a9e('0x30')]);_0x30944e[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x30944e['model'],_0x30944e[_0x0a9e('0x30')]);_0x1148a1[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x30944e['model'],qs[_0x0a9e('0x35')](_0x295763['query'][_0x0a9e('0x35')]));_0x1148a1[_0x0a9e('0x34')]=_0x1148a1['attributes'][_0x0a9e('0x36')]?_0x1148a1[_0x0a9e('0x34')]:_0x30944e[_0x0a9e('0x2e')];_0x1148a1[_0x0a9e('0x38')]=qs['sort'](_0x295763[_0x0a9e('0x30')][_0x0a9e('0x39')]);_0x1148a1[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x295763[_0x0a9e('0x30')],_0x30944e[_0x0a9e('0x3b')]));if(_0x295763[_0x0a9e('0x30')][_0x0a9e('0x3f')]){_0x1148a1['where']=_[_0x0a9e('0x3e')](_0x1148a1[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x1148a1[_0x0a9e('0x34')],function(_0x332367){var _0xdb98ca={};_0xdb98ca[_0x332367]={'$like':'%'+_0x295763[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0xdb98ca;})});}_0x1148a1=_[_0x0a9e('0x3e')]({},_0x1148a1,_0x295763[_0x0a9e('0x41')]);return _0x4b341d[_0x0a9e('0x4d')](_0x1148a1);}})[_0x0a9e('0x13')](function(_0x25744a){if(_0x25744a){_0x83f0b2=_0x25744a[_0x0a9e('0x36')];if(!_0x295763['query'][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0x1148a1[_0x0a9e('0x21')]=qs['limit'](_0x295763[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0x1148a1[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x295763['query']['offset']);}return _0x4b341d[_0x0a9e('0x4d')](_0x1148a1);}})[_0x0a9e('0x13')](function(_0x4c54fa){if(_0x4c54fa){return _0x4c54fa?{'count':_0x83f0b2,'rows':_0x4c54fa}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x243d12,null))['catch'](handleError(_0x243d12,null));};exports[_0x0a9e('0x4f')]=function(_0x8ebf02,_0x5637a1,_0x28a942){var _0x41cf12={};var _0x2d2286={};var _0x42b959;var _0x3755fe;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x8ebf02['params']['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x5637a1,null))[_0x0a9e('0x13')](function(_0x45c109){if(_0x45c109){_0x42b959=_0x45c109;_0x2d2286[_0x0a9e('0x2e')]=_['keys'](db[_0x0a9e('0x4e')][_0x0a9e('0x2d')]);_0x2d2286['query']=_[_0x0a9e('0x32')](_0x8ebf02['query']);_0x2d2286[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x2d2286[_0x0a9e('0x2e')],_0x2d2286[_0x0a9e('0x30')]);_0x41cf12['attributes']=_['intersection'](_0x2d2286[_0x0a9e('0x2e')],qs[_0x0a9e('0x35')](_0x8ebf02[_0x0a9e('0x30')]['fields']));_0x41cf12[_0x0a9e('0x34')]=_0x41cf12[_0x0a9e('0x34')]['length']?_0x41cf12['attributes']:_0x2d2286[_0x0a9e('0x2e')];_0x41cf12['order']=qs['sort'](_0x8ebf02['query'][_0x0a9e('0x39')]);_0x41cf12[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_[_0x0a9e('0x50')](_0x8ebf02[_0x0a9e('0x30')],_0x2d2286[_0x0a9e('0x3b')]));if(_0x8ebf02['query'][_0x0a9e('0x3f')]){_0x41cf12['where']=_[_0x0a9e('0x3e')](_0x41cf12[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x41cf12[_0x0a9e('0x34')],function(_0x50f8d7){var _0x46c9ac={};_0x46c9ac[_0x50f8d7]={'$like':'%'+_0x8ebf02[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0x46c9ac;})});}_0x41cf12=_['merge']({},_0x41cf12,_0x8ebf02[_0x0a9e('0x41')]);return _0x42b959[_0x0a9e('0x4f')](_0x41cf12);}})[_0x0a9e('0x13')](function(_0x22063c){if(_0x22063c){_0x3755fe=_0x22063c[_0x0a9e('0x36')];if(!_0x8ebf02[_0x0a9e('0x30')][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0x41cf12['limit']=qs[_0x0a9e('0x21')](_0x8ebf02[_0x0a9e('0x30')]['limit']);_0x41cf12[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x8ebf02[_0x0a9e('0x30')]['offset']);}return _0x42b959[_0x0a9e('0x4f')](_0x41cf12);}})['then'](function(_0x8c8fbe){if(_0x8c8fbe){return _0x8c8fbe?{'count':_0x3755fe,'rows':_0x8c8fbe}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x5637a1,null))[_0x0a9e('0x1d')](handleError(_0x5637a1,null));};
\ No newline at end of file
index 2c23978..907aab8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b02=['bluebird','request-promise','./intSalesforceConfiguration.attributes','exports','define','util','../../config/logger','moment'];(function(_0x5cbaba,_0x5af6d6){var _0x195324=function(_0x21c410){while(--_0x21c410){_0x5cbaba['push'](_0x5cbaba['shift']());}};_0x195324(++_0x5af6d6);}(_0x4b02,0xcd));var _0x24b0=function(_0x4627da,_0x44a319){_0x4627da=_0x4627da-0x0;var _0x507e19=_0x4b02[_0x4627da];return _0x507e19;};'use strict';var _=require('lodash');var util=require(_0x24b0('0x0'));var logger=require(_0x24b0('0x1'))('api');var moment=require(_0x24b0('0x2'));var BPromise=require(_0x24b0('0x3'));var rp=require(_0x24b0('0x4'));var attributes=require(_0x24b0('0x5'));module[_0x24b0('0x6')]=function(_0x367deb,_0x332b51){return _0x367deb[_0x24b0('0x7')]('SalesforceConfiguration',attributes,{'tableName':'int_salesforce_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xbbec=['./intSalesforceConfiguration.attributes','define','SalesforceConfiguration','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x18a124,_0x38a2b){var _0x2cddf0=function(_0x147502){while(--_0x147502){_0x18a124['push'](_0x18a124['shift']());}};_0x2cddf0(++_0x38a2b);}(_0xbbec,0x85));var _0xcbbe=function(_0x6613b0,_0x625439){_0x6613b0=_0x6613b0-0x0;var _0x120602=_0xbbec[_0x6613b0];return _0x120602;};'use strict';var _=require(_0xcbbe('0x0'));var util=require(_0xcbbe('0x1'));var logger=require(_0xcbbe('0x2'))(_0xcbbe('0x3'));var moment=require(_0xcbbe('0x4'));var BPromise=require(_0xcbbe('0x5'));var rp=require(_0xcbbe('0x6'));var attributes=require(_0xcbbe('0x7'));module['exports']=function(_0x479e6d,_0x43e30c){return _0x479e6d[_0xcbbe('0x8')](_0xcbbe('0x9'),attributes,{'tableName':'int_salesforce_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index fe0fb21..b628b58 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5399=['then','info','SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','../../config/utils','../../config/logger','rpc','jayson/promise'];(function(_0x327a48,_0x2b3180){var _0x5d0b84=function(_0x3d74d7){while(--_0x3d74d7){_0x327a48['push'](_0x327a48['shift']());}};_0x5d0b84(++_0x2b3180);}(_0x5399,0xe2));var _0x9539=function(_0x1fc4b8,_0x56613e){_0x1fc4b8=_0x1fc4b8-0x0;var _0x160ab5=_0x5399[_0x1fc4b8];return _0x160ab5;};'use strict';var _=require(_0x9539('0x0'));var util=require(_0x9539('0x1'));var moment=require(_0x9539('0x2'));var BPromise=require(_0x9539('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x9539('0x4'));var logger=require(_0x9539('0x5'))(_0x9539('0x6'));var config=require('../../config/environment');var jayson=require(_0x9539('0x7'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x3c51e7,_0x393b4b,_0x1287b1){return new BPromise(function(_0x76860d,_0x483a94){return client['request'](_0x3c51e7,_0x1287b1)[_0x9539('0x8')](function(_0x596116){logger[_0x9539('0x9')](_0x9539('0xa'),_0x393b4b,_0x9539('0xb'));logger['debug']('SalesforceConfiguration,\x20%s,\x20%s,\x20%s',_0x393b4b,_0x9539('0xb'),JSON[_0x9539('0xc')](_0x596116));if(_0x596116['error']){if(_0x596116[_0x9539('0xd')][_0x9539('0xe')]===0x1f4){logger[_0x9539('0xd')]('SalesforceConfiguration,\x20%s,\x20%s',_0x393b4b,_0x596116['error'][_0x9539('0xf')]);return _0x483a94(_0x596116[_0x9539('0xd')][_0x9539('0xf')]);}logger[_0x9539('0xd')](_0x9539('0xa'),_0x393b4b,_0x596116['error'][_0x9539('0xf')]);return _0x76860d(_0x596116[_0x9539('0xd')]['message']);}else{logger[_0x9539('0x9')](_0x9539('0xa'),_0x393b4b,_0x9539('0xb'));_0x76860d(_0x596116[_0x9539('0x10')][_0x9539('0xf')]);}})[_0x9539('0x11')](function(_0x75ef27){logger[_0x9539('0xd')]('SalesforceConfiguration,\x20%s,\x20%s',_0x393b4b,_0x75ef27);_0x483a94(_0x75ef27);});});}
\ No newline at end of file
+var _0x5232=['result','catch','util','moment','randomstring','../../config/utils','../../config/logger','rpc','jayson/promise','client','request','then','request\x20sent','debug','SalesforceConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','SalesforceConfiguration,\x20%s,\x20%s','message','info'];(function(_0x2d55f0,_0x49a004){var _0x16eaa6=function(_0xd75d69){while(--_0xd75d69){_0x2d55f0['push'](_0x2d55f0['shift']());}};_0x16eaa6(++_0x49a004);}(_0x5232,0xbf));var _0x2523=function(_0x3b3210,_0x25e8ed){_0x3b3210=_0x3b3210-0x0;var _0x5b5484=_0x5232[_0x3b3210];return _0x5b5484;};'use strict';var _=require('lodash');var util=require(_0x2523('0x0'));var moment=require(_0x2523('0x1'));var BPromise=require('bluebird');var rs=require(_0x2523('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x2523('0x3'));var logger=require(_0x2523('0x4'))(_0x2523('0x5'));var config=require('../../config/environment');var jayson=require(_0x2523('0x6'));var client=jayson[_0x2523('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x57ec45,_0x2404c2,_0x994380){return new BPromise(function(_0x2108b5,_0x308917){return client[_0x2523('0x8')](_0x57ec45,_0x994380)[_0x2523('0x9')](function(_0xa152de){logger['info']('SalesforceConfiguration,\x20%s,\x20%s',_0x2404c2,_0x2523('0xa'));logger[_0x2523('0xb')](_0x2523('0xc'),_0x2404c2,'request\x20sent',JSON[_0x2523('0xd')](_0xa152de));if(_0xa152de[_0x2523('0xe')]){if(_0xa152de[_0x2523('0xe')][_0x2523('0xf')]===0x1f4){logger[_0x2523('0xe')](_0x2523('0x10'),_0x2404c2,_0xa152de[_0x2523('0xe')][_0x2523('0x11')]);return _0x308917(_0xa152de['error']['message']);}logger[_0x2523('0xe')](_0x2523('0x10'),_0x2404c2,_0xa152de['error'][_0x2523('0x11')]);return _0x2108b5(_0xa152de[_0x2523('0xe')][_0x2523('0x11')]);}else{logger[_0x2523('0x12')](_0x2523('0x10'),_0x2404c2,_0x2523('0xa'));_0x2108b5(_0xa152de[_0x2523('0x13')]['message']);}})[_0x2523('0x14')](function(_0x177348){logger['error'](_0x2523('0x10'),_0x2404c2,_0x177348);_0x308917(_0x177348);});});}
\ No newline at end of file
index eeb45b5..b7e8581 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3923=['path','express','Router','../../components/interaction/service','../../config/environment','./intSalesforceField.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','multer','util'];(function(_0x34bf6b,_0x267222){var _0x3d7c92=function(_0x11621f){while(--_0x11621f){_0x34bf6b['push'](_0x34bf6b['shift']());}};_0x3d7c92(++_0x267222);}(_0x3923,0x1ca));var _0x3392=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x3923[_0xa464c9];return _0x3d73c4;};'use strict';var multer=require(_0x3392('0x0'));var util=require(_0x3392('0x1'));var path=require(_0x3392('0x2'));var express=require(_0x3392('0x3'));var router=express[_0x3392('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x3392('0x5'));var config=require(_0x3392('0x6'));var controller=require(_0x3392('0x7'));router[_0x3392('0x8')]('/',auth[_0x3392('0x9')](),controller[_0x3392('0xa')]);router[_0x3392('0x8')](_0x3392('0xb'),auth[_0x3392('0x9')](),controller[_0x3392('0xc')]);router[_0x3392('0xd')]('/',auth[_0x3392('0x9')](),controller[_0x3392('0xe')]);router[_0x3392('0xf')](_0x3392('0xb'),auth[_0x3392('0x9')](),controller[_0x3392('0x10')]);router[_0x3392('0x11')](_0x3392('0xb'),auth[_0x3392('0x9')](),controller[_0x3392('0x12')]);module[_0x3392('0x13')]=router;
\ No newline at end of file
+var _0xf101=['exports','util','path','express','Router','../../components/auth/service','./intSalesforceField.controller','get','isAuthenticated','index','show','post','create','put','/:id','delete'];(function(_0x40a045,_0x516f0e){var _0x1a687c=function(_0x48c9fe){while(--_0x48c9fe){_0x40a045['push'](_0x40a045['shift']());}};_0x1a687c(++_0x516f0e);}(_0xf101,0x141));var _0x1f10=function(_0x250f95,_0x5a5728){_0x250f95=_0x250f95-0x0;var _0x4ada97=_0xf101[_0x250f95];return _0x4ada97;};'use strict';var multer=require('multer');var util=require(_0x1f10('0x0'));var path=require(_0x1f10('0x1'));var express=require(_0x1f10('0x2'));var router=express[_0x1f10('0x3')]();var auth=require(_0x1f10('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x1f10('0x5'));router[_0x1f10('0x6')]('/',auth[_0x1f10('0x7')](),controller[_0x1f10('0x8')]);router[_0x1f10('0x6')]('/:id',auth['isAuthenticated'](),controller[_0x1f10('0x9')]);router[_0x1f10('0xa')]('/',auth['isAuthenticated'](),controller[_0x1f10('0xb')]);router[_0x1f10('0xc')](_0x1f10('0xd'),auth[_0x1f10('0x7')](),controller['update']);router[_0x1f10('0xe')](_0x1f10('0xd'),auth['isAuthenticated'](),controller['destroy']);module[_0x1f10('0xf')]=router;
\ No newline at end of file
index 1f89530..2e93662 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a08=['ENUM','string','customVariable','variable','STRING','sequelize','exports'];(function(_0xfbdff6,_0x2af690){var _0x4cb9be=function(_0x4022d8){while(--_0x4022d8){_0xfbdff6['push'](_0xfbdff6['shift']());}};_0x4cb9be(++_0x2af690);}(_0x7a08,0x147));var _0x87a0=function(_0x5c3ea5,_0xa9ed0c){_0x5c3ea5=_0x5c3ea5-0x0;var _0x102b61=_0x7a08[_0x5c3ea5];return _0x102b61;};'use strict';var Sequelize=require(_0x87a0('0x0'));module[_0x87a0('0x1')]={'type':{'type':Sequelize[_0x87a0('0x2')](_0x87a0('0x3'),'variable',_0x87a0('0x4'),'keyValue'),'defaultValue':_0x87a0('0x3')},'content':{'type':Sequelize['STRING']},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x87a0('0x2')]('string',_0x87a0('0x5'),_0x87a0('0x4'))},'keyContent':{'type':Sequelize[_0x87a0('0x6')]},'idField':{'type':Sequelize[_0x87a0('0x6')]},'variableName':{'type':Sequelize[_0x87a0('0x6')]}};
\ No newline at end of file
+var _0xcc4f=['variable','keyValue','string','STRING','customVariable','ENUM'];(function(_0x531c9d,_0x3f77d8){var _0x1d37c1=function(_0x1f6b05){while(--_0x1f6b05){_0x531c9d['push'](_0x531c9d['shift']());}};_0x1d37c1(++_0x3f77d8);}(_0xcc4f,0x1c1));var _0xfcc4=function(_0x5b72c9,_0x2fb53d){_0x5b72c9=_0x5b72c9-0x0;var _0x462cb7=_0xcc4f[_0x5b72c9];return _0x462cb7;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0xfcc4('0x0')]('string',_0xfcc4('0x1'),'customVariable',_0xfcc4('0x2')),'defaultValue':_0xfcc4('0x3')},'content':{'type':Sequelize[_0xfcc4('0x4')]},'key':{'type':Sequelize[_0xfcc4('0x4')]},'keyType':{'type':Sequelize[_0xfcc4('0x0')]('string',_0xfcc4('0x1'),_0xfcc4('0x5'))},'keyContent':{'type':Sequelize[_0xfcc4('0x4')]},'idField':{'type':Sequelize[_0xfcc4('0x4')]},'variableName':{'type':Sequelize[_0xfcc4('0x4')]}};
\ No newline at end of file
index e9b0035..1edde95 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xad8b=['destroy','sendStatus','error','name','index','SalesforceField','rawAttributes','keys','dateStart','query','dateEnd','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','day','add','merge','map','filter','options','includeAll','include','findAll','rows','catch','show','params','create','body','find','fast-json-patch','request-promise','moment','bluebird','mustache','sox','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','end','json','count','offset','limit','status','set','Content-Range','apply','reject','save','update','then'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xad8b,0x13f));var _0xbad8=function(_0x519dc2,_0x3b8548){_0x519dc2=_0x519dc2-0x0;var _0x53b69a=_0xad8b[_0x519dc2];return _0x53b69a;};'use strict';var jsonpatch=require(_0xbad8('0x0'));var rp=require(_0xbad8('0x1'));var moment=require(_0xbad8('0x2'));var BPromise=require(_0xbad8('0x3'));var Mustache=require(_0xbad8('0x4'));var util=require('util');var path=require('path');var sox=require(_0xbad8('0x5'));var csv=require('to-csv');var ejs=require(_0xbad8('0x6'));var fs=require('fs');var _=require(_0xbad8('0x7'));var squel=require(_0xbad8('0x8'));var crypto=require(_0xbad8('0x9'));var jsforce=require(_0xbad8('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xbad8('0xb'));var Papa=require(_0xbad8('0xc'));var qs=require(_0xbad8('0xd'));var logger=require(_0xbad8('0xe'))('api');var utils=require(_0xbad8('0xf'));var config=require(_0xbad8('0x10'));var db=require(_0xbad8('0x11'))['db'];function respondWithStatusCode(_0x320ee2,_0x5eeb5a){_0x5eeb5a=_0x5eeb5a||0xcc;return function(_0x5a4385){if(_0x5a4385){return _0x320ee2['sendStatus'](_0x5eeb5a);}return _0x320ee2['status'](_0x5eeb5a)[_0xbad8('0x12')]();};}function respondWithResult(_0x379b85,_0x5d3d16){_0x5d3d16=_0x5d3d16||0xc8;return function(_0x18ec06){if(_0x18ec06){return _0x379b85['status'](_0x5d3d16)[_0xbad8('0x13')](_0x18ec06);}};}function respondWithFilteredResult(_0x268e9a,_0x17670c){return function(_0x2cf35f){if(_0x2cf35f){var _0x4ee136=_0x2cf35f[_0xbad8('0x14')],_0x38fbe3=_0x17670c[_0xbad8('0x15')],_0x38597e=_0x17670c[_0xbad8('0x15')]+_0x17670c[_0xbad8('0x16')],_0x380abe;if(_0x38597e>=_0x4ee136){_0x38597e=_0x4ee136;_0x380abe=0xc8;}else{_0x380abe=0xce;}_0x268e9a[_0xbad8('0x17')](_0x380abe);return _0x268e9a[_0xbad8('0x18')](_0xbad8('0x19'),_0x38fbe3+'-'+_0x38597e+'/'+_0x4ee136)[_0xbad8('0x13')](_0x2cf35f);}return null;};}function patchUpdates(_0x361e0b){return function(_0x31fb0c){try{jsonpatch[_0xbad8('0x1a')](_0x31fb0c,_0x361e0b,!![]);}catch(_0x382797){return BPromise[_0xbad8('0x1b')](_0x382797);}return _0x31fb0c[_0xbad8('0x1c')]();};}function saveUpdates(_0xec8484,_0x340554){return function(_0x511e9c){if(_0x511e9c){return _0x511e9c[_0xbad8('0x1d')](_0xec8484)[_0xbad8('0x1e')](function(_0xbb38d0){return _0xbb38d0;});}return null;};}function removeEntity(_0x3f1d29,_0x194b6f){return function(_0x22afee){if(_0x22afee){return _0x22afee[_0xbad8('0x1f')]()[_0xbad8('0x1e')](function(){_0x3f1d29[_0xbad8('0x17')](0xcc)[_0xbad8('0x12')]();});}};}function handleEntityNotFound(_0x1c895d,_0x381f90){return function(_0x59da9d){if(!_0x59da9d){_0x1c895d[_0xbad8('0x20')](0x194);}return _0x59da9d;};}function handleError(_0x54926e,_0x26cb9a){_0x26cb9a=_0x26cb9a||0x1f4;return function(_0xb86ffb){logger[_0xbad8('0x21')](_0xb86ffb['stack']);if(_0xb86ffb[_0xbad8('0x22')]){delete _0xb86ffb['name'];}_0x54926e['status'](_0x26cb9a)['send'](_0xb86ffb);};}exports[_0xbad8('0x23')]=function(_0x430690,_0x3cd94c){var _0x554df9={},_0x11359c={},_0x13cbe4={'count':0x0,'rows':[]};var _0x248c19=db[_0xbad8('0x24')][_0xbad8('0x25')];_0x11359c['model']=_[_0xbad8('0x26')](_0x248c19);var _0x57d043={'dateStart':_0x430690['query'][_0xbad8('0x27')],'dateEnd':_0x430690[_0xbad8('0x28')][_0xbad8('0x29')]};delete _0x430690[_0xbad8('0x28')]['dateStart'];delete _0x430690[_0xbad8('0x28')][_0xbad8('0x29')];_0x11359c[_0xbad8('0x28')]=_[_0xbad8('0x26')](_0x430690[_0xbad8('0x28')]);_0x11359c[_0xbad8('0x2a')]=_[_0xbad8('0x2b')](_0x11359c[_0xbad8('0x2c')],_0x11359c[_0xbad8('0x28')]);_0x554df9[_0xbad8('0x2d')]=_[_0xbad8('0x2b')](_0x11359c['model'],qs[_0xbad8('0x2e')](_0x430690[_0xbad8('0x28')]['fields']));_0x554df9['attributes']=_0x554df9['attributes'][_0xbad8('0x2f')]?_0x554df9[_0xbad8('0x2d')]:_0x11359c[_0xbad8('0x2c')];if(!_0x430690[_0xbad8('0x28')][_0xbad8('0x30')](_0xbad8('0x31'))){_0x554df9[_0xbad8('0x16')]=qs[_0xbad8('0x16')](_0x430690[_0xbad8('0x28')]['limit']);_0x554df9[_0xbad8('0x15')]=qs['offset'](_0x430690['query'][_0xbad8('0x15')]);}_0x554df9[_0xbad8('0x32')]=qs[_0xbad8('0x33')](_0x430690[_0xbad8('0x28')]['sort']);_0x554df9[_0xbad8('0x34')]=qs[_0xbad8('0x2a')](_[_0xbad8('0x35')](_0x430690[_0xbad8('0x28')],_0x11359c['filters']));if(_0x57d043['dateStart']){if(_0x57d043[_0xbad8('0x29')]){_0x57d043[_0xbad8('0x29')]=moment(_0x57d043[_0xbad8('0x29')])['add'](0x1,_0xbad8('0x36'));}else{_0x57d043[_0xbad8('0x29')]=moment(_0x57d043[_0xbad8('0x27')])[_0xbad8('0x37')](0x1,_0xbad8('0x36'));}_[_0xbad8('0x38')](_0x554df9[_0xbad8('0x34')],{'createdAt':{'$gte':_0x57d043[_0xbad8('0x27')],'$lte':_0x57d043[_0xbad8('0x29')]}});}if(_0x430690[_0xbad8('0x28')]['filter']){_0x554df9[_0xbad8('0x34')]=_['merge'](_0x554df9[_0xbad8('0x34')],{'$or':_[_0xbad8('0x39')](_0x554df9[_0xbad8('0x2d')],function(_0x1b43db){var _0x11f45e={};_0x11f45e[_0x1b43db]={'$like':'%'+_0x430690[_0xbad8('0x28')][_0xbad8('0x3a')]+'%'};return _0x11f45e;})});}_0x554df9=_[_0xbad8('0x38')]({},_0x554df9,_0x430690[_0xbad8('0x3b')]);var _0x40050e={'where':_0x554df9[_0xbad8('0x34')]};return db[_0xbad8('0x24')][_0xbad8('0x14')](_0x40050e)[_0xbad8('0x1e')](function(_0x469e04){_0x13cbe4['count']=_0x469e04;if(_0x430690[_0xbad8('0x28')][_0xbad8('0x3c')]){_0x554df9[_0xbad8('0x3d')]=[{'all':!![]}];}return db[_0xbad8('0x24')][_0xbad8('0x3e')](_0x554df9);})[_0xbad8('0x1e')](function(_0x575646){_0x13cbe4[_0xbad8('0x3f')]=_0x575646;return _0x13cbe4;})[_0xbad8('0x1e')](respondWithFilteredResult(_0x3cd94c,_0x554df9))[_0xbad8('0x40')](handleError(_0x3cd94c,null));};exports[_0xbad8('0x41')]=function(_0x50a2c6,_0x2b90a6){var _0x156a9a={'raw':!![],'where':{'id':_0x50a2c6[_0xbad8('0x42')]['id']}},_0x48d8b1={};_0x48d8b1[_0xbad8('0x2c')]=_[_0xbad8('0x26')](db[_0xbad8('0x24')][_0xbad8('0x25')]);_0x48d8b1[_0xbad8('0x28')]=_[_0xbad8('0x26')](_0x50a2c6[_0xbad8('0x28')]);_0x48d8b1[_0xbad8('0x2a')]=_[_0xbad8('0x2b')](_0x48d8b1['model'],_0x48d8b1[_0xbad8('0x28')]);_0x156a9a[_0xbad8('0x2d')]=_['intersection'](_0x48d8b1[_0xbad8('0x2c')],qs[_0xbad8('0x2e')](_0x50a2c6[_0xbad8('0x28')][_0xbad8('0x2e')]));_0x156a9a[_0xbad8('0x2d')]=_0x156a9a[_0xbad8('0x2d')][_0xbad8('0x2f')]?_0x156a9a[_0xbad8('0x2d')]:_0x48d8b1['model'];if(_0x50a2c6[_0xbad8('0x28')][_0xbad8('0x3c')]){_0x156a9a[_0xbad8('0x3d')]=[{'all':!![]}];}_0x156a9a=_['merge']({},_0x156a9a,_0x50a2c6['options']);return db[_0xbad8('0x24')]['find'](_0x156a9a)[_0xbad8('0x1e')](handleEntityNotFound(_0x2b90a6,null))['then'](respondWithResult(_0x2b90a6,null))[_0xbad8('0x40')](handleError(_0x2b90a6,null));};exports[_0xbad8('0x43')]=function(_0x25ce72,_0x1f0390){return db['SalesforceField']['create'](_0x25ce72[_0xbad8('0x44')],{})[_0xbad8('0x1e')](respondWithResult(_0x1f0390,0xc9))[_0xbad8('0x40')](handleError(_0x1f0390,null));};exports[_0xbad8('0x1d')]=function(_0x1630f1,_0x184b3b){if(_0x1630f1['body']['id']){delete _0x1630f1[_0xbad8('0x44')]['id'];}return db['SalesforceField'][_0xbad8('0x45')]({'where':{'id':_0x1630f1[_0xbad8('0x42')]['id']}})['then'](handleEntityNotFound(_0x184b3b,null))[_0xbad8('0x1e')](saveUpdates(_0x1630f1[_0xbad8('0x44')],null))[_0xbad8('0x1e')](respondWithResult(_0x184b3b,null))[_0xbad8('0x40')](handleError(_0x184b3b,null));};exports[_0xbad8('0x1f')]=function(_0x1e77b3,_0x520b7b){return db[_0xbad8('0x24')][_0xbad8('0x45')]({'where':{'id':_0x1e77b3[_0xbad8('0x42')]['id']}})['then'](handleEntityNotFound(_0x520b7b,null))[_0xbad8('0x1e')](removeEntity(_0x520b7b,null))[_0xbad8('0x40')](handleError(_0x520b7b,null));};
\ No newline at end of file
+var _0xfe12=['desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','limit','set','apply','reject','save','update','then','destroy','error','stack','send','SalesforceField','model','keys','query','dateEnd','dateStart','filters','attributes','fields','length','hasOwnProperty','nolimit','offset','order','sort','where','pick','day','add','merge','filter','map','count','include','findAll','catch','params','rawAttributes','intersection','includeAll','options','create','body','fast-json-patch','request-promise','moment','bluebird','util','path','to-csv','lodash','squel','crypto'];(function(_0x268d77,_0x31816e){var _0x447dce=function(_0x39783){while(--_0x39783){_0x268d77['push'](_0x268d77['shift']());}};_0x447dce(++_0x31816e);}(_0xfe12,0x140));var _0x2fe1=function(_0x33154d,_0x854047){_0x33154d=_0x33154d-0x0;var _0x3b2f03=_0xfe12[_0x33154d];return _0x3b2f03;};'use strict';var jsonpatch=require(_0x2fe1('0x0'));var rp=require(_0x2fe1('0x1'));var moment=require(_0x2fe1('0x2'));var BPromise=require(_0x2fe1('0x3'));var Mustache=require('mustache');var util=require(_0x2fe1('0x4'));var path=require(_0x2fe1('0x5'));var sox=require('sox');var csv=require(_0x2fe1('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x2fe1('0x7'));var squel=require(_0x2fe1('0x8'));var crypto=require(_0x2fe1('0x9'));var jsforce=require('jsforce');var deskjs=require(_0x2fe1('0xa'));var toCsv=require(_0x2fe1('0x6'));var querystring=require(_0x2fe1('0xb'));var Papa=require(_0x2fe1('0xc'));var qs=require(_0x2fe1('0xd'));var logger=require(_0x2fe1('0xe'))(_0x2fe1('0xf'));var utils=require(_0x2fe1('0x10'));var config=require('../../config/environment');var db=require(_0x2fe1('0x11'))['db'];function respondWithStatusCode(_0x10b976,_0x1f8b21){_0x1f8b21=_0x1f8b21||0xcc;return function(_0x4c0258){if(_0x4c0258){return _0x10b976[_0x2fe1('0x12')](_0x1f8b21);}return _0x10b976[_0x2fe1('0x13')](_0x1f8b21)[_0x2fe1('0x14')]();};}function respondWithResult(_0x361063,_0x3cd6da){_0x3cd6da=_0x3cd6da||0xc8;return function(_0x2dada4){if(_0x2dada4){return _0x361063[_0x2fe1('0x13')](_0x3cd6da)[_0x2fe1('0x15')](_0x2dada4);}};}function respondWithFilteredResult(_0x24775c,_0x174a27){return function(_0x212ff6){if(_0x212ff6){var _0x1dd89e=_0x212ff6['count'],_0x247d73=_0x174a27['offset'],_0x4e8425=_0x174a27['offset']+_0x174a27[_0x2fe1('0x16')],_0x1dbd20;if(_0x4e8425>=_0x1dd89e){_0x4e8425=_0x1dd89e;_0x1dbd20=0xc8;}else{_0x1dbd20=0xce;}_0x24775c[_0x2fe1('0x13')](_0x1dbd20);return _0x24775c[_0x2fe1('0x17')]('Content-Range',_0x247d73+'-'+_0x4e8425+'/'+_0x1dd89e)[_0x2fe1('0x15')](_0x212ff6);}return null;};}function patchUpdates(_0x3dd5de){return function(_0x7a8b86){try{jsonpatch[_0x2fe1('0x18')](_0x7a8b86,_0x3dd5de,!![]);}catch(_0x6cd842){return BPromise[_0x2fe1('0x19')](_0x6cd842);}return _0x7a8b86[_0x2fe1('0x1a')]();};}function saveUpdates(_0x1865fe,_0x202875){return function(_0x1ef2d5){if(_0x1ef2d5){return _0x1ef2d5[_0x2fe1('0x1b')](_0x1865fe)[_0x2fe1('0x1c')](function(_0x2abdab){return _0x2abdab;});}return null;};}function removeEntity(_0x57858d,_0x5d9f15){return function(_0x32243e){if(_0x32243e){return _0x32243e[_0x2fe1('0x1d')]()[_0x2fe1('0x1c')](function(){_0x57858d['status'](0xcc)[_0x2fe1('0x14')]();});}};}function handleEntityNotFound(_0x17454b,_0xa532bf){return function(_0x33d048){if(!_0x33d048){_0x17454b['sendStatus'](0x194);}return _0x33d048;};}function handleError(_0x4890c5,_0x2f169e){_0x2f169e=_0x2f169e||0x1f4;return function(_0x422f08){logger[_0x2fe1('0x1e')](_0x422f08[_0x2fe1('0x1f')]);if(_0x422f08['name']){delete _0x422f08['name'];}_0x4890c5[_0x2fe1('0x13')](_0x2f169e)[_0x2fe1('0x20')](_0x422f08);};}exports['index']=function(_0x26b21b,_0x5eeb97){var _0x3dbd71={},_0x3030e2={},_0xc0898a={'count':0x0,'rows':[]};var _0x2d8385=db[_0x2fe1('0x21')]['rawAttributes'];_0x3030e2[_0x2fe1('0x22')]=_[_0x2fe1('0x23')](_0x2d8385);var _0x50e470={'dateStart':_0x26b21b[_0x2fe1('0x24')]['dateStart'],'dateEnd':_0x26b21b[_0x2fe1('0x24')][_0x2fe1('0x25')]};delete _0x26b21b[_0x2fe1('0x24')][_0x2fe1('0x26')];delete _0x26b21b[_0x2fe1('0x24')][_0x2fe1('0x25')];_0x3030e2['query']=_[_0x2fe1('0x23')](_0x26b21b['query']);_0x3030e2[_0x2fe1('0x27')]=_['intersection'](_0x3030e2[_0x2fe1('0x22')],_0x3030e2['query']);_0x3dbd71[_0x2fe1('0x28')]=_['intersection'](_0x3030e2[_0x2fe1('0x22')],qs[_0x2fe1('0x29')](_0x26b21b['query'][_0x2fe1('0x29')]));_0x3dbd71[_0x2fe1('0x28')]=_0x3dbd71[_0x2fe1('0x28')][_0x2fe1('0x2a')]?_0x3dbd71[_0x2fe1('0x28')]:_0x3030e2['model'];if(!_0x26b21b['query'][_0x2fe1('0x2b')](_0x2fe1('0x2c'))){_0x3dbd71[_0x2fe1('0x16')]=qs[_0x2fe1('0x16')](_0x26b21b[_0x2fe1('0x24')][_0x2fe1('0x16')]);_0x3dbd71[_0x2fe1('0x2d')]=qs['offset'](_0x26b21b[_0x2fe1('0x24')]['offset']);}_0x3dbd71[_0x2fe1('0x2e')]=qs['sort'](_0x26b21b['query'][_0x2fe1('0x2f')]);_0x3dbd71[_0x2fe1('0x30')]=qs['filters'](_[_0x2fe1('0x31')](_0x26b21b[_0x2fe1('0x24')],_0x3030e2[_0x2fe1('0x27')]));if(_0x50e470[_0x2fe1('0x26')]){if(_0x50e470[_0x2fe1('0x25')]){_0x50e470[_0x2fe1('0x25')]=moment(_0x50e470[_0x2fe1('0x25')])['add'](0x1,_0x2fe1('0x32'));}else{_0x50e470['dateEnd']=moment(_0x50e470['dateStart'])[_0x2fe1('0x33')](0x1,'day');}_[_0x2fe1('0x34')](_0x3dbd71[_0x2fe1('0x30')],{'createdAt':{'$gte':_0x50e470[_0x2fe1('0x26')],'$lte':_0x50e470[_0x2fe1('0x25')]}});}if(_0x26b21b[_0x2fe1('0x24')][_0x2fe1('0x35')]){_0x3dbd71[_0x2fe1('0x30')]=_[_0x2fe1('0x34')](_0x3dbd71[_0x2fe1('0x30')],{'$or':_[_0x2fe1('0x36')](_0x3dbd71['attributes'],function(_0x48de67){var _0x1271ed={};_0x1271ed[_0x48de67]={'$like':'%'+_0x26b21b[_0x2fe1('0x24')][_0x2fe1('0x35')]+'%'};return _0x1271ed;})});}_0x3dbd71=_[_0x2fe1('0x34')]({},_0x3dbd71,_0x26b21b['options']);var _0x30a790={'where':_0x3dbd71[_0x2fe1('0x30')]};return db[_0x2fe1('0x21')][_0x2fe1('0x37')](_0x30a790)[_0x2fe1('0x1c')](function(_0xf942a6){_0xc0898a['count']=_0xf942a6;if(_0x26b21b[_0x2fe1('0x24')]['includeAll']){_0x3dbd71[_0x2fe1('0x38')]=[{'all':!![]}];}return db[_0x2fe1('0x21')][_0x2fe1('0x39')](_0x3dbd71);})[_0x2fe1('0x1c')](function(_0x1aa172){_0xc0898a['rows']=_0x1aa172;return _0xc0898a;})['then'](respondWithFilteredResult(_0x5eeb97,_0x3dbd71))[_0x2fe1('0x3a')](handleError(_0x5eeb97,null));};exports['show']=function(_0x36e2c0,_0x13d053){var _0x475ad7={'raw':!![],'where':{'id':_0x36e2c0[_0x2fe1('0x3b')]['id']}},_0x283338={};_0x283338[_0x2fe1('0x22')]=_['keys'](db['SalesforceField'][_0x2fe1('0x3c')]);_0x283338[_0x2fe1('0x24')]=_[_0x2fe1('0x23')](_0x36e2c0['query']);_0x283338[_0x2fe1('0x27')]=_[_0x2fe1('0x3d')](_0x283338[_0x2fe1('0x22')],_0x283338[_0x2fe1('0x24')]);_0x475ad7[_0x2fe1('0x28')]=_['intersection'](_0x283338[_0x2fe1('0x22')],qs[_0x2fe1('0x29')](_0x36e2c0[_0x2fe1('0x24')][_0x2fe1('0x29')]));_0x475ad7[_0x2fe1('0x28')]=_0x475ad7[_0x2fe1('0x28')][_0x2fe1('0x2a')]?_0x475ad7['attributes']:_0x283338[_0x2fe1('0x22')];if(_0x36e2c0['query'][_0x2fe1('0x3e')]){_0x475ad7[_0x2fe1('0x38')]=[{'all':!![]}];}_0x475ad7=_['merge']({},_0x475ad7,_0x36e2c0[_0x2fe1('0x3f')]);return db[_0x2fe1('0x21')]['find'](_0x475ad7)['then'](handleEntityNotFound(_0x13d053,null))[_0x2fe1('0x1c')](respondWithResult(_0x13d053,null))[_0x2fe1('0x3a')](handleError(_0x13d053,null));};exports[_0x2fe1('0x40')]=function(_0x669b6a,_0x22386d){return db[_0x2fe1('0x21')][_0x2fe1('0x40')](_0x669b6a['body'],{})['then'](respondWithResult(_0x22386d,0xc9))[_0x2fe1('0x3a')](handleError(_0x22386d,null));};exports[_0x2fe1('0x1b')]=function(_0x4b8af8,_0x48ece6){if(_0x4b8af8[_0x2fe1('0x41')]['id']){delete _0x4b8af8[_0x2fe1('0x41')]['id'];}return db['SalesforceField']['find']({'where':{'id':_0x4b8af8[_0x2fe1('0x3b')]['id']}})[_0x2fe1('0x1c')](handleEntityNotFound(_0x48ece6,null))[_0x2fe1('0x1c')](saveUpdates(_0x4b8af8['body'],null))[_0x2fe1('0x1c')](respondWithResult(_0x48ece6,null))[_0x2fe1('0x3a')](handleError(_0x48ece6,null));};exports[_0x2fe1('0x1d')]=function(_0x1571fc,_0x1e63fd){return db[_0x2fe1('0x21')]['find']({'where':{'id':_0x1571fc[_0x2fe1('0x3b')]['id']}})[_0x2fe1('0x1c')](handleEntityNotFound(_0x1e63fd,null))[_0x2fe1('0x1c')](removeEntity(_0x1e63fd,null))['catch'](handleError(_0x1e63fd,null));};
\ No newline at end of file
index 1aa2343..25478e8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ab2=['moment','bluebird','request-promise','SalesforceField','lodash','util','../../config/logger'];(function(_0x58afd5,_0x534a48){var _0x3e503b=function(_0x27ba44){while(--_0x27ba44){_0x58afd5['push'](_0x58afd5['shift']());}};_0x3e503b(++_0x534a48);}(_0x8ab2,0x89));var _0x28ab=function(_0x354b00,_0xf23517){_0x354b00=_0x354b00-0x0;var _0x5d8eb8=_0x8ab2[_0x354b00];return _0x5d8eb8;};'use strict';var _=require(_0x28ab('0x0'));var util=require(_0x28ab('0x1'));var logger=require(_0x28ab('0x2'))('api');var moment=require(_0x28ab('0x3'));var BPromise=require(_0x28ab('0x4'));var rp=require(_0x28ab('0x5'));var attributes=require('./intSalesforceField.attributes');module['exports']=function(_0x41aeec,_0x945a10){return _0x41aeec['define'](_0x28ab('0x6'),attributes,{'tableName':'int_salesforce_fields','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xbabb=['api','moment','bluebird','request-promise','./intSalesforceField.attributes','exports','define','SalesforceField','int_salesforce_fields','lodash','util'];(function(_0x3ef751,_0x2a0b2e){var _0x2cd7c1=function(_0x38e4fc){while(--_0x38e4fc){_0x3ef751['push'](_0x3ef751['shift']());}};_0x2cd7c1(++_0x2a0b2e);}(_0xbabb,0x106));var _0xbbab=function(_0x2c71c5,_0xdbf1d5){_0x2c71c5=_0x2c71c5-0x0;var _0x188cea=_0xbabb[_0x2c71c5];return _0x188cea;};'use strict';var _=require(_0xbbab('0x0'));var util=require(_0xbbab('0x1'));var logger=require('../../config/logger')(_0xbbab('0x2'));var moment=require(_0xbbab('0x3'));var BPromise=require(_0xbbab('0x4'));var rp=require(_0xbbab('0x5'));var attributes=require(_0xbbab('0x6'));module[_0xbbab('0x7')]=function(_0x4e661e,_0x2f46eb){return _0x4e661e[_0xbbab('0x8')](_0xbbab('0x9'),attributes,{'tableName':_0xbbab('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2f12d65..75d69d1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xab48=['lodash','util','bluebird','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','request\x20sent','debug','stringify','error','code','message','SalesforceField,\x20%s,\x20%s','info','result','catch'];(function(_0x2949e1,_0x5c9e59){var _0x2fc3b7=function(_0x1d130b){while(--_0x1d130b){_0x2949e1['push'](_0x2949e1['shift']());}};_0x2fc3b7(++_0x5c9e59);}(_0xab48,0x18c));var _0x8ab4=function(_0x3450d6,_0x2cb5b8){_0x3450d6=_0x3450d6-0x0;var _0x596bdd=_0xab48[_0x3450d6];return _0x596bdd;};'use strict';var _=require(_0x8ab4('0x0'));var util=require(_0x8ab4('0x1'));var moment=require('moment');var BPromise=require(_0x8ab4('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x8ab4('0x3'))['db'];var utils=require(_0x8ab4('0x4'));var logger=require('../../config/logger')(_0x8ab4('0x5'));var config=require(_0x8ab4('0x6'));var jayson=require(_0x8ab4('0x7'));var client=jayson[_0x8ab4('0x8')][_0x8ab4('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x57ee17,_0x53a0ce,_0x4b53ed){return new BPromise(function(_0x105b45,_0x4ef99d){return client[_0x8ab4('0xa')](_0x57ee17,_0x4b53ed)[_0x8ab4('0xb')](function(_0x3bae1d){logger['info']('SalesforceField,\x20%s,\x20%s',_0x53a0ce,_0x8ab4('0xc'));logger[_0x8ab4('0xd')]('SalesforceField,\x20%s,\x20%s,\x20%s',_0x53a0ce,_0x8ab4('0xc'),JSON[_0x8ab4('0xe')](_0x3bae1d));if(_0x3bae1d[_0x8ab4('0xf')]){if(_0x3bae1d[_0x8ab4('0xf')][_0x8ab4('0x10')]===0x1f4){logger[_0x8ab4('0xf')]('SalesforceField,\x20%s,\x20%s',_0x53a0ce,_0x3bae1d[_0x8ab4('0xf')][_0x8ab4('0x11')]);return _0x4ef99d(_0x3bae1d[_0x8ab4('0xf')][_0x8ab4('0x11')]);}logger['error'](_0x8ab4('0x12'),_0x53a0ce,_0x3bae1d['error'][_0x8ab4('0x11')]);return _0x105b45(_0x3bae1d['error']['message']);}else{logger[_0x8ab4('0x13')]('SalesforceField,\x20%s,\x20%s',_0x53a0ce,_0x8ab4('0xc'));_0x105b45(_0x3bae1d[_0x8ab4('0x14')][_0x8ab4('0x11')]);}})[_0x8ab4('0x15')](function(_0xe912e7){logger['error'](_0x8ab4('0x12'),_0x53a0ce,_0xe912e7);_0x4ef99d(_0xe912e7);});});}
\ No newline at end of file
+var _0xcb65=['request','then','info','SalesforceField,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','../../config/logger','rpc','../../config/environment','jayson/promise','http'];(function(_0x1167cd,_0x3fbb2a){var _0x5947c4=function(_0x1cb548){while(--_0x1cb548){_0x1167cd['push'](_0x1167cd['shift']());}};_0x5947c4(++_0x3fbb2a);}(_0xcb65,0x1c5));var _0x5cb6=function(_0x35644c,_0x3c80a0){_0x35644c=_0x35644c-0x0;var _0xc2e514=_0xcb65[_0x35644c];return _0xc2e514;};'use strict';var _=require(_0x5cb6('0x0'));var util=require(_0x5cb6('0x1'));var moment=require(_0x5cb6('0x2'));var BPromise=require(_0x5cb6('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x5cb6('0x4'))(_0x5cb6('0x5'));var config=require(_0x5cb6('0x6'));var jayson=require(_0x5cb6('0x7'));var client=jayson['client'][_0x5cb6('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x3ad37d,_0x4978b3,_0x13522c){return new BPromise(function(_0x3b24e4,_0x1c80c0){return client[_0x5cb6('0x9')](_0x3ad37d,_0x13522c)[_0x5cb6('0xa')](function(_0x484678){logger[_0x5cb6('0xb')](_0x5cb6('0xc'),_0x4978b3,_0x5cb6('0xd'));logger[_0x5cb6('0xe')]('SalesforceField,\x20%s,\x20%s,\x20%s',_0x4978b3,_0x5cb6('0xd'),JSON[_0x5cb6('0xf')](_0x484678));if(_0x484678[_0x5cb6('0x10')]){if(_0x484678[_0x5cb6('0x10')][_0x5cb6('0x11')]===0x1f4){logger[_0x5cb6('0x10')](_0x5cb6('0xc'),_0x4978b3,_0x484678[_0x5cb6('0x10')][_0x5cb6('0x12')]);return _0x1c80c0(_0x484678[_0x5cb6('0x10')][_0x5cb6('0x12')]);}logger[_0x5cb6('0x10')](_0x5cb6('0xc'),_0x4978b3,_0x484678[_0x5cb6('0x10')]['message']);return _0x3b24e4(_0x484678[_0x5cb6('0x10')][_0x5cb6('0x12')]);}else{logger[_0x5cb6('0xb')](_0x5cb6('0xc'),_0x4978b3,_0x5cb6('0xd'));_0x3b24e4(_0x484678[_0x5cb6('0x13')][_0x5cb6('0x12')]);}})[_0x5cb6('0x14')](function(_0x384683){logger['error'](_0x5cb6('0xc'),_0x4978b3,_0x384683);_0x1c80c0(_0x384683);});});}
\ No newline at end of file
index 671b67c..884be98 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x638a=['multer','util','path','express','../../components/auth/service','../../components/interaction/service','./intSugarcrmAccount.controller','get','index','/:id','isAuthenticated','show','/:id/configurations','getConfigurations','getFields','create','post','addConfiguration','put','update','delete','destroy','exports'];(function(_0x1fcec0,_0x26a47a){var _0x5561b5=function(_0x27a337){while(--_0x27a337){_0x1fcec0['push'](_0x1fcec0['shift']());}};_0x5561b5(++_0x26a47a);}(_0x638a,0x1cc));var _0xa638=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x638a[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0xa638('0x0'));var util=require(_0xa638('0x1'));var path=require(_0xa638('0x2'));var express=require(_0xa638('0x3'));var router=express['Router']();var auth=require(_0xa638('0x4'));var interaction=require(_0xa638('0x5'));var config=require('../../config/environment');var controller=require(_0xa638('0x6'));router[_0xa638('0x7')]('/',auth['isAuthenticated'](),controller[_0xa638('0x8')]);router[_0xa638('0x7')](_0xa638('0x9'),auth[_0xa638('0xa')](),controller[_0xa638('0xb')]);router['get'](_0xa638('0xc'),auth[_0xa638('0xa')](),controller[_0xa638('0xd')]);router[_0xa638('0x7')]('/:id/fields',auth[_0xa638('0xa')](),controller[_0xa638('0xe')]);router['post']('/',auth['isAuthenticated'](),controller[_0xa638('0xf')]);router[_0xa638('0x10')](_0xa638('0xc'),auth['isAuthenticated'](),controller[_0xa638('0x11')]);router[_0xa638('0x12')]('/:id',auth[_0xa638('0xa')](),controller[_0xa638('0x13')]);router[_0xa638('0x14')](_0xa638('0x9'),auth['isAuthenticated'](),controller[_0xa638('0x15')]);module[_0xa638('0x16')]=router;
\ No newline at end of file
+var _0x0504=['put','/:id','update','exports','multer','util','express','Router','../../components/auth/service','../../config/environment','./intSugarcrmAccount.controller','isAuthenticated','index','get','show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','create'];(function(_0xc5d10e,_0x2d0e97){var _0x56b61d=function(_0x5ab21f){while(--_0x5ab21f){_0xc5d10e['push'](_0xc5d10e['shift']());}};_0x56b61d(++_0x2d0e97);}(_0x0504,0x154));var _0x4050=function(_0x50a0c2,_0x4befab){_0x50a0c2=_0x50a0c2-0x0;var _0x5ebadd=_0x0504[_0x50a0c2];return _0x5ebadd;};'use strict';var multer=require(_0x4050('0x0'));var util=require(_0x4050('0x1'));var path=require('path');var express=require(_0x4050('0x2'));var router=express[_0x4050('0x3')]();var auth=require(_0x4050('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x4050('0x5'));var controller=require(_0x4050('0x6'));router['get']('/',auth[_0x4050('0x7')](),controller[_0x4050('0x8')]);router[_0x4050('0x9')]('/:id',auth[_0x4050('0x7')](),controller[_0x4050('0xa')]);router['get'](_0x4050('0xb'),auth['isAuthenticated'](),controller[_0x4050('0xc')]);router[_0x4050('0x9')](_0x4050('0xd'),auth[_0x4050('0x7')](),controller[_0x4050('0xe')]);router[_0x4050('0xf')]('/',auth[_0x4050('0x7')](),controller[_0x4050('0x10')]);router['post'](_0x4050('0xb'),auth[_0x4050('0x7')](),controller['addConfiguration']);router[_0x4050('0x11')](_0x4050('0x12'),auth[_0x4050('0x7')](),controller[_0x4050('0x13')]);router['delete'](_0x4050('0x12'),auth[_0x4050('0x7')](),controller['destroy']);module[_0x4050('0x14')]=router;
\ No newline at end of file
index f6bb686..562e5b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa78=['sequelize','exports','STRING','remoteUri'];(function(_0x445101,_0x2414bf){var _0x3c3d04=function(_0x249067){while(--_0x249067){_0x445101['push'](_0x445101['shift']());}};_0x3c3d04(++_0x2414bf);}(_0xaa78,0x158));var _0x8aa7=function(_0x27a5bb,_0x3f4cfb){_0x27a5bb=_0x27a5bb-0x0;var _0x2e17ea=_0xaa78[_0x27a5bb];return _0x2e17ea;};'use strict';var Sequelize=require(_0x8aa7('0x0'));module[_0x8aa7('0x1')]={'name':{'type':Sequelize[_0x8aa7('0x2')]},'description':{'type':Sequelize[_0x8aa7('0x2')]},'username':{'type':Sequelize[_0x8aa7('0x2')],'unique':'username'},'password':{'type':Sequelize[_0x8aa7('0x2')]},'remoteUri':{'type':Sequelize['STRING'],'unique':_0x8aa7('0x3')},'serverUrl':{'type':Sequelize[_0x8aa7('0x2')]}};
\ No newline at end of file
+var _0xeb0b=['remoteUri','sequelize','exports','STRING'];(function(_0x4255cf,_0x1d4e86){var _0x422de4=function(_0x46b2da){while(--_0x46b2da){_0x4255cf['push'](_0x4255cf['shift']());}};_0x422de4(++_0x1d4e86);}(_0xeb0b,0x1bd));var _0xbeb0=function(_0x618414,_0x1a7a60){_0x618414=_0x618414-0x0;var _0x21c19a=_0xeb0b[_0x618414];return _0x21c19a;};'use strict';var Sequelize=require(_0xbeb0('0x0'));module[_0xbeb0('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xbeb0('0x2')]},'username':{'type':Sequelize['STRING'],'unique':'username'},'password':{'type':Sequelize[_0xbeb0('0x2')]},'remoteUri':{'type':Sequelize[_0xbeb0('0x2')],'unique':_0xbeb0('0x3')},'serverUrl':{'type':Sequelize[_0xbeb0('0x2')]}};
\ No newline at end of file
index a0edc0c..a0f530f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe5e6=['send','SugarcrmAccount','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','hasOwnProperty','order','sort','where','pick','add','day','merge','map','filter','options','count','includeAll','include','findAll','rows','catch','params','length','find','create','body','getConfigurations','SugarcrmConfiguration','nolimit','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','getDescriptions','type','SugarcrmField','getFields','findOne','password','remoteUri','POST','%s%s','/service/v4_1/rest.php','JSON','username','PLAIN','xCALLY\x20Motion\x20Integration','get_module_fields','Calls','module_fields','label','endsWith','value','test','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','statusCode','fast-json-patch','moment','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','then','info','SugarcrmAccount,\x20%s,\x20%s','request\x20sent','SugarcrmAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','sendStatus','end','status','json','offset','limit','set','apply','reject','save','update','destroy','stack','name'];(function(_0x49da79,_0x1cc45b){var _0x2dfd8d=function(_0x19a5e9){while(--_0x19a5e9){_0x49da79['push'](_0x49da79['shift']());}};_0x2dfd8d(++_0x1cc45b);}(_0xe5e6,0x193));var _0x6e5e=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xe5e6[_0x321bb2];return _0x9c12ed;};'use strict';var jsonpatch=require(_0x6e5e('0x0'));var rp=require('request-promise');var moment=require(_0x6e5e('0x1'));var BPromise=require(_0x6e5e('0x2'));var Mustache=require('mustache');var util=require('util');var path=require(_0x6e5e('0x3'));var sox=require(_0x6e5e('0x4'));var csv=require(_0x6e5e('0x5'));var ejs=require(_0x6e5e('0x6'));var fs=require('fs');var _=require(_0x6e5e('0x7'));var squel=require(_0x6e5e('0x8'));var crypto=require(_0x6e5e('0x9'));var jsforce=require(_0x6e5e('0xa'));var deskjs=require(_0x6e5e('0xb'));var toCsv=require(_0x6e5e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x6e5e('0xc'));var logger=require(_0x6e5e('0xd'))('api');var utils=require(_0x6e5e('0xe'));var config=require(_0x6e5e('0xf'));var db=require(_0x6e5e('0x10'))['db'];var integrations=require(_0x6e5e('0x11'));var jayson=require(_0x6e5e('0x12'));var client=jayson[_0x6e5e('0x13')][_0x6e5e('0x14')]({'port':0x232a});function respondWithRpcPromise(_0x5a2e2f,_0x3e89a3,_0x13a84f,_0x184d25){return new BPromise(function(_0x649217,_0x7854a0){var _0x16e16a=_0x184d25||client;return _0x16e16a['request'](_0x5a2e2f,_0x13a84f)[_0x6e5e('0x15')](function(_0x5638ec){logger[_0x6e5e('0x16')](_0x6e5e('0x17'),_0x3e89a3,_0x6e5e('0x18'));logger['debug'](_0x6e5e('0x19'),_0x3e89a3,_0x6e5e('0x18'),JSON[_0x6e5e('0x1a')](_0x5638ec));if(_0x5638ec[_0x6e5e('0x1b')]){if(_0x5638ec[_0x6e5e('0x1b')][_0x6e5e('0x1c')]===0x1f4){logger[_0x6e5e('0x1b')]('SugarcrmAccount,\x20%s,\x20%s',_0x3e89a3,_0x5638ec[_0x6e5e('0x1b')][_0x6e5e('0x1d')]);return _0x7854a0(_0x5638ec[_0x6e5e('0x1b')][_0x6e5e('0x1d')]);}logger['error'](_0x6e5e('0x17'),_0x3e89a3,_0x5638ec[_0x6e5e('0x1b')]['message']);return _0x649217(_0x5638ec[_0x6e5e('0x1b')]['message']);}else{logger[_0x6e5e('0x16')](_0x6e5e('0x17'),_0x3e89a3,'request\x20sent');_0x649217(_0x5638ec[_0x6e5e('0x1e')][_0x6e5e('0x1d')]);}})['catch'](function(_0x3feaee){logger[_0x6e5e('0x1b')](_0x6e5e('0x17'),_0x3e89a3,_0x3feaee);_0x7854a0(_0x3feaee);});});}function respondWithStatusCode(_0x40308a,_0x348c10){_0x348c10=_0x348c10||0xcc;return function(_0x3f3883){if(_0x3f3883){return _0x40308a[_0x6e5e('0x1f')](_0x348c10);}return _0x40308a['status'](_0x348c10)[_0x6e5e('0x20')]();};}function respondWithResult(_0x10882e,_0x1fa452){_0x1fa452=_0x1fa452||0xc8;return function(_0x1ec331){if(_0x1ec331){return _0x10882e[_0x6e5e('0x21')](_0x1fa452)[_0x6e5e('0x22')](_0x1ec331);}};}function respondWithFilteredResult(_0x523a4d,_0x4a3cd7){return function(_0x4f4775){if(_0x4f4775){var _0x10a2d1=_0x4f4775['count'],_0x1c9af0=_0x4a3cd7['offset'],_0x456337=_0x4a3cd7[_0x6e5e('0x23')]+_0x4a3cd7[_0x6e5e('0x24')],_0x55a2b5;if(_0x456337>=_0x10a2d1){_0x456337=_0x10a2d1;_0x55a2b5=0xc8;}else{_0x55a2b5=0xce;}_0x523a4d[_0x6e5e('0x21')](_0x55a2b5);return _0x523a4d[_0x6e5e('0x25')]('Content-Range',_0x1c9af0+'-'+_0x456337+'/'+_0x10a2d1)['json'](_0x4f4775);}return null;};}function patchUpdates(_0x475ed2){return function(_0x548dac){try{jsonpatch[_0x6e5e('0x26')](_0x548dac,_0x475ed2,!![]);}catch(_0x1e2a0b){return BPromise[_0x6e5e('0x27')](_0x1e2a0b);}return _0x548dac[_0x6e5e('0x28')]();};}function saveUpdates(_0x1b4958,_0x569ee2){return function(_0x263840){if(_0x263840){return _0x263840[_0x6e5e('0x29')](_0x1b4958)[_0x6e5e('0x15')](function(_0x5bcfc7){return _0x5bcfc7;});}return null;};}function removeEntity(_0x4fd548,_0x1c0a4e){return function(_0x188d92){if(_0x188d92){return _0x188d92[_0x6e5e('0x2a')]()[_0x6e5e('0x15')](function(){_0x4fd548[_0x6e5e('0x21')](0xcc)[_0x6e5e('0x20')]();});}};}function handleEntityNotFound(_0x1ca3ad,_0x35f7da){return function(_0xd05d77){if(!_0xd05d77){_0x1ca3ad[_0x6e5e('0x1f')](0x194);}return _0xd05d77;};}function handleError(_0x28cc0e,_0x529f4b){_0x529f4b=_0x529f4b||0x1f4;return function(_0x3c47fb){logger['error'](_0x3c47fb[_0x6e5e('0x2b')]);if(_0x3c47fb[_0x6e5e('0x2c')]){delete _0x3c47fb[_0x6e5e('0x2c')];}_0x28cc0e[_0x6e5e('0x21')](_0x529f4b)[_0x6e5e('0x2d')](_0x3c47fb);};}exports['index']=function(_0x5060c9,_0x2effc2){var _0x478d00={},_0x29c28a={},_0x4e606a={'count':0x0,'rows':[]};var _0x11e357=db[_0x6e5e('0x2e')][_0x6e5e('0x2f')];_0x29c28a[_0x6e5e('0x30')]=_[_0x6e5e('0x31')](_0x11e357);var _0x4117e8={'dateStart':_0x5060c9[_0x6e5e('0x32')][_0x6e5e('0x33')],'dateEnd':_0x5060c9[_0x6e5e('0x32')][_0x6e5e('0x34')]};delete _0x5060c9[_0x6e5e('0x32')][_0x6e5e('0x33')];delete _0x5060c9['query'][_0x6e5e('0x34')];_0x29c28a[_0x6e5e('0x32')]=_[_0x6e5e('0x31')](_0x5060c9[_0x6e5e('0x32')]);_0x29c28a[_0x6e5e('0x35')]=_[_0x6e5e('0x36')](_0x29c28a[_0x6e5e('0x30')],_0x29c28a['query']);_0x478d00[_0x6e5e('0x37')]=_['intersection'](_0x29c28a[_0x6e5e('0x30')],qs[_0x6e5e('0x38')](_0x5060c9[_0x6e5e('0x32')][_0x6e5e('0x38')]));_0x478d00['attributes']=_0x478d00[_0x6e5e('0x37')]['length']?_0x478d00['attributes']:_0x29c28a[_0x6e5e('0x30')];if(!_0x5060c9[_0x6e5e('0x32')][_0x6e5e('0x39')]('nolimit')){_0x478d00['limit']=qs['limit'](_0x5060c9[_0x6e5e('0x32')][_0x6e5e('0x24')]);_0x478d00[_0x6e5e('0x23')]=qs['offset'](_0x5060c9[_0x6e5e('0x32')][_0x6e5e('0x23')]);}_0x478d00[_0x6e5e('0x3a')]=qs['sort'](_0x5060c9[_0x6e5e('0x32')][_0x6e5e('0x3b')]);_0x478d00[_0x6e5e('0x3c')]=qs[_0x6e5e('0x35')](_[_0x6e5e('0x3d')](_0x5060c9[_0x6e5e('0x32')],_0x29c28a['filters']));if(_0x4117e8[_0x6e5e('0x33')]){if(_0x4117e8['dateEnd']){_0x4117e8[_0x6e5e('0x34')]=moment(_0x4117e8['dateEnd'])[_0x6e5e('0x3e')](0x1,_0x6e5e('0x3f'));}else{_0x4117e8[_0x6e5e('0x34')]=moment(_0x4117e8['dateStart'])[_0x6e5e('0x3e')](0x1,_0x6e5e('0x3f'));}_[_0x6e5e('0x40')](_0x478d00['where'],{'createdAt':{'$gte':_0x4117e8['dateStart'],'$lte':_0x4117e8[_0x6e5e('0x34')]}});}if(_0x5060c9[_0x6e5e('0x32')]['filter']){_0x478d00[_0x6e5e('0x3c')]=_[_0x6e5e('0x40')](_0x478d00[_0x6e5e('0x3c')],{'$or':_[_0x6e5e('0x41')](_0x478d00[_0x6e5e('0x37')],function(_0x1f9a89){var _0x15c328={};_0x15c328[_0x1f9a89]={'$like':'%'+_0x5060c9[_0x6e5e('0x32')][_0x6e5e('0x42')]+'%'};return _0x15c328;})});}_0x478d00=_[_0x6e5e('0x40')]({},_0x478d00,_0x5060c9[_0x6e5e('0x43')]);var _0x47c53c={'where':_0x478d00['where']};return db[_0x6e5e('0x2e')][_0x6e5e('0x44')](_0x47c53c)['then'](function(_0x944fe0){_0x4e606a[_0x6e5e('0x44')]=_0x944fe0;if(_0x5060c9[_0x6e5e('0x32')][_0x6e5e('0x45')]){_0x478d00[_0x6e5e('0x46')]=[{'all':!![]}];}return db[_0x6e5e('0x2e')][_0x6e5e('0x47')](_0x478d00);})[_0x6e5e('0x15')](function(_0x161c5e){_0x4e606a[_0x6e5e('0x48')]=_0x161c5e;return _0x4e606a;})['then'](respondWithFilteredResult(_0x2effc2,_0x478d00))[_0x6e5e('0x49')](handleError(_0x2effc2,null));};exports['show']=function(_0x2897ec,_0xea842c){var _0xd1c462={'raw':![],'where':{'id':_0x2897ec[_0x6e5e('0x4a')]['id']}},_0x3cd123={};_0x3cd123[_0x6e5e('0x30')]=_[_0x6e5e('0x31')](db['SugarcrmAccount'][_0x6e5e('0x2f')]);_0x3cd123[_0x6e5e('0x32')]=_['keys'](_0x2897ec['query']);_0x3cd123[_0x6e5e('0x35')]=_[_0x6e5e('0x36')](_0x3cd123[_0x6e5e('0x30')],_0x3cd123[_0x6e5e('0x32')]);_0xd1c462['attributes']=_[_0x6e5e('0x36')](_0x3cd123[_0x6e5e('0x30')],qs['fields'](_0x2897ec['query'][_0x6e5e('0x38')]));_0xd1c462[_0x6e5e('0x37')]=_0xd1c462[_0x6e5e('0x37')][_0x6e5e('0x4b')]?_0xd1c462['attributes']:_0x3cd123[_0x6e5e('0x30')];if(_0x2897ec['query']['includeAll']){_0xd1c462[_0x6e5e('0x46')]=[{'all':!![]}];}_0xd1c462=_[_0x6e5e('0x40')]({},_0xd1c462,_0x2897ec[_0x6e5e('0x43')]);return db[_0x6e5e('0x2e')][_0x6e5e('0x4c')](_0xd1c462)[_0x6e5e('0x15')](handleEntityNotFound(_0xea842c,null))['then'](respondWithResult(_0xea842c,null))['catch'](handleError(_0xea842c,null));};exports[_0x6e5e('0x4d')]=function(_0x595d75,_0x2b3718){return db['SugarcrmAccount'][_0x6e5e('0x4d')](_0x595d75[_0x6e5e('0x4e')],{})['then'](respondWithResult(_0x2b3718,0xc9))[_0x6e5e('0x49')](handleError(_0x2b3718,null));};exports[_0x6e5e('0x29')]=function(_0x5a95f7,_0x529d){if(_0x5a95f7['body']['id']){delete _0x5a95f7['body']['id'];}return db[_0x6e5e('0x2e')][_0x6e5e('0x4c')]({'where':{'id':_0x5a95f7[_0x6e5e('0x4a')]['id']}})['then'](handleEntityNotFound(_0x529d,null))[_0x6e5e('0x15')](saveUpdates(_0x5a95f7[_0x6e5e('0x4e')],null))['then'](respondWithResult(_0x529d,null))[_0x6e5e('0x49')](handleError(_0x529d,null));};exports[_0x6e5e('0x2a')]=function(_0x41559e,_0x1992c8){return db[_0x6e5e('0x2e')][_0x6e5e('0x4c')]({'where':{'id':_0x41559e['params']['id']}})[_0x6e5e('0x15')](handleEntityNotFound(_0x1992c8,null))[_0x6e5e('0x15')](removeEntity(_0x1992c8,null))[_0x6e5e('0x49')](handleError(_0x1992c8,null));};exports[_0x6e5e('0x4f')]=function(_0x4d8f54,_0xf23722,_0x5d116a){var _0x32775a={};var _0x1b3d2a={};var _0x1a3e6d;var _0x37f40d;return db[_0x6e5e('0x2e')]['findOne']({'where':{'id':_0x4d8f54['params']['id']}})[_0x6e5e('0x15')](handleEntityNotFound(_0xf23722,null))['then'](function(_0x514816){if(_0x514816){_0x1a3e6d=_0x514816;_0x1b3d2a[_0x6e5e('0x30')]=_['keys'](db[_0x6e5e('0x50')][_0x6e5e('0x2f')]);_0x1b3d2a[_0x6e5e('0x32')]=_[_0x6e5e('0x31')](_0x4d8f54[_0x6e5e('0x32')]);_0x1b3d2a['filters']=_['intersection'](_0x1b3d2a[_0x6e5e('0x30')],_0x1b3d2a['query']);_0x32775a[_0x6e5e('0x37')]=_[_0x6e5e('0x36')](_0x1b3d2a[_0x6e5e('0x30')],qs[_0x6e5e('0x38')](_0x4d8f54['query']['fields']));_0x32775a[_0x6e5e('0x37')]=_0x32775a['attributes']['length']?_0x32775a['attributes']:_0x1b3d2a[_0x6e5e('0x30')];_0x32775a[_0x6e5e('0x3a')]=qs[_0x6e5e('0x3b')](_0x4d8f54[_0x6e5e('0x32')][_0x6e5e('0x3b')]);_0x32775a[_0x6e5e('0x3c')]=qs['filters'](_[_0x6e5e('0x3d')](_0x4d8f54[_0x6e5e('0x32')],_0x1b3d2a[_0x6e5e('0x35')]));if(_0x4d8f54[_0x6e5e('0x32')][_0x6e5e('0x42')]){_0x32775a['where']=_[_0x6e5e('0x40')](_0x32775a[_0x6e5e('0x3c')],{'$or':_[_0x6e5e('0x41')](_0x32775a[_0x6e5e('0x37')],function(_0x3ba948){var _0xc3fbdf={};_0xc3fbdf[_0x3ba948]={'$like':'%'+_0x4d8f54[_0x6e5e('0x32')][_0x6e5e('0x42')]+'%'};return _0xc3fbdf;})});}_0x32775a=_[_0x6e5e('0x40')]({},_0x32775a,_0x4d8f54[_0x6e5e('0x43')]);return _0x1a3e6d['getConfigurations'](_0x32775a);}})[_0x6e5e('0x15')](function(_0x1171a1){if(_0x1171a1){_0x37f40d=_0x1171a1[_0x6e5e('0x4b')];if(!_0x4d8f54['query'][_0x6e5e('0x39')](_0x6e5e('0x51'))){_0x32775a['limit']=qs[_0x6e5e('0x24')](_0x4d8f54[_0x6e5e('0x32')]['limit']);_0x32775a[_0x6e5e('0x23')]=qs[_0x6e5e('0x23')](_0x4d8f54[_0x6e5e('0x32')]['offset']);}return _0x1a3e6d['getConfigurations'](_0x32775a);}})['then'](function(_0x22b49b){if(_0x22b49b){return _0x22b49b?{'count':_0x37f40d,'rows':_0x22b49b}:null;}})[_0x6e5e('0x15')](respondWithResult(_0xf23722,null))[_0x6e5e('0x49')](handleError(_0xf23722,null));};exports[_0x6e5e('0x52')]=function(_0x453c56,_0xb942b1,_0x23e525){if(_0x453c56['body']['id']){delete _0x453c56[_0x6e5e('0x4e')]['id'];}return db['SugarcrmAccount']['findOne']({'where':{'id':_0x453c56['params']['id']}})[_0x6e5e('0x15')](handleEntityNotFound(_0xb942b1,null))[_0x6e5e('0x15')](function(_0x37cb09){if(_0x37cb09){_0x453c56[_0x6e5e('0x4e')][_0x6e5e('0x53')]=_0x37cb09['id'];_0x453c56['body'][_0x6e5e('0x54')]=integrations[_0x6e5e('0x55')](_0x453c56['body'][_0x6e5e('0x56')],_0x453c56[_0x6e5e('0x4e')]['type']);_0x453c56[_0x6e5e('0x4e')][_0x6e5e('0x57')]=integrations[_0x6e5e('0x58')](_0x453c56['body']['channel'],_0x453c56['body'][_0x6e5e('0x59')]);return db[_0x6e5e('0x50')]['create'](_0x453c56[_0x6e5e('0x4e')],{'include':[{'model':db[_0x6e5e('0x5a')],'as':_0x6e5e('0x54')},{'model':db[_0x6e5e('0x5a')],'as':_0x6e5e('0x57')}]});}return null;})[_0x6e5e('0x15')](respondWithResult(_0xb942b1,null))[_0x6e5e('0x49')](handleError(_0xb942b1,null));};exports[_0x6e5e('0x5b')]=function(_0x294321,_0xdd7c65,_0x3a7e51){var _0x3e31bc;return db[_0x6e5e('0x2e')][_0x6e5e('0x5c')]({'where':{'id':_0x294321[_0x6e5e('0x4a')]['id']},'attributes':['id','username',_0x6e5e('0x5d'),_0x6e5e('0x5e')]})['then'](handleEntityNotFound(_0xdd7c65,null))[_0x6e5e('0x15')](function(_0x5f27ef){if(_0x5f27ef){_0x3e31bc=_0x5f27ef[_0x6e5e('0x5e')];return rp({'method':_0x6e5e('0x5f'),'uri':util['format'](_0x6e5e('0x60'),_0x3e31bc,_0x6e5e('0x61')),'json':!![],'form':{'method':'login','input_type':_0x6e5e('0x62'),'response_type':_0x6e5e('0x62'),'rest_data':JSON[_0x6e5e('0x1a')]({'user_auth':{'user_name':_0x5f27ef[_0x6e5e('0x63')],'password':_0x5f27ef[_0x6e5e('0x5d')],'encryption':_0x6e5e('0x64')},'application':_0x6e5e('0x65')})}});}})[_0x6e5e('0x15')](function(_0x4ab8c5){if(_0x4ab8c5){return rp({'method':_0x6e5e('0x5f'),'uri':util['format'](_0x6e5e('0x60'),_0x3e31bc,_0x6e5e('0x61')),'json':!![],'form':{'method':_0x6e5e('0x66'),'input_type':_0x6e5e('0x62'),'response_type':_0x6e5e('0x62'),'rest_data':JSON[_0x6e5e('0x1a')]({'session':_0x4ab8c5['id'],'module_name':_0x6e5e('0x67')})}});}})['then'](function(_0x594483){if(_0x594483){var _0x70f76f=_['values'](_0x594483[_0x6e5e('0x68')]);return{'count':_0x70f76f[_0x6e5e('0x4b')],'rows':_[_0x6e5e('0x41')](_0x70f76f,function(_0x1f32c2){return{'id':_0x1f32c2[_0x6e5e('0x2c')],'name':_0x1f32c2[_0x6e5e('0x69')],'custom':_[_0x6e5e('0x6a')](_0x1f32c2[_0x6e5e('0x2c')],'_c')?!![]:![],'options':_0x1f32c2[_0x6e5e('0x43')]?_['map'](_['values'](_0x1f32c2[_0x6e5e('0x43')]),function(_0x41f96e){return{'name':_0x41f96e[_0x6e5e('0x6b')],'value':_0x41f96e['name']};}):[]};})};}})[_0x6e5e('0x15')](respondWithResult(_0xdd7c65,null))[_0x6e5e('0x49')](function(_0x4f0e23){var _0x310669=_0x294321[_0x6e5e('0x32')][_0x6e5e('0x6c')]?0x1f4:_0x4f0e23['statusCode']||0x1f4;logger[_0x6e5e('0x1b')](_0x6e5e('0x6d'),_0x6e5e('0x5b'),_0x310669,JSON[_0x6e5e('0x1a')](_0x4f0e23));delete _0x4f0e23[_0x6e5e('0x2c')];if(_0x310669===0x191){_0x310669=0x190;}_0xdd7c65[_0x6e5e('0x21')](_0x310669)['send'](_0x294321[_0x6e5e('0x32')][_0x6e5e('0x6c')]?{'message':_0x6e5e('0x6e'),'statusCode':_0x4f0e23[_0x6e5e('0x6f')]}:_0x4f0e23);});};
\ No newline at end of file
+var _0xd9a6=['format','%s%s','/service/v4_1/rest.php','login','JSON','xCALLY\x20Motion\x20Integration','Calls','values','module_fields','label','endsWith','value','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../components/integrations/configuration','jayson/promise','client','http','request','SugarcrmAccount,\x20%s,\x20%s','request\x20sent','debug','SugarcrmAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','count','offset','limit','status','Content-Range','json','apply','reject','update','then','destroy','sendStatus','stack','name','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','add','day','merge','filter','map','SugarcrmAccount','includeAll','include','findAll','rows','show','options','find','catch','body','params','findOne','SugarcrmConfiguration','order','getConfigurations','AccountId','Subjects','getSubjects','channel','type','Descriptions','getDescriptions','SugarcrmField','getFields','username','password','remoteUri','POST'];(function(_0x4c2635,_0x1e3e74){var _0x2cfcc=function(_0x1009ad){while(--_0x1009ad){_0x4c2635['push'](_0x4c2635['shift']());}};_0x2cfcc(++_0x1e3e74);}(_0xd9a6,0x81));var _0x6d9a=function(_0x4fa715,_0x4ee891){_0x4fa715=_0x4fa715-0x0;var _0x1758ec=_0xd9a6[_0x4fa715];return _0x1758ec;};'use strict';var jsonpatch=require(_0x6d9a('0x0'));var rp=require(_0x6d9a('0x1'));var moment=require(_0x6d9a('0x2'));var BPromise=require(_0x6d9a('0x3'));var Mustache=require(_0x6d9a('0x4'));var util=require(_0x6d9a('0x5'));var path=require('path');var sox=require(_0x6d9a('0x6'));var csv=require(_0x6d9a('0x7'));var ejs=require(_0x6d9a('0x8'));var fs=require('fs');var _=require(_0x6d9a('0x9'));var squel=require(_0x6d9a('0xa'));var crypto=require(_0x6d9a('0xb'));var jsforce=require(_0x6d9a('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x6d9a('0x7'));var querystring=require(_0x6d9a('0xd'));var Papa=require(_0x6d9a('0xe'));var qs=require(_0x6d9a('0xf'));var logger=require(_0x6d9a('0x10'))(_0x6d9a('0x11'));var utils=require(_0x6d9a('0x12'));var config=require(_0x6d9a('0x13'));var db=require('../../mysqldb')['db'];var integrations=require(_0x6d9a('0x14'));var jayson=require(_0x6d9a('0x15'));var client=jayson[_0x6d9a('0x16')][_0x6d9a('0x17')]({'port':0x232a});function respondWithRpcPromise(_0x58edf2,_0x430ab8,_0x7b81e0,_0x3fbb9b){return new BPromise(function(_0x1c78e7,_0x3c8192){var _0x4d83e1=_0x3fbb9b||client;return _0x4d83e1[_0x6d9a('0x18')](_0x58edf2,_0x7b81e0)['then'](function(_0x2a66cf){logger['info'](_0x6d9a('0x19'),_0x430ab8,_0x6d9a('0x1a'));logger[_0x6d9a('0x1b')](_0x6d9a('0x1c'),_0x430ab8,_0x6d9a('0x1a'),JSON[_0x6d9a('0x1d')](_0x2a66cf));if(_0x2a66cf[_0x6d9a('0x1e')]){if(_0x2a66cf[_0x6d9a('0x1e')][_0x6d9a('0x1f')]===0x1f4){logger[_0x6d9a('0x1e')]('SugarcrmAccount,\x20%s,\x20%s',_0x430ab8,_0x2a66cf['error'][_0x6d9a('0x20')]);return _0x3c8192(_0x2a66cf[_0x6d9a('0x1e')][_0x6d9a('0x20')]);}logger[_0x6d9a('0x1e')](_0x6d9a('0x19'),_0x430ab8,_0x2a66cf[_0x6d9a('0x1e')][_0x6d9a('0x20')]);return _0x1c78e7(_0x2a66cf[_0x6d9a('0x1e')][_0x6d9a('0x20')]);}else{logger[_0x6d9a('0x21')](_0x6d9a('0x19'),_0x430ab8,'request\x20sent');_0x1c78e7(_0x2a66cf[_0x6d9a('0x22')][_0x6d9a('0x20')]);}})['catch'](function(_0x434402){logger[_0x6d9a('0x1e')]('SugarcrmAccount,\x20%s,\x20%s',_0x430ab8,_0x434402);_0x3c8192(_0x434402);});});}function respondWithStatusCode(_0x34aeca,_0x2327e1){_0x2327e1=_0x2327e1||0xcc;return function(_0x4867fe){if(_0x4867fe){return _0x34aeca['sendStatus'](_0x2327e1);}return _0x34aeca['status'](_0x2327e1)['end']();};}function respondWithResult(_0x138c8c,_0x2a504b){_0x2a504b=_0x2a504b||0xc8;return function(_0x1988d0){if(_0x1988d0){return _0x138c8c['status'](_0x2a504b)['json'](_0x1988d0);}};}function respondWithFilteredResult(_0x507413,_0x27f366){return function(_0x269426){if(_0x269426){var _0x4eed35=_0x269426[_0x6d9a('0x23')],_0x4582ee=_0x27f366[_0x6d9a('0x24')],_0x333530=_0x27f366[_0x6d9a('0x24')]+_0x27f366[_0x6d9a('0x25')],_0x53afa0;if(_0x333530>=_0x4eed35){_0x333530=_0x4eed35;_0x53afa0=0xc8;}else{_0x53afa0=0xce;}_0x507413[_0x6d9a('0x26')](_0x53afa0);return _0x507413['set'](_0x6d9a('0x27'),_0x4582ee+'-'+_0x333530+'/'+_0x4eed35)[_0x6d9a('0x28')](_0x269426);}return null;};}function patchUpdates(_0x330ca6){return function(_0x207354){try{jsonpatch[_0x6d9a('0x29')](_0x207354,_0x330ca6,!![]);}catch(_0x23261c){return BPromise[_0x6d9a('0x2a')](_0x23261c);}return _0x207354['save']();};}function saveUpdates(_0x1a1ec5,_0x4f6277){return function(_0xecb47f){if(_0xecb47f){return _0xecb47f[_0x6d9a('0x2b')](_0x1a1ec5)[_0x6d9a('0x2c')](function(_0x2fa0d3){return _0x2fa0d3;});}return null;};}function removeEntity(_0x5b3760,_0x203fb9){return function(_0x3908bc){if(_0x3908bc){return _0x3908bc[_0x6d9a('0x2d')]()[_0x6d9a('0x2c')](function(){_0x5b3760[_0x6d9a('0x26')](0xcc)['end']();});}};}function handleEntityNotFound(_0x543204,_0x5cdd33){return function(_0x2d72c9){if(!_0x2d72c9){_0x543204[_0x6d9a('0x2e')](0x194);}return _0x2d72c9;};}function handleError(_0xd920b5,_0x3abf6b){_0x3abf6b=_0x3abf6b||0x1f4;return function(_0x1ca2b8){logger['error'](_0x1ca2b8[_0x6d9a('0x2f')]);if(_0x1ca2b8['name']){delete _0x1ca2b8[_0x6d9a('0x30')];}_0xd920b5['status'](_0x3abf6b)['send'](_0x1ca2b8);};}exports['index']=function(_0x10d637,_0xfa0b58){var _0x2b3c3c={},_0x1fa8a0={},_0x4be312={'count':0x0,'rows':[]};var _0x3a9308=db['SugarcrmAccount'][_0x6d9a('0x31')];_0x1fa8a0[_0x6d9a('0x32')]=_[_0x6d9a('0x33')](_0x3a9308);var _0x359b8d={'dateStart':_0x10d637[_0x6d9a('0x34')][_0x6d9a('0x35')],'dateEnd':_0x10d637[_0x6d9a('0x34')][_0x6d9a('0x36')]};delete _0x10d637[_0x6d9a('0x34')][_0x6d9a('0x35')];delete _0x10d637[_0x6d9a('0x34')]['dateEnd'];_0x1fa8a0['query']=_['keys'](_0x10d637[_0x6d9a('0x34')]);_0x1fa8a0[_0x6d9a('0x37')]=_[_0x6d9a('0x38')](_0x1fa8a0[_0x6d9a('0x32')],_0x1fa8a0[_0x6d9a('0x34')]);_0x2b3c3c[_0x6d9a('0x39')]=_[_0x6d9a('0x38')](_0x1fa8a0[_0x6d9a('0x32')],qs['fields'](_0x10d637[_0x6d9a('0x34')][_0x6d9a('0x3a')]));_0x2b3c3c['attributes']=_0x2b3c3c[_0x6d9a('0x39')][_0x6d9a('0x3b')]?_0x2b3c3c[_0x6d9a('0x39')]:_0x1fa8a0[_0x6d9a('0x32')];if(!_0x10d637[_0x6d9a('0x34')][_0x6d9a('0x3c')](_0x6d9a('0x3d'))){_0x2b3c3c[_0x6d9a('0x25')]=qs[_0x6d9a('0x25')](_0x10d637['query'][_0x6d9a('0x25')]);_0x2b3c3c['offset']=qs[_0x6d9a('0x24')](_0x10d637[_0x6d9a('0x34')][_0x6d9a('0x24')]);}_0x2b3c3c['order']=qs['sort'](_0x10d637[_0x6d9a('0x34')][_0x6d9a('0x3e')]);_0x2b3c3c[_0x6d9a('0x3f')]=qs['filters'](_['pick'](_0x10d637['query'],_0x1fa8a0['filters']));if(_0x359b8d['dateStart']){if(_0x359b8d[_0x6d9a('0x36')]){_0x359b8d[_0x6d9a('0x36')]=moment(_0x359b8d[_0x6d9a('0x36')])[_0x6d9a('0x40')](0x1,'day');}else{_0x359b8d['dateEnd']=moment(_0x359b8d[_0x6d9a('0x35')])[_0x6d9a('0x40')](0x1,_0x6d9a('0x41'));}_[_0x6d9a('0x42')](_0x2b3c3c[_0x6d9a('0x3f')],{'createdAt':{'$gte':_0x359b8d[_0x6d9a('0x35')],'$lte':_0x359b8d[_0x6d9a('0x36')]}});}if(_0x10d637[_0x6d9a('0x34')][_0x6d9a('0x43')]){_0x2b3c3c[_0x6d9a('0x3f')]=_[_0x6d9a('0x42')](_0x2b3c3c[_0x6d9a('0x3f')],{'$or':_[_0x6d9a('0x44')](_0x2b3c3c[_0x6d9a('0x39')],function(_0x150fa7){var _0x141d12={};_0x141d12[_0x150fa7]={'$like':'%'+_0x10d637[_0x6d9a('0x34')]['filter']+'%'};return _0x141d12;})});}_0x2b3c3c=_[_0x6d9a('0x42')]({},_0x2b3c3c,_0x10d637['options']);var _0x350499={'where':_0x2b3c3c[_0x6d9a('0x3f')]};return db[_0x6d9a('0x45')][_0x6d9a('0x23')](_0x350499)[_0x6d9a('0x2c')](function(_0x5c4210){_0x4be312['count']=_0x5c4210;if(_0x10d637['query'][_0x6d9a('0x46')]){_0x2b3c3c[_0x6d9a('0x47')]=[{'all':!![]}];}return db[_0x6d9a('0x45')][_0x6d9a('0x48')](_0x2b3c3c);})[_0x6d9a('0x2c')](function(_0x53ddb5){_0x4be312[_0x6d9a('0x49')]=_0x53ddb5;return _0x4be312;})[_0x6d9a('0x2c')](respondWithFilteredResult(_0xfa0b58,_0x2b3c3c))['catch'](handleError(_0xfa0b58,null));};exports[_0x6d9a('0x4a')]=function(_0x3a8edf,_0x2e08f1){var _0x1adb05={'raw':![],'where':{'id':_0x3a8edf['params']['id']}},_0x5e42b0={};_0x5e42b0[_0x6d9a('0x32')]=_['keys'](db[_0x6d9a('0x45')][_0x6d9a('0x31')]);_0x5e42b0['query']=_[_0x6d9a('0x33')](_0x3a8edf['query']);_0x5e42b0[_0x6d9a('0x37')]=_[_0x6d9a('0x38')](_0x5e42b0[_0x6d9a('0x32')],_0x5e42b0[_0x6d9a('0x34')]);_0x1adb05[_0x6d9a('0x39')]=_[_0x6d9a('0x38')](_0x5e42b0[_0x6d9a('0x32')],qs[_0x6d9a('0x3a')](_0x3a8edf[_0x6d9a('0x34')][_0x6d9a('0x3a')]));_0x1adb05[_0x6d9a('0x39')]=_0x1adb05[_0x6d9a('0x39')][_0x6d9a('0x3b')]?_0x1adb05[_0x6d9a('0x39')]:_0x5e42b0['model'];if(_0x3a8edf[_0x6d9a('0x34')]['includeAll']){_0x1adb05[_0x6d9a('0x47')]=[{'all':!![]}];}_0x1adb05=_['merge']({},_0x1adb05,_0x3a8edf[_0x6d9a('0x4b')]);return db[_0x6d9a('0x45')][_0x6d9a('0x4c')](_0x1adb05)[_0x6d9a('0x2c')](handleEntityNotFound(_0x2e08f1,null))[_0x6d9a('0x2c')](respondWithResult(_0x2e08f1,null))[_0x6d9a('0x4d')](handleError(_0x2e08f1,null));};exports['create']=function(_0x4eedb4,_0x434a78){return db['SugarcrmAccount']['create'](_0x4eedb4['body'],{})[_0x6d9a('0x2c')](respondWithResult(_0x434a78,0xc9))['catch'](handleError(_0x434a78,null));};exports[_0x6d9a('0x2b')]=function(_0x331b73,_0x3f7c9f){if(_0x331b73[_0x6d9a('0x4e')]['id']){delete _0x331b73['body']['id'];}return db[_0x6d9a('0x45')][_0x6d9a('0x4c')]({'where':{'id':_0x331b73['params']['id']}})[_0x6d9a('0x2c')](handleEntityNotFound(_0x3f7c9f,null))[_0x6d9a('0x2c')](saveUpdates(_0x331b73['body'],null))[_0x6d9a('0x2c')](respondWithResult(_0x3f7c9f,null))[_0x6d9a('0x4d')](handleError(_0x3f7c9f,null));};exports[_0x6d9a('0x2d')]=function(_0xae290a,_0x521fd5){return db[_0x6d9a('0x45')][_0x6d9a('0x4c')]({'where':{'id':_0xae290a[_0x6d9a('0x4f')]['id']}})['then'](handleEntityNotFound(_0x521fd5,null))[_0x6d9a('0x2c')](removeEntity(_0x521fd5,null))[_0x6d9a('0x4d')](handleError(_0x521fd5,null));};exports['getConfigurations']=function(_0x11be5e,_0x5acb9f,_0xf6f583){var _0x56582d={};var _0xeb2b9={};var _0x34ee3d;var _0x3328da;return db[_0x6d9a('0x45')][_0x6d9a('0x50')]({'where':{'id':_0x11be5e[_0x6d9a('0x4f')]['id']}})[_0x6d9a('0x2c')](handleEntityNotFound(_0x5acb9f,null))[_0x6d9a('0x2c')](function(_0x4e43cb){if(_0x4e43cb){_0x34ee3d=_0x4e43cb;_0xeb2b9[_0x6d9a('0x32')]=_[_0x6d9a('0x33')](db[_0x6d9a('0x51')][_0x6d9a('0x31')]);_0xeb2b9[_0x6d9a('0x34')]=_[_0x6d9a('0x33')](_0x11be5e[_0x6d9a('0x34')]);_0xeb2b9['filters']=_[_0x6d9a('0x38')](_0xeb2b9[_0x6d9a('0x32')],_0xeb2b9['query']);_0x56582d[_0x6d9a('0x39')]=_[_0x6d9a('0x38')](_0xeb2b9[_0x6d9a('0x32')],qs[_0x6d9a('0x3a')](_0x11be5e[_0x6d9a('0x34')][_0x6d9a('0x3a')]));_0x56582d['attributes']=_0x56582d[_0x6d9a('0x39')][_0x6d9a('0x3b')]?_0x56582d[_0x6d9a('0x39')]:_0xeb2b9['model'];_0x56582d[_0x6d9a('0x52')]=qs[_0x6d9a('0x3e')](_0x11be5e['query'][_0x6d9a('0x3e')]);_0x56582d[_0x6d9a('0x3f')]=qs['filters'](_['pick'](_0x11be5e[_0x6d9a('0x34')],_0xeb2b9[_0x6d9a('0x37')]));if(_0x11be5e[_0x6d9a('0x34')][_0x6d9a('0x43')]){_0x56582d[_0x6d9a('0x3f')]=_[_0x6d9a('0x42')](_0x56582d[_0x6d9a('0x3f')],{'$or':_[_0x6d9a('0x44')](_0x56582d['attributes'],function(_0x4ee475){var _0x1e5d01={};_0x1e5d01[_0x4ee475]={'$like':'%'+_0x11be5e[_0x6d9a('0x34')][_0x6d9a('0x43')]+'%'};return _0x1e5d01;})});}_0x56582d=_[_0x6d9a('0x42')]({},_0x56582d,_0x11be5e[_0x6d9a('0x4b')]);return _0x34ee3d[_0x6d9a('0x53')](_0x56582d);}})[_0x6d9a('0x2c')](function(_0x586675){if(_0x586675){_0x3328da=_0x586675['length'];if(!_0x11be5e[_0x6d9a('0x34')][_0x6d9a('0x3c')](_0x6d9a('0x3d'))){_0x56582d['limit']=qs[_0x6d9a('0x25')](_0x11be5e[_0x6d9a('0x34')][_0x6d9a('0x25')]);_0x56582d[_0x6d9a('0x24')]=qs['offset'](_0x11be5e[_0x6d9a('0x34')][_0x6d9a('0x24')]);}return _0x34ee3d['getConfigurations'](_0x56582d);}})['then'](function(_0x402ca9){if(_0x402ca9){return _0x402ca9?{'count':_0x3328da,'rows':_0x402ca9}:null;}})[_0x6d9a('0x2c')](respondWithResult(_0x5acb9f,null))[_0x6d9a('0x4d')](handleError(_0x5acb9f,null));};exports['addConfiguration']=function(_0x3fd2f3,_0x2baedc,_0x4a883d){if(_0x3fd2f3[_0x6d9a('0x4e')]['id']){delete _0x3fd2f3[_0x6d9a('0x4e')]['id'];}return db['SugarcrmAccount'][_0x6d9a('0x50')]({'where':{'id':_0x3fd2f3['params']['id']}})[_0x6d9a('0x2c')](handleEntityNotFound(_0x2baedc,null))[_0x6d9a('0x2c')](function(_0xa98640){if(_0xa98640){_0x3fd2f3['body'][_0x6d9a('0x54')]=_0xa98640['id'];_0x3fd2f3[_0x6d9a('0x4e')][_0x6d9a('0x55')]=integrations[_0x6d9a('0x56')](_0x3fd2f3['body'][_0x6d9a('0x57')],_0x3fd2f3['body'][_0x6d9a('0x58')]);_0x3fd2f3[_0x6d9a('0x4e')][_0x6d9a('0x59')]=integrations[_0x6d9a('0x5a')](_0x3fd2f3[_0x6d9a('0x4e')][_0x6d9a('0x57')],_0x3fd2f3['body'][_0x6d9a('0x58')]);return db[_0x6d9a('0x51')]['create'](_0x3fd2f3['body'],{'include':[{'model':db['SugarcrmField'],'as':_0x6d9a('0x55')},{'model':db[_0x6d9a('0x5b')],'as':'Descriptions'}]});}return null;})['then'](respondWithResult(_0x2baedc,null))['catch'](handleError(_0x2baedc,null));};exports[_0x6d9a('0x5c')]=function(_0x3ea679,_0x3a1162,_0x1351b3){var _0x1d5da8;return db[_0x6d9a('0x45')][_0x6d9a('0x50')]({'where':{'id':_0x3ea679[_0x6d9a('0x4f')]['id']},'attributes':['id',_0x6d9a('0x5d'),_0x6d9a('0x5e'),_0x6d9a('0x5f')]})[_0x6d9a('0x2c')](handleEntityNotFound(_0x3a1162,null))[_0x6d9a('0x2c')](function(_0x47f4f8){if(_0x47f4f8){_0x1d5da8=_0x47f4f8[_0x6d9a('0x5f')];return rp({'method':_0x6d9a('0x60'),'uri':util[_0x6d9a('0x61')](_0x6d9a('0x62'),_0x1d5da8,_0x6d9a('0x63')),'json':!![],'form':{'method':_0x6d9a('0x64'),'input_type':'JSON','response_type':_0x6d9a('0x65'),'rest_data':JSON[_0x6d9a('0x1d')]({'user_auth':{'user_name':_0x47f4f8[_0x6d9a('0x5d')],'password':_0x47f4f8[_0x6d9a('0x5e')],'encryption':'PLAIN'},'application':_0x6d9a('0x66')})}});}})['then'](function(_0x5cdb90){if(_0x5cdb90){return rp({'method':_0x6d9a('0x60'),'uri':util[_0x6d9a('0x61')](_0x6d9a('0x62'),_0x1d5da8,'/service/v4_1/rest.php'),'json':!![],'form':{'method':'get_module_fields','input_type':_0x6d9a('0x65'),'response_type':_0x6d9a('0x65'),'rest_data':JSON[_0x6d9a('0x1d')]({'session':_0x5cdb90['id'],'module_name':_0x6d9a('0x67')})}});}})[_0x6d9a('0x2c')](function(_0x3c7ad4){if(_0x3c7ad4){var _0x315bc7=_[_0x6d9a('0x68')](_0x3c7ad4[_0x6d9a('0x69')]);return{'count':_0x315bc7['length'],'rows':_['map'](_0x315bc7,function(_0x534025){return{'id':_0x534025[_0x6d9a('0x30')],'name':_0x534025[_0x6d9a('0x6a')],'custom':_[_0x6d9a('0x6b')](_0x534025['name'],'_c')?!![]:![],'options':_0x534025[_0x6d9a('0x4b')]?_[_0x6d9a('0x44')](_[_0x6d9a('0x68')](_0x534025[_0x6d9a('0x4b')]),function(_0x534ecc){return{'name':_0x534ecc[_0x6d9a('0x6c')],'value':_0x534ecc[_0x6d9a('0x30')]};}):[]};})};}})[_0x6d9a('0x2c')](respondWithResult(_0x3a1162,null))[_0x6d9a('0x4d')](function(_0x3755e0){var _0x320219=_0x3ea679[_0x6d9a('0x34')][_0x6d9a('0x6d')]?0x1f4:_0x3755e0[_0x6d9a('0x6e')]||0x1f4;logger[_0x6d9a('0x1e')](_0x6d9a('0x6f'),_0x6d9a('0x5c'),_0x320219,JSON[_0x6d9a('0x1d')](_0x3755e0));delete _0x3755e0[_0x6d9a('0x30')];if(_0x320219===0x191){_0x320219=0x190;}_0x3a1162[_0x6d9a('0x26')](_0x320219)['send'](_0x3ea679[_0x6d9a('0x34')]['test']?{'message':_0x6d9a('0x70'),'statusCode':_0x3755e0[_0x6d9a('0x6e')]}:_0x3755e0);});};
\ No newline at end of file
index 90419dd..5cc43f5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f53=['SugarcrmAccount','lodash','util','../../config/logger','bluebird','../../components/integrations/configuration','exports'];(function(_0x271607,_0x1cdaf2){var _0x2e87c1=function(_0x3186b2){while(--_0x3186b2){_0x271607['push'](_0x271607['shift']());}};_0x2e87c1(++_0x1cdaf2);}(_0x0f53,0x112));var _0x30f5=function(_0x2aa534,_0x4656eb){_0x2aa534=_0x2aa534-0x0;var _0x187dfd=_0x0f53[_0x2aa534];return _0x187dfd;};'use strict';var _=require(_0x30f5('0x0'));var util=require(_0x30f5('0x1'));var logger=require(_0x30f5('0x2'))('api');var moment=require('moment');var BPromise=require(_0x30f5('0x3'));var rp=require('request-promise');var attributes=require('./intSugarcrmAccount.attributes');var integrations=require(_0x30f5('0x4'));module[_0x30f5('0x5')]=function(_0x2dd64b,_0x22f8b3){return _0x2dd64b['define'](_0x30f5('0x6'),attributes,{'tableName':'int_sugarcrm_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0e69=['request-promise','./intSugarcrmAccount.attributes','../../components/integrations/configuration','SugarcrmAccount','lodash','../../config/logger','api','moment','bluebird'];(function(_0x2915a7,_0x451590){var _0xbaaeeb=function(_0x1f396f){while(--_0x1f396f){_0x2915a7['push'](_0x2915a7['shift']());}};_0xbaaeeb(++_0x451590);}(_0x0e69,0x163));var _0x90e6=function(_0x187ee1,_0x3fd1e6){_0x187ee1=_0x187ee1-0x0;var _0x388160=_0x0e69[_0x187ee1];return _0x388160;};'use strict';var _=require(_0x90e6('0x0'));var util=require('util');var logger=require(_0x90e6('0x1'))(_0x90e6('0x2'));var moment=require(_0x90e6('0x3'));var BPromise=require(_0x90e6('0x4'));var rp=require(_0x90e6('0x5'));var attributes=require(_0x90e6('0x6'));var integrations=require(_0x90e6('0x7'));module['exports']=function(_0x19691d,_0x5d2a8b){return _0x19691d['define'](_0x90e6('0x8'),attributes,{'tableName':'int_sugarcrm_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index dee6848..7c188b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ca2=['rpc','../../config/environment','jayson/promise','client','http','request','info','SugarcrmAccount,\x20%s,\x20%s','request\x20sent','debug','SugarcrmAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetSugarcrmAccount','options','attributes','include','map','model','ShowSugarcrmAccount','SugarcrmAccount','find','raw','where','then','lodash','util','moment','randomstring','../../mysqldb','../../config/logger'];(function(_0x2de078,_0x4c6119){var _0x3ebdb8=function(_0x3ae810){while(--_0x3ae810){_0x2de078['push'](_0x2de078['shift']());}};_0x3ebdb8(++_0x4c6119);}(_0x1ca2,0x112));var _0x21ca=function(_0x3cc31a,_0x4bbb08){_0x3cc31a=_0x3cc31a-0x0;var _0xe50e0c=_0x1ca2[_0x3cc31a];return _0xe50e0c;};'use strict';var _=require(_0x21ca('0x0'));var util=require(_0x21ca('0x1'));var moment=require(_0x21ca('0x2'));var BPromise=require('bluebird');var rs=require(_0x21ca('0x3'));var fs=require('fs');var db=require(_0x21ca('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x21ca('0x5'))(_0x21ca('0x6'));var config=require(_0x21ca('0x7'));var jayson=require(_0x21ca('0x8'));var client=jayson[_0x21ca('0x9')][_0x21ca('0xa')]({'port':0x232a});function respondWithRpcPromise(_0xa798a3,_0x3dd9b5,_0xc3c421){return new BPromise(function(_0x4673f9,_0x158dce){return client[_0x21ca('0xb')](_0xa798a3,_0xc3c421)['then'](function(_0x29252d){logger[_0x21ca('0xc')](_0x21ca('0xd'),_0x3dd9b5,_0x21ca('0xe'));logger[_0x21ca('0xf')](_0x21ca('0x10'),_0x3dd9b5,_0x21ca('0xe'),JSON[_0x21ca('0x11')](_0x29252d));if(_0x29252d[_0x21ca('0x12')]){if(_0x29252d[_0x21ca('0x12')][_0x21ca('0x13')]===0x1f4){logger['error']('SugarcrmAccount,\x20%s,\x20%s',_0x3dd9b5,_0x29252d[_0x21ca('0x12')]['message']);return _0x158dce(_0x29252d[_0x21ca('0x12')][_0x21ca('0x14')]);}logger['error'](_0x21ca('0xd'),_0x3dd9b5,_0x29252d[_0x21ca('0x12')][_0x21ca('0x14')]);return _0x4673f9(_0x29252d['error'][_0x21ca('0x14')]);}else{logger[_0x21ca('0xc')](_0x21ca('0xd'),_0x3dd9b5,_0x21ca('0xe'));_0x4673f9(_0x29252d[_0x21ca('0x15')]['message']);}})[_0x21ca('0x16')](function(_0x55ef9c){logger['error'](_0x21ca('0xd'),_0x3dd9b5,_0x55ef9c);_0x158dce(_0x55ef9c);});});}exports[_0x21ca('0x17')]=function(_0x501dc0){var _0x2bd1f2=this;return new Promise(function(_0x3194f2,_0x2e6109){return db['SugarcrmAccount']['findAll']({'raw':_0x501dc0['options']?_0x501dc0[_0x21ca('0x18')]['raw']===undefined?!![]:![]:!![],'where':_0x501dc0[_0x21ca('0x18')]?_0x501dc0[_0x21ca('0x18')]['where']||null:null,'attributes':_0x501dc0[_0x21ca('0x18')]?_0x501dc0[_0x21ca('0x18')][_0x21ca('0x19')]||null:null,'limit':_0x501dc0['options']?_0x501dc0[_0x21ca('0x18')]['limit']||null:null,'include':_0x501dc0[_0x21ca('0x18')]?_0x501dc0[_0x21ca('0x18')][_0x21ca('0x1a')]?_[_0x21ca('0x1b')](_0x501dc0[_0x21ca('0x18')]['include'],function(_0x540587){return{'model':db[_0x540587[_0x21ca('0x1c')]],'as':_0x540587['as'],'attributes':_0x540587[_0x21ca('0x19')],'include':_0x540587[_0x21ca('0x1a')]?_[_0x21ca('0x1b')](_0x540587[_0x21ca('0x1a')],function(_0x522d8c){return{'model':db[_0x522d8c[_0x21ca('0x1c')]],'as':_0x522d8c['as'],'attributes':_0x522d8c[_0x21ca('0x19')],'include':_0x522d8c[_0x21ca('0x1a')]?_[_0x21ca('0x1b')](_0x522d8c[_0x21ca('0x1a')],function(_0x1d3dab){return{'model':db[_0x1d3dab[_0x21ca('0x1c')]],'as':_0x1d3dab['as'],'attributes':_0x1d3dab[_0x21ca('0x19')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x3fcefa){logger['info'](_0x21ca('0x17'),_0x501dc0);logger[_0x21ca('0xf')](_0x21ca('0x17'),_0x501dc0,JSON[_0x21ca('0x11')](_0x3fcefa));_0x3194f2(_0x3fcefa);})['catch'](function(_0x462710){logger[_0x21ca('0x12')](_0x21ca('0x17'),_0x462710[_0x21ca('0x14')],_0x501dc0);_0x2e6109(_0x2bd1f2[_0x21ca('0x12')](0x1f4,_0x462710[_0x21ca('0x14')]));});});};exports[_0x21ca('0x1d')]=function(_0x28f257){var _0x333cc7=this;return new Promise(function(_0x278b9f,_0x948f79){return db[_0x21ca('0x1e')][_0x21ca('0x1f')]({'raw':_0x28f257['options']?_0x28f257[_0x21ca('0x18')][_0x21ca('0x20')]===undefined?!![]:![]:!![],'where':_0x28f257[_0x21ca('0x18')]?_0x28f257[_0x21ca('0x18')][_0x21ca('0x21')]||null:null,'attributes':_0x28f257[_0x21ca('0x18')]?_0x28f257[_0x21ca('0x18')]['attributes']||null:null,'include':_0x28f257[_0x21ca('0x18')]?_0x28f257[_0x21ca('0x18')]['include']?_[_0x21ca('0x1b')](_0x28f257[_0x21ca('0x18')]['include'],function(_0x557c4a){return{'model':db[_0x557c4a[_0x21ca('0x1c')]],'as':_0x557c4a['as'],'attributes':_0x557c4a[_0x21ca('0x19')],'include':_0x557c4a[_0x21ca('0x1a')]?_['map'](_0x557c4a[_0x21ca('0x1a')],function(_0x534a5b){return{'model':db[_0x534a5b[_0x21ca('0x1c')]],'as':_0x534a5b['as'],'attributes':_0x534a5b['attributes'],'include':_0x534a5b[_0x21ca('0x1a')]?_['map'](_0x534a5b[_0x21ca('0x1a')],function(_0x20d45d){return{'model':db[_0x20d45d[_0x21ca('0x1c')]],'as':_0x20d45d['as'],'attributes':_0x20d45d['attributes']};}):[]};}):[]};}):[]:[]})[_0x21ca('0x22')](function(_0x71fae2){logger[_0x21ca('0xc')](_0x21ca('0x1d'),_0x28f257);logger[_0x21ca('0xf')](_0x21ca('0x1d'),_0x28f257,JSON[_0x21ca('0x11')](_0x71fae2));_0x278b9f(_0x71fae2);})[_0x21ca('0x16')](function(_0x601f60){logger['error']('ShowSugarcrmAccount',_0x601f60[_0x21ca('0x14')],_0x28f257);_0x948f79(_0x333cc7['error'](0x1f4,_0x601f60[_0x21ca('0x14')]));});});};
\ No newline at end of file
+var _0x9084=['SugarcrmAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','GetSugarcrmAccount','SugarcrmAccount','findAll','options','raw','where','attributes','limit','include','map','model','then','ShowSugarcrmAccount','debug','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','info','SugarcrmAccount,\x20%s,\x20%s'];(function(_0x312440,_0x10c4aa){var _0x145314=function(_0x508530){while(--_0x508530){_0x312440['push'](_0x312440['shift']());}};_0x145314(++_0x10c4aa);}(_0x9084,0xcf));var _0x4908=function(_0xd2be97,_0x4952d2){_0xd2be97=_0xd2be97-0x0;var _0xb112f5=_0x9084[_0xd2be97];return _0xb112f5;};'use strict';var _=require(_0x4908('0x0'));var util=require(_0x4908('0x1'));var moment=require(_0x4908('0x2'));var BPromise=require(_0x4908('0x3'));var rs=require(_0x4908('0x4'));var fs=require('fs');var db=require(_0x4908('0x5'))['db'];var utils=require(_0x4908('0x6'));var logger=require(_0x4908('0x7'))('rpc');var config=require(_0x4908('0x8'));var jayson=require(_0x4908('0x9'));var client=jayson[_0x4908('0xa')][_0x4908('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x40349d,_0x46f048,_0x5ea11c){return new BPromise(function(_0x2640d8,_0x42a57c){return client[_0x4908('0xc')](_0x40349d,_0x5ea11c)['then'](function(_0x3e5a83){logger[_0x4908('0xd')](_0x4908('0xe'),_0x46f048,'request\x20sent');logger['debug'](_0x4908('0xf'),_0x46f048,_0x4908('0x10'),JSON[_0x4908('0x11')](_0x3e5a83));if(_0x3e5a83[_0x4908('0x12')]){if(_0x3e5a83['error'][_0x4908('0x13')]===0x1f4){logger[_0x4908('0x12')](_0x4908('0xe'),_0x46f048,_0x3e5a83[_0x4908('0x12')][_0x4908('0x14')]);return _0x42a57c(_0x3e5a83[_0x4908('0x12')][_0x4908('0x14')]);}logger['error']('SugarcrmAccount,\x20%s,\x20%s',_0x46f048,_0x3e5a83[_0x4908('0x12')]['message']);return _0x2640d8(_0x3e5a83[_0x4908('0x12')][_0x4908('0x14')]);}else{logger[_0x4908('0xd')](_0x4908('0xe'),_0x46f048,_0x4908('0x10'));_0x2640d8(_0x3e5a83[_0x4908('0x15')][_0x4908('0x14')]);}})[_0x4908('0x16')](function(_0x50390c){logger[_0x4908('0x12')]('SugarcrmAccount,\x20%s,\x20%s',_0x46f048,_0x50390c);_0x42a57c(_0x50390c);});});}exports[_0x4908('0x17')]=function(_0x166074){var _0x4cb8bb=this;return new Promise(function(_0x5e88af,_0xdfbcdb){return db[_0x4908('0x18')][_0x4908('0x19')]({'raw':_0x166074[_0x4908('0x1a')]?_0x166074[_0x4908('0x1a')][_0x4908('0x1b')]===undefined?!![]:![]:!![],'where':_0x166074[_0x4908('0x1a')]?_0x166074[_0x4908('0x1a')][_0x4908('0x1c')]||null:null,'attributes':_0x166074[_0x4908('0x1a')]?_0x166074['options'][_0x4908('0x1d')]||null:null,'limit':_0x166074[_0x4908('0x1a')]?_0x166074['options'][_0x4908('0x1e')]||null:null,'include':_0x166074[_0x4908('0x1a')]?_0x166074['options'][_0x4908('0x1f')]?_[_0x4908('0x20')](_0x166074[_0x4908('0x1a')][_0x4908('0x1f')],function(_0x41eb2f){return{'model':db[_0x41eb2f[_0x4908('0x21')]],'as':_0x41eb2f['as'],'attributes':_0x41eb2f[_0x4908('0x1d')],'include':_0x41eb2f[_0x4908('0x1f')]?_['map'](_0x41eb2f[_0x4908('0x1f')],function(_0x33c9fb){return{'model':db[_0x33c9fb[_0x4908('0x21')]],'as':_0x33c9fb['as'],'attributes':_0x33c9fb[_0x4908('0x1d')],'include':_0x33c9fb[_0x4908('0x1f')]?_[_0x4908('0x20')](_0x33c9fb[_0x4908('0x1f')],function(_0x3d66b3){return{'model':db[_0x3d66b3['model']],'as':_0x3d66b3['as'],'attributes':_0x3d66b3[_0x4908('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x4908('0x22')](function(_0x53a347){logger[_0x4908('0xd')]('GetSugarcrmAccount',_0x166074);logger['debug']('GetSugarcrmAccount',_0x166074,JSON[_0x4908('0x11')](_0x53a347));_0x5e88af(_0x53a347);})[_0x4908('0x16')](function(_0x320c2f){logger[_0x4908('0x12')](_0x4908('0x17'),_0x320c2f[_0x4908('0x14')],_0x166074);_0xdfbcdb(_0x4cb8bb[_0x4908('0x12')](0x1f4,_0x320c2f['message']));});});};exports[_0x4908('0x23')]=function(_0x2c7baa){var _0x3f821c=this;return new Promise(function(_0x2bc339,_0x1c3345){return db[_0x4908('0x18')]['find']({'raw':_0x2c7baa[_0x4908('0x1a')]?_0x2c7baa[_0x4908('0x1a')]['raw']===undefined?!![]:![]:!![],'where':_0x2c7baa[_0x4908('0x1a')]?_0x2c7baa['options'][_0x4908('0x1c')]||null:null,'attributes':_0x2c7baa[_0x4908('0x1a')]?_0x2c7baa[_0x4908('0x1a')]['attributes']||null:null,'include':_0x2c7baa[_0x4908('0x1a')]?_0x2c7baa[_0x4908('0x1a')][_0x4908('0x1f')]?_[_0x4908('0x20')](_0x2c7baa[_0x4908('0x1a')][_0x4908('0x1f')],function(_0x25f132){return{'model':db[_0x25f132[_0x4908('0x21')]],'as':_0x25f132['as'],'attributes':_0x25f132[_0x4908('0x1d')],'include':_0x25f132[_0x4908('0x1f')]?_[_0x4908('0x20')](_0x25f132['include'],function(_0xf79fd2){return{'model':db[_0xf79fd2[_0x4908('0x21')]],'as':_0xf79fd2['as'],'attributes':_0xf79fd2[_0x4908('0x1d')],'include':_0xf79fd2[_0x4908('0x1f')]?_[_0x4908('0x20')](_0xf79fd2[_0x4908('0x1f')],function(_0x5a1232){return{'model':db[_0x5a1232[_0x4908('0x21')]],'as':_0x5a1232['as'],'attributes':_0x5a1232[_0x4908('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x4908('0x22')](function(_0x5b457d){logger['info'](_0x4908('0x23'),_0x2c7baa);logger[_0x4908('0x24')](_0x4908('0x23'),_0x2c7baa,JSON[_0x4908('0x11')](_0x5b457d));_0x2bc339(_0x5b457d);})[_0x4908('0x16')](function(_0x306f57){logger[_0x4908('0x12')]('ShowSugarcrmAccount',_0x306f57['message'],_0x2c7baa);_0x1c3345(_0x3f821c[_0x4908('0x12')](0x1f4,_0x306f57[_0x4908('0x14')]));});});};
\ No newline at end of file
index 28a4cd8..9f1677a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x26ba=['exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSugarcrmConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','/:id/descriptions','post','create','put','delete'];(function(_0x41a01f,_0x31772f){var _0x33886c=function(_0x15a458){while(--_0x15a458){_0x41a01f['push'](_0x41a01f['shift']());}};_0x33886c(++_0x31772f);}(_0x26ba,0xa2));var _0xa26b=function(_0xe45b6d,_0x443cac){_0xe45b6d=_0xe45b6d-0x0;var _0x4d6f47=_0x26ba[_0xe45b6d];return _0x4d6f47;};'use strict';var multer=require(_0xa26b('0x0'));var util=require(_0xa26b('0x1'));var path=require(_0xa26b('0x2'));var express=require(_0xa26b('0x3'));var router=express[_0xa26b('0x4')]();var auth=require(_0xa26b('0x5'));var interaction=require(_0xa26b('0x6'));var config=require(_0xa26b('0x7'));var controller=require(_0xa26b('0x8'));router[_0xa26b('0x9')]('/',auth[_0xa26b('0xa')](),controller[_0xa26b('0xb')]);router[_0xa26b('0x9')](_0xa26b('0xc'),auth['isAuthenticated'](),controller[_0xa26b('0xd')]);router['get'](_0xa26b('0xe'),auth[_0xa26b('0xa')](),controller[_0xa26b('0xf')]);router[_0xa26b('0x9')](_0xa26b('0x10'),auth[_0xa26b('0xa')](),controller['getSubjects']);router[_0xa26b('0x9')](_0xa26b('0x11'),auth['isAuthenticated'](),controller['getDescriptions']);router[_0xa26b('0x12')]('/',auth[_0xa26b('0xa')](),controller[_0xa26b('0x13')]);router[_0xa26b('0x14')](_0xa26b('0xc'),auth[_0xa26b('0xa')](),controller['update']);router[_0xa26b('0x15')](_0xa26b('0xc'),auth[_0xa26b('0xa')](),controller['destroy']);module[_0xa26b('0x16')]=router;
\ No newline at end of file
+var _0x98b4=['util','path','express','Router','../../components/auth/service','../../config/environment','./intSugarcrmConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','getSubjects','/:id/descriptions','getDescriptions','post','create','put','update','delete','destroy','exports','multer'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x98b4,0x1da));var _0x498b=function(_0x13d07a,_0x41efc3){_0x13d07a=_0x13d07a-0x0;var _0x5ee0ee=_0x98b4[_0x13d07a];return _0x5ee0ee;};'use strict';var multer=require(_0x498b('0x0'));var util=require(_0x498b('0x1'));var path=require(_0x498b('0x2'));var express=require(_0x498b('0x3'));var router=express[_0x498b('0x4')]();var auth=require(_0x498b('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x498b('0x6'));var controller=require(_0x498b('0x7'));router[_0x498b('0x8')]('/',auth[_0x498b('0x9')](),controller[_0x498b('0xa')]);router[_0x498b('0x8')](_0x498b('0xb'),auth[_0x498b('0x9')](),controller[_0x498b('0xc')]);router['get'](_0x498b('0xd'),auth[_0x498b('0x9')](),controller[_0x498b('0xe')]);router[_0x498b('0x8')]('/:id/subjects',auth[_0x498b('0x9')](),controller[_0x498b('0xf')]);router[_0x498b('0x8')](_0x498b('0x10'),auth[_0x498b('0x9')](),controller[_0x498b('0x11')]);router[_0x498b('0x12')]('/',auth['isAuthenticated'](),controller[_0x498b('0x13')]);router[_0x498b('0x14')](_0x498b('0xb'),auth[_0x498b('0x9')](),controller[_0x498b('0x15')]);router[_0x498b('0x16')]('/:id',auth[_0x498b('0x9')](),controller[_0x498b('0x17')]);module[_0x498b('0x18')]=router;
\ No newline at end of file
index 9f87703..37645a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa021=['STRING','sequelize','exports'];(function(_0x41e466,_0x300488){var _0xba6c4e=function(_0x2ab36b){while(--_0x2ab36b){_0x41e466['push'](_0x41e466['shift']());}};_0xba6c4e(++_0x300488);}(_0xa021,0x14e));var _0x1a02=function(_0x2539e6,_0x595d36){_0x2539e6=_0x2539e6-0x0;var _0xe83570=_0xa021[_0x2539e6];return _0xe83570;};'use strict';var Sequelize=require(_0x1a02('0x0'));module[_0x1a02('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x1a02('0x2')]}};
\ No newline at end of file
+var _0xfb36=['STRING','sequelize','exports'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0xfb36,0x196));var _0x6fb3=function(_0x5ccf63,_0xa3adcb){_0x5ccf63=_0x5ccf63-0x0;var _0x2b34c5=_0xfb36[_0x5ccf63];return _0x2b34c5;};'use strict';var Sequelize=require(_0x6fb3('0x0'));module[_0x6fb3('0x1')]={'name':{'type':Sequelize[_0x6fb3('0x2')]},'description':{'type':Sequelize[_0x6fb3('0x2')]}};
\ No newline at end of file
index 43fbbc9..9b2cf32 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc88f=['merge','filter','map','options','includeAll','findAll','rows','show','length','include','find','create','body','params','getFields','SugarcrmField','sort','pick','getSubjects','findOne','getDescriptions','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','client','http','then','request\x20sent','debug','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','stringify','code','SugarcrmConfiguration,\x20%s,\x20%s','message','error','result','catch','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject','save','update','destroy','end','stack','name','SugarcrmConfiguration','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','hasOwnProperty','nolimit','order','where','filters','add','day'];(function(_0x12b8ec,_0x1655be){var _0x21af77=function(_0xe59f){while(--_0xe59f){_0x12b8ec['push'](_0x12b8ec['shift']());}};_0x21af77(++_0x1655be);}(_0xc88f,0x161));var _0xfc88=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xc88f[_0x321bb2];return _0x9c12ed;};'use strict';var jsonpatch=require(_0xfc88('0x0'));var rp=require(_0xfc88('0x1'));var moment=require(_0xfc88('0x2'));var BPromise=require('bluebird');var Mustache=require(_0xfc88('0x3'));var util=require('util');var path=require(_0xfc88('0x4'));var sox=require(_0xfc88('0x5'));var csv=require(_0xfc88('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xfc88('0x7'));var jsforce=require(_0xfc88('0x8'));var deskjs=require(_0xfc88('0x9'));var toCsv=require(_0xfc88('0x6'));var querystring=require('querystring');var Papa=require(_0xfc88('0xa'));var qs=require(_0xfc88('0xb'));var logger=require(_0xfc88('0xc'))(_0xfc88('0xd'));var utils=require(_0xfc88('0xe'));var config=require(_0xfc88('0xf'));var db=require(_0xfc88('0x10'))['db'];var jayson=require('jayson/promise');var client=jayson[_0xfc88('0x11')][_0xfc88('0x12')]({'port':0x232a});function respondWithRpcPromise(_0x2ee8b3,_0x7a266,_0x564f84,_0x292d64){return new BPromise(function(_0x426d33,_0x35faaa){var _0x330a6f=_0x292d64||client;return _0x330a6f['request'](_0x2ee8b3,_0x564f84)[_0xfc88('0x13')](function(_0xebf3cc){logger['info']('SugarcrmConfiguration,\x20%s,\x20%s',_0x7a266,_0xfc88('0x14'));logger[_0xfc88('0x15')](_0xfc88('0x16'),_0x7a266,'request\x20sent',JSON[_0xfc88('0x17')](_0xebf3cc));if(_0xebf3cc['error']){if(_0xebf3cc['error'][_0xfc88('0x18')]===0x1f4){logger['error'](_0xfc88('0x19'),_0x7a266,_0xebf3cc['error'][_0xfc88('0x1a')]);return _0x35faaa(_0xebf3cc[_0xfc88('0x1b')][_0xfc88('0x1a')]);}logger[_0xfc88('0x1b')](_0xfc88('0x19'),_0x7a266,_0xebf3cc[_0xfc88('0x1b')][_0xfc88('0x1a')]);return _0x426d33(_0xebf3cc[_0xfc88('0x1b')]['message']);}else{logger['info'](_0xfc88('0x19'),_0x7a266,_0xfc88('0x14'));_0x426d33(_0xebf3cc[_0xfc88('0x1c')]['message']);}})[_0xfc88('0x1d')](function(_0x4daf31){logger[_0xfc88('0x1b')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x7a266,_0x4daf31);_0x35faaa(_0x4daf31);});});}function respondWithStatusCode(_0x5ecbac,_0x16f4f9){_0x16f4f9=_0x16f4f9||0xcc;return function(_0x97061c){if(_0x97061c){return _0x5ecbac[_0xfc88('0x1e')](_0x16f4f9);}return _0x5ecbac[_0xfc88('0x1f')](_0x16f4f9)['end']();};}function respondWithResult(_0xcc52d,_0x1522da){_0x1522da=_0x1522da||0xc8;return function(_0xeac7f0){if(_0xeac7f0){return _0xcc52d[_0xfc88('0x1f')](_0x1522da)[_0xfc88('0x20')](_0xeac7f0);}};}function respondWithFilteredResult(_0x4d4b07,_0x2dc456){return function(_0x34de67){if(_0x34de67){var _0x4f22d4=_0x34de67[_0xfc88('0x21')],_0xeffaf9=_0x2dc456[_0xfc88('0x22')],_0x35e327=_0x2dc456[_0xfc88('0x22')]+_0x2dc456[_0xfc88('0x23')],_0x5e1931;if(_0x35e327>=_0x4f22d4){_0x35e327=_0x4f22d4;_0x5e1931=0xc8;}else{_0x5e1931=0xce;}_0x4d4b07[_0xfc88('0x1f')](_0x5e1931);return _0x4d4b07['set'](_0xfc88('0x24'),_0xeffaf9+'-'+_0x35e327+'/'+_0x4f22d4)[_0xfc88('0x20')](_0x34de67);}return null;};}function patchUpdates(_0x501971){return function(_0x4fa37b){try{jsonpatch[_0xfc88('0x25')](_0x4fa37b,_0x501971,!![]);}catch(_0x3bed17){return BPromise[_0xfc88('0x26')](_0x3bed17);}return _0x4fa37b[_0xfc88('0x27')]();};}function saveUpdates(_0x3fc593,_0x14bb16){return function(_0x3b9b60){if(_0x3b9b60){return _0x3b9b60[_0xfc88('0x28')](_0x3fc593)[_0xfc88('0x13')](function(_0x4608f2){return _0x4608f2;});}return null;};}function removeEntity(_0x4983d9,_0x5102d8){return function(_0x4afc88){if(_0x4afc88){return _0x4afc88[_0xfc88('0x29')]()['then'](function(){_0x4983d9[_0xfc88('0x1f')](0xcc)[_0xfc88('0x2a')]();});}};}function handleEntityNotFound(_0x5bfa55,_0x4df4d7){return function(_0x18bf3a){if(!_0x18bf3a){_0x5bfa55['sendStatus'](0x194);}return _0x18bf3a;};}function handleError(_0x26fe26,_0x309a41){_0x309a41=_0x309a41||0x1f4;return function(_0x1b2e71){logger[_0xfc88('0x1b')](_0x1b2e71[_0xfc88('0x2b')]);if(_0x1b2e71[_0xfc88('0x2c')]){delete _0x1b2e71[_0xfc88('0x2c')];}_0x26fe26[_0xfc88('0x1f')](_0x309a41)['send'](_0x1b2e71);};}exports['index']=function(_0x5701de,_0x16b272){var _0x4ef8c5={},_0x111ff4={},_0x58c2cb={'count':0x0,'rows':[]};var _0x55c08a=db[_0xfc88('0x2d')][_0xfc88('0x2e')];_0x111ff4[_0xfc88('0x2f')]=_[_0xfc88('0x30')](_0x55c08a);var _0xdb9d6c={'dateStart':_0x5701de[_0xfc88('0x31')][_0xfc88('0x32')],'dateEnd':_0x5701de[_0xfc88('0x31')][_0xfc88('0x33')]};delete _0x5701de[_0xfc88('0x31')][_0xfc88('0x32')];delete _0x5701de[_0xfc88('0x31')][_0xfc88('0x33')];_0x111ff4[_0xfc88('0x31')]=_[_0xfc88('0x30')](_0x5701de[_0xfc88('0x31')]);_0x111ff4['filters']=_[_0xfc88('0x34')](_0x111ff4[_0xfc88('0x2f')],_0x111ff4[_0xfc88('0x31')]);_0x4ef8c5[_0xfc88('0x35')]=_[_0xfc88('0x34')](_0x111ff4[_0xfc88('0x2f')],qs[_0xfc88('0x36')](_0x5701de[_0xfc88('0x31')][_0xfc88('0x36')]));_0x4ef8c5[_0xfc88('0x35')]=_0x4ef8c5[_0xfc88('0x35')]['length']?_0x4ef8c5[_0xfc88('0x35')]:_0x111ff4['model'];if(!_0x5701de['query'][_0xfc88('0x37')](_0xfc88('0x38'))){_0x4ef8c5[_0xfc88('0x23')]=qs['limit'](_0x5701de[_0xfc88('0x31')][_0xfc88('0x23')]);_0x4ef8c5[_0xfc88('0x22')]=qs['offset'](_0x5701de[_0xfc88('0x31')][_0xfc88('0x22')]);}_0x4ef8c5[_0xfc88('0x39')]=qs['sort'](_0x5701de[_0xfc88('0x31')]['sort']);_0x4ef8c5[_0xfc88('0x3a')]=qs[_0xfc88('0x3b')](_['pick'](_0x5701de[_0xfc88('0x31')],_0x111ff4['filters']));if(_0xdb9d6c['dateStart']){if(_0xdb9d6c[_0xfc88('0x33')]){_0xdb9d6c[_0xfc88('0x33')]=moment(_0xdb9d6c[_0xfc88('0x33')])[_0xfc88('0x3c')](0x1,_0xfc88('0x3d'));}else{_0xdb9d6c[_0xfc88('0x33')]=moment(_0xdb9d6c[_0xfc88('0x32')])[_0xfc88('0x3c')](0x1,'day');}_[_0xfc88('0x3e')](_0x4ef8c5[_0xfc88('0x3a')],{'createdAt':{'$gte':_0xdb9d6c[_0xfc88('0x32')],'$lte':_0xdb9d6c[_0xfc88('0x33')]}});}if(_0x5701de[_0xfc88('0x31')][_0xfc88('0x3f')]){_0x4ef8c5[_0xfc88('0x3a')]=_[_0xfc88('0x3e')](_0x4ef8c5['where'],{'$or':_[_0xfc88('0x40')](_0x4ef8c5[_0xfc88('0x35')],function(_0x26da66){var _0x3f8af4={};_0x3f8af4[_0x26da66]={'$like':'%'+_0x5701de['query']['filter']+'%'};return _0x3f8af4;})});}_0x4ef8c5=_[_0xfc88('0x3e')]({},_0x4ef8c5,_0x5701de[_0xfc88('0x41')]);var _0x56357c={'where':_0x4ef8c5['where']};return db[_0xfc88('0x2d')][_0xfc88('0x21')](_0x56357c)[_0xfc88('0x13')](function(_0x354d5f){_0x58c2cb[_0xfc88('0x21')]=_0x354d5f;if(_0x5701de['query'][_0xfc88('0x42')]){_0x4ef8c5['include']=[{'all':!![]}];}return db[_0xfc88('0x2d')][_0xfc88('0x43')](_0x4ef8c5);})[_0xfc88('0x13')](function(_0x8a98c4){_0x58c2cb[_0xfc88('0x44')]=_0x8a98c4;return _0x58c2cb;})[_0xfc88('0x13')](respondWithFilteredResult(_0x16b272,_0x4ef8c5))[_0xfc88('0x1d')](handleError(_0x16b272,null));};exports[_0xfc88('0x45')]=function(_0x42dbe9,_0x3331c5){var _0x1a8a3f={'raw':![],'where':{'id':_0x42dbe9['params']['id']}},_0x2cee86={};_0x2cee86[_0xfc88('0x2f')]=_['keys'](db[_0xfc88('0x2d')][_0xfc88('0x2e')]);_0x2cee86[_0xfc88('0x31')]=_[_0xfc88('0x30')](_0x42dbe9['query']);_0x2cee86[_0xfc88('0x3b')]=_[_0xfc88('0x34')](_0x2cee86[_0xfc88('0x2f')],_0x2cee86['query']);_0x1a8a3f[_0xfc88('0x35')]=_[_0xfc88('0x34')](_0x2cee86[_0xfc88('0x2f')],qs[_0xfc88('0x36')](_0x42dbe9[_0xfc88('0x31')]['fields']));_0x1a8a3f[_0xfc88('0x35')]=_0x1a8a3f['attributes'][_0xfc88('0x46')]?_0x1a8a3f[_0xfc88('0x35')]:_0x2cee86['model'];if(_0x42dbe9[_0xfc88('0x31')]['includeAll']){_0x1a8a3f[_0xfc88('0x47')]=[{'all':!![]}];}_0x1a8a3f=_['merge']({},_0x1a8a3f,_0x42dbe9[_0xfc88('0x41')]);return db[_0xfc88('0x2d')][_0xfc88('0x48')](_0x1a8a3f)['then'](handleEntityNotFound(_0x3331c5,null))[_0xfc88('0x13')](respondWithResult(_0x3331c5,null))[_0xfc88('0x1d')](handleError(_0x3331c5,null));};exports[_0xfc88('0x49')]=function(_0x5f0c6a,_0x444583){return db['SugarcrmConfiguration'][_0xfc88('0x49')](_0x5f0c6a[_0xfc88('0x4a')],{})[_0xfc88('0x13')](respondWithResult(_0x444583,0xc9))[_0xfc88('0x1d')](handleError(_0x444583,null));};exports[_0xfc88('0x28')]=function(_0x44ce94,_0x11f3de){if(_0x44ce94[_0xfc88('0x4a')]['id']){delete _0x44ce94[_0xfc88('0x4a')]['id'];}return db['SugarcrmConfiguration'][_0xfc88('0x48')]({'where':{'id':_0x44ce94[_0xfc88('0x4b')]['id']}})['then'](handleEntityNotFound(_0x11f3de,null))[_0xfc88('0x13')](saveUpdates(_0x44ce94[_0xfc88('0x4a')],null))['then'](respondWithResult(_0x11f3de,null))['catch'](handleError(_0x11f3de,null));};exports[_0xfc88('0x29')]=function(_0x2d91fc,_0x2917ba){return db[_0xfc88('0x2d')][_0xfc88('0x48')]({'where':{'id':_0x2d91fc[_0xfc88('0x4b')]['id']}})[_0xfc88('0x13')](handleEntityNotFound(_0x2917ba,null))['then'](removeEntity(_0x2917ba,null))['catch'](handleError(_0x2917ba,null));};exports[_0xfc88('0x4c')]=function(_0x2bec66,_0x3401a4,_0x3c18b5){var _0x1938e8={};var _0x45b626={};var _0x5effad;var _0x232430;return db['SugarcrmConfiguration']['findOne']({'where':{'id':_0x2bec66[_0xfc88('0x4b')]['id']}})[_0xfc88('0x13')](handleEntityNotFound(_0x3401a4,null))[_0xfc88('0x13')](function(_0x4d6784){if(_0x4d6784){_0x5effad=_0x4d6784;_0x45b626[_0xfc88('0x2f')]=_['keys'](db[_0xfc88('0x4d')]['rawAttributes']);_0x45b626[_0xfc88('0x31')]=_[_0xfc88('0x30')](_0x2bec66[_0xfc88('0x31')]);_0x45b626[_0xfc88('0x3b')]=_[_0xfc88('0x34')](_0x45b626['model'],_0x45b626['query']);_0x1938e8['attributes']=_[_0xfc88('0x34')](_0x45b626[_0xfc88('0x2f')],qs[_0xfc88('0x36')](_0x2bec66[_0xfc88('0x31')][_0xfc88('0x36')]));_0x1938e8[_0xfc88('0x35')]=_0x1938e8[_0xfc88('0x35')][_0xfc88('0x46')]?_0x1938e8[_0xfc88('0x35')]:_0x45b626[_0xfc88('0x2f')];_0x1938e8[_0xfc88('0x39')]=qs[_0xfc88('0x4e')](_0x2bec66[_0xfc88('0x31')][_0xfc88('0x4e')]);_0x1938e8['where']=qs[_0xfc88('0x3b')](_[_0xfc88('0x4f')](_0x2bec66['query'],_0x45b626[_0xfc88('0x3b')]));if(_0x2bec66['query'][_0xfc88('0x3f')]){_0x1938e8['where']=_[_0xfc88('0x3e')](_0x1938e8[_0xfc88('0x3a')],{'$or':_['map'](_0x1938e8[_0xfc88('0x35')],function(_0x18c51e){var _0x20d33f={};_0x20d33f[_0x18c51e]={'$like':'%'+_0x2bec66[_0xfc88('0x31')][_0xfc88('0x3f')]+'%'};return _0x20d33f;})});}_0x1938e8=_[_0xfc88('0x3e')]({},_0x1938e8,_0x2bec66['options']);return _0x5effad[_0xfc88('0x4c')](_0x1938e8);}})[_0xfc88('0x13')](function(_0x3191c2){if(_0x3191c2){_0x232430=_0x3191c2[_0xfc88('0x46')];if(!_0x2bec66[_0xfc88('0x31')][_0xfc88('0x37')]('nolimit')){_0x1938e8[_0xfc88('0x23')]=qs[_0xfc88('0x23')](_0x2bec66[_0xfc88('0x31')]['limit']);_0x1938e8[_0xfc88('0x22')]=qs[_0xfc88('0x22')](_0x2bec66[_0xfc88('0x31')][_0xfc88('0x22')]);}return _0x5effad[_0xfc88('0x4c')](_0x1938e8);}})['then'](function(_0x1794c2){if(_0x1794c2){return _0x1794c2?{'count':_0x232430,'rows':_0x1794c2}:null;}})[_0xfc88('0x13')](respondWithResult(_0x3401a4,null))[_0xfc88('0x1d')](handleError(_0x3401a4,null));};exports[_0xfc88('0x50')]=function(_0xea8644,_0x3820e7,_0x388efa){var _0x2db8ad={};var _0x546c3c={};var _0x20e16f;var _0x13c0be;return db[_0xfc88('0x2d')][_0xfc88('0x51')]({'where':{'id':_0xea8644[_0xfc88('0x4b')]['id']}})[_0xfc88('0x13')](handleEntityNotFound(_0x3820e7,null))[_0xfc88('0x13')](function(_0x43d894){if(_0x43d894){_0x20e16f=_0x43d894;_0x546c3c['model']=_[_0xfc88('0x30')](db['SugarcrmField'][_0xfc88('0x2e')]);_0x546c3c[_0xfc88('0x31')]=_[_0xfc88('0x30')](_0xea8644[_0xfc88('0x31')]);_0x546c3c[_0xfc88('0x3b')]=_['intersection'](_0x546c3c[_0xfc88('0x2f')],_0x546c3c[_0xfc88('0x31')]);_0x2db8ad['attributes']=_[_0xfc88('0x34')](_0x546c3c[_0xfc88('0x2f')],qs[_0xfc88('0x36')](_0xea8644[_0xfc88('0x31')][_0xfc88('0x36')]));_0x2db8ad[_0xfc88('0x35')]=_0x2db8ad[_0xfc88('0x35')]['length']?_0x2db8ad[_0xfc88('0x35')]:_0x546c3c['model'];_0x2db8ad[_0xfc88('0x39')]=qs[_0xfc88('0x4e')](_0xea8644[_0xfc88('0x31')][_0xfc88('0x4e')]);_0x2db8ad[_0xfc88('0x3a')]=qs[_0xfc88('0x3b')](_[_0xfc88('0x4f')](_0xea8644[_0xfc88('0x31')],_0x546c3c[_0xfc88('0x3b')]));if(_0xea8644['query'][_0xfc88('0x3f')]){_0x2db8ad[_0xfc88('0x3a')]=_[_0xfc88('0x3e')](_0x2db8ad[_0xfc88('0x3a')],{'$or':_[_0xfc88('0x40')](_0x2db8ad[_0xfc88('0x35')],function(_0x14823f){var _0x119890={};_0x119890[_0x14823f]={'$like':'%'+_0xea8644['query'][_0xfc88('0x3f')]+'%'};return _0x119890;})});}_0x2db8ad=_[_0xfc88('0x3e')]({},_0x2db8ad,_0xea8644[_0xfc88('0x41')]);return _0x20e16f['getSubjects'](_0x2db8ad);}})[_0xfc88('0x13')](function(_0x525afb){if(_0x525afb){_0x13c0be=_0x525afb[_0xfc88('0x46')];if(!_0xea8644[_0xfc88('0x31')][_0xfc88('0x37')](_0xfc88('0x38'))){_0x2db8ad['limit']=qs['limit'](_0xea8644['query'][_0xfc88('0x23')]);_0x2db8ad[_0xfc88('0x22')]=qs[_0xfc88('0x22')](_0xea8644['query'][_0xfc88('0x22')]);}return _0x20e16f[_0xfc88('0x50')](_0x2db8ad);}})['then'](function(_0x320bee){if(_0x320bee){return _0x320bee?{'count':_0x13c0be,'rows':_0x320bee}:null;}})['then'](respondWithResult(_0x3820e7,null))[_0xfc88('0x1d')](handleError(_0x3820e7,null));};exports[_0xfc88('0x52')]=function(_0x12ca17,_0x1fd149,_0x40bb94){var _0x1e9d91={};var _0x4995a2={};var _0x5c38e1;var _0x27f77c;return db['SugarcrmConfiguration'][_0xfc88('0x51')]({'where':{'id':_0x12ca17['params']['id']}})[_0xfc88('0x13')](handleEntityNotFound(_0x1fd149,null))[_0xfc88('0x13')](function(_0x55da1){if(_0x55da1){_0x5c38e1=_0x55da1;_0x4995a2[_0xfc88('0x2f')]=_[_0xfc88('0x30')](db['SugarcrmField']['rawAttributes']);_0x4995a2[_0xfc88('0x31')]=_[_0xfc88('0x30')](_0x12ca17['query']);_0x4995a2[_0xfc88('0x3b')]=_['intersection'](_0x4995a2[_0xfc88('0x2f')],_0x4995a2[_0xfc88('0x31')]);_0x1e9d91[_0xfc88('0x35')]=_[_0xfc88('0x34')](_0x4995a2[_0xfc88('0x2f')],qs[_0xfc88('0x36')](_0x12ca17[_0xfc88('0x31')]['fields']));_0x1e9d91['attributes']=_0x1e9d91[_0xfc88('0x35')][_0xfc88('0x46')]?_0x1e9d91['attributes']:_0x4995a2[_0xfc88('0x2f')];_0x1e9d91[_0xfc88('0x39')]=qs[_0xfc88('0x4e')](_0x12ca17['query'][_0xfc88('0x4e')]);_0x1e9d91[_0xfc88('0x3a')]=qs[_0xfc88('0x3b')](_[_0xfc88('0x4f')](_0x12ca17[_0xfc88('0x31')],_0x4995a2['filters']));if(_0x12ca17['query'][_0xfc88('0x3f')]){_0x1e9d91['where']=_[_0xfc88('0x3e')](_0x1e9d91[_0xfc88('0x3a')],{'$or':_['map'](_0x1e9d91['attributes'],function(_0x2e93af){var _0x1648b3={};_0x1648b3[_0x2e93af]={'$like':'%'+_0x12ca17['query'][_0xfc88('0x3f')]+'%'};return _0x1648b3;})});}_0x1e9d91=_[_0xfc88('0x3e')]({},_0x1e9d91,_0x12ca17['options']);return _0x5c38e1[_0xfc88('0x52')](_0x1e9d91);}})[_0xfc88('0x13')](function(_0x32ca25){if(_0x32ca25){_0x27f77c=_0x32ca25[_0xfc88('0x46')];if(!_0x12ca17[_0xfc88('0x31')][_0xfc88('0x37')](_0xfc88('0x38'))){_0x1e9d91['limit']=qs[_0xfc88('0x23')](_0x12ca17[_0xfc88('0x31')][_0xfc88('0x23')]);_0x1e9d91['offset']=qs[_0xfc88('0x22')](_0x12ca17[_0xfc88('0x31')]['offset']);}return _0x5c38e1['getDescriptions'](_0x1e9d91);}})[_0xfc88('0x13')](function(_0x964d16){if(_0x964d16){return _0x964d16?{'count':_0x27f77c,'rows':_0x964d16}:null;}})[_0xfc88('0x13')](respondWithResult(_0x1fd149,null))[_0xfc88('0x1d')](handleError(_0x1fd149,null));};
\ No newline at end of file
+var _0xedc9=['getFields','findOne','SugarcrmField','pick','hasOwnProperty','getSubjects','getDescriptions','fast-json-patch','request-promise','moment','mustache','util','path','sox','ejs','squel','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','client','http','info','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','result','sendStatus','status','offset','limit','Content-Range','json','reject','update','destroy','then','end','stack','name','send','index','SugarcrmConfiguration','rawAttributes','query','dateEnd','dateStart','keys','model','attributes','intersection','fields','length','nolimit','order','sort','where','filters','add','day','filter','merge','map','options','count','includeAll','include','findAll','rows','catch','find','create','body','params'];(function(_0x449beb,_0x2910d8){var _0x23839a=function(_0x36df39){while(--_0x36df39){_0x449beb['push'](_0x449beb['shift']());}};_0x23839a(++_0x2910d8);}(_0xedc9,0x106));var _0x9edc=function(_0x3cb9eb,_0x3fd4b9){_0x3cb9eb=_0x3cb9eb-0x0;var _0x4d5970=_0xedc9[_0x3cb9eb];return _0x4d5970;};'use strict';var jsonpatch=require(_0x9edc('0x0'));var rp=require(_0x9edc('0x1'));var moment=require(_0x9edc('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x9edc('0x3'));var util=require(_0x9edc('0x4'));var path=require(_0x9edc('0x5'));var sox=require(_0x9edc('0x6'));var csv=require('to-csv');var ejs=require(_0x9edc('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0x9edc('0x8'));var crypto=require('crypto');var jsforce=require(_0x9edc('0x9'));var deskjs=require(_0x9edc('0xa'));var toCsv=require(_0x9edc('0xb'));var querystring=require(_0x9edc('0xc'));var Papa=require(_0x9edc('0xd'));var qs=require(_0x9edc('0xe'));var logger=require(_0x9edc('0xf'))(_0x9edc('0x10'));var utils=require(_0x9edc('0x11'));var config=require(_0x9edc('0x12'));var db=require(_0x9edc('0x13'))['db'];var jayson=require('jayson/promise');var client=jayson[_0x9edc('0x14')][_0x9edc('0x15')]({'port':0x232a});function respondWithRpcPromise(_0x49fd74,_0x324ef1,_0x48603c,_0x118a7e){return new BPromise(function(_0x21d720,_0x2c5424){var _0xf2a606=_0x118a7e||client;return _0xf2a606['request'](_0x49fd74,_0x48603c)['then'](function(_0x41f064){logger[_0x9edc('0x16')](_0x9edc('0x17'),_0x324ef1,_0x9edc('0x18'));logger[_0x9edc('0x19')](_0x9edc('0x1a'),_0x324ef1,_0x9edc('0x18'),JSON[_0x9edc('0x1b')](_0x41f064));if(_0x41f064['error']){if(_0x41f064[_0x9edc('0x1c')]['code']===0x1f4){logger['error'](_0x9edc('0x17'),_0x324ef1,_0x41f064[_0x9edc('0x1c')][_0x9edc('0x1d')]);return _0x2c5424(_0x41f064['error'][_0x9edc('0x1d')]);}logger['error']('SugarcrmConfiguration,\x20%s,\x20%s',_0x324ef1,_0x41f064[_0x9edc('0x1c')][_0x9edc('0x1d')]);return _0x21d720(_0x41f064[_0x9edc('0x1c')]['message']);}else{logger[_0x9edc('0x16')](_0x9edc('0x17'),_0x324ef1,_0x9edc('0x18'));_0x21d720(_0x41f064[_0x9edc('0x1e')][_0x9edc('0x1d')]);}})['catch'](function(_0x3c4d4d){logger['error'](_0x9edc('0x17'),_0x324ef1,_0x3c4d4d);_0x2c5424(_0x3c4d4d);});});}function respondWithStatusCode(_0x57345d,_0x23fff7){_0x23fff7=_0x23fff7||0xcc;return function(_0x59778d){if(_0x59778d){return _0x57345d[_0x9edc('0x1f')](_0x23fff7);}return _0x57345d[_0x9edc('0x20')](_0x23fff7)['end']();};}function respondWithResult(_0x5bf069,_0x37d7d0){_0x37d7d0=_0x37d7d0||0xc8;return function(_0x43f5db){if(_0x43f5db){return _0x5bf069[_0x9edc('0x20')](_0x37d7d0)['json'](_0x43f5db);}};}function respondWithFilteredResult(_0x1365c7,_0x277c9e){return function(_0xef1443){if(_0xef1443){var _0x15653d=_0xef1443['count'],_0x39f695=_0x277c9e[_0x9edc('0x21')],_0x372e86=_0x277c9e['offset']+_0x277c9e[_0x9edc('0x22')],_0x61a86b;if(_0x372e86>=_0x15653d){_0x372e86=_0x15653d;_0x61a86b=0xc8;}else{_0x61a86b=0xce;}_0x1365c7[_0x9edc('0x20')](_0x61a86b);return _0x1365c7['set'](_0x9edc('0x23'),_0x39f695+'-'+_0x372e86+'/'+_0x15653d)[_0x9edc('0x24')](_0xef1443);}return null;};}function patchUpdates(_0x53b3bf){return function(_0x392614){try{jsonpatch['apply'](_0x392614,_0x53b3bf,!![]);}catch(_0x10d26a){return BPromise[_0x9edc('0x25')](_0x10d26a);}return _0x392614['save']();};}function saveUpdates(_0x102011,_0x53d150){return function(_0x4ba203){if(_0x4ba203){return _0x4ba203[_0x9edc('0x26')](_0x102011)['then'](function(_0x49700c){return _0x49700c;});}return null;};}function removeEntity(_0x22ce89,_0x52aca0){return function(_0x303396){if(_0x303396){return _0x303396[_0x9edc('0x27')]()[_0x9edc('0x28')](function(){_0x22ce89[_0x9edc('0x20')](0xcc)[_0x9edc('0x29')]();});}};}function handleEntityNotFound(_0xa9907a,_0x2cf57c){return function(_0x4cfc71){if(!_0x4cfc71){_0xa9907a[_0x9edc('0x1f')](0x194);}return _0x4cfc71;};}function handleError(_0xd8707a,_0x16bcb5){_0x16bcb5=_0x16bcb5||0x1f4;return function(_0x16939f){logger[_0x9edc('0x1c')](_0x16939f[_0x9edc('0x2a')]);if(_0x16939f[_0x9edc('0x2b')]){delete _0x16939f[_0x9edc('0x2b')];}_0xd8707a[_0x9edc('0x20')](_0x16bcb5)[_0x9edc('0x2c')](_0x16939f);};}exports[_0x9edc('0x2d')]=function(_0x3c2419,_0x3af91e){var _0x22e5b7={},_0x2a4ae0={},_0x23782d={'count':0x0,'rows':[]};var _0x33b808=db[_0x9edc('0x2e')][_0x9edc('0x2f')];_0x2a4ae0['model']=_['keys'](_0x33b808);var _0x7f516e={'dateStart':_0x3c2419[_0x9edc('0x30')]['dateStart'],'dateEnd':_0x3c2419['query'][_0x9edc('0x31')]};delete _0x3c2419[_0x9edc('0x30')][_0x9edc('0x32')];delete _0x3c2419['query'][_0x9edc('0x31')];_0x2a4ae0[_0x9edc('0x30')]=_[_0x9edc('0x33')](_0x3c2419[_0x9edc('0x30')]);_0x2a4ae0['filters']=_['intersection'](_0x2a4ae0[_0x9edc('0x34')],_0x2a4ae0[_0x9edc('0x30')]);_0x22e5b7[_0x9edc('0x35')]=_[_0x9edc('0x36')](_0x2a4ae0['model'],qs['fields'](_0x3c2419[_0x9edc('0x30')][_0x9edc('0x37')]));_0x22e5b7['attributes']=_0x22e5b7[_0x9edc('0x35')][_0x9edc('0x38')]?_0x22e5b7[_0x9edc('0x35')]:_0x2a4ae0['model'];if(!_0x3c2419[_0x9edc('0x30')]['hasOwnProperty'](_0x9edc('0x39'))){_0x22e5b7['limit']=qs[_0x9edc('0x22')](_0x3c2419[_0x9edc('0x30')][_0x9edc('0x22')]);_0x22e5b7[_0x9edc('0x21')]=qs[_0x9edc('0x21')](_0x3c2419['query'][_0x9edc('0x21')]);}_0x22e5b7[_0x9edc('0x3a')]=qs[_0x9edc('0x3b')](_0x3c2419['query']['sort']);_0x22e5b7[_0x9edc('0x3c')]=qs[_0x9edc('0x3d')](_['pick'](_0x3c2419[_0x9edc('0x30')],_0x2a4ae0['filters']));if(_0x7f516e[_0x9edc('0x32')]){if(_0x7f516e['dateEnd']){_0x7f516e[_0x9edc('0x31')]=moment(_0x7f516e[_0x9edc('0x31')])[_0x9edc('0x3e')](0x1,'day');}else{_0x7f516e[_0x9edc('0x31')]=moment(_0x7f516e[_0x9edc('0x32')])[_0x9edc('0x3e')](0x1,_0x9edc('0x3f'));}_['merge'](_0x22e5b7[_0x9edc('0x3c')],{'createdAt':{'$gte':_0x7f516e['dateStart'],'$lte':_0x7f516e['dateEnd']}});}if(_0x3c2419['query'][_0x9edc('0x40')]){_0x22e5b7[_0x9edc('0x3c')]=_[_0x9edc('0x41')](_0x22e5b7[_0x9edc('0x3c')],{'$or':_[_0x9edc('0x42')](_0x22e5b7['attributes'],function(_0x190d60){var _0x3e04f3={};_0x3e04f3[_0x190d60]={'$like':'%'+_0x3c2419[_0x9edc('0x30')]['filter']+'%'};return _0x3e04f3;})});}_0x22e5b7=_['merge']({},_0x22e5b7,_0x3c2419[_0x9edc('0x43')]);var _0x4df578={'where':_0x22e5b7[_0x9edc('0x3c')]};return db['SugarcrmConfiguration'][_0x9edc('0x44')](_0x4df578)['then'](function(_0x28b5d2){_0x23782d[_0x9edc('0x44')]=_0x28b5d2;if(_0x3c2419['query'][_0x9edc('0x45')]){_0x22e5b7[_0x9edc('0x46')]=[{'all':!![]}];}return db[_0x9edc('0x2e')][_0x9edc('0x47')](_0x22e5b7);})[_0x9edc('0x28')](function(_0x62830c){_0x23782d[_0x9edc('0x48')]=_0x62830c;return _0x23782d;})[_0x9edc('0x28')](respondWithFilteredResult(_0x3af91e,_0x22e5b7))[_0x9edc('0x49')](handleError(_0x3af91e,null));};exports['show']=function(_0x4afc32,_0x2da750){var _0x14c16e={'raw':![],'where':{'id':_0x4afc32['params']['id']}},_0x560f0c={};_0x560f0c[_0x9edc('0x34')]=_['keys'](db[_0x9edc('0x2e')]['rawAttributes']);_0x560f0c[_0x9edc('0x30')]=_['keys'](_0x4afc32[_0x9edc('0x30')]);_0x560f0c[_0x9edc('0x3d')]=_['intersection'](_0x560f0c['model'],_0x560f0c[_0x9edc('0x30')]);_0x14c16e[_0x9edc('0x35')]=_[_0x9edc('0x36')](_0x560f0c[_0x9edc('0x34')],qs[_0x9edc('0x37')](_0x4afc32[_0x9edc('0x30')][_0x9edc('0x37')]));_0x14c16e[_0x9edc('0x35')]=_0x14c16e[_0x9edc('0x35')][_0x9edc('0x38')]?_0x14c16e[_0x9edc('0x35')]:_0x560f0c[_0x9edc('0x34')];if(_0x4afc32['query'][_0x9edc('0x45')]){_0x14c16e[_0x9edc('0x46')]=[{'all':!![]}];}_0x14c16e=_[_0x9edc('0x41')]({},_0x14c16e,_0x4afc32[_0x9edc('0x43')]);return db[_0x9edc('0x2e')][_0x9edc('0x4a')](_0x14c16e)[_0x9edc('0x28')](handleEntityNotFound(_0x2da750,null))[_0x9edc('0x28')](respondWithResult(_0x2da750,null))[_0x9edc('0x49')](handleError(_0x2da750,null));};exports[_0x9edc('0x4b')]=function(_0x291c9d,_0x534035){return db[_0x9edc('0x2e')][_0x9edc('0x4b')](_0x291c9d['body'],{})[_0x9edc('0x28')](respondWithResult(_0x534035,0xc9))[_0x9edc('0x49')](handleError(_0x534035,null));};exports[_0x9edc('0x26')]=function(_0x34c9bc,_0x6e0de0){if(_0x34c9bc[_0x9edc('0x4c')]['id']){delete _0x34c9bc[_0x9edc('0x4c')]['id'];}return db[_0x9edc('0x2e')][_0x9edc('0x4a')]({'where':{'id':_0x34c9bc[_0x9edc('0x4d')]['id']}})['then'](handleEntityNotFound(_0x6e0de0,null))['then'](saveUpdates(_0x34c9bc['body'],null))[_0x9edc('0x28')](respondWithResult(_0x6e0de0,null))[_0x9edc('0x49')](handleError(_0x6e0de0,null));};exports['destroy']=function(_0x14a454,_0x25a317){return db[_0x9edc('0x2e')][_0x9edc('0x4a')]({'where':{'id':_0x14a454[_0x9edc('0x4d')]['id']}})['then'](handleEntityNotFound(_0x25a317,null))['then'](removeEntity(_0x25a317,null))[_0x9edc('0x49')](handleError(_0x25a317,null));};exports[_0x9edc('0x4e')]=function(_0x675b47,_0x4a85c3,_0x3ba48f){var _0x5b0244={};var _0x273c68={};var _0x4f4d3f;var _0x1f87b9;return db[_0x9edc('0x2e')][_0x9edc('0x4f')]({'where':{'id':_0x675b47[_0x9edc('0x4d')]['id']}})[_0x9edc('0x28')](handleEntityNotFound(_0x4a85c3,null))[_0x9edc('0x28')](function(_0x259374){if(_0x259374){_0x4f4d3f=_0x259374;_0x273c68['model']=_['keys'](db[_0x9edc('0x50')][_0x9edc('0x2f')]);_0x273c68[_0x9edc('0x30')]=_[_0x9edc('0x33')](_0x675b47[_0x9edc('0x30')]);_0x273c68['filters']=_[_0x9edc('0x36')](_0x273c68[_0x9edc('0x34')],_0x273c68[_0x9edc('0x30')]);_0x5b0244[_0x9edc('0x35')]=_[_0x9edc('0x36')](_0x273c68[_0x9edc('0x34')],qs[_0x9edc('0x37')](_0x675b47[_0x9edc('0x30')][_0x9edc('0x37')]));_0x5b0244[_0x9edc('0x35')]=_0x5b0244[_0x9edc('0x35')][_0x9edc('0x38')]?_0x5b0244[_0x9edc('0x35')]:_0x273c68[_0x9edc('0x34')];_0x5b0244[_0x9edc('0x3a')]=qs['sort'](_0x675b47[_0x9edc('0x30')]['sort']);_0x5b0244[_0x9edc('0x3c')]=qs[_0x9edc('0x3d')](_[_0x9edc('0x51')](_0x675b47[_0x9edc('0x30')],_0x273c68[_0x9edc('0x3d')]));if(_0x675b47[_0x9edc('0x30')][_0x9edc('0x40')]){_0x5b0244[_0x9edc('0x3c')]=_['merge'](_0x5b0244[_0x9edc('0x3c')],{'$or':_['map'](_0x5b0244['attributes'],function(_0x1d2484){var _0x5c3af0={};_0x5c3af0[_0x1d2484]={'$like':'%'+_0x675b47['query'][_0x9edc('0x40')]+'%'};return _0x5c3af0;})});}_0x5b0244=_[_0x9edc('0x41')]({},_0x5b0244,_0x675b47[_0x9edc('0x43')]);return _0x4f4d3f[_0x9edc('0x4e')](_0x5b0244);}})[_0x9edc('0x28')](function(_0x76f07e){if(_0x76f07e){_0x1f87b9=_0x76f07e[_0x9edc('0x38')];if(!_0x675b47[_0x9edc('0x30')][_0x9edc('0x52')](_0x9edc('0x39'))){_0x5b0244['limit']=qs[_0x9edc('0x22')](_0x675b47['query'][_0x9edc('0x22')]);_0x5b0244[_0x9edc('0x21')]=qs[_0x9edc('0x21')](_0x675b47[_0x9edc('0x30')][_0x9edc('0x21')]);}return _0x4f4d3f[_0x9edc('0x4e')](_0x5b0244);}})[_0x9edc('0x28')](function(_0x2ac4f2){if(_0x2ac4f2){return _0x2ac4f2?{'count':_0x1f87b9,'rows':_0x2ac4f2}:null;}})[_0x9edc('0x28')](respondWithResult(_0x4a85c3,null))[_0x9edc('0x49')](handleError(_0x4a85c3,null));};exports[_0x9edc('0x53')]=function(_0x266e8c,_0xb56e06,_0x4c3863){var _0x1be059={};var _0x1baf10={};var _0x5d93d8;var _0x46e11b;return db[_0x9edc('0x2e')][_0x9edc('0x4f')]({'where':{'id':_0x266e8c['params']['id']}})[_0x9edc('0x28')](handleEntityNotFound(_0xb56e06,null))['then'](function(_0x177532){if(_0x177532){_0x5d93d8=_0x177532;_0x1baf10[_0x9edc('0x34')]=_[_0x9edc('0x33')](db[_0x9edc('0x50')][_0x9edc('0x2f')]);_0x1baf10[_0x9edc('0x30')]=_['keys'](_0x266e8c[_0x9edc('0x30')]);_0x1baf10[_0x9edc('0x3d')]=_[_0x9edc('0x36')](_0x1baf10[_0x9edc('0x34')],_0x1baf10['query']);_0x1be059[_0x9edc('0x35')]=_['intersection'](_0x1baf10['model'],qs[_0x9edc('0x37')](_0x266e8c[_0x9edc('0x30')][_0x9edc('0x37')]));_0x1be059['attributes']=_0x1be059['attributes'][_0x9edc('0x38')]?_0x1be059['attributes']:_0x1baf10['model'];_0x1be059[_0x9edc('0x3a')]=qs[_0x9edc('0x3b')](_0x266e8c['query'][_0x9edc('0x3b')]);_0x1be059[_0x9edc('0x3c')]=qs[_0x9edc('0x3d')](_[_0x9edc('0x51')](_0x266e8c[_0x9edc('0x30')],_0x1baf10[_0x9edc('0x3d')]));if(_0x266e8c['query'][_0x9edc('0x40')]){_0x1be059[_0x9edc('0x3c')]=_[_0x9edc('0x41')](_0x1be059['where'],{'$or':_[_0x9edc('0x42')](_0x1be059[_0x9edc('0x35')],function(_0x39cb77){var _0x5090af={};_0x5090af[_0x39cb77]={'$like':'%'+_0x266e8c['query'][_0x9edc('0x40')]+'%'};return _0x5090af;})});}_0x1be059=_[_0x9edc('0x41')]({},_0x1be059,_0x266e8c['options']);return _0x5d93d8[_0x9edc('0x53')](_0x1be059);}})[_0x9edc('0x28')](function(_0x3494df){if(_0x3494df){_0x46e11b=_0x3494df['length'];if(!_0x266e8c[_0x9edc('0x30')][_0x9edc('0x52')](_0x9edc('0x39'))){_0x1be059[_0x9edc('0x22')]=qs[_0x9edc('0x22')](_0x266e8c['query'][_0x9edc('0x22')]);_0x1be059['offset']=qs[_0x9edc('0x21')](_0x266e8c['query'][_0x9edc('0x21')]);}return _0x5d93d8[_0x9edc('0x53')](_0x1be059);}})[_0x9edc('0x28')](function(_0x24eac0){if(_0x24eac0){return _0x24eac0?{'count':_0x46e11b,'rows':_0x24eac0}:null;}})[_0x9edc('0x28')](respondWithResult(_0xb56e06,null))[_0x9edc('0x49')](handleError(_0xb56e06,null));};exports[_0x9edc('0x54')]=function(_0x37480b,_0x1f939c,_0x520af2){var _0x2f018a={};var _0x20b45b={};var _0x565f93;var _0x3c3fa5;return db[_0x9edc('0x2e')][_0x9edc('0x4f')]({'where':{'id':_0x37480b[_0x9edc('0x4d')]['id']}})[_0x9edc('0x28')](handleEntityNotFound(_0x1f939c,null))[_0x9edc('0x28')](function(_0x4060da){if(_0x4060da){_0x565f93=_0x4060da;_0x20b45b['model']=_['keys'](db[_0x9edc('0x50')][_0x9edc('0x2f')]);_0x20b45b[_0x9edc('0x30')]=_[_0x9edc('0x33')](_0x37480b[_0x9edc('0x30')]);_0x20b45b['filters']=_[_0x9edc('0x36')](_0x20b45b[_0x9edc('0x34')],_0x20b45b[_0x9edc('0x30')]);_0x2f018a['attributes']=_[_0x9edc('0x36')](_0x20b45b[_0x9edc('0x34')],qs['fields'](_0x37480b[_0x9edc('0x30')][_0x9edc('0x37')]));_0x2f018a[_0x9edc('0x35')]=_0x2f018a['attributes']['length']?_0x2f018a[_0x9edc('0x35')]:_0x20b45b[_0x9edc('0x34')];_0x2f018a[_0x9edc('0x3a')]=qs[_0x9edc('0x3b')](_0x37480b[_0x9edc('0x30')][_0x9edc('0x3b')]);_0x2f018a[_0x9edc('0x3c')]=qs[_0x9edc('0x3d')](_['pick'](_0x37480b[_0x9edc('0x30')],_0x20b45b[_0x9edc('0x3d')]));if(_0x37480b[_0x9edc('0x30')][_0x9edc('0x40')]){_0x2f018a[_0x9edc('0x3c')]=_[_0x9edc('0x41')](_0x2f018a[_0x9edc('0x3c')],{'$or':_[_0x9edc('0x42')](_0x2f018a[_0x9edc('0x35')],function(_0xa3bd2f){var _0x2baaf9={};_0x2baaf9[_0xa3bd2f]={'$like':'%'+_0x37480b[_0x9edc('0x30')][_0x9edc('0x40')]+'%'};return _0x2baaf9;})});}_0x2f018a=_['merge']({},_0x2f018a,_0x37480b[_0x9edc('0x43')]);return _0x565f93[_0x9edc('0x54')](_0x2f018a);}})[_0x9edc('0x28')](function(_0x1028ff){if(_0x1028ff){_0x3c3fa5=_0x1028ff[_0x9edc('0x38')];if(!_0x37480b[_0x9edc('0x30')]['hasOwnProperty'](_0x9edc('0x39'))){_0x2f018a[_0x9edc('0x22')]=qs[_0x9edc('0x22')](_0x37480b[_0x9edc('0x30')][_0x9edc('0x22')]);_0x2f018a[_0x9edc('0x21')]=qs[_0x9edc('0x21')](_0x37480b['query'][_0x9edc('0x21')]);}return _0x565f93[_0x9edc('0x54')](_0x2f018a);}})['then'](function(_0x399a54){if(_0x399a54){return _0x399a54?{'count':_0x3c3fa5,'rows':_0x399a54}:null;}})[_0x9edc('0x28')](respondWithResult(_0x1f939c,null))['catch'](handleError(_0x1f939c,null));};
\ No newline at end of file
index 06ef085..8ec8572 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0213=['moment','bluebird','request-promise','./intSugarcrmConfiguration.attributes','exports','define','SugarcrmConfiguration','int_sugarcrm_configurations','lodash','util','api'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x0213,0x105));var _0x3021=function(_0x290fa6,_0x16d017){_0x290fa6=_0x290fa6-0x0;var _0x47f1f3=_0x0213[_0x290fa6];return _0x47f1f3;};'use strict';var _=require(_0x3021('0x0'));var util=require(_0x3021('0x1'));var logger=require('../../config/logger')(_0x3021('0x2'));var moment=require(_0x3021('0x3'));var BPromise=require(_0x3021('0x4'));var rp=require(_0x3021('0x5'));var attributes=require(_0x3021('0x6'));module[_0x3021('0x7')]=function(_0x4ccd40,_0x465a84){return _0x4ccd40[_0x3021('0x8')](_0x3021('0x9'),attributes,{'tableName':_0x3021('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x94ff=['moment','bluebird','request-promise','exports','define','SugarcrmConfiguration','lodash'];(function(_0x6a8e7,_0x1a0b48){var _0x364e3d=function(_0x1e8df9){while(--_0x1e8df9){_0x6a8e7['push'](_0x6a8e7['shift']());}};_0x364e3d(++_0x1a0b48);}(_0x94ff,0xc3));var _0xf94f=function(_0xe4650e,_0x913979){_0xe4650e=_0xe4650e-0x0;var _0x4ec5a3=_0x94ff[_0xe4650e];return _0x4ec5a3;};'use strict';var _=require(_0xf94f('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0xf94f('0x1'));var BPromise=require(_0xf94f('0x2'));var rp=require(_0xf94f('0x3'));var attributes=require('./intSugarcrmConfiguration.attributes');module[_0xf94f('0x4')]=function(_0x44677c,_0x48ce3b){return _0x44677c[_0xf94f('0x5')](_0xf94f('0x6'),attributes,{'tableName':'int_sugarcrm_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1d48c37..1d4c0b2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa332=['result','catch','lodash','bluebird','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','request\x20sent','debug','stringify','error','code','SugarcrmConfiguration,\x20%s,\x20%s','message'];(function(_0x3da163,_0x4301e2){var _0x9d6b31=function(_0x364b64){while(--_0x364b64){_0x3da163['push'](_0x3da163['shift']());}};_0x9d6b31(++_0x4301e2);}(_0xa332,0x1a4));var _0x2a33=function(_0x181272,_0x5d6f9f){_0x181272=_0x181272-0x0;var _0xab8bc9=_0xa332[_0x181272];return _0xab8bc9;};'use strict';var _=require(_0x2a33('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x2a33('0x1'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x2a33('0x2'))(_0x2a33('0x3'));var config=require(_0x2a33('0x4'));var jayson=require(_0x2a33('0x5'));var client=jayson[_0x2a33('0x6')]['http']({'port':0x232a});function respondWithRpcPromise(_0x54aee6,_0x4142d8,_0x8a5a5d){return new BPromise(function(_0x53db1c,_0x10e99e){return client[_0x2a33('0x7')](_0x54aee6,_0x8a5a5d)[_0x2a33('0x8')](function(_0x30dd46){logger[_0x2a33('0x9')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x4142d8,_0x2a33('0xa'));logger[_0x2a33('0xb')]('SugarcrmConfiguration,\x20%s,\x20%s,\x20%s',_0x4142d8,_0x2a33('0xa'),JSON[_0x2a33('0xc')](_0x30dd46));if(_0x30dd46[_0x2a33('0xd')]){if(_0x30dd46[_0x2a33('0xd')][_0x2a33('0xe')]===0x1f4){logger[_0x2a33('0xd')](_0x2a33('0xf'),_0x4142d8,_0x30dd46[_0x2a33('0xd')][_0x2a33('0x10')]);return _0x10e99e(_0x30dd46[_0x2a33('0xd')][_0x2a33('0x10')]);}logger['error'](_0x2a33('0xf'),_0x4142d8,_0x30dd46['error'][_0x2a33('0x10')]);return _0x53db1c(_0x30dd46['error'][_0x2a33('0x10')]);}else{logger['info'](_0x2a33('0xf'),_0x4142d8,_0x2a33('0xa'));_0x53db1c(_0x30dd46[_0x2a33('0x11')][_0x2a33('0x10')]);}})[_0x2a33('0x12')](function(_0x3ce011){logger[_0x2a33('0xd')](_0x2a33('0xf'),_0x4142d8,_0x3ce011);_0x10e99e(_0x3ce011);});});}
\ No newline at end of file
+var _0xf5ed=['SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','jayson/promise','http','request','info'];(function(_0x595bd1,_0xb1e7a){var _0xd0344f=function(_0x5eb2fd){while(--_0x5eb2fd){_0x595bd1['push'](_0x595bd1['shift']());}};_0xd0344f(++_0xb1e7a);}(_0xf5ed,0xb2));var _0xdf5e=function(_0x1d72aa,_0x5787bf){_0x1d72aa=_0x1d72aa-0x0;var _0xa7d7d5=_0xf5ed[_0x1d72aa];return _0xa7d7d5;};'use strict';var _=require('lodash');var util=require(_0xdf5e('0x0'));var moment=require(_0xdf5e('0x1'));var BPromise=require(_0xdf5e('0x2'));var rs=require(_0xdf5e('0x3'));var fs=require('fs');var db=require(_0xdf5e('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xdf5e('0x5'))(_0xdf5e('0x6'));var config=require('../../config/environment');var jayson=require(_0xdf5e('0x7'));var client=jayson['client'][_0xdf5e('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x1193f1,_0x2ca705,_0x116514){return new BPromise(function(_0x331363,_0x91ce1b){return client[_0xdf5e('0x9')](_0x1193f1,_0x116514)['then'](function(_0x76f28c){logger[_0xdf5e('0xa')](_0xdf5e('0xb'),_0x2ca705,_0xdf5e('0xc'));logger[_0xdf5e('0xd')](_0xdf5e('0xe'),_0x2ca705,_0xdf5e('0xc'),JSON[_0xdf5e('0xf')](_0x76f28c));if(_0x76f28c[_0xdf5e('0x10')]){if(_0x76f28c[_0xdf5e('0x10')][_0xdf5e('0x11')]===0x1f4){logger['error'](_0xdf5e('0xb'),_0x2ca705,_0x76f28c[_0xdf5e('0x10')][_0xdf5e('0x12')]);return _0x91ce1b(_0x76f28c[_0xdf5e('0x10')][_0xdf5e('0x12')]);}logger[_0xdf5e('0x10')](_0xdf5e('0xb'),_0x2ca705,_0x76f28c[_0xdf5e('0x10')]['message']);return _0x331363(_0x76f28c[_0xdf5e('0x10')][_0xdf5e('0x12')]);}else{logger[_0xdf5e('0xa')](_0xdf5e('0xb'),_0x2ca705,'request\x20sent');_0x331363(_0x76f28c[_0xdf5e('0x13')]['message']);}})[_0xdf5e('0x14')](function(_0x31e608){logger['error'](_0xdf5e('0xb'),_0x2ca705,_0x31e608);_0x91ce1b(_0x31e608);});});}
\ No newline at end of file
index 06aac5f..9564f18 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb138=['exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','./intSugarcrmField.controller','get','isAuthenticated','/:id','show','post','put','delete','destroy'];(function(_0x3e2fcf,_0x579110){var _0x497db7=function(_0x2f713d){while(--_0x2f713d){_0x3e2fcf['push'](_0x3e2fcf['shift']());}};_0x497db7(++_0x579110);}(_0xb138,0x1dd));var _0x8b13=function(_0x1b3706,_0x405791){_0x1b3706=_0x1b3706-0x0;var _0x5cd3a5=_0xb138[_0x1b3706];return _0x5cd3a5;};'use strict';var multer=require(_0x8b13('0x0'));var util=require(_0x8b13('0x1'));var path=require(_0x8b13('0x2'));var express=require(_0x8b13('0x3'));var router=express[_0x8b13('0x4')]();var auth=require(_0x8b13('0x5'));var interaction=require(_0x8b13('0x6'));var config=require('../../config/environment');var controller=require(_0x8b13('0x7'));router[_0x8b13('0x8')]('/',auth[_0x8b13('0x9')](),controller['index']);router[_0x8b13('0x8')](_0x8b13('0xa'),auth['isAuthenticated'](),controller[_0x8b13('0xb')]);router[_0x8b13('0xc')]('/',auth[_0x8b13('0x9')](),controller['create']);router[_0x8b13('0xd')](_0x8b13('0xa'),auth['isAuthenticated'](),controller['update']);router[_0x8b13('0xe')](_0x8b13('0xa'),auth[_0x8b13('0x9')](),controller[_0x8b13('0xf')]);module[_0x8b13('0x10')]=router;
\ No newline at end of file
+var _0x24ca=['post','create','put','update','delete','destroy','exports','multer','path','express','Router','../../components/interaction/service','../../config/environment','./intSugarcrmField.controller','get','isAuthenticated','index','/:id','show'];(function(_0x2a767c,_0x274dbd){var _0x101b10=function(_0xe07ba7){while(--_0xe07ba7){_0x2a767c['push'](_0x2a767c['shift']());}};_0x101b10(++_0x274dbd);}(_0x24ca,0x1bc));var _0xa24c=function(_0x3ce2c4,_0x4544c1){_0x3ce2c4=_0x3ce2c4-0x0;var _0x4047c1=_0x24ca[_0x3ce2c4];return _0x4047c1;};'use strict';var multer=require(_0xa24c('0x0'));var util=require('util');var path=require(_0xa24c('0x1'));var express=require(_0xa24c('0x2'));var router=express[_0xa24c('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xa24c('0x4'));var config=require(_0xa24c('0x5'));var controller=require(_0xa24c('0x6'));router[_0xa24c('0x7')]('/',auth[_0xa24c('0x8')](),controller[_0xa24c('0x9')]);router[_0xa24c('0x7')](_0xa24c('0xa'),auth[_0xa24c('0x8')](),controller[_0xa24c('0xb')]);router[_0xa24c('0xc')]('/',auth['isAuthenticated'](),controller[_0xa24c('0xd')]);router[_0xa24c('0xe')](_0xa24c('0xa'),auth['isAuthenticated'](),controller[_0xa24c('0xf')]);router[_0xa24c('0x10')](_0xa24c('0xa'),auth[_0xa24c('0x8')](),controller[_0xa24c('0x11')]);module[_0xa24c('0x12')]=router;
\ No newline at end of file
index 292edf5..13a14d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb4e6=['customVariable','keyValue','STRING','BOOLEAN','sequelize','ENUM','string','variable'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0xb4e6,0x1f4));var _0x6b4e=function(_0x334651,_0x6e99f6){_0x334651=_0x334651-0x0;var _0x29657c=_0xb4e6[_0x334651];return _0x29657c;};'use strict';var Sequelize=require(_0x6b4e('0x0'));module['exports']={'type':{'type':Sequelize[_0x6b4e('0x1')](_0x6b4e('0x2'),_0x6b4e('0x3'),_0x6b4e('0x4'),_0x6b4e('0x5')),'defaultValue':_0x6b4e('0x2')},'content':{'type':Sequelize[_0x6b4e('0x6')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x6b4e('0x1')](_0x6b4e('0x2'),_0x6b4e('0x3'),'customVariable')},'keyContent':{'type':Sequelize[_0x6b4e('0x6')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize[_0x6b4e('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x1339=['keyValue','STRING','BOOLEAN','ENUM','string','variable','customVariable'];(function(_0x228a1d,_0x2afd81){var _0x23f3bb=function(_0x23377b){while(--_0x23377b){_0x228a1d['push'](_0x228a1d['shift']());}};_0x23f3bb(++_0x2afd81);}(_0x1339,0x1ed));var _0x9133=function(_0x1a765b,_0xbfd614){_0x1a765b=_0x1a765b-0x0;var _0x110af9=_0x1339[_0x1a765b];return _0x110af9;};'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 0fadc94..c694996 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7f48=['update','then','destroy','sendStatus','error','stack','name','index','rawAttributes','model','query','dateStart','dateEnd','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','day','merge','filter','map','options','SugarcrmField','includeAll','include','findAll','rows','catch','show','params','find','create','body','fast-json-patch','request-promise','bluebird','path','sox','ejs','lodash','squel','desk.js','to-csv','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','apply','reject'];(function(_0x361121,_0x2696a1){var _0x43d0ff=function(_0x31c7b3){while(--_0x31c7b3){_0x361121['push'](_0x361121['shift']());}};_0x43d0ff(++_0x2696a1);}(_0x7f48,0xac));var _0x87f4=function(_0x4953da,_0x5adaca){_0x4953da=_0x4953da-0x0;var _0x2d3780=_0x7f48[_0x4953da];return _0x2d3780;};'use strict';var jsonpatch=require(_0x87f4('0x0'));var rp=require(_0x87f4('0x1'));var moment=require('moment');var BPromise=require(_0x87f4('0x2'));var Mustache=require('mustache');var util=require('util');var path=require(_0x87f4('0x3'));var sox=require(_0x87f4('0x4'));var csv=require('to-csv');var ejs=require(_0x87f4('0x5'));var fs=require('fs');var _=require(_0x87f4('0x6'));var squel=require(_0x87f4('0x7'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x87f4('0x8'));var toCsv=require(_0x87f4('0x9'));var querystring=require('querystring');var Papa=require(_0x87f4('0xa'));var qs=require(_0x87f4('0xb'));var logger=require(_0x87f4('0xc'))(_0x87f4('0xd'));var utils=require(_0x87f4('0xe'));var config=require(_0x87f4('0xf'));var db=require(_0x87f4('0x10'))['db'];function respondWithStatusCode(_0x41bac8,_0x86348e){_0x86348e=_0x86348e||0xcc;return function(_0x13d6e3){if(_0x13d6e3){return _0x41bac8['sendStatus'](_0x86348e);}return _0x41bac8[_0x87f4('0x11')](_0x86348e)[_0x87f4('0x12')]();};}function respondWithResult(_0x4da009,_0x128b0e){_0x128b0e=_0x128b0e||0xc8;return function(_0x49f4bb){if(_0x49f4bb){return _0x4da009[_0x87f4('0x11')](_0x128b0e)[_0x87f4('0x13')](_0x49f4bb);}};}function respondWithFilteredResult(_0x374544,_0x5b1b5b){return function(_0x685207){if(_0x685207){var _0x5b251e=_0x685207[_0x87f4('0x14')],_0x541479=_0x5b1b5b[_0x87f4('0x15')],_0x4a9933=_0x5b1b5b['offset']+_0x5b1b5b[_0x87f4('0x16')],_0x2924d8;if(_0x4a9933>=_0x5b251e){_0x4a9933=_0x5b251e;_0x2924d8=0xc8;}else{_0x2924d8=0xce;}_0x374544[_0x87f4('0x11')](_0x2924d8);return _0x374544[_0x87f4('0x17')]('Content-Range',_0x541479+'-'+_0x4a9933+'/'+_0x5b251e)['json'](_0x685207);}return null;};}function patchUpdates(_0x566faa){return function(_0x4a7c1b){try{jsonpatch[_0x87f4('0x18')](_0x4a7c1b,_0x566faa,!![]);}catch(_0x49bb9f){return BPromise[_0x87f4('0x19')](_0x49bb9f);}return _0x4a7c1b['save']();};}function saveUpdates(_0xd060b3,_0x1ee2db){return function(_0x410642){if(_0x410642){return _0x410642[_0x87f4('0x1a')](_0xd060b3)[_0x87f4('0x1b')](function(_0x466bbc){return _0x466bbc;});}return null;};}function removeEntity(_0x3886e1,_0x38e027){return function(_0x1155ff){if(_0x1155ff){return _0x1155ff[_0x87f4('0x1c')]()[_0x87f4('0x1b')](function(){_0x3886e1[_0x87f4('0x11')](0xcc)[_0x87f4('0x12')]();});}};}function handleEntityNotFound(_0x41b11e,_0x192b3e){return function(_0x22976){if(!_0x22976){_0x41b11e[_0x87f4('0x1d')](0x194);}return _0x22976;};}function handleError(_0x3c0975,_0x20e7a7){_0x20e7a7=_0x20e7a7||0x1f4;return function(_0xff13ad){logger[_0x87f4('0x1e')](_0xff13ad[_0x87f4('0x1f')]);if(_0xff13ad[_0x87f4('0x20')]){delete _0xff13ad[_0x87f4('0x20')];}_0x3c0975[_0x87f4('0x11')](_0x20e7a7)['send'](_0xff13ad);};}exports[_0x87f4('0x21')]=function(_0x27e784,_0x240cdf){var _0x376337={},_0x12dbf7={},_0x3dc3ae={'count':0x0,'rows':[]};var _0x22ac8c=db['SugarcrmField'][_0x87f4('0x22')];_0x12dbf7[_0x87f4('0x23')]=_['keys'](_0x22ac8c);var _0x4bd41d={'dateStart':_0x27e784[_0x87f4('0x24')][_0x87f4('0x25')],'dateEnd':_0x27e784[_0x87f4('0x24')]['dateEnd']};delete _0x27e784[_0x87f4('0x24')][_0x87f4('0x25')];delete _0x27e784[_0x87f4('0x24')][_0x87f4('0x26')];_0x12dbf7[_0x87f4('0x24')]=_[_0x87f4('0x27')](_0x27e784[_0x87f4('0x24')]);_0x12dbf7[_0x87f4('0x28')]=_[_0x87f4('0x29')](_0x12dbf7['model'],_0x12dbf7[_0x87f4('0x24')]);_0x376337['attributes']=_[_0x87f4('0x29')](_0x12dbf7['model'],qs['fields'](_0x27e784[_0x87f4('0x24')][_0x87f4('0x2a')]));_0x376337[_0x87f4('0x2b')]=_0x376337[_0x87f4('0x2b')][_0x87f4('0x2c')]?_0x376337[_0x87f4('0x2b')]:_0x12dbf7[_0x87f4('0x23')];if(!_0x27e784['query'][_0x87f4('0x2d')](_0x87f4('0x2e'))){_0x376337[_0x87f4('0x16')]=qs[_0x87f4('0x16')](_0x27e784[_0x87f4('0x24')]['limit']);_0x376337[_0x87f4('0x15')]=qs[_0x87f4('0x15')](_0x27e784[_0x87f4('0x24')][_0x87f4('0x15')]);}_0x376337[_0x87f4('0x2f')]=qs[_0x87f4('0x30')](_0x27e784[_0x87f4('0x24')][_0x87f4('0x30')]);_0x376337[_0x87f4('0x31')]=qs[_0x87f4('0x28')](_['pick'](_0x27e784[_0x87f4('0x24')],_0x12dbf7[_0x87f4('0x28')]));if(_0x4bd41d[_0x87f4('0x25')]){if(_0x4bd41d[_0x87f4('0x26')]){_0x4bd41d['dateEnd']=moment(_0x4bd41d[_0x87f4('0x26')])['add'](0x1,_0x87f4('0x32'));}else{_0x4bd41d['dateEnd']=moment(_0x4bd41d[_0x87f4('0x25')])['add'](0x1,_0x87f4('0x32'));}_[_0x87f4('0x33')](_0x376337[_0x87f4('0x31')],{'createdAt':{'$gte':_0x4bd41d[_0x87f4('0x25')],'$lte':_0x4bd41d[_0x87f4('0x26')]}});}if(_0x27e784[_0x87f4('0x24')][_0x87f4('0x34')]){_0x376337['where']=_['merge'](_0x376337[_0x87f4('0x31')],{'$or':_[_0x87f4('0x35')](_0x376337['attributes'],function(_0xa6d763){var _0x278ff4={};_0x278ff4[_0xa6d763]={'$like':'%'+_0x27e784[_0x87f4('0x24')][_0x87f4('0x34')]+'%'};return _0x278ff4;})});}_0x376337=_['merge']({},_0x376337,_0x27e784[_0x87f4('0x36')]);var _0xf12c43={'where':_0x376337[_0x87f4('0x31')]};return db[_0x87f4('0x37')][_0x87f4('0x14')](_0xf12c43)[_0x87f4('0x1b')](function(_0x1ff4bc){_0x3dc3ae[_0x87f4('0x14')]=_0x1ff4bc;if(_0x27e784[_0x87f4('0x24')][_0x87f4('0x38')]){_0x376337[_0x87f4('0x39')]=[{'all':!![]}];}return db['SugarcrmField'][_0x87f4('0x3a')](_0x376337);})[_0x87f4('0x1b')](function(_0x283aa1){_0x3dc3ae[_0x87f4('0x3b')]=_0x283aa1;return _0x3dc3ae;})['then'](respondWithFilteredResult(_0x240cdf,_0x376337))[_0x87f4('0x3c')](handleError(_0x240cdf,null));};exports[_0x87f4('0x3d')]=function(_0x3b9425,_0x81839e){var _0x23ad25={'raw':!![],'where':{'id':_0x3b9425[_0x87f4('0x3e')]['id']}},_0x17d58c={};_0x17d58c[_0x87f4('0x23')]=_[_0x87f4('0x27')](db[_0x87f4('0x37')][_0x87f4('0x22')]);_0x17d58c['query']=_[_0x87f4('0x27')](_0x3b9425['query']);_0x17d58c['filters']=_[_0x87f4('0x29')](_0x17d58c[_0x87f4('0x23')],_0x17d58c[_0x87f4('0x24')]);_0x23ad25[_0x87f4('0x2b')]=_[_0x87f4('0x29')](_0x17d58c[_0x87f4('0x23')],qs[_0x87f4('0x2a')](_0x3b9425[_0x87f4('0x24')][_0x87f4('0x2a')]));_0x23ad25[_0x87f4('0x2b')]=_0x23ad25[_0x87f4('0x2b')][_0x87f4('0x2c')]?_0x23ad25['attributes']:_0x17d58c[_0x87f4('0x23')];if(_0x3b9425['query']['includeAll']){_0x23ad25[_0x87f4('0x39')]=[{'all':!![]}];}_0x23ad25=_[_0x87f4('0x33')]({},_0x23ad25,_0x3b9425[_0x87f4('0x36')]);return db['SugarcrmField'][_0x87f4('0x3f')](_0x23ad25)[_0x87f4('0x1b')](handleEntityNotFound(_0x81839e,null))[_0x87f4('0x1b')](respondWithResult(_0x81839e,null))[_0x87f4('0x3c')](handleError(_0x81839e,null));};exports[_0x87f4('0x40')]=function(_0x2180f9,_0x287559){return db[_0x87f4('0x37')]['create'](_0x2180f9[_0x87f4('0x41')],{})[_0x87f4('0x1b')](respondWithResult(_0x287559,0xc9))[_0x87f4('0x3c')](handleError(_0x287559,null));};exports[_0x87f4('0x1a')]=function(_0x4cb10a,_0x4b4d06){if(_0x4cb10a[_0x87f4('0x41')]['id']){delete _0x4cb10a[_0x87f4('0x41')]['id'];}return db[_0x87f4('0x37')][_0x87f4('0x3f')]({'where':{'id':_0x4cb10a[_0x87f4('0x3e')]['id']}})[_0x87f4('0x1b')](handleEntityNotFound(_0x4b4d06,null))[_0x87f4('0x1b')](saveUpdates(_0x4cb10a[_0x87f4('0x41')],null))[_0x87f4('0x1b')](respondWithResult(_0x4b4d06,null))['catch'](handleError(_0x4b4d06,null));};exports[_0x87f4('0x1c')]=function(_0x44c118,_0x40b318){return db['SugarcrmField']['find']({'where':{'id':_0x44c118[_0x87f4('0x3e')]['id']}})[_0x87f4('0x1b')](handleEntityNotFound(_0x40b318,null))[_0x87f4('0x1b')](removeEntity(_0x40b318,null))[_0x87f4('0x3c')](handleError(_0x40b318,null));};
\ No newline at end of file
+var _0x05e3=['path','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','destroy','then','error','stack','name','send','index','SugarcrmField','rawAttributes','model','query','dateStart','dateEnd','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','add','day','merge','filter','map','includeAll','include','findAll','rows','params','options','find','catch','create','update','body','fast-json-patch','request-promise','moment','util'];(function(_0x4930fa,_0x4a5065){var _0x459ec8=function(_0x581285){while(--_0x581285){_0x4930fa['push'](_0x4930fa['shift']());}};_0x459ec8(++_0x4a5065);}(_0x05e3,0x86));var _0x305e=function(_0x4db561,_0x521d0d){_0x4db561=_0x4db561-0x0;var _0x299980=_0x05e3[_0x4db561];return _0x299980;};'use strict';var jsonpatch=require(_0x305e('0x0'));var rp=require(_0x305e('0x1'));var moment=require(_0x305e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x305e('0x3'));var path=require(_0x305e('0x4'));var sox=require('sox');var csv=require(_0x305e('0x5'));var ejs=require(_0x305e('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x305e('0x7'));var crypto=require(_0x305e('0x8'));var jsforce=require(_0x305e('0x9'));var deskjs=require(_0x305e('0xa'));var toCsv=require(_0x305e('0x5'));var querystring=require(_0x305e('0xb'));var Papa=require(_0x305e('0xc'));var qs=require(_0x305e('0xd'));var logger=require('../../config/logger')(_0x305e('0xe'));var utils=require('../../config/utils');var config=require(_0x305e('0xf'));var db=require(_0x305e('0x10'))['db'];function respondWithStatusCode(_0x557e21,_0x38ead1){_0x38ead1=_0x38ead1||0xcc;return function(_0x2d92d5){if(_0x2d92d5){return _0x557e21[_0x305e('0x11')](_0x38ead1);}return _0x557e21[_0x305e('0x12')](_0x38ead1)[_0x305e('0x13')]();};}function respondWithResult(_0x1ae997,_0x67c8f5){_0x67c8f5=_0x67c8f5||0xc8;return function(_0x18f6ca){if(_0x18f6ca){return _0x1ae997[_0x305e('0x12')](_0x67c8f5)[_0x305e('0x14')](_0x18f6ca);}};}function respondWithFilteredResult(_0x3535b9,_0x233bc5){return function(_0x57e8d5){if(_0x57e8d5){var _0x1cc151=_0x57e8d5[_0x305e('0x15')],_0xf813ca=_0x233bc5[_0x305e('0x16')],_0x5964c4=_0x233bc5[_0x305e('0x16')]+_0x233bc5[_0x305e('0x17')],_0x4398a6;if(_0x5964c4>=_0x1cc151){_0x5964c4=_0x1cc151;_0x4398a6=0xc8;}else{_0x4398a6=0xce;}_0x3535b9[_0x305e('0x12')](_0x4398a6);return _0x3535b9[_0x305e('0x18')]('Content-Range',_0xf813ca+'-'+_0x5964c4+'/'+_0x1cc151)[_0x305e('0x14')](_0x57e8d5);}return null;};}function patchUpdates(_0x455e78){return function(_0x5d19b1){try{jsonpatch[_0x305e('0x19')](_0x5d19b1,_0x455e78,!![]);}catch(_0x210e67){return BPromise[_0x305e('0x1a')](_0x210e67);}return _0x5d19b1[_0x305e('0x1b')]();};}function saveUpdates(_0x45ede9,_0x577b0e){return function(_0x55f0fb){if(_0x55f0fb){return _0x55f0fb['update'](_0x45ede9)['then'](function(_0x488b7b){return _0x488b7b;});}return null;};}function removeEntity(_0x567ccd,_0x498c44){return function(_0x5dd25f){if(_0x5dd25f){return _0x5dd25f[_0x305e('0x1c')]()[_0x305e('0x1d')](function(){_0x567ccd[_0x305e('0x12')](0xcc)[_0x305e('0x13')]();});}};}function handleEntityNotFound(_0xbeecd7,_0x4a70d6){return function(_0x472d2b){if(!_0x472d2b){_0xbeecd7['sendStatus'](0x194);}return _0x472d2b;};}function handleError(_0x309b47,_0xfc8a45){_0xfc8a45=_0xfc8a45||0x1f4;return function(_0x56427e){logger[_0x305e('0x1e')](_0x56427e[_0x305e('0x1f')]);if(_0x56427e[_0x305e('0x20')]){delete _0x56427e[_0x305e('0x20')];}_0x309b47[_0x305e('0x12')](_0xfc8a45)[_0x305e('0x21')](_0x56427e);};}exports[_0x305e('0x22')]=function(_0x1a255d,_0x2d7fbd){var _0x554b54={},_0x5e9aea={},_0x1bda0f={'count':0x0,'rows':[]};var _0x1335aa=db[_0x305e('0x23')][_0x305e('0x24')];_0x5e9aea[_0x305e('0x25')]=_['keys'](_0x1335aa);var _0x54fb22={'dateStart':_0x1a255d[_0x305e('0x26')][_0x305e('0x27')],'dateEnd':_0x1a255d[_0x305e('0x26')][_0x305e('0x28')]};delete _0x1a255d[_0x305e('0x26')]['dateStart'];delete _0x1a255d['query'][_0x305e('0x28')];_0x5e9aea[_0x305e('0x26')]=_[_0x305e('0x29')](_0x1a255d[_0x305e('0x26')]);_0x5e9aea['filters']=_[_0x305e('0x2a')](_0x5e9aea[_0x305e('0x25')],_0x5e9aea['query']);_0x554b54[_0x305e('0x2b')]=_[_0x305e('0x2a')](_0x5e9aea[_0x305e('0x25')],qs[_0x305e('0x2c')](_0x1a255d[_0x305e('0x26')]['fields']));_0x554b54['attributes']=_0x554b54[_0x305e('0x2b')][_0x305e('0x2d')]?_0x554b54['attributes']:_0x5e9aea['model'];if(!_0x1a255d[_0x305e('0x26')][_0x305e('0x2e')](_0x305e('0x2f'))){_0x554b54['limit']=qs[_0x305e('0x17')](_0x1a255d['query'][_0x305e('0x17')]);_0x554b54[_0x305e('0x16')]=qs[_0x305e('0x16')](_0x1a255d[_0x305e('0x26')][_0x305e('0x16')]);}_0x554b54[_0x305e('0x30')]=qs[_0x305e('0x31')](_0x1a255d['query'][_0x305e('0x31')]);_0x554b54[_0x305e('0x32')]=qs[_0x305e('0x33')](_[_0x305e('0x34')](_0x1a255d[_0x305e('0x26')],_0x5e9aea['filters']));if(_0x54fb22[_0x305e('0x27')]){if(_0x54fb22['dateEnd']){_0x54fb22[_0x305e('0x28')]=moment(_0x54fb22[_0x305e('0x28')])[_0x305e('0x35')](0x1,_0x305e('0x36'));}else{_0x54fb22[_0x305e('0x28')]=moment(_0x54fb22[_0x305e('0x27')])[_0x305e('0x35')](0x1,_0x305e('0x36'));}_[_0x305e('0x37')](_0x554b54[_0x305e('0x32')],{'createdAt':{'$gte':_0x54fb22[_0x305e('0x27')],'$lte':_0x54fb22['dateEnd']}});}if(_0x1a255d[_0x305e('0x26')][_0x305e('0x38')]){_0x554b54[_0x305e('0x32')]=_[_0x305e('0x37')](_0x554b54[_0x305e('0x32')],{'$or':_[_0x305e('0x39')](_0x554b54[_0x305e('0x2b')],function(_0x2ec9e6){var _0x275a18={};_0x275a18[_0x2ec9e6]={'$like':'%'+_0x1a255d[_0x305e('0x26')][_0x305e('0x38')]+'%'};return _0x275a18;})});}_0x554b54=_[_0x305e('0x37')]({},_0x554b54,_0x1a255d['options']);var _0x509faf={'where':_0x554b54[_0x305e('0x32')]};return db['SugarcrmField'][_0x305e('0x15')](_0x509faf)[_0x305e('0x1d')](function(_0x131843){_0x1bda0f[_0x305e('0x15')]=_0x131843;if(_0x1a255d['query'][_0x305e('0x3a')]){_0x554b54[_0x305e('0x3b')]=[{'all':!![]}];}return db[_0x305e('0x23')][_0x305e('0x3c')](_0x554b54);})[_0x305e('0x1d')](function(_0x4e4ccd){_0x1bda0f[_0x305e('0x3d')]=_0x4e4ccd;return _0x1bda0f;})[_0x305e('0x1d')](respondWithFilteredResult(_0x2d7fbd,_0x554b54))['catch'](handleError(_0x2d7fbd,null));};exports['show']=function(_0x343ab2,_0x565ac2){var _0x510c65={'raw':!![],'where':{'id':_0x343ab2[_0x305e('0x3e')]['id']}},_0xf02850={};_0xf02850['model']=_[_0x305e('0x29')](db[_0x305e('0x23')][_0x305e('0x24')]);_0xf02850[_0x305e('0x26')]=_[_0x305e('0x29')](_0x343ab2[_0x305e('0x26')]);_0xf02850[_0x305e('0x33')]=_[_0x305e('0x2a')](_0xf02850[_0x305e('0x25')],_0xf02850[_0x305e('0x26')]);_0x510c65[_0x305e('0x2b')]=_[_0x305e('0x2a')](_0xf02850[_0x305e('0x25')],qs[_0x305e('0x2c')](_0x343ab2[_0x305e('0x26')]['fields']));_0x510c65[_0x305e('0x2b')]=_0x510c65['attributes'][_0x305e('0x2d')]?_0x510c65[_0x305e('0x2b')]:_0xf02850[_0x305e('0x25')];if(_0x343ab2[_0x305e('0x26')][_0x305e('0x3a')]){_0x510c65[_0x305e('0x3b')]=[{'all':!![]}];}_0x510c65=_[_0x305e('0x37')]({},_0x510c65,_0x343ab2[_0x305e('0x3f')]);return db[_0x305e('0x23')][_0x305e('0x40')](_0x510c65)[_0x305e('0x1d')](handleEntityNotFound(_0x565ac2,null))[_0x305e('0x1d')](respondWithResult(_0x565ac2,null))[_0x305e('0x41')](handleError(_0x565ac2,null));};exports[_0x305e('0x42')]=function(_0x222958,_0x4a2095){return db[_0x305e('0x23')][_0x305e('0x42')](_0x222958['body'],{})[_0x305e('0x1d')](respondWithResult(_0x4a2095,0xc9))[_0x305e('0x41')](handleError(_0x4a2095,null));};exports[_0x305e('0x43')]=function(_0x3abf32,_0x1cc43b){if(_0x3abf32[_0x305e('0x44')]['id']){delete _0x3abf32[_0x305e('0x44')]['id'];}return db[_0x305e('0x23')][_0x305e('0x40')]({'where':{'id':_0x3abf32[_0x305e('0x3e')]['id']}})['then'](handleEntityNotFound(_0x1cc43b,null))[_0x305e('0x1d')](saveUpdates(_0x3abf32['body'],null))['then'](respondWithResult(_0x1cc43b,null))[_0x305e('0x41')](handleError(_0x1cc43b,null));};exports['destroy']=function(_0x5e7c80,_0x5bd2b3){return db['SugarcrmField'][_0x305e('0x40')]({'where':{'id':_0x5e7c80[_0x305e('0x3e')]['id']}})[_0x305e('0x1d')](handleEntityNotFound(_0x5bd2b3,null))[_0x305e('0x1d')](removeEntity(_0x5bd2b3,null))['catch'](handleError(_0x5bd2b3,null));};
\ No newline at end of file
index 6bb5ba2..1c93123 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfcfe=['lodash','util','../../config/logger','bluebird','request-promise','exports','SugarcrmField'];(function(_0x113945,_0x102a24){var _0x5836c8=function(_0x5430a8){while(--_0x5430a8){_0x113945['push'](_0x113945['shift']());}};_0x5836c8(++_0x102a24);}(_0xfcfe,0x173));var _0xefcf=function(_0x39a9cd,_0x5ac5fd){_0x39a9cd=_0x39a9cd-0x0;var _0x38872e=_0xfcfe[_0x39a9cd];return _0x38872e;};'use strict';var _=require(_0xefcf('0x0'));var util=require(_0xefcf('0x1'));var logger=require(_0xefcf('0x2'))('api');var moment=require('moment');var BPromise=require(_0xefcf('0x3'));var rp=require(_0xefcf('0x4'));var attributes=require('./intSugarcrmField.attributes');module[_0xefcf('0x5')]=function(_0x25e3fa,_0x4f19ec){return _0x25e3fa['define'](_0xefcf('0x6'),attributes,{'tableName':'int_sugarcrm_fields','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x06a3=['SugarcrmField','int_sugarcrm_fields','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./intSugarcrmField.attributes','exports','define'];(function(_0x50abfe,_0x5f2cf3){var _0x5107b9=function(_0x36c136){while(--_0x36c136){_0x50abfe['push'](_0x50abfe['shift']());}};_0x5107b9(++_0x5f2cf3);}(_0x06a3,0xfe));var _0x306a=function(_0x24b78f,_0x22d90a){_0x24b78f=_0x24b78f-0x0;var _0x450887=_0x06a3[_0x24b78f];return _0x450887;};'use strict';var _=require(_0x306a('0x0'));var util=require(_0x306a('0x1'));var logger=require(_0x306a('0x2'))(_0x306a('0x3'));var moment=require(_0x306a('0x4'));var BPromise=require(_0x306a('0x5'));var rp=require(_0x306a('0x6'));var attributes=require(_0x306a('0x7'));module[_0x306a('0x8')]=function(_0xdb5eec,_0x4c3934){return _0xdb5eec[_0x306a('0x9')](_0x306a('0xa'),attributes,{'tableName':_0x306a('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 84cc553..d808884 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf4b6=['../../config/utils','rpc','../../config/environment','client','http','then','info','request\x20sent','SugarcrmField,\x20%s,\x20%s,\x20%s','code','error','SugarcrmField,\x20%s,\x20%s','message','catch','lodash','bluebird'];(function(_0x4bbd94,_0x29e165){var _0x5aab27=function(_0x17803d){while(--_0x17803d){_0x4bbd94['push'](_0x4bbd94['shift']());}};_0x5aab27(++_0x29e165);}(_0xf4b6,0xce));var _0x6f4b=function(_0x3fe90c,_0x231b20){_0x3fe90c=_0x3fe90c-0x0;var _0x12c302=_0xf4b6[_0x3fe90c];return _0x12c302;};'use strict';var _=require(_0x6f4b('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x6f4b('0x1'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x6f4b('0x2'));var logger=require('../../config/logger')(_0x6f4b('0x3'));var config=require(_0x6f4b('0x4'));var jayson=require('jayson/promise');var client=jayson[_0x6f4b('0x5')][_0x6f4b('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x245ff3,_0x4fa962,_0x3abf07){return new BPromise(function(_0x12e955,_0x8a27fc){return client['request'](_0x245ff3,_0x3abf07)[_0x6f4b('0x7')](function(_0x338b49){logger[_0x6f4b('0x8')]('SugarcrmField,\x20%s,\x20%s',_0x4fa962,_0x6f4b('0x9'));logger['debug'](_0x6f4b('0xa'),_0x4fa962,_0x6f4b('0x9'),JSON['stringify'](_0x338b49));if(_0x338b49['error']){if(_0x338b49['error'][_0x6f4b('0xb')]===0x1f4){logger[_0x6f4b('0xc')](_0x6f4b('0xd'),_0x4fa962,_0x338b49[_0x6f4b('0xc')][_0x6f4b('0xe')]);return _0x8a27fc(_0x338b49[_0x6f4b('0xc')]['message']);}logger[_0x6f4b('0xc')](_0x6f4b('0xd'),_0x4fa962,_0x338b49[_0x6f4b('0xc')][_0x6f4b('0xe')]);return _0x12e955(_0x338b49['error']['message']);}else{logger[_0x6f4b('0x8')]('SugarcrmField,\x20%s,\x20%s',_0x4fa962,_0x6f4b('0x9'));_0x12e955(_0x338b49['result'][_0x6f4b('0xe')]);}})[_0x6f4b('0xf')](function(_0x1f87e2){logger[_0x6f4b('0xc')]('SugarcrmField,\x20%s,\x20%s',_0x4fa962,_0x1f87e2);_0x8a27fc(_0x1f87e2);});});}
\ No newline at end of file
+var _0x5ee2=['../../config/utils','rpc','jayson/promise','client','http','request','then','info','SugarcrmField,\x20%s,\x20%s','request\x20sent','debug','SugarcrmField,\x20%s,\x20%s,\x20%s','error','code','message','catch','lodash','util','moment','randomstring','../../mysqldb'];(function(_0xe458e1,_0x28f8a6){var _0x6ddffd=function(_0x3086a1){while(--_0x3086a1){_0xe458e1['push'](_0xe458e1['shift']());}};_0x6ddffd(++_0x28f8a6);}(_0x5ee2,0x19f));var _0x25ee=function(_0x581a34,_0x8cd781){_0x581a34=_0x581a34-0x0;var _0x3daca3=_0x5ee2[_0x581a34];return _0x3daca3;};'use strict';var _=require(_0x25ee('0x0'));var util=require(_0x25ee('0x1'));var moment=require(_0x25ee('0x2'));var BPromise=require('bluebird');var rs=require(_0x25ee('0x3'));var fs=require('fs');var db=require(_0x25ee('0x4'))['db'];var utils=require(_0x25ee('0x5'));var logger=require('../../config/logger')(_0x25ee('0x6'));var config=require('../../config/environment');var jayson=require(_0x25ee('0x7'));var client=jayson[_0x25ee('0x8')][_0x25ee('0x9')]({'port':0x232a});function respondWithRpcPromise(_0xd15f04,_0x4ce1de,_0x57f673){return new BPromise(function(_0x391df8,_0x443331){return client[_0x25ee('0xa')](_0xd15f04,_0x57f673)[_0x25ee('0xb')](function(_0x26203c){logger[_0x25ee('0xc')](_0x25ee('0xd'),_0x4ce1de,_0x25ee('0xe'));logger[_0x25ee('0xf')](_0x25ee('0x10'),_0x4ce1de,_0x25ee('0xe'),JSON['stringify'](_0x26203c));if(_0x26203c[_0x25ee('0x11')]){if(_0x26203c[_0x25ee('0x11')][_0x25ee('0x12')]===0x1f4){logger[_0x25ee('0x11')](_0x25ee('0xd'),_0x4ce1de,_0x26203c[_0x25ee('0x11')][_0x25ee('0x13')]);return _0x443331(_0x26203c[_0x25ee('0x11')][_0x25ee('0x13')]);}logger[_0x25ee('0x11')](_0x25ee('0xd'),_0x4ce1de,_0x26203c['error']['message']);return _0x391df8(_0x26203c['error'][_0x25ee('0x13')]);}else{logger[_0x25ee('0xc')](_0x25ee('0xd'),_0x4ce1de,'request\x20sent');_0x391df8(_0x26203c['result'][_0x25ee('0x13')]);}})[_0x25ee('0x14')](function(_0x53c309){logger[_0x25ee('0x11')](_0x25ee('0xd'),_0x4ce1de,_0x53c309);_0x443331(_0x53c309);});});}
\ No newline at end of file
index e1a66f1..318fd0d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb377=['/:id/configurations','getConfigurations','/:id/fields','getFields','post','create','addConfiguration','put','/:id','update','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intVtigerAccount.controller','get','isAuthenticated','index'];(function(_0x43dbb5,_0x314027){var _0x52c37d=function(_0x3ca152){while(--_0x3ca152){_0x43dbb5['push'](_0x43dbb5['shift']());}};_0x52c37d(++_0x314027);}(_0xb377,0x1b6));var _0x7b37=function(_0xa352e1,_0x4500c6){_0xa352e1=_0xa352e1-0x0;var _0x446586=_0xb377[_0xa352e1];return _0x446586;};'use strict';var multer=require(_0x7b37('0x0'));var util=require(_0x7b37('0x1'));var path=require(_0x7b37('0x2'));var express=require(_0x7b37('0x3'));var router=express[_0x7b37('0x4')]();var auth=require(_0x7b37('0x5'));var interaction=require(_0x7b37('0x6'));var config=require(_0x7b37('0x7'));var controller=require(_0x7b37('0x8'));router[_0x7b37('0x9')]('/',auth[_0x7b37('0xa')](),controller[_0x7b37('0xb')]);router['get']('/:id',auth[_0x7b37('0xa')](),controller['show']);router['get'](_0x7b37('0xc'),auth[_0x7b37('0xa')](),controller[_0x7b37('0xd')]);router[_0x7b37('0x9')](_0x7b37('0xe'),auth[_0x7b37('0xa')](),controller[_0x7b37('0xf')]);router[_0x7b37('0x10')]('/',auth['isAuthenticated'](),controller[_0x7b37('0x11')]);router[_0x7b37('0x10')]('/:id/configurations',auth['isAuthenticated'](),controller[_0x7b37('0x12')]);router[_0x7b37('0x13')](_0x7b37('0x14'),auth[_0x7b37('0xa')](),controller[_0x7b37('0x15')]);router[_0x7b37('0x16')](_0x7b37('0x14'),auth[_0x7b37('0xa')](),controller[_0x7b37('0x17')]);module[_0x7b37('0x18')]=router;
\ No newline at end of file
+var _0xd9f2=['/:id/fields','getFields','post','create','/:id/configurations','update','delete','destroy','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intVtigerAccount.controller','get','isAuthenticated','index','/:id','show'];(function(_0x58c0c5,_0xaa9eb){var _0x41edf4=function(_0x19c91f){while(--_0x19c91f){_0x58c0c5['push'](_0x58c0c5['shift']());}};_0x41edf4(++_0xaa9eb);}(_0xd9f2,0x111));var _0x2d9f=function(_0x2b0880,_0x18885a){_0x2b0880=_0x2b0880-0x0;var _0x48a776=_0xd9f2[_0x2b0880];return _0x48a776;};'use strict';var multer=require(_0x2d9f('0x0'));var util=require('util');var path=require(_0x2d9f('0x1'));var express=require(_0x2d9f('0x2'));var router=express[_0x2d9f('0x3')]();var auth=require(_0x2d9f('0x4'));var interaction=require(_0x2d9f('0x5'));var config=require(_0x2d9f('0x6'));var controller=require(_0x2d9f('0x7'));router[_0x2d9f('0x8')]('/',auth[_0x2d9f('0x9')](),controller[_0x2d9f('0xa')]);router[_0x2d9f('0x8')](_0x2d9f('0xb'),auth[_0x2d9f('0x9')](),controller[_0x2d9f('0xc')]);router[_0x2d9f('0x8')]('/:id/configurations',auth[_0x2d9f('0x9')](),controller['getConfigurations']);router[_0x2d9f('0x8')](_0x2d9f('0xd'),auth[_0x2d9f('0x9')](),controller[_0x2d9f('0xe')]);router[_0x2d9f('0xf')]('/',auth[_0x2d9f('0x9')](),controller[_0x2d9f('0x10')]);router[_0x2d9f('0xf')](_0x2d9f('0x11'),auth[_0x2d9f('0x9')](),controller['addConfiguration']);router['put']('/:id',auth[_0x2d9f('0x9')](),controller[_0x2d9f('0x12')]);router[_0x2d9f('0x13')](_0x2d9f('0xb'),auth[_0x2d9f('0x9')](),controller[_0x2d9f('0x14')]);module[_0x2d9f('0x15')]=router;
\ No newline at end of file
index 863e119..a73c285 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d65=['STRING','HelpDesk','sequelize','exports'];(function(_0x2db78a,_0x499e2c){var _0x166c9e=function(_0x503988){while(--_0x503988){_0x2db78a['push'](_0x2db78a['shift']());}};_0x166c9e(++_0x499e2c);}(_0x4d65,0x136));var _0x54d6=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x4d65[_0x501510];return _0x1e6ee5;};'use strict';var Sequelize=require(_0x54d6('0x0'));module[_0x54d6('0x1')]={'name':{'type':Sequelize[_0x54d6('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x54d6('0x2')]},'username':{'type':Sequelize[_0x54d6('0x2')],'allowNull':![]},'moduleName':{'type':Sequelize[_0x54d6('0x2')],'allowNull':![],'defaultValue':_0x54d6('0x3')},'remoteUri':{'type':Sequelize[_0x54d6('0x2')],'allowNull':![]},'serverUrl':{'type':Sequelize['STRING']},'accessKey':{'type':Sequelize[_0x54d6('0x2')],'allowNull':![]}};
\ No newline at end of file
+var _0x78c9=['exports','STRING','HelpDesk','sequelize'];(function(_0x4c6044,_0x843a2b){var _0x180437=function(_0x325b41){while(--_0x325b41){_0x4c6044['push'](_0x4c6044['shift']());}};_0x180437(++_0x843a2b);}(_0x78c9,0x87));var _0x978c=function(_0x2744ed,_0xe0ddfa){_0x2744ed=_0x2744ed-0x0;var _0x1fae62=_0x78c9[_0x2744ed];return _0x1fae62;};'use strict';var Sequelize=require(_0x978c('0x0'));module[_0x978c('0x1')]={'name':{'type':Sequelize[_0x978c('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x978c('0x2')]},'username':{'type':Sequelize['STRING'],'allowNull':![]},'moduleName':{'type':Sequelize[_0x978c('0x2')],'allowNull':![],'defaultValue':_0x978c('0x3')},'remoteUri':{'type':Sequelize['STRING'],'allowNull':![]},'serverUrl':{'type':Sequelize['STRING']},'accessKey':{'type':Sequelize[_0x978c('0x2')],'allowNull':![]}};
\ No newline at end of file
index 6c5540b..d67dbef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a1b=['picklistValues','label','value','log','vTiger\x20error:\x20','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','statusCode','fast-json-patch','request-promise','bluebird','mustache','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../config/logger','../../config/environment','../../mysqldb','jayson/promise','http','request','info','VtigerAccount,\x20%s,\x20%s','request\x20sent','debug','VtigerAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','sendStatus','status','end','json','count','offset','set','Content-Range','apply','save','update','then','stack','name','send','index','VtigerAccount','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','add','day','merge','map','filter','options','includeAll','include','findAll','show','params','create','body','find','destroy','findOne','VtigerConfiguration','getConfigurations','addConfiguration','AccountId','Subjects','getSubjects','channel','type','Descriptions','getDescriptions','VtigerField','md5','getFields','username','description','moduleName','serverUrl','accessKey','format','remoteUri','getchallenge','POST','login','result','token','GET','sessionName','owner','remove','includes','false','picklist'];(function(_0x546b69,_0x30028c){var _0x23ee9e=function(_0x22744f){while(--_0x22744f){_0x546b69['push'](_0x546b69['shift']());}};_0x23ee9e(++_0x30028c);}(_0x8a1b,0xf8));var _0xb8a1=function(_0x10f678,_0x442183){_0x10f678=_0x10f678-0x0;var _0x1f3e00=_0x8a1b[_0x10f678];return _0x1f3e00;};'use strict';var jsonpatch=require(_0xb8a1('0x0'));var rp=require(_0xb8a1('0x1'));var moment=require('moment');var BPromise=require(_0xb8a1('0x2'));var Mustache=require(_0xb8a1('0x3'));var util=require('util');var path=require('path');var sox=require(_0xb8a1('0x4'));var csv=require(_0xb8a1('0x5'));var ejs=require(_0xb8a1('0x6'));var fs=require('fs');var _=require(_0xb8a1('0x7'));var squel=require(_0xb8a1('0x8'));var crypto=require('crypto');var jsforce=require(_0xb8a1('0x9'));var deskjs=require(_0xb8a1('0xa'));var toCsv=require(_0xb8a1('0x5'));var querystring=require(_0xb8a1('0xb'));var Papa=require(_0xb8a1('0xc'));var qs=require('../../components/parsers/qs');var logger=require(_0xb8a1('0xd'))('api');var utils=require('../../config/utils');var config=require(_0xb8a1('0xe'));var db=require(_0xb8a1('0xf'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0xb8a1('0x10'));var client=jayson['client'][_0xb8a1('0x11')]({'port':0x232a});function respondWithRpcPromise(_0x30cb22,_0xee91c,_0x11d3e6,_0x584013){return new BPromise(function(_0x1f4fdd,_0x31f76e){var _0x34aa9a=_0x584013||client;return _0x34aa9a[_0xb8a1('0x12')](_0x30cb22,_0x11d3e6)['then'](function(_0x2f961d){logger[_0xb8a1('0x13')](_0xb8a1('0x14'),_0xee91c,_0xb8a1('0x15'));logger[_0xb8a1('0x16')](_0xb8a1('0x17'),_0xee91c,_0xb8a1('0x15'),JSON[_0xb8a1('0x18')](_0x2f961d));if(_0x2f961d[_0xb8a1('0x19')]){if(_0x2f961d[_0xb8a1('0x19')][_0xb8a1('0x1a')]===0x1f4){logger['error'](_0xb8a1('0x14'),_0xee91c,_0x2f961d[_0xb8a1('0x19')][_0xb8a1('0x1b')]);return _0x31f76e(_0x2f961d[_0xb8a1('0x19')][_0xb8a1('0x1b')]);}logger[_0xb8a1('0x19')](_0xb8a1('0x14'),_0xee91c,_0x2f961d[_0xb8a1('0x19')][_0xb8a1('0x1b')]);return _0x1f4fdd(_0x2f961d[_0xb8a1('0x19')][_0xb8a1('0x1b')]);}else{logger[_0xb8a1('0x13')](_0xb8a1('0x14'),_0xee91c,'request\x20sent');_0x1f4fdd(_0x2f961d['result'][_0xb8a1('0x1b')]);}})[_0xb8a1('0x1c')](function(_0x58bca0){logger[_0xb8a1('0x19')](_0xb8a1('0x14'),_0xee91c,_0x58bca0);_0x31f76e(_0x58bca0);});});}function respondWithStatusCode(_0x451f76,_0x258170){_0x258170=_0x258170||0xcc;return function(_0x655293){if(_0x655293){return _0x451f76[_0xb8a1('0x1d')](_0x258170);}return _0x451f76[_0xb8a1('0x1e')](_0x258170)[_0xb8a1('0x1f')]();};}function respondWithResult(_0x471c03,_0xff7f41){_0xff7f41=_0xff7f41||0xc8;return function(_0x1a3e62){if(_0x1a3e62){return _0x471c03[_0xb8a1('0x1e')](_0xff7f41)[_0xb8a1('0x20')](_0x1a3e62);}};}function respondWithFilteredResult(_0x54025f,_0x475b19){return function(_0x116232){if(_0x116232){var _0x53f6d2=_0x116232[_0xb8a1('0x21')],_0x4b69b8=_0x475b19[_0xb8a1('0x22')],_0x2b2b5b=_0x475b19['offset']+_0x475b19['limit'],_0x3e906f;if(_0x2b2b5b>=_0x53f6d2){_0x2b2b5b=_0x53f6d2;_0x3e906f=0xc8;}else{_0x3e906f=0xce;}_0x54025f[_0xb8a1('0x1e')](_0x3e906f);return _0x54025f[_0xb8a1('0x23')](_0xb8a1('0x24'),_0x4b69b8+'-'+_0x2b2b5b+'/'+_0x53f6d2)['json'](_0x116232);}return null;};}function patchUpdates(_0x211a5f){return function(_0x58d346){try{jsonpatch[_0xb8a1('0x25')](_0x58d346,_0x211a5f,!![]);}catch(_0x1a3837){return BPromise['reject'](_0x1a3837);}return _0x58d346[_0xb8a1('0x26')]();};}function saveUpdates(_0x490260,_0x105f9f){return function(_0x23b822){if(_0x23b822){return _0x23b822[_0xb8a1('0x27')](_0x490260)[_0xb8a1('0x28')](function(_0x322294){return _0x322294;});}return null;};}function removeEntity(_0x512317,_0x2ad164){return function(_0x12b5a1){if(_0x12b5a1){return _0x12b5a1['destroy']()[_0xb8a1('0x28')](function(){_0x512317['status'](0xcc)[_0xb8a1('0x1f')]();});}};}function handleEntityNotFound(_0x56ba8d,_0x362fae){return function(_0x1375c2){if(!_0x1375c2){_0x56ba8d[_0xb8a1('0x1d')](0x194);}return _0x1375c2;};}function handleError(_0x6b0b0b,_0x5aa1e5){_0x5aa1e5=_0x5aa1e5||0x1f4;return function(_0x16c7fc){logger[_0xb8a1('0x19')](_0x16c7fc[_0xb8a1('0x29')]);if(_0x16c7fc[_0xb8a1('0x2a')]){delete _0x16c7fc[_0xb8a1('0x2a')];}_0x6b0b0b[_0xb8a1('0x1e')](_0x5aa1e5)[_0xb8a1('0x2b')](_0x16c7fc);};}exports[_0xb8a1('0x2c')]=function(_0x4edfdf,_0x53d4c8){var _0x316564={},_0x54e4fb={},_0x452c9f={'count':0x0,'rows':[]};var _0x43fa3f=db[_0xb8a1('0x2d')][_0xb8a1('0x2e')];_0x54e4fb[_0xb8a1('0x2f')]=_[_0xb8a1('0x30')](_0x43fa3f);var _0x23261a={'dateStart':_0x4edfdf[_0xb8a1('0x31')][_0xb8a1('0x32')],'dateEnd':_0x4edfdf[_0xb8a1('0x31')][_0xb8a1('0x33')]};delete _0x4edfdf[_0xb8a1('0x31')][_0xb8a1('0x32')];delete _0x4edfdf[_0xb8a1('0x31')][_0xb8a1('0x33')];_0x54e4fb[_0xb8a1('0x31')]=_[_0xb8a1('0x30')](_0x4edfdf['query']);_0x54e4fb[_0xb8a1('0x34')]=_[_0xb8a1('0x35')](_0x54e4fb[_0xb8a1('0x2f')],_0x54e4fb[_0xb8a1('0x31')]);_0x316564[_0xb8a1('0x36')]=_[_0xb8a1('0x35')](_0x54e4fb['model'],qs[_0xb8a1('0x37')](_0x4edfdf[_0xb8a1('0x31')][_0xb8a1('0x37')]));_0x316564[_0xb8a1('0x36')]=_0x316564[_0xb8a1('0x36')][_0xb8a1('0x38')]?_0x316564[_0xb8a1('0x36')]:_0x54e4fb[_0xb8a1('0x2f')];if(!_0x4edfdf[_0xb8a1('0x31')][_0xb8a1('0x39')](_0xb8a1('0x3a'))){_0x316564[_0xb8a1('0x3b')]=qs[_0xb8a1('0x3b')](_0x4edfdf[_0xb8a1('0x31')][_0xb8a1('0x3b')]);_0x316564['offset']=qs[_0xb8a1('0x22')](_0x4edfdf[_0xb8a1('0x31')][_0xb8a1('0x22')]);}_0x316564[_0xb8a1('0x3c')]=qs['sort'](_0x4edfdf[_0xb8a1('0x31')][_0xb8a1('0x3d')]);_0x316564[_0xb8a1('0x3e')]=qs[_0xb8a1('0x34')](_[_0xb8a1('0x3f')](_0x4edfdf['query'],_0x54e4fb['filters']));if(_0x23261a['dateStart']){if(_0x23261a[_0xb8a1('0x33')]){_0x23261a[_0xb8a1('0x33')]=moment(_0x23261a[_0xb8a1('0x33')])[_0xb8a1('0x40')](0x1,_0xb8a1('0x41'));}else{_0x23261a[_0xb8a1('0x33')]=moment(_0x23261a[_0xb8a1('0x32')])[_0xb8a1('0x40')](0x1,_0xb8a1('0x41'));}_[_0xb8a1('0x42')](_0x316564[_0xb8a1('0x3e')],{'createdAt':{'$gte':_0x23261a[_0xb8a1('0x32')],'$lte':_0x23261a['dateEnd']}});}if(_0x4edfdf[_0xb8a1('0x31')]['filter']){_0x316564[_0xb8a1('0x3e')]=_[_0xb8a1('0x42')](_0x316564['where'],{'$or':_[_0xb8a1('0x43')](_0x316564[_0xb8a1('0x36')],function(_0x445a3a){var _0x2ccbd2={};_0x2ccbd2[_0x445a3a]={'$like':'%'+_0x4edfdf[_0xb8a1('0x31')][_0xb8a1('0x44')]+'%'};return _0x2ccbd2;})});}_0x316564=_[_0xb8a1('0x42')]({},_0x316564,_0x4edfdf[_0xb8a1('0x45')]);var _0x173718={'where':_0x316564[_0xb8a1('0x3e')]};return db[_0xb8a1('0x2d')][_0xb8a1('0x21')](_0x173718)[_0xb8a1('0x28')](function(_0x1e6258){_0x452c9f['count']=_0x1e6258;if(_0x4edfdf['query'][_0xb8a1('0x46')]){_0x316564[_0xb8a1('0x47')]=[{'all':!![]}];}return db['VtigerAccount'][_0xb8a1('0x48')](_0x316564);})[_0xb8a1('0x28')](function(_0x435dc0){_0x452c9f['rows']=_0x435dc0;return _0x452c9f;})['then'](respondWithFilteredResult(_0x53d4c8,_0x316564))[_0xb8a1('0x1c')](handleError(_0x53d4c8,null));};exports[_0xb8a1('0x49')]=function(_0x2dd863,_0xf14f4f){var _0xdcd04b={'raw':![],'where':{'id':_0x2dd863[_0xb8a1('0x4a')]['id']}},_0x4b286d={};_0x4b286d[_0xb8a1('0x2f')]=_[_0xb8a1('0x30')](db[_0xb8a1('0x2d')][_0xb8a1('0x2e')]);_0x4b286d[_0xb8a1('0x31')]=_['keys'](_0x2dd863['query']);_0x4b286d['filters']=_['intersection'](_0x4b286d[_0xb8a1('0x2f')],_0x4b286d[_0xb8a1('0x31')]);_0xdcd04b[_0xb8a1('0x36')]=_[_0xb8a1('0x35')](_0x4b286d[_0xb8a1('0x2f')],qs[_0xb8a1('0x37')](_0x2dd863[_0xb8a1('0x31')][_0xb8a1('0x37')]));_0xdcd04b[_0xb8a1('0x36')]=_0xdcd04b[_0xb8a1('0x36')]['length']?_0xdcd04b[_0xb8a1('0x36')]:_0x4b286d[_0xb8a1('0x2f')];if(_0x2dd863[_0xb8a1('0x31')][_0xb8a1('0x46')]){_0xdcd04b[_0xb8a1('0x47')]=[{'all':!![]}];}_0xdcd04b=_[_0xb8a1('0x42')]({},_0xdcd04b,_0x2dd863[_0xb8a1('0x45')]);return db[_0xb8a1('0x2d')]['find'](_0xdcd04b)['then'](handleEntityNotFound(_0xf14f4f,null))[_0xb8a1('0x28')](respondWithResult(_0xf14f4f,null))[_0xb8a1('0x1c')](handleError(_0xf14f4f,null));};exports[_0xb8a1('0x4b')]=function(_0x5c9298,_0x1aab31){return db[_0xb8a1('0x2d')][_0xb8a1('0x4b')](_0x5c9298['body'],{})[_0xb8a1('0x28')](respondWithResult(_0x1aab31,0xc9))[_0xb8a1('0x1c')](handleError(_0x1aab31,null));};exports[_0xb8a1('0x27')]=function(_0xcde915,_0x19a392){if(_0xcde915[_0xb8a1('0x4c')]['id']){delete _0xcde915[_0xb8a1('0x4c')]['id'];}return db[_0xb8a1('0x2d')][_0xb8a1('0x4d')]({'where':{'id':_0xcde915[_0xb8a1('0x4a')]['id']}})['then'](handleEntityNotFound(_0x19a392,null))[_0xb8a1('0x28')](saveUpdates(_0xcde915[_0xb8a1('0x4c')],null))['then'](respondWithResult(_0x19a392,null))['catch'](handleError(_0x19a392,null));};exports[_0xb8a1('0x4e')]=function(_0x5192d7,_0x11f79){return db[_0xb8a1('0x2d')][_0xb8a1('0x4d')]({'where':{'id':_0x5192d7[_0xb8a1('0x4a')]['id']}})['then'](handleEntityNotFound(_0x11f79,null))[_0xb8a1('0x28')](removeEntity(_0x11f79,null))[_0xb8a1('0x1c')](handleError(_0x11f79,null));};exports['getConfigurations']=function(_0x44c5a2,_0x28034c,_0x8026d2){var _0x2b8ad0={};var _0x59ef7d={};var _0x521be2;var _0x2c17a0;return db[_0xb8a1('0x2d')][_0xb8a1('0x4f')]({'where':{'id':_0x44c5a2[_0xb8a1('0x4a')]['id']}})[_0xb8a1('0x28')](handleEntityNotFound(_0x28034c,null))[_0xb8a1('0x28')](function(_0x4724ea){if(_0x4724ea){_0x521be2=_0x4724ea;_0x59ef7d[_0xb8a1('0x2f')]=_[_0xb8a1('0x30')](db[_0xb8a1('0x50')][_0xb8a1('0x2e')]);_0x59ef7d[_0xb8a1('0x31')]=_['keys'](_0x44c5a2['query']);_0x59ef7d[_0xb8a1('0x34')]=_[_0xb8a1('0x35')](_0x59ef7d[_0xb8a1('0x2f')],_0x59ef7d[_0xb8a1('0x31')]);_0x2b8ad0[_0xb8a1('0x36')]=_['intersection'](_0x59ef7d[_0xb8a1('0x2f')],qs['fields'](_0x44c5a2[_0xb8a1('0x31')][_0xb8a1('0x37')]));_0x2b8ad0[_0xb8a1('0x36')]=_0x2b8ad0[_0xb8a1('0x36')][_0xb8a1('0x38')]?_0x2b8ad0[_0xb8a1('0x36')]:_0x59ef7d['model'];_0x2b8ad0[_0xb8a1('0x3c')]=qs[_0xb8a1('0x3d')](_0x44c5a2[_0xb8a1('0x31')][_0xb8a1('0x3d')]);_0x2b8ad0[_0xb8a1('0x3e')]=qs[_0xb8a1('0x34')](_[_0xb8a1('0x3f')](_0x44c5a2['query'],_0x59ef7d['filters']));if(_0x44c5a2['query'][_0xb8a1('0x44')]){_0x2b8ad0[_0xb8a1('0x3e')]=_[_0xb8a1('0x42')](_0x2b8ad0[_0xb8a1('0x3e')],{'$or':_['map'](_0x2b8ad0[_0xb8a1('0x36')],function(_0x4b1f6f){var _0x4b1638={};_0x4b1638[_0x4b1f6f]={'$like':'%'+_0x44c5a2[_0xb8a1('0x31')][_0xb8a1('0x44')]+'%'};return _0x4b1638;})});}_0x2b8ad0=_['merge']({},_0x2b8ad0,_0x44c5a2['options']);return _0x521be2[_0xb8a1('0x51')](_0x2b8ad0);}})[_0xb8a1('0x28')](function(_0x535f65){if(_0x535f65){_0x2c17a0=_0x535f65[_0xb8a1('0x38')];if(!_0x44c5a2['query'][_0xb8a1('0x39')](_0xb8a1('0x3a'))){_0x2b8ad0[_0xb8a1('0x3b')]=qs[_0xb8a1('0x3b')](_0x44c5a2[_0xb8a1('0x31')][_0xb8a1('0x3b')]);_0x2b8ad0[_0xb8a1('0x22')]=qs[_0xb8a1('0x22')](_0x44c5a2[_0xb8a1('0x31')][_0xb8a1('0x22')]);}return _0x521be2[_0xb8a1('0x51')](_0x2b8ad0);}})[_0xb8a1('0x28')](function(_0x5c3023){if(_0x5c3023){return _0x5c3023?{'count':_0x2c17a0,'rows':_0x5c3023}:null;}})[_0xb8a1('0x28')](respondWithResult(_0x28034c,null))['catch'](handleError(_0x28034c,null));};exports[_0xb8a1('0x52')]=function(_0x1774eb,_0x2313d1,_0x2d9b55){if(_0x1774eb[_0xb8a1('0x4c')]['id']){delete _0x1774eb['body']['id'];}return db['VtigerAccount'][_0xb8a1('0x4f')]({'where':{'id':_0x1774eb[_0xb8a1('0x4a')]['id']}})['then'](handleEntityNotFound(_0x2313d1,null))['then'](function(_0x5c0808){if(_0x5c0808){_0x1774eb[_0xb8a1('0x4c')][_0xb8a1('0x53')]=_0x5c0808['id'];_0x1774eb[_0xb8a1('0x4c')][_0xb8a1('0x54')]=integrations[_0xb8a1('0x55')](_0x1774eb[_0xb8a1('0x4c')][_0xb8a1('0x56')],_0x1774eb['body'][_0xb8a1('0x57')]);_0x1774eb[_0xb8a1('0x4c')][_0xb8a1('0x58')]=integrations[_0xb8a1('0x59')](_0x1774eb['body'][_0xb8a1('0x56')],_0x1774eb[_0xb8a1('0x4c')][_0xb8a1('0x57')]);return db[_0xb8a1('0x50')][_0xb8a1('0x4b')](_0x1774eb[_0xb8a1('0x4c')],{'include':[{'model':db[_0xb8a1('0x5a')],'as':_0xb8a1('0x54')},{'model':db[_0xb8a1('0x5a')],'as':'Descriptions'}]});}return null;})[_0xb8a1('0x28')](respondWithResult(_0x2313d1,null))[_0xb8a1('0x1c')](handleError(_0x2313d1,null));};var md5=require(_0xb8a1('0x5b'));exports[_0xb8a1('0x5c')]=function(_0x517208,_0x5afc92,_0x244198){var _0x38ae11=null;var _0x2be42f=null;var _0x3eb599=null;var _0x3d6729=null;return db['VtigerAccount'][_0xb8a1('0x4f')]({'where':{'id':_0x517208['params']['id']},'attributes':['id',_0xb8a1('0x2a'),_0xb8a1('0x5d'),_0xb8a1('0x5e'),_0xb8a1('0x5f'),'remoteUri',_0xb8a1('0x60'),_0xb8a1('0x61')]})[_0xb8a1('0x28')](handleEntityNotFound(_0x5afc92,null))[_0xb8a1('0x28')](function(_0x1eb885){if(_0x1eb885){_0x38ae11=_0x1eb885[_0xb8a1('0x5d')];_0x2be42f=_0x1eb885['accessKey'];_0x3eb599=_0x1eb885[_0xb8a1('0x5f')];_0x3d6729=util[_0xb8a1('0x62')]('%s/webservice.php',_0x1eb885[_0xb8a1('0x63')]);var _0x3bdf02={'method':'GET','uri':_0x3d6729,'qs':{'operation':_0xb8a1('0x64'),'username':_0x1eb885[_0xb8a1('0x5d')]},'json':!![]};return rp(_0x3bdf02);}})['then'](function(_0x57a587){if(_0x57a587['success']){var _0x42500b={'method':_0xb8a1('0x65'),'uri':_0x3d6729,'form':{'operation':_0xb8a1('0x66'),'username':_0x38ae11,'accessKey':md5(_0x57a587[_0xb8a1('0x67')][_0xb8a1('0x68')]+_0x2be42f)},'json':!![]};return rp(_0x42500b);}})[_0xb8a1('0x28')](function(_0x3b901f){if(_0x3b901f['success']){var _0x211648={'method':_0xb8a1('0x69'),'uri':_0x3d6729,'qs':{'operation':'describe','username':_0x38ae11,'sessionName':_0x3b901f[_0xb8a1('0x67')][_0xb8a1('0x6a')],'elementType':_0x3eb599},'json':!![]};return rp(_0x211648);}})[_0xb8a1('0x28')](function(_0x1d8f60){if(_0x1d8f60['success']){var _0x2b4467=['autogenerated','reference',_0xb8a1('0x6b')];_[_0xb8a1('0x6c')](_0x1d8f60[_0xb8a1('0x67')]['fields'],function(_0x34baa5){return _0x2b4467[_0xb8a1('0x6d')](_0x34baa5[_0xb8a1('0x57')][_0xb8a1('0x2a')]);});_[_0xb8a1('0x6c')](_0x1d8f60[_0xb8a1('0x67')][_0xb8a1('0x37')],function(_0x4b7ea6){return _0x4b7ea6['editable']===_0xb8a1('0x6e');});return{'count':_0x1d8f60[_0xb8a1('0x67')]['fields'][_0xb8a1('0x38')],'rows':_[_0xb8a1('0x43')](_0x1d8f60[_0xb8a1('0x67')][_0xb8a1('0x37')],function(_0x4a1675){return{'id':_0x4a1675[_0xb8a1('0x2a')],'name':_0x4a1675['label'],'custom':_['startsWith'](_0x4a1675[_0xb8a1('0x2a')],'cf_')?!![]:![],'options':_0x4a1675['type'][_0xb8a1('0x2a')]===_0xb8a1('0x6f')&&_0x4a1675[_0xb8a1('0x57')][_0xb8a1('0x70')]['length']>0x0?_[_0xb8a1('0x43')](_0x4a1675[_0xb8a1('0x57')][_0xb8a1('0x70')],function(_0x44ea04){return{'name':_0x44ea04[_0xb8a1('0x71')],'value':_0x44ea04[_0xb8a1('0x72')]};}):[]};})};}})[_0xb8a1('0x28')](respondWithResult(_0x5afc92,null))[_0xb8a1('0x1c')](function(_0x41e54f){console[_0xb8a1('0x73')](_0xb8a1('0x74')+_0x41e54f);var _0xf1cf87=_0x517208[_0xb8a1('0x31')]['test']?0x1f4:_0x41e54f['statusCode']||0x1f4;logger[_0xb8a1('0x19')](_0xb8a1('0x75'),'getFields',_0xf1cf87,JSON[_0xb8a1('0x18')](_0x41e54f));delete _0x41e54f[_0xb8a1('0x2a')];if(_0xf1cf87===0x191){_0xf1cf87=0x190;}_0x5afc92[_0xb8a1('0x1e')](_0xf1cf87)[_0xb8a1('0x2b')](_0x517208['query']['test']?{'message':_0xb8a1('0x76'),'statusCode':_0x41e54f[_0xb8a1('0x77')]}:_0x41e54f);});};
\ No newline at end of file
+var _0x98b7=['destroy','stack','name','send','index','VtigerAccount','rawAttributes','query','dateStart','dateEnd','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','filter','merge','map','options','count','includeAll','include','findAll','rows','show','params','find','create','body','getConfigurations','findOne','addConfiguration','channel','type','getDescriptions','VtigerConfiguration','VtigerField','Descriptions','md5','getFields','username','description','accessKey','moduleName','format','%s/webservice.php','GET','POST','login','success','describe','sessionName','autogenerated','reference','remove','includes','label','cf_','picklist','picklistValues','value','vTiger\x20error:\x20','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','fast-json-patch','request-promise','moment','bluebird','sox','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','jayson/promise','client','http','then','info','VtigerAccount,\x20%s,\x20%s','request\x20sent','debug','VtigerAccount,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','sendStatus','status','end','json','offset','limit','set','Content-Range','reject','save'];(function(_0x13b02f,_0x462a53){var _0x12e9a6=function(_0x187d57){while(--_0x187d57){_0x13b02f['push'](_0x13b02f['shift']());}};_0x12e9a6(++_0x462a53);}(_0x98b7,0xc1));var _0x798b=function(_0x59ee6f,_0x450239){_0x59ee6f=_0x59ee6f-0x0;var _0x4c0979=_0x98b7[_0x59ee6f];return _0x4c0979;};'use strict';var jsonpatch=require(_0x798b('0x0'));var rp=require(_0x798b('0x1'));var moment=require(_0x798b('0x2'));var BPromise=require(_0x798b('0x3'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0x798b('0x4'));var csv=require(_0x798b('0x5'));var ejs=require(_0x798b('0x6'));var fs=require('fs');var _=require(_0x798b('0x7'));var squel=require(_0x798b('0x8'));var crypto=require('crypto');var jsforce=require(_0x798b('0x9'));var deskjs=require('desk.js');var toCsv=require(_0x798b('0x5'));var querystring=require(_0x798b('0xa'));var Papa=require(_0x798b('0xb'));var qs=require(_0x798b('0xc'));var logger=require(_0x798b('0xd'))('api');var utils=require(_0x798b('0xe'));var config=require('../../config/environment');var db=require(_0x798b('0xf'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0x798b('0x10'));var client=jayson[_0x798b('0x11')][_0x798b('0x12')]({'port':0x232a});function respondWithRpcPromise(_0x4db430,_0x5bafb6,_0x396a8c,_0x4178a2){return new BPromise(function(_0x168e5f,_0x5455a7){var _0x18057f=_0x4178a2||client;return _0x18057f['request'](_0x4db430,_0x396a8c)[_0x798b('0x13')](function(_0x486110){logger[_0x798b('0x14')](_0x798b('0x15'),_0x5bafb6,_0x798b('0x16'));logger[_0x798b('0x17')](_0x798b('0x18'),_0x5bafb6,_0x798b('0x16'),JSON[_0x798b('0x19')](_0x486110));if(_0x486110['error']){if(_0x486110['error'][_0x798b('0x1a')]===0x1f4){logger[_0x798b('0x1b')](_0x798b('0x15'),_0x5bafb6,_0x486110[_0x798b('0x1b')][_0x798b('0x1c')]);return _0x5455a7(_0x486110[_0x798b('0x1b')][_0x798b('0x1c')]);}logger[_0x798b('0x1b')](_0x798b('0x15'),_0x5bafb6,_0x486110[_0x798b('0x1b')][_0x798b('0x1c')]);return _0x168e5f(_0x486110[_0x798b('0x1b')][_0x798b('0x1c')]);}else{logger[_0x798b('0x14')](_0x798b('0x15'),_0x5bafb6,'request\x20sent');_0x168e5f(_0x486110[_0x798b('0x1d')][_0x798b('0x1c')]);}})[_0x798b('0x1e')](function(_0x2cb76e){logger[_0x798b('0x1b')](_0x798b('0x15'),_0x5bafb6,_0x2cb76e);_0x5455a7(_0x2cb76e);});});}function respondWithStatusCode(_0x2eec5a,_0x297ebe){_0x297ebe=_0x297ebe||0xcc;return function(_0x4c1817){if(_0x4c1817){return _0x2eec5a[_0x798b('0x1f')](_0x297ebe);}return _0x2eec5a[_0x798b('0x20')](_0x297ebe)[_0x798b('0x21')]();};}function respondWithResult(_0x1b9680,_0x50f66c){_0x50f66c=_0x50f66c||0xc8;return function(_0x397092){if(_0x397092){return _0x1b9680[_0x798b('0x20')](_0x50f66c)[_0x798b('0x22')](_0x397092);}};}function respondWithFilteredResult(_0x2d1ab9,_0x4b5e6e){return function(_0x325c3d){if(_0x325c3d){var _0x4c04a3=_0x325c3d['count'],_0x202398=_0x4b5e6e[_0x798b('0x23')],_0x3b507e=_0x4b5e6e[_0x798b('0x23')]+_0x4b5e6e[_0x798b('0x24')],_0x38ae10;if(_0x3b507e>=_0x4c04a3){_0x3b507e=_0x4c04a3;_0x38ae10=0xc8;}else{_0x38ae10=0xce;}_0x2d1ab9[_0x798b('0x20')](_0x38ae10);return _0x2d1ab9[_0x798b('0x25')](_0x798b('0x26'),_0x202398+'-'+_0x3b507e+'/'+_0x4c04a3)[_0x798b('0x22')](_0x325c3d);}return null;};}function patchUpdates(_0x4edb60){return function(_0x63c6ed){try{jsonpatch['apply'](_0x63c6ed,_0x4edb60,!![]);}catch(_0x2ad7b8){return BPromise[_0x798b('0x27')](_0x2ad7b8);}return _0x63c6ed[_0x798b('0x28')]();};}function saveUpdates(_0x2dddf4,_0x29b313){return function(_0x48e897){if(_0x48e897){return _0x48e897['update'](_0x2dddf4)[_0x798b('0x13')](function(_0x40b229){return _0x40b229;});}return null;};}function removeEntity(_0x228c44,_0x1194e6){return function(_0x5832cc){if(_0x5832cc){return _0x5832cc[_0x798b('0x29')]()[_0x798b('0x13')](function(){_0x228c44[_0x798b('0x20')](0xcc)[_0x798b('0x21')]();});}};}function handleEntityNotFound(_0x559d57,_0x1661e9){return function(_0x5da9db){if(!_0x5da9db){_0x559d57[_0x798b('0x1f')](0x194);}return _0x5da9db;};}function handleError(_0x2d7878,_0x22a769){_0x22a769=_0x22a769||0x1f4;return function(_0x101acf){logger[_0x798b('0x1b')](_0x101acf[_0x798b('0x2a')]);if(_0x101acf[_0x798b('0x2b')]){delete _0x101acf['name'];}_0x2d7878[_0x798b('0x20')](_0x22a769)[_0x798b('0x2c')](_0x101acf);};}exports[_0x798b('0x2d')]=function(_0x343e51,_0x5c1fac){var _0x55f7ab={},_0x7a802b={},_0x16a735={'count':0x0,'rows':[]};var _0x2a0f6a=db[_0x798b('0x2e')][_0x798b('0x2f')];_0x7a802b['model']=_['keys'](_0x2a0f6a);var _0x3b8e85={'dateStart':_0x343e51[_0x798b('0x30')][_0x798b('0x31')],'dateEnd':_0x343e51[_0x798b('0x30')][_0x798b('0x32')]};delete _0x343e51[_0x798b('0x30')][_0x798b('0x31')];delete _0x343e51[_0x798b('0x30')][_0x798b('0x32')];_0x7a802b[_0x798b('0x30')]=_[_0x798b('0x33')](_0x343e51[_0x798b('0x30')]);_0x7a802b[_0x798b('0x34')]=_[_0x798b('0x35')](_0x7a802b[_0x798b('0x36')],_0x7a802b[_0x798b('0x30')]);_0x55f7ab[_0x798b('0x37')]=_[_0x798b('0x35')](_0x7a802b[_0x798b('0x36')],qs[_0x798b('0x38')](_0x343e51[_0x798b('0x30')][_0x798b('0x38')]));_0x55f7ab[_0x798b('0x37')]=_0x55f7ab[_0x798b('0x37')][_0x798b('0x39')]?_0x55f7ab[_0x798b('0x37')]:_0x7a802b[_0x798b('0x36')];if(!_0x343e51[_0x798b('0x30')][_0x798b('0x3a')](_0x798b('0x3b'))){_0x55f7ab[_0x798b('0x24')]=qs[_0x798b('0x24')](_0x343e51[_0x798b('0x30')]['limit']);_0x55f7ab[_0x798b('0x23')]=qs[_0x798b('0x23')](_0x343e51['query'][_0x798b('0x23')]);}_0x55f7ab[_0x798b('0x3c')]=qs[_0x798b('0x3d')](_0x343e51['query'][_0x798b('0x3d')]);_0x55f7ab[_0x798b('0x3e')]=qs[_0x798b('0x34')](_[_0x798b('0x3f')](_0x343e51['query'],_0x7a802b['filters']));if(_0x3b8e85['dateStart']){if(_0x3b8e85[_0x798b('0x32')]){_0x3b8e85[_0x798b('0x32')]=moment(_0x3b8e85[_0x798b('0x32')])[_0x798b('0x40')](0x1,'day');}else{_0x3b8e85['dateEnd']=moment(_0x3b8e85[_0x798b('0x31')])[_0x798b('0x40')](0x1,_0x798b('0x41'));}_['merge'](_0x55f7ab[_0x798b('0x3e')],{'createdAt':{'$gte':_0x3b8e85['dateStart'],'$lte':_0x3b8e85['dateEnd']}});}if(_0x343e51['query'][_0x798b('0x42')]){_0x55f7ab[_0x798b('0x3e')]=_[_0x798b('0x43')](_0x55f7ab['where'],{'$or':_[_0x798b('0x44')](_0x55f7ab['attributes'],function(_0x4ce132){var _0x4b4d2a={};_0x4b4d2a[_0x4ce132]={'$like':'%'+_0x343e51[_0x798b('0x30')][_0x798b('0x42')]+'%'};return _0x4b4d2a;})});}_0x55f7ab=_['merge']({},_0x55f7ab,_0x343e51[_0x798b('0x45')]);var _0x1fd71c={'where':_0x55f7ab['where']};return db[_0x798b('0x2e')][_0x798b('0x46')](_0x1fd71c)[_0x798b('0x13')](function(_0x254727){_0x16a735['count']=_0x254727;if(_0x343e51[_0x798b('0x30')][_0x798b('0x47')]){_0x55f7ab[_0x798b('0x48')]=[{'all':!![]}];}return db['VtigerAccount'][_0x798b('0x49')](_0x55f7ab);})[_0x798b('0x13')](function(_0x3a7067){_0x16a735[_0x798b('0x4a')]=_0x3a7067;return _0x16a735;})[_0x798b('0x13')](respondWithFilteredResult(_0x5c1fac,_0x55f7ab))[_0x798b('0x1e')](handleError(_0x5c1fac,null));};exports[_0x798b('0x4b')]=function(_0x287d77,_0x457b60){var _0x44007c={'raw':![],'where':{'id':_0x287d77[_0x798b('0x4c')]['id']}},_0x302f73={};_0x302f73[_0x798b('0x36')]=_['keys'](db[_0x798b('0x2e')]['rawAttributes']);_0x302f73[_0x798b('0x30')]=_['keys'](_0x287d77[_0x798b('0x30')]);_0x302f73[_0x798b('0x34')]=_[_0x798b('0x35')](_0x302f73[_0x798b('0x36')],_0x302f73[_0x798b('0x30')]);_0x44007c[_0x798b('0x37')]=_[_0x798b('0x35')](_0x302f73['model'],qs[_0x798b('0x38')](_0x287d77[_0x798b('0x30')][_0x798b('0x38')]));_0x44007c['attributes']=_0x44007c[_0x798b('0x37')]['length']?_0x44007c[_0x798b('0x37')]:_0x302f73[_0x798b('0x36')];if(_0x287d77[_0x798b('0x30')][_0x798b('0x47')]){_0x44007c[_0x798b('0x48')]=[{'all':!![]}];}_0x44007c=_[_0x798b('0x43')]({},_0x44007c,_0x287d77[_0x798b('0x45')]);return db[_0x798b('0x2e')][_0x798b('0x4d')](_0x44007c)[_0x798b('0x13')](handleEntityNotFound(_0x457b60,null))[_0x798b('0x13')](respondWithResult(_0x457b60,null))[_0x798b('0x1e')](handleError(_0x457b60,null));};exports[_0x798b('0x4e')]=function(_0x16a7d7,_0x577429){return db[_0x798b('0x2e')][_0x798b('0x4e')](_0x16a7d7[_0x798b('0x4f')],{})[_0x798b('0x13')](respondWithResult(_0x577429,0xc9))[_0x798b('0x1e')](handleError(_0x577429,null));};exports['update']=function(_0x1c0148,_0x2b8622){if(_0x1c0148['body']['id']){delete _0x1c0148[_0x798b('0x4f')]['id'];}return db['VtigerAccount'][_0x798b('0x4d')]({'where':{'id':_0x1c0148['params']['id']}})[_0x798b('0x13')](handleEntityNotFound(_0x2b8622,null))[_0x798b('0x13')](saveUpdates(_0x1c0148[_0x798b('0x4f')],null))[_0x798b('0x13')](respondWithResult(_0x2b8622,null))[_0x798b('0x1e')](handleError(_0x2b8622,null));};exports[_0x798b('0x29')]=function(_0x16e1bf,_0x5661da){return db['VtigerAccount'][_0x798b('0x4d')]({'where':{'id':_0x16e1bf['params']['id']}})[_0x798b('0x13')](handleEntityNotFound(_0x5661da,null))[_0x798b('0x13')](removeEntity(_0x5661da,null))[_0x798b('0x1e')](handleError(_0x5661da,null));};exports[_0x798b('0x50')]=function(_0x190146,_0x509fe9,_0x1cce90){var _0x57dbec={};var _0x254765={};var _0x10270b;var _0x51b2ba;return db['VtigerAccount'][_0x798b('0x51')]({'where':{'id':_0x190146['params']['id']}})[_0x798b('0x13')](handleEntityNotFound(_0x509fe9,null))[_0x798b('0x13')](function(_0x303cb7){if(_0x303cb7){_0x10270b=_0x303cb7;_0x254765['model']=_[_0x798b('0x33')](db['VtigerConfiguration'][_0x798b('0x2f')]);_0x254765[_0x798b('0x30')]=_[_0x798b('0x33')](_0x190146[_0x798b('0x30')]);_0x254765['filters']=_[_0x798b('0x35')](_0x254765[_0x798b('0x36')],_0x254765[_0x798b('0x30')]);_0x57dbec[_0x798b('0x37')]=_['intersection'](_0x254765[_0x798b('0x36')],qs[_0x798b('0x38')](_0x190146[_0x798b('0x30')][_0x798b('0x38')]));_0x57dbec[_0x798b('0x37')]=_0x57dbec[_0x798b('0x37')]['length']?_0x57dbec[_0x798b('0x37')]:_0x254765[_0x798b('0x36')];_0x57dbec[_0x798b('0x3c')]=qs[_0x798b('0x3d')](_0x190146[_0x798b('0x30')]['sort']);_0x57dbec[_0x798b('0x3e')]=qs[_0x798b('0x34')](_[_0x798b('0x3f')](_0x190146[_0x798b('0x30')],_0x254765[_0x798b('0x34')]));if(_0x190146[_0x798b('0x30')]['filter']){_0x57dbec[_0x798b('0x3e')]=_[_0x798b('0x43')](_0x57dbec[_0x798b('0x3e')],{'$or':_[_0x798b('0x44')](_0x57dbec['attributes'],function(_0x2c4d97){var _0x224f70={};_0x224f70[_0x2c4d97]={'$like':'%'+_0x190146['query'][_0x798b('0x42')]+'%'};return _0x224f70;})});}_0x57dbec=_[_0x798b('0x43')]({},_0x57dbec,_0x190146[_0x798b('0x45')]);return _0x10270b[_0x798b('0x50')](_0x57dbec);}})[_0x798b('0x13')](function(_0x5ec281){if(_0x5ec281){_0x51b2ba=_0x5ec281[_0x798b('0x39')];if(!_0x190146[_0x798b('0x30')][_0x798b('0x3a')]('nolimit')){_0x57dbec[_0x798b('0x24')]=qs[_0x798b('0x24')](_0x190146[_0x798b('0x30')][_0x798b('0x24')]);_0x57dbec['offset']=qs[_0x798b('0x23')](_0x190146['query'][_0x798b('0x23')]);}return _0x10270b[_0x798b('0x50')](_0x57dbec);}})[_0x798b('0x13')](function(_0x216d05){if(_0x216d05){return _0x216d05?{'count':_0x51b2ba,'rows':_0x216d05}:null;}})[_0x798b('0x13')](respondWithResult(_0x509fe9,null))['catch'](handleError(_0x509fe9,null));};exports[_0x798b('0x52')]=function(_0x235343,_0x5c89c9,_0x426220){if(_0x235343[_0x798b('0x4f')]['id']){delete _0x235343[_0x798b('0x4f')]['id'];}return db[_0x798b('0x2e')]['findOne']({'where':{'id':_0x235343[_0x798b('0x4c')]['id']}})[_0x798b('0x13')](handleEntityNotFound(_0x5c89c9,null))[_0x798b('0x13')](function(_0x49d64e){if(_0x49d64e){_0x235343['body']['AccountId']=_0x49d64e['id'];_0x235343[_0x798b('0x4f')]['Subjects']=integrations['getSubjects'](_0x235343[_0x798b('0x4f')][_0x798b('0x53')],_0x235343[_0x798b('0x4f')][_0x798b('0x54')]);_0x235343[_0x798b('0x4f')]['Descriptions']=integrations[_0x798b('0x55')](_0x235343[_0x798b('0x4f')][_0x798b('0x53')],_0x235343[_0x798b('0x4f')][_0x798b('0x54')]);return db[_0x798b('0x56')][_0x798b('0x4e')](_0x235343[_0x798b('0x4f')],{'include':[{'model':db[_0x798b('0x57')],'as':'Subjects'},{'model':db[_0x798b('0x57')],'as':_0x798b('0x58')}]});}return null;})[_0x798b('0x13')](respondWithResult(_0x5c89c9,null))[_0x798b('0x1e')](handleError(_0x5c89c9,null));};var md5=require(_0x798b('0x59'));exports[_0x798b('0x5a')]=function(_0x28a7db,_0x4a8170,_0x30a082){var _0x34618c=null;var _0x3a9927=null;var _0x5189ef=null;var _0x262fa2=null;return db[_0x798b('0x2e')]['findOne']({'where':{'id':_0x28a7db[_0x798b('0x4c')]['id']},'attributes':['id','name',_0x798b('0x5b'),_0x798b('0x5c'),'moduleName','remoteUri','serverUrl',_0x798b('0x5d')]})[_0x798b('0x13')](handleEntityNotFound(_0x4a8170,null))[_0x798b('0x13')](function(_0x37843a){if(_0x37843a){_0x34618c=_0x37843a[_0x798b('0x5b')];_0x3a9927=_0x37843a[_0x798b('0x5d')];_0x5189ef=_0x37843a[_0x798b('0x5e')];_0x262fa2=util[_0x798b('0x5f')](_0x798b('0x60'),_0x37843a['remoteUri']);var _0x5b95cc={'method':_0x798b('0x61'),'uri':_0x262fa2,'qs':{'operation':'getchallenge','username':_0x37843a[_0x798b('0x5b')]},'json':!![]};return rp(_0x5b95cc);}})[_0x798b('0x13')](function(_0x136595){if(_0x136595['success']){var _0x1a76a6={'method':_0x798b('0x62'),'uri':_0x262fa2,'form':{'operation':_0x798b('0x63'),'username':_0x34618c,'accessKey':md5(_0x136595['result']['token']+_0x3a9927)},'json':!![]};return rp(_0x1a76a6);}})[_0x798b('0x13')](function(_0x1cf156){if(_0x1cf156[_0x798b('0x64')]){var _0xb6abe5={'method':_0x798b('0x61'),'uri':_0x262fa2,'qs':{'operation':_0x798b('0x65'),'username':_0x34618c,'sessionName':_0x1cf156[_0x798b('0x1d')][_0x798b('0x66')],'elementType':_0x5189ef},'json':!![]};return rp(_0xb6abe5);}})['then'](function(_0x3ec70c){if(_0x3ec70c[_0x798b('0x64')]){var _0x3edec9=[_0x798b('0x67'),_0x798b('0x68'),'owner'];_[_0x798b('0x69')](_0x3ec70c['result'][_0x798b('0x38')],function(_0x42f0d0){return _0x3edec9[_0x798b('0x6a')](_0x42f0d0[_0x798b('0x54')][_0x798b('0x2b')]);});_[_0x798b('0x69')](_0x3ec70c['result'][_0x798b('0x38')],function(_0x4f37ea){return _0x4f37ea['editable']==='false';});return{'count':_0x3ec70c['result'][_0x798b('0x38')][_0x798b('0x39')],'rows':_[_0x798b('0x44')](_0x3ec70c[_0x798b('0x1d')][_0x798b('0x38')],function(_0x400c73){return{'id':_0x400c73['name'],'name':_0x400c73[_0x798b('0x6b')],'custom':_['startsWith'](_0x400c73[_0x798b('0x2b')],_0x798b('0x6c'))?!![]:![],'options':_0x400c73['type'][_0x798b('0x2b')]===_0x798b('0x6d')&&_0x400c73[_0x798b('0x54')][_0x798b('0x6e')][_0x798b('0x39')]>0x0?_[_0x798b('0x44')](_0x400c73[_0x798b('0x54')][_0x798b('0x6e')],function(_0x3359ea){return{'name':_0x3359ea[_0x798b('0x6b')],'value':_0x3359ea[_0x798b('0x6f')]};}):[]};})};}})[_0x798b('0x13')](respondWithResult(_0x4a8170,null))[_0x798b('0x1e')](function(_0x499081){console['log'](_0x798b('0x70')+_0x499081);var _0x364fad=_0x28a7db['query'][_0x798b('0x71')]?0x1f4:_0x499081[_0x798b('0x72')]||0x1f4;logger[_0x798b('0x1b')](_0x798b('0x73'),_0x798b('0x5a'),_0x364fad,JSON[_0x798b('0x19')](_0x499081));delete _0x499081[_0x798b('0x2b')];if(_0x364fad===0x191){_0x364fad=0x190;}_0x4a8170['status'](_0x364fad)[_0x798b('0x2c')](_0x28a7db[_0x798b('0x30')]['test']?{'message':_0x798b('0x74'),'statusCode':_0x499081[_0x798b('0x72')]}:_0x499081);});};
\ No newline at end of file
index bde7245..96236a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde90=['exports','define','VtigerAccount','int_vtiger_accounts','lodash','util','../../config/logger','api','moment','bluebird','request-promise','../../components/integrations/configuration'];(function(_0x422905,_0x3bce3a){var _0x33dc6c=function(_0x4852c9){while(--_0x4852c9){_0x422905['push'](_0x422905['shift']());}};_0x33dc6c(++_0x3bce3a);}(_0xde90,0x13c));var _0x0de9=function(_0x7ea1fb,_0x2f0b74){_0x7ea1fb=_0x7ea1fb-0x0;var _0x478241=_0xde90[_0x7ea1fb];return _0x478241;};'use strict';var _=require(_0x0de9('0x0'));var util=require(_0x0de9('0x1'));var logger=require(_0x0de9('0x2'))(_0x0de9('0x3'));var moment=require(_0x0de9('0x4'));var BPromise=require(_0x0de9('0x5'));var rp=require(_0x0de9('0x6'));var attributes=require('./intVtigerAccount.attributes');var integrations=require(_0x0de9('0x7'));module[_0x0de9('0x8')]=function(_0x330bc0,_0x12d1ac){return _0x330bc0[_0x0de9('0x9')](_0x0de9('0xa'),attributes,{'tableName':_0x0de9('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb221=['int_vtiger_accounts','lodash','util','../../config/logger','moment','bluebird','request-promise','../../components/integrations/configuration','define','VtigerAccount'];(function(_0x59ab65,_0x410a52){var _0x57db9b=function(_0x19dc31){while(--_0x19dc31){_0x59ab65['push'](_0x59ab65['shift']());}};_0x57db9b(++_0x410a52);}(_0xb221,0x10f));var _0x1b22=function(_0x333767,_0x220733){_0x333767=_0x333767-0x0;var _0x42a755=_0xb221[_0x333767];return _0x42a755;};'use strict';var _=require(_0x1b22('0x0'));var util=require(_0x1b22('0x1'));var logger=require(_0x1b22('0x2'))('api');var moment=require(_0x1b22('0x3'));var BPromise=require(_0x1b22('0x4'));var rp=require(_0x1b22('0x5'));var attributes=require('./intVtigerAccount.attributes');var integrations=require(_0x1b22('0x6'));module['exports']=function(_0x48d7e0,_0x40b1a5){return _0x48d7e0[_0x1b22('0x7')](_0x1b22('0x8'),attributes,{'tableName':_0x1b22('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 36d96ad..968c6be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe815=['../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','VtigerAccount,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','GetVtigerAccount','findAll','options','raw','where','attributes','limit','include','map','model','stringify','ShowVtigerAccount','VtigerAccount','find','util','bluebird','randomstring','../../mysqldb'];(function(_0x34d186,_0x2faec5){var _0xc93e5d=function(_0x8f3555){while(--_0x8f3555){_0x34d186['push'](_0x34d186['shift']());}};_0xc93e5d(++_0x2faec5);}(_0xe815,0x17d));var _0x5e81=function(_0x49388f,_0x1657b5){_0x49388f=_0x49388f-0x0;var _0x39b3b6=_0xe815[_0x49388f];return _0x39b3b6;};'use strict';var _=require('lodash');var util=require(_0x5e81('0x0'));var moment=require('moment');var BPromise=require(_0x5e81('0x1'));var rs=require(_0x5e81('0x2'));var fs=require('fs');var db=require(_0x5e81('0x3'))['db'];var utils=require(_0x5e81('0x4'));var logger=require('../../config/logger')(_0x5e81('0x5'));var config=require(_0x5e81('0x6'));var jayson=require(_0x5e81('0x7'));var client=jayson[_0x5e81('0x8')][_0x5e81('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x112eb5,_0x4ce740,_0x5028da){return new BPromise(function(_0x132b7b,_0x10dd74){return client[_0x5e81('0xa')](_0x112eb5,_0x5028da)[_0x5e81('0xb')](function(_0x3a1548){logger[_0x5e81('0xc')](_0x5e81('0xd'),_0x4ce740,_0x5e81('0xe'));logger[_0x5e81('0xf')]('VtigerAccount,\x20%s,\x20%s,\x20%s',_0x4ce740,_0x5e81('0xe'),JSON['stringify'](_0x3a1548));if(_0x3a1548[_0x5e81('0x10')]){if(_0x3a1548['error'][_0x5e81('0x11')]===0x1f4){logger[_0x5e81('0x10')](_0x5e81('0xd'),_0x4ce740,_0x3a1548['error']['message']);return _0x10dd74(_0x3a1548[_0x5e81('0x10')][_0x5e81('0x12')]);}logger[_0x5e81('0x10')](_0x5e81('0xd'),_0x4ce740,_0x3a1548['error']['message']);return _0x132b7b(_0x3a1548[_0x5e81('0x10')][_0x5e81('0x12')]);}else{logger[_0x5e81('0xc')](_0x5e81('0xd'),_0x4ce740,_0x5e81('0xe'));_0x132b7b(_0x3a1548[_0x5e81('0x13')]['message']);}})[_0x5e81('0x14')](function(_0x247f1a){logger[_0x5e81('0x10')](_0x5e81('0xd'),_0x4ce740,_0x247f1a);_0x10dd74(_0x247f1a);});});}exports[_0x5e81('0x15')]=function(_0x4e0009){var _0xa8e5ad=this;return new Promise(function(_0x1850fa,_0x503ecc){return db['VtigerAccount'][_0x5e81('0x16')]({'raw':_0x4e0009[_0x5e81('0x17')]?_0x4e0009['options'][_0x5e81('0x18')]===undefined?!![]:![]:!![],'where':_0x4e0009[_0x5e81('0x17')]?_0x4e0009[_0x5e81('0x17')][_0x5e81('0x19')]||null:null,'attributes':_0x4e0009[_0x5e81('0x17')]?_0x4e0009[_0x5e81('0x17')][_0x5e81('0x1a')]||null:null,'limit':_0x4e0009[_0x5e81('0x17')]?_0x4e0009[_0x5e81('0x17')][_0x5e81('0x1b')]||null:null,'include':_0x4e0009[_0x5e81('0x17')]?_0x4e0009[_0x5e81('0x17')][_0x5e81('0x1c')]?_['map'](_0x4e0009[_0x5e81('0x17')][_0x5e81('0x1c')],function(_0x435cd9){return{'model':db[_0x435cd9['model']],'as':_0x435cd9['as'],'attributes':_0x435cd9[_0x5e81('0x1a')],'include':_0x435cd9[_0x5e81('0x1c')]?_[_0x5e81('0x1d')](_0x435cd9['include'],function(_0x17767f){return{'model':db[_0x17767f['model']],'as':_0x17767f['as'],'attributes':_0x17767f['attributes'],'include':_0x17767f[_0x5e81('0x1c')]?_[_0x5e81('0x1d')](_0x17767f[_0x5e81('0x1c')],function(_0x569ecc){return{'model':db[_0x569ecc[_0x5e81('0x1e')]],'as':_0x569ecc['as'],'attributes':_0x569ecc[_0x5e81('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x5e81('0xb')](function(_0x3e6146){logger['info'](_0x5e81('0x15'),_0x4e0009);logger['debug'](_0x5e81('0x15'),_0x4e0009,JSON[_0x5e81('0x1f')](_0x3e6146));_0x1850fa(_0x3e6146);})[_0x5e81('0x14')](function(_0x1b7954){logger[_0x5e81('0x10')](_0x5e81('0x15'),_0x1b7954[_0x5e81('0x12')],_0x4e0009);_0x503ecc(_0xa8e5ad['error'](0x1f4,_0x1b7954[_0x5e81('0x12')]));});});};exports[_0x5e81('0x20')]=function(_0x4e12e4){var _0x5d9856=this;return new Promise(function(_0x8c6551,_0x1b6233){return db[_0x5e81('0x21')][_0x5e81('0x22')]({'raw':_0x4e12e4[_0x5e81('0x17')]?_0x4e12e4[_0x5e81('0x17')]['raw']===undefined?!![]:![]:!![],'where':_0x4e12e4[_0x5e81('0x17')]?_0x4e12e4['options'][_0x5e81('0x19')]||null:null,'attributes':_0x4e12e4['options']?_0x4e12e4[_0x5e81('0x17')][_0x5e81('0x1a')]||null:null,'include':_0x4e12e4[_0x5e81('0x17')]?_0x4e12e4['options']['include']?_[_0x5e81('0x1d')](_0x4e12e4[_0x5e81('0x17')][_0x5e81('0x1c')],function(_0x5ee367){return{'model':db[_0x5ee367[_0x5e81('0x1e')]],'as':_0x5ee367['as'],'attributes':_0x5ee367[_0x5e81('0x1a')],'include':_0x5ee367[_0x5e81('0x1c')]?_[_0x5e81('0x1d')](_0x5ee367[_0x5e81('0x1c')],function(_0xce8031){return{'model':db[_0xce8031[_0x5e81('0x1e')]],'as':_0xce8031['as'],'attributes':_0xce8031[_0x5e81('0x1a')],'include':_0xce8031[_0x5e81('0x1c')]?_[_0x5e81('0x1d')](_0xce8031['include'],function(_0x1a9eab){return{'model':db[_0x1a9eab[_0x5e81('0x1e')]],'as':_0x1a9eab['as'],'attributes':_0x1a9eab[_0x5e81('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x5e81('0xb')](function(_0x28e1b0){logger[_0x5e81('0xc')](_0x5e81('0x20'),_0x4e12e4);logger[_0x5e81('0xf')](_0x5e81('0x20'),_0x4e12e4,JSON[_0x5e81('0x1f')](_0x28e1b0));_0x8c6551(_0x28e1b0);})['catch'](function(_0x4f160d){logger[_0x5e81('0x10')](_0x5e81('0x20'),_0x4f160d['message'],_0x4e12e4);_0x1b6233(_0x5d9856['error'](0x1f4,_0x4f160d['message']));});});};
\ No newline at end of file
+var _0xb7db=['where','lodash','util','moment','../../config/utils','rpc','jayson/promise','http','request','then','info','VtigerAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','GetVtigerAccount','VtigerAccount','findAll','options','raw','limit','include','model','attributes','map','ShowVtigerAccount','find'];(function(_0x1139a3,_0x26f38e){var _0x5cea1a=function(_0x1839c9){while(--_0x1839c9){_0x1139a3['push'](_0x1139a3['shift']());}};_0x5cea1a(++_0x26f38e);}(_0xb7db,0xe1));var _0xbb7d=function(_0x45e9ab,_0x19786a){_0x45e9ab=_0x45e9ab-0x0;var _0x4b3d29=_0xb7db[_0x45e9ab];return _0x4b3d29;};'use strict';var _=require(_0xbb7d('0x0'));var util=require(_0xbb7d('0x1'));var moment=require(_0xbb7d('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xbb7d('0x3'));var logger=require('../../config/logger')(_0xbb7d('0x4'));var config=require('../../config/environment');var jayson=require(_0xbb7d('0x5'));var client=jayson['client'][_0xbb7d('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x163bd7,_0x41f688,_0x1a5408){return new BPromise(function(_0xa04faa,_0x556697){return client[_0xbb7d('0x7')](_0x163bd7,_0x1a5408)[_0xbb7d('0x8')](function(_0x4c5699){logger[_0xbb7d('0x9')](_0xbb7d('0xa'),_0x41f688,_0xbb7d('0xb'));logger[_0xbb7d('0xc')]('VtigerAccount,\x20%s,\x20%s,\x20%s',_0x41f688,_0xbb7d('0xb'),JSON[_0xbb7d('0xd')](_0x4c5699));if(_0x4c5699[_0xbb7d('0xe')]){if(_0x4c5699[_0xbb7d('0xe')][_0xbb7d('0xf')]===0x1f4){logger['error'](_0xbb7d('0xa'),_0x41f688,_0x4c5699['error'][_0xbb7d('0x10')]);return _0x556697(_0x4c5699[_0xbb7d('0xe')]['message']);}logger[_0xbb7d('0xe')](_0xbb7d('0xa'),_0x41f688,_0x4c5699[_0xbb7d('0xe')][_0xbb7d('0x10')]);return _0xa04faa(_0x4c5699[_0xbb7d('0xe')][_0xbb7d('0x10')]);}else{logger['info'](_0xbb7d('0xa'),_0x41f688,'request\x20sent');_0xa04faa(_0x4c5699[_0xbb7d('0x11')]['message']);}})[_0xbb7d('0x12')](function(_0xe24596){logger[_0xbb7d('0xe')]('VtigerAccount,\x20%s,\x20%s',_0x41f688,_0xe24596);_0x556697(_0xe24596);});});}exports[_0xbb7d('0x13')]=function(_0x21cb8e){var _0x5f91dd=this;return new Promise(function(_0xd1e05b,_0x540d13){return db[_0xbb7d('0x14')][_0xbb7d('0x15')]({'raw':_0x21cb8e[_0xbb7d('0x16')]?_0x21cb8e['options'][_0xbb7d('0x17')]===undefined?!![]:![]:!![],'where':_0x21cb8e[_0xbb7d('0x16')]?_0x21cb8e[_0xbb7d('0x16')]['where']||null:null,'attributes':_0x21cb8e['options']?_0x21cb8e[_0xbb7d('0x16')]['attributes']||null:null,'limit':_0x21cb8e[_0xbb7d('0x16')]?_0x21cb8e[_0xbb7d('0x16')][_0xbb7d('0x18')]||null:null,'include':_0x21cb8e[_0xbb7d('0x16')]?_0x21cb8e[_0xbb7d('0x16')]['include']?_['map'](_0x21cb8e[_0xbb7d('0x16')][_0xbb7d('0x19')],function(_0x3b6eef){return{'model':db[_0x3b6eef[_0xbb7d('0x1a')]],'as':_0x3b6eef['as'],'attributes':_0x3b6eef[_0xbb7d('0x1b')],'include':_0x3b6eef[_0xbb7d('0x19')]?_[_0xbb7d('0x1c')](_0x3b6eef['include'],function(_0x2911be){return{'model':db[_0x2911be[_0xbb7d('0x1a')]],'as':_0x2911be['as'],'attributes':_0x2911be[_0xbb7d('0x1b')],'include':_0x2911be['include']?_[_0xbb7d('0x1c')](_0x2911be['include'],function(_0x3c9839){return{'model':db[_0x3c9839[_0xbb7d('0x1a')]],'as':_0x3c9839['as'],'attributes':_0x3c9839[_0xbb7d('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xbb7d('0x8')](function(_0x45e6af){logger[_0xbb7d('0x9')]('GetVtigerAccount',_0x21cb8e);logger[_0xbb7d('0xc')](_0xbb7d('0x13'),_0x21cb8e,JSON[_0xbb7d('0xd')](_0x45e6af));_0xd1e05b(_0x45e6af);})['catch'](function(_0x1b73e5){logger['error'](_0xbb7d('0x13'),_0x1b73e5['message'],_0x21cb8e);_0x540d13(_0x5f91dd[_0xbb7d('0xe')](0x1f4,_0x1b73e5[_0xbb7d('0x10')]));});});};exports[_0xbb7d('0x1d')]=function(_0x7e6ea7){var _0x248e96=this;return new Promise(function(_0x1393db,_0x4aa9ab){return db[_0xbb7d('0x14')][_0xbb7d('0x1e')]({'raw':_0x7e6ea7[_0xbb7d('0x16')]?_0x7e6ea7[_0xbb7d('0x16')][_0xbb7d('0x17')]===undefined?!![]:![]:!![],'where':_0x7e6ea7[_0xbb7d('0x16')]?_0x7e6ea7['options'][_0xbb7d('0x1f')]||null:null,'attributes':_0x7e6ea7[_0xbb7d('0x16')]?_0x7e6ea7['options'][_0xbb7d('0x1b')]||null:null,'include':_0x7e6ea7[_0xbb7d('0x16')]?_0x7e6ea7[_0xbb7d('0x16')][_0xbb7d('0x19')]?_['map'](_0x7e6ea7[_0xbb7d('0x16')][_0xbb7d('0x19')],function(_0x34ad64){return{'model':db[_0x34ad64[_0xbb7d('0x1a')]],'as':_0x34ad64['as'],'attributes':_0x34ad64[_0xbb7d('0x1b')],'include':_0x34ad64[_0xbb7d('0x19')]?_[_0xbb7d('0x1c')](_0x34ad64[_0xbb7d('0x19')],function(_0x2a6190){return{'model':db[_0x2a6190[_0xbb7d('0x1a')]],'as':_0x2a6190['as'],'attributes':_0x2a6190[_0xbb7d('0x1b')],'include':_0x2a6190[_0xbb7d('0x19')]?_['map'](_0x2a6190[_0xbb7d('0x19')],function(_0x52a9d5){return{'model':db[_0x52a9d5[_0xbb7d('0x1a')]],'as':_0x52a9d5['as'],'attributes':_0x52a9d5[_0xbb7d('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xbb7d('0x8')](function(_0x56802b){logger[_0xbb7d('0x9')](_0xbb7d('0x1d'),_0x7e6ea7);logger[_0xbb7d('0xc')]('ShowVtigerAccount',_0x7e6ea7,JSON['stringify'](_0x56802b));_0x1393db(_0x56802b);})[_0xbb7d('0x12')](function(_0x24846f){logger[_0xbb7d('0xe')](_0xbb7d('0x1d'),_0x24846f[_0xbb7d('0x10')],_0x7e6ea7);_0x4aa9ab(_0x248e96[_0xbb7d('0xe')](0x1f4,_0x24846f[_0xbb7d('0x10')]));});});};
\ No newline at end of file
index 8517dc7..cb10a2b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x69ac=['path','express','Router','../../components/interaction/service','../../config/environment','./intVtigerConfiguration.controller','get','isAuthenticated','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','/:id/descriptions','getDescriptions','create','put','update','delete','destroy','exports','util'];(function(_0xd09668,_0x1435b2){var _0x68726=function(_0x54a030){while(--_0x54a030){_0xd09668['push'](_0xd09668['shift']());}};_0x68726(++_0x1435b2);}(_0x69ac,0x1cb));var _0xc69a=function(_0x18c25d,_0xd532f6){_0x18c25d=_0x18c25d-0x0;var _0x22c032=_0x69ac[_0x18c25d];return _0x22c032;};'use strict';var multer=require('multer');var util=require(_0xc69a('0x0'));var path=require(_0xc69a('0x1'));var express=require(_0xc69a('0x2'));var router=express[_0xc69a('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xc69a('0x4'));var config=require(_0xc69a('0x5'));var controller=require(_0xc69a('0x6'));router[_0xc69a('0x7')]('/',auth[_0xc69a('0x8')](),controller['index']);router[_0xc69a('0x7')](_0xc69a('0x9'),auth[_0xc69a('0x8')](),controller[_0xc69a('0xa')]);router[_0xc69a('0x7')](_0xc69a('0xb'),auth[_0xc69a('0x8')](),controller[_0xc69a('0xc')]);router['get'](_0xc69a('0xd'),auth['isAuthenticated'](),controller[_0xc69a('0xe')]);router['get'](_0xc69a('0xf'),auth['isAuthenticated'](),controller[_0xc69a('0x10')]);router['post']('/',auth[_0xc69a('0x8')](),controller[_0xc69a('0x11')]);router[_0xc69a('0x12')](_0xc69a('0x9'),auth[_0xc69a('0x8')](),controller[_0xc69a('0x13')]);router[_0xc69a('0x14')](_0xc69a('0x9'),auth[_0xc69a('0x8')](),controller[_0xc69a('0x15')]);module[_0xc69a('0x16')]=router;
\ No newline at end of file
+var _0xb20e=['show','get','/:id/fields','getFields','/:id/subjects','getSubjects','create','/:id','update','delete','destroy','exports','multer','path','express','../../components/interaction/service','../../config/environment','./intVtigerConfiguration.controller','isAuthenticated','index'];(function(_0x241424,_0x25eb5d){var _0x3da798=function(_0x415153){while(--_0x415153){_0x241424['push'](_0x241424['shift']());}};_0x3da798(++_0x25eb5d);}(_0xb20e,0x70));var _0xeb20=function(_0x5a63f8,_0x149be7){_0x5a63f8=_0x5a63f8-0x0;var _0x25cb83=_0xb20e[_0x5a63f8];return _0x25cb83;};'use strict';var multer=require(_0xeb20('0x0'));var util=require('util');var path=require(_0xeb20('0x1'));var express=require(_0xeb20('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xeb20('0x3'));var config=require(_0xeb20('0x4'));var controller=require(_0xeb20('0x5'));router['get']('/',auth[_0xeb20('0x6')](),controller[_0xeb20('0x7')]);router['get']('/:id',auth['isAuthenticated'](),controller[_0xeb20('0x8')]);router[_0xeb20('0x9')](_0xeb20('0xa'),auth[_0xeb20('0x6')](),controller[_0xeb20('0xb')]);router[_0xeb20('0x9')](_0xeb20('0xc'),auth['isAuthenticated'](),controller[_0xeb20('0xd')]);router[_0xeb20('0x9')]('/:id/descriptions',auth[_0xeb20('0x6')](),controller['getDescriptions']);router['post']('/',auth['isAuthenticated'](),controller[_0xeb20('0xe')]);router['put'](_0xeb20('0xf'),auth[_0xeb20('0x6')](),controller[_0xeb20('0x10')]);router[_0xeb20('0x11')](_0xeb20('0xf'),auth[_0xeb20('0x6')](),controller[_0xeb20('0x12')]);module[_0xeb20('0x13')]=router;
\ No newline at end of file
index 34a8b65..2247236 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4af1=['sequelize','exports','STRING'];(function(_0x3b8ce7,_0x5c18d2){var _0x100cb6=function(_0x2a9c1e){while(--_0x2a9c1e){_0x3b8ce7['push'](_0x3b8ce7['shift']());}};_0x100cb6(++_0x5c18d2);}(_0x4af1,0x159));var _0x14af=function(_0x21eb75,_0x518756){_0x21eb75=_0x21eb75-0x0;var _0x4445c6=_0x4af1[_0x21eb75];return _0x4445c6;};'use strict';var Sequelize=require(_0x14af('0x0'));module[_0x14af('0x1')]={'name':{'type':Sequelize[_0x14af('0x2')]},'description':{'type':Sequelize[_0x14af('0x2')]}};
\ No newline at end of file
+var _0x1a18=['STRING','sequelize','exports'];(function(_0x8cb2f9,_0x2b8706){var _0x164887=function(_0x1812cc){while(--_0x1812cc){_0x8cb2f9['push'](_0x8cb2f9['shift']());}};_0x164887(++_0x2b8706);}(_0x1a18,0x76));var _0x81a1=function(_0x11a220,_0x4e470a){_0x11a220=_0x11a220-0x0;var _0x20d8fe=_0x1a18[_0x11a220];return _0x20d8fe;};'use strict';var Sequelize=require(_0x81a1('0x0'));module[_0x81a1('0x1')]={'name':{'type':Sequelize[_0x81a1('0x2')]},'description':{'type':Sequelize[_0x81a1('0x2')]}};
\ No newline at end of file
index 70214bd..b78aeaf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbc9d=['includeAll','include','findAll','catch','rawAttributes','filters','find','create','body','params','destroy','getFields','findOne','VtigerField','getSubjects','getDescriptions','fast-json-patch','request-promise','moment','bluebird','mustache','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','api','../../mysqldb','jayson/promise','client','http','info','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','sendStatus','end','status','json','count','offset','limit','Content-Range','apply','reject','update','then','name','send','index','model','keys','dateStart','query','dateEnd','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','filter','map','options','VtigerConfiguration'];(function(_0x2b49a8,_0x39591e){var _0x3f77a0=function(_0xae9d7f){while(--_0xae9d7f){_0x2b49a8['push'](_0x2b49a8['shift']());}};_0x3f77a0(++_0x39591e);}(_0xbc9d,0xb4));var _0xdbc9=function(_0x4c8d7e,_0x481321){_0x4c8d7e=_0x4c8d7e-0x0;var _0xf5e4e8=_0xbc9d[_0x4c8d7e];return _0xf5e4e8;};'use strict';var jsonpatch=require(_0xdbc9('0x0'));var rp=require(_0xdbc9('0x1'));var moment=require(_0xdbc9('0x2'));var BPromise=require(_0xdbc9('0x3'));var Mustache=require(_0xdbc9('0x4'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0xdbc9('0x5'));var ejs=require(_0xdbc9('0x6'));var fs=require('fs');var _=require(_0xdbc9('0x7'));var squel=require(_0xdbc9('0x8'));var crypto=require(_0xdbc9('0x9'));var jsforce=require(_0xdbc9('0xa'));var deskjs=require(_0xdbc9('0xb'));var toCsv=require('to-csv');var querystring=require(_0xdbc9('0xc'));var Papa=require(_0xdbc9('0xd'));var qs=require(_0xdbc9('0xe'));var logger=require('../../config/logger')(_0xdbc9('0xf'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xdbc9('0x10'))['db'];var jayson=require(_0xdbc9('0x11'));var client=jayson[_0xdbc9('0x12')][_0xdbc9('0x13')]({'port':0x232a});function respondWithRpcPromise(_0x531f09,_0x417b24,_0x187149,_0xcc898){return new BPromise(function(_0xd026bc,_0x34a15d){var _0x103d54=_0xcc898||client;return _0x103d54['request'](_0x531f09,_0x187149)['then'](function(_0x3d0fdd){logger[_0xdbc9('0x14')](_0xdbc9('0x15'),_0x417b24,_0xdbc9('0x16'));logger[_0xdbc9('0x17')]('VtigerConfiguration,\x20%s,\x20%s,\x20%s',_0x417b24,_0xdbc9('0x16'),JSON[_0xdbc9('0x18')](_0x3d0fdd));if(_0x3d0fdd[_0xdbc9('0x19')]){if(_0x3d0fdd['error'][_0xdbc9('0x1a')]===0x1f4){logger[_0xdbc9('0x19')]('VtigerConfiguration,\x20%s,\x20%s',_0x417b24,_0x3d0fdd[_0xdbc9('0x19')][_0xdbc9('0x1b')]);return _0x34a15d(_0x3d0fdd[_0xdbc9('0x19')][_0xdbc9('0x1b')]);}logger[_0xdbc9('0x19')](_0xdbc9('0x15'),_0x417b24,_0x3d0fdd[_0xdbc9('0x19')][_0xdbc9('0x1b')]);return _0xd026bc(_0x3d0fdd[_0xdbc9('0x19')][_0xdbc9('0x1b')]);}else{logger['info'](_0xdbc9('0x15'),_0x417b24,'request\x20sent');_0xd026bc(_0x3d0fdd[_0xdbc9('0x1c')][_0xdbc9('0x1b')]);}})['catch'](function(_0x4408e9){logger['error']('VtigerConfiguration,\x20%s,\x20%s',_0x417b24,_0x4408e9);_0x34a15d(_0x4408e9);});});}function respondWithStatusCode(_0x4ab00d,_0x4f3b5d){_0x4f3b5d=_0x4f3b5d||0xcc;return function(_0x2f229c){if(_0x2f229c){return _0x4ab00d[_0xdbc9('0x1d')](_0x4f3b5d);}return _0x4ab00d['status'](_0x4f3b5d)[_0xdbc9('0x1e')]();};}function respondWithResult(_0x20563e,_0x5bc79a){_0x5bc79a=_0x5bc79a||0xc8;return function(_0x1bc073){if(_0x1bc073){return _0x20563e[_0xdbc9('0x1f')](_0x5bc79a)[_0xdbc9('0x20')](_0x1bc073);}};}function respondWithFilteredResult(_0x119230,_0x3400e7){return function(_0x28331f){if(_0x28331f){var _0x32822f=_0x28331f[_0xdbc9('0x21')],_0x2d8c41=_0x3400e7[_0xdbc9('0x22')],_0x3c8c1d=_0x3400e7[_0xdbc9('0x22')]+_0x3400e7[_0xdbc9('0x23')],_0x4a868b;if(_0x3c8c1d>=_0x32822f){_0x3c8c1d=_0x32822f;_0x4a868b=0xc8;}else{_0x4a868b=0xce;}_0x119230[_0xdbc9('0x1f')](_0x4a868b);return _0x119230['set'](_0xdbc9('0x24'),_0x2d8c41+'-'+_0x3c8c1d+'/'+_0x32822f)[_0xdbc9('0x20')](_0x28331f);}return null;};}function patchUpdates(_0x5300bd){return function(_0x5f40ab){try{jsonpatch[_0xdbc9('0x25')](_0x5f40ab,_0x5300bd,!![]);}catch(_0x278db2){return BPromise[_0xdbc9('0x26')](_0x278db2);}return _0x5f40ab['save']();};}function saveUpdates(_0x13a432,_0x539e57){return function(_0x561f8e){if(_0x561f8e){return _0x561f8e[_0xdbc9('0x27')](_0x13a432)['then'](function(_0x5c08fe){return _0x5c08fe;});}return null;};}function removeEntity(_0x417b17,_0x20eb4f){return function(_0x1cb557){if(_0x1cb557){return _0x1cb557['destroy']()[_0xdbc9('0x28')](function(){_0x417b17[_0xdbc9('0x1f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x507856,_0x2870e0){return function(_0x245496){if(!_0x245496){_0x507856[_0xdbc9('0x1d')](0x194);}return _0x245496;};}function handleError(_0x3ce701,_0x37e53d){_0x37e53d=_0x37e53d||0x1f4;return function(_0x16c9db){logger[_0xdbc9('0x19')](_0x16c9db['stack']);if(_0x16c9db[_0xdbc9('0x29')]){delete _0x16c9db[_0xdbc9('0x29')];}_0x3ce701[_0xdbc9('0x1f')](_0x37e53d)[_0xdbc9('0x2a')](_0x16c9db);};}exports[_0xdbc9('0x2b')]=function(_0x2badb5,_0x537af2){var _0x1cf210={},_0x56e85c={},_0x4b0a16={'count':0x0,'rows':[]};var _0x495c0e=db['VtigerConfiguration']['rawAttributes'];_0x56e85c[_0xdbc9('0x2c')]=_[_0xdbc9('0x2d')](_0x495c0e);var _0x205123={'dateStart':_0x2badb5['query'][_0xdbc9('0x2e')],'dateEnd':_0x2badb5[_0xdbc9('0x2f')][_0xdbc9('0x30')]};delete _0x2badb5[_0xdbc9('0x2f')][_0xdbc9('0x2e')];delete _0x2badb5[_0xdbc9('0x2f')]['dateEnd'];_0x56e85c[_0xdbc9('0x2f')]=_[_0xdbc9('0x2d')](_0x2badb5[_0xdbc9('0x2f')]);_0x56e85c['filters']=_[_0xdbc9('0x31')](_0x56e85c[_0xdbc9('0x2c')],_0x56e85c[_0xdbc9('0x2f')]);_0x1cf210[_0xdbc9('0x32')]=_['intersection'](_0x56e85c['model'],qs[_0xdbc9('0x33')](_0x2badb5[_0xdbc9('0x2f')][_0xdbc9('0x33')]));_0x1cf210[_0xdbc9('0x32')]=_0x1cf210['attributes'][_0xdbc9('0x34')]?_0x1cf210[_0xdbc9('0x32')]:_0x56e85c[_0xdbc9('0x2c')];if(!_0x2badb5['query'][_0xdbc9('0x35')](_0xdbc9('0x36'))){_0x1cf210[_0xdbc9('0x23')]=qs['limit'](_0x2badb5[_0xdbc9('0x2f')][_0xdbc9('0x23')]);_0x1cf210['offset']=qs['offset'](_0x2badb5[_0xdbc9('0x2f')][_0xdbc9('0x22')]);}_0x1cf210[_0xdbc9('0x37')]=qs[_0xdbc9('0x38')](_0x2badb5['query'][_0xdbc9('0x38')]);_0x1cf210[_0xdbc9('0x39')]=qs['filters'](_[_0xdbc9('0x3a')](_0x2badb5[_0xdbc9('0x2f')],_0x56e85c['filters']));if(_0x205123[_0xdbc9('0x2e')]){if(_0x205123[_0xdbc9('0x30')]){_0x205123[_0xdbc9('0x30')]=moment(_0x205123[_0xdbc9('0x30')])[_0xdbc9('0x3b')](0x1,_0xdbc9('0x3c'));}else{_0x205123[_0xdbc9('0x30')]=moment(_0x205123['dateStart'])['add'](0x1,_0xdbc9('0x3c'));}_[_0xdbc9('0x3d')](_0x1cf210[_0xdbc9('0x39')],{'createdAt':{'$gte':_0x205123[_0xdbc9('0x2e')],'$lte':_0x205123[_0xdbc9('0x30')]}});}if(_0x2badb5[_0xdbc9('0x2f')][_0xdbc9('0x3e')]){_0x1cf210[_0xdbc9('0x39')]=_[_0xdbc9('0x3d')](_0x1cf210[_0xdbc9('0x39')],{'$or':_[_0xdbc9('0x3f')](_0x1cf210['attributes'],function(_0x5dc6de){var _0x1b21e0={};_0x1b21e0[_0x5dc6de]={'$like':'%'+_0x2badb5[_0xdbc9('0x2f')][_0xdbc9('0x3e')]+'%'};return _0x1b21e0;})});}_0x1cf210=_[_0xdbc9('0x3d')]({},_0x1cf210,_0x2badb5[_0xdbc9('0x40')]);var _0xaba3fa={'where':_0x1cf210[_0xdbc9('0x39')]};return db[_0xdbc9('0x41')]['count'](_0xaba3fa)['then'](function(_0xf24b3f){_0x4b0a16[_0xdbc9('0x21')]=_0xf24b3f;if(_0x2badb5[_0xdbc9('0x2f')][_0xdbc9('0x42')]){_0x1cf210[_0xdbc9('0x43')]=[{'all':!![]}];}return db[_0xdbc9('0x41')][_0xdbc9('0x44')](_0x1cf210);})[_0xdbc9('0x28')](function(_0x43e3ec){_0x4b0a16['rows']=_0x43e3ec;return _0x4b0a16;})[_0xdbc9('0x28')](respondWithFilteredResult(_0x537af2,_0x1cf210))[_0xdbc9('0x45')](handleError(_0x537af2,null));};exports['show']=function(_0x59e02e,_0x4338d5){var _0xc3db3c={'raw':![],'where':{'id':_0x59e02e['params']['id']}},_0x133a13={};_0x133a13[_0xdbc9('0x2c')]=_[_0xdbc9('0x2d')](db[_0xdbc9('0x41')][_0xdbc9('0x46')]);_0x133a13['query']=_[_0xdbc9('0x2d')](_0x59e02e[_0xdbc9('0x2f')]);_0x133a13[_0xdbc9('0x47')]=_[_0xdbc9('0x31')](_0x133a13['model'],_0x133a13[_0xdbc9('0x2f')]);_0xc3db3c[_0xdbc9('0x32')]=_[_0xdbc9('0x31')](_0x133a13[_0xdbc9('0x2c')],qs[_0xdbc9('0x33')](_0x59e02e[_0xdbc9('0x2f')][_0xdbc9('0x33')]));_0xc3db3c[_0xdbc9('0x32')]=_0xc3db3c['attributes'][_0xdbc9('0x34')]?_0xc3db3c['attributes']:_0x133a13[_0xdbc9('0x2c')];if(_0x59e02e[_0xdbc9('0x2f')]['includeAll']){_0xc3db3c['include']=[{'all':!![]}];}_0xc3db3c=_[_0xdbc9('0x3d')]({},_0xc3db3c,_0x59e02e['options']);return db[_0xdbc9('0x41')][_0xdbc9('0x48')](_0xc3db3c)[_0xdbc9('0x28')](handleEntityNotFound(_0x4338d5,null))['then'](respondWithResult(_0x4338d5,null))[_0xdbc9('0x45')](handleError(_0x4338d5,null));};exports[_0xdbc9('0x49')]=function(_0x3d8b01,_0x2c4a43){return db[_0xdbc9('0x41')][_0xdbc9('0x49')](_0x3d8b01[_0xdbc9('0x4a')],{})[_0xdbc9('0x28')](respondWithResult(_0x2c4a43,0xc9))['catch'](handleError(_0x2c4a43,null));};exports['update']=function(_0x4c6d96,_0xb61b02){if(_0x4c6d96[_0xdbc9('0x4a')]['id']){delete _0x4c6d96[_0xdbc9('0x4a')]['id'];}return db['VtigerConfiguration']['find']({'where':{'id':_0x4c6d96[_0xdbc9('0x4b')]['id']}})[_0xdbc9('0x28')](handleEntityNotFound(_0xb61b02,null))['then'](saveUpdates(_0x4c6d96['body'],null))[_0xdbc9('0x28')](respondWithResult(_0xb61b02,null))[_0xdbc9('0x45')](handleError(_0xb61b02,null));};exports[_0xdbc9('0x4c')]=function(_0x2f90a8,_0x3021be){return db[_0xdbc9('0x41')]['find']({'where':{'id':_0x2f90a8[_0xdbc9('0x4b')]['id']}})[_0xdbc9('0x28')](handleEntityNotFound(_0x3021be,null))[_0xdbc9('0x28')](removeEntity(_0x3021be,null))['catch'](handleError(_0x3021be,null));};exports[_0xdbc9('0x4d')]=function(_0x14ccb4,_0x1819fa,_0x57b4ab){var _0x1d2552={};var _0x4c8608={};var _0x22ef1b;var _0x3ca8ce;return db[_0xdbc9('0x41')][_0xdbc9('0x4e')]({'where':{'id':_0x14ccb4[_0xdbc9('0x4b')]['id']}})[_0xdbc9('0x28')](handleEntityNotFound(_0x1819fa,null))['then'](function(_0x108e18){if(_0x108e18){_0x22ef1b=_0x108e18;_0x4c8608['model']=_[_0xdbc9('0x2d')](db[_0xdbc9('0x4f')]['rawAttributes']);_0x4c8608[_0xdbc9('0x2f')]=_[_0xdbc9('0x2d')](_0x14ccb4['query']);_0x4c8608['filters']=_[_0xdbc9('0x31')](_0x4c8608[_0xdbc9('0x2c')],_0x4c8608[_0xdbc9('0x2f')]);_0x1d2552['attributes']=_[_0xdbc9('0x31')](_0x4c8608[_0xdbc9('0x2c')],qs['fields'](_0x14ccb4[_0xdbc9('0x2f')][_0xdbc9('0x33')]));_0x1d2552['attributes']=_0x1d2552['attributes'][_0xdbc9('0x34')]?_0x1d2552[_0xdbc9('0x32')]:_0x4c8608[_0xdbc9('0x2c')];_0x1d2552[_0xdbc9('0x37')]=qs[_0xdbc9('0x38')](_0x14ccb4[_0xdbc9('0x2f')][_0xdbc9('0x38')]);_0x1d2552[_0xdbc9('0x39')]=qs['filters'](_[_0xdbc9('0x3a')](_0x14ccb4[_0xdbc9('0x2f')],_0x4c8608[_0xdbc9('0x47')]));if(_0x14ccb4[_0xdbc9('0x2f')][_0xdbc9('0x3e')]){_0x1d2552[_0xdbc9('0x39')]=_[_0xdbc9('0x3d')](_0x1d2552[_0xdbc9('0x39')],{'$or':_['map'](_0x1d2552[_0xdbc9('0x32')],function(_0x54b4ba){var _0x2678b2={};_0x2678b2[_0x54b4ba]={'$like':'%'+_0x14ccb4['query'][_0xdbc9('0x3e')]+'%'};return _0x2678b2;})});}_0x1d2552=_[_0xdbc9('0x3d')]({},_0x1d2552,_0x14ccb4['options']);return _0x22ef1b['getFields'](_0x1d2552);}})['then'](function(_0x408e8f){if(_0x408e8f){_0x3ca8ce=_0x408e8f[_0xdbc9('0x34')];if(!_0x14ccb4[_0xdbc9('0x2f')]['hasOwnProperty'](_0xdbc9('0x36'))){_0x1d2552[_0xdbc9('0x23')]=qs[_0xdbc9('0x23')](_0x14ccb4[_0xdbc9('0x2f')][_0xdbc9('0x23')]);_0x1d2552[_0xdbc9('0x22')]=qs[_0xdbc9('0x22')](_0x14ccb4[_0xdbc9('0x2f')][_0xdbc9('0x22')]);}return _0x22ef1b['getFields'](_0x1d2552);}})[_0xdbc9('0x28')](function(_0x2c3223){if(_0x2c3223){return _0x2c3223?{'count':_0x3ca8ce,'rows':_0x2c3223}:null;}})['then'](respondWithResult(_0x1819fa,null))['catch'](handleError(_0x1819fa,null));};exports[_0xdbc9('0x50')]=function(_0x2b5671,_0x57828d,_0x45a501){var _0x15b443={};var _0xb75619={};var _0xa80fea;var _0x5cdfc8;return db[_0xdbc9('0x41')][_0xdbc9('0x4e')]({'where':{'id':_0x2b5671[_0xdbc9('0x4b')]['id']}})['then'](handleEntityNotFound(_0x57828d,null))[_0xdbc9('0x28')](function(_0x236f5a){if(_0x236f5a){_0xa80fea=_0x236f5a;_0xb75619[_0xdbc9('0x2c')]=_[_0xdbc9('0x2d')](db[_0xdbc9('0x4f')][_0xdbc9('0x46')]);_0xb75619[_0xdbc9('0x2f')]=_[_0xdbc9('0x2d')](_0x2b5671[_0xdbc9('0x2f')]);_0xb75619[_0xdbc9('0x47')]=_[_0xdbc9('0x31')](_0xb75619[_0xdbc9('0x2c')],_0xb75619['query']);_0x15b443['attributes']=_[_0xdbc9('0x31')](_0xb75619['model'],qs['fields'](_0x2b5671[_0xdbc9('0x2f')][_0xdbc9('0x33')]));_0x15b443[_0xdbc9('0x32')]=_0x15b443['attributes'][_0xdbc9('0x34')]?_0x15b443[_0xdbc9('0x32')]:_0xb75619[_0xdbc9('0x2c')];_0x15b443['order']=qs[_0xdbc9('0x38')](_0x2b5671[_0xdbc9('0x2f')]['sort']);_0x15b443[_0xdbc9('0x39')]=qs[_0xdbc9('0x47')](_[_0xdbc9('0x3a')](_0x2b5671[_0xdbc9('0x2f')],_0xb75619[_0xdbc9('0x47')]));if(_0x2b5671['query']['filter']){_0x15b443[_0xdbc9('0x39')]=_[_0xdbc9('0x3d')](_0x15b443['where'],{'$or':_[_0xdbc9('0x3f')](_0x15b443[_0xdbc9('0x32')],function(_0x290688){var _0x5802fc={};_0x5802fc[_0x290688]={'$like':'%'+_0x2b5671[_0xdbc9('0x2f')][_0xdbc9('0x3e')]+'%'};return _0x5802fc;})});}_0x15b443=_[_0xdbc9('0x3d')]({},_0x15b443,_0x2b5671[_0xdbc9('0x40')]);return _0xa80fea[_0xdbc9('0x50')](_0x15b443);}})[_0xdbc9('0x28')](function(_0x1b053a){if(_0x1b053a){_0x5cdfc8=_0x1b053a[_0xdbc9('0x34')];if(!_0x2b5671['query'][_0xdbc9('0x35')](_0xdbc9('0x36'))){_0x15b443[_0xdbc9('0x23')]=qs[_0xdbc9('0x23')](_0x2b5671['query'][_0xdbc9('0x23')]);_0x15b443['offset']=qs['offset'](_0x2b5671[_0xdbc9('0x2f')][_0xdbc9('0x22')]);}return _0xa80fea['getSubjects'](_0x15b443);}})[_0xdbc9('0x28')](function(_0x33b825){if(_0x33b825){return _0x33b825?{'count':_0x5cdfc8,'rows':_0x33b825}:null;}})[_0xdbc9('0x28')](respondWithResult(_0x57828d,null))[_0xdbc9('0x45')](handleError(_0x57828d,null));};exports[_0xdbc9('0x51')]=function(_0x3663d4,_0x1abb29,_0x4d5703){var _0x54b715={};var _0x1f4004={};var _0x2cf5b7;var _0xb99f16;return db['VtigerConfiguration'][_0xdbc9('0x4e')]({'where':{'id':_0x3663d4[_0xdbc9('0x4b')]['id']}})[_0xdbc9('0x28')](handleEntityNotFound(_0x1abb29,null))[_0xdbc9('0x28')](function(_0x2baf15){if(_0x2baf15){_0x2cf5b7=_0x2baf15;_0x1f4004[_0xdbc9('0x2c')]=_[_0xdbc9('0x2d')](db[_0xdbc9('0x4f')][_0xdbc9('0x46')]);_0x1f4004[_0xdbc9('0x2f')]=_[_0xdbc9('0x2d')](_0x3663d4['query']);_0x1f4004[_0xdbc9('0x47')]=_['intersection'](_0x1f4004[_0xdbc9('0x2c')],_0x1f4004[_0xdbc9('0x2f')]);_0x54b715[_0xdbc9('0x32')]=_[_0xdbc9('0x31')](_0x1f4004[_0xdbc9('0x2c')],qs[_0xdbc9('0x33')](_0x3663d4[_0xdbc9('0x2f')]['fields']));_0x54b715[_0xdbc9('0x32')]=_0x54b715[_0xdbc9('0x32')][_0xdbc9('0x34')]?_0x54b715[_0xdbc9('0x32')]:_0x1f4004['model'];_0x54b715['order']=qs[_0xdbc9('0x38')](_0x3663d4[_0xdbc9('0x2f')]['sort']);_0x54b715[_0xdbc9('0x39')]=qs['filters'](_[_0xdbc9('0x3a')](_0x3663d4[_0xdbc9('0x2f')],_0x1f4004[_0xdbc9('0x47')]));if(_0x3663d4[_0xdbc9('0x2f')][_0xdbc9('0x3e')]){_0x54b715[_0xdbc9('0x39')]=_['merge'](_0x54b715[_0xdbc9('0x39')],{'$or':_['map'](_0x54b715[_0xdbc9('0x32')],function(_0x520b86){var _0x23d708={};_0x23d708[_0x520b86]={'$like':'%'+_0x3663d4[_0xdbc9('0x2f')][_0xdbc9('0x3e')]+'%'};return _0x23d708;})});}_0x54b715=_['merge']({},_0x54b715,_0x3663d4[_0xdbc9('0x40')]);return _0x2cf5b7[_0xdbc9('0x51')](_0x54b715);}})[_0xdbc9('0x28')](function(_0x3f0756){if(_0x3f0756){_0xb99f16=_0x3f0756[_0xdbc9('0x34')];if(!_0x3663d4[_0xdbc9('0x2f')][_0xdbc9('0x35')](_0xdbc9('0x36'))){_0x54b715[_0xdbc9('0x23')]=qs['limit'](_0x3663d4['query'][_0xdbc9('0x23')]);_0x54b715[_0xdbc9('0x22')]=qs[_0xdbc9('0x22')](_0x3663d4[_0xdbc9('0x2f')][_0xdbc9('0x22')]);}return _0x2cf5b7[_0xdbc9('0x51')](_0x54b715);}})['then'](function(_0x1386e9){if(_0x1386e9){return _0x1386e9?{'count':_0xb99f16,'rows':_0x1386e9}:null;}})['then'](respondWithResult(_0x1abb29,null))[_0xdbc9('0x45')](handleError(_0x1abb29,null));};
\ No newline at end of file
+var _0x1be1=['path','sox','to-csv','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','client','http','request','then','info','error','VtigerConfiguration,\x20%s,\x20%s','message','request\x20sent','result','sendStatus','status','end','json','offset','limit','Content-Range','apply','reject','save','destroy','stack','name','send','index','VtigerConfiguration','model','query','dateEnd','keys','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','where','dateStart','add','day','merge','filter','map','count','includeAll','include','rows','catch','show','params','rawAttributes','options','find','create','body','getFields','findOne','sort','pick','getSubjects','VtigerField','getDescriptions','moment','bluebird','util'];(function(_0x2eb3de,_0x5b7687){var _0x213484=function(_0x141ec4){while(--_0x141ec4){_0x2eb3de['push'](_0x2eb3de['shift']());}};_0x213484(++_0x5b7687);}(_0x1be1,0x192));var _0x11be=function(_0x93bf39,_0x11ee0b){_0x93bf39=_0x93bf39-0x0;var _0x28782a=_0x1be1[_0x93bf39];return _0x28782a;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x11be('0x0'));var BPromise=require(_0x11be('0x1'));var Mustache=require('mustache');var util=require(_0x11be('0x2'));var path=require(_0x11be('0x3'));var sox=require(_0x11be('0x4'));var csv=require(_0x11be('0x5'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x11be('0x6'));var squel=require(_0x11be('0x7'));var crypto=require(_0x11be('0x8'));var jsforce=require('jsforce');var deskjs=require(_0x11be('0x9'));var toCsv=require('to-csv');var querystring=require(_0x11be('0xa'));var Papa=require(_0x11be('0xb'));var qs=require(_0x11be('0xc'));var logger=require(_0x11be('0xd'))(_0x11be('0xe'));var utils=require('../../config/utils');var config=require(_0x11be('0xf'));var db=require(_0x11be('0x10'))['db'];var jayson=require('jayson/promise');var client=jayson[_0x11be('0x11')][_0x11be('0x12')]({'port':0x232a});function respondWithRpcPromise(_0x40f0d1,_0x3fd587,_0x4e013c,_0x447e88){return new BPromise(function(_0xcb8120,_0x26736d){var _0x4b36c8=_0x447e88||client;return _0x4b36c8[_0x11be('0x13')](_0x40f0d1,_0x4e013c)[_0x11be('0x14')](function(_0x4ce3ae){logger[_0x11be('0x15')]('VtigerConfiguration,\x20%s,\x20%s',_0x3fd587,'request\x20sent');logger['debug']('VtigerConfiguration,\x20%s,\x20%s,\x20%s',_0x3fd587,'request\x20sent',JSON['stringify'](_0x4ce3ae));if(_0x4ce3ae['error']){if(_0x4ce3ae[_0x11be('0x16')]['code']===0x1f4){logger[_0x11be('0x16')](_0x11be('0x17'),_0x3fd587,_0x4ce3ae[_0x11be('0x16')][_0x11be('0x18')]);return _0x26736d(_0x4ce3ae['error'][_0x11be('0x18')]);}logger[_0x11be('0x16')]('VtigerConfiguration,\x20%s,\x20%s',_0x3fd587,_0x4ce3ae[_0x11be('0x16')][_0x11be('0x18')]);return _0xcb8120(_0x4ce3ae[_0x11be('0x16')]['message']);}else{logger['info'](_0x11be('0x17'),_0x3fd587,_0x11be('0x19'));_0xcb8120(_0x4ce3ae[_0x11be('0x1a')][_0x11be('0x18')]);}})['catch'](function(_0x12a5bd){logger[_0x11be('0x16')](_0x11be('0x17'),_0x3fd587,_0x12a5bd);_0x26736d(_0x12a5bd);});});}function respondWithStatusCode(_0x452315,_0x7c554a){_0x7c554a=_0x7c554a||0xcc;return function(_0x3426ed){if(_0x3426ed){return _0x452315[_0x11be('0x1b')](_0x7c554a);}return _0x452315[_0x11be('0x1c')](_0x7c554a)[_0x11be('0x1d')]();};}function respondWithResult(_0x2782ae,_0x5b62f6){_0x5b62f6=_0x5b62f6||0xc8;return function(_0xfe3737){if(_0xfe3737){return _0x2782ae[_0x11be('0x1c')](_0x5b62f6)[_0x11be('0x1e')](_0xfe3737);}};}function respondWithFilteredResult(_0x5d1690,_0x4b329b){return function(_0x118915){if(_0x118915){var _0x10ce04=_0x118915['count'],_0x44f65f=_0x4b329b[_0x11be('0x1f')],_0x4cb27f=_0x4b329b['offset']+_0x4b329b[_0x11be('0x20')],_0x106167;if(_0x4cb27f>=_0x10ce04){_0x4cb27f=_0x10ce04;_0x106167=0xc8;}else{_0x106167=0xce;}_0x5d1690[_0x11be('0x1c')](_0x106167);return _0x5d1690['set'](_0x11be('0x21'),_0x44f65f+'-'+_0x4cb27f+'/'+_0x10ce04)[_0x11be('0x1e')](_0x118915);}return null;};}function patchUpdates(_0x1d3b5c){return function(_0x1f83f6){try{jsonpatch[_0x11be('0x22')](_0x1f83f6,_0x1d3b5c,!![]);}catch(_0x17c67f){return BPromise[_0x11be('0x23')](_0x17c67f);}return _0x1f83f6[_0x11be('0x24')]();};}function saveUpdates(_0x43ab30,_0x5966c5){return function(_0x32c796){if(_0x32c796){return _0x32c796['update'](_0x43ab30)[_0x11be('0x14')](function(_0x147b62){return _0x147b62;});}return null;};}function removeEntity(_0x510476,_0x584d4c){return function(_0x49fd5c){if(_0x49fd5c){return _0x49fd5c[_0x11be('0x25')]()[_0x11be('0x14')](function(){_0x510476[_0x11be('0x1c')](0xcc)[_0x11be('0x1d')]();});}};}function handleEntityNotFound(_0x300e0a,_0xc97ade){return function(_0x25e214){if(!_0x25e214){_0x300e0a[_0x11be('0x1b')](0x194);}return _0x25e214;};}function handleError(_0x4b527e,_0x71236f){_0x71236f=_0x71236f||0x1f4;return function(_0x3c1aa2){logger[_0x11be('0x16')](_0x3c1aa2[_0x11be('0x26')]);if(_0x3c1aa2[_0x11be('0x27')]){delete _0x3c1aa2[_0x11be('0x27')];}_0x4b527e['status'](_0x71236f)[_0x11be('0x28')](_0x3c1aa2);};}exports[_0x11be('0x29')]=function(_0x462785,_0x1e5b7f){var _0x228bd3={},_0x53cd67={},_0x368c8d={'count':0x0,'rows':[]};var _0x254be5=db[_0x11be('0x2a')]['rawAttributes'];_0x53cd67[_0x11be('0x2b')]=_['keys'](_0x254be5);var _0x4c7b47={'dateStart':_0x462785['query']['dateStart'],'dateEnd':_0x462785[_0x11be('0x2c')][_0x11be('0x2d')]};delete _0x462785[_0x11be('0x2c')]['dateStart'];delete _0x462785[_0x11be('0x2c')][_0x11be('0x2d')];_0x53cd67['query']=_[_0x11be('0x2e')](_0x462785['query']);_0x53cd67[_0x11be('0x2f')]=_['intersection'](_0x53cd67[_0x11be('0x2b')],_0x53cd67[_0x11be('0x2c')]);_0x228bd3[_0x11be('0x30')]=_[_0x11be('0x31')](_0x53cd67['model'],qs[_0x11be('0x32')](_0x462785[_0x11be('0x2c')][_0x11be('0x32')]));_0x228bd3[_0x11be('0x30')]=_0x228bd3['attributes'][_0x11be('0x33')]?_0x228bd3[_0x11be('0x30')]:_0x53cd67[_0x11be('0x2b')];if(!_0x462785[_0x11be('0x2c')][_0x11be('0x34')](_0x11be('0x35'))){_0x228bd3[_0x11be('0x20')]=qs['limit'](_0x462785[_0x11be('0x2c')][_0x11be('0x20')]);_0x228bd3['offset']=qs[_0x11be('0x1f')](_0x462785[_0x11be('0x2c')]['offset']);}_0x228bd3[_0x11be('0x36')]=qs['sort'](_0x462785[_0x11be('0x2c')]['sort']);_0x228bd3[_0x11be('0x37')]=qs[_0x11be('0x2f')](_['pick'](_0x462785[_0x11be('0x2c')],_0x53cd67['filters']));if(_0x4c7b47[_0x11be('0x38')]){if(_0x4c7b47[_0x11be('0x2d')]){_0x4c7b47[_0x11be('0x2d')]=moment(_0x4c7b47[_0x11be('0x2d')])[_0x11be('0x39')](0x1,_0x11be('0x3a'));}else{_0x4c7b47[_0x11be('0x2d')]=moment(_0x4c7b47['dateStart'])[_0x11be('0x39')](0x1,_0x11be('0x3a'));}_[_0x11be('0x3b')](_0x228bd3[_0x11be('0x37')],{'createdAt':{'$gte':_0x4c7b47['dateStart'],'$lte':_0x4c7b47['dateEnd']}});}if(_0x462785['query'][_0x11be('0x3c')]){_0x228bd3['where']=_[_0x11be('0x3b')](_0x228bd3['where'],{'$or':_[_0x11be('0x3d')](_0x228bd3[_0x11be('0x30')],function(_0x283c89){var _0x44b2ac={};_0x44b2ac[_0x283c89]={'$like':'%'+_0x462785[_0x11be('0x2c')][_0x11be('0x3c')]+'%'};return _0x44b2ac;})});}_0x228bd3=_[_0x11be('0x3b')]({},_0x228bd3,_0x462785['options']);var _0x360bb9={'where':_0x228bd3['where']};return db[_0x11be('0x2a')][_0x11be('0x3e')](_0x360bb9)[_0x11be('0x14')](function(_0x514c5e){_0x368c8d['count']=_0x514c5e;if(_0x462785['query'][_0x11be('0x3f')]){_0x228bd3[_0x11be('0x40')]=[{'all':!![]}];}return db['VtigerConfiguration']['findAll'](_0x228bd3);})['then'](function(_0x44e2e8){_0x368c8d[_0x11be('0x41')]=_0x44e2e8;return _0x368c8d;})[_0x11be('0x14')](respondWithFilteredResult(_0x1e5b7f,_0x228bd3))[_0x11be('0x42')](handleError(_0x1e5b7f,null));};exports[_0x11be('0x43')]=function(_0x3c11ad,_0x34b993){var _0x3f2070={'raw':![],'where':{'id':_0x3c11ad[_0x11be('0x44')]['id']}},_0x2ce110={};_0x2ce110[_0x11be('0x2b')]=_['keys'](db[_0x11be('0x2a')][_0x11be('0x45')]);_0x2ce110['query']=_['keys'](_0x3c11ad['query']);_0x2ce110[_0x11be('0x2f')]=_['intersection'](_0x2ce110[_0x11be('0x2b')],_0x2ce110[_0x11be('0x2c')]);_0x3f2070[_0x11be('0x30')]=_[_0x11be('0x31')](_0x2ce110[_0x11be('0x2b')],qs[_0x11be('0x32')](_0x3c11ad[_0x11be('0x2c')][_0x11be('0x32')]));_0x3f2070[_0x11be('0x30')]=_0x3f2070['attributes'][_0x11be('0x33')]?_0x3f2070['attributes']:_0x2ce110[_0x11be('0x2b')];if(_0x3c11ad[_0x11be('0x2c')]['includeAll']){_0x3f2070[_0x11be('0x40')]=[{'all':!![]}];}_0x3f2070=_[_0x11be('0x3b')]({},_0x3f2070,_0x3c11ad[_0x11be('0x46')]);return db[_0x11be('0x2a')][_0x11be('0x47')](_0x3f2070)['then'](handleEntityNotFound(_0x34b993,null))['then'](respondWithResult(_0x34b993,null))[_0x11be('0x42')](handleError(_0x34b993,null));};exports[_0x11be('0x48')]=function(_0x50eeab,_0x587ff7){return db[_0x11be('0x2a')][_0x11be('0x48')](_0x50eeab[_0x11be('0x49')],{})['then'](respondWithResult(_0x587ff7,0xc9))['catch'](handleError(_0x587ff7,null));};exports['update']=function(_0x19233f,_0x6f2b62){if(_0x19233f[_0x11be('0x49')]['id']){delete _0x19233f['body']['id'];}return db['VtigerConfiguration'][_0x11be('0x47')]({'where':{'id':_0x19233f[_0x11be('0x44')]['id']}})[_0x11be('0x14')](handleEntityNotFound(_0x6f2b62,null))[_0x11be('0x14')](saveUpdates(_0x19233f['body'],null))[_0x11be('0x14')](respondWithResult(_0x6f2b62,null))['catch'](handleError(_0x6f2b62,null));};exports['destroy']=function(_0x568f20,_0x5aa6bf){return db[_0x11be('0x2a')][_0x11be('0x47')]({'where':{'id':_0x568f20[_0x11be('0x44')]['id']}})[_0x11be('0x14')](handleEntityNotFound(_0x5aa6bf,null))[_0x11be('0x14')](removeEntity(_0x5aa6bf,null))[_0x11be('0x42')](handleError(_0x5aa6bf,null));};exports[_0x11be('0x4a')]=function(_0x55e79d,_0x54e52a,_0x7c1ee5){var _0x1e1f4e={};var _0x11b969={};var _0x2b0289;var _0x5c7ed0;return db[_0x11be('0x2a')][_0x11be('0x4b')]({'where':{'id':_0x55e79d[_0x11be('0x44')]['id']}})[_0x11be('0x14')](handleEntityNotFound(_0x54e52a,null))['then'](function(_0x1aa57d){if(_0x1aa57d){_0x2b0289=_0x1aa57d;_0x11b969[_0x11be('0x2b')]=_[_0x11be('0x2e')](db['VtigerField'][_0x11be('0x45')]);_0x11b969[_0x11be('0x2c')]=_['keys'](_0x55e79d['query']);_0x11b969[_0x11be('0x2f')]=_[_0x11be('0x31')](_0x11b969[_0x11be('0x2b')],_0x11b969[_0x11be('0x2c')]);_0x1e1f4e['attributes']=_[_0x11be('0x31')](_0x11b969[_0x11be('0x2b')],qs[_0x11be('0x32')](_0x55e79d[_0x11be('0x2c')][_0x11be('0x32')]));_0x1e1f4e[_0x11be('0x30')]=_0x1e1f4e[_0x11be('0x30')][_0x11be('0x33')]?_0x1e1f4e[_0x11be('0x30')]:_0x11b969['model'];_0x1e1f4e['order']=qs[_0x11be('0x4c')](_0x55e79d[_0x11be('0x2c')]['sort']);_0x1e1f4e[_0x11be('0x37')]=qs[_0x11be('0x2f')](_[_0x11be('0x4d')](_0x55e79d[_0x11be('0x2c')],_0x11b969[_0x11be('0x2f')]));if(_0x55e79d[_0x11be('0x2c')][_0x11be('0x3c')]){_0x1e1f4e['where']=_['merge'](_0x1e1f4e[_0x11be('0x37')],{'$or':_[_0x11be('0x3d')](_0x1e1f4e[_0x11be('0x30')],function(_0x5395c2){var _0x82c02c={};_0x82c02c[_0x5395c2]={'$like':'%'+_0x55e79d[_0x11be('0x2c')][_0x11be('0x3c')]+'%'};return _0x82c02c;})});}_0x1e1f4e=_[_0x11be('0x3b')]({},_0x1e1f4e,_0x55e79d[_0x11be('0x46')]);return _0x2b0289[_0x11be('0x4a')](_0x1e1f4e);}})[_0x11be('0x14')](function(_0xcefe71){if(_0xcefe71){_0x5c7ed0=_0xcefe71[_0x11be('0x33')];if(!_0x55e79d[_0x11be('0x2c')][_0x11be('0x34')](_0x11be('0x35'))){_0x1e1f4e[_0x11be('0x20')]=qs[_0x11be('0x20')](_0x55e79d[_0x11be('0x2c')][_0x11be('0x20')]);_0x1e1f4e['offset']=qs['offset'](_0x55e79d[_0x11be('0x2c')]['offset']);}return _0x2b0289[_0x11be('0x4a')](_0x1e1f4e);}})[_0x11be('0x14')](function(_0x422e33){if(_0x422e33){return _0x422e33?{'count':_0x5c7ed0,'rows':_0x422e33}:null;}})[_0x11be('0x14')](respondWithResult(_0x54e52a,null))[_0x11be('0x42')](handleError(_0x54e52a,null));};exports[_0x11be('0x4e')]=function(_0x1943f2,_0x3cb405,_0x18f009){var _0x48de70={};var _0x4ff00f={};var _0x3b34f0;var _0x1dd36b;return db['VtigerConfiguration'][_0x11be('0x4b')]({'where':{'id':_0x1943f2[_0x11be('0x44')]['id']}})['then'](handleEntityNotFound(_0x3cb405,null))['then'](function(_0x5a5606){if(_0x5a5606){_0x3b34f0=_0x5a5606;_0x4ff00f['model']=_[_0x11be('0x2e')](db[_0x11be('0x4f')][_0x11be('0x45')]);_0x4ff00f[_0x11be('0x2c')]=_[_0x11be('0x2e')](_0x1943f2['query']);_0x4ff00f[_0x11be('0x2f')]=_[_0x11be('0x31')](_0x4ff00f[_0x11be('0x2b')],_0x4ff00f[_0x11be('0x2c')]);_0x48de70[_0x11be('0x30')]=_['intersection'](_0x4ff00f[_0x11be('0x2b')],qs[_0x11be('0x32')](_0x1943f2[_0x11be('0x2c')][_0x11be('0x32')]));_0x48de70['attributes']=_0x48de70[_0x11be('0x30')][_0x11be('0x33')]?_0x48de70[_0x11be('0x30')]:_0x4ff00f[_0x11be('0x2b')];_0x48de70[_0x11be('0x36')]=qs[_0x11be('0x4c')](_0x1943f2['query'][_0x11be('0x4c')]);_0x48de70[_0x11be('0x37')]=qs[_0x11be('0x2f')](_[_0x11be('0x4d')](_0x1943f2['query'],_0x4ff00f[_0x11be('0x2f')]));if(_0x1943f2['query'][_0x11be('0x3c')]){_0x48de70[_0x11be('0x37')]=_[_0x11be('0x3b')](_0x48de70[_0x11be('0x37')],{'$or':_['map'](_0x48de70[_0x11be('0x30')],function(_0x22ffa3){var _0x4e77ca={};_0x4e77ca[_0x22ffa3]={'$like':'%'+_0x1943f2[_0x11be('0x2c')][_0x11be('0x3c')]+'%'};return _0x4e77ca;})});}_0x48de70=_[_0x11be('0x3b')]({},_0x48de70,_0x1943f2[_0x11be('0x46')]);return _0x3b34f0['getSubjects'](_0x48de70);}})[_0x11be('0x14')](function(_0x2ab4ce){if(_0x2ab4ce){_0x1dd36b=_0x2ab4ce[_0x11be('0x33')];if(!_0x1943f2[_0x11be('0x2c')][_0x11be('0x34')](_0x11be('0x35'))){_0x48de70[_0x11be('0x20')]=qs[_0x11be('0x20')](_0x1943f2['query'][_0x11be('0x20')]);_0x48de70['offset']=qs['offset'](_0x1943f2[_0x11be('0x2c')][_0x11be('0x1f')]);}return _0x3b34f0[_0x11be('0x4e')](_0x48de70);}})[_0x11be('0x14')](function(_0x32d0c2){if(_0x32d0c2){return _0x32d0c2?{'count':_0x1dd36b,'rows':_0x32d0c2}:null;}})[_0x11be('0x14')](respondWithResult(_0x3cb405,null))[_0x11be('0x42')](handleError(_0x3cb405,null));};exports['getDescriptions']=function(_0x4bc023,_0xf13875,_0x4d50da){var _0x4e8f55={};var _0x2dcd29={};var _0x55762b;var _0x352419;return db[_0x11be('0x2a')]['findOne']({'where':{'id':_0x4bc023[_0x11be('0x44')]['id']}})[_0x11be('0x14')](handleEntityNotFound(_0xf13875,null))['then'](function(_0x33acce){if(_0x33acce){_0x55762b=_0x33acce;_0x2dcd29[_0x11be('0x2b')]=_['keys'](db[_0x11be('0x4f')][_0x11be('0x45')]);_0x2dcd29[_0x11be('0x2c')]=_[_0x11be('0x2e')](_0x4bc023[_0x11be('0x2c')]);_0x2dcd29[_0x11be('0x2f')]=_[_0x11be('0x31')](_0x2dcd29['model'],_0x2dcd29[_0x11be('0x2c')]);_0x4e8f55[_0x11be('0x30')]=_[_0x11be('0x31')](_0x2dcd29['model'],qs[_0x11be('0x32')](_0x4bc023[_0x11be('0x2c')]['fields']));_0x4e8f55[_0x11be('0x30')]=_0x4e8f55[_0x11be('0x30')][_0x11be('0x33')]?_0x4e8f55['attributes']:_0x2dcd29['model'];_0x4e8f55['order']=qs[_0x11be('0x4c')](_0x4bc023[_0x11be('0x2c')][_0x11be('0x4c')]);_0x4e8f55[_0x11be('0x37')]=qs[_0x11be('0x2f')](_['pick'](_0x4bc023[_0x11be('0x2c')],_0x2dcd29[_0x11be('0x2f')]));if(_0x4bc023[_0x11be('0x2c')][_0x11be('0x3c')]){_0x4e8f55[_0x11be('0x37')]=_[_0x11be('0x3b')](_0x4e8f55['where'],{'$or':_['map'](_0x4e8f55[_0x11be('0x30')],function(_0x5dd85d){var _0x1964bd={};_0x1964bd[_0x5dd85d]={'$like':'%'+_0x4bc023[_0x11be('0x2c')]['filter']+'%'};return _0x1964bd;})});}_0x4e8f55=_[_0x11be('0x3b')]({},_0x4e8f55,_0x4bc023[_0x11be('0x46')]);return _0x55762b[_0x11be('0x50')](_0x4e8f55);}})[_0x11be('0x14')](function(_0x445abf){if(_0x445abf){_0x352419=_0x445abf[_0x11be('0x33')];if(!_0x4bc023['query'][_0x11be('0x34')]('nolimit')){_0x4e8f55[_0x11be('0x20')]=qs['limit'](_0x4bc023[_0x11be('0x2c')][_0x11be('0x20')]);_0x4e8f55[_0x11be('0x1f')]=qs[_0x11be('0x1f')](_0x4bc023[_0x11be('0x2c')][_0x11be('0x1f')]);}return _0x55762b[_0x11be('0x50')](_0x4e8f55);}})[_0x11be('0x14')](function(_0x56679b){if(_0x56679b){return _0x56679b?{'count':_0x352419,'rows':_0x56679b}:null;}})[_0x11be('0x14')](respondWithResult(_0xf13875,null))[_0x11be('0x42')](handleError(_0xf13875,null));};
\ No newline at end of file
index 0a0791f..b92477a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa129=['../../config/logger','api','request-promise','./intVtigerConfiguration.attributes','exports','VtigerConfiguration','int_vtiger_configurations','lodash','util'];(function(_0x5c938e,_0x2422f6){var _0x3b18dc=function(_0x2ed635){while(--_0x2ed635){_0x5c938e['push'](_0x5c938e['shift']());}};_0x3b18dc(++_0x2422f6);}(_0xa129,0x7c));var _0x9a12=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xa129[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x9a12('0x0'));var util=require(_0x9a12('0x1'));var logger=require(_0x9a12('0x2'))(_0x9a12('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x9a12('0x4'));var attributes=require(_0x9a12('0x5'));module[_0x9a12('0x6')]=function(_0x4a3ebb,_0x49b9cc){return _0x4a3ebb['define'](_0x9a12('0x7'),attributes,{'tableName':_0x9a12('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5a98=['./intVtigerConfiguration.attributes','exports','define','VtigerConfiguration','int_vtiger_configurations','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x20f0fc,_0x371623){var _0x32caa0=function(_0x80893a){while(--_0x80893a){_0x20f0fc['push'](_0x20f0fc['shift']());}};_0x32caa0(++_0x371623);}(_0x5a98,0x69));var _0x85a9=function(_0x5093e5,_0x476e46){_0x5093e5=_0x5093e5-0x0;var _0x1211e7=_0x5a98[_0x5093e5];return _0x1211e7;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x85a9('0x0'))(_0x85a9('0x1'));var moment=require(_0x85a9('0x2'));var BPromise=require(_0x85a9('0x3'));var rp=require(_0x85a9('0x4'));var attributes=require(_0x85a9('0x5'));module[_0x85a9('0x6')]=function(_0x3b2b3b,_0xc785b6){return _0x3b2b3b[_0x85a9('0x7')](_0x85a9('0x8'),attributes,{'tableName':_0x85a9('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 58fcb97..0e01071 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x51fb=['code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','debug','VtigerConfiguration,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x1e062d,_0x1c6ea4){var _0x53b201=function(_0x45996b){while(--_0x45996b){_0x1e062d['push'](_0x1e062d['shift']());}};_0x53b201(++_0x1c6ea4);}(_0x51fb,0x194));var _0xb51f=function(_0x2a309a,_0x35201a){_0x2a309a=_0x2a309a-0x0;var _0x237674=_0x51fb[_0x2a309a];return _0x237674;};'use strict';var _=require(_0xb51f('0x0'));var util=require(_0xb51f('0x1'));var moment=require(_0xb51f('0x2'));var BPromise=require(_0xb51f('0x3'));var rs=require(_0xb51f('0x4'));var fs=require('fs');var db=require(_0xb51f('0x5'))['db'];var utils=require(_0xb51f('0x6'));var logger=require(_0xb51f('0x7'))(_0xb51f('0x8'));var config=require(_0xb51f('0x9'));var jayson=require(_0xb51f('0xa'));var client=jayson[_0xb51f('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3887c1,_0x587423,_0x522252){return new BPromise(function(_0xbbcd84,_0x398dba){return client[_0xb51f('0xc')](_0x3887c1,_0x522252)[_0xb51f('0xd')](function(_0x1398c6){logger[_0xb51f('0xe')](_0xb51f('0xf'),_0x587423,_0xb51f('0x10'));logger[_0xb51f('0x11')](_0xb51f('0x12'),_0x587423,'request\x20sent',JSON[_0xb51f('0x13')](_0x1398c6));if(_0x1398c6['error']){if(_0x1398c6[_0xb51f('0x14')][_0xb51f('0x15')]===0x1f4){logger['error'](_0xb51f('0xf'),_0x587423,_0x1398c6['error'][_0xb51f('0x16')]);return _0x398dba(_0x1398c6[_0xb51f('0x14')][_0xb51f('0x16')]);}logger[_0xb51f('0x14')]('VtigerConfiguration,\x20%s,\x20%s',_0x587423,_0x1398c6[_0xb51f('0x14')][_0xb51f('0x16')]);return _0xbbcd84(_0x1398c6[_0xb51f('0x14')][_0xb51f('0x16')]);}else{logger[_0xb51f('0xe')]('VtigerConfiguration,\x20%s,\x20%s',_0x587423,_0xb51f('0x10'));_0xbbcd84(_0x1398c6[_0xb51f('0x17')]['message']);}})[_0xb51f('0x18')](function(_0x7498c6){logger[_0xb51f('0x14')](_0xb51f('0xf'),_0x587423,_0x7498c6);_0x398dba(_0x7498c6);});});}
\ No newline at end of file
+var _0x8932=['catch','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','debug','VtigerConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result'];(function(_0x382e89,_0x4768c0){var _0x3a1318=function(_0x79e1ce){while(--_0x79e1ce){_0x382e89['push'](_0x382e89['shift']());}};_0x3a1318(++_0x4768c0);}(_0x8932,0x13c));var _0x2893=function(_0x5e4ba9,_0x20155f){_0x5e4ba9=_0x5e4ba9-0x0;var _0x45f4be=_0x8932[_0x5e4ba9];return _0x45f4be;};'use strict';var _=require(_0x2893('0x0'));var util=require(_0x2893('0x1'));var moment=require(_0x2893('0x2'));var BPromise=require(_0x2893('0x3'));var rs=require(_0x2893('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x2893('0x5'));var logger=require(_0x2893('0x6'))('rpc');var config=require(_0x2893('0x7'));var jayson=require(_0x2893('0x8'));var client=jayson[_0x2893('0x9')][_0x2893('0xa')]({'port':0x232a});function respondWithRpcPromise(_0xb70fce,_0x5bbb50,_0x34eb9b){return new BPromise(function(_0x6162e2,_0x2496c7){return client['request'](_0xb70fce,_0x34eb9b)['then'](function(_0x21e332){logger['info'](_0x2893('0xb'),_0x5bbb50,_0x2893('0xc'));logger[_0x2893('0xd')](_0x2893('0xe'),_0x5bbb50,_0x2893('0xc'),JSON[_0x2893('0xf')](_0x21e332));if(_0x21e332[_0x2893('0x10')]){if(_0x21e332[_0x2893('0x10')][_0x2893('0x11')]===0x1f4){logger[_0x2893('0x10')]('VtigerConfiguration,\x20%s,\x20%s',_0x5bbb50,_0x21e332[_0x2893('0x10')][_0x2893('0x12')]);return _0x2496c7(_0x21e332[_0x2893('0x10')][_0x2893('0x12')]);}logger['error'](_0x2893('0xb'),_0x5bbb50,_0x21e332[_0x2893('0x10')][_0x2893('0x12')]);return _0x6162e2(_0x21e332[_0x2893('0x10')][_0x2893('0x12')]);}else{logger['info']('VtigerConfiguration,\x20%s,\x20%s',_0x5bbb50,_0x2893('0xc'));_0x6162e2(_0x21e332[_0x2893('0x13')][_0x2893('0x12')]);}})[_0x2893('0x14')](function(_0x50e3cb){logger[_0x2893('0x10')]('VtigerConfiguration,\x20%s,\x20%s',_0x5bbb50,_0x50e3cb);_0x2496c7(_0x50e3cb);});});}
\ No newline at end of file
index bfa44d4..d0b95fd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0fc5=['/:id','show','post','put','update','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intVtigerField.controller','get','isAuthenticated','index'];(function(_0x51a94f,_0x1e4be4){var _0x5c564b=function(_0x371594){while(--_0x371594){_0x51a94f['push'](_0x51a94f['shift']());}};_0x5c564b(++_0x1e4be4);}(_0x0fc5,0x6c));var _0x50fc=function(_0x36d89e,_0x53e493){_0x36d89e=_0x36d89e-0x0;var _0x430a95=_0x0fc5[_0x36d89e];return _0x430a95;};'use strict';var multer=require(_0x50fc('0x0'));var util=require(_0x50fc('0x1'));var path=require(_0x50fc('0x2'));var express=require(_0x50fc('0x3'));var router=express[_0x50fc('0x4')]();var auth=require(_0x50fc('0x5'));var interaction=require(_0x50fc('0x6'));var config=require(_0x50fc('0x7'));var controller=require(_0x50fc('0x8'));router[_0x50fc('0x9')]('/',auth[_0x50fc('0xa')](),controller[_0x50fc('0xb')]);router['get'](_0x50fc('0xc'),auth[_0x50fc('0xa')](),controller[_0x50fc('0xd')]);router[_0x50fc('0xe')]('/',auth[_0x50fc('0xa')](),controller['create']);router[_0x50fc('0xf')](_0x50fc('0xc'),auth['isAuthenticated'](),controller[_0x50fc('0x10')]);router[_0x50fc('0x11')]('/:id',auth[_0x50fc('0xa')](),controller[_0x50fc('0x12')]);module[_0x50fc('0x13')]=router;
\ No newline at end of file
+var _0x1be0=['isAuthenticated','put','/:id','update','destroy','exports','util','path','express','Router','../../components/interaction/service','../../config/environment','./intVtigerField.controller','get','index','show','post'];(function(_0x5b40e8,_0x2b4304){var _0x2aac9a=function(_0x47cd3c){while(--_0x47cd3c){_0x5b40e8['push'](_0x5b40e8['shift']());}};_0x2aac9a(++_0x2b4304);}(_0x1be0,0x16b));var _0x01be=function(_0x2edc3c,_0x4efba7){_0x2edc3c=_0x2edc3c-0x0;var _0x4d6495=_0x1be0[_0x2edc3c];return _0x4d6495;};'use strict';var multer=require('multer');var util=require(_0x01be('0x0'));var path=require(_0x01be('0x1'));var express=require(_0x01be('0x2'));var router=express[_0x01be('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x01be('0x4'));var config=require(_0x01be('0x5'));var controller=require(_0x01be('0x6'));router[_0x01be('0x7')]('/',auth['isAuthenticated'](),controller[_0x01be('0x8')]);router[_0x01be('0x7')]('/:id',auth['isAuthenticated'](),controller[_0x01be('0x9')]);router[_0x01be('0xa')]('/',auth[_0x01be('0xb')](),controller['create']);router[_0x01be('0xc')](_0x01be('0xd'),auth[_0x01be('0xb')](),controller[_0x01be('0xe')]);router['delete']('/:id',auth['isAuthenticated'](),controller[_0x01be('0xf')]);module[_0x01be('0x10')]=router;
\ No newline at end of file
index 96eb3a2..c9b0089 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['keyValue','string','STRING','variable','BOOLEAN','sequelize','exports','customVariable'];(function(_0x10f775,_0xaa8763){var _0x444d1f=function(_0x23a6a5){while(--_0x23a6a5){_0x10f775['push'](_0x10f775['shift']());}};_0x444d1f(++_0xaa8763);}(_0xd8b0,0xad));var _0x0d8b=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xd8b0[_0x20a584];return _0x4b41a8;};'use strict';var Sequelize=require(_0x0d8b('0x0'));module[_0x0d8b('0x1')]={'type':{'type':Sequelize['ENUM']('string','variable',_0x0d8b('0x2'),_0x0d8b('0x3')),'defaultValue':_0x0d8b('0x4')},'content':{'type':Sequelize[_0x0d8b('0x5')]},'key':{'type':Sequelize[_0x0d8b('0x5')]},'keyType':{'type':Sequelize['ENUM']('string',_0x0d8b('0x6'),_0x0d8b('0x2'))},'keyContent':{'type':Sequelize[_0x0d8b('0x5')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize[_0x0d8b('0x5')]},'customField':{'type':Sequelize[_0x0d8b('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xcb91=['string','variable','customVariable','STRING','BOOLEAN','ENUM'];(function(_0x4f7b4b,_0x426a3e){var _0x3f7b3b=function(_0x579423){while(--_0x579423){_0x4f7b4b['push'](_0x4f7b4b['shift']());}};_0x3f7b3b(++_0x426a3e);}(_0xcb91,0x1a9));var _0x1cb9=function(_0x164af1,_0x3cf772){_0x164af1=_0x164af1-0x0;var _0x5d81a2=_0xcb91[_0x164af1];return _0x5d81a2;};'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 ecfada1..2bf8a69 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6bb8=['to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','sendStatus','error','stack','name','index','VtigerField','rawAttributes','model','keys','query','dateStart','filters','intersection','fields','attributes','hasOwnProperty','dateEnd','add','day','merge','where','map','filter','options','includeAll','include','findAll','rows','catch','params','length','find','create','body','moment','mustache','path'];(function(_0x24ddb9,_0x1ded49){var _0x56b93b=function(_0x18f174){while(--_0x18f174){_0x24ddb9['push'](_0x24ddb9['shift']());}};_0x56b93b(++_0x1ded49);}(_0x6bb8,0xf1));var _0x86bb=function(_0x51ec61,_0xf9d1e3){_0x51ec61=_0x51ec61-0x0;var _0x223200=_0x6bb8[_0x51ec61];return _0x223200;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x86bb('0x0'));var BPromise=require('bluebird');var Mustache=require(_0x86bb('0x1'));var util=require('util');var path=require(_0x86bb('0x2'));var sox=require('sox');var csv=require(_0x86bb('0x3'));var ejs=require(_0x86bb('0x4'));var fs=require('fs');var _=require(_0x86bb('0x5'));var squel=require('squel');var crypto=require(_0x86bb('0x6'));var jsforce=require(_0x86bb('0x7'));var deskjs=require(_0x86bb('0x8'));var toCsv=require(_0x86bb('0x3'));var querystring=require(_0x86bb('0x9'));var Papa=require('papaparse');var qs=require(_0x86bb('0xa'));var logger=require(_0x86bb('0xb'))(_0x86bb('0xc'));var utils=require(_0x86bb('0xd'));var config=require(_0x86bb('0xe'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1730ad,_0x186376){_0x186376=_0x186376||0xcc;return function(_0x3914eb){if(_0x3914eb){return _0x1730ad['sendStatus'](_0x186376);}return _0x1730ad[_0x86bb('0xf')](_0x186376)[_0x86bb('0x10')]();};}function respondWithResult(_0x2a063e,_0x3563d2){_0x3563d2=_0x3563d2||0xc8;return function(_0x3e4b32){if(_0x3e4b32){return _0x2a063e[_0x86bb('0xf')](_0x3563d2)[_0x86bb('0x11')](_0x3e4b32);}};}function respondWithFilteredResult(_0x44df1e,_0x1e65d9){return function(_0x1a415b){if(_0x1a415b){var _0x384e75=_0x1a415b[_0x86bb('0x12')],_0x48d265=_0x1e65d9['offset'],_0x5d5f49=_0x1e65d9[_0x86bb('0x13')]+_0x1e65d9[_0x86bb('0x14')],_0x36a22;if(_0x5d5f49>=_0x384e75){_0x5d5f49=_0x384e75;_0x36a22=0xc8;}else{_0x36a22=0xce;}_0x44df1e[_0x86bb('0xf')](_0x36a22);return _0x44df1e[_0x86bb('0x15')](_0x86bb('0x16'),_0x48d265+'-'+_0x5d5f49+'/'+_0x384e75)[_0x86bb('0x11')](_0x1a415b);}return null;};}function patchUpdates(_0x14599a){return function(_0x265493){try{jsonpatch[_0x86bb('0x17')](_0x265493,_0x14599a,!![]);}catch(_0x5b5ce1){return BPromise[_0x86bb('0x18')](_0x5b5ce1);}return _0x265493['save']();};}function saveUpdates(_0x4fd507,_0x5143bc){return function(_0x9c78e5){if(_0x9c78e5){return _0x9c78e5[_0x86bb('0x19')](_0x4fd507)[_0x86bb('0x1a')](function(_0x2c5fad){return _0x2c5fad;});}return null;};}function removeEntity(_0x4560c1,_0x26f924){return function(_0x2e04e3){if(_0x2e04e3){return _0x2e04e3['destroy']()[_0x86bb('0x1a')](function(){_0x4560c1[_0x86bb('0xf')](0xcc)[_0x86bb('0x10')]();});}};}function handleEntityNotFound(_0x435fc5,_0x9e4fd7){return function(_0x3435e7){if(!_0x3435e7){_0x435fc5[_0x86bb('0x1b')](0x194);}return _0x3435e7;};}function handleError(_0x6708e9,_0x39d7c3){_0x39d7c3=_0x39d7c3||0x1f4;return function(_0x4b77cf){logger[_0x86bb('0x1c')](_0x4b77cf[_0x86bb('0x1d')]);if(_0x4b77cf[_0x86bb('0x1e')]){delete _0x4b77cf[_0x86bb('0x1e')];}_0x6708e9[_0x86bb('0xf')](_0x39d7c3)['send'](_0x4b77cf);};}exports[_0x86bb('0x1f')]=function(_0x330f28,_0x3f2c06){var _0x2f162e={},_0x232d0f={},_0x2ecbb3={'count':0x0,'rows':[]};var _0x81f7eb=db[_0x86bb('0x20')][_0x86bb('0x21')];_0x232d0f[_0x86bb('0x22')]=_[_0x86bb('0x23')](_0x81f7eb);var _0x1e4b95={'dateStart':_0x330f28[_0x86bb('0x24')]['dateStart'],'dateEnd':_0x330f28['query']['dateEnd']};delete _0x330f28[_0x86bb('0x24')][_0x86bb('0x25')];delete _0x330f28[_0x86bb('0x24')]['dateEnd'];_0x232d0f['query']=_[_0x86bb('0x23')](_0x330f28['query']);_0x232d0f[_0x86bb('0x26')]=_[_0x86bb('0x27')](_0x232d0f[_0x86bb('0x22')],_0x232d0f[_0x86bb('0x24')]);_0x2f162e['attributes']=_[_0x86bb('0x27')](_0x232d0f['model'],qs[_0x86bb('0x28')](_0x330f28[_0x86bb('0x24')][_0x86bb('0x28')]));_0x2f162e['attributes']=_0x2f162e[_0x86bb('0x29')]['length']?_0x2f162e[_0x86bb('0x29')]:_0x232d0f[_0x86bb('0x22')];if(!_0x330f28['query'][_0x86bb('0x2a')]('nolimit')){_0x2f162e[_0x86bb('0x14')]=qs[_0x86bb('0x14')](_0x330f28[_0x86bb('0x24')][_0x86bb('0x14')]);_0x2f162e[_0x86bb('0x13')]=qs[_0x86bb('0x13')](_0x330f28['query']['offset']);}_0x2f162e['order']=qs['sort'](_0x330f28['query']['sort']);_0x2f162e['where']=qs[_0x86bb('0x26')](_['pick'](_0x330f28[_0x86bb('0x24')],_0x232d0f[_0x86bb('0x26')]));if(_0x1e4b95['dateStart']){if(_0x1e4b95[_0x86bb('0x2b')]){_0x1e4b95[_0x86bb('0x2b')]=moment(_0x1e4b95['dateEnd'])[_0x86bb('0x2c')](0x1,_0x86bb('0x2d'));}else{_0x1e4b95[_0x86bb('0x2b')]=moment(_0x1e4b95[_0x86bb('0x25')])[_0x86bb('0x2c')](0x1,_0x86bb('0x2d'));}_[_0x86bb('0x2e')](_0x2f162e['where'],{'createdAt':{'$gte':_0x1e4b95[_0x86bb('0x25')],'$lte':_0x1e4b95[_0x86bb('0x2b')]}});}if(_0x330f28[_0x86bb('0x24')]['filter']){_0x2f162e['where']=_[_0x86bb('0x2e')](_0x2f162e[_0x86bb('0x2f')],{'$or':_[_0x86bb('0x30')](_0x2f162e[_0x86bb('0x29')],function(_0x110b04){var _0x5ab388={};_0x5ab388[_0x110b04]={'$like':'%'+_0x330f28[_0x86bb('0x24')][_0x86bb('0x31')]+'%'};return _0x5ab388;})});}_0x2f162e=_[_0x86bb('0x2e')]({},_0x2f162e,_0x330f28[_0x86bb('0x32')]);var _0x8b5685={'where':_0x2f162e[_0x86bb('0x2f')]};return db[_0x86bb('0x20')]['count'](_0x8b5685)[_0x86bb('0x1a')](function(_0x441d3e){_0x2ecbb3[_0x86bb('0x12')]=_0x441d3e;if(_0x330f28[_0x86bb('0x24')][_0x86bb('0x33')]){_0x2f162e[_0x86bb('0x34')]=[{'all':!![]}];}return db[_0x86bb('0x20')][_0x86bb('0x35')](_0x2f162e);})[_0x86bb('0x1a')](function(_0x1dd78b){_0x2ecbb3[_0x86bb('0x36')]=_0x1dd78b;return _0x2ecbb3;})[_0x86bb('0x1a')](respondWithFilteredResult(_0x3f2c06,_0x2f162e))[_0x86bb('0x37')](handleError(_0x3f2c06,null));};exports['show']=function(_0x4f02f3,_0x3a5287){var _0x22e0de={'raw':!![],'where':{'id':_0x4f02f3[_0x86bb('0x38')]['id']}},_0x15105a={};_0x15105a[_0x86bb('0x22')]=_[_0x86bb('0x23')](db['VtigerField'][_0x86bb('0x21')]);_0x15105a[_0x86bb('0x24')]=_[_0x86bb('0x23')](_0x4f02f3[_0x86bb('0x24')]);_0x15105a['filters']=_['intersection'](_0x15105a['model'],_0x15105a[_0x86bb('0x24')]);_0x22e0de[_0x86bb('0x29')]=_[_0x86bb('0x27')](_0x15105a[_0x86bb('0x22')],qs[_0x86bb('0x28')](_0x4f02f3[_0x86bb('0x24')][_0x86bb('0x28')]));_0x22e0de['attributes']=_0x22e0de['attributes'][_0x86bb('0x39')]?_0x22e0de[_0x86bb('0x29')]:_0x15105a['model'];if(_0x4f02f3[_0x86bb('0x24')][_0x86bb('0x33')]){_0x22e0de[_0x86bb('0x34')]=[{'all':!![]}];}_0x22e0de=_['merge']({},_0x22e0de,_0x4f02f3[_0x86bb('0x32')]);return db[_0x86bb('0x20')][_0x86bb('0x3a')](_0x22e0de)['then'](handleEntityNotFound(_0x3a5287,null))[_0x86bb('0x1a')](respondWithResult(_0x3a5287,null))[_0x86bb('0x37')](handleError(_0x3a5287,null));};exports[_0x86bb('0x3b')]=function(_0x10ae75,_0x25dff5){return db[_0x86bb('0x20')][_0x86bb('0x3b')](_0x10ae75[_0x86bb('0x3c')],{})['then'](respondWithResult(_0x25dff5,0xc9))[_0x86bb('0x37')](handleError(_0x25dff5,null));};exports[_0x86bb('0x19')]=function(_0x174ac9,_0x5be17c){if(_0x174ac9['body']['id']){delete _0x174ac9['body']['id'];}return db[_0x86bb('0x20')][_0x86bb('0x3a')]({'where':{'id':_0x174ac9['params']['id']}})[_0x86bb('0x1a')](handleEntityNotFound(_0x5be17c,null))[_0x86bb('0x1a')](saveUpdates(_0x174ac9[_0x86bb('0x3c')],null))['then'](respondWithResult(_0x5be17c,null))[_0x86bb('0x37')](handleError(_0x5be17c,null));};exports['destroy']=function(_0x4283a0,_0x38aaf2){return db[_0x86bb('0x20')]['find']({'where':{'id':_0x4283a0['params']['id']}})['then'](handleEntityNotFound(_0x38aaf2,null))[_0x86bb('0x1a')](removeEntity(_0x38aaf2,null))['catch'](handleError(_0x38aaf2,null));};
\ No newline at end of file
+var _0x412b=['end','json','count','offset','limit','set','Content-Range','apply','save','update','then','sendStatus','stack','name','status','send','index','VtigerField','keys','query','dateStart','dateEnd','intersection','model','attributes','fields','hasOwnProperty','order','sort','where','pick','filters','day','add','merge','filter','map','options','include','findAll','catch','show','rawAttributes','length','includeAll','find','create','body','params','fast-json-patch','request-promise','moment','mustache','path','sox','ejs','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb'];(function(_0x2f2299,_0x4a6220){var _0x113456=function(_0xba7847){while(--_0xba7847){_0x2f2299['push'](_0x2f2299['shift']());}};_0x113456(++_0x4a6220);}(_0x412b,0xb9));var _0xb412=function(_0x4d7d44,_0x810d4){_0x4d7d44=_0x4d7d44-0x0;var _0x238f05=_0x412b[_0x4d7d44];return _0x238f05;};'use strict';var jsonpatch=require(_0xb412('0x0'));var rp=require(_0xb412('0x1'));var moment=require(_0xb412('0x2'));var BPromise=require('bluebird');var Mustache=require(_0xb412('0x3'));var util=require('util');var path=require(_0xb412('0x4'));var sox=require(_0xb412('0x5'));var csv=require('to-csv');var ejs=require(_0xb412('0x6'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xb412('0x7'));var jsforce=require(_0xb412('0x8'));var deskjs=require(_0xb412('0x9'));var toCsv=require(_0xb412('0xa'));var querystring=require(_0xb412('0xb'));var Papa=require(_0xb412('0xc'));var qs=require(_0xb412('0xd'));var logger=require(_0xb412('0xe'))(_0xb412('0xf'));var utils=require(_0xb412('0x10'));var config=require(_0xb412('0x11'));var db=require(_0xb412('0x12'))['db'];function respondWithStatusCode(_0x9baa8b,_0x8fa43){_0x8fa43=_0x8fa43||0xcc;return function(_0x5be2ea){if(_0x5be2ea){return _0x9baa8b['sendStatus'](_0x8fa43);}return _0x9baa8b['status'](_0x8fa43)[_0xb412('0x13')]();};}function respondWithResult(_0x63a241,_0x882f05){_0x882f05=_0x882f05||0xc8;return function(_0xc35111){if(_0xc35111){return _0x63a241['status'](_0x882f05)[_0xb412('0x14')](_0xc35111);}};}function respondWithFilteredResult(_0x363361,_0x49de41){return function(_0x340969){if(_0x340969){var _0x8020d3=_0x340969[_0xb412('0x15')],_0x296c22=_0x49de41['offset'],_0x541fb7=_0x49de41[_0xb412('0x16')]+_0x49de41[_0xb412('0x17')],_0x561689;if(_0x541fb7>=_0x8020d3){_0x541fb7=_0x8020d3;_0x561689=0xc8;}else{_0x561689=0xce;}_0x363361['status'](_0x561689);return _0x363361[_0xb412('0x18')](_0xb412('0x19'),_0x296c22+'-'+_0x541fb7+'/'+_0x8020d3)[_0xb412('0x14')](_0x340969);}return null;};}function patchUpdates(_0x45290d){return function(_0x4afaa5){try{jsonpatch[_0xb412('0x1a')](_0x4afaa5,_0x45290d,!![]);}catch(_0x364ded){return BPromise['reject'](_0x364ded);}return _0x4afaa5[_0xb412('0x1b')]();};}function saveUpdates(_0x2e66d6,_0x2a6e3f){return function(_0x5c9afc){if(_0x5c9afc){return _0x5c9afc[_0xb412('0x1c')](_0x2e66d6)['then'](function(_0x4c68da){return _0x4c68da;});}return null;};}function removeEntity(_0x59a0ec,_0x5587e9){return function(_0x4b5483){if(_0x4b5483){return _0x4b5483['destroy']()[_0xb412('0x1d')](function(){_0x59a0ec['status'](0xcc)[_0xb412('0x13')]();});}};}function handleEntityNotFound(_0x34f0e8,_0x1d196c){return function(_0x2d8f83){if(!_0x2d8f83){_0x34f0e8[_0xb412('0x1e')](0x194);}return _0x2d8f83;};}function handleError(_0xd0aef4,_0x32768e){_0x32768e=_0x32768e||0x1f4;return function(_0x3d1bf8){logger['error'](_0x3d1bf8[_0xb412('0x1f')]);if(_0x3d1bf8[_0xb412('0x20')]){delete _0x3d1bf8['name'];}_0xd0aef4[_0xb412('0x21')](_0x32768e)[_0xb412('0x22')](_0x3d1bf8);};}exports[_0xb412('0x23')]=function(_0x2b27da,_0x262c6d){var _0x314b49={},_0x5f4163={},_0x5ddb3b={'count':0x0,'rows':[]};var _0x289a7f=db[_0xb412('0x24')]['rawAttributes'];_0x5f4163['model']=_[_0xb412('0x25')](_0x289a7f);var _0x94980c={'dateStart':_0x2b27da[_0xb412('0x26')][_0xb412('0x27')],'dateEnd':_0x2b27da['query'][_0xb412('0x28')]};delete _0x2b27da[_0xb412('0x26')][_0xb412('0x27')];delete _0x2b27da[_0xb412('0x26')]['dateEnd'];_0x5f4163['query']=_['keys'](_0x2b27da[_0xb412('0x26')]);_0x5f4163['filters']=_[_0xb412('0x29')](_0x5f4163[_0xb412('0x2a')],_0x5f4163[_0xb412('0x26')]);_0x314b49[_0xb412('0x2b')]=_[_0xb412('0x29')](_0x5f4163[_0xb412('0x2a')],qs[_0xb412('0x2c')](_0x2b27da['query'][_0xb412('0x2c')]));_0x314b49[_0xb412('0x2b')]=_0x314b49[_0xb412('0x2b')]['length']?_0x314b49[_0xb412('0x2b')]:_0x5f4163[_0xb412('0x2a')];if(!_0x2b27da['query'][_0xb412('0x2d')]('nolimit')){_0x314b49[_0xb412('0x17')]=qs[_0xb412('0x17')](_0x2b27da[_0xb412('0x26')][_0xb412('0x17')]);_0x314b49[_0xb412('0x16')]=qs[_0xb412('0x16')](_0x2b27da[_0xb412('0x26')]['offset']);}_0x314b49[_0xb412('0x2e')]=qs[_0xb412('0x2f')](_0x2b27da[_0xb412('0x26')][_0xb412('0x2f')]);_0x314b49[_0xb412('0x30')]=qs['filters'](_[_0xb412('0x31')](_0x2b27da['query'],_0x5f4163[_0xb412('0x32')]));if(_0x94980c[_0xb412('0x27')]){if(_0x94980c['dateEnd']){_0x94980c[_0xb412('0x28')]=moment(_0x94980c[_0xb412('0x28')])['add'](0x1,_0xb412('0x33'));}else{_0x94980c[_0xb412('0x28')]=moment(_0x94980c['dateStart'])[_0xb412('0x34')](0x1,_0xb412('0x33'));}_[_0xb412('0x35')](_0x314b49[_0xb412('0x30')],{'createdAt':{'$gte':_0x94980c[_0xb412('0x27')],'$lte':_0x94980c[_0xb412('0x28')]}});}if(_0x2b27da['query'][_0xb412('0x36')]){_0x314b49['where']=_[_0xb412('0x35')](_0x314b49['where'],{'$or':_[_0xb412('0x37')](_0x314b49[_0xb412('0x2b')],function(_0x350317){var _0x386148={};_0x386148[_0x350317]={'$like':'%'+_0x2b27da[_0xb412('0x26')][_0xb412('0x36')]+'%'};return _0x386148;})});}_0x314b49=_[_0xb412('0x35')]({},_0x314b49,_0x2b27da[_0xb412('0x38')]);var _0x168fca={'where':_0x314b49[_0xb412('0x30')]};return db['VtigerField'][_0xb412('0x15')](_0x168fca)[_0xb412('0x1d')](function(_0x352d7c){_0x5ddb3b[_0xb412('0x15')]=_0x352d7c;if(_0x2b27da[_0xb412('0x26')]['includeAll']){_0x314b49[_0xb412('0x39')]=[{'all':!![]}];}return db[_0xb412('0x24')][_0xb412('0x3a')](_0x314b49);})['then'](function(_0x53613b){_0x5ddb3b['rows']=_0x53613b;return _0x5ddb3b;})[_0xb412('0x1d')](respondWithFilteredResult(_0x262c6d,_0x314b49))[_0xb412('0x3b')](handleError(_0x262c6d,null));};exports[_0xb412('0x3c')]=function(_0x13079d,_0x11a4ef){var _0x31d55e={'raw':!![],'where':{'id':_0x13079d['params']['id']}},_0x4d5265={};_0x4d5265[_0xb412('0x2a')]=_[_0xb412('0x25')](db['VtigerField'][_0xb412('0x3d')]);_0x4d5265['query']=_[_0xb412('0x25')](_0x13079d[_0xb412('0x26')]);_0x4d5265[_0xb412('0x32')]=_[_0xb412('0x29')](_0x4d5265[_0xb412('0x2a')],_0x4d5265[_0xb412('0x26')]);_0x31d55e['attributes']=_[_0xb412('0x29')](_0x4d5265[_0xb412('0x2a')],qs[_0xb412('0x2c')](_0x13079d['query'][_0xb412('0x2c')]));_0x31d55e[_0xb412('0x2b')]=_0x31d55e[_0xb412('0x2b')][_0xb412('0x3e')]?_0x31d55e[_0xb412('0x2b')]:_0x4d5265[_0xb412('0x2a')];if(_0x13079d[_0xb412('0x26')][_0xb412('0x3f')]){_0x31d55e[_0xb412('0x39')]=[{'all':!![]}];}_0x31d55e=_[_0xb412('0x35')]({},_0x31d55e,_0x13079d['options']);return db[_0xb412('0x24')][_0xb412('0x40')](_0x31d55e)[_0xb412('0x1d')](handleEntityNotFound(_0x11a4ef,null))[_0xb412('0x1d')](respondWithResult(_0x11a4ef,null))[_0xb412('0x3b')](handleError(_0x11a4ef,null));};exports[_0xb412('0x41')]=function(_0x1d8d6f,_0x24c3eb){return db[_0xb412('0x24')][_0xb412('0x41')](_0x1d8d6f[_0xb412('0x42')],{})[_0xb412('0x1d')](respondWithResult(_0x24c3eb,0xc9))['catch'](handleError(_0x24c3eb,null));};exports[_0xb412('0x1c')]=function(_0x4ebd55,_0x40473c){if(_0x4ebd55[_0xb412('0x42')]['id']){delete _0x4ebd55[_0xb412('0x42')]['id'];}return db['VtigerField'][_0xb412('0x40')]({'where':{'id':_0x4ebd55[_0xb412('0x43')]['id']}})[_0xb412('0x1d')](handleEntityNotFound(_0x40473c,null))[_0xb412('0x1d')](saveUpdates(_0x4ebd55[_0xb412('0x42')],null))[_0xb412('0x1d')](respondWithResult(_0x40473c,null))[_0xb412('0x3b')](handleError(_0x40473c,null));};exports['destroy']=function(_0x52b844,_0x5e4e9c){return db[_0xb412('0x24')][_0xb412('0x40')]({'where':{'id':_0x52b844[_0xb412('0x43')]['id']}})[_0xb412('0x1d')](handleEntityNotFound(_0x5e4e9c,null))[_0xb412('0x1d')](removeEntity(_0x5e4e9c,null))['catch'](handleError(_0x5e4e9c,null));};
\ No newline at end of file
index 551ebf1..219f392 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8e94=['bluebird','request-promise','./intVtigerField.attributes','exports','define','VtigerField','int_vtiger_fields','lodash','util','../../config/logger','api','moment'];(function(_0x938050,_0x5591e9){var _0x43da16=function(_0x16ac1f){while(--_0x16ac1f){_0x938050['push'](_0x938050['shift']());}};_0x43da16(++_0x5591e9);}(_0x8e94,0x17b));var _0x48e9=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0x8e94[_0x19950b];return _0x3c6b41;};'use strict';var _=require(_0x48e9('0x0'));var util=require(_0x48e9('0x1'));var logger=require(_0x48e9('0x2'))(_0x48e9('0x3'));var moment=require(_0x48e9('0x4'));var BPromise=require(_0x48e9('0x5'));var rp=require(_0x48e9('0x6'));var attributes=require(_0x48e9('0x7'));module[_0x48e9('0x8')]=function(_0x3a9d91,_0x425f54){return _0x3a9d91[_0x48e9('0x9')](_0x48e9('0xa'),attributes,{'tableName':_0x48e9('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6431=['exports','VtigerField','int_vtiger_fields','lodash','util','../../config/logger','moment','bluebird','./intVtigerField.attributes'];(function(_0x3752ac,_0x4a197e){var _0x5c298b=function(_0x2e26e4){while(--_0x2e26e4){_0x3752ac['push'](_0x3752ac['shift']());}};_0x5c298b(++_0x4a197e);}(_0x6431,0x18f));var _0x1643=function(_0x105c6a,_0x48c736){_0x105c6a=_0x105c6a-0x0;var _0x5b844d=_0x6431[_0x105c6a];return _0x5b844d;};'use strict';var _=require(_0x1643('0x0'));var util=require(_0x1643('0x1'));var logger=require(_0x1643('0x2'))('api');var moment=require(_0x1643('0x3'));var BPromise=require(_0x1643('0x4'));var rp=require('request-promise');var attributes=require(_0x1643('0x5'));module[_0x1643('0x6')]=function(_0x2911a2,_0x29a560){return _0x2911a2['define'](_0x1643('0x7'),attributes,{'tableName':_0x1643('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 80815ff..76e02e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1586=['VtigerField,\x20%s,\x20%s,\x20%s','error','message','result','catch','lodash','util','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','then','info','VtigerField,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x7655ab,_0x18066f){var _0x2b0e88=function(_0x45534c){while(--_0x45534c){_0x7655ab['push'](_0x7655ab['shift']());}};_0x2b0e88(++_0x18066f);}(_0x1586,0x1bd));var _0x6158=function(_0x24ca1f,_0x3d2164){_0x24ca1f=_0x24ca1f-0x0;var _0x5f4222=_0x1586[_0x24ca1f];return _0x5f4222;};'use strict';var _=require(_0x6158('0x0'));var util=require(_0x6158('0x1'));var moment=require('moment');var BPromise=require(_0x6158('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x6158('0x3'))['db'];var utils=require(_0x6158('0x4'));var logger=require(_0x6158('0x5'))(_0x6158('0x6'));var config=require(_0x6158('0x7'));var jayson=require(_0x6158('0x8'));var client=jayson['client'][_0x6158('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x425ac9,_0x10ae50,_0x591545){return new BPromise(function(_0x58b7c5,_0x458b9a){return client['request'](_0x425ac9,_0x591545)[_0x6158('0xa')](function(_0x2ca72c){logger[_0x6158('0xb')](_0x6158('0xc'),_0x10ae50,_0x6158('0xd'));logger[_0x6158('0xe')](_0x6158('0xf'),_0x10ae50,_0x6158('0xd'),JSON['stringify'](_0x2ca72c));if(_0x2ca72c[_0x6158('0x10')]){if(_0x2ca72c['error']['code']===0x1f4){logger[_0x6158('0x10')]('VtigerField,\x20%s,\x20%s',_0x10ae50,_0x2ca72c[_0x6158('0x10')][_0x6158('0x11')]);return _0x458b9a(_0x2ca72c[_0x6158('0x10')][_0x6158('0x11')]);}logger[_0x6158('0x10')](_0x6158('0xc'),_0x10ae50,_0x2ca72c['error'][_0x6158('0x11')]);return _0x58b7c5(_0x2ca72c[_0x6158('0x10')][_0x6158('0x11')]);}else{logger[_0x6158('0xb')]('VtigerField,\x20%s,\x20%s',_0x10ae50,_0x6158('0xd'));_0x58b7c5(_0x2ca72c[_0x6158('0x12')]['message']);}})[_0x6158('0x13')](function(_0x5273f2){logger[_0x6158('0x10')](_0x6158('0xc'),_0x10ae50,_0x5273f2);_0x458b9a(_0x5273f2);});});}
\ No newline at end of file
+var _0xa37d=['error','message','catch','lodash','util','moment','bluebird','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','info','VtigerField,\x20%s,\x20%s','request\x20sent','VtigerField,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x1a2682,_0xe2b45a){var _0x38a521=function(_0x24d8b8){while(--_0x24d8b8){_0x1a2682['push'](_0x1a2682['shift']());}};_0x38a521(++_0xe2b45a);}(_0xa37d,0x133));var _0xda37=function(_0x5c5bf5,_0x2b3e1b){_0x5c5bf5=_0x5c5bf5-0x0;var _0x188b4b=_0xa37d[_0x5c5bf5];return _0x188b4b;};'use strict';var _=require(_0xda37('0x0'));var util=require(_0xda37('0x1'));var moment=require(_0xda37('0x2'));var BPromise=require(_0xda37('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xda37('0x4'));var logger=require(_0xda37('0x5'))(_0xda37('0x6'));var config=require(_0xda37('0x7'));var jayson=require(_0xda37('0x8'));var client=jayson['client'][_0xda37('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2cb4a1,_0x44ad48,_0x33efc3){return new BPromise(function(_0x517de4,_0x4d8f76){return client[_0xda37('0xa')](_0x2cb4a1,_0x33efc3)['then'](function(_0x4954e6){logger[_0xda37('0xb')](_0xda37('0xc'),_0x44ad48,_0xda37('0xd'));logger['debug'](_0xda37('0xe'),_0x44ad48,_0xda37('0xd'),JSON[_0xda37('0xf')](_0x4954e6));if(_0x4954e6[_0xda37('0x10')]){if(_0x4954e6[_0xda37('0x10')]['code']===0x1f4){logger[_0xda37('0x10')](_0xda37('0xc'),_0x44ad48,_0x4954e6[_0xda37('0x10')][_0xda37('0x11')]);return _0x4d8f76(_0x4954e6[_0xda37('0x10')][_0xda37('0x11')]);}logger[_0xda37('0x10')]('VtigerField,\x20%s,\x20%s',_0x44ad48,_0x4954e6[_0xda37('0x10')][_0xda37('0x11')]);return _0x517de4(_0x4954e6['error'][_0xda37('0x11')]);}else{logger[_0xda37('0xb')](_0xda37('0xc'),_0x44ad48,_0xda37('0xd'));_0x517de4(_0x4954e6['result'][_0xda37('0x11')]);}})[_0xda37('0x12')](function(_0x2cf6be){logger['error'](_0xda37('0xc'),_0x44ad48,_0x2cf6be);_0x4d8f76(_0x2cf6be);});});}
\ No newline at end of file
index 76ecc17..0e5c2e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdaa1=['isAuthenticated','show','/:id/configurations','getConfigurations','/:id/fields','post','create','addConfiguration','put','/:id','update','delete','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','./intZendeskAccount.controller','get','index'];(function(_0x342332,_0x2dfd58){var _0x129775=function(_0x1d35f0){while(--_0x1d35f0){_0x342332['push'](_0x342332['shift']());}};_0x129775(++_0x2dfd58);}(_0xdaa1,0x17d));var _0x1daa=function(_0x33d252,_0xc505fb){_0x33d252=_0x33d252-0x0;var _0x2ebca5=_0xdaa1[_0x33d252];return _0x2ebca5;};'use strict';var multer=require(_0x1daa('0x0'));var util=require(_0x1daa('0x1'));var path=require(_0x1daa('0x2'));var express=require(_0x1daa('0x3'));var router=express[_0x1daa('0x4')]();var auth=require(_0x1daa('0x5'));var interaction=require(_0x1daa('0x6'));var config=require('../../config/environment');var controller=require(_0x1daa('0x7'));router[_0x1daa('0x8')]('/',auth['isAuthenticated'](),controller[_0x1daa('0x9')]);router[_0x1daa('0x8')]('/:id',auth[_0x1daa('0xa')](),controller[_0x1daa('0xb')]);router[_0x1daa('0x8')](_0x1daa('0xc'),auth['isAuthenticated'](),controller[_0x1daa('0xd')]);router[_0x1daa('0x8')](_0x1daa('0xe'),auth[_0x1daa('0xa')](),controller['getFields']);router[_0x1daa('0xf')]('/',auth['isAuthenticated'](),controller[_0x1daa('0x10')]);router[_0x1daa('0xf')](_0x1daa('0xc'),auth[_0x1daa('0xa')](),controller[_0x1daa('0x11')]);router[_0x1daa('0x12')](_0x1daa('0x13'),auth['isAuthenticated'](),controller[_0x1daa('0x14')]);router[_0x1daa('0x15')](_0x1daa('0x13'),auth['isAuthenticated'](),controller['destroy']);module[_0x1daa('0x16')]=router;
\ No newline at end of file
+var _0x5eca=['show','/:id/configurations','getFields','post','create','addConfiguration','put','update','delete','destroy','multer','util','path','express','Router','../../components/interaction/service','get','isAuthenticated','index','/:id'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x5eca,0x10e));var _0xa5ec=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x5eca[_0x321bb2];return _0x9c12ed;};'use strict';var multer=require(_0xa5ec('0x0'));var util=require(_0xa5ec('0x1'));var path=require(_0xa5ec('0x2'));var express=require(_0xa5ec('0x3'));var router=express[_0xa5ec('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xa5ec('0x5'));var config=require('../../config/environment');var controller=require('./intZendeskAccount.controller');router[_0xa5ec('0x6')]('/',auth[_0xa5ec('0x7')](),controller[_0xa5ec('0x8')]);router[_0xa5ec('0x6')](_0xa5ec('0x9'),auth[_0xa5ec('0x7')](),controller[_0xa5ec('0xa')]);router['get'](_0xa5ec('0xb'),auth[_0xa5ec('0x7')](),controller['getConfigurations']);router[_0xa5ec('0x6')]('/:id/fields',auth[_0xa5ec('0x7')](),controller[_0xa5ec('0xc')]);router[_0xa5ec('0xd')]('/',auth['isAuthenticated'](),controller[_0xa5ec('0xe')]);router[_0xa5ec('0xd')](_0xa5ec('0xb'),auth[_0xa5ec('0x7')](),controller[_0xa5ec('0xf')]);router[_0xa5ec('0x10')](_0xa5ec('0x9'),auth[_0xa5ec('0x7')](),controller[_0xa5ec('0x11')]);router[_0xa5ec('0x12')](_0xa5ec('0x9'),auth[_0xa5ec('0x7')](),controller[_0xa5ec('0x13')]);module['exports']=router;
\ No newline at end of file
index faaa66a..f71252f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9367=['ENUM','token','password','integrationTab','newTab','sequelize','exports','STRING','username','remoteUri'];(function(_0x2a0760,_0x4b612a){var _0x500983=function(_0x447f56){while(--_0x447f56){_0x2a0760['push'](_0x2a0760['shift']());}};_0x500983(++_0x4b612a);}(_0x9367,0x87));var _0x7936=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x9367[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x7936('0x0'));module[_0x7936('0x1')]={'name':{'type':Sequelize[_0x7936('0x2')]},'description':{'type':Sequelize[_0x7936('0x2')]},'username':{'type':Sequelize[_0x7936('0x2')],'unique':_0x7936('0x3')},'password':{'type':Sequelize[_0x7936('0x2')]},'token':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize['STRING'],'unique':_0x7936('0x4')},'authType':{'type':Sequelize[_0x7936('0x5')]('password',_0x7936('0x6')),'defaultValue':_0x7936('0x7')},'serverUrl':{'type':Sequelize[_0x7936('0x2')]},'type':{'type':Sequelize[_0x7936('0x5')](_0x7936('0x8'),_0x7936('0x9')),'defaultValue':_0x7936('0x8')}};
\ No newline at end of file
+var _0x44b4=['exports','STRING','username','password','token','ENUM','integrationTab','newTab','sequelize'];(function(_0x244413,_0x5d5f92){var _0x18b5a4=function(_0x5a920f){while(--_0x5a920f){_0x244413['push'](_0x244413['shift']());}};_0x18b5a4(++_0x5d5f92);}(_0x44b4,0x143));var _0x444b=function(_0x5eb237,_0x1531e2){_0x5eb237=_0x5eb237-0x0;var _0x5783f2=_0x44b4[_0x5eb237];return _0x5783f2;};'use strict';var Sequelize=require(_0x444b('0x0'));module[_0x444b('0x1')]={'name':{'type':Sequelize[_0x444b('0x2')]},'description':{'type':Sequelize[_0x444b('0x2')]},'username':{'type':Sequelize[_0x444b('0x2')],'unique':_0x444b('0x3')},'password':{'type':Sequelize[_0x444b('0x2')]},'token':{'type':Sequelize[_0x444b('0x2')]},'remoteUri':{'type':Sequelize[_0x444b('0x2')],'unique':'remoteUri'},'authType':{'type':Sequelize['ENUM'](_0x444b('0x4'),_0x444b('0x5')),'defaultValue':_0x444b('0x4')},'serverUrl':{'type':Sequelize[_0x444b('0x2')]},'type':{'type':Sequelize[_0x444b('0x6')](_0x444b('0x7'),_0x444b('0x8')),'defaultValue':_0x444b('0x7')}};
\ No newline at end of file
index bbf9de7..c343e1c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9467=['statusCode','getFields,\x20%s,\x20%s,\x20%s','stringify','name','send','test','Wrong\x20credentials','request-promise','bluebird','mustache','util','sox','to-csv','ejs','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../mysqldb','jayson/promise','client','http','then','info','ZendeskAccount,\x20%s,\x20%s','request\x20sent','debug','ZendeskAccount,\x20%s,\x20%s,\x20%s','error','message','result','catch','sendStatus','status','end','json','offset','limit','set','Content-Range','reject','save','update','destroy','stack','index','ZendeskAccount','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filters','add','day','filter','merge','map','options','count','includeAll','findAll','rows','show','params','rawAttributes','length','find','create','body','getConfigurations','findOne','ZendeskConfiguration','addConfiguration','AccountId','getSubjects','type','Descriptions','getDescriptions','channel','ZendeskField','getFields','username','password','token','remoteUri','GET','%s%s','ticket_fields','authType','headers','format','Basic\x20%s','toString','%s/token:%s','base64','ValidationError','Unknown\x20authentication\x20type','subject','description','group','assignee','includes','title','position','system_field_options'];(function(_0xe1a351,_0x19c1a4){var _0x439c3c=function(_0xa3dd3e){while(--_0xa3dd3e){_0xe1a351['push'](_0xe1a351['shift']());}};_0x439c3c(++_0x19c1a4);}(_0x9467,0x169));var _0x7946=function(_0x7119df,_0x1b04ec){_0x7119df=_0x7119df-0x0;var _0x4cf6c9=_0x9467[_0x7119df];return _0x4cf6c9;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x7946('0x0'));var moment=require('moment');var BPromise=require(_0x7946('0x1'));var Mustache=require(_0x7946('0x2'));var util=require(_0x7946('0x3'));var path=require('path');var sox=require(_0x7946('0x4'));var csv=require(_0x7946('0x5'));var ejs=require(_0x7946('0x6'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x7946('0x7'));var jsforce=require(_0x7946('0x8'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x7946('0x9'));var Papa=require(_0x7946('0xa'));var qs=require(_0x7946('0xb'));var logger=require(_0x7946('0xc'))(_0x7946('0xd'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x7946('0xe'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0x7946('0xf'));var client=jayson[_0x7946('0x10')][_0x7946('0x11')]({'port':0x232a});function respondWithRpcPromise(_0x48d8bd,_0x3e190d,_0x1d21e5,_0x2cd501){return new BPromise(function(_0x340391,_0x5898f6){var _0x179da1=_0x2cd501||client;return _0x179da1['request'](_0x48d8bd,_0x1d21e5)[_0x7946('0x12')](function(_0x27d9cb){logger[_0x7946('0x13')](_0x7946('0x14'),_0x3e190d,_0x7946('0x15'));logger[_0x7946('0x16')](_0x7946('0x17'),_0x3e190d,_0x7946('0x15'),JSON['stringify'](_0x27d9cb));if(_0x27d9cb[_0x7946('0x18')]){if(_0x27d9cb[_0x7946('0x18')]['code']===0x1f4){logger[_0x7946('0x18')](_0x7946('0x14'),_0x3e190d,_0x27d9cb[_0x7946('0x18')][_0x7946('0x19')]);return _0x5898f6(_0x27d9cb[_0x7946('0x18')][_0x7946('0x19')]);}logger[_0x7946('0x18')](_0x7946('0x14'),_0x3e190d,_0x27d9cb[_0x7946('0x18')]['message']);return _0x340391(_0x27d9cb[_0x7946('0x18')]['message']);}else{logger[_0x7946('0x13')]('ZendeskAccount,\x20%s,\x20%s',_0x3e190d,_0x7946('0x15'));_0x340391(_0x27d9cb[_0x7946('0x1a')][_0x7946('0x19')]);}})[_0x7946('0x1b')](function(_0x319f92){logger['error']('ZendeskAccount,\x20%s,\x20%s',_0x3e190d,_0x319f92);_0x5898f6(_0x319f92);});});}function respondWithStatusCode(_0x392adf,_0xf0c5af){_0xf0c5af=_0xf0c5af||0xcc;return function(_0x3adcb2){if(_0x3adcb2){return _0x392adf[_0x7946('0x1c')](_0xf0c5af);}return _0x392adf[_0x7946('0x1d')](_0xf0c5af)[_0x7946('0x1e')]();};}function respondWithResult(_0x232b40,_0x554fcf){_0x554fcf=_0x554fcf||0xc8;return function(_0x1284b9){if(_0x1284b9){return _0x232b40[_0x7946('0x1d')](_0x554fcf)[_0x7946('0x1f')](_0x1284b9);}};}function respondWithFilteredResult(_0x474888,_0x73ebb6){return function(_0x56518a){if(_0x56518a){var _0x1d3395=_0x56518a['count'],_0x38daef=_0x73ebb6[_0x7946('0x20')],_0x2ab323=_0x73ebb6[_0x7946('0x20')]+_0x73ebb6[_0x7946('0x21')],_0x5e6e17;if(_0x2ab323>=_0x1d3395){_0x2ab323=_0x1d3395;_0x5e6e17=0xc8;}else{_0x5e6e17=0xce;}_0x474888[_0x7946('0x1d')](_0x5e6e17);return _0x474888[_0x7946('0x22')](_0x7946('0x23'),_0x38daef+'-'+_0x2ab323+'/'+_0x1d3395)['json'](_0x56518a);}return null;};}function patchUpdates(_0x1acff4){return function(_0x1690ff){try{jsonpatch['apply'](_0x1690ff,_0x1acff4,!![]);}catch(_0x5582d6){return BPromise[_0x7946('0x24')](_0x5582d6);}return _0x1690ff[_0x7946('0x25')]();};}function saveUpdates(_0x2784b4,_0x4c0b7e){return function(_0x172fd5){if(_0x172fd5){return _0x172fd5[_0x7946('0x26')](_0x2784b4)['then'](function(_0x40c77a){return _0x40c77a;});}return null;};}function removeEntity(_0x3a4c45,_0x1cd43b){return function(_0x54f93b){if(_0x54f93b){return _0x54f93b[_0x7946('0x27')]()[_0x7946('0x12')](function(){_0x3a4c45['status'](0xcc)[_0x7946('0x1e')]();});}};}function handleEntityNotFound(_0x160bb7,_0x48e31c){return function(_0x298b61){if(!_0x298b61){_0x160bb7[_0x7946('0x1c')](0x194);}return _0x298b61;};}function handleError(_0x578043,_0x2092bc){_0x2092bc=_0x2092bc||0x1f4;return function(_0x4436e4){logger[_0x7946('0x18')](_0x4436e4[_0x7946('0x28')]);if(_0x4436e4['name']){delete _0x4436e4['name'];}_0x578043['status'](_0x2092bc)['send'](_0x4436e4);};}exports[_0x7946('0x29')]=function(_0x375ff4,_0x10400a){var _0x3313be={},_0x4fba37={},_0x2a0e58={'count':0x0,'rows':[]};var _0xe87161=db[_0x7946('0x2a')]['rawAttributes'];_0x4fba37[_0x7946('0x2b')]=_[_0x7946('0x2c')](_0xe87161);var _0x220e5f={'dateStart':_0x375ff4[_0x7946('0x2d')][_0x7946('0x2e')],'dateEnd':_0x375ff4['query'][_0x7946('0x2f')]};delete _0x375ff4['query'][_0x7946('0x2e')];delete _0x375ff4[_0x7946('0x2d')][_0x7946('0x2f')];_0x4fba37[_0x7946('0x2d')]=_['keys'](_0x375ff4[_0x7946('0x2d')]);_0x4fba37['filters']=_[_0x7946('0x30')](_0x4fba37['model'],_0x4fba37['query']);_0x3313be[_0x7946('0x31')]=_[_0x7946('0x30')](_0x4fba37['model'],qs[_0x7946('0x32')](_0x375ff4[_0x7946('0x2d')][_0x7946('0x32')]));_0x3313be['attributes']=_0x3313be['attributes']['length']?_0x3313be[_0x7946('0x31')]:_0x4fba37['model'];if(!_0x375ff4[_0x7946('0x2d')][_0x7946('0x33')](_0x7946('0x34'))){_0x3313be[_0x7946('0x21')]=qs[_0x7946('0x21')](_0x375ff4[_0x7946('0x2d')][_0x7946('0x21')]);_0x3313be['offset']=qs[_0x7946('0x20')](_0x375ff4[_0x7946('0x2d')][_0x7946('0x20')]);}_0x3313be[_0x7946('0x35')]=qs[_0x7946('0x36')](_0x375ff4[_0x7946('0x2d')][_0x7946('0x36')]);_0x3313be[_0x7946('0x37')]=qs['filters'](_[_0x7946('0x38')](_0x375ff4['query'],_0x4fba37[_0x7946('0x39')]));if(_0x220e5f[_0x7946('0x2e')]){if(_0x220e5f[_0x7946('0x2f')]){_0x220e5f['dateEnd']=moment(_0x220e5f[_0x7946('0x2f')])[_0x7946('0x3a')](0x1,_0x7946('0x3b'));}else{_0x220e5f[_0x7946('0x2f')]=moment(_0x220e5f[_0x7946('0x2e')])[_0x7946('0x3a')](0x1,'day');}_['merge'](_0x3313be[_0x7946('0x37')],{'createdAt':{'$gte':_0x220e5f[_0x7946('0x2e')],'$lte':_0x220e5f[_0x7946('0x2f')]}});}if(_0x375ff4['query'][_0x7946('0x3c')]){_0x3313be[_0x7946('0x37')]=_[_0x7946('0x3d')](_0x3313be[_0x7946('0x37')],{'$or':_[_0x7946('0x3e')](_0x3313be['attributes'],function(_0x5d8f03){var _0x3fd3c4={};_0x3fd3c4[_0x5d8f03]={'$like':'%'+_0x375ff4[_0x7946('0x2d')][_0x7946('0x3c')]+'%'};return _0x3fd3c4;})});}_0x3313be=_[_0x7946('0x3d')]({},_0x3313be,_0x375ff4[_0x7946('0x3f')]);var _0x30e233={'where':_0x3313be[_0x7946('0x37')]};return db[_0x7946('0x2a')][_0x7946('0x40')](_0x30e233)['then'](function(_0x2bbf22){_0x2a0e58[_0x7946('0x40')]=_0x2bbf22;if(_0x375ff4[_0x7946('0x2d')][_0x7946('0x41')]){_0x3313be['include']=[{'all':!![]}];}return db['ZendeskAccount'][_0x7946('0x42')](_0x3313be);})[_0x7946('0x12')](function(_0x112c64){_0x2a0e58[_0x7946('0x43')]=_0x112c64;return _0x2a0e58;})[_0x7946('0x12')](respondWithFilteredResult(_0x10400a,_0x3313be))[_0x7946('0x1b')](handleError(_0x10400a,null));};exports[_0x7946('0x44')]=function(_0x230356,_0x1d77b4){var _0x379167={'raw':![],'where':{'id':_0x230356[_0x7946('0x45')]['id']}},_0x46313c={};_0x46313c[_0x7946('0x2b')]=_[_0x7946('0x2c')](db[_0x7946('0x2a')][_0x7946('0x46')]);_0x46313c['query']=_['keys'](_0x230356[_0x7946('0x2d')]);_0x46313c[_0x7946('0x39')]=_['intersection'](_0x46313c[_0x7946('0x2b')],_0x46313c['query']);_0x379167[_0x7946('0x31')]=_[_0x7946('0x30')](_0x46313c[_0x7946('0x2b')],qs[_0x7946('0x32')](_0x230356[_0x7946('0x2d')]['fields']));_0x379167['attributes']=_0x379167[_0x7946('0x31')][_0x7946('0x47')]?_0x379167[_0x7946('0x31')]:_0x46313c[_0x7946('0x2b')];if(_0x230356['query']['includeAll']){_0x379167['include']=[{'all':!![]}];}_0x379167=_[_0x7946('0x3d')]({},_0x379167,_0x230356[_0x7946('0x3f')]);return db[_0x7946('0x2a')][_0x7946('0x48')](_0x379167)[_0x7946('0x12')](handleEntityNotFound(_0x1d77b4,null))[_0x7946('0x12')](respondWithResult(_0x1d77b4,null))[_0x7946('0x1b')](handleError(_0x1d77b4,null));};exports[_0x7946('0x49')]=function(_0x557e60,_0x3400cc){return db[_0x7946('0x2a')][_0x7946('0x49')](_0x557e60[_0x7946('0x4a')],{})[_0x7946('0x12')](respondWithResult(_0x3400cc,0xc9))['catch'](handleError(_0x3400cc,null));};exports[_0x7946('0x26')]=function(_0x43046b,_0xfedcc4){if(_0x43046b[_0x7946('0x4a')]['id']){delete _0x43046b[_0x7946('0x4a')]['id'];}return db[_0x7946('0x2a')][_0x7946('0x48')]({'where':{'id':_0x43046b[_0x7946('0x45')]['id']}})[_0x7946('0x12')](handleEntityNotFound(_0xfedcc4,null))[_0x7946('0x12')](saveUpdates(_0x43046b['body'],null))[_0x7946('0x12')](respondWithResult(_0xfedcc4,null))[_0x7946('0x1b')](handleError(_0xfedcc4,null));};exports[_0x7946('0x27')]=function(_0x5d5a0f,_0x4809bf){return db['ZendeskAccount'][_0x7946('0x48')]({'where':{'id':_0x5d5a0f['params']['id']}})[_0x7946('0x12')](handleEntityNotFound(_0x4809bf,null))[_0x7946('0x12')](removeEntity(_0x4809bf,null))[_0x7946('0x1b')](handleError(_0x4809bf,null));};exports[_0x7946('0x4b')]=function(_0xcfd889,_0x383695,_0x161fa6){var _0xb5ae75={};var _0x214adf={};var _0x1c6cf0;var _0x1bd857;return db['ZendeskAccount'][_0x7946('0x4c')]({'where':{'id':_0xcfd889[_0x7946('0x45')]['id']}})[_0x7946('0x12')](handleEntityNotFound(_0x383695,null))['then'](function(_0x55d2af){if(_0x55d2af){_0x1c6cf0=_0x55d2af;_0x214adf[_0x7946('0x2b')]=_[_0x7946('0x2c')](db[_0x7946('0x4d')][_0x7946('0x46')]);_0x214adf['query']=_[_0x7946('0x2c')](_0xcfd889['query']);_0x214adf[_0x7946('0x39')]=_['intersection'](_0x214adf[_0x7946('0x2b')],_0x214adf[_0x7946('0x2d')]);_0xb5ae75[_0x7946('0x31')]=_['intersection'](_0x214adf[_0x7946('0x2b')],qs[_0x7946('0x32')](_0xcfd889['query'][_0x7946('0x32')]));_0xb5ae75[_0x7946('0x31')]=_0xb5ae75[_0x7946('0x31')][_0x7946('0x47')]?_0xb5ae75[_0x7946('0x31')]:_0x214adf[_0x7946('0x2b')];_0xb5ae75[_0x7946('0x35')]=qs[_0x7946('0x36')](_0xcfd889['query']['sort']);_0xb5ae75[_0x7946('0x37')]=qs[_0x7946('0x39')](_[_0x7946('0x38')](_0xcfd889[_0x7946('0x2d')],_0x214adf['filters']));if(_0xcfd889[_0x7946('0x2d')]['filter']){_0xb5ae75['where']=_[_0x7946('0x3d')](_0xb5ae75[_0x7946('0x37')],{'$or':_['map'](_0xb5ae75[_0x7946('0x31')],function(_0x3dd45c){var _0x5d1ccf={};_0x5d1ccf[_0x3dd45c]={'$like':'%'+_0xcfd889[_0x7946('0x2d')][_0x7946('0x3c')]+'%'};return _0x5d1ccf;})});}_0xb5ae75=_[_0x7946('0x3d')]({},_0xb5ae75,_0xcfd889[_0x7946('0x3f')]);return _0x1c6cf0[_0x7946('0x4b')](_0xb5ae75);}})[_0x7946('0x12')](function(_0x583179){if(_0x583179){_0x1bd857=_0x583179[_0x7946('0x47')];if(!_0xcfd889[_0x7946('0x2d')]['hasOwnProperty'](_0x7946('0x34'))){_0xb5ae75[_0x7946('0x21')]=qs[_0x7946('0x21')](_0xcfd889[_0x7946('0x2d')][_0x7946('0x21')]);_0xb5ae75[_0x7946('0x20')]=qs[_0x7946('0x20')](_0xcfd889['query'][_0x7946('0x20')]);}return _0x1c6cf0[_0x7946('0x4b')](_0xb5ae75);}})[_0x7946('0x12')](function(_0x32fe3f){if(_0x32fe3f){return _0x32fe3f?{'count':_0x1bd857,'rows':_0x32fe3f}:null;}})[_0x7946('0x12')](respondWithResult(_0x383695,null))[_0x7946('0x1b')](handleError(_0x383695,null));};exports[_0x7946('0x4e')]=function(_0x13b8c1,_0x174750,_0x2ff234){if(_0x13b8c1[_0x7946('0x4a')]['id']){delete _0x13b8c1[_0x7946('0x4a')]['id'];}return db[_0x7946('0x2a')][_0x7946('0x4c')]({'where':{'id':_0x13b8c1[_0x7946('0x45')]['id']}})['then'](handleEntityNotFound(_0x174750,null))[_0x7946('0x12')](function(_0x58f0c3){if(_0x58f0c3){_0x13b8c1[_0x7946('0x4a')][_0x7946('0x4f')]=_0x58f0c3['id'];_0x13b8c1['body']['Subjects']=integrations[_0x7946('0x50')](_0x13b8c1[_0x7946('0x4a')]['channel'],_0x13b8c1[_0x7946('0x4a')][_0x7946('0x51')]);_0x13b8c1[_0x7946('0x4a')][_0x7946('0x52')]=integrations[_0x7946('0x53')](_0x13b8c1[_0x7946('0x4a')][_0x7946('0x54')],_0x13b8c1[_0x7946('0x4a')][_0x7946('0x51')]);return db[_0x7946('0x4d')][_0x7946('0x49')](_0x13b8c1[_0x7946('0x4a')],{'include':[{'model':db[_0x7946('0x55')],'as':'Subjects'},{'model':db[_0x7946('0x55')],'as':_0x7946('0x52')}]});}return null;})[_0x7946('0x12')](respondWithResult(_0x174750,null))[_0x7946('0x1b')](handleError(_0x174750,null));};exports[_0x7946('0x56')]=function(_0x5d73f6,_0x5976ce,_0x1b1fc6){return db[_0x7946('0x2a')][_0x7946('0x4c')]({'where':{'id':_0x5d73f6[_0x7946('0x45')]['id']},'attributes':['id',_0x7946('0x57'),_0x7946('0x58'),_0x7946('0x59'),'authType',_0x7946('0x5a')]})[_0x7946('0x12')](handleEntityNotFound(_0x5976ce,null))[_0x7946('0x12')](function(_0x12c475){if(_0x12c475){var _0x4b6fd2={'method':_0x7946('0x5b'),'uri':util['format'](_0x7946('0x5c'),_0x12c475[_0x7946('0x5a')],_0x7946('0x5d')),'json':!![]};switch(_0x12c475[_0x7946('0x5e')]){case _0x7946('0x58'):_0x4b6fd2[_0x7946('0x5f')]={'Authorization':util[_0x7946('0x60')](_0x7946('0x61'),new Buffer(util['format']('%s:%s',_0x12c475['username'],_0x12c475[_0x7946('0x58')]))[_0x7946('0x62')]('base64'))};break;case _0x7946('0x59'):_0x4b6fd2[_0x7946('0x5f')]={'Authorization':util[_0x7946('0x60')](_0x7946('0x61'),new Buffer(util[_0x7946('0x60')](_0x7946('0x63'),_0x12c475[_0x7946('0x57')],_0x12c475[_0x7946('0x59')]))[_0x7946('0x62')](_0x7946('0x64')))};break;default:throw new db['Sequelize'][(_0x7946('0x65'))](_0x7946('0x66'));}return rp(_0x4b6fd2);}})['then'](function(_0x280e4c){if(_0x280e4c){var _0x38698a=[_0x7946('0x67'),_0x7946('0x68'),_0x7946('0x69'),_0x7946('0x6a')];_['remove'](_0x280e4c[_0x7946('0x5d')],function(_0x1f9214){return _0x38698a[_0x7946('0x6b')](_0x1f9214[_0x7946('0x51')]);});return{'count':_0x280e4c[_0x7946('0x5d')]['length'],'rows':_['map'](_0x280e4c[_0x7946('0x5d')],function(_0x49d85a){return{'id':_0x49d85a['id'],'name':_0x49d85a['position']>0x7?_0x49d85a[_0x7946('0x6c')]:_0x49d85a['type'],'custom':_0x49d85a[_0x7946('0x6d')]>0x7?!![]:![],'options':_0x49d85a[_0x7946('0x6e')]?_0x49d85a[_0x7946('0x6e')]:[]};})};}})['then'](respondWithResult(_0x5976ce,null))[_0x7946('0x1b')](function(_0x7aec5c){var _0x241fda=_0x5d73f6[_0x7946('0x2d')]['test']?0x1f4:_0x7aec5c[_0x7946('0x6f')]||0x1f4;logger[_0x7946('0x18')](_0x7946('0x70'),_0x7946('0x56'),_0x241fda,JSON[_0x7946('0x71')](_0x7aec5c));delete _0x7aec5c[_0x7946('0x72')];if(_0x241fda===0x191){_0x241fda=0x190;}_0x5976ce[_0x7946('0x1d')](_0x241fda)[_0x7946('0x73')](_0x5d73f6[_0x7946('0x2d')][_0x7946('0x74')]?{'message':_0x7946('0x75'),'statusCode':_0x7aec5c[_0x7946('0x6f')]}:_0x7aec5c);});};
\ No newline at end of file
+var _0x108f=['password','token','GET','format','%s%s','remoteUri','ticket_fields','authType','headers','toString','Basic\x20%s','Sequelize','ValidationError','description','assignee','remove','position','title','system_field_options','test','statusCode','Wrong\x20credentials','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','request','then','info','ZendeskAccount,\x20%s,\x20%s','request\x20sent','ZendeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','end','offset','limit','Content-Range','json','apply','reject','save','update','status','stack','name','send','index','ZendeskAccount','rawAttributes','model','keys','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','add','dateStart','day','merge','filter','map','options','count','includeAll','rows','show','params','include','find','create','body','destroy','findOne','ZendeskConfiguration','pick','getConfigurations','AccountId','Subjects','getSubjects','channel','type','Descriptions','getDescriptions','ZendeskField','getFields','username'];(function(_0x2a8da1,_0x3badcd){var _0x570dad=function(_0x3d6bc3){while(--_0x3d6bc3){_0x2a8da1['push'](_0x2a8da1['shift']());}};_0x570dad(++_0x3badcd);}(_0x108f,0xfe));var _0xf108=function(_0xd856c1,_0x1981e5){_0xd856c1=_0xd856c1-0x0;var _0x321960=_0x108f[_0xd856c1];return _0x321960;};'use strict';var jsonpatch=require(_0xf108('0x0'));var rp=require(_0xf108('0x1'));var moment=require('moment');var BPromise=require(_0xf108('0x2'));var Mustache=require(_0xf108('0x3'));var util=require(_0xf108('0x4'));var path=require(_0xf108('0x5'));var sox=require(_0xf108('0x6'));var csv=require(_0xf108('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xf108('0x8'));var jsforce=require(_0xf108('0x9'));var deskjs=require(_0xf108('0xa'));var toCsv=require(_0xf108('0x7'));var querystring=require('querystring');var Papa=require(_0xf108('0xb'));var qs=require(_0xf108('0xc'));var logger=require(_0xf108('0xd'))('api');var utils=require(_0xf108('0xe'));var config=require('../../config/environment');var db=require(_0xf108('0xf'))['db'];var integrations=require(_0xf108('0x10'));var jayson=require(_0xf108('0x11'));var client=jayson[_0xf108('0x12')][_0xf108('0x13')]({'port':0x232a});function respondWithRpcPromise(_0x49670c,_0x4bf0ce,_0x46e31f,_0x3890c7){return new BPromise(function(_0x5ca60e,_0x2904fc){var _0x5149ac=_0x3890c7||client;return _0x5149ac[_0xf108('0x14')](_0x49670c,_0x46e31f)[_0xf108('0x15')](function(_0x3bfe97){logger[_0xf108('0x16')](_0xf108('0x17'),_0x4bf0ce,_0xf108('0x18'));logger['debug'](_0xf108('0x19'),_0x4bf0ce,_0xf108('0x18'),JSON[_0xf108('0x1a')](_0x3bfe97));if(_0x3bfe97[_0xf108('0x1b')]){if(_0x3bfe97[_0xf108('0x1b')][_0xf108('0x1c')]===0x1f4){logger[_0xf108('0x1b')]('ZendeskAccount,\x20%s,\x20%s',_0x4bf0ce,_0x3bfe97['error'][_0xf108('0x1d')]);return _0x2904fc(_0x3bfe97[_0xf108('0x1b')][_0xf108('0x1d')]);}logger[_0xf108('0x1b')]('ZendeskAccount,\x20%s,\x20%s',_0x4bf0ce,_0x3bfe97['error'][_0xf108('0x1d')]);return _0x5ca60e(_0x3bfe97['error'][_0xf108('0x1d')]);}else{logger[_0xf108('0x16')](_0xf108('0x17'),_0x4bf0ce,_0xf108('0x18'));_0x5ca60e(_0x3bfe97[_0xf108('0x1e')][_0xf108('0x1d')]);}})[_0xf108('0x1f')](function(_0xca2372){logger[_0xf108('0x1b')](_0xf108('0x17'),_0x4bf0ce,_0xca2372);_0x2904fc(_0xca2372);});});}function respondWithStatusCode(_0x41a8d6,_0x2b09d0){_0x2b09d0=_0x2b09d0||0xcc;return function(_0x2cc6a9){if(_0x2cc6a9){return _0x41a8d6[_0xf108('0x20')](_0x2b09d0);}return _0x41a8d6['status'](_0x2b09d0)[_0xf108('0x21')]();};}function respondWithResult(_0x8a2b9b,_0x1b2241){_0x1b2241=_0x1b2241||0xc8;return function(_0x30eca8){if(_0x30eca8){return _0x8a2b9b['status'](_0x1b2241)['json'](_0x30eca8);}};}function respondWithFilteredResult(_0x59eb26,_0x1e509b){return function(_0x10597b){if(_0x10597b){var _0x1bf200=_0x10597b['count'],_0x27daab=_0x1e509b[_0xf108('0x22')],_0x17f9d7=_0x1e509b[_0xf108('0x22')]+_0x1e509b[_0xf108('0x23')],_0x411bb7;if(_0x17f9d7>=_0x1bf200){_0x17f9d7=_0x1bf200;_0x411bb7=0xc8;}else{_0x411bb7=0xce;}_0x59eb26['status'](_0x411bb7);return _0x59eb26['set'](_0xf108('0x24'),_0x27daab+'-'+_0x17f9d7+'/'+_0x1bf200)[_0xf108('0x25')](_0x10597b);}return null;};}function patchUpdates(_0x1e81d4){return function(_0x5bf096){try{jsonpatch[_0xf108('0x26')](_0x5bf096,_0x1e81d4,!![]);}catch(_0x24e80b){return BPromise[_0xf108('0x27')](_0x24e80b);}return _0x5bf096[_0xf108('0x28')]();};}function saveUpdates(_0x22b834,_0x151c95){return function(_0x3c1c60){if(_0x3c1c60){return _0x3c1c60[_0xf108('0x29')](_0x22b834)[_0xf108('0x15')](function(_0x430db2){return _0x430db2;});}return null;};}function removeEntity(_0x7ed796,_0x4e0d68){return function(_0x5dd666){if(_0x5dd666){return _0x5dd666['destroy']()[_0xf108('0x15')](function(){_0x7ed796[_0xf108('0x2a')](0xcc)[_0xf108('0x21')]();});}};}function handleEntityNotFound(_0x57117d,_0x52f2bb){return function(_0x25bb0d){if(!_0x25bb0d){_0x57117d[_0xf108('0x20')](0x194);}return _0x25bb0d;};}function handleError(_0x4b000a,_0x36bf94){_0x36bf94=_0x36bf94||0x1f4;return function(_0x5bf306){logger['error'](_0x5bf306[_0xf108('0x2b')]);if(_0x5bf306[_0xf108('0x2c')]){delete _0x5bf306['name'];}_0x4b000a[_0xf108('0x2a')](_0x36bf94)[_0xf108('0x2d')](_0x5bf306);};}exports[_0xf108('0x2e')]=function(_0x573d29,_0x367251){var _0xb0e158={},_0x1f1a30={},_0x242302={'count':0x0,'rows':[]};var _0x27867e=db[_0xf108('0x2f')][_0xf108('0x30')];_0x1f1a30[_0xf108('0x31')]=_[_0xf108('0x32')](_0x27867e);var _0x3aa777={'dateStart':_0x573d29[_0xf108('0x33')]['dateStart'],'dateEnd':_0x573d29[_0xf108('0x33')][_0xf108('0x34')]};delete _0x573d29[_0xf108('0x33')]['dateStart'];delete _0x573d29[_0xf108('0x33')][_0xf108('0x34')];_0x1f1a30[_0xf108('0x33')]=_['keys'](_0x573d29[_0xf108('0x33')]);_0x1f1a30[_0xf108('0x35')]=_[_0xf108('0x36')](_0x1f1a30[_0xf108('0x31')],_0x1f1a30[_0xf108('0x33')]);_0xb0e158[_0xf108('0x37')]=_['intersection'](_0x1f1a30['model'],qs[_0xf108('0x38')](_0x573d29['query'][_0xf108('0x38')]));_0xb0e158[_0xf108('0x37')]=_0xb0e158[_0xf108('0x37')][_0xf108('0x39')]?_0xb0e158[_0xf108('0x37')]:_0x1f1a30[_0xf108('0x31')];if(!_0x573d29[_0xf108('0x33')][_0xf108('0x3a')](_0xf108('0x3b'))){_0xb0e158[_0xf108('0x23')]=qs[_0xf108('0x23')](_0x573d29[_0xf108('0x33')]['limit']);_0xb0e158[_0xf108('0x22')]=qs[_0xf108('0x22')](_0x573d29[_0xf108('0x33')][_0xf108('0x22')]);}_0xb0e158[_0xf108('0x3c')]=qs[_0xf108('0x3d')](_0x573d29[_0xf108('0x33')]['sort']);_0xb0e158[_0xf108('0x3e')]=qs['filters'](_['pick'](_0x573d29[_0xf108('0x33')],_0x1f1a30[_0xf108('0x35')]));if(_0x3aa777['dateStart']){if(_0x3aa777['dateEnd']){_0x3aa777['dateEnd']=moment(_0x3aa777[_0xf108('0x34')])[_0xf108('0x3f')](0x1,'day');}else{_0x3aa777['dateEnd']=moment(_0x3aa777[_0xf108('0x40')])[_0xf108('0x3f')](0x1,_0xf108('0x41'));}_[_0xf108('0x42')](_0xb0e158[_0xf108('0x3e')],{'createdAt':{'$gte':_0x3aa777['dateStart'],'$lte':_0x3aa777['dateEnd']}});}if(_0x573d29[_0xf108('0x33')][_0xf108('0x43')]){_0xb0e158[_0xf108('0x3e')]=_['merge'](_0xb0e158[_0xf108('0x3e')],{'$or':_[_0xf108('0x44')](_0xb0e158[_0xf108('0x37')],function(_0x4b87c3){var _0x56a302={};_0x56a302[_0x4b87c3]={'$like':'%'+_0x573d29[_0xf108('0x33')]['filter']+'%'};return _0x56a302;})});}_0xb0e158=_[_0xf108('0x42')]({},_0xb0e158,_0x573d29[_0xf108('0x45')]);var _0x534f63={'where':_0xb0e158[_0xf108('0x3e')]};return db[_0xf108('0x2f')]['count'](_0x534f63)['then'](function(_0x2a1424){_0x242302[_0xf108('0x46')]=_0x2a1424;if(_0x573d29['query'][_0xf108('0x47')]){_0xb0e158['include']=[{'all':!![]}];}return db['ZendeskAccount']['findAll'](_0xb0e158);})['then'](function(_0x397c17){_0x242302[_0xf108('0x48')]=_0x397c17;return _0x242302;})[_0xf108('0x15')](respondWithFilteredResult(_0x367251,_0xb0e158))[_0xf108('0x1f')](handleError(_0x367251,null));};exports[_0xf108('0x49')]=function(_0x2da605,_0x48f742){var _0x166862={'raw':![],'where':{'id':_0x2da605[_0xf108('0x4a')]['id']}},_0x550c11={};_0x550c11['model']=_[_0xf108('0x32')](db[_0xf108('0x2f')][_0xf108('0x30')]);_0x550c11[_0xf108('0x33')]=_[_0xf108('0x32')](_0x2da605[_0xf108('0x33')]);_0x550c11[_0xf108('0x35')]=_[_0xf108('0x36')](_0x550c11['model'],_0x550c11['query']);_0x166862[_0xf108('0x37')]=_[_0xf108('0x36')](_0x550c11[_0xf108('0x31')],qs[_0xf108('0x38')](_0x2da605[_0xf108('0x33')][_0xf108('0x38')]));_0x166862[_0xf108('0x37')]=_0x166862['attributes'][_0xf108('0x39')]?_0x166862[_0xf108('0x37')]:_0x550c11['model'];if(_0x2da605[_0xf108('0x33')][_0xf108('0x47')]){_0x166862[_0xf108('0x4b')]=[{'all':!![]}];}_0x166862=_['merge']({},_0x166862,_0x2da605[_0xf108('0x45')]);return db[_0xf108('0x2f')][_0xf108('0x4c')](_0x166862)[_0xf108('0x15')](handleEntityNotFound(_0x48f742,null))[_0xf108('0x15')](respondWithResult(_0x48f742,null))[_0xf108('0x1f')](handleError(_0x48f742,null));};exports[_0xf108('0x4d')]=function(_0x3e1e53,_0x51efd6){return db[_0xf108('0x2f')][_0xf108('0x4d')](_0x3e1e53[_0xf108('0x4e')],{})[_0xf108('0x15')](respondWithResult(_0x51efd6,0xc9))[_0xf108('0x1f')](handleError(_0x51efd6,null));};exports[_0xf108('0x29')]=function(_0x5572a0,_0x4bd7fa){if(_0x5572a0['body']['id']){delete _0x5572a0[_0xf108('0x4e')]['id'];}return db[_0xf108('0x2f')][_0xf108('0x4c')]({'where':{'id':_0x5572a0['params']['id']}})[_0xf108('0x15')](handleEntityNotFound(_0x4bd7fa,null))[_0xf108('0x15')](saveUpdates(_0x5572a0[_0xf108('0x4e')],null))[_0xf108('0x15')](respondWithResult(_0x4bd7fa,null))['catch'](handleError(_0x4bd7fa,null));};exports[_0xf108('0x4f')]=function(_0x38be23,_0x1e0a87){return db['ZendeskAccount'][_0xf108('0x4c')]({'where':{'id':_0x38be23[_0xf108('0x4a')]['id']}})[_0xf108('0x15')](handleEntityNotFound(_0x1e0a87,null))[_0xf108('0x15')](removeEntity(_0x1e0a87,null))[_0xf108('0x1f')](handleError(_0x1e0a87,null));};exports['getConfigurations']=function(_0x511ec5,_0x88df2d,_0x59d567){var _0x2cd05a={};var _0x3aed9e={};var _0x4d8688;var _0x21d3bd;return db['ZendeskAccount'][_0xf108('0x50')]({'where':{'id':_0x511ec5[_0xf108('0x4a')]['id']}})[_0xf108('0x15')](handleEntityNotFound(_0x88df2d,null))[_0xf108('0x15')](function(_0x8e6d96){if(_0x8e6d96){_0x4d8688=_0x8e6d96;_0x3aed9e[_0xf108('0x31')]=_[_0xf108('0x32')](db[_0xf108('0x51')][_0xf108('0x30')]);_0x3aed9e['query']=_[_0xf108('0x32')](_0x511ec5[_0xf108('0x33')]);_0x3aed9e[_0xf108('0x35')]=_[_0xf108('0x36')](_0x3aed9e[_0xf108('0x31')],_0x3aed9e[_0xf108('0x33')]);_0x2cd05a[_0xf108('0x37')]=_['intersection'](_0x3aed9e[_0xf108('0x31')],qs[_0xf108('0x38')](_0x511ec5['query']['fields']));_0x2cd05a[_0xf108('0x37')]=_0x2cd05a[_0xf108('0x37')]['length']?_0x2cd05a[_0xf108('0x37')]:_0x3aed9e['model'];_0x2cd05a[_0xf108('0x3c')]=qs['sort'](_0x511ec5[_0xf108('0x33')][_0xf108('0x3d')]);_0x2cd05a[_0xf108('0x3e')]=qs[_0xf108('0x35')](_[_0xf108('0x52')](_0x511ec5[_0xf108('0x33')],_0x3aed9e['filters']));if(_0x511ec5[_0xf108('0x33')][_0xf108('0x43')]){_0x2cd05a['where']=_[_0xf108('0x42')](_0x2cd05a[_0xf108('0x3e')],{'$or':_[_0xf108('0x44')](_0x2cd05a['attributes'],function(_0x47b727){var _0x1ead28={};_0x1ead28[_0x47b727]={'$like':'%'+_0x511ec5[_0xf108('0x33')][_0xf108('0x43')]+'%'};return _0x1ead28;})});}_0x2cd05a=_['merge']({},_0x2cd05a,_0x511ec5['options']);return _0x4d8688[_0xf108('0x53')](_0x2cd05a);}})['then'](function(_0x9611d2){if(_0x9611d2){_0x21d3bd=_0x9611d2[_0xf108('0x39')];if(!_0x511ec5[_0xf108('0x33')][_0xf108('0x3a')](_0xf108('0x3b'))){_0x2cd05a[_0xf108('0x23')]=qs['limit'](_0x511ec5[_0xf108('0x33')]['limit']);_0x2cd05a[_0xf108('0x22')]=qs[_0xf108('0x22')](_0x511ec5[_0xf108('0x33')][_0xf108('0x22')]);}return _0x4d8688[_0xf108('0x53')](_0x2cd05a);}})[_0xf108('0x15')](function(_0x500280){if(_0x500280){return _0x500280?{'count':_0x21d3bd,'rows':_0x500280}:null;}})['then'](respondWithResult(_0x88df2d,null))[_0xf108('0x1f')](handleError(_0x88df2d,null));};exports['addConfiguration']=function(_0x315aee,_0x4dfdf7,_0x46864e){if(_0x315aee['body']['id']){delete _0x315aee[_0xf108('0x4e')]['id'];}return db[_0xf108('0x2f')]['findOne']({'where':{'id':_0x315aee[_0xf108('0x4a')]['id']}})[_0xf108('0x15')](handleEntityNotFound(_0x4dfdf7,null))[_0xf108('0x15')](function(_0x547867){if(_0x547867){_0x315aee[_0xf108('0x4e')][_0xf108('0x54')]=_0x547867['id'];_0x315aee['body'][_0xf108('0x55')]=integrations[_0xf108('0x56')](_0x315aee[_0xf108('0x4e')][_0xf108('0x57')],_0x315aee[_0xf108('0x4e')][_0xf108('0x58')]);_0x315aee[_0xf108('0x4e')][_0xf108('0x59')]=integrations[_0xf108('0x5a')](_0x315aee[_0xf108('0x4e')][_0xf108('0x57')],_0x315aee[_0xf108('0x4e')]['type']);return db['ZendeskConfiguration']['create'](_0x315aee['body'],{'include':[{'model':db['ZendeskField'],'as':_0xf108('0x55')},{'model':db[_0xf108('0x5b')],'as':_0xf108('0x59')}]});}return null;})[_0xf108('0x15')](respondWithResult(_0x4dfdf7,null))[_0xf108('0x1f')](handleError(_0x4dfdf7,null));};exports[_0xf108('0x5c')]=function(_0x1c3fb9,_0x22410c,_0x289f1a){return db[_0xf108('0x2f')][_0xf108('0x50')]({'where':{'id':_0x1c3fb9[_0xf108('0x4a')]['id']},'attributes':['id',_0xf108('0x5d'),_0xf108('0x5e'),_0xf108('0x5f'),'authType','remoteUri']})['then'](handleEntityNotFound(_0x22410c,null))[_0xf108('0x15')](function(_0x22b588){if(_0x22b588){var _0x427f47={'method':_0xf108('0x60'),'uri':util[_0xf108('0x61')](_0xf108('0x62'),_0x22b588[_0xf108('0x63')],_0xf108('0x64')),'json':!![]};switch(_0x22b588[_0xf108('0x65')]){case _0xf108('0x5e'):_0x427f47[_0xf108('0x66')]={'Authorization':util[_0xf108('0x61')]('Basic\x20%s',new Buffer(util[_0xf108('0x61')]('%s:%s',_0x22b588[_0xf108('0x5d')],_0x22b588['password']))[_0xf108('0x67')]('base64'))};break;case _0xf108('0x5f'):_0x427f47[_0xf108('0x66')]={'Authorization':util[_0xf108('0x61')](_0xf108('0x68'),new Buffer(util[_0xf108('0x61')]('%s/token:%s',_0x22b588[_0xf108('0x5d')],_0x22b588['token']))['toString']('base64'))};break;default:throw new db[(_0xf108('0x69'))][(_0xf108('0x6a'))]('Unknown\x20authentication\x20type');}return rp(_0x427f47);}})[_0xf108('0x15')](function(_0x187305){if(_0x187305){var _0x29cfa7=['subject',_0xf108('0x6b'),'group',_0xf108('0x6c')];_[_0xf108('0x6d')](_0x187305['ticket_fields'],function(_0x563949){return _0x29cfa7['includes'](_0x563949[_0xf108('0x58')]);});return{'count':_0x187305[_0xf108('0x64')][_0xf108('0x39')],'rows':_['map'](_0x187305[_0xf108('0x64')],function(_0x3023e4){return{'id':_0x3023e4['id'],'name':_0x3023e4[_0xf108('0x6e')]>0x7?_0x3023e4[_0xf108('0x6f')]:_0x3023e4[_0xf108('0x58')],'custom':_0x3023e4[_0xf108('0x6e')]>0x7?!![]:![],'options':_0x3023e4['system_field_options']?_0x3023e4[_0xf108('0x70')]:[]};})};}})['then'](respondWithResult(_0x22410c,null))['catch'](function(_0x20b488){var _0x3a7828=_0x1c3fb9[_0xf108('0x33')][_0xf108('0x71')]?0x1f4:_0x20b488[_0xf108('0x72')]||0x1f4;logger['error']('getFields,\x20%s,\x20%s,\x20%s',_0xf108('0x5c'),_0x3a7828,JSON[_0xf108('0x1a')](_0x20b488));delete _0x20b488[_0xf108('0x2c')];if(_0x3a7828===0x191){_0x3a7828=0x190;}_0x22410c[_0xf108('0x2a')](_0x3a7828)[_0xf108('0x2d')](_0x1c3fb9[_0xf108('0x33')]['test']?{'message':_0xf108('0x73'),'statusCode':_0x20b488[_0xf108('0x72')]}:_0x20b488);});};
\ No newline at end of file
index b828af5..0f7bf9a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x00d1=['exports','define','ZendeskAccount','int_zendesk_accounts','lodash','util','moment','bluebird','request-promise','./intZendeskAccount.attributes','../../components/integrations/configuration'];(function(_0x562f3b,_0x4c65ae){var _0x1edd55=function(_0xe67e06){while(--_0xe67e06){_0x562f3b['push'](_0x562f3b['shift']());}};_0x1edd55(++_0x4c65ae);}(_0x00d1,0xa9));var _0x100d=function(_0x556bb1,_0x34830d){_0x556bb1=_0x556bb1-0x0;var _0x45455f=_0x00d1[_0x556bb1];return _0x45455f;};'use strict';var _=require(_0x100d('0x0'));var util=require(_0x100d('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x100d('0x2'));var BPromise=require(_0x100d('0x3'));var rp=require(_0x100d('0x4'));var attributes=require(_0x100d('0x5'));var integrations=require(_0x100d('0x6'));module[_0x100d('0x7')]=function(_0x141c9c,_0x524dd9){return _0x141c9c[_0x100d('0x8')](_0x100d('0x9'),attributes,{'tableName':_0x100d('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x99d2=['request-promise','../../components/integrations/configuration','exports','define','ZendeskAccount','int_zendesk_accounts','lodash','util','moment','bluebird'];(function(_0x14e0fb,_0x1d7589){var _0x5cf7f3=function(_0x13f6be){while(--_0x13f6be){_0x14e0fb['push'](_0x14e0fb['shift']());}};_0x5cf7f3(++_0x1d7589);}(_0x99d2,0x1d2));var _0x299d=function(_0x30322a,_0x9c31d){_0x30322a=_0x30322a-0x0;var _0xf2ffa=_0x99d2[_0x30322a];return _0xf2ffa;};'use strict';var _=require(_0x299d('0x0'));var util=require(_0x299d('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x299d('0x2'));var BPromise=require(_0x299d('0x3'));var rp=require(_0x299d('0x4'));var attributes=require('./intZendeskAccount.attributes');var integrations=require(_0x299d('0x5'));module[_0x299d('0x6')]=function(_0x41ce33,_0x42ab3f){return _0x41ce33[_0x299d('0x7')](_0x299d('0x8'),attributes,{'tableName':_0x299d('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a1e7445..063308c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2c09=['error','ZendeskAccount,\x20%s,\x20%s','message','request\x20sent','result','catch','GetZendeskAccount','ZendeskAccount','findAll','options','raw','attributes','limit','include','map','model','debug','find','where','ShowZendeskAccount','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','ZendeskAccount,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x209941,_0x5c9988){var _0x1e8729=function(_0x51a9b8){while(--_0x51a9b8){_0x209941['push'](_0x209941['shift']());}};_0x1e8729(++_0x5c9988);}(_0x2c09,0xf8));var _0x92c0=function(_0x3ab9ee,_0x4a74b8){_0x3ab9ee=_0x3ab9ee-0x0;var _0x82ee88=_0x2c09[_0x3ab9ee];return _0x82ee88;};'use strict';var _=require(_0x92c0('0x0'));var util=require(_0x92c0('0x1'));var moment=require(_0x92c0('0x2'));var BPromise=require(_0x92c0('0x3'));var rs=require(_0x92c0('0x4'));var fs=require('fs');var db=require(_0x92c0('0x5'))['db'];var utils=require(_0x92c0('0x6'));var logger=require(_0x92c0('0x7'))(_0x92c0('0x8'));var config=require(_0x92c0('0x9'));var jayson=require(_0x92c0('0xa'));var client=jayson[_0x92c0('0xb')][_0x92c0('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x1164d1,_0x1d3099,_0x5769f1){return new BPromise(function(_0x4ddb12,_0x1e2dc5){return client[_0x92c0('0xd')](_0x1164d1,_0x5769f1)[_0x92c0('0xe')](function(_0x4165fb){logger[_0x92c0('0xf')]('ZendeskAccount,\x20%s,\x20%s',_0x1d3099,'request\x20sent');logger['debug'](_0x92c0('0x10'),_0x1d3099,'request\x20sent',JSON[_0x92c0('0x11')](_0x4165fb));if(_0x4165fb['error']){if(_0x4165fb[_0x92c0('0x12')]['code']===0x1f4){logger[_0x92c0('0x12')](_0x92c0('0x13'),_0x1d3099,_0x4165fb[_0x92c0('0x12')][_0x92c0('0x14')]);return _0x1e2dc5(_0x4165fb[_0x92c0('0x12')][_0x92c0('0x14')]);}logger[_0x92c0('0x12')](_0x92c0('0x13'),_0x1d3099,_0x4165fb[_0x92c0('0x12')][_0x92c0('0x14')]);return _0x4ddb12(_0x4165fb[_0x92c0('0x12')][_0x92c0('0x14')]);}else{logger[_0x92c0('0xf')](_0x92c0('0x13'),_0x1d3099,_0x92c0('0x15'));_0x4ddb12(_0x4165fb[_0x92c0('0x16')][_0x92c0('0x14')]);}})[_0x92c0('0x17')](function(_0xd77013){logger[_0x92c0('0x12')](_0x92c0('0x13'),_0x1d3099,_0xd77013);_0x1e2dc5(_0xd77013);});});}exports[_0x92c0('0x18')]=function(_0x1c67bc){var _0x3b82e3=this;return new Promise(function(_0x216346,_0x112835){return db[_0x92c0('0x19')][_0x92c0('0x1a')]({'raw':_0x1c67bc['options']?_0x1c67bc[_0x92c0('0x1b')][_0x92c0('0x1c')]===undefined?!![]:![]:!![],'where':_0x1c67bc['options']?_0x1c67bc['options']['where']||null:null,'attributes':_0x1c67bc[_0x92c0('0x1b')]?_0x1c67bc[_0x92c0('0x1b')][_0x92c0('0x1d')]||null:null,'limit':_0x1c67bc['options']?_0x1c67bc[_0x92c0('0x1b')][_0x92c0('0x1e')]||null:null,'include':_0x1c67bc['options']?_0x1c67bc[_0x92c0('0x1b')][_0x92c0('0x1f')]?_[_0x92c0('0x20')](_0x1c67bc[_0x92c0('0x1b')]['include'],function(_0x525854){return{'model':db[_0x525854[_0x92c0('0x21')]],'as':_0x525854['as'],'attributes':_0x525854[_0x92c0('0x1d')],'include':_0x525854[_0x92c0('0x1f')]?_[_0x92c0('0x20')](_0x525854['include'],function(_0x400e5f){return{'model':db[_0x400e5f[_0x92c0('0x21')]],'as':_0x400e5f['as'],'attributes':_0x400e5f[_0x92c0('0x1d')],'include':_0x400e5f[_0x92c0('0x1f')]?_[_0x92c0('0x20')](_0x400e5f[_0x92c0('0x1f')],function(_0x5b1e80){return{'model':db[_0x5b1e80['model']],'as':_0x5b1e80['as'],'attributes':_0x5b1e80[_0x92c0('0x1d')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x28044f){logger['info'](_0x92c0('0x18'),_0x1c67bc);logger[_0x92c0('0x22')]('GetZendeskAccount',_0x1c67bc,JSON[_0x92c0('0x11')](_0x28044f));_0x216346(_0x28044f);})[_0x92c0('0x17')](function(_0x4ed825){logger[_0x92c0('0x12')](_0x92c0('0x18'),_0x4ed825[_0x92c0('0x14')],_0x1c67bc);_0x112835(_0x3b82e3[_0x92c0('0x12')](0x1f4,_0x4ed825[_0x92c0('0x14')]));});});};exports['ShowZendeskAccount']=function(_0x5c97f4){var _0xa080b5=this;return new Promise(function(_0x34ecdc,_0x5e440e){return db['ZendeskAccount'][_0x92c0('0x23')]({'raw':_0x5c97f4[_0x92c0('0x1b')]?_0x5c97f4['options'][_0x92c0('0x1c')]===undefined?!![]:![]:!![],'where':_0x5c97f4[_0x92c0('0x1b')]?_0x5c97f4[_0x92c0('0x1b')][_0x92c0('0x24')]||null:null,'attributes':_0x5c97f4['options']?_0x5c97f4['options'][_0x92c0('0x1d')]||null:null,'include':_0x5c97f4[_0x92c0('0x1b')]?_0x5c97f4[_0x92c0('0x1b')][_0x92c0('0x1f')]?_[_0x92c0('0x20')](_0x5c97f4[_0x92c0('0x1b')]['include'],function(_0x482569){return{'model':db[_0x482569[_0x92c0('0x21')]],'as':_0x482569['as'],'attributes':_0x482569['attributes'],'include':_0x482569['include']?_[_0x92c0('0x20')](_0x482569[_0x92c0('0x1f')],function(_0x17d0b1){return{'model':db[_0x17d0b1[_0x92c0('0x21')]],'as':_0x17d0b1['as'],'attributes':_0x17d0b1[_0x92c0('0x1d')],'include':_0x17d0b1[_0x92c0('0x1f')]?_[_0x92c0('0x20')](_0x17d0b1[_0x92c0('0x1f')],function(_0x201dd2){return{'model':db[_0x201dd2[_0x92c0('0x21')]],'as':_0x201dd2['as'],'attributes':_0x201dd2[_0x92c0('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x92c0('0xe')](function(_0x26b537){logger[_0x92c0('0xf')](_0x92c0('0x25'),_0x5c97f4);logger[_0x92c0('0x22')]('ShowZendeskAccount',_0x5c97f4,JSON[_0x92c0('0x11')](_0x26b537));_0x34ecdc(_0x26b537);})[_0x92c0('0x17')](function(_0x195893){logger[_0x92c0('0x12')](_0x92c0('0x25'),_0x195893[_0x92c0('0x14')],_0x5c97f4);_0x5e440e(_0xa080b5[_0x92c0('0x12')](0x1f4,_0x195893[_0x92c0('0x14')]));});});};
\ No newline at end of file
+var _0xe11b=['../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','info','request\x20sent','debug','ZendeskAccount,\x20%s,\x20%s,\x20%s','error','code','ZendeskAccount,\x20%s,\x20%s','message','result','catch','GetZendeskAccount','findAll','options','raw','where','limit','include','map','attributes','model','stringify','ZendeskAccount','ShowZendeskAccount','lodash','util','moment','bluebird','randomstring'];(function(_0x450ad5,_0x43becc){var _0x6a97d3=function(_0x33a51a){while(--_0x33a51a){_0x450ad5['push'](_0x450ad5['shift']());}};_0x6a97d3(++_0x43becc);}(_0xe11b,0xd9));var _0xbe11=function(_0x36142a,_0x1a9e4c){_0x36142a=_0x36142a-0x0;var _0x1b26e1=_0xe11b[_0x36142a];return _0x1b26e1;};'use strict';var _=require(_0xbe11('0x0'));var util=require(_0xbe11('0x1'));var moment=require(_0xbe11('0x2'));var BPromise=require(_0xbe11('0x3'));var rs=require(_0xbe11('0x4'));var fs=require('fs');var db=require(_0xbe11('0x5'))['db'];var utils=require(_0xbe11('0x6'));var logger=require(_0xbe11('0x7'))(_0xbe11('0x8'));var config=require(_0xbe11('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xbe11('0xa')][_0xbe11('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x6b81de,_0x6e4919,_0x1d1917){return new BPromise(function(_0x3168a4,_0x175ba6){return client[_0xbe11('0xc')](_0x6b81de,_0x1d1917)[_0xbe11('0xd')](function(_0x3e3912){logger[_0xbe11('0xe')]('ZendeskAccount,\x20%s,\x20%s',_0x6e4919,_0xbe11('0xf'));logger[_0xbe11('0x10')](_0xbe11('0x11'),_0x6e4919,_0xbe11('0xf'),JSON['stringify'](_0x3e3912));if(_0x3e3912[_0xbe11('0x12')]){if(_0x3e3912[_0xbe11('0x12')][_0xbe11('0x13')]===0x1f4){logger[_0xbe11('0x12')](_0xbe11('0x14'),_0x6e4919,_0x3e3912[_0xbe11('0x12')][_0xbe11('0x15')]);return _0x175ba6(_0x3e3912['error'][_0xbe11('0x15')]);}logger[_0xbe11('0x12')]('ZendeskAccount,\x20%s,\x20%s',_0x6e4919,_0x3e3912['error'][_0xbe11('0x15')]);return _0x3168a4(_0x3e3912[_0xbe11('0x12')]['message']);}else{logger['info'](_0xbe11('0x14'),_0x6e4919,_0xbe11('0xf'));_0x3168a4(_0x3e3912[_0xbe11('0x16')][_0xbe11('0x15')]);}})[_0xbe11('0x17')](function(_0x34c168){logger[_0xbe11('0x12')]('ZendeskAccount,\x20%s,\x20%s',_0x6e4919,_0x34c168);_0x175ba6(_0x34c168);});});}exports[_0xbe11('0x18')]=function(_0x5d7591){var _0x133d6a=this;return new Promise(function(_0x75079b,_0x4bc55e){return db['ZendeskAccount'][_0xbe11('0x19')]({'raw':_0x5d7591[_0xbe11('0x1a')]?_0x5d7591['options'][_0xbe11('0x1b')]===undefined?!![]:![]:!![],'where':_0x5d7591[_0xbe11('0x1a')]?_0x5d7591[_0xbe11('0x1a')][_0xbe11('0x1c')]||null:null,'attributes':_0x5d7591[_0xbe11('0x1a')]?_0x5d7591[_0xbe11('0x1a')]['attributes']||null:null,'limit':_0x5d7591[_0xbe11('0x1a')]?_0x5d7591['options'][_0xbe11('0x1d')]||null:null,'include':_0x5d7591[_0xbe11('0x1a')]?_0x5d7591['options'][_0xbe11('0x1e')]?_[_0xbe11('0x1f')](_0x5d7591['options'][_0xbe11('0x1e')],function(_0xef1ffc){return{'model':db[_0xef1ffc['model']],'as':_0xef1ffc['as'],'attributes':_0xef1ffc[_0xbe11('0x20')],'include':_0xef1ffc[_0xbe11('0x1e')]?_[_0xbe11('0x1f')](_0xef1ffc[_0xbe11('0x1e')],function(_0x4c3a4e){return{'model':db[_0x4c3a4e['model']],'as':_0x4c3a4e['as'],'attributes':_0x4c3a4e[_0xbe11('0x20')],'include':_0x4c3a4e['include']?_[_0xbe11('0x1f')](_0x4c3a4e['include'],function(_0x1a759a){return{'model':db[_0x1a759a[_0xbe11('0x21')]],'as':_0x1a759a['as'],'attributes':_0x1a759a[_0xbe11('0x20')]};}):[]};}):[]};}):[]:[]})[_0xbe11('0xd')](function(_0x3dcadd){logger[_0xbe11('0xe')](_0xbe11('0x18'),_0x5d7591);logger[_0xbe11('0x10')](_0xbe11('0x18'),_0x5d7591,JSON[_0xbe11('0x22')](_0x3dcadd));_0x75079b(_0x3dcadd);})[_0xbe11('0x17')](function(_0x5e05b2){logger[_0xbe11('0x12')](_0xbe11('0x18'),_0x5e05b2[_0xbe11('0x15')],_0x5d7591);_0x4bc55e(_0x133d6a['error'](0x1f4,_0x5e05b2[_0xbe11('0x15')]));});});};exports['ShowZendeskAccount']=function(_0x3baff1){var _0x481769=this;return new Promise(function(_0x28dda1,_0x2afb69){return db[_0xbe11('0x23')]['find']({'raw':_0x3baff1[_0xbe11('0x1a')]?_0x3baff1[_0xbe11('0x1a')][_0xbe11('0x1b')]===undefined?!![]:![]:!![],'where':_0x3baff1[_0xbe11('0x1a')]?_0x3baff1['options']['where']||null:null,'attributes':_0x3baff1[_0xbe11('0x1a')]?_0x3baff1[_0xbe11('0x1a')][_0xbe11('0x20')]||null:null,'include':_0x3baff1[_0xbe11('0x1a')]?_0x3baff1['options'][_0xbe11('0x1e')]?_[_0xbe11('0x1f')](_0x3baff1[_0xbe11('0x1a')][_0xbe11('0x1e')],function(_0x6b1030){return{'model':db[_0x6b1030['model']],'as':_0x6b1030['as'],'attributes':_0x6b1030[_0xbe11('0x20')],'include':_0x6b1030[_0xbe11('0x1e')]?_[_0xbe11('0x1f')](_0x6b1030[_0xbe11('0x1e')],function(_0x26f791){return{'model':db[_0x26f791[_0xbe11('0x21')]],'as':_0x26f791['as'],'attributes':_0x26f791[_0xbe11('0x20')],'include':_0x26f791[_0xbe11('0x1e')]?_[_0xbe11('0x1f')](_0x26f791[_0xbe11('0x1e')],function(_0x10d86e){return{'model':db[_0x10d86e[_0xbe11('0x21')]],'as':_0x10d86e['as'],'attributes':_0x10d86e[_0xbe11('0x20')]};}):[]};}):[]};}):[]:[]})[_0xbe11('0xd')](function(_0x331c68){logger[_0xbe11('0xe')]('ShowZendeskAccount',_0x3baff1);logger['debug']('ShowZendeskAccount',_0x3baff1,JSON[_0xbe11('0x22')](_0x331c68));_0x28dda1(_0x331c68);})[_0xbe11('0x17')](function(_0x1c7a76){logger[_0xbe11('0x12')](_0xbe11('0x24'),_0x1c7a76[_0xbe11('0x15')],_0x3baff1);_0x2afb69(_0x481769[_0xbe11('0x12')](0x1f4,_0x1c7a76['message']));});});};
\ No newline at end of file
index fb5187a..2356b33 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb53d=['show','/:id/fields','/:id/subjects','getSubjects','/:id/descriptions','getDescriptions','/:id/tags','getTags','post','create','setTags','update','util','path','express','../../components/auth/service','../../config/environment','./intZendeskConfiguration.controller','get','isAuthenticated','index','/:id'];(function(_0x591af4,_0x19a1f3){var _0x3914ed=function(_0x3a20a4){while(--_0x3a20a4){_0x591af4['push'](_0x591af4['shift']());}};_0x3914ed(++_0x19a1f3);}(_0xb53d,0x90));var _0xdb53=function(_0x562545,_0x22dbd8){_0x562545=_0x562545-0x0;var _0x240aea=_0xb53d[_0x562545];return _0x240aea;};'use strict';var multer=require('multer');var util=require(_0xdb53('0x0'));var path=require(_0xdb53('0x1'));var express=require(_0xdb53('0x2'));var router=express['Router']();var auth=require(_0xdb53('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xdb53('0x4'));var controller=require(_0xdb53('0x5'));router[_0xdb53('0x6')]('/',auth[_0xdb53('0x7')](),controller[_0xdb53('0x8')]);router[_0xdb53('0x6')](_0xdb53('0x9'),auth[_0xdb53('0x7')](),controller[_0xdb53('0xa')]);router[_0xdb53('0x6')](_0xdb53('0xb'),auth['isAuthenticated'](),controller['getFields']);router['get'](_0xdb53('0xc'),auth['isAuthenticated'](),controller[_0xdb53('0xd')]);router[_0xdb53('0x6')](_0xdb53('0xe'),auth[_0xdb53('0x7')](),controller[_0xdb53('0xf')]);router[_0xdb53('0x6')](_0xdb53('0x10'),auth[_0xdb53('0x7')](),controller[_0xdb53('0x11')]);router[_0xdb53('0x12')]('/',auth[_0xdb53('0x7')](),controller[_0xdb53('0x13')]);router[_0xdb53('0x12')]('/:id/tags',auth[_0xdb53('0x7')](),controller[_0xdb53('0x14')]);router['put'](_0xdb53('0x9'),auth[_0xdb53('0x7')](),controller[_0xdb53('0x15')]);router['delete'](_0xdb53('0x9'),auth[_0xdb53('0x7')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0xfb2a=['create','update','delete','exports','multer','util','path','express','./intZendeskConfiguration.controller','get','isAuthenticated','/:id','show','/:id/fields','getFields','/:id/subjects','/:id/descriptions','getDescriptions','/:id/tags','post'];(function(_0x3f8e5e,_0x45dd58){var _0x1214cb=function(_0x518f8a){while(--_0x518f8a){_0x3f8e5e['push'](_0x3f8e5e['shift']());}};_0x1214cb(++_0x45dd58);}(_0xfb2a,0x11c));var _0xafb2=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0xfb2a[_0x2f5ac5];return _0x37c9a8;};'use strict';var multer=require(_0xafb2('0x0'));var util=require(_0xafb2('0x1'));var path=require(_0xafb2('0x2'));var express=require(_0xafb2('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xafb2('0x4'));router[_0xafb2('0x5')]('/',auth[_0xafb2('0x6')](),controller['index']);router['get'](_0xafb2('0x7'),auth['isAuthenticated'](),controller[_0xafb2('0x8')]);router[_0xafb2('0x5')](_0xafb2('0x9'),auth['isAuthenticated'](),controller[_0xafb2('0xa')]);router[_0xafb2('0x5')](_0xafb2('0xb'),auth['isAuthenticated'](),controller['getSubjects']);router[_0xafb2('0x5')](_0xafb2('0xc'),auth[_0xafb2('0x6')](),controller[_0xafb2('0xd')]);router[_0xafb2('0x5')](_0xafb2('0xe'),auth[_0xafb2('0x6')](),controller['getTags']);router[_0xafb2('0xf')]('/',auth[_0xafb2('0x6')](),controller[_0xafb2('0x10')]);router['post'](_0xafb2('0xe'),auth[_0xafb2('0x6')](),controller['setTags']);router['put'](_0xafb2('0x7'),auth[_0xafb2('0x6')](),controller[_0xafb2('0x11')]);router[_0xafb2('0x12')](_0xafb2('0x7'),auth[_0xafb2('0x6')](),controller['destroy']);module[_0xafb2('0x13')]=router;
\ No newline at end of file
index 3244134..90c4e28 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc799=['sequelize','exports','STRING'];(function(_0x2df517,_0x5326ea){var _0x4e99af=function(_0x45be9c){while(--_0x45be9c){_0x2df517['push'](_0x2df517['shift']());}};_0x4e99af(++_0x5326ea);}(_0xc799,0xc0));var _0x9c79=function(_0x37a2b8,_0x28b1ec){_0x37a2b8=_0x37a2b8-0x0;var _0x352702=_0xc799[_0x37a2b8];return _0x352702;};'use strict';var Sequelize=require(_0x9c79('0x0'));module[_0x9c79('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x9c79('0x2')]}};
\ No newline at end of file
+var _0xff5f=['exports','STRING','sequelize'];(function(_0x5ad3d9,_0x58c177){var _0x39ce77=function(_0x48589d){while(--_0x48589d){_0x5ad3d9['push'](_0x5ad3d9['shift']());}};_0x39ce77(++_0x58c177);}(_0xff5f,0x101));var _0xfff5=function(_0x1e488b,_0x1995c2){_0x1e488b=_0x1e488b-0x0;var _0x201704=_0xff5f[_0x1e488b];return _0x201704;};'use strict';var Sequelize=require(_0xfff5('0x0'));module[_0xfff5('0x1')]={'name':{'type':Sequelize[_0xfff5('0x2')]},'description':{'type':Sequelize[_0xfff5('0x2')]}};
\ No newline at end of file
index f4b0e18..e62ce5e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x878f=['fields','length','hasOwnProperty','limit','offset','order','sort','where','pick','add','day','filter','map','merge','options','ZendeskConfiguration','findAll','rows','show','params','include','find','update','body','destroy','getFields','findOne','ZendeskField','filters','nolimit','getSubjects','getDescriptions','getTags','setTags','ids','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','desk.js','../../config/logger','../../config/environment','../../mysqldb','jayson/promise','http','then','info','request\x20sent','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','error','code','ZendeskConfiguration,\x20%s,\x20%s','message','result','catch','sendStatus','status','end','json','count','set','Content-Range','apply','reject','stack','name','send','index','rawAttributes','model','keys','dateStart','query','dateEnd','intersection','attributes'];(function(_0x2f5ac5,_0x1ee939){var _0x37c9a8=function(_0x15031f){while(--_0x15031f){_0x2f5ac5['push'](_0x2f5ac5['shift']());}};_0x37c9a8(++_0x1ee939);}(_0x878f,0x173));var _0xf878=function(_0x16a5b3,_0x3c5624){_0x16a5b3=_0x16a5b3-0x0;var _0xa64aa8=_0x878f[_0x16a5b3];return _0xa64aa8;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xf878('0x0'));var moment=require(_0xf878('0x1'));var BPromise=require(_0xf878('0x2'));var Mustache=require(_0xf878('0x3'));var util=require(_0xf878('0x4'));var path=require(_0xf878('0x5'));var sox=require(_0xf878('0x6'));var csv=require(_0xf878('0x7'));var ejs=require(_0xf878('0x8'));var fs=require('fs');var _=require(_0xf878('0x9'));var squel=require(_0xf878('0xa'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xf878('0xb'));var toCsv=require(_0xf878('0x7'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0xf878('0xc'))('api');var utils=require('../../config/utils');var config=require(_0xf878('0xd'));var db=require(_0xf878('0xe'))['db'];var jayson=require(_0xf878('0xf'));var client=jayson['client'][_0xf878('0x10')]({'port':0x232a});function respondWithRpcPromise(_0x1399a3,_0x531b9c,_0xdf76,_0x4f7e7f){return new BPromise(function(_0x31d3d2,_0x97c396){var _0x339c9c=_0x4f7e7f||client;return _0x339c9c['request'](_0x1399a3,_0xdf76)[_0xf878('0x11')](function(_0x38eddf){logger[_0xf878('0x12')]('ZendeskConfiguration,\x20%s,\x20%s',_0x531b9c,_0xf878('0x13'));logger[_0xf878('0x14')](_0xf878('0x15'),_0x531b9c,'request\x20sent',JSON['stringify'](_0x38eddf));if(_0x38eddf[_0xf878('0x16')]){if(_0x38eddf[_0xf878('0x16')][_0xf878('0x17')]===0x1f4){logger[_0xf878('0x16')](_0xf878('0x18'),_0x531b9c,_0x38eddf[_0xf878('0x16')][_0xf878('0x19')]);return _0x97c396(_0x38eddf[_0xf878('0x16')][_0xf878('0x19')]);}logger[_0xf878('0x16')](_0xf878('0x18'),_0x531b9c,_0x38eddf['error'][_0xf878('0x19')]);return _0x31d3d2(_0x38eddf[_0xf878('0x16')][_0xf878('0x19')]);}else{logger[_0xf878('0x12')](_0xf878('0x18'),_0x531b9c,_0xf878('0x13'));_0x31d3d2(_0x38eddf[_0xf878('0x1a')]['message']);}})[_0xf878('0x1b')](function(_0x140866){logger[_0xf878('0x16')]('ZendeskConfiguration,\x20%s,\x20%s',_0x531b9c,_0x140866);_0x97c396(_0x140866);});});}function respondWithStatusCode(_0x432e5d,_0x23590c){_0x23590c=_0x23590c||0xcc;return function(_0xacc440){if(_0xacc440){return _0x432e5d[_0xf878('0x1c')](_0x23590c);}return _0x432e5d[_0xf878('0x1d')](_0x23590c)[_0xf878('0x1e')]();};}function respondWithResult(_0x1cbc92,_0x466c6b){_0x466c6b=_0x466c6b||0xc8;return function(_0x212436){if(_0x212436){return _0x1cbc92[_0xf878('0x1d')](_0x466c6b)[_0xf878('0x1f')](_0x212436);}};}function respondWithFilteredResult(_0x566995,_0x2ac38b){return function(_0x5b0b06){if(_0x5b0b06){var _0xa3d3d3=_0x5b0b06[_0xf878('0x20')],_0x12b32f=_0x2ac38b['offset'],_0x35b3b4=_0x2ac38b['offset']+_0x2ac38b['limit'],_0x280036;if(_0x35b3b4>=_0xa3d3d3){_0x35b3b4=_0xa3d3d3;_0x280036=0xc8;}else{_0x280036=0xce;}_0x566995[_0xf878('0x1d')](_0x280036);return _0x566995[_0xf878('0x21')](_0xf878('0x22'),_0x12b32f+'-'+_0x35b3b4+'/'+_0xa3d3d3)['json'](_0x5b0b06);}return null;};}function patchUpdates(_0xfa3e11){return function(_0x2e2256){try{jsonpatch[_0xf878('0x23')](_0x2e2256,_0xfa3e11,!![]);}catch(_0xd50680){return BPromise[_0xf878('0x24')](_0xd50680);}return _0x2e2256['save']();};}function saveUpdates(_0x502322,_0x9a127d){return function(_0x5d9c97){if(_0x5d9c97){return _0x5d9c97['update'](_0x502322)[_0xf878('0x11')](function(_0x52da83){return _0x52da83;});}return null;};}function removeEntity(_0x969ee3,_0x51afaf){return function(_0x2c61c1){if(_0x2c61c1){return _0x2c61c1['destroy']()[_0xf878('0x11')](function(){_0x969ee3['status'](0xcc)[_0xf878('0x1e')]();});}};}function handleEntityNotFound(_0x2cadd3,_0x233a00){return function(_0x1f5331){if(!_0x1f5331){_0x2cadd3[_0xf878('0x1c')](0x194);}return _0x1f5331;};}function handleError(_0x716782,_0x5aed48){_0x5aed48=_0x5aed48||0x1f4;return function(_0x3b8fa5){logger[_0xf878('0x16')](_0x3b8fa5[_0xf878('0x25')]);if(_0x3b8fa5[_0xf878('0x26')]){delete _0x3b8fa5[_0xf878('0x26')];}_0x716782['status'](_0x5aed48)[_0xf878('0x27')](_0x3b8fa5);};}exports[_0xf878('0x28')]=function(_0x56938d,_0x2e2d93){var _0xd1ad51={},_0x75e8c1={},_0x3a7f0d={'count':0x0,'rows':[]};var _0x1acfb6=db['ZendeskConfiguration'][_0xf878('0x29')];_0x75e8c1[_0xf878('0x2a')]=_[_0xf878('0x2b')](_0x1acfb6);var _0x129805={'dateStart':_0x56938d['query'][_0xf878('0x2c')],'dateEnd':_0x56938d['query']['dateEnd']};delete _0x56938d[_0xf878('0x2d')][_0xf878('0x2c')];delete _0x56938d[_0xf878('0x2d')][_0xf878('0x2e')];_0x75e8c1[_0xf878('0x2d')]=_['keys'](_0x56938d[_0xf878('0x2d')]);_0x75e8c1['filters']=_[_0xf878('0x2f')](_0x75e8c1[_0xf878('0x2a')],_0x75e8c1['query']);_0xd1ad51[_0xf878('0x30')]=_[_0xf878('0x2f')](_0x75e8c1['model'],qs[_0xf878('0x31')](_0x56938d[_0xf878('0x2d')]['fields']));_0xd1ad51[_0xf878('0x30')]=_0xd1ad51[_0xf878('0x30')][_0xf878('0x32')]?_0xd1ad51[_0xf878('0x30')]:_0x75e8c1[_0xf878('0x2a')];if(!_0x56938d[_0xf878('0x2d')][_0xf878('0x33')]('nolimit')){_0xd1ad51[_0xf878('0x34')]=qs[_0xf878('0x34')](_0x56938d['query'][_0xf878('0x34')]);_0xd1ad51['offset']=qs['offset'](_0x56938d[_0xf878('0x2d')][_0xf878('0x35')]);}_0xd1ad51[_0xf878('0x36')]=qs[_0xf878('0x37')](_0x56938d[_0xf878('0x2d')]['sort']);_0xd1ad51[_0xf878('0x38')]=qs['filters'](_[_0xf878('0x39')](_0x56938d[_0xf878('0x2d')],_0x75e8c1['filters']));if(_0x129805['dateStart']){if(_0x129805[_0xf878('0x2e')]){_0x129805[_0xf878('0x2e')]=moment(_0x129805[_0xf878('0x2e')])[_0xf878('0x3a')](0x1,_0xf878('0x3b'));}else{_0x129805[_0xf878('0x2e')]=moment(_0x129805[_0xf878('0x2c')])[_0xf878('0x3a')](0x1,_0xf878('0x3b'));}_['merge'](_0xd1ad51[_0xf878('0x38')],{'createdAt':{'$gte':_0x129805[_0xf878('0x2c')],'$lte':_0x129805[_0xf878('0x2e')]}});}if(_0x56938d[_0xf878('0x2d')][_0xf878('0x3c')]){_0xd1ad51[_0xf878('0x38')]=_['merge'](_0xd1ad51[_0xf878('0x38')],{'$or':_[_0xf878('0x3d')](_0xd1ad51[_0xf878('0x30')],function(_0xc49e70){var _0xe8b571={};_0xe8b571[_0xc49e70]={'$like':'%'+_0x56938d['query'][_0xf878('0x3c')]+'%'};return _0xe8b571;})});}_0xd1ad51=_[_0xf878('0x3e')]({},_0xd1ad51,_0x56938d[_0xf878('0x3f')]);var _0x1ec3aa={'where':_0xd1ad51['where']};return db[_0xf878('0x40')][_0xf878('0x20')](_0x1ec3aa)[_0xf878('0x11')](function(_0x5e3d74){_0x3a7f0d['count']=_0x5e3d74;if(_0x56938d[_0xf878('0x2d')]['includeAll']){_0xd1ad51['include']=[{'all':!![]}];}return db['ZendeskConfiguration'][_0xf878('0x41')](_0xd1ad51);})['then'](function(_0x156fdb){_0x3a7f0d[_0xf878('0x42')]=_0x156fdb;return _0x3a7f0d;})[_0xf878('0x11')](respondWithFilteredResult(_0x2e2d93,_0xd1ad51))[_0xf878('0x1b')](handleError(_0x2e2d93,null));};exports[_0xf878('0x43')]=function(_0xaf01df,_0x1a6e42){var _0x526c89={'raw':![],'where':{'id':_0xaf01df[_0xf878('0x44')]['id']}},_0xb0bf4c={};_0xb0bf4c[_0xf878('0x2a')]=_[_0xf878('0x2b')](db[_0xf878('0x40')]['rawAttributes']);_0xb0bf4c['query']=_[_0xf878('0x2b')](_0xaf01df[_0xf878('0x2d')]);_0xb0bf4c['filters']=_[_0xf878('0x2f')](_0xb0bf4c['model'],_0xb0bf4c[_0xf878('0x2d')]);_0x526c89[_0xf878('0x30')]=_[_0xf878('0x2f')](_0xb0bf4c[_0xf878('0x2a')],qs['fields'](_0xaf01df[_0xf878('0x2d')][_0xf878('0x31')]));_0x526c89[_0xf878('0x30')]=_0x526c89['attributes'][_0xf878('0x32')]?_0x526c89[_0xf878('0x30')]:_0xb0bf4c[_0xf878('0x2a')];if(_0xaf01df[_0xf878('0x2d')]['includeAll']){_0x526c89[_0xf878('0x45')]=[{'all':!![]}];}_0x526c89=_[_0xf878('0x3e')]({},_0x526c89,_0xaf01df[_0xf878('0x3f')]);return db['ZendeskConfiguration'][_0xf878('0x46')](_0x526c89)[_0xf878('0x11')](handleEntityNotFound(_0x1a6e42,null))[_0xf878('0x11')](respondWithResult(_0x1a6e42,null))[_0xf878('0x1b')](handleError(_0x1a6e42,null));};exports['create']=function(_0x5a2666,_0x58b95f){return db[_0xf878('0x40')]['create'](_0x5a2666['body'],{})['then'](respondWithResult(_0x58b95f,0xc9))[_0xf878('0x1b')](handleError(_0x58b95f,null));};exports[_0xf878('0x47')]=function(_0x5caa6d,_0x240578){if(_0x5caa6d[_0xf878('0x48')]['id']){delete _0x5caa6d[_0xf878('0x48')]['id'];}return db['ZendeskConfiguration']['find']({'where':{'id':_0x5caa6d[_0xf878('0x44')]['id']}})['then'](handleEntityNotFound(_0x240578,null))[_0xf878('0x11')](saveUpdates(_0x5caa6d[_0xf878('0x48')],null))[_0xf878('0x11')](respondWithResult(_0x240578,null))[_0xf878('0x1b')](handleError(_0x240578,null));};exports[_0xf878('0x49')]=function(_0x344aa4,_0x57f635){return db[_0xf878('0x40')][_0xf878('0x46')]({'where':{'id':_0x344aa4['params']['id']}})[_0xf878('0x11')](handleEntityNotFound(_0x57f635,null))[_0xf878('0x11')](removeEntity(_0x57f635,null))[_0xf878('0x1b')](handleError(_0x57f635,null));};exports[_0xf878('0x4a')]=function(_0x263f26,_0x36b000,_0x339141){var _0x5acc1c={};var _0x1606d5={};var _0x3657af;var _0xedcf9d;return db['ZendeskConfiguration'][_0xf878('0x4b')]({'where':{'id':_0x263f26['params']['id']}})[_0xf878('0x11')](handleEntityNotFound(_0x36b000,null))[_0xf878('0x11')](function(_0x9c4568){if(_0x9c4568){_0x3657af=_0x9c4568;_0x1606d5[_0xf878('0x2a')]=_[_0xf878('0x2b')](db[_0xf878('0x4c')][_0xf878('0x29')]);_0x1606d5[_0xf878('0x2d')]=_[_0xf878('0x2b')](_0x263f26[_0xf878('0x2d')]);_0x1606d5['filters']=_['intersection'](_0x1606d5['model'],_0x1606d5[_0xf878('0x2d')]);_0x5acc1c['attributes']=_[_0xf878('0x2f')](_0x1606d5[_0xf878('0x2a')],qs['fields'](_0x263f26['query'][_0xf878('0x31')]));_0x5acc1c[_0xf878('0x30')]=_0x5acc1c[_0xf878('0x30')][_0xf878('0x32')]?_0x5acc1c[_0xf878('0x30')]:_0x1606d5[_0xf878('0x2a')];_0x5acc1c[_0xf878('0x36')]=qs[_0xf878('0x37')](_0x263f26[_0xf878('0x2d')][_0xf878('0x37')]);_0x5acc1c[_0xf878('0x38')]=qs[_0xf878('0x4d')](_[_0xf878('0x39')](_0x263f26[_0xf878('0x2d')],_0x1606d5[_0xf878('0x4d')]));if(_0x263f26[_0xf878('0x2d')][_0xf878('0x3c')]){_0x5acc1c[_0xf878('0x38')]=_['merge'](_0x5acc1c[_0xf878('0x38')],{'$or':_['map'](_0x5acc1c[_0xf878('0x30')],function(_0xb57b60){var _0x2e8a57={};_0x2e8a57[_0xb57b60]={'$like':'%'+_0x263f26[_0xf878('0x2d')][_0xf878('0x3c')]+'%'};return _0x2e8a57;})});}_0x5acc1c=_[_0xf878('0x3e')]({},_0x5acc1c,_0x263f26[_0xf878('0x3f')]);return _0x3657af[_0xf878('0x4a')](_0x5acc1c);}})[_0xf878('0x11')](function(_0x55401c){if(_0x55401c){_0xedcf9d=_0x55401c[_0xf878('0x32')];if(!_0x263f26[_0xf878('0x2d')][_0xf878('0x33')](_0xf878('0x4e'))){_0x5acc1c['limit']=qs[_0xf878('0x34')](_0x263f26[_0xf878('0x2d')][_0xf878('0x34')]);_0x5acc1c[_0xf878('0x35')]=qs[_0xf878('0x35')](_0x263f26['query']['offset']);}return _0x3657af[_0xf878('0x4a')](_0x5acc1c);}})[_0xf878('0x11')](function(_0x193f6c){if(_0x193f6c){return _0x193f6c?{'count':_0xedcf9d,'rows':_0x193f6c}:null;}})[_0xf878('0x11')](respondWithResult(_0x36b000,null))[_0xf878('0x1b')](handleError(_0x36b000,null));};exports[_0xf878('0x4f')]=function(_0x140944,_0x3bae55,_0x18622b){var _0x42f157={};var _0x17a2b7={};var _0x147059;var _0x41b455;return db[_0xf878('0x40')][_0xf878('0x4b')]({'where':{'id':_0x140944[_0xf878('0x44')]['id']}})[_0xf878('0x11')](handleEntityNotFound(_0x3bae55,null))['then'](function(_0x3ee3e0){if(_0x3ee3e0){_0x147059=_0x3ee3e0;_0x17a2b7[_0xf878('0x2a')]=_[_0xf878('0x2b')](db[_0xf878('0x4c')][_0xf878('0x29')]);_0x17a2b7[_0xf878('0x2d')]=_[_0xf878('0x2b')](_0x140944[_0xf878('0x2d')]);_0x17a2b7[_0xf878('0x4d')]=_['intersection'](_0x17a2b7[_0xf878('0x2a')],_0x17a2b7[_0xf878('0x2d')]);_0x42f157[_0xf878('0x30')]=_[_0xf878('0x2f')](_0x17a2b7[_0xf878('0x2a')],qs[_0xf878('0x31')](_0x140944[_0xf878('0x2d')]['fields']));_0x42f157['attributes']=_0x42f157[_0xf878('0x30')]['length']?_0x42f157[_0xf878('0x30')]:_0x17a2b7[_0xf878('0x2a')];_0x42f157[_0xf878('0x36')]=qs[_0xf878('0x37')](_0x140944['query'][_0xf878('0x37')]);_0x42f157[_0xf878('0x38')]=qs[_0xf878('0x4d')](_[_0xf878('0x39')](_0x140944['query'],_0x17a2b7[_0xf878('0x4d')]));if(_0x140944['query'][_0xf878('0x3c')]){_0x42f157[_0xf878('0x38')]=_[_0xf878('0x3e')](_0x42f157[_0xf878('0x38')],{'$or':_[_0xf878('0x3d')](_0x42f157['attributes'],function(_0x186f76){var _0x21c5d1={};_0x21c5d1[_0x186f76]={'$like':'%'+_0x140944[_0xf878('0x2d')][_0xf878('0x3c')]+'%'};return _0x21c5d1;})});}_0x42f157=_['merge']({},_0x42f157,_0x140944[_0xf878('0x3f')]);return _0x147059['getSubjects'](_0x42f157);}})[_0xf878('0x11')](function(_0x107456){if(_0x107456){_0x41b455=_0x107456[_0xf878('0x32')];if(!_0x140944[_0xf878('0x2d')][_0xf878('0x33')](_0xf878('0x4e'))){_0x42f157[_0xf878('0x34')]=qs[_0xf878('0x34')](_0x140944['query']['limit']);_0x42f157['offset']=qs[_0xf878('0x35')](_0x140944[_0xf878('0x2d')]['offset']);}return _0x147059['getSubjects'](_0x42f157);}})[_0xf878('0x11')](function(_0x59056c){if(_0x59056c){return _0x59056c?{'count':_0x41b455,'rows':_0x59056c}:null;}})[_0xf878('0x11')](respondWithResult(_0x3bae55,null))[_0xf878('0x1b')](handleError(_0x3bae55,null));};exports[_0xf878('0x50')]=function(_0x1ca178,_0x2be42d,_0x1d4827){var _0xc49d9e={};var _0xff0f3c={};var _0x1daa46;var _0x5cd10b;return db[_0xf878('0x40')][_0xf878('0x4b')]({'where':{'id':_0x1ca178[_0xf878('0x44')]['id']}})['then'](handleEntityNotFound(_0x2be42d,null))[_0xf878('0x11')](function(_0x17b61f){if(_0x17b61f){_0x1daa46=_0x17b61f;_0xff0f3c['model']=_[_0xf878('0x2b')](db[_0xf878('0x4c')][_0xf878('0x29')]);_0xff0f3c[_0xf878('0x2d')]=_[_0xf878('0x2b')](_0x1ca178[_0xf878('0x2d')]);_0xff0f3c[_0xf878('0x4d')]=_[_0xf878('0x2f')](_0xff0f3c['model'],_0xff0f3c[_0xf878('0x2d')]);_0xc49d9e['attributes']=_['intersection'](_0xff0f3c[_0xf878('0x2a')],qs[_0xf878('0x31')](_0x1ca178['query'][_0xf878('0x31')]));_0xc49d9e[_0xf878('0x30')]=_0xc49d9e[_0xf878('0x30')][_0xf878('0x32')]?_0xc49d9e[_0xf878('0x30')]:_0xff0f3c['model'];_0xc49d9e[_0xf878('0x36')]=qs[_0xf878('0x37')](_0x1ca178['query'][_0xf878('0x37')]);_0xc49d9e[_0xf878('0x38')]=qs[_0xf878('0x4d')](_[_0xf878('0x39')](_0x1ca178['query'],_0xff0f3c['filters']));if(_0x1ca178[_0xf878('0x2d')][_0xf878('0x3c')]){_0xc49d9e[_0xf878('0x38')]=_[_0xf878('0x3e')](_0xc49d9e[_0xf878('0x38')],{'$or':_[_0xf878('0x3d')](_0xc49d9e[_0xf878('0x30')],function(_0x2cadd8){var _0x224f10={};_0x224f10[_0x2cadd8]={'$like':'%'+_0x1ca178[_0xf878('0x2d')][_0xf878('0x3c')]+'%'};return _0x224f10;})});}_0xc49d9e=_[_0xf878('0x3e')]({},_0xc49d9e,_0x1ca178[_0xf878('0x3f')]);return _0x1daa46[_0xf878('0x50')](_0xc49d9e);}})[_0xf878('0x11')](function(_0x4abe27){if(_0x4abe27){_0x5cd10b=_0x4abe27[_0xf878('0x32')];if(!_0x1ca178[_0xf878('0x2d')][_0xf878('0x33')](_0xf878('0x4e'))){_0xc49d9e['limit']=qs[_0xf878('0x34')](_0x1ca178['query'][_0xf878('0x34')]);_0xc49d9e[_0xf878('0x35')]=qs['offset'](_0x1ca178[_0xf878('0x2d')][_0xf878('0x35')]);}return _0x1daa46['getDescriptions'](_0xc49d9e);}})['then'](function(_0x138f6f){if(_0x138f6f){return _0x138f6f?{'count':_0x5cd10b,'rows':_0x138f6f}:null;}})[_0xf878('0x11')](respondWithResult(_0x2be42d,null))[_0xf878('0x1b')](handleError(_0x2be42d,null));};exports[_0xf878('0x51')]=function(_0x12b984,_0x3f2cef,_0x1fb2f){var _0x21fbac={};var _0x465eff={};var _0x11c566;var _0x5d03cb;return db[_0xf878('0x40')][_0xf878('0x4b')]({'where':{'id':_0x12b984[_0xf878('0x44')]['id']}})['then'](handleEntityNotFound(_0x3f2cef,null))[_0xf878('0x11')](function(_0x482a2d){if(_0x482a2d){_0x11c566=_0x482a2d;_0x465eff[_0xf878('0x2a')]=_[_0xf878('0x2b')](db['Tag'][_0xf878('0x29')]);_0x465eff[_0xf878('0x2d')]=_[_0xf878('0x2b')](_0x12b984[_0xf878('0x2d')]);_0x465eff[_0xf878('0x4d')]=_[_0xf878('0x2f')](_0x465eff[_0xf878('0x2a')],_0x465eff['query']);_0x21fbac[_0xf878('0x30')]=_[_0xf878('0x2f')](_0x465eff[_0xf878('0x2a')],qs['fields'](_0x12b984['query'][_0xf878('0x31')]));_0x21fbac[_0xf878('0x30')]=_0x21fbac['attributes'][_0xf878('0x32')]?_0x21fbac[_0xf878('0x30')]:_0x465eff['model'];_0x21fbac['order']=qs['sort'](_0x12b984[_0xf878('0x2d')]['sort']);_0x21fbac[_0xf878('0x38')]=qs[_0xf878('0x4d')](_['pick'](_0x12b984[_0xf878('0x2d')],_0x465eff['filters']));if(_0x12b984[_0xf878('0x2d')][_0xf878('0x3c')]){_0x21fbac[_0xf878('0x38')]=_[_0xf878('0x3e')](_0x21fbac[_0xf878('0x38')],{'$or':_[_0xf878('0x3d')](_0x21fbac[_0xf878('0x30')],function(_0x4150f1){var _0x2bc68a={};_0x2bc68a[_0x4150f1]={'$like':'%'+_0x12b984['query'][_0xf878('0x3c')]+'%'};return _0x2bc68a;})});}_0x21fbac=_[_0xf878('0x3e')]({},_0x21fbac,_0x12b984[_0xf878('0x3f')]);return _0x11c566['getTags'](_0x21fbac);}})[_0xf878('0x11')](function(_0x464552){if(_0x464552){_0x5d03cb=_0x464552[_0xf878('0x32')];if(!_0x12b984[_0xf878('0x2d')][_0xf878('0x33')](_0xf878('0x4e'))){_0x21fbac[_0xf878('0x34')]=qs['limit'](_0x12b984[_0xf878('0x2d')][_0xf878('0x34')]);_0x21fbac[_0xf878('0x35')]=qs['offset'](_0x12b984['query'][_0xf878('0x35')]);}return _0x11c566[_0xf878('0x51')](_0x21fbac);}})[_0xf878('0x11')](function(_0x184704){if(_0x184704){return _0x184704?{'count':_0x5d03cb,'rows':_0x184704}:null;}})['then'](respondWithResult(_0x3f2cef,null))['catch'](handleError(_0x3f2cef,null));};exports[_0xf878('0x52')]=function(_0x32fd71,_0x4be287,_0x4b2bec){if(_0x32fd71['body']['id']){delete _0x32fd71[_0xf878('0x48')]['id'];}return db[_0xf878('0x40')][_0xf878('0x4b')]({'where':{'id':_0x32fd71['params']['id']}})[_0xf878('0x11')](handleEntityNotFound(_0x4be287,null))[_0xf878('0x11')](function(_0xdba94b){if(_0xdba94b){return _0xdba94b[_0xf878('0x52')](_0x32fd71[_0xf878('0x48')][_0xf878('0x53')]||[]);}return null;})[_0xf878('0x11')](respondWithResult(_0x4be287,null))[_0xf878('0x1b')](handleError(_0x4be287,null));};
\ No newline at end of file
+var _0xed3c=['findOne','ZendeskField','getSubjects','getDescriptions','getTags','setTags','ids','fast-json-patch','request-promise','moment','bluebird','util','path','sox','lodash','squel','crypto','jsforce','papaparse','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','request','then','info','request\x20sent','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','ZendeskConfiguration,\x20%s,\x20%s','result','catch','sendStatus','status','json','count','offset','limit','set','Content-Range','reject','update','end','stack','name','send','index','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','add','day','filter','merge','map','options','ZendeskConfiguration','include','show','params','length','create','body','find','destroy','getFields'];(function(_0x1ae4fc,_0x2ce43f){var _0xdd3fb1=function(_0x15dac6){while(--_0x15dac6){_0x1ae4fc['push'](_0x1ae4fc['shift']());}};_0xdd3fb1(++_0x2ce43f);}(_0xed3c,0x1a6));var _0xced3=function(_0x22dbd1,_0x47e0bb){_0x22dbd1=_0x22dbd1-0x0;var _0x50a4fd=_0xed3c[_0x22dbd1];return _0x50a4fd;};'use strict';var jsonpatch=require(_0xced3('0x0'));var rp=require(_0xced3('0x1'));var moment=require(_0xced3('0x2'));var BPromise=require(_0xced3('0x3'));var Mustache=require('mustache');var util=require(_0xced3('0x4'));var path=require(_0xced3('0x5'));var sox=require(_0xced3('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xced3('0x7'));var squel=require(_0xced3('0x8'));var crypto=require(_0xced3('0x9'));var jsforce=require(_0xced3('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xced3('0xb'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')('api');var utils=require(_0xced3('0xc'));var config=require(_0xced3('0xd'));var db=require(_0xced3('0xe'))['db'];var jayson=require(_0xced3('0xf'));var client=jayson[_0xced3('0x10')]['http']({'port':0x232a});function respondWithRpcPromise(_0x36ea7f,_0x32a95d,_0x3da0ff,_0x4a4e55){return new BPromise(function(_0x14f61c,_0x19b8c2){var _0x42d879=_0x4a4e55||client;return _0x42d879[_0xced3('0x11')](_0x36ea7f,_0x3da0ff)[_0xced3('0x12')](function(_0x45d9fc){logger[_0xced3('0x13')]('ZendeskConfiguration,\x20%s,\x20%s',_0x32a95d,_0xced3('0x14'));logger['debug'](_0xced3('0x15'),_0x32a95d,_0xced3('0x14'),JSON[_0xced3('0x16')](_0x45d9fc));if(_0x45d9fc[_0xced3('0x17')]){if(_0x45d9fc['error'][_0xced3('0x18')]===0x1f4){logger[_0xced3('0x17')]('ZendeskConfiguration,\x20%s,\x20%s',_0x32a95d,_0x45d9fc[_0xced3('0x17')][_0xced3('0x19')]);return _0x19b8c2(_0x45d9fc[_0xced3('0x17')][_0xced3('0x19')]);}logger['error'](_0xced3('0x1a'),_0x32a95d,_0x45d9fc['error'][_0xced3('0x19')]);return _0x14f61c(_0x45d9fc[_0xced3('0x17')][_0xced3('0x19')]);}else{logger[_0xced3('0x13')](_0xced3('0x1a'),_0x32a95d,_0xced3('0x14'));_0x14f61c(_0x45d9fc[_0xced3('0x1b')][_0xced3('0x19')]);}})[_0xced3('0x1c')](function(_0x17c011){logger[_0xced3('0x17')]('ZendeskConfiguration,\x20%s,\x20%s',_0x32a95d,_0x17c011);_0x19b8c2(_0x17c011);});});}function respondWithStatusCode(_0x5b8b1f,_0x5e8c44){_0x5e8c44=_0x5e8c44||0xcc;return function(_0x1e8450){if(_0x1e8450){return _0x5b8b1f[_0xced3('0x1d')](_0x5e8c44);}return _0x5b8b1f[_0xced3('0x1e')](_0x5e8c44)['end']();};}function respondWithResult(_0x19d15c,_0x30d984){_0x30d984=_0x30d984||0xc8;return function(_0x526854){if(_0x526854){return _0x19d15c['status'](_0x30d984)[_0xced3('0x1f')](_0x526854);}};}function respondWithFilteredResult(_0x101708,_0x219fa8){return function(_0x15c6c5){if(_0x15c6c5){var _0x50f7c1=_0x15c6c5[_0xced3('0x20')],_0x1905a3=_0x219fa8['offset'],_0x23f92b=_0x219fa8[_0xced3('0x21')]+_0x219fa8[_0xced3('0x22')],_0x4fc285;if(_0x23f92b>=_0x50f7c1){_0x23f92b=_0x50f7c1;_0x4fc285=0xc8;}else{_0x4fc285=0xce;}_0x101708[_0xced3('0x1e')](_0x4fc285);return _0x101708[_0xced3('0x23')](_0xced3('0x24'),_0x1905a3+'-'+_0x23f92b+'/'+_0x50f7c1)['json'](_0x15c6c5);}return null;};}function patchUpdates(_0x5454c0){return function(_0x36b1fe){try{jsonpatch['apply'](_0x36b1fe,_0x5454c0,!![]);}catch(_0x2ab8a8){return BPromise[_0xced3('0x25')](_0x2ab8a8);}return _0x36b1fe['save']();};}function saveUpdates(_0x3db664,_0x4024fa){return function(_0x196956){if(_0x196956){return _0x196956[_0xced3('0x26')](_0x3db664)[_0xced3('0x12')](function(_0x38f594){return _0x38f594;});}return null;};}function removeEntity(_0x895a32,_0x41d003){return function(_0x116cc7){if(_0x116cc7){return _0x116cc7['destroy']()[_0xced3('0x12')](function(){_0x895a32[_0xced3('0x1e')](0xcc)[_0xced3('0x27')]();});}};}function handleEntityNotFound(_0x5867af,_0x111769){return function(_0x21e4a2){if(!_0x21e4a2){_0x5867af[_0xced3('0x1d')](0x194);}return _0x21e4a2;};}function handleError(_0x4f2439,_0xc8e557){_0xc8e557=_0xc8e557||0x1f4;return function(_0x30cd7f){logger[_0xced3('0x17')](_0x30cd7f[_0xced3('0x28')]);if(_0x30cd7f[_0xced3('0x29')]){delete _0x30cd7f[_0xced3('0x29')];}_0x4f2439[_0xced3('0x1e')](_0xc8e557)[_0xced3('0x2a')](_0x30cd7f);};}exports[_0xced3('0x2b')]=function(_0x25a408,_0x2e6383){var _0xcd0fe3={},_0x29a172={},_0x565e70={'count':0x0,'rows':[]};var _0x5b92fc=db['ZendeskConfiguration'][_0xced3('0x2c')];_0x29a172[_0xced3('0x2d')]=_[_0xced3('0x2e')](_0x5b92fc);var _0x8322a8={'dateStart':_0x25a408[_0xced3('0x2f')][_0xced3('0x30')],'dateEnd':_0x25a408[_0xced3('0x2f')][_0xced3('0x31')]};delete _0x25a408[_0xced3('0x2f')][_0xced3('0x30')];delete _0x25a408['query'][_0xced3('0x31')];_0x29a172[_0xced3('0x2f')]=_['keys'](_0x25a408[_0xced3('0x2f')]);_0x29a172[_0xced3('0x32')]=_[_0xced3('0x33')](_0x29a172['model'],_0x29a172['query']);_0xcd0fe3[_0xced3('0x34')]=_['intersection'](_0x29a172[_0xced3('0x2d')],qs[_0xced3('0x35')](_0x25a408['query'][_0xced3('0x35')]));_0xcd0fe3[_0xced3('0x34')]=_0xcd0fe3[_0xced3('0x34')]['length']?_0xcd0fe3[_0xced3('0x34')]:_0x29a172['model'];if(!_0x25a408['query'][_0xced3('0x36')](_0xced3('0x37'))){_0xcd0fe3[_0xced3('0x22')]=qs['limit'](_0x25a408[_0xced3('0x2f')][_0xced3('0x22')]);_0xcd0fe3[_0xced3('0x21')]=qs[_0xced3('0x21')](_0x25a408[_0xced3('0x2f')][_0xced3('0x21')]);}_0xcd0fe3[_0xced3('0x38')]=qs[_0xced3('0x39')](_0x25a408[_0xced3('0x2f')][_0xced3('0x39')]);_0xcd0fe3[_0xced3('0x3a')]=qs[_0xced3('0x32')](_[_0xced3('0x3b')](_0x25a408[_0xced3('0x2f')],_0x29a172[_0xced3('0x32')]));if(_0x8322a8['dateStart']){if(_0x8322a8[_0xced3('0x31')]){_0x8322a8[_0xced3('0x31')]=moment(_0x8322a8[_0xced3('0x31')])[_0xced3('0x3c')](0x1,_0xced3('0x3d'));}else{_0x8322a8[_0xced3('0x31')]=moment(_0x8322a8[_0xced3('0x30')])[_0xced3('0x3c')](0x1,_0xced3('0x3d'));}_['merge'](_0xcd0fe3[_0xced3('0x3a')],{'createdAt':{'$gte':_0x8322a8['dateStart'],'$lte':_0x8322a8[_0xced3('0x31')]}});}if(_0x25a408[_0xced3('0x2f')][_0xced3('0x3e')]){_0xcd0fe3['where']=_[_0xced3('0x3f')](_0xcd0fe3[_0xced3('0x3a')],{'$or':_[_0xced3('0x40')](_0xcd0fe3[_0xced3('0x34')],function(_0x5373ab){var _0x102b21={};_0x102b21[_0x5373ab]={'$like':'%'+_0x25a408[_0xced3('0x2f')][_0xced3('0x3e')]+'%'};return _0x102b21;})});}_0xcd0fe3=_[_0xced3('0x3f')]({},_0xcd0fe3,_0x25a408[_0xced3('0x41')]);var _0x563684={'where':_0xcd0fe3[_0xced3('0x3a')]};return db[_0xced3('0x42')][_0xced3('0x20')](_0x563684)[_0xced3('0x12')](function(_0x334474){_0x565e70[_0xced3('0x20')]=_0x334474;if(_0x25a408[_0xced3('0x2f')]['includeAll']){_0xcd0fe3[_0xced3('0x43')]=[{'all':!![]}];}return db[_0xced3('0x42')]['findAll'](_0xcd0fe3);})['then'](function(_0x140df2){_0x565e70['rows']=_0x140df2;return _0x565e70;})[_0xced3('0x12')](respondWithFilteredResult(_0x2e6383,_0xcd0fe3))[_0xced3('0x1c')](handleError(_0x2e6383,null));};exports[_0xced3('0x44')]=function(_0x3e646b,_0x2c70e3){var _0x1b3396={'raw':![],'where':{'id':_0x3e646b[_0xced3('0x45')]['id']}},_0x3700ed={};_0x3700ed[_0xced3('0x2d')]=_['keys'](db[_0xced3('0x42')][_0xced3('0x2c')]);_0x3700ed[_0xced3('0x2f')]=_[_0xced3('0x2e')](_0x3e646b[_0xced3('0x2f')]);_0x3700ed[_0xced3('0x32')]=_['intersection'](_0x3700ed[_0xced3('0x2d')],_0x3700ed[_0xced3('0x2f')]);_0x1b3396[_0xced3('0x34')]=_[_0xced3('0x33')](_0x3700ed[_0xced3('0x2d')],qs[_0xced3('0x35')](_0x3e646b[_0xced3('0x2f')][_0xced3('0x35')]));_0x1b3396[_0xced3('0x34')]=_0x1b3396[_0xced3('0x34')][_0xced3('0x46')]?_0x1b3396[_0xced3('0x34')]:_0x3700ed['model'];if(_0x3e646b[_0xced3('0x2f')]['includeAll']){_0x1b3396[_0xced3('0x43')]=[{'all':!![]}];}_0x1b3396=_[_0xced3('0x3f')]({},_0x1b3396,_0x3e646b[_0xced3('0x41')]);return db['ZendeskConfiguration']['find'](_0x1b3396)[_0xced3('0x12')](handleEntityNotFound(_0x2c70e3,null))[_0xced3('0x12')](respondWithResult(_0x2c70e3,null))['catch'](handleError(_0x2c70e3,null));};exports[_0xced3('0x47')]=function(_0x4ae67d,_0x3dba69){return db[_0xced3('0x42')]['create'](_0x4ae67d[_0xced3('0x48')],{})[_0xced3('0x12')](respondWithResult(_0x3dba69,0xc9))[_0xced3('0x1c')](handleError(_0x3dba69,null));};exports['update']=function(_0x12c991,_0x4cfd9a){if(_0x12c991[_0xced3('0x48')]['id']){delete _0x12c991[_0xced3('0x48')]['id'];}return db[_0xced3('0x42')][_0xced3('0x49')]({'where':{'id':_0x12c991[_0xced3('0x45')]['id']}})[_0xced3('0x12')](handleEntityNotFound(_0x4cfd9a,null))[_0xced3('0x12')](saveUpdates(_0x12c991[_0xced3('0x48')],null))[_0xced3('0x12')](respondWithResult(_0x4cfd9a,null))[_0xced3('0x1c')](handleError(_0x4cfd9a,null));};exports[_0xced3('0x4a')]=function(_0x4b14dd,_0x3859e8){return db[_0xced3('0x42')][_0xced3('0x49')]({'where':{'id':_0x4b14dd[_0xced3('0x45')]['id']}})[_0xced3('0x12')](handleEntityNotFound(_0x3859e8,null))[_0xced3('0x12')](removeEntity(_0x3859e8,null))['catch'](handleError(_0x3859e8,null));};exports[_0xced3('0x4b')]=function(_0x171081,_0x21ea6a,_0x440a0f){var _0x443469={};var _0x1537ca={};var _0x56b18e;var _0x995e70;return db['ZendeskConfiguration'][_0xced3('0x4c')]({'where':{'id':_0x171081['params']['id']}})[_0xced3('0x12')](handleEntityNotFound(_0x21ea6a,null))[_0xced3('0x12')](function(_0x48f1b3){if(_0x48f1b3){_0x56b18e=_0x48f1b3;_0x1537ca[_0xced3('0x2d')]=_[_0xced3('0x2e')](db[_0xced3('0x4d')][_0xced3('0x2c')]);_0x1537ca[_0xced3('0x2f')]=_[_0xced3('0x2e')](_0x171081[_0xced3('0x2f')]);_0x1537ca[_0xced3('0x32')]=_[_0xced3('0x33')](_0x1537ca[_0xced3('0x2d')],_0x1537ca[_0xced3('0x2f')]);_0x443469[_0xced3('0x34')]=_[_0xced3('0x33')](_0x1537ca['model'],qs[_0xced3('0x35')](_0x171081[_0xced3('0x2f')][_0xced3('0x35')]));_0x443469[_0xced3('0x34')]=_0x443469['attributes'][_0xced3('0x46')]?_0x443469[_0xced3('0x34')]:_0x1537ca[_0xced3('0x2d')];_0x443469[_0xced3('0x38')]=qs[_0xced3('0x39')](_0x171081[_0xced3('0x2f')][_0xced3('0x39')]);_0x443469['where']=qs[_0xced3('0x32')](_[_0xced3('0x3b')](_0x171081['query'],_0x1537ca[_0xced3('0x32')]));if(_0x171081[_0xced3('0x2f')][_0xced3('0x3e')]){_0x443469[_0xced3('0x3a')]=_['merge'](_0x443469[_0xced3('0x3a')],{'$or':_[_0xced3('0x40')](_0x443469[_0xced3('0x34')],function(_0x3eb9dd){var _0x3992d2={};_0x3992d2[_0x3eb9dd]={'$like':'%'+_0x171081[_0xced3('0x2f')][_0xced3('0x3e')]+'%'};return _0x3992d2;})});}_0x443469=_[_0xced3('0x3f')]({},_0x443469,_0x171081[_0xced3('0x41')]);return _0x56b18e[_0xced3('0x4b')](_0x443469);}})['then'](function(_0x3d39de){if(_0x3d39de){_0x995e70=_0x3d39de[_0xced3('0x46')];if(!_0x171081['query']['hasOwnProperty'](_0xced3('0x37'))){_0x443469['limit']=qs[_0xced3('0x22')](_0x171081[_0xced3('0x2f')]['limit']);_0x443469[_0xced3('0x21')]=qs[_0xced3('0x21')](_0x171081['query'][_0xced3('0x21')]);}return _0x56b18e['getFields'](_0x443469);}})[_0xced3('0x12')](function(_0x58b66b){if(_0x58b66b){return _0x58b66b?{'count':_0x995e70,'rows':_0x58b66b}:null;}})[_0xced3('0x12')](respondWithResult(_0x21ea6a,null))[_0xced3('0x1c')](handleError(_0x21ea6a,null));};exports[_0xced3('0x4e')]=function(_0x4f2035,_0x189da2,_0xdacc2c){var _0x21288d={};var _0x4f29b6={};var _0x3f8d6f;var _0x1abe1a;return db[_0xced3('0x42')][_0xced3('0x4c')]({'where':{'id':_0x4f2035['params']['id']}})['then'](handleEntityNotFound(_0x189da2,null))[_0xced3('0x12')](function(_0x17af2c){if(_0x17af2c){_0x3f8d6f=_0x17af2c;_0x4f29b6[_0xced3('0x2d')]=_[_0xced3('0x2e')](db[_0xced3('0x4d')][_0xced3('0x2c')]);_0x4f29b6['query']=_[_0xced3('0x2e')](_0x4f2035['query']);_0x4f29b6[_0xced3('0x32')]=_[_0xced3('0x33')](_0x4f29b6[_0xced3('0x2d')],_0x4f29b6[_0xced3('0x2f')]);_0x21288d['attributes']=_[_0xced3('0x33')](_0x4f29b6[_0xced3('0x2d')],qs['fields'](_0x4f2035['query'][_0xced3('0x35')]));_0x21288d[_0xced3('0x34')]=_0x21288d[_0xced3('0x34')][_0xced3('0x46')]?_0x21288d[_0xced3('0x34')]:_0x4f29b6['model'];_0x21288d[_0xced3('0x38')]=qs[_0xced3('0x39')](_0x4f2035[_0xced3('0x2f')][_0xced3('0x39')]);_0x21288d['where']=qs[_0xced3('0x32')](_[_0xced3('0x3b')](_0x4f2035[_0xced3('0x2f')],_0x4f29b6[_0xced3('0x32')]));if(_0x4f2035[_0xced3('0x2f')][_0xced3('0x3e')]){_0x21288d[_0xced3('0x3a')]=_[_0xced3('0x3f')](_0x21288d[_0xced3('0x3a')],{'$or':_[_0xced3('0x40')](_0x21288d['attributes'],function(_0x2ac06d){var _0x1e7ff1={};_0x1e7ff1[_0x2ac06d]={'$like':'%'+_0x4f2035['query'][_0xced3('0x3e')]+'%'};return _0x1e7ff1;})});}_0x21288d=_[_0xced3('0x3f')]({},_0x21288d,_0x4f2035[_0xced3('0x41')]);return _0x3f8d6f[_0xced3('0x4e')](_0x21288d);}})[_0xced3('0x12')](function(_0x5c2302){if(_0x5c2302){_0x1abe1a=_0x5c2302[_0xced3('0x46')];if(!_0x4f2035[_0xced3('0x2f')]['hasOwnProperty'](_0xced3('0x37'))){_0x21288d[_0xced3('0x22')]=qs[_0xced3('0x22')](_0x4f2035[_0xced3('0x2f')][_0xced3('0x22')]);_0x21288d[_0xced3('0x21')]=qs['offset'](_0x4f2035[_0xced3('0x2f')][_0xced3('0x21')]);}return _0x3f8d6f[_0xced3('0x4e')](_0x21288d);}})[_0xced3('0x12')](function(_0x1a0d52){if(_0x1a0d52){return _0x1a0d52?{'count':_0x1abe1a,'rows':_0x1a0d52}:null;}})[_0xced3('0x12')](respondWithResult(_0x189da2,null))['catch'](handleError(_0x189da2,null));};exports['getDescriptions']=function(_0xe9ef4e,_0xb6530d,_0x32d7c2){var _0x131658={};var _0x86551={};var _0x19316c;var _0x6037a8;return db['ZendeskConfiguration'][_0xced3('0x4c')]({'where':{'id':_0xe9ef4e[_0xced3('0x45')]['id']}})['then'](handleEntityNotFound(_0xb6530d,null))['then'](function(_0x12de12){if(_0x12de12){_0x19316c=_0x12de12;_0x86551[_0xced3('0x2d')]=_[_0xced3('0x2e')](db[_0xced3('0x4d')][_0xced3('0x2c')]);_0x86551['query']=_[_0xced3('0x2e')](_0xe9ef4e['query']);_0x86551[_0xced3('0x32')]=_[_0xced3('0x33')](_0x86551[_0xced3('0x2d')],_0x86551[_0xced3('0x2f')]);_0x131658[_0xced3('0x34')]=_['intersection'](_0x86551[_0xced3('0x2d')],qs[_0xced3('0x35')](_0xe9ef4e[_0xced3('0x2f')][_0xced3('0x35')]));_0x131658['attributes']=_0x131658['attributes'][_0xced3('0x46')]?_0x131658[_0xced3('0x34')]:_0x86551[_0xced3('0x2d')];_0x131658[_0xced3('0x38')]=qs[_0xced3('0x39')](_0xe9ef4e[_0xced3('0x2f')][_0xced3('0x39')]);_0x131658[_0xced3('0x3a')]=qs['filters'](_['pick'](_0xe9ef4e[_0xced3('0x2f')],_0x86551[_0xced3('0x32')]));if(_0xe9ef4e[_0xced3('0x2f')][_0xced3('0x3e')]){_0x131658[_0xced3('0x3a')]=_[_0xced3('0x3f')](_0x131658[_0xced3('0x3a')],{'$or':_[_0xced3('0x40')](_0x131658[_0xced3('0x34')],function(_0x3b8160){var _0xf65324={};_0xf65324[_0x3b8160]={'$like':'%'+_0xe9ef4e['query'][_0xced3('0x3e')]+'%'};return _0xf65324;})});}_0x131658=_['merge']({},_0x131658,_0xe9ef4e[_0xced3('0x41')]);return _0x19316c[_0xced3('0x4f')](_0x131658);}})[_0xced3('0x12')](function(_0x3ad616){if(_0x3ad616){_0x6037a8=_0x3ad616[_0xced3('0x46')];if(!_0xe9ef4e[_0xced3('0x2f')][_0xced3('0x36')](_0xced3('0x37'))){_0x131658[_0xced3('0x22')]=qs[_0xced3('0x22')](_0xe9ef4e[_0xced3('0x2f')][_0xced3('0x22')]);_0x131658[_0xced3('0x21')]=qs[_0xced3('0x21')](_0xe9ef4e[_0xced3('0x2f')][_0xced3('0x21')]);}return _0x19316c[_0xced3('0x4f')](_0x131658);}})['then'](function(_0x55a91f){if(_0x55a91f){return _0x55a91f?{'count':_0x6037a8,'rows':_0x55a91f}:null;}})['then'](respondWithResult(_0xb6530d,null))[_0xced3('0x1c')](handleError(_0xb6530d,null));};exports[_0xced3('0x50')]=function(_0x3acb1d,_0x436da5,_0x35133c){var _0x1f9e9c={};var _0x587891={};var _0x40d363;var _0x24a09c;return db['ZendeskConfiguration']['findOne']({'where':{'id':_0x3acb1d[_0xced3('0x45')]['id']}})[_0xced3('0x12')](handleEntityNotFound(_0x436da5,null))[_0xced3('0x12')](function(_0x4412cc){if(_0x4412cc){_0x40d363=_0x4412cc;_0x587891[_0xced3('0x2d')]=_[_0xced3('0x2e')](db['Tag'][_0xced3('0x2c')]);_0x587891['query']=_[_0xced3('0x2e')](_0x3acb1d[_0xced3('0x2f')]);_0x587891[_0xced3('0x32')]=_['intersection'](_0x587891['model'],_0x587891['query']);_0x1f9e9c[_0xced3('0x34')]=_[_0xced3('0x33')](_0x587891['model'],qs[_0xced3('0x35')](_0x3acb1d[_0xced3('0x2f')]['fields']));_0x1f9e9c[_0xced3('0x34')]=_0x1f9e9c[_0xced3('0x34')][_0xced3('0x46')]?_0x1f9e9c[_0xced3('0x34')]:_0x587891[_0xced3('0x2d')];_0x1f9e9c[_0xced3('0x38')]=qs[_0xced3('0x39')](_0x3acb1d[_0xced3('0x2f')]['sort']);_0x1f9e9c[_0xced3('0x3a')]=qs[_0xced3('0x32')](_[_0xced3('0x3b')](_0x3acb1d[_0xced3('0x2f')],_0x587891[_0xced3('0x32')]));if(_0x3acb1d[_0xced3('0x2f')][_0xced3('0x3e')]){_0x1f9e9c[_0xced3('0x3a')]=_[_0xced3('0x3f')](_0x1f9e9c[_0xced3('0x3a')],{'$or':_[_0xced3('0x40')](_0x1f9e9c[_0xced3('0x34')],function(_0x425057){var _0xfe27a5={};_0xfe27a5[_0x425057]={'$like':'%'+_0x3acb1d[_0xced3('0x2f')]['filter']+'%'};return _0xfe27a5;})});}_0x1f9e9c=_[_0xced3('0x3f')]({},_0x1f9e9c,_0x3acb1d[_0xced3('0x41')]);return _0x40d363[_0xced3('0x50')](_0x1f9e9c);}})[_0xced3('0x12')](function(_0x2c59f5){if(_0x2c59f5){_0x24a09c=_0x2c59f5['length'];if(!_0x3acb1d['query'][_0xced3('0x36')](_0xced3('0x37'))){_0x1f9e9c[_0xced3('0x22')]=qs[_0xced3('0x22')](_0x3acb1d[_0xced3('0x2f')][_0xced3('0x22')]);_0x1f9e9c[_0xced3('0x21')]=qs['offset'](_0x3acb1d['query'][_0xced3('0x21')]);}return _0x40d363['getTags'](_0x1f9e9c);}})[_0xced3('0x12')](function(_0x229cba){if(_0x229cba){return _0x229cba?{'count':_0x24a09c,'rows':_0x229cba}:null;}})[_0xced3('0x12')](respondWithResult(_0x436da5,null))[_0xced3('0x1c')](handleError(_0x436da5,null));};exports[_0xced3('0x51')]=function(_0xca87c4,_0xaec7bf,_0x128974){if(_0xca87c4[_0xced3('0x48')]['id']){delete _0xca87c4[_0xced3('0x48')]['id'];}return db[_0xced3('0x42')][_0xced3('0x4c')]({'where':{'id':_0xca87c4[_0xced3('0x45')]['id']}})[_0xced3('0x12')](handleEntityNotFound(_0xaec7bf,null))['then'](function(_0x4b2f62){if(_0x4b2f62){return _0x4b2f62[_0xced3('0x51')](_0xca87c4['body'][_0xced3('0x52')]||[]);}return null;})['then'](respondWithResult(_0xaec7bf,null))['catch'](handleError(_0xaec7bf,null));};
\ No newline at end of file
index 67dc38f..9c018e0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaefb=['lodash','util','moment','bluebird','request-promise','./intZendeskConfiguration.attributes','exports','int_zendesk_configurations'];(function(_0x409353,_0xe9f04d){var _0x4f4b59=function(_0x64b587){while(--_0x64b587){_0x409353['push'](_0x409353['shift']());}};_0x4f4b59(++_0xe9f04d);}(_0xaefb,0x68));var _0xbaef=function(_0x2dc53c,_0x4a29ce){_0x2dc53c=_0x2dc53c-0x0;var _0x32ea88=_0xaefb[_0x2dc53c];return _0x32ea88;};'use strict';var _=require(_0xbaef('0x0'));var util=require(_0xbaef('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xbaef('0x2'));var BPromise=require(_0xbaef('0x3'));var rp=require(_0xbaef('0x4'));var attributes=require(_0xbaef('0x5'));module[_0xbaef('0x6')]=function(_0x1e6586,_0x2e55ba){return _0x1e6586['define']('ZendeskConfiguration',attributes,{'tableName':_0xbaef('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xcba6=['bluebird','request-promise','./intZendeskConfiguration.attributes','exports','define','int_zendesk_configurations','lodash','util','../../config/logger','moment'];(function(_0x2ddd52,_0x4e3b17){var _0x4bb4ec=function(_0x41905f){while(--_0x41905f){_0x2ddd52['push'](_0x2ddd52['shift']());}};_0x4bb4ec(++_0x4e3b17);}(_0xcba6,0x132));var _0x6cba=function(_0x17928f,_0x4ad33f){_0x17928f=_0x17928f-0x0;var _0x500b63=_0xcba6[_0x17928f];return _0x500b63;};'use strict';var _=require(_0x6cba('0x0'));var util=require(_0x6cba('0x1'));var logger=require(_0x6cba('0x2'))('api');var moment=require(_0x6cba('0x3'));var BPromise=require(_0x6cba('0x4'));var rp=require(_0x6cba('0x5'));var attributes=require(_0x6cba('0x6'));module[_0x6cba('0x7')]=function(_0x25443f,_0x58376c){return _0x25443f[_0x6cba('0x8')]('ZendeskConfiguration',attributes,{'tableName':_0x6cba('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2df1d37..99d96ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf3e2=['../../config/logger','rpc','../../config/environment','client','http','request','then','info','request\x20sent','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','ZendeskConfiguration,\x20%s,\x20%s','message','catch','lodash','util','moment','randomstring'];(function(_0x2f6bb5,_0x42be06){var _0x4e745c=function(_0x3a9533){while(--_0x3a9533){_0x2f6bb5['push'](_0x2f6bb5['shift']());}};_0x4e745c(++_0x42be06);}(_0xf3e2,0xf8));var _0x2f3e=function(_0x1f9e17,_0x127015){_0x1f9e17=_0x1f9e17-0x0;var _0x4fda50=_0xf3e2[_0x1f9e17];return _0x4fda50;};'use strict';var _=require(_0x2f3e('0x0'));var util=require(_0x2f3e('0x1'));var moment=require(_0x2f3e('0x2'));var BPromise=require('bluebird');var rs=require(_0x2f3e('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x2f3e('0x4'))(_0x2f3e('0x5'));var config=require(_0x2f3e('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x2f3e('0x7')][_0x2f3e('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x2c520f,_0x35c460,_0x218a09){return new BPromise(function(_0x1ac30e,_0x257207){return client[_0x2f3e('0x9')](_0x2c520f,_0x218a09)[_0x2f3e('0xa')](function(_0x5c19cd){logger[_0x2f3e('0xb')]('ZendeskConfiguration,\x20%s,\x20%s',_0x35c460,_0x2f3e('0xc'));logger[_0x2f3e('0xd')](_0x2f3e('0xe'),_0x35c460,_0x2f3e('0xc'),JSON[_0x2f3e('0xf')](_0x5c19cd));if(_0x5c19cd[_0x2f3e('0x10')]){if(_0x5c19cd[_0x2f3e('0x10')][_0x2f3e('0x11')]===0x1f4){logger['error'](_0x2f3e('0x12'),_0x35c460,_0x5c19cd['error'][_0x2f3e('0x13')]);return _0x257207(_0x5c19cd[_0x2f3e('0x10')][_0x2f3e('0x13')]);}logger[_0x2f3e('0x10')](_0x2f3e('0x12'),_0x35c460,_0x5c19cd[_0x2f3e('0x10')][_0x2f3e('0x13')]);return _0x1ac30e(_0x5c19cd[_0x2f3e('0x10')]['message']);}else{logger['info'](_0x2f3e('0x12'),_0x35c460,'request\x20sent');_0x1ac30e(_0x5c19cd['result'][_0x2f3e('0x13')]);}})[_0x2f3e('0x14')](function(_0x243b87){logger[_0x2f3e('0x10')](_0x2f3e('0x12'),_0x35c460,_0x243b87);_0x257207(_0x243b87);});});}
\ No newline at end of file
+var _0x158f=['request\x20sent','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','error','code','ZendeskConfiguration,\x20%s,\x20%s','message','lodash','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info'];(function(_0xa05ab8,_0x33ac16){var _0x263200=function(_0x17ee6b){while(--_0x17ee6b){_0xa05ab8['push'](_0xa05ab8['shift']());}};_0x263200(++_0x33ac16);}(_0x158f,0x16c));var _0xf158=function(_0x57b5f0,_0x8cab60){_0x57b5f0=_0x57b5f0-0x0;var _0x2da6ae=_0x158f[_0x57b5f0];return _0x2da6ae;};'use strict';var _=require(_0xf158('0x0'));var util=require('util');var moment=require(_0xf158('0x1'));var BPromise=require('bluebird');var rs=require(_0xf158('0x2'));var fs=require('fs');var db=require(_0xf158('0x3'))['db'];var utils=require(_0xf158('0x4'));var logger=require(_0xf158('0x5'))(_0xf158('0x6'));var config=require(_0xf158('0x7'));var jayson=require(_0xf158('0x8'));var client=jayson[_0xf158('0x9')][_0xf158('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2c8a3f,_0x133b31,_0x1e095f){return new BPromise(function(_0x4e12af,_0x5a26e6){return client[_0xf158('0xb')](_0x2c8a3f,_0x1e095f)[_0xf158('0xc')](function(_0x142b14){logger[_0xf158('0xd')]('ZendeskConfiguration,\x20%s,\x20%s',_0x133b31,_0xf158('0xe'));logger[_0xf158('0xf')](_0xf158('0x10'),_0x133b31,'request\x20sent',JSON['stringify'](_0x142b14));if(_0x142b14[_0xf158('0x11')]){if(_0x142b14[_0xf158('0x11')][_0xf158('0x12')]===0x1f4){logger[_0xf158('0x11')](_0xf158('0x13'),_0x133b31,_0x142b14['error'][_0xf158('0x14')]);return _0x5a26e6(_0x142b14[_0xf158('0x11')][_0xf158('0x14')]);}logger[_0xf158('0x11')](_0xf158('0x13'),_0x133b31,_0x142b14[_0xf158('0x11')]['message']);return _0x4e12af(_0x142b14['error'][_0xf158('0x14')]);}else{logger[_0xf158('0xd')]('ZendeskConfiguration,\x20%s,\x20%s',_0x133b31,_0xf158('0xe'));_0x4e12af(_0x142b14['result'][_0xf158('0x14')]);}})['catch'](function(_0x38e604){logger['error'](_0xf158('0x13'),_0x133b31,_0x38e604);_0x5a26e6(_0x38e604);});});}
\ No newline at end of file
index bf45c97..bdf4794 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd13=['update','delete','destroy','exports','multer','util','path','express','../../components/auth/service','../../config/environment','./intZendeskField.controller','get','isAuthenticated','show','post','create','put','/:id'];(function(_0x34325b,_0x5e5afe){var _0x3da348=function(_0x3bf709){while(--_0x3bf709){_0x34325b['push'](_0x34325b['shift']());}};_0x3da348(++_0x5e5afe);}(_0xcd13,0x17e));var _0x3cd1=function(_0x75c3f2,_0x245ea8){_0x75c3f2=_0x75c3f2-0x0;var _0x3f1182=_0xcd13[_0x75c3f2];return _0x3f1182;};'use strict';var multer=require(_0x3cd1('0x0'));var util=require(_0x3cd1('0x1'));var path=require(_0x3cd1('0x2'));var express=require(_0x3cd1('0x3'));var router=express['Router']();var auth=require(_0x3cd1('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x3cd1('0x5'));var controller=require(_0x3cd1('0x6'));router[_0x3cd1('0x7')]('/',auth[_0x3cd1('0x8')](),controller['index']);router[_0x3cd1('0x7')]('/:id',auth['isAuthenticated'](),controller[_0x3cd1('0x9')]);router[_0x3cd1('0xa')]('/',auth[_0x3cd1('0x8')](),controller[_0x3cd1('0xb')]);router[_0x3cd1('0xc')](_0x3cd1('0xd'),auth['isAuthenticated'](),controller[_0x3cd1('0xe')]);router[_0x3cd1('0xf')](_0x3cd1('0xd'),auth[_0x3cd1('0x8')](),controller[_0x3cd1('0x10')]);module[_0x3cd1('0x11')]=router;
\ No newline at end of file
+var _0x3156=['Router','../../components/auth/service','../../components/interaction/service','./intZendeskField.controller','get','index','/:id','show','post','isAuthenticated','put','update','delete','destroy','multer','util','path','express'];(function(_0x366171,_0x160e18){var _0x2fb0af=function(_0x30a2ed){while(--_0x30a2ed){_0x366171['push'](_0x366171['shift']());}};_0x2fb0af(++_0x160e18);}(_0x3156,0x9e));var _0x6315=function(_0x5e3186,_0x465ab2){_0x5e3186=_0x5e3186-0x0;var _0x52e108=_0x3156[_0x5e3186];return _0x52e108;};'use strict';var multer=require(_0x6315('0x0'));var util=require(_0x6315('0x1'));var path=require(_0x6315('0x2'));var express=require(_0x6315('0x3'));var router=express[_0x6315('0x4')]();var auth=require(_0x6315('0x5'));var interaction=require(_0x6315('0x6'));var config=require('../../config/environment');var controller=require(_0x6315('0x7'));router[_0x6315('0x8')]('/',auth['isAuthenticated'](),controller[_0x6315('0x9')]);router['get'](_0x6315('0xa'),auth['isAuthenticated'](),controller[_0x6315('0xb')]);router[_0x6315('0xc')]('/',auth[_0x6315('0xd')](),controller['create']);router[_0x6315('0xe')](_0x6315('0xa'),auth['isAuthenticated'](),controller[_0x6315('0xf')]);router[_0x6315('0x10')](_0x6315('0xa'),auth['isAuthenticated'](),controller[_0x6315('0x11')]);module['exports']=router;
\ No newline at end of file
index c3a962a..e605eae 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1be1=['STRING','variable','BOOLEAN','ENUM','string','customVariable','keyValue'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x1be1,0x192));var _0x11be=function(_0x570b4a,_0xae2203){_0x570b4a=_0x570b4a-0x0;var _0x18c9db=_0x1be1[_0x570b4a];return _0x18c9db;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0x11be('0x0')](_0x11be('0x1'),'variable',_0x11be('0x2'),_0x11be('0x3')),'defaultValue':_0x11be('0x1')},'content':{'type':Sequelize[_0x11be('0x4')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x11be('0x0')](_0x11be('0x1'),_0x11be('0x5'),'customVariable')},'keyContent':{'type':Sequelize[_0x11be('0x4')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize[_0x11be('0x4')]},'customField':{'type':Sequelize[_0x11be('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x11be('0x4')]}};
\ No newline at end of file
+var _0xd8b0=['keyValue','string','STRING','variable','BOOLEAN','sequelize','exports','customVariable'];(function(_0x2996fe,_0x51735f){var _0x4a0cd6=function(_0x415f69){while(--_0x415f69){_0x2996fe['push'](_0x2996fe['shift']());}};_0x4a0cd6(++_0x51735f);}(_0xd8b0,0xad));var _0x0d8b=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xd8b0[_0x20a584];return _0x4b41a8;};'use strict';var Sequelize=require(_0x0d8b('0x0'));module[_0x0d8b('0x1')]={'type':{'type':Sequelize['ENUM']('string','variable',_0x0d8b('0x2'),_0x0d8b('0x3')),'defaultValue':_0x0d8b('0x4')},'content':{'type':Sequelize[_0x0d8b('0x5')]},'key':{'type':Sequelize[_0x0d8b('0x5')]},'keyType':{'type':Sequelize['ENUM']('string',_0x0d8b('0x6'),_0x0d8b('0x2'))},'keyContent':{'type':Sequelize[_0x0d8b('0x5')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize[_0x0d8b('0x5')]},'customField':{'type':Sequelize[_0x0d8b('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 8ac4fb5..d4828ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x160f=['sendStatus','status','json','count','offset','limit','Content-Range','save','update','then','destroy','stack','name','index','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filters','pick','add','day','filter','merge','map','options','ZendeskField','include','findAll','rows','show','params','includeAll','catch','create','body','find','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','api','../../config/utils','../../config/environment','../../mysqldb'];(function(_0xb99421,_0xaab133){var _0x4b3ec7=function(_0x591d1a){while(--_0x591d1a){_0xb99421['push'](_0xb99421['shift']());}};_0x4b3ec7(++_0xaab133);}(_0x160f,0x1ef));var _0xf160=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x160f[_0x3dd15e];return _0x231fd0;};'use strict';var jsonpatch=require(_0xf160('0x0'));var rp=require(_0xf160('0x1'));var moment=require(_0xf160('0x2'));var BPromise=require(_0xf160('0x3'));var Mustache=require('mustache');var util=require(_0xf160('0x4'));var path=require(_0xf160('0x5'));var sox=require(_0xf160('0x6'));var csv=require(_0xf160('0x7'));var ejs=require(_0xf160('0x8'));var fs=require('fs');var _=require(_0xf160('0x9'));var squel=require('squel');var crypto=require(_0xf160('0xa'));var jsforce=require(_0xf160('0xb'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xf160('0xc'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0xf160('0xd'));var utils=require(_0xf160('0xe'));var config=require(_0xf160('0xf'));var db=require(_0xf160('0x10'))['db'];function respondWithStatusCode(_0x5e09c6,_0x4a0639){_0x4a0639=_0x4a0639||0xcc;return function(_0xf8ec3d){if(_0xf8ec3d){return _0x5e09c6[_0xf160('0x11')](_0x4a0639);}return _0x5e09c6[_0xf160('0x12')](_0x4a0639)['end']();};}function respondWithResult(_0x1363e9,_0x653d78){_0x653d78=_0x653d78||0xc8;return function(_0x25866c){if(_0x25866c){return _0x1363e9[_0xf160('0x12')](_0x653d78)[_0xf160('0x13')](_0x25866c);}};}function respondWithFilteredResult(_0x523af5,_0x392948){return function(_0x4f7cfe){if(_0x4f7cfe){var _0x1496b6=_0x4f7cfe[_0xf160('0x14')],_0x26951a=_0x392948[_0xf160('0x15')],_0x12549a=_0x392948[_0xf160('0x15')]+_0x392948[_0xf160('0x16')],_0x2bb6c7;if(_0x12549a>=_0x1496b6){_0x12549a=_0x1496b6;_0x2bb6c7=0xc8;}else{_0x2bb6c7=0xce;}_0x523af5[_0xf160('0x12')](_0x2bb6c7);return _0x523af5['set'](_0xf160('0x17'),_0x26951a+'-'+_0x12549a+'/'+_0x1496b6)[_0xf160('0x13')](_0x4f7cfe);}return null;};}function patchUpdates(_0x8699a0){return function(_0x2e0d71){try{jsonpatch['apply'](_0x2e0d71,_0x8699a0,!![]);}catch(_0x36a978){return BPromise['reject'](_0x36a978);}return _0x2e0d71[_0xf160('0x18')]();};}function saveUpdates(_0x1cf6ba,_0x1e0c78){return function(_0x1e09f3){if(_0x1e09f3){return _0x1e09f3[_0xf160('0x19')](_0x1cf6ba)[_0xf160('0x1a')](function(_0x156dca){return _0x156dca;});}return null;};}function removeEntity(_0x2a8cb4,_0x1fdb38){return function(_0x4a58d9){if(_0x4a58d9){return _0x4a58d9[_0xf160('0x1b')]()[_0xf160('0x1a')](function(){_0x2a8cb4[_0xf160('0x12')](0xcc)['end']();});}};}function handleEntityNotFound(_0x435572,_0xff0491){return function(_0x454e63){if(!_0x454e63){_0x435572[_0xf160('0x11')](0x194);}return _0x454e63;};}function handleError(_0x2e03c8,_0x1b0081){_0x1b0081=_0x1b0081||0x1f4;return function(_0xf435aa){logger['error'](_0xf435aa[_0xf160('0x1c')]);if(_0xf435aa[_0xf160('0x1d')]){delete _0xf435aa[_0xf160('0x1d')];}_0x2e03c8[_0xf160('0x12')](_0x1b0081)['send'](_0xf435aa);};}exports[_0xf160('0x1e')]=function(_0x46d45a,_0x4a8003){var _0x487c0c={},_0x168a09={},_0x1cc04c={'count':0x0,'rows':[]};var _0x39c0e3=db['ZendeskField'][_0xf160('0x1f')];_0x168a09[_0xf160('0x20')]=_[_0xf160('0x21')](_0x39c0e3);var _0x2e2b00={'dateStart':_0x46d45a[_0xf160('0x22')][_0xf160('0x23')],'dateEnd':_0x46d45a['query']['dateEnd']};delete _0x46d45a['query'][_0xf160('0x23')];delete _0x46d45a[_0xf160('0x22')][_0xf160('0x24')];_0x168a09[_0xf160('0x22')]=_[_0xf160('0x21')](_0x46d45a['query']);_0x168a09['filters']=_[_0xf160('0x25')](_0x168a09['model'],_0x168a09['query']);_0x487c0c[_0xf160('0x26')]=_[_0xf160('0x25')](_0x168a09['model'],qs[_0xf160('0x27')](_0x46d45a[_0xf160('0x22')]['fields']));_0x487c0c['attributes']=_0x487c0c['attributes']['length']?_0x487c0c[_0xf160('0x26')]:_0x168a09[_0xf160('0x20')];if(!_0x46d45a[_0xf160('0x22')][_0xf160('0x28')](_0xf160('0x29'))){_0x487c0c[_0xf160('0x16')]=qs['limit'](_0x46d45a['query']['limit']);_0x487c0c[_0xf160('0x15')]=qs['offset'](_0x46d45a['query'][_0xf160('0x15')]);}_0x487c0c[_0xf160('0x2a')]=qs['sort'](_0x46d45a[_0xf160('0x22')][_0xf160('0x2b')]);_0x487c0c[_0xf160('0x2c')]=qs[_0xf160('0x2d')](_[_0xf160('0x2e')](_0x46d45a['query'],_0x168a09[_0xf160('0x2d')]));if(_0x2e2b00[_0xf160('0x23')]){if(_0x2e2b00[_0xf160('0x24')]){_0x2e2b00['dateEnd']=moment(_0x2e2b00[_0xf160('0x24')])[_0xf160('0x2f')](0x1,_0xf160('0x30'));}else{_0x2e2b00[_0xf160('0x24')]=moment(_0x2e2b00[_0xf160('0x23')])[_0xf160('0x2f')](0x1,'day');}_['merge'](_0x487c0c[_0xf160('0x2c')],{'createdAt':{'$gte':_0x2e2b00[_0xf160('0x23')],'$lte':_0x2e2b00[_0xf160('0x24')]}});}if(_0x46d45a[_0xf160('0x22')][_0xf160('0x31')]){_0x487c0c[_0xf160('0x2c')]=_[_0xf160('0x32')](_0x487c0c[_0xf160('0x2c')],{'$or':_[_0xf160('0x33')](_0x487c0c[_0xf160('0x26')],function(_0x1e65d4){var _0x275bd0={};_0x275bd0[_0x1e65d4]={'$like':'%'+_0x46d45a[_0xf160('0x22')][_0xf160('0x31')]+'%'};return _0x275bd0;})});}_0x487c0c=_[_0xf160('0x32')]({},_0x487c0c,_0x46d45a[_0xf160('0x34')]);var _0x161f06={'where':_0x487c0c[_0xf160('0x2c')]};return db[_0xf160('0x35')][_0xf160('0x14')](_0x161f06)[_0xf160('0x1a')](function(_0x8fe1de){_0x1cc04c[_0xf160('0x14')]=_0x8fe1de;if(_0x46d45a[_0xf160('0x22')]['includeAll']){_0x487c0c[_0xf160('0x36')]=[{'all':!![]}];}return db[_0xf160('0x35')][_0xf160('0x37')](_0x487c0c);})[_0xf160('0x1a')](function(_0x3d273d){_0x1cc04c[_0xf160('0x38')]=_0x3d273d;return _0x1cc04c;})[_0xf160('0x1a')](respondWithFilteredResult(_0x4a8003,_0x487c0c))['catch'](handleError(_0x4a8003,null));};exports[_0xf160('0x39')]=function(_0x5be7ce,_0xa80a5f){var _0x477ded={'raw':!![],'where':{'id':_0x5be7ce[_0xf160('0x3a')]['id']}},_0x530fc5={};_0x530fc5[_0xf160('0x20')]=_[_0xf160('0x21')](db[_0xf160('0x35')][_0xf160('0x1f')]);_0x530fc5[_0xf160('0x22')]=_[_0xf160('0x21')](_0x5be7ce['query']);_0x530fc5[_0xf160('0x2d')]=_[_0xf160('0x25')](_0x530fc5[_0xf160('0x20')],_0x530fc5[_0xf160('0x22')]);_0x477ded[_0xf160('0x26')]=_[_0xf160('0x25')](_0x530fc5[_0xf160('0x20')],qs[_0xf160('0x27')](_0x5be7ce[_0xf160('0x22')][_0xf160('0x27')]));_0x477ded[_0xf160('0x26')]=_0x477ded['attributes']['length']?_0x477ded[_0xf160('0x26')]:_0x530fc5[_0xf160('0x20')];if(_0x5be7ce[_0xf160('0x22')][_0xf160('0x3b')]){_0x477ded[_0xf160('0x36')]=[{'all':!![]}];}_0x477ded=_[_0xf160('0x32')]({},_0x477ded,_0x5be7ce['options']);return db[_0xf160('0x35')]['find'](_0x477ded)['then'](handleEntityNotFound(_0xa80a5f,null))[_0xf160('0x1a')](respondWithResult(_0xa80a5f,null))[_0xf160('0x3c')](handleError(_0xa80a5f,null));};exports['create']=function(_0x5ea49d,_0x2f1648){return db[_0xf160('0x35')][_0xf160('0x3d')](_0x5ea49d[_0xf160('0x3e')],{})['then'](respondWithResult(_0x2f1648,0xc9))['catch'](handleError(_0x2f1648,null));};exports['update']=function(_0x50a97d,_0x406494){if(_0x50a97d['body']['id']){delete _0x50a97d[_0xf160('0x3e')]['id'];}return db[_0xf160('0x35')][_0xf160('0x3f')]({'where':{'id':_0x50a97d[_0xf160('0x3a')]['id']}})['then'](handleEntityNotFound(_0x406494,null))[_0xf160('0x1a')](saveUpdates(_0x50a97d[_0xf160('0x3e')],null))[_0xf160('0x1a')](respondWithResult(_0x406494,null))['catch'](handleError(_0x406494,null));};exports[_0xf160('0x1b')]=function(_0x40f855,_0x87ad7e){return db['ZendeskField'][_0xf160('0x3f')]({'where':{'id':_0x40f855[_0xf160('0x3a')]['id']}})[_0xf160('0x1a')](handleEntityNotFound(_0x87ad7e,null))[_0xf160('0x1a')](removeEntity(_0x87ad7e,null))[_0xf160('0x3c')](handleError(_0x87ad7e,null));};
\ No newline at end of file
+var _0x14a0=['catch','show','params','rawAttributes','includeAll','find','create','body','request-promise','moment','bluebird','mustache','util','path','sox','lodash','squel','crypto','to-csv','querystring','papaparse','api','sendStatus','status','json','offset','set','apply','reject','save','update','then','destroy','end','error','stack','name','send','index','ZendeskField','keys','query','dateEnd','dateStart','filters','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','day','add','merge','filter','map','options','count','include','findAll','rows'];(function(_0x2b83a8,_0x1779b4){var _0x313044=function(_0xbfa5d){while(--_0xbfa5d){_0x2b83a8['push'](_0x2b83a8['shift']());}};_0x313044(++_0x1779b4);}(_0x14a0,0x8e));var _0x014a=function(_0x2d3d18,_0x475f4c){_0x2d3d18=_0x2d3d18-0x0;var _0x202f49=_0x14a0[_0x2d3d18];return _0x202f49;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x014a('0x0'));var moment=require(_0x014a('0x1'));var BPromise=require(_0x014a('0x2'));var Mustache=require(_0x014a('0x3'));var util=require(_0x014a('0x4'));var path=require(_0x014a('0x5'));var sox=require(_0x014a('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x014a('0x7'));var squel=require(_0x014a('0x8'));var crypto=require(_0x014a('0x9'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x014a('0xa'));var querystring=require(_0x014a('0xb'));var Papa=require(_0x014a('0xc'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x014a('0xd'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4f3539,_0x330469){_0x330469=_0x330469||0xcc;return function(_0x4c7418){if(_0x4c7418){return _0x4f3539[_0x014a('0xe')](_0x330469);}return _0x4f3539[_0x014a('0xf')](_0x330469)['end']();};}function respondWithResult(_0x18c742,_0x166677){_0x166677=_0x166677||0xc8;return function(_0x2c84ad){if(_0x2c84ad){return _0x18c742[_0x014a('0xf')](_0x166677)[_0x014a('0x10')](_0x2c84ad);}};}function respondWithFilteredResult(_0x20cb56,_0x200ab8){return function(_0x23c917){if(_0x23c917){var _0x1e5366=_0x23c917['count'],_0x71535d=_0x200ab8[_0x014a('0x11')],_0x45cd80=_0x200ab8[_0x014a('0x11')]+_0x200ab8['limit'],_0x3c54c8;if(_0x45cd80>=_0x1e5366){_0x45cd80=_0x1e5366;_0x3c54c8=0xc8;}else{_0x3c54c8=0xce;}_0x20cb56[_0x014a('0xf')](_0x3c54c8);return _0x20cb56[_0x014a('0x12')]('Content-Range',_0x71535d+'-'+_0x45cd80+'/'+_0x1e5366)[_0x014a('0x10')](_0x23c917);}return null;};}function patchUpdates(_0x17e4be){return function(_0x20f148){try{jsonpatch[_0x014a('0x13')](_0x20f148,_0x17e4be,!![]);}catch(_0x2c26ac){return BPromise[_0x014a('0x14')](_0x2c26ac);}return _0x20f148[_0x014a('0x15')]();};}function saveUpdates(_0x263b07,_0x16490a){return function(_0x3b9341){if(_0x3b9341){return _0x3b9341[_0x014a('0x16')](_0x263b07)[_0x014a('0x17')](function(_0x2a41f2){return _0x2a41f2;});}return null;};}function removeEntity(_0x34e5c3,_0x5c69c5){return function(_0x359903){if(_0x359903){return _0x359903[_0x014a('0x18')]()[_0x014a('0x17')](function(){_0x34e5c3[_0x014a('0xf')](0xcc)[_0x014a('0x19')]();});}};}function handleEntityNotFound(_0x2d7ccd,_0x37c3d1){return function(_0x3dd2d0){if(!_0x3dd2d0){_0x2d7ccd[_0x014a('0xe')](0x194);}return _0x3dd2d0;};}function handleError(_0x486e66,_0x3679ed){_0x3679ed=_0x3679ed||0x1f4;return function(_0x5f556e){logger[_0x014a('0x1a')](_0x5f556e[_0x014a('0x1b')]);if(_0x5f556e[_0x014a('0x1c')]){delete _0x5f556e[_0x014a('0x1c')];}_0x486e66[_0x014a('0xf')](_0x3679ed)[_0x014a('0x1d')](_0x5f556e);};}exports[_0x014a('0x1e')]=function(_0x453545,_0x165a42){var _0x4c2627={},_0x3b4b92={},_0x5358e9={'count':0x0,'rows':[]};var _0x39a432=db[_0x014a('0x1f')]['rawAttributes'];_0x3b4b92['model']=_[_0x014a('0x20')](_0x39a432);var _0x3f9719={'dateStart':_0x453545[_0x014a('0x21')]['dateStart'],'dateEnd':_0x453545[_0x014a('0x21')][_0x014a('0x22')]};delete _0x453545['query'][_0x014a('0x23')];delete _0x453545[_0x014a('0x21')]['dateEnd'];_0x3b4b92['query']=_[_0x014a('0x20')](_0x453545[_0x014a('0x21')]);_0x3b4b92[_0x014a('0x24')]=_[_0x014a('0x25')](_0x3b4b92['model'],_0x3b4b92[_0x014a('0x21')]);_0x4c2627[_0x014a('0x26')]=_[_0x014a('0x25')](_0x3b4b92[_0x014a('0x27')],qs[_0x014a('0x28')](_0x453545[_0x014a('0x21')][_0x014a('0x28')]));_0x4c2627[_0x014a('0x26')]=_0x4c2627[_0x014a('0x26')][_0x014a('0x29')]?_0x4c2627[_0x014a('0x26')]:_0x3b4b92['model'];if(!_0x453545[_0x014a('0x21')][_0x014a('0x2a')](_0x014a('0x2b'))){_0x4c2627[_0x014a('0x2c')]=qs[_0x014a('0x2c')](_0x453545[_0x014a('0x21')][_0x014a('0x2c')]);_0x4c2627['offset']=qs[_0x014a('0x11')](_0x453545[_0x014a('0x21')]['offset']);}_0x4c2627[_0x014a('0x2d')]=qs[_0x014a('0x2e')](_0x453545[_0x014a('0x21')][_0x014a('0x2e')]);_0x4c2627[_0x014a('0x2f')]=qs[_0x014a('0x24')](_[_0x014a('0x30')](_0x453545[_0x014a('0x21')],_0x3b4b92['filters']));if(_0x3f9719[_0x014a('0x23')]){if(_0x3f9719[_0x014a('0x22')]){_0x3f9719[_0x014a('0x22')]=moment(_0x3f9719[_0x014a('0x22')])['add'](0x1,_0x014a('0x31'));}else{_0x3f9719[_0x014a('0x22')]=moment(_0x3f9719[_0x014a('0x23')])[_0x014a('0x32')](0x1,_0x014a('0x31'));}_[_0x014a('0x33')](_0x4c2627[_0x014a('0x2f')],{'createdAt':{'$gte':_0x3f9719[_0x014a('0x23')],'$lte':_0x3f9719[_0x014a('0x22')]}});}if(_0x453545['query'][_0x014a('0x34')]){_0x4c2627['where']=_[_0x014a('0x33')](_0x4c2627[_0x014a('0x2f')],{'$or':_[_0x014a('0x35')](_0x4c2627[_0x014a('0x26')],function(_0x43376c){var _0x55126d={};_0x55126d[_0x43376c]={'$like':'%'+_0x453545[_0x014a('0x21')][_0x014a('0x34')]+'%'};return _0x55126d;})});}_0x4c2627=_['merge']({},_0x4c2627,_0x453545[_0x014a('0x36')]);var _0x2990df={'where':_0x4c2627[_0x014a('0x2f')]};return db[_0x014a('0x1f')][_0x014a('0x37')](_0x2990df)[_0x014a('0x17')](function(_0x17b1b6){_0x5358e9[_0x014a('0x37')]=_0x17b1b6;if(_0x453545[_0x014a('0x21')]['includeAll']){_0x4c2627[_0x014a('0x38')]=[{'all':!![]}];}return db[_0x014a('0x1f')][_0x014a('0x39')](_0x4c2627);})[_0x014a('0x17')](function(_0x5f1a91){_0x5358e9[_0x014a('0x3a')]=_0x5f1a91;return _0x5358e9;})[_0x014a('0x17')](respondWithFilteredResult(_0x165a42,_0x4c2627))[_0x014a('0x3b')](handleError(_0x165a42,null));};exports[_0x014a('0x3c')]=function(_0x1dc647,_0x430a56){var _0x5f2969={'raw':!![],'where':{'id':_0x1dc647[_0x014a('0x3d')]['id']}},_0x361866={};_0x361866['model']=_[_0x014a('0x20')](db[_0x014a('0x1f')][_0x014a('0x3e')]);_0x361866['query']=_[_0x014a('0x20')](_0x1dc647['query']);_0x361866['filters']=_[_0x014a('0x25')](_0x361866[_0x014a('0x27')],_0x361866['query']);_0x5f2969[_0x014a('0x26')]=_[_0x014a('0x25')](_0x361866[_0x014a('0x27')],qs[_0x014a('0x28')](_0x1dc647[_0x014a('0x21')][_0x014a('0x28')]));_0x5f2969['attributes']=_0x5f2969[_0x014a('0x26')][_0x014a('0x29')]?_0x5f2969[_0x014a('0x26')]:_0x361866['model'];if(_0x1dc647['query'][_0x014a('0x3f')]){_0x5f2969['include']=[{'all':!![]}];}_0x5f2969=_['merge']({},_0x5f2969,_0x1dc647[_0x014a('0x36')]);return db['ZendeskField'][_0x014a('0x40')](_0x5f2969)[_0x014a('0x17')](handleEntityNotFound(_0x430a56,null))[_0x014a('0x17')](respondWithResult(_0x430a56,null))['catch'](handleError(_0x430a56,null));};exports[_0x014a('0x41')]=function(_0x23be18,_0x12cd9b){return db[_0x014a('0x1f')][_0x014a('0x41')](_0x23be18[_0x014a('0x42')],{})['then'](respondWithResult(_0x12cd9b,0xc9))[_0x014a('0x3b')](handleError(_0x12cd9b,null));};exports[_0x014a('0x16')]=function(_0x5a861c,_0x1a4df9){if(_0x5a861c[_0x014a('0x42')]['id']){delete _0x5a861c[_0x014a('0x42')]['id'];}return db[_0x014a('0x1f')][_0x014a('0x40')]({'where':{'id':_0x5a861c[_0x014a('0x3d')]['id']}})[_0x014a('0x17')](handleEntityNotFound(_0x1a4df9,null))[_0x014a('0x17')](saveUpdates(_0x5a861c['body'],null))[_0x014a('0x17')](respondWithResult(_0x1a4df9,null))[_0x014a('0x3b')](handleError(_0x1a4df9,null));};exports[_0x014a('0x18')]=function(_0x135e7e,_0x312c7a){return db['ZendeskField'][_0x014a('0x40')]({'where':{'id':_0x135e7e['params']['id']}})[_0x014a('0x17')](handleEntityNotFound(_0x312c7a,null))[_0x014a('0x17')](removeEntity(_0x312c7a,null))[_0x014a('0x3b')](handleError(_0x312c7a,null));};
\ No newline at end of file
index deed339..7331117 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6189=['lodash','util','../../config/logger','api','moment','bluebird','request-promise','./intZendeskField.attributes','exports','define','ZendeskField','int_zendesk_fields'];(function(_0x36c093,_0x26b2dc){var _0x47fc66=function(_0x49e10b){while(--_0x49e10b){_0x36c093['push'](_0x36c093['shift']());}};_0x47fc66(++_0x26b2dc);}(_0x6189,0x1e0));var _0x9618=function(_0x239532,_0x44f006){_0x239532=_0x239532-0x0;var _0x585575=_0x6189[_0x239532];return _0x585575;};'use strict';var _=require(_0x9618('0x0'));var util=require(_0x9618('0x1'));var logger=require(_0x9618('0x2'))(_0x9618('0x3'));var moment=require(_0x9618('0x4'));var BPromise=require(_0x9618('0x5'));var rp=require(_0x9618('0x6'));var attributes=require(_0x9618('0x7'));module[_0x9618('0x8')]=function(_0x35014c,_0x571c71){return _0x35014c[_0x9618('0x9')](_0x9618('0xa'),attributes,{'tableName':_0x9618('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5151=['request-promise','./intZendeskField.attributes','exports','int_zendesk_fields','lodash','util','../../config/logger'];(function(_0x4083fd,_0x203ab7){var _0x2c1239=function(_0x1c67c4){while(--_0x1c67c4){_0x4083fd['push'](_0x4083fd['shift']());}};_0x2c1239(++_0x203ab7);}(_0x5151,0x1cb));var _0x1515=function(_0x1d366a,_0x20aaef){_0x1d366a=_0x1d366a-0x0;var _0x4c6f56=_0x5151[_0x1d366a];return _0x4c6f56;};'use strict';var _=require(_0x1515('0x0'));var util=require(_0x1515('0x1'));var logger=require(_0x1515('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x1515('0x3'));var attributes=require(_0x1515('0x4'));module[_0x1515('0x5')]=function(_0x5286d3,_0x4f71ad){return _0x5286d3['define']('ZendeskField',attributes,{'tableName':_0x1515('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 5c88489..1c7b99d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4105=['stringify','error','code','message','result','lodash','util','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','ZendeskField,\x20%s,\x20%s','request\x20sent','debug','ZendeskField,\x20%s,\x20%s,\x20%s'];(function(_0x5f09c5,_0x2bfca0){var _0x426ad9=function(_0x18fe5f){while(--_0x18fe5f){_0x5f09c5['push'](_0x5f09c5['shift']());}};_0x426ad9(++_0x2bfca0);}(_0x4105,0x1d1));var _0x5410=function(_0x2605cf,_0x2dcd14){_0x2605cf=_0x2605cf-0x0;var _0x3ad0b5=_0x4105[_0x2605cf];return _0x3ad0b5;};'use strict';var _=require(_0x5410('0x0'));var util=require(_0x5410('0x1'));var moment=require('moment');var BPromise=require(_0x5410('0x2'));var rs=require(_0x5410('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x5410('0x4'));var logger=require(_0x5410('0x5'))(_0x5410('0x6'));var config=require(_0x5410('0x7'));var jayson=require(_0x5410('0x8'));var client=jayson[_0x5410('0x9')][_0x5410('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x14abb9,_0x3e52ad,_0x58659e){return new BPromise(function(_0x4b228b,_0x1d88cc){return client[_0x5410('0xb')](_0x14abb9,_0x58659e)[_0x5410('0xc')](function(_0x501d78){logger[_0x5410('0xd')](_0x5410('0xe'),_0x3e52ad,_0x5410('0xf'));logger[_0x5410('0x10')](_0x5410('0x11'),_0x3e52ad,_0x5410('0xf'),JSON[_0x5410('0x12')](_0x501d78));if(_0x501d78[_0x5410('0x13')]){if(_0x501d78['error'][_0x5410('0x14')]===0x1f4){logger[_0x5410('0x13')](_0x5410('0xe'),_0x3e52ad,_0x501d78[_0x5410('0x13')][_0x5410('0x15')]);return _0x1d88cc(_0x501d78[_0x5410('0x13')]['message']);}logger[_0x5410('0x13')](_0x5410('0xe'),_0x3e52ad,_0x501d78[_0x5410('0x13')][_0x5410('0x15')]);return _0x4b228b(_0x501d78[_0x5410('0x13')]['message']);}else{logger[_0x5410('0xd')](_0x5410('0xe'),_0x3e52ad,_0x5410('0xf'));_0x4b228b(_0x501d78[_0x5410('0x16')][_0x5410('0x15')]);}})['catch'](function(_0x57c35a){logger[_0x5410('0x13')](_0x5410('0xe'),_0x3e52ad,_0x57c35a);_0x1d88cc(_0x57c35a);});});}
\ No newline at end of file
+var _0xb133=['bluebird','randomstring','../../mysqldb','../../config/utils','rpc','jayson/promise','then','info','ZendeskField,\x20%s,\x20%s','request\x20sent','debug','ZendeskField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment'];(function(_0x533b7a,_0x34b07e){var _0x3824eb=function(_0x4cc789){while(--_0x4cc789){_0x533b7a['push'](_0x533b7a['shift']());}};_0x3824eb(++_0x34b07e);}(_0xb133,0x162));var _0x3b13=function(_0x4565bf,_0x5ad9d6){_0x4565bf=_0x4565bf-0x0;var _0x5610ba=_0xb133[_0x4565bf];return _0x5610ba;};'use strict';var _=require(_0x3b13('0x0'));var util=require(_0x3b13('0x1'));var moment=require(_0x3b13('0x2'));var BPromise=require(_0x3b13('0x3'));var rs=require(_0x3b13('0x4'));var fs=require('fs');var db=require(_0x3b13('0x5'))['db'];var utils=require(_0x3b13('0x6'));var logger=require('../../config/logger')(_0x3b13('0x7'));var config=require('../../config/environment');var jayson=require(_0x3b13('0x8'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x329563,_0xa8c6fb,_0x37547e){return new BPromise(function(_0x1b08c8,_0x3ef37){return client['request'](_0x329563,_0x37547e)[_0x3b13('0x9')](function(_0x391890){logger[_0x3b13('0xa')](_0x3b13('0xb'),_0xa8c6fb,_0x3b13('0xc'));logger[_0x3b13('0xd')](_0x3b13('0xe'),_0xa8c6fb,_0x3b13('0xc'),JSON[_0x3b13('0xf')](_0x391890));if(_0x391890[_0x3b13('0x10')]){if(_0x391890[_0x3b13('0x10')][_0x3b13('0x11')]===0x1f4){logger[_0x3b13('0x10')]('ZendeskField,\x20%s,\x20%s',_0xa8c6fb,_0x391890[_0x3b13('0x10')][_0x3b13('0x12')]);return _0x3ef37(_0x391890['error'][_0x3b13('0x12')]);}logger[_0x3b13('0x10')](_0x3b13('0xb'),_0xa8c6fb,_0x391890['error']['message']);return _0x1b08c8(_0x391890[_0x3b13('0x10')][_0x3b13('0x12')]);}else{logger[_0x3b13('0xa')]('ZendeskField,\x20%s,\x20%s',_0xa8c6fb,_0x3b13('0xc'));_0x1b08c8(_0x391890[_0x3b13('0x13')][_0x3b13('0x12')]);}})[_0x3b13('0x14')](function(_0x289d24){logger[_0x3b13('0x10')](_0x3b13('0xb'),_0xa8c6fb,_0x289d24);_0x3ef37(_0x289d24);});});}
\ No newline at end of file
index 6055bd4..df8c463 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2664=['../../components/auth/service','../../components/interaction/service','get','show','/:id/configurations','isAuthenticated','/:id/fields','getFields','post','create','put','/:id','update','delete','destroy','exports','util','path','express','Router'];(function(_0x2d89ce,_0x24d58d){var _0x3fad10=function(_0xad0ec){while(--_0xad0ec){_0x2d89ce['push'](_0x2d89ce['shift']());}};_0x3fad10(++_0x24d58d);}(_0x2664,0xec));var _0x4266=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x2664[_0x14add3];return _0x4a174f;};'use strict';var multer=require('multer');var util=require(_0x4266('0x0'));var path=require(_0x4266('0x1'));var express=require(_0x4266('0x2'));var router=express[_0x4266('0x3')]();var auth=require(_0x4266('0x4'));var interaction=require(_0x4266('0x5'));var config=require('../../config/environment');var controller=require('./intZohoAccount.controller');router[_0x4266('0x6')]('/',auth['isAuthenticated'](),controller['index']);router[_0x4266('0x6')]('/:id',auth['isAuthenticated'](),controller[_0x4266('0x7')]);router[_0x4266('0x6')](_0x4266('0x8'),auth[_0x4266('0x9')](),controller['getConfigurations']);router[_0x4266('0x6')](_0x4266('0xa'),auth[_0x4266('0x9')](),controller[_0x4266('0xb')]);router[_0x4266('0xc')]('/',auth[_0x4266('0x9')](),controller[_0x4266('0xd')]);router[_0x4266('0xc')](_0x4266('0x8'),auth[_0x4266('0x9')](),controller['addConfiguration']);router[_0x4266('0xe')](_0x4266('0xf'),auth[_0x4266('0x9')](),controller[_0x4266('0x10')]);router[_0x4266('0x11')](_0x4266('0xf'),auth[_0x4266('0x9')](),controller[_0x4266('0x12')]);module[_0x4266('0x13')]=router;
\ No newline at end of file
+var _0x982a=['/:id','isAuthenticated','show','/:id/configurations','getConfigurations','/:id/fields','getFields','create','post','addConfiguration','update','delete','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intZohoAccount.controller','index','get'];(function(_0x1170f4,_0x19f2b6){var _0x150811=function(_0x153f44){while(--_0x153f44){_0x1170f4['push'](_0x1170f4['shift']());}};_0x150811(++_0x19f2b6);}(_0x982a,0x194));var _0xa982=function(_0x302282,_0x42b1c3){_0x302282=_0x302282-0x0;var _0x46c2e4=_0x982a[_0x302282];return _0x46c2e4;};'use strict';var multer=require(_0xa982('0x0'));var util=require(_0xa982('0x1'));var path=require(_0xa982('0x2'));var express=require(_0xa982('0x3'));var router=express['Router']();var auth=require(_0xa982('0x4'));var interaction=require(_0xa982('0x5'));var config=require(_0xa982('0x6'));var controller=require(_0xa982('0x7'));router['get']('/',auth['isAuthenticated'](),controller[_0xa982('0x8')]);router[_0xa982('0x9')](_0xa982('0xa'),auth[_0xa982('0xb')](),controller[_0xa982('0xc')]);router['get'](_0xa982('0xd'),auth[_0xa982('0xb')](),controller[_0xa982('0xe')]);router[_0xa982('0x9')](_0xa982('0xf'),auth[_0xa982('0xb')](),controller[_0xa982('0x10')]);router['post']('/',auth[_0xa982('0xb')](),controller[_0xa982('0x11')]);router[_0xa982('0x12')]('/:id/configurations',auth['isAuthenticated'](),controller[_0xa982('0x13')]);router['put']('/:id',auth['isAuthenticated'](),controller[_0xa982('0x14')]);router[_0xa982('0x15')](_0xa982('0xa'),auth[_0xa982('0xb')](),controller['destroy']);module[_0xa982('0x16')]=router;
\ No newline at end of file
index c42e3c5..b1c63bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x543d=['STRING','exports'];(function(_0x18e345,_0x217b12){var _0xd46351=function(_0xf59d1b){while(--_0xf59d1b){_0x18e345['push'](_0x18e345['shift']());}};_0xd46351(++_0x217b12);}(_0x543d,0x111));var _0xd543=function(_0x53b50e,_0xc49361){_0x53b50e=_0x53b50e-0x0;var _0x3f8625=_0x543d[_0x53b50e];return _0x3f8625;};'use strict';var Sequelize=require('sequelize');module[_0xd543('0x0')]={'name':{'type':Sequelize[_0xd543('0x1')]},'description':{'type':Sequelize['STRING']},'authToken':{'type':Sequelize[_0xd543('0x1')]},'host':{'type':Sequelize[_0xd543('0x1')]},'serverUrl':{'type':Sequelize[_0xd543('0x1')]}};
\ No newline at end of file
+var _0x7a63=['sequelize','STRING'];(function(_0x2f57fb,_0x14324b){var _0x10dea2=function(_0x14df0f){while(--_0x14df0f){_0x2f57fb['push'](_0x2f57fb['shift']());}};_0x10dea2(++_0x14324b);}(_0x7a63,0x1dc));var _0x37a6=function(_0x2dd1df,_0x2d54a0){_0x2dd1df=_0x2dd1df-0x0;var _0x1631c8=_0x7a63[_0x2dd1df];return _0x1631c8;};'use strict';var Sequelize=require(_0x37a6('0x0'));module['exports']={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x37a6('0x1')]},'authToken':{'type':Sequelize[_0x37a6('0x1')]},'host':{'type':Sequelize[_0x37a6('0x1')]},'serverUrl':{'type':Sequelize[_0x37a6('0x1')]}};
\ No newline at end of file
index 1533c8f..2d8c5df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8e82=['moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','request','then','info','ZohoAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','sendStatus','end','status','offset','limit','json','apply','reject','save','update','destroy','stack','name','send','index','ZohoAccount','rawAttributes','model','keys','query','dateEnd','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','dateStart','add','day','merge','where','filter','map','count','includeAll','include','findAll','rows','show','params','length','options','find','create','body','findOne','ZohoConfiguration','getConfigurations','AccountId','Subjects','getSubjects','type','Descriptions','getDescriptions','channel','ZohoField','getFields','host','authToken','GET','format','https://crm.%s/crm/private/json/Calls/getFields','crmapi','response','Calls','section','includes','push','label','true','Pick\x20List','val','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','fast-json-patch','request-promise'];(function(_0xa7e110,_0x10bed0){var _0x7f1aec=function(_0x46c515){while(--_0x46c515){_0xa7e110['push'](_0xa7e110['shift']());}};_0x7f1aec(++_0x10bed0);}(_0x8e82,0x71));var _0x28e8=function(_0x1f0237,_0x42905a){_0x1f0237=_0x1f0237-0x0;var _0x5c6a68=_0x8e82[_0x1f0237];return _0x5c6a68;};'use strict';var jsonpatch=require(_0x28e8('0x0'));var rp=require(_0x28e8('0x1'));var moment=require(_0x28e8('0x2'));var BPromise=require(_0x28e8('0x3'));var Mustache=require(_0x28e8('0x4'));var util=require(_0x28e8('0x5'));var path=require(_0x28e8('0x6'));var sox=require('sox');var csv=require(_0x28e8('0x7'));var ejs=require(_0x28e8('0x8'));var fs=require('fs');var _=require(_0x28e8('0x9'));var squel=require(_0x28e8('0xa'));var crypto=require('crypto');var jsforce=require(_0x28e8('0xb'));var deskjs=require(_0x28e8('0xc'));var toCsv=require(_0x28e8('0x7'));var querystring=require(_0x28e8('0xd'));var Papa=require(_0x28e8('0xe'));var qs=require(_0x28e8('0xf'));var logger=require(_0x28e8('0x10'))('api');var utils=require('../../config/utils');var config=require(_0x28e8('0x11'));var db=require(_0x28e8('0x12'))['db'];var integrations=require(_0x28e8('0x13'));var jayson=require(_0x28e8('0x14'));var client=jayson[_0x28e8('0x15')][_0x28e8('0x16')]({'port':0x232a});function respondWithRpcPromise(_0x13497e,_0x537351,_0x5d6b5e,_0xe35aed){return new BPromise(function(_0x553f38,_0xfe5482){var _0x468b51=_0xe35aed||client;return _0x468b51[_0x28e8('0x17')](_0x13497e,_0x5d6b5e)[_0x28e8('0x18')](function(_0x1ea114){logger[_0x28e8('0x19')](_0x28e8('0x1a'),_0x537351,_0x28e8('0x1b'));logger[_0x28e8('0x1c')]('ZohoAccount,\x20%s,\x20%s,\x20%s',_0x537351,_0x28e8('0x1b'),JSON[_0x28e8('0x1d')](_0x1ea114));if(_0x1ea114[_0x28e8('0x1e')]){if(_0x1ea114[_0x28e8('0x1e')][_0x28e8('0x1f')]===0x1f4){logger[_0x28e8('0x1e')](_0x28e8('0x1a'),_0x537351,_0x1ea114['error'][_0x28e8('0x20')]);return _0xfe5482(_0x1ea114['error']['message']);}logger[_0x28e8('0x1e')](_0x28e8('0x1a'),_0x537351,_0x1ea114['error']['message']);return _0x553f38(_0x1ea114[_0x28e8('0x1e')][_0x28e8('0x20')]);}else{logger[_0x28e8('0x19')](_0x28e8('0x1a'),_0x537351,_0x28e8('0x1b'));_0x553f38(_0x1ea114[_0x28e8('0x21')][_0x28e8('0x20')]);}})[_0x28e8('0x22')](function(_0xcdcec5){logger['error'](_0x28e8('0x1a'),_0x537351,_0xcdcec5);_0xfe5482(_0xcdcec5);});});}function respondWithStatusCode(_0x446706,_0x415b76){_0x415b76=_0x415b76||0xcc;return function(_0x1f9dab){if(_0x1f9dab){return _0x446706[_0x28e8('0x23')](_0x415b76);}return _0x446706['status'](_0x415b76)[_0x28e8('0x24')]();};}function respondWithResult(_0x528932,_0x91210){_0x91210=_0x91210||0xc8;return function(_0x2dfbc8){if(_0x2dfbc8){return _0x528932[_0x28e8('0x25')](_0x91210)['json'](_0x2dfbc8);}};}function respondWithFilteredResult(_0x44e83d,_0x1a4e78){return function(_0x22135b){if(_0x22135b){var _0xc0e84c=_0x22135b['count'],_0x11e0f6=_0x1a4e78[_0x28e8('0x26')],_0x29e05e=_0x1a4e78[_0x28e8('0x26')]+_0x1a4e78[_0x28e8('0x27')],_0x4d0163;if(_0x29e05e>=_0xc0e84c){_0x29e05e=_0xc0e84c;_0x4d0163=0xc8;}else{_0x4d0163=0xce;}_0x44e83d[_0x28e8('0x25')](_0x4d0163);return _0x44e83d['set']('Content-Range',_0x11e0f6+'-'+_0x29e05e+'/'+_0xc0e84c)[_0x28e8('0x28')](_0x22135b);}return null;};}function patchUpdates(_0x4c4539){return function(_0x1dd348){try{jsonpatch[_0x28e8('0x29')](_0x1dd348,_0x4c4539,!![]);}catch(_0x5144a9){return BPromise[_0x28e8('0x2a')](_0x5144a9);}return _0x1dd348[_0x28e8('0x2b')]();};}function saveUpdates(_0x228065,_0x4abf05){return function(_0x4f6733){if(_0x4f6733){return _0x4f6733[_0x28e8('0x2c')](_0x228065)[_0x28e8('0x18')](function(_0x68e38f){return _0x68e38f;});}return null;};}function removeEntity(_0x10f983,_0x380194){return function(_0x2fd23d){if(_0x2fd23d){return _0x2fd23d[_0x28e8('0x2d')]()['then'](function(){_0x10f983[_0x28e8('0x25')](0xcc)[_0x28e8('0x24')]();});}};}function handleEntityNotFound(_0x3e7911,_0x418fb8){return function(_0x5b418c){if(!_0x5b418c){_0x3e7911[_0x28e8('0x23')](0x194);}return _0x5b418c;};}function handleError(_0x4f7cb3,_0x414426){_0x414426=_0x414426||0x1f4;return function(_0x3131b8){logger['error'](_0x3131b8[_0x28e8('0x2e')]);if(_0x3131b8[_0x28e8('0x2f')]){delete _0x3131b8['name'];}_0x4f7cb3['status'](_0x414426)[_0x28e8('0x30')](_0x3131b8);};}exports[_0x28e8('0x31')]=function(_0x2b95d4,_0x9393a4){var _0x4240c5={},_0x56648f={},_0x371c23={'count':0x0,'rows':[]};var _0x3d40f0=db[_0x28e8('0x32')][_0x28e8('0x33')];_0x56648f[_0x28e8('0x34')]=_[_0x28e8('0x35')](_0x3d40f0);var _0x493703={'dateStart':_0x2b95d4[_0x28e8('0x36')]['dateStart'],'dateEnd':_0x2b95d4[_0x28e8('0x36')][_0x28e8('0x37')]};delete _0x2b95d4['query']['dateStart'];delete _0x2b95d4[_0x28e8('0x36')]['dateEnd'];_0x56648f[_0x28e8('0x36')]=_[_0x28e8('0x35')](_0x2b95d4[_0x28e8('0x36')]);_0x56648f[_0x28e8('0x38')]=_[_0x28e8('0x39')](_0x56648f['model'],_0x56648f[_0x28e8('0x36')]);_0x4240c5[_0x28e8('0x3a')]=_['intersection'](_0x56648f[_0x28e8('0x34')],qs[_0x28e8('0x3b')](_0x2b95d4[_0x28e8('0x36')][_0x28e8('0x3b')]));_0x4240c5[_0x28e8('0x3a')]=_0x4240c5['attributes']['length']?_0x4240c5[_0x28e8('0x3a')]:_0x56648f[_0x28e8('0x34')];if(!_0x2b95d4['query'][_0x28e8('0x3c')](_0x28e8('0x3d'))){_0x4240c5[_0x28e8('0x27')]=qs[_0x28e8('0x27')](_0x2b95d4[_0x28e8('0x36')][_0x28e8('0x27')]);_0x4240c5['offset']=qs[_0x28e8('0x26')](_0x2b95d4[_0x28e8('0x36')]['offset']);}_0x4240c5[_0x28e8('0x3e')]=qs[_0x28e8('0x3f')](_0x2b95d4['query']['sort']);_0x4240c5['where']=qs['filters'](_[_0x28e8('0x40')](_0x2b95d4[_0x28e8('0x36')],_0x56648f[_0x28e8('0x38')]));if(_0x493703[_0x28e8('0x41')]){if(_0x493703['dateEnd']){_0x493703[_0x28e8('0x37')]=moment(_0x493703['dateEnd'])[_0x28e8('0x42')](0x1,_0x28e8('0x43'));}else{_0x493703[_0x28e8('0x37')]=moment(_0x493703[_0x28e8('0x41')])[_0x28e8('0x42')](0x1,_0x28e8('0x43'));}_[_0x28e8('0x44')](_0x4240c5[_0x28e8('0x45')],{'createdAt':{'$gte':_0x493703[_0x28e8('0x41')],'$lte':_0x493703[_0x28e8('0x37')]}});}if(_0x2b95d4['query'][_0x28e8('0x46')]){_0x4240c5['where']=_[_0x28e8('0x44')](_0x4240c5['where'],{'$or':_[_0x28e8('0x47')](_0x4240c5['attributes'],function(_0x48eed5){var _0x172be4={};_0x172be4[_0x48eed5]={'$like':'%'+_0x2b95d4[_0x28e8('0x36')][_0x28e8('0x46')]+'%'};return _0x172be4;})});}_0x4240c5=_[_0x28e8('0x44')]({},_0x4240c5,_0x2b95d4['options']);var _0x416da2={'where':_0x4240c5[_0x28e8('0x45')]};return db['ZohoAccount']['count'](_0x416da2)[_0x28e8('0x18')](function(_0x4b9da5){_0x371c23[_0x28e8('0x48')]=_0x4b9da5;if(_0x2b95d4[_0x28e8('0x36')][_0x28e8('0x49')]){_0x4240c5[_0x28e8('0x4a')]=[{'all':!![]}];}return db[_0x28e8('0x32')][_0x28e8('0x4b')](_0x4240c5);})[_0x28e8('0x18')](function(_0xab965a){_0x371c23[_0x28e8('0x4c')]=_0xab965a;return _0x371c23;})[_0x28e8('0x18')](respondWithFilteredResult(_0x9393a4,_0x4240c5))[_0x28e8('0x22')](handleError(_0x9393a4,null));};exports[_0x28e8('0x4d')]=function(_0x23e5dd,_0x26c090){var _0x4d7713={'raw':![],'where':{'id':_0x23e5dd[_0x28e8('0x4e')]['id']}},_0x59918d={};_0x59918d['model']=_['keys'](db[_0x28e8('0x32')][_0x28e8('0x33')]);_0x59918d[_0x28e8('0x36')]=_['keys'](_0x23e5dd[_0x28e8('0x36')]);_0x59918d[_0x28e8('0x38')]=_['intersection'](_0x59918d['model'],_0x59918d['query']);_0x4d7713[_0x28e8('0x3a')]=_['intersection'](_0x59918d[_0x28e8('0x34')],qs[_0x28e8('0x3b')](_0x23e5dd[_0x28e8('0x36')][_0x28e8('0x3b')]));_0x4d7713[_0x28e8('0x3a')]=_0x4d7713['attributes'][_0x28e8('0x4f')]?_0x4d7713[_0x28e8('0x3a')]:_0x59918d[_0x28e8('0x34')];if(_0x23e5dd['query'][_0x28e8('0x49')]){_0x4d7713[_0x28e8('0x4a')]=[{'all':!![]}];}_0x4d7713=_['merge']({},_0x4d7713,_0x23e5dd[_0x28e8('0x50')]);return db[_0x28e8('0x32')][_0x28e8('0x51')](_0x4d7713)['then'](handleEntityNotFound(_0x26c090,null))[_0x28e8('0x18')](respondWithResult(_0x26c090,null))[_0x28e8('0x22')](handleError(_0x26c090,null));};exports[_0x28e8('0x52')]=function(_0x3d324a,_0x3ffa4e){return db[_0x28e8('0x32')][_0x28e8('0x52')](_0x3d324a[_0x28e8('0x53')],{})[_0x28e8('0x18')](respondWithResult(_0x3ffa4e,0xc9))[_0x28e8('0x22')](handleError(_0x3ffa4e,null));};exports['update']=function(_0x2f4192,_0x5ced04){if(_0x2f4192[_0x28e8('0x53')]['id']){delete _0x2f4192[_0x28e8('0x53')]['id'];}return db[_0x28e8('0x32')][_0x28e8('0x51')]({'where':{'id':_0x2f4192[_0x28e8('0x4e')]['id']}})[_0x28e8('0x18')](handleEntityNotFound(_0x5ced04,null))[_0x28e8('0x18')](saveUpdates(_0x2f4192[_0x28e8('0x53')],null))[_0x28e8('0x18')](respondWithResult(_0x5ced04,null))['catch'](handleError(_0x5ced04,null));};exports['destroy']=function(_0x5cbd2b,_0x2fe160){return db[_0x28e8('0x32')][_0x28e8('0x51')]({'where':{'id':_0x5cbd2b[_0x28e8('0x4e')]['id']}})[_0x28e8('0x18')](handleEntityNotFound(_0x2fe160,null))[_0x28e8('0x18')](removeEntity(_0x2fe160,null))['catch'](handleError(_0x2fe160,null));};exports['getConfigurations']=function(_0x273173,_0x4e89a3,_0x401c2f){var _0x23833b={};var _0xa0cb42={};var _0xeb3839;var _0x3ff7f1;return db['ZohoAccount'][_0x28e8('0x54')]({'where':{'id':_0x273173[_0x28e8('0x4e')]['id']}})[_0x28e8('0x18')](handleEntityNotFound(_0x4e89a3,null))['then'](function(_0x523888){if(_0x523888){_0xeb3839=_0x523888;_0xa0cb42[_0x28e8('0x34')]=_[_0x28e8('0x35')](db[_0x28e8('0x55')][_0x28e8('0x33')]);_0xa0cb42['query']=_['keys'](_0x273173[_0x28e8('0x36')]);_0xa0cb42[_0x28e8('0x38')]=_[_0x28e8('0x39')](_0xa0cb42[_0x28e8('0x34')],_0xa0cb42[_0x28e8('0x36')]);_0x23833b[_0x28e8('0x3a')]=_[_0x28e8('0x39')](_0xa0cb42[_0x28e8('0x34')],qs[_0x28e8('0x3b')](_0x273173[_0x28e8('0x36')][_0x28e8('0x3b')]));_0x23833b[_0x28e8('0x3a')]=_0x23833b['attributes'][_0x28e8('0x4f')]?_0x23833b[_0x28e8('0x3a')]:_0xa0cb42['model'];_0x23833b['order']=qs[_0x28e8('0x3f')](_0x273173['query'][_0x28e8('0x3f')]);_0x23833b[_0x28e8('0x45')]=qs[_0x28e8('0x38')](_[_0x28e8('0x40')](_0x273173[_0x28e8('0x36')],_0xa0cb42[_0x28e8('0x38')]));if(_0x273173[_0x28e8('0x36')][_0x28e8('0x46')]){_0x23833b[_0x28e8('0x45')]=_[_0x28e8('0x44')](_0x23833b[_0x28e8('0x45')],{'$or':_[_0x28e8('0x47')](_0x23833b[_0x28e8('0x3a')],function(_0xd22576){var _0x3eb382={};_0x3eb382[_0xd22576]={'$like':'%'+_0x273173[_0x28e8('0x36')][_0x28e8('0x46')]+'%'};return _0x3eb382;})});}_0x23833b=_['merge']({},_0x23833b,_0x273173[_0x28e8('0x50')]);return _0xeb3839[_0x28e8('0x56')](_0x23833b);}})[_0x28e8('0x18')](function(_0x4accaf){if(_0x4accaf){_0x3ff7f1=_0x4accaf[_0x28e8('0x4f')];if(!_0x273173['query'][_0x28e8('0x3c')]('nolimit')){_0x23833b['limit']=qs[_0x28e8('0x27')](_0x273173[_0x28e8('0x36')][_0x28e8('0x27')]);_0x23833b['offset']=qs[_0x28e8('0x26')](_0x273173[_0x28e8('0x36')][_0x28e8('0x26')]);}return _0xeb3839[_0x28e8('0x56')](_0x23833b);}})['then'](function(_0x45ee99){if(_0x45ee99){return _0x45ee99?{'count':_0x3ff7f1,'rows':_0x45ee99}:null;}})[_0x28e8('0x18')](respondWithResult(_0x4e89a3,null))['catch'](handleError(_0x4e89a3,null));};exports['addConfiguration']=function(_0xb57846,_0x31ac05,_0x3de275){if(_0xb57846[_0x28e8('0x53')]['id']){delete _0xb57846[_0x28e8('0x53')]['id'];}return db[_0x28e8('0x32')][_0x28e8('0x54')]({'where':{'id':_0xb57846[_0x28e8('0x4e')]['id']}})[_0x28e8('0x18')](handleEntityNotFound(_0x31ac05,null))[_0x28e8('0x18')](function(_0x12da5c){if(_0x12da5c){_0xb57846['body'][_0x28e8('0x57')]=_0x12da5c['id'];_0xb57846[_0x28e8('0x53')][_0x28e8('0x58')]=integrations[_0x28e8('0x59')](_0xb57846['body']['channel'],_0xb57846[_0x28e8('0x53')][_0x28e8('0x5a')]);_0xb57846[_0x28e8('0x53')][_0x28e8('0x5b')]=integrations[_0x28e8('0x5c')](_0xb57846[_0x28e8('0x53')][_0x28e8('0x5d')],_0xb57846[_0x28e8('0x53')][_0x28e8('0x5a')]);return db[_0x28e8('0x55')][_0x28e8('0x52')](_0xb57846[_0x28e8('0x53')],{'include':[{'model':db[_0x28e8('0x5e')],'as':'Subjects'},{'model':db[_0x28e8('0x5e')],'as':'Descriptions'}]});}return null;})[_0x28e8('0x18')](respondWithResult(_0x31ac05,null))[_0x28e8('0x22')](handleError(_0x31ac05,null));};exports[_0x28e8('0x5f')]=function(_0x246acf,_0x57a679,_0x26694b){return db[_0x28e8('0x32')][_0x28e8('0x54')]({'where':{'id':_0x246acf[_0x28e8('0x4e')]['id']},'attributes':['id',_0x28e8('0x60'),_0x28e8('0x61')]})['then'](handleEntityNotFound(_0x57a679,null))['then'](function(_0x131076){if(_0x131076){return rp({'method':_0x28e8('0x62'),'uri':util[_0x28e8('0x63')](_0x28e8('0x64'),_0x131076[_0x28e8('0x60')]),'qs':{'authtoken':_0x131076[_0x28e8('0x61')],'scope':_0x28e8('0x65')},'json':!![]});}})[_0x28e8('0x18')](function(_0x58c882){if(_0x58c882){if(_0x58c882[_0x28e8('0x66')]&&_0x58c882[_0x28e8('0x66')]['error']){throw new Error(_0x58c882[_0x28e8('0x66')][_0x28e8('0x1e')][_0x28e8('0x20')]);}var _0x4b28a9=[];if(_0x58c882[_0x28e8('0x67')]&&_0x58c882['Calls'][_0x28e8('0x68')]){if(_0x58c882[_0x28e8('0x67')]['section']['FL']){var _0x4e19d0=['Call\x20Purpose'];for(var _0x5292b9=0x0,_0x1a7cbe=_0x58c882[_0x28e8('0x67')]['section']['FL'][_0x28e8('0x4f')];_0x5292b9<_0x1a7cbe;_0x5292b9++){if(_[_0x28e8('0x69')](_0x4e19d0,_0x58c882[_0x28e8('0x67')][_0x28e8('0x68')]['FL'][_0x5292b9]['dv'])){_0x4b28a9[_0x28e8('0x6a')]({'id':_0x58c882[_0x28e8('0x67')]['section']['FL'][_0x5292b9]['dv'],'name':_0x58c882[_0x28e8('0x67')][_0x28e8('0x68')]['FL'][_0x5292b9][_0x28e8('0x6b')],'custom':_0x58c882[_0x28e8('0x67')]['section']['FL'][_0x5292b9]['customfield']===_0x28e8('0x6c')?!![]:![],'options':_0x58c882[_0x28e8('0x67')][_0x28e8('0x68')]['FL'][_0x5292b9]['type']===_0x28e8('0x6d')&&_0x58c882['Calls'][_0x28e8('0x68')]['FL'][_0x5292b9][_0x28e8('0x6e')]?_[_0x28e8('0x47')](_0x58c882['Calls']['section']['FL'][_0x5292b9][_0x28e8('0x6e')],function(_0x34f9f8){return{'name':_0x34f9f8,'value':_0x34f9f8};}):[]});}}}}return{'count':_0x4b28a9[_0x28e8('0x4f')],'rows':_0x4b28a9};}})['then'](respondWithResult(_0x57a679,null))[_0x28e8('0x22')](function(_0x7fac78){var _0x31539f=_0x246acf[_0x28e8('0x36')][_0x28e8('0x6f')]?0x1f4:_0x7fac78[_0x28e8('0x70')]||0x1f4;logger[_0x28e8('0x1e')](_0x28e8('0x71'),_0x28e8('0x5f'),_0x31539f,JSON[_0x28e8('0x1d')](_0x7fac78));delete _0x7fac78[_0x28e8('0x2f')];if(_0x31539f===0x191){_0x31539f=0x190;}_0x57a679[_0x28e8('0x25')](_0x31539f)['send'](_0x246acf[_0x28e8('0x36')][_0x28e8('0x6f')]?{'message':_0x28e8('0x72'),'statusCode':_0x7fac78[_0x28e8('0x70')]}:_0x7fac78);});};
\ No newline at end of file
+var _0x960b=['day','merge','where','filter','map','include','findAll','show','params','intersection','fields','options','create','body','find','getConfigurations','findOne','ZohoConfiguration','addConfiguration','Subjects','getSubjects','channel','getDescriptions','type','ZohoField','GET','format','https://crm.%s/crm/private/json/Calls/getFields','authToken','crmapi','response','Calls','section','includes','label','customfield','true','Pick\x20List','val','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','fast-json-patch','request-promise','mustache','util','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','../../config/logger','../../config/utils','../../config/environment','../../components/integrations/configuration','jayson/promise','http','request','info','ZohoAccount,\x20%s,\x20%s','request\x20sent','debug','ZohoAccount,\x20%s,\x20%s,\x20%s','error','message','catch','sendStatus','end','status','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','name','send','index','ZohoAccount','rawAttributes','keys','query','dateStart','dateEnd','model','attributes','length','hasOwnProperty','nolimit','order','sort','filters','pick','add'];(function(_0x58a6bd,_0x42d233){var _0x716ecf=function(_0x1904e4){while(--_0x1904e4){_0x58a6bd['push'](_0x58a6bd['shift']());}};_0x716ecf(++_0x42d233);}(_0x960b,0xf7));var _0xb960=function(_0x3e2f65,_0x1ec618){_0x3e2f65=_0x3e2f65-0x0;var _0x232b34=_0x960b[_0x3e2f65];return _0x232b34;};'use strict';var jsonpatch=require(_0xb960('0x0'));var rp=require(_0xb960('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xb960('0x2'));var util=require(_0xb960('0x3'));var path=require('path');var sox=require('sox');var csv=require(_0xb960('0x4'));var ejs=require(_0xb960('0x5'));var fs=require('fs');var _=require(_0xb960('0x6'));var squel=require('squel');var crypto=require(_0xb960('0x7'));var jsforce=require(_0xb960('0x8'));var deskjs=require('desk.js');var toCsv=require(_0xb960('0x4'));var querystring=require(_0xb960('0x9'));var Papa=require(_0xb960('0xa'));var qs=require('../../components/parsers/qs');var logger=require(_0xb960('0xb'))('api');var utils=require(_0xb960('0xc'));var config=require(_0xb960('0xd'));var db=require('../../mysqldb')['db'];var integrations=require(_0xb960('0xe'));var jayson=require(_0xb960('0xf'));var client=jayson['client'][_0xb960('0x10')]({'port':0x232a});function respondWithRpcPromise(_0x497dbf,_0x3efe0c,_0x5115e5,_0x311101){return new BPromise(function(_0x12b527,_0xf2f138){var _0x2eff7b=_0x311101||client;return _0x2eff7b[_0xb960('0x11')](_0x497dbf,_0x5115e5)['then'](function(_0x154938){logger[_0xb960('0x12')](_0xb960('0x13'),_0x3efe0c,_0xb960('0x14'));logger[_0xb960('0x15')](_0xb960('0x16'),_0x3efe0c,_0xb960('0x14'),JSON['stringify'](_0x154938));if(_0x154938[_0xb960('0x17')]){if(_0x154938[_0xb960('0x17')]['code']===0x1f4){logger[_0xb960('0x17')](_0xb960('0x13'),_0x3efe0c,_0x154938['error']['message']);return _0xf2f138(_0x154938['error'][_0xb960('0x18')]);}logger[_0xb960('0x17')](_0xb960('0x13'),_0x3efe0c,_0x154938[_0xb960('0x17')][_0xb960('0x18')]);return _0x12b527(_0x154938[_0xb960('0x17')]['message']);}else{logger[_0xb960('0x12')]('ZohoAccount,\x20%s,\x20%s',_0x3efe0c,'request\x20sent');_0x12b527(_0x154938['result']['message']);}})[_0xb960('0x19')](function(_0x29db69){logger[_0xb960('0x17')](_0xb960('0x13'),_0x3efe0c,_0x29db69);_0xf2f138(_0x29db69);});});}function respondWithStatusCode(_0x13c851,_0x1cfc82){_0x1cfc82=_0x1cfc82||0xcc;return function(_0x425558){if(_0x425558){return _0x13c851[_0xb960('0x1a')](_0x1cfc82);}return _0x13c851['status'](_0x1cfc82)[_0xb960('0x1b')]();};}function respondWithResult(_0x1f0c5b,_0x4e301d){_0x4e301d=_0x4e301d||0xc8;return function(_0x53e0e6){if(_0x53e0e6){return _0x1f0c5b[_0xb960('0x1c')](_0x4e301d)[_0xb960('0x1d')](_0x53e0e6);}};}function respondWithFilteredResult(_0x5e1de8,_0xf024f9){return function(_0x364fc4){if(_0x364fc4){var _0x1af540=_0x364fc4[_0xb960('0x1e')],_0x4aac30=_0xf024f9['offset'],_0x280b57=_0xf024f9[_0xb960('0x1f')]+_0xf024f9[_0xb960('0x20')],_0x3578e5;if(_0x280b57>=_0x1af540){_0x280b57=_0x1af540;_0x3578e5=0xc8;}else{_0x3578e5=0xce;}_0x5e1de8[_0xb960('0x1c')](_0x3578e5);return _0x5e1de8[_0xb960('0x21')](_0xb960('0x22'),_0x4aac30+'-'+_0x280b57+'/'+_0x1af540)[_0xb960('0x1d')](_0x364fc4);}return null;};}function patchUpdates(_0x5ecbd9){return function(_0x28096a){try{jsonpatch['apply'](_0x28096a,_0x5ecbd9,!![]);}catch(_0x1f888b){return BPromise[_0xb960('0x23')](_0x1f888b);}return _0x28096a[_0xb960('0x24')]();};}function saveUpdates(_0x4a71bb,_0xc6ed7d){return function(_0x5a8a08){if(_0x5a8a08){return _0x5a8a08[_0xb960('0x25')](_0x4a71bb)[_0xb960('0x26')](function(_0x2dccc3){return _0x2dccc3;});}return null;};}function removeEntity(_0x115bbc,_0x196f2e){return function(_0x137016){if(_0x137016){return _0x137016[_0xb960('0x27')]()[_0xb960('0x26')](function(){_0x115bbc[_0xb960('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x211716,_0x436a8f){return function(_0x540586){if(!_0x540586){_0x211716[_0xb960('0x1a')](0x194);}return _0x540586;};}function handleError(_0x1cdf9b,_0x1d8af9){_0x1d8af9=_0x1d8af9||0x1f4;return function(_0x154325){logger[_0xb960('0x17')](_0x154325['stack']);if(_0x154325[_0xb960('0x28')]){delete _0x154325[_0xb960('0x28')];}_0x1cdf9b['status'](_0x1d8af9)[_0xb960('0x29')](_0x154325);};}exports[_0xb960('0x2a')]=function(_0x5a697d,_0x264381){var _0x282196={},_0x183a4a={},_0x2755b8={'count':0x0,'rows':[]};var _0xaac8b4=db[_0xb960('0x2b')][_0xb960('0x2c')];_0x183a4a['model']=_[_0xb960('0x2d')](_0xaac8b4);var _0x5dde7f={'dateStart':_0x5a697d[_0xb960('0x2e')][_0xb960('0x2f')],'dateEnd':_0x5a697d[_0xb960('0x2e')][_0xb960('0x30')]};delete _0x5a697d['query'][_0xb960('0x2f')];delete _0x5a697d[_0xb960('0x2e')][_0xb960('0x30')];_0x183a4a['query']=_[_0xb960('0x2d')](_0x5a697d[_0xb960('0x2e')]);_0x183a4a['filters']=_['intersection'](_0x183a4a[_0xb960('0x31')],_0x183a4a[_0xb960('0x2e')]);_0x282196['attributes']=_['intersection'](_0x183a4a[_0xb960('0x31')],qs['fields'](_0x5a697d[_0xb960('0x2e')]['fields']));_0x282196[_0xb960('0x32')]=_0x282196[_0xb960('0x32')][_0xb960('0x33')]?_0x282196['attributes']:_0x183a4a['model'];if(!_0x5a697d[_0xb960('0x2e')][_0xb960('0x34')](_0xb960('0x35'))){_0x282196['limit']=qs[_0xb960('0x20')](_0x5a697d['query'][_0xb960('0x20')]);_0x282196[_0xb960('0x1f')]=qs[_0xb960('0x1f')](_0x5a697d[_0xb960('0x2e')][_0xb960('0x1f')]);}_0x282196[_0xb960('0x36')]=qs[_0xb960('0x37')](_0x5a697d['query'][_0xb960('0x37')]);_0x282196['where']=qs[_0xb960('0x38')](_[_0xb960('0x39')](_0x5a697d[_0xb960('0x2e')],_0x183a4a[_0xb960('0x38')]));if(_0x5dde7f['dateStart']){if(_0x5dde7f[_0xb960('0x30')]){_0x5dde7f[_0xb960('0x30')]=moment(_0x5dde7f[_0xb960('0x30')])[_0xb960('0x3a')](0x1,_0xb960('0x3b'));}else{_0x5dde7f[_0xb960('0x30')]=moment(_0x5dde7f[_0xb960('0x2f')])[_0xb960('0x3a')](0x1,_0xb960('0x3b'));}_[_0xb960('0x3c')](_0x282196[_0xb960('0x3d')],{'createdAt':{'$gte':_0x5dde7f[_0xb960('0x2f')],'$lte':_0x5dde7f['dateEnd']}});}if(_0x5a697d['query'][_0xb960('0x3e')]){_0x282196['where']=_[_0xb960('0x3c')](_0x282196[_0xb960('0x3d')],{'$or':_[_0xb960('0x3f')](_0x282196[_0xb960('0x32')],function(_0x25cf59){var _0x1882fd={};_0x1882fd[_0x25cf59]={'$like':'%'+_0x5a697d[_0xb960('0x2e')][_0xb960('0x3e')]+'%'};return _0x1882fd;})});}_0x282196=_['merge']({},_0x282196,_0x5a697d['options']);var _0x13d66e={'where':_0x282196[_0xb960('0x3d')]};return db[_0xb960('0x2b')][_0xb960('0x1e')](_0x13d66e)[_0xb960('0x26')](function(_0x5d9e94){_0x2755b8[_0xb960('0x1e')]=_0x5d9e94;if(_0x5a697d[_0xb960('0x2e')]['includeAll']){_0x282196[_0xb960('0x40')]=[{'all':!![]}];}return db[_0xb960('0x2b')][_0xb960('0x41')](_0x282196);})['then'](function(_0x3789a7){_0x2755b8['rows']=_0x3789a7;return _0x2755b8;})['then'](respondWithFilteredResult(_0x264381,_0x282196))[_0xb960('0x19')](handleError(_0x264381,null));};exports[_0xb960('0x42')]=function(_0x2f0bbc,_0xee42ce){var _0xa11b9e={'raw':![],'where':{'id':_0x2f0bbc[_0xb960('0x43')]['id']}},_0x4e20a9={};_0x4e20a9[_0xb960('0x31')]=_[_0xb960('0x2d')](db['ZohoAccount']['rawAttributes']);_0x4e20a9['query']=_['keys'](_0x2f0bbc[_0xb960('0x2e')]);_0x4e20a9[_0xb960('0x38')]=_[_0xb960('0x44')](_0x4e20a9[_0xb960('0x31')],_0x4e20a9[_0xb960('0x2e')]);_0xa11b9e[_0xb960('0x32')]=_[_0xb960('0x44')](_0x4e20a9[_0xb960('0x31')],qs[_0xb960('0x45')](_0x2f0bbc[_0xb960('0x2e')][_0xb960('0x45')]));_0xa11b9e[_0xb960('0x32')]=_0xa11b9e[_0xb960('0x32')]['length']?_0xa11b9e['attributes']:_0x4e20a9[_0xb960('0x31')];if(_0x2f0bbc[_0xb960('0x2e')]['includeAll']){_0xa11b9e[_0xb960('0x40')]=[{'all':!![]}];}_0xa11b9e=_[_0xb960('0x3c')]({},_0xa11b9e,_0x2f0bbc[_0xb960('0x46')]);return db['ZohoAccount']['find'](_0xa11b9e)[_0xb960('0x26')](handleEntityNotFound(_0xee42ce,null))[_0xb960('0x26')](respondWithResult(_0xee42ce,null))[_0xb960('0x19')](handleError(_0xee42ce,null));};exports[_0xb960('0x47')]=function(_0x1eb142,_0x4cc373){return db[_0xb960('0x2b')][_0xb960('0x47')](_0x1eb142[_0xb960('0x48')],{})[_0xb960('0x26')](respondWithResult(_0x4cc373,0xc9))[_0xb960('0x19')](handleError(_0x4cc373,null));};exports[_0xb960('0x25')]=function(_0xec020a,_0x19442e){if(_0xec020a[_0xb960('0x48')]['id']){delete _0xec020a['body']['id'];}return db[_0xb960('0x2b')][_0xb960('0x49')]({'where':{'id':_0xec020a[_0xb960('0x43')]['id']}})[_0xb960('0x26')](handleEntityNotFound(_0x19442e,null))[_0xb960('0x26')](saveUpdates(_0xec020a[_0xb960('0x48')],null))[_0xb960('0x26')](respondWithResult(_0x19442e,null))['catch'](handleError(_0x19442e,null));};exports[_0xb960('0x27')]=function(_0x55c0e5,_0x20a6ea){return db['ZohoAccount']['find']({'where':{'id':_0x55c0e5[_0xb960('0x43')]['id']}})['then'](handleEntityNotFound(_0x20a6ea,null))[_0xb960('0x26')](removeEntity(_0x20a6ea,null))[_0xb960('0x19')](handleError(_0x20a6ea,null));};exports[_0xb960('0x4a')]=function(_0x5b992e,_0x5c8090,_0x45cde8){var _0x8509e0={};var _0x44041b={};var _0x21b80f;var _0x3588a5;return db[_0xb960('0x2b')][_0xb960('0x4b')]({'where':{'id':_0x5b992e[_0xb960('0x43')]['id']}})[_0xb960('0x26')](handleEntityNotFound(_0x5c8090,null))['then'](function(_0xd65e9b){if(_0xd65e9b){_0x21b80f=_0xd65e9b;_0x44041b[_0xb960('0x31')]=_[_0xb960('0x2d')](db[_0xb960('0x4c')]['rawAttributes']);_0x44041b['query']=_['keys'](_0x5b992e['query']);_0x44041b['filters']=_[_0xb960('0x44')](_0x44041b[_0xb960('0x31')],_0x44041b['query']);_0x8509e0[_0xb960('0x32')]=_[_0xb960('0x44')](_0x44041b['model'],qs[_0xb960('0x45')](_0x5b992e['query'][_0xb960('0x45')]));_0x8509e0[_0xb960('0x32')]=_0x8509e0[_0xb960('0x32')][_0xb960('0x33')]?_0x8509e0['attributes']:_0x44041b[_0xb960('0x31')];_0x8509e0[_0xb960('0x36')]=qs[_0xb960('0x37')](_0x5b992e[_0xb960('0x2e')]['sort']);_0x8509e0[_0xb960('0x3d')]=qs[_0xb960('0x38')](_[_0xb960('0x39')](_0x5b992e[_0xb960('0x2e')],_0x44041b[_0xb960('0x38')]));if(_0x5b992e['query'][_0xb960('0x3e')]){_0x8509e0['where']=_[_0xb960('0x3c')](_0x8509e0[_0xb960('0x3d')],{'$or':_[_0xb960('0x3f')](_0x8509e0[_0xb960('0x32')],function(_0x50505c){var _0x22f47f={};_0x22f47f[_0x50505c]={'$like':'%'+_0x5b992e[_0xb960('0x2e')][_0xb960('0x3e')]+'%'};return _0x22f47f;})});}_0x8509e0=_[_0xb960('0x3c')]({},_0x8509e0,_0x5b992e['options']);return _0x21b80f[_0xb960('0x4a')](_0x8509e0);}})['then'](function(_0x12e4f8){if(_0x12e4f8){_0x3588a5=_0x12e4f8[_0xb960('0x33')];if(!_0x5b992e[_0xb960('0x2e')]['hasOwnProperty'](_0xb960('0x35'))){_0x8509e0[_0xb960('0x20')]=qs[_0xb960('0x20')](_0x5b992e['query'][_0xb960('0x20')]);_0x8509e0[_0xb960('0x1f')]=qs[_0xb960('0x1f')](_0x5b992e[_0xb960('0x2e')][_0xb960('0x1f')]);}return _0x21b80f[_0xb960('0x4a')](_0x8509e0);}})['then'](function(_0x7842a4){if(_0x7842a4){return _0x7842a4?{'count':_0x3588a5,'rows':_0x7842a4}:null;}})[_0xb960('0x26')](respondWithResult(_0x5c8090,null))[_0xb960('0x19')](handleError(_0x5c8090,null));};exports[_0xb960('0x4d')]=function(_0x41f3b4,_0xd8a86a,_0x4b2df8){if(_0x41f3b4[_0xb960('0x48')]['id']){delete _0x41f3b4[_0xb960('0x48')]['id'];}return db[_0xb960('0x2b')]['findOne']({'where':{'id':_0x41f3b4['params']['id']}})[_0xb960('0x26')](handleEntityNotFound(_0xd8a86a,null))[_0xb960('0x26')](function(_0xe1ae38){if(_0xe1ae38){_0x41f3b4[_0xb960('0x48')]['AccountId']=_0xe1ae38['id'];_0x41f3b4[_0xb960('0x48')][_0xb960('0x4e')]=integrations[_0xb960('0x4f')](_0x41f3b4[_0xb960('0x48')][_0xb960('0x50')],_0x41f3b4['body']['type']);_0x41f3b4[_0xb960('0x48')]['Descriptions']=integrations[_0xb960('0x51')](_0x41f3b4[_0xb960('0x48')]['channel'],_0x41f3b4[_0xb960('0x48')][_0xb960('0x52')]);return db['ZohoConfiguration'][_0xb960('0x47')](_0x41f3b4[_0xb960('0x48')],{'include':[{'model':db[_0xb960('0x53')],'as':'Subjects'},{'model':db[_0xb960('0x53')],'as':'Descriptions'}]});}return null;})[_0xb960('0x26')](respondWithResult(_0xd8a86a,null))[_0xb960('0x19')](handleError(_0xd8a86a,null));};exports['getFields']=function(_0x517a5f,_0x25635f,_0x33938d){return db[_0xb960('0x2b')][_0xb960('0x4b')]({'where':{'id':_0x517a5f['params']['id']},'attributes':['id','host','authToken']})['then'](handleEntityNotFound(_0x25635f,null))[_0xb960('0x26')](function(_0x150210){if(_0x150210){return rp({'method':_0xb960('0x54'),'uri':util[_0xb960('0x55')](_0xb960('0x56'),_0x150210['host']),'qs':{'authtoken':_0x150210[_0xb960('0x57')],'scope':_0xb960('0x58')},'json':!![]});}})[_0xb960('0x26')](function(_0x4bae83){if(_0x4bae83){if(_0x4bae83[_0xb960('0x59')]&&_0x4bae83[_0xb960('0x59')]['error']){throw new Error(_0x4bae83[_0xb960('0x59')][_0xb960('0x17')][_0xb960('0x18')]);}var _0x344ee1=[];if(_0x4bae83[_0xb960('0x5a')]&&_0x4bae83['Calls'][_0xb960('0x5b')]){if(_0x4bae83['Calls'][_0xb960('0x5b')]['FL']){var _0x5451f0=['Call\x20Purpose'];for(var _0x38b0aa=0x0,_0x5beda6=_0x4bae83[_0xb960('0x5a')][_0xb960('0x5b')]['FL'][_0xb960('0x33')];_0x38b0aa<_0x5beda6;_0x38b0aa++){if(_[_0xb960('0x5c')](_0x5451f0,_0x4bae83[_0xb960('0x5a')][_0xb960('0x5b')]['FL'][_0x38b0aa]['dv'])){_0x344ee1['push']({'id':_0x4bae83[_0xb960('0x5a')][_0xb960('0x5b')]['FL'][_0x38b0aa]['dv'],'name':_0x4bae83[_0xb960('0x5a')][_0xb960('0x5b')]['FL'][_0x38b0aa][_0xb960('0x5d')],'custom':_0x4bae83[_0xb960('0x5a')][_0xb960('0x5b')]['FL'][_0x38b0aa][_0xb960('0x5e')]===_0xb960('0x5f')?!![]:![],'options':_0x4bae83[_0xb960('0x5a')][_0xb960('0x5b')]['FL'][_0x38b0aa][_0xb960('0x52')]===_0xb960('0x60')&&_0x4bae83['Calls'][_0xb960('0x5b')]['FL'][_0x38b0aa][_0xb960('0x61')]?_[_0xb960('0x3f')](_0x4bae83['Calls'][_0xb960('0x5b')]['FL'][_0x38b0aa][_0xb960('0x61')],function(_0x257280){return{'name':_0x257280,'value':_0x257280};}):[]});}}}}return{'count':_0x344ee1[_0xb960('0x33')],'rows':_0x344ee1};}})[_0xb960('0x26')](respondWithResult(_0x25635f,null))['catch'](function(_0x3dec54){var _0x1768b0=_0x517a5f[_0xb960('0x2e')][_0xb960('0x62')]?0x1f4:_0x3dec54[_0xb960('0x63')]||0x1f4;logger[_0xb960('0x17')](_0xb960('0x64'),'getFields',_0x1768b0,JSON['stringify'](_0x3dec54));delete _0x3dec54[_0xb960('0x28')];if(_0x1768b0===0x191){_0x1768b0=0x190;}_0x25635f['status'](_0x1768b0)['send'](_0x517a5f['query'][_0xb960('0x62')]?{'message':_0xb960('0x65'),'statusCode':_0x3dec54['statusCode']}:_0x3dec54);});};
\ No newline at end of file
index d1e24ef..487b39b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb92f=['util','../../config/logger','api','moment','bluebird','request-promise','./intZohoAccount.attributes','../../components/integrations/configuration','exports','define','ZohoAccount','int_zoho_accounts','lodash'];(function(_0xe37ca8,_0x1c19b6){var _0xed9211=function(_0x1c215e){while(--_0x1c215e){_0xe37ca8['push'](_0xe37ca8['shift']());}};_0xed9211(++_0x1c19b6);}(_0xb92f,0x1e0));var _0xfb92=function(_0x1bdd26,_0x4f61cb){_0x1bdd26=_0x1bdd26-0x0;var _0x2b25a8=_0xb92f[_0x1bdd26];return _0x2b25a8;};'use strict';var _=require(_0xfb92('0x0'));var util=require(_0xfb92('0x1'));var logger=require(_0xfb92('0x2'))(_0xfb92('0x3'));var moment=require(_0xfb92('0x4'));var BPromise=require(_0xfb92('0x5'));var rp=require(_0xfb92('0x6'));var attributes=require(_0xfb92('0x7'));var integrations=require(_0xfb92('0x8'));module[_0xfb92('0x9')]=function(_0x37357d,_0x3d8cca){return _0x37357d[_0xfb92('0xa')](_0xfb92('0xb'),attributes,{'tableName':_0xfb92('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4ad9=['ZohoAccount','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./intZohoAccount.attributes','../../components/integrations/configuration','exports','define'];(function(_0x9aada2,_0xd2d349){var _0x196dff=function(_0x5ad061){while(--_0x5ad061){_0x9aada2['push'](_0x9aada2['shift']());}};_0x196dff(++_0xd2d349);}(_0x4ad9,0x85));var _0x94ad=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x4ad9[_0x3ab51d];return _0x29a04e;};'use strict';var _=require(_0x94ad('0x0'));var util=require(_0x94ad('0x1'));var logger=require(_0x94ad('0x2'))(_0x94ad('0x3'));var moment=require(_0x94ad('0x4'));var BPromise=require(_0x94ad('0x5'));var rp=require(_0x94ad('0x6'));var attributes=require(_0x94ad('0x7'));var integrations=require(_0x94ad('0x8'));module[_0x94ad('0x9')]=function(_0x2e26f0,_0x11b0fe){return _0x2e26f0[_0x94ad('0xa')](_0x94ad('0xb'),attributes,{'tableName':'int_zoho_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 115108b..f3fb20c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x241f=['ZohoAccount','findAll','options','raw','where','attributes','map','include','model','find','ShowZohoAccount','lodash','util','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','ZohoAccount,\x20%s,\x20%s','request\x20sent','debug','ZohoAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetZohoAccount'];(function(_0x3e589a,_0xf8df5a){var _0x511383=function(_0x161dfe){while(--_0x161dfe){_0x3e589a['push'](_0x3e589a['shift']());}};_0x511383(++_0xf8df5a);}(_0x241f,0x123));var _0xf241=function(_0x5ae93d,_0x48a929){_0x5ae93d=_0x5ae93d-0x0;var _0x3bc344=_0x241f[_0x5ae93d];return _0x3bc344;};'use strict';var _=require(_0xf241('0x0'));var util=require(_0xf241('0x1'));var moment=require('moment');var BPromise=require(_0xf241('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xf241('0x3'))['db'];var utils=require(_0xf241('0x4'));var logger=require(_0xf241('0x5'))(_0xf241('0x6'));var config=require(_0xf241('0x7'));var jayson=require(_0xf241('0x8'));var client=jayson['client'][_0xf241('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2c35ac,_0xf1e386,_0x8f46f5){return new BPromise(function(_0xd94727,_0xc248ac){return client[_0xf241('0xa')](_0x2c35ac,_0x8f46f5)[_0xf241('0xb')](function(_0xca564e){logger[_0xf241('0xc')](_0xf241('0xd'),_0xf1e386,_0xf241('0xe'));logger[_0xf241('0xf')](_0xf241('0x10'),_0xf1e386,'request\x20sent',JSON[_0xf241('0x11')](_0xca564e));if(_0xca564e[_0xf241('0x12')]){if(_0xca564e[_0xf241('0x12')][_0xf241('0x13')]===0x1f4){logger[_0xf241('0x12')](_0xf241('0xd'),_0xf1e386,_0xca564e[_0xf241('0x12')][_0xf241('0x14')]);return _0xc248ac(_0xca564e[_0xf241('0x12')][_0xf241('0x14')]);}logger['error']('ZohoAccount,\x20%s,\x20%s',_0xf1e386,_0xca564e[_0xf241('0x12')][_0xf241('0x14')]);return _0xd94727(_0xca564e[_0xf241('0x12')]['message']);}else{logger[_0xf241('0xc')](_0xf241('0xd'),_0xf1e386,'request\x20sent');_0xd94727(_0xca564e[_0xf241('0x15')][_0xf241('0x14')]);}})[_0xf241('0x16')](function(_0x491793){logger[_0xf241('0x12')]('ZohoAccount,\x20%s,\x20%s',_0xf1e386,_0x491793);_0xc248ac(_0x491793);});});}exports[_0xf241('0x17')]=function(_0x2b48b8){var _0x4d6d8e=this;return new Promise(function(_0x374ea1,_0x1a7a50){return db[_0xf241('0x18')][_0xf241('0x19')]({'raw':_0x2b48b8['options']?_0x2b48b8[_0xf241('0x1a')][_0xf241('0x1b')]===undefined?!![]:![]:!![],'where':_0x2b48b8['options']?_0x2b48b8[_0xf241('0x1a')][_0xf241('0x1c')]||null:null,'attributes':_0x2b48b8[_0xf241('0x1a')]?_0x2b48b8['options'][_0xf241('0x1d')]||null:null,'limit':_0x2b48b8[_0xf241('0x1a')]?_0x2b48b8[_0xf241('0x1a')]['limit']||null:null,'include':_0x2b48b8[_0xf241('0x1a')]?_0x2b48b8[_0xf241('0x1a')]['include']?_[_0xf241('0x1e')](_0x2b48b8[_0xf241('0x1a')][_0xf241('0x1f')],function(_0x20c9f8){return{'model':db[_0x20c9f8[_0xf241('0x20')]],'as':_0x20c9f8['as'],'attributes':_0x20c9f8[_0xf241('0x1d')],'include':_0x20c9f8[_0xf241('0x1f')]?_['map'](_0x20c9f8[_0xf241('0x1f')],function(_0x5113d6){return{'model':db[_0x5113d6[_0xf241('0x20')]],'as':_0x5113d6['as'],'attributes':_0x5113d6[_0xf241('0x1d')],'include':_0x5113d6['include']?_[_0xf241('0x1e')](_0x5113d6['include'],function(_0x4cd4f5){return{'model':db[_0x4cd4f5[_0xf241('0x20')]],'as':_0x4cd4f5['as'],'attributes':_0x4cd4f5[_0xf241('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xf241('0xb')](function(_0x366ed3){logger[_0xf241('0xc')](_0xf241('0x17'),_0x2b48b8);logger[_0xf241('0xf')](_0xf241('0x17'),_0x2b48b8,JSON['stringify'](_0x366ed3));_0x374ea1(_0x366ed3);})['catch'](function(_0x283388){logger[_0xf241('0x12')](_0xf241('0x17'),_0x283388[_0xf241('0x14')],_0x2b48b8);_0x1a7a50(_0x4d6d8e[_0xf241('0x12')](0x1f4,_0x283388['message']));});});};exports['ShowZohoAccount']=function(_0x5d0ab2){var _0x5d2cb3=this;return new Promise(function(_0x59798a,_0x18d4cd){return db[_0xf241('0x18')][_0xf241('0x21')]({'raw':_0x5d0ab2[_0xf241('0x1a')]?_0x5d0ab2[_0xf241('0x1a')][_0xf241('0x1b')]===undefined?!![]:![]:!![],'where':_0x5d0ab2[_0xf241('0x1a')]?_0x5d0ab2[_0xf241('0x1a')][_0xf241('0x1c')]||null:null,'attributes':_0x5d0ab2[_0xf241('0x1a')]?_0x5d0ab2[_0xf241('0x1a')][_0xf241('0x1d')]||null:null,'include':_0x5d0ab2[_0xf241('0x1a')]?_0x5d0ab2[_0xf241('0x1a')][_0xf241('0x1f')]?_[_0xf241('0x1e')](_0x5d0ab2['options']['include'],function(_0x20ce4b){return{'model':db[_0x20ce4b[_0xf241('0x20')]],'as':_0x20ce4b['as'],'attributes':_0x20ce4b[_0xf241('0x1d')],'include':_0x20ce4b[_0xf241('0x1f')]?_[_0xf241('0x1e')](_0x20ce4b[_0xf241('0x1f')],function(_0x39e841){return{'model':db[_0x39e841[_0xf241('0x20')]],'as':_0x39e841['as'],'attributes':_0x39e841['attributes'],'include':_0x39e841['include']?_[_0xf241('0x1e')](_0x39e841['include'],function(_0x1a99ae){return{'model':db[_0x1a99ae[_0xf241('0x20')]],'as':_0x1a99ae['as'],'attributes':_0x1a99ae[_0xf241('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xf241('0xb')](function(_0x5f287d){logger[_0xf241('0xc')](_0xf241('0x22'),_0x5d0ab2);logger[_0xf241('0xf')]('ShowZohoAccount',_0x5d0ab2,JSON[_0xf241('0x11')](_0x5f287d));_0x59798a(_0x5f287d);})['catch'](function(_0x242210){logger['error'](_0xf241('0x22'),_0x242210[_0xf241('0x14')],_0x5d0ab2);_0x18d4cd(_0x5d2cb3['error'](0x1f4,_0x242210[_0xf241('0x14')]));});});};
\ No newline at end of file
+var _0xade4=['ZohoAccount','options','raw','where','attributes','limit','map','include','model','ShowZohoAccount','find','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','jayson/promise','client','http','request','then','ZohoAccount,\x20%s,\x20%s','request\x20sent','debug','ZohoAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','GetZohoAccount'];(function(_0x3b9e4c,_0xab997d){var _0x27ee16=function(_0x320208){while(--_0x320208){_0x3b9e4c['push'](_0x3b9e4c['shift']());}};_0x27ee16(++_0xab997d);}(_0xade4,0x18c));var _0x4ade=function(_0x27a42c,_0x3ea0d3){_0x27a42c=_0x27a42c-0x0;var _0x14ecec=_0xade4[_0x27a42c];return _0x14ecec;};'use strict';var _=require(_0x4ade('0x0'));var util=require(_0x4ade('0x1'));var moment=require('moment');var BPromise=require(_0x4ade('0x2'));var rs=require(_0x4ade('0x3'));var fs=require('fs');var db=require(_0x4ade('0x4'))['db'];var utils=require(_0x4ade('0x5'));var logger=require('../../config/logger')(_0x4ade('0x6'));var config=require('../../config/environment');var jayson=require(_0x4ade('0x7'));var client=jayson[_0x4ade('0x8')][_0x4ade('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3ea6a1,_0x59ed3d,_0x503e72){return new BPromise(function(_0x37ea94,_0x1f7950){return client[_0x4ade('0xa')](_0x3ea6a1,_0x503e72)[_0x4ade('0xb')](function(_0xe9685){logger['info'](_0x4ade('0xc'),_0x59ed3d,_0x4ade('0xd'));logger[_0x4ade('0xe')](_0x4ade('0xf'),_0x59ed3d,_0x4ade('0xd'),JSON[_0x4ade('0x10')](_0xe9685));if(_0xe9685[_0x4ade('0x11')]){if(_0xe9685[_0x4ade('0x11')][_0x4ade('0x12')]===0x1f4){logger['error'](_0x4ade('0xc'),_0x59ed3d,_0xe9685[_0x4ade('0x11')][_0x4ade('0x13')]);return _0x1f7950(_0xe9685['error'][_0x4ade('0x13')]);}logger['error'](_0x4ade('0xc'),_0x59ed3d,_0xe9685[_0x4ade('0x11')][_0x4ade('0x13')]);return _0x37ea94(_0xe9685[_0x4ade('0x11')]['message']);}else{logger[_0x4ade('0x14')](_0x4ade('0xc'),_0x59ed3d,_0x4ade('0xd'));_0x37ea94(_0xe9685[_0x4ade('0x15')][_0x4ade('0x13')]);}})[_0x4ade('0x16')](function(_0x20f951){logger[_0x4ade('0x11')](_0x4ade('0xc'),_0x59ed3d,_0x20f951);_0x1f7950(_0x20f951);});});}exports[_0x4ade('0x17')]=function(_0x26cffa){var _0x3be681=this;return new Promise(function(_0x10141d,_0x4ac4c4){return db[_0x4ade('0x18')]['findAll']({'raw':_0x26cffa[_0x4ade('0x19')]?_0x26cffa[_0x4ade('0x19')][_0x4ade('0x1a')]===undefined?!![]:![]:!![],'where':_0x26cffa[_0x4ade('0x19')]?_0x26cffa[_0x4ade('0x19')][_0x4ade('0x1b')]||null:null,'attributes':_0x26cffa['options']?_0x26cffa[_0x4ade('0x19')][_0x4ade('0x1c')]||null:null,'limit':_0x26cffa['options']?_0x26cffa[_0x4ade('0x19')][_0x4ade('0x1d')]||null:null,'include':_0x26cffa[_0x4ade('0x19')]?_0x26cffa[_0x4ade('0x19')]['include']?_[_0x4ade('0x1e')](_0x26cffa[_0x4ade('0x19')][_0x4ade('0x1f')],function(_0xf9c819){return{'model':db[_0xf9c819[_0x4ade('0x20')]],'as':_0xf9c819['as'],'attributes':_0xf9c819[_0x4ade('0x1c')],'include':_0xf9c819['include']?_[_0x4ade('0x1e')](_0xf9c819[_0x4ade('0x1f')],function(_0x63bf1e){return{'model':db[_0x63bf1e[_0x4ade('0x20')]],'as':_0x63bf1e['as'],'attributes':_0x63bf1e['attributes'],'include':_0x63bf1e[_0x4ade('0x1f')]?_['map'](_0x63bf1e[_0x4ade('0x1f')],function(_0x1277f6){return{'model':db[_0x1277f6[_0x4ade('0x20')]],'as':_0x1277f6['as'],'attributes':_0x1277f6[_0x4ade('0x1c')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x45ee42){logger[_0x4ade('0x14')]('GetZohoAccount',_0x26cffa);logger[_0x4ade('0xe')](_0x4ade('0x17'),_0x26cffa,JSON[_0x4ade('0x10')](_0x45ee42));_0x10141d(_0x45ee42);})['catch'](function(_0x17a7a9){logger[_0x4ade('0x11')](_0x4ade('0x17'),_0x17a7a9[_0x4ade('0x13')],_0x26cffa);_0x4ac4c4(_0x3be681[_0x4ade('0x11')](0x1f4,_0x17a7a9[_0x4ade('0x13')]));});});};exports[_0x4ade('0x21')]=function(_0x2ed2d5){var _0x444b9e=this;return new Promise(function(_0x7d4f65,_0x2d76a2){return db[_0x4ade('0x18')][_0x4ade('0x22')]({'raw':_0x2ed2d5[_0x4ade('0x19')]?_0x2ed2d5[_0x4ade('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x2ed2d5[_0x4ade('0x19')]?_0x2ed2d5['options'][_0x4ade('0x1b')]||null:null,'attributes':_0x2ed2d5[_0x4ade('0x19')]?_0x2ed2d5['options'][_0x4ade('0x1c')]||null:null,'include':_0x2ed2d5[_0x4ade('0x19')]?_0x2ed2d5[_0x4ade('0x19')][_0x4ade('0x1f')]?_[_0x4ade('0x1e')](_0x2ed2d5['options'][_0x4ade('0x1f')],function(_0x3fbfa5){return{'model':db[_0x3fbfa5[_0x4ade('0x20')]],'as':_0x3fbfa5['as'],'attributes':_0x3fbfa5[_0x4ade('0x1c')],'include':_0x3fbfa5[_0x4ade('0x1f')]?_[_0x4ade('0x1e')](_0x3fbfa5[_0x4ade('0x1f')],function(_0x5d2977){return{'model':db[_0x5d2977[_0x4ade('0x20')]],'as':_0x5d2977['as'],'attributes':_0x5d2977[_0x4ade('0x1c')],'include':_0x5d2977['include']?_[_0x4ade('0x1e')](_0x5d2977[_0x4ade('0x1f')],function(_0x9195c1){return{'model':db[_0x9195c1[_0x4ade('0x20')]],'as':_0x9195c1['as'],'attributes':_0x9195c1[_0x4ade('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x4ade('0xb')](function(_0x55c4bf){logger[_0x4ade('0x14')]('ShowZohoAccount',_0x2ed2d5);logger[_0x4ade('0xe')](_0x4ade('0x21'),_0x2ed2d5,JSON[_0x4ade('0x10')](_0x55c4bf));_0x7d4f65(_0x55c4bf);})[_0x4ade('0x16')](function(_0x407e0b){logger[_0x4ade('0x11')](_0x4ade('0x21'),_0x407e0b['message'],_0x2ed2d5);_0x2d76a2(_0x444b9e[_0x4ade('0x11')](0x1f4,_0x407e0b[_0x4ade('0x13')]));});});};
\ No newline at end of file
index 945b8be..e8ad7d4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3400=['/:id/descriptions','getDescriptions','put','/:id','update','delete','destroy','multer','util','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intZohoConfiguration.controller','isAuthenticated','index','get','show','/:id/fields','/:id/subjects','getSubjects'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x3400,0x1d5));var _0x0340=function(_0x28d18d,_0x55896b){_0x28d18d=_0x28d18d-0x0;var _0x470640=_0x3400[_0x28d18d];return _0x470640;};'use strict';var multer=require(_0x0340('0x0'));var util=require(_0x0340('0x1'));var path=require('path');var express=require(_0x0340('0x2'));var router=express['Router']();var auth=require(_0x0340('0x3'));var interaction=require(_0x0340('0x4'));var config=require(_0x0340('0x5'));var controller=require(_0x0340('0x6'));router['get']('/',auth[_0x0340('0x7')](),controller[_0x0340('0x8')]);router[_0x0340('0x9')]('/:id',auth[_0x0340('0x7')](),controller[_0x0340('0xa')]);router[_0x0340('0x9')](_0x0340('0xb'),auth[_0x0340('0x7')](),controller['getFields']);router[_0x0340('0x9')](_0x0340('0xc'),auth[_0x0340('0x7')](),controller[_0x0340('0xd')]);router[_0x0340('0x9')](_0x0340('0xe'),auth[_0x0340('0x7')](),controller[_0x0340('0xf')]);router['post']('/',auth[_0x0340('0x7')](),controller['create']);router[_0x0340('0x10')](_0x0340('0x11'),auth[_0x0340('0x7')](),controller[_0x0340('0x12')]);router[_0x0340('0x13')]('/:id',auth[_0x0340('0x7')](),controller[_0x0340('0x14')]);module['exports']=router;
\ No newline at end of file
+var _0xd5f9=['../../components/auth/service','../../components/interaction/service','../../config/environment','./intZohoConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','/:id/descriptions','getDescriptions','post','create','put','update','delete','destroy','exports','path','express','Router'];(function(_0x4660c9,_0x29e7c9){var _0x4b2780=function(_0x165258){while(--_0x165258){_0x4660c9['push'](_0x4660c9['shift']());}};_0x4b2780(++_0x29e7c9);}(_0xd5f9,0x1f1));var _0x9d5f=function(_0x4cee82,_0x208e67){_0x4cee82=_0x4cee82-0x0;var _0x200c1d=_0xd5f9[_0x4cee82];return _0x200c1d;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x9d5f('0x0'));var express=require(_0x9d5f('0x1'));var router=express[_0x9d5f('0x2')]();var auth=require(_0x9d5f('0x3'));var interaction=require(_0x9d5f('0x4'));var config=require(_0x9d5f('0x5'));var controller=require(_0x9d5f('0x6'));router[_0x9d5f('0x7')]('/',auth[_0x9d5f('0x8')](),controller[_0x9d5f('0x9')]);router[_0x9d5f('0x7')](_0x9d5f('0xa'),auth[_0x9d5f('0x8')](),controller[_0x9d5f('0xb')]);router['get'](_0x9d5f('0xc'),auth[_0x9d5f('0x8')](),controller[_0x9d5f('0xd')]);router[_0x9d5f('0x7')](_0x9d5f('0xe'),auth[_0x9d5f('0x8')](),controller[_0x9d5f('0xf')]);router[_0x9d5f('0x7')](_0x9d5f('0x10'),auth[_0x9d5f('0x8')](),controller[_0x9d5f('0x11')]);router[_0x9d5f('0x12')]('/',auth[_0x9d5f('0x8')](),controller[_0x9d5f('0x13')]);router[_0x9d5f('0x14')](_0x9d5f('0xa'),auth['isAuthenticated'](),controller[_0x9d5f('0x15')]);router[_0x9d5f('0x16')]('/:id',auth[_0x9d5f('0x8')](),controller[_0x9d5f('0x17')]);module[_0x9d5f('0x18')]=router;
\ No newline at end of file
index e60e885..af5e608 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x28e8=['exports','STRING','sequelize'];(function(_0x2300c7,_0x255f74){var _0x23f720=function(_0x3fea57){while(--_0x3fea57){_0x2300c7['push'](_0x2300c7['shift']());}};_0x23f720(++_0x255f74);}(_0x28e8,0x173));var _0x828e=function(_0x5e13e3,_0x1d79d1){_0x5e13e3=_0x5e13e3-0x0;var _0x33900e=_0x28e8[_0x5e13e3];return _0x33900e;};'use strict';var Sequelize=require(_0x828e('0x0'));module[_0x828e('0x1')]={'name':{'type':Sequelize[_0x828e('0x2')]},'description':{'type':Sequelize[_0x828e('0x2')]}};
\ No newline at end of file
+var _0x2993=['STRING'];(function(_0x4da2a6,_0x261779){var _0x2a9788=function(_0x136404){while(--_0x136404){_0x4da2a6['push'](_0x4da2a6['shift']());}};_0x2a9788(++_0x261779);}(_0x2993,0xa6));var _0x3299=function(_0x163abc,_0x5ae42e){_0x163abc=_0x163abc-0x0;var _0x43ab13=_0x2993[_0x163abc];return _0x43ab13;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x3299('0x0')]}};
\ No newline at end of file
index a98fcd2..5c56f0b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['limit','status','Content-Range','apply','reject','save','update','sendStatus','name','send','index','ZohoConfiguration','rawAttributes','model','dateStart','query','dateEnd','keys','intersection','attributes','fields','length','nolimit','order','sort','where','filters','add','day','merge','filter','map','options','count','includeAll','rows','show','params','find','create','body','getFields','findOne','hasOwnProperty','getSubjects','ZohoField','getDescriptions','pick','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','request','then','ZohoConfiguration,\x20%s,\x20%s','request\x20sent','debug','ZohoConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','end','json','offset'];(function(_0x5148b1,_0xf065ee){var _0x5a82a8=function(_0x57d439){while(--_0x57d439){_0x5148b1['push'](_0x5148b1['shift']());}};_0x5a82a8(++_0xf065ee);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3ce3c,_0x319337){_0x3ce3c=_0x3ce3c-0x0;var _0x55a2c9=_0xa9e0[_0x3ce3c];return _0x55a2c9;};'use strict';var jsonpatch=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0a9e('0x3'));var path=require('path');var sox=require(_0x0a9e('0x4'));var csv=require(_0x0a9e('0x5'));var ejs=require(_0x0a9e('0x6'));var fs=require('fs');var _=require(_0x0a9e('0x7'));var squel=require(_0x0a9e('0x8'));var crypto=require('crypto');var jsforce=require(_0x0a9e('0x9'));var deskjs=require(_0x0a9e('0xa'));var toCsv=require(_0x0a9e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0a9e('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x0a9e('0xc'));var config=require(_0x0a9e('0xd'));var db=require(_0x0a9e('0xe'))['db'];var jayson=require(_0x0a9e('0xf'));var client=jayson[_0x0a9e('0x10')][_0x0a9e('0x11')]({'port':0x232a});function respondWithRpcPromise(_0x4a4c56,_0x50dfb2,_0x527cdd,_0x4cfe67){return new BPromise(function(_0x273d4d,_0x36471c){var _0xd5b662=_0x4cfe67||client;return _0xd5b662[_0x0a9e('0x12')](_0x4a4c56,_0x527cdd)[_0x0a9e('0x13')](function(_0x69aeb7){logger['info'](_0x0a9e('0x14'),_0x50dfb2,_0x0a9e('0x15'));logger[_0x0a9e('0x16')](_0x0a9e('0x17'),_0x50dfb2,_0x0a9e('0x15'),JSON[_0x0a9e('0x18')](_0x69aeb7));if(_0x69aeb7['error']){if(_0x69aeb7[_0x0a9e('0x19')]['code']===0x1f4){logger[_0x0a9e('0x19')]('ZohoConfiguration,\x20%s,\x20%s',_0x50dfb2,_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);return _0x36471c(_0x69aeb7['error'][_0x0a9e('0x1a')]);}logger['error'](_0x0a9e('0x14'),_0x50dfb2,_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);return _0x273d4d(_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);}else{logger[_0x0a9e('0x1b')](_0x0a9e('0x14'),_0x50dfb2,_0x0a9e('0x15'));_0x273d4d(_0x69aeb7[_0x0a9e('0x1c')][_0x0a9e('0x1a')]);}})[_0x0a9e('0x1d')](function(_0x105080){logger['error'](_0x0a9e('0x14'),_0x50dfb2,_0x105080);_0x36471c(_0x105080);});});}function respondWithStatusCode(_0x155cce,_0x53682f){_0x53682f=_0x53682f||0xcc;return function(_0x20f109){if(_0x20f109){return _0x155cce['sendStatus'](_0x53682f);}return _0x155cce['status'](_0x53682f)[_0x0a9e('0x1e')]();};}function respondWithResult(_0x432e56,_0x38e7c4){_0x38e7c4=_0x38e7c4||0xc8;return function(_0x30bae6){if(_0x30bae6){return _0x432e56['status'](_0x38e7c4)[_0x0a9e('0x1f')](_0x30bae6);}};}function respondWithFilteredResult(_0x2fb0e4,_0x3b45bc){return function(_0x4d00e6){if(_0x4d00e6){var _0x370d86=_0x4d00e6['count'],_0x42ac8f=_0x3b45bc[_0x0a9e('0x20')],_0x16b1ca=_0x3b45bc[_0x0a9e('0x20')]+_0x3b45bc[_0x0a9e('0x21')],_0x5ea472;if(_0x16b1ca>=_0x370d86){_0x16b1ca=_0x370d86;_0x5ea472=0xc8;}else{_0x5ea472=0xce;}_0x2fb0e4[_0x0a9e('0x22')](_0x5ea472);return _0x2fb0e4['set'](_0x0a9e('0x23'),_0x42ac8f+'-'+_0x16b1ca+'/'+_0x370d86)['json'](_0x4d00e6);}return null;};}function patchUpdates(_0x45a1e7){return function(_0x5bfb33){try{jsonpatch[_0x0a9e('0x24')](_0x5bfb33,_0x45a1e7,!![]);}catch(_0x34dc65){return BPromise[_0x0a9e('0x25')](_0x34dc65);}return _0x5bfb33[_0x0a9e('0x26')]();};}function saveUpdates(_0x140511,_0x1538a4){return function(_0x11c3b6){if(_0x11c3b6){return _0x11c3b6[_0x0a9e('0x27')](_0x140511)['then'](function(_0x3652a7){return _0x3652a7;});}return null;};}function removeEntity(_0x468813,_0x2b1f27){return function(_0x2ec755){if(_0x2ec755){return _0x2ec755['destroy']()[_0x0a9e('0x13')](function(){_0x468813[_0x0a9e('0x22')](0xcc)[_0x0a9e('0x1e')]();});}};}function handleEntityNotFound(_0x824a4f,_0x58b06f){return function(_0x563b45){if(!_0x563b45){_0x824a4f[_0x0a9e('0x28')](0x194);}return _0x563b45;};}function handleError(_0x2e8759,_0x1dbde2){_0x1dbde2=_0x1dbde2||0x1f4;return function(_0x540530){logger[_0x0a9e('0x19')](_0x540530['stack']);if(_0x540530[_0x0a9e('0x29')]){delete _0x540530[_0x0a9e('0x29')];}_0x2e8759[_0x0a9e('0x22')](_0x1dbde2)[_0x0a9e('0x2a')](_0x540530);};}exports[_0x0a9e('0x2b')]=function(_0x5180f1,_0x66c1d2){var _0x46f0a5={},_0x40cb85={},_0x2da5c0={'count':0x0,'rows':[]};var _0x2b45ea=db[_0x0a9e('0x2c')][_0x0a9e('0x2d')];_0x40cb85[_0x0a9e('0x2e')]=_['keys'](_0x2b45ea);var _0x44295a={'dateStart':_0x5180f1['query'][_0x0a9e('0x2f')],'dateEnd':_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x31')]};delete _0x5180f1[_0x0a9e('0x30')]['dateStart'];delete _0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x31')];_0x40cb85[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x5180f1['query']);_0x40cb85['filters']=_[_0x0a9e('0x33')](_0x40cb85['model'],_0x40cb85[_0x0a9e('0x30')]);_0x46f0a5[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x40cb85[_0x0a9e('0x2e')],qs['fields'](_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x35')]));_0x46f0a5[_0x0a9e('0x34')]=_0x46f0a5['attributes'][_0x0a9e('0x36')]?_0x46f0a5[_0x0a9e('0x34')]:_0x40cb85[_0x0a9e('0x2e')];if(!_0x5180f1['query']['hasOwnProperty'](_0x0a9e('0x37'))){_0x46f0a5[_0x0a9e('0x21')]=qs['limit'](_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0x46f0a5[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x5180f1['query']['offset']);}_0x46f0a5[_0x0a9e('0x38')]=qs[_0x0a9e('0x39')](_0x5180f1['query'][_0x0a9e('0x39')]);_0x46f0a5[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x5180f1[_0x0a9e('0x30')],_0x40cb85[_0x0a9e('0x3b')]));if(_0x44295a[_0x0a9e('0x2f')]){if(_0x44295a[_0x0a9e('0x31')]){_0x44295a[_0x0a9e('0x31')]=moment(_0x44295a[_0x0a9e('0x31')])[_0x0a9e('0x3c')](0x1,_0x0a9e('0x3d'));}else{_0x44295a[_0x0a9e('0x31')]=moment(_0x44295a[_0x0a9e('0x2f')])[_0x0a9e('0x3c')](0x1,_0x0a9e('0x3d'));}_[_0x0a9e('0x3e')](_0x46f0a5[_0x0a9e('0x3a')],{'createdAt':{'$gte':_0x44295a[_0x0a9e('0x2f')],'$lte':_0x44295a['dateEnd']}});}if(_0x5180f1['query'][_0x0a9e('0x3f')]){_0x46f0a5[_0x0a9e('0x3a')]=_[_0x0a9e('0x3e')](_0x46f0a5[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x46f0a5[_0x0a9e('0x34')],function(_0x10b040){var _0x445e25={};_0x445e25[_0x10b040]={'$like':'%'+_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0x445e25;})});}_0x46f0a5=_[_0x0a9e('0x3e')]({},_0x46f0a5,_0x5180f1[_0x0a9e('0x41')]);var _0x5026aa={'where':_0x46f0a5[_0x0a9e('0x3a')]};return db[_0x0a9e('0x2c')][_0x0a9e('0x42')](_0x5026aa)[_0x0a9e('0x13')](function(_0x2e8caf){_0x2da5c0[_0x0a9e('0x42')]=_0x2e8caf;if(_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x43')]){_0x46f0a5['include']=[{'all':!![]}];}return db[_0x0a9e('0x2c')]['findAll'](_0x46f0a5);})[_0x0a9e('0x13')](function(_0x476688){_0x2da5c0[_0x0a9e('0x44')]=_0x476688;return _0x2da5c0;})['then'](respondWithFilteredResult(_0x66c1d2,_0x46f0a5))[_0x0a9e('0x1d')](handleError(_0x66c1d2,null));};exports[_0x0a9e('0x45')]=function(_0x4774f4,_0x34aa5a){var _0x45c845={'raw':![],'where':{'id':_0x4774f4[_0x0a9e('0x46')]['id']}},_0x37be73={};_0x37be73['model']=_[_0x0a9e('0x32')](db[_0x0a9e('0x2c')][_0x0a9e('0x2d')]);_0x37be73[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x4774f4[_0x0a9e('0x30')]);_0x37be73[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x37be73[_0x0a9e('0x2e')],_0x37be73['query']);_0x45c845[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x37be73['model'],qs['fields'](_0x4774f4['query'][_0x0a9e('0x35')]));_0x45c845[_0x0a9e('0x34')]=_0x45c845[_0x0a9e('0x34')][_0x0a9e('0x36')]?_0x45c845[_0x0a9e('0x34')]:_0x37be73[_0x0a9e('0x2e')];if(_0x4774f4[_0x0a9e('0x30')][_0x0a9e('0x43')]){_0x45c845['include']=[{'all':!![]}];}_0x45c845=_['merge']({},_0x45c845,_0x4774f4['options']);return db[_0x0a9e('0x2c')][_0x0a9e('0x47')](_0x45c845)[_0x0a9e('0x13')](handleEntityNotFound(_0x34aa5a,null))['then'](respondWithResult(_0x34aa5a,null))[_0x0a9e('0x1d')](handleError(_0x34aa5a,null));};exports[_0x0a9e('0x48')]=function(_0x53d113,_0x5a88da){return db[_0x0a9e('0x2c')]['create'](_0x53d113[_0x0a9e('0x49')],{})['then'](respondWithResult(_0x5a88da,0xc9))[_0x0a9e('0x1d')](handleError(_0x5a88da,null));};exports[_0x0a9e('0x27')]=function(_0x439340,_0x53613a){if(_0x439340[_0x0a9e('0x49')]['id']){delete _0x439340[_0x0a9e('0x49')]['id'];}return db['ZohoConfiguration']['find']({'where':{'id':_0x439340[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x53613a,null))['then'](saveUpdates(_0x439340[_0x0a9e('0x49')],null))['then'](respondWithResult(_0x53613a,null))[_0x0a9e('0x1d')](handleError(_0x53613a,null));};exports['destroy']=function(_0xe22ccc,_0x4a6deb){return db['ZohoConfiguration']['find']({'where':{'id':_0xe22ccc[_0x0a9e('0x46')]['id']}})['then'](handleEntityNotFound(_0x4a6deb,null))[_0x0a9e('0x13')](removeEntity(_0x4a6deb,null))[_0x0a9e('0x1d')](handleError(_0x4a6deb,null));};exports[_0x0a9e('0x4a')]=function(_0x19b4df,_0x232830,_0x272738){var _0xd10662={};var _0x28d814={};var _0x4e67ab;var _0x1c693e;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x19b4df[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x232830,null))[_0x0a9e('0x13')](function(_0x5d86e9){if(_0x5d86e9){_0x4e67ab=_0x5d86e9;_0x28d814[_0x0a9e('0x2e')]=_[_0x0a9e('0x32')](db['ZohoField'][_0x0a9e('0x2d')]);_0x28d814['query']=_[_0x0a9e('0x32')](_0x19b4df['query']);_0x28d814['filters']=_['intersection'](_0x28d814[_0x0a9e('0x2e')],_0x28d814['query']);_0xd10662[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x28d814[_0x0a9e('0x2e')],qs[_0x0a9e('0x35')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x35')]));_0xd10662['attributes']=_0xd10662[_0x0a9e('0x34')]['length']?_0xd10662[_0x0a9e('0x34')]:_0x28d814[_0x0a9e('0x2e')];_0xd10662[_0x0a9e('0x38')]=qs['sort'](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x39')]);_0xd10662[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x19b4df[_0x0a9e('0x30')],_0x28d814[_0x0a9e('0x3b')]));if(_0x19b4df['query'][_0x0a9e('0x3f')]){_0xd10662[_0x0a9e('0x3a')]=_[_0x0a9e('0x3e')](_0xd10662[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0xd10662['attributes'],function(_0x176840){var _0x2937e0={};_0x2937e0[_0x176840]={'$like':'%'+_0x19b4df[_0x0a9e('0x30')]['filter']+'%'};return _0x2937e0;})});}_0xd10662=_[_0x0a9e('0x3e')]({},_0xd10662,_0x19b4df['options']);return _0x4e67ab['getFields'](_0xd10662);}})[_0x0a9e('0x13')](function(_0x4556c5){if(_0x4556c5){_0x1c693e=_0x4556c5[_0x0a9e('0x36')];if(!_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0xd10662[_0x0a9e('0x21')]=qs[_0x0a9e('0x21')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0xd10662[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x20')]);}return _0x4e67ab[_0x0a9e('0x4a')](_0xd10662);}})[_0x0a9e('0x13')](function(_0x2a28c0){if(_0x2a28c0){return _0x2a28c0?{'count':_0x1c693e,'rows':_0x2a28c0}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x232830,null))['catch'](handleError(_0x232830,null));};exports[_0x0a9e('0x4d')]=function(_0x295763,_0x243d12,_0x4edbb0){var _0x1148a1={};var _0x30944e={};var _0x4b341d;var _0x83f0b2;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x295763[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x243d12,null))['then'](function(_0x50cdce){if(_0x50cdce){_0x4b341d=_0x50cdce;_0x30944e['model']=_[_0x0a9e('0x32')](db[_0x0a9e('0x4e')][_0x0a9e('0x2d')]);_0x30944e[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x295763[_0x0a9e('0x30')]);_0x30944e[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x30944e['model'],_0x30944e[_0x0a9e('0x30')]);_0x1148a1[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x30944e['model'],qs[_0x0a9e('0x35')](_0x295763['query'][_0x0a9e('0x35')]));_0x1148a1[_0x0a9e('0x34')]=_0x1148a1['attributes'][_0x0a9e('0x36')]?_0x1148a1[_0x0a9e('0x34')]:_0x30944e[_0x0a9e('0x2e')];_0x1148a1[_0x0a9e('0x38')]=qs['sort'](_0x295763[_0x0a9e('0x30')][_0x0a9e('0x39')]);_0x1148a1[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x295763[_0x0a9e('0x30')],_0x30944e[_0x0a9e('0x3b')]));if(_0x295763[_0x0a9e('0x30')][_0x0a9e('0x3f')]){_0x1148a1['where']=_[_0x0a9e('0x3e')](_0x1148a1[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x1148a1[_0x0a9e('0x34')],function(_0x332367){var _0xdb98ca={};_0xdb98ca[_0x332367]={'$like':'%'+_0x295763[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0xdb98ca;})});}_0x1148a1=_[_0x0a9e('0x3e')]({},_0x1148a1,_0x295763[_0x0a9e('0x41')]);return _0x4b341d[_0x0a9e('0x4d')](_0x1148a1);}})[_0x0a9e('0x13')](function(_0x25744a){if(_0x25744a){_0x83f0b2=_0x25744a[_0x0a9e('0x36')];if(!_0x295763['query'][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0x1148a1[_0x0a9e('0x21')]=qs['limit'](_0x295763[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0x1148a1[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x295763['query']['offset']);}return _0x4b341d[_0x0a9e('0x4d')](_0x1148a1);}})[_0x0a9e('0x13')](function(_0x4c54fa){if(_0x4c54fa){return _0x4c54fa?{'count':_0x83f0b2,'rows':_0x4c54fa}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x243d12,null))['catch'](handleError(_0x243d12,null));};exports[_0x0a9e('0x4f')]=function(_0x8ebf02,_0x5637a1,_0x28a942){var _0x41cf12={};var _0x2d2286={};var _0x42b959;var _0x3755fe;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x8ebf02['params']['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x5637a1,null))[_0x0a9e('0x13')](function(_0x45c109){if(_0x45c109){_0x42b959=_0x45c109;_0x2d2286[_0x0a9e('0x2e')]=_['keys'](db[_0x0a9e('0x4e')][_0x0a9e('0x2d')]);_0x2d2286['query']=_[_0x0a9e('0x32')](_0x8ebf02['query']);_0x2d2286[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x2d2286[_0x0a9e('0x2e')],_0x2d2286[_0x0a9e('0x30')]);_0x41cf12['attributes']=_['intersection'](_0x2d2286[_0x0a9e('0x2e')],qs[_0x0a9e('0x35')](_0x8ebf02[_0x0a9e('0x30')]['fields']));_0x41cf12[_0x0a9e('0x34')]=_0x41cf12[_0x0a9e('0x34')]['length']?_0x41cf12['attributes']:_0x2d2286[_0x0a9e('0x2e')];_0x41cf12['order']=qs['sort'](_0x8ebf02['query'][_0x0a9e('0x39')]);_0x41cf12[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_[_0x0a9e('0x50')](_0x8ebf02[_0x0a9e('0x30')],_0x2d2286[_0x0a9e('0x3b')]));if(_0x8ebf02['query'][_0x0a9e('0x3f')]){_0x41cf12['where']=_[_0x0a9e('0x3e')](_0x41cf12[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x41cf12[_0x0a9e('0x34')],function(_0x50f8d7){var _0x46c9ac={};_0x46c9ac[_0x50f8d7]={'$like':'%'+_0x8ebf02[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0x46c9ac;})});}_0x41cf12=_['merge']({},_0x41cf12,_0x8ebf02[_0x0a9e('0x41')]);return _0x42b959[_0x0a9e('0x4f')](_0x41cf12);}})[_0x0a9e('0x13')](function(_0x22063c){if(_0x22063c){_0x3755fe=_0x22063c[_0x0a9e('0x36')];if(!_0x8ebf02[_0x0a9e('0x30')][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0x41cf12['limit']=qs[_0x0a9e('0x21')](_0x8ebf02[_0x0a9e('0x30')]['limit']);_0x41cf12[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x8ebf02[_0x0a9e('0x30')]['offset']);}return _0x42b959[_0x0a9e('0x4f')](_0x41cf12);}})['then'](function(_0x8c8fbe){if(_0x8c8fbe){return _0x8c8fbe?{'count':_0x3755fe,'rows':_0x8c8fbe}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x5637a1,null))[_0x0a9e('0x1d')](handleError(_0x5637a1,null));};
\ No newline at end of file
+var _0xa9e0=['limit','status','Content-Range','apply','reject','save','update','sendStatus','name','send','index','ZohoConfiguration','rawAttributes','model','dateStart','query','dateEnd','keys','intersection','attributes','fields','length','nolimit','order','sort','where','filters','add','day','merge','filter','map','options','count','includeAll','rows','show','params','find','create','body','getFields','findOne','hasOwnProperty','getSubjects','ZohoField','getDescriptions','pick','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','request','then','ZohoConfiguration,\x20%s,\x20%s','request\x20sent','debug','ZohoConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','end','json','offset'];(function(_0x335b60,_0x50bdf8){var _0x930d32=function(_0x64d5cd){while(--_0x64d5cd){_0x335b60['push'](_0x335b60['shift']());}};_0x930d32(++_0x50bdf8);}(_0xa9e0,0x123));var _0x0a9e=function(_0x47b58b,_0x41a189){_0x47b58b=_0x47b58b-0x0;var _0x46bebe=_0xa9e0[_0x47b58b];return _0x46bebe;};'use strict';var jsonpatch=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0a9e('0x3'));var path=require('path');var sox=require(_0x0a9e('0x4'));var csv=require(_0x0a9e('0x5'));var ejs=require(_0x0a9e('0x6'));var fs=require('fs');var _=require(_0x0a9e('0x7'));var squel=require(_0x0a9e('0x8'));var crypto=require('crypto');var jsforce=require(_0x0a9e('0x9'));var deskjs=require(_0x0a9e('0xa'));var toCsv=require(_0x0a9e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0a9e('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x0a9e('0xc'));var config=require(_0x0a9e('0xd'));var db=require(_0x0a9e('0xe'))['db'];var jayson=require(_0x0a9e('0xf'));var client=jayson[_0x0a9e('0x10')][_0x0a9e('0x11')]({'port':0x232a});function respondWithRpcPromise(_0x4a4c56,_0x50dfb2,_0x527cdd,_0x4cfe67){return new BPromise(function(_0x273d4d,_0x36471c){var _0xd5b662=_0x4cfe67||client;return _0xd5b662[_0x0a9e('0x12')](_0x4a4c56,_0x527cdd)[_0x0a9e('0x13')](function(_0x69aeb7){logger['info'](_0x0a9e('0x14'),_0x50dfb2,_0x0a9e('0x15'));logger[_0x0a9e('0x16')](_0x0a9e('0x17'),_0x50dfb2,_0x0a9e('0x15'),JSON[_0x0a9e('0x18')](_0x69aeb7));if(_0x69aeb7['error']){if(_0x69aeb7[_0x0a9e('0x19')]['code']===0x1f4){logger[_0x0a9e('0x19')]('ZohoConfiguration,\x20%s,\x20%s',_0x50dfb2,_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);return _0x36471c(_0x69aeb7['error'][_0x0a9e('0x1a')]);}logger['error'](_0x0a9e('0x14'),_0x50dfb2,_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);return _0x273d4d(_0x69aeb7[_0x0a9e('0x19')][_0x0a9e('0x1a')]);}else{logger[_0x0a9e('0x1b')](_0x0a9e('0x14'),_0x50dfb2,_0x0a9e('0x15'));_0x273d4d(_0x69aeb7[_0x0a9e('0x1c')][_0x0a9e('0x1a')]);}})[_0x0a9e('0x1d')](function(_0x105080){logger['error'](_0x0a9e('0x14'),_0x50dfb2,_0x105080);_0x36471c(_0x105080);});});}function respondWithStatusCode(_0x155cce,_0x53682f){_0x53682f=_0x53682f||0xcc;return function(_0x20f109){if(_0x20f109){return _0x155cce['sendStatus'](_0x53682f);}return _0x155cce['status'](_0x53682f)[_0x0a9e('0x1e')]();};}function respondWithResult(_0x432e56,_0x38e7c4){_0x38e7c4=_0x38e7c4||0xc8;return function(_0x30bae6){if(_0x30bae6){return _0x432e56['status'](_0x38e7c4)[_0x0a9e('0x1f')](_0x30bae6);}};}function respondWithFilteredResult(_0x2fb0e4,_0x3b45bc){return function(_0x4d00e6){if(_0x4d00e6){var _0x370d86=_0x4d00e6['count'],_0x42ac8f=_0x3b45bc[_0x0a9e('0x20')],_0x16b1ca=_0x3b45bc[_0x0a9e('0x20')]+_0x3b45bc[_0x0a9e('0x21')],_0x5ea472;if(_0x16b1ca>=_0x370d86){_0x16b1ca=_0x370d86;_0x5ea472=0xc8;}else{_0x5ea472=0xce;}_0x2fb0e4[_0x0a9e('0x22')](_0x5ea472);return _0x2fb0e4['set'](_0x0a9e('0x23'),_0x42ac8f+'-'+_0x16b1ca+'/'+_0x370d86)['json'](_0x4d00e6);}return null;};}function patchUpdates(_0x45a1e7){return function(_0x5bfb33){try{jsonpatch[_0x0a9e('0x24')](_0x5bfb33,_0x45a1e7,!![]);}catch(_0x34dc65){return BPromise[_0x0a9e('0x25')](_0x34dc65);}return _0x5bfb33[_0x0a9e('0x26')]();};}function saveUpdates(_0x140511,_0x1538a4){return function(_0x11c3b6){if(_0x11c3b6){return _0x11c3b6[_0x0a9e('0x27')](_0x140511)['then'](function(_0x3652a7){return _0x3652a7;});}return null;};}function removeEntity(_0x468813,_0x2b1f27){return function(_0x2ec755){if(_0x2ec755){return _0x2ec755['destroy']()[_0x0a9e('0x13')](function(){_0x468813[_0x0a9e('0x22')](0xcc)[_0x0a9e('0x1e')]();});}};}function handleEntityNotFound(_0x824a4f,_0x58b06f){return function(_0x563b45){if(!_0x563b45){_0x824a4f[_0x0a9e('0x28')](0x194);}return _0x563b45;};}function handleError(_0x2e8759,_0x1dbde2){_0x1dbde2=_0x1dbde2||0x1f4;return function(_0x540530){logger[_0x0a9e('0x19')](_0x540530['stack']);if(_0x540530[_0x0a9e('0x29')]){delete _0x540530[_0x0a9e('0x29')];}_0x2e8759[_0x0a9e('0x22')](_0x1dbde2)[_0x0a9e('0x2a')](_0x540530);};}exports[_0x0a9e('0x2b')]=function(_0x5180f1,_0x66c1d2){var _0x46f0a5={},_0x40cb85={},_0x2da5c0={'count':0x0,'rows':[]};var _0x2b45ea=db[_0x0a9e('0x2c')][_0x0a9e('0x2d')];_0x40cb85[_0x0a9e('0x2e')]=_['keys'](_0x2b45ea);var _0x44295a={'dateStart':_0x5180f1['query'][_0x0a9e('0x2f')],'dateEnd':_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x31')]};delete _0x5180f1[_0x0a9e('0x30')]['dateStart'];delete _0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x31')];_0x40cb85[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x5180f1['query']);_0x40cb85['filters']=_[_0x0a9e('0x33')](_0x40cb85['model'],_0x40cb85[_0x0a9e('0x30')]);_0x46f0a5[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x40cb85[_0x0a9e('0x2e')],qs['fields'](_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x35')]));_0x46f0a5[_0x0a9e('0x34')]=_0x46f0a5['attributes'][_0x0a9e('0x36')]?_0x46f0a5[_0x0a9e('0x34')]:_0x40cb85[_0x0a9e('0x2e')];if(!_0x5180f1['query']['hasOwnProperty'](_0x0a9e('0x37'))){_0x46f0a5[_0x0a9e('0x21')]=qs['limit'](_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0x46f0a5[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x5180f1['query']['offset']);}_0x46f0a5[_0x0a9e('0x38')]=qs[_0x0a9e('0x39')](_0x5180f1['query'][_0x0a9e('0x39')]);_0x46f0a5[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x5180f1[_0x0a9e('0x30')],_0x40cb85[_0x0a9e('0x3b')]));if(_0x44295a[_0x0a9e('0x2f')]){if(_0x44295a[_0x0a9e('0x31')]){_0x44295a[_0x0a9e('0x31')]=moment(_0x44295a[_0x0a9e('0x31')])[_0x0a9e('0x3c')](0x1,_0x0a9e('0x3d'));}else{_0x44295a[_0x0a9e('0x31')]=moment(_0x44295a[_0x0a9e('0x2f')])[_0x0a9e('0x3c')](0x1,_0x0a9e('0x3d'));}_[_0x0a9e('0x3e')](_0x46f0a5[_0x0a9e('0x3a')],{'createdAt':{'$gte':_0x44295a[_0x0a9e('0x2f')],'$lte':_0x44295a['dateEnd']}});}if(_0x5180f1['query'][_0x0a9e('0x3f')]){_0x46f0a5[_0x0a9e('0x3a')]=_[_0x0a9e('0x3e')](_0x46f0a5[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x46f0a5[_0x0a9e('0x34')],function(_0x10b040){var _0x445e25={};_0x445e25[_0x10b040]={'$like':'%'+_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0x445e25;})});}_0x46f0a5=_[_0x0a9e('0x3e')]({},_0x46f0a5,_0x5180f1[_0x0a9e('0x41')]);var _0x5026aa={'where':_0x46f0a5[_0x0a9e('0x3a')]};return db[_0x0a9e('0x2c')][_0x0a9e('0x42')](_0x5026aa)[_0x0a9e('0x13')](function(_0x2e8caf){_0x2da5c0[_0x0a9e('0x42')]=_0x2e8caf;if(_0x5180f1[_0x0a9e('0x30')][_0x0a9e('0x43')]){_0x46f0a5['include']=[{'all':!![]}];}return db[_0x0a9e('0x2c')]['findAll'](_0x46f0a5);})[_0x0a9e('0x13')](function(_0x476688){_0x2da5c0[_0x0a9e('0x44')]=_0x476688;return _0x2da5c0;})['then'](respondWithFilteredResult(_0x66c1d2,_0x46f0a5))[_0x0a9e('0x1d')](handleError(_0x66c1d2,null));};exports[_0x0a9e('0x45')]=function(_0x4774f4,_0x34aa5a){var _0x45c845={'raw':![],'where':{'id':_0x4774f4[_0x0a9e('0x46')]['id']}},_0x37be73={};_0x37be73['model']=_[_0x0a9e('0x32')](db[_0x0a9e('0x2c')][_0x0a9e('0x2d')]);_0x37be73[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x4774f4[_0x0a9e('0x30')]);_0x37be73[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x37be73[_0x0a9e('0x2e')],_0x37be73['query']);_0x45c845[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x37be73['model'],qs['fields'](_0x4774f4['query'][_0x0a9e('0x35')]));_0x45c845[_0x0a9e('0x34')]=_0x45c845[_0x0a9e('0x34')][_0x0a9e('0x36')]?_0x45c845[_0x0a9e('0x34')]:_0x37be73[_0x0a9e('0x2e')];if(_0x4774f4[_0x0a9e('0x30')][_0x0a9e('0x43')]){_0x45c845['include']=[{'all':!![]}];}_0x45c845=_['merge']({},_0x45c845,_0x4774f4['options']);return db[_0x0a9e('0x2c')][_0x0a9e('0x47')](_0x45c845)[_0x0a9e('0x13')](handleEntityNotFound(_0x34aa5a,null))['then'](respondWithResult(_0x34aa5a,null))[_0x0a9e('0x1d')](handleError(_0x34aa5a,null));};exports[_0x0a9e('0x48')]=function(_0x53d113,_0x5a88da){return db[_0x0a9e('0x2c')]['create'](_0x53d113[_0x0a9e('0x49')],{})['then'](respondWithResult(_0x5a88da,0xc9))[_0x0a9e('0x1d')](handleError(_0x5a88da,null));};exports[_0x0a9e('0x27')]=function(_0x439340,_0x53613a){if(_0x439340[_0x0a9e('0x49')]['id']){delete _0x439340[_0x0a9e('0x49')]['id'];}return db['ZohoConfiguration']['find']({'where':{'id':_0x439340[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x53613a,null))['then'](saveUpdates(_0x439340[_0x0a9e('0x49')],null))['then'](respondWithResult(_0x53613a,null))[_0x0a9e('0x1d')](handleError(_0x53613a,null));};exports['destroy']=function(_0xe22ccc,_0x4a6deb){return db['ZohoConfiguration']['find']({'where':{'id':_0xe22ccc[_0x0a9e('0x46')]['id']}})['then'](handleEntityNotFound(_0x4a6deb,null))[_0x0a9e('0x13')](removeEntity(_0x4a6deb,null))[_0x0a9e('0x1d')](handleError(_0x4a6deb,null));};exports[_0x0a9e('0x4a')]=function(_0x19b4df,_0x232830,_0x272738){var _0xd10662={};var _0x28d814={};var _0x4e67ab;var _0x1c693e;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x19b4df[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x232830,null))[_0x0a9e('0x13')](function(_0x5d86e9){if(_0x5d86e9){_0x4e67ab=_0x5d86e9;_0x28d814[_0x0a9e('0x2e')]=_[_0x0a9e('0x32')](db['ZohoField'][_0x0a9e('0x2d')]);_0x28d814['query']=_[_0x0a9e('0x32')](_0x19b4df['query']);_0x28d814['filters']=_['intersection'](_0x28d814[_0x0a9e('0x2e')],_0x28d814['query']);_0xd10662[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x28d814[_0x0a9e('0x2e')],qs[_0x0a9e('0x35')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x35')]));_0xd10662['attributes']=_0xd10662[_0x0a9e('0x34')]['length']?_0xd10662[_0x0a9e('0x34')]:_0x28d814[_0x0a9e('0x2e')];_0xd10662[_0x0a9e('0x38')]=qs['sort'](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x39')]);_0xd10662[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x19b4df[_0x0a9e('0x30')],_0x28d814[_0x0a9e('0x3b')]));if(_0x19b4df['query'][_0x0a9e('0x3f')]){_0xd10662[_0x0a9e('0x3a')]=_[_0x0a9e('0x3e')](_0xd10662[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0xd10662['attributes'],function(_0x176840){var _0x2937e0={};_0x2937e0[_0x176840]={'$like':'%'+_0x19b4df[_0x0a9e('0x30')]['filter']+'%'};return _0x2937e0;})});}_0xd10662=_[_0x0a9e('0x3e')]({},_0xd10662,_0x19b4df['options']);return _0x4e67ab['getFields'](_0xd10662);}})[_0x0a9e('0x13')](function(_0x4556c5){if(_0x4556c5){_0x1c693e=_0x4556c5[_0x0a9e('0x36')];if(!_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0xd10662[_0x0a9e('0x21')]=qs[_0x0a9e('0x21')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0xd10662[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x19b4df[_0x0a9e('0x30')][_0x0a9e('0x20')]);}return _0x4e67ab[_0x0a9e('0x4a')](_0xd10662);}})[_0x0a9e('0x13')](function(_0x2a28c0){if(_0x2a28c0){return _0x2a28c0?{'count':_0x1c693e,'rows':_0x2a28c0}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x232830,null))['catch'](handleError(_0x232830,null));};exports[_0x0a9e('0x4d')]=function(_0x295763,_0x243d12,_0x4edbb0){var _0x1148a1={};var _0x30944e={};var _0x4b341d;var _0x83f0b2;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x295763[_0x0a9e('0x46')]['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x243d12,null))['then'](function(_0x50cdce){if(_0x50cdce){_0x4b341d=_0x50cdce;_0x30944e['model']=_[_0x0a9e('0x32')](db[_0x0a9e('0x4e')][_0x0a9e('0x2d')]);_0x30944e[_0x0a9e('0x30')]=_[_0x0a9e('0x32')](_0x295763[_0x0a9e('0x30')]);_0x30944e[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x30944e['model'],_0x30944e[_0x0a9e('0x30')]);_0x1148a1[_0x0a9e('0x34')]=_[_0x0a9e('0x33')](_0x30944e['model'],qs[_0x0a9e('0x35')](_0x295763['query'][_0x0a9e('0x35')]));_0x1148a1[_0x0a9e('0x34')]=_0x1148a1['attributes'][_0x0a9e('0x36')]?_0x1148a1[_0x0a9e('0x34')]:_0x30944e[_0x0a9e('0x2e')];_0x1148a1[_0x0a9e('0x38')]=qs['sort'](_0x295763[_0x0a9e('0x30')][_0x0a9e('0x39')]);_0x1148a1[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_['pick'](_0x295763[_0x0a9e('0x30')],_0x30944e[_0x0a9e('0x3b')]));if(_0x295763[_0x0a9e('0x30')][_0x0a9e('0x3f')]){_0x1148a1['where']=_[_0x0a9e('0x3e')](_0x1148a1[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x1148a1[_0x0a9e('0x34')],function(_0x332367){var _0xdb98ca={};_0xdb98ca[_0x332367]={'$like':'%'+_0x295763[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0xdb98ca;})});}_0x1148a1=_[_0x0a9e('0x3e')]({},_0x1148a1,_0x295763[_0x0a9e('0x41')]);return _0x4b341d[_0x0a9e('0x4d')](_0x1148a1);}})[_0x0a9e('0x13')](function(_0x25744a){if(_0x25744a){_0x83f0b2=_0x25744a[_0x0a9e('0x36')];if(!_0x295763['query'][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0x1148a1[_0x0a9e('0x21')]=qs['limit'](_0x295763[_0x0a9e('0x30')][_0x0a9e('0x21')]);_0x1148a1[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x295763['query']['offset']);}return _0x4b341d[_0x0a9e('0x4d')](_0x1148a1);}})[_0x0a9e('0x13')](function(_0x4c54fa){if(_0x4c54fa){return _0x4c54fa?{'count':_0x83f0b2,'rows':_0x4c54fa}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x243d12,null))['catch'](handleError(_0x243d12,null));};exports[_0x0a9e('0x4f')]=function(_0x8ebf02,_0x5637a1,_0x28a942){var _0x41cf12={};var _0x2d2286={};var _0x42b959;var _0x3755fe;return db[_0x0a9e('0x2c')][_0x0a9e('0x4b')]({'where':{'id':_0x8ebf02['params']['id']}})[_0x0a9e('0x13')](handleEntityNotFound(_0x5637a1,null))[_0x0a9e('0x13')](function(_0x45c109){if(_0x45c109){_0x42b959=_0x45c109;_0x2d2286[_0x0a9e('0x2e')]=_['keys'](db[_0x0a9e('0x4e')][_0x0a9e('0x2d')]);_0x2d2286['query']=_[_0x0a9e('0x32')](_0x8ebf02['query']);_0x2d2286[_0x0a9e('0x3b')]=_[_0x0a9e('0x33')](_0x2d2286[_0x0a9e('0x2e')],_0x2d2286[_0x0a9e('0x30')]);_0x41cf12['attributes']=_['intersection'](_0x2d2286[_0x0a9e('0x2e')],qs[_0x0a9e('0x35')](_0x8ebf02[_0x0a9e('0x30')]['fields']));_0x41cf12[_0x0a9e('0x34')]=_0x41cf12[_0x0a9e('0x34')]['length']?_0x41cf12['attributes']:_0x2d2286[_0x0a9e('0x2e')];_0x41cf12['order']=qs['sort'](_0x8ebf02['query'][_0x0a9e('0x39')]);_0x41cf12[_0x0a9e('0x3a')]=qs[_0x0a9e('0x3b')](_[_0x0a9e('0x50')](_0x8ebf02[_0x0a9e('0x30')],_0x2d2286[_0x0a9e('0x3b')]));if(_0x8ebf02['query'][_0x0a9e('0x3f')]){_0x41cf12['where']=_[_0x0a9e('0x3e')](_0x41cf12[_0x0a9e('0x3a')],{'$or':_[_0x0a9e('0x40')](_0x41cf12[_0x0a9e('0x34')],function(_0x50f8d7){var _0x46c9ac={};_0x46c9ac[_0x50f8d7]={'$like':'%'+_0x8ebf02[_0x0a9e('0x30')][_0x0a9e('0x3f')]+'%'};return _0x46c9ac;})});}_0x41cf12=_['merge']({},_0x41cf12,_0x8ebf02[_0x0a9e('0x41')]);return _0x42b959[_0x0a9e('0x4f')](_0x41cf12);}})[_0x0a9e('0x13')](function(_0x22063c){if(_0x22063c){_0x3755fe=_0x22063c[_0x0a9e('0x36')];if(!_0x8ebf02[_0x0a9e('0x30')][_0x0a9e('0x4c')](_0x0a9e('0x37'))){_0x41cf12['limit']=qs[_0x0a9e('0x21')](_0x8ebf02[_0x0a9e('0x30')]['limit']);_0x41cf12[_0x0a9e('0x20')]=qs[_0x0a9e('0x20')](_0x8ebf02[_0x0a9e('0x30')]['offset']);}return _0x42b959[_0x0a9e('0x4f')](_0x41cf12);}})['then'](function(_0x8c8fbe){if(_0x8c8fbe){return _0x8c8fbe?{'count':_0x3755fe,'rows':_0x8c8fbe}:null;}})[_0x0a9e('0x13')](respondWithResult(_0x5637a1,null))[_0x0a9e('0x1d')](handleError(_0x5637a1,null));};
\ No newline at end of file
index e37e7f0..d04e15b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a84=['ZohoConfiguration','int_zoho_configurations','lodash','util','../../config/logger','api','./intZohoConfiguration.attributes','exports'];(function(_0x2bef71,_0x447c10){var _0x3b5700=function(_0x190eff){while(--_0x190eff){_0x2bef71['push'](_0x2bef71['shift']());}};_0x3b5700(++_0x447c10);}(_0x7a84,0x182));var _0x47a8=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x7a84[_0xa464c9];return _0x3d73c4;};'use strict';var _=require(_0x47a8('0x0'));var util=require(_0x47a8('0x1'));var logger=require(_0x47a8('0x2'))(_0x47a8('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x47a8('0x4'));module[_0x47a8('0x5')]=function(_0x19c7a0,_0x24595f){return _0x19c7a0['define'](_0x47a8('0x6'),attributes,{'tableName':_0x47a8('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5127=['define','ZohoConfiguration','int_zoho_configurations','lodash','util','../../config/logger','api','request-promise','exports'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x5127,0x18f));var _0x7512=function(_0x1a7edf,_0x5c4e04){_0x1a7edf=_0x1a7edf-0x0;var _0x56c1d9=_0x5127[_0x1a7edf];return _0x56c1d9;};'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('bluebird');var rp=require(_0x7512('0x4'));var attributes=require('./intZohoConfiguration.attributes');module[_0x7512('0x5')]=function(_0x2768d5,_0x3659a2){return _0x2768d5[_0x7512('0x6')](_0x7512('0x7'),attributes,{'tableName':_0x7512('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b4446be..2d9d2c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b0e=['client','http','request','then','ZohoConfiguration,\x20%s,\x20%s','request\x20sent','ZohoConfiguration,\x20%s,\x20%s,\x20%s','error','code','message','result','lodash','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x41ab19,_0x9a22ae){var _0x50f427=function(_0x556c4c){while(--_0x556c4c){_0x41ab19['push'](_0x41ab19['shift']());}};_0x50f427(++_0x9a22ae);}(_0x0b0e,0x187));var _0xe0b0=function(_0x232ec0,_0x45fdd0){_0x232ec0=_0x232ec0-0x0;var _0x356705=_0x0b0e[_0x232ec0];return _0x356705;};'use strict';var _=require(_0xe0b0('0x0'));var util=require('util');var moment=require(_0xe0b0('0x1'));var BPromise=require('bluebird');var rs=require(_0xe0b0('0x2'));var fs=require('fs');var db=require(_0xe0b0('0x3'))['db'];var utils=require(_0xe0b0('0x4'));var logger=require(_0xe0b0('0x5'))(_0xe0b0('0x6'));var config=require(_0xe0b0('0x7'));var jayson=require(_0xe0b0('0x8'));var client=jayson[_0xe0b0('0x9')][_0xe0b0('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x28e40f,_0x219b1c,_0x5cf9cc){return new BPromise(function(_0x50be7f,_0x11effc){return client[_0xe0b0('0xb')](_0x28e40f,_0x5cf9cc)[_0xe0b0('0xc')](function(_0x2ac27e){logger['info'](_0xe0b0('0xd'),_0x219b1c,_0xe0b0('0xe'));logger['debug'](_0xe0b0('0xf'),_0x219b1c,_0xe0b0('0xe'),JSON['stringify'](_0x2ac27e));if(_0x2ac27e[_0xe0b0('0x10')]){if(_0x2ac27e[_0xe0b0('0x10')][_0xe0b0('0x11')]===0x1f4){logger['error'](_0xe0b0('0xd'),_0x219b1c,_0x2ac27e[_0xe0b0('0x10')][_0xe0b0('0x12')]);return _0x11effc(_0x2ac27e[_0xe0b0('0x10')][_0xe0b0('0x12')]);}logger['error'](_0xe0b0('0xd'),_0x219b1c,_0x2ac27e[_0xe0b0('0x10')][_0xe0b0('0x12')]);return _0x50be7f(_0x2ac27e[_0xe0b0('0x10')][_0xe0b0('0x12')]);}else{logger['info'](_0xe0b0('0xd'),_0x219b1c,'request\x20sent');_0x50be7f(_0x2ac27e[_0xe0b0('0x13')][_0xe0b0('0x12')]);}})['catch'](function(_0x11fdca){logger['error'](_0xe0b0('0xd'),_0x219b1c,_0x11fdca);_0x11effc(_0x11fdca);});});}
\ No newline at end of file
+var _0xdb28=['moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','info','request\x20sent','debug','ZohoConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','ZohoConfiguration,\x20%s,\x20%s','message','result','catch','lodash','util'];(function(_0xdea41a,_0x552987){var _0x15d0d8=function(_0x1e0d0b){while(--_0x1e0d0b){_0xdea41a['push'](_0xdea41a['shift']());}};_0x15d0d8(++_0x552987);}(_0xdb28,0x106));var _0x8db2=function(_0x5b3bb2,_0x4b6790){_0x5b3bb2=_0x5b3bb2-0x0;var _0x5f1196=_0xdb28[_0x5b3bb2];return _0x5f1196;};'use strict';var _=require(_0x8db2('0x0'));var util=require(_0x8db2('0x1'));var moment=require(_0x8db2('0x2'));var BPromise=require(_0x8db2('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x8db2('0x4'))['db'];var utils=require(_0x8db2('0x5'));var logger=require(_0x8db2('0x6'))(_0x8db2('0x7'));var config=require(_0x8db2('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x8db2('0x9')][_0x8db2('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x5f42ee,_0x494b40,_0x477f50){return new BPromise(function(_0x46932f,_0x131537){return client[_0x8db2('0xb')](_0x5f42ee,_0x477f50)[_0x8db2('0xc')](function(_0x1ff362){logger[_0x8db2('0xd')]('ZohoConfiguration,\x20%s,\x20%s',_0x494b40,_0x8db2('0xe'));logger[_0x8db2('0xf')](_0x8db2('0x10'),_0x494b40,'request\x20sent',JSON[_0x8db2('0x11')](_0x1ff362));if(_0x1ff362[_0x8db2('0x12')]){if(_0x1ff362['error'][_0x8db2('0x13')]===0x1f4){logger[_0x8db2('0x12')](_0x8db2('0x14'),_0x494b40,_0x1ff362[_0x8db2('0x12')][_0x8db2('0x15')]);return _0x131537(_0x1ff362['error']['message']);}logger[_0x8db2('0x12')](_0x8db2('0x14'),_0x494b40,_0x1ff362[_0x8db2('0x12')][_0x8db2('0x15')]);return _0x46932f(_0x1ff362[_0x8db2('0x12')][_0x8db2('0x15')]);}else{logger[_0x8db2('0xd')](_0x8db2('0x14'),_0x494b40,_0x8db2('0xe'));_0x46932f(_0x1ff362[_0x8db2('0x16')]['message']);}})[_0x8db2('0x17')](function(_0x24da1b){logger['error'](_0x8db2('0x14'),_0x494b40,_0x24da1b);_0x131537(_0x24da1b);});});}
\ No newline at end of file
index 680ed96..3eea630 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x10f5=['destroy','exports','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intZohoField.controller','get','isAuthenticated','/:id','post','create','update','delete'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0x10f5,0xe2));var _0x510f=function(_0x288efd,_0x86ff6b){_0x288efd=_0x288efd-0x0;var _0x7466bb=_0x10f5[_0x288efd];return _0x7466bb;};'use strict';var multer=require('multer');var util=require(_0x510f('0x0'));var path=require(_0x510f('0x1'));var express=require('express');var router=express[_0x510f('0x2')]();var auth=require(_0x510f('0x3'));var interaction=require(_0x510f('0x4'));var config=require(_0x510f('0x5'));var controller=require(_0x510f('0x6'));router[_0x510f('0x7')]('/',auth[_0x510f('0x8')](),controller['index']);router['get'](_0x510f('0x9'),auth['isAuthenticated'](),controller['show']);router[_0x510f('0xa')]('/',auth[_0x510f('0x8')](),controller[_0x510f('0xb')]);router['put'](_0x510f('0x9'),auth['isAuthenticated'](),controller[_0x510f('0xc')]);router[_0x510f('0xd')]('/:id',auth['isAuthenticated'](),controller[_0x510f('0xe')]);module[_0x510f('0xf')]=router;
\ No newline at end of file
+var _0xa729=['util','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intZohoField.controller','get','isAuthenticated','/:id','show','post','create','put','update','delete','destroy','multer'];(function(_0x560d00,_0x5ef422){var _0xd80ada=function(_0x2b0fb2){while(--_0x2b0fb2){_0x560d00['push'](_0x560d00['shift']());}};_0xd80ada(++_0x5ef422);}(_0xa729,0x1ec));var _0x9a72=function(_0xd68794,_0x735596){_0xd68794=_0xd68794-0x0;var _0x595c66=_0xa729[_0xd68794];return _0x595c66;};'use strict';var multer=require(_0x9a72('0x0'));var util=require(_0x9a72('0x1'));var path=require('path');var express=require('express');var router=express[_0x9a72('0x2')]();var auth=require(_0x9a72('0x3'));var interaction=require(_0x9a72('0x4'));var config=require(_0x9a72('0x5'));var controller=require(_0x9a72('0x6'));router[_0x9a72('0x7')]('/',auth[_0x9a72('0x8')](),controller['index']);router[_0x9a72('0x7')](_0x9a72('0x9'),auth[_0x9a72('0x8')](),controller[_0x9a72('0xa')]);router[_0x9a72('0xb')]('/',auth['isAuthenticated'](),controller[_0x9a72('0xc')]);router[_0x9a72('0xd')](_0x9a72('0x9'),auth[_0x9a72('0x8')](),controller[_0x9a72('0xe')]);router[_0x9a72('0xf')]('/:id',auth[_0x9a72('0x8')](),controller[_0x9a72('0x10')]);module['exports']=router;
\ No newline at end of file
index 9f16e6f..0ea76ba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa75b=['customVariable','keyValue','STRING','ENUM','sequelize','string','variable'];(function(_0x6131cd,_0x4c26a1){var _0x47e916=function(_0x1f2bce){while(--_0x1f2bce){_0x6131cd['push'](_0x6131cd['shift']());}};_0x47e916(++_0x4c26a1);}(_0xa75b,0x170));var _0xba75=function(_0x47c3f3,_0x39d4e9){_0x47c3f3=_0x47c3f3-0x0;var _0x1be0df=_0xa75b[_0x47c3f3];return _0x1be0df;};'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 _0x13f6=['variable','customVariable','keyValue','STRING','ENUM','sequelize','exports'];(function(_0x2ba590,_0x4bb9ea){var _0x2a64df=function(_0xca4fea){while(--_0xca4fea){_0x2ba590['push'](_0x2ba590['shift']());}};_0x2a64df(++_0x4bb9ea);}(_0x13f6,0x124));var _0x613f=function(_0x265d3d,_0x5a499e){_0x265d3d=_0x265d3d-0x0;var _0x57af45=_0x13f6[_0x265d3d];return _0x57af45;};'use strict';var Sequelize=require(_0x613f('0x0'));module[_0x613f('0x1')]={'type':{'type':Sequelize['ENUM']('string',_0x613f('0x2'),_0x613f('0x3'),_0x613f('0x4')),'defaultValue':'string'},'content':{'type':Sequelize[_0x613f('0x5')]},'key':{'type':Sequelize[_0x613f('0x5')]},'keyType':{'type':Sequelize[_0x613f('0x6')]('string',_0x613f('0x2'),_0x613f('0x3'))},'keyContent':{'type':Sequelize['STRING']},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x613f('0x5')]}};
\ No newline at end of file
index 739f9cb..be30220 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5493=['Content-Range','apply','save','update','destroy','then','sendStatus','error','stack','name','send','index','ZohoField','rawAttributes','keys','dateStart','query','dateEnd','filters','intersection','model','fields','attributes','length','nolimit','order','sort','where','add','day','merge','filter','options','includeAll','findAll','rows','find','create','body','catch','params','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','api','../../config/utils','../../config/environment','../../mysqldb','end','json','count','offset','limit','status','set'];(function(_0x3d0fa1,_0xd57cd6){var _0x4660bc=function(_0x5358ac){while(--_0x5358ac){_0x3d0fa1['push'](_0x3d0fa1['shift']());}};_0x4660bc(++_0xd57cd6);}(_0x5493,0x6c));var _0x3549=function(_0x538bf4,_0x1ddff8){_0x538bf4=_0x538bf4-0x0;var _0x8d48c3=_0x5493[_0x538bf4];return _0x8d48c3;};'use strict';var jsonpatch=require(_0x3549('0x0'));var rp=require(_0x3549('0x1'));var moment=require(_0x3549('0x2'));var BPromise=require(_0x3549('0x3'));var Mustache=require(_0x3549('0x4'));var util=require('util');var path=require(_0x3549('0x5'));var sox=require(_0x3549('0x6'));var csv=require(_0x3549('0x7'));var ejs=require(_0x3549('0x8'));var fs=require('fs');var _=require(_0x3549('0x9'));var squel=require(_0x3549('0xa'));var crypto=require(_0x3549('0xb'));var jsforce=require(_0x3549('0xc'));var deskjs=require(_0x3549('0xd'));var toCsv=require('to-csv');var querystring=require(_0x3549('0xe'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x3549('0xf'));var utils=require(_0x3549('0x10'));var config=require(_0x3549('0x11'));var db=require(_0x3549('0x12'))['db'];function respondWithStatusCode(_0x226bd3,_0x14928c){_0x14928c=_0x14928c||0xcc;return function(_0x3190e9){if(_0x3190e9){return _0x226bd3['sendStatus'](_0x14928c);}return _0x226bd3['status'](_0x14928c)[_0x3549('0x13')]();};}function respondWithResult(_0x1e9e49,_0x1856f8){_0x1856f8=_0x1856f8||0xc8;return function(_0x458caa){if(_0x458caa){return _0x1e9e49['status'](_0x1856f8)[_0x3549('0x14')](_0x458caa);}};}function respondWithFilteredResult(_0x29fcab,_0x486a14){return function(_0xd1ba9d){if(_0xd1ba9d){var _0x537d11=_0xd1ba9d[_0x3549('0x15')],_0x272dd9=_0x486a14[_0x3549('0x16')],_0x428122=_0x486a14['offset']+_0x486a14[_0x3549('0x17')],_0x56f04c;if(_0x428122>=_0x537d11){_0x428122=_0x537d11;_0x56f04c=0xc8;}else{_0x56f04c=0xce;}_0x29fcab[_0x3549('0x18')](_0x56f04c);return _0x29fcab[_0x3549('0x19')](_0x3549('0x1a'),_0x272dd9+'-'+_0x428122+'/'+_0x537d11)[_0x3549('0x14')](_0xd1ba9d);}return null;};}function patchUpdates(_0x2feb2a){return function(_0x21bcf9){try{jsonpatch[_0x3549('0x1b')](_0x21bcf9,_0x2feb2a,!![]);}catch(_0x39c19a){return BPromise['reject'](_0x39c19a);}return _0x21bcf9[_0x3549('0x1c')]();};}function saveUpdates(_0x477e57,_0xb0ce13){return function(_0x40d9d0){if(_0x40d9d0){return _0x40d9d0[_0x3549('0x1d')](_0x477e57)['then'](function(_0x42ee86){return _0x42ee86;});}return null;};}function removeEntity(_0x553810,_0x867085){return function(_0x37879e){if(_0x37879e){return _0x37879e[_0x3549('0x1e')]()[_0x3549('0x1f')](function(){_0x553810['status'](0xcc)[_0x3549('0x13')]();});}};}function handleEntityNotFound(_0x4a26b9,_0x72f7c1){return function(_0x58cc70){if(!_0x58cc70){_0x4a26b9[_0x3549('0x20')](0x194);}return _0x58cc70;};}function handleError(_0x329f32,_0x14cb97){_0x14cb97=_0x14cb97||0x1f4;return function(_0x3f5a1d){logger[_0x3549('0x21')](_0x3f5a1d[_0x3549('0x22')]);if(_0x3f5a1d[_0x3549('0x23')]){delete _0x3f5a1d['name'];}_0x329f32[_0x3549('0x18')](_0x14cb97)[_0x3549('0x24')](_0x3f5a1d);};}exports[_0x3549('0x25')]=function(_0x3962e7,_0x256f6c){var _0x497d7d={},_0x567122={},_0x40a0a5={'count':0x0,'rows':[]};var _0x4e70d2=db[_0x3549('0x26')][_0x3549('0x27')];_0x567122['model']=_[_0x3549('0x28')](_0x4e70d2);var _0x253f33={'dateStart':_0x3962e7['query'][_0x3549('0x29')],'dateEnd':_0x3962e7[_0x3549('0x2a')][_0x3549('0x2b')]};delete _0x3962e7[_0x3549('0x2a')][_0x3549('0x29')];delete _0x3962e7[_0x3549('0x2a')][_0x3549('0x2b')];_0x567122['query']=_[_0x3549('0x28')](_0x3962e7[_0x3549('0x2a')]);_0x567122[_0x3549('0x2c')]=_[_0x3549('0x2d')](_0x567122[_0x3549('0x2e')],_0x567122[_0x3549('0x2a')]);_0x497d7d['attributes']=_[_0x3549('0x2d')](_0x567122[_0x3549('0x2e')],qs[_0x3549('0x2f')](_0x3962e7[_0x3549('0x2a')]['fields']));_0x497d7d['attributes']=_0x497d7d[_0x3549('0x30')][_0x3549('0x31')]?_0x497d7d[_0x3549('0x30')]:_0x567122[_0x3549('0x2e')];if(!_0x3962e7['query']['hasOwnProperty'](_0x3549('0x32'))){_0x497d7d['limit']=qs[_0x3549('0x17')](_0x3962e7[_0x3549('0x2a')][_0x3549('0x17')]);_0x497d7d[_0x3549('0x16')]=qs[_0x3549('0x16')](_0x3962e7[_0x3549('0x2a')][_0x3549('0x16')]);}_0x497d7d[_0x3549('0x33')]=qs[_0x3549('0x34')](_0x3962e7[_0x3549('0x2a')][_0x3549('0x34')]);_0x497d7d[_0x3549('0x35')]=qs[_0x3549('0x2c')](_['pick'](_0x3962e7[_0x3549('0x2a')],_0x567122[_0x3549('0x2c')]));if(_0x253f33['dateStart']){if(_0x253f33[_0x3549('0x2b')]){_0x253f33[_0x3549('0x2b')]=moment(_0x253f33[_0x3549('0x2b')])[_0x3549('0x36')](0x1,'day');}else{_0x253f33[_0x3549('0x2b')]=moment(_0x253f33['dateStart'])['add'](0x1,_0x3549('0x37'));}_[_0x3549('0x38')](_0x497d7d[_0x3549('0x35')],{'createdAt':{'$gte':_0x253f33['dateStart'],'$lte':_0x253f33[_0x3549('0x2b')]}});}if(_0x3962e7[_0x3549('0x2a')][_0x3549('0x39')]){_0x497d7d[_0x3549('0x35')]=_[_0x3549('0x38')](_0x497d7d['where'],{'$or':_['map'](_0x497d7d['attributes'],function(_0x59c36b){var _0x374b08={};_0x374b08[_0x59c36b]={'$like':'%'+_0x3962e7[_0x3549('0x2a')][_0x3549('0x39')]+'%'};return _0x374b08;})});}_0x497d7d=_[_0x3549('0x38')]({},_0x497d7d,_0x3962e7[_0x3549('0x3a')]);var _0x3f5587={'where':_0x497d7d[_0x3549('0x35')]};return db[_0x3549('0x26')][_0x3549('0x15')](_0x3f5587)['then'](function(_0x3b96e9){_0x40a0a5[_0x3549('0x15')]=_0x3b96e9;if(_0x3962e7[_0x3549('0x2a')][_0x3549('0x3b')]){_0x497d7d['include']=[{'all':!![]}];}return db[_0x3549('0x26')][_0x3549('0x3c')](_0x497d7d);})['then'](function(_0x4617d0){_0x40a0a5[_0x3549('0x3d')]=_0x4617d0;return _0x40a0a5;})['then'](respondWithFilteredResult(_0x256f6c,_0x497d7d))['catch'](handleError(_0x256f6c,null));};exports['show']=function(_0x404fea,_0x4f3582){var _0x1b4c61={'raw':!![],'where':{'id':_0x404fea['params']['id']}},_0x4b5419={};_0x4b5419['model']=_[_0x3549('0x28')](db['ZohoField'][_0x3549('0x27')]);_0x4b5419[_0x3549('0x2a')]=_['keys'](_0x404fea[_0x3549('0x2a')]);_0x4b5419[_0x3549('0x2c')]=_['intersection'](_0x4b5419['model'],_0x4b5419[_0x3549('0x2a')]);_0x1b4c61[_0x3549('0x30')]=_[_0x3549('0x2d')](_0x4b5419['model'],qs['fields'](_0x404fea[_0x3549('0x2a')]['fields']));_0x1b4c61['attributes']=_0x1b4c61['attributes']['length']?_0x1b4c61[_0x3549('0x30')]:_0x4b5419[_0x3549('0x2e')];if(_0x404fea['query']['includeAll']){_0x1b4c61['include']=[{'all':!![]}];}_0x1b4c61=_[_0x3549('0x38')]({},_0x1b4c61,_0x404fea['options']);return db[_0x3549('0x26')][_0x3549('0x3e')](_0x1b4c61)[_0x3549('0x1f')](handleEntityNotFound(_0x4f3582,null))[_0x3549('0x1f')](respondWithResult(_0x4f3582,null))['catch'](handleError(_0x4f3582,null));};exports[_0x3549('0x3f')]=function(_0x30b376,_0x25b7a7){return db[_0x3549('0x26')][_0x3549('0x3f')](_0x30b376[_0x3549('0x40')],{})[_0x3549('0x1f')](respondWithResult(_0x25b7a7,0xc9))[_0x3549('0x41')](handleError(_0x25b7a7,null));};exports['update']=function(_0xb3d9e,_0x372426){if(_0xb3d9e['body']['id']){delete _0xb3d9e['body']['id'];}return db[_0x3549('0x26')]['find']({'where':{'id':_0xb3d9e[_0x3549('0x42')]['id']}})[_0x3549('0x1f')](handleEntityNotFound(_0x372426,null))[_0x3549('0x1f')](saveUpdates(_0xb3d9e[_0x3549('0x40')],null))[_0x3549('0x1f')](respondWithResult(_0x372426,null))[_0x3549('0x41')](handleError(_0x372426,null));};exports[_0x3549('0x1e')]=function(_0xd9ae75,_0x525c34){return db[_0x3549('0x26')][_0x3549('0x3e')]({'where':{'id':_0xd9ae75[_0x3549('0x42')]['id']}})['then'](handleEntityNotFound(_0x525c34,null))[_0x3549('0x1f')](removeEntity(_0x525c34,null))[_0x3549('0x41')](handleError(_0x525c34,null));};
\ No newline at end of file
+var _0x159c=['papaparse','../../config/logger','api','../../config/environment','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','sendStatus','error','stack','name','ZohoField','rawAttributes','model','keys','query','dateStart','dateEnd','filters','attributes','fields','length','nolimit','sort','where','pick','add','day','merge','map','filter','options','includeAll','include','findAll','rows','catch','show','intersection','find','create','body','params','destroy','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','squel','crypto','desk.js','querystring'];(function(_0x5bbe72,_0x583221){var _0xab760=function(_0x514ccf){while(--_0x514ccf){_0x5bbe72['push'](_0x5bbe72['shift']());}};_0xab760(++_0x583221);}(_0x159c,0xb7));var _0xc159=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x159c[_0x14add3];return _0x4a174f;};'use strict';var jsonpatch=require(_0xc159('0x0'));var rp=require(_0xc159('0x1'));var moment=require(_0xc159('0x2'));var BPromise=require(_0xc159('0x3'));var Mustache=require(_0xc159('0x4'));var util=require(_0xc159('0x5'));var path=require('path');var sox=require(_0xc159('0x6'));var csv=require(_0xc159('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xc159('0x8'));var crypto=require(_0xc159('0x9'));var jsforce=require('jsforce');var deskjs=require(_0xc159('0xa'));var toCsv=require(_0xc159('0x7'));var querystring=require(_0xc159('0xb'));var Papa=require(_0xc159('0xc'));var qs=require('../../components/parsers/qs');var logger=require(_0xc159('0xd'))(_0xc159('0xe'));var utils=require('../../config/utils');var config=require(_0xc159('0xf'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x472bca,_0x174e3d){_0x174e3d=_0x174e3d||0xcc;return function(_0x3fa03f){if(_0x3fa03f){return _0x472bca['sendStatus'](_0x174e3d);}return _0x472bca[_0xc159('0x10')](_0x174e3d)[_0xc159('0x11')]();};}function respondWithResult(_0x42f47d,_0x1ac8f2){_0x1ac8f2=_0x1ac8f2||0xc8;return function(_0x1d0093){if(_0x1d0093){return _0x42f47d[_0xc159('0x10')](_0x1ac8f2)[_0xc159('0x12')](_0x1d0093);}};}function respondWithFilteredResult(_0x3be5ba,_0x4984a6){return function(_0x376194){if(_0x376194){var _0x66e7c8=_0x376194[_0xc159('0x13')],_0x3bd084=_0x4984a6[_0xc159('0x14')],_0xec7218=_0x4984a6[_0xc159('0x14')]+_0x4984a6[_0xc159('0x15')],_0x4f9611;if(_0xec7218>=_0x66e7c8){_0xec7218=_0x66e7c8;_0x4f9611=0xc8;}else{_0x4f9611=0xce;}_0x3be5ba[_0xc159('0x10')](_0x4f9611);return _0x3be5ba[_0xc159('0x16')](_0xc159('0x17'),_0x3bd084+'-'+_0xec7218+'/'+_0x66e7c8)[_0xc159('0x12')](_0x376194);}return null;};}function patchUpdates(_0x14196d){return function(_0x5ef5ce){try{jsonpatch[_0xc159('0x18')](_0x5ef5ce,_0x14196d,!![]);}catch(_0x7e2e01){return BPromise[_0xc159('0x19')](_0x7e2e01);}return _0x5ef5ce['save']();};}function saveUpdates(_0x24e31b,_0x31e171){return function(_0x40eaa4){if(_0x40eaa4){return _0x40eaa4[_0xc159('0x1a')](_0x24e31b)[_0xc159('0x1b')](function(_0x4ff791){return _0x4ff791;});}return null;};}function removeEntity(_0x4b60b4,_0x4ba6c4){return function(_0x2b8b0d){if(_0x2b8b0d){return _0x2b8b0d['destroy']()[_0xc159('0x1b')](function(){_0x4b60b4['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x17c450,_0xade543){return function(_0x176267){if(!_0x176267){_0x17c450[_0xc159('0x1c')](0x194);}return _0x176267;};}function handleError(_0x326e92,_0x41936d){_0x41936d=_0x41936d||0x1f4;return function(_0x344a44){logger[_0xc159('0x1d')](_0x344a44[_0xc159('0x1e')]);if(_0x344a44[_0xc159('0x1f')]){delete _0x344a44[_0xc159('0x1f')];}_0x326e92[_0xc159('0x10')](_0x41936d)['send'](_0x344a44);};}exports['index']=function(_0xc1cfc0,_0x5e239d){var _0x445aef={},_0x210b7a={},_0x3804b3={'count':0x0,'rows':[]};var _0x406b62=db[_0xc159('0x20')][_0xc159('0x21')];_0x210b7a[_0xc159('0x22')]=_[_0xc159('0x23')](_0x406b62);var _0x213dc1={'dateStart':_0xc1cfc0[_0xc159('0x24')]['dateStart'],'dateEnd':_0xc1cfc0[_0xc159('0x24')]['dateEnd']};delete _0xc1cfc0[_0xc159('0x24')][_0xc159('0x25')];delete _0xc1cfc0['query'][_0xc159('0x26')];_0x210b7a['query']=_['keys'](_0xc1cfc0[_0xc159('0x24')]);_0x210b7a[_0xc159('0x27')]=_['intersection'](_0x210b7a[_0xc159('0x22')],_0x210b7a[_0xc159('0x24')]);_0x445aef[_0xc159('0x28')]=_['intersection'](_0x210b7a[_0xc159('0x22')],qs['fields'](_0xc1cfc0[_0xc159('0x24')][_0xc159('0x29')]));_0x445aef[_0xc159('0x28')]=_0x445aef[_0xc159('0x28')][_0xc159('0x2a')]?_0x445aef[_0xc159('0x28')]:_0x210b7a[_0xc159('0x22')];if(!_0xc1cfc0[_0xc159('0x24')]['hasOwnProperty'](_0xc159('0x2b'))){_0x445aef[_0xc159('0x15')]=qs[_0xc159('0x15')](_0xc1cfc0['query'][_0xc159('0x15')]);_0x445aef[_0xc159('0x14')]=qs[_0xc159('0x14')](_0xc1cfc0['query']['offset']);}_0x445aef['order']=qs[_0xc159('0x2c')](_0xc1cfc0[_0xc159('0x24')]['sort']);_0x445aef[_0xc159('0x2d')]=qs[_0xc159('0x27')](_[_0xc159('0x2e')](_0xc1cfc0[_0xc159('0x24')],_0x210b7a[_0xc159('0x27')]));if(_0x213dc1[_0xc159('0x25')]){if(_0x213dc1[_0xc159('0x26')]){_0x213dc1[_0xc159('0x26')]=moment(_0x213dc1[_0xc159('0x26')])[_0xc159('0x2f')](0x1,_0xc159('0x30'));}else{_0x213dc1[_0xc159('0x26')]=moment(_0x213dc1[_0xc159('0x25')])[_0xc159('0x2f')](0x1,_0xc159('0x30'));}_[_0xc159('0x31')](_0x445aef[_0xc159('0x2d')],{'createdAt':{'$gte':_0x213dc1[_0xc159('0x25')],'$lte':_0x213dc1[_0xc159('0x26')]}});}if(_0xc1cfc0[_0xc159('0x24')]['filter']){_0x445aef['where']=_['merge'](_0x445aef['where'],{'$or':_[_0xc159('0x32')](_0x445aef[_0xc159('0x28')],function(_0x682411){var _0x3c5a53={};_0x3c5a53[_0x682411]={'$like':'%'+_0xc1cfc0[_0xc159('0x24')][_0xc159('0x33')]+'%'};return _0x3c5a53;})});}_0x445aef=_[_0xc159('0x31')]({},_0x445aef,_0xc1cfc0[_0xc159('0x34')]);var _0x1306c4={'where':_0x445aef[_0xc159('0x2d')]};return db['ZohoField']['count'](_0x1306c4)[_0xc159('0x1b')](function(_0x536dfa){_0x3804b3[_0xc159('0x13')]=_0x536dfa;if(_0xc1cfc0[_0xc159('0x24')][_0xc159('0x35')]){_0x445aef[_0xc159('0x36')]=[{'all':!![]}];}return db[_0xc159('0x20')][_0xc159('0x37')](_0x445aef);})[_0xc159('0x1b')](function(_0x43687a){_0x3804b3[_0xc159('0x38')]=_0x43687a;return _0x3804b3;})[_0xc159('0x1b')](respondWithFilteredResult(_0x5e239d,_0x445aef))[_0xc159('0x39')](handleError(_0x5e239d,null));};exports[_0xc159('0x3a')]=function(_0x30cb97,_0x459468){var _0x51c570={'raw':!![],'where':{'id':_0x30cb97['params']['id']}},_0x189699={};_0x189699['model']=_[_0xc159('0x23')](db['ZohoField'][_0xc159('0x21')]);_0x189699['query']=_[_0xc159('0x23')](_0x30cb97[_0xc159('0x24')]);_0x189699[_0xc159('0x27')]=_[_0xc159('0x3b')](_0x189699[_0xc159('0x22')],_0x189699['query']);_0x51c570['attributes']=_['intersection'](_0x189699[_0xc159('0x22')],qs[_0xc159('0x29')](_0x30cb97['query'][_0xc159('0x29')]));_0x51c570[_0xc159('0x28')]=_0x51c570[_0xc159('0x28')]['length']?_0x51c570[_0xc159('0x28')]:_0x189699[_0xc159('0x22')];if(_0x30cb97[_0xc159('0x24')][_0xc159('0x35')]){_0x51c570['include']=[{'all':!![]}];}_0x51c570=_[_0xc159('0x31')]({},_0x51c570,_0x30cb97['options']);return db[_0xc159('0x20')][_0xc159('0x3c')](_0x51c570)[_0xc159('0x1b')](handleEntityNotFound(_0x459468,null))[_0xc159('0x1b')](respondWithResult(_0x459468,null))[_0xc159('0x39')](handleError(_0x459468,null));};exports[_0xc159('0x3d')]=function(_0x500166,_0x517443){return db[_0xc159('0x20')][_0xc159('0x3d')](_0x500166[_0xc159('0x3e')],{})[_0xc159('0x1b')](respondWithResult(_0x517443,0xc9))[_0xc159('0x39')](handleError(_0x517443,null));};exports['update']=function(_0x14527e,_0x496280){if(_0x14527e['body']['id']){delete _0x14527e[_0xc159('0x3e')]['id'];}return db[_0xc159('0x20')]['find']({'where':{'id':_0x14527e[_0xc159('0x3f')]['id']}})[_0xc159('0x1b')](handleEntityNotFound(_0x496280,null))[_0xc159('0x1b')](saveUpdates(_0x14527e[_0xc159('0x3e')],null))[_0xc159('0x1b')](respondWithResult(_0x496280,null))[_0xc159('0x39')](handleError(_0x496280,null));};exports[_0xc159('0x40')]=function(_0x1596e0,_0xfa7b6f){return db[_0xc159('0x20')][_0xc159('0x3c')]({'where':{'id':_0x1596e0[_0xc159('0x3f')]['id']}})['then'](handleEntityNotFound(_0xfa7b6f,null))[_0xc159('0x1b')](removeEntity(_0xfa7b6f,null))[_0xc159('0x39')](handleError(_0xfa7b6f,null));};
\ No newline at end of file
index c09d181..8cc7ea5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7b34=['bluebird','request-promise','./intZohoField.attributes','exports','define','int_zoho_fields','lodash','util','api','moment'];(function(_0x223461,_0x2bca70){var _0x4dbe0a=function(_0x3c3cb6){while(--_0x3c3cb6){_0x223461['push'](_0x223461['shift']());}};_0x4dbe0a(++_0x2bca70);}(_0x7b34,0xce));var _0x47b3=function(_0x273102,_0x3398ae){_0x273102=_0x273102-0x0;var _0x5be3d2=_0x7b34[_0x273102];return _0x5be3d2;};'use strict';var _=require(_0x47b3('0x0'));var util=require(_0x47b3('0x1'));var logger=require('../../config/logger')(_0x47b3('0x2'));var moment=require(_0x47b3('0x3'));var BPromise=require(_0x47b3('0x4'));var rp=require(_0x47b3('0x5'));var attributes=require(_0x47b3('0x6'));module[_0x47b3('0x7')]=function(_0x3fa894,_0x5bffe6){return _0x3fa894[_0x47b3('0x8')]('ZohoField',attributes,{'tableName':_0x47b3('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8592=['api','moment','bluebird','request-promise','exports','define','ZohoField','int_zoho_fields','lodash','util','../../config/logger'];(function(_0x435360,_0x5261ee){var _0x1d9fcb=function(_0x3f3d04){while(--_0x3f3d04){_0x435360['push'](_0x435360['shift']());}};_0x1d9fcb(++_0x5261ee);}(_0x8592,0xe4));var _0x2859=function(_0x257495,_0x18269b){_0x257495=_0x257495-0x0;var _0x3849aa=_0x8592[_0x257495];return _0x3849aa;};'use strict';var _=require(_0x2859('0x0'));var util=require(_0x2859('0x1'));var logger=require(_0x2859('0x2'))(_0x2859('0x3'));var moment=require(_0x2859('0x4'));var BPromise=require(_0x2859('0x5'));var rp=require(_0x2859('0x6'));var attributes=require('./intZohoField.attributes');module[_0x2859('0x7')]=function(_0x16a90b,_0x172ec5){return _0x16a90b[_0x2859('0x8')](_0x2859('0x9'),attributes,{'tableName':_0x2859('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d8e5c2b..82222b2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9a14=['ZohoField,\x20%s,\x20%s,\x20%s','stringify','error','message','info','catch','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','request','then','ZohoField,\x20%s,\x20%s','request\x20sent'];(function(_0x39bc52,_0x406f9a){var _0x32f65c=function(_0x31cde3){while(--_0x31cde3){_0x39bc52['push'](_0x39bc52['shift']());}};_0x32f65c(++_0x406f9a);}(_0x9a14,0xa8));var _0x49a1=function(_0x455551,_0x4fae4d){_0x455551=_0x455551-0x0;var _0x5c9005=_0x9a14[_0x455551];return _0x5c9005;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x49a1('0x0'));var BPromise=require(_0x49a1('0x1'));var rs=require(_0x49a1('0x2'));var fs=require('fs');var db=require(_0x49a1('0x3'))['db'];var utils=require(_0x49a1('0x4'));var logger=require(_0x49a1('0x5'))(_0x49a1('0x6'));var config=require(_0x49a1('0x7'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x5283aa,_0x9394fc,_0x2b210c){return new BPromise(function(_0x7ef1ba,_0x592940){return client[_0x49a1('0x8')](_0x5283aa,_0x2b210c)[_0x49a1('0x9')](function(_0x3cb5f1){logger['info'](_0x49a1('0xa'),_0x9394fc,_0x49a1('0xb'));logger['debug'](_0x49a1('0xc'),_0x9394fc,_0x49a1('0xb'),JSON[_0x49a1('0xd')](_0x3cb5f1));if(_0x3cb5f1[_0x49a1('0xe')]){if(_0x3cb5f1[_0x49a1('0xe')]['code']===0x1f4){logger[_0x49a1('0xe')](_0x49a1('0xa'),_0x9394fc,_0x3cb5f1[_0x49a1('0xe')][_0x49a1('0xf')]);return _0x592940(_0x3cb5f1[_0x49a1('0xe')][_0x49a1('0xf')]);}logger[_0x49a1('0xe')](_0x49a1('0xa'),_0x9394fc,_0x3cb5f1[_0x49a1('0xe')][_0x49a1('0xf')]);return _0x7ef1ba(_0x3cb5f1[_0x49a1('0xe')][_0x49a1('0xf')]);}else{logger[_0x49a1('0x10')](_0x49a1('0xa'),_0x9394fc,_0x49a1('0xb'));_0x7ef1ba(_0x3cb5f1['result'][_0x49a1('0xf')]);}})[_0x49a1('0x11')](function(_0x20aa5d){logger['error'](_0x49a1('0xa'),_0x9394fc,_0x20aa5d);_0x592940(_0x20aa5d);});});}
\ No newline at end of file
+var _0x9b09=['request','then','ZohoField,\x20%s,\x20%s','request\x20sent','debug','ZohoField,\x20%s,\x20%s,\x20%s','error','code','message','info','catch','lodash','util','bluebird','randomstring','../../config/utils','rpc','jayson/promise','client'];(function(_0x821ce1,_0x11ac26){var _0x331a4a=function(_0x21aec4){while(--_0x21aec4){_0x821ce1['push'](_0x821ce1['shift']());}};_0x331a4a(++_0x11ac26);}(_0x9b09,0x1ad));var _0x99b0=function(_0x1ac6ec,_0x1f81fc){_0x1ac6ec=_0x1ac6ec-0x0;var _0x48a489=_0x9b09[_0x1ac6ec];return _0x48a489;};'use strict';var _=require(_0x99b0('0x0'));var util=require(_0x99b0('0x1'));var moment=require('moment');var BPromise=require(_0x99b0('0x2'));var rs=require(_0x99b0('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x99b0('0x4'));var logger=require('../../config/logger')(_0x99b0('0x5'));var config=require('../../config/environment');var jayson=require(_0x99b0('0x6'));var client=jayson[_0x99b0('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x466c23,_0x220c95,_0x5cfd09){return new BPromise(function(_0x278d98,_0x22d09a){return client[_0x99b0('0x8')](_0x466c23,_0x5cfd09)[_0x99b0('0x9')](function(_0x46e8fb){logger['info'](_0x99b0('0xa'),_0x220c95,_0x99b0('0xb'));logger[_0x99b0('0xc')](_0x99b0('0xd'),_0x220c95,_0x99b0('0xb'),JSON['stringify'](_0x46e8fb));if(_0x46e8fb[_0x99b0('0xe')]){if(_0x46e8fb[_0x99b0('0xe')][_0x99b0('0xf')]===0x1f4){logger[_0x99b0('0xe')](_0x99b0('0xa'),_0x220c95,_0x46e8fb[_0x99b0('0xe')]['message']);return _0x22d09a(_0x46e8fb[_0x99b0('0xe')]['message']);}logger[_0x99b0('0xe')](_0x99b0('0xa'),_0x220c95,_0x46e8fb['error']['message']);return _0x278d98(_0x46e8fb[_0x99b0('0xe')][_0x99b0('0x10')]);}else{logger[_0x99b0('0x11')]('ZohoField,\x20%s,\x20%s',_0x220c95,'request\x20sent');_0x278d98(_0x46e8fb['result'][_0x99b0('0x10')]);}})[_0x99b0('0x12')](function(_0x4d40ea){logger[_0x99b0('0xe')](_0x99b0('0xa'),_0x220c95,_0x4d40ea);_0x22d09a(_0x4d40ea);});});}
\ No newline at end of file
index 569512e..b7241c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b76=['exports','multer','path','express','Router','../../components/interaction/service','../../config/environment'];(function(_0x23fc7a,_0x481f4f){var _0x2978f9=function(_0x1e7e58){while(--_0x1e7e58){_0x23fc7a['push'](_0x23fc7a['shift']());}};_0x2978f9(++_0x481f4f);}(_0x4b76,0xcc));var _0x64b7=function(_0x43825c,_0x3781f7){_0x43825c=_0x43825c-0x0;var _0x2ef0ef=_0x4b76[_0x43825c];return _0x2ef0ef;};'use strict';var multer=require(_0x64b7('0x0'));var util=require('util');var path=require(_0x64b7('0x1'));var express=require(_0x64b7('0x2'));var router=express[_0x64b7('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x64b7('0x4'));var config=require(_0x64b7('0x5'));module[_0x64b7('0x6')]=router;
\ No newline at end of file
+var _0x11ee=['exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x463f90,_0x8c64e0){var _0x37ca02=function(_0x4062e4){while(--_0x4062e4){_0x463f90['push'](_0x463f90['shift']());}};_0x37ca02(++_0x8c64e0);}(_0x11ee,0xb5));var _0xe11e=function(_0x226e5b,_0x4935ed){_0x226e5b=_0x226e5b-0x0;var _0x3c44d3=_0x11ee[_0x226e5b];return _0x3c44d3;};'use strict';var multer=require(_0xe11e('0x0'));var util=require(_0xe11e('0x1'));var path=require(_0xe11e('0x2'));var express=require(_0xe11e('0x3'));var router=express[_0xe11e('0x4')]();var auth=require(_0xe11e('0x5'));var interaction=require(_0xe11e('0x6'));var config=require(_0xe11e('0x7'));module[_0xe11e('0x8')]=router;
\ No newline at end of file
index a8e21dd..c1a02f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x73d4=['STRING','unique_name_and_version','app.js','INTEGER','BOOLEAN','state','sequelize','exports'];(function(_0x3d98c8,_0x542b0c){var _0x5ed72b=function(_0x7db232){while(--_0x7db232){_0x3d98c8['push'](_0x3d98c8['shift']());}};_0x5ed72b(++_0x542b0c);}(_0x73d4,0xde));var _0x473d=function(_0x37b83f,_0x29a8f7){_0x37b83f=_0x37b83f-0x0;var _0x1fbac1=_0x73d4[_0x37b83f];return _0x1fbac1;};'use strict';var Sequelize=require(_0x473d('0x0'));module[_0x473d('0x1')]={'name':{'type':Sequelize[_0x473d('0x2')],'allowNull':![],'unique':'unique_name_and_version'},'version':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0x473d('0x3')},'main':{'type':Sequelize['STRING'],'defaultValue':_0x473d('0x4')},'filename':{'type':Sequelize[_0x473d('0x2')]},'path':{'type':Sequelize[_0x473d('0x2')]},'type':{'type':Sequelize[_0x473d('0x2')]},'size':{'type':Sequelize[_0x473d('0x5')]},'active':{'type':Sequelize[_0x473d('0x6')],'defaultValue':![]},'author':{'type':Sequelize['STRING']},'logo':{'type':Sequelize[_0x473d('0x2')]},'state':{'type':Sequelize[_0x473d('0x2')],'unique':_0x473d('0x7')},'description':{'type':Sequelize[_0x473d('0x2')]},'title':{'type':Sequelize[_0x473d('0x2')]},'remoteUri':{'type':Sequelize[_0x473d('0x2')]},'link':{'type':Sequelize[_0x473d('0x2')],'defaultValue':'#'}};
\ No newline at end of file
+var _0x321f=['STRING','unique_name_and_version','app.js','BOOLEAN','sequelize','exports'];(function(_0xe4fae1,_0xb16fc5){var _0x103853=function(_0x4d7e85){while(--_0x4d7e85){_0xe4fae1['push'](_0xe4fae1['shift']());}};_0x103853(++_0xb16fc5);}(_0x321f,0x94));var _0xf321=function(_0x1344d6,_0x2181e6){_0x1344d6=_0x1344d6-0x0;var _0xf45b24=_0x321f[_0x1344d6];return _0xf45b24;};'use strict';var Sequelize=require(_0xf321('0x0'));module[_0xf321('0x1')]={'name':{'type':Sequelize[_0xf321('0x2')],'allowNull':![],'unique':'unique_name_and_version'},'version':{'type':Sequelize[_0xf321('0x2')],'allowNull':![],'unique':_0xf321('0x3')},'main':{'type':Sequelize[_0xf321('0x2')],'defaultValue':_0xf321('0x4')},'filename':{'type':Sequelize[_0xf321('0x2')]},'path':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0xf321('0x2')]},'size':{'type':Sequelize['INTEGER']},'active':{'type':Sequelize[_0xf321('0x5')],'defaultValue':![]},'author':{'type':Sequelize[_0xf321('0x2')]},'logo':{'type':Sequelize[_0xf321('0x2')]},'state':{'type':Sequelize[_0xf321('0x2')],'unique':'state'},'description':{'type':Sequelize[_0xf321('0x2')]},'title':{'type':Sequelize[_0xf321('0x2')]},'remoteUri':{'type':Sequelize['STRING']},'link':{'type':Sequelize['STRING'],'defaultValue':'#'}};
\ No newline at end of file
index 37c2aab..fff1b3a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfca4=['includeAll','findAll','rows','catch','show','params','length','include','find','create','body','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','Content-Range','json','apply','reject','save','update','then','destroy','error','stack','name','send','index','Integration','rawAttributes','model','keys','query','dateStart','dateEnd','filters','attributes','intersection','fields','hasOwnProperty','nolimit','limit','order','sort','pick','add','day','merge','where','filter','map','options'];(function(_0x20575d,_0x34ab83){var _0x25a4a3=function(_0x2ed607){while(--_0x2ed607){_0x20575d['push'](_0x20575d['shift']());}};_0x25a4a3(++_0x34ab83);}(_0xfca4,0x12f));var _0x4fca=function(_0x1368e0,_0x1241d4){_0x1368e0=_0x1368e0-0x0;var _0x37a764=_0xfca4[_0x1368e0];return _0x37a764;};'use strict';var jsonpatch=require(_0x4fca('0x0'));var rp=require(_0x4fca('0x1'));var moment=require(_0x4fca('0x2'));var BPromise=require(_0x4fca('0x3'));var Mustache=require(_0x4fca('0x4'));var util=require(_0x4fca('0x5'));var path=require(_0x4fca('0x6'));var sox=require(_0x4fca('0x7'));var csv=require(_0x4fca('0x8'));var ejs=require(_0x4fca('0x9'));var fs=require('fs');var _=require(_0x4fca('0xa'));var squel=require(_0x4fca('0xb'));var crypto=require(_0x4fca('0xc'));var jsforce=require(_0x4fca('0xd'));var deskjs=require(_0x4fca('0xe'));var toCsv=require('to-csv');var querystring=require(_0x4fca('0xf'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x4fca('0x10'));var utils=require(_0x4fca('0x11'));var config=require(_0x4fca('0x12'));var db=require(_0x4fca('0x13'))['db'];function respondWithStatusCode(_0x57dab1,_0x3a11bf){_0x3a11bf=_0x3a11bf||0xcc;return function(_0x52b037){if(_0x52b037){return _0x57dab1[_0x4fca('0x14')](_0x3a11bf);}return _0x57dab1[_0x4fca('0x15')](_0x3a11bf)[_0x4fca('0x16')]();};}function respondWithResult(_0x251437,_0x5a6bb7){_0x5a6bb7=_0x5a6bb7||0xc8;return function(_0x3ea58e){if(_0x3ea58e){return _0x251437[_0x4fca('0x15')](_0x5a6bb7)['json'](_0x3ea58e);}};}function respondWithFilteredResult(_0x34dbf6,_0xb083ba){return function(_0x58dc0a){if(_0x58dc0a){var _0x8ff3f1=_0x58dc0a[_0x4fca('0x17')],_0x3492cb=_0xb083ba[_0x4fca('0x18')],_0x555169=_0xb083ba[_0x4fca('0x18')]+_0xb083ba['limit'],_0x18dee8;if(_0x555169>=_0x8ff3f1){_0x555169=_0x8ff3f1;_0x18dee8=0xc8;}else{_0x18dee8=0xce;}_0x34dbf6[_0x4fca('0x15')](_0x18dee8);return _0x34dbf6['set'](_0x4fca('0x19'),_0x3492cb+'-'+_0x555169+'/'+_0x8ff3f1)[_0x4fca('0x1a')](_0x58dc0a);}return null;};}function patchUpdates(_0x2c743a){return function(_0xe488b7){try{jsonpatch[_0x4fca('0x1b')](_0xe488b7,_0x2c743a,!![]);}catch(_0x44f38a){return BPromise[_0x4fca('0x1c')](_0x44f38a);}return _0xe488b7[_0x4fca('0x1d')]();};}function saveUpdates(_0x3fa0a8,_0x45cd1c){return function(_0x240f39){if(_0x240f39){return _0x240f39[_0x4fca('0x1e')](_0x3fa0a8)[_0x4fca('0x1f')](function(_0x1614c9){return _0x1614c9;});}return null;};}function removeEntity(_0xf523bf,_0x265fb5){return function(_0x428ee2){if(_0x428ee2){return _0x428ee2[_0x4fca('0x20')]()[_0x4fca('0x1f')](function(){_0xf523bf[_0x4fca('0x15')](0xcc)[_0x4fca('0x16')]();});}};}function handleEntityNotFound(_0x107589,_0x5e7d70){return function(_0x940bf9){if(!_0x940bf9){_0x107589[_0x4fca('0x14')](0x194);}return _0x940bf9;};}function handleError(_0x2d78ae,_0x1eb864){_0x1eb864=_0x1eb864||0x1f4;return function(_0x2a96a2){logger[_0x4fca('0x21')](_0x2a96a2[_0x4fca('0x22')]);if(_0x2a96a2[_0x4fca('0x23')]){delete _0x2a96a2[_0x4fca('0x23')];}_0x2d78ae[_0x4fca('0x15')](_0x1eb864)[_0x4fca('0x24')](_0x2a96a2);};}exports[_0x4fca('0x25')]=function(_0x164529,_0x26e8fc){var _0x4c9eab={},_0x7fd08f={},_0x1cb21c={'count':0x0,'rows':[]};var _0x364f75=db[_0x4fca('0x26')][_0x4fca('0x27')];_0x7fd08f[_0x4fca('0x28')]=_[_0x4fca('0x29')](_0x364f75);var _0xadeb74={'dateStart':_0x164529[_0x4fca('0x2a')][_0x4fca('0x2b')],'dateEnd':_0x164529['query'][_0x4fca('0x2c')]};delete _0x164529[_0x4fca('0x2a')][_0x4fca('0x2b')];delete _0x164529['query'][_0x4fca('0x2c')];_0x7fd08f[_0x4fca('0x2a')]=_[_0x4fca('0x29')](_0x164529[_0x4fca('0x2a')]);_0x7fd08f[_0x4fca('0x2d')]=_['intersection'](_0x7fd08f[_0x4fca('0x28')],_0x7fd08f[_0x4fca('0x2a')]);_0x4c9eab[_0x4fca('0x2e')]=_[_0x4fca('0x2f')](_0x7fd08f[_0x4fca('0x28')],qs[_0x4fca('0x30')](_0x164529['query'][_0x4fca('0x30')]));_0x4c9eab['attributes']=_0x4c9eab[_0x4fca('0x2e')]['length']?_0x4c9eab[_0x4fca('0x2e')]:_0x7fd08f['model'];if(!_0x164529['query'][_0x4fca('0x31')](_0x4fca('0x32'))){_0x4c9eab[_0x4fca('0x33')]=qs[_0x4fca('0x33')](_0x164529['query'][_0x4fca('0x33')]);_0x4c9eab[_0x4fca('0x18')]=qs[_0x4fca('0x18')](_0x164529[_0x4fca('0x2a')]['offset']);}_0x4c9eab[_0x4fca('0x34')]=qs[_0x4fca('0x35')](_0x164529[_0x4fca('0x2a')][_0x4fca('0x35')]);_0x4c9eab['where']=qs['filters'](_[_0x4fca('0x36')](_0x164529[_0x4fca('0x2a')],_0x7fd08f['filters']));if(_0xadeb74[_0x4fca('0x2b')]){if(_0xadeb74[_0x4fca('0x2c')]){_0xadeb74[_0x4fca('0x2c')]=moment(_0xadeb74[_0x4fca('0x2c')])[_0x4fca('0x37')](0x1,_0x4fca('0x38'));}else{_0xadeb74[_0x4fca('0x2c')]=moment(_0xadeb74[_0x4fca('0x2b')])[_0x4fca('0x37')](0x1,_0x4fca('0x38'));}_[_0x4fca('0x39')](_0x4c9eab[_0x4fca('0x3a')],{'createdAt':{'$gte':_0xadeb74[_0x4fca('0x2b')],'$lte':_0xadeb74['dateEnd']}});}if(_0x164529[_0x4fca('0x2a')][_0x4fca('0x3b')]){_0x4c9eab['where']=_[_0x4fca('0x39')](_0x4c9eab['where'],{'$or':_[_0x4fca('0x3c')](_0x4c9eab[_0x4fca('0x2e')],function(_0x93684f){var _0xe802={};_0xe802[_0x93684f]={'$like':'%'+_0x164529[_0x4fca('0x2a')][_0x4fca('0x3b')]+'%'};return _0xe802;})});}_0x4c9eab=_[_0x4fca('0x39')]({},_0x4c9eab,_0x164529[_0x4fca('0x3d')]);var _0x2791e7={'where':_0x4c9eab[_0x4fca('0x3a')]};return db['Integration'][_0x4fca('0x17')](_0x2791e7)['then'](function(_0x40cc3d){_0x1cb21c[_0x4fca('0x17')]=_0x40cc3d;if(_0x164529[_0x4fca('0x2a')][_0x4fca('0x3e')]){_0x4c9eab['include']=[{'all':!![]}];}return db[_0x4fca('0x26')][_0x4fca('0x3f')](_0x4c9eab);})[_0x4fca('0x1f')](function(_0x5dc64b){_0x1cb21c[_0x4fca('0x40')]=_0x5dc64b;return _0x1cb21c;})[_0x4fca('0x1f')](respondWithFilteredResult(_0x26e8fc,_0x4c9eab))[_0x4fca('0x41')](handleError(_0x26e8fc,null));};exports[_0x4fca('0x42')]=function(_0x1c513c,_0x510ebc){var _0x1e7b8e={'raw':![],'where':{'id':_0x1c513c[_0x4fca('0x43')]['id']}},_0x3d75c5={};_0x3d75c5[_0x4fca('0x28')]=_['keys'](db[_0x4fca('0x26')]['rawAttributes']);_0x3d75c5['query']=_[_0x4fca('0x29')](_0x1c513c[_0x4fca('0x2a')]);_0x3d75c5[_0x4fca('0x2d')]=_[_0x4fca('0x2f')](_0x3d75c5['model'],_0x3d75c5[_0x4fca('0x2a')]);_0x1e7b8e[_0x4fca('0x2e')]=_[_0x4fca('0x2f')](_0x3d75c5[_0x4fca('0x28')],qs[_0x4fca('0x30')](_0x1c513c[_0x4fca('0x2a')]['fields']));_0x1e7b8e[_0x4fca('0x2e')]=_0x1e7b8e[_0x4fca('0x2e')][_0x4fca('0x44')]?_0x1e7b8e[_0x4fca('0x2e')]:_0x3d75c5[_0x4fca('0x28')];if(_0x1c513c['query']['includeAll']){_0x1e7b8e[_0x4fca('0x45')]=[{'all':!![]}];}_0x1e7b8e=_[_0x4fca('0x39')]({},_0x1e7b8e,_0x1c513c['options']);return db[_0x4fca('0x26')][_0x4fca('0x46')](_0x1e7b8e)['then'](handleEntityNotFound(_0x510ebc,null))[_0x4fca('0x1f')](respondWithResult(_0x510ebc,null))[_0x4fca('0x41')](handleError(_0x510ebc,null));};exports[_0x4fca('0x47')]=function(_0x53cf7a,_0x107ad3){return db[_0x4fca('0x26')]['create'](_0x53cf7a[_0x4fca('0x48')],{})[_0x4fca('0x1f')](respondWithResult(_0x107ad3,0xc9))[_0x4fca('0x41')](handleError(_0x107ad3,null));};exports[_0x4fca('0x1e')]=function(_0x2d1e97,_0xac0f12){if(_0x2d1e97[_0x4fca('0x48')]['id']){delete _0x2d1e97[_0x4fca('0x48')]['id'];}return db[_0x4fca('0x26')][_0x4fca('0x46')]({'where':{'id':_0x2d1e97['params']['id']}})[_0x4fca('0x1f')](handleEntityNotFound(_0xac0f12,null))['then'](saveUpdates(_0x2d1e97[_0x4fca('0x48')],null))[_0x4fca('0x1f')](respondWithResult(_0xac0f12,null))['catch'](handleError(_0xac0f12,null));};exports['destroy']=function(_0x5999a1,_0x31a083){return db[_0x4fca('0x26')][_0x4fca('0x46')]({'where':{'id':_0x5999a1[_0x4fca('0x43')]['id']}})[_0x4fca('0x1f')](handleEntityNotFound(_0x31a083,null))[_0x4fca('0x1f')](removeEntity(_0x31a083,null))[_0x4fca('0x41')](handleError(_0x31a083,null));};
\ No newline at end of file
+var _0x8d14=['then','destroy','error','stack','name','send','index','Integration','rawAttributes','model','dateStart','query','dateEnd','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','filters','day','add','merge','filter','options','includeAll','include','findAll','rows','catch','params','find','create','body','fast-json-patch','request-promise','moment','bluebird','sox','ejs','lodash','crypto','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','set','Content-Range','apply','reject','update'];(function(_0x5adcbd,_0x3270f8){var _0x194a10=function(_0x5c9729){while(--_0x5c9729){_0x5adcbd['push'](_0x5adcbd['shift']());}};_0x194a10(++_0x3270f8);}(_0x8d14,0x1b2));var _0x48d1=function(_0x28c547,_0x5e3c57){_0x28c547=_0x28c547-0x0;var _0x5d0e0e=_0x8d14[_0x28c547];return _0x5d0e0e;};'use strict';var jsonpatch=require(_0x48d1('0x0'));var rp=require(_0x48d1('0x1'));var moment=require(_0x48d1('0x2'));var BPromise=require(_0x48d1('0x3'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0x48d1('0x4'));var csv=require('to-csv');var ejs=require(_0x48d1('0x5'));var fs=require('fs');var _=require(_0x48d1('0x6'));var squel=require('squel');var crypto=require(_0x48d1('0x7'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x48d1('0x8'));var querystring=require(_0x48d1('0x9'));var Papa=require(_0x48d1('0xa'));var qs=require(_0x48d1('0xb'));var logger=require(_0x48d1('0xc'))(_0x48d1('0xd'));var utils=require(_0x48d1('0xe'));var config=require(_0x48d1('0xf'));var db=require(_0x48d1('0x10'))['db'];function respondWithStatusCode(_0x2c0664,_0x579493){_0x579493=_0x579493||0xcc;return function(_0x37d4f1){if(_0x37d4f1){return _0x2c0664[_0x48d1('0x11')](_0x579493);}return _0x2c0664['status'](_0x579493)[_0x48d1('0x12')]();};}function respondWithResult(_0x3a66fe,_0x548ef5){_0x548ef5=_0x548ef5||0xc8;return function(_0x210d20){if(_0x210d20){return _0x3a66fe[_0x48d1('0x13')](_0x548ef5)[_0x48d1('0x14')](_0x210d20);}};}function respondWithFilteredResult(_0x307411,_0x513c4f){return function(_0x511968){if(_0x511968){var _0x2df3a6=_0x511968[_0x48d1('0x15')],_0x587b47=_0x513c4f[_0x48d1('0x16')],_0x468059=_0x513c4f['offset']+_0x513c4f['limit'],_0x1b8d67;if(_0x468059>=_0x2df3a6){_0x468059=_0x2df3a6;_0x1b8d67=0xc8;}else{_0x1b8d67=0xce;}_0x307411[_0x48d1('0x13')](_0x1b8d67);return _0x307411[_0x48d1('0x17')](_0x48d1('0x18'),_0x587b47+'-'+_0x468059+'/'+_0x2df3a6)[_0x48d1('0x14')](_0x511968);}return null;};}function patchUpdates(_0x551b94){return function(_0x1c7e88){try{jsonpatch[_0x48d1('0x19')](_0x1c7e88,_0x551b94,!![]);}catch(_0x557a6d){return BPromise[_0x48d1('0x1a')](_0x557a6d);}return _0x1c7e88['save']();};}function saveUpdates(_0xb4cc72,_0x29508d){return function(_0x4415d0){if(_0x4415d0){return _0x4415d0[_0x48d1('0x1b')](_0xb4cc72)[_0x48d1('0x1c')](function(_0x8649ee){return _0x8649ee;});}return null;};}function removeEntity(_0x27b31c,_0x37bf72){return function(_0x3abc20){if(_0x3abc20){return _0x3abc20[_0x48d1('0x1d')]()['then'](function(){_0x27b31c[_0x48d1('0x13')](0xcc)['end']();});}};}function handleEntityNotFound(_0x196e2a,_0x1f566e){return function(_0x3333d9){if(!_0x3333d9){_0x196e2a[_0x48d1('0x11')](0x194);}return _0x3333d9;};}function handleError(_0x4c312b,_0x3e6faa){_0x3e6faa=_0x3e6faa||0x1f4;return function(_0x42a3a8){logger[_0x48d1('0x1e')](_0x42a3a8[_0x48d1('0x1f')]);if(_0x42a3a8[_0x48d1('0x20')]){delete _0x42a3a8['name'];}_0x4c312b[_0x48d1('0x13')](_0x3e6faa)[_0x48d1('0x21')](_0x42a3a8);};}exports[_0x48d1('0x22')]=function(_0x45bca5,_0x41dca9){var _0x1c0b70={},_0xeebe9d={},_0x4128b7={'count':0x0,'rows':[]};var _0x36cbaa=db[_0x48d1('0x23')][_0x48d1('0x24')];_0xeebe9d[_0x48d1('0x25')]=_['keys'](_0x36cbaa);var _0x4af593={'dateStart':_0x45bca5['query'][_0x48d1('0x26')],'dateEnd':_0x45bca5[_0x48d1('0x27')][_0x48d1('0x28')]};delete _0x45bca5[_0x48d1('0x27')][_0x48d1('0x26')];delete _0x45bca5[_0x48d1('0x27')][_0x48d1('0x28')];_0xeebe9d[_0x48d1('0x27')]=_[_0x48d1('0x29')](_0x45bca5[_0x48d1('0x27')]);_0xeebe9d['filters']=_[_0x48d1('0x2a')](_0xeebe9d['model'],_0xeebe9d[_0x48d1('0x27')]);_0x1c0b70[_0x48d1('0x2b')]=_[_0x48d1('0x2a')](_0xeebe9d['model'],qs[_0x48d1('0x2c')](_0x45bca5[_0x48d1('0x27')][_0x48d1('0x2c')]));_0x1c0b70[_0x48d1('0x2b')]=_0x1c0b70['attributes'][_0x48d1('0x2d')]?_0x1c0b70['attributes']:_0xeebe9d[_0x48d1('0x25')];if(!_0x45bca5['query'][_0x48d1('0x2e')](_0x48d1('0x2f'))){_0x1c0b70[_0x48d1('0x30')]=qs[_0x48d1('0x30')](_0x45bca5['query'][_0x48d1('0x30')]);_0x1c0b70[_0x48d1('0x16')]=qs[_0x48d1('0x16')](_0x45bca5[_0x48d1('0x27')]['offset']);}_0x1c0b70['order']=qs[_0x48d1('0x31')](_0x45bca5[_0x48d1('0x27')][_0x48d1('0x31')]);_0x1c0b70[_0x48d1('0x32')]=qs[_0x48d1('0x33')](_['pick'](_0x45bca5[_0x48d1('0x27')],_0xeebe9d['filters']));if(_0x4af593[_0x48d1('0x26')]){if(_0x4af593['dateEnd']){_0x4af593[_0x48d1('0x28')]=moment(_0x4af593[_0x48d1('0x28')])['add'](0x1,_0x48d1('0x34'));}else{_0x4af593['dateEnd']=moment(_0x4af593[_0x48d1('0x26')])[_0x48d1('0x35')](0x1,_0x48d1('0x34'));}_[_0x48d1('0x36')](_0x1c0b70[_0x48d1('0x32')],{'createdAt':{'$gte':_0x4af593[_0x48d1('0x26')],'$lte':_0x4af593[_0x48d1('0x28')]}});}if(_0x45bca5[_0x48d1('0x27')][_0x48d1('0x37')]){_0x1c0b70[_0x48d1('0x32')]=_['merge'](_0x1c0b70[_0x48d1('0x32')],{'$or':_['map'](_0x1c0b70[_0x48d1('0x2b')],function(_0x4ad1d1){var _0x15fc81={};_0x15fc81[_0x4ad1d1]={'$like':'%'+_0x45bca5[_0x48d1('0x27')][_0x48d1('0x37')]+'%'};return _0x15fc81;})});}_0x1c0b70=_[_0x48d1('0x36')]({},_0x1c0b70,_0x45bca5[_0x48d1('0x38')]);var _0x4861e5={'where':_0x1c0b70[_0x48d1('0x32')]};return db['Integration'][_0x48d1('0x15')](_0x4861e5)['then'](function(_0x35fb64){_0x4128b7[_0x48d1('0x15')]=_0x35fb64;if(_0x45bca5[_0x48d1('0x27')][_0x48d1('0x39')]){_0x1c0b70[_0x48d1('0x3a')]=[{'all':!![]}];}return db[_0x48d1('0x23')][_0x48d1('0x3b')](_0x1c0b70);})['then'](function(_0x27012c){_0x4128b7[_0x48d1('0x3c')]=_0x27012c;return _0x4128b7;})['then'](respondWithFilteredResult(_0x41dca9,_0x1c0b70))[_0x48d1('0x3d')](handleError(_0x41dca9,null));};exports['show']=function(_0xf63c9d,_0x4d01a7){var _0x1c5786={'raw':![],'where':{'id':_0xf63c9d[_0x48d1('0x3e')]['id']}},_0x273ecc={};_0x273ecc[_0x48d1('0x25')]=_[_0x48d1('0x29')](db['Integration'][_0x48d1('0x24')]);_0x273ecc[_0x48d1('0x27')]=_[_0x48d1('0x29')](_0xf63c9d[_0x48d1('0x27')]);_0x273ecc[_0x48d1('0x33')]=_[_0x48d1('0x2a')](_0x273ecc[_0x48d1('0x25')],_0x273ecc[_0x48d1('0x27')]);_0x1c5786[_0x48d1('0x2b')]=_[_0x48d1('0x2a')](_0x273ecc[_0x48d1('0x25')],qs[_0x48d1('0x2c')](_0xf63c9d['query']['fields']));_0x1c5786['attributes']=_0x1c5786['attributes'][_0x48d1('0x2d')]?_0x1c5786[_0x48d1('0x2b')]:_0x273ecc[_0x48d1('0x25')];if(_0xf63c9d['query'][_0x48d1('0x39')]){_0x1c5786[_0x48d1('0x3a')]=[{'all':!![]}];}_0x1c5786=_[_0x48d1('0x36')]({},_0x1c5786,_0xf63c9d[_0x48d1('0x38')]);return db['Integration'][_0x48d1('0x3f')](_0x1c5786)[_0x48d1('0x1c')](handleEntityNotFound(_0x4d01a7,null))['then'](respondWithResult(_0x4d01a7,null))[_0x48d1('0x3d')](handleError(_0x4d01a7,null));};exports[_0x48d1('0x40')]=function(_0x5cc41b,_0x30f101){return db[_0x48d1('0x23')][_0x48d1('0x40')](_0x5cc41b[_0x48d1('0x41')],{})['then'](respondWithResult(_0x30f101,0xc9))[_0x48d1('0x3d')](handleError(_0x30f101,null));};exports[_0x48d1('0x1b')]=function(_0x3acc74,_0x4a9411){if(_0x3acc74[_0x48d1('0x41')]['id']){delete _0x3acc74['body']['id'];}return db['Integration'][_0x48d1('0x3f')]({'where':{'id':_0x3acc74[_0x48d1('0x3e')]['id']}})[_0x48d1('0x1c')](handleEntityNotFound(_0x4a9411,null))[_0x48d1('0x1c')](saveUpdates(_0x3acc74[_0x48d1('0x41')],null))[_0x48d1('0x1c')](respondWithResult(_0x4a9411,null))[_0x48d1('0x3d')](handleError(_0x4a9411,null));};exports['destroy']=function(_0x368c89,_0x118744){return db[_0x48d1('0x23')][_0x48d1('0x3f')]({'where':{'id':_0x368c89[_0x48d1('0x3e')]['id']}})[_0x48d1('0x1c')](handleEntityNotFound(_0x118744,null))[_0x48d1('0x1c')](removeEntity(_0x118744,null))[_0x48d1('0x3d')](handleError(_0x118744,null));};
\ No newline at end of file
index 80a86f7..38d043b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1967=['integrations','util','../../config/logger','api','moment','bluebird','request-promise','./integration.attributes','exports','Integration'];(function(_0x4a6615,_0x24ed38){var _0x4293ae=function(_0x258d02){while(--_0x258d02){_0x4a6615['push'](_0x4a6615['shift']());}};_0x4293ae(++_0x24ed38);}(_0x1967,0x173));var _0x7196=function(_0x3a747a,_0x17a1ba){_0x3a747a=_0x3a747a-0x0;var _0x4c3683=_0x1967[_0x3a747a];return _0x4c3683;};'use strict';var _=require('lodash');var util=require(_0x7196('0x0'));var logger=require(_0x7196('0x1'))(_0x7196('0x2'));var moment=require(_0x7196('0x3'));var BPromise=require(_0x7196('0x4'));var rp=require(_0x7196('0x5'));var attributes=require(_0x7196('0x6'));module[_0x7196('0x7')]=function(_0x458ae8,_0x3ae43f){return _0x458ae8['define'](_0x7196('0x8'),attributes,{'tableName':_0x7196('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x524e=['api','moment','bluebird','request-promise','./integration.attributes','exports','define','integrations','../../config/logger'];(function(_0x51052d,_0x5cb65c){var _0x2ab57e=function(_0x433f4d){while(--_0x433f4d){_0x51052d['push'](_0x51052d['shift']());}};_0x2ab57e(++_0x5cb65c);}(_0x524e,0x15e));var _0xe524=function(_0x526d96,_0x5ba08a){_0x526d96=_0x526d96-0x0;var _0x455127=_0x524e[_0x526d96];return _0x455127;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xe524('0x0'))(_0xe524('0x1'));var moment=require(_0xe524('0x2'));var BPromise=require(_0xe524('0x3'));var rp=require(_0xe524('0x4'));var attributes=require(_0xe524('0x5'));module[_0xe524('0x6')]=function(_0x32c90b,_0x10d37a){return _0x32c90b[_0xe524('0x7')]('Integration',attributes,{'tableName':_0xe524('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 7c0c598..2a43745 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa64=['code','Integration,\x20%s,\x20%s','message','result','catch','lodash','util','bluebird','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','Integration,\x20%s,\x20%s,\x20%s','error'];(function(_0x4c1969,_0x4c110e){var _0xca10fb=function(_0x25c471){while(--_0x25c471){_0x4c1969['push'](_0x4c1969['shift']());}};_0xca10fb(++_0x4c110e);}(_0xaa64,0xf7));var _0x4aa6=function(_0x2164dd,_0x1a6e92){_0x2164dd=_0x2164dd-0x0;var _0x2d975f=_0xaa64[_0x2164dd];return _0x2d975f;};'use strict';var _=require(_0x4aa6('0x0'));var util=require(_0x4aa6('0x1'));var moment=require('moment');var BPromise=require(_0x4aa6('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x4aa6('0x3'))['db'];var utils=require(_0x4aa6('0x4'));var logger=require(_0x4aa6('0x5'))('rpc');var config=require(_0x4aa6('0x6'));var jayson=require(_0x4aa6('0x7'));var client=jayson[_0x4aa6('0x8')][_0x4aa6('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x426bd6,_0x7dd83d,_0x39c4b5){return new BPromise(function(_0x49e174,_0x529c89){return client[_0x4aa6('0xa')](_0x426bd6,_0x39c4b5)[_0x4aa6('0xb')](function(_0x4e7f55){logger[_0x4aa6('0xc')]('Integration,\x20%s,\x20%s',_0x7dd83d,_0x4aa6('0xd'));logger[_0x4aa6('0xe')](_0x4aa6('0xf'),_0x7dd83d,_0x4aa6('0xd'),JSON['stringify'](_0x4e7f55));if(_0x4e7f55[_0x4aa6('0x10')]){if(_0x4e7f55[_0x4aa6('0x10')][_0x4aa6('0x11')]===0x1f4){logger[_0x4aa6('0x10')](_0x4aa6('0x12'),_0x7dd83d,_0x4e7f55[_0x4aa6('0x10')][_0x4aa6('0x13')]);return _0x529c89(_0x4e7f55[_0x4aa6('0x10')][_0x4aa6('0x13')]);}logger[_0x4aa6('0x10')]('Integration,\x20%s,\x20%s',_0x7dd83d,_0x4e7f55[_0x4aa6('0x10')]['message']);return _0x49e174(_0x4e7f55['error'][_0x4aa6('0x13')]);}else{logger[_0x4aa6('0xc')](_0x4aa6('0x12'),_0x7dd83d,_0x4aa6('0xd'));_0x49e174(_0x4e7f55[_0x4aa6('0x14')][_0x4aa6('0x13')]);}})[_0x4aa6('0x15')](function(_0x2c5c66){logger['error'](_0x4aa6('0x12'),_0x7dd83d,_0x2c5c66);_0x529c89(_0x2c5c66);});});}
\ No newline at end of file
+var _0x1eba=['Integration,\x20%s,\x20%s','debug','request\x20sent','error','code','message','info','result','catch','lodash','util','moment','bluebird','randomstring','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request'];(function(_0x33de54,_0x5434b9){var _0x18fe1f=function(_0x3fe66c){while(--_0x3fe66c){_0x33de54['push'](_0x33de54['shift']());}};_0x18fe1f(++_0x5434b9);}(_0x1eba,0x1d7));var _0xa1eb=function(_0x56b138,_0x2396d6){_0x56b138=_0x56b138-0x0;var _0x3df878=_0x1eba[_0x56b138];return _0x3df878;};'use strict';var _=require(_0xa1eb('0x0'));var util=require(_0xa1eb('0x1'));var moment=require(_0xa1eb('0x2'));var BPromise=require(_0xa1eb('0x3'));var rs=require(_0xa1eb('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xa1eb('0x5'))(_0xa1eb('0x6'));var config=require(_0xa1eb('0x7'));var jayson=require(_0xa1eb('0x8'));var client=jayson[_0xa1eb('0x9')][_0xa1eb('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x1d0d67,_0x2bfbb0,_0x39a5a3){return new BPromise(function(_0x7d2982,_0x2aebb6){return client[_0xa1eb('0xb')](_0x1d0d67,_0x39a5a3)['then'](function(_0x1ecd20){logger['info'](_0xa1eb('0xc'),_0x2bfbb0,'request\x20sent');logger[_0xa1eb('0xd')]('Integration,\x20%s,\x20%s,\x20%s',_0x2bfbb0,_0xa1eb('0xe'),JSON['stringify'](_0x1ecd20));if(_0x1ecd20[_0xa1eb('0xf')]){if(_0x1ecd20[_0xa1eb('0xf')][_0xa1eb('0x10')]===0x1f4){logger['error'](_0xa1eb('0xc'),_0x2bfbb0,_0x1ecd20[_0xa1eb('0xf')]['message']);return _0x2aebb6(_0x1ecd20[_0xa1eb('0xf')]['message']);}logger['error'](_0xa1eb('0xc'),_0x2bfbb0,_0x1ecd20['error'][_0xa1eb('0x11')]);return _0x7d2982(_0x1ecd20[_0xa1eb('0xf')][_0xa1eb('0x11')]);}else{logger[_0xa1eb('0x12')](_0xa1eb('0xc'),_0x2bfbb0,_0xa1eb('0xe'));_0x7d2982(_0x1ecd20[_0xa1eb('0x13')][_0xa1eb('0x11')]);}})[_0xa1eb('0x14')](function(_0x4aa527){logger[_0xa1eb('0xf')]('Integration,\x20%s,\x20%s',_0x2bfbb0,_0x4aa527);_0x2aebb6(_0x4aa527);});});}
\ No newline at end of file
index f177a96..eb2cdc5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe698=['show','post','create','delete','destroy','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','describe','/:id'];(function(_0x37bd26,_0x5ad346){var _0xe83dc4=function(_0x1ac229){while(--_0x1ac229){_0x37bd26['push'](_0x37bd26['shift']());}};_0xe83dc4(++_0x5ad346);}(_0xe698,0xd7));var _0x8e69=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0xe698[_0x19950b];return _0x3c6b41;};'use strict';var multer=require(_0x8e69('0x0'));var util=require('util');var path=require(_0x8e69('0x1'));var express=require(_0x8e69('0x2'));var router=express[_0x8e69('0x3')]();var auth=require(_0x8e69('0x4'));var interaction=require(_0x8e69('0x5'));var config=require(_0x8e69('0x6'));var controller=require('./integrationReport.controller');router[_0x8e69('0x7')]('/',auth[_0x8e69('0x8')](),controller[_0x8e69('0x9')]);router[_0x8e69('0x7')](_0x8e69('0xa'),auth[_0x8e69('0x8')](),controller[_0x8e69('0xb')]);router[_0x8e69('0x7')](_0x8e69('0xc'),auth['isAuthenticated'](),controller[_0x8e69('0xd')]);router[_0x8e69('0xe')]('/',auth['isAuthenticated'](),controller[_0x8e69('0xf')]);router['put'](_0x8e69('0xc'),auth[_0x8e69('0x8')](),controller['update']);router[_0x8e69('0x10')](_0x8e69('0xc'),auth[_0x8e69('0x8')](),controller[_0x8e69('0x11')]);module[_0x8e69('0x12')]=router;
\ No newline at end of file
+var _0x8cc5=['util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./integrationReport.controller','get','index','isAuthenticated','describe','/:id','show','create','update','delete','destroy','exports','multer'];(function(_0x4a74d7,_0xb4249f){var _0xd4935a=function(_0x25f8ac){while(--_0x25f8ac){_0x4a74d7['push'](_0x4a74d7['shift']());}};_0xd4935a(++_0xb4249f);}(_0x8cc5,0x103));var _0x58cc=function(_0x5b5490,_0x687b7c){_0x5b5490=_0x5b5490-0x0;var _0x2cdc70=_0x8cc5[_0x5b5490];return _0x2cdc70;};'use strict';var multer=require(_0x58cc('0x0'));var util=require(_0x58cc('0x1'));var path=require(_0x58cc('0x2'));var express=require(_0x58cc('0x3'));var router=express[_0x58cc('0x4')]();var auth=require(_0x58cc('0x5'));var interaction=require(_0x58cc('0x6'));var config=require(_0x58cc('0x7'));var controller=require(_0x58cc('0x8'));router[_0x58cc('0x9')]('/',auth['isAuthenticated'](),controller[_0x58cc('0xa')]);router[_0x58cc('0x9')]('/describe',auth[_0x58cc('0xb')](),controller[_0x58cc('0xc')]);router['get'](_0x58cc('0xd'),auth[_0x58cc('0xb')](),controller[_0x58cc('0xe')]);router['post']('/',auth['isAuthenticated'](),controller[_0x58cc('0xf')]);router['put']('/:id',auth[_0x58cc('0xb')](),controller[_0x58cc('0x10')]);router[_0x58cc('0x11')](_0x58cc('0xd'),auth[_0x58cc('0xb')](),controller[_0x58cc('0x12')]);module[_0x58cc('0x13')]=router;
\ No newline at end of file
index 857fe32..93ca7a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x20db=['STRING','INTEGER','DATE','BOOLEAN','TEXT','SENDING'];(function(_0xf3a0a1,_0x45618a){var _0x2fabe7=function(_0x359ddb){while(--_0x359ddb){_0xf3a0a1['push'](_0xf3a0a1['shift']());}};_0x2fabe7(++_0x45618a);}(_0x20db,0x19e));var _0xb20d=function(_0x4cbfc3,_0x12425b){_0x4cbfc3=_0x4cbfc3-0x0;var _0x1f6a01=_0x20db[_0x4cbfc3];return _0x1f6a01;};'use strict';var Sequelize=require('sequelize');module['exports']={'integration':{'type':Sequelize[_0xb20d('0x0')]},'eventChannel':{'type':Sequelize[_0xb20d('0x0')]},'exitStatus':{'type':Sequelize[_0xb20d('0x0')]},'ticketId':{'type':Sequelize['STRING']},'integrationId':{'type':Sequelize[_0xb20d('0x1')]},'contacts':{'type':Sequelize[_0xb20d('0x0')]},'uniqueid':{'type':Sequelize[_0xb20d('0x0')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0xb20d('0x0')]},'queue':{'type':Sequelize[_0xb20d('0x0')]},'interface':{'type':Sequelize['STRING']},'membername':{'type':Sequelize['STRING']},'agentcalledAt':{'type':Sequelize[_0xb20d('0x2')]},'agentconnectAt':{'type':Sequelize[_0xb20d('0x2')]},'holdtime':{'type':Sequelize[_0xb20d('0x1')]},'agentcomplete':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentcompleteAt':{'type':Sequelize[_0xb20d('0x2')]},'talktime':{'type':Sequelize[_0xb20d('0x1')]},'agentacw':{'type':Sequelize[_0xb20d('0x3')],'defaultValue':![]},'acwtime':{'type':Sequelize[_0xb20d('0x1')]},'reason':{'type':Sequelize['STRING']},'agentringnoanswer':{'type':Sequelize[_0xb20d('0x3')],'defaultValue':![]},'agentringnoanswerAt':{'type':Sequelize['DATE']},'agentdump':{'type':Sequelize[_0xb20d('0x3')],'defaultValue':![]},'agentdumpAt':{'type':Sequelize['DATE']},'lastevent':{'type':Sequelize[_0xb20d('0x0')]},'channel':{'type':Sequelize[_0xb20d('0x0')]},'channelstate':{'type':Sequelize['INTEGER']},'channelstatedesc':{'type':Sequelize[_0xb20d('0x0')]},'connectedlinenum':{'type':Sequelize[_0xb20d('0x0')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize[_0xb20d('0x0')]},'accountcode':{'type':Sequelize[_0xb20d('0x0')]},'context':{'type':Sequelize[_0xb20d('0x0')]},'exten':{'type':Sequelize['STRING']},'priority':{'type':Sequelize[_0xb20d('0x0')]},'destchannel':{'type':Sequelize[_0xb20d('0x0')]},'destchannelstate':{'type':Sequelize['INTEGER']},'destchannelstatedesc':{'type':Sequelize[_0xb20d('0x0')]},'destcalleridnum':{'type':Sequelize[_0xb20d('0x0')]},'destcalleridname':{'type':Sequelize[_0xb20d('0x0')]},'destconnectedlinenum':{'type':Sequelize[_0xb20d('0x0')]},'destconnectedlinename':{'type':Sequelize[_0xb20d('0x0')]},'destlanguage':{'type':Sequelize[_0xb20d('0x0')]},'destaccountcode':{'type':Sequelize[_0xb20d('0x0')]},'destcontext':{'type':Sequelize['STRING']},'destexten':{'type':Sequelize[_0xb20d('0x0')]},'destpriority':{'type':Sequelize[_0xb20d('0x0')]},'destuniqueid':{'type':Sequelize['STRING']},'messageId':{'type':Sequelize[_0xb20d('0x0')]},'inReplyTo':{'type':Sequelize[_0xb20d('0x0')]},'subject':{'type':Sequelize[_0xb20d('0x0')]},'from':{'type':Sequelize[_0xb20d('0x0')]},'to':{'type':Sequelize[_0xb20d('0x0')]},'cc':{'type':Sequelize[_0xb20d('0x0')]},'attachment':{'type':Sequelize[_0xb20d('0x4')]},'html':{'type':Sequelize[_0xb20d('0x4')]},'text':{'type':Sequelize[_0xb20d('0x4')]},'status':{'type':Sequelize['ENUM']('SENT',_0xb20d('0x5'),'RECEIVED','FAILED')},'url':{'type':Sequelize[_0xb20d('0x0')]},'app':{'type':Sequelize[_0xb20d('0x0')]},'appdata':{'type':Sequelize['STRING']},'projectId':{'type':Sequelize[_0xb20d('0x1')]}};
\ No newline at end of file
+var _0x8f9c=['BOOLEAN','TEXT','ENUM','SENDING','FAILED','sequelize','exports','STRING','DATE','INTEGER'];(function(_0x190d87,_0x2bf689){var _0x3384bf=function(_0x390a05){while(--_0x390a05){_0x190d87['push'](_0x190d87['shift']());}};_0x3384bf(++_0x2bf689);}(_0x8f9c,0x7d));var _0xc8f9=function(_0x4b055c,_0x4b870b){_0x4b055c=_0x4b055c-0x0;var _0x4b62bb=_0x8f9c[_0x4b055c];return _0x4b62bb;};'use strict';var Sequelize=require(_0xc8f9('0x0'));module[_0xc8f9('0x1')]={'integration':{'type':Sequelize['STRING']},'eventChannel':{'type':Sequelize[_0xc8f9('0x2')]},'exitStatus':{'type':Sequelize[_0xc8f9('0x2')]},'ticketId':{'type':Sequelize['STRING']},'integrationId':{'type':Sequelize['INTEGER']},'contacts':{'type':Sequelize[_0xc8f9('0x2')]},'uniqueid':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0xc8f9('0x2')]},'calleridname':{'type':Sequelize[_0xc8f9('0x2')]},'queue':{'type':Sequelize['STRING']},'interface':{'type':Sequelize[_0xc8f9('0x2')]},'membername':{'type':Sequelize[_0xc8f9('0x2')]},'agentcalledAt':{'type':Sequelize[_0xc8f9('0x3')]},'agentconnectAt':{'type':Sequelize[_0xc8f9('0x3')]},'holdtime':{'type':Sequelize[_0xc8f9('0x4')]},'agentcomplete':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentcompleteAt':{'type':Sequelize[_0xc8f9('0x3')]},'talktime':{'type':Sequelize[_0xc8f9('0x4')]},'agentacw':{'type':Sequelize[_0xc8f9('0x5')],'defaultValue':![]},'acwtime':{'type':Sequelize[_0xc8f9('0x4')]},'reason':{'type':Sequelize[_0xc8f9('0x2')]},'agentringnoanswer':{'type':Sequelize[_0xc8f9('0x5')],'defaultValue':![]},'agentringnoanswerAt':{'type':Sequelize[_0xc8f9('0x3')]},'agentdump':{'type':Sequelize[_0xc8f9('0x5')],'defaultValue':![]},'agentdumpAt':{'type':Sequelize[_0xc8f9('0x3')]},'lastevent':{'type':Sequelize[_0xc8f9('0x2')]},'channel':{'type':Sequelize[_0xc8f9('0x2')]},'channelstate':{'type':Sequelize[_0xc8f9('0x4')]},'channelstatedesc':{'type':Sequelize[_0xc8f9('0x2')]},'connectedlinenum':{'type':Sequelize['STRING']},'connectedlinename':{'type':Sequelize[_0xc8f9('0x2')]},'language':{'type':Sequelize[_0xc8f9('0x2')]},'accountcode':{'type':Sequelize[_0xc8f9('0x2')]},'context':{'type':Sequelize[_0xc8f9('0x2')]},'exten':{'type':Sequelize[_0xc8f9('0x2')]},'priority':{'type':Sequelize[_0xc8f9('0x2')]},'destchannel':{'type':Sequelize[_0xc8f9('0x2')]},'destchannelstate':{'type':Sequelize[_0xc8f9('0x4')]},'destchannelstatedesc':{'type':Sequelize[_0xc8f9('0x2')]},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize[_0xc8f9('0x2')]},'destconnectedlinenum':{'type':Sequelize[_0xc8f9('0x2')]},'destconnectedlinename':{'type':Sequelize[_0xc8f9('0x2')]},'destlanguage':{'type':Sequelize['STRING']},'destaccountcode':{'type':Sequelize[_0xc8f9('0x2')]},'destcontext':{'type':Sequelize[_0xc8f9('0x2')]},'destexten':{'type':Sequelize[_0xc8f9('0x2')]},'destpriority':{'type':Sequelize[_0xc8f9('0x2')]},'destuniqueid':{'type':Sequelize[_0xc8f9('0x2')]},'messageId':{'type':Sequelize[_0xc8f9('0x2')]},'inReplyTo':{'type':Sequelize['STRING']},'subject':{'type':Sequelize[_0xc8f9('0x2')]},'from':{'type':Sequelize[_0xc8f9('0x2')]},'to':{'type':Sequelize[_0xc8f9('0x2')]},'cc':{'type':Sequelize[_0xc8f9('0x2')]},'attachment':{'type':Sequelize[_0xc8f9('0x6')]},'html':{'type':Sequelize[_0xc8f9('0x6')]},'text':{'type':Sequelize['TEXT']},'status':{'type':Sequelize[_0xc8f9('0x7')]('SENT',_0xc8f9('0x8'),'RECEIVED',_0xc8f9('0x9'))},'url':{'type':Sequelize['STRING']},'app':{'type':Sequelize[_0xc8f9('0x2')]},'appdata':{'type':Sequelize['STRING']},'projectId':{'type':Sequelize[_0xc8f9('0x4')]}};
\ No newline at end of file
index ffacb0a..44593f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf3e=['filters','pick','add','day','filter','where','map','options','includeAll','findAll','rows','params','include','merge','find','catch','create','body','describe','fast-json-patch','mustache','util','path','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','end','json','count','offset','status','set','Content-Range','apply','reject','save','update','destroy','then','sendStatus','error','stack','name','send','IntegrationReport','rawAttributes','keys','query','dateStart','dateEnd','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort'];(function(_0x56da86,_0x21b697){var _0xd5c69=function(_0x1352cc){while(--_0x1352cc){_0x56da86['push'](_0x56da86['shift']());}};_0xd5c69(++_0x21b697);}(_0xbf3e,0x9f));var _0xebf3=function(_0xa376c0,_0x45a998){_0xa376c0=_0xa376c0-0x0;var _0x10dd1a=_0xbf3e[_0xa376c0];return _0x10dd1a;};'use strict';var jsonpatch=require(_0xebf3('0x0'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xebf3('0x1'));var util=require(_0xebf3('0x2'));var path=require(_0xebf3('0x3'));var sox=require(_0xebf3('0x4'));var csv=require(_0xebf3('0x5'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xebf3('0x6'));var squel=require(_0xebf3('0x7'));var crypto=require('crypto');var jsforce=require(_0xebf3('0x8'));var deskjs=require(_0xebf3('0x9'));var toCsv=require(_0xebf3('0x5'));var querystring=require(_0xebf3('0xa'));var Papa=require(_0xebf3('0xb'));var qs=require('../../components/parsers/qs');var logger=require(_0xebf3('0xc'))(_0xebf3('0xd'));var utils=require(_0xebf3('0xe'));var config=require(_0xebf3('0xf'));var db=require(_0xebf3('0x10'))['db'];function respondWithStatusCode(_0x559e0a,_0x14c1b3){_0x14c1b3=_0x14c1b3||0xcc;return function(_0x325785){if(_0x325785){return _0x559e0a['sendStatus'](_0x14c1b3);}return _0x559e0a['status'](_0x14c1b3)[_0xebf3('0x11')]();};}function respondWithResult(_0x80939e,_0x3b375e){_0x3b375e=_0x3b375e||0xc8;return function(_0x3d86d5){if(_0x3d86d5){return _0x80939e['status'](_0x3b375e)[_0xebf3('0x12')](_0x3d86d5);}};}function respondWithFilteredResult(_0x108e58,_0x5d19f0){return function(_0x3cd9f4){if(_0x3cd9f4){var _0x51d5af=_0x3cd9f4[_0xebf3('0x13')],_0x2ba114=_0x5d19f0['offset'],_0x1791c3=_0x5d19f0[_0xebf3('0x14')]+_0x5d19f0['limit'],_0x5ce775;if(_0x1791c3>=_0x51d5af){_0x1791c3=_0x51d5af;_0x5ce775=0xc8;}else{_0x5ce775=0xce;}_0x108e58[_0xebf3('0x15')](_0x5ce775);return _0x108e58[_0xebf3('0x16')](_0xebf3('0x17'),_0x2ba114+'-'+_0x1791c3+'/'+_0x51d5af)[_0xebf3('0x12')](_0x3cd9f4);}return null;};}function patchUpdates(_0x13b440){return function(_0x3285ea){try{jsonpatch[_0xebf3('0x18')](_0x3285ea,_0x13b440,!![]);}catch(_0x58b17a){return BPromise[_0xebf3('0x19')](_0x58b17a);}return _0x3285ea[_0xebf3('0x1a')]();};}function saveUpdates(_0x31bde7,_0x35bcb9){return function(_0x421eb5){if(_0x421eb5){return _0x421eb5[_0xebf3('0x1b')](_0x31bde7)['then'](function(_0xe8db56){return _0xe8db56;});}return null;};}function removeEntity(_0x505f6d,_0xb29cb){return function(_0x58c5de){if(_0x58c5de){return _0x58c5de[_0xebf3('0x1c')]()[_0xebf3('0x1d')](function(){_0x505f6d['status'](0xcc)[_0xebf3('0x11')]();});}};}function handleEntityNotFound(_0x40125c,_0x1c4c29){return function(_0x1a7c19){if(!_0x1a7c19){_0x40125c[_0xebf3('0x1e')](0x194);}return _0x1a7c19;};}function handleError(_0x49c242,_0x2a9a42){_0x2a9a42=_0x2a9a42||0x1f4;return function(_0x3cea98){logger[_0xebf3('0x1f')](_0x3cea98[_0xebf3('0x20')]);if(_0x3cea98[_0xebf3('0x21')]){delete _0x3cea98[_0xebf3('0x21')];}_0x49c242[_0xebf3('0x15')](_0x2a9a42)[_0xebf3('0x22')](_0x3cea98);};}exports['index']=function(_0xb023c0,_0x16db5c){var _0x2331df={},_0x4201b1={},_0x1a5cff={'count':0x0,'rows':[]};var _0x143e70=db[_0xebf3('0x23')][_0xebf3('0x24')];_0x4201b1['model']=_[_0xebf3('0x25')](_0x143e70);var _0x4ef38e={'dateStart':_0xb023c0[_0xebf3('0x26')][_0xebf3('0x27')],'dateEnd':_0xb023c0['query']['dateEnd']};delete _0xb023c0[_0xebf3('0x26')][_0xebf3('0x27')];delete _0xb023c0[_0xebf3('0x26')][_0xebf3('0x28')];_0x4201b1[_0xebf3('0x26')]=_[_0xebf3('0x25')](_0xb023c0[_0xebf3('0x26')]);_0x4201b1['filters']=_[_0xebf3('0x29')](_0x4201b1[_0xebf3('0x2a')],_0x4201b1[_0xebf3('0x26')]);_0x2331df['attributes']=_[_0xebf3('0x29')](_0x4201b1[_0xebf3('0x2a')],qs['fields'](_0xb023c0['query'][_0xebf3('0x2b')]));_0x2331df[_0xebf3('0x2c')]=_0x2331df[_0xebf3('0x2c')][_0xebf3('0x2d')]?_0x2331df['attributes']:_0x4201b1[_0xebf3('0x2a')];if(!_0xb023c0[_0xebf3('0x26')][_0xebf3('0x2e')](_0xebf3('0x2f'))){_0x2331df[_0xebf3('0x30')]=qs[_0xebf3('0x30')](_0xb023c0[_0xebf3('0x26')]['limit']);_0x2331df[_0xebf3('0x14')]=qs['offset'](_0xb023c0['query'][_0xebf3('0x14')]);}_0x2331df[_0xebf3('0x31')]=qs[_0xebf3('0x32')](_0xb023c0[_0xebf3('0x26')][_0xebf3('0x32')]);_0x2331df['where']=qs[_0xebf3('0x33')](_[_0xebf3('0x34')](_0xb023c0[_0xebf3('0x26')],_0x4201b1['filters']));if(_0x4ef38e[_0xebf3('0x27')]){if(_0x4ef38e[_0xebf3('0x28')]){_0x4ef38e[_0xebf3('0x28')]=moment(_0x4ef38e['dateEnd'])[_0xebf3('0x35')](0x1,_0xebf3('0x36'));}else{_0x4ef38e[_0xebf3('0x28')]=moment(_0x4ef38e[_0xebf3('0x27')])['add'](0x1,_0xebf3('0x36'));}_['merge'](_0x2331df['where'],{'createdAt':{'$gte':_0x4ef38e[_0xebf3('0x27')],'$lte':_0x4ef38e[_0xebf3('0x28')]}});}if(_0xb023c0[_0xebf3('0x26')][_0xebf3('0x37')]){_0x2331df[_0xebf3('0x38')]=_['merge'](_0x2331df['where'],{'$or':_[_0xebf3('0x39')](_0x2331df['attributes'],function(_0x328d5e){var _0x5a3c27={};_0x5a3c27[_0x328d5e]={'$like':'%'+_0xb023c0['query'][_0xebf3('0x37')]+'%'};return _0x5a3c27;})});}_0x2331df=_['merge']({},_0x2331df,_0xb023c0[_0xebf3('0x3a')]);var _0x43e419={'where':_0x2331df[_0xebf3('0x38')]};return db['IntegrationReport'][_0xebf3('0x13')](_0x43e419)[_0xebf3('0x1d')](function(_0x37f926){_0x1a5cff['count']=_0x37f926;if(_0xb023c0['query'][_0xebf3('0x3b')]){_0x2331df['include']=[{'all':!![]}];}return db[_0xebf3('0x23')][_0xebf3('0x3c')](_0x2331df);})[_0xebf3('0x1d')](function(_0x2ab54d){_0x1a5cff[_0xebf3('0x3d')]=_0x2ab54d;return _0x1a5cff;})[_0xebf3('0x1d')](respondWithFilteredResult(_0x16db5c,_0x2331df))['catch'](handleError(_0x16db5c,null));};exports['show']=function(_0x41de08,_0x1c279e){var _0x10cbb8={'raw':![],'where':{'id':_0x41de08[_0xebf3('0x3e')]['id']}},_0x39c13f={};_0x39c13f[_0xebf3('0x2a')]=_[_0xebf3('0x25')](db[_0xebf3('0x23')]['rawAttributes']);_0x39c13f[_0xebf3('0x26')]=_[_0xebf3('0x25')](_0x41de08[_0xebf3('0x26')]);_0x39c13f[_0xebf3('0x33')]=_[_0xebf3('0x29')](_0x39c13f[_0xebf3('0x2a')],_0x39c13f[_0xebf3('0x26')]);_0x10cbb8[_0xebf3('0x2c')]=_[_0xebf3('0x29')](_0x39c13f[_0xebf3('0x2a')],qs['fields'](_0x41de08['query'][_0xebf3('0x2b')]));_0x10cbb8[_0xebf3('0x2c')]=_0x10cbb8[_0xebf3('0x2c')][_0xebf3('0x2d')]?_0x10cbb8[_0xebf3('0x2c')]:_0x39c13f[_0xebf3('0x2a')];if(_0x41de08[_0xebf3('0x26')][_0xebf3('0x3b')]){_0x10cbb8[_0xebf3('0x3f')]=[{'all':!![]}];}_0x10cbb8=_[_0xebf3('0x40')]({},_0x10cbb8,_0x41de08[_0xebf3('0x3a')]);return db['IntegrationReport'][_0xebf3('0x41')](_0x10cbb8)[_0xebf3('0x1d')](handleEntityNotFound(_0x1c279e,null))[_0xebf3('0x1d')](respondWithResult(_0x1c279e,null))[_0xebf3('0x42')](handleError(_0x1c279e,null));};exports['create']=function(_0x59f41a,_0xf2041d){return db[_0xebf3('0x23')][_0xebf3('0x43')](_0x59f41a[_0xebf3('0x44')],{})[_0xebf3('0x1d')](respondWithResult(_0xf2041d,0xc9))[_0xebf3('0x42')](handleError(_0xf2041d,null));};exports['update']=function(_0x4a3c4d,_0x10a1fb){if(_0x4a3c4d[_0xebf3('0x44')]['id']){delete _0x4a3c4d[_0xebf3('0x44')]['id'];}return db[_0xebf3('0x23')][_0xebf3('0x41')]({'where':{'id':_0x4a3c4d[_0xebf3('0x3e')]['id']}})[_0xebf3('0x1d')](handleEntityNotFound(_0x10a1fb,null))['then'](saveUpdates(_0x4a3c4d[_0xebf3('0x44')],null))[_0xebf3('0x1d')](respondWithResult(_0x10a1fb,null))['catch'](handleError(_0x10a1fb,null));};exports['destroy']=function(_0x212458,_0x27eb8c){return db[_0xebf3('0x23')][_0xebf3('0x41')]({'where':{'id':_0x212458[_0xebf3('0x3e')]['id']}})[_0xebf3('0x1d')](handleEntityNotFound(_0x27eb8c,null))['then'](removeEntity(_0x27eb8c,null))[_0xebf3('0x42')](handleError(_0x27eb8c,null));};exports[_0xebf3('0x45')]=function(_0x567f8f,_0x2c79a3){return db[_0xebf3('0x23')][_0xebf3('0x45')]()[_0xebf3('0x1d')](respondWithResult(_0x2c79a3,null))['catch'](handleError(_0x2c79a3,null));};
\ No newline at end of file
+var _0x6439=['includeAll','include','rows','catch','params','options','create','body','find','describe','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','limit','set','reject','save','update','then','destroy','stack','name','send','index','rawAttributes','query','dateStart','dateEnd','keys','filters','intersection','model','attributes','fields','nolimit','sort','where','pick','add','day','merge','filter','map','IntegrationReport'];(function(_0xaebd08,_0x1bd66b){var _0x1642fa=function(_0xfb697b){while(--_0xfb697b){_0xaebd08['push'](_0xaebd08['shift']());}};_0x1642fa(++_0x1bd66b);}(_0x6439,0x116));var _0x9643=function(_0x2fc012,_0x503e5b){_0x2fc012=_0x2fc012-0x0;var _0x2891f9=_0x6439[_0x2fc012];return _0x2891f9;};'use strict';var jsonpatch=require(_0x9643('0x0'));var rp=require(_0x9643('0x1'));var moment=require(_0x9643('0x2'));var BPromise=require(_0x9643('0x3'));var Mustache=require('mustache');var util=require(_0x9643('0x4'));var path=require(_0x9643('0x5'));var sox=require(_0x9643('0x6'));var csv=require(_0x9643('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x9643('0x8'));var squel=require(_0x9643('0x9'));var crypto=require(_0x9643('0xa'));var jsforce=require(_0x9643('0xb'));var deskjs=require(_0x9643('0xc'));var toCsv=require(_0x9643('0x7'));var querystring=require(_0x9643('0xd'));var Papa=require(_0x9643('0xe'));var qs=require(_0x9643('0xf'));var logger=require(_0x9643('0x10'))(_0x9643('0x11'));var utils=require(_0x9643('0x12'));var config=require(_0x9643('0x13'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xe7f71e,_0x4927d1){_0x4927d1=_0x4927d1||0xcc;return function(_0x53d802){if(_0x53d802){return _0xe7f71e[_0x9643('0x14')](_0x4927d1);}return _0xe7f71e[_0x9643('0x15')](_0x4927d1)[_0x9643('0x16')]();};}function respondWithResult(_0x153568,_0x2b73f8){_0x2b73f8=_0x2b73f8||0xc8;return function(_0x4361da){if(_0x4361da){return _0x153568[_0x9643('0x15')](_0x2b73f8)[_0x9643('0x17')](_0x4361da);}};}function respondWithFilteredResult(_0x16ada3,_0x1a5a28){return function(_0x16e58b){if(_0x16e58b){var _0x54575a=_0x16e58b[_0x9643('0x18')],_0x172887=_0x1a5a28[_0x9643('0x19')],_0x336364=_0x1a5a28[_0x9643('0x19')]+_0x1a5a28[_0x9643('0x1a')],_0x4ee3c8;if(_0x336364>=_0x54575a){_0x336364=_0x54575a;_0x4ee3c8=0xc8;}else{_0x4ee3c8=0xce;}_0x16ada3[_0x9643('0x15')](_0x4ee3c8);return _0x16ada3[_0x9643('0x1b')]('Content-Range',_0x172887+'-'+_0x336364+'/'+_0x54575a)[_0x9643('0x17')](_0x16e58b);}return null;};}function patchUpdates(_0x430b1e){return function(_0x3f0989){try{jsonpatch['apply'](_0x3f0989,_0x430b1e,!![]);}catch(_0x520aa1){return BPromise[_0x9643('0x1c')](_0x520aa1);}return _0x3f0989[_0x9643('0x1d')]();};}function saveUpdates(_0x1f8e20,_0x188a71){return function(_0x5ac3bc){if(_0x5ac3bc){return _0x5ac3bc[_0x9643('0x1e')](_0x1f8e20)[_0x9643('0x1f')](function(_0x10914f){return _0x10914f;});}return null;};}function removeEntity(_0x2ab9ec,_0x477637){return function(_0x583a5f){if(_0x583a5f){return _0x583a5f[_0x9643('0x20')]()['then'](function(){_0x2ab9ec['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x38df6c,_0x4892e2){return function(_0x43212a){if(!_0x43212a){_0x38df6c[_0x9643('0x14')](0x194);}return _0x43212a;};}function handleError(_0x12d15f,_0x383c64){_0x383c64=_0x383c64||0x1f4;return function(_0x4ed659){logger['error'](_0x4ed659[_0x9643('0x21')]);if(_0x4ed659['name']){delete _0x4ed659[_0x9643('0x22')];}_0x12d15f['status'](_0x383c64)[_0x9643('0x23')](_0x4ed659);};}exports[_0x9643('0x24')]=function(_0x20d95d,_0x32b6cd){var _0x5b9104={},_0x1d5a77={},_0x16a05a={'count':0x0,'rows':[]};var _0x2e650f=db['IntegrationReport'][_0x9643('0x25')];_0x1d5a77['model']=_['keys'](_0x2e650f);var _0x486670={'dateStart':_0x20d95d[_0x9643('0x26')][_0x9643('0x27')],'dateEnd':_0x20d95d[_0x9643('0x26')][_0x9643('0x28')]};delete _0x20d95d[_0x9643('0x26')][_0x9643('0x27')];delete _0x20d95d[_0x9643('0x26')][_0x9643('0x28')];_0x1d5a77[_0x9643('0x26')]=_[_0x9643('0x29')](_0x20d95d['query']);_0x1d5a77[_0x9643('0x2a')]=_[_0x9643('0x2b')](_0x1d5a77[_0x9643('0x2c')],_0x1d5a77[_0x9643('0x26')]);_0x5b9104[_0x9643('0x2d')]=_[_0x9643('0x2b')](_0x1d5a77[_0x9643('0x2c')],qs[_0x9643('0x2e')](_0x20d95d[_0x9643('0x26')]['fields']));_0x5b9104[_0x9643('0x2d')]=_0x5b9104[_0x9643('0x2d')]['length']?_0x5b9104['attributes']:_0x1d5a77['model'];if(!_0x20d95d[_0x9643('0x26')]['hasOwnProperty'](_0x9643('0x2f'))){_0x5b9104[_0x9643('0x1a')]=qs[_0x9643('0x1a')](_0x20d95d[_0x9643('0x26')][_0x9643('0x1a')]);_0x5b9104[_0x9643('0x19')]=qs[_0x9643('0x19')](_0x20d95d[_0x9643('0x26')][_0x9643('0x19')]);}_0x5b9104['order']=qs['sort'](_0x20d95d[_0x9643('0x26')][_0x9643('0x30')]);_0x5b9104[_0x9643('0x31')]=qs['filters'](_[_0x9643('0x32')](_0x20d95d[_0x9643('0x26')],_0x1d5a77[_0x9643('0x2a')]));if(_0x486670[_0x9643('0x27')]){if(_0x486670[_0x9643('0x28')]){_0x486670[_0x9643('0x28')]=moment(_0x486670[_0x9643('0x28')])[_0x9643('0x33')](0x1,'day');}else{_0x486670['dateEnd']=moment(_0x486670[_0x9643('0x27')])[_0x9643('0x33')](0x1,_0x9643('0x34'));}_[_0x9643('0x35')](_0x5b9104[_0x9643('0x31')],{'createdAt':{'$gte':_0x486670[_0x9643('0x27')],'$lte':_0x486670[_0x9643('0x28')]}});}if(_0x20d95d['query'][_0x9643('0x36')]){_0x5b9104[_0x9643('0x31')]=_['merge'](_0x5b9104[_0x9643('0x31')],{'$or':_[_0x9643('0x37')](_0x5b9104['attributes'],function(_0x329cb5){var _0x4ad22b={};_0x4ad22b[_0x329cb5]={'$like':'%'+_0x20d95d[_0x9643('0x26')]['filter']+'%'};return _0x4ad22b;})});}_0x5b9104=_[_0x9643('0x35')]({},_0x5b9104,_0x20d95d['options']);var _0x4a125f={'where':_0x5b9104[_0x9643('0x31')]};return db[_0x9643('0x38')][_0x9643('0x18')](_0x4a125f)[_0x9643('0x1f')](function(_0x2dfd28){_0x16a05a[_0x9643('0x18')]=_0x2dfd28;if(_0x20d95d[_0x9643('0x26')][_0x9643('0x39')]){_0x5b9104[_0x9643('0x3a')]=[{'all':!![]}];}return db[_0x9643('0x38')]['findAll'](_0x5b9104);})[_0x9643('0x1f')](function(_0x192b17){_0x16a05a[_0x9643('0x3b')]=_0x192b17;return _0x16a05a;})[_0x9643('0x1f')](respondWithFilteredResult(_0x32b6cd,_0x5b9104))[_0x9643('0x3c')](handleError(_0x32b6cd,null));};exports['show']=function(_0x486da0,_0x11ee12){var _0xf45156={'raw':![],'where':{'id':_0x486da0[_0x9643('0x3d')]['id']}},_0x16db8b={};_0x16db8b[_0x9643('0x2c')]=_[_0x9643('0x29')](db['IntegrationReport'][_0x9643('0x25')]);_0x16db8b['query']=_[_0x9643('0x29')](_0x486da0[_0x9643('0x26')]);_0x16db8b[_0x9643('0x2a')]=_['intersection'](_0x16db8b['model'],_0x16db8b['query']);_0xf45156['attributes']=_['intersection'](_0x16db8b[_0x9643('0x2c')],qs[_0x9643('0x2e')](_0x486da0['query'][_0x9643('0x2e')]));_0xf45156[_0x9643('0x2d')]=_0xf45156[_0x9643('0x2d')]['length']?_0xf45156[_0x9643('0x2d')]:_0x16db8b[_0x9643('0x2c')];if(_0x486da0[_0x9643('0x26')]['includeAll']){_0xf45156['include']=[{'all':!![]}];}_0xf45156=_['merge']({},_0xf45156,_0x486da0[_0x9643('0x3e')]);return db['IntegrationReport']['find'](_0xf45156)[_0x9643('0x1f')](handleEntityNotFound(_0x11ee12,null))['then'](respondWithResult(_0x11ee12,null))[_0x9643('0x3c')](handleError(_0x11ee12,null));};exports['create']=function(_0x589cc3,_0x1038c){return db['IntegrationReport'][_0x9643('0x3f')](_0x589cc3[_0x9643('0x40')],{})[_0x9643('0x1f')](respondWithResult(_0x1038c,0xc9))['catch'](handleError(_0x1038c,null));};exports[_0x9643('0x1e')]=function(_0x18114e,_0x44653a){if(_0x18114e[_0x9643('0x40')]['id']){delete _0x18114e[_0x9643('0x40')]['id'];}return db[_0x9643('0x38')][_0x9643('0x41')]({'where':{'id':_0x18114e[_0x9643('0x3d')]['id']}})[_0x9643('0x1f')](handleEntityNotFound(_0x44653a,null))[_0x9643('0x1f')](saveUpdates(_0x18114e[_0x9643('0x40')],null))['then'](respondWithResult(_0x44653a,null))['catch'](handleError(_0x44653a,null));};exports[_0x9643('0x20')]=function(_0x35ea2a,_0x1bc92c){return db[_0x9643('0x38')]['find']({'where':{'id':_0x35ea2a[_0x9643('0x3d')]['id']}})['then'](handleEntityNotFound(_0x1bc92c,null))[_0x9643('0x1f')](removeEntity(_0x1bc92c,null))['catch'](handleError(_0x1bc92c,null));};exports[_0x9643('0x42')]=function(_0x5481c4,_0x46cdaa){return db[_0x9643('0x38')][_0x9643('0x42')]()[_0x9643('0x1f')](respondWithResult(_0x46cdaa,null))[_0x9643('0x3c')](handleError(_0x46cdaa,null));};
\ No newline at end of file
index bd8a544..9311e56 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa630=['IntegrationReport','lodash','util','moment','request-promise','exports','define'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0xa630,0xbe));var _0x0a63=function(_0x2fe60b,_0x37d658){_0x2fe60b=_0x2fe60b-0x0;var _0x2e76cb=_0xa630[_0x2fe60b];return _0x2e76cb;};'use strict';var _=require(_0x0a63('0x0'));var util=require(_0x0a63('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x0a63('0x2'));var BPromise=require('bluebird');var rp=require(_0x0a63('0x3'));var attributes=require('./integrationReport.attributes');module[_0x0a63('0x4')]=function(_0x3bcb90,_0x2cfdeb){return _0x3bcb90[_0x0a63('0x5')](_0x0a63('0x6'),attributes,{'tableName':'report_integration','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x687b=['lodash','util','../../config/logger','api','request-promise','./integrationReport.attributes','exports','define','IntegrationReport','report_integration'];(function(_0x4c9380,_0x2fefc0){var _0x49a523=function(_0x165e85){while(--_0x165e85){_0x4c9380['push'](_0x4c9380['shift']());}};_0x49a523(++_0x2fefc0);}(_0x687b,0x14a));var _0xb687=function(_0x1ebe2f,_0x523227){_0x1ebe2f=_0x1ebe2f-0x0;var _0xdeb06f=_0x687b[_0x1ebe2f];return _0xdeb06f;};'use strict';var _=require(_0xb687('0x0'));var util=require(_0xb687('0x1'));var logger=require(_0xb687('0x2'))(_0xb687('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xb687('0x4'));var attributes=require(_0xb687('0x5'));module[_0xb687('0x6')]=function(_0x31bd0d,_0x46e5b3){return _0x31bd0d[_0xb687('0x7')](_0xb687('0x8'),attributes,{'tableName':_0xb687('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4f99298..73486d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6a72=['rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','stringify','error','IntegrationReport,\x20%s,\x20%s','message','result','catch','lodash','util','moment','randomstring','../../config/utils','../../config/logger'];(function(_0x2bf141,_0x31eac7){var _0x48277b=function(_0x9fe560){while(--_0x9fe560){_0x2bf141['push'](_0x2bf141['shift']());}};_0x48277b(++_0x31eac7);}(_0x6a72,0x118));var _0x26a7=function(_0x822a3f,_0x32fd83){_0x822a3f=_0x822a3f-0x0;var _0x1053e7=_0x6a72[_0x822a3f];return _0x1053e7;};'use strict';var _=require(_0x26a7('0x0'));var util=require(_0x26a7('0x1'));var moment=require(_0x26a7('0x2'));var BPromise=require('bluebird');var rs=require(_0x26a7('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x26a7('0x4'));var logger=require(_0x26a7('0x5'))(_0x26a7('0x6'));var config=require(_0x26a7('0x7'));var jayson=require(_0x26a7('0x8'));var client=jayson[_0x26a7('0x9')][_0x26a7('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x27c9b0,_0x4ae95c,_0x20e058){return new BPromise(function(_0x46dbc0,_0x5115c5){return client[_0x26a7('0xb')](_0x27c9b0,_0x20e058)[_0x26a7('0xc')](function(_0xfa1993){logger[_0x26a7('0xd')]('IntegrationReport,\x20%s,\x20%s',_0x4ae95c,_0x26a7('0xe'));logger[_0x26a7('0xf')]('IntegrationReport,\x20%s,\x20%s,\x20%s',_0x4ae95c,'request\x20sent',JSON[_0x26a7('0x10')](_0xfa1993));if(_0xfa1993[_0x26a7('0x11')]){if(_0xfa1993[_0x26a7('0x11')]['code']===0x1f4){logger[_0x26a7('0x11')](_0x26a7('0x12'),_0x4ae95c,_0xfa1993[_0x26a7('0x11')][_0x26a7('0x13')]);return _0x5115c5(_0xfa1993[_0x26a7('0x11')]['message']);}logger[_0x26a7('0x11')]('IntegrationReport,\x20%s,\x20%s',_0x4ae95c,_0xfa1993[_0x26a7('0x11')][_0x26a7('0x13')]);return _0x46dbc0(_0xfa1993[_0x26a7('0x11')][_0x26a7('0x13')]);}else{logger[_0x26a7('0xd')](_0x26a7('0x12'),_0x4ae95c,_0x26a7('0xe'));_0x46dbc0(_0xfa1993[_0x26a7('0x14')][_0x26a7('0x13')]);}})[_0x26a7('0x15')](function(_0xef2d7){logger[_0x26a7('0x11')](_0x26a7('0x12'),_0x4ae95c,_0xef2d7);_0x5115c5(_0xef2d7);});});}
\ No newline at end of file
+var _0xf3f8=['bluebird','../../mysqldb','../../config/utils','../../config/environment','client','http','IntegrationReport,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','util'];(function(_0x5651f2,_0x3946ca){var _0x366976=function(_0x5b71f7){while(--_0x5b71f7){_0x5651f2['push'](_0x5651f2['shift']());}};_0x366976(++_0x3946ca);}(_0xf3f8,0x15f));var _0x8f3f=function(_0x3ad50f,_0x1f84a8){_0x3ad50f=_0x3ad50f-0x0;var _0x9fa37d=_0xf3f8[_0x3ad50f];return _0x9fa37d;};'use strict';var _=require('lodash');var util=require(_0x8f3f('0x0'));var moment=require('moment');var BPromise=require(_0x8f3f('0x1'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x8f3f('0x2'))['db'];var utils=require(_0x8f3f('0x3'));var logger=require('../../config/logger')('rpc');var config=require(_0x8f3f('0x4'));var jayson=require('jayson/promise');var client=jayson[_0x8f3f('0x5')][_0x8f3f('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x35e161,_0x4b158e,_0x515b48){return new BPromise(function(_0x2686b7,_0x363f0f){return client['request'](_0x35e161,_0x515b48)['then'](function(_0x302ea4){logger['info'](_0x8f3f('0x7'),_0x4b158e,'request\x20sent');logger['debug']('IntegrationReport,\x20%s,\x20%s,\x20%s',_0x4b158e,_0x8f3f('0x8'),JSON[_0x8f3f('0x9')](_0x302ea4));if(_0x302ea4[_0x8f3f('0xa')]){if(_0x302ea4[_0x8f3f('0xa')][_0x8f3f('0xb')]===0x1f4){logger[_0x8f3f('0xa')](_0x8f3f('0x7'),_0x4b158e,_0x302ea4[_0x8f3f('0xa')]['message']);return _0x363f0f(_0x302ea4[_0x8f3f('0xa')][_0x8f3f('0xc')]);}logger[_0x8f3f('0xa')](_0x8f3f('0x7'),_0x4b158e,_0x302ea4['error'][_0x8f3f('0xc')]);return _0x2686b7(_0x302ea4[_0x8f3f('0xa')][_0x8f3f('0xc')]);}else{logger[_0x8f3f('0xd')](_0x8f3f('0x7'),_0x4b158e,_0x8f3f('0x8'));_0x2686b7(_0x302ea4[_0x8f3f('0xe')][_0x8f3f('0xc')]);}})[_0x8f3f('0xf')](function(_0xd98ff4){logger['error'](_0x8f3f('0x7'),_0x4b158e,_0xd98ff4);_0x363f0f(_0xd98ff4);});});}
\ No newline at end of file
index cd5e076..0a50f3e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x537a=['express','Router','../../components/interaction/service','../../config/environment','./interval.controller','isAuthenticated','get','/:id','/:id/sub_intervals','post','create','addInterval','addIntervals','put','delete','exports','path'];(function(_0x3fe6e,_0x3ab61b){var _0x2ff53b=function(_0x21fcd4){while(--_0x21fcd4){_0x3fe6e['push'](_0x3fe6e['shift']());}};_0x2ff53b(++_0x3ab61b);}(_0x537a,0x197));var _0xa537=function(_0x580eaa,_0x5d3428){_0x580eaa=_0x580eaa-0x0;var _0x593a5d=_0x537a[_0x580eaa];return _0x593a5d;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xa537('0x0'));var express=require(_0xa537('0x1'));var router=express[_0xa537('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0xa537('0x3'));var config=require(_0xa537('0x4'));var controller=require(_0xa537('0x5'));router['get']('/',auth[_0xa537('0x6')](),controller['index']);router[_0xa537('0x7')](_0xa537('0x8'),auth[_0xa537('0x6')](),controller['show']);router[_0xa537('0x7')](_0xa537('0x9'),auth[_0xa537('0x6')](),controller['getIntervals']);router[_0xa537('0xa')]('/',auth[_0xa537('0x6')](),controller[_0xa537('0xb')]);router[_0xa537('0xa')](_0xa537('0x9'),auth[_0xa537('0x6')](),controller[_0xa537('0xc')]);router['post']('/:id/sub_intervals/create_many',auth[_0xa537('0x6')](),controller[_0xa537('0xd')]);router[_0xa537('0xe')](_0xa537('0x8'),auth[_0xa537('0x6')](),controller['update']);router[_0xa537('0xf')](_0xa537('0x8'),auth[_0xa537('0x6')](),controller['destroy']);module[_0xa537('0x10')]=router;
\ No newline at end of file
+var _0x1c92=['multer','path','Router','../../components/auth/service','./interval.controller','get','index','isAuthenticated','show','/:id/sub_intervals','post','create','addInterval','/:id/sub_intervals/create_many','addIntervals','put','/:id','update','delete','exports'];(function(_0x30a2b6,_0x1be2a8){var _0x12dbbd=function(_0x4afca4){while(--_0x4afca4){_0x30a2b6['push'](_0x30a2b6['shift']());}};_0x12dbbd(++_0x1be2a8);}(_0x1c92,0x104));var _0x21c9=function(_0xb7b878,_0x5c3b92){_0xb7b878=_0xb7b878-0x0;var _0x3c84b9=_0x1c92[_0xb7b878];return _0x3c84b9;};'use strict';var multer=require(_0x21c9('0x0'));var util=require('util');var path=require(_0x21c9('0x1'));var express=require('express');var router=express[_0x21c9('0x2')]();var auth=require(_0x21c9('0x3'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x21c9('0x4'));router[_0x21c9('0x5')]('/',auth['isAuthenticated'](),controller[_0x21c9('0x6')]);router[_0x21c9('0x5')]('/:id',auth[_0x21c9('0x7')](),controller[_0x21c9('0x8')]);router[_0x21c9('0x5')](_0x21c9('0x9'),auth[_0x21c9('0x7')](),controller['getIntervals']);router[_0x21c9('0xa')]('/',auth[_0x21c9('0x7')](),controller[_0x21c9('0xb')]);router[_0x21c9('0xa')](_0x21c9('0x9'),auth[_0x21c9('0x7')](),controller[_0x21c9('0xc')]);router[_0x21c9('0xa')](_0x21c9('0xd'),auth[_0x21c9('0x7')](),controller[_0x21c9('0xe')]);router[_0x21c9('0xf')](_0x21c9('0x10'),auth[_0x21c9('0x7')](),controller[_0x21c9('0x11')]);router[_0x21c9('0x12')](_0x21c9('0x10'),auth['isAuthenticated'](),controller['destroy']);module[_0x21c9('0x13')]=router;
\ No newline at end of file
index 89e6d64..6e6a645 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x03ff=['STRING','sequelize','exports'];(function(_0x4d7018,_0x5d9ec6){var _0x325c1e=function(_0x179fd3){while(--_0x179fd3){_0x4d7018['push'](_0x4d7018['shift']());}};_0x325c1e(++_0x5d9ec6);}(_0x03ff,0x1a8));var _0xf03f=function(_0x4baae2,_0x487ab6){_0x4baae2=_0x4baae2-0x0;var _0x1a2285=_0x03ff[_0x4baae2];return _0x1a2285;};'use strict';var Sequelize=require(_0xf03f('0x0'));module[_0xf03f('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xf03f('0x2')]},'interval':{'type':Sequelize[_0xf03f('0x2')],'allowNull':!![]}};
\ No newline at end of file
+var _0x48b2=['sequelize','exports','STRING'];(function(_0x4e9256,_0x56ef49){var _0x4ba177=function(_0x5c9cf8){while(--_0x5c9cf8){_0x4e9256['push'](_0x4e9256['shift']());}};_0x4ba177(++_0x56ef49);}(_0x48b2,0x10e));var _0x248b=function(_0x4b804b,_0x2714c7){_0x4b804b=_0x4b804b-0x0;var _0x34973c=_0x48b2[_0x4b804b];return _0x34973c;};'use strict';var Sequelize=require(_0x248b('0x0'));module[_0x248b('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x248b('0x2')]},'interval':{'type':Sequelize['STRING'],'allowNull':!![]}};
\ No newline at end of file
index 588e7ad..1e5ca71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x727e=['desk.js','querystring','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','json','offset','limit','Content-Range','reject','save','update','then','destroy','end','sendStatus','error','stack','name','send','index','Interval','rawAttributes','keys','query','dateStart','filters','intersection','attributes','model','fields','length','hasOwnProperty','order','sort','where','pick','dateEnd','add','day','merge','filter','options','count','include','findAll','rows','catch','show','create','body','find','params','addInterval','getIntervals','findOne','map','nolimit','addIntervals','sequelize','transaction','fast-json-patch','request-promise','path','sox','to-csv','squel','crypto','jsforce'];(function(_0x28b1d2,_0x263f7e){var _0x40d2d0=function(_0x4d5aa7){while(--_0x4d5aa7){_0x28b1d2['push'](_0x28b1d2['shift']());}};_0x40d2d0(++_0x263f7e);}(_0x727e,0x88));var _0xe727=function(_0x2be8c2,_0x14a4b5){_0x2be8c2=_0x2be8c2-0x0;var _0x97f531=_0x727e[_0x2be8c2];return _0x97f531;};'use strict';var jsonpatch=require(_0xe727('0x0'));var rp=require(_0xe727('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0xe727('0x2'));var sox=require(_0xe727('0x3'));var csv=require(_0xe727('0x4'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xe727('0x5'));var crypto=require(_0xe727('0x6'));var jsforce=require(_0xe727('0x7'));var deskjs=require(_0xe727('0x8'));var toCsv=require(_0xe727('0x4'));var querystring=require(_0xe727('0x9'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0xe727('0xa'))(_0xe727('0xb'));var utils=require(_0xe727('0xc'));var config=require(_0xe727('0xd'));var db=require(_0xe727('0xe'))['db'];var extensions=require('../../components/extensions/rewrite');function respondWithStatusCode(_0xec62b5,_0x493acb){_0x493acb=_0x493acb||0xcc;return function(_0x2adaf3){if(_0x2adaf3){return _0xec62b5['sendStatus'](_0x493acb);}return _0xec62b5['status'](_0x493acb)['end']();};}function respondWithResult(_0x425442,_0x97a1eb){_0x97a1eb=_0x97a1eb||0xc8;return function(_0x123656){if(_0x123656){return _0x425442[_0xe727('0xf')](_0x97a1eb)[_0xe727('0x10')](_0x123656);}};}function respondWithFilteredResult(_0x4162a9,_0x2597f9){return function(_0x2fd7de){if(_0x2fd7de){var _0x588811=_0x2fd7de['count'],_0x23d317=_0x2597f9['offset'],_0x12a5e6=_0x2597f9[_0xe727('0x11')]+_0x2597f9[_0xe727('0x12')],_0x28fa79;if(_0x12a5e6>=_0x588811){_0x12a5e6=_0x588811;_0x28fa79=0xc8;}else{_0x28fa79=0xce;}_0x4162a9['status'](_0x28fa79);return _0x4162a9['set'](_0xe727('0x13'),_0x23d317+'-'+_0x12a5e6+'/'+_0x588811)[_0xe727('0x10')](_0x2fd7de);}return null;};}function patchUpdates(_0x44dfaa){return function(_0xe19b74){try{jsonpatch['apply'](_0xe19b74,_0x44dfaa,!![]);}catch(_0x33c933){return BPromise[_0xe727('0x14')](_0x33c933);}return _0xe19b74[_0xe727('0x15')]();};}function saveUpdates(_0x26d388,_0x1ed777){return function(_0x48b7cf){if(_0x48b7cf){return _0x48b7cf[_0xe727('0x16')](_0x26d388)[_0xe727('0x17')](function(_0x54f6bd){return _0x54f6bd;});}return null;};}function removeEntity(_0x50e723,_0x15f79e){return function(_0xce5ddb){if(_0xce5ddb){return _0xce5ddb[_0xe727('0x18')]()[_0xe727('0x17')](function(){_0x50e723['status'](0xcc)[_0xe727('0x19')]();});}};}function handleEntityNotFound(_0x324d62,_0x301f87){return function(_0x46df35){if(!_0x46df35){_0x324d62[_0xe727('0x1a')](0x194);}return _0x46df35;};}function handleError(_0x24e793,_0x5af278){_0x5af278=_0x5af278||0x1f4;return function(_0x5e2afe){logger[_0xe727('0x1b')](_0x5e2afe[_0xe727('0x1c')]);if(_0x5e2afe[_0xe727('0x1d')]){delete _0x5e2afe[_0xe727('0x1d')];}_0x24e793[_0xe727('0xf')](_0x5af278)[_0xe727('0x1e')](_0x5e2afe);};}exports[_0xe727('0x1f')]=function(_0x3560c7,_0x1ee37e){var _0x5e8859={},_0x40c5a0={},_0x5994bc={'count':0x0,'rows':[]};var _0x2af4fc=db[_0xe727('0x20')][_0xe727('0x21')];_0x40c5a0['model']=_[_0xe727('0x22')](_0x2af4fc);var _0x17ea94={'dateStart':_0x3560c7[_0xe727('0x23')][_0xe727('0x24')],'dateEnd':_0x3560c7[_0xe727('0x23')]['dateEnd']};delete _0x3560c7[_0xe727('0x23')][_0xe727('0x24')];delete _0x3560c7[_0xe727('0x23')]['dateEnd'];_0x40c5a0[_0xe727('0x23')]=_[_0xe727('0x22')](_0x3560c7[_0xe727('0x23')]);_0x40c5a0[_0xe727('0x25')]=_[_0xe727('0x26')](_0x40c5a0['model'],_0x40c5a0['query']);_0x5e8859[_0xe727('0x27')]=_[_0xe727('0x26')](_0x40c5a0[_0xe727('0x28')],qs[_0xe727('0x29')](_0x3560c7[_0xe727('0x23')][_0xe727('0x29')]));_0x5e8859[_0xe727('0x27')]=_0x5e8859[_0xe727('0x27')][_0xe727('0x2a')]?_0x5e8859[_0xe727('0x27')]:_0x40c5a0[_0xe727('0x28')];if(!_0x3560c7[_0xe727('0x23')][_0xe727('0x2b')]('nolimit')){_0x5e8859[_0xe727('0x12')]=qs['limit'](_0x3560c7[_0xe727('0x23')][_0xe727('0x12')]);_0x5e8859[_0xe727('0x11')]=qs[_0xe727('0x11')](_0x3560c7[_0xe727('0x23')][_0xe727('0x11')]);}_0x5e8859[_0xe727('0x2c')]=qs[_0xe727('0x2d')](_0x3560c7[_0xe727('0x23')][_0xe727('0x2d')]);_0x5e8859[_0xe727('0x2e')]=qs['filters'](_[_0xe727('0x2f')](_0x3560c7['query'],_0x40c5a0[_0xe727('0x25')]));if(_0x17ea94[_0xe727('0x24')]){if(_0x17ea94['dateEnd']){_0x17ea94[_0xe727('0x30')]=moment(_0x17ea94[_0xe727('0x30')])[_0xe727('0x31')](0x1,'day');}else{_0x17ea94['dateEnd']=moment(_0x17ea94[_0xe727('0x24')])[_0xe727('0x31')](0x1,_0xe727('0x32'));}_[_0xe727('0x33')](_0x5e8859[_0xe727('0x2e')],{'createdAt':{'$gte':_0x17ea94[_0xe727('0x24')],'$lte':_0x17ea94['dateEnd']}});}if(_0x3560c7[_0xe727('0x23')][_0xe727('0x34')]){_0x5e8859[_0xe727('0x2e')]=_[_0xe727('0x33')](_0x5e8859['where'],{'$or':_['map'](_0x5e8859['attributes'],function(_0x256fb7){var _0x140d1f={};_0x140d1f[_0x256fb7]={'$like':'%'+_0x3560c7[_0xe727('0x23')]['filter']+'%'};return _0x140d1f;})});}_0x5e8859=_[_0xe727('0x33')]({},_0x5e8859,_0x3560c7[_0xe727('0x35')]);var _0x130889={'where':_0x5e8859[_0xe727('0x2e')]};return db[_0xe727('0x20')][_0xe727('0x36')](_0x130889)['then'](function(_0xc3ee3b){_0x5994bc['count']=_0xc3ee3b;if(_0x3560c7['query']['includeAll']){_0x5e8859[_0xe727('0x37')]=[{'all':!![]}];}return db[_0xe727('0x20')][_0xe727('0x38')](_0x5e8859);})[_0xe727('0x17')](function(_0x49ebe2){_0x5994bc[_0xe727('0x39')]=_0x49ebe2;return _0x5994bc;})[_0xe727('0x17')](respondWithFilteredResult(_0x1ee37e,_0x5e8859))[_0xe727('0x3a')](handleError(_0x1ee37e,null));};exports[_0xe727('0x3b')]=function(_0x44fff6,_0x2a89c2){var _0x1e8cb2={'raw':!![],'where':{'id':_0x44fff6['params']['id']}},_0x38ac32={};_0x38ac32[_0xe727('0x28')]=_['keys'](db[_0xe727('0x20')][_0xe727('0x21')]);_0x38ac32[_0xe727('0x23')]=_[_0xe727('0x22')](_0x44fff6[_0xe727('0x23')]);_0x38ac32[_0xe727('0x25')]=_['intersection'](_0x38ac32[_0xe727('0x28')],_0x38ac32[_0xe727('0x23')]);_0x1e8cb2['attributes']=_['intersection'](_0x38ac32['model'],qs[_0xe727('0x29')](_0x44fff6[_0xe727('0x23')][_0xe727('0x29')]));_0x1e8cb2['attributes']=_0x1e8cb2[_0xe727('0x27')]['length']?_0x1e8cb2[_0xe727('0x27')]:_0x38ac32[_0xe727('0x28')];if(_0x44fff6[_0xe727('0x23')]['includeAll']){_0x1e8cb2[_0xe727('0x37')]=[{'all':!![]}];}_0x1e8cb2=_[_0xe727('0x33')]({},_0x1e8cb2,_0x44fff6['options']);return db[_0xe727('0x20')]['find'](_0x1e8cb2)[_0xe727('0x17')](handleEntityNotFound(_0x2a89c2,null))['then'](respondWithResult(_0x2a89c2,null))[_0xe727('0x3a')](handleError(_0x2a89c2,null));};exports[_0xe727('0x3c')]=function(_0x2af7e7,_0x155ee7){return db[_0xe727('0x20')][_0xe727('0x3c')](_0x2af7e7[_0xe727('0x3d')],{})[_0xe727('0x17')](respondWithResult(_0x155ee7,0xc9))[_0xe727('0x3a')](handleError(_0x155ee7,null));};exports['update']=function(_0x182948,_0x35bbc9){if(_0x182948[_0xe727('0x3d')]['id']){delete _0x182948[_0xe727('0x3d')]['id'];}return db[_0xe727('0x20')][_0xe727('0x3e')]({'where':{'id':_0x182948[_0xe727('0x3f')]['id']}})['then'](handleEntityNotFound(_0x35bbc9,null))[_0xe727('0x17')](saveUpdates(_0x182948['body'],null))[_0xe727('0x17')](respondWithResult(_0x35bbc9,null))[_0xe727('0x3a')](handleError(_0x35bbc9,null));};exports[_0xe727('0x18')]=function(_0x3c90e1,_0x415286){return db[_0xe727('0x20')][_0xe727('0x3e')]({'where':{'id':_0x3c90e1[_0xe727('0x3f')]['id']}})[_0xe727('0x17')](handleEntityNotFound(_0x415286,null))[_0xe727('0x17')](removeEntity(_0x415286,null))['catch'](handleError(_0x415286,null));};exports[_0xe727('0x40')]=function(_0x321fe5,_0x5a117b,_0x4240fb){if(_0x321fe5[_0xe727('0x3d')]['id']){delete _0x321fe5['body']['id'];}return db[_0xe727('0x20')][_0xe727('0x3e')]({'where':{'id':_0x321fe5[_0xe727('0x3f')]['id']}})[_0xe727('0x17')](handleEntityNotFound(_0x5a117b,null))['then'](function(_0x5a0550){if(_0x5a0550){_0x321fe5[_0xe727('0x3d')]['IntervalId']=_0x5a0550['id'];return db[_0xe727('0x20')][_0xe727('0x3c')](_0x321fe5['body']);}})[_0xe727('0x17')](respondWithResult(_0x5a117b,null))['catch'](handleError(_0x5a117b,null));};exports[_0xe727('0x41')]=function(_0x531520,_0x1e73e4,_0x21af1b){var _0x2aa5bd={};var _0x2b112a={};var _0xb1d481;var _0x2142e6;return db[_0xe727('0x20')][_0xe727('0x42')]({'where':{'id':_0x531520['params']['id']}})['then'](handleEntityNotFound(_0x1e73e4,null))[_0xe727('0x17')](function(_0x1a0ac8){if(_0x1a0ac8){_0xb1d481=_0x1a0ac8;_0x2b112a[_0xe727('0x28')]=_[_0xe727('0x22')](db['Interval'][_0xe727('0x21')]);_0x2b112a[_0xe727('0x23')]=_['keys'](_0x531520[_0xe727('0x23')]);_0x2b112a[_0xe727('0x25')]=_[_0xe727('0x26')](_0x2b112a[_0xe727('0x28')],_0x2b112a[_0xe727('0x23')]);_0x2aa5bd[_0xe727('0x27')]=_[_0xe727('0x26')](_0x2b112a[_0xe727('0x28')],qs[_0xe727('0x29')](_0x531520[_0xe727('0x23')][_0xe727('0x29')]));_0x2aa5bd[_0xe727('0x27')]=_0x2aa5bd[_0xe727('0x27')][_0xe727('0x2a')]?_0x2aa5bd[_0xe727('0x27')]:_0x2b112a[_0xe727('0x28')];_0x2aa5bd[_0xe727('0x2c')]=qs[_0xe727('0x2d')](_0x531520[_0xe727('0x23')]['sort']);_0x2aa5bd[_0xe727('0x2e')]=qs[_0xe727('0x25')](_[_0xe727('0x2f')](_0x531520[_0xe727('0x23')],_0x2b112a['filters']));if(_0x531520[_0xe727('0x23')][_0xe727('0x34')]){_0x2aa5bd[_0xe727('0x2e')]=_['merge'](_0x2aa5bd['where'],{'$or':_[_0xe727('0x43')](_0x2aa5bd[_0xe727('0x27')],function(_0x3a9b24){var _0xff31c2={};_0xff31c2[_0x3a9b24]={'$like':'%'+_0x531520['query'][_0xe727('0x34')]+'%'};return _0xff31c2;})});}_0x2aa5bd=_[_0xe727('0x33')]({},_0x2aa5bd,_0x531520['options']);return _0xb1d481[_0xe727('0x41')](_0x2aa5bd);}})[_0xe727('0x17')](function(_0x3ed997){if(_0x3ed997){_0x2142e6=_0x3ed997[_0xe727('0x2a')];if(!_0x531520[_0xe727('0x23')][_0xe727('0x2b')](_0xe727('0x44'))){_0x2aa5bd[_0xe727('0x12')]=qs[_0xe727('0x12')](_0x531520['query'][_0xe727('0x12')]);_0x2aa5bd[_0xe727('0x11')]=qs['offset'](_0x531520[_0xe727('0x23')][_0xe727('0x11')]);}return _0xb1d481[_0xe727('0x41')](_0x2aa5bd);}})[_0xe727('0x17')](function(_0x2147db){if(_0x2147db){return _0x2147db?{'count':_0x2142e6,'rows':_0x2147db}:null;}})[_0xe727('0x17')](respondWithResult(_0x1e73e4,null))[_0xe727('0x3a')](handleError(_0x1e73e4,null));};exports[_0xe727('0x45')]=function(_0x126854,_0x1b7c9b,_0x3c3e6b){return db[_0xe727('0x20')]['findOne']({'where':{'id':_0x126854['params']['id']}})[_0xe727('0x17')](handleEntityNotFound(_0x1b7c9b,null))[_0xe727('0x17')](function(_0x3478e3){if(_0x3478e3){return db[_0xe727('0x46')][_0xe727('0x47')](function(_0x4aadad){return db[_0xe727('0x20')][_0xe727('0x18')]({'where':{'IntervalId':_0x126854[_0xe727('0x3f')]['id']},'transaction':_0x4aadad})[_0xe727('0x17')](function(_0x2f5ee7){var _0x93c06c=_['map'](_0x126854[_0xe727('0x3d')],function(_0x20a408){delete _0x20a408['id'];_0x20a408['IntervalId']=_0x126854['params']['id'];return _0x20a408;});return db[_0xe727('0x20')]['bulkCreate'](_0x93c06c,{'transaction':_0x4aadad});});})[_0xe727('0x17')](function(){return db['Interval'][_0xe727('0x38')]({'where':{'IntervalId':_0x126854[_0xe727('0x3f')]['id']}});});}})[_0xe727('0x17')](respondWithResult(_0x1b7c9b,null))[_0xe727('0x3a')](handleError(_0x1b7c9b,null));};
\ No newline at end of file
+var _0x55c6=['api','../../config/utils','../../config/environment','../../mysqldb','../../components/extensions/rewrite','sendStatus','status','end','offset','limit','set','Content-Range','json','reject','save','then','error','name','send','rawAttributes','model','query','dateEnd','keys','filters','intersection','fields','attributes','length','order','sort','pick','dateStart','day','merge','where','map','filter','Interval','count','includeAll','findAll','params','catch','create','update','body','find','addInterval','IntervalId','getIntervals','findOne','nolimit','addIntervals','transaction','destroy','bulkCreate','fast-json-patch','moment','mustache','util','path','sox','lodash','squel','crypto','desk.js','querystring','papaparse'];(function(_0x380313,_0x37143e){var _0x23d8c0=function(_0x34b262){while(--_0x34b262){_0x380313['push'](_0x380313['shift']());}};_0x23d8c0(++_0x37143e);}(_0x55c6,0x7e));var _0x655c=function(_0x2027f0,_0x5a8afc){_0x2027f0=_0x2027f0-0x0;var _0x9f1bb4=_0x55c6[_0x2027f0];return _0x9f1bb4;};'use strict';var jsonpatch=require(_0x655c('0x0'));var rp=require('request-promise');var moment=require(_0x655c('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x655c('0x2'));var util=require(_0x655c('0x3'));var path=require(_0x655c('0x4'));var sox=require(_0x655c('0x5'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x655c('0x6'));var squel=require(_0x655c('0x7'));var crypto=require(_0x655c('0x8'));var jsforce=require('jsforce');var deskjs=require(_0x655c('0x9'));var toCsv=require('to-csv');var querystring=require(_0x655c('0xa'));var Papa=require(_0x655c('0xb'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x655c('0xc'));var utils=require(_0x655c('0xd'));var config=require(_0x655c('0xe'));var db=require(_0x655c('0xf'))['db'];var extensions=require(_0x655c('0x10'));function respondWithStatusCode(_0x1b6937,_0x38d162){_0x38d162=_0x38d162||0xcc;return function(_0x39ba31){if(_0x39ba31){return _0x1b6937[_0x655c('0x11')](_0x38d162);}return _0x1b6937[_0x655c('0x12')](_0x38d162)[_0x655c('0x13')]();};}function respondWithResult(_0x2e62e2,_0x338f5b){_0x338f5b=_0x338f5b||0xc8;return function(_0x21713b){if(_0x21713b){return _0x2e62e2[_0x655c('0x12')](_0x338f5b)['json'](_0x21713b);}};}function respondWithFilteredResult(_0x2d46ae,_0x1b8286){return function(_0x2a7795){if(_0x2a7795){var _0xcfcaf9=_0x2a7795['count'],_0x533bec=_0x1b8286[_0x655c('0x14')],_0x383d06=_0x1b8286[_0x655c('0x14')]+_0x1b8286[_0x655c('0x15')],_0x378a75;if(_0x383d06>=_0xcfcaf9){_0x383d06=_0xcfcaf9;_0x378a75=0xc8;}else{_0x378a75=0xce;}_0x2d46ae['status'](_0x378a75);return _0x2d46ae[_0x655c('0x16')](_0x655c('0x17'),_0x533bec+'-'+_0x383d06+'/'+_0xcfcaf9)[_0x655c('0x18')](_0x2a7795);}return null;};}function patchUpdates(_0x45b653){return function(_0x4768ac){try{jsonpatch['apply'](_0x4768ac,_0x45b653,!![]);}catch(_0x388cd7){return BPromise[_0x655c('0x19')](_0x388cd7);}return _0x4768ac[_0x655c('0x1a')]();};}function saveUpdates(_0x213ec2,_0x4abe39){return function(_0x408397){if(_0x408397){return _0x408397['update'](_0x213ec2)[_0x655c('0x1b')](function(_0x56113f){return _0x56113f;});}return null;};}function removeEntity(_0x39ff5a,_0x1568cc){return function(_0x21773b){if(_0x21773b){return _0x21773b['destroy']()[_0x655c('0x1b')](function(){_0x39ff5a['status'](0xcc)[_0x655c('0x13')]();});}};}function handleEntityNotFound(_0x39a055,_0x34847c){return function(_0xe7063e){if(!_0xe7063e){_0x39a055[_0x655c('0x11')](0x194);}return _0xe7063e;};}function handleError(_0x582490,_0x6d768f){_0x6d768f=_0x6d768f||0x1f4;return function(_0x369674){logger[_0x655c('0x1c')](_0x369674['stack']);if(_0x369674[_0x655c('0x1d')]){delete _0x369674[_0x655c('0x1d')];}_0x582490[_0x655c('0x12')](_0x6d768f)[_0x655c('0x1e')](_0x369674);};}exports['index']=function(_0x1cde7a,_0x58f9a8){var _0x3ceddc={},_0xba8e53={},_0x5b54d2={'count':0x0,'rows':[]};var _0x563beb=db['Interval'][_0x655c('0x1f')];_0xba8e53[_0x655c('0x20')]=_['keys'](_0x563beb);var _0x20b6d8={'dateStart':_0x1cde7a[_0x655c('0x21')]['dateStart'],'dateEnd':_0x1cde7a[_0x655c('0x21')][_0x655c('0x22')]};delete _0x1cde7a[_0x655c('0x21')]['dateStart'];delete _0x1cde7a[_0x655c('0x21')][_0x655c('0x22')];_0xba8e53['query']=_[_0x655c('0x23')](_0x1cde7a[_0x655c('0x21')]);_0xba8e53[_0x655c('0x24')]=_[_0x655c('0x25')](_0xba8e53[_0x655c('0x20')],_0xba8e53[_0x655c('0x21')]);_0x3ceddc['attributes']=_[_0x655c('0x25')](_0xba8e53['model'],qs[_0x655c('0x26')](_0x1cde7a[_0x655c('0x21')][_0x655c('0x26')]));_0x3ceddc[_0x655c('0x27')]=_0x3ceddc[_0x655c('0x27')][_0x655c('0x28')]?_0x3ceddc[_0x655c('0x27')]:_0xba8e53['model'];if(!_0x1cde7a[_0x655c('0x21')]['hasOwnProperty']('nolimit')){_0x3ceddc[_0x655c('0x15')]=qs[_0x655c('0x15')](_0x1cde7a['query'][_0x655c('0x15')]);_0x3ceddc[_0x655c('0x14')]=qs[_0x655c('0x14')](_0x1cde7a['query']['offset']);}_0x3ceddc[_0x655c('0x29')]=qs[_0x655c('0x2a')](_0x1cde7a[_0x655c('0x21')][_0x655c('0x2a')]);_0x3ceddc['where']=qs[_0x655c('0x24')](_[_0x655c('0x2b')](_0x1cde7a[_0x655c('0x21')],_0xba8e53[_0x655c('0x24')]));if(_0x20b6d8['dateStart']){if(_0x20b6d8[_0x655c('0x22')]){_0x20b6d8[_0x655c('0x22')]=moment(_0x20b6d8[_0x655c('0x22')])['add'](0x1,'day');}else{_0x20b6d8[_0x655c('0x22')]=moment(_0x20b6d8[_0x655c('0x2c')])['add'](0x1,_0x655c('0x2d'));}_['merge'](_0x3ceddc['where'],{'createdAt':{'$gte':_0x20b6d8[_0x655c('0x2c')],'$lte':_0x20b6d8['dateEnd']}});}if(_0x1cde7a[_0x655c('0x21')]['filter']){_0x3ceddc['where']=_[_0x655c('0x2e')](_0x3ceddc[_0x655c('0x2f')],{'$or':_[_0x655c('0x30')](_0x3ceddc[_0x655c('0x27')],function(_0x17ab01){var _0x41d4e0={};_0x41d4e0[_0x17ab01]={'$like':'%'+_0x1cde7a[_0x655c('0x21')][_0x655c('0x31')]+'%'};return _0x41d4e0;})});}_0x3ceddc=_[_0x655c('0x2e')]({},_0x3ceddc,_0x1cde7a['options']);var _0x59af87={'where':_0x3ceddc['where']};return db[_0x655c('0x32')][_0x655c('0x33')](_0x59af87)[_0x655c('0x1b')](function(_0x5a1fd2){_0x5b54d2[_0x655c('0x33')]=_0x5a1fd2;if(_0x1cde7a[_0x655c('0x21')][_0x655c('0x34')]){_0x3ceddc['include']=[{'all':!![]}];}return db['Interval'][_0x655c('0x35')](_0x3ceddc);})['then'](function(_0x3d061a){_0x5b54d2['rows']=_0x3d061a;return _0x5b54d2;})[_0x655c('0x1b')](respondWithFilteredResult(_0x58f9a8,_0x3ceddc))['catch'](handleError(_0x58f9a8,null));};exports['show']=function(_0x4be077,_0x69c8c){var _0x3a7269={'raw':!![],'where':{'id':_0x4be077[_0x655c('0x36')]['id']}},_0x162c41={};_0x162c41[_0x655c('0x20')]=_[_0x655c('0x23')](db['Interval']['rawAttributes']);_0x162c41['query']=_[_0x655c('0x23')](_0x4be077['query']);_0x162c41[_0x655c('0x24')]=_['intersection'](_0x162c41[_0x655c('0x20')],_0x162c41[_0x655c('0x21')]);_0x3a7269[_0x655c('0x27')]=_[_0x655c('0x25')](_0x162c41[_0x655c('0x20')],qs[_0x655c('0x26')](_0x4be077[_0x655c('0x21')][_0x655c('0x26')]));_0x3a7269[_0x655c('0x27')]=_0x3a7269[_0x655c('0x27')][_0x655c('0x28')]?_0x3a7269[_0x655c('0x27')]:_0x162c41[_0x655c('0x20')];if(_0x4be077[_0x655c('0x21')][_0x655c('0x34')]){_0x3a7269['include']=[{'all':!![]}];}_0x3a7269=_[_0x655c('0x2e')]({},_0x3a7269,_0x4be077['options']);return db[_0x655c('0x32')]['find'](_0x3a7269)['then'](handleEntityNotFound(_0x69c8c,null))[_0x655c('0x1b')](respondWithResult(_0x69c8c,null))[_0x655c('0x37')](handleError(_0x69c8c,null));};exports[_0x655c('0x38')]=function(_0x3addac,_0x15b7e7){return db['Interval'][_0x655c('0x38')](_0x3addac['body'],{})[_0x655c('0x1b')](respondWithResult(_0x15b7e7,0xc9))[_0x655c('0x37')](handleError(_0x15b7e7,null));};exports[_0x655c('0x39')]=function(_0x5204be,_0x2cf838){if(_0x5204be[_0x655c('0x3a')]['id']){delete _0x5204be[_0x655c('0x3a')]['id'];}return db[_0x655c('0x32')][_0x655c('0x3b')]({'where':{'id':_0x5204be[_0x655c('0x36')]['id']}})[_0x655c('0x1b')](handleEntityNotFound(_0x2cf838,null))['then'](saveUpdates(_0x5204be[_0x655c('0x3a')],null))[_0x655c('0x1b')](respondWithResult(_0x2cf838,null))[_0x655c('0x37')](handleError(_0x2cf838,null));};exports['destroy']=function(_0x3d1149,_0x322081){return db[_0x655c('0x32')][_0x655c('0x3b')]({'where':{'id':_0x3d1149[_0x655c('0x36')]['id']}})[_0x655c('0x1b')](handleEntityNotFound(_0x322081,null))[_0x655c('0x1b')](removeEntity(_0x322081,null))[_0x655c('0x37')](handleError(_0x322081,null));};exports[_0x655c('0x3c')]=function(_0x3c293a,_0x5d63ee,_0x12e0c2){if(_0x3c293a[_0x655c('0x3a')]['id']){delete _0x3c293a['body']['id'];}return db[_0x655c('0x32')][_0x655c('0x3b')]({'where':{'id':_0x3c293a[_0x655c('0x36')]['id']}})['then'](handleEntityNotFound(_0x5d63ee,null))[_0x655c('0x1b')](function(_0x10f158){if(_0x10f158){_0x3c293a['body'][_0x655c('0x3d')]=_0x10f158['id'];return db['Interval']['create'](_0x3c293a['body']);}})[_0x655c('0x1b')](respondWithResult(_0x5d63ee,null))[_0x655c('0x37')](handleError(_0x5d63ee,null));};exports[_0x655c('0x3e')]=function(_0x3fb4d2,_0x515815,_0x334abd){var _0x29188b={};var _0x53bf1e={};var _0x8ab2a6;var _0x216b98;return db['Interval'][_0x655c('0x3f')]({'where':{'id':_0x3fb4d2[_0x655c('0x36')]['id']}})[_0x655c('0x1b')](handleEntityNotFound(_0x515815,null))[_0x655c('0x1b')](function(_0x1e8770){if(_0x1e8770){_0x8ab2a6=_0x1e8770;_0x53bf1e[_0x655c('0x20')]=_[_0x655c('0x23')](db['Interval']['rawAttributes']);_0x53bf1e[_0x655c('0x21')]=_['keys'](_0x3fb4d2[_0x655c('0x21')]);_0x53bf1e[_0x655c('0x24')]=_[_0x655c('0x25')](_0x53bf1e[_0x655c('0x20')],_0x53bf1e['query']);_0x29188b['attributes']=_[_0x655c('0x25')](_0x53bf1e[_0x655c('0x20')],qs[_0x655c('0x26')](_0x3fb4d2[_0x655c('0x21')][_0x655c('0x26')]));_0x29188b[_0x655c('0x27')]=_0x29188b[_0x655c('0x27')][_0x655c('0x28')]?_0x29188b['attributes']:_0x53bf1e[_0x655c('0x20')];_0x29188b['order']=qs['sort'](_0x3fb4d2[_0x655c('0x21')][_0x655c('0x2a')]);_0x29188b['where']=qs[_0x655c('0x24')](_[_0x655c('0x2b')](_0x3fb4d2['query'],_0x53bf1e[_0x655c('0x24')]));if(_0x3fb4d2[_0x655c('0x21')][_0x655c('0x31')]){_0x29188b[_0x655c('0x2f')]=_[_0x655c('0x2e')](_0x29188b[_0x655c('0x2f')],{'$or':_['map'](_0x29188b[_0x655c('0x27')],function(_0x2a51c5){var _0x464d65={};_0x464d65[_0x2a51c5]={'$like':'%'+_0x3fb4d2[_0x655c('0x21')][_0x655c('0x31')]+'%'};return _0x464d65;})});}_0x29188b=_[_0x655c('0x2e')]({},_0x29188b,_0x3fb4d2['options']);return _0x8ab2a6[_0x655c('0x3e')](_0x29188b);}})[_0x655c('0x1b')](function(_0x11822f){if(_0x11822f){_0x216b98=_0x11822f[_0x655c('0x28')];if(!_0x3fb4d2[_0x655c('0x21')]['hasOwnProperty'](_0x655c('0x40'))){_0x29188b[_0x655c('0x15')]=qs[_0x655c('0x15')](_0x3fb4d2[_0x655c('0x21')][_0x655c('0x15')]);_0x29188b[_0x655c('0x14')]=qs['offset'](_0x3fb4d2[_0x655c('0x21')][_0x655c('0x14')]);}return _0x8ab2a6[_0x655c('0x3e')](_0x29188b);}})[_0x655c('0x1b')](function(_0x5ba301){if(_0x5ba301){return _0x5ba301?{'count':_0x216b98,'rows':_0x5ba301}:null;}})['then'](respondWithResult(_0x515815,null))['catch'](handleError(_0x515815,null));};exports[_0x655c('0x41')]=function(_0x4739d3,_0x198911,_0x492827){return db[_0x655c('0x32')][_0x655c('0x3f')]({'where':{'id':_0x4739d3[_0x655c('0x36')]['id']}})['then'](handleEntityNotFound(_0x198911,null))['then'](function(_0x1bf2bb){if(_0x1bf2bb){return db['sequelize'][_0x655c('0x42')](function(_0x41b7a0){return db['Interval'][_0x655c('0x43')]({'where':{'IntervalId':_0x4739d3['params']['id']},'transaction':_0x41b7a0})['then'](function(_0x3ece2f){var _0x587c93=_[_0x655c('0x30')](_0x4739d3['body'],function(_0x2baf99){delete _0x2baf99['id'];_0x2baf99[_0x655c('0x3d')]=_0x4739d3['params']['id'];return _0x2baf99;});return db['Interval'][_0x655c('0x44')](_0x587c93,{'transaction':_0x41b7a0});});})['then'](function(){return db[_0x655c('0x32')][_0x655c('0x35')]({'where':{'IntervalId':_0x4739d3['params']['id']}});});}})[_0x655c('0x1b')](respondWithResult(_0x198911,null))['catch'](handleError(_0x198911,null));};
\ No newline at end of file
index 9d6dfbc..93ab807 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1382=['rewrite','lodash','util','../../config/logger','api','request-promise','./interval.attributes','define','Interval'];(function(_0x133f76,_0x3deb7e){var _0x283e86=function(_0x3cce5f){while(--_0x3cce5f){_0x133f76['push'](_0x133f76['shift']());}};_0x283e86(++_0x3deb7e);}(_0x1382,0x196));var _0x2138=function(_0x56dc7c,_0x4727f1){_0x56dc7c=_0x56dc7c-0x0;var _0x377a20=_0x1382[_0x56dc7c];return _0x377a20;};'use strict';var _=require(_0x2138('0x0'));var util=require(_0x2138('0x1'));var logger=require(_0x2138('0x2'))(_0x2138('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x2138('0x4'));var attributes=require(_0x2138('0x5'));var extensions=require('../../components/extensions/rewrite');module['exports']=function(_0x45c2a7,_0xf615b3){return _0x45c2a7[_0x2138('0x6')](_0x2138('0x7'),attributes,{'tableName':'tools_intervals','paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x296b92,_0x4cc75a){extensions[_0x2138('0x8')](_0x45c2a7,_0x296b92);},'afterBulkCreate':function(_0x572748,_0x2259e3,_0x148137){_0x148137();extensions[_0x2138('0x8')](_0x45c2a7,_0x572748[0x0]);},'afterUpdate':function(_0x5b033f,_0x4216ef){extensions[_0x2138('0x8')](_0x45c2a7,_0x5b033f);},'afterDestroy':function(_0x326624,_0xe005e6){extensions[_0x2138('0x8')](_0x45c2a7,_0x326624);}}});};
\ No newline at end of file
+var _0x3018=['bluebird','request-promise','./interval.attributes','exports','define','Interval','tools_intervals','rewrite','lodash','../../config/logger','moment'];(function(_0xfc28f3,_0x3fe499){var _0xa8e807=function(_0x160f74){while(--_0x160f74){_0xfc28f3['push'](_0xfc28f3['shift']());}};_0xa8e807(++_0x3fe499);}(_0x3018,0x105));var _0x8301=function(_0xaa0309,_0x1c8008){_0xaa0309=_0xaa0309-0x0;var _0x5de7ce=_0x3018[_0xaa0309];return _0x5de7ce;};'use strict';var _=require(_0x8301('0x0'));var util=require('util');var logger=require(_0x8301('0x1'))('api');var moment=require(_0x8301('0x2'));var BPromise=require(_0x8301('0x3'));var rp=require(_0x8301('0x4'));var attributes=require(_0x8301('0x5'));var extensions=require('../../components/extensions/rewrite');module[_0x8301('0x6')]=function(_0xdebbf5,_0x484bea){return _0xdebbf5[_0x8301('0x7')](_0x8301('0x8'),attributes,{'tableName':_0x8301('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x5505d8,_0x1fce5f){extensions[_0x8301('0xa')](_0xdebbf5,_0x5505d8);},'afterBulkCreate':function(_0x45f373,_0x3544f3,_0x6a42a0){_0x6a42a0();extensions[_0x8301('0xa')](_0xdebbf5,_0x45f373[0x0]);},'afterUpdate':function(_0x41e6be,_0x1cb286){extensions[_0x8301('0xa')](_0xdebbf5,_0x41e6be);},'afterDestroy':function(_0x52fca6,_0x521bd0){extensions[_0x8301('0xa')](_0xdebbf5,_0x52fca6);}}});};
\ No newline at end of file
index 82c0257..a9d7fe5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed46=['Interval','options','raw','attributes','limit','include','map','model','ShowInterval','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','info','Interval,\x20%s,\x20%s','debug','Interval,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','GetInterval'];(function(_0x4169d5,_0x5d417e){var _0xfdf74e=function(_0x3653a8){while(--_0x3653a8){_0x4169d5['push'](_0x4169d5['shift']());}};_0xfdf74e(++_0x5d417e);}(_0xed46,0x189));var _0x6ed4=function(_0x337216,_0x4184e2){_0x337216=_0x337216-0x0;var _0x113fdb=_0xed46[_0x337216];return _0x113fdb;};'use strict';var _=require(_0x6ed4('0x0'));var util=require(_0x6ed4('0x1'));var moment=require(_0x6ed4('0x2'));var BPromise=require(_0x6ed4('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x6ed4('0x4'))['db'];var utils=require(_0x6ed4('0x5'));var logger=require(_0x6ed4('0x6'))(_0x6ed4('0x7'));var config=require(_0x6ed4('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x6ed4('0x9')][_0x6ed4('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x352911,_0x1bf12e,_0xce9f50){return new BPromise(function(_0x1869f5,_0x3c2187){return client[_0x6ed4('0xb')](_0x352911,_0xce9f50)[_0x6ed4('0xc')](function(_0x593279){logger[_0x6ed4('0xd')](_0x6ed4('0xe'),_0x1bf12e,'request\x20sent');logger[_0x6ed4('0xf')](_0x6ed4('0x10'),_0x1bf12e,'request\x20sent',JSON[_0x6ed4('0x11')](_0x593279));if(_0x593279[_0x6ed4('0x12')]){if(_0x593279[_0x6ed4('0x12')]['code']===0x1f4){logger[_0x6ed4('0x12')]('Interval,\x20%s,\x20%s',_0x1bf12e,_0x593279[_0x6ed4('0x12')]['message']);return _0x3c2187(_0x593279[_0x6ed4('0x12')][_0x6ed4('0x13')]);}logger[_0x6ed4('0x12')]('Interval,\x20%s,\x20%s',_0x1bf12e,_0x593279[_0x6ed4('0x12')][_0x6ed4('0x13')]);return _0x1869f5(_0x593279[_0x6ed4('0x12')][_0x6ed4('0x13')]);}else{logger[_0x6ed4('0xd')](_0x6ed4('0xe'),_0x1bf12e,'request\x20sent');_0x1869f5(_0x593279[_0x6ed4('0x14')][_0x6ed4('0x13')]);}})[_0x6ed4('0x15')](function(_0x365012){logger[_0x6ed4('0x12')](_0x6ed4('0xe'),_0x1bf12e,_0x365012);_0x3c2187(_0x365012);});});}exports[_0x6ed4('0x16')]=function(_0x58d2a1){var _0x932c5f=this;return new Promise(function(_0x4ee36f,_0x35cead){return db[_0x6ed4('0x17')]['findAll']({'raw':_0x58d2a1['options']?_0x58d2a1[_0x6ed4('0x18')][_0x6ed4('0x19')]===undefined?!![]:![]:!![],'where':_0x58d2a1['options']?_0x58d2a1[_0x6ed4('0x18')]['where']||null:null,'attributes':_0x58d2a1[_0x6ed4('0x18')]?_0x58d2a1[_0x6ed4('0x18')][_0x6ed4('0x1a')]||null:null,'limit':_0x58d2a1[_0x6ed4('0x18')]?_0x58d2a1[_0x6ed4('0x18')][_0x6ed4('0x1b')]||null:null,'include':_0x58d2a1[_0x6ed4('0x18')]?_0x58d2a1[_0x6ed4('0x18')][_0x6ed4('0x1c')]?_[_0x6ed4('0x1d')](_0x58d2a1[_0x6ed4('0x18')][_0x6ed4('0x1c')],function(_0x7583c5){return{'model':db[_0x7583c5[_0x6ed4('0x1e')]],'as':_0x7583c5['as'],'attributes':_0x7583c5['attributes'],'include':_0x7583c5[_0x6ed4('0x1c')]?_['map'](_0x7583c5[_0x6ed4('0x1c')],function(_0x4716eb){return{'model':db[_0x4716eb['model']],'as':_0x4716eb['as'],'attributes':_0x4716eb[_0x6ed4('0x1a')],'include':_0x4716eb['include']?_[_0x6ed4('0x1d')](_0x4716eb['include'],function(_0x11cc6f){return{'model':db[_0x11cc6f['model']],'as':_0x11cc6f['as'],'attributes':_0x11cc6f['attributes']};}):[]};}):[]};}):[]:[]})[_0x6ed4('0xc')](function(_0x55ec89){logger['info']('GetInterval',_0x58d2a1);logger[_0x6ed4('0xf')]('GetInterval',_0x58d2a1,JSON['stringify'](_0x55ec89));_0x4ee36f(_0x55ec89);})[_0x6ed4('0x15')](function(_0x59ed06){logger[_0x6ed4('0x12')]('GetInterval',_0x59ed06[_0x6ed4('0x13')],_0x58d2a1);_0x35cead(_0x932c5f[_0x6ed4('0x12')](0x1f4,_0x59ed06['message']));});});};exports[_0x6ed4('0x1f')]=function(_0x3635a5){var _0x263706=this;return new Promise(function(_0x56992c,_0x3b9627){return db[_0x6ed4('0x17')]['find']({'raw':_0x3635a5['options']?_0x3635a5[_0x6ed4('0x18')][_0x6ed4('0x19')]===undefined?!![]:![]:!![],'where':_0x3635a5[_0x6ed4('0x18')]?_0x3635a5[_0x6ed4('0x18')]['where']||null:null,'attributes':_0x3635a5[_0x6ed4('0x18')]?_0x3635a5[_0x6ed4('0x18')][_0x6ed4('0x1a')]||null:null,'include':_0x3635a5[_0x6ed4('0x18')]?_0x3635a5['options'][_0x6ed4('0x1c')]?_[_0x6ed4('0x1d')](_0x3635a5[_0x6ed4('0x18')][_0x6ed4('0x1c')],function(_0x5be28e){return{'model':db[_0x5be28e['model']],'as':_0x5be28e['as'],'attributes':_0x5be28e[_0x6ed4('0x1a')],'include':_0x5be28e[_0x6ed4('0x1c')]?_[_0x6ed4('0x1d')](_0x5be28e[_0x6ed4('0x1c')],function(_0x1417a4){return{'model':db[_0x1417a4['model']],'as':_0x1417a4['as'],'attributes':_0x1417a4[_0x6ed4('0x1a')],'include':_0x1417a4[_0x6ed4('0x1c')]?_[_0x6ed4('0x1d')](_0x1417a4[_0x6ed4('0x1c')],function(_0xa5b3c2){return{'model':db[_0xa5b3c2[_0x6ed4('0x1e')]],'as':_0xa5b3c2['as'],'attributes':_0xa5b3c2['attributes']};}):[]};}):[]};}):[]:[]})[_0x6ed4('0xc')](function(_0x5daa31){logger[_0x6ed4('0xd')](_0x6ed4('0x1f'),_0x3635a5);logger[_0x6ed4('0xf')](_0x6ed4('0x1f'),_0x3635a5,JSON[_0x6ed4('0x11')](_0x5daa31));_0x56992c(_0x5daa31);})[_0x6ed4('0x15')](function(_0x2e8e8e){logger[_0x6ed4('0x12')](_0x6ed4('0x1f'),_0x2e8e8e[_0x6ed4('0x13')],_0x3635a5);_0x3b9627(_0x263706[_0x6ed4('0x12')](0x1f4,_0x2e8e8e['message']));});});};
\ No newline at end of file
+var _0x425e=['stringify','ShowInterval','find','where','then','catch','lodash','randomstring','../../mysqldb','rpc','../../config/environment','jayson/promise','client','http','request','info','Interval,\x20%s,\x20%s','request\x20sent','debug','Interval,\x20%s,\x20%s,\x20%s','error','message','result','Interval','findAll','options','raw','attributes','map','include','model','GetInterval'];(function(_0x4eb657,_0x2e9d9e){var _0x48cbbb=function(_0x3a4688){while(--_0x3a4688){_0x4eb657['push'](_0x4eb657['shift']());}};_0x48cbbb(++_0x2e9d9e);}(_0x425e,0x1e6));var _0xe425=function(_0x5e6a1b,_0x90f7fa){_0x5e6a1b=_0x5e6a1b-0x0;var _0x319b48=_0x425e[_0x5e6a1b];return _0x319b48;};'use strict';var _=require(_0xe425('0x0'));var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xe425('0x1'));var fs=require('fs');var db=require(_0xe425('0x2'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xe425('0x3'));var config=require(_0xe425('0x4'));var jayson=require(_0xe425('0x5'));var client=jayson[_0xe425('0x6')][_0xe425('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x409fc8,_0x3b47c7,_0x56466e){return new BPromise(function(_0x30dcb1,_0x23cec0){return client[_0xe425('0x8')](_0x409fc8,_0x56466e)['then'](function(_0x46bb0a){logger[_0xe425('0x9')](_0xe425('0xa'),_0x3b47c7,_0xe425('0xb'));logger[_0xe425('0xc')](_0xe425('0xd'),_0x3b47c7,_0xe425('0xb'),JSON['stringify'](_0x46bb0a));if(_0x46bb0a[_0xe425('0xe')]){if(_0x46bb0a[_0xe425('0xe')]['code']===0x1f4){logger['error']('Interval,\x20%s,\x20%s',_0x3b47c7,_0x46bb0a[_0xe425('0xe')][_0xe425('0xf')]);return _0x23cec0(_0x46bb0a[_0xe425('0xe')][_0xe425('0xf')]);}logger[_0xe425('0xe')](_0xe425('0xa'),_0x3b47c7,_0x46bb0a[_0xe425('0xe')]['message']);return _0x30dcb1(_0x46bb0a['error']['message']);}else{logger['info'](_0xe425('0xa'),_0x3b47c7,'request\x20sent');_0x30dcb1(_0x46bb0a[_0xe425('0x10')]['message']);}})['catch'](function(_0x42c356){logger[_0xe425('0xe')](_0xe425('0xa'),_0x3b47c7,_0x42c356);_0x23cec0(_0x42c356);});});}exports['GetInterval']=function(_0x4090bb){var _0x5743af=this;return new Promise(function(_0x536ca6,_0x1ca71e){return db[_0xe425('0x11')][_0xe425('0x12')]({'raw':_0x4090bb[_0xe425('0x13')]?_0x4090bb[_0xe425('0x13')][_0xe425('0x14')]===undefined?!![]:![]:!![],'where':_0x4090bb[_0xe425('0x13')]?_0x4090bb['options']['where']||null:null,'attributes':_0x4090bb[_0xe425('0x13')]?_0x4090bb[_0xe425('0x13')][_0xe425('0x15')]||null:null,'limit':_0x4090bb[_0xe425('0x13')]?_0x4090bb['options']['limit']||null:null,'include':_0x4090bb[_0xe425('0x13')]?_0x4090bb[_0xe425('0x13')]['include']?_[_0xe425('0x16')](_0x4090bb[_0xe425('0x13')][_0xe425('0x17')],function(_0x454c7b){return{'model':db[_0x454c7b[_0xe425('0x18')]],'as':_0x454c7b['as'],'attributes':_0x454c7b[_0xe425('0x15')],'include':_0x454c7b[_0xe425('0x17')]?_[_0xe425('0x16')](_0x454c7b[_0xe425('0x17')],function(_0x36df9d){return{'model':db[_0x36df9d[_0xe425('0x18')]],'as':_0x36df9d['as'],'attributes':_0x36df9d[_0xe425('0x15')],'include':_0x36df9d[_0xe425('0x17')]?_[_0xe425('0x16')](_0x36df9d[_0xe425('0x17')],function(_0x29b8ab){return{'model':db[_0x29b8ab[_0xe425('0x18')]],'as':_0x29b8ab['as'],'attributes':_0x29b8ab[_0xe425('0x15')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x2b0ad8){logger[_0xe425('0x9')](_0xe425('0x19'),_0x4090bb);logger['debug']('GetInterval',_0x4090bb,JSON[_0xe425('0x1a')](_0x2b0ad8));_0x536ca6(_0x2b0ad8);})['catch'](function(_0x5e450a){logger[_0xe425('0xe')](_0xe425('0x19'),_0x5e450a['message'],_0x4090bb);_0x1ca71e(_0x5743af[_0xe425('0xe')](0x1f4,_0x5e450a['message']));});});};exports[_0xe425('0x1b')]=function(_0x115771){var _0x20096a=this;return new Promise(function(_0x300e94,_0x543717){return db[_0xe425('0x11')][_0xe425('0x1c')]({'raw':_0x115771[_0xe425('0x13')]?_0x115771[_0xe425('0x13')][_0xe425('0x14')]===undefined?!![]:![]:!![],'where':_0x115771[_0xe425('0x13')]?_0x115771[_0xe425('0x13')][_0xe425('0x1d')]||null:null,'attributes':_0x115771['options']?_0x115771[_0xe425('0x13')]['attributes']||null:null,'include':_0x115771['options']?_0x115771[_0xe425('0x13')][_0xe425('0x17')]?_[_0xe425('0x16')](_0x115771[_0xe425('0x13')][_0xe425('0x17')],function(_0x130f30){return{'model':db[_0x130f30[_0xe425('0x18')]],'as':_0x130f30['as'],'attributes':_0x130f30[_0xe425('0x15')],'include':_0x130f30[_0xe425('0x17')]?_[_0xe425('0x16')](_0x130f30[_0xe425('0x17')],function(_0x19a4ce){return{'model':db[_0x19a4ce[_0xe425('0x18')]],'as':_0x19a4ce['as'],'attributes':_0x19a4ce[_0xe425('0x15')],'include':_0x19a4ce[_0xe425('0x17')]?_[_0xe425('0x16')](_0x19a4ce[_0xe425('0x17')],function(_0x1e450f){return{'model':db[_0x1e450f['model']],'as':_0x1e450f['as'],'attributes':_0x1e450f[_0xe425('0x15')]};}):[]};}):[]};}):[]:[]})[_0xe425('0x1e')](function(_0x11ca4e){logger[_0xe425('0x9')](_0xe425('0x1b'),_0x115771);logger['debug'](_0xe425('0x1b'),_0x115771,JSON['stringify'](_0x11ca4e));_0x300e94(_0x11ca4e);})[_0xe425('0x1f')](function(_0xa492e4){logger['error']('ShowInterval',_0xa492e4['message'],_0x115771);_0x543717(_0x20096a[_0xe425('0xe')](0x1f4,_0xa492e4['message']));});});};
\ No newline at end of file
index a5988ae..73b7d15 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2032=['isAuthenticated','send','Router','../../components/auth/service','./jira.controller'];(function(_0x2e0dd9,_0x34e54c){var _0x21c272=function(_0x1b52e1){while(--_0x1b52e1){_0x2e0dd9['push'](_0x2e0dd9['shift']());}};_0x21c272(++_0x34e54c);}(_0x2032,0xd9));var _0x2203=function(_0x44c957,_0x40e3b4){_0x44c957=_0x44c957-0x0;var _0x56ffd1=_0x2032[_0x44c957];return _0x56ffd1;};'use strict';var express=require('express');var router=express[_0x2203('0x0')]();var auth=require(_0x2203('0x1'));var controller=require(_0x2203('0x2'));router['post']('/',auth[_0x2203('0x3')](),controller[_0x2203('0x4')]);module['exports']=router;
\ No newline at end of file
+var _0x0b0e=['exports','express','../../components/auth/service','post','isAuthenticated','send'];(function(_0x45d55e,_0x2fede3){var _0x29812a=function(_0x3c6830){while(--_0x3c6830){_0x45d55e['push'](_0x45d55e['shift']());}};_0x29812a(++_0x2fede3);}(_0x0b0e,0x187));var _0xe0b0=function(_0x35c2fc,_0xabea37){_0x35c2fc=_0x35c2fc-0x0;var _0x4727fd=_0x0b0e[_0x35c2fc];return _0x4727fd;};'use strict';var express=require(_0xe0b0('0x0'));var router=express['Router']();var auth=require(_0xe0b0('0x1'));var controller=require('./jira.controller');router[_0xe0b0('0x2')]('/',auth[_0xe0b0('0x3')](),controller[_0xe0b0('0x4')]);module[_0xe0b0('0x5')]=router;
\ No newline at end of file
index 7797693..49644bf 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(_0x2c8bc3,_0x2b1b0b){var _0x5be033=function(_0x46ff8d){while(--_0x46ff8d){_0x2c8bc3['push'](_0x2c8bc3['shift']());}};_0x5be033(++_0x2b1b0b);}(_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 _0xb7e7=['reason','track.xcallymotion.com','POST','toString','base64','setEncoding','utf8','data','end','status','statusCode','json','parse','error','Error\x20during\x20license\x20request.\x20Please\x20contact\x20our\x20license\x20team\x20at\x20license@xcally.com\x20with\x20your\x20request','api.jira','write','openIssue','send','body','headers','x-forwarded-for','connection','remoteAddress','socket','bluebird','../../config/logger','support','key','MOTGUI','\x20from\x20','description','stringify','Bug','fields','customfield_11500','email','customfield_11501','oldToken','customfield_11502','newToken','customfield_11503','name','customfield_11504'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0xb7e7,0x121));var _0x7b7e=function(_0x4b7b62,_0x4920a9){_0x4b7b62=_0x4b7b62-0x0;var _0x2280df=_0xb7e7[_0x4b7b62];return _0x2280df;};'use strict';var BPromise=require(_0x7b7e('0x0'));var https=require('https');var logger=require(_0x7b7e('0x1'))('api');var USERNAME=_0x7b7e('0x2');var PASSWORD='3eAmWpBVP0';function openIssue(_0x3f5804,_0x556d68){var _0x31d0ed={'fields':{'project':{'key':_0x3f5804[_0x7b7e('0x3')]||_0x7b7e('0x4')},'summary':(_0x3f5804['summary']||'Report')+_0x7b7e('0x5')+_0x3f5804['ip'],'description':_0x3f5804[_0x7b7e('0x6')]||JSON[_0x7b7e('0x7')](_0x3f5804),'issuetype':{'name':_0x3f5804['issuetype']||_0x7b7e('0x8')}}};_0x31d0ed[_0x7b7e('0x9')][_0x7b7e('0xa')]=_0x3f5804[_0x7b7e('0xb')];_0x31d0ed[_0x7b7e('0x9')][_0x7b7e('0xc')]=_0x3f5804[_0x7b7e('0xd')];_0x31d0ed['fields'][_0x7b7e('0xe')]=_0x3f5804[_0x7b7e('0xf')];_0x31d0ed[_0x7b7e('0x9')][_0x7b7e('0x10')]=_0x3f5804[_0x7b7e('0x11')];_0x31d0ed[_0x7b7e('0x9')][_0x7b7e('0x12')]=_0x3f5804[_0x7b7e('0x13')];_0x31d0ed[_0x7b7e('0x9')]['customfield_10102']=_0x3f5804['ip'];var _0x267446={'host':_0x7b7e('0x14'),'port':0x1bb,'path':'/rest/api/2/issue','method':_0x7b7e('0x15'),'timeout':0x4e20,'headers':{'Content-Type':'application/json','Authorization':'Basic\x20'+new Buffer(USERNAME+':'+PASSWORD)[_0x7b7e('0x16')](_0x7b7e('0x17'))}};var _0xf067da=JSON[_0x7b7e('0x7')](_0x31d0ed);var _0x3d2fb2=https['request'](_0x267446,function(_0x51baf6){_0x51baf6[_0x7b7e('0x18')](_0x7b7e('0x19'));var _0x27f999='';_0x51baf6['on'](_0x7b7e('0x1a'),function(_0x2cc400){_0x27f999+=_0x2cc400;});_0x51baf6['on'](_0x7b7e('0x1b'),function(){if(_0x556d68){return _0x556d68[_0x7b7e('0x1c')](_0x51baf6[_0x7b7e('0x1d')])[_0x7b7e('0x1e')](JSON[_0x7b7e('0x1f')](_0x27f999));}});});_0x3d2fb2['on'](_0x7b7e('0x20'),function(_0x14f4fe){if(_0x556d68){return _0x556d68[_0x7b7e('0x1c')](0x1f4)[_0x7b7e('0x1e')]({'errors':[{'message':_0x7b7e('0x21'),'type':_0x7b7e('0x22')}]});}});_0x3d2fb2[_0x7b7e('0x23')](_0xf067da);_0x3d2fb2['end']();}exports[_0x7b7e('0x24')]=openIssue;exports[_0x7b7e('0x25')]=function(_0x24718c,_0x4c0647){_0x24718c[_0x7b7e('0x26')]['ip']=_0x24718c[_0x7b7e('0x27')][_0x7b7e('0x28')]||_0x24718c[_0x7b7e('0x29')][_0x7b7e('0x2a')]||_0x24718c[_0x7b7e('0x2b')][_0x7b7e('0x2a')]||_0x24718c[_0x7b7e('0x29')]['socket']['remoteAddress'];return openIssue(_0x24718c['body'],_0x4c0647);};
\ No newline at end of file
index 42fac44..af2531a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9270=['create','put','update','delete','destroy','exports','multer','util','path','Router','../../components/auth/service','../../config/environment','./jscriptyAnswerReport.controller','get','isAuthenticated','describe','/:id','show','post'];(function(_0xa148b7,_0x2f3eb2){var _0x51efd3=function(_0x34bcec){while(--_0x34bcec){_0xa148b7['push'](_0xa148b7['shift']());}};_0x51efd3(++_0x2f3eb2);}(_0x9270,0x149));var _0x0927=function(_0x420b24,_0x382adc){_0x420b24=_0x420b24-0x0;var _0x4da552=_0x9270[_0x420b24];return _0x4da552;};'use strict';var multer=require(_0x0927('0x0'));var util=require(_0x0927('0x1'));var path=require(_0x0927('0x2'));var express=require('express');var router=express[_0x0927('0x3')]();var auth=require(_0x0927('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x0927('0x5'));var controller=require(_0x0927('0x6'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x0927('0x7')]('/describe',auth[_0x0927('0x8')](),controller[_0x0927('0x9')]);router['get'](_0x0927('0xa'),auth['isAuthenticated'](),controller[_0x0927('0xb')]);router[_0x0927('0xc')]('/',auth['isAuthenticated'](),controller[_0x0927('0xd')]);router[_0x0927('0xe')](_0x0927('0xa'),auth[_0x0927('0x8')](),controller[_0x0927('0xf')]);router[_0x0927('0x10')](_0x0927('0xa'),auth[_0x0927('0x8')](),controller[_0x0927('0x11')]);module[_0x0927('0x12')]=router;
\ No newline at end of file
+var _0x57ef=['index','/:id','show','post','create','put','delete','destroy','exports','multer','util','express','Router','../../components/interaction/service','../../config/environment','get','isAuthenticated'];(function(_0x367959,_0x26cb5e){var _0x3afd41=function(_0x56b817){while(--_0x56b817){_0x367959['push'](_0x367959['shift']());}};_0x3afd41(++_0x26cb5e);}(_0x57ef,0x1e5));var _0xf57e=function(_0x42f2ab,_0x4fddf8){_0x42f2ab=_0x42f2ab-0x0;var _0x1ee3a5=_0x57ef[_0x42f2ab];return _0x1ee3a5;};'use strict';var multer=require(_0xf57e('0x0'));var util=require(_0xf57e('0x1'));var path=require('path');var express=require(_0xf57e('0x2'));var router=express[_0xf57e('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xf57e('0x4'));var config=require(_0xf57e('0x5'));var controller=require('./jscriptyAnswerReport.controller');router[_0xf57e('0x6')]('/',auth[_0xf57e('0x7')](),controller[_0xf57e('0x8')]);router[_0xf57e('0x6')]('/describe',auth[_0xf57e('0x7')](),controller['describe']);router[_0xf57e('0x6')](_0xf57e('0x9'),auth[_0xf57e('0x7')](),controller[_0xf57e('0xa')]);router[_0xf57e('0xb')]('/',auth[_0xf57e('0x7')](),controller[_0xf57e('0xc')]);router[_0xf57e('0xd')]('/:id',auth[_0xf57e('0x7')](),controller['update']);router[_0xf57e('0xe')]('/:id',auth[_0xf57e('0x7')](),controller[_0xf57e('0xf')]);module[_0xf57e('0x10')]=router;
\ No newline at end of file
index c7ed007..e340c1b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x76bc=['STRING','TEXT','long','sequelize','exports'];(function(_0x45bfbc,_0x1ff15e){var _0x407018=function(_0x22f0f0){while(--_0x22f0f0){_0x45bfbc['push'](_0x45bfbc['shift']());}};_0x407018(++_0x1ff15e);}(_0x76bc,0x17f));var _0xc76b=function(_0x319cb9,_0x4b8d35){_0x319cb9=_0x319cb9-0x0;var _0x1735fc=_0x76bc[_0x319cb9];return _0x1735fc;};'use strict';var Sequelize=require(_0xc76b('0x0'));module[_0xc76b('0x1')]={'question':{'type':Sequelize[_0xc76b('0x2')]},'answer':{'type':Sequelize[_0xc76b('0x3')](_0xc76b('0x4'))},'membername':{'type':Sequelize['STRING']},'projectname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0xc76b('0x2')]},'uniqueid':{'type':Sequelize[_0xc76b('0x2')]},'calleridname':{'type':Sequelize[_0xc76b('0x2')]},'calleridnum':{'type':Sequelize[_0xc76b('0x2')]},'questionId':{'type':Sequelize[_0xc76b('0x2')]}};
\ No newline at end of file
+var _0x0713=['long','STRING','TEXT'];(function(_0x7b370f,_0x1f32b5){var _0x5aa899=function(_0x34c19f){while(--_0x34c19f){_0x7b370f['push'](_0x7b370f['shift']());}};_0x5aa899(++_0x1f32b5);}(_0x0713,0x1ba));var _0x3071=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0713[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require('sequelize');module['exports']={'question':{'type':Sequelize[_0x3071('0x0')]},'answer':{'type':Sequelize[_0x3071('0x1')](_0x3071('0x2'))},'membername':{'type':Sequelize[_0x3071('0x0')]},'projectname':{'type':Sequelize[_0x3071('0x0')]},'queue':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x3071('0x0')]},'calleridname':{'type':Sequelize[_0x3071('0x0')]},'calleridnum':{'type':Sequelize[_0x3071('0x0')]},'questionId':{'type':Sequelize[_0x3071('0x0')]}};
\ No newline at end of file
index 2340ce0..bd4bc4a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa235=['util','path','sox','to-csv','lodash','squel','crypto','desk.js','querystring','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','offset','limit','set','json','apply','reject','save','update','then','destroy','error','stack','name','index','JscriptyAnswerReport','rawAttributes','model','query','dateEnd','dateStart','keys','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','pick','add','day','merge','where','filter','map','options','count','includeAll','include','rows','catch','show','params','length','body','find','describe','fast-json-patch','request-promise','bluebird','mustache'];(function(_0x6fa18e,_0x45fa67){var _0x5ab954=function(_0x1875e8){while(--_0x1875e8){_0x6fa18e['push'](_0x6fa18e['shift']());}};_0x5ab954(++_0x45fa67);}(_0xa235,0x86));var _0x5a23=function(_0x5ce1c6,_0x57694f){_0x5ce1c6=_0x5ce1c6-0x0;var _0x222ad8=_0xa235[_0x5ce1c6];return _0x222ad8;};'use strict';var jsonpatch=require(_0x5a23('0x0'));var rp=require(_0x5a23('0x1'));var moment=require('moment');var BPromise=require(_0x5a23('0x2'));var Mustache=require(_0x5a23('0x3'));var util=require(_0x5a23('0x4'));var path=require(_0x5a23('0x5'));var sox=require(_0x5a23('0x6'));var csv=require(_0x5a23('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x5a23('0x8'));var squel=require(_0x5a23('0x9'));var crypto=require(_0x5a23('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x5a23('0xb'));var toCsv=require(_0x5a23('0x7'));var querystring=require(_0x5a23('0xc'));var Papa=require('papaparse');var qs=require(_0x5a23('0xd'));var logger=require(_0x5a23('0xe'))('api');var utils=require(_0x5a23('0xf'));var config=require(_0x5a23('0x10'));var db=require(_0x5a23('0x11'))['db'];function respondWithStatusCode(_0x241279,_0x323a84){_0x323a84=_0x323a84||0xcc;return function(_0x4ad2ce){if(_0x4ad2ce){return _0x241279[_0x5a23('0x12')](_0x323a84);}return _0x241279[_0x5a23('0x13')](_0x323a84)[_0x5a23('0x14')]();};}function respondWithResult(_0x575903,_0x4411a7){_0x4411a7=_0x4411a7||0xc8;return function(_0x1c4c4b){if(_0x1c4c4b){return _0x575903[_0x5a23('0x13')](_0x4411a7)['json'](_0x1c4c4b);}};}function respondWithFilteredResult(_0x52b015,_0x356249){return function(_0xbf583c){if(_0xbf583c){var _0x21457a=_0xbf583c['count'],_0x4884f1=_0x356249[_0x5a23('0x15')],_0x54e104=_0x356249[_0x5a23('0x15')]+_0x356249[_0x5a23('0x16')],_0x458bcb;if(_0x54e104>=_0x21457a){_0x54e104=_0x21457a;_0x458bcb=0xc8;}else{_0x458bcb=0xce;}_0x52b015[_0x5a23('0x13')](_0x458bcb);return _0x52b015[_0x5a23('0x17')]('Content-Range',_0x4884f1+'-'+_0x54e104+'/'+_0x21457a)[_0x5a23('0x18')](_0xbf583c);}return null;};}function patchUpdates(_0xab14e0){return function(_0xa4e05a){try{jsonpatch[_0x5a23('0x19')](_0xa4e05a,_0xab14e0,!![]);}catch(_0xc0c9ae){return BPromise[_0x5a23('0x1a')](_0xc0c9ae);}return _0xa4e05a[_0x5a23('0x1b')]();};}function saveUpdates(_0x139427,_0x4413d9){return function(_0x447e52){if(_0x447e52){return _0x447e52[_0x5a23('0x1c')](_0x139427)[_0x5a23('0x1d')](function(_0x448015){return _0x448015;});}return null;};}function removeEntity(_0x584dbb,_0x3d5184){return function(_0x4592ae){if(_0x4592ae){return _0x4592ae[_0x5a23('0x1e')]()[_0x5a23('0x1d')](function(){_0x584dbb['status'](0xcc)[_0x5a23('0x14')]();});}};}function handleEntityNotFound(_0x81aca3,_0x51312b){return function(_0x2b947b){if(!_0x2b947b){_0x81aca3['sendStatus'](0x194);}return _0x2b947b;};}function handleError(_0x27dac8,_0x235ca1){_0x235ca1=_0x235ca1||0x1f4;return function(_0x1253db){logger[_0x5a23('0x1f')](_0x1253db[_0x5a23('0x20')]);if(_0x1253db[_0x5a23('0x21')]){delete _0x1253db[_0x5a23('0x21')];}_0x27dac8['status'](_0x235ca1)['send'](_0x1253db);};}exports[_0x5a23('0x22')]=function(_0x5e5955,_0x4d4217){var _0x1c596d={},_0x1b1f2d={},_0xc8e4d3={'count':0x0,'rows':[]};var _0x526c47=db[_0x5a23('0x23')][_0x5a23('0x24')];_0x1b1f2d[_0x5a23('0x25')]=_['keys'](_0x526c47);var _0xe33e70={'dateStart':_0x5e5955[_0x5a23('0x26')]['dateStart'],'dateEnd':_0x5e5955[_0x5a23('0x26')][_0x5a23('0x27')]};delete _0x5e5955[_0x5a23('0x26')][_0x5a23('0x28')];delete _0x5e5955[_0x5a23('0x26')][_0x5a23('0x27')];_0x1b1f2d['query']=_[_0x5a23('0x29')](_0x5e5955[_0x5a23('0x26')]);_0x1b1f2d[_0x5a23('0x2a')]=_[_0x5a23('0x2b')](_0x1b1f2d[_0x5a23('0x25')],_0x1b1f2d['query']);_0x1c596d['attributes']=_[_0x5a23('0x2b')](_0x1b1f2d[_0x5a23('0x25')],qs['fields'](_0x5e5955['query'][_0x5a23('0x2c')]));_0x1c596d[_0x5a23('0x2d')]=_0x1c596d[_0x5a23('0x2d')]['length']?_0x1c596d[_0x5a23('0x2d')]:_0x1b1f2d['model'];if(!_0x5e5955['query'][_0x5a23('0x2e')](_0x5a23('0x2f'))){_0x1c596d[_0x5a23('0x16')]=qs['limit'](_0x5e5955[_0x5a23('0x26')][_0x5a23('0x16')]);_0x1c596d[_0x5a23('0x15')]=qs['offset'](_0x5e5955[_0x5a23('0x26')]['offset']);}_0x1c596d[_0x5a23('0x30')]=qs[_0x5a23('0x31')](_0x5e5955['query'][_0x5a23('0x31')]);_0x1c596d['where']=qs['filters'](_[_0x5a23('0x32')](_0x5e5955[_0x5a23('0x26')],_0x1b1f2d[_0x5a23('0x2a')]));if(_0xe33e70[_0x5a23('0x28')]){if(_0xe33e70[_0x5a23('0x27')]){_0xe33e70['dateEnd']=moment(_0xe33e70['dateEnd'])[_0x5a23('0x33')](0x1,_0x5a23('0x34'));}else{_0xe33e70[_0x5a23('0x27')]=moment(_0xe33e70[_0x5a23('0x28')])[_0x5a23('0x33')](0x1,'day');}_[_0x5a23('0x35')](_0x1c596d[_0x5a23('0x36')],{'createdAt':{'$gte':_0xe33e70[_0x5a23('0x28')],'$lte':_0xe33e70[_0x5a23('0x27')]}});}if(_0x5e5955[_0x5a23('0x26')][_0x5a23('0x37')]){_0x1c596d['where']=_['merge'](_0x1c596d[_0x5a23('0x36')],{'$or':_[_0x5a23('0x38')](_0x1c596d[_0x5a23('0x2d')],function(_0xe53dce){var _0x302711={};_0x302711[_0xe53dce]={'$like':'%'+_0x5e5955['query']['filter']+'%'};return _0x302711;})});}_0x1c596d=_[_0x5a23('0x35')]({},_0x1c596d,_0x5e5955[_0x5a23('0x39')]);var _0x7b5081={'where':_0x1c596d[_0x5a23('0x36')]};return db[_0x5a23('0x23')][_0x5a23('0x3a')](_0x7b5081)[_0x5a23('0x1d')](function(_0x3f472e){_0xc8e4d3[_0x5a23('0x3a')]=_0x3f472e;if(_0x5e5955[_0x5a23('0x26')][_0x5a23('0x3b')]){_0x1c596d[_0x5a23('0x3c')]=[{'all':!![]}];}return db[_0x5a23('0x23')]['findAll'](_0x1c596d);})[_0x5a23('0x1d')](function(_0x566f48){_0xc8e4d3[_0x5a23('0x3d')]=_0x566f48;return _0xc8e4d3;})['then'](respondWithFilteredResult(_0x4d4217,_0x1c596d))[_0x5a23('0x3e')](handleError(_0x4d4217,null));};exports[_0x5a23('0x3f')]=function(_0xfe48e2,_0x1c1d2f){var _0x1b871c={'raw':!![],'where':{'id':_0xfe48e2[_0x5a23('0x40')]['id']}},_0x9da299={};_0x9da299[_0x5a23('0x25')]=_['keys'](db[_0x5a23('0x23')][_0x5a23('0x24')]);_0x9da299['query']=_[_0x5a23('0x29')](_0xfe48e2[_0x5a23('0x26')]);_0x9da299[_0x5a23('0x2a')]=_['intersection'](_0x9da299[_0x5a23('0x25')],_0x9da299[_0x5a23('0x26')]);_0x1b871c['attributes']=_[_0x5a23('0x2b')](_0x9da299['model'],qs[_0x5a23('0x2c')](_0xfe48e2[_0x5a23('0x26')][_0x5a23('0x2c')]));_0x1b871c[_0x5a23('0x2d')]=_0x1b871c[_0x5a23('0x2d')][_0x5a23('0x41')]?_0x1b871c[_0x5a23('0x2d')]:_0x9da299[_0x5a23('0x25')];if(_0xfe48e2['query']['includeAll']){_0x1b871c[_0x5a23('0x3c')]=[{'all':!![]}];}_0x1b871c=_['merge']({},_0x1b871c,_0xfe48e2[_0x5a23('0x39')]);return db[_0x5a23('0x23')]['find'](_0x1b871c)[_0x5a23('0x1d')](handleEntityNotFound(_0x1c1d2f,null))['then'](respondWithResult(_0x1c1d2f,null))['catch'](handleError(_0x1c1d2f,null));};exports['create']=function(_0x1e4e2b,_0x19b4fd){return db[_0x5a23('0x23')]['create'](_0x1e4e2b[_0x5a23('0x42')],{})[_0x5a23('0x1d')](respondWithResult(_0x19b4fd,0xc9))[_0x5a23('0x3e')](handleError(_0x19b4fd,null));};exports[_0x5a23('0x1c')]=function(_0x142bdc,_0x1658b1){if(_0x142bdc['body']['id']){delete _0x142bdc[_0x5a23('0x42')]['id'];}return db['JscriptyAnswerReport'][_0x5a23('0x43')]({'where':{'id':_0x142bdc[_0x5a23('0x40')]['id']}})[_0x5a23('0x1d')](handleEntityNotFound(_0x1658b1,null))['then'](saveUpdates(_0x142bdc[_0x5a23('0x42')],null))['then'](respondWithResult(_0x1658b1,null))[_0x5a23('0x3e')](handleError(_0x1658b1,null));};exports[_0x5a23('0x1e')]=function(_0x4a8abf,_0x32921b){return db[_0x5a23('0x23')][_0x5a23('0x43')]({'where':{'id':_0x4a8abf[_0x5a23('0x40')]['id']}})[_0x5a23('0x1d')](handleEntityNotFound(_0x32921b,null))['then'](removeEntity(_0x32921b,null))[_0x5a23('0x3e')](handleError(_0x32921b,null));};exports[_0x5a23('0x44')]=function(_0x128ac7,_0x5eb911){return db[_0x5a23('0x23')]['describe']()[_0x5a23('0x1d')](respondWithResult(_0x5eb911,null))[_0x5a23('0x3e')](handleError(_0x5eb911,null));};
\ No newline at end of file
+var _0xb781=['options','JscriptyAnswerReport','count','includeAll','findAll','rows','catch','show','find','create','body','params','describe','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','lodash','squel','crypto','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','end','status','offset','limit','Content-Range','json','save','update','then','destroy','sendStatus','error','stack','name','index','rawAttributes','model','keys','query','dateEnd','intersection','fields','attributes','length','hasOwnProperty','order','sort','where','filters','dateStart','add','day','merge','filter','map'];(function(_0x558103,_0x5b2896){var _0x4266a1=function(_0x19d8cf){while(--_0x19d8cf){_0x558103['push'](_0x558103['shift']());}};_0x4266a1(++_0x5b2896);}(_0xb781,0x157));var _0x1b78=function(_0x1fbb8a,_0x4d7d8b){_0x1fbb8a=_0x1fbb8a-0x0;var _0x55a086=_0xb781[_0x1fbb8a];return _0x55a086;};'use strict';var jsonpatch=require(_0x1b78('0x0'));var rp=require(_0x1b78('0x1'));var moment=require(_0x1b78('0x2'));var BPromise=require(_0x1b78('0x3'));var Mustache=require(_0x1b78('0x4'));var util=require('util');var path=require(_0x1b78('0x5'));var sox=require(_0x1b78('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x1b78('0x7'));var squel=require(_0x1b78('0x8'));var crypto=require(_0x1b78('0x9'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x1b78('0xa'));var querystring=require(_0x1b78('0xb'));var Papa=require(_0x1b78('0xc'));var qs=require(_0x1b78('0xd'));var logger=require(_0x1b78('0xe'))(_0x1b78('0xf'));var utils=require(_0x1b78('0x10'));var config=require(_0x1b78('0x11'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xff5855,_0x13ac9e){_0x13ac9e=_0x13ac9e||0xcc;return function(_0x39af44){if(_0x39af44){return _0xff5855['sendStatus'](_0x13ac9e);}return _0xff5855['status'](_0x13ac9e)[_0x1b78('0x12')]();};}function respondWithResult(_0x164824,_0x3eb621){_0x3eb621=_0x3eb621||0xc8;return function(_0x11e6de){if(_0x11e6de){return _0x164824[_0x1b78('0x13')](_0x3eb621)['json'](_0x11e6de);}};}function respondWithFilteredResult(_0xa5ea8b,_0xc943b2){return function(_0x17e831){if(_0x17e831){var _0x1ce741=_0x17e831['count'],_0x3665a4=_0xc943b2[_0x1b78('0x14')],_0x333f2a=_0xc943b2[_0x1b78('0x14')]+_0xc943b2[_0x1b78('0x15')],_0x2b55db;if(_0x333f2a>=_0x1ce741){_0x333f2a=_0x1ce741;_0x2b55db=0xc8;}else{_0x2b55db=0xce;}_0xa5ea8b[_0x1b78('0x13')](_0x2b55db);return _0xa5ea8b['set'](_0x1b78('0x16'),_0x3665a4+'-'+_0x333f2a+'/'+_0x1ce741)[_0x1b78('0x17')](_0x17e831);}return null;};}function patchUpdates(_0x3ecd74){return function(_0xdff8cc){try{jsonpatch['apply'](_0xdff8cc,_0x3ecd74,!![]);}catch(_0x33bd3a){return BPromise['reject'](_0x33bd3a);}return _0xdff8cc[_0x1b78('0x18')]();};}function saveUpdates(_0x5ab1b0,_0x48e49d){return function(_0x4eece3){if(_0x4eece3){return _0x4eece3[_0x1b78('0x19')](_0x5ab1b0)[_0x1b78('0x1a')](function(_0x46463c){return _0x46463c;});}return null;};}function removeEntity(_0x4a9aab,_0x4fb745){return function(_0x1d02d5){if(_0x1d02d5){return _0x1d02d5[_0x1b78('0x1b')]()[_0x1b78('0x1a')](function(){_0x4a9aab[_0x1b78('0x13')](0xcc)[_0x1b78('0x12')]();});}};}function handleEntityNotFound(_0x5043e4,_0x3ff5f0){return function(_0x20aa57){if(!_0x20aa57){_0x5043e4[_0x1b78('0x1c')](0x194);}return _0x20aa57;};}function handleError(_0x3b0b55,_0x49dba5){_0x49dba5=_0x49dba5||0x1f4;return function(_0x62be44){logger[_0x1b78('0x1d')](_0x62be44[_0x1b78('0x1e')]);if(_0x62be44[_0x1b78('0x1f')]){delete _0x62be44[_0x1b78('0x1f')];}_0x3b0b55[_0x1b78('0x13')](_0x49dba5)['send'](_0x62be44);};}exports[_0x1b78('0x20')]=function(_0x3d9d42,_0x9b97d9){var _0x35c90b={},_0x3762f0={},_0x1a690c={'count':0x0,'rows':[]};var _0x3d08ef=db['JscriptyAnswerReport'][_0x1b78('0x21')];_0x3762f0[_0x1b78('0x22')]=_[_0x1b78('0x23')](_0x3d08ef);var _0xa39455={'dateStart':_0x3d9d42[_0x1b78('0x24')]['dateStart'],'dateEnd':_0x3d9d42[_0x1b78('0x24')][_0x1b78('0x25')]};delete _0x3d9d42[_0x1b78('0x24')]['dateStart'];delete _0x3d9d42[_0x1b78('0x24')][_0x1b78('0x25')];_0x3762f0[_0x1b78('0x24')]=_[_0x1b78('0x23')](_0x3d9d42[_0x1b78('0x24')]);_0x3762f0['filters']=_[_0x1b78('0x26')](_0x3762f0['model'],_0x3762f0[_0x1b78('0x24')]);_0x35c90b['attributes']=_[_0x1b78('0x26')](_0x3762f0[_0x1b78('0x22')],qs[_0x1b78('0x27')](_0x3d9d42[_0x1b78('0x24')][_0x1b78('0x27')]));_0x35c90b[_0x1b78('0x28')]=_0x35c90b['attributes'][_0x1b78('0x29')]?_0x35c90b[_0x1b78('0x28')]:_0x3762f0[_0x1b78('0x22')];if(!_0x3d9d42['query'][_0x1b78('0x2a')]('nolimit')){_0x35c90b[_0x1b78('0x15')]=qs[_0x1b78('0x15')](_0x3d9d42[_0x1b78('0x24')][_0x1b78('0x15')]);_0x35c90b[_0x1b78('0x14')]=qs['offset'](_0x3d9d42['query'][_0x1b78('0x14')]);}_0x35c90b[_0x1b78('0x2b')]=qs['sort'](_0x3d9d42[_0x1b78('0x24')][_0x1b78('0x2c')]);_0x35c90b[_0x1b78('0x2d')]=qs[_0x1b78('0x2e')](_['pick'](_0x3d9d42['query'],_0x3762f0[_0x1b78('0x2e')]));if(_0xa39455[_0x1b78('0x2f')]){if(_0xa39455[_0x1b78('0x25')]){_0xa39455[_0x1b78('0x25')]=moment(_0xa39455['dateEnd'])[_0x1b78('0x30')](0x1,_0x1b78('0x31'));}else{_0xa39455[_0x1b78('0x25')]=moment(_0xa39455[_0x1b78('0x2f')])[_0x1b78('0x30')](0x1,_0x1b78('0x31'));}_[_0x1b78('0x32')](_0x35c90b[_0x1b78('0x2d')],{'createdAt':{'$gte':_0xa39455[_0x1b78('0x2f')],'$lte':_0xa39455['dateEnd']}});}if(_0x3d9d42[_0x1b78('0x24')][_0x1b78('0x33')]){_0x35c90b[_0x1b78('0x2d')]=_[_0x1b78('0x32')](_0x35c90b[_0x1b78('0x2d')],{'$or':_[_0x1b78('0x34')](_0x35c90b[_0x1b78('0x28')],function(_0x5b9ef6){var _0x408517={};_0x408517[_0x5b9ef6]={'$like':'%'+_0x3d9d42[_0x1b78('0x24')][_0x1b78('0x33')]+'%'};return _0x408517;})});}_0x35c90b=_['merge']({},_0x35c90b,_0x3d9d42[_0x1b78('0x35')]);var _0x479434={'where':_0x35c90b[_0x1b78('0x2d')]};return db[_0x1b78('0x36')]['count'](_0x479434)['then'](function(_0x3373d4){_0x1a690c[_0x1b78('0x37')]=_0x3373d4;if(_0x3d9d42[_0x1b78('0x24')][_0x1b78('0x38')]){_0x35c90b['include']=[{'all':!![]}];}return db['JscriptyAnswerReport'][_0x1b78('0x39')](_0x35c90b);})['then'](function(_0x1fc866){_0x1a690c[_0x1b78('0x3a')]=_0x1fc866;return _0x1a690c;})[_0x1b78('0x1a')](respondWithFilteredResult(_0x9b97d9,_0x35c90b))[_0x1b78('0x3b')](handleError(_0x9b97d9,null));};exports[_0x1b78('0x3c')]=function(_0x4f2691,_0x3172d2){var _0x18c314={'raw':!![],'where':{'id':_0x4f2691['params']['id']}},_0x329ac8={};_0x329ac8['model']=_[_0x1b78('0x23')](db[_0x1b78('0x36')]['rawAttributes']);_0x329ac8[_0x1b78('0x24')]=_[_0x1b78('0x23')](_0x4f2691[_0x1b78('0x24')]);_0x329ac8[_0x1b78('0x2e')]=_[_0x1b78('0x26')](_0x329ac8[_0x1b78('0x22')],_0x329ac8[_0x1b78('0x24')]);_0x18c314[_0x1b78('0x28')]=_[_0x1b78('0x26')](_0x329ac8[_0x1b78('0x22')],qs[_0x1b78('0x27')](_0x4f2691[_0x1b78('0x24')][_0x1b78('0x27')]));_0x18c314['attributes']=_0x18c314[_0x1b78('0x28')][_0x1b78('0x29')]?_0x18c314[_0x1b78('0x28')]:_0x329ac8[_0x1b78('0x22')];if(_0x4f2691[_0x1b78('0x24')][_0x1b78('0x38')]){_0x18c314['include']=[{'all':!![]}];}_0x18c314=_[_0x1b78('0x32')]({},_0x18c314,_0x4f2691['options']);return db[_0x1b78('0x36')][_0x1b78('0x3d')](_0x18c314)['then'](handleEntityNotFound(_0x3172d2,null))[_0x1b78('0x1a')](respondWithResult(_0x3172d2,null))[_0x1b78('0x3b')](handleError(_0x3172d2,null));};exports[_0x1b78('0x3e')]=function(_0x4aaf80,_0x402def){return db[_0x1b78('0x36')][_0x1b78('0x3e')](_0x4aaf80[_0x1b78('0x3f')],{})[_0x1b78('0x1a')](respondWithResult(_0x402def,0xc9))[_0x1b78('0x3b')](handleError(_0x402def,null));};exports[_0x1b78('0x19')]=function(_0x5f0208,_0x5a7100){if(_0x5f0208[_0x1b78('0x3f')]['id']){delete _0x5f0208[_0x1b78('0x3f')]['id'];}return db[_0x1b78('0x36')]['find']({'where':{'id':_0x5f0208['params']['id']}})[_0x1b78('0x1a')](handleEntityNotFound(_0x5a7100,null))[_0x1b78('0x1a')](saveUpdates(_0x5f0208[_0x1b78('0x3f')],null))[_0x1b78('0x1a')](respondWithResult(_0x5a7100,null))['catch'](handleError(_0x5a7100,null));};exports[_0x1b78('0x1b')]=function(_0xdf2665,_0x34e8d6){return db[_0x1b78('0x36')][_0x1b78('0x3d')]({'where':{'id':_0xdf2665[_0x1b78('0x40')]['id']}})['then'](handleEntityNotFound(_0x34e8d6,null))['then'](removeEntity(_0x34e8d6,null))[_0x1b78('0x3b')](handleError(_0x34e8d6,null));};exports[_0x1b78('0x41')]=function(_0x3cf2a6,_0x42d6b5){return db[_0x1b78('0x36')][_0x1b78('0x41')]()['then'](respondWithResult(_0x42d6b5,null))[_0x1b78('0x3b')](handleError(_0x42d6b5,null));};
\ No newline at end of file
index 5a236c4..2dfa5d4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3063=['./jscriptyAnswerReport.attributes','exports','define','JscriptyAnswerReport','report_jscripty_answers','lodash','../../config/logger','api','moment'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x3063,0xb0));var _0x3306=function(_0x231f6f,_0xf231e0){_0x231f6f=_0x231f6f-0x0;var _0xc621c4=_0x3063[_0x231f6f];return _0xc621c4;};'use strict';var _=require(_0x3306('0x0'));var util=require('util');var logger=require(_0x3306('0x1'))(_0x3306('0x2'));var moment=require(_0x3306('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x3306('0x4'));module[_0x3306('0x5')]=function(_0x2f1015,_0x5702bd){return _0x2f1015[_0x3306('0x6')](_0x3306('0x7'),attributes,{'tableName':_0x3306('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4ef3=['define','JscriptyAnswerReport','report_jscripty_answers','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./jscriptyAnswerReport.attributes'];(function(_0x1f4a62,_0x24192a){var _0x2a9fe7=function(_0x2c8e09){while(--_0x2c8e09){_0x1f4a62['push'](_0x1f4a62['shift']());}};_0x2a9fe7(++_0x24192a);}(_0x4ef3,0x19a));var _0x34ef=function(_0x3efe87,_0x35ad48){_0x3efe87=_0x3efe87-0x0;var _0x56a4cc=_0x4ef3[_0x3efe87];return _0x56a4cc;};'use strict';var _=require(_0x34ef('0x0'));var util=require(_0x34ef('0x1'));var logger=require(_0x34ef('0x2'))(_0x34ef('0x3'));var moment=require(_0x34ef('0x4'));var BPromise=require(_0x34ef('0x5'));var rp=require(_0x34ef('0x6'));var attributes=require(_0x34ef('0x7'));module['exports']=function(_0x537a41,_0xc2672a){return _0x537a41[_0x34ef('0x8')](_0x34ef('0x9'),attributes,{'tableName':_0x34ef('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6e42c22..52b8923 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8222=['bluebird','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','JscriptyAnswerReport,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','catch','util','moment'];(function(_0x15cff8,_0x35b9e6){var _0x2ef50a=function(_0x35a153){while(--_0x35a153){_0x15cff8['push'](_0x15cff8['shift']());}};_0x2ef50a(++_0x35b9e6);}(_0x8222,0x18a));var _0x2822=function(_0x3b0a03,_0x2e16c1){_0x3b0a03=_0x3b0a03-0x0;var _0x12650b=_0x8222[_0x3b0a03];return _0x12650b;};'use strict';var _=require('lodash');var util=require(_0x2822('0x0'));var moment=require(_0x2822('0x1'));var BPromise=require(_0x2822('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x2822('0x3'))['db'];var utils=require(_0x2822('0x4'));var logger=require(_0x2822('0x5'))('rpc');var config=require(_0x2822('0x6'));var jayson=require(_0x2822('0x7'));var client=jayson[_0x2822('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x485492,_0x160269,_0x484ba3){return new BPromise(function(_0x1144ef,_0x4b0ca5){return client['request'](_0x485492,_0x484ba3)['then'](function(_0xb2101a){logger['info'](_0x2822('0x9'),_0x160269,'request\x20sent');logger[_0x2822('0xa')]('JscriptyAnswerReport,\x20%s,\x20%s,\x20%s',_0x160269,_0x2822('0xb'),JSON[_0x2822('0xc')](_0xb2101a));if(_0xb2101a[_0x2822('0xd')]){if(_0xb2101a['error'][_0x2822('0xe')]===0x1f4){logger[_0x2822('0xd')](_0x2822('0x9'),_0x160269,_0xb2101a[_0x2822('0xd')][_0x2822('0xf')]);return _0x4b0ca5(_0xb2101a['error'][_0x2822('0xf')]);}logger[_0x2822('0xd')](_0x2822('0x9'),_0x160269,_0xb2101a['error'][_0x2822('0xf')]);return _0x1144ef(_0xb2101a[_0x2822('0xd')][_0x2822('0xf')]);}else{logger['info']('JscriptyAnswerReport,\x20%s,\x20%s',_0x160269,_0x2822('0xb'));_0x1144ef(_0xb2101a[_0x2822('0x10')][_0x2822('0xf')]);}})[_0x2822('0x11')](function(_0xc18fab){logger[_0x2822('0xd')](_0x2822('0x9'),_0x160269,_0xc18fab);_0x4b0ca5(_0xc18fab);});});}
\ No newline at end of file
+var _0x10bd=['jayson/promise','client','http','request','info','JscriptyAnswerReport,\x20%s,\x20%s','debug','JscriptyAnswerReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment'];(function(_0x338efe,_0x3774af){var _0x551b15=function(_0xa38957){while(--_0xa38957){_0x338efe['push'](_0x338efe['shift']());}};_0x551b15(++_0x3774af);}(_0x10bd,0x196));var _0xd10b=function(_0x4cc030,_0x40c06d){_0x4cc030=_0x4cc030-0x0;var _0x5f009b=_0x10bd[_0x4cc030];return _0x5f009b;};'use strict';var _=require(_0xd10b('0x0'));var util=require('util');var moment=require(_0xd10b('0x1'));var BPromise=require(_0xd10b('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xd10b('0x3'))['db'];var utils=require(_0xd10b('0x4'));var logger=require(_0xd10b('0x5'))(_0xd10b('0x6'));var config=require(_0xd10b('0x7'));var jayson=require(_0xd10b('0x8'));var client=jayson[_0xd10b('0x9')][_0xd10b('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x46f083,_0x1de9e8,_0x126813){return new BPromise(function(_0x3b4e8f,_0xa0e43b){return client[_0xd10b('0xb')](_0x46f083,_0x126813)['then'](function(_0x3e714e){logger[_0xd10b('0xc')](_0xd10b('0xd'),_0x1de9e8,'request\x20sent');logger[_0xd10b('0xe')](_0xd10b('0xf'),_0x1de9e8,_0xd10b('0x10'),JSON[_0xd10b('0x11')](_0x3e714e));if(_0x3e714e[_0xd10b('0x12')]){if(_0x3e714e[_0xd10b('0x12')][_0xd10b('0x13')]===0x1f4){logger['error']('JscriptyAnswerReport,\x20%s,\x20%s',_0x1de9e8,_0x3e714e[_0xd10b('0x12')]['message']);return _0xa0e43b(_0x3e714e[_0xd10b('0x12')]['message']);}logger[_0xd10b('0x12')](_0xd10b('0xd'),_0x1de9e8,_0x3e714e['error'][_0xd10b('0x14')]);return _0x3b4e8f(_0x3e714e[_0xd10b('0x12')]['message']);}else{logger[_0xd10b('0xc')](_0xd10b('0xd'),_0x1de9e8,_0xd10b('0x10'));_0x3b4e8f(_0x3e714e[_0xd10b('0x15')]['message']);}})[_0xd10b('0x16')](function(_0x1d3df8){logger[_0xd10b('0x12')](_0xd10b('0xd'),_0x1de9e8,_0x1d3df8);_0xa0e43b(_0x1d3df8);});});}
\ No newline at end of file
index 5c45e1b..56d8ba6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1883=['put','delete','destroy','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./jscriptyProject.controller','get','isAuthenticated','index','/:id','show','getSessions','/:id/answers','getAnswers','/:id/summary','post','/:id/clone','clone'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x1883,0xab));var _0x3188=function(_0x1299ec,_0x1526e4){_0x1299ec=_0x1299ec-0x0;var _0x50940f=_0x1883[_0x1299ec];return _0x50940f;};'use strict';var multer=require(_0x3188('0x0'));var util=require(_0x3188('0x1'));var path=require(_0x3188('0x2'));var express=require(_0x3188('0x3'));var router=express[_0x3188('0x4')]();var auth=require(_0x3188('0x5'));var interaction=require(_0x3188('0x6'));var config=require(_0x3188('0x7'));var controller=require(_0x3188('0x8'));router[_0x3188('0x9')]('/',auth[_0x3188('0xa')](),controller[_0x3188('0xb')]);router[_0x3188('0x9')](_0x3188('0xc'),auth[_0x3188('0xa')](),controller[_0x3188('0xd')]);router[_0x3188('0x9')]('/:id/sessions',auth[_0x3188('0xa')](),controller[_0x3188('0xe')]);router['get'](_0x3188('0xf'),auth['isAuthenticated'](),controller[_0x3188('0x10')]);router[_0x3188('0x9')](_0x3188('0x11'),auth[_0x3188('0xa')](),controller['getSummary']);router[_0x3188('0x12')]('/',auth[_0x3188('0xa')](),controller['create']);router['post'](_0x3188('0x13'),auth[_0x3188('0xa')](),controller[_0x3188('0x14')]);router[_0x3188('0x15')](_0x3188('0xc'),auth[_0x3188('0xa')](),controller['update']);router[_0x3188('0x16')]('/:id',auth['isAuthenticated'](),controller[_0x3188('0x17')]);module['exports']=router;
\ No newline at end of file
+var _0xf2ca=['destroy','exports','multer','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./jscriptyProject.controller','get','index','/:id','isAuthenticated','/:id/sessions','getSessions','/:id/answers','getAnswers','/:id/summary','create','post','/:id/clone','update','delete'];(function(_0x1d6cb8,_0x31a3f3){var _0x38a43f=function(_0x4ef6bd){while(--_0x4ef6bd){_0x1d6cb8['push'](_0x1d6cb8['shift']());}};_0x38a43f(++_0x31a3f3);}(_0xf2ca,0x16a));var _0xaf2c=function(_0x172747,_0x1732bd){_0x172747=_0x172747-0x0;var _0x509692=_0xf2ca[_0x172747];return _0x509692;};'use strict';var multer=require(_0xaf2c('0x0'));var util=require(_0xaf2c('0x1'));var path=require(_0xaf2c('0x2'));var express=require('express');var router=express[_0xaf2c('0x3')]();var auth=require(_0xaf2c('0x4'));var interaction=require(_0xaf2c('0x5'));var config=require(_0xaf2c('0x6'));var controller=require(_0xaf2c('0x7'));router[_0xaf2c('0x8')]('/',auth['isAuthenticated'](),controller[_0xaf2c('0x9')]);router[_0xaf2c('0x8')](_0xaf2c('0xa'),auth[_0xaf2c('0xb')](),controller['show']);router[_0xaf2c('0x8')](_0xaf2c('0xc'),auth['isAuthenticated'](),controller[_0xaf2c('0xd')]);router['get'](_0xaf2c('0xe'),auth['isAuthenticated'](),controller[_0xaf2c('0xf')]);router[_0xaf2c('0x8')](_0xaf2c('0x10'),auth[_0xaf2c('0xb')](),controller['getSummary']);router['post']('/',auth[_0xaf2c('0xb')](),controller[_0xaf2c('0x11')]);router[_0xaf2c('0x12')](_0xaf2c('0x13'),auth[_0xaf2c('0xb')](),controller['clone']);router['put'](_0xaf2c('0xa'),auth[_0xaf2c('0xb')](),controller[_0xaf2c('0x14')]);router[_0xaf2c('0x15')](_0xaf2c('0xa'),auth[_0xaf2c('0xb')](),controller[_0xaf2c('0x16')]);module[_0xaf2c('0x17')]=router;
\ No newline at end of file
index deac561..fc009d6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa99=['formData','{\x22name\x22:\x22%s\x22,\x22description\x22:\x22%s\x22,\x22pages\x22:[]}','getDataValue','description','sequelize','exports','STRING','name','TEXT','isObjectLike','setDataValue','isString'];(function(_0xc4001c,_0x1bf8f0){var _0x49f7bc=function(_0x1059b8){while(--_0x1059b8){_0xc4001c['push'](_0xc4001c['shift']());}};_0x49f7bc(++_0x1bf8f0);}(_0xaa99,0x19c));var _0x9aa9=function(_0x4ecb36,_0x84bab4){_0x4ecb36=_0x4ecb36-0x0;var _0x21784c=_0xaa99[_0x4ecb36];return _0x21784c;};'use strict';var Sequelize=require(_0x9aa9('0x0'));var _=require('lodash');var util=require('util');module[_0x9aa9('0x1')]={'name':{'type':Sequelize[_0x9aa9('0x2')],'unique':_0x9aa9('0x3')},'description':{'type':Sequelize[_0x9aa9('0x2')]},'formData':{'type':Sequelize[_0x9aa9('0x4')]('long'),'set':function(_0xa6a48b){if(_[_0x9aa9('0x5')](_0xa6a48b)){this[_0x9aa9('0x6')]('formData',JSON['stringify'](_0xa6a48b));}else if(_[_0x9aa9('0x7')](_0xa6a48b)){this[_0x9aa9('0x6')](_0x9aa9('0x8'),_0xa6a48b);}else{this[_0x9aa9('0x6')](_0x9aa9('0x8'),util['format'](_0x9aa9('0x9'),this['getDataValue'](_0x9aa9('0x3'))||'',this[_0x9aa9('0xa')](_0x9aa9('0xb'))||''));}}},'enableUncompleteSave':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]}};
\ No newline at end of file
+var _0x455b=['isObjectLike','formData','stringify','setDataValue','format','{\x22name\x22:\x22%s\x22,\x22description\x22:\x22%s\x22,\x22pages\x22:[]}','getDataValue','description','BOOLEAN','sequelize','lodash','util','STRING','name','TEXT','long'];(function(_0x50056d,_0x4b85c3){var _0xe1f07d=function(_0x257375){while(--_0x257375){_0x50056d['push'](_0x50056d['shift']());}};_0xe1f07d(++_0x4b85c3);}(_0x455b,0xd9));var _0xb455=function(_0x1304c7,_0x30d777){_0x1304c7=_0x1304c7-0x0;var _0xff7b07=_0x455b[_0x1304c7];return _0xff7b07;};'use strict';var Sequelize=require(_0xb455('0x0'));var _=require(_0xb455('0x1'));var util=require(_0xb455('0x2'));module['exports']={'name':{'type':Sequelize[_0xb455('0x3')],'unique':_0xb455('0x4')},'description':{'type':Sequelize[_0xb455('0x3')]},'formData':{'type':Sequelize[_0xb455('0x5')](_0xb455('0x6')),'set':function(_0x2fedbe){if(_[_0xb455('0x7')](_0x2fedbe)){this['setDataValue'](_0xb455('0x8'),JSON[_0xb455('0x9')](_0x2fedbe));}else if(_['isString'](_0x2fedbe)){this[_0xb455('0xa')](_0xb455('0x8'),_0x2fedbe);}else{this['setDataValue'](_0xb455('0x8'),util[_0xb455('0xb')](_0xb455('0xc'),this[_0xb455('0xd')]('name')||'',this[_0xb455('0xd')](_0xb455('0xe'))||''));}}},'enableUncompleteSave':{'type':Sequelize[_0xb455('0xf')],'defaultValue':!![]}};
\ No newline at end of file
index d5381c8..cec3d36 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x72a8=['catch','show','params','find','create','body','clone','omit','updatedAt','createdAt','update','findOne','JscriptySessionReport','getAnswers','ProjectId','JscriptyAnswerReport','findAll','number','fromCharCode','toString','indexOf','replace','getSummary','JscriptyQuestionReport','-createdAt','questionId','question','format','YYYY-MM-DD\x20HH:mm:ss','SessionId','push','isEmpty','now','writeFileSync','setHeader','Content-disposition','Jscripty_Project_%d_Summary_%s.csv','text/csv','download','/tmp/Jscripty_Project_%d_Summary_%s.csv','request-promise','moment','bluebird','util','path','lodash','jsforce','to-csv','querystring','papaparse','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','apply','reject','save','destroy','then','name','send','index','JscriptyProject','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','map','filter','options','includeAll','include','rows'];(function(_0x2d415c,_0x27cb89){var _0x1fc59c=function(_0x37997b){while(--_0x37997b){_0x2d415c['push'](_0x2d415c['shift']());}};_0x1fc59c(++_0x27cb89);}(_0x72a8,0xea));var _0x872a=function(_0x410b27,_0x458a81){_0x410b27=_0x410b27-0x0;var _0x3e4828=_0x72a8[_0x410b27];return _0x3e4828;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x872a('0x0'));var moment=require(_0x872a('0x1'));var BPromise=require(_0x872a('0x2'));var Mustache=require('mustache');var util=require(_0x872a('0x3'));var path=require(_0x872a('0x4'));var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x872a('0x5'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x872a('0x6'));var deskjs=require('desk.js');var toCsv=require(_0x872a('0x7'));var querystring=require(_0x872a('0x8'));var Papa=require(_0x872a('0x9'));var qs=require('../../components/parsers/qs');var logger=require(_0x872a('0xa'))(_0x872a('0xb'));var utils=require('../../config/utils');var config=require(_0x872a('0xc'));var db=require(_0x872a('0xd'))['db'];function respondWithStatusCode(_0x31d10d,_0x49c6a2){_0x49c6a2=_0x49c6a2||0xcc;return function(_0x5901a4){if(_0x5901a4){return _0x31d10d[_0x872a('0xe')](_0x49c6a2);}return _0x31d10d[_0x872a('0xf')](_0x49c6a2)[_0x872a('0x10')]();};}function respondWithResult(_0x5b7834,_0x436d64){_0x436d64=_0x436d64||0xc8;return function(_0x228e19){if(_0x228e19){return _0x5b7834[_0x872a('0xf')](_0x436d64)['json'](_0x228e19);}};}function respondWithFilteredResult(_0x1893fb,_0x52aa09){return function(_0x4e89c7){if(_0x4e89c7){var _0x48a049=_0x4e89c7[_0x872a('0x11')],_0x3cda30=_0x52aa09[_0x872a('0x12')],_0x4c6d2e=_0x52aa09['offset']+_0x52aa09[_0x872a('0x13')],_0x3bd702;if(_0x4c6d2e>=_0x48a049){_0x4c6d2e=_0x48a049;_0x3bd702=0xc8;}else{_0x3bd702=0xce;}_0x1893fb[_0x872a('0xf')](_0x3bd702);return _0x1893fb[_0x872a('0x14')](_0x872a('0x15'),_0x3cda30+'-'+_0x4c6d2e+'/'+_0x48a049)['json'](_0x4e89c7);}return null;};}function patchUpdates(_0x4d9e7a){return function(_0x33c70e){try{jsonpatch[_0x872a('0x16')](_0x33c70e,_0x4d9e7a,!![]);}catch(_0x5ce12){return BPromise[_0x872a('0x17')](_0x5ce12);}return _0x33c70e[_0x872a('0x18')]();};}function saveUpdates(_0x11bcf5,_0xeab04f){return function(_0x3a1de8){if(_0x3a1de8){return _0x3a1de8['update'](_0x11bcf5)['then'](function(_0x546e20){return _0x546e20;});}return null;};}function removeEntity(_0x28edea,_0x55ac60){return function(_0x51bdef){if(_0x51bdef){return _0x51bdef[_0x872a('0x19')]()[_0x872a('0x1a')](function(){_0x28edea[_0x872a('0xf')](0xcc)[_0x872a('0x10')]();});}};}function handleEntityNotFound(_0xd69bd0,_0x350c46){return function(_0x4aa751){if(!_0x4aa751){_0xd69bd0[_0x872a('0xe')](0x194);}return _0x4aa751;};}function handleError(_0x22e88b,_0x62f1f){_0x62f1f=_0x62f1f||0x1f4;return function(_0x5892e2){logger['error'](_0x5892e2['stack']);if(_0x5892e2[_0x872a('0x1b')]){delete _0x5892e2[_0x872a('0x1b')];}_0x22e88b[_0x872a('0xf')](_0x62f1f)[_0x872a('0x1c')](_0x5892e2);};}exports[_0x872a('0x1d')]=function(_0x4b6512,_0xd659b3){var _0x4132e7={},_0x556fa4={},_0x8699ae={'count':0x0,'rows':[]};var _0x7c43a2=db[_0x872a('0x1e')][_0x872a('0x1f')];_0x556fa4[_0x872a('0x20')]=_[_0x872a('0x21')](_0x7c43a2);var _0x399e86={'dateStart':_0x4b6512[_0x872a('0x22')][_0x872a('0x23')],'dateEnd':_0x4b6512[_0x872a('0x22')][_0x872a('0x24')]};delete _0x4b6512[_0x872a('0x22')][_0x872a('0x23')];delete _0x4b6512[_0x872a('0x22')][_0x872a('0x24')];_0x556fa4[_0x872a('0x22')]=_['keys'](_0x4b6512[_0x872a('0x22')]);_0x556fa4[_0x872a('0x25')]=_[_0x872a('0x26')](_0x556fa4[_0x872a('0x20')],_0x556fa4['query']);_0x4132e7['attributes']=_[_0x872a('0x26')](_0x556fa4[_0x872a('0x20')],qs[_0x872a('0x27')](_0x4b6512[_0x872a('0x22')][_0x872a('0x27')]));_0x4132e7[_0x872a('0x28')]=_0x4132e7[_0x872a('0x28')][_0x872a('0x29')]?_0x4132e7[_0x872a('0x28')]:_0x556fa4[_0x872a('0x20')];if(!_0x4b6512['query'][_0x872a('0x2a')](_0x872a('0x2b'))){_0x4132e7[_0x872a('0x13')]=qs['limit'](_0x4b6512['query'][_0x872a('0x13')]);_0x4132e7[_0x872a('0x12')]=qs[_0x872a('0x12')](_0x4b6512[_0x872a('0x22')][_0x872a('0x12')]);}_0x4132e7[_0x872a('0x2c')]=qs[_0x872a('0x2d')](_0x4b6512[_0x872a('0x22')]['sort']);_0x4132e7[_0x872a('0x2e')]=qs[_0x872a('0x25')](_[_0x872a('0x2f')](_0x4b6512[_0x872a('0x22')],_0x556fa4['filters']));if(_0x399e86[_0x872a('0x23')]){if(_0x399e86[_0x872a('0x24')]){_0x399e86[_0x872a('0x24')]=moment(_0x399e86[_0x872a('0x24')])[_0x872a('0x30')](0x1,_0x872a('0x31'));}else{_0x399e86[_0x872a('0x24')]=moment(_0x399e86[_0x872a('0x23')])['add'](0x1,_0x872a('0x31'));}_[_0x872a('0x32')](_0x4132e7[_0x872a('0x2e')],{'createdAt':{'$gte':_0x399e86['dateStart'],'$lte':_0x399e86[_0x872a('0x24')]}});}if(_0x4b6512[_0x872a('0x22')]['filter']){_0x4132e7['where']=_[_0x872a('0x32')](_0x4132e7['where'],{'$or':_[_0x872a('0x33')](_0x4132e7[_0x872a('0x28')],function(_0x26a28f){var _0x1e382d={};_0x1e382d[_0x26a28f]={'$like':'%'+_0x4b6512['query'][_0x872a('0x34')]+'%'};return _0x1e382d;})});}_0x4132e7=_['merge']({},_0x4132e7,_0x4b6512[_0x872a('0x35')]);var _0x1899b0={'where':_0x4132e7['where']};return db['JscriptyProject'][_0x872a('0x11')](_0x1899b0)['then'](function(_0x15d596){_0x8699ae[_0x872a('0x11')]=_0x15d596;if(_0x4b6512[_0x872a('0x22')][_0x872a('0x36')]){_0x4132e7[_0x872a('0x37')]=[{'all':!![]}];}return db['JscriptyProject']['findAll'](_0x4132e7);})[_0x872a('0x1a')](function(_0x3a4468){_0x8699ae[_0x872a('0x38')]=_0x3a4468;return _0x8699ae;})[_0x872a('0x1a')](respondWithFilteredResult(_0xd659b3,_0x4132e7))[_0x872a('0x39')](handleError(_0xd659b3,null));};exports[_0x872a('0x3a')]=function(_0x2a9685,_0x482ac0){var _0x45812a={'raw':![],'where':{'id':_0x2a9685[_0x872a('0x3b')]['id']}},_0x3fcb1c={};_0x3fcb1c['model']=_[_0x872a('0x21')](db[_0x872a('0x1e')][_0x872a('0x1f')]);_0x3fcb1c[_0x872a('0x22')]=_['keys'](_0x2a9685['query']);_0x3fcb1c[_0x872a('0x25')]=_[_0x872a('0x26')](_0x3fcb1c['model'],_0x3fcb1c[_0x872a('0x22')]);_0x45812a[_0x872a('0x28')]=_[_0x872a('0x26')](_0x3fcb1c['model'],qs[_0x872a('0x27')](_0x2a9685['query']['fields']));_0x45812a['attributes']=_0x45812a[_0x872a('0x28')][_0x872a('0x29')]?_0x45812a[_0x872a('0x28')]:_0x3fcb1c[_0x872a('0x20')];if(_0x2a9685[_0x872a('0x22')][_0x872a('0x36')]){_0x45812a[_0x872a('0x37')]=[{'all':!![]}];}_0x45812a=_[_0x872a('0x32')]({},_0x45812a,_0x2a9685[_0x872a('0x35')]);return db[_0x872a('0x1e')][_0x872a('0x3c')](_0x45812a)[_0x872a('0x1a')](handleEntityNotFound(_0x482ac0,null))[_0x872a('0x1a')](respondWithResult(_0x482ac0,null))[_0x872a('0x39')](handleError(_0x482ac0,null));};exports[_0x872a('0x3d')]=function(_0x4141f3,_0x10f614){return db[_0x872a('0x1e')]['create'](_0x4141f3[_0x872a('0x3e')],{})[_0x872a('0x1a')](respondWithResult(_0x10f614,0xc9))['catch'](handleError(_0x10f614,null));};exports[_0x872a('0x3f')]=function(_0x3b8cb8,_0x315704){var _0x54d612={'raw':![],'where':{'id':_0x3b8cb8[_0x872a('0x3b')]['id']}},_0x1942b2={};_0x1942b2[_0x872a('0x20')]=_[_0x872a('0x21')](db[_0x872a('0x1e')][_0x872a('0x1f')]);_0x54d612[_0x872a('0x28')]=_[_0x872a('0x26')](_0x1942b2[_0x872a('0x20')],qs[_0x872a('0x27')](_0x3b8cb8['query']['fields']));_0x54d612[_0x872a('0x28')]=_0x54d612[_0x872a('0x28')]['length']?_0x54d612[_0x872a('0x28')]:_0x1942b2[_0x872a('0x20')];if(_0x3b8cb8[_0x872a('0x22')]['includeAll']){_0x54d612[_0x872a('0x37')]=[{'all':!![]}];}_0x54d612=_['merge']({},_0x54d612,_0x3b8cb8['options']);return db[_0x872a('0x1e')][_0x872a('0x3c')](_0x54d612)[_0x872a('0x1a')](handleEntityNotFound(_0x315704,null))[_0x872a('0x1a')](function(_0x4293be){if(_0x4293be){var _0x3fcc6a=_0x4293be['get']({'plain':!![]});_0x3fcc6a=qs[_0x872a('0x40')](_0x3fcc6a,['id','createdAt',_0x872a('0x41')]);_0x3b8cb8[_0x872a('0x3e')]=_[_0x872a('0x40')](_0x3b8cb8['body'],['id',_0x872a('0x42'),'updatedAt']);return db['JscriptyProject']['create'](_[_0x872a('0x32')](_0x3fcc6a,_0x3b8cb8[_0x872a('0x3e')]),{'include':_0x3b8cb8['query'][_0x872a('0x36')]?[{'all':!![]}]:undefined});}})[_0x872a('0x1a')](respondWithResult(_0x315704,0xc9))[_0x872a('0x39')](handleError(_0x315704,null));};exports[_0x872a('0x43')]=function(_0x1a52a7,_0x32c197){if(_0x1a52a7[_0x872a('0x3e')]['id']){delete _0x1a52a7[_0x872a('0x3e')]['id'];}return db[_0x872a('0x1e')]['find']({'where':{'id':_0x1a52a7[_0x872a('0x3b')]['id']}})[_0x872a('0x1a')](handleEntityNotFound(_0x32c197,null))['then'](saveUpdates(_0x1a52a7['body'],null))[_0x872a('0x1a')](respondWithResult(_0x32c197,null))[_0x872a('0x39')](handleError(_0x32c197,null));};exports['destroy']=function(_0x21063f,_0x53a2a5){return db['JscriptyProject'][_0x872a('0x3c')]({'where':{'id':_0x21063f['params']['id']}})[_0x872a('0x1a')](handleEntityNotFound(_0x53a2a5,null))['then'](removeEntity(_0x53a2a5,null))[_0x872a('0x39')](handleError(_0x53a2a5,null));};exports['getSessions']=function(_0x1dccf4,_0x2b6f11,_0x2c1b09){var _0x27249b={'raw':!![],'where':{}};var _0x598478={};var _0x5c4ad9={'count':0x0,'rows':[]};return db[_0x872a('0x1e')][_0x872a('0x44')]({'where':{'id':_0x1dccf4[_0x872a('0x3b')]['id']}})['then'](handleEntityNotFound(_0x2b6f11,null))[_0x872a('0x1a')](function(_0x3593ef){if(_0x3593ef){_0x598478[_0x872a('0x20')]=_[_0x872a('0x21')](db['JscriptySessionReport'][_0x872a('0x1f')]);_0x598478[_0x872a('0x22')]=_['keys'](_0x1dccf4[_0x872a('0x22')]);_0x598478[_0x872a('0x25')]=_['intersection'](_0x598478['model'],_0x598478[_0x872a('0x22')]);_0x27249b[_0x872a('0x28')]=_['intersection'](_0x598478[_0x872a('0x20')],qs[_0x872a('0x27')](_0x1dccf4['query'][_0x872a('0x27')]));_0x27249b[_0x872a('0x28')]=_0x27249b[_0x872a('0x28')]['length']?_0x27249b[_0x872a('0x28')]:_0x598478['model'];if(!_0x1dccf4['query'][_0x872a('0x2a')](_0x872a('0x2b'))){_0x27249b[_0x872a('0x13')]=qs[_0x872a('0x13')](_0x1dccf4[_0x872a('0x22')][_0x872a('0x13')]);_0x27249b[_0x872a('0x12')]=qs[_0x872a('0x12')](_0x1dccf4[_0x872a('0x22')][_0x872a('0x12')]);}_0x27249b[_0x872a('0x2c')]=qs['sort'](_0x1dccf4[_0x872a('0x22')][_0x872a('0x2d')]);_0x27249b['where']=qs['filters'](_[_0x872a('0x2f')](_0x1dccf4[_0x872a('0x22')],_0x598478[_0x872a('0x25')]));_0x27249b[_0x872a('0x2e')]['ProjectId']=_0x3593ef['id'];if(_0x1dccf4[_0x872a('0x22')][_0x872a('0x34')]){_0x27249b[_0x872a('0x2e')]=_[_0x872a('0x32')](_0x27249b[_0x872a('0x2e')],{'$or':_['map'](_0x27249b['attributes'],function(_0x47872d){var _0x4eb1ae={};_0x4eb1ae[_0x47872d]={'$like':'%'+_0x1dccf4[_0x872a('0x22')][_0x872a('0x34')]+'%'};return _0x4eb1ae;})});}_0x27249b=_[_0x872a('0x32')]({},_0x27249b,_0x1dccf4[_0x872a('0x35')]);return db[_0x872a('0x45')][_0x872a('0x11')]({'where':_0x27249b[_0x872a('0x2e')]})[_0x872a('0x1a')](function(_0x9a41c9){_0x5c4ad9[_0x872a('0x11')]=_0x9a41c9;if(_0x1dccf4[_0x872a('0x22')][_0x872a('0x36')]){_0x27249b[_0x872a('0x37')]=[{'all':!![]}];}return db['JscriptySessionReport']['findAll'](_0x27249b);})[_0x872a('0x1a')](function(_0x304ebd){_0x5c4ad9[_0x872a('0x38')]=_0x304ebd;return _0x5c4ad9;});}})[_0x872a('0x1a')](respondWithFilteredResult(_0x2b6f11,_0x27249b))['catch'](handleError(_0x2b6f11,null));};exports[_0x872a('0x46')]=function(_0x12b763,_0x53f67e,_0x57d4c0){var _0x22b66b={'raw':!![],'where':{}};var _0x480372={};var _0x118efc={'count':0x0,'rows':[]};var _0x4a7ab7={'dateStart':_0x12b763[_0x872a('0x22')][_0x872a('0x23')],'dateEnd':_0x12b763[_0x872a('0x22')][_0x872a('0x24')]};delete _0x12b763[_0x872a('0x22')][_0x872a('0x23')];delete _0x12b763[_0x872a('0x22')]['dateEnd'];return db['JscriptyProject'][_0x872a('0x44')]({'where':{'id':_0x12b763['params']['id']}})[_0x872a('0x1a')](handleEntityNotFound(_0x53f67e,null))[_0x872a('0x1a')](function(_0x5ca654){if(_0x5ca654){_0x480372[_0x872a('0x20')]=_[_0x872a('0x21')](db['JscriptyAnswerReport'][_0x872a('0x1f')]);_0x480372['query']=_[_0x872a('0x21')](_0x12b763[_0x872a('0x22')]);_0x480372[_0x872a('0x25')]=_[_0x872a('0x26')](_0x480372['model'],_0x480372['query']);_0x22b66b[_0x872a('0x28')]=_[_0x872a('0x26')](_0x480372['model'],qs['fields'](_0x12b763['query'][_0x872a('0x27')]));_0x22b66b[_0x872a('0x28')]=_0x22b66b[_0x872a('0x28')][_0x872a('0x29')]?_0x22b66b['attributes']:_0x480372[_0x872a('0x20')];if(!_0x12b763['query']['hasOwnProperty'](_0x872a('0x2b'))){_0x22b66b[_0x872a('0x13')]=qs['limit'](_0x12b763[_0x872a('0x22')][_0x872a('0x13')]);_0x22b66b['offset']=qs['offset'](_0x12b763[_0x872a('0x22')][_0x872a('0x12')]);}_0x22b66b[_0x872a('0x2c')]=qs[_0x872a('0x2d')](_0x12b763[_0x872a('0x22')]['sort']);_0x22b66b['where']=qs[_0x872a('0x25')](_['pick'](_0x12b763['query'],_0x480372[_0x872a('0x25')]));_0x22b66b['where'][_0x872a('0x47')]=_0x5ca654['id'];if(_0x4a7ab7['dateStart']){if(_0x4a7ab7['dateEnd']){_0x4a7ab7['dateEnd']=moment(_0x4a7ab7['dateEnd'])[_0x872a('0x30')](0x1,_0x872a('0x31'));}else{_0x4a7ab7['dateEnd']=moment(_0x4a7ab7['dateStart'])[_0x872a('0x30')](0x1,_0x872a('0x31'));}_[_0x872a('0x32')](_0x22b66b[_0x872a('0x2e')],{'createdAt':{'$gte':_0x4a7ab7['dateStart'],'$lte':_0x4a7ab7[_0x872a('0x24')]}});}if(_0x12b763[_0x872a('0x22')]['filter']){_0x22b66b['where']=_[_0x872a('0x32')](_0x22b66b['where'],{'$or':_['map'](_0x22b66b['attributes'],function(_0x15bd25){var _0x65f838={};_0x65f838[_0x15bd25]={'$like':'%'+_0x12b763[_0x872a('0x22')][_0x872a('0x34')]+'%'};return _0x65f838;})});}_0x22b66b=_[_0x872a('0x32')]({},_0x22b66b,_0x12b763[_0x872a('0x35')]);return db[_0x872a('0x48')][_0x872a('0x11')]({'where':_0x22b66b['where']})['then'](function(_0x805ad3){_0x118efc[_0x872a('0x11')]=_0x805ad3;if(_0x12b763[_0x872a('0x22')][_0x872a('0x36')]){_0x22b66b[_0x872a('0x37')]=[{'all':!![]}];}return db[_0x872a('0x48')][_0x872a('0x49')](_0x22b66b);})[_0x872a('0x1a')](function(_0x1309c7){_0x118efc[_0x872a('0x38')]=_0x1309c7;return _0x118efc;});}})['then'](respondWithFilteredResult(_0x53f67e,_0x22b66b))[_0x872a('0x39')](handleError(_0x53f67e,null));};function char(_0x274ee6){return _0x872a('0x4a')===typeof _0x274ee6?String[_0x872a('0x4b')][_0x872a('0x16')](null,arguments):_0x274ee6;}function needsEncapsulation(_0x46cc36){return!!_0x46cc36&&(_0x46cc36[_0x872a('0x4c')]()[_0x872a('0x4d')](char(0xd))>=0x0||_0x46cc36[_0x872a('0x4c')]()[_0x872a('0x4d')](char(0xa))>=0x0||_0x46cc36['toString']()['indexOf'](char(0x2c))>=0x0||_0x46cc36[_0x872a('0x4c')]()[_0x872a('0x4d')](char(0x22))>=0x0);}function encapsulate(_0x5e876c){var _0x1dd81d=char(0x22),_0x481912='\x5c'+char(0x22),_0x2b81c1=_0x5e876c[_0x872a('0x4c')]()[_0x872a('0x4e')](new RegExp(_0x1dd81d,'g'),_0x481912);return _0x1dd81d+_0x2b81c1+_0x1dd81d;}exports[_0x872a('0x4f')]=function(_0x345fe6,_0x313d29,_0x264add){var _0x233a80,_0x1dfaf2;var _0x51c857={'dateStart':_0x345fe6['query'][_0x872a('0x23')],'dateEnd':_0x345fe6[_0x872a('0x22')][_0x872a('0x24')]};delete _0x345fe6['query'][_0x872a('0x23')];delete _0x345fe6['query'][_0x872a('0x24')];if(_0x51c857[_0x872a('0x23')]){if(_0x51c857[_0x872a('0x24')]){_0x51c857[_0x872a('0x24')]=moment(_0x51c857['dateEnd'])[_0x872a('0x30')](0x1,_0x872a('0x31'));}else{_0x51c857[_0x872a('0x24')]=moment(_0x51c857[_0x872a('0x23')])[_0x872a('0x30')](0x1,_0x872a('0x31'));}}return db['JscriptySessionReport'][_0x872a('0x49')]({'where':{'ProjectId':_0x345fe6[_0x872a('0x3b')]['id'],'starttime':{'$gte':_0x51c857[_0x872a('0x23')],'$lte':_0x51c857['dateEnd']}}})[_0x872a('0x1a')](handleEntityNotFound(_0x313d29,null))[_0x872a('0x1a')](function(_0x4cb8d9){if(_0x4cb8d9){_0x233a80=_0x4cb8d9;return db[_0x872a('0x50')][_0x872a('0x49')]({'where':{'SessionId':{'$in':_[_0x872a('0x33')](_0x233a80,'id')},'ProjectId':_0x345fe6[_0x872a('0x3b')]['id']},'order':_0x872a('0x51')});}})['then'](handleEntityNotFound(_0x313d29,null))[_0x872a('0x1a')](function(_0x494312){if(_0x494312){_0x1dfaf2=_0x494312;var _0x4e1b19={};for(var _0x32c271=0x0,_0x40066a=_0x1dfaf2[_0x872a('0x29')];_0x32c271<_0x40066a;_0x32c271++){if(!_0x4e1b19[_0x872a('0x2a')](_0x1dfaf2[_0x32c271][_0x872a('0x52')])){_0x4e1b19[_0x1dfaf2[_0x32c271][_0x872a('0x52')]]=needsEncapsulation(_0x1dfaf2[_0x32c271][_0x872a('0x53')])?encapsulate(_0x1dfaf2[_0x32c271][_0x872a('0x53')]):_0x1dfaf2[_0x32c271]['question'];}}var _0x3b16a7=[],_0x4b3339={};for(var _0x2ce549=0x0,_0x271c29=_0x233a80[_0x872a('0x29')];_0x2ce549<_0x271c29;_0x2ce549++){_0x4b3339={'ProjectId':_0x345fe6[_0x872a('0x3b')]['id'],'SessionId':_0x233a80[_0x2ce549]['id'],'StartTime':moment(_0x233a80[_0x2ce549]['starttime'])[_0x872a('0x54')](_0x872a('0x55'))};for(var _0x2c9fa5=0x0,_0x30f6a4=_0x1dfaf2[_0x872a('0x29')];_0x2c9fa5<_0x30f6a4;_0x2c9fa5++){if(_0x1dfaf2[_0x2c9fa5][_0x872a('0x56')]==_0x233a80[_0x2ce549]['id']&&_0x4e1b19[_0x872a('0x2a')](_0x1dfaf2[_0x2c9fa5][_0x872a('0x52')])){_0x4b3339[_0x4e1b19[_0x1dfaf2[_0x2c9fa5][_0x872a('0x52')]]]=_0x1dfaf2[_0x2c9fa5]['answer'];}}for(var _0x17ebb1 in _0x4e1b19){if(!_0x4b3339[_0x872a('0x2a')](_0x4e1b19[_0x17ebb1])){_0x4b3339[_0x4e1b19[_0x17ebb1]]=null;}}_0x3b16a7[_0x872a('0x57')](_0x4b3339);}return _0x3b16a7;}})[_0x872a('0x1a')](function(_0x22cdf1){if(!_[_0x872a('0x58')](_0x22cdf1)){var _0x264d5e=toCsv(_0x22cdf1);var _0x23049f=Date[_0x872a('0x59')]();fs[_0x872a('0x5a')](util[_0x872a('0x54')]('/tmp/Jscripty_Project_%d_Summary_%s.csv',_0x345fe6[_0x872a('0x3b')]['id'],_0x23049f),_0x264d5e);_0x313d29[_0x872a('0x5b')](_0x872a('0x5c'),'attachment;\x20filename='+util[_0x872a('0x54')](_0x872a('0x5d'),_0x345fe6[_0x872a('0x3b')]['id'],_0x23049f));_0x313d29[_0x872a('0x5b')]('Content-type',_0x872a('0x5e'));return _0x313d29[_0x872a('0x5f')](util[_0x872a('0x54')](_0x872a('0x60'),_0x345fe6[_0x872a('0x3b')]['id'],_0x23049f));}else{return _0x313d29[_0x872a('0xe')](0xcc);}})['catch'](handleError(_0x313d29,null));};
\ No newline at end of file
+var _0x429d=['Content-type','text/csv','download','fast-json-patch','request-promise','util','sox','ejs','squel','crypto','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','sendStatus','status','end','json','offset','limit','Content-Range','apply','reject','save','destroy','then','stack','name','index','rawAttributes','model','keys','query','dateEnd','filters','intersection','attributes','fields','nolimit','order','sort','where','pick','dateStart','day','merge','filter','options','JscriptyProject','count','includeAll','include','findAll','rows','catch','length','create','body','find','omit','createdAt','updatedAt','params','getSessions','hasOwnProperty','ProjectId','map','JscriptySessionReport','getAnswers','findOne','JscriptyAnswerReport','add','fromCharCode','indexOf','toString','getSummary','-createdAt','question','starttime','format','YYYY-MM-DD\x20HH:mm:ss','questionId','push','isEmpty','now','writeFileSync','/tmp/Jscripty_Project_%d_Summary_%s.csv','setHeader','Content-disposition','Jscripty_Project_%d_Summary_%s.csv'];(function(_0x4dbaad,_0x730318){var _0x226c72=function(_0x501972){while(--_0x501972){_0x4dbaad['push'](_0x4dbaad['shift']());}};_0x226c72(++_0x730318);}(_0x429d,0x11d));var _0xd429=function(_0xd1d19a,_0x1933f0){_0xd1d19a=_0xd1d19a-0x0;var _0x52a79d=_0x429d[_0xd1d19a];return _0x52a79d;};'use strict';var jsonpatch=require(_0xd429('0x0'));var rp=require(_0xd429('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xd429('0x2'));var path=require('path');var sox=require(_0xd429('0x3'));var csv=require('to-csv');var ejs=require(_0xd429('0x4'));var fs=require('fs');var _=require('lodash');var squel=require(_0xd429('0x5'));var crypto=require(_0xd429('0x6'));var jsforce=require('jsforce');var deskjs=require(_0xd429('0x7'));var toCsv=require(_0xd429('0x8'));var querystring=require(_0xd429('0x9'));var Papa=require(_0xd429('0xa'));var qs=require(_0xd429('0xb'));var logger=require(_0xd429('0xc'))('api');var utils=require(_0xd429('0xd'));var config=require('../../config/environment');var db=require(_0xd429('0xe'))['db'];function respondWithStatusCode(_0x297bfc,_0xb7d7fb){_0xb7d7fb=_0xb7d7fb||0xcc;return function(_0x3ad494){if(_0x3ad494){return _0x297bfc[_0xd429('0xf')](_0xb7d7fb);}return _0x297bfc[_0xd429('0x10')](_0xb7d7fb)[_0xd429('0x11')]();};}function respondWithResult(_0xcd79e6,_0x399e6a){_0x399e6a=_0x399e6a||0xc8;return function(_0x4a15f8){if(_0x4a15f8){return _0xcd79e6['status'](_0x399e6a)[_0xd429('0x12')](_0x4a15f8);}};}function respondWithFilteredResult(_0x514f37,_0x567a5d){return function(_0x3480e4){if(_0x3480e4){var _0x11dd16=_0x3480e4['count'],_0x420a44=_0x567a5d[_0xd429('0x13')],_0x3b275a=_0x567a5d['offset']+_0x567a5d[_0xd429('0x14')],_0x4ebfa8;if(_0x3b275a>=_0x11dd16){_0x3b275a=_0x11dd16;_0x4ebfa8=0xc8;}else{_0x4ebfa8=0xce;}_0x514f37[_0xd429('0x10')](_0x4ebfa8);return _0x514f37['set'](_0xd429('0x15'),_0x420a44+'-'+_0x3b275a+'/'+_0x11dd16)[_0xd429('0x12')](_0x3480e4);}return null;};}function patchUpdates(_0x5910ba){return function(_0x37acac){try{jsonpatch[_0xd429('0x16')](_0x37acac,_0x5910ba,!![]);}catch(_0x1804cc){return BPromise[_0xd429('0x17')](_0x1804cc);}return _0x37acac[_0xd429('0x18')]();};}function saveUpdates(_0x3986e5,_0x244b88){return function(_0x55a8b2){if(_0x55a8b2){return _0x55a8b2['update'](_0x3986e5)['then'](function(_0x22dea1){return _0x22dea1;});}return null;};}function removeEntity(_0x33c14d,_0x4c5b1e){return function(_0x19d681){if(_0x19d681){return _0x19d681[_0xd429('0x19')]()[_0xd429('0x1a')](function(){_0x33c14d['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x462a42,_0x1f8bb7){return function(_0x32f93b){if(!_0x32f93b){_0x462a42['sendStatus'](0x194);}return _0x32f93b;};}function handleError(_0x2219d4,_0x5494e8){_0x5494e8=_0x5494e8||0x1f4;return function(_0x49d5e8){logger['error'](_0x49d5e8[_0xd429('0x1b')]);if(_0x49d5e8['name']){delete _0x49d5e8[_0xd429('0x1c')];}_0x2219d4[_0xd429('0x10')](_0x5494e8)['send'](_0x49d5e8);};}exports[_0xd429('0x1d')]=function(_0x39a6ff,_0x4988fd){var _0x4b251a={},_0x199320={},_0x523905={'count':0x0,'rows':[]};var _0x5cc554=db['JscriptyProject'][_0xd429('0x1e')];_0x199320[_0xd429('0x1f')]=_[_0xd429('0x20')](_0x5cc554);var _0x51d28c={'dateStart':_0x39a6ff[_0xd429('0x21')]['dateStart'],'dateEnd':_0x39a6ff['query']['dateEnd']};delete _0x39a6ff[_0xd429('0x21')]['dateStart'];delete _0x39a6ff[_0xd429('0x21')][_0xd429('0x22')];_0x199320['query']=_[_0xd429('0x20')](_0x39a6ff['query']);_0x199320[_0xd429('0x23')]=_[_0xd429('0x24')](_0x199320[_0xd429('0x1f')],_0x199320[_0xd429('0x21')]);_0x4b251a[_0xd429('0x25')]=_['intersection'](_0x199320[_0xd429('0x1f')],qs[_0xd429('0x26')](_0x39a6ff[_0xd429('0x21')]['fields']));_0x4b251a['attributes']=_0x4b251a[_0xd429('0x25')]['length']?_0x4b251a[_0xd429('0x25')]:_0x199320['model'];if(!_0x39a6ff[_0xd429('0x21')]['hasOwnProperty'](_0xd429('0x27'))){_0x4b251a['limit']=qs[_0xd429('0x14')](_0x39a6ff[_0xd429('0x21')][_0xd429('0x14')]);_0x4b251a[_0xd429('0x13')]=qs[_0xd429('0x13')](_0x39a6ff[_0xd429('0x21')]['offset']);}_0x4b251a[_0xd429('0x28')]=qs[_0xd429('0x29')](_0x39a6ff[_0xd429('0x21')][_0xd429('0x29')]);_0x4b251a[_0xd429('0x2a')]=qs[_0xd429('0x23')](_[_0xd429('0x2b')](_0x39a6ff['query'],_0x199320[_0xd429('0x23')]));if(_0x51d28c[_0xd429('0x2c')]){if(_0x51d28c['dateEnd']){_0x51d28c[_0xd429('0x22')]=moment(_0x51d28c[_0xd429('0x22')])['add'](0x1,_0xd429('0x2d'));}else{_0x51d28c[_0xd429('0x22')]=moment(_0x51d28c[_0xd429('0x2c')])['add'](0x1,_0xd429('0x2d'));}_[_0xd429('0x2e')](_0x4b251a['where'],{'createdAt':{'$gte':_0x51d28c['dateStart'],'$lte':_0x51d28c[_0xd429('0x22')]}});}if(_0x39a6ff['query'][_0xd429('0x2f')]){_0x4b251a[_0xd429('0x2a')]=_[_0xd429('0x2e')](_0x4b251a[_0xd429('0x2a')],{'$or':_['map'](_0x4b251a['attributes'],function(_0x241b82){var _0xc70c0={};_0xc70c0[_0x241b82]={'$like':'%'+_0x39a6ff['query']['filter']+'%'};return _0xc70c0;})});}_0x4b251a=_[_0xd429('0x2e')]({},_0x4b251a,_0x39a6ff[_0xd429('0x30')]);var _0x41ad8d={'where':_0x4b251a[_0xd429('0x2a')]};return db[_0xd429('0x31')]['count'](_0x41ad8d)[_0xd429('0x1a')](function(_0x141bbc){_0x523905[_0xd429('0x32')]=_0x141bbc;if(_0x39a6ff[_0xd429('0x21')][_0xd429('0x33')]){_0x4b251a[_0xd429('0x34')]=[{'all':!![]}];}return db[_0xd429('0x31')][_0xd429('0x35')](_0x4b251a);})[_0xd429('0x1a')](function(_0x41f47d){_0x523905[_0xd429('0x36')]=_0x41f47d;return _0x523905;})[_0xd429('0x1a')](respondWithFilteredResult(_0x4988fd,_0x4b251a))[_0xd429('0x37')](handleError(_0x4988fd,null));};exports['show']=function(_0x3a117b,_0x12da89){var _0x3458bd={'raw':![],'where':{'id':_0x3a117b['params']['id']}},_0x459ea6={};_0x459ea6[_0xd429('0x1f')]=_[_0xd429('0x20')](db[_0xd429('0x31')][_0xd429('0x1e')]);_0x459ea6[_0xd429('0x21')]=_[_0xd429('0x20')](_0x3a117b[_0xd429('0x21')]);_0x459ea6['filters']=_[_0xd429('0x24')](_0x459ea6[_0xd429('0x1f')],_0x459ea6['query']);_0x3458bd[_0xd429('0x25')]=_[_0xd429('0x24')](_0x459ea6[_0xd429('0x1f')],qs[_0xd429('0x26')](_0x3a117b[_0xd429('0x21')][_0xd429('0x26')]));_0x3458bd['attributes']=_0x3458bd[_0xd429('0x25')][_0xd429('0x38')]?_0x3458bd[_0xd429('0x25')]:_0x459ea6['model'];if(_0x3a117b[_0xd429('0x21')][_0xd429('0x33')]){_0x3458bd[_0xd429('0x34')]=[{'all':!![]}];}_0x3458bd=_['merge']({},_0x3458bd,_0x3a117b['options']);return db[_0xd429('0x31')]['find'](_0x3458bd)['then'](handleEntityNotFound(_0x12da89,null))[_0xd429('0x1a')](respondWithResult(_0x12da89,null))[_0xd429('0x37')](handleError(_0x12da89,null));};exports['create']=function(_0x3f40b0,_0x480f41){return db['JscriptyProject'][_0xd429('0x39')](_0x3f40b0[_0xd429('0x3a')],{})[_0xd429('0x1a')](respondWithResult(_0x480f41,0xc9))[_0xd429('0x37')](handleError(_0x480f41,null));};exports['clone']=function(_0x40ea9b,_0x420180){var _0x432719={'raw':![],'where':{'id':_0x40ea9b['params']['id']}},_0x165bb9={};_0x165bb9[_0xd429('0x1f')]=_['keys'](db['JscriptyProject'][_0xd429('0x1e')]);_0x432719[_0xd429('0x25')]=_[_0xd429('0x24')](_0x165bb9[_0xd429('0x1f')],qs['fields'](_0x40ea9b[_0xd429('0x21')][_0xd429('0x26')]));_0x432719[_0xd429('0x25')]=_0x432719[_0xd429('0x25')][_0xd429('0x38')]?_0x432719[_0xd429('0x25')]:_0x165bb9[_0xd429('0x1f')];if(_0x40ea9b[_0xd429('0x21')][_0xd429('0x33')]){_0x432719[_0xd429('0x34')]=[{'all':!![]}];}_0x432719=_['merge']({},_0x432719,_0x40ea9b['options']);return db[_0xd429('0x31')][_0xd429('0x3b')](_0x432719)[_0xd429('0x1a')](handleEntityNotFound(_0x420180,null))['then'](function(_0x5f4370){if(_0x5f4370){var _0x24ed89=_0x5f4370['get']({'plain':!![]});_0x24ed89=qs[_0xd429('0x3c')](_0x24ed89,['id',_0xd429('0x3d'),'updatedAt']);_0x40ea9b['body']=_['omit'](_0x40ea9b['body'],['id',_0xd429('0x3d'),_0xd429('0x3e')]);return db['JscriptyProject'][_0xd429('0x39')](_[_0xd429('0x2e')](_0x24ed89,_0x40ea9b[_0xd429('0x3a')]),{'include':_0x40ea9b[_0xd429('0x21')]['includeAll']?[{'all':!![]}]:undefined});}})['then'](respondWithResult(_0x420180,0xc9))[_0xd429('0x37')](handleError(_0x420180,null));};exports['update']=function(_0x2d947e,_0x26c98c){if(_0x2d947e['body']['id']){delete _0x2d947e[_0xd429('0x3a')]['id'];}return db['JscriptyProject'][_0xd429('0x3b')]({'where':{'id':_0x2d947e[_0xd429('0x3f')]['id']}})['then'](handleEntityNotFound(_0x26c98c,null))[_0xd429('0x1a')](saveUpdates(_0x2d947e[_0xd429('0x3a')],null))[_0xd429('0x1a')](respondWithResult(_0x26c98c,null))[_0xd429('0x37')](handleError(_0x26c98c,null));};exports[_0xd429('0x19')]=function(_0x5c05b3,_0x772c6e){return db[_0xd429('0x31')][_0xd429('0x3b')]({'where':{'id':_0x5c05b3[_0xd429('0x3f')]['id']}})[_0xd429('0x1a')](handleEntityNotFound(_0x772c6e,null))[_0xd429('0x1a')](removeEntity(_0x772c6e,null))[_0xd429('0x37')](handleError(_0x772c6e,null));};exports[_0xd429('0x40')]=function(_0x323747,_0x939a96,_0x24ebf2){var _0x3c9348={'raw':!![],'where':{}};var _0x47031e={};var _0x1344db={'count':0x0,'rows':[]};return db['JscriptyProject']['findOne']({'where':{'id':_0x323747[_0xd429('0x3f')]['id']}})[_0xd429('0x1a')](handleEntityNotFound(_0x939a96,null))[_0xd429('0x1a')](function(_0x8ff7b7){if(_0x8ff7b7){_0x47031e['model']=_['keys'](db['JscriptySessionReport'][_0xd429('0x1e')]);_0x47031e[_0xd429('0x21')]=_[_0xd429('0x20')](_0x323747[_0xd429('0x21')]);_0x47031e[_0xd429('0x23')]=_[_0xd429('0x24')](_0x47031e[_0xd429('0x1f')],_0x47031e['query']);_0x3c9348[_0xd429('0x25')]=_[_0xd429('0x24')](_0x47031e['model'],qs[_0xd429('0x26')](_0x323747[_0xd429('0x21')][_0xd429('0x26')]));_0x3c9348[_0xd429('0x25')]=_0x3c9348[_0xd429('0x25')][_0xd429('0x38')]?_0x3c9348[_0xd429('0x25')]:_0x47031e[_0xd429('0x1f')];if(!_0x323747['query'][_0xd429('0x41')](_0xd429('0x27'))){_0x3c9348['limit']=qs[_0xd429('0x14')](_0x323747[_0xd429('0x21')][_0xd429('0x14')]);_0x3c9348[_0xd429('0x13')]=qs['offset'](_0x323747[_0xd429('0x21')]['offset']);}_0x3c9348['order']=qs['sort'](_0x323747[_0xd429('0x21')]['sort']);_0x3c9348[_0xd429('0x2a')]=qs['filters'](_['pick'](_0x323747[_0xd429('0x21')],_0x47031e[_0xd429('0x23')]));_0x3c9348['where'][_0xd429('0x42')]=_0x8ff7b7['id'];if(_0x323747['query'][_0xd429('0x2f')]){_0x3c9348[_0xd429('0x2a')]=_['merge'](_0x3c9348['where'],{'$or':_[_0xd429('0x43')](_0x3c9348[_0xd429('0x25')],function(_0x270fd8){var _0x5c3d13={};_0x5c3d13[_0x270fd8]={'$like':'%'+_0x323747[_0xd429('0x21')][_0xd429('0x2f')]+'%'};return _0x5c3d13;})});}_0x3c9348=_[_0xd429('0x2e')]({},_0x3c9348,_0x323747['options']);return db['JscriptySessionReport'][_0xd429('0x32')]({'where':_0x3c9348['where']})[_0xd429('0x1a')](function(_0x3bb195){_0x1344db[_0xd429('0x32')]=_0x3bb195;if(_0x323747[_0xd429('0x21')][_0xd429('0x33')]){_0x3c9348[_0xd429('0x34')]=[{'all':!![]}];}return db[_0xd429('0x44')][_0xd429('0x35')](_0x3c9348);})[_0xd429('0x1a')](function(_0x101725){_0x1344db[_0xd429('0x36')]=_0x101725;return _0x1344db;});}})[_0xd429('0x1a')](respondWithFilteredResult(_0x939a96,_0x3c9348))['catch'](handleError(_0x939a96,null));};exports[_0xd429('0x45')]=function(_0x26a856,_0x91b97a,_0x5779ac){var _0x2b7fe1={'raw':!![],'where':{}};var _0x1817f3={};var _0x2d5e47={'count':0x0,'rows':[]};var _0x5655e0={'dateStart':_0x26a856[_0xd429('0x21')][_0xd429('0x2c')],'dateEnd':_0x26a856[_0xd429('0x21')][_0xd429('0x22')]};delete _0x26a856['query'][_0xd429('0x2c')];delete _0x26a856['query'][_0xd429('0x22')];return db[_0xd429('0x31')][_0xd429('0x46')]({'where':{'id':_0x26a856[_0xd429('0x3f')]['id']}})[_0xd429('0x1a')](handleEntityNotFound(_0x91b97a,null))[_0xd429('0x1a')](function(_0x1e2c5f){if(_0x1e2c5f){_0x1817f3[_0xd429('0x1f')]=_[_0xd429('0x20')](db[_0xd429('0x47')]['rawAttributes']);_0x1817f3[_0xd429('0x21')]=_['keys'](_0x26a856[_0xd429('0x21')]);_0x1817f3[_0xd429('0x23')]=_[_0xd429('0x24')](_0x1817f3[_0xd429('0x1f')],_0x1817f3[_0xd429('0x21')]);_0x2b7fe1[_0xd429('0x25')]=_['intersection'](_0x1817f3[_0xd429('0x1f')],qs[_0xd429('0x26')](_0x26a856[_0xd429('0x21')]['fields']));_0x2b7fe1[_0xd429('0x25')]=_0x2b7fe1[_0xd429('0x25')]['length']?_0x2b7fe1['attributes']:_0x1817f3['model'];if(!_0x26a856['query']['hasOwnProperty'](_0xd429('0x27'))){_0x2b7fe1['limit']=qs[_0xd429('0x14')](_0x26a856[_0xd429('0x21')][_0xd429('0x14')]);_0x2b7fe1[_0xd429('0x13')]=qs[_0xd429('0x13')](_0x26a856[_0xd429('0x21')][_0xd429('0x13')]);}_0x2b7fe1[_0xd429('0x28')]=qs[_0xd429('0x29')](_0x26a856[_0xd429('0x21')][_0xd429('0x29')]);_0x2b7fe1[_0xd429('0x2a')]=qs[_0xd429('0x23')](_['pick'](_0x26a856[_0xd429('0x21')],_0x1817f3[_0xd429('0x23')]));_0x2b7fe1[_0xd429('0x2a')][_0xd429('0x42')]=_0x1e2c5f['id'];if(_0x5655e0[_0xd429('0x2c')]){if(_0x5655e0[_0xd429('0x22')]){_0x5655e0[_0xd429('0x22')]=moment(_0x5655e0['dateEnd'])[_0xd429('0x48')](0x1,'day');}else{_0x5655e0[_0xd429('0x22')]=moment(_0x5655e0[_0xd429('0x2c')])[_0xd429('0x48')](0x1,_0xd429('0x2d'));}_[_0xd429('0x2e')](_0x2b7fe1[_0xd429('0x2a')],{'createdAt':{'$gte':_0x5655e0[_0xd429('0x2c')],'$lte':_0x5655e0[_0xd429('0x22')]}});}if(_0x26a856['query']['filter']){_0x2b7fe1['where']=_[_0xd429('0x2e')](_0x2b7fe1['where'],{'$or':_[_0xd429('0x43')](_0x2b7fe1[_0xd429('0x25')],function(_0x1b01bd){var _0x5a1e25={};_0x5a1e25[_0x1b01bd]={'$like':'%'+_0x26a856['query'][_0xd429('0x2f')]+'%'};return _0x5a1e25;})});}_0x2b7fe1=_[_0xd429('0x2e')]({},_0x2b7fe1,_0x26a856[_0xd429('0x30')]);return db['JscriptyAnswerReport'][_0xd429('0x32')]({'where':_0x2b7fe1[_0xd429('0x2a')]})[_0xd429('0x1a')](function(_0xfec31d){_0x2d5e47[_0xd429('0x32')]=_0xfec31d;if(_0x26a856['query'][_0xd429('0x33')]){_0x2b7fe1[_0xd429('0x34')]=[{'all':!![]}];}return db[_0xd429('0x47')][_0xd429('0x35')](_0x2b7fe1);})[_0xd429('0x1a')](function(_0x513cb6){_0x2d5e47['rows']=_0x513cb6;return _0x2d5e47;});}})['then'](respondWithFilteredResult(_0x91b97a,_0x2b7fe1))[_0xd429('0x37')](handleError(_0x91b97a,null));};function char(_0x48fc40){return'number'===typeof _0x48fc40?String[_0xd429('0x49')][_0xd429('0x16')](null,arguments):_0x48fc40;}function needsEncapsulation(_0x7174c2){return!!_0x7174c2&&(_0x7174c2['toString']()[_0xd429('0x4a')](char(0xd))>=0x0||_0x7174c2['toString']()['indexOf'](char(0xa))>=0x0||_0x7174c2[_0xd429('0x4b')]()[_0xd429('0x4a')](char(0x2c))>=0x0||_0x7174c2[_0xd429('0x4b')]()['indexOf'](char(0x22))>=0x0);}function encapsulate(_0x58eed9){var _0x54de01=char(0x22),_0x1b4d95='\x5c'+char(0x22),_0xade3af=_0x58eed9[_0xd429('0x4b')]()['replace'](new RegExp(_0x54de01,'g'),_0x1b4d95);return _0x54de01+_0xade3af+_0x54de01;}exports[_0xd429('0x4c')]=function(_0xe86b12,_0x21c171,_0x31eaf0){var _0x1f2386,_0x4ecfc7;var _0x5ccc62={'dateStart':_0xe86b12[_0xd429('0x21')]['dateStart'],'dateEnd':_0xe86b12[_0xd429('0x21')][_0xd429('0x22')]};delete _0xe86b12[_0xd429('0x21')][_0xd429('0x2c')];delete _0xe86b12[_0xd429('0x21')][_0xd429('0x22')];if(_0x5ccc62[_0xd429('0x2c')]){if(_0x5ccc62['dateEnd']){_0x5ccc62[_0xd429('0x22')]=moment(_0x5ccc62['dateEnd'])['add'](0x1,_0xd429('0x2d'));}else{_0x5ccc62['dateEnd']=moment(_0x5ccc62[_0xd429('0x2c')])[_0xd429('0x48')](0x1,_0xd429('0x2d'));}}return db[_0xd429('0x44')][_0xd429('0x35')]({'where':{'ProjectId':_0xe86b12[_0xd429('0x3f')]['id'],'starttime':{'$gte':_0x5ccc62[_0xd429('0x2c')],'$lte':_0x5ccc62[_0xd429('0x22')]}}})['then'](handleEntityNotFound(_0x21c171,null))[_0xd429('0x1a')](function(_0x120379){if(_0x120379){_0x1f2386=_0x120379;return db['JscriptyQuestionReport']['findAll']({'where':{'SessionId':{'$in':_[_0xd429('0x43')](_0x1f2386,'id')},'ProjectId':_0xe86b12[_0xd429('0x3f')]['id']},'order':_0xd429('0x4d')});}})['then'](handleEntityNotFound(_0x21c171,null))['then'](function(_0xb14438){if(_0xb14438){_0x4ecfc7=_0xb14438;var _0x5c42dd={};for(var _0x1bc250=0x0,_0x14376c=_0x4ecfc7[_0xd429('0x38')];_0x1bc250<_0x14376c;_0x1bc250++){if(!_0x5c42dd['hasOwnProperty'](_0x4ecfc7[_0x1bc250]['questionId'])){_0x5c42dd[_0x4ecfc7[_0x1bc250]['questionId']]=needsEncapsulation(_0x4ecfc7[_0x1bc250]['question'])?encapsulate(_0x4ecfc7[_0x1bc250]['question']):_0x4ecfc7[_0x1bc250][_0xd429('0x4e')];}}var _0x5ccb2f=[],_0x549bd1={};for(var _0x1597cc=0x0,_0x5b15d4=_0x1f2386['length'];_0x1597cc<_0x5b15d4;_0x1597cc++){_0x549bd1={'ProjectId':_0xe86b12[_0xd429('0x3f')]['id'],'SessionId':_0x1f2386[_0x1597cc]['id'],'StartTime':moment(_0x1f2386[_0x1597cc][_0xd429('0x4f')])[_0xd429('0x50')](_0xd429('0x51'))};for(var _0xcdb45=0x0,_0x302100=_0x4ecfc7['length'];_0xcdb45<_0x302100;_0xcdb45++){if(_0x4ecfc7[_0xcdb45]['SessionId']==_0x1f2386[_0x1597cc]['id']&&_0x5c42dd[_0xd429('0x41')](_0x4ecfc7[_0xcdb45][_0xd429('0x52')])){_0x549bd1[_0x5c42dd[_0x4ecfc7[_0xcdb45][_0xd429('0x52')]]]=_0x4ecfc7[_0xcdb45]['answer'];}}for(var _0x34c1cf in _0x5c42dd){if(!_0x549bd1[_0xd429('0x41')](_0x5c42dd[_0x34c1cf])){_0x549bd1[_0x5c42dd[_0x34c1cf]]=null;}}_0x5ccb2f[_0xd429('0x53')](_0x549bd1);}return _0x5ccb2f;}})[_0xd429('0x1a')](function(_0x3279bc){if(!_[_0xd429('0x54')](_0x3279bc)){var _0x25ced9=toCsv(_0x3279bc);var _0x26da08=Date[_0xd429('0x55')]();fs[_0xd429('0x56')](util[_0xd429('0x50')](_0xd429('0x57'),_0xe86b12['params']['id'],_0x26da08),_0x25ced9);_0x21c171[_0xd429('0x58')](_0xd429('0x59'),'attachment;\x20filename='+util[_0xd429('0x50')](_0xd429('0x5a'),_0xe86b12['params']['id'],_0x26da08));_0x21c171['setHeader'](_0xd429('0x5b'),_0xd429('0x5c'));return _0x21c171[_0xd429('0x5d')](util[_0xd429('0x50')](_0xd429('0x57'),_0xe86b12[_0xd429('0x3f')]['id'],_0x26da08));}else{return _0x21c171['sendStatus'](0xcc);}})[_0xd429('0x37')](handleError(_0x21c171,null));};
\ No newline at end of file
index 79d48b3..3ae8096 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe8cd=['api','moment','bluebird','request-promise','./jscriptyProject.attributes','exports','define','JscriptyProject','jscripty_projects','util','../../config/logger'];(function(_0x39f23a,_0x4f16d2){var _0x4326db=function(_0x21f27e){while(--_0x21f27e){_0x39f23a['push'](_0x39f23a['shift']());}};_0x4326db(++_0x4f16d2);}(_0xe8cd,0x106));var _0xde8c=function(_0x9b2bb0,_0x3965b1){_0x9b2bb0=_0x9b2bb0-0x0;var _0x2cdb3b=_0xe8cd[_0x9b2bb0];return _0x2cdb3b;};'use strict';var _=require('lodash');var util=require(_0xde8c('0x0'));var logger=require(_0xde8c('0x1'))(_0xde8c('0x2'));var moment=require(_0xde8c('0x3'));var BPromise=require(_0xde8c('0x4'));var rp=require(_0xde8c('0x5'));var attributes=require(_0xde8c('0x6'));module[_0xde8c('0x7')]=function(_0x29af30,_0xa0d4d){return _0x29af30[_0xde8c('0x8')](_0xde8c('0x9'),attributes,{'tableName':_0xde8c('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7540=['request-promise','./jscriptyProject.attributes','exports','JscriptyProject','jscripty_projects','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x8034aa,_0x4a0670){var _0x93e779=function(_0x27d8a1){while(--_0x27d8a1){_0x8034aa['push'](_0x8034aa['shift']());}};_0x93e779(++_0x4a0670);}(_0x7540,0x1d3));var _0x0754=function(_0x5676df,_0x14d122){_0x5676df=_0x5676df-0x0;var _0x1fb878=_0x7540[_0x5676df];return _0x1fb878;};'use strict';var _=require(_0x0754('0x0'));var util=require(_0x0754('0x1'));var logger=require(_0x0754('0x2'))(_0x0754('0x3'));var moment=require(_0x0754('0x4'));var BPromise=require(_0x0754('0x5'));var rp=require(_0x0754('0x6'));var attributes=require(_0x0754('0x7'));module[_0x0754('0x8')]=function(_0xc60b2c,_0xc8fbb5){return _0xc60b2c['define'](_0x0754('0x9'),attributes,{'tableName':_0x0754('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index cd55c00..cfd8e8f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3a28=['then','info','JscriptyProject,\x20%s,\x20%s','request\x20sent','debug','JscriptyProject,\x20%s,\x20%s,\x20%s','error','message','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x5f1d5a,_0x1c85a7){var _0x449071=function(_0x50549c){while(--_0x50549c){_0x5f1d5a['push'](_0x5f1d5a['shift']());}};_0x449071(++_0x1c85a7);}(_0x3a28,0xec));var _0x83a2=function(_0x2064e5,_0x4f6fa2){_0x2064e5=_0x2064e5-0x0;var _0x21a233=_0x3a28[_0x2064e5];return _0x21a233;};'use strict';var _=require(_0x83a2('0x0'));var util=require('util');var moment=require(_0x83a2('0x1'));var BPromise=require(_0x83a2('0x2'));var rs=require(_0x83a2('0x3'));var fs=require('fs');var db=require(_0x83a2('0x4'))['db'];var utils=require(_0x83a2('0x5'));var logger=require(_0x83a2('0x6'))(_0x83a2('0x7'));var config=require(_0x83a2('0x8'));var jayson=require(_0x83a2('0x9'));var client=jayson[_0x83a2('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x334d7a,_0x5bf107,_0x254c32){return new BPromise(function(_0x3c2724,_0x472e11){return client['request'](_0x334d7a,_0x254c32)[_0x83a2('0xb')](function(_0x5eb726){logger[_0x83a2('0xc')](_0x83a2('0xd'),_0x5bf107,_0x83a2('0xe'));logger[_0x83a2('0xf')](_0x83a2('0x10'),_0x5bf107,_0x83a2('0xe'),JSON['stringify'](_0x5eb726));if(_0x5eb726['error']){if(_0x5eb726[_0x83a2('0x11')]['code']===0x1f4){logger[_0x83a2('0x11')]('JscriptyProject,\x20%s,\x20%s',_0x5bf107,_0x5eb726[_0x83a2('0x11')]['message']);return _0x472e11(_0x5eb726['error'][_0x83a2('0x12')]);}logger[_0x83a2('0x11')](_0x83a2('0xd'),_0x5bf107,_0x5eb726[_0x83a2('0x11')]['message']);return _0x3c2724(_0x5eb726[_0x83a2('0x11')][_0x83a2('0x12')]);}else{logger[_0x83a2('0xc')](_0x83a2('0xd'),_0x5bf107,_0x83a2('0xe'));_0x3c2724(_0x5eb726['result'][_0x83a2('0x12')]);}})['catch'](function(_0x1ed0e8){logger[_0x83a2('0x11')](_0x83a2('0xd'),_0x5bf107,_0x1ed0e8);_0x472e11(_0x1ed0e8);});});}
\ No newline at end of file
+var _0x2a27=['request\x20sent','debug','stringify','error','code','message','catch','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','JscriptyProject,\x20%s,\x20%s'];(function(_0x446850,_0x33ee5d){var _0x571a4e=function(_0x2dd861){while(--_0x2dd861){_0x446850['push'](_0x446850['shift']());}};_0x571a4e(++_0x33ee5d);}(_0x2a27,0xc4));var _0x72a2=function(_0x2dc380,_0x4a242c){_0x2dc380=_0x2dc380-0x0;var _0x44fda0=_0x2a27[_0x2dc380];return _0x44fda0;};'use strict';var _=require(_0x72a2('0x0'));var util=require('util');var moment=require(_0x72a2('0x1'));var BPromise=require(_0x72a2('0x2'));var rs=require(_0x72a2('0x3'));var fs=require('fs');var db=require(_0x72a2('0x4'))['db'];var utils=require(_0x72a2('0x5'));var logger=require(_0x72a2('0x6'))(_0x72a2('0x7'));var config=require(_0x72a2('0x8'));var jayson=require(_0x72a2('0x9'));var client=jayson[_0x72a2('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x21ca5a,_0x537401,_0x31029e){return new BPromise(function(_0x53366d,_0x2bb7c5){return client[_0x72a2('0xb')](_0x21ca5a,_0x31029e)[_0x72a2('0xc')](function(_0x4ed593){logger['info'](_0x72a2('0xd'),_0x537401,_0x72a2('0xe'));logger[_0x72a2('0xf')]('JscriptyProject,\x20%s,\x20%s,\x20%s',_0x537401,_0x72a2('0xe'),JSON[_0x72a2('0x10')](_0x4ed593));if(_0x4ed593[_0x72a2('0x11')]){if(_0x4ed593[_0x72a2('0x11')][_0x72a2('0x12')]===0x1f4){logger[_0x72a2('0x11')](_0x72a2('0xd'),_0x537401,_0x4ed593[_0x72a2('0x11')][_0x72a2('0x13')]);return _0x2bb7c5(_0x4ed593[_0x72a2('0x11')][_0x72a2('0x13')]);}logger[_0x72a2('0x11')](_0x72a2('0xd'),_0x537401,_0x4ed593['error'][_0x72a2('0x13')]);return _0x53366d(_0x4ed593[_0x72a2('0x11')][_0x72a2('0x13')]);}else{logger['info'](_0x72a2('0xd'),_0x537401,_0x72a2('0xe'));_0x53366d(_0x4ed593['result']['message']);}})[_0x72a2('0x14')](function(_0x27ab31){logger[_0x72a2('0x11')]('JscriptyProject,\x20%s,\x20%s',_0x537401,_0x27ab31);_0x2bb7c5(_0x27ab31);});});}
\ No newline at end of file
index 2ac8f76..ab2d87b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1d6a=['index','/describe','/:id','show','create','put','update','destroy','multer','path','express','../../components/interaction/service','../../config/environment','./jscriptyQuestionReport.controller','get','isAuthenticated'];(function(_0x1390ba,_0xff2d03){var _0x42bf4e=function(_0x31ac17){while(--_0x31ac17){_0x1390ba['push'](_0x1390ba['shift']());}};_0x42bf4e(++_0xff2d03);}(_0x1d6a,0x68));var _0xa1d6=function(_0x46e363,_0x45d7e2){_0x46e363=_0x46e363-0x0;var _0x3fb059=_0x1d6a[_0x46e363];return _0x3fb059;};'use strict';var multer=require(_0xa1d6('0x0'));var util=require('util');var path=require(_0xa1d6('0x1'));var express=require(_0xa1d6('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xa1d6('0x3'));var config=require(_0xa1d6('0x4'));var controller=require(_0xa1d6('0x5'));router[_0xa1d6('0x6')]('/',auth[_0xa1d6('0x7')](),controller[_0xa1d6('0x8')]);router[_0xa1d6('0x6')](_0xa1d6('0x9'),auth[_0xa1d6('0x7')](),controller['describe']);router[_0xa1d6('0x6')](_0xa1d6('0xa'),auth[_0xa1d6('0x7')](),controller[_0xa1d6('0xb')]);router['post']('/',auth[_0xa1d6('0x7')](),controller[_0xa1d6('0xc')]);router[_0xa1d6('0xd')](_0xa1d6('0xa'),auth['isAuthenticated'](),controller[_0xa1d6('0xe')]);router['delete'](_0xa1d6('0xa'),auth[_0xa1d6('0x7')](),controller[_0xa1d6('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0xf65f=['util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./jscriptyQuestionReport.controller','/describe','isAuthenticated','get','/:id','post','put','update','delete'];(function(_0x165dba,_0x3fbf9f){var _0x15b3fd=function(_0x3ced39){while(--_0x3ced39){_0x165dba['push'](_0x165dba['shift']());}};_0x15b3fd(++_0x3fbf9f);}(_0xf65f,0xe0));var _0xff65=function(_0x3a508a,_0x358c16){_0x3a508a=_0x3a508a-0x0;var _0x5a8c34=_0xf65f[_0x3a508a];return _0x5a8c34;};'use strict';var multer=require('multer');var util=require(_0xff65('0x0'));var path=require(_0xff65('0x1'));var express=require(_0xff65('0x2'));var router=express[_0xff65('0x3')]();var auth=require(_0xff65('0x4'));var interaction=require(_0xff65('0x5'));var config=require(_0xff65('0x6'));var controller=require(_0xff65('0x7'));router['get']('/',auth['isAuthenticated'](),controller['index']);router['get'](_0xff65('0x8'),auth[_0xff65('0x9')](),controller['describe']);router[_0xff65('0xa')](_0xff65('0xb'),auth[_0xff65('0x9')](),controller['show']);router[_0xff65('0xc')]('/',auth[_0xff65('0x9')](),controller['create']);router[_0xff65('0xd')]('/:id',auth['isAuthenticated'](),controller[_0xff65('0xe')]);router[_0xff65('0xf')](_0xff65('0xb'),auth[_0xff65('0x9')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 16f9b10..5b93170 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x81a4=['STRING','TEXT','sequelize','exports'];(function(_0x8c43de,_0x90ff31){var _0xa6591b=function(_0x469716){while(--_0x469716){_0x8c43de['push'](_0x8c43de['shift']());}};_0xa6591b(++_0x90ff31);}(_0x81a4,0x1a6));var _0x481a=function(_0x1dfa63,_0x362bd4){_0x1dfa63=_0x1dfa63-0x0;var _0x26f2a9=_0x81a4[_0x1dfa63];return _0x26f2a9;};'use strict';var Sequelize=require(_0x481a('0x0'));module[_0x481a('0x1')]={'question':{'type':Sequelize[_0x481a('0x2')]},'answer':{'type':Sequelize[_0x481a('0x3')]('long')},'membername':{'type':Sequelize[_0x481a('0x2')]},'projectname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0x481a('0x2')]},'uniqueid':{'type':Sequelize[_0x481a('0x2')]},'calleridname':{'type':Sequelize[_0x481a('0x2')]},'calleridnum':{'type':Sequelize['STRING']},'questionId':{'type':Sequelize[_0x481a('0x2')]}};
\ No newline at end of file
+var _0x9780=['STRING','TEXT','long'];(function(_0x5792d6,_0x57e8fe){var _0x2c7e59=function(_0x4f5d16){while(--_0x4f5d16){_0x5792d6['push'](_0x5792d6['shift']());}};_0x2c7e59(++_0x57e8fe);}(_0x9780,0x1d4));var _0x0978=function(_0x543c51,_0xff0084){_0x543c51=_0x543c51-0x0;var _0x360555=_0x9780[_0x543c51];return _0x360555;};'use strict';var Sequelize=require('sequelize');module['exports']={'question':{'type':Sequelize[_0x0978('0x0')]},'answer':{'type':Sequelize[_0x0978('0x1')](_0x0978('0x2'))},'membername':{'type':Sequelize[_0x0978('0x0')]},'projectname':{'type':Sequelize[_0x0978('0x0')]},'queue':{'type':Sequelize[_0x0978('0x0')]},'uniqueid':{'type':Sequelize[_0x0978('0x0')]},'calleridname':{'type':Sequelize[_0x0978('0x0')]},'calleridnum':{'type':Sequelize[_0x0978('0x0')]},'questionId':{'type':Sequelize[_0x0978('0x0')]}};
\ No newline at end of file
index 3467f64..5f5f18a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe70f=['order','sort','where','pick','add','day','merge','filter','options','includeAll','findAll','catch','show','params','length','include','find','create','body','describe','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','squel','crypto','querystring','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','reject','save','update','then','destroy','end','error','stack','name','index','JscriptyQuestionReport','rawAttributes','query','dateStart','dateEnd','keys','filters','intersection','model','fields','attributes','hasOwnProperty','nolimit'];(function(_0x1fe607,_0x3c3b7d){var _0x201b0e=function(_0x394743){while(--_0x394743){_0x1fe607['push'](_0x1fe607['shift']());}};_0x201b0e(++_0x3c3b7d);}(_0xe70f,0x96));var _0xfe70=function(_0x4f990a,_0x58b285){_0x4f990a=_0x4f990a-0x0;var _0xff3fa4=_0xe70f[_0x4f990a];return _0xff3fa4;};'use strict';var jsonpatch=require(_0xfe70('0x0'));var rp=require(_0xfe70('0x1'));var moment=require(_0xfe70('0x2'));var BPromise=require('bluebird');var Mustache=require(_0xfe70('0x3'));var util=require(_0xfe70('0x4'));var path=require(_0xfe70('0x5'));var sox=require(_0xfe70('0x6'));var csv=require(_0xfe70('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xfe70('0x8'));var crypto=require(_0xfe70('0x9'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xfe70('0xa'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0xfe70('0xb'))(_0xfe70('0xc'));var utils=require('../../config/utils');var config=require(_0xfe70('0xd'));var db=require(_0xfe70('0xe'))['db'];function respondWithStatusCode(_0x999f9f,_0x5be0d2){_0x5be0d2=_0x5be0d2||0xcc;return function(_0x5672b6){if(_0x5672b6){return _0x999f9f[_0xfe70('0xf')](_0x5be0d2);}return _0x999f9f[_0xfe70('0x10')](_0x5be0d2)['end']();};}function respondWithResult(_0x3f6778,_0x298f7b){_0x298f7b=_0x298f7b||0xc8;return function(_0x356b8f){if(_0x356b8f){return _0x3f6778[_0xfe70('0x10')](_0x298f7b)[_0xfe70('0x11')](_0x356b8f);}};}function respondWithFilteredResult(_0x2ae952,_0x3bd984){return function(_0x13568b){if(_0x13568b){var _0x4a3327=_0x13568b[_0xfe70('0x12')],_0x5995c1=_0x3bd984[_0xfe70('0x13')],_0x32f366=_0x3bd984['offset']+_0x3bd984[_0xfe70('0x14')],_0x1deab7;if(_0x32f366>=_0x4a3327){_0x32f366=_0x4a3327;_0x1deab7=0xc8;}else{_0x1deab7=0xce;}_0x2ae952[_0xfe70('0x10')](_0x1deab7);return _0x2ae952[_0xfe70('0x15')]('Content-Range',_0x5995c1+'-'+_0x32f366+'/'+_0x4a3327)[_0xfe70('0x11')](_0x13568b);}return null;};}function patchUpdates(_0x93f282){return function(_0x5cedec){try{jsonpatch['apply'](_0x5cedec,_0x93f282,!![]);}catch(_0x3bd558){return BPromise[_0xfe70('0x16')](_0x3bd558);}return _0x5cedec[_0xfe70('0x17')]();};}function saveUpdates(_0xeb529f,_0x3482b1){return function(_0x7d2341){if(_0x7d2341){return _0x7d2341[_0xfe70('0x18')](_0xeb529f)[_0xfe70('0x19')](function(_0x50f220){return _0x50f220;});}return null;};}function removeEntity(_0x95f21a,_0x52b9fc){return function(_0x33be4e){if(_0x33be4e){return _0x33be4e[_0xfe70('0x1a')]()[_0xfe70('0x19')](function(){_0x95f21a['status'](0xcc)[_0xfe70('0x1b')]();});}};}function handleEntityNotFound(_0x246f26,_0x46b376){return function(_0x224e2e){if(!_0x224e2e){_0x246f26[_0xfe70('0xf')](0x194);}return _0x224e2e;};}function handleError(_0xfd43f0,_0x4ce121){_0x4ce121=_0x4ce121||0x1f4;return function(_0x2751aa){logger[_0xfe70('0x1c')](_0x2751aa[_0xfe70('0x1d')]);if(_0x2751aa[_0xfe70('0x1e')]){delete _0x2751aa[_0xfe70('0x1e')];}_0xfd43f0[_0xfe70('0x10')](_0x4ce121)['send'](_0x2751aa);};}exports[_0xfe70('0x1f')]=function(_0x4218b3,_0x2d65ee){var _0x71f5e0={},_0x39ddb7={},_0x1c6a32={'count':0x0,'rows':[]};var _0x36d6ba=db[_0xfe70('0x20')][_0xfe70('0x21')];_0x39ddb7['model']=_['keys'](_0x36d6ba);var _0x103826={'dateStart':_0x4218b3[_0xfe70('0x22')][_0xfe70('0x23')],'dateEnd':_0x4218b3[_0xfe70('0x22')][_0xfe70('0x24')]};delete _0x4218b3['query'][_0xfe70('0x23')];delete _0x4218b3[_0xfe70('0x22')][_0xfe70('0x24')];_0x39ddb7[_0xfe70('0x22')]=_[_0xfe70('0x25')](_0x4218b3[_0xfe70('0x22')]);_0x39ddb7[_0xfe70('0x26')]=_[_0xfe70('0x27')](_0x39ddb7['model'],_0x39ddb7[_0xfe70('0x22')]);_0x71f5e0['attributes']=_[_0xfe70('0x27')](_0x39ddb7[_0xfe70('0x28')],qs[_0xfe70('0x29')](_0x4218b3[_0xfe70('0x22')][_0xfe70('0x29')]));_0x71f5e0[_0xfe70('0x2a')]=_0x71f5e0[_0xfe70('0x2a')]['length']?_0x71f5e0['attributes']:_0x39ddb7[_0xfe70('0x28')];if(!_0x4218b3[_0xfe70('0x22')][_0xfe70('0x2b')](_0xfe70('0x2c'))){_0x71f5e0[_0xfe70('0x14')]=qs[_0xfe70('0x14')](_0x4218b3[_0xfe70('0x22')][_0xfe70('0x14')]);_0x71f5e0['offset']=qs['offset'](_0x4218b3[_0xfe70('0x22')][_0xfe70('0x13')]);}_0x71f5e0[_0xfe70('0x2d')]=qs[_0xfe70('0x2e')](_0x4218b3[_0xfe70('0x22')][_0xfe70('0x2e')]);_0x71f5e0[_0xfe70('0x2f')]=qs[_0xfe70('0x26')](_[_0xfe70('0x30')](_0x4218b3[_0xfe70('0x22')],_0x39ddb7[_0xfe70('0x26')]));if(_0x103826['dateStart']){if(_0x103826[_0xfe70('0x24')]){_0x103826[_0xfe70('0x24')]=moment(_0x103826[_0xfe70('0x24')])[_0xfe70('0x31')](0x1,'day');}else{_0x103826['dateEnd']=moment(_0x103826[_0xfe70('0x23')])[_0xfe70('0x31')](0x1,_0xfe70('0x32'));}_[_0xfe70('0x33')](_0x71f5e0[_0xfe70('0x2f')],{'createdAt':{'$gte':_0x103826[_0xfe70('0x23')],'$lte':_0x103826[_0xfe70('0x24')]}});}if(_0x4218b3[_0xfe70('0x22')][_0xfe70('0x34')]){_0x71f5e0[_0xfe70('0x2f')]=_['merge'](_0x71f5e0[_0xfe70('0x2f')],{'$or':_['map'](_0x71f5e0[_0xfe70('0x2a')],function(_0x3fb1d2){var _0x526d6b={};_0x526d6b[_0x3fb1d2]={'$like':'%'+_0x4218b3[_0xfe70('0x22')]['filter']+'%'};return _0x526d6b;})});}_0x71f5e0=_[_0xfe70('0x33')]({},_0x71f5e0,_0x4218b3[_0xfe70('0x35')]);var _0x1da791={'where':_0x71f5e0['where']};return db[_0xfe70('0x20')][_0xfe70('0x12')](_0x1da791)[_0xfe70('0x19')](function(_0x462513){_0x1c6a32[_0xfe70('0x12')]=_0x462513;if(_0x4218b3[_0xfe70('0x22')][_0xfe70('0x36')]){_0x71f5e0['include']=[{'all':!![]}];}return db['JscriptyQuestionReport'][_0xfe70('0x37')](_0x71f5e0);})[_0xfe70('0x19')](function(_0x46eb00){_0x1c6a32['rows']=_0x46eb00;return _0x1c6a32;})[_0xfe70('0x19')](respondWithFilteredResult(_0x2d65ee,_0x71f5e0))[_0xfe70('0x38')](handleError(_0x2d65ee,null));};exports[_0xfe70('0x39')]=function(_0x27d0e5,_0x4d9d79){var _0xf0787c={'raw':!![],'where':{'id':_0x27d0e5[_0xfe70('0x3a')]['id']}},_0x209b98={};_0x209b98[_0xfe70('0x28')]=_[_0xfe70('0x25')](db[_0xfe70('0x20')][_0xfe70('0x21')]);_0x209b98['query']=_[_0xfe70('0x25')](_0x27d0e5['query']);_0x209b98[_0xfe70('0x26')]=_[_0xfe70('0x27')](_0x209b98['model'],_0x209b98[_0xfe70('0x22')]);_0xf0787c[_0xfe70('0x2a')]=_[_0xfe70('0x27')](_0x209b98['model'],qs[_0xfe70('0x29')](_0x27d0e5[_0xfe70('0x22')][_0xfe70('0x29')]));_0xf0787c['attributes']=_0xf0787c[_0xfe70('0x2a')][_0xfe70('0x3b')]?_0xf0787c[_0xfe70('0x2a')]:_0x209b98[_0xfe70('0x28')];if(_0x27d0e5[_0xfe70('0x22')][_0xfe70('0x36')]){_0xf0787c[_0xfe70('0x3c')]=[{'all':!![]}];}_0xf0787c=_[_0xfe70('0x33')]({},_0xf0787c,_0x27d0e5[_0xfe70('0x35')]);return db[_0xfe70('0x20')][_0xfe70('0x3d')](_0xf0787c)[_0xfe70('0x19')](handleEntityNotFound(_0x4d9d79,null))['then'](respondWithResult(_0x4d9d79,null))['catch'](handleError(_0x4d9d79,null));};exports[_0xfe70('0x3e')]=function(_0x3255fa,_0x2e60ee){return db[_0xfe70('0x20')][_0xfe70('0x3e')](_0x3255fa[_0xfe70('0x3f')],{})[_0xfe70('0x19')](respondWithResult(_0x2e60ee,0xc9))[_0xfe70('0x38')](handleError(_0x2e60ee,null));};exports[_0xfe70('0x18')]=function(_0x27729c,_0x290d23){if(_0x27729c[_0xfe70('0x3f')]['id']){delete _0x27729c['body']['id'];}return db[_0xfe70('0x20')][_0xfe70('0x3d')]({'where':{'id':_0x27729c[_0xfe70('0x3a')]['id']}})[_0xfe70('0x19')](handleEntityNotFound(_0x290d23,null))['then'](saveUpdates(_0x27729c['body'],null))['then'](respondWithResult(_0x290d23,null))[_0xfe70('0x38')](handleError(_0x290d23,null));};exports[_0xfe70('0x1a')]=function(_0x2cade7,_0x1337b7){return db['JscriptyQuestionReport']['find']({'where':{'id':_0x2cade7[_0xfe70('0x3a')]['id']}})[_0xfe70('0x19')](handleEntityNotFound(_0x1337b7,null))[_0xfe70('0x19')](removeEntity(_0x1337b7,null))[_0xfe70('0x38')](handleError(_0x1337b7,null));};exports[_0xfe70('0x40')]=function(_0x3d3bbe,_0x3a037c){return db['JscriptyQuestionReport'][_0xfe70('0x40')]()[_0xfe70('0x19')](respondWithResult(_0x3a037c,null))[_0xfe70('0x38')](handleError(_0x3a037c,null));};
\ No newline at end of file
+var _0x3e03=['keys','find','create','body','describe','fast-json-patch','request-promise','sox','ejs','lodash','squel','crypto','jsforce','to-csv','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','json','count','offset','limit','set','apply','reject','save','update','then','destroy','status','end','sendStatus','stack','name','send','JscriptyQuestionReport','rawAttributes','model','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','pick','add','day','merge','where','filter','includeAll','rows','catch','show','params'];(function(_0x2ed1a0,_0x36acd9){var _0x3d272e=function(_0x41460c){while(--_0x41460c){_0x2ed1a0['push'](_0x2ed1a0['shift']());}};_0x3d272e(++_0x36acd9);}(_0x3e03,0xc2));var _0x33e0=function(_0x21d532,_0x4552a4){_0x21d532=_0x21d532-0x0;var _0x37bda1=_0x3e03[_0x21d532];return _0x37bda1;};'use strict';var jsonpatch=require(_0x33e0('0x0'));var rp=require(_0x33e0('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0x33e0('0x2'));var csv=require('to-csv');var ejs=require(_0x33e0('0x3'));var fs=require('fs');var _=require(_0x33e0('0x4'));var squel=require(_0x33e0('0x5'));var crypto=require(_0x33e0('0x6'));var jsforce=require(_0x33e0('0x7'));var deskjs=require('desk.js');var toCsv=require(_0x33e0('0x8'));var querystring=require('querystring');var Papa=require(_0x33e0('0x9'));var qs=require(_0x33e0('0xa'));var logger=require(_0x33e0('0xb'))(_0x33e0('0xc'));var utils=require(_0x33e0('0xd'));var config=require(_0x33e0('0xe'));var db=require(_0x33e0('0xf'))['db'];function respondWithStatusCode(_0x3bc70e,_0x138138){_0x138138=_0x138138||0xcc;return function(_0x58d771){if(_0x58d771){return _0x3bc70e['sendStatus'](_0x138138);}return _0x3bc70e['status'](_0x138138)['end']();};}function respondWithResult(_0x458698,_0x316dba){_0x316dba=_0x316dba||0xc8;return function(_0x165726){if(_0x165726){return _0x458698['status'](_0x316dba)[_0x33e0('0x10')](_0x165726);}};}function respondWithFilteredResult(_0x4ec434,_0x1853f5){return function(_0x477c79){if(_0x477c79){var _0x3cbdc8=_0x477c79[_0x33e0('0x11')],_0x39383c=_0x1853f5['offset'],_0x4457bd=_0x1853f5[_0x33e0('0x12')]+_0x1853f5[_0x33e0('0x13')],_0x49b9a9;if(_0x4457bd>=_0x3cbdc8){_0x4457bd=_0x3cbdc8;_0x49b9a9=0xc8;}else{_0x49b9a9=0xce;}_0x4ec434['status'](_0x49b9a9);return _0x4ec434[_0x33e0('0x14')]('Content-Range',_0x39383c+'-'+_0x4457bd+'/'+_0x3cbdc8)[_0x33e0('0x10')](_0x477c79);}return null;};}function patchUpdates(_0x2e7d76){return function(_0x2c8fc1){try{jsonpatch[_0x33e0('0x15')](_0x2c8fc1,_0x2e7d76,!![]);}catch(_0x41c9a9){return BPromise[_0x33e0('0x16')](_0x41c9a9);}return _0x2c8fc1[_0x33e0('0x17')]();};}function saveUpdates(_0x3e9825,_0x81d6e0){return function(_0x49cf99){if(_0x49cf99){return _0x49cf99[_0x33e0('0x18')](_0x3e9825)[_0x33e0('0x19')](function(_0x24fcdc){return _0x24fcdc;});}return null;};}function removeEntity(_0x11574d,_0x1013a1){return function(_0x44e08e){if(_0x44e08e){return _0x44e08e[_0x33e0('0x1a')]()['then'](function(){_0x11574d[_0x33e0('0x1b')](0xcc)[_0x33e0('0x1c')]();});}};}function handleEntityNotFound(_0x56b929,_0x30c75f){return function(_0x1d626f){if(!_0x1d626f){_0x56b929[_0x33e0('0x1d')](0x194);}return _0x1d626f;};}function handleError(_0x53c42b,_0x237584){_0x237584=_0x237584||0x1f4;return function(_0x17ae5c){logger['error'](_0x17ae5c[_0x33e0('0x1e')]);if(_0x17ae5c[_0x33e0('0x1f')]){delete _0x17ae5c[_0x33e0('0x1f')];}_0x53c42b[_0x33e0('0x1b')](_0x237584)[_0x33e0('0x20')](_0x17ae5c);};}exports['index']=function(_0x463a5b,_0x565ee0){var _0x2740a0={},_0x4b7fdd={},_0x27aea7={'count':0x0,'rows':[]};var _0x5b9e90=db[_0x33e0('0x21')][_0x33e0('0x22')];_0x4b7fdd[_0x33e0('0x23')]=_['keys'](_0x5b9e90);var _0x2bc1d9={'dateStart':_0x463a5b['query'][_0x33e0('0x24')],'dateEnd':_0x463a5b[_0x33e0('0x25')][_0x33e0('0x26')]};delete _0x463a5b['query']['dateStart'];delete _0x463a5b['query'][_0x33e0('0x26')];_0x4b7fdd[_0x33e0('0x25')]=_['keys'](_0x463a5b[_0x33e0('0x25')]);_0x4b7fdd[_0x33e0('0x27')]=_[_0x33e0('0x28')](_0x4b7fdd[_0x33e0('0x23')],_0x4b7fdd[_0x33e0('0x25')]);_0x2740a0[_0x33e0('0x29')]=_['intersection'](_0x4b7fdd[_0x33e0('0x23')],qs[_0x33e0('0x2a')](_0x463a5b[_0x33e0('0x25')][_0x33e0('0x2a')]));_0x2740a0[_0x33e0('0x29')]=_0x2740a0[_0x33e0('0x29')][_0x33e0('0x2b')]?_0x2740a0[_0x33e0('0x29')]:_0x4b7fdd[_0x33e0('0x23')];if(!_0x463a5b['query'][_0x33e0('0x2c')](_0x33e0('0x2d'))){_0x2740a0[_0x33e0('0x13')]=qs[_0x33e0('0x13')](_0x463a5b[_0x33e0('0x25')][_0x33e0('0x13')]);_0x2740a0['offset']=qs[_0x33e0('0x12')](_0x463a5b[_0x33e0('0x25')]['offset']);}_0x2740a0['order']=qs['sort'](_0x463a5b[_0x33e0('0x25')][_0x33e0('0x2e')]);_0x2740a0['where']=qs['filters'](_[_0x33e0('0x2f')](_0x463a5b['query'],_0x4b7fdd[_0x33e0('0x27')]));if(_0x2bc1d9[_0x33e0('0x24')]){if(_0x2bc1d9[_0x33e0('0x26')]){_0x2bc1d9[_0x33e0('0x26')]=moment(_0x2bc1d9['dateEnd'])[_0x33e0('0x30')](0x1,_0x33e0('0x31'));}else{_0x2bc1d9[_0x33e0('0x26')]=moment(_0x2bc1d9[_0x33e0('0x24')])[_0x33e0('0x30')](0x1,_0x33e0('0x31'));}_[_0x33e0('0x32')](_0x2740a0[_0x33e0('0x33')],{'createdAt':{'$gte':_0x2bc1d9['dateStart'],'$lte':_0x2bc1d9[_0x33e0('0x26')]}});}if(_0x463a5b['query'][_0x33e0('0x34')]){_0x2740a0['where']=_[_0x33e0('0x32')](_0x2740a0['where'],{'$or':_['map'](_0x2740a0[_0x33e0('0x29')],function(_0x54383d){var _0x385ac3={};_0x385ac3[_0x54383d]={'$like':'%'+_0x463a5b[_0x33e0('0x25')][_0x33e0('0x34')]+'%'};return _0x385ac3;})});}_0x2740a0=_[_0x33e0('0x32')]({},_0x2740a0,_0x463a5b['options']);var _0x2878ef={'where':_0x2740a0[_0x33e0('0x33')]};return db['JscriptyQuestionReport'][_0x33e0('0x11')](_0x2878ef)[_0x33e0('0x19')](function(_0x43c279){_0x27aea7[_0x33e0('0x11')]=_0x43c279;if(_0x463a5b['query'][_0x33e0('0x35')]){_0x2740a0['include']=[{'all':!![]}];}return db[_0x33e0('0x21')]['findAll'](_0x2740a0);})[_0x33e0('0x19')](function(_0x2a9eaa){_0x27aea7[_0x33e0('0x36')]=_0x2a9eaa;return _0x27aea7;})['then'](respondWithFilteredResult(_0x565ee0,_0x2740a0))[_0x33e0('0x37')](handleError(_0x565ee0,null));};exports[_0x33e0('0x38')]=function(_0x512e89,_0x1705bf){var _0x17a20b={'raw':!![],'where':{'id':_0x512e89[_0x33e0('0x39')]['id']}},_0x5e1fba={};_0x5e1fba[_0x33e0('0x23')]=_['keys'](db[_0x33e0('0x21')][_0x33e0('0x22')]);_0x5e1fba['query']=_[_0x33e0('0x3a')](_0x512e89[_0x33e0('0x25')]);_0x5e1fba[_0x33e0('0x27')]=_['intersection'](_0x5e1fba[_0x33e0('0x23')],_0x5e1fba[_0x33e0('0x25')]);_0x17a20b['attributes']=_['intersection'](_0x5e1fba[_0x33e0('0x23')],qs[_0x33e0('0x2a')](_0x512e89[_0x33e0('0x25')][_0x33e0('0x2a')]));_0x17a20b[_0x33e0('0x29')]=_0x17a20b['attributes'][_0x33e0('0x2b')]?_0x17a20b[_0x33e0('0x29')]:_0x5e1fba[_0x33e0('0x23')];if(_0x512e89[_0x33e0('0x25')][_0x33e0('0x35')]){_0x17a20b['include']=[{'all':!![]}];}_0x17a20b=_[_0x33e0('0x32')]({},_0x17a20b,_0x512e89['options']);return db[_0x33e0('0x21')][_0x33e0('0x3b')](_0x17a20b)[_0x33e0('0x19')](handleEntityNotFound(_0x1705bf,null))[_0x33e0('0x19')](respondWithResult(_0x1705bf,null))['catch'](handleError(_0x1705bf,null));};exports[_0x33e0('0x3c')]=function(_0x2b0b29,_0x252716){return db[_0x33e0('0x21')][_0x33e0('0x3c')](_0x2b0b29[_0x33e0('0x3d')],{})[_0x33e0('0x19')](respondWithResult(_0x252716,0xc9))[_0x33e0('0x37')](handleError(_0x252716,null));};exports[_0x33e0('0x18')]=function(_0x3e1b9a,_0xbe07e6){if(_0x3e1b9a[_0x33e0('0x3d')]['id']){delete _0x3e1b9a['body']['id'];}return db[_0x33e0('0x21')]['find']({'where':{'id':_0x3e1b9a['params']['id']}})[_0x33e0('0x19')](handleEntityNotFound(_0xbe07e6,null))[_0x33e0('0x19')](saveUpdates(_0x3e1b9a[_0x33e0('0x3d')],null))[_0x33e0('0x19')](respondWithResult(_0xbe07e6,null))[_0x33e0('0x37')](handleError(_0xbe07e6,null));};exports[_0x33e0('0x1a')]=function(_0x5e8e0a,_0x2a1201){return db['JscriptyQuestionReport'][_0x33e0('0x3b')]({'where':{'id':_0x5e8e0a[_0x33e0('0x39')]['id']}})[_0x33e0('0x19')](handleEntityNotFound(_0x2a1201,null))['then'](removeEntity(_0x2a1201,null))[_0x33e0('0x37')](handleError(_0x2a1201,null));};exports['describe']=function(_0x4ec396,_0xb61ce9){return db[_0x33e0('0x21')][_0x33e0('0x3e')]()[_0x33e0('0x19')](respondWithResult(_0xb61ce9,null))['catch'](handleError(_0xb61ce9,null));};
\ No newline at end of file
index d1bc62b..1df3d02 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3287=['./jscriptyQuestionReport.attributes','exports','define','lodash','util','../../config/logger','moment','bluebird','request-promise'];(function(_0x5601f8,_0x466a3c){var _0x112a4f=function(_0x2b28f6){while(--_0x2b28f6){_0x5601f8['push'](_0x5601f8['shift']());}};_0x112a4f(++_0x466a3c);}(_0x3287,0x186));var _0x7328=function(_0x37f298,_0x195f48){_0x37f298=_0x37f298-0x0;var _0x23d40d=_0x3287[_0x37f298];return _0x23d40d;};'use strict';var _=require(_0x7328('0x0'));var util=require(_0x7328('0x1'));var logger=require(_0x7328('0x2'))('api');var moment=require(_0x7328('0x3'));var BPromise=require(_0x7328('0x4'));var rp=require(_0x7328('0x5'));var attributes=require(_0x7328('0x6'));module[_0x7328('0x7')]=function(_0x4752e3,_0x9378e0){return _0x4752e3[_0x7328('0x8')]('JscriptyQuestionReport',attributes,{'tableName':'report_jscripty_questions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x707b=['util','../../config/logger','moment','./jscriptyQuestionReport.attributes','exports','define','lodash'];(function(_0x2ebb94,_0x380da8){var _0x3002de=function(_0x4369c2){while(--_0x4369c2){_0x2ebb94['push'](_0x2ebb94['shift']());}};_0x3002de(++_0x380da8);}(_0x707b,0xdf));var _0xb707=function(_0x2c28e9,_0x2257f1){_0x2c28e9=_0x2c28e9-0x0;var _0x3ada94=_0x707b[_0x2c28e9];return _0x3ada94;};'use strict';var _=require(_0xb707('0x0'));var util=require(_0xb707('0x1'));var logger=require(_0xb707('0x2'))('api');var moment=require(_0xb707('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0xb707('0x4'));module[_0xb707('0x5')]=function(_0x39cd37,_0x157b23){return _0x39cd37[_0xb707('0x6')]('JscriptyQuestionReport',attributes,{'tableName':'report_jscripty_questions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 674984c..784fbf0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc215=['stringify','error','message','result','lodash','util','moment','randomstring','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','http','request','info','JscriptyQuestionReport,\x20%s,\x20%s','request\x20sent'];(function(_0x533437,_0x4d59d1){var _0x53f4ce=function(_0x483f6b){while(--_0x483f6b){_0x533437['push'](_0x533437['shift']());}};_0x53f4ce(++_0x4d59d1);}(_0xc215,0x100));var _0x5c21=function(_0x17d9e3,_0x1f969c){_0x17d9e3=_0x17d9e3-0x0;var _0x14192d=_0xc215[_0x17d9e3];return _0x14192d;};'use strict';var _=require(_0x5c21('0x0'));var util=require(_0x5c21('0x1'));var moment=require(_0x5c21('0x2'));var BPromise=require('bluebird');var rs=require(_0x5c21('0x3'));var fs=require('fs');var db=require(_0x5c21('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x5c21('0x5'))('rpc');var config=require(_0x5c21('0x6'));var jayson=require(_0x5c21('0x7'));var client=jayson[_0x5c21('0x8')][_0x5c21('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x38616b,_0x26b399,_0x1242fa){return new BPromise(function(_0x3cca79,_0x10a15a){return client[_0x5c21('0xa')](_0x38616b,_0x1242fa)['then'](function(_0x3cb2ff){logger[_0x5c21('0xb')](_0x5c21('0xc'),_0x26b399,_0x5c21('0xd'));logger['debug']('JscriptyQuestionReport,\x20%s,\x20%s,\x20%s',_0x26b399,_0x5c21('0xd'),JSON[_0x5c21('0xe')](_0x3cb2ff));if(_0x3cb2ff['error']){if(_0x3cb2ff[_0x5c21('0xf')]['code']===0x1f4){logger[_0x5c21('0xf')]('JscriptyQuestionReport,\x20%s,\x20%s',_0x26b399,_0x3cb2ff[_0x5c21('0xf')][_0x5c21('0x10')]);return _0x10a15a(_0x3cb2ff[_0x5c21('0xf')]['message']);}logger[_0x5c21('0xf')](_0x5c21('0xc'),_0x26b399,_0x3cb2ff[_0x5c21('0xf')][_0x5c21('0x10')]);return _0x3cca79(_0x3cb2ff[_0x5c21('0xf')][_0x5c21('0x10')]);}else{logger['info']('JscriptyQuestionReport,\x20%s,\x20%s',_0x26b399,'request\x20sent');_0x3cca79(_0x3cb2ff[_0x5c21('0x11')][_0x5c21('0x10')]);}})['catch'](function(_0x34c415){logger[_0x5c21('0xf')](_0x5c21('0xc'),_0x26b399,_0x34c415);_0x10a15a(_0x34c415);});});}
\ No newline at end of file
+var _0x159e=['info','JscriptyQuestionReport,\x20%s,\x20%s','request\x20sent','debug','JscriptyQuestionReport,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','then'];(function(_0x264ef0,_0x575987){var _0x51f73f=function(_0x433d5d){while(--_0x433d5d){_0x264ef0['push'](_0x264ef0['shift']());}};_0x51f73f(++_0x575987);}(_0x159e,0x191));var _0xe159=function(_0x39d6f3,_0x4ae083){_0x39d6f3=_0x39d6f3-0x0;var _0x38232f=_0x159e[_0x39d6f3];return _0x38232f;};'use strict';var _=require(_0xe159('0x0'));var util=require(_0xe159('0x1'));var moment=require(_0xe159('0x2'));var BPromise=require(_0xe159('0x3'));var rs=require(_0xe159('0x4'));var fs=require('fs');var db=require(_0xe159('0x5'))['db'];var utils=require(_0xe159('0x6'));var logger=require(_0xe159('0x7'))(_0xe159('0x8'));var config=require(_0xe159('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xe159('0xa')][_0xe159('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x20bb63,_0x23f2d4,_0x234058){return new BPromise(function(_0x487e11,_0x169e10){return client['request'](_0x20bb63,_0x234058)[_0xe159('0xc')](function(_0x171263){logger[_0xe159('0xd')](_0xe159('0xe'),_0x23f2d4,_0xe159('0xf'));logger[_0xe159('0x10')](_0xe159('0x11'),_0x23f2d4,_0xe159('0xf'),JSON['stringify'](_0x171263));if(_0x171263[_0xe159('0x12')]){if(_0x171263[_0xe159('0x12')][_0xe159('0x13')]===0x1f4){logger[_0xe159('0x12')]('JscriptyQuestionReport,\x20%s,\x20%s',_0x23f2d4,_0x171263[_0xe159('0x12')]['message']);return _0x169e10(_0x171263['error']['message']);}logger['error'](_0xe159('0xe'),_0x23f2d4,_0x171263[_0xe159('0x12')][_0xe159('0x14')]);return _0x487e11(_0x171263['error'][_0xe159('0x14')]);}else{logger[_0xe159('0xd')](_0xe159('0xe'),_0x23f2d4,_0xe159('0xf'));_0x487e11(_0x171263[_0xe159('0x15')][_0xe159('0x14')]);}})[_0xe159('0x16')](function(_0xd6a34a){logger['error'](_0xe159('0xe'),_0x23f2d4,_0xd6a34a);_0x169e10(_0xd6a34a);});});}
\ No newline at end of file
index 99a4349..2a5a258 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe128=['destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../config/environment','./jscriptySessionReport.controller','get','isAuthenticated','index','/describe','describe','/:id/questions','getQuestions','post','create','put','/:id','update','delete'];(function(_0xbe48c2,_0x3db103){var _0x39a679=function(_0x195d37){while(--_0x195d37){_0xbe48c2['push'](_0xbe48c2['shift']());}};_0x39a679(++_0x3db103);}(_0xe128,0x1b7));var _0x8e12=function(_0xdd2bfa,_0x5bd304){_0xdd2bfa=_0xdd2bfa-0x0;var _0x55397e=_0xe128[_0xdd2bfa];return _0x55397e;};'use strict';var multer=require(_0x8e12('0x0'));var util=require(_0x8e12('0x1'));var path=require(_0x8e12('0x2'));var express=require(_0x8e12('0x3'));var router=express[_0x8e12('0x4')]();var auth=require(_0x8e12('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x8e12('0x6'));var controller=require(_0x8e12('0x7'));router[_0x8e12('0x8')]('/',auth[_0x8e12('0x9')](),controller[_0x8e12('0xa')]);router['get'](_0x8e12('0xb'),auth[_0x8e12('0x9')](),controller[_0x8e12('0xc')]);router['get']('/:id',auth[_0x8e12('0x9')](),controller['show']);router['get'](_0x8e12('0xd'),auth[_0x8e12('0x9')](),controller[_0x8e12('0xe')]);router[_0x8e12('0xf')]('/',auth[_0x8e12('0x9')](),controller[_0x8e12('0x10')]);router[_0x8e12('0x11')](_0x8e12('0x12'),auth[_0x8e12('0x9')](),controller[_0x8e12('0x13')]);router[_0x8e12('0x14')](_0x8e12('0x12'),auth[_0x8e12('0x9')](),controller[_0x8e12('0x15')]);module[_0x8e12('0x16')]=router;
\ No newline at end of file
+var _0xcd88=['isAuthenticated','index','describe','/:id','show','/:id/questions','getQuestions','post','create','put','update','delete','destroy','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get'];(function(_0x1975c9,_0x3381de){var _0x37cf49=function(_0x524005){while(--_0x524005){_0x1975c9['push'](_0x1975c9['shift']());}};_0x37cf49(++_0x3381de);}(_0xcd88,0x1f0));var _0x8cd8=function(_0x585d81,_0xf6d74f){_0x585d81=_0x585d81-0x0;var _0x1aca0d=_0xcd88[_0x585d81];return _0x1aca0d;};'use strict';var multer=require(_0x8cd8('0x0'));var util=require('util');var path=require(_0x8cd8('0x1'));var express=require(_0x8cd8('0x2'));var router=express[_0x8cd8('0x3')]();var auth=require(_0x8cd8('0x4'));var interaction=require(_0x8cd8('0x5'));var config=require(_0x8cd8('0x6'));var controller=require('./jscriptySessionReport.controller');router[_0x8cd8('0x7')]('/',auth[_0x8cd8('0x8')](),controller[_0x8cd8('0x9')]);router[_0x8cd8('0x7')]('/describe',auth[_0x8cd8('0x8')](),controller[_0x8cd8('0xa')]);router[_0x8cd8('0x7')](_0x8cd8('0xb'),auth[_0x8cd8('0x8')](),controller[_0x8cd8('0xc')]);router[_0x8cd8('0x7')](_0x8cd8('0xd'),auth[_0x8cd8('0x8')](),controller[_0x8cd8('0xe')]);router[_0x8cd8('0xf')]('/',auth['isAuthenticated'](),controller[_0x8cd8('0x10')]);router[_0x8cd8('0x11')]('/:id',auth['isAuthenticated'](),controller[_0x8cd8('0x12')]);router[_0x8cd8('0x13')]('/:id',auth[_0x8cd8('0x8')](),controller[_0x8cd8('0x14')]);module['exports']=router;
\ No newline at end of file
index af251c8..ac59ec2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc0c5=['setDataValue','endtime','format','YYYY-MM-DD\x20HH:mm:ss','DATE','STRING','moment','sequelize'];(function(_0x2ecc68,_0x3694a8){var _0xc24394=function(_0x3c5602){while(--_0x3c5602){_0x2ecc68['push'](_0x2ecc68['shift']());}};_0xc24394(++_0x3694a8);}(_0xc0c5,0x126));var _0x5c0c=function(_0x5ecadc,_0x1cf9f1){_0x5ecadc=_0x5ecadc-0x0;var _0x565037=_0xc0c5[_0x5ecadc];return _0x565037;};'use strict';var moment=require(_0x5c0c('0x0'));var Sequelize=require(_0x5c0c('0x1'));module['exports']={'starttime':{'type':Sequelize['DATE'],'set':function(_0x312d28){this[_0x5c0c('0x2')]('starttime',_0x312d28);this[_0x5c0c('0x2')](_0x5c0c('0x3'),moment()[_0x5c0c('0x4')](_0x5c0c('0x5')));}},'endtime':{'type':Sequelize[_0x5c0c('0x6')]},'membername':{'type':Sequelize[_0x5c0c('0x7')]},'projectname':{'type':Sequelize[_0x5c0c('0x7')]},'queue':{'type':Sequelize[_0x5c0c('0x7')]},'uniqueid':{'type':Sequelize[_0x5c0c('0x7')]},'calleridname':{'type':Sequelize[_0x5c0c('0x7')]},'calleridnum':{'type':Sequelize[_0x5c0c('0x7')]},'completed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
+var _0x954f=['endtime','format','YYYY-MM-DD\x20HH:mm:ss','STRING','sequelize','exports','DATE','setDataValue'];(function(_0x53db17,_0x5c97ae){var _0xd3880f=function(_0x4965f4){while(--_0x4965f4){_0x53db17['push'](_0x53db17['shift']());}};_0xd3880f(++_0x5c97ae);}(_0x954f,0xdc));var _0xf954=function(_0x1bd498,_0x14b925){_0x1bd498=_0x1bd498-0x0;var _0xb4473e=_0x954f[_0x1bd498];return _0xb4473e;};'use strict';var moment=require('moment');var Sequelize=require(_0xf954('0x0'));module[_0xf954('0x1')]={'starttime':{'type':Sequelize[_0xf954('0x2')],'set':function(_0x5a4fbe){this[_0xf954('0x3')]('starttime',_0x5a4fbe);this['setDataValue'](_0xf954('0x4'),moment()[_0xf954('0x5')](_0xf954('0x6')));}},'endtime':{'type':Sequelize[_0xf954('0x2')]},'membername':{'type':Sequelize['STRING']},'projectname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0xf954('0x7')]},'completed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
index 684c35f..e313ec9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2e96=['desk.js','querystring','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','stack','name','send','index','rawAttributes','model','keys','query','dateEnd','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','pick','dateStart','add','day','where','filter','merge','map','JscriptySessionReport','includeAll','include','findAll','catch','show','params','length','options','find','create','body','describe','findOne','JscriptyQuestionReport','SessionId','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','jsforce'];(function(_0x908dd1,_0x24d2fb){var _0x501385=function(_0x4d4c02){while(--_0x4d4c02){_0x908dd1['push'](_0x908dd1['shift']());}};_0x501385(++_0x24d2fb);}(_0x2e96,0x11d));var _0x62e9=function(_0x4ef8cb,_0x2a44e9){_0x4ef8cb=_0x4ef8cb-0x0;var _0x27b9da=_0x2e96[_0x4ef8cb];return _0x27b9da;};'use strict';var jsonpatch=require(_0x62e9('0x0'));var rp=require(_0x62e9('0x1'));var moment=require(_0x62e9('0x2'));var BPromise=require(_0x62e9('0x3'));var Mustache=require(_0x62e9('0x4'));var util=require(_0x62e9('0x5'));var path=require(_0x62e9('0x6'));var sox=require(_0x62e9('0x7'));var csv=require(_0x62e9('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x62e9('0x9'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x62e9('0xa'));var deskjs=require(_0x62e9('0xb'));var toCsv=require(_0x62e9('0x8'));var querystring=require(_0x62e9('0xc'));var Papa=require('papaparse');var qs=require(_0x62e9('0xd'));var logger=require(_0x62e9('0xe'))(_0x62e9('0xf'));var utils=require(_0x62e9('0x10'));var config=require(_0x62e9('0x11'));var db=require(_0x62e9('0x12'))['db'];function respondWithStatusCode(_0x38390b,_0x448419){_0x448419=_0x448419||0xcc;return function(_0x268f78){if(_0x268f78){return _0x38390b[_0x62e9('0x13')](_0x448419);}return _0x38390b[_0x62e9('0x14')](_0x448419)[_0x62e9('0x15')]();};}function respondWithResult(_0x18aca6,_0x4a7780){_0x4a7780=_0x4a7780||0xc8;return function(_0x38a5da){if(_0x38a5da){return _0x18aca6[_0x62e9('0x14')](_0x4a7780)['json'](_0x38a5da);}};}function respondWithFilteredResult(_0x4d37cd,_0x78b9f4){return function(_0x249688){if(_0x249688){var _0x55b7bf=_0x249688[_0x62e9('0x16')],_0x666273=_0x78b9f4[_0x62e9('0x17')],_0x141150=_0x78b9f4[_0x62e9('0x17')]+_0x78b9f4[_0x62e9('0x18')],_0x2c7b4b;if(_0x141150>=_0x55b7bf){_0x141150=_0x55b7bf;_0x2c7b4b=0xc8;}else{_0x2c7b4b=0xce;}_0x4d37cd[_0x62e9('0x14')](_0x2c7b4b);return _0x4d37cd[_0x62e9('0x19')](_0x62e9('0x1a'),_0x666273+'-'+_0x141150+'/'+_0x55b7bf)['json'](_0x249688);}return null;};}function patchUpdates(_0x3b72fd){return function(_0x1bc4c1){try{jsonpatch[_0x62e9('0x1b')](_0x1bc4c1,_0x3b72fd,!![]);}catch(_0x1a273c){return BPromise[_0x62e9('0x1c')](_0x1a273c);}return _0x1bc4c1[_0x62e9('0x1d')]();};}function saveUpdates(_0x25869e,_0x1fcf82){return function(_0x326cb1){if(_0x326cb1){return _0x326cb1[_0x62e9('0x1e')](_0x25869e)[_0x62e9('0x1f')](function(_0x5ce8e1){return _0x5ce8e1;});}return null;};}function removeEntity(_0x475920,_0x44e119){return function(_0x29a7d0){if(_0x29a7d0){return _0x29a7d0[_0x62e9('0x20')]()[_0x62e9('0x1f')](function(){_0x475920[_0x62e9('0x14')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3918b8,_0x54e41c){return function(_0x3a45a5){if(!_0x3a45a5){_0x3918b8[_0x62e9('0x13')](0x194);}return _0x3a45a5;};}function handleError(_0x4da2e4,_0x51a798){_0x51a798=_0x51a798||0x1f4;return function(_0x3a5165){logger['error'](_0x3a5165[_0x62e9('0x21')]);if(_0x3a5165[_0x62e9('0x22')]){delete _0x3a5165['name'];}_0x4da2e4[_0x62e9('0x14')](_0x51a798)[_0x62e9('0x23')](_0x3a5165);};}exports[_0x62e9('0x24')]=function(_0x3db0e2,_0x2c1fa8){var _0x3516c1={},_0x242340={},_0x514517={'count':0x0,'rows':[]};var _0x54becc=db['JscriptySessionReport'][_0x62e9('0x25')];_0x242340[_0x62e9('0x26')]=_[_0x62e9('0x27')](_0x54becc);var _0x25b283={'dateStart':_0x3db0e2[_0x62e9('0x28')]['dateStart'],'dateEnd':_0x3db0e2[_0x62e9('0x28')][_0x62e9('0x29')]};delete _0x3db0e2['query']['dateStart'];delete _0x3db0e2[_0x62e9('0x28')][_0x62e9('0x29')];_0x242340['query']=_[_0x62e9('0x27')](_0x3db0e2['query']);_0x242340[_0x62e9('0x2a')]=_[_0x62e9('0x2b')](_0x242340['model'],_0x242340[_0x62e9('0x28')]);_0x3516c1['attributes']=_['intersection'](_0x242340[_0x62e9('0x26')],qs['fields'](_0x3db0e2['query'][_0x62e9('0x2c')]));_0x3516c1['attributes']=_0x3516c1[_0x62e9('0x2d')]['length']?_0x3516c1[_0x62e9('0x2d')]:_0x242340[_0x62e9('0x26')];if(!_0x3db0e2[_0x62e9('0x28')][_0x62e9('0x2e')](_0x62e9('0x2f'))){_0x3516c1['limit']=qs['limit'](_0x3db0e2[_0x62e9('0x28')]['limit']);_0x3516c1[_0x62e9('0x17')]=qs[_0x62e9('0x17')](_0x3db0e2[_0x62e9('0x28')][_0x62e9('0x17')]);}_0x3516c1[_0x62e9('0x30')]=qs[_0x62e9('0x31')](_0x3db0e2['query'][_0x62e9('0x31')]);_0x3516c1['where']=qs[_0x62e9('0x2a')](_[_0x62e9('0x32')](_0x3db0e2[_0x62e9('0x28')],_0x242340[_0x62e9('0x2a')]));if(_0x25b283[_0x62e9('0x33')]){if(_0x25b283[_0x62e9('0x29')]){_0x25b283['dateEnd']=moment(_0x25b283['dateEnd'])[_0x62e9('0x34')](0x1,_0x62e9('0x35'));}else{_0x25b283[_0x62e9('0x29')]=moment(_0x25b283['dateStart'])['add'](0x1,_0x62e9('0x35'));}_['merge'](_0x3516c1[_0x62e9('0x36')],{'createdAt':{'$gte':_0x25b283[_0x62e9('0x33')],'$lte':_0x25b283[_0x62e9('0x29')]}});}if(_0x3db0e2[_0x62e9('0x28')][_0x62e9('0x37')]){_0x3516c1[_0x62e9('0x36')]=_[_0x62e9('0x38')](_0x3516c1[_0x62e9('0x36')],{'$or':_[_0x62e9('0x39')](_0x3516c1[_0x62e9('0x2d')],function(_0x5479d4){var _0x46102c={};_0x46102c[_0x5479d4]={'$like':'%'+_0x3db0e2[_0x62e9('0x28')][_0x62e9('0x37')]+'%'};return _0x46102c;})});}_0x3516c1=_[_0x62e9('0x38')]({},_0x3516c1,_0x3db0e2['options']);var _0x168143={'where':_0x3516c1[_0x62e9('0x36')]};return db[_0x62e9('0x3a')][_0x62e9('0x16')](_0x168143)['then'](function(_0x1caf4e){_0x514517['count']=_0x1caf4e;if(_0x3db0e2['query'][_0x62e9('0x3b')]){_0x3516c1[_0x62e9('0x3c')]=[{'all':!![]}];}return db[_0x62e9('0x3a')][_0x62e9('0x3d')](_0x3516c1);})[_0x62e9('0x1f')](function(_0x1c4986){_0x514517['rows']=_0x1c4986;return _0x514517;})[_0x62e9('0x1f')](respondWithFilteredResult(_0x2c1fa8,_0x3516c1))[_0x62e9('0x3e')](handleError(_0x2c1fa8,null));};exports[_0x62e9('0x3f')]=function(_0x17e6b0,_0x539817){var _0x224e74={'raw':!![],'where':{'id':_0x17e6b0[_0x62e9('0x40')]['id']}},_0x478ae8={};_0x478ae8[_0x62e9('0x26')]=_[_0x62e9('0x27')](db[_0x62e9('0x3a')]['rawAttributes']);_0x478ae8[_0x62e9('0x28')]=_[_0x62e9('0x27')](_0x17e6b0['query']);_0x478ae8[_0x62e9('0x2a')]=_[_0x62e9('0x2b')](_0x478ae8[_0x62e9('0x26')],_0x478ae8['query']);_0x224e74[_0x62e9('0x2d')]=_['intersection'](_0x478ae8[_0x62e9('0x26')],qs[_0x62e9('0x2c')](_0x17e6b0[_0x62e9('0x28')][_0x62e9('0x2c')]));_0x224e74[_0x62e9('0x2d')]=_0x224e74[_0x62e9('0x2d')][_0x62e9('0x41')]?_0x224e74[_0x62e9('0x2d')]:_0x478ae8[_0x62e9('0x26')];if(_0x17e6b0[_0x62e9('0x28')][_0x62e9('0x3b')]){_0x224e74[_0x62e9('0x3c')]=[{'all':!![]}];}_0x224e74=_[_0x62e9('0x38')]({},_0x224e74,_0x17e6b0[_0x62e9('0x42')]);return db[_0x62e9('0x3a')][_0x62e9('0x43')](_0x224e74)['then'](handleEntityNotFound(_0x539817,null))[_0x62e9('0x1f')](respondWithResult(_0x539817,null))['catch'](handleError(_0x539817,null));};exports['create']=function(_0x5aa2c3,_0x10e890){return db[_0x62e9('0x3a')][_0x62e9('0x44')](_0x5aa2c3[_0x62e9('0x45')],{})['then'](respondWithResult(_0x10e890,0xc9))[_0x62e9('0x3e')](handleError(_0x10e890,null));};exports['update']=function(_0x399c35,_0x3e02d1){if(_0x399c35[_0x62e9('0x45')]['id']){delete _0x399c35['body']['id'];}return db[_0x62e9('0x3a')][_0x62e9('0x43')]({'where':{'id':_0x399c35['params']['id']}})[_0x62e9('0x1f')](handleEntityNotFound(_0x3e02d1,null))['then'](saveUpdates(_0x399c35[_0x62e9('0x45')],null))['then'](respondWithResult(_0x3e02d1,null))['catch'](handleError(_0x3e02d1,null));};exports[_0x62e9('0x20')]=function(_0x5c3a89,_0x4d17a2){return db[_0x62e9('0x3a')][_0x62e9('0x43')]({'where':{'id':_0x5c3a89[_0x62e9('0x40')]['id']}})[_0x62e9('0x1f')](handleEntityNotFound(_0x4d17a2,null))[_0x62e9('0x1f')](removeEntity(_0x4d17a2,null))[_0x62e9('0x3e')](handleError(_0x4d17a2,null));};exports[_0x62e9('0x46')]=function(_0x93c839,_0x1e6dba){return db[_0x62e9('0x3a')][_0x62e9('0x46')]()[_0x62e9('0x1f')](respondWithResult(_0x1e6dba,null))['catch'](handleError(_0x1e6dba,null));};exports['getQuestions']=function(_0x274237,_0x4c0281,_0x1f2acc){var _0x3c7dd1={'raw':!![],'where':{}};var _0x109166={};var _0x2775ec={'count':0x0,'rows':[]};return db[_0x62e9('0x3a')][_0x62e9('0x47')]({'where':{'id':_0x274237[_0x62e9('0x40')]['id']}})[_0x62e9('0x1f')](handleEntityNotFound(_0x4c0281,null))[_0x62e9('0x1f')](function(_0x2442d3){if(_0x2442d3){_0x109166['model']=_[_0x62e9('0x27')](db[_0x62e9('0x48')][_0x62e9('0x25')]);_0x109166[_0x62e9('0x28')]=_[_0x62e9('0x27')](_0x274237['query']);_0x109166[_0x62e9('0x2a')]=_[_0x62e9('0x2b')](_0x109166['model'],_0x109166[_0x62e9('0x28')]);_0x3c7dd1[_0x62e9('0x2d')]=_['intersection'](_0x109166['model'],qs[_0x62e9('0x2c')](_0x274237['query'][_0x62e9('0x2c')]));_0x3c7dd1[_0x62e9('0x2d')]=_0x3c7dd1[_0x62e9('0x2d')][_0x62e9('0x41')]?_0x3c7dd1[_0x62e9('0x2d')]:_0x109166[_0x62e9('0x26')];if(!_0x274237[_0x62e9('0x28')][_0x62e9('0x2e')](_0x62e9('0x2f'))){_0x3c7dd1[_0x62e9('0x18')]=qs[_0x62e9('0x18')](_0x274237[_0x62e9('0x28')][_0x62e9('0x18')]);_0x3c7dd1[_0x62e9('0x17')]=qs[_0x62e9('0x17')](_0x274237[_0x62e9('0x28')][_0x62e9('0x17')]);}_0x3c7dd1[_0x62e9('0x30')]=qs[_0x62e9('0x31')](_0x274237['query'][_0x62e9('0x31')]);_0x3c7dd1[_0x62e9('0x36')]=qs[_0x62e9('0x2a')](_[_0x62e9('0x32')](_0x274237['query'],_0x109166[_0x62e9('0x2a')]));_0x3c7dd1[_0x62e9('0x36')][_0x62e9('0x49')]=_0x2442d3['id'];if(_0x274237[_0x62e9('0x28')][_0x62e9('0x37')]){_0x3c7dd1[_0x62e9('0x36')]=_[_0x62e9('0x38')](_0x3c7dd1[_0x62e9('0x36')],{'$or':_['map'](_0x3c7dd1[_0x62e9('0x2d')],function(_0x46fdf5){var _0x408c5b={};_0x408c5b[_0x46fdf5]={'$like':'%'+_0x274237[_0x62e9('0x28')]['filter']+'%'};return _0x408c5b;})});}_0x3c7dd1=_[_0x62e9('0x38')]({},_0x3c7dd1,_0x274237[_0x62e9('0x42')]);return db[_0x62e9('0x48')][_0x62e9('0x16')]({'where':_0x3c7dd1[_0x62e9('0x36')]})[_0x62e9('0x1f')](function(_0xbf47db){_0x2775ec[_0x62e9('0x16')]=_0xbf47db;if(_0x274237[_0x62e9('0x28')][_0x62e9('0x3b')]){_0x3c7dd1[_0x62e9('0x3c')]=[{'all':!![]}];}return db[_0x62e9('0x48')][_0x62e9('0x3d')](_0x3c7dd1);})[_0x62e9('0x1f')](function(_0x3a59ee){_0x2775ec['rows']=_0x3a59ee;return _0x2775ec;});}})[_0x62e9('0x1f')](respondWithFilteredResult(_0x4c0281,_0x3c7dd1))[_0x62e9('0x3e')](handleError(_0x4c0281,null));};
\ No newline at end of file
+var _0xfd7d=['options','JscriptySessionReport','count','includeAll','include','show','params','catch','create','body','update','destroy','find','describe','getQuestions','findOne','JscriptyQuestionReport','pick','SessionId','findAll','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','api','../../config/utils','../../mysqldb','json','offset','limit','set','apply','reject','save','then','status','end','stack','name','send','index','rawAttributes','keys','dateStart','query','dateEnd','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','day','merge','filter','map'];(function(_0x2521a5,_0x527810){var _0x48dfba=function(_0x2c4239){while(--_0x2c4239){_0x2521a5['push'](_0x2521a5['shift']());}};_0x48dfba(++_0x527810);}(_0xfd7d,0x130));var _0xdfd7=function(_0x3f52ee,_0x468aab){_0x3f52ee=_0x3f52ee-0x0;var _0x4f7924=_0xfd7d[_0x3f52ee];return _0x4f7924;};'use strict';var jsonpatch=require(_0xdfd7('0x0'));var rp=require(_0xdfd7('0x1'));var moment=require(_0xdfd7('0x2'));var BPromise=require(_0xdfd7('0x3'));var Mustache=require(_0xdfd7('0x4'));var util=require(_0xdfd7('0x5'));var path=require(_0xdfd7('0x6'));var sox=require('sox');var csv=require(_0xdfd7('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xdfd7('0x8'));var crypto=require(_0xdfd7('0x9'));var jsforce=require(_0xdfd7('0xa'));var deskjs=require(_0xdfd7('0xb'));var toCsv=require(_0xdfd7('0x7'));var querystring=require(_0xdfd7('0xc'));var Papa=require('papaparse');var qs=require(_0xdfd7('0xd'));var logger=require('../../config/logger')(_0xdfd7('0xe'));var utils=require(_0xdfd7('0xf'));var config=require('../../config/environment');var db=require(_0xdfd7('0x10'))['db'];function respondWithStatusCode(_0x418977,_0x4d3465){_0x4d3465=_0x4d3465||0xcc;return function(_0x1f18dd){if(_0x1f18dd){return _0x418977['sendStatus'](_0x4d3465);}return _0x418977['status'](_0x4d3465)['end']();};}function respondWithResult(_0x13a977,_0x40023c){_0x40023c=_0x40023c||0xc8;return function(_0x259ebd){if(_0x259ebd){return _0x13a977['status'](_0x40023c)[_0xdfd7('0x11')](_0x259ebd);}};}function respondWithFilteredResult(_0x50d51c,_0x5ee0b5){return function(_0x2b658c){if(_0x2b658c){var _0x38766c=_0x2b658c['count'],_0xfc7125=_0x5ee0b5[_0xdfd7('0x12')],_0x527ada=_0x5ee0b5[_0xdfd7('0x12')]+_0x5ee0b5[_0xdfd7('0x13')],_0x40d3ce;if(_0x527ada>=_0x38766c){_0x527ada=_0x38766c;_0x40d3ce=0xc8;}else{_0x40d3ce=0xce;}_0x50d51c['status'](_0x40d3ce);return _0x50d51c[_0xdfd7('0x14')]('Content-Range',_0xfc7125+'-'+_0x527ada+'/'+_0x38766c)[_0xdfd7('0x11')](_0x2b658c);}return null;};}function patchUpdates(_0x303824){return function(_0xd9f2c){try{jsonpatch[_0xdfd7('0x15')](_0xd9f2c,_0x303824,!![]);}catch(_0x116fa8){return BPromise[_0xdfd7('0x16')](_0x116fa8);}return _0xd9f2c[_0xdfd7('0x17')]();};}function saveUpdates(_0x1f6e78,_0x4fd020){return function(_0x4bfd1f){if(_0x4bfd1f){return _0x4bfd1f['update'](_0x1f6e78)[_0xdfd7('0x18')](function(_0x2e24f6){return _0x2e24f6;});}return null;};}function removeEntity(_0x111f12,_0x484182){return function(_0x2269fc){if(_0x2269fc){return _0x2269fc['destroy']()[_0xdfd7('0x18')](function(){_0x111f12[_0xdfd7('0x19')](0xcc)[_0xdfd7('0x1a')]();});}};}function handleEntityNotFound(_0x54b05a,_0x35df66){return function(_0x31c7d7){if(!_0x31c7d7){_0x54b05a['sendStatus'](0x194);}return _0x31c7d7;};}function handleError(_0x2a63db,_0x417b8e){_0x417b8e=_0x417b8e||0x1f4;return function(_0x404278){logger['error'](_0x404278[_0xdfd7('0x1b')]);if(_0x404278[_0xdfd7('0x1c')]){delete _0x404278['name'];}_0x2a63db['status'](_0x417b8e)[_0xdfd7('0x1d')](_0x404278);};}exports[_0xdfd7('0x1e')]=function(_0x1c87b1,_0x30770e){var _0x3e419b={},_0x185803={},_0x21a9d3={'count':0x0,'rows':[]};var _0x3be880=db['JscriptySessionReport'][_0xdfd7('0x1f')];_0x185803['model']=_[_0xdfd7('0x20')](_0x3be880);var _0x447fa7={'dateStart':_0x1c87b1['query'][_0xdfd7('0x21')],'dateEnd':_0x1c87b1[_0xdfd7('0x22')][_0xdfd7('0x23')]};delete _0x1c87b1[_0xdfd7('0x22')][_0xdfd7('0x21')];delete _0x1c87b1[_0xdfd7('0x22')][_0xdfd7('0x23')];_0x185803[_0xdfd7('0x22')]=_['keys'](_0x1c87b1['query']);_0x185803[_0xdfd7('0x24')]=_[_0xdfd7('0x25')](_0x185803[_0xdfd7('0x26')],_0x185803['query']);_0x3e419b[_0xdfd7('0x27')]=_[_0xdfd7('0x25')](_0x185803[_0xdfd7('0x26')],qs[_0xdfd7('0x28')](_0x1c87b1[_0xdfd7('0x22')][_0xdfd7('0x28')]));_0x3e419b[_0xdfd7('0x27')]=_0x3e419b[_0xdfd7('0x27')][_0xdfd7('0x29')]?_0x3e419b[_0xdfd7('0x27')]:_0x185803['model'];if(!_0x1c87b1[_0xdfd7('0x22')][_0xdfd7('0x2a')](_0xdfd7('0x2b'))){_0x3e419b[_0xdfd7('0x13')]=qs[_0xdfd7('0x13')](_0x1c87b1[_0xdfd7('0x22')][_0xdfd7('0x13')]);_0x3e419b[_0xdfd7('0x12')]=qs[_0xdfd7('0x12')](_0x1c87b1[_0xdfd7('0x22')][_0xdfd7('0x12')]);}_0x3e419b[_0xdfd7('0x2c')]=qs['sort'](_0x1c87b1['query'][_0xdfd7('0x2d')]);_0x3e419b[_0xdfd7('0x2e')]=qs['filters'](_['pick'](_0x1c87b1[_0xdfd7('0x22')],_0x185803[_0xdfd7('0x24')]));if(_0x447fa7[_0xdfd7('0x21')]){if(_0x447fa7[_0xdfd7('0x23')]){_0x447fa7['dateEnd']=moment(_0x447fa7[_0xdfd7('0x23')])['add'](0x1,_0xdfd7('0x2f'));}else{_0x447fa7[_0xdfd7('0x23')]=moment(_0x447fa7['dateStart'])['add'](0x1,'day');}_[_0xdfd7('0x30')](_0x3e419b[_0xdfd7('0x2e')],{'createdAt':{'$gte':_0x447fa7[_0xdfd7('0x21')],'$lte':_0x447fa7[_0xdfd7('0x23')]}});}if(_0x1c87b1[_0xdfd7('0x22')][_0xdfd7('0x31')]){_0x3e419b['where']=_[_0xdfd7('0x30')](_0x3e419b[_0xdfd7('0x2e')],{'$or':_[_0xdfd7('0x32')](_0x3e419b[_0xdfd7('0x27')],function(_0x17a6d4){var _0x44450c={};_0x44450c[_0x17a6d4]={'$like':'%'+_0x1c87b1['query'][_0xdfd7('0x31')]+'%'};return _0x44450c;})});}_0x3e419b=_['merge']({},_0x3e419b,_0x1c87b1[_0xdfd7('0x33')]);var _0x113ddd={'where':_0x3e419b[_0xdfd7('0x2e')]};return db[_0xdfd7('0x34')][_0xdfd7('0x35')](_0x113ddd)[_0xdfd7('0x18')](function(_0x3d737b){_0x21a9d3['count']=_0x3d737b;if(_0x1c87b1[_0xdfd7('0x22')][_0xdfd7('0x36')]){_0x3e419b[_0xdfd7('0x37')]=[{'all':!![]}];}return db[_0xdfd7('0x34')]['findAll'](_0x3e419b);})['then'](function(_0x4283e4){_0x21a9d3['rows']=_0x4283e4;return _0x21a9d3;})[_0xdfd7('0x18')](respondWithFilteredResult(_0x30770e,_0x3e419b))['catch'](handleError(_0x30770e,null));};exports[_0xdfd7('0x38')]=function(_0x4add3e,_0x560cdc){var _0xd5ec0b={'raw':!![],'where':{'id':_0x4add3e[_0xdfd7('0x39')]['id']}},_0x221344={};_0x221344[_0xdfd7('0x26')]=_[_0xdfd7('0x20')](db['JscriptySessionReport'][_0xdfd7('0x1f')]);_0x221344[_0xdfd7('0x22')]=_[_0xdfd7('0x20')](_0x4add3e[_0xdfd7('0x22')]);_0x221344[_0xdfd7('0x24')]=_[_0xdfd7('0x25')](_0x221344[_0xdfd7('0x26')],_0x221344[_0xdfd7('0x22')]);_0xd5ec0b[_0xdfd7('0x27')]=_['intersection'](_0x221344[_0xdfd7('0x26')],qs[_0xdfd7('0x28')](_0x4add3e[_0xdfd7('0x22')][_0xdfd7('0x28')]));_0xd5ec0b[_0xdfd7('0x27')]=_0xd5ec0b[_0xdfd7('0x27')][_0xdfd7('0x29')]?_0xd5ec0b[_0xdfd7('0x27')]:_0x221344[_0xdfd7('0x26')];if(_0x4add3e[_0xdfd7('0x22')][_0xdfd7('0x36')]){_0xd5ec0b[_0xdfd7('0x37')]=[{'all':!![]}];}_0xd5ec0b=_[_0xdfd7('0x30')]({},_0xd5ec0b,_0x4add3e[_0xdfd7('0x33')]);return db[_0xdfd7('0x34')]['find'](_0xd5ec0b)[_0xdfd7('0x18')](handleEntityNotFound(_0x560cdc,null))[_0xdfd7('0x18')](respondWithResult(_0x560cdc,null))[_0xdfd7('0x3a')](handleError(_0x560cdc,null));};exports[_0xdfd7('0x3b')]=function(_0x586d29,_0x4c03b2){return db['JscriptySessionReport'][_0xdfd7('0x3b')](_0x586d29[_0xdfd7('0x3c')],{})[_0xdfd7('0x18')](respondWithResult(_0x4c03b2,0xc9))[_0xdfd7('0x3a')](handleError(_0x4c03b2,null));};exports[_0xdfd7('0x3d')]=function(_0x1e5b0b,_0x68eff){if(_0x1e5b0b[_0xdfd7('0x3c')]['id']){delete _0x1e5b0b[_0xdfd7('0x3c')]['id'];}return db[_0xdfd7('0x34')]['find']({'where':{'id':_0x1e5b0b[_0xdfd7('0x39')]['id']}})[_0xdfd7('0x18')](handleEntityNotFound(_0x68eff,null))[_0xdfd7('0x18')](saveUpdates(_0x1e5b0b[_0xdfd7('0x3c')],null))['then'](respondWithResult(_0x68eff,null))[_0xdfd7('0x3a')](handleError(_0x68eff,null));};exports[_0xdfd7('0x3e')]=function(_0x3073e1,_0x10117a){return db[_0xdfd7('0x34')][_0xdfd7('0x3f')]({'where':{'id':_0x3073e1[_0xdfd7('0x39')]['id']}})['then'](handleEntityNotFound(_0x10117a,null))['then'](removeEntity(_0x10117a,null))['catch'](handleError(_0x10117a,null));};exports['describe']=function(_0x21e969,_0x335a80){return db['JscriptySessionReport'][_0xdfd7('0x40')]()[_0xdfd7('0x18')](respondWithResult(_0x335a80,null))[_0xdfd7('0x3a')](handleError(_0x335a80,null));};exports[_0xdfd7('0x41')]=function(_0x4e2c96,_0x2f0456,_0x2c6c95){var _0x3de193={'raw':!![],'where':{}};var _0x31cb7f={};var _0x3e7f40={'count':0x0,'rows':[]};return db[_0xdfd7('0x34')][_0xdfd7('0x42')]({'where':{'id':_0x4e2c96['params']['id']}})['then'](handleEntityNotFound(_0x2f0456,null))['then'](function(_0x1d6695){if(_0x1d6695){_0x31cb7f[_0xdfd7('0x26')]=_[_0xdfd7('0x20')](db[_0xdfd7('0x43')][_0xdfd7('0x1f')]);_0x31cb7f[_0xdfd7('0x22')]=_[_0xdfd7('0x20')](_0x4e2c96[_0xdfd7('0x22')]);_0x31cb7f[_0xdfd7('0x24')]=_[_0xdfd7('0x25')](_0x31cb7f[_0xdfd7('0x26')],_0x31cb7f[_0xdfd7('0x22')]);_0x3de193[_0xdfd7('0x27')]=_['intersection'](_0x31cb7f[_0xdfd7('0x26')],qs[_0xdfd7('0x28')](_0x4e2c96[_0xdfd7('0x22')][_0xdfd7('0x28')]));_0x3de193[_0xdfd7('0x27')]=_0x3de193[_0xdfd7('0x27')][_0xdfd7('0x29')]?_0x3de193[_0xdfd7('0x27')]:_0x31cb7f[_0xdfd7('0x26')];if(!_0x4e2c96['query']['hasOwnProperty'](_0xdfd7('0x2b'))){_0x3de193[_0xdfd7('0x13')]=qs[_0xdfd7('0x13')](_0x4e2c96['query']['limit']);_0x3de193['offset']=qs['offset'](_0x4e2c96[_0xdfd7('0x22')][_0xdfd7('0x12')]);}_0x3de193[_0xdfd7('0x2c')]=qs['sort'](_0x4e2c96[_0xdfd7('0x22')][_0xdfd7('0x2d')]);_0x3de193['where']=qs[_0xdfd7('0x24')](_[_0xdfd7('0x44')](_0x4e2c96[_0xdfd7('0x22')],_0x31cb7f[_0xdfd7('0x24')]));_0x3de193[_0xdfd7('0x2e')][_0xdfd7('0x45')]=_0x1d6695['id'];if(_0x4e2c96[_0xdfd7('0x22')]['filter']){_0x3de193[_0xdfd7('0x2e')]=_[_0xdfd7('0x30')](_0x3de193[_0xdfd7('0x2e')],{'$or':_[_0xdfd7('0x32')](_0x3de193[_0xdfd7('0x27')],function(_0x3f1c96){var _0x5309d7={};_0x5309d7[_0x3f1c96]={'$like':'%'+_0x4e2c96[_0xdfd7('0x22')]['filter']+'%'};return _0x5309d7;})});}_0x3de193=_[_0xdfd7('0x30')]({},_0x3de193,_0x4e2c96[_0xdfd7('0x33')]);return db[_0xdfd7('0x43')][_0xdfd7('0x35')]({'where':_0x3de193[_0xdfd7('0x2e')]})[_0xdfd7('0x18')](function(_0x1bd51b){_0x3e7f40[_0xdfd7('0x35')]=_0x1bd51b;if(_0x4e2c96[_0xdfd7('0x22')][_0xdfd7('0x36')]){_0x3de193[_0xdfd7('0x37')]=[{'all':!![]}];}return db[_0xdfd7('0x43')][_0xdfd7('0x46')](_0x3de193);})[_0xdfd7('0x18')](function(_0x583f6f){_0x3e7f40['rows']=_0x583f6f;return _0x3e7f40;});}})['then'](respondWithFilteredResult(_0x2f0456,_0x3de193))[_0xdfd7('0x3a')](handleError(_0x2f0456,null));};
\ No newline at end of file
index d8f9f00..546fcef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xabf1=['define','JscriptySessionReport','report_jscripty_sessions','lodash','util','../../config/logger','request-promise','./jscriptySessionReport.attributes','exports'];(function(_0x4f497e,_0x4a1fb3){var _0x549de8=function(_0x8d6d75){while(--_0x8d6d75){_0x4f497e['push'](_0x4f497e['shift']());}};_0x549de8(++_0x4a1fb3);}(_0xabf1,0xed));var _0x1abf=function(_0x53015a,_0x54476a){_0x53015a=_0x53015a-0x0;var _0xe0a663=_0xabf1[_0x53015a];return _0xe0a663;};'use strict';var _=require(_0x1abf('0x0'));var util=require(_0x1abf('0x1'));var logger=require(_0x1abf('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x1abf('0x3'));var attributes=require(_0x1abf('0x4'));module[_0x1abf('0x5')]=function(_0x1841c9,_0x12cabf){return _0x1841c9[_0x1abf('0x6')](_0x1abf('0x7'),attributes,{'tableName':_0x1abf('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x84f1=['util','../../config/logger','bluebird','request-promise','./jscriptySessionReport.attributes','define','JscriptySessionReport'];(function(_0x16492f,_0xf30269){var _0x50de79=function(_0x324438){while(--_0x324438){_0x16492f['push'](_0x16492f['shift']());}};_0x50de79(++_0xf30269);}(_0x84f1,0x1e3));var _0x184f=function(_0x552c8a,_0x3fe840){_0x552c8a=_0x552c8a-0x0;var _0x34d688=_0x84f1[_0x552c8a];return _0x34d688;};'use strict';var _=require('lodash');var util=require(_0x184f('0x0'));var logger=require(_0x184f('0x1'))('api');var moment=require('moment');var BPromise=require(_0x184f('0x2'));var rp=require(_0x184f('0x3'));var attributes=require(_0x184f('0x4'));module['exports']=function(_0x3689a3,_0xcb9d6d){return _0x3689a3[_0x184f('0x5')](_0x184f('0x6'),attributes,{'tableName':'report_jscripty_sessions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 237af6e..bc33dfe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xccff=['JscriptySessionReport,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','util','moment','bluebird','../../mysqldb','rpc','../../config/environment','client','http','request','then','info','JscriptySessionReport,\x20%s,\x20%s','request\x20sent'];(function(_0x1c61b5,_0x2f01d7){var _0x1234d1=function(_0x388183){while(--_0x388183){_0x1c61b5['push'](_0x1c61b5['shift']());}};_0x1234d1(++_0x2f01d7);}(_0xccff,0xfd));var _0xfccf=function(_0x375a64,_0x192c89){_0x375a64=_0x375a64-0x0;var _0x5213da=_0xccff[_0x375a64];return _0x5213da;};'use strict';var _=require('lodash');var util=require(_0xfccf('0x0'));var moment=require(_0xfccf('0x1'));var BPromise=require(_0xfccf('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xfccf('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xfccf('0x4'));var config=require(_0xfccf('0x5'));var jayson=require('jayson/promise');var client=jayson[_0xfccf('0x6')][_0xfccf('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x58d7fd,_0x293469,_0x2706e8){return new BPromise(function(_0xdaec9c,_0xa26481){return client[_0xfccf('0x8')](_0x58d7fd,_0x2706e8)[_0xfccf('0x9')](function(_0x35befc){logger[_0xfccf('0xa')](_0xfccf('0xb'),_0x293469,_0xfccf('0xc'));logger['debug'](_0xfccf('0xd'),_0x293469,_0xfccf('0xc'),JSON['stringify'](_0x35befc));if(_0x35befc[_0xfccf('0xe')]){if(_0x35befc[_0xfccf('0xe')][_0xfccf('0xf')]===0x1f4){logger[_0xfccf('0xe')](_0xfccf('0xb'),_0x293469,_0x35befc[_0xfccf('0xe')][_0xfccf('0x10')]);return _0xa26481(_0x35befc[_0xfccf('0xe')][_0xfccf('0x10')]);}logger[_0xfccf('0xe')]('JscriptySessionReport,\x20%s,\x20%s',_0x293469,_0x35befc[_0xfccf('0xe')][_0xfccf('0x10')]);return _0xdaec9c(_0x35befc[_0xfccf('0xe')]['message']);}else{logger[_0xfccf('0xa')](_0xfccf('0xb'),_0x293469,_0xfccf('0xc'));_0xdaec9c(_0x35befc[_0xfccf('0x11')][_0xfccf('0x10')]);}})[_0xfccf('0x12')](function(_0x15be0d){logger['error'](_0xfccf('0xb'),_0x293469,_0x15be0d);_0xa26481(_0x15be0d);});});}
\ No newline at end of file
+var _0x8b49=['request','then','info','JscriptySessionReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','http'];(function(_0x1562a2,_0x2e4655){var _0x39a636=function(_0x25483a){while(--_0x25483a){_0x1562a2['push'](_0x1562a2['shift']());}};_0x39a636(++_0x2e4655);}(_0x8b49,0x19a));var _0x98b4=function(_0x41d5d5,_0x9867db){_0x41d5d5=_0x41d5d5-0x0;var _0x2142d3=_0x8b49[_0x41d5d5];return _0x2142d3;};'use strict';var _=require(_0x98b4('0x0'));var util=require(_0x98b4('0x1'));var moment=require(_0x98b4('0x2'));var BPromise=require(_0x98b4('0x3'));var rs=require(_0x98b4('0x4'));var fs=require('fs');var db=require(_0x98b4('0x5'))['db'];var utils=require(_0x98b4('0x6'));var logger=require(_0x98b4('0x7'))('rpc');var config=require('../../config/environment');var jayson=require(_0x98b4('0x8'));var client=jayson['client'][_0x98b4('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x444c5,_0x4a9293,_0x1ee8f9){return new BPromise(function(_0x137675,_0x2650a5){return client[_0x98b4('0xa')](_0x444c5,_0x1ee8f9)[_0x98b4('0xb')](function(_0x402773){logger[_0x98b4('0xc')](_0x98b4('0xd'),_0x4a9293,_0x98b4('0xe'));logger[_0x98b4('0xf')]('JscriptySessionReport,\x20%s,\x20%s,\x20%s',_0x4a9293,_0x98b4('0xe'),JSON[_0x98b4('0x10')](_0x402773));if(_0x402773[_0x98b4('0x11')]){if(_0x402773[_0x98b4('0x11')]['code']===0x1f4){logger[_0x98b4('0x11')]('JscriptySessionReport,\x20%s,\x20%s',_0x4a9293,_0x402773[_0x98b4('0x11')][_0x98b4('0x12')]);return _0x2650a5(_0x402773['error'][_0x98b4('0x12')]);}logger[_0x98b4('0x11')](_0x98b4('0xd'),_0x4a9293,_0x402773['error']['message']);return _0x137675(_0x402773['error']['message']);}else{logger[_0x98b4('0xc')](_0x98b4('0xd'),_0x4a9293,_0x98b4('0xe'));_0x137675(_0x402773[_0x98b4('0x13')][_0x98b4('0x12')]);}})[_0x98b4('0x14')](function(_0x3011ca){logger[_0x98b4('0x11')]('JscriptySessionReport,\x20%s,\x20%s',_0x4a9293,_0x3011ca);_0x2650a5(_0x3011ca);});});}
\ No newline at end of file
index ad63bd2..d931c37 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x235f=['express','../../components/interaction/service','../../config/environment','./license.controller','get','index','put','isAuthenticated','update','exports','util','path'];(function(_0xba6dea,_0x2773d3){var _0x1c5ad3=function(_0x31a906){while(--_0x31a906){_0xba6dea['push'](_0xba6dea['shift']());}};_0x1c5ad3(++_0x2773d3);}(_0x235f,0x196));var _0xf235=function(_0x521929,_0x479be5){_0x521929=_0x521929-0x0;var _0x632436=_0x235f[_0x521929];return _0x632436;};'use strict';var multer=require('multer');var util=require(_0xf235('0x0'));var path=require(_0xf235('0x1'));var express=require(_0xf235('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xf235('0x3'));var config=require(_0xf235('0x4'));var controller=require(_0xf235('0x5'));router[_0xf235('0x6')]('/',controller[_0xf235('0x7')]);router[_0xf235('0x8')]('/:id',auth[_0xf235('0x9')](),controller[_0xf235('0xa')]);module[_0xf235('0xb')]=router;
\ No newline at end of file
+var _0x55ee=['update','exports','multer','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./license.controller','get','index','put','/:id','isAuthenticated'];(function(_0x2d1665,_0x4f5001){var _0xd44742=function(_0x26a436){while(--_0x26a436){_0x2d1665['push'](_0x2d1665['shift']());}};_0xd44742(++_0x4f5001);}(_0x55ee,0x113));var _0xe55e=function(_0x4884a7,_0x18e38a){_0x4884a7=_0x4884a7-0x0;var _0x56b60e=_0x55ee[_0x4884a7];return _0x56b60e;};'use strict';var multer=require(_0xe55e('0x0'));var util=require('util');var path=require('path');var express=require('express');var router=express[_0xe55e('0x1')]();var auth=require(_0xe55e('0x2'));var interaction=require(_0xe55e('0x3'));var config=require(_0xe55e('0x4'));var controller=require(_0xe55e('0x5'));router[_0xe55e('0x6')]('/',controller[_0xe55e('0x7')]);router[_0xe55e('0x8')](_0xe55e('0x9'),auth[_0xe55e('0xa')](),controller[_0xe55e('0xb')]);module[_0xe55e('0xc')]=router;
\ No newline at end of file
index 5b9abe2..bc6c418 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd830=['STRING','sequelize','exports','TEXT'];(function(_0x520ea2,_0x58f6fa){var _0x42b97f=function(_0x5c2c3b){while(--_0x5c2c3b){_0x520ea2['push'](_0x520ea2['shift']());}};_0x42b97f(++_0x58f6fa);}(_0xd830,0x1c1));var _0x0d83=function(_0x4fd9a1,_0x5e7599){_0x4fd9a1=_0x4fd9a1-0x0;var _0x1ee28f=_0xd830[_0x4fd9a1];return _0x1ee28f;};'use strict';var Sequelize=require(_0x0d83('0x0'));module[_0x0d83('0x1')]={'license':{'type':Sequelize[_0x0d83('0x2')]},'data1':{'type':Sequelize[_0x0d83('0x3')]},'data2':{'type':Sequelize[_0x0d83('0x3')]},'chatLicenseExceeded':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
+var _0x45bb=['STRING','INTEGER','sequelize','exports','TEXT'];(function(_0x7d3c5f,_0x40d38e){var _0x20b5f4=function(_0x5162dc){while(--_0x5162dc){_0x7d3c5f['push'](_0x7d3c5f['shift']());}};_0x20b5f4(++_0x40d38e);}(_0x45bb,0x133));var _0xb45b=function(_0x2ec504,_0x12e1d5){_0x2ec504=_0x2ec504-0x0;var _0x5e7bf9=_0x45bb[_0x2ec504];return _0x5e7bf9;};'use strict';var Sequelize=require(_0xb45b('0x0'));module[_0xb45b('0x1')]={'license':{'type':Sequelize[_0xb45b('0x2')]},'data1':{'type':Sequelize[_0xb45b('0x3')]},'data2':{'type':Sequelize[_0xb45b('0x3')]},'chatLicenseExceeded':{'type':Sequelize[_0xb45b('0x4')],'defaultValue':0x0}};
\ No newline at end of file
index 46bfc45..c8d3b19 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc55d=['find','params','get','checkLicense','key','demo','catch','fast-json-patch','request-promise','moment','bluebird','mustache','util','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','Content-Range','reject','update','destroy','then','error','stack','name','send','index','model','keys','License','rawAttributes','query','filters','intersection','fields','attributes','length','options','body'];(function(_0x4573bd,_0x19b9b5){var _0xc07bb9=function(_0x36a36a){while(--_0x36a36a){_0x4573bd['push'](_0x4573bd['shift']());}};_0xc07bb9(++_0x19b9b5);}(_0xc55d,0x1e4));var _0xdc55=function(_0x5d014a,_0x48347b){_0x5d014a=_0x5d014a-0x0;var _0xd1a1ad=_0xc55d[_0x5d014a];return _0xd1a1ad;};'use strict';var jsonpatch=require(_0xdc55('0x0'));var rp=require(_0xdc55('0x1'));var moment=require(_0xdc55('0x2'));var BPromise=require(_0xdc55('0x3'));var Mustache=require(_0xdc55('0x4'));var util=require(_0xdc55('0x5'));var path=require('path');var sox=require('sox');var csv=require(_0xdc55('0x6'));var ejs=require(_0xdc55('0x7'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xdc55('0x8'));var jsforce=require(_0xdc55('0x9'));var deskjs=require(_0xdc55('0xa'));var toCsv=require('to-csv');var querystring=require(_0xdc55('0xb'));var Papa=require(_0xdc55('0xc'));var qs=require(_0xdc55('0xd'));var logger=require('../../config/logger')('api');var utils=require(_0xdc55('0xe'));var config=require(_0xdc55('0xf'));var db=require(_0xdc55('0x10'))['db'];function respondWithStatusCode(_0x15f60a,_0x5dca5d){_0x5dca5d=_0x5dca5d||0xcc;return function(_0x3c8e80){if(_0x3c8e80){return _0x15f60a[_0xdc55('0x11')](_0x5dca5d);}return _0x15f60a[_0xdc55('0x12')](_0x5dca5d)[_0xdc55('0x13')]();};}function respondWithResult(_0x25713f,_0x6b1dfc){_0x6b1dfc=_0x6b1dfc||0xc8;return function(_0x316add){if(_0x316add){return _0x25713f[_0xdc55('0x12')](_0x6b1dfc)[_0xdc55('0x14')](_0x316add);}};}function respondWithFilteredResult(_0x30533d,_0x491a7f){return function(_0x767439){if(_0x767439){var _0x500d5e=_0x767439[_0xdc55('0x15')],_0x251ed1=_0x491a7f['offset'],_0x167615=_0x491a7f[_0xdc55('0x16')]+_0x491a7f[_0xdc55('0x17')],_0x4d5ca9;if(_0x167615>=_0x500d5e){_0x167615=_0x500d5e;_0x4d5ca9=0xc8;}else{_0x4d5ca9=0xce;}_0x30533d[_0xdc55('0x12')](_0x4d5ca9);return _0x30533d['set'](_0xdc55('0x18'),_0x251ed1+'-'+_0x167615+'/'+_0x500d5e)[_0xdc55('0x14')](_0x767439);}return null;};}function patchUpdates(_0x1f6d8){return function(_0x23c170){try{jsonpatch['apply'](_0x23c170,_0x1f6d8,!![]);}catch(_0x469978){return BPromise[_0xdc55('0x19')](_0x469978);}return _0x23c170['save']();};}function saveUpdates(_0x533b67,_0xcf52b4){return function(_0x1be1b3){if(_0x1be1b3){return _0x1be1b3[_0xdc55('0x1a')](_0x533b67)['then'](function(_0x4b0745){return _0x4b0745;});}return null;};}function removeEntity(_0x5a398d,_0x2b3c0e){return function(_0x13544e){if(_0x13544e){return _0x13544e[_0xdc55('0x1b')]()[_0xdc55('0x1c')](function(){_0x5a398d[_0xdc55('0x12')](0xcc)[_0xdc55('0x13')]();});}};}function handleEntityNotFound(_0x179707,_0x118df8){return function(_0x41c16e){if(!_0x41c16e){_0x179707[_0xdc55('0x11')](0x194);}return _0x41c16e;};}function handleError(_0x1cccc3,_0x336d64){_0x336d64=_0x336d64||0x1f4;return function(_0x3dc392){logger[_0xdc55('0x1d')](_0x3dc392[_0xdc55('0x1e')]);if(_0x3dc392['name']){delete _0x3dc392[_0xdc55('0x1f')];}_0x1cccc3[_0xdc55('0x12')](_0x336d64)[_0xdc55('0x20')](_0x3dc392);};}var utilLicense=require('../../config/license/util');exports[_0xdc55('0x21')]=function(_0x3a0412,_0x734a06){var _0x2c7854={'raw':!![],'where':{'id':0x1}},_0x5ccbd3={};_0x5ccbd3[_0xdc55('0x22')]=_[_0xdc55('0x23')](db[_0xdc55('0x24')][_0xdc55('0x25')]);_0x5ccbd3[_0xdc55('0x26')]=_[_0xdc55('0x23')](_0x3a0412[_0xdc55('0x26')]);_0x5ccbd3[_0xdc55('0x27')]=_[_0xdc55('0x28')](_0x5ccbd3[_0xdc55('0x22')],_0x5ccbd3['query']);_0x2c7854['attributes']=_[_0xdc55('0x28')](_0x5ccbd3['model'],qs[_0xdc55('0x29')](_0x3a0412[_0xdc55('0x26')][_0xdc55('0x29')]));_0x2c7854[_0xdc55('0x2a')]=_0x2c7854[_0xdc55('0x2a')][_0xdc55('0x2b')]?_0x2c7854[_0xdc55('0x2a')]:_0x5ccbd3['model'];_0x2c7854=_['merge']({},_0x2c7854,_0x3a0412[_0xdc55('0x2c')]);return utilLicense['getLicense'](_0x2c7854)[_0xdc55('0x1c')](respondWithResult(_0x734a06,null))['catch'](handleError(_0x734a06,null));};exports['update']=function(_0x202a40,_0x3ba557){if(_0x202a40[_0xdc55('0x2d')]['id']){delete _0x202a40['body']['id'];}return db[_0xdc55('0x24')][_0xdc55('0x2e')]({'where':{'id':_0x202a40[_0xdc55('0x2f')]['id']}})[_0xdc55('0x1c')](handleEntityNotFound(_0x3ba557,null))[_0xdc55('0x1c')](function(_0x51e967){var _0x45d192=_0x51e967[_0xdc55('0x30')]({'plain':!![]});return utilLicense[_0xdc55('0x31')](_0x45d192,_0x202a40[_0xdc55('0x2d')][_0xdc55('0x32')]);})[_0xdc55('0x1c')](function(_0x55d3bf){if(!_0x55d3bf[_0xdc55('0x33')]){return saveUpdates(_0x202a40[_0xdc55('0x2d')],null);}return _0x55d3bf;})[_0xdc55('0x1c')](respondWithResult(_0x3ba557,null))[_0xdc55('0x34')](handleError(_0x3ba557,null));};
\ No newline at end of file
+var _0xb646=['offset','set','Content-Range','apply','reject','update','then','error','stack','name','send','../../config/license/util','index','model','keys','rawAttributes','query','filters','intersection','attributes','fields','length','merge','options','getLicense','body','License','params','get','key','catch','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count'];(function(_0x2850c0,_0x1363a7){var _0x21e830=function(_0x3ec70a){while(--_0x3ec70a){_0x2850c0['push'](_0x2850c0['shift']());}};_0x21e830(++_0x1363a7);}(_0xb646,0x1d7));var _0x6b64=function(_0xd7e544,_0x4811bf){_0xd7e544=_0xd7e544-0x0;var _0x3dbcf7=_0xb646[_0xd7e544];return _0x3dbcf7;};'use strict';var jsonpatch=require(_0x6b64('0x0'));var rp=require('request-promise');var moment=require(_0x6b64('0x1'));var BPromise=require(_0x6b64('0x2'));var Mustache=require(_0x6b64('0x3'));var util=require(_0x6b64('0x4'));var path=require('path');var sox=require(_0x6b64('0x5'));var csv=require(_0x6b64('0x6'));var ejs=require(_0x6b64('0x7'));var fs=require('fs');var _=require(_0x6b64('0x8'));var squel=require(_0x6b64('0x9'));var crypto=require('crypto');var jsforce=require(_0x6b64('0xa'));var deskjs=require(_0x6b64('0xb'));var toCsv=require(_0x6b64('0x6'));var querystring=require(_0x6b64('0xc'));var Papa=require(_0x6b64('0xd'));var qs=require('../../components/parsers/qs');var logger=require(_0x6b64('0xe'))(_0x6b64('0xf'));var utils=require(_0x6b64('0x10'));var config=require(_0x6b64('0x11'));var db=require(_0x6b64('0x12'))['db'];function respondWithStatusCode(_0x2a1d99,_0x5ab616){_0x5ab616=_0x5ab616||0xcc;return function(_0x1ba7d6){if(_0x1ba7d6){return _0x2a1d99[_0x6b64('0x13')](_0x5ab616);}return _0x2a1d99[_0x6b64('0x14')](_0x5ab616)[_0x6b64('0x15')]();};}function respondWithResult(_0x3932b0,_0x1efae7){_0x1efae7=_0x1efae7||0xc8;return function(_0x46e1d2){if(_0x46e1d2){return _0x3932b0[_0x6b64('0x14')](_0x1efae7)[_0x6b64('0x16')](_0x46e1d2);}};}function respondWithFilteredResult(_0x11cb4a,_0x3c9bfb){return function(_0xab10a1){if(_0xab10a1){var _0xe91e14=_0xab10a1[_0x6b64('0x17')],_0x48b438=_0x3c9bfb[_0x6b64('0x18')],_0x469d05=_0x3c9bfb['offset']+_0x3c9bfb['limit'],_0x4635de;if(_0x469d05>=_0xe91e14){_0x469d05=_0xe91e14;_0x4635de=0xc8;}else{_0x4635de=0xce;}_0x11cb4a[_0x6b64('0x14')](_0x4635de);return _0x11cb4a[_0x6b64('0x19')](_0x6b64('0x1a'),_0x48b438+'-'+_0x469d05+'/'+_0xe91e14)[_0x6b64('0x16')](_0xab10a1);}return null;};}function patchUpdates(_0x16c1fa){return function(_0x41d6ef){try{jsonpatch[_0x6b64('0x1b')](_0x41d6ef,_0x16c1fa,!![]);}catch(_0x3ca8c3){return BPromise[_0x6b64('0x1c')](_0x3ca8c3);}return _0x41d6ef['save']();};}function saveUpdates(_0x258212,_0x231d0c){return function(_0x5ba8b0){if(_0x5ba8b0){return _0x5ba8b0[_0x6b64('0x1d')](_0x258212)[_0x6b64('0x1e')](function(_0x393ca1){return _0x393ca1;});}return null;};}function removeEntity(_0x4f64f2,_0x1c2eb4){return function(_0x48cab2){if(_0x48cab2){return _0x48cab2['destroy']()[_0x6b64('0x1e')](function(){_0x4f64f2[_0x6b64('0x14')](0xcc)[_0x6b64('0x15')]();});}};}function handleEntityNotFound(_0x5c19a2,_0x42099a){return function(_0x3cb972){if(!_0x3cb972){_0x5c19a2[_0x6b64('0x13')](0x194);}return _0x3cb972;};}function handleError(_0x44e0f6,_0x578112){_0x578112=_0x578112||0x1f4;return function(_0x581c39){logger[_0x6b64('0x1f')](_0x581c39[_0x6b64('0x20')]);if(_0x581c39['name']){delete _0x581c39[_0x6b64('0x21')];}_0x44e0f6[_0x6b64('0x14')](_0x578112)[_0x6b64('0x22')](_0x581c39);};}var utilLicense=require(_0x6b64('0x23'));exports[_0x6b64('0x24')]=function(_0x4e5d7b,_0x5ef7e8){var _0x4cfe97={'raw':!![],'where':{'id':0x1}},_0x12b57b={};_0x12b57b[_0x6b64('0x25')]=_[_0x6b64('0x26')](db['License'][_0x6b64('0x27')]);_0x12b57b[_0x6b64('0x28')]=_[_0x6b64('0x26')](_0x4e5d7b[_0x6b64('0x28')]);_0x12b57b[_0x6b64('0x29')]=_[_0x6b64('0x2a')](_0x12b57b[_0x6b64('0x25')],_0x12b57b[_0x6b64('0x28')]);_0x4cfe97[_0x6b64('0x2b')]=_['intersection'](_0x12b57b[_0x6b64('0x25')],qs[_0x6b64('0x2c')](_0x4e5d7b[_0x6b64('0x28')][_0x6b64('0x2c')]));_0x4cfe97[_0x6b64('0x2b')]=_0x4cfe97['attributes'][_0x6b64('0x2d')]?_0x4cfe97[_0x6b64('0x2b')]:_0x12b57b['model'];_0x4cfe97=_[_0x6b64('0x2e')]({},_0x4cfe97,_0x4e5d7b[_0x6b64('0x2f')]);return utilLicense[_0x6b64('0x30')](_0x4cfe97)[_0x6b64('0x1e')](respondWithResult(_0x5ef7e8,null))['catch'](handleError(_0x5ef7e8,null));};exports[_0x6b64('0x1d')]=function(_0x36a3d8,_0x17656a){if(_0x36a3d8[_0x6b64('0x31')]['id']){delete _0x36a3d8[_0x6b64('0x31')]['id'];}return db[_0x6b64('0x32')]['find']({'where':{'id':_0x36a3d8[_0x6b64('0x33')]['id']}})[_0x6b64('0x1e')](handleEntityNotFound(_0x17656a,null))[_0x6b64('0x1e')](function(_0x5b8834){var _0x107314=_0x5b8834[_0x6b64('0x34')]({'plain':!![]});return utilLicense['checkLicense'](_0x107314,_0x36a3d8[_0x6b64('0x31')][_0x6b64('0x35')]);})['then'](function(_0x54a7e9){if(!_0x54a7e9['demo']){return saveUpdates(_0x36a3d8['body'],null);}return _0x54a7e9;})[_0x6b64('0x1e')](respondWithResult(_0x17656a,null))[_0x6b64('0x36')](handleError(_0x17656a,null));};
\ No newline at end of file
index f0abeea..2ef0af6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7e9=['lodash','util','api','moment','bluebird','./license.attributes','exports','define','license'];(function(_0x157c81,_0x2c0224){var _0x1bfb12=function(_0x4b5c5b){while(--_0x4b5c5b){_0x157c81['push'](_0x157c81['shift']());}};_0x1bfb12(++_0x2c0224);}(_0xc7e9,0x1ef));var _0x9c7e=function(_0x4ae6ef,_0xc2af80){_0x4ae6ef=_0x4ae6ef-0x0;var _0x3cbb4e=_0xc7e9[_0x4ae6ef];return _0x3cbb4e;};'use strict';var _=require(_0x9c7e('0x0'));var util=require(_0x9c7e('0x1'));var logger=require('../../config/logger')(_0x9c7e('0x2'));var moment=require(_0x9c7e('0x3'));var BPromise=require(_0x9c7e('0x4'));var rp=require('request-promise');var attributes=require(_0x9c7e('0x5'));module[_0x9c7e('0x6')]=function(_0x5010c0,_0x571d29){return _0x5010c0[_0x9c7e('0x7')]('License',attributes,{'tableName':_0x9c7e('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd737=['lodash','../../config/logger','moment','bluebird','request-promise','License','license'];(function(_0x5793df,_0x214ce6){var _0x382a63=function(_0x3d38b8){while(--_0x3d38b8){_0x5793df['push'](_0x5793df['shift']());}};_0x382a63(++_0x214ce6);}(_0xd737,0x85));var _0x7d73=function(_0x118733,_0x2bd820){_0x118733=_0x118733-0x0;var _0x4777af=_0xd737[_0x118733];return _0x4777af;};'use strict';var _=require(_0x7d73('0x0'));var util=require('util');var logger=require(_0x7d73('0x1'))('api');var moment=require(_0x7d73('0x2'));var BPromise=require(_0x7d73('0x3'));var rp=require(_0x7d73('0x4'));var attributes=require('./license.attributes');module['exports']=function(_0x3e19ad,_0x493f54){return _0x3e19ad['define'](_0x7d73('0x5'),attributes,{'tableName':_0x7d73('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a0a39d9..519c04e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0ddd=['bluebird','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','http','request','info','License,\x20%s,\x20%s','request\x20sent','debug','License,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','moment'];(function(_0x593387,_0x365dad){var _0x341d67=function(_0x95425f){while(--_0x95425f){_0x593387['push'](_0x593387['shift']());}};_0x341d67(++_0x365dad);}(_0x0ddd,0x163));var _0xd0dd=function(_0x3defc4,_0xee4d5e){_0x3defc4=_0x3defc4-0x0;var _0x2ff39b=_0x0ddd[_0x3defc4];return _0x2ff39b;};'use strict';var _=require(_0xd0dd('0x0'));var util=require('util');var moment=require(_0xd0dd('0x1'));var BPromise=require(_0xd0dd('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xd0dd('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0xd0dd('0x4'))('rpc');var config=require(_0xd0dd('0x5'));var jayson=require(_0xd0dd('0x6'));var client=jayson[_0xd0dd('0x7')][_0xd0dd('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x5b4f48,_0x10a38f,_0x392863){return new BPromise(function(_0x2d7866,_0x499166){return client[_0xd0dd('0x9')](_0x5b4f48,_0x392863)['then'](function(_0x264a3e){logger[_0xd0dd('0xa')](_0xd0dd('0xb'),_0x10a38f,_0xd0dd('0xc'));logger[_0xd0dd('0xd')](_0xd0dd('0xe'),_0x10a38f,_0xd0dd('0xc'),JSON[_0xd0dd('0xf')](_0x264a3e));if(_0x264a3e[_0xd0dd('0x10')]){if(_0x264a3e['error'][_0xd0dd('0x11')]===0x1f4){logger['error'](_0xd0dd('0xb'),_0x10a38f,_0x264a3e[_0xd0dd('0x10')][_0xd0dd('0x12')]);return _0x499166(_0x264a3e[_0xd0dd('0x10')]['message']);}logger['error']('License,\x20%s,\x20%s',_0x10a38f,_0x264a3e[_0xd0dd('0x10')]['message']);return _0x2d7866(_0x264a3e[_0xd0dd('0x10')][_0xd0dd('0x12')]);}else{logger[_0xd0dd('0xa')](_0xd0dd('0xb'),_0x10a38f,'request\x20sent');_0x2d7866(_0x264a3e[_0xd0dd('0x13')][_0xd0dd('0x12')]);}})[_0xd0dd('0x14')](function(_0x44861b){logger['error'](_0xd0dd('0xb'),_0x10a38f,_0x44861b);_0x499166(_0x44861b);});});}
\ No newline at end of file
+var _0x4231=['../../config/logger','rpc','jayson/promise','client','request','then','info','request\x20sent','debug','stringify','error','code','License,\x20%s,\x20%s','message','result','catch','lodash','util','moment','randomstring','../../mysqldb'];(function(_0x2763f2,_0x416af8){var _0x3ef471=function(_0x288aa2){while(--_0x288aa2){_0x2763f2['push'](_0x2763f2['shift']());}};_0x3ef471(++_0x416af8);}(_0x4231,0xb8));var _0x1423=function(_0x2d6d5f,_0x583ccd){_0x2d6d5f=_0x2d6d5f-0x0;var _0x7a96b7=_0x4231[_0x2d6d5f];return _0x7a96b7;};'use strict';var _=require(_0x1423('0x0'));var util=require(_0x1423('0x1'));var moment=require(_0x1423('0x2'));var BPromise=require('bluebird');var rs=require(_0x1423('0x3'));var fs=require('fs');var db=require(_0x1423('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x1423('0x5'))(_0x1423('0x6'));var config=require('../../config/environment');var jayson=require(_0x1423('0x7'));var client=jayson[_0x1423('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3bf589,_0x4bf549,_0x4a4b3a){return new BPromise(function(_0x306ae6,_0x4c00c1){return client[_0x1423('0x9')](_0x3bf589,_0x4a4b3a)[_0x1423('0xa')](function(_0x10c27b){logger[_0x1423('0xb')]('License,\x20%s,\x20%s',_0x4bf549,_0x1423('0xc'));logger[_0x1423('0xd')]('License,\x20%s,\x20%s,\x20%s',_0x4bf549,_0x1423('0xc'),JSON[_0x1423('0xe')](_0x10c27b));if(_0x10c27b['error']){if(_0x10c27b[_0x1423('0xf')][_0x1423('0x10')]===0x1f4){logger[_0x1423('0xf')](_0x1423('0x11'),_0x4bf549,_0x10c27b['error']['message']);return _0x4c00c1(_0x10c27b[_0x1423('0xf')][_0x1423('0x12')]);}logger[_0x1423('0xf')](_0x1423('0x11'),_0x4bf549,_0x10c27b[_0x1423('0xf')][_0x1423('0x12')]);return _0x306ae6(_0x10c27b['error']['message']);}else{logger[_0x1423('0xb')](_0x1423('0x11'),_0x4bf549,_0x1423('0xc'));_0x306ae6(_0x10c27b[_0x1423('0x13')][_0x1423('0x12')]);}})[_0x1423('0x14')](function(_0x55cc54){logger['error']('License,\x20%s,\x20%s',_0x4bf549,_0x55cc54);_0x4c00c1(_0x55cc54);});});}
\ No newline at end of file
index 22b3146..b23af51 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x56fe=['getApplications','getMessages','/:id/verify','/:id/users','getAgents','addDisposition','post','/:id/canned_answers','create','addSmtp','addInteraction','addApplications','/:id/send','send','addAgents','update','delete','removeDispositions','removeAnswers','/:id/out_servers','removeSmtp','destroy','removeAgents','multer','util','Router','../../components/auth/service','../../config/environment','./mailAccount.controller','get','isAuthenticated','/describe','/:id','show','/:id/dispositions','getDispositions','getAnswers','/:id/in_servers','getImap','getSmtp','/:id/interactions'];(function(_0x325332,_0x214f88){var _0x3cc0ee=function(_0x4bf316){while(--_0x4bf316){_0x325332['push'](_0x325332['shift']());}};_0x3cc0ee(++_0x214f88);}(_0x56fe,0xe4));var _0xe56f=function(_0x37949e,_0x378ead){_0x37949e=_0x37949e-0x0;var _0x93b02d=_0x56fe[_0x37949e];return _0x93b02d;};'use strict';var multer=require(_0xe56f('0x0'));var util=require(_0xe56f('0x1'));var path=require('path');var express=require('express');var router=express[_0xe56f('0x2')]();var auth=require(_0xe56f('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xe56f('0x4'));var controller=require(_0xe56f('0x5'));router[_0xe56f('0x6')]('/',auth[_0xe56f('0x7')](),controller['index']);router[_0xe56f('0x6')](_0xe56f('0x8'),auth[_0xe56f('0x7')](),controller['describe']);router[_0xe56f('0x6')](_0xe56f('0x9'),auth[_0xe56f('0x7')](),controller[_0xe56f('0xa')]);router['get'](_0xe56f('0xb'),auth[_0xe56f('0x7')](),controller[_0xe56f('0xc')]);router[_0xe56f('0x6')]('/:id/canned_answers',auth[_0xe56f('0x7')](),controller[_0xe56f('0xd')]);router[_0xe56f('0x6')](_0xe56f('0xe'),auth['isAuthenticated'](),controller[_0xe56f('0xf')]);router[_0xe56f('0x6')]('/:id/out_servers',auth[_0xe56f('0x7')](),controller[_0xe56f('0x10')]);router['get'](_0xe56f('0x11'),auth['isAuthenticated'](),controller['getInteractions']);router['get']('/:id/applications',auth[_0xe56f('0x7')](),controller[_0xe56f('0x12')]);router[_0xe56f('0x6')]('/:id/messages',auth[_0xe56f('0x7')](),controller[_0xe56f('0x13')]);router[_0xe56f('0x6')](_0xe56f('0x14'),auth[_0xe56f('0x7')](),controller['verifySmtp']);router[_0xe56f('0x6')](_0xe56f('0x15'),auth[_0xe56f('0x7')](),controller[_0xe56f('0x16')]);router['post'](_0xe56f('0xb'),auth[_0xe56f('0x7')](),controller[_0xe56f('0x17')]);router[_0xe56f('0x18')](_0xe56f('0x19'),auth[_0xe56f('0x7')](),controller['addAnswer']);router[_0xe56f('0x18')]('/',auth[_0xe56f('0x7')](),controller[_0xe56f('0x1a')]);router[_0xe56f('0x18')]('/:id/in_servers',auth['isAuthenticated'](),controller['addImap']);router[_0xe56f('0x18')]('/:id/out_servers',auth[_0xe56f('0x7')](),controller[_0xe56f('0x1b')]);router['post']('/:id/interactions',auth[_0xe56f('0x7')](),controller[_0xe56f('0x1c')]);router[_0xe56f('0x18')]('/:id/applications',auth[_0xe56f('0x7')](),controller[_0xe56f('0x1d')]);router[_0xe56f('0x18')](_0xe56f('0x1e'),auth[_0xe56f('0x7')](),controller[_0xe56f('0x1f')]);router['post'](_0xe56f('0x15'),auth['isAuthenticated'](),controller[_0xe56f('0x20')]);router['put'](_0xe56f('0x9'),auth[_0xe56f('0x7')](),controller[_0xe56f('0x21')]);router[_0xe56f('0x22')](_0xe56f('0xb'),auth['isAuthenticated'](),controller[_0xe56f('0x23')]);router['delete'](_0xe56f('0x19'),auth[_0xe56f('0x7')](),controller[_0xe56f('0x24')]);router[_0xe56f('0x22')](_0xe56f('0xe'),auth[_0xe56f('0x7')](),controller['removeImap']);router[_0xe56f('0x22')](_0xe56f('0x25'),auth[_0xe56f('0x7')](),controller[_0xe56f('0x26')]);router['delete'](_0xe56f('0x9'),auth['isAuthenticated'](),controller[_0xe56f('0x27')]);router[_0xe56f('0x22')](_0xe56f('0x15'),auth[_0xe56f('0x7')](),controller[_0xe56f('0x28')]);module['exports']=router;
\ No newline at end of file
+var _0x14d0=['addAgents','put','update','delete','removeImap','removeSmtp','destroy','removeAgents','multer','util','path','../../components/interaction/service','../../config/environment','./mailAccount.controller','isAuthenticated','get','/describe','/:id','show','/:id/canned_answers','getAnswers','/:id/in_servers','getImap','/:id/out_servers','getSmtp','/:id/interactions','getApplications','/:id/messages','getMessages','/:id/verify','verifySmtp','/:id/users','/:id/dispositions','addDisposition','post','addAnswer','create','addImap','addSmtp','addInteraction','/:id/send'];(function(_0x4c10be,_0x36f290){var _0x16678e=function(_0x412879){while(--_0x412879){_0x4c10be['push'](_0x4c10be['shift']());}};_0x16678e(++_0x36f290);}(_0x14d0,0x127));var _0x014d=function(_0x1b25c1,_0x2c6ce6){_0x1b25c1=_0x1b25c1-0x0;var _0x1e4447=_0x14d0[_0x1b25c1];return _0x1e4447;};'use strict';var multer=require(_0x014d('0x0'));var util=require(_0x014d('0x1'));var path=require(_0x014d('0x2'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x014d('0x3'));var config=require(_0x014d('0x4'));var controller=require(_0x014d('0x5'));router['get']('/',auth[_0x014d('0x6')](),controller['index']);router[_0x014d('0x7')](_0x014d('0x8'),auth[_0x014d('0x6')](),controller['describe']);router['get'](_0x014d('0x9'),auth[_0x014d('0x6')](),controller[_0x014d('0xa')]);router[_0x014d('0x7')]('/:id/dispositions',auth['isAuthenticated'](),controller['getDispositions']);router[_0x014d('0x7')](_0x014d('0xb'),auth[_0x014d('0x6')](),controller[_0x014d('0xc')]);router[_0x014d('0x7')](_0x014d('0xd'),auth[_0x014d('0x6')](),controller[_0x014d('0xe')]);router[_0x014d('0x7')](_0x014d('0xf'),auth[_0x014d('0x6')](),controller[_0x014d('0x10')]);router[_0x014d('0x7')](_0x014d('0x11'),auth[_0x014d('0x6')](),controller['getInteractions']);router[_0x014d('0x7')]('/:id/applications',auth['isAuthenticated'](),controller[_0x014d('0x12')]);router['get'](_0x014d('0x13'),auth[_0x014d('0x6')](),controller[_0x014d('0x14')]);router[_0x014d('0x7')](_0x014d('0x15'),auth[_0x014d('0x6')](),controller[_0x014d('0x16')]);router['get'](_0x014d('0x17'),auth[_0x014d('0x6')](),controller['getAgents']);router['post'](_0x014d('0x18'),auth[_0x014d('0x6')](),controller[_0x014d('0x19')]);router[_0x014d('0x1a')]('/:id/canned_answers',auth[_0x014d('0x6')](),controller[_0x014d('0x1b')]);router['post']('/',auth[_0x014d('0x6')](),controller[_0x014d('0x1c')]);router[_0x014d('0x1a')](_0x014d('0xd'),auth['isAuthenticated'](),controller[_0x014d('0x1d')]);router['post']('/:id/out_servers',auth['isAuthenticated'](),controller[_0x014d('0x1e')]);router[_0x014d('0x1a')](_0x014d('0x11'),auth['isAuthenticated'](),controller[_0x014d('0x1f')]);router[_0x014d('0x1a')]('/:id/applications',auth[_0x014d('0x6')](),controller['addApplications']);router[_0x014d('0x1a')](_0x014d('0x20'),auth[_0x014d('0x6')](),controller['send']);router[_0x014d('0x1a')](_0x014d('0x17'),auth['isAuthenticated'](),controller[_0x014d('0x21')]);router[_0x014d('0x22')](_0x014d('0x9'),auth[_0x014d('0x6')](),controller[_0x014d('0x23')]);router[_0x014d('0x24')]('/:id/dispositions',auth[_0x014d('0x6')](),controller['removeDispositions']);router[_0x014d('0x24')]('/:id/canned_answers',auth[_0x014d('0x6')](),controller['removeAnswers']);router['delete'](_0x014d('0xd'),auth[_0x014d('0x6')](),controller[_0x014d('0x25')]);router['delete'](_0x014d('0xf'),auth['isAuthenticated'](),controller[_0x014d('0x26')]);router['delete'](_0x014d('0x9'),auth[_0x014d('0x6')](),controller[_0x014d('0x27')]);router['delete']('/:id/users',auth['isAuthenticated'](),controller[_0x014d('0x28')]);module['exports']=router;
\ No newline at end of file
index bc78bd4..1c47d52 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x780f=['TEXT','INTEGER','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}<br/>Subject\x20:\x20{{message.subject}}','sequelize','exports','STRING','BOOLEAN'];(function(_0x4e75b9,_0x16b0f7){var _0x48094e=function(_0x477239){while(--_0x477239){_0x4e75b9['push'](_0x4e75b9['shift']());}};_0x48094e(++_0x16b0f7);}(_0x780f,0x6c));var _0xf780=function(_0x5627e1,_0x1b2dbf){_0x5627e1=_0x5627e1-0x0;var _0x2f013f=_0x780f[_0x5627e1];return _0x2f013f;};'use strict';var Sequelize=require(_0xf780('0x0'));module[_0xf780('0x1')]={'description':{'type':Sequelize[_0xf780('0x2')]},'name':{'type':Sequelize[_0xf780('0x2')],'allowNull':![]},'service':{'type':Sequelize[_0xf780('0x3')],'defaultValue':![]},'email':{'type':Sequelize['STRING'],'validate':{'isEmail':!![]}},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'key':{'type':Sequelize[_0xf780('0x2')],'allowNull':![]},'template':{'type':Sequelize[_0xf780('0x4')]},'markAsUnread':{'type':Sequelize[_0xf780('0x3')],'defaultValue':![]},'fontFamily':{'type':Sequelize[_0xf780('0x2')],'allowNull':![],'defaultValue':'Arial,Helvetica,sans-serif'},'fontSize':{'type':Sequelize[_0xf780('0x5')](0x2)['UNSIGNED'],'defaultValue':0xd,'validate':{'min':0x8,'max':0x48}},'notificationTemplate':{'type':Sequelize[_0xf780('0x4')],'defaultValue':function(){return _0xf780('0x6');}},'notificationSound':{'type':Sequelize[_0xf780('0x3')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xf780('0x3')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0xf780('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xf780('0x3')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xf780('0x3')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xf780('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c}};
\ No newline at end of file
+var _0xa4de=['Arial,Helvetica,sans-serif','INTEGER','UNSIGNED','sequelize','STRING','BOOLEAN','TEXT'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa4de,0x10d));var _0xea4d=function(_0x421b99,_0x445522){_0x421b99=_0x421b99-0x0;var _0x34603c=_0xa4de[_0x421b99];return _0x34603c;};'use strict';var Sequelize=require(_0xea4d('0x0'));module['exports']={'description':{'type':Sequelize['STRING']},'name':{'type':Sequelize[_0xea4d('0x1')],'allowNull':![]},'service':{'type':Sequelize[_0xea4d('0x2')],'defaultValue':![]},'email':{'type':Sequelize[_0xea4d('0x1')],'validate':{'isEmail':!![]}},'active':{'type':Sequelize[_0xea4d('0x2')],'defaultValue':!![]},'key':{'type':Sequelize[_0xea4d('0x1')],'allowNull':![]},'template':{'type':Sequelize[_0xea4d('0x3')]},'markAsUnread':{'type':Sequelize[_0xea4d('0x2')],'defaultValue':![]},'fontFamily':{'type':Sequelize[_0xea4d('0x1')],'allowNull':![],'defaultValue':_0xea4d('0x4')},'fontSize':{'type':Sequelize[_0xea4d('0x5')](0x2)[_0xea4d('0x6')],'defaultValue':0xd,'validate':{'min':0x8,'max':0x48}},'notificationTemplate':{'type':Sequelize[_0xea4d('0x3')],'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[_0xea4d('0x2')],'defaultValue':!![]},'notificationShake':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0xea4d('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xea4d('0x2')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xea4d('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xea4d('0x2')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xea4d('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c}};
\ No newline at end of file
index a1d72ad..0215e28 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7217=['port','service','user','pass','cpassword','getImap','setImap','getSmtp','findOne','addSmtp','removeSmtp','addInteraction','MailInteraction','map','CmContact','Contact','User','fullname','internal','Tag','color','tag','addApplications','sequelize','MailApplication','findAndCountAll','priority','getApplications','getMessages','MailMessage','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','List','Contacts','updatedAt','from','attachments','root','basename','auth','secure','SendMail','sendMail','List\x20not\x20found','messageId','subject','attach','out','Interaction','Messages','verifySmtp','VerifySmtp','ValidationError','You\x20can\x27t\x20remove\x20the\x20mail\x20service\x20account','addAgents','omit','spread','userMailAccount:save','removeAgents','isArray','userMailAccount:remove','getAgents','fast-json-patch','moment','bluebird','mustache','util','path','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','localhost','./mailAccount.socket','register','jayson/promise','client','http','request','then','MailAccount,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','catch','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','destroy','stack','name','index','MailServerIn','Imap','MailServerOut','Smtp','rawAttributes','keys','query','dateStart','dateEnd','filters','model','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','add','day','merge','filter','options','include','MailAccount','rows','params','includeAll','find','update','body','describe','addDisposition','MailAccountId','Disposition','getDispositions','removeDispositions','ids','addAnswer','create','getAnswers','CannedAnswer','findAll','removeAnswers','key','email','ListId','isNil','active','description','cservice','cauthentication','cuser','password','authentication','host'];(function(_0x5f52e4,_0x5a69b3){var _0x25148b=function(_0x461a44){while(--_0x461a44){_0x5f52e4['push'](_0x5f52e4['shift']());}};_0x25148b(++_0x5a69b3);}(_0x7217,0x19e));var _0x7721=function(_0x2a6809,_0x44edde){_0x2a6809=_0x2a6809-0x0;var _0x11c371=_0x7217[_0x2a6809];return _0x11c371;};'use strict';var jsonpatch=require(_0x7721('0x0'));var rp=require('request-promise');var moment=require(_0x7721('0x1'));var BPromise=require(_0x7721('0x2'));var Mustache=require(_0x7721('0x3'));var util=require(_0x7721('0x4'));var path=require(_0x7721('0x5'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x7721('0x6'));var fs=require('fs');var _=require(_0x7721('0x7'));var squel=require(_0x7721('0x8'));var crypto=require(_0x7721('0x9'));var jsforce=require(_0x7721('0xa'));var deskjs=require(_0x7721('0xb'));var toCsv=require(_0x7721('0xc'));var querystring=require(_0x7721('0xd'));var Papa=require(_0x7721('0xe'));var qs=require(_0x7721('0xf'));var logger=require(_0x7721('0x10'))(_0x7721('0x11'));var utils=require(_0x7721('0x12'));var config=require(_0x7721('0x13'));var db=require(_0x7721('0x14'))['db'];var socket=require('socket.io-emitter')({'host':_0x7721('0x15'),'port':0x18eb});require(_0x7721('0x16'))[_0x7721('0x17')](socket);var jayson=require(_0x7721('0x18'));var client=jayson[_0x7721('0x19')][_0x7721('0x1a')]({'port':0x232b});function respondWithRpcPromise(_0x1e7fd7,_0x27b36b,_0x55b4ca,_0x2911ec){return new BPromise(function(_0x199930,_0x57ff6d){var _0x109900=_0x2911ec||client;return _0x109900[_0x7721('0x1b')](_0x1e7fd7,_0x55b4ca)[_0x7721('0x1c')](function(_0x2e9752){logger['info'](_0x7721('0x1d'),_0x27b36b,_0x7721('0x1e'));logger['debug']('MailAccount,\x20%s,\x20%s,\x20%s',_0x27b36b,'request\x20sent',JSON[_0x7721('0x1f')](_0x2e9752));if(_0x2e9752[_0x7721('0x20')]){if(_0x2e9752[_0x7721('0x20')][_0x7721('0x21')]===0x1f4){logger['error'](_0x7721('0x1d'),_0x27b36b,_0x2e9752['error'][_0x7721('0x22')]);return _0x57ff6d(_0x2e9752['error'][_0x7721('0x22')]);}logger[_0x7721('0x20')](_0x7721('0x1d'),_0x27b36b,_0x2e9752[_0x7721('0x20')][_0x7721('0x22')]);return _0x199930(_0x2e9752[_0x7721('0x20')][_0x7721('0x22')]);}else{logger[_0x7721('0x23')](_0x7721('0x1d'),_0x27b36b,_0x7721('0x1e'));_0x199930(_0x2e9752['result'][_0x7721('0x22')]);}})[_0x7721('0x24')](function(_0x3a053f){logger[_0x7721('0x20')]('MailAccount,\x20%s,\x20%s',_0x27b36b,_0x3a053f);_0x57ff6d(_0x3a053f);});});}function respondWithStatusCode(_0x28f5a6,_0x512f31){_0x512f31=_0x512f31||0xcc;return function(_0xb9e9dd){if(_0xb9e9dd){return _0x28f5a6[_0x7721('0x25')](_0x512f31);}return _0x28f5a6[_0x7721('0x26')](_0x512f31)[_0x7721('0x27')]();};}function respondWithResult(_0x121cc4,_0x395b15){_0x395b15=_0x395b15||0xc8;return function(_0x2c6b7b){if(_0x2c6b7b){return _0x121cc4['status'](_0x395b15)[_0x7721('0x28')](_0x2c6b7b);}};}function respondWithFilteredResult(_0x1abedb,_0x125564){return function(_0x1f67c7){if(_0x1f67c7){var _0x40d550=_0x1f67c7[_0x7721('0x29')],_0x16355a=_0x125564['offset'],_0x424e05=_0x125564[_0x7721('0x2a')]+_0x125564['limit'],_0xf753f1;if(_0x424e05>=_0x40d550){_0x424e05=_0x40d550;_0xf753f1=0xc8;}else{_0xf753f1=0xce;}_0x1abedb['status'](_0xf753f1);return _0x1abedb[_0x7721('0x2b')](_0x7721('0x2c'),_0x16355a+'-'+_0x424e05+'/'+_0x40d550)[_0x7721('0x28')](_0x1f67c7);}return null;};}function patchUpdates(_0x158d98){return function(_0x1ea4d){try{jsonpatch[_0x7721('0x2d')](_0x1ea4d,_0x158d98,!![]);}catch(_0xd7d703){return BPromise[_0x7721('0x2e')](_0xd7d703);}return _0x1ea4d['save']();};}function saveUpdates(_0x471651,_0x2871c5){return function(_0x497f9f){if(_0x497f9f){return _0x497f9f['update'](_0x471651)[_0x7721('0x1c')](function(_0x220bbf){return _0x220bbf;});}return null;};}function removeEntity(_0x48f329,_0x46f772){return function(_0x4651b5){if(_0x4651b5){return _0x4651b5[_0x7721('0x2f')]()['then'](function(){_0x48f329[_0x7721('0x26')](0xcc)[_0x7721('0x27')]();});}};}function handleEntityNotFound(_0x1492d4,_0x3f15e2){return function(_0xc0f3c4){if(!_0xc0f3c4){_0x1492d4['sendStatus'](0x194);}return _0xc0f3c4;};}function handleError(_0x195ffb,_0x3e4e56){_0x3e4e56=_0x3e4e56||0x1f4;return function(_0xb2386d){logger['error'](_0xb2386d[_0x7721('0x30')]);if(_0xb2386d[_0x7721('0x31')]){delete _0xb2386d['name'];}_0x195ffb[_0x7721('0x26')](_0x3e4e56)['send'](_0xb2386d);};}exports[_0x7721('0x32')]=function(_0x326c50,_0x19d082){var _0x1d894b={'include':[{'model':db[_0x7721('0x33')],'as':_0x7721('0x34')},{'model':db[_0x7721('0x35')],'as':_0x7721('0x36')}]},_0x1c84c0={},_0x13c635={'count':0x0,'rows':[]};var _0x385454=db['MailAccount'][_0x7721('0x37')];_0x1c84c0['model']=_[_0x7721('0x38')](_0x385454);var _0x35614c={'dateStart':_0x326c50[_0x7721('0x39')][_0x7721('0x3a')],'dateEnd':_0x326c50[_0x7721('0x39')][_0x7721('0x3b')]};delete _0x326c50['query']['dateStart'];delete _0x326c50['query']['dateEnd'];_0x1c84c0[_0x7721('0x39')]=_[_0x7721('0x38')](_0x326c50[_0x7721('0x39')]);_0x1c84c0[_0x7721('0x3c')]=_['intersection'](_0x1c84c0[_0x7721('0x3d')],_0x1c84c0['query']);_0x1d894b[_0x7721('0x3e')]=_[_0x7721('0x3f')](_0x1c84c0['model'],qs[_0x7721('0x40')](_0x326c50[_0x7721('0x39')]['fields']));_0x1d894b['attributes']=_0x1d894b[_0x7721('0x3e')][_0x7721('0x41')]?_0x1d894b[_0x7721('0x3e')]:_0x1c84c0[_0x7721('0x3d')];if(!_0x326c50['query'][_0x7721('0x42')](_0x7721('0x43'))){_0x1d894b[_0x7721('0x44')]=qs[_0x7721('0x44')](_0x326c50[_0x7721('0x39')]['limit']);_0x1d894b[_0x7721('0x2a')]=qs['offset'](_0x326c50[_0x7721('0x39')]['offset']);}_0x1d894b[_0x7721('0x45')]=qs[_0x7721('0x46')](_0x326c50[_0x7721('0x39')]['sort']);_0x1d894b[_0x7721('0x47')]=qs[_0x7721('0x3c')](_[_0x7721('0x48')](_0x326c50['query'],_0x1c84c0[_0x7721('0x3c')]));if(_0x35614c[_0x7721('0x3a')]){if(_0x35614c[_0x7721('0x3b')]){_0x35614c[_0x7721('0x3b')]=moment(_0x35614c[_0x7721('0x3b')])[_0x7721('0x49')](0x1,_0x7721('0x4a'));}else{_0x35614c['dateEnd']=moment(_0x35614c['dateStart'])[_0x7721('0x49')](0x1,_0x7721('0x4a'));}_[_0x7721('0x4b')](_0x1d894b[_0x7721('0x47')],{'createdAt':{'$gte':_0x35614c[_0x7721('0x3a')],'$lte':_0x35614c[_0x7721('0x3b')]}});}if(_0x326c50[_0x7721('0x39')][_0x7721('0x4c')]){_0x1d894b[_0x7721('0x47')]=_[_0x7721('0x4b')](_0x1d894b['where'],{'$or':_['map'](_0x1d894b[_0x7721('0x3e')],function(_0x6a4664){var _0x151f69={};_0x151f69[_0x6a4664]={'$like':'%'+_0x326c50[_0x7721('0x39')]['filter']+'%'};return _0x151f69;})});}_0x1d894b=_[_0x7721('0x4b')]({},_0x1d894b,_0x326c50[_0x7721('0x4d')]);var _0x56c3d9={'where':_0x1d894b[_0x7721('0x47')]};return db['MailAccount'][_0x7721('0x29')](_0x56c3d9)['then'](function(_0x334f23){_0x13c635[_0x7721('0x29')]=_0x334f23;if(_0x326c50[_0x7721('0x39')]['includeAll']){_0x1d894b[_0x7721('0x4e')]=[{'all':!![]}];}return db[_0x7721('0x4f')]['findAll'](_0x1d894b);})[_0x7721('0x1c')](function(_0x1196c2){_0x13c635[_0x7721('0x50')]=_0x1196c2;return _0x13c635;})['then'](respondWithFilteredResult(_0x19d082,_0x1d894b))[_0x7721('0x24')](handleError(_0x19d082,null));};exports['show']=function(_0xdb1ca8,_0x310549){var _0x4738ef={'raw':![],'where':{'id':_0xdb1ca8[_0x7721('0x51')]['id']},'include':[{'model':db[_0x7721('0x33')],'as':_0x7721('0x34')},{'model':db[_0x7721('0x35')],'as':_0x7721('0x36')}]},_0x443503={};_0x443503[_0x7721('0x3d')]=_[_0x7721('0x38')](db[_0x7721('0x4f')][_0x7721('0x37')]);_0x443503[_0x7721('0x39')]=_[_0x7721('0x38')](_0xdb1ca8['query']);_0x443503[_0x7721('0x3c')]=_[_0x7721('0x3f')](_0x443503[_0x7721('0x3d')],_0x443503[_0x7721('0x39')]);_0x4738ef[_0x7721('0x3e')]=_[_0x7721('0x3f')](_0x443503[_0x7721('0x3d')],qs['fields'](_0xdb1ca8[_0x7721('0x39')][_0x7721('0x40')]));_0x4738ef[_0x7721('0x3e')]=_0x4738ef[_0x7721('0x3e')][_0x7721('0x41')]?_0x4738ef[_0x7721('0x3e')]:_0x443503[_0x7721('0x3d')];if(_0xdb1ca8[_0x7721('0x39')][_0x7721('0x52')]){_0x4738ef[_0x7721('0x4e')]=[{'all':!![]}];}_0x4738ef=_[_0x7721('0x4b')]({},_0x4738ef,_0xdb1ca8['options']);return db[_0x7721('0x4f')][_0x7721('0x53')](_0x4738ef)[_0x7721('0x1c')](handleEntityNotFound(_0x310549,null))[_0x7721('0x1c')](respondWithResult(_0x310549,null))[_0x7721('0x24')](handleError(_0x310549,null));};exports[_0x7721('0x54')]=function(_0x41644f,_0x36fe6f){if(_0x41644f[_0x7721('0x55')]['id']){delete _0x41644f[_0x7721('0x55')]['id'];}return db[_0x7721('0x4f')][_0x7721('0x53')]({'where':{'id':_0x41644f[_0x7721('0x51')]['id']},'include':[{'model':db[_0x7721('0x33')],'as':_0x7721('0x34')},{'model':db['MailServerOut'],'as':'Smtp'}]})['then'](handleEntityNotFound(_0x36fe6f,null))[_0x7721('0x1c')](saveUpdates(_0x41644f['body'],null))['then'](function(_0x57348c){if(_0x57348c&&_0x41644f['body'][_0x7721('0x34')]){return db[_0x7721('0x33')][_0x7721('0x54')](_0x41644f['body'][_0x7721('0x34')],{'where':{'MailAccountId':_0x57348c['id']}})['then'](function(){return _0x57348c;});}return _0x57348c;})['then'](function(_0x484b8e){if(_0x484b8e&&_0x41644f[_0x7721('0x55')]['Smtp']){return db['MailServerOut']['update'](_0x41644f[_0x7721('0x55')][_0x7721('0x36')],{'where':{'MailAccountId':_0x484b8e['id']}})[_0x7721('0x1c')](function(){return _0x484b8e;});}return _0x484b8e;})['then'](respondWithResult(_0x36fe6f,null))[_0x7721('0x24')](handleError(_0x36fe6f,null));};exports[_0x7721('0x56')]=function(_0x2c95d0,_0x168343){return db[_0x7721('0x4f')][_0x7721('0x56')]()[_0x7721('0x1c')](respondWithResult(_0x168343,null))[_0x7721('0x24')](handleError(_0x168343,null));};exports[_0x7721('0x57')]=function(_0x197b73,_0x3b03cf,_0x10666e){if(_0x197b73[_0x7721('0x55')]['id']){delete _0x197b73[_0x7721('0x55')]['id'];}return db[_0x7721('0x4f')]['find']({'where':{'id':_0x197b73[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x3b03cf,null))[_0x7721('0x1c')](function(_0xb6db23){if(_0xb6db23){_0x197b73['body'][_0x7721('0x58')]=_0xb6db23['id'];return db[_0x7721('0x59')]['create'](_0x197b73[_0x7721('0x55')]);}})['then'](respondWithResult(_0x3b03cf,null))[_0x7721('0x24')](handleError(_0x3b03cf,null));};exports[_0x7721('0x5a')]=function(_0x36a3a6,_0x3f9eaa,_0x3d2b7d){var _0x158aae={'raw':![],'where':{}};var _0x3121e0={};var _0x167ce7={'count':0x0,'rows':[]};return db[_0x7721('0x4f')]['findOne']({'where':{'id':_0x36a3a6[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x3f9eaa,null))[_0x7721('0x1c')](function(_0x3a11e2){if(_0x3a11e2){_0x3121e0[_0x7721('0x3d')]=_[_0x7721('0x38')](db[_0x7721('0x59')]['rawAttributes']);_0x3121e0[_0x7721('0x39')]=_[_0x7721('0x38')](_0x36a3a6['query']);_0x3121e0[_0x7721('0x3c')]=_['intersection'](_0x3121e0[_0x7721('0x3d')],_0x3121e0[_0x7721('0x39')]);_0x158aae[_0x7721('0x3e')]=_[_0x7721('0x3f')](_0x3121e0[_0x7721('0x3d')],qs[_0x7721('0x40')](_0x36a3a6[_0x7721('0x39')]['fields']));_0x158aae[_0x7721('0x3e')]=_0x158aae[_0x7721('0x3e')][_0x7721('0x41')]?_0x158aae['attributes']:_0x3121e0['model'];if(!_0x36a3a6['query']['hasOwnProperty']('nolimit')){_0x158aae[_0x7721('0x44')]=qs[_0x7721('0x44')](_0x36a3a6['query'][_0x7721('0x44')]);_0x158aae[_0x7721('0x2a')]=qs[_0x7721('0x2a')](_0x36a3a6[_0x7721('0x39')]['offset']);}_0x158aae[_0x7721('0x45')]=qs[_0x7721('0x46')](_0x36a3a6[_0x7721('0x39')][_0x7721('0x46')]);_0x158aae[_0x7721('0x47')]=qs['filters'](_[_0x7721('0x48')](_0x36a3a6[_0x7721('0x39')],_0x3121e0[_0x7721('0x3c')]));_0x158aae['where']['MailAccountId']=_0x3a11e2['id'];if(_0x36a3a6[_0x7721('0x39')][_0x7721('0x4c')]){_0x158aae[_0x7721('0x47')]=_[_0x7721('0x4b')](_0x158aae[_0x7721('0x47')],{'$or':_['map'](_0x158aae['attributes'],function(_0x263070){var _0x1bd97e={};_0x1bd97e[_0x263070]={'$like':'%'+_0x36a3a6[_0x7721('0x39')][_0x7721('0x4c')]+'%'};return _0x1bd97e;})});}_0x158aae=_[_0x7721('0x4b')]({},_0x158aae,_0x36a3a6[_0x7721('0x4d')]);return db[_0x7721('0x59')]['count']({'where':_0x158aae[_0x7721('0x47')]})[_0x7721('0x1c')](function(_0x27d7f1){_0x167ce7['count']=_0x27d7f1;if(_0x36a3a6[_0x7721('0x39')][_0x7721('0x52')]){_0x158aae[_0x7721('0x4e')]=[{'all':!![]}];}return db[_0x7721('0x59')]['findAll'](_0x158aae);})['then'](function(_0x37f8f8){_0x167ce7[_0x7721('0x50')]=_0x37f8f8;return _0x167ce7;});}})[_0x7721('0x1c')](respondWithFilteredResult(_0x3f9eaa,_0x158aae))[_0x7721('0x24')](handleError(_0x3f9eaa,null));};exports[_0x7721('0x5b')]=function(_0x2581b3,_0x59e80c,_0x3855d5){var _0x42bb5a;return db[_0x7721('0x4f')]['find']({'where':{'id':_0x2581b3[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x59e80c,null))[_0x7721('0x1c')](function(_0xc20188){if(_0xc20188){return _0xc20188[_0x7721('0x5b')](_0x2581b3['query'][_0x7721('0x5c')]);}})['then'](respondWithStatusCode(_0x59e80c,null))[_0x7721('0x24')](handleError(_0x59e80c,null));};exports[_0x7721('0x5d')]=function(_0x2d5433,_0x7f0598,_0x963dbe){if(_0x2d5433[_0x7721('0x55')]['id']){delete _0x2d5433[_0x7721('0x55')]['id'];}return db[_0x7721('0x4f')][_0x7721('0x53')]({'where':{'id':_0x2d5433[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x7f0598,null))['then'](function(_0x19fad6){if(_0x19fad6){_0x2d5433[_0x7721('0x55')][_0x7721('0x58')]=_0x19fad6['id'];return db['CannedAnswer'][_0x7721('0x5e')](_0x2d5433[_0x7721('0x55')]);}})[_0x7721('0x1c')](respondWithResult(_0x7f0598,null))[_0x7721('0x24')](handleError(_0x7f0598,null));};exports[_0x7721('0x5f')]=function(_0x594059,_0x1276ce,_0x22f15a){var _0x44326d={'raw':![],'where':{}};var _0x21b365={};var _0x30326d={'count':0x0,'rows':[]};return db[_0x7721('0x4f')]['findOne']({'where':{'id':_0x594059[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x1276ce,null))['then'](function(_0x72b86){if(_0x72b86){_0x21b365['model']=_[_0x7721('0x38')](db[_0x7721('0x60')]['rawAttributes']);_0x21b365[_0x7721('0x39')]=_['keys'](_0x594059['query']);_0x21b365['filters']=_[_0x7721('0x3f')](_0x21b365[_0x7721('0x3d')],_0x21b365[_0x7721('0x39')]);_0x44326d['attributes']=_['intersection'](_0x21b365['model'],qs[_0x7721('0x40')](_0x594059[_0x7721('0x39')][_0x7721('0x40')]));_0x44326d[_0x7721('0x3e')]=_0x44326d[_0x7721('0x3e')][_0x7721('0x41')]?_0x44326d['attributes']:_0x21b365[_0x7721('0x3d')];if(!_0x594059[_0x7721('0x39')][_0x7721('0x42')](_0x7721('0x43'))){_0x44326d[_0x7721('0x44')]=qs[_0x7721('0x44')](_0x594059[_0x7721('0x39')][_0x7721('0x44')]);_0x44326d[_0x7721('0x2a')]=qs[_0x7721('0x2a')](_0x594059[_0x7721('0x39')][_0x7721('0x2a')]);}_0x44326d['order']=qs['sort'](_0x594059[_0x7721('0x39')][_0x7721('0x46')]);_0x44326d['where']=qs[_0x7721('0x3c')](_['pick'](_0x594059['query'],_0x21b365[_0x7721('0x3c')]));_0x44326d['where']['MailAccountId']=_0x72b86['id'];if(_0x594059[_0x7721('0x39')][_0x7721('0x4c')]){_0x44326d[_0x7721('0x47')]=_[_0x7721('0x4b')](_0x44326d[_0x7721('0x47')],{'$or':_['map'](_0x44326d[_0x7721('0x3e')],function(_0xcf2c06){var _0x3df933={};_0x3df933[_0xcf2c06]={'$like':'%'+_0x594059[_0x7721('0x39')]['filter']+'%'};return _0x3df933;})});}_0x44326d=_['merge']({},_0x44326d,_0x594059[_0x7721('0x4d')]);return db[_0x7721('0x60')]['count']({'where':_0x44326d[_0x7721('0x47')]})[_0x7721('0x1c')](function(_0x58f7b1){_0x30326d['count']=_0x58f7b1;if(_0x594059[_0x7721('0x39')][_0x7721('0x52')]){_0x44326d[_0x7721('0x4e')]=[{'all':!![]}];}return db[_0x7721('0x60')][_0x7721('0x61')](_0x44326d);})[_0x7721('0x1c')](function(_0x996071){_0x30326d[_0x7721('0x50')]=_0x996071;return _0x30326d;});}})['then'](respondWithFilteredResult(_0x1276ce,_0x44326d))[_0x7721('0x24')](handleError(_0x1276ce,null));};exports[_0x7721('0x62')]=function(_0x3ce0f6,_0x1c4f14,_0xe1c795){var _0x9b5f60;return db[_0x7721('0x4f')]['find']({'where':{'id':_0x3ce0f6[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x1c4f14,null))['then'](function(_0x9b3e44){if(_0x9b3e44){return _0x9b3e44[_0x7721('0x62')](_0x3ce0f6[_0x7721('0x39')][_0x7721('0x5c')]);}})[_0x7721('0x1c')](respondWithStatusCode(_0x1c4f14,null))[_0x7721('0x24')](handleError(_0x1c4f14,null));};exports[_0x7721('0x5e')]=function(_0xef8270,_0x3f4020){var _0x402665={'name':_0xef8270['body'][_0x7721('0x31')],'key':_0xef8270[_0x7721('0x55')][_0x7721('0x63')],'email':_0xef8270[_0x7721('0x55')][_0x7721('0x64')],'ListId':_0xef8270[_0x7721('0x55')][_0x7721('0x65')],'active':!_[_0x7721('0x66')](_0xef8270[_0x7721('0x55')][_0x7721('0x67')])?_0xef8270[_0x7721('0x55')][_0x7721('0x67')]:!![],'description':_0xef8270[_0x7721('0x55')][_0x7721('0x68')]||null,'Imap':{},'Smtp':{}};if(_[_0x7721('0x66')](_0xef8270[_0x7721('0x55')][_0x7721('0x69')])){if(_0xef8270[_0x7721('0x55')][_0x7721('0x6a')]){_0x402665[_0x7721('0x34')]['user']=_0x402665[_0x7721('0x36')]['user']=_0xef8270[_0x7721('0x55')][_0x7721('0x6b')];_0x402665[_0x7721('0x34')][_0x7721('0x6c')]=_0x402665[_0x7721('0x36')]['pass']=_0xef8270['body']['cpassword'];}else{_0x402665['Imap'][_0x7721('0x6d')]=_0x402665[_0x7721('0x36')][_0x7721('0x6d')]=![];}_0x402665[_0x7721('0x34')][_0x7721('0x6e')]=_0xef8270['body'][_0x7721('0x34')]['host'];_0x402665[_0x7721('0x34')][_0x7721('0x6f')]=_0xef8270[_0x7721('0x55')][_0x7721('0x34')][_0x7721('0x6f')];_0x402665[_0x7721('0x36')]['host']=_0xef8270[_0x7721('0x55')]['Smtp']['host'];_0x402665[_0x7721('0x36')][_0x7721('0x6f')]=_0xef8270[_0x7721('0x55')][_0x7721('0x36')][_0x7721('0x6f')];}else{_0x402665['Imap'][_0x7721('0x70')]=_0x402665[_0x7721('0x36')][_0x7721('0x70')]=_0xef8270[_0x7721('0x55')][_0x7721('0x69')];_0x402665[_0x7721('0x34')][_0x7721('0x71')]=_0x402665['Smtp'][_0x7721('0x71')]=_0xef8270[_0x7721('0x55')][_0x7721('0x6b')];_0x402665[_0x7721('0x34')][_0x7721('0x6c')]=_0x402665['Smtp'][_0x7721('0x72')]=_0xef8270[_0x7721('0x55')][_0x7721('0x73')];}return db['MailAccount'][_0x7721('0x5e')](_0x402665,{'include':[{'model':db[_0x7721('0x35')],'as':'Smtp'},{'model':db[_0x7721('0x33')],'as':_0x7721('0x34')}]})[_0x7721('0x1c')](respondWithResult(_0x3f4020,0xc9))[_0x7721('0x24')](handleError(_0x3f4020,null));};exports['getImap']=function(_0x40beb8,_0x47c503,_0x340fd9){return db[_0x7721('0x4f')]['findOne']({'where':{'id':_0x40beb8[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x47c503,null))['then'](function(_0x29968c){if(_0x29968c){return _0x29968c[_0x7721('0x74')]();}return null;})['then'](respondWithResult(_0x47c503,null))[_0x7721('0x24')](handleError(_0x47c503,null));};exports['addImap']=function(_0x240b0a,_0x20380a,_0x271632){if(_0x240b0a['body']['id']){delete _0x240b0a[_0x7721('0x55')]['id'];}return db['MailAccount']['find']({'where':{'id':_0x240b0a[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x20380a,null))[_0x7721('0x1c')](function(_0x335852){if(_0x335852){_0x240b0a[_0x7721('0x55')]['MailAccountId']=_0x335852['id'];return db[_0x7721('0x33')][_0x7721('0x5e')](_0x240b0a[_0x7721('0x55')]);}})[_0x7721('0x1c')](respondWithResult(_0x20380a,null))[_0x7721('0x24')](handleError(_0x20380a,null));};exports['removeImap']=function(_0x22f899,_0x568b64,_0x180db8){return db['MailAccount']['findOne']({'where':{'id':_0x22f899[_0x7721('0x51')]['id']}})['then'](handleEntityNotFound(_0x568b64,null))['then'](function(_0x1cdf1a){if(_0x1cdf1a){return _0x1cdf1a[_0x7721('0x75')](null);}return null;})[_0x7721('0x1c')](respondWithStatusCode(_0x568b64,null))['catch'](handleError(_0x568b64,null));};exports[_0x7721('0x76')]=function(_0x4d49ca,_0x4ac09d,_0x56cb9a){return db[_0x7721('0x4f')][_0x7721('0x77')]({'where':{'id':_0x4d49ca[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x4ac09d,null))[_0x7721('0x1c')](function(_0x37d8d4){if(_0x37d8d4){return _0x37d8d4[_0x7721('0x76')]();}return null;})[_0x7721('0x1c')](respondWithResult(_0x4ac09d,null))[_0x7721('0x24')](handleError(_0x4ac09d,null));};exports[_0x7721('0x78')]=function(_0x25bf32,_0x4ec3c6,_0xf69320){if(_0x25bf32[_0x7721('0x55')]['id']){delete _0x25bf32[_0x7721('0x55')]['id'];}return db[_0x7721('0x4f')][_0x7721('0x53')]({'where':{'id':_0x25bf32[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x4ec3c6,null))['then'](function(_0x4f95f5){if(_0x4f95f5){_0x25bf32[_0x7721('0x55')][_0x7721('0x58')]=_0x4f95f5['id'];return db[_0x7721('0x35')][_0x7721('0x5e')](_0x25bf32['body']);}})[_0x7721('0x1c')](respondWithResult(_0x4ec3c6,null))['catch'](handleError(_0x4ec3c6,null));};exports[_0x7721('0x79')]=function(_0x54ee47,_0x18dfd6,_0x3e7800){return db[_0x7721('0x4f')][_0x7721('0x77')]({'where':{'id':_0x54ee47[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x18dfd6,null))['then'](function(_0x509f2d){if(_0x509f2d){return _0x509f2d['setSmtp'](null);}return null;})[_0x7721('0x1c')](respondWithStatusCode(_0x18dfd6,null))['catch'](handleError(_0x18dfd6,null));};exports[_0x7721('0x7a')]=function(_0x186ada,_0x569923,_0x340926){return db[_0x7721('0x7b')][_0x7721('0x53')]({'where':{'id':_0x186ada['params']['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x569923,null))[_0x7721('0x1c')](function(_0x5652f9){if(_0x5652f9){return _0x5652f9['addInteraction'](_0x186ada[_0x7721('0x55')][_0x7721('0x5c')],_['omit'](_0x186ada[_0x7721('0x55')],[_0x7721('0x5c'),'id'])||{});}})['then'](respondWithResult(_0x569923,null))['catch'](handleError(_0x569923,null));};exports['getInteractions']=function(_0x48a377,_0x19be6b,_0x38ab13){var _0xb42b38={'raw':![],'where':{}};var _0x5eb23b={};var _0x4c456b={'count':0x0,'rows':[]};return db[_0x7721('0x4f')][_0x7721('0x77')]({'where':{'id':_0x48a377[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x19be6b,null))[_0x7721('0x1c')](function(_0x2fd86f){if(_0x2fd86f){_0x5eb23b[_0x7721('0x3d')]=_[_0x7721('0x38')](db[_0x7721('0x7b')]['rawAttributes']);_0x5eb23b['query']=_[_0x7721('0x38')](_0x48a377['query']);_0x5eb23b[_0x7721('0x3c')]=_['intersection'](_0x5eb23b[_0x7721('0x3d')],_0x5eb23b['query']);_0xb42b38[_0x7721('0x3e')]=_[_0x7721('0x3f')](_0x5eb23b['model'],qs['fields'](_0x48a377[_0x7721('0x39')][_0x7721('0x40')]));_0xb42b38[_0x7721('0x3e')]=_0xb42b38[_0x7721('0x3e')][_0x7721('0x41')]?_0xb42b38['attributes']:_0x5eb23b[_0x7721('0x3d')];if(!_0x48a377[_0x7721('0x39')][_0x7721('0x42')]('nolimit')){_0xb42b38[_0x7721('0x44')]=qs[_0x7721('0x44')](_0x48a377[_0x7721('0x39')][_0x7721('0x44')]);_0xb42b38[_0x7721('0x2a')]=qs[_0x7721('0x2a')](_0x48a377[_0x7721('0x39')][_0x7721('0x2a')]);}_0xb42b38[_0x7721('0x45')]=qs[_0x7721('0x46')](_0x48a377[_0x7721('0x39')]['sort']);_0xb42b38[_0x7721('0x47')]=qs[_0x7721('0x3c')](_[_0x7721('0x48')](_0x48a377[_0x7721('0x39')],_0x5eb23b[_0x7721('0x3c')]));_0xb42b38[_0x7721('0x47')][_0x7721('0x58')]=_0x2fd86f['id'];if(_0x48a377['query'][_0x7721('0x4c')]){_0xb42b38['where']=_[_0x7721('0x4b')](_0xb42b38[_0x7721('0x47')],{'$or':_[_0x7721('0x7c')](_0xb42b38[_0x7721('0x3e')],function(_0x37b607){var _0x3d6d41={};_0x3d6d41[_0x37b607]={'$like':'%'+_0x48a377['query'][_0x7721('0x4c')]+'%'};return _0x3d6d41;})});}_0xb42b38=_['merge']({},_0xb42b38,_0x48a377[_0x7721('0x4d')]);return db[_0x7721('0x7b')][_0x7721('0x29')]({'where':_0xb42b38['where']})[_0x7721('0x1c')](function(_0x3eebc0){_0x4c456b[_0x7721('0x29')]=_0x3eebc0;if(_0x48a377[_0x7721('0x39')]['includeAll']){_0xb42b38[_0x7721('0x4e')]=[{'model':db[_0x7721('0x7d')],'as':_0x7721('0x7e'),'required':![]},{'model':db[_0x7721('0x7f')],'as':'Owner','attributes':[_0x7721('0x31'),_0x7721('0x80'),_0x7721('0x81')],'required':![]},{'model':db[_0x7721('0x82')],'as':'Tags','attributes':['id',_0x7721('0x31'),_0x7721('0x83')],'where':_0x48a377[_0x7721('0x39')][_0x7721('0x84')]?{'id':_0x48a377[_0x7721('0x39')][_0x7721('0x84')]}:undefined,'required':_0x48a377[_0x7721('0x39')][_0x7721('0x84')]?!![]:![]}];}return db[_0x7721('0x7b')]['findAll'](_0xb42b38);})[_0x7721('0x1c')](function(_0x412443){_0x4c456b[_0x7721('0x50')]=_0x412443;return _0x4c456b;});}})[_0x7721('0x1c')](respondWithFilteredResult(_0x19be6b,_0xb42b38))[_0x7721('0x24')](handleError(_0x19be6b,null));};exports[_0x7721('0x85')]=function(_0x1a6f68,_0xfbc75b,_0x1952f0){return db[_0x7721('0x4f')][_0x7721('0x77')]({'where':{'id':_0x1a6f68[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0xfbc75b,null))[_0x7721('0x1c')](function(_0x224a12){if(_0x224a12){return db[_0x7721('0x86')]['transaction'](function(_0x2097b9){return db[_0x7721('0x87')][_0x7721('0x2f')]({'where':{'MailAccountId':_0x1a6f68[_0x7721('0x51')]['id']},'transaction':_0x2097b9})[_0x7721('0x1c')](function(_0x857c38){var _0x36862d=_[_0x7721('0x7c')](_0x1a6f68[_0x7721('0x55')],function(_0x38d031){_0x38d031[_0x7721('0x58')]=_0x1a6f68[_0x7721('0x51')]['id'];return _0x38d031;});return db['MailApplication']['bulkCreate'](_0x36862d,{'transaction':_0x2097b9});});})[_0x7721('0x1c')](function(){return db[_0x7721('0x87')][_0x7721('0x88')]({'where':{'MailAccountId':_0x1a6f68[_0x7721('0x51')]['id']},'order':_0x7721('0x89')});});}})['then'](respondWithResult(_0xfbc75b,null))[_0x7721('0x24')](handleError(_0xfbc75b,null));};exports[_0x7721('0x8a')]=function(_0x23b8f9,_0x117446,_0x459cf0){var _0x309b41={};var _0xc0f448={};var _0x3dc688;var _0x298aca;return db[_0x7721('0x4f')][_0x7721('0x77')]({'where':{'id':_0x23b8f9[_0x7721('0x51')]['id']}})['then'](handleEntityNotFound(_0x117446,null))[_0x7721('0x1c')](function(_0x342ebd){if(_0x342ebd){_0x3dc688=_0x342ebd;_0xc0f448[_0x7721('0x3d')]=_['keys'](db[_0x7721('0x87')][_0x7721('0x37')]);_0xc0f448[_0x7721('0x39')]=_['keys'](_0x23b8f9[_0x7721('0x39')]);_0xc0f448['filters']=_['intersection'](_0xc0f448[_0x7721('0x3d')],_0xc0f448[_0x7721('0x39')]);_0x309b41[_0x7721('0x3e')]=_[_0x7721('0x3f')](_0xc0f448['model'],qs[_0x7721('0x40')](_0x23b8f9[_0x7721('0x39')][_0x7721('0x40')]));_0x309b41[_0x7721('0x3e')]=_0x309b41[_0x7721('0x3e')]['length']?_0x309b41[_0x7721('0x3e')]:_0xc0f448[_0x7721('0x3d')];_0x309b41[_0x7721('0x45')]=qs[_0x7721('0x46')](_0x23b8f9[_0x7721('0x39')][_0x7721('0x46')]);_0x309b41[_0x7721('0x47')]=qs[_0x7721('0x3c')](_[_0x7721('0x48')](_0x23b8f9[_0x7721('0x39')],_0xc0f448[_0x7721('0x3c')]));if(_0x23b8f9[_0x7721('0x39')][_0x7721('0x4c')]){_0x309b41[_0x7721('0x47')]=_[_0x7721('0x4b')](_0x309b41[_0x7721('0x47')],{'$or':_[_0x7721('0x7c')](_0x309b41[_0x7721('0x3e')],function(_0x3219ad){var _0x3fca4f={};_0x3fca4f[_0x3219ad]={'$like':'%'+_0x23b8f9[_0x7721('0x39')][_0x7721('0x4c')]+'%'};return _0x3fca4f;})});}_0x309b41=_['merge']({},_0x309b41,_0x23b8f9[_0x7721('0x4d')]);return _0x3dc688['getApplications'](_0x309b41);}})[_0x7721('0x1c')](function(_0x12a75e){if(_0x12a75e){_0x298aca=_0x12a75e[_0x7721('0x41')];if(!_0x23b8f9[_0x7721('0x39')]['hasOwnProperty'](_0x7721('0x43'))){_0x309b41[_0x7721('0x44')]=qs['limit'](_0x23b8f9[_0x7721('0x39')][_0x7721('0x44')]);_0x309b41['offset']=qs[_0x7721('0x2a')](_0x23b8f9[_0x7721('0x39')][_0x7721('0x2a')]);}return _0x3dc688[_0x7721('0x8a')](_0x309b41);}})[_0x7721('0x1c')](function(_0x55c43c){if(_0x55c43c){return _0x55c43c?{'count':_0x298aca,'rows':_0x55c43c}:null;}})['then'](respondWithResult(_0x117446,null))[_0x7721('0x24')](handleError(_0x117446,null));};exports[_0x7721('0x8b')]=function(_0x482439,_0x58efb1,_0x35dda4){var _0x4a38c8={'raw':!![],'where':{}};var _0x1c23e3={};var _0x2e8e1a={'count':0x0,'rows':[]};return db[_0x7721('0x4f')]['findOne']({'where':{'id':_0x482439[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x58efb1,null))[_0x7721('0x1c')](function(_0x32a7fb){if(_0x32a7fb){_0x1c23e3[_0x7721('0x3d')]=_[_0x7721('0x38')](db[_0x7721('0x8c')][_0x7721('0x37')]);_0x1c23e3['query']=_[_0x7721('0x38')](_0x482439[_0x7721('0x39')]);_0x1c23e3[_0x7721('0x3c')]=_[_0x7721('0x3f')](_0x1c23e3[_0x7721('0x3d')],_0x1c23e3['query']);_0x4a38c8[_0x7721('0x3e')]=_[_0x7721('0x3f')](_0x1c23e3[_0x7721('0x3d')],qs[_0x7721('0x40')](_0x482439[_0x7721('0x39')][_0x7721('0x40')]));_0x4a38c8[_0x7721('0x3e')]=_0x4a38c8[_0x7721('0x3e')][_0x7721('0x41')]?_0x4a38c8[_0x7721('0x3e')]:_0x1c23e3[_0x7721('0x3d')];if(!_0x482439['query'][_0x7721('0x42')](_0x7721('0x43'))){_0x4a38c8[_0x7721('0x44')]=qs[_0x7721('0x44')](_0x482439[_0x7721('0x39')][_0x7721('0x44')]);_0x4a38c8[_0x7721('0x2a')]=qs[_0x7721('0x2a')](_0x482439[_0x7721('0x39')][_0x7721('0x2a')]);}_0x4a38c8[_0x7721('0x45')]=qs[_0x7721('0x46')](_0x482439[_0x7721('0x39')][_0x7721('0x46')]);_0x4a38c8[_0x7721('0x47')]=qs['filters'](_[_0x7721('0x48')](_0x482439['query'],_0x1c23e3['filters']));_0x4a38c8[_0x7721('0x47')]['MailAccountId']=_0x32a7fb['id'];if(_0x482439[_0x7721('0x39')][_0x7721('0x4c')]){_0x4a38c8[_0x7721('0x47')]=_[_0x7721('0x4b')](_0x4a38c8['where'],{'$or':_['map'](_0x4a38c8[_0x7721('0x3e')],function(_0x3d8787){var _0x40afa7={};_0x40afa7[_0x3d8787]={'$like':'%'+_0x482439[_0x7721('0x39')][_0x7721('0x4c')]+'%'};return _0x40afa7;})});}if(_0x482439[_0x7721('0x39')][_0x7721('0x8d')]){var _0x5c7b6c=_0x482439[_0x7721('0x39')]['$gte'][_0x7721('0x8e')](',');var _0x3b4137={};_0x3b4137[_0x5c7b6c[0x0]]={'$gte':moment(_0x5c7b6c[0x1])[_0x7721('0x8f')](_0x7721('0x90'))};_0x4a38c8[_0x7721('0x47')]=_[_0x7721('0x4b')](_0x4a38c8[_0x7721('0x47')],_0x3b4137);}_0x4a38c8=_[_0x7721('0x4b')]({},_0x4a38c8,_0x482439[_0x7721('0x4d')]);return db[_0x7721('0x8c')][_0x7721('0x29')]({'where':_0x4a38c8[_0x7721('0x47')]})[_0x7721('0x1c')](function(_0x3b3528){_0x2e8e1a[_0x7721('0x29')]=_0x3b3528;if(_0x482439[_0x7721('0x39')][_0x7721('0x52')]){_0x4a38c8[_0x7721('0x4e')]=[{'all':!![]}];}return db['MailMessage'][_0x7721('0x61')](_0x4a38c8);})[_0x7721('0x1c')](function(_0x4455e4){_0x2e8e1a[_0x7721('0x50')]=_0x4455e4;return _0x2e8e1a;});}})[_0x7721('0x1c')](respondWithFilteredResult(_0x58efb1,_0x4a38c8))[_0x7721('0x24')](handleError(_0x58efb1,null));};exports['send']=function(_0x341362,_0x23b863,_0x3fdc3d){var _0x480f08,_0x1bdadb={},_0x57a437;if(_0x341362[_0x7721('0x55')]['to']){_0x57a437=_0x341362['body']['to'][_0x7721('0x8e')](',')[0x0];}return db[_0x7721('0x4f')][_0x7721('0x53')]({'where':{'id':_0x341362[_0x7721('0x51')]['id']},'include':[{'model':db['CmList'],'as':_0x7721('0x91'),'include':[{'model':db[_0x7721('0x7d')],'as':_0x7721('0x92'),'where':{'email':_0x57a437},'limit':0x1,'order':[[_0x7721('0x93'),'DESC']]}]},{'model':db['MailServerOut'],'as':_0x7721('0x36'),'raw':!![]}]})['then'](handleEntityNotFound(_0x23b863,null))[_0x7721('0x1c')](function(_0x3be243){if(_0x3be243){_0x480f08=_0x3be243;if(_0x3be243[_0x7721('0x36')]){if(_[_0x7721('0x66')](_0x341362[_0x7721('0x55')][_0x7721('0x94')])){_0x341362[_0x7721('0x55')][_0x7721('0x94')]=util[_0x7721('0x8f')]('%s\x20<%s>',_0x3be243[_0x7721('0x31')],_0x3be243[_0x7721('0x64')]||_0x3be243[_0x7721('0x36')]['user']);}if(_0x341362['body'][_0x7721('0x95')]&&_0x341362[_0x7721('0x55')][_0x7721('0x95')][_0x7721('0x41')]){for(var _0x13aa6e=0x0;_0x13aa6e<_0x341362[_0x7721('0x55')]['attachments'][_0x7721('0x41')];_0x13aa6e+=0x1){_0x341362[_0x7721('0x55')]['attachments'][_0x13aa6e]={'filename':_0x341362[_0x7721('0x55')]['attachments'][_0x13aa6e][_0x7721('0x31')],'path':path['join'](config[_0x7721('0x96')],'server/files/attachments',_0x341362['body']['attachments'][_0x13aa6e][_0x7721('0x97')])};}}var _0x510c04={'tls':{'rejectUnauthorized':![]}};if(_['isNil'](_0x3be243['Smtp']['service'])){if(_0x3be243[_0x7721('0x36')][_0x7721('0x6d')]){_0x510c04[_0x7721('0x98')]={'user':_0x3be243[_0x7721('0x36')][_0x7721('0x71')],'pass':_0x3be243['Smtp'][_0x7721('0x72')]};}_0x510c04[_0x7721('0x6e')]=_0x3be243['Smtp'][_0x7721('0x6e')];_0x510c04[_0x7721('0x6f')]=_0x3be243[_0x7721('0x36')][_0x7721('0x6f')];_0x510c04[_0x7721('0x99')]=_0x3be243[_0x7721('0x36')][_0x7721('0x99')];}else{_0x510c04[_0x7721('0x70')]=_0x3be243['Smtp'][_0x7721('0x70')];_0x510c04[_0x7721('0x98')]={'user':_0x3be243[_0x7721('0x36')][_0x7721('0x71')],'pass':_0x3be243[_0x7721('0x36')][_0x7721('0x72')]};}return respondWithRpcPromise(_0x7721('0x9a'),_0x7721('0x9b'),{'account':_0x510c04,'message':_0x341362['body']});}else{throw new Error(_0x7721('0x9c'));}}})[_0x7721('0x1c')](function(_0x17c3e7){if(_0x17c3e7){_0x1bdadb=_0x17c3e7;if(_0x480f08[_0x7721('0x91')]){if(_0x480f08[_0x7721('0x91')]['Contacts'][_0x7721('0x41')]){return _0x480f08[_0x7721('0x91')][_0x7721('0x92')][0x0];}else{return db[_0x7721('0x7d')][_0x7721('0x5e')](_['defaults'](_0x341362[_0x7721('0x55')],{'firstName':_0x341362[_0x7721('0x55')]['to'],'email':_0x341362['body']['to'],'phone':_0x341362[_0x7721('0x55')]['to'],'ListId':_0x480f08[_0x7721('0x65')]}));}}else{throw new Error(_0x7721('0x9c'));}}})[_0x7721('0x1c')](function(_0x46c989){if(_0x46c989){var _0x54dc21={'UserId':_0x341362[_0x7721('0x71')]['id'],'ContactId':_0x46c989['id'],'MailAccountId':_0x480f08['id'],'inReplyTo':_0x1bdadb[_0x7721('0x9d')],'to':_0x341362['body']['from'],'cc':_0x341362[_0x7721('0x55')]['cc'],'subject':_0x341362[_0x7721('0x55')][_0x7721('0x9e')],'attach':_0x341362['body'][_0x7721('0x9f')],'firstMsgDirection':'out','lastMsgAt':moment()['format'](_0x7721('0x90')),'lastMsgDirection':_0x7721('0xa0'),'lastMsgBody':_0x341362[_0x7721('0x55')][_0x7721('0x55')],'Messages':[_[_0x7721('0x4b')](_0x341362['body'],{'messageId':_0x1bdadb[_0x7721('0x9d')],'sentAt':moment()[_0x7721('0x8f')](_0x7721('0x90')),'read':!![],'MailAccountId':_0x480f08['id'],'UserId':_0x341362[_0x7721('0x71')]['id'],'ContactId':_0x46c989['id']})]};if(_0x341362[_0x7721('0x55')]['Interaction']){_0x54dc21=_[_0x7721('0x4b')](_0x54dc21,_0x341362['body'][_0x7721('0xa1')]);}return db[_0x7721('0x7b')][_0x7721('0x5e')](_0x54dc21,{'include':[{'model':db['MailMessage'],'as':_0x7721('0xa2')}]});}})['then'](respondWithResult(_0x23b863,null))[_0x7721('0x24')](handleError(_0x23b863,null));};exports[_0x7721('0xa3')]=function(_0x6858a7,_0x40bea0,_0x39e196){return db[_0x7721('0x4f')][_0x7721('0x53')]({'where':{'id':_0x6858a7[_0x7721('0x51')]['id']},'include':[{'model':db[_0x7721('0x35')],'as':_0x7721('0x36'),'raw':!![]}]})['then'](handleEntityNotFound(_0x40bea0,null))[_0x7721('0x1c')](function(_0x32463b){if(_0x32463b&&_0x32463b[_0x7721('0x36')]){var _0x3493c8={'id':_0x32463b['id'],'tls':{'rejectUnauthorized':![]}};if(_0x32463b[_0x7721('0x36')]['service']){_0x3493c8[_0x7721('0x70')]=_0x32463b[_0x7721('0x36')][_0x7721('0x70')];}else{_0x3493c8['host']=_0x32463b[_0x7721('0x36')][_0x7721('0x6e')];_0x3493c8[_0x7721('0x6f')]=_0x32463b[_0x7721('0x36')][_0x7721('0x6f')];_0x3493c8[_0x7721('0x99')]=_0x32463b[_0x7721('0x36')][_0x7721('0x99')];}if(_0x32463b[_0x7721('0x36')][_0x7721('0x6d')]){_0x3493c8['auth']={'user':_0x32463b[_0x7721('0x36')][_0x7721('0x71')],'pass':_0x32463b[_0x7721('0x36')][_0x7721('0x72')]};}return respondWithRpcPromise(_0x7721('0xa4'),_0x7721('0xa3'),{'account':_0x3493c8});}})[_0x7721('0x1c')](respondWithResult(_0x40bea0,null))[_0x7721('0x24')](handleError(_0x40bea0,null));};exports[_0x7721('0x2f')]=function(_0x3b3dc7,_0x10cd90){return db[_0x7721('0x4f')][_0x7721('0x53')]({'where':{'id':_0x3b3dc7[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x10cd90,null))[_0x7721('0x1c')](function(_0x81ea1c){if(_0x81ea1c&&_0x81ea1c['service']){throw new db['Sequelize'][(_0x7721('0xa5'))](_0x7721('0xa6'));}return _0x81ea1c;})[_0x7721('0x1c')](removeEntity(_0x10cd90,null))[_0x7721('0x24')](handleError(_0x10cd90,null));};exports['addAgents']=function(_0x3af59c,_0x49f369,_0x4d60fe){return db[_0x7721('0x4f')][_0x7721('0x53')]({'where':{'id':_0x3af59c['params']['id']}})['then'](handleEntityNotFound(_0x49f369,null))['then'](function(_0x329081){if(_0x329081){return _0x329081[_0x7721('0xa7')](_0x3af59c[_0x7721('0x55')][_0x7721('0x5c')],_[_0x7721('0xa8')](_0x3af59c['body'],[_0x7721('0x5c'),'id'])||{})[_0x7721('0xa9')](function(_0x14b374){for(var _0x52266a=0x0;_0x52266a<_0x3af59c[_0x7721('0x55')][_0x7721('0x5c')][_0x7721('0x41')];_0x52266a+=0x1){socket['emit'](_0x7721('0xaa'),{'UserId':_0x3af59c[_0x7721('0x55')][_0x7721('0x5c')][_0x52266a],'MailAccountId':_0x3af59c['params']['id']});}return _0x14b374;});}})[_0x7721('0x1c')](respondWithResult(_0x49f369,null))[_0x7721('0x24')](handleError(_0x49f369,null));};exports[_0x7721('0xab')]=function(_0x2c5f34,_0x3db45f,_0x5c1413){var _0x2e2610;return db['MailAccount']['find']({'where':{'id':_0x2c5f34[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x3db45f,null))[_0x7721('0x1c')](function(_0x2a8ec6){if(_0x2a8ec6){return _0x2a8ec6[_0x7721('0xab')](_0x2c5f34['query'][_0x7721('0x5c')])[_0x7721('0x1c')](function(_0x314180){if(_[_0x7721('0xac')](_0x2c5f34[_0x7721('0x39')][_0x7721('0x5c')])){for(var _0x151044=0x0;_0x151044<_0x2c5f34[_0x7721('0x39')][_0x7721('0x5c')][_0x7721('0x41')];_0x151044+=0x1){socket['emit'](_0x7721('0xad'),{'UserId':_0x2c5f34[_0x7721('0x39')]['ids'][_0x151044],'MailAccountId':_0x2c5f34[_0x7721('0x51')]['id']});}}else{socket['emit'](_0x7721('0xad'),{'UserId':_0x2c5f34['query'][_0x7721('0x5c')],'MailAccountId':_0x2c5f34['params']['id']});}});}})['then'](respondWithStatusCode(_0x3db45f,null))['catch'](handleError(_0x3db45f,null));};exports['getAgents']=function(_0x77b244,_0x57ba82,_0x6c01e4){var _0x3afb6e={};var _0x463e21={};var _0x45a896;var _0xfa8926;return db[_0x7721('0x4f')]['findOne']({'where':{'id':_0x77b244[_0x7721('0x51')]['id']}})[_0x7721('0x1c')](handleEntityNotFound(_0x57ba82,null))['then'](function(_0x55da13){if(_0x55da13){_0x45a896=_0x55da13;_0x463e21[_0x7721('0x3d')]=_[_0x7721('0x38')](db[_0x7721('0x7f')]['rawAttributes']);_0x463e21[_0x7721('0x39')]=_[_0x7721('0x38')](_0x77b244[_0x7721('0x39')]);_0x463e21[_0x7721('0x3c')]=_[_0x7721('0x3f')](_0x463e21['model'],_0x463e21[_0x7721('0x39')]);_0x3afb6e[_0x7721('0x3e')]=_[_0x7721('0x3f')](_0x463e21[_0x7721('0x3d')],qs[_0x7721('0x40')](_0x77b244[_0x7721('0x39')][_0x7721('0x40')]));_0x3afb6e[_0x7721('0x3e')]=_0x3afb6e['attributes']['length']?_0x3afb6e[_0x7721('0x3e')]:_0x463e21[_0x7721('0x3d')];_0x3afb6e['order']=qs[_0x7721('0x46')](_0x77b244['query']['sort']);_0x3afb6e[_0x7721('0x47')]=qs['filters'](_[_0x7721('0x48')](_0x77b244['query'],_0x463e21[_0x7721('0x3c')]));if(_0x77b244[_0x7721('0x39')]['filter']){_0x3afb6e[_0x7721('0x47')]=_[_0x7721('0x4b')](_0x3afb6e[_0x7721('0x47')],{'$or':_[_0x7721('0x7c')](_0x3afb6e[_0x7721('0x3e')],function(_0x493478){var _0x3b4b33={};_0x3b4b33[_0x493478]={'$like':'%'+_0x77b244[_0x7721('0x39')][_0x7721('0x4c')]+'%'};return _0x3b4b33;})});}_0x3afb6e=_[_0x7721('0x4b')]({},_0x3afb6e,_0x77b244[_0x7721('0x4d')]);return _0x45a896[_0x7721('0xae')](_0x3afb6e);}})[_0x7721('0x1c')](function(_0x47940f){if(_0x47940f){_0xfa8926=_0x47940f[_0x7721('0x41')];if(!_0x77b244[_0x7721('0x39')][_0x7721('0x42')](_0x7721('0x43'))){_0x3afb6e[_0x7721('0x44')]=qs['limit'](_0x77b244[_0x7721('0x39')][_0x7721('0x44')]);_0x3afb6e[_0x7721('0x2a')]=qs[_0x7721('0x2a')](_0x77b244[_0x7721('0x39')][_0x7721('0x2a')]);}return _0x45a896[_0x7721('0xae')](_0x3afb6e);}})[_0x7721('0x1c')](function(_0x2550f1){if(_0x2550f1){return _0x2550f1?{'count':_0xfa8926,'rows':_0x2550f1}:null;}})[_0x7721('0x1c')](respondWithResult(_0x57ba82,null))['catch'](handleError(_0x57ba82,null));};
\ No newline at end of file
+var _0xe14b=['error','code','MailAccount,\x20%s,\x20%s','message','result','catch','status','end','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','stack','send','index','MailServerIn','Smtp','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','pick','add','merge','where','map','filter','options','MailAccount','findAll','rows','show','params','Imap','MailServerOut','rawAttributes','includeAll','include','body','find','describe','addDisposition','MailAccountId','create','getDispositions','findOne','Disposition','order','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','key','email','ListId','isNil','active','description','cservice','user','cuser','password','pass','cpassword','host','port','service','getImap','addImap','removeImap','setImap','getSmtp','addSmtp','removeSmtp','setSmtp','MailInteraction','addInteraction','omit','getInteractions','CmContact','Contact','User','name','internal','Tag','color','tag','addApplications','sequelize','transaction','MailApplication','bulkCreate','findAndCountAll','getApplications','MailMessage','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','List','Contacts','DESC','%s\x20<%s>','attachments','join','root','server/files/attachments','auth','SendMail','sendMail','List\x20not\x20found','messageId','subject','attach','out','Interaction','Messages','verifySmtp','secure','authentication','VerifySmtp','Sequelize','You\x20can\x27t\x20remove\x20the\x20mail\x20service\x20account','addAgents','spread','emit','userMailAccount:save','removeAgents','isArray','userMailAccount:remove','getAgents','fast-json-patch','request-promise','mustache','util','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','api','../../config/utils','../../config/environment','../../mysqldb','./mailAccount.socket','register','client','http','request','then','info','debug','MailAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify'];(function(_0x1aac3e,_0x599ca5){var _0x51e468=function(_0x141d84){while(--_0x141d84){_0x1aac3e['push'](_0x1aac3e['shift']());}};_0x51e468(++_0x599ca5);}(_0xe14b,0x93));var _0xbe14=function(_0xbbccc4,_0x59012e){_0xbbccc4=_0xbbccc4-0x0;var _0x8027a7=_0xe14b[_0xbbccc4];return _0x8027a7;};'use strict';var jsonpatch=require(_0xbe14('0x0'));var rp=require(_0xbe14('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xbe14('0x2'));var util=require(_0xbe14('0x3'));var path=require('path');var sox=require(_0xbe14('0x4'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xbe14('0x5'));var squel=require(_0xbe14('0x6'));var crypto=require(_0xbe14('0x7'));var jsforce=require(_0xbe14('0x8'));var deskjs=require(_0xbe14('0x9'));var toCsv=require(_0xbe14('0xa'));var querystring=require(_0xbe14('0xb'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0xbe14('0xc'));var utils=require(_0xbe14('0xd'));var config=require(_0xbe14('0xe'));var db=require(_0xbe14('0xf'))['db'];var socket=require('socket.io-emitter')({'host':'localhost','port':0x18eb});require(_0xbe14('0x10'))[_0xbe14('0x11')](socket);var jayson=require('jayson/promise');var client=jayson[_0xbe14('0x12')][_0xbe14('0x13')]({'port':0x232b});function respondWithRpcPromise(_0x886a5e,_0x3d38c2,_0x27792f,_0x3b898d){return new BPromise(function(_0x23a730,_0x2850cb){var _0x16893f=_0x3b898d||client;return _0x16893f[_0xbe14('0x14')](_0x886a5e,_0x27792f)[_0xbe14('0x15')](function(_0x33fd54){logger[_0xbe14('0x16')]('MailAccount,\x20%s,\x20%s',_0x3d38c2,'request\x20sent');logger[_0xbe14('0x17')](_0xbe14('0x18'),_0x3d38c2,_0xbe14('0x19'),JSON[_0xbe14('0x1a')](_0x33fd54));if(_0x33fd54['error']){if(_0x33fd54[_0xbe14('0x1b')][_0xbe14('0x1c')]===0x1f4){logger[_0xbe14('0x1b')](_0xbe14('0x1d'),_0x3d38c2,_0x33fd54[_0xbe14('0x1b')][_0xbe14('0x1e')]);return _0x2850cb(_0x33fd54[_0xbe14('0x1b')]['message']);}logger[_0xbe14('0x1b')](_0xbe14('0x1d'),_0x3d38c2,_0x33fd54[_0xbe14('0x1b')][_0xbe14('0x1e')]);return _0x23a730(_0x33fd54[_0xbe14('0x1b')][_0xbe14('0x1e')]);}else{logger['info'](_0xbe14('0x1d'),_0x3d38c2,_0xbe14('0x19'));_0x23a730(_0x33fd54[_0xbe14('0x1f')][_0xbe14('0x1e')]);}})[_0xbe14('0x20')](function(_0x51dc0b){logger[_0xbe14('0x1b')]('MailAccount,\x20%s,\x20%s',_0x3d38c2,_0x51dc0b);_0x2850cb(_0x51dc0b);});});}function respondWithStatusCode(_0x3c1c85,_0x56e80c){_0x56e80c=_0x56e80c||0xcc;return function(_0x32e8eb){if(_0x32e8eb){return _0x3c1c85['sendStatus'](_0x56e80c);}return _0x3c1c85[_0xbe14('0x21')](_0x56e80c)[_0xbe14('0x22')]();};}function respondWithResult(_0x505dbd,_0x2da350){_0x2da350=_0x2da350||0xc8;return function(_0x4d4190){if(_0x4d4190){return _0x505dbd[_0xbe14('0x21')](_0x2da350)['json'](_0x4d4190);}};}function respondWithFilteredResult(_0x36a21e,_0x5fa043){return function(_0x1ee9c1){if(_0x1ee9c1){var _0x39cc81=_0x1ee9c1[_0xbe14('0x23')],_0x15ef02=_0x5fa043[_0xbe14('0x24')],_0x2703f5=_0x5fa043[_0xbe14('0x24')]+_0x5fa043[_0xbe14('0x25')],_0x55d001;if(_0x2703f5>=_0x39cc81){_0x2703f5=_0x39cc81;_0x55d001=0xc8;}else{_0x55d001=0xce;}_0x36a21e['status'](_0x55d001);return _0x36a21e[_0xbe14('0x26')](_0xbe14('0x27'),_0x15ef02+'-'+_0x2703f5+'/'+_0x39cc81)['json'](_0x1ee9c1);}return null;};}function patchUpdates(_0x3c3613){return function(_0x3b3e84){try{jsonpatch[_0xbe14('0x28')](_0x3b3e84,_0x3c3613,!![]);}catch(_0x19252f){return BPromise[_0xbe14('0x29')](_0x19252f);}return _0x3b3e84[_0xbe14('0x2a')]();};}function saveUpdates(_0x31a664,_0x2b05cb){return function(_0x4168c8){if(_0x4168c8){return _0x4168c8[_0xbe14('0x2b')](_0x31a664)[_0xbe14('0x15')](function(_0x3bf43c){return _0x3bf43c;});}return null;};}function removeEntity(_0x39dc0a,_0x10ae36){return function(_0x223f7a){if(_0x223f7a){return _0x223f7a[_0xbe14('0x2c')]()[_0xbe14('0x15')](function(){_0x39dc0a[_0xbe14('0x21')](0xcc)[_0xbe14('0x22')]();});}};}function handleEntityNotFound(_0x14e7c4,_0x581e86){return function(_0x2e33e1){if(!_0x2e33e1){_0x14e7c4['sendStatus'](0x194);}return _0x2e33e1;};}function handleError(_0x58f8de,_0x46c2d1){_0x46c2d1=_0x46c2d1||0x1f4;return function(_0x4c1e7e){logger[_0xbe14('0x1b')](_0x4c1e7e[_0xbe14('0x2d')]);if(_0x4c1e7e['name']){delete _0x4c1e7e['name'];}_0x58f8de['status'](_0x46c2d1)[_0xbe14('0x2e')](_0x4c1e7e);};}exports[_0xbe14('0x2f')]=function(_0x5f27b6,_0x46c570){var _0x1faf3e={'include':[{'model':db[_0xbe14('0x30')],'as':'Imap'},{'model':db['MailServerOut'],'as':_0xbe14('0x31')}]},_0x452635={},_0x1aa849={'count':0x0,'rows':[]};var _0x52b24c=db['MailAccount']['rawAttributes'];_0x452635[_0xbe14('0x32')]=_[_0xbe14('0x33')](_0x52b24c);var _0x2bb45={'dateStart':_0x5f27b6[_0xbe14('0x34')][_0xbe14('0x35')],'dateEnd':_0x5f27b6[_0xbe14('0x34')][_0xbe14('0x36')]};delete _0x5f27b6[_0xbe14('0x34')][_0xbe14('0x35')];delete _0x5f27b6[_0xbe14('0x34')][_0xbe14('0x36')];_0x452635[_0xbe14('0x34')]=_['keys'](_0x5f27b6['query']);_0x452635[_0xbe14('0x37')]=_[_0xbe14('0x38')](_0x452635[_0xbe14('0x32')],_0x452635['query']);_0x1faf3e[_0xbe14('0x39')]=_[_0xbe14('0x38')](_0x452635[_0xbe14('0x32')],qs[_0xbe14('0x3a')](_0x5f27b6[_0xbe14('0x34')][_0xbe14('0x3a')]));_0x1faf3e[_0xbe14('0x39')]=_0x1faf3e[_0xbe14('0x39')][_0xbe14('0x3b')]?_0x1faf3e['attributes']:_0x452635[_0xbe14('0x32')];if(!_0x5f27b6[_0xbe14('0x34')][_0xbe14('0x3c')](_0xbe14('0x3d'))){_0x1faf3e[_0xbe14('0x25')]=qs[_0xbe14('0x25')](_0x5f27b6['query'][_0xbe14('0x25')]);_0x1faf3e[_0xbe14('0x24')]=qs[_0xbe14('0x24')](_0x5f27b6[_0xbe14('0x34')]['offset']);}_0x1faf3e['order']=qs[_0xbe14('0x3e')](_0x5f27b6[_0xbe14('0x34')][_0xbe14('0x3e')]);_0x1faf3e['where']=qs['filters'](_[_0xbe14('0x3f')](_0x5f27b6['query'],_0x452635['filters']));if(_0x2bb45[_0xbe14('0x35')]){if(_0x2bb45[_0xbe14('0x36')]){_0x2bb45[_0xbe14('0x36')]=moment(_0x2bb45['dateEnd'])['add'](0x1,'day');}else{_0x2bb45[_0xbe14('0x36')]=moment(_0x2bb45[_0xbe14('0x35')])[_0xbe14('0x40')](0x1,'day');}_[_0xbe14('0x41')](_0x1faf3e[_0xbe14('0x42')],{'createdAt':{'$gte':_0x2bb45[_0xbe14('0x35')],'$lte':_0x2bb45[_0xbe14('0x36')]}});}if(_0x5f27b6['query']['filter']){_0x1faf3e[_0xbe14('0x42')]=_[_0xbe14('0x41')](_0x1faf3e[_0xbe14('0x42')],{'$or':_[_0xbe14('0x43')](_0x1faf3e[_0xbe14('0x39')],function(_0x4f2d95){var _0x51023a={};_0x51023a[_0x4f2d95]={'$like':'%'+_0x5f27b6[_0xbe14('0x34')][_0xbe14('0x44')]+'%'};return _0x51023a;})});}_0x1faf3e=_[_0xbe14('0x41')]({},_0x1faf3e,_0x5f27b6[_0xbe14('0x45')]);var _0x4e65d2={'where':_0x1faf3e[_0xbe14('0x42')]};return db[_0xbe14('0x46')]['count'](_0x4e65d2)[_0xbe14('0x15')](function(_0x2a35e5){_0x1aa849[_0xbe14('0x23')]=_0x2a35e5;if(_0x5f27b6[_0xbe14('0x34')]['includeAll']){_0x1faf3e['include']=[{'all':!![]}];}return db[_0xbe14('0x46')][_0xbe14('0x47')](_0x1faf3e);})['then'](function(_0x5acf90){_0x1aa849[_0xbe14('0x48')]=_0x5acf90;return _0x1aa849;})[_0xbe14('0x15')](respondWithFilteredResult(_0x46c570,_0x1faf3e))[_0xbe14('0x20')](handleError(_0x46c570,null));};exports[_0xbe14('0x49')]=function(_0xdbc6e1,_0xd04fd5){var _0x10cd86={'raw':![],'where':{'id':_0xdbc6e1[_0xbe14('0x4a')]['id']},'include':[{'model':db[_0xbe14('0x30')],'as':_0xbe14('0x4b')},{'model':db[_0xbe14('0x4c')],'as':_0xbe14('0x31')}]},_0x5a4068={};_0x5a4068['model']=_[_0xbe14('0x33')](db[_0xbe14('0x46')][_0xbe14('0x4d')]);_0x5a4068[_0xbe14('0x34')]=_[_0xbe14('0x33')](_0xdbc6e1[_0xbe14('0x34')]);_0x5a4068['filters']=_['intersection'](_0x5a4068[_0xbe14('0x32')],_0x5a4068[_0xbe14('0x34')]);_0x10cd86[_0xbe14('0x39')]=_['intersection'](_0x5a4068['model'],qs[_0xbe14('0x3a')](_0xdbc6e1[_0xbe14('0x34')]['fields']));_0x10cd86[_0xbe14('0x39')]=_0x10cd86[_0xbe14('0x39')]['length']?_0x10cd86[_0xbe14('0x39')]:_0x5a4068['model'];if(_0xdbc6e1[_0xbe14('0x34')][_0xbe14('0x4e')]){_0x10cd86[_0xbe14('0x4f')]=[{'all':!![]}];}_0x10cd86=_['merge']({},_0x10cd86,_0xdbc6e1[_0xbe14('0x45')]);return db[_0xbe14('0x46')]['find'](_0x10cd86)[_0xbe14('0x15')](handleEntityNotFound(_0xd04fd5,null))[_0xbe14('0x15')](respondWithResult(_0xd04fd5,null))[_0xbe14('0x20')](handleError(_0xd04fd5,null));};exports[_0xbe14('0x2b')]=function(_0x49322f,_0x4f06a3){if(_0x49322f[_0xbe14('0x50')]['id']){delete _0x49322f[_0xbe14('0x50')]['id'];}return db[_0xbe14('0x46')][_0xbe14('0x51')]({'where':{'id':_0x49322f[_0xbe14('0x4a')]['id']},'include':[{'model':db[_0xbe14('0x30')],'as':_0xbe14('0x4b')},{'model':db['MailServerOut'],'as':_0xbe14('0x31')}]})[_0xbe14('0x15')](handleEntityNotFound(_0x4f06a3,null))[_0xbe14('0x15')](saveUpdates(_0x49322f[_0xbe14('0x50')],null))[_0xbe14('0x15')](function(_0x2ed3fb){if(_0x2ed3fb&&_0x49322f[_0xbe14('0x50')][_0xbe14('0x4b')]){return db[_0xbe14('0x30')][_0xbe14('0x2b')](_0x49322f[_0xbe14('0x50')]['Imap'],{'where':{'MailAccountId':_0x2ed3fb['id']}})['then'](function(){return _0x2ed3fb;});}return _0x2ed3fb;})['then'](function(_0x10c0bc){if(_0x10c0bc&&_0x49322f[_0xbe14('0x50')][_0xbe14('0x31')]){return db[_0xbe14('0x4c')][_0xbe14('0x2b')](_0x49322f[_0xbe14('0x50')][_0xbe14('0x31')],{'where':{'MailAccountId':_0x10c0bc['id']}})[_0xbe14('0x15')](function(){return _0x10c0bc;});}return _0x10c0bc;})[_0xbe14('0x15')](respondWithResult(_0x4f06a3,null))[_0xbe14('0x20')](handleError(_0x4f06a3,null));};exports[_0xbe14('0x52')]=function(_0x4346e8,_0x2088e4){return db[_0xbe14('0x46')][_0xbe14('0x52')]()[_0xbe14('0x15')](respondWithResult(_0x2088e4,null))[_0xbe14('0x20')](handleError(_0x2088e4,null));};exports[_0xbe14('0x53')]=function(_0x29761b,_0x1a945b,_0x5f394c){if(_0x29761b[_0xbe14('0x50')]['id']){delete _0x29761b[_0xbe14('0x50')]['id'];}return db[_0xbe14('0x46')][_0xbe14('0x51')]({'where':{'id':_0x29761b[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x1a945b,null))[_0xbe14('0x15')](function(_0x310311){if(_0x310311){_0x29761b[_0xbe14('0x50')][_0xbe14('0x54')]=_0x310311['id'];return db['Disposition'][_0xbe14('0x55')](_0x29761b[_0xbe14('0x50')]);}})[_0xbe14('0x15')](respondWithResult(_0x1a945b,null))[_0xbe14('0x20')](handleError(_0x1a945b,null));};exports[_0xbe14('0x56')]=function(_0x5a1ea6,_0x42b341,_0x120077){var _0x3d186b={'raw':![],'where':{}};var _0xd4e1c7={};var _0x46ac9c={'count':0x0,'rows':[]};return db['MailAccount'][_0xbe14('0x57')]({'where':{'id':_0x5a1ea6[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x42b341,null))[_0xbe14('0x15')](function(_0xaebce8){if(_0xaebce8){_0xd4e1c7[_0xbe14('0x32')]=_[_0xbe14('0x33')](db[_0xbe14('0x58')]['rawAttributes']);_0xd4e1c7[_0xbe14('0x34')]=_[_0xbe14('0x33')](_0x5a1ea6[_0xbe14('0x34')]);_0xd4e1c7[_0xbe14('0x37')]=_[_0xbe14('0x38')](_0xd4e1c7[_0xbe14('0x32')],_0xd4e1c7[_0xbe14('0x34')]);_0x3d186b['attributes']=_['intersection'](_0xd4e1c7[_0xbe14('0x32')],qs[_0xbe14('0x3a')](_0x5a1ea6[_0xbe14('0x34')][_0xbe14('0x3a')]));_0x3d186b[_0xbe14('0x39')]=_0x3d186b[_0xbe14('0x39')][_0xbe14('0x3b')]?_0x3d186b[_0xbe14('0x39')]:_0xd4e1c7['model'];if(!_0x5a1ea6['query'][_0xbe14('0x3c')](_0xbe14('0x3d'))){_0x3d186b[_0xbe14('0x25')]=qs['limit'](_0x5a1ea6[_0xbe14('0x34')][_0xbe14('0x25')]);_0x3d186b[_0xbe14('0x24')]=qs[_0xbe14('0x24')](_0x5a1ea6[_0xbe14('0x34')][_0xbe14('0x24')]);}_0x3d186b[_0xbe14('0x59')]=qs['sort'](_0x5a1ea6[_0xbe14('0x34')][_0xbe14('0x3e')]);_0x3d186b[_0xbe14('0x42')]=qs[_0xbe14('0x37')](_[_0xbe14('0x3f')](_0x5a1ea6[_0xbe14('0x34')],_0xd4e1c7[_0xbe14('0x37')]));_0x3d186b['where'][_0xbe14('0x54')]=_0xaebce8['id'];if(_0x5a1ea6[_0xbe14('0x34')][_0xbe14('0x44')]){_0x3d186b[_0xbe14('0x42')]=_[_0xbe14('0x41')](_0x3d186b[_0xbe14('0x42')],{'$or':_[_0xbe14('0x43')](_0x3d186b[_0xbe14('0x39')],function(_0x5d064e){var _0x1e5ce1={};_0x1e5ce1[_0x5d064e]={'$like':'%'+_0x5a1ea6[_0xbe14('0x34')][_0xbe14('0x44')]+'%'};return _0x1e5ce1;})});}_0x3d186b=_[_0xbe14('0x41')]({},_0x3d186b,_0x5a1ea6[_0xbe14('0x45')]);return db[_0xbe14('0x58')]['count']({'where':_0x3d186b[_0xbe14('0x42')]})[_0xbe14('0x15')](function(_0x1edc66){_0x46ac9c[_0xbe14('0x23')]=_0x1edc66;if(_0x5a1ea6['query'][_0xbe14('0x4e')]){_0x3d186b[_0xbe14('0x4f')]=[{'all':!![]}];}return db[_0xbe14('0x58')][_0xbe14('0x47')](_0x3d186b);})[_0xbe14('0x15')](function(_0x3d54e4){_0x46ac9c[_0xbe14('0x48')]=_0x3d54e4;return _0x46ac9c;});}})['then'](respondWithFilteredResult(_0x42b341,_0x3d186b))[_0xbe14('0x20')](handleError(_0x42b341,null));};exports['removeDispositions']=function(_0x1fc8db,_0x5d85d3,_0x389822){var _0x21837c;return db[_0xbe14('0x46')]['find']({'where':{'id':_0x1fc8db[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x5d85d3,null))[_0xbe14('0x15')](function(_0x546f22){if(_0x546f22){return _0x546f22[_0xbe14('0x5a')](_0x1fc8db[_0xbe14('0x34')][_0xbe14('0x5b')]);}})[_0xbe14('0x15')](respondWithStatusCode(_0x5d85d3,null))['catch'](handleError(_0x5d85d3,null));};exports[_0xbe14('0x5c')]=function(_0x39bc54,_0x34f90b,_0x2b2e0e){if(_0x39bc54[_0xbe14('0x50')]['id']){delete _0x39bc54[_0xbe14('0x50')]['id'];}return db[_0xbe14('0x46')]['find']({'where':{'id':_0x39bc54[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x34f90b,null))[_0xbe14('0x15')](function(_0x5c89a0){if(_0x5c89a0){_0x39bc54[_0xbe14('0x50')][_0xbe14('0x54')]=_0x5c89a0['id'];return db[_0xbe14('0x5d')]['create'](_0x39bc54[_0xbe14('0x50')]);}})[_0xbe14('0x15')](respondWithResult(_0x34f90b,null))['catch'](handleError(_0x34f90b,null));};exports[_0xbe14('0x5e')]=function(_0x49990b,_0x4640b1,_0x337073){var _0x4dfa19={'raw':![],'where':{}};var _0x55d729={};var _0x54045e={'count':0x0,'rows':[]};return db[_0xbe14('0x46')][_0xbe14('0x57')]({'where':{'id':_0x49990b['params']['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x4640b1,null))[_0xbe14('0x15')](function(_0x320e6c){if(_0x320e6c){_0x55d729[_0xbe14('0x32')]=_['keys'](db['CannedAnswer'][_0xbe14('0x4d')]);_0x55d729[_0xbe14('0x34')]=_[_0xbe14('0x33')](_0x49990b[_0xbe14('0x34')]);_0x55d729[_0xbe14('0x37')]=_[_0xbe14('0x38')](_0x55d729[_0xbe14('0x32')],_0x55d729['query']);_0x4dfa19[_0xbe14('0x39')]=_['intersection'](_0x55d729[_0xbe14('0x32')],qs[_0xbe14('0x3a')](_0x49990b[_0xbe14('0x34')][_0xbe14('0x3a')]));_0x4dfa19['attributes']=_0x4dfa19[_0xbe14('0x39')][_0xbe14('0x3b')]?_0x4dfa19[_0xbe14('0x39')]:_0x55d729['model'];if(!_0x49990b[_0xbe14('0x34')][_0xbe14('0x3c')](_0xbe14('0x3d'))){_0x4dfa19[_0xbe14('0x25')]=qs[_0xbe14('0x25')](_0x49990b[_0xbe14('0x34')][_0xbe14('0x25')]);_0x4dfa19[_0xbe14('0x24')]=qs[_0xbe14('0x24')](_0x49990b[_0xbe14('0x34')][_0xbe14('0x24')]);}_0x4dfa19[_0xbe14('0x59')]=qs[_0xbe14('0x3e')](_0x49990b[_0xbe14('0x34')][_0xbe14('0x3e')]);_0x4dfa19[_0xbe14('0x42')]=qs[_0xbe14('0x37')](_[_0xbe14('0x3f')](_0x49990b[_0xbe14('0x34')],_0x55d729[_0xbe14('0x37')]));_0x4dfa19['where'][_0xbe14('0x54')]=_0x320e6c['id'];if(_0x49990b['query'][_0xbe14('0x44')]){_0x4dfa19[_0xbe14('0x42')]=_[_0xbe14('0x41')](_0x4dfa19[_0xbe14('0x42')],{'$or':_[_0xbe14('0x43')](_0x4dfa19['attributes'],function(_0x5868d7){var _0x3b4ea8={};_0x3b4ea8[_0x5868d7]={'$like':'%'+_0x49990b[_0xbe14('0x34')][_0xbe14('0x44')]+'%'};return _0x3b4ea8;})});}_0x4dfa19=_[_0xbe14('0x41')]({},_0x4dfa19,_0x49990b['options']);return db[_0xbe14('0x5d')][_0xbe14('0x23')]({'where':_0x4dfa19['where']})[_0xbe14('0x15')](function(_0x3b8b45){_0x54045e[_0xbe14('0x23')]=_0x3b8b45;if(_0x49990b[_0xbe14('0x34')]['includeAll']){_0x4dfa19[_0xbe14('0x4f')]=[{'all':!![]}];}return db['CannedAnswer']['findAll'](_0x4dfa19);})[_0xbe14('0x15')](function(_0x8d506a){_0x54045e[_0xbe14('0x48')]=_0x8d506a;return _0x54045e;});}})[_0xbe14('0x15')](respondWithFilteredResult(_0x4640b1,_0x4dfa19))[_0xbe14('0x20')](handleError(_0x4640b1,null));};exports['removeAnswers']=function(_0x1547f5,_0x1584f6,_0x5dc793){var _0x4e35ed;return db[_0xbe14('0x46')][_0xbe14('0x51')]({'where':{'id':_0x1547f5['params']['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x1584f6,null))['then'](function(_0x101099){if(_0x101099){return _0x101099['removeAnswers'](_0x1547f5[_0xbe14('0x34')]['ids']);}})[_0xbe14('0x15')](respondWithStatusCode(_0x1584f6,null))['catch'](handleError(_0x1584f6,null));};exports[_0xbe14('0x55')]=function(_0xaad91d,_0x517910){var _0x519ffc={'name':_0xaad91d[_0xbe14('0x50')]['name'],'key':_0xaad91d['body'][_0xbe14('0x5f')],'email':_0xaad91d[_0xbe14('0x50')][_0xbe14('0x60')],'ListId':_0xaad91d[_0xbe14('0x50')][_0xbe14('0x61')],'active':!_[_0xbe14('0x62')](_0xaad91d[_0xbe14('0x50')]['active'])?_0xaad91d[_0xbe14('0x50')][_0xbe14('0x63')]:!![],'description':_0xaad91d[_0xbe14('0x50')][_0xbe14('0x64')]||null,'Imap':{},'Smtp':{}};if(_['isNil'](_0xaad91d[_0xbe14('0x50')][_0xbe14('0x65')])){if(_0xaad91d[_0xbe14('0x50')]['cauthentication']){_0x519ffc[_0xbe14('0x4b')][_0xbe14('0x66')]=_0x519ffc['Smtp'][_0xbe14('0x66')]=_0xaad91d['body'][_0xbe14('0x67')];_0x519ffc[_0xbe14('0x4b')][_0xbe14('0x68')]=_0x519ffc['Smtp'][_0xbe14('0x69')]=_0xaad91d['body'][_0xbe14('0x6a')];}else{_0x519ffc['Imap']['authentication']=_0x519ffc[_0xbe14('0x31')]['authentication']=![];}_0x519ffc[_0xbe14('0x4b')]['host']=_0xaad91d[_0xbe14('0x50')][_0xbe14('0x4b')][_0xbe14('0x6b')];_0x519ffc[_0xbe14('0x4b')][_0xbe14('0x6c')]=_0xaad91d[_0xbe14('0x50')][_0xbe14('0x4b')][_0xbe14('0x6c')];_0x519ffc[_0xbe14('0x31')][_0xbe14('0x6b')]=_0xaad91d[_0xbe14('0x50')][_0xbe14('0x31')][_0xbe14('0x6b')];_0x519ffc['Smtp'][_0xbe14('0x6c')]=_0xaad91d[_0xbe14('0x50')][_0xbe14('0x31')][_0xbe14('0x6c')];}else{_0x519ffc[_0xbe14('0x4b')]['service']=_0x519ffc['Smtp'][_0xbe14('0x6d')]=_0xaad91d[_0xbe14('0x50')][_0xbe14('0x65')];_0x519ffc[_0xbe14('0x4b')][_0xbe14('0x66')]=_0x519ffc[_0xbe14('0x31')][_0xbe14('0x66')]=_0xaad91d[_0xbe14('0x50')][_0xbe14('0x67')];_0x519ffc[_0xbe14('0x4b')][_0xbe14('0x68')]=_0x519ffc[_0xbe14('0x31')][_0xbe14('0x69')]=_0xaad91d[_0xbe14('0x50')][_0xbe14('0x6a')];}return db[_0xbe14('0x46')][_0xbe14('0x55')](_0x519ffc,{'include':[{'model':db[_0xbe14('0x4c')],'as':_0xbe14('0x31')},{'model':db[_0xbe14('0x30')],'as':_0xbe14('0x4b')}]})[_0xbe14('0x15')](respondWithResult(_0x517910,0xc9))[_0xbe14('0x20')](handleError(_0x517910,null));};exports[_0xbe14('0x6e')]=function(_0x151680,_0x499b5d,_0x245cdc){return db[_0xbe14('0x46')][_0xbe14('0x57')]({'where':{'id':_0x151680[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x499b5d,null))[_0xbe14('0x15')](function(_0x52b75d){if(_0x52b75d){return _0x52b75d['getImap']();}return null;})[_0xbe14('0x15')](respondWithResult(_0x499b5d,null))['catch'](handleError(_0x499b5d,null));};exports[_0xbe14('0x6f')]=function(_0x4babba,_0x2408c6,_0x59000b){if(_0x4babba[_0xbe14('0x50')]['id']){delete _0x4babba[_0xbe14('0x50')]['id'];}return db[_0xbe14('0x46')][_0xbe14('0x51')]({'where':{'id':_0x4babba[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x2408c6,null))[_0xbe14('0x15')](function(_0x2cb4ea){if(_0x2cb4ea){_0x4babba[_0xbe14('0x50')]['MailAccountId']=_0x2cb4ea['id'];return db[_0xbe14('0x30')][_0xbe14('0x55')](_0x4babba[_0xbe14('0x50')]);}})[_0xbe14('0x15')](respondWithResult(_0x2408c6,null))['catch'](handleError(_0x2408c6,null));};exports[_0xbe14('0x70')]=function(_0x4c3090,_0x2481fe,_0x4eb6c2){return db[_0xbe14('0x46')][_0xbe14('0x57')]({'where':{'id':_0x4c3090[_0xbe14('0x4a')]['id']}})['then'](handleEntityNotFound(_0x2481fe,null))[_0xbe14('0x15')](function(_0x563eb4){if(_0x563eb4){return _0x563eb4[_0xbe14('0x71')](null);}return null;})[_0xbe14('0x15')](respondWithStatusCode(_0x2481fe,null))[_0xbe14('0x20')](handleError(_0x2481fe,null));};exports[_0xbe14('0x72')]=function(_0x1f7987,_0x24d13d,_0x1f3a86){return db[_0xbe14('0x46')][_0xbe14('0x57')]({'where':{'id':_0x1f7987['params']['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x24d13d,null))['then'](function(_0x1993ee){if(_0x1993ee){return _0x1993ee[_0xbe14('0x72')]();}return null;})[_0xbe14('0x15')](respondWithResult(_0x24d13d,null))['catch'](handleError(_0x24d13d,null));};exports[_0xbe14('0x73')]=function(_0x1c5fbc,_0x219403,_0xb6251a){if(_0x1c5fbc[_0xbe14('0x50')]['id']){delete _0x1c5fbc['body']['id'];}return db['MailAccount'][_0xbe14('0x51')]({'where':{'id':_0x1c5fbc['params']['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x219403,null))[_0xbe14('0x15')](function(_0x2dea3d){if(_0x2dea3d){_0x1c5fbc[_0xbe14('0x50')]['MailAccountId']=_0x2dea3d['id'];return db[_0xbe14('0x4c')][_0xbe14('0x55')](_0x1c5fbc['body']);}})[_0xbe14('0x15')](respondWithResult(_0x219403,null))[_0xbe14('0x20')](handleError(_0x219403,null));};exports[_0xbe14('0x74')]=function(_0xc9ab28,_0x498431,_0x20282c){return db[_0xbe14('0x46')][_0xbe14('0x57')]({'where':{'id':_0xc9ab28[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x498431,null))[_0xbe14('0x15')](function(_0x208fae){if(_0x208fae){return _0x208fae[_0xbe14('0x75')](null);}return null;})[_0xbe14('0x15')](respondWithStatusCode(_0x498431,null))[_0xbe14('0x20')](handleError(_0x498431,null));};exports['addInteraction']=function(_0xdb5515,_0x477240,_0x419706){return db[_0xbe14('0x76')]['find']({'where':{'id':_0xdb5515[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x477240,null))[_0xbe14('0x15')](function(_0x4b00ae){if(_0x4b00ae){return _0x4b00ae[_0xbe14('0x77')](_0xdb5515[_0xbe14('0x50')][_0xbe14('0x5b')],_[_0xbe14('0x78')](_0xdb5515[_0xbe14('0x50')],[_0xbe14('0x5b'),'id'])||{});}})[_0xbe14('0x15')](respondWithResult(_0x477240,null))['catch'](handleError(_0x477240,null));};exports[_0xbe14('0x79')]=function(_0x4844b4,_0x24d528,_0x2afb62){var _0x1aa366={'raw':![],'where':{}};var _0x1729ab={};var _0x415f16={'count':0x0,'rows':[]};return db['MailAccount']['findOne']({'where':{'id':_0x4844b4[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x24d528,null))[_0xbe14('0x15')](function(_0xf33945){if(_0xf33945){_0x1729ab['model']=_[_0xbe14('0x33')](db[_0xbe14('0x76')][_0xbe14('0x4d')]);_0x1729ab['query']=_[_0xbe14('0x33')](_0x4844b4['query']);_0x1729ab['filters']=_[_0xbe14('0x38')](_0x1729ab[_0xbe14('0x32')],_0x1729ab[_0xbe14('0x34')]);_0x1aa366['attributes']=_[_0xbe14('0x38')](_0x1729ab[_0xbe14('0x32')],qs['fields'](_0x4844b4[_0xbe14('0x34')][_0xbe14('0x3a')]));_0x1aa366[_0xbe14('0x39')]=_0x1aa366['attributes'][_0xbe14('0x3b')]?_0x1aa366[_0xbe14('0x39')]:_0x1729ab[_0xbe14('0x32')];if(!_0x4844b4[_0xbe14('0x34')][_0xbe14('0x3c')]('nolimit')){_0x1aa366[_0xbe14('0x25')]=qs[_0xbe14('0x25')](_0x4844b4[_0xbe14('0x34')]['limit']);_0x1aa366[_0xbe14('0x24')]=qs[_0xbe14('0x24')](_0x4844b4[_0xbe14('0x34')][_0xbe14('0x24')]);}_0x1aa366[_0xbe14('0x59')]=qs[_0xbe14('0x3e')](_0x4844b4[_0xbe14('0x34')][_0xbe14('0x3e')]);_0x1aa366[_0xbe14('0x42')]=qs[_0xbe14('0x37')](_[_0xbe14('0x3f')](_0x4844b4['query'],_0x1729ab[_0xbe14('0x37')]));_0x1aa366[_0xbe14('0x42')][_0xbe14('0x54')]=_0xf33945['id'];if(_0x4844b4['query'][_0xbe14('0x44')]){_0x1aa366[_0xbe14('0x42')]=_[_0xbe14('0x41')](_0x1aa366['where'],{'$or':_[_0xbe14('0x43')](_0x1aa366['attributes'],function(_0x2d4b18){var _0xcd8cf6={};_0xcd8cf6[_0x2d4b18]={'$like':'%'+_0x4844b4['query'][_0xbe14('0x44')]+'%'};return _0xcd8cf6;})});}_0x1aa366=_[_0xbe14('0x41')]({},_0x1aa366,_0x4844b4['options']);return db[_0xbe14('0x76')][_0xbe14('0x23')]({'where':_0x1aa366[_0xbe14('0x42')]})[_0xbe14('0x15')](function(_0x246a02){_0x415f16[_0xbe14('0x23')]=_0x246a02;if(_0x4844b4['query']['includeAll']){_0x1aa366[_0xbe14('0x4f')]=[{'model':db[_0xbe14('0x7a')],'as':_0xbe14('0x7b'),'required':![]},{'model':db[_0xbe14('0x7c')],'as':'Owner','attributes':[_0xbe14('0x7d'),'fullname',_0xbe14('0x7e')],'required':![]},{'model':db[_0xbe14('0x7f')],'as':'Tags','attributes':['id',_0xbe14('0x7d'),_0xbe14('0x80')],'where':_0x4844b4[_0xbe14('0x34')][_0xbe14('0x81')]?{'id':_0x4844b4[_0xbe14('0x34')][_0xbe14('0x81')]}:undefined,'required':_0x4844b4[_0xbe14('0x34')][_0xbe14('0x81')]?!![]:![]}];}return db[_0xbe14('0x76')][_0xbe14('0x47')](_0x1aa366);})[_0xbe14('0x15')](function(_0xac89e7){_0x415f16['rows']=_0xac89e7;return _0x415f16;});}})[_0xbe14('0x15')](respondWithFilteredResult(_0x24d528,_0x1aa366))[_0xbe14('0x20')](handleError(_0x24d528,null));};exports[_0xbe14('0x82')]=function(_0x4087b6,_0x58b818,_0x24527e){return db[_0xbe14('0x46')]['findOne']({'where':{'id':_0x4087b6[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x58b818,null))[_0xbe14('0x15')](function(_0x4a6fc3){if(_0x4a6fc3){return db[_0xbe14('0x83')][_0xbe14('0x84')](function(_0x25a038){return db[_0xbe14('0x85')][_0xbe14('0x2c')]({'where':{'MailAccountId':_0x4087b6['params']['id']},'transaction':_0x25a038})[_0xbe14('0x15')](function(_0xabc717){var _0x21ccbc=_[_0xbe14('0x43')](_0x4087b6[_0xbe14('0x50')],function(_0x5370c5){_0x5370c5[_0xbe14('0x54')]=_0x4087b6[_0xbe14('0x4a')]['id'];return _0x5370c5;});return db[_0xbe14('0x85')][_0xbe14('0x86')](_0x21ccbc,{'transaction':_0x25a038});});})[_0xbe14('0x15')](function(){return db[_0xbe14('0x85')][_0xbe14('0x87')]({'where':{'MailAccountId':_0x4087b6[_0xbe14('0x4a')]['id']},'order':'priority'});});}})['then'](respondWithResult(_0x58b818,null))[_0xbe14('0x20')](handleError(_0x58b818,null));};exports[_0xbe14('0x88')]=function(_0x199b98,_0x33c411,_0x4c83af){var _0x4bdf59={};var _0x15c93c={};var _0xf6ff8;var _0x3eaabe;return db[_0xbe14('0x46')][_0xbe14('0x57')]({'where':{'id':_0x199b98[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x33c411,null))[_0xbe14('0x15')](function(_0x54e160){if(_0x54e160){_0xf6ff8=_0x54e160;_0x15c93c[_0xbe14('0x32')]=_[_0xbe14('0x33')](db['MailApplication']['rawAttributes']);_0x15c93c[_0xbe14('0x34')]=_['keys'](_0x199b98[_0xbe14('0x34')]);_0x15c93c[_0xbe14('0x37')]=_[_0xbe14('0x38')](_0x15c93c[_0xbe14('0x32')],_0x15c93c[_0xbe14('0x34')]);_0x4bdf59['attributes']=_[_0xbe14('0x38')](_0x15c93c[_0xbe14('0x32')],qs[_0xbe14('0x3a')](_0x199b98[_0xbe14('0x34')][_0xbe14('0x3a')]));_0x4bdf59[_0xbe14('0x39')]=_0x4bdf59['attributes']['length']?_0x4bdf59[_0xbe14('0x39')]:_0x15c93c['model'];_0x4bdf59[_0xbe14('0x59')]=qs[_0xbe14('0x3e')](_0x199b98[_0xbe14('0x34')]['sort']);_0x4bdf59[_0xbe14('0x42')]=qs[_0xbe14('0x37')](_[_0xbe14('0x3f')](_0x199b98[_0xbe14('0x34')],_0x15c93c[_0xbe14('0x37')]));if(_0x199b98[_0xbe14('0x34')][_0xbe14('0x44')]){_0x4bdf59['where']=_[_0xbe14('0x41')](_0x4bdf59['where'],{'$or':_['map'](_0x4bdf59['attributes'],function(_0x4e3261){var _0x1b2a71={};_0x1b2a71[_0x4e3261]={'$like':'%'+_0x199b98[_0xbe14('0x34')]['filter']+'%'};return _0x1b2a71;})});}_0x4bdf59=_[_0xbe14('0x41')]({},_0x4bdf59,_0x199b98['options']);return _0xf6ff8[_0xbe14('0x88')](_0x4bdf59);}})['then'](function(_0x18bcc7){if(_0x18bcc7){_0x3eaabe=_0x18bcc7[_0xbe14('0x3b')];if(!_0x199b98[_0xbe14('0x34')][_0xbe14('0x3c')](_0xbe14('0x3d'))){_0x4bdf59['limit']=qs[_0xbe14('0x25')](_0x199b98[_0xbe14('0x34')][_0xbe14('0x25')]);_0x4bdf59[_0xbe14('0x24')]=qs['offset'](_0x199b98['query']['offset']);}return _0xf6ff8[_0xbe14('0x88')](_0x4bdf59);}})[_0xbe14('0x15')](function(_0x3826cf){if(_0x3826cf){return _0x3826cf?{'count':_0x3eaabe,'rows':_0x3826cf}:null;}})[_0xbe14('0x15')](respondWithResult(_0x33c411,null))[_0xbe14('0x20')](handleError(_0x33c411,null));};exports['getMessages']=function(_0x5a4ff2,_0x295c4f,_0x22354c){var _0x1dada3={'raw':!![],'where':{}};var _0x26092b={};var _0x2c7cb1={'count':0x0,'rows':[]};return db['MailAccount'][_0xbe14('0x57')]({'where':{'id':_0x5a4ff2['params']['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x295c4f,null))[_0xbe14('0x15')](function(_0x1f9b59){if(_0x1f9b59){_0x26092b[_0xbe14('0x32')]=_['keys'](db[_0xbe14('0x89')][_0xbe14('0x4d')]);_0x26092b[_0xbe14('0x34')]=_[_0xbe14('0x33')](_0x5a4ff2['query']);_0x26092b[_0xbe14('0x37')]=_[_0xbe14('0x38')](_0x26092b[_0xbe14('0x32')],_0x26092b['query']);_0x1dada3['attributes']=_[_0xbe14('0x38')](_0x26092b[_0xbe14('0x32')],qs[_0xbe14('0x3a')](_0x5a4ff2['query'][_0xbe14('0x3a')]));_0x1dada3[_0xbe14('0x39')]=_0x1dada3[_0xbe14('0x39')][_0xbe14('0x3b')]?_0x1dada3[_0xbe14('0x39')]:_0x26092b[_0xbe14('0x32')];if(!_0x5a4ff2['query'][_0xbe14('0x3c')](_0xbe14('0x3d'))){_0x1dada3[_0xbe14('0x25')]=qs[_0xbe14('0x25')](_0x5a4ff2[_0xbe14('0x34')]['limit']);_0x1dada3['offset']=qs[_0xbe14('0x24')](_0x5a4ff2['query'][_0xbe14('0x24')]);}_0x1dada3['order']=qs[_0xbe14('0x3e')](_0x5a4ff2[_0xbe14('0x34')][_0xbe14('0x3e')]);_0x1dada3['where']=qs[_0xbe14('0x37')](_[_0xbe14('0x3f')](_0x5a4ff2[_0xbe14('0x34')],_0x26092b[_0xbe14('0x37')]));_0x1dada3[_0xbe14('0x42')][_0xbe14('0x54')]=_0x1f9b59['id'];if(_0x5a4ff2[_0xbe14('0x34')][_0xbe14('0x44')]){_0x1dada3[_0xbe14('0x42')]=_[_0xbe14('0x41')](_0x1dada3['where'],{'$or':_[_0xbe14('0x43')](_0x1dada3[_0xbe14('0x39')],function(_0x44e08b){var _0x46c9b6={};_0x46c9b6[_0x44e08b]={'$like':'%'+_0x5a4ff2[_0xbe14('0x34')][_0xbe14('0x44')]+'%'};return _0x46c9b6;})});}if(_0x5a4ff2[_0xbe14('0x34')][_0xbe14('0x8a')]){var _0x557ff1=_0x5a4ff2[_0xbe14('0x34')][_0xbe14('0x8a')][_0xbe14('0x8b')](',');var _0xca4edb={};_0xca4edb[_0x557ff1[0x0]]={'$gte':moment(_0x557ff1[0x1])[_0xbe14('0x8c')](_0xbe14('0x8d'))};_0x1dada3['where']=_['merge'](_0x1dada3['where'],_0xca4edb);}_0x1dada3=_['merge']({},_0x1dada3,_0x5a4ff2[_0xbe14('0x45')]);return db[_0xbe14('0x89')]['count']({'where':_0x1dada3[_0xbe14('0x42')]})['then'](function(_0x22da6c){_0x2c7cb1[_0xbe14('0x23')]=_0x22da6c;if(_0x5a4ff2[_0xbe14('0x34')][_0xbe14('0x4e')]){_0x1dada3[_0xbe14('0x4f')]=[{'all':!![]}];}return db[_0xbe14('0x89')]['findAll'](_0x1dada3);})[_0xbe14('0x15')](function(_0x3d025b){_0x2c7cb1[_0xbe14('0x48')]=_0x3d025b;return _0x2c7cb1;});}})[_0xbe14('0x15')](respondWithFilteredResult(_0x295c4f,_0x1dada3))[_0xbe14('0x20')](handleError(_0x295c4f,null));};exports[_0xbe14('0x2e')]=function(_0x2af6d8,_0x8db18,_0x3046de){var _0x4829e3,_0x2eb5e6={},_0x4830bf;if(_0x2af6d8[_0xbe14('0x50')]['to']){_0x4830bf=_0x2af6d8['body']['to']['split'](',')[0x0];}return db[_0xbe14('0x46')][_0xbe14('0x51')]({'where':{'id':_0x2af6d8[_0xbe14('0x4a')]['id']},'include':[{'model':db['CmList'],'as':_0xbe14('0x8e'),'include':[{'model':db['CmContact'],'as':_0xbe14('0x8f'),'where':{'email':_0x4830bf},'limit':0x1,'order':[['updatedAt',_0xbe14('0x90')]]}]},{'model':db[_0xbe14('0x4c')],'as':_0xbe14('0x31'),'raw':!![]}]})[_0xbe14('0x15')](handleEntityNotFound(_0x8db18,null))[_0xbe14('0x15')](function(_0x143603){if(_0x143603){_0x4829e3=_0x143603;if(_0x143603['Smtp']){if(_[_0xbe14('0x62')](_0x2af6d8[_0xbe14('0x50')]['from'])){_0x2af6d8['body']['from']=util[_0xbe14('0x8c')](_0xbe14('0x91'),_0x143603[_0xbe14('0x7d')],_0x143603[_0xbe14('0x60')]||_0x143603[_0xbe14('0x31')][_0xbe14('0x66')]);}if(_0x2af6d8[_0xbe14('0x50')]['attachments']&&_0x2af6d8[_0xbe14('0x50')][_0xbe14('0x92')][_0xbe14('0x3b')]){for(var _0x47fa12=0x0;_0x47fa12<_0x2af6d8[_0xbe14('0x50')][_0xbe14('0x92')][_0xbe14('0x3b')];_0x47fa12+=0x1){_0x2af6d8['body']['attachments'][_0x47fa12]={'filename':_0x2af6d8[_0xbe14('0x50')]['attachments'][_0x47fa12][_0xbe14('0x7d')],'path':path[_0xbe14('0x93')](config[_0xbe14('0x94')],_0xbe14('0x95'),_0x2af6d8[_0xbe14('0x50')][_0xbe14('0x92')][_0x47fa12]['basename'])};}}var _0x2f01a4={'tls':{'rejectUnauthorized':![]}};if(_['isNil'](_0x143603[_0xbe14('0x31')][_0xbe14('0x6d')])){if(_0x143603[_0xbe14('0x31')]['authentication']){_0x2f01a4[_0xbe14('0x96')]={'user':_0x143603[_0xbe14('0x31')]['user'],'pass':_0x143603['Smtp'][_0xbe14('0x69')]};}_0x2f01a4[_0xbe14('0x6b')]=_0x143603[_0xbe14('0x31')]['host'];_0x2f01a4[_0xbe14('0x6c')]=_0x143603[_0xbe14('0x31')]['port'];_0x2f01a4['secure']=_0x143603['Smtp']['secure'];}else{_0x2f01a4[_0xbe14('0x6d')]=_0x143603[_0xbe14('0x31')]['service'];_0x2f01a4['auth']={'user':_0x143603[_0xbe14('0x31')][_0xbe14('0x66')],'pass':_0x143603[_0xbe14('0x31')]['pass']};}return respondWithRpcPromise(_0xbe14('0x97'),_0xbe14('0x98'),{'account':_0x2f01a4,'message':_0x2af6d8[_0xbe14('0x50')]});}else{throw new Error(_0xbe14('0x99'));}}})['then'](function(_0x28b3c4){if(_0x28b3c4){_0x2eb5e6=_0x28b3c4;if(_0x4829e3[_0xbe14('0x8e')]){if(_0x4829e3['List'][_0xbe14('0x8f')][_0xbe14('0x3b')]){return _0x4829e3[_0xbe14('0x8e')][_0xbe14('0x8f')][0x0];}else{return db[_0xbe14('0x7a')]['create'](_['defaults'](_0x2af6d8[_0xbe14('0x50')],{'firstName':_0x2af6d8[_0xbe14('0x50')]['to'],'email':_0x2af6d8[_0xbe14('0x50')]['to'],'phone':_0x2af6d8[_0xbe14('0x50')]['to'],'ListId':_0x4829e3['ListId']}));}}else{throw new Error(_0xbe14('0x99'));}}})[_0xbe14('0x15')](function(_0x56739b){if(_0x56739b){var _0x3305a0={'UserId':_0x2af6d8['user']['id'],'ContactId':_0x56739b['id'],'MailAccountId':_0x4829e3['id'],'inReplyTo':_0x2eb5e6[_0xbe14('0x9a')],'to':_0x2af6d8[_0xbe14('0x50')]['from'],'cc':_0x2af6d8[_0xbe14('0x50')]['cc'],'subject':_0x2af6d8[_0xbe14('0x50')][_0xbe14('0x9b')],'attach':_0x2af6d8[_0xbe14('0x50')][_0xbe14('0x9c')],'firstMsgDirection':_0xbe14('0x9d'),'lastMsgAt':moment()[_0xbe14('0x8c')](_0xbe14('0x8d')),'lastMsgDirection':'out','lastMsgBody':_0x2af6d8[_0xbe14('0x50')][_0xbe14('0x50')],'Messages':[_[_0xbe14('0x41')](_0x2af6d8['body'],{'messageId':_0x2eb5e6['messageId'],'sentAt':moment()['format'](_0xbe14('0x8d')),'read':!![],'MailAccountId':_0x4829e3['id'],'UserId':_0x2af6d8[_0xbe14('0x66')]['id'],'ContactId':_0x56739b['id']})]};if(_0x2af6d8[_0xbe14('0x50')]['Interaction']){_0x3305a0=_['merge'](_0x3305a0,_0x2af6d8[_0xbe14('0x50')][_0xbe14('0x9e')]);}return db[_0xbe14('0x76')][_0xbe14('0x55')](_0x3305a0,{'include':[{'model':db[_0xbe14('0x89')],'as':_0xbe14('0x9f')}]});}})[_0xbe14('0x15')](respondWithResult(_0x8db18,null))[_0xbe14('0x20')](handleError(_0x8db18,null));};exports[_0xbe14('0xa0')]=function(_0x4b76dd,_0x43509d,_0x3a2890){return db[_0xbe14('0x46')][_0xbe14('0x51')]({'where':{'id':_0x4b76dd[_0xbe14('0x4a')]['id']},'include':[{'model':db['MailServerOut'],'as':_0xbe14('0x31'),'raw':!![]}]})['then'](handleEntityNotFound(_0x43509d,null))['then'](function(_0xf150e7){if(_0xf150e7&&_0xf150e7[_0xbe14('0x31')]){var _0x5cbff5={'id':_0xf150e7['id'],'tls':{'rejectUnauthorized':![]}};if(_0xf150e7['Smtp'][_0xbe14('0x6d')]){_0x5cbff5[_0xbe14('0x6d')]=_0xf150e7[_0xbe14('0x31')][_0xbe14('0x6d')];}else{_0x5cbff5[_0xbe14('0x6b')]=_0xf150e7['Smtp']['host'];_0x5cbff5[_0xbe14('0x6c')]=_0xf150e7['Smtp'][_0xbe14('0x6c')];_0x5cbff5[_0xbe14('0xa1')]=_0xf150e7['Smtp']['secure'];}if(_0xf150e7['Smtp'][_0xbe14('0xa2')]){_0x5cbff5['auth']={'user':_0xf150e7[_0xbe14('0x31')][_0xbe14('0x66')],'pass':_0xf150e7['Smtp'][_0xbe14('0x69')]};}return respondWithRpcPromise(_0xbe14('0xa3'),_0xbe14('0xa0'),{'account':_0x5cbff5});}})[_0xbe14('0x15')](respondWithResult(_0x43509d,null))[_0xbe14('0x20')](handleError(_0x43509d,null));};exports['destroy']=function(_0x1ad65c,_0x6924d0){return db[_0xbe14('0x46')][_0xbe14('0x51')]({'where':{'id':_0x1ad65c[_0xbe14('0x4a')]['id']}})['then'](handleEntityNotFound(_0x6924d0,null))[_0xbe14('0x15')](function(_0x2b8f47){if(_0x2b8f47&&_0x2b8f47['service']){throw new db[(_0xbe14('0xa4'))]['ValidationError'](_0xbe14('0xa5'));}return _0x2b8f47;})[_0xbe14('0x15')](removeEntity(_0x6924d0,null))[_0xbe14('0x20')](handleError(_0x6924d0,null));};exports[_0xbe14('0xa6')]=function(_0x2805de,_0xccd68a,_0x525f6c){return db[_0xbe14('0x46')][_0xbe14('0x51')]({'where':{'id':_0x2805de[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0xccd68a,null))[_0xbe14('0x15')](function(_0x12c6e5){if(_0x12c6e5){return _0x12c6e5[_0xbe14('0xa6')](_0x2805de[_0xbe14('0x50')][_0xbe14('0x5b')],_[_0xbe14('0x78')](_0x2805de['body'],[_0xbe14('0x5b'),'id'])||{})[_0xbe14('0xa7')](function(_0x5869dd){for(var _0x39cb84=0x0;_0x39cb84<_0x2805de[_0xbe14('0x50')][_0xbe14('0x5b')][_0xbe14('0x3b')];_0x39cb84+=0x1){socket[_0xbe14('0xa8')](_0xbe14('0xa9'),{'UserId':_0x2805de[_0xbe14('0x50')][_0xbe14('0x5b')][_0x39cb84],'MailAccountId':_0x2805de['params']['id']});}return _0x5869dd;});}})[_0xbe14('0x15')](respondWithResult(_0xccd68a,null))['catch'](handleError(_0xccd68a,null));};exports[_0xbe14('0xaa')]=function(_0x3e6eb1,_0x5137c3,_0x4069a4){var _0x1519e0;return db[_0xbe14('0x46')][_0xbe14('0x51')]({'where':{'id':_0x3e6eb1['params']['id']}})['then'](handleEntityNotFound(_0x5137c3,null))['then'](function(_0xd97eb5){if(_0xd97eb5){return _0xd97eb5[_0xbe14('0xaa')](_0x3e6eb1['query'][_0xbe14('0x5b')])[_0xbe14('0x15')](function(_0x2e211c){if(_[_0xbe14('0xab')](_0x3e6eb1[_0xbe14('0x34')][_0xbe14('0x5b')])){for(var _0x3639a9=0x0;_0x3639a9<_0x3e6eb1[_0xbe14('0x34')][_0xbe14('0x5b')][_0xbe14('0x3b')];_0x3639a9+=0x1){socket[_0xbe14('0xa8')]('userMailAccount:remove',{'UserId':_0x3e6eb1[_0xbe14('0x34')]['ids'][_0x3639a9],'MailAccountId':_0x3e6eb1[_0xbe14('0x4a')]['id']});}}else{socket[_0xbe14('0xa8')](_0xbe14('0xac'),{'UserId':_0x3e6eb1['query'][_0xbe14('0x5b')],'MailAccountId':_0x3e6eb1[_0xbe14('0x4a')]['id']});}});}})['then'](respondWithStatusCode(_0x5137c3,null))[_0xbe14('0x20')](handleError(_0x5137c3,null));};exports[_0xbe14('0xad')]=function(_0x452433,_0x57f06d,_0x5fe952){var _0x25e6e0={};var _0x55a52f={};var _0x3ef39a;var _0x514cf6;return db[_0xbe14('0x46')][_0xbe14('0x57')]({'where':{'id':_0x452433[_0xbe14('0x4a')]['id']}})[_0xbe14('0x15')](handleEntityNotFound(_0x57f06d,null))['then'](function(_0x50cbce){if(_0x50cbce){_0x3ef39a=_0x50cbce;_0x55a52f[_0xbe14('0x32')]=_[_0xbe14('0x33')](db['User']['rawAttributes']);_0x55a52f[_0xbe14('0x34')]=_['keys'](_0x452433[_0xbe14('0x34')]);_0x55a52f[_0xbe14('0x37')]=_[_0xbe14('0x38')](_0x55a52f[_0xbe14('0x32')],_0x55a52f[_0xbe14('0x34')]);_0x25e6e0[_0xbe14('0x39')]=_[_0xbe14('0x38')](_0x55a52f[_0xbe14('0x32')],qs[_0xbe14('0x3a')](_0x452433[_0xbe14('0x34')]['fields']));_0x25e6e0['attributes']=_0x25e6e0['attributes'][_0xbe14('0x3b')]?_0x25e6e0[_0xbe14('0x39')]:_0x55a52f[_0xbe14('0x32')];_0x25e6e0[_0xbe14('0x59')]=qs[_0xbe14('0x3e')](_0x452433[_0xbe14('0x34')][_0xbe14('0x3e')]);_0x25e6e0[_0xbe14('0x42')]=qs[_0xbe14('0x37')](_['pick'](_0x452433[_0xbe14('0x34')],_0x55a52f[_0xbe14('0x37')]));if(_0x452433[_0xbe14('0x34')]['filter']){_0x25e6e0[_0xbe14('0x42')]=_[_0xbe14('0x41')](_0x25e6e0[_0xbe14('0x42')],{'$or':_[_0xbe14('0x43')](_0x25e6e0[_0xbe14('0x39')],function(_0x41144d){var _0x124ba4={};_0x124ba4[_0x41144d]={'$like':'%'+_0x452433['query'][_0xbe14('0x44')]+'%'};return _0x124ba4;})});}_0x25e6e0=_[_0xbe14('0x41')]({},_0x25e6e0,_0x452433['options']);return _0x3ef39a['getAgents'](_0x25e6e0);}})[_0xbe14('0x15')](function(_0x4205ac){if(_0x4205ac){_0x514cf6=_0x4205ac[_0xbe14('0x3b')];if(!_0x452433['query'][_0xbe14('0x3c')](_0xbe14('0x3d'))){_0x25e6e0[_0xbe14('0x25')]=qs[_0xbe14('0x25')](_0x452433[_0xbe14('0x34')][_0xbe14('0x25')]);_0x25e6e0['offset']=qs[_0xbe14('0x24')](_0x452433['query'][_0xbe14('0x24')]);}return _0x3ef39a[_0xbe14('0xad')](_0x25e6e0);}})[_0xbe14('0x15')](function(_0x5c8cbd){if(_0x5c8cbd){return _0x5c8cbd?{'count':_0x514cf6,'rows':_0x5c8cbd}:null;}})[_0xbe14('0x15')](respondWithResult(_0x57f06d,null))[_0xbe14('0x20')](handleError(_0x57f06d,null));};
\ No newline at end of file
index feeeda4..9552f80 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x80dc=['remove','emit','hook','exports','events','../../mysqldb','MailAccount','setMaxListeners','save','update'];(function(_0x3325a1,_0x1c7b5b){var _0x196085=function(_0x30d7b2){while(--_0x30d7b2){_0x3325a1['push'](_0x3325a1['shift']());}};_0x196085(++_0x1c7b5b);}(_0x80dc,0x14e));var _0xc80d=function(_0x341e0f,_0x4a09d0){_0x341e0f=_0x341e0f-0x0;var _0x59555a=_0x80dc[_0x341e0f];return _0x59555a;};'use strict';var EventEmitter=require(_0xc80d('0x0'));var MailAccount=require(_0xc80d('0x1'))['db'][_0xc80d('0x2')];var MailAccountEvents=new EventEmitter();MailAccountEvents[_0xc80d('0x3')](0x0);var events={'afterCreate':_0xc80d('0x4'),'afterUpdate':_0xc80d('0x5'),'afterDestroy':_0xc80d('0x6')};function emitEvent(_0x11ad95){return function(_0x5d0992,_0x5ac8c6,_0x5f7c37){MailAccountEvents[_0xc80d('0x7')](_0x11ad95+':'+_0x5d0992['id'],_0x5d0992);MailAccountEvents['emit'](_0x11ad95,_0x5d0992);_0x5f7c37(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];MailAccount[_0xc80d('0x8')](e,emitEvent(event));}}module[_0xc80d('0x9')]=MailAccountEvents;
\ No newline at end of file
+var _0x4317=['exports','events','../../mysqldb','MailAccount','setMaxListeners','save','update','remove','emit','hasOwnProperty','hook'];(function(_0x37a79c,_0x2b19f0){var _0x561d89=function(_0x19bee3){while(--_0x19bee3){_0x37a79c['push'](_0x37a79c['shift']());}};_0x561d89(++_0x2b19f0);}(_0x4317,0x11f));var _0x7431=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x4317[_0x4cf98e];return _0x1623ac;};'use strict';var EventEmitter=require(_0x7431('0x0'));var MailAccount=require(_0x7431('0x1'))['db'][_0x7431('0x2')];var MailAccountEvents=new EventEmitter();MailAccountEvents[_0x7431('0x3')](0x0);var events={'afterCreate':_0x7431('0x4'),'afterUpdate':_0x7431('0x5'),'afterDestroy':_0x7431('0x6')};function emitEvent(_0x3699b4){return function(_0x5ccfd9,_0x267650,_0x302711){MailAccountEvents['emit'](_0x3699b4+':'+_0x5ccfd9['id'],_0x5ccfd9);MailAccountEvents[_0x7431('0x7')](_0x3699b4,_0x5ccfd9);_0x302711(null);};}for(var e in events){if(events[_0x7431('0x8')](e)){var event=events[e];MailAccount[_0x7431('0x9')](e,emitEvent(event));}}module[_0x7431('0xa')]=MailAccountEvents;
\ No newline at end of file
index c313f46..ec1f6da 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x527d=['request-promise','exports','define','mail_accounts','util','api','moment','bluebird'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x527d,0x6c));var _0xd527=function(_0x178f52,_0x5d9675){_0x178f52=_0x178f52-0x0;var _0x556f99=_0x527d[_0x178f52];return _0x556f99;};'use strict';var _=require('lodash');var util=require(_0xd527('0x0'));var logger=require('../../config/logger')(_0xd527('0x1'));var moment=require(_0xd527('0x2'));var BPromise=require(_0xd527('0x3'));var rp=require(_0xd527('0x4'));var attributes=require('./mailAccount.attributes');module[_0xd527('0x5')]=function(_0x27237d,_0x5a6487){return _0x27237d[_0xd527('0x6')]('MailAccount',attributes,{'tableName':_0xd527('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1a73=['define','MailAccount','mail_accounts','lodash','../../config/logger','api','moment','bluebird','./mailAccount.attributes','exports'];(function(_0xed5f9c,_0x5a25cd){var _0x3a1c43=function(_0x251202){while(--_0x251202){_0xed5f9c['push'](_0xed5f9c['shift']());}};_0x3a1c43(++_0x5a25cd);}(_0x1a73,0x1bb));var _0x31a7=function(_0x4075e0,_0x36b392){_0x4075e0=_0x4075e0-0x0;var _0x32f1fc=_0x1a73[_0x4075e0];return _0x32f1fc;};'use strict';var _=require(_0x31a7('0x0'));var util=require('util');var logger=require(_0x31a7('0x1'))(_0x31a7('0x2'));var moment=require(_0x31a7('0x3'));var BPromise=require(_0x31a7('0x4'));var rp=require('request-promise');var attributes=require(_0x31a7('0x5'));module[_0x31a7('0x6')]=function(_0x5d57fe,_0x49c539){return _0x5d57fe[_0x31a7('0x7')](_0x31a7('0x8'),attributes,{'tableName':_0x31a7('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d1f1c88..4a859da 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c28=['body','isNil','from','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','mapKey','find','account','CmList','List','Contacts','DESC','MailApplication','MailServerOut','Smtp','get','omit','Applications','applications','list','orderBy','priority','autoclose','push','close','length','create','List\x20not\x20found','contact','messageId','generate','subject','attach','MailInteraction','MailMessage','Messages','Contact\x20not\x20found','spread','update','format','YYYY-MM-DD\x20HH:mm:ss','interaction','created','attachments','originTo','bcc','Attachment','Attachments','UserId','User','name','unshift','agent','waitForTheAssignedAgent','*,*,*,*','Start','startRouting','util','bluebird','randomstring','../../mysqldb','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','register','request','info','MailAccount,\x20%s,\x20%s','request\x20sent','debug','MailAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','GetMailAccount','MailAccount','findAll','raw','options','where','limit','include','map','model','attributes','then','ShowMailAccount','NotifyMailAccount','mail','keys','CmContact','rawAttributes','ListId'];(function(_0x14f0a0,_0x2f1b7f){var _0x2a1549=function(_0x4e6606){while(--_0x4e6606){_0x14f0a0['push'](_0x14f0a0['shift']());}};_0x2a1549(++_0x2f1b7f);}(_0x4c28,0x163));var _0x84c2=function(_0x82a995,_0xa40fb8){_0x82a995=_0x82a995-0x0;var _0x2e0f77=_0x4c28[_0x82a995];return _0x2e0f77;};'use strict';var _=require('lodash');var util=require(_0x84c2('0x0'));var moment=require('moment');var BPromise=require(_0x84c2('0x1'));var rs=require(_0x84c2('0x2'));var fs=require('fs');var db=require(_0x84c2('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x84c2('0x4'));var config=require(_0x84c2('0x5'));var jayson=require(_0x84c2('0x6'));var client=jayson[_0x84c2('0x7')][_0x84c2('0x8')]({'port':0x232c});var socket=require(_0x84c2('0x9'))({'host':'localhost','port':0x18eb});require('./mailAccount.socket')[_0x84c2('0xa')](socket);function respondWithRpcPromise(_0x322191,_0x2ca18c,_0xbfed12){return new BPromise(function(_0x389320,_0x31f8b3){return client[_0x84c2('0xb')](_0x322191,_0xbfed12)['then'](function(_0x3f4e95){logger[_0x84c2('0xc')](_0x84c2('0xd'),_0x2ca18c,_0x84c2('0xe'));logger[_0x84c2('0xf')](_0x84c2('0x10'),_0x2ca18c,_0x84c2('0xe'),JSON[_0x84c2('0x11')](_0x3f4e95));if(_0x3f4e95[_0x84c2('0x12')]){if(_0x3f4e95['error'][_0x84c2('0x13')]===0x1f4){logger[_0x84c2('0x12')]('MailAccount,\x20%s,\x20%s',_0x2ca18c,_0x3f4e95[_0x84c2('0x12')][_0x84c2('0x14')]);return _0x31f8b3(_0x3f4e95['error'][_0x84c2('0x14')]);}logger[_0x84c2('0x12')](_0x84c2('0xd'),_0x2ca18c,_0x3f4e95['error'][_0x84c2('0x14')]);return _0x389320(_0x3f4e95['error'][_0x84c2('0x14')]);}else{logger[_0x84c2('0xc')](_0x84c2('0xd'),_0x2ca18c,_0x84c2('0xe'));_0x389320(_0x3f4e95['result']['message']);}})[_0x84c2('0x15')](function(_0x4ac0a6){logger[_0x84c2('0x12')](_0x84c2('0xd'),_0x2ca18c,_0x4ac0a6);_0x31f8b3(_0x4ac0a6);});});}exports[_0x84c2('0x16')]=function(_0xbdc78e){var _0x218199=this;return new Promise(function(_0x4f04bf,_0x3fae8e){return db[_0x84c2('0x17')][_0x84c2('0x18')]({'raw':_0xbdc78e['options']?_0xbdc78e['options'][_0x84c2('0x19')]===undefined?!![]:![]:!![],'where':_0xbdc78e[_0x84c2('0x1a')]?_0xbdc78e[_0x84c2('0x1a')][_0x84c2('0x1b')]||null:null,'attributes':_0xbdc78e[_0x84c2('0x1a')]?_0xbdc78e[_0x84c2('0x1a')]['attributes']||null:null,'limit':_0xbdc78e[_0x84c2('0x1a')]?_0xbdc78e[_0x84c2('0x1a')][_0x84c2('0x1c')]||null:null,'include':_0xbdc78e['options']?_0xbdc78e[_0x84c2('0x1a')][_0x84c2('0x1d')]?_[_0x84c2('0x1e')](_0xbdc78e[_0x84c2('0x1a')][_0x84c2('0x1d')],function(_0x383fd4){return{'model':db[_0x383fd4['model']],'as':_0x383fd4['as'],'attributes':_0x383fd4['attributes'],'include':_0x383fd4[_0x84c2('0x1d')]?_[_0x84c2('0x1e')](_0x383fd4[_0x84c2('0x1d')],function(_0x59d6f4){return{'model':db[_0x59d6f4[_0x84c2('0x1f')]],'as':_0x59d6f4['as'],'attributes':_0x59d6f4[_0x84c2('0x20')],'include':_0x59d6f4[_0x84c2('0x1d')]?_[_0x84c2('0x1e')](_0x59d6f4['include'],function(_0x1cc4eb){return{'model':db[_0x1cc4eb[_0x84c2('0x1f')]],'as':_0x1cc4eb['as'],'attributes':_0x1cc4eb[_0x84c2('0x20')]};}):[]};}):[]};}):[]:[]})[_0x84c2('0x21')](function(_0x1d46ba){logger[_0x84c2('0xc')](_0x84c2('0x16'),_0xbdc78e);logger[_0x84c2('0xf')](_0x84c2('0x16'),_0xbdc78e,JSON[_0x84c2('0x11')](_0x1d46ba));_0x4f04bf(_0x1d46ba);})[_0x84c2('0x15')](function(_0x1ff292){logger[_0x84c2('0x12')](_0x84c2('0x16'),_0x1ff292[_0x84c2('0x14')],_0xbdc78e);_0x3fae8e(_0x218199['error'](0x1f4,_0x1ff292['message']));});});};exports[_0x84c2('0x22')]=function(_0x3367fb){var _0x852792=this;return new Promise(function(_0x3e8d94,_0x2119dd){return db[_0x84c2('0x17')]['find']({'raw':_0x3367fb[_0x84c2('0x1a')]?_0x3367fb[_0x84c2('0x1a')]['raw']===undefined?!![]:![]:!![],'where':_0x3367fb[_0x84c2('0x1a')]?_0x3367fb['options'][_0x84c2('0x1b')]||null:null,'attributes':_0x3367fb[_0x84c2('0x1a')]?_0x3367fb[_0x84c2('0x1a')]['attributes']||null:null,'include':_0x3367fb['options']?_0x3367fb[_0x84c2('0x1a')][_0x84c2('0x1d')]?_[_0x84c2('0x1e')](_0x3367fb[_0x84c2('0x1a')][_0x84c2('0x1d')],function(_0x1f3a8c){return{'model':db[_0x1f3a8c[_0x84c2('0x1f')]],'as':_0x1f3a8c['as'],'attributes':_0x1f3a8c[_0x84c2('0x20')],'include':_0x1f3a8c['include']?_[_0x84c2('0x1e')](_0x1f3a8c[_0x84c2('0x1d')],function(_0x47b27d){return{'model':db[_0x47b27d['model']],'as':_0x47b27d['as'],'attributes':_0x47b27d[_0x84c2('0x20')],'include':_0x47b27d[_0x84c2('0x1d')]?_['map'](_0x47b27d[_0x84c2('0x1d')],function(_0x347960){return{'model':db[_0x347960['model']],'as':_0x347960['as'],'attributes':_0x347960[_0x84c2('0x20')]};}):[]};}):[]};}):[]:[]})[_0x84c2('0x21')](function(_0xa37969){logger[_0x84c2('0xc')](_0x84c2('0x22'),_0x3367fb);logger[_0x84c2('0xf')](_0x84c2('0x22'),_0x3367fb,JSON[_0x84c2('0x11')](_0xa37969));_0x3e8d94(_0xa37969);})['catch'](function(_0x2d77e6){logger[_0x84c2('0x12')](_0x84c2('0x22'),_0x2d77e6[_0x84c2('0x14')],_0x3367fb);_0x2119dd(_0x852792['error'](0x1f4,_0x2d77e6['message']));});});};exports[_0x84c2('0x23')]=function(_0x7c74ea){var _0x53526c=this;return new Promise(function(_0x42af40,_0x1e333f){var _0x782d07={'body':_0x7c74ea['body'],'channel':_0x84c2('0x24')};var _0x3eb73a=_['difference'](_[_0x84c2('0x25')](db[_0x84c2('0x26')][_0x84c2('0x27')]),['createdAt','updatedAt','CompanyId',_0x84c2('0x28')]);var _0x2dba2f=![];if(_0x7c74ea[_0x84c2('0x29')]['id']){delete _0x7c74ea['body']['id'];}if(_[_0x84c2('0x2a')](_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x2b')])){return _0x1e333f(_0x53526c[_0x84c2('0x12')](0x1f4,'from\x20is\x20mandatory'));}if(_[_0x84c2('0x2a')](_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x29')])||_0x7c74ea[_0x84c2('0x29')]['body']===''){return _0x1e333f(_0x53526c[_0x84c2('0x12')](0x1f4,'body\x20is\x20mandatory\x20and\x20not\x20empty'));}if(_['isNil'](_0x7c74ea[_0x84c2('0x29')]['mapKey'])){return _0x1e333f(_0x53526c[_0x84c2('0x12')](0x1f4,_0x84c2('0x2c')+_0x3eb73a));}if(!_[_0x84c2('0x2d')](_0x3eb73a,_0x7c74ea[_0x84c2('0x29')]['mapKey'])){return _0x1e333f(_0x53526c[_0x84c2('0x12')](0x1f4,_0x84c2('0x2e')+_0x3eb73a));}var _0x3a138f={};_0x3a138f[_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x2f')]]=_0x7c74ea[_0x84c2('0x29')]['from'];return db[_0x84c2('0x17')][_0x84c2('0x30')]({'where':{'id':_0x7c74ea[_0x84c2('0x31')]['id']},'include':[{'model':db[_0x84c2('0x32')],'as':_0x84c2('0x33'),'include':[{'model':db['CmContact'],'as':_0x84c2('0x34'),'where':_0x3a138f,'limit':0x1,'order':[['updatedAt',_0x84c2('0x35')]]}]},{'model':db[_0x84c2('0x36')],'as':'Applications'},{'model':db[_0x84c2('0x37')],'as':_0x84c2('0x38')}]})[_0x84c2('0x21')](function(_0x4149e9){if(_0x4149e9&&_0x4149e9[_0x84c2('0x33')]){var _0x4ab517=_0x4149e9[_0x84c2('0x39')]({'plain':!![]});_0x782d07['account']=_[_0x84c2('0x3a')](_0x4ab517,[_0x84c2('0x3b'),_0x84c2('0x33')]);_0x782d07[_0x84c2('0x3c')]=_0x4ab517[_0x84c2('0x3b')];_0x782d07[_0x84c2('0x3d')]=_0x4ab517[_0x84c2('0x33')];_0x782d07[_0x84c2('0x3c')]=_[_0x84c2('0x3e')](_0x782d07[_0x84c2('0x3c')],[_0x84c2('0x3f')],['asc']);if(_0x782d07[_0x84c2('0x31')]&&_0x782d07[_0x84c2('0x31')][_0x84c2('0x40')]){_0x782d07[_0x84c2('0x3c')][_0x84c2('0x41')]({'id':0x0,'priority':_0x782d07['applications']['length']+0x1,'app':_0x84c2('0x42'),'appdata':_0x84c2('0x40'),'interval':'*,*,*,*'});}if(_0x782d07['account'][_0x84c2('0x3b')]){delete _0x782d07[_0x84c2('0x31')][_0x84c2('0x3b')];}if(_0x782d07[_0x84c2('0x31')][_0x84c2('0x33')]){delete _0x782d07[_0x84c2('0x31')]['List'];}if(_0x4ab517['List'][_0x84c2('0x34')][_0x84c2('0x43')]){return _0x4ab517['List'][_0x84c2('0x34')][0x0];}var _0x8c9d30=_['defaults'](_0x7c74ea[_0x84c2('0x29')],{'firstName':_0x7c74ea[_0x84c2('0x29')]['from'],'ListId':_0x4ab517[_0x84c2('0x28')]});_0x8c9d30[_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x2f')]]=_0x7c74ea['body'][_0x84c2('0x2b')];return db['CmContact'][_0x84c2('0x44')](_0x8c9d30);}else{throw new Error(_0x84c2('0x45'));}})[_0x84c2('0x21')](function(_0x2ee13c){_0x782d07[_0x84c2('0x46')]=_0x2ee13c;if(_0x2ee13c){if(!_0x7c74ea['body'][_0x84c2('0x14')][_0x84c2('0x47')]){_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')][_0x84c2('0x47')]=rs[_0x84c2('0x48')]()+'\x20'+_0x7c74ea[_0x84c2('0x29')]['message'][_0x84c2('0x2b')];}var _0x5caf00={'ContactId':_0x2ee13c['id'],'MailAccountId':_0x7c74ea[_0x84c2('0x31')]['id'],'inReplyTo':_0x7c74ea['body'][_0x84c2('0x14')][_0x84c2('0x47')],'to':_0x7c74ea[_0x84c2('0x29')]['message']['from'],'cc':_0x7c74ea['body']['message']['cc'],'subject':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')][_0x84c2('0x49')],'attach':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')][_0x84c2('0x4a')],'lastMsgAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'lastMsgDirection':'in','lastMsgBody':_0x7c74ea[_0x84c2('0x29')]['body']};return db[_0x84c2('0x4b')][_0x84c2('0x30')]({'where':{'closed':![],'MailAccountId':_0x7c74ea['account']['id']},'include':[{'model':db[_0x84c2('0x4c')],'as':_0x84c2('0x4d'),'attributes':[_0x84c2('0x47')],'where':{'messageId':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')]['inReplyTo']}}]})[_0x84c2('0x21')](function(_0x1895b0){if(_0x1895b0){return[_0x1895b0,![]];}return db[_0x84c2('0x4b')][_0x84c2('0x44')](_0x5caf00)[_0x84c2('0x21')](function(_0x14b579){return[_0x14b579,!![]];});});}else{throw new Error(_0x84c2('0x4e'));}})[_0x84c2('0x4f')](function(_0x321aa9,_0x3e1c10){if(_0x321aa9){_0x2dba2f=_0x3e1c10;if(!_0x3e1c10){return _0x321aa9[_0x84c2('0x50')]({'inReplyTo':_0x7c74ea[_0x84c2('0x29')]['message'][_0x84c2('0x47')],'to':_0x7c74ea['body'][_0x84c2('0x14')]['from'],'cc':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')]['cc'],'subject':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')]['subject'],'attach':_0x321aa9[_0x84c2('0x4a')]?_0x321aa9[_0x84c2('0x4a')]:_0x7c74ea['body'][_0x84c2('0x14')][_0x84c2('0x4a')],'substatus':null,'substatusAt':moment()[_0x84c2('0x51')](_0x84c2('0x52')),'lastMsgAt':moment()[_0x84c2('0x51')](_0x84c2('0x52')),'lastMsgDirection':'in','lastMsgBody':_0x7c74ea['body'][_0x84c2('0x29')]});}else{return _0x321aa9;}}})[_0x84c2('0x21')](function(_0x521b42){_0x782d07[_0x84c2('0x53')]=_0x521b42[_0x84c2('0x39')]({'plain':!![]});_0x782d07[_0x84c2('0x53')][_0x84c2('0x54')]=_0x2dba2f;return db[_0x84c2('0x4c')]['create']({'body':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x29')],'MailAccountId':_0x7c74ea[_0x84c2('0x31')]['id'],'MailInteractionId':_0x521b42['id'],'direction':'in','ContactId':_0x782d07[_0x84c2('0x46')]['id'],'messageId':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')][_0x84c2('0x47')],'from':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')][_0x84c2('0x2b')],'to':_0x7c74ea[_0x84c2('0x29')]['message']['to'],'cc':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')]['cc'],'subject':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')][_0x84c2('0x49')],'attach':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')][_0x84c2('0x4a')],'Attachments':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')][_0x84c2('0x55')],'originTo':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')][_0x84c2('0x56')],'originCc':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')]['originCc'],'bcc':_0x7c74ea[_0x84c2('0x29')][_0x84c2('0x14')][_0x84c2('0x57')]},{'include':[{'model':db[_0x84c2('0x58')],'as':_0x84c2('0x59')}]});})[_0x84c2('0x21')](function(_0x3ec35b){_0x782d07[_0x84c2('0x14')]=_0x3ec35b;if(_0x782d07['interaction'][_0x84c2('0x5a')]){return db[_0x84c2('0x5b')][_0x84c2('0x30')]({'attributes':['id',_0x84c2('0x5c')],'where':{'id':_0x782d07[_0x84c2('0x53')]['UserId']}})[_0x84c2('0x21')](function(_0x34f519){if(_0x34f519){_0x782d07[_0x84c2('0x3c')][_0x84c2('0x5d')]({'id':0x0,'priority':0x0,'app':_0x84c2('0x5e'),'appdata':_0x34f519[_0x84c2('0x5c')]+','+(_0x782d07[_0x84c2('0x31')][_0x84c2('0x5f')]||0xa),'interval':_0x84c2('0x60')});}return respondWithRpcPromise(_0x84c2('0x61'),_0x84c2('0x62'),_0x782d07);});}return respondWithRpcPromise('Start',_0x84c2('0x62'),_0x782d07);})['then'](function(_0x260d7a){_0x42af40(_0x260d7a);})[_0x84c2('0x15')](function(_0x454627){_0x1e333f(_0x53526c[_0x84c2('0x12')](0x1f4,_0x454627[_0x84c2('0x14')]));});});};
\ No newline at end of file
+var _0x286a=['stringify','body','difference','keys','CmContact','rawAttributes','createdAt','updatedAt','CompanyId','ListId','from\x20is\x20mandatory','isNil','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','from','account','CmList','List','Contacts','DESC','MailApplication','Applications','MailServerOut','Smtp','omit','applications','list','priority','push','length','close','*,*,*,*','defaults','create','List\x20not\x20found','messageId','subject','YYYY-MM-DD\x20HH:mm:ss','MailInteraction','MailMessage','Messages','inReplyTo','Contact\x20not\x20found','spread','update','attach','format','interaction','attachments','bcc','Attachment','UserId','name','unshift','agent','waitForTheAssignedAgent','startRouting','Start','lodash','moment','bluebird','randomstring','../../config/utils','../../config/logger','client','http','socket.io-emitter','localhost','register','request','then','MailAccount,\x20%s,\x20%s','request\x20sent','MailAccount,\x20%s,\x20%s,\x20%s','error','code','message','result','GetMailAccount','findAll','options','raw','where','attributes','limit','include','map','model','info','debug','catch','ShowMailAccount','MailAccount','find'];(function(_0x13fdc1,_0x171cce){var _0x128a2f=function(_0xf6baf3){while(--_0xf6baf3){_0x13fdc1['push'](_0x13fdc1['shift']());}};_0x128a2f(++_0x171cce);}(_0x286a,0x1bc));var _0xa286=function(_0x4c5ef5,_0xe93be6){_0x4c5ef5=_0x4c5ef5-0x0;var _0x2a6261=_0x286a[_0x4c5ef5];return _0x2a6261;};'use strict';var _=require(_0xa286('0x0'));var util=require('util');var moment=require(_0xa286('0x1'));var BPromise=require(_0xa286('0x2'));var rs=require(_0xa286('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xa286('0x4'));var logger=require(_0xa286('0x5'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xa286('0x6')][_0xa286('0x7')]({'port':0x232c});var socket=require(_0xa286('0x8'))({'host':_0xa286('0x9'),'port':0x18eb});require('./mailAccount.socket')[_0xa286('0xa')](socket);function respondWithRpcPromise(_0x43cfec,_0x3cfc82,_0x39c0cf){return new BPromise(function(_0x578eb9,_0x518a31){return client[_0xa286('0xb')](_0x43cfec,_0x39c0cf)[_0xa286('0xc')](function(_0x736e48){logger['info'](_0xa286('0xd'),_0x3cfc82,_0xa286('0xe'));logger['debug'](_0xa286('0xf'),_0x3cfc82,_0xa286('0xe'),JSON['stringify'](_0x736e48));if(_0x736e48[_0xa286('0x10')]){if(_0x736e48[_0xa286('0x10')][_0xa286('0x11')]===0x1f4){logger[_0xa286('0x10')](_0xa286('0xd'),_0x3cfc82,_0x736e48['error'][_0xa286('0x12')]);return _0x518a31(_0x736e48[_0xa286('0x10')][_0xa286('0x12')]);}logger[_0xa286('0x10')](_0xa286('0xd'),_0x3cfc82,_0x736e48[_0xa286('0x10')][_0xa286('0x12')]);return _0x578eb9(_0x736e48[_0xa286('0x10')]['message']);}else{logger['info'](_0xa286('0xd'),_0x3cfc82,_0xa286('0xe'));_0x578eb9(_0x736e48[_0xa286('0x13')][_0xa286('0x12')]);}})['catch'](function(_0x5f1764){logger[_0xa286('0x10')]('MailAccount,\x20%s,\x20%s',_0x3cfc82,_0x5f1764);_0x518a31(_0x5f1764);});});}exports[_0xa286('0x14')]=function(_0x1b5a31){var _0xde92d=this;return new Promise(function(_0x90e4e7,_0x26563d){return db['MailAccount'][_0xa286('0x15')]({'raw':_0x1b5a31[_0xa286('0x16')]?_0x1b5a31['options'][_0xa286('0x17')]===undefined?!![]:![]:!![],'where':_0x1b5a31[_0xa286('0x16')]?_0x1b5a31[_0xa286('0x16')][_0xa286('0x18')]||null:null,'attributes':_0x1b5a31[_0xa286('0x16')]?_0x1b5a31[_0xa286('0x16')][_0xa286('0x19')]||null:null,'limit':_0x1b5a31[_0xa286('0x16')]?_0x1b5a31[_0xa286('0x16')][_0xa286('0x1a')]||null:null,'include':_0x1b5a31[_0xa286('0x16')]?_0x1b5a31[_0xa286('0x16')][_0xa286('0x1b')]?_['map'](_0x1b5a31[_0xa286('0x16')][_0xa286('0x1b')],function(_0x1b8d1a){return{'model':db[_0x1b8d1a['model']],'as':_0x1b8d1a['as'],'attributes':_0x1b8d1a[_0xa286('0x19')],'include':_0x1b8d1a[_0xa286('0x1b')]?_[_0xa286('0x1c')](_0x1b8d1a[_0xa286('0x1b')],function(_0x21e1bb){return{'model':db[_0x21e1bb['model']],'as':_0x21e1bb['as'],'attributes':_0x21e1bb[_0xa286('0x19')],'include':_0x21e1bb[_0xa286('0x1b')]?_[_0xa286('0x1c')](_0x21e1bb[_0xa286('0x1b')],function(_0x133471){return{'model':db[_0x133471[_0xa286('0x1d')]],'as':_0x133471['as'],'attributes':_0x133471[_0xa286('0x19')]};}):[]};}):[]};}):[]:[]})[_0xa286('0xc')](function(_0x3ff155){logger[_0xa286('0x1e')]('GetMailAccount',_0x1b5a31);logger[_0xa286('0x1f')](_0xa286('0x14'),_0x1b5a31,JSON['stringify'](_0x3ff155));_0x90e4e7(_0x3ff155);})[_0xa286('0x20')](function(_0x983c0e){logger[_0xa286('0x10')](_0xa286('0x14'),_0x983c0e['message'],_0x1b5a31);_0x26563d(_0xde92d[_0xa286('0x10')](0x1f4,_0x983c0e[_0xa286('0x12')]));});});};exports[_0xa286('0x21')]=function(_0x1fcb67){var _0x214f14=this;return new Promise(function(_0x3d7d60,_0xf3b2a3){return db[_0xa286('0x22')][_0xa286('0x23')]({'raw':_0x1fcb67[_0xa286('0x16')]?_0x1fcb67[_0xa286('0x16')][_0xa286('0x17')]===undefined?!![]:![]:!![],'where':_0x1fcb67[_0xa286('0x16')]?_0x1fcb67[_0xa286('0x16')][_0xa286('0x18')]||null:null,'attributes':_0x1fcb67['options']?_0x1fcb67['options']['attributes']||null:null,'include':_0x1fcb67[_0xa286('0x16')]?_0x1fcb67[_0xa286('0x16')][_0xa286('0x1b')]?_['map'](_0x1fcb67[_0xa286('0x16')][_0xa286('0x1b')],function(_0x1d358c){return{'model':db[_0x1d358c[_0xa286('0x1d')]],'as':_0x1d358c['as'],'attributes':_0x1d358c['attributes'],'include':_0x1d358c[_0xa286('0x1b')]?_[_0xa286('0x1c')](_0x1d358c[_0xa286('0x1b')],function(_0x42f5c5){return{'model':db[_0x42f5c5[_0xa286('0x1d')]],'as':_0x42f5c5['as'],'attributes':_0x42f5c5['attributes'],'include':_0x42f5c5[_0xa286('0x1b')]?_['map'](_0x42f5c5[_0xa286('0x1b')],function(_0x56c776){return{'model':db[_0x56c776[_0xa286('0x1d')]],'as':_0x56c776['as'],'attributes':_0x56c776[_0xa286('0x19')]};}):[]};}):[]};}):[]:[]})[_0xa286('0xc')](function(_0x3e44f1){logger[_0xa286('0x1e')](_0xa286('0x21'),_0x1fcb67);logger['debug'](_0xa286('0x21'),_0x1fcb67,JSON[_0xa286('0x24')](_0x3e44f1));_0x3d7d60(_0x3e44f1);})['catch'](function(_0x40a194){logger[_0xa286('0x10')](_0xa286('0x21'),_0x40a194[_0xa286('0x12')],_0x1fcb67);_0xf3b2a3(_0x214f14[_0xa286('0x10')](0x1f4,_0x40a194['message']));});});};exports['NotifyMailAccount']=function(_0x48258b){var _0x1c75c8=this;return new Promise(function(_0x28069d,_0x58442e){var _0x1154f7={'body':_0x48258b[_0xa286('0x25')],'channel':'mail'};var _0x5a12fb=_[_0xa286('0x26')](_[_0xa286('0x27')](db[_0xa286('0x28')][_0xa286('0x29')]),[_0xa286('0x2a'),_0xa286('0x2b'),_0xa286('0x2c'),_0xa286('0x2d')]);var _0x4dfdfd=![];if(_0x48258b[_0xa286('0x25')]['id']){delete _0x48258b[_0xa286('0x25')]['id'];}if(_['isNil'](_0x48258b[_0xa286('0x25')]['from'])){return _0x58442e(_0x1c75c8[_0xa286('0x10')](0x1f4,_0xa286('0x2e')));}if(_[_0xa286('0x2f')](_0x48258b[_0xa286('0x25')][_0xa286('0x25')])||_0x48258b[_0xa286('0x25')]['body']===''){return _0x58442e(_0x1c75c8['error'](0x1f4,_0xa286('0x30')));}if(_[_0xa286('0x2f')](_0x48258b[_0xa286('0x25')][_0xa286('0x31')])){return _0x58442e(_0x1c75c8[_0xa286('0x10')](0x1f4,'mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x5a12fb));}if(!_[_0xa286('0x32')](_0x5a12fb,_0x48258b[_0xa286('0x25')][_0xa286('0x31')])){return _0x58442e(_0x1c75c8[_0xa286('0x10')](0x1f4,_0xa286('0x33')+_0x5a12fb));}var _0x5604ee={};_0x5604ee[_0x48258b[_0xa286('0x25')]['mapKey']]=_0x48258b['body'][_0xa286('0x34')];return db[_0xa286('0x22')][_0xa286('0x23')]({'where':{'id':_0x48258b[_0xa286('0x35')]['id']},'include':[{'model':db[_0xa286('0x36')],'as':_0xa286('0x37'),'include':[{'model':db[_0xa286('0x28')],'as':_0xa286('0x38'),'where':_0x5604ee,'limit':0x1,'order':[['updatedAt',_0xa286('0x39')]]}]},{'model':db[_0xa286('0x3a')],'as':_0xa286('0x3b')},{'model':db[_0xa286('0x3c')],'as':_0xa286('0x3d')}]})['then'](function(_0x2c7c5f){if(_0x2c7c5f&&_0x2c7c5f['List']){var _0x251897=_0x2c7c5f['get']({'plain':!![]});_0x1154f7['account']=_[_0xa286('0x3e')](_0x251897,[_0xa286('0x3b'),_0xa286('0x37')]);_0x1154f7[_0xa286('0x3f')]=_0x251897['Applications'];_0x1154f7[_0xa286('0x40')]=_0x251897[_0xa286('0x37')];_0x1154f7[_0xa286('0x3f')]=_['orderBy'](_0x1154f7['applications'],[_0xa286('0x41')],['asc']);if(_0x1154f7[_0xa286('0x35')]&&_0x1154f7['account']['autoclose']){_0x1154f7[_0xa286('0x3f')][_0xa286('0x42')]({'id':0x0,'priority':_0x1154f7[_0xa286('0x3f')][_0xa286('0x43')]+0x1,'app':_0xa286('0x44'),'appdata':'autoclose','interval':_0xa286('0x45')});}if(_0x1154f7[_0xa286('0x35')][_0xa286('0x3b')]){delete _0x1154f7['account'][_0xa286('0x3b')];}if(_0x1154f7['account']['List']){delete _0x1154f7[_0xa286('0x35')][_0xa286('0x37')];}if(_0x251897['List']['Contacts'][_0xa286('0x43')]){return _0x251897['List'][_0xa286('0x38')][0x0];}var _0x9c961c=_[_0xa286('0x46')](_0x48258b[_0xa286('0x25')],{'firstName':_0x48258b[_0xa286('0x25')][_0xa286('0x34')],'ListId':_0x251897['ListId']});_0x9c961c[_0x48258b[_0xa286('0x25')]['mapKey']]=_0x48258b[_0xa286('0x25')][_0xa286('0x34')];return db[_0xa286('0x28')][_0xa286('0x47')](_0x9c961c);}else{throw new Error(_0xa286('0x48'));}})[_0xa286('0xc')](function(_0xa248e5){_0x1154f7['contact']=_0xa248e5;if(_0xa248e5){if(!_0x48258b['body'][_0xa286('0x12')][_0xa286('0x49')]){_0x48258b[_0xa286('0x25')]['message'][_0xa286('0x49')]=rs['generate']()+'\x20'+_0x48258b[_0xa286('0x25')][_0xa286('0x12')][_0xa286('0x34')];}var _0x3acb6f={'ContactId':_0xa248e5['id'],'MailAccountId':_0x48258b['account']['id'],'inReplyTo':_0x48258b[_0xa286('0x25')]['message'][_0xa286('0x49')],'to':_0x48258b['body'][_0xa286('0x12')][_0xa286('0x34')],'cc':_0x48258b[_0xa286('0x25')][_0xa286('0x12')]['cc'],'subject':_0x48258b[_0xa286('0x25')]['message'][_0xa286('0x4a')],'attach':_0x48258b[_0xa286('0x25')][_0xa286('0x12')]['attach'],'lastMsgAt':moment()['format'](_0xa286('0x4b')),'lastMsgDirection':'in','lastMsgBody':_0x48258b[_0xa286('0x25')]['body']};return db[_0xa286('0x4c')]['find']({'where':{'closed':![],'MailAccountId':_0x48258b['account']['id']},'include':[{'model':db[_0xa286('0x4d')],'as':_0xa286('0x4e'),'attributes':[_0xa286('0x49')],'where':{'messageId':_0x48258b['body'][_0xa286('0x12')][_0xa286('0x4f')]}}]})[_0xa286('0xc')](function(_0x3f1dfd){if(_0x3f1dfd){return[_0x3f1dfd,![]];}return db[_0xa286('0x4c')][_0xa286('0x47')](_0x3acb6f)[_0xa286('0xc')](function(_0x2554b2){return[_0x2554b2,!![]];});});}else{throw new Error(_0xa286('0x50'));}})[_0xa286('0x51')](function(_0x22dd6,_0x13b5d6){if(_0x22dd6){_0x4dfdfd=_0x13b5d6;if(!_0x13b5d6){return _0x22dd6[_0xa286('0x52')]({'inReplyTo':_0x48258b[_0xa286('0x25')][_0xa286('0x12')][_0xa286('0x49')],'to':_0x48258b['body']['message']['from'],'cc':_0x48258b[_0xa286('0x25')][_0xa286('0x12')]['cc'],'subject':_0x48258b[_0xa286('0x25')]['message'][_0xa286('0x4a')],'attach':_0x22dd6[_0xa286('0x53')]?_0x22dd6[_0xa286('0x53')]:_0x48258b['body'][_0xa286('0x12')][_0xa286('0x53')],'substatus':null,'substatusAt':moment()[_0xa286('0x54')](_0xa286('0x4b')),'lastMsgAt':moment()[_0xa286('0x54')](_0xa286('0x4b')),'lastMsgDirection':'in','lastMsgBody':_0x48258b[_0xa286('0x25')]['body']});}else{return _0x22dd6;}}})['then'](function(_0x1f4c26){_0x1154f7[_0xa286('0x55')]=_0x1f4c26['get']({'plain':!![]});_0x1154f7[_0xa286('0x55')]['created']=_0x4dfdfd;return db['MailMessage'][_0xa286('0x47')]({'body':_0x48258b[_0xa286('0x25')][_0xa286('0x25')],'MailAccountId':_0x48258b['account']['id'],'MailInteractionId':_0x1f4c26['id'],'direction':'in','ContactId':_0x1154f7['contact']['id'],'messageId':_0x48258b[_0xa286('0x25')][_0xa286('0x12')][_0xa286('0x49')],'from':_0x48258b[_0xa286('0x25')]['message'][_0xa286('0x34')],'to':_0x48258b[_0xa286('0x25')]['message']['to'],'cc':_0x48258b[_0xa286('0x25')][_0xa286('0x12')]['cc'],'subject':_0x48258b[_0xa286('0x25')][_0xa286('0x12')]['subject'],'attach':_0x48258b[_0xa286('0x25')][_0xa286('0x12')]['attach'],'Attachments':_0x48258b[_0xa286('0x25')]['message'][_0xa286('0x56')],'originTo':_0x48258b[_0xa286('0x25')][_0xa286('0x12')]['originTo'],'originCc':_0x48258b[_0xa286('0x25')][_0xa286('0x12')]['originCc'],'bcc':_0x48258b[_0xa286('0x25')][_0xa286('0x12')][_0xa286('0x57')]},{'include':[{'model':db[_0xa286('0x58')],'as':'Attachments'}]});})['then'](function(_0x2a7e61){_0x1154f7['message']=_0x2a7e61;if(_0x1154f7[_0xa286('0x55')][_0xa286('0x59')]){return db['User'][_0xa286('0x23')]({'attributes':['id',_0xa286('0x5a')],'where':{'id':_0x1154f7['interaction'][_0xa286('0x59')]}})[_0xa286('0xc')](function(_0xb6fcab){if(_0xb6fcab){_0x1154f7[_0xa286('0x3f')][_0xa286('0x5b')]({'id':0x0,'priority':0x0,'app':_0xa286('0x5c'),'appdata':_0xb6fcab['name']+','+(_0x1154f7[_0xa286('0x35')][_0xa286('0x5d')]||0xa),'interval':_0xa286('0x45')});}return respondWithRpcPromise('Start',_0xa286('0x5e'),_0x1154f7);});}return respondWithRpcPromise(_0xa286('0x5f'),_0xa286('0x5e'),_0x1154f7);})[_0xa286('0xc')](function(_0x3feaa7){_0x28069d(_0x3feaa7);})['catch'](function(_0x5f5888){_0x58442e(_0x1c75c8[_0xa286('0x10')](0x1f4,_0x5f5888[_0xa286('0x12')]));});});};
\ No newline at end of file
index 4339b95..d121b72 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf087=['save','remove','update','emit','removeListener','length','mailAccount:','./mailAccount.events'];(function(_0x31657c,_0x21486e){var _0x5175ed=function(_0x4dcd9b){while(--_0x4dcd9b){_0x31657c['push'](_0x31657c['shift']());}};_0x5175ed(++_0x21486e);}(_0xf087,0x16f));var _0x7f08=function(_0x48a4b8,_0x3e496d){_0x48a4b8=_0x48a4b8-0x0;var _0x27bd19=_0xf087[_0x48a4b8];return _0x27bd19;};'use strict';var MailAccountEvents=require(_0x7f08('0x0'));var events=[_0x7f08('0x1'),_0x7f08('0x2'),_0x7f08('0x3')];function createListener(_0x11f571,_0x4251d2){return function(_0x5738f8){_0x4251d2[_0x7f08('0x4')](_0x11f571,_0x5738f8);};}function removeListener(_0x47b1db,_0x1a7a29){return function(){MailAccountEvents[_0x7f08('0x5')](_0x47b1db,_0x1a7a29);};}exports['register']=function(_0x1d9233){for(var _0x3c0725=0x0,_0x2d6068=events[_0x7f08('0x6')];_0x3c0725<_0x2d6068;_0x3c0725++){var _0x3ac2ee=events[_0x3c0725];var _0x38aca7=createListener(_0x7f08('0x7')+_0x3ac2ee,_0x1d9233);MailAccountEvents['on'](_0x3ac2ee,_0x38aca7);}};
\ No newline at end of file
+var _0xbfa6=['mailAccount:','./mailAccount.events','save','emit','length'];(function(_0x33769c,_0x2b249e){var _0x411c8e=function(_0x2bb978){while(--_0x2bb978){_0x33769c['push'](_0x33769c['shift']());}};_0x411c8e(++_0x2b249e);}(_0xbfa6,0x14b));var _0x6bfa=function(_0x3c8f26,_0x453699){_0x3c8f26=_0x3c8f26-0x0;var _0x5a4dd7=_0xbfa6[_0x3c8f26];return _0x5a4dd7;};'use strict';var MailAccountEvents=require(_0x6bfa('0x0'));var events=[_0x6bfa('0x1'),'remove','update'];function createListener(_0x37c218,_0x5d4ebb){return function(_0x35f9f0){_0x5d4ebb[_0x6bfa('0x2')](_0x37c218,_0x35f9f0);};}function removeListener(_0x5e0e02,_0x42138f){return function(){MailAccountEvents['removeListener'](_0x5e0e02,_0x42138f);};}exports['register']=function(_0x4e84dd){for(var _0x42e017=0x0,_0x56ae7a=events[_0x6bfa('0x3')];_0x42e017<_0x56ae7a;_0x42e017++){var _0x1e8eda=events[_0x42e017];var _0x394e2c=createListener(_0x6bfa('0x4')+_0x1e8eda,_0x4e84dd);MailAccountEvents['on'](_0x1e8eda,_0x394e2c);}};
\ No newline at end of file
index 6a97517..4684334 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd25d=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailApplication.controller','get','/:id','isAuthenticated','update','delete','destroy','exports','util'];(function(_0x57e00e,_0x36e79a){var _0x415e60=function(_0x5cd7fa){while(--_0x5cd7fa){_0x57e00e['push'](_0x57e00e['shift']());}};_0x415e60(++_0x36e79a);}(_0xd25d,0xe9));var _0xdd25=function(_0xc94ef9,_0x38dc30){_0xc94ef9=_0xc94ef9-0x0;var _0x25af61=_0xd25d[_0xc94ef9];return _0x25af61;};'use strict';var multer=require('multer');var util=require(_0xdd25('0x0'));var path=require('path');var express=require('express');var router=express[_0xdd25('0x1')]();var auth=require(_0xdd25('0x2'));var interaction=require(_0xdd25('0x3'));var config=require(_0xdd25('0x4'));var controller=require(_0xdd25('0x5'));router[_0xdd25('0x6')](_0xdd25('0x7'),auth[_0xdd25('0x8')](),controller['show']);router['put'](_0xdd25('0x7'),auth[_0xdd25('0x8')](),controller[_0xdd25('0x9')]);router[_0xdd25('0xa')](_0xdd25('0x7'),auth[_0xdd25('0x8')](),controller[_0xdd25('0xb')]);module[_0xdd25('0xc')]=router;
\ No newline at end of file
+var _0x1147=['isAuthenticated','put','delete','destroy','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailApplication.controller','get','/:id'];(function(_0x1515da,_0x18ac75){var _0x69559b=function(_0xf471f3){while(--_0xf471f3){_0x1515da['push'](_0x1515da['shift']());}};_0x69559b(++_0x18ac75);}(_0x1147,0xf5));var _0x7114=function(_0x2feeb4,_0x32f8a6){_0x2feeb4=_0x2feeb4-0x0;var _0x5a73cd=_0x1147[_0x2feeb4];return _0x5a73cd;};'use strict';var multer=require(_0x7114('0x0'));var util=require('util');var path=require(_0x7114('0x1'));var express=require(_0x7114('0x2'));var router=express[_0x7114('0x3')]();var auth=require(_0x7114('0x4'));var interaction=require(_0x7114('0x5'));var config=require(_0x7114('0x6'));var controller=require(_0x7114('0x7'));router[_0x7114('0x8')](_0x7114('0x9'),auth[_0x7114('0xa')](),controller['show']);router[_0x7114('0xb')]('/:id',auth[_0x7114('0xa')](),controller['update']);router[_0x7114('0xc')](_0x7114('0x9'),auth[_0x7114('0xa')](),controller[_0x7114('0xd')]);module[_0x7114('0xe')]=router;
\ No newline at end of file
index 5f06f7d..bd68f19 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4a49=['exports','INTEGER','STRING','noop','sequelize'];(function(_0x273c5f,_0x494620){var _0x442fe1=function(_0x54386c){while(--_0x54386c){_0x273c5f['push'](_0x273c5f['shift']());}};_0x442fe1(++_0x494620);}(_0x4a49,0x6d));var _0x94a4=function(_0x4f78b1,_0x27946d){_0x4f78b1=_0x4f78b1-0x0;var _0x27e142=_0x4a49[_0x4f78b1];return _0x27e142;};'use strict';var Sequelize=require(_0x94a4('0x0'));module[_0x94a4('0x1')]={'priority':{'type':Sequelize[_0x94a4('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0x94a4('0x3')],'allowNull':![],'defaultValue':_0x94a4('0x4')},'appdata':{'type':Sequelize[_0x94a4('0x3')](0x1000),'defaultValue':''},'description':{'type':Sequelize[_0x94a4('0x3')]},'interval':{'type':Sequelize[_0x94a4('0x3')],'defaultValue':'*,*,*,*'}};
\ No newline at end of file
+var _0x6e83=['*,*,*,*','sequelize','INTEGER','STRING','noop'];(function(_0x56ef1a,_0x44d95f){var _0x1714ff=function(_0x336d9c){while(--_0x336d9c){_0x56ef1a['push'](_0x56ef1a['shift']());}};_0x1714ff(++_0x44d95f);}(_0x6e83,0x65));var _0x36e8=function(_0x57b740,_0x3a8814){_0x57b740=_0x57b740-0x0;var _0x576e93=_0x6e83[_0x57b740];return _0x576e93;};'use strict';var Sequelize=require(_0x36e8('0x0'));module['exports']={'priority':{'type':Sequelize[_0x36e8('0x1')],'allowNull':![]},'app':{'type':Sequelize[_0x36e8('0x2')],'allowNull':![],'defaultValue':_0x36e8('0x3')},'appdata':{'type':Sequelize[_0x36e8('0x2')](0x1000),'defaultValue':''},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize[_0x36e8('0x2')],'defaultValue':_0x36e8('0x4')}};
\ No newline at end of file
index ddbb44d..e9eb548 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x06ef=['offset','set','Content-Range','apply','reject','save','then','destroy','error','stack','name','send','params','model','MailApplication','rawAttributes','query','keys','intersection','attributes','fields','length','includeAll','include','merge','options','catch','body','find','moment','sox','to-csv','ejs','squel','crypto','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count'];(function(_0x236470,_0x752a84){var _0x2b858d=function(_0x40c5b2){while(--_0x40c5b2){_0x236470['push'](_0x236470['shift']());}};_0x2b858d(++_0x752a84);}(_0x06ef,0x185));var _0xf06e=function(_0x47e7ae,_0x3c357b){_0x47e7ae=_0x47e7ae-0x0;var _0xb7c680=_0x06ef[_0x47e7ae];return _0xb7c680;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xf06e('0x0'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0xf06e('0x1'));var csv=require(_0xf06e('0x2'));var ejs=require(_0xf06e('0x3'));var fs=require('fs');var _=require('lodash');var squel=require(_0xf06e('0x4'));var crypto=require(_0xf06e('0x5'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0xf06e('0x6'));var logger=require(_0xf06e('0x7'))(_0xf06e('0x8'));var utils=require(_0xf06e('0x9'));var config=require(_0xf06e('0xa'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1fe49b,_0x3a33c1){_0x3a33c1=_0x3a33c1||0xcc;return function(_0x4e3591){if(_0x4e3591){return _0x1fe49b[_0xf06e('0xb')](_0x3a33c1);}return _0x1fe49b[_0xf06e('0xc')](_0x3a33c1)[_0xf06e('0xd')]();};}function respondWithResult(_0x400af5,_0x39979a){_0x39979a=_0x39979a||0xc8;return function(_0x7b4c4){if(_0x7b4c4){return _0x400af5['status'](_0x39979a)[_0xf06e('0xe')](_0x7b4c4);}};}function respondWithFilteredResult(_0x2578e4,_0x5c36b3){return function(_0x1510a0){if(_0x1510a0){var _0x17ea4f=_0x1510a0[_0xf06e('0xf')],_0x59f60b=_0x5c36b3[_0xf06e('0x10')],_0x4e6dd8=_0x5c36b3[_0xf06e('0x10')]+_0x5c36b3['limit'],_0x5c862b;if(_0x4e6dd8>=_0x17ea4f){_0x4e6dd8=_0x17ea4f;_0x5c862b=0xc8;}else{_0x5c862b=0xce;}_0x2578e4[_0xf06e('0xc')](_0x5c862b);return _0x2578e4[_0xf06e('0x11')](_0xf06e('0x12'),_0x59f60b+'-'+_0x4e6dd8+'/'+_0x17ea4f)[_0xf06e('0xe')](_0x1510a0);}return null;};}function patchUpdates(_0x44157a){return function(_0x240326){try{jsonpatch[_0xf06e('0x13')](_0x240326,_0x44157a,!![]);}catch(_0x4eb260){return BPromise[_0xf06e('0x14')](_0x4eb260);}return _0x240326[_0xf06e('0x15')]();};}function saveUpdates(_0x251c9f,_0x7a9f4b){return function(_0x5c1a80){if(_0x5c1a80){return _0x5c1a80['update'](_0x251c9f)[_0xf06e('0x16')](function(_0x3fbee3){return _0x3fbee3;});}return null;};}function removeEntity(_0x5d66f9,_0x5710f1){return function(_0x5fcefb){if(_0x5fcefb){return _0x5fcefb[_0xf06e('0x17')]()[_0xf06e('0x16')](function(){_0x5d66f9['status'](0xcc)[_0xf06e('0xd')]();});}};}function handleEntityNotFound(_0x3ff738,_0x5ecd73){return function(_0x3c3796){if(!_0x3c3796){_0x3ff738[_0xf06e('0xb')](0x194);}return _0x3c3796;};}function handleError(_0x445e2b,_0x5dffd2){_0x5dffd2=_0x5dffd2||0x1f4;return function(_0x1106d2){logger[_0xf06e('0x18')](_0x1106d2[_0xf06e('0x19')]);if(_0x1106d2[_0xf06e('0x1a')]){delete _0x1106d2[_0xf06e('0x1a')];}_0x445e2b['status'](_0x5dffd2)[_0xf06e('0x1b')](_0x1106d2);};}exports['show']=function(_0x22e5da,_0x36b816){var _0x8d3493={'raw':!![],'where':{'id':_0x22e5da[_0xf06e('0x1c')]['id']}},_0x322f4c={};_0x322f4c[_0xf06e('0x1d')]=_['keys'](db[_0xf06e('0x1e')][_0xf06e('0x1f')]);_0x322f4c[_0xf06e('0x20')]=_[_0xf06e('0x21')](_0x22e5da[_0xf06e('0x20')]);_0x322f4c['filters']=_[_0xf06e('0x22')](_0x322f4c[_0xf06e('0x1d')],_0x322f4c[_0xf06e('0x20')]);_0x8d3493[_0xf06e('0x23')]=_[_0xf06e('0x22')](_0x322f4c[_0xf06e('0x1d')],qs['fields'](_0x22e5da[_0xf06e('0x20')][_0xf06e('0x24')]));_0x8d3493[_0xf06e('0x23')]=_0x8d3493['attributes'][_0xf06e('0x25')]?_0x8d3493[_0xf06e('0x23')]:_0x322f4c[_0xf06e('0x1d')];if(_0x22e5da[_0xf06e('0x20')][_0xf06e('0x26')]){_0x8d3493[_0xf06e('0x27')]=[{'all':!![]}];}_0x8d3493=_[_0xf06e('0x28')]({},_0x8d3493,_0x22e5da[_0xf06e('0x29')]);return db[_0xf06e('0x1e')]['find'](_0x8d3493)['then'](handleEntityNotFound(_0x36b816,null))[_0xf06e('0x16')](respondWithResult(_0x36b816,null))[_0xf06e('0x2a')](handleError(_0x36b816,null));};exports['update']=function(_0x274b47,_0x21eaa8){if(_0x274b47[_0xf06e('0x2b')]['id']){delete _0x274b47[_0xf06e('0x2b')]['id'];}return db[_0xf06e('0x1e')][_0xf06e('0x2c')]({'where':{'id':_0x274b47['params']['id']}})[_0xf06e('0x16')](handleEntityNotFound(_0x21eaa8,null))[_0xf06e('0x16')](saveUpdates(_0x274b47[_0xf06e('0x2b')],null))['then'](respondWithResult(_0x21eaa8,null))[_0xf06e('0x2a')](handleError(_0x21eaa8,null));};exports[_0xf06e('0x17')]=function(_0x3941ec,_0x32e000){return db[_0xf06e('0x1e')][_0xf06e('0x2c')]({'where':{'id':_0x3941ec[_0xf06e('0x1c')]['id']}})['then'](handleEntityNotFound(_0x32e000,null))['then'](removeEntity(_0x32e000,null))[_0xf06e('0x2a')](handleError(_0x32e000,null));};
\ No newline at end of file
+var _0xe896=['request-promise','moment','mustache','sox','to-csv','ejs','crypto','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','sendStatus','end','status','json','count','limit','set','Content-Range','update','then','error','stack','name','send','show','params','model','keys','MailApplication','query','filters','attributes','intersection','fields','length','include','merge','options','find','catch','destroy','fast-json-patch'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0xe896,0x15f));var _0x6e89=function(_0x5d0bde,_0x37dc22){_0x5d0bde=_0x5d0bde-0x0;var _0x438446=_0xe896[_0x5d0bde];return _0x438446;};'use strict';var jsonpatch=require(_0x6e89('0x0'));var rp=require(_0x6e89('0x1'));var moment=require(_0x6e89('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x6e89('0x3'));var util=require('util');var path=require('path');var sox=require(_0x6e89('0x4'));var csv=require(_0x6e89('0x5'));var ejs=require(_0x6e89('0x6'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x6e89('0x7'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x6e89('0x8'));var Papa=require(_0x6e89('0x9'));var qs=require(_0x6e89('0xa'));var logger=require(_0x6e89('0xb'))(_0x6e89('0xc'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x27d033,_0x479113){_0x479113=_0x479113||0xcc;return function(_0x52da1b){if(_0x52da1b){return _0x27d033[_0x6e89('0xd')](_0x479113);}return _0x27d033['status'](_0x479113)[_0x6e89('0xe')]();};}function respondWithResult(_0x1e0634,_0x1cb7c2){_0x1cb7c2=_0x1cb7c2||0xc8;return function(_0x9ca9ec){if(_0x9ca9ec){return _0x1e0634[_0x6e89('0xf')](_0x1cb7c2)[_0x6e89('0x10')](_0x9ca9ec);}};}function respondWithFilteredResult(_0x142447,_0x4f6f1a){return function(_0x4721b8){if(_0x4721b8){var _0x1db68d=_0x4721b8[_0x6e89('0x11')],_0x1b2956=_0x4f6f1a['offset'],_0x99b769=_0x4f6f1a['offset']+_0x4f6f1a[_0x6e89('0x12')],_0x2b435b;if(_0x99b769>=_0x1db68d){_0x99b769=_0x1db68d;_0x2b435b=0xc8;}else{_0x2b435b=0xce;}_0x142447[_0x6e89('0xf')](_0x2b435b);return _0x142447[_0x6e89('0x13')](_0x6e89('0x14'),_0x1b2956+'-'+_0x99b769+'/'+_0x1db68d)[_0x6e89('0x10')](_0x4721b8);}return null;};}function patchUpdates(_0xa8d4ed){return function(_0x221b61){try{jsonpatch['apply'](_0x221b61,_0xa8d4ed,!![]);}catch(_0x7262b6){return BPromise['reject'](_0x7262b6);}return _0x221b61['save']();};}function saveUpdates(_0x4f15a8,_0x2fcba4){return function(_0x31f8d8){if(_0x31f8d8){return _0x31f8d8[_0x6e89('0x15')](_0x4f15a8)[_0x6e89('0x16')](function(_0x2c4eaf){return _0x2c4eaf;});}return null;};}function removeEntity(_0x315e89,_0x247786){return function(_0x4ce429){if(_0x4ce429){return _0x4ce429['destroy']()[_0x6e89('0x16')](function(){_0x315e89[_0x6e89('0xf')](0xcc)[_0x6e89('0xe')]();});}};}function handleEntityNotFound(_0x31cea0,_0x3df944){return function(_0x5cdee0){if(!_0x5cdee0){_0x31cea0[_0x6e89('0xd')](0x194);}return _0x5cdee0;};}function handleError(_0x3604a2,_0x13cbae){_0x13cbae=_0x13cbae||0x1f4;return function(_0x3a78cf){logger[_0x6e89('0x17')](_0x3a78cf[_0x6e89('0x18')]);if(_0x3a78cf[_0x6e89('0x19')]){delete _0x3a78cf['name'];}_0x3604a2['status'](_0x13cbae)[_0x6e89('0x1a')](_0x3a78cf);};}exports[_0x6e89('0x1b')]=function(_0x417e48,_0x349913){var _0x3a79fe={'raw':!![],'where':{'id':_0x417e48[_0x6e89('0x1c')]['id']}},_0x556b6a={};_0x556b6a[_0x6e89('0x1d')]=_[_0x6e89('0x1e')](db[_0x6e89('0x1f')]['rawAttributes']);_0x556b6a[_0x6e89('0x20')]=_[_0x6e89('0x1e')](_0x417e48[_0x6e89('0x20')]);_0x556b6a[_0x6e89('0x21')]=_['intersection'](_0x556b6a[_0x6e89('0x1d')],_0x556b6a[_0x6e89('0x20')]);_0x3a79fe[_0x6e89('0x22')]=_[_0x6e89('0x23')](_0x556b6a[_0x6e89('0x1d')],qs[_0x6e89('0x24')](_0x417e48['query'][_0x6e89('0x24')]));_0x3a79fe[_0x6e89('0x22')]=_0x3a79fe['attributes'][_0x6e89('0x25')]?_0x3a79fe[_0x6e89('0x22')]:_0x556b6a['model'];if(_0x417e48[_0x6e89('0x20')]['includeAll']){_0x3a79fe[_0x6e89('0x26')]=[{'all':!![]}];}_0x3a79fe=_[_0x6e89('0x27')]({},_0x3a79fe,_0x417e48[_0x6e89('0x28')]);return db['MailApplication'][_0x6e89('0x29')](_0x3a79fe)[_0x6e89('0x16')](handleEntityNotFound(_0x349913,null))[_0x6e89('0x16')](respondWithResult(_0x349913,null))[_0x6e89('0x2a')](handleError(_0x349913,null));};exports[_0x6e89('0x15')]=function(_0x1b66fa,_0x360ed7){if(_0x1b66fa['body']['id']){delete _0x1b66fa['body']['id'];}return db[_0x6e89('0x1f')][_0x6e89('0x29')]({'where':{'id':_0x1b66fa[_0x6e89('0x1c')]['id']}})[_0x6e89('0x16')](handleEntityNotFound(_0x360ed7,null))['then'](saveUpdates(_0x1b66fa['body'],null))[_0x6e89('0x16')](respondWithResult(_0x360ed7,null))['catch'](handleError(_0x360ed7,null));};exports[_0x6e89('0x2b')]=function(_0x407b0f,_0x154703){return db[_0x6e89('0x1f')]['find']({'where':{'id':_0x407b0f[_0x6e89('0x1c')]['id']}})[_0x6e89('0x16')](handleEntityNotFound(_0x154703,null))[_0x6e89('0x16')](removeEntity(_0x154703,null))[_0x6e89('0x2a')](handleError(_0x154703,null));};
\ No newline at end of file
index b9a7a87..55bae1f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc89f=['request-promise','./mailApplication.attributes','exports','define','MailApplication','mail_applications','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x4ee511,_0x2183cb){var _0x58f6c7=function(_0x444d17){while(--_0x444d17){_0x4ee511['push'](_0x4ee511['shift']());}};_0x58f6c7(++_0x2183cb);}(_0xc89f,0x1c2));var _0xfc89=function(_0x7de442,_0x182d78){_0x7de442=_0x7de442-0x0;var _0x51072f=_0xc89f[_0x7de442];return _0x51072f;};'use strict';var _=require(_0xfc89('0x0'));var util=require(_0xfc89('0x1'));var logger=require(_0xfc89('0x2'))(_0xfc89('0x3'));var moment=require(_0xfc89('0x4'));var BPromise=require(_0xfc89('0x5'));var rp=require(_0xfc89('0x6'));var attributes=require(_0xfc89('0x7'));module[_0xfc89('0x8')]=function(_0x329e0e,_0x57250a){return _0x329e0e[_0xfc89('0x9')](_0xfc89('0xa'),attributes,{'tableName':_0xfc89('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1b1e=['api','bluebird','request-promise','./mailApplication.attributes','exports','define','mail_applications','lodash','util','../../config/logger'];(function(_0x471dc7,_0x32cecf){var _0xa78c38=function(_0x37cfcc){while(--_0x37cfcc){_0x471dc7['push'](_0x471dc7['shift']());}};_0xa78c38(++_0x32cecf);}(_0x1b1e,0x1e7));var _0xe1b1=function(_0x497d84,_0x4fad8d){_0x497d84=_0x497d84-0x0;var _0x28b334=_0x1b1e[_0x497d84];return _0x28b334;};'use strict';var _=require(_0xe1b1('0x0'));var util=require(_0xe1b1('0x1'));var logger=require(_0xe1b1('0x2'))(_0xe1b1('0x3'));var moment=require('moment');var BPromise=require(_0xe1b1('0x4'));var rp=require(_0xe1b1('0x5'));var attributes=require(_0xe1b1('0x6'));module[_0xe1b1('0x7')]=function(_0x5fcdef,_0x401080){return _0x5fcdef[_0xe1b1('0x8')]('MailApplication',attributes,{'tableName':_0xe1b1('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4446720..1f1c427 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa8a4=['rpc','../../config/environment','jayson/promise','client','http','request','then','info','MailApplication,\x20%s,\x20%s','debug','MailApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','UpdateMailApplication','options','where','limit','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger'];(function(_0x1acc2d,_0x597696){var _0xabfa6d=function(_0x41e83c){while(--_0x41e83c){_0x1acc2d['push'](_0x1acc2d['shift']());}};_0xabfa6d(++_0x597696);}(_0xa8a4,0x155));var _0x4a8a=function(_0x187c71,_0x141111){_0x187c71=_0x187c71-0x0;var _0x25cdf0=_0xa8a4[_0x187c71];return _0x25cdf0;};'use strict';var _=require(_0x4a8a('0x0'));var util=require(_0x4a8a('0x1'));var moment=require(_0x4a8a('0x2'));var BPromise=require(_0x4a8a('0x3'));var rs=require(_0x4a8a('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x4a8a('0x5'));var logger=require(_0x4a8a('0x6'))(_0x4a8a('0x7'));var config=require(_0x4a8a('0x8'));var jayson=require(_0x4a8a('0x9'));var client=jayson[_0x4a8a('0xa')][_0x4a8a('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x1c78e2,_0x5a143c,_0x52996a){return new BPromise(function(_0x1a4eaf,_0x49716f){return client[_0x4a8a('0xc')](_0x1c78e2,_0x52996a)[_0x4a8a('0xd')](function(_0x339220){logger[_0x4a8a('0xe')](_0x4a8a('0xf'),_0x5a143c,'request\x20sent');logger[_0x4a8a('0x10')](_0x4a8a('0x11'),_0x5a143c,'request\x20sent',JSON[_0x4a8a('0x12')](_0x339220));if(_0x339220[_0x4a8a('0x13')]){if(_0x339220[_0x4a8a('0x13')][_0x4a8a('0x14')]===0x1f4){logger['error'](_0x4a8a('0xf'),_0x5a143c,_0x339220[_0x4a8a('0x13')]['message']);return _0x49716f(_0x339220[_0x4a8a('0x13')][_0x4a8a('0x15')]);}logger['error'](_0x4a8a('0xf'),_0x5a143c,_0x339220[_0x4a8a('0x13')][_0x4a8a('0x15')]);return _0x1a4eaf(_0x339220[_0x4a8a('0x13')][_0x4a8a('0x15')]);}else{logger[_0x4a8a('0xe')](_0x4a8a('0xf'),_0x5a143c,_0x4a8a('0x16'));_0x1a4eaf(_0x339220[_0x4a8a('0x17')]['message']);}})[_0x4a8a('0x18')](function(_0x3b20fa){logger[_0x4a8a('0x13')](_0x4a8a('0xf'),_0x5a143c,_0x3b20fa);_0x49716f(_0x3b20fa);});});}exports[_0x4a8a('0x19')]=function(_0x23d322){var _0x2e110f=this;return new Promise(function(_0x317215,_0x56ff87){return db['MailApplication']['update'](_0x23d322['body'],{'raw':_0x23d322[_0x4a8a('0x1a')]?_0x23d322[_0x4a8a('0x1a')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x23d322[_0x4a8a('0x1a')]?_0x23d322[_0x4a8a('0x1a')][_0x4a8a('0x1b')]||null:null,'attributes':_0x23d322[_0x4a8a('0x1a')]?_0x23d322[_0x4a8a('0x1a')]['attributes']||null:null,'limit':_0x23d322['options']?_0x23d322[_0x4a8a('0x1a')][_0x4a8a('0x1c')]||null:null})[_0x4a8a('0xd')](function(_0x16184e){logger['info'](_0x4a8a('0x19'),_0x23d322);logger[_0x4a8a('0x10')]('UpdateMailApplication',_0x23d322,JSON['stringify'](_0x16184e));_0x317215(_0x16184e);})[_0x4a8a('0x18')](function(_0x4f7589){logger[_0x4a8a('0x13')]('UpdateMailApplication',_0x4f7589[_0x4a8a('0x15')],_0x23d322);_0x56ff87(_0x2e110f['error'](0x1f4,_0x4f7589[_0x4a8a('0x15')]));});});};
\ No newline at end of file
+var _0xaddc=['http','request','then','info','MailApplication,\x20%s,\x20%s','request\x20sent','debug','MailApplication,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','UpdateMailApplication','body','options','where','attributes','limit','lodash','util','moment','../../config/utils','../../config/logger','rpc','../../config/environment','client'];(function(_0x178cc6,_0x115f6f){var _0x23f980=function(_0x1ff81f){while(--_0x1ff81f){_0x178cc6['push'](_0x178cc6['shift']());}};_0x23f980(++_0x115f6f);}(_0xaddc,0x13c));var _0xcadd=function(_0xc93bb6,_0x24e895){_0xc93bb6=_0xc93bb6-0x0;var _0xf82b5c=_0xaddc[_0xc93bb6];return _0xf82b5c;};'use strict';var _=require(_0xcadd('0x0'));var util=require(_0xcadd('0x1'));var moment=require(_0xcadd('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xcadd('0x3'));var logger=require(_0xcadd('0x4'))(_0xcadd('0x5'));var config=require(_0xcadd('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xcadd('0x7')][_0xcadd('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x2e7cbb,_0x58dd0c,_0x2d6773){return new BPromise(function(_0x377646,_0x1a4433){return client[_0xcadd('0x9')](_0x2e7cbb,_0x2d6773)[_0xcadd('0xa')](function(_0x2340e2){logger[_0xcadd('0xb')](_0xcadd('0xc'),_0x58dd0c,_0xcadd('0xd'));logger[_0xcadd('0xe')](_0xcadd('0xf'),_0x58dd0c,_0xcadd('0xd'),JSON[_0xcadd('0x10')](_0x2340e2));if(_0x2340e2['error']){if(_0x2340e2[_0xcadd('0x11')]['code']===0x1f4){logger[_0xcadd('0x11')](_0xcadd('0xc'),_0x58dd0c,_0x2340e2[_0xcadd('0x11')][_0xcadd('0x12')]);return _0x1a4433(_0x2340e2[_0xcadd('0x11')][_0xcadd('0x12')]);}logger[_0xcadd('0x11')]('MailApplication,\x20%s,\x20%s',_0x58dd0c,_0x2340e2[_0xcadd('0x11')][_0xcadd('0x12')]);return _0x377646(_0x2340e2[_0xcadd('0x11')][_0xcadd('0x12')]);}else{logger['info']('MailApplication,\x20%s,\x20%s',_0x58dd0c,_0xcadd('0xd'));_0x377646(_0x2340e2[_0xcadd('0x13')][_0xcadd('0x12')]);}})[_0xcadd('0x14')](function(_0x5029ca){logger[_0xcadd('0x11')](_0xcadd('0xc'),_0x58dd0c,_0x5029ca);_0x1a4433(_0x5029ca);});});}exports[_0xcadd('0x15')]=function(_0x189f96){var _0x5b8970=this;return new Promise(function(_0x2f6308,_0x42db19){return db['MailApplication']['update'](_0x189f96[_0xcadd('0x16')],{'raw':_0x189f96[_0xcadd('0x17')]?_0x189f96[_0xcadd('0x17')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x189f96[_0xcadd('0x17')]?_0x189f96['options'][_0xcadd('0x18')]||null:null,'attributes':_0x189f96[_0xcadd('0x17')]?_0x189f96[_0xcadd('0x17')][_0xcadd('0x19')]||null:null,'limit':_0x189f96[_0xcadd('0x17')]?_0x189f96[_0xcadd('0x17')][_0xcadd('0x1a')]||null:null})[_0xcadd('0xa')](function(_0x56e96f){logger[_0xcadd('0xb')](_0xcadd('0x15'),_0x189f96);logger[_0xcadd('0xe')](_0xcadd('0x15'),_0x189f96,JSON[_0xcadd('0x10')](_0x56e96f));_0x2f6308(_0x56e96f);})['catch'](function(_0x227080){logger[_0xcadd('0x11')]('UpdateMailApplication',_0x227080['message'],_0x189f96);_0x42db19(_0x5b8970[_0xcadd('0x11')](0x1f4,_0x227080[_0xcadd('0x12')]));});});};
\ No newline at end of file
index c118bf8..9942898 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd35a=['/:id','/:id/messages','post','addMessage','/:id/tags','tracked','mail','mailinteraction:addtags','put','update','delete','mailinteraction:destroy','destroy','removeTags','multer','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','index','get','/describe','isAuthenticated','describe'];(function(_0x36bab3,_0x19ce33){var _0x2d3989=function(_0x2a4f60){while(--_0x2a4f60){_0x36bab3['push'](_0x36bab3['shift']());}};_0x2d3989(++_0x19ce33);}(_0xd35a,0xa4));var _0xad35=function(_0x5a26db,_0x2c5ccd){_0x5a26db=_0x5a26db-0x0;var _0x4619dd=_0xd35a[_0x5a26db];return _0x4619dd;};'use strict';var multer=require(_0xad35('0x0'));var util=require('util');var path=require('path');var express=require(_0xad35('0x1'));var router=express[_0xad35('0x2')]();var auth=require(_0xad35('0x3'));var interaction=require(_0xad35('0x4'));var config=require(_0xad35('0x5'));var controller=require('./mailInteraction.controller');router['get']('/',auth['isAuthenticated'](),controller[_0xad35('0x6')]);router[_0xad35('0x7')](_0xad35('0x8'),auth[_0xad35('0x9')](),controller[_0xad35('0xa')]);router['get'](_0xad35('0xb'),auth[_0xad35('0x9')](),controller['show']);router[_0xad35('0x7')](_0xad35('0xc'),auth['isAuthenticated'](),controller['getMessages']);router[_0xad35('0xd')]('/',auth[_0xad35('0x9')](),controller['create']);router[_0xad35('0xd')](_0xad35('0xc'),auth['isAuthenticated'](),controller[_0xad35('0xe')]);router[_0xad35('0xd')](_0xad35('0xf'),auth['isAuthenticated'](),interaction[_0xad35('0x10')](_0xad35('0x11'),_0xad35('0x12')),controller['addTags']);router[_0xad35('0x13')](_0xad35('0xb'),auth[_0xad35('0x9')](),interaction[_0xad35('0x10')](_0xad35('0x11'),'mailinteraction:update'),controller[_0xad35('0x14')]);router[_0xad35('0x15')](_0xad35('0xb'),auth[_0xad35('0x9')](),interaction['tracked']('mail',_0xad35('0x16')),controller[_0xad35('0x17')]);router[_0xad35('0x15')](_0xad35('0xf'),auth[_0xad35('0x9')](),controller[_0xad35('0x18')]);module['exports']=router;
\ No newline at end of file
+var _0xb91d=['describe','/:id','show','/:id/messages','getMessages','create','post','addMessage','tracked','mailinteraction:addtags','addTags','put','mail','mailinteraction:update','delete','mailinteraction:destroy','destroy','/:id/tags','exports','multer','util','../../components/interaction/service','../../config/environment','./mailInteraction.controller','get','isAuthenticated','index','/describe'];(function(_0x4d398d,_0x4158fa){var _0x41c756=function(_0x409a27){while(--_0x409a27){_0x4d398d['push'](_0x4d398d['shift']());}};_0x41c756(++_0x4158fa);}(_0xb91d,0x67));var _0xdb91=function(_0x166d93,_0x301f09){_0x166d93=_0x166d93-0x0;var _0xba708=_0xb91d[_0x166d93];return _0xba708;};'use strict';var multer=require(_0xdb91('0x0'));var util=require(_0xdb91('0x1'));var path=require('path');var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xdb91('0x2'));var config=require(_0xdb91('0x3'));var controller=require(_0xdb91('0x4'));router[_0xdb91('0x5')]('/',auth[_0xdb91('0x6')](),controller[_0xdb91('0x7')]);router[_0xdb91('0x5')](_0xdb91('0x8'),auth[_0xdb91('0x6')](),controller[_0xdb91('0x9')]);router[_0xdb91('0x5')](_0xdb91('0xa'),auth[_0xdb91('0x6')](),controller[_0xdb91('0xb')]);router[_0xdb91('0x5')](_0xdb91('0xc'),auth[_0xdb91('0x6')](),controller[_0xdb91('0xd')]);router['post']('/',auth[_0xdb91('0x6')](),controller[_0xdb91('0xe')]);router[_0xdb91('0xf')](_0xdb91('0xc'),auth['isAuthenticated'](),controller[_0xdb91('0x10')]);router[_0xdb91('0xf')]('/:id/tags',auth[_0xdb91('0x6')](),interaction[_0xdb91('0x11')]('mail',_0xdb91('0x12')),controller[_0xdb91('0x13')]);router[_0xdb91('0x14')](_0xdb91('0xa'),auth[_0xdb91('0x6')](),interaction[_0xdb91('0x11')](_0xdb91('0x15'),_0xdb91('0x16')),controller['update']);router[_0xdb91('0x17')](_0xdb91('0xa'),auth[_0xdb91('0x6')](),interaction[_0xdb91('0x11')](_0xdb91('0x15'),_0xdb91('0x18')),controller[_0xdb91('0x19')]);router[_0xdb91('0x17')](_0xdb91('0x1a'),auth[_0xdb91('0x6')](),controller['removeTags']);module[_0xdb91('0x1b')]=router;
\ No newline at end of file
index c485dc0..cbc0574 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb26=['\x20CHARSET\x20utf8mb4\x20COLLATE\x20utf8mb4_unicode_ci','ENUM','out','getDataValue','fromString','lastMsgBody','split','slice','join','sequelize','html-to-text','iconv','BOOLEAN','DATE','STRING','TEXT','long'];(function(_0x4b7895,_0x3c4f5d){var _0x264180=function(_0xe0e861){while(--_0xe0e861){_0x4b7895['push'](_0x4b7895['shift']());}};_0x264180(++_0x3c4f5d);}(_0xcb26,0x91));var _0x6cb2=function(_0x12f688,_0x585c25){_0x12f688=_0x12f688-0x0;var _0x59c3de=_0xcb26[_0x12f688];return _0x59c3de;};'use strict';var Sequelize=require(_0x6cb2('0x0'));var htmlToText=require(_0x6cb2('0x1'));var iconv=require(_0x6cb2('0x2'));module['exports']={'closed':{'type':Sequelize[_0x6cb2('0x3')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x6cb2('0x4')]},'disposition':{'type':Sequelize[_0x6cb2('0x5')]},'note':{'type':Sequelize[_0x6cb2('0x5')]},'inReplyTo':{'type':Sequelize[_0x6cb2('0x5')](0xbe)},'to':{'type':Sequelize[_0x6cb2('0x5')]},'cc':{'type':Sequelize[_0x6cb2('0x6')](_0x6cb2('0x7'))},'subject':{'type':Sequelize['TEXT']('')+_0x6cb2('0x8')},'attach':{'type':Sequelize[_0x6cb2('0x3')],'defaultValue':![]},'read1stAt':{'type':Sequelize[_0x6cb2('0x4')]},'substatus':{'type':Sequelize[_0x6cb2('0x5')](0x3c)},'substatusAt':{'type':Sequelize[_0x6cb2('0x4')]},'firstMsgDirection':{'type':Sequelize[_0x6cb2('0x9')]('in',_0x6cb2('0xa')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x6cb2('0x4')]},'lastMsgDirection':{'type':Sequelize['ENUM']('in','out'),'defaultValue':'in','allowNull':![]},'lastMsgBody':{'type':Sequelize[_0x6cb2('0x6')](_0x6cb2('0x7'))+_0x6cb2('0x8'),'get':function(){try{return this[_0x6cb2('0xb')]('lastMsgBody')?htmlToText[_0x6cb2('0xc')](this[_0x6cb2('0xb')](_0x6cb2('0xd')),{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'ignoreImage':!![]})[_0x6cb2('0xe')]('\x0a')[_0x6cb2('0xf')](0x0,0x6)[_0x6cb2('0x10')]('\x0a'):null;}catch(_0xa145f9){return null;}}}};
\ No newline at end of file
+var _0xbaca=['slice','sequelize','html-to-text','iconv','BOOLEAN','DATE','STRING','TEXT','\x20CHARSET\x20utf8mb4\x20COLLATE\x20utf8mb4_unicode_ci','out','ENUM','long','getDataValue','lastMsgBody','fromString','split'];(function(_0x7978b1,_0x30225f){var _0x40e0d9=function(_0x175999){while(--_0x175999){_0x7978b1['push'](_0x7978b1['shift']());}};_0x40e0d9(++_0x30225f);}(_0xbaca,0x131));var _0xabac=function(_0x54d52,_0x2473ba){_0x54d52=_0x54d52-0x0;var _0x968345=_0xbaca[_0x54d52];return _0x968345;};'use strict';var Sequelize=require(_0xabac('0x0'));var htmlToText=require(_0xabac('0x1'));var iconv=require(_0xabac('0x2'));module['exports']={'closed':{'type':Sequelize[_0xabac('0x3')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0xabac('0x4')]},'disposition':{'type':Sequelize[_0xabac('0x5')]},'note':{'type':Sequelize[_0xabac('0x5')]},'inReplyTo':{'type':Sequelize[_0xabac('0x5')](0xbe)},'to':{'type':Sequelize[_0xabac('0x5')]},'cc':{'type':Sequelize[_0xabac('0x6')]('long')},'subject':{'type':Sequelize[_0xabac('0x6')]('')+_0xabac('0x7')},'attach':{'type':Sequelize[_0xabac('0x3')],'defaultValue':![]},'read1stAt':{'type':Sequelize[_0xabac('0x4')]},'substatus':{'type':Sequelize[_0xabac('0x5')](0x3c)},'substatusAt':{'type':Sequelize[_0xabac('0x4')]},'firstMsgDirection':{'type':Sequelize['ENUM']('in',_0xabac('0x8')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0xabac('0x4')]},'lastMsgDirection':{'type':Sequelize[_0xabac('0x9')]('in',_0xabac('0x8')),'defaultValue':'in','allowNull':![]},'lastMsgBody':{'type':Sequelize[_0xabac('0x6')](_0xabac('0xa'))+'\x20CHARSET\x20utf8mb4\x20COLLATE\x20utf8mb4_unicode_ci','get':function(){try{return this[_0xabac('0xb')](_0xabac('0xc'))?htmlToText[_0xabac('0xd')](this[_0xabac('0xb')]('lastMsgBody'),{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'ignoreImage':!![]})[_0xabac('0xe')]('\x0a')[_0xabac('0xf')](0x0,0x6)['join']('\x0a'):null;}catch(_0x2554cd){return null;}}}};
\ No newline at end of file
index 46cc644..05cb325 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x31f6=['rawAttributes','find','create','body','params','describe','addMessage','omit','ids','getMessages','findOne','hasOwnProperty','order','where','MailInteractionId','map','$gte','YYYY-MM-DD\x20HH:mm:ss','rows','addTags','setTags','spread','emit','mailInteractionTags:save','removeTags','fast-json-patch','request-promise','mustache','util','to-csv','lodash','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','localhost','register','status','json','count','offset','limit','Content-Range','update','then','destroy','end','sendStatus','name','send','index','MailInteraction','model','keys','query','dateEnd','dateStart','intersection','attributes','fields','length','nolimit','sort','pick','filters','day','merge','filter','options','tag','include','push','Tags','read','MailMessage','Messages','direction','createdAt','User','Users','fullname','CmContact','Owner','internal','MailAccount','Account','key','email','Tag','color','ThroughTags','findAll','catch','show'];(function(_0x572cbc,_0x2746b6){var _0x2d16c3=function(_0x135101){while(--_0x135101){_0x572cbc['push'](_0x572cbc['shift']());}};_0x2d16c3(++_0x2746b6);}(_0x31f6,0x19d));var _0x631f=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x31f6[_0x321bb2];return _0x9c12ed;};'use strict';var jsonpatch=require(_0x631f('0x0'));var rp=require(_0x631f('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x631f('0x2'));var util=require(_0x631f('0x3'));var path=require('path');var sox=require('sox');var csv=require(_0x631f('0x4'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x631f('0x5'));var squel=require('squel');var crypto=require(_0x631f('0x6'));var jsforce=require(_0x631f('0x7'));var deskjs=require(_0x631f('0x8'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x631f('0x9'));var qs=require(_0x631f('0xa'));var logger=require(_0x631f('0xb'))('api');var utils=require(_0x631f('0xc'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var socket=require('socket.io-emitter')({'host':_0x631f('0xd'),'port':0x18eb});require('./mailInteraction.socket')[_0x631f('0xe')](socket);function respondWithStatusCode(_0x1d81f1,_0x349c9f){_0x349c9f=_0x349c9f||0xcc;return function(_0x3c0ffa){if(_0x3c0ffa){return _0x1d81f1['sendStatus'](_0x349c9f);}return _0x1d81f1[_0x631f('0xf')](_0x349c9f)['end']();};}function respondWithResult(_0xc80686,_0x3020f4){_0x3020f4=_0x3020f4||0xc8;return function(_0x3170b5){if(_0x3170b5){return _0xc80686[_0x631f('0xf')](_0x3020f4)[_0x631f('0x10')](_0x3170b5);}};}function respondWithFilteredResult(_0x566824,_0x5e88d1){return function(_0x496f91){if(_0x496f91){var _0x4b8c99=_0x496f91[_0x631f('0x11')],_0x34f670=_0x5e88d1[_0x631f('0x12')],_0x675147=_0x5e88d1[_0x631f('0x12')]+_0x5e88d1[_0x631f('0x13')],_0x34d5da;if(_0x675147>=_0x4b8c99){_0x675147=_0x4b8c99;_0x34d5da=0xc8;}else{_0x34d5da=0xce;}_0x566824[_0x631f('0xf')](_0x34d5da);return _0x566824['set'](_0x631f('0x14'),_0x34f670+'-'+_0x675147+'/'+_0x4b8c99)[_0x631f('0x10')](_0x496f91);}return null;};}function patchUpdates(_0x5dff3a){return function(_0xd064d1){try{jsonpatch['apply'](_0xd064d1,_0x5dff3a,!![]);}catch(_0x581eb3){return BPromise['reject'](_0x581eb3);}return _0xd064d1['save']();};}function saveUpdates(_0x5b8fcf,_0x1d34d9){return function(_0x31a4f1){if(_0x31a4f1){return _0x31a4f1[_0x631f('0x15')](_0x5b8fcf)[_0x631f('0x16')](function(_0x4ce6ba){return _0x4ce6ba;});}return null;};}function removeEntity(_0x48604b,_0x4f5c37){return function(_0x48b62e){if(_0x48b62e){return _0x48b62e[_0x631f('0x17')]()[_0x631f('0x16')](function(){_0x48604b[_0x631f('0xf')](0xcc)[_0x631f('0x18')]();});}};}function handleEntityNotFound(_0x35d44e,_0x5282f2){return function(_0x5de6f7){if(!_0x5de6f7){_0x35d44e[_0x631f('0x19')](0x194);}return _0x5de6f7;};}function handleError(_0x4c1e5b,_0x4dc7f5){_0x4dc7f5=_0x4dc7f5||0x1f4;return function(_0x5dccf3){logger['error'](_0x5dccf3['stack']);if(_0x5dccf3[_0x631f('0x1a')]){delete _0x5dccf3[_0x631f('0x1a')];}_0x4c1e5b[_0x631f('0xf')](_0x4dc7f5)[_0x631f('0x1b')](_0x5dccf3);};}exports[_0x631f('0x1c')]=function(_0x59d589,_0x33831e){var _0x3670e2={},_0x9d7b5e={},_0x11a8a5={'count':0x0,'rows':[]};var _0x2c5ba8=db[_0x631f('0x1d')]['rawAttributes'];_0x9d7b5e[_0x631f('0x1e')]=_[_0x631f('0x1f')](_0x2c5ba8);var _0x5b24f0={'dateStart':_0x59d589['query']['dateStart'],'dateEnd':_0x59d589[_0x631f('0x20')][_0x631f('0x21')]};delete _0x59d589[_0x631f('0x20')][_0x631f('0x22')];delete _0x59d589[_0x631f('0x20')][_0x631f('0x21')];_0x9d7b5e[_0x631f('0x20')]=_[_0x631f('0x1f')](_0x59d589[_0x631f('0x20')]);_0x9d7b5e['filters']=_[_0x631f('0x23')](_0x9d7b5e[_0x631f('0x1e')],_0x9d7b5e[_0x631f('0x20')]);_0x3670e2[_0x631f('0x24')]=_[_0x631f('0x23')](_0x9d7b5e[_0x631f('0x1e')],qs[_0x631f('0x25')](_0x59d589[_0x631f('0x20')][_0x631f('0x25')]));_0x3670e2[_0x631f('0x24')]=_0x3670e2[_0x631f('0x24')][_0x631f('0x26')]?_0x3670e2['attributes']:_0x9d7b5e[_0x631f('0x1e')];if(!_0x59d589[_0x631f('0x20')]['hasOwnProperty'](_0x631f('0x27'))){_0x3670e2[_0x631f('0x13')]=qs[_0x631f('0x13')](_0x59d589[_0x631f('0x20')][_0x631f('0x13')]);_0x3670e2[_0x631f('0x12')]=qs[_0x631f('0x12')](_0x59d589[_0x631f('0x20')][_0x631f('0x12')]);}_0x3670e2['order']=qs['sort'](_0x59d589[_0x631f('0x20')][_0x631f('0x28')]);_0x3670e2['where']=qs['filters'](_[_0x631f('0x29')](_0x59d589[_0x631f('0x20')],_0x9d7b5e[_0x631f('0x2a')]));if(_0x5b24f0['dateStart']){if(_0x5b24f0[_0x631f('0x21')]){_0x5b24f0['dateEnd']=moment(_0x5b24f0[_0x631f('0x21')])['add'](0x1,_0x631f('0x2b'));}else{_0x5b24f0[_0x631f('0x21')]=moment(_0x5b24f0[_0x631f('0x22')])['add'](0x1,_0x631f('0x2b'));}_[_0x631f('0x2c')](_0x3670e2['where'],{'createdAt':{'$gte':_0x5b24f0[_0x631f('0x22')],'$lte':_0x5b24f0['dateEnd']}});}if(_0x59d589['query']['filter']){_0x3670e2['where']=_['merge'](_0x3670e2['where'],{'$or':_['map'](_0x3670e2['attributes'],function(_0x5658e0){var _0x242f0a={};_0x242f0a[_0x5658e0]={'$like':'%'+_0x59d589['query'][_0x631f('0x2d')]+'%'};return _0x242f0a;})});}_0x3670e2=_[_0x631f('0x2c')]({},_0x3670e2,_0x59d589[_0x631f('0x2e')]);var _0x6722cb={'where':_0x3670e2['where']};_0x6722cb['include']=[];if(_0x59d589['query'][_0x631f('0x2f')]){_0x6722cb[_0x631f('0x30')][_0x631f('0x31')]({'model':db['Tag'],'as':_0x631f('0x32'),'attributes':['id'],'where':{'id':_0x59d589[_0x631f('0x20')]['tag']},'required':!![]});_0x6722cb['distinct']=!![];}if(_0x59d589['query'][_0x631f('0x33')]){_0x6722cb[_0x631f('0x30')][_0x631f('0x31')]({'model':db[_0x631f('0x34')],'as':_0x631f('0x35'),'attributes':['id',_0x631f('0x36'),_0x631f('0x37'),'read'],'where':{'direction':'in','read':_0x59d589[_0x631f('0x20')][_0x631f('0x33')]||![]},'required':!![]});_0x6722cb['distinct']=!![];}return db[_0x631f('0x1d')][_0x631f('0x11')](_0x6722cb)['then'](function(_0x18b90c){_0x11a8a5['count']=_0x18b90c;if(_0x59d589['query']['includeAll']){_0x3670e2['include']=[{'model':db[_0x631f('0x38')],'as':_0x631f('0x39'),'required':![],'attributes':['id',_0x631f('0x1a'),_0x631f('0x3a')]},{'model':db[_0x631f('0x3b')],'as':'Contact','required':![]},{'model':db[_0x631f('0x38')],'as':_0x631f('0x3c'),'attributes':[_0x631f('0x1a'),_0x631f('0x3a'),_0x631f('0x3d')],'required':![]},{'model':db[_0x631f('0x3e')],'as':_0x631f('0x3f'),'attributes':[_0x631f('0x1a'),_0x631f('0x40'),_0x631f('0x41')],'required':![]},{'model':db[_0x631f('0x34')],'as':'Messages','attributes':['id',_0x631f('0x36'),'createdAt',_0x631f('0x33')],'where':{'direction':'in','read':_0x59d589[_0x631f('0x20')][_0x631f('0x33')]||![]},'required':_0x59d589[_0x631f('0x20')][_0x631f('0x33')]||![]},{'model':db[_0x631f('0x42')],'as':_0x631f('0x32'),'attributes':['id',_0x631f('0x1a'),_0x631f('0x43')],'required':_0x59d589[_0x631f('0x20')][_0x631f('0x2f')]?!![]:![]},{'model':db[_0x631f('0x42')],'as':_0x631f('0x44'),'attributes':['id',_0x631f('0x1a'),_0x631f('0x43')],'through':_0x59d589['query'][_0x631f('0x2f')]?{'attributes':[],'where':{'TagId':_0x59d589['query'][_0x631f('0x2f')]||undefined}}:{},'required':_0x59d589[_0x631f('0x20')][_0x631f('0x2f')]?!![]:![]}];}return db['MailInteraction'][_0x631f('0x45')](_0x3670e2);})[_0x631f('0x16')](function(_0x554e52){_0x11a8a5['rows']=_0x554e52;return _0x11a8a5;})['then'](respondWithFilteredResult(_0x33831e,_0x3670e2))[_0x631f('0x46')](handleError(_0x33831e,null));};exports[_0x631f('0x47')]=function(_0x2ebace,_0x12e658){var _0x5937db={'raw':![],'where':{'id':_0x2ebace['params']['id']}},_0x33e30a={};_0x33e30a['model']=_['keys'](db['MailInteraction'][_0x631f('0x48')]);_0x33e30a[_0x631f('0x20')]=_[_0x631f('0x1f')](_0x2ebace['query']);_0x33e30a[_0x631f('0x2a')]=_[_0x631f('0x23')](_0x33e30a[_0x631f('0x1e')],_0x33e30a[_0x631f('0x20')]);_0x5937db[_0x631f('0x24')]=_[_0x631f('0x23')](_0x33e30a[_0x631f('0x1e')],qs['fields'](_0x2ebace[_0x631f('0x20')]['fields']));_0x5937db[_0x631f('0x24')]=_0x5937db[_0x631f('0x24')][_0x631f('0x26')]?_0x5937db[_0x631f('0x24')]:_0x33e30a[_0x631f('0x1e')];if(_0x2ebace[_0x631f('0x20')]['includeAll']){_0x5937db['include']=[{'all':!![]}];}_0x5937db=_[_0x631f('0x2c')]({},_0x5937db,_0x2ebace[_0x631f('0x2e')]);return db['MailInteraction'][_0x631f('0x49')](_0x5937db)[_0x631f('0x16')](handleEntityNotFound(_0x12e658,null))['then'](respondWithResult(_0x12e658,null))[_0x631f('0x46')](handleError(_0x12e658,null));};exports[_0x631f('0x4a')]=function(_0x487348,_0x5806de){return db['MailInteraction']['create'](_0x487348[_0x631f('0x4b')],{})['then'](respondWithResult(_0x5806de,0xc9))[_0x631f('0x46')](handleError(_0x5806de,null));};exports[_0x631f('0x15')]=function(_0x273d51,_0x12d0fe){if(_0x273d51['body']['id']){delete _0x273d51[_0x631f('0x4b')]['id'];}return db['MailInteraction']['find']({'where':{'id':_0x273d51[_0x631f('0x4c')]['id']}})['then'](handleEntityNotFound(_0x12d0fe,null))[_0x631f('0x16')](saveUpdates(_0x273d51[_0x631f('0x4b')],null))[_0x631f('0x16')](respondWithResult(_0x12d0fe,null))[_0x631f('0x46')](handleError(_0x12d0fe,null));};exports[_0x631f('0x17')]=function(_0x736ef7,_0x3b04c7){return db[_0x631f('0x1d')]['find']({'where':{'id':_0x736ef7[_0x631f('0x4c')]['id']}})[_0x631f('0x16')](handleEntityNotFound(_0x3b04c7,null))[_0x631f('0x16')](removeEntity(_0x3b04c7,null))[_0x631f('0x46')](handleError(_0x3b04c7,null));};exports['describe']=function(_0x4148c4,_0x305e1d){return db[_0x631f('0x1d')][_0x631f('0x4d')]()[_0x631f('0x16')](respondWithResult(_0x305e1d,null))['catch'](handleError(_0x305e1d,null));};exports[_0x631f('0x4e')]=function(_0x5f083f,_0x18c39e,_0x279159){return db[_0x631f('0x34')]['find']({'where':{'id':_0x5f083f[_0x631f('0x4c')]['id']}})[_0x631f('0x16')](handleEntityNotFound(_0x18c39e,null))['then'](function(_0x1c59a2){if(_0x1c59a2){return _0x1c59a2[_0x631f('0x4e')](_0x5f083f[_0x631f('0x4b')]['ids'],_[_0x631f('0x4f')](_0x5f083f[_0x631f('0x4b')],[_0x631f('0x50'),'id'])||{});}})[_0x631f('0x16')](respondWithResult(_0x18c39e,null))[_0x631f('0x46')](handleError(_0x18c39e,null));};exports[_0x631f('0x51')]=function(_0xdc7969,_0x5af2bb,_0x3f6d2d){var _0x329eda={'raw':![],'where':{}};var _0x1f8bd6={};var _0x109ddd={'count':0x0,'rows':[]};return db[_0x631f('0x1d')][_0x631f('0x52')]({'where':{'id':_0xdc7969[_0x631f('0x4c')]['id']}})[_0x631f('0x16')](handleEntityNotFound(_0x5af2bb,null))[_0x631f('0x16')](function(_0x2380a0){if(_0x2380a0){_0x1f8bd6[_0x631f('0x1e')]=_['keys'](db[_0x631f('0x34')][_0x631f('0x48')]);_0x1f8bd6[_0x631f('0x20')]=_[_0x631f('0x1f')](_0xdc7969['query']);_0x1f8bd6[_0x631f('0x2a')]=_[_0x631f('0x23')](_0x1f8bd6['model'],_0x1f8bd6[_0x631f('0x20')]);_0x329eda[_0x631f('0x24')]=_[_0x631f('0x23')](_0x1f8bd6['model'],qs['fields'](_0xdc7969[_0x631f('0x20')][_0x631f('0x25')]));_0x329eda[_0x631f('0x24')]=_0x329eda['attributes']['length']?_0x329eda[_0x631f('0x24')]:_0x1f8bd6[_0x631f('0x1e')];if(!_0xdc7969['query'][_0x631f('0x53')]('nolimit')){_0x329eda[_0x631f('0x13')]=qs[_0x631f('0x13')](_0xdc7969[_0x631f('0x20')]['limit']);_0x329eda[_0x631f('0x12')]=qs[_0x631f('0x12')](_0xdc7969[_0x631f('0x20')][_0x631f('0x12')]);}_0x329eda[_0x631f('0x54')]=qs[_0x631f('0x28')](_0xdc7969[_0x631f('0x20')]['sort']);_0x329eda[_0x631f('0x55')]=qs[_0x631f('0x2a')](_[_0x631f('0x29')](_0xdc7969[_0x631f('0x20')],_0x1f8bd6[_0x631f('0x2a')]));_0x329eda['where'][_0x631f('0x56')]=_0x2380a0['id'];if(_0xdc7969[_0x631f('0x20')]['filter']){_0x329eda[_0x631f('0x55')]=_[_0x631f('0x2c')](_0x329eda[_0x631f('0x55')],{'$or':_[_0x631f('0x57')](_0x329eda[_0x631f('0x24')],function(_0x5c2d5e){var _0x164a84={};_0x164a84[_0x5c2d5e]={'$like':'%'+_0xdc7969[_0x631f('0x20')][_0x631f('0x2d')]+'%'};return _0x164a84;})});}if(_0xdc7969[_0x631f('0x20')][_0x631f('0x58')]){var _0x44b79d=_0xdc7969[_0x631f('0x20')]['$gte']['split'](',');var _0x2b5a41={};_0x2b5a41[_0x44b79d[0x0]]={'$gte':moment(_0x44b79d[0x1])['format'](_0x631f('0x59'))};_0x329eda[_0x631f('0x55')]=_[_0x631f('0x2c')](_0x329eda[_0x631f('0x55')],_0x2b5a41);}_0x329eda=_[_0x631f('0x2c')]({},_0x329eda,_0xdc7969['options']);return db['MailMessage']['count']({'where':_0x329eda[_0x631f('0x55')]})[_0x631f('0x16')](function(_0x4a0456){_0x109ddd['count']=_0x4a0456;if(_0xdc7969['query']['includeAll']){_0x329eda[_0x631f('0x30')]=[{'all':!![]}];}return db[_0x631f('0x34')][_0x631f('0x45')](_0x329eda);})[_0x631f('0x16')](function(_0x56c120){_0x109ddd[_0x631f('0x5a')]=_0x56c120;return _0x109ddd;});}})[_0x631f('0x16')](respondWithFilteredResult(_0x5af2bb,_0x329eda))['catch'](handleError(_0x5af2bb,null));};exports[_0x631f('0x5b')]=function(_0xd5ac9a,_0x2087e3,_0x12b8b0){return db[_0x631f('0x1d')][_0x631f('0x49')]({'where':{'id':_0xd5ac9a[_0x631f('0x4c')]['id']}})[_0x631f('0x16')](handleEntityNotFound(_0x2087e3,null))[_0x631f('0x16')](function(_0x430898){if(_0x430898){return _0x430898[_0x631f('0x5c')](_0xd5ac9a[_0x631f('0x4b')][_0x631f('0x50')],_[_0x631f('0x4f')](_0xd5ac9a['body'],['ids','id'])||{})[_0x631f('0x5d')](function(){return db[_0x631f('0x42')][_0x631f('0x45')]({'attributes':['id',_0x631f('0x1a'),_0x631f('0x43')],'where':{'id':_0xd5ac9a[_0x631f('0x4b')][_0x631f('0x50')]}});})['then'](function(_0x6a204c){socket[_0x631f('0x5e')](_0x631f('0x5f'),{'id':Number(_0xd5ac9a[_0x631f('0x4c')]['id']),'tags':_0x6a204c||[]});return{'id':Number(_0xd5ac9a[_0x631f('0x4c')]['id']),'tags':_0x6a204c||[]};});}})[_0x631f('0x16')](respondWithResult(_0x2087e3,null))[_0x631f('0x46')](handleError(_0x2087e3,null));};exports[_0x631f('0x60')]=function(_0x19169c,_0x46c86b,_0x200f21){var _0xbc6555;return db['MailInteraction']['find']({'where':{'id':_0x19169c[_0x631f('0x4c')]['id']}})[_0x631f('0x16')](handleEntityNotFound(_0x46c86b,null))[_0x631f('0x16')](function(_0x94567f){if(_0x94567f){return _0x94567f['removeTags'](_0x19169c[_0x631f('0x20')][_0x631f('0x50')]);}})[_0x631f('0x16')](respondWithStatusCode(_0x46c86b,null))[_0x631f('0x46')](handleError(_0x46c86b,null));};
\ No newline at end of file
+var _0x2ccc=['body','destroy','describe','addMessage','ids','omit','getMessages','rawAttributes','keys','MailInteractionId','filter','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','rows','addTags','emit','mailInteractionTags:save','request-promise','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','../../components/parsers/qs','../../config/logger','api','../../config/environment','socket.io-emitter','localhost','register','sendStatus','status','end','json','count','offset','limit','set','apply','save','update','then','error','stack','name','index','MailInteraction','model','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','map','options','include','push','Tag','tag','read','MailMessage','Messages','direction','createdAt','includeAll','User','fullname','CmContact','Owner','internal','MailAccount','key','Tags','color','ThroughTags','findAll','catch','show','params','find','create'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0x2ccc,0x142));var _0xc2cc=function(_0x29d295,_0x130a9a){_0x29d295=_0x29d295-0x0;var _0x125c88=_0x2ccc[_0x29d295];return _0x125c88;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xc2cc('0x0'));var moment=require('moment');var BPromise=require(_0xc2cc('0x1'));var Mustache=require(_0xc2cc('0x2'));var util=require(_0xc2cc('0x3'));var path=require(_0xc2cc('0x4'));var sox=require('sox');var csv=require(_0xc2cc('0x5'));var ejs=require(_0xc2cc('0x6'));var fs=require('fs');var _=require(_0xc2cc('0x7'));var squel=require(_0xc2cc('0x8'));var crypto=require(_0xc2cc('0x9'));var jsforce=require(_0xc2cc('0xa'));var deskjs=require('desk.js');var toCsv=require(_0xc2cc('0x5'));var querystring=require(_0xc2cc('0xb'));var Papa=require('papaparse');var qs=require(_0xc2cc('0xc'));var logger=require(_0xc2cc('0xd'))(_0xc2cc('0xe'));var utils=require('../../config/utils');var config=require(_0xc2cc('0xf'));var db=require('../../mysqldb')['db'];var socket=require(_0xc2cc('0x10'))({'host':_0xc2cc('0x11'),'port':0x18eb});require('./mailInteraction.socket')[_0xc2cc('0x12')](socket);function respondWithStatusCode(_0x449c07,_0x1becb0){_0x1becb0=_0x1becb0||0xcc;return function(_0x329865){if(_0x329865){return _0x449c07[_0xc2cc('0x13')](_0x1becb0);}return _0x449c07[_0xc2cc('0x14')](_0x1becb0)[_0xc2cc('0x15')]();};}function respondWithResult(_0x2618a3,_0x26e845){_0x26e845=_0x26e845||0xc8;return function(_0x130661){if(_0x130661){return _0x2618a3[_0xc2cc('0x14')](_0x26e845)[_0xc2cc('0x16')](_0x130661);}};}function respondWithFilteredResult(_0x208ee9,_0x5143f3){return function(_0x4b6efc){if(_0x4b6efc){var _0x4309a0=_0x4b6efc[_0xc2cc('0x17')],_0x1959f0=_0x5143f3[_0xc2cc('0x18')],_0x523968=_0x5143f3['offset']+_0x5143f3[_0xc2cc('0x19')],_0x281bb0;if(_0x523968>=_0x4309a0){_0x523968=_0x4309a0;_0x281bb0=0xc8;}else{_0x281bb0=0xce;}_0x208ee9['status'](_0x281bb0);return _0x208ee9[_0xc2cc('0x1a')]('Content-Range',_0x1959f0+'-'+_0x523968+'/'+_0x4309a0)[_0xc2cc('0x16')](_0x4b6efc);}return null;};}function patchUpdates(_0x54ebed){return function(_0x16264a){try{jsonpatch[_0xc2cc('0x1b')](_0x16264a,_0x54ebed,!![]);}catch(_0x34e6d0){return BPromise['reject'](_0x34e6d0);}return _0x16264a[_0xc2cc('0x1c')]();};}function saveUpdates(_0x3a6cea,_0x369d3a){return function(_0x8fd29d){if(_0x8fd29d){return _0x8fd29d[_0xc2cc('0x1d')](_0x3a6cea)['then'](function(_0x2a9d7a){return _0x2a9d7a;});}return null;};}function removeEntity(_0x18100c,_0x504df6){return function(_0x4ccceb){if(_0x4ccceb){return _0x4ccceb['destroy']()[_0xc2cc('0x1e')](function(){_0x18100c['status'](0xcc)[_0xc2cc('0x15')]();});}};}function handleEntityNotFound(_0x98a0eb,_0x29a139){return function(_0x2399aa){if(!_0x2399aa){_0x98a0eb['sendStatus'](0x194);}return _0x2399aa;};}function handleError(_0x3a7139,_0x375a2a){_0x375a2a=_0x375a2a||0x1f4;return function(_0x46a152){logger[_0xc2cc('0x1f')](_0x46a152[_0xc2cc('0x20')]);if(_0x46a152[_0xc2cc('0x21')]){delete _0x46a152[_0xc2cc('0x21')];}_0x3a7139[_0xc2cc('0x14')](_0x375a2a)['send'](_0x46a152);};}exports[_0xc2cc('0x22')]=function(_0x49295f,_0x55f50a){var _0x1dc47a={},_0x25c0e3={},_0x4d2cbe={'count':0x0,'rows':[]};var _0x459e11=db[_0xc2cc('0x23')]['rawAttributes'];_0x25c0e3[_0xc2cc('0x24')]=_['keys'](_0x459e11);var _0x3eab84={'dateStart':_0x49295f[_0xc2cc('0x25')][_0xc2cc('0x26')],'dateEnd':_0x49295f['query'][_0xc2cc('0x27')]};delete _0x49295f[_0xc2cc('0x25')][_0xc2cc('0x26')];delete _0x49295f[_0xc2cc('0x25')][_0xc2cc('0x27')];_0x25c0e3[_0xc2cc('0x25')]=_['keys'](_0x49295f[_0xc2cc('0x25')]);_0x25c0e3[_0xc2cc('0x28')]=_[_0xc2cc('0x29')](_0x25c0e3[_0xc2cc('0x24')],_0x25c0e3['query']);_0x1dc47a[_0xc2cc('0x2a')]=_['intersection'](_0x25c0e3[_0xc2cc('0x24')],qs[_0xc2cc('0x2b')](_0x49295f[_0xc2cc('0x25')][_0xc2cc('0x2b')]));_0x1dc47a[_0xc2cc('0x2a')]=_0x1dc47a['attributes'][_0xc2cc('0x2c')]?_0x1dc47a[_0xc2cc('0x2a')]:_0x25c0e3[_0xc2cc('0x24')];if(!_0x49295f['query'][_0xc2cc('0x2d')](_0xc2cc('0x2e'))){_0x1dc47a[_0xc2cc('0x19')]=qs[_0xc2cc('0x19')](_0x49295f['query'][_0xc2cc('0x19')]);_0x1dc47a['offset']=qs[_0xc2cc('0x18')](_0x49295f['query']['offset']);}_0x1dc47a[_0xc2cc('0x2f')]=qs[_0xc2cc('0x30')](_0x49295f[_0xc2cc('0x25')][_0xc2cc('0x30')]);_0x1dc47a[_0xc2cc('0x31')]=qs[_0xc2cc('0x28')](_[_0xc2cc('0x32')](_0x49295f['query'],_0x25c0e3[_0xc2cc('0x28')]));if(_0x3eab84[_0xc2cc('0x26')]){if(_0x3eab84[_0xc2cc('0x27')]){_0x3eab84['dateEnd']=moment(_0x3eab84['dateEnd'])['add'](0x1,'day');}else{_0x3eab84[_0xc2cc('0x27')]=moment(_0x3eab84[_0xc2cc('0x26')])[_0xc2cc('0x33')](0x1,_0xc2cc('0x34'));}_[_0xc2cc('0x35')](_0x1dc47a[_0xc2cc('0x31')],{'createdAt':{'$gte':_0x3eab84[_0xc2cc('0x26')],'$lte':_0x3eab84[_0xc2cc('0x27')]}});}if(_0x49295f[_0xc2cc('0x25')]['filter']){_0x1dc47a[_0xc2cc('0x31')]=_[_0xc2cc('0x35')](_0x1dc47a[_0xc2cc('0x31')],{'$or':_[_0xc2cc('0x36')](_0x1dc47a['attributes'],function(_0x18e349){var _0x127274={};_0x127274[_0x18e349]={'$like':'%'+_0x49295f[_0xc2cc('0x25')]['filter']+'%'};return _0x127274;})});}_0x1dc47a=_[_0xc2cc('0x35')]({},_0x1dc47a,_0x49295f[_0xc2cc('0x37')]);var _0x3936dd={'where':_0x1dc47a[_0xc2cc('0x31')]};_0x3936dd[_0xc2cc('0x38')]=[];if(_0x49295f[_0xc2cc('0x25')]['tag']){_0x3936dd[_0xc2cc('0x38')][_0xc2cc('0x39')]({'model':db[_0xc2cc('0x3a')],'as':'Tags','attributes':['id'],'where':{'id':_0x49295f[_0xc2cc('0x25')][_0xc2cc('0x3b')]},'required':!![]});_0x3936dd['distinct']=!![];}if(_0x49295f[_0xc2cc('0x25')][_0xc2cc('0x3c')]){_0x3936dd['include'][_0xc2cc('0x39')]({'model':db[_0xc2cc('0x3d')],'as':_0xc2cc('0x3e'),'attributes':['id',_0xc2cc('0x3f'),_0xc2cc('0x40'),_0xc2cc('0x3c')],'where':{'direction':'in','read':_0x49295f[_0xc2cc('0x25')][_0xc2cc('0x3c')]||![]},'required':!![]});_0x3936dd['distinct']=!![];}return db['MailInteraction'][_0xc2cc('0x17')](_0x3936dd)[_0xc2cc('0x1e')](function(_0x2c0d2d){_0x4d2cbe[_0xc2cc('0x17')]=_0x2c0d2d;if(_0x49295f[_0xc2cc('0x25')][_0xc2cc('0x41')]){_0x1dc47a[_0xc2cc('0x38')]=[{'model':db[_0xc2cc('0x42')],'as':'Users','required':![],'attributes':['id',_0xc2cc('0x21'),_0xc2cc('0x43')]},{'model':db[_0xc2cc('0x44')],'as':'Contact','required':![]},{'model':db[_0xc2cc('0x42')],'as':_0xc2cc('0x45'),'attributes':[_0xc2cc('0x21'),'fullname',_0xc2cc('0x46')],'required':![]},{'model':db[_0xc2cc('0x47')],'as':'Account','attributes':[_0xc2cc('0x21'),_0xc2cc('0x48'),'email'],'required':![]},{'model':db[_0xc2cc('0x3d')],'as':_0xc2cc('0x3e'),'attributes':['id',_0xc2cc('0x3f'),_0xc2cc('0x40'),_0xc2cc('0x3c')],'where':{'direction':'in','read':_0x49295f['query']['read']||![]},'required':_0x49295f[_0xc2cc('0x25')][_0xc2cc('0x3c')]||![]},{'model':db[_0xc2cc('0x3a')],'as':_0xc2cc('0x49'),'attributes':['id','name',_0xc2cc('0x4a')],'required':_0x49295f[_0xc2cc('0x25')]['tag']?!![]:![]},{'model':db[_0xc2cc('0x3a')],'as':_0xc2cc('0x4b'),'attributes':['id',_0xc2cc('0x21'),_0xc2cc('0x4a')],'through':_0x49295f['query'][_0xc2cc('0x3b')]?{'attributes':[],'where':{'TagId':_0x49295f[_0xc2cc('0x25')][_0xc2cc('0x3b')]||undefined}}:{},'required':_0x49295f[_0xc2cc('0x25')][_0xc2cc('0x3b')]?!![]:![]}];}return db[_0xc2cc('0x23')][_0xc2cc('0x4c')](_0x1dc47a);})[_0xc2cc('0x1e')](function(_0x3da7d5){_0x4d2cbe['rows']=_0x3da7d5;return _0x4d2cbe;})[_0xc2cc('0x1e')](respondWithFilteredResult(_0x55f50a,_0x1dc47a))[_0xc2cc('0x4d')](handleError(_0x55f50a,null));};exports[_0xc2cc('0x4e')]=function(_0xd05736,_0x334dc3){var _0x320f87={'raw':![],'where':{'id':_0xd05736[_0xc2cc('0x4f')]['id']}},_0x1d3962={};_0x1d3962[_0xc2cc('0x24')]=_['keys'](db[_0xc2cc('0x23')]['rawAttributes']);_0x1d3962['query']=_['keys'](_0xd05736[_0xc2cc('0x25')]);_0x1d3962[_0xc2cc('0x28')]=_[_0xc2cc('0x29')](_0x1d3962[_0xc2cc('0x24')],_0x1d3962['query']);_0x320f87[_0xc2cc('0x2a')]=_[_0xc2cc('0x29')](_0x1d3962[_0xc2cc('0x24')],qs[_0xc2cc('0x2b')](_0xd05736[_0xc2cc('0x25')][_0xc2cc('0x2b')]));_0x320f87[_0xc2cc('0x2a')]=_0x320f87[_0xc2cc('0x2a')][_0xc2cc('0x2c')]?_0x320f87[_0xc2cc('0x2a')]:_0x1d3962[_0xc2cc('0x24')];if(_0xd05736['query']['includeAll']){_0x320f87[_0xc2cc('0x38')]=[{'all':!![]}];}_0x320f87=_[_0xc2cc('0x35')]({},_0x320f87,_0xd05736[_0xc2cc('0x37')]);return db[_0xc2cc('0x23')][_0xc2cc('0x50')](_0x320f87)['then'](handleEntityNotFound(_0x334dc3,null))[_0xc2cc('0x1e')](respondWithResult(_0x334dc3,null))[_0xc2cc('0x4d')](handleError(_0x334dc3,null));};exports[_0xc2cc('0x51')]=function(_0x39c6aa,_0x5177ce){return db[_0xc2cc('0x23')]['create'](_0x39c6aa[_0xc2cc('0x52')],{})[_0xc2cc('0x1e')](respondWithResult(_0x5177ce,0xc9))[_0xc2cc('0x4d')](handleError(_0x5177ce,null));};exports[_0xc2cc('0x1d')]=function(_0x229a48,_0x3b077b){if(_0x229a48[_0xc2cc('0x52')]['id']){delete _0x229a48[_0xc2cc('0x52')]['id'];}return db['MailInteraction'][_0xc2cc('0x50')]({'where':{'id':_0x229a48[_0xc2cc('0x4f')]['id']}})[_0xc2cc('0x1e')](handleEntityNotFound(_0x3b077b,null))[_0xc2cc('0x1e')](saveUpdates(_0x229a48[_0xc2cc('0x52')],null))[_0xc2cc('0x1e')](respondWithResult(_0x3b077b,null))[_0xc2cc('0x4d')](handleError(_0x3b077b,null));};exports[_0xc2cc('0x53')]=function(_0x2b4765,_0x126602){return db[_0xc2cc('0x23')][_0xc2cc('0x50')]({'where':{'id':_0x2b4765['params']['id']}})[_0xc2cc('0x1e')](handleEntityNotFound(_0x126602,null))[_0xc2cc('0x1e')](removeEntity(_0x126602,null))[_0xc2cc('0x4d')](handleError(_0x126602,null));};exports[_0xc2cc('0x54')]=function(_0x4cf8ae,_0x152ea0){return db[_0xc2cc('0x23')][_0xc2cc('0x54')]()[_0xc2cc('0x1e')](respondWithResult(_0x152ea0,null))[_0xc2cc('0x4d')](handleError(_0x152ea0,null));};exports[_0xc2cc('0x55')]=function(_0x49cf9a,_0x40dcab,_0x5cccce){return db[_0xc2cc('0x3d')][_0xc2cc('0x50')]({'where':{'id':_0x49cf9a[_0xc2cc('0x4f')]['id']}})[_0xc2cc('0x1e')](handleEntityNotFound(_0x40dcab,null))[_0xc2cc('0x1e')](function(_0x353a50){if(_0x353a50){return _0x353a50[_0xc2cc('0x55')](_0x49cf9a['body'][_0xc2cc('0x56')],_[_0xc2cc('0x57')](_0x49cf9a[_0xc2cc('0x52')],['ids','id'])||{});}})['then'](respondWithResult(_0x40dcab,null))[_0xc2cc('0x4d')](handleError(_0x40dcab,null));};exports[_0xc2cc('0x58')]=function(_0x1e3965,_0x5d412b,_0x2e3369){var _0x272014={'raw':![],'where':{}};var _0x166c83={};var _0x1a9866={'count':0x0,'rows':[]};return db[_0xc2cc('0x23')]['findOne']({'where':{'id':_0x1e3965[_0xc2cc('0x4f')]['id']}})[_0xc2cc('0x1e')](handleEntityNotFound(_0x5d412b,null))[_0xc2cc('0x1e')](function(_0x37db6a){if(_0x37db6a){_0x166c83['model']=_['keys'](db['MailMessage'][_0xc2cc('0x59')]);_0x166c83[_0xc2cc('0x25')]=_[_0xc2cc('0x5a')](_0x1e3965[_0xc2cc('0x25')]);_0x166c83[_0xc2cc('0x28')]=_[_0xc2cc('0x29')](_0x166c83[_0xc2cc('0x24')],_0x166c83[_0xc2cc('0x25')]);_0x272014[_0xc2cc('0x2a')]=_['intersection'](_0x166c83[_0xc2cc('0x24')],qs[_0xc2cc('0x2b')](_0x1e3965[_0xc2cc('0x25')]['fields']));_0x272014[_0xc2cc('0x2a')]=_0x272014[_0xc2cc('0x2a')][_0xc2cc('0x2c')]?_0x272014[_0xc2cc('0x2a')]:_0x166c83[_0xc2cc('0x24')];if(!_0x1e3965[_0xc2cc('0x25')]['hasOwnProperty'](_0xc2cc('0x2e'))){_0x272014['limit']=qs[_0xc2cc('0x19')](_0x1e3965[_0xc2cc('0x25')][_0xc2cc('0x19')]);_0x272014['offset']=qs[_0xc2cc('0x18')](_0x1e3965[_0xc2cc('0x25')]['offset']);}_0x272014[_0xc2cc('0x2f')]=qs[_0xc2cc('0x30')](_0x1e3965[_0xc2cc('0x25')]['sort']);_0x272014[_0xc2cc('0x31')]=qs[_0xc2cc('0x28')](_[_0xc2cc('0x32')](_0x1e3965[_0xc2cc('0x25')],_0x166c83[_0xc2cc('0x28')]));_0x272014[_0xc2cc('0x31')][_0xc2cc('0x5b')]=_0x37db6a['id'];if(_0x1e3965[_0xc2cc('0x25')][_0xc2cc('0x5c')]){_0x272014[_0xc2cc('0x31')]=_[_0xc2cc('0x35')](_0x272014['where'],{'$or':_[_0xc2cc('0x36')](_0x272014[_0xc2cc('0x2a')],function(_0x21c550){var _0x4946c0={};_0x4946c0[_0x21c550]={'$like':'%'+_0x1e3965['query'][_0xc2cc('0x5c')]+'%'};return _0x4946c0;})});}if(_0x1e3965[_0xc2cc('0x25')][_0xc2cc('0x5d')]){var _0x58a36a=_0x1e3965[_0xc2cc('0x25')][_0xc2cc('0x5d')][_0xc2cc('0x5e')](',');var _0x5a295c={};_0x5a295c[_0x58a36a[0x0]]={'$gte':moment(_0x58a36a[0x1])[_0xc2cc('0x5f')](_0xc2cc('0x60'))};_0x272014[_0xc2cc('0x31')]=_[_0xc2cc('0x35')](_0x272014[_0xc2cc('0x31')],_0x5a295c);}_0x272014=_[_0xc2cc('0x35')]({},_0x272014,_0x1e3965['options']);return db[_0xc2cc('0x3d')][_0xc2cc('0x17')]({'where':_0x272014[_0xc2cc('0x31')]})['then'](function(_0x2d6194){_0x1a9866[_0xc2cc('0x17')]=_0x2d6194;if(_0x1e3965[_0xc2cc('0x25')][_0xc2cc('0x41')]){_0x272014['include']=[{'all':!![]}];}return db[_0xc2cc('0x3d')]['findAll'](_0x272014);})['then'](function(_0xd2deab){_0x1a9866[_0xc2cc('0x61')]=_0xd2deab;return _0x1a9866;});}})[_0xc2cc('0x1e')](respondWithFilteredResult(_0x5d412b,_0x272014))[_0xc2cc('0x4d')](handleError(_0x5d412b,null));};exports[_0xc2cc('0x62')]=function(_0x368ded,_0x1fb803,_0x1aa3fe){return db[_0xc2cc('0x23')][_0xc2cc('0x50')]({'where':{'id':_0x368ded['params']['id']}})['then'](handleEntityNotFound(_0x1fb803,null))[_0xc2cc('0x1e')](function(_0x5a6d6c){if(_0x5a6d6c){return _0x5a6d6c['setTags'](_0x368ded[_0xc2cc('0x52')][_0xc2cc('0x56')],_[_0xc2cc('0x57')](_0x368ded[_0xc2cc('0x52')],[_0xc2cc('0x56'),'id'])||{})['spread'](function(){return db[_0xc2cc('0x3a')][_0xc2cc('0x4c')]({'attributes':['id',_0xc2cc('0x21'),'color'],'where':{'id':_0x368ded[_0xc2cc('0x52')]['ids']}});})[_0xc2cc('0x1e')](function(_0x4e21b1){socket[_0xc2cc('0x63')](_0xc2cc('0x64'),{'id':Number(_0x368ded[_0xc2cc('0x4f')]['id']),'tags':_0x4e21b1||[]});return{'id':Number(_0x368ded['params']['id']),'tags':_0x4e21b1||[]};});}})[_0xc2cc('0x1e')](respondWithResult(_0x1fb803,null))['catch'](handleError(_0x1fb803,null));};exports['removeTags']=function(_0x9c917,_0x2f1f62,_0x20e82f){var _0x171334;return db[_0xc2cc('0x23')][_0xc2cc('0x50')]({'where':{'id':_0x9c917[_0xc2cc('0x4f')]['id']}})[_0xc2cc('0x1e')](handleEntityNotFound(_0x2f1f62,null))[_0xc2cc('0x1e')](function(_0x1db3a){if(_0x1db3a){return _0x1db3a['removeTags'](_0x9c917[_0xc2cc('0x25')][_0xc2cc('0x56')]);}})[_0xc2cc('0x1e')](respondWithStatusCode(_0x2f1f62,null))[_0xc2cc('0x4d')](handleError(_0x2f1f62,null));};
\ No newline at end of file
index 5d02f37..6b653d5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x032c=['events','../../mysqldb','MailInteraction','setMaxListeners','save','remove','hasOwnProperty','exports'];(function(_0x1c7f2a,_0x567537){var _0x5724c1=function(_0x890163){while(--_0x890163){_0x1c7f2a['push'](_0x1c7f2a['shift']());}};_0x5724c1(++_0x567537);}(_0x032c,0x140));var _0xc032=function(_0x52a165,_0x18639f){_0x52a165=_0x52a165-0x0;var _0x583fbf=_0x032c[_0x52a165];return _0x583fbf;};'use strict';var EventEmitter=require(_0xc032('0x0'));var MailInteraction=require(_0xc032('0x1'))['db'][_0xc032('0x2')];var MailInteractionEvents=new EventEmitter();MailInteractionEvents[_0xc032('0x3')](0x0);var events={'afterCreate':_0xc032('0x4'),'afterUpdate':'update','afterDestroy':_0xc032('0x5')};function emitEvent(_0x50154a){return function(_0x5c1f31,_0x56a59f,_0x4534ad){MailInteractionEvents['emit'](_0x50154a+':'+_0x5c1f31['id'],_0x5c1f31);MailInteractionEvents['emit'](_0x50154a,_0x5c1f31);_0x4534ad(null);};}for(var e in events){if(events[_0xc032('0x6')](e)){var event=events[e];MailInteraction['hook'](e,emitEvent(event));}}module[_0xc032('0x7')]=MailInteractionEvents;
\ No newline at end of file
+var _0xbaee=['save','update','remove','emit','hasOwnProperty','hook','events','MailInteraction','setMaxListeners'];(function(_0x15be89,_0x30604e){var _0x47536d=function(_0x5e91db){while(--_0x5e91db){_0x15be89['push'](_0x15be89['shift']());}};_0x47536d(++_0x30604e);}(_0xbaee,0x9f));var _0xebae=function(_0xa3ba06,_0x392d72){_0xa3ba06=_0xa3ba06-0x0;var _0x11b63d=_0xbaee[_0xa3ba06];return _0x11b63d;};'use strict';var EventEmitter=require(_0xebae('0x0'));var MailInteraction=require('../../mysqldb')['db'][_0xebae('0x1')];var MailInteractionEvents=new EventEmitter();MailInteractionEvents[_0xebae('0x2')](0x0);var events={'afterCreate':_0xebae('0x3'),'afterUpdate':_0xebae('0x4'),'afterDestroy':_0xebae('0x5')};function emitEvent(_0x11d9d3){return function(_0x47ce38,_0x2371c3,_0x59d3f2){MailInteractionEvents[_0xebae('0x6')](_0x11d9d3+':'+_0x47ce38['id'],_0x47ce38);MailInteractionEvents[_0xebae('0x6')](_0x11d9d3,_0x47ce38);_0x59d3f2(null);};}for(var e in events){if(events[_0xebae('0x7')](e)){var event=events[e];MailInteraction[_0xebae('0x8')](e,emitEvent(event));}}module['exports']=MailInteractionEvents;
\ No newline at end of file
index ad63394..af8ceda 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9efe=['MailInteraction','mail_interactions','util','../../config/logger','api','moment','bluebird','./mailInteraction.attributes','exports','define'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x9efe,0xca));var _0xe9ef=function(_0x188926,_0x1b2429){_0x188926=_0x188926-0x0;var _0x17f4bf=_0x9efe[_0x188926];return _0x17f4bf;};'use strict';var _=require('lodash');var util=require(_0xe9ef('0x0'));var logger=require(_0xe9ef('0x1'))(_0xe9ef('0x2'));var moment=require(_0xe9ef('0x3'));var BPromise=require(_0xe9ef('0x4'));var rp=require('request-promise');var attributes=require(_0xe9ef('0x5'));module[_0xe9ef('0x6')]=function(_0x3deea3,_0x39ef1a){return _0x3deea3[_0xe9ef('0x7')](_0xe9ef('0x8'),attributes,{'tableName':_0xe9ef('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8b51=['util','../../config/logger','api','moment','bluebird','request-promise','exports','MailInteraction','mail_interactions','lodash'];(function(_0x339fec,_0x25ff4a){var _0x1f6140=function(_0x3be8f2){while(--_0x3be8f2){_0x339fec['push'](_0x339fec['shift']());}};_0x1f6140(++_0x25ff4a);}(_0x8b51,0xef));var _0x18b5=function(_0x5ef35c,_0x26ea6d){_0x5ef35c=_0x5ef35c-0x0;var _0x4244c6=_0x8b51[_0x5ef35c];return _0x4244c6;};'use strict';var _=require(_0x18b5('0x0'));var util=require(_0x18b5('0x1'));var logger=require(_0x18b5('0x2'))(_0x18b5('0x3'));var moment=require(_0x18b5('0x4'));var BPromise=require(_0x18b5('0x5'));var rp=require(_0x18b5('0x6'));var attributes=require('./mailInteraction.attributes');module[_0x18b5('0x7')]=function(_0x23d0f4,_0x42dc59){return _0x23d0f4['define'](_0x18b5('0x8'),attributes,{'tableName':_0x18b5('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 8e6c220..e88fd61 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2810=['util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','http','socket.io-emitter','localhost','register','request','then','info','MailInteraction,\x20%s,\x20%s','request\x20sent','debug','MailInteraction,\x20%s,\x20%s,\x20%s','error','code','message','result','MailInteraction','update','body','options','raw','where','limit','UpdateMailInteraction','stringify','catch','AddTagsToMailInteraction','addTags','ids','omit','spread','AddTags','lodash'];(function(_0x2dea24,_0x2fc021){var _0x309d58=function(_0x2eb89f){while(--_0x2eb89f){_0x2dea24['push'](_0x2dea24['shift']());}};_0x309d58(++_0x2fc021);}(_0x2810,0x9b));var _0x0281=function(_0xa94bf,_0x528174){_0xa94bf=_0xa94bf-0x0;var _0x5231ed=_0x2810[_0xa94bf];return _0x5231ed;};'use strict';var _=require(_0x0281('0x0'));var util=require(_0x0281('0x1'));var moment=require(_0x0281('0x2'));var BPromise=require(_0x0281('0x3'));var rs=require(_0x0281('0x4'));var fs=require('fs');var db=require(_0x0281('0x5'))['db'];var utils=require(_0x0281('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0x0281('0x7'));var jayson=require('jayson/promise');var client=jayson['client'][_0x0281('0x8')]({'port':0x232a});var socket=require(_0x0281('0x9'))({'host':_0x0281('0xa'),'port':0x18eb});require('./mailInteraction.socket')[_0x0281('0xb')](socket);function respondWithRpcPromise(_0x523184,_0x303e85,_0x30022e){return new BPromise(function(_0x4c352c,_0x1925dc){return client[_0x0281('0xc')](_0x523184,_0x30022e)[_0x0281('0xd')](function(_0x4a319b){logger[_0x0281('0xe')](_0x0281('0xf'),_0x303e85,_0x0281('0x10'));logger[_0x0281('0x11')](_0x0281('0x12'),_0x303e85,_0x0281('0x10'),JSON['stringify'](_0x4a319b));if(_0x4a319b[_0x0281('0x13')]){if(_0x4a319b['error'][_0x0281('0x14')]===0x1f4){logger['error'](_0x0281('0xf'),_0x303e85,_0x4a319b[_0x0281('0x13')][_0x0281('0x15')]);return _0x1925dc(_0x4a319b[_0x0281('0x13')]['message']);}logger[_0x0281('0x13')](_0x0281('0xf'),_0x303e85,_0x4a319b['error']['message']);return _0x4c352c(_0x4a319b[_0x0281('0x13')]['message']);}else{logger[_0x0281('0xe')](_0x0281('0xf'),_0x303e85,_0x0281('0x10'));_0x4c352c(_0x4a319b[_0x0281('0x16')][_0x0281('0x15')]);}})['catch'](function(_0xcf9ad1){logger[_0x0281('0x13')](_0x0281('0xf'),_0x303e85,_0xcf9ad1);_0x1925dc(_0xcf9ad1);});});}exports['UpdateMailInteraction']=function(_0x5d6429){var _0x2d5830=this;return new Promise(function(_0x444438,_0x11ea2c){return db[_0x0281('0x17')][_0x0281('0x18')](_0x5d6429[_0x0281('0x19')],{'raw':_0x5d6429[_0x0281('0x1a')]?_0x5d6429[_0x0281('0x1a')][_0x0281('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5d6429['options']?_0x5d6429[_0x0281('0x1a')][_0x0281('0x1c')]||null:null,'attributes':_0x5d6429['options']?_0x5d6429['options']['attributes']||null:null,'limit':_0x5d6429[_0x0281('0x1a')]?_0x5d6429['options'][_0x0281('0x1d')]||null:null})[_0x0281('0xd')](function(_0x282625){logger[_0x0281('0xe')](_0x0281('0x1e'),_0x5d6429);logger[_0x0281('0x11')]('UpdateMailInteraction',_0x5d6429,JSON[_0x0281('0x1f')](_0x282625));_0x444438(_0x282625);})[_0x0281('0x20')](function(_0x8c856){logger[_0x0281('0x13')](_0x0281('0x1e'),_0x8c856[_0x0281('0x15')],_0x5d6429);_0x11ea2c(_0x2d5830[_0x0281('0x13')](0x1f4,_0x8c856['message']));});});};exports[_0x0281('0x21')]=function(_0x1cdb69){return new Promise(function(_0x12429b,_0x4f4539){return db[_0x0281('0x17')]['find']({'where':_0x1cdb69[_0x0281('0x1a')]?_0x1cdb69['options'][_0x0281('0x1c')]||null:null})[_0x0281('0xd')](function(_0x567af0){if(_0x567af0){return _0x567af0[_0x0281('0x22')](_0x1cdb69[_0x0281('0x19')][_0x0281('0x23')],_[_0x0281('0x24')](_0x1cdb69[_0x0281('0x19')],[_0x0281('0x23'),'id'])||{});}})[_0x0281('0x25')](function(_0x47e026){logger[_0x0281('0xe')](_0x0281('0x26'),_0x1cdb69);logger[_0x0281('0x11')](_0x0281('0x26'),_0x1cdb69,JSON[_0x0281('0x1f')](_0x47e026));_0x12429b(_0x47e026);})['catch'](function(_0x3be3ae){logger[_0x0281('0x13')](_0x0281('0x26'),_0x3be3ae[_0x0281('0x15')],_0x1cdb69);_0x4f4539(_this[_0x0281('0x13')](0x1f4,_0x3be3ae[_0x0281('0x15')]));});});};
\ No newline at end of file
+var _0x54e3=['ids','spread','AddTags','lodash','util','moment','bluebird','randomstring','../../config/utils','rpc','jayson/promise','client','./mailInteraction.socket','register','request','then','info','MailInteraction,\x20%s,\x20%s','request\x20sent','MailInteraction,\x20%s,\x20%s,\x20%s','stringify','error','message','catch','MailInteraction','body','options','raw','where','limit','UpdateMailInteraction','debug','AddTagsToMailInteraction','addTags'];(function(_0x50a6e4,_0x1b9aee){var _0x3eb9ff=function(_0x34b717){while(--_0x34b717){_0x50a6e4['push'](_0x50a6e4['shift']());}};_0x3eb9ff(++_0x1b9aee);}(_0x54e3,0x135));var _0x354e=function(_0x2760a7,_0x3b52bb){_0x2760a7=_0x2760a7-0x0;var _0x5c1e29=_0x54e3[_0x2760a7];return _0x5c1e29;};'use strict';var _=require(_0x354e('0x0'));var util=require(_0x354e('0x1'));var moment=require(_0x354e('0x2'));var BPromise=require(_0x354e('0x3'));var rs=require(_0x354e('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x354e('0x5'));var logger=require('../../config/logger')(_0x354e('0x6'));var config=require('../../config/environment');var jayson=require(_0x354e('0x7'));var client=jayson[_0x354e('0x8')]['http']({'port':0x232a});var socket=require('socket.io-emitter')({'host':'localhost','port':0x18eb});require(_0x354e('0x9'))[_0x354e('0xa')](socket);function respondWithRpcPromise(_0x56cefa,_0x296f90,_0x16482e){return new BPromise(function(_0x89e41a,_0x5dfca6){return client[_0x354e('0xb')](_0x56cefa,_0x16482e)[_0x354e('0xc')](function(_0x2585ad){logger[_0x354e('0xd')](_0x354e('0xe'),_0x296f90,_0x354e('0xf'));logger['debug'](_0x354e('0x10'),_0x296f90,_0x354e('0xf'),JSON[_0x354e('0x11')](_0x2585ad));if(_0x2585ad[_0x354e('0x12')]){if(_0x2585ad[_0x354e('0x12')]['code']===0x1f4){logger[_0x354e('0x12')](_0x354e('0xe'),_0x296f90,_0x2585ad['error']['message']);return _0x5dfca6(_0x2585ad[_0x354e('0x12')]['message']);}logger['error'](_0x354e('0xe'),_0x296f90,_0x2585ad[_0x354e('0x12')][_0x354e('0x13')]);return _0x89e41a(_0x2585ad[_0x354e('0x12')][_0x354e('0x13')]);}else{logger['info'](_0x354e('0xe'),_0x296f90,'request\x20sent');_0x89e41a(_0x2585ad['result']['message']);}})[_0x354e('0x14')](function(_0x3e67b9){logger['error'](_0x354e('0xe'),_0x296f90,_0x3e67b9);_0x5dfca6(_0x3e67b9);});});}exports['UpdateMailInteraction']=function(_0x4e52a4){var _0x7666a8=this;return new Promise(function(_0x35cd7e,_0x56036d){return db[_0x354e('0x15')]['update'](_0x4e52a4[_0x354e('0x16')],{'raw':_0x4e52a4[_0x354e('0x17')]?_0x4e52a4[_0x354e('0x17')][_0x354e('0x18')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x4e52a4[_0x354e('0x17')]?_0x4e52a4['options'][_0x354e('0x19')]||null:null,'attributes':_0x4e52a4[_0x354e('0x17')]?_0x4e52a4[_0x354e('0x17')]['attributes']||null:null,'limit':_0x4e52a4[_0x354e('0x17')]?_0x4e52a4[_0x354e('0x17')][_0x354e('0x1a')]||null:null})[_0x354e('0xc')](function(_0x2d45d0){logger[_0x354e('0xd')](_0x354e('0x1b'),_0x4e52a4);logger[_0x354e('0x1c')]('UpdateMailInteraction',_0x4e52a4,JSON[_0x354e('0x11')](_0x2d45d0));_0x35cd7e(_0x2d45d0);})[_0x354e('0x14')](function(_0x4f8807){logger[_0x354e('0x12')](_0x354e('0x1b'),_0x4f8807[_0x354e('0x13')],_0x4e52a4);_0x56036d(_0x7666a8[_0x354e('0x12')](0x1f4,_0x4f8807['message']));});});};exports[_0x354e('0x1d')]=function(_0x3f858b){return new Promise(function(_0x274c2a,_0x4f1669){return db[_0x354e('0x15')]['find']({'where':_0x3f858b[_0x354e('0x17')]?_0x3f858b[_0x354e('0x17')]['where']||null:null})['then'](function(_0x57d8ef){if(_0x57d8ef){return _0x57d8ef[_0x354e('0x1e')](_0x3f858b[_0x354e('0x16')]['ids'],_['omit'](_0x3f858b['body'],[_0x354e('0x1f'),'id'])||{});}})[_0x354e('0x20')](function(_0x1d3329){logger[_0x354e('0xd')](_0x354e('0x21'),_0x3f858b);logger[_0x354e('0x1c')](_0x354e('0x21'),_0x3f858b,JSON[_0x354e('0x11')](_0x1d3329));_0x274c2a(_0x1d3329);})[_0x354e('0x14')](function(_0x340cdf){logger['error'](_0x354e('0x21'),_0x340cdf['message'],_0x3f858b);_0x4f1669(_this['error'](0x1f4,_0x340cdf[_0x354e('0x13')]));});});};
\ No newline at end of file
index 609deb6..3f9a859 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf43a=['save','remove','removeListener','register','length'];(function(_0x46bec2,_0x36cde0){var _0x39b857=function(_0xf29a34){while(--_0xf29a34){_0x46bec2['push'](_0x46bec2['shift']());}};_0x39b857(++_0x36cde0);}(_0xf43a,0x87));var _0xaf43=function(_0x37b91f,_0x51743f){_0x37b91f=_0x37b91f-0x0;var _0x2c6262=_0xf43a[_0x37b91f];return _0x2c6262;};'use strict';var MailInteractionEvents=require('./mailInteraction.events');var events=[_0xaf43('0x0'),_0xaf43('0x1'),'update'];function createListener(_0x4d77d5,_0x2689ab){return function(_0x3d6603){_0x2689ab['emit'](_0x4d77d5,_0x3d6603);};}function removeListener(_0x3e4718,_0x211a4d){return function(){MailInteractionEvents[_0xaf43('0x2')](_0x3e4718,_0x211a4d);};}exports[_0xaf43('0x3')]=function(_0x340d66){for(var _0x2cf5a6=0x0,_0x39925c=events[_0xaf43('0x4')];_0x2cf5a6<_0x39925c;_0x2cf5a6++){var _0x3e675e=events[_0x2cf5a6];var _0xbdf342=createListener('mailInteraction:'+_0x3e675e,_0x340d66);MailInteractionEvents['on'](_0x3e675e,_0xbdf342);}};
\ No newline at end of file
+var _0xbaa6=['removeListener','length','mailInteraction:','save','remove','update','emit'];(function(_0x17b5f9,_0x4cad5b){var _0x188b50=function(_0x4520f3){while(--_0x4520f3){_0x17b5f9['push'](_0x17b5f9['shift']());}};_0x188b50(++_0x4cad5b);}(_0xbaa6,0xc0));var _0x6baa=function(_0x2f1f08,_0x158f35){_0x2f1f08=_0x2f1f08-0x0;var _0x32f365=_0xbaa6[_0x2f1f08];return _0x32f365;};'use strict';var MailInteractionEvents=require('./mailInteraction.events');var events=[_0x6baa('0x0'),_0x6baa('0x1'),_0x6baa('0x2')];function createListener(_0x35d2af,_0x4dbace){return function(_0x1c89a3){_0x4dbace[_0x6baa('0x3')](_0x35d2af,_0x1c89a3);};}function removeListener(_0x4e145f,_0x1cf0ab){return function(){MailInteractionEvents[_0x6baa('0x4')](_0x4e145f,_0x1cf0ab);};}exports['register']=function(_0xbf5835){for(var _0x3c84b7=0x0,_0x4549c2=events[_0x6baa('0x5')];_0x3c84b7<_0x4549c2;_0x3c84b7++){var _0x388dce=events[_0x3c84b7];var _0x54bc24=createListener(_0x6baa('0x6')+_0x388dce,_0xbf5835);MailInteractionEvents['on'](_0x388dce,_0x54bc24);}};
\ No newline at end of file
index 82a2ea2..cc66176 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8832=['isAuthenticated','index','/describe','describe','/:id','tracked','mail','mailmessage:create','put','update','accept','reject','exports','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailMessage.controller','get'];(function(_0x30e7dd,_0x37dcb9){var _0x20b41b=function(_0x3d805e){while(--_0x3d805e){_0x30e7dd['push'](_0x30e7dd['shift']());}};_0x20b41b(++_0x37dcb9);}(_0x8832,0xa7));var _0x2883=function(_0x57957f,_0x4e70f7){_0x57957f=_0x57957f-0x0;var _0x46c750=_0x8832[_0x57957f];return _0x46c750;};'use strict';var multer=require('multer');var util=require(_0x2883('0x0'));var path=require(_0x2883('0x1'));var express=require(_0x2883('0x2'));var router=express[_0x2883('0x3')]();var auth=require(_0x2883('0x4'));var interaction=require(_0x2883('0x5'));var config=require(_0x2883('0x6'));var controller=require(_0x2883('0x7'));router[_0x2883('0x8')]('/',auth[_0x2883('0x9')](),controller[_0x2883('0xa')]);router[_0x2883('0x8')](_0x2883('0xb'),auth['isAuthenticated'](),controller[_0x2883('0xc')]);router[_0x2883('0x8')](_0x2883('0xd'),auth[_0x2883('0x9')](),controller['show']);router['post']('/',auth['isAuthenticated'](),interaction[_0x2883('0xe')](_0x2883('0xf'),_0x2883('0x10')),controller['create']);router[_0x2883('0x11')](_0x2883('0xd'),auth[_0x2883('0x9')](),controller[_0x2883('0x12')]);router[_0x2883('0x11')]('/:id/accept',auth['isAuthenticated'](),controller[_0x2883('0x13')]);router['put']('/:id/reject',auth[_0x2883('0x9')](),controller[_0x2883('0x14')]);router['delete']('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0x2883('0x15')]=router;
\ No newline at end of file
+var _0xd86e=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailMessage.controller','isAuthenticated','index','describe','get','show','post','mailmessage:create','create','/:id','put','/:id/accept','accept','/:id/reject','reject','delete','destroy','multer','util','path','express'];(function(_0x5a7428,_0x5b1822){var _0x295ef9=function(_0x20e970){while(--_0x20e970){_0x5a7428['push'](_0x5a7428['shift']());}};_0x295ef9(++_0x5b1822);}(_0xd86e,0x10f));var _0xed86=function(_0x255b91,_0x1c60c2){_0x255b91=_0x255b91-0x0;var _0xeb0076=_0xd86e[_0x255b91];return _0xeb0076;};'use strict';var multer=require(_0xed86('0x0'));var util=require(_0xed86('0x1'));var path=require(_0xed86('0x2'));var express=require(_0xed86('0x3'));var router=express[_0xed86('0x4')]();var auth=require(_0xed86('0x5'));var interaction=require(_0xed86('0x6'));var config=require(_0xed86('0x7'));var controller=require(_0xed86('0x8'));router['get']('/',auth[_0xed86('0x9')](),controller[_0xed86('0xa')]);router['get']('/describe',auth[_0xed86('0x9')](),controller[_0xed86('0xb')]);router[_0xed86('0xc')]('/:id',auth[_0xed86('0x9')](),controller[_0xed86('0xd')]);router[_0xed86('0xe')]('/',auth[_0xed86('0x9')](),interaction['tracked']('mail',_0xed86('0xf')),controller[_0xed86('0x10')]);router['put'](_0xed86('0x11'),auth['isAuthenticated'](),controller['update']);router[_0xed86('0x12')](_0xed86('0x13'),auth[_0xed86('0x9')](),controller[_0xed86('0x14')]);router[_0xed86('0x12')](_0xed86('0x15'),auth['isAuthenticated'](),controller[_0xed86('0x16')]);router[_0xed86('0x17')](_0xed86('0x11'),auth[_0xed86('0x9')](),controller[_0xed86('0x18')]);module['exports']=router;
\ No newline at end of file
index 2c787a9..1327cf2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb8ff=['out','STRING','DATE','INTEGER','lodash','exports','TEXT','long','BOOLEAN','ENUM'];(function(_0x1dfece,_0x36c5e4){var _0x55d8a0=function(_0x2b9037){while(--_0x2b9037){_0x1dfece['push'](_0x1dfece['shift']());}};_0x55d8a0(++_0x36c5e4);}(_0xb8ff,0x180));var _0xfb8f=function(_0x96dbb3,_0x310b04){_0x96dbb3=_0x96dbb3-0x0;var _0x51fa41=_0xb8ff[_0x96dbb3];return _0x51fa41;};'use strict';var Sequelize=require('sequelize');var _=require(_0xfb8f('0x0'));module[_0xfb8f('0x1')]={'body':{'type':Sequelize[_0xfb8f('0x2')](_0xfb8f('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0xfb8f('0x4')],'defaultValue':![]},'direction':{'type':Sequelize[_0xfb8f('0x5')]('in',_0xfb8f('0x6')),'defaultValue':'out','allowNull':![]},'messageId':{'type':Sequelize['STRING'](0xbe)},'from':{'type':Sequelize[_0xfb8f('0x7')]},'to':{'type':Sequelize[_0xfb8f('0x2')]('long')},'cc':{'type':Sequelize[_0xfb8f('0x2')]('long')},'bcc':{'type':Sequelize[_0xfb8f('0x2')](_0xfb8f('0x3'))},'subject':{'type':Sequelize[_0xfb8f('0x2')]},'sentAt':{'type':Sequelize[_0xfb8f('0x8')]},'attach':{'type':Sequelize[_0xfb8f('0x9')],'defaultValue':0x0},'secret':{'type':Sequelize[_0xfb8f('0x4')],'defaultValue':![]},'readAt':{'type':Sequelize[_0xfb8f('0x8')]},'originTo':{'type':Sequelize[_0xfb8f('0x2')](_0xfb8f('0x3'))},'originCc':{'type':Sequelize['TEXT'](_0xfb8f('0x3'))}};
\ No newline at end of file
+var _0x8ad5=['lodash','exports','TEXT','ENUM','out','STRING','long','DATE','INTEGER','BOOLEAN','sequelize'];(function(_0x1db3b1,_0x1f42b6){var _0x3056a7=function(_0x124a44){while(--_0x124a44){_0x1db3b1['push'](_0x1db3b1['shift']());}};_0x3056a7(++_0x1f42b6);}(_0x8ad5,0xf1));var _0x58ad=function(_0x55e08b,_0x421620){_0x55e08b=_0x55e08b-0x0;var _0xd1a7ff=_0x8ad5[_0x55e08b];return _0xd1a7ff;};'use strict';var Sequelize=require(_0x58ad('0x0'));var _=require(_0x58ad('0x1'));module[_0x58ad('0x2')]={'body':{'type':Sequelize[_0x58ad('0x3')]('long'),'allowNull':![]},'read':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'direction':{'type':Sequelize[_0x58ad('0x4')]('in',_0x58ad('0x5')),'defaultValue':_0x58ad('0x5'),'allowNull':![]},'messageId':{'type':Sequelize[_0x58ad('0x6')](0xbe)},'from':{'type':Sequelize[_0x58ad('0x6')]},'to':{'type':Sequelize[_0x58ad('0x3')]('long')},'cc':{'type':Sequelize['TEXT'](_0x58ad('0x7'))},'bcc':{'type':Sequelize[_0x58ad('0x3')](_0x58ad('0x7'))},'subject':{'type':Sequelize[_0x58ad('0x3')]},'sentAt':{'type':Sequelize[_0x58ad('0x8')]},'attach':{'type':Sequelize[_0x58ad('0x9')],'defaultValue':0x0},'secret':{'type':Sequelize[_0x58ad('0xa')],'defaultValue':![]},'readAt':{'type':Sequelize[_0x58ad('0x8')]},'originTo':{'type':Sequelize[_0x58ad('0x3')]('long')},'originCc':{'type':Sequelize[_0x58ad('0x3')](_0x58ad('0x7'))}};
\ No newline at end of file
index 6eb615a..6fc7fd0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa2ab=['messageId','format','mail-interactions','accept','mail','read','readAt','UserId','params','CmContact','Contact','get','MailInteraction','MailInteractionId','read1stAt','YYYY-MM-DD\x20HH:mm:ss','interaction','[MAILMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','AcceptMessage','acceptMessage','interface','SIP/%s','channel','event','EventManager','acceptmessage','agent','[MAILMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','rejectMessage','rejectmessage','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','register','jayson/promise','client','http','then','info','MailMessage,\x20%s,\x20%s','debug','MailMessage,\x20%s,\x20%s,\x20%s','stringify','code','error','message','request\x20sent','result','catch','sendStatus','status','end','count','limit','set','Content-Range','json','apply','reject','update','destroy','stack','name','send','index','MailMessage','rawAttributes','model','query','dateStart','dateEnd','keys','attributes','fields','hasOwnProperty','nolimit','offset','order','sort','where','filters','pick','add','day','merge','filter','options','includeAll','include','rows','show','intersection','length','find','body','describe','create','out','secret','MailAccountId','MailServerOut','Smtp','isNil','service','host','port','secure','authentication','auth','user','attachments','basename','SendMail','sendMail'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa2ab,0xa7));var _0xba2a=function(_0x11008e,_0x3c9be6){_0x11008e=_0x11008e-0x0;var _0x4ae70d=_0xa2ab[_0x11008e];return _0x4ae70d;};'use strict';var jsonpatch=require(_0xba2a('0x0'));var rp=require(_0xba2a('0x1'));var moment=require(_0xba2a('0x2'));var BPromise=require('bluebird');var Mustache=require(_0xba2a('0x3'));var util=require(_0xba2a('0x4'));var path=require(_0xba2a('0x5'));var sox=require(_0xba2a('0x6'));var csv=require(_0xba2a('0x7'));var ejs=require(_0xba2a('0x8'));var fs=require('fs');var _=require(_0xba2a('0x9'));var squel=require('squel');var crypto=require(_0xba2a('0xa'));var jsforce=require(_0xba2a('0xb'));var deskjs=require(_0xba2a('0xc'));var toCsv=require('to-csv');var querystring=require(_0xba2a('0xd'));var Papa=require(_0xba2a('0xe'));var qs=require(_0xba2a('0xf'));var logger=require(_0xba2a('0x10'))('api');var utils=require(_0xba2a('0x11'));var config=require(_0xba2a('0x12'));var db=require(_0xba2a('0x13'))['db'];var socket=require(_0xba2a('0x14'))({'host':_0xba2a('0x15'),'port':0x18eb});require('./mailMessage.socket')[_0xba2a('0x16')](socket);var jayson=require(_0xba2a('0x17'));var client=jayson[_0xba2a('0x18')][_0xba2a('0x19')]({'port':0x232c});var client9003=jayson['client'][_0xba2a('0x19')]({'port':0x232b});var client9002=jayson[_0xba2a('0x18')][_0xba2a('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x2c850e,_0x7c1dab,_0x4d4448,_0x8c98d){return new BPromise(function(_0x44759c,_0xe2bbdb){var _0x127c42=_0x8c98d||client;return _0x127c42['request'](_0x2c850e,_0x4d4448)[_0xba2a('0x1a')](function(_0x1b3272){logger[_0xba2a('0x1b')](_0xba2a('0x1c'),_0x7c1dab,'request\x20sent');logger[_0xba2a('0x1d')](_0xba2a('0x1e'),_0x7c1dab,'request\x20sent',JSON[_0xba2a('0x1f')](_0x1b3272));if(_0x1b3272['error']){if(_0x1b3272['error'][_0xba2a('0x20')]===0x1f4){logger[_0xba2a('0x21')](_0xba2a('0x1c'),_0x7c1dab,_0x1b3272[_0xba2a('0x21')][_0xba2a('0x22')]);return _0xe2bbdb(_0x1b3272['error'][_0xba2a('0x22')]);}logger[_0xba2a('0x21')]('MailMessage,\x20%s,\x20%s',_0x7c1dab,_0x1b3272[_0xba2a('0x21')]['message']);return _0x44759c(_0x1b3272[_0xba2a('0x21')][_0xba2a('0x22')]);}else{logger[_0xba2a('0x1b')](_0xba2a('0x1c'),_0x7c1dab,_0xba2a('0x23'));_0x44759c(_0x1b3272[_0xba2a('0x24')]['message']);}})[_0xba2a('0x25')](function(_0x2cc3db){logger[_0xba2a('0x21')](_0xba2a('0x1c'),_0x7c1dab,_0x2cc3db);_0xe2bbdb(_0x2cc3db);});});}function respondWithStatusCode(_0x3bc8e1,_0x56fa5e){_0x56fa5e=_0x56fa5e||0xcc;return function(_0xdfbf5c){if(_0xdfbf5c){return _0x3bc8e1[_0xba2a('0x26')](_0x56fa5e);}return _0x3bc8e1[_0xba2a('0x27')](_0x56fa5e)[_0xba2a('0x28')]();};}function respondWithResult(_0x46af1f,_0x81b260){_0x81b260=_0x81b260||0xc8;return function(_0x24ee7d){if(_0x24ee7d){return _0x46af1f[_0xba2a('0x27')](_0x81b260)['json'](_0x24ee7d);}};}function respondWithFilteredResult(_0x1c990d,_0x3d1a75){return function(_0x1a0f21){if(_0x1a0f21){var _0x2a001c=_0x1a0f21[_0xba2a('0x29')],_0x500206=_0x3d1a75['offset'],_0x2e627b=_0x3d1a75['offset']+_0x3d1a75[_0xba2a('0x2a')],_0x2c6b37;if(_0x2e627b>=_0x2a001c){_0x2e627b=_0x2a001c;_0x2c6b37=0xc8;}else{_0x2c6b37=0xce;}_0x1c990d[_0xba2a('0x27')](_0x2c6b37);return _0x1c990d[_0xba2a('0x2b')](_0xba2a('0x2c'),_0x500206+'-'+_0x2e627b+'/'+_0x2a001c)[_0xba2a('0x2d')](_0x1a0f21);}return null;};}function patchUpdates(_0x403372){return function(_0x85d5a4){try{jsonpatch[_0xba2a('0x2e')](_0x85d5a4,_0x403372,!![]);}catch(_0x3e03e2){return BPromise[_0xba2a('0x2f')](_0x3e03e2);}return _0x85d5a4['save']();};}function saveUpdates(_0x1bf866,_0x77ac7c){return function(_0x88509d){if(_0x88509d){return _0x88509d[_0xba2a('0x30')](_0x1bf866)['then'](function(_0x2297b9){return _0x2297b9;});}return null;};}function removeEntity(_0xf75143,_0x3ec14f){return function(_0x49597b){if(_0x49597b){return _0x49597b[_0xba2a('0x31')]()[_0xba2a('0x1a')](function(){_0xf75143[_0xba2a('0x27')](0xcc)[_0xba2a('0x28')]();});}};}function handleEntityNotFound(_0x2ad6de,_0x699f7e){return function(_0x1f4cb3){if(!_0x1f4cb3){_0x2ad6de[_0xba2a('0x26')](0x194);}return _0x1f4cb3;};}function handleError(_0x52e0ef,_0x18f557){_0x18f557=_0x18f557||0x1f4;return function(_0x37b895){logger[_0xba2a('0x21')](_0x37b895[_0xba2a('0x32')]);if(_0x37b895[_0xba2a('0x33')]){delete _0x37b895['name'];}_0x52e0ef[_0xba2a('0x27')](_0x18f557)[_0xba2a('0x34')](_0x37b895);};}exports[_0xba2a('0x35')]=function(_0x338d04,_0x51889d){var _0xcf787={},_0x58b903={},_0x183a1a={'count':0x0,'rows':[]};var _0x4bceb3=db[_0xba2a('0x36')][_0xba2a('0x37')];_0x58b903[_0xba2a('0x38')]=_['keys'](_0x4bceb3);var _0x162d24={'dateStart':_0x338d04[_0xba2a('0x39')][_0xba2a('0x3a')],'dateEnd':_0x338d04[_0xba2a('0x39')][_0xba2a('0x3b')]};delete _0x338d04[_0xba2a('0x39')][_0xba2a('0x3a')];delete _0x338d04['query'][_0xba2a('0x3b')];_0x58b903['query']=_[_0xba2a('0x3c')](_0x338d04[_0xba2a('0x39')]);_0x58b903['filters']=_['intersection'](_0x58b903['model'],_0x58b903['query']);_0xcf787[_0xba2a('0x3d')]=_['intersection'](_0x58b903[_0xba2a('0x38')],qs[_0xba2a('0x3e')](_0x338d04['query'][_0xba2a('0x3e')]));_0xcf787[_0xba2a('0x3d')]=_0xcf787[_0xba2a('0x3d')]['length']?_0xcf787[_0xba2a('0x3d')]:_0x58b903['model'];if(!_0x338d04[_0xba2a('0x39')][_0xba2a('0x3f')](_0xba2a('0x40'))){_0xcf787['limit']=qs[_0xba2a('0x2a')](_0x338d04[_0xba2a('0x39')][_0xba2a('0x2a')]);_0xcf787['offset']=qs[_0xba2a('0x41')](_0x338d04[_0xba2a('0x39')]['offset']);}_0xcf787[_0xba2a('0x42')]=qs[_0xba2a('0x43')](_0x338d04[_0xba2a('0x39')][_0xba2a('0x43')]);_0xcf787[_0xba2a('0x44')]=qs[_0xba2a('0x45')](_[_0xba2a('0x46')](_0x338d04[_0xba2a('0x39')],_0x58b903[_0xba2a('0x45')]));if(_0x162d24['dateStart']){if(_0x162d24[_0xba2a('0x3b')]){_0x162d24[_0xba2a('0x3b')]=moment(_0x162d24['dateEnd'])[_0xba2a('0x47')](0x1,_0xba2a('0x48'));}else{_0x162d24[_0xba2a('0x3b')]=moment(_0x162d24[_0xba2a('0x3a')])['add'](0x1,'day');}_['merge'](_0xcf787['where'],{'createdAt':{'$gte':_0x162d24[_0xba2a('0x3a')],'$lte':_0x162d24[_0xba2a('0x3b')]}});}if(_0x338d04['query']['filter']){_0xcf787['where']=_[_0xba2a('0x49')](_0xcf787[_0xba2a('0x44')],{'$or':_['map'](_0xcf787['attributes'],function(_0x3df4de){var _0xf24d3d={};_0xf24d3d[_0x3df4de]={'$like':'%'+_0x338d04['query'][_0xba2a('0x4a')]+'%'};return _0xf24d3d;})});}_0xcf787=_[_0xba2a('0x49')]({},_0xcf787,_0x338d04[_0xba2a('0x4b')]);var _0x4a7a6c={'where':_0xcf787[_0xba2a('0x44')]};return db['MailMessage'][_0xba2a('0x29')](_0x4a7a6c)['then'](function(_0x317bd8){_0x183a1a[_0xba2a('0x29')]=_0x317bd8;if(_0x338d04[_0xba2a('0x39')][_0xba2a('0x4c')]){_0xcf787[_0xba2a('0x4d')]=[{'all':!![]}];}return db[_0xba2a('0x36')]['findAll'](_0xcf787);})[_0xba2a('0x1a')](function(_0x5e7dbc){_0x183a1a[_0xba2a('0x4e')]=_0x5e7dbc;return _0x183a1a;})['then'](respondWithFilteredResult(_0x51889d,_0xcf787))[_0xba2a('0x25')](handleError(_0x51889d,null));};exports[_0xba2a('0x4f')]=function(_0x325b4d,_0x5743d3){var _0x46d142={'raw':!![],'where':{'id':_0x325b4d['params']['id']}},_0x513bbb={};_0x513bbb[_0xba2a('0x38')]=_['keys'](db['MailMessage'][_0xba2a('0x37')]);_0x513bbb[_0xba2a('0x39')]=_['keys'](_0x325b4d[_0xba2a('0x39')]);_0x513bbb[_0xba2a('0x45')]=_[_0xba2a('0x50')](_0x513bbb['model'],_0x513bbb['query']);_0x46d142[_0xba2a('0x3d')]=_[_0xba2a('0x50')](_0x513bbb[_0xba2a('0x38')],qs[_0xba2a('0x3e')](_0x325b4d[_0xba2a('0x39')][_0xba2a('0x3e')]));_0x46d142[_0xba2a('0x3d')]=_0x46d142[_0xba2a('0x3d')][_0xba2a('0x51')]?_0x46d142[_0xba2a('0x3d')]:_0x513bbb['model'];if(_0x325b4d[_0xba2a('0x39')]['includeAll']){_0x46d142[_0xba2a('0x4d')]=[{'all':!![]}];}_0x46d142=_[_0xba2a('0x49')]({},_0x46d142,_0x325b4d['options']);return db[_0xba2a('0x36')][_0xba2a('0x52')](_0x46d142)[_0xba2a('0x1a')](handleEntityNotFound(_0x5743d3,null))[_0xba2a('0x1a')](respondWithResult(_0x5743d3,null))[_0xba2a('0x25')](handleError(_0x5743d3,null));};exports[_0xba2a('0x30')]=function(_0x58a823,_0x367c38){if(_0x58a823['body']['id']){delete _0x58a823[_0xba2a('0x53')]['id'];}return db[_0xba2a('0x36')][_0xba2a('0x52')]({'where':{'id':_0x58a823['params']['id']}})[_0xba2a('0x1a')](handleEntityNotFound(_0x367c38,null))[_0xba2a('0x1a')](saveUpdates(_0x58a823[_0xba2a('0x53')],null))['then'](respondWithResult(_0x367c38,null))['catch'](handleError(_0x367c38,null));};exports[_0xba2a('0x31')]=function(_0x122766,_0x20c1ce){return db[_0xba2a('0x36')][_0xba2a('0x52')]({'where':{'id':_0x122766['params']['id']}})[_0xba2a('0x1a')](handleEntityNotFound(_0x20c1ce,null))[_0xba2a('0x1a')](removeEntity(_0x20c1ce,null))[_0xba2a('0x25')](handleError(_0x20c1ce,null));};exports[_0xba2a('0x54')]=function(_0x52292b,_0x263590){return db[_0xba2a('0x36')][_0xba2a('0x54')]()[_0xba2a('0x1a')](respondWithResult(_0x263590,null))['catch'](handleError(_0x263590,null));};exports[_0xba2a('0x55')]=function(_0x121e17,_0x44ef91){return db['MailMessage'][_0xba2a('0x55')](_0x121e17[_0xba2a('0x53')])[_0xba2a('0x1a')](function(_0x51fb7b){if(_0x51fb7b){if(_0x51fb7b['direction']===_0xba2a('0x56')&&!_0x51fb7b[_0xba2a('0x57')]){return db['MailAccount']['findOne']({'where':{'id':_0x51fb7b[_0xba2a('0x58')]},'include':[{'model':db[_0xba2a('0x59')],'as':_0xba2a('0x5a'),'raw':!![]}]})['then'](function(_0x71c526){if(_0x71c526&&_0x71c526[_0xba2a('0x5a')]){var _0x517bd6={'tls':{'rejectUnauthorized':![]}};if(_[_0xba2a('0x5b')](_0x71c526['Smtp'][_0xba2a('0x5c')])){_0x517bd6[_0xba2a('0x5d')]=_0x71c526['Smtp'][_0xba2a('0x5d')];_0x517bd6[_0xba2a('0x5e')]=_0x71c526[_0xba2a('0x5a')][_0xba2a('0x5e')];_0x517bd6[_0xba2a('0x5f')]=_0x71c526[_0xba2a('0x5a')]['secure'];if(_0x71c526[_0xba2a('0x5a')][_0xba2a('0x60')]){_0x517bd6[_0xba2a('0x61')]={'user':_0x71c526[_0xba2a('0x5a')][_0xba2a('0x62')],'pass':_0x71c526[_0xba2a('0x5a')]['pass']};}}else{_0x517bd6[_0xba2a('0x5c')]=_0x71c526[_0xba2a('0x5a')][_0xba2a('0x5c')];_0x517bd6['auth']={'user':_0x71c526['Smtp'][_0xba2a('0x62')],'pass':_0x71c526[_0xba2a('0x5a')]['pass']};_0x517bd6[_0xba2a('0x5f')]=_0x71c526[_0xba2a('0x5a')]['secure'];}if(_0x121e17[_0xba2a('0x53')]['attachments']&&_0x121e17['body'][_0xba2a('0x63')][_0xba2a('0x51')]){for(var _0x14d23c=0x0;_0x14d23c<_0x121e17[_0xba2a('0x53')][_0xba2a('0x63')][_0xba2a('0x51')];_0x14d23c+=0x1){_0x121e17[_0xba2a('0x53')]['attachments'][_0x14d23c]={'filename':_0x121e17['body'][_0xba2a('0x63')][_0x14d23c][_0xba2a('0x33')],'path':path['join'](config['root'],'server/files/attachments',_0x121e17[_0xba2a('0x53')]['attachments'][_0x14d23c][_0xba2a('0x64')])};}}return{'account':_0x517bd6,'message':_0x121e17[_0xba2a('0x53')]};}})[_0xba2a('0x1a')](function(_0x147ee8){if(_0x147ee8){return respondWithRpcPromise(_0xba2a('0x65'),_0xba2a('0x66'),_0x147ee8,client9003)[_0xba2a('0x1a')](function(_0x5699ff){return _0x51fb7b['update']({'read':!![],'messageId':_0x5699ff[_0xba2a('0x67')],'sentAt':moment()[_0xba2a('0x68')]('YYYY-MM-DD\x20HH:mm:ss')});})['catch'](function(_0x453e18){logger[_0xba2a('0x21')]('%s',JSON[_0xba2a('0x1f')](_0x453e18));return _0x51fb7b;});}return _0x51fb7b;});}return _0x51fb7b;}})[_0xba2a('0x1a')](respondWithResult(_0x44ef91,0xc9))['catch'](handleError(_0x44ef91,null));};var interaction_log=require(_0xba2a('0x10'))(_0xba2a('0x69'));exports[_0xba2a('0x6a')]=function(_0x11adce,_0x5e803d,_0x56df9f){var _0x1d2d77={'channel':_0xba2a('0x6b')};if(_0x11adce[_0xba2a('0x53')]['id']){delete _0x11adce[_0xba2a('0x53')]['id'];}_0x11adce[_0xba2a('0x53')][_0xba2a('0x6c')]=!![];_0x11adce['body'][_0xba2a('0x6d')]=moment()[_0xba2a('0x68')]('YYYY-MM-DD\x20HH:mm:ss');_0x11adce[_0xba2a('0x53')][_0xba2a('0x6e')]=_0x11adce['body'][_0xba2a('0x6e')]||_0x11adce['user']['id'];return db[_0xba2a('0x36')][_0xba2a('0x52')]({'where':{'id':_0x11adce[_0xba2a('0x6f')]['id'],'UserId':null},'include':[{'model':db[_0xba2a('0x70')],'as':_0xba2a('0x71')}]})[_0xba2a('0x1a')](handleEntityNotFound(_0x5e803d,null))['then'](saveUpdates(_0x11adce[_0xba2a('0x53')],null))['then'](function(_0x410954){if(_0x410954){_0x1d2d77['message']=_0x410954[_0xba2a('0x72')]({'plain':!![]});return db[_0xba2a('0x73')][_0xba2a('0x52')]({'where':{'id':_0x410954[_0xba2a('0x74')]}});}return null;})[_0xba2a('0x1a')](handleEntityNotFound(_0x5e803d,null))[_0xba2a('0x1a')](function(_0x3b0140){if(_0x3b0140){return _0x3b0140[_0xba2a('0x30')]({'UserId':_0x11adce[_0xba2a('0x53')][_0xba2a('0x6e')],'read1stAt':_[_0xba2a('0x5b')](_0x3b0140[_0xba2a('0x75')])?moment()[_0xba2a('0x68')](_0xba2a('0x76')):undefined});}return null;})['then'](function(_0x7b5359){if(_0x7b5359){_0x1d2d77[_0xba2a('0x77')]=_0x7b5359[_0xba2a('0x72')]({'plain':!![]});interaction_log['info'](_0xba2a('0x78'),_0x11adce[_0xba2a('0x62')]['id'],_0x11adce['user']['name'],_0x11adce['user'][_0xba2a('0x79')],_0x1d2d77[_0xba2a('0x77')]['id'],_0x11adce[_0xba2a('0x53')]?JSON[_0xba2a('0x1f')](_0x11adce[_0xba2a('0x53')]):'null');return respondWithRpcPromise(_0xba2a('0x7a'),_0xba2a('0x7b'),_0x1d2d77);}return null;})[_0xba2a('0x1a')](function(_0x17c986){if(_0x17c986){if(_0x11adce[_0xba2a('0x53')]['manual']){_0x1d2d77[_0xba2a('0x22')][_0xba2a('0x7c')]=util[_0xba2a('0x68')](_0xba2a('0x7d'),_0x11adce['user']['name']);_0x1d2d77[_0xba2a('0x22')][_0xba2a('0x7e')]=_0x1d2d77[_0xba2a('0x7e')];_0x1d2d77['message'][_0xba2a('0x7f')]=_0xba2a('0x6a');return respondWithRpcPromise(_0xba2a('0x80'),_0xba2a('0x80'),{'event':_0xba2a('0x81'),'message':_0x1d2d77['message']},client9002)[_0xba2a('0x1a')](function(){return _0x1d2d77;});}return _0x1d2d77;}return null;})[_0xba2a('0x1a')](respondWithResult(_0x5e803d,null))[_0xba2a('0x25')](handleError(_0x5e803d,null));};var interaction_log=require('../../config/logger')(_0xba2a('0x69'));exports['reject']=function(_0x5d0bc4,_0x10261f,_0x5760a0){var _0x836cc2={'agent':{},'channel':_0xba2a('0x6b')};if(_0x5d0bc4[_0xba2a('0x53')]['id']){delete _0x5d0bc4[_0xba2a('0x53')]['id'];}_0x5d0bc4[_0xba2a('0x53')][_0xba2a('0x6e')]=_0x5d0bc4[_0xba2a('0x53')][_0xba2a('0x6e')]||_0x5d0bc4['user']['id'];_0x836cc2[_0xba2a('0x82')]['id']=_0x5d0bc4[_0xba2a('0x53')]['UserId'];return db[_0xba2a('0x36')][_0xba2a('0x52')]({'where':{'id':_0x5d0bc4[_0xba2a('0x6f')]['id'],'UserId':null}})[_0xba2a('0x1a')](handleEntityNotFound(_0x10261f,null))[_0xba2a('0x1a')](function(_0x4168d5){if(_0x4168d5){_0x836cc2[_0xba2a('0x22')]=_0x4168d5[_0xba2a('0x72')]({'plain':!![]});return db['MailInteraction'][_0xba2a('0x52')]({'where':{'id':_0x4168d5['MailInteractionId']}});}return null;})[_0xba2a('0x1a')](handleEntityNotFound(_0x10261f,null))[_0xba2a('0x1a')](function(_0x5c3ae4){if(_0x5c3ae4){_0x836cc2[_0xba2a('0x77')]=_0x5c3ae4[_0xba2a('0x72')]({'plain':!![]});interaction_log[_0xba2a('0x1b')](_0xba2a('0x83'),_0x5d0bc4[_0xba2a('0x62')]['id'],_0x5d0bc4[_0xba2a('0x62')][_0xba2a('0x33')],_0x5d0bc4[_0xba2a('0x62')][_0xba2a('0x79')],_0x836cc2[_0xba2a('0x77')]['id'],_0x5d0bc4['body']?JSON[_0xba2a('0x1f')](_0x5d0bc4['body']):'null');return respondWithRpcPromise(_0xba2a('0x84'),_0xba2a('0x85'),_0x836cc2);}return null;})['then'](function(_0x6bde7f){if(_0x6bde7f){_0x6bde7f[_0xba2a('0x22')][_0xba2a('0x7c')]=util[_0xba2a('0x68')](_0xba2a('0x7d'),_0x5d0bc4[_0xba2a('0x62')][_0xba2a('0x33')]);_0x6bde7f[_0xba2a('0x22')][_0xba2a('0x7e')]=_0x836cc2[_0xba2a('0x7e')];_0x6bde7f[_0xba2a('0x22')][_0xba2a('0x7f')]=_0xba2a('0x2f');respondWithRpcPromise(_0xba2a('0x80'),_0xba2a('0x80'),{'event':_0xba2a('0x86'),'message':_0x6bde7f[_0xba2a('0x22')]},client9002);return _0x836cc2;}return null;})[_0xba2a('0x1a')](respondWithResult(_0x10261f,null))[_0xba2a('0x25')](handleError(_0x10261f,null));};
\ No newline at end of file
+var _0x81bd=['desk.js','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./mailMessage.socket','register','jayson/promise','client','http','request','then','MailMessage,\x20%s,\x20%s','request\x20sent','MailMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','sendStatus','status','end','count','offset','limit','Content-Range','json','apply','reject','save','update','name','send','index','MailMessage','rawAttributes','query','dateStart','dateEnd','keys','filters','intersection','model','fields','attributes','nolimit','order','sort','where','pick','add','day','merge','filter','map','options','includeAll','include','findAll','rows','show','params','length','body','find','describe','create','direction','out','secret','MailAccount','findOne','MailAccountId','MailServerOut','Smtp','isNil','service','host','port','secure','auth','user','pass','attachments','join','basename','SendMail','messageId','format','YYYY-MM-DD\x20HH:mm:ss','mail-interactions','accept','mail','read','UserId','CmContact','Contact','get','MailInteractionId','read1stAt','interaction','[MAILMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','null','AcceptMessage','acceptMessage','manual','interface','SIP/%s','channel','event','EventManager','acceptmessage','agent','MailInteraction','[MAILMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','rejectMessage','rejectmessage','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','crypto','jsforce'];(function(_0x446631,_0x4e3f26){var _0x57b0dd=function(_0x41afaa){while(--_0x41afaa){_0x446631['push'](_0x446631['shift']());}};_0x57b0dd(++_0x4e3f26);}(_0x81bd,0x7c));var _0xd81b=function(_0x3238ea,_0x91809d){_0x3238ea=_0x3238ea-0x0;var _0x4aaac2=_0x81bd[_0x3238ea];return _0x4aaac2;};'use strict';var jsonpatch=require(_0xd81b('0x0'));var rp=require(_0xd81b('0x1'));var moment=require(_0xd81b('0x2'));var BPromise=require(_0xd81b('0x3'));var Mustache=require(_0xd81b('0x4'));var util=require(_0xd81b('0x5'));var path=require(_0xd81b('0x6'));var sox=require('sox');var csv=require(_0xd81b('0x7'));var ejs=require(_0xd81b('0x8'));var fs=require('fs');var _=require(_0xd81b('0x9'));var squel=require('squel');var crypto=require(_0xd81b('0xa'));var jsforce=require(_0xd81b('0xb'));var deskjs=require(_0xd81b('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xd81b('0xd'));var qs=require('../../components/parsers/qs');var logger=require(_0xd81b('0xe'))(_0xd81b('0xf'));var utils=require(_0xd81b('0x10'));var config=require(_0xd81b('0x11'));var db=require(_0xd81b('0x12'))['db'];var socket=require(_0xd81b('0x13'))({'host':_0xd81b('0x14'),'port':0x18eb});require(_0xd81b('0x15'))[_0xd81b('0x16')](socket);var jayson=require(_0xd81b('0x17'));var client=jayson[_0xd81b('0x18')][_0xd81b('0x19')]({'port':0x232c});var client9003=jayson[_0xd81b('0x18')]['http']({'port':0x232b});var client9002=jayson[_0xd81b('0x18')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3f2405,_0xe75568,_0x5f0b6b,_0x35a053){return new BPromise(function(_0x47dd04,_0x13dd00){var _0x41bf7a=_0x35a053||client;return _0x41bf7a[_0xd81b('0x1a')](_0x3f2405,_0x5f0b6b)[_0xd81b('0x1b')](function(_0x128162){logger['info'](_0xd81b('0x1c'),_0xe75568,_0xd81b('0x1d'));logger['debug'](_0xd81b('0x1e'),_0xe75568,_0xd81b('0x1d'),JSON[_0xd81b('0x1f')](_0x128162));if(_0x128162[_0xd81b('0x20')]){if(_0x128162[_0xd81b('0x20')][_0xd81b('0x21')]===0x1f4){logger[_0xd81b('0x20')](_0xd81b('0x1c'),_0xe75568,_0x128162[_0xd81b('0x20')][_0xd81b('0x22')]);return _0x13dd00(_0x128162[_0xd81b('0x20')][_0xd81b('0x22')]);}logger[_0xd81b('0x20')](_0xd81b('0x1c'),_0xe75568,_0x128162[_0xd81b('0x20')][_0xd81b('0x22')]);return _0x47dd04(_0x128162['error']['message']);}else{logger[_0xd81b('0x23')](_0xd81b('0x1c'),_0xe75568,_0xd81b('0x1d'));_0x47dd04(_0x128162['result'][_0xd81b('0x22')]);}})[_0xd81b('0x24')](function(_0x542ee2){logger[_0xd81b('0x20')](_0xd81b('0x1c'),_0xe75568,_0x542ee2);_0x13dd00(_0x542ee2);});});}function respondWithStatusCode(_0x1670cd,_0x1ad65c){_0x1ad65c=_0x1ad65c||0xcc;return function(_0x279176){if(_0x279176){return _0x1670cd[_0xd81b('0x25')](_0x1ad65c);}return _0x1670cd[_0xd81b('0x26')](_0x1ad65c)[_0xd81b('0x27')]();};}function respondWithResult(_0x341aec,_0x212c4e){_0x212c4e=_0x212c4e||0xc8;return function(_0x2ccedf){if(_0x2ccedf){return _0x341aec[_0xd81b('0x26')](_0x212c4e)['json'](_0x2ccedf);}};}function respondWithFilteredResult(_0x28768f,_0x99dbc9){return function(_0xe3637a){if(_0xe3637a){var _0x31b9fd=_0xe3637a[_0xd81b('0x28')],_0x3266c2=_0x99dbc9[_0xd81b('0x29')],_0x2d0d02=_0x99dbc9['offset']+_0x99dbc9[_0xd81b('0x2a')],_0x3e28dd;if(_0x2d0d02>=_0x31b9fd){_0x2d0d02=_0x31b9fd;_0x3e28dd=0xc8;}else{_0x3e28dd=0xce;}_0x28768f['status'](_0x3e28dd);return _0x28768f['set'](_0xd81b('0x2b'),_0x3266c2+'-'+_0x2d0d02+'/'+_0x31b9fd)[_0xd81b('0x2c')](_0xe3637a);}return null;};}function patchUpdates(_0x5141e6){return function(_0x481454){try{jsonpatch[_0xd81b('0x2d')](_0x481454,_0x5141e6,!![]);}catch(_0xf10fe0){return BPromise[_0xd81b('0x2e')](_0xf10fe0);}return _0x481454[_0xd81b('0x2f')]();};}function saveUpdates(_0x1a1572,_0x4654ba){return function(_0x5527ed){if(_0x5527ed){return _0x5527ed[_0xd81b('0x30')](_0x1a1572)[_0xd81b('0x1b')](function(_0x561bcc){return _0x561bcc;});}return null;};}function removeEntity(_0x56d80b,_0x165892){return function(_0x1966b1){if(_0x1966b1){return _0x1966b1['destroy']()['then'](function(){_0x56d80b['status'](0xcc)[_0xd81b('0x27')]();});}};}function handleEntityNotFound(_0x3ead68,_0x1d2f46){return function(_0x1c4cf7){if(!_0x1c4cf7){_0x3ead68[_0xd81b('0x25')](0x194);}return _0x1c4cf7;};}function handleError(_0x12ee8f,_0x29aabf){_0x29aabf=_0x29aabf||0x1f4;return function(_0x489cb7){logger[_0xd81b('0x20')](_0x489cb7['stack']);if(_0x489cb7[_0xd81b('0x31')]){delete _0x489cb7[_0xd81b('0x31')];}_0x12ee8f[_0xd81b('0x26')](_0x29aabf)[_0xd81b('0x32')](_0x489cb7);};}exports[_0xd81b('0x33')]=function(_0x221e1f,_0x1c20d3){var _0x2d23b9={},_0xf9d1a5={},_0xe88a33={'count':0x0,'rows':[]};var _0x1be4e2=db[_0xd81b('0x34')][_0xd81b('0x35')];_0xf9d1a5['model']=_['keys'](_0x1be4e2);var _0x413bf6={'dateStart':_0x221e1f[_0xd81b('0x36')][_0xd81b('0x37')],'dateEnd':_0x221e1f['query'][_0xd81b('0x38')]};delete _0x221e1f[_0xd81b('0x36')]['dateStart'];delete _0x221e1f[_0xd81b('0x36')][_0xd81b('0x38')];_0xf9d1a5['query']=_[_0xd81b('0x39')](_0x221e1f['query']);_0xf9d1a5[_0xd81b('0x3a')]=_[_0xd81b('0x3b')](_0xf9d1a5[_0xd81b('0x3c')],_0xf9d1a5[_0xd81b('0x36')]);_0x2d23b9['attributes']=_[_0xd81b('0x3b')](_0xf9d1a5[_0xd81b('0x3c')],qs[_0xd81b('0x3d')](_0x221e1f[_0xd81b('0x36')][_0xd81b('0x3d')]));_0x2d23b9[_0xd81b('0x3e')]=_0x2d23b9[_0xd81b('0x3e')]['length']?_0x2d23b9[_0xd81b('0x3e')]:_0xf9d1a5[_0xd81b('0x3c')];if(!_0x221e1f[_0xd81b('0x36')]['hasOwnProperty'](_0xd81b('0x3f'))){_0x2d23b9[_0xd81b('0x2a')]=qs[_0xd81b('0x2a')](_0x221e1f[_0xd81b('0x36')][_0xd81b('0x2a')]);_0x2d23b9['offset']=qs[_0xd81b('0x29')](_0x221e1f[_0xd81b('0x36')][_0xd81b('0x29')]);}_0x2d23b9[_0xd81b('0x40')]=qs[_0xd81b('0x41')](_0x221e1f[_0xd81b('0x36')][_0xd81b('0x41')]);_0x2d23b9[_0xd81b('0x42')]=qs[_0xd81b('0x3a')](_[_0xd81b('0x43')](_0x221e1f[_0xd81b('0x36')],_0xf9d1a5['filters']));if(_0x413bf6[_0xd81b('0x37')]){if(_0x413bf6[_0xd81b('0x38')]){_0x413bf6[_0xd81b('0x38')]=moment(_0x413bf6[_0xd81b('0x38')])[_0xd81b('0x44')](0x1,_0xd81b('0x45'));}else{_0x413bf6[_0xd81b('0x38')]=moment(_0x413bf6[_0xd81b('0x37')])['add'](0x1,'day');}_[_0xd81b('0x46')](_0x2d23b9[_0xd81b('0x42')],{'createdAt':{'$gte':_0x413bf6[_0xd81b('0x37')],'$lte':_0x413bf6[_0xd81b('0x38')]}});}if(_0x221e1f[_0xd81b('0x36')][_0xd81b('0x47')]){_0x2d23b9[_0xd81b('0x42')]=_[_0xd81b('0x46')](_0x2d23b9[_0xd81b('0x42')],{'$or':_[_0xd81b('0x48')](_0x2d23b9[_0xd81b('0x3e')],function(_0x38e436){var _0x47aa50={};_0x47aa50[_0x38e436]={'$like':'%'+_0x221e1f[_0xd81b('0x36')][_0xd81b('0x47')]+'%'};return _0x47aa50;})});}_0x2d23b9=_[_0xd81b('0x46')]({},_0x2d23b9,_0x221e1f[_0xd81b('0x49')]);var _0x105a48={'where':_0x2d23b9[_0xd81b('0x42')]};return db[_0xd81b('0x34')][_0xd81b('0x28')](_0x105a48)[_0xd81b('0x1b')](function(_0x53ea36){_0xe88a33[_0xd81b('0x28')]=_0x53ea36;if(_0x221e1f[_0xd81b('0x36')][_0xd81b('0x4a')]){_0x2d23b9[_0xd81b('0x4b')]=[{'all':!![]}];}return db['MailMessage'][_0xd81b('0x4c')](_0x2d23b9);})[_0xd81b('0x1b')](function(_0x15030b){_0xe88a33[_0xd81b('0x4d')]=_0x15030b;return _0xe88a33;})[_0xd81b('0x1b')](respondWithFilteredResult(_0x1c20d3,_0x2d23b9))[_0xd81b('0x24')](handleError(_0x1c20d3,null));};exports[_0xd81b('0x4e')]=function(_0x43d7ce,_0x133a76){var _0x49cba6={'raw':!![],'where':{'id':_0x43d7ce[_0xd81b('0x4f')]['id']}},_0x534d10={};_0x534d10[_0xd81b('0x3c')]=_[_0xd81b('0x39')](db[_0xd81b('0x34')][_0xd81b('0x35')]);_0x534d10[_0xd81b('0x36')]=_[_0xd81b('0x39')](_0x43d7ce[_0xd81b('0x36')]);_0x534d10['filters']=_[_0xd81b('0x3b')](_0x534d10[_0xd81b('0x3c')],_0x534d10[_0xd81b('0x36')]);_0x49cba6[_0xd81b('0x3e')]=_[_0xd81b('0x3b')](_0x534d10['model'],qs[_0xd81b('0x3d')](_0x43d7ce[_0xd81b('0x36')]['fields']));_0x49cba6[_0xd81b('0x3e')]=_0x49cba6[_0xd81b('0x3e')][_0xd81b('0x50')]?_0x49cba6[_0xd81b('0x3e')]:_0x534d10[_0xd81b('0x3c')];if(_0x43d7ce[_0xd81b('0x36')][_0xd81b('0x4a')]){_0x49cba6[_0xd81b('0x4b')]=[{'all':!![]}];}_0x49cba6=_[_0xd81b('0x46')]({},_0x49cba6,_0x43d7ce[_0xd81b('0x49')]);return db[_0xd81b('0x34')]['find'](_0x49cba6)[_0xd81b('0x1b')](handleEntityNotFound(_0x133a76,null))['then'](respondWithResult(_0x133a76,null))[_0xd81b('0x24')](handleError(_0x133a76,null));};exports[_0xd81b('0x30')]=function(_0x390db6,_0x3c2a9f){if(_0x390db6[_0xd81b('0x51')]['id']){delete _0x390db6[_0xd81b('0x51')]['id'];}return db['MailMessage'][_0xd81b('0x52')]({'where':{'id':_0x390db6[_0xd81b('0x4f')]['id']}})['then'](handleEntityNotFound(_0x3c2a9f,null))['then'](saveUpdates(_0x390db6[_0xd81b('0x51')],null))['then'](respondWithResult(_0x3c2a9f,null))[_0xd81b('0x24')](handleError(_0x3c2a9f,null));};exports['destroy']=function(_0x2914da,_0x315a66){return db[_0xd81b('0x34')]['find']({'where':{'id':_0x2914da[_0xd81b('0x4f')]['id']}})[_0xd81b('0x1b')](handleEntityNotFound(_0x315a66,null))['then'](removeEntity(_0x315a66,null))[_0xd81b('0x24')](handleError(_0x315a66,null));};exports[_0xd81b('0x53')]=function(_0x5951ec,_0x1ba5d6){return db['MailMessage'][_0xd81b('0x53')]()[_0xd81b('0x1b')](respondWithResult(_0x1ba5d6,null))[_0xd81b('0x24')](handleError(_0x1ba5d6,null));};exports[_0xd81b('0x54')]=function(_0x4add79,_0x32eab4){return db[_0xd81b('0x34')][_0xd81b('0x54')](_0x4add79[_0xd81b('0x51')])[_0xd81b('0x1b')](function(_0x5c4533){if(_0x5c4533){if(_0x5c4533[_0xd81b('0x55')]===_0xd81b('0x56')&&!_0x5c4533[_0xd81b('0x57')]){return db[_0xd81b('0x58')][_0xd81b('0x59')]({'where':{'id':_0x5c4533[_0xd81b('0x5a')]},'include':[{'model':db[_0xd81b('0x5b')],'as':'Smtp','raw':!![]}]})['then'](function(_0x5de22d){if(_0x5de22d&&_0x5de22d[_0xd81b('0x5c')]){var _0x12b0bf={'tls':{'rejectUnauthorized':![]}};if(_[_0xd81b('0x5d')](_0x5de22d[_0xd81b('0x5c')][_0xd81b('0x5e')])){_0x12b0bf[_0xd81b('0x5f')]=_0x5de22d[_0xd81b('0x5c')]['host'];_0x12b0bf[_0xd81b('0x60')]=_0x5de22d[_0xd81b('0x5c')][_0xd81b('0x60')];_0x12b0bf[_0xd81b('0x61')]=_0x5de22d[_0xd81b('0x5c')][_0xd81b('0x61')];if(_0x5de22d[_0xd81b('0x5c')]['authentication']){_0x12b0bf[_0xd81b('0x62')]={'user':_0x5de22d[_0xd81b('0x5c')][_0xd81b('0x63')],'pass':_0x5de22d[_0xd81b('0x5c')][_0xd81b('0x64')]};}}else{_0x12b0bf[_0xd81b('0x5e')]=_0x5de22d[_0xd81b('0x5c')][_0xd81b('0x5e')];_0x12b0bf[_0xd81b('0x62')]={'user':_0x5de22d[_0xd81b('0x5c')][_0xd81b('0x63')],'pass':_0x5de22d[_0xd81b('0x5c')]['pass']};_0x12b0bf[_0xd81b('0x61')]=_0x5de22d['Smtp'][_0xd81b('0x61')];}if(_0x4add79[_0xd81b('0x51')][_0xd81b('0x65')]&&_0x4add79[_0xd81b('0x51')][_0xd81b('0x65')][_0xd81b('0x50')]){for(var _0x336d9c=0x0;_0x336d9c<_0x4add79[_0xd81b('0x51')][_0xd81b('0x65')][_0xd81b('0x50')];_0x336d9c+=0x1){_0x4add79['body'][_0xd81b('0x65')][_0x336d9c]={'filename':_0x4add79[_0xd81b('0x51')][_0xd81b('0x65')][_0x336d9c][_0xd81b('0x31')],'path':path[_0xd81b('0x66')](config['root'],'server/files/attachments',_0x4add79[_0xd81b('0x51')][_0xd81b('0x65')][_0x336d9c][_0xd81b('0x67')])};}}return{'account':_0x12b0bf,'message':_0x4add79[_0xd81b('0x51')]};}})[_0xd81b('0x1b')](function(_0x1a95d5){if(_0x1a95d5){return respondWithRpcPromise(_0xd81b('0x68'),'sendMail',_0x1a95d5,client9003)[_0xd81b('0x1b')](function(_0x41ac46){return _0x5c4533[_0xd81b('0x30')]({'read':!![],'messageId':_0x41ac46[_0xd81b('0x69')],'sentAt':moment()[_0xd81b('0x6a')](_0xd81b('0x6b'))});})[_0xd81b('0x24')](function(_0x185f28){logger[_0xd81b('0x20')]('%s',JSON['stringify'](_0x185f28));return _0x5c4533;});}return _0x5c4533;});}return _0x5c4533;}})[_0xd81b('0x1b')](respondWithResult(_0x32eab4,0xc9))[_0xd81b('0x24')](handleError(_0x32eab4,null));};var interaction_log=require(_0xd81b('0xe'))(_0xd81b('0x6c'));exports[_0xd81b('0x6d')]=function(_0x5bbc49,_0x55492c,_0x16b2c2){var _0x4cc440={'channel':_0xd81b('0x6e')};if(_0x5bbc49[_0xd81b('0x51')]['id']){delete _0x5bbc49['body']['id'];}_0x5bbc49[_0xd81b('0x51')][_0xd81b('0x6f')]=!![];_0x5bbc49[_0xd81b('0x51')]['readAt']=moment()[_0xd81b('0x6a')](_0xd81b('0x6b'));_0x5bbc49[_0xd81b('0x51')]['UserId']=_0x5bbc49['body'][_0xd81b('0x70')]||_0x5bbc49[_0xd81b('0x63')]['id'];return db[_0xd81b('0x34')]['find']({'where':{'id':_0x5bbc49[_0xd81b('0x4f')]['id'],'UserId':null},'include':[{'model':db[_0xd81b('0x71')],'as':_0xd81b('0x72')}]})[_0xd81b('0x1b')](handleEntityNotFound(_0x55492c,null))['then'](saveUpdates(_0x5bbc49['body'],null))[_0xd81b('0x1b')](function(_0x256696){if(_0x256696){_0x4cc440[_0xd81b('0x22')]=_0x256696[_0xd81b('0x73')]({'plain':!![]});return db['MailInteraction'][_0xd81b('0x52')]({'where':{'id':_0x256696[_0xd81b('0x74')]}});}return null;})['then'](handleEntityNotFound(_0x55492c,null))[_0xd81b('0x1b')](function(_0x4e5bf4){if(_0x4e5bf4){return _0x4e5bf4[_0xd81b('0x30')]({'UserId':_0x5bbc49[_0xd81b('0x51')]['UserId'],'read1stAt':_[_0xd81b('0x5d')](_0x4e5bf4[_0xd81b('0x75')])?moment()[_0xd81b('0x6a')](_0xd81b('0x6b')):undefined});}return null;})[_0xd81b('0x1b')](function(_0x5d3ed5){if(_0x5d3ed5){_0x4cc440[_0xd81b('0x76')]=_0x5d3ed5[_0xd81b('0x73')]({'plain':!![]});interaction_log[_0xd81b('0x23')](_0xd81b('0x77'),_0x5bbc49[_0xd81b('0x63')]['id'],_0x5bbc49[_0xd81b('0x63')]['name'],_0x5bbc49['user'][_0xd81b('0x78')],_0x4cc440[_0xd81b('0x76')]['id'],_0x5bbc49[_0xd81b('0x51')]?JSON[_0xd81b('0x1f')](_0x5bbc49['body']):_0xd81b('0x79'));return respondWithRpcPromise(_0xd81b('0x7a'),_0xd81b('0x7b'),_0x4cc440);}return null;})[_0xd81b('0x1b')](function(_0xc6454a){if(_0xc6454a){if(_0x5bbc49['body'][_0xd81b('0x7c')]){_0x4cc440[_0xd81b('0x22')][_0xd81b('0x7d')]=util[_0xd81b('0x6a')](_0xd81b('0x7e'),_0x5bbc49[_0xd81b('0x63')][_0xd81b('0x31')]);_0x4cc440['message'][_0xd81b('0x7f')]=_0x4cc440[_0xd81b('0x7f')];_0x4cc440[_0xd81b('0x22')][_0xd81b('0x80')]=_0xd81b('0x6d');return respondWithRpcPromise(_0xd81b('0x81'),'EventManager',{'event':_0xd81b('0x82'),'message':_0x4cc440['message']},client9002)[_0xd81b('0x1b')](function(){return _0x4cc440;});}return _0x4cc440;}return null;})[_0xd81b('0x1b')](respondWithResult(_0x55492c,null))[_0xd81b('0x24')](handleError(_0x55492c,null));};var interaction_log=require('../../config/logger')(_0xd81b('0x6c'));exports[_0xd81b('0x2e')]=function(_0x3ee396,_0x5060dc,_0x254105){var _0x34283f={'agent':{},'channel':'mail'};if(_0x3ee396[_0xd81b('0x51')]['id']){delete _0x3ee396['body']['id'];}_0x3ee396['body'][_0xd81b('0x70')]=_0x3ee396[_0xd81b('0x51')][_0xd81b('0x70')]||_0x3ee396['user']['id'];_0x34283f[_0xd81b('0x83')]['id']=_0x3ee396[_0xd81b('0x51')][_0xd81b('0x70')];return db[_0xd81b('0x34')][_0xd81b('0x52')]({'where':{'id':_0x3ee396[_0xd81b('0x4f')]['id'],'UserId':null}})['then'](handleEntityNotFound(_0x5060dc,null))[_0xd81b('0x1b')](function(_0x4390c3){if(_0x4390c3){_0x34283f[_0xd81b('0x22')]=_0x4390c3[_0xd81b('0x73')]({'plain':!![]});return db[_0xd81b('0x84')][_0xd81b('0x52')]({'where':{'id':_0x4390c3[_0xd81b('0x74')]}});}return null;})[_0xd81b('0x1b')](handleEntityNotFound(_0x5060dc,null))[_0xd81b('0x1b')](function(_0x3162dc){if(_0x3162dc){_0x34283f[_0xd81b('0x76')]=_0x3162dc[_0xd81b('0x73')]({'plain':!![]});interaction_log[_0xd81b('0x23')](_0xd81b('0x85'),_0x3ee396[_0xd81b('0x63')]['id'],_0x3ee396['user'][_0xd81b('0x31')],_0x3ee396['user'][_0xd81b('0x78')],_0x34283f[_0xd81b('0x76')]['id'],_0x3ee396[_0xd81b('0x51')]?JSON[_0xd81b('0x1f')](_0x3ee396[_0xd81b('0x51')]):_0xd81b('0x79'));return respondWithRpcPromise('RejectMessage',_0xd81b('0x86'),_0x34283f);}return null;})[_0xd81b('0x1b')](function(_0x33720f){if(_0x33720f){_0x33720f[_0xd81b('0x22')][_0xd81b('0x7d')]=util[_0xd81b('0x6a')](_0xd81b('0x7e'),_0x3ee396[_0xd81b('0x63')][_0xd81b('0x31')]);_0x33720f[_0xd81b('0x22')][_0xd81b('0x7f')]=_0x34283f[_0xd81b('0x7f')];_0x33720f['message'][_0xd81b('0x80')]=_0xd81b('0x2e');respondWithRpcPromise(_0xd81b('0x81'),_0xd81b('0x81'),{'event':_0xd81b('0x87'),'message':_0x33720f['message']},client9002);return _0x34283f;}return null;})[_0xd81b('0x1b')](respondWithResult(_0x5060dc,null))[_0xd81b('0x24')](handleError(_0x5060dc,null));};
\ No newline at end of file
index b6e19f2..c72b5cc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7e4b=['remove','emit','hasOwnProperty','hook','events','../../mysqldb','setMaxListeners','save'];(function(_0x1d32e6,_0x1bdb17){var _0x34d70d=function(_0xd2c504){while(--_0xd2c504){_0x1d32e6['push'](_0x1d32e6['shift']());}};_0x34d70d(++_0x1bdb17);}(_0x7e4b,0x84));var _0xb7e4=function(_0x576b49,_0x3c2aed){_0x576b49=_0x576b49-0x0;var _0x3cd4cd=_0x7e4b[_0x576b49];return _0x3cd4cd;};'use strict';var EventEmitter=require(_0xb7e4('0x0'));var MailMessage=require(_0xb7e4('0x1'))['db']['MailMessage'];var MailMessageEvents=new EventEmitter();MailMessageEvents[_0xb7e4('0x2')](0x0);var events={'afterCreate':_0xb7e4('0x3'),'afterUpdate':'update','afterDestroy':_0xb7e4('0x4')};function emitEvent(_0x1d32fd){return function(_0x2fca1d,_0x32f781,_0xb51013){MailMessageEvents[_0xb7e4('0x5')](_0x1d32fd+':'+_0x2fca1d['id'],_0x2fca1d);MailMessageEvents[_0xb7e4('0x5')](_0x1d32fd,_0x2fca1d);_0xb51013(null);};}for(var e in events){if(events[_0xb7e4('0x6')](e)){var event=events[e];MailMessage[_0xb7e4('0x7')](e,emitEvent(event));}}module['exports']=MailMessageEvents;
\ No newline at end of file
+var _0xec46=['remove','emit','hasOwnProperty','exports','events','../../mysqldb','MailMessage','setMaxListeners'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0xec46,0x19c));var _0x6ec4=function(_0x4eafed,_0x26e2bc){_0x4eafed=_0x4eafed-0x0;var _0x159c85=_0xec46[_0x4eafed];return _0x159c85;};'use strict';var EventEmitter=require(_0x6ec4('0x0'));var MailMessage=require(_0x6ec4('0x1'))['db'][_0x6ec4('0x2')];var MailMessageEvents=new EventEmitter();MailMessageEvents[_0x6ec4('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x6ec4('0x4')};function emitEvent(_0x157723){return function(_0x86b9f8,_0x53bbed,_0x3471fa){MailMessageEvents[_0x6ec4('0x5')](_0x157723+':'+_0x86b9f8['id'],_0x86b9f8);MailMessageEvents['emit'](_0x157723,_0x86b9f8);_0x3471fa(null);};}for(var e in events){if(events[_0x6ec4('0x6')](e)){var event=events[e];MailMessage['hook'](e,emitEvent(event));}}module[_0x6ec4('0x7')]=MailMessageEvents;
\ No newline at end of file
index dd83d12..bd2ef5a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x52ad=['utf8mb4','utf8mb4_unicode_ci','../../config/logger','moment','bluebird','request-promise','exports','define','mail_messages','messageId'];(function(_0x5c351c,_0x2046d8){var _0x26f3b3=function(_0x47ac18){while(--_0x47ac18){_0x5c351c['push'](_0x5c351c['shift']());}};_0x26f3b3(++_0x2046d8);}(_0x52ad,0xd4));var _0xd52a=function(_0x4754be,_0xf6f5a5){_0x4754be=_0x4754be-0x0;var _0x1959e2=_0x52ad[_0x4754be];return _0x1959e2;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xd52a('0x0'))('api');var moment=require(_0xd52a('0x1'));var BPromise=require(_0xd52a('0x2'));var rp=require(_0xd52a('0x3'));var attributes=require('./mailMessage.attributes');module[_0xd52a('0x4')]=function(_0x503160,_0x25cb54){return _0x503160[_0xd52a('0x5')]('MailMessage',attributes,{'tableName':_0xd52a('0x6'),'paranoid':![],'indexes':[{'name':_0xd52a('0x7'),'fields':[_0xd52a('0x7')]}],'timestamps':!![],'charset':_0xd52a('0x8'),'collate':_0xd52a('0x9')});};
\ No newline at end of file
+var _0x5437=['request-promise','./mailMessage.attributes','exports','define','mail_messages','messageId','utf8mb4','utf8mb4_unicode_ci','lodash','util','api','bluebird'];(function(_0xb0643f,_0x285b5a){var _0x44bc63=function(_0x40a8f7){while(--_0x40a8f7){_0xb0643f['push'](_0xb0643f['shift']());}};_0x44bc63(++_0x285b5a);}(_0x5437,0x110));var _0x7543=function(_0x18ae6d,_0x255d00){_0x18ae6d=_0x18ae6d-0x0;var _0x3deb94=_0x5437[_0x18ae6d];return _0x3deb94;};'use strict';var _=require(_0x7543('0x0'));var util=require(_0x7543('0x1'));var logger=require('../../config/logger')(_0x7543('0x2'));var moment=require('moment');var BPromise=require(_0x7543('0x3'));var rp=require(_0x7543('0x4'));var attributes=require(_0x7543('0x5'));module[_0x7543('0x6')]=function(_0x24008c,_0x2dc1e0){return _0x24008c[_0x7543('0x7')]('MailMessage',attributes,{'tableName':_0x7543('0x8'),'paranoid':![],'indexes':[{'name':'messageId','fields':[_0x7543('0x9')]}],'timestamps':!![],'charset':_0x7543('0xa'),'collate':_0x7543('0xb')});};
\ No newline at end of file
index 652cef2..17fac4b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1b16=['register','then','info','MailMessage,\x20%s,\x20%s','debug','MailMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','CreateMailMessage','MailMessage','create','body','options','raw','lodash','util','bluebird','../../mysqldb','../../config/logger','client','http','socket.io-emitter','localhost','./mailMessage.socket'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x1b16,0x146));var _0x61b1=function(_0x5defa0,_0x107c99){_0x5defa0=_0x5defa0-0x0;var _0x1517d9=_0x1b16[_0x5defa0];return _0x1517d9;};'use strict';var _=require(_0x61b1('0x0'));var util=require(_0x61b1('0x1'));var moment=require('moment');var BPromise=require(_0x61b1('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x61b1('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x61b1('0x4'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x61b1('0x5')][_0x61b1('0x6')]({'port':0x232a});var socket=require(_0x61b1('0x7'))({'host':_0x61b1('0x8'),'port':0x18eb});require(_0x61b1('0x9'))[_0x61b1('0xa')](socket);function respondWithRpcPromise(_0x31602c,_0x11d391,_0x4321d2){return new BPromise(function(_0x4a3408,_0x47f759){return client['request'](_0x31602c,_0x4321d2)[_0x61b1('0xb')](function(_0x311cda){logger[_0x61b1('0xc')](_0x61b1('0xd'),_0x11d391,'request\x20sent');logger[_0x61b1('0xe')](_0x61b1('0xf'),_0x11d391,_0x61b1('0x10'),JSON[_0x61b1('0x11')](_0x311cda));if(_0x311cda['error']){if(_0x311cda[_0x61b1('0x12')][_0x61b1('0x13')]===0x1f4){logger[_0x61b1('0x12')](_0x61b1('0xd'),_0x11d391,_0x311cda['error'][_0x61b1('0x14')]);return _0x47f759(_0x311cda[_0x61b1('0x12')][_0x61b1('0x14')]);}logger[_0x61b1('0x12')]('MailMessage,\x20%s,\x20%s',_0x11d391,_0x311cda[_0x61b1('0x12')][_0x61b1('0x14')]);return _0x4a3408(_0x311cda[_0x61b1('0x12')][_0x61b1('0x14')]);}else{logger[_0x61b1('0xc')](_0x61b1('0xd'),_0x11d391,_0x61b1('0x10'));_0x4a3408(_0x311cda['result'][_0x61b1('0x14')]);}})[_0x61b1('0x15')](function(_0x1500a7){logger[_0x61b1('0x12')](_0x61b1('0xd'),_0x11d391,_0x1500a7);_0x47f759(_0x1500a7);});});}exports[_0x61b1('0x16')]=function(_0x4d9971){var _0x534721=this;return new Promise(function(_0x15a51e,_0xc9f5){return db[_0x61b1('0x17')][_0x61b1('0x18')](_0x4d9971[_0x61b1('0x19')],{'raw':_0x4d9971[_0x61b1('0x1a')]?_0x4d9971['options'][_0x61b1('0x1b')]===undefined?!![]:![]:!![]})[_0x61b1('0xb')](function(_0x3f7327){logger[_0x61b1('0xc')]('CreateMailMessage',_0x4d9971);logger['debug'](_0x61b1('0x16'),_0x4d9971,JSON[_0x61b1('0x11')](_0x3f7327));_0x15a51e(_0x3f7327);})[_0x61b1('0x15')](function(_0x551044){logger[_0x61b1('0x12')](_0x61b1('0x16'),_0x551044[_0x61b1('0x14')],_0x4d9971);_0xc9f5(_0x534721['error'](0x1f4,_0x551044[_0x61b1('0x14')]));});});};
\ No newline at end of file
+var _0x2f40=['register','request','info','MailMessage,\x20%s,\x20%s','request\x20sent','debug','MailMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','CreateMailMessage','MailMessage','create','body','options','then','lodash','util','moment','../../mysqldb','../../config/logger','rpc','../../config/environment','client','socket.io-emitter','localhost','./mailMessage.socket'];(function(_0x2a5a9a,_0x3acaec){var _0x14e262=function(_0x410599){while(--_0x410599){_0x2a5a9a['push'](_0x2a5a9a['shift']());}};_0x14e262(++_0x3acaec);}(_0x2f40,0x1c5));var _0x02f4=function(_0x5783f4,_0x4a9e0a){_0x5783f4=_0x5783f4-0x0;var _0x28e380=_0x2f40[_0x5783f4];return _0x28e380;};'use strict';var _=require(_0x02f4('0x0'));var util=require(_0x02f4('0x1'));var moment=require(_0x02f4('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0x02f4('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x02f4('0x4'))(_0x02f4('0x5'));var config=require(_0x02f4('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x02f4('0x7')]['http']({'port':0x232a});var socket=require(_0x02f4('0x8'))({'host':_0x02f4('0x9'),'port':0x18eb});require(_0x02f4('0xa'))[_0x02f4('0xb')](socket);function respondWithRpcPromise(_0x3d6484,_0x3afb63,_0x4ba84a){return new BPromise(function(_0x16ce26,_0x3a562d){return client[_0x02f4('0xc')](_0x3d6484,_0x4ba84a)['then'](function(_0x3b66c4){logger[_0x02f4('0xd')](_0x02f4('0xe'),_0x3afb63,_0x02f4('0xf'));logger[_0x02f4('0x10')](_0x02f4('0x11'),_0x3afb63,_0x02f4('0xf'),JSON[_0x02f4('0x12')](_0x3b66c4));if(_0x3b66c4[_0x02f4('0x13')]){if(_0x3b66c4[_0x02f4('0x13')][_0x02f4('0x14')]===0x1f4){logger[_0x02f4('0x13')](_0x02f4('0xe'),_0x3afb63,_0x3b66c4['error']['message']);return _0x3a562d(_0x3b66c4[_0x02f4('0x13')][_0x02f4('0x15')]);}logger[_0x02f4('0x13')](_0x02f4('0xe'),_0x3afb63,_0x3b66c4['error'][_0x02f4('0x15')]);return _0x16ce26(_0x3b66c4['error'][_0x02f4('0x15')]);}else{logger[_0x02f4('0xd')](_0x02f4('0xe'),_0x3afb63,_0x02f4('0xf'));_0x16ce26(_0x3b66c4['result'][_0x02f4('0x15')]);}})[_0x02f4('0x16')](function(_0x48d14a){logger['error'](_0x02f4('0xe'),_0x3afb63,_0x48d14a);_0x3a562d(_0x48d14a);});});}exports[_0x02f4('0x17')]=function(_0x28a87d){var _0x4089fc=this;return new Promise(function(_0x266ccd,_0x391c76){return db[_0x02f4('0x18')][_0x02f4('0x19')](_0x28a87d[_0x02f4('0x1a')],{'raw':_0x28a87d[_0x02f4('0x1b')]?_0x28a87d[_0x02f4('0x1b')]['raw']===undefined?!![]:![]:!![]})[_0x02f4('0x1c')](function(_0x5717db){logger[_0x02f4('0xd')]('CreateMailMessage',_0x28a87d);logger[_0x02f4('0x10')](_0x02f4('0x17'),_0x28a87d,JSON[_0x02f4('0x12')](_0x5717db));_0x266ccd(_0x5717db);})['catch'](function(_0x53e301){logger[_0x02f4('0x13')]('CreateMailMessage',_0x53e301[_0x02f4('0x15')],_0x28a87d);_0x391c76(_0x4089fc[_0x02f4('0x13')](0x1f4,_0x53e301['message']));});});};
\ No newline at end of file
index c1391c8..c238802 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2144=['length','mailMessage:','./mailMessage.events','save','remove','update','emit','removeListener'];(function(_0x24618a,_0x2cd0f4){var _0x2e3d64=function(_0x28c59c){while(--_0x28c59c){_0x24618a['push'](_0x24618a['shift']());}};_0x2e3d64(++_0x2cd0f4);}(_0x2144,0xfa));var _0x4214=function(_0x1f75a4,_0x220814){_0x1f75a4=_0x1f75a4-0x0;var _0x3e3309=_0x2144[_0x1f75a4];return _0x3e3309;};'use strict';var MailMessageEvents=require(_0x4214('0x0'));var events=[_0x4214('0x1'),_0x4214('0x2'),_0x4214('0x3')];function createListener(_0x244725,_0x2839e1){return function(_0x29c814){_0x2839e1[_0x4214('0x4')](_0x244725,_0x29c814);};}function removeListener(_0xb74f5,_0x40d444){return function(){MailMessageEvents[_0x4214('0x5')](_0xb74f5,_0x40d444);};}exports['register']=function(_0x537148){for(var _0x218206=0x0,_0x310069=events[_0x4214('0x6')];_0x218206<_0x310069;_0x218206++){var _0x128f6c=events[_0x218206];var _0xb07e13=createListener(_0x4214('0x7')+_0x128f6c,_0x537148);MailMessageEvents['on'](_0x128f6c,_0xb07e13);}};
\ No newline at end of file
+var _0xdfa0=['./mailMessage.events','remove','update','emit','register','length','mailMessage:'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0xdfa0,0x69));var _0x0dfa=function(_0x192e9a,_0x44de03){_0x192e9a=_0x192e9a-0x0;var _0x5203bb=_0xdfa0[_0x192e9a];return _0x5203bb;};'use strict';var MailMessageEvents=require(_0x0dfa('0x0'));var events=['save',_0x0dfa('0x1'),_0x0dfa('0x2')];function createListener(_0x4cd9ac,_0x139d96){return function(_0x45a28e){_0x139d96[_0x0dfa('0x3')](_0x4cd9ac,_0x45a28e);};}function removeListener(_0x4dbbab,_0x373c4e){return function(){MailMessageEvents['removeListener'](_0x4dbbab,_0x373c4e);};}exports[_0x0dfa('0x4')]=function(_0x2efe20){for(var _0x4830b6=0x0,_0x417f7a=events[_0x0dfa('0x5')];_0x4830b6<_0x417f7a;_0x4830b6++){var _0x32280b=events[_0x4830b6];var _0x16070c=createListener(_0x0dfa('0x6')+_0x32280b,_0x2efe20);MailMessageEvents['on'](_0x32280b,_0x16070c);}};
\ No newline at end of file
index 90ea1c6..50e59b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5eee=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailQueue.controller','get','index','describe','/:id','/:id/members','getMembers','/:id/teams','isAuthenticated','/:id/users','addTeams','post','addAgents','put','update','delete','destroy','removeTeams','removeAgents','multer','util','path','express'];(function(_0x3256af,_0x2ee873){var _0x4a777e=function(_0x5f2705){while(--_0x5f2705){_0x3256af['push'](_0x3256af['shift']());}};_0x4a777e(++_0x2ee873);}(_0x5eee,0xb9));var _0xe5ee=function(_0x18f95d,_0x457ee9){_0x18f95d=_0x18f95d-0x0;var _0x11c03f=_0x5eee[_0x18f95d];return _0x11c03f;};'use strict';var multer=require(_0xe5ee('0x0'));var util=require(_0xe5ee('0x1'));var path=require(_0xe5ee('0x2'));var express=require(_0xe5ee('0x3'));var router=express[_0xe5ee('0x4')]();var auth=require(_0xe5ee('0x5'));var interaction=require(_0xe5ee('0x6'));var config=require(_0xe5ee('0x7'));var controller=require(_0xe5ee('0x8'));router[_0xe5ee('0x9')]('/',auth['isAuthenticated'](),controller[_0xe5ee('0xa')]);router[_0xe5ee('0x9')]('/describe',auth['isAuthenticated'](),controller[_0xe5ee('0xb')]);router[_0xe5ee('0x9')](_0xe5ee('0xc'),auth['isAuthenticated'](),controller['show']);router[_0xe5ee('0x9')](_0xe5ee('0xd'),auth['isAuthenticated'](),controller[_0xe5ee('0xe')]);router[_0xe5ee('0x9')](_0xe5ee('0xf'),auth[_0xe5ee('0x10')](),controller['getTeams']);router[_0xe5ee('0x9')](_0xe5ee('0x11'),auth['isAuthenticated'](),controller['getAgents']);router['post']('/',auth[_0xe5ee('0x10')](),controller['create']);router['post'](_0xe5ee('0xf'),auth[_0xe5ee('0x10')](),controller[_0xe5ee('0x12')]);router[_0xe5ee('0x13')]('/:id/users',auth['isAuthenticated'](),controller[_0xe5ee('0x14')]);router[_0xe5ee('0x15')](_0xe5ee('0xc'),auth[_0xe5ee('0x10')](),controller[_0xe5ee('0x16')]);router[_0xe5ee('0x17')](_0xe5ee('0xc'),auth[_0xe5ee('0x10')](),controller[_0xe5ee('0x18')]);router['delete'](_0xe5ee('0xf'),auth[_0xe5ee('0x10')](),controller[_0xe5ee('0x19')]);router['delete']('/:id/users',auth['isAuthenticated'](),controller[_0xe5ee('0x1a')]);module['exports']=router;
\ No newline at end of file
+var _0xe209=['path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailQueue.controller','isAuthenticated','index','get','/describe','describe','/:id','getTeams','/:id/users','getAgents','post','/:id/teams','addTeams','addAgents','put','update','delete','destroy','removeAgents','exports','multer'];(function(_0x138f59,_0x1b53fb){var _0x3d114d=function(_0x1f9461){while(--_0x1f9461){_0x138f59['push'](_0x138f59['shift']());}};_0x3d114d(++_0x1b53fb);}(_0xe209,0x16b));var _0x9e20=function(_0x5cf9f8,_0x3fe8cd){_0x5cf9f8=_0x5cf9f8-0x0;var _0x2a0c94=_0xe209[_0x5cf9f8];return _0x2a0c94;};'use strict';var multer=require(_0x9e20('0x0'));var util=require('util');var path=require(_0x9e20('0x1'));var express=require(_0x9e20('0x2'));var router=express['Router']();var auth=require(_0x9e20('0x3'));var interaction=require(_0x9e20('0x4'));var config=require(_0x9e20('0x5'));var controller=require(_0x9e20('0x6'));router['get']('/',auth[_0x9e20('0x7')](),controller[_0x9e20('0x8')]);router[_0x9e20('0x9')](_0x9e20('0xa'),auth[_0x9e20('0x7')](),controller[_0x9e20('0xb')]);router['get'](_0x9e20('0xc'),auth['isAuthenticated'](),controller['show']);router['get']('/:id/members',auth['isAuthenticated'](),controller['getMembers']);router[_0x9e20('0x9')]('/:id/teams',auth[_0x9e20('0x7')](),controller[_0x9e20('0xd')]);router['get'](_0x9e20('0xe'),auth[_0x9e20('0x7')](),controller[_0x9e20('0xf')]);router[_0x9e20('0x10')]('/',auth[_0x9e20('0x7')](),controller['create']);router[_0x9e20('0x10')](_0x9e20('0x11'),auth[_0x9e20('0x7')](),controller[_0x9e20('0x12')]);router[_0x9e20('0x10')](_0x9e20('0xe'),auth[_0x9e20('0x7')](),controller[_0x9e20('0x13')]);router[_0x9e20('0x14')](_0x9e20('0xc'),auth[_0x9e20('0x7')](),controller[_0x9e20('0x15')]);router[_0x9e20('0x16')](_0x9e20('0xc'),auth[_0x9e20('0x7')](),controller[_0x9e20('0x17')]);router[_0x9e20('0x16')](_0x9e20('0x11'),auth[_0x9e20('0x7')](),controller['removeTeams']);router[_0x9e20('0x16')](_0x9e20('0xe'),auth[_0x9e20('0x7')](),controller[_0x9e20('0x18')]);module[_0x9e20('0x19')]=router;
\ No newline at end of file
index dfd0448..08f7d7e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe87d=['name','INTEGER','ENUM','rrmemory','beepall','roundrobin','sequelize','STRING'];(function(_0x372565,_0x2a36f3){var _0x131494=function(_0x996ce7){while(--_0x996ce7){_0x372565['push'](_0x372565['shift']());}};_0x131494(++_0x2a36f3);}(_0xe87d,0x116));var _0xde87=function(_0x11b3c3,_0x4a3521){_0x11b3c3=_0x11b3c3-0x0;var _0x438d0b=_0xe87d[_0x11b3c3];return _0x438d0b;};'use strict';var Sequelize=require(_0xde87('0x0'));module['exports']={'name':{'type':Sequelize[_0xde87('0x1')],'unique':_0xde87('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xde87('0x1')]},'timeout':{'type':Sequelize[_0xde87('0x3')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xde87('0x4')](_0xde87('0x5'),_0xde87('0x6'),_0xde87('0x7'))}};
\ No newline at end of file
+var _0x5a5d=['roundrobin','exports','name','STRING','INTEGER','ENUM','rrmemory','beepall'];(function(_0x17928f,_0x4ad33f){var _0x500b63=function(_0x127644){while(--_0x127644){_0x17928f['push'](_0x17928f['shift']());}};_0x500b63(++_0x4ad33f);}(_0x5a5d,0x171));var _0xd5a5=function(_0x1694f5,_0x49b7c3){_0x1694f5=_0x1694f5-0x0;var _0x5b4321=_0x5a5d[_0x1694f5];return _0x5b4321;};'use strict';var Sequelize=require('sequelize');module[_0xd5a5('0x0')]={'name':{'type':Sequelize['STRING'],'unique':_0xd5a5('0x1'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xd5a5('0x2')]},'timeout':{'type':Sequelize[_0xd5a5('0x3')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xd5a5('0x4')](_0xd5a5('0x5'),_0xd5a5('0x6'),_0xd5a5('0x7'))}};
\ No newline at end of file
index 7d7aaa3..77a007d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e78=['count','offset','limit','set','apply','reject','save','update','then','destroy','error','stack','name','send','index','MailQueue','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','attributes','model','fields','hasOwnProperty','nolimit','sort','where','pick','add','day','merge','filter','map','options','includeAll','include','findAll','rows','catch','show','params','length','find','create','body','describe','getMembers','findOne','get','order','MailQueueId','UserMailQueue','User','findAndCountAll','UserId','agent','mailPause','createdAt','getTeams','Team','addTeams','Agents','addAgents','penalty','ids','removeTeams','union','removeAgents','spread','emit','userMailQueue:remove','getAgents','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','socket.io-emitter','localhost','./mailQueue.socket','sendStatus','end','status','json'];(function(_0x258dcc,_0x3fa04f){var _0x573399=function(_0x27ee52){while(--_0x27ee52){_0x258dcc['push'](_0x258dcc['shift']());}};_0x573399(++_0x3fa04f);}(_0x4e78,0x1e7));var _0x84e7=function(_0x18cac4,_0x57a4d5){_0x18cac4=_0x18cac4-0x0;var _0x2227c6=_0x4e78[_0x18cac4];return _0x2227c6;};'use strict';var jsonpatch=require(_0x84e7('0x0'));var rp=require(_0x84e7('0x1'));var moment=require('moment');var BPromise=require(_0x84e7('0x2'));var Mustache=require(_0x84e7('0x3'));var util=require(_0x84e7('0x4'));var path=require(_0x84e7('0x5'));var sox=require(_0x84e7('0x6'));var csv=require('to-csv');var ejs=require(_0x84e7('0x7'));var fs=require('fs');var _=require(_0x84e7('0x8'));var squel=require(_0x84e7('0x9'));var crypto=require(_0x84e7('0xa'));var jsforce=require(_0x84e7('0xb'));var deskjs=require(_0x84e7('0xc'));var toCsv=require(_0x84e7('0xd'));var querystring=require(_0x84e7('0xe'));var Papa=require(_0x84e7('0xf'));var qs=require(_0x84e7('0x10'));var logger=require(_0x84e7('0x11'))(_0x84e7('0x12'));var utils=require(_0x84e7('0x13'));var config=require('../../config/environment');var db=require(_0x84e7('0x14'))['db'];var socket=require(_0x84e7('0x15'))({'host':_0x84e7('0x16'),'port':0x18eb});require(_0x84e7('0x17'))['register'](socket);function respondWithStatusCode(_0xf2f19e,_0x1d03fa){_0x1d03fa=_0x1d03fa||0xcc;return function(_0x5a99d1){if(_0x5a99d1){return _0xf2f19e[_0x84e7('0x18')](_0x1d03fa);}return _0xf2f19e['status'](_0x1d03fa)[_0x84e7('0x19')]();};}function respondWithResult(_0x55dea0,_0x4a9330){_0x4a9330=_0x4a9330||0xc8;return function(_0x29e551){if(_0x29e551){return _0x55dea0[_0x84e7('0x1a')](_0x4a9330)[_0x84e7('0x1b')](_0x29e551);}};}function respondWithFilteredResult(_0x15b144,_0x420866){return function(_0x3e92e1){if(_0x3e92e1){var _0x97e228=_0x3e92e1[_0x84e7('0x1c')],_0x12ed87=_0x420866[_0x84e7('0x1d')],_0x50033c=_0x420866['offset']+_0x420866[_0x84e7('0x1e')],_0x3b7104;if(_0x50033c>=_0x97e228){_0x50033c=_0x97e228;_0x3b7104=0xc8;}else{_0x3b7104=0xce;}_0x15b144['status'](_0x3b7104);return _0x15b144[_0x84e7('0x1f')]('Content-Range',_0x12ed87+'-'+_0x50033c+'/'+_0x97e228)[_0x84e7('0x1b')](_0x3e92e1);}return null;};}function patchUpdates(_0x192162){return function(_0x2df333){try{jsonpatch[_0x84e7('0x20')](_0x2df333,_0x192162,!![]);}catch(_0xdf265){return BPromise[_0x84e7('0x21')](_0xdf265);}return _0x2df333[_0x84e7('0x22')]();};}function saveUpdates(_0x21ff13,_0x1612ff){return function(_0x195466){if(_0x195466){return _0x195466[_0x84e7('0x23')](_0x21ff13)[_0x84e7('0x24')](function(_0x1fd4b1){return _0x1fd4b1;});}return null;};}function removeEntity(_0x52e0dd,_0x520361){return function(_0x1b6e98){if(_0x1b6e98){return _0x1b6e98[_0x84e7('0x25')]()[_0x84e7('0x24')](function(){_0x52e0dd[_0x84e7('0x1a')](0xcc)[_0x84e7('0x19')]();});}};}function handleEntityNotFound(_0x2897bd,_0x596306){return function(_0x35d7d8){if(!_0x35d7d8){_0x2897bd[_0x84e7('0x18')](0x194);}return _0x35d7d8;};}function handleError(_0x43d730,_0xe12649){_0xe12649=_0xe12649||0x1f4;return function(_0x23f775){logger[_0x84e7('0x26')](_0x23f775[_0x84e7('0x27')]);if(_0x23f775[_0x84e7('0x28')]){delete _0x23f775[_0x84e7('0x28')];}_0x43d730['status'](_0xe12649)[_0x84e7('0x29')](_0x23f775);};}exports[_0x84e7('0x2a')]=function(_0x232bba,_0xc9d0f0){var _0x261e0f={},_0x34c241={},_0x4043f8={'count':0x0,'rows':[]};var _0x5ec58a=db[_0x84e7('0x2b')][_0x84e7('0x2c')];_0x34c241['model']=_[_0x84e7('0x2d')](_0x5ec58a);var _0x482e0c={'dateStart':_0x232bba[_0x84e7('0x2e')][_0x84e7('0x2f')],'dateEnd':_0x232bba[_0x84e7('0x2e')][_0x84e7('0x30')]};delete _0x232bba[_0x84e7('0x2e')]['dateStart'];delete _0x232bba[_0x84e7('0x2e')][_0x84e7('0x30')];_0x34c241[_0x84e7('0x2e')]=_['keys'](_0x232bba['query']);_0x34c241[_0x84e7('0x31')]=_[_0x84e7('0x32')](_0x34c241['model'],_0x34c241[_0x84e7('0x2e')]);_0x261e0f[_0x84e7('0x33')]=_[_0x84e7('0x32')](_0x34c241[_0x84e7('0x34')],qs['fields'](_0x232bba[_0x84e7('0x2e')][_0x84e7('0x35')]));_0x261e0f[_0x84e7('0x33')]=_0x261e0f[_0x84e7('0x33')]['length']?_0x261e0f['attributes']:_0x34c241['model'];if(!_0x232bba['query'][_0x84e7('0x36')](_0x84e7('0x37'))){_0x261e0f[_0x84e7('0x1e')]=qs[_0x84e7('0x1e')](_0x232bba['query'][_0x84e7('0x1e')]);_0x261e0f[_0x84e7('0x1d')]=qs[_0x84e7('0x1d')](_0x232bba[_0x84e7('0x2e')]['offset']);}_0x261e0f['order']=qs['sort'](_0x232bba[_0x84e7('0x2e')][_0x84e7('0x38')]);_0x261e0f[_0x84e7('0x39')]=qs[_0x84e7('0x31')](_[_0x84e7('0x3a')](_0x232bba['query'],_0x34c241['filters']));if(_0x482e0c[_0x84e7('0x2f')]){if(_0x482e0c[_0x84e7('0x30')]){_0x482e0c[_0x84e7('0x30')]=moment(_0x482e0c[_0x84e7('0x30')])[_0x84e7('0x3b')](0x1,_0x84e7('0x3c'));}else{_0x482e0c['dateEnd']=moment(_0x482e0c[_0x84e7('0x2f')])[_0x84e7('0x3b')](0x1,_0x84e7('0x3c'));}_[_0x84e7('0x3d')](_0x261e0f[_0x84e7('0x39')],{'createdAt':{'$gte':_0x482e0c['dateStart'],'$lte':_0x482e0c[_0x84e7('0x30')]}});}if(_0x232bba[_0x84e7('0x2e')][_0x84e7('0x3e')]){_0x261e0f[_0x84e7('0x39')]=_[_0x84e7('0x3d')](_0x261e0f[_0x84e7('0x39')],{'$or':_[_0x84e7('0x3f')](_0x261e0f[_0x84e7('0x33')],function(_0x18ce7e){var _0x1be3bc={};_0x1be3bc[_0x18ce7e]={'$like':'%'+_0x232bba[_0x84e7('0x2e')][_0x84e7('0x3e')]+'%'};return _0x1be3bc;})});}_0x261e0f=_[_0x84e7('0x3d')]({},_0x261e0f,_0x232bba[_0x84e7('0x40')]);var _0xa7cef4={'where':_0x261e0f[_0x84e7('0x39')]};return db[_0x84e7('0x2b')][_0x84e7('0x1c')](_0xa7cef4)[_0x84e7('0x24')](function(_0x17d7f4){_0x4043f8[_0x84e7('0x1c')]=_0x17d7f4;if(_0x232bba[_0x84e7('0x2e')][_0x84e7('0x41')]){_0x261e0f[_0x84e7('0x42')]=[{'all':!![]}];}return db[_0x84e7('0x2b')][_0x84e7('0x43')](_0x261e0f);})[_0x84e7('0x24')](function(_0x3852a2){_0x4043f8[_0x84e7('0x44')]=_0x3852a2;return _0x4043f8;})[_0x84e7('0x24')](respondWithFilteredResult(_0xc9d0f0,_0x261e0f))[_0x84e7('0x45')](handleError(_0xc9d0f0,null));};exports[_0x84e7('0x46')]=function(_0x35699b,_0x35cd06){var _0x8ecb0c={'raw':!![],'where':{'id':_0x35699b[_0x84e7('0x47')]['id']}},_0x577150={};_0x577150[_0x84e7('0x34')]=_[_0x84e7('0x2d')](db[_0x84e7('0x2b')][_0x84e7('0x2c')]);_0x577150[_0x84e7('0x2e')]=_[_0x84e7('0x2d')](_0x35699b[_0x84e7('0x2e')]);_0x577150[_0x84e7('0x31')]=_['intersection'](_0x577150[_0x84e7('0x34')],_0x577150['query']);_0x8ecb0c['attributes']=_[_0x84e7('0x32')](_0x577150[_0x84e7('0x34')],qs[_0x84e7('0x35')](_0x35699b[_0x84e7('0x2e')]['fields']));_0x8ecb0c[_0x84e7('0x33')]=_0x8ecb0c[_0x84e7('0x33')][_0x84e7('0x48')]?_0x8ecb0c[_0x84e7('0x33')]:_0x577150[_0x84e7('0x34')];if(_0x35699b['query'][_0x84e7('0x41')]){_0x8ecb0c[_0x84e7('0x42')]=[{'all':!![]}];}_0x8ecb0c=_['merge']({},_0x8ecb0c,_0x35699b['options']);return db[_0x84e7('0x2b')][_0x84e7('0x49')](_0x8ecb0c)[_0x84e7('0x24')](handleEntityNotFound(_0x35cd06,null))[_0x84e7('0x24')](respondWithResult(_0x35cd06,null))[_0x84e7('0x45')](handleError(_0x35cd06,null));};exports[_0x84e7('0x4a')]=function(_0x3f57e1,_0x47c5b8){return db[_0x84e7('0x2b')][_0x84e7('0x4a')](_0x3f57e1[_0x84e7('0x4b')],{})[_0x84e7('0x24')](respondWithResult(_0x47c5b8,0xc9))['catch'](handleError(_0x47c5b8,null));};exports[_0x84e7('0x23')]=function(_0x2b2371,_0x14693b){if(_0x2b2371[_0x84e7('0x4b')]['id']){delete _0x2b2371['body']['id'];}return db['MailQueue'][_0x84e7('0x49')]({'where':{'id':_0x2b2371[_0x84e7('0x47')]['id']}})[_0x84e7('0x24')](handleEntityNotFound(_0x14693b,null))[_0x84e7('0x24')](saveUpdates(_0x2b2371['body'],null))['then'](respondWithResult(_0x14693b,null))[_0x84e7('0x45')](handleError(_0x14693b,null));};exports[_0x84e7('0x25')]=function(_0x318eb9,_0x28f07a){return db[_0x84e7('0x2b')][_0x84e7('0x49')]({'where':{'id':_0x318eb9[_0x84e7('0x47')]['id']}})[_0x84e7('0x24')](handleEntityNotFound(_0x28f07a,null))[_0x84e7('0x24')](removeEntity(_0x28f07a,null))['catch'](handleError(_0x28f07a,null));};exports[_0x84e7('0x4c')]=function(_0x33778b,_0x2a045a){return db['MailQueue']['describe']()['then'](respondWithResult(_0x2a045a,null))['catch'](handleError(_0x2a045a,null));};exports[_0x84e7('0x4d')]=function(_0x584786,_0x4bdae0,_0x11e5db){var _0x3bd147={'raw':!![],'where':{}},_0xff1435={},_0x2e137c;return db[_0x84e7('0x2b')][_0x84e7('0x4e')]({'where':{'id':_0x584786['params']['id']}})[_0x84e7('0x24')](handleEntityNotFound(_0x4bdae0,null))[_0x84e7('0x24')](function(_0x2fd587){if(_0x2fd587){_0x2e137c=_0x2fd587[_0x84e7('0x4f')]({'plain':!![]});_0xff1435[_0x84e7('0x34')]=_['keys'](db['UserMailQueue'][_0x84e7('0x2c')]);_0xff1435['query']=_[_0x84e7('0x2d')](_0x584786[_0x84e7('0x2e')]);_0xff1435['filters']=_[_0x84e7('0x32')](_0xff1435['model'],_0xff1435[_0x84e7('0x2e')]);_0x3bd147[_0x84e7('0x33')]=_[_0x84e7('0x32')](_0xff1435[_0x84e7('0x34')],qs[_0x84e7('0x35')](_0x584786[_0x84e7('0x2e')][_0x84e7('0x35')]));_0x3bd147[_0x84e7('0x33')]=_0x3bd147[_0x84e7('0x33')][_0x84e7('0x48')]?_0x3bd147['attributes']:_0xff1435[_0x84e7('0x34')];if(!_0x584786['query'][_0x84e7('0x36')]('nolimit')){_0x3bd147['limit']=qs[_0x84e7('0x1e')](_0x584786['query'][_0x84e7('0x1e')]);_0x3bd147[_0x84e7('0x1d')]=qs[_0x84e7('0x1d')](_0x584786[_0x84e7('0x2e')]['offset']);}_0x3bd147[_0x84e7('0x50')]=qs[_0x84e7('0x38')](_0x584786[_0x84e7('0x2e')]['sort']);_0x3bd147[_0x84e7('0x39')]=qs['filters'](_['pick'](_0x584786['query'],_0xff1435[_0x84e7('0x31')]));_0x3bd147[_0x84e7('0x39')][_0x84e7('0x51')]=_0x2fd587['id'];if(_0x584786[_0x84e7('0x2e')][_0x84e7('0x3e')]){_0x3bd147[_0x84e7('0x39')]=_[_0x84e7('0x3d')](_0x3bd147['where'],{'$or':_[_0x84e7('0x3f')](_0x3bd147['attributes'],function(_0x23de0f){var _0x5b09bf={};_0x5b09bf[_0x23de0f]={'$like':'%'+_0x584786[_0x84e7('0x2e')][_0x84e7('0x3e')]+'%'};return _0x5b09bf;})});}_0x3bd147=_[_0x84e7('0x3d')]({},_0x3bd147,_0x584786['options']);return db[_0x84e7('0x52')][_0x84e7('0x43')](_0x3bd147);}})['then'](function(_0x3f75ca){if(_0x3f75ca){return db[_0x84e7('0x53')][_0x84e7('0x54')]({'where':{'id':_[_0x84e7('0x3f')](_0x3f75ca,_0x84e7('0x55')),'role':_0x84e7('0x56')},'attributes':['id','name',_0x84e7('0x57'),'updatedAt',_0x84e7('0x58')]});}})['then'](function(_0x3ac6fa){if(_0x3ac6fa){return{'count':_0x3ac6fa['count'],'rows':_['map'](_0x3ac6fa['rows'],function(_0x36072b){return{'membername':_0x36072b[_0x84e7('0x28')],'UserId':_0x36072b['id'],'queue_name':_0x2e137c[_0x84e7('0x28')],'MailQueueId':_0x2e137c['id'],'interface':util['format']('%s/%s','SIP',_0x36072b[_0x84e7('0x28')]),'penalty':0x0,'paused':_0x36072b[_0x84e7('0x57')],'createdAt':_0x36072b[_0x84e7('0x58')],'updatedAt':_0x36072b['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})[_0x84e7('0x24')](respondWithFilteredResult(_0x4bdae0,_0x3bd147))['catch'](handleError(_0x4bdae0,null));};exports[_0x84e7('0x59')]=function(_0x597bf3,_0x1a38d,_0x31837b){var _0xe2fd71={};var _0x112ff2={};var _0x3472db;var _0x3a7908;return db[_0x84e7('0x2b')]['findOne']({'where':{'id':_0x597bf3[_0x84e7('0x47')]['id']}})[_0x84e7('0x24')](handleEntityNotFound(_0x1a38d,null))['then'](function(_0x36c0b1){if(_0x36c0b1){_0x3472db=_0x36c0b1;_0x112ff2[_0x84e7('0x34')]=_['keys'](db[_0x84e7('0x5a')][_0x84e7('0x2c')]);_0x112ff2[_0x84e7('0x2e')]=_['keys'](_0x597bf3[_0x84e7('0x2e')]);_0x112ff2['filters']=_[_0x84e7('0x32')](_0x112ff2['model'],_0x112ff2[_0x84e7('0x2e')]);_0xe2fd71['attributes']=_[_0x84e7('0x32')](_0x112ff2['model'],qs['fields'](_0x597bf3[_0x84e7('0x2e')][_0x84e7('0x35')]));_0xe2fd71['attributes']=_0xe2fd71[_0x84e7('0x33')][_0x84e7('0x48')]?_0xe2fd71[_0x84e7('0x33')]:_0x112ff2[_0x84e7('0x34')];_0xe2fd71['order']=qs['sort'](_0x597bf3[_0x84e7('0x2e')]['sort']);_0xe2fd71[_0x84e7('0x39')]=qs[_0x84e7('0x31')](_['pick'](_0x597bf3[_0x84e7('0x2e')],_0x112ff2[_0x84e7('0x31')]));if(_0x597bf3[_0x84e7('0x2e')]['filter']){_0xe2fd71['where']=_[_0x84e7('0x3d')](_0xe2fd71[_0x84e7('0x39')],{'$or':_['map'](_0xe2fd71[_0x84e7('0x33')],function(_0x56463e){var _0x5b8066={};_0x5b8066[_0x56463e]={'$like':'%'+_0x597bf3['query'][_0x84e7('0x3e')]+'%'};return _0x5b8066;})});}_0xe2fd71=_[_0x84e7('0x3d')]({},_0xe2fd71,_0x597bf3[_0x84e7('0x40')]);return _0x3472db[_0x84e7('0x59')](_0xe2fd71);}})[_0x84e7('0x24')](function(_0x35cf2f){if(_0x35cf2f){_0x3a7908=_0x35cf2f[_0x84e7('0x48')];if(!_0x597bf3[_0x84e7('0x2e')][_0x84e7('0x36')]('nolimit')){_0xe2fd71[_0x84e7('0x1e')]=qs[_0x84e7('0x1e')](_0x597bf3[_0x84e7('0x2e')][_0x84e7('0x1e')]);_0xe2fd71[_0x84e7('0x1d')]=qs[_0x84e7('0x1d')](_0x597bf3[_0x84e7('0x2e')][_0x84e7('0x1d')]);}return _0x3472db[_0x84e7('0x59')](_0xe2fd71);}})[_0x84e7('0x24')](function(_0x5a55f9){if(_0x5a55f9){return _0x5a55f9?{'count':_0x3a7908,'rows':_0x5a55f9}:null;}})['then'](respondWithResult(_0x1a38d,null))[_0x84e7('0x45')](handleError(_0x1a38d,null));};exports[_0x84e7('0x5b')]=function(_0xfd9576,_0x99d38b,_0x1138f4){var _0x593961=[];var _0x7943d9;return db[_0x84e7('0x5a')][_0x84e7('0x43')]({'where':{'id':_0xfd9576[_0x84e7('0x4b')]['ids']},'attributes':['id'],'include':[{'model':db[_0x84e7('0x53')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x84e7('0x24')](function(_0x50fed2){if(_0x50fed2){for(var _0xdbd21c=0x0;_0xdbd21c<_0x50fed2[_0x84e7('0x48')];_0xdbd21c+=0x1){for(var _0x3189f3=0x0;_0x3189f3<_0x50fed2[_0xdbd21c][_0x84e7('0x5c')][_0x84e7('0x48')];_0x3189f3+=0x1){_0x593961=_['union'](_0x593961,[_0x50fed2[_0xdbd21c][_0x84e7('0x5c')][_0x3189f3]['id']]);}}return _0x593961;}})[_0x84e7('0x24')](function(_0x414667){if(_0x414667){return db[_0x84e7('0x2b')][_0x84e7('0x49')]({'where':{'id':_0xfd9576[_0x84e7('0x47')]['id']}});}})[_0x84e7('0x24')](function(_0x432a03){if(_0x432a03){_0x7943d9=_0x432a03;return _0x7943d9[_0x84e7('0x5d')](_0x593961,{'penalty':_0xfd9576['body'][_0x84e7('0x5e')]});}})[_0x84e7('0x24')](function(_0x3b6edf){if(_0x3b6edf){return _0x7943d9['addTeams'](_0xfd9576[_0x84e7('0x4b')][_0x84e7('0x5f')]);}})['then'](handleEntityNotFound(_0x99d38b,null))[_0x84e7('0x24')](respondWithStatusCode(_0x99d38b,null))[_0x84e7('0x45')](handleError(_0x99d38b,null));};exports[_0x84e7('0x60')]=function(_0x4ca5f5,_0x40da2a,_0x5bb155){var _0x2a219e=[];var _0x5e5798;return db[_0x84e7('0x5a')][_0x84e7('0x43')]({'where':{'id':_0x4ca5f5['query'][_0x84e7('0x5f')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x84e7('0x5c'),'attributes':['id'],'raw':!![]}]})[_0x84e7('0x24')](function(_0x48a033){if(_0x48a033){for(var _0x36a4c2=0x0;_0x36a4c2<_0x48a033[_0x84e7('0x48')];_0x36a4c2+=0x1){for(var _0x3c2cfe=0x0;_0x3c2cfe<_0x48a033[_0x36a4c2]['Agents'][_0x84e7('0x48')];_0x3c2cfe+=0x1){_0x2a219e=_[_0x84e7('0x61')](_0x2a219e,[_0x48a033[_0x36a4c2][_0x84e7('0x5c')][_0x3c2cfe]['id']]);}}return _0x2a219e;}})[_0x84e7('0x24')](function(_0xf06afc){if(_0xf06afc){return db[_0x84e7('0x2b')][_0x84e7('0x49')]({'where':{'id':_0x4ca5f5[_0x84e7('0x47')]['id']}});}})[_0x84e7('0x24')](function(_0x4eaa8d){if(_0x4eaa8d){_0x5e5798=_0x4eaa8d;return _0x5e5798[_0x84e7('0x62')](_0x2a219e);}})['then'](function(_0x159361){if(_0x5e5798){return _0x5e5798[_0x84e7('0x60')](_0x4ca5f5['query'][_0x84e7('0x5f')]);}})[_0x84e7('0x24')](handleEntityNotFound(_0x40da2a,null))[_0x84e7('0x24')](respondWithStatusCode(_0x40da2a,null))[_0x84e7('0x45')](handleError(_0x40da2a,null));};exports[_0x84e7('0x5d')]=function(_0x127b8d,_0x5921c6,_0x2790f1){return db['MailQueue'][_0x84e7('0x49')]({'where':{'id':_0x127b8d['params']['id']}})['then'](handleEntityNotFound(_0x5921c6,null))[_0x84e7('0x24')](function(_0x5cedf9){if(_0x5cedf9){return _0x5cedf9[_0x84e7('0x5d')](_0x127b8d[_0x84e7('0x4b')]['ids'],_['omit'](_0x127b8d[_0x84e7('0x4b')],[_0x84e7('0x5f'),'id'])||{})[_0x84e7('0x63')](function(_0x503361){for(var _0x28a13f=0x0;_0x28a13f<_0x127b8d[_0x84e7('0x4b')][_0x84e7('0x5f')][_0x84e7('0x48')];_0x28a13f+=0x1){socket['emit']('userMailQueue:save',{'UserId':_0x127b8d[_0x84e7('0x4b')][_0x84e7('0x5f')][_0x28a13f],'MailQueueId':_0x127b8d[_0x84e7('0x47')]['id']});}return _0x503361;});}})[_0x84e7('0x24')](respondWithResult(_0x5921c6,null))['catch'](handleError(_0x5921c6,null));};exports[_0x84e7('0x62')]=function(_0x438c49,_0x1175ff,_0x5f2b55){var _0x39f20d;return db[_0x84e7('0x2b')][_0x84e7('0x49')]({'where':{'id':_0x438c49[_0x84e7('0x47')]['id']}})[_0x84e7('0x24')](handleEntityNotFound(_0x1175ff,null))[_0x84e7('0x24')](function(_0x15a438){if(_0x15a438){return _0x15a438[_0x84e7('0x62')](_0x438c49['query']['ids'])[_0x84e7('0x24')](function(_0x35cd97){if(_['isArray'](_0x438c49['query'][_0x84e7('0x5f')])){for(var _0x3bcbe2=0x0;_0x3bcbe2<_0x438c49['query'][_0x84e7('0x5f')][_0x84e7('0x48')];_0x3bcbe2+=0x1){socket[_0x84e7('0x64')]('userMailQueue:remove',{'UserId':_0x438c49[_0x84e7('0x2e')][_0x84e7('0x5f')][_0x3bcbe2],'MailQueueId':_0x438c49['params']['id']});}}else{socket[_0x84e7('0x64')](_0x84e7('0x65'),{'UserId':_0x438c49[_0x84e7('0x2e')][_0x84e7('0x5f')],'MailQueueId':_0x438c49[_0x84e7('0x47')]['id']});}});}})['then'](respondWithStatusCode(_0x1175ff,null))[_0x84e7('0x45')](handleError(_0x1175ff,null));};exports[_0x84e7('0x66')]=function(_0x1c2cf8,_0x332b8d,_0x1719fc){var _0x3a32d2={};var _0x2df914={};var _0x5c4c66;var _0x140487;return db[_0x84e7('0x2b')][_0x84e7('0x4e')]({'where':{'id':_0x1c2cf8[_0x84e7('0x47')]['id']}})['then'](handleEntityNotFound(_0x332b8d,null))[_0x84e7('0x24')](function(_0x1a565e){if(_0x1a565e){_0x5c4c66=_0x1a565e;_0x2df914[_0x84e7('0x34')]=_[_0x84e7('0x2d')](db[_0x84e7('0x53')][_0x84e7('0x2c')]);_0x2df914[_0x84e7('0x2e')]=_[_0x84e7('0x2d')](_0x1c2cf8[_0x84e7('0x2e')]);_0x2df914[_0x84e7('0x31')]=_[_0x84e7('0x32')](_0x2df914[_0x84e7('0x34')],_0x2df914['query']);_0x3a32d2[_0x84e7('0x33')]=_[_0x84e7('0x32')](_0x2df914['model'],qs[_0x84e7('0x35')](_0x1c2cf8['query'][_0x84e7('0x35')]));_0x3a32d2['attributes']=_0x3a32d2[_0x84e7('0x33')][_0x84e7('0x48')]?_0x3a32d2[_0x84e7('0x33')]:_0x2df914[_0x84e7('0x34')];_0x3a32d2[_0x84e7('0x50')]=qs['sort'](_0x1c2cf8[_0x84e7('0x2e')][_0x84e7('0x38')]);_0x3a32d2[_0x84e7('0x39')]=qs[_0x84e7('0x31')](_[_0x84e7('0x3a')](_0x1c2cf8[_0x84e7('0x2e')],_0x2df914[_0x84e7('0x31')]));if(_0x1c2cf8[_0x84e7('0x2e')]['filter']){_0x3a32d2[_0x84e7('0x39')]=_[_0x84e7('0x3d')](_0x3a32d2[_0x84e7('0x39')],{'$or':_[_0x84e7('0x3f')](_0x3a32d2[_0x84e7('0x33')],function(_0x537ec7){var _0x485e79={};_0x485e79[_0x537ec7]={'$like':'%'+_0x1c2cf8[_0x84e7('0x2e')][_0x84e7('0x3e')]+'%'};return _0x485e79;})});}_0x3a32d2=_['merge']({},_0x3a32d2,_0x1c2cf8[_0x84e7('0x40')]);return _0x5c4c66[_0x84e7('0x66')](_0x3a32d2);}})[_0x84e7('0x24')](function(_0x159eb1){if(_0x159eb1){_0x140487=_0x159eb1[_0x84e7('0x48')];if(!_0x1c2cf8[_0x84e7('0x2e')][_0x84e7('0x36')]('nolimit')){_0x3a32d2[_0x84e7('0x1e')]=qs[_0x84e7('0x1e')](_0x1c2cf8[_0x84e7('0x2e')][_0x84e7('0x1e')]);_0x3a32d2[_0x84e7('0x1d')]=qs[_0x84e7('0x1d')](_0x1c2cf8['query'][_0x84e7('0x1d')]);}return _0x5c4c66[_0x84e7('0x66')](_0x3a32d2);}})[_0x84e7('0x24')](function(_0xee9685){if(_0xee9685){return _0xee9685?{'count':_0x140487,'rows':_0xee9685}:null;}})[_0x84e7('0x24')](respondWithResult(_0x332b8d,null))[_0x84e7('0x45')](handleError(_0x332b8d,null));};
\ No newline at end of file
+var _0x191b=['MailQueue','rawAttributes','model','query','dateStart','dateEnd','keys','filters','intersection','attributes','fields','nolimit','offset','sort','where','add','day','merge','map','filter','options','includeAll','include','findAll','catch','show','params','length','find','create','body','update','describe','getMembers','findOne','order','pick','MailQueueId','findAndCountAll','agent','mailPause','updatedAt','rows','format','%s/%s','createdAt','getTeams','Team','hasOwnProperty','addTeams','User','Agents','addAgents','penalty','ids','removeTeams','removeAgents','omit','spread','emit','userMailQueue:save','isArray','getAgents','fast-json-patch','request-promise','bluebird','mustache','util','path','to-csv','lodash','squel','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','socket.io-emitter','./mailQueue.socket','register','sendStatus','end','status','count','limit','set','Content-Range','json','reject','then','destroy','name','index'];(function(_0x11e31b,_0x11e49b){var _0x1127fa=function(_0x16d94f){while(--_0x16d94f){_0x11e31b['push'](_0x11e31b['shift']());}};_0x1127fa(++_0x11e49b);}(_0x191b,0x15f));var _0xb191=function(_0x49dd24,_0x381aa7){_0x49dd24=_0x49dd24-0x0;var _0x3ce70d=_0x191b[_0x49dd24];return _0x3ce70d;};'use strict';var jsonpatch=require(_0xb191('0x0'));var rp=require(_0xb191('0x1'));var moment=require('moment');var BPromise=require(_0xb191('0x2'));var Mustache=require(_0xb191('0x3'));var util=require(_0xb191('0x4'));var path=require(_0xb191('0x5'));var sox=require('sox');var csv=require(_0xb191('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xb191('0x7'));var squel=require(_0xb191('0x8'));var crypto=require('crypto');var jsforce=require(_0xb191('0x9'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xb191('0xa'));var Papa=require(_0xb191('0xb'));var qs=require(_0xb191('0xc'));var logger=require(_0xb191('0xd'))(_0xb191('0xe'));var utils=require(_0xb191('0xf'));var config=require('../../config/environment');var db=require(_0xb191('0x10'))['db'];var socket=require(_0xb191('0x11'))({'host':'localhost','port':0x18eb});require(_0xb191('0x12'))[_0xb191('0x13')](socket);function respondWithStatusCode(_0x2fb8d8,_0x426a86){_0x426a86=_0x426a86||0xcc;return function(_0x4d6bae){if(_0x4d6bae){return _0x2fb8d8[_0xb191('0x14')](_0x426a86);}return _0x2fb8d8['status'](_0x426a86)[_0xb191('0x15')]();};}function respondWithResult(_0x246b9d,_0xa1f4f8){_0xa1f4f8=_0xa1f4f8||0xc8;return function(_0x2f0340){if(_0x2f0340){return _0x246b9d[_0xb191('0x16')](_0xa1f4f8)['json'](_0x2f0340);}};}function respondWithFilteredResult(_0x50a044,_0x1d3428){return function(_0x5ac386){if(_0x5ac386){var _0x3255aa=_0x5ac386[_0xb191('0x17')],_0x20f0d0=_0x1d3428['offset'],_0xb09226=_0x1d3428['offset']+_0x1d3428[_0xb191('0x18')],_0x9a5a9e;if(_0xb09226>=_0x3255aa){_0xb09226=_0x3255aa;_0x9a5a9e=0xc8;}else{_0x9a5a9e=0xce;}_0x50a044['status'](_0x9a5a9e);return _0x50a044[_0xb191('0x19')](_0xb191('0x1a'),_0x20f0d0+'-'+_0xb09226+'/'+_0x3255aa)[_0xb191('0x1b')](_0x5ac386);}return null;};}function patchUpdates(_0x217975){return function(_0x2d84f3){try{jsonpatch['apply'](_0x2d84f3,_0x217975,!![]);}catch(_0x4f0758){return BPromise[_0xb191('0x1c')](_0x4f0758);}return _0x2d84f3['save']();};}function saveUpdates(_0x842778,_0x537865){return function(_0x484710){if(_0x484710){return _0x484710['update'](_0x842778)[_0xb191('0x1d')](function(_0x3a3be9){return _0x3a3be9;});}return null;};}function removeEntity(_0x1a08e0,_0x1920aa){return function(_0x103cef){if(_0x103cef){return _0x103cef[_0xb191('0x1e')]()[_0xb191('0x1d')](function(){_0x1a08e0[_0xb191('0x16')](0xcc)[_0xb191('0x15')]();});}};}function handleEntityNotFound(_0x3a87d2,_0x8fd9b6){return function(_0x48082f){if(!_0x48082f){_0x3a87d2[_0xb191('0x14')](0x194);}return _0x48082f;};}function handleError(_0x42eccd,_0x4555e8){_0x4555e8=_0x4555e8||0x1f4;return function(_0x24494f){logger['error'](_0x24494f['stack']);if(_0x24494f[_0xb191('0x1f')]){delete _0x24494f[_0xb191('0x1f')];}_0x42eccd['status'](_0x4555e8)['send'](_0x24494f);};}exports[_0xb191('0x20')]=function(_0x2bf779,_0x14a49e){var _0x117f0b={},_0x36b774={},_0x297551={'count':0x0,'rows':[]};var _0x55f457=db[_0xb191('0x21')][_0xb191('0x22')];_0x36b774[_0xb191('0x23')]=_['keys'](_0x55f457);var _0x490987={'dateStart':_0x2bf779[_0xb191('0x24')][_0xb191('0x25')],'dateEnd':_0x2bf779[_0xb191('0x24')][_0xb191('0x26')]};delete _0x2bf779[_0xb191('0x24')][_0xb191('0x25')];delete _0x2bf779['query'][_0xb191('0x26')];_0x36b774['query']=_[_0xb191('0x27')](_0x2bf779['query']);_0x36b774[_0xb191('0x28')]=_[_0xb191('0x29')](_0x36b774['model'],_0x36b774[_0xb191('0x24')]);_0x117f0b[_0xb191('0x2a')]=_['intersection'](_0x36b774['model'],qs[_0xb191('0x2b')](_0x2bf779['query'][_0xb191('0x2b')]));_0x117f0b['attributes']=_0x117f0b[_0xb191('0x2a')]['length']?_0x117f0b[_0xb191('0x2a')]:_0x36b774[_0xb191('0x23')];if(!_0x2bf779[_0xb191('0x24')]['hasOwnProperty'](_0xb191('0x2c'))){_0x117f0b['limit']=qs[_0xb191('0x18')](_0x2bf779['query']['limit']);_0x117f0b['offset']=qs[_0xb191('0x2d')](_0x2bf779['query'][_0xb191('0x2d')]);}_0x117f0b['order']=qs[_0xb191('0x2e')](_0x2bf779[_0xb191('0x24')][_0xb191('0x2e')]);_0x117f0b[_0xb191('0x2f')]=qs['filters'](_['pick'](_0x2bf779[_0xb191('0x24')],_0x36b774['filters']));if(_0x490987[_0xb191('0x25')]){if(_0x490987[_0xb191('0x26')]){_0x490987[_0xb191('0x26')]=moment(_0x490987[_0xb191('0x26')])[_0xb191('0x30')](0x1,_0xb191('0x31'));}else{_0x490987[_0xb191('0x26')]=moment(_0x490987[_0xb191('0x25')])[_0xb191('0x30')](0x1,'day');}_[_0xb191('0x32')](_0x117f0b['where'],{'createdAt':{'$gte':_0x490987[_0xb191('0x25')],'$lte':_0x490987[_0xb191('0x26')]}});}if(_0x2bf779[_0xb191('0x24')]['filter']){_0x117f0b['where']=_[_0xb191('0x32')](_0x117f0b[_0xb191('0x2f')],{'$or':_[_0xb191('0x33')](_0x117f0b[_0xb191('0x2a')],function(_0x353dee){var _0x50afd3={};_0x50afd3[_0x353dee]={'$like':'%'+_0x2bf779[_0xb191('0x24')][_0xb191('0x34')]+'%'};return _0x50afd3;})});}_0x117f0b=_[_0xb191('0x32')]({},_0x117f0b,_0x2bf779[_0xb191('0x35')]);var _0x496205={'where':_0x117f0b[_0xb191('0x2f')]};return db[_0xb191('0x21')][_0xb191('0x17')](_0x496205)[_0xb191('0x1d')](function(_0x26e7d1){_0x297551['count']=_0x26e7d1;if(_0x2bf779[_0xb191('0x24')][_0xb191('0x36')]){_0x117f0b[_0xb191('0x37')]=[{'all':!![]}];}return db[_0xb191('0x21')][_0xb191('0x38')](_0x117f0b);})[_0xb191('0x1d')](function(_0x15e037){_0x297551['rows']=_0x15e037;return _0x297551;})[_0xb191('0x1d')](respondWithFilteredResult(_0x14a49e,_0x117f0b))[_0xb191('0x39')](handleError(_0x14a49e,null));};exports[_0xb191('0x3a')]=function(_0x559e6d,_0x744a9c){var _0x4683ab={'raw':!![],'where':{'id':_0x559e6d[_0xb191('0x3b')]['id']}},_0x2049e7={};_0x2049e7[_0xb191('0x23')]=_[_0xb191('0x27')](db[_0xb191('0x21')][_0xb191('0x22')]);_0x2049e7[_0xb191('0x24')]=_['keys'](_0x559e6d[_0xb191('0x24')]);_0x2049e7[_0xb191('0x28')]=_[_0xb191('0x29')](_0x2049e7['model'],_0x2049e7[_0xb191('0x24')]);_0x4683ab[_0xb191('0x2a')]=_[_0xb191('0x29')](_0x2049e7[_0xb191('0x23')],qs['fields'](_0x559e6d['query'][_0xb191('0x2b')]));_0x4683ab[_0xb191('0x2a')]=_0x4683ab[_0xb191('0x2a')][_0xb191('0x3c')]?_0x4683ab['attributes']:_0x2049e7[_0xb191('0x23')];if(_0x559e6d[_0xb191('0x24')][_0xb191('0x36')]){_0x4683ab[_0xb191('0x37')]=[{'all':!![]}];}_0x4683ab=_[_0xb191('0x32')]({},_0x4683ab,_0x559e6d[_0xb191('0x35')]);return db[_0xb191('0x21')][_0xb191('0x3d')](_0x4683ab)[_0xb191('0x1d')](handleEntityNotFound(_0x744a9c,null))[_0xb191('0x1d')](respondWithResult(_0x744a9c,null))[_0xb191('0x39')](handleError(_0x744a9c,null));};exports['create']=function(_0x29ebc8,_0x4b7873){return db['MailQueue'][_0xb191('0x3e')](_0x29ebc8[_0xb191('0x3f')],{})['then'](respondWithResult(_0x4b7873,0xc9))[_0xb191('0x39')](handleError(_0x4b7873,null));};exports[_0xb191('0x40')]=function(_0x28c4af,_0x26adb4){if(_0x28c4af[_0xb191('0x3f')]['id']){delete _0x28c4af[_0xb191('0x3f')]['id'];}return db['MailQueue'][_0xb191('0x3d')]({'where':{'id':_0x28c4af[_0xb191('0x3b')]['id']}})[_0xb191('0x1d')](handleEntityNotFound(_0x26adb4,null))[_0xb191('0x1d')](saveUpdates(_0x28c4af[_0xb191('0x3f')],null))[_0xb191('0x1d')](respondWithResult(_0x26adb4,null))[_0xb191('0x39')](handleError(_0x26adb4,null));};exports[_0xb191('0x1e')]=function(_0x117257,_0x318b87){return db['MailQueue'][_0xb191('0x3d')]({'where':{'id':_0x117257[_0xb191('0x3b')]['id']}})[_0xb191('0x1d')](handleEntityNotFound(_0x318b87,null))[_0xb191('0x1d')](removeEntity(_0x318b87,null))[_0xb191('0x39')](handleError(_0x318b87,null));};exports[_0xb191('0x41')]=function(_0x1516c3,_0x57f791){return db['MailQueue']['describe']()['then'](respondWithResult(_0x57f791,null))[_0xb191('0x39')](handleError(_0x57f791,null));};exports[_0xb191('0x42')]=function(_0x1ed288,_0x488bd3,_0x33c56c){var _0x473c9d={'raw':!![],'where':{}},_0x2bdfbd={},_0x4b8be2;return db[_0xb191('0x21')][_0xb191('0x43')]({'where':{'id':_0x1ed288[_0xb191('0x3b')]['id']}})[_0xb191('0x1d')](handleEntityNotFound(_0x488bd3,null))[_0xb191('0x1d')](function(_0x281698){if(_0x281698){_0x4b8be2=_0x281698['get']({'plain':!![]});_0x2bdfbd['model']=_[_0xb191('0x27')](db['UserMailQueue'][_0xb191('0x22')]);_0x2bdfbd['query']=_[_0xb191('0x27')](_0x1ed288[_0xb191('0x24')]);_0x2bdfbd[_0xb191('0x28')]=_[_0xb191('0x29')](_0x2bdfbd[_0xb191('0x23')],_0x2bdfbd[_0xb191('0x24')]);_0x473c9d[_0xb191('0x2a')]=_[_0xb191('0x29')](_0x2bdfbd['model'],qs['fields'](_0x1ed288['query']['fields']));_0x473c9d['attributes']=_0x473c9d['attributes'][_0xb191('0x3c')]?_0x473c9d[_0xb191('0x2a')]:_0x2bdfbd['model'];if(!_0x1ed288[_0xb191('0x24')]['hasOwnProperty'](_0xb191('0x2c'))){_0x473c9d[_0xb191('0x18')]=qs[_0xb191('0x18')](_0x1ed288[_0xb191('0x24')]['limit']);_0x473c9d[_0xb191('0x2d')]=qs['offset'](_0x1ed288[_0xb191('0x24')]['offset']);}_0x473c9d[_0xb191('0x44')]=qs['sort'](_0x1ed288[_0xb191('0x24')][_0xb191('0x2e')]);_0x473c9d[_0xb191('0x2f')]=qs[_0xb191('0x28')](_[_0xb191('0x45')](_0x1ed288[_0xb191('0x24')],_0x2bdfbd[_0xb191('0x28')]));_0x473c9d[_0xb191('0x2f')][_0xb191('0x46')]=_0x281698['id'];if(_0x1ed288[_0xb191('0x24')][_0xb191('0x34')]){_0x473c9d[_0xb191('0x2f')]=_[_0xb191('0x32')](_0x473c9d['where'],{'$or':_[_0xb191('0x33')](_0x473c9d[_0xb191('0x2a')],function(_0x446a44){var _0x194f39={};_0x194f39[_0x446a44]={'$like':'%'+_0x1ed288[_0xb191('0x24')][_0xb191('0x34')]+'%'};return _0x194f39;})});}_0x473c9d=_[_0xb191('0x32')]({},_0x473c9d,_0x1ed288[_0xb191('0x35')]);return db['UserMailQueue'][_0xb191('0x38')](_0x473c9d);}})['then'](function(_0x48f1b6){if(_0x48f1b6){return db['User'][_0xb191('0x47')]({'where':{'id':_[_0xb191('0x33')](_0x48f1b6,'UserId'),'role':_0xb191('0x48')},'attributes':['id','name',_0xb191('0x49'),_0xb191('0x4a'),'createdAt']});}})[_0xb191('0x1d')](function(_0x2256d8){if(_0x2256d8){return{'count':_0x2256d8['count'],'rows':_['map'](_0x2256d8[_0xb191('0x4b')],function(_0x16f873){return{'membername':_0x16f873[_0xb191('0x1f')],'UserId':_0x16f873['id'],'queue_name':_0x4b8be2[_0xb191('0x1f')],'MailQueueId':_0x4b8be2['id'],'interface':util[_0xb191('0x4c')](_0xb191('0x4d'),'SIP',_0x16f873[_0xb191('0x1f')]),'penalty':0x0,'paused':_0x16f873[_0xb191('0x49')],'createdAt':_0x16f873[_0xb191('0x4e')],'updatedAt':_0x16f873[_0xb191('0x4a')]};})};}else{return{'count':0x0,'rows':[]};}})[_0xb191('0x1d')](respondWithFilteredResult(_0x488bd3,_0x473c9d))['catch'](handleError(_0x488bd3,null));};exports[_0xb191('0x4f')]=function(_0x28d98d,_0x6701e6,_0x256d0b){var _0xce447b={};var _0xb74c61={};var _0xf46a0a;var _0x2713c8;return db[_0xb191('0x21')][_0xb191('0x43')]({'where':{'id':_0x28d98d['params']['id']}})[_0xb191('0x1d')](handleEntityNotFound(_0x6701e6,null))[_0xb191('0x1d')](function(_0x23a992){if(_0x23a992){_0xf46a0a=_0x23a992;_0xb74c61['model']=_[_0xb191('0x27')](db[_0xb191('0x50')]['rawAttributes']);_0xb74c61[_0xb191('0x24')]=_['keys'](_0x28d98d['query']);_0xb74c61[_0xb191('0x28')]=_[_0xb191('0x29')](_0xb74c61[_0xb191('0x23')],_0xb74c61[_0xb191('0x24')]);_0xce447b[_0xb191('0x2a')]=_[_0xb191('0x29')](_0xb74c61[_0xb191('0x23')],qs[_0xb191('0x2b')](_0x28d98d[_0xb191('0x24')]['fields']));_0xce447b[_0xb191('0x2a')]=_0xce447b[_0xb191('0x2a')][_0xb191('0x3c')]?_0xce447b[_0xb191('0x2a')]:_0xb74c61[_0xb191('0x23')];_0xce447b[_0xb191('0x44')]=qs['sort'](_0x28d98d[_0xb191('0x24')]['sort']);_0xce447b[_0xb191('0x2f')]=qs[_0xb191('0x28')](_[_0xb191('0x45')](_0x28d98d[_0xb191('0x24')],_0xb74c61[_0xb191('0x28')]));if(_0x28d98d[_0xb191('0x24')][_0xb191('0x34')]){_0xce447b[_0xb191('0x2f')]=_['merge'](_0xce447b[_0xb191('0x2f')],{'$or':_[_0xb191('0x33')](_0xce447b[_0xb191('0x2a')],function(_0xa2f6f8){var _0x40b137={};_0x40b137[_0xa2f6f8]={'$like':'%'+_0x28d98d[_0xb191('0x24')][_0xb191('0x34')]+'%'};return _0x40b137;})});}_0xce447b=_[_0xb191('0x32')]({},_0xce447b,_0x28d98d[_0xb191('0x35')]);return _0xf46a0a[_0xb191('0x4f')](_0xce447b);}})[_0xb191('0x1d')](function(_0x31f3e6){if(_0x31f3e6){_0x2713c8=_0x31f3e6[_0xb191('0x3c')];if(!_0x28d98d[_0xb191('0x24')][_0xb191('0x51')](_0xb191('0x2c'))){_0xce447b[_0xb191('0x18')]=qs['limit'](_0x28d98d[_0xb191('0x24')][_0xb191('0x18')]);_0xce447b[_0xb191('0x2d')]=qs['offset'](_0x28d98d['query']['offset']);}return _0xf46a0a['getTeams'](_0xce447b);}})[_0xb191('0x1d')](function(_0x3380e0){if(_0x3380e0){return _0x3380e0?{'count':_0x2713c8,'rows':_0x3380e0}:null;}})[_0xb191('0x1d')](respondWithResult(_0x6701e6,null))[_0xb191('0x39')](handleError(_0x6701e6,null));};exports[_0xb191('0x52')]=function(_0x514aef,_0x2944db,_0x14cdef){var _0x23e53c=[];var _0x58ed31;return db[_0xb191('0x50')][_0xb191('0x38')]({'where':{'id':_0x514aef[_0xb191('0x3f')]['ids']},'attributes':['id'],'include':[{'model':db[_0xb191('0x53')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0xb191('0x1d')](function(_0x2cb794){if(_0x2cb794){for(var _0x10bd40=0x0;_0x10bd40<_0x2cb794[_0xb191('0x3c')];_0x10bd40+=0x1){for(var _0x5de9f9=0x0;_0x5de9f9<_0x2cb794[_0x10bd40][_0xb191('0x54')][_0xb191('0x3c')];_0x5de9f9+=0x1){_0x23e53c=_['union'](_0x23e53c,[_0x2cb794[_0x10bd40][_0xb191('0x54')][_0x5de9f9]['id']]);}}return _0x23e53c;}})['then'](function(_0x12cfb6){if(_0x12cfb6){return db['MailQueue'][_0xb191('0x3d')]({'where':{'id':_0x514aef[_0xb191('0x3b')]['id']}});}})[_0xb191('0x1d')](function(_0x448ca6){if(_0x448ca6){_0x58ed31=_0x448ca6;return _0x58ed31[_0xb191('0x55')](_0x23e53c,{'penalty':_0x514aef[_0xb191('0x3f')][_0xb191('0x56')]});}})[_0xb191('0x1d')](function(_0xd28805){if(_0xd28805){return _0x58ed31[_0xb191('0x52')](_0x514aef[_0xb191('0x3f')][_0xb191('0x57')]);}})['then'](handleEntityNotFound(_0x2944db,null))['then'](respondWithStatusCode(_0x2944db,null))[_0xb191('0x39')](handleError(_0x2944db,null));};exports[_0xb191('0x58')]=function(_0x4c7bbe,_0x231d64,_0x2b6cca){var _0x2a4bbd=[];var _0x2821f1;return db[_0xb191('0x50')]['findAll']({'where':{'id':_0x4c7bbe[_0xb191('0x24')][_0xb191('0x57')]},'attributes':['id'],'include':[{'model':db[_0xb191('0x53')],'as':_0xb191('0x54'),'attributes':['id'],'raw':!![]}]})[_0xb191('0x1d')](function(_0x1800dd){if(_0x1800dd){for(var _0x24ba5b=0x0;_0x24ba5b<_0x1800dd[_0xb191('0x3c')];_0x24ba5b+=0x1){for(var _0x151c76=0x0;_0x151c76<_0x1800dd[_0x24ba5b][_0xb191('0x54')]['length'];_0x151c76+=0x1){_0x2a4bbd=_['union'](_0x2a4bbd,[_0x1800dd[_0x24ba5b][_0xb191('0x54')][_0x151c76]['id']]);}}return _0x2a4bbd;}})['then'](function(_0x1fd185){if(_0x1fd185){return db[_0xb191('0x21')][_0xb191('0x3d')]({'where':{'id':_0x4c7bbe['params']['id']}});}})[_0xb191('0x1d')](function(_0x392fa2){if(_0x392fa2){_0x2821f1=_0x392fa2;return _0x2821f1[_0xb191('0x59')](_0x2a4bbd);}})[_0xb191('0x1d')](function(_0x1a7825){if(_0x2821f1){return _0x2821f1[_0xb191('0x58')](_0x4c7bbe[_0xb191('0x24')][_0xb191('0x57')]);}})[_0xb191('0x1d')](handleEntityNotFound(_0x231d64,null))[_0xb191('0x1d')](respondWithStatusCode(_0x231d64,null))[_0xb191('0x39')](handleError(_0x231d64,null));};exports[_0xb191('0x55')]=function(_0x321f1f,_0x3d4755,_0x1e87c7){return db[_0xb191('0x21')]['find']({'where':{'id':_0x321f1f[_0xb191('0x3b')]['id']}})[_0xb191('0x1d')](handleEntityNotFound(_0x3d4755,null))[_0xb191('0x1d')](function(_0x37fd7a){if(_0x37fd7a){return _0x37fd7a[_0xb191('0x55')](_0x321f1f[_0xb191('0x3f')]['ids'],_[_0xb191('0x5a')](_0x321f1f['body'],[_0xb191('0x57'),'id'])||{})[_0xb191('0x5b')](function(_0x4d0060){for(var _0x2d0ff5=0x0;_0x2d0ff5<_0x321f1f[_0xb191('0x3f')]['ids'][_0xb191('0x3c')];_0x2d0ff5+=0x1){socket[_0xb191('0x5c')](_0xb191('0x5d'),{'UserId':_0x321f1f[_0xb191('0x3f')]['ids'][_0x2d0ff5],'MailQueueId':_0x321f1f['params']['id']});}return _0x4d0060;});}})[_0xb191('0x1d')](respondWithResult(_0x3d4755,null))['catch'](handleError(_0x3d4755,null));};exports[_0xb191('0x59')]=function(_0x26ba30,_0x49dad8,_0x378003){var _0x4e5df5;return db[_0xb191('0x21')][_0xb191('0x3d')]({'where':{'id':_0x26ba30['params']['id']}})[_0xb191('0x1d')](handleEntityNotFound(_0x49dad8,null))[_0xb191('0x1d')](function(_0x1a2072){if(_0x1a2072){return _0x1a2072[_0xb191('0x59')](_0x26ba30[_0xb191('0x24')][_0xb191('0x57')])[_0xb191('0x1d')](function(_0x349e36){if(_[_0xb191('0x5e')](_0x26ba30['query'][_0xb191('0x57')])){for(var _0x3a4f00=0x0;_0x3a4f00<_0x26ba30[_0xb191('0x24')]['ids'][_0xb191('0x3c')];_0x3a4f00+=0x1){socket[_0xb191('0x5c')]('userMailQueue:remove',{'UserId':_0x26ba30[_0xb191('0x24')][_0xb191('0x57')][_0x3a4f00],'MailQueueId':_0x26ba30['params']['id']});}}else{socket['emit']('userMailQueue:remove',{'UserId':_0x26ba30[_0xb191('0x24')]['ids'],'MailQueueId':_0x26ba30[_0xb191('0x3b')]['id']});}});}})[_0xb191('0x1d')](respondWithStatusCode(_0x49dad8,null))[_0xb191('0x39')](handleError(_0x49dad8,null));};exports[_0xb191('0x5f')]=function(_0x35b6fb,_0x3f1638,_0x3ba085){var _0x45b771={};var _0x5d00b3={};var _0x50c72c;var _0x4e7a94;return db['MailQueue'][_0xb191('0x43')]({'where':{'id':_0x35b6fb[_0xb191('0x3b')]['id']}})['then'](handleEntityNotFound(_0x3f1638,null))[_0xb191('0x1d')](function(_0x412b8b){if(_0x412b8b){_0x50c72c=_0x412b8b;_0x5d00b3[_0xb191('0x23')]=_['keys'](db[_0xb191('0x53')][_0xb191('0x22')]);_0x5d00b3[_0xb191('0x24')]=_['keys'](_0x35b6fb[_0xb191('0x24')]);_0x5d00b3['filters']=_[_0xb191('0x29')](_0x5d00b3[_0xb191('0x23')],_0x5d00b3[_0xb191('0x24')]);_0x45b771[_0xb191('0x2a')]=_['intersection'](_0x5d00b3[_0xb191('0x23')],qs[_0xb191('0x2b')](_0x35b6fb[_0xb191('0x24')][_0xb191('0x2b')]));_0x45b771[_0xb191('0x2a')]=_0x45b771[_0xb191('0x2a')][_0xb191('0x3c')]?_0x45b771[_0xb191('0x2a')]:_0x5d00b3[_0xb191('0x23')];_0x45b771[_0xb191('0x44')]=qs[_0xb191('0x2e')](_0x35b6fb['query'][_0xb191('0x2e')]);_0x45b771[_0xb191('0x2f')]=qs['filters'](_[_0xb191('0x45')](_0x35b6fb[_0xb191('0x24')],_0x5d00b3['filters']));if(_0x35b6fb[_0xb191('0x24')][_0xb191('0x34')]){_0x45b771[_0xb191('0x2f')]=_[_0xb191('0x32')](_0x45b771['where'],{'$or':_[_0xb191('0x33')](_0x45b771[_0xb191('0x2a')],function(_0x3b4767){var _0x46374f={};_0x46374f[_0x3b4767]={'$like':'%'+_0x35b6fb[_0xb191('0x24')][_0xb191('0x34')]+'%'};return _0x46374f;})});}_0x45b771=_['merge']({},_0x45b771,_0x35b6fb[_0xb191('0x35')]);return _0x50c72c[_0xb191('0x5f')](_0x45b771);}})[_0xb191('0x1d')](function(_0x282257){if(_0x282257){_0x4e7a94=_0x282257[_0xb191('0x3c')];if(!_0x35b6fb[_0xb191('0x24')][_0xb191('0x51')](_0xb191('0x2c'))){_0x45b771['limit']=qs[_0xb191('0x18')](_0x35b6fb[_0xb191('0x24')][_0xb191('0x18')]);_0x45b771[_0xb191('0x2d')]=qs[_0xb191('0x2d')](_0x35b6fb[_0xb191('0x24')][_0xb191('0x2d')]);}return _0x50c72c[_0xb191('0x5f')](_0x45b771);}})[_0xb191('0x1d')](function(_0x3f539c){if(_0x3f539c){return _0x3f539c?{'count':_0x4e7a94,'rows':_0x3f539c}:null;}})[_0xb191('0x1d')](respondWithResult(_0x3f1638,null))[_0xb191('0x39')](handleError(_0x3f1638,null));};
\ No newline at end of file
index 02f4ec7..d386e2e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1439=['save','remove','emit','hook','events','MailQueue','setMaxListeners'];(function(_0x45d3f0,_0x4be53f){var _0x314b79=function(_0x563d32){while(--_0x563d32){_0x45d3f0['push'](_0x45d3f0['shift']());}};_0x314b79(++_0x4be53f);}(_0x1439,0x14d));var _0x9143=function(_0x509316,_0x418c3c){_0x509316=_0x509316-0x0;var _0x1c988d=_0x1439[_0x509316];return _0x1c988d;};'use strict';var EventEmitter=require(_0x9143('0x0'));var MailQueue=require('../../mysqldb')['db'][_0x9143('0x1')];var MailQueueEvents=new EventEmitter();MailQueueEvents[_0x9143('0x2')](0x0);var events={'afterCreate':_0x9143('0x3'),'afterUpdate':'update','afterDestroy':_0x9143('0x4')};function emitEvent(_0x36e395){return function(_0x4d9d00,_0x30509d,_0x53b565){MailQueueEvents[_0x9143('0x5')](_0x36e395+':'+_0x4d9d00['id'],_0x4d9d00);MailQueueEvents[_0x9143('0x5')](_0x36e395,_0x4d9d00);_0x53b565(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];MailQueue[_0x9143('0x6')](e,emitEvent(event));}}module['exports']=MailQueueEvents;
\ No newline at end of file
+var _0xecc7=['update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','MailQueue','setMaxListeners'];(function(_0x34ae7d,_0x359c6f){var _0x5d4f3d=function(_0x2701c7){while(--_0x2701c7){_0x34ae7d['push'](_0x34ae7d['shift']());}};_0x5d4f3d(++_0x359c6f);}(_0xecc7,0xf6));var _0x7ecc=function(_0x2e8ab0,_0x92fd58){_0x2e8ab0=_0x2e8ab0-0x0;var _0x32a1a5=_0xecc7[_0x2e8ab0];return _0x32a1a5;};'use strict';var EventEmitter=require(_0x7ecc('0x0'));var MailQueue=require(_0x7ecc('0x1'))['db'][_0x7ecc('0x2')];var MailQueueEvents=new EventEmitter();MailQueueEvents[_0x7ecc('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x7ecc('0x4'),'afterDestroy':_0x7ecc('0x5')};function emitEvent(_0xbcdbd0){return function(_0x57fde3,_0x11a295,_0x388c40){MailQueueEvents['emit'](_0xbcdbd0+':'+_0x57fde3['id'],_0x57fde3);MailQueueEvents[_0x7ecc('0x6')](_0xbcdbd0,_0x57fde3);_0x388c40(null);};}for(var e in events){if(events[_0x7ecc('0x7')](e)){var event=events[e];MailQueue[_0x7ecc('0x8')](e,emitEvent(event));}}module[_0x7ecc('0x9')]=MailQueueEvents;
\ No newline at end of file
index d8137c3..561cf67 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0bd8=['util','../../config/logger','api','moment','bluebird','request-promise','define','MailQueue','mail_queues'];(function(_0x57c9cc,_0x38a986){var _0xd8844=function(_0x154d05){while(--_0x154d05){_0x57c9cc['push'](_0x57c9cc['shift']());}};_0xd8844(++_0x38a986);}(_0x0bd8,0x90));var _0x80bd=function(_0x33670a,_0x55e188){_0x33670a=_0x33670a-0x0;var _0x36ad1d=_0x0bd8[_0x33670a];return _0x36ad1d;};'use strict';var _=require('lodash');var util=require(_0x80bd('0x0'));var logger=require(_0x80bd('0x1'))(_0x80bd('0x2'));var moment=require(_0x80bd('0x3'));var BPromise=require(_0x80bd('0x4'));var rp=require(_0x80bd('0x5'));var attributes=require('./mailQueue.attributes');module['exports']=function(_0x2452e1,_0x59421e){return _0x2452e1[_0x80bd('0x6')](_0x80bd('0x7'),attributes,{'tableName':_0x80bd('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7a08=['moment','bluebird','request-promise','./mailQueue.attributes','define','MailQueue','mail_queues','../../config/logger','api'];(function(_0x528511,_0x815fd3){var _0xd1b2b7=function(_0x3bf131){while(--_0x3bf131){_0x528511['push'](_0x528511['shift']());}};_0xd1b2b7(++_0x815fd3);}(_0x7a08,0x10c));var _0x87a0=function(_0x480fc2,_0x482fba){_0x480fc2=_0x480fc2-0x0;var _0x540a95=_0x7a08[_0x480fc2];return _0x540a95;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x87a0('0x0'))(_0x87a0('0x1'));var moment=require(_0x87a0('0x2'));var BPromise=require(_0x87a0('0x3'));var rp=require(_0x87a0('0x4'));var attributes=require(_0x87a0('0x5'));module['exports']=function(_0x12b616,_0x45e846){return _0x12b616[_0x87a0('0x6')](_0x87a0('0x7'),attributes,{'tableName':_0x87a0('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1f0f1f7..08d2144 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb94c=['../../config/environment','jayson/promise','client','http','localhost','./mailQueue.socket','register','request','then','info','MailQueue,\x20%s,\x20%s','request\x20sent','debug','MailQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','MailQueue','findAll','options','raw','attributes','include','map','model','GetMailQueue','find','where','ShowMailQueue','lodash','util','bluebird','randomstring','../../config/utils','rpc'];(function(_0x45d3f0,_0x4be53f){var _0x314b79=function(_0x563d32){while(--_0x563d32){_0x45d3f0['push'](_0x45d3f0['shift']());}};_0x314b79(++_0x4be53f);}(_0xb94c,0x176));var _0xcb94=function(_0x2cb321,_0x4966fe){_0x2cb321=_0x2cb321-0x0;var _0x24c609=_0xb94c[_0x2cb321];return _0x24c609;};'use strict';var _=require(_0xcb94('0x0'));var util=require(_0xcb94('0x1'));var moment=require('moment');var BPromise=require(_0xcb94('0x2'));var rs=require(_0xcb94('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xcb94('0x4'));var logger=require('../../config/logger')(_0xcb94('0x5'));var config=require(_0xcb94('0x6'));var jayson=require(_0xcb94('0x7'));var client=jayson[_0xcb94('0x8')][_0xcb94('0x9')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0xcb94('0xa'),'port':0x18eb});require(_0xcb94('0xb'))[_0xcb94('0xc')](socket);function respondWithRpcPromise(_0x22cac1,_0x16288f,_0x484be2){return new BPromise(function(_0x1697f4,_0x3305c9){return client[_0xcb94('0xd')](_0x22cac1,_0x484be2)[_0xcb94('0xe')](function(_0x513702){logger[_0xcb94('0xf')](_0xcb94('0x10'),_0x16288f,_0xcb94('0x11'));logger[_0xcb94('0x12')](_0xcb94('0x13'),_0x16288f,_0xcb94('0x11'),JSON[_0xcb94('0x14')](_0x513702));if(_0x513702[_0xcb94('0x15')]){if(_0x513702[_0xcb94('0x15')][_0xcb94('0x16')]===0x1f4){logger['error'](_0xcb94('0x10'),_0x16288f,_0x513702[_0xcb94('0x15')]['message']);return _0x3305c9(_0x513702['error']['message']);}logger['error'](_0xcb94('0x10'),_0x16288f,_0x513702[_0xcb94('0x15')][_0xcb94('0x17')]);return _0x1697f4(_0x513702['error'][_0xcb94('0x17')]);}else{logger['info'](_0xcb94('0x10'),_0x16288f,_0xcb94('0x11'));_0x1697f4(_0x513702[_0xcb94('0x18')][_0xcb94('0x17')]);}})[_0xcb94('0x19')](function(_0x546473){logger[_0xcb94('0x15')]('MailQueue,\x20%s,\x20%s',_0x16288f,_0x546473);_0x3305c9(_0x546473);});});}exports['GetMailQueue']=function(_0x2c0500){var _0x19097c=this;return new Promise(function(_0xfa37dd,_0x173078){return db[_0xcb94('0x1a')][_0xcb94('0x1b')]({'raw':_0x2c0500[_0xcb94('0x1c')]?_0x2c0500[_0xcb94('0x1c')][_0xcb94('0x1d')]===undefined?!![]:![]:!![],'where':_0x2c0500[_0xcb94('0x1c')]?_0x2c0500[_0xcb94('0x1c')]['where']||null:null,'attributes':_0x2c0500[_0xcb94('0x1c')]?_0x2c0500['options'][_0xcb94('0x1e')]||null:null,'limit':_0x2c0500[_0xcb94('0x1c')]?_0x2c0500[_0xcb94('0x1c')]['limit']||null:null,'include':_0x2c0500[_0xcb94('0x1c')]?_0x2c0500[_0xcb94('0x1c')][_0xcb94('0x1f')]?_[_0xcb94('0x20')](_0x2c0500['options'][_0xcb94('0x1f')],function(_0x118ea4){return{'model':db[_0x118ea4[_0xcb94('0x21')]],'as':_0x118ea4['as'],'attributes':_0x118ea4[_0xcb94('0x1e')],'include':_0x118ea4['include']?_[_0xcb94('0x20')](_0x118ea4[_0xcb94('0x1f')],function(_0x291977){return{'model':db[_0x291977['model']],'as':_0x291977['as'],'attributes':_0x291977['attributes'],'include':_0x291977[_0xcb94('0x1f')]?_[_0xcb94('0x20')](_0x291977[_0xcb94('0x1f')],function(_0x165f7e){return{'model':db[_0x165f7e[_0xcb94('0x21')]],'as':_0x165f7e['as'],'attributes':_0x165f7e[_0xcb94('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xcb94('0xe')](function(_0xc9066c){logger[_0xcb94('0xf')]('GetMailQueue',_0x2c0500);logger[_0xcb94('0x12')](_0xcb94('0x22'),_0x2c0500,JSON[_0xcb94('0x14')](_0xc9066c));_0xfa37dd(_0xc9066c);})[_0xcb94('0x19')](function(_0x5c5be8){logger[_0xcb94('0x15')]('GetMailQueue',_0x5c5be8[_0xcb94('0x17')],_0x2c0500);_0x173078(_0x19097c[_0xcb94('0x15')](0x1f4,_0x5c5be8['message']));});});};exports['ShowMailQueue']=function(_0x2f52f2){var _0xacb307=this;return new Promise(function(_0x31489a,_0x5af1a1){return db[_0xcb94('0x1a')][_0xcb94('0x23')]({'raw':_0x2f52f2[_0xcb94('0x1c')]?_0x2f52f2[_0xcb94('0x1c')][_0xcb94('0x1d')]===undefined?!![]:![]:!![],'where':_0x2f52f2['options']?_0x2f52f2[_0xcb94('0x1c')][_0xcb94('0x24')]||null:null,'attributes':_0x2f52f2[_0xcb94('0x1c')]?_0x2f52f2[_0xcb94('0x1c')][_0xcb94('0x1e')]||null:null,'include':_0x2f52f2[_0xcb94('0x1c')]?_0x2f52f2[_0xcb94('0x1c')]['include']?_[_0xcb94('0x20')](_0x2f52f2[_0xcb94('0x1c')][_0xcb94('0x1f')],function(_0x240403){return{'model':db[_0x240403['model']],'as':_0x240403['as'],'attributes':_0x240403['attributes'],'include':_0x240403[_0xcb94('0x1f')]?_[_0xcb94('0x20')](_0x240403[_0xcb94('0x1f')],function(_0x3ebb7b){return{'model':db[_0x3ebb7b[_0xcb94('0x21')]],'as':_0x3ebb7b['as'],'attributes':_0x3ebb7b[_0xcb94('0x1e')],'include':_0x3ebb7b[_0xcb94('0x1f')]?_[_0xcb94('0x20')](_0x3ebb7b[_0xcb94('0x1f')],function(_0x1f488e){return{'model':db[_0x1f488e[_0xcb94('0x21')]],'as':_0x1f488e['as'],'attributes':_0x1f488e['attributes']};}):[]};}):[]};}):[]:[]})[_0xcb94('0xe')](function(_0x129ca9){logger[_0xcb94('0xf')](_0xcb94('0x25'),_0x2f52f2);logger['debug'](_0xcb94('0x25'),_0x2f52f2,JSON[_0xcb94('0x14')](_0x129ca9));_0x31489a(_0x129ca9);})['catch'](function(_0x546686){logger[_0xcb94('0x15')](_0xcb94('0x25'),_0x546686[_0xcb94('0x17')],_0x2f52f2);_0x5af1a1(_0xacb307[_0xcb94('0x15')](0x1f4,_0x546686[_0xcb94('0x17')]));});});};
\ No newline at end of file
+var _0xf956=['raw','where','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','./mailQueue.socket','register','request','then','info','request\x20sent','debug','MailQueue,\x20%s,\x20%s,\x20%s','stringify','code','error','message','MailQueue,\x20%s,\x20%s','GetMailQueue','MailQueue','findAll','options','attributes','limit','include','model','map','catch','ShowMailQueue'];(function(_0x54ac83,_0x15bf52){var _0x978ffd=function(_0x4423a1){while(--_0x4423a1){_0x54ac83['push'](_0x54ac83['shift']());}};_0x978ffd(++_0x15bf52);}(_0xf956,0x7a));var _0x6f95=function(_0x45dedd,_0x593718){_0x45dedd=_0x45dedd-0x0;var _0x4d3f39=_0xf956[_0x45dedd];return _0x4d3f39;};'use strict';var _=require(_0x6f95('0x0'));var util=require(_0x6f95('0x1'));var moment=require(_0x6f95('0x2'));var BPromise=require(_0x6f95('0x3'));var rs=require(_0x6f95('0x4'));var fs=require('fs');var db=require(_0x6f95('0x5'))['db'];var utils=require(_0x6f95('0x6'));var logger=require('../../config/logger')(_0x6f95('0x7'));var config=require(_0x6f95('0x8'));var jayson=require(_0x6f95('0x9'));var client=jayson[_0x6f95('0xa')][_0x6f95('0xb')]({'port':0x232a});var socket=require(_0x6f95('0xc'))({'host':_0x6f95('0xd'),'port':0x18eb});require(_0x6f95('0xe'))[_0x6f95('0xf')](socket);function respondWithRpcPromise(_0x42f27b,_0x2f9966,_0x9fdaed){return new BPromise(function(_0x179b50,_0x5d176d){return client[_0x6f95('0x10')](_0x42f27b,_0x9fdaed)[_0x6f95('0x11')](function(_0x5c291c){logger[_0x6f95('0x12')]('MailQueue,\x20%s,\x20%s',_0x2f9966,_0x6f95('0x13'));logger[_0x6f95('0x14')](_0x6f95('0x15'),_0x2f9966,_0x6f95('0x13'),JSON[_0x6f95('0x16')](_0x5c291c));if(_0x5c291c['error']){if(_0x5c291c['error'][_0x6f95('0x17')]===0x1f4){logger[_0x6f95('0x18')]('MailQueue,\x20%s,\x20%s',_0x2f9966,_0x5c291c[_0x6f95('0x18')][_0x6f95('0x19')]);return _0x5d176d(_0x5c291c[_0x6f95('0x18')][_0x6f95('0x19')]);}logger[_0x6f95('0x18')](_0x6f95('0x1a'),_0x2f9966,_0x5c291c['error'][_0x6f95('0x19')]);return _0x179b50(_0x5c291c[_0x6f95('0x18')][_0x6f95('0x19')]);}else{logger[_0x6f95('0x12')](_0x6f95('0x1a'),_0x2f9966,_0x6f95('0x13'));_0x179b50(_0x5c291c['result'][_0x6f95('0x19')]);}})['catch'](function(_0x4674f8){logger['error']('MailQueue,\x20%s,\x20%s',_0x2f9966,_0x4674f8);_0x5d176d(_0x4674f8);});});}exports[_0x6f95('0x1b')]=function(_0x224ae5){var _0x2fe85b=this;return new Promise(function(_0x52e9ec,_0x527c68){return db[_0x6f95('0x1c')][_0x6f95('0x1d')]({'raw':_0x224ae5['options']?_0x224ae5['options']['raw']===undefined?!![]:![]:!![],'where':_0x224ae5[_0x6f95('0x1e')]?_0x224ae5[_0x6f95('0x1e')]['where']||null:null,'attributes':_0x224ae5[_0x6f95('0x1e')]?_0x224ae5[_0x6f95('0x1e')][_0x6f95('0x1f')]||null:null,'limit':_0x224ae5[_0x6f95('0x1e')]?_0x224ae5[_0x6f95('0x1e')][_0x6f95('0x20')]||null:null,'include':_0x224ae5['options']?_0x224ae5[_0x6f95('0x1e')][_0x6f95('0x21')]?_['map'](_0x224ae5[_0x6f95('0x1e')][_0x6f95('0x21')],function(_0x265077){return{'model':db[_0x265077[_0x6f95('0x22')]],'as':_0x265077['as'],'attributes':_0x265077[_0x6f95('0x1f')],'include':_0x265077['include']?_[_0x6f95('0x23')](_0x265077[_0x6f95('0x21')],function(_0x4183d6){return{'model':db[_0x4183d6['model']],'as':_0x4183d6['as'],'attributes':_0x4183d6[_0x6f95('0x1f')],'include':_0x4183d6[_0x6f95('0x21')]?_[_0x6f95('0x23')](_0x4183d6['include'],function(_0x312155){return{'model':db[_0x312155[_0x6f95('0x22')]],'as':_0x312155['as'],'attributes':_0x312155[_0x6f95('0x1f')]};}):[]};}):[]};}):[]:[]})[_0x6f95('0x11')](function(_0x196388){logger[_0x6f95('0x12')](_0x6f95('0x1b'),_0x224ae5);logger[_0x6f95('0x14')](_0x6f95('0x1b'),_0x224ae5,JSON[_0x6f95('0x16')](_0x196388));_0x52e9ec(_0x196388);})[_0x6f95('0x24')](function(_0x3ce69c){logger[_0x6f95('0x18')](_0x6f95('0x1b'),_0x3ce69c[_0x6f95('0x19')],_0x224ae5);_0x527c68(_0x2fe85b[_0x6f95('0x18')](0x1f4,_0x3ce69c[_0x6f95('0x19')]));});});};exports[_0x6f95('0x25')]=function(_0x2888d3){var _0x345827=this;return new Promise(function(_0x4d390a,_0x2e97cb){return db[_0x6f95('0x1c')]['find']({'raw':_0x2888d3[_0x6f95('0x1e')]?_0x2888d3[_0x6f95('0x1e')][_0x6f95('0x26')]===undefined?!![]:![]:!![],'where':_0x2888d3[_0x6f95('0x1e')]?_0x2888d3[_0x6f95('0x1e')][_0x6f95('0x27')]||null:null,'attributes':_0x2888d3['options']?_0x2888d3[_0x6f95('0x1e')]['attributes']||null:null,'include':_0x2888d3['options']?_0x2888d3[_0x6f95('0x1e')][_0x6f95('0x21')]?_[_0x6f95('0x23')](_0x2888d3['options'][_0x6f95('0x21')],function(_0x482e90){return{'model':db[_0x482e90[_0x6f95('0x22')]],'as':_0x482e90['as'],'attributes':_0x482e90[_0x6f95('0x1f')],'include':_0x482e90[_0x6f95('0x21')]?_[_0x6f95('0x23')](_0x482e90[_0x6f95('0x21')],function(_0x544058){return{'model':db[_0x544058[_0x6f95('0x22')]],'as':_0x544058['as'],'attributes':_0x544058[_0x6f95('0x1f')],'include':_0x544058[_0x6f95('0x21')]?_['map'](_0x544058[_0x6f95('0x21')],function(_0x28940d){return{'model':db[_0x28940d[_0x6f95('0x22')]],'as':_0x28940d['as'],'attributes':_0x28940d[_0x6f95('0x1f')]};}):[]};}):[]};}):[]:[]})[_0x6f95('0x11')](function(_0x1151ff){logger['info'](_0x6f95('0x25'),_0x2888d3);logger['debug']('ShowMailQueue',_0x2888d3,JSON['stringify'](_0x1151ff));_0x4d390a(_0x1151ff);})[_0x6f95('0x24')](function(_0xf94528){logger[_0x6f95('0x18')]('ShowMailQueue',_0xf94528['message'],_0x2888d3);_0x2e97cb(_0x345827['error'](0x1f4,_0xf94528['message']));});});};
\ No newline at end of file
index d70819b..0219b12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f62=['save','remove','removeListener','register','length','mailQueue:','./mailQueue.events'];(function(_0x278f84,_0x3a0a8d){var _0x44ff7f=function(_0x5c9163){while(--_0x5c9163){_0x278f84['push'](_0x278f84['shift']());}};_0x44ff7f(++_0x3a0a8d);}(_0x4f62,0x1b8));var _0x24f6=function(_0x4243a3,_0x447337){_0x4243a3=_0x4243a3-0x0;var _0x1b2a33=_0x4f62[_0x4243a3];return _0x1b2a33;};'use strict';var MailQueueEvents=require(_0x24f6('0x0'));var events=[_0x24f6('0x1'),_0x24f6('0x2'),'update'];function createListener(_0x1cba84,_0x2b9f90){return function(_0x3aa69b){_0x2b9f90['emit'](_0x1cba84,_0x3aa69b);};}function removeListener(_0x4ce7bf,_0x5402a2){return function(){MailQueueEvents[_0x24f6('0x3')](_0x4ce7bf,_0x5402a2);};}exports[_0x24f6('0x4')]=function(_0x4108fb){for(var _0x5275c1=0x0,_0x220970=events[_0x24f6('0x5')];_0x5275c1<_0x220970;_0x5275c1++){var _0x28e065=events[_0x5275c1];var _0x35898c=createListener(_0x24f6('0x6')+_0x28e065,_0x4108fb);MailQueueEvents['on'](_0x28e065,_0x35898c);}};
\ No newline at end of file
+var _0xfe5c=['removeListener','register','./mailQueue.events','save','remove'];(function(_0x13d07a,_0x41efc3){var _0x5ee0ee=function(_0x4ca94a){while(--_0x4ca94a){_0x13d07a['push'](_0x13d07a['shift']());}};_0x5ee0ee(++_0x41efc3);}(_0xfe5c,0xca));var _0xcfe5=function(_0x54e55a,_0x57e4c8){_0x54e55a=_0x54e55a-0x0;var _0x829a65=_0xfe5c[_0x54e55a];return _0x829a65;};'use strict';var MailQueueEvents=require(_0xcfe5('0x0'));var events=[_0xcfe5('0x1'),_0xcfe5('0x2'),'update'];function createListener(_0x1ff550,_0x26db3d){return function(_0x5a9260){_0x26db3d['emit'](_0x1ff550,_0x5a9260);};}function removeListener(_0x5223d0,_0x3db441){return function(){MailQueueEvents[_0xcfe5('0x3')](_0x5223d0,_0x3db441);};}exports[_0xcfe5('0x4')]=function(_0x575e9d){for(var _0x471b9c=0x0,_0x20d222=events['length'];_0x471b9c<_0x20d222;_0x471b9c++){var _0xe5ea19=events[_0x471b9c];var _0x452ba7=createListener('mailQueue:'+_0xe5ea19,_0x575e9d);MailQueueEvents['on'](_0xe5ea19,_0x452ba7);}};
\ No newline at end of file
index 13afe6c..903c604 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6031=['../../config/environment','get','isAuthenticated','/describe','describe','show','create','put','update','delete','/:id','destroy','exports','multer','util','path','express','../../components/interaction/service'];(function(_0x23002d,_0x3d7220){var _0x4c7829=function(_0x25a9f3){while(--_0x25a9f3){_0x23002d['push'](_0x23002d['shift']());}};_0x4c7829(++_0x3d7220);}(_0x6031,0x13f));var _0x1603=function(_0x44116a,_0x5b1a34){_0x44116a=_0x44116a-0x0;var _0x5c9e43=_0x6031[_0x44116a];return _0x5c9e43;};'use strict';var multer=require(_0x1603('0x0'));var util=require(_0x1603('0x1'));var path=require(_0x1603('0x2'));var express=require(_0x1603('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x1603('0x4'));var config=require(_0x1603('0x5'));var controller=require('./mailQueueReport.controller');router[_0x1603('0x6')]('/',auth[_0x1603('0x7')](),controller['index']);router['get'](_0x1603('0x8'),auth[_0x1603('0x7')](),controller[_0x1603('0x9')]);router[_0x1603('0x6')]('/:id',auth[_0x1603('0x7')](),controller[_0x1603('0xa')]);router['post']('/',auth[_0x1603('0x7')](),controller[_0x1603('0xb')]);router[_0x1603('0xc')]('/:id',auth['isAuthenticated'](),controller[_0x1603('0xd')]);router[_0x1603('0xe')](_0x1603('0xf'),auth[_0x1603('0x7')](),controller[_0x1603('0x10')]);module[_0x1603('0x11')]=router;
\ No newline at end of file
+var _0x877b=['../../components/interaction/service','../../config/environment','./mailQueueReport.controller','get','index','/describe','isAuthenticated','describe','/:id','post','create','put','update','delete','destroy','multer','util','path','express','Router'];(function(_0x3ae4bf,_0x554978){var _0x27f7dd=function(_0x406997){while(--_0x406997){_0x3ae4bf['push'](_0x3ae4bf['shift']());}};_0x27f7dd(++_0x554978);}(_0x877b,0x73));var _0xb877=function(_0xd9736a,_0x58bfcf){_0xd9736a=_0xd9736a-0x0;var _0x8ec1d6=_0x877b[_0xd9736a];return _0x8ec1d6;};'use strict';var multer=require(_0xb877('0x0'));var util=require(_0xb877('0x1'));var path=require(_0xb877('0x2'));var express=require(_0xb877('0x3'));var router=express[_0xb877('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xb877('0x5'));var config=require(_0xb877('0x6'));var controller=require(_0xb877('0x7'));router[_0xb877('0x8')]('/',auth['isAuthenticated'](),controller[_0xb877('0x9')]);router['get'](_0xb877('0xa'),auth[_0xb877('0xb')](),controller[_0xb877('0xc')]);router[_0xb877('0x8')](_0xb877('0xd'),auth[_0xb877('0xb')](),controller['show']);router[_0xb877('0xe')]('/',auth[_0xb877('0xb')](),controller[_0xb877('0xf')]);router[_0xb877('0x10')](_0xb877('0xd'),auth[_0xb877('0xb')](),controller[_0xb877('0x11')]);router[_0xb877('0x12')](_0xb877('0xd'),auth[_0xb877('0xb')](),controller[_0xb877('0x13')]);module['exports']=router;
\ No newline at end of file
index 2c332b2..9f9cecc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbfa9=['STRING','DATE','sequelize'];(function(_0x1628ac,_0x5874ca){var _0x89c90f=function(_0x8f66ce){while(--_0x8f66ce){_0x1628ac['push'](_0x1628ac['shift']());}};_0x89c90f(++_0x5874ca);}(_0xbfa9,0x107));var _0x9bfa=function(_0x5bfc72,_0x959e59){_0x5bfc72=_0x5bfc72-0x0;var _0x11fe83=_0xbfa9[_0x5bfc72];return _0x11fe83;};'use strict';var moment=require('moment');var Sequelize=require(_0x9bfa('0x0'));module['exports']={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'from':{'type':Sequelize[_0x9bfa('0x1')]},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0x9bfa('0x2')]},'exitAt':{'type':Sequelize[_0x9bfa('0x2')]},'reason':{'type':Sequelize[_0x9bfa('0x1')]}};
\ No newline at end of file
+var _0x7bf4=['sequelize','exports','STRING','DATE','moment'];(function(_0x46d0c9,_0x526bfa){var _0x174506=function(_0x654bc6){while(--_0x654bc6){_0x46d0c9['push'](_0x46d0c9['shift']());}};_0x174506(++_0x526bfa);}(_0x7bf4,0xdb));var _0x47bf=function(_0x70f8eb,_0x45e697){_0x70f8eb=_0x70f8eb-0x0;var _0xf3a49d=_0x7bf4[_0x70f8eb];return _0xf3a49d;};'use strict';var moment=require(_0x47bf('0x0'));var Sequelize=require(_0x47bf('0x1'));module[_0x47bf('0x2')]={'uniqueid':{'type':Sequelize[_0x47bf('0x3')],'allowNull':![]},'from':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize[_0x47bf('0x4')]},'acceptAt':{'type':Sequelize[_0x47bf('0x4')]},'exitAt':{'type':Sequelize[_0x47bf('0x4')]},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 58c47ab..1c29b50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed42=['../../config/logger','api','status','end','json','offset','limit','set','Content-Range','apply','save','update','destroy','then','sendStatus','error','name','send','MailQueueReport','rawAttributes','model','query','dateStart','dateEnd','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','filters','add','day','merge','where','filter','map','options','count','includeAll','include','findAll','catch','show','params','find','create','body','describe','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js'];(function(_0x50b316,_0x41ade7){var _0x2dcb60=function(_0x45da86){while(--_0x45da86){_0x50b316['push'](_0x50b316['shift']());}};_0x2dcb60(++_0x41ade7);}(_0xed42,0xb6));var _0x2ed4=function(_0x247731,_0x5880b7){_0x247731=_0x247731-0x0;var _0x113cbf=_0xed42[_0x247731];return _0x113cbf;};'use strict';var jsonpatch=require(_0x2ed4('0x0'));var rp=require(_0x2ed4('0x1'));var moment=require(_0x2ed4('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x2ed4('0x3'));var util=require('util');var path=require(_0x2ed4('0x4'));var sox=require(_0x2ed4('0x5'));var csv=require(_0x2ed4('0x6'));var ejs=require(_0x2ed4('0x7'));var fs=require('fs');var _=require(_0x2ed4('0x8'));var squel=require(_0x2ed4('0x9'));var crypto=require(_0x2ed4('0xa'));var jsforce=require(_0x2ed4('0xb'));var deskjs=require(_0x2ed4('0xc'));var toCsv=require(_0x2ed4('0x6'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0x2ed4('0xd'))(_0x2ed4('0xe'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1edb3e,_0x53a825){_0x53a825=_0x53a825||0xcc;return function(_0x56c049){if(_0x56c049){return _0x1edb3e['sendStatus'](_0x53a825);}return _0x1edb3e[_0x2ed4('0xf')](_0x53a825)[_0x2ed4('0x10')]();};}function respondWithResult(_0x2165ab,_0x2f4264){_0x2f4264=_0x2f4264||0xc8;return function(_0x538e21){if(_0x538e21){return _0x2165ab[_0x2ed4('0xf')](_0x2f4264)[_0x2ed4('0x11')](_0x538e21);}};}function respondWithFilteredResult(_0x532d58,_0x2c4b6f){return function(_0x4eb2fd){if(_0x4eb2fd){var _0x1c7eee=_0x4eb2fd['count'],_0x313310=_0x2c4b6f[_0x2ed4('0x12')],_0x1d9bdb=_0x2c4b6f[_0x2ed4('0x12')]+_0x2c4b6f[_0x2ed4('0x13')],_0x2c4b4b;if(_0x1d9bdb>=_0x1c7eee){_0x1d9bdb=_0x1c7eee;_0x2c4b4b=0xc8;}else{_0x2c4b4b=0xce;}_0x532d58[_0x2ed4('0xf')](_0x2c4b4b);return _0x532d58[_0x2ed4('0x14')](_0x2ed4('0x15'),_0x313310+'-'+_0x1d9bdb+'/'+_0x1c7eee)[_0x2ed4('0x11')](_0x4eb2fd);}return null;};}function patchUpdates(_0x13d42e){return function(_0x557a5c){try{jsonpatch[_0x2ed4('0x16')](_0x557a5c,_0x13d42e,!![]);}catch(_0x1151ab){return BPromise['reject'](_0x1151ab);}return _0x557a5c[_0x2ed4('0x17')]();};}function saveUpdates(_0x47d482,_0x259938){return function(_0x31bcef){if(_0x31bcef){return _0x31bcef[_0x2ed4('0x18')](_0x47d482)['then'](function(_0x2bf040){return _0x2bf040;});}return null;};}function removeEntity(_0x2e95a0,_0x1347c7){return function(_0x290a7d){if(_0x290a7d){return _0x290a7d[_0x2ed4('0x19')]()[_0x2ed4('0x1a')](function(){_0x2e95a0['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x58e709,_0x1a3357){return function(_0x3a51fa){if(!_0x3a51fa){_0x58e709[_0x2ed4('0x1b')](0x194);}return _0x3a51fa;};}function handleError(_0x3420c0,_0x3b3d29){_0x3b3d29=_0x3b3d29||0x1f4;return function(_0x11a831){logger[_0x2ed4('0x1c')](_0x11a831['stack']);if(_0x11a831[_0x2ed4('0x1d')]){delete _0x11a831[_0x2ed4('0x1d')];}_0x3420c0[_0x2ed4('0xf')](_0x3b3d29)[_0x2ed4('0x1e')](_0x11a831);};}exports['index']=function(_0x52df0f,_0x318b82){var _0x16c62a={},_0x4eb742={},_0x4f17bf={'count':0x0,'rows':[]};var _0x79d422=db[_0x2ed4('0x1f')][_0x2ed4('0x20')];_0x4eb742[_0x2ed4('0x21')]=_['keys'](_0x79d422);var _0x2b4338={'dateStart':_0x52df0f[_0x2ed4('0x22')][_0x2ed4('0x23')],'dateEnd':_0x52df0f[_0x2ed4('0x22')][_0x2ed4('0x24')]};delete _0x52df0f['query']['dateStart'];delete _0x52df0f['query'][_0x2ed4('0x24')];_0x4eb742[_0x2ed4('0x22')]=_[_0x2ed4('0x25')](_0x52df0f['query']);_0x4eb742['filters']=_[_0x2ed4('0x26')](_0x4eb742[_0x2ed4('0x21')],_0x4eb742[_0x2ed4('0x22')]);_0x16c62a[_0x2ed4('0x27')]=_[_0x2ed4('0x26')](_0x4eb742[_0x2ed4('0x21')],qs[_0x2ed4('0x28')](_0x52df0f['query']['fields']));_0x16c62a[_0x2ed4('0x27')]=_0x16c62a[_0x2ed4('0x27')][_0x2ed4('0x29')]?_0x16c62a[_0x2ed4('0x27')]:_0x4eb742['model'];if(!_0x52df0f['query'][_0x2ed4('0x2a')](_0x2ed4('0x2b'))){_0x16c62a[_0x2ed4('0x13')]=qs['limit'](_0x52df0f['query']['limit']);_0x16c62a[_0x2ed4('0x12')]=qs[_0x2ed4('0x12')](_0x52df0f['query']['offset']);}_0x16c62a[_0x2ed4('0x2c')]=qs[_0x2ed4('0x2d')](_0x52df0f[_0x2ed4('0x22')][_0x2ed4('0x2d')]);_0x16c62a['where']=qs['filters'](_['pick'](_0x52df0f[_0x2ed4('0x22')],_0x4eb742[_0x2ed4('0x2e')]));if(_0x2b4338['dateStart']){if(_0x2b4338['dateEnd']){_0x2b4338[_0x2ed4('0x24')]=moment(_0x2b4338['dateEnd'])[_0x2ed4('0x2f')](0x1,_0x2ed4('0x30'));}else{_0x2b4338[_0x2ed4('0x24')]=moment(_0x2b4338[_0x2ed4('0x23')])[_0x2ed4('0x2f')](0x1,_0x2ed4('0x30'));}_[_0x2ed4('0x31')](_0x16c62a[_0x2ed4('0x32')],{'createdAt':{'$gte':_0x2b4338[_0x2ed4('0x23')],'$lte':_0x2b4338[_0x2ed4('0x24')]}});}if(_0x52df0f['query'][_0x2ed4('0x33')]){_0x16c62a['where']=_[_0x2ed4('0x31')](_0x16c62a[_0x2ed4('0x32')],{'$or':_[_0x2ed4('0x34')](_0x16c62a[_0x2ed4('0x27')],function(_0x3a0db2){var _0x3469f3={};_0x3469f3[_0x3a0db2]={'$like':'%'+_0x52df0f[_0x2ed4('0x22')][_0x2ed4('0x33')]+'%'};return _0x3469f3;})});}_0x16c62a=_[_0x2ed4('0x31')]({},_0x16c62a,_0x52df0f[_0x2ed4('0x35')]);var _0x16cbd5={'where':_0x16c62a[_0x2ed4('0x32')]};return db[_0x2ed4('0x1f')][_0x2ed4('0x36')](_0x16cbd5)[_0x2ed4('0x1a')](function(_0x68191a){_0x4f17bf[_0x2ed4('0x36')]=_0x68191a;if(_0x52df0f[_0x2ed4('0x22')][_0x2ed4('0x37')]){_0x16c62a[_0x2ed4('0x38')]=[{'all':!![]}];}return db['MailQueueReport'][_0x2ed4('0x39')](_0x16c62a);})[_0x2ed4('0x1a')](function(_0xb45bf){_0x4f17bf['rows']=_0xb45bf;return _0x4f17bf;})[_0x2ed4('0x1a')](respondWithFilteredResult(_0x318b82,_0x16c62a))[_0x2ed4('0x3a')](handleError(_0x318b82,null));};exports[_0x2ed4('0x3b')]=function(_0x3194bf,_0x2ca1e8){var _0x316c60={'raw':!![],'where':{'id':_0x3194bf[_0x2ed4('0x3c')]['id']}},_0x27c22a={};_0x27c22a[_0x2ed4('0x21')]=_[_0x2ed4('0x25')](db[_0x2ed4('0x1f')][_0x2ed4('0x20')]);_0x27c22a['query']=_['keys'](_0x3194bf['query']);_0x27c22a['filters']=_[_0x2ed4('0x26')](_0x27c22a[_0x2ed4('0x21')],_0x27c22a[_0x2ed4('0x22')]);_0x316c60[_0x2ed4('0x27')]=_['intersection'](_0x27c22a[_0x2ed4('0x21')],qs[_0x2ed4('0x28')](_0x3194bf['query']['fields']));_0x316c60[_0x2ed4('0x27')]=_0x316c60[_0x2ed4('0x27')][_0x2ed4('0x29')]?_0x316c60['attributes']:_0x27c22a[_0x2ed4('0x21')];if(_0x3194bf[_0x2ed4('0x22')][_0x2ed4('0x37')]){_0x316c60['include']=[{'all':!![]}];}_0x316c60=_['merge']({},_0x316c60,_0x3194bf['options']);return db[_0x2ed4('0x1f')][_0x2ed4('0x3d')](_0x316c60)[_0x2ed4('0x1a')](handleEntityNotFound(_0x2ca1e8,null))[_0x2ed4('0x1a')](respondWithResult(_0x2ca1e8,null))[_0x2ed4('0x3a')](handleError(_0x2ca1e8,null));};exports[_0x2ed4('0x3e')]=function(_0x22f681,_0xc95534){return db[_0x2ed4('0x1f')][_0x2ed4('0x3e')](_0x22f681['body'],{})[_0x2ed4('0x1a')](respondWithResult(_0xc95534,0xc9))['catch'](handleError(_0xc95534,null));};exports[_0x2ed4('0x18')]=function(_0xb8dca9,_0x148a67){if(_0xb8dca9[_0x2ed4('0x3f')]['id']){delete _0xb8dca9[_0x2ed4('0x3f')]['id'];}return db['MailQueueReport'][_0x2ed4('0x3d')]({'where':{'id':_0xb8dca9['params']['id']}})['then'](handleEntityNotFound(_0x148a67,null))[_0x2ed4('0x1a')](saveUpdates(_0xb8dca9[_0x2ed4('0x3f')],null))['then'](respondWithResult(_0x148a67,null))[_0x2ed4('0x3a')](handleError(_0x148a67,null));};exports[_0x2ed4('0x19')]=function(_0x2d7df5,_0xf14ab3){return db[_0x2ed4('0x1f')]['find']({'where':{'id':_0x2d7df5[_0x2ed4('0x3c')]['id']}})['then'](handleEntityNotFound(_0xf14ab3,null))[_0x2ed4('0x1a')](removeEntity(_0xf14ab3,null))[_0x2ed4('0x3a')](handleError(_0xf14ab3,null));};exports[_0x2ed4('0x40')]=function(_0x3bad98,_0x18b350){return db[_0x2ed4('0x1f')][_0x2ed4('0x40')]()[_0x2ed4('0x1a')](respondWithResult(_0x18b350,null))['catch'](handleError(_0x18b350,null));};
\ No newline at end of file
+var _0x5974=['create','body','destroy','describe','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','offset','limit','set','apply','reject','update','then','end','error','stack','name','send','index','MailQueueReport','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','add','day','merge','filter','map','options','count','include','findAll','rows','catch','show','params','includeAll','find'];(function(_0x502c7d,_0x2f1285){var _0x30b7ed=function(_0x2d92f3){while(--_0x2d92f3){_0x502c7d['push'](_0x502c7d['shift']());}};_0x30b7ed(++_0x2f1285);}(_0x5974,0xd3));var _0x4597=function(_0x4e47f7,_0x205e52){_0x4e47f7=_0x4e47f7-0x0;var _0x24b111=_0x5974[_0x4e47f7];return _0x24b111;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x4597('0x0'));var moment=require(_0x4597('0x1'));var BPromise=require(_0x4597('0x2'));var Mustache=require(_0x4597('0x3'));var util=require(_0x4597('0x4'));var path=require(_0x4597('0x5'));var sox=require(_0x4597('0x6'));var csv=require('to-csv');var ejs=require(_0x4597('0x7'));var fs=require('fs');var _=require(_0x4597('0x8'));var squel=require(_0x4597('0x9'));var crypto=require(_0x4597('0xa'));var jsforce=require(_0x4597('0xb'));var deskjs=require(_0x4597('0xc'));var toCsv=require(_0x4597('0xd'));var querystring=require(_0x4597('0xe'));var Papa=require('papaparse');var qs=require(_0x4597('0xf'));var logger=require('../../config/logger')('api');var utils=require(_0x4597('0x10'));var config=require(_0x4597('0x11'));var db=require(_0x4597('0x12'))['db'];function respondWithStatusCode(_0xe97d7d,_0x255aa3){_0x255aa3=_0x255aa3||0xcc;return function(_0x402793){if(_0x402793){return _0xe97d7d[_0x4597('0x13')](_0x255aa3);}return _0xe97d7d[_0x4597('0x14')](_0x255aa3)['end']();};}function respondWithResult(_0x713ed1,_0x2492fe){_0x2492fe=_0x2492fe||0xc8;return function(_0x4c8463){if(_0x4c8463){return _0x713ed1[_0x4597('0x14')](_0x2492fe)['json'](_0x4c8463);}};}function respondWithFilteredResult(_0x1e4d10,_0x4a6814){return function(_0x3384f8){if(_0x3384f8){var _0x47172e=_0x3384f8['count'],_0x264ec3=_0x4a6814[_0x4597('0x15')],_0x5612ca=_0x4a6814['offset']+_0x4a6814[_0x4597('0x16')],_0x1e9967;if(_0x5612ca>=_0x47172e){_0x5612ca=_0x47172e;_0x1e9967=0xc8;}else{_0x1e9967=0xce;}_0x1e4d10[_0x4597('0x14')](_0x1e9967);return _0x1e4d10[_0x4597('0x17')]('Content-Range',_0x264ec3+'-'+_0x5612ca+'/'+_0x47172e)['json'](_0x3384f8);}return null;};}function patchUpdates(_0x360cba){return function(_0x390c85){try{jsonpatch[_0x4597('0x18')](_0x390c85,_0x360cba,!![]);}catch(_0x5714e7){return BPromise[_0x4597('0x19')](_0x5714e7);}return _0x390c85['save']();};}function saveUpdates(_0x1e9609,_0x51213c){return function(_0x2e5d03){if(_0x2e5d03){return _0x2e5d03[_0x4597('0x1a')](_0x1e9609)['then'](function(_0xc70796){return _0xc70796;});}return null;};}function removeEntity(_0x11dbdd,_0x3b9102){return function(_0x1c08b0){if(_0x1c08b0){return _0x1c08b0['destroy']()[_0x4597('0x1b')](function(){_0x11dbdd[_0x4597('0x14')](0xcc)[_0x4597('0x1c')]();});}};}function handleEntityNotFound(_0x25c306,_0x1a22e4){return function(_0x1774f4){if(!_0x1774f4){_0x25c306[_0x4597('0x13')](0x194);}return _0x1774f4;};}function handleError(_0x4906ec,_0x48000c){_0x48000c=_0x48000c||0x1f4;return function(_0x37c32c){logger[_0x4597('0x1d')](_0x37c32c[_0x4597('0x1e')]);if(_0x37c32c[_0x4597('0x1f')]){delete _0x37c32c[_0x4597('0x1f')];}_0x4906ec['status'](_0x48000c)[_0x4597('0x20')](_0x37c32c);};}exports[_0x4597('0x21')]=function(_0x2c3638,_0x2ccf34){var _0x5b3b5e={},_0x564495={},_0xc5f26c={'count':0x0,'rows':[]};var _0x1d0fbd=db[_0x4597('0x22')][_0x4597('0x23')];_0x564495[_0x4597('0x24')]=_[_0x4597('0x25')](_0x1d0fbd);var _0x475a14={'dateStart':_0x2c3638[_0x4597('0x26')][_0x4597('0x27')],'dateEnd':_0x2c3638[_0x4597('0x26')][_0x4597('0x28')]};delete _0x2c3638['query']['dateStart'];delete _0x2c3638[_0x4597('0x26')][_0x4597('0x28')];_0x564495[_0x4597('0x26')]=_[_0x4597('0x25')](_0x2c3638[_0x4597('0x26')]);_0x564495[_0x4597('0x29')]=_[_0x4597('0x2a')](_0x564495[_0x4597('0x24')],_0x564495['query']);_0x5b3b5e[_0x4597('0x2b')]=_[_0x4597('0x2a')](_0x564495[_0x4597('0x24')],qs[_0x4597('0x2c')](_0x2c3638[_0x4597('0x26')][_0x4597('0x2c')]));_0x5b3b5e[_0x4597('0x2b')]=_0x5b3b5e[_0x4597('0x2b')][_0x4597('0x2d')]?_0x5b3b5e[_0x4597('0x2b')]:_0x564495['model'];if(!_0x2c3638[_0x4597('0x26')][_0x4597('0x2e')]('nolimit')){_0x5b3b5e['limit']=qs['limit'](_0x2c3638[_0x4597('0x26')][_0x4597('0x16')]);_0x5b3b5e[_0x4597('0x15')]=qs['offset'](_0x2c3638[_0x4597('0x26')][_0x4597('0x15')]);}_0x5b3b5e[_0x4597('0x2f')]=qs[_0x4597('0x30')](_0x2c3638[_0x4597('0x26')]['sort']);_0x5b3b5e[_0x4597('0x31')]=qs[_0x4597('0x29')](_['pick'](_0x2c3638[_0x4597('0x26')],_0x564495[_0x4597('0x29')]));if(_0x475a14[_0x4597('0x27')]){if(_0x475a14['dateEnd']){_0x475a14[_0x4597('0x28')]=moment(_0x475a14[_0x4597('0x28')])[_0x4597('0x32')](0x1,_0x4597('0x33'));}else{_0x475a14['dateEnd']=moment(_0x475a14['dateStart'])['add'](0x1,_0x4597('0x33'));}_[_0x4597('0x34')](_0x5b3b5e[_0x4597('0x31')],{'createdAt':{'$gte':_0x475a14[_0x4597('0x27')],'$lte':_0x475a14[_0x4597('0x28')]}});}if(_0x2c3638[_0x4597('0x26')][_0x4597('0x35')]){_0x5b3b5e[_0x4597('0x31')]=_[_0x4597('0x34')](_0x5b3b5e['where'],{'$or':_[_0x4597('0x36')](_0x5b3b5e[_0x4597('0x2b')],function(_0x4f35c1){var _0x232453={};_0x232453[_0x4f35c1]={'$like':'%'+_0x2c3638[_0x4597('0x26')]['filter']+'%'};return _0x232453;})});}_0x5b3b5e=_['merge']({},_0x5b3b5e,_0x2c3638[_0x4597('0x37')]);var _0x1e8fa3={'where':_0x5b3b5e[_0x4597('0x31')]};return db[_0x4597('0x22')][_0x4597('0x38')](_0x1e8fa3)['then'](function(_0x54482d){_0xc5f26c[_0x4597('0x38')]=_0x54482d;if(_0x2c3638[_0x4597('0x26')]['includeAll']){_0x5b3b5e[_0x4597('0x39')]=[{'all':!![]}];}return db[_0x4597('0x22')][_0x4597('0x3a')](_0x5b3b5e);})[_0x4597('0x1b')](function(_0x562422){_0xc5f26c[_0x4597('0x3b')]=_0x562422;return _0xc5f26c;})[_0x4597('0x1b')](respondWithFilteredResult(_0x2ccf34,_0x5b3b5e))[_0x4597('0x3c')](handleError(_0x2ccf34,null));};exports[_0x4597('0x3d')]=function(_0x4a1395,_0x2f5915){var _0x5e91e1={'raw':!![],'where':{'id':_0x4a1395[_0x4597('0x3e')]['id']}},_0x166dd7={};_0x166dd7[_0x4597('0x24')]=_[_0x4597('0x25')](db['MailQueueReport'][_0x4597('0x23')]);_0x166dd7[_0x4597('0x26')]=_[_0x4597('0x25')](_0x4a1395['query']);_0x166dd7[_0x4597('0x29')]=_[_0x4597('0x2a')](_0x166dd7[_0x4597('0x24')],_0x166dd7[_0x4597('0x26')]);_0x5e91e1['attributes']=_['intersection'](_0x166dd7[_0x4597('0x24')],qs[_0x4597('0x2c')](_0x4a1395[_0x4597('0x26')][_0x4597('0x2c')]));_0x5e91e1['attributes']=_0x5e91e1['attributes'][_0x4597('0x2d')]?_0x5e91e1[_0x4597('0x2b')]:_0x166dd7[_0x4597('0x24')];if(_0x4a1395[_0x4597('0x26')][_0x4597('0x3f')]){_0x5e91e1[_0x4597('0x39')]=[{'all':!![]}];}_0x5e91e1=_[_0x4597('0x34')]({},_0x5e91e1,_0x4a1395[_0x4597('0x37')]);return db[_0x4597('0x22')][_0x4597('0x40')](_0x5e91e1)['then'](handleEntityNotFound(_0x2f5915,null))['then'](respondWithResult(_0x2f5915,null))[_0x4597('0x3c')](handleError(_0x2f5915,null));};exports[_0x4597('0x41')]=function(_0x39fdf2,_0x318a37){return db[_0x4597('0x22')][_0x4597('0x41')](_0x39fdf2[_0x4597('0x42')],{})[_0x4597('0x1b')](respondWithResult(_0x318a37,0xc9))[_0x4597('0x3c')](handleError(_0x318a37,null));};exports[_0x4597('0x1a')]=function(_0x47b897,_0x21bb27){if(_0x47b897[_0x4597('0x42')]['id']){delete _0x47b897[_0x4597('0x42')]['id'];}return db[_0x4597('0x22')][_0x4597('0x40')]({'where':{'id':_0x47b897[_0x4597('0x3e')]['id']}})[_0x4597('0x1b')](handleEntityNotFound(_0x21bb27,null))[_0x4597('0x1b')](saveUpdates(_0x47b897['body'],null))[_0x4597('0x1b')](respondWithResult(_0x21bb27,null))[_0x4597('0x3c')](handleError(_0x21bb27,null));};exports[_0x4597('0x43')]=function(_0x1eba36,_0x5028d1){return db['MailQueueReport'][_0x4597('0x40')]({'where':{'id':_0x1eba36[_0x4597('0x3e')]['id']}})[_0x4597('0x1b')](handleEntityNotFound(_0x5028d1,null))[_0x4597('0x1b')](removeEntity(_0x5028d1,null))[_0x4597('0x3c')](handleError(_0x5028d1,null));};exports[_0x4597('0x44')]=function(_0x497c4e,_0x583fa1){return db[_0x4597('0x22')][_0x4597('0x44')]()[_0x4597('0x1b')](respondWithResult(_0x583fa1,null))[_0x4597('0x3c')](handleError(_0x583fa1,null));};
\ No newline at end of file
index 4e2f067..5e9ab66 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf32b=['report_mail_queue','uniqueid','lodash','util','moment','request-promise','./mailQueueReport.attributes','exports','MailQueueReport'];(function(_0x22bbf6,_0x16b438){var _0x545a05=function(_0x565583){while(--_0x565583){_0x22bbf6['push'](_0x22bbf6['shift']());}};_0x545a05(++_0x16b438);}(_0xf32b,0xbf));var _0xbf32=function(_0xae7c2f,_0xf31e04){_0xae7c2f=_0xae7c2f-0x0;var _0x5d7001=_0xf32b[_0xae7c2f];return _0x5d7001;};'use strict';var _=require(_0xbf32('0x0'));var util=require(_0xbf32('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xbf32('0x2'));var BPromise=require('bluebird');var rp=require(_0xbf32('0x3'));var attributes=require(_0xbf32('0x4'));module[_0xbf32('0x5')]=function(_0x28cc6b,_0x5a0afa){return _0x28cc6b['define'](_0xbf32('0x6'),attributes,{'tableName':_0xbf32('0x7'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0xbf32('0x8')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x9d18=['request-promise','exports','define','uniqueid','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x13bee6,_0x23f251){var _0x481e8e=function(_0x4ee0ee){while(--_0x4ee0ee){_0x13bee6['push'](_0x13bee6['shift']());}};_0x481e8e(++_0x23f251);}(_0x9d18,0x1ee));var _0x89d1=function(_0x58e8ff,_0x45af96){_0x58e8ff=_0x58e8ff-0x0;var _0x348be2=_0x9d18[_0x58e8ff];return _0x348be2;};'use strict';var _=require(_0x89d1('0x0'));var util=require(_0x89d1('0x1'));var logger=require(_0x89d1('0x2'))(_0x89d1('0x3'));var moment=require(_0x89d1('0x4'));var BPromise=require(_0x89d1('0x5'));var rp=require(_0x89d1('0x6'));var attributes=require('./mailQueueReport.attributes');module[_0x89d1('0x7')]=function(_0x3220b3,_0x81886c){return _0x3220b3[_0x89d1('0x8')]('MailQueueReport',attributes,{'tableName':'report_mail_queue','paranoid':![],'indexes':[{'name':_0x89d1('0x9'),'fields':[_0x89d1('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index 775be93..354d3d1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x557f=['http','request','then','info','request\x20sent','debug','MailQueueReport,\x20%s,\x20%s,\x20%s','error','MailQueueReport,\x20%s,\x20%s','message','result','catch','CreateMailQueueReport','MailQueueReport','body','options','raw','stringify','UpdateMailQueueReport','update','where','attributes','limit','lodash','util','moment','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x505606,_0x38ed25){var _0x3d2e1a=function(_0x2f26ca){while(--_0x2f26ca){_0x505606['push'](_0x505606['shift']());}};_0x3d2e1a(++_0x38ed25);}(_0x557f,0x1b7));var _0xf557=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x557f[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xf557('0x0'));var util=require(_0xf557('0x1'));var moment=require(_0xf557('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0xf557('0x3'))['db'];var utils=require(_0xf557('0x4'));var logger=require(_0xf557('0x5'))(_0xf557('0x6'));var config=require(_0xf557('0x7'));var jayson=require(_0xf557('0x8'));var client=jayson['client'][_0xf557('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4a2e13,_0x3322bf,_0x3f8684){return new BPromise(function(_0x17506b,_0x42a286){return client[_0xf557('0xa')](_0x4a2e13,_0x3f8684)[_0xf557('0xb')](function(_0x1b8699){logger[_0xf557('0xc')]('MailQueueReport,\x20%s,\x20%s',_0x3322bf,_0xf557('0xd'));logger[_0xf557('0xe')](_0xf557('0xf'),_0x3322bf,_0xf557('0xd'),JSON['stringify'](_0x1b8699));if(_0x1b8699[_0xf557('0x10')]){if(_0x1b8699[_0xf557('0x10')]['code']===0x1f4){logger[_0xf557('0x10')](_0xf557('0x11'),_0x3322bf,_0x1b8699['error'][_0xf557('0x12')]);return _0x42a286(_0x1b8699[_0xf557('0x10')]['message']);}logger['error'](_0xf557('0x11'),_0x3322bf,_0x1b8699[_0xf557('0x10')][_0xf557('0x12')]);return _0x17506b(_0x1b8699[_0xf557('0x10')]['message']);}else{logger['info'](_0xf557('0x11'),_0x3322bf,_0xf557('0xd'));_0x17506b(_0x1b8699[_0xf557('0x13')]['message']);}})[_0xf557('0x14')](function(_0x564ca9){logger[_0xf557('0x10')](_0xf557('0x11'),_0x3322bf,_0x564ca9);_0x42a286(_0x564ca9);});});}exports[_0xf557('0x15')]=function(_0x443f3d){var _0x40a825=this;return new Promise(function(_0x2b0359,_0x5cbe19){return db[_0xf557('0x16')]['create'](_0x443f3d[_0xf557('0x17')],{'raw':_0x443f3d[_0xf557('0x18')]?_0x443f3d[_0xf557('0x18')][_0xf557('0x19')]===undefined?!![]:![]:!![]})['then'](function(_0x2ad16b){logger['info'](_0xf557('0x15'),_0x443f3d);logger[_0xf557('0xe')]('CreateMailQueueReport',_0x443f3d,JSON[_0xf557('0x1a')](_0x2ad16b));_0x2b0359(_0x2ad16b);})[_0xf557('0x14')](function(_0x1a2d0){logger[_0xf557('0x10')](_0xf557('0x15'),_0x1a2d0['message'],_0x443f3d);_0x5cbe19(_0x40a825[_0xf557('0x10')](0x1f4,_0x1a2d0[_0xf557('0x12')]));});});};exports[_0xf557('0x1b')]=function(_0x450646){var _0x370f55=this;return new Promise(function(_0x2f456f,_0x5d4a1a){return db['MailQueueReport'][_0xf557('0x1c')](_0x450646[_0xf557('0x17')],{'raw':_0x450646['options']?_0x450646[_0xf557('0x18')][_0xf557('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x450646[_0xf557('0x18')]?_0x450646['options'][_0xf557('0x1d')]||null:null,'attributes':_0x450646['options']?_0x450646[_0xf557('0x18')][_0xf557('0x1e')]||null:null,'limit':_0x450646[_0xf557('0x18')]?_0x450646[_0xf557('0x18')][_0xf557('0x1f')]||null:null})[_0xf557('0xb')](function(_0x15cd3d){logger[_0xf557('0xc')]('UpdateMailQueueReport',_0x450646);logger[_0xf557('0xe')](_0xf557('0x1b'),_0x450646,JSON[_0xf557('0x1a')](_0x15cd3d));_0x2f456f(_0x15cd3d);})[_0xf557('0x14')](function(_0x62f8ca){logger[_0xf557('0x10')](_0xf557('0x1b'),_0x62f8ca[_0xf557('0x12')],_0x450646);_0x5d4a1a(_0x370f55['error'](0x1f4,_0x62f8ca[_0xf557('0x12')]));});});};
\ No newline at end of file
+var _0xac60=['../../config/environment','jayson/promise','http','request','then','request\x20sent','MailQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','MailQueueReport,\x20%s,\x20%s','message','info','result','catch','CreateMailQueueReport','MailQueueReport','create','body','options','raw','debug','UpdateMailQueueReport','update','where','attributes','limit','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x13af05,_0x22978e){var _0x3dc849=function(_0x127e54){while(--_0x127e54){_0x13af05['push'](_0x13af05['shift']());}};_0x3dc849(++_0x22978e);}(_0xac60,0xf3));var _0x0ac6=function(_0x1ddedd,_0x485606){_0x1ddedd=_0x1ddedd-0x0;var _0xa3e1ac=_0xac60[_0x1ddedd];return _0xa3e1ac;};'use strict';var _=require(_0x0ac6('0x0'));var util=require(_0x0ac6('0x1'));var moment=require(_0x0ac6('0x2'));var BPromise=require(_0x0ac6('0x3'));var rs=require(_0x0ac6('0x4'));var fs=require('fs');var db=require(_0x0ac6('0x5'))['db'];var utils=require(_0x0ac6('0x6'));var logger=require(_0x0ac6('0x7'))(_0x0ac6('0x8'));var config=require(_0x0ac6('0x9'));var jayson=require(_0x0ac6('0xa'));var client=jayson['client'][_0x0ac6('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x427209,_0x4a4d2b,_0x368df6){return new BPromise(function(_0x282535,_0xf8bf6a){return client[_0x0ac6('0xc')](_0x427209,_0x368df6)[_0x0ac6('0xd')](function(_0x4e4db6){logger['info']('MailQueueReport,\x20%s,\x20%s',_0x4a4d2b,_0x0ac6('0xe'));logger['debug'](_0x0ac6('0xf'),_0x4a4d2b,_0x0ac6('0xe'),JSON[_0x0ac6('0x10')](_0x4e4db6));if(_0x4e4db6['error']){if(_0x4e4db6[_0x0ac6('0x11')][_0x0ac6('0x12')]===0x1f4){logger[_0x0ac6('0x11')](_0x0ac6('0x13'),_0x4a4d2b,_0x4e4db6[_0x0ac6('0x11')][_0x0ac6('0x14')]);return _0xf8bf6a(_0x4e4db6[_0x0ac6('0x11')]['message']);}logger['error'](_0x0ac6('0x13'),_0x4a4d2b,_0x4e4db6[_0x0ac6('0x11')][_0x0ac6('0x14')]);return _0x282535(_0x4e4db6['error'][_0x0ac6('0x14')]);}else{logger[_0x0ac6('0x15')](_0x0ac6('0x13'),_0x4a4d2b,'request\x20sent');_0x282535(_0x4e4db6[_0x0ac6('0x16')][_0x0ac6('0x14')]);}})[_0x0ac6('0x17')](function(_0x473cde){logger[_0x0ac6('0x11')]('MailQueueReport,\x20%s,\x20%s',_0x4a4d2b,_0x473cde);_0xf8bf6a(_0x473cde);});});}exports[_0x0ac6('0x18')]=function(_0x4085ea){var _0x3b9f5b=this;return new Promise(function(_0x2bb3e9,_0x1410b5){return db[_0x0ac6('0x19')][_0x0ac6('0x1a')](_0x4085ea[_0x0ac6('0x1b')],{'raw':_0x4085ea['options']?_0x4085ea[_0x0ac6('0x1c')][_0x0ac6('0x1d')]===undefined?!![]:![]:!![]})[_0x0ac6('0xd')](function(_0x18e4d9){logger['info'](_0x0ac6('0x18'),_0x4085ea);logger[_0x0ac6('0x1e')](_0x0ac6('0x18'),_0x4085ea,JSON['stringify'](_0x18e4d9));_0x2bb3e9(_0x18e4d9);})[_0x0ac6('0x17')](function(_0x1271e3){logger['error'](_0x0ac6('0x18'),_0x1271e3[_0x0ac6('0x14')],_0x4085ea);_0x1410b5(_0x3b9f5b[_0x0ac6('0x11')](0x1f4,_0x1271e3[_0x0ac6('0x14')]));});});};exports[_0x0ac6('0x1f')]=function(_0x38ab4f){var _0x23ddbd=this;return new Promise(function(_0x447535,_0x29675f){return db[_0x0ac6('0x19')][_0x0ac6('0x20')](_0x38ab4f[_0x0ac6('0x1b')],{'raw':_0x38ab4f['options']?_0x38ab4f[_0x0ac6('0x1c')][_0x0ac6('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x38ab4f['options']?_0x38ab4f[_0x0ac6('0x1c')][_0x0ac6('0x21')]||null:null,'attributes':_0x38ab4f[_0x0ac6('0x1c')]?_0x38ab4f[_0x0ac6('0x1c')][_0x0ac6('0x22')]||null:null,'limit':_0x38ab4f[_0x0ac6('0x1c')]?_0x38ab4f[_0x0ac6('0x1c')][_0x0ac6('0x23')]||null:null})['then'](function(_0x12fe78){logger['info'](_0x0ac6('0x1f'),_0x38ab4f);logger[_0x0ac6('0x1e')](_0x0ac6('0x1f'),_0x38ab4f,JSON[_0x0ac6('0x10')](_0x12fe78));_0x447535(_0x12fe78);})[_0x0ac6('0x17')](function(_0x4d348b){logger[_0x0ac6('0x11')](_0x0ac6('0x1f'),_0x4d348b[_0x0ac6('0x14')],_0x38ab4f);_0x29675f(_0x23ddbd[_0x0ac6('0x11')](0x1f4,_0x4d348b[_0x0ac6('0x14')]));});});};
\ No newline at end of file
index 3619193..1e35a72 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xef79=['exports','util','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x2d01c6,_0x228f6a){var _0x307e04=function(_0x498579){while(--_0x498579){_0x2d01c6['push'](_0x2d01c6['shift']());}};_0x307e04(++_0x228f6a);}(_0xef79,0x1db));var _0x9ef7=function(_0x462f90,_0x499cae){_0x462f90=_0x462f90-0x0;var _0x588224=_0xef79[_0x462f90];return _0x588224;};'use strict';var multer=require('multer');var util=require(_0x9ef7('0x0'));var path=require('path');var express=require('express');var router=express[_0x9ef7('0x1')]();var auth=require(_0x9ef7('0x2'));var interaction=require(_0x9ef7('0x3'));var config=require(_0x9ef7('0x4'));module[_0x9ef7('0x5')]=router;
\ No newline at end of file
+var _0x988e=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','util','path'];(function(_0x1a1e57,_0x2cb6fd){var _0x177217=function(_0x403342){while(--_0x403342){_0x1a1e57['push'](_0x1a1e57['shift']());}};_0x177217(++_0x2cb6fd);}(_0x988e,0x140));var _0xe988=function(_0x5be8aa,_0x1962ae){_0x5be8aa=_0x5be8aa-0x0;var _0x20183e=_0x988e[_0x5be8aa];return _0x20183e;};'use strict';var multer=require('multer');var util=require(_0xe988('0x0'));var path=require(_0xe988('0x1'));var express=require(_0xe988('0x2'));var router=express[_0xe988('0x3')]();var auth=require(_0xe988('0x4'));var interaction=require(_0xe988('0x5'));var config=require(_0xe988('0x6'));module['exports']=router;
\ No newline at end of file
index 102776c..3a8bd6e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c2c=['STRING','INTEGER','INBOX','sequelize','exports'];(function(_0xb0f7c3,_0x4eae95){var _0x28ea68=function(_0x4395a7){while(--_0x4395a7){_0xb0f7c3['push'](_0xb0f7c3['shift']());}};_0x28ea68(++_0x4eae95);}(_0x9c2c,0x1c0));var _0xc9c2=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x9c2c[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xc9c2('0x0'));module[_0xc9c2('0x1')]={'description':{'type':Sequelize['STRING']},'host':{'type':Sequelize['STRING']},'authentication':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'user':{'type':Sequelize[_0xc9c2('0x2')],'unique':'username'},'password':{'type':Sequelize[_0xc9c2('0x2')]},'port':{'type':Sequelize[_0xc9c2('0x3')]},'tls':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'mailbox':{'type':Sequelize['STRING'],'defaultValue':_0xc9c2('0x4')},'connTimeout':{'type':Sequelize['INTEGER'],'defaultValue':0xa},'authTimeout':{'type':Sequelize[_0xc9c2('0x3')],'defaultValue':0x5},'service':{'type':Sequelize[_0xc9c2('0x2')]}};
\ No newline at end of file
+var _0x073e=['sequelize','exports','STRING','INTEGER','BOOLEAN'];(function(_0x3e7813,_0x2c197a){var _0x43a7ea=function(_0x5a21c1){while(--_0x5a21c1){_0x3e7813['push'](_0x3e7813['shift']());}};_0x43a7ea(++_0x2c197a);}(_0x073e,0x181));var _0xe073=function(_0x1e2c67,_0x20db26){_0x1e2c67=_0x1e2c67-0x0;var _0x142720=_0x073e[_0x1e2c67];return _0x142720;};'use strict';var Sequelize=require(_0xe073('0x0'));module[_0xe073('0x1')]={'description':{'type':Sequelize[_0xe073('0x2')]},'host':{'type':Sequelize[_0xe073('0x2')]},'authentication':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'user':{'type':Sequelize['STRING'],'unique':'username'},'password':{'type':Sequelize[_0xe073('0x2')]},'port':{'type':Sequelize[_0xe073('0x3')]},'tls':{'type':Sequelize[_0xe073('0x4')],'defaultValue':!![]},'mailbox':{'type':Sequelize['STRING'],'defaultValue':'INBOX'},'connTimeout':{'type':Sequelize['INTEGER'],'defaultValue':0xa},'authTimeout':{'type':Sequelize[_0xe073('0x3')],'defaultValue':0x5},'service':{'type':Sequelize[_0xe073('0x2')]}};
\ No newline at end of file
index 9f2dd77..5f8a920 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2179=['lodash','util','../../config/logger','api','moment','bluebird','request-promise','./mailServerIn.attributes','exports','define','MailServerIn','mail_servers_in'];(function(_0x2e6141,_0x2bcaf1){var _0x432b18=function(_0x7391ac){while(--_0x7391ac){_0x2e6141['push'](_0x2e6141['shift']());}};_0x432b18(++_0x2bcaf1);}(_0x2179,0xc0));var _0x9217=function(_0x362046,_0x5cf93f){_0x362046=_0x362046-0x0;var _0x419ffe=_0x2179[_0x362046];return _0x419ffe;};'use strict';var _=require(_0x9217('0x0'));var util=require(_0x9217('0x1'));var logger=require(_0x9217('0x2'))(_0x9217('0x3'));var moment=require(_0x9217('0x4'));var BPromise=require(_0x9217('0x5'));var rp=require(_0x9217('0x6'));var attributes=require(_0x9217('0x7'));module[_0x9217('0x8')]=function(_0x2e397c,_0x3a5922){return _0x2e397c[_0x9217('0x9')](_0x9217('0xa'),attributes,{'tableName':_0x9217('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7c59=['define','MailServerIn','mail_servers_in','util','../../config/logger','api','moment','request-promise','./mailServerIn.attributes'];(function(_0x49531a,_0x1b3298){var _0x1c98d9=function(_0x230f15){while(--_0x230f15){_0x49531a['push'](_0x49531a['shift']());}};_0x1c98d9(++_0x1b3298);}(_0x7c59,0x147));var _0x97c5=function(_0x209693,_0x47427c){_0x209693=_0x209693-0x0;var _0x33cd52=_0x7c59[_0x209693];return _0x33cd52;};'use strict';var _=require('lodash');var util=require(_0x97c5('0x0'));var logger=require(_0x97c5('0x1'))(_0x97c5('0x2'));var moment=require(_0x97c5('0x3'));var BPromise=require('bluebird');var rp=require(_0x97c5('0x4'));var attributes=require(_0x97c5('0x5'));module['exports']=function(_0x574b06,_0x42b9bc){return _0x574b06[_0x97c5('0x6')](_0x97c5('0x7'),attributes,{'tableName':_0x97c5('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4a7424f..62baf3f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf290=['where','attributes','include','model','map','GetMailServerIn','util','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','request','then','info','MailServerIn,\x20%s,\x20%s','request\x20sent','debug','MailServerIn,\x20%s,\x20%s,\x20%s','stringify','error','message','catch','options','raw'];(function(_0x39f38c,_0x2737fe){var _0x3dfb09=function(_0x3621dd){while(--_0x3621dd){_0x39f38c['push'](_0x39f38c['shift']());}};_0x3dfb09(++_0x2737fe);}(_0xf290,0xde));var _0x0f29=function(_0x33a694,_0x9b6640){_0x33a694=_0x33a694-0x0;var _0x41ff01=_0xf290[_0x33a694];return _0x41ff01;};'use strict';var _=require('lodash');var util=require(_0x0f29('0x0'));var moment=require('moment');var BPromise=require(_0x0f29('0x1'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x0f29('0x2'))['db'];var utils=require(_0x0f29('0x3'));var logger=require(_0x0f29('0x4'))(_0x0f29('0x5'));var config=require(_0x0f29('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x0f29('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2d5350,_0x1c45ec,_0x355e21){return new BPromise(function(_0xaa2675,_0xc78ca2){return client[_0x0f29('0x8')](_0x2d5350,_0x355e21)[_0x0f29('0x9')](function(_0x3c6a6e){logger[_0x0f29('0xa')](_0x0f29('0xb'),_0x1c45ec,_0x0f29('0xc'));logger[_0x0f29('0xd')](_0x0f29('0xe'),_0x1c45ec,_0x0f29('0xc'),JSON[_0x0f29('0xf')](_0x3c6a6e));if(_0x3c6a6e['error']){if(_0x3c6a6e[_0x0f29('0x10')]['code']===0x1f4){logger[_0x0f29('0x10')](_0x0f29('0xb'),_0x1c45ec,_0x3c6a6e[_0x0f29('0x10')][_0x0f29('0x11')]);return _0xc78ca2(_0x3c6a6e[_0x0f29('0x10')][_0x0f29('0x11')]);}logger['error'](_0x0f29('0xb'),_0x1c45ec,_0x3c6a6e[_0x0f29('0x10')][_0x0f29('0x11')]);return _0xaa2675(_0x3c6a6e[_0x0f29('0x10')][_0x0f29('0x11')]);}else{logger[_0x0f29('0xa')](_0x0f29('0xb'),_0x1c45ec,_0x0f29('0xc'));_0xaa2675(_0x3c6a6e['result']['message']);}})[_0x0f29('0x12')](function(_0x3151a5){logger[_0x0f29('0x10')](_0x0f29('0xb'),_0x1c45ec,_0x3151a5);_0xc78ca2(_0x3151a5);});});}exports['GetMailServerIn']=function(_0x122bfa){var _0x5d72a5=this;return new Promise(function(_0x17b994,_0x4ca5e8){return db['MailServerIn']['findAll']({'raw':_0x122bfa[_0x0f29('0x13')]?_0x122bfa[_0x0f29('0x13')][_0x0f29('0x14')]===undefined?!![]:![]:!![],'where':_0x122bfa[_0x0f29('0x13')]?_0x122bfa[_0x0f29('0x13')][_0x0f29('0x15')]||null:null,'attributes':_0x122bfa[_0x0f29('0x13')]?_0x122bfa['options'][_0x0f29('0x16')]||null:null,'limit':_0x122bfa['options']?_0x122bfa['options']['limit']||null:null,'include':_0x122bfa['options']?_0x122bfa[_0x0f29('0x13')][_0x0f29('0x17')]?_['map'](_0x122bfa[_0x0f29('0x13')][_0x0f29('0x17')],function(_0x346db8){return{'model':db[_0x346db8[_0x0f29('0x18')]],'as':_0x346db8['as'],'attributes':_0x346db8[_0x0f29('0x16')],'include':_0x346db8['include']?_[_0x0f29('0x19')](_0x346db8['include'],function(_0x127fe2){return{'model':db[_0x127fe2[_0x0f29('0x18')]],'as':_0x127fe2['as'],'attributes':_0x127fe2[_0x0f29('0x16')],'include':_0x127fe2[_0x0f29('0x17')]?_['map'](_0x127fe2[_0x0f29('0x17')],function(_0x540d72){return{'model':db[_0x540d72['model']],'as':_0x540d72['as'],'attributes':_0x540d72[_0x0f29('0x16')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x5bfcac){logger['info']('GetMailServerIn',_0x122bfa);logger[_0x0f29('0xd')](_0x0f29('0x1a'),_0x122bfa,JSON['stringify'](_0x5bfcac));_0x17b994(_0x5bfcac);})[_0x0f29('0x12')](function(_0x2ab528){logger[_0x0f29('0x10')]('GetMailServerIn',_0x2ab528['message'],_0x122bfa);_0x4ca5e8(_0x5d72a5[_0x0f29('0x10')](0x1f4,_0x2ab528['message']));});});};
\ No newline at end of file
+var _0x8bdf=['where','include','model','map','attributes','then','GetMailServerIn','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','info','request\x20sent','debug','stringify','error','MailServerIn,\x20%s,\x20%s','message','result','catch','MailServerIn','findAll','options','raw'];(function(_0x39d74f,_0x45325c){var _0x165857=function(_0x429269){while(--_0x429269){_0x39d74f['push'](_0x39d74f['shift']());}};_0x165857(++_0x45325c);}(_0x8bdf,0x1a7));var _0xf8bd=function(_0x30ae5e,_0x391fc4){_0x30ae5e=_0x30ae5e-0x0;var _0x1f2e93=_0x8bdf[_0x30ae5e];return _0x1f2e93;};'use strict';var _=require(_0xf8bd('0x0'));var util=require(_0xf8bd('0x1'));var moment=require(_0xf8bd('0x2'));var BPromise=require(_0xf8bd('0x3'));var rs=require(_0xf8bd('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xf8bd('0x5'));var logger=require(_0xf8bd('0x6'))(_0xf8bd('0x7'));var config=require(_0xf8bd('0x8'));var jayson=require(_0xf8bd('0x9'));var client=jayson[_0xf8bd('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4ed701,_0x504c82,_0x3ee99e){return new BPromise(function(_0x22a277,_0x3e1db1){return client[_0xf8bd('0xb')](_0x4ed701,_0x3ee99e)['then'](function(_0x1e94b9){logger[_0xf8bd('0xc')]('MailServerIn,\x20%s,\x20%s',_0x504c82,_0xf8bd('0xd'));logger[_0xf8bd('0xe')]('MailServerIn,\x20%s,\x20%s,\x20%s',_0x504c82,_0xf8bd('0xd'),JSON[_0xf8bd('0xf')](_0x1e94b9));if(_0x1e94b9[_0xf8bd('0x10')]){if(_0x1e94b9[_0xf8bd('0x10')]['code']===0x1f4){logger[_0xf8bd('0x10')](_0xf8bd('0x11'),_0x504c82,_0x1e94b9['error'][_0xf8bd('0x12')]);return _0x3e1db1(_0x1e94b9['error'][_0xf8bd('0x12')]);}logger[_0xf8bd('0x10')](_0xf8bd('0x11'),_0x504c82,_0x1e94b9[_0xf8bd('0x10')][_0xf8bd('0x12')]);return _0x22a277(_0x1e94b9[_0xf8bd('0x10')]['message']);}else{logger['info']('MailServerIn,\x20%s,\x20%s',_0x504c82,_0xf8bd('0xd'));_0x22a277(_0x1e94b9[_0xf8bd('0x13')]['message']);}})[_0xf8bd('0x14')](function(_0x9d454){logger[_0xf8bd('0x10')](_0xf8bd('0x11'),_0x504c82,_0x9d454);_0x3e1db1(_0x9d454);});});}exports['GetMailServerIn']=function(_0x2b9fff){var _0x3e69be=this;return new Promise(function(_0x53c547,_0x2c006c){return db[_0xf8bd('0x15')][_0xf8bd('0x16')]({'raw':_0x2b9fff[_0xf8bd('0x17')]?_0x2b9fff[_0xf8bd('0x17')][_0xf8bd('0x18')]===undefined?!![]:![]:!![],'where':_0x2b9fff['options']?_0x2b9fff[_0xf8bd('0x17')][_0xf8bd('0x19')]||null:null,'attributes':_0x2b9fff['options']?_0x2b9fff[_0xf8bd('0x17')]['attributes']||null:null,'limit':_0x2b9fff[_0xf8bd('0x17')]?_0x2b9fff[_0xf8bd('0x17')]['limit']||null:null,'include':_0x2b9fff[_0xf8bd('0x17')]?_0x2b9fff[_0xf8bd('0x17')]['include']?_['map'](_0x2b9fff[_0xf8bd('0x17')][_0xf8bd('0x1a')],function(_0x4edd5a){return{'model':db[_0x4edd5a[_0xf8bd('0x1b')]],'as':_0x4edd5a['as'],'attributes':_0x4edd5a['attributes'],'include':_0x4edd5a[_0xf8bd('0x1a')]?_[_0xf8bd('0x1c')](_0x4edd5a['include'],function(_0xd96e62){return{'model':db[_0xd96e62['model']],'as':_0xd96e62['as'],'attributes':_0xd96e62[_0xf8bd('0x1d')],'include':_0xd96e62['include']?_[_0xf8bd('0x1c')](_0xd96e62['include'],function(_0x136bd2){return{'model':db[_0x136bd2['model']],'as':_0x136bd2['as'],'attributes':_0x136bd2['attributes']};}):[]};}):[]};}):[]:[]})[_0xf8bd('0x1e')](function(_0x5f3453){logger[_0xf8bd('0xc')](_0xf8bd('0x1f'),_0x2b9fff);logger[_0xf8bd('0xe')]('GetMailServerIn',_0x2b9fff,JSON[_0xf8bd('0xf')](_0x5f3453));_0x53c547(_0x5f3453);})[_0xf8bd('0x14')](function(_0xa3ff13){logger[_0xf8bd('0x10')]('GetMailServerIn',_0xa3ff13['message'],_0x2b9fff);_0x2c006c(_0x3e69be[_0xf8bd('0x10')](0x1f4,_0xa3ff13['message']));});});};
\ No newline at end of file
index 5847d52..38c6ce6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x814b=['multer','util','path','express','Router','../../components/auth/service','../../config/environment','./mailServerOut.controller','get','isAuthenticated','index','show','create','put','/:id','update','delete','destroy','exports'];(function(_0x867c03,_0x5f532d){var _0x760969=function(_0xd23675){while(--_0xd23675){_0x867c03['push'](_0x867c03['shift']());}};_0x760969(++_0x5f532d);}(_0x814b,0x1a2));var _0xb814=function(_0x5180c3,_0x4b35f7){_0x5180c3=_0x5180c3-0x0;var _0x55c975=_0x814b[_0x5180c3];return _0x55c975;};'use strict';var multer=require(_0xb814('0x0'));var util=require(_0xb814('0x1'));var path=require(_0xb814('0x2'));var express=require(_0xb814('0x3'));var router=express[_0xb814('0x4')]();var auth=require(_0xb814('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xb814('0x6'));var controller=require(_0xb814('0x7'));router[_0xb814('0x8')]('/',auth[_0xb814('0x9')](),controller[_0xb814('0xa')]);router[_0xb814('0x8')]('/:id',auth[_0xb814('0x9')](),controller[_0xb814('0xb')]);router['post']('/',auth[_0xb814('0x9')](),controller[_0xb814('0xc')]);router[_0xb814('0xd')](_0xb814('0xe'),auth[_0xb814('0x9')](),controller[_0xb814('0xf')]);router[_0xb814('0x10')](_0xb814('0xe'),auth[_0xb814('0x9')](),controller[_0xb814('0x11')]);module[_0xb814('0x12')]=router;
\ No newline at end of file
+var _0x9957=['../../config/environment','./mailServerOut.controller','isAuthenticated','index','get','/:id','show','create','update','delete','destroy','multer','util','path','express','../../components/auth/service','../../components/interaction/service'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x9957,0x93));var _0x7995=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0x9957[_0x2f5ac5];return _0x37c9a8;};'use strict';var multer=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var path=require(_0x7995('0x2'));var express=require(_0x7995('0x3'));var router=express['Router']();var auth=require(_0x7995('0x4'));var interaction=require(_0x7995('0x5'));var config=require(_0x7995('0x6'));var controller=require(_0x7995('0x7'));router['get']('/',auth[_0x7995('0x8')](),controller[_0x7995('0x9')]);router[_0x7995('0xa')](_0x7995('0xb'),auth[_0x7995('0x8')](),controller[_0x7995('0xc')]);router['post']('/',auth[_0x7995('0x8')](),controller[_0x7995('0xd')]);router['put'](_0x7995('0xb'),auth[_0x7995('0x8')](),controller[_0x7995('0xe')]);router[_0x7995('0xf')](_0x7995('0xb'),auth[_0x7995('0x8')](),controller[_0x7995('0x10')]);module['exports']=router;
\ No newline at end of file
index d51bdec..f773ad3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x16c6=['INTEGER','BOOLEAN','STRING'];(function(_0x593571,_0x296f81){var _0xe40ffa=function(_0x256d83){while(--_0x256d83){_0x593571['push'](_0x593571['shift']());}};_0xe40ffa(++_0x296f81);}(_0x16c6,0x1be));var _0x616c=function(_0x4a9fb1,_0x273043){_0x4a9fb1=_0x4a9fb1-0x0;var _0x348672=_0x16c6[_0x4a9fb1];return _0x348672;};'use strict';var Sequelize=require('sequelize');module['exports']={'description':{'type':Sequelize[_0x616c('0x0')]},'host':{'type':Sequelize['STRING']},'user':{'type':Sequelize['STRING']},'pass':{'type':Sequelize[_0x616c('0x0')]},'port':{'type':Sequelize[_0x616c('0x1')]},'secure':{'type':Sequelize[_0x616c('0x2')],'defaultValue':![]},'service':{'type':Sequelize[_0x616c('0x0')]},'authentication':{'type':Sequelize[_0x616c('0x2')],'defaultValue':!![]}};
\ No newline at end of file
+var _0xdc2c=['sequelize','exports','STRING','INTEGER'];(function(_0x15bc81,_0x4d4f77){var _0x59440e=function(_0x1b60f2){while(--_0x1b60f2){_0x15bc81['push'](_0x15bc81['shift']());}};_0x59440e(++_0x4d4f77);}(_0xdc2c,0x1cc));var _0xcdc2=function(_0x46f715,_0x25ed97){_0x46f715=_0x46f715-0x0;var _0x1213e3=_0xdc2c[_0x46f715];return _0x1213e3;};'use strict';var Sequelize=require(_0xcdc2('0x0'));module[_0xcdc2('0x1')]={'description':{'type':Sequelize[_0xcdc2('0x2')]},'host':{'type':Sequelize[_0xcdc2('0x2')]},'user':{'type':Sequelize[_0xcdc2('0x2')]},'pass':{'type':Sequelize[_0xcdc2('0x2')]},'port':{'type':Sequelize[_0xcdc2('0x3')]},'secure':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'service':{'type':Sequelize[_0xcdc2('0x2')]},'authentication':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]}};
\ No newline at end of file
index 71edef1..275f963 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x74c7=['Content-Range','apply','reject','save','then','destroy','error','stack','name','send','MailServerOut','rawAttributes','model','query','dateEnd','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','day','dateStart','add','merge','filter','options','include','findAll','catch','show','params','includeAll','find','create','body','update','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/environment','sendStatus','status','end','count','offset','limit','set'];(function(_0x34e830,_0x3c3620){var _0x462e4b=function(_0x113845){while(--_0x113845){_0x34e830['push'](_0x34e830['shift']());}};_0x462e4b(++_0x3c3620);}(_0x74c7,0xea));var _0x774c=function(_0x311cc0,_0x13dc42){_0x311cc0=_0x311cc0-0x0;var _0x3ad011=_0x74c7[_0x311cc0];return _0x3ad011;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x774c('0x0'));var BPromise=require(_0x774c('0x1'));var Mustache=require(_0x774c('0x2'));var util=require(_0x774c('0x3'));var path=require(_0x774c('0x4'));var sox=require(_0x774c('0x5'));var csv=require(_0x774c('0x6'));var ejs=require(_0x774c('0x7'));var fs=require('fs');var _=require(_0x774c('0x8'));var squel=require('squel');var crypto=require(_0x774c('0x9'));var jsforce=require('jsforce');var deskjs=require(_0x774c('0xa'));var toCsv=require(_0x774c('0x6'));var querystring=require(_0x774c('0xb'));var Papa=require(_0x774c('0xc'));var qs=require(_0x774c('0xd'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0x774c('0xe'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5d744c,_0x4671e3){_0x4671e3=_0x4671e3||0xcc;return function(_0x191dbe){if(_0x191dbe){return _0x5d744c[_0x774c('0xf')](_0x4671e3);}return _0x5d744c[_0x774c('0x10')](_0x4671e3)[_0x774c('0x11')]();};}function respondWithResult(_0xb39bc6,_0x2fe892){_0x2fe892=_0x2fe892||0xc8;return function(_0x5810dd){if(_0x5810dd){return _0xb39bc6['status'](_0x2fe892)['json'](_0x5810dd);}};}function respondWithFilteredResult(_0x1302e6,_0x5c7a23){return function(_0x20f767){if(_0x20f767){var _0x51f8f3=_0x20f767[_0x774c('0x12')],_0x2304a6=_0x5c7a23[_0x774c('0x13')],_0x3b7a60=_0x5c7a23[_0x774c('0x13')]+_0x5c7a23[_0x774c('0x14')],_0x1e0ac5;if(_0x3b7a60>=_0x51f8f3){_0x3b7a60=_0x51f8f3;_0x1e0ac5=0xc8;}else{_0x1e0ac5=0xce;}_0x1302e6['status'](_0x1e0ac5);return _0x1302e6[_0x774c('0x15')](_0x774c('0x16'),_0x2304a6+'-'+_0x3b7a60+'/'+_0x51f8f3)['json'](_0x20f767);}return null;};}function patchUpdates(_0x9a6276){return function(_0x4793d3){try{jsonpatch[_0x774c('0x17')](_0x4793d3,_0x9a6276,!![]);}catch(_0x10c23b){return BPromise[_0x774c('0x18')](_0x10c23b);}return _0x4793d3[_0x774c('0x19')]();};}function saveUpdates(_0x56f30a,_0x3fcf01){return function(_0x2b4dcd){if(_0x2b4dcd){return _0x2b4dcd['update'](_0x56f30a)[_0x774c('0x1a')](function(_0x4c7e30){return _0x4c7e30;});}return null;};}function removeEntity(_0x1e9aab,_0x3d5836){return function(_0x593d4f){if(_0x593d4f){return _0x593d4f[_0x774c('0x1b')]()['then'](function(){_0x1e9aab['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x314efb,_0x1c3a71){return function(_0x4efad2){if(!_0x4efad2){_0x314efb['sendStatus'](0x194);}return _0x4efad2;};}function handleError(_0x11688b,_0x4d0033){_0x4d0033=_0x4d0033||0x1f4;return function(_0xed94ea){logger[_0x774c('0x1c')](_0xed94ea[_0x774c('0x1d')]);if(_0xed94ea['name']){delete _0xed94ea[_0x774c('0x1e')];}_0x11688b[_0x774c('0x10')](_0x4d0033)[_0x774c('0x1f')](_0xed94ea);};}exports['index']=function(_0x32f4f1,_0x52b2f9){var _0x15b3b6={},_0x12dd65={},_0x1ae49a={'count':0x0,'rows':[]};var _0x501cb2=db[_0x774c('0x20')][_0x774c('0x21')];_0x12dd65[_0x774c('0x22')]=_['keys'](_0x501cb2);var _0x5843f7={'dateStart':_0x32f4f1[_0x774c('0x23')]['dateStart'],'dateEnd':_0x32f4f1['query'][_0x774c('0x24')]};delete _0x32f4f1[_0x774c('0x23')]['dateStart'];delete _0x32f4f1['query']['dateEnd'];_0x12dd65['query']=_[_0x774c('0x25')](_0x32f4f1[_0x774c('0x23')]);_0x12dd65['filters']=_[_0x774c('0x26')](_0x12dd65[_0x774c('0x22')],_0x12dd65[_0x774c('0x23')]);_0x15b3b6[_0x774c('0x27')]=_['intersection'](_0x12dd65[_0x774c('0x22')],qs[_0x774c('0x28')](_0x32f4f1[_0x774c('0x23')]['fields']));_0x15b3b6['attributes']=_0x15b3b6[_0x774c('0x27')][_0x774c('0x29')]?_0x15b3b6['attributes']:_0x12dd65[_0x774c('0x22')];if(!_0x32f4f1[_0x774c('0x23')][_0x774c('0x2a')](_0x774c('0x2b'))){_0x15b3b6[_0x774c('0x14')]=qs['limit'](_0x32f4f1[_0x774c('0x23')][_0x774c('0x14')]);_0x15b3b6[_0x774c('0x13')]=qs[_0x774c('0x13')](_0x32f4f1['query'][_0x774c('0x13')]);}_0x15b3b6[_0x774c('0x2c')]=qs[_0x774c('0x2d')](_0x32f4f1[_0x774c('0x23')][_0x774c('0x2d')]);_0x15b3b6[_0x774c('0x2e')]=qs[_0x774c('0x2f')](_['pick'](_0x32f4f1['query'],_0x12dd65[_0x774c('0x2f')]));if(_0x5843f7['dateStart']){if(_0x5843f7['dateEnd']){_0x5843f7[_0x774c('0x24')]=moment(_0x5843f7['dateEnd'])['add'](0x1,_0x774c('0x30'));}else{_0x5843f7['dateEnd']=moment(_0x5843f7[_0x774c('0x31')])[_0x774c('0x32')](0x1,'day');}_[_0x774c('0x33')](_0x15b3b6['where'],{'createdAt':{'$gte':_0x5843f7['dateStart'],'$lte':_0x5843f7[_0x774c('0x24')]}});}if(_0x32f4f1[_0x774c('0x23')][_0x774c('0x34')]){_0x15b3b6[_0x774c('0x2e')]=_['merge'](_0x15b3b6[_0x774c('0x2e')],{'$or':_['map'](_0x15b3b6[_0x774c('0x27')],function(_0x6fb487){var _0x4cf690={};_0x4cf690[_0x6fb487]={'$like':'%'+_0x32f4f1[_0x774c('0x23')][_0x774c('0x34')]+'%'};return _0x4cf690;})});}_0x15b3b6=_[_0x774c('0x33')]({},_0x15b3b6,_0x32f4f1[_0x774c('0x35')]);var _0x32dc53={'where':_0x15b3b6[_0x774c('0x2e')]};return db[_0x774c('0x20')][_0x774c('0x12')](_0x32dc53)['then'](function(_0x3e16ab){_0x1ae49a[_0x774c('0x12')]=_0x3e16ab;if(_0x32f4f1[_0x774c('0x23')]['includeAll']){_0x15b3b6[_0x774c('0x36')]=[{'all':!![]}];}return db[_0x774c('0x20')][_0x774c('0x37')](_0x15b3b6);})[_0x774c('0x1a')](function(_0x5c1964){_0x1ae49a['rows']=_0x5c1964;return _0x1ae49a;})[_0x774c('0x1a')](respondWithFilteredResult(_0x52b2f9,_0x15b3b6))[_0x774c('0x38')](handleError(_0x52b2f9,null));};exports[_0x774c('0x39')]=function(_0x27cbb2,_0xe2c70b){var _0x38fbc7={'raw':!![],'where':{'id':_0x27cbb2[_0x774c('0x3a')]['id']}},_0x568f5d={};_0x568f5d[_0x774c('0x22')]=_[_0x774c('0x25')](db['MailServerOut']['rawAttributes']);_0x568f5d[_0x774c('0x23')]=_[_0x774c('0x25')](_0x27cbb2['query']);_0x568f5d[_0x774c('0x2f')]=_[_0x774c('0x26')](_0x568f5d['model'],_0x568f5d[_0x774c('0x23')]);_0x38fbc7[_0x774c('0x27')]=_[_0x774c('0x26')](_0x568f5d[_0x774c('0x22')],qs[_0x774c('0x28')](_0x27cbb2[_0x774c('0x23')][_0x774c('0x28')]));_0x38fbc7[_0x774c('0x27')]=_0x38fbc7[_0x774c('0x27')][_0x774c('0x29')]?_0x38fbc7[_0x774c('0x27')]:_0x568f5d[_0x774c('0x22')];if(_0x27cbb2[_0x774c('0x23')][_0x774c('0x3b')]){_0x38fbc7[_0x774c('0x36')]=[{'all':!![]}];}_0x38fbc7=_[_0x774c('0x33')]({},_0x38fbc7,_0x27cbb2['options']);return db[_0x774c('0x20')][_0x774c('0x3c')](_0x38fbc7)[_0x774c('0x1a')](handleEntityNotFound(_0xe2c70b,null))[_0x774c('0x1a')](respondWithResult(_0xe2c70b,null))[_0x774c('0x38')](handleError(_0xe2c70b,null));};exports[_0x774c('0x3d')]=function(_0x36617d,_0x920859){return db[_0x774c('0x20')]['create'](_0x36617d[_0x774c('0x3e')],{})[_0x774c('0x1a')](respondWithResult(_0x920859,0xc9))[_0x774c('0x38')](handleError(_0x920859,null));};exports[_0x774c('0x3f')]=function(_0x520843,_0xb547bc){if(_0x520843[_0x774c('0x3e')]['id']){delete _0x520843[_0x774c('0x3e')]['id'];}return db[_0x774c('0x20')][_0x774c('0x3c')]({'where':{'id':_0x520843[_0x774c('0x3a')]['id']}})['then'](handleEntityNotFound(_0xb547bc,null))[_0x774c('0x1a')](saveUpdates(_0x520843[_0x774c('0x3e')],null))[_0x774c('0x1a')](respondWithResult(_0xb547bc,null))[_0x774c('0x38')](handleError(_0xb547bc,null));};exports[_0x774c('0x1b')]=function(_0x2b0768,_0x293a6d){return db[_0x774c('0x20')][_0x774c('0x3c')]({'where':{'id':_0x2b0768[_0x774c('0x3a')]['id']}})[_0x774c('0x1a')](handleEntityNotFound(_0x293a6d,null))[_0x774c('0x1a')](removeEntity(_0x293a6d,null))[_0x774c('0x38')](handleError(_0x293a6d,null));};
\ No newline at end of file
+var _0x3520=['dateStart','dateEnd','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filters','add','day','merge','filter','map','options','MailServerOut','count','includeAll','rows','catch','show','params','include','find','create','body','update','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../config/logger','api','../../config/utils','status','end','json','offset','limit','Content-Range','apply','reject','save','then','sendStatus','error','name','send','index','rawAttributes','model','keys','query'];(function(_0x5539ca,_0x368b07){var _0x2b21ec=function(_0x3fff4a){while(--_0x3fff4a){_0x5539ca['push'](_0x5539ca['shift']());}};_0x2b21ec(++_0x368b07);}(_0x3520,0x127));var _0x0352=function(_0x4ce63d,_0x74f601){_0x4ce63d=_0x4ce63d-0x0;var _0x5c7f8f=_0x3520[_0x4ce63d];return _0x5c7f8f;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x0352('0x0'));var BPromise=require(_0x0352('0x1'));var Mustache=require(_0x0352('0x2'));var util=require(_0x0352('0x3'));var path=require(_0x0352('0x4'));var sox=require('sox');var csv=require(_0x0352('0x5'));var ejs=require(_0x0352('0x6'));var fs=require('fs');var _=require(_0x0352('0x7'));var squel=require(_0x0352('0x8'));var crypto=require(_0x0352('0x9'));var jsforce=require(_0x0352('0xa'));var deskjs=require(_0x0352('0xb'));var toCsv=require(_0x0352('0x5'));var querystring=require(_0x0352('0xc'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0x0352('0xd'))(_0x0352('0xe'));var utils=require(_0x0352('0xf'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x23698c,_0x3a669a){_0x3a669a=_0x3a669a||0xcc;return function(_0x503587){if(_0x503587){return _0x23698c['sendStatus'](_0x3a669a);}return _0x23698c[_0x0352('0x10')](_0x3a669a)[_0x0352('0x11')]();};}function respondWithResult(_0x4b9827,_0x59a8af){_0x59a8af=_0x59a8af||0xc8;return function(_0x34bd75){if(_0x34bd75){return _0x4b9827[_0x0352('0x10')](_0x59a8af)[_0x0352('0x12')](_0x34bd75);}};}function respondWithFilteredResult(_0x5b9a1e,_0x892bda){return function(_0x4510e7){if(_0x4510e7){var _0x211ee0=_0x4510e7['count'],_0x198fbf=_0x892bda[_0x0352('0x13')],_0x5410dd=_0x892bda[_0x0352('0x13')]+_0x892bda[_0x0352('0x14')],_0x9c59bd;if(_0x5410dd>=_0x211ee0){_0x5410dd=_0x211ee0;_0x9c59bd=0xc8;}else{_0x9c59bd=0xce;}_0x5b9a1e[_0x0352('0x10')](_0x9c59bd);return _0x5b9a1e['set'](_0x0352('0x15'),_0x198fbf+'-'+_0x5410dd+'/'+_0x211ee0)[_0x0352('0x12')](_0x4510e7);}return null;};}function patchUpdates(_0x5e55b3){return function(_0x37688b){try{jsonpatch[_0x0352('0x16')](_0x37688b,_0x5e55b3,!![]);}catch(_0x186309){return BPromise[_0x0352('0x17')](_0x186309);}return _0x37688b[_0x0352('0x18')]();};}function saveUpdates(_0xa1262f,_0x5982c5){return function(_0x432e44){if(_0x432e44){return _0x432e44['update'](_0xa1262f)[_0x0352('0x19')](function(_0x211534){return _0x211534;});}return null;};}function removeEntity(_0x602b18,_0x3ec5c1){return function(_0x188d93){if(_0x188d93){return _0x188d93['destroy']()[_0x0352('0x19')](function(){_0x602b18[_0x0352('0x10')](0xcc)[_0x0352('0x11')]();});}};}function handleEntityNotFound(_0x231340,_0x2b4b3c){return function(_0x53c687){if(!_0x53c687){_0x231340[_0x0352('0x1a')](0x194);}return _0x53c687;};}function handleError(_0x3b03ac,_0x33b1d6){_0x33b1d6=_0x33b1d6||0x1f4;return function(_0x8b42d7){logger[_0x0352('0x1b')](_0x8b42d7['stack']);if(_0x8b42d7[_0x0352('0x1c')]){delete _0x8b42d7[_0x0352('0x1c')];}_0x3b03ac['status'](_0x33b1d6)[_0x0352('0x1d')](_0x8b42d7);};}exports[_0x0352('0x1e')]=function(_0x428082,_0x2ac0f5){var _0x3b5ea7={},_0x509223={},_0x47bb49={'count':0x0,'rows':[]};var _0x450b18=db['MailServerOut'][_0x0352('0x1f')];_0x509223[_0x0352('0x20')]=_[_0x0352('0x21')](_0x450b18);var _0x2bec2b={'dateStart':_0x428082[_0x0352('0x22')][_0x0352('0x23')],'dateEnd':_0x428082[_0x0352('0x22')][_0x0352('0x24')]};delete _0x428082[_0x0352('0x22')]['dateStart'];delete _0x428082[_0x0352('0x22')]['dateEnd'];_0x509223['query']=_[_0x0352('0x21')](_0x428082[_0x0352('0x22')]);_0x509223['filters']=_['intersection'](_0x509223[_0x0352('0x20')],_0x509223[_0x0352('0x22')]);_0x3b5ea7[_0x0352('0x25')]=_[_0x0352('0x26')](_0x509223[_0x0352('0x20')],qs[_0x0352('0x27')](_0x428082[_0x0352('0x22')][_0x0352('0x27')]));_0x3b5ea7[_0x0352('0x25')]=_0x3b5ea7['attributes'][_0x0352('0x28')]?_0x3b5ea7[_0x0352('0x25')]:_0x509223[_0x0352('0x20')];if(!_0x428082[_0x0352('0x22')][_0x0352('0x29')](_0x0352('0x2a'))){_0x3b5ea7['limit']=qs[_0x0352('0x14')](_0x428082[_0x0352('0x22')]['limit']);_0x3b5ea7['offset']=qs[_0x0352('0x13')](_0x428082[_0x0352('0x22')][_0x0352('0x13')]);}_0x3b5ea7[_0x0352('0x2b')]=qs['sort'](_0x428082['query'][_0x0352('0x2c')]);_0x3b5ea7[_0x0352('0x2d')]=qs['filters'](_[_0x0352('0x2e')](_0x428082['query'],_0x509223[_0x0352('0x2f')]));if(_0x2bec2b[_0x0352('0x23')]){if(_0x2bec2b[_0x0352('0x24')]){_0x2bec2b[_0x0352('0x24')]=moment(_0x2bec2b[_0x0352('0x24')])[_0x0352('0x30')](0x1,_0x0352('0x31'));}else{_0x2bec2b[_0x0352('0x24')]=moment(_0x2bec2b[_0x0352('0x23')])[_0x0352('0x30')](0x1,_0x0352('0x31'));}_[_0x0352('0x32')](_0x3b5ea7[_0x0352('0x2d')],{'createdAt':{'$gte':_0x2bec2b[_0x0352('0x23')],'$lte':_0x2bec2b[_0x0352('0x24')]}});}if(_0x428082['query'][_0x0352('0x33')]){_0x3b5ea7[_0x0352('0x2d')]=_[_0x0352('0x32')](_0x3b5ea7[_0x0352('0x2d')],{'$or':_[_0x0352('0x34')](_0x3b5ea7['attributes'],function(_0x456969){var _0x1f812e={};_0x1f812e[_0x456969]={'$like':'%'+_0x428082['query'][_0x0352('0x33')]+'%'};return _0x1f812e;})});}_0x3b5ea7=_[_0x0352('0x32')]({},_0x3b5ea7,_0x428082[_0x0352('0x35')]);var _0x8f90e2={'where':_0x3b5ea7[_0x0352('0x2d')]};return db[_0x0352('0x36')][_0x0352('0x37')](_0x8f90e2)[_0x0352('0x19')](function(_0x1cc00f){_0x47bb49[_0x0352('0x37')]=_0x1cc00f;if(_0x428082[_0x0352('0x22')][_0x0352('0x38')]){_0x3b5ea7['include']=[{'all':!![]}];}return db[_0x0352('0x36')]['findAll'](_0x3b5ea7);})['then'](function(_0x266119){_0x47bb49[_0x0352('0x39')]=_0x266119;return _0x47bb49;})[_0x0352('0x19')](respondWithFilteredResult(_0x2ac0f5,_0x3b5ea7))[_0x0352('0x3a')](handleError(_0x2ac0f5,null));};exports[_0x0352('0x3b')]=function(_0x22b3d6,_0x53419e){var _0x29a03c={'raw':!![],'where':{'id':_0x22b3d6[_0x0352('0x3c')]['id']}},_0x835361={};_0x835361[_0x0352('0x20')]=_['keys'](db['MailServerOut'][_0x0352('0x1f')]);_0x835361[_0x0352('0x22')]=_['keys'](_0x22b3d6[_0x0352('0x22')]);_0x835361['filters']=_[_0x0352('0x26')](_0x835361[_0x0352('0x20')],_0x835361[_0x0352('0x22')]);_0x29a03c['attributes']=_[_0x0352('0x26')](_0x835361[_0x0352('0x20')],qs[_0x0352('0x27')](_0x22b3d6[_0x0352('0x22')][_0x0352('0x27')]));_0x29a03c['attributes']=_0x29a03c[_0x0352('0x25')]['length']?_0x29a03c[_0x0352('0x25')]:_0x835361['model'];if(_0x22b3d6[_0x0352('0x22')][_0x0352('0x38')]){_0x29a03c[_0x0352('0x3d')]=[{'all':!![]}];}_0x29a03c=_[_0x0352('0x32')]({},_0x29a03c,_0x22b3d6['options']);return db['MailServerOut'][_0x0352('0x3e')](_0x29a03c)[_0x0352('0x19')](handleEntityNotFound(_0x53419e,null))[_0x0352('0x19')](respondWithResult(_0x53419e,null))['catch'](handleError(_0x53419e,null));};exports[_0x0352('0x3f')]=function(_0x5b3955,_0x4d5e26){return db[_0x0352('0x36')][_0x0352('0x3f')](_0x5b3955[_0x0352('0x40')],{})['then'](respondWithResult(_0x4d5e26,0xc9))[_0x0352('0x3a')](handleError(_0x4d5e26,null));};exports[_0x0352('0x41')]=function(_0x524ef9,_0x490b17){if(_0x524ef9[_0x0352('0x40')]['id']){delete _0x524ef9[_0x0352('0x40')]['id'];}return db['MailServerOut']['find']({'where':{'id':_0x524ef9[_0x0352('0x3c')]['id']}})[_0x0352('0x19')](handleEntityNotFound(_0x490b17,null))[_0x0352('0x19')](saveUpdates(_0x524ef9[_0x0352('0x40')],null))[_0x0352('0x19')](respondWithResult(_0x490b17,null))['catch'](handleError(_0x490b17,null));};exports['destroy']=function(_0x46803d,_0x5860a2){return db[_0x0352('0x36')]['find']({'where':{'id':_0x46803d[_0x0352('0x3c')]['id']}})[_0x0352('0x19')](handleEntityNotFound(_0x5860a2,null))[_0x0352('0x19')](removeEntity(_0x5860a2,null))[_0x0352('0x3a')](handleError(_0x5860a2,null));};
\ No newline at end of file
index d5a8928..ff721dc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf9d5=['exports','MailServerOut','util','../../config/logger','moment','bluebird','request-promise','./mailServerOut.attributes'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0xf9d5,0x122));var _0x5f9d=function(_0x15d6fa,_0x125c9e){_0x15d6fa=_0x15d6fa-0x0;var _0x544a20=_0xf9d5[_0x15d6fa];return _0x544a20;};'use strict';var _=require('lodash');var util=require(_0x5f9d('0x0'));var logger=require(_0x5f9d('0x1'))('api');var moment=require(_0x5f9d('0x2'));var BPromise=require(_0x5f9d('0x3'));var rp=require(_0x5f9d('0x4'));var attributes=require(_0x5f9d('0x5'));module[_0x5f9d('0x6')]=function(_0xdd68fd,_0x27449e){return _0xdd68fd['define'](_0x5f9d('0x7'),attributes,{'tableName':'mail_servers_out','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfd87=['moment','bluebird','request-promise','./mailServerOut.attributes','exports','MailServerOut','mail_servers_out','lodash','util','../../config/logger','api'];(function(_0x5a40d5,_0x5adac9){var _0x4b2731=function(_0x3e6859){while(--_0x3e6859){_0x5a40d5['push'](_0x5a40d5['shift']());}};_0x4b2731(++_0x5adac9);}(_0xfd87,0x80));var _0x7fd8=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xfd87[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x7fd8('0x0'));var util=require(_0x7fd8('0x1'));var logger=require(_0x7fd8('0x2'))(_0x7fd8('0x3'));var moment=require(_0x7fd8('0x4'));var BPromise=require(_0x7fd8('0x5'));var rp=require(_0x7fd8('0x6'));var attributes=require(_0x7fd8('0x7'));module[_0x7fd8('0x8')]=function(_0x43b442,_0x3bd037){return _0x43b442['define'](_0x7fd8('0x9'),attributes,{'tableName':_0x7fd8('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bb5448c..2b87793 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb5d1=['bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','debug','MailServerOut,\x20%s,\x20%s,\x20%s','stringify','error','code','MailServerOut,\x20%s,\x20%s','message','info','request\x20sent','result','catch','lodash','util'];(function(_0x397cfb,_0xb8f317){var _0x15fed9=function(_0x3eba43){while(--_0x3eba43){_0x397cfb['push'](_0x397cfb['shift']());}};_0x15fed9(++_0xb8f317);}(_0xb5d1,0x1e2));var _0x1b5d=function(_0x324f7f,_0x34504f){_0x324f7f=_0x324f7f-0x0;var _0x56e96d=_0xb5d1[_0x324f7f];return _0x56e96d;};'use strict';var _=require(_0x1b5d('0x0'));var util=require(_0x1b5d('0x1'));var moment=require('moment');var BPromise=require(_0x1b5d('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x1b5d('0x3'))['db'];var utils=require(_0x1b5d('0x4'));var logger=require(_0x1b5d('0x5'))(_0x1b5d('0x6'));var config=require('../../config/environment');var jayson=require(_0x1b5d('0x7'));var client=jayson[_0x1b5d('0x8')][_0x1b5d('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4f3941,_0x3fe6cf,_0xd48297){return new BPromise(function(_0x1e5058,_0x58685d){return client[_0x1b5d('0xa')](_0x4f3941,_0xd48297)['then'](function(_0x572f4d){logger['info']('MailServerOut,\x20%s,\x20%s',_0x3fe6cf,'request\x20sent');logger[_0x1b5d('0xb')](_0x1b5d('0xc'),_0x3fe6cf,'request\x20sent',JSON[_0x1b5d('0xd')](_0x572f4d));if(_0x572f4d[_0x1b5d('0xe')]){if(_0x572f4d['error'][_0x1b5d('0xf')]===0x1f4){logger[_0x1b5d('0xe')](_0x1b5d('0x10'),_0x3fe6cf,_0x572f4d[_0x1b5d('0xe')][_0x1b5d('0x11')]);return _0x58685d(_0x572f4d[_0x1b5d('0xe')][_0x1b5d('0x11')]);}logger[_0x1b5d('0xe')](_0x1b5d('0x10'),_0x3fe6cf,_0x572f4d[_0x1b5d('0xe')][_0x1b5d('0x11')]);return _0x1e5058(_0x572f4d[_0x1b5d('0xe')][_0x1b5d('0x11')]);}else{logger[_0x1b5d('0x12')]('MailServerOut,\x20%s,\x20%s',_0x3fe6cf,_0x1b5d('0x13'));_0x1e5058(_0x572f4d[_0x1b5d('0x14')][_0x1b5d('0x11')]);}})[_0x1b5d('0x15')](function(_0x683c8a){logger[_0x1b5d('0xe')](_0x1b5d('0x10'),_0x3fe6cf,_0x683c8a);_0x58685d(_0x683c8a);});});}
\ No newline at end of file
+var _0x4bde=['../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','MailServerOut,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','MailServerOut,\x20%s,\x20%s','message','result','catch','lodash','util','moment','randomstring'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x4bde,0x1b1));var _0xe4bd=function(_0x4629dd,_0xf32d6c){_0x4629dd=_0x4629dd-0x0;var _0x1f760f=_0x4bde[_0x4629dd];return _0x1f760f;};'use strict';var _=require(_0xe4bd('0x0'));var util=require(_0xe4bd('0x1'));var moment=require(_0xe4bd('0x2'));var BPromise=require('bluebird');var rs=require(_0xe4bd('0x3'));var fs=require('fs');var db=require(_0xe4bd('0x4'))['db'];var utils=require(_0xe4bd('0x5'));var logger=require(_0xe4bd('0x6'))('rpc');var config=require(_0xe4bd('0x7'));var jayson=require(_0xe4bd('0x8'));var client=jayson[_0xe4bd('0x9')][_0xe4bd('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x1db6d2,_0x4008eb,_0x4c933b){return new BPromise(function(_0x2cf33d,_0xbd04ce){return client[_0xe4bd('0xb')](_0x1db6d2,_0x4c933b)[_0xe4bd('0xc')](function(_0x34c543){logger[_0xe4bd('0xd')]('MailServerOut,\x20%s,\x20%s',_0x4008eb,'request\x20sent');logger['debug'](_0xe4bd('0xe'),_0x4008eb,_0xe4bd('0xf'),JSON[_0xe4bd('0x10')](_0x34c543));if(_0x34c543['error']){if(_0x34c543[_0xe4bd('0x11')][_0xe4bd('0x12')]===0x1f4){logger[_0xe4bd('0x11')](_0xe4bd('0x13'),_0x4008eb,_0x34c543['error'][_0xe4bd('0x14')]);return _0xbd04ce(_0x34c543['error'][_0xe4bd('0x14')]);}logger['error'](_0xe4bd('0x13'),_0x4008eb,_0x34c543[_0xe4bd('0x11')][_0xe4bd('0x14')]);return _0x2cf33d(_0x34c543[_0xe4bd('0x11')][_0xe4bd('0x14')]);}else{logger[_0xe4bd('0xd')](_0xe4bd('0x13'),_0x4008eb,_0xe4bd('0xf'));_0x2cf33d(_0x34c543[_0xe4bd('0x15')][_0xe4bd('0x14')]);}})[_0xe4bd('0x16')](function(_0x4337f7){logger[_0xe4bd('0x11')]('MailServerOut,\x20%s,\x20%s',_0x4008eb,_0x4337f7);_0xbd04ce(_0x4337f7);});});}
\ No newline at end of file
index 0011706..022dcb2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1775=['../../components/interaction/service','../../config/environment','./mailSubstatus.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','update','delete','exports','util','path','express','Router','../../components/auth/service'];(function(_0x38f7b3,_0x120bd3){var _0xc3fbc7=function(_0x36fa41){while(--_0x36fa41){_0x38f7b3['push'](_0x38f7b3['shift']());}};_0xc3fbc7(++_0x120bd3);}(_0x1775,0x1db));var _0x5177=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0x1775[_0x432682];return _0x463d05;};'use strict';var multer=require('multer');var util=require(_0x5177('0x0'));var path=require(_0x5177('0x1'));var express=require(_0x5177('0x2'));var router=express[_0x5177('0x3')]();var auth=require(_0x5177('0x4'));var interaction=require(_0x5177('0x5'));var config=require(_0x5177('0x6'));var controller=require(_0x5177('0x7'));router[_0x5177('0x8')]('/',auth[_0x5177('0x9')](),controller[_0x5177('0xa')]);router[_0x5177('0x8')](_0x5177('0xb'),auth[_0x5177('0x9')](),controller[_0x5177('0xc')]);router[_0x5177('0x8')](_0x5177('0xd'),auth[_0x5177('0x9')](),controller[_0x5177('0xe')]);router[_0x5177('0xf')]('/',auth[_0x5177('0x9')](),controller[_0x5177('0x10')]);router['put']('/:id',auth[_0x5177('0x9')](),controller[_0x5177('0x11')]);router[_0x5177('0x12')](_0x5177('0xd'),auth[_0x5177('0x9')](),controller['destroy']);module[_0x5177('0x13')]=router;
\ No newline at end of file
+var _0x1339=['/:id','isAuthenticated','show','post','create','put','update','delete','destroy','exports','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailSubstatus.controller','get','index','/describe','describe'];(function(_0x3931c7,_0x2f289a){var _0x294920=function(_0x51d4d7){while(--_0x51d4d7){_0x3931c7['push'](_0x3931c7['shift']());}};_0x294920(++_0x2f289a);}(_0x1339,0x1ed));var _0x9133=function(_0x43009d,_0x4dc824){_0x43009d=_0x43009d-0x0;var _0x336cac=_0x1339[_0x43009d];return _0x336cac;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x9133('0x0'));var express=require(_0x9133('0x1'));var router=express[_0x9133('0x2')]();var auth=require(_0x9133('0x3'));var interaction=require(_0x9133('0x4'));var config=require(_0x9133('0x5'));var controller=require(_0x9133('0x6'));router[_0x9133('0x7')]('/',auth['isAuthenticated'](),controller[_0x9133('0x8')]);router[_0x9133('0x7')](_0x9133('0x9'),auth['isAuthenticated'](),controller[_0x9133('0xa')]);router[_0x9133('0x7')](_0x9133('0xb'),auth[_0x9133('0xc')](),controller[_0x9133('0xd')]);router[_0x9133('0xe')]('/',auth[_0x9133('0xc')](),controller[_0x9133('0xf')]);router[_0x9133('0x10')](_0x9133('0xb'),auth['isAuthenticated'](),controller[_0x9133('0x11')]);router[_0x9133('0x12')](_0x9133('0xb'),auth[_0x9133('0xc')](),controller[_0x9133('0x13')]);module[_0x9133('0x14')]=router;
\ No newline at end of file
index 4af9152..81fb9ef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc788=['STRING','sequelize','exports'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0xc788,0xc4));var _0x8c78=function(_0x4689d0,_0x5a28c5){_0x4689d0=_0x4689d0-0x0;var _0xb61270=_0xc788[_0x4689d0];return _0xb61270;};'use strict';var Sequelize=require(_0x8c78('0x0'));module[_0x8c78('0x1')]={'name':{'type':Sequelize[_0x8c78('0x2')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x7497=['STRING','sequelize','exports'];(function(_0x233b89,_0x58b0d0){var _0x3cabb4=function(_0x2d7b06){while(--_0x2d7b06){_0x233b89['push'](_0x233b89['shift']());}};_0x3cabb4(++_0x58b0d0);}(_0x7497,0xd0));var _0x7749=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7497[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x7749('0x0'));module[_0x7749('0x1')]={'name':{'type':Sequelize[_0x7749('0x2')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 4e252cc..134f06f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee33=['ejs','lodash','squel','desk.js','querystring','../../components/parsers/qs','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','MailSubstatus','rawAttributes','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','offset','sort','where','pick','day','add','filter','merge','map','options','findAll','catch','show','params','includeAll','include','find','create','body','describe','fast-json-patch','moment','bluebird','util','sox'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xee33,0x7d));var _0x3ee3=function(_0x3c4737,_0x2329ec){_0x3c4737=_0x3c4737-0x0;var _0x2bb926=_0xee33[_0x3c4737];return _0x2bb926;};'use strict';var jsonpatch=require(_0x3ee3('0x0'));var rp=require('request-promise');var moment=require(_0x3ee3('0x1'));var BPromise=require(_0x3ee3('0x2'));var Mustache=require('mustache');var util=require(_0x3ee3('0x3'));var path=require('path');var sox=require(_0x3ee3('0x4'));var csv=require('to-csv');var ejs=require(_0x3ee3('0x5'));var fs=require('fs');var _=require(_0x3ee3('0x6'));var squel=require(_0x3ee3('0x7'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x3ee3('0x8'));var toCsv=require('to-csv');var querystring=require(_0x3ee3('0x9'));var Papa=require('papaparse');var qs=require(_0x3ee3('0xa'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0x3ee3('0xb'));var db=require(_0x3ee3('0xc'))['db'];function respondWithStatusCode(_0x3544ba,_0x396488){_0x396488=_0x396488||0xcc;return function(_0x373225){if(_0x373225){return _0x3544ba[_0x3ee3('0xd')](_0x396488);}return _0x3544ba[_0x3ee3('0xe')](_0x396488)[_0x3ee3('0xf')]();};}function respondWithResult(_0x51ee0b,_0x27a461){_0x27a461=_0x27a461||0xc8;return function(_0x5ba838){if(_0x5ba838){return _0x51ee0b[_0x3ee3('0xe')](_0x27a461)[_0x3ee3('0x10')](_0x5ba838);}};}function respondWithFilteredResult(_0xbefe8d,_0x8a1d29){return function(_0x54fa16){if(_0x54fa16){var _0x27f9ee=_0x54fa16[_0x3ee3('0x11')],_0x538318=_0x8a1d29['offset'],_0x53b511=_0x8a1d29['offset']+_0x8a1d29[_0x3ee3('0x12')],_0x21db17;if(_0x53b511>=_0x27f9ee){_0x53b511=_0x27f9ee;_0x21db17=0xc8;}else{_0x21db17=0xce;}_0xbefe8d['status'](_0x21db17);return _0xbefe8d[_0x3ee3('0x13')](_0x3ee3('0x14'),_0x538318+'-'+_0x53b511+'/'+_0x27f9ee)[_0x3ee3('0x10')](_0x54fa16);}return null;};}function patchUpdates(_0x350b0e){return function(_0x171112){try{jsonpatch[_0x3ee3('0x15')](_0x171112,_0x350b0e,!![]);}catch(_0x4ec9f4){return BPromise[_0x3ee3('0x16')](_0x4ec9f4);}return _0x171112[_0x3ee3('0x17')]();};}function saveUpdates(_0x6f211c,_0xdb3164){return function(_0x5087d1){if(_0x5087d1){return _0x5087d1[_0x3ee3('0x18')](_0x6f211c)[_0x3ee3('0x19')](function(_0x5b989d){return _0x5b989d;});}return null;};}function removeEntity(_0x47c33c,_0x14f0ac){return function(_0x369b7a){if(_0x369b7a){return _0x369b7a[_0x3ee3('0x1a')]()[_0x3ee3('0x19')](function(){_0x47c33c[_0x3ee3('0xe')](0xcc)[_0x3ee3('0xf')]();});}};}function handleEntityNotFound(_0x540a58,_0x2d09df){return function(_0x3e1598){if(!_0x3e1598){_0x540a58[_0x3ee3('0xd')](0x194);}return _0x3e1598;};}function handleError(_0x184022,_0x305290){_0x305290=_0x305290||0x1f4;return function(_0x575fec){logger[_0x3ee3('0x1b')](_0x575fec[_0x3ee3('0x1c')]);if(_0x575fec[_0x3ee3('0x1d')]){delete _0x575fec['name'];}_0x184022[_0x3ee3('0xe')](_0x305290)[_0x3ee3('0x1e')](_0x575fec);};}exports['index']=function(_0x3fc525,_0x5c0c64){var _0x305831={},_0x4ed10c={},_0x1ca7df={'count':0x0,'rows':[]};var _0x5e7ceb=db[_0x3ee3('0x1f')][_0x3ee3('0x20')];_0x4ed10c[_0x3ee3('0x21')]=_[_0x3ee3('0x22')](_0x5e7ceb);var _0xfde1e5={'dateStart':_0x3fc525['query'][_0x3ee3('0x23')],'dateEnd':_0x3fc525[_0x3ee3('0x24')]['dateEnd']};delete _0x3fc525[_0x3ee3('0x24')]['dateStart'];delete _0x3fc525['query'][_0x3ee3('0x25')];_0x4ed10c[_0x3ee3('0x24')]=_['keys'](_0x3fc525['query']);_0x4ed10c[_0x3ee3('0x26')]=_[_0x3ee3('0x27')](_0x4ed10c['model'],_0x4ed10c[_0x3ee3('0x24')]);_0x305831[_0x3ee3('0x28')]=_[_0x3ee3('0x27')](_0x4ed10c['model'],qs[_0x3ee3('0x29')](_0x3fc525['query'][_0x3ee3('0x29')]));_0x305831[_0x3ee3('0x28')]=_0x305831[_0x3ee3('0x28')][_0x3ee3('0x2a')]?_0x305831[_0x3ee3('0x28')]:_0x4ed10c['model'];if(!_0x3fc525[_0x3ee3('0x24')][_0x3ee3('0x2b')](_0x3ee3('0x2c'))){_0x305831[_0x3ee3('0x12')]=qs[_0x3ee3('0x12')](_0x3fc525[_0x3ee3('0x24')][_0x3ee3('0x12')]);_0x305831[_0x3ee3('0x2d')]=qs[_0x3ee3('0x2d')](_0x3fc525['query'][_0x3ee3('0x2d')]);}_0x305831['order']=qs[_0x3ee3('0x2e')](_0x3fc525[_0x3ee3('0x24')][_0x3ee3('0x2e')]);_0x305831[_0x3ee3('0x2f')]=qs[_0x3ee3('0x26')](_[_0x3ee3('0x30')](_0x3fc525[_0x3ee3('0x24')],_0x4ed10c[_0x3ee3('0x26')]));if(_0xfde1e5['dateStart']){if(_0xfde1e5[_0x3ee3('0x25')]){_0xfde1e5[_0x3ee3('0x25')]=moment(_0xfde1e5[_0x3ee3('0x25')])['add'](0x1,_0x3ee3('0x31'));}else{_0xfde1e5[_0x3ee3('0x25')]=moment(_0xfde1e5[_0x3ee3('0x23')])[_0x3ee3('0x32')](0x1,_0x3ee3('0x31'));}_['merge'](_0x305831[_0x3ee3('0x2f')],{'createdAt':{'$gte':_0xfde1e5[_0x3ee3('0x23')],'$lte':_0xfde1e5[_0x3ee3('0x25')]}});}if(_0x3fc525['query'][_0x3ee3('0x33')]){_0x305831[_0x3ee3('0x2f')]=_[_0x3ee3('0x34')](_0x305831[_0x3ee3('0x2f')],{'$or':_[_0x3ee3('0x35')](_0x305831[_0x3ee3('0x28')],function(_0x5bbe2a){var _0x2f2401={};_0x2f2401[_0x5bbe2a]={'$like':'%'+_0x3fc525[_0x3ee3('0x24')][_0x3ee3('0x33')]+'%'};return _0x2f2401;})});}_0x305831=_[_0x3ee3('0x34')]({},_0x305831,_0x3fc525[_0x3ee3('0x36')]);var _0x273ef6={'where':_0x305831['where']};return db[_0x3ee3('0x1f')][_0x3ee3('0x11')](_0x273ef6)[_0x3ee3('0x19')](function(_0x194824){_0x1ca7df[_0x3ee3('0x11')]=_0x194824;if(_0x3fc525[_0x3ee3('0x24')]['includeAll']){_0x305831['include']=[{'all':!![]}];}return db[_0x3ee3('0x1f')][_0x3ee3('0x37')](_0x305831);})[_0x3ee3('0x19')](function(_0x5024d2){_0x1ca7df['rows']=_0x5024d2;return _0x1ca7df;})['then'](respondWithFilteredResult(_0x5c0c64,_0x305831))[_0x3ee3('0x38')](handleError(_0x5c0c64,null));};exports[_0x3ee3('0x39')]=function(_0x5d6951,_0x102480){var _0x19eaaf={'raw':!![],'where':{'id':_0x5d6951[_0x3ee3('0x3a')]['id']}},_0x2af52c={};_0x2af52c[_0x3ee3('0x21')]=_[_0x3ee3('0x22')](db[_0x3ee3('0x1f')][_0x3ee3('0x20')]);_0x2af52c['query']=_[_0x3ee3('0x22')](_0x5d6951[_0x3ee3('0x24')]);_0x2af52c[_0x3ee3('0x26')]=_[_0x3ee3('0x27')](_0x2af52c[_0x3ee3('0x21')],_0x2af52c[_0x3ee3('0x24')]);_0x19eaaf[_0x3ee3('0x28')]=_[_0x3ee3('0x27')](_0x2af52c[_0x3ee3('0x21')],qs[_0x3ee3('0x29')](_0x5d6951[_0x3ee3('0x24')][_0x3ee3('0x29')]));_0x19eaaf[_0x3ee3('0x28')]=_0x19eaaf[_0x3ee3('0x28')]['length']?_0x19eaaf[_0x3ee3('0x28')]:_0x2af52c['model'];if(_0x5d6951[_0x3ee3('0x24')][_0x3ee3('0x3b')]){_0x19eaaf[_0x3ee3('0x3c')]=[{'all':!![]}];}_0x19eaaf=_[_0x3ee3('0x34')]({},_0x19eaaf,_0x5d6951[_0x3ee3('0x36')]);return db[_0x3ee3('0x1f')][_0x3ee3('0x3d')](_0x19eaaf)[_0x3ee3('0x19')](handleEntityNotFound(_0x102480,null))[_0x3ee3('0x19')](respondWithResult(_0x102480,null))[_0x3ee3('0x38')](handleError(_0x102480,null));};exports[_0x3ee3('0x3e')]=function(_0x4610d1,_0x52373e){return db[_0x3ee3('0x1f')][_0x3ee3('0x3e')](_0x4610d1[_0x3ee3('0x3f')],{})[_0x3ee3('0x19')](respondWithResult(_0x52373e,0xc9))[_0x3ee3('0x38')](handleError(_0x52373e,null));};exports[_0x3ee3('0x18')]=function(_0x11ab52,_0x471d49){if(_0x11ab52[_0x3ee3('0x3f')]['id']){delete _0x11ab52[_0x3ee3('0x3f')]['id'];}return db[_0x3ee3('0x1f')][_0x3ee3('0x3d')]({'where':{'id':_0x11ab52[_0x3ee3('0x3a')]['id']}})[_0x3ee3('0x19')](handleEntityNotFound(_0x471d49,null))['then'](saveUpdates(_0x11ab52[_0x3ee3('0x3f')],null))[_0x3ee3('0x19')](respondWithResult(_0x471d49,null))[_0x3ee3('0x38')](handleError(_0x471d49,null));};exports[_0x3ee3('0x1a')]=function(_0x2f47fc,_0x2c8233){return db[_0x3ee3('0x1f')]['find']({'where':{'id':_0x2f47fc[_0x3ee3('0x3a')]['id']}})['then'](handleEntityNotFound(_0x2c8233,null))[_0x3ee3('0x19')](removeEntity(_0x2c8233,null))[_0x3ee3('0x38')](handleError(_0x2c8233,null));};exports[_0x3ee3('0x40')]=function(_0x562a07,_0x4a38b5){return db[_0x3ee3('0x1f')]['describe']()[_0x3ee3('0x19')](respondWithResult(_0x4a38b5,null))[_0x3ee3('0x38')](handleError(_0x4a38b5,null));};
\ No newline at end of file
+var _0xcef3=['reject','save','update','then','destroy','end','stack','name','index','MailSubstatus','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','length','nolimit','sort','pick','add','day','merge','filter','where','map','count','includeAll','findAll','catch','include','options','find','create','body','params','describe','fast-json-patch','request-promise','moment','bluebird','mustache','util','lodash','squel','crypto','desk.js','to-csv','papaparse','api','../../config/utils','../../config/environment','sendStatus','status','json','offset','limit','set','Content-Range','apply'];(function(_0x11c331,_0x523ccf){var _0x1b89e1=function(_0x33d7b6){while(--_0x33d7b6){_0x11c331['push'](_0x11c331['shift']());}};_0x1b89e1(++_0x523ccf);}(_0xcef3,0x129));var _0x3cef=function(_0x13556f,_0x35b410){_0x13556f=_0x13556f-0x0;var _0x43b023=_0xcef3[_0x13556f];return _0x43b023;};'use strict';var jsonpatch=require(_0x3cef('0x0'));var rp=require(_0x3cef('0x1'));var moment=require(_0x3cef('0x2'));var BPromise=require(_0x3cef('0x3'));var Mustache=require(_0x3cef('0x4'));var util=require(_0x3cef('0x5'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x3cef('0x6'));var squel=require(_0x3cef('0x7'));var crypto=require(_0x3cef('0x8'));var jsforce=require('jsforce');var deskjs=require(_0x3cef('0x9'));var toCsv=require(_0x3cef('0xa'));var querystring=require('querystring');var Papa=require(_0x3cef('0xb'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x3cef('0xc'));var utils=require(_0x3cef('0xd'));var config=require(_0x3cef('0xe'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x41164f,_0x5d837c){_0x5d837c=_0x5d837c||0xcc;return function(_0x22f21b){if(_0x22f21b){return _0x41164f[_0x3cef('0xf')](_0x5d837c);}return _0x41164f[_0x3cef('0x10')](_0x5d837c)['end']();};}function respondWithResult(_0x2d7bd1,_0x4c9637){_0x4c9637=_0x4c9637||0xc8;return function(_0x39b12a){if(_0x39b12a){return _0x2d7bd1[_0x3cef('0x10')](_0x4c9637)[_0x3cef('0x11')](_0x39b12a);}};}function respondWithFilteredResult(_0x234c79,_0x4257bf){return function(_0x10b8bf){if(_0x10b8bf){var _0x580d2b=_0x10b8bf['count'],_0x5a4582=_0x4257bf[_0x3cef('0x12')],_0x278f19=_0x4257bf[_0x3cef('0x12')]+_0x4257bf[_0x3cef('0x13')],_0x45bc4a;if(_0x278f19>=_0x580d2b){_0x278f19=_0x580d2b;_0x45bc4a=0xc8;}else{_0x45bc4a=0xce;}_0x234c79[_0x3cef('0x10')](_0x45bc4a);return _0x234c79[_0x3cef('0x14')](_0x3cef('0x15'),_0x5a4582+'-'+_0x278f19+'/'+_0x580d2b)[_0x3cef('0x11')](_0x10b8bf);}return null;};}function patchUpdates(_0x1522fe){return function(_0x227390){try{jsonpatch[_0x3cef('0x16')](_0x227390,_0x1522fe,!![]);}catch(_0x46bbe1){return BPromise[_0x3cef('0x17')](_0x46bbe1);}return _0x227390[_0x3cef('0x18')]();};}function saveUpdates(_0x2d7c5e,_0x1c6773){return function(_0x5468e2){if(_0x5468e2){return _0x5468e2[_0x3cef('0x19')](_0x2d7c5e)[_0x3cef('0x1a')](function(_0x2217f6){return _0x2217f6;});}return null;};}function removeEntity(_0x3676a0,_0x4ddbf5){return function(_0xf5b27b){if(_0xf5b27b){return _0xf5b27b[_0x3cef('0x1b')]()[_0x3cef('0x1a')](function(){_0x3676a0[_0x3cef('0x10')](0xcc)[_0x3cef('0x1c')]();});}};}function handleEntityNotFound(_0x5865bf,_0x5c8977){return function(_0x213e5e){if(!_0x213e5e){_0x5865bf[_0x3cef('0xf')](0x194);}return _0x213e5e;};}function handleError(_0x435226,_0x30e4e3){_0x30e4e3=_0x30e4e3||0x1f4;return function(_0x168a10){logger['error'](_0x168a10[_0x3cef('0x1d')]);if(_0x168a10['name']){delete _0x168a10[_0x3cef('0x1e')];}_0x435226[_0x3cef('0x10')](_0x30e4e3)['send'](_0x168a10);};}exports[_0x3cef('0x1f')]=function(_0x1c18dc,_0x49280a){var _0x1145bd={},_0x1ce4f6={},_0x4febfe={'count':0x0,'rows':[]};var _0x3b41f1=db[_0x3cef('0x20')][_0x3cef('0x21')];_0x1ce4f6['model']=_[_0x3cef('0x22')](_0x3b41f1);var _0x5c5f7a={'dateStart':_0x1c18dc[_0x3cef('0x23')][_0x3cef('0x24')],'dateEnd':_0x1c18dc[_0x3cef('0x23')][_0x3cef('0x25')]};delete _0x1c18dc['query'][_0x3cef('0x24')];delete _0x1c18dc[_0x3cef('0x23')]['dateEnd'];_0x1ce4f6[_0x3cef('0x23')]=_[_0x3cef('0x22')](_0x1c18dc[_0x3cef('0x23')]);_0x1ce4f6[_0x3cef('0x26')]=_[_0x3cef('0x27')](_0x1ce4f6[_0x3cef('0x28')],_0x1ce4f6[_0x3cef('0x23')]);_0x1145bd[_0x3cef('0x29')]=_[_0x3cef('0x27')](_0x1ce4f6[_0x3cef('0x28')],qs[_0x3cef('0x2a')](_0x1c18dc[_0x3cef('0x23')][_0x3cef('0x2a')]));_0x1145bd[_0x3cef('0x29')]=_0x1145bd[_0x3cef('0x29')][_0x3cef('0x2b')]?_0x1145bd['attributes']:_0x1ce4f6[_0x3cef('0x28')];if(!_0x1c18dc['query']['hasOwnProperty'](_0x3cef('0x2c'))){_0x1145bd[_0x3cef('0x13')]=qs['limit'](_0x1c18dc[_0x3cef('0x23')]['limit']);_0x1145bd[_0x3cef('0x12')]=qs[_0x3cef('0x12')](_0x1c18dc[_0x3cef('0x23')]['offset']);}_0x1145bd['order']=qs[_0x3cef('0x2d')](_0x1c18dc[_0x3cef('0x23')][_0x3cef('0x2d')]);_0x1145bd['where']=qs[_0x3cef('0x26')](_[_0x3cef('0x2e')](_0x1c18dc['query'],_0x1ce4f6[_0x3cef('0x26')]));if(_0x5c5f7a[_0x3cef('0x24')]){if(_0x5c5f7a[_0x3cef('0x25')]){_0x5c5f7a[_0x3cef('0x25')]=moment(_0x5c5f7a[_0x3cef('0x25')])[_0x3cef('0x2f')](0x1,_0x3cef('0x30'));}else{_0x5c5f7a['dateEnd']=moment(_0x5c5f7a['dateStart'])['add'](0x1,_0x3cef('0x30'));}_[_0x3cef('0x31')](_0x1145bd['where'],{'createdAt':{'$gte':_0x5c5f7a[_0x3cef('0x24')],'$lte':_0x5c5f7a[_0x3cef('0x25')]}});}if(_0x1c18dc[_0x3cef('0x23')][_0x3cef('0x32')]){_0x1145bd[_0x3cef('0x33')]=_[_0x3cef('0x31')](_0x1145bd['where'],{'$or':_[_0x3cef('0x34')](_0x1145bd[_0x3cef('0x29')],function(_0x48c910){var _0xcc50b0={};_0xcc50b0[_0x48c910]={'$like':'%'+_0x1c18dc[_0x3cef('0x23')]['filter']+'%'};return _0xcc50b0;})});}_0x1145bd=_['merge']({},_0x1145bd,_0x1c18dc['options']);var _0x2bc693={'where':_0x1145bd[_0x3cef('0x33')]};return db[_0x3cef('0x20')][_0x3cef('0x35')](_0x2bc693)[_0x3cef('0x1a')](function(_0x3e6872){_0x4febfe[_0x3cef('0x35')]=_0x3e6872;if(_0x1c18dc[_0x3cef('0x23')][_0x3cef('0x36')]){_0x1145bd['include']=[{'all':!![]}];}return db[_0x3cef('0x20')][_0x3cef('0x37')](_0x1145bd);})[_0x3cef('0x1a')](function(_0x14d063){_0x4febfe['rows']=_0x14d063;return _0x4febfe;})[_0x3cef('0x1a')](respondWithFilteredResult(_0x49280a,_0x1145bd))[_0x3cef('0x38')](handleError(_0x49280a,null));};exports['show']=function(_0x50bda8,_0x31366c){var _0x717414={'raw':!![],'where':{'id':_0x50bda8['params']['id']}},_0x55cd55={};_0x55cd55[_0x3cef('0x28')]=_['keys'](db['MailSubstatus'][_0x3cef('0x21')]);_0x55cd55[_0x3cef('0x23')]=_[_0x3cef('0x22')](_0x50bda8[_0x3cef('0x23')]);_0x55cd55[_0x3cef('0x26')]=_['intersection'](_0x55cd55[_0x3cef('0x28')],_0x55cd55[_0x3cef('0x23')]);_0x717414['attributes']=_[_0x3cef('0x27')](_0x55cd55[_0x3cef('0x28')],qs['fields'](_0x50bda8[_0x3cef('0x23')][_0x3cef('0x2a')]));_0x717414[_0x3cef('0x29')]=_0x717414[_0x3cef('0x29')][_0x3cef('0x2b')]?_0x717414['attributes']:_0x55cd55[_0x3cef('0x28')];if(_0x50bda8['query'][_0x3cef('0x36')]){_0x717414[_0x3cef('0x39')]=[{'all':!![]}];}_0x717414=_[_0x3cef('0x31')]({},_0x717414,_0x50bda8[_0x3cef('0x3a')]);return db[_0x3cef('0x20')][_0x3cef('0x3b')](_0x717414)[_0x3cef('0x1a')](handleEntityNotFound(_0x31366c,null))[_0x3cef('0x1a')](respondWithResult(_0x31366c,null))[_0x3cef('0x38')](handleError(_0x31366c,null));};exports[_0x3cef('0x3c')]=function(_0x154f6d,_0x32dd0d){return db[_0x3cef('0x20')][_0x3cef('0x3c')](_0x154f6d[_0x3cef('0x3d')],{})[_0x3cef('0x1a')](respondWithResult(_0x32dd0d,0xc9))[_0x3cef('0x38')](handleError(_0x32dd0d,null));};exports[_0x3cef('0x19')]=function(_0x3022d3,_0xa3989f){if(_0x3022d3[_0x3cef('0x3d')]['id']){delete _0x3022d3['body']['id'];}return db[_0x3cef('0x20')]['find']({'where':{'id':_0x3022d3['params']['id']}})[_0x3cef('0x1a')](handleEntityNotFound(_0xa3989f,null))['then'](saveUpdates(_0x3022d3['body'],null))['then'](respondWithResult(_0xa3989f,null))[_0x3cef('0x38')](handleError(_0xa3989f,null));};exports[_0x3cef('0x1b')]=function(_0x192af4,_0x4505fb){return db[_0x3cef('0x20')][_0x3cef('0x3b')]({'where':{'id':_0x192af4[_0x3cef('0x3e')]['id']}})[_0x3cef('0x1a')](handleEntityNotFound(_0x4505fb,null))[_0x3cef('0x1a')](removeEntity(_0x4505fb,null))[_0x3cef('0x38')](handleError(_0x4505fb,null));};exports['describe']=function(_0x10035e,_0x40ce5d){return db[_0x3cef('0x20')][_0x3cef('0x3f')]()[_0x3cef('0x1a')](respondWithResult(_0x40ce5d,null))['catch'](handleError(_0x40ce5d,null));};
\ No newline at end of file
index f7f8cb5..49ece42 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x84af=['../../config/logger','moment','./mailSubstatus.attributes','exports','define','MailSubstatus','mail_substatuses','lodash','util'];(function(_0x27dba4,_0x419253){var _0x35ec9d=function(_0x2d13b2){while(--_0x2d13b2){_0x27dba4['push'](_0x27dba4['shift']());}};_0x35ec9d(++_0x419253);}(_0x84af,0xdf));var _0xf84a=function(_0xdea41a,_0x552987){_0xdea41a=_0xdea41a-0x0;var _0x15d0d8=_0x84af[_0xdea41a];return _0x15d0d8;};'use strict';var _=require(_0xf84a('0x0'));var util=require(_0xf84a('0x1'));var logger=require(_0xf84a('0x2'))('api');var moment=require(_0xf84a('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0xf84a('0x4'));module[_0xf84a('0x5')]=function(_0x38e8c8,_0x50a193){return _0x38e8c8[_0xf84a('0x6')](_0xf84a('0x7'),attributes,{'tableName':_0xf84a('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2e7c=['../../config/logger','moment','bluebird','exports','MailSubstatus','mail_substatuses','lodash'];(function(_0x146a85,_0x529b52){var _0x1b59bf=function(_0x4af0fd){while(--_0x4af0fd){_0x146a85['push'](_0x146a85['shift']());}};_0x1b59bf(++_0x529b52);}(_0x2e7c,0x110));var _0xc2e7=function(_0x31a371,_0x50828e){_0x31a371=_0x31a371-0x0;var _0x2a5bd6=_0x2e7c[_0x31a371];return _0x2a5bd6;};'use strict';var _=require(_0xc2e7('0x0'));var util=require('util');var logger=require(_0xc2e7('0x1'))('api');var moment=require(_0xc2e7('0x2'));var BPromise=require(_0xc2e7('0x3'));var rp=require('request-promise');var attributes=require('./mailSubstatus.attributes');module[_0xc2e7('0x4')]=function(_0x5ef3a0,_0xcb79bf){return _0x5ef3a0['define'](_0xc2e7('0x5'),attributes,{'tableName':_0xc2e7('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 96da9e5..4b03036 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ebb=['debug','stringify','error','code','message','result','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','MailSubstatus,\x20%s,\x20%s','request\x20sent'];(function(_0x259b69,_0x3d89d8){var _0x5117db=function(_0x5d4551){while(--_0x5d4551){_0x259b69['push'](_0x259b69['shift']());}};_0x5117db(++_0x3d89d8);}(_0x4ebb,0x1a9));var _0xb4eb=function(_0x2a259c,_0x363470){_0x2a259c=_0x2a259c-0x0;var _0x187753=_0x4ebb[_0x2a259c];return _0x187753;};'use strict';var _=require('lodash');var util=require(_0xb4eb('0x0'));var moment=require(_0xb4eb('0x1'));var BPromise=require(_0xb4eb('0x2'));var rs=require(_0xb4eb('0x3'));var fs=require('fs');var db=require(_0xb4eb('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xb4eb('0x5'))('rpc');var config=require(_0xb4eb('0x6'));var jayson=require(_0xb4eb('0x7'));var client=jayson[_0xb4eb('0x8')][_0xb4eb('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x13707c,_0x23a557,_0x6007b4){return new BPromise(function(_0x4939d9,_0x498419){return client[_0xb4eb('0xa')](_0x13707c,_0x6007b4)[_0xb4eb('0xb')](function(_0x5c1d3b){logger[_0xb4eb('0xc')](_0xb4eb('0xd'),_0x23a557,_0xb4eb('0xe'));logger[_0xb4eb('0xf')]('MailSubstatus,\x20%s,\x20%s,\x20%s',_0x23a557,_0xb4eb('0xe'),JSON[_0xb4eb('0x10')](_0x5c1d3b));if(_0x5c1d3b['error']){if(_0x5c1d3b[_0xb4eb('0x11')][_0xb4eb('0x12')]===0x1f4){logger[_0xb4eb('0x11')]('MailSubstatus,\x20%s,\x20%s',_0x23a557,_0x5c1d3b['error'][_0xb4eb('0x13')]);return _0x498419(_0x5c1d3b[_0xb4eb('0x11')][_0xb4eb('0x13')]);}logger[_0xb4eb('0x11')](_0xb4eb('0xd'),_0x23a557,_0x5c1d3b['error']['message']);return _0x4939d9(_0x5c1d3b['error']['message']);}else{logger['info']('MailSubstatus,\x20%s,\x20%s',_0x23a557,_0xb4eb('0xe'));_0x4939d9(_0x5c1d3b[_0xb4eb('0x14')][_0xb4eb('0x13')]);}})[_0xb4eb('0x15')](function(_0x41cee2){logger['error']('MailSubstatus,\x20%s,\x20%s',_0x23a557,_0x41cee2);_0x498419(_0x41cee2);});});}
\ No newline at end of file
+var _0x2390=['request','then','info','MailSubstatus,\x20%s,\x20%s','request\x20sent','debug','MailSubstatus,\x20%s,\x20%s,\x20%s','stringify','error','code','message','lodash','util','moment','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client'];(function(_0x443614,_0x31248e){var _0xfdfbb6=function(_0x4d6cab){while(--_0x4d6cab){_0x443614['push'](_0x443614['shift']());}};_0xfdfbb6(++_0x31248e);}(_0x2390,0x1af));var _0x0239=function(_0x502c7d,_0x2f1285){_0x502c7d=_0x502c7d-0x0;var _0x30b7ed=_0x2390[_0x502c7d];return _0x30b7ed;};'use strict';var _=require(_0x0239('0x0'));var util=require(_0x0239('0x1'));var moment=require(_0x0239('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0x0239('0x3'))['db'];var utils=require(_0x0239('0x4'));var logger=require('../../config/logger')(_0x0239('0x5'));var config=require(_0x0239('0x6'));var jayson=require(_0x0239('0x7'));var client=jayson[_0x0239('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x47d43c,_0x1e2aa8,_0x54b3d5){return new BPromise(function(_0x24df15,_0x1d6663){return client[_0x0239('0x9')](_0x47d43c,_0x54b3d5)[_0x0239('0xa')](function(_0x28bbb8){logger[_0x0239('0xb')](_0x0239('0xc'),_0x1e2aa8,_0x0239('0xd'));logger[_0x0239('0xe')](_0x0239('0xf'),_0x1e2aa8,_0x0239('0xd'),JSON[_0x0239('0x10')](_0x28bbb8));if(_0x28bbb8[_0x0239('0x11')]){if(_0x28bbb8['error'][_0x0239('0x12')]===0x1f4){logger['error'](_0x0239('0xc'),_0x1e2aa8,_0x28bbb8[_0x0239('0x11')][_0x0239('0x13')]);return _0x1d6663(_0x28bbb8[_0x0239('0x11')][_0x0239('0x13')]);}logger[_0x0239('0x11')](_0x0239('0xc'),_0x1e2aa8,_0x28bbb8[_0x0239('0x11')][_0x0239('0x13')]);return _0x24df15(_0x28bbb8[_0x0239('0x11')][_0x0239('0x13')]);}else{logger[_0x0239('0xb')]('MailSubstatus,\x20%s,\x20%s',_0x1e2aa8,_0x0239('0xd'));_0x24df15(_0x28bbb8['result'][_0x0239('0x13')]);}})['catch'](function(_0x2a3395){logger[_0x0239('0x11')](_0x0239('0xc'),_0x1e2aa8,_0x2a3395);_0x1d6663(_0x2a3395);});});}
\ No newline at end of file
index 34c4052..2a9c43b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7b5=['index','get','describe','show','post','create','put','/:id','update','delete','multer','path','express','Router','../../components/interaction/service','../../config/environment','isAuthenticated'];(function(_0x5931d7,_0xb2c10b){var _0x162e7a=function(_0x23f7c7){while(--_0x23f7c7){_0x5931d7['push'](_0x5931d7['shift']());}};_0x162e7a(++_0xb2c10b);}(_0xc7b5,0x11a));var _0x5c7b=function(_0x418925,_0x4f57fc){_0x418925=_0x418925-0x0;var _0x28d19f=_0xc7b5[_0x418925];return _0x28d19f;};'use strict';var multer=require(_0x5c7b('0x0'));var util=require('util');var path=require(_0x5c7b('0x1'));var express=require(_0x5c7b('0x2'));var router=express[_0x5c7b('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x5c7b('0x4'));var config=require(_0x5c7b('0x5'));var controller=require('./mailTransferReport.controller');router['get']('/',auth[_0x5c7b('0x6')](),controller[_0x5c7b('0x7')]);router[_0x5c7b('0x8')]('/describe',auth[_0x5c7b('0x6')](),controller[_0x5c7b('0x9')]);router[_0x5c7b('0x8')]('/:id',auth[_0x5c7b('0x6')](),controller[_0x5c7b('0xa')]);router[_0x5c7b('0xb')]('/',auth[_0x5c7b('0x6')](),controller[_0x5c7b('0xc')]);router[_0x5c7b('0xd')](_0x5c7b('0xe'),auth[_0x5c7b('0x6')](),controller[_0x5c7b('0xf')]);router[_0x5c7b('0x10')]('/:id',auth[_0x5c7b('0x6')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0xabf7=['show','update','delete','destroy','exports','multer','util','path','express','../../components/interaction/service','./mailTransferReport.controller','get','index','/describe','describe','/:id','isAuthenticated'];(function(_0x485abd,_0x32c7c1){var _0x3379f1=function(_0x36b528){while(--_0x36b528){_0x485abd['push'](_0x485abd['shift']());}};_0x3379f1(++_0x32c7c1);}(_0xabf7,0xf3));var _0x7abf=function(_0x4d6a8f,_0x565271){_0x4d6a8f=_0x4d6a8f-0x0;var _0x537980=_0xabf7[_0x4d6a8f];return _0x537980;};'use strict';var multer=require(_0x7abf('0x0'));var util=require(_0x7abf('0x1'));var path=require(_0x7abf('0x2'));var express=require(_0x7abf('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x7abf('0x4'));var config=require('../../config/environment');var controller=require(_0x7abf('0x5'));router[_0x7abf('0x6')]('/',auth['isAuthenticated'](),controller[_0x7abf('0x7')]);router['get'](_0x7abf('0x8'),auth['isAuthenticated'](),controller[_0x7abf('0x9')]);router[_0x7abf('0x6')](_0x7abf('0xa'),auth[_0x7abf('0xb')](),controller[_0x7abf('0xc')]);router['post']('/',auth[_0x7abf('0xb')](),controller['create']);router['put'](_0x7abf('0xa'),auth[_0x7abf('0xb')](),controller[_0x7abf('0xd')]);router[_0x7abf('0xe')](_0x7abf('0xa'),auth[_0x7abf('0xb')](),controller[_0x7abf('0xf')]);module[_0x7abf('0x10')]=router;
\ No newline at end of file
index 299f3f3..afd4d01 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd75=['moment','exports','ENUM','account','agent','queue','DATE'];(function(_0x5ae0b1,_0x855b74){var _0x7b9c8b=function(_0x59de68){while(--_0x59de68){_0x5ae0b1['push'](_0x5ae0b1['shift']());}};_0x7b9c8b(++_0x855b74);}(_0xcd75,0x173));var _0x5cd7=function(_0x2eba15,_0x86abdb){_0x2eba15=_0x2eba15-0x0;var _0x2a390c=_0xcd75[_0x2eba15];return _0x2a390c;};'use strict';var moment=require(_0x5cd7('0x0'));var Sequelize=require('sequelize');module[_0x5cd7('0x1')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize[_0x5cd7('0x2')](_0x5cd7('0x3'),_0x5cd7('0x4'),_0x5cd7('0x5')),'allowNull':![],'defaultValue':_0x5cd7('0x5')},'transferredAt':{'type':Sequelize[_0x5cd7('0x6')],'allowNull':![],'defaultValue':Sequelize['NOW']}};
\ No newline at end of file
+var _0x77e9=['NOW','moment','sequelize','exports','STRING','ENUM','agent','queue','DATE'];(function(_0x20f823,_0x162ef2){var _0x622e1f=function(_0x5e8d3b){while(--_0x5e8d3b){_0x20f823['push'](_0x20f823['shift']());}};_0x622e1f(++_0x162ef2);}(_0x77e9,0x91));var _0x977e=function(_0x465a30,_0x47819e){_0x465a30=_0x465a30-0x0;var _0x441938=_0x77e9[_0x465a30];return _0x441938;};'use strict';var moment=require(_0x977e('0x0'));var Sequelize=require(_0x977e('0x1'));module[_0x977e('0x2')]={'uniqueid':{'type':Sequelize[_0x977e('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x977e('0x4')]('account',_0x977e('0x5'),_0x977e('0x6')),'allowNull':![],'defaultValue':_0x977e('0x6')},'transferredAt':{'type':Sequelize[_0x977e('0x7')],'allowNull':![],'defaultValue':Sequelize[_0x977e('0x8')]}};
\ No newline at end of file
index 3bd5395..7cd20fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6097=['pick','add','day','merge','map','filter','count','include','catch','show','params','intersection','includeAll','find','create','body','update','describe','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','squel','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','end','status','json','offset','limit','set','apply','reject','then','sendStatus','error','stack','name','send','index','MailTransferReport','rawAttributes','keys','query','dateStart','dateEnd','filters','model','attributes','fields','length','nolimit','order','sort','where'];(function(_0x1c62ea,_0x11071c){var _0x30f997=function(_0x35745d){while(--_0x35745d){_0x1c62ea['push'](_0x1c62ea['shift']());}};_0x30f997(++_0x11071c);}(_0x6097,0x1ee));var _0x7609=function(_0x44d9ab,_0x76bc69){_0x44d9ab=_0x44d9ab-0x0;var _0x31485e=_0x6097[_0x44d9ab];return _0x31485e;};'use strict';var jsonpatch=require(_0x7609('0x0'));var rp=require(_0x7609('0x1'));var moment=require(_0x7609('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x7609('0x3'));var util=require(_0x7609('0x4'));var path=require(_0x7609('0x5'));var sox=require(_0x7609('0x6'));var csv=require(_0x7609('0x7'));var ejs=require(_0x7609('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x7609('0x9'));var crypto=require(_0x7609('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x7609('0xb'));var toCsv=require(_0x7609('0x7'));var querystring=require(_0x7609('0xc'));var Papa=require(_0x7609('0xd'));var qs=require(_0x7609('0xe'));var logger=require(_0x7609('0xf'))(_0x7609('0x10'));var utils=require(_0x7609('0x11'));var config=require(_0x7609('0x12'));var db=require(_0x7609('0x13'))['db'];function respondWithStatusCode(_0x2fc1f9,_0x4500b9){_0x4500b9=_0x4500b9||0xcc;return function(_0xe81f01){if(_0xe81f01){return _0x2fc1f9['sendStatus'](_0x4500b9);}return _0x2fc1f9['status'](_0x4500b9)[_0x7609('0x14')]();};}function respondWithResult(_0x32bd72,_0x1f87a8){_0x1f87a8=_0x1f87a8||0xc8;return function(_0x4b8aef){if(_0x4b8aef){return _0x32bd72[_0x7609('0x15')](_0x1f87a8)[_0x7609('0x16')](_0x4b8aef);}};}function respondWithFilteredResult(_0x34554f,_0x310c4b){return function(_0x331451){if(_0x331451){var _0x53b1c5=_0x331451['count'],_0x1308ad=_0x310c4b[_0x7609('0x17')],_0x518ef5=_0x310c4b[_0x7609('0x17')]+_0x310c4b[_0x7609('0x18')],_0x116e41;if(_0x518ef5>=_0x53b1c5){_0x518ef5=_0x53b1c5;_0x116e41=0xc8;}else{_0x116e41=0xce;}_0x34554f[_0x7609('0x15')](_0x116e41);return _0x34554f[_0x7609('0x19')]('Content-Range',_0x1308ad+'-'+_0x518ef5+'/'+_0x53b1c5)[_0x7609('0x16')](_0x331451);}return null;};}function patchUpdates(_0x3a3fb4){return function(_0x100211){try{jsonpatch[_0x7609('0x1a')](_0x100211,_0x3a3fb4,!![]);}catch(_0x1db553){return BPromise[_0x7609('0x1b')](_0x1db553);}return _0x100211['save']();};}function saveUpdates(_0x21fa0b,_0x12f131){return function(_0x230a72){if(_0x230a72){return _0x230a72['update'](_0x21fa0b)[_0x7609('0x1c')](function(_0x1c1ee8){return _0x1c1ee8;});}return null;};}function removeEntity(_0x42a558,_0x50670e){return function(_0x1b0dbe){if(_0x1b0dbe){return _0x1b0dbe['destroy']()[_0x7609('0x1c')](function(){_0x42a558[_0x7609('0x15')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4a5d8f,_0x3cfd02){return function(_0x50067c){if(!_0x50067c){_0x4a5d8f[_0x7609('0x1d')](0x194);}return _0x50067c;};}function handleError(_0x33815e,_0x1a2781){_0x1a2781=_0x1a2781||0x1f4;return function(_0x442735){logger[_0x7609('0x1e')](_0x442735[_0x7609('0x1f')]);if(_0x442735[_0x7609('0x20')]){delete _0x442735[_0x7609('0x20')];}_0x33815e[_0x7609('0x15')](_0x1a2781)[_0x7609('0x21')](_0x442735);};}exports[_0x7609('0x22')]=function(_0x405068,_0x4389ab){var _0xbefffb={},_0x4ab028={},_0x926dc5={'count':0x0,'rows':[]};var _0x53c941=db[_0x7609('0x23')][_0x7609('0x24')];_0x4ab028['model']=_[_0x7609('0x25')](_0x53c941);var _0x5680e4={'dateStart':_0x405068[_0x7609('0x26')][_0x7609('0x27')],'dateEnd':_0x405068[_0x7609('0x26')][_0x7609('0x28')]};delete _0x405068[_0x7609('0x26')][_0x7609('0x27')];delete _0x405068[_0x7609('0x26')][_0x7609('0x28')];_0x4ab028[_0x7609('0x26')]=_[_0x7609('0x25')](_0x405068[_0x7609('0x26')]);_0x4ab028[_0x7609('0x29')]=_['intersection'](_0x4ab028[_0x7609('0x2a')],_0x4ab028['query']);_0xbefffb[_0x7609('0x2b')]=_['intersection'](_0x4ab028[_0x7609('0x2a')],qs[_0x7609('0x2c')](_0x405068[_0x7609('0x26')]['fields']));_0xbefffb[_0x7609('0x2b')]=_0xbefffb[_0x7609('0x2b')][_0x7609('0x2d')]?_0xbefffb[_0x7609('0x2b')]:_0x4ab028[_0x7609('0x2a')];if(!_0x405068['query']['hasOwnProperty'](_0x7609('0x2e'))){_0xbefffb[_0x7609('0x18')]=qs[_0x7609('0x18')](_0x405068[_0x7609('0x26')][_0x7609('0x18')]);_0xbefffb[_0x7609('0x17')]=qs[_0x7609('0x17')](_0x405068[_0x7609('0x26')]['offset']);}_0xbefffb[_0x7609('0x2f')]=qs[_0x7609('0x30')](_0x405068[_0x7609('0x26')]['sort']);_0xbefffb[_0x7609('0x31')]=qs[_0x7609('0x29')](_[_0x7609('0x32')](_0x405068[_0x7609('0x26')],_0x4ab028[_0x7609('0x29')]));if(_0x5680e4['dateStart']){if(_0x5680e4['dateEnd']){_0x5680e4[_0x7609('0x28')]=moment(_0x5680e4[_0x7609('0x28')])[_0x7609('0x33')](0x1,_0x7609('0x34'));}else{_0x5680e4['dateEnd']=moment(_0x5680e4[_0x7609('0x27')])[_0x7609('0x33')](0x1,_0x7609('0x34'));}_['merge'](_0xbefffb[_0x7609('0x31')],{'createdAt':{'$gte':_0x5680e4[_0x7609('0x27')],'$lte':_0x5680e4['dateEnd']}});}if(_0x405068['query']['filter']){_0xbefffb['where']=_[_0x7609('0x35')](_0xbefffb[_0x7609('0x31')],{'$or':_[_0x7609('0x36')](_0xbefffb[_0x7609('0x2b')],function(_0xdd83ba){var _0x302cf6={};_0x302cf6[_0xdd83ba]={'$like':'%'+_0x405068[_0x7609('0x26')][_0x7609('0x37')]+'%'};return _0x302cf6;})});}_0xbefffb=_[_0x7609('0x35')]({},_0xbefffb,_0x405068['options']);var _0x16e2cb={'where':_0xbefffb[_0x7609('0x31')]};return db[_0x7609('0x23')][_0x7609('0x38')](_0x16e2cb)[_0x7609('0x1c')](function(_0x3f36b6){_0x926dc5[_0x7609('0x38')]=_0x3f36b6;if(_0x405068[_0x7609('0x26')]['includeAll']){_0xbefffb[_0x7609('0x39')]=[{'all':!![]}];}return db['MailTransferReport']['findAll'](_0xbefffb);})[_0x7609('0x1c')](function(_0x279256){_0x926dc5['rows']=_0x279256;return _0x926dc5;})[_0x7609('0x1c')](respondWithFilteredResult(_0x4389ab,_0xbefffb))[_0x7609('0x3a')](handleError(_0x4389ab,null));};exports[_0x7609('0x3b')]=function(_0x589a45,_0x450658){var _0x404462={'raw':!![],'where':{'id':_0x589a45[_0x7609('0x3c')]['id']}},_0x2dbadf={};_0x2dbadf[_0x7609('0x2a')]=_[_0x7609('0x25')](db['MailTransferReport'][_0x7609('0x24')]);_0x2dbadf[_0x7609('0x26')]=_[_0x7609('0x25')](_0x589a45[_0x7609('0x26')]);_0x2dbadf[_0x7609('0x29')]=_['intersection'](_0x2dbadf[_0x7609('0x2a')],_0x2dbadf[_0x7609('0x26')]);_0x404462[_0x7609('0x2b')]=_[_0x7609('0x3d')](_0x2dbadf[_0x7609('0x2a')],qs[_0x7609('0x2c')](_0x589a45[_0x7609('0x26')]['fields']));_0x404462['attributes']=_0x404462['attributes'][_0x7609('0x2d')]?_0x404462[_0x7609('0x2b')]:_0x2dbadf[_0x7609('0x2a')];if(_0x589a45[_0x7609('0x26')][_0x7609('0x3e')]){_0x404462[_0x7609('0x39')]=[{'all':!![]}];}_0x404462=_[_0x7609('0x35')]({},_0x404462,_0x589a45['options']);return db[_0x7609('0x23')][_0x7609('0x3f')](_0x404462)[_0x7609('0x1c')](handleEntityNotFound(_0x450658,null))[_0x7609('0x1c')](respondWithResult(_0x450658,null))['catch'](handleError(_0x450658,null));};exports['create']=function(_0x5135a9,_0x3d67fa){return db[_0x7609('0x23')][_0x7609('0x40')](_0x5135a9[_0x7609('0x41')],{})[_0x7609('0x1c')](respondWithResult(_0x3d67fa,0xc9))[_0x7609('0x3a')](handleError(_0x3d67fa,null));};exports[_0x7609('0x42')]=function(_0x3574e4,_0xc8e297){if(_0x3574e4[_0x7609('0x41')]['id']){delete _0x3574e4['body']['id'];}return db['MailTransferReport'][_0x7609('0x3f')]({'where':{'id':_0x3574e4[_0x7609('0x3c')]['id']}})[_0x7609('0x1c')](handleEntityNotFound(_0xc8e297,null))[_0x7609('0x1c')](saveUpdates(_0x3574e4['body'],null))[_0x7609('0x1c')](respondWithResult(_0xc8e297,null))[_0x7609('0x3a')](handleError(_0xc8e297,null));};exports['destroy']=function(_0x1fe624,_0x5c7984){return db[_0x7609('0x23')][_0x7609('0x3f')]({'where':{'id':_0x1fe624[_0x7609('0x3c')]['id']}})[_0x7609('0x1c')](handleEntityNotFound(_0x5c7984,null))[_0x7609('0x1c')](removeEntity(_0x5c7984,null))['catch'](handleError(_0x5c7984,null));};exports['describe']=function(_0x54023d,_0x64020b){return db[_0x7609('0x23')][_0x7609('0x43')]()[_0x7609('0x1c')](respondWithResult(_0x64020b,null))[_0x7609('0x3a')](handleError(_0x64020b,null));};
\ No newline at end of file
+var _0x9cf7=['end','error','stack','name','send','index','MailTransferReport','rawAttributes','model','keys','query','dateStart','dateEnd','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','day','add','merge','filter','map','options','includeAll','include','findAll','rows','catch','show','find','create','body','params','describe','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/logger','../../config/utils','../../config/environment','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy'];(function(_0x7e95c9,_0xe40903){var _0x55f967=function(_0x53b9c5){while(--_0x53b9c5){_0x7e95c9['push'](_0x7e95c9['shift']());}};_0x55f967(++_0xe40903);}(_0x9cf7,0xb9));var _0x79cf=function(_0x5bd426,_0x4878e5){_0x5bd426=_0x5bd426-0x0;var _0x23a7eb=_0x9cf7[_0x5bd426];return _0x23a7eb;};'use strict';var jsonpatch=require(_0x79cf('0x0'));var rp=require('request-promise');var moment=require(_0x79cf('0x1'));var BPromise=require(_0x79cf('0x2'));var Mustache=require(_0x79cf('0x3'));var util=require(_0x79cf('0x4'));var path=require(_0x79cf('0x5'));var sox=require(_0x79cf('0x6'));var csv=require('to-csv');var ejs=require(_0x79cf('0x7'));var fs=require('fs');var _=require(_0x79cf('0x8'));var squel=require(_0x79cf('0x9'));var crypto=require(_0x79cf('0xa'));var jsforce=require(_0x79cf('0xb'));var deskjs=require(_0x79cf('0xc'));var toCsv=require('to-csv');var querystring=require(_0x79cf('0xd'));var Papa=require(_0x79cf('0xe'));var qs=require('../../components/parsers/qs');var logger=require(_0x79cf('0xf'))('api');var utils=require(_0x79cf('0x10'));var config=require(_0x79cf('0x11'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4e0115,_0x324f24){_0x324f24=_0x324f24||0xcc;return function(_0x2d0e49){if(_0x2d0e49){return _0x4e0115[_0x79cf('0x12')](_0x324f24);}return _0x4e0115[_0x79cf('0x13')](_0x324f24)['end']();};}function respondWithResult(_0x47c4ba,_0xa76b80){_0xa76b80=_0xa76b80||0xc8;return function(_0x2fab3a){if(_0x2fab3a){return _0x47c4ba['status'](_0xa76b80)[_0x79cf('0x14')](_0x2fab3a);}};}function respondWithFilteredResult(_0x1f02af,_0x4b96d1){return function(_0x5bd97c){if(_0x5bd97c){var _0x570293=_0x5bd97c[_0x79cf('0x15')],_0x42c3c4=_0x4b96d1[_0x79cf('0x16')],_0xd54fe2=_0x4b96d1[_0x79cf('0x16')]+_0x4b96d1[_0x79cf('0x17')],_0x38cca6;if(_0xd54fe2>=_0x570293){_0xd54fe2=_0x570293;_0x38cca6=0xc8;}else{_0x38cca6=0xce;}_0x1f02af[_0x79cf('0x13')](_0x38cca6);return _0x1f02af[_0x79cf('0x18')](_0x79cf('0x19'),_0x42c3c4+'-'+_0xd54fe2+'/'+_0x570293)[_0x79cf('0x14')](_0x5bd97c);}return null;};}function patchUpdates(_0x43e3f5){return function(_0x59e251){try{jsonpatch[_0x79cf('0x1a')](_0x59e251,_0x43e3f5,!![]);}catch(_0x5db14a){return BPromise['reject'](_0x5db14a);}return _0x59e251[_0x79cf('0x1b')]();};}function saveUpdates(_0x3ce68f,_0x1a76b4){return function(_0x3a3463){if(_0x3a3463){return _0x3a3463[_0x79cf('0x1c')](_0x3ce68f)[_0x79cf('0x1d')](function(_0x2e80cd){return _0x2e80cd;});}return null;};}function removeEntity(_0x1c99c1,_0x176658){return function(_0x2fdca2){if(_0x2fdca2){return _0x2fdca2[_0x79cf('0x1e')]()[_0x79cf('0x1d')](function(){_0x1c99c1[_0x79cf('0x13')](0xcc)[_0x79cf('0x1f')]();});}};}function handleEntityNotFound(_0x562718,_0x47a68c){return function(_0x4c8ce0){if(!_0x4c8ce0){_0x562718[_0x79cf('0x12')](0x194);}return _0x4c8ce0;};}function handleError(_0x1bb75a,_0x364dfc){_0x364dfc=_0x364dfc||0x1f4;return function(_0x561568){logger[_0x79cf('0x20')](_0x561568[_0x79cf('0x21')]);if(_0x561568['name']){delete _0x561568[_0x79cf('0x22')];}_0x1bb75a['status'](_0x364dfc)[_0x79cf('0x23')](_0x561568);};}exports[_0x79cf('0x24')]=function(_0x3bede2,_0x558606){var _0x5e6a27={},_0x8d5886={},_0x1f45e2={'count':0x0,'rows':[]};var _0x182c68=db[_0x79cf('0x25')][_0x79cf('0x26')];_0x8d5886[_0x79cf('0x27')]=_[_0x79cf('0x28')](_0x182c68);var _0x355900={'dateStart':_0x3bede2[_0x79cf('0x29')][_0x79cf('0x2a')],'dateEnd':_0x3bede2[_0x79cf('0x29')][_0x79cf('0x2b')]};delete _0x3bede2[_0x79cf('0x29')][_0x79cf('0x2a')];delete _0x3bede2[_0x79cf('0x29')][_0x79cf('0x2b')];_0x8d5886[_0x79cf('0x29')]=_[_0x79cf('0x28')](_0x3bede2[_0x79cf('0x29')]);_0x8d5886['filters']=_['intersection'](_0x8d5886['model'],_0x8d5886[_0x79cf('0x29')]);_0x5e6a27[_0x79cf('0x2c')]=_[_0x79cf('0x2d')](_0x8d5886[_0x79cf('0x27')],qs[_0x79cf('0x2e')](_0x3bede2[_0x79cf('0x29')][_0x79cf('0x2e')]));_0x5e6a27[_0x79cf('0x2c')]=_0x5e6a27[_0x79cf('0x2c')][_0x79cf('0x2f')]?_0x5e6a27[_0x79cf('0x2c')]:_0x8d5886[_0x79cf('0x27')];if(!_0x3bede2[_0x79cf('0x29')][_0x79cf('0x30')](_0x79cf('0x31'))){_0x5e6a27[_0x79cf('0x17')]=qs[_0x79cf('0x17')](_0x3bede2[_0x79cf('0x29')][_0x79cf('0x17')]);_0x5e6a27[_0x79cf('0x16')]=qs[_0x79cf('0x16')](_0x3bede2['query'][_0x79cf('0x16')]);}_0x5e6a27[_0x79cf('0x32')]=qs[_0x79cf('0x33')](_0x3bede2[_0x79cf('0x29')]['sort']);_0x5e6a27[_0x79cf('0x34')]=qs[_0x79cf('0x35')](_[_0x79cf('0x36')](_0x3bede2[_0x79cf('0x29')],_0x8d5886['filters']));if(_0x355900[_0x79cf('0x2a')]){if(_0x355900[_0x79cf('0x2b')]){_0x355900[_0x79cf('0x2b')]=moment(_0x355900[_0x79cf('0x2b')])['add'](0x1,_0x79cf('0x37'));}else{_0x355900[_0x79cf('0x2b')]=moment(_0x355900['dateStart'])[_0x79cf('0x38')](0x1,_0x79cf('0x37'));}_[_0x79cf('0x39')](_0x5e6a27[_0x79cf('0x34')],{'createdAt':{'$gte':_0x355900['dateStart'],'$lte':_0x355900['dateEnd']}});}if(_0x3bede2['query'][_0x79cf('0x3a')]){_0x5e6a27[_0x79cf('0x34')]=_[_0x79cf('0x39')](_0x5e6a27['where'],{'$or':_[_0x79cf('0x3b')](_0x5e6a27[_0x79cf('0x2c')],function(_0x365a96){var _0x41247a={};_0x41247a[_0x365a96]={'$like':'%'+_0x3bede2[_0x79cf('0x29')][_0x79cf('0x3a')]+'%'};return _0x41247a;})});}_0x5e6a27=_['merge']({},_0x5e6a27,_0x3bede2[_0x79cf('0x3c')]);var _0x2d3ac7={'where':_0x5e6a27['where']};return db[_0x79cf('0x25')][_0x79cf('0x15')](_0x2d3ac7)[_0x79cf('0x1d')](function(_0x49d27d){_0x1f45e2[_0x79cf('0x15')]=_0x49d27d;if(_0x3bede2[_0x79cf('0x29')][_0x79cf('0x3d')]){_0x5e6a27[_0x79cf('0x3e')]=[{'all':!![]}];}return db['MailTransferReport'][_0x79cf('0x3f')](_0x5e6a27);})['then'](function(_0xbeeb65){_0x1f45e2[_0x79cf('0x40')]=_0xbeeb65;return _0x1f45e2;})['then'](respondWithFilteredResult(_0x558606,_0x5e6a27))[_0x79cf('0x41')](handleError(_0x558606,null));};exports[_0x79cf('0x42')]=function(_0x33246c,_0x2fe7e5){var _0xfe3449={'raw':!![],'where':{'id':_0x33246c['params']['id']}},_0x21b5e7={};_0x21b5e7[_0x79cf('0x27')]=_[_0x79cf('0x28')](db[_0x79cf('0x25')][_0x79cf('0x26')]);_0x21b5e7['query']=_['keys'](_0x33246c[_0x79cf('0x29')]);_0x21b5e7[_0x79cf('0x35')]=_[_0x79cf('0x2d')](_0x21b5e7[_0x79cf('0x27')],_0x21b5e7['query']);_0xfe3449[_0x79cf('0x2c')]=_['intersection'](_0x21b5e7[_0x79cf('0x27')],qs[_0x79cf('0x2e')](_0x33246c[_0x79cf('0x29')][_0x79cf('0x2e')]));_0xfe3449[_0x79cf('0x2c')]=_0xfe3449[_0x79cf('0x2c')][_0x79cf('0x2f')]?_0xfe3449[_0x79cf('0x2c')]:_0x21b5e7[_0x79cf('0x27')];if(_0x33246c['query'][_0x79cf('0x3d')]){_0xfe3449[_0x79cf('0x3e')]=[{'all':!![]}];}_0xfe3449=_[_0x79cf('0x39')]({},_0xfe3449,_0x33246c[_0x79cf('0x3c')]);return db['MailTransferReport'][_0x79cf('0x43')](_0xfe3449)[_0x79cf('0x1d')](handleEntityNotFound(_0x2fe7e5,null))[_0x79cf('0x1d')](respondWithResult(_0x2fe7e5,null))['catch'](handleError(_0x2fe7e5,null));};exports[_0x79cf('0x44')]=function(_0x2d0578,_0xdddbde){return db[_0x79cf('0x25')][_0x79cf('0x44')](_0x2d0578[_0x79cf('0x45')],{})['then'](respondWithResult(_0xdddbde,0xc9))['catch'](handleError(_0xdddbde,null));};exports[_0x79cf('0x1c')]=function(_0x32008d,_0x5389f4){if(_0x32008d['body']['id']){delete _0x32008d[_0x79cf('0x45')]['id'];}return db[_0x79cf('0x25')][_0x79cf('0x43')]({'where':{'id':_0x32008d[_0x79cf('0x46')]['id']}})[_0x79cf('0x1d')](handleEntityNotFound(_0x5389f4,null))['then'](saveUpdates(_0x32008d['body'],null))[_0x79cf('0x1d')](respondWithResult(_0x5389f4,null))[_0x79cf('0x41')](handleError(_0x5389f4,null));};exports[_0x79cf('0x1e')]=function(_0x25dca9,_0xc7415){return db['MailTransferReport'][_0x79cf('0x43')]({'where':{'id':_0x25dca9['params']['id']}})[_0x79cf('0x1d')](handleEntityNotFound(_0xc7415,null))[_0x79cf('0x1d')](removeEntity(_0xc7415,null))['catch'](handleError(_0xc7415,null));};exports[_0x79cf('0x47')]=function(_0x587cf4,_0x565908){return db['MailTransferReport']['describe']()[_0x79cf('0x1d')](respondWithResult(_0x565908,null))[_0x79cf('0x41')](handleError(_0x565908,null));};
\ No newline at end of file
index ce6f7dd..d08e54f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x85de=['uniqueid','lodash','util','../../config/logger','api','moment','bluebird','./mailTransferReport.attributes','exports','report_mail_transfer'];(function(_0x5f17c0,_0x4bd334){var _0x128c02=function(_0x3cdad7){while(--_0x3cdad7){_0x5f17c0['push'](_0x5f17c0['shift']());}};_0x128c02(++_0x4bd334);}(_0x85de,0x65));var _0xe85d=function(_0x197965,_0x38acbf){_0x197965=_0x197965-0x0;var _0x7222c6=_0x85de[_0x197965];return _0x7222c6;};'use strict';var _=require(_0xe85d('0x0'));var util=require(_0xe85d('0x1'));var logger=require(_0xe85d('0x2'))(_0xe85d('0x3'));var moment=require(_0xe85d('0x4'));var BPromise=require(_0xe85d('0x5'));var rp=require('request-promise');var attributes=require(_0xe85d('0x6'));module[_0xe85d('0x7')]=function(_0x2c4902,_0x5de80e){return _0x2c4902['define']('MailTransferReport',attributes,{'tableName':_0xe85d('0x8'),'paranoid':![],'indexes':[{'name':_0xe85d('0x9'),'fields':[_0xe85d('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x2c42=['lodash','util','../../config/logger','api','moment','./mailTransferReport.attributes','define','MailTransferReport','report_mail_transfer','uniqueid'];(function(_0x13b02f,_0x462a53){var _0x12e9a6=function(_0x187d57){while(--_0x187d57){_0x13b02f['push'](_0x13b02f['shift']());}};_0x12e9a6(++_0x462a53);}(_0x2c42,0x78));var _0x22c4=function(_0x5c659c,_0x20b0be){_0x5c659c=_0x5c659c-0x0;var _0x31decf=_0x2c42[_0x5c659c];return _0x31decf;};'use strict';var _=require(_0x22c4('0x0'));var util=require(_0x22c4('0x1'));var logger=require(_0x22c4('0x2'))(_0x22c4('0x3'));var moment=require(_0x22c4('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x22c4('0x5'));module['exports']=function(_0x2336d4,_0x5a60ca){return _0x2336d4[_0x22c4('0x6')](_0x22c4('0x7'),attributes,{'tableName':_0x22c4('0x8'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x22c4('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index f15dd47..baa61ec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa2ae=['rpc','jayson/promise','http','request','then','info','request\x20sent','MailTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','MailTransferReport,\x20%s,\x20%s','message','catch','lodash','util','moment','randomstring','../../config/logger'];(function(_0x44d88c,_0x4e0cb4){var _0x508da7=function(_0x464d98){while(--_0x464d98){_0x44d88c['push'](_0x44d88c['shift']());}};_0x508da7(++_0x4e0cb4);}(_0xa2ae,0x175));var _0xea2a=function(_0x416cdc,_0x213b87){_0x416cdc=_0x416cdc-0x0;var _0x1931ce=_0xa2ae[_0x416cdc];return _0x1931ce;};'use strict';var _=require(_0xea2a('0x0'));var util=require(_0xea2a('0x1'));var moment=require(_0xea2a('0x2'));var BPromise=require('bluebird');var rs=require(_0xea2a('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xea2a('0x4'))(_0xea2a('0x5'));var config=require('../../config/environment');var jayson=require(_0xea2a('0x6'));var client=jayson['client'][_0xea2a('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x2b9383,_0xd4ee15,_0x510828){return new BPromise(function(_0x461dd4,_0x1dbefd){return client[_0xea2a('0x8')](_0x2b9383,_0x510828)[_0xea2a('0x9')](function(_0x4a5a4e){logger[_0xea2a('0xa')]('MailTransferReport,\x20%s,\x20%s',_0xd4ee15,_0xea2a('0xb'));logger['debug'](_0xea2a('0xc'),_0xd4ee15,_0xea2a('0xb'),JSON[_0xea2a('0xd')](_0x4a5a4e));if(_0x4a5a4e[_0xea2a('0xe')]){if(_0x4a5a4e[_0xea2a('0xe')]['code']===0x1f4){logger[_0xea2a('0xe')](_0xea2a('0xf'),_0xd4ee15,_0x4a5a4e[_0xea2a('0xe')][_0xea2a('0x10')]);return _0x1dbefd(_0x4a5a4e[_0xea2a('0xe')][_0xea2a('0x10')]);}logger['error'](_0xea2a('0xf'),_0xd4ee15,_0x4a5a4e[_0xea2a('0xe')]['message']);return _0x461dd4(_0x4a5a4e[_0xea2a('0xe')][_0xea2a('0x10')]);}else{logger[_0xea2a('0xa')]('MailTransferReport,\x20%s,\x20%s',_0xd4ee15,'request\x20sent');_0x461dd4(_0x4a5a4e['result']['message']);}})[_0xea2a('0x11')](function(_0x2d574e){logger[_0xea2a('0xe')](_0xea2a('0xf'),_0xd4ee15,_0x2d574e);_0x1dbefd(_0x2d574e);});});}
\ No newline at end of file
+var _0x8b85=['client','request','then','MailTransferReport,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x38f737,_0x54f685){var _0x7afda3=function(_0x1ac1d7){while(--_0x1ac1d7){_0x38f737['push'](_0x38f737['shift']());}};_0x7afda3(++_0x54f685);}(_0x8b85,0x185));var _0x58b8=function(_0x3c0e33,_0x4e9903){_0x3c0e33=_0x3c0e33-0x0;var _0x48d10c=_0x8b85[_0x3c0e33];return _0x48d10c;};'use strict';var _=require(_0x58b8('0x0'));var util=require(_0x58b8('0x1'));var moment=require(_0x58b8('0x2'));var BPromise=require('bluebird');var rs=require(_0x58b8('0x3'));var fs=require('fs');var db=require(_0x58b8('0x4'))['db'];var utils=require(_0x58b8('0x5'));var logger=require(_0x58b8('0x6'))(_0x58b8('0x7'));var config=require(_0x58b8('0x8'));var jayson=require(_0x58b8('0x9'));var client=jayson[_0x58b8('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x9a2506,_0x53640e,_0x785c2b){return new BPromise(function(_0x4931b8,_0x518673){return client[_0x58b8('0xb')](_0x9a2506,_0x785c2b)[_0x58b8('0xc')](function(_0x11f865){logger['info'](_0x58b8('0xd'),_0x53640e,_0x58b8('0xe'));logger['debug']('MailTransferReport,\x20%s,\x20%s,\x20%s',_0x53640e,_0x58b8('0xe'),JSON[_0x58b8('0xf')](_0x11f865));if(_0x11f865['error']){if(_0x11f865[_0x58b8('0x10')][_0x58b8('0x11')]===0x1f4){logger[_0x58b8('0x10')](_0x58b8('0xd'),_0x53640e,_0x11f865[_0x58b8('0x10')]['message']);return _0x518673(_0x11f865['error'][_0x58b8('0x12')]);}logger[_0x58b8('0x10')]('MailTransferReport,\x20%s,\x20%s',_0x53640e,_0x11f865[_0x58b8('0x10')]['message']);return _0x4931b8(_0x11f865[_0x58b8('0x10')][_0x58b8('0x12')]);}else{logger['info'](_0x58b8('0xd'),_0x53640e,'request\x20sent');_0x4931b8(_0x11f865['result'][_0x58b8('0x12')]);}})['catch'](function(_0x4a6e17){logger[_0x58b8('0x10')](_0x58b8('0xd'),_0x53640e,_0x4a6e17);_0x518673(_0x4a6e17);});});}
\ No newline at end of file
index 3b0dd83..38126ba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf18f=['show','post','create','put','update','destroy','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','./memberReport.controller','get','isAuthenticated','index','describe','/:id'];(function(_0x4a1270,_0x220ff4){var _0x2be94e=function(_0x3957dc){while(--_0x3957dc){_0x4a1270['push'](_0x4a1270['shift']());}};_0x2be94e(++_0x220ff4);}(_0xf18f,0x137));var _0xff18=function(_0x17b4c6,_0x10eb82){_0x17b4c6=_0x17b4c6-0x0;var _0x352f25=_0xf18f[_0x17b4c6];return _0x352f25;};'use strict';var multer=require(_0xff18('0x0'));var util=require(_0xff18('0x1'));var path=require('path');var express=require(_0xff18('0x2'));var router=express[_0xff18('0x3')]();var auth=require(_0xff18('0x4'));var interaction=require(_0xff18('0x5'));var config=require('../../config/environment');var controller=require(_0xff18('0x6'));router[_0xff18('0x7')]('/',auth[_0xff18('0x8')](),controller[_0xff18('0x9')]);router['get']('/describe',auth[_0xff18('0x8')](),controller[_0xff18('0xa')]);router['get'](_0xff18('0xb'),auth[_0xff18('0x8')](),controller[_0xff18('0xc')]);router[_0xff18('0xd')]('/',auth['isAuthenticated'](),controller[_0xff18('0xe')]);router[_0xff18('0xf')]('/:id',auth[_0xff18('0x8')](),controller[_0xff18('0x10')]);router['delete']('/:id',auth[_0xff18('0x8')](),controller[_0xff18('0x11')]);module[_0xff18('0x12')]=router;
\ No newline at end of file
+var _0xd2c0=['exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./memberReport.controller','isAuthenticated','index','/describe','describe','get','/:id','create','put','delete'];(function(_0x2c91e9,_0x2fb965){var _0x13f0ff=function(_0xb39edf){while(--_0xb39edf){_0x2c91e9['push'](_0x2c91e9['shift']());}};_0x13f0ff(++_0x2fb965);}(_0xd2c0,0x17b));var _0x0d2c=function(_0xac5e6f,_0x4ed655){_0xac5e6f=_0xac5e6f-0x0;var _0x1cf3c7=_0xd2c0[_0xac5e6f];return _0x1cf3c7;};'use strict';var multer=require(_0x0d2c('0x0'));var util=require(_0x0d2c('0x1'));var path=require('path');var express=require(_0x0d2c('0x2'));var router=express[_0x0d2c('0x3')]();var auth=require(_0x0d2c('0x4'));var interaction=require(_0x0d2c('0x5'));var config=require(_0x0d2c('0x6'));var controller=require(_0x0d2c('0x7'));router['get']('/',auth[_0x0d2c('0x8')](),controller[_0x0d2c('0x9')]);router['get'](_0x0d2c('0xa'),auth[_0x0d2c('0x8')](),controller[_0x0d2c('0xb')]);router[_0x0d2c('0xc')](_0x0d2c('0xd'),auth[_0x0d2c('0x8')](),controller['show']);router['post']('/',auth['isAuthenticated'](),controller[_0x0d2c('0xe')]);router[_0x0d2c('0xf')](_0x0d2c('0xd'),auth[_0x0d2c('0x8')](),controller['update']);router[_0x0d2c('0x10')](_0x0d2c('0xd'),auth[_0x0d2c('0x8')](),controller['destroy']);module[_0x0d2c('0x11')]=router;
\ No newline at end of file
index 8680e40..54c8267 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd71e=['DEFAULT\x20PAUSE','LOGIN,\x20PAUSE,\x20TALKING','INTEGER','DATE','getDataValue','enterAt','diff','seconds','exitAt','setDataValue','duration','talk:[inbound,\x20outbound],\x20pause:[reason]','talk:[destination]','talk:[dial\x20string]','sequelize','STRING'];(function(_0x1b78e9,_0x47847c){var _0x4f5011=function(_0x32f50){while(--_0x32f50){_0x1b78e9['push'](_0x1b78e9['shift']());}};_0x4f5011(++_0x47847c);}(_0xd71e,0x12e));var _0xed71=function(_0x4cbf20,_0x1bfa66){_0x4cbf20=_0x4cbf20-0x0;var _0x582ae4=_0xd71e[_0x4cbf20];return _0x582ae4;};'use strict';var Sequelize=require(_0xed71('0x0'));var moment=require('moment');module['exports']={'channel':{'type':Sequelize[_0xed71('0x1')]},'membername':{'type':Sequelize['STRING']},'interface':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0xed71('0x1')],'defaultValue':_0xed71('0x2'),'comment':_0xed71('0x3')},'duration':{'type':Sequelize[_0xed71('0x4')]},'enterAt':{'type':Sequelize[_0xed71('0x5')]},'exitAt':{'type':Sequelize['DATE'],'set':function(_0x270804){var _0x4739a0=moment(_0x270804);var _0x1d5765=moment(this[_0xed71('0x6')](_0xed71('0x7')));var _0x2206db=_0x4739a0[_0xed71('0x8')](_0x1d5765,_0xed71('0x9'));this['setDataValue'](_0xed71('0xa'),_0x270804);this[_0xed71('0xb')](_0xed71('0xc'),_0x2206db||null);}},'data1':{'type':Sequelize[_0xed71('0x1')],'comment':_0xed71('0xd')},'data2':{'type':Sequelize['STRING'],'comment':'talk:[start]'},'data3':{'type':Sequelize[_0xed71('0x1')],'comment':_0xed71('0xe')},'data4':{'type':Sequelize['STRING'],'comment':_0xed71('0xf')},'data5':{'type':Sequelize[_0xed71('0x1')],'comment':'talk:[queue]'},'role':{'type':Sequelize[_0xed71('0x1')]},'internal':{'type':Sequelize[_0xed71('0x4')]},'uniqueid':{'type':Sequelize[_0xed71('0x1')]}};
\ No newline at end of file
+var _0x90eb=['INTEGER','DATE','getDataValue','diff','setDataValue','exitAt','talk:[inbound,\x20outbound],\x20pause:[reason]','talk:[destination]','talk:[dial\x20string]','talk:[queue]','sequelize','moment','exports','STRING','LOGIN,\x20PAUSE,\x20TALKING'];(function(_0x1bfe58,_0xa4cfaf){var _0x15b87e=function(_0x46a71e){while(--_0x46a71e){_0x1bfe58['push'](_0x1bfe58['shift']());}};_0x15b87e(++_0xa4cfaf);}(_0x90eb,0x82));var _0xb90e=function(_0x2a4d5a,_0x4d5f44){_0x2a4d5a=_0x2a4d5a-0x0;var _0x262c53=_0x90eb[_0x2a4d5a];return _0x262c53;};'use strict';var Sequelize=require(_0xb90e('0x0'));var moment=require(_0xb90e('0x1'));module[_0xb90e('0x2')]={'channel':{'type':Sequelize['STRING']},'membername':{'type':Sequelize[_0xb90e('0x3')]},'interface':{'type':Sequelize[_0xb90e('0x3')]},'type':{'type':Sequelize[_0xb90e('0x3')],'defaultValue':'DEFAULT\x20PAUSE','comment':_0xb90e('0x4')},'duration':{'type':Sequelize[_0xb90e('0x5')]},'enterAt':{'type':Sequelize[_0xb90e('0x6')]},'exitAt':{'type':Sequelize[_0xb90e('0x6')],'set':function(_0x3914fc){var _0x1a39d3=moment(_0x3914fc);var _0xd89d7f=moment(this[_0xb90e('0x7')]('enterAt'));var _0x320c75=_0x1a39d3[_0xb90e('0x8')](_0xd89d7f,'seconds');this[_0xb90e('0x9')](_0xb90e('0xa'),_0x3914fc);this[_0xb90e('0x9')]('duration',_0x320c75||null);}},'data1':{'type':Sequelize[_0xb90e('0x3')],'comment':_0xb90e('0xb')},'data2':{'type':Sequelize[_0xb90e('0x3')],'comment':'talk:[start]'},'data3':{'type':Sequelize['STRING'],'comment':_0xb90e('0xc')},'data4':{'type':Sequelize[_0xb90e('0x3')],'comment':_0xb90e('0xd')},'data5':{'type':Sequelize[_0xb90e('0x3')],'comment':_0xb90e('0xe')},'role':{'type':Sequelize[_0xb90e('0x3')]},'internal':{'type':Sequelize[_0xb90e('0x5')]},'uniqueid':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 63405c5..e74daba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc00d=['params','rawAttributes','intersection','length','find','create','body','describe','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','jsforce','querystring','../../components/parsers/qs','../../config/logger','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','then','destroy','stack','name','send','index','MemberReport','keys','query','dateStart','dateEnd','filters','model','attributes','fields','nolimit','order','sort','pick','add','day','merge','filter','where','options','includeAll','include','findAll','rows','catch','show'];(function(_0x45e6e1,_0x171507){var _0x33dd3c=function(_0x12e23d){while(--_0x12e23d){_0x45e6e1['push'](_0x45e6e1['shift']());}};_0x33dd3c(++_0x171507);}(_0xc00d,0xce));var _0xdc00=function(_0x213957,_0x2324a){_0x213957=_0x213957-0x0;var _0x61b729=_0xc00d[_0x213957];return _0x61b729;};'use strict';var jsonpatch=require(_0xdc00('0x0'));var rp=require('request-promise');var moment=require(_0xdc00('0x1'));var BPromise=require(_0xdc00('0x2'));var Mustache=require(_0xdc00('0x3'));var util=require(_0xdc00('0x4'));var path=require(_0xdc00('0x5'));var sox=require(_0xdc00('0x6'));var csv=require(_0xdc00('0x7'));var ejs=require(_0xdc00('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0xdc00('0x9'));var crypto=require('crypto');var jsforce=require(_0xdc00('0xa'));var deskjs=require('desk.js');var toCsv=require(_0xdc00('0x7'));var querystring=require(_0xdc00('0xb'));var Papa=require('papaparse');var qs=require(_0xdc00('0xc'));var logger=require(_0xdc00('0xd'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xdc00('0xe'))['db'];function respondWithStatusCode(_0x522119,_0x3aa28f){_0x3aa28f=_0x3aa28f||0xcc;return function(_0x2fa041){if(_0x2fa041){return _0x522119[_0xdc00('0xf')](_0x3aa28f);}return _0x522119[_0xdc00('0x10')](_0x3aa28f)[_0xdc00('0x11')]();};}function respondWithResult(_0x57b458,_0x181d8d){_0x181d8d=_0x181d8d||0xc8;return function(_0x4816e2){if(_0x4816e2){return _0x57b458[_0xdc00('0x10')](_0x181d8d)[_0xdc00('0x12')](_0x4816e2);}};}function respondWithFilteredResult(_0x199059,_0x3639f6){return function(_0x3cc58c){if(_0x3cc58c){var _0x436298=_0x3cc58c[_0xdc00('0x13')],_0x24b89f=_0x3639f6['offset'],_0x54d7b5=_0x3639f6[_0xdc00('0x14')]+_0x3639f6[_0xdc00('0x15')],_0x2b8f03;if(_0x54d7b5>=_0x436298){_0x54d7b5=_0x436298;_0x2b8f03=0xc8;}else{_0x2b8f03=0xce;}_0x199059[_0xdc00('0x10')](_0x2b8f03);return _0x199059[_0xdc00('0x16')]('Content-Range',_0x24b89f+'-'+_0x54d7b5+'/'+_0x436298)['json'](_0x3cc58c);}return null;};}function patchUpdates(_0x5b4896){return function(_0x59b008){try{jsonpatch[_0xdc00('0x17')](_0x59b008,_0x5b4896,!![]);}catch(_0x21eb99){return BPromise[_0xdc00('0x18')](_0x21eb99);}return _0x59b008[_0xdc00('0x19')]();};}function saveUpdates(_0x14c795,_0x4a73c7){return function(_0x561f22){if(_0x561f22){return _0x561f22[_0xdc00('0x1a')](_0x14c795)[_0xdc00('0x1b')](function(_0x2ee29a){return _0x2ee29a;});}return null;};}function removeEntity(_0x5f09bb,_0x5b4c6f){return function(_0x3e9446){if(_0x3e9446){return _0x3e9446[_0xdc00('0x1c')]()[_0xdc00('0x1b')](function(){_0x5f09bb[_0xdc00('0x10')](0xcc)[_0xdc00('0x11')]();});}};}function handleEntityNotFound(_0x194c9a,_0x1c70be){return function(_0x27c998){if(!_0x27c998){_0x194c9a[_0xdc00('0xf')](0x194);}return _0x27c998;};}function handleError(_0x548926,_0x325a5e){_0x325a5e=_0x325a5e||0x1f4;return function(_0x459a4f){logger['error'](_0x459a4f[_0xdc00('0x1d')]);if(_0x459a4f[_0xdc00('0x1e')]){delete _0x459a4f['name'];}_0x548926[_0xdc00('0x10')](_0x325a5e)[_0xdc00('0x1f')](_0x459a4f);};}exports[_0xdc00('0x20')]=function(_0x2d4349,_0x3138d4){var _0x38f6ca={},_0x341933={},_0x47f97d={'count':0x0,'rows':[]};var _0x182c51=db[_0xdc00('0x21')]['rawAttributes'];_0x341933['model']=_[_0xdc00('0x22')](_0x182c51);var _0x408e16={'dateStart':_0x2d4349[_0xdc00('0x23')][_0xdc00('0x24')],'dateEnd':_0x2d4349['query'][_0xdc00('0x25')]};delete _0x2d4349[_0xdc00('0x23')]['dateStart'];delete _0x2d4349['query'][_0xdc00('0x25')];_0x341933[_0xdc00('0x23')]=_[_0xdc00('0x22')](_0x2d4349[_0xdc00('0x23')]);_0x341933[_0xdc00('0x26')]=_['intersection'](_0x341933[_0xdc00('0x27')],_0x341933['query']);_0x38f6ca[_0xdc00('0x28')]=_['intersection'](_0x341933['model'],qs['fields'](_0x2d4349[_0xdc00('0x23')][_0xdc00('0x29')]));_0x38f6ca[_0xdc00('0x28')]=_0x38f6ca[_0xdc00('0x28')]['length']?_0x38f6ca[_0xdc00('0x28')]:_0x341933[_0xdc00('0x27')];if(!_0x2d4349['query']['hasOwnProperty'](_0xdc00('0x2a'))){_0x38f6ca[_0xdc00('0x15')]=qs[_0xdc00('0x15')](_0x2d4349['query'][_0xdc00('0x15')]);_0x38f6ca[_0xdc00('0x14')]=qs[_0xdc00('0x14')](_0x2d4349[_0xdc00('0x23')][_0xdc00('0x14')]);}_0x38f6ca[_0xdc00('0x2b')]=qs['sort'](_0x2d4349[_0xdc00('0x23')][_0xdc00('0x2c')]);_0x38f6ca['where']=qs[_0xdc00('0x26')](_[_0xdc00('0x2d')](_0x2d4349[_0xdc00('0x23')],_0x341933['filters']));if(_0x408e16[_0xdc00('0x24')]){if(_0x408e16[_0xdc00('0x25')]){_0x408e16[_0xdc00('0x25')]=moment(_0x408e16[_0xdc00('0x25')])[_0xdc00('0x2e')](0x1,_0xdc00('0x2f'));}else{_0x408e16['dateEnd']=moment(_0x408e16[_0xdc00('0x24')])['add'](0x1,_0xdc00('0x2f'));}_[_0xdc00('0x30')](_0x38f6ca['where'],{'createdAt':{'$gte':_0x408e16[_0xdc00('0x24')],'$lte':_0x408e16[_0xdc00('0x25')]}});}if(_0x2d4349[_0xdc00('0x23')][_0xdc00('0x31')]){_0x38f6ca[_0xdc00('0x32')]=_[_0xdc00('0x30')](_0x38f6ca['where'],{'$or':_['map'](_0x38f6ca[_0xdc00('0x28')],function(_0x22b967){var _0x4f2744={};_0x4f2744[_0x22b967]={'$like':'%'+_0x2d4349[_0xdc00('0x23')][_0xdc00('0x31')]+'%'};return _0x4f2744;})});}_0x38f6ca=_['merge']({},_0x38f6ca,_0x2d4349[_0xdc00('0x33')]);var _0x1f50b8={'where':_0x38f6ca[_0xdc00('0x32')]};return db['MemberReport']['count'](_0x1f50b8)[_0xdc00('0x1b')](function(_0x398d06){_0x47f97d['count']=_0x398d06;if(_0x2d4349['query'][_0xdc00('0x34')]){_0x38f6ca[_0xdc00('0x35')]=[{'all':!![]}];}return db[_0xdc00('0x21')][_0xdc00('0x36')](_0x38f6ca);})['then'](function(_0x15d1e7){_0x47f97d[_0xdc00('0x37')]=_0x15d1e7;return _0x47f97d;})['then'](respondWithFilteredResult(_0x3138d4,_0x38f6ca))[_0xdc00('0x38')](handleError(_0x3138d4,null));};exports[_0xdc00('0x39')]=function(_0x5eb8de,_0x3749b3){var _0x22260c={'raw':!![],'where':{'id':_0x5eb8de[_0xdc00('0x3a')]['id']}},_0x1285c7={};_0x1285c7[_0xdc00('0x27')]=_['keys'](db[_0xdc00('0x21')][_0xdc00('0x3b')]);_0x1285c7[_0xdc00('0x23')]=_[_0xdc00('0x22')](_0x5eb8de[_0xdc00('0x23')]);_0x1285c7[_0xdc00('0x26')]=_['intersection'](_0x1285c7[_0xdc00('0x27')],_0x1285c7[_0xdc00('0x23')]);_0x22260c[_0xdc00('0x28')]=_[_0xdc00('0x3c')](_0x1285c7[_0xdc00('0x27')],qs[_0xdc00('0x29')](_0x5eb8de['query'][_0xdc00('0x29')]));_0x22260c[_0xdc00('0x28')]=_0x22260c[_0xdc00('0x28')][_0xdc00('0x3d')]?_0x22260c[_0xdc00('0x28')]:_0x1285c7[_0xdc00('0x27')];if(_0x5eb8de[_0xdc00('0x23')][_0xdc00('0x34')]){_0x22260c[_0xdc00('0x35')]=[{'all':!![]}];}_0x22260c=_[_0xdc00('0x30')]({},_0x22260c,_0x5eb8de[_0xdc00('0x33')]);return db[_0xdc00('0x21')][_0xdc00('0x3e')](_0x22260c)[_0xdc00('0x1b')](handleEntityNotFound(_0x3749b3,null))[_0xdc00('0x1b')](respondWithResult(_0x3749b3,null))['catch'](handleError(_0x3749b3,null));};exports[_0xdc00('0x3f')]=function(_0x16401d,_0x338233){return db['MemberReport'][_0xdc00('0x3f')](_0x16401d[_0xdc00('0x40')],{})['then'](respondWithResult(_0x338233,0xc9))[_0xdc00('0x38')](handleError(_0x338233,null));};exports[_0xdc00('0x1a')]=function(_0x54725e,_0x2bead5){if(_0x54725e[_0xdc00('0x40')]['id']){delete _0x54725e[_0xdc00('0x40')]['id'];}return db[_0xdc00('0x21')][_0xdc00('0x3e')]({'where':{'id':_0x54725e['params']['id']}})['then'](handleEntityNotFound(_0x2bead5,null))['then'](saveUpdates(_0x54725e[_0xdc00('0x40')],null))[_0xdc00('0x1b')](respondWithResult(_0x2bead5,null))['catch'](handleError(_0x2bead5,null));};exports[_0xdc00('0x1c')]=function(_0x3dd960,_0x153c1f){return db['MemberReport'][_0xdc00('0x3e')]({'where':{'id':_0x3dd960['params']['id']}})[_0xdc00('0x1b')](handleEntityNotFound(_0x153c1f,null))['then'](removeEntity(_0x153c1f,null))['catch'](handleError(_0x153c1f,null));};exports[_0xdc00('0x41')]=function(_0x2d0701,_0x5f3ab0){return db['MemberReport'][_0xdc00('0x41')]()[_0xdc00('0x1b')](respondWithResult(_0x5f3ab0,null))['catch'](handleError(_0x5f3ab0,null));};
\ No newline at end of file
+var _0x7fc8=['status','end','json','count','offset','limit','set','apply','save','then','destroy','sendStatus','error','stack','name','send','index','MemberReport','model','dateStart','query','dateEnd','intersection','attributes','fields','length','hasOwnProperty','order','sort','filters','add','day','where','filter','merge','map','options','include','rows','params','includeAll','find','catch','create','body','describe','fast-json-patch','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','api','../../config/utils','../../config/environment','../../mysqldb'];(function(_0x1d30d3,_0x9f7c10){var _0x48914e=function(_0x393f3f){while(--_0x393f3f){_0x1d30d3['push'](_0x1d30d3['shift']());}};_0x48914e(++_0x9f7c10);}(_0x7fc8,0x6e));var _0x87fc=function(_0x1a84b1,_0x3ca6d8){_0x1a84b1=_0x1a84b1-0x0;var _0x161938=_0x7fc8[_0x1a84b1];return _0x161938;};'use strict';var jsonpatch=require(_0x87fc('0x0'));var rp=require(_0x87fc('0x1'));var moment=require(_0x87fc('0x2'));var BPromise=require(_0x87fc('0x3'));var Mustache=require(_0x87fc('0x4'));var util=require('util');var path=require('path');var sox=require(_0x87fc('0x5'));var csv=require(_0x87fc('0x6'));var ejs=require(_0x87fc('0x7'));var fs=require('fs');var _=require(_0x87fc('0x8'));var squel=require(_0x87fc('0x9'));var crypto=require(_0x87fc('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x87fc('0xb'));var toCsv=require(_0x87fc('0x6'));var querystring=require(_0x87fc('0xc'));var Papa=require(_0x87fc('0xd'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x87fc('0xe'));var utils=require(_0x87fc('0xf'));var config=require(_0x87fc('0x10'));var db=require(_0x87fc('0x11'))['db'];function respondWithStatusCode(_0x52f48a,_0x8c29db){_0x8c29db=_0x8c29db||0xcc;return function(_0x2e2fdd){if(_0x2e2fdd){return _0x52f48a['sendStatus'](_0x8c29db);}return _0x52f48a[_0x87fc('0x12')](_0x8c29db)[_0x87fc('0x13')]();};}function respondWithResult(_0x3882d6,_0x280684){_0x280684=_0x280684||0xc8;return function(_0x3d22b4){if(_0x3d22b4){return _0x3882d6[_0x87fc('0x12')](_0x280684)[_0x87fc('0x14')](_0x3d22b4);}};}function respondWithFilteredResult(_0x5eb07f,_0x5622a5){return function(_0x15db46){if(_0x15db46){var _0x1ff95c=_0x15db46[_0x87fc('0x15')],_0x263305=_0x5622a5[_0x87fc('0x16')],_0x3de5f7=_0x5622a5['offset']+_0x5622a5[_0x87fc('0x17')],_0x2d1ed5;if(_0x3de5f7>=_0x1ff95c){_0x3de5f7=_0x1ff95c;_0x2d1ed5=0xc8;}else{_0x2d1ed5=0xce;}_0x5eb07f['status'](_0x2d1ed5);return _0x5eb07f[_0x87fc('0x18')]('Content-Range',_0x263305+'-'+_0x3de5f7+'/'+_0x1ff95c)['json'](_0x15db46);}return null;};}function patchUpdates(_0x59b4b9){return function(_0x6d5405){try{jsonpatch[_0x87fc('0x19')](_0x6d5405,_0x59b4b9,!![]);}catch(_0x48c359){return BPromise['reject'](_0x48c359);}return _0x6d5405[_0x87fc('0x1a')]();};}function saveUpdates(_0x38e98b,_0xfc737a){return function(_0x45e633){if(_0x45e633){return _0x45e633['update'](_0x38e98b)[_0x87fc('0x1b')](function(_0x34db8e){return _0x34db8e;});}return null;};}function removeEntity(_0x3e0038,_0x32d539){return function(_0x569ed7){if(_0x569ed7){return _0x569ed7[_0x87fc('0x1c')]()['then'](function(){_0x3e0038['status'](0xcc)[_0x87fc('0x13')]();});}};}function handleEntityNotFound(_0x53c4d5,_0x540d5a){return function(_0x33fac4){if(!_0x33fac4){_0x53c4d5[_0x87fc('0x1d')](0x194);}return _0x33fac4;};}function handleError(_0x2424d1,_0x33e921){_0x33e921=_0x33e921||0x1f4;return function(_0x16a41e){logger[_0x87fc('0x1e')](_0x16a41e[_0x87fc('0x1f')]);if(_0x16a41e[_0x87fc('0x20')]){delete _0x16a41e['name'];}_0x2424d1[_0x87fc('0x12')](_0x33e921)[_0x87fc('0x21')](_0x16a41e);};}exports[_0x87fc('0x22')]=function(_0x49c51f,_0x2b3be8){var _0x56aa1e={},_0x140fec={},_0x1bf51c={'count':0x0,'rows':[]};var _0x2a186c=db[_0x87fc('0x23')]['rawAttributes'];_0x140fec[_0x87fc('0x24')]=_['keys'](_0x2a186c);var _0x1668fc={'dateStart':_0x49c51f['query'][_0x87fc('0x25')],'dateEnd':_0x49c51f[_0x87fc('0x26')][_0x87fc('0x27')]};delete _0x49c51f[_0x87fc('0x26')]['dateStart'];delete _0x49c51f['query'][_0x87fc('0x27')];_0x140fec['query']=_['keys'](_0x49c51f[_0x87fc('0x26')]);_0x140fec['filters']=_[_0x87fc('0x28')](_0x140fec[_0x87fc('0x24')],_0x140fec['query']);_0x56aa1e[_0x87fc('0x29')]=_[_0x87fc('0x28')](_0x140fec[_0x87fc('0x24')],qs[_0x87fc('0x2a')](_0x49c51f[_0x87fc('0x26')]['fields']));_0x56aa1e[_0x87fc('0x29')]=_0x56aa1e[_0x87fc('0x29')][_0x87fc('0x2b')]?_0x56aa1e[_0x87fc('0x29')]:_0x140fec['model'];if(!_0x49c51f[_0x87fc('0x26')][_0x87fc('0x2c')]('nolimit')){_0x56aa1e[_0x87fc('0x17')]=qs[_0x87fc('0x17')](_0x49c51f['query'][_0x87fc('0x17')]);_0x56aa1e[_0x87fc('0x16')]=qs['offset'](_0x49c51f[_0x87fc('0x26')]['offset']);}_0x56aa1e[_0x87fc('0x2d')]=qs[_0x87fc('0x2e')](_0x49c51f[_0x87fc('0x26')][_0x87fc('0x2e')]);_0x56aa1e['where']=qs[_0x87fc('0x2f')](_['pick'](_0x49c51f[_0x87fc('0x26')],_0x140fec[_0x87fc('0x2f')]));if(_0x1668fc[_0x87fc('0x25')]){if(_0x1668fc[_0x87fc('0x27')]){_0x1668fc[_0x87fc('0x27')]=moment(_0x1668fc['dateEnd'])[_0x87fc('0x30')](0x1,_0x87fc('0x31'));}else{_0x1668fc['dateEnd']=moment(_0x1668fc[_0x87fc('0x25')])[_0x87fc('0x30')](0x1,_0x87fc('0x31'));}_['merge'](_0x56aa1e[_0x87fc('0x32')],{'createdAt':{'$gte':_0x1668fc['dateStart'],'$lte':_0x1668fc['dateEnd']}});}if(_0x49c51f[_0x87fc('0x26')][_0x87fc('0x33')]){_0x56aa1e[_0x87fc('0x32')]=_[_0x87fc('0x34')](_0x56aa1e['where'],{'$or':_[_0x87fc('0x35')](_0x56aa1e[_0x87fc('0x29')],function(_0x22e64f){var _0x355ca9={};_0x355ca9[_0x22e64f]={'$like':'%'+_0x49c51f[_0x87fc('0x26')][_0x87fc('0x33')]+'%'};return _0x355ca9;})});}_0x56aa1e=_['merge']({},_0x56aa1e,_0x49c51f[_0x87fc('0x36')]);var _0x5d27d2={'where':_0x56aa1e[_0x87fc('0x32')]};return db['MemberReport'][_0x87fc('0x15')](_0x5d27d2)[_0x87fc('0x1b')](function(_0x415d3b){_0x1bf51c[_0x87fc('0x15')]=_0x415d3b;if(_0x49c51f['query']['includeAll']){_0x56aa1e[_0x87fc('0x37')]=[{'all':!![]}];}return db['MemberReport']['findAll'](_0x56aa1e);})['then'](function(_0x337ced){_0x1bf51c[_0x87fc('0x38')]=_0x337ced;return _0x1bf51c;})[_0x87fc('0x1b')](respondWithFilteredResult(_0x2b3be8,_0x56aa1e))['catch'](handleError(_0x2b3be8,null));};exports['show']=function(_0x436ead,_0x28e98c){var _0x1a9b42={'raw':!![],'where':{'id':_0x436ead[_0x87fc('0x39')]['id']}},_0x5db36a={};_0x5db36a['model']=_['keys'](db[_0x87fc('0x23')]['rawAttributes']);_0x5db36a['query']=_['keys'](_0x436ead[_0x87fc('0x26')]);_0x5db36a[_0x87fc('0x2f')]=_[_0x87fc('0x28')](_0x5db36a['model'],_0x5db36a['query']);_0x1a9b42[_0x87fc('0x29')]=_[_0x87fc('0x28')](_0x5db36a[_0x87fc('0x24')],qs[_0x87fc('0x2a')](_0x436ead[_0x87fc('0x26')][_0x87fc('0x2a')]));_0x1a9b42[_0x87fc('0x29')]=_0x1a9b42['attributes'][_0x87fc('0x2b')]?_0x1a9b42['attributes']:_0x5db36a[_0x87fc('0x24')];if(_0x436ead['query'][_0x87fc('0x3a')]){_0x1a9b42[_0x87fc('0x37')]=[{'all':!![]}];}_0x1a9b42=_[_0x87fc('0x34')]({},_0x1a9b42,_0x436ead[_0x87fc('0x36')]);return db[_0x87fc('0x23')][_0x87fc('0x3b')](_0x1a9b42)['then'](handleEntityNotFound(_0x28e98c,null))[_0x87fc('0x1b')](respondWithResult(_0x28e98c,null))[_0x87fc('0x3c')](handleError(_0x28e98c,null));};exports[_0x87fc('0x3d')]=function(_0x1abeb6,_0x154c62){return db[_0x87fc('0x23')][_0x87fc('0x3d')](_0x1abeb6[_0x87fc('0x3e')],{})[_0x87fc('0x1b')](respondWithResult(_0x154c62,0xc9))[_0x87fc('0x3c')](handleError(_0x154c62,null));};exports['update']=function(_0xb22fdc,_0x4cd9f2){if(_0xb22fdc[_0x87fc('0x3e')]['id']){delete _0xb22fdc[_0x87fc('0x3e')]['id'];}return db[_0x87fc('0x23')][_0x87fc('0x3b')]({'where':{'id':_0xb22fdc[_0x87fc('0x39')]['id']}})[_0x87fc('0x1b')](handleEntityNotFound(_0x4cd9f2,null))[_0x87fc('0x1b')](saveUpdates(_0xb22fdc['body'],null))[_0x87fc('0x1b')](respondWithResult(_0x4cd9f2,null))[_0x87fc('0x3c')](handleError(_0x4cd9f2,null));};exports[_0x87fc('0x1c')]=function(_0x2c5192,_0x195d00){return db[_0x87fc('0x23')]['find']({'where':{'id':_0x2c5192['params']['id']}})[_0x87fc('0x1b')](handleEntityNotFound(_0x195d00,null))['then'](removeEntity(_0x195d00,null))[_0x87fc('0x3c')](handleError(_0x195d00,null));};exports[_0x87fc('0x3f')]=function(_0x49e3bf,_0x34b96e){return db['MemberReport'][_0x87fc('0x3f')]()[_0x87fc('0x1b')](respondWithResult(_0x34b96e,null))[_0x87fc('0x3c')](handleError(_0x34b96e,null));};
\ No newline at end of file
index 62e9871..3577776 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc89c=['MemberReport','report_member','membername','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./memberReport.attributes','define'];(function(_0xdd0313,_0x251c2b){var _0x2bd7e8=function(_0x340f1f){while(--_0x340f1f){_0xdd0313['push'](_0xdd0313['shift']());}};_0x2bd7e8(++_0x251c2b);}(_0xc89c,0x13b));var _0xcc89=function(_0x474787,_0x4cf5a4){_0x474787=_0x474787-0x0;var _0x5ae603=_0xc89c[_0x474787];return _0x5ae603;};'use strict';var _=require(_0xcc89('0x0'));var util=require(_0xcc89('0x1'));var logger=require(_0xcc89('0x2'))(_0xcc89('0x3'));var moment=require(_0xcc89('0x4'));var BPromise=require(_0xcc89('0x5'));var rp=require(_0xcc89('0x6'));var attributes=require(_0xcc89('0x7'));module['exports']=function(_0x4abd96,_0x13f249){return _0x4abd96[_0xcc89('0x8')](_0xcc89('0x9'),attributes,{'tableName':_0xcc89('0xa'),'paranoid':![],'indexes':[{'name':'membername_interface','fields':[_0xcc89('0xb'),'interface']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x0fb1=['../../config/logger','api','moment','bluebird','request-promise','./memberReport.attributes','exports','define','membername_interface','membername','lodash','util'];(function(_0x569196,_0x3d06e0){var _0x5cad09=function(_0x3b34d6){while(--_0x3b34d6){_0x569196['push'](_0x569196['shift']());}};_0x5cad09(++_0x3d06e0);}(_0x0fb1,0x106));var _0x10fb=function(_0x3e17ab,_0x163672){_0x3e17ab=_0x3e17ab-0x0;var _0x26362b=_0x0fb1[_0x3e17ab];return _0x26362b;};'use strict';var _=require(_0x10fb('0x0'));var util=require(_0x10fb('0x1'));var logger=require(_0x10fb('0x2'))(_0x10fb('0x3'));var moment=require(_0x10fb('0x4'));var BPromise=require(_0x10fb('0x5'));var rp=require(_0x10fb('0x6'));var attributes=require(_0x10fb('0x7'));module[_0x10fb('0x8')]=function(_0x5d27f0,_0xd96686){return _0x5d27f0[_0x10fb('0x9')]('MemberReport',attributes,{'tableName':'report_member','paranoid':![],'indexes':[{'name':_0x10fb('0xa'),'fields':[_0x10fb('0xb'),'interface']}],'timestamps':!![]});};
\ No newline at end of file
index dc1bd54..acd8aff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c44=['attributes','limit','include','map','model','debug','CreateMemberReport','create','body','UpdateMemberReport','update','util','moment','bluebird','rpc','jayson/promise','client','http','then','info','MemberReport,\x20%s,\x20%s','request\x20sent','MemberReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','GetMemberReport','MemberReport','findAll','options','raw','where'];(function(_0x4fa839,_0x23ddba){var _0x5e3758=function(_0x2be8b3){while(--_0x2be8b3){_0x4fa839['push'](_0x4fa839['shift']());}};_0x5e3758(++_0x23ddba);}(_0x1c44,0x1e7));var _0x41c4=function(_0x41da4c,_0x325a61){_0x41da4c=_0x41da4c-0x0;var _0x33e8b7=_0x1c44[_0x41da4c];return _0x33e8b7;};'use strict';var _=require('lodash');var util=require(_0x41c4('0x0'));var moment=require(_0x41c4('0x1'));var BPromise=require(_0x41c4('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x41c4('0x3'));var config=require('../../config/environment');var jayson=require(_0x41c4('0x4'));var client=jayson[_0x41c4('0x5')][_0x41c4('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x11e3a4,_0x25c3c2,_0x4f0ca0){return new BPromise(function(_0x444fb8,_0x1ea698){return client['request'](_0x11e3a4,_0x4f0ca0)[_0x41c4('0x7')](function(_0x11ac0a){logger[_0x41c4('0x8')](_0x41c4('0x9'),_0x25c3c2,_0x41c4('0xa'));logger['debug'](_0x41c4('0xb'),_0x25c3c2,'request\x20sent',JSON[_0x41c4('0xc')](_0x11ac0a));if(_0x11ac0a[_0x41c4('0xd')]){if(_0x11ac0a[_0x41c4('0xd')][_0x41c4('0xe')]===0x1f4){logger['error']('MemberReport,\x20%s,\x20%s',_0x25c3c2,_0x11ac0a[_0x41c4('0xd')][_0x41c4('0xf')]);return _0x1ea698(_0x11ac0a['error']['message']);}logger[_0x41c4('0xd')]('MemberReport,\x20%s,\x20%s',_0x25c3c2,_0x11ac0a[_0x41c4('0xd')][_0x41c4('0xf')]);return _0x444fb8(_0x11ac0a['error'][_0x41c4('0xf')]);}else{logger[_0x41c4('0x8')](_0x41c4('0x9'),_0x25c3c2,_0x41c4('0xa'));_0x444fb8(_0x11ac0a['result'][_0x41c4('0xf')]);}})[_0x41c4('0x10')](function(_0x4076db){logger[_0x41c4('0xd')](_0x41c4('0x9'),_0x25c3c2,_0x4076db);_0x1ea698(_0x4076db);});});}exports[_0x41c4('0x11')]=function(_0x2e1ecf){var _0x23a214=this;return new Promise(function(_0x296c2a,_0x2dc68e){return db[_0x41c4('0x12')][_0x41c4('0x13')]({'raw':_0x2e1ecf[_0x41c4('0x14')]?_0x2e1ecf[_0x41c4('0x14')][_0x41c4('0x15')]===undefined?!![]:![]:!![],'where':_0x2e1ecf[_0x41c4('0x14')]?_0x2e1ecf[_0x41c4('0x14')][_0x41c4('0x16')]||null:null,'attributes':_0x2e1ecf[_0x41c4('0x14')]?_0x2e1ecf[_0x41c4('0x14')][_0x41c4('0x17')]||null:null,'limit':_0x2e1ecf[_0x41c4('0x14')]?_0x2e1ecf[_0x41c4('0x14')][_0x41c4('0x18')]||null:null,'include':_0x2e1ecf[_0x41c4('0x14')]?_0x2e1ecf[_0x41c4('0x14')][_0x41c4('0x19')]?_[_0x41c4('0x1a')](_0x2e1ecf['options'][_0x41c4('0x19')],function(_0x1ae54f){return{'model':db[_0x1ae54f[_0x41c4('0x1b')]],'as':_0x1ae54f['as'],'attributes':_0x1ae54f[_0x41c4('0x17')],'include':_0x1ae54f['include']?_[_0x41c4('0x1a')](_0x1ae54f['include'],function(_0x3b2c26){return{'model':db[_0x3b2c26[_0x41c4('0x1b')]],'as':_0x3b2c26['as'],'attributes':_0x3b2c26[_0x41c4('0x17')],'include':_0x3b2c26[_0x41c4('0x19')]?_[_0x41c4('0x1a')](_0x3b2c26[_0x41c4('0x19')],function(_0x31e43c){return{'model':db[_0x31e43c[_0x41c4('0x1b')]],'as':_0x31e43c['as'],'attributes':_0x31e43c[_0x41c4('0x17')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x38b7af){logger[_0x41c4('0x8')](_0x41c4('0x11'),_0x2e1ecf);logger[_0x41c4('0x1c')](_0x41c4('0x11'),_0x2e1ecf,JSON[_0x41c4('0xc')](_0x38b7af));_0x296c2a(_0x38b7af);})[_0x41c4('0x10')](function(_0x20e00d){logger[_0x41c4('0xd')](_0x41c4('0x11'),_0x20e00d[_0x41c4('0xf')],_0x2e1ecf);_0x2dc68e(_0x23a214[_0x41c4('0xd')](0x1f4,_0x20e00d[_0x41c4('0xf')]));});});};exports[_0x41c4('0x1d')]=function(_0x40acb5){var _0x3fb669=this;return new Promise(function(_0x5d71ea,_0xe43e4e){return db[_0x41c4('0x12')][_0x41c4('0x1e')](_0x40acb5[_0x41c4('0x1f')],{'raw':_0x40acb5[_0x41c4('0x14')]?_0x40acb5[_0x41c4('0x14')][_0x41c4('0x15')]===undefined?!![]:![]:!![]})[_0x41c4('0x7')](function(_0x59a26a){logger[_0x41c4('0x8')]('CreateMemberReport',_0x40acb5);logger[_0x41c4('0x1c')](_0x41c4('0x1d'),_0x40acb5,JSON[_0x41c4('0xc')](_0x59a26a));_0x5d71ea(_0x59a26a);})[_0x41c4('0x10')](function(_0x491393){logger['error']('CreateMemberReport',_0x491393[_0x41c4('0xf')],_0x40acb5);_0xe43e4e(_0x3fb669['error'](0x1f4,_0x491393['message']));});});};exports[_0x41c4('0x20')]=function(_0x1cf776){var _0x571515=this;return new Promise(function(_0x2eb6bc,_0x12624a){return db[_0x41c4('0x12')][_0x41c4('0x21')](_0x1cf776[_0x41c4('0x1f')],{'raw':_0x1cf776[_0x41c4('0x14')]?_0x1cf776[_0x41c4('0x14')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1cf776[_0x41c4('0x14')]?_0x1cf776[_0x41c4('0x14')]['where']||null:null,'attributes':_0x1cf776[_0x41c4('0x14')]?_0x1cf776[_0x41c4('0x14')][_0x41c4('0x17')]||null:null,'limit':_0x1cf776[_0x41c4('0x14')]?_0x1cf776[_0x41c4('0x14')][_0x41c4('0x18')]||null:null})[_0x41c4('0x7')](function(_0x23b7d9){logger[_0x41c4('0x8')]('UpdateMemberReport',_0x1cf776);logger[_0x41c4('0x1c')](_0x41c4('0x20'),_0x1cf776,JSON[_0x41c4('0xc')](_0x23b7d9));_0x2eb6bc(_0x23b7d9);})['catch'](function(_0x5a29a1){logger[_0x41c4('0xd')](_0x41c4('0x20'),_0x5a29a1[_0x41c4('0xf')],_0x1cf776);_0x12624a(_0x571515['error'](0x1f4,_0x5a29a1[_0x41c4('0xf')]));});});};
\ No newline at end of file
+var _0x4e92=['error','code','message','catch','MemberReport','findAll','options','where','attributes','limit','include','map','model','then','GetMemberReport','create','raw','CreateMemberReport','UpdateMemberReport','update','body','lodash','util','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','request','info','MemberReport,\x20%s,\x20%s','request\x20sent','debug','MemberReport,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x476bcd,_0x2f6582){var _0x47b60f=function(_0x406a6e){while(--_0x406a6e){_0x476bcd['push'](_0x476bcd['shift']());}};_0x47b60f(++_0x2f6582);}(_0x4e92,0xed));var _0x24e9=function(_0x3441d5,_0x1ba541){_0x3441d5=_0x3441d5-0x0;var _0x45fdeb=_0x4e92[_0x3441d5];return _0x45fdeb;};'use strict';var _=require(_0x24e9('0x0'));var util=require(_0x24e9('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x24e9('0x2'));var fs=require('fs');var db=require(_0x24e9('0x3'))['db'];var utils=require(_0x24e9('0x4'));var logger=require(_0x24e9('0x5'))('rpc');var config=require(_0x24e9('0x6'));var jayson=require(_0x24e9('0x7'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x39ac4b,_0x312feb,_0x2c0f17){return new BPromise(function(_0x367c4e,_0x52b64c){return client[_0x24e9('0x8')](_0x39ac4b,_0x2c0f17)['then'](function(_0x413aa3){logger[_0x24e9('0x9')](_0x24e9('0xa'),_0x312feb,_0x24e9('0xb'));logger[_0x24e9('0xc')](_0x24e9('0xd'),_0x312feb,_0x24e9('0xb'),JSON[_0x24e9('0xe')](_0x413aa3));if(_0x413aa3[_0x24e9('0xf')]){if(_0x413aa3[_0x24e9('0xf')][_0x24e9('0x10')]===0x1f4){logger[_0x24e9('0xf')]('MemberReport,\x20%s,\x20%s',_0x312feb,_0x413aa3[_0x24e9('0xf')][_0x24e9('0x11')]);return _0x52b64c(_0x413aa3[_0x24e9('0xf')]['message']);}logger['error'](_0x24e9('0xa'),_0x312feb,_0x413aa3[_0x24e9('0xf')][_0x24e9('0x11')]);return _0x367c4e(_0x413aa3['error'][_0x24e9('0x11')]);}else{logger[_0x24e9('0x9')](_0x24e9('0xa'),_0x312feb,'request\x20sent');_0x367c4e(_0x413aa3['result'][_0x24e9('0x11')]);}})[_0x24e9('0x12')](function(_0x770399){logger['error'](_0x24e9('0xa'),_0x312feb,_0x770399);_0x52b64c(_0x770399);});});}exports['GetMemberReport']=function(_0x3556c6){var _0x9b5164=this;return new Promise(function(_0x31528b,_0xe92610){return db[_0x24e9('0x13')][_0x24e9('0x14')]({'raw':_0x3556c6[_0x24e9('0x15')]?_0x3556c6[_0x24e9('0x15')]['raw']===undefined?!![]:![]:!![],'where':_0x3556c6[_0x24e9('0x15')]?_0x3556c6[_0x24e9('0x15')][_0x24e9('0x16')]||null:null,'attributes':_0x3556c6[_0x24e9('0x15')]?_0x3556c6[_0x24e9('0x15')][_0x24e9('0x17')]||null:null,'limit':_0x3556c6[_0x24e9('0x15')]?_0x3556c6[_0x24e9('0x15')][_0x24e9('0x18')]||null:null,'include':_0x3556c6[_0x24e9('0x15')]?_0x3556c6['options'][_0x24e9('0x19')]?_[_0x24e9('0x1a')](_0x3556c6[_0x24e9('0x15')][_0x24e9('0x19')],function(_0x49e3ed){return{'model':db[_0x49e3ed[_0x24e9('0x1b')]],'as':_0x49e3ed['as'],'attributes':_0x49e3ed['attributes'],'include':_0x49e3ed[_0x24e9('0x19')]?_[_0x24e9('0x1a')](_0x49e3ed[_0x24e9('0x19')],function(_0xff918a){return{'model':db[_0xff918a[_0x24e9('0x1b')]],'as':_0xff918a['as'],'attributes':_0xff918a[_0x24e9('0x17')],'include':_0xff918a[_0x24e9('0x19')]?_['map'](_0xff918a[_0x24e9('0x19')],function(_0x50f8b0){return{'model':db[_0x50f8b0['model']],'as':_0x50f8b0['as'],'attributes':_0x50f8b0['attributes']};}):[]};}):[]};}):[]:[]})[_0x24e9('0x1c')](function(_0x4427be){logger[_0x24e9('0x9')](_0x24e9('0x1d'),_0x3556c6);logger[_0x24e9('0xc')](_0x24e9('0x1d'),_0x3556c6,JSON['stringify'](_0x4427be));_0x31528b(_0x4427be);})[_0x24e9('0x12')](function(_0xc7be59){logger['error'](_0x24e9('0x1d'),_0xc7be59[_0x24e9('0x11')],_0x3556c6);_0xe92610(_0x9b5164[_0x24e9('0xf')](0x1f4,_0xc7be59[_0x24e9('0x11')]));});});};exports['CreateMemberReport']=function(_0x410b5f){var _0x591ccf=this;return new Promise(function(_0x46ef89,_0x150b94){return db['MemberReport'][_0x24e9('0x1e')](_0x410b5f['body'],{'raw':_0x410b5f[_0x24e9('0x15')]?_0x410b5f[_0x24e9('0x15')][_0x24e9('0x1f')]===undefined?!![]:![]:!![]})[_0x24e9('0x1c')](function(_0x3e20ff){logger[_0x24e9('0x9')]('CreateMemberReport',_0x410b5f);logger[_0x24e9('0xc')](_0x24e9('0x20'),_0x410b5f,JSON[_0x24e9('0xe')](_0x3e20ff));_0x46ef89(_0x3e20ff);})[_0x24e9('0x12')](function(_0x2401f3){logger[_0x24e9('0xf')](_0x24e9('0x20'),_0x2401f3['message'],_0x410b5f);_0x150b94(_0x591ccf[_0x24e9('0xf')](0x1f4,_0x2401f3[_0x24e9('0x11')]));});});};exports[_0x24e9('0x21')]=function(_0xfbfcd1){var _0x3025f7=this;return new Promise(function(_0x219720,_0x2eb776){return db[_0x24e9('0x13')][_0x24e9('0x22')](_0xfbfcd1[_0x24e9('0x23')],{'raw':_0xfbfcd1[_0x24e9('0x15')]?_0xfbfcd1[_0x24e9('0x15')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0xfbfcd1[_0x24e9('0x15')]?_0xfbfcd1[_0x24e9('0x15')]['where']||null:null,'attributes':_0xfbfcd1['options']?_0xfbfcd1['options'][_0x24e9('0x17')]||null:null,'limit':_0xfbfcd1[_0x24e9('0x15')]?_0xfbfcd1[_0x24e9('0x15')][_0x24e9('0x18')]||null:null})[_0x24e9('0x1c')](function(_0x1607f0){logger['info'](_0x24e9('0x21'),_0xfbfcd1);logger[_0x24e9('0xc')](_0x24e9('0x21'),_0xfbfcd1,JSON[_0x24e9('0xe')](_0x1607f0));_0x219720(_0x1607f0);})[_0x24e9('0x12')](function(_0x563ef7){logger[_0x24e9('0xf')](_0x24e9('0x21'),_0x563ef7['message'],_0xfbfcd1);_0x2eb776(_0x3025f7[_0x24e9('0xf')](0x1f4,_0x563ef7[_0x24e9('0x11')]));});});};
\ No newline at end of file
index 44bbeed..4a3f63d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ebe=['index','exports','multer','util','path','Router','../../components/interaction/service','../../config/environment','./migration.controller','get'];(function(_0x68c979,_0x431cff){var _0x4f0001=function(_0xa7595d){while(--_0xa7595d){_0x68c979['push'](_0x68c979['shift']());}};_0x4f0001(++_0x431cff);}(_0x4ebe,0x1ba));var _0xe4eb=function(_0x3d188c,_0x474730){_0x3d188c=_0x3d188c-0x0;var _0xed7c96=_0x4ebe[_0x3d188c];return _0xed7c96;};'use strict';var multer=require(_0xe4eb('0x0'));var util=require(_0xe4eb('0x1'));var path=require(_0xe4eb('0x2'));var express=require('express');var router=express[_0xe4eb('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xe4eb('0x4'));var config=require(_0xe4eb('0x5'));var controller=require(_0xe4eb('0x6'));router[_0xe4eb('0x7')]('/',controller[_0xe4eb('0x8')]);module[_0xe4eb('0x9')]=router;
\ No newline at end of file
+var _0x44d8=['multer','util','path','Router','../../components/auth/service','../../components/interaction/service','./migration.controller','get','index'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x44d8,0xb4));var _0x844d=function(_0x5380e5,_0xae5936){_0x5380e5=_0x5380e5-0x0;var _0x8d9117=_0x44d8[_0x5380e5];return _0x8d9117;};'use strict';var multer=require(_0x844d('0x0'));var util=require(_0x844d('0x1'));var path=require(_0x844d('0x2'));var express=require('express');var router=express[_0x844d('0x3')]();var auth=require(_0x844d('0x4'));var interaction=require(_0x844d('0x5'));var config=require('../../config/environment');var controller=require(_0x844d('0x6'));router[_0x844d('0x7')]('/',controller[_0x844d('0x8')]);module['exports']=router;
\ No newline at end of file
index fb57eed..98acb47 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0c51=['STRING','sequelize'];(function(_0x16bf05,_0x4f70da){var _0xbcf546=function(_0x70b01d){while(--_0x70b01d){_0x16bf05['push'](_0x16bf05['shift']());}};_0xbcf546(++_0x4f70da);}(_0x0c51,0x7d));var _0x10c5=function(_0x548e11,_0x43ded0){_0x548e11=_0x548e11-0x0;var _0x5eed1c=_0x0c51[_0x548e11];return _0x5eed1c;};'use strict';var Sequelize=require(_0x10c5('0x0'));module['exports']={'version':{'type':Sequelize[_0x10c5('0x1')],'primaryKey':!![],'autoIncrement':![]}};
\ No newline at end of file
+var _0x8254=['STRING','sequelize'];(function(_0x2e4a84,_0x3de6e1){var _0x16ffe8=function(_0x43382f){while(--_0x43382f){_0x2e4a84['push'](_0x2e4a84['shift']());}};_0x16ffe8(++_0x3de6e1);}(_0x8254,0x95));var _0x4825=function(_0x4be629,_0x2297b5){_0x4be629=_0x4be629-0x0;var _0x3cec8d=_0x8254[_0x4be629];return _0x3cec8d;};'use strict';var Sequelize=require(_0x4825('0x0'));module['exports']={'version':{'type':Sequelize[_0x4825('0x1')],'primaryKey':!![],'autoIncrement':![]}};
\ No newline at end of file
index 6a58e9a..491bc21 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x622e=['where','filter','include','findAll','rows','catch','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','end','status','json','count','offset','set','Content-Range','apply','reject','update','then','destroy','sendStatus','error','stack','name','send','index','Migration','rawAttributes','model','query','dateStart','dateEnd','keys','filters','attributes','fields','length','nolimit','limit','order','sort','pick','add','day','merge'];(function(_0x2bfddc,_0x581a53){var _0x48a663=function(_0x26d3b1){while(--_0x26d3b1){_0x2bfddc['push'](_0x2bfddc['shift']());}};_0x48a663(++_0x581a53);}(_0x622e,0x106));var _0xe622=function(_0x4eb30f,_0x2bfad8){_0x4eb30f=_0x4eb30f-0x0;var _0xc26a9a=_0x622e[_0x4eb30f];return _0xc26a9a;};'use strict';var jsonpatch=require(_0xe622('0x0'));var rp=require(_0xe622('0x1'));var moment=require(_0xe622('0x2'));var BPromise=require(_0xe622('0x3'));var Mustache=require(_0xe622('0x4'));var util=require(_0xe622('0x5'));var path=require(_0xe622('0x6'));var sox=require(_0xe622('0x7'));var csv=require(_0xe622('0x8'));var ejs=require(_0xe622('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0xe622('0xa'));var crypto=require(_0xe622('0xb'));var jsforce=require(_0xe622('0xc'));var deskjs=require('desk.js');var toCsv=require(_0xe622('0x8'));var querystring=require(_0xe622('0xd'));var Papa=require(_0xe622('0xe'));var qs=require(_0xe622('0xf'));var logger=require(_0xe622('0x10'))(_0xe622('0x11'));var utils=require(_0xe622('0x12'));var config=require(_0xe622('0x13'));var db=require(_0xe622('0x14'))['db'];function respondWithStatusCode(_0x55b6db,_0x39b40f){_0x39b40f=_0x39b40f||0xcc;return function(_0x22fa25){if(_0x22fa25){return _0x55b6db['sendStatus'](_0x39b40f);}return _0x55b6db['status'](_0x39b40f)[_0xe622('0x15')]();};}function respondWithResult(_0x546824,_0x485e18){_0x485e18=_0x485e18||0xc8;return function(_0x981de){if(_0x981de){return _0x546824[_0xe622('0x16')](_0x485e18)[_0xe622('0x17')](_0x981de);}};}function respondWithFilteredResult(_0x3bbcba,_0x38fe75){return function(_0x3da8a2){if(_0x3da8a2){var _0x266395=_0x3da8a2[_0xe622('0x18')],_0xe0f753=_0x38fe75[_0xe622('0x19')],_0xd1ca7e=_0x38fe75[_0xe622('0x19')]+_0x38fe75['limit'],_0xe90c4;if(_0xd1ca7e>=_0x266395){_0xd1ca7e=_0x266395;_0xe90c4=0xc8;}else{_0xe90c4=0xce;}_0x3bbcba[_0xe622('0x16')](_0xe90c4);return _0x3bbcba[_0xe622('0x1a')](_0xe622('0x1b'),_0xe0f753+'-'+_0xd1ca7e+'/'+_0x266395)[_0xe622('0x17')](_0x3da8a2);}return null;};}function patchUpdates(_0x4507f2){return function(_0x4c3b21){try{jsonpatch[_0xe622('0x1c')](_0x4c3b21,_0x4507f2,!![]);}catch(_0x2df8e1){return BPromise[_0xe622('0x1d')](_0x2df8e1);}return _0x4c3b21['save']();};}function saveUpdates(_0x2461fe,_0xa838d8){return function(_0x3f3dbc){if(_0x3f3dbc){return _0x3f3dbc[_0xe622('0x1e')](_0x2461fe)[_0xe622('0x1f')](function(_0x2533de){return _0x2533de;});}return null;};}function removeEntity(_0x3555d2,_0x5b786d){return function(_0x591982){if(_0x591982){return _0x591982[_0xe622('0x20')]()[_0xe622('0x1f')](function(){_0x3555d2[_0xe622('0x16')](0xcc)[_0xe622('0x15')]();});}};}function handleEntityNotFound(_0x4cee1c,_0x4099c9){return function(_0xfef4a6){if(!_0xfef4a6){_0x4cee1c[_0xe622('0x21')](0x194);}return _0xfef4a6;};}function handleError(_0x7a7767,_0x15b345){_0x15b345=_0x15b345||0x1f4;return function(_0x1f5ef0){logger[_0xe622('0x22')](_0x1f5ef0[_0xe622('0x23')]);if(_0x1f5ef0[_0xe622('0x24')]){delete _0x1f5ef0[_0xe622('0x24')];}_0x7a7767[_0xe622('0x16')](_0x15b345)[_0xe622('0x25')](_0x1f5ef0);};}exports[_0xe622('0x26')]=function(_0x17b506,_0x2cb149){var _0x11e297={},_0x4b1090={},_0x168945={'count':0x0,'rows':[]};var _0x262424=db[_0xe622('0x27')][_0xe622('0x28')];_0x4b1090[_0xe622('0x29')]=_['keys'](_0x262424);var _0x59520f={'dateStart':_0x17b506[_0xe622('0x2a')][_0xe622('0x2b')],'dateEnd':_0x17b506[_0xe622('0x2a')]['dateEnd']};delete _0x17b506['query']['dateStart'];delete _0x17b506[_0xe622('0x2a')][_0xe622('0x2c')];_0x4b1090['query']=_[_0xe622('0x2d')](_0x17b506[_0xe622('0x2a')]);_0x4b1090[_0xe622('0x2e')]=_['intersection'](_0x4b1090['model'],_0x4b1090['query']);_0x11e297[_0xe622('0x2f')]=_['intersection'](_0x4b1090[_0xe622('0x29')],qs['fields'](_0x17b506[_0xe622('0x2a')][_0xe622('0x30')]));_0x11e297[_0xe622('0x2f')]=_0x11e297['attributes'][_0xe622('0x31')]?_0x11e297[_0xe622('0x2f')]:_0x4b1090[_0xe622('0x29')];if(!_0x17b506[_0xe622('0x2a')]['hasOwnProperty'](_0xe622('0x32'))){_0x11e297['limit']=qs['limit'](_0x17b506[_0xe622('0x2a')][_0xe622('0x33')]);_0x11e297['offset']=qs[_0xe622('0x19')](_0x17b506[_0xe622('0x2a')][_0xe622('0x19')]);}_0x11e297[_0xe622('0x34')]=qs['sort'](_0x17b506[_0xe622('0x2a')][_0xe622('0x35')]);_0x11e297['where']=qs[_0xe622('0x2e')](_[_0xe622('0x36')](_0x17b506[_0xe622('0x2a')],_0x4b1090['filters']));if(_0x59520f['dateStart']){if(_0x59520f['dateEnd']){_0x59520f[_0xe622('0x2c')]=moment(_0x59520f[_0xe622('0x2c')])[_0xe622('0x37')](0x1,'day');}else{_0x59520f[_0xe622('0x2c')]=moment(_0x59520f['dateStart'])[_0xe622('0x37')](0x1,_0xe622('0x38'));}_[_0xe622('0x39')](_0x11e297[_0xe622('0x3a')],{'createdAt':{'$gte':_0x59520f[_0xe622('0x2b')],'$lte':_0x59520f[_0xe622('0x2c')]}});}if(_0x17b506[_0xe622('0x2a')][_0xe622('0x3b')]){_0x11e297['where']=_['merge'](_0x11e297[_0xe622('0x3a')],{'$or':_['map'](_0x11e297['attributes'],function(_0x5e6bb8){var _0x55a3ab={};_0x55a3ab[_0x5e6bb8]={'$like':'%'+_0x17b506[_0xe622('0x2a')][_0xe622('0x3b')]+'%'};return _0x55a3ab;})});}_0x11e297=_['merge']({},_0x11e297,_0x17b506['options']);var _0x120a91={'where':_0x11e297['where']};return db[_0xe622('0x27')][_0xe622('0x18')](_0x120a91)[_0xe622('0x1f')](function(_0x5dc4fb){_0x168945[_0xe622('0x18')]=_0x5dc4fb;if(_0x17b506[_0xe622('0x2a')]['includeAll']){_0x11e297[_0xe622('0x3c')]=[{'all':!![]}];}return db[_0xe622('0x27')][_0xe622('0x3d')](_0x11e297);})[_0xe622('0x1f')](function(_0x43474e){_0x168945[_0xe622('0x3e')]=_0x43474e;return _0x168945;})[_0xe622('0x1f')](respondWithFilteredResult(_0x2cb149,_0x11e297))[_0xe622('0x3f')](handleError(_0x2cb149,null));};
\ No newline at end of file
+var _0x277a=['rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','limit','sort','where','pick','add','day','merge','filter','map','options','includeAll','Migration','rows','catch','request-promise','mustache','util','sox','crypto','desk.js','to-csv','querystring','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','status','json','count','offset','set','reject','save','update','then','end','sendStatus','error','stack','name','send'];(function(_0x12277a,_0x53eef4){var _0x4f3635=function(_0x49de91){while(--_0x49de91){_0x12277a['push'](_0x12277a['shift']());}};_0x4f3635(++_0x53eef4);}(_0x277a,0xe9));var _0xa277=function(_0x50f408,_0x2f6801){_0x50f408=_0x50f408-0x0;var _0x1ca5a6=_0x277a[_0x50f408];return _0x1ca5a6;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xa277('0x0'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xa277('0x1'));var util=require(_0xa277('0x2'));var path=require('path');var sox=require(_0xa277('0x3'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xa277('0x4'));var jsforce=require('jsforce');var deskjs=require(_0xa277('0x5'));var toCsv=require(_0xa277('0x6'));var querystring=require(_0xa277('0x7'));var Papa=require('papaparse');var qs=require(_0xa277('0x8'));var logger=require(_0xa277('0x9'))('api');var utils=require(_0xa277('0xa'));var config=require(_0xa277('0xb'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xbbacd9,_0x4752e6){_0x4752e6=_0x4752e6||0xcc;return function(_0x55f09a){if(_0x55f09a){return _0xbbacd9['sendStatus'](_0x4752e6);}return _0xbbacd9[_0xa277('0xc')](_0x4752e6)['end']();};}function respondWithResult(_0x18a14a,_0x4cd62f){_0x4cd62f=_0x4cd62f||0xc8;return function(_0xa5b24e){if(_0xa5b24e){return _0x18a14a[_0xa277('0xc')](_0x4cd62f)[_0xa277('0xd')](_0xa5b24e);}};}function respondWithFilteredResult(_0x2a0cda,_0x4598f8){return function(_0x1d604d){if(_0x1d604d){var _0x123dbe=_0x1d604d[_0xa277('0xe')],_0x4463d1=_0x4598f8[_0xa277('0xf')],_0x33bd73=_0x4598f8[_0xa277('0xf')]+_0x4598f8['limit'],_0x4f7545;if(_0x33bd73>=_0x123dbe){_0x33bd73=_0x123dbe;_0x4f7545=0xc8;}else{_0x4f7545=0xce;}_0x2a0cda[_0xa277('0xc')](_0x4f7545);return _0x2a0cda[_0xa277('0x10')]('Content-Range',_0x4463d1+'-'+_0x33bd73+'/'+_0x123dbe)['json'](_0x1d604d);}return null;};}function patchUpdates(_0x4e76ff){return function(_0x4e221d){try{jsonpatch['apply'](_0x4e221d,_0x4e76ff,!![]);}catch(_0x2089cb){return BPromise[_0xa277('0x11')](_0x2089cb);}return _0x4e221d[_0xa277('0x12')]();};}function saveUpdates(_0x1e0b02,_0x12591d){return function(_0x5c72a6){if(_0x5c72a6){return _0x5c72a6[_0xa277('0x13')](_0x1e0b02)[_0xa277('0x14')](function(_0x25d312){return _0x25d312;});}return null;};}function removeEntity(_0x2b2e92,_0x169f8b){return function(_0x106b95){if(_0x106b95){return _0x106b95['destroy']()[_0xa277('0x14')](function(){_0x2b2e92['status'](0xcc)[_0xa277('0x15')]();});}};}function handleEntityNotFound(_0x254fe6,_0x2850e0){return function(_0x1cf706){if(!_0x1cf706){_0x254fe6[_0xa277('0x16')](0x194);}return _0x1cf706;};}function handleError(_0x560912,_0x42368e){_0x42368e=_0x42368e||0x1f4;return function(_0x226f8e){logger[_0xa277('0x17')](_0x226f8e[_0xa277('0x18')]);if(_0x226f8e[_0xa277('0x19')]){delete _0x226f8e[_0xa277('0x19')];}_0x560912[_0xa277('0xc')](_0x42368e)[_0xa277('0x1a')](_0x226f8e);};}exports['index']=function(_0x25e196,_0x7ad66){var _0x153168={},_0x36361c={},_0x32fb00={'count':0x0,'rows':[]};var _0x4b0bcd=db['Migration'][_0xa277('0x1b')];_0x36361c[_0xa277('0x1c')]=_[_0xa277('0x1d')](_0x4b0bcd);var _0x3b5b84={'dateStart':_0x25e196[_0xa277('0x1e')][_0xa277('0x1f')],'dateEnd':_0x25e196[_0xa277('0x1e')][_0xa277('0x20')]};delete _0x25e196[_0xa277('0x1e')]['dateStart'];delete _0x25e196['query']['dateEnd'];_0x36361c[_0xa277('0x1e')]=_[_0xa277('0x1d')](_0x25e196[_0xa277('0x1e')]);_0x36361c[_0xa277('0x21')]=_[_0xa277('0x22')](_0x36361c[_0xa277('0x1c')],_0x36361c['query']);_0x153168[_0xa277('0x23')]=_[_0xa277('0x22')](_0x36361c[_0xa277('0x1c')],qs[_0xa277('0x24')](_0x25e196[_0xa277('0x1e')][_0xa277('0x24')]));_0x153168['attributes']=_0x153168['attributes'][_0xa277('0x25')]?_0x153168[_0xa277('0x23')]:_0x36361c[_0xa277('0x1c')];if(!_0x25e196[_0xa277('0x1e')]['hasOwnProperty']('nolimit')){_0x153168[_0xa277('0x26')]=qs[_0xa277('0x26')](_0x25e196[_0xa277('0x1e')]['limit']);_0x153168[_0xa277('0xf')]=qs[_0xa277('0xf')](_0x25e196[_0xa277('0x1e')][_0xa277('0xf')]);}_0x153168['order']=qs[_0xa277('0x27')](_0x25e196[_0xa277('0x1e')][_0xa277('0x27')]);_0x153168[_0xa277('0x28')]=qs[_0xa277('0x21')](_[_0xa277('0x29')](_0x25e196['query'],_0x36361c[_0xa277('0x21')]));if(_0x3b5b84[_0xa277('0x1f')]){if(_0x3b5b84[_0xa277('0x20')]){_0x3b5b84[_0xa277('0x20')]=moment(_0x3b5b84[_0xa277('0x20')])[_0xa277('0x2a')](0x1,'day');}else{_0x3b5b84[_0xa277('0x20')]=moment(_0x3b5b84['dateStart'])[_0xa277('0x2a')](0x1,_0xa277('0x2b'));}_[_0xa277('0x2c')](_0x153168[_0xa277('0x28')],{'createdAt':{'$gte':_0x3b5b84[_0xa277('0x1f')],'$lte':_0x3b5b84[_0xa277('0x20')]}});}if(_0x25e196[_0xa277('0x1e')][_0xa277('0x2d')]){_0x153168[_0xa277('0x28')]=_[_0xa277('0x2c')](_0x153168[_0xa277('0x28')],{'$or':_[_0xa277('0x2e')](_0x153168['attributes'],function(_0x49ad6a){var _0x51c22f={};_0x51c22f[_0x49ad6a]={'$like':'%'+_0x25e196[_0xa277('0x1e')][_0xa277('0x2d')]+'%'};return _0x51c22f;})});}_0x153168=_['merge']({},_0x153168,_0x25e196[_0xa277('0x2f')]);var _0x88777b={'where':_0x153168['where']};return db['Migration'][_0xa277('0xe')](_0x88777b)['then'](function(_0x51bf2b){_0x32fb00[_0xa277('0xe')]=_0x51bf2b;if(_0x25e196['query'][_0xa277('0x30')]){_0x153168['include']=[{'all':!![]}];}return db[_0xa277('0x31')]['findAll'](_0x153168);})[_0xa277('0x14')](function(_0x761de4){_0x32fb00[_0xa277('0x32')]=_0x761de4;return _0x32fb00;})['then'](respondWithFilteredResult(_0x7ad66,_0x153168))[_0xa277('0x33')](handleError(_0x7ad66,null));};
\ No newline at end of file
index f2cb027..9a31914 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2af8=['api','bluebird','request-promise','exports','define','migrations','lodash','../../config/logger'];(function(_0x1034f3,_0x1222bc){var _0x51f2bd=function(_0xfbddd){while(--_0xfbddd){_0x1034f3['push'](_0x1034f3['shift']());}};_0x51f2bd(++_0x1222bc);}(_0x2af8,0xf6));var _0x82af=function(_0x377dbd,_0xf30c3d){_0x377dbd=_0x377dbd-0x0;var _0x4f54e0=_0x2af8[_0x377dbd];return _0x4f54e0;};'use strict';var _=require(_0x82af('0x0'));var util=require('util');var logger=require(_0x82af('0x1'))(_0x82af('0x2'));var moment=require('moment');var BPromise=require(_0x82af('0x3'));var rp=require(_0x82af('0x4'));var attributes=require('./migration.attributes');module[_0x82af('0x5')]=function(_0x4a8c15,_0xafdd39){return _0x4a8c15[_0x82af('0x6')]('Migration',attributes,{'tableName':_0x82af('0x7'),'paranoid':![],'indexes':[],'timestamps':![]});};
\ No newline at end of file
+var _0xcfef=['util','../../config/logger','api','exports','define'];(function(_0x3494e8,_0x4111ea){var _0x20bd8c=function(_0x2f8fcd){while(--_0x2f8fcd){_0x3494e8['push'](_0x3494e8['shift']());}};_0x20bd8c(++_0x4111ea);}(_0xcfef,0x1cc));var _0xfcfe=function(_0x50284e,_0x5e67a9){_0x50284e=_0x50284e-0x0;var _0x103bdb=_0xcfef[_0x50284e];return _0x103bdb;};'use strict';var _=require('lodash');var util=require(_0xfcfe('0x0'));var logger=require(_0xfcfe('0x1'))(_0xfcfe('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require('./migration.attributes');module[_0xfcfe('0x3')]=function(_0x21c122,_0x3abede){return _0x21c122[_0xfcfe('0x4')]('Migration',attributes,{'tableName':'migrations','paranoid':![],'indexes':[],'timestamps':![]});};
\ No newline at end of file
index b281c7c..a7bd487 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x31ef=['../../config/utils','rpc','client','http','request','then','debug','Migration,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','Migration,\x20%s,\x20%s','message','info','lodash','util','moment','randomstring'];(function(_0x5f0432,_0x2b29c8){var _0x48eb08=function(_0x1abf0c){while(--_0x1abf0c){_0x5f0432['push'](_0x5f0432['shift']());}};_0x48eb08(++_0x2b29c8);}(_0x31ef,0x18b));var _0xf31e=function(_0x39e133,_0x1ead5c){_0x39e133=_0x39e133-0x0;var _0x8c07aa=_0x31ef[_0x39e133];return _0x8c07aa;};'use strict';var _=require(_0xf31e('0x0'));var util=require(_0xf31e('0x1'));var moment=require(_0xf31e('0x2'));var BPromise=require('bluebird');var rs=require(_0xf31e('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xf31e('0x4'));var logger=require('../../config/logger')(_0xf31e('0x5'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xf31e('0x6')][_0xf31e('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x49f0be,_0x3a20ac,_0x270616){return new BPromise(function(_0x3cf218,_0xaaa374){return client[_0xf31e('0x8')](_0x49f0be,_0x270616)[_0xf31e('0x9')](function(_0x1cc2e4){logger['info']('Migration,\x20%s,\x20%s',_0x3a20ac,'request\x20sent');logger[_0xf31e('0xa')](_0xf31e('0xb'),_0x3a20ac,_0xf31e('0xc'),JSON[_0xf31e('0xd')](_0x1cc2e4));if(_0x1cc2e4[_0xf31e('0xe')]){if(_0x1cc2e4[_0xf31e('0xe')][_0xf31e('0xf')]===0x1f4){logger[_0xf31e('0xe')](_0xf31e('0x10'),_0x3a20ac,_0x1cc2e4[_0xf31e('0xe')][_0xf31e('0x11')]);return _0xaaa374(_0x1cc2e4[_0xf31e('0xe')][_0xf31e('0x11')]);}logger[_0xf31e('0xe')](_0xf31e('0x10'),_0x3a20ac,_0x1cc2e4[_0xf31e('0xe')][_0xf31e('0x11')]);return _0x3cf218(_0x1cc2e4['error']['message']);}else{logger[_0xf31e('0x12')](_0xf31e('0x10'),_0x3a20ac,_0xf31e('0xc'));_0x3cf218(_0x1cc2e4['result'][_0xf31e('0x11')]);}})['catch'](function(_0x2e7a9f){logger[_0xf31e('0xe')]('Migration,\x20%s,\x20%s',_0x3a20ac,_0x2e7a9f);_0xaaa374(_0x2e7a9f);});});}
\ No newline at end of file
+var _0x8b87=['request\x20sent','debug','Migration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','http','request','info','Migration,\x20%s,\x20%s'];(function(_0x4547e5,_0x5bd56f){var _0x572f60=function(_0x3fbc04){while(--_0x3fbc04){_0x4547e5['push'](_0x4547e5['shift']());}};_0x572f60(++_0x5bd56f);}(_0x8b87,0x153));var _0x78b8=function(_0xa9f50a,_0x1d3836){_0xa9f50a=_0xa9f50a-0x0;var _0x48d268=_0x8b87[_0xa9f50a];return _0x48d268;};'use strict';var _=require('lodash');var util=require(_0x78b8('0x0'));var moment=require(_0x78b8('0x1'));var BPromise=require(_0x78b8('0x2'));var rs=require(_0x78b8('0x3'));var fs=require('fs');var db=require(_0x78b8('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x78b8('0x5'))('rpc');var config=require(_0x78b8('0x6'));var jayson=require(_0x78b8('0x7'));var client=jayson[_0x78b8('0x8')][_0x78b8('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2aaff7,_0x1838de,_0x2fecd6){return new BPromise(function(_0x1a4925,_0x425649){return client[_0x78b8('0xa')](_0x2aaff7,_0x2fecd6)['then'](function(_0x47abbf){logger[_0x78b8('0xb')](_0x78b8('0xc'),_0x1838de,_0x78b8('0xd'));logger[_0x78b8('0xe')](_0x78b8('0xf'),_0x1838de,_0x78b8('0xd'),JSON[_0x78b8('0x10')](_0x47abbf));if(_0x47abbf['error']){if(_0x47abbf[_0x78b8('0x11')][_0x78b8('0x12')]===0x1f4){logger['error'](_0x78b8('0xc'),_0x1838de,_0x47abbf[_0x78b8('0x11')][_0x78b8('0x13')]);return _0x425649(_0x47abbf[_0x78b8('0x11')][_0x78b8('0x13')]);}logger[_0x78b8('0x11')](_0x78b8('0xc'),_0x1838de,_0x47abbf[_0x78b8('0x11')][_0x78b8('0x13')]);return _0x1a4925(_0x47abbf['error'][_0x78b8('0x13')]);}else{logger[_0x78b8('0xb')](_0x78b8('0xc'),_0x1838de,_0x78b8('0xd'));_0x1a4925(_0x47abbf[_0x78b8('0x14')][_0x78b8('0x13')]);}})[_0x78b8('0x15')](function(_0x14abbc){logger[_0x78b8('0x11')](_0x78b8('0xc'),_0x1838de,_0x14abbc);_0x425649(_0x14abbc);});});}
\ No newline at end of file
index 4d19e39..589ad43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x326f=['exports','multer','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./network.controller','get','isAuthenticated','index','show','post','update','delete','/:id'];(function(_0x2247ff,_0x47857e){var _0x361754=function(_0x3347ba){while(--_0x3347ba){_0x2247ff['push'](_0x2247ff['shift']());}};_0x361754(++_0x47857e);}(_0x326f,0xd1));var _0xf326=function(_0x3b5973,_0x3daf27){_0x3b5973=_0x3b5973-0x0;var _0x2198f1=_0x326f[_0x3b5973];return _0x2198f1;};'use strict';var multer=require(_0xf326('0x0'));var util=require('util');var path=require('path');var express=require(_0xf326('0x1'));var router=express[_0xf326('0x2')]();var auth=require(_0xf326('0x3'));var interaction=require(_0xf326('0x4'));var config=require(_0xf326('0x5'));var controller=require(_0xf326('0x6'));router[_0xf326('0x7')]('/',auth[_0xf326('0x8')](),controller[_0xf326('0x9')]);router[_0xf326('0x7')]('/:id',auth[_0xf326('0x8')](),controller[_0xf326('0xa')]);router[_0xf326('0xb')]('/',auth[_0xf326('0x8')](),controller['create']);router['put']('/:id',auth[_0xf326('0x8')](),controller[_0xf326('0xc')]);router[_0xf326('0xd')](_0xf326('0xe'),auth[_0xf326('0x8')](),controller['destroy']);module[_0xf326('0xf')]=router;
\ No newline at end of file
+var _0xc4aa=['post','put','delete','exports','multer','util','path','express','Router','../../components/auth/service','get','isAuthenticated','index','/:id','show'];(function(_0x50c1fd,_0x2e072d){var _0x5ecd8d=function(_0x149399){while(--_0x149399){_0x50c1fd['push'](_0x50c1fd['shift']());}};_0x5ecd8d(++_0x2e072d);}(_0xc4aa,0x1b7));var _0xac4a=function(_0x16b9ed,_0x56517a){_0x16b9ed=_0x16b9ed-0x0;var _0x66b1f8=_0xc4aa[_0x16b9ed];return _0x66b1f8;};'use strict';var multer=require(_0xac4a('0x0'));var util=require(_0xac4a('0x1'));var path=require(_0xac4a('0x2'));var express=require(_0xac4a('0x3'));var router=express[_0xac4a('0x4')]();var auth=require(_0xac4a('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./network.controller');router[_0xac4a('0x6')]('/',auth[_0xac4a('0x7')](),controller[_0xac4a('0x8')]);router[_0xac4a('0x6')](_0xac4a('0x9'),auth[_0xac4a('0x7')](),controller[_0xac4a('0xa')]);router[_0xac4a('0xb')]('/',auth['isAuthenticated'](),controller['create']);router[_0xac4a('0xc')](_0xac4a('0x9'),auth[_0xac4a('0x7')](),controller['update']);router[_0xac4a('0xd')](_0xac4a('0x9'),auth[_0xac4a('0x7')](),controller['destroy']);module[_0xac4a('0xe')]=router;
\ No newline at end of file
index d9bf961..d125e71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd80e=['exports','ENUM','localnet','externip','STRING'];(function(_0x44fd66,_0x113c30){var _0x5d9d92=function(_0x344737){while(--_0x344737){_0x44fd66['push'](_0x44fd66['shift']());}};_0x5d9d92(++_0x113c30);}(_0xd80e,0x16d));var _0xed80=function(_0x1eed7c,_0x4e142a){_0x1eed7c=_0x1eed7c-0x0;var _0xf01fdc=_0xd80e[_0x1eed7c];return _0xf01fdc;};'use strict';var Sequelize=require('sequelize');module[_0xed80('0x0')]={'type':{'type':Sequelize[_0xed80('0x1')](_0xed80('0x2'),_0xed80('0x3'))},'value':{'type':Sequelize[_0xed80('0x4')]}};
\ No newline at end of file
+var _0x08fe=['ENUM','localnet','externip','STRING','sequelize'];(function(_0x24898f,_0x2093a1){var _0x175f55=function(_0x5a12a5){while(--_0x5a12a5){_0x24898f['push'](_0x24898f['shift']());}};_0x175f55(++_0x2093a1);}(_0x08fe,0x1ee));var _0xe08f=function(_0x332bb4,_0x24246d){_0x332bb4=_0x332bb4-0x0;var _0x136f0b=_0x08fe[_0x332bb4];return _0x136f0b;};'use strict';var Sequelize=require(_0xe08f('0x0'));module['exports']={'type':{'type':Sequelize[_0xe08f('0x1')](_0xe08f('0x2'),_0xe08f('0x3'))},'value':{'type':Sequelize[_0xe08f('0x4')]}};
\ No newline at end of file
index cc85992..50f3430 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd117=['root','server/files/templates/network.ejs','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','client','request','info','request\x20sent','debug','Network,\x20%s,\x20%s,\x20%s','stringify','error','code','Network,\x20%s,\x20%s','message','result','catch','sendStatus','status','json','offset','set','Content-Range','apply','reject','save','update','destroy','end','name','send','index','Network','rawAttributes','keys','dateStart','query','dateEnd','filters','intersection','model','attributes','fields','hasOwnProperty','limit','sort','pick','day','add','merge','filter','where','then','count','includeAll','include','findAll','rows','params','length','options','find','create','sequelize','transaction','body','type','readFileSync','utf8','render','format','/etc/asterisk/sip_xcally_%s.conf','toLowerCase','chan_sip.so','join','writeFileSync','Reload'];(function(_0x536759,_0x1505ac){var _0xf32ab2=function(_0x12007c){while(--_0x12007c){_0x536759['push'](_0x536759['shift']());}};_0xf32ab2(++_0x1505ac);}(_0xd117,0x182));var _0x7d11=function(_0x32c98a,_0x5e6eb0){_0x32c98a=_0x32c98a-0x0;var _0x1796d3=_0xd117[_0x32c98a];return _0x1796d3;};'use strict';var jsonpatch=require(_0x7d11('0x0'));var rp=require(_0x7d11('0x1'));var moment=require(_0x7d11('0x2'));var BPromise=require(_0x7d11('0x3'));var Mustache=require(_0x7d11('0x4'));var util=require(_0x7d11('0x5'));var path=require(_0x7d11('0x6'));var sox=require(_0x7d11('0x7'));var csv=require(_0x7d11('0x8'));var ejs=require(_0x7d11('0x9'));var fs=require('fs');var _=require(_0x7d11('0xa'));var squel=require(_0x7d11('0xb'));var crypto=require(_0x7d11('0xc'));var jsforce=require(_0x7d11('0xd'));var deskjs=require(_0x7d11('0xe'));var toCsv=require(_0x7d11('0x8'));var querystring=require('querystring');var Papa=require(_0x7d11('0xf'));var qs=require(_0x7d11('0x10'));var logger=require(_0x7d11('0x11'))('api');var utils=require(_0x7d11('0x12'));var config=require(_0x7d11('0x13'));var db=require(_0x7d11('0x14'))['db'];var jayson=require('jayson/promise');var client=jayson[_0x7d11('0x15')]['http']({'port':0x232a});function respondWithRpcPromise(_0x58a6fd,_0xb15984,_0x5c6d5d,_0x4a8668){return new BPromise(function(_0xc52a95,_0x48f576){var _0x4767d5=_0x4a8668||client;return _0x4767d5[_0x7d11('0x16')](_0x58a6fd,_0x5c6d5d)['then'](function(_0x401bb7){logger[_0x7d11('0x17')]('Network,\x20%s,\x20%s',_0xb15984,_0x7d11('0x18'));logger[_0x7d11('0x19')](_0x7d11('0x1a'),_0xb15984,_0x7d11('0x18'),JSON[_0x7d11('0x1b')](_0x401bb7));if(_0x401bb7[_0x7d11('0x1c')]){if(_0x401bb7[_0x7d11('0x1c')][_0x7d11('0x1d')]===0x1f4){logger['error'](_0x7d11('0x1e'),_0xb15984,_0x401bb7[_0x7d11('0x1c')][_0x7d11('0x1f')]);return _0x48f576(_0x401bb7[_0x7d11('0x1c')][_0x7d11('0x1f')]);}logger['error'](_0x7d11('0x1e'),_0xb15984,_0x401bb7[_0x7d11('0x1c')]['message']);return _0xc52a95(_0x401bb7['error'][_0x7d11('0x1f')]);}else{logger['info'](_0x7d11('0x1e'),_0xb15984,'request\x20sent');_0xc52a95(_0x401bb7[_0x7d11('0x20')][_0x7d11('0x1f')]);}})[_0x7d11('0x21')](function(_0x46f662){logger[_0x7d11('0x1c')](_0x7d11('0x1e'),_0xb15984,_0x46f662);_0x48f576(_0x46f662);});});}function respondWithStatusCode(_0x4297f8,_0x3d2574){_0x3d2574=_0x3d2574||0xcc;return function(_0x5680cb){if(_0x5680cb){return _0x4297f8[_0x7d11('0x22')](_0x3d2574);}return _0x4297f8['status'](_0x3d2574)['end']();};}function respondWithResult(_0x5c3898,_0x27a818){_0x27a818=_0x27a818||0xc8;return function(_0x3545dc){if(_0x3545dc){return _0x5c3898[_0x7d11('0x23')](_0x27a818)[_0x7d11('0x24')](_0x3545dc);}};}function respondWithFilteredResult(_0x355d14,_0xd938df){return function(_0x282e5c){if(_0x282e5c){var _0x1c1edd=_0x282e5c['count'],_0x5e2f2f=_0xd938df['offset'],_0x36c2b4=_0xd938df[_0x7d11('0x25')]+_0xd938df['limit'],_0x577ca9;if(_0x36c2b4>=_0x1c1edd){_0x36c2b4=_0x1c1edd;_0x577ca9=0xc8;}else{_0x577ca9=0xce;}_0x355d14[_0x7d11('0x23')](_0x577ca9);return _0x355d14[_0x7d11('0x26')](_0x7d11('0x27'),_0x5e2f2f+'-'+_0x36c2b4+'/'+_0x1c1edd)['json'](_0x282e5c);}return null;};}function patchUpdates(_0x46f76a){return function(_0x3bb9b8){try{jsonpatch[_0x7d11('0x28')](_0x3bb9b8,_0x46f76a,!![]);}catch(_0x5d38dd){return BPromise[_0x7d11('0x29')](_0x5d38dd);}return _0x3bb9b8[_0x7d11('0x2a')]();};}function saveUpdates(_0x18c049,_0x38f1be){return function(_0x4c7d6a){if(_0x4c7d6a){return _0x4c7d6a[_0x7d11('0x2b')](_0x18c049)['then'](function(_0x1bc218){return _0x1bc218;});}return null;};}function removeEntity(_0x509164,_0x31866d){return function(_0xba4e80){if(_0xba4e80){return _0xba4e80[_0x7d11('0x2c')]()['then'](function(){_0x509164['status'](0xcc)[_0x7d11('0x2d')]();});}};}function handleEntityNotFound(_0x1ed210,_0x5d540e){return function(_0x388b84){if(!_0x388b84){_0x1ed210[_0x7d11('0x22')](0x194);}return _0x388b84;};}function handleError(_0x3eff9c,_0x53ec4c){_0x53ec4c=_0x53ec4c||0x1f4;return function(_0x9c6609){logger['error'](_0x9c6609['stack']);if(_0x9c6609[_0x7d11('0x2e')]){delete _0x9c6609['name'];}_0x3eff9c[_0x7d11('0x23')](_0x53ec4c)[_0x7d11('0x2f')](_0x9c6609);};}exports[_0x7d11('0x30')]=function(_0x35b997,_0x4b2500){var _0x11d9e2={},_0x1f282b={},_0x55a029={'count':0x0,'rows':[]};var _0x57aa8a=db[_0x7d11('0x31')][_0x7d11('0x32')];_0x1f282b['model']=_[_0x7d11('0x33')](_0x57aa8a);var _0x5ac591={'dateStart':_0x35b997['query'][_0x7d11('0x34')],'dateEnd':_0x35b997['query']['dateEnd']};delete _0x35b997[_0x7d11('0x35')][_0x7d11('0x34')];delete _0x35b997[_0x7d11('0x35')][_0x7d11('0x36')];_0x1f282b[_0x7d11('0x35')]=_[_0x7d11('0x33')](_0x35b997[_0x7d11('0x35')]);_0x1f282b[_0x7d11('0x37')]=_[_0x7d11('0x38')](_0x1f282b[_0x7d11('0x39')],_0x1f282b[_0x7d11('0x35')]);_0x11d9e2[_0x7d11('0x3a')]=_['intersection'](_0x1f282b[_0x7d11('0x39')],qs['fields'](_0x35b997[_0x7d11('0x35')][_0x7d11('0x3b')]));_0x11d9e2[_0x7d11('0x3a')]=_0x11d9e2[_0x7d11('0x3a')]['length']?_0x11d9e2[_0x7d11('0x3a')]:_0x1f282b[_0x7d11('0x39')];if(!_0x35b997[_0x7d11('0x35')][_0x7d11('0x3c')]('nolimit')){_0x11d9e2[_0x7d11('0x3d')]=qs['limit'](_0x35b997[_0x7d11('0x35')]['limit']);_0x11d9e2[_0x7d11('0x25')]=qs[_0x7d11('0x25')](_0x35b997[_0x7d11('0x35')][_0x7d11('0x25')]);}_0x11d9e2['order']=qs['sort'](_0x35b997[_0x7d11('0x35')][_0x7d11('0x3e')]);_0x11d9e2['where']=qs[_0x7d11('0x37')](_[_0x7d11('0x3f')](_0x35b997[_0x7d11('0x35')],_0x1f282b[_0x7d11('0x37')]));if(_0x5ac591[_0x7d11('0x34')]){if(_0x5ac591[_0x7d11('0x36')]){_0x5ac591['dateEnd']=moment(_0x5ac591[_0x7d11('0x36')])['add'](0x1,_0x7d11('0x40'));}else{_0x5ac591[_0x7d11('0x36')]=moment(_0x5ac591[_0x7d11('0x34')])[_0x7d11('0x41')](0x1,_0x7d11('0x40'));}_[_0x7d11('0x42')](_0x11d9e2['where'],{'createdAt':{'$gte':_0x5ac591['dateStart'],'$lte':_0x5ac591['dateEnd']}});}if(_0x35b997[_0x7d11('0x35')][_0x7d11('0x43')]){_0x11d9e2[_0x7d11('0x44')]=_[_0x7d11('0x42')](_0x11d9e2[_0x7d11('0x44')],{'$or':_['map'](_0x11d9e2[_0x7d11('0x3a')],function(_0x1bc7d3){var _0x4e179f={};_0x4e179f[_0x1bc7d3]={'$like':'%'+_0x35b997[_0x7d11('0x35')][_0x7d11('0x43')]+'%'};return _0x4e179f;})});}_0x11d9e2=_[_0x7d11('0x42')]({},_0x11d9e2,_0x35b997['options']);var _0x30358a={'where':_0x11d9e2[_0x7d11('0x44')]};return db[_0x7d11('0x31')]['count'](_0x30358a)[_0x7d11('0x45')](function(_0x4972e7){_0x55a029[_0x7d11('0x46')]=_0x4972e7;if(_0x35b997[_0x7d11('0x35')][_0x7d11('0x47')]){_0x11d9e2[_0x7d11('0x48')]=[{'all':!![]}];}return db[_0x7d11('0x31')][_0x7d11('0x49')](_0x11d9e2);})[_0x7d11('0x45')](function(_0x193631){_0x55a029[_0x7d11('0x4a')]=_0x193631;return _0x55a029;})['then'](respondWithFilteredResult(_0x4b2500,_0x11d9e2))['catch'](handleError(_0x4b2500,null));};exports['show']=function(_0x10c0e9,_0x1e5bb5){var _0x20297a={'raw':!![],'where':{'id':_0x10c0e9[_0x7d11('0x4b')]['id']}},_0x18ae0e={};_0x18ae0e[_0x7d11('0x39')]=_[_0x7d11('0x33')](db[_0x7d11('0x31')][_0x7d11('0x32')]);_0x18ae0e[_0x7d11('0x35')]=_[_0x7d11('0x33')](_0x10c0e9[_0x7d11('0x35')]);_0x18ae0e['filters']=_[_0x7d11('0x38')](_0x18ae0e[_0x7d11('0x39')],_0x18ae0e[_0x7d11('0x35')]);_0x20297a['attributes']=_['intersection'](_0x18ae0e[_0x7d11('0x39')],qs[_0x7d11('0x3b')](_0x10c0e9[_0x7d11('0x35')]['fields']));_0x20297a['attributes']=_0x20297a[_0x7d11('0x3a')][_0x7d11('0x4c')]?_0x20297a['attributes']:_0x18ae0e[_0x7d11('0x39')];if(_0x10c0e9[_0x7d11('0x35')][_0x7d11('0x47')]){_0x20297a[_0x7d11('0x48')]=[{'all':!![]}];}_0x20297a=_['merge']({},_0x20297a,_0x10c0e9[_0x7d11('0x4d')]);return db[_0x7d11('0x31')][_0x7d11('0x4e')](_0x20297a)['then'](handleEntityNotFound(_0x1e5bb5,null))['then'](respondWithResult(_0x1e5bb5,null))[_0x7d11('0x21')](handleError(_0x1e5bb5,null));};exports[_0x7d11('0x4f')]=function(_0x20a85c,_0x1129db,_0x2d873f){var _0x4c7d7a;return db[_0x7d11('0x50')][_0x7d11('0x51')](function(_0x2f5d5a){return db[_0x7d11('0x31')]['create'](_0x20a85c['body'],{'raw':!![]})[_0x7d11('0x45')](function(_0x1958a8){_0x4c7d7a=_0x1958a8;return db[_0x7d11('0x31')][_0x7d11('0x49')]({'where':{'type':_0x20a85c[_0x7d11('0x52')][_0x7d11('0x53')]},'raw':!![]});})[_0x7d11('0x45')](function(_0x3d6271){var _0x3b3383=fs[_0x7d11('0x54')](path['join'](config['root'],'server/files/templates/network.ejs'),_0x7d11('0x55'));var _0xbb3072=ejs[_0x7d11('0x56')](_0x3b3383,{'networks':_0x3d6271||[]});fs['writeFileSync'](util[_0x7d11('0x57')](_0x7d11('0x58'),_0x20a85c[_0x7d11('0x52')][_0x7d11('0x53')][_0x7d11('0x59')]()),_0xbb3072);})[_0x7d11('0x45')](function(){return respondWithRpcPromise('Reload',_0x7d11('0x4f'),{'module':_0x7d11('0x5a')});})[_0x7d11('0x45')](function(){return _0x4c7d7a;});})['then'](respondWithResult(_0x1129db,0xc9))['catch'](handleError(_0x1129db,null));};exports['update']=function(_0x5a88f4,_0x3ce636,_0x5096c2){var _0x4e7295;return db['sequelize'][_0x7d11('0x51')](function(_0x12f05b){return db[_0x7d11('0x31')][_0x7d11('0x4e')]({'where':{'id':_0x5a88f4[_0x7d11('0x4b')]['id']}})[_0x7d11('0x45')](handleEntityNotFound(_0x3ce636,null))['then'](saveUpdates(_0x5a88f4[_0x7d11('0x52')],null))['then'](function(_0x34aab4){if(_0x34aab4){_0x4e7295=_0x34aab4;return db['Network'][_0x7d11('0x49')]({'where':{'type':_0x4e7295[_0x7d11('0x53')]},'raw':!![]});}return null;})['then'](function(_0x3448bd){if(_0x3448bd){var _0x49c9b6=fs[_0x7d11('0x54')](path[_0x7d11('0x5b')](config['root'],'server/files/templates/network.ejs'),_0x7d11('0x55'));var _0x23b502=ejs[_0x7d11('0x56')](_0x49c9b6,{'networks':_0x3448bd||[]});fs[_0x7d11('0x5c')](util[_0x7d11('0x57')]('/etc/asterisk/sip_xcally_%s.conf',_0x4e7295[_0x7d11('0x53')]['toLowerCase']()),_0x23b502);return respondWithRpcPromise(_0x7d11('0x5d'),_0x7d11('0x2b'),{'module':_0x7d11('0x5a')});}return null;})[_0x7d11('0x45')](function(_0x4df2da){if(_0x4df2da){return _0x4e7295;}return null;});})[_0x7d11('0x45')](respondWithResult(_0x3ce636,null))['catch'](handleError(_0x3ce636,null));};exports[_0x7d11('0x2c')]=function(_0x366f5e,_0x19015f,_0xc8402c){var _0xbfb03f;return db[_0x7d11('0x31')][_0x7d11('0x4e')]({'where':{'id':_0x366f5e[_0x7d11('0x4b')]['id']}})[_0x7d11('0x45')](function(_0x3f8512){_0xbfb03f=_0x3f8512;return _0x3f8512;})[_0x7d11('0x45')](handleEntityNotFound(_0x19015f,null))[_0x7d11('0x45')](removeEntity(_0x19015f,null))[_0x7d11('0x45')](function(){if(_0xbfb03f){return db[_0x7d11('0x31')]['findAll']({'where':{'type':_0xbfb03f[_0x7d11('0x53')]},'raw':!![]});}})['then'](function(_0x371869){if(_0x371869){var _0x4c113b=fs[_0x7d11('0x54')](path[_0x7d11('0x5b')](config[_0x7d11('0x5e')],_0x7d11('0x5f')),'utf8');var _0x529db8=ejs[_0x7d11('0x56')](_0x4c113b,{'networks':_0x371869||[]});fs[_0x7d11('0x5c')](util[_0x7d11('0x57')]('/etc/asterisk/sip_xcally_%s.conf',_0xbfb03f[_0x7d11('0x53')][_0x7d11('0x59')]()),_0x529db8);return respondWithRpcPromise(_0x7d11('0x5d'),_0x7d11('0x2c'),{'module':_0x7d11('0x5a')});}})[_0x7d11('0x21')](handleError(_0x19015f,null));};
\ No newline at end of file
+var _0x0424=['debug','Network,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','sendStatus','status','end','count','offset','limit','Content-Range','json','apply','save','update','stack','name','index','Network','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','map','filter','includeAll','include','findAll','params','options','find','catch','create','sequelize','transaction','body','type','readFileSync','root','server/files/templates/network.ejs','utf8','render','writeFileSync','/etc/asterisk/sip_xcally_%s.conf','Reload','chan_sip.so','format','toLowerCase','destroy','join','moment','bluebird','mustache','util','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','../../config/logger','api','../../config/utils','../../mysqldb','jayson/promise','client','http','then','info','Network,\x20%s,\x20%s','request\x20sent'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x0424,0x159));var _0x4042=function(_0x3ea4ce,_0x6bf6f1){_0x3ea4ce=_0x3ea4ce-0x0;var _0x36cf6e=_0x0424[_0x3ea4ce];return _0x36cf6e;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x4042('0x0'));var BPromise=require(_0x4042('0x1'));var Mustache=require(_0x4042('0x2'));var util=require(_0x4042('0x3'));var path=require('path');var sox=require(_0x4042('0x4'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x4042('0x5'));var squel=require(_0x4042('0x6'));var crypto=require(_0x4042('0x7'));var jsforce=require(_0x4042('0x8'));var deskjs=require(_0x4042('0x9'));var toCsv=require(_0x4042('0xa'));var querystring=require(_0x4042('0xb'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0x4042('0xc'))(_0x4042('0xd'));var utils=require(_0x4042('0xe'));var config=require('../../config/environment');var db=require(_0x4042('0xf'))['db'];var jayson=require(_0x4042('0x10'));var client=jayson[_0x4042('0x11')][_0x4042('0x12')]({'port':0x232a});function respondWithRpcPromise(_0x1c2984,_0x424961,_0x380aa0,_0x3b5a73){return new BPromise(function(_0x4af3ba,_0x2c06ae){var _0x357838=_0x3b5a73||client;return _0x357838['request'](_0x1c2984,_0x380aa0)[_0x4042('0x13')](function(_0x4d3cef){logger[_0x4042('0x14')](_0x4042('0x15'),_0x424961,_0x4042('0x16'));logger[_0x4042('0x17')](_0x4042('0x18'),_0x424961,'request\x20sent',JSON[_0x4042('0x19')](_0x4d3cef));if(_0x4d3cef[_0x4042('0x1a')]){if(_0x4d3cef['error'][_0x4042('0x1b')]===0x1f4){logger[_0x4042('0x1a')](_0x4042('0x15'),_0x424961,_0x4d3cef[_0x4042('0x1a')][_0x4042('0x1c')]);return _0x2c06ae(_0x4d3cef[_0x4042('0x1a')][_0x4042('0x1c')]);}logger[_0x4042('0x1a')](_0x4042('0x15'),_0x424961,_0x4d3cef['error'][_0x4042('0x1c')]);return _0x4af3ba(_0x4d3cef['error'][_0x4042('0x1c')]);}else{logger['info'](_0x4042('0x15'),_0x424961,_0x4042('0x16'));_0x4af3ba(_0x4d3cef[_0x4042('0x1d')][_0x4042('0x1c')]);}})['catch'](function(_0xb72021){logger[_0x4042('0x1a')](_0x4042('0x15'),_0x424961,_0xb72021);_0x2c06ae(_0xb72021);});});}function respondWithStatusCode(_0xd1ddb,_0x51a1d4){_0x51a1d4=_0x51a1d4||0xcc;return function(_0x42b518){if(_0x42b518){return _0xd1ddb[_0x4042('0x1e')](_0x51a1d4);}return _0xd1ddb[_0x4042('0x1f')](_0x51a1d4)[_0x4042('0x20')]();};}function respondWithResult(_0x352631,_0x548093){_0x548093=_0x548093||0xc8;return function(_0x1f9d4a){if(_0x1f9d4a){return _0x352631[_0x4042('0x1f')](_0x548093)['json'](_0x1f9d4a);}};}function respondWithFilteredResult(_0x1daee8,_0x5877d3){return function(_0x271b82){if(_0x271b82){var _0x2c5fcf=_0x271b82[_0x4042('0x21')],_0x3f5a64=_0x5877d3[_0x4042('0x22')],_0x5d5c6d=_0x5877d3[_0x4042('0x22')]+_0x5877d3[_0x4042('0x23')],_0x461c5e;if(_0x5d5c6d>=_0x2c5fcf){_0x5d5c6d=_0x2c5fcf;_0x461c5e=0xc8;}else{_0x461c5e=0xce;}_0x1daee8['status'](_0x461c5e);return _0x1daee8['set'](_0x4042('0x24'),_0x3f5a64+'-'+_0x5d5c6d+'/'+_0x2c5fcf)[_0x4042('0x25')](_0x271b82);}return null;};}function patchUpdates(_0x26542c){return function(_0x3e5c02){try{jsonpatch[_0x4042('0x26')](_0x3e5c02,_0x26542c,!![]);}catch(_0x473a0d){return BPromise['reject'](_0x473a0d);}return _0x3e5c02[_0x4042('0x27')]();};}function saveUpdates(_0x1e9bd7,_0x4a6a6e){return function(_0xae26c2){if(_0xae26c2){return _0xae26c2[_0x4042('0x28')](_0x1e9bd7)[_0x4042('0x13')](function(_0x5e072a){return _0x5e072a;});}return null;};}function removeEntity(_0x56d49a,_0x3d1f48){return function(_0x43bd1c){if(_0x43bd1c){return _0x43bd1c['destroy']()[_0x4042('0x13')](function(){_0x56d49a[_0x4042('0x1f')](0xcc)[_0x4042('0x20')]();});}};}function handleEntityNotFound(_0x329921,_0x33769e){return function(_0x349c74){if(!_0x349c74){_0x329921[_0x4042('0x1e')](0x194);}return _0x349c74;};}function handleError(_0x4405c5,_0xdccbb3){_0xdccbb3=_0xdccbb3||0x1f4;return function(_0x5c98ce){logger[_0x4042('0x1a')](_0x5c98ce[_0x4042('0x29')]);if(_0x5c98ce['name']){delete _0x5c98ce[_0x4042('0x2a')];}_0x4405c5[_0x4042('0x1f')](_0xdccbb3)['send'](_0x5c98ce);};}exports[_0x4042('0x2b')]=function(_0x3234fb,_0x1fa700){var _0xaa7c99={},_0x74626b={},_0x1043a2={'count':0x0,'rows':[]};var _0x6f734f=db[_0x4042('0x2c')][_0x4042('0x2d')];_0x74626b[_0x4042('0x2e')]=_[_0x4042('0x2f')](_0x6f734f);var _0x1cd384={'dateStart':_0x3234fb[_0x4042('0x30')][_0x4042('0x31')],'dateEnd':_0x3234fb[_0x4042('0x30')][_0x4042('0x32')]};delete _0x3234fb[_0x4042('0x30')][_0x4042('0x31')];delete _0x3234fb[_0x4042('0x30')][_0x4042('0x32')];_0x74626b[_0x4042('0x30')]=_['keys'](_0x3234fb[_0x4042('0x30')]);_0x74626b[_0x4042('0x33')]=_[_0x4042('0x34')](_0x74626b[_0x4042('0x2e')],_0x74626b['query']);_0xaa7c99[_0x4042('0x35')]=_[_0x4042('0x34')](_0x74626b[_0x4042('0x2e')],qs[_0x4042('0x36')](_0x3234fb[_0x4042('0x30')][_0x4042('0x36')]));_0xaa7c99[_0x4042('0x35')]=_0xaa7c99[_0x4042('0x35')][_0x4042('0x37')]?_0xaa7c99[_0x4042('0x35')]:_0x74626b['model'];if(!_0x3234fb[_0x4042('0x30')][_0x4042('0x38')](_0x4042('0x39'))){_0xaa7c99[_0x4042('0x23')]=qs[_0x4042('0x23')](_0x3234fb[_0x4042('0x30')][_0x4042('0x23')]);_0xaa7c99[_0x4042('0x22')]=qs['offset'](_0x3234fb['query'][_0x4042('0x22')]);}_0xaa7c99[_0x4042('0x3a')]=qs[_0x4042('0x3b')](_0x3234fb[_0x4042('0x30')][_0x4042('0x3b')]);_0xaa7c99[_0x4042('0x3c')]=qs[_0x4042('0x33')](_[_0x4042('0x3d')](_0x3234fb[_0x4042('0x30')],_0x74626b[_0x4042('0x33')]));if(_0x1cd384[_0x4042('0x31')]){if(_0x1cd384[_0x4042('0x32')]){_0x1cd384['dateEnd']=moment(_0x1cd384['dateEnd'])[_0x4042('0x3e')](0x1,_0x4042('0x3f'));}else{_0x1cd384['dateEnd']=moment(_0x1cd384[_0x4042('0x31')])['add'](0x1,_0x4042('0x3f'));}_[_0x4042('0x40')](_0xaa7c99[_0x4042('0x3c')],{'createdAt':{'$gte':_0x1cd384['dateStart'],'$lte':_0x1cd384[_0x4042('0x32')]}});}if(_0x3234fb[_0x4042('0x30')]['filter']){_0xaa7c99[_0x4042('0x3c')]=_[_0x4042('0x40')](_0xaa7c99[_0x4042('0x3c')],{'$or':_[_0x4042('0x41')](_0xaa7c99[_0x4042('0x35')],function(_0x5016e8){var _0x5a0d42={};_0x5a0d42[_0x5016e8]={'$like':'%'+_0x3234fb['query'][_0x4042('0x42')]+'%'};return _0x5a0d42;})});}_0xaa7c99=_[_0x4042('0x40')]({},_0xaa7c99,_0x3234fb['options']);var _0x554abf={'where':_0xaa7c99['where']};return db[_0x4042('0x2c')]['count'](_0x554abf)['then'](function(_0x136622){_0x1043a2[_0x4042('0x21')]=_0x136622;if(_0x3234fb[_0x4042('0x30')][_0x4042('0x43')]){_0xaa7c99[_0x4042('0x44')]=[{'all':!![]}];}return db[_0x4042('0x2c')][_0x4042('0x45')](_0xaa7c99);})[_0x4042('0x13')](function(_0x198209){_0x1043a2['rows']=_0x198209;return _0x1043a2;})['then'](respondWithFilteredResult(_0x1fa700,_0xaa7c99))['catch'](handleError(_0x1fa700,null));};exports['show']=function(_0x34beff,_0x41c0f2){var _0xd898ea={'raw':!![],'where':{'id':_0x34beff[_0x4042('0x46')]['id']}},_0x250434={};_0x250434[_0x4042('0x2e')]=_[_0x4042('0x2f')](db[_0x4042('0x2c')]['rawAttributes']);_0x250434[_0x4042('0x30')]=_[_0x4042('0x2f')](_0x34beff[_0x4042('0x30')]);_0x250434[_0x4042('0x33')]=_[_0x4042('0x34')](_0x250434[_0x4042('0x2e')],_0x250434[_0x4042('0x30')]);_0xd898ea['attributes']=_['intersection'](_0x250434['model'],qs[_0x4042('0x36')](_0x34beff[_0x4042('0x30')]['fields']));_0xd898ea[_0x4042('0x35')]=_0xd898ea[_0x4042('0x35')]['length']?_0xd898ea['attributes']:_0x250434[_0x4042('0x2e')];if(_0x34beff[_0x4042('0x30')][_0x4042('0x43')]){_0xd898ea[_0x4042('0x44')]=[{'all':!![]}];}_0xd898ea=_[_0x4042('0x40')]({},_0xd898ea,_0x34beff[_0x4042('0x47')]);return db[_0x4042('0x2c')][_0x4042('0x48')](_0xd898ea)[_0x4042('0x13')](handleEntityNotFound(_0x41c0f2,null))[_0x4042('0x13')](respondWithResult(_0x41c0f2,null))[_0x4042('0x49')](handleError(_0x41c0f2,null));};exports[_0x4042('0x4a')]=function(_0x3876ce,_0x58f3b7,_0x51d1ba){var _0x1a5d2a;return db[_0x4042('0x4b')][_0x4042('0x4c')](function(_0x4cc2fd){return db[_0x4042('0x2c')]['create'](_0x3876ce[_0x4042('0x4d')],{'raw':!![]})['then'](function(_0x15c491){_0x1a5d2a=_0x15c491;return db[_0x4042('0x2c')][_0x4042('0x45')]({'where':{'type':_0x3876ce[_0x4042('0x4d')][_0x4042('0x4e')]},'raw':!![]});})[_0x4042('0x13')](function(_0x53a3c){var _0x2ea152=fs[_0x4042('0x4f')](path['join'](config[_0x4042('0x50')],_0x4042('0x51')),_0x4042('0x52'));var _0x425c7d=ejs[_0x4042('0x53')](_0x2ea152,{'networks':_0x53a3c||[]});fs[_0x4042('0x54')](util['format'](_0x4042('0x55'),_0x3876ce[_0x4042('0x4d')][_0x4042('0x4e')]['toLowerCase']()),_0x425c7d);})[_0x4042('0x13')](function(){return respondWithRpcPromise(_0x4042('0x56'),_0x4042('0x4a'),{'module':_0x4042('0x57')});})[_0x4042('0x13')](function(){return _0x1a5d2a;});})[_0x4042('0x13')](respondWithResult(_0x58f3b7,0xc9))[_0x4042('0x49')](handleError(_0x58f3b7,null));};exports[_0x4042('0x28')]=function(_0x263332,_0x29ce31,_0x4d8d9f){var _0x398988;return db['sequelize']['transaction'](function(_0x17e620){return db[_0x4042('0x2c')][_0x4042('0x48')]({'where':{'id':_0x263332[_0x4042('0x46')]['id']}})['then'](handleEntityNotFound(_0x29ce31,null))[_0x4042('0x13')](saveUpdates(_0x263332['body'],null))['then'](function(_0x2a3ed5){if(_0x2a3ed5){_0x398988=_0x2a3ed5;return db['Network'][_0x4042('0x45')]({'where':{'type':_0x398988[_0x4042('0x4e')]},'raw':!![]});}return null;})[_0x4042('0x13')](function(_0x556154){if(_0x556154){var _0x19ff15=fs[_0x4042('0x4f')](path['join'](config[_0x4042('0x50')],_0x4042('0x51')),_0x4042('0x52'));var _0x48d0a8=ejs['render'](_0x19ff15,{'networks':_0x556154||[]});fs['writeFileSync'](util[_0x4042('0x58')](_0x4042('0x55'),_0x398988['type'][_0x4042('0x59')]()),_0x48d0a8);return respondWithRpcPromise(_0x4042('0x56'),_0x4042('0x28'),{'module':_0x4042('0x57')});}return null;})[_0x4042('0x13')](function(_0x11efec){if(_0x11efec){return _0x398988;}return null;});})[_0x4042('0x13')](respondWithResult(_0x29ce31,null))['catch'](handleError(_0x29ce31,null));};exports[_0x4042('0x5a')]=function(_0x12cd09,_0x148661,_0x533d04){var _0x56a5c4;return db[_0x4042('0x2c')]['find']({'where':{'id':_0x12cd09[_0x4042('0x46')]['id']}})[_0x4042('0x13')](function(_0x196dee){_0x56a5c4=_0x196dee;return _0x196dee;})[_0x4042('0x13')](handleEntityNotFound(_0x148661,null))[_0x4042('0x13')](removeEntity(_0x148661,null))[_0x4042('0x13')](function(){if(_0x56a5c4){return db['Network'][_0x4042('0x45')]({'where':{'type':_0x56a5c4[_0x4042('0x4e')]},'raw':!![]});}})[_0x4042('0x13')](function(_0x4b2c5f){if(_0x4b2c5f){var _0x1f01f5=fs['readFileSync'](path[_0x4042('0x5b')](config['root'],_0x4042('0x51')),'utf8');var _0x1a70e8=ejs[_0x4042('0x53')](_0x1f01f5,{'networks':_0x4b2c5f||[]});fs[_0x4042('0x54')](util[_0x4042('0x58')](_0x4042('0x55'),_0x56a5c4['type'][_0x4042('0x59')]()),_0x1a70e8);return respondWithRpcPromise(_0x4042('0x56'),_0x4042('0x5a'),{'module':_0x4042('0x57')});}})[_0x4042('0x49')](handleError(_0x148661,null));};
\ No newline at end of file
index cbf31a1..ae37ba5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda7a=['request-promise','./network.attributes','define','Network','network','lodash','util','../../config/logger','api','moment'];(function(_0x36a28b,_0x2345d9){var _0x400857=function(_0x5b6bf4){while(--_0x5b6bf4){_0x36a28b['push'](_0x36a28b['shift']());}};_0x400857(++_0x2345d9);}(_0xda7a,0xaf));var _0xada7=function(_0x2f2e39,_0x173f01){_0x2f2e39=_0x2f2e39-0x0;var _0x5eaa86=_0xda7a[_0x2f2e39];return _0x5eaa86;};'use strict';var _=require(_0xada7('0x0'));var util=require(_0xada7('0x1'));var logger=require(_0xada7('0x2'))(_0xada7('0x3'));var moment=require(_0xada7('0x4'));var BPromise=require('bluebird');var rp=require(_0xada7('0x5'));var attributes=require(_0xada7('0x6'));module['exports']=function(_0x1e12ff,_0x59c242){return _0x1e12ff[_0xada7('0x7')](_0xada7('0x8'),attributes,{'tableName':_0xada7('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe6a8=['request-promise','Network','network','lodash','util','api','bluebird'];(function(_0x15205c,_0x3571d6){var _0x3eb7c8=function(_0x4bbed0){while(--_0x4bbed0){_0x15205c['push'](_0x15205c['shift']());}};_0x3eb7c8(++_0x3571d6);}(_0xe6a8,0xab));var _0x8e6a=function(_0x266125,_0xdf9c44){_0x266125=_0x266125-0x0;var _0x4fd88c=_0xe6a8[_0x266125];return _0x4fd88c;};'use strict';var _=require(_0x8e6a('0x0'));var util=require(_0x8e6a('0x1'));var logger=require('../../config/logger')(_0x8e6a('0x2'));var moment=require('moment');var BPromise=require(_0x8e6a('0x3'));var rp=require(_0x8e6a('0x4'));var attributes=require('./network.attributes');module['exports']=function(_0x3aead1,_0x50b3df){return _0x3aead1['define'](_0x8e6a('0x5'),attributes,{'tableName':_0x8e6a('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 00dc26b..530b940 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0c0d=['bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','client','request','info','Network,\x20%s,\x20%s','request\x20sent','debug','Network,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','moment'];(function(_0x26c18d,_0x29eb71){var _0x43a9ac=function(_0x891b8e){while(--_0x891b8e){_0x26c18d['push'](_0x26c18d['shift']());}};_0x43a9ac(++_0x29eb71);}(_0x0c0d,0xbc));var _0xd0c0=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x0c0d[_0x2dafbe];return _0x58a45a;};'use strict';var _=require(_0xd0c0('0x0'));var util=require('util');var moment=require(_0xd0c0('0x1'));var BPromise=require(_0xd0c0('0x2'));var rs=require(_0xd0c0('0x3'));var fs=require('fs');var db=require(_0xd0c0('0x4'))['db'];var utils=require(_0xd0c0('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0xd0c0('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xd0c0('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0xb6fe78,_0x32b0bb,_0x22dadd){return new BPromise(function(_0x2cded4,_0x136e86){return client[_0xd0c0('0x8')](_0xb6fe78,_0x22dadd)['then'](function(_0x69c4d4){logger[_0xd0c0('0x9')](_0xd0c0('0xa'),_0x32b0bb,_0xd0c0('0xb'));logger[_0xd0c0('0xc')](_0xd0c0('0xd'),_0x32b0bb,_0xd0c0('0xb'),JSON['stringify'](_0x69c4d4));if(_0x69c4d4[_0xd0c0('0xe')]){if(_0x69c4d4[_0xd0c0('0xe')][_0xd0c0('0xf')]===0x1f4){logger[_0xd0c0('0xe')](_0xd0c0('0xa'),_0x32b0bb,_0x69c4d4['error'][_0xd0c0('0x10')]);return _0x136e86(_0x69c4d4[_0xd0c0('0xe')][_0xd0c0('0x10')]);}logger[_0xd0c0('0xe')]('Network,\x20%s,\x20%s',_0x32b0bb,_0x69c4d4[_0xd0c0('0xe')][_0xd0c0('0x10')]);return _0x2cded4(_0x69c4d4[_0xd0c0('0xe')][_0xd0c0('0x10')]);}else{logger[_0xd0c0('0x9')](_0xd0c0('0xa'),_0x32b0bb,_0xd0c0('0xb'));_0x2cded4(_0x69c4d4[_0xd0c0('0x11')][_0xd0c0('0x10')]);}})[_0xd0c0('0x12')](function(_0x1cc99c){logger['error']('Network,\x20%s,\x20%s',_0x32b0bb,_0x1cc99c);_0x136e86(_0x1cc99c);});});}
\ No newline at end of file
+var _0xc3d9=['then','info','Network,\x20%s,\x20%s','request\x20sent','debug','Network,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','lodash','util','bluebird','randomstring','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','request'];(function(_0xcdfdb2,_0x151157){var _0x21f715=function(_0x23cc1b){while(--_0x23cc1b){_0xcdfdb2['push'](_0xcdfdb2['shift']());}};_0x21f715(++_0x151157);}(_0xc3d9,0xdd));var _0x9c3d=function(_0x4b4d43,_0x1590f7){_0x4b4d43=_0x4b4d43-0x0;var _0x5706ba=_0xc3d9[_0x4b4d43];return _0x5706ba;};'use strict';var _=require(_0x9c3d('0x0'));var util=require(_0x9c3d('0x1'));var moment=require('moment');var BPromise=require(_0x9c3d('0x2'));var rs=require(_0x9c3d('0x3'));var fs=require('fs');var db=require(_0x9c3d('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x9c3d('0x5'))('rpc');var config=require(_0x9c3d('0x6'));var jayson=require(_0x9c3d('0x7'));var client=jayson[_0x9c3d('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x530d33,_0x592035,_0x74c482){return new BPromise(function(_0x290664,_0x48716f){return client[_0x9c3d('0x9')](_0x530d33,_0x74c482)[_0x9c3d('0xa')](function(_0x2f5d20){logger[_0x9c3d('0xb')](_0x9c3d('0xc'),_0x592035,_0x9c3d('0xd'));logger[_0x9c3d('0xe')](_0x9c3d('0xf'),_0x592035,_0x9c3d('0xd'),JSON[_0x9c3d('0x10')](_0x2f5d20));if(_0x2f5d20[_0x9c3d('0x11')]){if(_0x2f5d20['error'][_0x9c3d('0x12')]===0x1f4){logger[_0x9c3d('0x11')](_0x9c3d('0xc'),_0x592035,_0x2f5d20[_0x9c3d('0x11')][_0x9c3d('0x13')]);return _0x48716f(_0x2f5d20[_0x9c3d('0x11')][_0x9c3d('0x13')]);}logger[_0x9c3d('0x11')](_0x9c3d('0xc'),_0x592035,_0x2f5d20[_0x9c3d('0x11')]['message']);return _0x290664(_0x2f5d20[_0x9c3d('0x11')][_0x9c3d('0x13')]);}else{logger[_0x9c3d('0xb')](_0x9c3d('0xc'),_0x592035,_0x9c3d('0xd'));_0x290664(_0x2f5d20['result']['message']);}})[_0x9c3d('0x14')](function(_0x2f371f){logger[_0x9c3d('0x11')]('Network,\x20%s,\x20%s',_0x592035,_0x2f371f);_0x48716f(_0x2f371f);});});}
\ No newline at end of file
index 9e1b26d..0a78068 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5af0=['getAnswers','/:id/applications','getApplications','/:id/users','getAgents','post','addDisposition','addAnswer','/:id/notify','notify','addApplications','addAgents','/:id/send','send','put','update','destroy','removeDispositions','delete','removeAnswers','exports','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelAccount.controller','isAuthenticated','index','get','/:id','/:id/dispositions','getDispositions','/:id/canned_answers'];(function(_0x413428,_0x4ed762){var _0x16a4d1=function(_0x557a1b){while(--_0x557a1b){_0x413428['push'](_0x413428['shift']());}};_0x16a4d1(++_0x4ed762);}(_0x5af0,0x169));var _0x05af=function(_0x222d81,_0x179c63){_0x222d81=_0x222d81-0x0;var _0x1d3d37=_0x5af0[_0x222d81];return _0x1d3d37;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x05af('0x0'));var express=require(_0x05af('0x1'));var router=express['Router']();var auth=require(_0x05af('0x2'));var interaction=require(_0x05af('0x3'));var config=require(_0x05af('0x4'));var controller=require(_0x05af('0x5'));router['get']('/',auth[_0x05af('0x6')](),controller[_0x05af('0x7')]);router[_0x05af('0x8')]('/describe',auth[_0x05af('0x6')](),controller['describe']);router[_0x05af('0x8')](_0x05af('0x9'),auth[_0x05af('0x6')](),controller['show']);router['get'](_0x05af('0xa'),auth[_0x05af('0x6')](),controller[_0x05af('0xb')]);router[_0x05af('0x8')](_0x05af('0xc'),auth[_0x05af('0x6')](),controller[_0x05af('0xd')]);router['get'](_0x05af('0xe'),auth['isAuthenticated'](),controller[_0x05af('0xf')]);router[_0x05af('0x8')]('/:id/interactions',auth[_0x05af('0x6')](),controller['getInteractions']);router['get'](_0x05af('0x10'),auth['isAuthenticated'](),controller[_0x05af('0x11')]);router[_0x05af('0x12')]('/',auth[_0x05af('0x6')](),controller['create']);router[_0x05af('0x12')]('/:id/dispositions',auth[_0x05af('0x6')](),controller[_0x05af('0x13')]);router[_0x05af('0x12')](_0x05af('0xc'),auth['isAuthenticated'](),controller[_0x05af('0x14')]);router[_0x05af('0x12')](_0x05af('0x15'),controller[_0x05af('0x16')]);router[_0x05af('0x12')]('/:id/applications',auth[_0x05af('0x6')](),controller[_0x05af('0x17')]);router[_0x05af('0x12')](_0x05af('0x10'),auth[_0x05af('0x6')](),controller[_0x05af('0x18')]);router[_0x05af('0x12')](_0x05af('0x19'),auth[_0x05af('0x6')](),controller[_0x05af('0x1a')]);router[_0x05af('0x1b')](_0x05af('0x9'),auth[_0x05af('0x6')](),controller[_0x05af('0x1c')]);router['delete'](_0x05af('0x9'),auth[_0x05af('0x6')](),controller[_0x05af('0x1d')]);router['delete'](_0x05af('0xa'),auth['isAuthenticated'](),controller[_0x05af('0x1e')]);router[_0x05af('0x1f')]('/:id/canned_answers',auth[_0x05af('0x6')](),controller[_0x05af('0x20')]);router['delete'](_0x05af('0x10'),auth[_0x05af('0x6')](),controller['removeAgents']);module[_0x05af('0x21')]=router;
\ No newline at end of file
+var _0x8ecb=['exports','multer','util','express','Router','../../components/interaction/service','../../config/environment','./openchannelAccount.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/dispositions','/:id/canned_answers','getAnswers','/:id/applications','getInteractions','/:id/users','getAgents','post','create','addDisposition','addAnswer','/:id/notify','notify','addApplications','/:id/send','send','put','update','delete','destroy','removeAnswers','removeAgents'];(function(_0x38f0a5,_0x1ac7aa){var _0x538862=function(_0x12ea76){while(--_0x12ea76){_0x38f0a5['push'](_0x38f0a5['shift']());}};_0x538862(++_0x1ac7aa);}(_0x8ecb,0x198));var _0xb8ec=function(_0x55e08b,_0x421620){_0x55e08b=_0x55e08b-0x0;var _0xd1a7ff=_0x8ecb[_0x55e08b];return _0xd1a7ff;};'use strict';var multer=require(_0xb8ec('0x0'));var util=require(_0xb8ec('0x1'));var path=require('path');var express=require(_0xb8ec('0x2'));var router=express[_0xb8ec('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xb8ec('0x4'));var config=require(_0xb8ec('0x5'));var controller=require(_0xb8ec('0x6'));router[_0xb8ec('0x7')]('/',auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x9')]);router[_0xb8ec('0x7')](_0xb8ec('0xa'),auth['isAuthenticated'](),controller[_0xb8ec('0xb')]);router[_0xb8ec('0x7')](_0xb8ec('0xc'),auth[_0xb8ec('0x8')](),controller[_0xb8ec('0xd')]);router['get'](_0xb8ec('0xe'),auth[_0xb8ec('0x8')](),controller['getDispositions']);router[_0xb8ec('0x7')](_0xb8ec('0xf'),auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x10')]);router[_0xb8ec('0x7')](_0xb8ec('0x11'),auth[_0xb8ec('0x8')](),controller['getApplications']);router[_0xb8ec('0x7')]('/:id/interactions',auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x12')]);router['get'](_0xb8ec('0x13'),auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x14')]);router[_0xb8ec('0x15')]('/',auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x16')]);router[_0xb8ec('0x15')](_0xb8ec('0xe'),auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x17')]);router[_0xb8ec('0x15')](_0xb8ec('0xf'),auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x18')]);router['post'](_0xb8ec('0x19'),controller[_0xb8ec('0x1a')]);router[_0xb8ec('0x15')](_0xb8ec('0x11'),auth['isAuthenticated'](),controller[_0xb8ec('0x1b')]);router[_0xb8ec('0x15')](_0xb8ec('0x13'),auth[_0xb8ec('0x8')](),controller['addAgents']);router[_0xb8ec('0x15')](_0xb8ec('0x1c'),auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x1d')]);router[_0xb8ec('0x1e')]('/:id',auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x1f')]);router[_0xb8ec('0x20')](_0xb8ec('0xc'),auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x21')]);router[_0xb8ec('0x20')](_0xb8ec('0xe'),auth[_0xb8ec('0x8')](),controller['removeDispositions']);router['delete'](_0xb8ec('0xf'),auth[_0xb8ec('0x8')](),controller[_0xb8ec('0x22')]);router['delete'](_0xb8ec('0x13'),auth['isAuthenticated'](),controller[_0xb8ec('0x23')]);module[_0xb8ec('0x24')]=router;
\ No newline at end of file
index 4002f67..a9dd4be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa41a=['TEXT','BOOLEAN','INTEGER','sequelize','randomstring','STRING','name','generate'];(function(_0x1ac595,_0x5d2081){var _0x455fff=function(_0x3043ee){while(--_0x3043ee){_0x1ac595['push'](_0x1ac595['shift']());}};_0x455fff(++_0x5d2081);}(_0xa41a,0x6b));var _0xaa41=function(_0x1962aa,_0x282a58){_0x1962aa=_0x1962aa-0x0;var _0x9dd61c=_0xa41a[_0x1962aa];return _0x9dd61c;};'use strict';var Sequelize=require(_0xaa41('0x0'));var rs=require(_0xaa41('0x1'));module['exports']={'name':{'type':Sequelize[_0xaa41('0x2')],'unique':_0xaa41('0x3'),'allowNull':![]},'description':{'type':Sequelize[_0xaa41('0x2')]},'token':{'type':Sequelize[_0xaa41('0x2')],'defaultValue':function(){return rs[_0xaa41('0x4')]();}},'replyUri':{'type':Sequelize[_0xaa41('0x2')],'validate':{'isUrl':!![]}},'key':{'type':Sequelize[_0xaa41('0x2')],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0xaa41('0x5')],'defaultValue':function(){return'Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}';}},'notificationSound':{'type':Sequelize[_0xaa41('0x6')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xaa41('0x6')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'mapKey':{'type':Sequelize['STRING']},'queueTransfer':{'type':Sequelize[_0xaa41('0x6')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xaa41('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xaa41('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c}};
\ No newline at end of file
+var _0x9c44=['name','generate','TEXT','BOOLEAN','INTEGER','exports','STRING'];(function(_0xc5e681,_0x2906e9){var _0x3947c7=function(_0x315277){while(--_0x315277){_0xc5e681['push'](_0xc5e681['shift']());}};_0x3947c7(++_0x2906e9);}(_0x9c44,0x178));var _0x49c4=function(_0x2064e5,_0x4f6fa2){_0x2064e5=_0x2064e5-0x0;var _0x21a233=_0x9c44[_0x2064e5];return _0x21a233;};'use strict';var Sequelize=require('sequelize');var rs=require('randomstring');module[_0x49c4('0x0')]={'name':{'type':Sequelize[_0x49c4('0x1')],'unique':_0x49c4('0x2'),'allowNull':![]},'description':{'type':Sequelize[_0x49c4('0x1')]},'token':{'type':Sequelize[_0x49c4('0x1')],'defaultValue':function(){return rs[_0x49c4('0x3')]();}},'replyUri':{'type':Sequelize['STRING'],'validate':{'isUrl':!![]}},'key':{'type':Sequelize['STRING'],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0x49c4('0x4')],'defaultValue':function(){return'Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}';}},'notificationSound':{'type':Sequelize[_0x49c4('0x5')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x49c4('0x5')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x49c4('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'mapKey':{'type':Sequelize[_0x49c4('0x1')]},'queueTransfer':{'type':Sequelize[_0x49c4('0x5')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x49c4('0x5')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x49c4('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c}};
\ No newline at end of file
index 9a8c18b..26d1190 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7334=['interaction','get','created','push','close','*,*,*,*','OpenchannelMessage','AttachmentId','User','name','UserId','unshift','agent','waitForTheAssignedAgent','forcedOwnership','Start','startRouting','EventManager','addApplications','findOne','sequelize','OpenchannelApplication','OpenchannelAccountId','bulkCreate','findAndCountAll','priority','getApplications','getInteractions','nolimit','Contact','fullname','internal','Tag','color','tag','addAgents','ids','spread','emit','userOpenchannelAccount:save','removeAgents','isArray','userOpenchannelAccount:remove','getAgents','CmList','user','Messages','dataValues','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','localhost','./openchannelAccount.socket','jayson/promise','http','client','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','offset','Content-Range','apply','reject','save','update','stack','send','index','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','fields','attributes','hasOwnProperty','limit','order','sort','where','pick','add','day','merge','filter','map','options','OpenchannelAccount','count','include','findAll','rows','show','length','includeAll','find','create','body','params','destroy','describe','addDisposition','Disposition','getDispositions','removeDispositions','CannedAnswer','getAnswers','removeAnswers','notify','createdAt','updatedAt','difference','CompanyId','ListId','isNil','from','Sequelize','ValidationError','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','List','CmContact','DESC','Applications','account','applications','Contacts','defaults','contact','firstName','threadId','OpenchannelInteraction','externalUrl','ContactId','lastName'];(function(_0x5cfa6a,_0x4d69e8){var _0x204e10=function(_0x364f3a){while(--_0x364f3a){_0x5cfa6a['push'](_0x5cfa6a['shift']());}};_0x204e10(++_0x4d69e8);}(_0x7334,0x184));var _0x4733=function(_0x3a54,_0x1aa6b6){_0x3a54=_0x3a54-0x0;var _0x4f1548=_0x7334[_0x3a54];return _0x4f1548;};'use strict';var jsonpatch=require(_0x4733('0x0'));var rp=require(_0x4733('0x1'));var moment=require(_0x4733('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x4733('0x3'));var path=require('path');var sox=require(_0x4733('0x4'));var csv=require(_0x4733('0x5'));var ejs=require(_0x4733('0x6'));var fs=require('fs');var _=require(_0x4733('0x7'));var squel=require(_0x4733('0x8'));var crypto=require(_0x4733('0x9'));var jsforce=require(_0x4733('0xa'));var deskjs=require(_0x4733('0xb'));var toCsv=require(_0x4733('0x5'));var querystring=require(_0x4733('0xc'));var Papa=require(_0x4733('0xd'));var qs=require(_0x4733('0xe'));var logger=require(_0x4733('0xf'))(_0x4733('0x10'));var utils=require(_0x4733('0x11'));var config=require(_0x4733('0x12'));var db=require(_0x4733('0x13'))['db'];var socket=require('socket.io-emitter')({'host':_0x4733('0x14'),'port':0x18eb});require(_0x4733('0x15'))['register'](socket);var jayson=require(_0x4733('0x16'));var client=jayson['client'][_0x4733('0x17')]({'port':0x232c});var client9002=jayson[_0x4733('0x18')][_0x4733('0x17')]({'port':0x232a});function respondWithRpcPromise(_0x461f74,_0x100ecd,_0x1c146c,_0x2c0f6b){return new BPromise(function(_0x5e4b06,_0x57e554){var _0x543caf=_0x2c0f6b||client;return _0x543caf[_0x4733('0x19')](_0x461f74,_0x1c146c)[_0x4733('0x1a')](function(_0x2e5b1b){logger[_0x4733('0x1b')](_0x4733('0x1c'),_0x100ecd,_0x4733('0x1d'));logger[_0x4733('0x1e')](_0x4733('0x1f'),_0x100ecd,_0x4733('0x1d'),JSON['stringify'](_0x2e5b1b));if(_0x2e5b1b[_0x4733('0x20')]){if(_0x2e5b1b[_0x4733('0x20')]['code']===0x1f4){logger[_0x4733('0x20')](_0x4733('0x1c'),_0x100ecd,_0x2e5b1b[_0x4733('0x20')][_0x4733('0x21')]);return _0x57e554(_0x2e5b1b['error']['message']);}logger[_0x4733('0x20')](_0x4733('0x1c'),_0x100ecd,_0x2e5b1b['error'][_0x4733('0x21')]);return _0x5e4b06(_0x2e5b1b[_0x4733('0x20')][_0x4733('0x21')]);}else{logger[_0x4733('0x1b')]('OpenchannelAccount,\x20%s,\x20%s',_0x100ecd,_0x4733('0x1d'));_0x5e4b06(_0x2e5b1b[_0x4733('0x22')]['message']);}})[_0x4733('0x23')](function(_0x18da47){logger['error'](_0x4733('0x1c'),_0x100ecd,_0x18da47);_0x57e554(_0x18da47);});});}function respondWithStatusCode(_0x115ce4,_0xa7b8e3){_0xa7b8e3=_0xa7b8e3||0xcc;return function(_0x1a0643){if(_0x1a0643){return _0x115ce4[_0x4733('0x24')](_0xa7b8e3);}return _0x115ce4[_0x4733('0x25')](_0xa7b8e3)[_0x4733('0x26')]();};}function respondWithResult(_0x2bb78f,_0x523697){_0x523697=_0x523697||0xc8;return function(_0x3e6976){if(_0x3e6976){return _0x2bb78f[_0x4733('0x25')](_0x523697)[_0x4733('0x27')](_0x3e6976);}};}function respondWithFilteredResult(_0x2cb247,_0x30ee9b){return function(_0x3bd683){if(_0x3bd683){var _0x24fc0d=_0x3bd683['count'],_0xc3ab0a=_0x30ee9b[_0x4733('0x28')],_0x13bc12=_0x30ee9b['offset']+_0x30ee9b['limit'],_0x23fe6c;if(_0x13bc12>=_0x24fc0d){_0x13bc12=_0x24fc0d;_0x23fe6c=0xc8;}else{_0x23fe6c=0xce;}_0x2cb247[_0x4733('0x25')](_0x23fe6c);return _0x2cb247['set'](_0x4733('0x29'),_0xc3ab0a+'-'+_0x13bc12+'/'+_0x24fc0d)['json'](_0x3bd683);}return null;};}function patchUpdates(_0x4abc0d){return function(_0x517c73){try{jsonpatch[_0x4733('0x2a')](_0x517c73,_0x4abc0d,!![]);}catch(_0x3bfe53){return BPromise[_0x4733('0x2b')](_0x3bfe53);}return _0x517c73[_0x4733('0x2c')]();};}function saveUpdates(_0x4fee4a,_0x538a7c){return function(_0x50f67e){if(_0x50f67e){return _0x50f67e[_0x4733('0x2d')](_0x4fee4a)['then'](function(_0x5a4814){return _0x5a4814;});}return null;};}function removeEntity(_0xd9601,_0x39cf44){return function(_0xa915ce){if(_0xa915ce){return _0xa915ce['destroy']()['then'](function(){_0xd9601[_0x4733('0x25')](0xcc)[_0x4733('0x26')]();});}};}function handleEntityNotFound(_0x22d38a,_0x40923d){return function(_0x41d5d8){if(!_0x41d5d8){_0x22d38a['sendStatus'](0x194);}return _0x41d5d8;};}function handleError(_0x191ff8,_0x1f6739){_0x1f6739=_0x1f6739||0x1f4;return function(_0x3a02ff){logger[_0x4733('0x20')](_0x3a02ff[_0x4733('0x2e')]);if(_0x3a02ff['name']){delete _0x3a02ff['name'];}_0x191ff8[_0x4733('0x25')](_0x1f6739)[_0x4733('0x2f')](_0x3a02ff);};}exports[_0x4733('0x30')]=function(_0xdec1fd,_0xad0b5b){var _0x5e31c8={},_0x33828e={},_0x4855a8={'count':0x0,'rows':[]};var _0x2c32d5=db['OpenchannelAccount'][_0x4733('0x31')];_0x33828e[_0x4733('0x32')]=_[_0x4733('0x33')](_0x2c32d5);var _0x2ec052={'dateStart':_0xdec1fd[_0x4733('0x34')][_0x4733('0x35')],'dateEnd':_0xdec1fd[_0x4733('0x34')][_0x4733('0x36')]};delete _0xdec1fd['query'][_0x4733('0x35')];delete _0xdec1fd['query'][_0x4733('0x36')];_0x33828e[_0x4733('0x34')]=_[_0x4733('0x33')](_0xdec1fd[_0x4733('0x34')]);_0x33828e[_0x4733('0x37')]=_[_0x4733('0x38')](_0x33828e[_0x4733('0x32')],_0x33828e[_0x4733('0x34')]);_0x5e31c8['attributes']=_[_0x4733('0x38')](_0x33828e[_0x4733('0x32')],qs['fields'](_0xdec1fd[_0x4733('0x34')][_0x4733('0x39')]));_0x5e31c8['attributes']=_0x5e31c8[_0x4733('0x3a')]['length']?_0x5e31c8[_0x4733('0x3a')]:_0x33828e['model'];if(!_0xdec1fd[_0x4733('0x34')][_0x4733('0x3b')]('nolimit')){_0x5e31c8['limit']=qs[_0x4733('0x3c')](_0xdec1fd[_0x4733('0x34')]['limit']);_0x5e31c8[_0x4733('0x28')]=qs[_0x4733('0x28')](_0xdec1fd[_0x4733('0x34')][_0x4733('0x28')]);}_0x5e31c8[_0x4733('0x3d')]=qs[_0x4733('0x3e')](_0xdec1fd[_0x4733('0x34')][_0x4733('0x3e')]);_0x5e31c8[_0x4733('0x3f')]=qs[_0x4733('0x37')](_[_0x4733('0x40')](_0xdec1fd[_0x4733('0x34')],_0x33828e[_0x4733('0x37')]));if(_0x2ec052[_0x4733('0x35')]){if(_0x2ec052[_0x4733('0x36')]){_0x2ec052[_0x4733('0x36')]=moment(_0x2ec052[_0x4733('0x36')])[_0x4733('0x41')](0x1,'day');}else{_0x2ec052[_0x4733('0x36')]=moment(_0x2ec052[_0x4733('0x35')])[_0x4733('0x41')](0x1,_0x4733('0x42'));}_[_0x4733('0x43')](_0x5e31c8[_0x4733('0x3f')],{'createdAt':{'$gte':_0x2ec052[_0x4733('0x35')],'$lte':_0x2ec052[_0x4733('0x36')]}});}if(_0xdec1fd[_0x4733('0x34')][_0x4733('0x44')]){_0x5e31c8[_0x4733('0x3f')]=_[_0x4733('0x43')](_0x5e31c8[_0x4733('0x3f')],{'$or':_[_0x4733('0x45')](_0x5e31c8['attributes'],function(_0x555d00){var _0x3a78c5={};_0x3a78c5[_0x555d00]={'$like':'%'+_0xdec1fd[_0x4733('0x34')][_0x4733('0x44')]+'%'};return _0x3a78c5;})});}_0x5e31c8=_[_0x4733('0x43')]({},_0x5e31c8,_0xdec1fd[_0x4733('0x46')]);var _0x2f80a4={'where':_0x5e31c8[_0x4733('0x3f')]};return db[_0x4733('0x47')][_0x4733('0x48')](_0x2f80a4)[_0x4733('0x1a')](function(_0x4d8301){_0x4855a8['count']=_0x4d8301;if(_0xdec1fd['query']['includeAll']){_0x5e31c8[_0x4733('0x49')]=[{'all':!![]}];}return db[_0x4733('0x47')][_0x4733('0x4a')](_0x5e31c8);})[_0x4733('0x1a')](function(_0xf3c650){_0x4855a8[_0x4733('0x4b')]=_0xf3c650;return _0x4855a8;})[_0x4733('0x1a')](respondWithFilteredResult(_0xad0b5b,_0x5e31c8))[_0x4733('0x23')](handleError(_0xad0b5b,null));};exports[_0x4733('0x4c')]=function(_0x1f470f,_0x4ea363){var _0x53d70b={'raw':![],'where':{'id':_0x1f470f['params']['id']}},_0x29c93d={};_0x29c93d[_0x4733('0x32')]=_[_0x4733('0x33')](db[_0x4733('0x47')]['rawAttributes']);_0x29c93d[_0x4733('0x34')]=_[_0x4733('0x33')](_0x1f470f[_0x4733('0x34')]);_0x29c93d[_0x4733('0x37')]=_[_0x4733('0x38')](_0x29c93d[_0x4733('0x32')],_0x29c93d[_0x4733('0x34')]);_0x53d70b[_0x4733('0x3a')]=_[_0x4733('0x38')](_0x29c93d['model'],qs[_0x4733('0x39')](_0x1f470f[_0x4733('0x34')][_0x4733('0x39')]));_0x53d70b['attributes']=_0x53d70b[_0x4733('0x3a')][_0x4733('0x4d')]?_0x53d70b[_0x4733('0x3a')]:_0x29c93d[_0x4733('0x32')];if(_0x1f470f['query'][_0x4733('0x4e')]){_0x53d70b['include']=[{'all':!![]}];}_0x53d70b=_[_0x4733('0x43')]({},_0x53d70b,_0x1f470f[_0x4733('0x46')]);return db[_0x4733('0x47')][_0x4733('0x4f')](_0x53d70b)[_0x4733('0x1a')](handleEntityNotFound(_0x4ea363,null))['then'](respondWithResult(_0x4ea363,null))[_0x4733('0x23')](handleError(_0x4ea363,null));};exports[_0x4733('0x50')]=function(_0x5e4668,_0x54318e){return db[_0x4733('0x47')][_0x4733('0x50')](_0x5e4668[_0x4733('0x51')],{})[_0x4733('0x1a')](respondWithResult(_0x54318e,0xc9))[_0x4733('0x23')](handleError(_0x54318e,null));};exports[_0x4733('0x2d')]=function(_0x37bdab,_0x45bc1b){if(_0x37bdab['body']['id']){delete _0x37bdab['body']['id'];}return db[_0x4733('0x47')]['find']({'where':{'id':_0x37bdab[_0x4733('0x52')]['id']}})[_0x4733('0x1a')](handleEntityNotFound(_0x45bc1b,null))[_0x4733('0x1a')](saveUpdates(_0x37bdab['body'],null))['then'](respondWithResult(_0x45bc1b,null))['catch'](handleError(_0x45bc1b,null));};exports[_0x4733('0x53')]=function(_0x827b87,_0x137abe){return db['OpenchannelAccount'][_0x4733('0x4f')]({'where':{'id':_0x827b87[_0x4733('0x52')]['id']}})[_0x4733('0x1a')](handleEntityNotFound(_0x137abe,null))[_0x4733('0x1a')](removeEntity(_0x137abe,null))[_0x4733('0x23')](handleError(_0x137abe,null));};exports[_0x4733('0x54')]=function(_0x1b115f,_0x59af46){return db[_0x4733('0x47')][_0x4733('0x54')]()['then'](respondWithResult(_0x59af46,null))['catch'](handleError(_0x59af46,null));};exports[_0x4733('0x55')]=function(_0x3761c3,_0x25cafc,_0x1ca20e){if(_0x3761c3[_0x4733('0x51')]['id']){delete _0x3761c3[_0x4733('0x51')]['id'];}return db[_0x4733('0x47')][_0x4733('0x4f')]({'where':{'id':_0x3761c3[_0x4733('0x52')]['id']}})['then'](handleEntityNotFound(_0x25cafc,null))[_0x4733('0x1a')](function(_0x345f13){if(_0x345f13){_0x3761c3[_0x4733('0x51')]['OpnechannelAccountId']=_0x345f13['id'];return db[_0x4733('0x56')]['create'](_0x3761c3[_0x4733('0x51')]);}})[_0x4733('0x1a')](respondWithResult(_0x25cafc,null))[_0x4733('0x23')](handleError(_0x25cafc,null));};exports[_0x4733('0x57')]=function(_0x7ffcf6,_0x40c870,_0x487c43){var _0x137793={'raw':![],'where':{}};var _0x574787={};var _0x15552d={'count':0x0,'rows':[]};return db[_0x4733('0x47')]['findOne']({'where':{'id':_0x7ffcf6[_0x4733('0x52')]['id']}})['then'](handleEntityNotFound(_0x40c870,null))['then'](function(_0x39d393){if(_0x39d393){_0x574787[_0x4733('0x32')]=_[_0x4733('0x33')](db[_0x4733('0x56')][_0x4733('0x31')]);_0x574787[_0x4733('0x34')]=_[_0x4733('0x33')](_0x7ffcf6[_0x4733('0x34')]);_0x574787[_0x4733('0x37')]=_['intersection'](_0x574787['model'],_0x574787['query']);_0x137793[_0x4733('0x3a')]=_[_0x4733('0x38')](_0x574787[_0x4733('0x32')],qs[_0x4733('0x39')](_0x7ffcf6['query'][_0x4733('0x39')]));_0x137793[_0x4733('0x3a')]=_0x137793[_0x4733('0x3a')]['length']?_0x137793[_0x4733('0x3a')]:_0x574787['model'];if(!_0x7ffcf6[_0x4733('0x34')]['hasOwnProperty']('nolimit')){_0x137793[_0x4733('0x3c')]=qs['limit'](_0x7ffcf6[_0x4733('0x34')]['limit']);_0x137793['offset']=qs[_0x4733('0x28')](_0x7ffcf6['query']['offset']);}_0x137793[_0x4733('0x3d')]=qs[_0x4733('0x3e')](_0x7ffcf6[_0x4733('0x34')]['sort']);_0x137793[_0x4733('0x3f')]=qs[_0x4733('0x37')](_[_0x4733('0x40')](_0x7ffcf6[_0x4733('0x34')],_0x574787[_0x4733('0x37')]));_0x137793[_0x4733('0x3f')]['OpenchannelAccountId']=_0x39d393['id'];if(_0x7ffcf6[_0x4733('0x34')][_0x4733('0x44')]){_0x137793[_0x4733('0x3f')]=_['merge'](_0x137793[_0x4733('0x3f')],{'$or':_[_0x4733('0x45')](_0x137793[_0x4733('0x3a')],function(_0xe265ec){var _0x1d2d88={};_0x1d2d88[_0xe265ec]={'$like':'%'+_0x7ffcf6[_0x4733('0x34')][_0x4733('0x44')]+'%'};return _0x1d2d88;})});}_0x137793=_[_0x4733('0x43')]({},_0x137793,_0x7ffcf6['options']);return db['Disposition'][_0x4733('0x48')]({'where':_0x137793['where']})['then'](function(_0x1f52ff){_0x15552d[_0x4733('0x48')]=_0x1f52ff;if(_0x7ffcf6[_0x4733('0x34')][_0x4733('0x4e')]){_0x137793['include']=[{'all':!![]}];}return db[_0x4733('0x56')]['findAll'](_0x137793);})[_0x4733('0x1a')](function(_0x5f1290){_0x15552d['rows']=_0x5f1290;return _0x15552d;});}})[_0x4733('0x1a')](respondWithFilteredResult(_0x40c870,_0x137793))['catch'](handleError(_0x40c870,null));};exports['removeDispositions']=function(_0x58d5ba,_0x416e3f,_0x4b172b){var _0x35a3db;return db[_0x4733('0x47')]['find']({'where':{'id':_0x58d5ba[_0x4733('0x52')]['id']}})['then'](handleEntityNotFound(_0x416e3f,null))['then'](function(_0x3e7e37){if(_0x3e7e37){return _0x3e7e37[_0x4733('0x58')](_0x58d5ba[_0x4733('0x34')]['ids']);}})['then'](respondWithStatusCode(_0x416e3f,null))[_0x4733('0x23')](handleError(_0x416e3f,null));};exports['addAnswer']=function(_0x3fd347,_0x6b6d5d,_0x1e9f9a){if(_0x3fd347[_0x4733('0x51')]['id']){delete _0x3fd347[_0x4733('0x51')]['id'];}return db[_0x4733('0x47')]['find']({'where':{'id':_0x3fd347[_0x4733('0x52')]['id']}})[_0x4733('0x1a')](handleEntityNotFound(_0x6b6d5d,null))[_0x4733('0x1a')](function(_0x363283){if(_0x363283){_0x3fd347['body']['OpenchannelAccountId']=_0x363283['id'];return db[_0x4733('0x59')]['create'](_0x3fd347[_0x4733('0x51')]);}})[_0x4733('0x1a')](respondWithResult(_0x6b6d5d,null))[_0x4733('0x23')](handleError(_0x6b6d5d,null));};exports[_0x4733('0x5a')]=function(_0x19217d,_0x2a14df,_0x701d49){var _0x4a33fd={'raw':![],'where':{}};var _0x23f8a4={};var _0x36e8b0={'count':0x0,'rows':[]};return db['OpenchannelAccount']['findOne']({'where':{'id':_0x19217d[_0x4733('0x52')]['id']}})['then'](handleEntityNotFound(_0x2a14df,null))[_0x4733('0x1a')](function(_0x592a5b){if(_0x592a5b){_0x23f8a4['model']=_[_0x4733('0x33')](db[_0x4733('0x59')][_0x4733('0x31')]);_0x23f8a4[_0x4733('0x34')]=_[_0x4733('0x33')](_0x19217d['query']);_0x23f8a4[_0x4733('0x37')]=_[_0x4733('0x38')](_0x23f8a4[_0x4733('0x32')],_0x23f8a4['query']);_0x4a33fd['attributes']=_['intersection'](_0x23f8a4[_0x4733('0x32')],qs[_0x4733('0x39')](_0x19217d[_0x4733('0x34')][_0x4733('0x39')]));_0x4a33fd[_0x4733('0x3a')]=_0x4a33fd[_0x4733('0x3a')]['length']?_0x4a33fd[_0x4733('0x3a')]:_0x23f8a4[_0x4733('0x32')];if(!_0x19217d[_0x4733('0x34')]['hasOwnProperty']('nolimit')){_0x4a33fd['limit']=qs[_0x4733('0x3c')](_0x19217d['query'][_0x4733('0x3c')]);_0x4a33fd[_0x4733('0x28')]=qs[_0x4733('0x28')](_0x19217d[_0x4733('0x34')]['offset']);}_0x4a33fd[_0x4733('0x3d')]=qs[_0x4733('0x3e')](_0x19217d[_0x4733('0x34')][_0x4733('0x3e')]);_0x4a33fd[_0x4733('0x3f')]=qs[_0x4733('0x37')](_[_0x4733('0x40')](_0x19217d[_0x4733('0x34')],_0x23f8a4['filters']));_0x4a33fd[_0x4733('0x3f')]['OpenchannelAccountId']=_0x592a5b['id'];if(_0x19217d[_0x4733('0x34')][_0x4733('0x44')]){_0x4a33fd[_0x4733('0x3f')]=_['merge'](_0x4a33fd[_0x4733('0x3f')],{'$or':_['map'](_0x4a33fd[_0x4733('0x3a')],function(_0x4f7558){var _0xba365={};_0xba365[_0x4f7558]={'$like':'%'+_0x19217d['query'][_0x4733('0x44')]+'%'};return _0xba365;})});}_0x4a33fd=_[_0x4733('0x43')]({},_0x4a33fd,_0x19217d[_0x4733('0x46')]);return db[_0x4733('0x59')][_0x4733('0x48')]({'where':_0x4a33fd[_0x4733('0x3f')]})['then'](function(_0x4bb981){_0x36e8b0[_0x4733('0x48')]=_0x4bb981;if(_0x19217d[_0x4733('0x34')][_0x4733('0x4e')]){_0x4a33fd[_0x4733('0x49')]=[{'all':!![]}];}return db[_0x4733('0x59')]['findAll'](_0x4a33fd);})[_0x4733('0x1a')](function(_0x5b82ba){_0x36e8b0['rows']=_0x5b82ba;return _0x36e8b0;});}})['then'](respondWithFilteredResult(_0x2a14df,_0x4a33fd))[_0x4733('0x23')](handleError(_0x2a14df,null));};exports[_0x4733('0x5b')]=function(_0x503e9c,_0x1c6de4,_0x71512c){var _0x2738e4;return db['OpenchannelAccount'][_0x4733('0x4f')]({'where':{'id':_0x503e9c['params']['id']}})[_0x4733('0x1a')](handleEntityNotFound(_0x1c6de4,null))['then'](function(_0x390792){if(_0x390792){return _0x390792[_0x4733('0x5b')](_0x503e9c[_0x4733('0x34')]['ids']);}})['then'](respondWithStatusCode(_0x1c6de4,null))[_0x4733('0x23')](handleError(_0x1c6de4,null));};exports[_0x4733('0x5c')]=function(_0x38dc8c,_0x16a853,_0x593daa){var _0x3042ff={'body':_0x38dc8c[_0x4733('0x51')],'channel':'openchannel'};var _0x3bb367=[];var _0x1b0866=[];var _0x28148e={};var _0x5c61ae=![];return db['CmContact']['describe']()[_0x4733('0x1a')](function(_0x374b93){if(!_0x374b93){throw new db['Sequelize']['ValidationError']('no\x20available\x20attributes');}_0x3bb367=_['difference'](_['keys'](_0x374b93),[_0x4733('0x5d'),_0x4733('0x5e')]);_0x1b0866=_[_0x4733('0x5f')](_['keys'](_0x374b93),[_0x4733('0x5d'),_0x4733('0x5e'),_0x4733('0x60'),_0x4733('0x61')]);if(_0x38dc8c[_0x4733('0x51')]['id']){delete _0x38dc8c[_0x4733('0x51')]['id'];}if(_[_0x4733('0x62')](_0x38dc8c[_0x4733('0x51')][_0x4733('0x63')])){throw new db[(_0x4733('0x64'))][(_0x4733('0x65'))]('from\x20is\x20mandatory');}if(_[_0x4733('0x62')](_0x38dc8c[_0x4733('0x51')]['body'])||_0x38dc8c[_0x4733('0x51')][_0x4733('0x51')]===''){throw new db[(_0x4733('0x64'))]['ValidationError'](_0x4733('0x66'));}if(_[_0x4733('0x62')](_0x38dc8c[_0x4733('0x51')][_0x4733('0x67')])){throw new db['Sequelize'][(_0x4733('0x65'))](_0x4733('0x68')+_0x1b0866);}if(!_[_0x4733('0x69')](_0x1b0866,_0x38dc8c[_0x4733('0x51')][_0x4733('0x67')])){throw new db[(_0x4733('0x64'))]['ValidationError'](_0x4733('0x6a')+_0x1b0866);}_0x28148e[_0x38dc8c[_0x4733('0x51')][_0x4733('0x67')]]=_0x38dc8c['body'][_0x4733('0x63')];})[_0x4733('0x1a')](function(){return db[_0x4733('0x47')][_0x4733('0x4f')]({'where':{'id':_0x38dc8c[_0x4733('0x52')]['id']},'include':[{'model':db['CmList'],'as':_0x4733('0x6b'),'include':[{'model':db[_0x4733('0x6c')],'as':'Contacts','where':_0x28148e,'limit':0x1,'order':[[_0x4733('0x5e'),_0x4733('0x6d')]]}]},{'model':db['OpenchannelApplication'],'as':_0x4733('0x6e')}]});})[_0x4733('0x1a')](handleEntityNotFound(_0x16a853,null))[_0x4733('0x1a')](function(_0x2e23d9){if(_0x2e23d9&&_0x2e23d9[_0x4733('0x6b')]){_0x3042ff[_0x4733('0x6f')]=_0x2e23d9;_0x3042ff[_0x4733('0x70')]=_0x2e23d9['Applications'];_0x3042ff['list']=_0x2e23d9[_0x4733('0x6b')];_0x3042ff[_0x4733('0x70')]=_['orderBy'](_0x3042ff[_0x4733('0x70')],['priority'],['asc']);if(_0x3042ff[_0x4733('0x6f')][_0x4733('0x6e')]){delete _0x3042ff[_0x4733('0x6f')][_0x4733('0x6e')];}if(_0x3042ff[_0x4733('0x6f')]['List']&&_0x3042ff[_0x4733('0x6f')][_0x4733('0x6b')][_0x4733('0x71')][_0x4733('0x4d')]){return _0x3042ff[_0x4733('0x6f')][_0x4733('0x6b')][_0x4733('0x71')][0x0];}var _0x1c3f27=_[_0x4733('0x72')](_0x38dc8c[_0x4733('0x51')],{'firstName':_0x38dc8c[_0x4733('0x51')][_0x4733('0x63')],'ListId':_0x2e23d9[_0x4733('0x61')]});_0x1c3f27[_0x38dc8c['body'][_0x4733('0x67')]]=_0x38dc8c[_0x4733('0x51')][_0x4733('0x63')];return db['CmContact']['create'](_0x1c3f27,{'fields':_0x3bb367,'raw':!![]});}})['then'](handleEntityNotFound(_0x16a853,null))[_0x4733('0x1a')](function(_0x5e8868){_0x3042ff[_0x4733('0x73')]=_0x5e8868;if(_0x5e8868){var _0x359c84={'ContactId':_0x5e8868['id'],'OpenchannelAccountId':_0x38dc8c['params']['id'],'from':(_0x5e8868[_0x4733('0x74')]||'')+'\x20'+(_0x5e8868['lastName']||'')};var _0x225ed7={'OpenchannelAccountId':_0x38dc8c[_0x4733('0x52')]['id'],'closed':![]};if(_0x38dc8c[_0x4733('0x51')]['threadId']){_0x225ed7['threadId']=_0x38dc8c['body'][_0x4733('0x75')];return db[_0x4733('0x76')][_0x4733('0x4f')]({'where':_0x225ed7})[_0x4733('0x1a')](function(_0x30cf64){if(_0x30cf64){return[_0x30cf64,![]];}_0x359c84[_0x4733('0x75')]=_0x38dc8c['body'][_0x4733('0x75')];_0x359c84[_0x4733('0x77')]=_0x38dc8c['body'][_0x4733('0x77')];return db[_0x4733('0x76')][_0x4733('0x50')](_0x359c84)[_0x4733('0x1a')](function(_0xff2882){return[_0xff2882,!![]];});});}else{_0x225ed7[_0x4733('0x75')]=null;}_0x225ed7[_0x4733('0x78')]=_0x5e8868['id'];return db[_0x4733('0x76')]['find']({'where':_0x225ed7})[_0x4733('0x1a')](function(_0x6fd7ea){if(_0x6fd7ea){return[_0x6fd7ea,![]];}return db['OpenchannelInteraction'][_0x4733('0x50')](_0x359c84)[_0x4733('0x1a')](function(_0x277d4b){return[_0x277d4b,!![]];});});}})['spread'](function(_0x1c4897,_0x47134a){if(_0x1c4897){_0x5c61ae=_0x47134a;if(!_0x47134a){return _0x1c4897['update']({'from':(_0x3042ff['contact']['firstName']||'')+'\x20'+(_0x3042ff['contact'][_0x4733('0x79')]||'')});}else{return _0x1c4897;}}})['then'](function(_0x482ea9){_0x3042ff[_0x4733('0x7a')]=_0x482ea9[_0x4733('0x7b')]({'plain':!![]});_0x3042ff[_0x4733('0x7a')][_0x4733('0x7c')]=_0x5c61ae;if(_0x3042ff[_0x4733('0x7a')][_0x4733('0x7c')]){if(_0x3042ff['account']['autoclose']){_0x3042ff[_0x4733('0x70')][_0x4733('0x7d')]({'id':0x0,'priority':_0x3042ff['applications'][_0x4733('0x4d')]+0x1,'app':_0x4733('0x7e'),'appdata':'unmanaged','interval':_0x4733('0x7f')});}}return db[_0x4733('0x80')][_0x4733('0x50')]({'body':_0x38dc8c['body'][_0x4733('0x51')],'OpenchannelAccountId':_0x38dc8c[_0x4733('0x52')]['id'],'OpenchannelInteractionId':_0x482ea9['id'],'direction':'in','ContactId':_0x3042ff[_0x4733('0x73')]['id'],'AttachmentId':_0x38dc8c[_0x4733('0x51')][_0x4733('0x81')]});})[_0x4733('0x1a')](function(_0x26c366){_0x3042ff[_0x4733('0x21')]=_0x26c366;if(_0x3042ff['interaction']['UserId']){return db[_0x4733('0x82')][_0x4733('0x4f')]({'attributes':['id',_0x4733('0x83')],'where':{'id':_0x3042ff[_0x4733('0x7a')][_0x4733('0x84')]}})[_0x4733('0x1a')](function(_0xd3ca9d){if(_0xd3ca9d){_0x3042ff['applications'][_0x4733('0x85')]({'id':0x0,'priority':0x0,'app':_0x4733('0x86'),'appdata':_0xd3ca9d[_0x4733('0x83')]+','+(_0x3042ff[_0x4733('0x6f')][_0x4733('0x87')]||0xa),'interval':_0x4733('0x7f')});_0x3042ff[_0x4733('0x88')]=![];}return respondWithRpcPromise(_0x4733('0x89'),_0x4733('0x8a'),_0x3042ff);});}return respondWithRpcPromise(_0x4733('0x89'),'startRouting',_0x3042ff);})[_0x4733('0x1a')](function(_0x21567d){respondWithRpcPromise('EventManager',_0x4733('0x8b'),{'event':_0x4733('0x5c'),'message':_0x21567d},client9002);return _0x21567d;})[_0x4733('0x1a')](respondWithResult(_0x16a853,null))['catch'](handleError(_0x16a853,null));};exports[_0x4733('0x8c')]=function(_0x1b413b,_0x10fd2b,_0x4e3fbf){return db['OpenchannelAccount'][_0x4733('0x8d')]({'where':{'id':_0x1b413b[_0x4733('0x52')]['id']}})[_0x4733('0x1a')](handleEntityNotFound(_0x10fd2b,null))['then'](function(_0x307579){if(_0x307579){return db[_0x4733('0x8e')]['transaction'](function(_0x2063d2){return db[_0x4733('0x8f')][_0x4733('0x53')]({'where':{'OpenchannelAccountId':_0x1b413b[_0x4733('0x52')]['id']},'transaction':_0x2063d2})[_0x4733('0x1a')](function(_0x4308b2){var _0x4dec39=_[_0x4733('0x45')](_0x1b413b[_0x4733('0x51')],function(_0x5a431e){_0x5a431e[_0x4733('0x90')]=_0x1b413b[_0x4733('0x52')]['id'];return _0x5a431e;});return db[_0x4733('0x8f')][_0x4733('0x91')](_0x4dec39,{'transaction':_0x2063d2});});})[_0x4733('0x1a')](function(){return db[_0x4733('0x8f')][_0x4733('0x92')]({'where':{'OpenchannelAccountId':_0x1b413b[_0x4733('0x52')]['id']},'order':_0x4733('0x93')});});}})[_0x4733('0x1a')](respondWithResult(_0x10fd2b,null))[_0x4733('0x23')](handleError(_0x10fd2b,null));};exports['getApplications']=function(_0x482273,_0x43413a,_0x32f76e){var _0x2ccc3a={};var _0x1a068e={};var _0x6e048;var _0x3d9829;return db[_0x4733('0x47')][_0x4733('0x8d')]({'where':{'id':_0x482273[_0x4733('0x52')]['id']}})[_0x4733('0x1a')](handleEntityNotFound(_0x43413a,null))['then'](function(_0x24204e){if(_0x24204e){_0x6e048=_0x24204e;_0x1a068e[_0x4733('0x32')]=_[_0x4733('0x33')](db[_0x4733('0x8f')][_0x4733('0x31')]);_0x1a068e[_0x4733('0x34')]=_[_0x4733('0x33')](_0x482273[_0x4733('0x34')]);_0x1a068e[_0x4733('0x37')]=_[_0x4733('0x38')](_0x1a068e[_0x4733('0x32')],_0x1a068e[_0x4733('0x34')]);_0x2ccc3a[_0x4733('0x3a')]=_[_0x4733('0x38')](_0x1a068e[_0x4733('0x32')],qs[_0x4733('0x39')](_0x482273['query']['fields']));_0x2ccc3a['attributes']=_0x2ccc3a[_0x4733('0x3a')][_0x4733('0x4d')]?_0x2ccc3a[_0x4733('0x3a')]:_0x1a068e[_0x4733('0x32')];_0x2ccc3a[_0x4733('0x3d')]=qs[_0x4733('0x3e')](_0x482273['query'][_0x4733('0x3e')]);_0x2ccc3a['where']=qs[_0x4733('0x37')](_[_0x4733('0x40')](_0x482273['query'],_0x1a068e[_0x4733('0x37')]));if(_0x482273['query']['filter']){_0x2ccc3a[_0x4733('0x3f')]=_['merge'](_0x2ccc3a[_0x4733('0x3f')],{'$or':_['map'](_0x2ccc3a['attributes'],function(_0x4843b2){var _0x4c16be={};_0x4c16be[_0x4843b2]={'$like':'%'+_0x482273[_0x4733('0x34')]['filter']+'%'};return _0x4c16be;})});}_0x2ccc3a=_[_0x4733('0x43')]({},_0x2ccc3a,_0x482273[_0x4733('0x46')]);return _0x6e048[_0x4733('0x94')](_0x2ccc3a);}})[_0x4733('0x1a')](function(_0xbbf849){if(_0xbbf849){_0x3d9829=_0xbbf849['length'];if(!_0x482273['query'][_0x4733('0x3b')]('nolimit')){_0x2ccc3a[_0x4733('0x3c')]=qs['limit'](_0x482273[_0x4733('0x34')]['limit']);_0x2ccc3a[_0x4733('0x28')]=qs[_0x4733('0x28')](_0x482273[_0x4733('0x34')][_0x4733('0x28')]);}return _0x6e048[_0x4733('0x94')](_0x2ccc3a);}})['then'](function(_0x10e418){if(_0x10e418){return _0x10e418?{'count':_0x3d9829,'rows':_0x10e418}:null;}})[_0x4733('0x1a')](respondWithResult(_0x43413a,null))['catch'](handleError(_0x43413a,null));};exports[_0x4733('0x95')]=function(_0x32cecd,_0x4199d4,_0x4cd00a){var _0x932deb={'raw':![],'where':{}};var _0x24f29d={};var _0x21a8e4={'count':0x0,'rows':[]};return db['OpenchannelAccount']['findOne']({'where':{'id':_0x32cecd['params']['id']}})[_0x4733('0x1a')](handleEntityNotFound(_0x4199d4,null))[_0x4733('0x1a')](function(_0x587371){if(_0x587371){_0x24f29d[_0x4733('0x32')]=_[_0x4733('0x33')](db[_0x4733('0x76')][_0x4733('0x31')]);_0x24f29d['query']=_[_0x4733('0x33')](_0x32cecd[_0x4733('0x34')]);_0x24f29d[_0x4733('0x37')]=_[_0x4733('0x38')](_0x24f29d[_0x4733('0x32')],_0x24f29d[_0x4733('0x34')]);_0x932deb[_0x4733('0x3a')]=_[_0x4733('0x38')](_0x24f29d[_0x4733('0x32')],qs[_0x4733('0x39')](_0x32cecd[_0x4733('0x34')][_0x4733('0x39')]));_0x932deb['attributes']=_0x932deb[_0x4733('0x3a')][_0x4733('0x4d')]?_0x932deb[_0x4733('0x3a')]:_0x24f29d[_0x4733('0x32')];if(!_0x32cecd['query'][_0x4733('0x3b')](_0x4733('0x96'))){_0x932deb[_0x4733('0x3c')]=qs[_0x4733('0x3c')](_0x32cecd['query']['limit']);_0x932deb['offset']=qs[_0x4733('0x28')](_0x32cecd['query'][_0x4733('0x28')]);}_0x932deb[_0x4733('0x3d')]=qs['sort'](_0x32cecd[_0x4733('0x34')]['sort']);_0x932deb[_0x4733('0x3f')]=qs['filters'](_['pick'](_0x32cecd[_0x4733('0x34')],_0x24f29d[_0x4733('0x37')]));_0x932deb['where'][_0x4733('0x90')]=_0x587371['id'];if(_0x32cecd['query'][_0x4733('0x44')]){_0x932deb['where']=_[_0x4733('0x43')](_0x932deb['where'],{'$or':_[_0x4733('0x45')](_0x932deb[_0x4733('0x3a')],function(_0x27b5e0){var _0x1f3e11={};_0x1f3e11[_0x27b5e0]={'$like':'%'+_0x32cecd[_0x4733('0x34')][_0x4733('0x44')]+'%'};return _0x1f3e11;})});}_0x932deb=_[_0x4733('0x43')]({},_0x932deb,_0x32cecd[_0x4733('0x46')]);return db['OpenchannelInteraction'][_0x4733('0x48')]({'where':_0x932deb[_0x4733('0x3f')]})[_0x4733('0x1a')](function(_0xe645f5){_0x21a8e4[_0x4733('0x48')]=_0xe645f5;if(_0x32cecd['query'][_0x4733('0x4e')]){_0x932deb[_0x4733('0x49')]=[{'model':db[_0x4733('0x6c')],'as':_0x4733('0x97'),'required':![]},{'model':db[_0x4733('0x82')],'as':'Owner','attributes':[_0x4733('0x83'),_0x4733('0x98'),_0x4733('0x99')],'required':![]},{'model':db[_0x4733('0x9a')],'as':'Tags','attributes':['id',_0x4733('0x83'),_0x4733('0x9b')],'where':_0x32cecd[_0x4733('0x34')][_0x4733('0x9c')]?{'id':_0x32cecd[_0x4733('0x34')][_0x4733('0x9c')]}:undefined,'required':_0x32cecd['query'][_0x4733('0x9c')]?!![]:![]}];}return db['OpenchannelInteraction'][_0x4733('0x4a')](_0x932deb);})['then'](function(_0x2b5339){_0x21a8e4['rows']=_0x2b5339;return _0x21a8e4;});}})[_0x4733('0x1a')](respondWithFilteredResult(_0x4199d4,_0x932deb))[_0x4733('0x23')](handleError(_0x4199d4,null));};exports[_0x4733('0x9d')]=function(_0x5f2e40,_0x2c3786,_0x554d5d){return db[_0x4733('0x47')][_0x4733('0x4f')]({'where':{'id':_0x5f2e40[_0x4733('0x52')]['id']}})['then'](handleEntityNotFound(_0x2c3786,null))[_0x4733('0x1a')](function(_0x579916){if(_0x579916){return _0x579916[_0x4733('0x9d')](_0x5f2e40[_0x4733('0x51')][_0x4733('0x9e')],_['omit'](_0x5f2e40['body'],[_0x4733('0x9e'),'id'])||{})[_0x4733('0x9f')](function(_0xa3a9f9){for(var _0x543df4=0x0;_0x543df4<_0x5f2e40[_0x4733('0x51')]['ids']['length'];_0x543df4+=0x1){socket[_0x4733('0xa0')](_0x4733('0xa1'),{'UserId':_0x5f2e40[_0x4733('0x51')][_0x4733('0x9e')][_0x543df4],'OpenchannelAccountId':_0x5f2e40['params']['id']});}return _0xa3a9f9;});}})['then'](respondWithResult(_0x2c3786,null))['catch'](handleError(_0x2c3786,null));};exports[_0x4733('0xa2')]=function(_0x1ef254,_0x95cb76,_0x3887a5){var _0x532c6b;return db[_0x4733('0x47')][_0x4733('0x4f')]({'where':{'id':_0x1ef254[_0x4733('0x52')]['id']}})[_0x4733('0x1a')](handleEntityNotFound(_0x95cb76,null))['then'](function(_0x1e52ae){if(_0x1e52ae){return _0x1e52ae[_0x4733('0xa2')](_0x1ef254[_0x4733('0x34')]['ids'])[_0x4733('0x1a')](function(_0x36592c){if(_[_0x4733('0xa3')](_0x1ef254[_0x4733('0x34')][_0x4733('0x9e')])){for(var _0x4bc3c2=0x0;_0x4bc3c2<_0x1ef254[_0x4733('0x34')][_0x4733('0x9e')][_0x4733('0x4d')];_0x4bc3c2+=0x1){socket[_0x4733('0xa0')](_0x4733('0xa4'),{'UserId':_0x1ef254[_0x4733('0x34')][_0x4733('0x9e')][_0x4bc3c2],'OpenchannelAccountId':_0x1ef254['params']['id']});}}else{socket[_0x4733('0xa0')]('userOpenchannelAccount:remove',{'UserId':_0x1ef254[_0x4733('0x34')][_0x4733('0x9e')],'OpenchannelAccountId':_0x1ef254[_0x4733('0x52')]['id']});}});}})[_0x4733('0x1a')](respondWithStatusCode(_0x95cb76,null))['catch'](handleError(_0x95cb76,null));};exports[_0x4733('0xa5')]=function(_0x3540a5,_0x454845,_0x1b09fa){var _0x13ea5f={};var _0x1e2703={};var _0x242b8a;var _0x42bfc3;return db[_0x4733('0x47')][_0x4733('0x8d')]({'where':{'id':_0x3540a5['params']['id']}})[_0x4733('0x1a')](handleEntityNotFound(_0x454845,null))[_0x4733('0x1a')](function(_0xd04634){if(_0xd04634){_0x242b8a=_0xd04634;_0x1e2703[_0x4733('0x32')]=_[_0x4733('0x33')](db[_0x4733('0x82')][_0x4733('0x31')]);_0x1e2703[_0x4733('0x34')]=_[_0x4733('0x33')](_0x3540a5['query']);_0x1e2703[_0x4733('0x37')]=_['intersection'](_0x1e2703[_0x4733('0x32')],_0x1e2703[_0x4733('0x34')]);_0x13ea5f[_0x4733('0x3a')]=_[_0x4733('0x38')](_0x1e2703[_0x4733('0x32')],qs['fields'](_0x3540a5['query'][_0x4733('0x39')]));_0x13ea5f['attributes']=_0x13ea5f[_0x4733('0x3a')][_0x4733('0x4d')]?_0x13ea5f[_0x4733('0x3a')]:_0x1e2703[_0x4733('0x32')];_0x13ea5f[_0x4733('0x3d')]=qs[_0x4733('0x3e')](_0x3540a5[_0x4733('0x34')][_0x4733('0x3e')]);_0x13ea5f['where']=qs[_0x4733('0x37')](_[_0x4733('0x40')](_0x3540a5[_0x4733('0x34')],_0x1e2703[_0x4733('0x37')]));if(_0x3540a5[_0x4733('0x34')][_0x4733('0x44')]){_0x13ea5f[_0x4733('0x3f')]=_[_0x4733('0x43')](_0x13ea5f['where'],{'$or':_[_0x4733('0x45')](_0x13ea5f[_0x4733('0x3a')],function(_0x11bdbb){var _0x1b1a03={};_0x1b1a03[_0x11bdbb]={'$like':'%'+_0x3540a5['query'][_0x4733('0x44')]+'%'};return _0x1b1a03;})});}_0x13ea5f=_[_0x4733('0x43')]({},_0x13ea5f,_0x3540a5[_0x4733('0x46')]);return _0x242b8a[_0x4733('0xa5')](_0x13ea5f);}})[_0x4733('0x1a')](function(_0x5941b4){if(_0x5941b4){_0x42bfc3=_0x5941b4[_0x4733('0x4d')];if(!_0x3540a5[_0x4733('0x34')][_0x4733('0x3b')](_0x4733('0x96'))){_0x13ea5f[_0x4733('0x3c')]=qs[_0x4733('0x3c')](_0x3540a5[_0x4733('0x34')][_0x4733('0x3c')]);_0x13ea5f[_0x4733('0x28')]=qs[_0x4733('0x28')](_0x3540a5[_0x4733('0x34')][_0x4733('0x28')]);}return _0x242b8a[_0x4733('0xa5')](_0x13ea5f);}})['then'](function(_0xd77b5b){if(_0xd77b5b){return _0xd77b5b?{'count':_0x42bfc3,'rows':_0xd77b5b}:null;}})['then'](respondWithResult(_0x454845,null))['catch'](handleError(_0x454845,null));};exports['send']=function(_0x24a2f9,_0x3aa1a3,_0x185498){var _0x3cdd15,_0x15f89b,_0x310e39;if(_[_0x4733('0x62')](_0x24a2f9[_0x4733('0x51')][_0x4733('0x51')])||_0x24a2f9['body']['body']===''){throw new db[(_0x4733('0x64'))][(_0x4733('0x65'))](_0x4733('0x66'));}if(_['isNil'](_0x24a2f9[_0x4733('0x51')]['to'])){}_0x3cdd15=_0x24a2f9['body']['to'];return db[_0x4733('0x47')][_0x4733('0x8d')]({'where':{'id':_0x24a2f9[_0x4733('0x52')]['id']}})[_0x4733('0x1a')](handleEntityNotFound(_0x3aa1a3,null))[_0x4733('0x1a')](function(_0x3c9e73){if(_0x3c9e73){return db[_0x4733('0x47')]['find']({'where':{'id':_0x3c9e73['id']},'include':[{'model':db[_0x4733('0xa6')],'as':_0x4733('0x6b'),'include':[{'model':db['CmContact'],'as':_0x4733('0x71'),'where':{[_0x3c9e73[_0x4733('0x67')]]:_0x3cdd15},'limit':0x1,'order':[['updatedAt','DESC']]}]}]})[_0x4733('0x1a')](handleEntityNotFound(_0x3aa1a3,null))[_0x4733('0x1a')](function(_0x1db83c){if(_0x1db83c&&_0x1db83c[_0x4733('0x6b')]){_0x15f89b=_0x1db83c[_0x4733('0x7b')]({'plain':!![]});if(_0x15f89b[_0x4733('0x6b')]&&_0x15f89b[_0x4733('0x6b')][_0x4733('0x71')][_0x4733('0x4d')]){return _0x15f89b['List'][_0x4733('0x71')][0x0];}return db['CmContact'][_0x4733('0x50')](_[_0x4733('0x72')](_0x24a2f9['body'],{'firstName':_0x3cdd15,[_0x1db83c[_0x4733('0x67')]]:_0x3cdd15,'phone':_0x3cdd15,'ListId':_0x15f89b['ListId']}));}})[_0x4733('0x1a')](handleEntityNotFound(_0x3aa1a3,null))[_0x4733('0x1a')](function(_0x1df2ce){if(_0x1df2ce){_0x310e39=_0x1df2ce;return db[_0x4733('0x76')][_0x4733('0x4f')]({'where':{'ContactId':_0x310e39['id'],'closed':![],'OpenchannelAccountId':_0x15f89b['id']}})['then'](function(_0x405697){if(_0x405697){return[_0x405697,![]];}return db[_0x4733('0x76')][_0x4733('0x50')]({'UserId':_0x24a2f9[_0x4733('0xa7')]['id'],'ContactId':_0x310e39['id'],'OpenchannelAccountId':_0x15f89b['id'],'lastMsgDirection':'out','Messages':[_[_0x4733('0x43')](_0x24a2f9[_0x4733('0x51')],{'read':![],'body':_0x24a2f9[_0x4733('0x51')][_0x4733('0x51')],'OpenchannelAccountId':_0x15f89b['id'],'UserId':_0x24a2f9[_0x4733('0xa7')]['id'],'ContactId':_0x310e39['id']})]},{'include':[{'model':db[_0x4733('0x80')],'as':_0x4733('0xa8')}]})[_0x4733('0x1a')](function(_0x595bb0){return[_0x595bb0,!![]];});});}})[_0x4733('0x9f')](function(_0x4460b3,_0x13f982){if(_0x13f982){return _0x4460b3;}return db['OpenchannelMessage'][_0x4733('0x50')](_[_0x4733('0x43')](_0x24a2f9[_0x4733('0x51')],{'read':![],'body':_0x24a2f9[_0x4733('0x51')][_0x4733('0x51')],'OpenchannelAccountId':_0x15f89b['id'],'OpenchannelInteractionId':_0x4460b3['id'],'UserId':_0x24a2f9[_0x4733('0xa7')]['id'],'ContactId':_0x310e39['id']}))[_0x4733('0x1a')](function(_0x195eaa){_0x4460b3[_0x4733('0xa9')][_0x4733('0xa8')]=[];_0x4460b3[_0x4733('0xa9')][_0x4733('0xa8')][_0x4733('0x7d')](_0x195eaa['dataValues']);return _0x4460b3;});});}})[_0x4733('0x1a')](respondWithResult(_0x3aa1a3,null))[_0x4733('0x23')](handleError(_0x3aa1a3,null));};
\ No newline at end of file
+var _0xa571=['pick','OpenchannelAccountId','map','removeDispositions','ids','addAnswer','getAnswers','CannedAnswer','removeAnswers','notify','openchannel','CmContact','Sequelize','ValidationError','difference','createdAt','updatedAt','CompanyId','ListId','isNil','from','from\x20is\x20mandatory','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','List','Contacts','OpenchannelApplication','Applications','account','applications','orderBy','priority','asc','contact','lastName','threadId','OpenchannelInteraction','externalUrl','ContactId','spread','firstName','interaction','get','autoclose','push','close','unmanaged','*,*,*,*','OpenchannelMessage','AttachmentId','UserId','User','unshift','agent','forcedOwnership','startRouting','Start','EventManager','addApplications','sequelize','transaction','findAndCountAll','getApplications','getInteractions','Contact','fullname','internal','Tag','Tags','color','tag','addAgents','omit','emit','removeAgents','isArray','userOpenchannelAccount:remove','getAgents','DESC','defaults','user','out','Messages','dataValues','fast-json-patch','request-promise','moment','bluebird','util','path','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./openchannelAccount.socket','register','jayson/promise','client','http','then','info','OpenchannelAccount,\x20%s,\x20%s','debug','stringify','error','message','catch','sendStatus','status','end','json','offset','limit','set','apply','reject','save','update','destroy','stack','name','send','index','OpenchannelAccount','rawAttributes','model','keys','dateStart','query','dateEnd','attributes','intersection','fields','length','hasOwnProperty','sort','where','filters','add','day','merge','filter','count','includeAll','include','findAll','rows','show','params','options','find','create','body','describe','addDisposition','OpnechannelAccountId','Disposition','getDispositions','findOne','nolimit','order'];(function(_0x41be00,_0x422a18){var _0x3b06d2=function(_0x17c259){while(--_0x17c259){_0x41be00['push'](_0x41be00['shift']());}};_0x3b06d2(++_0x422a18);}(_0xa571,0x107));var _0x1a57=function(_0x3d2b0f,_0x2cf615){_0x3d2b0f=_0x3d2b0f-0x0;var _0x35a99d=_0xa571[_0x3d2b0f];return _0x35a99d;};'use strict';var jsonpatch=require(_0x1a57('0x0'));var rp=require(_0x1a57('0x1'));var moment=require(_0x1a57('0x2'));var BPromise=require(_0x1a57('0x3'));var Mustache=require('mustache');var util=require(_0x1a57('0x4'));var path=require(_0x1a57('0x5'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x1a57('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x1a57('0x7'));var crypto=require(_0x1a57('0x8'));var jsforce=require(_0x1a57('0x9'));var deskjs=require(_0x1a57('0xa'));var toCsv=require(_0x1a57('0xb'));var querystring=require(_0x1a57('0xc'));var Papa=require('papaparse');var qs=require(_0x1a57('0xd'));var logger=require(_0x1a57('0xe'))(_0x1a57('0xf'));var utils=require('../../config/utils');var config=require(_0x1a57('0x10'));var db=require(_0x1a57('0x11'))['db'];var socket=require(_0x1a57('0x12'))({'host':_0x1a57('0x13'),'port':0x18eb});require(_0x1a57('0x14'))[_0x1a57('0x15')](socket);var jayson=require(_0x1a57('0x16'));var client=jayson[_0x1a57('0x17')]['http']({'port':0x232c});var client9002=jayson['client'][_0x1a57('0x18')]({'port':0x232a});function respondWithRpcPromise(_0x1911b2,_0x202d9a,_0x5ae643,_0x3de36a){return new BPromise(function(_0x18eec5,_0x4c5ed4){var _0x503278=_0x3de36a||client;return _0x503278['request'](_0x1911b2,_0x5ae643)[_0x1a57('0x19')](function(_0x17434c){logger[_0x1a57('0x1a')](_0x1a57('0x1b'),_0x202d9a,'request\x20sent');logger[_0x1a57('0x1c')]('OpenchannelAccount,\x20%s,\x20%s,\x20%s',_0x202d9a,'request\x20sent',JSON[_0x1a57('0x1d')](_0x17434c));if(_0x17434c[_0x1a57('0x1e')]){if(_0x17434c[_0x1a57('0x1e')]['code']===0x1f4){logger[_0x1a57('0x1e')](_0x1a57('0x1b'),_0x202d9a,_0x17434c[_0x1a57('0x1e')]['message']);return _0x4c5ed4(_0x17434c[_0x1a57('0x1e')][_0x1a57('0x1f')]);}logger[_0x1a57('0x1e')](_0x1a57('0x1b'),_0x202d9a,_0x17434c[_0x1a57('0x1e')]['message']);return _0x18eec5(_0x17434c['error'][_0x1a57('0x1f')]);}else{logger[_0x1a57('0x1a')](_0x1a57('0x1b'),_0x202d9a,'request\x20sent');_0x18eec5(_0x17434c['result']['message']);}})[_0x1a57('0x20')](function(_0x113ad4){logger[_0x1a57('0x1e')](_0x1a57('0x1b'),_0x202d9a,_0x113ad4);_0x4c5ed4(_0x113ad4);});});}function respondWithStatusCode(_0x277d06,_0x39d3ce){_0x39d3ce=_0x39d3ce||0xcc;return function(_0x2efa49){if(_0x2efa49){return _0x277d06[_0x1a57('0x21')](_0x39d3ce);}return _0x277d06[_0x1a57('0x22')](_0x39d3ce)[_0x1a57('0x23')]();};}function respondWithResult(_0x29e7cd,_0x36b17e){_0x36b17e=_0x36b17e||0xc8;return function(_0x26cdd3){if(_0x26cdd3){return _0x29e7cd[_0x1a57('0x22')](_0x36b17e)[_0x1a57('0x24')](_0x26cdd3);}};}function respondWithFilteredResult(_0x182649,_0x25c1e9){return function(_0x267302){if(_0x267302){var _0x27cfe1=_0x267302['count'],_0xf6ffef=_0x25c1e9['offset'],_0x26584b=_0x25c1e9[_0x1a57('0x25')]+_0x25c1e9[_0x1a57('0x26')],_0x1dd939;if(_0x26584b>=_0x27cfe1){_0x26584b=_0x27cfe1;_0x1dd939=0xc8;}else{_0x1dd939=0xce;}_0x182649['status'](_0x1dd939);return _0x182649[_0x1a57('0x27')]('Content-Range',_0xf6ffef+'-'+_0x26584b+'/'+_0x27cfe1)[_0x1a57('0x24')](_0x267302);}return null;};}function patchUpdates(_0x4a2901){return function(_0x53bf6e){try{jsonpatch[_0x1a57('0x28')](_0x53bf6e,_0x4a2901,!![]);}catch(_0x274fe6){return BPromise[_0x1a57('0x29')](_0x274fe6);}return _0x53bf6e[_0x1a57('0x2a')]();};}function saveUpdates(_0x492b90,_0x366d5f){return function(_0x396832){if(_0x396832){return _0x396832[_0x1a57('0x2b')](_0x492b90)[_0x1a57('0x19')](function(_0x5763ba){return _0x5763ba;});}return null;};}function removeEntity(_0xa42d2b,_0x251a54){return function(_0x139fc9){if(_0x139fc9){return _0x139fc9[_0x1a57('0x2c')]()[_0x1a57('0x19')](function(){_0xa42d2b[_0x1a57('0x22')](0xcc)[_0x1a57('0x23')]();});}};}function handleEntityNotFound(_0x1e7f0d,_0x154cba){return function(_0x4c1acc){if(!_0x4c1acc){_0x1e7f0d[_0x1a57('0x21')](0x194);}return _0x4c1acc;};}function handleError(_0x1e27b4,_0x497488){_0x497488=_0x497488||0x1f4;return function(_0x4f9368){logger[_0x1a57('0x1e')](_0x4f9368[_0x1a57('0x2d')]);if(_0x4f9368[_0x1a57('0x2e')]){delete _0x4f9368[_0x1a57('0x2e')];}_0x1e27b4[_0x1a57('0x22')](_0x497488)[_0x1a57('0x2f')](_0x4f9368);};}exports[_0x1a57('0x30')]=function(_0x41e466,_0x3f14ca){var _0x2a6feb={},_0x4091b6={},_0x24025c={'count':0x0,'rows':[]};var _0x12f3a7=db[_0x1a57('0x31')][_0x1a57('0x32')];_0x4091b6[_0x1a57('0x33')]=_[_0x1a57('0x34')](_0x12f3a7);var _0x43880d={'dateStart':_0x41e466['query'][_0x1a57('0x35')],'dateEnd':_0x41e466[_0x1a57('0x36')][_0x1a57('0x37')]};delete _0x41e466[_0x1a57('0x36')][_0x1a57('0x35')];delete _0x41e466[_0x1a57('0x36')][_0x1a57('0x37')];_0x4091b6[_0x1a57('0x36')]=_[_0x1a57('0x34')](_0x41e466['query']);_0x4091b6['filters']=_['intersection'](_0x4091b6['model'],_0x4091b6[_0x1a57('0x36')]);_0x2a6feb[_0x1a57('0x38')]=_[_0x1a57('0x39')](_0x4091b6['model'],qs[_0x1a57('0x3a')](_0x41e466[_0x1a57('0x36')][_0x1a57('0x3a')]));_0x2a6feb[_0x1a57('0x38')]=_0x2a6feb['attributes'][_0x1a57('0x3b')]?_0x2a6feb['attributes']:_0x4091b6[_0x1a57('0x33')];if(!_0x41e466[_0x1a57('0x36')][_0x1a57('0x3c')]('nolimit')){_0x2a6feb[_0x1a57('0x26')]=qs[_0x1a57('0x26')](_0x41e466[_0x1a57('0x36')][_0x1a57('0x26')]);_0x2a6feb[_0x1a57('0x25')]=qs['offset'](_0x41e466[_0x1a57('0x36')]['offset']);}_0x2a6feb['order']=qs[_0x1a57('0x3d')](_0x41e466['query'][_0x1a57('0x3d')]);_0x2a6feb[_0x1a57('0x3e')]=qs[_0x1a57('0x3f')](_['pick'](_0x41e466[_0x1a57('0x36')],_0x4091b6[_0x1a57('0x3f')]));if(_0x43880d[_0x1a57('0x35')]){if(_0x43880d[_0x1a57('0x37')]){_0x43880d['dateEnd']=moment(_0x43880d[_0x1a57('0x37')])[_0x1a57('0x40')](0x1,'day');}else{_0x43880d[_0x1a57('0x37')]=moment(_0x43880d['dateStart'])['add'](0x1,_0x1a57('0x41'));}_[_0x1a57('0x42')](_0x2a6feb[_0x1a57('0x3e')],{'createdAt':{'$gte':_0x43880d[_0x1a57('0x35')],'$lte':_0x43880d['dateEnd']}});}if(_0x41e466[_0x1a57('0x36')][_0x1a57('0x43')]){_0x2a6feb[_0x1a57('0x3e')]=_[_0x1a57('0x42')](_0x2a6feb[_0x1a57('0x3e')],{'$or':_['map'](_0x2a6feb[_0x1a57('0x38')],function(_0x1175ca){var _0x3b9660={};_0x3b9660[_0x1175ca]={'$like':'%'+_0x41e466[_0x1a57('0x36')]['filter']+'%'};return _0x3b9660;})});}_0x2a6feb=_[_0x1a57('0x42')]({},_0x2a6feb,_0x41e466['options']);var _0x4bbfc3={'where':_0x2a6feb[_0x1a57('0x3e')]};return db[_0x1a57('0x31')][_0x1a57('0x44')](_0x4bbfc3)[_0x1a57('0x19')](function(_0x445df1){_0x24025c[_0x1a57('0x44')]=_0x445df1;if(_0x41e466[_0x1a57('0x36')][_0x1a57('0x45')]){_0x2a6feb[_0x1a57('0x46')]=[{'all':!![]}];}return db[_0x1a57('0x31')][_0x1a57('0x47')](_0x2a6feb);})[_0x1a57('0x19')](function(_0x47f9da){_0x24025c[_0x1a57('0x48')]=_0x47f9da;return _0x24025c;})[_0x1a57('0x19')](respondWithFilteredResult(_0x3f14ca,_0x2a6feb))[_0x1a57('0x20')](handleError(_0x3f14ca,null));};exports[_0x1a57('0x49')]=function(_0x38b334,_0x28ebdd){var _0x323af1={'raw':![],'where':{'id':_0x38b334[_0x1a57('0x4a')]['id']}},_0x3cbb9e={};_0x3cbb9e[_0x1a57('0x33')]=_[_0x1a57('0x34')](db['OpenchannelAccount'][_0x1a57('0x32')]);_0x3cbb9e[_0x1a57('0x36')]=_['keys'](_0x38b334[_0x1a57('0x36')]);_0x3cbb9e[_0x1a57('0x3f')]=_['intersection'](_0x3cbb9e[_0x1a57('0x33')],_0x3cbb9e[_0x1a57('0x36')]);_0x323af1['attributes']=_['intersection'](_0x3cbb9e['model'],qs[_0x1a57('0x3a')](_0x38b334[_0x1a57('0x36')]['fields']));_0x323af1[_0x1a57('0x38')]=_0x323af1[_0x1a57('0x38')]['length']?_0x323af1['attributes']:_0x3cbb9e['model'];if(_0x38b334[_0x1a57('0x36')][_0x1a57('0x45')]){_0x323af1[_0x1a57('0x46')]=[{'all':!![]}];}_0x323af1=_[_0x1a57('0x42')]({},_0x323af1,_0x38b334[_0x1a57('0x4b')]);return db[_0x1a57('0x31')][_0x1a57('0x4c')](_0x323af1)[_0x1a57('0x19')](handleEntityNotFound(_0x28ebdd,null))['then'](respondWithResult(_0x28ebdd,null))['catch'](handleError(_0x28ebdd,null));};exports['create']=function(_0x5ef58d,_0x554208){return db[_0x1a57('0x31')][_0x1a57('0x4d')](_0x5ef58d[_0x1a57('0x4e')],{})[_0x1a57('0x19')](respondWithResult(_0x554208,0xc9))[_0x1a57('0x20')](handleError(_0x554208,null));};exports[_0x1a57('0x2b')]=function(_0xe710e,_0x3bf7f0){if(_0xe710e['body']['id']){delete _0xe710e['body']['id'];}return db['OpenchannelAccount'][_0x1a57('0x4c')]({'where':{'id':_0xe710e['params']['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x3bf7f0,null))[_0x1a57('0x19')](saveUpdates(_0xe710e[_0x1a57('0x4e')],null))[_0x1a57('0x19')](respondWithResult(_0x3bf7f0,null))[_0x1a57('0x20')](handleError(_0x3bf7f0,null));};exports[_0x1a57('0x2c')]=function(_0x5a80be,_0x561add){return db['OpenchannelAccount']['find']({'where':{'id':_0x5a80be[_0x1a57('0x4a')]['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x561add,null))[_0x1a57('0x19')](removeEntity(_0x561add,null))[_0x1a57('0x20')](handleError(_0x561add,null));};exports[_0x1a57('0x4f')]=function(_0xdade74,_0x2ca029){return db['OpenchannelAccount']['describe']()[_0x1a57('0x19')](respondWithResult(_0x2ca029,null))[_0x1a57('0x20')](handleError(_0x2ca029,null));};exports[_0x1a57('0x50')]=function(_0x6544ec,_0xfde254,_0xa8f6b9){if(_0x6544ec['body']['id']){delete _0x6544ec['body']['id'];}return db[_0x1a57('0x31')][_0x1a57('0x4c')]({'where':{'id':_0x6544ec['params']['id']}})['then'](handleEntityNotFound(_0xfde254,null))[_0x1a57('0x19')](function(_0x3a8806){if(_0x3a8806){_0x6544ec[_0x1a57('0x4e')][_0x1a57('0x51')]=_0x3a8806['id'];return db[_0x1a57('0x52')][_0x1a57('0x4d')](_0x6544ec[_0x1a57('0x4e')]);}})['then'](respondWithResult(_0xfde254,null))['catch'](handleError(_0xfde254,null));};exports[_0x1a57('0x53')]=function(_0x69da3c,_0x299fb7,_0x2e0ba6){var _0x5d92dc={'raw':![],'where':{}};var _0x33092d={};var _0x28354c={'count':0x0,'rows':[]};return db[_0x1a57('0x31')][_0x1a57('0x54')]({'where':{'id':_0x69da3c[_0x1a57('0x4a')]['id']}})['then'](handleEntityNotFound(_0x299fb7,null))['then'](function(_0x59d0b0){if(_0x59d0b0){_0x33092d[_0x1a57('0x33')]=_[_0x1a57('0x34')](db[_0x1a57('0x52')][_0x1a57('0x32')]);_0x33092d[_0x1a57('0x36')]=_[_0x1a57('0x34')](_0x69da3c[_0x1a57('0x36')]);_0x33092d[_0x1a57('0x3f')]=_['intersection'](_0x33092d[_0x1a57('0x33')],_0x33092d[_0x1a57('0x36')]);_0x5d92dc['attributes']=_['intersection'](_0x33092d[_0x1a57('0x33')],qs['fields'](_0x69da3c[_0x1a57('0x36')][_0x1a57('0x3a')]));_0x5d92dc[_0x1a57('0x38')]=_0x5d92dc[_0x1a57('0x38')][_0x1a57('0x3b')]?_0x5d92dc[_0x1a57('0x38')]:_0x33092d[_0x1a57('0x33')];if(!_0x69da3c[_0x1a57('0x36')]['hasOwnProperty'](_0x1a57('0x55'))){_0x5d92dc[_0x1a57('0x26')]=qs['limit'](_0x69da3c[_0x1a57('0x36')][_0x1a57('0x26')]);_0x5d92dc[_0x1a57('0x25')]=qs['offset'](_0x69da3c['query'][_0x1a57('0x25')]);}_0x5d92dc[_0x1a57('0x56')]=qs[_0x1a57('0x3d')](_0x69da3c[_0x1a57('0x36')]['sort']);_0x5d92dc[_0x1a57('0x3e')]=qs[_0x1a57('0x3f')](_[_0x1a57('0x57')](_0x69da3c[_0x1a57('0x36')],_0x33092d[_0x1a57('0x3f')]));_0x5d92dc['where'][_0x1a57('0x58')]=_0x59d0b0['id'];if(_0x69da3c[_0x1a57('0x36')][_0x1a57('0x43')]){_0x5d92dc[_0x1a57('0x3e')]=_[_0x1a57('0x42')](_0x5d92dc[_0x1a57('0x3e')],{'$or':_[_0x1a57('0x59')](_0x5d92dc[_0x1a57('0x38')],function(_0x3cb5ca){var _0x11b17c={};_0x11b17c[_0x3cb5ca]={'$like':'%'+_0x69da3c[_0x1a57('0x36')]['filter']+'%'};return _0x11b17c;})});}_0x5d92dc=_[_0x1a57('0x42')]({},_0x5d92dc,_0x69da3c[_0x1a57('0x4b')]);return db['Disposition'][_0x1a57('0x44')]({'where':_0x5d92dc[_0x1a57('0x3e')]})['then'](function(_0x1d9a08){_0x28354c[_0x1a57('0x44')]=_0x1d9a08;if(_0x69da3c[_0x1a57('0x36')][_0x1a57('0x45')]){_0x5d92dc[_0x1a57('0x46')]=[{'all':!![]}];}return db[_0x1a57('0x52')][_0x1a57('0x47')](_0x5d92dc);})[_0x1a57('0x19')](function(_0x559a71){_0x28354c[_0x1a57('0x48')]=_0x559a71;return _0x28354c;});}})[_0x1a57('0x19')](respondWithFilteredResult(_0x299fb7,_0x5d92dc))['catch'](handleError(_0x299fb7,null));};exports[_0x1a57('0x5a')]=function(_0x3e11db,_0x3ac0b9,_0x15e48d){var _0x255800;return db[_0x1a57('0x31')][_0x1a57('0x4c')]({'where':{'id':_0x3e11db[_0x1a57('0x4a')]['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x3ac0b9,null))['then'](function(_0x3ebec){if(_0x3ebec){return _0x3ebec[_0x1a57('0x5a')](_0x3e11db[_0x1a57('0x36')][_0x1a57('0x5b')]);}})[_0x1a57('0x19')](respondWithStatusCode(_0x3ac0b9,null))['catch'](handleError(_0x3ac0b9,null));};exports[_0x1a57('0x5c')]=function(_0xd56ee1,_0x2d0177,_0x34fd50){if(_0xd56ee1[_0x1a57('0x4e')]['id']){delete _0xd56ee1[_0x1a57('0x4e')]['id'];}return db[_0x1a57('0x31')][_0x1a57('0x4c')]({'where':{'id':_0xd56ee1['params']['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x2d0177,null))[_0x1a57('0x19')](function(_0xe916b1){if(_0xe916b1){_0xd56ee1[_0x1a57('0x4e')]['OpenchannelAccountId']=_0xe916b1['id'];return db['CannedAnswer']['create'](_0xd56ee1['body']);}})['then'](respondWithResult(_0x2d0177,null))[_0x1a57('0x20')](handleError(_0x2d0177,null));};exports[_0x1a57('0x5d')]=function(_0x5e640b,_0x3219ce,_0x19f1d5){var _0x5f4509={'raw':![],'where':{}};var _0x758985={};var _0x1fbcb1={'count':0x0,'rows':[]};return db[_0x1a57('0x31')][_0x1a57('0x54')]({'where':{'id':_0x5e640b['params']['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x3219ce,null))[_0x1a57('0x19')](function(_0x4c66e3){if(_0x4c66e3){_0x758985[_0x1a57('0x33')]=_[_0x1a57('0x34')](db[_0x1a57('0x5e')][_0x1a57('0x32')]);_0x758985[_0x1a57('0x36')]=_[_0x1a57('0x34')](_0x5e640b[_0x1a57('0x36')]);_0x758985['filters']=_[_0x1a57('0x39')](_0x758985['model'],_0x758985[_0x1a57('0x36')]);_0x5f4509[_0x1a57('0x38')]=_[_0x1a57('0x39')](_0x758985[_0x1a57('0x33')],qs['fields'](_0x5e640b[_0x1a57('0x36')][_0x1a57('0x3a')]));_0x5f4509[_0x1a57('0x38')]=_0x5f4509['attributes'][_0x1a57('0x3b')]?_0x5f4509[_0x1a57('0x38')]:_0x758985[_0x1a57('0x33')];if(!_0x5e640b['query'][_0x1a57('0x3c')](_0x1a57('0x55'))){_0x5f4509[_0x1a57('0x26')]=qs[_0x1a57('0x26')](_0x5e640b[_0x1a57('0x36')][_0x1a57('0x26')]);_0x5f4509[_0x1a57('0x25')]=qs[_0x1a57('0x25')](_0x5e640b[_0x1a57('0x36')][_0x1a57('0x25')]);}_0x5f4509[_0x1a57('0x56')]=qs['sort'](_0x5e640b[_0x1a57('0x36')]['sort']);_0x5f4509[_0x1a57('0x3e')]=qs['filters'](_['pick'](_0x5e640b['query'],_0x758985['filters']));_0x5f4509[_0x1a57('0x3e')][_0x1a57('0x58')]=_0x4c66e3['id'];if(_0x5e640b[_0x1a57('0x36')]['filter']){_0x5f4509[_0x1a57('0x3e')]=_['merge'](_0x5f4509[_0x1a57('0x3e')],{'$or':_[_0x1a57('0x59')](_0x5f4509[_0x1a57('0x38')],function(_0x597c28){var _0x1000e5={};_0x1000e5[_0x597c28]={'$like':'%'+_0x5e640b[_0x1a57('0x36')]['filter']+'%'};return _0x1000e5;})});}_0x5f4509=_['merge']({},_0x5f4509,_0x5e640b[_0x1a57('0x4b')]);return db['CannedAnswer'][_0x1a57('0x44')]({'where':_0x5f4509[_0x1a57('0x3e')]})['then'](function(_0x45afe5){_0x1fbcb1[_0x1a57('0x44')]=_0x45afe5;if(_0x5e640b['query'][_0x1a57('0x45')]){_0x5f4509[_0x1a57('0x46')]=[{'all':!![]}];}return db['CannedAnswer']['findAll'](_0x5f4509);})[_0x1a57('0x19')](function(_0x4dd78e){_0x1fbcb1[_0x1a57('0x48')]=_0x4dd78e;return _0x1fbcb1;});}})[_0x1a57('0x19')](respondWithFilteredResult(_0x3219ce,_0x5f4509))[_0x1a57('0x20')](handleError(_0x3219ce,null));};exports[_0x1a57('0x5f')]=function(_0x1e4456,_0x46337f,_0x3770b9){var _0x4db879;return db[_0x1a57('0x31')][_0x1a57('0x4c')]({'where':{'id':_0x1e4456[_0x1a57('0x4a')]['id']}})['then'](handleEntityNotFound(_0x46337f,null))['then'](function(_0x4d068c){if(_0x4d068c){return _0x4d068c[_0x1a57('0x5f')](_0x1e4456[_0x1a57('0x36')]['ids']);}})['then'](respondWithStatusCode(_0x46337f,null))[_0x1a57('0x20')](handleError(_0x46337f,null));};exports[_0x1a57('0x60')]=function(_0x3661aa,_0x5223ca,_0x26b235){var _0x172d2e={'body':_0x3661aa[_0x1a57('0x4e')],'channel':_0x1a57('0x61')};var _0x524e4e=[];var _0x434244=[];var _0x27770f={};var _0x30da6a=![];return db[_0x1a57('0x62')][_0x1a57('0x4f')]()[_0x1a57('0x19')](function(_0x3374bc){if(!_0x3374bc){throw new db[(_0x1a57('0x63'))][(_0x1a57('0x64'))]('no\x20available\x20attributes');}_0x524e4e=_[_0x1a57('0x65')](_[_0x1a57('0x34')](_0x3374bc),[_0x1a57('0x66'),_0x1a57('0x67')]);_0x434244=_[_0x1a57('0x65')](_[_0x1a57('0x34')](_0x3374bc),[_0x1a57('0x66'),_0x1a57('0x67'),_0x1a57('0x68'),_0x1a57('0x69')]);if(_0x3661aa[_0x1a57('0x4e')]['id']){delete _0x3661aa[_0x1a57('0x4e')]['id'];}if(_[_0x1a57('0x6a')](_0x3661aa['body'][_0x1a57('0x6b')])){throw new db[(_0x1a57('0x63'))][(_0x1a57('0x64'))](_0x1a57('0x6c'));}if(_[_0x1a57('0x6a')](_0x3661aa[_0x1a57('0x4e')]['body'])||_0x3661aa[_0x1a57('0x4e')][_0x1a57('0x4e')]===''){throw new db[(_0x1a57('0x63'))][(_0x1a57('0x64'))](_0x1a57('0x6d'));}if(_['isNil'](_0x3661aa[_0x1a57('0x4e')][_0x1a57('0x6e')])){throw new db['Sequelize'][(_0x1a57('0x64'))](_0x1a57('0x6f')+_0x434244);}if(!_[_0x1a57('0x70')](_0x434244,_0x3661aa[_0x1a57('0x4e')]['mapKey'])){throw new db['Sequelize'][(_0x1a57('0x64'))](_0x1a57('0x71')+_0x434244);}_0x27770f[_0x3661aa['body'][_0x1a57('0x6e')]]=_0x3661aa[_0x1a57('0x4e')][_0x1a57('0x6b')];})[_0x1a57('0x19')](function(){return db[_0x1a57('0x31')][_0x1a57('0x4c')]({'where':{'id':_0x3661aa[_0x1a57('0x4a')]['id']},'include':[{'model':db[_0x1a57('0x72')],'as':_0x1a57('0x73'),'include':[{'model':db[_0x1a57('0x62')],'as':_0x1a57('0x74'),'where':_0x27770f,'limit':0x1,'order':[[_0x1a57('0x67'),'DESC']]}]},{'model':db[_0x1a57('0x75')],'as':_0x1a57('0x76')}]});})[_0x1a57('0x19')](handleEntityNotFound(_0x5223ca,null))[_0x1a57('0x19')](function(_0x2c40de){if(_0x2c40de&&_0x2c40de[_0x1a57('0x73')]){_0x172d2e[_0x1a57('0x77')]=_0x2c40de;_0x172d2e[_0x1a57('0x78')]=_0x2c40de[_0x1a57('0x76')];_0x172d2e['list']=_0x2c40de[_0x1a57('0x73')];_0x172d2e[_0x1a57('0x78')]=_[_0x1a57('0x79')](_0x172d2e[_0x1a57('0x78')],[_0x1a57('0x7a')],[_0x1a57('0x7b')]);if(_0x172d2e[_0x1a57('0x77')]['Applications']){delete _0x172d2e[_0x1a57('0x77')][_0x1a57('0x76')];}if(_0x172d2e[_0x1a57('0x77')][_0x1a57('0x73')]&&_0x172d2e[_0x1a57('0x77')][_0x1a57('0x73')][_0x1a57('0x74')][_0x1a57('0x3b')]){return _0x172d2e[_0x1a57('0x77')][_0x1a57('0x73')][_0x1a57('0x74')][0x0];}var _0x487310=_['defaults'](_0x3661aa[_0x1a57('0x4e')],{'firstName':_0x3661aa['body'][_0x1a57('0x6b')],'ListId':_0x2c40de[_0x1a57('0x69')]});_0x487310[_0x3661aa[_0x1a57('0x4e')][_0x1a57('0x6e')]]=_0x3661aa[_0x1a57('0x4e')][_0x1a57('0x6b')];return db[_0x1a57('0x62')][_0x1a57('0x4d')](_0x487310,{'fields':_0x524e4e,'raw':!![]});}})[_0x1a57('0x19')](handleEntityNotFound(_0x5223ca,null))[_0x1a57('0x19')](function(_0x297c0d){_0x172d2e[_0x1a57('0x7c')]=_0x297c0d;if(_0x297c0d){var _0x3957c7={'ContactId':_0x297c0d['id'],'OpenchannelAccountId':_0x3661aa['params']['id'],'from':(_0x297c0d['firstName']||'')+'\x20'+(_0x297c0d[_0x1a57('0x7d')]||'')};var _0x5d7648={'OpenchannelAccountId':_0x3661aa[_0x1a57('0x4a')]['id'],'closed':![]};if(_0x3661aa[_0x1a57('0x4e')]['threadId']){_0x5d7648[_0x1a57('0x7e')]=_0x3661aa[_0x1a57('0x4e')][_0x1a57('0x7e')];return db[_0x1a57('0x7f')][_0x1a57('0x4c')]({'where':_0x5d7648})[_0x1a57('0x19')](function(_0xb6e790){if(_0xb6e790){return[_0xb6e790,![]];}_0x3957c7['threadId']=_0x3661aa[_0x1a57('0x4e')][_0x1a57('0x7e')];_0x3957c7['externalUrl']=_0x3661aa[_0x1a57('0x4e')][_0x1a57('0x80')];return db[_0x1a57('0x7f')]['create'](_0x3957c7)[_0x1a57('0x19')](function(_0x52c857){return[_0x52c857,!![]];});});}else{_0x5d7648['threadId']=null;}_0x5d7648[_0x1a57('0x81')]=_0x297c0d['id'];return db['OpenchannelInteraction']['find']({'where':_0x5d7648})[_0x1a57('0x19')](function(_0x2a1245){if(_0x2a1245){return[_0x2a1245,![]];}return db[_0x1a57('0x7f')][_0x1a57('0x4d')](_0x3957c7)['then'](function(_0x5dd03e){return[_0x5dd03e,!![]];});});}})[_0x1a57('0x82')](function(_0x4a6ae2,_0x308e36){if(_0x4a6ae2){_0x30da6a=_0x308e36;if(!_0x308e36){return _0x4a6ae2[_0x1a57('0x2b')]({'from':(_0x172d2e[_0x1a57('0x7c')][_0x1a57('0x83')]||'')+'\x20'+(_0x172d2e['contact']['lastName']||'')});}else{return _0x4a6ae2;}}})[_0x1a57('0x19')](function(_0x2036f1){_0x172d2e[_0x1a57('0x84')]=_0x2036f1[_0x1a57('0x85')]({'plain':!![]});_0x172d2e['interaction']['created']=_0x30da6a;if(_0x172d2e[_0x1a57('0x84')]['created']){if(_0x172d2e['account'][_0x1a57('0x86')]){_0x172d2e[_0x1a57('0x78')][_0x1a57('0x87')]({'id':0x0,'priority':_0x172d2e[_0x1a57('0x78')][_0x1a57('0x3b')]+0x1,'app':_0x1a57('0x88'),'appdata':_0x1a57('0x89'),'interval':_0x1a57('0x8a')});}}return db[_0x1a57('0x8b')][_0x1a57('0x4d')]({'body':_0x3661aa[_0x1a57('0x4e')][_0x1a57('0x4e')],'OpenchannelAccountId':_0x3661aa[_0x1a57('0x4a')]['id'],'OpenchannelInteractionId':_0x2036f1['id'],'direction':'in','ContactId':_0x172d2e['contact']['id'],'AttachmentId':_0x3661aa[_0x1a57('0x4e')][_0x1a57('0x8c')]});})[_0x1a57('0x19')](function(_0x1e57bb){_0x172d2e[_0x1a57('0x1f')]=_0x1e57bb;if(_0x172d2e[_0x1a57('0x84')][_0x1a57('0x8d')]){return db[_0x1a57('0x8e')][_0x1a57('0x4c')]({'attributes':['id',_0x1a57('0x2e')],'where':{'id':_0x172d2e['interaction'][_0x1a57('0x8d')]}})[_0x1a57('0x19')](function(_0x295a2e){if(_0x295a2e){_0x172d2e[_0x1a57('0x78')][_0x1a57('0x8f')]({'id':0x0,'priority':0x0,'app':_0x1a57('0x90'),'appdata':_0x295a2e[_0x1a57('0x2e')]+','+(_0x172d2e[_0x1a57('0x77')]['waitForTheAssignedAgent']||0xa),'interval':_0x1a57('0x8a')});_0x172d2e[_0x1a57('0x91')]=![];}return respondWithRpcPromise('Start',_0x1a57('0x92'),_0x172d2e);});}return respondWithRpcPromise(_0x1a57('0x93'),_0x1a57('0x92'),_0x172d2e);})['then'](function(_0xdaf58b){respondWithRpcPromise('EventManager',_0x1a57('0x94'),{'event':_0x1a57('0x60'),'message':_0xdaf58b},client9002);return _0xdaf58b;})[_0x1a57('0x19')](respondWithResult(_0x5223ca,null))[_0x1a57('0x20')](handleError(_0x5223ca,null));};exports[_0x1a57('0x95')]=function(_0x4cf958,_0x337ce5,_0x29b4bb){return db[_0x1a57('0x31')][_0x1a57('0x54')]({'where':{'id':_0x4cf958[_0x1a57('0x4a')]['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x337ce5,null))[_0x1a57('0x19')](function(_0x3017ba){if(_0x3017ba){return db[_0x1a57('0x96')][_0x1a57('0x97')](function(_0x1e901f){return db[_0x1a57('0x75')]['destroy']({'where':{'OpenchannelAccountId':_0x4cf958['params']['id']},'transaction':_0x1e901f})[_0x1a57('0x19')](function(_0x4d0799){var _0xdbb86d=_[_0x1a57('0x59')](_0x4cf958['body'],function(_0x2f9860){_0x2f9860[_0x1a57('0x58')]=_0x4cf958['params']['id'];return _0x2f9860;});return db[_0x1a57('0x75')]['bulkCreate'](_0xdbb86d,{'transaction':_0x1e901f});});})[_0x1a57('0x19')](function(){return db[_0x1a57('0x75')][_0x1a57('0x98')]({'where':{'OpenchannelAccountId':_0x4cf958['params']['id']},'order':_0x1a57('0x7a')});});}})[_0x1a57('0x19')](respondWithResult(_0x337ce5,null))[_0x1a57('0x20')](handleError(_0x337ce5,null));};exports[_0x1a57('0x99')]=function(_0x49cc6e,_0x85bec5,_0x16ebaf){var _0x540e2c={};var _0x358453={};var _0x350676;var _0x3d888f;return db[_0x1a57('0x31')]['findOne']({'where':{'id':_0x49cc6e[_0x1a57('0x4a')]['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x85bec5,null))[_0x1a57('0x19')](function(_0x56e2a2){if(_0x56e2a2){_0x350676=_0x56e2a2;_0x358453[_0x1a57('0x33')]=_[_0x1a57('0x34')](db[_0x1a57('0x75')]['rawAttributes']);_0x358453['query']=_[_0x1a57('0x34')](_0x49cc6e[_0x1a57('0x36')]);_0x358453[_0x1a57('0x3f')]=_['intersection'](_0x358453[_0x1a57('0x33')],_0x358453['query']);_0x540e2c[_0x1a57('0x38')]=_['intersection'](_0x358453['model'],qs[_0x1a57('0x3a')](_0x49cc6e[_0x1a57('0x36')][_0x1a57('0x3a')]));_0x540e2c[_0x1a57('0x38')]=_0x540e2c[_0x1a57('0x38')][_0x1a57('0x3b')]?_0x540e2c[_0x1a57('0x38')]:_0x358453[_0x1a57('0x33')];_0x540e2c['order']=qs['sort'](_0x49cc6e['query'][_0x1a57('0x3d')]);_0x540e2c['where']=qs[_0x1a57('0x3f')](_['pick'](_0x49cc6e[_0x1a57('0x36')],_0x358453[_0x1a57('0x3f')]));if(_0x49cc6e[_0x1a57('0x36')][_0x1a57('0x43')]){_0x540e2c[_0x1a57('0x3e')]=_[_0x1a57('0x42')](_0x540e2c['where'],{'$or':_[_0x1a57('0x59')](_0x540e2c[_0x1a57('0x38')],function(_0x320365){var _0x3bda0a={};_0x3bda0a[_0x320365]={'$like':'%'+_0x49cc6e[_0x1a57('0x36')]['filter']+'%'};return _0x3bda0a;})});}_0x540e2c=_[_0x1a57('0x42')]({},_0x540e2c,_0x49cc6e['options']);return _0x350676[_0x1a57('0x99')](_0x540e2c);}})[_0x1a57('0x19')](function(_0x12cead){if(_0x12cead){_0x3d888f=_0x12cead[_0x1a57('0x3b')];if(!_0x49cc6e['query'][_0x1a57('0x3c')]('nolimit')){_0x540e2c['limit']=qs[_0x1a57('0x26')](_0x49cc6e[_0x1a57('0x36')][_0x1a57('0x26')]);_0x540e2c[_0x1a57('0x25')]=qs['offset'](_0x49cc6e['query'][_0x1a57('0x25')]);}return _0x350676[_0x1a57('0x99')](_0x540e2c);}})['then'](function(_0x3006f4){if(_0x3006f4){return _0x3006f4?{'count':_0x3d888f,'rows':_0x3006f4}:null;}})['then'](respondWithResult(_0x85bec5,null))[_0x1a57('0x20')](handleError(_0x85bec5,null));};exports[_0x1a57('0x9a')]=function(_0x5f6836,_0x1cee37,_0x1cefa9){var _0xf41851={'raw':![],'where':{}};var _0x19228b={};var _0x1db3dc={'count':0x0,'rows':[]};return db[_0x1a57('0x31')][_0x1a57('0x54')]({'where':{'id':_0x5f6836[_0x1a57('0x4a')]['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x1cee37,null))[_0x1a57('0x19')](function(_0x2b9652){if(_0x2b9652){_0x19228b[_0x1a57('0x33')]=_['keys'](db['OpenchannelInteraction']['rawAttributes']);_0x19228b[_0x1a57('0x36')]=_[_0x1a57('0x34')](_0x5f6836[_0x1a57('0x36')]);_0x19228b['filters']=_['intersection'](_0x19228b[_0x1a57('0x33')],_0x19228b[_0x1a57('0x36')]);_0xf41851[_0x1a57('0x38')]=_[_0x1a57('0x39')](_0x19228b[_0x1a57('0x33')],qs['fields'](_0x5f6836[_0x1a57('0x36')][_0x1a57('0x3a')]));_0xf41851[_0x1a57('0x38')]=_0xf41851[_0x1a57('0x38')][_0x1a57('0x3b')]?_0xf41851[_0x1a57('0x38')]:_0x19228b[_0x1a57('0x33')];if(!_0x5f6836[_0x1a57('0x36')]['hasOwnProperty']('nolimit')){_0xf41851['limit']=qs[_0x1a57('0x26')](_0x5f6836[_0x1a57('0x36')][_0x1a57('0x26')]);_0xf41851[_0x1a57('0x25')]=qs[_0x1a57('0x25')](_0x5f6836[_0x1a57('0x36')][_0x1a57('0x25')]);}_0xf41851[_0x1a57('0x56')]=qs[_0x1a57('0x3d')](_0x5f6836['query'][_0x1a57('0x3d')]);_0xf41851[_0x1a57('0x3e')]=qs[_0x1a57('0x3f')](_[_0x1a57('0x57')](_0x5f6836['query'],_0x19228b[_0x1a57('0x3f')]));_0xf41851[_0x1a57('0x3e')]['OpenchannelAccountId']=_0x2b9652['id'];if(_0x5f6836[_0x1a57('0x36')][_0x1a57('0x43')]){_0xf41851[_0x1a57('0x3e')]=_['merge'](_0xf41851['where'],{'$or':_[_0x1a57('0x59')](_0xf41851[_0x1a57('0x38')],function(_0x8450fd){var _0x388e8e={};_0x388e8e[_0x8450fd]={'$like':'%'+_0x5f6836[_0x1a57('0x36')][_0x1a57('0x43')]+'%'};return _0x388e8e;})});}_0xf41851=_[_0x1a57('0x42')]({},_0xf41851,_0x5f6836['options']);return db[_0x1a57('0x7f')][_0x1a57('0x44')]({'where':_0xf41851[_0x1a57('0x3e')]})[_0x1a57('0x19')](function(_0x3ed62c){_0x1db3dc['count']=_0x3ed62c;if(_0x5f6836['query'][_0x1a57('0x45')]){_0xf41851[_0x1a57('0x46')]=[{'model':db[_0x1a57('0x62')],'as':_0x1a57('0x9b'),'required':![]},{'model':db[_0x1a57('0x8e')],'as':'Owner','attributes':[_0x1a57('0x2e'),_0x1a57('0x9c'),_0x1a57('0x9d')],'required':![]},{'model':db[_0x1a57('0x9e')],'as':_0x1a57('0x9f'),'attributes':['id',_0x1a57('0x2e'),_0x1a57('0xa0')],'where':_0x5f6836[_0x1a57('0x36')]['tag']?{'id':_0x5f6836['query'][_0x1a57('0xa1')]}:undefined,'required':_0x5f6836[_0x1a57('0x36')][_0x1a57('0xa1')]?!![]:![]}];}return db[_0x1a57('0x7f')][_0x1a57('0x47')](_0xf41851);})['then'](function(_0x523e60){_0x1db3dc[_0x1a57('0x48')]=_0x523e60;return _0x1db3dc;});}})[_0x1a57('0x19')](respondWithFilteredResult(_0x1cee37,_0xf41851))[_0x1a57('0x20')](handleError(_0x1cee37,null));};exports[_0x1a57('0xa2')]=function(_0x550f23,_0x4af782,_0x42e803){return db[_0x1a57('0x31')][_0x1a57('0x4c')]({'where':{'id':_0x550f23[_0x1a57('0x4a')]['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x4af782,null))[_0x1a57('0x19')](function(_0x78c289){if(_0x78c289){return _0x78c289['addAgents'](_0x550f23[_0x1a57('0x4e')]['ids'],_[_0x1a57('0xa3')](_0x550f23[_0x1a57('0x4e')],[_0x1a57('0x5b'),'id'])||{})[_0x1a57('0x82')](function(_0x167662){for(var _0x1bbdbc=0x0;_0x1bbdbc<_0x550f23['body'][_0x1a57('0x5b')]['length'];_0x1bbdbc+=0x1){socket[_0x1a57('0xa4')]('userOpenchannelAccount:save',{'UserId':_0x550f23[_0x1a57('0x4e')][_0x1a57('0x5b')][_0x1bbdbc],'OpenchannelAccountId':_0x550f23['params']['id']});}return _0x167662;});}})[_0x1a57('0x19')](respondWithResult(_0x4af782,null))[_0x1a57('0x20')](handleError(_0x4af782,null));};exports[_0x1a57('0xa5')]=function(_0x44d5f2,_0x4a2513,_0x13fd79){var _0x242992;return db[_0x1a57('0x31')][_0x1a57('0x4c')]({'where':{'id':_0x44d5f2[_0x1a57('0x4a')]['id']}})['then'](handleEntityNotFound(_0x4a2513,null))[_0x1a57('0x19')](function(_0x784010){if(_0x784010){return _0x784010[_0x1a57('0xa5')](_0x44d5f2[_0x1a57('0x36')][_0x1a57('0x5b')])[_0x1a57('0x19')](function(_0x4028c2){if(_[_0x1a57('0xa6')](_0x44d5f2[_0x1a57('0x36')]['ids'])){for(var _0x347b3f=0x0;_0x347b3f<_0x44d5f2['query'][_0x1a57('0x5b')][_0x1a57('0x3b')];_0x347b3f+=0x1){socket['emit'](_0x1a57('0xa7'),{'UserId':_0x44d5f2[_0x1a57('0x36')][_0x1a57('0x5b')][_0x347b3f],'OpenchannelAccountId':_0x44d5f2[_0x1a57('0x4a')]['id']});}}else{socket['emit'](_0x1a57('0xa7'),{'UserId':_0x44d5f2[_0x1a57('0x36')]['ids'],'OpenchannelAccountId':_0x44d5f2[_0x1a57('0x4a')]['id']});}});}})[_0x1a57('0x19')](respondWithStatusCode(_0x4a2513,null))[_0x1a57('0x20')](handleError(_0x4a2513,null));};exports[_0x1a57('0xa8')]=function(_0x13fa27,_0x31359c,_0x2aba08){var _0xb041cb={};var _0x4f8f5b={};var _0xe1047e;var _0x51b73d;return db[_0x1a57('0x31')][_0x1a57('0x54')]({'where':{'id':_0x13fa27[_0x1a57('0x4a')]['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x31359c,null))[_0x1a57('0x19')](function(_0x2a68a5){if(_0x2a68a5){_0xe1047e=_0x2a68a5;_0x4f8f5b[_0x1a57('0x33')]=_[_0x1a57('0x34')](db['User'][_0x1a57('0x32')]);_0x4f8f5b[_0x1a57('0x36')]=_[_0x1a57('0x34')](_0x13fa27[_0x1a57('0x36')]);_0x4f8f5b[_0x1a57('0x3f')]=_[_0x1a57('0x39')](_0x4f8f5b['model'],_0x4f8f5b[_0x1a57('0x36')]);_0xb041cb[_0x1a57('0x38')]=_[_0x1a57('0x39')](_0x4f8f5b[_0x1a57('0x33')],qs['fields'](_0x13fa27[_0x1a57('0x36')][_0x1a57('0x3a')]));_0xb041cb['attributes']=_0xb041cb[_0x1a57('0x38')]['length']?_0xb041cb['attributes']:_0x4f8f5b[_0x1a57('0x33')];_0xb041cb[_0x1a57('0x56')]=qs['sort'](_0x13fa27[_0x1a57('0x36')][_0x1a57('0x3d')]);_0xb041cb[_0x1a57('0x3e')]=qs[_0x1a57('0x3f')](_[_0x1a57('0x57')](_0x13fa27[_0x1a57('0x36')],_0x4f8f5b[_0x1a57('0x3f')]));if(_0x13fa27[_0x1a57('0x36')][_0x1a57('0x43')]){_0xb041cb['where']=_[_0x1a57('0x42')](_0xb041cb[_0x1a57('0x3e')],{'$or':_[_0x1a57('0x59')](_0xb041cb[_0x1a57('0x38')],function(_0xd3bf32){var _0x89b4db={};_0x89b4db[_0xd3bf32]={'$like':'%'+_0x13fa27[_0x1a57('0x36')]['filter']+'%'};return _0x89b4db;})});}_0xb041cb=_[_0x1a57('0x42')]({},_0xb041cb,_0x13fa27[_0x1a57('0x4b')]);return _0xe1047e[_0x1a57('0xa8')](_0xb041cb);}})['then'](function(_0x223ddd){if(_0x223ddd){_0x51b73d=_0x223ddd[_0x1a57('0x3b')];if(!_0x13fa27[_0x1a57('0x36')]['hasOwnProperty'](_0x1a57('0x55'))){_0xb041cb['limit']=qs['limit'](_0x13fa27['query'][_0x1a57('0x26')]);_0xb041cb[_0x1a57('0x25')]=qs[_0x1a57('0x25')](_0x13fa27[_0x1a57('0x36')]['offset']);}return _0xe1047e[_0x1a57('0xa8')](_0xb041cb);}})[_0x1a57('0x19')](function(_0x313749){if(_0x313749){return _0x313749?{'count':_0x51b73d,'rows':_0x313749}:null;}})['then'](respondWithResult(_0x31359c,null))[_0x1a57('0x20')](handleError(_0x31359c,null));};exports[_0x1a57('0x2f')]=function(_0x286596,_0x9f255,_0x4d8aeb){var _0x3b78e7,_0x248d54,_0x4697ee;if(_['isNil'](_0x286596[_0x1a57('0x4e')][_0x1a57('0x4e')])||_0x286596[_0x1a57('0x4e')][_0x1a57('0x4e')]===''){throw new db[(_0x1a57('0x63'))][(_0x1a57('0x64'))](_0x1a57('0x6d'));}if(_[_0x1a57('0x6a')](_0x286596['body']['to'])){}_0x3b78e7=_0x286596[_0x1a57('0x4e')]['to'];return db[_0x1a57('0x31')][_0x1a57('0x54')]({'where':{'id':_0x286596[_0x1a57('0x4a')]['id']}})[_0x1a57('0x19')](handleEntityNotFound(_0x9f255,null))['then'](function(_0x1a863d){if(_0x1a863d){return db['OpenchannelAccount'][_0x1a57('0x4c')]({'where':{'id':_0x1a863d['id']},'include':[{'model':db[_0x1a57('0x72')],'as':_0x1a57('0x73'),'include':[{'model':db[_0x1a57('0x62')],'as':_0x1a57('0x74'),'where':{[_0x1a863d['mapKey']]:_0x3b78e7},'limit':0x1,'order':[['updatedAt',_0x1a57('0xa9')]]}]}]})[_0x1a57('0x19')](handleEntityNotFound(_0x9f255,null))['then'](function(_0x29cc34){if(_0x29cc34&&_0x29cc34[_0x1a57('0x73')]){_0x248d54=_0x29cc34[_0x1a57('0x85')]({'plain':!![]});if(_0x248d54['List']&&_0x248d54['List']['Contacts'][_0x1a57('0x3b')]){return _0x248d54['List'][_0x1a57('0x74')][0x0];}return db['CmContact'][_0x1a57('0x4d')](_[_0x1a57('0xaa')](_0x286596[_0x1a57('0x4e')],{'firstName':_0x3b78e7,[_0x29cc34['mapKey']]:_0x3b78e7,'phone':_0x3b78e7,'ListId':_0x248d54['ListId']}));}})[_0x1a57('0x19')](handleEntityNotFound(_0x9f255,null))[_0x1a57('0x19')](function(_0x35451f){if(_0x35451f){_0x4697ee=_0x35451f;return db[_0x1a57('0x7f')]['find']({'where':{'ContactId':_0x4697ee['id'],'closed':![],'OpenchannelAccountId':_0x248d54['id']}})['then'](function(_0x2e1525){if(_0x2e1525){return[_0x2e1525,![]];}return db[_0x1a57('0x7f')]['create']({'UserId':_0x286596[_0x1a57('0xab')]['id'],'ContactId':_0x4697ee['id'],'OpenchannelAccountId':_0x248d54['id'],'lastMsgDirection':_0x1a57('0xac'),'Messages':[_[_0x1a57('0x42')](_0x286596[_0x1a57('0x4e')],{'read':![],'body':_0x286596[_0x1a57('0x4e')]['body'],'OpenchannelAccountId':_0x248d54['id'],'UserId':_0x286596['user']['id'],'ContactId':_0x4697ee['id']})]},{'include':[{'model':db[_0x1a57('0x8b')],'as':_0x1a57('0xad')}]})['then'](function(_0x1138c3){return[_0x1138c3,!![]];});});}})['spread'](function(_0x52f51c,_0xb6d6db){if(_0xb6d6db){return _0x52f51c;}return db[_0x1a57('0x8b')][_0x1a57('0x4d')](_[_0x1a57('0x42')](_0x286596['body'],{'read':![],'body':_0x286596[_0x1a57('0x4e')][_0x1a57('0x4e')],'OpenchannelAccountId':_0x248d54['id'],'OpenchannelInteractionId':_0x52f51c['id'],'UserId':_0x286596[_0x1a57('0xab')]['id'],'ContactId':_0x4697ee['id']}))[_0x1a57('0x19')](function(_0x558d10){_0x52f51c[_0x1a57('0xae')][_0x1a57('0xad')]=[];_0x52f51c[_0x1a57('0xae')][_0x1a57('0xad')][_0x1a57('0x87')](_0x558d10[_0x1a57('0xae')]);return _0x52f51c;});});}})[_0x1a57('0x19')](respondWithResult(_0x9f255,null))['catch'](handleError(_0x9f255,null));};
\ No newline at end of file
index 8cbc673..9a144b2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7fb=['exports','../../mysqldb','OpenchannelAccount','setMaxListeners','save','update','remove','emit','hasOwnProperty'];(function(_0x144a5e,_0x4257d1){var _0x66610e=function(_0x529137){while(--_0x529137){_0x144a5e['push'](_0x144a5e['shift']());}};_0x66610e(++_0x4257d1);}(_0xb7fb,0x133));var _0xbb7f=function(_0x5cd13c,_0x1bc231){_0x5cd13c=_0x5cd13c-0x0;var _0x3e0f17=_0xb7fb[_0x5cd13c];return _0x3e0f17;};'use strict';var EventEmitter=require('events');var OpenchannelAccount=require(_0xbb7f('0x0'))['db'][_0xbb7f('0x1')];var OpenchannelAccountEvents=new EventEmitter();OpenchannelAccountEvents[_0xbb7f('0x2')](0x0);var events={'afterCreate':_0xbb7f('0x3'),'afterUpdate':_0xbb7f('0x4'),'afterDestroy':_0xbb7f('0x5')};function emitEvent(_0x21f591){return function(_0x44e9a8,_0x3d7d7c,_0x11b25c){OpenchannelAccountEvents['emit'](_0x21f591+':'+_0x44e9a8['id'],_0x44e9a8);OpenchannelAccountEvents[_0xbb7f('0x6')](_0x21f591,_0x44e9a8);_0x11b25c(null);};}for(var e in events){if(events[_0xbb7f('0x7')](e)){var event=events[e];OpenchannelAccount['hook'](e,emitEvent(event));}}module[_0xbb7f('0x8')]=OpenchannelAccountEvents;
\ No newline at end of file
+var _0x369a=['events','../../mysqldb','OpenchannelAccount','setMaxListeners','save','remove','emit','hasOwnProperty','hook','exports'];(function(_0x10e62a,_0x14141e){var _0x33442c=function(_0x17165c){while(--_0x17165c){_0x10e62a['push'](_0x10e62a['shift']());}};_0x33442c(++_0x14141e);}(_0x369a,0x17c));var _0xa369=function(_0xfcac94,_0x4f2f94){_0xfcac94=_0xfcac94-0x0;var _0xc039c0=_0x369a[_0xfcac94];return _0xc039c0;};'use strict';var EventEmitter=require(_0xa369('0x0'));var OpenchannelAccount=require(_0xa369('0x1'))['db'][_0xa369('0x2')];var OpenchannelAccountEvents=new EventEmitter();OpenchannelAccountEvents[_0xa369('0x3')](0x0);var events={'afterCreate':_0xa369('0x4'),'afterUpdate':'update','afterDestroy':_0xa369('0x5')};function emitEvent(_0x178b19){return function(_0x27511a,_0xddb25c,_0x128bea){OpenchannelAccountEvents['emit'](_0x178b19+':'+_0x27511a['id'],_0x27511a);OpenchannelAccountEvents[_0xa369('0x6')](_0x178b19,_0x27511a);_0x128bea(null);};}for(var e in events){if(events[_0xa369('0x7')](e)){var event=events[e];OpenchannelAccount[_0xa369('0x8')](e,emitEvent(event));}}module[_0xa369('0x9')]=OpenchannelAccountEvents;
\ No newline at end of file
index 5c70533..a1c755d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbdb7=['exports','openchannel_accounts','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./openchannelAccount.attributes'];(function(_0x137ef8,_0x3384dc){var _0x3b7d28=function(_0x291891){while(--_0x291891){_0x137ef8['push'](_0x137ef8['shift']());}};_0x3b7d28(++_0x3384dc);}(_0xbdb7,0x12e));var _0x7bdb=function(_0x3ce221,_0x22d678){_0x3ce221=_0x3ce221-0x0;var _0x3995b8=_0xbdb7[_0x3ce221];return _0x3995b8;};'use strict';var _=require(_0x7bdb('0x0'));var util=require(_0x7bdb('0x1'));var logger=require(_0x7bdb('0x2'))(_0x7bdb('0x3'));var moment=require(_0x7bdb('0x4'));var BPromise=require(_0x7bdb('0x5'));var rp=require(_0x7bdb('0x6'));var attributes=require(_0x7bdb('0x7'));module[_0x7bdb('0x8')]=function(_0x47aec5,_0x28542c){return _0x47aec5['define']('OpenchannelAccount',attributes,{'tableName':_0x7bdb('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8603=['util','../../config/logger','api','request-promise','./openchannelAccount.attributes','exports','OpenchannelAccount','openchannel_accounts'];(function(_0x46e81c,_0x52f86f){var _0x4f16c6=function(_0x3d495e){while(--_0x3d495e){_0x46e81c['push'](_0x46e81c['shift']());}};_0x4f16c6(++_0x52f86f);}(_0x8603,0x190));var _0x3860=function(_0x5e2382,_0x2eca83){_0x5e2382=_0x5e2382-0x0;var _0x533a35=_0x8603[_0x5e2382];return _0x533a35;};'use strict';var _=require('lodash');var util=require(_0x3860('0x0'));var logger=require(_0x3860('0x1'))(_0x3860('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x3860('0x3'));var attributes=require(_0x3860('0x4'));module[_0x3860('0x5')]=function(_0x490262,_0x2fc97a){return _0x490262['define'](_0x3860('0x6'),attributes,{'tableName':_0x3860('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c5f70c1..07b9788 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3937=['client','http','socket.io-emitter','localhost','./openchannelAccount.socket','register','request','OpenchannelAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','OpenchannelAccount,\x20%s,\x20%s','message','result','lodash','moment','bluebird','../../mysqldb','../../config/logger','../../config/environment','jayson/promise'];(function(_0x4a6953,_0x226a21){var _0x4c1f52=function(_0x4380eb){while(--_0x4380eb){_0x4a6953['push'](_0x4a6953['shift']());}};_0x4c1f52(++_0x226a21);}(_0x3937,0xbf));var _0x7393=function(_0x39dc71,_0x2c5b80){_0x39dc71=_0x39dc71-0x0;var _0x19d6b9=_0x3937[_0x39dc71];return _0x19d6b9;};'use strict';var _=require(_0x7393('0x0'));var util=require('util');var moment=require(_0x7393('0x1'));var BPromise=require(_0x7393('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x7393('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x7393('0x4'))('rpc');var config=require(_0x7393('0x5'));var jayson=require(_0x7393('0x6'));var client=jayson[_0x7393('0x7')][_0x7393('0x8')]({'port':0x232a});var socket=require(_0x7393('0x9'))({'host':_0x7393('0xa'),'port':0x18eb});require(_0x7393('0xb'))[_0x7393('0xc')](socket);function respondWithRpcPromise(_0x944b0b,_0x4efb50,_0x565ab6){return new BPromise(function(_0x287359,_0x3b7bbc){return client[_0x7393('0xd')](_0x944b0b,_0x565ab6)['then'](function(_0xab290c){logger['info']('OpenchannelAccount,\x20%s,\x20%s',_0x4efb50,'request\x20sent');logger['debug'](_0x7393('0xe'),_0x4efb50,_0x7393('0xf'),JSON[_0x7393('0x10')](_0xab290c));if(_0xab290c['error']){if(_0xab290c[_0x7393('0x11')][_0x7393('0x12')]===0x1f4){logger[_0x7393('0x11')](_0x7393('0x13'),_0x4efb50,_0xab290c[_0x7393('0x11')][_0x7393('0x14')]);return _0x3b7bbc(_0xab290c[_0x7393('0x11')][_0x7393('0x14')]);}logger[_0x7393('0x11')]('OpenchannelAccount,\x20%s,\x20%s',_0x4efb50,_0xab290c['error'][_0x7393('0x14')]);return _0x287359(_0xab290c['error']['message']);}else{logger['info'](_0x7393('0x13'),_0x4efb50,'request\x20sent');_0x287359(_0xab290c[_0x7393('0x15')][_0x7393('0x14')]);}})['catch'](function(_0x459abf){logger['error']('OpenchannelAccount,\x20%s,\x20%s',_0x4efb50,_0x459abf);_0x3b7bbc(_0x459abf);});});}
\ No newline at end of file
+var _0x1dcc=['OpenchannelAccount,\x20%s,\x20%s','request\x20sent','debug','OpenchannelAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','../../mysqldb','../../config/logger','rpc','../../config/environment','http','socket.io-emitter','localhost','register','then','info'];(function(_0x22de03,_0x3952fb){var _0x2d01ee=function(_0x51f489){while(--_0x51f489){_0x22de03['push'](_0x22de03['shift']());}};_0x2d01ee(++_0x3952fb);}(_0x1dcc,0x1ea));var _0xc1dc=function(_0x39adb8,_0x577558){_0x39adb8=_0x39adb8-0x0;var _0x23a0f4=_0x1dcc[_0x39adb8];return _0x23a0f4;};'use strict';var _=require(_0xc1dc('0x0'));var util=require(_0xc1dc('0x1'));var moment=require(_0xc1dc('0x2'));var BPromise=require(_0xc1dc('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xc1dc('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xc1dc('0x5'))(_0xc1dc('0x6'));var config=require(_0xc1dc('0x7'));var jayson=require('jayson/promise');var client=jayson['client'][_0xc1dc('0x8')]({'port':0x232a});var socket=require(_0xc1dc('0x9'))({'host':_0xc1dc('0xa'),'port':0x18eb});require('./openchannelAccount.socket')[_0xc1dc('0xb')](socket);function respondWithRpcPromise(_0x3deb94,_0x597ba8,_0x6aad09){return new BPromise(function(_0x51c02b,_0x2e606d){return client['request'](_0x3deb94,_0x6aad09)[_0xc1dc('0xc')](function(_0x16520d){logger[_0xc1dc('0xd')](_0xc1dc('0xe'),_0x597ba8,_0xc1dc('0xf'));logger[_0xc1dc('0x10')](_0xc1dc('0x11'),_0x597ba8,_0xc1dc('0xf'),JSON[_0xc1dc('0x12')](_0x16520d));if(_0x16520d['error']){if(_0x16520d[_0xc1dc('0x13')][_0xc1dc('0x14')]===0x1f4){logger[_0xc1dc('0x13')]('OpenchannelAccount,\x20%s,\x20%s',_0x597ba8,_0x16520d[_0xc1dc('0x13')][_0xc1dc('0x15')]);return _0x2e606d(_0x16520d[_0xc1dc('0x13')][_0xc1dc('0x15')]);}logger[_0xc1dc('0x13')](_0xc1dc('0xe'),_0x597ba8,_0x16520d[_0xc1dc('0x13')][_0xc1dc('0x15')]);return _0x51c02b(_0x16520d[_0xc1dc('0x13')][_0xc1dc('0x15')]);}else{logger[_0xc1dc('0xd')]('OpenchannelAccount,\x20%s,\x20%s',_0x597ba8,_0xc1dc('0xf'));_0x51c02b(_0x16520d[_0xc1dc('0x16')][_0xc1dc('0x15')]);}})[_0xc1dc('0x17')](function(_0x47c72e){logger[_0xc1dc('0x13')](_0xc1dc('0xe'),_0x597ba8,_0x47c72e);_0x2e606d(_0x47c72e);});});}
\ No newline at end of file
index 6b223c1..ce6b9a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x46aa=['remove','emit','removeListener','./openchannelAccount.events'];(function(_0x318219,_0x3cc013){var _0x26f8db=function(_0x147a82){while(--_0x147a82){_0x318219['push'](_0x318219['shift']());}};_0x26f8db(++_0x3cc013);}(_0x46aa,0xb7));var _0xa46a=function(_0x5d6456,_0x58ecc7){_0x5d6456=_0x5d6456-0x0;var _0x4d66c1=_0x46aa[_0x5d6456];return _0x4d66c1;};'use strict';var OpenchannelAccountEvents=require(_0xa46a('0x0'));var events=['save',_0xa46a('0x1'),'update'];function createListener(_0x2b12b0,_0x5dbd7a){return function(_0x6ed08d){_0x5dbd7a[_0xa46a('0x2')](_0x2b12b0,_0x6ed08d);};}function removeListener(_0x4132dc,_0x582ec5){return function(){OpenchannelAccountEvents[_0xa46a('0x3')](_0x4132dc,_0x582ec5);};}exports['register']=function(_0x4090e6){for(var _0x288388=0x0,_0x349ea5=events['length'];_0x288388<_0x349ea5;_0x288388++){var _0x4ef413=events[_0x288388];var _0x285d4d=createListener('openchannelAccount:'+_0x4ef413,_0x4090e6);OpenchannelAccountEvents['on'](_0x4ef413,_0x285d4d);}};
\ No newline at end of file
+var _0x423d=['./openchannelAccount.events','save','remove','update','emit','removeListener','length'];(function(_0x42f721,_0xe02cf8){var _0x48caab=function(_0x49a289){while(--_0x49a289){_0x42f721['push'](_0x42f721['shift']());}};_0x48caab(++_0xe02cf8);}(_0x423d,0xee));var _0xd423=function(_0x38ccee,_0x51aed0){_0x38ccee=_0x38ccee-0x0;var _0x3a30a2=_0x423d[_0x38ccee];return _0x3a30a2;};'use strict';var OpenchannelAccountEvents=require(_0xd423('0x0'));var events=[_0xd423('0x1'),_0xd423('0x2'),_0xd423('0x3')];function createListener(_0x27461f,_0x493875){return function(_0x23ac88){_0x493875[_0xd423('0x4')](_0x27461f,_0x23ac88);};}function removeListener(_0xe01e6f,_0x44a789){return function(){OpenchannelAccountEvents[_0xd423('0x5')](_0xe01e6f,_0x44a789);};}exports['register']=function(_0x8c2693){for(var _0x2c4ec2=0x0,_0x470cc3=events[_0xd423('0x6')];_0x2c4ec2<_0x470cc3;_0x2c4ec2++){var _0x41f1c6=events[_0x2c4ec2];var _0x39b382=createListener('openchannelAccount:'+_0x41f1c6,_0x8c2693);OpenchannelAccountEvents['on'](_0x41f1c6,_0x39b382);}};
\ No newline at end of file
index ece82f1..f790557 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe706=['delete','destroy','exports','multer','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelApplication.controller','get','isAuthenticated','index','/:id','show','post','create','put','update'];(function(_0x107f31,_0x1bcd53){var _0x10560c=function(_0x5e1fc4){while(--_0x5e1fc4){_0x107f31['push'](_0x107f31['shift']());}};_0x10560c(++_0x1bcd53);}(_0xe706,0xa3));var _0x6e70=function(_0xbc2974,_0xec3342){_0xbc2974=_0xbc2974-0x0;var _0x3a5b4f=_0xe706[_0xbc2974];return _0x3a5b4f;};'use strict';var multer=require(_0x6e70('0x0'));var util=require(_0x6e70('0x1'));var path=require(_0x6e70('0x2'));var express=require('express');var router=express[_0x6e70('0x3')]();var auth=require(_0x6e70('0x4'));var interaction=require(_0x6e70('0x5'));var config=require(_0x6e70('0x6'));var controller=require(_0x6e70('0x7'));router[_0x6e70('0x8')]('/',auth[_0x6e70('0x9')](),controller[_0x6e70('0xa')]);router[_0x6e70('0x8')](_0x6e70('0xb'),auth[_0x6e70('0x9')](),controller[_0x6e70('0xc')]);router[_0x6e70('0xd')]('/',auth[_0x6e70('0x9')](),controller[_0x6e70('0xe')]);router[_0x6e70('0xf')](_0x6e70('0xb'),auth[_0x6e70('0x9')](),controller[_0x6e70('0x10')]);router[_0x6e70('0x11')](_0x6e70('0xb'),auth[_0x6e70('0x9')](),controller[_0x6e70('0x12')]);module[_0x6e70('0x13')]=router;
\ No newline at end of file
+var _0x0713=['path','express','Router','../../components/auth/service','../../components/interaction/service','./openchannelApplication.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy'];(function(_0x54a54f,_0x59254d){var _0x2574e5=function(_0x3c3b7b){while(--_0x3c3b7b){_0x54a54f['push'](_0x54a54f['shift']());}};_0x2574e5(++_0x59254d);}(_0x0713,0x1ba));var _0x3071=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0713[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x3071('0x0'));var express=require(_0x3071('0x1'));var router=express[_0x3071('0x2')]();var auth=require(_0x3071('0x3'));var interaction=require(_0x3071('0x4'));var config=require('../../config/environment');var controller=require(_0x3071('0x5'));router[_0x3071('0x6')]('/',auth[_0x3071('0x7')](),controller[_0x3071('0x8')]);router[_0x3071('0x6')](_0x3071('0x9'),auth[_0x3071('0x7')](),controller[_0x3071('0xa')]);router[_0x3071('0xb')]('/',auth[_0x3071('0x7')](),controller[_0x3071('0xc')]);router[_0x3071('0xd')](_0x3071('0x9'),auth['isAuthenticated'](),controller[_0x3071('0xe')]);router[_0x3071('0xf')](_0x3071('0x9'),auth[_0x3071('0x7')](),controller[_0x3071('0x10')]);module['exports']=router;
\ No newline at end of file
index 21ee737..b3c8ce2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc182=['noop','*,*,*,*','sequelize','INTEGER','STRING'];(function(_0x34f82a,_0x2458d6){var _0x1c9c1f=function(_0x5595c3){while(--_0x5595c3){_0x34f82a['push'](_0x34f82a['shift']());}};_0x1c9c1f(++_0x2458d6);}(_0xc182,0x1c9));var _0x2c18=function(_0x283a56,_0x268d28){_0x283a56=_0x283a56-0x0;var _0x82825a=_0xc182[_0x283a56];return _0x82825a;};'use strict';var Sequelize=require(_0x2c18('0x0'));module['exports']={'priority':{'type':Sequelize[_0x2c18('0x1')],'allowNull':![]},'app':{'type':Sequelize[_0x2c18('0x2')],'allowNull':![],'defaultValue':_0x2c18('0x3')},'appdata':{'type':Sequelize['STRING'](0x1000),'defaultValue':''},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize[_0x2c18('0x2')],'defaultValue':_0x2c18('0x4')}};
\ No newline at end of file
+var _0xef80=['INTEGER','STRING','*,*,*,*','sequelize','exports'];(function(_0x344891,_0x2706a7){var _0x388dab=function(_0x36afbf){while(--_0x36afbf){_0x344891['push'](_0x344891['shift']());}};_0x388dab(++_0x2706a7);}(_0xef80,0x1b6));var _0x0ef8=function(_0x1d291d,_0x17314a){_0x1d291d=_0x1d291d-0x0;var _0x44cc4e=_0xef80[_0x1d291d];return _0x44cc4e;};'use strict';var Sequelize=require(_0x0ef8('0x0'));module[_0x0ef8('0x1')]={'priority':{'type':Sequelize[_0x0ef8('0x2')],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize[_0x0ef8('0x3')](0x1000),'defaultValue':''},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize[_0x0ef8('0x3')],'defaultValue':_0x0ef8('0x4')}};
\ No newline at end of file
index 67e3b16..72420b2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3746=['params','length','include','options','find','create','body','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','api','../../config/environment','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','update','then','destroy','error','stack','name','send','index','OpenchannelApplication','rawAttributes','model','keys','query','dateEnd','dateStart','filters','intersection','attributes','fields','hasOwnProperty','limit','order','where','pick','add','day','merge','filter','map','includeAll','rows','catch','show'];(function(_0x5bc406,_0x129c28){var _0x1285c3=function(_0x58b86b){while(--_0x58b86b){_0x5bc406['push'](_0x5bc406['shift']());}};_0x1285c3(++_0x129c28);}(_0x3746,0x10f));var _0x6374=function(_0x2fba1a,_0x363f1d){_0x2fba1a=_0x2fba1a-0x0;var _0x4aeeea=_0x3746[_0x2fba1a];return _0x4aeeea;};'use strict';var jsonpatch=require(_0x6374('0x0'));var rp=require(_0x6374('0x1'));var moment=require(_0x6374('0x2'));var BPromise=require(_0x6374('0x3'));var Mustache=require(_0x6374('0x4'));var util=require(_0x6374('0x5'));var path=require('path');var sox=require(_0x6374('0x6'));var csv=require(_0x6374('0x7'));var ejs=require(_0x6374('0x8'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x6374('0x9'));var jsforce=require('jsforce');var deskjs=require(_0x6374('0xa'));var toCsv=require('to-csv');var querystring=require(_0x6374('0xb'));var Papa=require(_0x6374('0xc'));var qs=require(_0x6374('0xd'));var logger=require('../../config/logger')(_0x6374('0xe'));var utils=require('../../config/utils');var config=require(_0x6374('0xf'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3e1fd8,_0x53c57c){_0x53c57c=_0x53c57c||0xcc;return function(_0x3189aa){if(_0x3189aa){return _0x3e1fd8[_0x6374('0x10')](_0x53c57c);}return _0x3e1fd8[_0x6374('0x11')](_0x53c57c)[_0x6374('0x12')]();};}function respondWithResult(_0x2c5a4f,_0x5b90fe){_0x5b90fe=_0x5b90fe||0xc8;return function(_0x1db7b2){if(_0x1db7b2){return _0x2c5a4f[_0x6374('0x11')](_0x5b90fe)[_0x6374('0x13')](_0x1db7b2);}};}function respondWithFilteredResult(_0x2c953b,_0x22bd0e){return function(_0x14a8b1){if(_0x14a8b1){var _0x403bae=_0x14a8b1[_0x6374('0x14')],_0x4d083e=_0x22bd0e[_0x6374('0x15')],_0x3236f7=_0x22bd0e[_0x6374('0x15')]+_0x22bd0e['limit'],_0x58feba;if(_0x3236f7>=_0x403bae){_0x3236f7=_0x403bae;_0x58feba=0xc8;}else{_0x58feba=0xce;}_0x2c953b[_0x6374('0x11')](_0x58feba);return _0x2c953b[_0x6374('0x16')](_0x6374('0x17'),_0x4d083e+'-'+_0x3236f7+'/'+_0x403bae)[_0x6374('0x13')](_0x14a8b1);}return null;};}function patchUpdates(_0x4b1698){return function(_0x45d469){try{jsonpatch['apply'](_0x45d469,_0x4b1698,!![]);}catch(_0x4ea705){return BPromise[_0x6374('0x18')](_0x4ea705);}return _0x45d469[_0x6374('0x19')]();};}function saveUpdates(_0x35eae2,_0x36aa56){return function(_0x5793f7){if(_0x5793f7){return _0x5793f7[_0x6374('0x1a')](_0x35eae2)[_0x6374('0x1b')](function(_0x1752ec){return _0x1752ec;});}return null;};}function removeEntity(_0x477286,_0x175301){return function(_0x4ae246){if(_0x4ae246){return _0x4ae246[_0x6374('0x1c')]()['then'](function(){_0x477286[_0x6374('0x11')](0xcc)[_0x6374('0x12')]();});}};}function handleEntityNotFound(_0x1a9740,_0x2b2b9e){return function(_0x25ed18){if(!_0x25ed18){_0x1a9740['sendStatus'](0x194);}return _0x25ed18;};}function handleError(_0x2e01be,_0x14bfd3){_0x14bfd3=_0x14bfd3||0x1f4;return function(_0x134b02){logger[_0x6374('0x1d')](_0x134b02[_0x6374('0x1e')]);if(_0x134b02[_0x6374('0x1f')]){delete _0x134b02[_0x6374('0x1f')];}_0x2e01be[_0x6374('0x11')](_0x14bfd3)[_0x6374('0x20')](_0x134b02);};}exports[_0x6374('0x21')]=function(_0x6d02e8,_0x1312d4){var _0x264bcd={},_0x2f5639={},_0x1f931d={'count':0x0,'rows':[]};var _0x5da2a4=db[_0x6374('0x22')][_0x6374('0x23')];_0x2f5639[_0x6374('0x24')]=_[_0x6374('0x25')](_0x5da2a4);var _0x3ff34c={'dateStart':_0x6d02e8[_0x6374('0x26')]['dateStart'],'dateEnd':_0x6d02e8[_0x6374('0x26')][_0x6374('0x27')]};delete _0x6d02e8[_0x6374('0x26')][_0x6374('0x28')];delete _0x6d02e8['query'][_0x6374('0x27')];_0x2f5639['query']=_[_0x6374('0x25')](_0x6d02e8[_0x6374('0x26')]);_0x2f5639[_0x6374('0x29')]=_[_0x6374('0x2a')](_0x2f5639[_0x6374('0x24')],_0x2f5639['query']);_0x264bcd[_0x6374('0x2b')]=_[_0x6374('0x2a')](_0x2f5639[_0x6374('0x24')],qs['fields'](_0x6d02e8[_0x6374('0x26')][_0x6374('0x2c')]));_0x264bcd[_0x6374('0x2b')]=_0x264bcd[_0x6374('0x2b')]['length']?_0x264bcd['attributes']:_0x2f5639[_0x6374('0x24')];if(!_0x6d02e8[_0x6374('0x26')][_0x6374('0x2d')]('nolimit')){_0x264bcd[_0x6374('0x2e')]=qs[_0x6374('0x2e')](_0x6d02e8[_0x6374('0x26')][_0x6374('0x2e')]);_0x264bcd[_0x6374('0x15')]=qs[_0x6374('0x15')](_0x6d02e8[_0x6374('0x26')]['offset']);}_0x264bcd[_0x6374('0x2f')]=qs['sort'](_0x6d02e8[_0x6374('0x26')]['sort']);_0x264bcd[_0x6374('0x30')]=qs[_0x6374('0x29')](_[_0x6374('0x31')](_0x6d02e8[_0x6374('0x26')],_0x2f5639[_0x6374('0x29')]));if(_0x3ff34c[_0x6374('0x28')]){if(_0x3ff34c[_0x6374('0x27')]){_0x3ff34c[_0x6374('0x27')]=moment(_0x3ff34c[_0x6374('0x27')])[_0x6374('0x32')](0x1,_0x6374('0x33'));}else{_0x3ff34c[_0x6374('0x27')]=moment(_0x3ff34c[_0x6374('0x28')])[_0x6374('0x32')](0x1,'day');}_[_0x6374('0x34')](_0x264bcd[_0x6374('0x30')],{'createdAt':{'$gte':_0x3ff34c[_0x6374('0x28')],'$lte':_0x3ff34c[_0x6374('0x27')]}});}if(_0x6d02e8[_0x6374('0x26')][_0x6374('0x35')]){_0x264bcd[_0x6374('0x30')]=_[_0x6374('0x34')](_0x264bcd['where'],{'$or':_[_0x6374('0x36')](_0x264bcd[_0x6374('0x2b')],function(_0x1dc0ad){var _0x2d9c2a={};_0x2d9c2a[_0x1dc0ad]={'$like':'%'+_0x6d02e8[_0x6374('0x26')]['filter']+'%'};return _0x2d9c2a;})});}_0x264bcd=_[_0x6374('0x34')]({},_0x264bcd,_0x6d02e8['options']);var _0x447914={'where':_0x264bcd[_0x6374('0x30')]};return db[_0x6374('0x22')][_0x6374('0x14')](_0x447914)['then'](function(_0xbbb6da){_0x1f931d['count']=_0xbbb6da;if(_0x6d02e8[_0x6374('0x26')][_0x6374('0x37')]){_0x264bcd['include']=[{'all':!![]}];}return db['OpenchannelApplication']['findAll'](_0x264bcd);})[_0x6374('0x1b')](function(_0x37d77f){_0x1f931d[_0x6374('0x38')]=_0x37d77f;return _0x1f931d;})[_0x6374('0x1b')](respondWithFilteredResult(_0x1312d4,_0x264bcd))[_0x6374('0x39')](handleError(_0x1312d4,null));};exports[_0x6374('0x3a')]=function(_0x3605ea,_0x41f655){var _0x3829a1={'raw':!![],'where':{'id':_0x3605ea[_0x6374('0x3b')]['id']}},_0x36d72d={};_0x36d72d['model']=_[_0x6374('0x25')](db[_0x6374('0x22')][_0x6374('0x23')]);_0x36d72d[_0x6374('0x26')]=_[_0x6374('0x25')](_0x3605ea[_0x6374('0x26')]);_0x36d72d[_0x6374('0x29')]=_['intersection'](_0x36d72d['model'],_0x36d72d['query']);_0x3829a1[_0x6374('0x2b')]=_[_0x6374('0x2a')](_0x36d72d['model'],qs[_0x6374('0x2c')](_0x3605ea[_0x6374('0x26')]['fields']));_0x3829a1['attributes']=_0x3829a1['attributes'][_0x6374('0x3c')]?_0x3829a1[_0x6374('0x2b')]:_0x36d72d['model'];if(_0x3605ea[_0x6374('0x26')][_0x6374('0x37')]){_0x3829a1[_0x6374('0x3d')]=[{'all':!![]}];}_0x3829a1=_[_0x6374('0x34')]({},_0x3829a1,_0x3605ea[_0x6374('0x3e')]);return db[_0x6374('0x22')][_0x6374('0x3f')](_0x3829a1)[_0x6374('0x1b')](handleEntityNotFound(_0x41f655,null))['then'](respondWithResult(_0x41f655,null))['catch'](handleError(_0x41f655,null));};exports[_0x6374('0x40')]=function(_0x14f0c5,_0x5b29ef){return db[_0x6374('0x22')]['create'](_0x14f0c5[_0x6374('0x41')],{})[_0x6374('0x1b')](respondWithResult(_0x5b29ef,0xc9))[_0x6374('0x39')](handleError(_0x5b29ef,null));};exports[_0x6374('0x1a')]=function(_0x4938ee,_0xa1acc3){if(_0x4938ee[_0x6374('0x41')]['id']){delete _0x4938ee[_0x6374('0x41')]['id'];}return db[_0x6374('0x22')][_0x6374('0x3f')]({'where':{'id':_0x4938ee[_0x6374('0x3b')]['id']}})[_0x6374('0x1b')](handleEntityNotFound(_0xa1acc3,null))['then'](saveUpdates(_0x4938ee[_0x6374('0x41')],null))[_0x6374('0x1b')](respondWithResult(_0xa1acc3,null))[_0x6374('0x39')](handleError(_0xa1acc3,null));};exports[_0x6374('0x1c')]=function(_0x48d403,_0x116652){return db[_0x6374('0x22')][_0x6374('0x3f')]({'where':{'id':_0x48d403[_0x6374('0x3b')]['id']}})[_0x6374('0x1b')](handleEntityNotFound(_0x116652,null))[_0x6374('0x1b')](removeEntity(_0x116652,null))[_0x6374('0x39')](handleError(_0x116652,null));};
\ No newline at end of file
+var _0x55d5=['fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','querystring','papaparse','../../config/logger','../../config/utils','../../config/environment','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','end','sendStatus','error','name','send','index','OpenchannelApplication','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','filters','pick','add','day','merge','filter','includeAll','findAll','rows','show','params','options','find','catch','create','body'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0x55d5,0x1d5));var _0x555d=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x55d5[_0x40a045];return _0x1a687c;};'use strict';var jsonpatch=require(_0x555d('0x0'));var rp=require(_0x555d('0x1'));var moment=require(_0x555d('0x2'));var BPromise=require(_0x555d('0x3'));var Mustache=require(_0x555d('0x4'));var util=require(_0x555d('0x5'));var path=require(_0x555d('0x6'));var sox=require(_0x555d('0x7'));var csv=require(_0x555d('0x8'));var ejs=require(_0x555d('0x9'));var fs=require('fs');var _=require(_0x555d('0xa'));var squel=require(_0x555d('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x555d('0xc'));var Papa=require(_0x555d('0xd'));var qs=require('../../components/parsers/qs');var logger=require(_0x555d('0xe'))('api');var utils=require(_0x555d('0xf'));var config=require(_0x555d('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x26c4ce,_0x404101){_0x404101=_0x404101||0xcc;return function(_0x1bcb22){if(_0x1bcb22){return _0x26c4ce['sendStatus'](_0x404101);}return _0x26c4ce['status'](_0x404101)['end']();};}function respondWithResult(_0x1bdddd,_0x215faf){_0x215faf=_0x215faf||0xc8;return function(_0x18eb9e){if(_0x18eb9e){return _0x1bdddd[_0x555d('0x11')](_0x215faf)[_0x555d('0x12')](_0x18eb9e);}};}function respondWithFilteredResult(_0x727e15,_0x2d7281){return function(_0x3e30a2){if(_0x3e30a2){var _0x288ebf=_0x3e30a2[_0x555d('0x13')],_0x412de4=_0x2d7281[_0x555d('0x14')],_0x298707=_0x2d7281['offset']+_0x2d7281[_0x555d('0x15')],_0x1fa79c;if(_0x298707>=_0x288ebf){_0x298707=_0x288ebf;_0x1fa79c=0xc8;}else{_0x1fa79c=0xce;}_0x727e15['status'](_0x1fa79c);return _0x727e15[_0x555d('0x16')](_0x555d('0x17'),_0x412de4+'-'+_0x298707+'/'+_0x288ebf)['json'](_0x3e30a2);}return null;};}function patchUpdates(_0x5f5162){return function(_0x7a6ddd){try{jsonpatch[_0x555d('0x18')](_0x7a6ddd,_0x5f5162,!![]);}catch(_0x554584){return BPromise[_0x555d('0x19')](_0x554584);}return _0x7a6ddd[_0x555d('0x1a')]();};}function saveUpdates(_0x39ca14,_0x40681d){return function(_0x344a0e){if(_0x344a0e){return _0x344a0e[_0x555d('0x1b')](_0x39ca14)[_0x555d('0x1c')](function(_0x8f3a74){return _0x8f3a74;});}return null;};}function removeEntity(_0x24ee8f,_0x46bde5){return function(_0x718bb5){if(_0x718bb5){return _0x718bb5[_0x555d('0x1d')]()[_0x555d('0x1c')](function(){_0x24ee8f[_0x555d('0x11')](0xcc)[_0x555d('0x1e')]();});}};}function handleEntityNotFound(_0x4b9d88,_0xd92449){return function(_0x17450a){if(!_0x17450a){_0x4b9d88[_0x555d('0x1f')](0x194);}return _0x17450a;};}function handleError(_0x45b54e,_0x414212){_0x414212=_0x414212||0x1f4;return function(_0x4d0b7c){logger[_0x555d('0x20')](_0x4d0b7c['stack']);if(_0x4d0b7c[_0x555d('0x21')]){delete _0x4d0b7c['name'];}_0x45b54e['status'](_0x414212)[_0x555d('0x22')](_0x4d0b7c);};}exports[_0x555d('0x23')]=function(_0x4c124e,_0x5848d1){var _0x2308e3={},_0x1b8c5c={},_0x2cae21={'count':0x0,'rows':[]};var _0x57f129=db[_0x555d('0x24')][_0x555d('0x25')];_0x1b8c5c[_0x555d('0x26')]=_[_0x555d('0x27')](_0x57f129);var _0x331457={'dateStart':_0x4c124e[_0x555d('0x28')][_0x555d('0x29')],'dateEnd':_0x4c124e['query']['dateEnd']};delete _0x4c124e[_0x555d('0x28')][_0x555d('0x29')];delete _0x4c124e[_0x555d('0x28')][_0x555d('0x2a')];_0x1b8c5c[_0x555d('0x28')]=_[_0x555d('0x27')](_0x4c124e[_0x555d('0x28')]);_0x1b8c5c['filters']=_[_0x555d('0x2b')](_0x1b8c5c['model'],_0x1b8c5c[_0x555d('0x28')]);_0x2308e3[_0x555d('0x2c')]=_[_0x555d('0x2b')](_0x1b8c5c[_0x555d('0x26')],qs[_0x555d('0x2d')](_0x4c124e['query'][_0x555d('0x2d')]));_0x2308e3[_0x555d('0x2c')]=_0x2308e3[_0x555d('0x2c')][_0x555d('0x2e')]?_0x2308e3[_0x555d('0x2c')]:_0x1b8c5c[_0x555d('0x26')];if(!_0x4c124e[_0x555d('0x28')][_0x555d('0x2f')]('nolimit')){_0x2308e3['limit']=qs['limit'](_0x4c124e[_0x555d('0x28')][_0x555d('0x15')]);_0x2308e3['offset']=qs[_0x555d('0x14')](_0x4c124e[_0x555d('0x28')][_0x555d('0x14')]);}_0x2308e3[_0x555d('0x30')]=qs['sort'](_0x4c124e[_0x555d('0x28')][_0x555d('0x31')]);_0x2308e3[_0x555d('0x32')]=qs[_0x555d('0x33')](_[_0x555d('0x34')](_0x4c124e[_0x555d('0x28')],_0x1b8c5c[_0x555d('0x33')]));if(_0x331457[_0x555d('0x29')]){if(_0x331457[_0x555d('0x2a')]){_0x331457[_0x555d('0x2a')]=moment(_0x331457['dateEnd'])[_0x555d('0x35')](0x1,_0x555d('0x36'));}else{_0x331457['dateEnd']=moment(_0x331457[_0x555d('0x29')])[_0x555d('0x35')](0x1,_0x555d('0x36'));}_[_0x555d('0x37')](_0x2308e3[_0x555d('0x32')],{'createdAt':{'$gte':_0x331457[_0x555d('0x29')],'$lte':_0x331457[_0x555d('0x2a')]}});}if(_0x4c124e['query']['filter']){_0x2308e3[_0x555d('0x32')]=_[_0x555d('0x37')](_0x2308e3[_0x555d('0x32')],{'$or':_['map'](_0x2308e3[_0x555d('0x2c')],function(_0x2ddf89){var _0x1e41d2={};_0x1e41d2[_0x2ddf89]={'$like':'%'+_0x4c124e[_0x555d('0x28')][_0x555d('0x38')]+'%'};return _0x1e41d2;})});}_0x2308e3=_['merge']({},_0x2308e3,_0x4c124e['options']);var _0x4fefc2={'where':_0x2308e3['where']};return db[_0x555d('0x24')]['count'](_0x4fefc2)[_0x555d('0x1c')](function(_0x2f6a07){_0x2cae21[_0x555d('0x13')]=_0x2f6a07;if(_0x4c124e[_0x555d('0x28')][_0x555d('0x39')]){_0x2308e3['include']=[{'all':!![]}];}return db[_0x555d('0x24')][_0x555d('0x3a')](_0x2308e3);})[_0x555d('0x1c')](function(_0x18dadc){_0x2cae21[_0x555d('0x3b')]=_0x18dadc;return _0x2cae21;})[_0x555d('0x1c')](respondWithFilteredResult(_0x5848d1,_0x2308e3))['catch'](handleError(_0x5848d1,null));};exports[_0x555d('0x3c')]=function(_0x28cb1d,_0x353995){var _0x4fac7f={'raw':!![],'where':{'id':_0x28cb1d[_0x555d('0x3d')]['id']}},_0x4429ce={};_0x4429ce[_0x555d('0x26')]=_['keys'](db[_0x555d('0x24')]['rawAttributes']);_0x4429ce['query']=_['keys'](_0x28cb1d[_0x555d('0x28')]);_0x4429ce[_0x555d('0x33')]=_[_0x555d('0x2b')](_0x4429ce[_0x555d('0x26')],_0x4429ce[_0x555d('0x28')]);_0x4fac7f[_0x555d('0x2c')]=_[_0x555d('0x2b')](_0x4429ce['model'],qs[_0x555d('0x2d')](_0x28cb1d['query'][_0x555d('0x2d')]));_0x4fac7f[_0x555d('0x2c')]=_0x4fac7f[_0x555d('0x2c')][_0x555d('0x2e')]?_0x4fac7f[_0x555d('0x2c')]:_0x4429ce[_0x555d('0x26')];if(_0x28cb1d[_0x555d('0x28')][_0x555d('0x39')]){_0x4fac7f['include']=[{'all':!![]}];}_0x4fac7f=_[_0x555d('0x37')]({},_0x4fac7f,_0x28cb1d[_0x555d('0x3e')]);return db[_0x555d('0x24')][_0x555d('0x3f')](_0x4fac7f)[_0x555d('0x1c')](handleEntityNotFound(_0x353995,null))[_0x555d('0x1c')](respondWithResult(_0x353995,null))[_0x555d('0x40')](handleError(_0x353995,null));};exports[_0x555d('0x41')]=function(_0xc2f20f,_0x282b85){return db[_0x555d('0x24')]['create'](_0xc2f20f['body'],{})[_0x555d('0x1c')](respondWithResult(_0x282b85,0xc9))[_0x555d('0x40')](handleError(_0x282b85,null));};exports[_0x555d('0x1b')]=function(_0x3d2e57,_0x306cc0){if(_0x3d2e57['body']['id']){delete _0x3d2e57[_0x555d('0x42')]['id'];}return db['OpenchannelApplication']['find']({'where':{'id':_0x3d2e57['params']['id']}})[_0x555d('0x1c')](handleEntityNotFound(_0x306cc0,null))[_0x555d('0x1c')](saveUpdates(_0x3d2e57[_0x555d('0x42')],null))[_0x555d('0x1c')](respondWithResult(_0x306cc0,null))[_0x555d('0x40')](handleError(_0x306cc0,null));};exports[_0x555d('0x1d')]=function(_0x3da29f,_0x226f93){return db[_0x555d('0x24')][_0x555d('0x3f')]({'where':{'id':_0x3da29f[_0x555d('0x3d')]['id']}})[_0x555d('0x1c')](handleEntityNotFound(_0x226f93,null))[_0x555d('0x1c')](removeEntity(_0x226f93,null))['catch'](handleError(_0x226f93,null));};
\ No newline at end of file
index 6aab0f4..68ae5fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6a0=['api','moment','bluebird','request-promise','./openchannelApplication.attributes','exports','util','../../config/logger'];(function(_0x6131cd,_0x4c26a1){var _0x47e916=function(_0x1f2bce){while(--_0x1f2bce){_0x6131cd['push'](_0x6131cd['shift']());}};_0x47e916(++_0x4c26a1);}(_0xa6a0,0xc6));var _0x0a6a=function(_0x18ab2a,_0x4debcd){_0x18ab2a=_0x18ab2a-0x0;var _0x16dcee=_0xa6a0[_0x18ab2a];return _0x16dcee;};'use strict';var _=require('lodash');var util=require(_0x0a6a('0x0'));var logger=require(_0x0a6a('0x1'))(_0x0a6a('0x2'));var moment=require(_0x0a6a('0x3'));var BPromise=require(_0x0a6a('0x4'));var rp=require(_0x0a6a('0x5'));var attributes=require(_0x0a6a('0x6'));module[_0x0a6a('0x7')]=function(_0x236d5f,_0x5b204){return _0x236d5f['define']('OpenchannelApplication',attributes,{'tableName':'openchannel_applications','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6c4d=['./openchannelApplication.attributes','exports','define','openchannel_applications','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x454e6d,_0x1e1f38){var _0x4bc294=function(_0x2c803a){while(--_0x2c803a){_0x454e6d['push'](_0x454e6d['shift']());}};_0x4bc294(++_0x1e1f38);}(_0x6c4d,0x1c7));var _0xd6c4=function(_0xd1d19a,_0x1933f0){_0xd1d19a=_0xd1d19a-0x0;var _0x52a79d=_0x6c4d[_0xd1d19a];return _0x52a79d;};'use strict';var _=require(_0xd6c4('0x0'));var util=require(_0xd6c4('0x1'));var logger=require(_0xd6c4('0x2'))(_0xd6c4('0x3'));var moment=require(_0xd6c4('0x4'));var BPromise=require(_0xd6c4('0x5'));var rp=require(_0xd6c4('0x6'));var attributes=require(_0xd6c4('0x7'));module[_0xd6c4('0x8')]=function(_0x5a14e7,_0x290821){return _0x5a14e7[_0xd6c4('0x9')]('OpenchannelApplication',attributes,{'tableName':_0xd6c4('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6e1fd12..640c948 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9fd4=['OpenchannelApplication,\x20%s,\x20%s','request\x20sent','debug','OpenchannelApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','UpdateOpenchannelApplication','OpenchannelApplication','update','options','limit','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then'];(function(_0x3fafb9,_0x5d6612){var _0xada4d4=function(_0x5e8a40){while(--_0x5e8a40){_0x3fafb9['push'](_0x3fafb9['shift']());}};_0xada4d4(++_0x5d6612);}(_0x9fd4,0x16c));var _0x49fd=function(_0x515408,_0x27993d){_0x515408=_0x515408-0x0;var _0x374b70=_0x9fd4[_0x515408];return _0x374b70;};'use strict';var _=require(_0x49fd('0x0'));var util=require(_0x49fd('0x1'));var moment=require(_0x49fd('0x2'));var BPromise=require(_0x49fd('0x3'));var rs=require(_0x49fd('0x4'));var fs=require('fs');var db=require(_0x49fd('0x5'))['db'];var utils=require(_0x49fd('0x6'));var logger=require(_0x49fd('0x7'))(_0x49fd('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x49fd('0x9')][_0x49fd('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x1bc16e,_0x9353cd,_0x48b999){return new BPromise(function(_0x14bb94,_0x461ac1){return client[_0x49fd('0xb')](_0x1bc16e,_0x48b999)[_0x49fd('0xc')](function(_0x190807){logger['info'](_0x49fd('0xd'),_0x9353cd,_0x49fd('0xe'));logger[_0x49fd('0xf')](_0x49fd('0x10'),_0x9353cd,_0x49fd('0xe'),JSON[_0x49fd('0x11')](_0x190807));if(_0x190807[_0x49fd('0x12')]){if(_0x190807['error'][_0x49fd('0x13')]===0x1f4){logger[_0x49fd('0x12')](_0x49fd('0xd'),_0x9353cd,_0x190807[_0x49fd('0x12')][_0x49fd('0x14')]);return _0x461ac1(_0x190807[_0x49fd('0x12')][_0x49fd('0x14')]);}logger[_0x49fd('0x12')](_0x49fd('0xd'),_0x9353cd,_0x190807[_0x49fd('0x12')][_0x49fd('0x14')]);return _0x14bb94(_0x190807[_0x49fd('0x12')][_0x49fd('0x14')]);}else{logger[_0x49fd('0x15')](_0x49fd('0xd'),_0x9353cd,_0x49fd('0xe'));_0x14bb94(_0x190807[_0x49fd('0x16')][_0x49fd('0x14')]);}})[_0x49fd('0x17')](function(_0x12ae8f){logger[_0x49fd('0x12')](_0x49fd('0xd'),_0x9353cd,_0x12ae8f);_0x461ac1(_0x12ae8f);});});}exports[_0x49fd('0x18')]=function(_0x475eee){var _0xb55d24=this;return new Promise(function(_0x5d568d,_0x598793){return db[_0x49fd('0x19')][_0x49fd('0x1a')](_0x475eee['body'],{'raw':_0x475eee['options']?_0x475eee[_0x49fd('0x1b')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x475eee[_0x49fd('0x1b')]?_0x475eee[_0x49fd('0x1b')]['where']||null:null,'attributes':_0x475eee[_0x49fd('0x1b')]?_0x475eee[_0x49fd('0x1b')]['attributes']||null:null,'limit':_0x475eee[_0x49fd('0x1b')]?_0x475eee[_0x49fd('0x1b')][_0x49fd('0x1c')]||null:null})[_0x49fd('0xc')](function(_0x20fa0d){logger[_0x49fd('0x15')]('UpdateOpenchannelApplication',_0x475eee);logger[_0x49fd('0xf')](_0x49fd('0x18'),_0x475eee,JSON[_0x49fd('0x11')](_0x20fa0d));_0x5d568d(_0x20fa0d);})['catch'](function(_0x3fa0c){logger[_0x49fd('0x12')](_0x49fd('0x18'),_0x3fa0c['message'],_0x475eee);_0x598793(_0xb55d24['error'](0x1f4,_0x3fa0c['message']));});});};
\ No newline at end of file
+var _0x2675=['../../config/logger','rpc','jayson/promise','client','http','request','OpenchannelApplication,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','UpdateOpenchannelApplication','update','body','options','where','limit','then','lodash','randomstring','../../mysqldb'];(function(_0x3348cc,_0x3f9651){var _0x1f1023=function(_0x97edbb){while(--_0x97edbb){_0x3348cc['push'](_0x3348cc['shift']());}};_0x1f1023(++_0x3f9651);}(_0x2675,0x75));var _0x5267=function(_0x57172e,_0x5ba416){_0x57172e=_0x57172e-0x0;var _0x49257f=_0x2675[_0x57172e];return _0x49257f;};'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 db=require(_0x5267('0x2'))['db'];var utils=require('../../config/utils');var logger=require(_0x5267('0x3'))(_0x5267('0x4'));var config=require('../../config/environment');var jayson=require(_0x5267('0x5'));var client=jayson[_0x5267('0x6')][_0x5267('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x10f92c,_0x20f065,_0xc56cd5){return new BPromise(function(_0x527c16,_0x9e0a27){return client[_0x5267('0x8')](_0x10f92c,_0xc56cd5)['then'](function(_0x799fcc){logger['info'](_0x5267('0x9'),_0x20f065,_0x5267('0xa'));logger[_0x5267('0xb')]('OpenchannelApplication,\x20%s,\x20%s,\x20%s',_0x20f065,_0x5267('0xa'),JSON['stringify'](_0x799fcc));if(_0x799fcc[_0x5267('0xc')]){if(_0x799fcc['error'][_0x5267('0xd')]===0x1f4){logger[_0x5267('0xc')](_0x5267('0x9'),_0x20f065,_0x799fcc[_0x5267('0xc')][_0x5267('0xe')]);return _0x9e0a27(_0x799fcc[_0x5267('0xc')][_0x5267('0xe')]);}logger[_0x5267('0xc')](_0x5267('0x9'),_0x20f065,_0x799fcc[_0x5267('0xc')][_0x5267('0xe')]);return _0x527c16(_0x799fcc[_0x5267('0xc')][_0x5267('0xe')]);}else{logger['info']('OpenchannelApplication,\x20%s,\x20%s',_0x20f065,_0x5267('0xa'));_0x527c16(_0x799fcc[_0x5267('0xf')][_0x5267('0xe')]);}})[_0x5267('0x10')](function(_0x46b2c2){logger[_0x5267('0xc')](_0x5267('0x9'),_0x20f065,_0x46b2c2);_0x9e0a27(_0x46b2c2);});});}exports[_0x5267('0x11')]=function(_0x15d81e){var _0xb1c97a=this;return new Promise(function(_0x376387,_0x1ab03){return db['OpenchannelApplication'][_0x5267('0x12')](_0x15d81e[_0x5267('0x13')],{'raw':_0x15d81e['options']?_0x15d81e[_0x5267('0x14')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x15d81e[_0x5267('0x14')]?_0x15d81e[_0x5267('0x14')][_0x5267('0x15')]||null:null,'attributes':_0x15d81e[_0x5267('0x14')]?_0x15d81e[_0x5267('0x14')]['attributes']||null:null,'limit':_0x15d81e[_0x5267('0x14')]?_0x15d81e['options'][_0x5267('0x16')]||null:null})[_0x5267('0x17')](function(_0x3b53ac){logger['info']('UpdateOpenchannelApplication',_0x15d81e);logger['debug']('UpdateOpenchannelApplication',_0x15d81e,JSON['stringify'](_0x3b53ac));_0x376387(_0x3b53ac);})[_0x5267('0x10')](function(_0x399e64){logger[_0x5267('0xc')](_0x5267('0x11'),_0x399e64[_0x5267('0xe')],_0x15d81e);_0x1ab03(_0xb1c97a[_0x5267('0xc')](0x1f4,_0x399e64[_0x5267('0xe')]));});});};
\ No newline at end of file
index 7f6dc66..9e3b3fd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7e9=['isAuthenticated','describe','/:id','/:id/messages','getMessages','post','create','addMessage','/:id/tags','tracked','openchannel','openchannelinteraction:addtags','addTags','put','openchannelinteraction:update','update','delete','destroy','removeTags','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelInteraction.controller','get','/describe'];(function(_0x5c79a3,_0xf8764e){var _0x3fc19b=function(_0x4a5688){while(--_0x4a5688){_0x5c79a3['push'](_0x5c79a3['shift']());}};_0x3fc19b(++_0xf8764e);}(_0xc7e9,0x1b8));var _0x9c7e=function(_0x2070da,_0x45e586){_0x2070da=_0x2070da-0x0;var _0x4f9fe1=_0xc7e9[_0x2070da];return _0x4f9fe1;};'use strict';var multer=require(_0x9c7e('0x0'));var util=require(_0x9c7e('0x1'));var path=require('path');var express=require(_0x9c7e('0x2'));var router=express[_0x9c7e('0x3')]();var auth=require(_0x9c7e('0x4'));var interaction=require(_0x9c7e('0x5'));var config=require(_0x9c7e('0x6'));var controller=require(_0x9c7e('0x7'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x9c7e('0x8')](_0x9c7e('0x9'),auth[_0x9c7e('0xa')](),controller[_0x9c7e('0xb')]);router[_0x9c7e('0x8')](_0x9c7e('0xc'),auth['isAuthenticated'](),controller['show']);router[_0x9c7e('0x8')](_0x9c7e('0xd'),auth[_0x9c7e('0xa')](),controller[_0x9c7e('0xe')]);router[_0x9c7e('0xf')]('/',auth[_0x9c7e('0xa')](),controller[_0x9c7e('0x10')]);router[_0x9c7e('0xf')](_0x9c7e('0xd'),auth[_0x9c7e('0xa')](),controller[_0x9c7e('0x11')]);router[_0x9c7e('0xf')](_0x9c7e('0x12'),auth[_0x9c7e('0xa')](),interaction[_0x9c7e('0x13')](_0x9c7e('0x14'),_0x9c7e('0x15')),controller[_0x9c7e('0x16')]);router[_0x9c7e('0x17')](_0x9c7e('0xc'),auth[_0x9c7e('0xa')](),interaction[_0x9c7e('0x13')]('openchannel',_0x9c7e('0x18')),controller[_0x9c7e('0x19')]);router[_0x9c7e('0x1a')](_0x9c7e('0xc'),auth[_0x9c7e('0xa')](),interaction[_0x9c7e('0x13')]('openchannel','openchannelinteraction:destroy'),controller[_0x9c7e('0x1b')]);router[_0x9c7e('0x1a')](_0x9c7e('0x12'),auth[_0x9c7e('0xa')](),controller[_0x9c7e('0x1c')]);module[_0x9c7e('0x1d')]=router;
\ No newline at end of file
+var _0x5b6e=['/:id/messages','post','create','/:id/tags','tracked','addTags','/:id','update','delete','openchannel','openchannelinteraction:destroy','removeTags','exports','multer','util','path','express','Router','../../components/auth/service','../../config/environment','get','isAuthenticated','/describe','describe','show'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x5b6e,0xa3));var _0xe5b6=function(_0x2dcc45,_0xe6cf11){_0x2dcc45=_0x2dcc45-0x0;var _0x2172cc=_0x5b6e[_0x2dcc45];return _0x2172cc;};'use strict';var multer=require(_0xe5b6('0x0'));var util=require(_0xe5b6('0x1'));var path=require(_0xe5b6('0x2'));var express=require(_0xe5b6('0x3'));var router=express[_0xe5b6('0x4')]();var auth=require(_0xe5b6('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xe5b6('0x6'));var controller=require('./openchannelInteraction.controller');router[_0xe5b6('0x7')]('/',auth[_0xe5b6('0x8')](),controller['index']);router[_0xe5b6('0x7')](_0xe5b6('0x9'),auth[_0xe5b6('0x8')](),controller[_0xe5b6('0xa')]);router[_0xe5b6('0x7')]('/:id',auth['isAuthenticated'](),controller[_0xe5b6('0xb')]);router[_0xe5b6('0x7')](_0xe5b6('0xc'),auth[_0xe5b6('0x8')](),controller['getMessages']);router[_0xe5b6('0xd')]('/',auth['isAuthenticated'](),controller[_0xe5b6('0xe')]);router['post'](_0xe5b6('0xc'),auth[_0xe5b6('0x8')](),controller['addMessage']);router['post'](_0xe5b6('0xf'),auth['isAuthenticated'](),interaction[_0xe5b6('0x10')]('openchannel','openchannelinteraction:addtags'),controller[_0xe5b6('0x11')]);router['put'](_0xe5b6('0x12'),auth[_0xe5b6('0x8')](),interaction['tracked']('openchannel','openchannelinteraction:update'),controller[_0xe5b6('0x13')]);router[_0xe5b6('0x14')]('/:id',auth[_0xe5b6('0x8')](),interaction[_0xe5b6('0x10')](_0xe5b6('0x15'),_0xe5b6('0x16')),controller['destroy']);router[_0xe5b6('0x14')](_0xe5b6('0xf'),auth[_0xe5b6('0x8')](),controller[_0xe5b6('0x17')]);module[_0xe5b6('0x18')]=router;
\ No newline at end of file
index a11d1b6..b5d3d9d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2caf=['ENUM','out','DATE','STRING'];(function(_0x5bd12c,_0x51890c){var _0x1fe5b2=function(_0x3a01f9){while(--_0x3a01f9){_0x5bd12c['push'](_0x5bd12c['shift']());}};_0x1fe5b2(++_0x51890c);}(_0x2caf,0x6a));var _0xf2ca=function(_0x61062f,_0x15c845){_0x61062f=_0x61062f-0x0;var _0x27678d=_0x2caf[_0x61062f];return _0x27678d;};'use strict';var Sequelize=require('sequelize');module['exports']={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'closedAt':{'type':Sequelize[_0xf2ca('0x0')]},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize[_0xf2ca('0x1')]},'read1stAt':{'type':Sequelize[_0xf2ca('0x0')]},'threadId':{'type':Sequelize[_0xf2ca('0x1')]},'externalUrl':{'type':Sequelize[_0xf2ca('0x1')]},'lastMsgAt':{'type':Sequelize[_0xf2ca('0x0')]},'lastMsgDirection':{'type':Sequelize[_0xf2ca('0x2')]('in',_0xf2ca('0x3')),'defaultValue':'in','allowNull':![]},'from':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x5eb8=['DATE','ENUM','out','exports','BOOLEAN','STRING'];(function(_0x1b3470,_0x3fadda){var _0x2f54cb=function(_0x3c8028){while(--_0x3c8028){_0x1b3470['push'](_0x1b3470['shift']());}};_0x2f54cb(++_0x3fadda);}(_0x5eb8,0x1d1));var _0x85eb=function(_0x42f0d1,_0x45fe4a){_0x42f0d1=_0x42f0d1-0x0;var _0x43f981=_0x5eb8[_0x42f0d1];return _0x43f981;};'use strict';var Sequelize=require('sequelize');module[_0x85eb('0x0')]={'closed':{'type':Sequelize[_0x85eb('0x1')],'defaultValue':![]},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize[_0x85eb('0x2')]},'read1stAt':{'type':Sequelize[_0x85eb('0x3')]},'threadId':{'type':Sequelize['STRING']},'externalUrl':{'type':Sequelize[_0x85eb('0x2')]},'lastMsgAt':{'type':Sequelize[_0x85eb('0x3')]},'lastMsgDirection':{'type':Sequelize[_0x85eb('0x4')]('in',_0x85eb('0x5')),'defaultValue':'in','allowNull':![]},'from':{'type':Sequelize['STRING']}};
\ No newline at end of file
index f517b3f..5a7ac1f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x37b6=['merge','filter','map','options','include','tag','push','Tag','distinct','read','OpenchannelMessage','Messages','direction','createdAt','includeAll','User','Users','Contact','Owner','OpenchannelAccount','Account','key','color','findAll','rows','catch','intersection','length','find','create','body','params','describe','addMessage','ids','omit','getMessages','findOne','pick','$gte','split','YYYY-MM-DD\x20HH:mm:ss','setTags','spread','openchannelInteractionTags:save','removeTags','fast-json-patch','request-promise','bluebird','mustache','path','to-csv','ejs','squel','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','./openchannelInteraction.socket','register','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','OpenchannelInteraction','rawAttributes','model','keys','query','dateStart','dateEnd','filters','attributes','fields','hasOwnProperty','nolimit','order','sort','where','add','day'];(function(_0x2c895a,_0x47ab04){var _0x1c64f2=function(_0x3479a2){while(--_0x3479a2){_0x2c895a['push'](_0x2c895a['shift']());}};_0x1c64f2(++_0x47ab04);}(_0x37b6,0x1ca));var _0x637b=function(_0x1c04dd,_0x36406c){_0x1c04dd=_0x1c04dd-0x0;var _0x50d11c=_0x37b6[_0x1c04dd];return _0x50d11c;};'use strict';var jsonpatch=require(_0x637b('0x0'));var rp=require(_0x637b('0x1'));var moment=require('moment');var BPromise=require(_0x637b('0x2'));var Mustache=require(_0x637b('0x3'));var util=require('util');var path=require(_0x637b('0x4'));var sox=require('sox');var csv=require(_0x637b('0x5'));var ejs=require(_0x637b('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x637b('0x7'));var crypto=require(_0x637b('0x8'));var jsforce=require('jsforce');var deskjs=require(_0x637b('0x9'));var toCsv=require(_0x637b('0x5'));var querystring=require(_0x637b('0xa'));var Papa=require(_0x637b('0xb'));var qs=require(_0x637b('0xc'));var logger=require(_0x637b('0xd'))(_0x637b('0xe'));var utils=require(_0x637b('0xf'));var config=require(_0x637b('0x10'));var db=require(_0x637b('0x11'))['db'];var socket=require(_0x637b('0x12'))({'host':'localhost','port':0x18eb});require(_0x637b('0x13'))[_0x637b('0x14')](socket);function respondWithStatusCode(_0x4c1892,_0x48f2ad){_0x48f2ad=_0x48f2ad||0xcc;return function(_0x1dc153){if(_0x1dc153){return _0x4c1892[_0x637b('0x15')](_0x48f2ad);}return _0x4c1892[_0x637b('0x16')](_0x48f2ad)[_0x637b('0x17')]();};}function respondWithResult(_0x4401e9,_0x49ea0b){_0x49ea0b=_0x49ea0b||0xc8;return function(_0x288711){if(_0x288711){return _0x4401e9[_0x637b('0x16')](_0x49ea0b)[_0x637b('0x18')](_0x288711);}};}function respondWithFilteredResult(_0x5e9ba2,_0x3dc513){return function(_0x135822){if(_0x135822){var _0x4bdfdd=_0x135822[_0x637b('0x19')],_0x1e741f=_0x3dc513[_0x637b('0x1a')],_0x257e3e=_0x3dc513['offset']+_0x3dc513[_0x637b('0x1b')],_0x1d27ce;if(_0x257e3e>=_0x4bdfdd){_0x257e3e=_0x4bdfdd;_0x1d27ce=0xc8;}else{_0x1d27ce=0xce;}_0x5e9ba2[_0x637b('0x16')](_0x1d27ce);return _0x5e9ba2[_0x637b('0x1c')](_0x637b('0x1d'),_0x1e741f+'-'+_0x257e3e+'/'+_0x4bdfdd)[_0x637b('0x18')](_0x135822);}return null;};}function patchUpdates(_0x17f2f8){return function(_0x43ceaa){try{jsonpatch[_0x637b('0x1e')](_0x43ceaa,_0x17f2f8,!![]);}catch(_0x297076){return BPromise[_0x637b('0x1f')](_0x297076);}return _0x43ceaa[_0x637b('0x20')]();};}function saveUpdates(_0x3c91a9,_0x11ed22){return function(_0x193328){if(_0x193328){return _0x193328[_0x637b('0x21')](_0x3c91a9)[_0x637b('0x22')](function(_0x5937b0){return _0x5937b0;});}return null;};}function removeEntity(_0x436f3a,_0x3d3cc4){return function(_0x64c9e0){if(_0x64c9e0){return _0x64c9e0[_0x637b('0x23')]()[_0x637b('0x22')](function(){_0x436f3a[_0x637b('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4e23c2,_0x138d8b){return function(_0x3616fd){if(!_0x3616fd){_0x4e23c2['sendStatus'](0x194);}return _0x3616fd;};}function handleError(_0xbf41,_0x251539){_0x251539=_0x251539||0x1f4;return function(_0x2d78c1){logger[_0x637b('0x24')](_0x2d78c1[_0x637b('0x25')]);if(_0x2d78c1[_0x637b('0x26')]){delete _0x2d78c1[_0x637b('0x26')];}_0xbf41[_0x637b('0x16')](_0x251539)[_0x637b('0x27')](_0x2d78c1);};}exports['index']=function(_0x9b0cee,_0x46ba95){var _0x554f0f={},_0x5bd5d0={},_0x27d30b={'count':0x0,'rows':[]};var _0x5108f6=db[_0x637b('0x28')][_0x637b('0x29')];_0x5bd5d0[_0x637b('0x2a')]=_[_0x637b('0x2b')](_0x5108f6);var _0x2fdb0f={'dateStart':_0x9b0cee[_0x637b('0x2c')][_0x637b('0x2d')],'dateEnd':_0x9b0cee[_0x637b('0x2c')][_0x637b('0x2e')]};delete _0x9b0cee[_0x637b('0x2c')][_0x637b('0x2d')];delete _0x9b0cee[_0x637b('0x2c')][_0x637b('0x2e')];_0x5bd5d0['query']=_['keys'](_0x9b0cee['query']);_0x5bd5d0[_0x637b('0x2f')]=_['intersection'](_0x5bd5d0[_0x637b('0x2a')],_0x5bd5d0[_0x637b('0x2c')]);_0x554f0f[_0x637b('0x30')]=_['intersection'](_0x5bd5d0[_0x637b('0x2a')],qs[_0x637b('0x31')](_0x9b0cee[_0x637b('0x2c')][_0x637b('0x31')]));_0x554f0f[_0x637b('0x30')]=_0x554f0f[_0x637b('0x30')]['length']?_0x554f0f[_0x637b('0x30')]:_0x5bd5d0['model'];if(!_0x9b0cee[_0x637b('0x2c')][_0x637b('0x32')](_0x637b('0x33'))){_0x554f0f[_0x637b('0x1b')]=qs[_0x637b('0x1b')](_0x9b0cee[_0x637b('0x2c')][_0x637b('0x1b')]);_0x554f0f[_0x637b('0x1a')]=qs[_0x637b('0x1a')](_0x9b0cee[_0x637b('0x2c')][_0x637b('0x1a')]);}_0x554f0f[_0x637b('0x34')]=qs[_0x637b('0x35')](_0x9b0cee[_0x637b('0x2c')][_0x637b('0x35')]);_0x554f0f[_0x637b('0x36')]=qs[_0x637b('0x2f')](_['pick'](_0x9b0cee[_0x637b('0x2c')],_0x5bd5d0['filters']));if(_0x2fdb0f[_0x637b('0x2d')]){if(_0x2fdb0f[_0x637b('0x2e')]){_0x2fdb0f[_0x637b('0x2e')]=moment(_0x2fdb0f['dateEnd'])[_0x637b('0x37')](0x1,_0x637b('0x38'));}else{_0x2fdb0f[_0x637b('0x2e')]=moment(_0x2fdb0f['dateStart'])['add'](0x1,_0x637b('0x38'));}_[_0x637b('0x39')](_0x554f0f[_0x637b('0x36')],{'createdAt':{'$gte':_0x2fdb0f['dateStart'],'$lte':_0x2fdb0f[_0x637b('0x2e')]}});}if(_0x9b0cee['query'][_0x637b('0x3a')]){_0x554f0f[_0x637b('0x36')]=_['merge'](_0x554f0f[_0x637b('0x36')],{'$or':_[_0x637b('0x3b')](_0x554f0f[_0x637b('0x30')],function(_0x54b381){var _0x571a2c={};_0x571a2c[_0x54b381]={'$like':'%'+_0x9b0cee[_0x637b('0x2c')][_0x637b('0x3a')]+'%'};return _0x571a2c;})});}_0x554f0f=_[_0x637b('0x39')]({},_0x554f0f,_0x9b0cee[_0x637b('0x3c')]);var _0x571fe2={'where':_0x554f0f[_0x637b('0x36')]};_0x571fe2[_0x637b('0x3d')]=[];if(_0x9b0cee['query'][_0x637b('0x3e')]){_0x571fe2[_0x637b('0x3d')][_0x637b('0x3f')]({'model':db[_0x637b('0x40')],'as':'Tags','attributes':['id'],'where':{'id':_0x9b0cee['query'][_0x637b('0x3e')]},'required':!![]});_0x571fe2[_0x637b('0x41')]=!![];}if(_0x9b0cee['query'][_0x637b('0x42')]){_0x571fe2['include'][_0x637b('0x3f')]({'model':db[_0x637b('0x43')],'as':_0x637b('0x44'),'attributes':['id',_0x637b('0x45'),_0x637b('0x46'),_0x637b('0x42')],'where':{'direction':'in','read':_0x9b0cee[_0x637b('0x2c')][_0x637b('0x42')]||![]},'required':!![]});_0x571fe2[_0x637b('0x41')]=!![];}return db[_0x637b('0x28')][_0x637b('0x19')](_0x571fe2)[_0x637b('0x22')](function(_0x473cbf){_0x27d30b[_0x637b('0x19')]=_0x473cbf;if(_0x9b0cee[_0x637b('0x2c')][_0x637b('0x47')]){_0x554f0f['include']=[{'model':db[_0x637b('0x48')],'as':_0x637b('0x49'),'required':![],'attributes':['id',_0x637b('0x26'),'fullname']},{'model':db['CmContact'],'as':_0x637b('0x4a'),'required':![]},{'model':db['User'],'as':_0x637b('0x4b'),'attributes':['name','fullname','internal'],'required':![]},{'model':db[_0x637b('0x4c')],'as':_0x637b('0x4d'),'attributes':['name',_0x637b('0x4e')],'required':![]},{'model':db[_0x637b('0x43')],'as':_0x637b('0x44'),'attributes':['id','direction',_0x637b('0x46'),_0x637b('0x42')],'where':{'direction':'in','read':_0x9b0cee['query'][_0x637b('0x42')]||![]},'required':_0x9b0cee[_0x637b('0x2c')][_0x637b('0x42')]||![]},{'model':db['Tag'],'as':'Tags','attributes':['id',_0x637b('0x26'),_0x637b('0x4f')],'required':_0x9b0cee[_0x637b('0x2c')]['tag']?!![]:![]},{'model':db[_0x637b('0x40')],'as':'ThroughTags','attributes':['id',_0x637b('0x26'),_0x637b('0x4f')],'through':_0x9b0cee[_0x637b('0x2c')][_0x637b('0x3e')]?{'attributes':[],'where':{'TagId':_0x9b0cee['query'][_0x637b('0x3e')]||undefined}}:{},'required':_0x9b0cee[_0x637b('0x2c')]['tag']?!![]:![]}];}return db['OpenchannelInteraction'][_0x637b('0x50')](_0x554f0f);})[_0x637b('0x22')](function(_0x404ac3){_0x27d30b[_0x637b('0x51')]=_0x404ac3;return _0x27d30b;})[_0x637b('0x22')](respondWithFilteredResult(_0x46ba95,_0x554f0f))[_0x637b('0x52')](handleError(_0x46ba95,null));};exports['show']=function(_0x28ca3a,_0x101c8a){var _0x200693={'raw':![],'where':{'id':_0x28ca3a['params']['id']}},_0x4dea0d={};_0x4dea0d[_0x637b('0x2a')]=_[_0x637b('0x2b')](db[_0x637b('0x28')][_0x637b('0x29')]);_0x4dea0d[_0x637b('0x2c')]=_[_0x637b('0x2b')](_0x28ca3a[_0x637b('0x2c')]);_0x4dea0d[_0x637b('0x2f')]=_[_0x637b('0x53')](_0x4dea0d[_0x637b('0x2a')],_0x4dea0d[_0x637b('0x2c')]);_0x200693['attributes']=_[_0x637b('0x53')](_0x4dea0d[_0x637b('0x2a')],qs[_0x637b('0x31')](_0x28ca3a['query'][_0x637b('0x31')]));_0x200693[_0x637b('0x30')]=_0x200693[_0x637b('0x30')][_0x637b('0x54')]?_0x200693['attributes']:_0x4dea0d[_0x637b('0x2a')];if(_0x28ca3a['query'][_0x637b('0x47')]){_0x200693['include']=[{'all':!![]}];}_0x200693=_['merge']({},_0x200693,_0x28ca3a[_0x637b('0x3c')]);return db[_0x637b('0x28')][_0x637b('0x55')](_0x200693)[_0x637b('0x22')](handleEntityNotFound(_0x101c8a,null))['then'](respondWithResult(_0x101c8a,null))['catch'](handleError(_0x101c8a,null));};exports[_0x637b('0x56')]=function(_0x3bcfbd,_0x2f4708){return db[_0x637b('0x28')][_0x637b('0x56')](_0x3bcfbd[_0x637b('0x57')],{})[_0x637b('0x22')](respondWithResult(_0x2f4708,0xc9))['catch'](handleError(_0x2f4708,null));};exports['update']=function(_0x55cc2e,_0xf2dec2){if(_0x55cc2e[_0x637b('0x57')]['id']){delete _0x55cc2e[_0x637b('0x57')]['id'];}return db['OpenchannelInteraction'][_0x637b('0x55')]({'where':{'id':_0x55cc2e['params']['id']}})[_0x637b('0x22')](handleEntityNotFound(_0xf2dec2,null))[_0x637b('0x22')](saveUpdates(_0x55cc2e[_0x637b('0x57')],null))[_0x637b('0x22')](respondWithResult(_0xf2dec2,null))[_0x637b('0x52')](handleError(_0xf2dec2,null));};exports[_0x637b('0x23')]=function(_0x573ecb,_0xa73a83){return db[_0x637b('0x28')]['find']({'where':{'id':_0x573ecb[_0x637b('0x58')]['id']}})[_0x637b('0x22')](handleEntityNotFound(_0xa73a83,null))[_0x637b('0x22')](removeEntity(_0xa73a83,null))[_0x637b('0x52')](handleError(_0xa73a83,null));};exports[_0x637b('0x59')]=function(_0x151943,_0x39c2ad){return db[_0x637b('0x28')][_0x637b('0x59')]()[_0x637b('0x22')](respondWithResult(_0x39c2ad,null))[_0x637b('0x52')](handleError(_0x39c2ad,null));};exports['addMessage']=function(_0x382978,_0x4bf3aa,_0x38c046){return db[_0x637b('0x43')][_0x637b('0x55')]({'where':{'id':_0x382978[_0x637b('0x58')]['id']}})[_0x637b('0x22')](handleEntityNotFound(_0x4bf3aa,null))[_0x637b('0x22')](function(_0x3e2788){if(_0x3e2788){return _0x3e2788[_0x637b('0x5a')](_0x382978['body'][_0x637b('0x5b')],_[_0x637b('0x5c')](_0x382978['body'],['ids','id'])||{});}})[_0x637b('0x22')](respondWithResult(_0x4bf3aa,null))[_0x637b('0x52')](handleError(_0x4bf3aa,null));};exports[_0x637b('0x5d')]=function(_0x1f8550,_0xcf5c85,_0x3b1020){var _0xfdadbc={'raw':![],'where':{}};var _0x250061={};var _0x43767f={'count':0x0,'rows':[]};return db[_0x637b('0x28')][_0x637b('0x5e')]({'where':{'id':_0x1f8550[_0x637b('0x58')]['id']}})[_0x637b('0x22')](handleEntityNotFound(_0xcf5c85,null))[_0x637b('0x22')](function(_0x38a1c6){if(_0x38a1c6){_0x250061['model']=_[_0x637b('0x2b')](db[_0x637b('0x43')]['rawAttributes']);_0x250061[_0x637b('0x2c')]=_[_0x637b('0x2b')](_0x1f8550[_0x637b('0x2c')]);_0x250061[_0x637b('0x2f')]=_[_0x637b('0x53')](_0x250061[_0x637b('0x2a')],_0x250061['query']);_0xfdadbc[_0x637b('0x30')]=_[_0x637b('0x53')](_0x250061[_0x637b('0x2a')],qs['fields'](_0x1f8550['query'][_0x637b('0x31')]));_0xfdadbc[_0x637b('0x30')]=_0xfdadbc[_0x637b('0x30')][_0x637b('0x54')]?_0xfdadbc[_0x637b('0x30')]:_0x250061[_0x637b('0x2a')];if(!_0x1f8550['query'][_0x637b('0x32')](_0x637b('0x33'))){_0xfdadbc['limit']=qs['limit'](_0x1f8550[_0x637b('0x2c')][_0x637b('0x1b')]);_0xfdadbc[_0x637b('0x1a')]=qs[_0x637b('0x1a')](_0x1f8550[_0x637b('0x2c')][_0x637b('0x1a')]);}_0xfdadbc[_0x637b('0x34')]=qs[_0x637b('0x35')](_0x1f8550[_0x637b('0x2c')][_0x637b('0x35')]);_0xfdadbc[_0x637b('0x36')]=qs[_0x637b('0x2f')](_[_0x637b('0x5f')](_0x1f8550[_0x637b('0x2c')],_0x250061['filters']));_0xfdadbc[_0x637b('0x36')]['OpenchannelInteractionId']=_0x38a1c6['id'];if(_0x1f8550[_0x637b('0x2c')][_0x637b('0x3a')]){_0xfdadbc['where']=_[_0x637b('0x39')](_0xfdadbc[_0x637b('0x36')],{'$or':_[_0x637b('0x3b')](_0xfdadbc['attributes'],function(_0x1d2290){var _0x362fa7={};_0x362fa7[_0x1d2290]={'$like':'%'+_0x1f8550[_0x637b('0x2c')][_0x637b('0x3a')]+'%'};return _0x362fa7;})});}if(_0x1f8550['query'][_0x637b('0x60')]){var _0x300c0a=_0x1f8550[_0x637b('0x2c')][_0x637b('0x60')][_0x637b('0x61')](',');var _0xf49a31={};_0xf49a31[_0x300c0a[0x0]]={'$gte':moment(_0x300c0a[0x1])['format'](_0x637b('0x62'))};_0xfdadbc[_0x637b('0x36')]=_[_0x637b('0x39')](_0xfdadbc[_0x637b('0x36')],_0xf49a31);}_0xfdadbc=_[_0x637b('0x39')]({},_0xfdadbc,_0x1f8550[_0x637b('0x3c')]);return db['OpenchannelMessage'][_0x637b('0x19')]({'where':_0xfdadbc[_0x637b('0x36')]})[_0x637b('0x22')](function(_0x3fdc50){_0x43767f[_0x637b('0x19')]=_0x3fdc50;if(_0x1f8550[_0x637b('0x2c')][_0x637b('0x47')]){_0xfdadbc[_0x637b('0x3d')]=[{'all':!![]}];}return db['OpenchannelMessage']['findAll'](_0xfdadbc);})[_0x637b('0x22')](function(_0x46ea39){_0x43767f[_0x637b('0x51')]=_0x46ea39;return _0x43767f;});}})['then'](respondWithFilteredResult(_0xcf5c85,_0xfdadbc))[_0x637b('0x52')](handleError(_0xcf5c85,null));};exports['addTags']=function(_0x170f44,_0x28be75,_0x10a3cb){return db[_0x637b('0x28')][_0x637b('0x55')]({'where':{'id':_0x170f44[_0x637b('0x58')]['id']}})[_0x637b('0x22')](handleEntityNotFound(_0x28be75,null))[_0x637b('0x22')](function(_0x303e25){if(_0x303e25){return _0x303e25[_0x637b('0x63')](_0x170f44[_0x637b('0x57')]['ids'],_[_0x637b('0x5c')](_0x170f44['body'],['ids','id'])||{})[_0x637b('0x64')](function(){return db[_0x637b('0x40')][_0x637b('0x50')]({'attributes':['id',_0x637b('0x26'),_0x637b('0x4f')],'where':{'id':_0x170f44[_0x637b('0x57')][_0x637b('0x5b')]}});})[_0x637b('0x22')](function(_0x3245a7){socket['emit'](_0x637b('0x65'),{'id':Number(_0x170f44['params']['id']),'tags':_0x3245a7||[]});return{'id':Number(_0x170f44[_0x637b('0x58')]['id']),'tags':_0x3245a7||[]};});}})['then'](respondWithResult(_0x28be75,null))['catch'](handleError(_0x28be75,null));};exports[_0x637b('0x66')]=function(_0x56d03a,_0x57dc6a,_0x5603c9){var _0x99be55;return db[_0x637b('0x28')][_0x637b('0x55')]({'where':{'id':_0x56d03a[_0x637b('0x58')]['id']}})['then'](handleEntityNotFound(_0x57dc6a,null))[_0x637b('0x22')](function(_0x14aa7a){if(_0x14aa7a){return _0x14aa7a['removeTags'](_0x56d03a[_0x637b('0x2c')][_0x637b('0x5b')]);}})[_0x637b('0x22')](respondWithStatusCode(_0x57dc6a,null))[_0x637b('0x52')](handleError(_0x57dc6a,null));};
\ No newline at end of file
+var _0x9b41=['json','apply','reject','then','destroy','error','name','send','index','model','keys','query','dateEnd','dateStart','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','day','add','merge','filter','map','options','include','tag','push','Tags','distinct','read','OpenchannelMessage','createdAt','OpenchannelInteraction','count','includeAll','User','Users','fullname','CmContact','OpenchannelAccount','Account','Messages','direction','Tag','color','ThroughTags','findAll','rows','catch','show','params','rawAttributes','find','create','body','update','describe','ids','omit','getMessages','pick','OpenchannelInteractionId','$gte','split','format','addTags','emit','openchannelInteractionTags:save','removeTags','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','socket.io-emitter','./openchannelInteraction.socket','register','sendStatus','status','offset','limit'];(function(_0x911aa,_0x5cb8b5){var _0x327202=function(_0x52308e){while(--_0x52308e){_0x911aa['push'](_0x911aa['shift']());}};_0x327202(++_0x5cb8b5);}(_0x9b41,0x1e3));var _0x19b4=function(_0x4270a7,_0x21a575){_0x4270a7=_0x4270a7-0x0;var _0x1e4821=_0x9b41[_0x4270a7];return _0x1e4821;};'use strict';var jsonpatch=require(_0x19b4('0x0'));var rp=require(_0x19b4('0x1'));var moment=require(_0x19b4('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x19b4('0x3'));var util=require(_0x19b4('0x4'));var path=require(_0x19b4('0x5'));var sox=require(_0x19b4('0x6'));var csv=require(_0x19b4('0x7'));var ejs=require(_0x19b4('0x8'));var fs=require('fs');var _=require(_0x19b4('0x9'));var squel=require('squel');var crypto=require(_0x19b4('0xa'));var jsforce=require(_0x19b4('0xb'));var deskjs=require(_0x19b4('0xc'));var toCsv=require(_0x19b4('0x7'));var querystring=require(_0x19b4('0xd'));var Papa=require(_0x19b4('0xe'));var qs=require(_0x19b4('0xf'));var logger=require(_0x19b4('0x10'))(_0x19b4('0x11'));var utils=require(_0x19b4('0x12'));var config=require('../../config/environment');var db=require(_0x19b4('0x13'))['db'];var socket=require(_0x19b4('0x14'))({'host':'localhost','port':0x18eb});require(_0x19b4('0x15'))[_0x19b4('0x16')](socket);function respondWithStatusCode(_0x54fed8,_0x4d4005){_0x4d4005=_0x4d4005||0xcc;return function(_0x3ae1b8){if(_0x3ae1b8){return _0x54fed8[_0x19b4('0x17')](_0x4d4005);}return _0x54fed8[_0x19b4('0x18')](_0x4d4005)['end']();};}function respondWithResult(_0x55c750,_0x1be1b4){_0x1be1b4=_0x1be1b4||0xc8;return function(_0x46b73e){if(_0x46b73e){return _0x55c750['status'](_0x1be1b4)['json'](_0x46b73e);}};}function respondWithFilteredResult(_0x1db0d1,_0x4f9cd4){return function(_0x10b7db){if(_0x10b7db){var _0x1da89b=_0x10b7db['count'],_0xb56e27=_0x4f9cd4[_0x19b4('0x19')],_0x3c95c7=_0x4f9cd4[_0x19b4('0x19')]+_0x4f9cd4[_0x19b4('0x1a')],_0x596672;if(_0x3c95c7>=_0x1da89b){_0x3c95c7=_0x1da89b;_0x596672=0xc8;}else{_0x596672=0xce;}_0x1db0d1[_0x19b4('0x18')](_0x596672);return _0x1db0d1['set']('Content-Range',_0xb56e27+'-'+_0x3c95c7+'/'+_0x1da89b)[_0x19b4('0x1b')](_0x10b7db);}return null;};}function patchUpdates(_0x4fe2c3){return function(_0x46e260){try{jsonpatch[_0x19b4('0x1c')](_0x46e260,_0x4fe2c3,!![]);}catch(_0x22b0a6){return BPromise[_0x19b4('0x1d')](_0x22b0a6);}return _0x46e260['save']();};}function saveUpdates(_0x425f93,_0x3feb11){return function(_0x56bf4e){if(_0x56bf4e){return _0x56bf4e['update'](_0x425f93)[_0x19b4('0x1e')](function(_0x3fd99b){return _0x3fd99b;});}return null;};}function removeEntity(_0xb0c9b4,_0x8e1e0b){return function(_0x34edd9){if(_0x34edd9){return _0x34edd9[_0x19b4('0x1f')]()[_0x19b4('0x1e')](function(){_0xb0c9b4[_0x19b4('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x200e2d,_0x3c802a){return function(_0x5316e1){if(!_0x5316e1){_0x200e2d['sendStatus'](0x194);}return _0x5316e1;};}function handleError(_0x113310,_0x54c779){_0x54c779=_0x54c779||0x1f4;return function(_0x26a2ec){logger[_0x19b4('0x20')](_0x26a2ec['stack']);if(_0x26a2ec['name']){delete _0x26a2ec[_0x19b4('0x21')];}_0x113310[_0x19b4('0x18')](_0x54c779)[_0x19b4('0x22')](_0x26a2ec);};}exports[_0x19b4('0x23')]=function(_0x24bfc6,_0x300a9b){var _0x2bb157={},_0x16b3a0={},_0xe3ccb9={'count':0x0,'rows':[]};var _0x302ed3=db['OpenchannelInteraction']['rawAttributes'];_0x16b3a0[_0x19b4('0x24')]=_[_0x19b4('0x25')](_0x302ed3);var _0x4c4146={'dateStart':_0x24bfc6[_0x19b4('0x26')]['dateStart'],'dateEnd':_0x24bfc6[_0x19b4('0x26')][_0x19b4('0x27')]};delete _0x24bfc6[_0x19b4('0x26')][_0x19b4('0x28')];delete _0x24bfc6[_0x19b4('0x26')]['dateEnd'];_0x16b3a0[_0x19b4('0x26')]=_[_0x19b4('0x25')](_0x24bfc6[_0x19b4('0x26')]);_0x16b3a0[_0x19b4('0x29')]=_[_0x19b4('0x2a')](_0x16b3a0['model'],_0x16b3a0[_0x19b4('0x26')]);_0x2bb157[_0x19b4('0x2b')]=_[_0x19b4('0x2a')](_0x16b3a0['model'],qs[_0x19b4('0x2c')](_0x24bfc6[_0x19b4('0x26')][_0x19b4('0x2c')]));_0x2bb157[_0x19b4('0x2b')]=_0x2bb157[_0x19b4('0x2b')][_0x19b4('0x2d')]?_0x2bb157[_0x19b4('0x2b')]:_0x16b3a0[_0x19b4('0x24')];if(!_0x24bfc6[_0x19b4('0x26')][_0x19b4('0x2e')](_0x19b4('0x2f'))){_0x2bb157[_0x19b4('0x1a')]=qs[_0x19b4('0x1a')](_0x24bfc6[_0x19b4('0x26')][_0x19b4('0x1a')]);_0x2bb157[_0x19b4('0x19')]=qs[_0x19b4('0x19')](_0x24bfc6[_0x19b4('0x26')]['offset']);}_0x2bb157[_0x19b4('0x30')]=qs[_0x19b4('0x31')](_0x24bfc6[_0x19b4('0x26')][_0x19b4('0x31')]);_0x2bb157[_0x19b4('0x32')]=qs[_0x19b4('0x29')](_['pick'](_0x24bfc6[_0x19b4('0x26')],_0x16b3a0[_0x19b4('0x29')]));if(_0x4c4146[_0x19b4('0x28')]){if(_0x4c4146[_0x19b4('0x27')]){_0x4c4146[_0x19b4('0x27')]=moment(_0x4c4146[_0x19b4('0x27')])['add'](0x1,_0x19b4('0x33'));}else{_0x4c4146[_0x19b4('0x27')]=moment(_0x4c4146[_0x19b4('0x28')])[_0x19b4('0x34')](0x1,_0x19b4('0x33'));}_[_0x19b4('0x35')](_0x2bb157[_0x19b4('0x32')],{'createdAt':{'$gte':_0x4c4146[_0x19b4('0x28')],'$lte':_0x4c4146[_0x19b4('0x27')]}});}if(_0x24bfc6['query'][_0x19b4('0x36')]){_0x2bb157[_0x19b4('0x32')]=_[_0x19b4('0x35')](_0x2bb157['where'],{'$or':_[_0x19b4('0x37')](_0x2bb157[_0x19b4('0x2b')],function(_0x14de17){var _0x178330={};_0x178330[_0x14de17]={'$like':'%'+_0x24bfc6[_0x19b4('0x26')][_0x19b4('0x36')]+'%'};return _0x178330;})});}_0x2bb157=_[_0x19b4('0x35')]({},_0x2bb157,_0x24bfc6[_0x19b4('0x38')]);var _0x510a60={'where':_0x2bb157[_0x19b4('0x32')]};_0x510a60[_0x19b4('0x39')]=[];if(_0x24bfc6['query'][_0x19b4('0x3a')]){_0x510a60[_0x19b4('0x39')][_0x19b4('0x3b')]({'model':db['Tag'],'as':_0x19b4('0x3c'),'attributes':['id'],'where':{'id':_0x24bfc6[_0x19b4('0x26')][_0x19b4('0x3a')]},'required':!![]});_0x510a60[_0x19b4('0x3d')]=!![];}if(_0x24bfc6['query'][_0x19b4('0x3e')]){_0x510a60[_0x19b4('0x39')][_0x19b4('0x3b')]({'model':db[_0x19b4('0x3f')],'as':'Messages','attributes':['id','direction',_0x19b4('0x40'),_0x19b4('0x3e')],'where':{'direction':'in','read':_0x24bfc6['query']['read']||![]},'required':!![]});_0x510a60[_0x19b4('0x3d')]=!![];}return db[_0x19b4('0x41')][_0x19b4('0x42')](_0x510a60)[_0x19b4('0x1e')](function(_0x4c061b){_0xe3ccb9[_0x19b4('0x42')]=_0x4c061b;if(_0x24bfc6['query'][_0x19b4('0x43')]){_0x2bb157[_0x19b4('0x39')]=[{'model':db[_0x19b4('0x44')],'as':_0x19b4('0x45'),'required':![],'attributes':['id','name',_0x19b4('0x46')]},{'model':db[_0x19b4('0x47')],'as':'Contact','required':![]},{'model':db[_0x19b4('0x44')],'as':'Owner','attributes':[_0x19b4('0x21'),'fullname','internal'],'required':![]},{'model':db[_0x19b4('0x48')],'as':_0x19b4('0x49'),'attributes':[_0x19b4('0x21'),'key'],'required':![]},{'model':db[_0x19b4('0x3f')],'as':_0x19b4('0x4a'),'attributes':['id',_0x19b4('0x4b'),'createdAt',_0x19b4('0x3e')],'where':{'direction':'in','read':_0x24bfc6[_0x19b4('0x26')]['read']||![]},'required':_0x24bfc6['query'][_0x19b4('0x3e')]||![]},{'model':db[_0x19b4('0x4c')],'as':_0x19b4('0x3c'),'attributes':['id','name',_0x19b4('0x4d')],'required':_0x24bfc6['query'][_0x19b4('0x3a')]?!![]:![]},{'model':db[_0x19b4('0x4c')],'as':_0x19b4('0x4e'),'attributes':['id',_0x19b4('0x21'),'color'],'through':_0x24bfc6[_0x19b4('0x26')][_0x19b4('0x3a')]?{'attributes':[],'where':{'TagId':_0x24bfc6[_0x19b4('0x26')][_0x19b4('0x3a')]||undefined}}:{},'required':_0x24bfc6[_0x19b4('0x26')]['tag']?!![]:![]}];}return db[_0x19b4('0x41')][_0x19b4('0x4f')](_0x2bb157);})['then'](function(_0x437e2f){_0xe3ccb9[_0x19b4('0x50')]=_0x437e2f;return _0xe3ccb9;})[_0x19b4('0x1e')](respondWithFilteredResult(_0x300a9b,_0x2bb157))[_0x19b4('0x51')](handleError(_0x300a9b,null));};exports[_0x19b4('0x52')]=function(_0x2114dd,_0x35b25d){var _0x481612={'raw':![],'where':{'id':_0x2114dd[_0x19b4('0x53')]['id']}},_0x3398a5={};_0x3398a5['model']=_[_0x19b4('0x25')](db[_0x19b4('0x41')][_0x19b4('0x54')]);_0x3398a5[_0x19b4('0x26')]=_[_0x19b4('0x25')](_0x2114dd[_0x19b4('0x26')]);_0x3398a5[_0x19b4('0x29')]=_[_0x19b4('0x2a')](_0x3398a5[_0x19b4('0x24')],_0x3398a5['query']);_0x481612['attributes']=_[_0x19b4('0x2a')](_0x3398a5[_0x19b4('0x24')],qs[_0x19b4('0x2c')](_0x2114dd['query'][_0x19b4('0x2c')]));_0x481612['attributes']=_0x481612[_0x19b4('0x2b')]['length']?_0x481612[_0x19b4('0x2b')]:_0x3398a5[_0x19b4('0x24')];if(_0x2114dd[_0x19b4('0x26')][_0x19b4('0x43')]){_0x481612['include']=[{'all':!![]}];}_0x481612=_['merge']({},_0x481612,_0x2114dd['options']);return db['OpenchannelInteraction'][_0x19b4('0x55')](_0x481612)[_0x19b4('0x1e')](handleEntityNotFound(_0x35b25d,null))['then'](respondWithResult(_0x35b25d,null))['catch'](handleError(_0x35b25d,null));};exports[_0x19b4('0x56')]=function(_0x40cefb,_0xee2574){return db[_0x19b4('0x41')]['create'](_0x40cefb[_0x19b4('0x57')],{})[_0x19b4('0x1e')](respondWithResult(_0xee2574,0xc9))[_0x19b4('0x51')](handleError(_0xee2574,null));};exports[_0x19b4('0x58')]=function(_0x1cef68,_0x2f4e49){if(_0x1cef68[_0x19b4('0x57')]['id']){delete _0x1cef68['body']['id'];}return db[_0x19b4('0x41')]['find']({'where':{'id':_0x1cef68[_0x19b4('0x53')]['id']}})[_0x19b4('0x1e')](handleEntityNotFound(_0x2f4e49,null))['then'](saveUpdates(_0x1cef68[_0x19b4('0x57')],null))['then'](respondWithResult(_0x2f4e49,null))['catch'](handleError(_0x2f4e49,null));};exports[_0x19b4('0x1f')]=function(_0x4d91fe,_0x1e121d){return db[_0x19b4('0x41')][_0x19b4('0x55')]({'where':{'id':_0x4d91fe[_0x19b4('0x53')]['id']}})[_0x19b4('0x1e')](handleEntityNotFound(_0x1e121d,null))['then'](removeEntity(_0x1e121d,null))['catch'](handleError(_0x1e121d,null));};exports[_0x19b4('0x59')]=function(_0x439387,_0x5addad){return db[_0x19b4('0x41')][_0x19b4('0x59')]()['then'](respondWithResult(_0x5addad,null))[_0x19b4('0x51')](handleError(_0x5addad,null));};exports['addMessage']=function(_0x1de82e,_0x44e784,_0x2a0deb){return db[_0x19b4('0x3f')][_0x19b4('0x55')]({'where':{'id':_0x1de82e[_0x19b4('0x53')]['id']}})['then'](handleEntityNotFound(_0x44e784,null))[_0x19b4('0x1e')](function(_0x34357){if(_0x34357){return _0x34357['addMessage'](_0x1de82e[_0x19b4('0x57')][_0x19b4('0x5a')],_[_0x19b4('0x5b')](_0x1de82e[_0x19b4('0x57')],[_0x19b4('0x5a'),'id'])||{});}})['then'](respondWithResult(_0x44e784,null))[_0x19b4('0x51')](handleError(_0x44e784,null));};exports[_0x19b4('0x5c')]=function(_0xdeac09,_0x478fa7,_0x98b17a){var _0x55b0d1={'raw':![],'where':{}};var _0x20267b={};var _0x397def={'count':0x0,'rows':[]};return db['OpenchannelInteraction']['findOne']({'where':{'id':_0xdeac09[_0x19b4('0x53')]['id']}})[_0x19b4('0x1e')](handleEntityNotFound(_0x478fa7,null))[_0x19b4('0x1e')](function(_0x58079a){if(_0x58079a){_0x20267b[_0x19b4('0x24')]=_[_0x19b4('0x25')](db[_0x19b4('0x3f')][_0x19b4('0x54')]);_0x20267b['query']=_['keys'](_0xdeac09[_0x19b4('0x26')]);_0x20267b[_0x19b4('0x29')]=_[_0x19b4('0x2a')](_0x20267b[_0x19b4('0x24')],_0x20267b['query']);_0x55b0d1['attributes']=_['intersection'](_0x20267b['model'],qs[_0x19b4('0x2c')](_0xdeac09[_0x19b4('0x26')][_0x19b4('0x2c')]));_0x55b0d1[_0x19b4('0x2b')]=_0x55b0d1['attributes'][_0x19b4('0x2d')]?_0x55b0d1[_0x19b4('0x2b')]:_0x20267b['model'];if(!_0xdeac09[_0x19b4('0x26')]['hasOwnProperty'](_0x19b4('0x2f'))){_0x55b0d1['limit']=qs[_0x19b4('0x1a')](_0xdeac09[_0x19b4('0x26')][_0x19b4('0x1a')]);_0x55b0d1[_0x19b4('0x19')]=qs['offset'](_0xdeac09['query'][_0x19b4('0x19')]);}_0x55b0d1[_0x19b4('0x30')]=qs[_0x19b4('0x31')](_0xdeac09['query']['sort']);_0x55b0d1['where']=qs['filters'](_[_0x19b4('0x5d')](_0xdeac09[_0x19b4('0x26')],_0x20267b[_0x19b4('0x29')]));_0x55b0d1['where'][_0x19b4('0x5e')]=_0x58079a['id'];if(_0xdeac09['query'][_0x19b4('0x36')]){_0x55b0d1['where']=_[_0x19b4('0x35')](_0x55b0d1['where'],{'$or':_[_0x19b4('0x37')](_0x55b0d1['attributes'],function(_0x49bb2c){var _0x52cf5b={};_0x52cf5b[_0x49bb2c]={'$like':'%'+_0xdeac09['query'][_0x19b4('0x36')]+'%'};return _0x52cf5b;})});}if(_0xdeac09['query'][_0x19b4('0x5f')]){var _0x31eeeb=_0xdeac09[_0x19b4('0x26')][_0x19b4('0x5f')][_0x19b4('0x60')](',');var _0x1448c7={};_0x1448c7[_0x31eeeb[0x0]]={'$gte':moment(_0x31eeeb[0x1])[_0x19b4('0x61')]('YYYY-MM-DD\x20HH:mm:ss')};_0x55b0d1[_0x19b4('0x32')]=_[_0x19b4('0x35')](_0x55b0d1[_0x19b4('0x32')],_0x1448c7);}_0x55b0d1=_['merge']({},_0x55b0d1,_0xdeac09[_0x19b4('0x38')]);return db['OpenchannelMessage']['count']({'where':_0x55b0d1[_0x19b4('0x32')]})[_0x19b4('0x1e')](function(_0x3c2888){_0x397def['count']=_0x3c2888;if(_0xdeac09[_0x19b4('0x26')][_0x19b4('0x43')]){_0x55b0d1[_0x19b4('0x39')]=[{'all':!![]}];}return db['OpenchannelMessage'][_0x19b4('0x4f')](_0x55b0d1);})[_0x19b4('0x1e')](function(_0x17d29b){_0x397def[_0x19b4('0x50')]=_0x17d29b;return _0x397def;});}})['then'](respondWithFilteredResult(_0x478fa7,_0x55b0d1))[_0x19b4('0x51')](handleError(_0x478fa7,null));};exports[_0x19b4('0x62')]=function(_0x18693a,_0xae02fc,_0x10bcce){return db[_0x19b4('0x41')]['find']({'where':{'id':_0x18693a[_0x19b4('0x53')]['id']}})[_0x19b4('0x1e')](handleEntityNotFound(_0xae02fc,null))[_0x19b4('0x1e')](function(_0xf23a4e){if(_0xf23a4e){return _0xf23a4e['setTags'](_0x18693a[_0x19b4('0x57')][_0x19b4('0x5a')],_['omit'](_0x18693a[_0x19b4('0x57')],[_0x19b4('0x5a'),'id'])||{})['spread'](function(){return db['Tag'][_0x19b4('0x4f')]({'attributes':['id',_0x19b4('0x21'),'color'],'where':{'id':_0x18693a[_0x19b4('0x57')]['ids']}});})[_0x19b4('0x1e')](function(_0xc7566b){socket[_0x19b4('0x63')](_0x19b4('0x64'),{'id':Number(_0x18693a[_0x19b4('0x53')]['id']),'tags':_0xc7566b||[]});return{'id':Number(_0x18693a[_0x19b4('0x53')]['id']),'tags':_0xc7566b||[]};});}})[_0x19b4('0x1e')](respondWithResult(_0xae02fc,null))[_0x19b4('0x51')](handleError(_0xae02fc,null));};exports[_0x19b4('0x65')]=function(_0x33ada6,_0x41fe41,_0x5b9f88){var _0x47fc79;return db['OpenchannelInteraction'][_0x19b4('0x55')]({'where':{'id':_0x33ada6['params']['id']}})['then'](handleEntityNotFound(_0x41fe41,null))[_0x19b4('0x1e')](function(_0x1c4eed){if(_0x1c4eed){return _0x1c4eed['removeTags'](_0x33ada6[_0x19b4('0x26')][_0x19b4('0x5a')]);}})[_0x19b4('0x1e')](respondWithStatusCode(_0x41fe41,null))[_0x19b4('0x51')](handleError(_0x41fe41,null));};
\ No newline at end of file
index 590cd96..784f788 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x664b=['OpenchannelInteraction','setMaxListeners','save','update','emit','hasOwnProperty','exports','events','../../mysqldb'];(function(_0xcef2,_0x128e42){var _0x6a0a69=function(_0x41a602){while(--_0x41a602){_0xcef2['push'](_0xcef2['shift']());}};_0x6a0a69(++_0x128e42);}(_0x664b,0xb2));var _0xb664=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0x664b[_0x2641f9];return _0x585741;};'use strict';var EventEmitter=require(_0xb664('0x0'));var OpenchannelInteraction=require(_0xb664('0x1'))['db'][_0xb664('0x2')];var OpenchannelInteractionEvents=new EventEmitter();OpenchannelInteractionEvents[_0xb664('0x3')](0x0);var events={'afterCreate':_0xb664('0x4'),'afterUpdate':_0xb664('0x5'),'afterDestroy':'remove'};function emitEvent(_0x14f0c3){return function(_0x26f4ab,_0x3d3954,_0x266d41){OpenchannelInteractionEvents[_0xb664('0x6')](_0x14f0c3+':'+_0x26f4ab['id'],_0x26f4ab);OpenchannelInteractionEvents[_0xb664('0x6')](_0x14f0c3,_0x26f4ab);_0x266d41(null);};}for(var e in events){if(events[_0xb664('0x7')](e)){var event=events[e];OpenchannelInteraction['hook'](e,emitEvent(event));}}module[_0xb664('0x8')]=OpenchannelInteractionEvents;
\ No newline at end of file
+var _0xb48f=['update','remove','emit','hasOwnProperty','hook','exports','events','OpenchannelInteraction'];(function(_0x123343,_0x2d1099){var _0x49a0a8=function(_0x49a978){while(--_0x49a978){_0x123343['push'](_0x123343['shift']());}};_0x49a0a8(++_0x2d1099);}(_0xb48f,0x8e));var _0xfb48=function(_0x16f073,_0x5ff7ae){_0x16f073=_0x16f073-0x0;var _0x22a577=_0xb48f[_0x16f073];return _0x22a577;};'use strict';var EventEmitter=require(_0xfb48('0x0'));var OpenchannelInteraction=require('../../mysqldb')['db'][_0xfb48('0x1')];var OpenchannelInteractionEvents=new EventEmitter();OpenchannelInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0xfb48('0x2'),'afterDestroy':_0xfb48('0x3')};function emitEvent(_0x29220a){return function(_0x9ca6f1,_0x553cac,_0x35cbc6){OpenchannelInteractionEvents['emit'](_0x29220a+':'+_0x9ca6f1['id'],_0x9ca6f1);OpenchannelInteractionEvents[_0xfb48('0x4')](_0x29220a,_0x9ca6f1);_0x35cbc6(null);};}for(var e in events){if(events[_0xfb48('0x5')](e)){var event=events[e];OpenchannelInteraction[_0xfb48('0x6')](e,emitEvent(event));}}module[_0xfb48('0x7')]=OpenchannelInteractionEvents;
\ No newline at end of file
index c060869..86f25d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a78=['OpenchannelInteraction','lodash','util','../../config/logger','api','bluebird','request-promise','./openchannelInteraction.attributes','exports','define'];(function(_0x28e0e0,_0x3100da){var _0x229013=function(_0x583ced){while(--_0x583ced){_0x28e0e0['push'](_0x28e0e0['shift']());}};_0x229013(++_0x3100da);}(_0x8a78,0x15f));var _0x88a7=function(_0x4e21ba,_0x18097f){_0x4e21ba=_0x4e21ba-0x0;var _0x55b94b=_0x8a78[_0x4e21ba];return _0x55b94b;};'use strict';var _=require(_0x88a7('0x0'));var util=require(_0x88a7('0x1'));var logger=require(_0x88a7('0x2'))(_0x88a7('0x3'));var moment=require('moment');var BPromise=require(_0x88a7('0x4'));var rp=require(_0x88a7('0x5'));var attributes=require(_0x88a7('0x6'));module[_0x88a7('0x7')]=function(_0x4604fa,_0x11a00d){return _0x4604fa[_0x88a7('0x8')](_0x88a7('0x9'),attributes,{'tableName':'openchannel_interactions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3268=['exports','define','OpenchannelInteraction','openchannel_interactions','lodash','util','../../config/logger','api','moment','bluebird','./openchannelInteraction.attributes'];(function(_0x86d32e,_0x3a0bf1){var _0x50a35e=function(_0x414a12){while(--_0x414a12){_0x86d32e['push'](_0x86d32e['shift']());}};_0x50a35e(++_0x3a0bf1);}(_0x3268,0x1d2));var _0x8326=function(_0x2d03d0,_0x529ee7){_0x2d03d0=_0x2d03d0-0x0;var _0x43b480=_0x3268[_0x2d03d0];return _0x43b480;};'use strict';var _=require(_0x8326('0x0'));var util=require(_0x8326('0x1'));var logger=require(_0x8326('0x2'))(_0x8326('0x3'));var moment=require(_0x8326('0x4'));var BPromise=require(_0x8326('0x5'));var rp=require('request-promise');var attributes=require(_0x8326('0x6'));module[_0x8326('0x7')]=function(_0x12a966,_0x5dc707){return _0x12a966[_0x8326('0x8')](_0x8326('0x9'),attributes,{'tableName':_0x8326('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f023b31..3a8b2fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x75c5=['client','http','socket.io-emitter','localhost','./openchannelInteraction.socket','register','request','then','info','OpenchannelInteraction,\x20%s,\x20%s','debug','request\x20sent','stringify','error','message','UpdateOpenchannelInteraction','OpenchannelInteraction','update','body','options','where','limit','catch','AddTagsToOpenchannelInteraction','find','addTags','ids','omit','AddTags','lodash','util','moment','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment'];(function(_0x25c9d6,_0x589d97){var _0x464a11=function(_0x38495a){while(--_0x38495a){_0x25c9d6['push'](_0x25c9d6['shift']());}};_0x464a11(++_0x589d97);}(_0x75c5,0xfb));var _0x575c=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x75c5[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x575c('0x0'));var util=require(_0x575c('0x1'));var moment=require(_0x575c('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0x575c('0x3'))['db'];var utils=require(_0x575c('0x4'));var logger=require(_0x575c('0x5'))(_0x575c('0x6'));var config=require(_0x575c('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x575c('0x8')][_0x575c('0x9')]({'port':0x232a});var socket=require(_0x575c('0xa'))({'host':_0x575c('0xb'),'port':0x18eb});require(_0x575c('0xc'))[_0x575c('0xd')](socket);function respondWithRpcPromise(_0x163b31,_0x207199,_0x45a11e){return new BPromise(function(_0x378482,_0x5b2fb1){return client[_0x575c('0xe')](_0x163b31,_0x45a11e)[_0x575c('0xf')](function(_0x54767d){logger[_0x575c('0x10')](_0x575c('0x11'),_0x207199,'request\x20sent');logger[_0x575c('0x12')]('OpenchannelInteraction,\x20%s,\x20%s,\x20%s',_0x207199,_0x575c('0x13'),JSON[_0x575c('0x14')](_0x54767d));if(_0x54767d['error']){if(_0x54767d['error']['code']===0x1f4){logger[_0x575c('0x15')](_0x575c('0x11'),_0x207199,_0x54767d[_0x575c('0x15')][_0x575c('0x16')]);return _0x5b2fb1(_0x54767d[_0x575c('0x15')][_0x575c('0x16')]);}logger['error'](_0x575c('0x11'),_0x207199,_0x54767d[_0x575c('0x15')][_0x575c('0x16')]);return _0x378482(_0x54767d[_0x575c('0x15')][_0x575c('0x16')]);}else{logger[_0x575c('0x10')](_0x575c('0x11'),_0x207199,_0x575c('0x13'));_0x378482(_0x54767d['result'][_0x575c('0x16')]);}})['catch'](function(_0x207328){logger[_0x575c('0x15')](_0x575c('0x11'),_0x207199,_0x207328);_0x5b2fb1(_0x207328);});});}exports[_0x575c('0x17')]=function(_0x292be3){var _0x1baec6=this;return new Promise(function(_0x351089,_0x2a5ae1){return db[_0x575c('0x18')][_0x575c('0x19')](_0x292be3[_0x575c('0x1a')],{'raw':_0x292be3['options']?_0x292be3[_0x575c('0x1b')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x292be3[_0x575c('0x1b')]?_0x292be3['options'][_0x575c('0x1c')]||null:null,'attributes':_0x292be3[_0x575c('0x1b')]?_0x292be3['options']['attributes']||null:null,'limit':_0x292be3[_0x575c('0x1b')]?_0x292be3['options'][_0x575c('0x1d')]||null:null})['then'](function(_0x2d8c6a){logger[_0x575c('0x10')](_0x575c('0x17'),_0x292be3);logger[_0x575c('0x12')](_0x575c('0x17'),_0x292be3,JSON[_0x575c('0x14')](_0x2d8c6a));_0x351089(_0x2d8c6a);})[_0x575c('0x1e')](function(_0x178efd){logger[_0x575c('0x15')](_0x575c('0x17'),_0x178efd[_0x575c('0x16')],_0x292be3);_0x2a5ae1(_0x1baec6['error'](0x1f4,_0x178efd[_0x575c('0x16')]));});});};exports[_0x575c('0x1f')]=function(_0x18db10){return new Promise(function(_0x1d06ac,_0xde4336){return db[_0x575c('0x18')][_0x575c('0x20')]({'where':_0x18db10[_0x575c('0x1b')]?_0x18db10[_0x575c('0x1b')]['where']||null:null})['then'](function(_0x518378){if(_0x518378){return _0x518378[_0x575c('0x21')](_0x18db10['body'][_0x575c('0x22')],_[_0x575c('0x23')](_0x18db10[_0x575c('0x1a')],['ids','id'])||{});}})['spread'](function(_0x346605){logger['info'](_0x575c('0x24'),_0x18db10);logger[_0x575c('0x12')]('AddTags',_0x18db10,JSON[_0x575c('0x14')](_0x346605));_0x1d06ac(_0x346605);})[_0x575c('0x1e')](function(_0x2da5c0){logger[_0x575c('0x15')](_0x575c('0x24'),_0x2da5c0[_0x575c('0x16')],_0x18db10);_0xde4336(_this[_0x575c('0x15')](0x1f4,_0x2da5c0[_0x575c('0x16')]));});});};
\ No newline at end of file
+var _0x5795=['jayson/promise','http','socket.io-emitter','localhost','./openchannelInteraction.socket','register','then','info','OpenchannelInteraction,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','UpdateOpenchannelInteraction','OpenchannelInteraction','update','options','where','attributes','limit','addTags','body','ids','spread','catch','AddTags','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/environment'];(function(_0x5520c7,_0xbee449){var _0x3b0590=function(_0x1bb4f9){while(--_0x1bb4f9){_0x5520c7['push'](_0x5520c7['shift']());}};_0x3b0590(++_0xbee449);}(_0x5795,0xd1));var _0x5579=function(_0x334841,_0x2bbc4c){_0x334841=_0x334841-0x0;var _0x5beb4b=_0x5795[_0x334841];return _0x5beb4b;};'use strict';var _=require(_0x5579('0x0'));var util=require(_0x5579('0x1'));var moment=require(_0x5579('0x2'));var BPromise=require(_0x5579('0x3'));var rs=require(_0x5579('0x4'));var fs=require('fs');var db=require(_0x5579('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require(_0x5579('0x6'));var jayson=require(_0x5579('0x7'));var client=jayson['client'][_0x5579('0x8')]({'port':0x232a});var socket=require(_0x5579('0x9'))({'host':_0x5579('0xa'),'port':0x18eb});require(_0x5579('0xb'))[_0x5579('0xc')](socket);function respondWithRpcPromise(_0x47984b,_0x51c579,_0x3f0d08){return new BPromise(function(_0x81de5d,_0x502e86){return client['request'](_0x47984b,_0x3f0d08)[_0x5579('0xd')](function(_0x19bd79){logger[_0x5579('0xe')](_0x5579('0xf'),_0x51c579,'request\x20sent');logger[_0x5579('0x10')]('OpenchannelInteraction,\x20%s,\x20%s,\x20%s',_0x51c579,_0x5579('0x11'),JSON[_0x5579('0x12')](_0x19bd79));if(_0x19bd79[_0x5579('0x13')]){if(_0x19bd79['error'][_0x5579('0x14')]===0x1f4){logger[_0x5579('0x13')]('OpenchannelInteraction,\x20%s,\x20%s',_0x51c579,_0x19bd79['error'][_0x5579('0x15')]);return _0x502e86(_0x19bd79[_0x5579('0x13')][_0x5579('0x15')]);}logger[_0x5579('0x13')](_0x5579('0xf'),_0x51c579,_0x19bd79[_0x5579('0x13')][_0x5579('0x15')]);return _0x81de5d(_0x19bd79[_0x5579('0x13')][_0x5579('0x15')]);}else{logger[_0x5579('0xe')](_0x5579('0xf'),_0x51c579,_0x5579('0x11'));_0x81de5d(_0x19bd79[_0x5579('0x16')]['message']);}})['catch'](function(_0x3bf644){logger[_0x5579('0x13')](_0x5579('0xf'),_0x51c579,_0x3bf644);_0x502e86(_0x3bf644);});});}exports[_0x5579('0x17')]=function(_0x3883fc){var _0x5860bf=this;return new Promise(function(_0x3ca528,_0x1cd996){return db[_0x5579('0x18')][_0x5579('0x19')](_0x3883fc['body'],{'raw':_0x3883fc[_0x5579('0x1a')]?_0x3883fc[_0x5579('0x1a')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3883fc[_0x5579('0x1a')]?_0x3883fc['options'][_0x5579('0x1b')]||null:null,'attributes':_0x3883fc[_0x5579('0x1a')]?_0x3883fc[_0x5579('0x1a')][_0x5579('0x1c')]||null:null,'limit':_0x3883fc[_0x5579('0x1a')]?_0x3883fc[_0x5579('0x1a')][_0x5579('0x1d')]||null:null})['then'](function(_0x36a725){logger['info'](_0x5579('0x17'),_0x3883fc);logger[_0x5579('0x10')]('UpdateOpenchannelInteraction',_0x3883fc,JSON['stringify'](_0x36a725));_0x3ca528(_0x36a725);})['catch'](function(_0x4eb0cf){logger['error'](_0x5579('0x17'),_0x4eb0cf['message'],_0x3883fc);_0x1cd996(_0x5860bf['error'](0x1f4,_0x4eb0cf[_0x5579('0x15')]));});});};exports['AddTagsToOpenchannelInteraction']=function(_0x261ac0){return new Promise(function(_0x11f8bc,_0x96da9a){return db[_0x5579('0x18')]['find']({'where':_0x261ac0[_0x5579('0x1a')]?_0x261ac0[_0x5579('0x1a')][_0x5579('0x1b')]||null:null})[_0x5579('0xd')](function(_0x4ac34b){if(_0x4ac34b){return _0x4ac34b[_0x5579('0x1e')](_0x261ac0[_0x5579('0x1f')][_0x5579('0x20')],_['omit'](_0x261ac0[_0x5579('0x1f')],[_0x5579('0x20'),'id'])||{});}})[_0x5579('0x21')](function(_0x51b206){logger[_0x5579('0xe')]('AddTags',_0x261ac0);logger[_0x5579('0x10')]('AddTags',_0x261ac0,JSON[_0x5579('0x12')](_0x51b206));_0x11f8bc(_0x51b206);})[_0x5579('0x22')](function(_0x5900b9){logger[_0x5579('0x13')](_0x5579('0x23'),_0x5900b9[_0x5579('0x15')],_0x261ac0);_0x96da9a(_this['error'](0x1f4,_0x5900b9[_0x5579('0x15')]));});});};
\ No newline at end of file
index a3b116e..d8b8517 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0565=['length','openchannelInteraction:','./openchannelInteraction.events','remove','update','emit'];(function(_0xbc31d5,_0x47d5be){var _0x614562=function(_0x29bef1){while(--_0x29bef1){_0xbc31d5['push'](_0xbc31d5['shift']());}};_0x614562(++_0x47d5be);}(_0x0565,0x1d0));var _0x5056=function(_0x525c7b,_0x488fcc){_0x525c7b=_0x525c7b-0x0;var _0x27b33e=_0x0565[_0x525c7b];return _0x27b33e;};'use strict';var OpenchannelInteractionEvents=require(_0x5056('0x0'));var events=['save',_0x5056('0x1'),_0x5056('0x2')];function createListener(_0x30e3d2,_0x23c9a6){return function(_0x57ea48){_0x23c9a6[_0x5056('0x3')](_0x30e3d2,_0x57ea48);};}function removeListener(_0x65d677,_0x54a086){return function(){OpenchannelInteractionEvents['removeListener'](_0x65d677,_0x54a086);};}exports['register']=function(_0x2c9bf5){for(var _0x2925c2=0x0,_0x3dd470=events[_0x5056('0x4')];_0x2925c2<_0x3dd470;_0x2925c2++){var _0x46e235=events[_0x2925c2];var _0x1e42f4=createListener(_0x5056('0x5')+_0x46e235,_0x2c9bf5);OpenchannelInteractionEvents['on'](_0x46e235,_0x1e42f4);}};
\ No newline at end of file
+var _0x84bc=['register','./openchannelInteraction.events','remove','update','removeListener'];(function(_0x502c7d,_0x2f1285){var _0x30b7ed=function(_0x2d92f3){while(--_0x2d92f3){_0x502c7d['push'](_0x502c7d['shift']());}};_0x30b7ed(++_0x2f1285);}(_0x84bc,0x182));var _0xc84b=function(_0x8dd320,_0x3e6e8e){_0x8dd320=_0x8dd320-0x0;var _0xe04550=_0x84bc[_0x8dd320];return _0xe04550;};'use strict';var OpenchannelInteractionEvents=require(_0xc84b('0x0'));var events=['save',_0xc84b('0x1'),_0xc84b('0x2')];function createListener(_0x2ed248,_0x385f70){return function(_0x12b3c1){_0x385f70['emit'](_0x2ed248,_0x12b3c1);};}function removeListener(_0x57f5b5,_0x41a930){return function(){OpenchannelInteractionEvents[_0xc84b('0x3')](_0x57f5b5,_0x41a930);};}exports[_0xc84b('0x4')]=function(_0x1c0e95){for(var _0x39c70c=0x0,_0x504dd3=events['length'];_0x39c70c<_0x504dd3;_0x39c70c++){var _0x1f7eb0=events[_0x39c70c];var _0xe4c3f8=createListener('openchannelInteraction:'+_0x1f7eb0,_0x1c0e95);OpenchannelInteractionEvents['on'](_0x1f7eb0,_0xe4c3f8);}};
\ No newline at end of file
index 72370bc..8b937a6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3619=['/:id/reject','reject','delete','destroy','exports','multer','path','Router','../../components/interaction/service','../../config/environment','./openchannelMessage.controller','get','isAuthenticated','index','/describe','/:id','show','tracked','openchannel','openchannelmessage:create','create','update','put','/:id/accept'];(function(_0x2a27d2,_0x1194e5){var _0x18f683=function(_0x553e0d){while(--_0x553e0d){_0x2a27d2['push'](_0x2a27d2['shift']());}};_0x18f683(++_0x1194e5);}(_0x3619,0x10d));var _0x9361=function(_0x345ac8,_0x2daa49){_0x345ac8=_0x345ac8-0x0;var _0x552f86=_0x3619[_0x345ac8];return _0x552f86;};'use strict';var multer=require(_0x9361('0x0'));var util=require('util');var path=require(_0x9361('0x1'));var express=require('express');var router=express[_0x9361('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0x9361('0x3'));var config=require(_0x9361('0x4'));var controller=require(_0x9361('0x5'));router[_0x9361('0x6')]('/',auth[_0x9361('0x7')](),controller[_0x9361('0x8')]);router['get'](_0x9361('0x9'),auth[_0x9361('0x7')](),controller['describe']);router[_0x9361('0x6')](_0x9361('0xa'),auth[_0x9361('0x7')](),controller[_0x9361('0xb')]);router['post']('/',auth[_0x9361('0x7')](),interaction[_0x9361('0xc')](_0x9361('0xd'),_0x9361('0xe')),controller[_0x9361('0xf')]);router['put']('/:id',auth[_0x9361('0x7')](),controller[_0x9361('0x10')]);router[_0x9361('0x11')](_0x9361('0x12'),auth[_0x9361('0x7')](),controller['accept']);router[_0x9361('0x11')](_0x9361('0x13'),auth['isAuthenticated'](),controller[_0x9361('0x14')]);router[_0x9361('0x15')](_0x9361('0xa'),auth[_0x9361('0x7')](),controller[_0x9361('0x16')]);module[_0x9361('0x17')]=router;
\ No newline at end of file
+var _0xc80b=['../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelMessage.controller','get','isAuthenticated','index','describe','/:id','post','openchannel','openchannelmessage:create','create','put','update','/:id/accept','accept','/:id/reject','delete','multer','util','path','express','Router'];(function(_0x23ffa4,_0x476d5c){var _0x23fc99=function(_0x5d0abf){while(--_0x5d0abf){_0x23ffa4['push'](_0x23ffa4['shift']());}};_0x23fc99(++_0x476d5c);}(_0xc80b,0x1c3));var _0xbc80=function(_0x5c6b36,_0x3bb7bc){_0x5c6b36=_0x5c6b36-0x0;var _0x520e9b=_0xc80b[_0x5c6b36];return _0x520e9b;};'use strict';var multer=require(_0xbc80('0x0'));var util=require(_0xbc80('0x1'));var path=require(_0xbc80('0x2'));var express=require(_0xbc80('0x3'));var router=express[_0xbc80('0x4')]();var auth=require(_0xbc80('0x5'));var interaction=require(_0xbc80('0x6'));var config=require(_0xbc80('0x7'));var controller=require(_0xbc80('0x8'));router[_0xbc80('0x9')]('/',auth[_0xbc80('0xa')](),controller[_0xbc80('0xb')]);router[_0xbc80('0x9')]('/describe',auth[_0xbc80('0xa')](),controller[_0xbc80('0xc')]);router['get'](_0xbc80('0xd'),auth['isAuthenticated'](),controller['show']);router[_0xbc80('0xe')]('/',auth[_0xbc80('0xa')](),interaction['tracked'](_0xbc80('0xf'),_0xbc80('0x10')),controller[_0xbc80('0x11')]);router[_0xbc80('0x12')](_0xbc80('0xd'),auth['isAuthenticated'](),controller[_0xbc80('0x13')]);router[_0xbc80('0x12')](_0xbc80('0x14'),auth[_0xbc80('0xa')](),controller[_0xbc80('0x15')]);router[_0xbc80('0x12')](_0xbc80('0x16'),auth[_0xbc80('0xa')](),controller['reject']);router[_0xbc80('0x17')](_0xbc80('0xd'),auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index e68e64d..d101252 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5ce9=['exports','TEXT','BOOLEAN','out','DATE'];(function(_0xb758a3,_0x4ea829){var _0x4b86e5=function(_0x599d7d){while(--_0x599d7d){_0xb758a3['push'](_0xb758a3['shift']());}};_0x4b86e5(++_0x4ea829);}(_0x5ce9,0x1ae));var _0x95ce=function(_0x2e5e1b,_0xdb2883){_0x2e5e1b=_0x2e5e1b-0x0;var _0x257cca=_0x5ce9[_0x2e5e1b];return _0x257cca;};'use strict';var Sequelize=require('sequelize');module[_0x95ce('0x0')]={'body':{'type':Sequelize[_0x95ce('0x1')]('medium'),'allowNull':![]},'read':{'type':Sequelize[_0x95ce('0x2')],'defaultValue':![]},'secret':{'type':Sequelize[_0x95ce('0x2')],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in',_0x95ce('0x3')),'defaultValue':_0x95ce('0x3'),'allowNull':![]},'readAt':{'type':Sequelize[_0x95ce('0x4')]}};
\ No newline at end of file
+var _0xc9c0=['out','DATE','exports','TEXT','medium','BOOLEAN'];(function(_0x868b7c,_0xfa438b){var _0x21683c=function(_0x21bc66){while(--_0x21bc66){_0x868b7c['push'](_0x868b7c['shift']());}};_0x21683c(++_0xfa438b);}(_0xc9c0,0x1a6));var _0x0c9c=function(_0x549f0b,_0xce8c2f){_0x549f0b=_0x549f0b-0x0;var _0x376dd8=_0xc9c0[_0x549f0b];return _0x376dd8;};'use strict';var Sequelize=require('sequelize');module[_0x0c9c('0x0')]={'body':{'type':Sequelize[_0x0c9c('0x1')](_0x0c9c('0x2')),'allowNull':![]},'read':{'type':Sequelize[_0x0c9c('0x3')],'defaultValue':![]},'secret':{'type':Sequelize[_0x0c9c('0x3')],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in','out'),'defaultValue':_0x0c9c('0x4'),'allowNull':![]},'readAt':{'type':Sequelize[_0x0c9c('0x5')]}};
\ No newline at end of file
index 060ae05..d53cc5b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2dfb=['crypto','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./openchannelMessage.socket','register','jayson/promise','client','request','debug','OpenchannelMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','OpenchannelMessage,\x20%s,\x20%s','message','result','sendStatus','status','json','count','offset','Content-Range','apply','reject','save','update','then','destroy','stack','name','send','index','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','fields','attributes','length','limit','order','sort','where','day','add','merge','filter','map','options','OpenchannelMessage','includeAll','include','rows','catch','show','params','find','create','body','describe','../../config/logger','accept','openchannel','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','Contact','get','OpenchannelInteractionId','isNil','read1stAt','interaction','info','role','null','acceptMessage','manual','interface','SIP/%s','channel','event','EventManager','acceptmessage','openchannel-interactions','agent','OpenchannelInteraction','[OPENCHANNELMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','rejectMessage','request-promise','moment','bluebird','util','path','sox','lodash','squel'];(function(_0x3c3b6b,_0x1902b0){var _0x296f03=function(_0x408684){while(--_0x408684){_0x3c3b6b['push'](_0x3c3b6b['shift']());}};_0x296f03(++_0x1902b0);}(_0x2dfb,0x1bc));var _0xb2df=function(_0x34a4b1,_0x1b5324){_0x34a4b1=_0x34a4b1-0x0;var _0x1dd64c=_0x2dfb[_0x34a4b1];return _0x1dd64c;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xb2df('0x0'));var moment=require(_0xb2df('0x1'));var BPromise=require(_0xb2df('0x2'));var Mustache=require('mustache');var util=require(_0xb2df('0x3'));var path=require(_0xb2df('0x4'));var sox=require(_0xb2df('0x5'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xb2df('0x6'));var squel=require(_0xb2df('0x7'));var crypto=require(_0xb2df('0x8'));var jsforce=require('jsforce');var deskjs=require(_0xb2df('0x9'));var toCsv=require(_0xb2df('0xa'));var querystring=require(_0xb2df('0xb'));var Papa=require(_0xb2df('0xc'));var qs=require(_0xb2df('0xd'));var logger=require('../../config/logger')(_0xb2df('0xe'));var utils=require(_0xb2df('0xf'));var config=require(_0xb2df('0x10'));var db=require(_0xb2df('0x11'))['db'];var socket=require(_0xb2df('0x12'))({'host':_0xb2df('0x13'),'port':0x18eb});require(_0xb2df('0x14'))[_0xb2df('0x15')](socket);var jayson=require(_0xb2df('0x16'));var client=jayson[_0xb2df('0x17')]['http']({'port':0x232c});var client9002=jayson[_0xb2df('0x17')]['http']({'port':0x232a});function respondWithRpcPromise(_0x447b2a,_0x342027,_0x19bf14,_0x5e624f){return new BPromise(function(_0x1e2a68,_0x3aecd5){var _0x5f35e3=_0x5e624f||client;return _0x5f35e3[_0xb2df('0x18')](_0x447b2a,_0x19bf14)['then'](function(_0x1ba230){logger['info']('OpenchannelMessage,\x20%s,\x20%s',_0x342027,'request\x20sent');logger[_0xb2df('0x19')](_0xb2df('0x1a'),_0x342027,_0xb2df('0x1b'),JSON[_0xb2df('0x1c')](_0x1ba230));if(_0x1ba230[_0xb2df('0x1d')]){if(_0x1ba230['error'][_0xb2df('0x1e')]===0x1f4){logger[_0xb2df('0x1d')](_0xb2df('0x1f'),_0x342027,_0x1ba230[_0xb2df('0x1d')]['message']);return _0x3aecd5(_0x1ba230['error'][_0xb2df('0x20')]);}logger[_0xb2df('0x1d')](_0xb2df('0x1f'),_0x342027,_0x1ba230[_0xb2df('0x1d')][_0xb2df('0x20')]);return _0x1e2a68(_0x1ba230[_0xb2df('0x1d')][_0xb2df('0x20')]);}else{logger['info']('OpenchannelMessage,\x20%s,\x20%s',_0x342027,'request\x20sent');_0x1e2a68(_0x1ba230[_0xb2df('0x21')][_0xb2df('0x20')]);}})['catch'](function(_0x3a662a){logger['error'](_0xb2df('0x1f'),_0x342027,_0x3a662a);_0x3aecd5(_0x3a662a);});});}function respondWithStatusCode(_0x5bbe10,_0x543805){_0x543805=_0x543805||0xcc;return function(_0x511272){if(_0x511272){return _0x5bbe10[_0xb2df('0x22')](_0x543805);}return _0x5bbe10[_0xb2df('0x23')](_0x543805)['end']();};}function respondWithResult(_0x4011eb,_0x126939){_0x126939=_0x126939||0xc8;return function(_0x2ac6bd){if(_0x2ac6bd){return _0x4011eb[_0xb2df('0x23')](_0x126939)[_0xb2df('0x24')](_0x2ac6bd);}};}function respondWithFilteredResult(_0x2f478b,_0x4e3689){return function(_0x1ec0a0){if(_0x1ec0a0){var _0x38bdf6=_0x1ec0a0[_0xb2df('0x25')],_0x4bf6ce=_0x4e3689[_0xb2df('0x26')],_0x2e5679=_0x4e3689['offset']+_0x4e3689['limit'],_0x263159;if(_0x2e5679>=_0x38bdf6){_0x2e5679=_0x38bdf6;_0x263159=0xc8;}else{_0x263159=0xce;}_0x2f478b[_0xb2df('0x23')](_0x263159);return _0x2f478b['set'](_0xb2df('0x27'),_0x4bf6ce+'-'+_0x2e5679+'/'+_0x38bdf6)[_0xb2df('0x24')](_0x1ec0a0);}return null;};}function patchUpdates(_0x59dedb){return function(_0x5db58a){try{jsonpatch[_0xb2df('0x28')](_0x5db58a,_0x59dedb,!![]);}catch(_0x42b3e5){return BPromise[_0xb2df('0x29')](_0x42b3e5);}return _0x5db58a[_0xb2df('0x2a')]();};}function saveUpdates(_0x9887d9,_0x31e29){return function(_0x2d2246){if(_0x2d2246){return _0x2d2246[_0xb2df('0x2b')](_0x9887d9)[_0xb2df('0x2c')](function(_0xa82946){return _0xa82946;});}return null;};}function removeEntity(_0x27abeb,_0x559240){return function(_0x451784){if(_0x451784){return _0x451784[_0xb2df('0x2d')]()[_0xb2df('0x2c')](function(){_0x27abeb['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x18b48c,_0x1ff817){return function(_0x4e0670){if(!_0x4e0670){_0x18b48c[_0xb2df('0x22')](0x194);}return _0x4e0670;};}function handleError(_0x5d8038,_0x45bd7e){_0x45bd7e=_0x45bd7e||0x1f4;return function(_0x126311){logger[_0xb2df('0x1d')](_0x126311[_0xb2df('0x2e')]);if(_0x126311[_0xb2df('0x2f')]){delete _0x126311[_0xb2df('0x2f')];}_0x5d8038['status'](_0x45bd7e)[_0xb2df('0x30')](_0x126311);};}exports[_0xb2df('0x31')]=function(_0x272876,_0x4131a7){var _0x3b34c5={},_0x1d4f1b={},_0x543596={'count':0x0,'rows':[]};var _0x3c14c0=db['OpenchannelMessage'][_0xb2df('0x32')];_0x1d4f1b[_0xb2df('0x33')]=_[_0xb2df('0x34')](_0x3c14c0);var _0x5aa19b={'dateStart':_0x272876[_0xb2df('0x35')][_0xb2df('0x36')],'dateEnd':_0x272876[_0xb2df('0x35')][_0xb2df('0x37')]};delete _0x272876['query'][_0xb2df('0x36')];delete _0x272876[_0xb2df('0x35')][_0xb2df('0x37')];_0x1d4f1b['query']=_['keys'](_0x272876[_0xb2df('0x35')]);_0x1d4f1b[_0xb2df('0x38')]=_[_0xb2df('0x39')](_0x1d4f1b[_0xb2df('0x33')],_0x1d4f1b['query']);_0x3b34c5['attributes']=_[_0xb2df('0x39')](_0x1d4f1b[_0xb2df('0x33')],qs[_0xb2df('0x3a')](_0x272876[_0xb2df('0x35')][_0xb2df('0x3a')]));_0x3b34c5[_0xb2df('0x3b')]=_0x3b34c5['attributes'][_0xb2df('0x3c')]?_0x3b34c5[_0xb2df('0x3b')]:_0x1d4f1b[_0xb2df('0x33')];if(!_0x272876[_0xb2df('0x35')]['hasOwnProperty']('nolimit')){_0x3b34c5[_0xb2df('0x3d')]=qs[_0xb2df('0x3d')](_0x272876['query'][_0xb2df('0x3d')]);_0x3b34c5[_0xb2df('0x26')]=qs[_0xb2df('0x26')](_0x272876[_0xb2df('0x35')][_0xb2df('0x26')]);}_0x3b34c5[_0xb2df('0x3e')]=qs[_0xb2df('0x3f')](_0x272876[_0xb2df('0x35')][_0xb2df('0x3f')]);_0x3b34c5[_0xb2df('0x40')]=qs[_0xb2df('0x38')](_['pick'](_0x272876['query'],_0x1d4f1b[_0xb2df('0x38')]));if(_0x5aa19b['dateStart']){if(_0x5aa19b[_0xb2df('0x37')]){_0x5aa19b['dateEnd']=moment(_0x5aa19b[_0xb2df('0x37')])['add'](0x1,_0xb2df('0x41'));}else{_0x5aa19b[_0xb2df('0x37')]=moment(_0x5aa19b['dateStart'])[_0xb2df('0x42')](0x1,'day');}_[_0xb2df('0x43')](_0x3b34c5[_0xb2df('0x40')],{'createdAt':{'$gte':_0x5aa19b[_0xb2df('0x36')],'$lte':_0x5aa19b[_0xb2df('0x37')]}});}if(_0x272876[_0xb2df('0x35')][_0xb2df('0x44')]){_0x3b34c5[_0xb2df('0x40')]=_['merge'](_0x3b34c5[_0xb2df('0x40')],{'$or':_[_0xb2df('0x45')](_0x3b34c5[_0xb2df('0x3b')],function(_0x2f72cb){var _0x366ed7={};_0x366ed7[_0x2f72cb]={'$like':'%'+_0x272876[_0xb2df('0x35')]['filter']+'%'};return _0x366ed7;})});}_0x3b34c5=_[_0xb2df('0x43')]({},_0x3b34c5,_0x272876[_0xb2df('0x46')]);var _0x50faa9={'where':_0x3b34c5[_0xb2df('0x40')]};return db[_0xb2df('0x47')][_0xb2df('0x25')](_0x50faa9)[_0xb2df('0x2c')](function(_0x2413b1){_0x543596[_0xb2df('0x25')]=_0x2413b1;if(_0x272876['query'][_0xb2df('0x48')]){_0x3b34c5[_0xb2df('0x49')]=[{'all':!![]}];}return db[_0xb2df('0x47')]['findAll'](_0x3b34c5);})[_0xb2df('0x2c')](function(_0x5ddf6b){_0x543596[_0xb2df('0x4a')]=_0x5ddf6b;return _0x543596;})[_0xb2df('0x2c')](respondWithFilteredResult(_0x4131a7,_0x3b34c5))[_0xb2df('0x4b')](handleError(_0x4131a7,null));};exports[_0xb2df('0x4c')]=function(_0x18174d,_0x4ad373){var _0x44b0e3={'raw':!![],'where':{'id':_0x18174d[_0xb2df('0x4d')]['id']}},_0x2649f6={};_0x2649f6['model']=_[_0xb2df('0x34')](db[_0xb2df('0x47')][_0xb2df('0x32')]);_0x2649f6['query']=_[_0xb2df('0x34')](_0x18174d['query']);_0x2649f6['filters']=_['intersection'](_0x2649f6[_0xb2df('0x33')],_0x2649f6[_0xb2df('0x35')]);_0x44b0e3[_0xb2df('0x3b')]=_[_0xb2df('0x39')](_0x2649f6[_0xb2df('0x33')],qs[_0xb2df('0x3a')](_0x18174d[_0xb2df('0x35')][_0xb2df('0x3a')]));_0x44b0e3[_0xb2df('0x3b')]=_0x44b0e3['attributes'][_0xb2df('0x3c')]?_0x44b0e3[_0xb2df('0x3b')]:_0x2649f6[_0xb2df('0x33')];if(_0x18174d[_0xb2df('0x35')][_0xb2df('0x48')]){_0x44b0e3[_0xb2df('0x49')]=[{'all':!![]}];}_0x44b0e3=_['merge']({},_0x44b0e3,_0x18174d[_0xb2df('0x46')]);return db[_0xb2df('0x47')][_0xb2df('0x4e')](_0x44b0e3)[_0xb2df('0x2c')](handleEntityNotFound(_0x4ad373,null))[_0xb2df('0x2c')](respondWithResult(_0x4ad373,null))[_0xb2df('0x4b')](handleError(_0x4ad373,null));};exports[_0xb2df('0x4f')]=function(_0x1ff5e1,_0x1e3d2c){return db[_0xb2df('0x47')]['create'](_0x1ff5e1[_0xb2df('0x50')],{})[_0xb2df('0x2c')](respondWithResult(_0x1e3d2c,0xc9))[_0xb2df('0x4b')](handleError(_0x1e3d2c,null));};exports[_0xb2df('0x2b')]=function(_0x3e4745,_0x40bcee){if(_0x3e4745[_0xb2df('0x50')]['id']){delete _0x3e4745[_0xb2df('0x50')]['id'];}return db[_0xb2df('0x47')][_0xb2df('0x4e')]({'where':{'id':_0x3e4745[_0xb2df('0x4d')]['id']}})[_0xb2df('0x2c')](handleEntityNotFound(_0x40bcee,null))['then'](saveUpdates(_0x3e4745[_0xb2df('0x50')],null))['then'](respondWithResult(_0x40bcee,null))[_0xb2df('0x4b')](handleError(_0x40bcee,null));};exports[_0xb2df('0x2d')]=function(_0x2bf54d,_0x4dc031){return db[_0xb2df('0x47')][_0xb2df('0x4e')]({'where':{'id':_0x2bf54d[_0xb2df('0x4d')]['id']}})[_0xb2df('0x2c')](handleEntityNotFound(_0x4dc031,null))[_0xb2df('0x2c')](removeEntity(_0x4dc031,null))['catch'](handleError(_0x4dc031,null));};exports[_0xb2df('0x51')]=function(_0x311cb1,_0x1950fe){return db[_0xb2df('0x47')]['describe']()[_0xb2df('0x2c')](respondWithResult(_0x1950fe,null))[_0xb2df('0x4b')](handleError(_0x1950fe,null));};var interaction_log=require(_0xb2df('0x52'))('openchannel-interactions');exports[_0xb2df('0x53')]=function(_0x55958a,_0xa78870,_0x56750c){var _0x33b1c0={'channel':_0xb2df('0x54')};if(_0x55958a[_0xb2df('0x50')]['id']){delete _0x55958a['body']['id'];}_0x55958a['body']['read']=!![];_0x55958a[_0xb2df('0x50')][_0xb2df('0x55')]=moment()[_0xb2df('0x56')](_0xb2df('0x57'));_0x55958a[_0xb2df('0x50')][_0xb2df('0x58')]=_0x55958a['body'][_0xb2df('0x58')]||_0x55958a[_0xb2df('0x59')]['id'];return db[_0xb2df('0x47')]['find']({'where':{'id':_0x55958a[_0xb2df('0x4d')]['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0xb2df('0x5a')}]})[_0xb2df('0x2c')](handleEntityNotFound(_0xa78870,null))['then'](saveUpdates(_0x55958a[_0xb2df('0x50')],null))[_0xb2df('0x2c')](function(_0x4f0add){if(_0x4f0add){_0x33b1c0[_0xb2df('0x20')]=_0x4f0add[_0xb2df('0x5b')]({'plain':!![]});return db['OpenchannelInteraction'][_0xb2df('0x4e')]({'where':{'id':_0x4f0add[_0xb2df('0x5c')]}});}return null;})[_0xb2df('0x2c')](handleEntityNotFound(_0xa78870,null))['then'](function(_0x37ba45){if(_0x37ba45){return _0x37ba45[_0xb2df('0x2b')]({'UserId':_0x55958a['body'][_0xb2df('0x58')],'read1stAt':_[_0xb2df('0x5d')](_0x37ba45[_0xb2df('0x5e')])?moment()[_0xb2df('0x56')](_0xb2df('0x57')):undefined});}return null;})[_0xb2df('0x2c')](function(_0x2eecd1){if(_0x2eecd1){_0x33b1c0[_0xb2df('0x5f')]=_0x2eecd1[_0xb2df('0x5b')]({'plain':!![]});interaction_log[_0xb2df('0x60')]('[OPENCHANNELMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x55958a['user']['id'],_0x55958a[_0xb2df('0x59')][_0xb2df('0x2f')],_0x55958a[_0xb2df('0x59')][_0xb2df('0x61')],_0x33b1c0[_0xb2df('0x5f')]['id'],_0x55958a[_0xb2df('0x50')]?JSON[_0xb2df('0x1c')](_0x55958a['body']):_0xb2df('0x62'));return respondWithRpcPromise('AcceptMessage',_0xb2df('0x63'),_0x33b1c0);}return null;})[_0xb2df('0x2c')](function(_0x12c207){if(_0x12c207){if(_0x55958a['body'][_0xb2df('0x64')]){_0x33b1c0[_0xb2df('0x20')][_0xb2df('0x65')]=util[_0xb2df('0x56')](_0xb2df('0x66'),_0x55958a[_0xb2df('0x59')]['name']);_0x33b1c0[_0xb2df('0x20')]['channel']=_0x33b1c0[_0xb2df('0x67')];_0x33b1c0[_0xb2df('0x20')][_0xb2df('0x68')]=_0xb2df('0x53');return respondWithRpcPromise('EventManager',_0xb2df('0x69'),{'event':_0xb2df('0x6a'),'message':_0x33b1c0[_0xb2df('0x20')]},client9002)[_0xb2df('0x2c')](function(){return _0x33b1c0;});}return _0x33b1c0;}return null;})[_0xb2df('0x2c')](respondWithResult(_0xa78870,null))['catch'](handleError(_0xa78870,null));};var interaction_log=require(_0xb2df('0x52'))(_0xb2df('0x6b'));exports['reject']=function(_0x526352,_0x377fa4,_0x24c7a8){var _0x3f6145={'agent':{},'channel':_0xb2df('0x54')};if(_0x526352['body']['id']){delete _0x526352[_0xb2df('0x50')]['id'];}_0x526352['body'][_0xb2df('0x58')]=_0x526352['body'][_0xb2df('0x58')]||_0x526352[_0xb2df('0x59')]['id'];_0x3f6145[_0xb2df('0x6c')]['id']=_0x526352[_0xb2df('0x50')]['UserId'];return db[_0xb2df('0x47')][_0xb2df('0x4e')]({'where':{'id':_0x526352['params']['id'],'UserId':null}})[_0xb2df('0x2c')](handleEntityNotFound(_0x377fa4,null))[_0xb2df('0x2c')](function(_0xe9b4fe){if(_0xe9b4fe){_0x3f6145[_0xb2df('0x20')]=_0xe9b4fe[_0xb2df('0x5b')]({'plain':!![]});return db[_0xb2df('0x6d')][_0xb2df('0x4e')]({'where':{'id':_0xe9b4fe[_0xb2df('0x5c')]}});}return null;})[_0xb2df('0x2c')](handleEntityNotFound(_0x377fa4,null))[_0xb2df('0x2c')](function(_0xaf0948){if(_0xaf0948){_0x3f6145[_0xb2df('0x5f')]=_0xaf0948[_0xb2df('0x5b')]({'plain':!![]});interaction_log['info'](_0xb2df('0x6e'),_0x526352[_0xb2df('0x59')]['id'],_0x526352[_0xb2df('0x59')]['name'],_0x526352[_0xb2df('0x59')][_0xb2df('0x61')],_0x3f6145[_0xb2df('0x5f')]['id'],_0x526352[_0xb2df('0x50')]?JSON[_0xb2df('0x1c')](_0x526352['body']):_0xb2df('0x62'));return respondWithRpcPromise(_0xb2df('0x6f'),_0xb2df('0x70'),_0x3f6145);}return null;})[_0xb2df('0x2c')](function(_0x1e3a13){if(_0x1e3a13){_0x1e3a13['message'][_0xb2df('0x65')]=util[_0xb2df('0x56')]('SIP/%s',_0x526352['user'][_0xb2df('0x2f')]);_0x1e3a13[_0xb2df('0x20')][_0xb2df('0x67')]=_0x3f6145[_0xb2df('0x67')];_0x1e3a13[_0xb2df('0x20')]['event']=_0xb2df('0x29');respondWithRpcPromise(_0xb2df('0x69'),_0xb2df('0x69'),{'event':'rejectmessage','message':_0x1e3a13[_0xb2df('0x20')]},client9002);return _0x3f6145;}return null;})[_0xb2df('0x2c')](respondWithResult(_0x377fa4,null))[_0xb2df('0x4b')](handleError(_0x377fa4,null));};
\ No newline at end of file
+var _0xc14c=['readAt','format','UserId','user','CmContact','Contact','get','OpenchannelInteraction','isNil','YYYY-MM-DD\x20HH:mm:ss','interaction','[OPENCHANNELMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','null','acceptMessage','manual','interface','SIP/%s','channel','event','EventManager','acceptmessage','../../config/logger','agent','OpenchannelInteractionId','[OPENCHANNELMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','RejectMessage','rejectMessage','rejectmessage','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','localhost','./openchannelMessage.socket','client','http','request','then','info','OpenchannelMessage,\x20%s,\x20%s','request\x20sent','debug','OpenchannelMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','sendStatus','status','json','offset','limit','Content-Range','apply','reject','save','update','destroy','end','stack','name','index','OpenchannelMessage','rawAttributes','model','keys','query','dateStart','dateEnd','attributes','intersection','fields','length','hasOwnProperty','nolimit','sort','where','filters','add','merge','filter','map','options','count','includeAll','include','findAll','rows','catch','show','create','body','find','params','openchannel-interactions','openchannel','read'];(function(_0x284318,_0xd1ce42){var _0x2682f5=function(_0x1115db){while(--_0x1115db){_0x284318['push'](_0x284318['shift']());}};_0x2682f5(++_0xd1ce42);}(_0xc14c,0x8e));var _0xcc14=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0xc14c[_0x19950b];return _0x3c6b41;};'use strict';var jsonpatch=require(_0xcc14('0x0'));var rp=require('request-promise');var moment=require(_0xcc14('0x1'));var BPromise=require(_0xcc14('0x2'));var Mustache=require(_0xcc14('0x3'));var util=require(_0xcc14('0x4'));var path=require(_0xcc14('0x5'));var sox=require(_0xcc14('0x6'));var csv=require(_0xcc14('0x7'));var ejs=require(_0xcc14('0x8'));var fs=require('fs');var _=require(_0xcc14('0x9'));var squel=require('squel');var crypto=require(_0xcc14('0xa'));var jsforce=require(_0xcc14('0xb'));var deskjs=require(_0xcc14('0xc'));var toCsv=require(_0xcc14('0x7'));var querystring=require('querystring');var Papa=require(_0xcc14('0xd'));var qs=require(_0xcc14('0xe'));var logger=require('../../config/logger')('api');var utils=require(_0xcc14('0xf'));var config=require(_0xcc14('0x10'));var db=require(_0xcc14('0x11'))['db'];var socket=require('socket.io-emitter')({'host':_0xcc14('0x12'),'port':0x18eb});require(_0xcc14('0x13'))['register'](socket);var jayson=require('jayson/promise');var client=jayson[_0xcc14('0x14')][_0xcc14('0x15')]({'port':0x232c});var client9002=jayson['client'][_0xcc14('0x15')]({'port':0x232a});function respondWithRpcPromise(_0x323619,_0x2e99c5,_0xc248dc,_0x404340){return new BPromise(function(_0x797136,_0x1567a5){var _0x4962f3=_0x404340||client;return _0x4962f3[_0xcc14('0x16')](_0x323619,_0xc248dc)[_0xcc14('0x17')](function(_0x3a715e){logger[_0xcc14('0x18')](_0xcc14('0x19'),_0x2e99c5,_0xcc14('0x1a'));logger[_0xcc14('0x1b')](_0xcc14('0x1c'),_0x2e99c5,_0xcc14('0x1a'),JSON[_0xcc14('0x1d')](_0x3a715e));if(_0x3a715e[_0xcc14('0x1e')]){if(_0x3a715e[_0xcc14('0x1e')][_0xcc14('0x1f')]===0x1f4){logger['error'](_0xcc14('0x19'),_0x2e99c5,_0x3a715e[_0xcc14('0x1e')]['message']);return _0x1567a5(_0x3a715e[_0xcc14('0x1e')][_0xcc14('0x20')]);}logger[_0xcc14('0x1e')](_0xcc14('0x19'),_0x2e99c5,_0x3a715e[_0xcc14('0x1e')][_0xcc14('0x20')]);return _0x797136(_0x3a715e[_0xcc14('0x1e')][_0xcc14('0x20')]);}else{logger[_0xcc14('0x18')](_0xcc14('0x19'),_0x2e99c5,'request\x20sent');_0x797136(_0x3a715e[_0xcc14('0x21')]['message']);}})['catch'](function(_0x3dd562){logger[_0xcc14('0x1e')](_0xcc14('0x19'),_0x2e99c5,_0x3dd562);_0x1567a5(_0x3dd562);});});}function respondWithStatusCode(_0x546323,_0x37198e){_0x37198e=_0x37198e||0xcc;return function(_0x16dd24){if(_0x16dd24){return _0x546323[_0xcc14('0x22')](_0x37198e);}return _0x546323[_0xcc14('0x23')](_0x37198e)['end']();};}function respondWithResult(_0xe5a445,_0x916b1){_0x916b1=_0x916b1||0xc8;return function(_0x3cead9){if(_0x3cead9){return _0xe5a445[_0xcc14('0x23')](_0x916b1)[_0xcc14('0x24')](_0x3cead9);}};}function respondWithFilteredResult(_0x17dc31,_0x5f5667){return function(_0x3f13d5){if(_0x3f13d5){var _0x3cd370=_0x3f13d5['count'],_0x102b74=_0x5f5667[_0xcc14('0x25')],_0x53c121=_0x5f5667[_0xcc14('0x25')]+_0x5f5667[_0xcc14('0x26')],_0x5a023e;if(_0x53c121>=_0x3cd370){_0x53c121=_0x3cd370;_0x5a023e=0xc8;}else{_0x5a023e=0xce;}_0x17dc31[_0xcc14('0x23')](_0x5a023e);return _0x17dc31['set'](_0xcc14('0x27'),_0x102b74+'-'+_0x53c121+'/'+_0x3cd370)[_0xcc14('0x24')](_0x3f13d5);}return null;};}function patchUpdates(_0x5191c8){return function(_0x2f0f80){try{jsonpatch[_0xcc14('0x28')](_0x2f0f80,_0x5191c8,!![]);}catch(_0x487df3){return BPromise[_0xcc14('0x29')](_0x487df3);}return _0x2f0f80[_0xcc14('0x2a')]();};}function saveUpdates(_0x1063cb,_0x54a05c){return function(_0x52bcf9){if(_0x52bcf9){return _0x52bcf9[_0xcc14('0x2b')](_0x1063cb)[_0xcc14('0x17')](function(_0x28e511){return _0x28e511;});}return null;};}function removeEntity(_0x2fe274,_0x3a6e0f){return function(_0x146fd5){if(_0x146fd5){return _0x146fd5[_0xcc14('0x2c')]()[_0xcc14('0x17')](function(){_0x2fe274[_0xcc14('0x23')](0xcc)[_0xcc14('0x2d')]();});}};}function handleEntityNotFound(_0x587c66,_0x1daef3){return function(_0x151408){if(!_0x151408){_0x587c66[_0xcc14('0x22')](0x194);}return _0x151408;};}function handleError(_0x1caa0f,_0x1d2280){_0x1d2280=_0x1d2280||0x1f4;return function(_0x2a8c73){logger[_0xcc14('0x1e')](_0x2a8c73[_0xcc14('0x2e')]);if(_0x2a8c73['name']){delete _0x2a8c73[_0xcc14('0x2f')];}_0x1caa0f[_0xcc14('0x23')](_0x1d2280)['send'](_0x2a8c73);};}exports[_0xcc14('0x30')]=function(_0x1feae0,_0x2e01c7){var _0x525d62={},_0x1f233a={},_0x4bac13={'count':0x0,'rows':[]};var _0x44f3ff=db[_0xcc14('0x31')][_0xcc14('0x32')];_0x1f233a[_0xcc14('0x33')]=_[_0xcc14('0x34')](_0x44f3ff);var _0x36575a={'dateStart':_0x1feae0[_0xcc14('0x35')][_0xcc14('0x36')],'dateEnd':_0x1feae0[_0xcc14('0x35')][_0xcc14('0x37')]};delete _0x1feae0[_0xcc14('0x35')]['dateStart'];delete _0x1feae0[_0xcc14('0x35')][_0xcc14('0x37')];_0x1f233a[_0xcc14('0x35')]=_[_0xcc14('0x34')](_0x1feae0[_0xcc14('0x35')]);_0x1f233a['filters']=_['intersection'](_0x1f233a[_0xcc14('0x33')],_0x1f233a[_0xcc14('0x35')]);_0x525d62[_0xcc14('0x38')]=_[_0xcc14('0x39')](_0x1f233a[_0xcc14('0x33')],qs['fields'](_0x1feae0['query'][_0xcc14('0x3a')]));_0x525d62['attributes']=_0x525d62[_0xcc14('0x38')][_0xcc14('0x3b')]?_0x525d62[_0xcc14('0x38')]:_0x1f233a[_0xcc14('0x33')];if(!_0x1feae0[_0xcc14('0x35')][_0xcc14('0x3c')](_0xcc14('0x3d'))){_0x525d62['limit']=qs[_0xcc14('0x26')](_0x1feae0[_0xcc14('0x35')][_0xcc14('0x26')]);_0x525d62[_0xcc14('0x25')]=qs[_0xcc14('0x25')](_0x1feae0[_0xcc14('0x35')][_0xcc14('0x25')]);}_0x525d62['order']=qs[_0xcc14('0x3e')](_0x1feae0[_0xcc14('0x35')][_0xcc14('0x3e')]);_0x525d62[_0xcc14('0x3f')]=qs[_0xcc14('0x40')](_['pick'](_0x1feae0[_0xcc14('0x35')],_0x1f233a[_0xcc14('0x40')]));if(_0x36575a[_0xcc14('0x36')]){if(_0x36575a[_0xcc14('0x37')]){_0x36575a['dateEnd']=moment(_0x36575a[_0xcc14('0x37')])[_0xcc14('0x41')](0x1,'day');}else{_0x36575a['dateEnd']=moment(_0x36575a[_0xcc14('0x36')])[_0xcc14('0x41')](0x1,'day');}_[_0xcc14('0x42')](_0x525d62['where'],{'createdAt':{'$gte':_0x36575a[_0xcc14('0x36')],'$lte':_0x36575a[_0xcc14('0x37')]}});}if(_0x1feae0[_0xcc14('0x35')][_0xcc14('0x43')]){_0x525d62[_0xcc14('0x3f')]=_[_0xcc14('0x42')](_0x525d62[_0xcc14('0x3f')],{'$or':_[_0xcc14('0x44')](_0x525d62[_0xcc14('0x38')],function(_0x5d419c){var _0x372279={};_0x372279[_0x5d419c]={'$like':'%'+_0x1feae0[_0xcc14('0x35')][_0xcc14('0x43')]+'%'};return _0x372279;})});}_0x525d62=_['merge']({},_0x525d62,_0x1feae0[_0xcc14('0x45')]);var _0x558722={'where':_0x525d62['where']};return db[_0xcc14('0x31')][_0xcc14('0x46')](_0x558722)[_0xcc14('0x17')](function(_0x3af101){_0x4bac13['count']=_0x3af101;if(_0x1feae0[_0xcc14('0x35')][_0xcc14('0x47')]){_0x525d62[_0xcc14('0x48')]=[{'all':!![]}];}return db[_0xcc14('0x31')][_0xcc14('0x49')](_0x525d62);})[_0xcc14('0x17')](function(_0x6971c3){_0x4bac13[_0xcc14('0x4a')]=_0x6971c3;return _0x4bac13;})['then'](respondWithFilteredResult(_0x2e01c7,_0x525d62))[_0xcc14('0x4b')](handleError(_0x2e01c7,null));};exports[_0xcc14('0x4c')]=function(_0x2c5524,_0x33a487){var _0x2f47bd={'raw':!![],'where':{'id':_0x2c5524['params']['id']}},_0x86bd84={};_0x86bd84[_0xcc14('0x33')]=_[_0xcc14('0x34')](db[_0xcc14('0x31')][_0xcc14('0x32')]);_0x86bd84['query']=_[_0xcc14('0x34')](_0x2c5524[_0xcc14('0x35')]);_0x86bd84[_0xcc14('0x40')]=_[_0xcc14('0x39')](_0x86bd84['model'],_0x86bd84[_0xcc14('0x35')]);_0x2f47bd[_0xcc14('0x38')]=_[_0xcc14('0x39')](_0x86bd84[_0xcc14('0x33')],qs[_0xcc14('0x3a')](_0x2c5524[_0xcc14('0x35')][_0xcc14('0x3a')]));_0x2f47bd[_0xcc14('0x38')]=_0x2f47bd[_0xcc14('0x38')]['length']?_0x2f47bd[_0xcc14('0x38')]:_0x86bd84[_0xcc14('0x33')];if(_0x2c5524[_0xcc14('0x35')][_0xcc14('0x47')]){_0x2f47bd[_0xcc14('0x48')]=[{'all':!![]}];}_0x2f47bd=_[_0xcc14('0x42')]({},_0x2f47bd,_0x2c5524[_0xcc14('0x45')]);return db[_0xcc14('0x31')]['find'](_0x2f47bd)[_0xcc14('0x17')](handleEntityNotFound(_0x33a487,null))[_0xcc14('0x17')](respondWithResult(_0x33a487,null))['catch'](handleError(_0x33a487,null));};exports['create']=function(_0x182e7a,_0x729b80){return db['OpenchannelMessage'][_0xcc14('0x4d')](_0x182e7a[_0xcc14('0x4e')],{})[_0xcc14('0x17')](respondWithResult(_0x729b80,0xc9))[_0xcc14('0x4b')](handleError(_0x729b80,null));};exports['update']=function(_0x18bda6,_0x3cd3d3){if(_0x18bda6[_0xcc14('0x4e')]['id']){delete _0x18bda6[_0xcc14('0x4e')]['id'];}return db[_0xcc14('0x31')][_0xcc14('0x4f')]({'where':{'id':_0x18bda6['params']['id']}})[_0xcc14('0x17')](handleEntityNotFound(_0x3cd3d3,null))['then'](saveUpdates(_0x18bda6[_0xcc14('0x4e')],null))[_0xcc14('0x17')](respondWithResult(_0x3cd3d3,null))['catch'](handleError(_0x3cd3d3,null));};exports['destroy']=function(_0x560ea9,_0x4c3925){return db['OpenchannelMessage'][_0xcc14('0x4f')]({'where':{'id':_0x560ea9[_0xcc14('0x50')]['id']}})[_0xcc14('0x17')](handleEntityNotFound(_0x4c3925,null))['then'](removeEntity(_0x4c3925,null))[_0xcc14('0x4b')](handleError(_0x4c3925,null));};exports['describe']=function(_0x450572,_0x23aaad){return db['OpenchannelMessage']['describe']()['then'](respondWithResult(_0x23aaad,null))['catch'](handleError(_0x23aaad,null));};var interaction_log=require('../../config/logger')(_0xcc14('0x51'));exports['accept']=function(_0x2c0aee,_0x26584b,_0x4db4b4){var _0x50f405={'channel':_0xcc14('0x52')};if(_0x2c0aee['body']['id']){delete _0x2c0aee['body']['id'];}_0x2c0aee['body'][_0xcc14('0x53')]=!![];_0x2c0aee[_0xcc14('0x4e')][_0xcc14('0x54')]=moment()[_0xcc14('0x55')]('YYYY-MM-DD\x20HH:mm:ss');_0x2c0aee['body'][_0xcc14('0x56')]=_0x2c0aee[_0xcc14('0x4e')]['UserId']||_0x2c0aee[_0xcc14('0x57')]['id'];return db[_0xcc14('0x31')][_0xcc14('0x4f')]({'where':{'id':_0x2c0aee[_0xcc14('0x50')]['id'],'UserId':null},'include':[{'model':db[_0xcc14('0x58')],'as':_0xcc14('0x59')}]})[_0xcc14('0x17')](handleEntityNotFound(_0x26584b,null))[_0xcc14('0x17')](saveUpdates(_0x2c0aee[_0xcc14('0x4e')],null))['then'](function(_0x243282){if(_0x243282){_0x50f405[_0xcc14('0x20')]=_0x243282[_0xcc14('0x5a')]({'plain':!![]});return db[_0xcc14('0x5b')][_0xcc14('0x4f')]({'where':{'id':_0x243282['OpenchannelInteractionId']}});}return null;})['then'](handleEntityNotFound(_0x26584b,null))[_0xcc14('0x17')](function(_0x520abb){if(_0x520abb){return _0x520abb[_0xcc14('0x2b')]({'UserId':_0x2c0aee['body'][_0xcc14('0x56')],'read1stAt':_[_0xcc14('0x5c')](_0x520abb['read1stAt'])?moment()[_0xcc14('0x55')](_0xcc14('0x5d')):undefined});}return null;})['then'](function(_0x1a8874){if(_0x1a8874){_0x50f405[_0xcc14('0x5e')]=_0x1a8874[_0xcc14('0x5a')]({'plain':!![]});interaction_log[_0xcc14('0x18')](_0xcc14('0x5f'),_0x2c0aee[_0xcc14('0x57')]['id'],_0x2c0aee[_0xcc14('0x57')]['name'],_0x2c0aee['user']['role'],_0x50f405['interaction']['id'],_0x2c0aee[_0xcc14('0x4e')]?JSON['stringify'](_0x2c0aee['body']):_0xcc14('0x60'));return respondWithRpcPromise('AcceptMessage',_0xcc14('0x61'),_0x50f405);}return null;})['then'](function(_0x404712){if(_0x404712){if(_0x2c0aee[_0xcc14('0x4e')][_0xcc14('0x62')]){_0x50f405[_0xcc14('0x20')][_0xcc14('0x63')]=util[_0xcc14('0x55')](_0xcc14('0x64'),_0x2c0aee[_0xcc14('0x57')][_0xcc14('0x2f')]);_0x50f405[_0xcc14('0x20')][_0xcc14('0x65')]=_0x50f405[_0xcc14('0x65')];_0x50f405[_0xcc14('0x20')][_0xcc14('0x66')]='accept';return respondWithRpcPromise(_0xcc14('0x67'),_0xcc14('0x67'),{'event':_0xcc14('0x68'),'message':_0x50f405[_0xcc14('0x20')]},client9002)[_0xcc14('0x17')](function(){return _0x50f405;});}return _0x50f405;}return null;})[_0xcc14('0x17')](respondWithResult(_0x26584b,null))[_0xcc14('0x4b')](handleError(_0x26584b,null));};var interaction_log=require(_0xcc14('0x69'))('openchannel-interactions');exports[_0xcc14('0x29')]=function(_0x3dfe6d,_0x568241,_0x3c9cfb){var _0x28ab60={'agent':{},'channel':'openchannel'};if(_0x3dfe6d[_0xcc14('0x4e')]['id']){delete _0x3dfe6d[_0xcc14('0x4e')]['id'];}_0x3dfe6d[_0xcc14('0x4e')][_0xcc14('0x56')]=_0x3dfe6d['body'][_0xcc14('0x56')]||_0x3dfe6d[_0xcc14('0x57')]['id'];_0x28ab60[_0xcc14('0x6a')]['id']=_0x3dfe6d[_0xcc14('0x4e')][_0xcc14('0x56')];return db[_0xcc14('0x31')][_0xcc14('0x4f')]({'where':{'id':_0x3dfe6d[_0xcc14('0x50')]['id'],'UserId':null}})[_0xcc14('0x17')](handleEntityNotFound(_0x568241,null))[_0xcc14('0x17')](function(_0x2a4e5d){if(_0x2a4e5d){_0x28ab60[_0xcc14('0x20')]=_0x2a4e5d[_0xcc14('0x5a')]({'plain':!![]});return db[_0xcc14('0x5b')]['find']({'where':{'id':_0x2a4e5d[_0xcc14('0x6b')]}});}return null;})['then'](handleEntityNotFound(_0x568241,null))['then'](function(_0x5943da){if(_0x5943da){_0x28ab60[_0xcc14('0x5e')]=_0x5943da[_0xcc14('0x5a')]({'plain':!![]});interaction_log['info'](_0xcc14('0x6c'),_0x3dfe6d[_0xcc14('0x57')]['id'],_0x3dfe6d[_0xcc14('0x57')][_0xcc14('0x2f')],_0x3dfe6d['user'][_0xcc14('0x6d')],_0x28ab60['interaction']['id'],_0x3dfe6d[_0xcc14('0x4e')]?JSON[_0xcc14('0x1d')](_0x3dfe6d['body']):_0xcc14('0x60'));return respondWithRpcPromise(_0xcc14('0x6e'),_0xcc14('0x6f'),_0x28ab60);}return null;})[_0xcc14('0x17')](function(_0x48a5f7){if(_0x48a5f7){_0x48a5f7[_0xcc14('0x20')][_0xcc14('0x63')]=util[_0xcc14('0x55')](_0xcc14('0x64'),_0x3dfe6d['user']['name']);_0x48a5f7[_0xcc14('0x20')][_0xcc14('0x65')]=_0x28ab60['channel'];_0x48a5f7[_0xcc14('0x20')][_0xcc14('0x66')]=_0xcc14('0x29');respondWithRpcPromise(_0xcc14('0x67'),_0xcc14('0x67'),{'event':_0xcc14('0x70'),'message':_0x48a5f7[_0xcc14('0x20')]},client9002);return _0x28ab60;}return null;})['then'](respondWithResult(_0x568241,null))[_0xcc14('0x4b')](handleError(_0x568241,null));};
\ No newline at end of file
index 6fee9d5..ea89d4b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf49=['../../mysqldb','OpenchannelMessage','save','remove','emit','hasOwnProperty','exports','events'];(function(_0x29ecfd,_0x37c8a8){var _0x1211de=function(_0x270ba8){while(--_0x270ba8){_0x29ecfd['push'](_0x29ecfd['shift']());}};_0x1211de(++_0x37c8a8);}(_0xdf49,0x19f));var _0x9df4=function(_0x2bf888,_0x374f0b){_0x2bf888=_0x2bf888-0x0;var _0x3038d6=_0xdf49[_0x2bf888];return _0x3038d6;};'use strict';var EventEmitter=require(_0x9df4('0x0'));var OpenchannelMessage=require(_0x9df4('0x1'))['db'][_0x9df4('0x2')];var OpenchannelMessageEvents=new EventEmitter();OpenchannelMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x9df4('0x3'),'afterUpdate':'update','afterDestroy':_0x9df4('0x4')};function emitEvent(_0x32eda0){return function(_0x4dba47,_0x4041af,_0x40e859){OpenchannelMessageEvents[_0x9df4('0x5')](_0x32eda0+':'+_0x4dba47['id'],_0x4dba47);OpenchannelMessageEvents[_0x9df4('0x5')](_0x32eda0,_0x4dba47);_0x40e859(null);};}for(var e in events){if(events[_0x9df4('0x6')](e)){var event=events[e];OpenchannelMessage['hook'](e,emitEvent(event));}}module[_0x9df4('0x7')]=OpenchannelMessageEvents;
\ No newline at end of file
+var _0xa207=['hasOwnProperty','hook','exports','../../mysqldb','OpenchannelMessage','setMaxListeners'];(function(_0x4f08dd,_0x3784ec){var _0x3017ee=function(_0x7d95be){while(--_0x7d95be){_0x4f08dd['push'](_0x4f08dd['shift']());}};_0x3017ee(++_0x3784ec);}(_0xa207,0x69));var _0x7a20=function(_0x4e676e,_0x2a7c6d){_0x4e676e=_0x4e676e-0x0;var _0x336a3c=_0xa207[_0x4e676e];return _0x336a3c;};'use strict';var EventEmitter=require('events');var OpenchannelMessage=require(_0x7a20('0x0'))['db'][_0x7a20('0x1')];var OpenchannelMessageEvents=new EventEmitter();OpenchannelMessageEvents[_0x7a20('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x22f4cc){return function(_0x5663e7,_0x1f0b80,_0x2e15d4){OpenchannelMessageEvents['emit'](_0x22f4cc+':'+_0x5663e7['id'],_0x5663e7);OpenchannelMessageEvents['emit'](_0x22f4cc,_0x5663e7);_0x2e15d4(null);};}for(var e in events){if(events[_0x7a20('0x3')](e)){var event=events[e];OpenchannelMessage[_0x7a20('0x4')](e,emitEvent(event));}}module[_0x7a20('0x5')]=OpenchannelMessageEvents;
\ No newline at end of file
index c0ff29f..24016cd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4584=['inspect','utf8mb4','utf8mb4_unicode_ci','lodash','../../config/logger','api','moment','./openchannelMessage.attributes','exports','define','OpenchannelMessage','openchannel_messages','models','get','direction','toLowerCase','out','isNil','UserId','OpenchannelInteraction','findOne','OpenchannelInteractionId','createdAt','body','error','secret','CmContact','describe','then','OpenchannelAccount','OpenchannelAccountId','Interactions','Contact','keys','replyUri','info','OpenchannelMessage,\x20%s,\x20%s','afterCreate','Forwarding\x20message\x20%d\x20to\x20%s','length','Interaction','GET','format','Message\x20%d\x20forwarded\x20to\x20%s','update','catch'];(function(_0xc65dfe,_0x4459b7){var _0x3bd1df=function(_0x508ba7){while(--_0x508ba7){_0xc65dfe['push'](_0xc65dfe['shift']());}};_0x3bd1df(++_0x4459b7);}(_0x4584,0x1cf));var _0x4458=function(_0x2fbb21,_0x1f3785){_0x2fbb21=_0x2fbb21-0x0;var _0x1caa91=_0x4584[_0x2fbb21];return _0x1caa91;};'use strict';var _=require(_0x4458('0x0'));var util=require('util');var logger=require(_0x4458('0x1'))(_0x4458('0x2'));var moment=require(_0x4458('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x4458('0x4'));module[_0x4458('0x5')]=function(_0x37118c,_0x3d12ec){return _0x37118c[_0x4458('0x6')](_0x4458('0x7'),attributes,{'tableName':_0x4458('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x215b2d,_0x102b5f,_0x51da14){var _0x14bb0f=_0x37118c[_0x4458('0x9')];var _0x107f1c=_0x215b2d[_0x4458('0xa')]({'plain':!![]});if(_0x107f1c[_0x4458('0xb')][_0x4458('0xc')]()==='in'||_0x107f1c[_0x4458('0xb')][_0x4458('0xc')]()===_0x4458('0xd')&&!_0x107f1c['secret']&&!_[_0x4458('0xe')](_0x107f1c[_0x4458('0xf')])){_0x14bb0f[_0x4458('0x10')][_0x4458('0x11')]({'where':{'id':_0x107f1c[_0x4458('0x12')]}})['then'](function(_0x302552){if(_0x302552){_0x302552['update']({'lastMsgAt':_0x107f1c[_0x4458('0x13')],'lastMsgDirection':_0x107f1c['direction'][_0x4458('0xc')](),'lastMsgBody':_0x107f1c[_0x4458('0x14')]});}})['catch'](function(_0x5e2f05){console[_0x4458('0x15')](_0x5e2f05);});}if(_0x107f1c[_0x4458('0xb')]===_0x4458('0xd')&&!_0x107f1c[_0x4458('0x16')]){var _0x30d440;_0x14bb0f[_0x4458('0x17')][_0x4458('0x18')]()[_0x4458('0x19')](function(_0x593376){return _0x14bb0f[_0x4458('0x1a')]['find']({'where':{'id':_0x107f1c[_0x4458('0x1b')]},'include':[{'model':_0x14bb0f[_0x4458('0x10')],'as':_0x4458('0x1c'),'where':{'id':_0x107f1c['OpenchannelInteractionId']},'limit':0x1,'include':[{'model':_0x14bb0f[_0x4458('0x17')],'as':_0x4458('0x1d'),'attributes':_[_0x4458('0x1e')](_0x593376)}]}]});})[_0x4458('0x19')](function(_0x463809){_0x30d440=_0x463809[_0x4458('0xa')]({'plain':!![]});if(_0x30d440&&_0x30d440[_0x4458('0x1f')]){logger[_0x4458('0x20')](_0x4458('0x21'),_0x4458('0x22'),util['format'](_0x4458('0x23'),_0x107f1c['id'],_0x30d440[_0x4458('0x1f')]));if(_0x30d440[_0x4458('0x1c')]&&_0x30d440['Interactions'][_0x4458('0x24')]){_0x107f1c[_0x4458('0x25')]=_['omit'](_0x30d440[_0x4458('0x1c')][0x0],_0x4458('0x1d'));_0x107f1c['Contact']=_0x30d440[_0x4458('0x1c')][0x0][_0x4458('0x1d')];}var _0x102b5f={'method':'POST','uri':encodeURI(_0x30d440[_0x4458('0x1f')]),'json':!![],'resolveWithFullResponse':!![]};switch(_0x102b5f['method']){case _0x4458('0x26'):_0x102b5f['qs']=_0x107f1c;break;case'POST':_0x102b5f['body']=_0x107f1c;break;}return rp(_0x102b5f)[_0x4458('0x19')](function(_0x36a460){logger[_0x4458('0x20')](_0x4458('0x21'),_0x4458('0x22'),util[_0x4458('0x27')](_0x4458('0x28'),_0x107f1c['id'],_0x30d440[_0x4458('0x1f')]));return _0x215b2d[_0x4458('0x29')]({'read':!![]});})[_0x4458('0x2a')](function(_0x14df7b){logger['error'](_0x4458('0x21'),'afterCreate',util[_0x4458('0x2b')](_0x14df7b,{'showHidden':![],'depth':null}));_0x51da14();});}else{_0x51da14();}})['finally'](function(){_0x51da14();});}else{_0x51da14();}}},'charset':_0x4458('0x2c'),'collate':_0x4458('0x2d')});};
\ No newline at end of file
+var _0xc6ab=['CmContact','describe','OpenchannelAccount','find','Interactions','Contact','keys','replyUri','info','OpenchannelMessage,\x20%s,\x20%s','afterCreate','format','length','omit','POST','method','GET','Message\x20%d\x20forwarded\x20to\x20%s','inspect','finally','utf8mb4','lodash','util','../../config/logger','api','moment','./openchannelMessage.attributes','exports','define','openchannel_messages','get','direction','toLowerCase','out','isNil','UserId','OpenchannelInteraction','OpenchannelInteractionId','then','update','body','catch','error'];(function(_0x41400c,_0x5f532c){var _0xe15a64=function(_0x4eb758){while(--_0x4eb758){_0x41400c['push'](_0x41400c['shift']());}};_0xe15a64(++_0x5f532c);}(_0xc6ab,0x96));var _0xbc6a=function(_0xab594b,_0x4a8ee6){_0xab594b=_0xab594b-0x0;var _0x2b09ca=_0xc6ab[_0xab594b];return _0x2b09ca;};'use strict';var _=require(_0xbc6a('0x0'));var util=require(_0xbc6a('0x1'));var logger=require(_0xbc6a('0x2'))(_0xbc6a('0x3'));var moment=require(_0xbc6a('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0xbc6a('0x5'));module[_0xbc6a('0x6')]=function(_0x3808e0,_0x3f7109){return _0x3808e0[_0xbc6a('0x7')]('OpenchannelMessage',attributes,{'tableName':_0xbc6a('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x263f4b,_0x325592,_0x1b7a4c){var _0x2f7f5f=_0x3808e0['models'];var _0x4bb311=_0x263f4b[_0xbc6a('0x9')]({'plain':!![]});if(_0x4bb311[_0xbc6a('0xa')]['toLowerCase']()==='in'||_0x4bb311['direction'][_0xbc6a('0xb')]()===_0xbc6a('0xc')&&!_0x4bb311['secret']&&!_[_0xbc6a('0xd')](_0x4bb311[_0xbc6a('0xe')])){_0x2f7f5f[_0xbc6a('0xf')]['findOne']({'where':{'id':_0x4bb311[_0xbc6a('0x10')]}})[_0xbc6a('0x11')](function(_0x35b14f){if(_0x35b14f){_0x35b14f[_0xbc6a('0x12')]({'lastMsgAt':_0x4bb311['createdAt'],'lastMsgDirection':_0x4bb311['direction']['toLowerCase'](),'lastMsgBody':_0x4bb311[_0xbc6a('0x13')]});}})[_0xbc6a('0x14')](function(_0x48d94a){console[_0xbc6a('0x15')](_0x48d94a);});}if(_0x4bb311['direction']===_0xbc6a('0xc')&&!_0x4bb311['secret']){var _0x2c0fdf;_0x2f7f5f[_0xbc6a('0x16')][_0xbc6a('0x17')]()[_0xbc6a('0x11')](function(_0x44dc23){return _0x2f7f5f[_0xbc6a('0x18')][_0xbc6a('0x19')]({'where':{'id':_0x4bb311['OpenchannelAccountId']},'include':[{'model':_0x2f7f5f['OpenchannelInteraction'],'as':_0xbc6a('0x1a'),'where':{'id':_0x4bb311[_0xbc6a('0x10')]},'limit':0x1,'include':[{'model':_0x2f7f5f[_0xbc6a('0x16')],'as':_0xbc6a('0x1b'),'attributes':_[_0xbc6a('0x1c')](_0x44dc23)}]}]});})[_0xbc6a('0x11')](function(_0x4518df){_0x2c0fdf=_0x4518df[_0xbc6a('0x9')]({'plain':!![]});if(_0x2c0fdf&&_0x2c0fdf[_0xbc6a('0x1d')]){logger[_0xbc6a('0x1e')](_0xbc6a('0x1f'),_0xbc6a('0x20'),util[_0xbc6a('0x21')]('Forwarding\x20message\x20%d\x20to\x20%s',_0x4bb311['id'],_0x2c0fdf[_0xbc6a('0x1d')]));if(_0x2c0fdf['Interactions']&&_0x2c0fdf['Interactions'][_0xbc6a('0x22')]){_0x4bb311['Interaction']=_[_0xbc6a('0x23')](_0x2c0fdf['Interactions'][0x0],_0xbc6a('0x1b'));_0x4bb311['Contact']=_0x2c0fdf[_0xbc6a('0x1a')][0x0][_0xbc6a('0x1b')];}var _0x325592={'method':_0xbc6a('0x24'),'uri':encodeURI(_0x2c0fdf[_0xbc6a('0x1d')]),'json':!![],'resolveWithFullResponse':!![]};switch(_0x325592[_0xbc6a('0x25')]){case _0xbc6a('0x26'):_0x325592['qs']=_0x4bb311;break;case _0xbc6a('0x24'):_0x325592[_0xbc6a('0x13')]=_0x4bb311;break;}return rp(_0x325592)[_0xbc6a('0x11')](function(_0x4c7722){logger[_0xbc6a('0x1e')](_0xbc6a('0x1f'),_0xbc6a('0x20'),util[_0xbc6a('0x21')](_0xbc6a('0x27'),_0x4bb311['id'],_0x2c0fdf['replyUri']));return _0x263f4b[_0xbc6a('0x12')]({'read':!![]});})[_0xbc6a('0x14')](function(_0x3e1cc2){logger[_0xbc6a('0x15')](_0xbc6a('0x1f'),_0xbc6a('0x20'),util[_0xbc6a('0x28')](_0x3e1cc2,{'showHidden':![],'depth':null}));_0x1b7a4c();});}else{_0x1b7a4c();}})[_0xbc6a('0x29')](function(){_0x1b7a4c();});}else{_0x1b7a4c();}}},'charset':_0xbc6a('0x2a'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index 03250fb..68b04d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fc3=['../../config/logger','../../config/environment','jayson/promise','client','localhost','register','request','info','request\x20sent','debug','stringify','code','OpenchannelMessage,\x20%s,\x20%s','error','message','result','catch','CreateOpenchannelMessage','OpenchannelMessage','body','options','raw','then','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils'];(function(_0x384b64,_0x4f0784){var _0x3a8f2c=function(_0xc28196){while(--_0xc28196){_0x384b64['push'](_0x384b64['shift']());}};_0x3a8f2c(++_0x4f0784);}(_0x5fc3,0xa8));var _0x35fc=function(_0x2ecc65,_0xd75c48){_0x2ecc65=_0x2ecc65-0x0;var _0x103cc3=_0x5fc3[_0x2ecc65];return _0x103cc3;};'use strict';var _=require(_0x35fc('0x0'));var util=require(_0x35fc('0x1'));var moment=require('moment');var BPromise=require(_0x35fc('0x2'));var rs=require(_0x35fc('0x3'));var fs=require('fs');var db=require(_0x35fc('0x4'))['db'];var utils=require(_0x35fc('0x5'));var logger=require(_0x35fc('0x6'))('rpc');var config=require(_0x35fc('0x7'));var jayson=require(_0x35fc('0x8'));var client=jayson[_0x35fc('0x9')]['http']({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0x35fc('0xa'),'port':0x18eb});require('./openchannelMessage.socket')[_0x35fc('0xb')](socket);function respondWithRpcPromise(_0x27524f,_0xc72d93,_0x1e5f90){return new BPromise(function(_0x34ff19,_0xf9d3a6){return client[_0x35fc('0xc')](_0x27524f,_0x1e5f90)['then'](function(_0x1083a9){logger[_0x35fc('0xd')]('OpenchannelMessage,\x20%s,\x20%s',_0xc72d93,_0x35fc('0xe'));logger[_0x35fc('0xf')]('OpenchannelMessage,\x20%s,\x20%s,\x20%s',_0xc72d93,_0x35fc('0xe'),JSON[_0x35fc('0x10')](_0x1083a9));if(_0x1083a9['error']){if(_0x1083a9['error'][_0x35fc('0x11')]===0x1f4){logger['error'](_0x35fc('0x12'),_0xc72d93,_0x1083a9[_0x35fc('0x13')][_0x35fc('0x14')]);return _0xf9d3a6(_0x1083a9[_0x35fc('0x13')][_0x35fc('0x14')]);}logger['error']('OpenchannelMessage,\x20%s,\x20%s',_0xc72d93,_0x1083a9['error']['message']);return _0x34ff19(_0x1083a9[_0x35fc('0x13')][_0x35fc('0x14')]);}else{logger[_0x35fc('0xd')](_0x35fc('0x12'),_0xc72d93,_0x35fc('0xe'));_0x34ff19(_0x1083a9[_0x35fc('0x15')]['message']);}})[_0x35fc('0x16')](function(_0x45c8b7){logger['error'](_0x35fc('0x12'),_0xc72d93,_0x45c8b7);_0xf9d3a6(_0x45c8b7);});});}exports[_0x35fc('0x17')]=function(_0x2e513b){var _0x5f56c6=this;return new Promise(function(_0x1a86e9,_0x3c58ea){return db[_0x35fc('0x18')]['create'](_0x2e513b[_0x35fc('0x19')],{'raw':_0x2e513b[_0x35fc('0x1a')]?_0x2e513b[_0x35fc('0x1a')][_0x35fc('0x1b')]===undefined?!![]:![]:!![]})[_0x35fc('0x1c')](function(_0x21f1a9){logger[_0x35fc('0xd')](_0x35fc('0x17'),_0x2e513b);logger[_0x35fc('0xf')](_0x35fc('0x17'),_0x2e513b,JSON['stringify'](_0x21f1a9));_0x1a86e9(_0x21f1a9);})[_0x35fc('0x16')](function(_0xd5399f){logger[_0x35fc('0x13')](_0x35fc('0x17'),_0xd5399f[_0x35fc('0x14')],_0x2e513b);_0x3c58ea(_0x5f56c6['error'](0x1f4,_0xd5399f[_0x35fc('0x14')]));});});};
\ No newline at end of file
+var _0x5fc3=['../../config/logger','../../config/environment','jayson/promise','client','localhost','register','request','info','request\x20sent','debug','stringify','code','OpenchannelMessage,\x20%s,\x20%s','error','message','result','catch','CreateOpenchannelMessage','OpenchannelMessage','body','options','raw','then','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils'];(function(_0x126f42,_0x57f1ad){var _0x219119=function(_0xc6b727){while(--_0xc6b727){_0x126f42['push'](_0x126f42['shift']());}};_0x219119(++_0x57f1ad);}(_0x5fc3,0xa8));var _0x35fc=function(_0x5447aa,_0x3afc00){_0x5447aa=_0x5447aa-0x0;var _0xb21e53=_0x5fc3[_0x5447aa];return _0xb21e53;};'use strict';var _=require(_0x35fc('0x0'));var util=require(_0x35fc('0x1'));var moment=require('moment');var BPromise=require(_0x35fc('0x2'));var rs=require(_0x35fc('0x3'));var fs=require('fs');var db=require(_0x35fc('0x4'))['db'];var utils=require(_0x35fc('0x5'));var logger=require(_0x35fc('0x6'))('rpc');var config=require(_0x35fc('0x7'));var jayson=require(_0x35fc('0x8'));var client=jayson[_0x35fc('0x9')]['http']({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0x35fc('0xa'),'port':0x18eb});require('./openchannelMessage.socket')[_0x35fc('0xb')](socket);function respondWithRpcPromise(_0x27524f,_0xc72d93,_0x1e5f90){return new BPromise(function(_0x34ff19,_0xf9d3a6){return client[_0x35fc('0xc')](_0x27524f,_0x1e5f90)['then'](function(_0x1083a9){logger[_0x35fc('0xd')]('OpenchannelMessage,\x20%s,\x20%s',_0xc72d93,_0x35fc('0xe'));logger[_0x35fc('0xf')]('OpenchannelMessage,\x20%s,\x20%s,\x20%s',_0xc72d93,_0x35fc('0xe'),JSON[_0x35fc('0x10')](_0x1083a9));if(_0x1083a9['error']){if(_0x1083a9['error'][_0x35fc('0x11')]===0x1f4){logger['error'](_0x35fc('0x12'),_0xc72d93,_0x1083a9[_0x35fc('0x13')][_0x35fc('0x14')]);return _0xf9d3a6(_0x1083a9[_0x35fc('0x13')][_0x35fc('0x14')]);}logger['error']('OpenchannelMessage,\x20%s,\x20%s',_0xc72d93,_0x1083a9['error']['message']);return _0x34ff19(_0x1083a9[_0x35fc('0x13')][_0x35fc('0x14')]);}else{logger[_0x35fc('0xd')](_0x35fc('0x12'),_0xc72d93,_0x35fc('0xe'));_0x34ff19(_0x1083a9[_0x35fc('0x15')]['message']);}})[_0x35fc('0x16')](function(_0x45c8b7){logger['error'](_0x35fc('0x12'),_0xc72d93,_0x45c8b7);_0xf9d3a6(_0x45c8b7);});});}exports[_0x35fc('0x17')]=function(_0x2e513b){var _0x5f56c6=this;return new Promise(function(_0x1a86e9,_0x3c58ea){return db[_0x35fc('0x18')]['create'](_0x2e513b[_0x35fc('0x19')],{'raw':_0x2e513b[_0x35fc('0x1a')]?_0x2e513b[_0x35fc('0x1a')][_0x35fc('0x1b')]===undefined?!![]:![]:!![]})[_0x35fc('0x1c')](function(_0x21f1a9){logger[_0x35fc('0xd')](_0x35fc('0x17'),_0x2e513b);logger[_0x35fc('0xf')](_0x35fc('0x17'),_0x2e513b,JSON['stringify'](_0x21f1a9));_0x1a86e9(_0x21f1a9);})[_0x35fc('0x16')](function(_0xd5399f){logger[_0x35fc('0x13')](_0x35fc('0x17'),_0xd5399f[_0x35fc('0x14')],_0x2e513b);_0x3c58ea(_0x5f56c6['error'](0x1f4,_0xd5399f[_0x35fc('0x14')]));});});};
\ No newline at end of file
index 628f6be..576db92 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xae79=['removeListener','register','openchannelMessage:','./openchannelMessage.events','save','remove','update','emit'];(function(_0x5ef905,_0x564b87){var _0x367808=function(_0x14f487){while(--_0x14f487){_0x5ef905['push'](_0x5ef905['shift']());}};_0x367808(++_0x564b87);}(_0xae79,0x1d3));var _0x9ae7=function(_0x13326b,_0x39edb0){_0x13326b=_0x13326b-0x0;var _0x4c7462=_0xae79[_0x13326b];return _0x4c7462;};'use strict';var OpenchannelMessageEvents=require(_0x9ae7('0x0'));var events=[_0x9ae7('0x1'),_0x9ae7('0x2'),_0x9ae7('0x3')];function createListener(_0x1f75bc,_0x2cc556){return function(_0x26b6a7){_0x2cc556[_0x9ae7('0x4')](_0x1f75bc,_0x26b6a7);};}function removeListener(_0x988f5e,_0x27817e){return function(){OpenchannelMessageEvents[_0x9ae7('0x5')](_0x988f5e,_0x27817e);};}exports[_0x9ae7('0x6')]=function(_0x3e98cf){for(var _0x396863=0x0,_0x409d34=events['length'];_0x396863<_0x409d34;_0x396863++){var _0x2761c2=events[_0x396863];var _0x47774e=createListener(_0x9ae7('0x7')+_0x2761c2,_0x3e98cf);OpenchannelMessageEvents['on'](_0x2761c2,_0x47774e);}};
\ No newline at end of file
+var _0x938d=['./openchannelMessage.events','save','update','removeListener','length'];(function(_0x45d3b0,_0x41b1e8){var _0x2be121=function(_0x2adabd){while(--_0x2adabd){_0x45d3b0['push'](_0x45d3b0['shift']());}};_0x2be121(++_0x41b1e8);}(_0x938d,0x122));var _0xd938=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x938d[_0x3dd15e];return _0x231fd0;};'use strict';var OpenchannelMessageEvents=require(_0xd938('0x0'));var events=[_0xd938('0x1'),'remove',_0xd938('0x2')];function createListener(_0x29cf5f,_0x221132){return function(_0x5349c7){_0x221132['emit'](_0x29cf5f,_0x5349c7);};}function removeListener(_0xc9f24b,_0x429911){return function(){OpenchannelMessageEvents[_0xd938('0x3')](_0xc9f24b,_0x429911);};}exports['register']=function(_0x3a81d2){for(var _0xb5e113=0x0,_0x1ed46b=events[_0xd938('0x4')];_0xb5e113<_0x1ed46b;_0xb5e113++){var _0x678164=events[_0xb5e113];var _0x419e0b=createListener('openchannelMessage:'+_0x678164,_0x3a81d2);OpenchannelMessageEvents['on'](_0x678164,_0x419e0b);}};
\ No newline at end of file
index 4fac00c..645bd55 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4dd0=['exports','multer','path','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelQueue.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/members','getMembers','/:id/teams','getTeams','getAgents','post','create','/:id/users','put','update','delete','destroy','removeTeams','removeAgents'];(function(_0x153294,_0x5c83c7){var _0x22d12b=function(_0x96fb88){while(--_0x96fb88){_0x153294['push'](_0x153294['shift']());}};_0x22d12b(++_0x5c83c7);}(_0x4dd0,0x8d));var _0x04dd=function(_0x204d5b,_0x585e4f){_0x204d5b=_0x204d5b-0x0;var _0xbe3621=_0x4dd0[_0x204d5b];return _0xbe3621;};'use strict';var multer=require(_0x04dd('0x0'));var util=require('util');var path=require(_0x04dd('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0x04dd('0x2'));var interaction=require(_0x04dd('0x3'));var config=require(_0x04dd('0x4'));var controller=require(_0x04dd('0x5'));router[_0x04dd('0x6')]('/',auth[_0x04dd('0x7')](),controller[_0x04dd('0x8')]);router[_0x04dd('0x6')](_0x04dd('0x9'),auth[_0x04dd('0x7')](),controller[_0x04dd('0xa')]);router[_0x04dd('0x6')](_0x04dd('0xb'),auth[_0x04dd('0x7')](),controller[_0x04dd('0xc')]);router[_0x04dd('0x6')](_0x04dd('0xd'),auth[_0x04dd('0x7')](),controller[_0x04dd('0xe')]);router[_0x04dd('0x6')](_0x04dd('0xf'),auth[_0x04dd('0x7')](),controller[_0x04dd('0x10')]);router[_0x04dd('0x6')]('/:id/users',auth[_0x04dd('0x7')](),controller[_0x04dd('0x11')]);router[_0x04dd('0x12')]('/',auth['isAuthenticated'](),controller[_0x04dd('0x13')]);router[_0x04dd('0x12')]('/:id/teams',auth[_0x04dd('0x7')](),controller['addTeams']);router[_0x04dd('0x12')](_0x04dd('0x14'),auth['isAuthenticated'](),controller['addAgents']);router[_0x04dd('0x15')]('/:id',auth[_0x04dd('0x7')](),controller[_0x04dd('0x16')]);router[_0x04dd('0x17')](_0x04dd('0xb'),auth[_0x04dd('0x7')](),controller[_0x04dd('0x18')]);router[_0x04dd('0x17')](_0x04dd('0xf'),auth['isAuthenticated'](),controller[_0x04dd('0x19')]);router['delete']('/:id/users',auth[_0x04dd('0x7')](),controller[_0x04dd('0x1a')]);module[_0x04dd('0x1b')]=router;
\ No newline at end of file
+var _0x7c8f=['delete','destroy','removeTeams','removeAgents','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelQueue.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/members','getMembers','getTeams','/:id/users','getAgents','post','/:id/teams','addTeams','addAgents','put','update'];(function(_0x13e741,_0x5d3c24){var _0x3f8bb3=function(_0x4440a0){while(--_0x4440a0){_0x13e741['push'](_0x13e741['shift']());}};_0x3f8bb3(++_0x5d3c24);}(_0x7c8f,0x7c));var _0xf7c8=function(_0x3d79f1,_0x338923){_0x3d79f1=_0x3d79f1-0x0;var _0x43f78d=_0x7c8f[_0x3d79f1];return _0x43f78d;};'use strict';var multer=require(_0xf7c8('0x0'));var util=require('util');var path=require(_0xf7c8('0x1'));var express=require(_0xf7c8('0x2'));var router=express[_0xf7c8('0x3')]();var auth=require(_0xf7c8('0x4'));var interaction=require(_0xf7c8('0x5'));var config=require(_0xf7c8('0x6'));var controller=require(_0xf7c8('0x7'));router[_0xf7c8('0x8')]('/',auth[_0xf7c8('0x9')](),controller[_0xf7c8('0xa')]);router[_0xf7c8('0x8')](_0xf7c8('0xb'),auth[_0xf7c8('0x9')](),controller[_0xf7c8('0xc')]);router[_0xf7c8('0x8')](_0xf7c8('0xd'),auth[_0xf7c8('0x9')](),controller[_0xf7c8('0xe')]);router[_0xf7c8('0x8')](_0xf7c8('0xf'),auth[_0xf7c8('0x9')](),controller[_0xf7c8('0x10')]);router[_0xf7c8('0x8')]('/:id/teams',auth[_0xf7c8('0x9')](),controller[_0xf7c8('0x11')]);router['get'](_0xf7c8('0x12'),auth['isAuthenticated'](),controller[_0xf7c8('0x13')]);router[_0xf7c8('0x14')]('/',auth[_0xf7c8('0x9')](),controller['create']);router[_0xf7c8('0x14')](_0xf7c8('0x15'),auth[_0xf7c8('0x9')](),controller[_0xf7c8('0x16')]);router[_0xf7c8('0x14')](_0xf7c8('0x12'),auth[_0xf7c8('0x9')](),controller[_0xf7c8('0x17')]);router[_0xf7c8('0x18')](_0xf7c8('0xd'),auth[_0xf7c8('0x9')](),controller[_0xf7c8('0x19')]);router[_0xf7c8('0x1a')]('/:id',auth[_0xf7c8('0x9')](),controller[_0xf7c8('0x1b')]);router['delete'](_0xf7c8('0x15'),auth['isAuthenticated'](),controller[_0xf7c8('0x1c')]);router[_0xf7c8('0x1a')](_0xf7c8('0x12'),auth['isAuthenticated'](),controller[_0xf7c8('0x1d')]);module['exports']=router;
\ No newline at end of file
index 91468bf..3d4a914 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c64=['rrmemory','roundrobin','exports','STRING','ENUM'];(function(_0x2c0754,_0x59f325){var _0x42e4f6=function(_0x1ac3f2){while(--_0x1ac3f2){_0x2c0754['push'](_0x2c0754['shift']());}};_0x42e4f6(++_0x59f325);}(_0x4c64,0xe8));var _0x44c6=function(_0xb86c4e,_0x3713bc){_0xb86c4e=_0xb86c4e-0x0;var _0x4cc2e5=_0x4c64[_0xb86c4e];return _0x4cc2e5;};'use strict';var Sequelize=require('sequelize');module[_0x44c6('0x0')]={'name':{'type':Sequelize[_0x44c6('0x1')],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x44c6('0x1')]},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x44c6('0x2')](_0x44c6('0x3'),'beepall',_0x44c6('0x4'))}};
\ No newline at end of file
+var _0x22ac=['name','INTEGER','ENUM','beepall','STRING'];(function(_0x3b6df4,_0x572bf7){var _0x437bcd=function(_0x514280){while(--_0x514280){_0x3b6df4['push'](_0x3b6df4['shift']());}};_0x437bcd(++_0x572bf7);}(_0x22ac,0x171));var _0xc22a=function(_0x18d36f,_0x31b65f){_0x18d36f=_0x18d36f-0x0;var _0x10034d=_0x22ac[_0x18d36f];return _0x10034d;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0xc22a('0x0')],'unique':_0xc22a('0x1'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xc22a('0x0')]},'timeout':{'type':Sequelize[_0xc22a('0x2')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xc22a('0x3')]('rrmemory',_0xc22a('0x4'),'roundrobin')}};
\ No newline at end of file
index cfdfc0f..2aa7691 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x83f1=['options','count','includeAll','include','show','params','catch','create','body','find','describe','getMembers','findOne','get','UserOpenchannelQueue','rawAttributes','findAll','User','findAndCountAll','UserId','agent','updatedAt','rows','%s/%s','openchannelPause','createdAt','getTeams','Team','ids','Agents','union','addAgents','penalty','addTeams','removeTeams','removeAgents','omit','spread','emit','userOpenchannelQueue:save','isArray','userOpenchannelQueue:remove','getAgents','fast-json-patch','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','socket.io-emitter','localhost','./openchannelQueue.socket','register','sendStatus','end','json','offset','set','Content-Range','apply','reject','update','then','destroy','status','error','stack','name','send','index','OpenchannelQueue','model','keys','dateStart','query','dateEnd','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','filters','add','day','filter','where','map','merge'];(function(_0xa58f4e,_0x2a4aa2){var _0x41ff72=function(_0x305f8c){while(--_0x305f8c){_0xa58f4e['push'](_0xa58f4e['shift']());}};_0x41ff72(++_0x2a4aa2);}(_0x83f1,0x95));var _0x183f=function(_0x4dcd44,_0x4b18eb){_0x4dcd44=_0x4dcd44-0x0;var _0x496f40=_0x83f1[_0x4dcd44];return _0x496f40;};'use strict';var jsonpatch=require(_0x183f('0x0'));var rp=require('request-promise');var moment=require(_0x183f('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x183f('0x2'));var util=require(_0x183f('0x3'));var path=require(_0x183f('0x4'));var sox=require(_0x183f('0x5'));var csv=require(_0x183f('0x6'));var ejs=require(_0x183f('0x7'));var fs=require('fs');var _=require(_0x183f('0x8'));var squel=require(_0x183f('0x9'));var crypto=require(_0x183f('0xa'));var jsforce=require(_0x183f('0xb'));var deskjs=require(_0x183f('0xc'));var toCsv=require('to-csv');var querystring=require(_0x183f('0xd'));var Papa=require(_0x183f('0xe'));var qs=require(_0x183f('0xf'));var logger=require('../../config/logger')(_0x183f('0x10'));var utils=require(_0x183f('0x11'));var config=require(_0x183f('0x12'));var db=require('../../mysqldb')['db'];var socket=require(_0x183f('0x13'))({'host':_0x183f('0x14'),'port':0x18eb});require(_0x183f('0x15'))[_0x183f('0x16')](socket);function respondWithStatusCode(_0xaefe23,_0x1f5da4){_0x1f5da4=_0x1f5da4||0xcc;return function(_0x2fd9e3){if(_0x2fd9e3){return _0xaefe23[_0x183f('0x17')](_0x1f5da4);}return _0xaefe23['status'](_0x1f5da4)[_0x183f('0x18')]();};}function respondWithResult(_0x1423b7,_0x355e58){_0x355e58=_0x355e58||0xc8;return function(_0x165c48){if(_0x165c48){return _0x1423b7['status'](_0x355e58)[_0x183f('0x19')](_0x165c48);}};}function respondWithFilteredResult(_0x404a62,_0x87fbea){return function(_0x3bace3){if(_0x3bace3){var _0x5413ac=_0x3bace3['count'],_0x41e88c=_0x87fbea[_0x183f('0x1a')],_0x438600=_0x87fbea[_0x183f('0x1a')]+_0x87fbea['limit'],_0x5bc108;if(_0x438600>=_0x5413ac){_0x438600=_0x5413ac;_0x5bc108=0xc8;}else{_0x5bc108=0xce;}_0x404a62['status'](_0x5bc108);return _0x404a62[_0x183f('0x1b')](_0x183f('0x1c'),_0x41e88c+'-'+_0x438600+'/'+_0x5413ac)[_0x183f('0x19')](_0x3bace3);}return null;};}function patchUpdates(_0x2225c1){return function(_0x62dc2e){try{jsonpatch[_0x183f('0x1d')](_0x62dc2e,_0x2225c1,!![]);}catch(_0x5dfecd){return BPromise[_0x183f('0x1e')](_0x5dfecd);}return _0x62dc2e['save']();};}function saveUpdates(_0x1482c4,_0x251071){return function(_0x49f96a){if(_0x49f96a){return _0x49f96a[_0x183f('0x1f')](_0x1482c4)[_0x183f('0x20')](function(_0x45ce23){return _0x45ce23;});}return null;};}function removeEntity(_0x1609e7,_0x41c73e){return function(_0x1dc09c){if(_0x1dc09c){return _0x1dc09c[_0x183f('0x21')]()[_0x183f('0x20')](function(){_0x1609e7[_0x183f('0x22')](0xcc)[_0x183f('0x18')]();});}};}function handleEntityNotFound(_0x4eac76,_0x4ec8fa){return function(_0x315cc5){if(!_0x315cc5){_0x4eac76[_0x183f('0x17')](0x194);}return _0x315cc5;};}function handleError(_0x34fe73,_0x4d8e9f){_0x4d8e9f=_0x4d8e9f||0x1f4;return function(_0x45ff66){logger[_0x183f('0x23')](_0x45ff66[_0x183f('0x24')]);if(_0x45ff66['name']){delete _0x45ff66[_0x183f('0x25')];}_0x34fe73[_0x183f('0x22')](_0x4d8e9f)[_0x183f('0x26')](_0x45ff66);};}exports[_0x183f('0x27')]=function(_0x51df2d,_0x4e1d63){var _0x21ae9f={},_0x4aecf6={},_0x17a918={'count':0x0,'rows':[]};var _0x176d74=db[_0x183f('0x28')]['rawAttributes'];_0x4aecf6[_0x183f('0x29')]=_[_0x183f('0x2a')](_0x176d74);var _0xf7e190={'dateStart':_0x51df2d['query'][_0x183f('0x2b')],'dateEnd':_0x51df2d['query']['dateEnd']};delete _0x51df2d[_0x183f('0x2c')][_0x183f('0x2b')];delete _0x51df2d[_0x183f('0x2c')][_0x183f('0x2d')];_0x4aecf6[_0x183f('0x2c')]=_[_0x183f('0x2a')](_0x51df2d[_0x183f('0x2c')]);_0x4aecf6['filters']=_[_0x183f('0x2e')](_0x4aecf6[_0x183f('0x29')],_0x4aecf6[_0x183f('0x2c')]);_0x21ae9f[_0x183f('0x2f')]=_['intersection'](_0x4aecf6[_0x183f('0x29')],qs[_0x183f('0x30')](_0x51df2d[_0x183f('0x2c')][_0x183f('0x30')]));_0x21ae9f['attributes']=_0x21ae9f[_0x183f('0x2f')][_0x183f('0x31')]?_0x21ae9f[_0x183f('0x2f')]:_0x4aecf6[_0x183f('0x29')];if(!_0x51df2d['query'][_0x183f('0x32')](_0x183f('0x33'))){_0x21ae9f[_0x183f('0x34')]=qs[_0x183f('0x34')](_0x51df2d[_0x183f('0x2c')]['limit']);_0x21ae9f[_0x183f('0x1a')]=qs[_0x183f('0x1a')](_0x51df2d[_0x183f('0x2c')][_0x183f('0x1a')]);}_0x21ae9f[_0x183f('0x35')]=qs[_0x183f('0x36')](_0x51df2d[_0x183f('0x2c')][_0x183f('0x36')]);_0x21ae9f['where']=qs['filters'](_[_0x183f('0x37')](_0x51df2d[_0x183f('0x2c')],_0x4aecf6[_0x183f('0x38')]));if(_0xf7e190[_0x183f('0x2b')]){if(_0xf7e190[_0x183f('0x2d')]){_0xf7e190['dateEnd']=moment(_0xf7e190[_0x183f('0x2d')])[_0x183f('0x39')](0x1,_0x183f('0x3a'));}else{_0xf7e190[_0x183f('0x2d')]=moment(_0xf7e190[_0x183f('0x2b')])[_0x183f('0x39')](0x1,_0x183f('0x3a'));}_['merge'](_0x21ae9f['where'],{'createdAt':{'$gte':_0xf7e190[_0x183f('0x2b')],'$lte':_0xf7e190[_0x183f('0x2d')]}});}if(_0x51df2d[_0x183f('0x2c')][_0x183f('0x3b')]){_0x21ae9f['where']=_['merge'](_0x21ae9f[_0x183f('0x3c')],{'$or':_[_0x183f('0x3d')](_0x21ae9f[_0x183f('0x2f')],function(_0x39e2cf){var _0x4a2542={};_0x4a2542[_0x39e2cf]={'$like':'%'+_0x51df2d[_0x183f('0x2c')][_0x183f('0x3b')]+'%'};return _0x4a2542;})});}_0x21ae9f=_[_0x183f('0x3e')]({},_0x21ae9f,_0x51df2d[_0x183f('0x3f')]);var _0x912977={'where':_0x21ae9f['where']};return db[_0x183f('0x28')][_0x183f('0x40')](_0x912977)['then'](function(_0xed347){_0x17a918[_0x183f('0x40')]=_0xed347;if(_0x51df2d[_0x183f('0x2c')][_0x183f('0x41')]){_0x21ae9f[_0x183f('0x42')]=[{'all':!![]}];}return db['OpenchannelQueue']['findAll'](_0x21ae9f);})[_0x183f('0x20')](function(_0x4b7170){_0x17a918['rows']=_0x4b7170;return _0x17a918;})['then'](respondWithFilteredResult(_0x4e1d63,_0x21ae9f))['catch'](handleError(_0x4e1d63,null));};exports[_0x183f('0x43')]=function(_0x2288cb,_0x461d93){var _0x5cc4af={'raw':!![],'where':{'id':_0x2288cb[_0x183f('0x44')]['id']}},_0x387065={};_0x387065[_0x183f('0x29')]=_[_0x183f('0x2a')](db[_0x183f('0x28')]['rawAttributes']);_0x387065[_0x183f('0x2c')]=_[_0x183f('0x2a')](_0x2288cb[_0x183f('0x2c')]);_0x387065[_0x183f('0x38')]=_[_0x183f('0x2e')](_0x387065[_0x183f('0x29')],_0x387065['query']);_0x5cc4af[_0x183f('0x2f')]=_[_0x183f('0x2e')](_0x387065['model'],qs[_0x183f('0x30')](_0x2288cb[_0x183f('0x2c')]['fields']));_0x5cc4af[_0x183f('0x2f')]=_0x5cc4af[_0x183f('0x2f')][_0x183f('0x31')]?_0x5cc4af['attributes']:_0x387065[_0x183f('0x29')];if(_0x2288cb['query'][_0x183f('0x41')]){_0x5cc4af[_0x183f('0x42')]=[{'all':!![]}];}_0x5cc4af=_[_0x183f('0x3e')]({},_0x5cc4af,_0x2288cb['options']);return db[_0x183f('0x28')]['find'](_0x5cc4af)[_0x183f('0x20')](handleEntityNotFound(_0x461d93,null))[_0x183f('0x20')](respondWithResult(_0x461d93,null))[_0x183f('0x45')](handleError(_0x461d93,null));};exports[_0x183f('0x46')]=function(_0x1648a3,_0x564eaa){return db[_0x183f('0x28')][_0x183f('0x46')](_0x1648a3[_0x183f('0x47')],{})[_0x183f('0x20')](respondWithResult(_0x564eaa,0xc9))[_0x183f('0x45')](handleError(_0x564eaa,null));};exports['update']=function(_0x12fb1b,_0x181e25){if(_0x12fb1b[_0x183f('0x47')]['id']){delete _0x12fb1b[_0x183f('0x47')]['id'];}return db[_0x183f('0x28')]['find']({'where':{'id':_0x12fb1b['params']['id']}})[_0x183f('0x20')](handleEntityNotFound(_0x181e25,null))['then'](saveUpdates(_0x12fb1b[_0x183f('0x47')],null))[_0x183f('0x20')](respondWithResult(_0x181e25,null))[_0x183f('0x45')](handleError(_0x181e25,null));};exports[_0x183f('0x21')]=function(_0x5d26c1,_0x32a7d0){return db['OpenchannelQueue'][_0x183f('0x48')]({'where':{'id':_0x5d26c1[_0x183f('0x44')]['id']}})['then'](handleEntityNotFound(_0x32a7d0,null))[_0x183f('0x20')](removeEntity(_0x32a7d0,null))[_0x183f('0x45')](handleError(_0x32a7d0,null));};exports[_0x183f('0x49')]=function(_0x54df18,_0x4a5a50){return db['OpenchannelQueue'][_0x183f('0x49')]()[_0x183f('0x20')](respondWithResult(_0x4a5a50,null))[_0x183f('0x45')](handleError(_0x4a5a50,null));};exports[_0x183f('0x4a')]=function(_0x4c8ebd,_0x54e608,_0x1714a6){var _0x2fb0da={'raw':!![],'where':{}},_0x576612={},_0x5cb447;return db['OpenchannelQueue'][_0x183f('0x4b')]({'where':{'id':_0x4c8ebd[_0x183f('0x44')]['id']}})['then'](handleEntityNotFound(_0x54e608,null))[_0x183f('0x20')](function(_0x805090){if(_0x805090){_0x5cb447=_0x805090[_0x183f('0x4c')]({'plain':!![]});_0x576612[_0x183f('0x29')]=_[_0x183f('0x2a')](db[_0x183f('0x4d')][_0x183f('0x4e')]);_0x576612[_0x183f('0x2c')]=_[_0x183f('0x2a')](_0x4c8ebd[_0x183f('0x2c')]);_0x576612[_0x183f('0x38')]=_[_0x183f('0x2e')](_0x576612[_0x183f('0x29')],_0x576612['query']);_0x2fb0da[_0x183f('0x2f')]=_[_0x183f('0x2e')](_0x576612['model'],qs[_0x183f('0x30')](_0x4c8ebd[_0x183f('0x2c')][_0x183f('0x30')]));_0x2fb0da['attributes']=_0x2fb0da[_0x183f('0x2f')]['length']?_0x2fb0da[_0x183f('0x2f')]:_0x576612[_0x183f('0x29')];if(!_0x4c8ebd['query'][_0x183f('0x32')]('nolimit')){_0x2fb0da[_0x183f('0x34')]=qs[_0x183f('0x34')](_0x4c8ebd['query'][_0x183f('0x34')]);_0x2fb0da[_0x183f('0x1a')]=qs[_0x183f('0x1a')](_0x4c8ebd[_0x183f('0x2c')][_0x183f('0x1a')]);}_0x2fb0da[_0x183f('0x35')]=qs[_0x183f('0x36')](_0x4c8ebd['query']['sort']);_0x2fb0da[_0x183f('0x3c')]=qs[_0x183f('0x38')](_[_0x183f('0x37')](_0x4c8ebd['query'],_0x576612['filters']));_0x2fb0da[_0x183f('0x3c')]['OpenchannelQueueId']=_0x805090['id'];if(_0x4c8ebd[_0x183f('0x2c')][_0x183f('0x3b')]){_0x2fb0da[_0x183f('0x3c')]=_['merge'](_0x2fb0da[_0x183f('0x3c')],{'$or':_[_0x183f('0x3d')](_0x2fb0da['attributes'],function(_0x138f95){var _0x308981={};_0x308981[_0x138f95]={'$like':'%'+_0x4c8ebd[_0x183f('0x2c')]['filter']+'%'};return _0x308981;})});}_0x2fb0da=_[_0x183f('0x3e')]({},_0x2fb0da,_0x4c8ebd[_0x183f('0x3f')]);return db[_0x183f('0x4d')][_0x183f('0x4f')](_0x2fb0da);}})[_0x183f('0x20')](function(_0x43f470){if(_0x43f470){return db[_0x183f('0x50')][_0x183f('0x51')]({'where':{'id':_[_0x183f('0x3d')](_0x43f470,_0x183f('0x52')),'role':_0x183f('0x53')},'attributes':['id','name','openchannelPause',_0x183f('0x54'),'createdAt']});}})[_0x183f('0x20')](function(_0x16a763){if(_0x16a763){return{'count':_0x16a763['count'],'rows':_['map'](_0x16a763[_0x183f('0x55')],function(_0x47859d){return{'membername':_0x47859d[_0x183f('0x25')],'UserId':_0x47859d['id'],'queue_name':_0x5cb447[_0x183f('0x25')],'OpenchannelQueueId':_0x5cb447['id'],'interface':util['format'](_0x183f('0x56'),'SIP',_0x47859d[_0x183f('0x25')]),'penalty':0x0,'paused':_0x47859d[_0x183f('0x57')],'createdAt':_0x47859d[_0x183f('0x58')],'updatedAt':_0x47859d[_0x183f('0x54')]};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x54e608,_0x2fb0da))[_0x183f('0x45')](handleError(_0x54e608,null));};exports['getTeams']=function(_0x48e930,_0x5828e8,_0x5709cb){var _0x4edf45={};var _0x53bd43={};var _0xc7f9aa;var _0xea2339;return db['OpenchannelQueue'][_0x183f('0x4b')]({'where':{'id':_0x48e930[_0x183f('0x44')]['id']}})['then'](handleEntityNotFound(_0x5828e8,null))['then'](function(_0x325b44){if(_0x325b44){_0xc7f9aa=_0x325b44;_0x53bd43[_0x183f('0x29')]=_[_0x183f('0x2a')](db['Team']['rawAttributes']);_0x53bd43[_0x183f('0x2c')]=_[_0x183f('0x2a')](_0x48e930[_0x183f('0x2c')]);_0x53bd43[_0x183f('0x38')]=_[_0x183f('0x2e')](_0x53bd43[_0x183f('0x29')],_0x53bd43[_0x183f('0x2c')]);_0x4edf45['attributes']=_[_0x183f('0x2e')](_0x53bd43[_0x183f('0x29')],qs[_0x183f('0x30')](_0x48e930[_0x183f('0x2c')][_0x183f('0x30')]));_0x4edf45[_0x183f('0x2f')]=_0x4edf45[_0x183f('0x2f')][_0x183f('0x31')]?_0x4edf45[_0x183f('0x2f')]:_0x53bd43[_0x183f('0x29')];_0x4edf45[_0x183f('0x35')]=qs[_0x183f('0x36')](_0x48e930[_0x183f('0x2c')]['sort']);_0x4edf45[_0x183f('0x3c')]=qs['filters'](_[_0x183f('0x37')](_0x48e930[_0x183f('0x2c')],_0x53bd43[_0x183f('0x38')]));if(_0x48e930[_0x183f('0x2c')][_0x183f('0x3b')]){_0x4edf45[_0x183f('0x3c')]=_[_0x183f('0x3e')](_0x4edf45[_0x183f('0x3c')],{'$or':_['map'](_0x4edf45[_0x183f('0x2f')],function(_0x1fbdcd){var _0x1f5784={};_0x1f5784[_0x1fbdcd]={'$like':'%'+_0x48e930['query'][_0x183f('0x3b')]+'%'};return _0x1f5784;})});}_0x4edf45=_['merge']({},_0x4edf45,_0x48e930['options']);return _0xc7f9aa[_0x183f('0x59')](_0x4edf45);}})[_0x183f('0x20')](function(_0x578e4f){if(_0x578e4f){_0xea2339=_0x578e4f[_0x183f('0x31')];if(!_0x48e930[_0x183f('0x2c')][_0x183f('0x32')]('nolimit')){_0x4edf45[_0x183f('0x34')]=qs['limit'](_0x48e930[_0x183f('0x2c')][_0x183f('0x34')]);_0x4edf45['offset']=qs[_0x183f('0x1a')](_0x48e930[_0x183f('0x2c')][_0x183f('0x1a')]);}return _0xc7f9aa[_0x183f('0x59')](_0x4edf45);}})['then'](function(_0x593c5c){if(_0x593c5c){return _0x593c5c?{'count':_0xea2339,'rows':_0x593c5c}:null;}})[_0x183f('0x20')](respondWithResult(_0x5828e8,null))[_0x183f('0x45')](handleError(_0x5828e8,null));};exports['addTeams']=function(_0x49fd14,_0x151e92,_0x4da3cc){var _0x2cfcea=[];var _0x48494a;return db[_0x183f('0x5a')][_0x183f('0x4f')]({'where':{'id':_0x49fd14['body'][_0x183f('0x5b')]},'attributes':['id'],'include':[{'model':db[_0x183f('0x50')],'as':_0x183f('0x5c'),'attributes':['id'],'raw':!![]}]})[_0x183f('0x20')](function(_0x3ece7b){if(_0x3ece7b){for(var _0x552462=0x0;_0x552462<_0x3ece7b['length'];_0x552462+=0x1){for(var _0x24bac9=0x0;_0x24bac9<_0x3ece7b[_0x552462][_0x183f('0x5c')][_0x183f('0x31')];_0x24bac9+=0x1){_0x2cfcea=_[_0x183f('0x5d')](_0x2cfcea,[_0x3ece7b[_0x552462][_0x183f('0x5c')][_0x24bac9]['id']]);}}return _0x2cfcea;}})[_0x183f('0x20')](function(_0x26f0f5){if(_0x26f0f5){return db['OpenchannelQueue']['find']({'where':{'id':_0x49fd14['params']['id']}});}})[_0x183f('0x20')](function(_0x595e1c){if(_0x595e1c){_0x48494a=_0x595e1c;return _0x48494a[_0x183f('0x5e')](_0x2cfcea,{'penalty':_0x49fd14['body'][_0x183f('0x5f')]});}})[_0x183f('0x20')](function(_0xefa3ce){if(_0xefa3ce){return _0x48494a[_0x183f('0x60')](_0x49fd14[_0x183f('0x47')]['ids']);}})['then'](handleEntityNotFound(_0x151e92,null))[_0x183f('0x20')](respondWithStatusCode(_0x151e92,null))[_0x183f('0x45')](handleError(_0x151e92,null));};exports[_0x183f('0x61')]=function(_0x4ac488,_0x300cfc,_0x134320){var _0x302f85=[];var _0x3b3996;return db[_0x183f('0x5a')][_0x183f('0x4f')]({'where':{'id':_0x4ac488[_0x183f('0x2c')][_0x183f('0x5b')]},'attributes':['id'],'include':[{'model':db[_0x183f('0x50')],'as':_0x183f('0x5c'),'attributes':['id'],'raw':!![]}]})[_0x183f('0x20')](function(_0x91cab3){if(_0x91cab3){for(var _0x50d557=0x0;_0x50d557<_0x91cab3[_0x183f('0x31')];_0x50d557+=0x1){for(var _0x4f222b=0x0;_0x4f222b<_0x91cab3[_0x50d557][_0x183f('0x5c')][_0x183f('0x31')];_0x4f222b+=0x1){_0x302f85=_['union'](_0x302f85,[_0x91cab3[_0x50d557][_0x183f('0x5c')][_0x4f222b]['id']]);}}return _0x302f85;}})['then'](function(_0x59251b){if(_0x59251b){return db[_0x183f('0x28')][_0x183f('0x48')]({'where':{'id':_0x4ac488[_0x183f('0x44')]['id']}});}})[_0x183f('0x20')](function(_0x39e7da){if(_0x39e7da){_0x3b3996=_0x39e7da;return _0x3b3996[_0x183f('0x62')](_0x302f85);}})[_0x183f('0x20')](function(_0x2f04ba){if(_0x3b3996){return _0x3b3996[_0x183f('0x61')](_0x4ac488['query'][_0x183f('0x5b')]);}})[_0x183f('0x20')](handleEntityNotFound(_0x300cfc,null))[_0x183f('0x20')](respondWithStatusCode(_0x300cfc,null))[_0x183f('0x45')](handleError(_0x300cfc,null));};exports[_0x183f('0x5e')]=function(_0x359792,_0x238e8a,_0x3b2c6e){return db[_0x183f('0x28')][_0x183f('0x48')]({'where':{'id':_0x359792['params']['id']}})[_0x183f('0x20')](handleEntityNotFound(_0x238e8a,null))[_0x183f('0x20')](function(_0xd5aad1){if(_0xd5aad1){return _0xd5aad1[_0x183f('0x5e')](_0x359792[_0x183f('0x47')][_0x183f('0x5b')],_[_0x183f('0x63')](_0x359792[_0x183f('0x47')],[_0x183f('0x5b'),'id'])||{})[_0x183f('0x64')](function(_0x831e5e){for(var _0x1f7e58=0x0;_0x1f7e58<_0x359792[_0x183f('0x47')][_0x183f('0x5b')]['length'];_0x1f7e58+=0x1){socket[_0x183f('0x65')](_0x183f('0x66'),{'UserId':_0x359792['body']['ids'][_0x1f7e58],'OpenchannelQueueId':_0x359792['params']['id']});}return _0x831e5e;});}})[_0x183f('0x20')](respondWithResult(_0x238e8a,null))[_0x183f('0x45')](handleError(_0x238e8a,null));};exports[_0x183f('0x62')]=function(_0x47d95e,_0x2ca0ca,_0x2b19b9){var _0x20f739;return db['OpenchannelQueue']['find']({'where':{'id':_0x47d95e[_0x183f('0x44')]['id']}})['then'](handleEntityNotFound(_0x2ca0ca,null))[_0x183f('0x20')](function(_0x502c92){if(_0x502c92){return _0x502c92['removeAgents'](_0x47d95e['query'][_0x183f('0x5b')])[_0x183f('0x20')](function(_0x12d39b){if(_[_0x183f('0x67')](_0x47d95e[_0x183f('0x2c')][_0x183f('0x5b')])){for(var _0x4d482a=0x0;_0x4d482a<_0x47d95e[_0x183f('0x2c')][_0x183f('0x5b')][_0x183f('0x31')];_0x4d482a+=0x1){socket['emit'](_0x183f('0x68'),{'UserId':_0x47d95e[_0x183f('0x2c')][_0x183f('0x5b')][_0x4d482a],'OpenchannelQueueId':_0x47d95e[_0x183f('0x44')]['id']});}}else{socket[_0x183f('0x65')](_0x183f('0x68'),{'UserId':_0x47d95e[_0x183f('0x2c')][_0x183f('0x5b')],'OpenchannelQueueId':_0x47d95e[_0x183f('0x44')]['id']});}});}})[_0x183f('0x20')](respondWithStatusCode(_0x2ca0ca,null))[_0x183f('0x45')](handleError(_0x2ca0ca,null));};exports[_0x183f('0x69')]=function(_0x1d7f9b,_0x3aff8b,_0x115b6d){var _0x515406={};var _0x1e65e4={};var _0x5f31d8;var _0x32c5b0;return db[_0x183f('0x28')]['findOne']({'where':{'id':_0x1d7f9b['params']['id']}})[_0x183f('0x20')](handleEntityNotFound(_0x3aff8b,null))[_0x183f('0x20')](function(_0x1cfb43){if(_0x1cfb43){_0x5f31d8=_0x1cfb43;_0x1e65e4[_0x183f('0x29')]=_[_0x183f('0x2a')](db[_0x183f('0x50')][_0x183f('0x4e')]);_0x1e65e4[_0x183f('0x2c')]=_['keys'](_0x1d7f9b[_0x183f('0x2c')]);_0x1e65e4[_0x183f('0x38')]=_['intersection'](_0x1e65e4['model'],_0x1e65e4['query']);_0x515406[_0x183f('0x2f')]=_[_0x183f('0x2e')](_0x1e65e4[_0x183f('0x29')],qs[_0x183f('0x30')](_0x1d7f9b[_0x183f('0x2c')][_0x183f('0x30')]));_0x515406['attributes']=_0x515406[_0x183f('0x2f')][_0x183f('0x31')]?_0x515406[_0x183f('0x2f')]:_0x1e65e4['model'];_0x515406[_0x183f('0x35')]=qs[_0x183f('0x36')](_0x1d7f9b['query']['sort']);_0x515406[_0x183f('0x3c')]=qs['filters'](_[_0x183f('0x37')](_0x1d7f9b['query'],_0x1e65e4['filters']));if(_0x1d7f9b['query']['filter']){_0x515406['where']=_['merge'](_0x515406[_0x183f('0x3c')],{'$or':_['map'](_0x515406[_0x183f('0x2f')],function(_0x6d3d8b){var _0x4fba71={};_0x4fba71[_0x6d3d8b]={'$like':'%'+_0x1d7f9b[_0x183f('0x2c')][_0x183f('0x3b')]+'%'};return _0x4fba71;})});}_0x515406=_['merge']({},_0x515406,_0x1d7f9b[_0x183f('0x3f')]);return _0x5f31d8[_0x183f('0x69')](_0x515406);}})[_0x183f('0x20')](function(_0x747f4f){if(_0x747f4f){_0x32c5b0=_0x747f4f[_0x183f('0x31')];if(!_0x1d7f9b[_0x183f('0x2c')][_0x183f('0x32')](_0x183f('0x33'))){_0x515406['limit']=qs[_0x183f('0x34')](_0x1d7f9b[_0x183f('0x2c')]['limit']);_0x515406['offset']=qs[_0x183f('0x1a')](_0x1d7f9b[_0x183f('0x2c')][_0x183f('0x1a')]);}return _0x5f31d8[_0x183f('0x69')](_0x515406);}})[_0x183f('0x20')](function(_0x5c2b59){if(_0x5c2b59){return _0x5c2b59?{'count':_0x32c5b0,'rows':_0x5c2b59}:null;}})[_0x183f('0x20')](respondWithResult(_0x3aff8b,null))['catch'](handleError(_0x3aff8b,null));};
\ No newline at end of file
+var _0x77b3=['../../config/environment','socket.io-emitter','localhost','sendStatus','status','end','json','count','limit','apply','reject','save','update','then','destroy','error','stack','name','index','OpenchannelQueue','rawAttributes','model','keys','dateStart','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','offset','order','where','pick','filters','dateEnd','add','day','merge','filter','map','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','describe','getMembers','findOne','get','UserOpenchannelQueue','sort','User','findAndCountAll','updatedAt','SIP','openchannelPause','createdAt','getTeams','addTeams','Team','ids','Agents','union','addAgents','penalty','removeTeams','removeAgents','omit','spread','emit','userOpenchannelQueue:save','isArray','userOpenchannelQueue:remove','getAgents','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','api','../../config/utils'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x77b3,0x1e2));var _0x377b=function(_0x11a8e7,_0x3f40c5){_0x11a8e7=_0x11a8e7-0x0;var _0x105c88=_0x77b3[_0x11a8e7];return _0x105c88;};'use strict';var jsonpatch=require(_0x377b('0x0'));var rp=require(_0x377b('0x1'));var moment=require(_0x377b('0x2'));var BPromise=require(_0x377b('0x3'));var Mustache=require(_0x377b('0x4'));var util=require(_0x377b('0x5'));var path=require(_0x377b('0x6'));var sox=require(_0x377b('0x7'));var csv=require('to-csv');var ejs=require(_0x377b('0x8'));var fs=require('fs');var _=require(_0x377b('0x9'));var squel=require(_0x377b('0xa'));var crypto=require(_0x377b('0xb'));var jsforce=require(_0x377b('0xc'));var deskjs=require(_0x377b('0xd'));var toCsv=require('to-csv');var querystring=require(_0x377b('0xe'));var Papa=require('papaparse');var qs=require(_0x377b('0xf'));var logger=require('../../config/logger')(_0x377b('0x10'));var utils=require(_0x377b('0x11'));var config=require(_0x377b('0x12'));var db=require('../../mysqldb')['db'];var socket=require(_0x377b('0x13'))({'host':_0x377b('0x14'),'port':0x18eb});require('./openchannelQueue.socket')['register'](socket);function respondWithStatusCode(_0x5073dd,_0x326e16){_0x326e16=_0x326e16||0xcc;return function(_0x6802b2){if(_0x6802b2){return _0x5073dd[_0x377b('0x15')](_0x326e16);}return _0x5073dd[_0x377b('0x16')](_0x326e16)[_0x377b('0x17')]();};}function respondWithResult(_0x36ae61,_0x51b5e5){_0x51b5e5=_0x51b5e5||0xc8;return function(_0x19dad9){if(_0x19dad9){return _0x36ae61[_0x377b('0x16')](_0x51b5e5)[_0x377b('0x18')](_0x19dad9);}};}function respondWithFilteredResult(_0x27d595,_0x5e5c54){return function(_0x251a2b){if(_0x251a2b){var _0x47e4e9=_0x251a2b[_0x377b('0x19')],_0x83ff4b=_0x5e5c54['offset'],_0xfd6328=_0x5e5c54['offset']+_0x5e5c54[_0x377b('0x1a')],_0xd6db3b;if(_0xfd6328>=_0x47e4e9){_0xfd6328=_0x47e4e9;_0xd6db3b=0xc8;}else{_0xd6db3b=0xce;}_0x27d595[_0x377b('0x16')](_0xd6db3b);return _0x27d595['set']('Content-Range',_0x83ff4b+'-'+_0xfd6328+'/'+_0x47e4e9)['json'](_0x251a2b);}return null;};}function patchUpdates(_0x249b6c){return function(_0x202826){try{jsonpatch[_0x377b('0x1b')](_0x202826,_0x249b6c,!![]);}catch(_0x4cc9c0){return BPromise[_0x377b('0x1c')](_0x4cc9c0);}return _0x202826[_0x377b('0x1d')]();};}function saveUpdates(_0x2522f0,_0x208241){return function(_0x1a369a){if(_0x1a369a){return _0x1a369a[_0x377b('0x1e')](_0x2522f0)[_0x377b('0x1f')](function(_0x281c03){return _0x281c03;});}return null;};}function removeEntity(_0xc657ef,_0x1cc2cb){return function(_0x44cc6f){if(_0x44cc6f){return _0x44cc6f[_0x377b('0x20')]()[_0x377b('0x1f')](function(){_0xc657ef[_0x377b('0x16')](0xcc)[_0x377b('0x17')]();});}};}function handleEntityNotFound(_0xb1d512,_0x14b3f2){return function(_0xfd10de){if(!_0xfd10de){_0xb1d512[_0x377b('0x15')](0x194);}return _0xfd10de;};}function handleError(_0x22617e,_0x2fb3ca){_0x2fb3ca=_0x2fb3ca||0x1f4;return function(_0x5c5433){logger[_0x377b('0x21')](_0x5c5433[_0x377b('0x22')]);if(_0x5c5433[_0x377b('0x23')]){delete _0x5c5433[_0x377b('0x23')];}_0x22617e[_0x377b('0x16')](_0x2fb3ca)['send'](_0x5c5433);};}exports[_0x377b('0x24')]=function(_0x524945,_0x4faee4){var _0x23c0ec={},_0x28907b={},_0x2f06e1={'count':0x0,'rows':[]};var _0x5ce978=db[_0x377b('0x25')][_0x377b('0x26')];_0x28907b[_0x377b('0x27')]=_[_0x377b('0x28')](_0x5ce978);var _0x3db84a={'dateStart':_0x524945['query'][_0x377b('0x29')],'dateEnd':_0x524945[_0x377b('0x2a')]['dateEnd']};delete _0x524945['query'][_0x377b('0x29')];delete _0x524945[_0x377b('0x2a')]['dateEnd'];_0x28907b[_0x377b('0x2a')]=_[_0x377b('0x28')](_0x524945[_0x377b('0x2a')]);_0x28907b['filters']=_[_0x377b('0x2b')](_0x28907b[_0x377b('0x27')],_0x28907b['query']);_0x23c0ec[_0x377b('0x2c')]=_[_0x377b('0x2b')](_0x28907b['model'],qs['fields'](_0x524945[_0x377b('0x2a')][_0x377b('0x2d')]));_0x23c0ec['attributes']=_0x23c0ec['attributes'][_0x377b('0x2e')]?_0x23c0ec[_0x377b('0x2c')]:_0x28907b[_0x377b('0x27')];if(!_0x524945[_0x377b('0x2a')][_0x377b('0x2f')](_0x377b('0x30'))){_0x23c0ec[_0x377b('0x1a')]=qs[_0x377b('0x1a')](_0x524945[_0x377b('0x2a')][_0x377b('0x1a')]);_0x23c0ec[_0x377b('0x31')]=qs[_0x377b('0x31')](_0x524945[_0x377b('0x2a')][_0x377b('0x31')]);}_0x23c0ec[_0x377b('0x32')]=qs['sort'](_0x524945[_0x377b('0x2a')]['sort']);_0x23c0ec[_0x377b('0x33')]=qs['filters'](_[_0x377b('0x34')](_0x524945[_0x377b('0x2a')],_0x28907b[_0x377b('0x35')]));if(_0x3db84a[_0x377b('0x29')]){if(_0x3db84a['dateEnd']){_0x3db84a['dateEnd']=moment(_0x3db84a[_0x377b('0x36')])[_0x377b('0x37')](0x1,_0x377b('0x38'));}else{_0x3db84a['dateEnd']=moment(_0x3db84a[_0x377b('0x29')])[_0x377b('0x37')](0x1,'day');}_[_0x377b('0x39')](_0x23c0ec[_0x377b('0x33')],{'createdAt':{'$gte':_0x3db84a[_0x377b('0x29')],'$lte':_0x3db84a[_0x377b('0x36')]}});}if(_0x524945[_0x377b('0x2a')][_0x377b('0x3a')]){_0x23c0ec['where']=_['merge'](_0x23c0ec[_0x377b('0x33')],{'$or':_[_0x377b('0x3b')](_0x23c0ec[_0x377b('0x2c')],function(_0x32079b){var _0x31182d={};_0x31182d[_0x32079b]={'$like':'%'+_0x524945['query'][_0x377b('0x3a')]+'%'};return _0x31182d;})});}_0x23c0ec=_[_0x377b('0x39')]({},_0x23c0ec,_0x524945[_0x377b('0x3c')]);var _0x4bbbef={'where':_0x23c0ec[_0x377b('0x33')]};return db[_0x377b('0x25')][_0x377b('0x19')](_0x4bbbef)['then'](function(_0x3300a8){_0x2f06e1[_0x377b('0x19')]=_0x3300a8;if(_0x524945['query'][_0x377b('0x3d')]){_0x23c0ec[_0x377b('0x3e')]=[{'all':!![]}];}return db[_0x377b('0x25')][_0x377b('0x3f')](_0x23c0ec);})[_0x377b('0x1f')](function(_0x3c6a07){_0x2f06e1[_0x377b('0x40')]=_0x3c6a07;return _0x2f06e1;})['then'](respondWithFilteredResult(_0x4faee4,_0x23c0ec))[_0x377b('0x41')](handleError(_0x4faee4,null));};exports[_0x377b('0x42')]=function(_0x1d9617,_0x400207){var _0x4b4fa8={'raw':!![],'where':{'id':_0x1d9617[_0x377b('0x43')]['id']}},_0x41f6a6={};_0x41f6a6[_0x377b('0x27')]=_['keys'](db[_0x377b('0x25')][_0x377b('0x26')]);_0x41f6a6[_0x377b('0x2a')]=_[_0x377b('0x28')](_0x1d9617[_0x377b('0x2a')]);_0x41f6a6[_0x377b('0x35')]=_[_0x377b('0x2b')](_0x41f6a6[_0x377b('0x27')],_0x41f6a6[_0x377b('0x2a')]);_0x4b4fa8['attributes']=_[_0x377b('0x2b')](_0x41f6a6[_0x377b('0x27')],qs[_0x377b('0x2d')](_0x1d9617['query'][_0x377b('0x2d')]));_0x4b4fa8['attributes']=_0x4b4fa8[_0x377b('0x2c')][_0x377b('0x2e')]?_0x4b4fa8[_0x377b('0x2c')]:_0x41f6a6['model'];if(_0x1d9617['query']['includeAll']){_0x4b4fa8[_0x377b('0x3e')]=[{'all':!![]}];}_0x4b4fa8=_[_0x377b('0x39')]({},_0x4b4fa8,_0x1d9617[_0x377b('0x3c')]);return db[_0x377b('0x25')][_0x377b('0x44')](_0x4b4fa8)[_0x377b('0x1f')](handleEntityNotFound(_0x400207,null))[_0x377b('0x1f')](respondWithResult(_0x400207,null))[_0x377b('0x41')](handleError(_0x400207,null));};exports[_0x377b('0x45')]=function(_0x40be82,_0x30f901){return db[_0x377b('0x25')]['create'](_0x40be82[_0x377b('0x46')],{})[_0x377b('0x1f')](respondWithResult(_0x30f901,0xc9))[_0x377b('0x41')](handleError(_0x30f901,null));};exports[_0x377b('0x1e')]=function(_0x5abfd1,_0x66100b){if(_0x5abfd1['body']['id']){delete _0x5abfd1[_0x377b('0x46')]['id'];}return db[_0x377b('0x25')]['find']({'where':{'id':_0x5abfd1[_0x377b('0x43')]['id']}})[_0x377b('0x1f')](handleEntityNotFound(_0x66100b,null))[_0x377b('0x1f')](saveUpdates(_0x5abfd1[_0x377b('0x46')],null))[_0x377b('0x1f')](respondWithResult(_0x66100b,null))[_0x377b('0x41')](handleError(_0x66100b,null));};exports[_0x377b('0x20')]=function(_0xb6f79e,_0x1da496){return db[_0x377b('0x25')][_0x377b('0x44')]({'where':{'id':_0xb6f79e[_0x377b('0x43')]['id']}})['then'](handleEntityNotFound(_0x1da496,null))[_0x377b('0x1f')](removeEntity(_0x1da496,null))[_0x377b('0x41')](handleError(_0x1da496,null));};exports['describe']=function(_0xa068c0,_0x1e1b6d){return db[_0x377b('0x25')][_0x377b('0x47')]()[_0x377b('0x1f')](respondWithResult(_0x1e1b6d,null))['catch'](handleError(_0x1e1b6d,null));};exports[_0x377b('0x48')]=function(_0xdcd34f,_0x30470e,_0x123958){var _0x202045={'raw':!![],'where':{}},_0x194210={},_0x11c12f;return db[_0x377b('0x25')][_0x377b('0x49')]({'where':{'id':_0xdcd34f[_0x377b('0x43')]['id']}})[_0x377b('0x1f')](handleEntityNotFound(_0x30470e,null))[_0x377b('0x1f')](function(_0x32a854){if(_0x32a854){_0x11c12f=_0x32a854[_0x377b('0x4a')]({'plain':!![]});_0x194210[_0x377b('0x27')]=_['keys'](db[_0x377b('0x4b')][_0x377b('0x26')]);_0x194210[_0x377b('0x2a')]=_['keys'](_0xdcd34f['query']);_0x194210[_0x377b('0x35')]=_[_0x377b('0x2b')](_0x194210[_0x377b('0x27')],_0x194210[_0x377b('0x2a')]);_0x202045[_0x377b('0x2c')]=_[_0x377b('0x2b')](_0x194210[_0x377b('0x27')],qs[_0x377b('0x2d')](_0xdcd34f[_0x377b('0x2a')][_0x377b('0x2d')]));_0x202045[_0x377b('0x2c')]=_0x202045[_0x377b('0x2c')][_0x377b('0x2e')]?_0x202045[_0x377b('0x2c')]:_0x194210['model'];if(!_0xdcd34f['query']['hasOwnProperty'](_0x377b('0x30'))){_0x202045['limit']=qs['limit'](_0xdcd34f[_0x377b('0x2a')][_0x377b('0x1a')]);_0x202045[_0x377b('0x31')]=qs['offset'](_0xdcd34f['query'][_0x377b('0x31')]);}_0x202045[_0x377b('0x32')]=qs[_0x377b('0x4c')](_0xdcd34f[_0x377b('0x2a')]['sort']);_0x202045[_0x377b('0x33')]=qs[_0x377b('0x35')](_[_0x377b('0x34')](_0xdcd34f[_0x377b('0x2a')],_0x194210[_0x377b('0x35')]));_0x202045[_0x377b('0x33')]['OpenchannelQueueId']=_0x32a854['id'];if(_0xdcd34f[_0x377b('0x2a')]['filter']){_0x202045['where']=_[_0x377b('0x39')](_0x202045[_0x377b('0x33')],{'$or':_[_0x377b('0x3b')](_0x202045[_0x377b('0x2c')],function(_0x2201bb){var _0xe78e={};_0xe78e[_0x2201bb]={'$like':'%'+_0xdcd34f[_0x377b('0x2a')][_0x377b('0x3a')]+'%'};return _0xe78e;})});}_0x202045=_[_0x377b('0x39')]({},_0x202045,_0xdcd34f[_0x377b('0x3c')]);return db['UserOpenchannelQueue'][_0x377b('0x3f')](_0x202045);}})['then'](function(_0x51a2ac){if(_0x51a2ac){return db[_0x377b('0x4d')][_0x377b('0x4e')]({'where':{'id':_[_0x377b('0x3b')](_0x51a2ac,'UserId'),'role':'agent'},'attributes':['id',_0x377b('0x23'),'openchannelPause',_0x377b('0x4f'),'createdAt']});}})['then'](function(_0x2a600b){if(_0x2a600b){return{'count':_0x2a600b[_0x377b('0x19')],'rows':_[_0x377b('0x3b')](_0x2a600b[_0x377b('0x40')],function(_0x3c9704){return{'membername':_0x3c9704[_0x377b('0x23')],'UserId':_0x3c9704['id'],'queue_name':_0x11c12f['name'],'OpenchannelQueueId':_0x11c12f['id'],'interface':util['format']('%s/%s',_0x377b('0x50'),_0x3c9704['name']),'penalty':0x0,'paused':_0x3c9704[_0x377b('0x51')],'createdAt':_0x3c9704[_0x377b('0x52')],'updatedAt':_0x3c9704['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})[_0x377b('0x1f')](respondWithFilteredResult(_0x30470e,_0x202045))[_0x377b('0x41')](handleError(_0x30470e,null));};exports[_0x377b('0x53')]=function(_0x118220,_0x3ab36f,_0x315405){var _0x5842b7={};var _0x2d29c8={};var _0x280430;var _0x32a67c;return db['OpenchannelQueue'][_0x377b('0x49')]({'where':{'id':_0x118220[_0x377b('0x43')]['id']}})[_0x377b('0x1f')](handleEntityNotFound(_0x3ab36f,null))[_0x377b('0x1f')](function(_0xe74744){if(_0xe74744){_0x280430=_0xe74744;_0x2d29c8[_0x377b('0x27')]=_[_0x377b('0x28')](db['Team'][_0x377b('0x26')]);_0x2d29c8[_0x377b('0x2a')]=_['keys'](_0x118220[_0x377b('0x2a')]);_0x2d29c8[_0x377b('0x35')]=_[_0x377b('0x2b')](_0x2d29c8[_0x377b('0x27')],_0x2d29c8[_0x377b('0x2a')]);_0x5842b7[_0x377b('0x2c')]=_[_0x377b('0x2b')](_0x2d29c8[_0x377b('0x27')],qs[_0x377b('0x2d')](_0x118220['query'][_0x377b('0x2d')]));_0x5842b7[_0x377b('0x2c')]=_0x5842b7[_0x377b('0x2c')][_0x377b('0x2e')]?_0x5842b7['attributes']:_0x2d29c8[_0x377b('0x27')];_0x5842b7[_0x377b('0x32')]=qs[_0x377b('0x4c')](_0x118220[_0x377b('0x2a')][_0x377b('0x4c')]);_0x5842b7['where']=qs[_0x377b('0x35')](_[_0x377b('0x34')](_0x118220[_0x377b('0x2a')],_0x2d29c8[_0x377b('0x35')]));if(_0x118220[_0x377b('0x2a')][_0x377b('0x3a')]){_0x5842b7[_0x377b('0x33')]=_['merge'](_0x5842b7[_0x377b('0x33')],{'$or':_[_0x377b('0x3b')](_0x5842b7[_0x377b('0x2c')],function(_0x4724b1){var _0x2b367f={};_0x2b367f[_0x4724b1]={'$like':'%'+_0x118220['query'][_0x377b('0x3a')]+'%'};return _0x2b367f;})});}_0x5842b7=_[_0x377b('0x39')]({},_0x5842b7,_0x118220[_0x377b('0x3c')]);return _0x280430[_0x377b('0x53')](_0x5842b7);}})['then'](function(_0x58b622){if(_0x58b622){_0x32a67c=_0x58b622['length'];if(!_0x118220[_0x377b('0x2a')]['hasOwnProperty'](_0x377b('0x30'))){_0x5842b7['limit']=qs[_0x377b('0x1a')](_0x118220[_0x377b('0x2a')]['limit']);_0x5842b7[_0x377b('0x31')]=qs[_0x377b('0x31')](_0x118220['query'][_0x377b('0x31')]);}return _0x280430[_0x377b('0x53')](_0x5842b7);}})[_0x377b('0x1f')](function(_0x1078e6){if(_0x1078e6){return _0x1078e6?{'count':_0x32a67c,'rows':_0x1078e6}:null;}})[_0x377b('0x1f')](respondWithResult(_0x3ab36f,null))[_0x377b('0x41')](handleError(_0x3ab36f,null));};exports[_0x377b('0x54')]=function(_0x2609e4,_0x43080d,_0x6e333f){var _0x51fdae=[];var _0x5ad000;return db[_0x377b('0x55')][_0x377b('0x3f')]({'where':{'id':_0x2609e4[_0x377b('0x46')][_0x377b('0x56')]},'attributes':['id'],'include':[{'model':db[_0x377b('0x4d')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x377b('0x1f')](function(_0x1656be){if(_0x1656be){for(var _0xbdf3bb=0x0;_0xbdf3bb<_0x1656be[_0x377b('0x2e')];_0xbdf3bb+=0x1){for(var _0x4afe62=0x0;_0x4afe62<_0x1656be[_0xbdf3bb][_0x377b('0x57')][_0x377b('0x2e')];_0x4afe62+=0x1){_0x51fdae=_[_0x377b('0x58')](_0x51fdae,[_0x1656be[_0xbdf3bb]['Agents'][_0x4afe62]['id']]);}}return _0x51fdae;}})['then'](function(_0x2dc2d6){if(_0x2dc2d6){return db[_0x377b('0x25')]['find']({'where':{'id':_0x2609e4['params']['id']}});}})['then'](function(_0x416b97){if(_0x416b97){_0x5ad000=_0x416b97;return _0x5ad000[_0x377b('0x59')](_0x51fdae,{'penalty':_0x2609e4[_0x377b('0x46')][_0x377b('0x5a')]});}})[_0x377b('0x1f')](function(_0x205724){if(_0x205724){return _0x5ad000['addTeams'](_0x2609e4[_0x377b('0x46')]['ids']);}})['then'](handleEntityNotFound(_0x43080d,null))['then'](respondWithStatusCode(_0x43080d,null))['catch'](handleError(_0x43080d,null));};exports[_0x377b('0x5b')]=function(_0x544154,_0x32ddf4,_0x172bd5){var _0x5c1547=[];var _0x2a4559;return db[_0x377b('0x55')][_0x377b('0x3f')]({'where':{'id':_0x544154['query']['ids']},'attributes':['id'],'include':[{'model':db[_0x377b('0x4d')],'as':_0x377b('0x57'),'attributes':['id'],'raw':!![]}]})[_0x377b('0x1f')](function(_0x40ce87){if(_0x40ce87){for(var _0x3db5dd=0x0;_0x3db5dd<_0x40ce87[_0x377b('0x2e')];_0x3db5dd+=0x1){for(var _0x1636a0=0x0;_0x1636a0<_0x40ce87[_0x3db5dd][_0x377b('0x57')][_0x377b('0x2e')];_0x1636a0+=0x1){_0x5c1547=_[_0x377b('0x58')](_0x5c1547,[_0x40ce87[_0x3db5dd][_0x377b('0x57')][_0x1636a0]['id']]);}}return _0x5c1547;}})[_0x377b('0x1f')](function(_0x1397a4){if(_0x1397a4){return db[_0x377b('0x25')]['find']({'where':{'id':_0x544154[_0x377b('0x43')]['id']}});}})[_0x377b('0x1f')](function(_0x3783cb){if(_0x3783cb){_0x2a4559=_0x3783cb;return _0x2a4559[_0x377b('0x5c')](_0x5c1547);}})[_0x377b('0x1f')](function(_0x3b7c6a){if(_0x2a4559){return _0x2a4559[_0x377b('0x5b')](_0x544154['query'][_0x377b('0x56')]);}})[_0x377b('0x1f')](handleEntityNotFound(_0x32ddf4,null))[_0x377b('0x1f')](respondWithStatusCode(_0x32ddf4,null))[_0x377b('0x41')](handleError(_0x32ddf4,null));};exports[_0x377b('0x59')]=function(_0x491635,_0x22a80f,_0x5ac345){return db[_0x377b('0x25')][_0x377b('0x44')]({'where':{'id':_0x491635[_0x377b('0x43')]['id']}})[_0x377b('0x1f')](handleEntityNotFound(_0x22a80f,null))['then'](function(_0x5b787e){if(_0x5b787e){return _0x5b787e[_0x377b('0x59')](_0x491635['body'][_0x377b('0x56')],_[_0x377b('0x5d')](_0x491635[_0x377b('0x46')],[_0x377b('0x56'),'id'])||{})[_0x377b('0x5e')](function(_0x497d88){for(var _0x4baeed=0x0;_0x4baeed<_0x491635[_0x377b('0x46')][_0x377b('0x56')][_0x377b('0x2e')];_0x4baeed+=0x1){socket[_0x377b('0x5f')](_0x377b('0x60'),{'UserId':_0x491635[_0x377b('0x46')]['ids'][_0x4baeed],'OpenchannelQueueId':_0x491635['params']['id']});}return _0x497d88;});}})[_0x377b('0x1f')](respondWithResult(_0x22a80f,null))['catch'](handleError(_0x22a80f,null));};exports[_0x377b('0x5c')]=function(_0x4ef7fd,_0x37a8ec,_0xb67ca2){var _0x4be440;return db[_0x377b('0x25')]['find']({'where':{'id':_0x4ef7fd[_0x377b('0x43')]['id']}})[_0x377b('0x1f')](handleEntityNotFound(_0x37a8ec,null))['then'](function(_0x1918cd){if(_0x1918cd){return _0x1918cd[_0x377b('0x5c')](_0x4ef7fd['query'][_0x377b('0x56')])['then'](function(_0x582d8e){if(_[_0x377b('0x61')](_0x4ef7fd[_0x377b('0x2a')]['ids'])){for(var _0x121b7b=0x0;_0x121b7b<_0x4ef7fd[_0x377b('0x2a')][_0x377b('0x56')][_0x377b('0x2e')];_0x121b7b+=0x1){socket[_0x377b('0x5f')](_0x377b('0x62'),{'UserId':_0x4ef7fd[_0x377b('0x2a')][_0x377b('0x56')][_0x121b7b],'OpenchannelQueueId':_0x4ef7fd[_0x377b('0x43')]['id']});}}else{socket['emit'](_0x377b('0x62'),{'UserId':_0x4ef7fd['query']['ids'],'OpenchannelQueueId':_0x4ef7fd[_0x377b('0x43')]['id']});}});}})['then'](respondWithStatusCode(_0x37a8ec,null))[_0x377b('0x41')](handleError(_0x37a8ec,null));};exports['getAgents']=function(_0x123255,_0x500063,_0x5cfe09){var _0x4d0d91={};var _0x6fd4e3={};var _0x17722f;var _0x5c8e47;return db[_0x377b('0x25')]['findOne']({'where':{'id':_0x123255[_0x377b('0x43')]['id']}})['then'](handleEntityNotFound(_0x500063,null))[_0x377b('0x1f')](function(_0x514bb7){if(_0x514bb7){_0x17722f=_0x514bb7;_0x6fd4e3[_0x377b('0x27')]=_[_0x377b('0x28')](db['User']['rawAttributes']);_0x6fd4e3[_0x377b('0x2a')]=_[_0x377b('0x28')](_0x123255[_0x377b('0x2a')]);_0x6fd4e3[_0x377b('0x35')]=_[_0x377b('0x2b')](_0x6fd4e3[_0x377b('0x27')],_0x6fd4e3[_0x377b('0x2a')]);_0x4d0d91['attributes']=_['intersection'](_0x6fd4e3['model'],qs[_0x377b('0x2d')](_0x123255[_0x377b('0x2a')][_0x377b('0x2d')]));_0x4d0d91[_0x377b('0x2c')]=_0x4d0d91[_0x377b('0x2c')][_0x377b('0x2e')]?_0x4d0d91[_0x377b('0x2c')]:_0x6fd4e3[_0x377b('0x27')];_0x4d0d91['order']=qs[_0x377b('0x4c')](_0x123255[_0x377b('0x2a')][_0x377b('0x4c')]);_0x4d0d91['where']=qs[_0x377b('0x35')](_[_0x377b('0x34')](_0x123255[_0x377b('0x2a')],_0x6fd4e3['filters']));if(_0x123255[_0x377b('0x2a')][_0x377b('0x3a')]){_0x4d0d91[_0x377b('0x33')]=_['merge'](_0x4d0d91[_0x377b('0x33')],{'$or':_[_0x377b('0x3b')](_0x4d0d91[_0x377b('0x2c')],function(_0x30a487){var _0x10f9b2={};_0x10f9b2[_0x30a487]={'$like':'%'+_0x123255[_0x377b('0x2a')][_0x377b('0x3a')]+'%'};return _0x10f9b2;})});}_0x4d0d91=_['merge']({},_0x4d0d91,_0x123255[_0x377b('0x3c')]);return _0x17722f['getAgents'](_0x4d0d91);}})['then'](function(_0x1daf13){if(_0x1daf13){_0x5c8e47=_0x1daf13[_0x377b('0x2e')];if(!_0x123255[_0x377b('0x2a')][_0x377b('0x2f')](_0x377b('0x30'))){_0x4d0d91['limit']=qs[_0x377b('0x1a')](_0x123255['query']['limit']);_0x4d0d91[_0x377b('0x31')]=qs[_0x377b('0x31')](_0x123255[_0x377b('0x2a')]['offset']);}return _0x17722f[_0x377b('0x63')](_0x4d0d91);}})[_0x377b('0x1f')](function(_0xb92b49){if(_0xb92b49){return _0xb92b49?{'count':_0x5c8e47,'rows':_0xb92b49}:null;}})[_0x377b('0x1f')](respondWithResult(_0x500063,null))['catch'](handleError(_0x500063,null));};
\ No newline at end of file
index 0b03c7f..6fff3a3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe96e=['hook','../../mysqldb','setMaxListeners','save','remove','emit','hasOwnProperty'];(function(_0x2a4722,_0x1c123b){var _0xc0bf4e=function(_0x34af41){while(--_0x34af41){_0x2a4722['push'](_0x2a4722['shift']());}};_0xc0bf4e(++_0x1c123b);}(_0xe96e,0x78));var _0xee96=function(_0x16dd1b,_0x4b8f8d){_0x16dd1b=_0x16dd1b-0x0;var _0x98c7c4=_0xe96e[_0x16dd1b];return _0x98c7c4;};'use strict';var EventEmitter=require('events');var OpenchannelQueue=require(_0xee96('0x0'))['db']['OpenchannelQueue'];var OpenchannelQueueEvents=new EventEmitter();OpenchannelQueueEvents[_0xee96('0x1')](0x0);var events={'afterCreate':_0xee96('0x2'),'afterUpdate':'update','afterDestroy':_0xee96('0x3')};function emitEvent(_0x2c50f3){return function(_0x3f81aa,_0x4f47ff,_0x3f5f52){OpenchannelQueueEvents['emit'](_0x2c50f3+':'+_0x3f81aa['id'],_0x3f81aa);OpenchannelQueueEvents[_0xee96('0x4')](_0x2c50f3,_0x3f81aa);_0x3f5f52(null);};}for(var e in events){if(events[_0xee96('0x5')](e)){var event=events[e];OpenchannelQueue[_0xee96('0x6')](e,emitEvent(event));}}module['exports']=OpenchannelQueueEvents;
\ No newline at end of file
+var _0xf059=['remove','emit','hook','exports','../../mysqldb','OpenchannelQueue','save','update'];(function(_0x3305de,_0x16582f){var _0x3b5a84=function(_0x57d7e1){while(--_0x57d7e1){_0x3305de['push'](_0x3305de['shift']());}};_0x3b5a84(++_0x16582f);}(_0xf059,0xf4));var _0x9f05=function(_0x2589e5,_0x423636){_0x2589e5=_0x2589e5-0x0;var _0x413ad0=_0xf059[_0x2589e5];return _0x413ad0;};'use strict';var EventEmitter=require('events');var OpenchannelQueue=require(_0x9f05('0x0'))['db'][_0x9f05('0x1')];var OpenchannelQueueEvents=new EventEmitter();OpenchannelQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x9f05('0x2'),'afterUpdate':_0x9f05('0x3'),'afterDestroy':_0x9f05('0x4')};function emitEvent(_0x2d4002){return function(_0x543121,_0x39d790,_0x57bade){OpenchannelQueueEvents[_0x9f05('0x5')](_0x2d4002+':'+_0x543121['id'],_0x543121);OpenchannelQueueEvents[_0x9f05('0x5')](_0x2d4002,_0x543121);_0x57bade(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];OpenchannelQueue[_0x9f05('0x6')](e,emitEvent(event));}}module[_0x9f05('0x7')]=OpenchannelQueueEvents;
\ No newline at end of file
index c311996..05c1fde 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x524a=['define','OpenchannelQueue','lodash','util','../../config/logger','api','bluebird','request-promise','./openchannelQueue.attributes'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x524a,0xf5));var _0xa524=function(_0x4afd7e,_0x530cdd){_0x4afd7e=_0x4afd7e-0x0;var _0x1d01a2=_0x524a[_0x4afd7e];return _0x1d01a2;};'use strict';var _=require(_0xa524('0x0'));var util=require(_0xa524('0x1'));var logger=require(_0xa524('0x2'))(_0xa524('0x3'));var moment=require('moment');var BPromise=require(_0xa524('0x4'));var rp=require(_0xa524('0x5'));var attributes=require(_0xa524('0x6'));module['exports']=function(_0x50ec75,_0x34a665){return _0x50ec75[_0xa524('0x7')](_0xa524('0x8'),attributes,{'tableName':'openchannel_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfe57=['./openchannelQueue.attributes','exports','define','OpenchannelQueue','openchannel_queues','lodash','util','moment','bluebird','request-promise'];(function(_0x1928c9,_0x13a6d1){var _0x51b5fb=function(_0x24cf70){while(--_0x24cf70){_0x1928c9['push'](_0x1928c9['shift']());}};_0x51b5fb(++_0x13a6d1);}(_0xfe57,0x195));var _0x7fe5=function(_0x4bfac3,_0x58324d){_0x4bfac3=_0x4bfac3-0x0;var _0x15f0f2=_0xfe57[_0x4bfac3];return _0x15f0f2;};'use strict';var _=require(_0x7fe5('0x0'));var util=require(_0x7fe5('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x7fe5('0x2'));var BPromise=require(_0x7fe5('0x3'));var rp=require(_0x7fe5('0x4'));var attributes=require(_0x7fe5('0x5'));module[_0x7fe5('0x6')]=function(_0x1254d2,_0x41f5f4){return _0x1254d2[_0x7fe5('0x7')](_0x7fe5('0x8'),attributes,{'tableName':_0x7fe5('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 65418e3..f48552b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7f7e=['where','limit','include','map','model','attributes','find','ShowOpenchannelQueue','catch','moment','bluebird','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','socket.io-emitter','request','then','OpenchannelQueue,\x20%s,\x20%s','request\x20sent','debug','OpenchannelQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','GetOpenchannelQueue','OpenchannelQueue','findAll','options','raw'];(function(_0x2c578e,_0x2630a2){var _0x315f40=function(_0x368c08){while(--_0x368c08){_0x2c578e['push'](_0x2c578e['shift']());}};_0x315f40(++_0x2630a2);}(_0x7f7e,0x72));var _0xe7f7=function(_0x199572,_0x33e667){_0x199572=_0x199572-0x0;var _0x13cfa3=_0x7f7e[_0x199572];return _0x13cfa3;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xe7f7('0x0'));var BPromise=require(_0xe7f7('0x1'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xe7f7('0x2'))['db'];var utils=require(_0xe7f7('0x3'));var logger=require('../../config/logger')(_0xe7f7('0x4'));var config=require(_0xe7f7('0x5'));var jayson=require(_0xe7f7('0x6'));var client=jayson[_0xe7f7('0x7')]['http']({'port':0x232a});var socket=require(_0xe7f7('0x8'))({'host':'localhost','port':0x18eb});require('./openchannelQueue.socket')['register'](socket);function respondWithRpcPromise(_0x486d28,_0x47fc9c,_0x4d1c96){return new BPromise(function(_0x1a926f,_0x30b245){return client[_0xe7f7('0x9')](_0x486d28,_0x4d1c96)[_0xe7f7('0xa')](function(_0x1e6c10){logger['info'](_0xe7f7('0xb'),_0x47fc9c,_0xe7f7('0xc'));logger[_0xe7f7('0xd')](_0xe7f7('0xe'),_0x47fc9c,_0xe7f7('0xc'),JSON[_0xe7f7('0xf')](_0x1e6c10));if(_0x1e6c10[_0xe7f7('0x10')]){if(_0x1e6c10[_0xe7f7('0x10')][_0xe7f7('0x11')]===0x1f4){logger[_0xe7f7('0x10')](_0xe7f7('0xb'),_0x47fc9c,_0x1e6c10[_0xe7f7('0x10')][_0xe7f7('0x12')]);return _0x30b245(_0x1e6c10['error'][_0xe7f7('0x12')]);}logger[_0xe7f7('0x10')](_0xe7f7('0xb'),_0x47fc9c,_0x1e6c10[_0xe7f7('0x10')][_0xe7f7('0x12')]);return _0x1a926f(_0x1e6c10[_0xe7f7('0x10')]['message']);}else{logger[_0xe7f7('0x13')]('OpenchannelQueue,\x20%s,\x20%s',_0x47fc9c,'request\x20sent');_0x1a926f(_0x1e6c10[_0xe7f7('0x14')][_0xe7f7('0x12')]);}})['catch'](function(_0x2cdaa7){logger[_0xe7f7('0x10')]('OpenchannelQueue,\x20%s,\x20%s',_0x47fc9c,_0x2cdaa7);_0x30b245(_0x2cdaa7);});});}exports[_0xe7f7('0x15')]=function(_0x424350){var _0x53821e=this;return new Promise(function(_0x57666d,_0x49c4ca){return db[_0xe7f7('0x16')][_0xe7f7('0x17')]({'raw':_0x424350['options']?_0x424350[_0xe7f7('0x18')][_0xe7f7('0x19')]===undefined?!![]:![]:!![],'where':_0x424350[_0xe7f7('0x18')]?_0x424350[_0xe7f7('0x18')][_0xe7f7('0x1a')]||null:null,'attributes':_0x424350[_0xe7f7('0x18')]?_0x424350['options']['attributes']||null:null,'limit':_0x424350['options']?_0x424350[_0xe7f7('0x18')][_0xe7f7('0x1b')]||null:null,'include':_0x424350[_0xe7f7('0x18')]?_0x424350[_0xe7f7('0x18')][_0xe7f7('0x1c')]?_[_0xe7f7('0x1d')](_0x424350[_0xe7f7('0x18')][_0xe7f7('0x1c')],function(_0x4c6e3c){return{'model':db[_0x4c6e3c[_0xe7f7('0x1e')]],'as':_0x4c6e3c['as'],'attributes':_0x4c6e3c[_0xe7f7('0x1f')],'include':_0x4c6e3c[_0xe7f7('0x1c')]?_[_0xe7f7('0x1d')](_0x4c6e3c[_0xe7f7('0x1c')],function(_0x315895){return{'model':db[_0x315895[_0xe7f7('0x1e')]],'as':_0x315895['as'],'attributes':_0x315895[_0xe7f7('0x1f')],'include':_0x315895[_0xe7f7('0x1c')]?_[_0xe7f7('0x1d')](_0x315895[_0xe7f7('0x1c')],function(_0x385a69){return{'model':db[_0x385a69[_0xe7f7('0x1e')]],'as':_0x385a69['as'],'attributes':_0x385a69['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x2dd1f4){logger[_0xe7f7('0x13')](_0xe7f7('0x15'),_0x424350);logger['debug']('GetOpenchannelQueue',_0x424350,JSON[_0xe7f7('0xf')](_0x2dd1f4));_0x57666d(_0x2dd1f4);})['catch'](function(_0x579206){logger[_0xe7f7('0x10')](_0xe7f7('0x15'),_0x579206['message'],_0x424350);_0x49c4ca(_0x53821e[_0xe7f7('0x10')](0x1f4,_0x579206[_0xe7f7('0x12')]));});});};exports['ShowOpenchannelQueue']=function(_0x285f64){var _0x4a19dc=this;return new Promise(function(_0x3c62d4,_0x19b290){return db[_0xe7f7('0x16')][_0xe7f7('0x20')]({'raw':_0x285f64['options']?_0x285f64['options'][_0xe7f7('0x19')]===undefined?!![]:![]:!![],'where':_0x285f64[_0xe7f7('0x18')]?_0x285f64[_0xe7f7('0x18')][_0xe7f7('0x1a')]||null:null,'attributes':_0x285f64[_0xe7f7('0x18')]?_0x285f64['options'][_0xe7f7('0x1f')]||null:null,'include':_0x285f64[_0xe7f7('0x18')]?_0x285f64['options'][_0xe7f7('0x1c')]?_[_0xe7f7('0x1d')](_0x285f64[_0xe7f7('0x18')][_0xe7f7('0x1c')],function(_0x24611e){return{'model':db[_0x24611e[_0xe7f7('0x1e')]],'as':_0x24611e['as'],'attributes':_0x24611e[_0xe7f7('0x1f')],'include':_0x24611e[_0xe7f7('0x1c')]?_[_0xe7f7('0x1d')](_0x24611e[_0xe7f7('0x1c')],function(_0x5976cb){return{'model':db[_0x5976cb[_0xe7f7('0x1e')]],'as':_0x5976cb['as'],'attributes':_0x5976cb[_0xe7f7('0x1f')],'include':_0x5976cb[_0xe7f7('0x1c')]?_[_0xe7f7('0x1d')](_0x5976cb[_0xe7f7('0x1c')],function(_0x340d8b){return{'model':db[_0x340d8b[_0xe7f7('0x1e')]],'as':_0x340d8b['as'],'attributes':_0x340d8b['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x4b2a6f){logger[_0xe7f7('0x13')](_0xe7f7('0x21'),_0x285f64);logger['debug'](_0xe7f7('0x21'),_0x285f64,JSON[_0xe7f7('0xf')](_0x4b2a6f));_0x3c62d4(_0x4b2a6f);})[_0xe7f7('0x22')](function(_0x331b4b){logger[_0xe7f7('0x10')](_0xe7f7('0x21'),_0x331b4b[_0xe7f7('0x12')],_0x285f64);_0x19b290(_0x4a19dc[_0xe7f7('0x10')](0x1f4,_0x331b4b['message']));});});};
\ No newline at end of file
+var _0x664d=['OpenchannelQueue,\x20%s,\x20%s','request\x20sent','debug','OpenchannelQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','OpenchannelQueue','findAll','options','raw','where','attributes','limit','include','map','model','GetOpenchannelQueue','ShowOpenchannelQueue','find','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','http','localhost','./openchannelQueue.socket','register','request','then','info'];(function(_0x3071f0,_0x1c6780){var _0x1e0ecc=function(_0x589a34){while(--_0x589a34){_0x3071f0['push'](_0x3071f0['shift']());}};_0x1e0ecc(++_0x1c6780);}(_0x664d,0xb3));var _0xd664=function(_0x2803ab,_0x1c33f2){_0x2803ab=_0x2803ab-0x0;var _0x3d6e8e=_0x664d[_0x2803ab];return _0x3d6e8e;};'use strict';var _=require(_0xd664('0x0'));var util=require(_0xd664('0x1'));var moment=require(_0xd664('0x2'));var BPromise=require(_0xd664('0x3'));var rs=require(_0xd664('0x4'));var fs=require('fs');var db=require(_0xd664('0x5'))['db'];var utils=require(_0xd664('0x6'));var logger=require(_0xd664('0x7'))('rpc');var config=require(_0xd664('0x8'));var jayson=require('jayson/promise');var client=jayson['client'][_0xd664('0x9')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0xd664('0xa'),'port':0x18eb});require(_0xd664('0xb'))[_0xd664('0xc')](socket);function respondWithRpcPromise(_0xee2365,_0x46a51f,_0xfa7614){return new BPromise(function(_0x4a069c,_0x4c98a4){return client[_0xd664('0xd')](_0xee2365,_0xfa7614)[_0xd664('0xe')](function(_0x3b308b){logger[_0xd664('0xf')](_0xd664('0x10'),_0x46a51f,_0xd664('0x11'));logger[_0xd664('0x12')](_0xd664('0x13'),_0x46a51f,_0xd664('0x11'),JSON[_0xd664('0x14')](_0x3b308b));if(_0x3b308b['error']){if(_0x3b308b[_0xd664('0x15')][_0xd664('0x16')]===0x1f4){logger[_0xd664('0x15')](_0xd664('0x10'),_0x46a51f,_0x3b308b['error'][_0xd664('0x17')]);return _0x4c98a4(_0x3b308b[_0xd664('0x15')]['message']);}logger['error'](_0xd664('0x10'),_0x46a51f,_0x3b308b[_0xd664('0x15')]['message']);return _0x4a069c(_0x3b308b[_0xd664('0x15')][_0xd664('0x17')]);}else{logger[_0xd664('0xf')](_0xd664('0x10'),_0x46a51f,_0xd664('0x11'));_0x4a069c(_0x3b308b[_0xd664('0x18')][_0xd664('0x17')]);}})[_0xd664('0x19')](function(_0x5961c1){logger[_0xd664('0x15')](_0xd664('0x10'),_0x46a51f,_0x5961c1);_0x4c98a4(_0x5961c1);});});}exports['GetOpenchannelQueue']=function(_0x10c7a4){var _0x5f4c05=this;return new Promise(function(_0x11ea17,_0x2b4ab1){return db[_0xd664('0x1a')][_0xd664('0x1b')]({'raw':_0x10c7a4['options']?_0x10c7a4[_0xd664('0x1c')][_0xd664('0x1d')]===undefined?!![]:![]:!![],'where':_0x10c7a4[_0xd664('0x1c')]?_0x10c7a4['options'][_0xd664('0x1e')]||null:null,'attributes':_0x10c7a4[_0xd664('0x1c')]?_0x10c7a4[_0xd664('0x1c')][_0xd664('0x1f')]||null:null,'limit':_0x10c7a4[_0xd664('0x1c')]?_0x10c7a4[_0xd664('0x1c')][_0xd664('0x20')]||null:null,'include':_0x10c7a4[_0xd664('0x1c')]?_0x10c7a4['options'][_0xd664('0x21')]?_['map'](_0x10c7a4[_0xd664('0x1c')][_0xd664('0x21')],function(_0x4a742f){return{'model':db[_0x4a742f['model']],'as':_0x4a742f['as'],'attributes':_0x4a742f[_0xd664('0x1f')],'include':_0x4a742f[_0xd664('0x21')]?_[_0xd664('0x22')](_0x4a742f['include'],function(_0x571d46){return{'model':db[_0x571d46[_0xd664('0x23')]],'as':_0x571d46['as'],'attributes':_0x571d46[_0xd664('0x1f')],'include':_0x571d46[_0xd664('0x21')]?_[_0xd664('0x22')](_0x571d46[_0xd664('0x21')],function(_0x35ef65){return{'model':db[_0x35ef65[_0xd664('0x23')]],'as':_0x35ef65['as'],'attributes':_0x35ef65['attributes']};}):[]};}):[]};}):[]:[]})[_0xd664('0xe')](function(_0x1b2b7b){logger[_0xd664('0xf')](_0xd664('0x24'),_0x10c7a4);logger[_0xd664('0x12')](_0xd664('0x24'),_0x10c7a4,JSON['stringify'](_0x1b2b7b));_0x11ea17(_0x1b2b7b);})[_0xd664('0x19')](function(_0x49be56){logger[_0xd664('0x15')](_0xd664('0x24'),_0x49be56[_0xd664('0x17')],_0x10c7a4);_0x2b4ab1(_0x5f4c05['error'](0x1f4,_0x49be56[_0xd664('0x17')]));});});};exports[_0xd664('0x25')]=function(_0x5c5c36){var _0x52361a=this;return new Promise(function(_0x3add7d,_0x3c297a){return db[_0xd664('0x1a')][_0xd664('0x26')]({'raw':_0x5c5c36[_0xd664('0x1c')]?_0x5c5c36[_0xd664('0x1c')]['raw']===undefined?!![]:![]:!![],'where':_0x5c5c36[_0xd664('0x1c')]?_0x5c5c36[_0xd664('0x1c')]['where']||null:null,'attributes':_0x5c5c36[_0xd664('0x1c')]?_0x5c5c36[_0xd664('0x1c')][_0xd664('0x1f')]||null:null,'include':_0x5c5c36['options']?_0x5c5c36[_0xd664('0x1c')][_0xd664('0x21')]?_[_0xd664('0x22')](_0x5c5c36[_0xd664('0x1c')][_0xd664('0x21')],function(_0x3a3edf){return{'model':db[_0x3a3edf['model']],'as':_0x3a3edf['as'],'attributes':_0x3a3edf[_0xd664('0x1f')],'include':_0x3a3edf[_0xd664('0x21')]?_[_0xd664('0x22')](_0x3a3edf[_0xd664('0x21')],function(_0x58c957){return{'model':db[_0x58c957[_0xd664('0x23')]],'as':_0x58c957['as'],'attributes':_0x58c957[_0xd664('0x1f')],'include':_0x58c957[_0xd664('0x21')]?_[_0xd664('0x22')](_0x58c957[_0xd664('0x21')],function(_0x48dc34){return{'model':db[_0x48dc34[_0xd664('0x23')]],'as':_0x48dc34['as'],'attributes':_0x48dc34[_0xd664('0x1f')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x259d8f){logger[_0xd664('0xf')](_0xd664('0x25'),_0x5c5c36);logger[_0xd664('0x12')](_0xd664('0x25'),_0x5c5c36,JSON['stringify'](_0x259d8f));_0x3add7d(_0x259d8f);})['catch'](function(_0x3b61e0){logger[_0xd664('0x15')]('ShowOpenchannelQueue',_0x3b61e0[_0xd664('0x17')],_0x5c5c36);_0x3c297a(_0x52361a[_0xd664('0x15')](0x1f4,_0x3b61e0[_0xd664('0x17')]));});});};
\ No newline at end of file
index 989f57e..443b06f 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(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5b561d,_0x422b7c){_0x5b561d=_0x5b561d-0x0;var _0x431060=_0xa9e0[_0x5b561d];return _0x431060;};'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(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0xa9e0,0x123));var _0x0a9e=function(_0x12d033,_0x25fa2f){_0x12d033=_0x12d033-0x0;var _0x3b4e80=_0xa9e0[_0x12d033];return _0x3b4e80;};'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 c4e4034..2f1e636 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8763=['path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelQueueReport.controller','/describe','isAuthenticated','describe','show','post','create','put','/:id','update','delete','destroy','exports','multer','util'];(function(_0x325746,_0x2a0d8a){var _0x41ca9b=function(_0x47ce37){while(--_0x47ce37){_0x325746['push'](_0x325746['shift']());}};_0x41ca9b(++_0x2a0d8a);}(_0x8763,0xbb));var _0x3876=function(_0x40955a,_0xff8f23){_0x40955a=_0x40955a-0x0;var _0x35afa8=_0x8763[_0x40955a];return _0x35afa8;};'use strict';var multer=require(_0x3876('0x0'));var util=require(_0x3876('0x1'));var path=require(_0x3876('0x2'));var express=require(_0x3876('0x3'));var router=express[_0x3876('0x4')]();var auth=require(_0x3876('0x5'));var interaction=require(_0x3876('0x6'));var config=require(_0x3876('0x7'));var controller=require(_0x3876('0x8'));router['get']('/',auth['isAuthenticated'](),controller['index']);router['get'](_0x3876('0x9'),auth[_0x3876('0xa')](),controller[_0x3876('0xb')]);router['get']('/:id',auth[_0x3876('0xa')](),controller[_0x3876('0xc')]);router[_0x3876('0xd')]('/',auth[_0x3876('0xa')](),controller[_0x3876('0xe')]);router[_0x3876('0xf')](_0x3876('0x10'),auth[_0x3876('0xa')](),controller[_0x3876('0x11')]);router[_0x3876('0x12')]('/:id',auth['isAuthenticated'](),controller[_0x3876('0x13')]);module[_0x3876('0x14')]=router;
\ No newline at end of file
+var _0x0d83=['isAuthenticated','/describe','describe','/:id','show','post','put','update','destroy','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelQueueReport.controller','get'];(function(_0x2c5340,_0x5c86e5){var _0x3c505e=function(_0x1089d9){while(--_0x1089d9){_0x2c5340['push'](_0x2c5340['shift']());}};_0x3c505e(++_0x5c86e5);}(_0x0d83,0x13a));var _0x30d8=function(_0x591e69,_0x56aeac){_0x591e69=_0x591e69-0x0;var _0x5a1d8c=_0x0d83[_0x591e69];return _0x5a1d8c;};'use strict';var multer=require(_0x30d8('0x0'));var util=require('util');var path=require(_0x30d8('0x1'));var express=require(_0x30d8('0x2'));var router=express[_0x30d8('0x3')]();var auth=require(_0x30d8('0x4'));var interaction=require(_0x30d8('0x5'));var config=require(_0x30d8('0x6'));var controller=require(_0x30d8('0x7'));router[_0x30d8('0x8')]('/',auth[_0x30d8('0x9')](),controller['index']);router[_0x30d8('0x8')](_0x30d8('0xa'),auth['isAuthenticated'](),controller[_0x30d8('0xb')]);router[_0x30d8('0x8')](_0x30d8('0xc'),auth['isAuthenticated'](),controller[_0x30d8('0xd')]);router[_0x30d8('0xe')]('/',auth[_0x30d8('0x9')](),controller['create']);router[_0x30d8('0xf')]('/:id',auth[_0x30d8('0x9')](),controller[_0x30d8('0x10')]);router['delete']('/:id',auth[_0x30d8('0x9')](),controller[_0x30d8('0x11')]);module[_0x30d8('0x12')]=router;
\ No newline at end of file
index 2fad4f4..0cb740a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1843=['moment','sequelize','exports','STRING','DATE'];(function(_0x4b570b,_0xebc3fb){var _0x3bc6f7=function(_0x57498d){while(--_0x57498d){_0x4b570b['push'](_0x4b570b['shift']());}};_0x3bc6f7(++_0xebc3fb);}(_0x1843,0x122));var _0x3184=function(_0x13ae07,_0x3bcd86){_0x13ae07=_0x13ae07-0x0;var _0x17bf82=_0x1843[_0x13ae07];return _0x17bf82;};'use strict';var moment=require(_0x3184('0x0'));var Sequelize=require(_0x3184('0x1'));module[_0x3184('0x2')]={'uniqueid':{'type':Sequelize[_0x3184('0x3')],'allowNull':![]},'from':{'type':Sequelize[_0x3184('0x3')]},'joinAt':{'type':Sequelize[_0x3184('0x4')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0x3184('0x4')]},'exitAt':{'type':Sequelize[_0x3184('0x4')]},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xeb52=['STRING','DATE','sequelize','exports'];(function(_0x303604,_0xe52647){var _0x440362=function(_0x1661f0){while(--_0x1661f0){_0x303604['push'](_0x303604['shift']());}};_0x440362(++_0xe52647);}(_0xeb52,0x6a));var _0x2eb5=function(_0x1feaa2,_0x5801d9){_0x1feaa2=_0x1feaa2-0x0;var _0x430b36=_0xeb52[_0x1feaa2];return _0x430b36;};'use strict';var moment=require('moment');var Sequelize=require(_0x2eb5('0x0'));module[_0x2eb5('0x1')]={'uniqueid':{'type':Sequelize[_0x2eb5('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0x2eb5('0x2')]},'joinAt':{'type':Sequelize[_0x2eb5('0x3')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0x2eb5('0x3')]},'exitAt':{'type':Sequelize[_0x2eb5('0x3')]},'reason':{'type':Sequelize[_0x2eb5('0x2')]}};
\ No newline at end of file
index 6de3177..c93e8a2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xadb5=['query','dateStart','dateEnd','filters','model','attributes','intersection','fields','hasOwnProperty','order','sort','where','pick','add','day','map','filter','merge','options','count','includeAll','include','findAll','rows','catch','show','params','create','body','find','describe','request-promise','bluebird','mustache','util','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','offset','limit','set','Content-Range','json','apply','save','update','destroy','then','error','stack','name','send','index','OpenchannelQueueReport','rawAttributes','keys'];(function(_0x1605b0,_0x5c753c){var _0x1fcff5=function(_0x439022){while(--_0x439022){_0x1605b0['push'](_0x1605b0['shift']());}};_0x1fcff5(++_0x5c753c);}(_0xadb5,0xad));var _0x5adb=function(_0x4b4395,_0x57fa79){_0x4b4395=_0x4b4395-0x0;var _0x4f3040=_0xadb5[_0x4b4395];return _0x4f3040;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x5adb('0x0'));var moment=require('moment');var BPromise=require(_0x5adb('0x1'));var Mustache=require(_0x5adb('0x2'));var util=require(_0x5adb('0x3'));var path=require('path');var sox=require(_0x5adb('0x4'));var csv=require(_0x5adb('0x5'));var ejs=require(_0x5adb('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x5adb('0x7'));var crypto=require(_0x5adb('0x8'));var jsforce=require(_0x5adb('0x9'));var deskjs=require(_0x5adb('0xa'));var toCsv=require(_0x5adb('0x5'));var querystring=require(_0x5adb('0xb'));var Papa=require(_0x5adb('0xc'));var qs=require(_0x5adb('0xd'));var logger=require(_0x5adb('0xe'))(_0x5adb('0xf'));var utils=require(_0x5adb('0x10'));var config=require(_0x5adb('0x11'));var db=require(_0x5adb('0x12'))['db'];function respondWithStatusCode(_0x275428,_0x563d86){_0x563d86=_0x563d86||0xcc;return function(_0x4c268d){if(_0x4c268d){return _0x275428[_0x5adb('0x13')](_0x563d86);}return _0x275428[_0x5adb('0x14')](_0x563d86)[_0x5adb('0x15')]();};}function respondWithResult(_0x53b772,_0x29f0d5){_0x29f0d5=_0x29f0d5||0xc8;return function(_0x56012f){if(_0x56012f){return _0x53b772[_0x5adb('0x14')](_0x29f0d5)['json'](_0x56012f);}};}function respondWithFilteredResult(_0x8cfcc6,_0x39a0b3){return function(_0x44abe3){if(_0x44abe3){var _0x5c929a=_0x44abe3['count'],_0x2a545b=_0x39a0b3[_0x5adb('0x16')],_0x34af2c=_0x39a0b3['offset']+_0x39a0b3[_0x5adb('0x17')],_0xf82f72;if(_0x34af2c>=_0x5c929a){_0x34af2c=_0x5c929a;_0xf82f72=0xc8;}else{_0xf82f72=0xce;}_0x8cfcc6[_0x5adb('0x14')](_0xf82f72);return _0x8cfcc6[_0x5adb('0x18')](_0x5adb('0x19'),_0x2a545b+'-'+_0x34af2c+'/'+_0x5c929a)[_0x5adb('0x1a')](_0x44abe3);}return null;};}function patchUpdates(_0x39d24d){return function(_0xa29dc){try{jsonpatch[_0x5adb('0x1b')](_0xa29dc,_0x39d24d,!![]);}catch(_0xb953a6){return BPromise['reject'](_0xb953a6);}return _0xa29dc[_0x5adb('0x1c')]();};}function saveUpdates(_0x5de028,_0x1d9e86){return function(_0x558f76){if(_0x558f76){return _0x558f76[_0x5adb('0x1d')](_0x5de028)['then'](function(_0x5e218c){return _0x5e218c;});}return null;};}function removeEntity(_0x1fbaa5,_0x1bed20){return function(_0x438671){if(_0x438671){return _0x438671[_0x5adb('0x1e')]()[_0x5adb('0x1f')](function(){_0x1fbaa5['status'](0xcc)[_0x5adb('0x15')]();});}};}function handleEntityNotFound(_0x5c296e,_0x4e9f16){return function(_0x3754cc){if(!_0x3754cc){_0x5c296e[_0x5adb('0x13')](0x194);}return _0x3754cc;};}function handleError(_0x1a38d3,_0x1a8014){_0x1a8014=_0x1a8014||0x1f4;return function(_0x1e9ccf){logger[_0x5adb('0x20')](_0x1e9ccf[_0x5adb('0x21')]);if(_0x1e9ccf['name']){delete _0x1e9ccf[_0x5adb('0x22')];}_0x1a38d3[_0x5adb('0x14')](_0x1a8014)[_0x5adb('0x23')](_0x1e9ccf);};}exports[_0x5adb('0x24')]=function(_0xeb556c,_0x49f203){var _0x2fee18={},_0x2e1e63={},_0x5aed76={'count':0x0,'rows':[]};var _0x1feecf=db[_0x5adb('0x25')][_0x5adb('0x26')];_0x2e1e63['model']=_[_0x5adb('0x27')](_0x1feecf);var _0xbe21b1={'dateStart':_0xeb556c[_0x5adb('0x28')][_0x5adb('0x29')],'dateEnd':_0xeb556c[_0x5adb('0x28')][_0x5adb('0x2a')]};delete _0xeb556c['query']['dateStart'];delete _0xeb556c['query'][_0x5adb('0x2a')];_0x2e1e63[_0x5adb('0x28')]=_[_0x5adb('0x27')](_0xeb556c[_0x5adb('0x28')]);_0x2e1e63[_0x5adb('0x2b')]=_['intersection'](_0x2e1e63[_0x5adb('0x2c')],_0x2e1e63[_0x5adb('0x28')]);_0x2fee18[_0x5adb('0x2d')]=_[_0x5adb('0x2e')](_0x2e1e63[_0x5adb('0x2c')],qs[_0x5adb('0x2f')](_0xeb556c[_0x5adb('0x28')][_0x5adb('0x2f')]));_0x2fee18[_0x5adb('0x2d')]=_0x2fee18[_0x5adb('0x2d')]['length']?_0x2fee18[_0x5adb('0x2d')]:_0x2e1e63['model'];if(!_0xeb556c[_0x5adb('0x28')][_0x5adb('0x30')]('nolimit')){_0x2fee18[_0x5adb('0x17')]=qs[_0x5adb('0x17')](_0xeb556c[_0x5adb('0x28')]['limit']);_0x2fee18[_0x5adb('0x16')]=qs[_0x5adb('0x16')](_0xeb556c['query']['offset']);}_0x2fee18[_0x5adb('0x31')]=qs['sort'](_0xeb556c[_0x5adb('0x28')][_0x5adb('0x32')]);_0x2fee18[_0x5adb('0x33')]=qs[_0x5adb('0x2b')](_[_0x5adb('0x34')](_0xeb556c['query'],_0x2e1e63[_0x5adb('0x2b')]));if(_0xbe21b1[_0x5adb('0x29')]){if(_0xbe21b1[_0x5adb('0x2a')]){_0xbe21b1['dateEnd']=moment(_0xbe21b1['dateEnd'])[_0x5adb('0x35')](0x1,_0x5adb('0x36'));}else{_0xbe21b1['dateEnd']=moment(_0xbe21b1[_0x5adb('0x29')])['add'](0x1,_0x5adb('0x36'));}_['merge'](_0x2fee18[_0x5adb('0x33')],{'createdAt':{'$gte':_0xbe21b1['dateStart'],'$lte':_0xbe21b1[_0x5adb('0x2a')]}});}if(_0xeb556c[_0x5adb('0x28')]['filter']){_0x2fee18[_0x5adb('0x33')]=_['merge'](_0x2fee18[_0x5adb('0x33')],{'$or':_[_0x5adb('0x37')](_0x2fee18[_0x5adb('0x2d')],function(_0x50edd1){var _0x425dc7={};_0x425dc7[_0x50edd1]={'$like':'%'+_0xeb556c[_0x5adb('0x28')][_0x5adb('0x38')]+'%'};return _0x425dc7;})});}_0x2fee18=_[_0x5adb('0x39')]({},_0x2fee18,_0xeb556c[_0x5adb('0x3a')]);var _0x52d74f={'where':_0x2fee18['where']};return db['OpenchannelQueueReport']['count'](_0x52d74f)[_0x5adb('0x1f')](function(_0x2fbe14){_0x5aed76[_0x5adb('0x3b')]=_0x2fbe14;if(_0xeb556c[_0x5adb('0x28')][_0x5adb('0x3c')]){_0x2fee18[_0x5adb('0x3d')]=[{'all':!![]}];}return db[_0x5adb('0x25')][_0x5adb('0x3e')](_0x2fee18);})['then'](function(_0x53f2c6){_0x5aed76[_0x5adb('0x3f')]=_0x53f2c6;return _0x5aed76;})['then'](respondWithFilteredResult(_0x49f203,_0x2fee18))[_0x5adb('0x40')](handleError(_0x49f203,null));};exports[_0x5adb('0x41')]=function(_0x299746,_0x121714){var _0xdfecfd={'raw':!![],'where':{'id':_0x299746[_0x5adb('0x42')]['id']}},_0x522ee5={};_0x522ee5[_0x5adb('0x2c')]=_['keys'](db[_0x5adb('0x25')][_0x5adb('0x26')]);_0x522ee5['query']=_[_0x5adb('0x27')](_0x299746[_0x5adb('0x28')]);_0x522ee5[_0x5adb('0x2b')]=_[_0x5adb('0x2e')](_0x522ee5[_0x5adb('0x2c')],_0x522ee5[_0x5adb('0x28')]);_0xdfecfd[_0x5adb('0x2d')]=_['intersection'](_0x522ee5['model'],qs[_0x5adb('0x2f')](_0x299746[_0x5adb('0x28')][_0x5adb('0x2f')]));_0xdfecfd[_0x5adb('0x2d')]=_0xdfecfd['attributes']['length']?_0xdfecfd[_0x5adb('0x2d')]:_0x522ee5[_0x5adb('0x2c')];if(_0x299746[_0x5adb('0x28')][_0x5adb('0x3c')]){_0xdfecfd[_0x5adb('0x3d')]=[{'all':!![]}];}_0xdfecfd=_['merge']({},_0xdfecfd,_0x299746[_0x5adb('0x3a')]);return db[_0x5adb('0x25')]['find'](_0xdfecfd)[_0x5adb('0x1f')](handleEntityNotFound(_0x121714,null))[_0x5adb('0x1f')](respondWithResult(_0x121714,null))[_0x5adb('0x40')](handleError(_0x121714,null));};exports[_0x5adb('0x43')]=function(_0x186bd2,_0x3a5409){return db[_0x5adb('0x25')][_0x5adb('0x43')](_0x186bd2['body'],{})[_0x5adb('0x1f')](respondWithResult(_0x3a5409,0xc9))['catch'](handleError(_0x3a5409,null));};exports['update']=function(_0x5015ee,_0x3cd211){if(_0x5015ee[_0x5adb('0x44')]['id']){delete _0x5015ee[_0x5adb('0x44')]['id'];}return db['OpenchannelQueueReport'][_0x5adb('0x45')]({'where':{'id':_0x5015ee['params']['id']}})[_0x5adb('0x1f')](handleEntityNotFound(_0x3cd211,null))[_0x5adb('0x1f')](saveUpdates(_0x5015ee[_0x5adb('0x44')],null))['then'](respondWithResult(_0x3cd211,null))[_0x5adb('0x40')](handleError(_0x3cd211,null));};exports['destroy']=function(_0x22fa54,_0x6dc067){return db['OpenchannelQueueReport'][_0x5adb('0x45')]({'where':{'id':_0x22fa54[_0x5adb('0x42')]['id']}})[_0x5adb('0x1f')](handleEntityNotFound(_0x6dc067,null))[_0x5adb('0x1f')](removeEntity(_0x6dc067,null))[_0x5adb('0x40')](handleError(_0x6dc067,null));};exports['describe']=function(_0x36b847,_0x3a5703){return db[_0x5adb('0x25')][_0x5adb('0x46')]()['then'](respondWithResult(_0x3a5703,null))[_0x5adb('0x40')](handleError(_0x3a5703,null));};
\ No newline at end of file
+var _0x5c3c=['apply','reject','save','update','then','destroy','name','index','OpenchannelQueueReport','rawAttributes','keys','query','dateEnd','dateStart','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','order','sort','filters','pick','day','add','merge','where','map','options','count','includeAll','include','findAll','rows','params','catch','create','body','find','describe','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','../../components/parsers/qs','api','../../config/utils','../../mysqldb','sendStatus','status','json','offset','limit','set'];(function(_0x483a69,_0x206999){var _0x2cc805=function(_0x387729){while(--_0x387729){_0x483a69['push'](_0x483a69['shift']());}};_0x2cc805(++_0x206999);}(_0x5c3c,0x132));var _0xc5c3=function(_0x187ee1,_0x3fd1e6){_0x187ee1=_0x187ee1-0x0;var _0x388160=_0x5c3c[_0x187ee1];return _0x388160;};'use strict';var jsonpatch=require(_0xc5c3('0x0'));var rp=require(_0xc5c3('0x1'));var moment=require(_0xc5c3('0x2'));var BPromise=require(_0xc5c3('0x3'));var Mustache=require('mustache');var util=require(_0xc5c3('0x4'));var path=require(_0xc5c3('0x5'));var sox=require(_0xc5c3('0x6'));var csv=require(_0xc5c3('0x7'));var ejs=require(_0xc5c3('0x8'));var fs=require('fs');var _=require(_0xc5c3('0x9'));var squel=require(_0xc5c3('0xa'));var crypto=require(_0xc5c3('0xb'));var jsforce=require(_0xc5c3('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xc5c3('0xd'));var qs=require(_0xc5c3('0xe'));var logger=require('../../config/logger')(_0xc5c3('0xf'));var utils=require(_0xc5c3('0x10'));var config=require('../../config/environment');var db=require(_0xc5c3('0x11'))['db'];function respondWithStatusCode(_0x2a1d19,_0x4e329f){_0x4e329f=_0x4e329f||0xcc;return function(_0x1f2e34){if(_0x1f2e34){return _0x2a1d19[_0xc5c3('0x12')](_0x4e329f);}return _0x2a1d19[_0xc5c3('0x13')](_0x4e329f)['end']();};}function respondWithResult(_0x2915ab,_0x6d6a29){_0x6d6a29=_0x6d6a29||0xc8;return function(_0x532065){if(_0x532065){return _0x2915ab[_0xc5c3('0x13')](_0x6d6a29)[_0xc5c3('0x14')](_0x532065);}};}function respondWithFilteredResult(_0x3f0f45,_0x5ce47d){return function(_0x2042a0){if(_0x2042a0){var _0x54fa08=_0x2042a0['count'],_0x1488ab=_0x5ce47d['offset'],_0x13a740=_0x5ce47d[_0xc5c3('0x15')]+_0x5ce47d[_0xc5c3('0x16')],_0xc8a636;if(_0x13a740>=_0x54fa08){_0x13a740=_0x54fa08;_0xc8a636=0xc8;}else{_0xc8a636=0xce;}_0x3f0f45[_0xc5c3('0x13')](_0xc8a636);return _0x3f0f45[_0xc5c3('0x17')]('Content-Range',_0x1488ab+'-'+_0x13a740+'/'+_0x54fa08)['json'](_0x2042a0);}return null;};}function patchUpdates(_0x467ba9){return function(_0x52cd2e){try{jsonpatch[_0xc5c3('0x18')](_0x52cd2e,_0x467ba9,!![]);}catch(_0x17ec62){return BPromise[_0xc5c3('0x19')](_0x17ec62);}return _0x52cd2e[_0xc5c3('0x1a')]();};}function saveUpdates(_0x28bae6,_0x5e11d5){return function(_0x364f42){if(_0x364f42){return _0x364f42[_0xc5c3('0x1b')](_0x28bae6)[_0xc5c3('0x1c')](function(_0x2b582a){return _0x2b582a;});}return null;};}function removeEntity(_0x4e570f,_0x25ef16){return function(_0x41578a){if(_0x41578a){return _0x41578a[_0xc5c3('0x1d')]()[_0xc5c3('0x1c')](function(){_0x4e570f[_0xc5c3('0x13')](0xcc)['end']();});}};}function handleEntityNotFound(_0xb07420,_0x159bec){return function(_0x370254){if(!_0x370254){_0xb07420[_0xc5c3('0x12')](0x194);}return _0x370254;};}function handleError(_0x1c5793,_0x67445){_0x67445=_0x67445||0x1f4;return function(_0x40ebcc){logger['error'](_0x40ebcc['stack']);if(_0x40ebcc[_0xc5c3('0x1e')]){delete _0x40ebcc[_0xc5c3('0x1e')];}_0x1c5793['status'](_0x67445)['send'](_0x40ebcc);};}exports[_0xc5c3('0x1f')]=function(_0x1591e3,_0x38a3df){var _0x52e54a={},_0x4af067={},_0x2df06b={'count':0x0,'rows':[]};var _0x22f607=db[_0xc5c3('0x20')][_0xc5c3('0x21')];_0x4af067['model']=_[_0xc5c3('0x22')](_0x22f607);var _0x5176c4={'dateStart':_0x1591e3[_0xc5c3('0x23')]['dateStart'],'dateEnd':_0x1591e3[_0xc5c3('0x23')][_0xc5c3('0x24')]};delete _0x1591e3[_0xc5c3('0x23')][_0xc5c3('0x25')];delete _0x1591e3[_0xc5c3('0x23')][_0xc5c3('0x24')];_0x4af067[_0xc5c3('0x23')]=_['keys'](_0x1591e3[_0xc5c3('0x23')]);_0x4af067['filters']=_[_0xc5c3('0x26')](_0x4af067[_0xc5c3('0x27')],_0x4af067['query']);_0x52e54a['attributes']=_[_0xc5c3('0x26')](_0x4af067[_0xc5c3('0x27')],qs[_0xc5c3('0x28')](_0x1591e3[_0xc5c3('0x23')]['fields']));_0x52e54a[_0xc5c3('0x29')]=_0x52e54a[_0xc5c3('0x29')][_0xc5c3('0x2a')]?_0x52e54a[_0xc5c3('0x29')]:_0x4af067[_0xc5c3('0x27')];if(!_0x1591e3[_0xc5c3('0x23')][_0xc5c3('0x2b')](_0xc5c3('0x2c'))){_0x52e54a[_0xc5c3('0x16')]=qs['limit'](_0x1591e3[_0xc5c3('0x23')][_0xc5c3('0x16')]);_0x52e54a[_0xc5c3('0x15')]=qs[_0xc5c3('0x15')](_0x1591e3[_0xc5c3('0x23')][_0xc5c3('0x15')]);}_0x52e54a[_0xc5c3('0x2d')]=qs['sort'](_0x1591e3['query'][_0xc5c3('0x2e')]);_0x52e54a['where']=qs[_0xc5c3('0x2f')](_[_0xc5c3('0x30')](_0x1591e3[_0xc5c3('0x23')],_0x4af067[_0xc5c3('0x2f')]));if(_0x5176c4[_0xc5c3('0x25')]){if(_0x5176c4['dateEnd']){_0x5176c4[_0xc5c3('0x24')]=moment(_0x5176c4[_0xc5c3('0x24')])['add'](0x1,_0xc5c3('0x31'));}else{_0x5176c4[_0xc5c3('0x24')]=moment(_0x5176c4[_0xc5c3('0x25')])[_0xc5c3('0x32')](0x1,_0xc5c3('0x31'));}_[_0xc5c3('0x33')](_0x52e54a[_0xc5c3('0x34')],{'createdAt':{'$gte':_0x5176c4[_0xc5c3('0x25')],'$lte':_0x5176c4[_0xc5c3('0x24')]}});}if(_0x1591e3[_0xc5c3('0x23')]['filter']){_0x52e54a[_0xc5c3('0x34')]=_['merge'](_0x52e54a['where'],{'$or':_[_0xc5c3('0x35')](_0x52e54a[_0xc5c3('0x29')],function(_0x1b546e){var _0x68e65d={};_0x68e65d[_0x1b546e]={'$like':'%'+_0x1591e3[_0xc5c3('0x23')]['filter']+'%'};return _0x68e65d;})});}_0x52e54a=_['merge']({},_0x52e54a,_0x1591e3[_0xc5c3('0x36')]);var _0xa7cb91={'where':_0x52e54a['where']};return db[_0xc5c3('0x20')]['count'](_0xa7cb91)[_0xc5c3('0x1c')](function(_0x2dfd19){_0x2df06b[_0xc5c3('0x37')]=_0x2dfd19;if(_0x1591e3['query'][_0xc5c3('0x38')]){_0x52e54a[_0xc5c3('0x39')]=[{'all':!![]}];}return db['OpenchannelQueueReport'][_0xc5c3('0x3a')](_0x52e54a);})['then'](function(_0x33936c){_0x2df06b[_0xc5c3('0x3b')]=_0x33936c;return _0x2df06b;})['then'](respondWithFilteredResult(_0x38a3df,_0x52e54a))['catch'](handleError(_0x38a3df,null));};exports['show']=function(_0xfb64bb,_0x2f02ab){var _0x49b1fc={'raw':!![],'where':{'id':_0xfb64bb[_0xc5c3('0x3c')]['id']}},_0x1a8490={};_0x1a8490[_0xc5c3('0x27')]=_[_0xc5c3('0x22')](db['OpenchannelQueueReport'][_0xc5c3('0x21')]);_0x1a8490['query']=_['keys'](_0xfb64bb[_0xc5c3('0x23')]);_0x1a8490[_0xc5c3('0x2f')]=_['intersection'](_0x1a8490[_0xc5c3('0x27')],_0x1a8490[_0xc5c3('0x23')]);_0x49b1fc['attributes']=_[_0xc5c3('0x26')](_0x1a8490['model'],qs[_0xc5c3('0x28')](_0xfb64bb[_0xc5c3('0x23')]['fields']));_0x49b1fc[_0xc5c3('0x29')]=_0x49b1fc['attributes'][_0xc5c3('0x2a')]?_0x49b1fc[_0xc5c3('0x29')]:_0x1a8490['model'];if(_0xfb64bb[_0xc5c3('0x23')][_0xc5c3('0x38')]){_0x49b1fc[_0xc5c3('0x39')]=[{'all':!![]}];}_0x49b1fc=_[_0xc5c3('0x33')]({},_0x49b1fc,_0xfb64bb[_0xc5c3('0x36')]);return db[_0xc5c3('0x20')]['find'](_0x49b1fc)[_0xc5c3('0x1c')](handleEntityNotFound(_0x2f02ab,null))[_0xc5c3('0x1c')](respondWithResult(_0x2f02ab,null))[_0xc5c3('0x3d')](handleError(_0x2f02ab,null));};exports[_0xc5c3('0x3e')]=function(_0x23002b,_0x4a7330){return db['OpenchannelQueueReport'][_0xc5c3('0x3e')](_0x23002b[_0xc5c3('0x3f')],{})[_0xc5c3('0x1c')](respondWithResult(_0x4a7330,0xc9))['catch'](handleError(_0x4a7330,null));};exports[_0xc5c3('0x1b')]=function(_0x65f720,_0x3a901f){if(_0x65f720[_0xc5c3('0x3f')]['id']){delete _0x65f720[_0xc5c3('0x3f')]['id'];}return db[_0xc5c3('0x20')][_0xc5c3('0x40')]({'where':{'id':_0x65f720['params']['id']}})[_0xc5c3('0x1c')](handleEntityNotFound(_0x3a901f,null))[_0xc5c3('0x1c')](saveUpdates(_0x65f720[_0xc5c3('0x3f')],null))['then'](respondWithResult(_0x3a901f,null))[_0xc5c3('0x3d')](handleError(_0x3a901f,null));};exports[_0xc5c3('0x1d')]=function(_0x3b1bc2,_0x103bde){return db[_0xc5c3('0x20')]['find']({'where':{'id':_0x3b1bc2[_0xc5c3('0x3c')]['id']}})['then'](handleEntityNotFound(_0x103bde,null))[_0xc5c3('0x1c')](removeEntity(_0x103bde,null))['catch'](handleError(_0x103bde,null));};exports[_0xc5c3('0x41')]=function(_0x34a2c3,_0x4add6b){return db[_0xc5c3('0x20')][_0xc5c3('0x41')]()['then'](respondWithResult(_0x4add6b,null))[_0xc5c3('0x3d')](handleError(_0x4add6b,null));};
\ No newline at end of file
index c663676..3ecb507 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0fda=['bluebird','request-promise','./openchannelQueueReport.attributes','exports','define','uniqueid','lodash','../../config/logger','api','moment'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0x0fda,0x1a0));var _0xa0fd=function(_0x565f84,_0x340f52){_0x565f84=_0x565f84-0x0;var _0x454167=_0x0fda[_0x565f84];return _0x454167;};'use strict';var _=require(_0xa0fd('0x0'));var util=require('util');var logger=require(_0xa0fd('0x1'))(_0xa0fd('0x2'));var moment=require(_0xa0fd('0x3'));var BPromise=require(_0xa0fd('0x4'));var rp=require(_0xa0fd('0x5'));var attributes=require(_0xa0fd('0x6'));module[_0xa0fd('0x7')]=function(_0x574fca,_0x4978fa){return _0x574fca[_0xa0fd('0x8')]('OpenchannelQueueReport',attributes,{'tableName':'report_openchannel_queue','paranoid':![],'indexes':[{'name':_0xa0fd('0x9'),'fields':[_0xa0fd('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x2086=['define','OpenchannelQueueReport','report_openchannel_queue','uniqueid','lodash','util','../../config/logger','api','moment','bluebird','./openchannelQueueReport.attributes','exports'];(function(_0x563292,_0x3c6fc6){var _0x55a727=function(_0x3f35af){while(--_0x3f35af){_0x563292['push'](_0x563292['shift']());}};_0x55a727(++_0x3c6fc6);}(_0x2086,0x124));var _0x6208=function(_0x492fa8,_0x2b7c4d){_0x492fa8=_0x492fa8-0x0;var _0x3325cc=_0x2086[_0x492fa8];return _0x3325cc;};'use strict';var _=require(_0x6208('0x0'));var util=require(_0x6208('0x1'));var logger=require(_0x6208('0x2'))(_0x6208('0x3'));var moment=require(_0x6208('0x4'));var BPromise=require(_0x6208('0x5'));var rp=require('request-promise');var attributes=require(_0x6208('0x6'));module[_0x6208('0x7')]=function(_0x4e0071,_0x4fb3b6){return _0x4e0071[_0x6208('0x8')](_0x6208('0x9'),attributes,{'tableName':_0x6208('0xa'),'paranoid':![],'indexes':[{'name':_0x6208('0xb'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index 9a2eea1..5e69c47 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffe2=['randomstring','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','OpenchannelQueueReport,\x20%s,\x20%s','request\x20sent','debug','OpenchannelQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','CreateOpenchannelQueueReport','OpenchannelQueueReport','create','options','raw','UpdateOpenchannelQueueReport','update','body','limit','lodash','util','moment','bluebird'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0xffe2,0x167));var _0x2ffe=function(_0x39bf9f,_0x4c9693){_0x39bf9f=_0x39bf9f-0x0;var _0x8cfbbf=_0xffe2[_0x39bf9f];return _0x8cfbbf;};'use strict';var _=require(_0x2ffe('0x0'));var util=require(_0x2ffe('0x1'));var moment=require(_0x2ffe('0x2'));var BPromise=require(_0x2ffe('0x3'));var rs=require(_0x2ffe('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x2ffe('0x5'));var logger=require(_0x2ffe('0x6'))('rpc');var config=require(_0x2ffe('0x7'));var jayson=require(_0x2ffe('0x8'));var client=jayson[_0x2ffe('0x9')][_0x2ffe('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3718a6,_0x532454,_0x170a44){return new BPromise(function(_0x1a68f4,_0x4063a8){return client[_0x2ffe('0xb')](_0x3718a6,_0x170a44)[_0x2ffe('0xc')](function(_0x45521c){logger['info'](_0x2ffe('0xd'),_0x532454,_0x2ffe('0xe'));logger[_0x2ffe('0xf')](_0x2ffe('0x10'),_0x532454,'request\x20sent',JSON[_0x2ffe('0x11')](_0x45521c));if(_0x45521c[_0x2ffe('0x12')]){if(_0x45521c[_0x2ffe('0x12')][_0x2ffe('0x13')]===0x1f4){logger[_0x2ffe('0x12')](_0x2ffe('0xd'),_0x532454,_0x45521c[_0x2ffe('0x12')]['message']);return _0x4063a8(_0x45521c[_0x2ffe('0x12')][_0x2ffe('0x14')]);}logger[_0x2ffe('0x12')]('OpenchannelQueueReport,\x20%s,\x20%s',_0x532454,_0x45521c[_0x2ffe('0x12')][_0x2ffe('0x14')]);return _0x1a68f4(_0x45521c['error']['message']);}else{logger[_0x2ffe('0x15')](_0x2ffe('0xd'),_0x532454,_0x2ffe('0xe'));_0x1a68f4(_0x45521c[_0x2ffe('0x16')][_0x2ffe('0x14')]);}})[_0x2ffe('0x17')](function(_0x4f6fa8){logger[_0x2ffe('0x12')]('OpenchannelQueueReport,\x20%s,\x20%s',_0x532454,_0x4f6fa8);_0x4063a8(_0x4f6fa8);});});}exports[_0x2ffe('0x18')]=function(_0x722006){var _0x41cabb=this;return new Promise(function(_0x484373,_0x217358){return db[_0x2ffe('0x19')][_0x2ffe('0x1a')](_0x722006['body'],{'raw':_0x722006[_0x2ffe('0x1b')]?_0x722006[_0x2ffe('0x1b')][_0x2ffe('0x1c')]===undefined?!![]:![]:!![]})['then'](function(_0x42437e){logger['info'](_0x2ffe('0x18'),_0x722006);logger[_0x2ffe('0xf')](_0x2ffe('0x18'),_0x722006,JSON['stringify'](_0x42437e));_0x484373(_0x42437e);})[_0x2ffe('0x17')](function(_0x1bd4c1){logger[_0x2ffe('0x12')](_0x2ffe('0x18'),_0x1bd4c1[_0x2ffe('0x14')],_0x722006);_0x217358(_0x41cabb[_0x2ffe('0x12')](0x1f4,_0x1bd4c1[_0x2ffe('0x14')]));});});};exports[_0x2ffe('0x1d')]=function(_0x22b082){var _0xf86c21=this;return new Promise(function(_0xeb964d,_0x3cf593){return db['OpenchannelQueueReport'][_0x2ffe('0x1e')](_0x22b082[_0x2ffe('0x1f')],{'raw':_0x22b082[_0x2ffe('0x1b')]?_0x22b082[_0x2ffe('0x1b')][_0x2ffe('0x1c')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x22b082['options']?_0x22b082['options']['where']||null:null,'attributes':_0x22b082[_0x2ffe('0x1b')]?_0x22b082[_0x2ffe('0x1b')]['attributes']||null:null,'limit':_0x22b082[_0x2ffe('0x1b')]?_0x22b082[_0x2ffe('0x1b')][_0x2ffe('0x20')]||null:null})[_0x2ffe('0xc')](function(_0x12724b){logger[_0x2ffe('0x15')](_0x2ffe('0x1d'),_0x22b082);logger[_0x2ffe('0xf')]('UpdateOpenchannelQueueReport',_0x22b082,JSON['stringify'](_0x12724b));_0xeb964d(_0x12724b);})[_0x2ffe('0x17')](function(_0x4a0ed7){logger['error'](_0x2ffe('0x1d'),_0x4a0ed7[_0x2ffe('0x14')],_0x22b082);_0x3cf593(_0xf86c21['error'](0x1f4,_0x4a0ed7['message']));});});};
\ No newline at end of file
+var _0x191b=['where','attributes','limit','UpdateOpenchannelQueueReport','util','moment','bluebird','randomstring','../../mysqldb','client','http','then','OpenchannelQueueReport,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','create','options','raw','CreateOpenchannelQueueReport','debug','OpenchannelQueueReport','update'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x191b,0x100));var _0xb191=function(_0x4971bc,_0x458a04){_0x4971bc=_0x4971bc-0x0;var _0x3e58e7=_0x191b[_0x4971bc];return _0x3e58e7;};'use strict';var _=require('lodash');var util=require(_0xb191('0x0'));var moment=require(_0xb191('0x1'));var BPromise=require(_0xb191('0x2'));var rs=require(_0xb191('0x3'));var fs=require('fs');var db=require(_0xb191('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xb191('0x5')][_0xb191('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x283687,_0x108604,_0x21a6f9){return new BPromise(function(_0x50b579,_0x4d9ce7){return client['request'](_0x283687,_0x21a6f9)[_0xb191('0x7')](function(_0x45ff84){logger['info'](_0xb191('0x8'),_0x108604,_0xb191('0x9'));logger['debug']('OpenchannelQueueReport,\x20%s,\x20%s,\x20%s',_0x108604,_0xb191('0x9'),JSON[_0xb191('0xa')](_0x45ff84));if(_0x45ff84['error']){if(_0x45ff84[_0xb191('0xb')][_0xb191('0xc')]===0x1f4){logger[_0xb191('0xb')](_0xb191('0x8'),_0x108604,_0x45ff84['error'][_0xb191('0xd')]);return _0x4d9ce7(_0x45ff84['error']['message']);}logger[_0xb191('0xb')](_0xb191('0x8'),_0x108604,_0x45ff84['error'][_0xb191('0xd')]);return _0x50b579(_0x45ff84[_0xb191('0xb')][_0xb191('0xd')]);}else{logger[_0xb191('0xe')](_0xb191('0x8'),_0x108604,_0xb191('0x9'));_0x50b579(_0x45ff84[_0xb191('0xf')][_0xb191('0xd')]);}})[_0xb191('0x10')](function(_0x93a44e){logger['error'](_0xb191('0x8'),_0x108604,_0x93a44e);_0x4d9ce7(_0x93a44e);});});}exports['CreateOpenchannelQueueReport']=function(_0x173c51){var _0x4027f8=this;return new Promise(function(_0x80e951,_0x2358b3){return db['OpenchannelQueueReport'][_0xb191('0x11')](_0x173c51['body'],{'raw':_0x173c51[_0xb191('0x12')]?_0x173c51['options'][_0xb191('0x13')]===undefined?!![]:![]:!![]})[_0xb191('0x7')](function(_0x4d887b){logger[_0xb191('0xe')](_0xb191('0x14'),_0x173c51);logger[_0xb191('0x15')](_0xb191('0x14'),_0x173c51,JSON[_0xb191('0xa')](_0x4d887b));_0x80e951(_0x4d887b);})[_0xb191('0x10')](function(_0x31470e){logger[_0xb191('0xb')](_0xb191('0x14'),_0x31470e[_0xb191('0xd')],_0x173c51);_0x2358b3(_0x4027f8[_0xb191('0xb')](0x1f4,_0x31470e[_0xb191('0xd')]));});});};exports['UpdateOpenchannelQueueReport']=function(_0x6f8896){var _0x53c283=this;return new Promise(function(_0x3ba3cd,_0xd8a7b5){return db[_0xb191('0x16')][_0xb191('0x17')](_0x6f8896['body'],{'raw':_0x6f8896['options']?_0x6f8896['options']['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x6f8896[_0xb191('0x12')]?_0x6f8896['options'][_0xb191('0x18')]||null:null,'attributes':_0x6f8896[_0xb191('0x12')]?_0x6f8896[_0xb191('0x12')][_0xb191('0x19')]||null:null,'limit':_0x6f8896[_0xb191('0x12')]?_0x6f8896[_0xb191('0x12')][_0xb191('0x1a')]||null:null})['then'](function(_0x897601){logger['info'](_0xb191('0x1b'),_0x6f8896);logger[_0xb191('0x15')](_0xb191('0x1b'),_0x6f8896,JSON[_0xb191('0xa')](_0x897601));_0x3ba3cd(_0x897601);})[_0xb191('0x10')](function(_0x1a68d4){logger['error'](_0xb191('0x1b'),_0x1a68d4[_0xb191('0xd')],_0x6f8896);_0xd8a7b5(_0x53c283[_0xb191('0xb')](0x1f4,_0x1a68d4[_0xb191('0xd')]));});});};
\ No newline at end of file
index a2dabd3..f276489 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc0e5=['path','express','Router','../../components/auth/service','../../config/environment','get','isAuthenticated','/describe','/:id','show','create','put','update','delete','destroy','exports','multer','util'];(function(_0xc985d9,_0x2801c0){var _0x1de005=function(_0x502f0a){while(--_0x502f0a){_0xc985d9['push'](_0xc985d9['shift']());}};_0x1de005(++_0x2801c0);}(_0xc0e5,0x178));var _0x5c0e=function(_0x5a300a,_0x198ebb){_0x5a300a=_0x5a300a-0x0;var _0xb2260f=_0xc0e5[_0x5a300a];return _0xb2260f;};'use strict';var multer=require(_0x5c0e('0x0'));var util=require(_0x5c0e('0x1'));var path=require(_0x5c0e('0x2'));var express=require(_0x5c0e('0x3'));var router=express[_0x5c0e('0x4')]();var auth=require(_0x5c0e('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x5c0e('0x6'));var controller=require('./openchannelTransferReport.controller');router[_0x5c0e('0x7')]('/',auth[_0x5c0e('0x8')](),controller['index']);router[_0x5c0e('0x7')](_0x5c0e('0x9'),auth[_0x5c0e('0x8')](),controller['describe']);router[_0x5c0e('0x7')](_0x5c0e('0xa'),auth[_0x5c0e('0x8')](),controller[_0x5c0e('0xb')]);router['post']('/',auth['isAuthenticated'](),controller[_0x5c0e('0xc')]);router[_0x5c0e('0xd')](_0x5c0e('0xa'),auth[_0x5c0e('0x8')](),controller[_0x5c0e('0xe')]);router[_0x5c0e('0xf')](_0x5c0e('0xa'),auth[_0x5c0e('0x8')](),controller[_0x5c0e('0x10')]);module[_0x5c0e('0x11')]=router;
\ No newline at end of file
+var _0x2aaa=['isAuthenticated','index','get','/describe','show','post','create','put','update','delete','/:id','destroy','multer','util','Router','../../components/auth/service','../../components/interaction/service','./openchannelTransferReport.controller'];(function(_0xb0f7c3,_0x4eae95){var _0x28ea68=function(_0x4395a7){while(--_0x4395a7){_0xb0f7c3['push'](_0xb0f7c3['shift']());}};_0x28ea68(++_0x4eae95);}(_0x2aaa,0x12c));var _0xa2aa=function(_0x467cf7,_0x26864e){_0x467cf7=_0x467cf7-0x0;var _0x1416ec=_0x2aaa[_0x467cf7];return _0x1416ec;};'use strict';var multer=require(_0xa2aa('0x0'));var util=require(_0xa2aa('0x1'));var path=require('path');var express=require('express');var router=express[_0xa2aa('0x2')]();var auth=require(_0xa2aa('0x3'));var interaction=require(_0xa2aa('0x4'));var config=require('../../config/environment');var controller=require(_0xa2aa('0x5'));router['get']('/',auth[_0xa2aa('0x6')](),controller[_0xa2aa('0x7')]);router[_0xa2aa('0x8')](_0xa2aa('0x9'),auth[_0xa2aa('0x6')](),controller['describe']);router[_0xa2aa('0x8')]('/:id',auth['isAuthenticated'](),controller[_0xa2aa('0xa')]);router[_0xa2aa('0xb')]('/',auth[_0xa2aa('0x6')](),controller[_0xa2aa('0xc')]);router[_0xa2aa('0xd')]('/:id',auth[_0xa2aa('0x6')](),controller[_0xa2aa('0xe')]);router[_0xa2aa('0xf')](_0xa2aa('0x10'),auth[_0xa2aa('0x6')](),controller[_0xa2aa('0x11')]);module['exports']=router;
\ No newline at end of file
index 1b7ebd6..a077213 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0c63=['moment','sequelize','exports','ENUM','queue','DATE','NOW'];(function(_0x431468,_0x48bccc){var _0x45b03c=function(_0x289ad1){while(--_0x289ad1){_0x431468['push'](_0x431468['shift']());}};_0x45b03c(++_0x48bccc);}(_0x0c63,0x85));var _0x30c6=function(_0x3f5407,_0x5dddff){_0x3f5407=_0x3f5407-0x0;var _0x45f8d1=_0x0c63[_0x3f5407];return _0x45f8d1;};'use strict';var moment=require(_0x30c6('0x0'));var Sequelize=require(_0x30c6('0x1'));module[_0x30c6('0x2')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize[_0x30c6('0x3')]('account','agent',_0x30c6('0x4')),'allowNull':![],'defaultValue':'queue'},'transferredAt':{'type':Sequelize[_0x30c6('0x5')],'allowNull':![],'defaultValue':Sequelize[_0x30c6('0x6')]}};
\ No newline at end of file
+var _0xe40d=['agent','queue','NOW','moment','exports','STRING','account'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0xe40d,0x1a0));var _0xde40=function(_0x339c52,_0x233f20){_0x339c52=_0x339c52-0x0;var _0x463406=_0xe40d[_0x339c52];return _0x463406;};'use strict';var moment=require(_0xde40('0x0'));var Sequelize=require('sequelize');module[_0xde40('0x1')]={'uniqueid':{'type':Sequelize[_0xde40('0x2')],'allowNull':![]},'type':{'type':Sequelize['ENUM'](_0xde40('0x3'),_0xde40('0x4'),'queue'),'allowNull':![],'defaultValue':_0xde40('0x5')},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize[_0xde40('0x6')]}};
\ No newline at end of file
index a9ffc27..5cb6681 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x06be=['dateStart','query','dateEnd','filters','intersection','fields','attributes','length','order','sort','where','add','day','merge','map','filter','options','count','includeAll','include','rows','show','find','create','body','catch','params','describe','fast-json-patch','request-promise','bluebird','mustache','sox','to-csv','ejs','lodash','crypto','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','sendStatus','error','name','send','OpenchannelTransferReport','rawAttributes','model','keys'];(function(_0x47b0cd,_0x546313){var _0x1a3269=function(_0x2c6baa){while(--_0x2c6baa){_0x47b0cd['push'](_0x47b0cd['shift']());}};_0x1a3269(++_0x546313);}(_0x06be,0x196));var _0xe06b=function(_0x29d208,_0xe0ccd3){_0x29d208=_0x29d208-0x0;var _0x3095a8=_0x06be[_0x29d208];return _0x3095a8;};'use strict';var jsonpatch=require(_0xe06b('0x0'));var rp=require(_0xe06b('0x1'));var moment=require('moment');var BPromise=require(_0xe06b('0x2'));var Mustache=require(_0xe06b('0x3'));var util=require('util');var path=require('path');var sox=require(_0xe06b('0x4'));var csv=require(_0xe06b('0x5'));var ejs=require(_0xe06b('0x6'));var fs=require('fs');var _=require(_0xe06b('0x7'));var squel=require('squel');var crypto=require(_0xe06b('0x8'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xe06b('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0xe06b('0x9'))(_0xe06b('0xa'));var utils=require(_0xe06b('0xb'));var config=require(_0xe06b('0xc'));var db=require(_0xe06b('0xd'))['db'];function respondWithStatusCode(_0x4bd7ef,_0x4bb68c){_0x4bb68c=_0x4bb68c||0xcc;return function(_0x232d58){if(_0x232d58){return _0x4bd7ef['sendStatus'](_0x4bb68c);}return _0x4bd7ef[_0xe06b('0xe')](_0x4bb68c)[_0xe06b('0xf')]();};}function respondWithResult(_0x5c6803,_0x4117be){_0x4117be=_0x4117be||0xc8;return function(_0x4cfb59){if(_0x4cfb59){return _0x5c6803['status'](_0x4117be)[_0xe06b('0x10')](_0x4cfb59);}};}function respondWithFilteredResult(_0x1d80f4,_0x31f38a){return function(_0x3ca2af){if(_0x3ca2af){var _0x2dbeef=_0x3ca2af['count'],_0x104630=_0x31f38a[_0xe06b('0x11')],_0x2f425d=_0x31f38a[_0xe06b('0x11')]+_0x31f38a[_0xe06b('0x12')],_0xcb924d;if(_0x2f425d>=_0x2dbeef){_0x2f425d=_0x2dbeef;_0xcb924d=0xc8;}else{_0xcb924d=0xce;}_0x1d80f4[_0xe06b('0xe')](_0xcb924d);return _0x1d80f4[_0xe06b('0x13')](_0xe06b('0x14'),_0x104630+'-'+_0x2f425d+'/'+_0x2dbeef)[_0xe06b('0x10')](_0x3ca2af);}return null;};}function patchUpdates(_0x59d0a2){return function(_0x35c1ed){try{jsonpatch[_0xe06b('0x15')](_0x35c1ed,_0x59d0a2,!![]);}catch(_0x2916a1){return BPromise[_0xe06b('0x16')](_0x2916a1);}return _0x35c1ed[_0xe06b('0x17')]();};}function saveUpdates(_0x3ba743,_0x4220eb){return function(_0x500ad4){if(_0x500ad4){return _0x500ad4[_0xe06b('0x18')](_0x3ba743)['then'](function(_0x4d9992){return _0x4d9992;});}return null;};}function removeEntity(_0x3ea109,_0x53fe91){return function(_0x6ab4c5){if(_0x6ab4c5){return _0x6ab4c5[_0xe06b('0x19')]()[_0xe06b('0x1a')](function(){_0x3ea109[_0xe06b('0xe')](0xcc)[_0xe06b('0xf')]();});}};}function handleEntityNotFound(_0x19a116,_0x1a7b0d){return function(_0x3e5d56){if(!_0x3e5d56){_0x19a116[_0xe06b('0x1b')](0x194);}return _0x3e5d56;};}function handleError(_0x2b3574,_0x52f4a8){_0x52f4a8=_0x52f4a8||0x1f4;return function(_0x12d6f6){logger[_0xe06b('0x1c')](_0x12d6f6['stack']);if(_0x12d6f6[_0xe06b('0x1d')]){delete _0x12d6f6[_0xe06b('0x1d')];}_0x2b3574[_0xe06b('0xe')](_0x52f4a8)[_0xe06b('0x1e')](_0x12d6f6);};}exports['index']=function(_0x25dfcd,_0x3b7214){var _0x3ada6d={},_0x51b971={},_0x3c11f6={'count':0x0,'rows':[]};var _0x188d92=db[_0xe06b('0x1f')][_0xe06b('0x20')];_0x51b971[_0xe06b('0x21')]=_[_0xe06b('0x22')](_0x188d92);var _0x209cce={'dateStart':_0x25dfcd['query'][_0xe06b('0x23')],'dateEnd':_0x25dfcd[_0xe06b('0x24')][_0xe06b('0x25')]};delete _0x25dfcd[_0xe06b('0x24')][_0xe06b('0x23')];delete _0x25dfcd['query'][_0xe06b('0x25')];_0x51b971[_0xe06b('0x24')]=_[_0xe06b('0x22')](_0x25dfcd[_0xe06b('0x24')]);_0x51b971[_0xe06b('0x26')]=_[_0xe06b('0x27')](_0x51b971['model'],_0x51b971[_0xe06b('0x24')]);_0x3ada6d['attributes']=_[_0xe06b('0x27')](_0x51b971[_0xe06b('0x21')],qs[_0xe06b('0x28')](_0x25dfcd['query'][_0xe06b('0x28')]));_0x3ada6d[_0xe06b('0x29')]=_0x3ada6d[_0xe06b('0x29')][_0xe06b('0x2a')]?_0x3ada6d[_0xe06b('0x29')]:_0x51b971[_0xe06b('0x21')];if(!_0x25dfcd['query']['hasOwnProperty']('nolimit')){_0x3ada6d[_0xe06b('0x12')]=qs[_0xe06b('0x12')](_0x25dfcd[_0xe06b('0x24')]['limit']);_0x3ada6d[_0xe06b('0x11')]=qs[_0xe06b('0x11')](_0x25dfcd[_0xe06b('0x24')][_0xe06b('0x11')]);}_0x3ada6d[_0xe06b('0x2b')]=qs[_0xe06b('0x2c')](_0x25dfcd[_0xe06b('0x24')][_0xe06b('0x2c')]);_0x3ada6d[_0xe06b('0x2d')]=qs[_0xe06b('0x26')](_['pick'](_0x25dfcd[_0xe06b('0x24')],_0x51b971['filters']));if(_0x209cce[_0xe06b('0x23')]){if(_0x209cce[_0xe06b('0x25')]){_0x209cce[_0xe06b('0x25')]=moment(_0x209cce['dateEnd'])[_0xe06b('0x2e')](0x1,_0xe06b('0x2f'));}else{_0x209cce[_0xe06b('0x25')]=moment(_0x209cce[_0xe06b('0x23')])[_0xe06b('0x2e')](0x1,_0xe06b('0x2f'));}_[_0xe06b('0x30')](_0x3ada6d[_0xe06b('0x2d')],{'createdAt':{'$gte':_0x209cce['dateStart'],'$lte':_0x209cce[_0xe06b('0x25')]}});}if(_0x25dfcd[_0xe06b('0x24')]['filter']){_0x3ada6d[_0xe06b('0x2d')]=_[_0xe06b('0x30')](_0x3ada6d[_0xe06b('0x2d')],{'$or':_[_0xe06b('0x31')](_0x3ada6d['attributes'],function(_0x13cb68){var _0x411d5d={};_0x411d5d[_0x13cb68]={'$like':'%'+_0x25dfcd['query'][_0xe06b('0x32')]+'%'};return _0x411d5d;})});}_0x3ada6d=_['merge']({},_0x3ada6d,_0x25dfcd[_0xe06b('0x33')]);var _0x40fe3={'where':_0x3ada6d[_0xe06b('0x2d')]};return db[_0xe06b('0x1f')][_0xe06b('0x34')](_0x40fe3)[_0xe06b('0x1a')](function(_0x3d30e6){_0x3c11f6[_0xe06b('0x34')]=_0x3d30e6;if(_0x25dfcd['query'][_0xe06b('0x35')]){_0x3ada6d[_0xe06b('0x36')]=[{'all':!![]}];}return db[_0xe06b('0x1f')]['findAll'](_0x3ada6d);})[_0xe06b('0x1a')](function(_0x3ee251){_0x3c11f6[_0xe06b('0x37')]=_0x3ee251;return _0x3c11f6;})[_0xe06b('0x1a')](respondWithFilteredResult(_0x3b7214,_0x3ada6d))['catch'](handleError(_0x3b7214,null));};exports[_0xe06b('0x38')]=function(_0x4a5a26,_0x551801){var _0x401eef={'raw':!![],'where':{'id':_0x4a5a26['params']['id']}},_0x5cc9b3={};_0x5cc9b3[_0xe06b('0x21')]=_[_0xe06b('0x22')](db[_0xe06b('0x1f')][_0xe06b('0x20')]);_0x5cc9b3['query']=_[_0xe06b('0x22')](_0x4a5a26[_0xe06b('0x24')]);_0x5cc9b3['filters']=_['intersection'](_0x5cc9b3[_0xe06b('0x21')],_0x5cc9b3[_0xe06b('0x24')]);_0x401eef[_0xe06b('0x29')]=_[_0xe06b('0x27')](_0x5cc9b3[_0xe06b('0x21')],qs['fields'](_0x4a5a26[_0xe06b('0x24')][_0xe06b('0x28')]));_0x401eef[_0xe06b('0x29')]=_0x401eef[_0xe06b('0x29')][_0xe06b('0x2a')]?_0x401eef['attributes']:_0x5cc9b3['model'];if(_0x4a5a26[_0xe06b('0x24')][_0xe06b('0x35')]){_0x401eef[_0xe06b('0x36')]=[{'all':!![]}];}_0x401eef=_[_0xe06b('0x30')]({},_0x401eef,_0x4a5a26[_0xe06b('0x33')]);return db[_0xe06b('0x1f')][_0xe06b('0x39')](_0x401eef)[_0xe06b('0x1a')](handleEntityNotFound(_0x551801,null))[_0xe06b('0x1a')](respondWithResult(_0x551801,null))['catch'](handleError(_0x551801,null));};exports[_0xe06b('0x3a')]=function(_0x45e470,_0x856754){return db[_0xe06b('0x1f')]['create'](_0x45e470[_0xe06b('0x3b')],{})[_0xe06b('0x1a')](respondWithResult(_0x856754,0xc9))[_0xe06b('0x3c')](handleError(_0x856754,null));};exports['update']=function(_0x27e388,_0x10997e){if(_0x27e388[_0xe06b('0x3b')]['id']){delete _0x27e388[_0xe06b('0x3b')]['id'];}return db[_0xe06b('0x1f')][_0xe06b('0x39')]({'where':{'id':_0x27e388[_0xe06b('0x3d')]['id']}})['then'](handleEntityNotFound(_0x10997e,null))['then'](saveUpdates(_0x27e388['body'],null))[_0xe06b('0x1a')](respondWithResult(_0x10997e,null))[_0xe06b('0x3c')](handleError(_0x10997e,null));};exports[_0xe06b('0x19')]=function(_0xc3608f,_0x24ee4f){return db[_0xe06b('0x1f')][_0xe06b('0x39')]({'where':{'id':_0xc3608f[_0xe06b('0x3d')]['id']}})[_0xe06b('0x1a')](handleEntityNotFound(_0x24ee4f,null))[_0xe06b('0x1a')](removeEntity(_0x24ee4f,null))[_0xe06b('0x3c')](handleError(_0x24ee4f,null));};exports[_0xe06b('0x3e')]=function(_0x519071,_0x40075e){return db[_0xe06b('0x1f')][_0xe06b('0x3e')]()[_0xe06b('0x1a')](respondWithResult(_0x40075e,null))[_0xe06b('0x3c')](handleError(_0x40075e,null));};
\ No newline at end of file
+var _0x5c88=['OpenchannelTransferReport','rawAttributes','model','keys','query','dateStart','intersection','attributes','fields','length','nolimit','sort','where','filters','pick','dateEnd','day','merge','map','filter','options','count','includeAll','include','findAll','rows','catch','show','params','create','body','find','describe','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','sendStatus','end','status','offset','limit','set','Content-Range','json','apply','reject','update','then','destroy','error','stack','name','send','index'];(function(_0x2237be,_0x2ed5c1){var _0x3312ab=function(_0x448a62){while(--_0x448a62){_0x2237be['push'](_0x2237be['shift']());}};_0x3312ab(++_0x2ed5c1);}(_0x5c88,0xf3));var _0x85c8=function(_0x2c0530,_0x32ff6c){_0x2c0530=_0x2c0530-0x0;var _0x26ec96=_0x5c88[_0x2c0530];return _0x26ec96;};'use strict';var jsonpatch=require(_0x85c8('0x0'));var rp=require(_0x85c8('0x1'));var moment=require(_0x85c8('0x2'));var BPromise=require(_0x85c8('0x3'));var Mustache=require(_0x85c8('0x4'));var util=require('util');var path=require(_0x85c8('0x5'));var sox=require(_0x85c8('0x6'));var csv=require(_0x85c8('0x7'));var ejs=require(_0x85c8('0x8'));var fs=require('fs');var _=require(_0x85c8('0x9'));var squel=require(_0x85c8('0xa'));var crypto=require(_0x85c8('0xb'));var jsforce=require(_0x85c8('0xc'));var deskjs=require(_0x85c8('0xd'));var toCsv=require(_0x85c8('0x7'));var querystring=require(_0x85c8('0xe'));var Papa=require('papaparse');var qs=require(_0x85c8('0xf'));var logger=require(_0x85c8('0x10'))('api');var utils=require(_0x85c8('0x11'));var config=require('../../config/environment');var db=require(_0x85c8('0x12'))['db'];function respondWithStatusCode(_0x4e7149,_0x540a6f){_0x540a6f=_0x540a6f||0xcc;return function(_0x298a04){if(_0x298a04){return _0x4e7149[_0x85c8('0x13')](_0x540a6f);}return _0x4e7149['status'](_0x540a6f)[_0x85c8('0x14')]();};}function respondWithResult(_0x3517ef,_0xcf4533){_0xcf4533=_0xcf4533||0xc8;return function(_0x185df3){if(_0x185df3){return _0x3517ef[_0x85c8('0x15')](_0xcf4533)['json'](_0x185df3);}};}function respondWithFilteredResult(_0x3c52e9,_0x274c5){return function(_0x5c536c){if(_0x5c536c){var _0x268b07=_0x5c536c['count'],_0x4f1704=_0x274c5[_0x85c8('0x16')],_0x9b8d53=_0x274c5[_0x85c8('0x16')]+_0x274c5[_0x85c8('0x17')],_0xac946a;if(_0x9b8d53>=_0x268b07){_0x9b8d53=_0x268b07;_0xac946a=0xc8;}else{_0xac946a=0xce;}_0x3c52e9[_0x85c8('0x15')](_0xac946a);return _0x3c52e9[_0x85c8('0x18')](_0x85c8('0x19'),_0x4f1704+'-'+_0x9b8d53+'/'+_0x268b07)[_0x85c8('0x1a')](_0x5c536c);}return null;};}function patchUpdates(_0x294a88){return function(_0x141c6b){try{jsonpatch[_0x85c8('0x1b')](_0x141c6b,_0x294a88,!![]);}catch(_0x5b1bc3){return BPromise[_0x85c8('0x1c')](_0x5b1bc3);}return _0x141c6b['save']();};}function saveUpdates(_0x3c6225,_0x3789ac){return function(_0x3b3efe){if(_0x3b3efe){return _0x3b3efe[_0x85c8('0x1d')](_0x3c6225)[_0x85c8('0x1e')](function(_0x849002){return _0x849002;});}return null;};}function removeEntity(_0x1091d4,_0x135f1c){return function(_0x516b48){if(_0x516b48){return _0x516b48[_0x85c8('0x1f')]()[_0x85c8('0x1e')](function(){_0x1091d4[_0x85c8('0x15')](0xcc)['end']();});}};}function handleEntityNotFound(_0x900e0,_0x2aca65){return function(_0x3b681e){if(!_0x3b681e){_0x900e0[_0x85c8('0x13')](0x194);}return _0x3b681e;};}function handleError(_0x307dd2,_0x2a7970){_0x2a7970=_0x2a7970||0x1f4;return function(_0x20acce){logger[_0x85c8('0x20')](_0x20acce[_0x85c8('0x21')]);if(_0x20acce[_0x85c8('0x22')]){delete _0x20acce[_0x85c8('0x22')];}_0x307dd2[_0x85c8('0x15')](_0x2a7970)[_0x85c8('0x23')](_0x20acce);};}exports[_0x85c8('0x24')]=function(_0x805ab5,_0xeb4b90){var _0x269bab={},_0x16b025={},_0x2b707c={'count':0x0,'rows':[]};var _0x463e9c=db[_0x85c8('0x25')][_0x85c8('0x26')];_0x16b025[_0x85c8('0x27')]=_[_0x85c8('0x28')](_0x463e9c);var _0x4fc93d={'dateStart':_0x805ab5[_0x85c8('0x29')][_0x85c8('0x2a')],'dateEnd':_0x805ab5[_0x85c8('0x29')]['dateEnd']};delete _0x805ab5['query'][_0x85c8('0x2a')];delete _0x805ab5[_0x85c8('0x29')]['dateEnd'];_0x16b025[_0x85c8('0x29')]=_[_0x85c8('0x28')](_0x805ab5[_0x85c8('0x29')]);_0x16b025['filters']=_[_0x85c8('0x2b')](_0x16b025[_0x85c8('0x27')],_0x16b025[_0x85c8('0x29')]);_0x269bab[_0x85c8('0x2c')]=_[_0x85c8('0x2b')](_0x16b025[_0x85c8('0x27')],qs[_0x85c8('0x2d')](_0x805ab5[_0x85c8('0x29')][_0x85c8('0x2d')]));_0x269bab[_0x85c8('0x2c')]=_0x269bab[_0x85c8('0x2c')][_0x85c8('0x2e')]?_0x269bab[_0x85c8('0x2c')]:_0x16b025[_0x85c8('0x27')];if(!_0x805ab5[_0x85c8('0x29')]['hasOwnProperty'](_0x85c8('0x2f'))){_0x269bab['limit']=qs['limit'](_0x805ab5['query'][_0x85c8('0x17')]);_0x269bab[_0x85c8('0x16')]=qs[_0x85c8('0x16')](_0x805ab5[_0x85c8('0x29')][_0x85c8('0x16')]);}_0x269bab['order']=qs['sort'](_0x805ab5['query'][_0x85c8('0x30')]);_0x269bab[_0x85c8('0x31')]=qs[_0x85c8('0x32')](_[_0x85c8('0x33')](_0x805ab5[_0x85c8('0x29')],_0x16b025['filters']));if(_0x4fc93d['dateStart']){if(_0x4fc93d[_0x85c8('0x34')]){_0x4fc93d[_0x85c8('0x34')]=moment(_0x4fc93d[_0x85c8('0x34')])['add'](0x1,_0x85c8('0x35'));}else{_0x4fc93d[_0x85c8('0x34')]=moment(_0x4fc93d['dateStart'])['add'](0x1,'day');}_[_0x85c8('0x36')](_0x269bab['where'],{'createdAt':{'$gte':_0x4fc93d[_0x85c8('0x2a')],'$lte':_0x4fc93d[_0x85c8('0x34')]}});}if(_0x805ab5[_0x85c8('0x29')]['filter']){_0x269bab['where']=_[_0x85c8('0x36')](_0x269bab[_0x85c8('0x31')],{'$or':_[_0x85c8('0x37')](_0x269bab[_0x85c8('0x2c')],function(_0x514179){var _0x170fdf={};_0x170fdf[_0x514179]={'$like':'%'+_0x805ab5['query'][_0x85c8('0x38')]+'%'};return _0x170fdf;})});}_0x269bab=_['merge']({},_0x269bab,_0x805ab5[_0x85c8('0x39')]);var _0x23539f={'where':_0x269bab[_0x85c8('0x31')]};return db[_0x85c8('0x25')][_0x85c8('0x3a')](_0x23539f)['then'](function(_0x253ec8){_0x2b707c[_0x85c8('0x3a')]=_0x253ec8;if(_0x805ab5['query'][_0x85c8('0x3b')]){_0x269bab[_0x85c8('0x3c')]=[{'all':!![]}];}return db[_0x85c8('0x25')][_0x85c8('0x3d')](_0x269bab);})['then'](function(_0x2bfd5e){_0x2b707c[_0x85c8('0x3e')]=_0x2bfd5e;return _0x2b707c;})[_0x85c8('0x1e')](respondWithFilteredResult(_0xeb4b90,_0x269bab))[_0x85c8('0x3f')](handleError(_0xeb4b90,null));};exports[_0x85c8('0x40')]=function(_0xf710eb,_0x44ada4){var _0x48c6b4={'raw':!![],'where':{'id':_0xf710eb[_0x85c8('0x41')]['id']}},_0x49c1db={};_0x49c1db[_0x85c8('0x27')]=_[_0x85c8('0x28')](db[_0x85c8('0x25')]['rawAttributes']);_0x49c1db['query']=_['keys'](_0xf710eb[_0x85c8('0x29')]);_0x49c1db[_0x85c8('0x32')]=_[_0x85c8('0x2b')](_0x49c1db[_0x85c8('0x27')],_0x49c1db[_0x85c8('0x29')]);_0x48c6b4[_0x85c8('0x2c')]=_['intersection'](_0x49c1db[_0x85c8('0x27')],qs[_0x85c8('0x2d')](_0xf710eb['query']['fields']));_0x48c6b4[_0x85c8('0x2c')]=_0x48c6b4[_0x85c8('0x2c')][_0x85c8('0x2e')]?_0x48c6b4['attributes']:_0x49c1db['model'];if(_0xf710eb[_0x85c8('0x29')][_0x85c8('0x3b')]){_0x48c6b4[_0x85c8('0x3c')]=[{'all':!![]}];}_0x48c6b4=_[_0x85c8('0x36')]({},_0x48c6b4,_0xf710eb['options']);return db['OpenchannelTransferReport']['find'](_0x48c6b4)[_0x85c8('0x1e')](handleEntityNotFound(_0x44ada4,null))[_0x85c8('0x1e')](respondWithResult(_0x44ada4,null))['catch'](handleError(_0x44ada4,null));};exports[_0x85c8('0x42')]=function(_0x3cad4c,_0x2404d2){return db[_0x85c8('0x25')][_0x85c8('0x42')](_0x3cad4c[_0x85c8('0x43')],{})[_0x85c8('0x1e')](respondWithResult(_0x2404d2,0xc9))['catch'](handleError(_0x2404d2,null));};exports[_0x85c8('0x1d')]=function(_0x56f966,_0x51d1dd){if(_0x56f966[_0x85c8('0x43')]['id']){delete _0x56f966[_0x85c8('0x43')]['id'];}return db[_0x85c8('0x25')][_0x85c8('0x44')]({'where':{'id':_0x56f966[_0x85c8('0x41')]['id']}})[_0x85c8('0x1e')](handleEntityNotFound(_0x51d1dd,null))[_0x85c8('0x1e')](saveUpdates(_0x56f966[_0x85c8('0x43')],null))[_0x85c8('0x1e')](respondWithResult(_0x51d1dd,null))[_0x85c8('0x3f')](handleError(_0x51d1dd,null));};exports['destroy']=function(_0x43ac13,_0x47ef6c){return db['OpenchannelTransferReport'][_0x85c8('0x44')]({'where':{'id':_0x43ac13['params']['id']}})[_0x85c8('0x1e')](handleEntityNotFound(_0x47ef6c,null))[_0x85c8('0x1e')](removeEntity(_0x47ef6c,null))[_0x85c8('0x3f')](handleError(_0x47ef6c,null));};exports[_0x85c8('0x45')]=function(_0x59afdb,_0x490e4e){return db['OpenchannelTransferReport'][_0x85c8('0x45')]()[_0x85c8('0x1e')](respondWithResult(_0x490e4e,null))['catch'](handleError(_0x490e4e,null));};
\ No newline at end of file
index a546f86..22744ab 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['report_openchannel_transfer','uniqueid','lodash','util','../../config/logger','moment','bluebird','./openchannelTransferReport.attributes','exports','define'];(function(_0x49024a,_0x11f990){var _0x4c2bb7=function(_0x3756b9){while(--_0x3756b9){_0x49024a['push'](_0x49024a['shift']());}};_0x4c2bb7(++_0x11f990);}(_0x7a54,0x106));var _0x47a5=function(_0x32cbbf,_0x159fd2){_0x32cbbf=_0x32cbbf-0x0;var _0x5682bd=_0x7a54[_0x32cbbf];return _0x5682bd;};'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')]('OpenchannelTransferReport',attributes,{'tableName':_0x47a5('0x8'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x47a5('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x7a54=['report_openchannel_transfer','uniqueid','lodash','util','../../config/logger','moment','bluebird','./openchannelTransferReport.attributes','exports','define'];(function(_0x2162ce,_0x1cfd49){var _0x32c83d=function(_0x278ef9){while(--_0x278ef9){_0x2162ce['push'](_0x2162ce['shift']());}};_0x32c83d(++_0x1cfd49);}(_0x7a54,0x106));var _0x47a5=function(_0x27537a,_0x4bed00){_0x27537a=_0x27537a-0x0;var _0x4c5c74=_0x7a54[_0x27537a];return _0x4c5c74;};'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')]('OpenchannelTransferReport',attributes,{'tableName':_0x47a5('0x8'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x47a5('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index edad8d7..6fec424 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f45=['request\x20sent','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','../../config/environment','client','request','info','OpenchannelTransferReport,\x20%s,\x20%s','OpenchannelTransferReport,\x20%s,\x20%s,\x20%s'];(function(_0x465a0c,_0x19d4d5){var _0x1e202e=function(_0x27bd8a){while(--_0x27bd8a){_0x465a0c['push'](_0x465a0c['shift']());}};_0x1e202e(++_0x19d4d5);}(_0x0f45,0x7f));var _0x50f4=function(_0x8c43de,_0x90ff31){_0x8c43de=_0x8c43de-0x0;var _0xa6591b=_0x0f45[_0x8c43de];return _0xa6591b;};'use strict';var _=require(_0x50f4('0x0'));var util=require(_0x50f4('0x1'));var moment=require(_0x50f4('0x2'));var BPromise=require(_0x50f4('0x3'));var rs=require(_0x50f4('0x4'));var fs=require('fs');var db=require(_0x50f4('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x50f4('0x6'))('rpc');var config=require(_0x50f4('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x50f4('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2c9db4,_0x35d04b,_0x31d988){return new BPromise(function(_0x2d7377,_0x3a72ee){return client[_0x50f4('0x9')](_0x2c9db4,_0x31d988)['then'](function(_0x218773){logger[_0x50f4('0xa')](_0x50f4('0xb'),_0x35d04b,'request\x20sent');logger['debug'](_0x50f4('0xc'),_0x35d04b,_0x50f4('0xd'),JSON[_0x50f4('0xe')](_0x218773));if(_0x218773[_0x50f4('0xf')]){if(_0x218773['error'][_0x50f4('0x10')]===0x1f4){logger['error'](_0x50f4('0xb'),_0x35d04b,_0x218773[_0x50f4('0xf')][_0x50f4('0x11')]);return _0x3a72ee(_0x218773[_0x50f4('0xf')][_0x50f4('0x11')]);}logger[_0x50f4('0xf')]('OpenchannelTransferReport,\x20%s,\x20%s',_0x35d04b,_0x218773[_0x50f4('0xf')][_0x50f4('0x11')]);return _0x2d7377(_0x218773[_0x50f4('0xf')]['message']);}else{logger[_0x50f4('0xa')](_0x50f4('0xb'),_0x35d04b,'request\x20sent');_0x2d7377(_0x218773[_0x50f4('0x12')]['message']);}})[_0x50f4('0x13')](function(_0x4a1e80){logger['error'](_0x50f4('0xb'),_0x35d04b,_0x4a1e80);_0x3a72ee(_0x4a1e80);});});}
\ No newline at end of file
+var _0x8e96=['error','code','message','info','OpenchannelTransferReport,\x20%s,\x20%s','result','lodash','bluebird','randomstring','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','request\x20sent','debug','OpenchannelTransferReport,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x173441,_0x26b0d9){var _0x2423a8=function(_0x4d96c2){while(--_0x4d96c2){_0x173441['push'](_0x173441['shift']());}};_0x2423a8(++_0x26b0d9);}(_0x8e96,0x1e9));var _0x68e9=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x8e96[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x68e9('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x68e9('0x1'));var rs=require(_0x68e9('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x68e9('0x3'));var logger=require(_0x68e9('0x4'))('rpc');var config=require(_0x68e9('0x5'));var jayson=require(_0x68e9('0x6'));var client=jayson[_0x68e9('0x7')][_0x68e9('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x1f4715,_0x504d57,_0x479087){return new BPromise(function(_0x5b1fce,_0x1ce448){return client[_0x68e9('0x9')](_0x1f4715,_0x479087)[_0x68e9('0xa')](function(_0x31becf){logger['info']('OpenchannelTransferReport,\x20%s,\x20%s',_0x504d57,_0x68e9('0xb'));logger[_0x68e9('0xc')](_0x68e9('0xd'),_0x504d57,_0x68e9('0xb'),JSON[_0x68e9('0xe')](_0x31becf));if(_0x31becf[_0x68e9('0xf')]){if(_0x31becf[_0x68e9('0xf')][_0x68e9('0x10')]===0x1f4){logger['error']('OpenchannelTransferReport,\x20%s,\x20%s',_0x504d57,_0x31becf['error'][_0x68e9('0x11')]);return _0x1ce448(_0x31becf[_0x68e9('0xf')]['message']);}logger[_0x68e9('0xf')]('OpenchannelTransferReport,\x20%s,\x20%s',_0x504d57,_0x31becf[_0x68e9('0xf')]['message']);return _0x5b1fce(_0x31becf[_0x68e9('0xf')][_0x68e9('0x11')]);}else{logger[_0x68e9('0x12')](_0x68e9('0x13'),_0x504d57,'request\x20sent');_0x5b1fce(_0x31becf[_0x68e9('0x14')][_0x68e9('0x11')]);}})['catch'](function(_0x3c4fc7){logger[_0x68e9('0xf')](_0x68e9('0x13'),_0x504d57,_0x3c4fc7);_0x1ce448(_0x3c4fc7);});});}
\ No newline at end of file
index 9567760..6c650eb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x96ef=['destroy','exports','multer','util','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./pause.controller','get','/:id','isAuthenticated','show','create','put','update','delete'];(function(_0x4329a2,_0x400bd7){var _0x3c6f53=function(_0x3e913c){while(--_0x3e913c){_0x4329a2['push'](_0x4329a2['shift']());}};_0x3c6f53(++_0x400bd7);}(_0x96ef,0x189));var _0xf96e=function(_0x444013,_0xa290aa){_0x444013=_0x444013-0x0;var _0x45021d=_0x96ef[_0x444013];return _0x45021d;};'use strict';var multer=require(_0xf96e('0x0'));var util=require(_0xf96e('0x1'));var path=require('path');var express=require(_0xf96e('0x2'));var router=express['Router']();var auth=require(_0xf96e('0x3'));var interaction=require(_0xf96e('0x4'));var config=require(_0xf96e('0x5'));var controller=require(_0xf96e('0x6'));router[_0xf96e('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0xf96e('0x7')](_0xf96e('0x8'),auth[_0xf96e('0x9')](),controller[_0xf96e('0xa')]);router['post']('/',auth[_0xf96e('0x9')](),controller[_0xf96e('0xb')]);router[_0xf96e('0xc')](_0xf96e('0x8'),auth[_0xf96e('0x9')](),controller[_0xf96e('0xd')]);router[_0xf96e('0xe')]('/:id',auth[_0xf96e('0x9')](),controller[_0xf96e('0xf')]);module[_0xf96e('0x10')]=router;
\ No newline at end of file
+var _0x8086=['get','index','isAuthenticated','show','post','create','put','/:id','update','delete','destroy','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./pause.controller'];(function(_0x1fe4ff,_0x314f91){var _0x2a7e38=function(_0x273271){while(--_0x273271){_0x1fe4ff['push'](_0x1fe4ff['shift']());}};_0x2a7e38(++_0x314f91);}(_0x8086,0xac));var _0x6808=function(_0x5235a1,_0x5153d2){_0x5235a1=_0x5235a1-0x0;var _0x30fedf=_0x8086[_0x5235a1];return _0x30fedf;};'use strict';var multer=require(_0x6808('0x0'));var util=require(_0x6808('0x1'));var path=require('path');var express=require(_0x6808('0x2'));var router=express[_0x6808('0x3')]();var auth=require(_0x6808('0x4'));var interaction=require(_0x6808('0x5'));var config=require(_0x6808('0x6'));var controller=require(_0x6808('0x7'));router[_0x6808('0x8')]('/',auth['isAuthenticated'](),controller[_0x6808('0x9')]);router[_0x6808('0x8')]('/:id',auth[_0x6808('0xa')](),controller[_0x6808('0xb')]);router[_0x6808('0xc')]('/',auth[_0x6808('0xa')](),controller[_0x6808('0xd')]);router[_0x6808('0xe')](_0x6808('0xf'),auth['isAuthenticated'](),controller[_0x6808('0x10')]);router[_0x6808('0x11')](_0x6808('0xf'),auth[_0x6808('0xa')](),controller[_0x6808('0x12')]);module[_0x6808('0x13')]=router;
\ No newline at end of file
index 728f6b8..83d0f9b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb96f=['STRING','name','sequelize','exports'];(function(_0x238c73,_0x2f2db8){var _0x435c76=function(_0xf13761){while(--_0xf13761){_0x238c73['push'](_0x238c73['shift']());}};_0x435c76(++_0x2f2db8);}(_0xb96f,0xba));var _0xfb96=function(_0x2b3b63,_0x13f941){_0x2b3b63=_0x2b3b63-0x0;var _0x59bc31=_0xb96f[_0x2b3b63];return _0x59bc31;};'use strict';var Sequelize=require(_0xfb96('0x0'));module[_0xfb96('0x1')]={'name':{'type':Sequelize[_0xfb96('0x2')],'unique':_0xfb96('0x3'),'allowNull':![]},'description':{'type':Sequelize[_0xfb96('0x2')]}};
\ No newline at end of file
+var _0x0a51=['exports','STRING','sequelize'];(function(_0x20c9d6,_0x160bea){var _0x3b8794=function(_0x56f346){while(--_0x56f346){_0x20c9d6['push'](_0x20c9d6['shift']());}};_0x3b8794(++_0x160bea);}(_0x0a51,0xa4));var _0x10a5=function(_0x2cbbfa,_0x19deb3){_0x2cbbfa=_0x2cbbfa-0x0;var _0x2fd0b5=_0x0a51[_0x2cbbfa];return _0x2fd0b5;};'use strict';var Sequelize=require(_0x10a5('0x0'));module[_0x10a5('0x1')]={'name':{'type':Sequelize[_0x10a5('0x2')],'unique':'name','allowNull':![]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index f0b4668..34b0adb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4148=['sox','to-csv','ejs','squel','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','count','offset','set','Content-Range','json','apply','reject','update','then','destroy','end','error','name','send','index','Pause','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','limit','order','sort','where','pick','add','day','merge','filter','options','includeAll','include','findAll','rows','catch','show','find','create','body','params','fast-json-patch','request-promise','moment','bluebird','mustache','path'];(function(_0x11dcf3,_0x277f82){var _0x57d2d8=function(_0x59ddb4){while(--_0x59ddb4){_0x11dcf3['push'](_0x11dcf3['shift']());}};_0x57d2d8(++_0x277f82);}(_0x4148,0xc6));var _0x8414=function(_0x12e073,_0x2a6387){_0x12e073=_0x12e073-0x0;var _0x17e67b=_0x4148[_0x12e073];return _0x17e67b;};'use strict';var jsonpatch=require(_0x8414('0x0'));var rp=require(_0x8414('0x1'));var moment=require(_0x8414('0x2'));var BPromise=require(_0x8414('0x3'));var Mustache=require(_0x8414('0x4'));var util=require('util');var path=require(_0x8414('0x5'));var sox=require(_0x8414('0x6'));var csv=require(_0x8414('0x7'));var ejs=require(_0x8414('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x8414('0x9'));var crypto=require('crypto');var jsforce=require(_0x8414('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x8414('0xb'));var Papa=require(_0x8414('0xc'));var qs=require(_0x8414('0xd'));var logger=require(_0x8414('0xe'))(_0x8414('0xf'));var utils=require(_0x8414('0x10'));var config=require(_0x8414('0x11'));var db=require(_0x8414('0x12'))['db'];function respondWithStatusCode(_0x913591,_0x28d8b4){_0x28d8b4=_0x28d8b4||0xcc;return function(_0x9e85e1){if(_0x9e85e1){return _0x913591['sendStatus'](_0x28d8b4);}return _0x913591[_0x8414('0x13')](_0x28d8b4)['end']();};}function respondWithResult(_0x922a8f,_0x15db2a){_0x15db2a=_0x15db2a||0xc8;return function(_0x430d67){if(_0x430d67){return _0x922a8f[_0x8414('0x13')](_0x15db2a)['json'](_0x430d67);}};}function respondWithFilteredResult(_0x1184c8,_0x4dd503){return function(_0x414a7c){if(_0x414a7c){var _0x3ee822=_0x414a7c[_0x8414('0x14')],_0x2e30ff=_0x4dd503[_0x8414('0x15')],_0x4a3b54=_0x4dd503['offset']+_0x4dd503['limit'],_0x2875ef;if(_0x4a3b54>=_0x3ee822){_0x4a3b54=_0x3ee822;_0x2875ef=0xc8;}else{_0x2875ef=0xce;}_0x1184c8[_0x8414('0x13')](_0x2875ef);return _0x1184c8[_0x8414('0x16')](_0x8414('0x17'),_0x2e30ff+'-'+_0x4a3b54+'/'+_0x3ee822)[_0x8414('0x18')](_0x414a7c);}return null;};}function patchUpdates(_0x5b92aa){return function(_0x43df52){try{jsonpatch[_0x8414('0x19')](_0x43df52,_0x5b92aa,!![]);}catch(_0x43e4f8){return BPromise[_0x8414('0x1a')](_0x43e4f8);}return _0x43df52['save']();};}function saveUpdates(_0x47d40a,_0x3ac868){return function(_0x5c4b4c){if(_0x5c4b4c){return _0x5c4b4c[_0x8414('0x1b')](_0x47d40a)[_0x8414('0x1c')](function(_0x7fc31){return _0x7fc31;});}return null;};}function removeEntity(_0x3169b7,_0x535feb){return function(_0xf27a9b){if(_0xf27a9b){return _0xf27a9b[_0x8414('0x1d')]()[_0x8414('0x1c')](function(){_0x3169b7[_0x8414('0x13')](0xcc)[_0x8414('0x1e')]();});}};}function handleEntityNotFound(_0x23b562,_0x9e70a6){return function(_0x1030fc){if(!_0x1030fc){_0x23b562['sendStatus'](0x194);}return _0x1030fc;};}function handleError(_0x4c5d01,_0x4fc4d3){_0x4fc4d3=_0x4fc4d3||0x1f4;return function(_0x1d2b19){logger[_0x8414('0x1f')](_0x1d2b19['stack']);if(_0x1d2b19[_0x8414('0x20')]){delete _0x1d2b19[_0x8414('0x20')];}_0x4c5d01['status'](_0x4fc4d3)[_0x8414('0x21')](_0x1d2b19);};}exports[_0x8414('0x22')]=function(_0x52f959,_0x4a881d){var _0x198199={},_0x418c96={},_0x2ea383={'count':0x0,'rows':[]};var _0x5bf264=db[_0x8414('0x23')][_0x8414('0x24')];_0x418c96[_0x8414('0x25')]=_[_0x8414('0x26')](_0x5bf264);var _0x44f097={'dateStart':_0x52f959[_0x8414('0x27')][_0x8414('0x28')],'dateEnd':_0x52f959[_0x8414('0x27')][_0x8414('0x29')]};delete _0x52f959[_0x8414('0x27')][_0x8414('0x28')];delete _0x52f959[_0x8414('0x27')][_0x8414('0x29')];_0x418c96[_0x8414('0x27')]=_[_0x8414('0x26')](_0x52f959[_0x8414('0x27')]);_0x418c96[_0x8414('0x2a')]=_[_0x8414('0x2b')](_0x418c96['model'],_0x418c96['query']);_0x198199[_0x8414('0x2c')]=_[_0x8414('0x2b')](_0x418c96[_0x8414('0x25')],qs[_0x8414('0x2d')](_0x52f959[_0x8414('0x27')][_0x8414('0x2d')]));_0x198199['attributes']=_0x198199[_0x8414('0x2c')][_0x8414('0x2e')]?_0x198199[_0x8414('0x2c')]:_0x418c96['model'];if(!_0x52f959[_0x8414('0x27')][_0x8414('0x2f')]('nolimit')){_0x198199[_0x8414('0x30')]=qs['limit'](_0x52f959['query'][_0x8414('0x30')]);_0x198199[_0x8414('0x15')]=qs[_0x8414('0x15')](_0x52f959[_0x8414('0x27')][_0x8414('0x15')]);}_0x198199[_0x8414('0x31')]=qs[_0x8414('0x32')](_0x52f959[_0x8414('0x27')][_0x8414('0x32')]);_0x198199[_0x8414('0x33')]=qs[_0x8414('0x2a')](_[_0x8414('0x34')](_0x52f959[_0x8414('0x27')],_0x418c96[_0x8414('0x2a')]));if(_0x44f097[_0x8414('0x28')]){if(_0x44f097[_0x8414('0x29')]){_0x44f097[_0x8414('0x29')]=moment(_0x44f097['dateEnd'])[_0x8414('0x35')](0x1,_0x8414('0x36'));}else{_0x44f097[_0x8414('0x29')]=moment(_0x44f097[_0x8414('0x28')])[_0x8414('0x35')](0x1,_0x8414('0x36'));}_[_0x8414('0x37')](_0x198199['where'],{'createdAt':{'$gte':_0x44f097[_0x8414('0x28')],'$lte':_0x44f097[_0x8414('0x29')]}});}if(_0x52f959[_0x8414('0x27')][_0x8414('0x38')]){_0x198199[_0x8414('0x33')]=_[_0x8414('0x37')](_0x198199[_0x8414('0x33')],{'$or':_['map'](_0x198199[_0x8414('0x2c')],function(_0x3a3d14){var _0x21840a={};_0x21840a[_0x3a3d14]={'$like':'%'+_0x52f959[_0x8414('0x27')][_0x8414('0x38')]+'%'};return _0x21840a;})});}_0x198199=_[_0x8414('0x37')]({},_0x198199,_0x52f959[_0x8414('0x39')]);var _0x2ed708={'where':_0x198199[_0x8414('0x33')]};return db[_0x8414('0x23')][_0x8414('0x14')](_0x2ed708)[_0x8414('0x1c')](function(_0x1c5467){_0x2ea383[_0x8414('0x14')]=_0x1c5467;if(_0x52f959[_0x8414('0x27')][_0x8414('0x3a')]){_0x198199[_0x8414('0x3b')]=[{'all':!![]}];}return db[_0x8414('0x23')][_0x8414('0x3c')](_0x198199);})[_0x8414('0x1c')](function(_0x14cb55){_0x2ea383[_0x8414('0x3d')]=_0x14cb55;return _0x2ea383;})['then'](respondWithFilteredResult(_0x4a881d,_0x198199))[_0x8414('0x3e')](handleError(_0x4a881d,null));};exports[_0x8414('0x3f')]=function(_0x5fdd03,_0x14a83f){var _0x92ec07={'raw':!![],'where':{'id':_0x5fdd03['params']['id']}},_0x40c4b7={};_0x40c4b7[_0x8414('0x25')]=_[_0x8414('0x26')](db[_0x8414('0x23')][_0x8414('0x24')]);_0x40c4b7[_0x8414('0x27')]=_[_0x8414('0x26')](_0x5fdd03[_0x8414('0x27')]);_0x40c4b7[_0x8414('0x2a')]=_[_0x8414('0x2b')](_0x40c4b7[_0x8414('0x25')],_0x40c4b7[_0x8414('0x27')]);_0x92ec07[_0x8414('0x2c')]=_['intersection'](_0x40c4b7[_0x8414('0x25')],qs['fields'](_0x5fdd03['query'][_0x8414('0x2d')]));_0x92ec07[_0x8414('0x2c')]=_0x92ec07[_0x8414('0x2c')][_0x8414('0x2e')]?_0x92ec07[_0x8414('0x2c')]:_0x40c4b7[_0x8414('0x25')];if(_0x5fdd03[_0x8414('0x27')][_0x8414('0x3a')]){_0x92ec07[_0x8414('0x3b')]=[{'all':!![]}];}_0x92ec07=_[_0x8414('0x37')]({},_0x92ec07,_0x5fdd03[_0x8414('0x39')]);return db[_0x8414('0x23')][_0x8414('0x40')](_0x92ec07)[_0x8414('0x1c')](handleEntityNotFound(_0x14a83f,null))[_0x8414('0x1c')](respondWithResult(_0x14a83f,null))[_0x8414('0x3e')](handleError(_0x14a83f,null));};exports[_0x8414('0x41')]=function(_0x3e2d14,_0x5afb37){return db[_0x8414('0x23')]['create'](_0x3e2d14[_0x8414('0x42')],{})[_0x8414('0x1c')](respondWithResult(_0x5afb37,0xc9))[_0x8414('0x3e')](handleError(_0x5afb37,null));};exports[_0x8414('0x1b')]=function(_0x1c47a9,_0x55a494){if(_0x1c47a9[_0x8414('0x42')]['id']){delete _0x1c47a9[_0x8414('0x42')]['id'];}return db[_0x8414('0x23')]['find']({'where':{'id':_0x1c47a9[_0x8414('0x43')]['id']}})[_0x8414('0x1c')](handleEntityNotFound(_0x55a494,null))['then'](saveUpdates(_0x1c47a9[_0x8414('0x42')],null))[_0x8414('0x1c')](respondWithResult(_0x55a494,null))[_0x8414('0x3e')](handleError(_0x55a494,null));};exports[_0x8414('0x1d')]=function(_0x28572b,_0x2fa95e){return db[_0x8414('0x23')][_0x8414('0x40')]({'where':{'id':_0x28572b[_0x8414('0x43')]['id']}})[_0x8414('0x1c')](handleEntityNotFound(_0x2fa95e,null))[_0x8414('0x1c')](removeEntity(_0x2fa95e,null))[_0x8414('0x3e')](handleError(_0x2fa95e,null));};
\ No newline at end of file
+var _0xe35c=['count','offset','limit','set','Content-Range','apply','reject','save','then','destroy','error','stack','name','send','index','Pause','rawAttributes','model','query','dateStart','dateEnd','keys','filters','intersection','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','filter','merge','map','options','include','findAll','rows','catch','show','params','fields','includeAll','find','create','body','update','fast-json-patch','request-promise','moment','bluebird','mustache','util','to-csv','lodash','squel','crypto','desk.js','querystring','papaparse','../../config/logger','../../config/environment','sendStatus','status','end','json'];(function(_0x163040,_0x38a58c){var _0x364667=function(_0x3b104f){while(--_0x3b104f){_0x163040['push'](_0x163040['shift']());}};_0x364667(++_0x38a58c);}(_0xe35c,0x146));var _0xce35=function(_0x5ddd81,_0x37a147){_0x5ddd81=_0x5ddd81-0x0;var _0x3d3fcc=_0xe35c[_0x5ddd81];return _0x3d3fcc;};'use strict';var jsonpatch=require(_0xce35('0x0'));var rp=require(_0xce35('0x1'));var moment=require(_0xce35('0x2'));var BPromise=require(_0xce35('0x3'));var Mustache=require(_0xce35('0x4'));var util=require(_0xce35('0x5'));var path=require('path');var sox=require('sox');var csv=require(_0xce35('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xce35('0x7'));var squel=require(_0xce35('0x8'));var crypto=require(_0xce35('0x9'));var jsforce=require('jsforce');var deskjs=require(_0xce35('0xa'));var toCsv=require(_0xce35('0x6'));var querystring=require(_0xce35('0xb'));var Papa=require(_0xce35('0xc'));var qs=require('../../components/parsers/qs');var logger=require(_0xce35('0xd'))('api');var utils=require('../../config/utils');var config=require(_0xce35('0xe'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x478ce1,_0x3bd7fc){_0x3bd7fc=_0x3bd7fc||0xcc;return function(_0x46647b){if(_0x46647b){return _0x478ce1[_0xce35('0xf')](_0x3bd7fc);}return _0x478ce1[_0xce35('0x10')](_0x3bd7fc)[_0xce35('0x11')]();};}function respondWithResult(_0x57d0c3,_0x59556d){_0x59556d=_0x59556d||0xc8;return function(_0x291071){if(_0x291071){return _0x57d0c3[_0xce35('0x10')](_0x59556d)[_0xce35('0x12')](_0x291071);}};}function respondWithFilteredResult(_0x251ca5,_0x4161f0){return function(_0x548956){if(_0x548956){var _0x59cdb1=_0x548956[_0xce35('0x13')],_0xc8ec3f=_0x4161f0[_0xce35('0x14')],_0x15f921=_0x4161f0[_0xce35('0x14')]+_0x4161f0[_0xce35('0x15')],_0x55e36d;if(_0x15f921>=_0x59cdb1){_0x15f921=_0x59cdb1;_0x55e36d=0xc8;}else{_0x55e36d=0xce;}_0x251ca5[_0xce35('0x10')](_0x55e36d);return _0x251ca5[_0xce35('0x16')](_0xce35('0x17'),_0xc8ec3f+'-'+_0x15f921+'/'+_0x59cdb1)[_0xce35('0x12')](_0x548956);}return null;};}function patchUpdates(_0x4388fd){return function(_0x3d84b2){try{jsonpatch[_0xce35('0x18')](_0x3d84b2,_0x4388fd,!![]);}catch(_0x54d32b){return BPromise[_0xce35('0x19')](_0x54d32b);}return _0x3d84b2[_0xce35('0x1a')]();};}function saveUpdates(_0x3efb22,_0x3ee426){return function(_0x2b4b24){if(_0x2b4b24){return _0x2b4b24['update'](_0x3efb22)[_0xce35('0x1b')](function(_0x3b197d){return _0x3b197d;});}return null;};}function removeEntity(_0x28f4ea,_0x207c34){return function(_0x433861){if(_0x433861){return _0x433861[_0xce35('0x1c')]()[_0xce35('0x1b')](function(){_0x28f4ea[_0xce35('0x10')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3e7dd0,_0xc7b4d2){return function(_0x32a76d){if(!_0x32a76d){_0x3e7dd0[_0xce35('0xf')](0x194);}return _0x32a76d;};}function handleError(_0x2f6d42,_0x2f049e){_0x2f049e=_0x2f049e||0x1f4;return function(_0x369df0){logger[_0xce35('0x1d')](_0x369df0[_0xce35('0x1e')]);if(_0x369df0[_0xce35('0x1f')]){delete _0x369df0['name'];}_0x2f6d42[_0xce35('0x10')](_0x2f049e)[_0xce35('0x20')](_0x369df0);};}exports[_0xce35('0x21')]=function(_0x5dcb30,_0x422874){var _0x66335c={},_0x510307={},_0x2a5a39={'count':0x0,'rows':[]};var _0x1b41a2=db[_0xce35('0x22')][_0xce35('0x23')];_0x510307[_0xce35('0x24')]=_['keys'](_0x1b41a2);var _0x36e999={'dateStart':_0x5dcb30[_0xce35('0x25')][_0xce35('0x26')],'dateEnd':_0x5dcb30[_0xce35('0x25')][_0xce35('0x27')]};delete _0x5dcb30[_0xce35('0x25')][_0xce35('0x26')];delete _0x5dcb30[_0xce35('0x25')][_0xce35('0x27')];_0x510307['query']=_[_0xce35('0x28')](_0x5dcb30['query']);_0x510307[_0xce35('0x29')]=_[_0xce35('0x2a')](_0x510307[_0xce35('0x24')],_0x510307[_0xce35('0x25')]);_0x66335c[_0xce35('0x2b')]=_[_0xce35('0x2a')](_0x510307[_0xce35('0x24')],qs['fields'](_0x5dcb30[_0xce35('0x25')]['fields']));_0x66335c[_0xce35('0x2b')]=_0x66335c[_0xce35('0x2b')][_0xce35('0x2c')]?_0x66335c[_0xce35('0x2b')]:_0x510307['model'];if(!_0x5dcb30[_0xce35('0x25')][_0xce35('0x2d')](_0xce35('0x2e'))){_0x66335c[_0xce35('0x15')]=qs[_0xce35('0x15')](_0x5dcb30[_0xce35('0x25')][_0xce35('0x15')]);_0x66335c[_0xce35('0x14')]=qs[_0xce35('0x14')](_0x5dcb30[_0xce35('0x25')][_0xce35('0x14')]);}_0x66335c[_0xce35('0x2f')]=qs[_0xce35('0x30')](_0x5dcb30['query']['sort']);_0x66335c[_0xce35('0x31')]=qs[_0xce35('0x29')](_[_0xce35('0x32')](_0x5dcb30['query'],_0x510307[_0xce35('0x29')]));if(_0x36e999[_0xce35('0x26')]){if(_0x36e999[_0xce35('0x27')]){_0x36e999['dateEnd']=moment(_0x36e999[_0xce35('0x27')])[_0xce35('0x33')](0x1,_0xce35('0x34'));}else{_0x36e999[_0xce35('0x27')]=moment(_0x36e999[_0xce35('0x26')])[_0xce35('0x33')](0x1,_0xce35('0x34'));}_['merge'](_0x66335c['where'],{'createdAt':{'$gte':_0x36e999[_0xce35('0x26')],'$lte':_0x36e999['dateEnd']}});}if(_0x5dcb30['query'][_0xce35('0x35')]){_0x66335c[_0xce35('0x31')]=_[_0xce35('0x36')](_0x66335c['where'],{'$or':_[_0xce35('0x37')](_0x66335c['attributes'],function(_0x51e4f9){var _0x1e411a={};_0x1e411a[_0x51e4f9]={'$like':'%'+_0x5dcb30['query'][_0xce35('0x35')]+'%'};return _0x1e411a;})});}_0x66335c=_[_0xce35('0x36')]({},_0x66335c,_0x5dcb30[_0xce35('0x38')]);var _0x293ae4={'where':_0x66335c[_0xce35('0x31')]};return db[_0xce35('0x22')][_0xce35('0x13')](_0x293ae4)['then'](function(_0x10640c){_0x2a5a39[_0xce35('0x13')]=_0x10640c;if(_0x5dcb30[_0xce35('0x25')]['includeAll']){_0x66335c[_0xce35('0x39')]=[{'all':!![]}];}return db[_0xce35('0x22')][_0xce35('0x3a')](_0x66335c);})[_0xce35('0x1b')](function(_0x2c6de5){_0x2a5a39[_0xce35('0x3b')]=_0x2c6de5;return _0x2a5a39;})['then'](respondWithFilteredResult(_0x422874,_0x66335c))[_0xce35('0x3c')](handleError(_0x422874,null));};exports[_0xce35('0x3d')]=function(_0x191016,_0x210523){var _0x3a7e66={'raw':!![],'where':{'id':_0x191016[_0xce35('0x3e')]['id']}},_0x328064={};_0x328064[_0xce35('0x24')]=_[_0xce35('0x28')](db[_0xce35('0x22')]['rawAttributes']);_0x328064[_0xce35('0x25')]=_[_0xce35('0x28')](_0x191016[_0xce35('0x25')]);_0x328064['filters']=_[_0xce35('0x2a')](_0x328064[_0xce35('0x24')],_0x328064[_0xce35('0x25')]);_0x3a7e66[_0xce35('0x2b')]=_[_0xce35('0x2a')](_0x328064[_0xce35('0x24')],qs['fields'](_0x191016[_0xce35('0x25')][_0xce35('0x3f')]));_0x3a7e66['attributes']=_0x3a7e66[_0xce35('0x2b')][_0xce35('0x2c')]?_0x3a7e66['attributes']:_0x328064[_0xce35('0x24')];if(_0x191016[_0xce35('0x25')][_0xce35('0x40')]){_0x3a7e66[_0xce35('0x39')]=[{'all':!![]}];}_0x3a7e66=_[_0xce35('0x36')]({},_0x3a7e66,_0x191016[_0xce35('0x38')]);return db['Pause'][_0xce35('0x41')](_0x3a7e66)[_0xce35('0x1b')](handleEntityNotFound(_0x210523,null))[_0xce35('0x1b')](respondWithResult(_0x210523,null))[_0xce35('0x3c')](handleError(_0x210523,null));};exports[_0xce35('0x42')]=function(_0x45799b,_0x10e3b6){return db['Pause'][_0xce35('0x42')](_0x45799b[_0xce35('0x43')],{})[_0xce35('0x1b')](respondWithResult(_0x10e3b6,0xc9))[_0xce35('0x3c')](handleError(_0x10e3b6,null));};exports[_0xce35('0x44')]=function(_0x83e2ee,_0x7ba36){if(_0x83e2ee['body']['id']){delete _0x83e2ee['body']['id'];}return db[_0xce35('0x22')][_0xce35('0x41')]({'where':{'id':_0x83e2ee['params']['id']}})[_0xce35('0x1b')](handleEntityNotFound(_0x7ba36,null))[_0xce35('0x1b')](saveUpdates(_0x83e2ee[_0xce35('0x43')],null))[_0xce35('0x1b')](respondWithResult(_0x7ba36,null))[_0xce35('0x3c')](handleError(_0x7ba36,null));};exports[_0xce35('0x1c')]=function(_0x4caabe,_0x3626a9){return db[_0xce35('0x22')][_0xce35('0x41')]({'where':{'id':_0x4caabe[_0xce35('0x3e')]['id']}})[_0xce35('0x1b')](handleEntityNotFound(_0x3626a9,null))['then'](removeEntity(_0x3626a9,null))[_0xce35('0x3c')](handleError(_0x3626a9,null));};
\ No newline at end of file
index 19fd9a8..660cff5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3c9=['api','moment','bluebird','request-promise','./pause.attributes','define','lodash','util','../../config/logger'];(function(_0x2c7618,_0x26be9c){var _0x5ce3f0=function(_0x1837b3){while(--_0x1837b3){_0x2c7618['push'](_0x2c7618['shift']());}};_0x5ce3f0(++_0x26be9c);}(_0xc3c9,0x141));var _0x9c3c=function(_0x2ffd05,_0x1840e3){_0x2ffd05=_0x2ffd05-0x0;var _0x5038bf=_0xc3c9[_0x2ffd05];return _0x5038bf;};'use strict';var _=require(_0x9c3c('0x0'));var util=require(_0x9c3c('0x1'));var logger=require(_0x9c3c('0x2'))(_0x9c3c('0x3'));var moment=require(_0x9c3c('0x4'));var BPromise=require(_0x9c3c('0x5'));var rp=require(_0x9c3c('0x6'));var attributes=require(_0x9c3c('0x7'));module['exports']=function(_0x5a9bec,_0x145b3b){return _0x5a9bec[_0x9c3c('0x8')]('Pause',attributes,{'tableName':'tools_pauses','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6f39=['request-promise','./pause.attributes','Pause','tools_pauses','util','api','moment','bluebird'];(function(_0xc09922,_0xd99d6f){var _0xd56caf=function(_0x200478){while(--_0x200478){_0xc09922['push'](_0xc09922['shift']());}};_0xd56caf(++_0xd99d6f);}(_0x6f39,0x164));var _0x96f3=function(_0x119d13,_0x263cd2){_0x119d13=_0x119d13-0x0;var _0x333c35=_0x6f39[_0x119d13];return _0x333c35;};'use strict';var _=require('lodash');var util=require(_0x96f3('0x0'));var logger=require('../../config/logger')(_0x96f3('0x1'));var moment=require(_0x96f3('0x2'));var BPromise=require(_0x96f3('0x3'));var rp=require(_0x96f3('0x4'));var attributes=require(_0x96f3('0x5'));module['exports']=function(_0xf81304,_0xcedf36){return _0xf81304['define'](_0x96f3('0x6'),attributes,{'tableName':_0x96f3('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index cd951aa..c6587e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb026=['raw','where','attributes','include','map','model','then','debug','ShowPause','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','request','info','request\x20sent','stringify','error','code','Pause,\x20%s,\x20%s','message','result','Pause','find','options'];(function(_0x11008f,_0x183151){var _0x2622c8=function(_0x3df2e1){while(--_0x3df2e1){_0x11008f['push'](_0x11008f['shift']());}};_0x2622c8(++_0x183151);}(_0xb026,0x154));var _0x6b02=function(_0xc87d08,_0x59c9be){_0xc87d08=_0xc87d08-0x0;var _0x30a714=_0xb026[_0xc87d08];return _0x30a714;};'use strict';var _=require(_0x6b02('0x0'));var util=require(_0x6b02('0x1'));var moment=require(_0x6b02('0x2'));var BPromise=require(_0x6b02('0x3'));var rs=require(_0x6b02('0x4'));var fs=require('fs');var db=require(_0x6b02('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x6b02('0x6'))(_0x6b02('0x7'));var config=require(_0x6b02('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x6b02('0x9')][_0x6b02('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x52245f,_0x555887,_0x2fea06){return new BPromise(function(_0x46077a,_0x117344){return client[_0x6b02('0xb')](_0x52245f,_0x2fea06)['then'](function(_0x911178){logger[_0x6b02('0xc')]('Pause,\x20%s,\x20%s',_0x555887,_0x6b02('0xd'));logger['debug']('Pause,\x20%s,\x20%s,\x20%s',_0x555887,_0x6b02('0xd'),JSON[_0x6b02('0xe')](_0x911178));if(_0x911178[_0x6b02('0xf')]){if(_0x911178[_0x6b02('0xf')][_0x6b02('0x10')]===0x1f4){logger[_0x6b02('0xf')](_0x6b02('0x11'),_0x555887,_0x911178['error']['message']);return _0x117344(_0x911178[_0x6b02('0xf')][_0x6b02('0x12')]);}logger[_0x6b02('0xf')](_0x6b02('0x11'),_0x555887,_0x911178[_0x6b02('0xf')][_0x6b02('0x12')]);return _0x46077a(_0x911178['error'][_0x6b02('0x12')]);}else{logger[_0x6b02('0xc')]('Pause,\x20%s,\x20%s',_0x555887,_0x6b02('0xd'));_0x46077a(_0x911178[_0x6b02('0x13')][_0x6b02('0x12')]);}})['catch'](function(_0x22de6d){logger[_0x6b02('0xf')](_0x6b02('0x11'),_0x555887,_0x22de6d);_0x117344(_0x22de6d);});});}exports['ShowPause']=function(_0x43ac18){var _0x1b9462=this;return new Promise(function(_0x56d082,_0x5bb592){return db[_0x6b02('0x14')][_0x6b02('0x15')]({'raw':_0x43ac18[_0x6b02('0x16')]?_0x43ac18[_0x6b02('0x16')][_0x6b02('0x17')]===undefined?!![]:![]:!![],'where':_0x43ac18[_0x6b02('0x16')]?_0x43ac18[_0x6b02('0x16')][_0x6b02('0x18')]||null:null,'attributes':_0x43ac18['options']?_0x43ac18[_0x6b02('0x16')][_0x6b02('0x19')]||null:null,'include':_0x43ac18['options']?_0x43ac18[_0x6b02('0x16')][_0x6b02('0x1a')]?_[_0x6b02('0x1b')](_0x43ac18[_0x6b02('0x16')][_0x6b02('0x1a')],function(_0x17ac35){return{'model':db[_0x17ac35[_0x6b02('0x1c')]],'as':_0x17ac35['as'],'attributes':_0x17ac35['attributes'],'include':_0x17ac35[_0x6b02('0x1a')]?_[_0x6b02('0x1b')](_0x17ac35[_0x6b02('0x1a')],function(_0x4b9706){return{'model':db[_0x4b9706[_0x6b02('0x1c')]],'as':_0x4b9706['as'],'attributes':_0x4b9706[_0x6b02('0x19')],'include':_0x4b9706[_0x6b02('0x1a')]?_['map'](_0x4b9706[_0x6b02('0x1a')],function(_0x19191b){return{'model':db[_0x19191b[_0x6b02('0x1c')]],'as':_0x19191b['as'],'attributes':_0x19191b['attributes']};}):[]};}):[]};}):[]:[]})[_0x6b02('0x1d')](function(_0x138be4){logger['info']('ShowPause',_0x43ac18);logger[_0x6b02('0x1e')](_0x6b02('0x1f'),_0x43ac18,JSON[_0x6b02('0xe')](_0x138be4));_0x56d082(_0x138be4);})[_0x6b02('0x20')](function(_0x555dbc){logger[_0x6b02('0xf')](_0x6b02('0x1f'),_0x555dbc[_0x6b02('0x12')],_0x43ac18);_0x5bb592(_0x1b9462[_0x6b02('0xf')](0x1f4,_0x555dbc[_0x6b02('0x12')]));});});};
\ No newline at end of file
+var _0x5946=['http','request','then','info','Pause,\x20%s,\x20%s','request\x20sent','debug','Pause,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','ShowPause','options','attributes','include','map','model','lodash','moment','bluebird','../../mysqldb','../../config/utils','rpc','../../config/environment','client'];(function(_0x110c3d,_0x12ee06){var _0x226d67=function(_0x1fb6e1){while(--_0x1fb6e1){_0x110c3d['push'](_0x110c3d['shift']());}};_0x226d67(++_0x12ee06);}(_0x5946,0x13c));var _0x6594=function(_0x494d1f,_0x3f72ff){_0x494d1f=_0x494d1f-0x0;var _0x457b6e=_0x5946[_0x494d1f];return _0x457b6e;};'use strict';var _=require(_0x6594('0x0'));var util=require('util');var moment=require(_0x6594('0x1'));var BPromise=require(_0x6594('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x6594('0x3'))['db'];var utils=require(_0x6594('0x4'));var logger=require('../../config/logger')(_0x6594('0x5'));var config=require(_0x6594('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x6594('0x7')][_0x6594('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x5e6afb,_0x4e168b,_0x157fbc){return new BPromise(function(_0x144af6,_0x41b2cf){return client[_0x6594('0x9')](_0x5e6afb,_0x157fbc)[_0x6594('0xa')](function(_0x4bd7e4){logger[_0x6594('0xb')](_0x6594('0xc'),_0x4e168b,_0x6594('0xd'));logger[_0x6594('0xe')](_0x6594('0xf'),_0x4e168b,_0x6594('0xd'),JSON[_0x6594('0x10')](_0x4bd7e4));if(_0x4bd7e4[_0x6594('0x11')]){if(_0x4bd7e4['error'][_0x6594('0x12')]===0x1f4){logger[_0x6594('0x11')]('Pause,\x20%s,\x20%s',_0x4e168b,_0x4bd7e4[_0x6594('0x11')][_0x6594('0x13')]);return _0x41b2cf(_0x4bd7e4[_0x6594('0x11')][_0x6594('0x13')]);}logger['error'](_0x6594('0xc'),_0x4e168b,_0x4bd7e4['error'][_0x6594('0x13')]);return _0x144af6(_0x4bd7e4['error'][_0x6594('0x13')]);}else{logger[_0x6594('0xb')](_0x6594('0xc'),_0x4e168b,'request\x20sent');_0x144af6(_0x4bd7e4['result'][_0x6594('0x13')]);}})[_0x6594('0x14')](function(_0x22534c){logger[_0x6594('0x11')](_0x6594('0xc'),_0x4e168b,_0x22534c);_0x41b2cf(_0x22534c);});});}exports[_0x6594('0x15')]=function(_0x3163ec){var _0x39e543=this;return new Promise(function(_0x58b868,_0x243a98){return db['Pause']['find']({'raw':_0x3163ec[_0x6594('0x16')]?_0x3163ec[_0x6594('0x16')]['raw']===undefined?!![]:![]:!![],'where':_0x3163ec[_0x6594('0x16')]?_0x3163ec[_0x6594('0x16')]['where']||null:null,'attributes':_0x3163ec[_0x6594('0x16')]?_0x3163ec[_0x6594('0x16')][_0x6594('0x17')]||null:null,'include':_0x3163ec[_0x6594('0x16')]?_0x3163ec['options'][_0x6594('0x18')]?_[_0x6594('0x19')](_0x3163ec[_0x6594('0x16')][_0x6594('0x18')],function(_0x131bed){return{'model':db[_0x131bed[_0x6594('0x1a')]],'as':_0x131bed['as'],'attributes':_0x131bed['attributes'],'include':_0x131bed[_0x6594('0x18')]?_['map'](_0x131bed['include'],function(_0x4c5438){return{'model':db[_0x4c5438[_0x6594('0x1a')]],'as':_0x4c5438['as'],'attributes':_0x4c5438[_0x6594('0x17')],'include':_0x4c5438[_0x6594('0x18')]?_[_0x6594('0x19')](_0x4c5438['include'],function(_0x4b0e41){return{'model':db[_0x4b0e41[_0x6594('0x1a')]],'as':_0x4b0e41['as'],'attributes':_0x4b0e41[_0x6594('0x17')]};}):[]};}):[]};}):[]:[]})[_0x6594('0xa')](function(_0x3fca08){logger[_0x6594('0xb')](_0x6594('0x15'),_0x3163ec);logger['debug'](_0x6594('0x15'),_0x3163ec,JSON['stringify'](_0x3fca08));_0x58b868(_0x3fca08);})[_0x6594('0x14')](function(_0xb89bb8){logger['error'](_0x6594('0x15'),_0xb89bb8[_0x6594('0x13')],_0x3163ec);_0x243a98(_0x39e543[_0x6594('0x11')](0x1f4,_0xb89bb8[_0x6594('0x13')]));});});};
\ No newline at end of file
index c9ca761..6824345 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xff9f=['multer','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./plugin.controller','get','isAuthenticated','/webhook','webhookGet','/:id','/:id/download','download','diskStorage','join','root','server/files/plugins','originalname','format','%s-%s%s','basename','extname','now','post','single','file','upload','put','delete','exports'];(function(_0x4d21ff,_0x19d202){var _0x22b554=function(_0x4473c5){while(--_0x4473c5){_0x4d21ff['push'](_0x4d21ff['shift']());}};_0x22b554(++_0x19d202);}(_0xff9f,0x140));var _0xfff9=function(_0x4b4638,_0xe99cda){_0x4b4638=_0x4b4638-0x0;var _0x59e92b=_0xff9f[_0x4b4638];return _0x59e92b;};'use strict';var multer=require(_0xfff9('0x0'));var util=require(_0xfff9('0x1'));var path=require(_0xfff9('0x2'));var express=require('express');var router=express[_0xfff9('0x3')]();var auth=require(_0xfff9('0x4'));var interaction=require(_0xfff9('0x5'));var config=require(_0xfff9('0x6'));var controller=require(_0xfff9('0x7'));router[_0xfff9('0x8')]('/',auth[_0xfff9('0x9')](),controller['index']);router[_0xfff9('0x8')](_0xfff9('0xa'),controller[_0xfff9('0xb')]);router[_0xfff9('0x8')](_0xfff9('0xc'),auth[_0xfff9('0x9')](),controller['show']);router[_0xfff9('0x8')](_0xfff9('0xd'),auth[_0xfff9('0x9')](),controller[_0xfff9('0xe')]);var upload=multer({'storage':multer[_0xfff9('0xf')]({'destination':function(_0x5df42f,_0x4c2f9f,_0x926cd0){_0x926cd0(null,path[_0xfff9('0x10')](config[_0xfff9('0x11')],_0xfff9('0x12')));},'filename':function(_0x41d145,_0x5f188e,_0x27744c){_0x5f188e[_0xfff9('0x13')]=_0x5f188e[_0xfff9('0x13')]['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x27744c(null,util[_0xfff9('0x14')](_0xfff9('0x15'),path[_0xfff9('0x16')](_0x5f188e['originalname'],path[_0xfff9('0x17')](_0x5f188e[_0xfff9('0x13')])),Date[_0xfff9('0x18')](),path[_0xfff9('0x17')](_0x5f188e[_0xfff9('0x13')])));}})});router[_0xfff9('0x19')]('/',upload[_0xfff9('0x1a')](_0xfff9('0x1b')),controller[_0xfff9('0x1c')]);router[_0xfff9('0x19')](_0xfff9('0xa'),controller['webhookPost']);router[_0xfff9('0x1d')](_0xfff9('0xc'),auth[_0xfff9('0x9')](),controller['update']);router[_0xfff9('0x1e')](_0xfff9('0xc'),auth[_0xfff9('0x9')](),controller['delete']);module[_0xfff9('0x1f')]=router;
\ No newline at end of file
+var _0x5615=['../../components/interaction/service','../../config/environment','./plugin.controller','isAuthenticated','get','/webhook','webhookGet','/:id/download','download','diskStorage','join','root','originalname','replace','format','%s-%s%s','basename','extname','single','file','upload','put','/:id','delete','util','path','express'];(function(_0xf9be28,_0x17863c){var _0x16e567=function(_0x55b20e){while(--_0x55b20e){_0xf9be28['push'](_0xf9be28['shift']());}};_0x16e567(++_0x17863c);}(_0x5615,0x1c8));var _0x5561=function(_0x26d70a,_0x2eb841){_0x26d70a=_0x26d70a-0x0;var _0x2e7653=_0x5615[_0x26d70a];return _0x2e7653;};'use strict';var multer=require('multer');var util=require(_0x5561('0x0'));var path=require(_0x5561('0x1'));var express=require(_0x5561('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x5561('0x3'));var config=require(_0x5561('0x4'));var controller=require(_0x5561('0x5'));router['get']('/',auth[_0x5561('0x6')](),controller['index']);router[_0x5561('0x7')](_0x5561('0x8'),controller[_0x5561('0x9')]);router[_0x5561('0x7')]('/:id',auth['isAuthenticated'](),controller['show']);router[_0x5561('0x7')](_0x5561('0xa'),auth['isAuthenticated'](),controller[_0x5561('0xb')]);var upload=multer({'storage':multer[_0x5561('0xc')]({'destination':function(_0x16768d,_0x110508,_0x1751d4){_0x1751d4(null,path[_0x5561('0xd')](config[_0x5561('0xe')],'server/files/plugins'));},'filename':function(_0xce166c,_0x252e11,_0x1f5284){_0x252e11[_0x5561('0xf')]=_0x252e11[_0x5561('0xf')][_0x5561('0x10')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x1f5284(null,util[_0x5561('0x11')](_0x5561('0x12'),path[_0x5561('0x13')](_0x252e11['originalname'],path[_0x5561('0x14')](_0x252e11[_0x5561('0xf')])),Date['now'](),path[_0x5561('0x14')](_0x252e11[_0x5561('0xf')])));}})});router['post']('/',upload[_0x5561('0x15')](_0x5561('0x16')),controller[_0x5561('0x17')]);router['post'](_0x5561('0x8'),controller['webhookPost']);router[_0x5561('0x18')](_0x5561('0x19'),auth['isAuthenticated'](),controller['update']);router[_0x5561('0x1a')](_0x5561('0x19'),auth[_0x5561('0x6')](),controller[_0x5561('0x1a')]);module['exports']=router;
\ No newline at end of file
index 61726ce..09428fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x93ac=['never','Indicates\x20whether\x20to\x20display\x20the\x20plugin\x20in\x20the\x20sidebar.','sequelize','exports','STRING','ENUM','script','TEXT','The\x20physical\x20path\x20where\x20the\x20plugin\x20is\x20stored.','BOOLEAN','Indicates\x20whether\x20the\x20plugin\x20is\x20installed.\x20Updated\x20when\x20the\x20plugin\x20is\x20installed/uninstalled.','agentOnly','always'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0x93ac,0x9e));var _0xc93a=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x93ac[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xc93a('0x0'));module[_0xc93a('0x1')]={'name':{'type':Sequelize[_0xc93a('0x2')]},'type':{'type':Sequelize[_0xc93a('0x3')]('html',_0xc93a('0x4'))},'description':{'type':Sequelize[_0xc93a('0x5')]},'version':{'type':Sequelize['TEXT']},'path':{'type':Sequelize['STRING'],'comment':_0xc93a('0x6')},'active':{'type':Sequelize[_0xc93a('0x7')],'defaultValue':0x0,'comment':_0xc93a('0x8')},'sidebar':{'type':Sequelize['ENUM']('adminOnly',_0xc93a('0x9'),_0xc93a('0xa'),_0xc93a('0xb')),'defaultValue':_0xc93a('0xa'),'comment':_0xc93a('0xc')},'icon':{'type':Sequelize[_0xc93a('0x2')]},'adminUrl':{'type':Sequelize['STRING']},'agentUrl':{'type':Sequelize['STRING']},'scriptName':{'type':Sequelize['STRING']},'scriptPath':{'type':Sequelize[_0xc93a('0x2')]}};
\ No newline at end of file
+var _0x5d8c=['BOOLEAN','ENUM','agentOnly','always','never','sequelize','exports','html','STRING','The\x20physical\x20path\x20where\x20the\x20plugin\x20is\x20stored.'];(function(_0x11c944,_0x2d803b){var _0x1c0e7d=function(_0x7c75f3){while(--_0x7c75f3){_0x11c944['push'](_0x11c944['shift']());}};_0x1c0e7d(++_0x2d803b);}(_0x5d8c,0x87));var _0xc5d8=function(_0x5bd7d0,_0x535f62){_0x5bd7d0=_0x5bd7d0-0x0;var _0x4dfccb=_0x5d8c[_0x5bd7d0];return _0x4dfccb;};'use strict';var Sequelize=require(_0xc5d8('0x0'));module[_0xc5d8('0x1')]={'name':{'type':Sequelize['STRING']},'type':{'type':Sequelize['ENUM'](_0xc5d8('0x2'),'script')},'description':{'type':Sequelize['TEXT']},'version':{'type':Sequelize['TEXT']},'path':{'type':Sequelize[_0xc5d8('0x3')],'comment':_0xc5d8('0x4')},'active':{'type':Sequelize[_0xc5d8('0x5')],'defaultValue':0x0,'comment':'Indicates\x20whether\x20the\x20plugin\x20is\x20installed.\x20Updated\x20when\x20the\x20plugin\x20is\x20installed/uninstalled.'},'sidebar':{'type':Sequelize[_0xc5d8('0x6')]('adminOnly',_0xc5d8('0x7'),_0xc5d8('0x8'),_0xc5d8('0x9')),'defaultValue':'always','comment':'Indicates\x20whether\x20to\x20display\x20the\x20plugin\x20in\x20the\x20sidebar.'},'icon':{'type':Sequelize[_0xc5d8('0x3')]},'adminUrl':{'type':Sequelize[_0xc5d8('0x3')]},'agentUrl':{'type':Sequelize[_0xc5d8('0x3')]},'scriptName':{'type':Sequelize[_0xc5d8('0x3')]},'scriptPath':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 39448a9..24c3ca8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdd54=['admin','views','agent','Invalid\x20manifest:\x20no\x20view\x20specified','scriptName','Invalid\x20manifest:\x20script\x20name\x20missing','scriptPath','Invalid\x20manifest:\x20script\x20path\x20missing','Invalid\x20manifest:\x20invalid\x20type','description','sidebar','always','icon','icon-apps','test','plugins','Warning:\x20admin\x20view\x20not\x20specified','Warning:\x20agent\x20view\x20not\x20specified','script','create','Extracted\x20folder\x20removed','delete','webhookGet','resolve','\x27PATH\x27\x20parameter\x20not\x20specified','\x27PORT\x27\x20parameter\x20not\x20specified','hostname','port','http://localhost:','encoding','method','format','headers','body','endsWith','statusCode','webhookPost','%s%s','fast-json-patch','request-promise','bluebird','util','path','sox','ejs','lodash','crypto','to-csv','querystring','rimraf','archiver','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','localhost','./plugin.socket','register','sendStatus','status','end','count','offset','set','Content-Range','json','apply','reject','save','then','destroy','error','stack','name','send','index','Plugin','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where','pick','add','filter','map','merge','options','includeAll','include','findAll','rows','catch','params','find','download','join','root','server/files/plugins','%s.zip','createWriteStream','zip','warning','code','ENOENT','Sequelize','Error','Error\x20while\x20generating\x20the\x20zip\x20archive','pipe','dirname','basename','node_modules/**/*','attachments/**/*','finalize','close','existsSync','Plugin\x20not\x20found','Error\x20while\x20downloading\x20the\x20plugin','unlinkSync','Download\x20completed','info','Temporary\x20file\x20removed','upload','filename','extname','file','Plugin\x20upload\x20destination:\x20%s','chmodSync','readdirSync','Invalid\x20plugin\x20structure','lstatSync','isFile','isDirectory','length','some','Plugin\x20manifest\x20missing','readFileSync','manifest.json','parse','undefined','Invalid\x20manifest:\x20name\x20missing','type','Invalid\x20manifest:\x20type\x20missing','version','Invalid\x20manifest:\x20version\x20not\x20specified','parameters','Invalid\x20manifest:\x20parameters\x20missing','html','Invalid\x20manifest:\x20views\x20missing'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xdd54,0xc7));var _0x4dd5=function(_0x2e14f2,_0x377d0d){_0x2e14f2=_0x2e14f2-0x0;var _0x12cc03=_0xdd54[_0x2e14f2];return _0x12cc03;};'use strict';var jsonpatch=require(_0x4dd5('0x0'));var rp=require(_0x4dd5('0x1'));var moment=require('moment');var BPromise=require(_0x4dd5('0x2'));var Mustache=require('mustache');var util=require(_0x4dd5('0x3'));var path=require(_0x4dd5('0x4'));var sox=require(_0x4dd5('0x5'));var csv=require('to-csv');var ejs=require(_0x4dd5('0x6'));var fs=require('fs');var _=require(_0x4dd5('0x7'));var squel=require('squel');var crypto=require(_0x4dd5('0x8'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x4dd5('0x9'));var querystring=require(_0x4dd5('0xa'));var Papa=require('papaparse');var extract=require('extract-zip');var rimraf=require(_0x4dd5('0xb'));var archiver=require(_0x4dd5('0xc'));var qs=require(_0x4dd5('0xd'));var logger=require('../../config/logger')(_0x4dd5('0xe'));var utils=require(_0x4dd5('0xf'));var config=require(_0x4dd5('0x10'));var db=require(_0x4dd5('0x11'))['db'];var socket=require('socket.io-emitter')({'host':_0x4dd5('0x12'),'port':0x18eb});require(_0x4dd5('0x13'))[_0x4dd5('0x14')](socket);function respondWithStatusCode(_0x5a836e,_0x57d85c){_0x57d85c=_0x57d85c||0xcc;return function(_0x3ad69a){if(_0x3ad69a){return _0x5a836e[_0x4dd5('0x15')](_0x57d85c);}return _0x5a836e[_0x4dd5('0x16')](_0x57d85c)[_0x4dd5('0x17')]();};}function respondWithResult(_0x3f44fa,_0x495e9f){_0x495e9f=_0x495e9f||0xc8;return function(_0x5c48d0){if(_0x5c48d0){return _0x3f44fa[_0x4dd5('0x16')](_0x495e9f)['json'](_0x5c48d0);}};}function respondWithFilteredResult(_0x5c13e2,_0x2e6a6d){return function(_0x3b31f3){if(_0x3b31f3){var _0x42094a=_0x3b31f3[_0x4dd5('0x18')],_0xf00b02=_0x2e6a6d[_0x4dd5('0x19')],_0x37b2e7=_0x2e6a6d[_0x4dd5('0x19')]+_0x2e6a6d['limit'],_0x2ba0d0;if(_0x37b2e7>=_0x42094a){_0x37b2e7=_0x42094a;_0x2ba0d0=0xc8;}else{_0x2ba0d0=0xce;}_0x5c13e2['status'](_0x2ba0d0);return _0x5c13e2[_0x4dd5('0x1a')](_0x4dd5('0x1b'),_0xf00b02+'-'+_0x37b2e7+'/'+_0x42094a)[_0x4dd5('0x1c')](_0x3b31f3);}return null;};}function patchUpdates(_0x3a1e46){return function(_0x41e404){try{jsonpatch[_0x4dd5('0x1d')](_0x41e404,_0x3a1e46,!![]);}catch(_0x2fd87c){return BPromise[_0x4dd5('0x1e')](_0x2fd87c);}return _0x41e404[_0x4dd5('0x1f')]();};}function saveUpdates(_0x5b687c,_0x4ee647){return function(_0x181c6f){if(_0x181c6f){return _0x181c6f['update'](_0x5b687c)[_0x4dd5('0x20')](function(_0x556710){return _0x556710;});}return null;};}function removeEntity(_0x693d30,_0x5104c9){return function(_0x40625b){if(_0x40625b){return _0x40625b[_0x4dd5('0x21')]()[_0x4dd5('0x20')](function(){_0x693d30[_0x4dd5('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5457d2,_0x150aa0){return function(_0x33dc76){if(!_0x33dc76){_0x5457d2[_0x4dd5('0x15')](0x194);}return _0x33dc76;};}function handleError(_0x24e69f,_0xb2f538){_0xb2f538=_0xb2f538||0x1f4;return function(_0x147e0c){logger[_0x4dd5('0x22')](_0x147e0c[_0x4dd5('0x23')]);if(_0x147e0c[_0x4dd5('0x24')]){delete _0x147e0c['name'];}_0x24e69f['status'](_0xb2f538)[_0x4dd5('0x25')](_0x147e0c);};}exports[_0x4dd5('0x26')]=function(_0x363a88,_0xfa2cf6){var _0x436199={},_0x2e3139={},_0x43e9fa={'count':0x0,'rows':[]};var _0x176ada=db[_0x4dd5('0x27')][_0x4dd5('0x28')];_0x2e3139['model']=_[_0x4dd5('0x29')](_0x176ada);var _0x184951={'dateStart':_0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x2b')],'dateEnd':_0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x2c')]};delete _0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x2b')];delete _0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x2c')];_0x2e3139[_0x4dd5('0x2a')]=_[_0x4dd5('0x29')](_0x363a88[_0x4dd5('0x2a')]);_0x2e3139[_0x4dd5('0x2d')]=_[_0x4dd5('0x2e')](_0x2e3139[_0x4dd5('0x2f')],_0x2e3139[_0x4dd5('0x2a')]);_0x436199[_0x4dd5('0x30')]=_[_0x4dd5('0x2e')](_0x2e3139[_0x4dd5('0x2f')],qs[_0x4dd5('0x31')](_0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x31')]));_0x436199[_0x4dd5('0x30')]=_0x436199[_0x4dd5('0x30')]['length']?_0x436199[_0x4dd5('0x30')]:_0x2e3139[_0x4dd5('0x2f')];if(!_0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x32')](_0x4dd5('0x33'))){_0x436199[_0x4dd5('0x34')]=qs[_0x4dd5('0x34')](_0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x34')]);_0x436199['offset']=qs[_0x4dd5('0x19')](_0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x19')]);}_0x436199[_0x4dd5('0x35')]=qs[_0x4dd5('0x36')](_0x363a88['query']['sort']);_0x436199[_0x4dd5('0x37')]=qs['filters'](_[_0x4dd5('0x38')](_0x363a88[_0x4dd5('0x2a')],_0x2e3139[_0x4dd5('0x2d')]));if(_0x184951[_0x4dd5('0x2b')]){if(_0x184951['dateEnd']){_0x184951[_0x4dd5('0x2c')]=moment(_0x184951[_0x4dd5('0x2c')])[_0x4dd5('0x39')](0x1,'day');}else{_0x184951[_0x4dd5('0x2c')]=moment(_0x184951[_0x4dd5('0x2b')])[_0x4dd5('0x39')](0x1,'day');}_['merge'](_0x436199['where'],{'createdAt':{'$gte':_0x184951[_0x4dd5('0x2b')],'$lte':_0x184951['dateEnd']}});}if(_0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x3a')]){_0x436199['where']=_['merge'](_0x436199[_0x4dd5('0x37')],{'$or':_[_0x4dd5('0x3b')](_0x436199[_0x4dd5('0x30')],function(_0x8cf7dd){var _0x4b6058={};_0x4b6058[_0x8cf7dd]={'$like':'%'+_0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x3a')]+'%'};return _0x4b6058;})});}_0x436199=_[_0x4dd5('0x3c')]({},_0x436199,_0x363a88[_0x4dd5('0x3d')]);var _0x44de51={'where':_0x436199[_0x4dd5('0x37')]};return db[_0x4dd5('0x27')][_0x4dd5('0x18')](_0x44de51)['then'](function(_0x5c412f){_0x43e9fa['count']=_0x5c412f;if(_0x363a88[_0x4dd5('0x2a')][_0x4dd5('0x3e')]){_0x436199[_0x4dd5('0x3f')]=[{'all':!![]}];}return db[_0x4dd5('0x27')][_0x4dd5('0x40')](_0x436199);})['then'](function(_0x33e2ef){_0x43e9fa[_0x4dd5('0x41')]=_0x33e2ef;return _0x43e9fa;})[_0x4dd5('0x20')](respondWithFilteredResult(_0xfa2cf6,_0x436199))[_0x4dd5('0x42')](handleError(_0xfa2cf6,null));};exports['show']=function(_0x535e3d,_0x408236){var _0x27315e={'raw':!![],'where':{'id':_0x535e3d[_0x4dd5('0x43')]['id']}},_0x308311={};_0x308311['model']=_[_0x4dd5('0x29')](db[_0x4dd5('0x27')][_0x4dd5('0x28')]);_0x308311['query']=_[_0x4dd5('0x29')](_0x535e3d[_0x4dd5('0x2a')]);_0x308311[_0x4dd5('0x2d')]=_[_0x4dd5('0x2e')](_0x308311[_0x4dd5('0x2f')],_0x308311['query']);_0x27315e[_0x4dd5('0x30')]=_[_0x4dd5('0x2e')](_0x308311[_0x4dd5('0x2f')],qs['fields'](_0x535e3d['query'][_0x4dd5('0x31')]));_0x27315e[_0x4dd5('0x30')]=_0x27315e[_0x4dd5('0x30')]['length']?_0x27315e['attributes']:_0x308311[_0x4dd5('0x2f')];if(_0x535e3d['query']['includeAll']){_0x27315e[_0x4dd5('0x3f')]=[{'all':!![]}];}_0x27315e=_[_0x4dd5('0x3c')]({},_0x27315e,_0x535e3d[_0x4dd5('0x3d')]);return db[_0x4dd5('0x27')][_0x4dd5('0x44')](_0x27315e)[_0x4dd5('0x20')](handleEntityNotFound(_0x408236,null))[_0x4dd5('0x20')](respondWithResult(_0x408236,null))[_0x4dd5('0x42')](handleError(_0x408236,null));};exports[_0x4dd5('0x45')]=function(_0x50aa42,_0x38eed8,_0xf3ce78){return db['Plugin']['find']({'where':{'id':_0x50aa42[_0x4dd5('0x43')]['id']},'attributes':[_0x4dd5('0x24'),'path'],'raw':!![]})['then'](handleEntityNotFound(_0x38eed8,null))[_0x4dd5('0x20')](function(_0x2fc6d6){if(_0x2fc6d6){var _0x51c719=path[_0x4dd5('0x46')](config[_0x4dd5('0x47')],_0x4dd5('0x48'),util['format'](_0x4dd5('0x49'),path['basename'](_0x2fc6d6[_0x4dd5('0x4')])));var _0x128e73=fs[_0x4dd5('0x4a')](_0x51c719);var _0x29cff0=archiver(_0x4dd5('0x4b'),{'zlib':{'level':0x9}});_0x29cff0['on'](_0x4dd5('0x4c'),function(_0x5991ed){if(_0x5991ed[_0x4dd5('0x4d')]===_0x4dd5('0x4e')){logger['error'](_0x5991ed);}else{throw new db[(_0x4dd5('0x4f'))][(_0x4dd5('0x50'))]('Error\x20while\x20generating\x20the\x20zip\x20archive');}});_0x29cff0['on'](_0x4dd5('0x22'),function(_0x466e10){throw new db['Sequelize'][(_0x4dd5('0x50'))](_0x4dd5('0x51'));});_0x29cff0[_0x4dd5('0x52')](_0x128e73);_0x29cff0['glob']('**/*',{'cwd':path[_0x4dd5('0x46')](config['root'],_0x4dd5('0x48'),path[_0x4dd5('0x53')](_0x2fc6d6[_0x4dd5('0x4')])),'ignore':[path['join'](path[_0x4dd5('0x54')](_0x2fc6d6[_0x4dd5('0x4')]),_0x4dd5('0x55')),path['join'](path[_0x4dd5('0x54')](_0x2fc6d6[_0x4dd5('0x4')]),_0x4dd5('0x56'))],'nodir':!![]})[_0x4dd5('0x57')]();_0x128e73['on'](_0x4dd5('0x58'),function(){if(!fs[_0x4dd5('0x59')](_0x51c719)){throw new db['Sequelize']['Error'](_0x4dd5('0x5a'));}return _0x38eed8[_0x4dd5('0x45')](_0x51c719,util['format'](_0x4dd5('0x49'),path['basename'](_0x2fc6d6[_0x4dd5('0x4')])),function(_0x81a722){if(_0x81a722){throw new db['Sequelize'][(_0x4dd5('0x50'))](_0x4dd5('0x5b'));}fs[_0x4dd5('0x5c')](_0x51c719);logger['info'](_0x4dd5('0x5d'));logger[_0x4dd5('0x5e')](_0x4dd5('0x5f'));});});}return null;})[_0x4dd5('0x42')](handleError(_0x38eed8,null));};exports[_0x4dd5('0x60')]=function(_0xf59dff,_0x5bdf9d,_0x2eda01){var _0x1eb45d=path[_0x4dd5('0x54')](_0xf59dff['file'][_0x4dd5('0x61')],path[_0x4dd5('0x62')](_0xf59dff[_0x4dd5('0x63')]['filename']));var _0x37538f=path[_0x4dd5('0x46')](config[_0x4dd5('0x47')],_0x4dd5('0x48'),_0xf59dff[_0x4dd5('0x63')][_0x4dd5('0x61')]);var _0x25b1ec=path[_0x4dd5('0x46')](config[_0x4dd5('0x47')],_0x4dd5('0x48'),_0x1eb45d);logger['info']('Plugin\x20upload\x20filepath:\x20%s',_0x37538f);logger[_0x4dd5('0x5e')](_0x4dd5('0x64'),_0x25b1ec);try{fs[_0x4dd5('0x65')](_0x37538f,parseInt('0777',0x8));extract(_0x37538f,{'dir':_0x25b1ec},function(_0x4fef4f){if(_0x4fef4f){logger['error'](_0x4fef4f);handleError(_0x4fef4f,!![]);};var _0x4dcd9e=fs[_0x4dd5('0x66')](_0x25b1ec);if(_0x4dcd9e['length']>0x1){removeReferences(_0x37538f,_0x25b1ec);logger['error'](_0x4dd5('0x67'));return _0x2eda01(new Error(_0x4dd5('0x67')));}var _0x207c35=fs[_0x4dd5('0x68')](path['join'](_0x25b1ec,_0x4dcd9e[0x0]));if(_0x207c35[_0x4dd5('0x69')]()){removeReferences(_0x37538f,_0x25b1ec);logger[_0x4dd5('0x22')](_0x4dd5('0x67'));return _0x2eda01(new Error('Invalid\x20plugin\x20structure'));}if(_0x207c35[_0x4dd5('0x6a')]()){var _0x24bff8=fs['readdirSync'](path[_0x4dd5('0x46')](_0x25b1ec,_0x4dcd9e[0x0]));if(_0x24bff8[_0x4dd5('0x6b')]===0x0){removeReferences(_0x37538f,_0x25b1ec);logger[_0x4dd5('0x22')]('Invalid\x20plugin\x20structure');return _0x2eda01(new Error('Invalid\x20plugin\x20structure'));}var _0x912c2a=_0x24bff8[_0x4dd5('0x6c')](function(_0x3a45f1){return _0x3a45f1==='manifest.json';});if(!_0x912c2a){return _0x2eda01(new Error(_0x4dd5('0x6d')));}var _0xeea4cf=fs[_0x4dd5('0x6e')](path['join'](_0x25b1ec,_0x4dcd9e[0x0],_0x4dd5('0x6f')));var _0x2a3307=JSON[_0x4dd5('0x70')](_0xeea4cf);if(_0x4dd5('0x71')==typeof _0x2a3307['name']){return _0x2eda01(new Error(_0x4dd5('0x72')));}if(_0x4dd5('0x71')==typeof _0x2a3307[_0x4dd5('0x73')]){return _0x2eda01(new Error(_0x4dd5('0x74')));}if(_0x4dd5('0x71')==typeof _0x2a3307[_0x4dd5('0x75')]){return _0x2eda01(new Error(_0x4dd5('0x76')));}if(_0x4dd5('0x71')==typeof _0x2a3307[_0x4dd5('0x77')]){return _0x2eda01(new Error(_0x4dd5('0x78')));}if(_0x2a3307[_0x4dd5('0x73')]===_0x4dd5('0x79')){if(_0x4dd5('0x71')==typeof _0x2a3307[_0x4dd5('0x77')]['views']){return _0x2eda01(new Error(_0x4dd5('0x7a')));}if('undefined'==typeof _0x2a3307[_0x4dd5('0x77')]['views'][_0x4dd5('0x7b')]&&_0x4dd5('0x71')==typeof _0x2a3307['parameters'][_0x4dd5('0x7c')][_0x4dd5('0x7d')]){return _0x2eda01(new Error(_0x4dd5('0x7e')));}}else if(_0x2a3307[_0x4dd5('0x73')]==='script'){if(_0x4dd5('0x71')==typeof _0x2a3307['parameters'][_0x4dd5('0x7f')]){return _0x2eda01(new Error(_0x4dd5('0x80')));}if('undefined'==typeof _0x2a3307['parameters'][_0x4dd5('0x81')]){return _0x2eda01(new Error(_0x4dd5('0x82')));}}else{return _0x2eda01(new Error(_0x4dd5('0x83')));}var _0x1df587=_0x2a3307[_0x4dd5('0x24')];var _0x1cf158=_0x2a3307[_0x4dd5('0x84')];var _0x20c9f5=_0x2a3307[_0x4dd5('0x73')];var _0x5e3a9c=_0x2a3307[_0x4dd5('0x85')]?_0x2a3307[_0x4dd5('0x85')]:_0x4dd5('0x86');var _0x15de89=_0x2a3307[_0x4dd5('0x87')]?_0x2a3307['icon']:_0x4dd5('0x88');var _0x3a3458='';var _0x58343f='';var _0x1d7c00='';var _0x4742ac='';var _0x4aa7a8=_0x2a3307['version'];if(_0x20c9f5===_0x4dd5('0x79')){if('undefined'!=typeof _0x2a3307[_0x4dd5('0x77')][_0x4dd5('0x7c')]['admin']){var _0x113560=_0x2a3307['parameters'][_0x4dd5('0x7c')]['admin'];if(!/^(f|ht)tps?:\/\//i[_0x4dd5('0x89')](_0x113560)){_0x3a3458=path['join'](_0x4dd5('0x8a'),_0x1eb45d,_0x4dcd9e[0x0],_0x113560);}else{_0x3a3458=_0x113560;}}else{logger[_0x4dd5('0x5e')](_0x4dd5('0x8b'));}if(_0x4dd5('0x71')!=typeof _0x2a3307[_0x4dd5('0x77')][_0x4dd5('0x7c')]['agent']){var _0x45833d=_0x2a3307[_0x4dd5('0x77')][_0x4dd5('0x7c')][_0x4dd5('0x7d')];if(!/^(f|ht)tps?:\/\//i[_0x4dd5('0x89')](_0x45833d)){_0x58343f=path[_0x4dd5('0x46')](_0x4dd5('0x8a'),_0x1eb45d,_0x4dcd9e[0x0],_0x45833d);}else{_0x58343f=_0x45833d;}}else{logger['info'](_0x4dd5('0x8c'));}}else if(_0x20c9f5===_0x4dd5('0x8d')){_0x1d7c00=_0x2a3307['parameters'][_0x4dd5('0x7f')];_0x4742ac=_0x2a3307[_0x4dd5('0x77')]['scriptPath'];if(_0x4dd5('0x71')!=typeof _0x2a3307['parameters'][_0x4dd5('0x7c')]){if('undefined'!=typeof _0x2a3307['parameters'][_0x4dd5('0x7c')][_0x4dd5('0x7b')]){var _0x113560=_0x2a3307[_0x4dd5('0x77')]['views']['admin'];if(!/^(f|ht)tps?:\/\//i[_0x4dd5('0x89')](_0x113560)){_0x3a3458=path[_0x4dd5('0x46')]('plugins',_0x1eb45d,_0x4dcd9e[0x0],_0x113560);}else{_0x3a3458=_0x113560;}}if('undefined'!=typeof _0x2a3307['parameters']['views'][_0x4dd5('0x7d')]){var _0x45833d=_0x2a3307[_0x4dd5('0x77')][_0x4dd5('0x7c')][_0x4dd5('0x7d')];if(!/^(f|ht)tps?:\/\//i['test'](_0x45833d)){_0x58343f=path[_0x4dd5('0x46')](_0x4dd5('0x8a'),_0x1eb45d,_0x4dcd9e[0x0],_0x45833d);}else{_0x58343f=_0x45833d;}}}}var _0x2c83fe={'name':_0x1df587,'description':_0x1cf158,'path':path[_0x4dd5('0x46')](_0x1eb45d,_0x4dcd9e[0x0]),'type':_0x20c9f5,'sidebar':_0x5e3a9c,'icon':_0x15de89,'adminUrl':_0x3a3458,'agentUrl':_0x58343f,'scriptName':_0x1d7c00,'scriptPath':_0x4742ac,'version':_0x4aa7a8};removeReferences(_0x37538f,null);return db['Plugin'][_0x4dd5('0x8e')](_0x2c83fe)[_0x4dd5('0x20')](respondWithResult(_0x5bdf9d,null))[_0x4dd5('0x42')](handleError(_0x5bdf9d,null));}});}catch(_0x334497){_0x5bdf9d[_0x4dd5('0x16')](0x1f4)[_0x4dd5('0x25')](_0x334497);}};function removeReferences(_0x469f12,_0x3e6b64){try{if(_0x469f12){fs[_0x4dd5('0x5c')](_0x469f12);logger[_0x4dd5('0x5e')]('Zip\x20archive\x20removed');}if(_0x3e6b64){rimraf(_0x3e6b64,function(){});logger[_0x4dd5('0x5e')](_0x4dd5('0x8f'));}}catch(_0x4a211a){logger[_0x4dd5('0x22')](_0x4a211a);}}exports['update']=function(_0x57ab6f,_0x509eb8,_0x52b895){return db[_0x4dd5('0x27')][_0x4dd5('0x44')]({'where':{'id':_0x57ab6f[_0x4dd5('0x43')]['id']}})[_0x4dd5('0x20')](handleEntityNotFound(_0x509eb8,null))[_0x4dd5('0x20')](saveUpdates(_0x57ab6f['body'],null))[_0x4dd5('0x20')](respondWithResult(_0x509eb8,null))['catch'](handleError(_0x509eb8,null));};exports[_0x4dd5('0x90')]=function(_0x212688,_0x55fcdf,_0x4bb106){return db[_0x4dd5('0x27')][_0x4dd5('0x44')]({'where':{'id':_0x212688[_0x4dd5('0x43')]['id']}})['then'](function(_0x3a43ba){if(_0x3a43ba){return _0x3a43ba[_0x4dd5('0x21')]();}})[_0x4dd5('0x20')](function(_0x120f2f){rimraf(path[_0x4dd5('0x46')](config[_0x4dd5('0x47')],_0x4dd5('0x48'),path[_0x4dd5('0x53')](_0x120f2f[_0x4dd5('0x4')])),function(){});return _0x120f2f;})[_0x4dd5('0x20')](handleEntityNotFound(_0x55fcdf,null))[_0x4dd5('0x20')](respondWithStatusCode(_0x55fcdf,null))[_0x4dd5('0x42')](handleError(_0x55fcdf,null));};exports[_0x4dd5('0x91')]=function(_0x4ea228,_0x846b42,_0x23db2d){return BPromise[_0x4dd5('0x92')]()[_0x4dd5('0x20')](function(){if(!_0x4ea228[_0x4dd5('0x2a')][_0x4dd5('0x4')]){throw new Error(_0x4dd5('0x93'));}if(!_0x4ea228['query']['port']){throw new Error(_0x4dd5('0x94'));}var _0x2675cb=_0x4ea228['query']['hostname']?_0x4ea228[_0x4dd5('0x2a')][_0x4dd5('0x95')]+':'+_0x4ea228[_0x4dd5('0x2a')][_0x4dd5('0x96')]:_0x4dd5('0x97')+_0x4ea228[_0x4dd5('0x2a')][_0x4dd5('0x96')];var _0x1e2949=_0x4ea228[_0x4dd5('0x2a')][_0x4dd5('0x1c')]?_0x4ea228['query'][_0x4dd5('0x1c')]:!![];var _0x29ff18=_0x4ea228[_0x4dd5('0x2a')][_0x4dd5('0x98')]?_0x4ea228[_0x4dd5('0x2a')][_0x4dd5('0x98')]:null;var _0x443c8d={'method':_0x4ea228[_0x4dd5('0x99')],'uri':util[_0x4dd5('0x9a')]('%s%s',_0x2675cb,_0x4ea228['query'][_0x4dd5('0x4')]),'json':_0x1e2949,'resolveWithFullResponse':!![],'encoding':_0x29ff18,'qs':_0x4ea228[_0x4dd5('0x2a')]};if(_0x4ea228[_0x4dd5('0x2a')][_0x4dd5('0x9b')]){_0x443c8d['headers']=_0x4ea228[_0x4dd5('0x9b')];}return rp(_0x443c8d);})[_0x4dd5('0x20')](function(_0x74d0b8){if(_0x74d0b8){_0x846b42[_0x4dd5('0x1a')](_0x74d0b8[_0x4dd5('0x9b')]);logger[_0x4dd5('0x5e')](_0x74d0b8[_0x4dd5('0x9c')]);if(_[_0x4dd5('0x9d')](_0x4ea228['query'][_0x4dd5('0x4')],_0x4dd5('0x45'))&&_0x74d0b8[_0x4dd5('0x9e')]==0x1f4){return _0x846b42[_0x4dd5('0x15')](_0x74d0b8[_0x4dd5('0x9e')]);}else{return _0x846b42['status'](_0x74d0b8[_0x4dd5('0x9e')])[_0x4dd5('0x25')](_0x74d0b8['body']);}}else{return _0x846b42['sendStatus'](0xc8);}})['catch'](handleError(_0x846b42,null));};exports[_0x4dd5('0x9f')]=function(_0x30dd1c,_0x358856,_0x32b20e){return BPromise[_0x4dd5('0x92')]()[_0x4dd5('0x20')](function(){if(!_0x30dd1c[_0x4dd5('0x2a')]['path']){throw new Error('\x27PATH\x27\x20parameter\x20not\x20specified');}if(!_0x30dd1c[_0x4dd5('0x2a')][_0x4dd5('0x96')]){throw new Error(_0x4dd5('0x94'));}var _0x50015d=_0x30dd1c[_0x4dd5('0x2a')][_0x4dd5('0x95')]?_0x30dd1c[_0x4dd5('0x2a')][_0x4dd5('0x95')]+':'+_0x30dd1c[_0x4dd5('0x2a')][_0x4dd5('0x96')]:_0x4dd5('0x97')+_0x30dd1c[_0x4dd5('0x2a')]['port'];var _0x35ad19=_0x30dd1c['query'][_0x4dd5('0x1c')]?_0x30dd1c[_0x4dd5('0x2a')][_0x4dd5('0x1c')]:!![];var _0x37a468=_0x30dd1c[_0x4dd5('0x2a')]['encoding']?_0x30dd1c[_0x4dd5('0x2a')][_0x4dd5('0x98')]:null;var _0xd30e9b={'method':_0x30dd1c[_0x4dd5('0x99')],'uri':util[_0x4dd5('0x9a')](_0x4dd5('0xa0'),_0x50015d,_0x30dd1c[_0x4dd5('0x2a')][_0x4dd5('0x4')]),'json':_0x35ad19,'resolveWithFullResponse':!![],'encoding':_0x37a468,'body':_0x30dd1c['body']};if(_0x30dd1c[_0x4dd5('0x2a')][_0x4dd5('0x9b')]){_0xd30e9b[_0x4dd5('0x9b')]=_0x30dd1c[_0x4dd5('0x9b')];}return rp(_0xd30e9b);})[_0x4dd5('0x20')](function(_0x439a6f){if(_0x439a6f){_0x358856[_0x4dd5('0x1a')](_0x439a6f[_0x4dd5('0x9b')]);logger[_0x4dd5('0x5e')](_0x439a6f[_0x4dd5('0x9c')]);return _0x358856[_0x4dd5('0x16')](_0x439a6f['statusCode'])[_0x4dd5('0x25')](_0x439a6f[_0x4dd5('0x9c')]);}else{return _0x358856[_0x4dd5('0x15')](0xc8);}})[_0x4dd5('0x42')](handleError(_0x358856,null));};
\ No newline at end of file
+var _0x7445=['end','name','send','index','Plugin','rawAttributes','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','nolimit','order','sort','pick','add','day','merge','where','filter','map','options','then','includeAll','include','findAll','rows','catch','show','params','find','download','join','root','server/files/plugins','format','basename','createWriteStream','zip','warning','code','ENOENT','error','Sequelize','Error','Error\x20while\x20generating\x20the\x20zip\x20archive','pipe','glob','**/*','dirname','attachments/**/*','finalize','Plugin\x20not\x20found','Error\x20while\x20downloading\x20the\x20plugin','info','Download\x20completed','Temporary\x20file\x20removed','upload','file','filename','extname','Plugin\x20upload\x20filepath:\x20%s','Plugin\x20upload\x20destination:\x20%s','chmodSync','readdirSync','Invalid\x20plugin\x20structure','lstatSync','isFile','isDirectory','some','readFileSync','manifest.json','parse','undefined','Invalid\x20manifest:\x20name\x20missing','type','Invalid\x20manifest:\x20type\x20missing','version','Invalid\x20manifest:\x20version\x20not\x20specified','parameters','Invalid\x20manifest:\x20parameters\x20missing','views','Invalid\x20manifest:\x20views\x20missing','agent','Invalid\x20manifest:\x20no\x20view\x20specified','script','Invalid\x20manifest:\x20script\x20name\x20missing','scriptPath','Invalid\x20manifest:\x20script\x20path\x20missing','Invalid\x20manifest:\x20invalid\x20type','description','sidebar','always','icon','icon-apps','html','admin','Warning:\x20admin\x20view\x20not\x20specified','test','Warning:\x20agent\x20view\x20not\x20specified','scriptName','plugins','create','unlinkSync','Extracted\x20folder\x20removed','body','delete','webhookGet','resolve','\x27PATH\x27\x20parameter\x20not\x20specified','port','\x27PORT\x27\x20parameter\x20not\x20specified','hostname','http://localhost:','encoding','%s%s','headers','statusCode','webhookPost','fast-json-patch','path','to-csv','ejs','crypto','desk.js','papaparse','archiver','../../components/parsers/qs','api','../../config/environment','../../mysqldb','localhost','register','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','update'];(function(_0x3e70e0,_0x36237a){var _0x133f4d=function(_0x3872e0){while(--_0x3872e0){_0x3e70e0['push'](_0x3e70e0['shift']());}};_0x133f4d(++_0x36237a);}(_0x7445,0x1a6));var _0x5744=function(_0x3d73ba,_0x356e23){_0x3d73ba=_0x3d73ba-0x0;var _0x47e406=_0x7445[_0x3d73ba];return _0x47e406;};'use strict';var jsonpatch=require(_0x5744('0x0'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x5744('0x1'));var sox=require('sox');var csv=require(_0x5744('0x2'));var ejs=require(_0x5744('0x3'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x5744('0x4'));var jsforce=require('jsforce');var deskjs=require(_0x5744('0x5'));var toCsv=require(_0x5744('0x2'));var querystring=require('querystring');var Papa=require(_0x5744('0x6'));var extract=require('extract-zip');var rimraf=require('rimraf');var archiver=require(_0x5744('0x7'));var qs=require(_0x5744('0x8'));var logger=require('../../config/logger')(_0x5744('0x9'));var utils=require('../../config/utils');var config=require(_0x5744('0xa'));var db=require(_0x5744('0xb'))['db'];var socket=require('socket.io-emitter')({'host':_0x5744('0xc'),'port':0x18eb});require('./plugin.socket')[_0x5744('0xd')](socket);function respondWithStatusCode(_0x2d5a82,_0x91303){_0x91303=_0x91303||0xcc;return function(_0x5f3bee){if(_0x5f3bee){return _0x2d5a82[_0x5744('0xe')](_0x91303);}return _0x2d5a82[_0x5744('0xf')](_0x91303)['end']();};}function respondWithResult(_0x1aa341,_0x17ff5a){_0x17ff5a=_0x17ff5a||0xc8;return function(_0x3c5690){if(_0x3c5690){return _0x1aa341[_0x5744('0xf')](_0x17ff5a)[_0x5744('0x10')](_0x3c5690);}};}function respondWithFilteredResult(_0x44234b,_0x3a9d07){return function(_0x58fa59){if(_0x58fa59){var _0x4656b6=_0x58fa59[_0x5744('0x11')],_0x2d0e97=_0x3a9d07[_0x5744('0x12')],_0x17c109=_0x3a9d07[_0x5744('0x12')]+_0x3a9d07[_0x5744('0x13')],_0x4ed024;if(_0x17c109>=_0x4656b6){_0x17c109=_0x4656b6;_0x4ed024=0xc8;}else{_0x4ed024=0xce;}_0x44234b[_0x5744('0xf')](_0x4ed024);return _0x44234b[_0x5744('0x14')](_0x5744('0x15'),_0x2d0e97+'-'+_0x17c109+'/'+_0x4656b6)[_0x5744('0x10')](_0x58fa59);}return null;};}function patchUpdates(_0x276afd){return function(_0x38d2a3){try{jsonpatch[_0x5744('0x16')](_0x38d2a3,_0x276afd,!![]);}catch(_0x48831a){return BPromise[_0x5744('0x17')](_0x48831a);}return _0x38d2a3['save']();};}function saveUpdates(_0x2ac141,_0x519594){return function(_0x128fc2){if(_0x128fc2){return _0x128fc2[_0x5744('0x18')](_0x2ac141)['then'](function(_0x458937){return _0x458937;});}return null;};}function removeEntity(_0x5b52c1,_0x4406a1){return function(_0x4b8b1d){if(_0x4b8b1d){return _0x4b8b1d['destroy']()['then'](function(){_0x5b52c1['status'](0xcc)[_0x5744('0x19')]();});}};}function handleEntityNotFound(_0x33b2bb,_0x5c1265){return function(_0xba4e99){if(!_0xba4e99){_0x33b2bb[_0x5744('0xe')](0x194);}return _0xba4e99;};}function handleError(_0x246308,_0x5525f0){_0x5525f0=_0x5525f0||0x1f4;return function(_0x3ad51c){logger['error'](_0x3ad51c['stack']);if(_0x3ad51c[_0x5744('0x1a')]){delete _0x3ad51c['name'];}_0x246308[_0x5744('0xf')](_0x5525f0)[_0x5744('0x1b')](_0x3ad51c);};}exports[_0x5744('0x1c')]=function(_0x461545,_0x648f43){var _0x3b30c1={},_0x403422={},_0x2c3f63={'count':0x0,'rows':[]};var _0x2a1bc0=db[_0x5744('0x1d')][_0x5744('0x1e')];_0x403422[_0x5744('0x1f')]=_[_0x5744('0x20')](_0x2a1bc0);var _0x50682e={'dateStart':_0x461545['query'][_0x5744('0x21')],'dateEnd':_0x461545[_0x5744('0x22')][_0x5744('0x23')]};delete _0x461545[_0x5744('0x22')]['dateStart'];delete _0x461545[_0x5744('0x22')][_0x5744('0x23')];_0x403422[_0x5744('0x22')]=_[_0x5744('0x20')](_0x461545[_0x5744('0x22')]);_0x403422[_0x5744('0x24')]=_[_0x5744('0x25')](_0x403422[_0x5744('0x1f')],_0x403422[_0x5744('0x22')]);_0x3b30c1[_0x5744('0x26')]=_[_0x5744('0x25')](_0x403422['model'],qs['fields'](_0x461545[_0x5744('0x22')][_0x5744('0x27')]));_0x3b30c1[_0x5744('0x26')]=_0x3b30c1['attributes'][_0x5744('0x28')]?_0x3b30c1[_0x5744('0x26')]:_0x403422[_0x5744('0x1f')];if(!_0x461545['query']['hasOwnProperty'](_0x5744('0x29'))){_0x3b30c1[_0x5744('0x13')]=qs[_0x5744('0x13')](_0x461545['query'][_0x5744('0x13')]);_0x3b30c1[_0x5744('0x12')]=qs['offset'](_0x461545[_0x5744('0x22')][_0x5744('0x12')]);}_0x3b30c1[_0x5744('0x2a')]=qs['sort'](_0x461545['query'][_0x5744('0x2b')]);_0x3b30c1['where']=qs['filters'](_[_0x5744('0x2c')](_0x461545[_0x5744('0x22')],_0x403422[_0x5744('0x24')]));if(_0x50682e[_0x5744('0x21')]){if(_0x50682e['dateEnd']){_0x50682e[_0x5744('0x23')]=moment(_0x50682e[_0x5744('0x23')])[_0x5744('0x2d')](0x1,_0x5744('0x2e'));}else{_0x50682e[_0x5744('0x23')]=moment(_0x50682e[_0x5744('0x21')])[_0x5744('0x2d')](0x1,_0x5744('0x2e'));}_[_0x5744('0x2f')](_0x3b30c1[_0x5744('0x30')],{'createdAt':{'$gte':_0x50682e[_0x5744('0x21')],'$lte':_0x50682e['dateEnd']}});}if(_0x461545[_0x5744('0x22')][_0x5744('0x31')]){_0x3b30c1[_0x5744('0x30')]=_[_0x5744('0x2f')](_0x3b30c1[_0x5744('0x30')],{'$or':_[_0x5744('0x32')](_0x3b30c1[_0x5744('0x26')],function(_0x3c835b){var _0xc2a12e={};_0xc2a12e[_0x3c835b]={'$like':'%'+_0x461545[_0x5744('0x22')][_0x5744('0x31')]+'%'};return _0xc2a12e;})});}_0x3b30c1=_[_0x5744('0x2f')]({},_0x3b30c1,_0x461545[_0x5744('0x33')]);var _0x55d3b6={'where':_0x3b30c1[_0x5744('0x30')]};return db[_0x5744('0x1d')][_0x5744('0x11')](_0x55d3b6)[_0x5744('0x34')](function(_0x466735){_0x2c3f63[_0x5744('0x11')]=_0x466735;if(_0x461545['query'][_0x5744('0x35')]){_0x3b30c1[_0x5744('0x36')]=[{'all':!![]}];}return db[_0x5744('0x1d')][_0x5744('0x37')](_0x3b30c1);})[_0x5744('0x34')](function(_0x321f94){_0x2c3f63[_0x5744('0x38')]=_0x321f94;return _0x2c3f63;})[_0x5744('0x34')](respondWithFilteredResult(_0x648f43,_0x3b30c1))[_0x5744('0x39')](handleError(_0x648f43,null));};exports[_0x5744('0x3a')]=function(_0x5028dc,_0x56e94e){var _0x5d8e9a={'raw':!![],'where':{'id':_0x5028dc[_0x5744('0x3b')]['id']}},_0x368e0c={};_0x368e0c[_0x5744('0x1f')]=_[_0x5744('0x20')](db[_0x5744('0x1d')][_0x5744('0x1e')]);_0x368e0c[_0x5744('0x22')]=_['keys'](_0x5028dc[_0x5744('0x22')]);_0x368e0c[_0x5744('0x24')]=_['intersection'](_0x368e0c[_0x5744('0x1f')],_0x368e0c[_0x5744('0x22')]);_0x5d8e9a[_0x5744('0x26')]=_[_0x5744('0x25')](_0x368e0c[_0x5744('0x1f')],qs[_0x5744('0x27')](_0x5028dc[_0x5744('0x22')][_0x5744('0x27')]));_0x5d8e9a['attributes']=_0x5d8e9a[_0x5744('0x26')][_0x5744('0x28')]?_0x5d8e9a[_0x5744('0x26')]:_0x368e0c['model'];if(_0x5028dc[_0x5744('0x22')][_0x5744('0x35')]){_0x5d8e9a[_0x5744('0x36')]=[{'all':!![]}];}_0x5d8e9a=_[_0x5744('0x2f')]({},_0x5d8e9a,_0x5028dc[_0x5744('0x33')]);return db[_0x5744('0x1d')][_0x5744('0x3c')](_0x5d8e9a)[_0x5744('0x34')](handleEntityNotFound(_0x56e94e,null))['then'](respondWithResult(_0x56e94e,null))[_0x5744('0x39')](handleError(_0x56e94e,null));};exports[_0x5744('0x3d')]=function(_0x424e77,_0x5cce22,_0x27aafe){return db[_0x5744('0x1d')][_0x5744('0x3c')]({'where':{'id':_0x424e77[_0x5744('0x3b')]['id']},'attributes':['name',_0x5744('0x1')],'raw':!![]})['then'](handleEntityNotFound(_0x5cce22,null))['then'](function(_0x3ed532){if(_0x3ed532){var _0x27a1d0=path[_0x5744('0x3e')](config[_0x5744('0x3f')],_0x5744('0x40'),util[_0x5744('0x41')]('%s.zip',path[_0x5744('0x42')](_0x3ed532[_0x5744('0x1')])));var _0x4c012a=fs[_0x5744('0x43')](_0x27a1d0);var _0x1e41a7=archiver(_0x5744('0x44'),{'zlib':{'level':0x9}});_0x1e41a7['on'](_0x5744('0x45'),function(_0x52fd8f){if(_0x52fd8f[_0x5744('0x46')]===_0x5744('0x47')){logger[_0x5744('0x48')](_0x52fd8f);}else{throw new db[(_0x5744('0x49'))][(_0x5744('0x4a'))](_0x5744('0x4b'));}});_0x1e41a7['on'](_0x5744('0x48'),function(_0x2e1b17){throw new db[(_0x5744('0x49'))][(_0x5744('0x4a'))](_0x5744('0x4b'));});_0x1e41a7[_0x5744('0x4c')](_0x4c012a);_0x1e41a7[_0x5744('0x4d')](_0x5744('0x4e'),{'cwd':path[_0x5744('0x3e')](config[_0x5744('0x3f')],'server/files/plugins',path[_0x5744('0x4f')](_0x3ed532[_0x5744('0x1')])),'ignore':[path[_0x5744('0x3e')](path[_0x5744('0x42')](_0x3ed532['path']),'node_modules/**/*'),path[_0x5744('0x3e')](path['basename'](_0x3ed532[_0x5744('0x1')]),_0x5744('0x50'))],'nodir':!![]})[_0x5744('0x51')]();_0x4c012a['on']('close',function(){if(!fs['existsSync'](_0x27a1d0)){throw new db[(_0x5744('0x49'))]['Error'](_0x5744('0x52'));}return _0x5cce22[_0x5744('0x3d')](_0x27a1d0,util[_0x5744('0x41')]('%s.zip',path['basename'](_0x3ed532['path'])),function(_0x2b8ba2){if(_0x2b8ba2){throw new db['Sequelize'][(_0x5744('0x4a'))](_0x5744('0x53'));}fs['unlinkSync'](_0x27a1d0);logger[_0x5744('0x54')](_0x5744('0x55'));logger[_0x5744('0x54')](_0x5744('0x56'));});});}return null;})[_0x5744('0x39')](handleError(_0x5cce22,null));};exports[_0x5744('0x57')]=function(_0x4bf4df,_0x4a01e6,_0x227f63){var _0x41dbe9=path[_0x5744('0x42')](_0x4bf4df[_0x5744('0x58')][_0x5744('0x59')],path[_0x5744('0x5a')](_0x4bf4df[_0x5744('0x58')]['filename']));var _0x28f64d=path[_0x5744('0x3e')](config[_0x5744('0x3f')],_0x5744('0x40'),_0x4bf4df['file'][_0x5744('0x59')]);var _0x1bb5b3=path[_0x5744('0x3e')](config[_0x5744('0x3f')],'server/files/plugins',_0x41dbe9);logger[_0x5744('0x54')](_0x5744('0x5b'),_0x28f64d);logger[_0x5744('0x54')](_0x5744('0x5c'),_0x1bb5b3);try{fs[_0x5744('0x5d')](_0x28f64d,parseInt('0777',0x8));extract(_0x28f64d,{'dir':_0x1bb5b3},function(_0x5842bd){if(_0x5842bd){logger['error'](_0x5842bd);handleError(_0x5842bd,!![]);};var _0x5404ec=fs[_0x5744('0x5e')](_0x1bb5b3);if(_0x5404ec[_0x5744('0x28')]>0x1){removeReferences(_0x28f64d,_0x1bb5b3);logger[_0x5744('0x48')]('Invalid\x20plugin\x20structure');return _0x227f63(new Error(_0x5744('0x5f')));}var _0x538242=fs[_0x5744('0x60')](path[_0x5744('0x3e')](_0x1bb5b3,_0x5404ec[0x0]));if(_0x538242[_0x5744('0x61')]()){removeReferences(_0x28f64d,_0x1bb5b3);logger[_0x5744('0x48')](_0x5744('0x5f'));return _0x227f63(new Error(_0x5744('0x5f')));}if(_0x538242[_0x5744('0x62')]()){var _0x3cb70b=fs[_0x5744('0x5e')](path['join'](_0x1bb5b3,_0x5404ec[0x0]));if(_0x3cb70b[_0x5744('0x28')]===0x0){removeReferences(_0x28f64d,_0x1bb5b3);logger['error']('Invalid\x20plugin\x20structure');return _0x227f63(new Error(_0x5744('0x5f')));}var _0x163643=_0x3cb70b[_0x5744('0x63')](function(_0x2b5386){return _0x2b5386==='manifest.json';});if(!_0x163643){return _0x227f63(new Error('Plugin\x20manifest\x20missing'));}var _0x126ed6=fs[_0x5744('0x64')](path[_0x5744('0x3e')](_0x1bb5b3,_0x5404ec[0x0],_0x5744('0x65')));var _0x430650=JSON[_0x5744('0x66')](_0x126ed6);if(_0x5744('0x67')==typeof _0x430650['name']){return _0x227f63(new Error(_0x5744('0x68')));}if(_0x5744('0x67')==typeof _0x430650[_0x5744('0x69')]){return _0x227f63(new Error(_0x5744('0x6a')));}if(_0x5744('0x67')==typeof _0x430650[_0x5744('0x6b')]){return _0x227f63(new Error(_0x5744('0x6c')));}if('undefined'==typeof _0x430650[_0x5744('0x6d')]){return _0x227f63(new Error(_0x5744('0x6e')));}if(_0x430650[_0x5744('0x69')]==='html'){if(_0x5744('0x67')==typeof _0x430650[_0x5744('0x6d')][_0x5744('0x6f')]){return _0x227f63(new Error(_0x5744('0x70')));}if(_0x5744('0x67')==typeof _0x430650[_0x5744('0x6d')][_0x5744('0x6f')]['admin']&&_0x5744('0x67')==typeof _0x430650[_0x5744('0x6d')]['views'][_0x5744('0x71')]){return _0x227f63(new Error(_0x5744('0x72')));}}else if(_0x430650[_0x5744('0x69')]===_0x5744('0x73')){if(_0x5744('0x67')==typeof _0x430650[_0x5744('0x6d')]['scriptName']){return _0x227f63(new Error(_0x5744('0x74')));}if(_0x5744('0x67')==typeof _0x430650['parameters'][_0x5744('0x75')]){return _0x227f63(new Error(_0x5744('0x76')));}}else{return _0x227f63(new Error(_0x5744('0x77')));}var _0x25fbb8=_0x430650['name'];var _0x53ae0b=_0x430650[_0x5744('0x78')];var _0x41885a=_0x430650[_0x5744('0x69')];var _0x50ce28=_0x430650[_0x5744('0x79')]?_0x430650[_0x5744('0x79')]:_0x5744('0x7a');var _0x128552=_0x430650[_0x5744('0x7b')]?_0x430650['icon']:_0x5744('0x7c');var _0x25d63e='';var _0x2fea2e='';var _0x44edbe='';var _0x50a7bf='';var _0x32b59b=_0x430650[_0x5744('0x6b')];if(_0x41885a===_0x5744('0x7d')){if('undefined'!=typeof _0x430650[_0x5744('0x6d')]['views'][_0x5744('0x7e')]){var _0x406e61=_0x430650['parameters'][_0x5744('0x6f')][_0x5744('0x7e')];if(!/^(f|ht)tps?:\/\//i['test'](_0x406e61)){_0x25d63e=path[_0x5744('0x3e')]('plugins',_0x41dbe9,_0x5404ec[0x0],_0x406e61);}else{_0x25d63e=_0x406e61;}}else{logger['info'](_0x5744('0x7f'));}if(_0x5744('0x67')!=typeof _0x430650[_0x5744('0x6d')][_0x5744('0x6f')][_0x5744('0x71')]){var _0xfc306e=_0x430650[_0x5744('0x6d')]['views'][_0x5744('0x71')];if(!/^(f|ht)tps?:\/\//i[_0x5744('0x80')](_0xfc306e)){_0x2fea2e=path['join']('plugins',_0x41dbe9,_0x5404ec[0x0],_0xfc306e);}else{_0x2fea2e=_0xfc306e;}}else{logger[_0x5744('0x54')](_0x5744('0x81'));}}else if(_0x41885a===_0x5744('0x73')){_0x44edbe=_0x430650['parameters'][_0x5744('0x82')];_0x50a7bf=_0x430650[_0x5744('0x6d')]['scriptPath'];if('undefined'!=typeof _0x430650[_0x5744('0x6d')][_0x5744('0x6f')]){if(_0x5744('0x67')!=typeof _0x430650['parameters'][_0x5744('0x6f')][_0x5744('0x7e')]){var _0x406e61=_0x430650[_0x5744('0x6d')][_0x5744('0x6f')]['admin'];if(!/^(f|ht)tps?:\/\//i[_0x5744('0x80')](_0x406e61)){_0x25d63e=path[_0x5744('0x3e')](_0x5744('0x83'),_0x41dbe9,_0x5404ec[0x0],_0x406e61);}else{_0x25d63e=_0x406e61;}}if(_0x5744('0x67')!=typeof _0x430650['parameters'][_0x5744('0x6f')]['agent']){var _0xfc306e=_0x430650[_0x5744('0x6d')][_0x5744('0x6f')][_0x5744('0x71')];if(!/^(f|ht)tps?:\/\//i[_0x5744('0x80')](_0xfc306e)){_0x2fea2e=path['join'](_0x5744('0x83'),_0x41dbe9,_0x5404ec[0x0],_0xfc306e);}else{_0x2fea2e=_0xfc306e;}}}}var _0x232709={'name':_0x25fbb8,'description':_0x53ae0b,'path':path[_0x5744('0x3e')](_0x41dbe9,_0x5404ec[0x0]),'type':_0x41885a,'sidebar':_0x50ce28,'icon':_0x128552,'adminUrl':_0x25d63e,'agentUrl':_0x2fea2e,'scriptName':_0x44edbe,'scriptPath':_0x50a7bf,'version':_0x32b59b};removeReferences(_0x28f64d,null);return db['Plugin'][_0x5744('0x84')](_0x232709)[_0x5744('0x34')](respondWithResult(_0x4a01e6,null))['catch'](handleError(_0x4a01e6,null));}});}catch(_0x2e3657){_0x4a01e6['status'](0x1f4)[_0x5744('0x1b')](_0x2e3657);}};function removeReferences(_0x16f72e,_0x30d630){try{if(_0x16f72e){fs[_0x5744('0x85')](_0x16f72e);logger[_0x5744('0x54')]('Zip\x20archive\x20removed');}if(_0x30d630){rimraf(_0x30d630,function(){});logger[_0x5744('0x54')](_0x5744('0x86'));}}catch(_0x230a07){logger[_0x5744('0x48')](_0x230a07);}}exports[_0x5744('0x18')]=function(_0x16fd7e,_0x32ca61,_0x407189){return db[_0x5744('0x1d')][_0x5744('0x3c')]({'where':{'id':_0x16fd7e['params']['id']}})[_0x5744('0x34')](handleEntityNotFound(_0x32ca61,null))[_0x5744('0x34')](saveUpdates(_0x16fd7e[_0x5744('0x87')],null))[_0x5744('0x34')](respondWithResult(_0x32ca61,null))['catch'](handleError(_0x32ca61,null));};exports[_0x5744('0x88')]=function(_0x5264a6,_0x15ae05,_0x3b441c){return db[_0x5744('0x1d')][_0x5744('0x3c')]({'where':{'id':_0x5264a6[_0x5744('0x3b')]['id']}})[_0x5744('0x34')](function(_0x2923c6){if(_0x2923c6){return _0x2923c6['destroy']();}})[_0x5744('0x34')](function(_0x33169a){rimraf(path[_0x5744('0x3e')](config[_0x5744('0x3f')],_0x5744('0x40'),path[_0x5744('0x4f')](_0x33169a['path'])),function(){});return _0x33169a;})['then'](handleEntityNotFound(_0x15ae05,null))[_0x5744('0x34')](respondWithStatusCode(_0x15ae05,null))[_0x5744('0x39')](handleError(_0x15ae05,null));};exports[_0x5744('0x89')]=function(_0x466a29,_0x582b65,_0x41f4a5){return BPromise[_0x5744('0x8a')]()[_0x5744('0x34')](function(){if(!_0x466a29[_0x5744('0x22')][_0x5744('0x1')]){throw new Error(_0x5744('0x8b'));}if(!_0x466a29[_0x5744('0x22')][_0x5744('0x8c')]){throw new Error(_0x5744('0x8d'));}var _0x58fe4d=_0x466a29[_0x5744('0x22')][_0x5744('0x8e')]?_0x466a29[_0x5744('0x22')][_0x5744('0x8e')]+':'+_0x466a29[_0x5744('0x22')][_0x5744('0x8c')]:_0x5744('0x8f')+_0x466a29[_0x5744('0x22')][_0x5744('0x8c')];var _0x456eb9=_0x466a29[_0x5744('0x22')][_0x5744('0x10')]?_0x466a29[_0x5744('0x22')]['json']:!![];var _0x199230=_0x466a29[_0x5744('0x22')]['encoding']?_0x466a29[_0x5744('0x22')][_0x5744('0x90')]:null;var _0x472d04={'method':_0x466a29['method'],'uri':util[_0x5744('0x41')](_0x5744('0x91'),_0x58fe4d,_0x466a29[_0x5744('0x22')][_0x5744('0x1')]),'json':_0x456eb9,'resolveWithFullResponse':!![],'encoding':_0x199230,'qs':_0x466a29['query']};if(_0x466a29[_0x5744('0x22')][_0x5744('0x92')]){_0x472d04[_0x5744('0x92')]=_0x466a29[_0x5744('0x92')];}return rp(_0x472d04);})[_0x5744('0x34')](function(_0xb48c62){if(_0xb48c62){_0x582b65[_0x5744('0x14')](_0xb48c62[_0x5744('0x92')]);logger[_0x5744('0x54')](_0xb48c62['body']);if(_['endsWith'](_0x466a29['query'][_0x5744('0x1')],_0x5744('0x3d'))&&_0xb48c62[_0x5744('0x93')]==0x1f4){return _0x582b65[_0x5744('0xe')](_0xb48c62['statusCode']);}else{return _0x582b65[_0x5744('0xf')](_0xb48c62[_0x5744('0x93')])['send'](_0xb48c62[_0x5744('0x87')]);}}else{return _0x582b65[_0x5744('0xe')](0xc8);}})[_0x5744('0x39')](handleError(_0x582b65,null));};exports[_0x5744('0x94')]=function(_0x491f98,_0x540403,_0x22948d){return BPromise[_0x5744('0x8a')]()['then'](function(){if(!_0x491f98['query']['path']){throw new Error(_0x5744('0x8b'));}if(!_0x491f98[_0x5744('0x22')][_0x5744('0x8c')]){throw new Error(_0x5744('0x8d'));}var _0x49a0ff=_0x491f98['query'][_0x5744('0x8e')]?_0x491f98[_0x5744('0x22')][_0x5744('0x8e')]+':'+_0x491f98[_0x5744('0x22')][_0x5744('0x8c')]:_0x5744('0x8f')+_0x491f98[_0x5744('0x22')][_0x5744('0x8c')];var _0x7607b4=_0x491f98['query'][_0x5744('0x10')]?_0x491f98[_0x5744('0x22')][_0x5744('0x10')]:!![];var _0x26ccf3=_0x491f98['query'][_0x5744('0x90')]?_0x491f98['query'][_0x5744('0x90')]:null;var _0x54b03a={'method':_0x491f98['method'],'uri':util['format'](_0x5744('0x91'),_0x49a0ff,_0x491f98[_0x5744('0x22')][_0x5744('0x1')]),'json':_0x7607b4,'resolveWithFullResponse':!![],'encoding':_0x26ccf3,'body':_0x491f98[_0x5744('0x87')]};if(_0x491f98['query'][_0x5744('0x92')]){_0x54b03a[_0x5744('0x92')]=_0x491f98['headers'];}return rp(_0x54b03a);})['then'](function(_0x5e0df1){if(_0x5e0df1){_0x540403[_0x5744('0x14')](_0x5e0df1[_0x5744('0x92')]);logger['info'](_0x5e0df1['body']);return _0x540403[_0x5744('0xf')](_0x5e0df1[_0x5744('0x93')])['send'](_0x5e0df1[_0x5744('0x87')]);}else{return _0x540403['sendStatus'](0xc8);}})['catch'](handleError(_0x540403,null));};
\ No newline at end of file
index ac62a2c..f105b10 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(_0x2bff81,_0x174530){var _0x5545ff=function(_0x2e6ccc){while(--_0x2e6ccc){_0x2bff81['push'](_0x2bff81['shift']());}};_0x5545ff(++_0x174530);}(_0x7a54,0x106));var _0x47a5=function(_0x5c8ab8,_0x44d93b){_0x5c8ab8=_0x5c8ab8-0x0;var _0x348956=_0x7a54[_0x5c8ab8];return _0x348956;};'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(_0x1724cf,_0xcfbd9f){var _0x3e777f=function(_0x624bf1){while(--_0x624bf1){_0x1724cf['push'](_0x1724cf['shift']());}};_0x3e777f(++_0xcfbd9f);}(_0xb10b,0x12a));var _0xbb10=function(_0x93d7e0,_0x3ecdf4){_0x93d7e0=_0x93d7e0-0x0;var _0x1e93e8=_0xb10b[_0x93d7e0];return _0x1e93e8;};'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 e77f0f3..d512936 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b76=['Plugin','plugins','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./plugin.attributes','define'];(function(_0x4287fe,_0x14ad49){var _0x329a39=function(_0x3c30a9){while(--_0x3c30a9){_0x4287fe['push'](_0x4287fe['shift']());}};_0x329a39(++_0x14ad49);}(_0x8b76,0x70));var _0x68b7=function(_0x1555ce,_0x342666){_0x1555ce=_0x1555ce-0x0;var _0x2ea512=_0x8b76[_0x1555ce];return _0x2ea512;};'use strict';var _=require(_0x68b7('0x0'));var util=require(_0x68b7('0x1'));var logger=require(_0x68b7('0x2'))(_0x68b7('0x3'));var moment=require(_0x68b7('0x4'));var BPromise=require(_0x68b7('0x5'));var rp=require(_0x68b7('0x6'));var attributes=require(_0x68b7('0x7'));module['exports']=function(_0x22305c,_0x10c971){return _0x22305c[_0x68b7('0x8')](_0x68b7('0x9'),attributes,{'tableName':_0x68b7('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xcf53=['plugins','api','bluebird','request-promise','./plugin.attributes','exports','define'];(function(_0x3246f7,_0x53fd7d){var _0x26db7a=function(_0x27301b){while(--_0x27301b){_0x3246f7['push'](_0x3246f7['shift']());}};_0x26db7a(++_0x53fd7d);}(_0xcf53,0x1d6));var _0x3cf5=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xcf53[_0x14add3];return _0x4a174f;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')(_0x3cf5('0x0'));var moment=require('moment');var BPromise=require(_0x3cf5('0x1'));var rp=require(_0x3cf5('0x2'));var attributes=require(_0x3cf5('0x3'));module[_0x3cf5('0x4')]=function(_0x3c6baf,_0x53e503){return _0x3c6baf[_0x3cf5('0x5')]('Plugin',attributes,{'tableName':_0x3cf5('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b40342a..63789d7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf5ce=['options','raw','then','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','socket.io-emitter','localhost','register','request','info','Plugin,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','catch','CreatePlugin','create','body'];(function(_0x483ca3,_0x4359c6){var _0x3264af=function(_0x36f183){while(--_0x36f183){_0x483ca3['push'](_0x483ca3['shift']());}};_0x3264af(++_0x4359c6);}(_0xf5ce,0x73));var _0xef5c=function(_0xd6ee65,_0x1730cc){_0xd6ee65=_0xd6ee65-0x0;var _0x594302=_0xf5ce[_0xd6ee65];return _0x594302;};'use strict';var _=require('lodash');var util=require(_0xef5c('0x0'));var moment=require(_0xef5c('0x1'));var BPromise=require(_0xef5c('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xef5c('0x3'))['db'];var utils=require(_0xef5c('0x4'));var logger=require(_0xef5c('0x5'))(_0xef5c('0x6'));var config=require(_0xef5c('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xef5c('0x8')]['http']({'port':0x232a});var socket=require(_0xef5c('0x9'))({'host':_0xef5c('0xa'),'port':0x18eb});require('./plugin.socket')[_0xef5c('0xb')](socket);function respondWithRpcPromise(_0x1df5ef,_0x47be0b,_0x1098cc){return new BPromise(function(_0x2d7f4c,_0x396517){return client[_0xef5c('0xc')](_0x1df5ef,_0x1098cc)['then'](function(_0x29fff7){logger[_0xef5c('0xd')](_0xef5c('0xe'),_0x47be0b,_0xef5c('0xf'));logger[_0xef5c('0x10')]('Plugin,\x20%s,\x20%s,\x20%s',_0x47be0b,_0xef5c('0xf'),JSON[_0xef5c('0x11')](_0x29fff7));if(_0x29fff7[_0xef5c('0x12')]){if(_0x29fff7[_0xef5c('0x12')][_0xef5c('0x13')]===0x1f4){logger[_0xef5c('0x12')](_0xef5c('0xe'),_0x47be0b,_0x29fff7[_0xef5c('0x12')][_0xef5c('0x14')]);return _0x396517(_0x29fff7['error']['message']);}logger[_0xef5c('0x12')](_0xef5c('0xe'),_0x47be0b,_0x29fff7[_0xef5c('0x12')][_0xef5c('0x14')]);return _0x2d7f4c(_0x29fff7[_0xef5c('0x12')][_0xef5c('0x14')]);}else{logger[_0xef5c('0xd')](_0xef5c('0xe'),_0x47be0b,_0xef5c('0xf'));_0x2d7f4c(_0x29fff7['result'][_0xef5c('0x14')]);}})[_0xef5c('0x15')](function(_0x44b342){logger[_0xef5c('0x12')]('Plugin,\x20%s,\x20%s',_0x47be0b,_0x44b342);_0x396517(_0x44b342);});});}exports[_0xef5c('0x16')]=function(_0x80ed54){var _0x532a14=this;return new Promise(function(_0x21b184,_0xa44150){return db['Plugin'][_0xef5c('0x17')](_0x80ed54[_0xef5c('0x18')],{'raw':_0x80ed54['options']?_0x80ed54[_0xef5c('0x19')][_0xef5c('0x1a')]===undefined?!![]:![]:!![]})[_0xef5c('0x1b')](function(_0x42c3c2){logger[_0xef5c('0xd')](_0xef5c('0x16'),_0x80ed54);logger[_0xef5c('0x10')](_0xef5c('0x16'),_0x80ed54,JSON['stringify'](_0x42c3c2));_0x21b184(_0x42c3c2);})['catch'](function(_0x171b08){logger['error']('CreatePlugin',_0x171b08['message'],_0x80ed54);_0xa44150(_0x532a14[_0xef5c('0x12')](0x1f4,_0x171b08['message']));});});};
\ No newline at end of file
+var _0x1580=['options','raw','catch','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','socket.io-emitter','localhost','register','request','then','Plugin,\x20%s,\x20%s','debug','Plugin,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','info','CreatePlugin','Plugin','create'];(function(_0x2d7f0e,_0x3e6fbd){var _0x110b07=function(_0x557b00){while(--_0x557b00){_0x2d7f0e['push'](_0x2d7f0e['shift']());}};_0x110b07(++_0x3e6fbd);}(_0x1580,0x12f));var _0x0158=function(_0x144cfb,_0x356142){_0x144cfb=_0x144cfb-0x0;var _0x2d790a=_0x1580[_0x144cfb];return _0x2d790a;};'use strict';var _=require(_0x0158('0x0'));var util=require(_0x0158('0x1'));var moment=require(_0x0158('0x2'));var BPromise=require('bluebird');var rs=require(_0x0158('0x3'));var fs=require('fs');var db=require(_0x0158('0x4'))['db'];var utils=require(_0x0158('0x5'));var logger=require(_0x0158('0x6'))(_0x0158('0x7'));var config=require(_0x0158('0x8'));var jayson=require(_0x0158('0x9'));var client=jayson['client'][_0x0158('0xa')]({'port':0x232a});var socket=require(_0x0158('0xb'))({'host':_0x0158('0xc'),'port':0x18eb});require('./plugin.socket')[_0x0158('0xd')](socket);function respondWithRpcPromise(_0x1cf37b,_0x2917f2,_0x4d0ae1){return new BPromise(function(_0x1ba958,_0xc6b487){return client[_0x0158('0xe')](_0x1cf37b,_0x4d0ae1)[_0x0158('0xf')](function(_0x58b274){logger['info'](_0x0158('0x10'),_0x2917f2,'request\x20sent');logger[_0x0158('0x11')](_0x0158('0x12'),_0x2917f2,_0x0158('0x13'),JSON[_0x0158('0x14')](_0x58b274));if(_0x58b274[_0x0158('0x15')]){if(_0x58b274[_0x0158('0x15')]['code']===0x1f4){logger[_0x0158('0x15')](_0x0158('0x10'),_0x2917f2,_0x58b274[_0x0158('0x15')][_0x0158('0x16')]);return _0xc6b487(_0x58b274['error'][_0x0158('0x16')]);}logger[_0x0158('0x15')](_0x0158('0x10'),_0x2917f2,_0x58b274['error'][_0x0158('0x16')]);return _0x1ba958(_0x58b274[_0x0158('0x15')][_0x0158('0x16')]);}else{logger[_0x0158('0x17')]('Plugin,\x20%s,\x20%s',_0x2917f2,_0x0158('0x13'));_0x1ba958(_0x58b274['result']['message']);}})['catch'](function(_0x166ebd){logger[_0x0158('0x15')](_0x0158('0x10'),_0x2917f2,_0x166ebd);_0xc6b487(_0x166ebd);});});}exports[_0x0158('0x18')]=function(_0xcc963a){var _0x2f4714=this;return new Promise(function(_0x18d2f0,_0xa0f3d8){return db[_0x0158('0x19')][_0x0158('0x1a')](_0xcc963a['body'],{'raw':_0xcc963a['options']?_0xcc963a[_0x0158('0x1b')][_0x0158('0x1c')]===undefined?!![]:![]:!![]})['then'](function(_0x3c9e09){logger[_0x0158('0x17')](_0x0158('0x18'),_0xcc963a);logger[_0x0158('0x11')](_0x0158('0x18'),_0xcc963a,JSON['stringify'](_0x3c9e09));_0x18d2f0(_0x3c9e09);})[_0x0158('0x1d')](function(_0x222798){logger['error'](_0x0158('0x18'),_0x222798[_0x0158('0x16')],_0xcc963a);_0xa0f3d8(_0x2f4714[_0x0158('0x15')](0x1f4,_0x222798['message']));});});};
\ No newline at end of file
index a274261..521f017 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf658=['save','remove','update','removeListener','length','plugin:','./plugin.events'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0xf658,0x156));var _0x8f65=function(_0x33dd3a,_0x2c7dfe){_0x33dd3a=_0x33dd3a-0x0;var _0x2087d4=_0xf658[_0x33dd3a];return _0x2087d4;};'use strict';var PluginEvents=require(_0x8f65('0x0'));var events=[_0x8f65('0x1'),_0x8f65('0x2'),_0x8f65('0x3')];function createListener(_0x2bb683,_0x2f39c1){return function(_0x1a99a8){_0x2f39c1['emit'](_0x2bb683,_0x1a99a8);};}function removeListener(_0xb1ccb2,_0x23802c){return function(){PluginEvents[_0x8f65('0x4')](_0xb1ccb2,_0x23802c);};}exports['register']=function(_0x316e7b){for(var _0x5ed965=0x0,_0x20bab1=events[_0x8f65('0x5')];_0x5ed965<_0x20bab1;_0x5ed965++){var _0x503db1=events[_0x5ed965];var _0x176764=createListener(_0x8f65('0x6')+_0x503db1,_0x316e7b);PluginEvents['on'](_0x503db1,_0x176764);}};
\ No newline at end of file
+var _0xe7da=['./plugin.events','save','remove','update','emit','removeListener','register','length','plugin:'];(function(_0x1e8d09,_0x290b78){var _0x145fcd=function(_0xcb521b){while(--_0xcb521b){_0x1e8d09['push'](_0x1e8d09['shift']());}};_0x145fcd(++_0x290b78);}(_0xe7da,0x1c2));var _0xae7d=function(_0x487fb6,_0x1c5cbd){_0x487fb6=_0x487fb6-0x0;var _0xb7c9bb=_0xe7da[_0x487fb6];return _0xb7c9bb;};'use strict';var PluginEvents=require(_0xae7d('0x0'));var events=[_0xae7d('0x1'),_0xae7d('0x2'),_0xae7d('0x3')];function createListener(_0x488805,_0x3c437d){return function(_0xf7d22a){_0x3c437d[_0xae7d('0x4')](_0x488805,_0xf7d22a);};}function removeListener(_0x1ab25c,_0x1a188e){return function(){PluginEvents[_0xae7d('0x5')](_0x1ab25c,_0x1a188e);};}exports[_0xae7d('0x6')]=function(_0x5a68c1){for(var _0xa6df5c=0x0,_0x1aa1d3=events[_0xae7d('0x7')];_0xa6df5c<_0x1aa1d3;_0xa6df5c++){var _0x233ebc=events[_0xa6df5c];var _0x152d86=createListener(_0xae7d('0x8')+_0x233ebc,_0x5a68c1);PluginEvents['on'](_0x233ebc,_0x152d86);}};
\ No newline at end of file
index 917bd75..2945d1f 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(_0x3398bb,_0x557042){var _0x5e482d=function(_0x2a0dff){while(--_0x2a0dff){_0x3398bb['push'](_0x3398bb['shift']());}};_0x5e482d(++_0x557042);}(_0xa9e0,0x123));var _0x0a9e=function(_0x56482c,_0x16118d){_0x56482c=_0x56482c-0x0;var _0x5aae7a=_0xa9e0[_0x56482c];return _0x5aae7a;};'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(_0x305650,_0x1e30f1){var _0x24505d=function(_0x24d8d2){while(--_0x24d8d2){_0x305650['push'](_0x305650['shift']());}};_0x24505d(++_0x1e30f1);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4709c0,_0x3396c7){_0x4709c0=_0x4709c0-0x0;var _0x13348b=_0xa9e0[_0x4709c0];return _0x13348b;};'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 84e3dc7..c78a195 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfd1e=['catch','show','params','body','join','../../files/plugins','script','cwd','chdir','dirname','start','update','restart','stop','hasOwnProperty','Unknown\x20status','destroy','delete','dump','Unknown\x20id','lodash','../../config/pm2','../../config/logger','path','bluebird','sendStatus','status','error','stack','name','send','npm\x20install','info','index','list','reject','express','motion2','length','then'];(function(_0x55ff79,_0x3d45e7){var _0x579067=function(_0x3650e4){while(--_0x3650e4){_0x55ff79['push'](_0x55ff79['shift']());}};_0x579067(++_0x3d45e7);}(_0xfd1e,0x154));var _0xefd1=function(_0x4997c3,_0x382a43){_0x4997c3=_0x4997c3-0x0;var _0x7e0fd5=_0xfd1e[_0x4997c3];return _0x7e0fd5;};'use strict';var _=require(_0xefd1('0x0'));var pm2=require(_0xefd1('0x1'));var logger=require(_0xefd1('0x2'))('api');var path=require(_0xefd1('0x3'));var exec=require('child_process')['exec'];var BPromise=require(_0xefd1('0x4'));function handleEntityNotFound(_0x2bc519,_0x2ca153){return function(_0xaf0df0){if(!_0xaf0df0){_0x2bc519[_0xefd1('0x5')](0x194);;}return _0xaf0df0;};}function respondWithResult(_0x25f7c8,_0x24ac88){_0x24ac88=_0x24ac88||0xc8;return function(_0x1eb262){if(_0x1eb262){return _0x25f7c8[_0xefd1('0x6')](_0x24ac88)['json'](_0x1eb262);}return null;};}function handleError(_0x566a68,_0x1c9736){_0x1c9736=_0x1c9736||0x1f4;return function(_0x2ec51d){logger[_0xefd1('0x7')](_0x2ec51d[_0xefd1('0x8')]);if(_0x2ec51d[_0xefd1('0x9')]){delete _0x2ec51d[_0xefd1('0x9')];}_0x566a68[_0xefd1('0x6')](_0x1c9736)[_0xefd1('0xa')](_0x2ec51d);};}function execChildProcess(){return new BPromise(function(_0x13062c,_0x4f7ce8){exec(_0xefd1('0xb'),function(_0x27dee0,_0x3ebb20,_0x270650){logger[_0xefd1('0xc')](_0x3ebb20);logger[_0xefd1('0xc')](_0x270650);if(_0x27dee0){logger['error'](_0x27dee0);return _0x4f7ce8(_0x27dee0);}return _0x13062c(_0x3ebb20);});});}exports[_0xefd1('0xd')]=function(_0x40981c,_0x4e0ce0){return pm2[_0xefd1('0xe')]()['then'](function(_0xaf254f){if(_0xaf254f){var _0x13531b=_[_0xefd1('0xf')](_0xaf254f,function(_0x30b29a){return _0x30b29a[_0xefd1('0x9')]===_0xefd1('0x10')||_0x30b29a['name']===_0xefd1('0x11');});return{'rows':_0x13531b,'count':_0x13531b[_0xefd1('0x12')]};}return null;})[_0xefd1('0x13')](respondWithResult(_0x4e0ce0,null))[_0xefd1('0x14')](handleError(_0x4e0ce0,null));};exports[_0xefd1('0x15')]=function(_0xf3e10b,_0x37b032){return pm2['describe'](_0xf3e10b[_0xefd1('0x16')]['id'])[_0xefd1('0x13')](respondWithResult(_0x37b032,null))[_0xefd1('0x13')](handleEntityNotFound(_0x37b032,null))[_0xefd1('0x14')](handleError(_0x37b032,null));};exports['create']=function(_0x4e16bf,_0xce2dce){if(_0x4e16bf['body']['name']&&_0x4e16bf[_0xefd1('0x17')]['script']){var _0x11bbe1=path[_0xefd1('0x18')](__dirname,_0xefd1('0x19'),_0x4e16bf['body'][_0xefd1('0x1a')]);var _0x120fc8=process[_0xefd1('0x1b')]();process[_0xefd1('0x1c')](path[_0xefd1('0x1d')](_0x11bbe1));return execChildProcess()[_0xefd1('0x13')](function(_0x368fdb){process[_0xefd1('0x1c')](_0x120fc8);return pm2[_0xefd1('0x1e')]({'name':_0x4e16bf[_0xefd1('0x17')][_0xefd1('0x9')],'script':_0x11bbe1});})[_0xefd1('0x13')](function(_0x555bdd){pm2['dump']();return _0x555bdd[0x0];})['then'](respondWithResult(_0xce2dce,0xc9))['catch'](handleError(_0xce2dce,null));}else{return _0xce2dce[_0xefd1('0x6')](0x1f4)[_0xefd1('0xa')]({'message':'Missing\x20name\x20and/or\x20path'});}};exports[_0xefd1('0x1f')]=function(_0x160c3e,_0x3c116c){if(_0x160c3e[_0xefd1('0x17')]['id']){delete _0x160c3e['body']['id'];}var _0x27de7b={'online':_0xefd1('0x20'),'stopped':_0xefd1('0x21')};if(_0x27de7b[_0xefd1('0x22')](_0x160c3e[_0xefd1('0x17')][_0xefd1('0x6')])){return pm2[_0x27de7b[_0x160c3e[_0xefd1('0x17')][_0xefd1('0x6')]]](_0x160c3e['params']['id'])[_0xefd1('0x13')](respondWithResult(_0x3c116c,0xc8))[_0xefd1('0x14')](handleError(_0x3c116c,null));}else{return _0x3c116c['status'](0x1f4)[_0xefd1('0xa')]({'message':_0xefd1('0x23')});}};exports[_0xefd1('0x24')]=function(_0x3a950d,_0x223d8f){if(_0x3a950d[_0xefd1('0x17')]['id']){delete _0x3a950d[_0xefd1('0x17')]['id'];}if(_0x3a950d[_0xefd1('0x16')]['id']){return pm2[_0xefd1('0x25')](_0x3a950d[_0xefd1('0x16')]['id'])[_0xefd1('0x13')](function(_0x294779){pm2[_0xefd1('0x26')]();return _0x294779[0x0];})[_0xefd1('0x13')](respondWithResult(_0x223d8f,null))[_0xefd1('0x14')](handleError(_0x223d8f,null));}else{return _0x223d8f[_0xefd1('0x6')](0x1f4)[_0xefd1('0xa')]({'message':_0xefd1('0x27')});}};
\ No newline at end of file
+var _0x65cb=['catch','show','describe','params','create','body','script','join','../../files/plugins','cwd','chdir','dirname','start','dump','send','restart','stop','hasOwnProperty','destroy','delete','lodash','../../config/logger','api','path','exec','bluebird','status','json','stack','name','npm\x20install','info','index','list','then','length'];(function(_0x13b973,_0x2aafdc){var _0x1eceb0=function(_0x2bffb3){while(--_0x2bffb3){_0x13b973['push'](_0x13b973['shift']());}};_0x1eceb0(++_0x2aafdc);}(_0x65cb,0xa4));var _0xb65c=function(_0x201e11,_0x247b5b){_0x201e11=_0x201e11-0x0;var _0x36de26=_0x65cb[_0x201e11];return _0x36de26;};'use strict';var _=require(_0xb65c('0x0'));var pm2=require('../../config/pm2');var logger=require(_0xb65c('0x1'))(_0xb65c('0x2'));var path=require(_0xb65c('0x3'));var exec=require('child_process')[_0xb65c('0x4')];var BPromise=require(_0xb65c('0x5'));function handleEntityNotFound(_0x24d54b,_0x418710){return function(_0x9962ce){if(!_0x9962ce){_0x24d54b['sendStatus'](0x194);;}return _0x9962ce;};}function respondWithResult(_0x38d414,_0x1c6718){_0x1c6718=_0x1c6718||0xc8;return function(_0x25087d){if(_0x25087d){return _0x38d414[_0xb65c('0x6')](_0x1c6718)[_0xb65c('0x7')](_0x25087d);}return null;};}function handleError(_0x23dffb,_0x22b6a3){_0x22b6a3=_0x22b6a3||0x1f4;return function(_0x1c7524){logger['error'](_0x1c7524[_0xb65c('0x8')]);if(_0x1c7524[_0xb65c('0x9')]){delete _0x1c7524[_0xb65c('0x9')];}_0x23dffb[_0xb65c('0x6')](_0x22b6a3)['send'](_0x1c7524);};}function execChildProcess(){return new BPromise(function(_0x131587,_0x4add05){exec(_0xb65c('0xa'),function(_0x1697b1,_0x423664,_0x3fd2f4){logger[_0xb65c('0xb')](_0x423664);logger[_0xb65c('0xb')](_0x3fd2f4);if(_0x1697b1){logger['error'](_0x1697b1);return _0x4add05(_0x1697b1);}return _0x131587(_0x423664);});});}exports[_0xb65c('0xc')]=function(_0x242ba6,_0x41c336){return pm2[_0xb65c('0xd')]()[_0xb65c('0xe')](function(_0x11ebca){if(_0x11ebca){var _0x2821e2=_['reject'](_0x11ebca,function(_0x3bd91d){return _0x3bd91d[_0xb65c('0x9')]==='express'||_0x3bd91d[_0xb65c('0x9')]==='motion2';});return{'rows':_0x2821e2,'count':_0x2821e2[_0xb65c('0xf')]};}return null;})[_0xb65c('0xe')](respondWithResult(_0x41c336,null))[_0xb65c('0x10')](handleError(_0x41c336,null));};exports[_0xb65c('0x11')]=function(_0x24c1e2,_0x396eb2){return pm2[_0xb65c('0x12')](_0x24c1e2[_0xb65c('0x13')]['id'])[_0xb65c('0xe')](respondWithResult(_0x396eb2,null))[_0xb65c('0xe')](handleEntityNotFound(_0x396eb2,null))[_0xb65c('0x10')](handleError(_0x396eb2,null));};exports[_0xb65c('0x14')]=function(_0x2fe603,_0x2a7c3d){if(_0x2fe603[_0xb65c('0x15')]['name']&&_0x2fe603[_0xb65c('0x15')][_0xb65c('0x16')]){var _0x45b7e9=path[_0xb65c('0x17')](__dirname,_0xb65c('0x18'),_0x2fe603[_0xb65c('0x15')][_0xb65c('0x16')]);var _0x2727cc=process[_0xb65c('0x19')]();process[_0xb65c('0x1a')](path[_0xb65c('0x1b')](_0x45b7e9));return execChildProcess()[_0xb65c('0xe')](function(_0xd04d5){process[_0xb65c('0x1a')](_0x2727cc);return pm2[_0xb65c('0x1c')]({'name':_0x2fe603[_0xb65c('0x15')][_0xb65c('0x9')],'script':_0x45b7e9});})['then'](function(_0xe6e1b0){pm2[_0xb65c('0x1d')]();return _0xe6e1b0[0x0];})[_0xb65c('0xe')](respondWithResult(_0x2a7c3d,0xc9))['catch'](handleError(_0x2a7c3d,null));}else{return _0x2a7c3d[_0xb65c('0x6')](0x1f4)[_0xb65c('0x1e')]({'message':'Missing\x20name\x20and/or\x20path'});}};exports['update']=function(_0x4033bd,_0x2d7133){if(_0x4033bd[_0xb65c('0x15')]['id']){delete _0x4033bd[_0xb65c('0x15')]['id'];}var _0x4a9b0c={'online':_0xb65c('0x1f'),'stopped':_0xb65c('0x20')};if(_0x4a9b0c[_0xb65c('0x21')](_0x4033bd[_0xb65c('0x15')][_0xb65c('0x6')])){return pm2[_0x4a9b0c[_0x4033bd[_0xb65c('0x15')]['status']]](_0x4033bd[_0xb65c('0x13')]['id'])[_0xb65c('0xe')](respondWithResult(_0x2d7133,0xc8))[_0xb65c('0x10')](handleError(_0x2d7133,null));}else{return _0x2d7133['status'](0x1f4)[_0xb65c('0x1e')]({'message':'Unknown\x20status'});}};exports[_0xb65c('0x22')]=function(_0x1284cd,_0x48eb26){if(_0x1284cd[_0xb65c('0x15')]['id']){delete _0x1284cd[_0xb65c('0x15')]['id'];}if(_0x1284cd[_0xb65c('0x13')]['id']){return pm2[_0xb65c('0x23')](_0x1284cd[_0xb65c('0x13')]['id'])[_0xb65c('0xe')](function(_0x358d20){pm2[_0xb65c('0x1d')]();return _0x358d20[0x0];})['then'](respondWithResult(_0x48eb26,null))[_0xb65c('0x10')](handleError(_0x48eb26,null));}else{return _0x48eb26[_0xb65c('0x6')](0x1f4)[_0xb65c('0x1e')]({'message':'Unknown\x20id'});}};
\ No newline at end of file
index 6261222..786674b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x69af=['path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer','util'];(function(_0x5598f9,_0x589368){var _0x4ce613=function(_0x281a96){while(--_0x281a96){_0x5598f9['push'](_0x5598f9['shift']());}};_0x4ce613(++_0x589368);}(_0x69af,0xfa));var _0xf69a=function(_0x2612a8,_0x59a51d){_0x2612a8=_0x2612a8-0x0;var _0x47dd16=_0x69af[_0x2612a8];return _0x47dd16;};'use strict';var multer=require(_0xf69a('0x0'));var util=require(_0xf69a('0x1'));var path=require(_0xf69a('0x2'));var express=require(_0xf69a('0x3'));var router=express[_0xf69a('0x4')]();var auth=require(_0xf69a('0x5'));var interaction=require(_0xf69a('0x6'));var config=require(_0xf69a('0x7'));module[_0xf69a('0x8')]=router;
\ No newline at end of file
+var _0x14b5=['exports','multer','util','path','../../components/interaction/service','../../config/environment'];(function(_0x31710b,_0x460621){var _0x1eabc7=function(_0x229aa9){while(--_0x229aa9){_0x31710b['push'](_0x31710b['shift']());}};_0x1eabc7(++_0x460621);}(_0x14b5,0x79));var _0x514b=function(_0x52f706,_0x328da7){_0x52f706=_0x52f706-0x0;var _0x7f3a67=_0x14b5[_0x52f706];return _0x7f3a67;};'use strict';var multer=require(_0x514b('0x0'));var util=require(_0x514b('0x1'));var path=require(_0x514b('0x2'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x514b('0x3'));var config=require(_0x514b('0x4'));module[_0x514b('0x5')]=router;
\ No newline at end of file
index a3a4b6d..9709449 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x375c=['STRING','INTEGER','sequelize','DATE'];(function(_0x48961c,_0x280e9d){var _0x1d895d=function(_0x248ffa){while(--_0x248ffa){_0x48961c['push'](_0x48961c['shift']());}};_0x1d895d(++_0x280e9d);}(_0x375c,0x12a));var _0xc375=function(_0x22e644,_0x43f7a5){_0x22e644=_0x22e644-0x0;var _0x20d58b=_0x375c[_0x22e644];return _0x20d58b;};'use strict';var Sequelize=require(_0xc375('0x0'));module['exports']={'state':{'type':Sequelize['INTEGER'](0x2)},'statedesc':{'type':Sequelize['STRING']},'scheduledat':{'type':Sequelize[_0xc375('0x1')]},'uniqueid':{'type':Sequelize[_0xc375('0x2')]},'starttime':{'type':Sequelize[_0xc375('0x1')]},'responsetime':{'type':Sequelize['DATE']},'ringtime':{'type':Sequelize[_0xc375('0x3')],'defaultValue':0x0},'campaign':{'type':Sequelize[_0xc375('0x2')]},'campaigntype':{'type':Sequelize[_0xc375('0x2')]},'membername':{'type':Sequelize[_0xc375('0x2')]}};
\ No newline at end of file
+var _0x201e=['DATE','INTEGER','STRING'];(function(_0x1157e6,_0x3f66b8){var _0x20f857=function(_0x311f43){while(--_0x311f43){_0x1157e6['push'](_0x1157e6['shift']());}};_0x20f857(++_0x3f66b8);}(_0x201e,0x148));var _0xe201=function(_0x35da42,_0x5c2610){_0x35da42=_0x35da42-0x0;var _0x370035=_0x201e[_0x35da42];return _0x370035;};'use strict';var Sequelize=require('sequelize');module['exports']={'state':{'type':Sequelize[_0xe201('0x0')](0x2)},'statedesc':{'type':Sequelize[_0xe201('0x1')]},'scheduledat':{'type':Sequelize[_0xe201('0x2')]},'uniqueid':{'type':Sequelize[_0xe201('0x1')]},'starttime':{'type':Sequelize['DATE']},'responsetime':{'type':Sequelize['DATE']},'ringtime':{'type':Sequelize[_0xe201('0x0')],'defaultValue':0x0},'campaign':{'type':Sequelize['STRING']},'campaigntype':{'type':Sequelize[_0xe201('0x1')]},'membername':{'type':Sequelize[_0xe201('0x1')]}};
\ No newline at end of file
index 77d1f24..7bff126 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0157=['define','report_agent_preview','../../config/logger','api','bluebird','./reportAgentPreview.attributes','exports'];(function(_0x4c3aee,_0x43b177){var _0x56c7d2=function(_0xfa7722){while(--_0xfa7722){_0x4c3aee['push'](_0x4c3aee['shift']());}};_0x56c7d2(++_0x43b177);}(_0x0157,0x1a6));var _0x7015=function(_0x300fa6,_0x4fab17){_0x300fa6=_0x300fa6-0x0;var _0x5606b2=_0x0157[_0x300fa6];return _0x5606b2;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x7015('0x0'))(_0x7015('0x1'));var moment=require('moment');var BPromise=require(_0x7015('0x2'));var rp=require('request-promise');var attributes=require(_0x7015('0x3'));module[_0x7015('0x4')]=function(_0x22bb7f,_0x550afb){return _0x22bb7f[_0x7015('0x5')]('ReportAgentPreview',attributes,{'tableName':_0x7015('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xaf05=['request-promise','./reportAgentPreview.attributes','exports','define','ReportAgentPreview','report_agent_preview','lodash','util','api','moment','bluebird'];(function(_0x5a9c0c,_0x4ec485){var _0x53c77d=function(_0x1cf384){while(--_0x1cf384){_0x5a9c0c['push'](_0x5a9c0c['shift']());}};_0x53c77d(++_0x4ec485);}(_0xaf05,0xf8));var _0x5af0=function(_0x170f0b,_0x41a031){_0x170f0b=_0x170f0b-0x0;var _0x375771=_0xaf05[_0x170f0b];return _0x375771;};'use strict';var _=require(_0x5af0('0x0'));var util=require(_0x5af0('0x1'));var logger=require('../../config/logger')(_0x5af0('0x2'));var moment=require(_0x5af0('0x3'));var BPromise=require(_0x5af0('0x4'));var rp=require(_0x5af0('0x5'));var attributes=require(_0x5af0('0x6'));module[_0x5af0('0x7')]=function(_0x164a8e,_0xf15508){return _0x164a8e[_0x5af0('0x8')](_0x5af0('0x9'),attributes,{'tableName':_0x5af0('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d2dcb90..314de07 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x25fa=['catch','lodash','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','http','request','then','ReportAgentPreview,\x20%s,\x20%s','request\x20sent','ReportAgentPreview,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','CreateReportAgentPreview','create','options','debug'];(function(_0x5e51b5,_0x4d0217){var _0x8988f2=function(_0x564e86){while(--_0x564e86){_0x5e51b5['push'](_0x5e51b5['shift']());}};_0x8988f2(++_0x4d0217);}(_0x25fa,0x109));var _0xa25f=function(_0x486a43,_0xf09f4b){_0x486a43=_0x486a43-0x0;var _0x148247=_0x25fa[_0x486a43];return _0x148247;};'use strict';var _=require(_0xa25f('0x0'));var util=require('util');var moment=require(_0xa25f('0x1'));var BPromise=require(_0xa25f('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xa25f('0x3'))['db'];var utils=require(_0xa25f('0x4'));var logger=require(_0xa25f('0x5'))('rpc');var config=require('../../config/environment');var jayson=require(_0xa25f('0x6'));var client=jayson['client'][_0xa25f('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x3ab530,_0x29666d,_0x455225){return new BPromise(function(_0x22982b,_0x168907){return client[_0xa25f('0x8')](_0x3ab530,_0x455225)[_0xa25f('0x9')](function(_0xa27a42){logger['info'](_0xa25f('0xa'),_0x29666d,_0xa25f('0xb'));logger['debug'](_0xa25f('0xc'),_0x29666d,_0xa25f('0xb'),JSON[_0xa25f('0xd')](_0xa27a42));if(_0xa27a42[_0xa25f('0xe')]){if(_0xa27a42['error'][_0xa25f('0xf')]===0x1f4){logger[_0xa25f('0xe')]('ReportAgentPreview,\x20%s,\x20%s',_0x29666d,_0xa27a42[_0xa25f('0xe')][_0xa25f('0x10')]);return _0x168907(_0xa27a42['error'][_0xa25f('0x10')]);}logger[_0xa25f('0xe')](_0xa25f('0xa'),_0x29666d,_0xa27a42[_0xa25f('0xe')][_0xa25f('0x10')]);return _0x22982b(_0xa27a42[_0xa25f('0xe')][_0xa25f('0x10')]);}else{logger[_0xa25f('0x11')](_0xa25f('0xa'),_0x29666d,_0xa25f('0xb'));_0x22982b(_0xa27a42[_0xa25f('0x12')][_0xa25f('0x10')]);}})['catch'](function(_0x2d4f0f){logger[_0xa25f('0xe')](_0xa25f('0xa'),_0x29666d,_0x2d4f0f);_0x168907(_0x2d4f0f);});});}exports[_0xa25f('0x13')]=function(_0x18705c){var _0x427105=this;return new Promise(function(_0x4a4805,_0x292171){return db['ReportAgentPreview'][_0xa25f('0x14')](_0x18705c['body'],{'raw':_0x18705c['options']?_0x18705c[_0xa25f('0x15')]['raw']===undefined?!![]:![]:!![]})[_0xa25f('0x9')](function(_0x131c68){logger[_0xa25f('0x11')](_0xa25f('0x13'),_0x18705c);logger[_0xa25f('0x16')]('CreateReportAgentPreview',_0x18705c,JSON[_0xa25f('0xd')](_0x131c68));_0x4a4805(_0x131c68);})[_0xa25f('0x17')](function(_0x371716){logger[_0xa25f('0xe')]('CreateReportAgentPreview',_0x371716[_0xa25f('0x10')],_0x18705c);_0x292171(_0x427105[_0xa25f('0xe')](0x1f4,_0x371716[_0xa25f('0x10')]));});});};
\ No newline at end of file
+var _0x8ca9=['ReportAgentPreview,\x20%s,\x20%s','request\x20sent','debug','ReportAgentPreview,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','CreateReportAgentPreview','ReportAgentPreview','create','body','options','raw','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','client','request','then','info'];(function(_0x5338b3,_0x581ed1){var _0x149a57=function(_0x4974b4){while(--_0x4974b4){_0x5338b3['push'](_0x5338b3['shift']());}};_0x149a57(++_0x581ed1);}(_0x8ca9,0x9c));var _0x98ca=function(_0xfdfc3,_0x50066e){_0xfdfc3=_0xfdfc3-0x0;var _0x375878=_0x8ca9[_0xfdfc3];return _0x375878;};'use strict';var _=require(_0x98ca('0x0'));var util=require(_0x98ca('0x1'));var moment=require(_0x98ca('0x2'));var BPromise=require(_0x98ca('0x3'));var rs=require(_0x98ca('0x4'));var fs=require('fs');var db=require(_0x98ca('0x5'))['db'];var utils=require(_0x98ca('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0x98ca('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x98ca('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x219619,_0xca4097,_0x18c349){return new BPromise(function(_0x2852a0,_0x323c95){return client[_0x98ca('0x9')](_0x219619,_0x18c349)[_0x98ca('0xa')](function(_0x210234){logger[_0x98ca('0xb')](_0x98ca('0xc'),_0xca4097,_0x98ca('0xd'));logger[_0x98ca('0xe')](_0x98ca('0xf'),_0xca4097,_0x98ca('0xd'),JSON[_0x98ca('0x10')](_0x210234));if(_0x210234[_0x98ca('0x11')]){if(_0x210234[_0x98ca('0x11')][_0x98ca('0x12')]===0x1f4){logger['error'](_0x98ca('0xc'),_0xca4097,_0x210234[_0x98ca('0x11')][_0x98ca('0x13')]);return _0x323c95(_0x210234[_0x98ca('0x11')]['message']);}logger[_0x98ca('0x11')](_0x98ca('0xc'),_0xca4097,_0x210234[_0x98ca('0x11')][_0x98ca('0x13')]);return _0x2852a0(_0x210234[_0x98ca('0x11')][_0x98ca('0x13')]);}else{logger[_0x98ca('0xb')]('ReportAgentPreview,\x20%s,\x20%s',_0xca4097,_0x98ca('0xd'));_0x2852a0(_0x210234[_0x98ca('0x14')][_0x98ca('0x13')]);}})[_0x98ca('0x15')](function(_0x52e9c8){logger[_0x98ca('0x11')](_0x98ca('0xc'),_0xca4097,_0x52e9c8);_0x323c95(_0x52e9c8);});});}exports[_0x98ca('0x16')]=function(_0x1ce43a){var _0x4523bb=this;return new Promise(function(_0x3ca209,_0x28c8a6){return db[_0x98ca('0x17')][_0x98ca('0x18')](_0x1ce43a[_0x98ca('0x19')],{'raw':_0x1ce43a[_0x98ca('0x1a')]?_0x1ce43a['options'][_0x98ca('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0x47a3f1){logger[_0x98ca('0xb')]('CreateReportAgentPreview',_0x1ce43a);logger['debug'](_0x98ca('0x16'),_0x1ce43a,JSON[_0x98ca('0x10')](_0x47a3f1));_0x3ca209(_0x47a3f1);})[_0x98ca('0x15')](function(_0x519927){logger[_0x98ca('0x11')](_0x98ca('0x16'),_0x519927['message'],_0x1ce43a);_0x28c8a6(_0x4523bb[_0x98ca('0x11')](0x1f4,_0x519927['message']));});});};
\ No newline at end of file
index 2a6fc1a..e739c96 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde25=['agents','put','agentCapacity','/telephones','/trunks','/campaigns','campaigns','faxAccounts','/chat/queues/waitinginteractions','chatQueuesWaitingInteractions','/mail/queues/waitinginteractions','/openchannel/queues/waitinginteractions','smsQueuesWaitingInteractions','/fax/queues/waitinginteractions','faxQueuesWaitingInteractions','post','/mail/queues/:id/notify','queueNotify','/mail/queues/:id','showMailQueues','chat','/chat/queues/:id','showChatQueues','fax','/fax/queues/:id','/openchannel/queues/:id/notify','/openchannel/queues/:id','showOpenchannelQueues','/sms/queues/:id/notify','sms','/sms/queues/:id','showSmsQueues','/agents/:id/notify','agentNotify','exports','multer','path','express','Router','../../components/auth/service','./rpc.controller','/voice/channels','isAuthenticated','voiceChannels','/voice/channels/:uniqueid/mixmonitor','get','/voice/channels/:uniqueid/stopmixmonitor','voiceChannelStopMixMonitor','/voice/queues','voiceQueues','/chat/queues','chatQueues','/mail/queues','mailQueues','/mail/accounts','mailAccounts','/openchannel/queues','/fax/queues','faxQueues','/voice/queues/preview/:id','voiceQueuesPreview','/voice/queues/channels','voiceQueuesChannels','/voice/queues/channels/:uniqueid','voiceQueuesChannel','/voice/queues/channels/:uniqueid/hangup','/voice/queues/channels/:uniqueid/redirect/:exten','voiceQueuesChannelRedirect','/voice/queues/:id','showVoiceQueues','/outbound','outbound','/outbound/channels','outboundChannels','/agents'];(function(_0x35dc0f,_0x5f4e78){var _0x19f554=function(_0x476d48){while(--_0x476d48){_0x35dc0f['push'](_0x35dc0f['shift']());}};_0x19f554(++_0x5f4e78);}(_0xde25,0x104));var _0x5de2=function(_0x3835a8,_0x4f74a2){_0x3835a8=_0x3835a8-0x0;var _0x46196c=_0xde25[_0x3835a8];return _0x46196c;};'use strict';var multer=require(_0x5de2('0x0'));var util=require('util');var path=require(_0x5de2('0x1'));var express=require(_0x5de2('0x2'));var router=express[_0x5de2('0x3')]();var auth=require(_0x5de2('0x4'));var controller=require(_0x5de2('0x5'));router['get'](_0x5de2('0x6'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x8')]);router['get'](_0x5de2('0x9'),auth[_0x5de2('0x7')](),controller['voiceChannelMixMonitor']);router[_0x5de2('0xa')](_0x5de2('0xb'),auth[_0x5de2('0x7')](),controller[_0x5de2('0xc')]);router[_0x5de2('0xa')](_0x5de2('0xd'),auth['isAuthenticated'](),controller[_0x5de2('0xe')]);router[_0x5de2('0xa')](_0x5de2('0xf'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x10')]);router[_0x5de2('0xa')](_0x5de2('0x11'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x12')]);router[_0x5de2('0xa')](_0x5de2('0x13'),auth['isAuthenticated'](),controller[_0x5de2('0x14')]);router[_0x5de2('0xa')](_0x5de2('0x15'),auth[_0x5de2('0x7')](),controller['openchannelQueues']);router[_0x5de2('0xa')]('/sms/queues',auth['isAuthenticated'](),controller['smsQueues']);router[_0x5de2('0xa')](_0x5de2('0x16'),auth['isAuthenticated'](),controller[_0x5de2('0x17')]);router[_0x5de2('0xa')](_0x5de2('0x18'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x19')]);router[_0x5de2('0xa')](_0x5de2('0x1a'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x1b')]);router[_0x5de2('0xa')](_0x5de2('0x1c'),auth['isAuthenticated'](),controller[_0x5de2('0x1d')]);router[_0x5de2('0xa')](_0x5de2('0x1e'),auth['isAuthenticated'](),controller['voiceQueuesChannelHangup']);router[_0x5de2('0xa')](_0x5de2('0x1f'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x20')]);router[_0x5de2('0xa')](_0x5de2('0x21'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x22')]);router[_0x5de2('0xa')](_0x5de2('0x23'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x24')]);router[_0x5de2('0xa')](_0x5de2('0x25'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x26')]);router[_0x5de2('0xa')](_0x5de2('0x27'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x28')]);router[_0x5de2('0x29')]('/agents/:id/capacity',auth[_0x5de2('0x7')](),controller[_0x5de2('0x2a')]);router[_0x5de2('0xa')](_0x5de2('0x2b'),auth['isAuthenticated'](),controller['telephones']);router[_0x5de2('0xa')](_0x5de2('0x2c'),auth[_0x5de2('0x7')](),controller['trunks']);router['get'](_0x5de2('0x2d'),auth['isAuthenticated'](),controller[_0x5de2('0x2e')]);router['get']('/fax/accounts',auth[_0x5de2('0x7')](),controller[_0x5de2('0x2f')]);router[_0x5de2('0xa')](_0x5de2('0x30'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x31')]);router[_0x5de2('0xa')](_0x5de2('0x32'),auth[_0x5de2('0x7')](),controller['mailQueuesWaitingInteractions']);router[_0x5de2('0xa')](_0x5de2('0x33'),auth[_0x5de2('0x7')](),controller['openchannelQueuesWaitingInteractions']);router[_0x5de2('0xa')]('/sms/queues/waitinginteractions',auth[_0x5de2('0x7')](),controller[_0x5de2('0x34')]);router[_0x5de2('0xa')](_0x5de2('0x35'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x36')]);router[_0x5de2('0x37')](_0x5de2('0x38'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x39')]('mail'));router[_0x5de2('0xa')](_0x5de2('0x3a'),auth['isAuthenticated'](),controller[_0x5de2('0x3b')]);router['post']('/chat/queues/:id/notify',auth[_0x5de2('0x7')](),controller[_0x5de2('0x39')](_0x5de2('0x3c')));router[_0x5de2('0xa')](_0x5de2('0x3d'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x3e')]);router[_0x5de2('0x37')]('/fax/queues/:id/notify',auth[_0x5de2('0x7')](),controller[_0x5de2('0x39')](_0x5de2('0x3f')));router[_0x5de2('0xa')](_0x5de2('0x40'),auth['isAuthenticated'](),controller['showFaxQueues']);router[_0x5de2('0x37')](_0x5de2('0x41'),auth[_0x5de2('0x7')](),controller['queueNotify']('openchannel'));router['get'](_0x5de2('0x42'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x43')]);router['post'](_0x5de2('0x44'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x39')](_0x5de2('0x45')));router[_0x5de2('0xa')](_0x5de2('0x46'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x47')]);router['post'](_0x5de2('0x48'),auth[_0x5de2('0x7')](),controller[_0x5de2('0x49')]);module[_0x5de2('0x4a')]=router;
\ No newline at end of file
+var _0xb5f8=['voiceChannelMixMonitor','/voice/channels/:uniqueid/stopmixmonitor','/voice/queues','/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','voiceQueuesChannel','/voice/queues/channels/:uniqueid/hangup','voiceQueuesChannelHangup','/outbound','put','/agents/:id/capacity','agentCapacity','/telephones','telephones','/trunks','trunks','/campaigns','/fax/accounts','faxAccounts','/chat/queues/waitinginteractions','chatQueuesWaitingInteractions','/mail/queues/waitinginteractions','mailQueuesWaitingInteractions','/openchannel/queues/waitinginteractions','openchannelQueuesWaitingInteractions','/sms/queues/waitinginteractions','smsQueuesWaitingInteractions','/fax/queues/waitinginteractions','faxQueuesWaitingInteractions','post','/mail/queues/:id/notify','queueNotify','mail','showMailQueues','/chat/queues/:id/notify','chat','/chat/queues/:id','showChatQueues','/fax/queues/:id/notify','/fax/queues/:id','showFaxQueues','/openchannel/queues/:id/notify','openchannel','/openchannel/queues/:id','showOpenchannelQueues','/sms/queues/:id','showSmsQueues','/agents/:id/notify','agentNotify','exports','multer','util','path','express','../../components/auth/service','get','/voice/channels','isAuthenticated','voiceChannels','/voice/channels/:uniqueid/mixmonitor'];(function(_0x585f74,_0x5cf93b){var _0x1f55de=function(_0x5432be){while(--_0x5432be){_0x585f74['push'](_0x585f74['shift']());}};_0x1f55de(++_0x5cf93b);}(_0xb5f8,0x168));var _0x8b5f=function(_0x3fda5f,_0x19bbd9){_0x3fda5f=_0x3fda5f-0x0;var _0x42fe58=_0xb5f8[_0x3fda5f];return _0x42fe58;};'use strict';var multer=require(_0x8b5f('0x0'));var util=require(_0x8b5f('0x1'));var path=require(_0x8b5f('0x2'));var express=require(_0x8b5f('0x3'));var router=express['Router']();var auth=require(_0x8b5f('0x4'));var controller=require('./rpc.controller');router[_0x8b5f('0x5')](_0x8b5f('0x6'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x8')]);router['get'](_0x8b5f('0x9'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0xa')]);router[_0x8b5f('0x5')](_0x8b5f('0xb'),auth[_0x8b5f('0x7')](),controller['voiceChannelStopMixMonitor']);router[_0x8b5f('0x5')](_0x8b5f('0xc'),auth['isAuthenticated'](),controller['voiceQueues']);router[_0x8b5f('0x5')](_0x8b5f('0xd'),auth[_0x8b5f('0x7')](),controller['chatQueues']);router[_0x8b5f('0x5')](_0x8b5f('0xe'),auth['isAuthenticated'](),controller[_0x8b5f('0xf')]);router['get'](_0x8b5f('0x10'),auth['isAuthenticated'](),controller[_0x8b5f('0x11')]);router[_0x8b5f('0x5')](_0x8b5f('0x12'),auth['isAuthenticated'](),controller[_0x8b5f('0x13')]);router[_0x8b5f('0x5')](_0x8b5f('0x14'),auth['isAuthenticated'](),controller[_0x8b5f('0x15')]);router[_0x8b5f('0x5')](_0x8b5f('0x16'),auth['isAuthenticated'](),controller[_0x8b5f('0x17')]);router[_0x8b5f('0x5')](_0x8b5f('0x18'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x19')]);router[_0x8b5f('0x5')](_0x8b5f('0x1a'),auth['isAuthenticated'](),controller[_0x8b5f('0x1b')]);router[_0x8b5f('0x5')](_0x8b5f('0x1c'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x1d')]);router['get'](_0x8b5f('0x1e'),auth['isAuthenticated'](),controller[_0x8b5f('0x1f')]);router[_0x8b5f('0x5')]('/voice/queues/channels/:uniqueid/redirect/:exten',auth[_0x8b5f('0x7')](),controller['voiceQueuesChannelRedirect']);router[_0x8b5f('0x5')]('/voice/queues/:id',auth[_0x8b5f('0x7')](),controller['showVoiceQueues']);router[_0x8b5f('0x5')](_0x8b5f('0x20'),auth[_0x8b5f('0x7')](),controller['outbound']);router[_0x8b5f('0x5')]('/outbound/channels',auth[_0x8b5f('0x7')](),controller['outboundChannels']);router[_0x8b5f('0x5')]('/agents',auth[_0x8b5f('0x7')](),controller['agents']);router[_0x8b5f('0x21')](_0x8b5f('0x22'),auth['isAuthenticated'](),controller[_0x8b5f('0x23')]);router[_0x8b5f('0x5')](_0x8b5f('0x24'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x25')]);router[_0x8b5f('0x5')](_0x8b5f('0x26'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x27')]);router[_0x8b5f('0x5')](_0x8b5f('0x28'),auth['isAuthenticated'](),controller['campaigns']);router['get'](_0x8b5f('0x29'),auth['isAuthenticated'](),controller[_0x8b5f('0x2a')]);router['get'](_0x8b5f('0x2b'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x2c')]);router[_0x8b5f('0x5')](_0x8b5f('0x2d'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x2e')]);router[_0x8b5f('0x5')](_0x8b5f('0x2f'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x30')]);router[_0x8b5f('0x5')](_0x8b5f('0x31'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x32')]);router[_0x8b5f('0x5')](_0x8b5f('0x33'),auth['isAuthenticated'](),controller[_0x8b5f('0x34')]);router[_0x8b5f('0x35')](_0x8b5f('0x36'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x37')](_0x8b5f('0x38')));router[_0x8b5f('0x5')]('/mail/queues/:id',auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x39')]);router['post'](_0x8b5f('0x3a'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x37')](_0x8b5f('0x3b')));router[_0x8b5f('0x5')](_0x8b5f('0x3c'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x3d')]);router[_0x8b5f('0x35')](_0x8b5f('0x3e'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x37')]('fax'));router['get'](_0x8b5f('0x3f'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x40')]);router[_0x8b5f('0x35')](_0x8b5f('0x41'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x37')](_0x8b5f('0x42')));router['get'](_0x8b5f('0x43'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x44')]);router[_0x8b5f('0x35')]('/sms/queues/:id/notify',auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x37')]('sms'));router[_0x8b5f('0x5')](_0x8b5f('0x45'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x46')]);router[_0x8b5f('0x35')](_0x8b5f('0x47'),auth[_0x8b5f('0x7')](),controller[_0x8b5f('0x48')]);module[_0x8b5f('0x49')]=router;
\ No newline at end of file
index 0fc12c5..93fc74e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1792=['OpenchannelQueues','showOpenchannelQueues','smsQueues','showSmsQueues','SmsQueues','faxQueues','FaxQueues','showFaxQueues','faxAccounts','FaxAccounts','chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','MailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','OpenchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','SmsQueuesWaitingInteractions','faxQueuesWaitingInteractions','queueNotify','capitalize','chat','Website','findOne','\x20Queue\x20not\x20found','Message','messageId','Interaction','Account','\x20Message\x20not\x20found','update','queue','MessageId','From','TransferReport','create','Start','*,*,*,*','agentNotify','channel','Agent\x20not\x20found','InteractionId','agentTransferTimeout','bluebird','moment','lodash','../../mysqldb','../../config/logger','api','client','error','code','message','status','json','sendStatus','name','send','isNil','rows','find','VoiceChannels','then','catch','voiceChannelMixMonitor','VoiceChannelMixMonitor','merge','query','params','voiceQueues','showVoiceQueues','VoiceQueues','voiceQueuesPreview','VoiceQueuesPreview','voiceQueuesChannelHangup','voiceQueuesChannelRedirect','VoiceQueuesChannelRedirect','outbound','Outbound','outboundChannels','OutboundChannels','agents','Agents','agentCapacity','body','interaction','user','hasOwnProperty','MemberReport','findAll','INTERACTION','length','updateAttributes','findOrCreate','format','agent','internal','AgentCapacity','capacity','telephones','Telephones','Trunks','campaigns','Campaigns','chatQueues','ChatQueues','showChatQueues','mailQueues','MailQueues'];(function(_0x3937b6,_0xd53d2b){var _0x1ba356=function(_0x4816cc){while(--_0x4816cc){_0x3937b6['push'](_0x3937b6['shift']());}};_0x1ba356(++_0xd53d2b);}(_0x1792,0x1da));var _0x2179=function(_0x5aef5a,_0x3ad0db){_0x5aef5a=_0x5aef5a-0x0;var _0xcff0b4=_0x1792[_0x5aef5a];return _0xcff0b4;};'use strict';var BPromise=require(_0x2179('0x0'));var moment=require(_0x2179('0x1'));var _=require(_0x2179('0x2'));var db=require(_0x2179('0x3'))['db'];var logger=require(_0x2179('0x4'))(_0x2179('0x5'));var jayson=require('jayson/promise');var amiClient=jayson[_0x2179('0x6')]['http']({'port':0x232a});var mailClient=jayson[_0x2179('0x6')]['http']({'port':0x232b});var routingClient=jayson[_0x2179('0x6')]['http']({'port':0x232c});function respondWithRpcPromise(_0x58c6d9,_0x4b7cb4,_0x1fec7b){return new BPromise(function(_0x11211f,_0x138b58){var _0x93b319=_0x1fec7b?_0x1fec7b:amiClient;return _0x93b319['request'](_0x58c6d9,_0x4b7cb4)['then'](function(_0xdf8440){if(_0xdf8440[_0x2179('0x7')]){if(_0xdf8440[_0x2179('0x7')][_0x2179('0x8')]===0x1f4){return _0x138b58(_0xdf8440[_0x2179('0x7')][_0x2179('0x9')]);}return _0x11211f(_0xdf8440[_0x2179('0x7')][_0x2179('0x9')]);}else{_0x11211f(_0xdf8440['result']);}})['catch'](function(_0xdfbd01){_0x138b58(_0xdfbd01);});});}function respondWithResult(_0x283e92,_0x3bd486){_0x3bd486=_0x3bd486||0xc8;return function(_0x28b9f1){if(_0x28b9f1){return _0x283e92[_0x2179('0xa')](_0x3bd486)[_0x2179('0xb')](_0x28b9f1);}return _0x283e92[_0x2179('0xc')](0x194);};}function handleError(_0x778eb5,_0x42b497){_0x42b497=_0x42b497||0x1f4;return function(_0x2987f3){logger[_0x2179('0x7')](_0x2987f3['stack']);if(_0x2987f3[_0x2179('0xd')]){delete _0x2987f3['name'];}_0x778eb5[_0x2179('0xa')](_0x42b497)[_0x2179('0xe')](_0x2987f3);};}function findById(_0x12f665){return function(_0x43ed41){if(!_[_0x2179('0xf')](_0x12f665)&&!_[_0x2179('0xf')](_0x43ed41)&&!_[_0x2179('0xf')](_0x43ed41[_0x2179('0x10')])){return _[_0x2179('0x11')](_0x43ed41['rows'],function(_0x37a3fc){return _0x37a3fc['id']==_0x12f665;});}return null;};}exports['voiceChannels']=function(_0x2dd464,_0x47cccb){return respondWithRpcPromise(_0x2179('0x12'),_0x2dd464['query'])[_0x2179('0x13')](respondWithResult(_0x47cccb,null))[_0x2179('0x14')](handleError(_0x47cccb,null));};exports[_0x2179('0x15')]=function(_0x506afc,_0x22fdd4){return respondWithRpcPromise(_0x2179('0x16'),_[_0x2179('0x17')](_0x506afc[_0x2179('0x18')],_0x506afc[_0x2179('0x19')]))[_0x2179('0x13')](respondWithResult(_0x22fdd4,null))['catch'](handleError(_0x22fdd4,null));};exports['voiceChannelStopMixMonitor']=function(_0x1fead1,_0x52a554){return respondWithRpcPromise('VoiceChannelStopMixMonitor',_[_0x2179('0x17')](_0x1fead1[_0x2179('0x18')],_0x1fead1[_0x2179('0x19')]))[_0x2179('0x13')](respondWithResult(_0x52a554,null))[_0x2179('0x14')](handleError(_0x52a554,null));};exports[_0x2179('0x1a')]=function(_0xce6a16,_0x4e3843){return respondWithRpcPromise('VoiceQueues',_0xce6a16[_0x2179('0x18')])[_0x2179('0x13')](respondWithResult(_0x4e3843,null))[_0x2179('0x14')](handleError(_0x4e3843,null));};exports[_0x2179('0x1b')]=function(_0x3fa71e,_0x186870){return respondWithRpcPromise(_0x2179('0x1c'),_0x3fa71e['query'])[_0x2179('0x13')](findById(_0x3fa71e[_0x2179('0x19')]['id']))[_0x2179('0x13')](respondWithResult(_0x186870,null))['catch'](handleError(_0x186870,null));};exports[_0x2179('0x1d')]=function(_0x418ab7,_0x5111e2){return respondWithRpcPromise(_0x2179('0x1e'),_[_0x2179('0x17')](_0x418ab7[_0x2179('0x18')],_0x418ab7['params']))[_0x2179('0x13')](respondWithResult(_0x5111e2,null))[_0x2179('0x14')](handleError(_0x5111e2,null));};exports['voiceQueuesChannels']=function(_0x553d82,_0x36526b){return respondWithRpcPromise('VoiceQueuesChannels',_0x553d82[_0x2179('0x18')])[_0x2179('0x13')](respondWithResult(_0x36526b,null))[_0x2179('0x14')](handleError(_0x36526b,null));};exports['voiceQueuesChannel']=function(_0x332825,_0x172edf){return respondWithRpcPromise('VoiceQueuesChannel',_['merge'](_0x332825[_0x2179('0x18')],_0x332825['params']))[_0x2179('0x13')](respondWithResult(_0x172edf,null))[_0x2179('0x14')](handleError(_0x172edf,null));};exports[_0x2179('0x1f')]=function(_0x33d4a5,_0x40dd99){return respondWithRpcPromise('VoiceQueuesChannelHangup',_[_0x2179('0x17')](_0x33d4a5['query'],_0x33d4a5[_0x2179('0x19')]))['then'](respondWithResult(_0x40dd99,null))['catch'](handleError(_0x40dd99,null));};exports[_0x2179('0x20')]=function(_0x263f8d,_0x177f50){return respondWithRpcPromise(_0x2179('0x21'),_[_0x2179('0x17')](_0x263f8d[_0x2179('0x18')],_0x263f8d['params']))[_0x2179('0x13')](respondWithResult(_0x177f50,null))[_0x2179('0x14')](handleError(_0x177f50,null));};exports[_0x2179('0x22')]=function(_0x3d11d4,_0x31084f){return respondWithRpcPromise(_0x2179('0x23'),_0x3d11d4[_0x2179('0x18')])[_0x2179('0x13')](respondWithResult(_0x31084f,null))[_0x2179('0x14')](handleError(_0x31084f,null));};exports[_0x2179('0x24')]=function(_0x395b28,_0x3f57e7){return respondWithRpcPromise(_0x2179('0x25'),_0x395b28[_0x2179('0x18')])['then'](respondWithResult(_0x3f57e7,null))[_0x2179('0x14')](handleError(_0x3f57e7,null));};exports[_0x2179('0x26')]=function(_0x492497,_0x475013){var _0x125829;return respondWithRpcPromise(_0x2179('0x27'),_0x492497[_0x2179('0x18')])['then'](function(_0x2c706c){_0x125829=_0x2c706c;return respondWithRpcPromise(_0x2179('0x27'),_0x492497[_0x2179('0x18')],routingClient);})[_0x2179('0x13')](function(_0x45e726){return _[_0x2179('0x17')]({},_0x45e726,_0x125829);})['then'](respondWithResult(_0x475013,null))[_0x2179('0x14')](handleError(_0x475013,null));};exports[_0x2179('0x28')]=function(_0x2f7e8c,_0x267dca){if(_0x2f7e8c[_0x2179('0x29')]&&_0x2f7e8c[_0x2179('0x29')][_0x2179('0x2a')]&&_0x2f7e8c['user']&&_0x2f7e8c[_0x2179('0x2b')]['name']){for(var _0x5b5134 in _0x2f7e8c[_0x2179('0x29')]['interaction']){if(_0x2f7e8c['body'][_0x2179('0x2a')][_0x2179('0x2c')](_0x5b5134)){db[_0x2179('0x2d')][_0x2179('0x2e')]({'where':{'channel':_0x5b5134,'membername':_0x2f7e8c[_0x2179('0x2b')][_0x2179('0xd')],'type':_0x2179('0x2f'),'exitAt':null,'uniqueid':_0x2f7e8c['body']['interaction'][_0x5b5134]&&_0x2f7e8c['body'][_0x2179('0x2a')][_0x5b5134][_0x2179('0x30')]?{'$notIn':_0x2f7e8c['body']['interaction'][_0x5b5134]}:{'$ne':null}}})[_0x2179('0x13')](function(_0x5c3b04){var _0x309840=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');for(var _0x4c041d=0x0,_0x2c36dc=_0x5c3b04[_0x2179('0x30')];_0x4c041d<_0x2c36dc;_0x4c041d+=0x1){_0x5c3b04[_0x4c041d][_0x2179('0x31')]({'exitAt':_0x309840});}});for(var _0x3b4585=0x0;_0x3b4585<_0x2f7e8c[_0x2179('0x29')][_0x2179('0x2a')][_0x5b5134]['length'];_0x3b4585+=0x1){db[_0x2179('0x2d')][_0x2179('0x32')]({'where':{'channel':_0x5b5134,'membername':_0x2f7e8c[_0x2179('0x2b')][_0x2179('0xd')],'type':_0x2179('0x2f'),'uniqueid':_0x2f7e8c[_0x2179('0x29')][_0x2179('0x2a')][_0x5b5134][_0x3b4585],'exitAt':null},'defaults':{'channel':_0x5b5134,'membername':_0x2f7e8c[_0x2179('0x2b')][_0x2179('0xd')],'interface':'SIP/'+_0x2f7e8c[_0x2179('0x2b')]['name'],'type':_0x2179('0x2f'),'enterAt':moment()[_0x2179('0x33')]('YYYY-MM-DD\x20HH:mm:ss'),'role':_0x2179('0x34'),'internal':_0x2f7e8c['user'][_0x2179('0x35')],'uniqueid':_0x2f7e8c[_0x2179('0x29')][_0x2179('0x2a')][_0x5b5134][_0x3b4585]}});}}}}return respondWithRpcPromise(_0x2179('0x36'),{'id':_0x2f7e8c[_0x2179('0x19')]['id'],'capacity':_0x2f7e8c[_0x2179('0x29')][_0x2179('0x37')]},routingClient)[_0x2179('0x13')](respondWithResult(_0x267dca,null))[_0x2179('0x14')](handleError(_0x267dca,null));};exports[_0x2179('0x38')]=function(_0x5c89d8,_0x5c59cb){return respondWithRpcPromise(_0x2179('0x39'),_0x5c89d8[_0x2179('0x18')])[_0x2179('0x13')](respondWithResult(_0x5c59cb,null))[_0x2179('0x14')](handleError(_0x5c59cb,null));};exports['trunks']=function(_0x2da210,_0x1dd6b1){return respondWithRpcPromise(_0x2179('0x3a'),_0x2da210['query'])[_0x2179('0x13')](respondWithResult(_0x1dd6b1,null))[_0x2179('0x14')](handleError(_0x1dd6b1,null));};exports[_0x2179('0x3b')]=function(_0x3b1a2f,_0x2b509a){return respondWithRpcPromise(_0x2179('0x3c'),_0x3b1a2f['query'])[_0x2179('0x13')](respondWithResult(_0x2b509a,null))['catch'](handleError(_0x2b509a,null));};exports[_0x2179('0x3d')]=function(_0x149fca,_0x3091a8){return respondWithRpcPromise(_0x2179('0x3e'),_0x149fca[_0x2179('0x18')],routingClient)[_0x2179('0x13')](respondWithResult(_0x3091a8,null))['catch'](handleError(_0x3091a8,null));};exports[_0x2179('0x3f')]=function(_0x1a6cb4,_0x5800f5){return respondWithRpcPromise(_0x2179('0x3e'),_0x1a6cb4[_0x2179('0x18')],routingClient)['then'](findById(_0x1a6cb4[_0x2179('0x19')]['id']))[_0x2179('0x13')](respondWithResult(_0x5800f5,null))[_0x2179('0x14')](handleError(_0x5800f5,null));};exports[_0x2179('0x40')]=function(_0x598af3,_0x1172b6){return respondWithRpcPromise(_0x2179('0x41'),_0x598af3[_0x2179('0x18')],routingClient)[_0x2179('0x13')](respondWithResult(_0x1172b6,null))[_0x2179('0x14')](handleError(_0x1172b6,null));};exports['showMailQueues']=function(_0x46b02d,_0x2226bd){return respondWithRpcPromise('MailQueues',_0x46b02d[_0x2179('0x18')],routingClient)[_0x2179('0x13')](findById(_0x46b02d[_0x2179('0x19')]['id']))[_0x2179('0x13')](respondWithResult(_0x2226bd,null))[_0x2179('0x14')](handleError(_0x2226bd,null));};exports['mailAccounts']=function(_0x3a3ca7,_0x3fb34e){return respondWithRpcPromise('MailAccounts',_0x3a3ca7['query'],mailClient)[_0x2179('0x13')](respondWithResult(_0x3fb34e,null))[_0x2179('0x14')](handleError(_0x3fb34e,null));};exports['openchannelQueues']=function(_0x51e0a0,_0x1f4edd){return respondWithRpcPromise(_0x2179('0x42'),_0x51e0a0[_0x2179('0x18')],routingClient)['then'](respondWithResult(_0x1f4edd,null))['catch'](handleError(_0x1f4edd,null));};exports[_0x2179('0x43')]=function(_0x4192ff,_0x5a1fcb){return respondWithRpcPromise('OpenchannelQueues',_0x4192ff['query'],routingClient)[_0x2179('0x13')](findById(_0x4192ff[_0x2179('0x19')]['id']))[_0x2179('0x13')](respondWithResult(_0x5a1fcb,null))['catch'](handleError(_0x5a1fcb,null));};exports[_0x2179('0x44')]=function(_0x9eb08b,_0x2792ab){return respondWithRpcPromise('SmsQueues',_0x9eb08b[_0x2179('0x18')],routingClient)[_0x2179('0x13')](respondWithResult(_0x2792ab,null))[_0x2179('0x14')](handleError(_0x2792ab,null));};exports[_0x2179('0x45')]=function(_0x7d68f2,_0x14931b){return respondWithRpcPromise(_0x2179('0x46'),_0x7d68f2['query'],routingClient)['then'](findById(_0x7d68f2[_0x2179('0x19')]['id']))['then'](respondWithResult(_0x14931b,null))[_0x2179('0x14')](handleError(_0x14931b,null));};exports[_0x2179('0x47')]=function(_0x13a718,_0x4afb96){return respondWithRpcPromise(_0x2179('0x48'),_0x13a718[_0x2179('0x18')],routingClient)[_0x2179('0x13')](respondWithResult(_0x4afb96,null))[_0x2179('0x14')](handleError(_0x4afb96,null));};exports[_0x2179('0x49')]=function(_0x10368a,_0x2cc913){return respondWithRpcPromise(_0x2179('0x48'),_0x10368a[_0x2179('0x18')],routingClient)[_0x2179('0x13')](findById(_0x10368a[_0x2179('0x19')]['id']))[_0x2179('0x13')](respondWithResult(_0x2cc913,null))[_0x2179('0x14')](handleError(_0x2cc913,null));};exports[_0x2179('0x4a')]=function(_0x500352,_0x2df439){return respondWithRpcPromise(_0x2179('0x4b'),_0x500352[_0x2179('0x18')])[_0x2179('0x13')](respondWithResult(_0x2df439,null))[_0x2179('0x14')](handleError(_0x2df439,null));};exports[_0x2179('0x4c')]=function(_0x544b53,_0x3fc701){return respondWithRpcPromise('ChatQueuesWaitingInteractions',_0x544b53['query'],routingClient)[_0x2179('0x13')](respondWithResult(_0x3fc701,null))['catch'](handleError(_0x3fc701,null));};exports[_0x2179('0x4d')]=function(_0x53ea41,_0x841bce){return respondWithRpcPromise(_0x2179('0x4e'),_0x53ea41[_0x2179('0x18')],routingClient)[_0x2179('0x13')](respondWithResult(_0x841bce,null))['catch'](handleError(_0x841bce,null));};exports[_0x2179('0x4f')]=function(_0x3f94a0,_0x20c63b){return respondWithRpcPromise(_0x2179('0x50'),_0x3f94a0['query'],routingClient)[_0x2179('0x13')](respondWithResult(_0x20c63b,null))['catch'](handleError(_0x20c63b,null));};exports[_0x2179('0x51')]=function(_0x233612,_0xd27f6c){return respondWithRpcPromise(_0x2179('0x52'),_0x233612[_0x2179('0x18')],routingClient)['then'](respondWithResult(_0xd27f6c,null))[_0x2179('0x14')](handleError(_0xd27f6c,null));};exports[_0x2179('0x53')]=function(_0x4f5173,_0x37ad9b){return respondWithRpcPromise('FaxQueuesWaitingInteractions',_0x4f5173[_0x2179('0x18')],routingClient)[_0x2179('0x13')](respondWithResult(_0x37ad9b,null))[_0x2179('0x14')](handleError(_0x37ad9b,null));};exports[_0x2179('0x54')]=function(_0x48c421){return function(_0x566da0,_0x14400c){var _0x3e9834,_0x552990;var _0x237c4f=_[_0x2179('0x55')](_0x48c421);var _0x215900=_0x48c421===_0x2179('0x56')?_0x2179('0x57'):'Account';return db[_0x237c4f+'Queue'][_0x2179('0x58')]({'raw':!![],'where':{'id':_0x566da0[_0x2179('0x19')]['id']}})[_0x2179('0x13')](function(_0x494f67){if(_[_0x2179('0xf')](_0x494f67)){throw new Error(_0x237c4f+_0x2179('0x59'));}_0x3e9834=_0x494f67;return db[_0x237c4f+_0x2179('0x5a')][_0x2179('0x58')]({'where':{'id':_0x566da0[_0x2179('0x29')][_0x2179('0x5b')]},'include':[{'model':db[_0x237c4f+_0x2179('0x5c')],'as':'Interaction'},{'model':db[_0x237c4f+_0x215900],'as':_0x2179('0x5d')}]});})[_0x2179('0x13')](function(_0x305bfb){if(_[_0x2179('0xf')](_0x305bfb)){throw new Error(_0x237c4f+_0x2179('0x5e'));}_0x552990=_0x305bfb;return _0x305bfb[_0x2179('0x5f')]({'read':0x0,'readAt':null,'UserId':null});})[_0x2179('0x13')](function(){var _0x100002={'uniqueid':_0x48c421+'.'+_0x552990['id']+'.'+_0x552990[_0x2179('0x5c')]['id'],'FromUserId':_0x566da0[_0x2179('0x2b')]['id'],'type':_0x2179('0x60')};_0x100002[_0x237c4f+_0x2179('0x61')]=_0x552990['id'];_0x100002[_0x237c4f+'InteractionId']=_0x552990['Interaction']['id'];_0x100002[_0x2179('0x62')+_0x237c4f+_0x215900+'Id']=_0x552990[_0x2179('0x5d')]['id'];_0x100002['To'+_0x237c4f+'QueueId']=_0x3e9834['id'];return db[_0x237c4f+_0x2179('0x63')][_0x2179('0x64')](_0x100002);})[_0x2179('0x13')](function(){return respondWithRpcPromise(_0x2179('0x65'),{'channel':_0x48c421,'interaction':_0x552990['Interaction'],'message':_0x552990,'account':_0x552990['Account'],'applications':[{'id':0x0,'priority':0x1,'app':_0x2179('0x60'),'appdata':_0x3e9834[_0x2179('0xd')]+','+(_0x552990[_0x2179('0x5d')]['queueTransferTimeout']||0x12c),'interval':_0x2179('0x66')}]},routingClient);})[_0x2179('0x13')](respondWithResult(_0x14400c,null))[_0x2179('0x14')](handleError(_0x14400c,null));};};exports[_0x2179('0x67')]=function(_0x276659,_0x1e1729){var _0x405a43,_0x51fdac;if(_[_0x2179('0xf')](_0x276659['body'][_0x2179('0x68')])){throw new Error('Channel\x20field\x20is\x20mandatory');}var _0x346d71=_0x276659[_0x2179('0x29')]['channel'];var _0xdf0fb8=_[_0x2179('0x55')](_0x346d71);var _0x2e9d36=_0x346d71==='chat'?_0x2179('0x57'):_0x2179('0x5d');return db['User'][_0x2179('0x58')]({'raw':!![],'where':{'id':_0x276659['params']['id'],'role':_0x2179('0x34')}})[_0x2179('0x13')](function(_0x9fc679){if(_[_0x2179('0xf')](_0x9fc679)){throw new Error(_0x2179('0x69'));}_0x405a43=_0x9fc679;return db[_0xdf0fb8+_0x2179('0x5a')][_0x2179('0x58')]({'where':{'id':_0x276659[_0x2179('0x29')]['messageId']},'include':[{'model':db[_0xdf0fb8+_0x2179('0x5c')],'as':_0x2179('0x5c')},{'model':db[_0xdf0fb8+_0x2e9d36],'as':'Account'}]});})['then'](function(_0x25ac88){if(_[_0x2179('0xf')](_0x25ac88)){throw new Error(_0xdf0fb8+_0x2179('0x5e'));}_0x51fdac=_0x25ac88;return _0x25ac88[_0x2179('0x5f')]({'read':0x0,'readAt':null,'UserId':null});})['then'](function(){var _0x163197={'uniqueid':_0x346d71+'.'+_0x51fdac['id']+'.'+_0x51fdac['Interaction']['id'],'FromUserId':_0x276659[_0x2179('0x2b')]['id'],'type':'queue','ToUserId':_0x405a43['id']};_0x163197[_0xdf0fb8+_0x2179('0x61')]=_0x51fdac['id'];_0x163197[_0xdf0fb8+_0x2179('0x6a')]=_0x51fdac['Interaction']['id'];_0x163197[_0x2179('0x62')+_0xdf0fb8+_0x2e9d36+'Id']=_0x51fdac[_0x2179('0x5d')]['id'];return db[_0xdf0fb8+_0x2179('0x63')][_0x2179('0x64')](_0x163197);})[_0x2179('0x13')](function(){return respondWithRpcPromise(_0x2179('0x65'),{'channel':_0x346d71,'interaction':_0x51fdac[_0x2179('0x5c')],'message':_0x51fdac,'account':_0x51fdac[_0x2179('0x5d')],'applications':[{'id':0x0,'priority':0x1,'app':_0x2179('0x34'),'appdata':_0x405a43[_0x2179('0xd')]+','+(_0x51fdac[_0x2179('0x5d')][_0x2179('0x6b')]||0x12c),'interval':_0x2179('0x66')}]},routingClient);})[_0x2179('0x13')](respondWithResult(_0x1e1729,null))[_0x2179('0x14')](handleError(_0x1e1729,null));};
\ No newline at end of file
+var _0x0a71=['Start','queue','queueTransferTimeout','*,*,*,*','Channel\x20field\x20is\x20mandatory','Agent\x20not\x20found','agentTransferTimeout','bluebird','lodash','../../mysqldb','api','jayson/promise','client','http','request','error','message','catch','status','json','stack','name','send','isNil','rows','find','voiceChannels','VoiceChannels','then','VoiceChannelMixMonitor','query','params','voiceChannelStopMixMonitor','merge','voiceQueues','showVoiceQueues','VoiceQueues','VoiceQueuesChannels','voiceQueuesChannel','VoiceQueuesChannelHangup','voiceQueuesChannelRedirect','VoiceQueuesChannelRedirect','outbound','outboundChannels','OutboundChannels','Agents','agentCapacity','body','interaction','user','hasOwnProperty','MemberReport','findAll','INTERACTION','length','YYYY-MM-DD\x20HH:mm:ss','updateAttributes','findOrCreate','format','agent','capacity','telephones','Telephones','trunks','chatQueues','showChatQueues','mailQueues','MailQueues','showMailQueues','mailAccounts','MailAccounts','openchannelQueues','OpenchannelQueues','smsQueues','SmsQueues','showSmsQueues','faxQueues','FaxQueues','showFaxQueues','chatQueuesWaitingInteractions','ChatQueuesWaitingInteractions','MailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','OpenchannelQueuesWaitingInteractions','FaxQueuesWaitingInteractions','queueNotify','chat','Website','Queue','findOne','messageId','Interaction','Account','\x20Message\x20not\x20found','update','MessageId','InteractionId','From','QueueId','TransferReport','create'];(function(_0x3c6b7d,_0x5f0d90){var _0x1d3ed2=function(_0x1a8f35){while(--_0x1a8f35){_0x3c6b7d['push'](_0x3c6b7d['shift']());}};_0x1d3ed2(++_0x5f0d90);}(_0x0a71,0xd1));var _0x10a7=function(_0x52f98f,_0x25be6e){_0x52f98f=_0x52f98f-0x0;var _0x2ace4d=_0x0a71[_0x52f98f];return _0x2ace4d;};'use strict';var BPromise=require(_0x10a7('0x0'));var moment=require('moment');var _=require(_0x10a7('0x1'));var db=require(_0x10a7('0x2'))['db'];var logger=require('../../config/logger')(_0x10a7('0x3'));var jayson=require(_0x10a7('0x4'));var amiClient=jayson[_0x10a7('0x5')][_0x10a7('0x6')]({'port':0x232a});var mailClient=jayson[_0x10a7('0x5')]['http']({'port':0x232b});var routingClient=jayson[_0x10a7('0x5')][_0x10a7('0x6')]({'port':0x232c});function respondWithRpcPromise(_0x24e671,_0x40bee8,_0x1afd6c){return new BPromise(function(_0x360cad,_0x3493f7){var _0x2264fd=_0x1afd6c?_0x1afd6c:amiClient;return _0x2264fd[_0x10a7('0x7')](_0x24e671,_0x40bee8)['then'](function(_0x1a2646){if(_0x1a2646[_0x10a7('0x8')]){if(_0x1a2646['error']['code']===0x1f4){return _0x3493f7(_0x1a2646['error'][_0x10a7('0x9')]);}return _0x360cad(_0x1a2646[_0x10a7('0x8')][_0x10a7('0x9')]);}else{_0x360cad(_0x1a2646['result']);}})[_0x10a7('0xa')](function(_0x1299a4){_0x3493f7(_0x1299a4);});});}function respondWithResult(_0x4aa8b7,_0xe585d3){_0xe585d3=_0xe585d3||0xc8;return function(_0x52913f){if(_0x52913f){return _0x4aa8b7[_0x10a7('0xb')](_0xe585d3)[_0x10a7('0xc')](_0x52913f);}return _0x4aa8b7['sendStatus'](0x194);};}function handleError(_0x16539b,_0x29ad54){_0x29ad54=_0x29ad54||0x1f4;return function(_0x40880c){logger[_0x10a7('0x8')](_0x40880c[_0x10a7('0xd')]);if(_0x40880c[_0x10a7('0xe')]){delete _0x40880c['name'];}_0x16539b[_0x10a7('0xb')](_0x29ad54)[_0x10a7('0xf')](_0x40880c);};}function findById(_0x51f2fb){return function(_0x30ba93){if(!_[_0x10a7('0x10')](_0x51f2fb)&&!_[_0x10a7('0x10')](_0x30ba93)&&!_[_0x10a7('0x10')](_0x30ba93[_0x10a7('0x11')])){return _[_0x10a7('0x12')](_0x30ba93[_0x10a7('0x11')],function(_0x46c7ab){return _0x46c7ab['id']==_0x51f2fb;});}return null;};}exports[_0x10a7('0x13')]=function(_0x4477b0,_0x2bc85d){return respondWithRpcPromise(_0x10a7('0x14'),_0x4477b0['query'])[_0x10a7('0x15')](respondWithResult(_0x2bc85d,null))[_0x10a7('0xa')](handleError(_0x2bc85d,null));};exports['voiceChannelMixMonitor']=function(_0x3bb665,_0x521c9b){return respondWithRpcPromise(_0x10a7('0x16'),_['merge'](_0x3bb665[_0x10a7('0x17')],_0x3bb665[_0x10a7('0x18')]))['then'](respondWithResult(_0x521c9b,null))['catch'](handleError(_0x521c9b,null));};exports[_0x10a7('0x19')]=function(_0x1b7ed1,_0x2e0592){return respondWithRpcPromise('VoiceChannelStopMixMonitor',_[_0x10a7('0x1a')](_0x1b7ed1[_0x10a7('0x17')],_0x1b7ed1[_0x10a7('0x18')]))['then'](respondWithResult(_0x2e0592,null))[_0x10a7('0xa')](handleError(_0x2e0592,null));};exports[_0x10a7('0x1b')]=function(_0x5b2a6a,_0x5810f6){return respondWithRpcPromise('VoiceQueues',_0x5b2a6a[_0x10a7('0x17')])[_0x10a7('0x15')](respondWithResult(_0x5810f6,null))[_0x10a7('0xa')](handleError(_0x5810f6,null));};exports[_0x10a7('0x1c')]=function(_0x567819,_0x2fb349){return respondWithRpcPromise(_0x10a7('0x1d'),_0x567819['query'])['then'](findById(_0x567819[_0x10a7('0x18')]['id']))[_0x10a7('0x15')](respondWithResult(_0x2fb349,null))[_0x10a7('0xa')](handleError(_0x2fb349,null));};exports['voiceQueuesPreview']=function(_0xe53494,_0x179b4d){return respondWithRpcPromise('VoiceQueuesPreview',_['merge'](_0xe53494[_0x10a7('0x17')],_0xe53494['params']))[_0x10a7('0x15')](respondWithResult(_0x179b4d,null))[_0x10a7('0xa')](handleError(_0x179b4d,null));};exports['voiceQueuesChannels']=function(_0x287815,_0x234925){return respondWithRpcPromise(_0x10a7('0x1e'),_0x287815['query'])[_0x10a7('0x15')](respondWithResult(_0x234925,null))[_0x10a7('0xa')](handleError(_0x234925,null));};exports[_0x10a7('0x1f')]=function(_0xdf9833,_0x481b5e){return respondWithRpcPromise('VoiceQueuesChannel',_['merge'](_0xdf9833[_0x10a7('0x17')],_0xdf9833[_0x10a7('0x18')]))[_0x10a7('0x15')](respondWithResult(_0x481b5e,null))[_0x10a7('0xa')](handleError(_0x481b5e,null));};exports['voiceQueuesChannelHangup']=function(_0x4359af,_0xf553a3){return respondWithRpcPromise(_0x10a7('0x20'),_[_0x10a7('0x1a')](_0x4359af[_0x10a7('0x17')],_0x4359af[_0x10a7('0x18')]))['then'](respondWithResult(_0xf553a3,null))[_0x10a7('0xa')](handleError(_0xf553a3,null));};exports[_0x10a7('0x21')]=function(_0x3cde04,_0x51a14b){return respondWithRpcPromise(_0x10a7('0x22'),_[_0x10a7('0x1a')](_0x3cde04[_0x10a7('0x17')],_0x3cde04[_0x10a7('0x18')]))[_0x10a7('0x15')](respondWithResult(_0x51a14b,null))[_0x10a7('0xa')](handleError(_0x51a14b,null));};exports[_0x10a7('0x23')]=function(_0x3b6243,_0x39da07){return respondWithRpcPromise('Outbound',_0x3b6243[_0x10a7('0x17')])[_0x10a7('0x15')](respondWithResult(_0x39da07,null))[_0x10a7('0xa')](handleError(_0x39da07,null));};exports[_0x10a7('0x24')]=function(_0x4deb96,_0x2d3965){return respondWithRpcPromise(_0x10a7('0x25'),_0x4deb96[_0x10a7('0x17')])[_0x10a7('0x15')](respondWithResult(_0x2d3965,null))[_0x10a7('0xa')](handleError(_0x2d3965,null));};exports['agents']=function(_0x535028,_0x12c66c){var _0x2d28af;return respondWithRpcPromise(_0x10a7('0x26'),_0x535028[_0x10a7('0x17')])[_0x10a7('0x15')](function(_0x381972){_0x2d28af=_0x381972;return respondWithRpcPromise(_0x10a7('0x26'),_0x535028[_0x10a7('0x17')],routingClient);})[_0x10a7('0x15')](function(_0x1877f5){return _['merge']({},_0x1877f5,_0x2d28af);})[_0x10a7('0x15')](respondWithResult(_0x12c66c,null))[_0x10a7('0xa')](handleError(_0x12c66c,null));};exports[_0x10a7('0x27')]=function(_0x185810,_0x5541fc){if(_0x185810[_0x10a7('0x28')]&&_0x185810[_0x10a7('0x28')][_0x10a7('0x29')]&&_0x185810[_0x10a7('0x2a')]&&_0x185810[_0x10a7('0x2a')][_0x10a7('0xe')]){for(var _0x6d21b2 in _0x185810[_0x10a7('0x28')][_0x10a7('0x29')]){if(_0x185810[_0x10a7('0x28')][_0x10a7('0x29')][_0x10a7('0x2b')](_0x6d21b2)){db[_0x10a7('0x2c')][_0x10a7('0x2d')]({'where':{'channel':_0x6d21b2,'membername':_0x185810['user']['name'],'type':_0x10a7('0x2e'),'exitAt':null,'uniqueid':_0x185810[_0x10a7('0x28')][_0x10a7('0x29')][_0x6d21b2]&&_0x185810[_0x10a7('0x28')]['interaction'][_0x6d21b2][_0x10a7('0x2f')]?{'$notIn':_0x185810[_0x10a7('0x28')][_0x10a7('0x29')][_0x6d21b2]}:{'$ne':null}}})[_0x10a7('0x15')](function(_0x4a0bcd){var _0xfa3a14=moment()['format'](_0x10a7('0x30'));for(var _0x1a0f08=0x0,_0x5c6638=_0x4a0bcd[_0x10a7('0x2f')];_0x1a0f08<_0x5c6638;_0x1a0f08+=0x1){_0x4a0bcd[_0x1a0f08][_0x10a7('0x31')]({'exitAt':_0xfa3a14});}});for(var _0x509dbe=0x0;_0x509dbe<_0x185810[_0x10a7('0x28')][_0x10a7('0x29')][_0x6d21b2][_0x10a7('0x2f')];_0x509dbe+=0x1){db[_0x10a7('0x2c')][_0x10a7('0x32')]({'where':{'channel':_0x6d21b2,'membername':_0x185810[_0x10a7('0x2a')][_0x10a7('0xe')],'type':'INTERACTION','uniqueid':_0x185810[_0x10a7('0x28')][_0x10a7('0x29')][_0x6d21b2][_0x509dbe],'exitAt':null},'defaults':{'channel':_0x6d21b2,'membername':_0x185810[_0x10a7('0x2a')][_0x10a7('0xe')],'interface':'SIP/'+_0x185810[_0x10a7('0x2a')][_0x10a7('0xe')],'type':'INTERACTION','enterAt':moment()[_0x10a7('0x33')](_0x10a7('0x30')),'role':_0x10a7('0x34'),'internal':_0x185810['user']['internal'],'uniqueid':_0x185810['body'][_0x10a7('0x29')][_0x6d21b2][_0x509dbe]}});}}}}return respondWithRpcPromise('AgentCapacity',{'id':_0x185810['params']['id'],'capacity':_0x185810[_0x10a7('0x28')][_0x10a7('0x35')]},routingClient)[_0x10a7('0x15')](respondWithResult(_0x5541fc,null))[_0x10a7('0xa')](handleError(_0x5541fc,null));};exports[_0x10a7('0x36')]=function(_0x427419,_0x10b0cb){return respondWithRpcPromise(_0x10a7('0x37'),_0x427419[_0x10a7('0x17')])['then'](respondWithResult(_0x10b0cb,null))[_0x10a7('0xa')](handleError(_0x10b0cb,null));};exports[_0x10a7('0x38')]=function(_0x19657c,_0x35b3ba){return respondWithRpcPromise('Trunks',_0x19657c[_0x10a7('0x17')])[_0x10a7('0x15')](respondWithResult(_0x35b3ba,null))[_0x10a7('0xa')](handleError(_0x35b3ba,null));};exports['campaigns']=function(_0x472779,_0x288632){return respondWithRpcPromise('Campaigns',_0x472779[_0x10a7('0x17')])[_0x10a7('0x15')](respondWithResult(_0x288632,null))['catch'](handleError(_0x288632,null));};exports[_0x10a7('0x39')]=function(_0xbf9a19,_0x17e4e6){return respondWithRpcPromise('ChatQueues',_0xbf9a19[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](respondWithResult(_0x17e4e6,null))[_0x10a7('0xa')](handleError(_0x17e4e6,null));};exports[_0x10a7('0x3a')]=function(_0x1e42e8,_0x1d0bb0){return respondWithRpcPromise('ChatQueues',_0x1e42e8[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](findById(_0x1e42e8[_0x10a7('0x18')]['id']))[_0x10a7('0x15')](respondWithResult(_0x1d0bb0,null))[_0x10a7('0xa')](handleError(_0x1d0bb0,null));};exports[_0x10a7('0x3b')]=function(_0x53c89f,_0x270d56){return respondWithRpcPromise(_0x10a7('0x3c'),_0x53c89f[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](respondWithResult(_0x270d56,null))[_0x10a7('0xa')](handleError(_0x270d56,null));};exports[_0x10a7('0x3d')]=function(_0x2766f7,_0x54006c){return respondWithRpcPromise('MailQueues',_0x2766f7[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](findById(_0x2766f7['params']['id']))[_0x10a7('0x15')](respondWithResult(_0x54006c,null))[_0x10a7('0xa')](handleError(_0x54006c,null));};exports[_0x10a7('0x3e')]=function(_0x1f87ee,_0x2f1227){return respondWithRpcPromise(_0x10a7('0x3f'),_0x1f87ee['query'],mailClient)[_0x10a7('0x15')](respondWithResult(_0x2f1227,null))['catch'](handleError(_0x2f1227,null));};exports[_0x10a7('0x40')]=function(_0xe6c799,_0x2aa4eb){return respondWithRpcPromise(_0x10a7('0x41'),_0xe6c799[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](respondWithResult(_0x2aa4eb,null))['catch'](handleError(_0x2aa4eb,null));};exports['showOpenchannelQueues']=function(_0x330762,_0x29dd3b){return respondWithRpcPromise(_0x10a7('0x41'),_0x330762[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](findById(_0x330762[_0x10a7('0x18')]['id']))['then'](respondWithResult(_0x29dd3b,null))[_0x10a7('0xa')](handleError(_0x29dd3b,null));};exports[_0x10a7('0x42')]=function(_0x33a743,_0x391456){return respondWithRpcPromise(_0x10a7('0x43'),_0x33a743[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](respondWithResult(_0x391456,null))[_0x10a7('0xa')](handleError(_0x391456,null));};exports[_0x10a7('0x44')]=function(_0x2d7add,_0x164bde){return respondWithRpcPromise(_0x10a7('0x43'),_0x2d7add[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](findById(_0x2d7add['params']['id']))['then'](respondWithResult(_0x164bde,null))['catch'](handleError(_0x164bde,null));};exports[_0x10a7('0x45')]=function(_0x4d13dd,_0x33a2b9){return respondWithRpcPromise(_0x10a7('0x46'),_0x4d13dd[_0x10a7('0x17')],routingClient)['then'](respondWithResult(_0x33a2b9,null))[_0x10a7('0xa')](handleError(_0x33a2b9,null));};exports[_0x10a7('0x47')]=function(_0x17ab1f,_0xafd830){return respondWithRpcPromise(_0x10a7('0x46'),_0x17ab1f[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](findById(_0x17ab1f[_0x10a7('0x18')]['id']))[_0x10a7('0x15')](respondWithResult(_0xafd830,null))[_0x10a7('0xa')](handleError(_0xafd830,null));};exports['faxAccounts']=function(_0x5b2a68,_0x6926fd){return respondWithRpcPromise('FaxAccounts',_0x5b2a68[_0x10a7('0x17')])[_0x10a7('0x15')](respondWithResult(_0x6926fd,null))['catch'](handleError(_0x6926fd,null));};exports[_0x10a7('0x48')]=function(_0x416639,_0x25ba35){return respondWithRpcPromise(_0x10a7('0x49'),_0x416639[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](respondWithResult(_0x25ba35,null))[_0x10a7('0xa')](handleError(_0x25ba35,null));};exports['mailQueuesWaitingInteractions']=function(_0x55797a,_0x12ea72){return respondWithRpcPromise(_0x10a7('0x4a'),_0x55797a[_0x10a7('0x17')],routingClient)[_0x10a7('0x15')](respondWithResult(_0x12ea72,null))['catch'](handleError(_0x12ea72,null));};exports[_0x10a7('0x4b')]=function(_0xdc6e7a,_0x111f95){return respondWithRpcPromise(_0x10a7('0x4c'),_0xdc6e7a['query'],routingClient)['then'](respondWithResult(_0x111f95,null))[_0x10a7('0xa')](handleError(_0x111f95,null));};exports['smsQueuesWaitingInteractions']=function(_0x3be636,_0x327ce4){return respondWithRpcPromise('SmsQueuesWaitingInteractions',_0x3be636['query'],routingClient)[_0x10a7('0x15')](respondWithResult(_0x327ce4,null))[_0x10a7('0xa')](handleError(_0x327ce4,null));};exports['faxQueuesWaitingInteractions']=function(_0x286c1e,_0x5a3320){return respondWithRpcPromise(_0x10a7('0x4d'),_0x286c1e['query'],routingClient)[_0x10a7('0x15')](respondWithResult(_0x5a3320,null))[_0x10a7('0xa')](handleError(_0x5a3320,null));};exports[_0x10a7('0x4e')]=function(_0xa9ba7e){return function(_0xa75055,_0x5ae005){var _0x35bd40,_0x2b8dd1;var _0x1841ac=_['capitalize'](_0xa9ba7e);var _0x17eb72=_0xa9ba7e===_0x10a7('0x4f')?_0x10a7('0x50'):'Account';return db[_0x1841ac+_0x10a7('0x51')][_0x10a7('0x52')]({'raw':!![],'where':{'id':_0xa75055[_0x10a7('0x18')]['id']}})[_0x10a7('0x15')](function(_0x37e6f8){if(_[_0x10a7('0x10')](_0x37e6f8)){throw new Error(_0x1841ac+'\x20Queue\x20not\x20found');}_0x35bd40=_0x37e6f8;return db[_0x1841ac+'Message']['findOne']({'where':{'id':_0xa75055[_0x10a7('0x28')][_0x10a7('0x53')]},'include':[{'model':db[_0x1841ac+_0x10a7('0x54')],'as':_0x10a7('0x54')},{'model':db[_0x1841ac+_0x17eb72],'as':_0x10a7('0x55')}]});})[_0x10a7('0x15')](function(_0x4fa744){if(_[_0x10a7('0x10')](_0x4fa744)){throw new Error(_0x1841ac+_0x10a7('0x56'));}_0x2b8dd1=_0x4fa744;return _0x4fa744[_0x10a7('0x57')]({'read':0x0,'readAt':null,'UserId':null});})[_0x10a7('0x15')](function(){var _0x40220a={'uniqueid':_0xa9ba7e+'.'+_0x2b8dd1['id']+'.'+_0x2b8dd1[_0x10a7('0x54')]['id'],'FromUserId':_0xa75055[_0x10a7('0x2a')]['id'],'type':'queue'};_0x40220a[_0x1841ac+_0x10a7('0x58')]=_0x2b8dd1['id'];_0x40220a[_0x1841ac+_0x10a7('0x59')]=_0x2b8dd1[_0x10a7('0x54')]['id'];_0x40220a[_0x10a7('0x5a')+_0x1841ac+_0x17eb72+'Id']=_0x2b8dd1[_0x10a7('0x55')]['id'];_0x40220a['To'+_0x1841ac+_0x10a7('0x5b')]=_0x35bd40['id'];return db[_0x1841ac+_0x10a7('0x5c')][_0x10a7('0x5d')](_0x40220a);})[_0x10a7('0x15')](function(){return respondWithRpcPromise(_0x10a7('0x5e'),{'channel':_0xa9ba7e,'interaction':_0x2b8dd1[_0x10a7('0x54')],'message':_0x2b8dd1,'account':_0x2b8dd1[_0x10a7('0x55')],'applications':[{'id':0x0,'priority':0x1,'app':_0x10a7('0x5f'),'appdata':_0x35bd40[_0x10a7('0xe')]+','+(_0x2b8dd1[_0x10a7('0x55')][_0x10a7('0x60')]||0x12c),'interval':_0x10a7('0x61')}]},routingClient);})[_0x10a7('0x15')](respondWithResult(_0x5ae005,null))[_0x10a7('0xa')](handleError(_0x5ae005,null));};};exports['agentNotify']=function(_0x153e1b,_0x40aac5){var _0x50a53f,_0x566ad4;if(_[_0x10a7('0x10')](_0x153e1b[_0x10a7('0x28')]['channel'])){throw new Error(_0x10a7('0x62'));}var _0x35c730=_0x153e1b[_0x10a7('0x28')]['channel'];var _0x483295=_['capitalize'](_0x35c730);var _0x169a2f=_0x35c730===_0x10a7('0x4f')?_0x10a7('0x50'):_0x10a7('0x55');return db['User'][_0x10a7('0x52')]({'raw':!![],'where':{'id':_0x153e1b['params']['id'],'role':'agent'}})[_0x10a7('0x15')](function(_0x5dbb1e){if(_[_0x10a7('0x10')](_0x5dbb1e)){throw new Error(_0x10a7('0x63'));}_0x50a53f=_0x5dbb1e;return db[_0x483295+'Message'][_0x10a7('0x52')]({'where':{'id':_0x153e1b['body'][_0x10a7('0x53')]},'include':[{'model':db[_0x483295+_0x10a7('0x54')],'as':_0x10a7('0x54')},{'model':db[_0x483295+_0x169a2f],'as':_0x10a7('0x55')}]});})['then'](function(_0x2ac920){if(_[_0x10a7('0x10')](_0x2ac920)){throw new Error(_0x483295+_0x10a7('0x56'));}_0x566ad4=_0x2ac920;return _0x2ac920[_0x10a7('0x57')]({'read':0x0,'readAt':null,'UserId':null});})[_0x10a7('0x15')](function(){var _0x3f9d6f={'uniqueid':_0x35c730+'.'+_0x566ad4['id']+'.'+_0x566ad4['Interaction']['id'],'FromUserId':_0x153e1b[_0x10a7('0x2a')]['id'],'type':'queue','ToUserId':_0x50a53f['id']};_0x3f9d6f[_0x483295+'MessageId']=_0x566ad4['id'];_0x3f9d6f[_0x483295+_0x10a7('0x59')]=_0x566ad4[_0x10a7('0x54')]['id'];_0x3f9d6f['From'+_0x483295+_0x169a2f+'Id']=_0x566ad4['Account']['id'];return db[_0x483295+_0x10a7('0x5c')][_0x10a7('0x5d')](_0x3f9d6f);})[_0x10a7('0x15')](function(){return respondWithRpcPromise('Start',{'channel':_0x35c730,'interaction':_0x566ad4['Interaction'],'message':_0x566ad4,'account':_0x566ad4[_0x10a7('0x55')],'applications':[{'id':0x0,'priority':0x1,'app':'agent','appdata':_0x50a53f[_0x10a7('0xe')]+','+(_0x566ad4[_0x10a7('0x55')][_0x10a7('0x64')]||0x12c),'interval':_0x10a7('0x61')}]},routingClient);})[_0x10a7('0x15')](respondWithResult(_0x40aac5,null))[_0x10a7('0xa')](handleError(_0x40aac5,null));};
\ No newline at end of file
index 584c921..0ab317e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1e59=['index','/:id','show','/:id/run','run','post','create','put','update','destroy','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','./schedule.controller','get','isAuthenticated'];(function(_0xc8c7a1,_0x4c9ff2){var _0xa78714=function(_0x19733d){while(--_0x19733d){_0xc8c7a1['push'](_0xc8c7a1['shift']());}};_0xa78714(++_0x4c9ff2);}(_0x1e59,0x97));var _0x91e5=function(_0x23beb1,_0xdcfbed){_0x23beb1=_0x23beb1-0x0;var _0x3bde9d=_0x1e59[_0x23beb1];return _0x3bde9d;};'use strict';var multer=require(_0x91e5('0x0'));var util=require(_0x91e5('0x1'));var path=require('path');var express=require(_0x91e5('0x2'));var router=express[_0x91e5('0x3')]();var auth=require(_0x91e5('0x4'));var interaction=require(_0x91e5('0x5'));var config=require('../../config/environment');var controller=require(_0x91e5('0x6'));router[_0x91e5('0x7')]('/',auth[_0x91e5('0x8')](),controller[_0x91e5('0x9')]);router[_0x91e5('0x7')](_0x91e5('0xa'),auth[_0x91e5('0x8')](),controller[_0x91e5('0xb')]);router[_0x91e5('0x7')](_0x91e5('0xc'),auth[_0x91e5('0x8')](),controller[_0x91e5('0xd')]);router[_0x91e5('0xe')]('/',auth[_0x91e5('0x8')](),controller[_0x91e5('0xf')]);router[_0x91e5('0x10')](_0x91e5('0xa'),auth[_0x91e5('0x8')](),controller[_0x91e5('0x11')]);router['delete'](_0x91e5('0xa'),auth[_0x91e5('0x8')](),controller[_0x91e5('0x12')]);module[_0x91e5('0x13')]=router;
\ No newline at end of file
+var _0x95aa=['get','isAuthenticated','index','/:id','show','/:id/run','create','put','update','delete','destroy','exports','multer','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./schedule.controller'];(function(_0x143d22,_0x1f2ae2){var _0x355b3d=function(_0x359b8a){while(--_0x359b8a){_0x143d22['push'](_0x143d22['shift']());}};_0x355b3d(++_0x1f2ae2);}(_0x95aa,0x91));var _0xa95a=function(_0x5ad07c,_0x324dcd){_0x5ad07c=_0x5ad07c-0x0;var _0x204bae=_0x95aa[_0x5ad07c];return _0x204bae;};'use strict';var multer=require(_0xa95a('0x0'));var util=require('util');var path=require(_0xa95a('0x1'));var express=require(_0xa95a('0x2'));var router=express['Router']();var auth=require(_0xa95a('0x3'));var interaction=require(_0xa95a('0x4'));var config=require(_0xa95a('0x5'));var controller=require(_0xa95a('0x6'));router[_0xa95a('0x7')]('/',auth[_0xa95a('0x8')](),controller[_0xa95a('0x9')]);router[_0xa95a('0x7')](_0xa95a('0xa'),auth['isAuthenticated'](),controller[_0xa95a('0xb')]);router['get'](_0xa95a('0xc'),auth[_0xa95a('0x8')](),controller['run']);router['post']('/',auth[_0xa95a('0x8')](),controller[_0xa95a('0xd')]);router[_0xa95a('0xe')](_0xa95a('0xa'),auth[_0xa95a('0x8')](),controller[_0xa95a('0xf')]);router[_0xa95a('0x10')](_0xa95a('0xa'),auth[_0xa95a('0x8')](),controller[_0xa95a('0x11')]);module[_0xa95a('0x12')]=router;
\ No newline at end of file
index 586dcf4..a85b7be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ac2=['ENUM','years','quarters','weeks','days','minutes','csv','pdf','xlsx','custom','default','BOOLEAN','TEXT','sequelize','exports','STRING','0\x200\x20*\x20*\x20*','DATE','INTEGER'];(function(_0x48cdb1,_0x131e88){var _0xe46be1=function(_0xbe3514){while(--_0xbe3514){_0x48cdb1['push'](_0x48cdb1['shift']());}};_0xe46be1(++_0x131e88);}(_0x4ac2,0x1d5));var _0x24ac=function(_0x4d6912,_0x466d48){_0x4d6912=_0x4d6912-0x0;var _0x4d3d1e=_0x4ac2[_0x4d6912];return _0x4d3d1e;};'use strict';var Sequelize=require(_0x24ac('0x0'));module[_0x24ac('0x1')]={'name':{'type':Sequelize[_0x24ac('0x2')],'allowNull':![]},'description':{'type':Sequelize['STRING']},'active':{'type':Sequelize['BOOLEAN'],'allowNull':![],'defaultValue':![]},'cron':{'type':Sequelize[_0x24ac('0x2')],'allowNull':![],'defaultValue':_0x24ac('0x3')},'startAt':{'type':Sequelize[_0x24ac('0x4')],'allowNull':![]},'endAt':{'type':Sequelize['DATE'],'allowNull':![]},'subtractNumber':{'type':Sequelize[_0x24ac('0x5')],'allowNull':![],'defaultValue':0x1,'validate':{'min':0x1}},'subtractUnit':{'type':Sequelize[_0x24ac('0x6')](_0x24ac('0x7'),_0x24ac('0x8'),'months',_0x24ac('0x9'),_0x24ac('0xa'),'hours',_0x24ac('0xb')),'allowNull':![],'defaultValue':_0x24ac('0xa')},'output':{'type':Sequelize[_0x24ac('0x6')](_0x24ac('0xc'),_0x24ac('0xd'),_0x24ac('0xe')),'allowNull':![],'defaultValue':'csv'},'type':{'type':Sequelize[_0x24ac('0x6')](_0x24ac('0xf'),_0x24ac('0x10')),'allowNull':![],'defaultValue':'custom'},'sendMail':{'type':Sequelize[_0x24ac('0x11')],'defaultValue':![]},'email':{'type':Sequelize[_0x24ac('0x2')]},'cc':{'type':Sequelize['TEXT']},'bcc':{'type':Sequelize[_0x24ac('0x12')]},'sendIfEmpty':{'type':Sequelize[_0x24ac('0x11')],'defaultValue':!![]}};
\ No newline at end of file
+var _0x7db2=['months','weeks','days','hours','minutes','csv','pdf','xlsx','custom','default','TEXT','sequelize','exports','STRING','BOOLEAN','DATE','ENUM','years','quarters'];(function(_0x5ddb1c,_0x5ea4df){var _0x354adc=function(_0x2dfb1f){while(--_0x2dfb1f){_0x5ddb1c['push'](_0x5ddb1c['shift']());}};_0x354adc(++_0x5ea4df);}(_0x7db2,0x7d));var _0x27db=function(_0x327779,_0x5ce13f){_0x327779=_0x327779-0x0;var _0x14c874=_0x7db2[_0x327779];return _0x14c874;};'use strict';var Sequelize=require(_0x27db('0x0'));module[_0x27db('0x1')]={'name':{'type':Sequelize[_0x27db('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x27db('0x2')]},'active':{'type':Sequelize[_0x27db('0x3')],'allowNull':![],'defaultValue':![]},'cron':{'type':Sequelize[_0x27db('0x2')],'allowNull':![],'defaultValue':'0\x200\x20*\x20*\x20*'},'startAt':{'type':Sequelize['DATE'],'allowNull':![]},'endAt':{'type':Sequelize[_0x27db('0x4')],'allowNull':![]},'subtractNumber':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1,'validate':{'min':0x1}},'subtractUnit':{'type':Sequelize[_0x27db('0x5')](_0x27db('0x6'),_0x27db('0x7'),_0x27db('0x8'),_0x27db('0x9'),_0x27db('0xa'),_0x27db('0xb'),_0x27db('0xc')),'allowNull':![],'defaultValue':'days'},'output':{'type':Sequelize[_0x27db('0x5')](_0x27db('0xd'),_0x27db('0xe'),_0x27db('0xf')),'allowNull':![],'defaultValue':_0x27db('0xd')},'type':{'type':Sequelize[_0x27db('0x5')](_0x27db('0x10'),_0x27db('0x11')),'allowNull':![],'defaultValue':_0x27db('0x10')},'sendMail':{'type':Sequelize[_0x27db('0x3')],'defaultValue':![]},'email':{'type':Sequelize[_0x27db('0x2')]},'cc':{'type':Sequelize[_0x27db('0x12')]},'bcc':{'type':Sequelize['TEXT']},'sendIfEmpty':{'type':Sequelize[_0x27db('0x3')],'defaultValue':!![]}};
\ No newline at end of file
index 2e00c3a..139bc73 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['keys','query','dateEnd','dateStart','filters','intersection','model','fields','attributes','length','nolimit','order','sort','where','pick','add','day','merge','filter','map','options','includeAll','include','findAll','catch','show','params','find','body','run','../../config/schedule','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','apply','reject','save','update','then','destroy','end','error','name','send','index','Schedule','rawAttributes'];(function(_0x53cf8e,_0x3d290f){var _0x459197=function(_0x67073c){while(--_0x67073c){_0x53cf8e['push'](_0x53cf8e['shift']());}};_0x459197(++_0x3d290f);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5c3c0b,_0x4ee35e){_0x5c3c0b=_0x5c3c0b-0x0;var _0x52ecd2=_0xa9e0[_0x5c3c0b];return _0x52ecd2;};'use strict';var jsonpatch=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0a9e('0x3'));var path=require('path');var sox=require(_0x0a9e('0x4'));var csv=require(_0x0a9e('0x5'));var ejs=require(_0x0a9e('0x6'));var fs=require('fs');var _=require(_0x0a9e('0x7'));var squel=require(_0x0a9e('0x8'));var crypto=require('crypto');var jsforce=require(_0x0a9e('0x9'));var deskjs=require(_0x0a9e('0xa'));var toCsv=require(_0x0a9e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0a9e('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x0a9e('0xc'));var config=require(_0x0a9e('0xd'));var db=require(_0x0a9e('0xe'))['db'];function respondWithStatusCode(_0x3ab53f,_0xfeb75b){_0xfeb75b=_0xfeb75b||0xcc;return function(_0xbd1168){if(_0xbd1168){return _0x3ab53f['sendStatus'](_0xfeb75b);}return _0x3ab53f['status'](_0xfeb75b)['end']();};}function respondWithResult(_0x4cfe67,_0x273d4d){_0x273d4d=_0x273d4d||0xc8;return function(_0x36471c){if(_0x36471c){return _0x4cfe67[_0x0a9e('0xf')](_0x273d4d)[_0x0a9e('0x10')](_0x36471c);}};}function respondWithFilteredResult(_0x32d742,_0x69aeb7){return function(_0x5db4b0){if(_0x5db4b0){var _0x4283ce=_0x5db4b0[_0x0a9e('0x11')],_0x239b12=_0x69aeb7[_0x0a9e('0x12')],_0x2b4227=_0x69aeb7['offset']+_0x69aeb7[_0x0a9e('0x13')],_0x281129;if(_0x2b4227>=_0x4283ce){_0x2b4227=_0x4283ce;_0x281129=0xc8;}else{_0x281129=0xce;}_0x32d742['status'](_0x281129);return _0x32d742[_0x0a9e('0x14')]('Content-Range',_0x239b12+'-'+_0x2b4227+'/'+_0x4283ce)[_0x0a9e('0x10')](_0x5db4b0);}return null;};}function patchUpdates(_0x12066b){return function(_0x48f32d){try{jsonpatch[_0x0a9e('0x15')](_0x48f32d,_0x12066b,!![]);}catch(_0x5a0a06){return BPromise[_0x0a9e('0x16')](_0x5a0a06);}return _0x48f32d[_0x0a9e('0x17')]();};}function saveUpdates(_0x106033,_0x205fd6){return function(_0x31b1ca){if(_0x31b1ca){return _0x31b1ca[_0x0a9e('0x18')](_0x106033)[_0x0a9e('0x19')](function(_0x20559e){return _0x20559e;});}return null;};}function removeEntity(_0x1314ae,_0x112016){return function(_0x1c696a){if(_0x1c696a){return _0x1c696a[_0x0a9e('0x1a')]()['then'](function(){_0x1314ae[_0x0a9e('0xf')](0xcc)[_0x0a9e('0x1b')]();});}};}function handleEntityNotFound(_0x53682f,_0x20f109){return function(_0x5a09ef){if(!_0x5a09ef){_0x53682f['sendStatus'](0x194);}return _0x5a09ef;};}function handleError(_0x3a02e1,_0x432e56){_0x432e56=_0x432e56||0x1f4;return function(_0x38e7c4){logger[_0x0a9e('0x1c')](_0x38e7c4['stack']);if(_0x38e7c4[_0x0a9e('0x1d')]){delete _0x38e7c4[_0x0a9e('0x1d')];}_0x3a02e1[_0x0a9e('0xf')](_0x432e56)[_0x0a9e('0x1e')](_0x38e7c4);};}exports[_0x0a9e('0x1f')]=function(_0x42ac8f,_0x16b1ca){var _0x5ea472={},_0x59181e={},_0x197ec0={'count':0x0,'rows':[]};var _0x3a8e58=db[_0x0a9e('0x20')][_0x0a9e('0x21')];_0x59181e['model']=_[_0x0a9e('0x22')](_0x3a8e58);var _0x479bc4={'dateStart':_0x42ac8f[_0x0a9e('0x23')]['dateStart'],'dateEnd':_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x24')]};delete _0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x25')];delete _0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x24')];_0x59181e[_0x0a9e('0x23')]=_[_0x0a9e('0x22')](_0x42ac8f['query']);_0x59181e[_0x0a9e('0x26')]=_[_0x0a9e('0x27')](_0x59181e[_0x0a9e('0x28')],_0x59181e[_0x0a9e('0x23')]);_0x5ea472['attributes']=_[_0x0a9e('0x27')](_0x59181e[_0x0a9e('0x28')],qs[_0x0a9e('0x29')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0x5ea472[_0x0a9e('0x2a')]=_0x5ea472[_0x0a9e('0x2a')][_0x0a9e('0x2b')]?_0x5ea472[_0x0a9e('0x2a')]:_0x59181e['model'];if(!_0x42ac8f[_0x0a9e('0x23')]['hasOwnProperty'](_0x0a9e('0x2c'))){_0x5ea472[_0x0a9e('0x13')]=qs[_0x0a9e('0x13')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x13')]);_0x5ea472['offset']=qs[_0x0a9e('0x12')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x12')]);}_0x5ea472[_0x0a9e('0x2d')]=qs[_0x0a9e('0x2e')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x2e')]);_0x5ea472[_0x0a9e('0x2f')]=qs['filters'](_[_0x0a9e('0x30')](_0x42ac8f['query'],_0x59181e[_0x0a9e('0x26')]));if(_0x479bc4[_0x0a9e('0x25')]){if(_0x479bc4[_0x0a9e('0x24')]){_0x479bc4[_0x0a9e('0x24')]=moment(_0x479bc4['dateEnd'])[_0x0a9e('0x31')](0x1,_0x0a9e('0x32'));}else{_0x479bc4[_0x0a9e('0x24')]=moment(_0x479bc4[_0x0a9e('0x25')])['add'](0x1,'day');}_[_0x0a9e('0x33')](_0x5ea472['where'],{'createdAt':{'$gte':_0x479bc4[_0x0a9e('0x25')],'$lte':_0x479bc4[_0x0a9e('0x24')]}});}if(_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x34')]){_0x5ea472['where']=_[_0x0a9e('0x33')](_0x5ea472[_0x0a9e('0x2f')],{'$or':_[_0x0a9e('0x35')](_0x5ea472['attributes'],function(_0x1dbf74){var _0x1a180b={};_0x1a180b[_0x1dbf74]={'$like':'%'+_0x42ac8f[_0x0a9e('0x23')]['filter']+'%'};return _0x1a180b;})});}_0x5ea472=_['merge']({},_0x5ea472,_0x42ac8f[_0x0a9e('0x36')]);var _0x40d766={'where':_0x5ea472['where']};return db[_0x0a9e('0x20')][_0x0a9e('0x11')](_0x40d766)[_0x0a9e('0x19')](function(_0x148f55){_0x197ec0['count']=_0x148f55;if(_0x42ac8f['query'][_0x0a9e('0x37')]){_0x5ea472[_0x0a9e('0x38')]=[{'all':!![]}];}return db['Schedule'][_0x0a9e('0x39')](_0x5ea472);})[_0x0a9e('0x19')](function(_0x1459bb){_0x197ec0['rows']=_0x1459bb;return _0x197ec0;})[_0x0a9e('0x19')](respondWithFilteredResult(_0x16b1ca,_0x5ea472))[_0x0a9e('0x3a')](handleError(_0x16b1ca,null));};exports[_0x0a9e('0x3b')]=function(_0x43dd5b,_0x13cb1f){var _0xeaa5e5={'raw':![],'where':{'id':_0x43dd5b[_0x0a9e('0x3c')]['id']}},_0x2881b3={};_0x2881b3[_0x0a9e('0x28')]=_[_0x0a9e('0x22')](db[_0x0a9e('0x20')][_0x0a9e('0x21')]);_0x2881b3[_0x0a9e('0x23')]=_[_0x0a9e('0x22')](_0x43dd5b[_0x0a9e('0x23')]);_0x2881b3['filters']=_['intersection'](_0x2881b3[_0x0a9e('0x28')],_0x2881b3[_0x0a9e('0x23')]);_0xeaa5e5[_0x0a9e('0x2a')]=_[_0x0a9e('0x27')](_0x2881b3[_0x0a9e('0x28')],qs[_0x0a9e('0x29')](_0x43dd5b[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0xeaa5e5[_0x0a9e('0x2a')]=_0xeaa5e5[_0x0a9e('0x2a')][_0x0a9e('0x2b')]?_0xeaa5e5[_0x0a9e('0x2a')]:_0x2881b3['model'];if(_0x43dd5b[_0x0a9e('0x23')][_0x0a9e('0x37')]){_0xeaa5e5[_0x0a9e('0x38')]=[{'all':!![]}];}_0xeaa5e5=_[_0x0a9e('0x33')]({},_0xeaa5e5,_0x43dd5b[_0x0a9e('0x36')]);return db[_0x0a9e('0x20')][_0x0a9e('0x3d')](_0xeaa5e5)[_0x0a9e('0x19')](handleEntityNotFound(_0x13cb1f,null))['then'](respondWithResult(_0x13cb1f,null))[_0x0a9e('0x3a')](handleError(_0x13cb1f,null));};exports['create']=function(_0x473dc8,_0x476688){return db[_0x0a9e('0x20')]['create'](_0x473dc8[_0x0a9e('0x3e')],{})[_0x0a9e('0x19')](respondWithResult(_0x476688,0xc9))[_0x0a9e('0x3a')](handleError(_0x476688,null));};exports[_0x0a9e('0x18')]=function(_0x45c845,_0x37be73){if(_0x45c845[_0x0a9e('0x3e')]['id']){delete _0x45c845['body']['id'];}return db[_0x0a9e('0x20')][_0x0a9e('0x3d')]({'where':{'id':_0x45c845[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x19')](handleEntityNotFound(_0x37be73,null))[_0x0a9e('0x19')](saveUpdates(_0x45c845[_0x0a9e('0x3e')],null))[_0x0a9e('0x19')](respondWithResult(_0x37be73,null))[_0x0a9e('0x3a')](handleError(_0x37be73,null));};exports[_0x0a9e('0x1a')]=function(_0x58a5c2,_0xe401a){return db[_0x0a9e('0x20')]['find']({'where':{'id':_0x58a5c2['params']['id']}})['then'](handleEntityNotFound(_0xe401a,null))[_0x0a9e('0x19')](removeEntity(_0xe401a,null))[_0x0a9e('0x3a')](handleError(_0xe401a,null));};exports[_0x0a9e('0x3f')]=function(_0x11545a,_0x61bb17,_0x30decb){var _0x2e5165=require(_0x0a9e('0x40'));return db['Schedule']['find']({'where':{'id':_0x11545a['params']['id']},'raw':!![]})[_0x0a9e('0x19')](handleEntityNotFound(_0x61bb17,null))[_0x0a9e('0x19')](function(){_0x2e5165[_0x0a9e('0x3f')](_0x11545a['params']['id']);})[_0x0a9e('0x19')](respondWithStatusCode(_0x61bb17,null))[_0x0a9e('0x3a')](handleError(_0x61bb17,null));};
\ No newline at end of file
+var _0xa9e0=['keys','query','dateEnd','dateStart','filters','intersection','model','fields','attributes','length','nolimit','order','sort','where','pick','add','day','merge','filter','map','options','includeAll','include','findAll','catch','show','params','find','body','run','../../config/schedule','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','apply','reject','save','update','then','destroy','end','error','name','send','index','Schedule','rawAttributes'];(function(_0x5bd426,_0x4878e5){var _0x23a7eb=function(_0x594b42){while(--_0x594b42){_0x5bd426['push'](_0x5bd426['shift']());}};_0x23a7eb(++_0x4878e5);}(_0xa9e0,0x123));var _0x0a9e=function(_0x34bc30,_0x177cb0){_0x34bc30=_0x34bc30-0x0;var _0x5706de=_0xa9e0[_0x34bc30];return _0x5706de;};'use strict';var jsonpatch=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0a9e('0x3'));var path=require('path');var sox=require(_0x0a9e('0x4'));var csv=require(_0x0a9e('0x5'));var ejs=require(_0x0a9e('0x6'));var fs=require('fs');var _=require(_0x0a9e('0x7'));var squel=require(_0x0a9e('0x8'));var crypto=require('crypto');var jsforce=require(_0x0a9e('0x9'));var deskjs=require(_0x0a9e('0xa'));var toCsv=require(_0x0a9e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0a9e('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x0a9e('0xc'));var config=require(_0x0a9e('0xd'));var db=require(_0x0a9e('0xe'))['db'];function respondWithStatusCode(_0x3ab53f,_0xfeb75b){_0xfeb75b=_0xfeb75b||0xcc;return function(_0xbd1168){if(_0xbd1168){return _0x3ab53f['sendStatus'](_0xfeb75b);}return _0x3ab53f['status'](_0xfeb75b)['end']();};}function respondWithResult(_0x4cfe67,_0x273d4d){_0x273d4d=_0x273d4d||0xc8;return function(_0x36471c){if(_0x36471c){return _0x4cfe67[_0x0a9e('0xf')](_0x273d4d)[_0x0a9e('0x10')](_0x36471c);}};}function respondWithFilteredResult(_0x32d742,_0x69aeb7){return function(_0x5db4b0){if(_0x5db4b0){var _0x4283ce=_0x5db4b0[_0x0a9e('0x11')],_0x239b12=_0x69aeb7[_0x0a9e('0x12')],_0x2b4227=_0x69aeb7['offset']+_0x69aeb7[_0x0a9e('0x13')],_0x281129;if(_0x2b4227>=_0x4283ce){_0x2b4227=_0x4283ce;_0x281129=0xc8;}else{_0x281129=0xce;}_0x32d742['status'](_0x281129);return _0x32d742[_0x0a9e('0x14')]('Content-Range',_0x239b12+'-'+_0x2b4227+'/'+_0x4283ce)[_0x0a9e('0x10')](_0x5db4b0);}return null;};}function patchUpdates(_0x12066b){return function(_0x48f32d){try{jsonpatch[_0x0a9e('0x15')](_0x48f32d,_0x12066b,!![]);}catch(_0x5a0a06){return BPromise[_0x0a9e('0x16')](_0x5a0a06);}return _0x48f32d[_0x0a9e('0x17')]();};}function saveUpdates(_0x106033,_0x205fd6){return function(_0x31b1ca){if(_0x31b1ca){return _0x31b1ca[_0x0a9e('0x18')](_0x106033)[_0x0a9e('0x19')](function(_0x20559e){return _0x20559e;});}return null;};}function removeEntity(_0x1314ae,_0x112016){return function(_0x1c696a){if(_0x1c696a){return _0x1c696a[_0x0a9e('0x1a')]()['then'](function(){_0x1314ae[_0x0a9e('0xf')](0xcc)[_0x0a9e('0x1b')]();});}};}function handleEntityNotFound(_0x53682f,_0x20f109){return function(_0x5a09ef){if(!_0x5a09ef){_0x53682f['sendStatus'](0x194);}return _0x5a09ef;};}function handleError(_0x3a02e1,_0x432e56){_0x432e56=_0x432e56||0x1f4;return function(_0x38e7c4){logger[_0x0a9e('0x1c')](_0x38e7c4['stack']);if(_0x38e7c4[_0x0a9e('0x1d')]){delete _0x38e7c4[_0x0a9e('0x1d')];}_0x3a02e1[_0x0a9e('0xf')](_0x432e56)[_0x0a9e('0x1e')](_0x38e7c4);};}exports[_0x0a9e('0x1f')]=function(_0x42ac8f,_0x16b1ca){var _0x5ea472={},_0x59181e={},_0x197ec0={'count':0x0,'rows':[]};var _0x3a8e58=db[_0x0a9e('0x20')][_0x0a9e('0x21')];_0x59181e['model']=_[_0x0a9e('0x22')](_0x3a8e58);var _0x479bc4={'dateStart':_0x42ac8f[_0x0a9e('0x23')]['dateStart'],'dateEnd':_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x24')]};delete _0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x25')];delete _0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x24')];_0x59181e[_0x0a9e('0x23')]=_[_0x0a9e('0x22')](_0x42ac8f['query']);_0x59181e[_0x0a9e('0x26')]=_[_0x0a9e('0x27')](_0x59181e[_0x0a9e('0x28')],_0x59181e[_0x0a9e('0x23')]);_0x5ea472['attributes']=_[_0x0a9e('0x27')](_0x59181e[_0x0a9e('0x28')],qs[_0x0a9e('0x29')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0x5ea472[_0x0a9e('0x2a')]=_0x5ea472[_0x0a9e('0x2a')][_0x0a9e('0x2b')]?_0x5ea472[_0x0a9e('0x2a')]:_0x59181e['model'];if(!_0x42ac8f[_0x0a9e('0x23')]['hasOwnProperty'](_0x0a9e('0x2c'))){_0x5ea472[_0x0a9e('0x13')]=qs[_0x0a9e('0x13')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x13')]);_0x5ea472['offset']=qs[_0x0a9e('0x12')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x12')]);}_0x5ea472[_0x0a9e('0x2d')]=qs[_0x0a9e('0x2e')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x2e')]);_0x5ea472[_0x0a9e('0x2f')]=qs['filters'](_[_0x0a9e('0x30')](_0x42ac8f['query'],_0x59181e[_0x0a9e('0x26')]));if(_0x479bc4[_0x0a9e('0x25')]){if(_0x479bc4[_0x0a9e('0x24')]){_0x479bc4[_0x0a9e('0x24')]=moment(_0x479bc4['dateEnd'])[_0x0a9e('0x31')](0x1,_0x0a9e('0x32'));}else{_0x479bc4[_0x0a9e('0x24')]=moment(_0x479bc4[_0x0a9e('0x25')])['add'](0x1,'day');}_[_0x0a9e('0x33')](_0x5ea472['where'],{'createdAt':{'$gte':_0x479bc4[_0x0a9e('0x25')],'$lte':_0x479bc4[_0x0a9e('0x24')]}});}if(_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x34')]){_0x5ea472['where']=_[_0x0a9e('0x33')](_0x5ea472[_0x0a9e('0x2f')],{'$or':_[_0x0a9e('0x35')](_0x5ea472['attributes'],function(_0x1dbf74){var _0x1a180b={};_0x1a180b[_0x1dbf74]={'$like':'%'+_0x42ac8f[_0x0a9e('0x23')]['filter']+'%'};return _0x1a180b;})});}_0x5ea472=_['merge']({},_0x5ea472,_0x42ac8f[_0x0a9e('0x36')]);var _0x40d766={'where':_0x5ea472['where']};return db[_0x0a9e('0x20')][_0x0a9e('0x11')](_0x40d766)[_0x0a9e('0x19')](function(_0x148f55){_0x197ec0['count']=_0x148f55;if(_0x42ac8f['query'][_0x0a9e('0x37')]){_0x5ea472[_0x0a9e('0x38')]=[{'all':!![]}];}return db['Schedule'][_0x0a9e('0x39')](_0x5ea472);})[_0x0a9e('0x19')](function(_0x1459bb){_0x197ec0['rows']=_0x1459bb;return _0x197ec0;})[_0x0a9e('0x19')](respondWithFilteredResult(_0x16b1ca,_0x5ea472))[_0x0a9e('0x3a')](handleError(_0x16b1ca,null));};exports[_0x0a9e('0x3b')]=function(_0x43dd5b,_0x13cb1f){var _0xeaa5e5={'raw':![],'where':{'id':_0x43dd5b[_0x0a9e('0x3c')]['id']}},_0x2881b3={};_0x2881b3[_0x0a9e('0x28')]=_[_0x0a9e('0x22')](db[_0x0a9e('0x20')][_0x0a9e('0x21')]);_0x2881b3[_0x0a9e('0x23')]=_[_0x0a9e('0x22')](_0x43dd5b[_0x0a9e('0x23')]);_0x2881b3['filters']=_['intersection'](_0x2881b3[_0x0a9e('0x28')],_0x2881b3[_0x0a9e('0x23')]);_0xeaa5e5[_0x0a9e('0x2a')]=_[_0x0a9e('0x27')](_0x2881b3[_0x0a9e('0x28')],qs[_0x0a9e('0x29')](_0x43dd5b[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0xeaa5e5[_0x0a9e('0x2a')]=_0xeaa5e5[_0x0a9e('0x2a')][_0x0a9e('0x2b')]?_0xeaa5e5[_0x0a9e('0x2a')]:_0x2881b3['model'];if(_0x43dd5b[_0x0a9e('0x23')][_0x0a9e('0x37')]){_0xeaa5e5[_0x0a9e('0x38')]=[{'all':!![]}];}_0xeaa5e5=_[_0x0a9e('0x33')]({},_0xeaa5e5,_0x43dd5b[_0x0a9e('0x36')]);return db[_0x0a9e('0x20')][_0x0a9e('0x3d')](_0xeaa5e5)[_0x0a9e('0x19')](handleEntityNotFound(_0x13cb1f,null))['then'](respondWithResult(_0x13cb1f,null))[_0x0a9e('0x3a')](handleError(_0x13cb1f,null));};exports['create']=function(_0x473dc8,_0x476688){return db[_0x0a9e('0x20')]['create'](_0x473dc8[_0x0a9e('0x3e')],{})[_0x0a9e('0x19')](respondWithResult(_0x476688,0xc9))[_0x0a9e('0x3a')](handleError(_0x476688,null));};exports[_0x0a9e('0x18')]=function(_0x45c845,_0x37be73){if(_0x45c845[_0x0a9e('0x3e')]['id']){delete _0x45c845['body']['id'];}return db[_0x0a9e('0x20')][_0x0a9e('0x3d')]({'where':{'id':_0x45c845[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x19')](handleEntityNotFound(_0x37be73,null))[_0x0a9e('0x19')](saveUpdates(_0x45c845[_0x0a9e('0x3e')],null))[_0x0a9e('0x19')](respondWithResult(_0x37be73,null))[_0x0a9e('0x3a')](handleError(_0x37be73,null));};exports[_0x0a9e('0x1a')]=function(_0x58a5c2,_0xe401a){return db[_0x0a9e('0x20')]['find']({'where':{'id':_0x58a5c2['params']['id']}})['then'](handleEntityNotFound(_0xe401a,null))[_0x0a9e('0x19')](removeEntity(_0xe401a,null))[_0x0a9e('0x3a')](handleError(_0xe401a,null));};exports[_0x0a9e('0x3f')]=function(_0x11545a,_0x61bb17,_0x30decb){var _0x2e5165=require(_0x0a9e('0x40'));return db['Schedule']['find']({'where':{'id':_0x11545a['params']['id']},'raw':!![]})[_0x0a9e('0x19')](handleEntityNotFound(_0x61bb17,null))[_0x0a9e('0x19')](function(){_0x2e5165[_0x0a9e('0x3f')](_0x11545a['params']['id']);})[_0x0a9e('0x19')](respondWithStatusCode(_0x61bb17,null))[_0x0a9e('0x3a')](handleError(_0x61bb17,null));};
\ No newline at end of file
index 1681ad3..4a253e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6892=['lodash','../../config/logger','api','moment','request-promise','./schedule.attributes','exports','define','Schedule','tools_schedules'];(function(_0x600a19,_0x443118){var _0x3840e3=function(_0x3ac670){while(--_0x3ac670){_0x600a19['push'](_0x600a19['shift']());}};_0x3840e3(++_0x443118);}(_0x6892,0x154));var _0x2689=function(_0x1af9f5,_0x1e8859){_0x1af9f5=_0x1af9f5-0x0;var _0x5b496d=_0x6892[_0x1af9f5];return _0x5b496d;};'use strict';var _=require(_0x2689('0x0'));var util=require('util');var logger=require(_0x2689('0x1'))(_0x2689('0x2'));var moment=require(_0x2689('0x3'));var BPromise=require('bluebird');var rp=require(_0x2689('0x4'));var attributes=require(_0x2689('0x5'));module[_0x2689('0x6')]=function(_0x6c5e4e,_0x4d037f){return _0x6c5e4e[_0x2689('0x7')](_0x2689('0x8'),attributes,{'tableName':_0x2689('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2e02=['../../config/logger','request-promise','tools_schedules','lodash','util'];(function(_0x482ad7,_0x4a709f){var _0x48e440=function(_0x33177e){while(--_0x33177e){_0x482ad7['push'](_0x482ad7['shift']());}};_0x48e440(++_0x4a709f);}(_0x2e02,0x80));var _0x22e0=function(_0x5822f7,_0x37e0da){_0x5822f7=_0x5822f7-0x0;var _0x4ca948=_0x2e02[_0x5822f7];return _0x4ca948;};'use strict';var _=require(_0x22e0('0x0'));var util=require(_0x22e0('0x1'));var logger=require(_0x22e0('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x22e0('0x3'));var attributes=require('./schedule.attributes');module['exports']=function(_0x45742a,_0x3b9ff1){return _0x45742a['define']('Schedule',attributes,{'tableName':_0x22e0('0x4'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 625dba1..b7922ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x75b2=['message','catch','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','request\x20sent','debug','Schedule,\x20%s,\x20%s,\x20%s','stringify','error','Schedule,\x20%s,\x20%s'];(function(_0x5d6456,_0x58ecc7){var _0x4d66c1=function(_0x4335e3){while(--_0x4335e3){_0x5d6456['push'](_0x5d6456['shift']());}};_0x4d66c1(++_0x58ecc7);}(_0x75b2,0xde));var _0x275b=function(_0x15c211,_0x13093b){_0x15c211=_0x15c211-0x0;var _0x2fc84c=_0x75b2[_0x15c211];return _0x2fc84c;};'use strict';var _=require(_0x275b('0x0'));var util=require(_0x275b('0x1'));var moment=require(_0x275b('0x2'));var BPromise=require(_0x275b('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x275b('0x4'))['db'];var utils=require(_0x275b('0x5'));var logger=require(_0x275b('0x6'))(_0x275b('0x7'));var config=require('../../config/environment');var jayson=require(_0x275b('0x8'));var client=jayson[_0x275b('0x9')][_0x275b('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x34da24,_0xb36e4d,_0x1cb368){return new BPromise(function(_0x5d7b0c,_0x8a0eb5){return client[_0x275b('0xb')](_0x34da24,_0x1cb368)[_0x275b('0xc')](function(_0x3f9862){logger[_0x275b('0xd')]('Schedule,\x20%s,\x20%s',_0xb36e4d,_0x275b('0xe'));logger[_0x275b('0xf')](_0x275b('0x10'),_0xb36e4d,_0x275b('0xe'),JSON[_0x275b('0x11')](_0x3f9862));if(_0x3f9862['error']){if(_0x3f9862[_0x275b('0x12')]['code']===0x1f4){logger[_0x275b('0x12')](_0x275b('0x13'),_0xb36e4d,_0x3f9862[_0x275b('0x12')][_0x275b('0x14')]);return _0x8a0eb5(_0x3f9862['error'][_0x275b('0x14')]);}logger[_0x275b('0x12')](_0x275b('0x13'),_0xb36e4d,_0x3f9862[_0x275b('0x12')][_0x275b('0x14')]);return _0x5d7b0c(_0x3f9862[_0x275b('0x12')][_0x275b('0x14')]);}else{logger['info'](_0x275b('0x13'),_0xb36e4d,_0x275b('0xe'));_0x5d7b0c(_0x3f9862['result']['message']);}})[_0x275b('0x15')](function(_0x1e5089){logger[_0x275b('0x12')]('Schedule,\x20%s,\x20%s',_0xb36e4d,_0x1e5089);_0x8a0eb5(_0x1e5089);});});}
\ No newline at end of file
+var _0x0a16=['lodash','util','moment','rpc','../../config/environment','jayson/promise','client','http','request','Schedule,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','catch'];(function(_0x56e294,_0x10da24){var _0x4f19ab=function(_0x2616b0){while(--_0x2616b0){_0x56e294['push'](_0x56e294['shift']());}};_0x4f19ab(++_0x10da24);}(_0x0a16,0xaa));var _0x60a1=function(_0x22f72b,_0x3082dd){_0x22f72b=_0x22f72b-0x0;var _0x3cbf1c=_0x0a16[_0x22f72b];return _0x3cbf1c;};'use strict';var _=require(_0x60a1('0x0'));var util=require(_0x60a1('0x1'));var moment=require(_0x60a1('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x60a1('0x3'));var config=require(_0x60a1('0x4'));var jayson=require(_0x60a1('0x5'));var client=jayson[_0x60a1('0x6')][_0x60a1('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x269a87,_0x33dad2,_0x1bed95){return new BPromise(function(_0x16f6a1,_0x507693){return client[_0x60a1('0x8')](_0x269a87,_0x1bed95)['then'](function(_0x48d1f2){logger['info'](_0x60a1('0x9'),_0x33dad2,_0x60a1('0xa'));logger[_0x60a1('0xb')]('Schedule,\x20%s,\x20%s,\x20%s',_0x33dad2,_0x60a1('0xa'),JSON[_0x60a1('0xc')](_0x48d1f2));if(_0x48d1f2['error']){if(_0x48d1f2[_0x60a1('0xd')][_0x60a1('0xe')]===0x1f4){logger[_0x60a1('0xd')](_0x60a1('0x9'),_0x33dad2,_0x48d1f2[_0x60a1('0xd')][_0x60a1('0xf')]);return _0x507693(_0x48d1f2[_0x60a1('0xd')]['message']);}logger[_0x60a1('0xd')](_0x60a1('0x9'),_0x33dad2,_0x48d1f2[_0x60a1('0xd')][_0x60a1('0xf')]);return _0x16f6a1(_0x48d1f2['error'][_0x60a1('0xf')]);}else{logger['info'](_0x60a1('0x9'),_0x33dad2,'request\x20sent');_0x16f6a1(_0x48d1f2['result']['message']);}})[_0x60a1('0x10')](function(_0x2f8c71){logger['error'](_0x60a1('0x9'),_0x33dad2,_0x2f8c71);_0x507693(_0x2f8c71);});});}
\ No newline at end of file
index dee3286..c795d5f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a62=['index','/:id','show','/:id/logo','getLogo','getLogoLogin','/:id/gdpr','gdpr','join','server/files/images/logos/','format','%s%s','logo','originalname','post','file','addLogo','diskStorage','root','logologin','/:id/logo_login','addLogoLogin','put','update','exports','multer','path','express','Router','../../components/auth/service','../../config/environment','./setting.controller','get','isAuthenticated'];(function(_0x4986dc,_0x335223){var _0x34a80d=function(_0x435913){while(--_0x435913){_0x4986dc['push'](_0x4986dc['shift']());}};_0x34a80d(++_0x335223);}(_0x8a62,0x18f));var _0x28a6=function(_0x2071cc,_0x5d728e){_0x2071cc=_0x2071cc-0x0;var _0x31aa5d=_0x8a62[_0x2071cc];return _0x31aa5d;};'use strict';var multer=require(_0x28a6('0x0'));var util=require('util');var path=require(_0x28a6('0x1'));var express=require(_0x28a6('0x2'));var router=express[_0x28a6('0x3')]();var auth=require(_0x28a6('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x28a6('0x5'));var controller=require(_0x28a6('0x6'));router[_0x28a6('0x7')]('/',auth[_0x28a6('0x8')](),controller[_0x28a6('0x9')]);router[_0x28a6('0x7')](_0x28a6('0xa'),controller[_0x28a6('0xb')]);router['get'](_0x28a6('0xc'),controller[_0x28a6('0xd')]);router[_0x28a6('0x7')]('/:id/logo_login',controller[_0x28a6('0xe')]);router['get'](_0x28a6('0xf'),controller[_0x28a6('0x10')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x47fc1f,_0x273ebe,_0x514282){_0x514282(null,path[_0x28a6('0x11')](config['root'],_0x28a6('0x12')));},'filename':function(_0x3a1987,_0x526ece,_0xc6e917){_0xc6e917(null,util[_0x28a6('0x13')](_0x28a6('0x14'),_0x28a6('0x15'),path['extname'](_0x526ece[_0x28a6('0x16')])));}})});router[_0x28a6('0x17')]('/:id/logo',upload['single'](_0x28a6('0x18')),controller[_0x28a6('0x19')]);var upload=multer({'storage':multer[_0x28a6('0x1a')]({'destination':function(_0x21cd27,_0x10965d,_0x568fce){_0x568fce(null,path[_0x28a6('0x11')](config[_0x28a6('0x1b')],_0x28a6('0x12')));},'filename':function(_0xa36e53,_0x4d3b15,_0x5b282f){_0x5b282f(null,util['format'](_0x28a6('0x14'),_0x28a6('0x1c'),path['extname'](_0x4d3b15[_0x28a6('0x16')])));}})});router[_0x28a6('0x17')](_0x28a6('0x1d'),upload['single'](_0x28a6('0x18')),controller[_0x28a6('0x1e')]);router[_0x28a6('0x1f')]('/:id',auth[_0x28a6('0x8')](),controller[_0x28a6('0x20')]);module[_0x28a6('0x21')]=router;
\ No newline at end of file
+var _0xe8b2=['update','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','./setting.controller','get','show','/:id/logo','/:id/gdpr','gdpr','diskStorage','join','root','server/files/images/logos/','format','logo','originalname','post','single','file','addLogo','%s%s','logologin','extname','addLogoLogin','/:id','isAuthenticated'];(function(_0x128832,_0x480891){var _0x245228=function(_0x4e1641){while(--_0x4e1641){_0x128832['push'](_0x128832['shift']());}};_0x245228(++_0x480891);}(_0xe8b2,0x7d));var _0x2e8b=function(_0x5d8604,_0x135606){_0x5d8604=_0x5d8604-0x0;var _0x49e35a=_0xe8b2[_0x5d8604];return _0x49e35a;};'use strict';var multer=require(_0x2e8b('0x0'));var util=require(_0x2e8b('0x1'));var path=require(_0x2e8b('0x2'));var express=require(_0x2e8b('0x3'));var router=express[_0x2e8b('0x4')]();var auth=require(_0x2e8b('0x5'));var interaction=require(_0x2e8b('0x6'));var config=require('../../config/environment');var controller=require(_0x2e8b('0x7'));router[_0x2e8b('0x8')]('/',auth['isAuthenticated'](),controller['index']);router[_0x2e8b('0x8')]('/:id',controller[_0x2e8b('0x9')]);router[_0x2e8b('0x8')](_0x2e8b('0xa'),controller['getLogo']);router['get']('/:id/logo_login',controller['getLogoLogin']);router[_0x2e8b('0x8')](_0x2e8b('0xb'),controller[_0x2e8b('0xc')]);var upload=multer({'storage':multer[_0x2e8b('0xd')]({'destination':function(_0x48f050,_0x486ce2,_0x2c61f0){_0x2c61f0(null,path[_0x2e8b('0xe')](config[_0x2e8b('0xf')],_0x2e8b('0x10')));},'filename':function(_0x447a07,_0x599888,_0x5240ff){_0x5240ff(null,util[_0x2e8b('0x11')]('%s%s',_0x2e8b('0x12'),path['extname'](_0x599888[_0x2e8b('0x13')])));}})});router[_0x2e8b('0x14')](_0x2e8b('0xa'),upload[_0x2e8b('0x15')](_0x2e8b('0x16')),controller[_0x2e8b('0x17')]);var upload=multer({'storage':multer[_0x2e8b('0xd')]({'destination':function(_0x1230ae,_0x5b08cd,_0x59f523){_0x59f523(null,path[_0x2e8b('0xe')](config[_0x2e8b('0xf')],_0x2e8b('0x10')));},'filename':function(_0x89d3b1,_0x1c954e,_0x20a731){_0x20a731(null,util[_0x2e8b('0x11')](_0x2e8b('0x18'),_0x2e8b('0x19'),path[_0x2e8b('0x1a')](_0x1c954e[_0x2e8b('0x13')])));}})});router[_0x2e8b('0x14')]('/:id/logo_login',upload[_0x2e8b('0x15')]('file'),controller[_0x2e8b('0x1b')]);router['put'](_0x2e8b('0x1c'),auth[_0x2e8b('0x1d')](),controller[_0x2e8b('0x1e')]);module['exports']=router;
\ No newline at end of file
index a42a878..128e0cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3463=['BOOLEAN','STRING','https://www.xcally.com/bar/phonebar/autoupdater.xml','alternate','sequelize','exports','INTEGER','min_internal','/var/opt/motion2/server/files/sounds/converted'];(function(_0x12de9c,_0xf9bfdb){var _0x31e6d0=function(_0x137268){while(--_0x137268){_0x12de9c['push'](_0x12de9c['shift']());}};_0x31e6d0(++_0xf9bfdb);}(_0x3463,0x17e));var _0x3346=function(_0x1ac9f4,_0x5b796f){_0x1ac9f4=_0x1ac9f4-0x0;var _0x502020=_0x3463[_0x1ac9f4];return _0x502020;};'use strict';var Sequelize=require(_0x3346('0x0'));module[_0x3346('0x1')]={'min_internal':{'type':Sequelize[_0x3346('0x2')](0xb),'unique':_0x3346('0x3'),'defaultValue':0x3e8},'min_mailbox':{'type':Sequelize['INTEGER'](0xb),'unique':'min_mailbox','defaultValue':0x3e8},'agi_port':{'type':Sequelize[_0x3346('0x2')](0xb),'defaultValue':0x11dd},'soundPath':{'type':Sequelize['STRING'],'defaultValue':_0x3346('0x4')},'logo':{'type':Sequelize['STRING']},'defaultLogo':{'type':Sequelize[_0x3346('0x5')],'defaultValue':!![]},'loginLogo':{'type':Sequelize[_0x3346('0x6')]},'defaultLoginLogo':{'type':Sequelize[_0x3346('0x5')],'defaultValue':!![]},'headerWhiteLabel':{'type':Sequelize[_0x3346('0x6')]},'defaultHeaderWhiteLabel':{'type':Sequelize[_0x3346('0x5')],'defaultValue':!![]},'securePassword':{'type':Sequelize[_0x3346('0x5')],'defaultValue':!![]},'firstSetup':{'type':Sequelize[_0x3346('0x5')],'defaultValue':!![]},'stunaddr':{'type':Sequelize[_0x3346('0x6')]},'turnaddr':{'type':Sequelize[_0x3346('0x6')]},'turnusername':{'type':Sequelize[_0x3346('0x6')]},'turnpassword':{'type':Sequelize[_0x3346('0x6')]},'pageTitle':{'type':Sequelize[_0x3346('0x6')]},'defaultPageTitle':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'callRecordingEncryption':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'passwordExpiresDays':{'type':Sequelize[_0x3346('0x2')](0xb),'defaultValue':0x5a},'phoneBarAutoUpdater':{'type':Sequelize[_0x3346('0x5')],'defaultValue':!![]},'phoneBarAutoUpdaterUrl':{'type':Sequelize[_0x3346('0x6')],'defaultValue':_0x3346('0x7')},'enableEmailPreview':{'type':Sequelize[_0x3346('0x5')],'defaultValue':![]},'split':{'type':Sequelize[_0x3346('0x5')],'defaultValue':!![]},'splitSizeCsv':{'type':Sequelize[_0x3346('0x2')],'defaultValue':0x1388},'splitSizePdf':{'type':Sequelize['INTEGER'],'defaultValue':0x1388},'splitSizeXlsx':{'type':Sequelize[_0x3346('0x2')],'defaultValue':0x1388},'messagesAlignment':{'type':Sequelize['STRING'],'defaultValue':_0x3346('0x8')},'chatTimeout':{'type':Sequelize[_0x3346('0x2')],'defaultValue':0x1e},'phoneBarRememberMeEnabled':{'type':Sequelize[_0x3346('0x5')],'defaultValue':!![]}};
\ No newline at end of file
+var _0x2d1b=['min_internal','INTEGER','STRING','/var/opt/motion2/server/files/sounds/converted','BOOLEAN','https://www.xcally.com/bar/phonebar/autoupdater.xml','alternate','exports'];(function(_0x6973bc,_0x3396dd){var _0x1168c5=function(_0x205722){while(--_0x205722){_0x6973bc['push'](_0x6973bc['shift']());}};_0x1168c5(++_0x3396dd);}(_0x2d1b,0xef));var _0xb2d1=function(_0x2163f5,_0x181e81){_0x2163f5=_0x2163f5-0x0;var _0x5a7bc7=_0x2d1b[_0x2163f5];return _0x5a7bc7;};'use strict';var Sequelize=require('sequelize');module[_0xb2d1('0x0')]={'min_internal':{'type':Sequelize['INTEGER'](0xb),'unique':_0xb2d1('0x1'),'defaultValue':0x3e8},'min_mailbox':{'type':Sequelize[_0xb2d1('0x2')](0xb),'unique':'min_mailbox','defaultValue':0x3e8},'agi_port':{'type':Sequelize[_0xb2d1('0x2')](0xb),'defaultValue':0x11dd},'soundPath':{'type':Sequelize[_0xb2d1('0x3')],'defaultValue':_0xb2d1('0x4')},'logo':{'type':Sequelize['STRING']},'defaultLogo':{'type':Sequelize[_0xb2d1('0x5')],'defaultValue':!![]},'loginLogo':{'type':Sequelize['STRING']},'defaultLoginLogo':{'type':Sequelize[_0xb2d1('0x5')],'defaultValue':!![]},'headerWhiteLabel':{'type':Sequelize[_0xb2d1('0x3')]},'defaultHeaderWhiteLabel':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'securePassword':{'type':Sequelize[_0xb2d1('0x5')],'defaultValue':!![]},'firstSetup':{'type':Sequelize[_0xb2d1('0x5')],'defaultValue':!![]},'stunaddr':{'type':Sequelize['STRING']},'turnaddr':{'type':Sequelize[_0xb2d1('0x3')]},'turnusername':{'type':Sequelize[_0xb2d1('0x3')]},'turnpassword':{'type':Sequelize[_0xb2d1('0x3')]},'pageTitle':{'type':Sequelize[_0xb2d1('0x3')]},'defaultPageTitle':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'callRecordingEncryption':{'type':Sequelize[_0xb2d1('0x5')],'defaultValue':![]},'passwordExpiresDays':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x5a},'phoneBarAutoUpdater':{'type':Sequelize[_0xb2d1('0x5')],'defaultValue':!![]},'phoneBarAutoUpdaterUrl':{'type':Sequelize['STRING'],'defaultValue':_0xb2d1('0x6')},'enableEmailPreview':{'type':Sequelize[_0xb2d1('0x5')],'defaultValue':![]},'split':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'splitSizeCsv':{'type':Sequelize[_0xb2d1('0x2')],'defaultValue':0x1388},'splitSizePdf':{'type':Sequelize['INTEGER'],'defaultValue':0x1388},'splitSizeXlsx':{'type':Sequelize[_0xb2d1('0x2')],'defaultValue':0x1388},'messagesAlignment':{'type':Sequelize[_0xb2d1('0x3')],'defaultValue':_0xb2d1('0x7')},'chatTimeout':{'type':Sequelize[_0xb2d1('0x2')],'defaultValue':0x1e},'phoneBarRememberMeEnabled':{'type':Sequelize[_0xb2d1('0x5')],'defaultValue':!![]}};
\ No newline at end of file
index 6216d33..3aa1a82 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb2b1=['filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','map','filter','options','Setting','includeAll','findAll','rows','catch','show','params','include','find','readFileSync','join','root','server/files/templates/stun.ejs','render','server/files/templates/turn.ejs','utf8','writeFileSync','/etc/asterisk/stun_xcally.conf','/etc/asterisk/turn_xcally.conf','res_stun_monitor.so','Reload','res_rtp_asterisk.so','addLogo','file','filename','body','logo','addLogoLogin','../../config/license/util','getLogo','getLicense','loginLogo','defaultLoginLogo','existsSync','toLower','default_logo.png','default','Sequelize','ValidationError','Logo\x20not\x20found','getLogoLogin','server/files/images/logos','default_loginLogo.png','upperFirst','custom','download','gdpr','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','http','request','then','info','Setting,\x20%s,\x20%s','debug','Setting,\x20%s,\x20%s,\x20%s','error','message','request\x20sent','result','sendStatus','status','count','offset','limit','Content-Range','reject','update','end','stack','name','send','index','rawAttributes','model','query','dateStart','dateEnd','keys'];(function(_0x9c607a,_0x1cb2c6){var _0x3b1311=function(_0x1b3fec){while(--_0x1b3fec){_0x9c607a['push'](_0x9c607a['shift']());}};_0x3b1311(++_0x1cb2c6);}(_0xb2b1,0x190));var _0x1b2b=function(_0x476e52,_0x2b382a){_0x476e52=_0x476e52-0x0;var _0x1929e9=_0xb2b1[_0x476e52];return _0x1929e9;};'use strict';var jsonpatch=require(_0x1b2b('0x0'));var rp=require(_0x1b2b('0x1'));var moment=require(_0x1b2b('0x2'));var BPromise=require(_0x1b2b('0x3'));var Mustache=require(_0x1b2b('0x4'));var util=require(_0x1b2b('0x5'));var path=require('path');var sox=require(_0x1b2b('0x6'));var csv=require(_0x1b2b('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x1b2b('0x8'));var crypto=require(_0x1b2b('0x9'));var jsforce=require(_0x1b2b('0xa'));var deskjs=require(_0x1b2b('0xb'));var toCsv=require(_0x1b2b('0x7'));var querystring=require(_0x1b2b('0xc'));var Papa=require(_0x1b2b('0xd'));var qs=require(_0x1b2b('0xe'));var logger=require(_0x1b2b('0xf'))('api');var utils=require(_0x1b2b('0x10'));var config=require(_0x1b2b('0x11'));var db=require('../../mysqldb')['db'];var jayson=require('jayson/promise');var client=jayson['client'][_0x1b2b('0x12')]({'port':0x232a});function respondWithRpcPromise(_0x3d9792,_0x49265d,_0x38630d,_0x1641f1){return new BPromise(function(_0x411a3a,_0x45c65a){var _0x57687b=_0x1641f1||client;return _0x57687b[_0x1b2b('0x13')](_0x3d9792,_0x38630d)[_0x1b2b('0x14')](function(_0x1d6d61){logger[_0x1b2b('0x15')](_0x1b2b('0x16'),_0x49265d,'request\x20sent');logger[_0x1b2b('0x17')](_0x1b2b('0x18'),_0x49265d,'request\x20sent',JSON['stringify'](_0x1d6d61));if(_0x1d6d61['error']){if(_0x1d6d61[_0x1b2b('0x19')]['code']===0x1f4){logger[_0x1b2b('0x19')](_0x1b2b('0x16'),_0x49265d,_0x1d6d61[_0x1b2b('0x19')][_0x1b2b('0x1a')]);return _0x45c65a(_0x1d6d61[_0x1b2b('0x19')]['message']);}logger[_0x1b2b('0x19')](_0x1b2b('0x16'),_0x49265d,_0x1d6d61[_0x1b2b('0x19')]['message']);return _0x411a3a(_0x1d6d61[_0x1b2b('0x19')][_0x1b2b('0x1a')]);}else{logger[_0x1b2b('0x15')](_0x1b2b('0x16'),_0x49265d,_0x1b2b('0x1b'));_0x411a3a(_0x1d6d61[_0x1b2b('0x1c')][_0x1b2b('0x1a')]);}})['catch'](function(_0x323327){logger[_0x1b2b('0x19')](_0x1b2b('0x16'),_0x49265d,_0x323327);_0x45c65a(_0x323327);});});}function respondWithStatusCode(_0x17ef5c,_0x4dbb95){_0x4dbb95=_0x4dbb95||0xcc;return function(_0x4a5fa1){if(_0x4a5fa1){return _0x17ef5c[_0x1b2b('0x1d')](_0x4dbb95);}return _0x17ef5c[_0x1b2b('0x1e')](_0x4dbb95)['end']();};}function respondWithResult(_0x60ed88,_0x8760b5){_0x8760b5=_0x8760b5||0xc8;return function(_0x145b51){if(_0x145b51){return _0x60ed88['status'](_0x8760b5)['json'](_0x145b51);}};}function respondWithFilteredResult(_0x482d77,_0x23b1fd){return function(_0x5d325a){if(_0x5d325a){var _0x35a8ef=_0x5d325a[_0x1b2b('0x1f')],_0x5da94b=_0x23b1fd['offset'],_0x3d2090=_0x23b1fd[_0x1b2b('0x20')]+_0x23b1fd[_0x1b2b('0x21')],_0x3535cc;if(_0x3d2090>=_0x35a8ef){_0x3d2090=_0x35a8ef;_0x3535cc=0xc8;}else{_0x3535cc=0xce;}_0x482d77[_0x1b2b('0x1e')](_0x3535cc);return _0x482d77['set'](_0x1b2b('0x22'),_0x5da94b+'-'+_0x3d2090+'/'+_0x35a8ef)['json'](_0x5d325a);}return null;};}function patchUpdates(_0x5777b4){return function(_0x514770){try{jsonpatch['apply'](_0x514770,_0x5777b4,!![]);}catch(_0x1f450b){return BPromise[_0x1b2b('0x23')](_0x1f450b);}return _0x514770['save']();};}function saveUpdates(_0x59cbcf,_0x3439fb){return function(_0x3fedaa){if(_0x3fedaa){return _0x3fedaa[_0x1b2b('0x24')](_0x59cbcf)[_0x1b2b('0x14')](function(_0x5d03e7){return _0x5d03e7;});}return null;};}function removeEntity(_0x24ced3,_0x209a89){return function(_0x141555){if(_0x141555){return _0x141555['destroy']()[_0x1b2b('0x14')](function(){_0x24ced3[_0x1b2b('0x1e')](0xcc)[_0x1b2b('0x25')]();});}};}function handleEntityNotFound(_0x3efc0a,_0x2ced64){return function(_0x121bbe){if(!_0x121bbe){_0x3efc0a[_0x1b2b('0x1d')](0x194);}return _0x121bbe;};}function handleError(_0x44ace5,_0x2198be){_0x2198be=_0x2198be||0x1f4;return function(_0x3a359c){logger[_0x1b2b('0x19')](_0x3a359c[_0x1b2b('0x26')]);if(_0x3a359c[_0x1b2b('0x27')]){delete _0x3a359c[_0x1b2b('0x27')];}_0x44ace5['status'](_0x2198be)[_0x1b2b('0x28')](_0x3a359c);};}exports[_0x1b2b('0x29')]=function(_0x484f82,_0x5ea72c){var _0x18d6b8={},_0x119de0={},_0x4adf6d={'count':0x0,'rows':[]};var _0x48303f=db['Setting'][_0x1b2b('0x2a')];_0x119de0[_0x1b2b('0x2b')]=_['keys'](_0x48303f);var _0x145b98={'dateStart':_0x484f82[_0x1b2b('0x2c')][_0x1b2b('0x2d')],'dateEnd':_0x484f82[_0x1b2b('0x2c')][_0x1b2b('0x2e')]};delete _0x484f82['query'][_0x1b2b('0x2d')];delete _0x484f82[_0x1b2b('0x2c')][_0x1b2b('0x2e')];_0x119de0[_0x1b2b('0x2c')]=_[_0x1b2b('0x2f')](_0x484f82[_0x1b2b('0x2c')]);_0x119de0[_0x1b2b('0x30')]=_[_0x1b2b('0x31')](_0x119de0[_0x1b2b('0x2b')],_0x119de0[_0x1b2b('0x2c')]);_0x18d6b8[_0x1b2b('0x32')]=_[_0x1b2b('0x31')](_0x119de0[_0x1b2b('0x2b')],qs[_0x1b2b('0x33')](_0x484f82['query'][_0x1b2b('0x33')]));_0x18d6b8[_0x1b2b('0x32')]=_0x18d6b8[_0x1b2b('0x32')][_0x1b2b('0x34')]?_0x18d6b8[_0x1b2b('0x32')]:_0x119de0[_0x1b2b('0x2b')];if(!_0x484f82[_0x1b2b('0x2c')][_0x1b2b('0x35')](_0x1b2b('0x36'))){_0x18d6b8[_0x1b2b('0x21')]=qs[_0x1b2b('0x21')](_0x484f82[_0x1b2b('0x2c')][_0x1b2b('0x21')]);_0x18d6b8[_0x1b2b('0x20')]=qs[_0x1b2b('0x20')](_0x484f82['query'][_0x1b2b('0x20')]);}_0x18d6b8[_0x1b2b('0x37')]=qs[_0x1b2b('0x38')](_0x484f82['query'][_0x1b2b('0x38')]);_0x18d6b8[_0x1b2b('0x39')]=qs[_0x1b2b('0x30')](_[_0x1b2b('0x3a')](_0x484f82[_0x1b2b('0x2c')],_0x119de0[_0x1b2b('0x30')]));if(_0x145b98[_0x1b2b('0x2d')]){if(_0x145b98['dateEnd']){_0x145b98[_0x1b2b('0x2e')]=moment(_0x145b98[_0x1b2b('0x2e')])[_0x1b2b('0x3b')](0x1,_0x1b2b('0x3c'));}else{_0x145b98[_0x1b2b('0x2e')]=moment(_0x145b98[_0x1b2b('0x2d')])['add'](0x1,'day');}_[_0x1b2b('0x3d')](_0x18d6b8[_0x1b2b('0x39')],{'createdAt':{'$gte':_0x145b98[_0x1b2b('0x2d')],'$lte':_0x145b98[_0x1b2b('0x2e')]}});}if(_0x484f82[_0x1b2b('0x2c')]['filter']){_0x18d6b8[_0x1b2b('0x39')]=_[_0x1b2b('0x3d')](_0x18d6b8[_0x1b2b('0x39')],{'$or':_[_0x1b2b('0x3e')](_0x18d6b8[_0x1b2b('0x32')],function(_0x1ec351){var _0x69bdd9={};_0x69bdd9[_0x1ec351]={'$like':'%'+_0x484f82[_0x1b2b('0x2c')][_0x1b2b('0x3f')]+'%'};return _0x69bdd9;})});}_0x18d6b8=_[_0x1b2b('0x3d')]({},_0x18d6b8,_0x484f82[_0x1b2b('0x40')]);var _0x5e3e21={'where':_0x18d6b8[_0x1b2b('0x39')]};return db[_0x1b2b('0x41')][_0x1b2b('0x1f')](_0x5e3e21)[_0x1b2b('0x14')](function(_0x5cd2fa){_0x4adf6d[_0x1b2b('0x1f')]=_0x5cd2fa;if(_0x484f82[_0x1b2b('0x2c')][_0x1b2b('0x42')]){_0x18d6b8['include']=[{'all':!![]}];}return db['Setting'][_0x1b2b('0x43')](_0x18d6b8);})[_0x1b2b('0x14')](function(_0x434ba7){_0x4adf6d[_0x1b2b('0x44')]=_0x434ba7;return _0x4adf6d;})['then'](respondWithFilteredResult(_0x5ea72c,_0x18d6b8))[_0x1b2b('0x45')](handleError(_0x5ea72c,null));};exports[_0x1b2b('0x46')]=function(_0x251003,_0x4b2f6e){var _0x29ffe8={'raw':![],'where':{'id':_0x251003[_0x1b2b('0x47')]['id']}},_0x119c77={};_0x119c77[_0x1b2b('0x2b')]=_[_0x1b2b('0x2f')](db[_0x1b2b('0x41')][_0x1b2b('0x2a')]);_0x119c77['query']=_['keys'](_0x251003[_0x1b2b('0x2c')]);_0x119c77[_0x1b2b('0x30')]=_[_0x1b2b('0x31')](_0x119c77[_0x1b2b('0x2b')],_0x119c77[_0x1b2b('0x2c')]);_0x29ffe8[_0x1b2b('0x32')]=_[_0x1b2b('0x31')](_0x119c77[_0x1b2b('0x2b')],qs[_0x1b2b('0x33')](_0x251003[_0x1b2b('0x2c')][_0x1b2b('0x33')]));_0x29ffe8[_0x1b2b('0x32')]=_0x29ffe8['attributes'][_0x1b2b('0x34')]?_0x29ffe8['attributes']:_0x119c77[_0x1b2b('0x2b')];if(_0x251003[_0x1b2b('0x2c')][_0x1b2b('0x42')]){_0x29ffe8[_0x1b2b('0x48')]=[{'all':!![]}];}_0x29ffe8=_[_0x1b2b('0x3d')]({},_0x29ffe8,_0x251003['options']);return db[_0x1b2b('0x41')][_0x1b2b('0x49')](_0x29ffe8)[_0x1b2b('0x14')](handleEntityNotFound(_0x4b2f6e,null))[_0x1b2b('0x14')](respondWithResult(_0x4b2f6e,null))['catch'](handleError(_0x4b2f6e,null));};exports[_0x1b2b('0x24')]=function(_0x36a0c3,_0x5ed886,_0x2e9fcc){var _0x41a023;return db[_0x1b2b('0x41')]['find']({'where':{'id':_0x36a0c3['params']['id']}})[_0x1b2b('0x14')](handleEntityNotFound(_0x5ed886,null))['then'](saveUpdates(_0x36a0c3['body'],null))[_0x1b2b('0x14')](function(_0x4c1424){if(_0x4c1424){_0x41a023=_0x4c1424['get']({'plain':!![]});var _0x3f04c5=fs[_0x1b2b('0x4a')](path[_0x1b2b('0x4b')](config[_0x1b2b('0x4c')],_0x1b2b('0x4d')),'utf8');var _0x2cd940=ejs[_0x1b2b('0x4e')](_0x3f04c5,_0x41a023);var _0x48c9ea=fs[_0x1b2b('0x4a')](path['join'](config['root'],_0x1b2b('0x4f')),_0x1b2b('0x50'));var _0x8397a3=ejs[_0x1b2b('0x4e')](_0x48c9ea,_0x41a023);fs[_0x1b2b('0x51')](_0x1b2b('0x52'),_0x2cd940);fs[_0x1b2b('0x51')](_0x1b2b('0x53'),_0x8397a3);return respondWithRpcPromise('Reload',_0x1b2b('0x24'),{'module':_0x1b2b('0x54')});}})[_0x1b2b('0x14')](function(){return respondWithRpcPromise(_0x1b2b('0x55'),_0x1b2b('0x24'),{'module':_0x1b2b('0x56')});})[_0x1b2b('0x14')](function(){return _0x41a023||null;})[_0x1b2b('0x14')](respondWithResult(_0x5ed886,null))['catch'](handleError(_0x5ed886,null));};exports[_0x1b2b('0x57')]=function(_0x224939,_0x513784,_0x62f9d2){if(_0x224939[_0x1b2b('0x58')]&&_0x224939[_0x1b2b('0x58')][_0x1b2b('0x59')]){_0x224939[_0x1b2b('0x5a')][_0x1b2b('0x5b')]=_0x224939[_0x1b2b('0x58')][_0x1b2b('0x59')];}return db[_0x1b2b('0x41')][_0x1b2b('0x49')]({'where':{'id':_0x224939[_0x1b2b('0x47')]['id']}})[_0x1b2b('0x14')](handleEntityNotFound(_0x513784,null))[_0x1b2b('0x14')](saveUpdates(_0x224939[_0x1b2b('0x5a')],null))[_0x1b2b('0x14')](respondWithResult(_0x513784,null))[_0x1b2b('0x45')](handleError(_0x513784,null));};exports[_0x1b2b('0x5c')]=function(_0x3f9c28,_0x55517b,_0xe79141){if(_0x3f9c28[_0x1b2b('0x58')]&&_0x3f9c28[_0x1b2b('0x58')][_0x1b2b('0x59')]){_0x3f9c28[_0x1b2b('0x5a')]['loginLogo']=_0x3f9c28[_0x1b2b('0x58')]['filename'];}return db['Setting'][_0x1b2b('0x49')]({'where':{'id':_0x3f9c28['params']['id']}})[_0x1b2b('0x14')](handleEntityNotFound(_0x55517b,null))[_0x1b2b('0x14')](saveUpdates(_0x3f9c28[_0x1b2b('0x5a')],null))[_0x1b2b('0x14')](respondWithResult(_0x55517b,null))[_0x1b2b('0x45')](handleError(_0x55517b,null));};var utilLicense=require(_0x1b2b('0x5d'));exports[_0x1b2b('0x5e')]=function(_0x5ee92d,_0x28a477,_0x31193d){var _0x79a186='server/files/images/logos';var _0x4df2de={'custom':![]};return utilLicense[_0x1b2b('0x5f')]()['then'](function(_0x9a3995){if(_0x9a3995){_0x4df2de=_0x9a3995;}return db[_0x1b2b('0x41')][_0x1b2b('0x49')]({'where':{'id':_0x5ee92d[_0x1b2b('0x47')]['id']},'attributes':[_0x1b2b('0x5b'),_0x1b2b('0x60'),'defaultLogo',_0x1b2b('0x61')],'raw':!![]});})[_0x1b2b('0x14')](handleEntityNotFound(_0x28a477,null))['then'](function(_0xf9498d){if(_0xf9498d){var _0x3c995a=_0xf9498d[_0x1b2b('0x5b')]&&fs[_0x1b2b('0x62')](path[_0x1b2b('0x4b')](config[_0x1b2b('0x4c')],_0x79a186,_[_0x1b2b('0x63')](_0xf9498d['logo'])))?path[_0x1b2b('0x4b')](config[_0x1b2b('0x4c')],_0x79a186,_[_0x1b2b('0x63')](_0xf9498d['logo'])):path[_0x1b2b('0x4b')](config[_0x1b2b('0x4c')],_0x79a186,_['toLower'](_0x1b2b('0x64')));var _0x2dfffb=_0x1b2b('0x65')+_['upperFirst'](_0x1b2b('0x5b'));if(_0xf9498d[_0x2dfffb]||!_0x4df2de['custom']){_0x3c995a=path['join'](config[_0x1b2b('0x4c')],_0x79a186,_[_0x1b2b('0x63')](_0x1b2b('0x64')));}if(!fs[_0x1b2b('0x62')](_0x3c995a)){throw new db[(_0x1b2b('0x66'))][(_0x1b2b('0x67'))](_0x1b2b('0x68'));}return _0x28a477['download'](_0x3c995a);}})[_0x1b2b('0x45')](handleError(_0x28a477,null));};var utilLicense=require(_0x1b2b('0x5d'));exports[_0x1b2b('0x69')]=function(_0x599ea0,_0xbdfe2,_0x13a99f){var _0x4dc1f6=_0x1b2b('0x6a');var _0x514b90={'custom':![]};return utilLicense[_0x1b2b('0x5f')]()[_0x1b2b('0x14')](function(_0x263cda){if(_0x263cda){_0x514b90=_0x263cda;}return db[_0x1b2b('0x41')][_0x1b2b('0x49')]({'where':{'id':_0x599ea0[_0x1b2b('0x47')]['id']},'attributes':[_0x1b2b('0x5b'),'loginLogo','defaultLogo',_0x1b2b('0x61')],'raw':!![]});})[_0x1b2b('0x14')](handleEntityNotFound(_0xbdfe2,null))[_0x1b2b('0x14')](function(_0x58ef00){if(_0x58ef00){var _0x1d7b4b=_0x58ef00[_0x1b2b('0x60')]&&fs[_0x1b2b('0x62')](path['join'](config[_0x1b2b('0x4c')],_0x4dc1f6,_[_0x1b2b('0x63')](_0x58ef00['loginLogo'])))?path['join'](config['root'],_0x4dc1f6,_[_0x1b2b('0x63')](_0x58ef00[_0x1b2b('0x60')])):path['join'](config[_0x1b2b('0x4c')],_0x4dc1f6,_[_0x1b2b('0x63')](_0x1b2b('0x6b')));var _0x405ab8=_0x1b2b('0x65')+_[_0x1b2b('0x6c')]('loginLogo');if(_0x58ef00[_0x405ab8]||!_0x514b90[_0x1b2b('0x6d')]){_0x1d7b4b=path[_0x1b2b('0x4b')](config[_0x1b2b('0x4c')],_0x4dc1f6,_[_0x1b2b('0x63')](_0x1b2b('0x6b')));}if(!fs[_0x1b2b('0x62')](_0x1d7b4b)){throw new db['Sequelize'][(_0x1b2b('0x67'))](_0x1b2b('0x68'));}return _0xbdfe2[_0x1b2b('0x6e')](_0x1d7b4b);}})['catch'](handleError(_0xbdfe2,null));};exports[_0x1b2b('0x6f')]=function(_0x3a64fd,_0x46a0b9){return db[_0x1b2b('0x41')][_0x1b2b('0x49')]({'where':{'id':_0x3a64fd['params']['id']},'attributes':['securePassword']})[_0x1b2b('0x14')](respondWithResult(_0x46a0b9,null))[_0x1b2b('0x45')](handleError(_0x46a0b9,null));};
\ No newline at end of file
+var _0x4d71=['path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','request','info','Setting,\x20%s,\x20%s','request\x20sent','debug','Setting,\x20%s,\x20%s,\x20%s','error','code','message','result','sendStatus','status','json','offset','limit','Content-Range','save','then','destroy','end','stack','name','send','index','Setting','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','nolimit','order','sort','where','add','day','merge','map','filter','options','count','includeAll','findAll','params','length','include','find','catch','update','body','get','readFileSync','root','utf8','join','server/files/templates/turn.ejs','render','/etc/asterisk/stun_xcally.conf','writeFileSync','/etc/asterisk/turn_xcally.conf','Reload','res_stun_monitor.so','res_rtp_asterisk.so','file','filename','logo','addLogoLogin','loginLogo','getLogo','server/files/images/logos','toLower','default_logo.png','upperFirst','custom','existsSync','Sequelize','ValidationError','Logo\x20not\x20found','download','../../config/license/util','defaultLogo','defaultLoginLogo','default_loginLogo.png','default','fast-json-patch','moment','mustache','util'];(function(_0x25562e,_0x1a5dc3){var _0x5a521d=function(_0x1361d7){while(--_0x1361d7){_0x25562e['push'](_0x25562e['shift']());}};_0x5a521d(++_0x1a5dc3);}(_0x4d71,0x6b));var _0x14d7=function(_0x5841c1,_0x575a6f){_0x5841c1=_0x5841c1-0x0;var _0x41ad9c=_0x4d71[_0x5841c1];return _0x41ad9c;};'use strict';var jsonpatch=require(_0x14d7('0x0'));var rp=require('request-promise');var moment=require(_0x14d7('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x14d7('0x2'));var util=require(_0x14d7('0x3'));var path=require(_0x14d7('0x4'));var sox=require(_0x14d7('0x5'));var csv=require('to-csv');var ejs=require(_0x14d7('0x6'));var fs=require('fs');var _=require(_0x14d7('0x7'));var squel=require(_0x14d7('0x8'));var crypto=require(_0x14d7('0x9'));var jsforce=require(_0x14d7('0xa'));var deskjs=require(_0x14d7('0xb'));var toCsv=require(_0x14d7('0xc'));var querystring=require(_0x14d7('0xd'));var Papa=require('papaparse');var qs=require(_0x14d7('0xe'));var logger=require('../../config/logger')(_0x14d7('0xf'));var utils=require(_0x14d7('0x10'));var config=require(_0x14d7('0x11'));var db=require(_0x14d7('0x12'))['db'];var jayson=require(_0x14d7('0x13'));var client=jayson[_0x14d7('0x14')][_0x14d7('0x15')]({'port':0x232a});function respondWithRpcPromise(_0x47612c,_0x37b59c,_0x3d0d5e,_0x3102ca){return new BPromise(function(_0x501884,_0x459687){var _0x2d014b=_0x3102ca||client;return _0x2d014b[_0x14d7('0x16')](_0x47612c,_0x3d0d5e)['then'](function(_0x22c929){logger[_0x14d7('0x17')](_0x14d7('0x18'),_0x37b59c,_0x14d7('0x19'));logger[_0x14d7('0x1a')](_0x14d7('0x1b'),_0x37b59c,_0x14d7('0x19'),JSON['stringify'](_0x22c929));if(_0x22c929[_0x14d7('0x1c')]){if(_0x22c929['error'][_0x14d7('0x1d')]===0x1f4){logger[_0x14d7('0x1c')]('Setting,\x20%s,\x20%s',_0x37b59c,_0x22c929[_0x14d7('0x1c')][_0x14d7('0x1e')]);return _0x459687(_0x22c929['error'][_0x14d7('0x1e')]);}logger[_0x14d7('0x1c')](_0x14d7('0x18'),_0x37b59c,_0x22c929[_0x14d7('0x1c')]['message']);return _0x501884(_0x22c929[_0x14d7('0x1c')][_0x14d7('0x1e')]);}else{logger['info'](_0x14d7('0x18'),_0x37b59c,_0x14d7('0x19'));_0x501884(_0x22c929[_0x14d7('0x1f')][_0x14d7('0x1e')]);}})['catch'](function(_0x32ea7f){logger[_0x14d7('0x1c')](_0x14d7('0x18'),_0x37b59c,_0x32ea7f);_0x459687(_0x32ea7f);});});}function respondWithStatusCode(_0x4e3a22,_0x578141){_0x578141=_0x578141||0xcc;return function(_0x268ef4){if(_0x268ef4){return _0x4e3a22[_0x14d7('0x20')](_0x578141);}return _0x4e3a22['status'](_0x578141)['end']();};}function respondWithResult(_0x1553df,_0x1f4a1d){_0x1f4a1d=_0x1f4a1d||0xc8;return function(_0x57c9d9){if(_0x57c9d9){return _0x1553df[_0x14d7('0x21')](_0x1f4a1d)[_0x14d7('0x22')](_0x57c9d9);}};}function respondWithFilteredResult(_0x4f9977,_0x91d3f){return function(_0xaaa9b6){if(_0xaaa9b6){var _0x10c94e=_0xaaa9b6['count'],_0xefc7e0=_0x91d3f[_0x14d7('0x23')],_0x659a31=_0x91d3f[_0x14d7('0x23')]+_0x91d3f[_0x14d7('0x24')],_0x15b312;if(_0x659a31>=_0x10c94e){_0x659a31=_0x10c94e;_0x15b312=0xc8;}else{_0x15b312=0xce;}_0x4f9977[_0x14d7('0x21')](_0x15b312);return _0x4f9977['set'](_0x14d7('0x25'),_0xefc7e0+'-'+_0x659a31+'/'+_0x10c94e)[_0x14d7('0x22')](_0xaaa9b6);}return null;};}function patchUpdates(_0x22d22f){return function(_0x12e60c){try{jsonpatch['apply'](_0x12e60c,_0x22d22f,!![]);}catch(_0x124ce2){return BPromise['reject'](_0x124ce2);}return _0x12e60c[_0x14d7('0x26')]();};}function saveUpdates(_0x7d836a,_0x4f2b66){return function(_0x1de177){if(_0x1de177){return _0x1de177['update'](_0x7d836a)[_0x14d7('0x27')](function(_0x5eedd9){return _0x5eedd9;});}return null;};}function removeEntity(_0x4edbb0,_0x9b1102){return function(_0x20338e){if(_0x20338e){return _0x20338e[_0x14d7('0x28')]()[_0x14d7('0x27')](function(){_0x4edbb0[_0x14d7('0x21')](0xcc)[_0x14d7('0x29')]();});}};}function handleEntityNotFound(_0x25aebd,_0x2fb5c6){return function(_0x14c57d){if(!_0x14c57d){_0x25aebd['sendStatus'](0x194);}return _0x14c57d;};}function handleError(_0x3c5f60,_0x42cfb8){_0x42cfb8=_0x42cfb8||0x1f4;return function(_0x3c3630){logger[_0x14d7('0x1c')](_0x3c3630[_0x14d7('0x2a')]);if(_0x3c3630['name']){delete _0x3c3630[_0x14d7('0x2b')];}_0x3c5f60[_0x14d7('0x21')](_0x42cfb8)[_0x14d7('0x2c')](_0x3c3630);};}exports[_0x14d7('0x2d')]=function(_0x15fdf1,_0x509b6a){var _0x3ff53b={},_0x70bacd={},_0x2cbb1d={'count':0x0,'rows':[]};var _0x47921d=db[_0x14d7('0x2e')][_0x14d7('0x2f')];_0x70bacd['model']=_[_0x14d7('0x30')](_0x47921d);var _0x2636ef={'dateStart':_0x15fdf1[_0x14d7('0x31')][_0x14d7('0x32')],'dateEnd':_0x15fdf1[_0x14d7('0x31')][_0x14d7('0x33')]};delete _0x15fdf1[_0x14d7('0x31')][_0x14d7('0x32')];delete _0x15fdf1['query'][_0x14d7('0x33')];_0x70bacd[_0x14d7('0x31')]=_[_0x14d7('0x30')](_0x15fdf1[_0x14d7('0x31')]);_0x70bacd[_0x14d7('0x34')]=_[_0x14d7('0x35')](_0x70bacd[_0x14d7('0x36')],_0x70bacd[_0x14d7('0x31')]);_0x3ff53b[_0x14d7('0x37')]=_['intersection'](_0x70bacd[_0x14d7('0x36')],qs[_0x14d7('0x38')](_0x15fdf1[_0x14d7('0x31')][_0x14d7('0x38')]));_0x3ff53b[_0x14d7('0x37')]=_0x3ff53b['attributes']['length']?_0x3ff53b[_0x14d7('0x37')]:_0x70bacd[_0x14d7('0x36')];if(!_0x15fdf1['query']['hasOwnProperty'](_0x14d7('0x39'))){_0x3ff53b[_0x14d7('0x24')]=qs['limit'](_0x15fdf1[_0x14d7('0x31')][_0x14d7('0x24')]);_0x3ff53b[_0x14d7('0x23')]=qs[_0x14d7('0x23')](_0x15fdf1['query'][_0x14d7('0x23')]);}_0x3ff53b[_0x14d7('0x3a')]=qs[_0x14d7('0x3b')](_0x15fdf1[_0x14d7('0x31')][_0x14d7('0x3b')]);_0x3ff53b[_0x14d7('0x3c')]=qs['filters'](_['pick'](_0x15fdf1[_0x14d7('0x31')],_0x70bacd['filters']));if(_0x2636ef[_0x14d7('0x32')]){if(_0x2636ef['dateEnd']){_0x2636ef[_0x14d7('0x33')]=moment(_0x2636ef[_0x14d7('0x33')])[_0x14d7('0x3d')](0x1,_0x14d7('0x3e'));}else{_0x2636ef[_0x14d7('0x33')]=moment(_0x2636ef[_0x14d7('0x32')])['add'](0x1,'day');}_[_0x14d7('0x3f')](_0x3ff53b[_0x14d7('0x3c')],{'createdAt':{'$gte':_0x2636ef[_0x14d7('0x32')],'$lte':_0x2636ef[_0x14d7('0x33')]}});}if(_0x15fdf1[_0x14d7('0x31')]['filter']){_0x3ff53b[_0x14d7('0x3c')]=_[_0x14d7('0x3f')](_0x3ff53b[_0x14d7('0x3c')],{'$or':_[_0x14d7('0x40')](_0x3ff53b['attributes'],function(_0x561ec6){var _0x185b03={};_0x185b03[_0x561ec6]={'$like':'%'+_0x15fdf1[_0x14d7('0x31')][_0x14d7('0x41')]+'%'};return _0x185b03;})});}_0x3ff53b=_[_0x14d7('0x3f')]({},_0x3ff53b,_0x15fdf1[_0x14d7('0x42')]);var _0x3e9e69={'where':_0x3ff53b['where']};return db['Setting']['count'](_0x3e9e69)['then'](function(_0x2d336d){_0x2cbb1d[_0x14d7('0x43')]=_0x2d336d;if(_0x15fdf1[_0x14d7('0x31')][_0x14d7('0x44')]){_0x3ff53b['include']=[{'all':!![]}];}return db[_0x14d7('0x2e')][_0x14d7('0x45')](_0x3ff53b);})[_0x14d7('0x27')](function(_0x65ebb6){_0x2cbb1d['rows']=_0x65ebb6;return _0x2cbb1d;})[_0x14d7('0x27')](respondWithFilteredResult(_0x509b6a,_0x3ff53b))['catch'](handleError(_0x509b6a,null));};exports['show']=function(_0x4b0f43,_0x4e4a89){var _0x4ed792={'raw':![],'where':{'id':_0x4b0f43[_0x14d7('0x46')]['id']}},_0x54b0fd={};_0x54b0fd[_0x14d7('0x36')]=_[_0x14d7('0x30')](db['Setting'][_0x14d7('0x2f')]);_0x54b0fd[_0x14d7('0x31')]=_[_0x14d7('0x30')](_0x4b0f43['query']);_0x54b0fd['filters']=_[_0x14d7('0x35')](_0x54b0fd[_0x14d7('0x36')],_0x54b0fd['query']);_0x4ed792[_0x14d7('0x37')]=_['intersection'](_0x54b0fd[_0x14d7('0x36')],qs['fields'](_0x4b0f43[_0x14d7('0x31')]['fields']));_0x4ed792['attributes']=_0x4ed792[_0x14d7('0x37')][_0x14d7('0x47')]?_0x4ed792[_0x14d7('0x37')]:_0x54b0fd[_0x14d7('0x36')];if(_0x4b0f43[_0x14d7('0x31')][_0x14d7('0x44')]){_0x4ed792[_0x14d7('0x48')]=[{'all':!![]}];}_0x4ed792=_[_0x14d7('0x3f')]({},_0x4ed792,_0x4b0f43[_0x14d7('0x42')]);return db[_0x14d7('0x2e')][_0x14d7('0x49')](_0x4ed792)[_0x14d7('0x27')](handleEntityNotFound(_0x4e4a89,null))[_0x14d7('0x27')](respondWithResult(_0x4e4a89,null))[_0x14d7('0x4a')](handleError(_0x4e4a89,null));};exports[_0x14d7('0x4b')]=function(_0x307130,_0x48f99f,_0x33146e){var _0xe95e8d;return db[_0x14d7('0x2e')][_0x14d7('0x49')]({'where':{'id':_0x307130['params']['id']}})[_0x14d7('0x27')](handleEntityNotFound(_0x48f99f,null))['then'](saveUpdates(_0x307130[_0x14d7('0x4c')],null))['then'](function(_0xfdc50){if(_0xfdc50){_0xe95e8d=_0xfdc50[_0x14d7('0x4d')]({'plain':!![]});var _0x378b22=fs[_0x14d7('0x4e')](path['join'](config[_0x14d7('0x4f')],'server/files/templates/stun.ejs'),_0x14d7('0x50'));var _0x1c3d32=ejs['render'](_0x378b22,_0xe95e8d);var _0x3899fc=fs[_0x14d7('0x4e')](path[_0x14d7('0x51')](config[_0x14d7('0x4f')],_0x14d7('0x52')),_0x14d7('0x50'));var _0x15de6e=ejs[_0x14d7('0x53')](_0x3899fc,_0xe95e8d);fs['writeFileSync'](_0x14d7('0x54'),_0x1c3d32);fs[_0x14d7('0x55')](_0x14d7('0x56'),_0x15de6e);return respondWithRpcPromise(_0x14d7('0x57'),_0x14d7('0x4b'),{'module':_0x14d7('0x58')});}})[_0x14d7('0x27')](function(){return respondWithRpcPromise(_0x14d7('0x57'),_0x14d7('0x4b'),{'module':_0x14d7('0x59')});})['then'](function(){return _0xe95e8d||null;})[_0x14d7('0x27')](respondWithResult(_0x48f99f,null))[_0x14d7('0x4a')](handleError(_0x48f99f,null));};exports['addLogo']=function(_0x5073bd,_0x3a873b,_0x1ad7a6){if(_0x5073bd['file']&&_0x5073bd[_0x14d7('0x5a')][_0x14d7('0x5b')]){_0x5073bd[_0x14d7('0x4c')][_0x14d7('0x5c')]=_0x5073bd['file'][_0x14d7('0x5b')];}return db[_0x14d7('0x2e')][_0x14d7('0x49')]({'where':{'id':_0x5073bd[_0x14d7('0x46')]['id']}})[_0x14d7('0x27')](handleEntityNotFound(_0x3a873b,null))['then'](saveUpdates(_0x5073bd['body'],null))[_0x14d7('0x27')](respondWithResult(_0x3a873b,null))['catch'](handleError(_0x3a873b,null));};exports[_0x14d7('0x5d')]=function(_0x1e0fb7,_0x312200,_0x318739){if(_0x1e0fb7[_0x14d7('0x5a')]&&_0x1e0fb7[_0x14d7('0x5a')][_0x14d7('0x5b')]){_0x1e0fb7[_0x14d7('0x4c')][_0x14d7('0x5e')]=_0x1e0fb7[_0x14d7('0x5a')][_0x14d7('0x5b')];}return db[_0x14d7('0x2e')][_0x14d7('0x49')]({'where':{'id':_0x1e0fb7[_0x14d7('0x46')]['id']}})[_0x14d7('0x27')](handleEntityNotFound(_0x312200,null))[_0x14d7('0x27')](saveUpdates(_0x1e0fb7[_0x14d7('0x4c')],null))[_0x14d7('0x27')](respondWithResult(_0x312200,null))[_0x14d7('0x4a')](handleError(_0x312200,null));};var utilLicense=require('../../config/license/util');exports[_0x14d7('0x5f')]=function(_0x9df3d1,_0x22156e,_0x56e9e6){var _0x4150d7=_0x14d7('0x60');var _0x37d4ec={'custom':![]};return utilLicense['getLicense']()[_0x14d7('0x27')](function(_0x42d060){if(_0x42d060){_0x37d4ec=_0x42d060;}return db[_0x14d7('0x2e')][_0x14d7('0x49')]({'where':{'id':_0x9df3d1['params']['id']},'attributes':[_0x14d7('0x5c'),_0x14d7('0x5e'),'defaultLogo','defaultLoginLogo'],'raw':!![]});})['then'](handleEntityNotFound(_0x22156e,null))[_0x14d7('0x27')](function(_0x66ac30){if(_0x66ac30){var _0x1d3531=_0x66ac30[_0x14d7('0x5c')]&&fs['existsSync'](path[_0x14d7('0x51')](config[_0x14d7('0x4f')],_0x4150d7,_['toLower'](_0x66ac30[_0x14d7('0x5c')])))?path[_0x14d7('0x51')](config[_0x14d7('0x4f')],_0x4150d7,_['toLower'](_0x66ac30[_0x14d7('0x5c')])):path[_0x14d7('0x51')](config[_0x14d7('0x4f')],_0x4150d7,_[_0x14d7('0x61')](_0x14d7('0x62')));var _0x28427='default'+_[_0x14d7('0x63')](_0x14d7('0x5c'));if(_0x66ac30[_0x28427]||!_0x37d4ec[_0x14d7('0x64')]){_0x1d3531=path[_0x14d7('0x51')](config[_0x14d7('0x4f')],_0x4150d7,_[_0x14d7('0x61')](_0x14d7('0x62')));}if(!fs[_0x14d7('0x65')](_0x1d3531)){throw new db[(_0x14d7('0x66'))][(_0x14d7('0x67'))](_0x14d7('0x68'));}return _0x22156e[_0x14d7('0x69')](_0x1d3531);}})[_0x14d7('0x4a')](handleError(_0x22156e,null));};var utilLicense=require(_0x14d7('0x6a'));exports['getLogoLogin']=function(_0x391973,_0x4edbd7,_0xf4f636){var _0x259591=_0x14d7('0x60');var _0x41d2b4={'custom':![]};return utilLicense['getLicense']()[_0x14d7('0x27')](function(_0x3a2f27){if(_0x3a2f27){_0x41d2b4=_0x3a2f27;}return db['Setting'][_0x14d7('0x49')]({'where':{'id':_0x391973[_0x14d7('0x46')]['id']},'attributes':['logo',_0x14d7('0x5e'),_0x14d7('0x6b'),_0x14d7('0x6c')],'raw':!![]});})[_0x14d7('0x27')](handleEntityNotFound(_0x4edbd7,null))[_0x14d7('0x27')](function(_0x50e8e4){if(_0x50e8e4){var _0x2a0486=_0x50e8e4[_0x14d7('0x5e')]&&fs[_0x14d7('0x65')](path[_0x14d7('0x51')](config['root'],_0x259591,_['toLower'](_0x50e8e4[_0x14d7('0x5e')])))?path[_0x14d7('0x51')](config['root'],_0x259591,_[_0x14d7('0x61')](_0x50e8e4[_0x14d7('0x5e')])):path[_0x14d7('0x51')](config[_0x14d7('0x4f')],_0x259591,_['toLower'](_0x14d7('0x6d')));var _0x4e7860=_0x14d7('0x6e')+_[_0x14d7('0x63')](_0x14d7('0x5e'));if(_0x50e8e4[_0x4e7860]||!_0x41d2b4['custom']){_0x2a0486=path['join'](config['root'],_0x259591,_[_0x14d7('0x61')](_0x14d7('0x6d')));}if(!fs[_0x14d7('0x65')](_0x2a0486)){throw new db[(_0x14d7('0x66'))]['ValidationError']('Logo\x20not\x20found');}return _0x4edbd7[_0x14d7('0x69')](_0x2a0486);}})[_0x14d7('0x4a')](handleError(_0x4edbd7,null));};exports['gdpr']=function(_0x3dbf9c,_0x401ed6){return db[_0x14d7('0x2e')][_0x14d7('0x49')]({'where':{'id':_0x3dbf9c[_0x14d7('0x46')]['id']},'attributes':['securePassword']})[_0x14d7('0x27')](respondWithResult(_0x401ed6,null))['catch'](handleError(_0x401ed6,null));};
\ No newline at end of file
index 3525bdd..cbd62fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfbd4=['exports','define','Setting','lodash','api','moment','bluebird','request-promise','./setting.attributes'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0xfbd4,0x1b3));var _0x4fbd=function(_0xe15d0a,_0x492723){_0xe15d0a=_0xe15d0a-0x0;var _0x5c1338=_0xfbd4[_0xe15d0a];return _0x5c1338;};'use strict';var _=require(_0x4fbd('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x4fbd('0x1'));var moment=require(_0x4fbd('0x2'));var BPromise=require(_0x4fbd('0x3'));var rp=require(_0x4fbd('0x4'));var attributes=require(_0x4fbd('0x5'));module[_0x4fbd('0x6')]=function(_0x3bdc08,_0x57c638){return _0x3bdc08[_0x4fbd('0x7')](_0x4fbd('0x8'),attributes,{'tableName':'settings','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe23a=['../../config/logger','moment','bluebird','define','Setting','lodash','util'];(function(_0x2bf141,_0x31eac7){var _0x48277b=function(_0x9fe560){while(--_0x9fe560){_0x2bf141['push'](_0x2bf141['shift']());}};_0x48277b(++_0x31eac7);}(_0xe23a,0xf3));var _0xae23=function(_0xcd5a3d,_0x3c5b33){_0xcd5a3d=_0xcd5a3d-0x0;var _0xd43207=_0xe23a[_0xcd5a3d];return _0xd43207;};'use strict';var _=require(_0xae23('0x0'));var util=require(_0xae23('0x1'));var logger=require(_0xae23('0x2'))('api');var moment=require(_0xae23('0x3'));var BPromise=require(_0xae23('0x4'));var rp=require('request-promise');var attributes=require('./setting.attributes');module['exports']=function(_0x345445,_0x54ae3c){return _0x345445[_0xae23('0x5')](_0xae23('0x6'),attributes,{'tableName':'settings','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1a9cbe4..d2fe123 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa334=['info','Setting,\x20%s,\x20%s','debug','Setting,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','lodash','util','moment','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','request','then'];(function(_0x436a69,_0x5a08fd){var _0x5a64b1=function(_0x447139){while(--_0x447139){_0x436a69['push'](_0x436a69['shift']());}};_0x5a64b1(++_0x5a08fd);}(_0xa334,0xb2));var _0x4a33=function(_0x3ab15f,_0x5a2739){_0x3ab15f=_0x3ab15f-0x0;var _0x1cb7fb=_0xa334[_0x3ab15f];return _0x1cb7fb;};'use strict';var _=require(_0x4a33('0x0'));var util=require(_0x4a33('0x1'));var moment=require(_0x4a33('0x2'));var BPromise=require('bluebird');var rs=require(_0x4a33('0x3'));var fs=require('fs');var db=require(_0x4a33('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x4a33('0x5'))(_0x4a33('0x6'));var config=require(_0x4a33('0x7'));var jayson=require(_0x4a33('0x8'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x347942,_0x2d8463,_0x410c2f){return new BPromise(function(_0x165ccf,_0x801980){return client[_0x4a33('0x9')](_0x347942,_0x410c2f)[_0x4a33('0xa')](function(_0x11a384){logger[_0x4a33('0xb')](_0x4a33('0xc'),_0x2d8463,'request\x20sent');logger[_0x4a33('0xd')](_0x4a33('0xe'),_0x2d8463,_0x4a33('0xf'),JSON['stringify'](_0x11a384));if(_0x11a384['error']){if(_0x11a384[_0x4a33('0x10')][_0x4a33('0x11')]===0x1f4){logger['error']('Setting,\x20%s,\x20%s',_0x2d8463,_0x11a384[_0x4a33('0x10')][_0x4a33('0x12')]);return _0x801980(_0x11a384[_0x4a33('0x10')][_0x4a33('0x12')]);}logger[_0x4a33('0x10')](_0x4a33('0xc'),_0x2d8463,_0x11a384['error'][_0x4a33('0x12')]);return _0x165ccf(_0x11a384[_0x4a33('0x10')]['message']);}else{logger['info'](_0x4a33('0xc'),_0x2d8463,'request\x20sent');_0x165ccf(_0x11a384[_0x4a33('0x13')]['message']);}})[_0x4a33('0x14')](function(_0x5c525f){logger['error']('Setting,\x20%s,\x20%s',_0x2d8463,_0x5c525f);_0x801980(_0x5c525f);});});}
\ No newline at end of file
+var _0x9bae=['util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','info','Setting,\x20%s,\x20%s','request\x20sent','debug','Setting,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash'];(function(_0xf61d62,_0x5e1ce1){var _0x1b8b00=function(_0x21dbba){while(--_0x21dbba){_0xf61d62['push'](_0xf61d62['shift']());}};_0x1b8b00(++_0x5e1ce1);}(_0x9bae,0x1b7));var _0xe9ba=function(_0x52a4c1,_0xadc428){_0x52a4c1=_0x52a4c1-0x0;var _0x2419b6=_0x9bae[_0x52a4c1];return _0x2419b6;};'use strict';var _=require(_0xe9ba('0x0'));var util=require(_0xe9ba('0x1'));var moment=require(_0xe9ba('0x2'));var BPromise=require('bluebird');var rs=require(_0xe9ba('0x3'));var fs=require('fs');var db=require(_0xe9ba('0x4'))['db'];var utils=require(_0xe9ba('0x5'));var logger=require(_0xe9ba('0x6'))(_0xe9ba('0x7'));var config=require(_0xe9ba('0x8'));var jayson=require(_0xe9ba('0x9'));var client=jayson[_0xe9ba('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3bff7b,_0xec2e1c,_0x185744){return new BPromise(function(_0x423ea1,_0x1f0dff){return client[_0xe9ba('0xb')](_0x3bff7b,_0x185744)['then'](function(_0x17a640){logger[_0xe9ba('0xc')](_0xe9ba('0xd'),_0xec2e1c,_0xe9ba('0xe'));logger[_0xe9ba('0xf')](_0xe9ba('0x10'),_0xec2e1c,_0xe9ba('0xe'),JSON[_0xe9ba('0x11')](_0x17a640));if(_0x17a640[_0xe9ba('0x12')]){if(_0x17a640[_0xe9ba('0x12')][_0xe9ba('0x13')]===0x1f4){logger[_0xe9ba('0x12')]('Setting,\x20%s,\x20%s',_0xec2e1c,_0x17a640['error'][_0xe9ba('0x14')]);return _0x1f0dff(_0x17a640[_0xe9ba('0x12')][_0xe9ba('0x14')]);}logger[_0xe9ba('0x12')](_0xe9ba('0xd'),_0xec2e1c,_0x17a640['error'][_0xe9ba('0x14')]);return _0x423ea1(_0x17a640[_0xe9ba('0x12')][_0xe9ba('0x14')]);}else{logger[_0xe9ba('0xc')](_0xe9ba('0xd'),_0xec2e1c,_0xe9ba('0xe'));_0x423ea1(_0x17a640[_0xe9ba('0x15')][_0xe9ba('0x14')]);}})['catch'](function(_0x364c82){logger[_0xe9ba('0x12')](_0xe9ba('0xd'),_0xec2e1c,_0x364c82);_0x1f0dff(_0x364c82);});});}
\ No newline at end of file
index df287ec..7d33942 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x899a=['delete','destroy','removeDispositions','removeAnswers','removeAgents','exports','multer','util','express','Router','../../components/interaction/service','../../config/environment','./smsAccount.controller','get','index','/describe','isAuthenticated','/:id','show','/:id/dispositions','getDispositions','/:id/canned_answers','getAnswers','/:id/interactions','/:id/users','getAgents','post','create','/:id/notify','notify','/:id/applications','send','/:id/status','status','put','update'];(function(_0x2380c9,_0x1c34bb){var _0x142582=function(_0x7cc84b){while(--_0x7cc84b){_0x2380c9['push'](_0x2380c9['shift']());}};_0x142582(++_0x1c34bb);}(_0x899a,0x1b6));var _0xa899=function(_0x5916f6,_0x1a1623){_0x5916f6=_0x5916f6-0x0;var _0x411ea8=_0x899a[_0x5916f6];return _0x411ea8;};'use strict';var multer=require(_0xa899('0x0'));var util=require(_0xa899('0x1'));var path=require('path');var express=require(_0xa899('0x2'));var router=express[_0xa899('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xa899('0x4'));var config=require(_0xa899('0x5'));var controller=require(_0xa899('0x6'));router[_0xa899('0x7')]('/',auth['isAuthenticated'](),controller[_0xa899('0x8')]);router[_0xa899('0x7')](_0xa899('0x9'),auth[_0xa899('0xa')](),controller['describe']);router[_0xa899('0x7')](_0xa899('0xb'),auth[_0xa899('0xa')](),controller[_0xa899('0xc')]);router[_0xa899('0x7')](_0xa899('0xd'),auth[_0xa899('0xa')](),controller[_0xa899('0xe')]);router[_0xa899('0x7')](_0xa899('0xf'),auth['isAuthenticated'](),controller[_0xa899('0x10')]);router['get']('/:id/applications',auth['isAuthenticated'](),controller['getApplications']);router[_0xa899('0x7')](_0xa899('0x11'),auth[_0xa899('0xa')](),controller['getInteractions']);router[_0xa899('0x7')](_0xa899('0x12'),auth['isAuthenticated'](),controller[_0xa899('0x13')]);router[_0xa899('0x14')]('/',auth[_0xa899('0xa')](),controller[_0xa899('0x15')]);router['post'](_0xa899('0xd'),auth[_0xa899('0xa')](),controller['addDisposition']);router[_0xa899('0x14')](_0xa899('0xf'),auth[_0xa899('0xa')](),controller['addAnswer']);router['post'](_0xa899('0x16'),controller[_0xa899('0x17')]);router[_0xa899('0x14')](_0xa899('0x18'),auth[_0xa899('0xa')](),controller['addApplications']);router[_0xa899('0x14')]('/:id/send',auth[_0xa899('0xa')](),controller[_0xa899('0x19')]);router['post'](_0xa899('0x1a'),controller[_0xa899('0x1b')]);router[_0xa899('0x14')](_0xa899('0x12'),auth[_0xa899('0xa')](),controller['addAgents']);router[_0xa899('0x1c')](_0xa899('0xb'),auth['isAuthenticated'](),controller[_0xa899('0x1d')]);router[_0xa899('0x1e')](_0xa899('0xb'),auth[_0xa899('0xa')](),controller[_0xa899('0x1f')]);router['delete'](_0xa899('0xd'),auth[_0xa899('0xa')](),controller[_0xa899('0x20')]);router['delete'](_0xa899('0xf'),auth[_0xa899('0xa')](),controller[_0xa899('0x21')]);router['delete'](_0xa899('0x12'),auth[_0xa899('0xa')](),controller[_0xa899('0x22')]);module[_0xa899('0x23')]=router;
\ No newline at end of file
+var _0xab3a=['util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsAccount.controller','get','isAuthenticated','index','describe','/:id','show','/:id/dispositions','getDispositions','/:id/canned_answers','/:id/applications','getApplications','/:id/interactions','getInteractions','/:id/users','getAgents','create','addDisposition','post','/:id/notify','notify','addApplications','/:id/send','send','/:id/status','status','delete','destroy','removeDispositions','removeAnswers','exports','multer'];(function(_0x5c352d,_0x2f9c0c){var _0x8ea242=function(_0x73cf24){while(--_0x73cf24){_0x5c352d['push'](_0x5c352d['shift']());}};_0x8ea242(++_0x2f9c0c);}(_0xab3a,0x1d3));var _0xaab3=function(_0x4b6507,_0x5518b5){_0x4b6507=_0x4b6507-0x0;var _0x2001ec=_0xab3a[_0x4b6507];return _0x2001ec;};'use strict';var multer=require(_0xaab3('0x0'));var util=require(_0xaab3('0x1'));var path=require(_0xaab3('0x2'));var express=require(_0xaab3('0x3'));var router=express[_0xaab3('0x4')]();var auth=require(_0xaab3('0x5'));var interaction=require(_0xaab3('0x6'));var config=require(_0xaab3('0x7'));var controller=require(_0xaab3('0x8'));router[_0xaab3('0x9')]('/',auth[_0xaab3('0xa')](),controller[_0xaab3('0xb')]);router[_0xaab3('0x9')]('/describe',auth['isAuthenticated'](),controller[_0xaab3('0xc')]);router[_0xaab3('0x9')](_0xaab3('0xd'),auth[_0xaab3('0xa')](),controller[_0xaab3('0xe')]);router[_0xaab3('0x9')](_0xaab3('0xf'),auth[_0xaab3('0xa')](),controller[_0xaab3('0x10')]);router[_0xaab3('0x9')](_0xaab3('0x11'),auth['isAuthenticated'](),controller['getAnswers']);router[_0xaab3('0x9')](_0xaab3('0x12'),auth[_0xaab3('0xa')](),controller[_0xaab3('0x13')]);router['get'](_0xaab3('0x14'),auth['isAuthenticated'](),controller[_0xaab3('0x15')]);router['get'](_0xaab3('0x16'),auth[_0xaab3('0xa')](),controller[_0xaab3('0x17')]);router['post']('/',auth[_0xaab3('0xa')](),controller[_0xaab3('0x18')]);router['post'](_0xaab3('0xf'),auth[_0xaab3('0xa')](),controller[_0xaab3('0x19')]);router['post']('/:id/canned_answers',auth['isAuthenticated'](),controller['addAnswer']);router[_0xaab3('0x1a')](_0xaab3('0x1b'),controller[_0xaab3('0x1c')]);router['post'](_0xaab3('0x12'),auth[_0xaab3('0xa')](),controller[_0xaab3('0x1d')]);router[_0xaab3('0x1a')](_0xaab3('0x1e'),auth[_0xaab3('0xa')](),controller[_0xaab3('0x1f')]);router['post'](_0xaab3('0x20'),controller[_0xaab3('0x21')]);router[_0xaab3('0x1a')](_0xaab3('0x16'),auth[_0xaab3('0xa')](),controller['addAgents']);router['put']('/:id',auth['isAuthenticated'](),controller['update']);router[_0xaab3('0x22')](_0xaab3('0xd'),auth[_0xaab3('0xa')](),controller[_0xaab3('0x23')]);router[_0xaab3('0x22')](_0xaab3('0xf'),auth[_0xaab3('0xa')](),controller[_0xaab3('0x24')]);router[_0xaab3('0x22')](_0xaab3('0x11'),auth[_0xaab3('0xa')](),controller[_0xaab3('0x25')]);router[_0xaab3('0x22')]('/:id/users',auth[_0xaab3('0xa')](),controller['removeAgents']);module[_0xaab3('0x26')]=router;
\ No newline at end of file
index 4714ead..817e27e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5802=['generate','ENUM','twilio','skebby','connectel','clicksend','plivo','basic','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','BOOLEAN','INTEGER','sequelize','exports','STRING','name'];(function(_0x5b6bab,_0x3aecd4){var _0x26cbee=function(_0x390c68){while(--_0x390c68){_0x5b6bab['push'](_0x5b6bab['shift']());}};_0x26cbee(++_0x3aecd4);}(_0x5802,0xfc));var _0x2580=function(_0x3eb4a9,_0x359d73){_0x3eb4a9=_0x3eb4a9-0x0;var _0x48dbad=_0x5802[_0x3eb4a9];return _0x48dbad;};'use strict';var Sequelize=require(_0x2580('0x0'));var rs=require('randomstring');module[_0x2580('0x1')]={'name':{'type':Sequelize[_0x2580('0x2')],'unique':_0x2580('0x3'),'allowNull':![]},'key':{'type':Sequelize[_0x2580('0x2')],'allowNull':![]},'remote':{'type':Sequelize[_0x2580('0x2')],'allowNull':![]},'token':{'type':Sequelize[_0x2580('0x2')],'defaultValue':function(){return rs[_0x2580('0x4')]();}},'phone':{'type':Sequelize[_0x2580('0x2')]},'type':{'type':Sequelize[_0x2580('0x5')](_0x2580('0x6'),_0x2580('0x7'),_0x2580('0x8'),_0x2580('0x9'),_0x2580('0xa'))},'accountSid':{'type':Sequelize['STRING']},'authId':{'type':Sequelize[_0x2580('0x2')]},'authToken':{'type':Sequelize[_0x2580('0x2')]},'smsMethod':{'type':Sequelize[_0x2580('0x5')](_0x2580('0xb'),'classic','classic+')},'username':{'type':Sequelize['STRING']},'password':{'type':Sequelize['STRING']},'senderString':{'type':Sequelize[_0x2580('0x2')]},'deliveryReport':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'description':{'type':Sequelize[_0x2580('0x2')]},'notificationTemplate':{'type':Sequelize[_0x2580('0xc')],'defaultValue':function(){return _0x2580('0xd');}},'notificationSound':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x2580('0xe')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x2580('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0x2580('0xe')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x2580('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x2580('0xe')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c}};
\ No newline at end of file
+var _0x3ab2=['basic','classic','BOOLEAN','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','INTEGER','randomstring','exports','STRING','generate','twilio','skebby','plivo','ENUM'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x3ab2,0x19c));var _0x23ab=function(_0xafe711,_0x21ef56){_0xafe711=_0xafe711-0x0;var _0x1a89a2=_0x3ab2[_0xafe711];return _0x1a89a2;};'use strict';var Sequelize=require('sequelize');var rs=require(_0x23ab('0x0'));module[_0x23ab('0x1')]={'name':{'type':Sequelize['STRING'],'unique':'name','allowNull':![]},'key':{'type':Sequelize[_0x23ab('0x2')],'allowNull':![]},'remote':{'type':Sequelize['STRING'],'allowNull':![]},'token':{'type':Sequelize[_0x23ab('0x2')],'defaultValue':function(){return rs[_0x23ab('0x3')]();}},'phone':{'type':Sequelize[_0x23ab('0x2')]},'type':{'type':Sequelize['ENUM'](_0x23ab('0x4'),_0x23ab('0x5'),'connectel','clicksend',_0x23ab('0x6'))},'accountSid':{'type':Sequelize[_0x23ab('0x2')]},'authId':{'type':Sequelize[_0x23ab('0x2')]},'authToken':{'type':Sequelize[_0x23ab('0x2')]},'smsMethod':{'type':Sequelize[_0x23ab('0x7')](_0x23ab('0x8'),_0x23ab('0x9'),'classic+')},'username':{'type':Sequelize[_0x23ab('0x2')]},'password':{'type':Sequelize[_0x23ab('0x2')]},'senderString':{'type':Sequelize[_0x23ab('0x2')]},'deliveryReport':{'type':Sequelize[_0x23ab('0xa')],'defaultValue':![]},'description':{'type':Sequelize[_0x23ab('0x2')]},'notificationTemplate':{'type':Sequelize[_0x23ab('0xb')],'defaultValue':function(){return _0x23ab('0xc');}},'notificationSound':{'type':Sequelize[_0x23ab('0xa')],'defaultValue':!![]},'notificationShake':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0x23ab('0xa')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x23ab('0xa')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x23ab('0xd')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c}};
\ No newline at end of file
index ca9814f..f900aa2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdafa=['crypto','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','socket.io-emitter','localhost','./smsAccount.socket','register','jayson/promise','request','then','info','SmsAccount,\x20%s,\x20%s','request\x20sent','debug','SmsAccount,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','sendStatus','status','json','offset','limit','Content-Range','apply','update','destroy','end','stack','name','send','index','SmsAccount','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','day','merge','filter','map','options','count','includeAll','include','rows','show','params','find','create','body','describe','addDisposition','SmsAccountId','Disposition','getDispositions','findOne','order','pick','findAll','removeDispositions','CannedAnswer','ids','notify','sms','SmsApplication','Applications','account','applications','orderBy','priority','asc','CmContact','Sequelize','ValidationError','no\x20available\x20attributes','updatedAt','difference','createdAt','CompanyId','ListId','mobile','type','twilio','from','From','Body','messageId','MessageSid','skebby','sender','text','connectel','message_id','plivo','Text','MessageUUID','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','DESC','list','omit','Contacts','defaults','contact','SmsInteraction','spread','autoclose','push','close','unmanaged','*,*,*,*','interaction','created','SmsMessage','ContactId','unshift','agent','waitForTheAssignedAgent','Start','startRouting','receiveMessage','entity\x20found','SmsAccount,\x20%s,\x20%s,\x20%s,\x20%s','Content-Type','sequelize','transaction','getApplications','getInteractions','Contact','User','Owner','fullname','Tag','Tags','color','tag','to\x20is\x20mandatory','List','get','out','user','Messages','dataValues','received\x20delivery\x20report\x20from','skebby_dispatch_id','statusInt','clicksend','status_code','DELIVERED','inspect','error_code','addAgents','emit','userSmsAccount:save','removeAgents','isArray','userSmsAccount:remove','getAgents','fast-json-patch','bluebird','util','sox','to-csv','ejs','lodash'];(function(_0x1218c7,_0x3f1545){var _0xdc9e3=function(_0x148322){while(--_0x148322){_0x1218c7['push'](_0x1218c7['shift']());}};_0xdc9e3(++_0x3f1545);}(_0xdafa,0x173));var _0xadaf=function(_0x4f4816,_0x3a1d60){_0x4f4816=_0x4f4816-0x0;var _0x471c45=_0xdafa[_0x4f4816];return _0x471c45;};'use strict';var jsonpatch=require(_0xadaf('0x0'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xadaf('0x1'));var Mustache=require('mustache');var util=require(_0xadaf('0x2'));var path=require('path');var sox=require(_0xadaf('0x3'));var csv=require(_0xadaf('0x4'));var ejs=require(_0xadaf('0x5'));var fs=require('fs');var _=require(_0xadaf('0x6'));var squel=require('squel');var crypto=require(_0xadaf('0x7'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xadaf('0x4'));var querystring=require(_0xadaf('0x8'));var Papa=require(_0xadaf('0x9'));var qs=require(_0xadaf('0xa'));var logger=require('../../config/logger')(_0xadaf('0xb'));var utils=require(_0xadaf('0xc'));var config=require(_0xadaf('0xd'));var db=require('../../mysqldb')['db'];var socket=require(_0xadaf('0xe'))({'host':_0xadaf('0xf'),'port':0x18eb});require(_0xadaf('0x10'))[_0xadaf('0x11')](socket);var jayson=require(_0xadaf('0x12'));var client=jayson['client']['http']({'port':0x232c});function respondWithRpcPromise(_0xca82f8,_0xe229f5,_0xbeab1e,_0x2e9853){return new BPromise(function(_0x306893,_0x448a44){var _0x576457=_0x2e9853||client;return _0x576457[_0xadaf('0x13')](_0xca82f8,_0xbeab1e)[_0xadaf('0x14')](function(_0x3e1cce){logger[_0xadaf('0x15')](_0xadaf('0x16'),_0xe229f5,_0xadaf('0x17'));logger[_0xadaf('0x18')](_0xadaf('0x19'),_0xe229f5,'request\x20sent',JSON[_0xadaf('0x1a')](_0x3e1cce));if(_0x3e1cce[_0xadaf('0x1b')]){if(_0x3e1cce['error']['code']===0x1f4){logger[_0xadaf('0x1b')](_0xadaf('0x16'),_0xe229f5,_0x3e1cce[_0xadaf('0x1b')]['message']);return _0x448a44(_0x3e1cce[_0xadaf('0x1b')][_0xadaf('0x1c')]);}logger[_0xadaf('0x1b')](_0xadaf('0x16'),_0xe229f5,_0x3e1cce[_0xadaf('0x1b')][_0xadaf('0x1c')]);return _0x306893(_0x3e1cce[_0xadaf('0x1b')][_0xadaf('0x1c')]);}else{logger[_0xadaf('0x15')](_0xadaf('0x16'),_0xe229f5,_0xadaf('0x17'));_0x306893(_0x3e1cce[_0xadaf('0x1d')][_0xadaf('0x1c')]);}})[_0xadaf('0x1e')](function(_0x4e08b8){logger['error'](_0xadaf('0x16'),_0xe229f5,_0x4e08b8);_0x448a44(_0x4e08b8);});});}function respondWithStatusCode(_0x20c688,_0x5df8c7){_0x5df8c7=_0x5df8c7||0xcc;return function(_0x3767be){if(_0x3767be){return _0x20c688[_0xadaf('0x1f')](_0x5df8c7);}return _0x20c688[_0xadaf('0x20')](_0x5df8c7)['end']();};}function respondWithResult(_0x3d4c6a,_0x3128a2){_0x3128a2=_0x3128a2||0xc8;return function(_0x4a6df0){if(_0x4a6df0){return _0x3d4c6a[_0xadaf('0x20')](_0x3128a2)[_0xadaf('0x21')](_0x4a6df0);}};}function respondWithFilteredResult(_0x5f5702,_0x242610){return function(_0x2df82d){if(_0x2df82d){var _0x320b18=_0x2df82d['count'],_0xb022c=_0x242610['offset'],_0x9d668=_0x242610[_0xadaf('0x22')]+_0x242610[_0xadaf('0x23')],_0x75c2d4;if(_0x9d668>=_0x320b18){_0x9d668=_0x320b18;_0x75c2d4=0xc8;}else{_0x75c2d4=0xce;}_0x5f5702[_0xadaf('0x20')](_0x75c2d4);return _0x5f5702['set'](_0xadaf('0x24'),_0xb022c+'-'+_0x9d668+'/'+_0x320b18)[_0xadaf('0x21')](_0x2df82d);}return null;};}function patchUpdates(_0xd1d572){return function(_0x2975b8){try{jsonpatch[_0xadaf('0x25')](_0x2975b8,_0xd1d572,!![]);}catch(_0x549b0d){return BPromise['reject'](_0x549b0d);}return _0x2975b8['save']();};}function saveUpdates(_0x514656,_0x34df67){return function(_0x3d0bee){if(_0x3d0bee){return _0x3d0bee[_0xadaf('0x26')](_0x514656)[_0xadaf('0x14')](function(_0x59def0){return _0x59def0;});}return null;};}function removeEntity(_0x92dcf1,_0x5b4fc0){return function(_0x37c37b){if(_0x37c37b){return _0x37c37b[_0xadaf('0x27')]()[_0xadaf('0x14')](function(){_0x92dcf1[_0xadaf('0x20')](0xcc)[_0xadaf('0x28')]();});}};}function handleEntityNotFound(_0x2f36e6,_0x533ef4){return function(_0x4a121e){if(!_0x4a121e){_0x2f36e6[_0xadaf('0x1f')](0x194);}return _0x4a121e;};}function handleError(_0xbc453,_0xc2dce7){_0xc2dce7=_0xc2dce7||0x1f4;return function(_0x5f02fa){logger['error'](_0x5f02fa[_0xadaf('0x29')]);if(_0x5f02fa[_0xadaf('0x2a')]){delete _0x5f02fa['name'];}_0xbc453['status'](_0xc2dce7)[_0xadaf('0x2b')](_0x5f02fa);};}exports[_0xadaf('0x2c')]=function(_0x3ae804,_0x24355f){var _0x1a28ba={},_0xf9970f={},_0x4866a9={'count':0x0,'rows':[]};var _0x23924f=db[_0xadaf('0x2d')][_0xadaf('0x2e')];_0xf9970f[_0xadaf('0x2f')]=_[_0xadaf('0x30')](_0x23924f);var _0x285c08={'dateStart':_0x3ae804[_0xadaf('0x31')][_0xadaf('0x32')],'dateEnd':_0x3ae804[_0xadaf('0x31')]['dateEnd']};delete _0x3ae804[_0xadaf('0x31')][_0xadaf('0x32')];delete _0x3ae804[_0xadaf('0x31')][_0xadaf('0x33')];_0xf9970f[_0xadaf('0x31')]=_[_0xadaf('0x30')](_0x3ae804['query']);_0xf9970f[_0xadaf('0x34')]=_[_0xadaf('0x35')](_0xf9970f[_0xadaf('0x2f')],_0xf9970f['query']);_0x1a28ba[_0xadaf('0x36')]=_['intersection'](_0xf9970f[_0xadaf('0x2f')],qs[_0xadaf('0x37')](_0x3ae804[_0xadaf('0x31')][_0xadaf('0x37')]));_0x1a28ba[_0xadaf('0x36')]=_0x1a28ba['attributes'][_0xadaf('0x38')]?_0x1a28ba['attributes']:_0xf9970f[_0xadaf('0x2f')];if(!_0x3ae804[_0xadaf('0x31')][_0xadaf('0x39')](_0xadaf('0x3a'))){_0x1a28ba['limit']=qs[_0xadaf('0x23')](_0x3ae804[_0xadaf('0x31')][_0xadaf('0x23')]);_0x1a28ba[_0xadaf('0x22')]=qs[_0xadaf('0x22')](_0x3ae804[_0xadaf('0x31')][_0xadaf('0x22')]);}_0x1a28ba['order']=qs[_0xadaf('0x3b')](_0x3ae804['query'][_0xadaf('0x3b')]);_0x1a28ba[_0xadaf('0x3c')]=qs[_0xadaf('0x34')](_['pick'](_0x3ae804[_0xadaf('0x31')],_0xf9970f[_0xadaf('0x34')]));if(_0x285c08[_0xadaf('0x32')]){if(_0x285c08[_0xadaf('0x33')]){_0x285c08[_0xadaf('0x33')]=moment(_0x285c08['dateEnd'])['add'](0x1,_0xadaf('0x3d'));}else{_0x285c08[_0xadaf('0x33')]=moment(_0x285c08[_0xadaf('0x32')])['add'](0x1,_0xadaf('0x3d'));}_[_0xadaf('0x3e')](_0x1a28ba[_0xadaf('0x3c')],{'createdAt':{'$gte':_0x285c08['dateStart'],'$lte':_0x285c08['dateEnd']}});}if(_0x3ae804['query'][_0xadaf('0x3f')]){_0x1a28ba[_0xadaf('0x3c')]=_[_0xadaf('0x3e')](_0x1a28ba[_0xadaf('0x3c')],{'$or':_[_0xadaf('0x40')](_0x1a28ba[_0xadaf('0x36')],function(_0x4d4354){var _0x7b0b0a={};_0x7b0b0a[_0x4d4354]={'$like':'%'+_0x3ae804[_0xadaf('0x31')]['filter']+'%'};return _0x7b0b0a;})});}_0x1a28ba=_[_0xadaf('0x3e')]({},_0x1a28ba,_0x3ae804[_0xadaf('0x41')]);var _0x103012={'where':_0x1a28ba['where']};return db[_0xadaf('0x2d')][_0xadaf('0x42')](_0x103012)[_0xadaf('0x14')](function(_0x200c3f){_0x4866a9['count']=_0x200c3f;if(_0x3ae804[_0xadaf('0x31')][_0xadaf('0x43')]){_0x1a28ba[_0xadaf('0x44')]=[{'all':!![]}];}return db[_0xadaf('0x2d')]['findAll'](_0x1a28ba);})['then'](function(_0x3118c1){_0x4866a9[_0xadaf('0x45')]=_0x3118c1;return _0x4866a9;})[_0xadaf('0x14')](respondWithFilteredResult(_0x24355f,_0x1a28ba))['catch'](handleError(_0x24355f,null));};exports[_0xadaf('0x46')]=function(_0x3a34d7,_0x58b63d){var _0x392465={'raw':![],'where':{'id':_0x3a34d7[_0xadaf('0x47')]['id']}},_0x15f9f9={};_0x15f9f9[_0xadaf('0x2f')]=_[_0xadaf('0x30')](db['SmsAccount'][_0xadaf('0x2e')]);_0x15f9f9[_0xadaf('0x31')]=_['keys'](_0x3a34d7['query']);_0x15f9f9['filters']=_['intersection'](_0x15f9f9['model'],_0x15f9f9[_0xadaf('0x31')]);_0x392465[_0xadaf('0x36')]=_[_0xadaf('0x35')](_0x15f9f9[_0xadaf('0x2f')],qs[_0xadaf('0x37')](_0x3a34d7[_0xadaf('0x31')]['fields']));_0x392465[_0xadaf('0x36')]=_0x392465['attributes'][_0xadaf('0x38')]?_0x392465[_0xadaf('0x36')]:_0x15f9f9[_0xadaf('0x2f')];if(_0x3a34d7['query']['includeAll']){_0x392465[_0xadaf('0x44')]=[{'all':!![]}];}_0x392465=_['merge']({},_0x392465,_0x3a34d7['options']);return db[_0xadaf('0x2d')][_0xadaf('0x48')](_0x392465)['then'](handleEntityNotFound(_0x58b63d,null))[_0xadaf('0x14')](respondWithResult(_0x58b63d,null))[_0xadaf('0x1e')](handleError(_0x58b63d,null));};exports['create']=function(_0x3dfa2b,_0x23aac8){return db[_0xadaf('0x2d')][_0xadaf('0x49')](_0x3dfa2b['body'],{})[_0xadaf('0x14')](respondWithResult(_0x23aac8,0xc9))[_0xadaf('0x1e')](handleError(_0x23aac8,null));};exports[_0xadaf('0x26')]=function(_0x3c7a0b,_0x1ec996){if(_0x3c7a0b[_0xadaf('0x4a')]['id']){delete _0x3c7a0b['body']['id'];}return db['SmsAccount']['find']({'where':{'id':_0x3c7a0b[_0xadaf('0x47')]['id']}})[_0xadaf('0x14')](handleEntityNotFound(_0x1ec996,null))[_0xadaf('0x14')](saveUpdates(_0x3c7a0b[_0xadaf('0x4a')],null))[_0xadaf('0x14')](respondWithResult(_0x1ec996,null))[_0xadaf('0x1e')](handleError(_0x1ec996,null));};exports['destroy']=function(_0xd991ff,_0x5a477b){return db[_0xadaf('0x2d')][_0xadaf('0x48')]({'where':{'id':_0xd991ff[_0xadaf('0x47')]['id']}})[_0xadaf('0x14')](handleEntityNotFound(_0x5a477b,null))[_0xadaf('0x14')](removeEntity(_0x5a477b,null))['catch'](handleError(_0x5a477b,null));};exports['describe']=function(_0x2eb995,_0x4467d5){return db['SmsAccount'][_0xadaf('0x4b')]()[_0xadaf('0x14')](respondWithResult(_0x4467d5,null))[_0xadaf('0x1e')](handleError(_0x4467d5,null));};exports[_0xadaf('0x4c')]=function(_0x13a6b9,_0x15eab3,_0x4f8293){if(_0x13a6b9[_0xadaf('0x4a')]['id']){delete _0x13a6b9[_0xadaf('0x4a')]['id'];}return db[_0xadaf('0x2d')]['find']({'where':{'id':_0x13a6b9['params']['id']}})[_0xadaf('0x14')](handleEntityNotFound(_0x15eab3,null))[_0xadaf('0x14')](function(_0x35b5a4){if(_0x35b5a4){_0x13a6b9[_0xadaf('0x4a')][_0xadaf('0x4d')]=_0x35b5a4['id'];return db[_0xadaf('0x4e')][_0xadaf('0x49')](_0x13a6b9['body']);}})[_0xadaf('0x14')](respondWithResult(_0x15eab3,null))[_0xadaf('0x1e')](handleError(_0x15eab3,null));};exports[_0xadaf('0x4f')]=function(_0x3c08f5,_0x535f63,_0x5581be){var _0x4cb3aa={'raw':![],'where':{}};var _0x106b2c={};var _0x5b2761={'count':0x0,'rows':[]};return db['SmsAccount'][_0xadaf('0x50')]({'where':{'id':_0x3c08f5['params']['id']}})['then'](handleEntityNotFound(_0x535f63,null))[_0xadaf('0x14')](function(_0x113430){if(_0x113430){_0x106b2c['model']=_[_0xadaf('0x30')](db[_0xadaf('0x4e')]['rawAttributes']);_0x106b2c[_0xadaf('0x31')]=_[_0xadaf('0x30')](_0x3c08f5['query']);_0x106b2c[_0xadaf('0x34')]=_[_0xadaf('0x35')](_0x106b2c['model'],_0x106b2c['query']);_0x4cb3aa[_0xadaf('0x36')]=_[_0xadaf('0x35')](_0x106b2c[_0xadaf('0x2f')],qs[_0xadaf('0x37')](_0x3c08f5[_0xadaf('0x31')][_0xadaf('0x37')]));_0x4cb3aa[_0xadaf('0x36')]=_0x4cb3aa[_0xadaf('0x36')][_0xadaf('0x38')]?_0x4cb3aa[_0xadaf('0x36')]:_0x106b2c['model'];if(!_0x3c08f5['query'][_0xadaf('0x39')](_0xadaf('0x3a'))){_0x4cb3aa[_0xadaf('0x23')]=qs['limit'](_0x3c08f5[_0xadaf('0x31')][_0xadaf('0x23')]);_0x4cb3aa[_0xadaf('0x22')]=qs[_0xadaf('0x22')](_0x3c08f5[_0xadaf('0x31')][_0xadaf('0x22')]);}_0x4cb3aa[_0xadaf('0x51')]=qs[_0xadaf('0x3b')](_0x3c08f5[_0xadaf('0x31')][_0xadaf('0x3b')]);_0x4cb3aa['where']=qs[_0xadaf('0x34')](_[_0xadaf('0x52')](_0x3c08f5[_0xadaf('0x31')],_0x106b2c[_0xadaf('0x34')]));_0x4cb3aa[_0xadaf('0x3c')][_0xadaf('0x4d')]=_0x113430['id'];if(_0x3c08f5[_0xadaf('0x31')][_0xadaf('0x3f')]){_0x4cb3aa['where']=_[_0xadaf('0x3e')](_0x4cb3aa[_0xadaf('0x3c')],{'$or':_[_0xadaf('0x40')](_0x4cb3aa[_0xadaf('0x36')],function(_0x497fe1){var _0x16259e={};_0x16259e[_0x497fe1]={'$like':'%'+_0x3c08f5[_0xadaf('0x31')][_0xadaf('0x3f')]+'%'};return _0x16259e;})});}_0x4cb3aa=_[_0xadaf('0x3e')]({},_0x4cb3aa,_0x3c08f5[_0xadaf('0x41')]);return db['Disposition'][_0xadaf('0x42')]({'where':_0x4cb3aa['where']})[_0xadaf('0x14')](function(_0x5ab71d){_0x5b2761[_0xadaf('0x42')]=_0x5ab71d;if(_0x3c08f5[_0xadaf('0x31')][_0xadaf('0x43')]){_0x4cb3aa[_0xadaf('0x44')]=[{'all':!![]}];}return db[_0xadaf('0x4e')][_0xadaf('0x53')](_0x4cb3aa);})[_0xadaf('0x14')](function(_0x190520){_0x5b2761[_0xadaf('0x45')]=_0x190520;return _0x5b2761;});}})['then'](respondWithFilteredResult(_0x535f63,_0x4cb3aa))[_0xadaf('0x1e')](handleError(_0x535f63,null));};exports[_0xadaf('0x54')]=function(_0x548b5a,_0x4a46dd,_0x2d2d3b){var _0x11fce5;return db[_0xadaf('0x2d')]['find']({'where':{'id':_0x548b5a[_0xadaf('0x47')]['id']}})['then'](handleEntityNotFound(_0x4a46dd,null))[_0xadaf('0x14')](function(_0xe733da){if(_0xe733da){return _0xe733da['removeDispositions'](_0x548b5a['query']['ids']);}})[_0xadaf('0x14')](respondWithStatusCode(_0x4a46dd,null))[_0xadaf('0x1e')](handleError(_0x4a46dd,null));};exports['addAnswer']=function(_0x4ce7e5,_0x4057e9,_0x48830d){if(_0x4ce7e5[_0xadaf('0x4a')]['id']){delete _0x4ce7e5[_0xadaf('0x4a')]['id'];}return db[_0xadaf('0x2d')][_0xadaf('0x48')]({'where':{'id':_0x4ce7e5[_0xadaf('0x47')]['id']}})['then'](handleEntityNotFound(_0x4057e9,null))[_0xadaf('0x14')](function(_0x4fc51b){if(_0x4fc51b){_0x4ce7e5[_0xadaf('0x4a')][_0xadaf('0x4d')]=_0x4fc51b['id'];return db[_0xadaf('0x55')][_0xadaf('0x49')](_0x4ce7e5['body']);}})[_0xadaf('0x14')](respondWithResult(_0x4057e9,null))[_0xadaf('0x1e')](handleError(_0x4057e9,null));};exports['getAnswers']=function(_0x2b063a,_0x4f1f58,_0x2e3b76){var _0x2f3d25={'raw':![],'where':{}};var _0x52b108={};var _0x5bd3d3={'count':0x0,'rows':[]};return db[_0xadaf('0x2d')][_0xadaf('0x50')]({'where':{'id':_0x2b063a[_0xadaf('0x47')]['id']}})[_0xadaf('0x14')](handleEntityNotFound(_0x4f1f58,null))['then'](function(_0x468b56){if(_0x468b56){_0x52b108[_0xadaf('0x2f')]=_[_0xadaf('0x30')](db['CannedAnswer'][_0xadaf('0x2e')]);_0x52b108[_0xadaf('0x31')]=_[_0xadaf('0x30')](_0x2b063a[_0xadaf('0x31')]);_0x52b108[_0xadaf('0x34')]=_[_0xadaf('0x35')](_0x52b108[_0xadaf('0x2f')],_0x52b108[_0xadaf('0x31')]);_0x2f3d25[_0xadaf('0x36')]=_['intersection'](_0x52b108[_0xadaf('0x2f')],qs[_0xadaf('0x37')](_0x2b063a['query'][_0xadaf('0x37')]));_0x2f3d25[_0xadaf('0x36')]=_0x2f3d25['attributes'][_0xadaf('0x38')]?_0x2f3d25[_0xadaf('0x36')]:_0x52b108[_0xadaf('0x2f')];if(!_0x2b063a[_0xadaf('0x31')][_0xadaf('0x39')]('nolimit')){_0x2f3d25[_0xadaf('0x23')]=qs[_0xadaf('0x23')](_0x2b063a[_0xadaf('0x31')][_0xadaf('0x23')]);_0x2f3d25[_0xadaf('0x22')]=qs['offset'](_0x2b063a[_0xadaf('0x31')]['offset']);}_0x2f3d25[_0xadaf('0x51')]=qs[_0xadaf('0x3b')](_0x2b063a[_0xadaf('0x31')]['sort']);_0x2f3d25[_0xadaf('0x3c')]=qs['filters'](_[_0xadaf('0x52')](_0x2b063a['query'],_0x52b108[_0xadaf('0x34')]));_0x2f3d25[_0xadaf('0x3c')][_0xadaf('0x4d')]=_0x468b56['id'];if(_0x2b063a[_0xadaf('0x31')][_0xadaf('0x3f')]){_0x2f3d25[_0xadaf('0x3c')]=_['merge'](_0x2f3d25['where'],{'$or':_[_0xadaf('0x40')](_0x2f3d25['attributes'],function(_0x1988e4){var _0x2dd431={};_0x2dd431[_0x1988e4]={'$like':'%'+_0x2b063a[_0xadaf('0x31')][_0xadaf('0x3f')]+'%'};return _0x2dd431;})});}_0x2f3d25=_[_0xadaf('0x3e')]({},_0x2f3d25,_0x2b063a[_0xadaf('0x41')]);return db[_0xadaf('0x55')][_0xadaf('0x42')]({'where':_0x2f3d25[_0xadaf('0x3c')]})[_0xadaf('0x14')](function(_0x9ae467){_0x5bd3d3['count']=_0x9ae467;if(_0x2b063a['query'][_0xadaf('0x43')]){_0x2f3d25[_0xadaf('0x44')]=[{'all':!![]}];}return db['CannedAnswer'][_0xadaf('0x53')](_0x2f3d25);})['then'](function(_0x1abf6c){_0x5bd3d3[_0xadaf('0x45')]=_0x1abf6c;return _0x5bd3d3;});}})[_0xadaf('0x14')](respondWithFilteredResult(_0x4f1f58,_0x2f3d25))['catch'](handleError(_0x4f1f58,null));};exports['removeAnswers']=function(_0x10d181,_0x17d5c7,_0x2c69de){var _0x4225aa;return db[_0xadaf('0x2d')]['find']({'where':{'id':_0x10d181['params']['id']}})[_0xadaf('0x14')](handleEntityNotFound(_0x17d5c7,null))[_0xadaf('0x14')](function(_0x16c24d){if(_0x16c24d){return _0x16c24d['removeAnswers'](_0x10d181[_0xadaf('0x31')][_0xadaf('0x56')]);}})[_0xadaf('0x14')](respondWithStatusCode(_0x17d5c7,null))['catch'](handleError(_0x17d5c7,null));};exports[_0xadaf('0x57')]=function(_0x300a74,_0x148323,_0xadb4b2){var _0x46b0fb={'channel':_0xadaf('0x58')};var _0x64dd18=[];var _0x47c620=[];var _0x5b39a6={};return db[_0xadaf('0x2d')][_0xadaf('0x48')]({'where':{'id':_0x300a74[_0xadaf('0x47')]['id']},'include':[{'model':db[_0xadaf('0x59')],'as':_0xadaf('0x5a')}]})[_0xadaf('0x14')](handleEntityNotFound(_0x148323,null))[_0xadaf('0x14')](function(_0x1016a7){_0x46b0fb[_0xadaf('0x5b')]=_0x1016a7;_0x46b0fb[_0xadaf('0x5c')]=_[_0xadaf('0x5d')](_0x1016a7[_0xadaf('0x5a')],[_0xadaf('0x5e')],[_0xadaf('0x5f')]);if(_0x46b0fb['account'][_0xadaf('0x5a')]){delete _0x46b0fb['account']['Applications'];}return db[_0xadaf('0x60')][_0xadaf('0x4b')]();})[_0xadaf('0x14')](function(_0xfaf466){if(!_0xfaf466){throw new db[(_0xadaf('0x61'))][(_0xadaf('0x62'))](_0xadaf('0x63'));}_0x64dd18=_['difference'](_['keys'](_0xfaf466),['createdAt',_0xadaf('0x64')]);_0x47c620=_[_0xadaf('0x65')](_['keys'](_0xfaf466),[_0xadaf('0x66'),_0xadaf('0x64'),_0xadaf('0x67'),_0xadaf('0x68')]);_0x46b0fb[_0xadaf('0x4a')]={'mapKey':_0xadaf('0x69')};if(_0x46b0fb['account'][_0xadaf('0x6a')]){switch(_0x46b0fb['account'][_0xadaf('0x6a')]){case _0xadaf('0x6b'):_0x46b0fb['body'][_0xadaf('0x6c')]=_0x300a74[_0xadaf('0x4a')][_0xadaf('0x6d')];_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x4a')]=_0x300a74[_0xadaf('0x4a')][_0xadaf('0x6e')];_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x6f')]=_0x300a74[_0xadaf('0x4a')][_0xadaf('0x70')];break;case _0xadaf('0x71'):_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x6c')]=_0x300a74['body'][_0xadaf('0x72')];_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x4a')]=_0x300a74[_0xadaf('0x4a')][_0xadaf('0x73')];break;case _0xadaf('0x74'):_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x6c')]=_0x300a74['body'][_0xadaf('0x6c')];_0x46b0fb['body']['body']=_0x300a74['body'][_0xadaf('0x1c')];break;case'clicksend':_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x6c')]=_0x300a74['body'][_0xadaf('0x6c')];_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x4a')]=_0x300a74[_0xadaf('0x4a')][_0xadaf('0x4a')];_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x6f')]=_0x300a74['body'][_0xadaf('0x75')];break;case _0xadaf('0x76'):_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x6c')]=_0x300a74[_0xadaf('0x4a')][_0xadaf('0x6d')];_0x46b0fb['body'][_0xadaf('0x4a')]=_0x300a74[_0xadaf('0x4a')][_0xadaf('0x77')];_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x6f')]=_0x300a74[_0xadaf('0x4a')][_0xadaf('0x78')];break;}}if(_0x46b0fb[_0xadaf('0x4a')]['id']){delete _0x46b0fb[_0xadaf('0x4a')]['id'];}if(_[_0xadaf('0x79')](_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x6c')])){throw new db[(_0xadaf('0x61'))][(_0xadaf('0x62'))](_0xadaf('0x7a'));}if(_[_0xadaf('0x79')](_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x4a')])||_0x46b0fb['body'][_0xadaf('0x4a')]===''){throw new db[(_0xadaf('0x61'))][(_0xadaf('0x62'))](_0xadaf('0x7b'));}if(_[_0xadaf('0x79')](_0x46b0fb['body']['mapKey'])){throw new db[(_0xadaf('0x61'))][(_0xadaf('0x62'))](_0xadaf('0x7c')+_0x47c620);}if(!_[_0xadaf('0x7d')](_0x47c620,_0x46b0fb['body'][_0xadaf('0x7e')])){throw new db['Sequelize'][(_0xadaf('0x62'))](_0xadaf('0x7f')+_0x47c620);}_0x5b39a6[_0x46b0fb[_0xadaf('0x4a')]['mapKey']]=_0x46b0fb[_0xadaf('0x4a')]['from'];return db[_0xadaf('0x80')]['find']({'where':{'id':_0x46b0fb['account'][_0xadaf('0x68')]},'include':[{'model':db[_0xadaf('0x60')],'as':'Contacts','where':_0x5b39a6,'limit':0x1,'order':[[_0xadaf('0x64'),_0xadaf('0x81')]]}]});})[_0xadaf('0x14')](handleEntityNotFound(_0x148323,null))['then'](function(_0x4657af){if(_0x4657af){_0x46b0fb[_0xadaf('0x82')]=_[_0xadaf('0x83')](_0x4657af,['Contacts']);if(_0x4657af[_0xadaf('0x84')][_0xadaf('0x38')]){return _0x4657af[_0xadaf('0x84')][0x0];}var _0x194d7d=_[_0xadaf('0x85')](_0x46b0fb['body'],{'firstName':_0x46b0fb['body'][_0xadaf('0x6c')],'ListId':_0x4657af['id']});_0x194d7d[_0x46b0fb['body'][_0xadaf('0x7e')]]=_0x46b0fb['body'][_0xadaf('0x6c')];return db[_0xadaf('0x60')][_0xadaf('0x49')](_0x194d7d,{'fields':_0x64dd18,'raw':!![]});}})[_0xadaf('0x14')](handleEntityNotFound(_0x148323,null))[_0xadaf('0x14')](function(_0x702459){if(_0x702459){_0x46b0fb[_0xadaf('0x86')]=_0x702459;var _0x270b31={'ContactId':_0x702459['id'],'phone':_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x6c')],'SmsAccountId':_0x300a74[_0xadaf('0x47')]['id']};var _0x215f5b={'ContactId':_0x702459['id'],'SmsAccountId':_0x300a74[_0xadaf('0x47')]['id'],'closed':![]};return db[_0xadaf('0x87')]['find']({'where':_0x215f5b})[_0xadaf('0x14')](function(_0x11cfdf){if(_0x11cfdf){return[_0x11cfdf,![]];}return db[_0xadaf('0x87')][_0xadaf('0x49')](_0x270b31)['then'](function(_0x1bd44b){return[_0x1bd44b,!![]];});});}})[_0xadaf('0x88')](function(_0x5f3198,_0x147585){_0x46b0fb['interaction']=_0x5f3198['get']({'plain':!![]});if(_0x147585){if(_0x46b0fb[_0xadaf('0x5b')][_0xadaf('0x89')]){_0x46b0fb[_0xadaf('0x5c')][_0xadaf('0x8a')]({'id':0x0,'priority':_0x46b0fb[_0xadaf('0x5c')][_0xadaf('0x38')]+0x1,'app':_0xadaf('0x8b'),'appdata':_0xadaf('0x8c'),'interval':_0xadaf('0x8d')});}_0x46b0fb[_0xadaf('0x8e')][_0xadaf('0x8f')]=!![];}else{_0x46b0fb['interaction'][_0xadaf('0x8f')]=!![];}return db[_0xadaf('0x90')][_0xadaf('0x49')]({'phone':_0x46b0fb['body'][_0xadaf('0x6c')],'messageId':_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x6f')],'body':_0x46b0fb[_0xadaf('0x4a')][_0xadaf('0x4a')],'SmsAccountId':_0x300a74['params']['id'],'SmsInteractionId':_0x5f3198['id'],'direction':'in','ContactId':_0x5f3198[_0xadaf('0x91')],'AttachmentId':_0x46b0fb['body']['AttachmentId']});})['then'](function(_0x2100b4){_0x46b0fb[_0xadaf('0x1c')]=_0x2100b4;if(_0x46b0fb['interaction']['UserId']){return db['User']['find']({'attributes':['id',_0xadaf('0x2a')],'where':{'id':_0x46b0fb['interaction']['UserId']}})['then'](function(_0x2c4715){if(_0x2c4715){_0x46b0fb[_0xadaf('0x5c')][_0xadaf('0x92')]({'id':0x0,'priority':0x0,'app':_0xadaf('0x93'),'appdata':_0x2c4715['name']+','+(_0x46b0fb[_0xadaf('0x5b')][_0xadaf('0x94')]||0xa),'interval':_0xadaf('0x8d')});}return respondWithRpcPromise(_0xadaf('0x95'),_0xadaf('0x96'),_0x46b0fb);});}return respondWithRpcPromise('Start',_0xadaf('0x96'),_0x46b0fb);})['then'](function(_0x3c1a7e){if(_0x3c1a7e){var _0x5107e1=0xc8;var _0x4edf24=_0xadaf('0x97');logger[_0xadaf('0x15')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x4edf24,_0x5107e1,_0xadaf('0x98'));logger[_0xadaf('0x18')](_0xadaf('0x99'),_0x4edf24,_0x5107e1,_0xadaf('0x98'),JSON[_0xadaf('0x1a')](_0x3c1a7e));if(_0x46b0fb[_0xadaf('0x5b')][_0xadaf('0x6a')]==='twilio'){return _0x148323[_0xadaf('0x20')](_0x5107e1)['set'](_0xadaf('0x9a'),'text/xml')['send']('<?xml\x20version=\x221.0\x22\x20encoding=\x22UTF-8\x22?>\x0a<Response></Response>');}else{return _0x148323[_0xadaf('0x20')](_0x5107e1)['json'](_0x3c1a7e);}}})[_0xadaf('0x1e')](handleError(_0x148323,null));};exports['addApplications']=function(_0x5c2337,_0x46270a,_0x37cce9){return db[_0xadaf('0x2d')][_0xadaf('0x50')]({'where':{'id':_0x5c2337[_0xadaf('0x47')]['id']}})[_0xadaf('0x14')](handleEntityNotFound(_0x46270a,null))[_0xadaf('0x14')](function(_0x245998){if(_0x245998){return db[_0xadaf('0x9b')][_0xadaf('0x9c')](function(_0x4d7867){return db[_0xadaf('0x59')][_0xadaf('0x27')]({'where':{'SmsAccountId':_0x5c2337[_0xadaf('0x47')]['id']},'transaction':_0x4d7867})[_0xadaf('0x14')](function(_0x53f64d){var _0x475fbc=_[_0xadaf('0x40')](_0x5c2337[_0xadaf('0x4a')],function(_0x2c040c){_0x2c040c[_0xadaf('0x4d')]=_0x5c2337[_0xadaf('0x47')]['id'];return _0x2c040c;});return db[_0xadaf('0x59')]['bulkCreate'](_0x475fbc,{'transaction':_0x4d7867});});})[_0xadaf('0x14')](function(){return db['SmsApplication']['findAndCountAll']({'where':{'SmsAccountId':_0x5c2337['params']['id']},'order':_0xadaf('0x5e')});});}})['then'](respondWithResult(_0x46270a,null))[_0xadaf('0x1e')](handleError(_0x46270a,null));};exports[_0xadaf('0x9d')]=function(_0x10adac,_0x27dcdd,_0x4fa28b){var _0x4fdfcd={};var _0x1cdb0f={};var _0x52dccf;var _0x20e478;return db[_0xadaf('0x2d')][_0xadaf('0x50')]({'where':{'id':_0x10adac[_0xadaf('0x47')]['id']}})[_0xadaf('0x14')](handleEntityNotFound(_0x27dcdd,null))['then'](function(_0x58b82c){if(_0x58b82c){_0x52dccf=_0x58b82c;_0x1cdb0f['model']=_[_0xadaf('0x30')](db[_0xadaf('0x59')][_0xadaf('0x2e')]);_0x1cdb0f[_0xadaf('0x31')]=_[_0xadaf('0x30')](_0x10adac[_0xadaf('0x31')]);_0x1cdb0f[_0xadaf('0x34')]=_[_0xadaf('0x35')](_0x1cdb0f['model'],_0x1cdb0f[_0xadaf('0x31')]);_0x4fdfcd[_0xadaf('0x36')]=_[_0xadaf('0x35')](_0x1cdb0f[_0xadaf('0x2f')],qs['fields'](_0x10adac[_0xadaf('0x31')][_0xadaf('0x37')]));_0x4fdfcd[_0xadaf('0x36')]=_0x4fdfcd['attributes']['length']?_0x4fdfcd[_0xadaf('0x36')]:_0x1cdb0f[_0xadaf('0x2f')];_0x4fdfcd[_0xadaf('0x51')]=qs[_0xadaf('0x3b')](_0x10adac[_0xadaf('0x31')][_0xadaf('0x3b')]);_0x4fdfcd['where']=qs[_0xadaf('0x34')](_['pick'](_0x10adac[_0xadaf('0x31')],_0x1cdb0f['filters']));if(_0x10adac[_0xadaf('0x31')][_0xadaf('0x3f')]){_0x4fdfcd[_0xadaf('0x3c')]=_[_0xadaf('0x3e')](_0x4fdfcd[_0xadaf('0x3c')],{'$or':_['map'](_0x4fdfcd[_0xadaf('0x36')],function(_0x9339b6){var _0x276059={};_0x276059[_0x9339b6]={'$like':'%'+_0x10adac[_0xadaf('0x31')][_0xadaf('0x3f')]+'%'};return _0x276059;})});}_0x4fdfcd=_[_0xadaf('0x3e')]({},_0x4fdfcd,_0x10adac[_0xadaf('0x41')]);return _0x52dccf[_0xadaf('0x9d')](_0x4fdfcd);}})[_0xadaf('0x14')](function(_0x35806e){if(_0x35806e){_0x20e478=_0x35806e[_0xadaf('0x38')];if(!_0x10adac[_0xadaf('0x31')]['hasOwnProperty']('nolimit')){_0x4fdfcd[_0xadaf('0x23')]=qs[_0xadaf('0x23')](_0x10adac[_0xadaf('0x31')][_0xadaf('0x23')]);_0x4fdfcd[_0xadaf('0x22')]=qs[_0xadaf('0x22')](_0x10adac[_0xadaf('0x31')][_0xadaf('0x22')]);}return _0x52dccf[_0xadaf('0x9d')](_0x4fdfcd);}})['then'](function(_0x569f31){if(_0x569f31){return _0x569f31?{'count':_0x20e478,'rows':_0x569f31}:null;}})['then'](respondWithResult(_0x27dcdd,null))[_0xadaf('0x1e')](handleError(_0x27dcdd,null));};exports[_0xadaf('0x9e')]=function(_0x235a20,_0x50cdff,_0x2d1b5e){var _0x5beec8={'raw':![],'where':{}};var _0x3f159d={};var _0x2d5c25={'count':0x0,'rows':[]};return db[_0xadaf('0x2d')][_0xadaf('0x50')]({'where':{'id':_0x235a20['params']['id']}})['then'](handleEntityNotFound(_0x50cdff,null))['then'](function(_0xf3a114){if(_0xf3a114){_0x3f159d[_0xadaf('0x2f')]=_[_0xadaf('0x30')](db['SmsInteraction']['rawAttributes']);_0x3f159d[_0xadaf('0x31')]=_[_0xadaf('0x30')](_0x235a20[_0xadaf('0x31')]);_0x3f159d['filters']=_[_0xadaf('0x35')](_0x3f159d[_0xadaf('0x2f')],_0x3f159d['query']);_0x5beec8[_0xadaf('0x36')]=_[_0xadaf('0x35')](_0x3f159d['model'],qs['fields'](_0x235a20['query']['fields']));_0x5beec8[_0xadaf('0x36')]=_0x5beec8[_0xadaf('0x36')][_0xadaf('0x38')]?_0x5beec8[_0xadaf('0x36')]:_0x3f159d[_0xadaf('0x2f')];if(!_0x235a20['query'][_0xadaf('0x39')](_0xadaf('0x3a'))){_0x5beec8[_0xadaf('0x23')]=qs[_0xadaf('0x23')](_0x235a20[_0xadaf('0x31')][_0xadaf('0x23')]);_0x5beec8[_0xadaf('0x22')]=qs['offset'](_0x235a20[_0xadaf('0x31')][_0xadaf('0x22')]);}_0x5beec8[_0xadaf('0x51')]=qs[_0xadaf('0x3b')](_0x235a20[_0xadaf('0x31')][_0xadaf('0x3b')]);_0x5beec8[_0xadaf('0x3c')]=qs['filters'](_['pick'](_0x235a20[_0xadaf('0x31')],_0x3f159d[_0xadaf('0x34')]));_0x5beec8[_0xadaf('0x3c')][_0xadaf('0x4d')]=_0xf3a114['id'];if(_0x235a20[_0xadaf('0x31')]['filter']){_0x5beec8[_0xadaf('0x3c')]=_[_0xadaf('0x3e')](_0x5beec8[_0xadaf('0x3c')],{'$or':_[_0xadaf('0x40')](_0x5beec8[_0xadaf('0x36')],function(_0x19de14){var _0x122ebe={};_0x122ebe[_0x19de14]={'$like':'%'+_0x235a20[_0xadaf('0x31')][_0xadaf('0x3f')]+'%'};return _0x122ebe;})});}_0x5beec8=_['merge']({},_0x5beec8,_0x235a20['options']);return db[_0xadaf('0x87')]['count']({'where':_0x5beec8[_0xadaf('0x3c')]})[_0xadaf('0x14')](function(_0x25c8a1){_0x2d5c25[_0xadaf('0x42')]=_0x25c8a1;if(_0x235a20[_0xadaf('0x31')][_0xadaf('0x43')]){_0x5beec8['include']=[{'model':db[_0xadaf('0x60')],'as':_0xadaf('0x9f'),'required':![]},{'model':db[_0xadaf('0xa0')],'as':_0xadaf('0xa1'),'attributes':[_0xadaf('0x2a'),_0xadaf('0xa2'),'internal'],'required':![]},{'model':db[_0xadaf('0xa3')],'as':_0xadaf('0xa4'),'attributes':['id','name',_0xadaf('0xa5')],'where':_0x235a20[_0xadaf('0x31')][_0xadaf('0xa6')]?{'id':_0x235a20[_0xadaf('0x31')][_0xadaf('0xa6')]}:undefined,'required':_0x235a20['query']['tag']?!![]:![]}];}return db[_0xadaf('0x87')][_0xadaf('0x53')](_0x5beec8);})[_0xadaf('0x14')](function(_0x27b05b){_0x2d5c25[_0xadaf('0x45')]=_0x27b05b;return _0x2d5c25;});}})[_0xadaf('0x14')](respondWithFilteredResult(_0x50cdff,_0x5beec8))[_0xadaf('0x1e')](handleError(_0x50cdff,null));};exports[_0xadaf('0x2b')]=function(_0x1f5ae2,_0x192422,_0x4d94e7){var _0x14ca7a,_0x2b20d1,_0xb25ef8;if(_[_0xadaf('0x79')](_0x1f5ae2[_0xadaf('0x4a')][_0xadaf('0x4a')])||_0x1f5ae2[_0xadaf('0x4a')]['body']===''){throw new db['Sequelize'][(_0xadaf('0x62'))](_0xadaf('0x7b'));}if(_[_0xadaf('0x79')](_0x1f5ae2[_0xadaf('0x4a')]['to'])){throw new db['Sequelize']['ValidationError'](_0xadaf('0xa7'));}_0x14ca7a=_0x1f5ae2[_0xadaf('0x4a')]['to'];return db[_0xadaf('0x2d')]['find']({'where':{'id':_0x1f5ae2['params']['id']},'include':[{'model':db['CmList'],'as':_0xadaf('0xa8'),'include':[{'model':db[_0xadaf('0x60')],'as':_0xadaf('0x84'),'where':{'mobile':_0x14ca7a},'limit':0x1,'order':[[_0xadaf('0x64'),'DESC']]}]}]})[_0xadaf('0x14')](handleEntityNotFound(_0x192422,null))['then'](function(_0x20f834){if(_0x20f834&&_0x20f834[_0xadaf('0xa8')]){_0x2b20d1=_0x20f834[_0xadaf('0xa9')]({'plain':!![]});if(_0x2b20d1[_0xadaf('0xa8')]&&_0x2b20d1[_0xadaf('0xa8')][_0xadaf('0x84')][_0xadaf('0x38')]){return _0x2b20d1['List'][_0xadaf('0x84')][0x0];}return db['CmContact'][_0xadaf('0x49')](_[_0xadaf('0x85')](_0x1f5ae2['body'],{'firstName':_0x14ca7a,'mobile':_0x14ca7a,'phone':_0x14ca7a,'ListId':_0x2b20d1[_0xadaf('0x68')]}));}})[_0xadaf('0x14')](handleEntityNotFound(_0x192422,null))[_0xadaf('0x14')](function(_0x5a974f){if(_0x5a974f){_0xb25ef8=_0x5a974f;return db[_0xadaf('0x87')][_0xadaf('0x48')]({'where':{'ContactId':_0xb25ef8['id'],'closed':![],'SmsAccountId':_0x2b20d1['id']}})[_0xadaf('0x14')](function(_0x45d4c4){if(_0x45d4c4){return[_0x45d4c4,![]];}return db[_0xadaf('0x87')][_0xadaf('0x49')]({'UserId':_0x1f5ae2['user']['id'],'ContactId':_0xb25ef8['id'],'SmsAccountId':_0x2b20d1['id'],'phone':_0x14ca7a,'firstMsgDirection':_0xadaf('0xaa'),'Messages':[_['merge'](_0x1f5ae2[_0xadaf('0x4a')],{'read':![],'body':_0x1f5ae2[_0xadaf('0x4a')]['body'],'phone':_0x14ca7a,'SmsAccountId':_0x2b20d1['id'],'UserId':_0x1f5ae2[_0xadaf('0xab')]['id'],'ContactId':_0xb25ef8['id']})]},{'include':[{'model':db[_0xadaf('0x90')],'as':_0xadaf('0xac')}]})['then'](function(_0x1cd9f3){return[_0x1cd9f3,!![]];});});}})[_0xadaf('0x88')](function(_0x100e76,_0x28e798){if(_0x28e798){return _0x100e76;}return db[_0xadaf('0x90')][_0xadaf('0x49')](_[_0xadaf('0x3e')](_0x1f5ae2['body'],{'read':![],'body':_0x1f5ae2[_0xadaf('0x4a')][_0xadaf('0x4a')],'phone':_0x14ca7a,'SmsAccountId':_0x2b20d1['id'],'SmsInteractionId':_0x100e76['id'],'UserId':_0x1f5ae2[_0xadaf('0xab')]['id'],'ContactId':_0xb25ef8['id']}))[_0xadaf('0x14')](function(_0xcb18dc){_0x100e76[_0xadaf('0xad')][_0xadaf('0xac')]=[];_0x100e76[_0xadaf('0xad')]['Messages'][_0xadaf('0x8a')](_0xcb18dc[_0xadaf('0xad')]);return _0x100e76;});})[_0xadaf('0x14')](respondWithResult(_0x192422,null))[_0xadaf('0x1e')](handleError(_0x192422,null));};exports[_0xadaf('0x20')]=function(_0x39e292,_0x3d3582,_0x464a6e){if(_0x39e292[_0xadaf('0x4a')]['id']){delete _0x39e292[_0xadaf('0x4a')]['id'];}var _0x220e55,_0x303ad4,_0x492ec4;return db[_0xadaf('0x2d')][_0xadaf('0x48')]({'where':{'id':_0x39e292[_0xadaf('0x47')]['id']}})['then'](handleEntityNotFound(_0x3d3582,null))[_0xadaf('0x14')](function(_0xec436e){if(_0xec436e){_0x492ec4=_0xec436e;logger['debug'](_0xadaf('0x19'),'status',_0xadaf('0xae'),_0xec436e[_0xadaf('0x6a')],util['inspect'](_0x39e292[_0xadaf('0x4a')],{'showHidden':![],'depth':null}));switch(_0xec436e['type']){case _0xadaf('0x71'):if(_0x39e292[_0xadaf('0x4a')][_0xadaf('0xaf')]&&_0x39e292[_0xadaf('0x4a')][_0xadaf('0x20')]){_0x303ad4=_0x39e292[_0xadaf('0x4a')][_0xadaf('0x20')];return db['SmsMessage'][_0xadaf('0x48')]({'where':{'messageId':_0x39e292[_0xadaf('0x4a')][_0xadaf('0xaf')]}});}break;case'connectel':if(_0x39e292[_0xadaf('0x4a')]['requestid']&&_0x39e292['body'][_0xadaf('0xb0')]){_0x303ad4=_0x39e292[_0xadaf('0x4a')]['statusInt'];return db['SmsMessage'][_0xadaf('0x48')]({'where':{'messageId':_0x39e292[_0xadaf('0x4a')]['requestid']}});}break;case _0xadaf('0xb1'):if(_0x39e292[_0xadaf('0x4a')][_0xadaf('0x75')]&&_0x39e292[_0xadaf('0x4a')][_0xadaf('0xb2')]){_0x303ad4=_0x39e292['body'][_0xadaf('0xb2')];return db[_0xadaf('0x90')][_0xadaf('0x48')]({'where':{'messageId':_0x39e292[_0xadaf('0x4a')]['message_id']}});}break;}}})['then'](handleEntityNotFound(_0x3d3582,null))[_0xadaf('0x14')](function(_0x22e4f5){if(_0x22e4f5){_0x220e55=_0x22e4f5;switch(_0x492ec4[_0xadaf('0x6a')]){case'skebby':if(_0x303ad4===_0xadaf('0xb3')){return _0x220e55[_0xadaf('0x26')]({'read':!![]});}else{logger[_0xadaf('0x1b')](_0xadaf('0x19'),'status',_0xadaf('0x71'),util[_0xadaf('0xb4')](_0x39e292[_0xadaf('0x4a')],{'showHidden':![],'depth':null}));}break;case _0xadaf('0x74'):if(_0x303ad4==='1'){return _0x220e55['update']({'read':!![]});}else{logger[_0xadaf('0x1b')](_0xadaf('0x19'),_0xadaf('0x20'),'skebby',util[_0xadaf('0xb4')](_0x39e292[_0xadaf('0x4a')],{'showHidden':![],'depth':null}));}break;case _0xadaf('0xb1'):if(!_0x39e292[_0xadaf('0x4a')][_0xadaf('0xb5')]&&_0x303ad4>=0xc8&&_0x303ad4<=0xce){return _0x220e55[_0xadaf('0x26')]({'read':!![]});}else{logger['error'](_0xadaf('0x19'),_0xadaf('0x20'),_0xadaf('0xb1'),util[_0xadaf('0xb4')](_0x39e292[_0xadaf('0x4a')],{'showHidden':![],'depth':null}));}break;}return _0x220e55;}})[_0xadaf('0x14')](respondWithResult(_0x3d3582,null))[_0xadaf('0x1e')](handleError(_0x3d3582,null));};exports[_0xadaf('0xb6')]=function(_0x68e7e9,_0x132d2d,_0x4655c3){return db[_0xadaf('0x2d')][_0xadaf('0x48')]({'where':{'id':_0x68e7e9[_0xadaf('0x47')]['id']}})[_0xadaf('0x14')](handleEntityNotFound(_0x132d2d,null))[_0xadaf('0x14')](function(_0x47ebfe){if(_0x47ebfe){return _0x47ebfe[_0xadaf('0xb6')](_0x68e7e9[_0xadaf('0x4a')][_0xadaf('0x56')],_['omit'](_0x68e7e9[_0xadaf('0x4a')],[_0xadaf('0x56'),'id'])||{})[_0xadaf('0x88')](function(_0x588081){for(var _0x28645a=0x0;_0x28645a<_0x68e7e9['body'][_0xadaf('0x56')]['length'];_0x28645a+=0x1){socket[_0xadaf('0xb7')](_0xadaf('0xb8'),{'UserId':_0x68e7e9[_0xadaf('0x4a')][_0xadaf('0x56')][_0x28645a],'SmsAccountId':_0x68e7e9[_0xadaf('0x47')]['id']});}return _0x588081;});}})['then'](respondWithResult(_0x132d2d,null))[_0xadaf('0x1e')](handleError(_0x132d2d,null));};exports['removeAgents']=function(_0x46d2d1,_0x1c7b80,_0x476338){var _0x4d514a;return db[_0xadaf('0x2d')]['find']({'where':{'id':_0x46d2d1[_0xadaf('0x47')]['id']}})[_0xadaf('0x14')](handleEntityNotFound(_0x1c7b80,null))[_0xadaf('0x14')](function(_0x526a19){if(_0x526a19){return _0x526a19[_0xadaf('0xb9')](_0x46d2d1[_0xadaf('0x31')][_0xadaf('0x56')])[_0xadaf('0x14')](function(_0x5b1290){if(_[_0xadaf('0xba')](_0x46d2d1[_0xadaf('0x31')][_0xadaf('0x56')])){for(var _0x20f4bb=0x0;_0x20f4bb<_0x46d2d1[_0xadaf('0x31')][_0xadaf('0x56')][_0xadaf('0x38')];_0x20f4bb+=0x1){socket['emit'](_0xadaf('0xbb'),{'UserId':_0x46d2d1[_0xadaf('0x31')]['ids'][_0x20f4bb],'SmsAccountId':_0x46d2d1[_0xadaf('0x47')]['id']});}}else{socket['emit'](_0xadaf('0xbb'),{'UserId':_0x46d2d1[_0xadaf('0x31')]['ids'],'SmsAccountId':_0x46d2d1[_0xadaf('0x47')]['id']});}});}})['then'](respondWithStatusCode(_0x1c7b80,null))['catch'](handleError(_0x1c7b80,null));};exports[_0xadaf('0xbc')]=function(_0x4481f9,_0x2f4f56,_0x375f0c){var _0x554b4c={};var _0x5455b3={};var _0x3aad86;var _0x7c4ca8;return db[_0xadaf('0x2d')][_0xadaf('0x50')]({'where':{'id':_0x4481f9['params']['id']}})[_0xadaf('0x14')](handleEntityNotFound(_0x2f4f56,null))[_0xadaf('0x14')](function(_0x3ed4a5){if(_0x3ed4a5){_0x3aad86=_0x3ed4a5;_0x5455b3[_0xadaf('0x2f')]=_[_0xadaf('0x30')](db[_0xadaf('0xa0')][_0xadaf('0x2e')]);_0x5455b3[_0xadaf('0x31')]=_[_0xadaf('0x30')](_0x4481f9[_0xadaf('0x31')]);_0x5455b3[_0xadaf('0x34')]=_['intersection'](_0x5455b3[_0xadaf('0x2f')],_0x5455b3[_0xadaf('0x31')]);_0x554b4c['attributes']=_['intersection'](_0x5455b3[_0xadaf('0x2f')],qs['fields'](_0x4481f9['query']['fields']));_0x554b4c[_0xadaf('0x36')]=_0x554b4c[_0xadaf('0x36')]['length']?_0x554b4c[_0xadaf('0x36')]:_0x5455b3[_0xadaf('0x2f')];_0x554b4c[_0xadaf('0x51')]=qs[_0xadaf('0x3b')](_0x4481f9['query'][_0xadaf('0x3b')]);_0x554b4c['where']=qs[_0xadaf('0x34')](_[_0xadaf('0x52')](_0x4481f9[_0xadaf('0x31')],_0x5455b3[_0xadaf('0x34')]));if(_0x4481f9['query'][_0xadaf('0x3f')]){_0x554b4c[_0xadaf('0x3c')]=_['merge'](_0x554b4c['where'],{'$or':_['map'](_0x554b4c[_0xadaf('0x36')],function(_0x54cd76){var _0x4cfefb={};_0x4cfefb[_0x54cd76]={'$like':'%'+_0x4481f9[_0xadaf('0x31')][_0xadaf('0x3f')]+'%'};return _0x4cfefb;})});}_0x554b4c=_['merge']({},_0x554b4c,_0x4481f9['options']);return _0x3aad86[_0xadaf('0xbc')](_0x554b4c);}})[_0xadaf('0x14')](function(_0x589d87){if(_0x589d87){_0x7c4ca8=_0x589d87[_0xadaf('0x38')];if(!_0x4481f9['query'][_0xadaf('0x39')](_0xadaf('0x3a'))){_0x554b4c['limit']=qs[_0xadaf('0x23')](_0x4481f9[_0xadaf('0x31')][_0xadaf('0x23')]);_0x554b4c[_0xadaf('0x22')]=qs['offset'](_0x4481f9[_0xadaf('0x31')][_0xadaf('0x22')]);}return _0x3aad86[_0xadaf('0xbc')](_0x554b4c);}})[_0xadaf('0x14')](function(_0x5886f3){if(_0x5886f3){return _0x5886f3?{'count':_0x7c4ca8,'rows':_0x5886f3}:null;}})[_0xadaf('0x14')](respondWithResult(_0x2f4f56,null))[_0xadaf('0x1e')](handleError(_0x2f4f56,null));};
\ No newline at end of file
+var _0xaf6b=['isArray','userSmsAccount:remove','getAgents','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','./smsAccount.socket','jayson/promise','client','http','request','then','info','request\x20sent','SmsAccount,\x20%s,\x20%s,\x20%s','error','SmsAccount,\x20%s,\x20%s','message','result','catch','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','destroy','stack','name','send','SmsAccount','keys','dateStart','query','dateEnd','intersection','model','attributes','fields','length','nolimit','sort','pick','add','day','merge','where','filter','map','options','includeAll','include','findAll','show','params','filters','find','create','update','body','describe','addDisposition','SmsAccountId','Disposition','getDispositions','findOne','rawAttributes','hasOwnProperty','order','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','rows','removeAnswers','sms','SmsApplication','Applications','account','orderBy','priority','asc','Sequelize','no\x20available\x20attributes','difference','createdAt','updatedAt','CompanyId','ListId','mobile','type','twilio','from','From','Body','messageId','MessageSid','text','connectel','clicksend','plivo','Text','MessageUUID','isNil','ValidationError','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmContact','Contacts','list','omit','defaults','contact','SmsInteraction','spread','interaction','get','created','autoclose','applications','push','close','*,*,*,*','SmsMessage','ContactId','AttachmentId','User','unshift','waitForTheAssignedAgent','Start','receiveMessage','entity\x20found','debug','SmsAccount,\x20%s,\x20%s,\x20%s,\x20%s','stringify','<?xml\x20version=\x221.0\x22\x20encoding=\x22UTF-8\x22?>\x0a<Response></Response>','addApplications','sequelize','transaction','getApplications','getInteractions','Contact','Owner','fullname','internal','Tags','tag','to\x20is\x20mandatory','CmList','List','out','user','Messages','dataValues','inspect','skebby','skebby_dispatch_id','requestid','statusInt','message_id','status_code','DELIVERED','error_code','addAgents','emit','userSmsAccount:save','removeAgents'];(function(_0xf4bf3b,_0x56b42f){var _0x5b790a=function(_0x459dc8){while(--_0x459dc8){_0xf4bf3b['push'](_0xf4bf3b['shift']());}};_0x5b790a(++_0x56b42f);}(_0xaf6b,0x18b));var _0xbaf6=function(_0x34daa0,_0xca7ed4){_0x34daa0=_0x34daa0-0x0;var _0x19ab23=_0xaf6b[_0x34daa0];return _0x19ab23;};'use strict';var jsonpatch=require(_0xbaf6('0x0'));var rp=require(_0xbaf6('0x1'));var moment=require(_0xbaf6('0x2'));var BPromise=require(_0xbaf6('0x3'));var Mustache=require(_0xbaf6('0x4'));var util=require(_0xbaf6('0x5'));var path=require(_0xbaf6('0x6'));var sox=require('sox');var csv=require(_0xbaf6('0x7'));var ejs=require(_0xbaf6('0x8'));var fs=require('fs');var _=require(_0xbaf6('0x9'));var squel=require(_0xbaf6('0xa'));var crypto=require(_0xbaf6('0xb'));var jsforce=require(_0xbaf6('0xc'));var deskjs=require(_0xbaf6('0xd'));var toCsv=require(_0xbaf6('0x7'));var querystring=require(_0xbaf6('0xe'));var Papa=require(_0xbaf6('0xf'));var qs=require(_0xbaf6('0x10'));var logger=require(_0xbaf6('0x11'))(_0xbaf6('0x12'));var utils=require(_0xbaf6('0x13'));var config=require(_0xbaf6('0x14'));var db=require(_0xbaf6('0x15'))['db'];var socket=require(_0xbaf6('0x16'))({'host':'localhost','port':0x18eb});require(_0xbaf6('0x17'))['register'](socket);var jayson=require(_0xbaf6('0x18'));var client=jayson[_0xbaf6('0x19')][_0xbaf6('0x1a')]({'port':0x232c});function respondWithRpcPromise(_0x539259,_0x5725fb,_0x5884e4,_0x51044d){return new BPromise(function(_0x72be1b,_0x54d207){var _0x3f7049=_0x51044d||client;return _0x3f7049[_0xbaf6('0x1b')](_0x539259,_0x5884e4)[_0xbaf6('0x1c')](function(_0x1bcca7){logger[_0xbaf6('0x1d')]('SmsAccount,\x20%s,\x20%s',_0x5725fb,_0xbaf6('0x1e'));logger['debug'](_0xbaf6('0x1f'),_0x5725fb,_0xbaf6('0x1e'),JSON['stringify'](_0x1bcca7));if(_0x1bcca7[_0xbaf6('0x20')]){if(_0x1bcca7[_0xbaf6('0x20')]['code']===0x1f4){logger[_0xbaf6('0x20')](_0xbaf6('0x21'),_0x5725fb,_0x1bcca7[_0xbaf6('0x20')][_0xbaf6('0x22')]);return _0x54d207(_0x1bcca7[_0xbaf6('0x20')]['message']);}logger['error'](_0xbaf6('0x21'),_0x5725fb,_0x1bcca7[_0xbaf6('0x20')][_0xbaf6('0x22')]);return _0x72be1b(_0x1bcca7[_0xbaf6('0x20')]['message']);}else{logger[_0xbaf6('0x1d')](_0xbaf6('0x21'),_0x5725fb,_0xbaf6('0x1e'));_0x72be1b(_0x1bcca7[_0xbaf6('0x23')]['message']);}})[_0xbaf6('0x24')](function(_0x328d24){logger[_0xbaf6('0x20')](_0xbaf6('0x21'),_0x5725fb,_0x328d24);_0x54d207(_0x328d24);});});}function respondWithStatusCode(_0x1b2b2f,_0x2e3bd7){_0x2e3bd7=_0x2e3bd7||0xcc;return function(_0x36aab0){if(_0x36aab0){return _0x1b2b2f[_0xbaf6('0x25')](_0x2e3bd7);}return _0x1b2b2f['status'](_0x2e3bd7)[_0xbaf6('0x26')]();};}function respondWithResult(_0x109722,_0x6aec98){_0x6aec98=_0x6aec98||0xc8;return function(_0x303947){if(_0x303947){return _0x109722[_0xbaf6('0x27')](_0x6aec98)[_0xbaf6('0x28')](_0x303947);}};}function respondWithFilteredResult(_0x145f74,_0x16828d){return function(_0x3f42af){if(_0x3f42af){var _0x5ab362=_0x3f42af[_0xbaf6('0x29')],_0x118b8a=_0x16828d[_0xbaf6('0x2a')],_0x3fc70e=_0x16828d['offset']+_0x16828d[_0xbaf6('0x2b')],_0x5dff21;if(_0x3fc70e>=_0x5ab362){_0x3fc70e=_0x5ab362;_0x5dff21=0xc8;}else{_0x5dff21=0xce;}_0x145f74[_0xbaf6('0x27')](_0x5dff21);return _0x145f74[_0xbaf6('0x2c')](_0xbaf6('0x2d'),_0x118b8a+'-'+_0x3fc70e+'/'+_0x5ab362)[_0xbaf6('0x28')](_0x3f42af);}return null;};}function patchUpdates(_0x205494){return function(_0x26662e){try{jsonpatch[_0xbaf6('0x2e')](_0x26662e,_0x205494,!![]);}catch(_0x3a4539){return BPromise[_0xbaf6('0x2f')](_0x3a4539);}return _0x26662e[_0xbaf6('0x30')]();};}function saveUpdates(_0x53a8df,_0x369824){return function(_0x589e61){if(_0x589e61){return _0x589e61['update'](_0x53a8df)[_0xbaf6('0x1c')](function(_0x409ed7){return _0x409ed7;});}return null;};}function removeEntity(_0x4ea474,_0x5e03d3){return function(_0x249fd9){if(_0x249fd9){return _0x249fd9[_0xbaf6('0x31')]()[_0xbaf6('0x1c')](function(){_0x4ea474[_0xbaf6('0x27')](0xcc)[_0xbaf6('0x26')]();});}};}function handleEntityNotFound(_0x504fb4,_0x1ff2fd){return function(_0x82f936){if(!_0x82f936){_0x504fb4[_0xbaf6('0x25')](0x194);}return _0x82f936;};}function handleError(_0x285cf2,_0x55c258){_0x55c258=_0x55c258||0x1f4;return function(_0x3756bc){logger[_0xbaf6('0x20')](_0x3756bc[_0xbaf6('0x32')]);if(_0x3756bc[_0xbaf6('0x33')]){delete _0x3756bc[_0xbaf6('0x33')];}_0x285cf2[_0xbaf6('0x27')](_0x55c258)[_0xbaf6('0x34')](_0x3756bc);};}exports['index']=function(_0xe0fa30,_0x1014a9){var _0x5ec86b={},_0x38979={},_0x1b25f9={'count':0x0,'rows':[]};var _0x1fd1d3=db[_0xbaf6('0x35')]['rawAttributes'];_0x38979['model']=_[_0xbaf6('0x36')](_0x1fd1d3);var _0x5769e9={'dateStart':_0xe0fa30['query'][_0xbaf6('0x37')],'dateEnd':_0xe0fa30[_0xbaf6('0x38')][_0xbaf6('0x39')]};delete _0xe0fa30[_0xbaf6('0x38')][_0xbaf6('0x37')];delete _0xe0fa30[_0xbaf6('0x38')][_0xbaf6('0x39')];_0x38979[_0xbaf6('0x38')]=_['keys'](_0xe0fa30[_0xbaf6('0x38')]);_0x38979['filters']=_[_0xbaf6('0x3a')](_0x38979[_0xbaf6('0x3b')],_0x38979[_0xbaf6('0x38')]);_0x5ec86b[_0xbaf6('0x3c')]=_[_0xbaf6('0x3a')](_0x38979[_0xbaf6('0x3b')],qs['fields'](_0xe0fa30[_0xbaf6('0x38')][_0xbaf6('0x3d')]));_0x5ec86b[_0xbaf6('0x3c')]=_0x5ec86b[_0xbaf6('0x3c')][_0xbaf6('0x3e')]?_0x5ec86b[_0xbaf6('0x3c')]:_0x38979[_0xbaf6('0x3b')];if(!_0xe0fa30[_0xbaf6('0x38')]['hasOwnProperty'](_0xbaf6('0x3f'))){_0x5ec86b['limit']=qs[_0xbaf6('0x2b')](_0xe0fa30[_0xbaf6('0x38')][_0xbaf6('0x2b')]);_0x5ec86b[_0xbaf6('0x2a')]=qs[_0xbaf6('0x2a')](_0xe0fa30[_0xbaf6('0x38')][_0xbaf6('0x2a')]);}_0x5ec86b['order']=qs[_0xbaf6('0x40')](_0xe0fa30[_0xbaf6('0x38')]['sort']);_0x5ec86b['where']=qs['filters'](_[_0xbaf6('0x41')](_0xe0fa30[_0xbaf6('0x38')],_0x38979['filters']));if(_0x5769e9[_0xbaf6('0x37')]){if(_0x5769e9['dateEnd']){_0x5769e9[_0xbaf6('0x39')]=moment(_0x5769e9[_0xbaf6('0x39')])[_0xbaf6('0x42')](0x1,_0xbaf6('0x43'));}else{_0x5769e9[_0xbaf6('0x39')]=moment(_0x5769e9[_0xbaf6('0x37')])['add'](0x1,'day');}_[_0xbaf6('0x44')](_0x5ec86b[_0xbaf6('0x45')],{'createdAt':{'$gte':_0x5769e9[_0xbaf6('0x37')],'$lte':_0x5769e9[_0xbaf6('0x39')]}});}if(_0xe0fa30[_0xbaf6('0x38')][_0xbaf6('0x46')]){_0x5ec86b['where']=_[_0xbaf6('0x44')](_0x5ec86b[_0xbaf6('0x45')],{'$or':_[_0xbaf6('0x47')](_0x5ec86b[_0xbaf6('0x3c')],function(_0x499c6b){var _0x8a2786={};_0x8a2786[_0x499c6b]={'$like':'%'+_0xe0fa30[_0xbaf6('0x38')][_0xbaf6('0x46')]+'%'};return _0x8a2786;})});}_0x5ec86b=_[_0xbaf6('0x44')]({},_0x5ec86b,_0xe0fa30[_0xbaf6('0x48')]);var _0x46a858={'where':_0x5ec86b['where']};return db[_0xbaf6('0x35')][_0xbaf6('0x29')](_0x46a858)[_0xbaf6('0x1c')](function(_0x138f86){_0x1b25f9[_0xbaf6('0x29')]=_0x138f86;if(_0xe0fa30[_0xbaf6('0x38')][_0xbaf6('0x49')]){_0x5ec86b[_0xbaf6('0x4a')]=[{'all':!![]}];}return db['SmsAccount'][_0xbaf6('0x4b')](_0x5ec86b);})[_0xbaf6('0x1c')](function(_0x550ca4){_0x1b25f9['rows']=_0x550ca4;return _0x1b25f9;})[_0xbaf6('0x1c')](respondWithFilteredResult(_0x1014a9,_0x5ec86b))[_0xbaf6('0x24')](handleError(_0x1014a9,null));};exports[_0xbaf6('0x4c')]=function(_0x162efa,_0x5e06e8){var _0x59a25f={'raw':![],'where':{'id':_0x162efa[_0xbaf6('0x4d')]['id']}},_0x1b2d6f={};_0x1b2d6f['model']=_[_0xbaf6('0x36')](db[_0xbaf6('0x35')]['rawAttributes']);_0x1b2d6f[_0xbaf6('0x38')]=_[_0xbaf6('0x36')](_0x162efa[_0xbaf6('0x38')]);_0x1b2d6f[_0xbaf6('0x4e')]=_['intersection'](_0x1b2d6f[_0xbaf6('0x3b')],_0x1b2d6f[_0xbaf6('0x38')]);_0x59a25f['attributes']=_[_0xbaf6('0x3a')](_0x1b2d6f['model'],qs[_0xbaf6('0x3d')](_0x162efa[_0xbaf6('0x38')]['fields']));_0x59a25f[_0xbaf6('0x3c')]=_0x59a25f[_0xbaf6('0x3c')][_0xbaf6('0x3e')]?_0x59a25f[_0xbaf6('0x3c')]:_0x1b2d6f['model'];if(_0x162efa[_0xbaf6('0x38')][_0xbaf6('0x49')]){_0x59a25f[_0xbaf6('0x4a')]=[{'all':!![]}];}_0x59a25f=_[_0xbaf6('0x44')]({},_0x59a25f,_0x162efa[_0xbaf6('0x48')]);return db['SmsAccount'][_0xbaf6('0x4f')](_0x59a25f)[_0xbaf6('0x1c')](handleEntityNotFound(_0x5e06e8,null))[_0xbaf6('0x1c')](respondWithResult(_0x5e06e8,null))[_0xbaf6('0x24')](handleError(_0x5e06e8,null));};exports[_0xbaf6('0x50')]=function(_0x32954b,_0x36d1e4){return db[_0xbaf6('0x35')][_0xbaf6('0x50')](_0x32954b['body'],{})[_0xbaf6('0x1c')](respondWithResult(_0x36d1e4,0xc9))[_0xbaf6('0x24')](handleError(_0x36d1e4,null));};exports[_0xbaf6('0x51')]=function(_0x213a86,_0x37e0b5){if(_0x213a86[_0xbaf6('0x52')]['id']){delete _0x213a86[_0xbaf6('0x52')]['id'];}return db[_0xbaf6('0x35')][_0xbaf6('0x4f')]({'where':{'id':_0x213a86[_0xbaf6('0x4d')]['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x37e0b5,null))[_0xbaf6('0x1c')](saveUpdates(_0x213a86[_0xbaf6('0x52')],null))[_0xbaf6('0x1c')](respondWithResult(_0x37e0b5,null))['catch'](handleError(_0x37e0b5,null));};exports[_0xbaf6('0x31')]=function(_0x5d8c24,_0x180a2e){return db[_0xbaf6('0x35')][_0xbaf6('0x4f')]({'where':{'id':_0x5d8c24['params']['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x180a2e,null))[_0xbaf6('0x1c')](removeEntity(_0x180a2e,null))[_0xbaf6('0x24')](handleError(_0x180a2e,null));};exports[_0xbaf6('0x53')]=function(_0x23ae2d,_0x21e54f){return db[_0xbaf6('0x35')][_0xbaf6('0x53')]()[_0xbaf6('0x1c')](respondWithResult(_0x21e54f,null))[_0xbaf6('0x24')](handleError(_0x21e54f,null));};exports[_0xbaf6('0x54')]=function(_0x787f84,_0x1b18d2,_0x402350){if(_0x787f84[_0xbaf6('0x52')]['id']){delete _0x787f84['body']['id'];}return db[_0xbaf6('0x35')][_0xbaf6('0x4f')]({'where':{'id':_0x787f84[_0xbaf6('0x4d')]['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x1b18d2,null))[_0xbaf6('0x1c')](function(_0x3c2b81){if(_0x3c2b81){_0x787f84[_0xbaf6('0x52')][_0xbaf6('0x55')]=_0x3c2b81['id'];return db[_0xbaf6('0x56')][_0xbaf6('0x50')](_0x787f84['body']);}})[_0xbaf6('0x1c')](respondWithResult(_0x1b18d2,null))[_0xbaf6('0x24')](handleError(_0x1b18d2,null));};exports[_0xbaf6('0x57')]=function(_0x1c7f09,_0x3e4ae8,_0x3d54b9){var _0x51dee8={'raw':![],'where':{}};var _0x2c769c={};var _0x41af62={'count':0x0,'rows':[]};return db[_0xbaf6('0x35')][_0xbaf6('0x58')]({'where':{'id':_0x1c7f09[_0xbaf6('0x4d')]['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x3e4ae8,null))[_0xbaf6('0x1c')](function(_0x43f198){if(_0x43f198){_0x2c769c[_0xbaf6('0x3b')]=_['keys'](db[_0xbaf6('0x56')][_0xbaf6('0x59')]);_0x2c769c[_0xbaf6('0x38')]=_[_0xbaf6('0x36')](_0x1c7f09['query']);_0x2c769c[_0xbaf6('0x4e')]=_['intersection'](_0x2c769c[_0xbaf6('0x3b')],_0x2c769c[_0xbaf6('0x38')]);_0x51dee8[_0xbaf6('0x3c')]=_[_0xbaf6('0x3a')](_0x2c769c[_0xbaf6('0x3b')],qs[_0xbaf6('0x3d')](_0x1c7f09['query'][_0xbaf6('0x3d')]));_0x51dee8['attributes']=_0x51dee8[_0xbaf6('0x3c')][_0xbaf6('0x3e')]?_0x51dee8[_0xbaf6('0x3c')]:_0x2c769c[_0xbaf6('0x3b')];if(!_0x1c7f09[_0xbaf6('0x38')][_0xbaf6('0x5a')](_0xbaf6('0x3f'))){_0x51dee8[_0xbaf6('0x2b')]=qs[_0xbaf6('0x2b')](_0x1c7f09['query'][_0xbaf6('0x2b')]);_0x51dee8[_0xbaf6('0x2a')]=qs['offset'](_0x1c7f09[_0xbaf6('0x38')][_0xbaf6('0x2a')]);}_0x51dee8[_0xbaf6('0x5b')]=qs[_0xbaf6('0x40')](_0x1c7f09[_0xbaf6('0x38')]['sort']);_0x51dee8[_0xbaf6('0x45')]=qs['filters'](_[_0xbaf6('0x41')](_0x1c7f09[_0xbaf6('0x38')],_0x2c769c['filters']));_0x51dee8['where']['SmsAccountId']=_0x43f198['id'];if(_0x1c7f09['query'][_0xbaf6('0x46')]){_0x51dee8[_0xbaf6('0x45')]=_['merge'](_0x51dee8[_0xbaf6('0x45')],{'$or':_[_0xbaf6('0x47')](_0x51dee8['attributes'],function(_0x3dd6ab){var _0x270dd7={};_0x270dd7[_0x3dd6ab]={'$like':'%'+_0x1c7f09['query'][_0xbaf6('0x46')]+'%'};return _0x270dd7;})});}_0x51dee8=_[_0xbaf6('0x44')]({},_0x51dee8,_0x1c7f09[_0xbaf6('0x48')]);return db[_0xbaf6('0x56')][_0xbaf6('0x29')]({'where':_0x51dee8[_0xbaf6('0x45')]})[_0xbaf6('0x1c')](function(_0x5b2c2f){_0x41af62[_0xbaf6('0x29')]=_0x5b2c2f;if(_0x1c7f09[_0xbaf6('0x38')][_0xbaf6('0x49')]){_0x51dee8[_0xbaf6('0x4a')]=[{'all':!![]}];}return db[_0xbaf6('0x56')][_0xbaf6('0x4b')](_0x51dee8);})['then'](function(_0x177aa1){_0x41af62['rows']=_0x177aa1;return _0x41af62;});}})['then'](respondWithFilteredResult(_0x3e4ae8,_0x51dee8))[_0xbaf6('0x24')](handleError(_0x3e4ae8,null));};exports[_0xbaf6('0x5c')]=function(_0x18ea51,_0x15ac99,_0x4b8e11){var _0x59cd25;return db[_0xbaf6('0x35')]['find']({'where':{'id':_0x18ea51['params']['id']}})['then'](handleEntityNotFound(_0x15ac99,null))[_0xbaf6('0x1c')](function(_0x51758b){if(_0x51758b){return _0x51758b['removeDispositions'](_0x18ea51[_0xbaf6('0x38')][_0xbaf6('0x5d')]);}})[_0xbaf6('0x1c')](respondWithStatusCode(_0x15ac99,null))[_0xbaf6('0x24')](handleError(_0x15ac99,null));};exports[_0xbaf6('0x5e')]=function(_0x3abe26,_0x1dc773,_0x52ed4d){if(_0x3abe26['body']['id']){delete _0x3abe26[_0xbaf6('0x52')]['id'];}return db[_0xbaf6('0x35')]['find']({'where':{'id':_0x3abe26['params']['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x1dc773,null))[_0xbaf6('0x1c')](function(_0x73c1c8){if(_0x73c1c8){_0x3abe26[_0xbaf6('0x52')][_0xbaf6('0x55')]=_0x73c1c8['id'];return db[_0xbaf6('0x5f')]['create'](_0x3abe26[_0xbaf6('0x52')]);}})['then'](respondWithResult(_0x1dc773,null))[_0xbaf6('0x24')](handleError(_0x1dc773,null));};exports[_0xbaf6('0x60')]=function(_0xd1d145,_0x47872f,_0x4b7a43){var _0xc0cf00={'raw':![],'where':{}};var _0x489dcf={};var _0x2aed74={'count':0x0,'rows':[]};return db[_0xbaf6('0x35')][_0xbaf6('0x58')]({'where':{'id':_0xd1d145[_0xbaf6('0x4d')]['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x47872f,null))[_0xbaf6('0x1c')](function(_0x4cd1d4){if(_0x4cd1d4){_0x489dcf['model']=_['keys'](db[_0xbaf6('0x5f')][_0xbaf6('0x59')]);_0x489dcf[_0xbaf6('0x38')]=_[_0xbaf6('0x36')](_0xd1d145['query']);_0x489dcf['filters']=_[_0xbaf6('0x3a')](_0x489dcf[_0xbaf6('0x3b')],_0x489dcf[_0xbaf6('0x38')]);_0xc0cf00[_0xbaf6('0x3c')]=_[_0xbaf6('0x3a')](_0x489dcf[_0xbaf6('0x3b')],qs[_0xbaf6('0x3d')](_0xd1d145[_0xbaf6('0x38')]['fields']));_0xc0cf00['attributes']=_0xc0cf00[_0xbaf6('0x3c')][_0xbaf6('0x3e')]?_0xc0cf00['attributes']:_0x489dcf[_0xbaf6('0x3b')];if(!_0xd1d145[_0xbaf6('0x38')]['hasOwnProperty'](_0xbaf6('0x3f'))){_0xc0cf00[_0xbaf6('0x2b')]=qs[_0xbaf6('0x2b')](_0xd1d145[_0xbaf6('0x38')][_0xbaf6('0x2b')]);_0xc0cf00[_0xbaf6('0x2a')]=qs[_0xbaf6('0x2a')](_0xd1d145[_0xbaf6('0x38')][_0xbaf6('0x2a')]);}_0xc0cf00[_0xbaf6('0x5b')]=qs[_0xbaf6('0x40')](_0xd1d145[_0xbaf6('0x38')][_0xbaf6('0x40')]);_0xc0cf00[_0xbaf6('0x45')]=qs[_0xbaf6('0x4e')](_['pick'](_0xd1d145[_0xbaf6('0x38')],_0x489dcf['filters']));_0xc0cf00[_0xbaf6('0x45')]['SmsAccountId']=_0x4cd1d4['id'];if(_0xd1d145[_0xbaf6('0x38')][_0xbaf6('0x46')]){_0xc0cf00[_0xbaf6('0x45')]=_[_0xbaf6('0x44')](_0xc0cf00['where'],{'$or':_[_0xbaf6('0x47')](_0xc0cf00[_0xbaf6('0x3c')],function(_0x4c20e0){var _0x168ca5={};_0x168ca5[_0x4c20e0]={'$like':'%'+_0xd1d145[_0xbaf6('0x38')][_0xbaf6('0x46')]+'%'};return _0x168ca5;})});}_0xc0cf00=_[_0xbaf6('0x44')]({},_0xc0cf00,_0xd1d145[_0xbaf6('0x48')]);return db[_0xbaf6('0x5f')]['count']({'where':_0xc0cf00[_0xbaf6('0x45')]})[_0xbaf6('0x1c')](function(_0x1ff548){_0x2aed74[_0xbaf6('0x29')]=_0x1ff548;if(_0xd1d145[_0xbaf6('0x38')][_0xbaf6('0x49')]){_0xc0cf00[_0xbaf6('0x4a')]=[{'all':!![]}];}return db[_0xbaf6('0x5f')][_0xbaf6('0x4b')](_0xc0cf00);})[_0xbaf6('0x1c')](function(_0x261dfd){_0x2aed74[_0xbaf6('0x61')]=_0x261dfd;return _0x2aed74;});}})['then'](respondWithFilteredResult(_0x47872f,_0xc0cf00))[_0xbaf6('0x24')](handleError(_0x47872f,null));};exports[_0xbaf6('0x62')]=function(_0x3394db,_0x2abbe1,_0x5e4bc0){var _0x3270ca;return db['SmsAccount'][_0xbaf6('0x4f')]({'where':{'id':_0x3394db['params']['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x2abbe1,null))[_0xbaf6('0x1c')](function(_0x345ca6){if(_0x345ca6){return _0x345ca6['removeAnswers'](_0x3394db['query']['ids']);}})[_0xbaf6('0x1c')](respondWithStatusCode(_0x2abbe1,null))[_0xbaf6('0x24')](handleError(_0x2abbe1,null));};exports['notify']=function(_0x2961fe,_0x5cb47b,_0x2fab87){var _0x49b5b0={'channel':_0xbaf6('0x63')};var _0x1807c6=[];var _0x455853=[];var _0xe63a94={};return db[_0xbaf6('0x35')][_0xbaf6('0x4f')]({'where':{'id':_0x2961fe[_0xbaf6('0x4d')]['id']},'include':[{'model':db[_0xbaf6('0x64')],'as':_0xbaf6('0x65')}]})[_0xbaf6('0x1c')](handleEntityNotFound(_0x5cb47b,null))['then'](function(_0xeb6b85){_0x49b5b0[_0xbaf6('0x66')]=_0xeb6b85;_0x49b5b0['applications']=_[_0xbaf6('0x67')](_0xeb6b85[_0xbaf6('0x65')],[_0xbaf6('0x68')],[_0xbaf6('0x69')]);if(_0x49b5b0[_0xbaf6('0x66')]['Applications']){delete _0x49b5b0['account'][_0xbaf6('0x65')];}return db['CmContact'][_0xbaf6('0x53')]();})[_0xbaf6('0x1c')](function(_0x232429){if(!_0x232429){throw new db[(_0xbaf6('0x6a'))]['ValidationError'](_0xbaf6('0x6b'));}_0x1807c6=_[_0xbaf6('0x6c')](_[_0xbaf6('0x36')](_0x232429),[_0xbaf6('0x6d'),_0xbaf6('0x6e')]);_0x455853=_['difference'](_[_0xbaf6('0x36')](_0x232429),[_0xbaf6('0x6d'),_0xbaf6('0x6e'),_0xbaf6('0x6f'),_0xbaf6('0x70')]);_0x49b5b0[_0xbaf6('0x52')]={'mapKey':_0xbaf6('0x71')};if(_0x49b5b0['account']['type']){switch(_0x49b5b0[_0xbaf6('0x66')][_0xbaf6('0x72')]){case _0xbaf6('0x73'):_0x49b5b0['body'][_0xbaf6('0x74')]=_0x2961fe[_0xbaf6('0x52')][_0xbaf6('0x75')];_0x49b5b0[_0xbaf6('0x52')]['body']=_0x2961fe['body'][_0xbaf6('0x76')];_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x77')]=_0x2961fe[_0xbaf6('0x52')][_0xbaf6('0x78')];break;case'skebby':_0x49b5b0['body'][_0xbaf6('0x74')]=_0x2961fe[_0xbaf6('0x52')]['sender'];_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x52')]=_0x2961fe[_0xbaf6('0x52')][_0xbaf6('0x79')];break;case _0xbaf6('0x7a'):_0x49b5b0['body'][_0xbaf6('0x74')]=_0x2961fe[_0xbaf6('0x52')][_0xbaf6('0x74')];_0x49b5b0['body'][_0xbaf6('0x52')]=_0x2961fe[_0xbaf6('0x52')]['message'];break;case _0xbaf6('0x7b'):_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x74')]=_0x2961fe[_0xbaf6('0x52')][_0xbaf6('0x74')];_0x49b5b0['body']['body']=_0x2961fe[_0xbaf6('0x52')][_0xbaf6('0x52')];_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x77')]=_0x2961fe[_0xbaf6('0x52')]['message_id'];break;case _0xbaf6('0x7c'):_0x49b5b0[_0xbaf6('0x52')]['from']=_0x2961fe[_0xbaf6('0x52')][_0xbaf6('0x75')];_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x52')]=_0x2961fe[_0xbaf6('0x52')][_0xbaf6('0x7d')];_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x77')]=_0x2961fe[_0xbaf6('0x52')][_0xbaf6('0x7e')];break;}}if(_0x49b5b0[_0xbaf6('0x52')]['id']){delete _0x49b5b0['body']['id'];}if(_[_0xbaf6('0x7f')](_0x49b5b0['body'][_0xbaf6('0x74')])){throw new db[(_0xbaf6('0x6a'))][(_0xbaf6('0x80'))]('from\x20is\x20mandatory');}if(_[_0xbaf6('0x7f')](_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x52')])||_0x49b5b0['body']['body']===''){throw new db['Sequelize'][(_0xbaf6('0x80'))]('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0xbaf6('0x7f')](_0x49b5b0['body'][_0xbaf6('0x81')])){throw new db['Sequelize']['ValidationError'](_0xbaf6('0x82')+_0x455853);}if(!_[_0xbaf6('0x83')](_0x455853,_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x81')])){throw new db[(_0xbaf6('0x6a'))][(_0xbaf6('0x80'))](_0xbaf6('0x84')+_0x455853);}_0xe63a94[_0x49b5b0[_0xbaf6('0x52')]['mapKey']]=_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x74')];return db['CmList'][_0xbaf6('0x4f')]({'where':{'id':_0x49b5b0['account'][_0xbaf6('0x70')]},'include':[{'model':db[_0xbaf6('0x85')],'as':_0xbaf6('0x86'),'where':_0xe63a94,'limit':0x1,'order':[[_0xbaf6('0x6e'),'DESC']]}]});})[_0xbaf6('0x1c')](handleEntityNotFound(_0x5cb47b,null))[_0xbaf6('0x1c')](function(_0x39d113){if(_0x39d113){_0x49b5b0[_0xbaf6('0x87')]=_[_0xbaf6('0x88')](_0x39d113,[_0xbaf6('0x86')]);if(_0x39d113[_0xbaf6('0x86')][_0xbaf6('0x3e')]){return _0x39d113[_0xbaf6('0x86')][0x0];}var _0x1f6a14=_[_0xbaf6('0x89')](_0x49b5b0[_0xbaf6('0x52')],{'firstName':_0x49b5b0['body'][_0xbaf6('0x74')],'ListId':_0x39d113['id']});_0x1f6a14[_0x49b5b0['body']['mapKey']]=_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x74')];return db[_0xbaf6('0x85')]['create'](_0x1f6a14,{'fields':_0x1807c6,'raw':!![]});}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x5cb47b,null))[_0xbaf6('0x1c')](function(_0x12af09){if(_0x12af09){_0x49b5b0[_0xbaf6('0x8a')]=_0x12af09;var _0x386716={'ContactId':_0x12af09['id'],'phone':_0x49b5b0['body'][_0xbaf6('0x74')],'SmsAccountId':_0x2961fe[_0xbaf6('0x4d')]['id']};var _0x2e98f7={'ContactId':_0x12af09['id'],'SmsAccountId':_0x2961fe[_0xbaf6('0x4d')]['id'],'closed':![]};return db[_0xbaf6('0x8b')]['find']({'where':_0x2e98f7})[_0xbaf6('0x1c')](function(_0x43e5b7){if(_0x43e5b7){return[_0x43e5b7,![]];}return db['SmsInteraction']['create'](_0x386716)['then'](function(_0x2dde3d){return[_0x2dde3d,!![]];});});}})[_0xbaf6('0x8c')](function(_0x5c4935,_0xf0984f){_0x49b5b0[_0xbaf6('0x8d')]=_0x5c4935[_0xbaf6('0x8e')]({'plain':!![]});_0x49b5b0[_0xbaf6('0x8d')][_0xbaf6('0x8f')]=![];if(_0xf0984f){if(_0x49b5b0[_0xbaf6('0x66')][_0xbaf6('0x90')]){_0x49b5b0[_0xbaf6('0x91')][_0xbaf6('0x92')]({'id':0x0,'priority':_0x49b5b0[_0xbaf6('0x91')][_0xbaf6('0x3e')]+0x1,'app':_0xbaf6('0x93'),'appdata':'unmanaged','interval':_0xbaf6('0x94')});}_0x49b5b0[_0xbaf6('0x8d')]['created']=!![];}return db[_0xbaf6('0x95')][_0xbaf6('0x50')]({'phone':_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x74')],'messageId':_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x77')],'body':_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x52')],'SmsAccountId':_0x2961fe[_0xbaf6('0x4d')]['id'],'SmsInteractionId':_0x5c4935['id'],'direction':'in','ContactId':_0x5c4935[_0xbaf6('0x96')],'AttachmentId':_0x49b5b0[_0xbaf6('0x52')][_0xbaf6('0x97')]});})[_0xbaf6('0x1c')](function(_0x5684e1){_0x49b5b0[_0xbaf6('0x22')]=_0x5684e1;if(_0x49b5b0['interaction']['UserId']){return db[_0xbaf6('0x98')][_0xbaf6('0x4f')]({'attributes':['id',_0xbaf6('0x33')],'where':{'id':_0x49b5b0[_0xbaf6('0x8d')]['UserId']}})['then'](function(_0x436bd3){if(_0x436bd3){_0x49b5b0[_0xbaf6('0x91')][_0xbaf6('0x99')]({'id':0x0,'priority':0x0,'app':'agent','appdata':_0x436bd3[_0xbaf6('0x33')]+','+(_0x49b5b0[_0xbaf6('0x66')][_0xbaf6('0x9a')]||0xa),'interval':_0xbaf6('0x94')});}return respondWithRpcPromise(_0xbaf6('0x9b'),'startRouting',_0x49b5b0);});}return respondWithRpcPromise(_0xbaf6('0x9b'),'startRouting',_0x49b5b0);})[_0xbaf6('0x1c')](function(_0x225c78){if(_0x225c78){var _0x5542c8=0xc8;var _0x3aa581=_0xbaf6('0x9c');logger['info'](_0xbaf6('0x1f'),_0x3aa581,_0x5542c8,_0xbaf6('0x9d'));logger[_0xbaf6('0x9e')](_0xbaf6('0x9f'),_0x3aa581,_0x5542c8,_0xbaf6('0x9d'),JSON[_0xbaf6('0xa0')](_0x225c78));if(_0x49b5b0[_0xbaf6('0x66')][_0xbaf6('0x72')]==='twilio'){return _0x5cb47b[_0xbaf6('0x27')](_0x5542c8)[_0xbaf6('0x2c')]('Content-Type','text/xml')[_0xbaf6('0x34')](_0xbaf6('0xa1'));}else{return _0x5cb47b[_0xbaf6('0x27')](_0x5542c8)[_0xbaf6('0x28')](_0x225c78);}}})[_0xbaf6('0x24')](handleError(_0x5cb47b,null));};exports[_0xbaf6('0xa2')]=function(_0x194e7d,_0x14d554,_0x2ae4a5){return db['SmsAccount']['findOne']({'where':{'id':_0x194e7d[_0xbaf6('0x4d')]['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x14d554,null))[_0xbaf6('0x1c')](function(_0x56a0c3){if(_0x56a0c3){return db[_0xbaf6('0xa3')][_0xbaf6('0xa4')](function(_0x1ec5af){return db[_0xbaf6('0x64')][_0xbaf6('0x31')]({'where':{'SmsAccountId':_0x194e7d[_0xbaf6('0x4d')]['id']},'transaction':_0x1ec5af})[_0xbaf6('0x1c')](function(_0x5abf4e){var _0x133b72=_[_0xbaf6('0x47')](_0x194e7d['body'],function(_0x5bd163){_0x5bd163[_0xbaf6('0x55')]=_0x194e7d['params']['id'];return _0x5bd163;});return db[_0xbaf6('0x64')]['bulkCreate'](_0x133b72,{'transaction':_0x1ec5af});});})['then'](function(){return db[_0xbaf6('0x64')]['findAndCountAll']({'where':{'SmsAccountId':_0x194e7d[_0xbaf6('0x4d')]['id']},'order':_0xbaf6('0x68')});});}})[_0xbaf6('0x1c')](respondWithResult(_0x14d554,null))[_0xbaf6('0x24')](handleError(_0x14d554,null));};exports['getApplications']=function(_0xd5e672,_0x466f95,_0xdd281c){var _0x558c8a={};var _0x476218={};var _0x2220a1;var _0x2921fa;return db['SmsAccount'][_0xbaf6('0x58')]({'where':{'id':_0xd5e672[_0xbaf6('0x4d')]['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x466f95,null))[_0xbaf6('0x1c')](function(_0x1f454e){if(_0x1f454e){_0x2220a1=_0x1f454e;_0x476218[_0xbaf6('0x3b')]=_[_0xbaf6('0x36')](db[_0xbaf6('0x64')][_0xbaf6('0x59')]);_0x476218[_0xbaf6('0x38')]=_[_0xbaf6('0x36')](_0xd5e672['query']);_0x476218[_0xbaf6('0x4e')]=_[_0xbaf6('0x3a')](_0x476218[_0xbaf6('0x3b')],_0x476218[_0xbaf6('0x38')]);_0x558c8a[_0xbaf6('0x3c')]=_[_0xbaf6('0x3a')](_0x476218[_0xbaf6('0x3b')],qs[_0xbaf6('0x3d')](_0xd5e672[_0xbaf6('0x38')]['fields']));_0x558c8a[_0xbaf6('0x3c')]=_0x558c8a[_0xbaf6('0x3c')][_0xbaf6('0x3e')]?_0x558c8a[_0xbaf6('0x3c')]:_0x476218[_0xbaf6('0x3b')];_0x558c8a[_0xbaf6('0x5b')]=qs[_0xbaf6('0x40')](_0xd5e672[_0xbaf6('0x38')][_0xbaf6('0x40')]);_0x558c8a[_0xbaf6('0x45')]=qs['filters'](_[_0xbaf6('0x41')](_0xd5e672[_0xbaf6('0x38')],_0x476218['filters']));if(_0xd5e672[_0xbaf6('0x38')]['filter']){_0x558c8a['where']=_['merge'](_0x558c8a[_0xbaf6('0x45')],{'$or':_[_0xbaf6('0x47')](_0x558c8a['attributes'],function(_0x35bef6){var _0x19aa93={};_0x19aa93[_0x35bef6]={'$like':'%'+_0xd5e672[_0xbaf6('0x38')][_0xbaf6('0x46')]+'%'};return _0x19aa93;})});}_0x558c8a=_[_0xbaf6('0x44')]({},_0x558c8a,_0xd5e672[_0xbaf6('0x48')]);return _0x2220a1[_0xbaf6('0xa5')](_0x558c8a);}})[_0xbaf6('0x1c')](function(_0xfed1ed){if(_0xfed1ed){_0x2921fa=_0xfed1ed['length'];if(!_0xd5e672[_0xbaf6('0x38')][_0xbaf6('0x5a')](_0xbaf6('0x3f'))){_0x558c8a[_0xbaf6('0x2b')]=qs[_0xbaf6('0x2b')](_0xd5e672[_0xbaf6('0x38')][_0xbaf6('0x2b')]);_0x558c8a['offset']=qs[_0xbaf6('0x2a')](_0xd5e672['query'][_0xbaf6('0x2a')]);}return _0x2220a1[_0xbaf6('0xa5')](_0x558c8a);}})[_0xbaf6('0x1c')](function(_0x2633b4){if(_0x2633b4){return _0x2633b4?{'count':_0x2921fa,'rows':_0x2633b4}:null;}})[_0xbaf6('0x1c')](respondWithResult(_0x466f95,null))[_0xbaf6('0x24')](handleError(_0x466f95,null));};exports[_0xbaf6('0xa6')]=function(_0x293d17,_0x554e4f,_0x3f6ed4){var _0x4a1af7={'raw':![],'where':{}};var _0x4e5305={};var _0x5d229f={'count':0x0,'rows':[]};return db[_0xbaf6('0x35')][_0xbaf6('0x58')]({'where':{'id':_0x293d17[_0xbaf6('0x4d')]['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x554e4f,null))['then'](function(_0xe512e5){if(_0xe512e5){_0x4e5305[_0xbaf6('0x3b')]=_[_0xbaf6('0x36')](db['SmsInteraction'][_0xbaf6('0x59')]);_0x4e5305['query']=_[_0xbaf6('0x36')](_0x293d17['query']);_0x4e5305[_0xbaf6('0x4e')]=_[_0xbaf6('0x3a')](_0x4e5305[_0xbaf6('0x3b')],_0x4e5305['query']);_0x4a1af7[_0xbaf6('0x3c')]=_[_0xbaf6('0x3a')](_0x4e5305[_0xbaf6('0x3b')],qs[_0xbaf6('0x3d')](_0x293d17[_0xbaf6('0x38')][_0xbaf6('0x3d')]));_0x4a1af7[_0xbaf6('0x3c')]=_0x4a1af7['attributes']['length']?_0x4a1af7['attributes']:_0x4e5305['model'];if(!_0x293d17[_0xbaf6('0x38')][_0xbaf6('0x5a')](_0xbaf6('0x3f'))){_0x4a1af7[_0xbaf6('0x2b')]=qs[_0xbaf6('0x2b')](_0x293d17[_0xbaf6('0x38')][_0xbaf6('0x2b')]);_0x4a1af7['offset']=qs['offset'](_0x293d17[_0xbaf6('0x38')]['offset']);}_0x4a1af7[_0xbaf6('0x5b')]=qs[_0xbaf6('0x40')](_0x293d17[_0xbaf6('0x38')][_0xbaf6('0x40')]);_0x4a1af7[_0xbaf6('0x45')]=qs[_0xbaf6('0x4e')](_['pick'](_0x293d17[_0xbaf6('0x38')],_0x4e5305['filters']));_0x4a1af7[_0xbaf6('0x45')]['SmsAccountId']=_0xe512e5['id'];if(_0x293d17[_0xbaf6('0x38')][_0xbaf6('0x46')]){_0x4a1af7['where']=_[_0xbaf6('0x44')](_0x4a1af7[_0xbaf6('0x45')],{'$or':_[_0xbaf6('0x47')](_0x4a1af7['attributes'],function(_0x36cd66){var _0x5938d3={};_0x5938d3[_0x36cd66]={'$like':'%'+_0x293d17[_0xbaf6('0x38')][_0xbaf6('0x46')]+'%'};return _0x5938d3;})});}_0x4a1af7=_[_0xbaf6('0x44')]({},_0x4a1af7,_0x293d17[_0xbaf6('0x48')]);return db[_0xbaf6('0x8b')][_0xbaf6('0x29')]({'where':_0x4a1af7[_0xbaf6('0x45')]})['then'](function(_0x2795c8){_0x5d229f[_0xbaf6('0x29')]=_0x2795c8;if(_0x293d17['query'][_0xbaf6('0x49')]){_0x4a1af7[_0xbaf6('0x4a')]=[{'model':db[_0xbaf6('0x85')],'as':_0xbaf6('0xa7'),'required':![]},{'model':db[_0xbaf6('0x98')],'as':_0xbaf6('0xa8'),'attributes':[_0xbaf6('0x33'),_0xbaf6('0xa9'),_0xbaf6('0xaa')],'required':![]},{'model':db['Tag'],'as':_0xbaf6('0xab'),'attributes':['id',_0xbaf6('0x33'),'color'],'where':_0x293d17['query'][_0xbaf6('0xac')]?{'id':_0x293d17[_0xbaf6('0x38')][_0xbaf6('0xac')]}:undefined,'required':_0x293d17[_0xbaf6('0x38')][_0xbaf6('0xac')]?!![]:![]}];}return db[_0xbaf6('0x8b')][_0xbaf6('0x4b')](_0x4a1af7);})['then'](function(_0x2dd512){_0x5d229f[_0xbaf6('0x61')]=_0x2dd512;return _0x5d229f;});}})[_0xbaf6('0x1c')](respondWithFilteredResult(_0x554e4f,_0x4a1af7))[_0xbaf6('0x24')](handleError(_0x554e4f,null));};exports[_0xbaf6('0x34')]=function(_0x119bcc,_0x274e14,_0x50b95f){var _0x4e0961,_0x34cfdc,_0x4344da;if(_[_0xbaf6('0x7f')](_0x119bcc['body'][_0xbaf6('0x52')])||_0x119bcc['body']['body']===''){throw new db[(_0xbaf6('0x6a'))]['ValidationError']('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0xbaf6('0x7f')](_0x119bcc[_0xbaf6('0x52')]['to'])){throw new db[(_0xbaf6('0x6a'))][(_0xbaf6('0x80'))](_0xbaf6('0xad'));}_0x4e0961=_0x119bcc[_0xbaf6('0x52')]['to'];return db[_0xbaf6('0x35')][_0xbaf6('0x4f')]({'where':{'id':_0x119bcc['params']['id']},'include':[{'model':db[_0xbaf6('0xae')],'as':_0xbaf6('0xaf'),'include':[{'model':db['CmContact'],'as':_0xbaf6('0x86'),'where':{'mobile':_0x4e0961},'limit':0x1,'order':[[_0xbaf6('0x6e'),'DESC']]}]}]})[_0xbaf6('0x1c')](handleEntityNotFound(_0x274e14,null))[_0xbaf6('0x1c')](function(_0x30ee70){if(_0x30ee70&&_0x30ee70['List']){_0x34cfdc=_0x30ee70[_0xbaf6('0x8e')]({'plain':!![]});if(_0x34cfdc[_0xbaf6('0xaf')]&&_0x34cfdc[_0xbaf6('0xaf')][_0xbaf6('0x86')][_0xbaf6('0x3e')]){return _0x34cfdc['List'][_0xbaf6('0x86')][0x0];}return db[_0xbaf6('0x85')]['create'](_[_0xbaf6('0x89')](_0x119bcc['body'],{'firstName':_0x4e0961,'mobile':_0x4e0961,'phone':_0x4e0961,'ListId':_0x34cfdc[_0xbaf6('0x70')]}));}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x274e14,null))['then'](function(_0xce12eb){if(_0xce12eb){_0x4344da=_0xce12eb;return db[_0xbaf6('0x8b')][_0xbaf6('0x4f')]({'where':{'ContactId':_0x4344da['id'],'closed':![],'SmsAccountId':_0x34cfdc['id']}})[_0xbaf6('0x1c')](function(_0x3d60e4){if(_0x3d60e4){return[_0x3d60e4,![]];}return db[_0xbaf6('0x8b')][_0xbaf6('0x50')]({'UserId':_0x119bcc['user']['id'],'ContactId':_0x4344da['id'],'SmsAccountId':_0x34cfdc['id'],'phone':_0x4e0961,'firstMsgDirection':_0xbaf6('0xb0'),'Messages':[_[_0xbaf6('0x44')](_0x119bcc['body'],{'read':![],'body':_0x119bcc[_0xbaf6('0x52')]['body'],'phone':_0x4e0961,'SmsAccountId':_0x34cfdc['id'],'UserId':_0x119bcc[_0xbaf6('0xb1')]['id'],'ContactId':_0x4344da['id']})]},{'include':[{'model':db[_0xbaf6('0x95')],'as':_0xbaf6('0xb2')}]})[_0xbaf6('0x1c')](function(_0x1ab982){return[_0x1ab982,!![]];});});}})[_0xbaf6('0x8c')](function(_0x5cedbb,_0x57be72){if(_0x57be72){return _0x5cedbb;}return db['SmsMessage'][_0xbaf6('0x50')](_[_0xbaf6('0x44')](_0x119bcc[_0xbaf6('0x52')],{'read':![],'body':_0x119bcc[_0xbaf6('0x52')][_0xbaf6('0x52')],'phone':_0x4e0961,'SmsAccountId':_0x34cfdc['id'],'SmsInteractionId':_0x5cedbb['id'],'UserId':_0x119bcc['user']['id'],'ContactId':_0x4344da['id']}))[_0xbaf6('0x1c')](function(_0x32edfa){_0x5cedbb['dataValues'][_0xbaf6('0xb2')]=[];_0x5cedbb[_0xbaf6('0xb3')][_0xbaf6('0xb2')][_0xbaf6('0x92')](_0x32edfa[_0xbaf6('0xb3')]);return _0x5cedbb;});})[_0xbaf6('0x1c')](respondWithResult(_0x274e14,null))['catch'](handleError(_0x274e14,null));};exports[_0xbaf6('0x27')]=function(_0x24ff99,_0x47cfa3,_0x36f22e){if(_0x24ff99[_0xbaf6('0x52')]['id']){delete _0x24ff99['body']['id'];}var _0x201359,_0x1a88f4,_0x2eccd4;return db['SmsAccount'][_0xbaf6('0x4f')]({'where':{'id':_0x24ff99['params']['id']}})['then'](handleEntityNotFound(_0x47cfa3,null))[_0xbaf6('0x1c')](function(_0x41187d){if(_0x41187d){_0x2eccd4=_0x41187d;logger[_0xbaf6('0x9e')](_0xbaf6('0x1f'),_0xbaf6('0x27'),'received\x20delivery\x20report\x20from',_0x41187d[_0xbaf6('0x72')],util[_0xbaf6('0xb4')](_0x24ff99[_0xbaf6('0x52')],{'showHidden':![],'depth':null}));switch(_0x41187d[_0xbaf6('0x72')]){case _0xbaf6('0xb5'):if(_0x24ff99[_0xbaf6('0x52')]['skebby_dispatch_id']&&_0x24ff99['body'][_0xbaf6('0x27')]){_0x1a88f4=_0x24ff99['body'][_0xbaf6('0x27')];return db['SmsMessage'][_0xbaf6('0x4f')]({'where':{'messageId':_0x24ff99[_0xbaf6('0x52')][_0xbaf6('0xb6')]}});}break;case _0xbaf6('0x7a'):if(_0x24ff99[_0xbaf6('0x52')][_0xbaf6('0xb7')]&&_0x24ff99[_0xbaf6('0x52')][_0xbaf6('0xb8')]){_0x1a88f4=_0x24ff99[_0xbaf6('0x52')]['statusInt'];return db[_0xbaf6('0x95')][_0xbaf6('0x4f')]({'where':{'messageId':_0x24ff99[_0xbaf6('0x52')][_0xbaf6('0xb7')]}});}break;case _0xbaf6('0x7b'):if(_0x24ff99[_0xbaf6('0x52')][_0xbaf6('0xb9')]&&_0x24ff99['body'][_0xbaf6('0xba')]){_0x1a88f4=_0x24ff99['body']['status_code'];return db[_0xbaf6('0x95')][_0xbaf6('0x4f')]({'where':{'messageId':_0x24ff99[_0xbaf6('0x52')][_0xbaf6('0xb9')]}});}break;}}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x47cfa3,null))[_0xbaf6('0x1c')](function(_0xdf78e8){if(_0xdf78e8){_0x201359=_0xdf78e8;switch(_0x2eccd4['type']){case _0xbaf6('0xb5'):if(_0x1a88f4===_0xbaf6('0xbb')){return _0x201359[_0xbaf6('0x51')]({'read':!![]});}else{logger[_0xbaf6('0x20')](_0xbaf6('0x1f'),'status','skebby',util[_0xbaf6('0xb4')](_0x24ff99[_0xbaf6('0x52')],{'showHidden':![],'depth':null}));}break;case _0xbaf6('0x7a'):if(_0x1a88f4==='1'){return _0x201359['update']({'read':!![]});}else{logger[_0xbaf6('0x20')](_0xbaf6('0x1f'),_0xbaf6('0x27'),'skebby',util[_0xbaf6('0xb4')](_0x24ff99[_0xbaf6('0x52')],{'showHidden':![],'depth':null}));}break;case _0xbaf6('0x7b'):if(!_0x24ff99[_0xbaf6('0x52')][_0xbaf6('0xbc')]&&_0x1a88f4>=0xc8&&_0x1a88f4<=0xce){return _0x201359[_0xbaf6('0x51')]({'read':!![]});}else{logger[_0xbaf6('0x20')]('SmsAccount,\x20%s,\x20%s,\x20%s','status',_0xbaf6('0x7b'),util['inspect'](_0x24ff99[_0xbaf6('0x52')],{'showHidden':![],'depth':null}));}break;}return _0x201359;}})[_0xbaf6('0x1c')](respondWithResult(_0x47cfa3,null))[_0xbaf6('0x24')](handleError(_0x47cfa3,null));};exports[_0xbaf6('0xbd')]=function(_0x5a89c2,_0x25b1cf,_0x2fdd85){return db[_0xbaf6('0x35')][_0xbaf6('0x4f')]({'where':{'id':_0x5a89c2[_0xbaf6('0x4d')]['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x25b1cf,null))[_0xbaf6('0x1c')](function(_0x28a0dc){if(_0x28a0dc){return _0x28a0dc['addAgents'](_0x5a89c2['body'][_0xbaf6('0x5d')],_['omit'](_0x5a89c2[_0xbaf6('0x52')],['ids','id'])||{})[_0xbaf6('0x8c')](function(_0x3d800c){for(var _0x5dba4b=0x0;_0x5dba4b<_0x5a89c2[_0xbaf6('0x52')]['ids'][_0xbaf6('0x3e')];_0x5dba4b+=0x1){socket[_0xbaf6('0xbe')](_0xbaf6('0xbf'),{'UserId':_0x5a89c2[_0xbaf6('0x52')]['ids'][_0x5dba4b],'SmsAccountId':_0x5a89c2[_0xbaf6('0x4d')]['id']});}return _0x3d800c;});}})[_0xbaf6('0x1c')](respondWithResult(_0x25b1cf,null))[_0xbaf6('0x24')](handleError(_0x25b1cf,null));};exports[_0xbaf6('0xc0')]=function(_0x2cd398,_0xe2eae5,_0x436472){var _0x2560be;return db['SmsAccount'][_0xbaf6('0x4f')]({'where':{'id':_0x2cd398[_0xbaf6('0x4d')]['id']}})['then'](handleEntityNotFound(_0xe2eae5,null))['then'](function(_0x494075){if(_0x494075){return _0x494075['removeAgents'](_0x2cd398[_0xbaf6('0x38')]['ids'])[_0xbaf6('0x1c')](function(_0x44aa60){if(_[_0xbaf6('0xc1')](_0x2cd398[_0xbaf6('0x38')]['ids'])){for(var _0x3be59b=0x0;_0x3be59b<_0x2cd398[_0xbaf6('0x38')][_0xbaf6('0x5d')]['length'];_0x3be59b+=0x1){socket[_0xbaf6('0xbe')](_0xbaf6('0xc2'),{'UserId':_0x2cd398[_0xbaf6('0x38')][_0xbaf6('0x5d')][_0x3be59b],'SmsAccountId':_0x2cd398[_0xbaf6('0x4d')]['id']});}}else{socket[_0xbaf6('0xbe')](_0xbaf6('0xc2'),{'UserId':_0x2cd398['query']['ids'],'SmsAccountId':_0x2cd398[_0xbaf6('0x4d')]['id']});}});}})[_0xbaf6('0x1c')](respondWithStatusCode(_0xe2eae5,null))[_0xbaf6('0x24')](handleError(_0xe2eae5,null));};exports[_0xbaf6('0xc3')]=function(_0x782756,_0x4ffce7,_0x3326cb){var _0x5526c8={};var _0x2a4415={};var _0xccaf6e;var _0x3978be;return db[_0xbaf6('0x35')][_0xbaf6('0x58')]({'where':{'id':_0x782756['params']['id']}})[_0xbaf6('0x1c')](handleEntityNotFound(_0x4ffce7,null))[_0xbaf6('0x1c')](function(_0xf7282a){if(_0xf7282a){_0xccaf6e=_0xf7282a;_0x2a4415[_0xbaf6('0x3b')]=_[_0xbaf6('0x36')](db[_0xbaf6('0x98')][_0xbaf6('0x59')]);_0x2a4415[_0xbaf6('0x38')]=_[_0xbaf6('0x36')](_0x782756[_0xbaf6('0x38')]);_0x2a4415[_0xbaf6('0x4e')]=_['intersection'](_0x2a4415[_0xbaf6('0x3b')],_0x2a4415[_0xbaf6('0x38')]);_0x5526c8['attributes']=_[_0xbaf6('0x3a')](_0x2a4415[_0xbaf6('0x3b')],qs['fields'](_0x782756[_0xbaf6('0x38')]['fields']));_0x5526c8[_0xbaf6('0x3c')]=_0x5526c8['attributes'][_0xbaf6('0x3e')]?_0x5526c8[_0xbaf6('0x3c')]:_0x2a4415[_0xbaf6('0x3b')];_0x5526c8[_0xbaf6('0x5b')]=qs[_0xbaf6('0x40')](_0x782756['query'][_0xbaf6('0x40')]);_0x5526c8['where']=qs[_0xbaf6('0x4e')](_[_0xbaf6('0x41')](_0x782756[_0xbaf6('0x38')],_0x2a4415[_0xbaf6('0x4e')]));if(_0x782756[_0xbaf6('0x38')]['filter']){_0x5526c8['where']=_[_0xbaf6('0x44')](_0x5526c8[_0xbaf6('0x45')],{'$or':_[_0xbaf6('0x47')](_0x5526c8['attributes'],function(_0x4f8f5d){var _0x479df3={};_0x479df3[_0x4f8f5d]={'$like':'%'+_0x782756[_0xbaf6('0x38')]['filter']+'%'};return _0x479df3;})});}_0x5526c8=_[_0xbaf6('0x44')]({},_0x5526c8,_0x782756[_0xbaf6('0x48')]);return _0xccaf6e['getAgents'](_0x5526c8);}})[_0xbaf6('0x1c')](function(_0x38fdb0){if(_0x38fdb0){_0x3978be=_0x38fdb0[_0xbaf6('0x3e')];if(!_0x782756[_0xbaf6('0x38')][_0xbaf6('0x5a')](_0xbaf6('0x3f'))){_0x5526c8['limit']=qs[_0xbaf6('0x2b')](_0x782756[_0xbaf6('0x38')][_0xbaf6('0x2b')]);_0x5526c8[_0xbaf6('0x2a')]=qs[_0xbaf6('0x2a')](_0x782756[_0xbaf6('0x38')][_0xbaf6('0x2a')]);}return _0xccaf6e[_0xbaf6('0xc3')](_0x5526c8);}})[_0xbaf6('0x1c')](function(_0x14463a){if(_0x14463a){return _0x14463a?{'count':_0x3978be,'rows':_0x14463a}:null;}})[_0xbaf6('0x1c')](respondWithResult(_0x4ffce7,null))[_0xbaf6('0x24')](handleError(_0x4ffce7,null));};
\ No newline at end of file
index 3ce88c6..8e93e0f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ec0=['hook','exports','SmsAccount','setMaxListeners','save','update','remove','emit','hasOwnProperty'];(function(_0x466eae,_0x211702){var _0x503432=function(_0x110ec2){while(--_0x110ec2){_0x466eae['push'](_0x466eae['shift']());}};_0x503432(++_0x211702);}(_0x2ec0,0x89));var _0x02ec=function(_0x6eb833,_0x2bb5e5){_0x6eb833=_0x6eb833-0x0;var _0xdfc38c=_0x2ec0[_0x6eb833];return _0xdfc38c;};'use strict';var EventEmitter=require('events');var SmsAccount=require('../../mysqldb')['db'][_0x02ec('0x0')];var SmsAccountEvents=new EventEmitter();SmsAccountEvents[_0x02ec('0x1')](0x0);var events={'afterCreate':_0x02ec('0x2'),'afterUpdate':_0x02ec('0x3'),'afterDestroy':_0x02ec('0x4')};function emitEvent(_0x3f99ef){return function(_0x32e855,_0x12cb91,_0x3155a4){SmsAccountEvents[_0x02ec('0x5')](_0x3f99ef+':'+_0x32e855['id'],_0x32e855);SmsAccountEvents[_0x02ec('0x5')](_0x3f99ef,_0x32e855);_0x3155a4(null);};}for(var e in events){if(events[_0x02ec('0x6')](e)){var event=events[e];SmsAccount[_0x02ec('0x7')](e,emitEvent(event));}}module[_0x02ec('0x8')]=SmsAccountEvents;
\ No newline at end of file
+var _0xc284=['events','../../mysqldb','SmsAccount','setMaxListeners','save','remove','emit'];(function(_0x23e5ce,_0x57584d){var _0x2ce19b=function(_0x318e1f){while(--_0x318e1f){_0x23e5ce['push'](_0x23e5ce['shift']());}};_0x2ce19b(++_0x57584d);}(_0xc284,0x181));var _0x4c28=function(_0x399333,_0xbcfa38){_0x399333=_0x399333-0x0;var _0x8733a=_0xc284[_0x399333];return _0x8733a;};'use strict';var EventEmitter=require(_0x4c28('0x0'));var SmsAccount=require(_0x4c28('0x1'))['db'][_0x4c28('0x2')];var SmsAccountEvents=new EventEmitter();SmsAccountEvents[_0x4c28('0x3')](0x0);var events={'afterCreate':_0x4c28('0x4'),'afterUpdate':'update','afterDestroy':_0x4c28('0x5')};function emitEvent(_0x55139c){return function(_0x58a225,_0x25a30e,_0x5a33b8){SmsAccountEvents[_0x4c28('0x6')](_0x55139c+':'+_0x58a225['id'],_0x58a225);SmsAccountEvents['emit'](_0x55139c,_0x58a225);_0x5a33b8(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SmsAccount['hook'](e,emitEvent(event));}}module['exports']=SmsAccountEvents;
\ No newline at end of file
index ccba233..bc032db 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f8b=['request-promise','./smsAccount.attributes','exports','define','sms_accounts','lodash','util','moment','bluebird'];(function(_0xe6f4dc,_0x4bd94a){var _0x1e9ede=function(_0x385591){while(--_0x385591){_0xe6f4dc['push'](_0xe6f4dc['shift']());}};_0x1e9ede(++_0x4bd94a);}(_0x4f8b,0x12e));var _0xb4f8=function(_0xb96d65,_0x2c5ff5){_0xb96d65=_0xb96d65-0x0;var _0x24bf96=_0x4f8b[_0xb96d65];return _0x24bf96;};'use strict';var _=require(_0xb4f8('0x0'));var util=require(_0xb4f8('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xb4f8('0x2'));var BPromise=require(_0xb4f8('0x3'));var rp=require(_0xb4f8('0x4'));var attributes=require(_0xb4f8('0x5'));module[_0xb4f8('0x6')]=function(_0x5d52cb,_0x3f3e1a){return _0x5d52cb[_0xb4f8('0x7')]('SmsAccount',attributes,{'tableName':_0xb4f8('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd914=['exports','SmsAccount','sms_accounts','lodash','util','api','moment','bluebird','request-promise','./smsAccount.attributes'];(function(_0x14063a,_0x8b95f0){var _0x53d186=function(_0x5a2bff){while(--_0x5a2bff){_0x14063a['push'](_0x14063a['shift']());}};_0x53d186(++_0x8b95f0);}(_0xd914,0x17f));var _0x4d91=function(_0x238671,_0x34aea0){_0x238671=_0x238671-0x0;var _0x474844=_0xd914[_0x238671];return _0x474844;};'use strict';var _=require(_0x4d91('0x0'));var util=require(_0x4d91('0x1'));var logger=require('../../config/logger')(_0x4d91('0x2'));var moment=require(_0x4d91('0x3'));var BPromise=require(_0x4d91('0x4'));var rp=require(_0x4d91('0x5'));var attributes=require(_0x4d91('0x6'));module[_0x4d91('0x7')]=function(_0x4875a2,_0x1b256e){return _0x4875a2['define'](_0x4d91('0x8'),attributes,{'tableName':_0x4d91('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a2cf347..27e39bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2830=['message','catch','ShowSmsAccount','SmsAccount','options','raw','where','attributes','include','map','model','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','../../config/environment','http','socket.io-emitter','localhost','./smsAccount.socket','register','request','then','info','SmsAccount,\x20%s,\x20%s','debug','request\x20sent','stringify','error'];(function(_0x5778fa,_0x43c826){var _0x1f35c9=function(_0x243328){while(--_0x243328){_0x5778fa['push'](_0x5778fa['shift']());}};_0x1f35c9(++_0x43c826);}(_0x2830,0x1dc));var _0x0283=function(_0x3b4ebd,_0x519bff){_0x3b4ebd=_0x3b4ebd-0x0;var _0x1b76e7=_0x2830[_0x3b4ebd];return _0x1b76e7;};'use strict';var _=require('lodash');var util=require(_0x0283('0x0'));var moment=require(_0x0283('0x1'));var BPromise=require(_0x0283('0x2'));var rs=require(_0x0283('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x0283('0x4'));var logger=require(_0x0283('0x5'))('rpc');var config=require(_0x0283('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0x0283('0x7')]({'port':0x232a});var socket=require(_0x0283('0x8'))({'host':_0x0283('0x9'),'port':0x18eb});require(_0x0283('0xa'))[_0x0283('0xb')](socket);function respondWithRpcPromise(_0x14230a,_0x4f36bf,_0x74eb80){return new BPromise(function(_0x6b6a24,_0x3077dc){return client[_0x0283('0xc')](_0x14230a,_0x74eb80)[_0x0283('0xd')](function(_0x50241c){logger[_0x0283('0xe')](_0x0283('0xf'),_0x4f36bf,'request\x20sent');logger[_0x0283('0x10')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x4f36bf,_0x0283('0x11'),JSON[_0x0283('0x12')](_0x50241c));if(_0x50241c[_0x0283('0x13')]){if(_0x50241c[_0x0283('0x13')]['code']===0x1f4){logger[_0x0283('0x13')](_0x0283('0xf'),_0x4f36bf,_0x50241c[_0x0283('0x13')][_0x0283('0x14')]);return _0x3077dc(_0x50241c['error'][_0x0283('0x14')]);}logger['error']('SmsAccount,\x20%s,\x20%s',_0x4f36bf,_0x50241c[_0x0283('0x13')][_0x0283('0x14')]);return _0x6b6a24(_0x50241c[_0x0283('0x13')]['message']);}else{logger[_0x0283('0xe')]('SmsAccount,\x20%s,\x20%s',_0x4f36bf,'request\x20sent');_0x6b6a24(_0x50241c['result'][_0x0283('0x14')]);}})[_0x0283('0x15')](function(_0x18b0ec){logger[_0x0283('0x13')](_0x0283('0xf'),_0x4f36bf,_0x18b0ec);_0x3077dc(_0x18b0ec);});});}exports[_0x0283('0x16')]=function(_0x386ade){var _0x5860da=this;return new Promise(function(_0x46f619,_0x19ba22){return db[_0x0283('0x17')]['find']({'raw':_0x386ade[_0x0283('0x18')]?_0x386ade[_0x0283('0x18')][_0x0283('0x19')]===undefined?!![]:![]:!![],'where':_0x386ade[_0x0283('0x18')]?_0x386ade[_0x0283('0x18')][_0x0283('0x1a')]||null:null,'attributes':_0x386ade[_0x0283('0x18')]?_0x386ade[_0x0283('0x18')][_0x0283('0x1b')]||null:null,'include':_0x386ade[_0x0283('0x18')]?_0x386ade['options'][_0x0283('0x1c')]?_[_0x0283('0x1d')](_0x386ade[_0x0283('0x18')]['include'],function(_0x99bb7a){return{'model':db[_0x99bb7a[_0x0283('0x1e')]],'as':_0x99bb7a['as'],'attributes':_0x99bb7a[_0x0283('0x1b')],'include':_0x99bb7a[_0x0283('0x1c')]?_[_0x0283('0x1d')](_0x99bb7a[_0x0283('0x1c')],function(_0x208ca9){return{'model':db[_0x208ca9[_0x0283('0x1e')]],'as':_0x208ca9['as'],'attributes':_0x208ca9[_0x0283('0x1b')],'include':_0x208ca9['include']?_[_0x0283('0x1d')](_0x208ca9[_0x0283('0x1c')],function(_0x5423c0){return{'model':db[_0x5423c0['model']],'as':_0x5423c0['as'],'attributes':_0x5423c0[_0x0283('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x0283('0xd')](function(_0xaebba9){logger[_0x0283('0xe')](_0x0283('0x16'),_0x386ade);logger[_0x0283('0x10')](_0x0283('0x16'),_0x386ade,JSON[_0x0283('0x12')](_0xaebba9));_0x46f619(_0xaebba9);})[_0x0283('0x15')](function(_0x4d3a16){logger[_0x0283('0x13')](_0x0283('0x16'),_0x4d3a16[_0x0283('0x14')],_0x386ade);_0x19ba22(_0x5860da[_0x0283('0x13')](0x1f4,_0x4d3a16[_0x0283('0x14')]));});});};
\ No newline at end of file
+var _0xc723=['debug','stringify','error','message','SmsAccount,\x20%s,\x20%s','result','catch','SmsAccount','find','options','where','attributes','include','map','model','ShowSmsAccount','lodash','util','moment','randomstring','../../mysqldb','rpc','../../config/environment','client','http','socket.io-emitter','localhost','./smsAccount.socket','request','then','info','request\x20sent'];(function(_0x4769ff,_0x127733){var _0x2362ba=function(_0x5deeaf){while(--_0x5deeaf){_0x4769ff['push'](_0x4769ff['shift']());}};_0x2362ba(++_0x127733);}(_0xc723,0xd0));var _0x3c72=function(_0x49c057,_0xc808ed){_0x49c057=_0x49c057-0x0;var _0xd8f0e6=_0xc723[_0x49c057];return _0xd8f0e6;};'use strict';var _=require(_0x3c72('0x0'));var util=require(_0x3c72('0x1'));var moment=require(_0x3c72('0x2'));var BPromise=require('bluebird');var rs=require(_0x3c72('0x3'));var fs=require('fs');var db=require(_0x3c72('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x3c72('0x5'));var config=require(_0x3c72('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x3c72('0x7')][_0x3c72('0x8')]({'port':0x232a});var socket=require(_0x3c72('0x9'))({'host':_0x3c72('0xa'),'port':0x18eb});require(_0x3c72('0xb'))['register'](socket);function respondWithRpcPromise(_0x4ebe03,_0x3e49b6,_0x4f007f){return new BPromise(function(_0x58f7a1,_0x28ec93){return client[_0x3c72('0xc')](_0x4ebe03,_0x4f007f)[_0x3c72('0xd')](function(_0x7265fe){logger[_0x3c72('0xe')]('SmsAccount,\x20%s,\x20%s',_0x3e49b6,_0x3c72('0xf'));logger[_0x3c72('0x10')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x3e49b6,_0x3c72('0xf'),JSON[_0x3c72('0x11')](_0x7265fe));if(_0x7265fe['error']){if(_0x7265fe[_0x3c72('0x12')]['code']===0x1f4){logger[_0x3c72('0x12')]('SmsAccount,\x20%s,\x20%s',_0x3e49b6,_0x7265fe[_0x3c72('0x12')]['message']);return _0x28ec93(_0x7265fe[_0x3c72('0x12')][_0x3c72('0x13')]);}logger[_0x3c72('0x12')](_0x3c72('0x14'),_0x3e49b6,_0x7265fe[_0x3c72('0x12')][_0x3c72('0x13')]);return _0x58f7a1(_0x7265fe['error'][_0x3c72('0x13')]);}else{logger[_0x3c72('0xe')](_0x3c72('0x14'),_0x3e49b6,'request\x20sent');_0x58f7a1(_0x7265fe[_0x3c72('0x15')][_0x3c72('0x13')]);}})[_0x3c72('0x16')](function(_0x5c2a2b){logger[_0x3c72('0x12')](_0x3c72('0x14'),_0x3e49b6,_0x5c2a2b);_0x28ec93(_0x5c2a2b);});});}exports['ShowSmsAccount']=function(_0xeb024b){var _0xb69a2e=this;return new Promise(function(_0x2d431d,_0x18c929){return db[_0x3c72('0x17')][_0x3c72('0x18')]({'raw':_0xeb024b[_0x3c72('0x19')]?_0xeb024b[_0x3c72('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0xeb024b[_0x3c72('0x19')]?_0xeb024b[_0x3c72('0x19')][_0x3c72('0x1a')]||null:null,'attributes':_0xeb024b[_0x3c72('0x19')]?_0xeb024b[_0x3c72('0x19')][_0x3c72('0x1b')]||null:null,'include':_0xeb024b[_0x3c72('0x19')]?_0xeb024b[_0x3c72('0x19')][_0x3c72('0x1c')]?_[_0x3c72('0x1d')](_0xeb024b[_0x3c72('0x19')][_0x3c72('0x1c')],function(_0x30857e){return{'model':db[_0x30857e[_0x3c72('0x1e')]],'as':_0x30857e['as'],'attributes':_0x30857e[_0x3c72('0x1b')],'include':_0x30857e[_0x3c72('0x1c')]?_[_0x3c72('0x1d')](_0x30857e[_0x3c72('0x1c')],function(_0x2df737){return{'model':db[_0x2df737[_0x3c72('0x1e')]],'as':_0x2df737['as'],'attributes':_0x2df737[_0x3c72('0x1b')],'include':_0x2df737[_0x3c72('0x1c')]?_[_0x3c72('0x1d')](_0x2df737[_0x3c72('0x1c')],function(_0x34bfeb){return{'model':db[_0x34bfeb[_0x3c72('0x1e')]],'as':_0x34bfeb['as'],'attributes':_0x34bfeb[_0x3c72('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x68fcdd){logger[_0x3c72('0xe')]('ShowSmsAccount',_0xeb024b);logger['debug'](_0x3c72('0x1f'),_0xeb024b,JSON[_0x3c72('0x11')](_0x68fcdd));_0x2d431d(_0x68fcdd);})[_0x3c72('0x16')](function(_0x480439){logger[_0x3c72('0x12')](_0x3c72('0x1f'),_0x480439['message'],_0xeb024b);_0x18c929(_0xb69a2e['error'](0x1f4,_0x480439[_0x3c72('0x13')]));});});};
\ No newline at end of file
index 6e96057..9b14041 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0491=['register','length','smsAccount:','save','remove','update','emit','removeListener'];(function(_0x33bc64,_0x4d1e92){var _0x3fdd34=function(_0x4b40a4){while(--_0x4b40a4){_0x33bc64['push'](_0x33bc64['shift']());}};_0x3fdd34(++_0x4d1e92);}(_0x0491,0xa3));var _0x1049=function(_0x3f88bc,_0xe38cf5){_0x3f88bc=_0x3f88bc-0x0;var _0x4df1c4=_0x0491[_0x3f88bc];return _0x4df1c4;};'use strict';var SmsAccountEvents=require('./smsAccount.events');var events=[_0x1049('0x0'),_0x1049('0x1'),_0x1049('0x2')];function createListener(_0x3ffbc0,_0x80216c){return function(_0x465235){_0x80216c[_0x1049('0x3')](_0x3ffbc0,_0x465235);};}function removeListener(_0x106b28,_0x2de0f2){return function(){SmsAccountEvents[_0x1049('0x4')](_0x106b28,_0x2de0f2);};}exports[_0x1049('0x5')]=function(_0x3fa1e5){for(var _0x9b8c20=0x0,_0xad7a48=events[_0x1049('0x6')];_0x9b8c20<_0xad7a48;_0x9b8c20++){var _0x59f617=events[_0x9b8c20];var _0x4bfb8e=createListener(_0x1049('0x7')+_0x59f617,_0x3fa1e5);SmsAccountEvents['on'](_0x59f617,_0x4bfb8e);}};
\ No newline at end of file
+var _0x11ee=['length','smsAccount:','./smsAccount.events','remove','update','emit','removeListener','register'];(function(_0x1a0600,_0x41feef){var _0x734670=function(_0x2da4e4){while(--_0x2da4e4){_0x1a0600['push'](_0x1a0600['shift']());}};_0x734670(++_0x41feef);}(_0x11ee,0x1c2));var _0xe11e=function(_0x2d0b84,_0x34682d){_0x2d0b84=_0x2d0b84-0x0;var _0x8d0088=_0x11ee[_0x2d0b84];return _0x8d0088;};'use strict';var SmsAccountEvents=require(_0xe11e('0x0'));var events=['save',_0xe11e('0x1'),_0xe11e('0x2')];function createListener(_0x24cfc8,_0x5c2ff3){return function(_0x12b926){_0x5c2ff3[_0xe11e('0x3')](_0x24cfc8,_0x12b926);};}function removeListener(_0x38bf36,_0x245c9b){return function(){SmsAccountEvents[_0xe11e('0x4')](_0x38bf36,_0x245c9b);};}exports[_0xe11e('0x5')]=function(_0x21acc5){for(var _0x202a37=0x0,_0x167a16=events[_0xe11e('0x6')];_0x202a37<_0x167a16;_0x202a37++){var _0xa5fff7=events[_0x202a37];var _0x54d205=createListener(_0xe11e('0x7')+_0xa5fff7,_0x21acc5);SmsAccountEvents['on'](_0xa5fff7,_0x54d205);}};
\ No newline at end of file
index 28df324..8bfd16a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe515=['exports','multer','util','path','express','Router','../../components/interaction/service','../../config/environment','./smsApplication.controller','isAuthenticated','index','get','/:id','show','put','update','destroy'];(function(_0x366e99,_0x15d82d){var _0x180bbe=function(_0x282498){while(--_0x282498){_0x366e99['push'](_0x366e99['shift']());}};_0x180bbe(++_0x15d82d);}(_0xe515,0x122));var _0x5e51=function(_0x4d006e,_0x3969e1){_0x4d006e=_0x4d006e-0x0;var _0xbf906e=_0xe515[_0x4d006e];return _0xbf906e;};'use strict';var multer=require(_0x5e51('0x0'));var util=require(_0x5e51('0x1'));var path=require(_0x5e51('0x2'));var express=require(_0x5e51('0x3'));var router=express[_0x5e51('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x5e51('0x5'));var config=require(_0x5e51('0x6'));var controller=require(_0x5e51('0x7'));router['get']('/',auth[_0x5e51('0x8')](),controller[_0x5e51('0x9')]);router[_0x5e51('0xa')](_0x5e51('0xb'),auth['isAuthenticated'](),controller[_0x5e51('0xc')]);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0x5e51('0xd')]('/:id',auth[_0x5e51('0x8')](),controller[_0x5e51('0xe')]);router['delete'](_0x5e51('0xb'),auth['isAuthenticated'](),controller[_0x5e51('0xf')]);module[_0x5e51('0x10')]=router;
\ No newline at end of file
+var _0xfe3c=['Router','../../components/auth/service','../../components/interaction/service','./smsApplication.controller','isAuthenticated','index','get','/:id','show','post','update','delete','exports','multer','util','path'];(function(_0x3d42d8,_0x4cffaa){var _0x27fc41=function(_0x3a363b){while(--_0x3a363b){_0x3d42d8['push'](_0x3d42d8['shift']());}};_0x27fc41(++_0x4cffaa);}(_0xfe3c,0xdd));var _0xcfe3=function(_0x1995e2,_0x773bd0){_0x1995e2=_0x1995e2-0x0;var _0x2365f0=_0xfe3c[_0x1995e2];return _0x2365f0;};'use strict';var multer=require(_0xcfe3('0x0'));var util=require(_0xcfe3('0x1'));var path=require(_0xcfe3('0x2'));var express=require('express');var router=express[_0xcfe3('0x3')]();var auth=require(_0xcfe3('0x4'));var interaction=require(_0xcfe3('0x5'));var config=require('../../config/environment');var controller=require(_0xcfe3('0x6'));router['get']('/',auth[_0xcfe3('0x7')](),controller[_0xcfe3('0x8')]);router[_0xcfe3('0x9')](_0xcfe3('0xa'),auth[_0xcfe3('0x7')](),controller[_0xcfe3('0xb')]);router[_0xcfe3('0xc')]('/',auth['isAuthenticated'](),controller['create']);router['put'](_0xcfe3('0xa'),auth[_0xcfe3('0x7')](),controller[_0xcfe3('0xd')]);router[_0xcfe3('0xe')](_0xcfe3('0xa'),auth[_0xcfe3('0x7')](),controller['destroy']);module[_0xcfe3('0xf')]=router;
\ No newline at end of file
index 0be3012..fc12f27 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x571a=['STRING','*,*,*,*','sequelize','exports','INTEGER','noop'];(function(_0x40f991,_0x576819){var _0x38eca2=function(_0x2a586f){while(--_0x2a586f){_0x40f991['push'](_0x40f991['shift']());}};_0x38eca2(++_0x576819);}(_0x571a,0x158));var _0xa571=function(_0x3db8b2,_0x259694){_0x3db8b2=_0x3db8b2-0x0;var _0x20cee3=_0x571a[_0x3db8b2];return _0x20cee3;};'use strict';var Sequelize=require(_0xa571('0x0'));module[_0xa571('0x1')]={'priority':{'type':Sequelize[_0xa571('0x2')],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xa571('0x3')},'appdata':{'type':Sequelize[_0xa571('0x4')](0x1000),'defaultValue':''},'description':{'type':Sequelize[_0xa571('0x4')]},'interval':{'type':Sequelize[_0xa571('0x4')],'defaultValue':_0xa571('0x5')}};
\ No newline at end of file
+var _0x2fb3=['*,*,*,*','sequelize','exports','INTEGER','STRING'];(function(_0x128e1f,_0x234bd1){var _0xf74519=function(_0x356dd7){while(--_0x356dd7){_0x128e1f['push'](_0x128e1f['shift']());}};_0xf74519(++_0x234bd1);}(_0x2fb3,0xa1));var _0x32fb=function(_0x2389ac,_0x1d3a13){_0x2389ac=_0x2389ac-0x0;var _0x45db9c=_0x2fb3[_0x2389ac];return _0x45db9c;};'use strict';var Sequelize=require(_0x32fb('0x0'));module[_0x32fb('0x1')]={'priority':{'type':Sequelize[_0x32fb('0x2')],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize[_0x32fb('0x3')](0x1000),'defaultValue':''},'description':{'type':Sequelize[_0x32fb('0x3')]},'interval':{'type':Sequelize[_0x32fb('0x3')],'defaultValue':_0x32fb('0x4')}};
\ No newline at end of file
index 53b499c..7c84389 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf378=['status','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','error','name','send','SmsApplication','rawAttributes','model','keys','dateEnd','query','dateStart','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','add','day','merge','filter','map','options','count','includeAll','include','findAll','rows','show','params','create','body','find','catch','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end'];(function(_0x39d50d,_0x6bddec){var _0xb526f=function(_0x19da16){while(--_0x19da16){_0x39d50d['push'](_0x39d50d['shift']());}};_0xb526f(++_0x6bddec);}(_0xf378,0x18a));var _0x8f37=function(_0x21549c,_0x6d64d1){_0x21549c=_0x21549c-0x0;var _0x426cbd=_0xf378[_0x21549c];return _0x426cbd;};'use strict';var jsonpatch=require(_0x8f37('0x0'));var rp=require('request-promise');var moment=require(_0x8f37('0x1'));var BPromise=require(_0x8f37('0x2'));var Mustache=require(_0x8f37('0x3'));var util=require(_0x8f37('0x4'));var path=require(_0x8f37('0x5'));var sox=require(_0x8f37('0x6'));var csv=require(_0x8f37('0x7'));var ejs=require(_0x8f37('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x8f37('0x9'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x8f37('0x7'));var querystring=require(_0x8f37('0xa'));var Papa=require(_0x8f37('0xb'));var qs=require(_0x8f37('0xc'));var logger=require(_0x8f37('0xd'))(_0x8f37('0xe'));var utils=require(_0x8f37('0xf'));var config=require(_0x8f37('0x10'));var db=require(_0x8f37('0x11'))['db'];function respondWithStatusCode(_0x4d3960,_0x5060e3){_0x5060e3=_0x5060e3||0xcc;return function(_0xad7d5d){if(_0xad7d5d){return _0x4d3960[_0x8f37('0x12')](_0x5060e3);}return _0x4d3960['status'](_0x5060e3)[_0x8f37('0x13')]();};}function respondWithResult(_0x3cc88c,_0xf86e32){_0xf86e32=_0xf86e32||0xc8;return function(_0x40063){if(_0x40063){return _0x3cc88c[_0x8f37('0x14')](_0xf86e32)[_0x8f37('0x15')](_0x40063);}};}function respondWithFilteredResult(_0x3ac1fe,_0x3738c7){return function(_0x4db641){if(_0x4db641){var _0x6b2972=_0x4db641['count'],_0x29dd42=_0x3738c7[_0x8f37('0x16')],_0x140e7d=_0x3738c7[_0x8f37('0x16')]+_0x3738c7[_0x8f37('0x17')],_0x1f40d6;if(_0x140e7d>=_0x6b2972){_0x140e7d=_0x6b2972;_0x1f40d6=0xc8;}else{_0x1f40d6=0xce;}_0x3ac1fe[_0x8f37('0x14')](_0x1f40d6);return _0x3ac1fe[_0x8f37('0x18')](_0x8f37('0x19'),_0x29dd42+'-'+_0x140e7d+'/'+_0x6b2972)['json'](_0x4db641);}return null;};}function patchUpdates(_0x122d15){return function(_0x424180){try{jsonpatch[_0x8f37('0x1a')](_0x424180,_0x122d15,!![]);}catch(_0x419196){return BPromise[_0x8f37('0x1b')](_0x419196);}return _0x424180[_0x8f37('0x1c')]();};}function saveUpdates(_0x2fd9fb,_0x28f63a){return function(_0x2c30a1){if(_0x2c30a1){return _0x2c30a1[_0x8f37('0x1d')](_0x2fd9fb)['then'](function(_0x259471){return _0x259471;});}return null;};}function removeEntity(_0x4c8388,_0x13db55){return function(_0x3b090f){if(_0x3b090f){return _0x3b090f[_0x8f37('0x1e')]()[_0x8f37('0x1f')](function(){_0x4c8388[_0x8f37('0x14')](0xcc)[_0x8f37('0x13')]();});}};}function handleEntityNotFound(_0x550f16,_0x54aaf6){return function(_0x29f80d){if(!_0x29f80d){_0x550f16[_0x8f37('0x12')](0x194);}return _0x29f80d;};}function handleError(_0x127075,_0x4db94c){_0x4db94c=_0x4db94c||0x1f4;return function(_0x13ad87){logger[_0x8f37('0x20')](_0x13ad87['stack']);if(_0x13ad87[_0x8f37('0x21')]){delete _0x13ad87[_0x8f37('0x21')];}_0x127075['status'](_0x4db94c)[_0x8f37('0x22')](_0x13ad87);};}exports['index']=function(_0xf09906,_0xec9b5b){var _0x4164cc={},_0x34661a={},_0x2da1c7={'count':0x0,'rows':[]};var _0x29918a=db[_0x8f37('0x23')][_0x8f37('0x24')];_0x34661a[_0x8f37('0x25')]=_[_0x8f37('0x26')](_0x29918a);var _0x30c40f={'dateStart':_0xf09906['query']['dateStart'],'dateEnd':_0xf09906['query'][_0x8f37('0x27')]};delete _0xf09906[_0x8f37('0x28')][_0x8f37('0x29')];delete _0xf09906['query']['dateEnd'];_0x34661a['query']=_[_0x8f37('0x26')](_0xf09906['query']);_0x34661a[_0x8f37('0x2a')]=_[_0x8f37('0x2b')](_0x34661a['model'],_0x34661a[_0x8f37('0x28')]);_0x4164cc[_0x8f37('0x2c')]=_[_0x8f37('0x2b')](_0x34661a[_0x8f37('0x25')],qs[_0x8f37('0x2d')](_0xf09906[_0x8f37('0x28')][_0x8f37('0x2d')]));_0x4164cc[_0x8f37('0x2c')]=_0x4164cc[_0x8f37('0x2c')][_0x8f37('0x2e')]?_0x4164cc[_0x8f37('0x2c')]:_0x34661a['model'];if(!_0xf09906[_0x8f37('0x28')][_0x8f37('0x2f')]('nolimit')){_0x4164cc[_0x8f37('0x17')]=qs['limit'](_0xf09906[_0x8f37('0x28')][_0x8f37('0x17')]);_0x4164cc[_0x8f37('0x16')]=qs[_0x8f37('0x16')](_0xf09906[_0x8f37('0x28')][_0x8f37('0x16')]);}_0x4164cc[_0x8f37('0x30')]=qs[_0x8f37('0x31')](_0xf09906[_0x8f37('0x28')][_0x8f37('0x31')]);_0x4164cc[_0x8f37('0x32')]=qs[_0x8f37('0x2a')](_[_0x8f37('0x33')](_0xf09906[_0x8f37('0x28')],_0x34661a[_0x8f37('0x2a')]));if(_0x30c40f['dateStart']){if(_0x30c40f[_0x8f37('0x27')]){_0x30c40f['dateEnd']=moment(_0x30c40f['dateEnd'])[_0x8f37('0x34')](0x1,_0x8f37('0x35'));}else{_0x30c40f[_0x8f37('0x27')]=moment(_0x30c40f[_0x8f37('0x29')])[_0x8f37('0x34')](0x1,'day');}_[_0x8f37('0x36')](_0x4164cc[_0x8f37('0x32')],{'createdAt':{'$gte':_0x30c40f[_0x8f37('0x29')],'$lte':_0x30c40f[_0x8f37('0x27')]}});}if(_0xf09906[_0x8f37('0x28')][_0x8f37('0x37')]){_0x4164cc['where']=_[_0x8f37('0x36')](_0x4164cc[_0x8f37('0x32')],{'$or':_[_0x8f37('0x38')](_0x4164cc['attributes'],function(_0x3893e1){var _0x1907b2={};_0x1907b2[_0x3893e1]={'$like':'%'+_0xf09906[_0x8f37('0x28')][_0x8f37('0x37')]+'%'};return _0x1907b2;})});}_0x4164cc=_[_0x8f37('0x36')]({},_0x4164cc,_0xf09906[_0x8f37('0x39')]);var _0x300ed9={'where':_0x4164cc['where']};return db[_0x8f37('0x23')]['count'](_0x300ed9)[_0x8f37('0x1f')](function(_0x4c51d7){_0x2da1c7[_0x8f37('0x3a')]=_0x4c51d7;if(_0xf09906[_0x8f37('0x28')][_0x8f37('0x3b')]){_0x4164cc[_0x8f37('0x3c')]=[{'all':!![]}];}return db[_0x8f37('0x23')][_0x8f37('0x3d')](_0x4164cc);})['then'](function(_0x3103f1){_0x2da1c7[_0x8f37('0x3e')]=_0x3103f1;return _0x2da1c7;})[_0x8f37('0x1f')](respondWithFilteredResult(_0xec9b5b,_0x4164cc))['catch'](handleError(_0xec9b5b,null));};exports[_0x8f37('0x3f')]=function(_0x22d812,_0x478c63){var _0x48aadd={'raw':!![],'where':{'id':_0x22d812[_0x8f37('0x40')]['id']}},_0x3aaa17={};_0x3aaa17[_0x8f37('0x25')]=_['keys'](db['SmsApplication'][_0x8f37('0x24')]);_0x3aaa17[_0x8f37('0x28')]=_[_0x8f37('0x26')](_0x22d812[_0x8f37('0x28')]);_0x3aaa17[_0x8f37('0x2a')]=_[_0x8f37('0x2b')](_0x3aaa17[_0x8f37('0x25')],_0x3aaa17[_0x8f37('0x28')]);_0x48aadd['attributes']=_['intersection'](_0x3aaa17['model'],qs[_0x8f37('0x2d')](_0x22d812['query'][_0x8f37('0x2d')]));_0x48aadd[_0x8f37('0x2c')]=_0x48aadd[_0x8f37('0x2c')][_0x8f37('0x2e')]?_0x48aadd['attributes']:_0x3aaa17['model'];if(_0x22d812[_0x8f37('0x28')][_0x8f37('0x3b')]){_0x48aadd['include']=[{'all':!![]}];}_0x48aadd=_['merge']({},_0x48aadd,_0x22d812[_0x8f37('0x39')]);return db['SmsApplication']['find'](_0x48aadd)[_0x8f37('0x1f')](handleEntityNotFound(_0x478c63,null))[_0x8f37('0x1f')](respondWithResult(_0x478c63,null))['catch'](handleError(_0x478c63,null));};exports[_0x8f37('0x41')]=function(_0x53617b,_0x40603c){return db['SmsApplication']['create'](_0x53617b['body'],{})['then'](respondWithResult(_0x40603c,0xc9))['catch'](handleError(_0x40603c,null));};exports[_0x8f37('0x1d')]=function(_0x386978,_0x545d2a){if(_0x386978['body']['id']){delete _0x386978[_0x8f37('0x42')]['id'];}return db[_0x8f37('0x23')][_0x8f37('0x43')]({'where':{'id':_0x386978[_0x8f37('0x40')]['id']}})[_0x8f37('0x1f')](handleEntityNotFound(_0x545d2a,null))[_0x8f37('0x1f')](saveUpdates(_0x386978['body'],null))[_0x8f37('0x1f')](respondWithResult(_0x545d2a,null))[_0x8f37('0x44')](handleError(_0x545d2a,null));};exports[_0x8f37('0x1e')]=function(_0x31eb9,_0x36a328){return db[_0x8f37('0x23')][_0x8f37('0x43')]({'where':{'id':_0x31eb9[_0x8f37('0x40')]['id']}})['then'](handleEntityNotFound(_0x36a328,null))[_0x8f37('0x1f')](removeEntity(_0x36a328,null))['catch'](handleError(_0x36a328,null));};
\ No newline at end of file
+var _0xcc39=['papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','save','update','then','destroy','stack','name','send','index','rawAttributes','model','keys','query','dateStart','filters','intersection','attributes','fields','length','nolimit','order','sort','where','pick','dateEnd','add','day','filter','merge','map','options','SmsApplication','includeAll','include','findAll','rows','catch','show','params','find','create','body','fast-json-patch','request-promise','bluebird','mustache','sox','to-csv','jsforce','desk.js','querystring'];(function(_0x5cff07,_0x102450){var _0x4114e2=function(_0x575c58){while(--_0x575c58){_0x5cff07['push'](_0x5cff07['shift']());}};_0x4114e2(++_0x102450);}(_0xcc39,0x141));var _0x9cc3=function(_0x1876b2,_0x5d0225){_0x1876b2=_0x1876b2-0x0;var _0x9fb1e0=_0xcc39[_0x1876b2];return _0x9fb1e0;};'use strict';var jsonpatch=require(_0x9cc3('0x0'));var rp=require(_0x9cc3('0x1'));var moment=require('moment');var BPromise=require(_0x9cc3('0x2'));var Mustache=require(_0x9cc3('0x3'));var util=require('util');var path=require('path');var sox=require(_0x9cc3('0x4'));var csv=require(_0x9cc3('0x5'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x9cc3('0x6'));var deskjs=require(_0x9cc3('0x7'));var toCsv=require('to-csv');var querystring=require(_0x9cc3('0x8'));var Papa=require(_0x9cc3('0x9'));var qs=require(_0x9cc3('0xa'));var logger=require(_0x9cc3('0xb'))(_0x9cc3('0xc'));var utils=require(_0x9cc3('0xd'));var config=require(_0x9cc3('0xe'));var db=require(_0x9cc3('0xf'))['db'];function respondWithStatusCode(_0x76d9d3,_0x76e75f){_0x76e75f=_0x76e75f||0xcc;return function(_0x54283e){if(_0x54283e){return _0x76d9d3[_0x9cc3('0x10')](_0x76e75f);}return _0x76d9d3[_0x9cc3('0x11')](_0x76e75f)[_0x9cc3('0x12')]();};}function respondWithResult(_0x1ddcad,_0x3c1393){_0x3c1393=_0x3c1393||0xc8;return function(_0xc59d26){if(_0xc59d26){return _0x1ddcad[_0x9cc3('0x11')](_0x3c1393)[_0x9cc3('0x13')](_0xc59d26);}};}function respondWithFilteredResult(_0x57f5d7,_0x1fcf20){return function(_0xf8a15e){if(_0xf8a15e){var _0xe289b3=_0xf8a15e[_0x9cc3('0x14')],_0x3d45cc=_0x1fcf20[_0x9cc3('0x15')],_0x49ca04=_0x1fcf20[_0x9cc3('0x15')]+_0x1fcf20[_0x9cc3('0x16')],_0x2c13ed;if(_0x49ca04>=_0xe289b3){_0x49ca04=_0xe289b3;_0x2c13ed=0xc8;}else{_0x2c13ed=0xce;}_0x57f5d7[_0x9cc3('0x11')](_0x2c13ed);return _0x57f5d7[_0x9cc3('0x17')]('Content-Range',_0x3d45cc+'-'+_0x49ca04+'/'+_0xe289b3)[_0x9cc3('0x13')](_0xf8a15e);}return null;};}function patchUpdates(_0x1db9d0){return function(_0x3a87bd){try{jsonpatch[_0x9cc3('0x18')](_0x3a87bd,_0x1db9d0,!![]);}catch(_0x23207e){return BPromise['reject'](_0x23207e);}return _0x3a87bd[_0x9cc3('0x19')]();};}function saveUpdates(_0x33d37e,_0x4202f9){return function(_0x120dfa){if(_0x120dfa){return _0x120dfa[_0x9cc3('0x1a')](_0x33d37e)[_0x9cc3('0x1b')](function(_0x4df1b8){return _0x4df1b8;});}return null;};}function removeEntity(_0x3a8ede,_0x47bdd1){return function(_0x59677f){if(_0x59677f){return _0x59677f[_0x9cc3('0x1c')]()[_0x9cc3('0x1b')](function(){_0x3a8ede[_0x9cc3('0x11')](0xcc)[_0x9cc3('0x12')]();});}};}function handleEntityNotFound(_0x9a8cec,_0x4e723e){return function(_0x394856){if(!_0x394856){_0x9a8cec[_0x9cc3('0x10')](0x194);}return _0x394856;};}function handleError(_0x5d8252,_0x3ad8db){_0x3ad8db=_0x3ad8db||0x1f4;return function(_0x176565){logger['error'](_0x176565[_0x9cc3('0x1d')]);if(_0x176565[_0x9cc3('0x1e')]){delete _0x176565[_0x9cc3('0x1e')];}_0x5d8252[_0x9cc3('0x11')](_0x3ad8db)[_0x9cc3('0x1f')](_0x176565);};}exports[_0x9cc3('0x20')]=function(_0x4052e6,_0x27862f){var _0x4736a0={},_0x25ea59={},_0x1f7183={'count':0x0,'rows':[]};var _0x220032=db['SmsApplication'][_0x9cc3('0x21')];_0x25ea59[_0x9cc3('0x22')]=_[_0x9cc3('0x23')](_0x220032);var _0x5ebb58={'dateStart':_0x4052e6[_0x9cc3('0x24')]['dateStart'],'dateEnd':_0x4052e6[_0x9cc3('0x24')]['dateEnd']};delete _0x4052e6[_0x9cc3('0x24')][_0x9cc3('0x25')];delete _0x4052e6[_0x9cc3('0x24')]['dateEnd'];_0x25ea59['query']=_[_0x9cc3('0x23')](_0x4052e6['query']);_0x25ea59[_0x9cc3('0x26')]=_[_0x9cc3('0x27')](_0x25ea59[_0x9cc3('0x22')],_0x25ea59['query']);_0x4736a0[_0x9cc3('0x28')]=_[_0x9cc3('0x27')](_0x25ea59[_0x9cc3('0x22')],qs['fields'](_0x4052e6[_0x9cc3('0x24')][_0x9cc3('0x29')]));_0x4736a0[_0x9cc3('0x28')]=_0x4736a0['attributes'][_0x9cc3('0x2a')]?_0x4736a0[_0x9cc3('0x28')]:_0x25ea59[_0x9cc3('0x22')];if(!_0x4052e6[_0x9cc3('0x24')]['hasOwnProperty'](_0x9cc3('0x2b'))){_0x4736a0[_0x9cc3('0x16')]=qs[_0x9cc3('0x16')](_0x4052e6[_0x9cc3('0x24')][_0x9cc3('0x16')]);_0x4736a0[_0x9cc3('0x15')]=qs[_0x9cc3('0x15')](_0x4052e6['query'][_0x9cc3('0x15')]);}_0x4736a0[_0x9cc3('0x2c')]=qs[_0x9cc3('0x2d')](_0x4052e6[_0x9cc3('0x24')][_0x9cc3('0x2d')]);_0x4736a0[_0x9cc3('0x2e')]=qs['filters'](_[_0x9cc3('0x2f')](_0x4052e6[_0x9cc3('0x24')],_0x25ea59['filters']));if(_0x5ebb58[_0x9cc3('0x25')]){if(_0x5ebb58['dateEnd']){_0x5ebb58['dateEnd']=moment(_0x5ebb58[_0x9cc3('0x30')])[_0x9cc3('0x31')](0x1,_0x9cc3('0x32'));}else{_0x5ebb58[_0x9cc3('0x30')]=moment(_0x5ebb58[_0x9cc3('0x25')])['add'](0x1,_0x9cc3('0x32'));}_['merge'](_0x4736a0[_0x9cc3('0x2e')],{'createdAt':{'$gte':_0x5ebb58[_0x9cc3('0x25')],'$lte':_0x5ebb58[_0x9cc3('0x30')]}});}if(_0x4052e6[_0x9cc3('0x24')][_0x9cc3('0x33')]){_0x4736a0[_0x9cc3('0x2e')]=_[_0x9cc3('0x34')](_0x4736a0[_0x9cc3('0x2e')],{'$or':_[_0x9cc3('0x35')](_0x4736a0[_0x9cc3('0x28')],function(_0x38435a){var _0x2f2231={};_0x2f2231[_0x38435a]={'$like':'%'+_0x4052e6[_0x9cc3('0x24')]['filter']+'%'};return _0x2f2231;})});}_0x4736a0=_[_0x9cc3('0x34')]({},_0x4736a0,_0x4052e6[_0x9cc3('0x36')]);var _0x397618={'where':_0x4736a0[_0x9cc3('0x2e')]};return db[_0x9cc3('0x37')][_0x9cc3('0x14')](_0x397618)[_0x9cc3('0x1b')](function(_0x57cc21){_0x1f7183[_0x9cc3('0x14')]=_0x57cc21;if(_0x4052e6[_0x9cc3('0x24')][_0x9cc3('0x38')]){_0x4736a0[_0x9cc3('0x39')]=[{'all':!![]}];}return db[_0x9cc3('0x37')][_0x9cc3('0x3a')](_0x4736a0);})[_0x9cc3('0x1b')](function(_0x5b1c9b){_0x1f7183[_0x9cc3('0x3b')]=_0x5b1c9b;return _0x1f7183;})['then'](respondWithFilteredResult(_0x27862f,_0x4736a0))[_0x9cc3('0x3c')](handleError(_0x27862f,null));};exports[_0x9cc3('0x3d')]=function(_0x253051,_0x4b2537){var _0x56126d={'raw':!![],'where':{'id':_0x253051[_0x9cc3('0x3e')]['id']}},_0x525029={};_0x525029[_0x9cc3('0x22')]=_[_0x9cc3('0x23')](db[_0x9cc3('0x37')]['rawAttributes']);_0x525029['query']=_[_0x9cc3('0x23')](_0x253051[_0x9cc3('0x24')]);_0x525029['filters']=_[_0x9cc3('0x27')](_0x525029['model'],_0x525029[_0x9cc3('0x24')]);_0x56126d[_0x9cc3('0x28')]=_[_0x9cc3('0x27')](_0x525029[_0x9cc3('0x22')],qs[_0x9cc3('0x29')](_0x253051[_0x9cc3('0x24')]['fields']));_0x56126d[_0x9cc3('0x28')]=_0x56126d[_0x9cc3('0x28')][_0x9cc3('0x2a')]?_0x56126d['attributes']:_0x525029[_0x9cc3('0x22')];if(_0x253051[_0x9cc3('0x24')][_0x9cc3('0x38')]){_0x56126d['include']=[{'all':!![]}];}_0x56126d=_[_0x9cc3('0x34')]({},_0x56126d,_0x253051[_0x9cc3('0x36')]);return db['SmsApplication'][_0x9cc3('0x3f')](_0x56126d)[_0x9cc3('0x1b')](handleEntityNotFound(_0x4b2537,null))[_0x9cc3('0x1b')](respondWithResult(_0x4b2537,null))[_0x9cc3('0x3c')](handleError(_0x4b2537,null));};exports['create']=function(_0xa0eb47,_0x5d8653){return db['SmsApplication'][_0x9cc3('0x40')](_0xa0eb47[_0x9cc3('0x41')],{})[_0x9cc3('0x1b')](respondWithResult(_0x5d8653,0xc9))[_0x9cc3('0x3c')](handleError(_0x5d8653,null));};exports[_0x9cc3('0x1a')]=function(_0x17be41,_0x81fd69){if(_0x17be41[_0x9cc3('0x41')]['id']){delete _0x17be41['body']['id'];}return db['SmsApplication']['find']({'where':{'id':_0x17be41[_0x9cc3('0x3e')]['id']}})[_0x9cc3('0x1b')](handleEntityNotFound(_0x81fd69,null))[_0x9cc3('0x1b')](saveUpdates(_0x17be41[_0x9cc3('0x41')],null))['then'](respondWithResult(_0x81fd69,null))['catch'](handleError(_0x81fd69,null));};exports[_0x9cc3('0x1c')]=function(_0x7272a0,_0x344d35){return db[_0x9cc3('0x37')]['find']({'where':{'id':_0x7272a0[_0x9cc3('0x3e')]['id']}})[_0x9cc3('0x1b')](handleEntityNotFound(_0x344d35,null))['then'](removeEntity(_0x344d35,null))[_0x9cc3('0x3c')](handleError(_0x344d35,null));};
\ No newline at end of file
index 5f19fd5..6e543f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcabe=['../../config/logger','api','bluebird','request-promise','exports','SmsApplication','sms_applications','lodash'];(function(_0xe24fc0,_0x444ff6){var _0x185c6b=function(_0x1adaea){while(--_0x1adaea){_0xe24fc0['push'](_0xe24fc0['shift']());}};_0x185c6b(++_0x444ff6);}(_0xcabe,0x1ef));var _0xecab=function(_0x42e26a,_0x5a2a42){_0x42e26a=_0x42e26a-0x0;var _0x5d8739=_0xcabe[_0x42e26a];return _0x5d8739;};'use strict';var _=require(_0xecab('0x0'));var util=require('util');var logger=require(_0xecab('0x1'))(_0xecab('0x2'));var moment=require('moment');var BPromise=require(_0xecab('0x3'));var rp=require(_0xecab('0x4'));var attributes=require('./smsApplication.attributes');module[_0xecab('0x5')]=function(_0xa979c2,_0x120cdf){return _0xa979c2['define'](_0xecab('0x6'),attributes,{'tableName':_0xecab('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0042=['util','api','moment','request-promise','exports','define','SmsApplication','sms_applications','lodash'];(function(_0x46e363,_0x45d7e2){var _0x3fb059=function(_0x5e6274){while(--_0x5e6274){_0x46e363['push'](_0x46e363['shift']());}};_0x3fb059(++_0x45d7e2);}(_0x0042,0x18b));var _0x2004=function(_0x57da0a,_0x284aed){_0x57da0a=_0x57da0a-0x0;var _0x3145d5=_0x0042[_0x57da0a];return _0x3145d5;};'use strict';var _=require(_0x2004('0x0'));var util=require(_0x2004('0x1'));var logger=require('../../config/logger')(_0x2004('0x2'));var moment=require(_0x2004('0x3'));var BPromise=require('bluebird');var rp=require(_0x2004('0x4'));var attributes=require('./smsApplication.attributes');module[_0x2004('0x5')]=function(_0x579345,_0x46d424){return _0x579345[_0x2004('0x6')](_0x2004('0x7'),attributes,{'tableName':_0x2004('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 926b7cf..efa46a2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x980c=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','SmsApplication,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','lodash','util','moment','randomstring'];(function(_0xdc6e06,_0x223ff9){var _0x5c7fa7=function(_0x38b0f7){while(--_0x38b0f7){_0xdc6e06['push'](_0xdc6e06['shift']());}};_0x5c7fa7(++_0x223ff9);}(_0x980c,0x161));var _0xc980=function(_0x5df829,_0x32cf16){_0x5df829=_0x5df829-0x0;var _0x3df1d1=_0x980c[_0x5df829];return _0x3df1d1;};'use strict';var _=require(_0xc980('0x0'));var util=require(_0xc980('0x1'));var moment=require(_0xc980('0x2'));var BPromise=require('bluebird');var rs=require(_0xc980('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xc980('0x4'));var logger=require(_0xc980('0x5'))(_0xc980('0x6'));var config=require(_0xc980('0x7'));var jayson=require(_0xc980('0x8'));var client=jayson[_0xc980('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x26a2bf,_0x30f661,_0x7fdfe1){return new BPromise(function(_0x108377,_0x57fe28){return client[_0xc980('0xa')](_0x26a2bf,_0x7fdfe1)[_0xc980('0xb')](function(_0x3ec29b){logger[_0xc980('0xc')](_0xc980('0xd'),_0x30f661,_0xc980('0xe'));logger[_0xc980('0xf')]('SmsApplication,\x20%s,\x20%s,\x20%s',_0x30f661,'request\x20sent',JSON[_0xc980('0x10')](_0x3ec29b));if(_0x3ec29b['error']){if(_0x3ec29b[_0xc980('0x11')]['code']===0x1f4){logger[_0xc980('0x11')]('SmsApplication,\x20%s,\x20%s',_0x30f661,_0x3ec29b[_0xc980('0x11')][_0xc980('0x12')]);return _0x57fe28(_0x3ec29b[_0xc980('0x11')][_0xc980('0x12')]);}logger[_0xc980('0x11')](_0xc980('0xd'),_0x30f661,_0x3ec29b[_0xc980('0x11')]['message']);return _0x108377(_0x3ec29b['error'][_0xc980('0x12')]);}else{logger['info']('SmsApplication,\x20%s,\x20%s',_0x30f661,_0xc980('0xe'));_0x108377(_0x3ec29b[_0xc980('0x13')][_0xc980('0x12')]);}})[_0xc980('0x14')](function(_0x11e104){logger[_0xc980('0x11')](_0xc980('0xd'),_0x30f661,_0x11e104);_0x57fe28(_0x11e104);});});}
\ No newline at end of file
+var _0x3b77=['../../config/environment','jayson/promise','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','randomstring','../../mysqldb','rpc'];(function(_0x3aefe7,_0x5eb2c8){var _0x3c484d=function(_0x191221){while(--_0x191221){_0x3aefe7['push'](_0x3aefe7['shift']());}};_0x3c484d(++_0x5eb2c8);}(_0x3b77,0x188));var _0x73b7=function(_0x436f3b,_0x344b88){_0x436f3b=_0x436f3b-0x0;var _0x426e8d=_0x3b77[_0x436f3b];return _0x426e8d;};'use strict';var _=require(_0x73b7('0x0'));var util=require(_0x73b7('0x1'));var moment=require(_0x73b7('0x2'));var BPromise=require(_0x73b7('0x3'));var rs=require(_0x73b7('0x4'));var fs=require('fs');var db=require(_0x73b7('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x73b7('0x6'));var config=require(_0x73b7('0x7'));var jayson=require(_0x73b7('0x8'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x54f38c,_0x537b28,_0x3e3542){return new BPromise(function(_0xd62d13,_0x32f7a4){return client['request'](_0x54f38c,_0x3e3542)[_0x73b7('0x9')](function(_0x4c7ae8){logger['info'](_0x73b7('0xa'),_0x537b28,_0x73b7('0xb'));logger[_0x73b7('0xc')](_0x73b7('0xd'),_0x537b28,_0x73b7('0xb'),JSON['stringify'](_0x4c7ae8));if(_0x4c7ae8[_0x73b7('0xe')]){if(_0x4c7ae8[_0x73b7('0xe')][_0x73b7('0xf')]===0x1f4){logger[_0x73b7('0xe')]('SmsApplication,\x20%s,\x20%s',_0x537b28,_0x4c7ae8[_0x73b7('0xe')][_0x73b7('0x10')]);return _0x32f7a4(_0x4c7ae8[_0x73b7('0xe')][_0x73b7('0x10')]);}logger[_0x73b7('0xe')](_0x73b7('0xa'),_0x537b28,_0x4c7ae8[_0x73b7('0xe')][_0x73b7('0x10')]);return _0xd62d13(_0x4c7ae8[_0x73b7('0xe')][_0x73b7('0x10')]);}else{logger[_0x73b7('0x11')](_0x73b7('0xa'),_0x537b28,_0x73b7('0xb'));_0xd62d13(_0x4c7ae8[_0x73b7('0x12')]['message']);}})['catch'](function(_0x2e6422){logger['error']('SmsApplication,\x20%s,\x20%s',_0x537b28,_0x2e6422);_0x32f7a4(_0x2e6422);});});}
\ No newline at end of file
index d0cffb6..92befcc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x44f8=['util','path','Router','../../components/auth/service','./smsInteraction.controller','get','isAuthenticated','/describe','describe','/:id','show','/:id/messages','post','create','addMessage','tracked','smsinteraction:addtags','addTags','put','sms','smsinteraction:update','update','delete','smsinteraction:destroy','destroy','removeTags','exports','multer'];(function(_0x1bb9a3,_0x11d873){var _0x36e207=function(_0x505cfc){while(--_0x505cfc){_0x1bb9a3['push'](_0x1bb9a3['shift']());}};_0x36e207(++_0x11d873);}(_0x44f8,0xfb));var _0x844f=function(_0x58c8b0,_0x49bd6d){_0x58c8b0=_0x58c8b0-0x0;var _0x1f6e90=_0x44f8[_0x58c8b0];return _0x1f6e90;};'use strict';var multer=require(_0x844f('0x0'));var util=require(_0x844f('0x1'));var path=require(_0x844f('0x2'));var express=require('express');var router=express[_0x844f('0x3')]();var auth=require(_0x844f('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x844f('0x5'));router[_0x844f('0x6')]('/',auth[_0x844f('0x7')](),controller['index']);router[_0x844f('0x6')](_0x844f('0x8'),auth[_0x844f('0x7')](),controller[_0x844f('0x9')]);router[_0x844f('0x6')](_0x844f('0xa'),auth[_0x844f('0x7')](),controller[_0x844f('0xb')]);router['get'](_0x844f('0xc'),auth[_0x844f('0x7')](),controller['getMessages']);router[_0x844f('0xd')]('/',auth[_0x844f('0x7')](),controller[_0x844f('0xe')]);router[_0x844f('0xd')](_0x844f('0xc'),auth[_0x844f('0x7')](),controller[_0x844f('0xf')]);router[_0x844f('0xd')]('/:id/tags',auth['isAuthenticated'](),interaction[_0x844f('0x10')]('sms',_0x844f('0x11')),controller[_0x844f('0x12')]);router[_0x844f('0x13')](_0x844f('0xa'),auth[_0x844f('0x7')](),interaction[_0x844f('0x10')](_0x844f('0x14'),_0x844f('0x15')),controller[_0x844f('0x16')]);router[_0x844f('0x17')]('/:id',auth['isAuthenticated'](),interaction[_0x844f('0x10')](_0x844f('0x14'),_0x844f('0x18')),controller[_0x844f('0x19')]);router[_0x844f('0x17')]('/:id/tags',auth['isAuthenticated'](),controller[_0x844f('0x1a')]);module[_0x844f('0x1b')]=router;
\ No newline at end of file
+var _0x676e=['post','/:id/tags','sms','addTags','put','smsinteraction:update','update','delete','tracked','smsinteraction:destroy','destroy','removeTags','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','/describe','describe','/:id','show','/:id/messages','getMessages','create'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x676e,0x9d));var _0xe676=function(_0x3d2012,_0x3d02b9){_0x3d2012=_0x3d2012-0x0;var _0x53d542=_0x676e[_0x3d2012];return _0x53d542;};'use strict';var multer=require(_0xe676('0x0'));var util=require(_0xe676('0x1'));var path=require(_0xe676('0x2'));var express=require(_0xe676('0x3'));var router=express[_0xe676('0x4')]();var auth=require(_0xe676('0x5'));var interaction=require(_0xe676('0x6'));var config=require(_0xe676('0x7'));var controller=require('./smsInteraction.controller');router[_0xe676('0x8')]('/',auth[_0xe676('0x9')](),controller['index']);router[_0xe676('0x8')](_0xe676('0xa'),auth[_0xe676('0x9')](),controller[_0xe676('0xb')]);router[_0xe676('0x8')](_0xe676('0xc'),auth[_0xe676('0x9')](),controller[_0xe676('0xd')]);router[_0xe676('0x8')](_0xe676('0xe'),auth[_0xe676('0x9')](),controller[_0xe676('0xf')]);router['post']('/',auth['isAuthenticated'](),controller[_0xe676('0x10')]);router['post']('/:id/messages',auth['isAuthenticated'](),controller['addMessage']);router[_0xe676('0x11')](_0xe676('0x12'),auth[_0xe676('0x9')](),interaction['tracked'](_0xe676('0x13'),'smsinteraction:addtags'),controller[_0xe676('0x14')]);router[_0xe676('0x15')](_0xe676('0xc'),auth[_0xe676('0x9')](),interaction['tracked']('sms',_0xe676('0x16')),controller[_0xe676('0x17')]);router[_0xe676('0x18')](_0xe676('0xc'),auth[_0xe676('0x9')](),interaction[_0xe676('0x19')](_0xe676('0x13'),_0xe676('0x1a')),controller[_0xe676('0x1b')]);router[_0xe676('0x18')](_0xe676('0x12'),auth[_0xe676('0x9')](),controller[_0xe676('0x1c')]);module['exports']=router;
\ No newline at end of file
index 06645fb..0d55009 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x09b4=['ENUM','out','sequelize','exports','BOOLEAN','DATE','STRING'];(function(_0x18ecbe,_0x121606){var _0x1ddf5a=function(_0x3c080b){while(--_0x3c080b){_0x18ecbe['push'](_0x18ecbe['shift']());}};_0x1ddf5a(++_0x121606);}(_0x09b4,0x18a));var _0x409b=function(_0x1203f,_0x554bbc){_0x1203f=_0x1203f-0x0;var _0x365f0a=_0x09b4[_0x1203f];return _0x365f0a;};'use strict';var Sequelize=require(_0x409b('0x0'));var moment=require('moment');module[_0x409b('0x1')]={'closed':{'type':Sequelize[_0x409b('0x2')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x409b('0x3')]},'disposition':{'type':Sequelize[_0x409b('0x4')]},'note':{'type':Sequelize['STRING']},'phone':{'type':Sequelize[_0x409b('0x4')]},'read1stAt':{'type':Sequelize[_0x409b('0x3')]},'firstMsgDirection':{'type':Sequelize[_0x409b('0x5')]('in',_0x409b('0x6')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x409b('0x3')]},'lastMsgDirection':{'type':Sequelize[_0x409b('0x5')]('in',_0x409b('0x6')),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
+var _0x3851=['DATE','ENUM','moment','exports'];(function(_0xa9bc2c,_0x3e95bc){var _0x2bc7b4=function(_0x3301b3){while(--_0x3301b3){_0xa9bc2c['push'](_0xa9bc2c['shift']());}};_0x2bc7b4(++_0x3e95bc);}(_0x3851,0x1b2));var _0x1385=function(_0x3a3649,_0x56db1c){_0x3a3649=_0x3a3649-0x0;var _0x3ddab=_0x3851[_0x3a3649];return _0x3ddab;};'use strict';var Sequelize=require('sequelize');var moment=require(_0x1385('0x0'));module[_0x1385('0x1')]={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize['STRING']},'phone':{'type':Sequelize['STRING']},'read1stAt':{'type':Sequelize[_0x1385('0x2')]},'firstMsgDirection':{'type':Sequelize['ENUM']('in','out'),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x1385('0x2')]},'lastMsgDirection':{'type':Sequelize[_0x1385('0x3')]('in','out'),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
index 465a476..1fe5bce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa64f=['day','filter','merge','map','options','tag','push','Tag','Tags','distinct','read','include','Messages','direction','createdAt','count','includeAll','User','Users','CmContact','Contact','Owner','fullname','internal','SmsAccount','Account','key','SmsMessage','color','findAll','rows','catch','show','params','length','find','create','body','describe','addMessage','ids','omit','getMessages','findOne','SmsInteractionId','$gte','format','YYYY-MM-DD\x20HH:mm:ss','setTags','spread','smsInteractionTags:save','removeTags','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./smsInteraction.socket','register','status','end','json','offset','limit','set','Content-Range','save','update','then','destroy','sendStatus','error','stack','name','send','index','SmsInteraction','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick'];(function(_0x522ebf,_0x5795b6){var _0x2b3aac=function(_0x1b9b2e){while(--_0x1b9b2e){_0x522ebf['push'](_0x522ebf['shift']());}};_0x2b3aac(++_0x5795b6);}(_0xa64f,0x110));var _0xfa64=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0xa64f[_0x57b54c];return _0x59cc19;};'use strict';var jsonpatch=require(_0xfa64('0x0'));var rp=require(_0xfa64('0x1'));var moment=require('moment');var BPromise=require(_0xfa64('0x2'));var Mustache=require(_0xfa64('0x3'));var util=require(_0xfa64('0x4'));var path=require(_0xfa64('0x5'));var sox=require(_0xfa64('0x6'));var csv=require('to-csv');var ejs=require(_0xfa64('0x7'));var fs=require('fs');var _=require(_0xfa64('0x8'));var squel=require(_0xfa64('0x9'));var crypto=require(_0xfa64('0xa'));var jsforce=require('jsforce');var deskjs=require(_0xfa64('0xb'));var toCsv=require(_0xfa64('0xc'));var querystring=require(_0xfa64('0xd'));var Papa=require(_0xfa64('0xe'));var qs=require(_0xfa64('0xf'));var logger=require('../../config/logger')(_0xfa64('0x10'));var utils=require(_0xfa64('0x11'));var config=require(_0xfa64('0x12'));var db=require(_0xfa64('0x13'))['db'];var socket=require(_0xfa64('0x14'))({'host':_0xfa64('0x15'),'port':0x18eb});require(_0xfa64('0x16'))[_0xfa64('0x17')](socket);function respondWithStatusCode(_0x30fa40,_0x58fb8f){_0x58fb8f=_0x58fb8f||0xcc;return function(_0x552251){if(_0x552251){return _0x30fa40['sendStatus'](_0x58fb8f);}return _0x30fa40[_0xfa64('0x18')](_0x58fb8f)[_0xfa64('0x19')]();};}function respondWithResult(_0x27d7e9,_0x39e7fd){_0x39e7fd=_0x39e7fd||0xc8;return function(_0x3dd6a3){if(_0x3dd6a3){return _0x27d7e9[_0xfa64('0x18')](_0x39e7fd)[_0xfa64('0x1a')](_0x3dd6a3);}};}function respondWithFilteredResult(_0x5f28d4,_0x12b1be){return function(_0x4a8813){if(_0x4a8813){var _0x3f8a35=_0x4a8813['count'],_0x5ba396=_0x12b1be[_0xfa64('0x1b')],_0x5f4627=_0x12b1be['offset']+_0x12b1be[_0xfa64('0x1c')],_0xf9577d;if(_0x5f4627>=_0x3f8a35){_0x5f4627=_0x3f8a35;_0xf9577d=0xc8;}else{_0xf9577d=0xce;}_0x5f28d4[_0xfa64('0x18')](_0xf9577d);return _0x5f28d4[_0xfa64('0x1d')](_0xfa64('0x1e'),_0x5ba396+'-'+_0x5f4627+'/'+_0x3f8a35)[_0xfa64('0x1a')](_0x4a8813);}return null;};}function patchUpdates(_0x2ee276){return function(_0x34493f){try{jsonpatch['apply'](_0x34493f,_0x2ee276,!![]);}catch(_0x17776f){return BPromise['reject'](_0x17776f);}return _0x34493f[_0xfa64('0x1f')]();};}function saveUpdates(_0x2e12e5,_0x43c0fc){return function(_0xbd991c){if(_0xbd991c){return _0xbd991c[_0xfa64('0x20')](_0x2e12e5)[_0xfa64('0x21')](function(_0x117e52){return _0x117e52;});}return null;};}function removeEntity(_0x1e1599,_0x1e1815){return function(_0xcb9423){if(_0xcb9423){return _0xcb9423[_0xfa64('0x22')]()['then'](function(){_0x1e1599[_0xfa64('0x18')](0xcc)[_0xfa64('0x19')]();});}};}function handleEntityNotFound(_0x464960,_0x54268e){return function(_0x4ed86c){if(!_0x4ed86c){_0x464960[_0xfa64('0x23')](0x194);}return _0x4ed86c;};}function handleError(_0x17fa6b,_0x57a1c4){_0x57a1c4=_0x57a1c4||0x1f4;return function(_0x2b84aa){logger[_0xfa64('0x24')](_0x2b84aa[_0xfa64('0x25')]);if(_0x2b84aa['name']){delete _0x2b84aa[_0xfa64('0x26')];}_0x17fa6b[_0xfa64('0x18')](_0x57a1c4)[_0xfa64('0x27')](_0x2b84aa);};}exports[_0xfa64('0x28')]=function(_0x8f0bcc,_0xa62c6e){var _0x34eb7b={},_0x32f5c4={},_0x28c066={'count':0x0,'rows':[]};var _0x1c1257=db[_0xfa64('0x29')][_0xfa64('0x2a')];_0x32f5c4['model']=_[_0xfa64('0x2b')](_0x1c1257);var _0x5d7ddc={'dateStart':_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x2d')],'dateEnd':_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x2e')]};delete _0x8f0bcc['query']['dateStart'];delete _0x8f0bcc['query']['dateEnd'];_0x32f5c4[_0xfa64('0x2c')]=_['keys'](_0x8f0bcc[_0xfa64('0x2c')]);_0x32f5c4[_0xfa64('0x2f')]=_[_0xfa64('0x30')](_0x32f5c4[_0xfa64('0x31')],_0x32f5c4['query']);_0x34eb7b[_0xfa64('0x32')]=_['intersection'](_0x32f5c4[_0xfa64('0x31')],qs[_0xfa64('0x33')](_0x8f0bcc['query'][_0xfa64('0x33')]));_0x34eb7b[_0xfa64('0x32')]=_0x34eb7b['attributes']['length']?_0x34eb7b['attributes']:_0x32f5c4[_0xfa64('0x31')];if(!_0x8f0bcc['query'][_0xfa64('0x34')](_0xfa64('0x35'))){_0x34eb7b[_0xfa64('0x1c')]=qs[_0xfa64('0x1c')](_0x8f0bcc['query'][_0xfa64('0x1c')]);_0x34eb7b[_0xfa64('0x1b')]=qs[_0xfa64('0x1b')](_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x1b')]);}_0x34eb7b[_0xfa64('0x36')]=qs[_0xfa64('0x37')](_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x37')]);_0x34eb7b[_0xfa64('0x38')]=qs[_0xfa64('0x2f')](_[_0xfa64('0x39')](_0x8f0bcc[_0xfa64('0x2c')],_0x32f5c4[_0xfa64('0x2f')]));if(_0x5d7ddc['dateStart']){if(_0x5d7ddc[_0xfa64('0x2e')]){_0x5d7ddc[_0xfa64('0x2e')]=moment(_0x5d7ddc[_0xfa64('0x2e')])['add'](0x1,_0xfa64('0x3a'));}else{_0x5d7ddc[_0xfa64('0x2e')]=moment(_0x5d7ddc[_0xfa64('0x2d')])['add'](0x1,_0xfa64('0x3a'));}_['merge'](_0x34eb7b[_0xfa64('0x38')],{'createdAt':{'$gte':_0x5d7ddc[_0xfa64('0x2d')],'$lte':_0x5d7ddc[_0xfa64('0x2e')]}});}if(_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x3b')]){_0x34eb7b[_0xfa64('0x38')]=_[_0xfa64('0x3c')](_0x34eb7b[_0xfa64('0x38')],{'$or':_[_0xfa64('0x3d')](_0x34eb7b['attributes'],function(_0x51022f){var _0x3b038b={};_0x3b038b[_0x51022f]={'$like':'%'+_0x8f0bcc['query'][_0xfa64('0x3b')]+'%'};return _0x3b038b;})});}_0x34eb7b=_[_0xfa64('0x3c')]({},_0x34eb7b,_0x8f0bcc[_0xfa64('0x3e')]);var _0x289d0d={'where':_0x34eb7b[_0xfa64('0x38')]};_0x289d0d['include']=[];if(_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x3f')]){_0x289d0d['include'][_0xfa64('0x40')]({'model':db[_0xfa64('0x41')],'as':_0xfa64('0x42'),'attributes':['id'],'where':{'id':_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x3f')]},'required':!![]});_0x289d0d[_0xfa64('0x43')]=!![];}if(_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x44')]){_0x289d0d[_0xfa64('0x45')]['push']({'model':db['SmsMessage'],'as':_0xfa64('0x46'),'attributes':['id',_0xfa64('0x47'),_0xfa64('0x48'),_0xfa64('0x44')],'where':{'direction':'in','read':_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x44')]||![]},'required':!![]});_0x289d0d[_0xfa64('0x43')]=!![];}return db[_0xfa64('0x29')][_0xfa64('0x49')](_0x289d0d)['then'](function(_0x529b48){_0x28c066[_0xfa64('0x49')]=_0x529b48;if(_0x8f0bcc['query'][_0xfa64('0x4a')]){_0x34eb7b['include']=[{'model':db[_0xfa64('0x4b')],'as':_0xfa64('0x4c'),'required':![],'attributes':['id',_0xfa64('0x26'),'fullname']},{'model':db[_0xfa64('0x4d')],'as':_0xfa64('0x4e'),'required':![]},{'model':db[_0xfa64('0x4b')],'as':_0xfa64('0x4f'),'attributes':[_0xfa64('0x26'),_0xfa64('0x50'),_0xfa64('0x51')],'required':![]},{'model':db[_0xfa64('0x52')],'as':_0xfa64('0x53'),'attributes':[_0xfa64('0x26'),_0xfa64('0x54')],'required':![]},{'model':db[_0xfa64('0x55')],'as':_0xfa64('0x46'),'attributes':['id',_0xfa64('0x47'),'createdAt',_0xfa64('0x44')],'where':{'direction':'in','read':_0x8f0bcc['query']['read']||![]},'required':_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x44')]||![]},{'model':db['Tag'],'as':_0xfa64('0x42'),'attributes':['id',_0xfa64('0x26'),_0xfa64('0x56')],'required':_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x3f')]?!![]:![]},{'model':db[_0xfa64('0x41')],'as':'ThroughTags','attributes':['id',_0xfa64('0x26'),'color'],'through':_0x8f0bcc[_0xfa64('0x2c')][_0xfa64('0x3f')]?{'attributes':[],'where':{'TagId':_0x8f0bcc[_0xfa64('0x2c')]['tag']||undefined}}:{},'required':_0x8f0bcc[_0xfa64('0x2c')]['tag']?!![]:![]}];}return db[_0xfa64('0x29')][_0xfa64('0x57')](_0x34eb7b);})[_0xfa64('0x21')](function(_0x20857f){_0x28c066[_0xfa64('0x58')]=_0x20857f;return _0x28c066;})[_0xfa64('0x21')](respondWithFilteredResult(_0xa62c6e,_0x34eb7b))[_0xfa64('0x59')](handleError(_0xa62c6e,null));};exports[_0xfa64('0x5a')]=function(_0x516003,_0x39b288){var _0x29b688={'raw':![],'where':{'id':_0x516003[_0xfa64('0x5b')]['id']}},_0x45549a={};_0x45549a[_0xfa64('0x31')]=_[_0xfa64('0x2b')](db[_0xfa64('0x29')][_0xfa64('0x2a')]);_0x45549a['query']=_['keys'](_0x516003[_0xfa64('0x2c')]);_0x45549a[_0xfa64('0x2f')]=_['intersection'](_0x45549a[_0xfa64('0x31')],_0x45549a[_0xfa64('0x2c')]);_0x29b688[_0xfa64('0x32')]=_[_0xfa64('0x30')](_0x45549a[_0xfa64('0x31')],qs[_0xfa64('0x33')](_0x516003[_0xfa64('0x2c')]['fields']));_0x29b688[_0xfa64('0x32')]=_0x29b688[_0xfa64('0x32')][_0xfa64('0x5c')]?_0x29b688['attributes']:_0x45549a[_0xfa64('0x31')];if(_0x516003['query'][_0xfa64('0x4a')]){_0x29b688[_0xfa64('0x45')]=[{'all':!![]}];}_0x29b688=_['merge']({},_0x29b688,_0x516003[_0xfa64('0x3e')]);return db[_0xfa64('0x29')][_0xfa64('0x5d')](_0x29b688)[_0xfa64('0x21')](handleEntityNotFound(_0x39b288,null))[_0xfa64('0x21')](respondWithResult(_0x39b288,null))[_0xfa64('0x59')](handleError(_0x39b288,null));};exports[_0xfa64('0x5e')]=function(_0x23247d,_0x5e3a55){return db['SmsInteraction'][_0xfa64('0x5e')](_0x23247d[_0xfa64('0x5f')],{})['then'](respondWithResult(_0x5e3a55,0xc9))[_0xfa64('0x59')](handleError(_0x5e3a55,null));};exports[_0xfa64('0x20')]=function(_0x48e86b,_0x420181){if(_0x48e86b[_0xfa64('0x5f')]['id']){delete _0x48e86b[_0xfa64('0x5f')]['id'];}return db[_0xfa64('0x29')][_0xfa64('0x5d')]({'where':{'id':_0x48e86b[_0xfa64('0x5b')]['id']}})[_0xfa64('0x21')](handleEntityNotFound(_0x420181,null))[_0xfa64('0x21')](saveUpdates(_0x48e86b[_0xfa64('0x5f')],null))[_0xfa64('0x21')](respondWithResult(_0x420181,null))[_0xfa64('0x59')](handleError(_0x420181,null));};exports[_0xfa64('0x22')]=function(_0x371a9c,_0x59673c){return db[_0xfa64('0x29')]['find']({'where':{'id':_0x371a9c[_0xfa64('0x5b')]['id']}})[_0xfa64('0x21')](handleEntityNotFound(_0x59673c,null))['then'](removeEntity(_0x59673c,null))[_0xfa64('0x59')](handleError(_0x59673c,null));};exports[_0xfa64('0x60')]=function(_0x4465e7,_0x938a5a){return db[_0xfa64('0x29')][_0xfa64('0x60')]()[_0xfa64('0x21')](respondWithResult(_0x938a5a,null))[_0xfa64('0x59')](handleError(_0x938a5a,null));};exports['addMessage']=function(_0x4edaab,_0x2f9505,_0x343a52){return db[_0xfa64('0x55')][_0xfa64('0x5d')]({'where':{'id':_0x4edaab['params']['id']}})['then'](handleEntityNotFound(_0x2f9505,null))[_0xfa64('0x21')](function(_0x392167){if(_0x392167){return _0x392167[_0xfa64('0x61')](_0x4edaab[_0xfa64('0x5f')][_0xfa64('0x62')],_[_0xfa64('0x63')](_0x4edaab[_0xfa64('0x5f')],[_0xfa64('0x62'),'id'])||{});}})[_0xfa64('0x21')](respondWithResult(_0x2f9505,null))[_0xfa64('0x59')](handleError(_0x2f9505,null));};exports[_0xfa64('0x64')]=function(_0x371ce7,_0x52f689,_0x1b5506){var _0x1d54fb={'raw':![],'where':{}};var _0x5b4131={};var _0x161684={'count':0x0,'rows':[]};return db[_0xfa64('0x29')][_0xfa64('0x65')]({'where':{'id':_0x371ce7[_0xfa64('0x5b')]['id']}})[_0xfa64('0x21')](handleEntityNotFound(_0x52f689,null))[_0xfa64('0x21')](function(_0x35a521){if(_0x35a521){_0x5b4131[_0xfa64('0x31')]=_['keys'](db[_0xfa64('0x55')][_0xfa64('0x2a')]);_0x5b4131[_0xfa64('0x2c')]=_[_0xfa64('0x2b')](_0x371ce7[_0xfa64('0x2c')]);_0x5b4131[_0xfa64('0x2f')]=_[_0xfa64('0x30')](_0x5b4131[_0xfa64('0x31')],_0x5b4131[_0xfa64('0x2c')]);_0x1d54fb[_0xfa64('0x32')]=_[_0xfa64('0x30')](_0x5b4131[_0xfa64('0x31')],qs[_0xfa64('0x33')](_0x371ce7[_0xfa64('0x2c')][_0xfa64('0x33')]));_0x1d54fb[_0xfa64('0x32')]=_0x1d54fb[_0xfa64('0x32')][_0xfa64('0x5c')]?_0x1d54fb[_0xfa64('0x32')]:_0x5b4131['model'];if(!_0x371ce7[_0xfa64('0x2c')]['hasOwnProperty'](_0xfa64('0x35'))){_0x1d54fb['limit']=qs[_0xfa64('0x1c')](_0x371ce7[_0xfa64('0x2c')][_0xfa64('0x1c')]);_0x1d54fb['offset']=qs[_0xfa64('0x1b')](_0x371ce7[_0xfa64('0x2c')][_0xfa64('0x1b')]);}_0x1d54fb[_0xfa64('0x36')]=qs[_0xfa64('0x37')](_0x371ce7[_0xfa64('0x2c')][_0xfa64('0x37')]);_0x1d54fb['where']=qs['filters'](_['pick'](_0x371ce7[_0xfa64('0x2c')],_0x5b4131[_0xfa64('0x2f')]));_0x1d54fb[_0xfa64('0x38')][_0xfa64('0x66')]=_0x35a521['id'];if(_0x371ce7[_0xfa64('0x2c')][_0xfa64('0x3b')]){_0x1d54fb[_0xfa64('0x38')]=_[_0xfa64('0x3c')](_0x1d54fb['where'],{'$or':_[_0xfa64('0x3d')](_0x1d54fb[_0xfa64('0x32')],function(_0x4d13e2){var _0x211bc2={};_0x211bc2[_0x4d13e2]={'$like':'%'+_0x371ce7['query'][_0xfa64('0x3b')]+'%'};return _0x211bc2;})});}if(_0x371ce7['query'][_0xfa64('0x67')]){var _0x570839=_0x371ce7['query'][_0xfa64('0x67')]['split'](',');var _0x5485ea={};_0x5485ea[_0x570839[0x0]]={'$gte':moment(_0x570839[0x1])[_0xfa64('0x68')](_0xfa64('0x69'))};_0x1d54fb[_0xfa64('0x38')]=_[_0xfa64('0x3c')](_0x1d54fb[_0xfa64('0x38')],_0x5485ea);}_0x1d54fb=_[_0xfa64('0x3c')]({},_0x1d54fb,_0x371ce7['options']);return db[_0xfa64('0x55')][_0xfa64('0x49')]({'where':_0x1d54fb[_0xfa64('0x38')]})[_0xfa64('0x21')](function(_0x13dfa7){_0x161684['count']=_0x13dfa7;if(_0x371ce7[_0xfa64('0x2c')][_0xfa64('0x4a')]){_0x1d54fb[_0xfa64('0x45')]=[{'all':!![]}];}return db['SmsMessage'][_0xfa64('0x57')](_0x1d54fb);})[_0xfa64('0x21')](function(_0x4e130c){_0x161684[_0xfa64('0x58')]=_0x4e130c;return _0x161684;});}})[_0xfa64('0x21')](respondWithFilteredResult(_0x52f689,_0x1d54fb))['catch'](handleError(_0x52f689,null));};exports['addTags']=function(_0x24b1cc,_0x18ba0f,_0x49a83d){return db['SmsInteraction'][_0xfa64('0x5d')]({'where':{'id':_0x24b1cc[_0xfa64('0x5b')]['id']}})[_0xfa64('0x21')](handleEntityNotFound(_0x18ba0f,null))['then'](function(_0x3526eb){if(_0x3526eb){return _0x3526eb[_0xfa64('0x6a')](_0x24b1cc[_0xfa64('0x5f')][_0xfa64('0x62')],_[_0xfa64('0x63')](_0x24b1cc[_0xfa64('0x5f')],[_0xfa64('0x62'),'id'])||{})[_0xfa64('0x6b')](function(){return db[_0xfa64('0x41')]['findAll']({'attributes':['id',_0xfa64('0x26'),_0xfa64('0x56')],'where':{'id':_0x24b1cc[_0xfa64('0x5f')][_0xfa64('0x62')]}});})['then'](function(_0x21c6a0){socket['emit'](_0xfa64('0x6c'),{'id':Number(_0x24b1cc['params']['id']),'tags':_0x21c6a0||[]});return{'id':Number(_0x24b1cc[_0xfa64('0x5b')]['id']),'tags':_0x21c6a0||[]};});}})[_0xfa64('0x21')](respondWithResult(_0x18ba0f,null))[_0xfa64('0x59')](handleError(_0x18ba0f,null));};exports[_0xfa64('0x6d')]=function(_0x5bd188,_0x392e37,_0x5f2e06){var _0x377e8a;return db['SmsInteraction'][_0xfa64('0x5d')]({'where':{'id':_0x5bd188[_0xfa64('0x5b')]['id']}})[_0xfa64('0x21')](handleEntityNotFound(_0x392e37,null))[_0xfa64('0x21')](function(_0x4f085c){if(_0x4f085c){return _0x4f085c[_0xfa64('0x6d')](_0x5bd188[_0xfa64('0x2c')][_0xfa64('0x62')]);}})['then'](respondWithStatusCode(_0x392e37,null))[_0xfa64('0x59')](handleError(_0x392e37,null));};
\ No newline at end of file
+var _0x6532=['addTags','setTags','spread','emit','smsInteractionTags:save','removeTags','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','./smsInteraction.socket','register','end','json','count','offset','limit','Content-Range','apply','reject','save','update','then','destroy','status','sendStatus','error','stack','name','send','index','SmsInteraction','model','query','dateStart','dateEnd','keys','filters','attributes','intersection','fields','hasOwnProperty','nolimit','sort','where','pick','add','merge','filter','map','tag','include','push','Tag','Tags','read','Messages','direction','createdAt','distinct','includeAll','User','fullname','CmContact','Contact','Owner','internal','SmsAccount','Account','key','SmsMessage','ThroughTags','color','findAll','rows','show','params','rawAttributes','length','options','find','catch','body','describe','addMessage','omit','ids','getMessages','order','$gte','YYYY-MM-DD\x20HH:mm:ss'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x6532,0x14d));var _0x2653=function(_0x39ab14,_0x1c6d59){_0x39ab14=_0x39ab14-0x0;var _0x5a661e=_0x6532[_0x39ab14];return _0x5a661e;};'use strict';var jsonpatch=require(_0x2653('0x0'));var rp=require(_0x2653('0x1'));var moment=require(_0x2653('0x2'));var BPromise=require(_0x2653('0x3'));var Mustache=require(_0x2653('0x4'));var util=require(_0x2653('0x5'));var path=require(_0x2653('0x6'));var sox=require('sox');var csv=require(_0x2653('0x7'));var ejs=require(_0x2653('0x8'));var fs=require('fs');var _=require(_0x2653('0x9'));var squel=require(_0x2653('0xa'));var crypto=require(_0x2653('0xb'));var jsforce=require(_0x2653('0xc'));var deskjs=require(_0x2653('0xd'));var toCsv=require(_0x2653('0x7'));var querystring=require(_0x2653('0xe'));var Papa=require(_0x2653('0xf'));var qs=require('../../components/parsers/qs');var logger=require(_0x2653('0x10'))(_0x2653('0x11'));var utils=require(_0x2653('0x12'));var config=require(_0x2653('0x13'));var db=require(_0x2653('0x14'))['db'];var socket=require(_0x2653('0x15'))({'host':'localhost','port':0x18eb});require(_0x2653('0x16'))[_0x2653('0x17')](socket);function respondWithStatusCode(_0x1c6b06,_0x395f87){_0x395f87=_0x395f87||0xcc;return function(_0x344a27){if(_0x344a27){return _0x1c6b06['sendStatus'](_0x395f87);}return _0x1c6b06['status'](_0x395f87)[_0x2653('0x18')]();};}function respondWithResult(_0x398507,_0x1f3578){_0x1f3578=_0x1f3578||0xc8;return function(_0x457d29){if(_0x457d29){return _0x398507['status'](_0x1f3578)[_0x2653('0x19')](_0x457d29);}};}function respondWithFilteredResult(_0x4e3877,_0x27a725){return function(_0x5625b9){if(_0x5625b9){var _0x5f3815=_0x5625b9[_0x2653('0x1a')],_0xfc9dc6=_0x27a725[_0x2653('0x1b')],_0x3627a1=_0x27a725[_0x2653('0x1b')]+_0x27a725[_0x2653('0x1c')],_0x4aae4d;if(_0x3627a1>=_0x5f3815){_0x3627a1=_0x5f3815;_0x4aae4d=0xc8;}else{_0x4aae4d=0xce;}_0x4e3877['status'](_0x4aae4d);return _0x4e3877['set'](_0x2653('0x1d'),_0xfc9dc6+'-'+_0x3627a1+'/'+_0x5f3815)['json'](_0x5625b9);}return null;};}function patchUpdates(_0x3ad3f3){return function(_0x55b879){try{jsonpatch[_0x2653('0x1e')](_0x55b879,_0x3ad3f3,!![]);}catch(_0x49e889){return BPromise[_0x2653('0x1f')](_0x49e889);}return _0x55b879[_0x2653('0x20')]();};}function saveUpdates(_0x32dec2,_0x398d8b){return function(_0xcccd74){if(_0xcccd74){return _0xcccd74[_0x2653('0x21')](_0x32dec2)[_0x2653('0x22')](function(_0x21c759){return _0x21c759;});}return null;};}function removeEntity(_0x23aa4e,_0x23f83d){return function(_0x426fa2){if(_0x426fa2){return _0x426fa2[_0x2653('0x23')]()[_0x2653('0x22')](function(){_0x23aa4e[_0x2653('0x24')](0xcc)[_0x2653('0x18')]();});}};}function handleEntityNotFound(_0x33f20c,_0x5e489b){return function(_0x185c14){if(!_0x185c14){_0x33f20c[_0x2653('0x25')](0x194);}return _0x185c14;};}function handleError(_0x7e2d46,_0x4e7f98){_0x4e7f98=_0x4e7f98||0x1f4;return function(_0x2cb492){logger[_0x2653('0x26')](_0x2cb492[_0x2653('0x27')]);if(_0x2cb492[_0x2653('0x28')]){delete _0x2cb492['name'];}_0x7e2d46[_0x2653('0x24')](_0x4e7f98)[_0x2653('0x29')](_0x2cb492);};}exports[_0x2653('0x2a')]=function(_0x43025e,_0x44fe7a){var _0x3914e4={},_0x23bf92={},_0x45679f={'count':0x0,'rows':[]};var _0x4c39da=db[_0x2653('0x2b')]['rawAttributes'];_0x23bf92[_0x2653('0x2c')]=_['keys'](_0x4c39da);var _0x2724fb={'dateStart':_0x43025e[_0x2653('0x2d')][_0x2653('0x2e')],'dateEnd':_0x43025e['query']['dateEnd']};delete _0x43025e[_0x2653('0x2d')][_0x2653('0x2e')];delete _0x43025e['query'][_0x2653('0x2f')];_0x23bf92[_0x2653('0x2d')]=_[_0x2653('0x30')](_0x43025e[_0x2653('0x2d')]);_0x23bf92[_0x2653('0x31')]=_['intersection'](_0x23bf92['model'],_0x23bf92[_0x2653('0x2d')]);_0x3914e4[_0x2653('0x32')]=_[_0x2653('0x33')](_0x23bf92['model'],qs[_0x2653('0x34')](_0x43025e['query']['fields']));_0x3914e4[_0x2653('0x32')]=_0x3914e4[_0x2653('0x32')]['length']?_0x3914e4[_0x2653('0x32')]:_0x23bf92['model'];if(!_0x43025e[_0x2653('0x2d')][_0x2653('0x35')](_0x2653('0x36'))){_0x3914e4[_0x2653('0x1c')]=qs[_0x2653('0x1c')](_0x43025e['query'][_0x2653('0x1c')]);_0x3914e4[_0x2653('0x1b')]=qs[_0x2653('0x1b')](_0x43025e[_0x2653('0x2d')][_0x2653('0x1b')]);}_0x3914e4['order']=qs['sort'](_0x43025e[_0x2653('0x2d')][_0x2653('0x37')]);_0x3914e4[_0x2653('0x38')]=qs['filters'](_[_0x2653('0x39')](_0x43025e[_0x2653('0x2d')],_0x23bf92['filters']));if(_0x2724fb[_0x2653('0x2e')]){if(_0x2724fb['dateEnd']){_0x2724fb[_0x2653('0x2f')]=moment(_0x2724fb['dateEnd'])[_0x2653('0x3a')](0x1,'day');}else{_0x2724fb[_0x2653('0x2f')]=moment(_0x2724fb[_0x2653('0x2e')])[_0x2653('0x3a')](0x1,'day');}_[_0x2653('0x3b')](_0x3914e4[_0x2653('0x38')],{'createdAt':{'$gte':_0x2724fb[_0x2653('0x2e')],'$lte':_0x2724fb[_0x2653('0x2f')]}});}if(_0x43025e[_0x2653('0x2d')][_0x2653('0x3c')]){_0x3914e4[_0x2653('0x38')]=_['merge'](_0x3914e4['where'],{'$or':_[_0x2653('0x3d')](_0x3914e4['attributes'],function(_0x985586){var _0xd7595f={};_0xd7595f[_0x985586]={'$like':'%'+_0x43025e[_0x2653('0x2d')][_0x2653('0x3c')]+'%'};return _0xd7595f;})});}_0x3914e4=_['merge']({},_0x3914e4,_0x43025e['options']);var _0x2f36d3={'where':_0x3914e4['where']};_0x2f36d3['include']=[];if(_0x43025e[_0x2653('0x2d')][_0x2653('0x3e')]){_0x2f36d3[_0x2653('0x3f')][_0x2653('0x40')]({'model':db[_0x2653('0x41')],'as':_0x2653('0x42'),'attributes':['id'],'where':{'id':_0x43025e['query']['tag']},'required':!![]});_0x2f36d3['distinct']=!![];}if(_0x43025e[_0x2653('0x2d')][_0x2653('0x43')]){_0x2f36d3['include']['push']({'model':db['SmsMessage'],'as':_0x2653('0x44'),'attributes':['id',_0x2653('0x45'),_0x2653('0x46'),_0x2653('0x43')],'where':{'direction':'in','read':_0x43025e[_0x2653('0x2d')][_0x2653('0x43')]||![]},'required':!![]});_0x2f36d3[_0x2653('0x47')]=!![];}return db['SmsInteraction'][_0x2653('0x1a')](_0x2f36d3)[_0x2653('0x22')](function(_0x257ba5){_0x45679f[_0x2653('0x1a')]=_0x257ba5;if(_0x43025e[_0x2653('0x2d')][_0x2653('0x48')]){_0x3914e4[_0x2653('0x3f')]=[{'model':db[_0x2653('0x49')],'as':'Users','required':![],'attributes':['id',_0x2653('0x28'),_0x2653('0x4a')]},{'model':db[_0x2653('0x4b')],'as':_0x2653('0x4c'),'required':![]},{'model':db['User'],'as':_0x2653('0x4d'),'attributes':[_0x2653('0x28'),_0x2653('0x4a'),_0x2653('0x4e')],'required':![]},{'model':db[_0x2653('0x4f')],'as':_0x2653('0x50'),'attributes':[_0x2653('0x28'),_0x2653('0x51')],'required':![]},{'model':db[_0x2653('0x52')],'as':_0x2653('0x44'),'attributes':['id',_0x2653('0x45'),'createdAt','read'],'where':{'direction':'in','read':_0x43025e[_0x2653('0x2d')][_0x2653('0x43')]||![]},'required':_0x43025e[_0x2653('0x2d')][_0x2653('0x43')]||![]},{'model':db[_0x2653('0x41')],'as':'Tags','attributes':['id',_0x2653('0x28'),'color'],'required':_0x43025e['query'][_0x2653('0x3e')]?!![]:![]},{'model':db[_0x2653('0x41')],'as':_0x2653('0x53'),'attributes':['id',_0x2653('0x28'),_0x2653('0x54')],'through':_0x43025e[_0x2653('0x2d')][_0x2653('0x3e')]?{'attributes':[],'where':{'TagId':_0x43025e['query'][_0x2653('0x3e')]||undefined}}:{},'required':_0x43025e[_0x2653('0x2d')][_0x2653('0x3e')]?!![]:![]}];}return db[_0x2653('0x2b')][_0x2653('0x55')](_0x3914e4);})[_0x2653('0x22')](function(_0xe9fbd6){_0x45679f[_0x2653('0x56')]=_0xe9fbd6;return _0x45679f;})[_0x2653('0x22')](respondWithFilteredResult(_0x44fe7a,_0x3914e4))['catch'](handleError(_0x44fe7a,null));};exports[_0x2653('0x57')]=function(_0x584156,_0x3f42c6){var _0x443fae={'raw':![],'where':{'id':_0x584156[_0x2653('0x58')]['id']}},_0x17b0c2={};_0x17b0c2[_0x2653('0x2c')]=_[_0x2653('0x30')](db[_0x2653('0x2b')][_0x2653('0x59')]);_0x17b0c2[_0x2653('0x2d')]=_[_0x2653('0x30')](_0x584156[_0x2653('0x2d')]);_0x17b0c2[_0x2653('0x31')]=_[_0x2653('0x33')](_0x17b0c2['model'],_0x17b0c2[_0x2653('0x2d')]);_0x443fae['attributes']=_['intersection'](_0x17b0c2[_0x2653('0x2c')],qs[_0x2653('0x34')](_0x584156[_0x2653('0x2d')]['fields']));_0x443fae[_0x2653('0x32')]=_0x443fae['attributes'][_0x2653('0x5a')]?_0x443fae[_0x2653('0x32')]:_0x17b0c2[_0x2653('0x2c')];if(_0x584156[_0x2653('0x2d')][_0x2653('0x48')]){_0x443fae['include']=[{'all':!![]}];}_0x443fae=_['merge']({},_0x443fae,_0x584156[_0x2653('0x5b')]);return db[_0x2653('0x2b')][_0x2653('0x5c')](_0x443fae)[_0x2653('0x22')](handleEntityNotFound(_0x3f42c6,null))[_0x2653('0x22')](respondWithResult(_0x3f42c6,null))[_0x2653('0x5d')](handleError(_0x3f42c6,null));};exports['create']=function(_0x3e2e6c,_0x347343){return db[_0x2653('0x2b')]['create'](_0x3e2e6c['body'],{})[_0x2653('0x22')](respondWithResult(_0x347343,0xc9))[_0x2653('0x5d')](handleError(_0x347343,null));};exports[_0x2653('0x21')]=function(_0x4c5da9,_0x2ba9a1){if(_0x4c5da9[_0x2653('0x5e')]['id']){delete _0x4c5da9[_0x2653('0x5e')]['id'];}return db['SmsInteraction'][_0x2653('0x5c')]({'where':{'id':_0x4c5da9[_0x2653('0x58')]['id']}})[_0x2653('0x22')](handleEntityNotFound(_0x2ba9a1,null))[_0x2653('0x22')](saveUpdates(_0x4c5da9[_0x2653('0x5e')],null))[_0x2653('0x22')](respondWithResult(_0x2ba9a1,null))[_0x2653('0x5d')](handleError(_0x2ba9a1,null));};exports[_0x2653('0x23')]=function(_0x3e38bc,_0x3c4988){return db['SmsInteraction'][_0x2653('0x5c')]({'where':{'id':_0x3e38bc['params']['id']}})['then'](handleEntityNotFound(_0x3c4988,null))[_0x2653('0x22')](removeEntity(_0x3c4988,null))[_0x2653('0x5d')](handleError(_0x3c4988,null));};exports[_0x2653('0x5f')]=function(_0x3ec525,_0x1f112d){return db[_0x2653('0x2b')][_0x2653('0x5f')]()[_0x2653('0x22')](respondWithResult(_0x1f112d,null))[_0x2653('0x5d')](handleError(_0x1f112d,null));};exports[_0x2653('0x60')]=function(_0xe13e27,_0x5552a0,_0x5b339d){return db[_0x2653('0x52')][_0x2653('0x5c')]({'where':{'id':_0xe13e27['params']['id']}})[_0x2653('0x22')](handleEntityNotFound(_0x5552a0,null))[_0x2653('0x22')](function(_0x2ddb39){if(_0x2ddb39){return _0x2ddb39[_0x2653('0x60')](_0xe13e27['body']['ids'],_[_0x2653('0x61')](_0xe13e27[_0x2653('0x5e')],[_0x2653('0x62'),'id'])||{});}})[_0x2653('0x22')](respondWithResult(_0x5552a0,null))[_0x2653('0x5d')](handleError(_0x5552a0,null));};exports[_0x2653('0x63')]=function(_0x51755d,_0x56d750,_0x8bdb5a){var _0x1ccc19={'raw':![],'where':{}};var _0x50bbcf={};var _0x50d18d={'count':0x0,'rows':[]};return db[_0x2653('0x2b')]['findOne']({'where':{'id':_0x51755d[_0x2653('0x58')]['id']}})['then'](handleEntityNotFound(_0x56d750,null))[_0x2653('0x22')](function(_0x44fefa){if(_0x44fefa){_0x50bbcf['model']=_['keys'](db['SmsMessage'][_0x2653('0x59')]);_0x50bbcf[_0x2653('0x2d')]=_[_0x2653('0x30')](_0x51755d[_0x2653('0x2d')]);_0x50bbcf[_0x2653('0x31')]=_[_0x2653('0x33')](_0x50bbcf['model'],_0x50bbcf[_0x2653('0x2d')]);_0x1ccc19[_0x2653('0x32')]=_[_0x2653('0x33')](_0x50bbcf[_0x2653('0x2c')],qs[_0x2653('0x34')](_0x51755d['query'][_0x2653('0x34')]));_0x1ccc19[_0x2653('0x32')]=_0x1ccc19[_0x2653('0x32')]['length']?_0x1ccc19[_0x2653('0x32')]:_0x50bbcf['model'];if(!_0x51755d[_0x2653('0x2d')]['hasOwnProperty'](_0x2653('0x36'))){_0x1ccc19['limit']=qs['limit'](_0x51755d[_0x2653('0x2d')][_0x2653('0x1c')]);_0x1ccc19['offset']=qs[_0x2653('0x1b')](_0x51755d[_0x2653('0x2d')]['offset']);}_0x1ccc19[_0x2653('0x64')]=qs[_0x2653('0x37')](_0x51755d[_0x2653('0x2d')][_0x2653('0x37')]);_0x1ccc19[_0x2653('0x38')]=qs['filters'](_[_0x2653('0x39')](_0x51755d[_0x2653('0x2d')],_0x50bbcf[_0x2653('0x31')]));_0x1ccc19['where']['SmsInteractionId']=_0x44fefa['id'];if(_0x51755d[_0x2653('0x2d')][_0x2653('0x3c')]){_0x1ccc19[_0x2653('0x38')]=_['merge'](_0x1ccc19['where'],{'$or':_[_0x2653('0x3d')](_0x1ccc19[_0x2653('0x32')],function(_0x370bbb){var _0x4b63fa={};_0x4b63fa[_0x370bbb]={'$like':'%'+_0x51755d[_0x2653('0x2d')]['filter']+'%'};return _0x4b63fa;})});}if(_0x51755d[_0x2653('0x2d')]['$gte']){var _0x313925=_0x51755d['query'][_0x2653('0x65')]['split'](',');var _0x46c429={};_0x46c429[_0x313925[0x0]]={'$gte':moment(_0x313925[0x1])['format'](_0x2653('0x66'))};_0x1ccc19[_0x2653('0x38')]=_[_0x2653('0x3b')](_0x1ccc19[_0x2653('0x38')],_0x46c429);}_0x1ccc19=_[_0x2653('0x3b')]({},_0x1ccc19,_0x51755d[_0x2653('0x5b')]);return db[_0x2653('0x52')]['count']({'where':_0x1ccc19[_0x2653('0x38')]})[_0x2653('0x22')](function(_0x4a5dc4){_0x50d18d[_0x2653('0x1a')]=_0x4a5dc4;if(_0x51755d['query'][_0x2653('0x48')]){_0x1ccc19['include']=[{'all':!![]}];}return db[_0x2653('0x52')]['findAll'](_0x1ccc19);})[_0x2653('0x22')](function(_0x24dae3){_0x50d18d[_0x2653('0x56')]=_0x24dae3;return _0x50d18d;});}})[_0x2653('0x22')](respondWithFilteredResult(_0x56d750,_0x1ccc19))[_0x2653('0x5d')](handleError(_0x56d750,null));};exports[_0x2653('0x67')]=function(_0xa67c94,_0x599055,_0x3b5384){return db[_0x2653('0x2b')]['find']({'where':{'id':_0xa67c94[_0x2653('0x58')]['id']}})['then'](handleEntityNotFound(_0x599055,null))[_0x2653('0x22')](function(_0x533393){if(_0x533393){return _0x533393[_0x2653('0x68')](_0xa67c94[_0x2653('0x5e')]['ids'],_[_0x2653('0x61')](_0xa67c94[_0x2653('0x5e')],[_0x2653('0x62'),'id'])||{})[_0x2653('0x69')](function(){return db[_0x2653('0x41')][_0x2653('0x55')]({'attributes':['id','name',_0x2653('0x54')],'where':{'id':_0xa67c94[_0x2653('0x5e')][_0x2653('0x62')]}});})[_0x2653('0x22')](function(_0x57ebed){socket[_0x2653('0x6a')](_0x2653('0x6b'),{'id':Number(_0xa67c94[_0x2653('0x58')]['id']),'tags':_0x57ebed||[]});return{'id':Number(_0xa67c94['params']['id']),'tags':_0x57ebed||[]};});}})[_0x2653('0x22')](respondWithResult(_0x599055,null))['catch'](handleError(_0x599055,null));};exports['removeTags']=function(_0x277b40,_0x2e954,_0x2f5e1f){var _0x113cd5;return db[_0x2653('0x2b')]['find']({'where':{'id':_0x277b40['params']['id']}})[_0x2653('0x22')](handleEntityNotFound(_0x2e954,null))['then'](function(_0x2f816d){if(_0x2f816d){return _0x2f816d[_0x2653('0x6c')](_0x277b40[_0x2653('0x2d')][_0x2653('0x62')]);}})[_0x2653('0x22')](respondWithStatusCode(_0x2e954,null))[_0x2653('0x5d')](handleError(_0x2e954,null));};
\ No newline at end of file
index ac5f8aa..2486781 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4fe7=['remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','SmsInteraction','setMaxListeners','save','update'];(function(_0xabbd2f,_0x44d05a){var _0x34a040=function(_0x3736d9){while(--_0x3736d9){_0xabbd2f['push'](_0xabbd2f['shift']());}};_0x34a040(++_0x44d05a);}(_0x4fe7,0x73));var _0x74fe=function(_0xe76e54,_0x3de015){_0xe76e54=_0xe76e54-0x0;var _0x27dd8e=_0x4fe7[_0xe76e54];return _0x27dd8e;};'use strict';var EventEmitter=require(_0x74fe('0x0'));var SmsInteraction=require(_0x74fe('0x1'))['db'][_0x74fe('0x2')];var SmsInteractionEvents=new EventEmitter();SmsInteractionEvents[_0x74fe('0x3')](0x0);var events={'afterCreate':_0x74fe('0x4'),'afterUpdate':_0x74fe('0x5'),'afterDestroy':_0x74fe('0x6')};function emitEvent(_0x347bf3){return function(_0x10683a,_0x361ba1,_0x5a711c){SmsInteractionEvents[_0x74fe('0x7')](_0x347bf3+':'+_0x10683a['id'],_0x10683a);SmsInteractionEvents[_0x74fe('0x7')](_0x347bf3,_0x10683a);_0x5a711c(null);};}for(var e in events){if(events[_0x74fe('0x8')](e)){var event=events[e];SmsInteraction[_0x74fe('0x9')](e,emitEvent(event));}}module[_0x74fe('0xa')]=SmsInteractionEvents;
\ No newline at end of file
+var _0xd6c2=['../../mysqldb','SmsInteraction','setMaxListeners','remove','emit','hook'];(function(_0x19941e,_0x14b439){var _0x2e3aab=function(_0x4fbee8){while(--_0x4fbee8){_0x19941e['push'](_0x19941e['shift']());}};_0x2e3aab(++_0x14b439);}(_0xd6c2,0x14a));var _0x2d6c=function(_0x3831e6,_0x4c84ac){_0x3831e6=_0x3831e6-0x0;var _0x34688c=_0xd6c2[_0x3831e6];return _0x34688c;};'use strict';var EventEmitter=require('events');var SmsInteraction=require(_0x2d6c('0x0'))['db'][_0x2d6c('0x1')];var SmsInteractionEvents=new EventEmitter();SmsInteractionEvents[_0x2d6c('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x2d6c('0x3')};function emitEvent(_0x1f5f9a){return function(_0xa325,_0x3e7a2b,_0x42d1e4){SmsInteractionEvents[_0x2d6c('0x4')](_0x1f5f9a+':'+_0xa325['id'],_0xa325);SmsInteractionEvents[_0x2d6c('0x4')](_0x1f5f9a,_0xa325);_0x42d1e4(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SmsInteraction[_0x2d6c('0x5')](e,emitEvent(event));}}module['exports']=SmsInteractionEvents;
\ No newline at end of file
index ca0271b..0da5fb0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3094=['lodash','util','../../config/logger','api','moment','bluebird','request-promise','exports','define','sms_interactions'];(function(_0x4a33f0,_0x2db431){var _0x584c5e=function(_0x3097af){while(--_0x3097af){_0x4a33f0['push'](_0x4a33f0['shift']());}};_0x584c5e(++_0x2db431);}(_0x3094,0x17c));var _0x4309=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0x3094[_0x3bf83f];return _0x22c4a9;};'use strict';var _=require(_0x4309('0x0'));var util=require(_0x4309('0x1'));var logger=require(_0x4309('0x2'))(_0x4309('0x3'));var moment=require(_0x4309('0x4'));var BPromise=require(_0x4309('0x5'));var rp=require(_0x4309('0x6'));var attributes=require('./smsInteraction.attributes');module[_0x4309('0x7')]=function(_0x19d94d,_0x630665){return _0x19d94d[_0x4309('0x8')]('SmsInteraction',attributes,{'tableName':_0x4309('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7f6f=['../../config/logger','api','moment','bluebird','exports','define','SmsInteraction','sms_interactions','lodash','util'];(function(_0x3e4fbe,_0x1a550d){var _0x158ba5=function(_0x446f40){while(--_0x446f40){_0x3e4fbe['push'](_0x3e4fbe['shift']());}};_0x158ba5(++_0x1a550d);}(_0x7f6f,0x6c));var _0xf7f6=function(_0x5293a1,_0x351c64){_0x5293a1=_0x5293a1-0x0;var _0x5085aa=_0x7f6f[_0x5293a1];return _0x5085aa;};'use strict';var _=require(_0xf7f6('0x0'));var util=require(_0xf7f6('0x1'));var logger=require(_0xf7f6('0x2'))(_0xf7f6('0x3'));var moment=require(_0xf7f6('0x4'));var BPromise=require(_0xf7f6('0x5'));var rp=require('request-promise');var attributes=require('./smsInteraction.attributes');module[_0xf7f6('0x6')]=function(_0x323719,_0x1c267a){return _0x323719[_0xf7f6('0x7')](_0xf7f6('0x8'),attributes,{'tableName':_0xf7f6('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 9a2ffe8..96b4f66 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2211=['update','body','options','raw','where','limit','AddTagsToSmsInteraction','SmsInteraction','find','addTags','ids','omit','spread','AddTags','lodash','util','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','jayson/promise','client','http','socket.io-emitter','localhost','./smsInteraction.socket','register','request','then','info','SmsInteraction,\x20%s,\x20%s','request\x20sent','debug','SmsInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','UpdateSmsInteraction'];(function(_0x1d1191,_0x125bdc){var _0x15cc47=function(_0x3c2807){while(--_0x3c2807){_0x1d1191['push'](_0x1d1191['shift']());}};_0x15cc47(++_0x125bdc);}(_0x2211,0x12d));var _0x1221=function(_0xf2726b,_0x87deb7){_0xf2726b=_0xf2726b-0x0;var _0xa61a5=_0x2211[_0xf2726b];return _0xa61a5;};'use strict';var _=require(_0x1221('0x0'));var util=require(_0x1221('0x1'));var moment=require('moment');var BPromise=require(_0x1221('0x2'));var rs=require(_0x1221('0x3'));var fs=require('fs');var db=require(_0x1221('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x1221('0x5'))(_0x1221('0x6'));var config=require('../../config/environment');var jayson=require(_0x1221('0x7'));var client=jayson[_0x1221('0x8')][_0x1221('0x9')]({'port':0x232a});var socket=require(_0x1221('0xa'))({'host':_0x1221('0xb'),'port':0x18eb});require(_0x1221('0xc'))[_0x1221('0xd')](socket);function respondWithRpcPromise(_0x3106d0,_0xca1399,_0x424941){return new BPromise(function(_0x1fbb5b,_0x5ce5ca){return client[_0x1221('0xe')](_0x3106d0,_0x424941)[_0x1221('0xf')](function(_0x427dfa){logger[_0x1221('0x10')](_0x1221('0x11'),_0xca1399,_0x1221('0x12'));logger[_0x1221('0x13')](_0x1221('0x14'),_0xca1399,'request\x20sent',JSON[_0x1221('0x15')](_0x427dfa));if(_0x427dfa[_0x1221('0x16')]){if(_0x427dfa['error'][_0x1221('0x17')]===0x1f4){logger['error']('SmsInteraction,\x20%s,\x20%s',_0xca1399,_0x427dfa['error'][_0x1221('0x18')]);return _0x5ce5ca(_0x427dfa[_0x1221('0x16')][_0x1221('0x18')]);}logger[_0x1221('0x16')](_0x1221('0x11'),_0xca1399,_0x427dfa[_0x1221('0x16')][_0x1221('0x18')]);return _0x1fbb5b(_0x427dfa[_0x1221('0x16')][_0x1221('0x18')]);}else{logger[_0x1221('0x10')](_0x1221('0x11'),_0xca1399,'request\x20sent');_0x1fbb5b(_0x427dfa['result']['message']);}})[_0x1221('0x19')](function(_0x34e669){logger[_0x1221('0x16')](_0x1221('0x11'),_0xca1399,_0x34e669);_0x5ce5ca(_0x34e669);});});}exports[_0x1221('0x1a')]=function(_0x3b0476){var _0x2cb29b=this;return new Promise(function(_0x41b10d,_0x1144c5){return db['SmsInteraction'][_0x1221('0x1b')](_0x3b0476[_0x1221('0x1c')],{'raw':_0x3b0476[_0x1221('0x1d')]?_0x3b0476[_0x1221('0x1d')][_0x1221('0x1e')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3b0476['options']?_0x3b0476[_0x1221('0x1d')][_0x1221('0x1f')]||null:null,'attributes':_0x3b0476['options']?_0x3b0476['options']['attributes']||null:null,'limit':_0x3b0476['options']?_0x3b0476['options'][_0x1221('0x20')]||null:null})[_0x1221('0xf')](function(_0x33973b){logger[_0x1221('0x10')]('UpdateSmsInteraction',_0x3b0476);logger['debug']('UpdateSmsInteraction',_0x3b0476,JSON['stringify'](_0x33973b));_0x41b10d(_0x33973b);})[_0x1221('0x19')](function(_0x5b03c8){logger[_0x1221('0x16')]('UpdateSmsInteraction',_0x5b03c8[_0x1221('0x18')],_0x3b0476);_0x1144c5(_0x2cb29b[_0x1221('0x16')](0x1f4,_0x5b03c8[_0x1221('0x18')]));});});};exports[_0x1221('0x21')]=function(_0xb6de7b){return new Promise(function(_0x582f86,_0x160416){return db[_0x1221('0x22')][_0x1221('0x23')]({'where':_0xb6de7b[_0x1221('0x1d')]?_0xb6de7b[_0x1221('0x1d')][_0x1221('0x1f')]||null:null})[_0x1221('0xf')](function(_0x222cab){if(_0x222cab){return _0x222cab[_0x1221('0x24')](_0xb6de7b[_0x1221('0x1c')][_0x1221('0x25')],_[_0x1221('0x26')](_0xb6de7b['body'],['ids','id'])||{});}})[_0x1221('0x27')](function(_0x1017f1){logger[_0x1221('0x10')](_0x1221('0x28'),_0xb6de7b);logger[_0x1221('0x13')]('AddTags',_0xb6de7b,JSON[_0x1221('0x15')](_0x1017f1));_0x582f86(_0x1017f1);})[_0x1221('0x19')](function(_0x131ffb){logger[_0x1221('0x16')](_0x1221('0x28'),_0x131ffb[_0x1221('0x18')],_0xb6de7b);_0x160416(_this['error'](0x1f4,_0x131ffb[_0x1221('0x18')]));});});};
\ No newline at end of file
+var _0x9885=['bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','./smsInteraction.socket','register','request','then','info','SmsInteraction,\x20%s,\x20%s','request\x20sent','debug','SmsInteraction,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','UpdateSmsInteraction','SmsInteraction','update','body','options','raw','where','attributes','stringify','ids','spread','AddTags','lodash','util'];(function(_0x5c2e3e,_0x26ecd3){var _0x53f64a=function(_0x2b5df8){while(--_0x2b5df8){_0x5c2e3e['push'](_0x5c2e3e['shift']());}};_0x53f64a(++_0x26ecd3);}(_0x9885,0x1ba));var _0x5988=function(_0x142fd9,_0x4b90e2){_0x142fd9=_0x142fd9-0x0;var _0x1ce1f0=_0x9885[_0x142fd9];return _0x1ce1f0;};'use strict';var _=require(_0x5988('0x0'));var util=require(_0x5988('0x1'));var moment=require('moment');var BPromise=require(_0x5988('0x2'));var rs=require(_0x5988('0x3'));var fs=require('fs');var db=require(_0x5988('0x4'))['db'];var utils=require(_0x5988('0x5'));var logger=require('../../config/logger')(_0x5988('0x6'));var config=require(_0x5988('0x7'));var jayson=require(_0x5988('0x8'));var client=jayson[_0x5988('0x9')][_0x5988('0xa')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':'localhost','port':0x18eb});require(_0x5988('0xb'))[_0x5988('0xc')](socket);function respondWithRpcPromise(_0x4cea70,_0x1afffb,_0x21edbf){return new BPromise(function(_0x58b2c5,_0x1482ff){return client[_0x5988('0xd')](_0x4cea70,_0x21edbf)[_0x5988('0xe')](function(_0x8684a5){logger[_0x5988('0xf')](_0x5988('0x10'),_0x1afffb,_0x5988('0x11'));logger[_0x5988('0x12')](_0x5988('0x13'),_0x1afffb,'request\x20sent',JSON['stringify'](_0x8684a5));if(_0x8684a5[_0x5988('0x14')]){if(_0x8684a5['error'][_0x5988('0x15')]===0x1f4){logger[_0x5988('0x14')](_0x5988('0x10'),_0x1afffb,_0x8684a5['error'][_0x5988('0x16')]);return _0x1482ff(_0x8684a5[_0x5988('0x14')][_0x5988('0x16')]);}logger['error'](_0x5988('0x10'),_0x1afffb,_0x8684a5[_0x5988('0x14')][_0x5988('0x16')]);return _0x58b2c5(_0x8684a5[_0x5988('0x14')][_0x5988('0x16')]);}else{logger[_0x5988('0xf')](_0x5988('0x10'),_0x1afffb,_0x5988('0x11'));_0x58b2c5(_0x8684a5[_0x5988('0x17')]['message']);}})[_0x5988('0x18')](function(_0x1e4c35){logger['error']('SmsInteraction,\x20%s,\x20%s',_0x1afffb,_0x1e4c35);_0x1482ff(_0x1e4c35);});});}exports[_0x5988('0x19')]=function(_0x18e1cf){var _0x48a5eb=this;return new Promise(function(_0x35aa44,_0xd73110){return db[_0x5988('0x1a')][_0x5988('0x1b')](_0x18e1cf[_0x5988('0x1c')],{'raw':_0x18e1cf[_0x5988('0x1d')]?_0x18e1cf[_0x5988('0x1d')][_0x5988('0x1e')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x18e1cf['options']?_0x18e1cf['options'][_0x5988('0x1f')]||null:null,'attributes':_0x18e1cf[_0x5988('0x1d')]?_0x18e1cf[_0x5988('0x1d')][_0x5988('0x20')]||null:null,'limit':_0x18e1cf[_0x5988('0x1d')]?_0x18e1cf['options']['limit']||null:null})[_0x5988('0xe')](function(_0x27b9e7){logger[_0x5988('0xf')](_0x5988('0x19'),_0x18e1cf);logger[_0x5988('0x12')](_0x5988('0x19'),_0x18e1cf,JSON[_0x5988('0x21')](_0x27b9e7));_0x35aa44(_0x27b9e7);})['catch'](function(_0x6c2942){logger[_0x5988('0x14')](_0x5988('0x19'),_0x6c2942[_0x5988('0x16')],_0x18e1cf);_0xd73110(_0x48a5eb[_0x5988('0x14')](0x1f4,_0x6c2942[_0x5988('0x16')]));});});};exports['AddTagsToSmsInteraction']=function(_0x395c09){return new Promise(function(_0x4d2c22,_0x17e680){return db[_0x5988('0x1a')]['find']({'where':_0x395c09['options']?_0x395c09['options'][_0x5988('0x1f')]||null:null})[_0x5988('0xe')](function(_0xeb3a9f){if(_0xeb3a9f){return _0xeb3a9f['addTags'](_0x395c09[_0x5988('0x1c')][_0x5988('0x22')],_['omit'](_0x395c09[_0x5988('0x1c')],['ids','id'])||{});}})[_0x5988('0x23')](function(_0xbc495d){logger[_0x5988('0xf')](_0x5988('0x24'),_0x395c09);logger[_0x5988('0x12')](_0x5988('0x24'),_0x395c09,JSON[_0x5988('0x21')](_0xbc495d));_0x4d2c22(_0xbc495d);})[_0x5988('0x18')](function(_0x449ed7){logger[_0x5988('0x14')](_0x5988('0x24'),_0x449ed7[_0x5988('0x16')],_0x395c09);_0x17e680(_this[_0x5988('0x14')](0x1f4,_0x449ed7[_0x5988('0x16')]));});});};
\ No newline at end of file
index 58327cf..96a692f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa994=['length','./smsInteraction.events','save','remove','emit'];(function(_0x1c2e50,_0x360cb3){var _0x39e931=function(_0x1b92e7){while(--_0x1b92e7){_0x1c2e50['push'](_0x1c2e50['shift']());}};_0x39e931(++_0x360cb3);}(_0xa994,0x173));var _0x4a99=function(_0x2b5c7a,_0x18b7cd){_0x2b5c7a=_0x2b5c7a-0x0;var _0x435895=_0xa994[_0x2b5c7a];return _0x435895;};'use strict';var SmsInteractionEvents=require(_0x4a99('0x0'));var events=[_0x4a99('0x1'),_0x4a99('0x2'),'update'];function createListener(_0x512f94,_0x5c7397){return function(_0x2d8f73){_0x5c7397[_0x4a99('0x3')](_0x512f94,_0x2d8f73);};}function removeListener(_0xbdbad7,_0x46532b){return function(){SmsInteractionEvents['removeListener'](_0xbdbad7,_0x46532b);};}exports['register']=function(_0x1713b9){for(var _0x5e5c12=0x0,_0x51b21b=events[_0x4a99('0x4')];_0x5e5c12<_0x51b21b;_0x5e5c12++){var _0x10d3da=events[_0x5e5c12];var _0x26dfe1=createListener('smsInteraction:'+_0x10d3da,_0x1713b9);SmsInteractionEvents['on'](_0x10d3da,_0x26dfe1);}};
\ No newline at end of file
+var _0xfbbf=['./smsInteraction.events','save','remove','update','removeListener','register','length','smsInteraction:'];(function(_0x4c5956,_0x577a04){var _0xe3a06d=function(_0x2b73bc){while(--_0x2b73bc){_0x4c5956['push'](_0x4c5956['shift']());}};_0xe3a06d(++_0x577a04);}(_0xfbbf,0x78));var _0xffbb=function(_0x5e5bea,_0x1079bc){_0x5e5bea=_0x5e5bea-0x0;var _0x331e35=_0xfbbf[_0x5e5bea];return _0x331e35;};'use strict';var SmsInteractionEvents=require(_0xffbb('0x0'));var events=[_0xffbb('0x1'),_0xffbb('0x2'),_0xffbb('0x3')];function createListener(_0x38900c,_0x5bc719){return function(_0x583506){_0x5bc719['emit'](_0x38900c,_0x583506);};}function removeListener(_0x48fcf3,_0x15dad4){return function(){SmsInteractionEvents[_0xffbb('0x4')](_0x48fcf3,_0x15dad4);};}exports[_0xffbb('0x5')]=function(_0x3f9b73){for(var _0x5ba426=0x0,_0x16f740=events[_0xffbb('0x6')];_0x5ba426<_0x16f740;_0x5ba426++){var _0x49de41=events[_0x5ba426];var _0x55a8be=createListener(_0xffbb('0x7')+_0x49de41,_0x3f9b73);SmsInteractionEvents['on'](_0x49de41,_0x55a8be);}};
\ No newline at end of file
index 1155026..d2ee44c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8294=['index','get','/describe','isAuthenticated','describe','/:id','post','tracked','smsmessage:create','create','/:id/status','status','update','put','/:id/accept','/:id/reject','reject','destroy','exports','util','path','express','Router','../../components/auth/service','./smsMessage.controller'];(function(_0x34a6e8,_0x5c1469){var _0x29148a=function(_0x3ba49e){while(--_0x3ba49e){_0x34a6e8['push'](_0x34a6e8['shift']());}};_0x29148a(++_0x5c1469);}(_0x8294,0x158));var _0x4829=function(_0x386782,_0x2957c3){_0x386782=_0x386782-0x0;var _0x4697bc=_0x8294[_0x386782];return _0x4697bc;};'use strict';var multer=require('multer');var util=require(_0x4829('0x0'));var path=require(_0x4829('0x1'));var express=require(_0x4829('0x2'));var router=express[_0x4829('0x3')]();var auth=require(_0x4829('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x4829('0x5'));router['get']('/',auth['isAuthenticated'](),controller[_0x4829('0x6')]);router[_0x4829('0x7')](_0x4829('0x8'),auth[_0x4829('0x9')](),controller[_0x4829('0xa')]);router[_0x4829('0x7')](_0x4829('0xb'),auth[_0x4829('0x9')](),controller['show']);router[_0x4829('0xc')]('/',auth[_0x4829('0x9')](),interaction[_0x4829('0xd')]('sms',_0x4829('0xe')),controller[_0x4829('0xf')]);router[_0x4829('0xc')](_0x4829('0x10'),controller[_0x4829('0x11')]);router['put'](_0x4829('0xb'),auth[_0x4829('0x9')](),controller[_0x4829('0x12')]);router[_0x4829('0x13')](_0x4829('0x14'),auth[_0x4829('0x9')](),controller['accept']);router[_0x4829('0x13')](_0x4829('0x15'),auth[_0x4829('0x9')](),controller[_0x4829('0x16')]);router['delete'](_0x4829('0xb'),auth[_0x4829('0x9')](),controller[_0x4829('0x17')]);module[_0x4829('0x18')]=router;
\ No newline at end of file
+var _0xbc09=['../../config/environment','./smsMessage.controller','get','isAuthenticated','/describe','describe','/:id','show','post','tracked','sms','smsmessage:create','/:id/status','status','update','put','/:id/accept','accept','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x3c5d70,_0x32e437){var _0x527b58=function(_0x2db860){while(--_0x2db860){_0x3c5d70['push'](_0x3c5d70['shift']());}};_0x527b58(++_0x32e437);}(_0xbc09,0xa1));var _0x9bc0=function(_0x184152,_0x55dd8d){_0x184152=_0x184152-0x0;var _0x32d3b5=_0xbc09[_0x184152];return _0x32d3b5;};'use strict';var multer=require(_0x9bc0('0x0'));var util=require(_0x9bc0('0x1'));var path=require(_0x9bc0('0x2'));var express=require(_0x9bc0('0x3'));var router=express[_0x9bc0('0x4')]();var auth=require(_0x9bc0('0x5'));var interaction=require(_0x9bc0('0x6'));var config=require(_0x9bc0('0x7'));var controller=require(_0x9bc0('0x8'));router[_0x9bc0('0x9')]('/',auth[_0x9bc0('0xa')](),controller['index']);router[_0x9bc0('0x9')](_0x9bc0('0xb'),auth['isAuthenticated'](),controller[_0x9bc0('0xc')]);router['get'](_0x9bc0('0xd'),auth[_0x9bc0('0xa')](),controller[_0x9bc0('0xe')]);router[_0x9bc0('0xf')]('/',auth['isAuthenticated'](),interaction[_0x9bc0('0x10')](_0x9bc0('0x11'),_0x9bc0('0x12')),controller['create']);router['post'](_0x9bc0('0x13'),controller[_0x9bc0('0x14')]);router['put'](_0x9bc0('0xd'),auth[_0x9bc0('0xa')](),controller[_0x9bc0('0x15')]);router[_0x9bc0('0x16')](_0x9bc0('0x17'),auth[_0x9bc0('0xa')](),controller[_0x9bc0('0x18')]);router[_0x9bc0('0x16')]('/:id/reject',auth[_0x9bc0('0xa')](),controller['reject']);router[_0x9bc0('0x19')]('/:id',auth[_0x9bc0('0xa')](),controller[_0x9bc0('0x1a')]);module[_0x9bc0('0x1b')]=router;
\ No newline at end of file
index 807e0cc..c971ea9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7fd6=['sequelize','TEXT','medium','BOOLEAN','ENUM','out','STRING'];(function(_0x33c36d,_0x1c6ace){var _0x34eb1a=function(_0x7652a5){while(--_0x7652a5){_0x33c36d['push'](_0x33c36d['shift']());}};_0x34eb1a(++_0x1c6ace);}(_0x7fd6,0x157));var _0x67fd=function(_0xb5b9c9,_0x387ae3){_0xb5b9c9=_0xb5b9c9-0x0;var _0x142a4e=_0x7fd6[_0xb5b9c9];return _0x142a4e;};'use strict';var Sequelize=require(_0x67fd('0x0'));module['exports']={'body':{'type':Sequelize[_0x67fd('0x1')](_0x67fd('0x2')),'allowNull':![]},'read':{'type':Sequelize[_0x67fd('0x3')],'defaultValue':![]},'direction':{'type':Sequelize[_0x67fd('0x4')]('in',_0x67fd('0x5')),'defaultValue':_0x67fd('0x5'),'allowNull':![]},'messageId':{'type':Sequelize['STRING'](0xbe)},'phone':{'type':Sequelize[_0x67fd('0x6')]},'readAt':{'type':Sequelize['DATE']},'secret':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
+var _0xa786=['DATE','sequelize','exports','TEXT','BOOLEAN','out','STRING'];(function(_0xa46b15,_0x75aeed){var _0x53084b=function(_0x22f688){while(--_0x22f688){_0xa46b15['push'](_0xa46b15['shift']());}};_0x53084b(++_0x75aeed);}(_0xa786,0x71));var _0x6a78=function(_0x1bd610,_0x5c200c){_0x1bd610=_0x1bd610-0x0;var _0x546a3a=_0xa786[_0x1bd610];return _0x546a3a;};'use strict';var Sequelize=require(_0x6a78('0x0'));module[_0x6a78('0x1')]={'body':{'type':Sequelize[_0x6a78('0x2')]('medium'),'allowNull':![]},'read':{'type':Sequelize[_0x6a78('0x3')],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in','out'),'defaultValue':_0x6a78('0x4'),'allowNull':![]},'messageId':{'type':Sequelize[_0x6a78('0x5')](0xbe)},'phone':{'type':Sequelize[_0x6a78('0x5')]},'readAt':{'type':Sequelize[_0x6a78('0x6')]},'secret':{'type':Sequelize[_0x6a78('0x3')],'defaultValue':![]}};
\ No newline at end of file
index 04a780a..95ed46b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfd49=['map','options','includeAll','include','findAll','catch','show','params','rawAttributes','find','create','body','describe','sms-interactions','accept','sms','read','readAt','format','UserId','user','CmContact','Contact','get','SmsInteractionId','isNil','read1stAt','[SMSMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','interaction','null','AcceptMessage','acceptMessage','manual','interface','channel','event','../../config/logger','RejectMessage','rejectMessage','SIP/%s','EventManager','rejectmessage','debug','received\x20delivery\x20report\x20from','type','twilio','MessageSid','plivo','MessageUUID','indexOf','sent','delivered','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','jsforce','querystring','../../components/parsers/qs','api','../../config/utils','../../mysqldb','socket.io-emitter','localhost','register','jayson/promise','client','http','then','info','SmsMessage,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','status','end','json','count','offset','Content-Range','apply','reject','update','destroy','sendStatus','name','send','index','SmsMessage','keys','query','dateStart','dateEnd','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','filters','add','day','where','filter','merge'];(function(_0x2abaae,_0x29fd8b){var _0x5b5745=function(_0x2f6218){while(--_0x2f6218){_0x2abaae['push'](_0x2abaae['shift']());}};_0x5b5745(++_0x29fd8b);}(_0xfd49,0x121));var _0x9fd4=function(_0x12cd12,_0x4d4351){_0x12cd12=_0x12cd12-0x0;var _0x4bed1b=_0xfd49[_0x12cd12];return _0x4bed1b;};'use strict';var jsonpatch=require(_0x9fd4('0x0'));var rp=require(_0x9fd4('0x1'));var moment=require(_0x9fd4('0x2'));var BPromise=require(_0x9fd4('0x3'));var Mustache=require(_0x9fd4('0x4'));var util=require('util');var path=require(_0x9fd4('0x5'));var sox=require(_0x9fd4('0x6'));var csv=require(_0x9fd4('0x7'));var ejs=require(_0x9fd4('0x8'));var fs=require('fs');var _=require(_0x9fd4('0x9'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x9fd4('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x9fd4('0xb'));var Papa=require('papaparse');var qs=require(_0x9fd4('0xc'));var logger=require('../../config/logger')(_0x9fd4('0xd'));var utils=require(_0x9fd4('0xe'));var config=require('../../config/environment');var db=require(_0x9fd4('0xf'))['db'];var socket=require(_0x9fd4('0x10'))({'host':_0x9fd4('0x11'),'port':0x18eb});require('./smsMessage.socket')[_0x9fd4('0x12')](socket);var jayson=require(_0x9fd4('0x13'));var client=jayson[_0x9fd4('0x14')][_0x9fd4('0x15')]({'port':0x232c});var client9002=jayson[_0x9fd4('0x14')][_0x9fd4('0x15')]({'port':0x232a});function respondWithRpcPromise(_0x338e09,_0x46e613,_0x3d3bef,_0x5d164e){return new BPromise(function(_0x17cd23,_0x4047e0){var _0x2bdb31=_0x5d164e||client;return _0x2bdb31['request'](_0x338e09,_0x3d3bef)[_0x9fd4('0x16')](function(_0x2749bf){logger[_0x9fd4('0x17')](_0x9fd4('0x18'),_0x46e613,_0x9fd4('0x19'));logger['debug']('SmsMessage,\x20%s,\x20%s,\x20%s',_0x46e613,'request\x20sent',JSON[_0x9fd4('0x1a')](_0x2749bf));if(_0x2749bf[_0x9fd4('0x1b')]){if(_0x2749bf[_0x9fd4('0x1b')][_0x9fd4('0x1c')]===0x1f4){logger[_0x9fd4('0x1b')](_0x9fd4('0x18'),_0x46e613,_0x2749bf[_0x9fd4('0x1b')][_0x9fd4('0x1d')]);return _0x4047e0(_0x2749bf['error'][_0x9fd4('0x1d')]);}logger[_0x9fd4('0x1b')](_0x9fd4('0x18'),_0x46e613,_0x2749bf[_0x9fd4('0x1b')][_0x9fd4('0x1d')]);return _0x17cd23(_0x2749bf[_0x9fd4('0x1b')][_0x9fd4('0x1d')]);}else{logger['info'](_0x9fd4('0x18'),_0x46e613,_0x9fd4('0x19'));_0x17cd23(_0x2749bf[_0x9fd4('0x1e')][_0x9fd4('0x1d')]);}})['catch'](function(_0x18c402){logger[_0x9fd4('0x1b')](_0x9fd4('0x18'),_0x46e613,_0x18c402);_0x4047e0(_0x18c402);});});}function respondWithStatusCode(_0x381ea5,_0x5c65b2){_0x5c65b2=_0x5c65b2||0xcc;return function(_0x3066f1){if(_0x3066f1){return _0x381ea5['sendStatus'](_0x5c65b2);}return _0x381ea5[_0x9fd4('0x1f')](_0x5c65b2)[_0x9fd4('0x20')]();};}function respondWithResult(_0x3574a3,_0x476cbc){_0x476cbc=_0x476cbc||0xc8;return function(_0x56d428){if(_0x56d428){return _0x3574a3[_0x9fd4('0x1f')](_0x476cbc)[_0x9fd4('0x21')](_0x56d428);}};}function respondWithFilteredResult(_0x1e89a6,_0x4cd3a6){return function(_0x48c6c1){if(_0x48c6c1){var _0x5da55f=_0x48c6c1[_0x9fd4('0x22')],_0x43b5ad=_0x4cd3a6[_0x9fd4('0x23')],_0x2f6682=_0x4cd3a6[_0x9fd4('0x23')]+_0x4cd3a6['limit'],_0x386a84;if(_0x2f6682>=_0x5da55f){_0x2f6682=_0x5da55f;_0x386a84=0xc8;}else{_0x386a84=0xce;}_0x1e89a6[_0x9fd4('0x1f')](_0x386a84);return _0x1e89a6['set'](_0x9fd4('0x24'),_0x43b5ad+'-'+_0x2f6682+'/'+_0x5da55f)[_0x9fd4('0x21')](_0x48c6c1);}return null;};}function patchUpdates(_0x3d4b40){return function(_0x50fed9){try{jsonpatch[_0x9fd4('0x25')](_0x50fed9,_0x3d4b40,!![]);}catch(_0x8cf39e){return BPromise[_0x9fd4('0x26')](_0x8cf39e);}return _0x50fed9['save']();};}function saveUpdates(_0x4a9bcc,_0x26b659){return function(_0x1e1678){if(_0x1e1678){return _0x1e1678[_0x9fd4('0x27')](_0x4a9bcc)[_0x9fd4('0x16')](function(_0x5c0232){return _0x5c0232;});}return null;};}function removeEntity(_0x54e0e8,_0x384d41){return function(_0x414600){if(_0x414600){return _0x414600[_0x9fd4('0x28')]()[_0x9fd4('0x16')](function(){_0x54e0e8[_0x9fd4('0x1f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x56210c,_0x328a44){return function(_0x4a30ca){if(!_0x4a30ca){_0x56210c[_0x9fd4('0x29')](0x194);}return _0x4a30ca;};}function handleError(_0x1f2f58,_0x592589){_0x592589=_0x592589||0x1f4;return function(_0x7d661b){logger[_0x9fd4('0x1b')](_0x7d661b['stack']);if(_0x7d661b[_0x9fd4('0x2a')]){delete _0x7d661b['name'];}_0x1f2f58[_0x9fd4('0x1f')](_0x592589)[_0x9fd4('0x2b')](_0x7d661b);};}exports[_0x9fd4('0x2c')]=function(_0x129df8,_0x4121af){var _0x3b915a={},_0x15ebd4={},_0x204075={'count':0x0,'rows':[]};var _0x4cc30b=db[_0x9fd4('0x2d')]['rawAttributes'];_0x15ebd4['model']=_[_0x9fd4('0x2e')](_0x4cc30b);var _0x1544c9={'dateStart':_0x129df8['query']['dateStart'],'dateEnd':_0x129df8[_0x9fd4('0x2f')]['dateEnd']};delete _0x129df8['query'][_0x9fd4('0x30')];delete _0x129df8['query'][_0x9fd4('0x31')];_0x15ebd4['query']=_[_0x9fd4('0x2e')](_0x129df8['query']);_0x15ebd4['filters']=_[_0x9fd4('0x32')](_0x15ebd4[_0x9fd4('0x33')],_0x15ebd4['query']);_0x3b915a[_0x9fd4('0x34')]=_['intersection'](_0x15ebd4[_0x9fd4('0x33')],qs['fields'](_0x129df8[_0x9fd4('0x2f')][_0x9fd4('0x35')]));_0x3b915a[_0x9fd4('0x34')]=_0x3b915a[_0x9fd4('0x34')][_0x9fd4('0x36')]?_0x3b915a['attributes']:_0x15ebd4['model'];if(!_0x129df8[_0x9fd4('0x2f')][_0x9fd4('0x37')](_0x9fd4('0x38'))){_0x3b915a[_0x9fd4('0x39')]=qs['limit'](_0x129df8[_0x9fd4('0x2f')][_0x9fd4('0x39')]);_0x3b915a[_0x9fd4('0x23')]=qs[_0x9fd4('0x23')](_0x129df8[_0x9fd4('0x2f')][_0x9fd4('0x23')]);}_0x3b915a['order']=qs[_0x9fd4('0x3a')](_0x129df8[_0x9fd4('0x2f')][_0x9fd4('0x3a')]);_0x3b915a['where']=qs[_0x9fd4('0x3b')](_['pick'](_0x129df8[_0x9fd4('0x2f')],_0x15ebd4[_0x9fd4('0x3b')]));if(_0x1544c9['dateStart']){if(_0x1544c9['dateEnd']){_0x1544c9[_0x9fd4('0x31')]=moment(_0x1544c9[_0x9fd4('0x31')])[_0x9fd4('0x3c')](0x1,'day');}else{_0x1544c9[_0x9fd4('0x31')]=moment(_0x1544c9[_0x9fd4('0x30')])['add'](0x1,_0x9fd4('0x3d'));}_['merge'](_0x3b915a[_0x9fd4('0x3e')],{'createdAt':{'$gte':_0x1544c9[_0x9fd4('0x30')],'$lte':_0x1544c9['dateEnd']}});}if(_0x129df8[_0x9fd4('0x2f')][_0x9fd4('0x3f')]){_0x3b915a[_0x9fd4('0x3e')]=_[_0x9fd4('0x40')](_0x3b915a[_0x9fd4('0x3e')],{'$or':_[_0x9fd4('0x41')](_0x3b915a['attributes'],function(_0x57d09c){var _0x5ef2e1={};_0x5ef2e1[_0x57d09c]={'$like':'%'+_0x129df8[_0x9fd4('0x2f')][_0x9fd4('0x3f')]+'%'};return _0x5ef2e1;})});}_0x3b915a=_[_0x9fd4('0x40')]({},_0x3b915a,_0x129df8[_0x9fd4('0x42')]);var _0x18b8f3={'where':_0x3b915a[_0x9fd4('0x3e')]};return db[_0x9fd4('0x2d')][_0x9fd4('0x22')](_0x18b8f3)[_0x9fd4('0x16')](function(_0x54fc48){_0x204075['count']=_0x54fc48;if(_0x129df8['query'][_0x9fd4('0x43')]){_0x3b915a[_0x9fd4('0x44')]=[{'all':!![]}];}return db['SmsMessage'][_0x9fd4('0x45')](_0x3b915a);})[_0x9fd4('0x16')](function(_0x2125db){_0x204075['rows']=_0x2125db;return _0x204075;})['then'](respondWithFilteredResult(_0x4121af,_0x3b915a))[_0x9fd4('0x46')](handleError(_0x4121af,null));};exports[_0x9fd4('0x47')]=function(_0x187f17,_0x5f336e){var _0xe3f7cf={'raw':!![],'where':{'id':_0x187f17[_0x9fd4('0x48')]['id']}},_0x27aad9={};_0x27aad9[_0x9fd4('0x33')]=_[_0x9fd4('0x2e')](db[_0x9fd4('0x2d')][_0x9fd4('0x49')]);_0x27aad9['query']=_['keys'](_0x187f17['query']);_0x27aad9[_0x9fd4('0x3b')]=_['intersection'](_0x27aad9[_0x9fd4('0x33')],_0x27aad9[_0x9fd4('0x2f')]);_0xe3f7cf[_0x9fd4('0x34')]=_[_0x9fd4('0x32')](_0x27aad9[_0x9fd4('0x33')],qs[_0x9fd4('0x35')](_0x187f17[_0x9fd4('0x2f')][_0x9fd4('0x35')]));_0xe3f7cf[_0x9fd4('0x34')]=_0xe3f7cf[_0x9fd4('0x34')]['length']?_0xe3f7cf['attributes']:_0x27aad9[_0x9fd4('0x33')];if(_0x187f17[_0x9fd4('0x2f')][_0x9fd4('0x43')]){_0xe3f7cf['include']=[{'all':!![]}];}_0xe3f7cf=_[_0x9fd4('0x40')]({},_0xe3f7cf,_0x187f17[_0x9fd4('0x42')]);return db['SmsMessage'][_0x9fd4('0x4a')](_0xe3f7cf)[_0x9fd4('0x16')](handleEntityNotFound(_0x5f336e,null))['then'](respondWithResult(_0x5f336e,null))[_0x9fd4('0x46')](handleError(_0x5f336e,null));};exports[_0x9fd4('0x4b')]=function(_0x869df4,_0x352d62){return db[_0x9fd4('0x2d')][_0x9fd4('0x4b')](_0x869df4[_0x9fd4('0x4c')],{})['then'](respondWithResult(_0x352d62,0xc9))['catch'](handleError(_0x352d62,null));};exports['update']=function(_0x4c96b1,_0xa648d6){if(_0x4c96b1[_0x9fd4('0x4c')]['id']){delete _0x4c96b1[_0x9fd4('0x4c')]['id'];}return db['SmsMessage'][_0x9fd4('0x4a')]({'where':{'id':_0x4c96b1[_0x9fd4('0x48')]['id']}})[_0x9fd4('0x16')](handleEntityNotFound(_0xa648d6,null))['then'](saveUpdates(_0x4c96b1[_0x9fd4('0x4c')],null))[_0x9fd4('0x16')](respondWithResult(_0xa648d6,null))[_0x9fd4('0x46')](handleError(_0xa648d6,null));};exports[_0x9fd4('0x28')]=function(_0x17e3ab,_0x5e422a){return db[_0x9fd4('0x2d')]['find']({'where':{'id':_0x17e3ab['params']['id']}})['then'](handleEntityNotFound(_0x5e422a,null))[_0x9fd4('0x16')](removeEntity(_0x5e422a,null))[_0x9fd4('0x46')](handleError(_0x5e422a,null));};exports[_0x9fd4('0x4d')]=function(_0x13b078,_0x286f9d){return db[_0x9fd4('0x2d')][_0x9fd4('0x4d')]()[_0x9fd4('0x16')](respondWithResult(_0x286f9d,null))['catch'](handleError(_0x286f9d,null));};var interaction_log=require('../../config/logger')(_0x9fd4('0x4e'));exports[_0x9fd4('0x4f')]=function(_0x1793c4,_0x22b02c,_0xd78877){var _0x4fba70={'channel':_0x9fd4('0x50')};if(_0x1793c4[_0x9fd4('0x4c')]['id']){delete _0x1793c4[_0x9fd4('0x4c')]['id'];}_0x1793c4[_0x9fd4('0x4c')][_0x9fd4('0x51')]=!![];_0x1793c4[_0x9fd4('0x4c')][_0x9fd4('0x52')]=moment()[_0x9fd4('0x53')]('YYYY-MM-DD\x20HH:mm:ss');_0x1793c4['body'][_0x9fd4('0x54')]=_0x1793c4[_0x9fd4('0x4c')]['UserId']||_0x1793c4[_0x9fd4('0x55')]['id'];return db[_0x9fd4('0x2d')][_0x9fd4('0x4a')]({'where':{'id':_0x1793c4['params']['id'],'UserId':null},'include':[{'model':db[_0x9fd4('0x56')],'as':_0x9fd4('0x57')}]})[_0x9fd4('0x16')](handleEntityNotFound(_0x22b02c,null))[_0x9fd4('0x16')](saveUpdates(_0x1793c4[_0x9fd4('0x4c')],null))[_0x9fd4('0x16')](function(_0xdaf432){if(_0xdaf432){_0x4fba70[_0x9fd4('0x1d')]=_0xdaf432[_0x9fd4('0x58')]({'plain':!![]});return db['SmsInteraction']['find']({'where':{'id':_0xdaf432[_0x9fd4('0x59')]}});}return null;})[_0x9fd4('0x16')](handleEntityNotFound(_0x22b02c,null))['then'](function(_0x1b38a5){if(_0x1b38a5){return _0x1b38a5[_0x9fd4('0x27')]({'UserId':_0x1793c4['body'][_0x9fd4('0x54')],'read1stAt':_[_0x9fd4('0x5a')](_0x1b38a5[_0x9fd4('0x5b')])?moment()[_0x9fd4('0x53')]('YYYY-MM-DD\x20HH:mm:ss'):undefined});}return null;})[_0x9fd4('0x16')](function(_0x2b9e9e){if(_0x2b9e9e){_0x4fba70['interaction']=_0x2b9e9e[_0x9fd4('0x58')]({'plain':!![]});interaction_log[_0x9fd4('0x17')](_0x9fd4('0x5c'),_0x1793c4[_0x9fd4('0x55')]['id'],_0x1793c4[_0x9fd4('0x55')][_0x9fd4('0x2a')],_0x1793c4[_0x9fd4('0x55')][_0x9fd4('0x5d')],_0x4fba70[_0x9fd4('0x5e')]['id'],_0x1793c4['body']?JSON['stringify'](_0x1793c4[_0x9fd4('0x4c')]):_0x9fd4('0x5f'));return respondWithRpcPromise(_0x9fd4('0x60'),_0x9fd4('0x61'),_0x4fba70);}return null;})[_0x9fd4('0x16')](function(_0x3b87f8){if(_0x3b87f8){if(_0x1793c4[_0x9fd4('0x4c')][_0x9fd4('0x62')]){_0x4fba70[_0x9fd4('0x1d')][_0x9fd4('0x63')]=util[_0x9fd4('0x53')]('SIP/%s',_0x1793c4[_0x9fd4('0x55')]['name']);_0x4fba70[_0x9fd4('0x1d')][_0x9fd4('0x64')]=_0x4fba70['channel'];_0x4fba70[_0x9fd4('0x1d')][_0x9fd4('0x65')]=_0x9fd4('0x4f');return respondWithRpcPromise('EventManager','EventManager',{'event':'acceptmessage','message':_0x4fba70[_0x9fd4('0x1d')]},client9002)[_0x9fd4('0x16')](function(){return _0x4fba70;});}return _0x4fba70;}return null;})['then'](respondWithResult(_0x22b02c,null))[_0x9fd4('0x46')](handleError(_0x22b02c,null));};var interaction_log=require(_0x9fd4('0x66'))(_0x9fd4('0x4e'));exports[_0x9fd4('0x26')]=function(_0x5a228f,_0x29e410,_0x1b7960){var _0x1da300={'agent':{},'channel':_0x9fd4('0x50')};if(_0x5a228f[_0x9fd4('0x4c')]['id']){delete _0x5a228f[_0x9fd4('0x4c')]['id'];}_0x5a228f['body'][_0x9fd4('0x54')]=_0x5a228f[_0x9fd4('0x4c')][_0x9fd4('0x54')]||_0x5a228f[_0x9fd4('0x55')]['id'];_0x1da300['agent']['id']=_0x5a228f['body'][_0x9fd4('0x54')];return db['SmsMessage'][_0x9fd4('0x4a')]({'where':{'id':_0x5a228f[_0x9fd4('0x48')]['id'],'UserId':null}})[_0x9fd4('0x16')](handleEntityNotFound(_0x29e410,null))[_0x9fd4('0x16')](function(_0x5c3eea){if(_0x5c3eea){_0x1da300[_0x9fd4('0x1d')]=_0x5c3eea['get']({'plain':!![]});return db['SmsInteraction'][_0x9fd4('0x4a')]({'where':{'id':_0x5c3eea[_0x9fd4('0x59')]}});}return null;})[_0x9fd4('0x16')](handleEntityNotFound(_0x29e410,null))[_0x9fd4('0x16')](function(_0x289b87){if(_0x289b87){_0x1da300['interaction']=_0x289b87[_0x9fd4('0x58')]({'plain':!![]});interaction_log['info']('[SMSMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x5a228f['user']['id'],_0x5a228f[_0x9fd4('0x55')][_0x9fd4('0x2a')],_0x5a228f[_0x9fd4('0x55')][_0x9fd4('0x5d')],_0x1da300[_0x9fd4('0x5e')]['id'],_0x5a228f[_0x9fd4('0x4c')]?JSON[_0x9fd4('0x1a')](_0x5a228f[_0x9fd4('0x4c')]):_0x9fd4('0x5f'));return respondWithRpcPromise(_0x9fd4('0x67'),_0x9fd4('0x68'),_0x1da300);}return null;})[_0x9fd4('0x16')](function(_0x4093a2){if(_0x4093a2){_0x4093a2[_0x9fd4('0x1d')][_0x9fd4('0x63')]=util[_0x9fd4('0x53')](_0x9fd4('0x69'),_0x5a228f['user'][_0x9fd4('0x2a')]);_0x4093a2[_0x9fd4('0x1d')][_0x9fd4('0x64')]=_0x1da300['channel'];_0x4093a2[_0x9fd4('0x1d')][_0x9fd4('0x65')]=_0x9fd4('0x26');respondWithRpcPromise(_0x9fd4('0x6a'),_0x9fd4('0x6a'),{'event':_0x9fd4('0x6b'),'message':_0x4093a2['message']},client9002);return _0x1da300;}return null;})[_0x9fd4('0x16')](respondWithResult(_0x29e410,null))['catch'](handleError(_0x29e410,null));};exports[_0x9fd4('0x1f')]=function(_0x33f286,_0x3dcf12,_0x289942){if(_0x33f286[_0x9fd4('0x4c')]['id']){delete _0x33f286[_0x9fd4('0x4c')]['id'];}var _0x4207ba;return db[_0x9fd4('0x2d')][_0x9fd4('0x4a')]({'where':{'id':_0x33f286['params']['id']}})['then'](handleEntityNotFound(_0x3dcf12,null))[_0x9fd4('0x16')](function(_0x2177b0){if(_0x2177b0){_0x4207ba=_0x2177b0;return db['SmsAccount'][_0x9fd4('0x4a')]({'where':{'id':_0x2177b0['SmsAccountId']}});}})[_0x9fd4('0x16')](handleEntityNotFound(_0x3dcf12,null))[_0x9fd4('0x16')](function(_0x218903){if(_0x218903){logger[_0x9fd4('0x6c')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9fd4('0x1f'),_0x9fd4('0x6d'),_0x218903[_0x9fd4('0x6e')],util['inspect'](_0x33f286[_0x9fd4('0x4c')],{'showHidden':![],'depth':null}));switch(_0x218903[_0x9fd4('0x6e')]){case _0x9fd4('0x6f'):if(_0x33f286[_0x9fd4('0x4c')][_0x9fd4('0x70')]&&_0x33f286[_0x9fd4('0x4c')]['MessageSid']===_0x4207ba['messageId']){return _0x4207ba[_0x9fd4('0x27')]({'read':!![]});}break;case _0x9fd4('0x71'):if(_0x33f286['body'][_0x9fd4('0x72')]&&_0x33f286[_0x9fd4('0x4c')][_0x9fd4('0x72')]===_0x4207ba['messageId']&&_[_0x9fd4('0x73')]([_0x9fd4('0x74'),_0x9fd4('0x75')],_0x33f286[_0x9fd4('0x4c')]['Status'])>=0x0){return _0x4207ba[_0x9fd4('0x27')]({'read':!![]});}break;}return _0x4207ba;}})[_0x9fd4('0x16')](respondWithResult(_0x3dcf12,null))[_0x9fd4('0x46')](handleError(_0x3dcf12,null));};
\ No newline at end of file
+var _0x0295=['MessageUUID','sent','delivered','Status','fast-json-patch','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','../../components/parsers/qs','api','../../config/environment','socket.io-emitter','localhost','./smsMessage.socket','jayson/promise','client','http','request','then','info','SmsMessage,\x20%s,\x20%s','request\x20sent','debug','SmsMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','sendStatus','status','end','json','count','offset','limit','set','reject','update','destroy','name','send','index','SmsMessage','rawAttributes','model','query','dateStart','keys','filters','intersection','attributes','fields','nolimit','order','sort','where','pick','dateEnd','add','day','merge','filter','map','includeAll','include','findAll','rows','show','length','options','find','create','body','describe','../../config/logger','sms-interactions','accept','sms','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','params','Contact','get','SmsInteraction','SmsInteractionId','isNil','[SMSMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','user','role','interaction','null','AcceptMessage','manual','interface','channel','EventManager','acceptmessage','[SMSMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','rejectMessage','SIP/%s','event','rejectmessage','SmsAccount','SmsAccountId','received\x20delivery\x20report\x20from','type','inspect','twilio','MessageSid','messageId','plivo'];(function(_0x4cb557,_0x2a9710){var _0x1a9f6c=function(_0x3e85bb){while(--_0x3e85bb){_0x4cb557['push'](_0x4cb557['shift']());}};_0x1a9f6c(++_0x2a9710);}(_0x0295,0x1f0));var _0x5029=function(_0x12d6de,_0xccc040){_0x12d6de=_0x12d6de-0x0;var _0x32923b=_0x0295[_0x12d6de];return _0x32923b;};'use strict';var jsonpatch=require(_0x5029('0x0'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x5029('0x1'));var Mustache=require('mustache');var util=require('util');var path=require(_0x5029('0x2'));var sox=require(_0x5029('0x3'));var csv=require(_0x5029('0x4'));var ejs=require(_0x5029('0x5'));var fs=require('fs');var _=require(_0x5029('0x6'));var squel=require(_0x5029('0x7'));var crypto=require(_0x5029('0x8'));var jsforce=require(_0x5029('0x9'));var deskjs=require(_0x5029('0xa'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x5029('0xb'));var logger=require('../../config/logger')(_0x5029('0xc'));var utils=require('../../config/utils');var config=require(_0x5029('0xd'));var db=require('../../mysqldb')['db'];var socket=require(_0x5029('0xe'))({'host':_0x5029('0xf'),'port':0x18eb});require(_0x5029('0x10'))['register'](socket);var jayson=require(_0x5029('0x11'));var client=jayson[_0x5029('0x12')][_0x5029('0x13')]({'port':0x232c});var client9002=jayson['client'][_0x5029('0x13')]({'port':0x232a});function respondWithRpcPromise(_0x2442b2,_0x4cced9,_0x4fa22d,_0x49f836){return new BPromise(function(_0x4aebb6,_0x2484ac){var _0x2e0369=_0x49f836||client;return _0x2e0369[_0x5029('0x14')](_0x2442b2,_0x4fa22d)[_0x5029('0x15')](function(_0x2c0b33){logger[_0x5029('0x16')](_0x5029('0x17'),_0x4cced9,_0x5029('0x18'));logger[_0x5029('0x19')](_0x5029('0x1a'),_0x4cced9,_0x5029('0x18'),JSON[_0x5029('0x1b')](_0x2c0b33));if(_0x2c0b33[_0x5029('0x1c')]){if(_0x2c0b33[_0x5029('0x1c')][_0x5029('0x1d')]===0x1f4){logger['error'](_0x5029('0x17'),_0x4cced9,_0x2c0b33[_0x5029('0x1c')][_0x5029('0x1e')]);return _0x2484ac(_0x2c0b33[_0x5029('0x1c')][_0x5029('0x1e')]);}logger[_0x5029('0x1c')](_0x5029('0x17'),_0x4cced9,_0x2c0b33['error'][_0x5029('0x1e')]);return _0x4aebb6(_0x2c0b33['error'][_0x5029('0x1e')]);}else{logger[_0x5029('0x16')](_0x5029('0x17'),_0x4cced9,_0x5029('0x18'));_0x4aebb6(_0x2c0b33['result']['message']);}})[_0x5029('0x1f')](function(_0x4a49b6){logger[_0x5029('0x1c')](_0x5029('0x17'),_0x4cced9,_0x4a49b6);_0x2484ac(_0x4a49b6);});});}function respondWithStatusCode(_0x1eb228,_0x2bbbcb){_0x2bbbcb=_0x2bbbcb||0xcc;return function(_0x16bd22){if(_0x16bd22){return _0x1eb228[_0x5029('0x20')](_0x2bbbcb);}return _0x1eb228[_0x5029('0x21')](_0x2bbbcb)[_0x5029('0x22')]();};}function respondWithResult(_0x3e857d,_0x4ceaae){_0x4ceaae=_0x4ceaae||0xc8;return function(_0x564866){if(_0x564866){return _0x3e857d['status'](_0x4ceaae)[_0x5029('0x23')](_0x564866);}};}function respondWithFilteredResult(_0x45666c,_0x51093c){return function(_0x5727e9){if(_0x5727e9){var _0x181da0=_0x5727e9[_0x5029('0x24')],_0x1e7e61=_0x51093c[_0x5029('0x25')],_0x36d810=_0x51093c['offset']+_0x51093c[_0x5029('0x26')],_0x5527fc;if(_0x36d810>=_0x181da0){_0x36d810=_0x181da0;_0x5527fc=0xc8;}else{_0x5527fc=0xce;}_0x45666c[_0x5029('0x21')](_0x5527fc);return _0x45666c[_0x5029('0x27')]('Content-Range',_0x1e7e61+'-'+_0x36d810+'/'+_0x181da0)[_0x5029('0x23')](_0x5727e9);}return null;};}function patchUpdates(_0x251f99){return function(_0xe5313e){try{jsonpatch['apply'](_0xe5313e,_0x251f99,!![]);}catch(_0x2cedf6){return BPromise[_0x5029('0x28')](_0x2cedf6);}return _0xe5313e['save']();};}function saveUpdates(_0x1d79b9,_0x25032b){return function(_0x4434ff){if(_0x4434ff){return _0x4434ff[_0x5029('0x29')](_0x1d79b9)[_0x5029('0x15')](function(_0x2a1ed6){return _0x2a1ed6;});}return null;};}function removeEntity(_0x44255a,_0x465153){return function(_0x250156){if(_0x250156){return _0x250156[_0x5029('0x2a')]()[_0x5029('0x15')](function(){_0x44255a[_0x5029('0x21')](0xcc)['end']();});}};}function handleEntityNotFound(_0x11ae38,_0x5cb04b){return function(_0x31c621){if(!_0x31c621){_0x11ae38['sendStatus'](0x194);}return _0x31c621;};}function handleError(_0x48f387,_0x2bc434){_0x2bc434=_0x2bc434||0x1f4;return function(_0x447680){logger[_0x5029('0x1c')](_0x447680['stack']);if(_0x447680[_0x5029('0x2b')]){delete _0x447680[_0x5029('0x2b')];}_0x48f387[_0x5029('0x21')](_0x2bc434)[_0x5029('0x2c')](_0x447680);};}exports[_0x5029('0x2d')]=function(_0x4513b9,_0x46ec59){var _0x22205e={},_0x456cfc={},_0x5c9f10={'count':0x0,'rows':[]};var _0x1db45c=db[_0x5029('0x2e')][_0x5029('0x2f')];_0x456cfc[_0x5029('0x30')]=_['keys'](_0x1db45c);var _0x184b8d={'dateStart':_0x4513b9[_0x5029('0x31')][_0x5029('0x32')],'dateEnd':_0x4513b9['query']['dateEnd']};delete _0x4513b9[_0x5029('0x31')][_0x5029('0x32')];delete _0x4513b9['query']['dateEnd'];_0x456cfc[_0x5029('0x31')]=_[_0x5029('0x33')](_0x4513b9[_0x5029('0x31')]);_0x456cfc[_0x5029('0x34')]=_[_0x5029('0x35')](_0x456cfc[_0x5029('0x30')],_0x456cfc[_0x5029('0x31')]);_0x22205e[_0x5029('0x36')]=_[_0x5029('0x35')](_0x456cfc[_0x5029('0x30')],qs[_0x5029('0x37')](_0x4513b9[_0x5029('0x31')][_0x5029('0x37')]));_0x22205e[_0x5029('0x36')]=_0x22205e['attributes']['length']?_0x22205e[_0x5029('0x36')]:_0x456cfc[_0x5029('0x30')];if(!_0x4513b9[_0x5029('0x31')]['hasOwnProperty'](_0x5029('0x38'))){_0x22205e[_0x5029('0x26')]=qs['limit'](_0x4513b9[_0x5029('0x31')]['limit']);_0x22205e[_0x5029('0x25')]=qs['offset'](_0x4513b9[_0x5029('0x31')][_0x5029('0x25')]);}_0x22205e[_0x5029('0x39')]=qs[_0x5029('0x3a')](_0x4513b9[_0x5029('0x31')][_0x5029('0x3a')]);_0x22205e[_0x5029('0x3b')]=qs[_0x5029('0x34')](_[_0x5029('0x3c')](_0x4513b9['query'],_0x456cfc[_0x5029('0x34')]));if(_0x184b8d[_0x5029('0x32')]){if(_0x184b8d[_0x5029('0x3d')]){_0x184b8d[_0x5029('0x3d')]=moment(_0x184b8d[_0x5029('0x3d')])[_0x5029('0x3e')](0x1,'day');}else{_0x184b8d[_0x5029('0x3d')]=moment(_0x184b8d[_0x5029('0x32')])[_0x5029('0x3e')](0x1,_0x5029('0x3f'));}_[_0x5029('0x40')](_0x22205e['where'],{'createdAt':{'$gte':_0x184b8d[_0x5029('0x32')],'$lte':_0x184b8d[_0x5029('0x3d')]}});}if(_0x4513b9[_0x5029('0x31')][_0x5029('0x41')]){_0x22205e[_0x5029('0x3b')]=_[_0x5029('0x40')](_0x22205e[_0x5029('0x3b')],{'$or':_[_0x5029('0x42')](_0x22205e[_0x5029('0x36')],function(_0x51514e){var _0x32d0fa={};_0x32d0fa[_0x51514e]={'$like':'%'+_0x4513b9[_0x5029('0x31')][_0x5029('0x41')]+'%'};return _0x32d0fa;})});}_0x22205e=_[_0x5029('0x40')]({},_0x22205e,_0x4513b9['options']);var _0x50d7c2={'where':_0x22205e[_0x5029('0x3b')]};return db[_0x5029('0x2e')][_0x5029('0x24')](_0x50d7c2)[_0x5029('0x15')](function(_0x1e4596){_0x5c9f10[_0x5029('0x24')]=_0x1e4596;if(_0x4513b9[_0x5029('0x31')][_0x5029('0x43')]){_0x22205e[_0x5029('0x44')]=[{'all':!![]}];}return db[_0x5029('0x2e')][_0x5029('0x45')](_0x22205e);})[_0x5029('0x15')](function(_0x449ef5){_0x5c9f10[_0x5029('0x46')]=_0x449ef5;return _0x5c9f10;})[_0x5029('0x15')](respondWithFilteredResult(_0x46ec59,_0x22205e))[_0x5029('0x1f')](handleError(_0x46ec59,null));};exports[_0x5029('0x47')]=function(_0x149cf6,_0x274beb){var _0x142ad8={'raw':!![],'where':{'id':_0x149cf6['params']['id']}},_0x1d0a38={};_0x1d0a38[_0x5029('0x30')]=_['keys'](db[_0x5029('0x2e')][_0x5029('0x2f')]);_0x1d0a38['query']=_['keys'](_0x149cf6[_0x5029('0x31')]);_0x1d0a38['filters']=_['intersection'](_0x1d0a38[_0x5029('0x30')],_0x1d0a38[_0x5029('0x31')]);_0x142ad8[_0x5029('0x36')]=_['intersection'](_0x1d0a38['model'],qs[_0x5029('0x37')](_0x149cf6[_0x5029('0x31')]['fields']));_0x142ad8[_0x5029('0x36')]=_0x142ad8['attributes'][_0x5029('0x48')]?_0x142ad8['attributes']:_0x1d0a38[_0x5029('0x30')];if(_0x149cf6[_0x5029('0x31')][_0x5029('0x43')]){_0x142ad8[_0x5029('0x44')]=[{'all':!![]}];}_0x142ad8=_[_0x5029('0x40')]({},_0x142ad8,_0x149cf6[_0x5029('0x49')]);return db[_0x5029('0x2e')][_0x5029('0x4a')](_0x142ad8)['then'](handleEntityNotFound(_0x274beb,null))[_0x5029('0x15')](respondWithResult(_0x274beb,null))['catch'](handleError(_0x274beb,null));};exports[_0x5029('0x4b')]=function(_0x3c4ecd,_0x57e82e){return db[_0x5029('0x2e')]['create'](_0x3c4ecd['body'],{})['then'](respondWithResult(_0x57e82e,0xc9))[_0x5029('0x1f')](handleError(_0x57e82e,null));};exports['update']=function(_0x49d1db,_0x353ae4){if(_0x49d1db[_0x5029('0x4c')]['id']){delete _0x49d1db['body']['id'];}return db[_0x5029('0x2e')]['find']({'where':{'id':_0x49d1db['params']['id']}})[_0x5029('0x15')](handleEntityNotFound(_0x353ae4,null))[_0x5029('0x15')](saveUpdates(_0x49d1db[_0x5029('0x4c')],null))[_0x5029('0x15')](respondWithResult(_0x353ae4,null))[_0x5029('0x1f')](handleError(_0x353ae4,null));};exports['destroy']=function(_0x450d4d,_0x124634){return db[_0x5029('0x2e')][_0x5029('0x4a')]({'where':{'id':_0x450d4d['params']['id']}})[_0x5029('0x15')](handleEntityNotFound(_0x124634,null))[_0x5029('0x15')](removeEntity(_0x124634,null))['catch'](handleError(_0x124634,null));};exports['describe']=function(_0x2afd44,_0x4685a6){return db[_0x5029('0x2e')][_0x5029('0x4d')]()['then'](respondWithResult(_0x4685a6,null))[_0x5029('0x1f')](handleError(_0x4685a6,null));};var interaction_log=require(_0x5029('0x4e'))(_0x5029('0x4f'));exports[_0x5029('0x50')]=function(_0x3a82f7,_0x26f56f,_0x59a718){var _0x560324={'channel':_0x5029('0x51')};if(_0x3a82f7[_0x5029('0x4c')]['id']){delete _0x3a82f7[_0x5029('0x4c')]['id'];}_0x3a82f7['body'][_0x5029('0x52')]=!![];_0x3a82f7[_0x5029('0x4c')][_0x5029('0x53')]=moment()[_0x5029('0x54')](_0x5029('0x55'));_0x3a82f7['body'][_0x5029('0x56')]=_0x3a82f7[_0x5029('0x4c')][_0x5029('0x56')]||_0x3a82f7['user']['id'];return db[_0x5029('0x2e')]['find']({'where':{'id':_0x3a82f7[_0x5029('0x57')]['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0x5029('0x58')}]})[_0x5029('0x15')](handleEntityNotFound(_0x26f56f,null))[_0x5029('0x15')](saveUpdates(_0x3a82f7[_0x5029('0x4c')],null))[_0x5029('0x15')](function(_0x2ab5cf){if(_0x2ab5cf){_0x560324['message']=_0x2ab5cf[_0x5029('0x59')]({'plain':!![]});return db[_0x5029('0x5a')][_0x5029('0x4a')]({'where':{'id':_0x2ab5cf[_0x5029('0x5b')]}});}return null;})[_0x5029('0x15')](handleEntityNotFound(_0x26f56f,null))['then'](function(_0x13ca47){if(_0x13ca47){return _0x13ca47['update']({'UserId':_0x3a82f7[_0x5029('0x4c')]['UserId'],'read1stAt':_[_0x5029('0x5c')](_0x13ca47['read1stAt'])?moment()[_0x5029('0x54')]('YYYY-MM-DD\x20HH:mm:ss'):undefined});}return null;})['then'](function(_0x440658){if(_0x440658){_0x560324['interaction']=_0x440658[_0x5029('0x59')]({'plain':!![]});interaction_log[_0x5029('0x16')](_0x5029('0x5d'),_0x3a82f7['user']['id'],_0x3a82f7[_0x5029('0x5e')]['name'],_0x3a82f7[_0x5029('0x5e')][_0x5029('0x5f')],_0x560324[_0x5029('0x60')]['id'],_0x3a82f7[_0x5029('0x4c')]?JSON[_0x5029('0x1b')](_0x3a82f7['body']):_0x5029('0x61'));return respondWithRpcPromise(_0x5029('0x62'),'acceptMessage',_0x560324);}return null;})[_0x5029('0x15')](function(_0x213d1c){if(_0x213d1c){if(_0x3a82f7[_0x5029('0x4c')][_0x5029('0x63')]){_0x560324[_0x5029('0x1e')][_0x5029('0x64')]=util['format']('SIP/%s',_0x3a82f7[_0x5029('0x5e')]['name']);_0x560324[_0x5029('0x1e')][_0x5029('0x65')]=_0x560324['channel'];_0x560324[_0x5029('0x1e')]['event']='accept';return respondWithRpcPromise(_0x5029('0x66'),_0x5029('0x66'),{'event':_0x5029('0x67'),'message':_0x560324[_0x5029('0x1e')]},client9002)['then'](function(){return _0x560324;});}return _0x560324;}return null;})[_0x5029('0x15')](respondWithResult(_0x26f56f,null))[_0x5029('0x1f')](handleError(_0x26f56f,null));};var interaction_log=require('../../config/logger')(_0x5029('0x4f'));exports[_0x5029('0x28')]=function(_0x49e198,_0x5b25b8,_0x5f561b){var _0x7441d8={'agent':{},'channel':_0x5029('0x51')};if(_0x49e198[_0x5029('0x4c')]['id']){delete _0x49e198[_0x5029('0x4c')]['id'];}_0x49e198[_0x5029('0x4c')][_0x5029('0x56')]=_0x49e198[_0x5029('0x4c')][_0x5029('0x56')]||_0x49e198[_0x5029('0x5e')]['id'];_0x7441d8['agent']['id']=_0x49e198['body'][_0x5029('0x56')];return db[_0x5029('0x2e')][_0x5029('0x4a')]({'where':{'id':_0x49e198[_0x5029('0x57')]['id'],'UserId':null}})[_0x5029('0x15')](handleEntityNotFound(_0x5b25b8,null))[_0x5029('0x15')](function(_0x459230){if(_0x459230){_0x7441d8['message']=_0x459230[_0x5029('0x59')]({'plain':!![]});return db[_0x5029('0x5a')][_0x5029('0x4a')]({'where':{'id':_0x459230['SmsInteractionId']}});}return null;})[_0x5029('0x15')](handleEntityNotFound(_0x5b25b8,null))[_0x5029('0x15')](function(_0x2c54eb){if(_0x2c54eb){_0x7441d8['interaction']=_0x2c54eb[_0x5029('0x59')]({'plain':!![]});interaction_log[_0x5029('0x16')](_0x5029('0x68'),_0x49e198['user']['id'],_0x49e198[_0x5029('0x5e')][_0x5029('0x2b')],_0x49e198['user'][_0x5029('0x5f')],_0x7441d8[_0x5029('0x60')]['id'],_0x49e198[_0x5029('0x4c')]?JSON[_0x5029('0x1b')](_0x49e198[_0x5029('0x4c')]):'null');return respondWithRpcPromise(_0x5029('0x69'),_0x5029('0x6a'),_0x7441d8);}return null;})[_0x5029('0x15')](function(_0xe6ac28){if(_0xe6ac28){_0xe6ac28[_0x5029('0x1e')]['interface']=util[_0x5029('0x54')](_0x5029('0x6b'),_0x49e198[_0x5029('0x5e')]['name']);_0xe6ac28[_0x5029('0x1e')][_0x5029('0x65')]=_0x7441d8[_0x5029('0x65')];_0xe6ac28[_0x5029('0x1e')][_0x5029('0x6c')]=_0x5029('0x28');respondWithRpcPromise(_0x5029('0x66'),'EventManager',{'event':_0x5029('0x6d'),'message':_0xe6ac28[_0x5029('0x1e')]},client9002);return _0x7441d8;}return null;})[_0x5029('0x15')](respondWithResult(_0x5b25b8,null))[_0x5029('0x1f')](handleError(_0x5b25b8,null));};exports[_0x5029('0x21')]=function(_0x4c40d1,_0x209c83,_0x443070){if(_0x4c40d1[_0x5029('0x4c')]['id']){delete _0x4c40d1['body']['id'];}var _0x1bedc1;return db[_0x5029('0x2e')]['find']({'where':{'id':_0x4c40d1['params']['id']}})['then'](handleEntityNotFound(_0x209c83,null))[_0x5029('0x15')](function(_0x46c738){if(_0x46c738){_0x1bedc1=_0x46c738;return db[_0x5029('0x6e')][_0x5029('0x4a')]({'where':{'id':_0x46c738[_0x5029('0x6f')]}});}})['then'](handleEntityNotFound(_0x209c83,null))[_0x5029('0x15')](function(_0x2e4782){if(_0x2e4782){logger[_0x5029('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s','status',_0x5029('0x70'),_0x2e4782[_0x5029('0x71')],util[_0x5029('0x72')](_0x4c40d1[_0x5029('0x4c')],{'showHidden':![],'depth':null}));switch(_0x2e4782['type']){case _0x5029('0x73'):if(_0x4c40d1[_0x5029('0x4c')][_0x5029('0x74')]&&_0x4c40d1[_0x5029('0x4c')][_0x5029('0x74')]===_0x1bedc1[_0x5029('0x75')]){return _0x1bedc1[_0x5029('0x29')]({'read':!![]});}break;case _0x5029('0x76'):if(_0x4c40d1['body'][_0x5029('0x77')]&&_0x4c40d1['body']['MessageUUID']===_0x1bedc1[_0x5029('0x75')]&&_['indexOf']([_0x5029('0x78'),_0x5029('0x79')],_0x4c40d1[_0x5029('0x4c')][_0x5029('0x7a')])>=0x0){return _0x1bedc1[_0x5029('0x29')]({'read':!![]});}break;}return _0x1bedc1;}})[_0x5029('0x15')](respondWithResult(_0x209c83,null))[_0x5029('0x1f')](handleError(_0x209c83,null));};
\ No newline at end of file
index 82795f0..9666737 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3fd=['../../mysqldb','SmsMessage','save','update','remove','emit','exports','events'];(function(_0x334841,_0x2bbc4c){var _0x5beb4b=function(_0x4bea72){while(--_0x4bea72){_0x334841['push'](_0x334841['shift']());}};_0x5beb4b(++_0x2bbc4c);}(_0xc3fd,0xe7));var _0xdc3f=function(_0x505ef2,_0x5b059e){_0x505ef2=_0x505ef2-0x0;var _0x349808=_0xc3fd[_0x505ef2];return _0x349808;};'use strict';var EventEmitter=require(_0xdc3f('0x0'));var SmsMessage=require(_0xdc3f('0x1'))['db'][_0xdc3f('0x2')];var SmsMessageEvents=new EventEmitter();SmsMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xdc3f('0x3'),'afterUpdate':_0xdc3f('0x4'),'afterDestroy':_0xdc3f('0x5')};function emitEvent(_0x202739){return function(_0x4db764,_0x4d64e8,_0x3a04ac){SmsMessageEvents['emit'](_0x202739+':'+_0x4db764['id'],_0x4db764);SmsMessageEvents[_0xdc3f('0x6')](_0x202739,_0x4db764);_0x3a04ac(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SmsMessage['hook'](e,emitEvent(event));}}module[_0xdc3f('0x7')]=SmsMessageEvents;
\ No newline at end of file
+var _0x5503=['save','update','remove','emit','exports','events','SmsMessage','setMaxListeners'];(function(_0x1ca993,_0x243c1e){var _0x150e5e=function(_0xaf1a3e){while(--_0xaf1a3e){_0x1ca993['push'](_0x1ca993['shift']());}};_0x150e5e(++_0x243c1e);}(_0x5503,0x6d));var _0x3550=function(_0x5b42d3,_0x273078){_0x5b42d3=_0x5b42d3-0x0;var _0x370468=_0x5503[_0x5b42d3];return _0x370468;};'use strict';var EventEmitter=require(_0x3550('0x0'));var SmsMessage=require('../../mysqldb')['db'][_0x3550('0x1')];var SmsMessageEvents=new EventEmitter();SmsMessageEvents[_0x3550('0x2')](0x0);var events={'afterCreate':_0x3550('0x3'),'afterUpdate':_0x3550('0x4'),'afterDestroy':_0x3550('0x5')};function emitEvent(_0x1e36a7){return function(_0x331b88,_0x525602,_0x70e299){SmsMessageEvents[_0x3550('0x6')](_0x1e36a7+':'+_0x331b88['id'],_0x331b88);SmsMessageEvents[_0x3550('0x6')](_0x1e36a7,_0x331b88);_0x70e299(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SmsMessage['hook'](e,emitEvent(event));}}module[_0x3550('0x7')]=SmsMessageEvents;
\ No newline at end of file
index 04ea0ab..f12971b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7725=['../../config/logger','api','moment','bluebird','request-promise','./smsMessage.attributes','exports','define','sms_messages','messageId','get','direction','toLowerCase','UserId','findOne','SmsInteractionId','then','update','createdAt','body','catch','error','secret','find','SmsAccountId','type','twilio','accountSid','authToken','phone','messages','remote','/api/sms/messages/','/status?token=','sid','afterCreate','inspect','SmsMessage,\x20%s,\x20%s,\x20%s','Missing\x20parameters:\x20phone,\x20accountSid\x20or\x20authToken','skebby','querystring','password','smsMethod','basic','method','send_sms_basic','classic','send_sms_classic','sender_number','senderString','sender_string','send_sms_classic_report','stringify','https://gateway.skebby.it/api/send/smseasy/advanced/http.php','application/x-www-form-urlencoded','length','utf8','parse','status','success','deliveryReport','read','Missing\x20parameters:\x20username,\x20password','https://smsapi.connectel.se/api/send/','requestid','connectel','clicksend','format','%s:%s','POST','https://rest.clicksend.com/v3/sms/send','Basic\x20%s','toString','base64','http_code','data','queued_count','head','message_id','clickSend','plivo','authId','token','https://api.plivo.com/v1/Account/%s/Message/','Missing\x20parameters:\x20authId,\x20authToken','finally','utf8mb4','utf8mb4_unicode_ci'];(function(_0x523e8c,_0x3538f1){var _0x581bc5=function(_0xa2064f){while(--_0xa2064f){_0x523e8c['push'](_0x523e8c['shift']());}};_0x581bc5(++_0x3538f1);}(_0x7725,0x160));var _0x5772=function(_0x5d8018,_0x588592){_0x5d8018=_0x5d8018-0x0;var _0x151ac4=_0x7725[_0x5d8018];return _0x151ac4;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x5772('0x0'))(_0x5772('0x1'));var moment=require(_0x5772('0x2'));var BPromise=require(_0x5772('0x3'));var rp=require(_0x5772('0x4'));var attributes=require(_0x5772('0x5'));module[_0x5772('0x6')]=function(_0x391506,_0x523a8a){return _0x391506[_0x5772('0x7')]('SmsMessage',attributes,{'tableName':_0x5772('0x8'),'paranoid':![],'indexes':[{'name':_0x5772('0x9'),'fields':['messageId']}],'timestamps':!![],'hooks':{'afterCreate':function(_0x1f6903,_0x4d7ad2,_0xa235a6){var _0x4d6fa6=_0x391506['models'];var _0x444d95=_0x1f6903[_0x5772('0xa')]({'plain':!![]});if(_0x444d95[_0x5772('0xb')]['toLowerCase']()==='in'||_0x444d95[_0x5772('0xb')][_0x5772('0xc')]()==='out'&&!_0x444d95['secret']&&!_['isNil'](_0x444d95[_0x5772('0xd')])){_0x4d6fa6['SmsInteraction'][_0x5772('0xe')]({'where':{'id':_0x444d95[_0x5772('0xf')]}})[_0x5772('0x10')](function(_0x347b63){if(_0x347b63){_0x347b63[_0x5772('0x11')]({'lastMsgAt':_0x444d95[_0x5772('0x12')],'lastMsgDirection':_0x444d95[_0x5772('0xb')][_0x5772('0xc')](),'lastMsgBody':_0x444d95[_0x5772('0x13')]});}})[_0x5772('0x14')](function(_0x2223ff){console[_0x5772('0x15')](_0x2223ff);});}if(_0x444d95[_0x5772('0xb')]==='out'&&!_0x444d95[_0x5772('0x16')]){var _0x526937;_0x4d6fa6['SmsAccount'][_0x5772('0x17')]({'where':{'id':_0x444d95[_0x5772('0x18')]},'raw':!![]})[_0x5772('0x10')](function(_0x17c561){_0x526937=_0x17c561;if(_0x526937&&_0x526937[_0x5772('0x19')]){switch(_0x526937[_0x5772('0x19')]){case _0x5772('0x1a'):var _0x5ef94b=require('twilio');if(_0x526937[_0x5772('0x1b')]&&_0x526937[_0x5772('0x1c')]&&_0x526937[_0x5772('0x1d')]){var _0x4930ae=new _0x5ef94b(_0x526937[_0x5772('0x1b')],_0x526937[_0x5772('0x1c')]);_0x4930ae[_0x5772('0x1e')]['create']({'body':_0x444d95['body'],'to':_0x444d95[_0x5772('0x1d')],'from':_0x526937[_0x5772('0x1d')],'statusCallback':_0x526937[_0x5772('0x1f')]+_0x5772('0x20')+_0x444d95['id']+_0x5772('0x21')+_0x526937['token']})[_0x5772('0x10')](function(_0x2d5961){if(_0x2d5961[_0x5772('0x22')]){return _0x1f6903[_0x5772('0x11')]({'messageId':_0x2d5961['sid']});}})[_0x5772('0x14')](function(_0x439d1c){logger[_0x5772('0x15')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x5772('0x23'),_0x5772('0x1a'),util[_0x5772('0x24')](_0x439d1c,{'showHidden':![],'depth':null}));});}else{logger['error'](_0x5772('0x25'),_0x5772('0x23'),_0x5772('0x1a'),_0x5772('0x26'));}break;case _0x5772('0x27'):var _0x5a8ca3=require(_0x5772('0x28'));if(_0x526937['username']&&_0x526937[_0x5772('0x29')]){var _0x4c59cf={'username':_0x526937['username'],'password':_0x526937[_0x5772('0x29')],'recipients[]':[_0x444d95[_0x5772('0x1d')]],'text':_0x444d95[_0x5772('0x13')],'charset':'UTF-8'};switch(_0x526937[_0x5772('0x2a')]){case _0x5772('0x2b'):_0x4c59cf[_0x5772('0x2c')]=_0x5772('0x2d');break;case _0x5772('0x2e'):_0x4c59cf[_0x5772('0x2c')]=_0x5772('0x2f');_0x4c59cf[_0x5772('0x30')]=_0x526937[_0x5772('0x1d')];if(_0x526937[_0x5772('0x31')]){_0x4c59cf[_0x5772('0x32')]=_0x526937[_0x5772('0x31')];}else if(_0x526937[_0x5772('0x1d')]){_0x4c59cf[_0x5772('0x30')]=_0x526937[_0x5772('0x1d')];}break;case'classic+':_0x4c59cf[_0x5772('0x2c')]=_0x5772('0x33');_0x4c59cf[_0x5772('0x30')]=_0x526937['phone'];if(_0x526937['senderString']){_0x4c59cf[_0x5772('0x32')]=_0x526937[_0x5772('0x31')];}else if(_0x526937[_0x5772('0x1d')]){_0x4c59cf[_0x5772('0x30')]=_0x526937[_0x5772('0x1d')];}break;}var _0x1b7f53=_0x5a8ca3[_0x5772('0x34')](_0x4c59cf);var _0x4d7ad2={'method':'POST','uri':_0x5772('0x35'),'body':_0x1b7f53,'headers':{'Content-Type':_0x5772('0x36'),'Content-Length':_0x1b7f53[_0x5772('0x37')],'Content-Encoding':_0x5772('0x38')}};rp(_0x4d7ad2)['then'](function(_0x471e35){var _0x4187a1=_0x5a8ca3[_0x5772('0x39')](_0x471e35);if(_0x4187a1[_0x5772('0x3a')]==_0x5772('0x3b')){var _0x32477f={'messageId':_0x4187a1['id']};if(_0x526937['smsMethod']!=='classic+'||!_0x526937[_0x5772('0x3c')]){_0x32477f[_0x5772('0x3d')]=!![];}return _0x1f6903[_0x5772('0x11')](_0x32477f);}else{logger['error'](_0x5772('0x25'),_0x5772('0x23'),_0x5772('0x27'),util[_0x5772('0x24')](_0x4187a1,{'showHidden':![],'depth':null}));}})['catch'](function(_0x4c75e8){logger[_0x5772('0x15')](_0x5772('0x25'),_0x5772('0x23'),'skebby',util[_0x5772('0x24')](_0x4c75e8,{'showHidden':![],'depth':null}));});}else{logger[_0x5772('0x15')]('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x5772('0x27'),_0x5772('0x3e'));}break;case'connectel':if(_0x526937[_0x5772('0x1c')]){var _0x4c59cf={'recipient':_0x444d95[_0x5772('0x1d')],'message':_0x444d95[_0x5772('0x13')],'sender':_0x526937[_0x5772('0x31')]||_0x526937['phone'],'authorization':_0x526937[_0x5772('0x1c')]};var _0x4d7ad2={'method':'POST','uri':_0x5772('0x3f'),'body':_0x4c59cf,'json':!![]};rp(_0x4d7ad2)[_0x5772('0x10')](function(_0x2646bb){var _0x10d44a={'messageId':_0x2646bb[_0x5772('0x40')]};if(!_0x526937[_0x5772('0x3c')]){_0x10d44a['read']=!![];}return _0x1f6903[_0x5772('0x11')](_0x10d44a);})[_0x5772('0x14')](function(_0x59e9aa){logger[_0x5772('0x15')](_0x5772('0x25'),_0x5772('0x23'),_0x5772('0x41'),util['inspect'](_0x59e9aa,{'showHidden':![],'depth':null}));});}else{logger[_0x5772('0x15')](_0x5772('0x25'),_0x5772('0x23'),_0x5772('0x41'),'Missing\x20parameters:\x20authToken');}break;case _0x5772('0x42'):if(_0x526937['username']&&_0x526937[_0x5772('0x29')]){var _0x4c59cf={'messages':[{'source':'xCALLY\x20Motion','to':_0x444d95[_0x5772('0x1d')],'body':_0x444d95['body'],'from':_0x526937[_0x5772('0x31')]||_0x526937[_0x5772('0x1d')]}]};var _0xea9612=util[_0x5772('0x43')](_0x5772('0x44'),_0x526937['username'],_0x526937[_0x5772('0x29')]);var _0x4d7ad2={'method':_0x5772('0x45'),'uri':_0x5772('0x46'),'body':_0x4c59cf,'headers':{'Authorization':util[_0x5772('0x43')](_0x5772('0x47'),new Buffer(_0xea9612)[_0x5772('0x48')](_0x5772('0x49')))},'json':!![]};rp(_0x4d7ad2)[_0x5772('0x10')](function(_0x5447c4){if(_0x5447c4[_0x5772('0x4a')]>=0xc8&&_0x5447c4[_0x5772('0x4a')]<=0xce){if(_0x5447c4[_0x5772('0x4b')]&&_0x5447c4[_0x5772('0x4b')][_0x5772('0x4c')]>0x0){var _0xa7d431=_[_0x5772('0x4d')](_0x5447c4[_0x5772('0x4b')][_0x5772('0x1e')]);var _0xe5d21b={'messageId':_0xa7d431[_0x5772('0x4e')]};if(!_0x526937['deliveryReport']){_0xe5d21b['read']=!![];}return _0x1f6903[_0x5772('0x11')](_0xe5d21b);}else{logger[_0x5772('0x15')](_0x5772('0x25'),_0x5772('0x23'),_0x5772('0x4f'),util[_0x5772('0x24')](_0x5447c4,{'showHidden':![],'depth':null}));}}else{logger['error'](_0x5772('0x25'),_0x5772('0x23'),_0x5772('0x4f'),util[_0x5772('0x24')](_0x5447c4,{'showHidden':![],'depth':null}));}})[_0x5772('0x14')](function(_0x41725c){logger[_0x5772('0x15')](_0x5772('0x25'),'afterCreate',_0x5772('0x4f'),util['inspect'](_0x41725c,{'showHidden':![],'depth':null}));});}else{logger[_0x5772('0x15')](_0x5772('0x25'),'afterCreate','clickSend','Missing\x20parameters:\x20username,\x20password');}break;case _0x5772('0x50'):if(_0x526937[_0x5772('0x51')]&&_0x526937['authToken']){var _0x4c59cf={'dst':_0x444d95[_0x5772('0x1d')],'text':_0x444d95[_0x5772('0x13')],'src':_0x526937[_0x5772('0x31')]||_0x526937[_0x5772('0x1d')],'url':_0x526937[_0x5772('0x1f')]+'/api/sms/messages/'+_0x444d95['id']+_0x5772('0x21')+_0x526937[_0x5772('0x52')]};var _0xea9612=util[_0x5772('0x43')](_0x5772('0x44'),_0x526937[_0x5772('0x51')],_0x526937[_0x5772('0x1c')]);var _0x4d7ad2={'method':_0x5772('0x45'),'uri':util[_0x5772('0x43')](_0x5772('0x53'),_0x526937[_0x5772('0x51')]),'body':_0x4c59cf,'headers':{'Authorization':util['format'](_0x5772('0x47'),new Buffer(_0xea9612)[_0x5772('0x48')]('base64'))},'json':!![]};rp(_0x4d7ad2)[_0x5772('0x10')](function(_0x470e2a){var _0x4664f2={'messageId':_0x470e2a['message_uuid'][0x0]};return _0x1f6903[_0x5772('0x11')](_0x4664f2);})[_0x5772('0x14')](function(_0x5e7072){logger[_0x5772('0x15')](_0x5772('0x25'),'afterCreate',_0x5772('0x50'),util[_0x5772('0x24')](_0x5e7072,{'showHidden':![],'depth':null}));});}else{logger[_0x5772('0x15')](_0x5772('0x25'),_0x5772('0x23'),_0x5772('0x50'),_0x5772('0x54'));}break;}}})[_0x5772('0x55')](function(){_0xa235a6();});}else{_0xa235a6();}}},'charset':_0x5772('0x56'),'collate':_0x5772('0x57')});};
\ No newline at end of file
+var _0x16a7=['requestid','connectel','xCALLY\x20Motion','format','%s:%s','https://rest.clicksend.com/v3/sms/send','Basic\x20%s','toString','http_code','data','queued_count','head','message_id','deliveryReport','clickSend','authId','https://api.plivo.com/v1/Account/%s/Message/','message_uuid','plivo','finally','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./smsMessage.attributes','exports','define','sms_messages','messageId','models','get','direction','toLowerCase','out','UserId','findOne','SmsInteractionId','then','createdAt','body','error','SmsAccount','find','SmsAccountId','type','twilio','accountSid','authToken','phone','messages','create','remote','/api/sms/messages/','token','update','sid','catch','afterCreate','inspect','SmsMessage,\x20%s,\x20%s,\x20%s','skebby','password','username','smsMethod','basic','method','send_sms_basic','classic','send_sms_classic','sender_number','senderString','sender_string','classic+','stringify','POST','length','utf8','parse','status','success','read','Missing\x20parameters:\x20username,\x20password','https://smsapi.connectel.se/api/send/'];(function(_0x149d8b,_0x5d84ed){var _0x212150=function(_0x13dd49){while(--_0x13dd49){_0x149d8b['push'](_0x149d8b['shift']());}};_0x212150(++_0x5d84ed);}(_0x16a7,0x176));var _0x716a=function(_0x14a779,_0xf47528){_0x14a779=_0x14a779-0x0;var _0x33d159=_0x16a7[_0x14a779];return _0x33d159;};'use strict';var _=require(_0x716a('0x0'));var util=require(_0x716a('0x1'));var logger=require(_0x716a('0x2'))(_0x716a('0x3'));var moment=require(_0x716a('0x4'));var BPromise=require(_0x716a('0x5'));var rp=require(_0x716a('0x6'));var attributes=require(_0x716a('0x7'));module[_0x716a('0x8')]=function(_0x31df75,_0x32f730){return _0x31df75[_0x716a('0x9')]('SmsMessage',attributes,{'tableName':_0x716a('0xa'),'paranoid':![],'indexes':[{'name':_0x716a('0xb'),'fields':['messageId']}],'timestamps':!![],'hooks':{'afterCreate':function(_0x4b9bdb,_0x80f7f6,_0x33aadd){var _0xf0c4c5=_0x31df75[_0x716a('0xc')];var _0x337e64=_0x4b9bdb[_0x716a('0xd')]({'plain':!![]});if(_0x337e64[_0x716a('0xe')][_0x716a('0xf')]()==='in'||_0x337e64['direction']['toLowerCase']()===_0x716a('0x10')&&!_0x337e64['secret']&&!_['isNil'](_0x337e64[_0x716a('0x11')])){_0xf0c4c5['SmsInteraction'][_0x716a('0x12')]({'where':{'id':_0x337e64[_0x716a('0x13')]}})[_0x716a('0x14')](function(_0x1df0f2){if(_0x1df0f2){_0x1df0f2['update']({'lastMsgAt':_0x337e64[_0x716a('0x15')],'lastMsgDirection':_0x337e64['direction'][_0x716a('0xf')](),'lastMsgBody':_0x337e64[_0x716a('0x16')]});}})['catch'](function(_0x2ddba8){console[_0x716a('0x17')](_0x2ddba8);});}if(_0x337e64['direction']==='out'&&!_0x337e64['secret']){var _0x2461f0;_0xf0c4c5[_0x716a('0x18')][_0x716a('0x19')]({'where':{'id':_0x337e64[_0x716a('0x1a')]},'raw':!![]})[_0x716a('0x14')](function(_0x400b05){_0x2461f0=_0x400b05;if(_0x2461f0&&_0x2461f0['type']){switch(_0x2461f0[_0x716a('0x1b')]){case _0x716a('0x1c'):var _0xe00f71=require(_0x716a('0x1c'));if(_0x2461f0[_0x716a('0x1d')]&&_0x2461f0[_0x716a('0x1e')]&&_0x2461f0[_0x716a('0x1f')]){var _0x2eeb18=new _0xe00f71(_0x2461f0[_0x716a('0x1d')],_0x2461f0[_0x716a('0x1e')]);_0x2eeb18[_0x716a('0x20')][_0x716a('0x21')]({'body':_0x337e64['body'],'to':_0x337e64[_0x716a('0x1f')],'from':_0x2461f0[_0x716a('0x1f')],'statusCallback':_0x2461f0[_0x716a('0x22')]+_0x716a('0x23')+_0x337e64['id']+'/status?token='+_0x2461f0[_0x716a('0x24')]})['then'](function(_0x477eea){if(_0x477eea['sid']){return _0x4b9bdb[_0x716a('0x25')]({'messageId':_0x477eea[_0x716a('0x26')]});}})[_0x716a('0x27')](function(_0x6136b0){logger[_0x716a('0x17')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x716a('0x28'),_0x716a('0x1c'),util[_0x716a('0x29')](_0x6136b0,{'showHidden':![],'depth':null}));});}else{logger[_0x716a('0x17')](_0x716a('0x2a'),_0x716a('0x28'),_0x716a('0x1c'),'Missing\x20parameters:\x20phone,\x20accountSid\x20or\x20authToken');}break;case _0x716a('0x2b'):var _0x4cc853=require('querystring');if(_0x2461f0['username']&&_0x2461f0[_0x716a('0x2c')]){var _0x369682={'username':_0x2461f0[_0x716a('0x2d')],'password':_0x2461f0[_0x716a('0x2c')],'recipients[]':[_0x337e64[_0x716a('0x1f')]],'text':_0x337e64['body'],'charset':'UTF-8'};switch(_0x2461f0[_0x716a('0x2e')]){case _0x716a('0x2f'):_0x369682[_0x716a('0x30')]=_0x716a('0x31');break;case _0x716a('0x32'):_0x369682[_0x716a('0x30')]=_0x716a('0x33');_0x369682[_0x716a('0x34')]=_0x2461f0['phone'];if(_0x2461f0[_0x716a('0x35')]){_0x369682[_0x716a('0x36')]=_0x2461f0[_0x716a('0x35')];}else if(_0x2461f0[_0x716a('0x1f')]){_0x369682[_0x716a('0x34')]=_0x2461f0[_0x716a('0x1f')];}break;case _0x716a('0x37'):_0x369682['method']='send_sms_classic_report';_0x369682[_0x716a('0x34')]=_0x2461f0[_0x716a('0x1f')];if(_0x2461f0[_0x716a('0x35')]){_0x369682[_0x716a('0x36')]=_0x2461f0[_0x716a('0x35')];}else if(_0x2461f0['phone']){_0x369682[_0x716a('0x34')]=_0x2461f0['phone'];}break;}var _0x3518a2=_0x4cc853[_0x716a('0x38')](_0x369682);var _0x80f7f6={'method':_0x716a('0x39'),'uri':'https://gateway.skebby.it/api/send/smseasy/advanced/http.php','body':_0x3518a2,'headers':{'Content-Type':'application/x-www-form-urlencoded','Content-Length':_0x3518a2[_0x716a('0x3a')],'Content-Encoding':_0x716a('0x3b')}};rp(_0x80f7f6)[_0x716a('0x14')](function(_0x3cffb0){var _0x276a85=_0x4cc853[_0x716a('0x3c')](_0x3cffb0);if(_0x276a85[_0x716a('0x3d')]==_0x716a('0x3e')){var _0x2280ab={'messageId':_0x276a85['id']};if(_0x2461f0[_0x716a('0x2e')]!==_0x716a('0x37')||!_0x2461f0['deliveryReport']){_0x2280ab[_0x716a('0x3f')]=!![];}return _0x4b9bdb[_0x716a('0x25')](_0x2280ab);}else{logger[_0x716a('0x17')](_0x716a('0x2a'),'afterCreate','skebby',util[_0x716a('0x29')](_0x276a85,{'showHidden':![],'depth':null}));}})[_0x716a('0x27')](function(_0x257395){logger[_0x716a('0x17')](_0x716a('0x2a'),_0x716a('0x28'),_0x716a('0x2b'),util[_0x716a('0x29')](_0x257395,{'showHidden':![],'depth':null}));});}else{logger[_0x716a('0x17')](_0x716a('0x2a'),'afterCreate',_0x716a('0x2b'),_0x716a('0x40'));}break;case'connectel':if(_0x2461f0['authToken']){var _0x369682={'recipient':_0x337e64[_0x716a('0x1f')],'message':_0x337e64['body'],'sender':_0x2461f0[_0x716a('0x35')]||_0x2461f0[_0x716a('0x1f')],'authorization':_0x2461f0[_0x716a('0x1e')]};var _0x80f7f6={'method':_0x716a('0x39'),'uri':_0x716a('0x41'),'body':_0x369682,'json':!![]};rp(_0x80f7f6)[_0x716a('0x14')](function(_0x3fab53){var _0x3b7e1b={'messageId':_0x3fab53[_0x716a('0x42')]};if(!_0x2461f0['deliveryReport']){_0x3b7e1b['read']=!![];}return _0x4b9bdb[_0x716a('0x25')](_0x3b7e1b);})['catch'](function(_0x1e17d9){logger[_0x716a('0x17')](_0x716a('0x2a'),_0x716a('0x28'),'connectel',util[_0x716a('0x29')](_0x1e17d9,{'showHidden':![],'depth':null}));});}else{logger[_0x716a('0x17')](_0x716a('0x2a'),_0x716a('0x28'),_0x716a('0x43'),'Missing\x20parameters:\x20authToken');}break;case'clicksend':if(_0x2461f0[_0x716a('0x2d')]&&_0x2461f0[_0x716a('0x2c')]){var _0x369682={'messages':[{'source':_0x716a('0x44'),'to':_0x337e64[_0x716a('0x1f')],'body':_0x337e64['body'],'from':_0x2461f0[_0x716a('0x35')]||_0x2461f0[_0x716a('0x1f')]}]};var _0xf12305=util[_0x716a('0x45')](_0x716a('0x46'),_0x2461f0[_0x716a('0x2d')],_0x2461f0[_0x716a('0x2c')]);var _0x80f7f6={'method':_0x716a('0x39'),'uri':_0x716a('0x47'),'body':_0x369682,'headers':{'Authorization':util[_0x716a('0x45')](_0x716a('0x48'),new Buffer(_0xf12305)[_0x716a('0x49')]('base64'))},'json':!![]};rp(_0x80f7f6)[_0x716a('0x14')](function(_0x3b6f7a){if(_0x3b6f7a[_0x716a('0x4a')]>=0xc8&&_0x3b6f7a['http_code']<=0xce){if(_0x3b6f7a[_0x716a('0x4b')]&&_0x3b6f7a[_0x716a('0x4b')][_0x716a('0x4c')]>0x0){var _0x1ea8eb=_[_0x716a('0x4d')](_0x3b6f7a[_0x716a('0x4b')]['messages']);var _0x9b8c26={'messageId':_0x1ea8eb[_0x716a('0x4e')]};if(!_0x2461f0[_0x716a('0x4f')]){_0x9b8c26[_0x716a('0x3f')]=!![];}return _0x4b9bdb[_0x716a('0x25')](_0x9b8c26);}else{logger[_0x716a('0x17')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x716a('0x28'),_0x716a('0x50'),util['inspect'](_0x3b6f7a,{'showHidden':![],'depth':null}));}}else{logger[_0x716a('0x17')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x716a('0x28'),_0x716a('0x50'),util[_0x716a('0x29')](_0x3b6f7a,{'showHidden':![],'depth':null}));}})[_0x716a('0x27')](function(_0x2895ea){logger[_0x716a('0x17')](_0x716a('0x2a'),_0x716a('0x28'),'clickSend',util[_0x716a('0x29')](_0x2895ea,{'showHidden':![],'depth':null}));});}else{logger['error'](_0x716a('0x2a'),'afterCreate',_0x716a('0x50'),_0x716a('0x40'));}break;case'plivo':if(_0x2461f0['authId']&&_0x2461f0[_0x716a('0x1e')]){var _0x369682={'dst':_0x337e64['phone'],'text':_0x337e64[_0x716a('0x16')],'src':_0x2461f0[_0x716a('0x35')]||_0x2461f0[_0x716a('0x1f')],'url':_0x2461f0[_0x716a('0x22')]+_0x716a('0x23')+_0x337e64['id']+'/status?token='+_0x2461f0[_0x716a('0x24')]};var _0xf12305=util[_0x716a('0x45')]('%s:%s',_0x2461f0[_0x716a('0x51')],_0x2461f0['authToken']);var _0x80f7f6={'method':_0x716a('0x39'),'uri':util['format'](_0x716a('0x52'),_0x2461f0[_0x716a('0x51')]),'body':_0x369682,'headers':{'Authorization':util[_0x716a('0x45')](_0x716a('0x48'),new Buffer(_0xf12305)[_0x716a('0x49')]('base64'))},'json':!![]};rp(_0x80f7f6)['then'](function(_0x28f4f7){var _0x23480b={'messageId':_0x28f4f7[_0x716a('0x53')][0x0]};return _0x4b9bdb[_0x716a('0x25')](_0x23480b);})[_0x716a('0x27')](function(_0x33c44d){logger[_0x716a('0x17')](_0x716a('0x2a'),_0x716a('0x28'),_0x716a('0x54'),util[_0x716a('0x29')](_0x33c44d,{'showHidden':![],'depth':null}));});}else{logger['error'](_0x716a('0x2a'),_0x716a('0x28'),_0x716a('0x54'),'Missing\x20parameters:\x20authId,\x20authToken');}break;}}})[_0x716a('0x55')](function(){_0x33aadd();});}else{_0x33aadd();}}},'charset':_0x716a('0x56'),'collate':_0x716a('0x57')});};
\ No newline at end of file
index 2013dd0..5d41663 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed65=['result','catch','CreateSmsMessage','SmsMessage','create','options','raw','util','moment','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','request','then','info','debug','SmsMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','SmsMessage,\x20%s,\x20%s','message'];(function(_0x16530f,_0x50183f){var _0x350d23=function(_0x1723e3){while(--_0x1723e3){_0x16530f['push'](_0x16530f['shift']());}};_0x350d23(++_0x50183f);}(_0xed65,0x98));var _0x5ed6=function(_0x373096,_0x4d37aa){_0x373096=_0x373096-0x0;var _0x14a6d0=_0xed65[_0x373096];return _0x14a6d0;};'use strict';var _=require('lodash');var util=require(_0x5ed6('0x0'));var moment=require(_0x5ed6('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0x5ed6('0x2'))['db'];var utils=require('../../config/utils');var logger=require(_0x5ed6('0x3'))(_0x5ed6('0x4'));var config=require(_0x5ed6('0x5'));var jayson=require(_0x5ed6('0x6'));var client=jayson[_0x5ed6('0x7')][_0x5ed6('0x8')]({'port':0x232a});var socket=require(_0x5ed6('0x9'))({'host':_0x5ed6('0xa'),'port':0x18eb});require('./smsMessage.socket')['register'](socket);function respondWithRpcPromise(_0x2786e5,_0x381a9e,_0x327037){return new BPromise(function(_0xff0a3e,_0x410d34){return client[_0x5ed6('0xb')](_0x2786e5,_0x327037)[_0x5ed6('0xc')](function(_0x7150d2){logger[_0x5ed6('0xd')]('SmsMessage,\x20%s,\x20%s',_0x381a9e,'request\x20sent');logger[_0x5ed6('0xe')](_0x5ed6('0xf'),_0x381a9e,_0x5ed6('0x10'),JSON[_0x5ed6('0x11')](_0x7150d2));if(_0x7150d2[_0x5ed6('0x12')]){if(_0x7150d2['error'][_0x5ed6('0x13')]===0x1f4){logger['error'](_0x5ed6('0x14'),_0x381a9e,_0x7150d2[_0x5ed6('0x12')][_0x5ed6('0x15')]);return _0x410d34(_0x7150d2['error']['message']);}logger[_0x5ed6('0x12')](_0x5ed6('0x14'),_0x381a9e,_0x7150d2[_0x5ed6('0x12')][_0x5ed6('0x15')]);return _0xff0a3e(_0x7150d2[_0x5ed6('0x12')][_0x5ed6('0x15')]);}else{logger[_0x5ed6('0xd')](_0x5ed6('0x14'),_0x381a9e,_0x5ed6('0x10'));_0xff0a3e(_0x7150d2[_0x5ed6('0x16')][_0x5ed6('0x15')]);}})[_0x5ed6('0x17')](function(_0x420daa){logger['error']('SmsMessage,\x20%s,\x20%s',_0x381a9e,_0x420daa);_0x410d34(_0x420daa);});});}exports[_0x5ed6('0x18')]=function(_0x5c6f31){var _0x9070bb=this;return new Promise(function(_0x2a2733,_0x24ede4){return db[_0x5ed6('0x19')][_0x5ed6('0x1a')](_0x5c6f31['body'],{'raw':_0x5c6f31[_0x5ed6('0x1b')]?_0x5c6f31['options'][_0x5ed6('0x1c')]===undefined?!![]:![]:!![]})[_0x5ed6('0xc')](function(_0x330551){logger[_0x5ed6('0xd')](_0x5ed6('0x18'),_0x5c6f31);logger[_0x5ed6('0xe')](_0x5ed6('0x18'),_0x5c6f31,JSON[_0x5ed6('0x11')](_0x330551));_0x2a2733(_0x330551);})['catch'](function(_0x4a2287){logger[_0x5ed6('0x12')]('CreateSmsMessage',_0x4a2287['message'],_0x5c6f31);_0x24ede4(_0x9070bb['error'](0x1f4,_0x4a2287[_0x5ed6('0x15')]));});});};
\ No newline at end of file
+var _0xa008=['options','raw','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','localhost','./smsMessage.socket','register','request','then','info','SmsMessage,\x20%s,\x20%s','request\x20sent','debug','SmsMessage,\x20%s,\x20%s,\x20%s','stringify','error','message','result','CreateSmsMessage','SmsMessage','body'];(function(_0x46d29f,_0x14ba47){var _0x30f082=function(_0x155774){while(--_0x155774){_0x46d29f['push'](_0x46d29f['shift']());}};_0x30f082(++_0x14ba47);}(_0xa008,0x1e2));var _0x8a00=function(_0x84813c,_0x3f1bf4){_0x84813c=_0x84813c-0x0;var _0x135e81=_0xa008[_0x84813c];return _0x135e81;};'use strict';var _=require('lodash');var util=require(_0x8a00('0x0'));var moment=require(_0x8a00('0x1'));var BPromise=require(_0x8a00('0x2'));var rs=require(_0x8a00('0x3'));var fs=require('fs');var db=require(_0x8a00('0x4'))['db'];var utils=require(_0x8a00('0x5'));var logger=require(_0x8a00('0x6'))(_0x8a00('0x7'));var config=require(_0x8a00('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x8a00('0x9')][_0x8a00('0xa')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0x8a00('0xb'),'port':0x18eb});require(_0x8a00('0xc'))[_0x8a00('0xd')](socket);function respondWithRpcPromise(_0x500ee3,_0x24d9de,_0x5c33ca){return new BPromise(function(_0x401afa,_0x50a931){return client[_0x8a00('0xe')](_0x500ee3,_0x5c33ca)[_0x8a00('0xf')](function(_0x1b1a93){logger[_0x8a00('0x10')](_0x8a00('0x11'),_0x24d9de,_0x8a00('0x12'));logger[_0x8a00('0x13')](_0x8a00('0x14'),_0x24d9de,_0x8a00('0x12'),JSON[_0x8a00('0x15')](_0x1b1a93));if(_0x1b1a93[_0x8a00('0x16')]){if(_0x1b1a93[_0x8a00('0x16')]['code']===0x1f4){logger[_0x8a00('0x16')](_0x8a00('0x11'),_0x24d9de,_0x1b1a93[_0x8a00('0x16')]['message']);return _0x50a931(_0x1b1a93[_0x8a00('0x16')]['message']);}logger['error']('SmsMessage,\x20%s,\x20%s',_0x24d9de,_0x1b1a93[_0x8a00('0x16')][_0x8a00('0x17')]);return _0x401afa(_0x1b1a93[_0x8a00('0x16')][_0x8a00('0x17')]);}else{logger[_0x8a00('0x10')](_0x8a00('0x11'),_0x24d9de,'request\x20sent');_0x401afa(_0x1b1a93[_0x8a00('0x18')][_0x8a00('0x17')]);}})['catch'](function(_0x2e9c18){logger[_0x8a00('0x16')](_0x8a00('0x11'),_0x24d9de,_0x2e9c18);_0x50a931(_0x2e9c18);});});}exports[_0x8a00('0x19')]=function(_0x138892){var _0x311424=this;return new Promise(function(_0x88fd3,_0x225c9a){return db[_0x8a00('0x1a')]['create'](_0x138892[_0x8a00('0x1b')],{'raw':_0x138892[_0x8a00('0x1c')]?_0x138892[_0x8a00('0x1c')][_0x8a00('0x1d')]===undefined?!![]:![]:!![]})[_0x8a00('0xf')](function(_0x5e2906){logger[_0x8a00('0x10')]('CreateSmsMessage',_0x138892);logger['debug'](_0x8a00('0x19'),_0x138892,JSON['stringify'](_0x5e2906));_0x88fd3(_0x5e2906);})['catch'](function(_0x5f5564){logger['error'](_0x8a00('0x19'),_0x5f5564['message'],_0x138892);_0x225c9a(_0x311424[_0x8a00('0x16')](0x1f4,_0x5f5564[_0x8a00('0x17')]));});});};
\ No newline at end of file
index cfeef90..f8ba6af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9b4=['removeListener','register','smsMessage:','save','update','emit'];(function(_0x17d9e3,_0x1f969c){var _0x14192d=function(_0x159745){while(--_0x159745){_0x17d9e3['push'](_0x17d9e3['shift']());}};_0x14192d(++_0x1f969c);}(_0xe9b4,0x111));var _0x4e9b=function(_0xdc6bcd,_0x45bf2c){_0xdc6bcd=_0xdc6bcd-0x0;var _0x296641=_0xe9b4[_0xdc6bcd];return _0x296641;};'use strict';var SmsMessageEvents=require('./smsMessage.events');var events=[_0x4e9b('0x0'),'remove',_0x4e9b('0x1')];function createListener(_0xd5d386,_0x4979cb){return function(_0x6daa1f){_0x4979cb[_0x4e9b('0x2')](_0xd5d386,_0x6daa1f);};}function removeListener(_0xb26c2c,_0x281a4d){return function(){SmsMessageEvents[_0x4e9b('0x3')](_0xb26c2c,_0x281a4d);};}exports[_0x4e9b('0x4')]=function(_0x19fa10){for(var _0xcc6cbc=0x0,_0x5239c4=events['length'];_0xcc6cbc<_0x5239c4;_0xcc6cbc++){var _0x12b72e=events[_0xcc6cbc];var _0x4c2cac=createListener(_0x4e9b('0x5')+_0x12b72e,_0x19fa10);SmsMessageEvents['on'](_0x12b72e,_0x4c2cac);}};
\ No newline at end of file
+var _0x287c=['remove','emit','register','length','smsMessage:','save'];(function(_0x5857a7,_0x3f8601){var _0x2c35e4=function(_0x1e3492){while(--_0x1e3492){_0x5857a7['push'](_0x5857a7['shift']());}};_0x2c35e4(++_0x3f8601);}(_0x287c,0x1c1));var _0xc287=function(_0x476a38,_0x49a50a){_0x476a38=_0x476a38-0x0;var _0x5b7f12=_0x287c[_0x476a38];return _0x5b7f12;};'use strict';var SmsMessageEvents=require('./smsMessage.events');var events=[_0xc287('0x0'),_0xc287('0x1'),'update'];function createListener(_0x1252e9,_0x3eac2d){return function(_0x479ab9){_0x3eac2d[_0xc287('0x2')](_0x1252e9,_0x479ab9);};}function removeListener(_0x2299a7,_0x37dccb){return function(){SmsMessageEvents['removeListener'](_0x2299a7,_0x37dccb);};}exports[_0xc287('0x3')]=function(_0x214f5c){for(var _0x41cbdf=0x0,_0x5b9a52=events[_0xc287('0x4')];_0x41cbdf<_0x5b9a52;_0x41cbdf++){var _0x56d702=events[_0x41cbdf];var _0x3118cc=createListener(_0xc287('0x5')+_0x56d702,_0x214f5c);SmsMessageEvents['on'](_0x56d702,_0x3118cc);}};
\ No newline at end of file
index 30872b8..07c7a78 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3af7=['../../config/environment','get','isAuthenticated','index','/describe','/:id','show','getMembers','getTeams','getAgents','post','create','/:id/teams','/:id/users','addAgents','update','delete','destroy','removeTeams','removeAgents','exports','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x2a8646,_0x56a0d3){var _0x597579=function(_0x4416db){while(--_0x4416db){_0x2a8646['push'](_0x2a8646['shift']());}};_0x597579(++_0x56a0d3);}(_0x3af7,0x18c));var _0x73af=function(_0x520dff,_0xf3f397){_0x520dff=_0x520dff-0x0;var _0x3e44d0=_0x3af7[_0x520dff];return _0x3e44d0;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var express=require(_0x73af('0x0'));var router=express[_0x73af('0x1')]();var auth=require(_0x73af('0x2'));var interaction=require(_0x73af('0x3'));var config=require(_0x73af('0x4'));var controller=require('./smsQueue.controller');router[_0x73af('0x5')]('/',auth[_0x73af('0x6')](),controller[_0x73af('0x7')]);router[_0x73af('0x5')](_0x73af('0x8'),auth[_0x73af('0x6')](),controller['describe']);router[_0x73af('0x5')](_0x73af('0x9'),auth['isAuthenticated'](),controller[_0x73af('0xa')]);router[_0x73af('0x5')]('/:id/members',auth[_0x73af('0x6')](),controller[_0x73af('0xb')]);router[_0x73af('0x5')]('/:id/teams',auth['isAuthenticated'](),controller[_0x73af('0xc')]);router[_0x73af('0x5')]('/:id/users',auth[_0x73af('0x6')](),controller[_0x73af('0xd')]);router[_0x73af('0xe')]('/',auth[_0x73af('0x6')](),controller[_0x73af('0xf')]);router['post'](_0x73af('0x10'),auth[_0x73af('0x6')](),controller['addTeams']);router[_0x73af('0xe')](_0x73af('0x11'),auth[_0x73af('0x6')](),controller[_0x73af('0x12')]);router['put'](_0x73af('0x9'),auth[_0x73af('0x6')](),controller[_0x73af('0x13')]);router[_0x73af('0x14')](_0x73af('0x9'),auth[_0x73af('0x6')](),controller[_0x73af('0x15')]);router[_0x73af('0x14')]('/:id/teams',auth[_0x73af('0x6')](),controller[_0x73af('0x16')]);router['delete'](_0x73af('0x11'),auth[_0x73af('0x6')](),controller[_0x73af('0x17')]);module[_0x73af('0x18')]=router;
\ No newline at end of file
+var _0xc562=['post','create','addTeams','addAgents','put','update','delete','removeTeams','removeAgents','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsQueue.controller','get','index','/describe','isAuthenticated','describe','/:id','show','/:id/members','getMembers','/:id/teams','getTeams'];(function(_0x1b349a,_0x22222c){var _0x5d1f7c=function(_0x368d7c){while(--_0x368d7c){_0x1b349a['push'](_0x1b349a['shift']());}};_0x5d1f7c(++_0x22222c);}(_0xc562,0xf2));var _0x2c56=function(_0x10004e,_0xd701e6){_0x10004e=_0x10004e-0x0;var _0x5af990=_0xc562[_0x10004e];return _0x5af990;};'use strict';var multer=require(_0x2c56('0x0'));var util=require(_0x2c56('0x1'));var path=require(_0x2c56('0x2'));var express=require(_0x2c56('0x3'));var router=express['Router']();var auth=require(_0x2c56('0x4'));var interaction=require(_0x2c56('0x5'));var config=require(_0x2c56('0x6'));var controller=require(_0x2c56('0x7'));router[_0x2c56('0x8')]('/',auth['isAuthenticated'](),controller[_0x2c56('0x9')]);router[_0x2c56('0x8')](_0x2c56('0xa'),auth[_0x2c56('0xb')](),controller[_0x2c56('0xc')]);router['get'](_0x2c56('0xd'),auth[_0x2c56('0xb')](),controller[_0x2c56('0xe')]);router['get'](_0x2c56('0xf'),auth[_0x2c56('0xb')](),controller[_0x2c56('0x10')]);router[_0x2c56('0x8')](_0x2c56('0x11'),auth['isAuthenticated'](),controller[_0x2c56('0x12')]);router[_0x2c56('0x8')]('/:id/users',auth[_0x2c56('0xb')](),controller['getAgents']);router[_0x2c56('0x13')]('/',auth['isAuthenticated'](),controller[_0x2c56('0x14')]);router[_0x2c56('0x13')](_0x2c56('0x11'),auth[_0x2c56('0xb')](),controller[_0x2c56('0x15')]);router['post']('/:id/users',auth[_0x2c56('0xb')](),controller[_0x2c56('0x16')]);router[_0x2c56('0x17')](_0x2c56('0xd'),auth[_0x2c56('0xb')](),controller[_0x2c56('0x18')]);router['delete'](_0x2c56('0xd'),auth[_0x2c56('0xb')](),controller['destroy']);router[_0x2c56('0x19')](_0x2c56('0x11'),auth['isAuthenticated'](),controller[_0x2c56('0x1a')]);router[_0x2c56('0x19')]('/:id/users',auth[_0x2c56('0xb')](),controller[_0x2c56('0x1b')]);module[_0x2c56('0x1c')]=router;
\ No newline at end of file
index 624f70f..092f59d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3075=['beepall','roundrobin','sequelize','exports','name','STRING','INTEGER','rrmemory'];(function(_0x265a05,_0x3c81c0){var _0x350c81=function(_0x49ea50){while(--_0x49ea50){_0x265a05['push'](_0x265a05['shift']());}};_0x350c81(++_0x3c81c0);}(_0x3075,0xea));var _0x5307=function(_0x458e60,_0x432157){_0x458e60=_0x458e60-0x0;var _0x128528=_0x3075[_0x458e60];return _0x128528;};'use strict';var Sequelize=require(_0x5307('0x0'));module[_0x5307('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0x5307('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x5307('0x3')]},'timeout':{'type':Sequelize[_0x5307('0x4')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0x5307('0x5'),_0x5307('0x6'),_0x5307('0x7'))}};
\ No newline at end of file
+var _0x3b14=['sequelize','exports','name','STRING','INTEGER','rrmemory','beepall','roundrobin'];(function(_0x1ca9a0,_0x17be2b){var _0x4a80d6=function(_0x31962d){while(--_0x31962d){_0x1ca9a0['push'](_0x1ca9a0['shift']());}};_0x4a80d6(++_0x17be2b);}(_0x3b14,0x128));var _0x43b1=function(_0x5b0b6d,_0x20e089){_0x5b0b6d=_0x5b0b6d-0x0;var _0x38a893=_0x3b14[_0x5b0b6d];return _0x38a893;};'use strict';var Sequelize=require(_0x43b1('0x0'));module[_0x43b1('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0x43b1('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x43b1('0x3')]},'timeout':{'type':Sequelize[_0x43b1('0x4')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0x43b1('0x5'),_0x43b1('0x6'),_0x43b1('0x7'))}};
\ No newline at end of file
index f4401c9..c940f80 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9ad9=['rows','params','find','catch','create','body','describe','getMembers','findOne','get','UserSmsQueue','nolimit','order','User','findAndCountAll','agent','smsPause','updatedAt','format','getTeams','addTeams','ids','Agents','penalty','removeTeams','Team','union','removeAgents','addAgents','omit','emit','isArray','userSmsQueue:remove','getAgents','request-promise','moment','mustache','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','socket.io-emitter','./smsQueue.socket','register','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','update','then','error','stack','name','send','index','SmsQueue','rawAttributes','model','query','dateStart','dateEnd','keys','intersection','fields','length','attributes','hasOwnProperty','sort','filters','pick','day','add','where','filter','merge','map','options','includeAll','include','findAll'];(function(_0x3ad6bf,_0x14777a){var _0x34900f=function(_0x550921){while(--_0x550921){_0x3ad6bf['push'](_0x3ad6bf['shift']());}};_0x34900f(++_0x14777a);}(_0x9ad9,0x81));var _0x99ad=function(_0x4f66,_0x4c4a2e){_0x4f66=_0x4f66-0x0;var _0x4e3d42=_0x9ad9[_0x4f66];return _0x4e3d42;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x99ad('0x0'));var moment=require(_0x99ad('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x99ad('0x2'));var util=require('util');var path=require('path');var sox=require(_0x99ad('0x3'));var csv=require(_0x99ad('0x4'));var ejs=require(_0x99ad('0x5'));var fs=require('fs');var _=require(_0x99ad('0x6'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x99ad('0x7'));var deskjs=require(_0x99ad('0x8'));var toCsv=require(_0x99ad('0x4'));var querystring=require(_0x99ad('0x9'));var Papa=require('papaparse');var qs=require(_0x99ad('0xa'));var logger=require(_0x99ad('0xb'))(_0x99ad('0xc'));var utils=require(_0x99ad('0xd'));var config=require('../../config/environment');var db=require(_0x99ad('0xe'))['db'];var socket=require(_0x99ad('0xf'))({'host':'localhost','port':0x18eb});require(_0x99ad('0x10'))[_0x99ad('0x11')](socket);function respondWithStatusCode(_0x667929,_0x541e01){_0x541e01=_0x541e01||0xcc;return function(_0x5cc41b){if(_0x5cc41b){return _0x667929[_0x99ad('0x12')](_0x541e01);}return _0x667929[_0x99ad('0x13')](_0x541e01)[_0x99ad('0x14')]();};}function respondWithResult(_0x3477f6,_0x15244d){_0x15244d=_0x15244d||0xc8;return function(_0x4fa5d4){if(_0x4fa5d4){return _0x3477f6[_0x99ad('0x13')](_0x15244d)['json'](_0x4fa5d4);}};}function respondWithFilteredResult(_0x2e56bc,_0x372673){return function(_0x30096a){if(_0x30096a){var _0x3ecb61=_0x30096a[_0x99ad('0x15')],_0x460186=_0x372673[_0x99ad('0x16')],_0x1f89c3=_0x372673[_0x99ad('0x16')]+_0x372673[_0x99ad('0x17')],_0x7e43e9;if(_0x1f89c3>=_0x3ecb61){_0x1f89c3=_0x3ecb61;_0x7e43e9=0xc8;}else{_0x7e43e9=0xce;}_0x2e56bc['status'](_0x7e43e9);return _0x2e56bc[_0x99ad('0x18')](_0x99ad('0x19'),_0x460186+'-'+_0x1f89c3+'/'+_0x3ecb61)[_0x99ad('0x1a')](_0x30096a);}return null;};}function patchUpdates(_0x493db6){return function(_0x2455e3){try{jsonpatch[_0x99ad('0x1b')](_0x2455e3,_0x493db6,!![]);}catch(_0x3a8557){return BPromise[_0x99ad('0x1c')](_0x3a8557);}return _0x2455e3['save']();};}function saveUpdates(_0x35becc,_0x8cabc8){return function(_0x4d8e34){if(_0x4d8e34){return _0x4d8e34[_0x99ad('0x1d')](_0x35becc)[_0x99ad('0x1e')](function(_0x34f26e){return _0x34f26e;});}return null;};}function removeEntity(_0x9472ea,_0x5d421f){return function(_0x3d9f77){if(_0x3d9f77){return _0x3d9f77['destroy']()['then'](function(){_0x9472ea[_0x99ad('0x13')](0xcc)[_0x99ad('0x14')]();});}};}function handleEntityNotFound(_0x458770,_0x59fb62){return function(_0x24ad59){if(!_0x24ad59){_0x458770[_0x99ad('0x12')](0x194);}return _0x24ad59;};}function handleError(_0x28d015,_0x2df2d8){_0x2df2d8=_0x2df2d8||0x1f4;return function(_0x4ab1f9){logger[_0x99ad('0x1f')](_0x4ab1f9[_0x99ad('0x20')]);if(_0x4ab1f9[_0x99ad('0x21')]){delete _0x4ab1f9[_0x99ad('0x21')];}_0x28d015[_0x99ad('0x13')](_0x2df2d8)[_0x99ad('0x22')](_0x4ab1f9);};}exports[_0x99ad('0x23')]=function(_0x50cbec,_0x4e624c){var _0x9113d5={},_0x343218={},_0x3b2ccc={'count':0x0,'rows':[]};var _0x1e9b41=db[_0x99ad('0x24')][_0x99ad('0x25')];_0x343218[_0x99ad('0x26')]=_['keys'](_0x1e9b41);var _0x4ae6fb={'dateStart':_0x50cbec[_0x99ad('0x27')][_0x99ad('0x28')],'dateEnd':_0x50cbec['query'][_0x99ad('0x29')]};delete _0x50cbec[_0x99ad('0x27')][_0x99ad('0x28')];delete _0x50cbec['query']['dateEnd'];_0x343218[_0x99ad('0x27')]=_[_0x99ad('0x2a')](_0x50cbec[_0x99ad('0x27')]);_0x343218['filters']=_[_0x99ad('0x2b')](_0x343218['model'],_0x343218[_0x99ad('0x27')]);_0x9113d5['attributes']=_['intersection'](_0x343218[_0x99ad('0x26')],qs['fields'](_0x50cbec['query'][_0x99ad('0x2c')]));_0x9113d5['attributes']=_0x9113d5['attributes'][_0x99ad('0x2d')]?_0x9113d5[_0x99ad('0x2e')]:_0x343218['model'];if(!_0x50cbec[_0x99ad('0x27')][_0x99ad('0x2f')]('nolimit')){_0x9113d5[_0x99ad('0x17')]=qs['limit'](_0x50cbec[_0x99ad('0x27')]['limit']);_0x9113d5[_0x99ad('0x16')]=qs[_0x99ad('0x16')](_0x50cbec[_0x99ad('0x27')]['offset']);}_0x9113d5['order']=qs[_0x99ad('0x30')](_0x50cbec[_0x99ad('0x27')]['sort']);_0x9113d5['where']=qs[_0x99ad('0x31')](_[_0x99ad('0x32')](_0x50cbec[_0x99ad('0x27')],_0x343218[_0x99ad('0x31')]));if(_0x4ae6fb[_0x99ad('0x28')]){if(_0x4ae6fb['dateEnd']){_0x4ae6fb['dateEnd']=moment(_0x4ae6fb[_0x99ad('0x29')])['add'](0x1,_0x99ad('0x33'));}else{_0x4ae6fb[_0x99ad('0x29')]=moment(_0x4ae6fb['dateStart'])[_0x99ad('0x34')](0x1,_0x99ad('0x33'));}_['merge'](_0x9113d5[_0x99ad('0x35')],{'createdAt':{'$gte':_0x4ae6fb['dateStart'],'$lte':_0x4ae6fb[_0x99ad('0x29')]}});}if(_0x50cbec[_0x99ad('0x27')][_0x99ad('0x36')]){_0x9113d5[_0x99ad('0x35')]=_[_0x99ad('0x37')](_0x9113d5[_0x99ad('0x35')],{'$or':_[_0x99ad('0x38')](_0x9113d5[_0x99ad('0x2e')],function(_0x56c924){var _0x5ae776={};_0x5ae776[_0x56c924]={'$like':'%'+_0x50cbec['query']['filter']+'%'};return _0x5ae776;})});}_0x9113d5=_['merge']({},_0x9113d5,_0x50cbec[_0x99ad('0x39')]);var _0x330ec5={'where':_0x9113d5[_0x99ad('0x35')]};return db[_0x99ad('0x24')][_0x99ad('0x15')](_0x330ec5)[_0x99ad('0x1e')](function(_0x141951){_0x3b2ccc['count']=_0x141951;if(_0x50cbec['query'][_0x99ad('0x3a')]){_0x9113d5[_0x99ad('0x3b')]=[{'all':!![]}];}return db[_0x99ad('0x24')][_0x99ad('0x3c')](_0x9113d5);})['then'](function(_0x1d40ba){_0x3b2ccc[_0x99ad('0x3d')]=_0x1d40ba;return _0x3b2ccc;})[_0x99ad('0x1e')](respondWithFilteredResult(_0x4e624c,_0x9113d5))['catch'](handleError(_0x4e624c,null));};exports['show']=function(_0x5074b5,_0x53a520){var _0xefc993={'raw':!![],'where':{'id':_0x5074b5[_0x99ad('0x3e')]['id']}},_0x498543={};_0x498543[_0x99ad('0x26')]=_['keys'](db[_0x99ad('0x24')][_0x99ad('0x25')]);_0x498543['query']=_[_0x99ad('0x2a')](_0x5074b5[_0x99ad('0x27')]);_0x498543[_0x99ad('0x31')]=_[_0x99ad('0x2b')](_0x498543[_0x99ad('0x26')],_0x498543[_0x99ad('0x27')]);_0xefc993[_0x99ad('0x2e')]=_[_0x99ad('0x2b')](_0x498543[_0x99ad('0x26')],qs[_0x99ad('0x2c')](_0x5074b5[_0x99ad('0x27')][_0x99ad('0x2c')]));_0xefc993[_0x99ad('0x2e')]=_0xefc993[_0x99ad('0x2e')]['length']?_0xefc993[_0x99ad('0x2e')]:_0x498543[_0x99ad('0x26')];if(_0x5074b5[_0x99ad('0x27')]['includeAll']){_0xefc993[_0x99ad('0x3b')]=[{'all':!![]}];}_0xefc993=_[_0x99ad('0x37')]({},_0xefc993,_0x5074b5[_0x99ad('0x39')]);return db['SmsQueue'][_0x99ad('0x3f')](_0xefc993)[_0x99ad('0x1e')](handleEntityNotFound(_0x53a520,null))['then'](respondWithResult(_0x53a520,null))[_0x99ad('0x40')](handleError(_0x53a520,null));};exports[_0x99ad('0x41')]=function(_0x38813f,_0x512d44){return db[_0x99ad('0x24')][_0x99ad('0x41')](_0x38813f['body'],{})[_0x99ad('0x1e')](respondWithResult(_0x512d44,0xc9))['catch'](handleError(_0x512d44,null));};exports['update']=function(_0x51cd99,_0x3eb6ff){if(_0x51cd99['body']['id']){delete _0x51cd99['body']['id'];}return db['SmsQueue'][_0x99ad('0x3f')]({'where':{'id':_0x51cd99[_0x99ad('0x3e')]['id']}})[_0x99ad('0x1e')](handleEntityNotFound(_0x3eb6ff,null))['then'](saveUpdates(_0x51cd99[_0x99ad('0x42')],null))['then'](respondWithResult(_0x3eb6ff,null))[_0x99ad('0x40')](handleError(_0x3eb6ff,null));};exports['destroy']=function(_0x55cc9c,_0x2ba361){return db[_0x99ad('0x24')][_0x99ad('0x3f')]({'where':{'id':_0x55cc9c['params']['id']}})['then'](handleEntityNotFound(_0x2ba361,null))[_0x99ad('0x1e')](removeEntity(_0x2ba361,null))[_0x99ad('0x40')](handleError(_0x2ba361,null));};exports[_0x99ad('0x43')]=function(_0x1e0904,_0x30d3a7){return db[_0x99ad('0x24')][_0x99ad('0x43')]()[_0x99ad('0x1e')](respondWithResult(_0x30d3a7,null))['catch'](handleError(_0x30d3a7,null));};exports[_0x99ad('0x44')]=function(_0x5cdddd,_0x4206c7,_0x1093de){var _0x4a6a31={'raw':!![],'where':{}},_0x173c44={},_0x3d7141;return db[_0x99ad('0x24')][_0x99ad('0x45')]({'where':{'id':_0x5cdddd[_0x99ad('0x3e')]['id']}})[_0x99ad('0x1e')](handleEntityNotFound(_0x4206c7,null))[_0x99ad('0x1e')](function(_0x400a67){if(_0x400a67){_0x3d7141=_0x400a67[_0x99ad('0x46')]({'plain':!![]});_0x173c44[_0x99ad('0x26')]=_['keys'](db[_0x99ad('0x47')][_0x99ad('0x25')]);_0x173c44[_0x99ad('0x27')]=_[_0x99ad('0x2a')](_0x5cdddd[_0x99ad('0x27')]);_0x173c44[_0x99ad('0x31')]=_['intersection'](_0x173c44[_0x99ad('0x26')],_0x173c44[_0x99ad('0x27')]);_0x4a6a31[_0x99ad('0x2e')]=_['intersection'](_0x173c44[_0x99ad('0x26')],qs['fields'](_0x5cdddd[_0x99ad('0x27')][_0x99ad('0x2c')]));_0x4a6a31[_0x99ad('0x2e')]=_0x4a6a31[_0x99ad('0x2e')][_0x99ad('0x2d')]?_0x4a6a31[_0x99ad('0x2e')]:_0x173c44[_0x99ad('0x26')];if(!_0x5cdddd[_0x99ad('0x27')][_0x99ad('0x2f')](_0x99ad('0x48'))){_0x4a6a31[_0x99ad('0x17')]=qs['limit'](_0x5cdddd[_0x99ad('0x27')]['limit']);_0x4a6a31[_0x99ad('0x16')]=qs['offset'](_0x5cdddd[_0x99ad('0x27')][_0x99ad('0x16')]);}_0x4a6a31[_0x99ad('0x49')]=qs[_0x99ad('0x30')](_0x5cdddd[_0x99ad('0x27')][_0x99ad('0x30')]);_0x4a6a31[_0x99ad('0x35')]=qs['filters'](_['pick'](_0x5cdddd[_0x99ad('0x27')],_0x173c44[_0x99ad('0x31')]));_0x4a6a31[_0x99ad('0x35')]['SmsQueueId']=_0x400a67['id'];if(_0x5cdddd[_0x99ad('0x27')][_0x99ad('0x36')]){_0x4a6a31[_0x99ad('0x35')]=_[_0x99ad('0x37')](_0x4a6a31[_0x99ad('0x35')],{'$or':_['map'](_0x4a6a31[_0x99ad('0x2e')],function(_0x49cf60){var _0x43ced2={};_0x43ced2[_0x49cf60]={'$like':'%'+_0x5cdddd['query'][_0x99ad('0x36')]+'%'};return _0x43ced2;})});}_0x4a6a31=_[_0x99ad('0x37')]({},_0x4a6a31,_0x5cdddd['options']);return db[_0x99ad('0x47')][_0x99ad('0x3c')](_0x4a6a31);}})['then'](function(_0xefc1b9){if(_0xefc1b9){return db[_0x99ad('0x4a')][_0x99ad('0x4b')]({'where':{'id':_[_0x99ad('0x38')](_0xefc1b9,'UserId'),'role':_0x99ad('0x4c')},'attributes':['id',_0x99ad('0x21'),_0x99ad('0x4d'),_0x99ad('0x4e'),'createdAt']});}})['then'](function(_0x4a57f1){if(_0x4a57f1){return{'count':_0x4a57f1[_0x99ad('0x15')],'rows':_[_0x99ad('0x38')](_0x4a57f1[_0x99ad('0x3d')],function(_0x44c372){return{'membername':_0x44c372[_0x99ad('0x21')],'UserId':_0x44c372['id'],'queue_name':_0x3d7141[_0x99ad('0x21')],'SmsQueueId':_0x3d7141['id'],'interface':util[_0x99ad('0x4f')]('%s/%s','SIP',_0x44c372[_0x99ad('0x21')]),'penalty':0x0,'paused':_0x44c372[_0x99ad('0x4d')],'createdAt':_0x44c372['createdAt'],'updatedAt':_0x44c372[_0x99ad('0x4e')]};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x4206c7,_0x4a6a31))[_0x99ad('0x40')](handleError(_0x4206c7,null));};exports['getTeams']=function(_0x1a76ec,_0xac979,_0x1cdf66){var _0x1f878b={};var _0x2aeb87={};var _0x24c558;var _0x3e9a2b;return db['SmsQueue'][_0x99ad('0x45')]({'where':{'id':_0x1a76ec[_0x99ad('0x3e')]['id']}})[_0x99ad('0x1e')](handleEntityNotFound(_0xac979,null))[_0x99ad('0x1e')](function(_0x322eab){if(_0x322eab){_0x24c558=_0x322eab;_0x2aeb87[_0x99ad('0x26')]=_[_0x99ad('0x2a')](db['Team'][_0x99ad('0x25')]);_0x2aeb87[_0x99ad('0x27')]=_[_0x99ad('0x2a')](_0x1a76ec['query']);_0x2aeb87[_0x99ad('0x31')]=_['intersection'](_0x2aeb87[_0x99ad('0x26')],_0x2aeb87[_0x99ad('0x27')]);_0x1f878b['attributes']=_['intersection'](_0x2aeb87['model'],qs[_0x99ad('0x2c')](_0x1a76ec[_0x99ad('0x27')]['fields']));_0x1f878b[_0x99ad('0x2e')]=_0x1f878b['attributes'][_0x99ad('0x2d')]?_0x1f878b[_0x99ad('0x2e')]:_0x2aeb87[_0x99ad('0x26')];_0x1f878b[_0x99ad('0x49')]=qs['sort'](_0x1a76ec[_0x99ad('0x27')][_0x99ad('0x30')]);_0x1f878b[_0x99ad('0x35')]=qs['filters'](_[_0x99ad('0x32')](_0x1a76ec[_0x99ad('0x27')],_0x2aeb87[_0x99ad('0x31')]));if(_0x1a76ec[_0x99ad('0x27')]['filter']){_0x1f878b['where']=_[_0x99ad('0x37')](_0x1f878b['where'],{'$or':_[_0x99ad('0x38')](_0x1f878b[_0x99ad('0x2e')],function(_0x5d54e9){var _0x596440={};_0x596440[_0x5d54e9]={'$like':'%'+_0x1a76ec[_0x99ad('0x27')][_0x99ad('0x36')]+'%'};return _0x596440;})});}_0x1f878b=_['merge']({},_0x1f878b,_0x1a76ec[_0x99ad('0x39')]);return _0x24c558[_0x99ad('0x50')](_0x1f878b);}})[_0x99ad('0x1e')](function(_0xa36eee){if(_0xa36eee){_0x3e9a2b=_0xa36eee['length'];if(!_0x1a76ec[_0x99ad('0x27')]['hasOwnProperty'](_0x99ad('0x48'))){_0x1f878b[_0x99ad('0x17')]=qs['limit'](_0x1a76ec['query'][_0x99ad('0x17')]);_0x1f878b['offset']=qs[_0x99ad('0x16')](_0x1a76ec[_0x99ad('0x27')][_0x99ad('0x16')]);}return _0x24c558[_0x99ad('0x50')](_0x1f878b);}})[_0x99ad('0x1e')](function(_0x30a0ef){if(_0x30a0ef){return _0x30a0ef?{'count':_0x3e9a2b,'rows':_0x30a0ef}:null;}})['then'](respondWithResult(_0xac979,null))[_0x99ad('0x40')](handleError(_0xac979,null));};exports[_0x99ad('0x51')]=function(_0x405a2b,_0x56d503,_0x26fac7){var _0x5130e0=[];var _0x35baee;return db['Team'][_0x99ad('0x3c')]({'where':{'id':_0x405a2b[_0x99ad('0x42')][_0x99ad('0x52')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x99ad('0x53'),'attributes':['id'],'raw':!![]}]})[_0x99ad('0x1e')](function(_0x4694f5){if(_0x4694f5){for(var _0x4f48c8=0x0;_0x4f48c8<_0x4694f5[_0x99ad('0x2d')];_0x4f48c8+=0x1){for(var _0x161a75=0x0;_0x161a75<_0x4694f5[_0x4f48c8][_0x99ad('0x53')][_0x99ad('0x2d')];_0x161a75+=0x1){_0x5130e0=_['union'](_0x5130e0,[_0x4694f5[_0x4f48c8][_0x99ad('0x53')][_0x161a75]['id']]);}}return _0x5130e0;}})[_0x99ad('0x1e')](function(_0x1c9329){if(_0x1c9329){return db[_0x99ad('0x24')][_0x99ad('0x3f')]({'where':{'id':_0x405a2b['params']['id']}});}})[_0x99ad('0x1e')](function(_0x421efc){if(_0x421efc){_0x35baee=_0x421efc;return _0x35baee['addAgents'](_0x5130e0,{'penalty':_0x405a2b[_0x99ad('0x42')][_0x99ad('0x54')]});}})[_0x99ad('0x1e')](function(_0x149253){if(_0x149253){return _0x35baee[_0x99ad('0x51')](_0x405a2b[_0x99ad('0x42')][_0x99ad('0x52')]);}})[_0x99ad('0x1e')](handleEntityNotFound(_0x56d503,null))[_0x99ad('0x1e')](respondWithStatusCode(_0x56d503,null))[_0x99ad('0x40')](handleError(_0x56d503,null));};exports[_0x99ad('0x55')]=function(_0x47c67a,_0x18fabe,_0xa791c5){var _0x24b242=[];var _0x2e33bf;return db[_0x99ad('0x56')]['findAll']({'where':{'id':_0x47c67a['query'][_0x99ad('0x52')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x99ad('0x53'),'attributes':['id'],'raw':!![]}]})[_0x99ad('0x1e')](function(_0x232a6c){if(_0x232a6c){for(var _0x54471d=0x0;_0x54471d<_0x232a6c[_0x99ad('0x2d')];_0x54471d+=0x1){for(var _0x5ce831=0x0;_0x5ce831<_0x232a6c[_0x54471d][_0x99ad('0x53')][_0x99ad('0x2d')];_0x5ce831+=0x1){_0x24b242=_[_0x99ad('0x57')](_0x24b242,[_0x232a6c[_0x54471d][_0x99ad('0x53')][_0x5ce831]['id']]);}}return _0x24b242;}})[_0x99ad('0x1e')](function(_0x4fdc0a){if(_0x4fdc0a){return db[_0x99ad('0x24')]['find']({'where':{'id':_0x47c67a[_0x99ad('0x3e')]['id']}});}})[_0x99ad('0x1e')](function(_0x4c0636){if(_0x4c0636){_0x2e33bf=_0x4c0636;return _0x2e33bf[_0x99ad('0x58')](_0x24b242);}})[_0x99ad('0x1e')](function(_0xc703ee){if(_0x2e33bf){return _0x2e33bf[_0x99ad('0x55')](_0x47c67a[_0x99ad('0x27')][_0x99ad('0x52')]);}})[_0x99ad('0x1e')](handleEntityNotFound(_0x18fabe,null))[_0x99ad('0x1e')](respondWithStatusCode(_0x18fabe,null))[_0x99ad('0x40')](handleError(_0x18fabe,null));};exports[_0x99ad('0x59')]=function(_0x2265e4,_0xcdeff9,_0x1ac9ea){return db[_0x99ad('0x24')]['find']({'where':{'id':_0x2265e4['params']['id']}})['then'](handleEntityNotFound(_0xcdeff9,null))['then'](function(_0x1fde55){if(_0x1fde55){return _0x1fde55[_0x99ad('0x59')](_0x2265e4[_0x99ad('0x42')][_0x99ad('0x52')],_[_0x99ad('0x5a')](_0x2265e4['body'],[_0x99ad('0x52'),'id'])||{})['spread'](function(_0xa7fee2){for(var _0x1b3121=0x0;_0x1b3121<_0x2265e4[_0x99ad('0x42')]['ids'][_0x99ad('0x2d')];_0x1b3121+=0x1){socket[_0x99ad('0x5b')]('userSmsQueue:save',{'UserId':_0x2265e4[_0x99ad('0x42')]['ids'][_0x1b3121],'SmsQueueId':_0x2265e4[_0x99ad('0x3e')]['id']});}return _0xa7fee2;});}})[_0x99ad('0x1e')](respondWithResult(_0xcdeff9,null))[_0x99ad('0x40')](handleError(_0xcdeff9,null));};exports[_0x99ad('0x58')]=function(_0x94ff8c,_0xaaaff1,_0x596249){var _0x318ea1;return db[_0x99ad('0x24')][_0x99ad('0x3f')]({'where':{'id':_0x94ff8c[_0x99ad('0x3e')]['id']}})[_0x99ad('0x1e')](handleEntityNotFound(_0xaaaff1,null))[_0x99ad('0x1e')](function(_0x513396){if(_0x513396){return _0x513396[_0x99ad('0x58')](_0x94ff8c[_0x99ad('0x27')][_0x99ad('0x52')])[_0x99ad('0x1e')](function(_0x444c31){if(_[_0x99ad('0x5c')](_0x94ff8c['query'][_0x99ad('0x52')])){for(var _0x2d3a12=0x0;_0x2d3a12<_0x94ff8c[_0x99ad('0x27')][_0x99ad('0x52')][_0x99ad('0x2d')];_0x2d3a12+=0x1){socket[_0x99ad('0x5b')](_0x99ad('0x5d'),{'UserId':_0x94ff8c[_0x99ad('0x27')]['ids'][_0x2d3a12],'SmsQueueId':_0x94ff8c['params']['id']});}}else{socket[_0x99ad('0x5b')](_0x99ad('0x5d'),{'UserId':_0x94ff8c[_0x99ad('0x27')][_0x99ad('0x52')],'SmsQueueId':_0x94ff8c[_0x99ad('0x3e')]['id']});}});}})[_0x99ad('0x1e')](respondWithStatusCode(_0xaaaff1,null))['catch'](handleError(_0xaaaff1,null));};exports['getAgents']=function(_0x4f4a45,_0x50910e,_0x5aff30){var _0x19572e={};var _0x233967={};var _0x3f1b82;var _0x49440c;return db[_0x99ad('0x24')][_0x99ad('0x45')]({'where':{'id':_0x4f4a45[_0x99ad('0x3e')]['id']}})[_0x99ad('0x1e')](handleEntityNotFound(_0x50910e,null))[_0x99ad('0x1e')](function(_0x12d958){if(_0x12d958){_0x3f1b82=_0x12d958;_0x233967[_0x99ad('0x26')]=_[_0x99ad('0x2a')](db[_0x99ad('0x4a')]['rawAttributes']);_0x233967['query']=_[_0x99ad('0x2a')](_0x4f4a45[_0x99ad('0x27')]);_0x233967[_0x99ad('0x31')]=_[_0x99ad('0x2b')](_0x233967['model'],_0x233967[_0x99ad('0x27')]);_0x19572e[_0x99ad('0x2e')]=_['intersection'](_0x233967[_0x99ad('0x26')],qs['fields'](_0x4f4a45[_0x99ad('0x27')][_0x99ad('0x2c')]));_0x19572e[_0x99ad('0x2e')]=_0x19572e[_0x99ad('0x2e')]['length']?_0x19572e[_0x99ad('0x2e')]:_0x233967[_0x99ad('0x26')];_0x19572e[_0x99ad('0x49')]=qs[_0x99ad('0x30')](_0x4f4a45['query'][_0x99ad('0x30')]);_0x19572e[_0x99ad('0x35')]=qs['filters'](_['pick'](_0x4f4a45[_0x99ad('0x27')],_0x233967['filters']));if(_0x4f4a45[_0x99ad('0x27')][_0x99ad('0x36')]){_0x19572e[_0x99ad('0x35')]=_[_0x99ad('0x37')](_0x19572e['where'],{'$or':_[_0x99ad('0x38')](_0x19572e[_0x99ad('0x2e')],function(_0x5dd3ba){var _0x9b5e96={};_0x9b5e96[_0x5dd3ba]={'$like':'%'+_0x4f4a45['query'][_0x99ad('0x36')]+'%'};return _0x9b5e96;})});}_0x19572e=_[_0x99ad('0x37')]({},_0x19572e,_0x4f4a45['options']);return _0x3f1b82[_0x99ad('0x5e')](_0x19572e);}})[_0x99ad('0x1e')](function(_0x408215){if(_0x408215){_0x49440c=_0x408215[_0x99ad('0x2d')];if(!_0x4f4a45['query']['hasOwnProperty'](_0x99ad('0x48'))){_0x19572e[_0x99ad('0x17')]=qs[_0x99ad('0x17')](_0x4f4a45[_0x99ad('0x27')][_0x99ad('0x17')]);_0x19572e[_0x99ad('0x16')]=qs[_0x99ad('0x16')](_0x4f4a45[_0x99ad('0x27')]['offset']);}return _0x3f1b82[_0x99ad('0x5e')](_0x19572e);}})[_0x99ad('0x1e')](function(_0x5bad63){if(_0x5bad63){return _0x5bad63?{'count':_0x49440c,'rows':_0x5bad63}:null;}})[_0x99ad('0x1e')](respondWithResult(_0x50910e,null))[_0x99ad('0x40')](handleError(_0x50910e,null));};
\ No newline at end of file
+var _0x6ef6=['save','update','then','name','keys','dateStart','dateEnd','query','intersection','attributes','fields','length','model','hasOwnProperty','nolimit','order','sort','filters','add','day','where','filter','merge','map','SmsQueue','includeAll','include','findAll','rows','show','params','options','find','catch','create','body','destroy','describe','get','UserSmsQueue','rawAttributes','SmsQueueId','UserId','agent','createdAt','format','%s/%s','SIP','smsPause','updatedAt','getTeams','findOne','Team','pick','ids','User','Agents','union','penalty','addTeams','removeAgents','removeTeams','addAgents','omit','spread','userSmsQueue:save','isArray','userSmsQueue:remove','getAgents','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../mysqldb','localhost','register','status','end','count','offset','limit','set','Content-Range','json','apply','reject'];(function(_0x21f931,_0x598b2d){var _0x3f083c=function(_0x1c7c49){while(--_0x1c7c49){_0x21f931['push'](_0x21f931['shift']());}};_0x3f083c(++_0x598b2d);}(_0x6ef6,0x1cd));var _0x66ef=function(_0x1150fc,_0x12eea4){_0x1150fc=_0x1150fc-0x0;var _0x1e318d=_0x6ef6[_0x1150fc];return _0x1e318d;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x66ef('0x0'));var moment=require(_0x66ef('0x1'));var BPromise=require(_0x66ef('0x2'));var Mustache=require(_0x66ef('0x3'));var util=require('util');var path=require('path');var sox=require(_0x66ef('0x4'));var csv=require(_0x66ef('0x5'));var ejs=require(_0x66ef('0x6'));var fs=require('fs');var _=require(_0x66ef('0x7'));var squel=require('squel');var crypto=require(_0x66ef('0x8'));var jsforce=require(_0x66ef('0x9'));var deskjs=require(_0x66ef('0xa'));var toCsv=require('to-csv');var querystring=require(_0x66ef('0xb'));var Papa=require(_0x66ef('0xc'));var qs=require('../../components/parsers/qs');var logger=require(_0x66ef('0xd'))(_0x66ef('0xe'));var utils=require(_0x66ef('0xf'));var config=require('../../config/environment');var db=require(_0x66ef('0x10'))['db'];var socket=require('socket.io-emitter')({'host':_0x66ef('0x11'),'port':0x18eb});require('./smsQueue.socket')[_0x66ef('0x12')](socket);function respondWithStatusCode(_0x4169cc,_0x1a5573){_0x1a5573=_0x1a5573||0xcc;return function(_0xda80ee){if(_0xda80ee){return _0x4169cc['sendStatus'](_0x1a5573);}return _0x4169cc[_0x66ef('0x13')](_0x1a5573)[_0x66ef('0x14')]();};}function respondWithResult(_0xff2c69,_0x1eb9da){_0x1eb9da=_0x1eb9da||0xc8;return function(_0x207eea){if(_0x207eea){return _0xff2c69[_0x66ef('0x13')](_0x1eb9da)['json'](_0x207eea);}};}function respondWithFilteredResult(_0x23e92b,_0x32babb){return function(_0xf6df7f){if(_0xf6df7f){var _0x5b72c9=_0xf6df7f[_0x66ef('0x15')],_0x3ff564=_0x32babb['offset'],_0x1ec7bd=_0x32babb[_0x66ef('0x16')]+_0x32babb[_0x66ef('0x17')],_0x289004;if(_0x1ec7bd>=_0x5b72c9){_0x1ec7bd=_0x5b72c9;_0x289004=0xc8;}else{_0x289004=0xce;}_0x23e92b[_0x66ef('0x13')](_0x289004);return _0x23e92b[_0x66ef('0x18')](_0x66ef('0x19'),_0x3ff564+'-'+_0x1ec7bd+'/'+_0x5b72c9)[_0x66ef('0x1a')](_0xf6df7f);}return null;};}function patchUpdates(_0x5728ca){return function(_0x1ba595){try{jsonpatch[_0x66ef('0x1b')](_0x1ba595,_0x5728ca,!![]);}catch(_0x4377ce){return BPromise[_0x66ef('0x1c')](_0x4377ce);}return _0x1ba595[_0x66ef('0x1d')]();};}function saveUpdates(_0x501c48,_0x4398ff){return function(_0x2ef101){if(_0x2ef101){return _0x2ef101[_0x66ef('0x1e')](_0x501c48)[_0x66ef('0x1f')](function(_0x108d0a){return _0x108d0a;});}return null;};}function removeEntity(_0x321ffd,_0x35656f){return function(_0x13cd6a){if(_0x13cd6a){return _0x13cd6a['destroy']()[_0x66ef('0x1f')](function(){_0x321ffd[_0x66ef('0x13')](0xcc)[_0x66ef('0x14')]();});}};}function handleEntityNotFound(_0x27e93b,_0x951bc9){return function(_0x1d014e){if(!_0x1d014e){_0x27e93b['sendStatus'](0x194);}return _0x1d014e;};}function handleError(_0x310f48,_0x4c2663){_0x4c2663=_0x4c2663||0x1f4;return function(_0x299d05){logger['error'](_0x299d05['stack']);if(_0x299d05[_0x66ef('0x20')]){delete _0x299d05[_0x66ef('0x20')];}_0x310f48['status'](_0x4c2663)['send'](_0x299d05);};}exports['index']=function(_0x37a859,_0x4c1909){var _0x106747={},_0x48a9d6={},_0x3d8ac8={'count':0x0,'rows':[]};var _0x1f5fe4=db['SmsQueue']['rawAttributes'];_0x48a9d6['model']=_[_0x66ef('0x21')](_0x1f5fe4);var _0x55036c={'dateStart':_0x37a859['query'][_0x66ef('0x22')],'dateEnd':_0x37a859['query'][_0x66ef('0x23')]};delete _0x37a859[_0x66ef('0x24')]['dateStart'];delete _0x37a859['query'][_0x66ef('0x23')];_0x48a9d6[_0x66ef('0x24')]=_[_0x66ef('0x21')](_0x37a859[_0x66ef('0x24')]);_0x48a9d6['filters']=_[_0x66ef('0x25')](_0x48a9d6['model'],_0x48a9d6[_0x66ef('0x24')]);_0x106747[_0x66ef('0x26')]=_[_0x66ef('0x25')](_0x48a9d6['model'],qs[_0x66ef('0x27')](_0x37a859[_0x66ef('0x24')][_0x66ef('0x27')]));_0x106747['attributes']=_0x106747[_0x66ef('0x26')][_0x66ef('0x28')]?_0x106747[_0x66ef('0x26')]:_0x48a9d6[_0x66ef('0x29')];if(!_0x37a859['query'][_0x66ef('0x2a')](_0x66ef('0x2b'))){_0x106747[_0x66ef('0x17')]=qs[_0x66ef('0x17')](_0x37a859[_0x66ef('0x24')][_0x66ef('0x17')]);_0x106747[_0x66ef('0x16')]=qs[_0x66ef('0x16')](_0x37a859[_0x66ef('0x24')]['offset']);}_0x106747[_0x66ef('0x2c')]=qs[_0x66ef('0x2d')](_0x37a859[_0x66ef('0x24')]['sort']);_0x106747['where']=qs[_0x66ef('0x2e')](_['pick'](_0x37a859['query'],_0x48a9d6[_0x66ef('0x2e')]));if(_0x55036c[_0x66ef('0x22')]){if(_0x55036c[_0x66ef('0x23')]){_0x55036c[_0x66ef('0x23')]=moment(_0x55036c[_0x66ef('0x23')])[_0x66ef('0x2f')](0x1,_0x66ef('0x30'));}else{_0x55036c['dateEnd']=moment(_0x55036c['dateStart'])['add'](0x1,_0x66ef('0x30'));}_['merge'](_0x106747[_0x66ef('0x31')],{'createdAt':{'$gte':_0x55036c['dateStart'],'$lte':_0x55036c[_0x66ef('0x23')]}});}if(_0x37a859[_0x66ef('0x24')][_0x66ef('0x32')]){_0x106747[_0x66ef('0x31')]=_[_0x66ef('0x33')](_0x106747[_0x66ef('0x31')],{'$or':_[_0x66ef('0x34')](_0x106747[_0x66ef('0x26')],function(_0x1cf206){var _0xa6194c={};_0xa6194c[_0x1cf206]={'$like':'%'+_0x37a859[_0x66ef('0x24')][_0x66ef('0x32')]+'%'};return _0xa6194c;})});}_0x106747=_['merge']({},_0x106747,_0x37a859['options']);var _0x324b7e={'where':_0x106747[_0x66ef('0x31')]};return db[_0x66ef('0x35')][_0x66ef('0x15')](_0x324b7e)['then'](function(_0x1fba03){_0x3d8ac8[_0x66ef('0x15')]=_0x1fba03;if(_0x37a859[_0x66ef('0x24')][_0x66ef('0x36')]){_0x106747[_0x66ef('0x37')]=[{'all':!![]}];}return db[_0x66ef('0x35')][_0x66ef('0x38')](_0x106747);})['then'](function(_0x10b7fb){_0x3d8ac8[_0x66ef('0x39')]=_0x10b7fb;return _0x3d8ac8;})[_0x66ef('0x1f')](respondWithFilteredResult(_0x4c1909,_0x106747))['catch'](handleError(_0x4c1909,null));};exports[_0x66ef('0x3a')]=function(_0x5d9322,_0x40ccd7){var _0x39d7f3={'raw':!![],'where':{'id':_0x5d9322[_0x66ef('0x3b')]['id']}},_0x2b1b14={};_0x2b1b14[_0x66ef('0x29')]=_[_0x66ef('0x21')](db[_0x66ef('0x35')]['rawAttributes']);_0x2b1b14[_0x66ef('0x24')]=_[_0x66ef('0x21')](_0x5d9322['query']);_0x2b1b14[_0x66ef('0x2e')]=_[_0x66ef('0x25')](_0x2b1b14['model'],_0x2b1b14[_0x66ef('0x24')]);_0x39d7f3['attributes']=_[_0x66ef('0x25')](_0x2b1b14[_0x66ef('0x29')],qs['fields'](_0x5d9322[_0x66ef('0x24')][_0x66ef('0x27')]));_0x39d7f3[_0x66ef('0x26')]=_0x39d7f3[_0x66ef('0x26')][_0x66ef('0x28')]?_0x39d7f3['attributes']:_0x2b1b14[_0x66ef('0x29')];if(_0x5d9322[_0x66ef('0x24')][_0x66ef('0x36')]){_0x39d7f3[_0x66ef('0x37')]=[{'all':!![]}];}_0x39d7f3=_[_0x66ef('0x33')]({},_0x39d7f3,_0x5d9322[_0x66ef('0x3c')]);return db[_0x66ef('0x35')][_0x66ef('0x3d')](_0x39d7f3)[_0x66ef('0x1f')](handleEntityNotFound(_0x40ccd7,null))[_0x66ef('0x1f')](respondWithResult(_0x40ccd7,null))[_0x66ef('0x3e')](handleError(_0x40ccd7,null));};exports[_0x66ef('0x3f')]=function(_0xc16c0e,_0x383b17){return db[_0x66ef('0x35')][_0x66ef('0x3f')](_0xc16c0e['body'],{})[_0x66ef('0x1f')](respondWithResult(_0x383b17,0xc9))[_0x66ef('0x3e')](handleError(_0x383b17,null));};exports[_0x66ef('0x1e')]=function(_0x145c23,_0x29f428){if(_0x145c23[_0x66ef('0x40')]['id']){delete _0x145c23[_0x66ef('0x40')]['id'];}return db[_0x66ef('0x35')][_0x66ef('0x3d')]({'where':{'id':_0x145c23['params']['id']}})['then'](handleEntityNotFound(_0x29f428,null))[_0x66ef('0x1f')](saveUpdates(_0x145c23[_0x66ef('0x40')],null))['then'](respondWithResult(_0x29f428,null))[_0x66ef('0x3e')](handleError(_0x29f428,null));};exports[_0x66ef('0x41')]=function(_0x156b5b,_0x1e3eb5){return db['SmsQueue'][_0x66ef('0x3d')]({'where':{'id':_0x156b5b[_0x66ef('0x3b')]['id']}})[_0x66ef('0x1f')](handleEntityNotFound(_0x1e3eb5,null))['then'](removeEntity(_0x1e3eb5,null))[_0x66ef('0x3e')](handleError(_0x1e3eb5,null));};exports[_0x66ef('0x42')]=function(_0xdc145f,_0x10d6f9){return db[_0x66ef('0x35')][_0x66ef('0x42')]()['then'](respondWithResult(_0x10d6f9,null))[_0x66ef('0x3e')](handleError(_0x10d6f9,null));};exports['getMembers']=function(_0x1c29ef,_0x5df72d,_0x2331bf){var _0x1356f1={'raw':!![],'where':{}},_0x353a7e={},_0x4371c7;return db[_0x66ef('0x35')]['findOne']({'where':{'id':_0x1c29ef[_0x66ef('0x3b')]['id']}})[_0x66ef('0x1f')](handleEntityNotFound(_0x5df72d,null))['then'](function(_0x413fa8){if(_0x413fa8){_0x4371c7=_0x413fa8[_0x66ef('0x43')]({'plain':!![]});_0x353a7e[_0x66ef('0x29')]=_['keys'](db[_0x66ef('0x44')][_0x66ef('0x45')]);_0x353a7e[_0x66ef('0x24')]=_[_0x66ef('0x21')](_0x1c29ef[_0x66ef('0x24')]);_0x353a7e[_0x66ef('0x2e')]=_['intersection'](_0x353a7e[_0x66ef('0x29')],_0x353a7e[_0x66ef('0x24')]);_0x1356f1[_0x66ef('0x26')]=_['intersection'](_0x353a7e[_0x66ef('0x29')],qs[_0x66ef('0x27')](_0x1c29ef[_0x66ef('0x24')][_0x66ef('0x27')]));_0x1356f1[_0x66ef('0x26')]=_0x1356f1[_0x66ef('0x26')][_0x66ef('0x28')]?_0x1356f1[_0x66ef('0x26')]:_0x353a7e[_0x66ef('0x29')];if(!_0x1c29ef[_0x66ef('0x24')]['hasOwnProperty'](_0x66ef('0x2b'))){_0x1356f1[_0x66ef('0x17')]=qs[_0x66ef('0x17')](_0x1c29ef[_0x66ef('0x24')][_0x66ef('0x17')]);_0x1356f1['offset']=qs[_0x66ef('0x16')](_0x1c29ef[_0x66ef('0x24')]['offset']);}_0x1356f1['order']=qs[_0x66ef('0x2d')](_0x1c29ef[_0x66ef('0x24')]['sort']);_0x1356f1['where']=qs[_0x66ef('0x2e')](_['pick'](_0x1c29ef[_0x66ef('0x24')],_0x353a7e[_0x66ef('0x2e')]));_0x1356f1[_0x66ef('0x31')][_0x66ef('0x46')]=_0x413fa8['id'];if(_0x1c29ef[_0x66ef('0x24')][_0x66ef('0x32')]){_0x1356f1['where']=_[_0x66ef('0x33')](_0x1356f1['where'],{'$or':_[_0x66ef('0x34')](_0x1356f1['attributes'],function(_0x38854c){var _0x5f0890={};_0x5f0890[_0x38854c]={'$like':'%'+_0x1c29ef[_0x66ef('0x24')][_0x66ef('0x32')]+'%'};return _0x5f0890;})});}_0x1356f1=_[_0x66ef('0x33')]({},_0x1356f1,_0x1c29ef['options']);return db[_0x66ef('0x44')][_0x66ef('0x38')](_0x1356f1);}})[_0x66ef('0x1f')](function(_0x35e2ee){if(_0x35e2ee){return db['User']['findAndCountAll']({'where':{'id':_[_0x66ef('0x34')](_0x35e2ee,_0x66ef('0x47')),'role':_0x66ef('0x48')},'attributes':['id',_0x66ef('0x20'),'smsPause','updatedAt',_0x66ef('0x49')]});}})[_0x66ef('0x1f')](function(_0x1276be){if(_0x1276be){return{'count':_0x1276be[_0x66ef('0x15')],'rows':_[_0x66ef('0x34')](_0x1276be[_0x66ef('0x39')],function(_0x58477d){return{'membername':_0x58477d[_0x66ef('0x20')],'UserId':_0x58477d['id'],'queue_name':_0x4371c7[_0x66ef('0x20')],'SmsQueueId':_0x4371c7['id'],'interface':util[_0x66ef('0x4a')](_0x66ef('0x4b'),_0x66ef('0x4c'),_0x58477d[_0x66ef('0x20')]),'penalty':0x0,'paused':_0x58477d[_0x66ef('0x4d')],'createdAt':_0x58477d[_0x66ef('0x49')],'updatedAt':_0x58477d[_0x66ef('0x4e')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x66ef('0x1f')](respondWithFilteredResult(_0x5df72d,_0x1356f1))['catch'](handleError(_0x5df72d,null));};exports[_0x66ef('0x4f')]=function(_0x233c61,_0x51aefb,_0x2d6348){var _0x56da69={};var _0x513184={};var _0x36d92f;var _0x31a956;return db['SmsQueue'][_0x66ef('0x50')]({'where':{'id':_0x233c61[_0x66ef('0x3b')]['id']}})[_0x66ef('0x1f')](handleEntityNotFound(_0x51aefb,null))[_0x66ef('0x1f')](function(_0x23e3a8){if(_0x23e3a8){_0x36d92f=_0x23e3a8;_0x513184[_0x66ef('0x29')]=_['keys'](db[_0x66ef('0x51')][_0x66ef('0x45')]);_0x513184[_0x66ef('0x24')]=_[_0x66ef('0x21')](_0x233c61[_0x66ef('0x24')]);_0x513184[_0x66ef('0x2e')]=_['intersection'](_0x513184['model'],_0x513184[_0x66ef('0x24')]);_0x56da69[_0x66ef('0x26')]=_[_0x66ef('0x25')](_0x513184[_0x66ef('0x29')],qs[_0x66ef('0x27')](_0x233c61[_0x66ef('0x24')][_0x66ef('0x27')]));_0x56da69[_0x66ef('0x26')]=_0x56da69[_0x66ef('0x26')][_0x66ef('0x28')]?_0x56da69['attributes']:_0x513184['model'];_0x56da69['order']=qs[_0x66ef('0x2d')](_0x233c61[_0x66ef('0x24')]['sort']);_0x56da69[_0x66ef('0x31')]=qs[_0x66ef('0x2e')](_[_0x66ef('0x52')](_0x233c61[_0x66ef('0x24')],_0x513184[_0x66ef('0x2e')]));if(_0x233c61[_0x66ef('0x24')][_0x66ef('0x32')]){_0x56da69[_0x66ef('0x31')]=_[_0x66ef('0x33')](_0x56da69[_0x66ef('0x31')],{'$or':_[_0x66ef('0x34')](_0x56da69[_0x66ef('0x26')],function(_0x3f7f6b){var _0xb330c4={};_0xb330c4[_0x3f7f6b]={'$like':'%'+_0x233c61[_0x66ef('0x24')][_0x66ef('0x32')]+'%'};return _0xb330c4;})});}_0x56da69=_[_0x66ef('0x33')]({},_0x56da69,_0x233c61['options']);return _0x36d92f[_0x66ef('0x4f')](_0x56da69);}})[_0x66ef('0x1f')](function(_0x5145a7){if(_0x5145a7){_0x31a956=_0x5145a7[_0x66ef('0x28')];if(!_0x233c61[_0x66ef('0x24')][_0x66ef('0x2a')](_0x66ef('0x2b'))){_0x56da69['limit']=qs[_0x66ef('0x17')](_0x233c61[_0x66ef('0x24')][_0x66ef('0x17')]);_0x56da69[_0x66ef('0x16')]=qs[_0x66ef('0x16')](_0x233c61[_0x66ef('0x24')][_0x66ef('0x16')]);}return _0x36d92f[_0x66ef('0x4f')](_0x56da69);}})[_0x66ef('0x1f')](function(_0x47ceb0){if(_0x47ceb0){return _0x47ceb0?{'count':_0x31a956,'rows':_0x47ceb0}:null;}})[_0x66ef('0x1f')](respondWithResult(_0x51aefb,null))[_0x66ef('0x3e')](handleError(_0x51aefb,null));};exports['addTeams']=function(_0x100966,_0x327e73,_0x119050){var _0x5aba82=[];var _0x2ded2a;return db[_0x66ef('0x51')]['findAll']({'where':{'id':_0x100966[_0x66ef('0x40')][_0x66ef('0x53')]},'attributes':['id'],'include':[{'model':db[_0x66ef('0x54')],'as':_0x66ef('0x55'),'attributes':['id'],'raw':!![]}]})['then'](function(_0x2db9c2){if(_0x2db9c2){for(var _0x1ac47b=0x0;_0x1ac47b<_0x2db9c2['length'];_0x1ac47b+=0x1){for(var _0x36f6fd=0x0;_0x36f6fd<_0x2db9c2[_0x1ac47b]['Agents']['length'];_0x36f6fd+=0x1){_0x5aba82=_[_0x66ef('0x56')](_0x5aba82,[_0x2db9c2[_0x1ac47b][_0x66ef('0x55')][_0x36f6fd]['id']]);}}return _0x5aba82;}})[_0x66ef('0x1f')](function(_0x4cc5e9){if(_0x4cc5e9){return db['SmsQueue'][_0x66ef('0x3d')]({'where':{'id':_0x100966['params']['id']}});}})[_0x66ef('0x1f')](function(_0x492a03){if(_0x492a03){_0x2ded2a=_0x492a03;return _0x2ded2a['addAgents'](_0x5aba82,{'penalty':_0x100966[_0x66ef('0x40')][_0x66ef('0x57')]});}})['then'](function(_0x942963){if(_0x942963){return _0x2ded2a[_0x66ef('0x58')](_0x100966[_0x66ef('0x40')][_0x66ef('0x53')]);}})[_0x66ef('0x1f')](handleEntityNotFound(_0x327e73,null))[_0x66ef('0x1f')](respondWithStatusCode(_0x327e73,null))[_0x66ef('0x3e')](handleError(_0x327e73,null));};exports['removeTeams']=function(_0x19de9a,_0xaed09c,_0xf8ec83){var _0x2439d7=[];var _0x1a1b21;return db[_0x66ef('0x51')]['findAll']({'where':{'id':_0x19de9a[_0x66ef('0x24')][_0x66ef('0x53')]},'attributes':['id'],'include':[{'model':db[_0x66ef('0x54')],'as':_0x66ef('0x55'),'attributes':['id'],'raw':!![]}]})['then'](function(_0x32be07){if(_0x32be07){for(var _0x3eddce=0x0;_0x3eddce<_0x32be07[_0x66ef('0x28')];_0x3eddce+=0x1){for(var _0x1d2569=0x0;_0x1d2569<_0x32be07[_0x3eddce]['Agents'][_0x66ef('0x28')];_0x1d2569+=0x1){_0x2439d7=_[_0x66ef('0x56')](_0x2439d7,[_0x32be07[_0x3eddce][_0x66ef('0x55')][_0x1d2569]['id']]);}}return _0x2439d7;}})[_0x66ef('0x1f')](function(_0x35cf18){if(_0x35cf18){return db[_0x66ef('0x35')][_0x66ef('0x3d')]({'where':{'id':_0x19de9a[_0x66ef('0x3b')]['id']}});}})[_0x66ef('0x1f')](function(_0x5f684b){if(_0x5f684b){_0x1a1b21=_0x5f684b;return _0x1a1b21[_0x66ef('0x59')](_0x2439d7);}})[_0x66ef('0x1f')](function(_0x26b088){if(_0x1a1b21){return _0x1a1b21[_0x66ef('0x5a')](_0x19de9a[_0x66ef('0x24')][_0x66ef('0x53')]);}})[_0x66ef('0x1f')](handleEntityNotFound(_0xaed09c,null))[_0x66ef('0x1f')](respondWithStatusCode(_0xaed09c,null))[_0x66ef('0x3e')](handleError(_0xaed09c,null));};exports[_0x66ef('0x5b')]=function(_0x17c0db,_0xab19ab,_0x471346){return db['SmsQueue'][_0x66ef('0x3d')]({'where':{'id':_0x17c0db[_0x66ef('0x3b')]['id']}})[_0x66ef('0x1f')](handleEntityNotFound(_0xab19ab,null))[_0x66ef('0x1f')](function(_0x564fcb){if(_0x564fcb){return _0x564fcb['addAgents'](_0x17c0db['body'][_0x66ef('0x53')],_[_0x66ef('0x5c')](_0x17c0db[_0x66ef('0x40')],[_0x66ef('0x53'),'id'])||{})[_0x66ef('0x5d')](function(_0x1b3a65){for(var _0x346184=0x0;_0x346184<_0x17c0db[_0x66ef('0x40')][_0x66ef('0x53')][_0x66ef('0x28')];_0x346184+=0x1){socket['emit'](_0x66ef('0x5e'),{'UserId':_0x17c0db[_0x66ef('0x40')][_0x66ef('0x53')][_0x346184],'SmsQueueId':_0x17c0db[_0x66ef('0x3b')]['id']});}return _0x1b3a65;});}})['then'](respondWithResult(_0xab19ab,null))[_0x66ef('0x3e')](handleError(_0xab19ab,null));};exports['removeAgents']=function(_0x21ca0c,_0x2d196c,_0x3f85f6){var _0x1a3a83;return db[_0x66ef('0x35')][_0x66ef('0x3d')]({'where':{'id':_0x21ca0c[_0x66ef('0x3b')]['id']}})[_0x66ef('0x1f')](handleEntityNotFound(_0x2d196c,null))['then'](function(_0x36c63a){if(_0x36c63a){return _0x36c63a[_0x66ef('0x59')](_0x21ca0c[_0x66ef('0x24')][_0x66ef('0x53')])['then'](function(_0xe398f7){if(_[_0x66ef('0x5f')](_0x21ca0c[_0x66ef('0x24')]['ids'])){for(var _0x4db0ad=0x0;_0x4db0ad<_0x21ca0c['query']['ids']['length'];_0x4db0ad+=0x1){socket['emit'](_0x66ef('0x60'),{'UserId':_0x21ca0c[_0x66ef('0x24')][_0x66ef('0x53')][_0x4db0ad],'SmsQueueId':_0x21ca0c[_0x66ef('0x3b')]['id']});}}else{socket['emit'](_0x66ef('0x60'),{'UserId':_0x21ca0c[_0x66ef('0x24')][_0x66ef('0x53')],'SmsQueueId':_0x21ca0c[_0x66ef('0x3b')]['id']});}});}})[_0x66ef('0x1f')](respondWithStatusCode(_0x2d196c,null))[_0x66ef('0x3e')](handleError(_0x2d196c,null));};exports[_0x66ef('0x61')]=function(_0x3342d7,_0xff7de7,_0x4f462d){var _0x309f37={};var _0x721d21={};var _0x41b1d1;var _0x339ab3;return db['SmsQueue'][_0x66ef('0x50')]({'where':{'id':_0x3342d7[_0x66ef('0x3b')]['id']}})['then'](handleEntityNotFound(_0xff7de7,null))[_0x66ef('0x1f')](function(_0x738fcc){if(_0x738fcc){_0x41b1d1=_0x738fcc;_0x721d21['model']=_[_0x66ef('0x21')](db[_0x66ef('0x54')][_0x66ef('0x45')]);_0x721d21[_0x66ef('0x24')]=_[_0x66ef('0x21')](_0x3342d7[_0x66ef('0x24')]);_0x721d21[_0x66ef('0x2e')]=_[_0x66ef('0x25')](_0x721d21[_0x66ef('0x29')],_0x721d21[_0x66ef('0x24')]);_0x309f37[_0x66ef('0x26')]=_['intersection'](_0x721d21[_0x66ef('0x29')],qs['fields'](_0x3342d7['query'][_0x66ef('0x27')]));_0x309f37[_0x66ef('0x26')]=_0x309f37[_0x66ef('0x26')][_0x66ef('0x28')]?_0x309f37['attributes']:_0x721d21[_0x66ef('0x29')];_0x309f37[_0x66ef('0x2c')]=qs['sort'](_0x3342d7[_0x66ef('0x24')][_0x66ef('0x2d')]);_0x309f37[_0x66ef('0x31')]=qs[_0x66ef('0x2e')](_[_0x66ef('0x52')](_0x3342d7[_0x66ef('0x24')],_0x721d21[_0x66ef('0x2e')]));if(_0x3342d7['query'][_0x66ef('0x32')]){_0x309f37[_0x66ef('0x31')]=_['merge'](_0x309f37[_0x66ef('0x31')],{'$or':_[_0x66ef('0x34')](_0x309f37[_0x66ef('0x26')],function(_0x5efdf7){var _0x1d048d={};_0x1d048d[_0x5efdf7]={'$like':'%'+_0x3342d7[_0x66ef('0x24')][_0x66ef('0x32')]+'%'};return _0x1d048d;})});}_0x309f37=_[_0x66ef('0x33')]({},_0x309f37,_0x3342d7[_0x66ef('0x3c')]);return _0x41b1d1[_0x66ef('0x61')](_0x309f37);}})['then'](function(_0x5d531f){if(_0x5d531f){_0x339ab3=_0x5d531f[_0x66ef('0x28')];if(!_0x3342d7['query'][_0x66ef('0x2a')](_0x66ef('0x2b'))){_0x309f37[_0x66ef('0x17')]=qs['limit'](_0x3342d7[_0x66ef('0x24')]['limit']);_0x309f37[_0x66ef('0x16')]=qs['offset'](_0x3342d7['query']['offset']);}return _0x41b1d1[_0x66ef('0x61')](_0x309f37);}})[_0x66ef('0x1f')](function(_0x3cd40c){if(_0x3cd40c){return _0x3cd40c?{'count':_0x339ab3,'rows':_0x3cd40c}:null;}})[_0x66ef('0x1f')](respondWithResult(_0xff7de7,null))[_0x66ef('0x3e')](handleError(_0xff7de7,null));};
\ No newline at end of file
index 0944f29..8f3b1fc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x11a3=['SmsQueue','setMaxListeners','update','emit','hasOwnProperty','hook','exports','events','../../mysqldb'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x11a3,0x85));var _0x311a=function(_0x2261ce,_0x9ed8b6){_0x2261ce=_0x2261ce-0x0;var _0x524640=_0x11a3[_0x2261ce];return _0x524640;};'use strict';var EventEmitter=require(_0x311a('0x0'));var SmsQueue=require(_0x311a('0x1'))['db'][_0x311a('0x2')];var SmsQueueEvents=new EventEmitter();SmsQueueEvents[_0x311a('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x311a('0x4'),'afterDestroy':'remove'};function emitEvent(_0x5877b8){return function(_0xcbf3a1,_0x304e27,_0x4815f0){SmsQueueEvents['emit'](_0x5877b8+':'+_0xcbf3a1['id'],_0xcbf3a1);SmsQueueEvents[_0x311a('0x5')](_0x5877b8,_0xcbf3a1);_0x4815f0(null);};}for(var e in events){if(events[_0x311a('0x6')](e)){var event=events[e];SmsQueue[_0x311a('0x7')](e,emitEvent(event));}}module[_0x311a('0x8')]=SmsQueueEvents;
\ No newline at end of file
+var _0x52e1=['../../mysqldb','setMaxListeners','save','update','emit','hasOwnProperty','hook','exports'];(function(_0x5baf50,_0x213d6b){var _0x2b71d7=function(_0x161c0c){while(--_0x161c0c){_0x5baf50['push'](_0x5baf50['shift']());}};_0x2b71d7(++_0x213d6b);}(_0x52e1,0x78));var _0x152e=function(_0x350b73,_0x388add){_0x350b73=_0x350b73-0x0;var _0x4a2d1e=_0x52e1[_0x350b73];return _0x4a2d1e;};'use strict';var EventEmitter=require('events');var SmsQueue=require(_0x152e('0x0'))['db']['SmsQueue'];var SmsQueueEvents=new EventEmitter();SmsQueueEvents[_0x152e('0x1')](0x0);var events={'afterCreate':_0x152e('0x2'),'afterUpdate':_0x152e('0x3'),'afterDestroy':'remove'};function emitEvent(_0x46435c){return function(_0x25146c,_0x4bd829,_0x4f9dd5){SmsQueueEvents[_0x152e('0x4')](_0x46435c+':'+_0x25146c['id'],_0x25146c);SmsQueueEvents[_0x152e('0x4')](_0x46435c,_0x25146c);_0x4f9dd5(null);};}for(var e in events){if(events[_0x152e('0x5')](e)){var event=events[e];SmsQueue[_0x152e('0x6')](e,emitEvent(event));}}module[_0x152e('0x7')]=SmsQueueEvents;
\ No newline at end of file
index 98b08f3..c2c7f7f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5403=['moment','bluebird','./smsQueue.attributes','define','SmsQueue','sms_queues','lodash','util','../../config/logger'];(function(_0x467d19,_0x514335){var _0x1a5cc1=function(_0x53c96f){while(--_0x53c96f){_0x467d19['push'](_0x467d19['shift']());}};_0x1a5cc1(++_0x514335);}(_0x5403,0x8d));var _0x3540=function(_0x4fa270,_0x315397){_0x4fa270=_0x4fa270-0x0;var _0x1e754c=_0x5403[_0x4fa270];return _0x1e754c;};'use strict';var _=require(_0x3540('0x0'));var util=require(_0x3540('0x1'));var logger=require(_0x3540('0x2'))('api');var moment=require(_0x3540('0x3'));var BPromise=require(_0x3540('0x4'));var rp=require('request-promise');var attributes=require(_0x3540('0x5'));module['exports']=function(_0x3dbb31,_0x5a2e82){return _0x3dbb31[_0x3540('0x6')](_0x3540('0x7'),attributes,{'tableName':_0x3540('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3eff=['exports','define','sms_queues','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x47abc3,_0x36048c){var _0x5b054e=function(_0x4472ff){while(--_0x4472ff){_0x47abc3['push'](_0x47abc3['shift']());}};_0x5b054e(++_0x36048c);}(_0x3eff,0xad));var _0xf3ef=function(_0x5a4526,_0x521684){_0x5a4526=_0x5a4526-0x0;var _0x4d5f94=_0x3eff[_0x5a4526];return _0x4d5f94;};'use strict';var _=require(_0xf3ef('0x0'));var util=require(_0xf3ef('0x1'));var logger=require(_0xf3ef('0x2'))(_0xf3ef('0x3'));var moment=require(_0xf3ef('0x4'));var BPromise=require(_0xf3ef('0x5'));var rp=require(_0xf3ef('0x6'));var attributes=require('./smsQueue.attributes');module[_0xf3ef('0x7')]=function(_0x4236ca,_0xf274d0){return _0x4236ca[_0xf3ef('0x8')]('SmsQueue',attributes,{'tableName':_0xf3ef('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 50ea81c..661ac0d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x25bc=['request','then','info','SmsQueue,\x20%s,\x20%s','debug','SmsQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','catch','SmsQueue','findAll','options','raw','where','limit','include','attributes','model','map','GetSmsQueue','ShowSmsQueue','lodash','util','moment','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','localhost','./smsQueue.socket','register'];(function(_0x172948,_0x4262cc){var _0x4aeaa9=function(_0x5ec4b3){while(--_0x5ec4b3){_0x172948['push'](_0x172948['shift']());}};_0x4aeaa9(++_0x4262cc);}(_0x25bc,0x1ec));var _0xc25b=function(_0x30b259,_0x211f0c){_0x30b259=_0x30b259-0x0;var _0x52c68b=_0x25bc[_0x30b259];return _0x52c68b;};'use strict';var _=require(_0xc25b('0x0'));var util=require(_0xc25b('0x1'));var moment=require(_0xc25b('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require(_0xc25b('0x3'))['db'];var utils=require(_0xc25b('0x4'));var logger=require(_0xc25b('0x5'))('rpc');var config=require(_0xc25b('0x6'));var jayson=require(_0xc25b('0x7'));var client=jayson['client'][_0xc25b('0x8')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0xc25b('0x9'),'port':0x18eb});require(_0xc25b('0xa'))[_0xc25b('0xb')](socket);function respondWithRpcPromise(_0x1c1101,_0x8103d3,_0xe38012){return new BPromise(function(_0x220229,_0x2eac74){return client[_0xc25b('0xc')](_0x1c1101,_0xe38012)[_0xc25b('0xd')](function(_0x1a6206){logger[_0xc25b('0xe')](_0xc25b('0xf'),_0x8103d3,'request\x20sent');logger[_0xc25b('0x10')](_0xc25b('0x11'),_0x8103d3,_0xc25b('0x12'),JSON[_0xc25b('0x13')](_0x1a6206));if(_0x1a6206['error']){if(_0x1a6206[_0xc25b('0x14')]['code']===0x1f4){logger[_0xc25b('0x14')]('SmsQueue,\x20%s,\x20%s',_0x8103d3,_0x1a6206[_0xc25b('0x14')][_0xc25b('0x15')]);return _0x2eac74(_0x1a6206[_0xc25b('0x14')][_0xc25b('0x15')]);}logger[_0xc25b('0x14')](_0xc25b('0xf'),_0x8103d3,_0x1a6206[_0xc25b('0x14')][_0xc25b('0x15')]);return _0x220229(_0x1a6206[_0xc25b('0x14')][_0xc25b('0x15')]);}else{logger[_0xc25b('0xe')]('SmsQueue,\x20%s,\x20%s',_0x8103d3,_0xc25b('0x12'));_0x220229(_0x1a6206[_0xc25b('0x16')][_0xc25b('0x15')]);}})[_0xc25b('0x17')](function(_0x3ebbf6){logger['error'](_0xc25b('0xf'),_0x8103d3,_0x3ebbf6);_0x2eac74(_0x3ebbf6);});});}exports['GetSmsQueue']=function(_0x1dd0bb){var _0x3be987=this;return new Promise(function(_0x3aa621,_0x22cf51){return db[_0xc25b('0x18')][_0xc25b('0x19')]({'raw':_0x1dd0bb['options']?_0x1dd0bb[_0xc25b('0x1a')][_0xc25b('0x1b')]===undefined?!![]:![]:!![],'where':_0x1dd0bb[_0xc25b('0x1a')]?_0x1dd0bb[_0xc25b('0x1a')][_0xc25b('0x1c')]||null:null,'attributes':_0x1dd0bb[_0xc25b('0x1a')]?_0x1dd0bb[_0xc25b('0x1a')]['attributes']||null:null,'limit':_0x1dd0bb[_0xc25b('0x1a')]?_0x1dd0bb[_0xc25b('0x1a')][_0xc25b('0x1d')]||null:null,'include':_0x1dd0bb[_0xc25b('0x1a')]?_0x1dd0bb['options'][_0xc25b('0x1e')]?_['map'](_0x1dd0bb['options']['include'],function(_0x1dcba5){return{'model':db[_0x1dcba5['model']],'as':_0x1dcba5['as'],'attributes':_0x1dcba5[_0xc25b('0x1f')],'include':_0x1dcba5[_0xc25b('0x1e')]?_['map'](_0x1dcba5['include'],function(_0x5e4513){return{'model':db[_0x5e4513[_0xc25b('0x20')]],'as':_0x5e4513['as'],'attributes':_0x5e4513[_0xc25b('0x1f')],'include':_0x5e4513[_0xc25b('0x1e')]?_[_0xc25b('0x21')](_0x5e4513[_0xc25b('0x1e')],function(_0x360a1a){return{'model':db[_0x360a1a['model']],'as':_0x360a1a['as'],'attributes':_0x360a1a[_0xc25b('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xc25b('0xd')](function(_0x5dec01){logger['info'](_0xc25b('0x22'),_0x1dd0bb);logger['debug'](_0xc25b('0x22'),_0x1dd0bb,JSON[_0xc25b('0x13')](_0x5dec01));_0x3aa621(_0x5dec01);})[_0xc25b('0x17')](function(_0x5d5e22){logger['error'](_0xc25b('0x22'),_0x5d5e22['message'],_0x1dd0bb);_0x22cf51(_0x3be987[_0xc25b('0x14')](0x1f4,_0x5d5e22[_0xc25b('0x15')]));});});};exports['ShowSmsQueue']=function(_0x1bf7ef){var _0x239fe4=this;return new Promise(function(_0x41b88c,_0x124a57){return db[_0xc25b('0x18')]['find']({'raw':_0x1bf7ef[_0xc25b('0x1a')]?_0x1bf7ef['options'][_0xc25b('0x1b')]===undefined?!![]:![]:!![],'where':_0x1bf7ef[_0xc25b('0x1a')]?_0x1bf7ef[_0xc25b('0x1a')]['where']||null:null,'attributes':_0x1bf7ef[_0xc25b('0x1a')]?_0x1bf7ef['options'][_0xc25b('0x1f')]||null:null,'include':_0x1bf7ef[_0xc25b('0x1a')]?_0x1bf7ef[_0xc25b('0x1a')][_0xc25b('0x1e')]?_[_0xc25b('0x21')](_0x1bf7ef['options'][_0xc25b('0x1e')],function(_0x144b15){return{'model':db[_0x144b15['model']],'as':_0x144b15['as'],'attributes':_0x144b15[_0xc25b('0x1f')],'include':_0x144b15[_0xc25b('0x1e')]?_[_0xc25b('0x21')](_0x144b15[_0xc25b('0x1e')],function(_0x2cbd5b){return{'model':db[_0x2cbd5b['model']],'as':_0x2cbd5b['as'],'attributes':_0x2cbd5b[_0xc25b('0x1f')],'include':_0x2cbd5b[_0xc25b('0x1e')]?_[_0xc25b('0x21')](_0x2cbd5b[_0xc25b('0x1e')],function(_0x1b8f39){return{'model':db[_0x1b8f39[_0xc25b('0x20')]],'as':_0x1b8f39['as'],'attributes':_0x1b8f39[_0xc25b('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xc25b('0xd')](function(_0x384631){logger[_0xc25b('0xe')](_0xc25b('0x23'),_0x1bf7ef);logger[_0xc25b('0x10')](_0xc25b('0x23'),_0x1bf7ef,JSON['stringify'](_0x384631));_0x41b88c(_0x384631);})[_0xc25b('0x17')](function(_0x1602b5){logger[_0xc25b('0x14')](_0xc25b('0x23'),_0x1602b5['message'],_0x1bf7ef);_0x124a57(_0x239fe4[_0xc25b('0x14')](0x1f4,_0x1602b5[_0xc25b('0x15')]));});});};
\ No newline at end of file
+var _0x4f8b=['options','raw','where','attributes','limit','include','model','map','GetSmsQueue','ShowSmsQueue','find','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','socket.io-emitter','localhost','./smsQueue.socket','register','request','then','info','SmsQueue,\x20%s,\x20%s','request\x20sent','debug','SmsQueue,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','SmsQueue'];(function(_0xa64c01,_0x4b0cdf){var _0x3eb95e=function(_0x33eca2){while(--_0x33eca2){_0xa64c01['push'](_0xa64c01['shift']());}};_0x3eb95e(++_0x4b0cdf);}(_0x4f8b,0x115));var _0xb4f8=function(_0x2cb074,_0x12d323){_0x2cb074=_0x2cb074-0x0;var _0x42593c=_0x4f8b[_0x2cb074];return _0x42593c;};'use strict';var _=require(_0xb4f8('0x0'));var util=require(_0xb4f8('0x1'));var moment=require(_0xb4f8('0x2'));var BPromise=require('bluebird');var rs=require(_0xb4f8('0x3'));var fs=require('fs');var db=require(_0xb4f8('0x4'))['db'];var utils=require(_0xb4f8('0x5'));var logger=require(_0xb4f8('0x6'))(_0xb4f8('0x7'));var config=require(_0xb4f8('0x8'));var jayson=require('jayson/promise');var client=jayson['client'][_0xb4f8('0x9')]({'port':0x232a});var socket=require(_0xb4f8('0xa'))({'host':_0xb4f8('0xb'),'port':0x18eb});require(_0xb4f8('0xc'))[_0xb4f8('0xd')](socket);function respondWithRpcPromise(_0x2eb627,_0x1126d4,_0x13443e){return new BPromise(function(_0x477524,_0x4a7672){return client[_0xb4f8('0xe')](_0x2eb627,_0x13443e)[_0xb4f8('0xf')](function(_0x4f0118){logger[_0xb4f8('0x10')](_0xb4f8('0x11'),_0x1126d4,_0xb4f8('0x12'));logger[_0xb4f8('0x13')](_0xb4f8('0x14'),_0x1126d4,_0xb4f8('0x12'),JSON[_0xb4f8('0x15')](_0x4f0118));if(_0x4f0118['error']){if(_0x4f0118['error']['code']===0x1f4){logger[_0xb4f8('0x16')](_0xb4f8('0x11'),_0x1126d4,_0x4f0118[_0xb4f8('0x16')]['message']);return _0x4a7672(_0x4f0118[_0xb4f8('0x16')][_0xb4f8('0x17')]);}logger[_0xb4f8('0x16')](_0xb4f8('0x11'),_0x1126d4,_0x4f0118['error']['message']);return _0x477524(_0x4f0118[_0xb4f8('0x16')][_0xb4f8('0x17')]);}else{logger[_0xb4f8('0x10')](_0xb4f8('0x11'),_0x1126d4,_0xb4f8('0x12'));_0x477524(_0x4f0118[_0xb4f8('0x18')][_0xb4f8('0x17')]);}})[_0xb4f8('0x19')](function(_0x15f609){logger[_0xb4f8('0x16')](_0xb4f8('0x11'),_0x1126d4,_0x15f609);_0x4a7672(_0x15f609);});});}exports['GetSmsQueue']=function(_0x434afb){var _0x4fe824=this;return new Promise(function(_0x3c59c5,_0x55fd2b){return db[_0xb4f8('0x1a')]['findAll']({'raw':_0x434afb[_0xb4f8('0x1b')]?_0x434afb['options'][_0xb4f8('0x1c')]===undefined?!![]:![]:!![],'where':_0x434afb[_0xb4f8('0x1b')]?_0x434afb[_0xb4f8('0x1b')][_0xb4f8('0x1d')]||null:null,'attributes':_0x434afb['options']?_0x434afb[_0xb4f8('0x1b')][_0xb4f8('0x1e')]||null:null,'limit':_0x434afb[_0xb4f8('0x1b')]?_0x434afb['options'][_0xb4f8('0x1f')]||null:null,'include':_0x434afb[_0xb4f8('0x1b')]?_0x434afb[_0xb4f8('0x1b')][_0xb4f8('0x20')]?_['map'](_0x434afb[_0xb4f8('0x1b')][_0xb4f8('0x20')],function(_0x229fc5){return{'model':db[_0x229fc5[_0xb4f8('0x21')]],'as':_0x229fc5['as'],'attributes':_0x229fc5[_0xb4f8('0x1e')],'include':_0x229fc5['include']?_[_0xb4f8('0x22')](_0x229fc5[_0xb4f8('0x20')],function(_0x2f7100){return{'model':db[_0x2f7100[_0xb4f8('0x21')]],'as':_0x2f7100['as'],'attributes':_0x2f7100[_0xb4f8('0x1e')],'include':_0x2f7100['include']?_['map'](_0x2f7100[_0xb4f8('0x20')],function(_0x3f032d){return{'model':db[_0x3f032d[_0xb4f8('0x21')]],'as':_0x3f032d['as'],'attributes':_0x3f032d['attributes']};}):[]};}):[]};}):[]:[]})[_0xb4f8('0xf')](function(_0x46ace2){logger['info'](_0xb4f8('0x23'),_0x434afb);logger[_0xb4f8('0x13')]('GetSmsQueue',_0x434afb,JSON['stringify'](_0x46ace2));_0x3c59c5(_0x46ace2);})[_0xb4f8('0x19')](function(_0x45b459){logger['error']('GetSmsQueue',_0x45b459[_0xb4f8('0x17')],_0x434afb);_0x55fd2b(_0x4fe824[_0xb4f8('0x16')](0x1f4,_0x45b459[_0xb4f8('0x17')]));});});};exports[_0xb4f8('0x24')]=function(_0x4ab065){var _0x2f1c7f=this;return new Promise(function(_0x5bd30e,_0x43c268){return db[_0xb4f8('0x1a')][_0xb4f8('0x25')]({'raw':_0x4ab065[_0xb4f8('0x1b')]?_0x4ab065[_0xb4f8('0x1b')]['raw']===undefined?!![]:![]:!![],'where':_0x4ab065[_0xb4f8('0x1b')]?_0x4ab065['options'][_0xb4f8('0x1d')]||null:null,'attributes':_0x4ab065[_0xb4f8('0x1b')]?_0x4ab065[_0xb4f8('0x1b')][_0xb4f8('0x1e')]||null:null,'include':_0x4ab065[_0xb4f8('0x1b')]?_0x4ab065[_0xb4f8('0x1b')][_0xb4f8('0x20')]?_[_0xb4f8('0x22')](_0x4ab065[_0xb4f8('0x1b')][_0xb4f8('0x20')],function(_0x144d1c){return{'model':db[_0x144d1c[_0xb4f8('0x21')]],'as':_0x144d1c['as'],'attributes':_0x144d1c['attributes'],'include':_0x144d1c['include']?_[_0xb4f8('0x22')](_0x144d1c[_0xb4f8('0x20')],function(_0x59cc8e){return{'model':db[_0x59cc8e[_0xb4f8('0x21')]],'as':_0x59cc8e['as'],'attributes':_0x59cc8e[_0xb4f8('0x1e')],'include':_0x59cc8e[_0xb4f8('0x20')]?_['map'](_0x59cc8e[_0xb4f8('0x20')],function(_0x5930c2){return{'model':db[_0x5930c2[_0xb4f8('0x21')]],'as':_0x5930c2['as'],'attributes':_0x5930c2['attributes']};}):[]};}):[]};}):[]:[]})[_0xb4f8('0xf')](function(_0x2d4b69){logger['info'](_0xb4f8('0x24'),_0x4ab065);logger[_0xb4f8('0x13')](_0xb4f8('0x24'),_0x4ab065,JSON[_0xb4f8('0x15')](_0x2d4b69));_0x5bd30e(_0x2d4b69);})['catch'](function(_0x463271){logger[_0xb4f8('0x16')](_0xb4f8('0x24'),_0x463271[_0xb4f8('0x17')],_0x4ab065);_0x43c268(_0x2f1c7f[_0xb4f8('0x16')](0x1f4,_0x463271[_0xb4f8('0x17')]));});});};
\ No newline at end of file
index ad4f303..8f1ec59 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed52=['removeListener','smsQueue:','save','emit'];(function(_0x3790c6,_0x2fd43e){var _0x1d49e7=function(_0x5b587c){while(--_0x5b587c){_0x3790c6['push'](_0x3790c6['shift']());}};_0x1d49e7(++_0x2fd43e);}(_0xed52,0x16e));var _0x2ed5=function(_0x28d18d,_0x55896b){_0x28d18d=_0x28d18d-0x0;var _0x470640=_0xed52[_0x28d18d];return _0x470640;};'use strict';var SmsQueueEvents=require('./smsQueue.events');var events=[_0x2ed5('0x0'),'remove','update'];function createListener(_0x22d6ff,_0x5c25dc){return function(_0x100d00){_0x5c25dc[_0x2ed5('0x1')](_0x22d6ff,_0x100d00);};}function removeListener(_0x45224e,_0x1e8349){return function(){SmsQueueEvents[_0x2ed5('0x2')](_0x45224e,_0x1e8349);};}exports['register']=function(_0x254856){for(var _0x4b157f=0x0,_0x7e3abc=events['length'];_0x4b157f<_0x7e3abc;_0x4b157f++){var _0x17b22d=events[_0x4b157f];var _0x5ce7a1=createListener(_0x2ed5('0x3')+_0x17b22d,_0x254856);SmsQueueEvents['on'](_0x17b22d,_0x5ce7a1);}};
\ No newline at end of file
+var _0x2a76=['remove','update','emit','removeListener','length','smsQueue:','./smsQueue.events','save'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x2a76,0xde));var _0x62a7=function(_0x4416f4,_0x5c538a){_0x4416f4=_0x4416f4-0x0;var _0x33280f=_0x2a76[_0x4416f4];return _0x33280f;};'use strict';var SmsQueueEvents=require(_0x62a7('0x0'));var events=[_0x62a7('0x1'),_0x62a7('0x2'),_0x62a7('0x3')];function createListener(_0x42601f,_0x1cbd7c){return function(_0x108f6f){_0x1cbd7c[_0x62a7('0x4')](_0x42601f,_0x108f6f);};}function removeListener(_0x44abef,_0x28e476){return function(){SmsQueueEvents[_0x62a7('0x5')](_0x44abef,_0x28e476);};}exports['register']=function(_0x3aa52a){for(var _0x5a2c8f=0x0,_0x10a163=events[_0x62a7('0x6')];_0x5a2c8f<_0x10a163;_0x5a2c8f++){var _0x520e2a=events[_0x5a2c8f];var _0x5af567=createListener(_0x62a7('0x7')+_0x520e2a,_0x3aa52a);SmsQueueEvents['on'](_0x520e2a,_0x5af567);}};
\ No newline at end of file
index 79f4974..c3cef92 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x96cc=['update','destroy','exports','multer','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsQueueReport.controller','get','isAuthenticated','index','describe','/:id','show','post','create','put'];(function(_0x1861c3,_0x3b129f){var _0x588607=function(_0x2b0340){while(--_0x2b0340){_0x1861c3['push'](_0x1861c3['shift']());}};_0x588607(++_0x3b129f);}(_0x96cc,0x16c));var _0xc96c=function(_0x4af42d,_0x226c6d){_0x4af42d=_0x4af42d-0x0;var _0x14b54f=_0x96cc[_0x4af42d];return _0x14b54f;};'use strict';var multer=require(_0xc96c('0x0'));var util=require('util');var path=require(_0xc96c('0x1'));var express=require('express');var router=express[_0xc96c('0x2')]();var auth=require(_0xc96c('0x3'));var interaction=require(_0xc96c('0x4'));var config=require(_0xc96c('0x5'));var controller=require(_0xc96c('0x6'));router[_0xc96c('0x7')]('/',auth[_0xc96c('0x8')](),controller[_0xc96c('0x9')]);router[_0xc96c('0x7')]('/describe',auth[_0xc96c('0x8')](),controller[_0xc96c('0xa')]);router[_0xc96c('0x7')](_0xc96c('0xb'),auth[_0xc96c('0x8')](),controller[_0xc96c('0xc')]);router[_0xc96c('0xd')]('/',auth['isAuthenticated'](),controller[_0xc96c('0xe')]);router[_0xc96c('0xf')](_0xc96c('0xb'),auth['isAuthenticated'](),controller[_0xc96c('0x10')]);router['delete'](_0xc96c('0xb'),auth['isAuthenticated'](),controller[_0xc96c('0x11')]);module[_0xc96c('0x12')]=router;
\ No newline at end of file
+var _0xa9e0=['/:id','update','exports','multer','util','path','../../components/auth/service','../../config/environment','./smsQueueReport.controller','get','isAuthenticated','index','/describe','describe','create','put'];(function(_0xf7a9cf,_0x2cfa33){var _0x7fdc45=function(_0x44b354){while(--_0x44b354){_0xf7a9cf['push'](_0xf7a9cf['shift']());}};_0x7fdc45(++_0x2cfa33);}(_0xa9e0,0x123));var _0x0a9e=function(_0xbca1b1,_0x33f0ce){_0xbca1b1=_0xbca1b1-0x0;var _0x4e1686=_0xa9e0[_0xbca1b1];return _0x4e1686;};'use strict';var multer=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var path=require(_0x0a9e('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x0a9e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x0a9e('0x4'));var controller=require(_0x0a9e('0x5'));router[_0x0a9e('0x6')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x8')]);router['get'](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xa')]);router['get']('/:id',auth[_0x0a9e('0x7')](),controller['show']);router['post']('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xb')]);router[_0x0a9e('0xc')](_0x0a9e('0xd'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xe')]);router['delete']('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0x0a9e('0xf')]=router;
\ No newline at end of file
index 547e1ea..e2a3cd9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6517=['moment','exports','STRING','DATE'];(function(_0x7e6f17,_0x3c2605){var _0x28697c=function(_0x18cfa6){while(--_0x18cfa6){_0x7e6f17['push'](_0x7e6f17['shift']());}};_0x28697c(++_0x3c2605);}(_0x6517,0x104));var _0x7651=function(_0x14e242,_0x3bec21){_0x14e242=_0x14e242-0x0;var _0x26f849=_0x6517[_0x14e242];return _0x26f849;};'use strict';var moment=require(_0x7651('0x0'));var Sequelize=require('sequelize');module[_0x7651('0x1')]={'uniqueid':{'type':Sequelize[_0x7651('0x2')],'allowNull':![]},'from':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize[_0x7651('0x3')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0x7651('0x3')]},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize[_0x7651('0x2')]}};
\ No newline at end of file
+var _0x96ab=['moment','sequelize','exports','STRING','DATE'];(function(_0x571093,_0x52762c){var _0x5bd0a3=function(_0x35c92b){while(--_0x35c92b){_0x571093['push'](_0x571093['shift']());}};_0x5bd0a3(++_0x52762c);}(_0x96ab,0x91));var _0xb96a=function(_0x355c46,_0x18f295){_0x355c46=_0x355c46-0x0;var _0x3314b6=_0x96ab[_0x355c46];return _0x3314b6;};'use strict';var moment=require(_0xb96a('0x0'));var Sequelize=require(_0xb96a('0x1'));module[_0xb96a('0x2')]={'uniqueid':{'type':Sequelize[_0xb96a('0x3')],'allowNull':![]},'from':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize[_0xb96a('0x4')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize[_0xb96a('0x3')]}};
\ No newline at end of file
index 299604b..523f073 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1b65=['includeAll','options','find','create','body','update','describe','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','apply','reject','save','then','destroy','error','stack','name','send','index','rawAttributes','keys','dateStart','query','filters','model','attributes','fields','hasOwnProperty','nolimit','sort','pick','dateEnd','day','add','merge','where','filter','SmsQueueReport','include','findAll','rows','catch','params','intersection','length'];(function(_0x4b50c1,_0x1ea904){var _0x4d6dfd=function(_0x462894){while(--_0x462894){_0x4b50c1['push'](_0x4b50c1['shift']());}};_0x4d6dfd(++_0x1ea904);}(_0x1b65,0x16f));var _0x51b6=function(_0x1005d4,_0x5199ab){_0x1005d4=_0x1005d4-0x0;var _0x421977=_0x1b65[_0x1005d4];return _0x421977;};'use strict';var jsonpatch=require(_0x51b6('0x0'));var rp=require(_0x51b6('0x1'));var moment=require('moment');var BPromise=require(_0x51b6('0x2'));var Mustache=require(_0x51b6('0x3'));var util=require(_0x51b6('0x4'));var path=require(_0x51b6('0x5'));var sox=require(_0x51b6('0x6'));var csv=require(_0x51b6('0x7'));var ejs=require(_0x51b6('0x8'));var fs=require('fs');var _=require(_0x51b6('0x9'));var squel=require(_0x51b6('0xa'));var crypto=require(_0x51b6('0xb'));var jsforce=require(_0x51b6('0xc'));var deskjs=require(_0x51b6('0xd'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x51b6('0xe'));var qs=require(_0x51b6('0xf'));var logger=require(_0x51b6('0x10'))(_0x51b6('0x11'));var utils=require(_0x51b6('0x12'));var config=require(_0x51b6('0x13'));var db=require(_0x51b6('0x14'))['db'];function respondWithStatusCode(_0x34b9b2,_0x5ef757){_0x5ef757=_0x5ef757||0xcc;return function(_0x5e6dc2){if(_0x5e6dc2){return _0x34b9b2[_0x51b6('0x15')](_0x5ef757);}return _0x34b9b2['status'](_0x5ef757)[_0x51b6('0x16')]();};}function respondWithResult(_0x263ee5,_0x4a21ed){_0x4a21ed=_0x4a21ed||0xc8;return function(_0x5b885d){if(_0x5b885d){return _0x263ee5[_0x51b6('0x17')](_0x4a21ed)[_0x51b6('0x18')](_0x5b885d);}};}function respondWithFilteredResult(_0x251b8f,_0x57343f){return function(_0x409b07){if(_0x409b07){var _0x21ae94=_0x409b07[_0x51b6('0x19')],_0x2eba32=_0x57343f[_0x51b6('0x1a')],_0x36b6d6=_0x57343f[_0x51b6('0x1a')]+_0x57343f[_0x51b6('0x1b')],_0x23a632;if(_0x36b6d6>=_0x21ae94){_0x36b6d6=_0x21ae94;_0x23a632=0xc8;}else{_0x23a632=0xce;}_0x251b8f['status'](_0x23a632);return _0x251b8f[_0x51b6('0x1c')]('Content-Range',_0x2eba32+'-'+_0x36b6d6+'/'+_0x21ae94)[_0x51b6('0x18')](_0x409b07);}return null;};}function patchUpdates(_0xc76cdb){return function(_0x4eb608){try{jsonpatch[_0x51b6('0x1d')](_0x4eb608,_0xc76cdb,!![]);}catch(_0x4d9491){return BPromise[_0x51b6('0x1e')](_0x4d9491);}return _0x4eb608[_0x51b6('0x1f')]();};}function saveUpdates(_0x3a4172,_0x25060d){return function(_0x16adbd){if(_0x16adbd){return _0x16adbd['update'](_0x3a4172)[_0x51b6('0x20')](function(_0x5ad1c9){return _0x5ad1c9;});}return null;};}function removeEntity(_0x4b1449,_0x33791e){return function(_0x27cc3a){if(_0x27cc3a){return _0x27cc3a[_0x51b6('0x21')]()[_0x51b6('0x20')](function(){_0x4b1449[_0x51b6('0x17')](0xcc)[_0x51b6('0x16')]();});}};}function handleEntityNotFound(_0x2772f6,_0x356b6a){return function(_0x5c9114){if(!_0x5c9114){_0x2772f6['sendStatus'](0x194);}return _0x5c9114;};}function handleError(_0x320a9d,_0x488b38){_0x488b38=_0x488b38||0x1f4;return function(_0x4f4856){logger[_0x51b6('0x22')](_0x4f4856[_0x51b6('0x23')]);if(_0x4f4856[_0x51b6('0x24')]){delete _0x4f4856[_0x51b6('0x24')];}_0x320a9d[_0x51b6('0x17')](_0x488b38)[_0x51b6('0x25')](_0x4f4856);};}exports[_0x51b6('0x26')]=function(_0x23d7f9,_0x400165){var _0x40c99d={},_0x3cfc3e={},_0x25b6dd={'count':0x0,'rows':[]};var _0x3dcaa8=db['SmsQueueReport'][_0x51b6('0x27')];_0x3cfc3e['model']=_[_0x51b6('0x28')](_0x3dcaa8);var _0x3c4094={'dateStart':_0x23d7f9['query'][_0x51b6('0x29')],'dateEnd':_0x23d7f9[_0x51b6('0x2a')]['dateEnd']};delete _0x23d7f9['query'][_0x51b6('0x29')];delete _0x23d7f9['query']['dateEnd'];_0x3cfc3e[_0x51b6('0x2a')]=_[_0x51b6('0x28')](_0x23d7f9[_0x51b6('0x2a')]);_0x3cfc3e[_0x51b6('0x2b')]=_['intersection'](_0x3cfc3e[_0x51b6('0x2c')],_0x3cfc3e[_0x51b6('0x2a')]);_0x40c99d[_0x51b6('0x2d')]=_['intersection'](_0x3cfc3e[_0x51b6('0x2c')],qs[_0x51b6('0x2e')](_0x23d7f9[_0x51b6('0x2a')][_0x51b6('0x2e')]));_0x40c99d[_0x51b6('0x2d')]=_0x40c99d[_0x51b6('0x2d')]['length']?_0x40c99d[_0x51b6('0x2d')]:_0x3cfc3e[_0x51b6('0x2c')];if(!_0x23d7f9['query'][_0x51b6('0x2f')](_0x51b6('0x30'))){_0x40c99d[_0x51b6('0x1b')]=qs['limit'](_0x23d7f9[_0x51b6('0x2a')][_0x51b6('0x1b')]);_0x40c99d[_0x51b6('0x1a')]=qs[_0x51b6('0x1a')](_0x23d7f9[_0x51b6('0x2a')][_0x51b6('0x1a')]);}_0x40c99d['order']=qs[_0x51b6('0x31')](_0x23d7f9[_0x51b6('0x2a')][_0x51b6('0x31')]);_0x40c99d['where']=qs[_0x51b6('0x2b')](_[_0x51b6('0x32')](_0x23d7f9[_0x51b6('0x2a')],_0x3cfc3e[_0x51b6('0x2b')]));if(_0x3c4094['dateStart']){if(_0x3c4094[_0x51b6('0x33')]){_0x3c4094[_0x51b6('0x33')]=moment(_0x3c4094[_0x51b6('0x33')])['add'](0x1,_0x51b6('0x34'));}else{_0x3c4094[_0x51b6('0x33')]=moment(_0x3c4094[_0x51b6('0x29')])[_0x51b6('0x35')](0x1,_0x51b6('0x34'));}_[_0x51b6('0x36')](_0x40c99d[_0x51b6('0x37')],{'createdAt':{'$gte':_0x3c4094['dateStart'],'$lte':_0x3c4094[_0x51b6('0x33')]}});}if(_0x23d7f9['query'][_0x51b6('0x38')]){_0x40c99d[_0x51b6('0x37')]=_[_0x51b6('0x36')](_0x40c99d[_0x51b6('0x37')],{'$or':_['map'](_0x40c99d[_0x51b6('0x2d')],function(_0x20757c){var _0x26e719={};_0x26e719[_0x20757c]={'$like':'%'+_0x23d7f9[_0x51b6('0x2a')][_0x51b6('0x38')]+'%'};return _0x26e719;})});}_0x40c99d=_['merge']({},_0x40c99d,_0x23d7f9['options']);var _0x447f1d={'where':_0x40c99d[_0x51b6('0x37')]};return db[_0x51b6('0x39')][_0x51b6('0x19')](_0x447f1d)['then'](function(_0x573a93){_0x25b6dd[_0x51b6('0x19')]=_0x573a93;if(_0x23d7f9[_0x51b6('0x2a')]['includeAll']){_0x40c99d[_0x51b6('0x3a')]=[{'all':!![]}];}return db[_0x51b6('0x39')][_0x51b6('0x3b')](_0x40c99d);})[_0x51b6('0x20')](function(_0x49c4b7){_0x25b6dd[_0x51b6('0x3c')]=_0x49c4b7;return _0x25b6dd;})['then'](respondWithFilteredResult(_0x400165,_0x40c99d))[_0x51b6('0x3d')](handleError(_0x400165,null));};exports['show']=function(_0x140c60,_0x1b45a1){var _0x5b1701={'raw':!![],'where':{'id':_0x140c60[_0x51b6('0x3e')]['id']}},_0x4e6cb7={};_0x4e6cb7[_0x51b6('0x2c')]=_['keys'](db[_0x51b6('0x39')]['rawAttributes']);_0x4e6cb7['query']=_[_0x51b6('0x28')](_0x140c60[_0x51b6('0x2a')]);_0x4e6cb7['filters']=_[_0x51b6('0x3f')](_0x4e6cb7[_0x51b6('0x2c')],_0x4e6cb7['query']);_0x5b1701['attributes']=_[_0x51b6('0x3f')](_0x4e6cb7[_0x51b6('0x2c')],qs[_0x51b6('0x2e')](_0x140c60[_0x51b6('0x2a')]['fields']));_0x5b1701[_0x51b6('0x2d')]=_0x5b1701[_0x51b6('0x2d')][_0x51b6('0x40')]?_0x5b1701[_0x51b6('0x2d')]:_0x4e6cb7[_0x51b6('0x2c')];if(_0x140c60[_0x51b6('0x2a')][_0x51b6('0x41')]){_0x5b1701[_0x51b6('0x3a')]=[{'all':!![]}];}_0x5b1701=_[_0x51b6('0x36')]({},_0x5b1701,_0x140c60[_0x51b6('0x42')]);return db[_0x51b6('0x39')][_0x51b6('0x43')](_0x5b1701)[_0x51b6('0x20')](handleEntityNotFound(_0x1b45a1,null))[_0x51b6('0x20')](respondWithResult(_0x1b45a1,null))[_0x51b6('0x3d')](handleError(_0x1b45a1,null));};exports[_0x51b6('0x44')]=function(_0x2c4f59,_0x105675){return db[_0x51b6('0x39')][_0x51b6('0x44')](_0x2c4f59[_0x51b6('0x45')],{})[_0x51b6('0x20')](respondWithResult(_0x105675,0xc9))[_0x51b6('0x3d')](handleError(_0x105675,null));};exports[_0x51b6('0x46')]=function(_0x5767fb,_0x2c4176){if(_0x5767fb[_0x51b6('0x45')]['id']){delete _0x5767fb['body']['id'];}return db[_0x51b6('0x39')][_0x51b6('0x43')]({'where':{'id':_0x5767fb[_0x51b6('0x3e')]['id']}})[_0x51b6('0x20')](handleEntityNotFound(_0x2c4176,null))[_0x51b6('0x20')](saveUpdates(_0x5767fb['body'],null))[_0x51b6('0x20')](respondWithResult(_0x2c4176,null))[_0x51b6('0x3d')](handleError(_0x2c4176,null));};exports['destroy']=function(_0x28ffcb,_0x2e2ebc){return db[_0x51b6('0x39')][_0x51b6('0x43')]({'where':{'id':_0x28ffcb[_0x51b6('0x3e')]['id']}})[_0x51b6('0x20')](handleEntityNotFound(_0x2e2ebc,null))[_0x51b6('0x20')](removeEntity(_0x2e2ebc,null))[_0x51b6('0x3d')](handleError(_0x2e2ebc,null));};exports['describe']=function(_0x21e30,_0x4551de){return db[_0x51b6('0x39')][_0x51b6('0x47')]()[_0x51b6('0x20')](respondWithResult(_0x4551de,null))[_0x51b6('0x3d')](handleError(_0x4551de,null));};
\ No newline at end of file
+var _0x6e9c=['SmsQueueReport','rawAttributes','query','dateStart','dateEnd','filters','intersection','model','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','add','day','merge','filter','map','options','includeAll','include','findAll','rows','catch','show','keys','fields','find','create','body','params','describe','moment','bluebird','util','path','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','status','set','Content-Range','reject','save','then','destroy','error','stack','name','send','index'];(function(_0x5c277f,_0x3737dd){var _0x43a9a2=function(_0x57b0fb){while(--_0x57b0fb){_0x5c277f['push'](_0x5c277f['shift']());}};_0x43a9a2(++_0x3737dd);}(_0x6e9c,0x1c2));var _0xc6e9=function(_0x176244,_0x306811){_0x176244=_0x176244-0x0;var _0x4157ba=_0x6e9c[_0x176244];return _0x4157ba;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xc6e9('0x0'));var BPromise=require(_0xc6e9('0x1'));var Mustache=require('mustache');var util=require(_0xc6e9('0x2'));var path=require(_0xc6e9('0x3'));var sox=require('sox');var csv=require(_0xc6e9('0x4'));var ejs=require(_0xc6e9('0x5'));var fs=require('fs');var _=require(_0xc6e9('0x6'));var squel=require('squel');var crypto=require(_0xc6e9('0x7'));var jsforce=require(_0xc6e9('0x8'));var deskjs=require(_0xc6e9('0x9'));var toCsv=require(_0xc6e9('0x4'));var querystring=require(_0xc6e9('0xa'));var Papa=require('papaparse');var qs=require(_0xc6e9('0xb'));var logger=require(_0xc6e9('0xc'))(_0xc6e9('0xd'));var utils=require('../../config/utils');var config=require(_0xc6e9('0xe'));var db=require(_0xc6e9('0xf'))['db'];function respondWithStatusCode(_0x8e55b3,_0x3a531f){_0x3a531f=_0x3a531f||0xcc;return function(_0x3da65e){if(_0x3da65e){return _0x8e55b3[_0xc6e9('0x10')](_0x3a531f);}return _0x8e55b3['status'](_0x3a531f)[_0xc6e9('0x11')]();};}function respondWithResult(_0x4d04bb,_0x1ad081){_0x1ad081=_0x1ad081||0xc8;return function(_0x337682){if(_0x337682){return _0x4d04bb['status'](_0x1ad081)[_0xc6e9('0x12')](_0x337682);}};}function respondWithFilteredResult(_0x23d671,_0x50d574){return function(_0x48adf1){if(_0x48adf1){var _0xa77b6e=_0x48adf1[_0xc6e9('0x13')],_0x4339a4=_0x50d574['offset'],_0x596f1b=_0x50d574[_0xc6e9('0x14')]+_0x50d574['limit'],_0x2168c5;if(_0x596f1b>=_0xa77b6e){_0x596f1b=_0xa77b6e;_0x2168c5=0xc8;}else{_0x2168c5=0xce;}_0x23d671[_0xc6e9('0x15')](_0x2168c5);return _0x23d671[_0xc6e9('0x16')](_0xc6e9('0x17'),_0x4339a4+'-'+_0x596f1b+'/'+_0xa77b6e)[_0xc6e9('0x12')](_0x48adf1);}return null;};}function patchUpdates(_0x3cf04e){return function(_0x589395){try{jsonpatch['apply'](_0x589395,_0x3cf04e,!![]);}catch(_0x14a680){return BPromise[_0xc6e9('0x18')](_0x14a680);}return _0x589395[_0xc6e9('0x19')]();};}function saveUpdates(_0x2276eb,_0x48ade2){return function(_0x28aa20){if(_0x28aa20){return _0x28aa20['update'](_0x2276eb)[_0xc6e9('0x1a')](function(_0x480d14){return _0x480d14;});}return null;};}function removeEntity(_0xa4f6b4,_0x6a2e49){return function(_0x17f2b6){if(_0x17f2b6){return _0x17f2b6[_0xc6e9('0x1b')]()['then'](function(){_0xa4f6b4[_0xc6e9('0x15')](0xcc)[_0xc6e9('0x11')]();});}};}function handleEntityNotFound(_0x11fd0c,_0x15e9f3){return function(_0xc8ff42){if(!_0xc8ff42){_0x11fd0c[_0xc6e9('0x10')](0x194);}return _0xc8ff42;};}function handleError(_0x4a8ae0,_0x319db5){_0x319db5=_0x319db5||0x1f4;return function(_0x2261af){logger[_0xc6e9('0x1c')](_0x2261af[_0xc6e9('0x1d')]);if(_0x2261af[_0xc6e9('0x1e')]){delete _0x2261af[_0xc6e9('0x1e')];}_0x4a8ae0[_0xc6e9('0x15')](_0x319db5)[_0xc6e9('0x1f')](_0x2261af);};}exports[_0xc6e9('0x20')]=function(_0x1d248d,_0x323a5e){var _0x279099={},_0x5b8913={},_0x32a0f7={'count':0x0,'rows':[]};var _0x4b7971=db[_0xc6e9('0x21')][_0xc6e9('0x22')];_0x5b8913['model']=_['keys'](_0x4b7971);var _0x782774={'dateStart':_0x1d248d[_0xc6e9('0x23')][_0xc6e9('0x24')],'dateEnd':_0x1d248d[_0xc6e9('0x23')][_0xc6e9('0x25')]};delete _0x1d248d[_0xc6e9('0x23')]['dateStart'];delete _0x1d248d[_0xc6e9('0x23')][_0xc6e9('0x25')];_0x5b8913[_0xc6e9('0x23')]=_['keys'](_0x1d248d[_0xc6e9('0x23')]);_0x5b8913[_0xc6e9('0x26')]=_[_0xc6e9('0x27')](_0x5b8913[_0xc6e9('0x28')],_0x5b8913[_0xc6e9('0x23')]);_0x279099['attributes']=_['intersection'](_0x5b8913[_0xc6e9('0x28')],qs['fields'](_0x1d248d[_0xc6e9('0x23')]['fields']));_0x279099['attributes']=_0x279099[_0xc6e9('0x29')][_0xc6e9('0x2a')]?_0x279099[_0xc6e9('0x29')]:_0x5b8913[_0xc6e9('0x28')];if(!_0x1d248d['query'][_0xc6e9('0x2b')](_0xc6e9('0x2c'))){_0x279099[_0xc6e9('0x2d')]=qs[_0xc6e9('0x2d')](_0x1d248d[_0xc6e9('0x23')][_0xc6e9('0x2d')]);_0x279099[_0xc6e9('0x14')]=qs[_0xc6e9('0x14')](_0x1d248d['query']['offset']);}_0x279099[_0xc6e9('0x2e')]=qs[_0xc6e9('0x2f')](_0x1d248d['query']['sort']);_0x279099[_0xc6e9('0x30')]=qs['filters'](_[_0xc6e9('0x31')](_0x1d248d[_0xc6e9('0x23')],_0x5b8913['filters']));if(_0x782774[_0xc6e9('0x24')]){if(_0x782774[_0xc6e9('0x25')]){_0x782774[_0xc6e9('0x25')]=moment(_0x782774[_0xc6e9('0x25')])[_0xc6e9('0x32')](0x1,_0xc6e9('0x33'));}else{_0x782774[_0xc6e9('0x25')]=moment(_0x782774['dateStart'])[_0xc6e9('0x32')](0x1,_0xc6e9('0x33'));}_[_0xc6e9('0x34')](_0x279099['where'],{'createdAt':{'$gte':_0x782774[_0xc6e9('0x24')],'$lte':_0x782774['dateEnd']}});}if(_0x1d248d[_0xc6e9('0x23')][_0xc6e9('0x35')]){_0x279099[_0xc6e9('0x30')]=_['merge'](_0x279099[_0xc6e9('0x30')],{'$or':_[_0xc6e9('0x36')](_0x279099['attributes'],function(_0x1efdb1){var _0x52bde3={};_0x52bde3[_0x1efdb1]={'$like':'%'+_0x1d248d[_0xc6e9('0x23')][_0xc6e9('0x35')]+'%'};return _0x52bde3;})});}_0x279099=_[_0xc6e9('0x34')]({},_0x279099,_0x1d248d[_0xc6e9('0x37')]);var _0x2fac81={'where':_0x279099[_0xc6e9('0x30')]};return db[_0xc6e9('0x21')][_0xc6e9('0x13')](_0x2fac81)['then'](function(_0x4c81cd){_0x32a0f7[_0xc6e9('0x13')]=_0x4c81cd;if(_0x1d248d[_0xc6e9('0x23')][_0xc6e9('0x38')]){_0x279099[_0xc6e9('0x39')]=[{'all':!![]}];}return db[_0xc6e9('0x21')][_0xc6e9('0x3a')](_0x279099);})[_0xc6e9('0x1a')](function(_0x263ecc){_0x32a0f7[_0xc6e9('0x3b')]=_0x263ecc;return _0x32a0f7;})['then'](respondWithFilteredResult(_0x323a5e,_0x279099))[_0xc6e9('0x3c')](handleError(_0x323a5e,null));};exports[_0xc6e9('0x3d')]=function(_0x2d3e84,_0x4421d9){var _0x55452f={'raw':!![],'where':{'id':_0x2d3e84['params']['id']}},_0x591a82={};_0x591a82[_0xc6e9('0x28')]=_[_0xc6e9('0x3e')](db['SmsQueueReport']['rawAttributes']);_0x591a82[_0xc6e9('0x23')]=_[_0xc6e9('0x3e')](_0x2d3e84[_0xc6e9('0x23')]);_0x591a82[_0xc6e9('0x26')]=_['intersection'](_0x591a82[_0xc6e9('0x28')],_0x591a82['query']);_0x55452f['attributes']=_[_0xc6e9('0x27')](_0x591a82['model'],qs['fields'](_0x2d3e84['query'][_0xc6e9('0x3f')]));_0x55452f['attributes']=_0x55452f[_0xc6e9('0x29')]['length']?_0x55452f[_0xc6e9('0x29')]:_0x591a82['model'];if(_0x2d3e84[_0xc6e9('0x23')]['includeAll']){_0x55452f[_0xc6e9('0x39')]=[{'all':!![]}];}_0x55452f=_[_0xc6e9('0x34')]({},_0x55452f,_0x2d3e84[_0xc6e9('0x37')]);return db[_0xc6e9('0x21')][_0xc6e9('0x40')](_0x55452f)[_0xc6e9('0x1a')](handleEntityNotFound(_0x4421d9,null))[_0xc6e9('0x1a')](respondWithResult(_0x4421d9,null))[_0xc6e9('0x3c')](handleError(_0x4421d9,null));};exports['create']=function(_0x32d745,_0x34a72c){return db['SmsQueueReport'][_0xc6e9('0x41')](_0x32d745[_0xc6e9('0x42')],{})['then'](respondWithResult(_0x34a72c,0xc9))[_0xc6e9('0x3c')](handleError(_0x34a72c,null));};exports['update']=function(_0x43ce76,_0x33ca24){if(_0x43ce76['body']['id']){delete _0x43ce76['body']['id'];}return db['SmsQueueReport'][_0xc6e9('0x40')]({'where':{'id':_0x43ce76[_0xc6e9('0x43')]['id']}})[_0xc6e9('0x1a')](handleEntityNotFound(_0x33ca24,null))[_0xc6e9('0x1a')](saveUpdates(_0x43ce76['body'],null))[_0xc6e9('0x1a')](respondWithResult(_0x33ca24,null))[_0xc6e9('0x3c')](handleError(_0x33ca24,null));};exports[_0xc6e9('0x1b')]=function(_0x3a649a,_0x3e85d1){return db['SmsQueueReport'][_0xc6e9('0x40')]({'where':{'id':_0x3a649a[_0xc6e9('0x43')]['id']}})[_0xc6e9('0x1a')](handleEntityNotFound(_0x3e85d1,null))[_0xc6e9('0x1a')](removeEntity(_0x3e85d1,null))['catch'](handleError(_0x3e85d1,null));};exports[_0xc6e9('0x44')]=function(_0x10f9d8,_0x2cb497){return db[_0xc6e9('0x21')]['describe']()[_0xc6e9('0x1a')](respondWithResult(_0x2cb497,null))[_0xc6e9('0x3c')](handleError(_0x2cb497,null));};
\ No newline at end of file
index 737e9e8..8fe0b81 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8df4=['moment','bluebird','request-promise','./smsQueueReport.attributes','exports','define','uniqueid','lodash','util','api'];(function(_0x1fa381,_0x758c2a){var _0x47eefe=function(_0x127f8c){while(--_0x127f8c){_0x1fa381['push'](_0x1fa381['shift']());}};_0x47eefe(++_0x758c2a);}(_0x8df4,0x18d));var _0x48df=function(_0x303c30,_0x16edcb){_0x303c30=_0x303c30-0x0;var _0x43161b=_0x8df4[_0x303c30];return _0x43161b;};'use strict';var _=require(_0x48df('0x0'));var util=require(_0x48df('0x1'));var logger=require('../../config/logger')(_0x48df('0x2'));var moment=require(_0x48df('0x3'));var BPromise=require(_0x48df('0x4'));var rp=require(_0x48df('0x5'));var attributes=require(_0x48df('0x6'));module[_0x48df('0x7')]=function(_0x27f4e5,_0x476f78){return _0x27f4e5[_0x48df('0x8')]('SmsQueueReport',attributes,{'tableName':'report_sms_queue','paranoid':![],'indexes':[{'name':_0x48df('0x9'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x05d1=['moment','request-promise','./smsQueueReport.attributes','SmsQueueReport','report_sms_queue','uniqueid','lodash','util','../../config/logger'];(function(_0x3ac1c7,_0x51c202){var _0x165298=function(_0x44282c){while(--_0x44282c){_0x3ac1c7['push'](_0x3ac1c7['shift']());}};_0x165298(++_0x51c202);}(_0x05d1,0x165));var _0x105d=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0x05d1[_0x397e5f];return _0x5302b8;};'use strict';var _=require(_0x105d('0x0'));var util=require(_0x105d('0x1'));var logger=require(_0x105d('0x2'))('api');var moment=require(_0x105d('0x3'));var BPromise=require('bluebird');var rp=require(_0x105d('0x4'));var attributes=require(_0x105d('0x5'));module['exports']=function(_0x1d1750,_0x19ddc9){return _0x1d1750['define'](_0x105d('0x6'),attributes,{'tableName':_0x105d('0x7'),'paranoid':![],'indexes':[{'name':_0x105d('0x8'),'fields':[_0x105d('0x8')]}],'timestamps':!![]});};
\ No newline at end of file
index 6bc2e0b..1345de8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3308=['UpdateSmsQueueReport','update','body','limit','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','client','http','request','then','SmsQueueReport,\x20%s,\x20%s','request\x20sent','debug','error','message','info','result','catch','CreateSmsQueueReport','create','options','raw','stringify'];(function(_0x28538b,_0x494fe6){var _0x2e4d7e=function(_0x299959){while(--_0x299959){_0x28538b['push'](_0x28538b['shift']());}};_0x2e4d7e(++_0x494fe6);}(_0x3308,0x160));var _0x8330=function(_0x41bf9f,_0x1c94d5){_0x41bf9f=_0x41bf9f-0x0;var _0x321c65=_0x3308[_0x41bf9f];return _0x321c65;};'use strict';var _=require(_0x8330('0x0'));var util=require(_0x8330('0x1'));var moment=require(_0x8330('0x2'));var BPromise=require(_0x8330('0x3'));var rs=require(_0x8330('0x4'));var fs=require('fs');var db=require(_0x8330('0x5'))['db'];var utils=require(_0x8330('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0x8330('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x8330('0x8')][_0x8330('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x36353a,_0x59c19e,_0x413cac){return new BPromise(function(_0x1d5fd6,_0x1244a7){return client[_0x8330('0xa')](_0x36353a,_0x413cac)[_0x8330('0xb')](function(_0x37be84){logger['info'](_0x8330('0xc'),_0x59c19e,_0x8330('0xd'));logger[_0x8330('0xe')]('SmsQueueReport,\x20%s,\x20%s,\x20%s',_0x59c19e,'request\x20sent',JSON['stringify'](_0x37be84));if(_0x37be84['error']){if(_0x37be84['error']['code']===0x1f4){logger[_0x8330('0xf')]('SmsQueueReport,\x20%s,\x20%s',_0x59c19e,_0x37be84[_0x8330('0xf')][_0x8330('0x10')]);return _0x1244a7(_0x37be84[_0x8330('0xf')][_0x8330('0x10')]);}logger[_0x8330('0xf')]('SmsQueueReport,\x20%s,\x20%s',_0x59c19e,_0x37be84[_0x8330('0xf')]['message']);return _0x1d5fd6(_0x37be84[_0x8330('0xf')][_0x8330('0x10')]);}else{logger[_0x8330('0x11')](_0x8330('0xc'),_0x59c19e,_0x8330('0xd'));_0x1d5fd6(_0x37be84[_0x8330('0x12')][_0x8330('0x10')]);}})[_0x8330('0x13')](function(_0x30b917){logger['error'](_0x8330('0xc'),_0x59c19e,_0x30b917);_0x1244a7(_0x30b917);});});}exports[_0x8330('0x14')]=function(_0x47895b){var _0x25853c=this;return new Promise(function(_0x3c9e7b,_0x457dc7){return db['SmsQueueReport'][_0x8330('0x15')](_0x47895b['body'],{'raw':_0x47895b[_0x8330('0x16')]?_0x47895b[_0x8330('0x16')][_0x8330('0x17')]===undefined?!![]:![]:!![]})[_0x8330('0xb')](function(_0x57a7f6){logger[_0x8330('0x11')]('CreateSmsQueueReport',_0x47895b);logger[_0x8330('0xe')]('CreateSmsQueueReport',_0x47895b,JSON[_0x8330('0x18')](_0x57a7f6));_0x3c9e7b(_0x57a7f6);})[_0x8330('0x13')](function(_0x1b213f){logger[_0x8330('0xf')](_0x8330('0x14'),_0x1b213f[_0x8330('0x10')],_0x47895b);_0x457dc7(_0x25853c[_0x8330('0xf')](0x1f4,_0x1b213f[_0x8330('0x10')]));});});};exports[_0x8330('0x19')]=function(_0x2770ca){var _0x3fa722=this;return new Promise(function(_0x5cb80c,_0x5c36fc){return db['SmsQueueReport'][_0x8330('0x1a')](_0x2770ca[_0x8330('0x1b')],{'raw':_0x2770ca[_0x8330('0x16')]?_0x2770ca[_0x8330('0x16')][_0x8330('0x17')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2770ca[_0x8330('0x16')]?_0x2770ca[_0x8330('0x16')]['where']||null:null,'attributes':_0x2770ca[_0x8330('0x16')]?_0x2770ca[_0x8330('0x16')]['attributes']||null:null,'limit':_0x2770ca[_0x8330('0x16')]?_0x2770ca[_0x8330('0x16')][_0x8330('0x1c')]||null:null})[_0x8330('0xb')](function(_0x3cedfb){logger['info'](_0x8330('0x19'),_0x2770ca);logger['debug'](_0x8330('0x19'),_0x2770ca,JSON[_0x8330('0x18')](_0x3cedfb));_0x5cb80c(_0x3cedfb);})[_0x8330('0x13')](function(_0x4c0e8d){logger[_0x8330('0xf')](_0x8330('0x19'),_0x4c0e8d['message'],_0x2770ca);_0x5c36fc(_0x3fa722[_0x8330('0xf')](0x1f4,_0x4c0e8d['message']));});});};
\ No newline at end of file
+var _0xe8e8=['request\x20sent','SmsQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','CreateSmsQueueReport','create','body','options','raw','UpdateSmsQueueReport','update','where','attributes','limit','debug','lodash','util','randomstring','../../mysqldb','rpc','jayson/promise','client','http','request','then','info','SmsQueueReport,\x20%s,\x20%s'];(function(_0x456742,_0x841eb6){var _0x27b6c0=function(_0x88639b){while(--_0x88639b){_0x456742['push'](_0x456742['shift']());}};_0x27b6c0(++_0x841eb6);}(_0xe8e8,0xc6));var _0x8e8e=function(_0x494bdc,_0x47e02c){_0x494bdc=_0x494bdc-0x0;var _0xf57e92=_0xe8e8[_0x494bdc];return _0xf57e92;};'use strict';var _=require(_0x8e8e('0x0'));var util=require(_0x8e8e('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x8e8e('0x2'));var fs=require('fs');var db=require(_0x8e8e('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x8e8e('0x4'));var config=require('../../config/environment');var jayson=require(_0x8e8e('0x5'));var client=jayson[_0x8e8e('0x6')][_0x8e8e('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x294176,_0x559147,_0x2d5ad4){return new BPromise(function(_0x4edd6c,_0x21703a){return client[_0x8e8e('0x8')](_0x294176,_0x2d5ad4)[_0x8e8e('0x9')](function(_0xb6290b){logger[_0x8e8e('0xa')](_0x8e8e('0xb'),_0x559147,_0x8e8e('0xc'));logger['debug'](_0x8e8e('0xd'),_0x559147,_0x8e8e('0xc'),JSON[_0x8e8e('0xe')](_0xb6290b));if(_0xb6290b[_0x8e8e('0xf')]){if(_0xb6290b['error'][_0x8e8e('0x10')]===0x1f4){logger[_0x8e8e('0xf')](_0x8e8e('0xb'),_0x559147,_0xb6290b[_0x8e8e('0xf')][_0x8e8e('0x11')]);return _0x21703a(_0xb6290b[_0x8e8e('0xf')][_0x8e8e('0x11')]);}logger[_0x8e8e('0xf')](_0x8e8e('0xb'),_0x559147,_0xb6290b[_0x8e8e('0xf')]['message']);return _0x4edd6c(_0xb6290b[_0x8e8e('0xf')][_0x8e8e('0x11')]);}else{logger['info'](_0x8e8e('0xb'),_0x559147,_0x8e8e('0xc'));_0x4edd6c(_0xb6290b['result'][_0x8e8e('0x11')]);}})[_0x8e8e('0x12')](function(_0xa1c847){logger[_0x8e8e('0xf')](_0x8e8e('0xb'),_0x559147,_0xa1c847);_0x21703a(_0xa1c847);});});}exports[_0x8e8e('0x13')]=function(_0xa802b9){var _0x27f7f6=this;return new Promise(function(_0x17261d,_0xdbde13){return db['SmsQueueReport'][_0x8e8e('0x14')](_0xa802b9[_0x8e8e('0x15')],{'raw':_0xa802b9['options']?_0xa802b9[_0x8e8e('0x16')][_0x8e8e('0x17')]===undefined?!![]:![]:!![]})[_0x8e8e('0x9')](function(_0xf928c8){logger['info']('CreateSmsQueueReport',_0xa802b9);logger['debug'](_0x8e8e('0x13'),_0xa802b9,JSON[_0x8e8e('0xe')](_0xf928c8));_0x17261d(_0xf928c8);})[_0x8e8e('0x12')](function(_0x21efa0){logger['error'](_0x8e8e('0x13'),_0x21efa0[_0x8e8e('0x11')],_0xa802b9);_0xdbde13(_0x27f7f6[_0x8e8e('0xf')](0x1f4,_0x21efa0['message']));});});};exports[_0x8e8e('0x18')]=function(_0x4c685e){var _0x5f2a24=this;return new Promise(function(_0x213e2d,_0x261ef7){return db['SmsQueueReport'][_0x8e8e('0x19')](_0x4c685e[_0x8e8e('0x15')],{'raw':_0x4c685e[_0x8e8e('0x16')]?_0x4c685e[_0x8e8e('0x16')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x4c685e[_0x8e8e('0x16')]?_0x4c685e[_0x8e8e('0x16')][_0x8e8e('0x1a')]||null:null,'attributes':_0x4c685e[_0x8e8e('0x16')]?_0x4c685e[_0x8e8e('0x16')][_0x8e8e('0x1b')]||null:null,'limit':_0x4c685e[_0x8e8e('0x16')]?_0x4c685e[_0x8e8e('0x16')][_0x8e8e('0x1c')]||null:null})[_0x8e8e('0x9')](function(_0x56424b){logger[_0x8e8e('0xa')](_0x8e8e('0x18'),_0x4c685e);logger[_0x8e8e('0x1d')]('UpdateSmsQueueReport',_0x4c685e,JSON[_0x8e8e('0xe')](_0x56424b));_0x213e2d(_0x56424b);})[_0x8e8e('0x12')](function(_0x2580eb){logger[_0x8e8e('0xf')]('UpdateSmsQueueReport',_0x2580eb[_0x8e8e('0x11')],_0x4c685e);_0x261ef7(_0x5f2a24[_0x8e8e('0xf')](0x1f4,_0x2580eb[_0x8e8e('0x11')]));});});};
\ No newline at end of file
index 6e8cdc3..9e96b9e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x702d=['index','/describe','isAuthenticated','describe','/:id','show','post','create','put','update','delete','exports','multer','util','path','express','Router','../../components/interaction/service','../../config/environment','./smsTransferReport.controller','get'];(function(_0x566fa1,_0xc3cb31){var _0x4c8d33=function(_0x103d06){while(--_0x103d06){_0x566fa1['push'](_0x566fa1['shift']());}};_0x4c8d33(++_0xc3cb31);}(_0x702d,0x147));var _0xd702=function(_0x3ab5db,_0x53be07){_0x3ab5db=_0x3ab5db-0x0;var _0x50aa9b=_0x702d[_0x3ab5db];return _0x50aa9b;};'use strict';var multer=require(_0xd702('0x0'));var util=require(_0xd702('0x1'));var path=require(_0xd702('0x2'));var express=require(_0xd702('0x3'));var router=express[_0xd702('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xd702('0x5'));var config=require(_0xd702('0x6'));var controller=require(_0xd702('0x7'));router[_0xd702('0x8')]('/',auth['isAuthenticated'](),controller[_0xd702('0x9')]);router['get'](_0xd702('0xa'),auth[_0xd702('0xb')](),controller[_0xd702('0xc')]);router['get'](_0xd702('0xd'),auth['isAuthenticated'](),controller[_0xd702('0xe')]);router[_0xd702('0xf')]('/',auth[_0xd702('0xb')](),controller[_0xd702('0x10')]);router[_0xd702('0x11')](_0xd702('0xd'),auth[_0xd702('0xb')](),controller[_0xd702('0x12')]);router[_0xd702('0x13')](_0xd702('0xd'),auth['isAuthenticated'](),controller['destroy']);module[_0xd702('0x14')]=router;
\ No newline at end of file
+var _0xaaa2=['isAuthenticated','index','/describe','show','/:id','delete','exports','multer','util','path','express','Router','../../components/auth/service','../../config/environment','get'];(function(_0x5b92df,_0x48075e){var _0x24efe5=function(_0x23b5b9){while(--_0x23b5b9){_0x5b92df['push'](_0x5b92df['shift']());}};_0x24efe5(++_0x48075e);}(_0xaaa2,0xac));var _0x2aaa=function(_0x1e02ba,_0x1f84da){_0x1e02ba=_0x1e02ba-0x0;var _0x3c2426=_0xaaa2[_0x1e02ba];return _0x3c2426;};'use strict';var multer=require(_0x2aaa('0x0'));var util=require(_0x2aaa('0x1'));var path=require(_0x2aaa('0x2'));var express=require(_0x2aaa('0x3'));var router=express[_0x2aaa('0x4')]();var auth=require(_0x2aaa('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x2aaa('0x6'));var controller=require('./smsTransferReport.controller');router[_0x2aaa('0x7')]('/',auth[_0x2aaa('0x8')](),controller[_0x2aaa('0x9')]);router[_0x2aaa('0x7')](_0x2aaa('0xa'),auth[_0x2aaa('0x8')](),controller['describe']);router[_0x2aaa('0x7')]('/:id',auth['isAuthenticated'](),controller[_0x2aaa('0xb')]);router['post']('/',auth[_0x2aaa('0x8')](),controller['create']);router['put'](_0x2aaa('0xc'),auth[_0x2aaa('0x8')](),controller['update']);router[_0x2aaa('0xd')](_0x2aaa('0xc'),auth[_0x2aaa('0x8')](),controller['destroy']);module[_0x2aaa('0xe')]=router;
\ No newline at end of file
index 6d5bd1b..0facac3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbe1f=['NOW','sequelize','exports','ENUM','queue'];(function(_0x35e893,_0x5303da){var _0x4d1672=function(_0x4216b2){while(--_0x4216b2){_0x35e893['push'](_0x35e893['shift']());}};_0x4d1672(++_0x5303da);}(_0xbe1f,0xbf));var _0xfbe1=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0xbe1f[_0x2f5ac5];return _0x37c9a8;};'use strict';var moment=require('moment');var Sequelize=require(_0xfbe1('0x0'));module[_0xfbe1('0x1')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize[_0xfbe1('0x2')]('account','agent',_0xfbe1('0x3')),'allowNull':![],'defaultValue':_0xfbe1('0x3')},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize[_0xfbe1('0x4')]}};
\ No newline at end of file
+var _0xd50b=['STRING','agent','queue','NOW','moment','exports'];(function(_0x3eeb22,_0x591ae9){var _0x100e3b=function(_0x73ebb5){while(--_0x73ebb5){_0x3eeb22['push'](_0x3eeb22['shift']());}};_0x100e3b(++_0x591ae9);}(_0xd50b,0xb8));var _0xbd50=function(_0x4cba56,_0x5b2c44){_0x4cba56=_0x4cba56-0x0;var _0x3cc9f3=_0xd50b[_0x4cba56];return _0x3cc9f3;};'use strict';var moment=require(_0xbd50('0x0'));var Sequelize=require('sequelize');module[_0xbd50('0x1')]={'uniqueid':{'type':Sequelize[_0xbd50('0x2')],'allowNull':![]},'type':{'type':Sequelize['ENUM']('account',_0xbd50('0x3'),_0xbd50('0x4')),'allowNull':![],'defaultValue':_0xbd50('0x4')},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize[_0xbd50('0x5')]}};
\ No newline at end of file
index eef6531..a7cfe29 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb197=['sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','end','sendStatus','error','stack','name','send','model','query','dateStart','dateEnd','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','add','day','merge','filter','map','options','SmsTransferReport','include','rows','catch','show','params','keys','rawAttributes','length','find','create','body','describe','fast-json-patch','request-promise','moment','mustache','util','path'];(function(_0x31e29a,_0x349c9b){var _0x32d892=function(_0x41cc86){while(--_0x41cc86){_0x31e29a['push'](_0x31e29a['shift']());}};_0x32d892(++_0x349c9b);}(_0xb197,0xd2));var _0x7b19=function(_0x176d14,_0x3984ea){_0x176d14=_0x176d14-0x0;var _0x89522c=_0xb197[_0x176d14];return _0x89522c;};'use strict';var jsonpatch=require(_0x7b19('0x0'));var rp=require(_0x7b19('0x1'));var moment=require(_0x7b19('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x7b19('0x3'));var util=require(_0x7b19('0x4'));var path=require(_0x7b19('0x5'));var sox=require(_0x7b19('0x6'));var csv=require(_0x7b19('0x7'));var ejs=require(_0x7b19('0x8'));var fs=require('fs');var _=require(_0x7b19('0x9'));var squel=require(_0x7b19('0xa'));var crypto=require(_0x7b19('0xb'));var jsforce=require(_0x7b19('0xc'));var deskjs=require(_0x7b19('0xd'));var toCsv=require('to-csv');var querystring=require(_0x7b19('0xe'));var Papa=require(_0x7b19('0xf'));var qs=require(_0x7b19('0x10'));var logger=require('../../config/logger')(_0x7b19('0x11'));var utils=require(_0x7b19('0x12'));var config=require(_0x7b19('0x13'));var db=require(_0x7b19('0x14'))['db'];function respondWithStatusCode(_0x1dce3a,_0x13b43f){_0x13b43f=_0x13b43f||0xcc;return function(_0x3aca0d){if(_0x3aca0d){return _0x1dce3a['sendStatus'](_0x13b43f);}return _0x1dce3a[_0x7b19('0x15')](_0x13b43f)['end']();};}function respondWithResult(_0x51699c,_0x45132f){_0x45132f=_0x45132f||0xc8;return function(_0x4d97b5){if(_0x4d97b5){return _0x51699c[_0x7b19('0x15')](_0x45132f)[_0x7b19('0x16')](_0x4d97b5);}};}function respondWithFilteredResult(_0x35f2f8,_0x1bb1b8){return function(_0x15e90e){if(_0x15e90e){var _0x11f75f=_0x15e90e[_0x7b19('0x17')],_0x59b9c6=_0x1bb1b8[_0x7b19('0x18')],_0x496661=_0x1bb1b8['offset']+_0x1bb1b8[_0x7b19('0x19')],_0x2c01c1;if(_0x496661>=_0x11f75f){_0x496661=_0x11f75f;_0x2c01c1=0xc8;}else{_0x2c01c1=0xce;}_0x35f2f8['status'](_0x2c01c1);return _0x35f2f8[_0x7b19('0x1a')](_0x7b19('0x1b'),_0x59b9c6+'-'+_0x496661+'/'+_0x11f75f)[_0x7b19('0x16')](_0x15e90e);}return null;};}function patchUpdates(_0x352809){return function(_0x1d1696){try{jsonpatch[_0x7b19('0x1c')](_0x1d1696,_0x352809,!![]);}catch(_0x70b863){return BPromise[_0x7b19('0x1d')](_0x70b863);}return _0x1d1696['save']();};}function saveUpdates(_0x1b774b,_0x55c306){return function(_0x281bb6){if(_0x281bb6){return _0x281bb6[_0x7b19('0x1e')](_0x1b774b)[_0x7b19('0x1f')](function(_0x29695e){return _0x29695e;});}return null;};}function removeEntity(_0x682322,_0x3e7c6b){return function(_0x162c64){if(_0x162c64){return _0x162c64[_0x7b19('0x20')]()[_0x7b19('0x1f')](function(){_0x682322[_0x7b19('0x15')](0xcc)[_0x7b19('0x21')]();});}};}function handleEntityNotFound(_0x18a3ea,_0x421c53){return function(_0x988785){if(!_0x988785){_0x18a3ea[_0x7b19('0x22')](0x194);}return _0x988785;};}function handleError(_0x6dec31,_0x49fd0a){_0x49fd0a=_0x49fd0a||0x1f4;return function(_0x1b9b3e){logger[_0x7b19('0x23')](_0x1b9b3e[_0x7b19('0x24')]);if(_0x1b9b3e['name']){delete _0x1b9b3e[_0x7b19('0x25')];}_0x6dec31[_0x7b19('0x15')](_0x49fd0a)[_0x7b19('0x26')](_0x1b9b3e);};}exports['index']=function(_0x8b375b,_0x33d1dc){var _0x241ebd={},_0x577afa={},_0x173e68={'count':0x0,'rows':[]};var _0x50bbc2=db['SmsTransferReport']['rawAttributes'];_0x577afa[_0x7b19('0x27')]=_['keys'](_0x50bbc2);var _0x1f1e1b={'dateStart':_0x8b375b[_0x7b19('0x28')][_0x7b19('0x29')],'dateEnd':_0x8b375b[_0x7b19('0x28')]['dateEnd']};delete _0x8b375b[_0x7b19('0x28')][_0x7b19('0x29')];delete _0x8b375b[_0x7b19('0x28')][_0x7b19('0x2a')];_0x577afa[_0x7b19('0x28')]=_['keys'](_0x8b375b[_0x7b19('0x28')]);_0x577afa[_0x7b19('0x2b')]=_[_0x7b19('0x2c')](_0x577afa[_0x7b19('0x27')],_0x577afa[_0x7b19('0x28')]);_0x241ebd[_0x7b19('0x2d')]=_[_0x7b19('0x2c')](_0x577afa[_0x7b19('0x27')],qs[_0x7b19('0x2e')](_0x8b375b[_0x7b19('0x28')][_0x7b19('0x2e')]));_0x241ebd[_0x7b19('0x2d')]=_0x241ebd[_0x7b19('0x2d')]['length']?_0x241ebd[_0x7b19('0x2d')]:_0x577afa[_0x7b19('0x27')];if(!_0x8b375b[_0x7b19('0x28')][_0x7b19('0x2f')](_0x7b19('0x30'))){_0x241ebd[_0x7b19('0x19')]=qs[_0x7b19('0x19')](_0x8b375b['query'][_0x7b19('0x19')]);_0x241ebd['offset']=qs[_0x7b19('0x18')](_0x8b375b['query'][_0x7b19('0x18')]);}_0x241ebd[_0x7b19('0x31')]=qs[_0x7b19('0x32')](_0x8b375b[_0x7b19('0x28')][_0x7b19('0x32')]);_0x241ebd[_0x7b19('0x33')]=qs[_0x7b19('0x2b')](_[_0x7b19('0x34')](_0x8b375b[_0x7b19('0x28')],_0x577afa[_0x7b19('0x2b')]));if(_0x1f1e1b[_0x7b19('0x29')]){if(_0x1f1e1b[_0x7b19('0x2a')]){_0x1f1e1b[_0x7b19('0x2a')]=moment(_0x1f1e1b[_0x7b19('0x2a')])[_0x7b19('0x35')](0x1,_0x7b19('0x36'));}else{_0x1f1e1b[_0x7b19('0x2a')]=moment(_0x1f1e1b[_0x7b19('0x29')])['add'](0x1,_0x7b19('0x36'));}_[_0x7b19('0x37')](_0x241ebd[_0x7b19('0x33')],{'createdAt':{'$gte':_0x1f1e1b[_0x7b19('0x29')],'$lte':_0x1f1e1b[_0x7b19('0x2a')]}});}if(_0x8b375b[_0x7b19('0x28')][_0x7b19('0x38')]){_0x241ebd[_0x7b19('0x33')]=_[_0x7b19('0x37')](_0x241ebd[_0x7b19('0x33')],{'$or':_[_0x7b19('0x39')](_0x241ebd[_0x7b19('0x2d')],function(_0x200f59){var _0xc75bf9={};_0xc75bf9[_0x200f59]={'$like':'%'+_0x8b375b[_0x7b19('0x28')]['filter']+'%'};return _0xc75bf9;})});}_0x241ebd=_[_0x7b19('0x37')]({},_0x241ebd,_0x8b375b[_0x7b19('0x3a')]);var _0x1e5713={'where':_0x241ebd[_0x7b19('0x33')]};return db[_0x7b19('0x3b')]['count'](_0x1e5713)[_0x7b19('0x1f')](function(_0x8acb3b){_0x173e68[_0x7b19('0x17')]=_0x8acb3b;if(_0x8b375b[_0x7b19('0x28')]['includeAll']){_0x241ebd[_0x7b19('0x3c')]=[{'all':!![]}];}return db[_0x7b19('0x3b')]['findAll'](_0x241ebd);})[_0x7b19('0x1f')](function(_0x575c13){_0x173e68[_0x7b19('0x3d')]=_0x575c13;return _0x173e68;})[_0x7b19('0x1f')](respondWithFilteredResult(_0x33d1dc,_0x241ebd))[_0x7b19('0x3e')](handleError(_0x33d1dc,null));};exports[_0x7b19('0x3f')]=function(_0x3cef59,_0x29445a){var _0x54c122={'raw':!![],'where':{'id':_0x3cef59[_0x7b19('0x40')]['id']}},_0x3b796a={};_0x3b796a[_0x7b19('0x27')]=_[_0x7b19('0x41')](db['SmsTransferReport'][_0x7b19('0x42')]);_0x3b796a[_0x7b19('0x28')]=_[_0x7b19('0x41')](_0x3cef59[_0x7b19('0x28')]);_0x3b796a[_0x7b19('0x2b')]=_[_0x7b19('0x2c')](_0x3b796a[_0x7b19('0x27')],_0x3b796a['query']);_0x54c122[_0x7b19('0x2d')]=_[_0x7b19('0x2c')](_0x3b796a[_0x7b19('0x27')],qs['fields'](_0x3cef59[_0x7b19('0x28')]['fields']));_0x54c122[_0x7b19('0x2d')]=_0x54c122[_0x7b19('0x2d')][_0x7b19('0x43')]?_0x54c122[_0x7b19('0x2d')]:_0x3b796a['model'];if(_0x3cef59[_0x7b19('0x28')]['includeAll']){_0x54c122[_0x7b19('0x3c')]=[{'all':!![]}];}_0x54c122=_[_0x7b19('0x37')]({},_0x54c122,_0x3cef59[_0x7b19('0x3a')]);return db[_0x7b19('0x3b')][_0x7b19('0x44')](_0x54c122)[_0x7b19('0x1f')](handleEntityNotFound(_0x29445a,null))[_0x7b19('0x1f')](respondWithResult(_0x29445a,null))['catch'](handleError(_0x29445a,null));};exports[_0x7b19('0x45')]=function(_0x293a57,_0x277c7b){return db[_0x7b19('0x3b')]['create'](_0x293a57[_0x7b19('0x46')],{})[_0x7b19('0x1f')](respondWithResult(_0x277c7b,0xc9))[_0x7b19('0x3e')](handleError(_0x277c7b,null));};exports[_0x7b19('0x1e')]=function(_0x476c61,_0x22f3e4){if(_0x476c61['body']['id']){delete _0x476c61[_0x7b19('0x46')]['id'];}return db[_0x7b19('0x3b')]['find']({'where':{'id':_0x476c61[_0x7b19('0x40')]['id']}})[_0x7b19('0x1f')](handleEntityNotFound(_0x22f3e4,null))[_0x7b19('0x1f')](saveUpdates(_0x476c61['body'],null))[_0x7b19('0x1f')](respondWithResult(_0x22f3e4,null))[_0x7b19('0x3e')](handleError(_0x22f3e4,null));};exports['destroy']=function(_0x5c858b,_0x15521e){return db[_0x7b19('0x3b')][_0x7b19('0x44')]({'where':{'id':_0x5c858b[_0x7b19('0x40')]['id']}})[_0x7b19('0x1f')](handleEntityNotFound(_0x15521e,null))[_0x7b19('0x1f')](removeEntity(_0x15521e,null))[_0x7b19('0x3e')](handleError(_0x15521e,null));};exports[_0x7b19('0x47')]=function(_0x53532c,_0x38c93f){return db[_0x7b19('0x3b')]['describe']()[_0x7b19('0x1f')](respondWithResult(_0x38c93f,null))[_0x7b19('0x3e')](handleError(_0x38c93f,null));};
\ No newline at end of file
+var _0x1d77=['index','SmsTransferReport','rawAttributes','model','keys','query','dateEnd','dateStart','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','add','day','merge','map','includeAll','include','findAll','rows','show','params','find','catch','create','body','fast-json-patch','moment','bluebird','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','Content-Range','apply','save','then','destroy','error','stack','name','send'];(function(_0x271786,_0x51c282){var _0x1d06c6=function(_0x4019a5){while(--_0x4019a5){_0x271786['push'](_0x271786['shift']());}};_0x1d06c6(++_0x51c282);}(_0x1d77,0xee));var _0x71d7=function(_0x3b5250,_0x7a0b2c){_0x3b5250=_0x3b5250-0x0;var _0xc844a1=_0x1d77[_0x3b5250];return _0xc844a1;};'use strict';var jsonpatch=require(_0x71d7('0x0'));var rp=require('request-promise');var moment=require(_0x71d7('0x1'));var BPromise=require(_0x71d7('0x2'));var Mustache=require('mustache');var util=require(_0x71d7('0x3'));var path=require(_0x71d7('0x4'));var sox=require(_0x71d7('0x5'));var csv=require(_0x71d7('0x6'));var ejs=require(_0x71d7('0x7'));var fs=require('fs');var _=require(_0x71d7('0x8'));var squel=require('squel');var crypto=require(_0x71d7('0x9'));var jsforce=require(_0x71d7('0xa'));var deskjs=require(_0x71d7('0xb'));var toCsv=require(_0x71d7('0x6'));var querystring=require(_0x71d7('0xc'));var Papa=require(_0x71d7('0xd'));var qs=require('../../components/parsers/qs');var logger=require(_0x71d7('0xe'))(_0x71d7('0xf'));var utils=require(_0x71d7('0x10'));var config=require(_0x71d7('0x11'));var db=require(_0x71d7('0x12'))['db'];function respondWithStatusCode(_0x562ac6,_0x7d60a){_0x7d60a=_0x7d60a||0xcc;return function(_0x2003ee){if(_0x2003ee){return _0x562ac6[_0x71d7('0x13')](_0x7d60a);}return _0x562ac6[_0x71d7('0x14')](_0x7d60a)[_0x71d7('0x15')]();};}function respondWithResult(_0x51ea6b,_0x26ca13){_0x26ca13=_0x26ca13||0xc8;return function(_0x3e6884){if(_0x3e6884){return _0x51ea6b['status'](_0x26ca13)[_0x71d7('0x16')](_0x3e6884);}};}function respondWithFilteredResult(_0x393d4f,_0x5a3c44){return function(_0x375f86){if(_0x375f86){var _0x2329e2=_0x375f86[_0x71d7('0x17')],_0x5adae5=_0x5a3c44[_0x71d7('0x18')],_0x271047=_0x5a3c44['offset']+_0x5a3c44['limit'],_0x2b6dab;if(_0x271047>=_0x2329e2){_0x271047=_0x2329e2;_0x2b6dab=0xc8;}else{_0x2b6dab=0xce;}_0x393d4f[_0x71d7('0x14')](_0x2b6dab);return _0x393d4f['set'](_0x71d7('0x19'),_0x5adae5+'-'+_0x271047+'/'+_0x2329e2)['json'](_0x375f86);}return null;};}function patchUpdates(_0x30bb1f){return function(_0x3f6c8c){try{jsonpatch[_0x71d7('0x1a')](_0x3f6c8c,_0x30bb1f,!![]);}catch(_0x484d42){return BPromise['reject'](_0x484d42);}return _0x3f6c8c[_0x71d7('0x1b')]();};}function saveUpdates(_0x3a1b2b,_0x26f8c3){return function(_0x398da4){if(_0x398da4){return _0x398da4['update'](_0x3a1b2b)[_0x71d7('0x1c')](function(_0x12fa05){return _0x12fa05;});}return null;};}function removeEntity(_0xc4626,_0x5d9ec7){return function(_0x2a91c2){if(_0x2a91c2){return _0x2a91c2[_0x71d7('0x1d')]()[_0x71d7('0x1c')](function(){_0xc4626[_0x71d7('0x14')](0xcc)[_0x71d7('0x15')]();});}};}function handleEntityNotFound(_0x2666aa,_0x345668){return function(_0x45d6a9){if(!_0x45d6a9){_0x2666aa[_0x71d7('0x13')](0x194);}return _0x45d6a9;};}function handleError(_0x4b384a,_0x550f05){_0x550f05=_0x550f05||0x1f4;return function(_0x37903e){logger[_0x71d7('0x1e')](_0x37903e[_0x71d7('0x1f')]);if(_0x37903e[_0x71d7('0x20')]){delete _0x37903e[_0x71d7('0x20')];}_0x4b384a[_0x71d7('0x14')](_0x550f05)[_0x71d7('0x21')](_0x37903e);};}exports[_0x71d7('0x22')]=function(_0x3be867,_0x10d83b){var _0x2e5bb6={},_0x18b355={},_0x45068f={'count':0x0,'rows':[]};var _0x4cf576=db[_0x71d7('0x23')][_0x71d7('0x24')];_0x18b355[_0x71d7('0x25')]=_[_0x71d7('0x26')](_0x4cf576);var _0x3ec0eb={'dateStart':_0x3be867['query']['dateStart'],'dateEnd':_0x3be867[_0x71d7('0x27')][_0x71d7('0x28')]};delete _0x3be867[_0x71d7('0x27')][_0x71d7('0x29')];delete _0x3be867[_0x71d7('0x27')]['dateEnd'];_0x18b355[_0x71d7('0x27')]=_[_0x71d7('0x26')](_0x3be867[_0x71d7('0x27')]);_0x18b355[_0x71d7('0x2a')]=_[_0x71d7('0x2b')](_0x18b355['model'],_0x18b355['query']);_0x2e5bb6[_0x71d7('0x2c')]=_[_0x71d7('0x2b')](_0x18b355[_0x71d7('0x25')],qs[_0x71d7('0x2d')](_0x3be867['query'][_0x71d7('0x2d')]));_0x2e5bb6['attributes']=_0x2e5bb6[_0x71d7('0x2c')][_0x71d7('0x2e')]?_0x2e5bb6[_0x71d7('0x2c')]:_0x18b355[_0x71d7('0x25')];if(!_0x3be867[_0x71d7('0x27')][_0x71d7('0x2f')](_0x71d7('0x30'))){_0x2e5bb6['limit']=qs[_0x71d7('0x31')](_0x3be867[_0x71d7('0x27')]['limit']);_0x2e5bb6['offset']=qs['offset'](_0x3be867[_0x71d7('0x27')][_0x71d7('0x18')]);}_0x2e5bb6[_0x71d7('0x32')]=qs[_0x71d7('0x33')](_0x3be867['query'][_0x71d7('0x33')]);_0x2e5bb6[_0x71d7('0x34')]=qs[_0x71d7('0x2a')](_[_0x71d7('0x35')](_0x3be867[_0x71d7('0x27')],_0x18b355[_0x71d7('0x2a')]));if(_0x3ec0eb[_0x71d7('0x29')]){if(_0x3ec0eb[_0x71d7('0x28')]){_0x3ec0eb[_0x71d7('0x28')]=moment(_0x3ec0eb[_0x71d7('0x28')])[_0x71d7('0x36')](0x1,_0x71d7('0x37'));}else{_0x3ec0eb[_0x71d7('0x28')]=moment(_0x3ec0eb[_0x71d7('0x29')])[_0x71d7('0x36')](0x1,_0x71d7('0x37'));}_[_0x71d7('0x38')](_0x2e5bb6['where'],{'createdAt':{'$gte':_0x3ec0eb[_0x71d7('0x29')],'$lte':_0x3ec0eb[_0x71d7('0x28')]}});}if(_0x3be867[_0x71d7('0x27')]['filter']){_0x2e5bb6[_0x71d7('0x34')]=_[_0x71d7('0x38')](_0x2e5bb6[_0x71d7('0x34')],{'$or':_[_0x71d7('0x39')](_0x2e5bb6['attributes'],function(_0x305c44){var _0xb9edeb={};_0xb9edeb[_0x305c44]={'$like':'%'+_0x3be867[_0x71d7('0x27')]['filter']+'%'};return _0xb9edeb;})});}_0x2e5bb6=_[_0x71d7('0x38')]({},_0x2e5bb6,_0x3be867['options']);var _0x28a3f4={'where':_0x2e5bb6[_0x71d7('0x34')]};return db[_0x71d7('0x23')][_0x71d7('0x17')](_0x28a3f4)['then'](function(_0x6a66b6){_0x45068f[_0x71d7('0x17')]=_0x6a66b6;if(_0x3be867['query'][_0x71d7('0x3a')]){_0x2e5bb6[_0x71d7('0x3b')]=[{'all':!![]}];}return db['SmsTransferReport'][_0x71d7('0x3c')](_0x2e5bb6);})['then'](function(_0x5556e1){_0x45068f[_0x71d7('0x3d')]=_0x5556e1;return _0x45068f;})[_0x71d7('0x1c')](respondWithFilteredResult(_0x10d83b,_0x2e5bb6))['catch'](handleError(_0x10d83b,null));};exports[_0x71d7('0x3e')]=function(_0x5927ff,_0x2f5f0a){var _0xf1c701={'raw':!![],'where':{'id':_0x5927ff[_0x71d7('0x3f')]['id']}},_0x5f31b8={};_0x5f31b8[_0x71d7('0x25')]=_[_0x71d7('0x26')](db[_0x71d7('0x23')][_0x71d7('0x24')]);_0x5f31b8[_0x71d7('0x27')]=_[_0x71d7('0x26')](_0x5927ff[_0x71d7('0x27')]);_0x5f31b8[_0x71d7('0x2a')]=_['intersection'](_0x5f31b8['model'],_0x5f31b8[_0x71d7('0x27')]);_0xf1c701[_0x71d7('0x2c')]=_[_0x71d7('0x2b')](_0x5f31b8[_0x71d7('0x25')],qs[_0x71d7('0x2d')](_0x5927ff[_0x71d7('0x27')][_0x71d7('0x2d')]));_0xf1c701['attributes']=_0xf1c701[_0x71d7('0x2c')][_0x71d7('0x2e')]?_0xf1c701[_0x71d7('0x2c')]:_0x5f31b8[_0x71d7('0x25')];if(_0x5927ff[_0x71d7('0x27')][_0x71d7('0x3a')]){_0xf1c701['include']=[{'all':!![]}];}_0xf1c701=_[_0x71d7('0x38')]({},_0xf1c701,_0x5927ff['options']);return db[_0x71d7('0x23')][_0x71d7('0x40')](_0xf1c701)[_0x71d7('0x1c')](handleEntityNotFound(_0x2f5f0a,null))['then'](respondWithResult(_0x2f5f0a,null))[_0x71d7('0x41')](handleError(_0x2f5f0a,null));};exports[_0x71d7('0x42')]=function(_0x36f87c,_0x3488ac){return db[_0x71d7('0x23')]['create'](_0x36f87c[_0x71d7('0x43')],{})[_0x71d7('0x1c')](respondWithResult(_0x3488ac,0xc9))[_0x71d7('0x41')](handleError(_0x3488ac,null));};exports['update']=function(_0x32c2b6,_0x4d1185){if(_0x32c2b6[_0x71d7('0x43')]['id']){delete _0x32c2b6[_0x71d7('0x43')]['id'];}return db[_0x71d7('0x23')][_0x71d7('0x40')]({'where':{'id':_0x32c2b6[_0x71d7('0x3f')]['id']}})['then'](handleEntityNotFound(_0x4d1185,null))[_0x71d7('0x1c')](saveUpdates(_0x32c2b6[_0x71d7('0x43')],null))[_0x71d7('0x1c')](respondWithResult(_0x4d1185,null))['catch'](handleError(_0x4d1185,null));};exports['destroy']=function(_0x2e5c68,_0x3da894){return db['SmsTransferReport'][_0x71d7('0x40')]({'where':{'id':_0x2e5c68[_0x71d7('0x3f')]['id']}})[_0x71d7('0x1c')](handleEntityNotFound(_0x3da894,null))[_0x71d7('0x1c')](removeEntity(_0x3da894,null))['catch'](handleError(_0x3da894,null));};exports['describe']=function(_0x489fe2,_0x459bb0){return db['SmsTransferReport']['describe']()['then'](respondWithResult(_0x459bb0,null))['catch'](handleError(_0x459bb0,null));};
\ No newline at end of file
index a4853e0..1adf611 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x00bb=['request-promise','./smsTransferReport.attributes','uniqueid','lodash','util','../../config/logger','moment'];(function(_0x5e2db6,_0x31ba13){var _0x1728bc=function(_0x3e3a48){while(--_0x3e3a48){_0x5e2db6['push'](_0x5e2db6['shift']());}};_0x1728bc(++_0x31ba13);}(_0x00bb,0x1d8));var _0xb00b=function(_0x47e7cb,_0x4c1b8d){_0x47e7cb=_0x47e7cb-0x0;var _0x2a8874=_0x00bb[_0x47e7cb];return _0x2a8874;};'use strict';var _=require(_0xb00b('0x0'));var util=require(_0xb00b('0x1'));var logger=require(_0xb00b('0x2'))('api');var moment=require(_0xb00b('0x3'));var BPromise=require('bluebird');var rp=require(_0xb00b('0x4'));var attributes=require(_0xb00b('0x5'));module['exports']=function(_0x14b5d0,_0x2dbd25){return _0x14b5d0['define']('SmsTransferReport',attributes,{'tableName':'report_sms_transfer','paranoid':![],'indexes':[{'name':_0xb00b('0x6'),'fields':[_0xb00b('0x6')]}],'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(_0x32f802,_0x43fb5d){var _0x70fff8=function(_0x410f63){while(--_0x410f63){_0x32f802['push'](_0x32f802['shift']());}};_0x70fff8(++_0x43fb5d);}(_0x008c,0x188));var _0xc008=function(_0x4c67b8,_0x571e13){_0x4c67b8=_0x4c67b8-0x0;var _0xbc26e=_0x008c[_0x4c67b8];return _0xbc26e;};'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 4fc2d4b..915fb44 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe283=['../../mysqldb','../../config/utils','rpc','jayson/promise','client','info','SmsTransferReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','util','moment','bluebird','randomstring'];(function(_0x847032,_0x16e338){var _0x143ba4=function(_0x5dea4f){while(--_0x5dea4f){_0x847032['push'](_0x847032['shift']());}};_0x143ba4(++_0x16e338);}(_0xe283,0x1d7));var _0x3e28=function(_0x16de68,_0x33d7ff){_0x16de68=_0x16de68-0x0;var _0x1c277e=_0xe283[_0x16de68];return _0x1c277e;};'use strict';var _=require('lodash');var util=require(_0x3e28('0x0'));var moment=require(_0x3e28('0x1'));var BPromise=require(_0x3e28('0x2'));var rs=require(_0x3e28('0x3'));var fs=require('fs');var db=require(_0x3e28('0x4'))['db'];var utils=require(_0x3e28('0x5'));var logger=require('../../config/logger')(_0x3e28('0x6'));var config=require('../../config/environment');var jayson=require(_0x3e28('0x7'));var client=jayson[_0x3e28('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1a80a7,_0x3595de,_0x542e23){return new BPromise(function(_0x3c9022,_0x287634){return client['request'](_0x1a80a7,_0x542e23)['then'](function(_0x1ef922){logger[_0x3e28('0x9')](_0x3e28('0xa'),_0x3595de,_0x3e28('0xb'));logger[_0x3e28('0xc')]('SmsTransferReport,\x20%s,\x20%s,\x20%s',_0x3595de,_0x3e28('0xb'),JSON[_0x3e28('0xd')](_0x1ef922));if(_0x1ef922[_0x3e28('0xe')]){if(_0x1ef922[_0x3e28('0xe')][_0x3e28('0xf')]===0x1f4){logger['error']('SmsTransferReport,\x20%s,\x20%s',_0x3595de,_0x1ef922['error'][_0x3e28('0x10')]);return _0x287634(_0x1ef922[_0x3e28('0xe')]['message']);}logger[_0x3e28('0xe')](_0x3e28('0xa'),_0x3595de,_0x1ef922[_0x3e28('0xe')]['message']);return _0x3c9022(_0x1ef922[_0x3e28('0xe')][_0x3e28('0x10')]);}else{logger[_0x3e28('0x9')](_0x3e28('0xa'),_0x3595de,'request\x20sent');_0x3c9022(_0x1ef922[_0x3e28('0x11')]['message']);}})[_0x3e28('0x12')](function(_0x4c123d){logger[_0x3e28('0xe')](_0x3e28('0xa'),_0x3595de,_0x4c123d);_0x287634(_0x4c123d);});});}
\ No newline at end of file
+var _0x5be5=['then','request\x20sent','stringify','error','code','SmsTransferReport,\x20%s,\x20%s','message','info','result','catch','util','moment','randomstring','../../config/utils','../../config/logger','../../config/environment'];(function(_0x329eba,_0x212c29){var _0x269020=function(_0x240f8a){while(--_0x240f8a){_0x329eba['push'](_0x329eba['shift']());}};_0x269020(++_0x212c29);}(_0x5be5,0x10a));var _0x55be=function(_0x51b665,_0x39ba8e){_0x51b665=_0x51b665-0x0;var _0x5bef86=_0x5be5[_0x51b665];return _0x5bef86;};'use strict';var _=require('lodash');var util=require(_0x55be('0x0'));var moment=require(_0x55be('0x1'));var BPromise=require('bluebird');var rs=require(_0x55be('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x55be('0x3'));var logger=require(_0x55be('0x4'))('rpc');var config=require(_0x55be('0x5'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x53fd59,_0x2aae5e,_0x27e3ed){return new BPromise(function(_0x1be113,_0x53e95f){return client['request'](_0x53fd59,_0x27e3ed)[_0x55be('0x6')](function(_0x1a32a2){logger['info']('SmsTransferReport,\x20%s,\x20%s',_0x2aae5e,'request\x20sent');logger['debug']('SmsTransferReport,\x20%s,\x20%s,\x20%s',_0x2aae5e,_0x55be('0x7'),JSON[_0x55be('0x8')](_0x1a32a2));if(_0x1a32a2[_0x55be('0x9')]){if(_0x1a32a2[_0x55be('0x9')][_0x55be('0xa')]===0x1f4){logger[_0x55be('0x9')](_0x55be('0xb'),_0x2aae5e,_0x1a32a2['error'][_0x55be('0xc')]);return _0x53e95f(_0x1a32a2[_0x55be('0x9')][_0x55be('0xc')]);}logger[_0x55be('0x9')](_0x55be('0xb'),_0x2aae5e,_0x1a32a2[_0x55be('0x9')][_0x55be('0xc')]);return _0x1be113(_0x1a32a2[_0x55be('0x9')][_0x55be('0xc')]);}else{logger[_0x55be('0xd')](_0x55be('0xb'),_0x2aae5e,_0x55be('0x7'));_0x1be113(_0x1a32a2[_0x55be('0xe')][_0x55be('0xc')]);}})[_0x55be('0xf')](function(_0x11f0ad){logger['error'](_0x55be('0xb'),_0x2aae5e,_0x11f0ad);_0x53e95f(_0x11f0ad);});});}
\ No newline at end of file
index 3426238..8ede0a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcc89=['root','originalname','format','%s-%s%s','basename','extname','now','post','single','file','create','put','update','delete','/:id','exports','multer','util','express','Router','../../components/auth/service','../../config/environment','./sound.controller','get','index','isAuthenticated','show','diskStorage'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0xcc89,0x1d0));var _0x9cc8=function(_0x3b4319,_0x46085a){_0x3b4319=_0x3b4319-0x0;var _0x5cdcb0=_0xcc89[_0x3b4319];return _0x5cdcb0;};'use strict';var multer=require(_0x9cc8('0x0'));var util=require(_0x9cc8('0x1'));var path=require('path');var express=require(_0x9cc8('0x2'));var router=express[_0x9cc8('0x3')]();var auth=require(_0x9cc8('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x9cc8('0x5'));var controller=require(_0x9cc8('0x6'));router[_0x9cc8('0x7')]('/',auth['isAuthenticated'](),controller[_0x9cc8('0x8')]);router['get']('/:id',auth[_0x9cc8('0x9')](),controller[_0x9cc8('0xa')]);router[_0x9cc8('0x7')]('/:id/download',auth['isAuthenticated'](),controller['download']);var upload=multer({'storage':multer[_0x9cc8('0xb')]({'destination':function(_0x8ff257,_0x3636c2,_0x478ee6){_0x478ee6(null,path['join'](config[_0x9cc8('0xc')],'server/files/sounds/original/'));},'filename':function(_0x4027b4,_0x4ef863,_0x284e59){_0x4ef863[_0x9cc8('0xd')]=_0x4ef863[_0x9cc8('0xd')]['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x284e59(null,util[_0x9cc8('0xe')](_0x9cc8('0xf'),path[_0x9cc8('0x10')](_0x4ef863[_0x9cc8('0xd')],path[_0x9cc8('0x11')](_0x4ef863['originalname'])),Date[_0x9cc8('0x12')](),path[_0x9cc8('0x11')](_0x4ef863['originalname'])));}})});router[_0x9cc8('0x13')]('/',upload[_0x9cc8('0x14')](_0x9cc8('0x15')),controller[_0x9cc8('0x16')]);router[_0x9cc8('0x17')]('/:id',auth[_0x9cc8('0x9')](),controller[_0x9cc8('0x18')]);router[_0x9cc8('0x19')](_0x9cc8('0x1a'),auth[_0x9cc8('0x9')](),controller[_0x9cc8('0x19')]);module[_0x9cc8('0x1b')]=router;
\ No newline at end of file
+var _0x7e9a=['path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./sound.controller','get','isAuthenticated','/:id','show','/:id/download','download','diskStorage','join','root','server/files/sounds/original/','originalname','replace','format','basename','post','file','create','put','update','delete','multer'];(function(_0x43941d,_0x45fd0d){var _0x27b82a=function(_0x21851e){while(--_0x21851e){_0x43941d['push'](_0x43941d['shift']());}};_0x27b82a(++_0x45fd0d);}(_0x7e9a,0x14f));var _0xa7e9=function(_0x45f3b8,_0x8119b0){_0x45f3b8=_0x45f3b8-0x0;var _0x2b9dd2=_0x7e9a[_0x45f3b8];return _0x2b9dd2;};'use strict';var multer=require(_0xa7e9('0x0'));var util=require('util');var path=require(_0xa7e9('0x1'));var express=require(_0xa7e9('0x2'));var router=express[_0xa7e9('0x3')]();var auth=require(_0xa7e9('0x4'));var interaction=require(_0xa7e9('0x5'));var config=require(_0xa7e9('0x6'));var controller=require(_0xa7e9('0x7'));router[_0xa7e9('0x8')]('/',auth[_0xa7e9('0x9')](),controller['index']);router['get'](_0xa7e9('0xa'),auth[_0xa7e9('0x9')](),controller[_0xa7e9('0xb')]);router[_0xa7e9('0x8')](_0xa7e9('0xc'),auth[_0xa7e9('0x9')](),controller[_0xa7e9('0xd')]);var upload=multer({'storage':multer[_0xa7e9('0xe')]({'destination':function(_0x16b6d6,_0x746087,_0x44a88c){_0x44a88c(null,path[_0xa7e9('0xf')](config[_0xa7e9('0x10')],_0xa7e9('0x11')));},'filename':function(_0x5b7a17,_0x2da43d,_0x5b53c8){_0x2da43d[_0xa7e9('0x12')]=_0x2da43d[_0xa7e9('0x12')][_0xa7e9('0x13')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x5b53c8(null,util[_0xa7e9('0x14')]('%s-%s%s',path[_0xa7e9('0x15')](_0x2da43d[_0xa7e9('0x12')],path['extname'](_0x2da43d['originalname'])),Date['now'](),path['extname'](_0x2da43d['originalname'])));}})});router[_0xa7e9('0x16')]('/',upload['single'](_0xa7e9('0x17')),controller[_0xa7e9('0x18')]);router[_0xa7e9('0x19')](_0xa7e9('0xa'),auth[_0xa7e9('0x9')](),controller[_0xa7e9('0x1a')]);router[_0xa7e9('0x1b')](_0xa7e9('0xa'),auth['isAuthenticated'](),controller[_0xa7e9('0x1b')]);module['exports']=router;
\ No newline at end of file
index 1a291f2..5b70819 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4777=['sequelize','STRING','FLOAT','BIGINT','INTEGER'];(function(_0x5c6081,_0x247a8f){var _0x10aadb=function(_0x4a99ba){while(--_0x4a99ba){_0x5c6081['push'](_0x5c6081['shift']());}};_0x10aadb(++_0x247a8f);}(_0x4777,0x1c2));var _0x7477=function(_0x148c09,_0x4fd39f){_0x148c09=_0x148c09-0x0;var _0x18e613=_0x4777[_0x148c09];return _0x18e613;};'use strict';var Sequelize=require(_0x7477('0x0'));module['exports']={'name':{'type':Sequelize[_0x7477('0x1')],'unique':'name','allowNull':![]},'save_name':{'type':Sequelize[_0x7477('0x1')]},'display_name':{'type':Sequelize['STRING'],'defaultValue':''},'description':{'type':Sequelize[_0x7477('0x1')]},'original_format':{'type':Sequelize[_0x7477('0x1')]},'original_duration':{'type':Sequelize[_0x7477('0x2')]},'original_sampleCount':{'type':Sequelize[_0x7477('0x3')]},'original_channelCount':{'type':Sequelize[_0x7477('0x4')]},'original_bitRate':{'type':Sequelize[_0x7477('0x3')]},'original_sampleRate':{'type':Sequelize['INTEGER']},'converted_format':{'type':Sequelize[_0x7477('0x1')]},'converted_duration':{'type':Sequelize[_0x7477('0x2')]},'converted_sampleCount':{'type':Sequelize[_0x7477('0x3')]},'converted_channelCount':{'type':Sequelize[_0x7477('0x4')]},'converted_bitRate':{'type':Sequelize[_0x7477('0x3')]},'converted_sampleRate':{'type':Sequelize[_0x7477('0x4')]}};
\ No newline at end of file
+var _0x180a=['exports','STRING','name','BIGINT','INTEGER','FLOAT','sequelize'];(function(_0x388c31,_0x5b7370){var _0x5e90a0=function(_0x4c4464){while(--_0x4c4464){_0x388c31['push'](_0x388c31['shift']());}};_0x5e90a0(++_0x5b7370);}(_0x180a,0x68));var _0xa180=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x180a[_0x3b380d];return _0x54502b;};'use strict';var Sequelize=require(_0xa180('0x0'));module[_0xa180('0x1')]={'name':{'type':Sequelize[_0xa180('0x2')],'unique':_0xa180('0x3'),'allowNull':![]},'save_name':{'type':Sequelize['STRING']},'display_name':{'type':Sequelize['STRING'],'defaultValue':''},'description':{'type':Sequelize[_0xa180('0x2')]},'original_format':{'type':Sequelize[_0xa180('0x2')]},'original_duration':{'type':Sequelize['FLOAT']},'original_sampleCount':{'type':Sequelize[_0xa180('0x4')]},'original_channelCount':{'type':Sequelize[_0xa180('0x5')]},'original_bitRate':{'type':Sequelize['BIGINT']},'original_sampleRate':{'type':Sequelize['INTEGER']},'converted_format':{'type':Sequelize[_0xa180('0x2')]},'converted_duration':{'type':Sequelize[_0xa180('0x6')]},'converted_sampleCount':{'type':Sequelize[_0xa180('0x4')]},'converted_channelCount':{'type':Sequelize[_0xa180('0x5')]},'converted_bitRate':{'type':Sequelize[_0xa180('0x4')]},'converted_sampleRate':{'type':Sequelize[_0xa180('0x5')]}};
\ No newline at end of file
index bc57b61..574f0af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8871=['Sound\x20upload\x20filepath:\x20%s','Sound\x20upload\x20destination:\x20%s','0777','unlinkSync','send','src','original_duration','duration','sampleCount','original_channelCount','channelCount','bitRate','sampleRate','converted_duration','converted_sampleCount','converted_channelCount','converted_bitRate','converted_sampleRate','chmodSync','start','body','description','delete','original_format','fast-json-patch','request-promise','bluebird','mustache','util','path','ejs','lodash','squel','crypto','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','apply','reject','update','destroy','error','stack','name','index','Sound','rawAttributes','model','keys','dateStart','query','dateEnd','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','pick','add','day','merge','where','then','includeAll','include','findAll','rows','catch','show','params','options','find','download','save_name','existsSync','join','root','converted_format','Sequelize','ValidationError','server/files/sounds/converted','format','create','file','originalname','basename','extname','filename','wav','server/files/sounds/original','%s.%s','info'];(function(_0x33bc64,_0x4d1e92){var _0x3fdd34=function(_0x4b40a4){while(--_0x4b40a4){_0x33bc64['push'](_0x33bc64['shift']());}};_0x3fdd34(++_0x4d1e92);}(_0x8871,0xf2));var _0x1887=function(_0x4dfa20,_0x35afb5){_0x4dfa20=_0x4dfa20-0x0;var _0x146afc=_0x8871[_0x4dfa20];return _0x146afc;};'use strict';var jsonpatch=require(_0x1887('0x0'));var rp=require(_0x1887('0x1'));var moment=require('moment');var BPromise=require(_0x1887('0x2'));var Mustache=require(_0x1887('0x3'));var util=require(_0x1887('0x4'));var path=require(_0x1887('0x5'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x1887('0x6'));var fs=require('fs');var _=require(_0x1887('0x7'));var squel=require(_0x1887('0x8'));var crypto=require(_0x1887('0x9'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x1887('0xa'));var Papa=require(_0x1887('0xb'));var qs=require(_0x1887('0xc'));var logger=require(_0x1887('0xd'))(_0x1887('0xe'));var utils=require(_0x1887('0xf'));var config=require(_0x1887('0x10'));var db=require(_0x1887('0x11'))['db'];function respondWithStatusCode(_0x15a616,_0x1777a6){_0x1777a6=_0x1777a6||0xcc;return function(_0x1182ac){if(_0x1182ac){return _0x15a616[_0x1887('0x12')](_0x1777a6);}return _0x15a616[_0x1887('0x13')](_0x1777a6)[_0x1887('0x14')]();};}function respondWithResult(_0x11dbc0,_0x1f54f8){_0x1f54f8=_0x1f54f8||0xc8;return function(_0xad7a1f){if(_0xad7a1f){return _0x11dbc0[_0x1887('0x13')](_0x1f54f8)[_0x1887('0x15')](_0xad7a1f);}};}function respondWithFilteredResult(_0x540a7f,_0x558787){return function(_0x266147){if(_0x266147){var _0x52f3d7=_0x266147[_0x1887('0x16')],_0x158237=_0x558787[_0x1887('0x17')],_0x39efa7=_0x558787[_0x1887('0x17')]+_0x558787['limit'],_0x23cc86;if(_0x39efa7>=_0x52f3d7){_0x39efa7=_0x52f3d7;_0x23cc86=0xc8;}else{_0x23cc86=0xce;}_0x540a7f['status'](_0x23cc86);return _0x540a7f[_0x1887('0x18')]('Content-Range',_0x158237+'-'+_0x39efa7+'/'+_0x52f3d7)['json'](_0x266147);}return null;};}function patchUpdates(_0x506a58){return function(_0x3808f5){try{jsonpatch[_0x1887('0x19')](_0x3808f5,_0x506a58,!![]);}catch(_0x4481a6){return BPromise[_0x1887('0x1a')](_0x4481a6);}return _0x3808f5['save']();};}function saveUpdates(_0x5d7ff1,_0xa193c6){return function(_0xadaa60){if(_0xadaa60){return _0xadaa60[_0x1887('0x1b')](_0x5d7ff1)['then'](function(_0x1e156f){return _0x1e156f;});}return null;};}function removeEntity(_0x3a1ed0,_0x20de38){return function(_0xed280d){if(_0xed280d){return _0xed280d[_0x1887('0x1c')]()['then'](function(){_0x3a1ed0['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x41c856,_0x22cf70){return function(_0xadffd){if(!_0xadffd){_0x41c856[_0x1887('0x12')](0x194);}return _0xadffd;};}function handleError(_0xcf76fb,_0x4c29d8){_0x4c29d8=_0x4c29d8||0x1f4;return function(_0x2989fb){logger[_0x1887('0x1d')](_0x2989fb[_0x1887('0x1e')]);if(_0x2989fb['name']){delete _0x2989fb[_0x1887('0x1f')];}_0xcf76fb['status'](_0x4c29d8)['send'](_0x2989fb);};}exports[_0x1887('0x20')]=function(_0x221c63,_0xcd0bf7){var _0x6feb3={},_0x441342={},_0x4266bf={'count':0x0,'rows':[]};var _0x1dc0d2=db[_0x1887('0x21')][_0x1887('0x22')];_0x441342[_0x1887('0x23')]=_[_0x1887('0x24')](_0x1dc0d2);var _0x198602={'dateStart':_0x221c63['query'][_0x1887('0x25')],'dateEnd':_0x221c63[_0x1887('0x26')][_0x1887('0x27')]};delete _0x221c63['query'][_0x1887('0x25')];delete _0x221c63['query'][_0x1887('0x27')];_0x441342[_0x1887('0x26')]=_[_0x1887('0x24')](_0x221c63[_0x1887('0x26')]);_0x441342[_0x1887('0x28')]=_[_0x1887('0x29')](_0x441342['model'],_0x441342['query']);_0x6feb3['attributes']=_['intersection'](_0x441342[_0x1887('0x23')],qs[_0x1887('0x2a')](_0x221c63[_0x1887('0x26')][_0x1887('0x2a')]));_0x6feb3[_0x1887('0x2b')]=_0x6feb3[_0x1887('0x2b')][_0x1887('0x2c')]?_0x6feb3[_0x1887('0x2b')]:_0x441342[_0x1887('0x23')];if(!_0x221c63[_0x1887('0x26')][_0x1887('0x2d')](_0x1887('0x2e'))){_0x6feb3[_0x1887('0x2f')]=qs[_0x1887('0x2f')](_0x221c63[_0x1887('0x26')][_0x1887('0x2f')]);_0x6feb3[_0x1887('0x17')]=qs['offset'](_0x221c63[_0x1887('0x26')]['offset']);}_0x6feb3[_0x1887('0x30')]=qs['sort'](_0x221c63['query'][_0x1887('0x31')]);_0x6feb3['where']=qs[_0x1887('0x28')](_[_0x1887('0x32')](_0x221c63[_0x1887('0x26')],_0x441342[_0x1887('0x28')]));if(_0x198602[_0x1887('0x25')]){if(_0x198602[_0x1887('0x27')]){_0x198602[_0x1887('0x27')]=moment(_0x198602[_0x1887('0x27')])[_0x1887('0x33')](0x1,_0x1887('0x34'));}else{_0x198602[_0x1887('0x27')]=moment(_0x198602[_0x1887('0x25')])[_0x1887('0x33')](0x1,_0x1887('0x34'));}_[_0x1887('0x35')](_0x6feb3[_0x1887('0x36')],{'createdAt':{'$gte':_0x198602[_0x1887('0x25')],'$lte':_0x198602['dateEnd']}});}if(_0x221c63['query']['filter']){_0x6feb3[_0x1887('0x36')]=_['merge'](_0x6feb3['where'],{'$or':_['map'](_0x6feb3[_0x1887('0x2b')],function(_0x2252c6){var _0x5b37e4={};_0x5b37e4[_0x2252c6]={'$like':'%'+_0x221c63[_0x1887('0x26')]['filter']+'%'};return _0x5b37e4;})});}_0x6feb3=_[_0x1887('0x35')]({},_0x6feb3,_0x221c63['options']);var _0x4563c1={'where':_0x6feb3[_0x1887('0x36')]};return db['Sound']['count'](_0x4563c1)[_0x1887('0x37')](function(_0x35eb21){_0x4266bf[_0x1887('0x16')]=_0x35eb21;if(_0x221c63[_0x1887('0x26')][_0x1887('0x38')]){_0x6feb3[_0x1887('0x39')]=[{'all':!![]}];}return db[_0x1887('0x21')][_0x1887('0x3a')](_0x6feb3);})[_0x1887('0x37')](function(_0x3e4dfa){_0x4266bf[_0x1887('0x3b')]=_0x3e4dfa;return _0x4266bf;})['then'](respondWithFilteredResult(_0xcd0bf7,_0x6feb3))[_0x1887('0x3c')](handleError(_0xcd0bf7,null));};exports[_0x1887('0x3d')]=function(_0x37ea33,_0x1bdede){var _0x2d3d6c={'raw':!![],'where':{'id':_0x37ea33[_0x1887('0x3e')]['id']}},_0x1d13b6={};_0x1d13b6[_0x1887('0x23')]=_[_0x1887('0x24')](db[_0x1887('0x21')][_0x1887('0x22')]);_0x1d13b6['query']=_['keys'](_0x37ea33[_0x1887('0x26')]);_0x1d13b6[_0x1887('0x28')]=_[_0x1887('0x29')](_0x1d13b6[_0x1887('0x23')],_0x1d13b6[_0x1887('0x26')]);_0x2d3d6c[_0x1887('0x2b')]=_[_0x1887('0x29')](_0x1d13b6[_0x1887('0x23')],qs[_0x1887('0x2a')](_0x37ea33[_0x1887('0x26')][_0x1887('0x2a')]));_0x2d3d6c[_0x1887('0x2b')]=_0x2d3d6c[_0x1887('0x2b')][_0x1887('0x2c')]?_0x2d3d6c[_0x1887('0x2b')]:_0x1d13b6[_0x1887('0x23')];if(_0x37ea33[_0x1887('0x26')][_0x1887('0x38')]){_0x2d3d6c[_0x1887('0x39')]=[{'all':!![]}];}_0x2d3d6c=_[_0x1887('0x35')]({},_0x2d3d6c,_0x37ea33[_0x1887('0x3f')]);return db[_0x1887('0x21')][_0x1887('0x40')](_0x2d3d6c)[_0x1887('0x37')](handleEntityNotFound(_0x1bdede,null))[_0x1887('0x37')](respondWithResult(_0x1bdede,null))[_0x1887('0x3c')](handleError(_0x1bdede,null));};exports[_0x1887('0x41')]=function(_0x551a45,_0x4764f9,_0x4d5f71){return db['Sound'][_0x1887('0x40')]({'where':{'id':_0x551a45[_0x1887('0x3e')]['id']},'attributes':['name',_0x1887('0x42'),'converted_format'],'raw':!![]})[_0x1887('0x37')](handleEntityNotFound(_0x4764f9,null))[_0x1887('0x37')](function(_0x350f52){if(_0x350f52){if(!fs[_0x1887('0x43')](path[_0x1887('0x44')](config[_0x1887('0x45')],'server/files/sounds/converted',_0x350f52[_0x1887('0x42')]+'.'+_0x350f52[_0x1887('0x46')]))){throw new db[(_0x1887('0x47'))][(_0x1887('0x48'))]('Sound\x20not\x20found');}return _0x4764f9[_0x1887('0x41')](path['join'](config[_0x1887('0x45')],_0x1887('0x49'),util[_0x1887('0x4a')]('%s.%s',_0x350f52[_0x1887('0x42')],_0x350f52[_0x1887('0x46')])),util[_0x1887('0x4a')]('%s.%s',_0x350f52[_0x1887('0x1f')],_0x350f52[_0x1887('0x46')]));}return null;})[_0x1887('0x3c')](handleError(_0x4764f9,null));};exports[_0x1887('0x4b')]=function(_0x4b5b67,_0x4d6213,_0x146767){var _0x599100={'name':path['basename'](_0x4b5b67[_0x1887('0x4c')][_0x1887('0x4d')],path['extname'](_0x4b5b67[_0x1887('0x4c')][_0x1887('0x4d')])),'save_name':path[_0x1887('0x4e')](_0x4b5b67[_0x1887('0x4c')]['filename'],path[_0x1887('0x4f')](_0x4b5b67[_0x1887('0x4c')][_0x1887('0x50')])),'original_format':path[_0x1887('0x4f')](_0x4b5b67['file'][_0x1887('0x4d')])['substring'](0x1),'converted_format':_0x1887('0x51')};var _0x596857=path['join'](config[_0x1887('0x45')],_0x1887('0x52'),_0x4b5b67['file'][_0x1887('0x50')]);var _0x474bbf=path[_0x1887('0x44')](config[_0x1887('0x45')],_0x1887('0x49'),util['format'](_0x1887('0x53'),path[_0x1887('0x4e')](_0x4b5b67[_0x1887('0x4c')][_0x1887('0x50')],path[_0x1887('0x4f')](_0x4b5b67['file'][_0x1887('0x50')])),_0x599100['converted_format']));logger[_0x1887('0x54')](_0x1887('0x55'),_0x596857);logger[_0x1887('0x54')](_0x1887('0x56'),_0x474bbf);try{fs['chmodSync'](_0x596857,parseInt(_0x1887('0x57'),0x8));var _0x4cacee=sox['transcode'](_0x596857,_0x474bbf,{'sampleRate':0x1f40,'format':'wav','channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x4cacee['on'](_0x1887('0x1d'),function(_0x23ddcb){fs[_0x1887('0x58')](_0x596857);_0x4d6213[_0x1887('0x13')](0x1f4)[_0x1887('0x59')](_0x23ddcb);});_0x4cacee['on'](_0x1887('0x5a'),function(_0x4a9d38){_0x599100[_0x1887('0x5b')]=isNaN(_0x4a9d38['duration'])?null:_0x4a9d38[_0x1887('0x5c')]*0x3e8;_0x599100['original_sampleCount']=isNaN(_0x4a9d38[_0x1887('0x5d')])?null:_0x4a9d38['sampleCount'];_0x599100[_0x1887('0x5e')]=isNaN(_0x4a9d38[_0x1887('0x5f')])?null:_0x4a9d38['channelCount'];_0x599100['original_bitRate']=isNaN(_0x4a9d38[_0x1887('0x60')])?null:_0x4a9d38['bitRate'];_0x599100['original_sampleRate']=isNaN(_0x4a9d38[_0x1887('0x61')])?null:_0x4a9d38[_0x1887('0x61')];});_0x4cacee['on']('dest',function(_0x575df0){_0x599100[_0x1887('0x62')]=isNaN(_0x575df0[_0x1887('0x5c')])?null:_0x575df0[_0x1887('0x5c')]*0x3e8;_0x599100[_0x1887('0x63')]=isNaN(_0x575df0['sampleCount'])?null:_0x575df0[_0x1887('0x5d')];_0x599100[_0x1887('0x64')]=isNaN(_0x575df0['channelCount'])?null:_0x575df0[_0x1887('0x5f')];_0x599100[_0x1887('0x65')]=isNaN(_0x575df0[_0x1887('0x60')])?null:_0x575df0[_0x1887('0x60')];_0x599100[_0x1887('0x66')]=isNaN(_0x575df0[_0x1887('0x61')])?null:_0x575df0[_0x1887('0x61')];});_0x4cacee['on'](_0x1887('0x14'),function(){fs[_0x1887('0x67')](_0x474bbf,parseInt(_0x1887('0x57'),0x8));return db[_0x1887('0x21')][_0x1887('0x4b')](_0x599100)[_0x1887('0x37')](respondWithResult(_0x4d6213,null))['catch'](handleError(_0x4d6213,null));});_0x4cacee[_0x1887('0x68')]();}catch(_0x1b4aa4){_0x4d6213['status'](0x1f4)[_0x1887('0x59')](_0x1b4aa4);}};exports[_0x1887('0x1b')]=function(_0x7758f2,_0x2f0062,_0x39bab8){return db[_0x1887('0x21')]['find']({'where':{'id':_0x7758f2['params']['id']}})[_0x1887('0x37')](handleEntityNotFound(_0x2f0062,null))[_0x1887('0x37')](saveUpdates(_[_0x1887('0x32')](_0x7758f2[_0x1887('0x69')],['name',_0x1887('0x6a')]),null))[_0x1887('0x37')](respondWithResult(_0x2f0062,null))[_0x1887('0x3c')](handleError(_0x2f0062,null));};exports[_0x1887('0x6b')]=function(_0x56bb4d,_0x59d912,_0x34974e){return db[_0x1887('0x21')][_0x1887('0x40')]({'where':{'id':_0x56bb4d[_0x1887('0x3e')]['id']}})[_0x1887('0x37')](function(_0x21b1b1){if(_0x21b1b1){return _0x21b1b1[_0x1887('0x1c')]();}})['then'](function(_0xcdc4c1){var _0x53410a=path['join'](config['root'],_0x1887('0x52'),util[_0x1887('0x4a')]('%s.%s',_0xcdc4c1['save_name'],_0xcdc4c1[_0x1887('0x6c')]));var _0x43ba0a=path[_0x1887('0x44')](config[_0x1887('0x45')],'server/files/sounds/converted',util[_0x1887('0x4a')]('%s.%s',_0xcdc4c1[_0x1887('0x42')],_0xcdc4c1[_0x1887('0x46')]));fs[_0x1887('0x58')](_0x53410a);fs[_0x1887('0x58')](_0x43ba0a);return _0xcdc4c1;})[_0x1887('0x37')](function(_0x39b962){if(_0x39b962){return _0x59d912['status'](0xcc)[_0x1887('0x14')]();}})[_0x1887('0x37')](handleEntityNotFound(_0x59d912,null))[_0x1887('0x3c')](handleError(_0x59d912,null));};
\ No newline at end of file
+var _0xea84=['server/files/sounds/original','info','Sound\x20upload\x20filepath:\x20%s','Sound\x20upload\x20destination:\x20%s','chmodSync','0777','transcode','unlinkSync','send','original_duration','duration','original_sampleCount','sampleCount','original_channelCount','channelCount','original_bitRate','bitRate','original_sampleRate','sampleRate','dest','converted_duration','converted_sampleCount','converted_channelCount','converted_bitRate','converted_sampleRate','start','body','description','delete','original_format','fast-json-patch','request-promise','moment','mustache','util','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','../../components/parsers/qs','api','../../config/utils','status','end','count','offset','set','json','apply','reject','save','update','then','destroy','sendStatus','error','stack','name','index','Sound','rawAttributes','model','keys','query','dateStart','filters','intersection','attributes','fields','length','nolimit','limit','order','sort','where','pick','dateEnd','add','day','merge','map','filter','includeAll','include','findAll','catch','show','params','find','download','converted_format','existsSync','root','server/files/sounds/converted','Sequelize','ValidationError','Sound\x20not\x20found','join','format','%s.%s','save_name','basename','file','originalname','extname','filename','substring','wav'];(function(_0x1e0b1e,_0x2ec015){var _0x2886e4=function(_0x53dec1){while(--_0x53dec1){_0x1e0b1e['push'](_0x1e0b1e['shift']());}};_0x2886e4(++_0x2ec015);}(_0xea84,0xfe));var _0x4ea8=function(_0x114870,_0x7529be){_0x114870=_0x114870-0x0;var _0x198666=_0xea84[_0x114870];return _0x198666;};'use strict';var jsonpatch=require(_0x4ea8('0x0'));var rp=require(_0x4ea8('0x1'));var moment=require(_0x4ea8('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x4ea8('0x3'));var util=require(_0x4ea8('0x4'));var path=require('path');var sox=require(_0x4ea8('0x5'));var csv=require('to-csv');var ejs=require(_0x4ea8('0x6'));var fs=require('fs');var _=require(_0x4ea8('0x7'));var squel=require('squel');var crypto=require(_0x4ea8('0x8'));var jsforce=require(_0x4ea8('0x9'));var deskjs=require(_0x4ea8('0xa'));var toCsv=require(_0x4ea8('0xb'));var querystring=require(_0x4ea8('0xc'));var Papa=require('papaparse');var qs=require(_0x4ea8('0xd'));var logger=require('../../config/logger')(_0x4ea8('0xe'));var utils=require(_0x4ea8('0xf'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x25f12d,_0x1daa9b){_0x1daa9b=_0x1daa9b||0xcc;return function(_0xc763c2){if(_0xc763c2){return _0x25f12d['sendStatus'](_0x1daa9b);}return _0x25f12d[_0x4ea8('0x10')](_0x1daa9b)[_0x4ea8('0x11')]();};}function respondWithResult(_0xfea898,_0x1e972c){_0x1e972c=_0x1e972c||0xc8;return function(_0x21c5a1){if(_0x21c5a1){return _0xfea898[_0x4ea8('0x10')](_0x1e972c)['json'](_0x21c5a1);}};}function respondWithFilteredResult(_0x263967,_0x31c773){return function(_0x5efa21){if(_0x5efa21){var _0x14979c=_0x5efa21[_0x4ea8('0x12')],_0x3e319a=_0x31c773[_0x4ea8('0x13')],_0x38aa58=_0x31c773['offset']+_0x31c773['limit'],_0x3ce9f3;if(_0x38aa58>=_0x14979c){_0x38aa58=_0x14979c;_0x3ce9f3=0xc8;}else{_0x3ce9f3=0xce;}_0x263967[_0x4ea8('0x10')](_0x3ce9f3);return _0x263967[_0x4ea8('0x14')]('Content-Range',_0x3e319a+'-'+_0x38aa58+'/'+_0x14979c)[_0x4ea8('0x15')](_0x5efa21);}return null;};}function patchUpdates(_0xf2b2f4){return function(_0x3111de){try{jsonpatch[_0x4ea8('0x16')](_0x3111de,_0xf2b2f4,!![]);}catch(_0x294d20){return BPromise[_0x4ea8('0x17')](_0x294d20);}return _0x3111de[_0x4ea8('0x18')]();};}function saveUpdates(_0x5a1c75,_0x7422a4){return function(_0x389b9f){if(_0x389b9f){return _0x389b9f[_0x4ea8('0x19')](_0x5a1c75)[_0x4ea8('0x1a')](function(_0x244e35){return _0x244e35;});}return null;};}function removeEntity(_0xe46a83,_0x3b582b){return function(_0x23ea43){if(_0x23ea43){return _0x23ea43[_0x4ea8('0x1b')]()[_0x4ea8('0x1a')](function(){_0xe46a83[_0x4ea8('0x10')](0xcc)[_0x4ea8('0x11')]();});}};}function handleEntityNotFound(_0x2cb73b,_0x303660){return function(_0x4d831c){if(!_0x4d831c){_0x2cb73b[_0x4ea8('0x1c')](0x194);}return _0x4d831c;};}function handleError(_0x5cd147,_0x40afe3){_0x40afe3=_0x40afe3||0x1f4;return function(_0x204fe1){logger[_0x4ea8('0x1d')](_0x204fe1[_0x4ea8('0x1e')]);if(_0x204fe1['name']){delete _0x204fe1[_0x4ea8('0x1f')];}_0x5cd147['status'](_0x40afe3)['send'](_0x204fe1);};}exports[_0x4ea8('0x20')]=function(_0x55a286,_0x228d98){var _0x16fc81={},_0x5f15c9={},_0x3bfa29={'count':0x0,'rows':[]};var _0x33638c=db[_0x4ea8('0x21')][_0x4ea8('0x22')];_0x5f15c9[_0x4ea8('0x23')]=_[_0x4ea8('0x24')](_0x33638c);var _0x3ab360={'dateStart':_0x55a286[_0x4ea8('0x25')][_0x4ea8('0x26')],'dateEnd':_0x55a286[_0x4ea8('0x25')]['dateEnd']};delete _0x55a286[_0x4ea8('0x25')][_0x4ea8('0x26')];delete _0x55a286['query']['dateEnd'];_0x5f15c9[_0x4ea8('0x25')]=_[_0x4ea8('0x24')](_0x55a286[_0x4ea8('0x25')]);_0x5f15c9[_0x4ea8('0x27')]=_[_0x4ea8('0x28')](_0x5f15c9[_0x4ea8('0x23')],_0x5f15c9[_0x4ea8('0x25')]);_0x16fc81[_0x4ea8('0x29')]=_['intersection'](_0x5f15c9['model'],qs[_0x4ea8('0x2a')](_0x55a286[_0x4ea8('0x25')][_0x4ea8('0x2a')]));_0x16fc81[_0x4ea8('0x29')]=_0x16fc81['attributes'][_0x4ea8('0x2b')]?_0x16fc81[_0x4ea8('0x29')]:_0x5f15c9[_0x4ea8('0x23')];if(!_0x55a286[_0x4ea8('0x25')]['hasOwnProperty'](_0x4ea8('0x2c'))){_0x16fc81['limit']=qs[_0x4ea8('0x2d')](_0x55a286[_0x4ea8('0x25')][_0x4ea8('0x2d')]);_0x16fc81[_0x4ea8('0x13')]=qs[_0x4ea8('0x13')](_0x55a286[_0x4ea8('0x25')][_0x4ea8('0x13')]);}_0x16fc81[_0x4ea8('0x2e')]=qs[_0x4ea8('0x2f')](_0x55a286[_0x4ea8('0x25')][_0x4ea8('0x2f')]);_0x16fc81[_0x4ea8('0x30')]=qs[_0x4ea8('0x27')](_[_0x4ea8('0x31')](_0x55a286['query'],_0x5f15c9[_0x4ea8('0x27')]));if(_0x3ab360[_0x4ea8('0x26')]){if(_0x3ab360[_0x4ea8('0x32')]){_0x3ab360[_0x4ea8('0x32')]=moment(_0x3ab360[_0x4ea8('0x32')])[_0x4ea8('0x33')](0x1,_0x4ea8('0x34'));}else{_0x3ab360[_0x4ea8('0x32')]=moment(_0x3ab360[_0x4ea8('0x26')])[_0x4ea8('0x33')](0x1,'day');}_['merge'](_0x16fc81[_0x4ea8('0x30')],{'createdAt':{'$gte':_0x3ab360[_0x4ea8('0x26')],'$lte':_0x3ab360[_0x4ea8('0x32')]}});}if(_0x55a286['query']['filter']){_0x16fc81['where']=_[_0x4ea8('0x35')](_0x16fc81[_0x4ea8('0x30')],{'$or':_[_0x4ea8('0x36')](_0x16fc81[_0x4ea8('0x29')],function(_0x1902b){var _0xa217ca={};_0xa217ca[_0x1902b]={'$like':'%'+_0x55a286['query'][_0x4ea8('0x37')]+'%'};return _0xa217ca;})});}_0x16fc81=_[_0x4ea8('0x35')]({},_0x16fc81,_0x55a286['options']);var _0x17b6ad={'where':_0x16fc81[_0x4ea8('0x30')]};return db[_0x4ea8('0x21')]['count'](_0x17b6ad)['then'](function(_0x423a29){_0x3bfa29[_0x4ea8('0x12')]=_0x423a29;if(_0x55a286['query'][_0x4ea8('0x38')]){_0x16fc81[_0x4ea8('0x39')]=[{'all':!![]}];}return db[_0x4ea8('0x21')][_0x4ea8('0x3a')](_0x16fc81);})[_0x4ea8('0x1a')](function(_0x352dc8){_0x3bfa29['rows']=_0x352dc8;return _0x3bfa29;})[_0x4ea8('0x1a')](respondWithFilteredResult(_0x228d98,_0x16fc81))[_0x4ea8('0x3b')](handleError(_0x228d98,null));};exports[_0x4ea8('0x3c')]=function(_0x28ec08,_0x2226fc){var _0x20b64b={'raw':!![],'where':{'id':_0x28ec08[_0x4ea8('0x3d')]['id']}},_0x17a566={};_0x17a566['model']=_[_0x4ea8('0x24')](db[_0x4ea8('0x21')]['rawAttributes']);_0x17a566['query']=_[_0x4ea8('0x24')](_0x28ec08[_0x4ea8('0x25')]);_0x17a566[_0x4ea8('0x27')]=_['intersection'](_0x17a566['model'],_0x17a566[_0x4ea8('0x25')]);_0x20b64b[_0x4ea8('0x29')]=_['intersection'](_0x17a566['model'],qs[_0x4ea8('0x2a')](_0x28ec08[_0x4ea8('0x25')][_0x4ea8('0x2a')]));_0x20b64b['attributes']=_0x20b64b['attributes'][_0x4ea8('0x2b')]?_0x20b64b[_0x4ea8('0x29')]:_0x17a566[_0x4ea8('0x23')];if(_0x28ec08[_0x4ea8('0x25')][_0x4ea8('0x38')]){_0x20b64b[_0x4ea8('0x39')]=[{'all':!![]}];}_0x20b64b=_['merge']({},_0x20b64b,_0x28ec08['options']);return db[_0x4ea8('0x21')][_0x4ea8('0x3e')](_0x20b64b)[_0x4ea8('0x1a')](handleEntityNotFound(_0x2226fc,null))['then'](respondWithResult(_0x2226fc,null))[_0x4ea8('0x3b')](handleError(_0x2226fc,null));};exports[_0x4ea8('0x3f')]=function(_0x54f705,_0x57576a,_0x349872){return db['Sound']['find']({'where':{'id':_0x54f705[_0x4ea8('0x3d')]['id']},'attributes':[_0x4ea8('0x1f'),'save_name',_0x4ea8('0x40')],'raw':!![]})['then'](handleEntityNotFound(_0x57576a,null))[_0x4ea8('0x1a')](function(_0x1cce40){if(_0x1cce40){if(!fs[_0x4ea8('0x41')](path['join'](config[_0x4ea8('0x42')],_0x4ea8('0x43'),_0x1cce40['save_name']+'.'+_0x1cce40[_0x4ea8('0x40')]))){throw new db[(_0x4ea8('0x44'))][(_0x4ea8('0x45'))](_0x4ea8('0x46'));}return _0x57576a[_0x4ea8('0x3f')](path[_0x4ea8('0x47')](config[_0x4ea8('0x42')],_0x4ea8('0x43'),util[_0x4ea8('0x48')](_0x4ea8('0x49'),_0x1cce40[_0x4ea8('0x4a')],_0x1cce40['converted_format'])),util[_0x4ea8('0x48')](_0x4ea8('0x49'),_0x1cce40['name'],_0x1cce40['converted_format']));}return null;})[_0x4ea8('0x3b')](handleError(_0x57576a,null));};exports['create']=function(_0x8be6f6,_0x483aaf,_0x373613){var _0x37df08={'name':path[_0x4ea8('0x4b')](_0x8be6f6[_0x4ea8('0x4c')][_0x4ea8('0x4d')],path[_0x4ea8('0x4e')](_0x8be6f6['file'][_0x4ea8('0x4d')])),'save_name':path['basename'](_0x8be6f6[_0x4ea8('0x4c')][_0x4ea8('0x4f')],path[_0x4ea8('0x4e')](_0x8be6f6[_0x4ea8('0x4c')]['filename'])),'original_format':path[_0x4ea8('0x4e')](_0x8be6f6[_0x4ea8('0x4c')][_0x4ea8('0x4d')])[_0x4ea8('0x50')](0x1),'converted_format':_0x4ea8('0x51')};var _0x1f607d=path[_0x4ea8('0x47')](config[_0x4ea8('0x42')],_0x4ea8('0x52'),_0x8be6f6[_0x4ea8('0x4c')][_0x4ea8('0x4f')]);var _0x36f2ae=path[_0x4ea8('0x47')](config['root'],_0x4ea8('0x43'),util[_0x4ea8('0x48')](_0x4ea8('0x49'),path[_0x4ea8('0x4b')](_0x8be6f6['file'][_0x4ea8('0x4f')],path[_0x4ea8('0x4e')](_0x8be6f6[_0x4ea8('0x4c')][_0x4ea8('0x4f')])),_0x37df08[_0x4ea8('0x40')]));logger[_0x4ea8('0x53')](_0x4ea8('0x54'),_0x1f607d);logger[_0x4ea8('0x53')](_0x4ea8('0x55'),_0x36f2ae);try{fs[_0x4ea8('0x56')](_0x1f607d,parseInt(_0x4ea8('0x57'),0x8));var _0x42ac0f=sox[_0x4ea8('0x58')](_0x1f607d,_0x36f2ae,{'sampleRate':0x1f40,'format':_0x4ea8('0x51'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x42ac0f['on'](_0x4ea8('0x1d'),function(_0x318684){fs[_0x4ea8('0x59')](_0x1f607d);_0x483aaf[_0x4ea8('0x10')](0x1f4)[_0x4ea8('0x5a')](_0x318684);});_0x42ac0f['on']('src',function(_0x4f4602){_0x37df08[_0x4ea8('0x5b')]=isNaN(_0x4f4602['duration'])?null:_0x4f4602[_0x4ea8('0x5c')]*0x3e8;_0x37df08[_0x4ea8('0x5d')]=isNaN(_0x4f4602[_0x4ea8('0x5e')])?null:_0x4f4602[_0x4ea8('0x5e')];_0x37df08[_0x4ea8('0x5f')]=isNaN(_0x4f4602[_0x4ea8('0x60')])?null:_0x4f4602[_0x4ea8('0x60')];_0x37df08[_0x4ea8('0x61')]=isNaN(_0x4f4602['bitRate'])?null:_0x4f4602[_0x4ea8('0x62')];_0x37df08[_0x4ea8('0x63')]=isNaN(_0x4f4602[_0x4ea8('0x64')])?null:_0x4f4602['sampleRate'];});_0x42ac0f['on'](_0x4ea8('0x65'),function(_0x35fe9c){_0x37df08[_0x4ea8('0x66')]=isNaN(_0x35fe9c[_0x4ea8('0x5c')])?null:_0x35fe9c[_0x4ea8('0x5c')]*0x3e8;_0x37df08[_0x4ea8('0x67')]=isNaN(_0x35fe9c[_0x4ea8('0x5e')])?null:_0x35fe9c[_0x4ea8('0x5e')];_0x37df08[_0x4ea8('0x68')]=isNaN(_0x35fe9c[_0x4ea8('0x60')])?null:_0x35fe9c[_0x4ea8('0x60')];_0x37df08[_0x4ea8('0x69')]=isNaN(_0x35fe9c[_0x4ea8('0x62')])?null:_0x35fe9c[_0x4ea8('0x62')];_0x37df08[_0x4ea8('0x6a')]=isNaN(_0x35fe9c[_0x4ea8('0x64')])?null:_0x35fe9c[_0x4ea8('0x64')];});_0x42ac0f['on'](_0x4ea8('0x11'),function(){fs[_0x4ea8('0x56')](_0x36f2ae,parseInt(_0x4ea8('0x57'),0x8));return db['Sound']['create'](_0x37df08)[_0x4ea8('0x1a')](respondWithResult(_0x483aaf,null))[_0x4ea8('0x3b')](handleError(_0x483aaf,null));});_0x42ac0f[_0x4ea8('0x6b')]();}catch(_0xac907d){_0x483aaf['status'](0x1f4)[_0x4ea8('0x5a')](_0xac907d);}};exports[_0x4ea8('0x19')]=function(_0x100245,_0x268f0f,_0x23d900){return db[_0x4ea8('0x21')][_0x4ea8('0x3e')]({'where':{'id':_0x100245[_0x4ea8('0x3d')]['id']}})[_0x4ea8('0x1a')](handleEntityNotFound(_0x268f0f,null))[_0x4ea8('0x1a')](saveUpdates(_[_0x4ea8('0x31')](_0x100245[_0x4ea8('0x6c')],[_0x4ea8('0x1f'),_0x4ea8('0x6d')]),null))['then'](respondWithResult(_0x268f0f,null))[_0x4ea8('0x3b')](handleError(_0x268f0f,null));};exports[_0x4ea8('0x6e')]=function(_0x4a26b3,_0x4c798f,_0x20b3f9){return db[_0x4ea8('0x21')]['find']({'where':{'id':_0x4a26b3['params']['id']}})['then'](function(_0x3cbba7){if(_0x3cbba7){return _0x3cbba7[_0x4ea8('0x1b')]();}})[_0x4ea8('0x1a')](function(_0x17e3b2){var _0x4c887d=path[_0x4ea8('0x47')](config[_0x4ea8('0x42')],'server/files/sounds/original',util[_0x4ea8('0x48')]('%s.%s',_0x17e3b2[_0x4ea8('0x4a')],_0x17e3b2[_0x4ea8('0x6f')]));var _0x46fa28=path[_0x4ea8('0x47')](config[_0x4ea8('0x42')],_0x4ea8('0x43'),util[_0x4ea8('0x48')](_0x4ea8('0x49'),_0x17e3b2[_0x4ea8('0x4a')],_0x17e3b2[_0x4ea8('0x40')]));fs[_0x4ea8('0x59')](_0x4c887d);fs[_0x4ea8('0x59')](_0x46fa28);return _0x17e3b2;})[_0x4ea8('0x1a')](function(_0x1028c3){if(_0x1028c3){return _0x4c798f['status'](0xcc)[_0x4ea8('0x11')]();}})[_0x4ea8('0x1a')](handleEntityNotFound(_0x4c798f,null))[_0x4ea8('0x3b')](handleError(_0x4c798f,null));};
\ No newline at end of file
index 8dcb825..ed6446e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xba97=['api','moment','bluebird','request-promise','define','tools_sounds','util','../../config/logger'];(function(_0x171de5,_0x260fd1){var _0x1c2d68=function(_0x111adc){while(--_0x111adc){_0x171de5['push'](_0x171de5['shift']());}};_0x1c2d68(++_0x260fd1);}(_0xba97,0xee));var _0x7ba9=function(_0x391ac9,_0xeea561){_0x391ac9=_0x391ac9-0x0;var _0x1e1b70=_0xba97[_0x391ac9];return _0x1e1b70;};'use strict';var _=require('lodash');var util=require(_0x7ba9('0x0'));var logger=require(_0x7ba9('0x1'))(_0x7ba9('0x2'));var moment=require(_0x7ba9('0x3'));var BPromise=require(_0x7ba9('0x4'));var rp=require(_0x7ba9('0x5'));var attributes=require('./sound.attributes');module['exports']=function(_0x3a0dbf,_0x568834){return _0x3a0dbf[_0x7ba9('0x6')]('Sound',attributes,{'tableName':_0x7ba9('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0147=['request-promise','./sound.attributes','exports','Sound','lodash','util','../../config/logger','api'];(function(_0x36ee93,_0x502135){var _0x2a936c=function(_0xb6659c){while(--_0xb6659c){_0x36ee93['push'](_0x36ee93['shift']());}};_0x2a936c(++_0x502135);}(_0x0147,0x184));var _0x7014=function(_0x248bcb,_0x2feb81){_0x248bcb=_0x248bcb-0x0;var _0x4287b9=_0x0147[_0x248bcb];return _0x4287b9;};'use strict';var _=require(_0x7014('0x0'));var util=require(_0x7014('0x1'));var logger=require(_0x7014('0x2'))(_0x7014('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x7014('0x4'));var attributes=require(_0x7014('0x5'));module[_0x7014('0x6')]=function(_0x2e7fa7,_0x80be07){return _0x2e7fa7['define'](_0x7014('0x7'),attributes,{'tableName':'tools_sounds','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 877a4f8..0994c10 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbc5e=['map','model','ShowSound','lodash','util','moment','bluebird','../../config/utils','../../config/logger','rpc','client','http','request','then','Sound,\x20%s,\x20%s','debug','Sound,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','Sound','find','options','raw','where','attributes','include'];(function(_0x38958f,_0x3ee5e6){var _0x468336=function(_0x285913){while(--_0x285913){_0x38958f['push'](_0x38958f['shift']());}};_0x468336(++_0x3ee5e6);}(_0xbc5e,0x183));var _0xebc5=function(_0x2f8140,_0x3f7ae3){_0x2f8140=_0x2f8140-0x0;var _0x23dd61=_0xbc5e[_0x2f8140];return _0x23dd61;};'use strict';var _=require(_0xebc5('0x0'));var util=require(_0xebc5('0x1'));var moment=require(_0xebc5('0x2'));var BPromise=require(_0xebc5('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xebc5('0x4'));var logger=require(_0xebc5('0x5'))(_0xebc5('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xebc5('0x7')][_0xebc5('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x45c5fb,_0x1a2e1e,_0x2939b5){return new BPromise(function(_0x17c83d,_0x5f176c){return client[_0xebc5('0x9')](_0x45c5fb,_0x2939b5)[_0xebc5('0xa')](function(_0x58281b){logger['info'](_0xebc5('0xb'),_0x1a2e1e,'request\x20sent');logger[_0xebc5('0xc')](_0xebc5('0xd'),_0x1a2e1e,_0xebc5('0xe'),JSON[_0xebc5('0xf')](_0x58281b));if(_0x58281b[_0xebc5('0x10')]){if(_0x58281b['error'][_0xebc5('0x11')]===0x1f4){logger[_0xebc5('0x10')](_0xebc5('0xb'),_0x1a2e1e,_0x58281b['error'][_0xebc5('0x12')]);return _0x5f176c(_0x58281b['error'][_0xebc5('0x12')]);}logger['error'](_0xebc5('0xb'),_0x1a2e1e,_0x58281b[_0xebc5('0x10')][_0xebc5('0x12')]);return _0x17c83d(_0x58281b['error'][_0xebc5('0x12')]);}else{logger[_0xebc5('0x13')]('Sound,\x20%s,\x20%s',_0x1a2e1e,'request\x20sent');_0x17c83d(_0x58281b[_0xebc5('0x14')][_0xebc5('0x12')]);}})[_0xebc5('0x15')](function(_0x4595a7){logger[_0xebc5('0x10')](_0xebc5('0xb'),_0x1a2e1e,_0x4595a7);_0x5f176c(_0x4595a7);});});}exports['ShowSound']=function(_0x1eae16){var _0x5295d7=this;return new Promise(function(_0x16222b,_0x4bab90){return db[_0xebc5('0x16')][_0xebc5('0x17')]({'raw':_0x1eae16['options']?_0x1eae16[_0xebc5('0x18')][_0xebc5('0x19')]===undefined?!![]:![]:!![],'where':_0x1eae16[_0xebc5('0x18')]?_0x1eae16[_0xebc5('0x18')][_0xebc5('0x1a')]||null:null,'attributes':_0x1eae16['options']?_0x1eae16[_0xebc5('0x18')][_0xebc5('0x1b')]||null:null,'include':_0x1eae16[_0xebc5('0x18')]?_0x1eae16[_0xebc5('0x18')][_0xebc5('0x1c')]?_[_0xebc5('0x1d')](_0x1eae16['options'][_0xebc5('0x1c')],function(_0x1c9947){return{'model':db[_0x1c9947[_0xebc5('0x1e')]],'as':_0x1c9947['as'],'attributes':_0x1c9947[_0xebc5('0x1b')],'include':_0x1c9947[_0xebc5('0x1c')]?_[_0xebc5('0x1d')](_0x1c9947[_0xebc5('0x1c')],function(_0x4fd22b){return{'model':db[_0x4fd22b['model']],'as':_0x4fd22b['as'],'attributes':_0x4fd22b[_0xebc5('0x1b')],'include':_0x4fd22b[_0xebc5('0x1c')]?_[_0xebc5('0x1d')](_0x4fd22b['include'],function(_0x5b823c){return{'model':db[_0x5b823c['model']],'as':_0x5b823c['as'],'attributes':_0x5b823c[_0xebc5('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xebc5('0xa')](function(_0x345f0e){logger['info'](_0xebc5('0x1f'),_0x1eae16);logger[_0xebc5('0xc')](_0xebc5('0x1f'),_0x1eae16,JSON[_0xebc5('0xf')](_0x345f0e));_0x16222b(_0x345f0e);})[_0xebc5('0x15')](function(_0x2b9979){logger[_0xebc5('0x10')](_0xebc5('0x1f'),_0x2b9979['message'],_0x1eae16);_0x4bab90(_0x5295d7['error'](0x1f4,_0x2b9979[_0xebc5('0x12')]));});});};
\ No newline at end of file
+var _0x7832=['attributes','include','map','model','lodash','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','request\x20sent','debug','Sound,\x20%s,\x20%s,\x20%s','stringify','error','code','message','Sound,\x20%s,\x20%s','catch','ShowSound','Sound','find','options','raw'];(function(_0x25248b,_0x3c8491){var _0x509939=function(_0x457a27){while(--_0x457a27){_0x25248b['push'](_0x25248b['shift']());}};_0x509939(++_0x3c8491);}(_0x7832,0x80));var _0x2783=function(_0x10dd0b,_0x5ab22b){_0x10dd0b=_0x10dd0b-0x0;var _0x22c83c=_0x7832[_0x10dd0b];return _0x22c83c;};'use strict';var _=require(_0x2783('0x0'));var util=require('util');var moment=require(_0x2783('0x1'));var BPromise=require('bluebird');var rs=require(_0x2783('0x2'));var fs=require('fs');var db=require(_0x2783('0x3'))['db'];var utils=require(_0x2783('0x4'));var logger=require(_0x2783('0x5'))(_0x2783('0x6'));var config=require('../../config/environment');var jayson=require(_0x2783('0x7'));var client=jayson[_0x2783('0x8')][_0x2783('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x390f08,_0x1cb1c4,_0x469aa7){return new BPromise(function(_0x315d3c,_0x6d6ba5){return client[_0x2783('0xa')](_0x390f08,_0x469aa7)[_0x2783('0xb')](function(_0x5b8845){logger[_0x2783('0xc')]('Sound,\x20%s,\x20%s',_0x1cb1c4,_0x2783('0xd'));logger[_0x2783('0xe')](_0x2783('0xf'),_0x1cb1c4,_0x2783('0xd'),JSON[_0x2783('0x10')](_0x5b8845));if(_0x5b8845[_0x2783('0x11')]){if(_0x5b8845['error'][_0x2783('0x12')]===0x1f4){logger[_0x2783('0x11')]('Sound,\x20%s,\x20%s',_0x1cb1c4,_0x5b8845[_0x2783('0x11')][_0x2783('0x13')]);return _0x6d6ba5(_0x5b8845[_0x2783('0x11')]['message']);}logger[_0x2783('0x11')]('Sound,\x20%s,\x20%s',_0x1cb1c4,_0x5b8845[_0x2783('0x11')]['message']);return _0x315d3c(_0x5b8845[_0x2783('0x11')]['message']);}else{logger['info'](_0x2783('0x14'),_0x1cb1c4,'request\x20sent');_0x315d3c(_0x5b8845['result'][_0x2783('0x13')]);}})[_0x2783('0x15')](function(_0x5bb9fa){logger[_0x2783('0x11')](_0x2783('0x14'),_0x1cb1c4,_0x5bb9fa);_0x6d6ba5(_0x5bb9fa);});});}exports[_0x2783('0x16')]=function(_0x2a78bd){var _0x55a047=this;return new Promise(function(_0xc7bf5f,_0x16ec6b){return db[_0x2783('0x17')][_0x2783('0x18')]({'raw':_0x2a78bd[_0x2783('0x19')]?_0x2a78bd[_0x2783('0x19')][_0x2783('0x1a')]===undefined?!![]:![]:!![],'where':_0x2a78bd[_0x2783('0x19')]?_0x2a78bd['options']['where']||null:null,'attributes':_0x2a78bd[_0x2783('0x19')]?_0x2a78bd[_0x2783('0x19')][_0x2783('0x1b')]||null:null,'include':_0x2a78bd[_0x2783('0x19')]?_0x2a78bd[_0x2783('0x19')][_0x2783('0x1c')]?_[_0x2783('0x1d')](_0x2a78bd[_0x2783('0x19')]['include'],function(_0x41db41){return{'model':db[_0x41db41[_0x2783('0x1e')]],'as':_0x41db41['as'],'attributes':_0x41db41[_0x2783('0x1b')],'include':_0x41db41['include']?_['map'](_0x41db41[_0x2783('0x1c')],function(_0x43bfec){return{'model':db[_0x43bfec[_0x2783('0x1e')]],'as':_0x43bfec['as'],'attributes':_0x43bfec[_0x2783('0x1b')],'include':_0x43bfec[_0x2783('0x1c')]?_[_0x2783('0x1d')](_0x43bfec[_0x2783('0x1c')],function(_0x5d5d7b){return{'model':db[_0x5d5d7b[_0x2783('0x1e')]],'as':_0x5d5d7b['as'],'attributes':_0x5d5d7b[_0x2783('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x2783('0xb')](function(_0x2f6cc6){logger[_0x2783('0xc')](_0x2783('0x16'),_0x2a78bd);logger['debug'](_0x2783('0x16'),_0x2a78bd,JSON[_0x2783('0x10')](_0x2f6cc6));_0xc7bf5f(_0x2f6cc6);})[_0x2783('0x15')](function(_0xad7345){logger['error'](_0x2783('0x16'),_0xad7345[_0x2783('0x13')],_0x2a78bd);_0x16ec6b(_0x55a047['error'](0x1f4,_0xad7345['message']));});});};
\ No newline at end of file
index bdbd955..34084fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7c09=['isAuthenticated','show','/:id/test','post','create','put','update','delete','/:id','destroy','exports','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareOdbc.controller','get'];(function(_0x25aed2,_0x11774a){var _0x5600cb=function(_0x485674){while(--_0x485674){_0x25aed2['push'](_0x25aed2['shift']());}};_0x5600cb(++_0x11774a);}(_0x7c09,0x102));var _0x97c0=function(_0x3a7a1d,_0x3b2ace){_0x3a7a1d=_0x3a7a1d-0x0;var _0x4ecbf5=_0x7c09[_0x3a7a1d];return _0x4ecbf5;};'use strict';var multer=require('multer');var util=require(_0x97c0('0x0'));var path=require(_0x97c0('0x1'));var express=require('express');var router=express[_0x97c0('0x2')]();var auth=require(_0x97c0('0x3'));var interaction=require(_0x97c0('0x4'));var config=require(_0x97c0('0x5'));var controller=require(_0x97c0('0x6'));router[_0x97c0('0x7')]('/',auth[_0x97c0('0x8')](),controller['index']);router['get']('/:id',auth[_0x97c0('0x8')](),controller[_0x97c0('0x9')]);router[_0x97c0('0x7')](_0x97c0('0xa'),auth[_0x97c0('0x8')](),controller['test']);router[_0x97c0('0xb')]('/',auth['isAuthenticated'](),controller[_0x97c0('0xc')]);router[_0x97c0('0xd')]('/:id',auth['isAuthenticated'](),controller[_0x97c0('0xe')]);router[_0x97c0('0xf')](_0x97c0('0x10'),auth[_0x97c0('0x8')](),controller[_0x97c0('0x11')]);module[_0x97c0('0x12')]=router;
\ No newline at end of file
+var _0x038b=['put','/:id','update','delete','destroy','exports','util','path','express','../../components/auth/service','../../config/environment','./squareOdbc.controller','isAuthenticated','index','show','get','test','post'];(function(_0x4e9628,_0x250573){var _0x27bc8c=function(_0xb3b7ae){while(--_0xb3b7ae){_0x4e9628['push'](_0x4e9628['shift']());}};_0x27bc8c(++_0x250573);}(_0x038b,0x114));var _0xb038=function(_0x20b280,_0x27832a){_0x20b280=_0x20b280-0x0;var _0x19274c=_0x038b[_0x20b280];return _0x19274c;};'use strict';var multer=require('multer');var util=require(_0xb038('0x0'));var path=require(_0xb038('0x1'));var express=require(_0xb038('0x2'));var router=express['Router']();var auth=require(_0xb038('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xb038('0x4'));var controller=require(_0xb038('0x5'));router['get']('/',auth[_0xb038('0x6')](),controller[_0xb038('0x7')]);router['get']('/:id',auth[_0xb038('0x6')](),controller[_0xb038('0x8')]);router[_0xb038('0x9')]('/:id/test',auth['isAuthenticated'](),controller[_0xb038('0xa')]);router[_0xb038('0xb')]('/',auth['isAuthenticated'](),controller['create']);router[_0xb038('0xc')](_0xb038('0xd'),auth['isAuthenticated'](),controller[_0xb038('0xe')]);router[_0xb038('0xf')](_0xb038('0xd'),auth[_0xb038('0x6')](),controller[_0xb038('0x10')]);module[_0xb038('0x11')]=router;
\ No newline at end of file
index 5baece6..22f2c0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x54ca=['STRING','name','sequelize','exports'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0x54ca,0x1f2));var _0xa54c=function(_0x403c8d,_0x5e3825){_0x403c8d=_0x403c8d-0x0;var _0x4ca60d=_0x54ca[_0x403c8d];return _0x4ca60d;};'use strict';var Sequelize=require(_0xa54c('0x0'));module[_0xa54c('0x1')]={'name':{'type':Sequelize[_0xa54c('0x2')],'unique':_0xa54c('0x3'),'allowNull':![]},'dsn':{'type':Sequelize[_0xa54c('0x2')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xa33f=['sequelize','STRING','name'];(function(_0x1a72f3,_0x217011){var _0x57ef47=function(_0x20123d){while(--_0x20123d){_0x1a72f3['push'](_0x1a72f3['shift']());}};_0x57ef47(++_0x217011);}(_0xa33f,0x105));var _0xfa33=function(_0x4f2089,_0x5d723d){_0x4f2089=_0x4f2089-0x0;var _0x8617bd=_0xa33f[_0x4f2089];return _0x8617bd;};'use strict';var Sequelize=require(_0xfa33('0x0'));module['exports']={'name':{'type':Sequelize[_0xfa33('0x1')],'unique':_0xfa33('0x2'),'allowNull':![]},'dsn':{'type':Sequelize[_0xfa33('0x1')]},'description':{'type':Sequelize[_0xfa33('0x1')]}};
\ No newline at end of file
index 5401196..d187742 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x67ce=['name','send','index','SquareOdbc','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','sort','where','pick','add','day','merge','filter','map','options','count','includeAll','include','findAll','rows','catch','show','params','find','create','body','test','dsn','openSync','closeSync','request-promise','moment','bluebird','mustache','util','path','ejs','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','offset','limit','Content-Range','apply','reject','save','update','then','destroy','error','stack'];(function(_0x465ee1,_0xcc39d7){var _0x2a5c04=function(_0x150a1e){while(--_0x150a1e){_0x465ee1['push'](_0x465ee1['shift']());}};_0x2a5c04(++_0xcc39d7);}(_0x67ce,0x72));var _0xe67c=function(_0x126057,_0x449d57){_0x126057=_0x126057-0x0;var _0x122bdc=_0x67ce[_0x126057];return _0x122bdc;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xe67c('0x0'));var moment=require(_0xe67c('0x1'));var BPromise=require(_0xe67c('0x2'));var Mustache=require(_0xe67c('0x3'));var util=require(_0xe67c('0x4'));var path=require(_0xe67c('0x5'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xe67c('0x6'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xe67c('0x7'));var jsforce=require(_0xe67c('0x8'));var deskjs=require(_0xe67c('0x9'));var toCsv=require(_0xe67c('0xa'));var querystring=require(_0xe67c('0xb'));var Papa=require(_0xe67c('0xc'));var qs=require(_0xe67c('0xd'));var logger=require(_0xe67c('0xe'))(_0xe67c('0xf'));var utils=require(_0xe67c('0x10'));var config=require(_0xe67c('0x11'));var db=require(_0xe67c('0x12'))['db'];function respondWithStatusCode(_0x50b94e,_0x2b9b72){_0x2b9b72=_0x2b9b72||0xcc;return function(_0xe0375b){if(_0xe0375b){return _0x50b94e[_0xe67c('0x13')](_0x2b9b72);}return _0x50b94e['status'](_0x2b9b72)[_0xe67c('0x14')]();};}function respondWithResult(_0x2e8082,_0x5d8980){_0x5d8980=_0x5d8980||0xc8;return function(_0x4125f3){if(_0x4125f3){return _0x2e8082[_0xe67c('0x15')](_0x5d8980)[_0xe67c('0x16')](_0x4125f3);}};}function respondWithFilteredResult(_0x2786bf,_0x381e45){return function(_0x4dd133){if(_0x4dd133){var _0x5d180b=_0x4dd133['count'],_0x2bfce4=_0x381e45[_0xe67c('0x17')],_0x21a134=_0x381e45['offset']+_0x381e45[_0xe67c('0x18')],_0x4e6f0a;if(_0x21a134>=_0x5d180b){_0x21a134=_0x5d180b;_0x4e6f0a=0xc8;}else{_0x4e6f0a=0xce;}_0x2786bf['status'](_0x4e6f0a);return _0x2786bf['set'](_0xe67c('0x19'),_0x2bfce4+'-'+_0x21a134+'/'+_0x5d180b)[_0xe67c('0x16')](_0x4dd133);}return null;};}function patchUpdates(_0x47c7d6){return function(_0xf55ae5){try{jsonpatch[_0xe67c('0x1a')](_0xf55ae5,_0x47c7d6,!![]);}catch(_0x1dc987){return BPromise[_0xe67c('0x1b')](_0x1dc987);}return _0xf55ae5[_0xe67c('0x1c')]();};}function saveUpdates(_0x25be32,_0x45543d){return function(_0x54fa5e){if(_0x54fa5e){return _0x54fa5e[_0xe67c('0x1d')](_0x25be32)[_0xe67c('0x1e')](function(_0x5b4f32){return _0x5b4f32;});}return null;};}function removeEntity(_0x46f24e,_0x516e11){return function(_0x225084){if(_0x225084){return _0x225084[_0xe67c('0x1f')]()[_0xe67c('0x1e')](function(){_0x46f24e['status'](0xcc)[_0xe67c('0x14')]();});}};}function handleEntityNotFound(_0x5616d7,_0x4f2f2d){return function(_0x119d2b){if(!_0x119d2b){_0x5616d7['sendStatus'](0x194);}return _0x119d2b;};}function handleError(_0x28ddd4,_0x50825d){_0x50825d=_0x50825d||0x1f4;return function(_0xfd5819){logger[_0xe67c('0x20')](_0xfd5819[_0xe67c('0x21')]);if(_0xfd5819[_0xe67c('0x22')]){delete _0xfd5819['name'];}_0x28ddd4['status'](_0x50825d)[_0xe67c('0x23')](_0xfd5819);};}exports[_0xe67c('0x24')]=function(_0x2b0b06,_0x4676a8){var _0x296692={},_0x17d1a6={},_0x4316e5={'count':0x0,'rows':[]};var _0x4bfa03=db[_0xe67c('0x25')][_0xe67c('0x26')];_0x17d1a6[_0xe67c('0x27')]=_[_0xe67c('0x28')](_0x4bfa03);var _0x5f4971={'dateStart':_0x2b0b06[_0xe67c('0x29')][_0xe67c('0x2a')],'dateEnd':_0x2b0b06['query'][_0xe67c('0x2b')]};delete _0x2b0b06[_0xe67c('0x29')][_0xe67c('0x2a')];delete _0x2b0b06['query'][_0xe67c('0x2b')];_0x17d1a6[_0xe67c('0x29')]=_[_0xe67c('0x28')](_0x2b0b06[_0xe67c('0x29')]);_0x17d1a6[_0xe67c('0x2c')]=_[_0xe67c('0x2d')](_0x17d1a6['model'],_0x17d1a6['query']);_0x296692[_0xe67c('0x2e')]=_['intersection'](_0x17d1a6[_0xe67c('0x27')],qs[_0xe67c('0x2f')](_0x2b0b06[_0xe67c('0x29')][_0xe67c('0x2f')]));_0x296692[_0xe67c('0x2e')]=_0x296692[_0xe67c('0x2e')][_0xe67c('0x30')]?_0x296692[_0xe67c('0x2e')]:_0x17d1a6[_0xe67c('0x27')];if(!_0x2b0b06[_0xe67c('0x29')][_0xe67c('0x31')]('nolimit')){_0x296692[_0xe67c('0x18')]=qs[_0xe67c('0x18')](_0x2b0b06[_0xe67c('0x29')][_0xe67c('0x18')]);_0x296692['offset']=qs[_0xe67c('0x17')](_0x2b0b06[_0xe67c('0x29')][_0xe67c('0x17')]);}_0x296692['order']=qs['sort'](_0x2b0b06[_0xe67c('0x29')][_0xe67c('0x32')]);_0x296692[_0xe67c('0x33')]=qs[_0xe67c('0x2c')](_[_0xe67c('0x34')](_0x2b0b06[_0xe67c('0x29')],_0x17d1a6['filters']));if(_0x5f4971[_0xe67c('0x2a')]){if(_0x5f4971['dateEnd']){_0x5f4971[_0xe67c('0x2b')]=moment(_0x5f4971[_0xe67c('0x2b')])['add'](0x1,'day');}else{_0x5f4971[_0xe67c('0x2b')]=moment(_0x5f4971['dateStart'])[_0xe67c('0x35')](0x1,_0xe67c('0x36'));}_[_0xe67c('0x37')](_0x296692[_0xe67c('0x33')],{'createdAt':{'$gte':_0x5f4971['dateStart'],'$lte':_0x5f4971[_0xe67c('0x2b')]}});}if(_0x2b0b06[_0xe67c('0x29')][_0xe67c('0x38')]){_0x296692[_0xe67c('0x33')]=_[_0xe67c('0x37')](_0x296692[_0xe67c('0x33')],{'$or':_[_0xe67c('0x39')](_0x296692[_0xe67c('0x2e')],function(_0x225de7){var _0x30fbf6={};_0x30fbf6[_0x225de7]={'$like':'%'+_0x2b0b06[_0xe67c('0x29')][_0xe67c('0x38')]+'%'};return _0x30fbf6;})});}_0x296692=_[_0xe67c('0x37')]({},_0x296692,_0x2b0b06[_0xe67c('0x3a')]);var _0x12b9d6={'where':_0x296692[_0xe67c('0x33')]};return db['SquareOdbc'][_0xe67c('0x3b')](_0x12b9d6)[_0xe67c('0x1e')](function(_0x1a9a30){_0x4316e5[_0xe67c('0x3b')]=_0x1a9a30;if(_0x2b0b06[_0xe67c('0x29')][_0xe67c('0x3c')]){_0x296692[_0xe67c('0x3d')]=[{'all':!![]}];}return db[_0xe67c('0x25')][_0xe67c('0x3e')](_0x296692);})['then'](function(_0x224d57){_0x4316e5[_0xe67c('0x3f')]=_0x224d57;return _0x4316e5;})['then'](respondWithFilteredResult(_0x4676a8,_0x296692))[_0xe67c('0x40')](handleError(_0x4676a8,null));};exports[_0xe67c('0x41')]=function(_0x3dc4c5,_0x215671){var _0x5aff68={'raw':!![],'where':{'id':_0x3dc4c5[_0xe67c('0x42')]['id']}},_0x366224={};_0x366224['model']=_[_0xe67c('0x28')](db['SquareOdbc'][_0xe67c('0x26')]);_0x366224['query']=_[_0xe67c('0x28')](_0x3dc4c5[_0xe67c('0x29')]);_0x366224[_0xe67c('0x2c')]=_[_0xe67c('0x2d')](_0x366224['model'],_0x366224[_0xe67c('0x29')]);_0x5aff68[_0xe67c('0x2e')]=_[_0xe67c('0x2d')](_0x366224[_0xe67c('0x27')],qs[_0xe67c('0x2f')](_0x3dc4c5['query']['fields']));_0x5aff68[_0xe67c('0x2e')]=_0x5aff68[_0xe67c('0x2e')][_0xe67c('0x30')]?_0x5aff68[_0xe67c('0x2e')]:_0x366224['model'];if(_0x3dc4c5[_0xe67c('0x29')]['includeAll']){_0x5aff68[_0xe67c('0x3d')]=[{'all':!![]}];}_0x5aff68=_['merge']({},_0x5aff68,_0x3dc4c5['options']);return db[_0xe67c('0x25')][_0xe67c('0x43')](_0x5aff68)[_0xe67c('0x1e')](handleEntityNotFound(_0x215671,null))[_0xe67c('0x1e')](respondWithResult(_0x215671,null))[_0xe67c('0x40')](handleError(_0x215671,null));};exports[_0xe67c('0x44')]=function(_0x66f92e,_0x50a55a){return db[_0xe67c('0x25')][_0xe67c('0x44')](_0x66f92e[_0xe67c('0x45')],{})[_0xe67c('0x1e')](respondWithResult(_0x50a55a,0xc9))[_0xe67c('0x40')](handleError(_0x50a55a,null));};exports[_0xe67c('0x1d')]=function(_0x4579cc,_0x2c4d1d){if(_0x4579cc[_0xe67c('0x45')]['id']){delete _0x4579cc['body']['id'];}return db[_0xe67c('0x25')][_0xe67c('0x43')]({'where':{'id':_0x4579cc['params']['id']}})['then'](handleEntityNotFound(_0x2c4d1d,null))[_0xe67c('0x1e')](saveUpdates(_0x4579cc[_0xe67c('0x45')],null))[_0xe67c('0x1e')](respondWithResult(_0x2c4d1d,null))[_0xe67c('0x40')](handleError(_0x2c4d1d,null));};exports[_0xe67c('0x1f')]=function(_0x1a24f2,_0x27186f){return db[_0xe67c('0x25')]['find']({'where':{'id':_0x1a24f2[_0xe67c('0x42')]['id']}})['then'](handleEntityNotFound(_0x27186f,null))[_0xe67c('0x1e')](removeEntity(_0x27186f,null))[_0xe67c('0x40')](handleError(_0x27186f,null));};exports[_0xe67c('0x46')]=function(_0x568e04,_0x46cbc6,_0x2e9331){var _0x1afdf0;return db['SquareOdbc'][_0xe67c('0x43')]({'where':{'id':_0x568e04[_0xe67c('0x42')]['id']},'attributes':['id',_0xe67c('0x47')]})['then'](handleEntityNotFound(_0x46cbc6,null))[_0xe67c('0x1e')](function(_0x445685){if(_0x445685){var _0x1920c3=require('odbc')();_0x1920c3[_0xe67c('0x48')](_0x445685[_0xe67c('0x47')]);_0x1920c3[_0xe67c('0x49')]();return _0x445685;}})['then'](respondWithResult(_0x46cbc6,null))['catch'](handleError(_0x46cbc6,null));};
\ No newline at end of file
+var _0xe033=['set','Content-Range','reject','save','update','then','error','stack','name','index','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','length','nolimit','order','sort','filters','pick','add','day','merge','where','filter','map','options','SquareOdbc','includeAll','findAll','catch','params','find','create','body','destroy','dsn','closeSync','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','status','json','count','offset','limit'];(function(_0x502c7d,_0x2f1285){var _0x30b7ed=function(_0x2d92f3){while(--_0x2d92f3){_0x502c7d['push'](_0x502c7d['shift']());}};_0x30b7ed(++_0x2f1285);}(_0xe033,0x17a));var _0x3e03=function(_0x4b7b8c,_0x4c66ab){_0x4b7b8c=_0x4b7b8c-0x0;var _0x1329de=_0xe033[_0x4b7b8c];return _0x1329de;};'use strict';var jsonpatch=require(_0x3e03('0x0'));var rp=require(_0x3e03('0x1'));var moment=require('moment');var BPromise=require(_0x3e03('0x2'));var Mustache=require(_0x3e03('0x3'));var util=require(_0x3e03('0x4'));var path=require(_0x3e03('0x5'));var sox=require(_0x3e03('0x6'));var csv=require(_0x3e03('0x7'));var ejs=require(_0x3e03('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x3e03('0x9'));var crypto=require(_0x3e03('0xa'));var jsforce=require(_0x3e03('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x3e03('0x7'));var querystring=require(_0x3e03('0xc'));var Papa=require(_0x3e03('0xd'));var qs=require(_0x3e03('0xe'));var logger=require(_0x3e03('0xf'))(_0x3e03('0x10'));var utils=require('../../config/utils');var config=require(_0x3e03('0x11'));var db=require(_0x3e03('0x12'))['db'];function respondWithStatusCode(_0x354c76,_0x39e254){_0x39e254=_0x39e254||0xcc;return function(_0x44643a){if(_0x44643a){return _0x354c76['sendStatus'](_0x39e254);}return _0x354c76[_0x3e03('0x13')](_0x39e254)['end']();};}function respondWithResult(_0x204ce3,_0xe0d7fc){_0xe0d7fc=_0xe0d7fc||0xc8;return function(_0x129fa9){if(_0x129fa9){return _0x204ce3['status'](_0xe0d7fc)[_0x3e03('0x14')](_0x129fa9);}};}function respondWithFilteredResult(_0x36b95f,_0x5142dc){return function(_0x45ae27){if(_0x45ae27){var _0x32aebe=_0x45ae27[_0x3e03('0x15')],_0x2a37e0=_0x5142dc['offset'],_0x2042e6=_0x5142dc[_0x3e03('0x16')]+_0x5142dc[_0x3e03('0x17')],_0xbb6d40;if(_0x2042e6>=_0x32aebe){_0x2042e6=_0x32aebe;_0xbb6d40=0xc8;}else{_0xbb6d40=0xce;}_0x36b95f[_0x3e03('0x13')](_0xbb6d40);return _0x36b95f[_0x3e03('0x18')](_0x3e03('0x19'),_0x2a37e0+'-'+_0x2042e6+'/'+_0x32aebe)['json'](_0x45ae27);}return null;};}function patchUpdates(_0x2505e9){return function(_0x22349a){try{jsonpatch['apply'](_0x22349a,_0x2505e9,!![]);}catch(_0x3807e3){return BPromise[_0x3e03('0x1a')](_0x3807e3);}return _0x22349a[_0x3e03('0x1b')]();};}function saveUpdates(_0x65ee7d,_0xebb5d9){return function(_0x4e4555){if(_0x4e4555){return _0x4e4555[_0x3e03('0x1c')](_0x65ee7d)[_0x3e03('0x1d')](function(_0x2f75dc){return _0x2f75dc;});}return null;};}function removeEntity(_0x505081,_0xe5d0e4){return function(_0x35300e){if(_0x35300e){return _0x35300e['destroy']()[_0x3e03('0x1d')](function(){_0x505081[_0x3e03('0x13')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5c92a4,_0x20d4c7){return function(_0x3c03ff){if(!_0x3c03ff){_0x5c92a4['sendStatus'](0x194);}return _0x3c03ff;};}function handleError(_0xbe60db,_0x56b4bc){_0x56b4bc=_0x56b4bc||0x1f4;return function(_0x234693){logger[_0x3e03('0x1e')](_0x234693[_0x3e03('0x1f')]);if(_0x234693[_0x3e03('0x20')]){delete _0x234693['name'];}_0xbe60db[_0x3e03('0x13')](_0x56b4bc)['send'](_0x234693);};}exports[_0x3e03('0x21')]=function(_0x2162a4,_0x414ac3){var _0x36d712={},_0x566714={},_0x20ee17={'count':0x0,'rows':[]};var _0x977795=db['SquareOdbc'][_0x3e03('0x22')];_0x566714[_0x3e03('0x23')]=_[_0x3e03('0x24')](_0x977795);var _0x4918cf={'dateStart':_0x2162a4[_0x3e03('0x25')][_0x3e03('0x26')],'dateEnd':_0x2162a4[_0x3e03('0x25')][_0x3e03('0x27')]};delete _0x2162a4['query'][_0x3e03('0x26')];delete _0x2162a4[_0x3e03('0x25')][_0x3e03('0x27')];_0x566714[_0x3e03('0x25')]=_['keys'](_0x2162a4[_0x3e03('0x25')]);_0x566714['filters']=_[_0x3e03('0x28')](_0x566714[_0x3e03('0x23')],_0x566714[_0x3e03('0x25')]);_0x36d712[_0x3e03('0x29')]=_[_0x3e03('0x28')](_0x566714[_0x3e03('0x23')],qs[_0x3e03('0x2a')](_0x2162a4[_0x3e03('0x25')]['fields']));_0x36d712[_0x3e03('0x29')]=_0x36d712[_0x3e03('0x29')][_0x3e03('0x2b')]?_0x36d712[_0x3e03('0x29')]:_0x566714['model'];if(!_0x2162a4[_0x3e03('0x25')]['hasOwnProperty'](_0x3e03('0x2c'))){_0x36d712[_0x3e03('0x17')]=qs['limit'](_0x2162a4[_0x3e03('0x25')][_0x3e03('0x17')]);_0x36d712[_0x3e03('0x16')]=qs[_0x3e03('0x16')](_0x2162a4[_0x3e03('0x25')][_0x3e03('0x16')]);}_0x36d712[_0x3e03('0x2d')]=qs[_0x3e03('0x2e')](_0x2162a4[_0x3e03('0x25')][_0x3e03('0x2e')]);_0x36d712['where']=qs[_0x3e03('0x2f')](_[_0x3e03('0x30')](_0x2162a4[_0x3e03('0x25')],_0x566714[_0x3e03('0x2f')]));if(_0x4918cf[_0x3e03('0x26')]){if(_0x4918cf[_0x3e03('0x27')]){_0x4918cf[_0x3e03('0x27')]=moment(_0x4918cf[_0x3e03('0x27')])[_0x3e03('0x31')](0x1,_0x3e03('0x32'));}else{_0x4918cf['dateEnd']=moment(_0x4918cf[_0x3e03('0x26')])[_0x3e03('0x31')](0x1,_0x3e03('0x32'));}_[_0x3e03('0x33')](_0x36d712[_0x3e03('0x34')],{'createdAt':{'$gte':_0x4918cf[_0x3e03('0x26')],'$lte':_0x4918cf[_0x3e03('0x27')]}});}if(_0x2162a4[_0x3e03('0x25')][_0x3e03('0x35')]){_0x36d712[_0x3e03('0x34')]=_[_0x3e03('0x33')](_0x36d712[_0x3e03('0x34')],{'$or':_[_0x3e03('0x36')](_0x36d712[_0x3e03('0x29')],function(_0x27e374){var _0x10a4b5={};_0x10a4b5[_0x27e374]={'$like':'%'+_0x2162a4[_0x3e03('0x25')][_0x3e03('0x35')]+'%'};return _0x10a4b5;})});}_0x36d712=_[_0x3e03('0x33')]({},_0x36d712,_0x2162a4[_0x3e03('0x37')]);var _0x39a816={'where':_0x36d712[_0x3e03('0x34')]};return db[_0x3e03('0x38')]['count'](_0x39a816)[_0x3e03('0x1d')](function(_0x9ce4b1){_0x20ee17[_0x3e03('0x15')]=_0x9ce4b1;if(_0x2162a4['query'][_0x3e03('0x39')]){_0x36d712['include']=[{'all':!![]}];}return db['SquareOdbc'][_0x3e03('0x3a')](_0x36d712);})[_0x3e03('0x1d')](function(_0x30a2f8){_0x20ee17['rows']=_0x30a2f8;return _0x20ee17;})['then'](respondWithFilteredResult(_0x414ac3,_0x36d712))[_0x3e03('0x3b')](handleError(_0x414ac3,null));};exports['show']=function(_0x174ae1,_0x1f52ca){var _0x42820c={'raw':!![],'where':{'id':_0x174ae1[_0x3e03('0x3c')]['id']}},_0x2be9c6={};_0x2be9c6[_0x3e03('0x23')]=_[_0x3e03('0x24')](db[_0x3e03('0x38')][_0x3e03('0x22')]);_0x2be9c6[_0x3e03('0x25')]=_[_0x3e03('0x24')](_0x174ae1['query']);_0x2be9c6['filters']=_['intersection'](_0x2be9c6[_0x3e03('0x23')],_0x2be9c6['query']);_0x42820c[_0x3e03('0x29')]=_[_0x3e03('0x28')](_0x2be9c6[_0x3e03('0x23')],qs[_0x3e03('0x2a')](_0x174ae1['query'][_0x3e03('0x2a')]));_0x42820c[_0x3e03('0x29')]=_0x42820c[_0x3e03('0x29')][_0x3e03('0x2b')]?_0x42820c[_0x3e03('0x29')]:_0x2be9c6[_0x3e03('0x23')];if(_0x174ae1[_0x3e03('0x25')][_0x3e03('0x39')]){_0x42820c['include']=[{'all':!![]}];}_0x42820c=_[_0x3e03('0x33')]({},_0x42820c,_0x174ae1[_0x3e03('0x37')]);return db['SquareOdbc'][_0x3e03('0x3d')](_0x42820c)[_0x3e03('0x1d')](handleEntityNotFound(_0x1f52ca,null))['then'](respondWithResult(_0x1f52ca,null))[_0x3e03('0x3b')](handleError(_0x1f52ca,null));};exports['create']=function(_0x4346ff,_0x404008){return db[_0x3e03('0x38')][_0x3e03('0x3e')](_0x4346ff[_0x3e03('0x3f')],{})[_0x3e03('0x1d')](respondWithResult(_0x404008,0xc9))[_0x3e03('0x3b')](handleError(_0x404008,null));};exports['update']=function(_0x240c7b,_0x17e8e3){if(_0x240c7b[_0x3e03('0x3f')]['id']){delete _0x240c7b[_0x3e03('0x3f')]['id'];}return db[_0x3e03('0x38')][_0x3e03('0x3d')]({'where':{'id':_0x240c7b[_0x3e03('0x3c')]['id']}})[_0x3e03('0x1d')](handleEntityNotFound(_0x17e8e3,null))['then'](saveUpdates(_0x240c7b['body'],null))[_0x3e03('0x1d')](respondWithResult(_0x17e8e3,null))['catch'](handleError(_0x17e8e3,null));};exports[_0x3e03('0x40')]=function(_0x56ffae,_0x257445){return db[_0x3e03('0x38')][_0x3e03('0x3d')]({'where':{'id':_0x56ffae[_0x3e03('0x3c')]['id']}})[_0x3e03('0x1d')](handleEntityNotFound(_0x257445,null))['then'](removeEntity(_0x257445,null))[_0x3e03('0x3b')](handleError(_0x257445,null));};exports['test']=function(_0x11cd03,_0x554ed0,_0x1131e3){var _0x566351;return db[_0x3e03('0x38')][_0x3e03('0x3d')]({'where':{'id':_0x11cd03[_0x3e03('0x3c')]['id']},'attributes':['id',_0x3e03('0x41')]})[_0x3e03('0x1d')](handleEntityNotFound(_0x554ed0,null))[_0x3e03('0x1d')](function(_0xe463ae){if(_0xe463ae){var _0x1de1a6=require('odbc')();_0x1de1a6['openSync'](_0xe463ae['dsn']);_0x1de1a6[_0x3e03('0x42')]();return _0xe463ae;}})[_0x3e03('0x1d')](respondWithResult(_0x554ed0,null))[_0x3e03('0x3b')](handleError(_0x554ed0,null));};
\ No newline at end of file
index 6f65e7f..1de990b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2dae=['moment','bluebird','request-promise','exports','define','square_odbc','lodash','../../config/logger','api'];(function(_0x5a876c,_0x7f3640){var _0x1d8090=function(_0x324208){while(--_0x324208){_0x5a876c['push'](_0x5a876c['shift']());}};_0x1d8090(++_0x7f3640);}(_0x2dae,0xc3));var _0xe2da=function(_0x3b594b,_0x5835c3){_0x3b594b=_0x3b594b-0x0;var _0x1ea5f8=_0x2dae[_0x3b594b];return _0x1ea5f8;};'use strict';var _=require(_0xe2da('0x0'));var util=require('util');var logger=require(_0xe2da('0x1'))(_0xe2da('0x2'));var moment=require(_0xe2da('0x3'));var BPromise=require(_0xe2da('0x4'));var rp=require(_0xe2da('0x5'));var attributes=require('./squareOdbc.attributes');module[_0xe2da('0x6')]=function(_0x439b5d,_0x77e45e){return _0x439b5d[_0xe2da('0x7')]('SquareOdbc',attributes,{'tableName':_0xe2da('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd64b=['square_odbc','lodash','../../config/logger','moment','bluebird','request-promise','./squareOdbc.attributes','exports'];(function(_0x4479b1,_0x90d304){var _0x554fbb=function(_0x22f27c){while(--_0x22f27c){_0x4479b1['push'](_0x4479b1['shift']());}};_0x554fbb(++_0x90d304);}(_0xd64b,0xc1));var _0xbd64=function(_0x527733,_0x16051c){_0x527733=_0x527733-0x0;var _0x5400ba=_0xd64b[_0x527733];return _0x5400ba;};'use strict';var _=require(_0xbd64('0x0'));var util=require('util');var logger=require(_0xbd64('0x1'))('api');var moment=require(_0xbd64('0x2'));var BPromise=require(_0xbd64('0x3'));var rp=require(_0xbd64('0x4'));var attributes=require(_0xbd64('0x5'));module[_0xbd64('0x6')]=function(_0x5458d8,_0x5446e4){return _0x5458d8['define']('SquareOdbc',attributes,{'tableName':_0xbd64('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index aff123a..1e264ab 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8699=['attributes','include','map','stringify','lodash','util','bluebird','randomstring','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info','SquareOdbc,\x20%s,\x20%s','request\x20sent','SquareOdbc,\x20%s,\x20%s,\x20%s','error','code','message','ShowSquareOdbc','options','raw','where'];(function(_0x17935a,_0x2bf270){var _0x753b0e=function(_0x11efc5){while(--_0x11efc5){_0x17935a['push'](_0x17935a['shift']());}};_0x753b0e(++_0x2bf270);}(_0x8699,0x13c));var _0x9869=function(_0xef34c5,_0xd17a9d){_0xef34c5=_0xef34c5-0x0;var _0x1de207=_0x8699[_0xef34c5];return _0x1de207;};'use strict';var _=require(_0x9869('0x0'));var util=require(_0x9869('0x1'));var moment=require('moment');var BPromise=require(_0x9869('0x2'));var rs=require(_0x9869('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x9869('0x4'));var logger=require(_0x9869('0x5'))('rpc');var config=require(_0x9869('0x6'));var jayson=require(_0x9869('0x7'));var client=jayson[_0x9869('0x8')][_0x9869('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2de497,_0x37ac6a,_0x1cada3){return new BPromise(function(_0x2cfb08,_0x38bad5){return client['request'](_0x2de497,_0x1cada3)[_0x9869('0xa')](function(_0x1cbe83){logger[_0x9869('0xb')](_0x9869('0xc'),_0x37ac6a,_0x9869('0xd'));logger['debug'](_0x9869('0xe'),_0x37ac6a,_0x9869('0xd'),JSON['stringify'](_0x1cbe83));if(_0x1cbe83['error']){if(_0x1cbe83[_0x9869('0xf')][_0x9869('0x10')]===0x1f4){logger[_0x9869('0xf')]('SquareOdbc,\x20%s,\x20%s',_0x37ac6a,_0x1cbe83[_0x9869('0xf')][_0x9869('0x11')]);return _0x38bad5(_0x1cbe83['error'][_0x9869('0x11')]);}logger[_0x9869('0xf')]('SquareOdbc,\x20%s,\x20%s',_0x37ac6a,_0x1cbe83[_0x9869('0xf')][_0x9869('0x11')]);return _0x2cfb08(_0x1cbe83['error'][_0x9869('0x11')]);}else{logger[_0x9869('0xb')](_0x9869('0xc'),_0x37ac6a,_0x9869('0xd'));_0x2cfb08(_0x1cbe83['result'][_0x9869('0x11')]);}})['catch'](function(_0x1aa43c){logger[_0x9869('0xf')](_0x9869('0xc'),_0x37ac6a,_0x1aa43c);_0x38bad5(_0x1aa43c);});});}exports[_0x9869('0x12')]=function(_0x3204f7){var _0x501248=this;return new Promise(function(_0xd805ec,_0xfa35b6){return db['SquareOdbc']['find']({'raw':_0x3204f7[_0x9869('0x13')]?_0x3204f7[_0x9869('0x13')][_0x9869('0x14')]===undefined?!![]:![]:!![],'where':_0x3204f7['options']?_0x3204f7[_0x9869('0x13')][_0x9869('0x15')]||null:null,'attributes':_0x3204f7[_0x9869('0x13')]?_0x3204f7[_0x9869('0x13')][_0x9869('0x16')]||null:null,'include':_0x3204f7[_0x9869('0x13')]?_0x3204f7[_0x9869('0x13')][_0x9869('0x17')]?_[_0x9869('0x18')](_0x3204f7[_0x9869('0x13')][_0x9869('0x17')],function(_0x95c944){return{'model':db[_0x95c944['model']],'as':_0x95c944['as'],'attributes':_0x95c944['attributes'],'include':_0x95c944[_0x9869('0x17')]?_[_0x9869('0x18')](_0x95c944['include'],function(_0x49acbc){return{'model':db[_0x49acbc['model']],'as':_0x49acbc['as'],'attributes':_0x49acbc['attributes'],'include':_0x49acbc[_0x9869('0x17')]?_[_0x9869('0x18')](_0x49acbc['include'],function(_0x26019f){return{'model':db[_0x26019f['model']],'as':_0x26019f['as'],'attributes':_0x26019f[_0x9869('0x16')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x1acb0a){logger[_0x9869('0xb')](_0x9869('0x12'),_0x3204f7);logger['debug'](_0x9869('0x12'),_0x3204f7,JSON[_0x9869('0x19')](_0x1acb0a));_0xd805ec(_0x1acb0a);})['catch'](function(_0x281028){logger[_0x9869('0xf')](_0x9869('0x12'),_0x281028[_0x9869('0x11')],_0x3204f7);_0xfa35b6(_0x501248[_0x9869('0xf')](0x1f4,_0x281028[_0x9869('0x11')]));});});};
\ No newline at end of file
+var _0x32f0=['debug','SquareOdbc,\x20%s,\x20%s,\x20%s','error','code','message','result','SquareOdbc','find','options','raw','include','map','attributes','model','ShowSquareOdbc','stringify','catch','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','SquareOdbc,\x20%s,\x20%s','request\x20sent'];(function(_0x4ff09b,_0x53f67d){var _0x3f5c2e=function(_0x124592){while(--_0x124592){_0x4ff09b['push'](_0x4ff09b['shift']());}};_0x3f5c2e(++_0x53f67d);}(_0x32f0,0x19d));var _0x032f=function(_0x576170,_0x1712ae){_0x576170=_0x576170-0x0;var _0x397c70=_0x32f0[_0x576170];return _0x397c70;};'use strict';var _=require(_0x032f('0x0'));var util=require(_0x032f('0x1'));var moment=require(_0x032f('0x2'));var BPromise=require(_0x032f('0x3'));var rs=require(_0x032f('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x032f('0x5'));var logger=require(_0x032f('0x6'))(_0x032f('0x7'));var config=require(_0x032f('0x8'));var jayson=require(_0x032f('0x9'));var client=jayson[_0x032f('0xa')][_0x032f('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x573b73,_0x2a087a,_0x418f35){return new BPromise(function(_0x12b9ca,_0x2d855f){return client['request'](_0x573b73,_0x418f35)[_0x032f('0xc')](function(_0x4fd8e0){logger[_0x032f('0xd')](_0x032f('0xe'),_0x2a087a,_0x032f('0xf'));logger[_0x032f('0x10')](_0x032f('0x11'),_0x2a087a,'request\x20sent',JSON['stringify'](_0x4fd8e0));if(_0x4fd8e0['error']){if(_0x4fd8e0[_0x032f('0x12')][_0x032f('0x13')]===0x1f4){logger[_0x032f('0x12')](_0x032f('0xe'),_0x2a087a,_0x4fd8e0[_0x032f('0x12')][_0x032f('0x14')]);return _0x2d855f(_0x4fd8e0[_0x032f('0x12')][_0x032f('0x14')]);}logger[_0x032f('0x12')](_0x032f('0xe'),_0x2a087a,_0x4fd8e0[_0x032f('0x12')][_0x032f('0x14')]);return _0x12b9ca(_0x4fd8e0[_0x032f('0x12')][_0x032f('0x14')]);}else{logger[_0x032f('0xd')]('SquareOdbc,\x20%s,\x20%s',_0x2a087a,'request\x20sent');_0x12b9ca(_0x4fd8e0[_0x032f('0x15')][_0x032f('0x14')]);}})['catch'](function(_0x4fc178){logger['error'](_0x032f('0xe'),_0x2a087a,_0x4fc178);_0x2d855f(_0x4fc178);});});}exports['ShowSquareOdbc']=function(_0x16a253){var _0x30c69e=this;return new Promise(function(_0x244b83,_0x8074de){return db[_0x032f('0x16')][_0x032f('0x17')]({'raw':_0x16a253[_0x032f('0x18')]?_0x16a253[_0x032f('0x18')][_0x032f('0x19')]===undefined?!![]:![]:!![],'where':_0x16a253['options']?_0x16a253[_0x032f('0x18')]['where']||null:null,'attributes':_0x16a253[_0x032f('0x18')]?_0x16a253[_0x032f('0x18')]['attributes']||null:null,'include':_0x16a253[_0x032f('0x18')]?_0x16a253[_0x032f('0x18')][_0x032f('0x1a')]?_[_0x032f('0x1b')](_0x16a253[_0x032f('0x18')]['include'],function(_0x3ccb9e){return{'model':db[_0x3ccb9e['model']],'as':_0x3ccb9e['as'],'attributes':_0x3ccb9e[_0x032f('0x1c')],'include':_0x3ccb9e[_0x032f('0x1a')]?_[_0x032f('0x1b')](_0x3ccb9e['include'],function(_0x478d54){return{'model':db[_0x478d54[_0x032f('0x1d')]],'as':_0x478d54['as'],'attributes':_0x478d54['attributes'],'include':_0x478d54[_0x032f('0x1a')]?_[_0x032f('0x1b')](_0x478d54['include'],function(_0x206b45){return{'model':db[_0x206b45[_0x032f('0x1d')]],'as':_0x206b45['as'],'attributes':_0x206b45[_0x032f('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x032f('0xc')](function(_0x4016b1){logger['info'](_0x032f('0x1e'),_0x16a253);logger[_0x032f('0x10')]('ShowSquareOdbc',_0x16a253,JSON[_0x032f('0x1f')](_0x4016b1));_0x244b83(_0x4016b1);})[_0x032f('0x20')](function(_0x58b7f6){logger[_0x032f('0x12')](_0x032f('0x1e'),_0x58b7f6['message'],_0x16a253);_0x8074de(_0x30c69e['error'](0x1f4,_0x58b7f6[_0x032f('0x14')]));});});};
\ No newline at end of file
index 482ae05..2a2d860 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7143=['/:id','/:id/users','getUsers','post','create','addUsers','put','delete','removeUsers','exports','util','Router','../../components/auth/service','../../components/interaction/service','isAuthenticated','get'];(function(_0x1a0600,_0x41feef){var _0x734670=function(_0x2da4e4){while(--_0x2da4e4){_0x1a0600['push'](_0x1a0600['shift']());}};_0x734670(++_0x41feef);}(_0x7143,0x17a));var _0x3714=function(_0x17f8f3,_0x261d99){_0x17f8f3=_0x17f8f3-0x0;var _0x553e9b=_0x7143[_0x17f8f3];return _0x553e9b;};'use strict';var multer=require('multer');var util=require(_0x3714('0x0'));var path=require('path');var express=require('express');var router=express[_0x3714('0x1')]();var auth=require(_0x3714('0x2'));var interaction=require(_0x3714('0x3'));var config=require('../../config/environment');var controller=require('./squareProject.controller');router['get']('/',auth[_0x3714('0x4')](),controller['index']);router[_0x3714('0x5')](_0x3714('0x6'),auth[_0x3714('0x4')](),controller['show']);router[_0x3714('0x5')](_0x3714('0x7'),auth[_0x3714('0x4')](),controller[_0x3714('0x8')]);router[_0x3714('0x9')]('/',auth[_0x3714('0x4')](),controller[_0x3714('0xa')]);router['post'](_0x3714('0x7'),auth['isAuthenticated'](),controller[_0x3714('0xb')]);router[_0x3714('0xc')](_0x3714('0x6'),auth[_0x3714('0x4')](),controller['update']);router['delete'](_0x3714('0x6'),auth[_0x3714('0x4')](),controller['destroy']);router[_0x3714('0xd')](_0x3714('0x7'),auth['isAuthenticated'](),controller[_0x3714('0xe')]);module[_0x3714('0xf')]=router;
\ No newline at end of file
+var _0x7b1a=['addUsers','put','update','delete','destroy','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareProject.controller','get','isAuthenticated','/:id','show','getUsers','post','/:id/users'];(function(_0x278e3c,_0x1c9cfd){var _0x3e2d9b=function(_0x34d928){while(--_0x34d928){_0x278e3c['push'](_0x278e3c['shift']());}};_0x3e2d9b(++_0x1c9cfd);}(_0x7b1a,0xae));var _0xa7b1=function(_0x24e1ab,_0x21c5d5){_0x24e1ab=_0x24e1ab-0x0;var _0x3f1fd7=_0x7b1a[_0x24e1ab];return _0x3f1fd7;};'use strict';var multer=require(_0xa7b1('0x0'));var util=require(_0xa7b1('0x1'));var path=require(_0xa7b1('0x2'));var express=require(_0xa7b1('0x3'));var router=express['Router']();var auth=require(_0xa7b1('0x4'));var interaction=require(_0xa7b1('0x5'));var config=require(_0xa7b1('0x6'));var controller=require(_0xa7b1('0x7'));router[_0xa7b1('0x8')]('/',auth[_0xa7b1('0x9')](),controller['index']);router[_0xa7b1('0x8')](_0xa7b1('0xa'),auth[_0xa7b1('0x9')](),controller[_0xa7b1('0xb')]);router[_0xa7b1('0x8')]('/:id/users',auth[_0xa7b1('0x9')](),controller[_0xa7b1('0xc')]);router[_0xa7b1('0xd')]('/',auth[_0xa7b1('0x9')](),controller['create']);router[_0xa7b1('0xd')](_0xa7b1('0xe'),auth[_0xa7b1('0x9')](),controller[_0xa7b1('0xf')]);router[_0xa7b1('0x10')](_0xa7b1('0xa'),auth['isAuthenticated'](),controller[_0xa7b1('0x11')]);router[_0xa7b1('0x12')](_0xa7b1('0xa'),auth[_0xa7b1('0x9')](),controller[_0xa7b1('0x13')]);router[_0xa7b1('0x12')](_0xa7b1('0xe'),auth[_0xa7b1('0x9')](),controller['removeUsers']);module[_0xa7b1('0x14')]=router;
\ No newline at end of file
index b1bdce8..4d8e318 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x960c=['getDataValue','preproduction','toString','utf8','production','sequelize','STRING','TEXT','BLOB'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x960c,0x113));var _0xc960=function(_0x19d4a5,_0x4157c6){_0x19d4a5=_0x19d4a5-0x0;var _0x48c33a=_0x960c[_0x19d4a5];return _0x48c33a;};'use strict';var Sequelize=require(_0xc960('0x0'));module['exports']={'name':{'type':Sequelize[_0xc960('0x1')],'unique':'name','allowNull':![]},'description':{'type':Sequelize[_0xc960('0x1')]},'notes':{'type':Sequelize[_0xc960('0x2')]},'preproduction':{'type':Sequelize[_0xc960('0x3')]('long'),'get':function(){if(this[_0xc960('0x4')](_0xc960('0x5'))){return this['getDataValue']('preproduction')[_0xc960('0x6')](_0xc960('0x7'));}}},'production':{'type':Sequelize[_0xc960('0x3')]('long'),'get':function(){if(this['getDataValue'](_0xc960('0x8'))){return this[_0xc960('0x4')]('production')['toString'](_0xc960('0x7'));}}}};
\ No newline at end of file
+var _0x39c7=['utf8','production','toString','exports','STRING','name','TEXT','BLOB','getDataValue','preproduction'];(function(_0xb907c9,_0x50bb46){var _0x164b91=function(_0x996264){while(--_0x996264){_0xb907c9['push'](_0xb907c9['shift']());}};_0x164b91(++_0x50bb46);}(_0x39c7,0x85));var _0x739c=function(_0x33641,_0x123289){_0x33641=_0x33641-0x0;var _0x11b3a5=_0x39c7[_0x33641];return _0x11b3a5;};'use strict';var Sequelize=require('sequelize');module[_0x739c('0x0')]={'name':{'type':Sequelize[_0x739c('0x1')],'unique':_0x739c('0x2'),'allowNull':![]},'description':{'type':Sequelize[_0x739c('0x1')]},'notes':{'type':Sequelize[_0x739c('0x3')]},'preproduction':{'type':Sequelize[_0x739c('0x4')]('long'),'get':function(){if(this[_0x739c('0x5')](_0x739c('0x6'))){return this[_0x739c('0x5')]('preproduction')['toString'](_0x739c('0x7'));}}},'production':{'type':Sequelize[_0x739c('0x4')]('long'),'get':function(){if(this['getDataValue'](_0x739c('0x8'))){return this[_0x739c('0x5')]('production')[_0x739c('0x9')](_0x739c('0x7'));}}}};
\ No newline at end of file
index f5620b5..545321e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x71a3=['map','options','count','includeAll','include','rows','show','params','filters','find','catch','create','body','addUsers','ids','omit','removeUsers','isArray','emit','userSquareProject:remove','getUsers','findOne','User','request-promise','bluebird','mustache','util','to-csv','lodash','squel','crypto','jsforce','querystring','papaparse','../../config/logger','../../config/environment','../../mysqldb','localhost','./squareProject.socket','register','status','end','json','offset','limit','set','Content-Range','apply','save','update','then','destroy','sendStatus','error','stack','name','send','index','SquareProject','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','length','nolimit','order','sort','where','pick','day','add','merge','filter'];(function(_0x3201ae,_0x1336bc){var _0xbf54b1=function(_0x3ef3df){while(--_0x3ef3df){_0x3201ae['push'](_0x3201ae['shift']());}};_0xbf54b1(++_0x1336bc);}(_0x71a3,0xfe));var _0x371a=function(_0xc77c92,_0x8a9f1){_0xc77c92=_0xc77c92-0x0;var _0x51319b=_0x71a3[_0xc77c92];return _0x51319b;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x371a('0x0'));var moment=require('moment');var BPromise=require(_0x371a('0x1'));var Mustache=require(_0x371a('0x2'));var util=require(_0x371a('0x3'));var path=require('path');var sox=require('sox');var csv=require(_0x371a('0x4'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x371a('0x5'));var squel=require(_0x371a('0x6'));var crypto=require(_0x371a('0x7'));var jsforce=require(_0x371a('0x8'));var deskjs=require('desk.js');var toCsv=require(_0x371a('0x4'));var querystring=require(_0x371a('0x9'));var Papa=require(_0x371a('0xa'));var qs=require('../../components/parsers/qs');var logger=require(_0x371a('0xb'))('api');var utils=require('../../config/utils');var config=require(_0x371a('0xc'));var db=require(_0x371a('0xd'))['db'];var socket=require('socket.io-emitter')({'host':_0x371a('0xe'),'port':0x18eb});require(_0x371a('0xf'))[_0x371a('0x10')](socket);function respondWithStatusCode(_0x53eb46,_0x301657){_0x301657=_0x301657||0xcc;return function(_0x2e7947){if(_0x2e7947){return _0x53eb46['sendStatus'](_0x301657);}return _0x53eb46[_0x371a('0x11')](_0x301657)[_0x371a('0x12')]();};}function respondWithResult(_0x53e358,_0x5bfc8e){_0x5bfc8e=_0x5bfc8e||0xc8;return function(_0x526630){if(_0x526630){return _0x53e358[_0x371a('0x11')](_0x5bfc8e)[_0x371a('0x13')](_0x526630);}};}function respondWithFilteredResult(_0x3c6efe,_0x5dc904){return function(_0x3b3ada){if(_0x3b3ada){var _0x347750=_0x3b3ada['count'],_0x7b660b=_0x5dc904[_0x371a('0x14')],_0x2413d3=_0x5dc904[_0x371a('0x14')]+_0x5dc904[_0x371a('0x15')],_0x3fbec6;if(_0x2413d3>=_0x347750){_0x2413d3=_0x347750;_0x3fbec6=0xc8;}else{_0x3fbec6=0xce;}_0x3c6efe[_0x371a('0x11')](_0x3fbec6);return _0x3c6efe[_0x371a('0x16')](_0x371a('0x17'),_0x7b660b+'-'+_0x2413d3+'/'+_0x347750)[_0x371a('0x13')](_0x3b3ada);}return null;};}function patchUpdates(_0x5ce3e8){return function(_0x53aed6){try{jsonpatch[_0x371a('0x18')](_0x53aed6,_0x5ce3e8,!![]);}catch(_0x34c04e){return BPromise['reject'](_0x34c04e);}return _0x53aed6[_0x371a('0x19')]();};}function saveUpdates(_0x5bd080,_0x27ef34){return function(_0x561a63){if(_0x561a63){return _0x561a63[_0x371a('0x1a')](_0x5bd080)[_0x371a('0x1b')](function(_0x1b2d93){return _0x1b2d93;});}return null;};}function removeEntity(_0x5b6e30,_0x52fff0){return function(_0x5375f7){if(_0x5375f7){return _0x5375f7[_0x371a('0x1c')]()[_0x371a('0x1b')](function(){_0x5b6e30['status'](0xcc)[_0x371a('0x12')]();});}};}function handleEntityNotFound(_0x28ba36,_0x201cb2){return function(_0x112554){if(!_0x112554){_0x28ba36[_0x371a('0x1d')](0x194);}return _0x112554;};}function handleError(_0x5c74b4,_0x2681c3){_0x2681c3=_0x2681c3||0x1f4;return function(_0x1674e8){logger[_0x371a('0x1e')](_0x1674e8[_0x371a('0x1f')]);if(_0x1674e8[_0x371a('0x20')]){delete _0x1674e8[_0x371a('0x20')];}_0x5c74b4['status'](_0x2681c3)[_0x371a('0x21')](_0x1674e8);};}exports[_0x371a('0x22')]=function(_0x380a37,_0x2a8197){var _0x105506={},_0x1dfe4b={},_0x53e9c4={'count':0x0,'rows':[]};var _0x5741e6=db[_0x371a('0x23')]['rawAttributes'];_0x1dfe4b[_0x371a('0x24')]=_[_0x371a('0x25')](_0x5741e6);var _0x47c8d1={'dateStart':_0x380a37[_0x371a('0x26')][_0x371a('0x27')],'dateEnd':_0x380a37[_0x371a('0x26')][_0x371a('0x28')]};delete _0x380a37[_0x371a('0x26')][_0x371a('0x27')];delete _0x380a37['query'][_0x371a('0x28')];_0x1dfe4b[_0x371a('0x26')]=_[_0x371a('0x25')](_0x380a37['query']);_0x1dfe4b['filters']=_[_0x371a('0x29')](_0x1dfe4b['model'],_0x1dfe4b['query']);_0x105506[_0x371a('0x2a')]=_[_0x371a('0x29')](_0x1dfe4b[_0x371a('0x24')],qs[_0x371a('0x2b')](_0x380a37[_0x371a('0x26')][_0x371a('0x2b')]));_0x105506['attributes']=_0x105506[_0x371a('0x2a')][_0x371a('0x2c')]?_0x105506[_0x371a('0x2a')]:_0x1dfe4b['model'];if(!_0x380a37[_0x371a('0x26')]['hasOwnProperty'](_0x371a('0x2d'))){_0x105506[_0x371a('0x15')]=qs['limit'](_0x380a37[_0x371a('0x26')]['limit']);_0x105506['offset']=qs[_0x371a('0x14')](_0x380a37['query'][_0x371a('0x14')]);}_0x105506[_0x371a('0x2e')]=qs[_0x371a('0x2f')](_0x380a37['query']['sort']);_0x105506[_0x371a('0x30')]=qs['filters'](_[_0x371a('0x31')](_0x380a37[_0x371a('0x26')],_0x1dfe4b['filters']));if(_0x47c8d1[_0x371a('0x27')]){if(_0x47c8d1[_0x371a('0x28')]){_0x47c8d1[_0x371a('0x28')]=moment(_0x47c8d1[_0x371a('0x28')])['add'](0x1,_0x371a('0x32'));}else{_0x47c8d1[_0x371a('0x28')]=moment(_0x47c8d1[_0x371a('0x27')])[_0x371a('0x33')](0x1,_0x371a('0x32'));}_[_0x371a('0x34')](_0x105506[_0x371a('0x30')],{'createdAt':{'$gte':_0x47c8d1[_0x371a('0x27')],'$lte':_0x47c8d1[_0x371a('0x28')]}});}if(_0x380a37[_0x371a('0x26')][_0x371a('0x35')]){_0x105506[_0x371a('0x30')]=_['merge'](_0x105506[_0x371a('0x30')],{'$or':_[_0x371a('0x36')](_0x105506[_0x371a('0x2a')],function(_0x5e1365){var _0x4dcee2={};_0x4dcee2[_0x5e1365]={'$like':'%'+_0x380a37['query'][_0x371a('0x35')]+'%'};return _0x4dcee2;})});}_0x105506=_[_0x371a('0x34')]({},_0x105506,_0x380a37[_0x371a('0x37')]);var _0x41d93e={'where':_0x105506[_0x371a('0x30')]};return db[_0x371a('0x23')]['count'](_0x41d93e)[_0x371a('0x1b')](function(_0x36dd1d){_0x53e9c4[_0x371a('0x38')]=_0x36dd1d;if(_0x380a37[_0x371a('0x26')][_0x371a('0x39')]){_0x105506[_0x371a('0x3a')]=[{'all':!![]}];}return db['SquareProject']['findAll'](_0x105506);})['then'](function(_0x27f44a){_0x53e9c4[_0x371a('0x3b')]=_0x27f44a;return _0x53e9c4;})[_0x371a('0x1b')](respondWithFilteredResult(_0x2a8197,_0x105506))['catch'](handleError(_0x2a8197,null));};exports[_0x371a('0x3c')]=function(_0x4dd733,_0x301bec){var _0x324c5d={'raw':![],'where':{'id':_0x4dd733[_0x371a('0x3d')]['id']}},_0x4f3e23={};_0x4f3e23['model']=_[_0x371a('0x25')](db[_0x371a('0x23')]['rawAttributes']);_0x4f3e23['query']=_[_0x371a('0x25')](_0x4dd733[_0x371a('0x26')]);_0x4f3e23[_0x371a('0x3e')]=_[_0x371a('0x29')](_0x4f3e23[_0x371a('0x24')],_0x4f3e23[_0x371a('0x26')]);_0x324c5d[_0x371a('0x2a')]=_['intersection'](_0x4f3e23[_0x371a('0x24')],qs[_0x371a('0x2b')](_0x4dd733[_0x371a('0x26')][_0x371a('0x2b')]));_0x324c5d[_0x371a('0x2a')]=_0x324c5d[_0x371a('0x2a')][_0x371a('0x2c')]?_0x324c5d[_0x371a('0x2a')]:_0x4f3e23[_0x371a('0x24')];if(_0x4dd733[_0x371a('0x26')][_0x371a('0x39')]){_0x324c5d[_0x371a('0x3a')]=[{'all':!![]}];}_0x324c5d=_[_0x371a('0x34')]({},_0x324c5d,_0x4dd733['options']);return db[_0x371a('0x23')][_0x371a('0x3f')](_0x324c5d)[_0x371a('0x1b')](handleEntityNotFound(_0x301bec,null))['then'](respondWithResult(_0x301bec,null))[_0x371a('0x40')](handleError(_0x301bec,null));};exports[_0x371a('0x41')]=function(_0x3a3dae,_0x49a94a){return db[_0x371a('0x23')]['create'](_0x3a3dae[_0x371a('0x42')],{})['then'](respondWithResult(_0x49a94a,0xc9))[_0x371a('0x40')](handleError(_0x49a94a,null));};exports[_0x371a('0x1a')]=function(_0x39577a,_0x1e7789){if(_0x39577a[_0x371a('0x42')]['id']){delete _0x39577a[_0x371a('0x42')]['id'];}return db['SquareProject'][_0x371a('0x3f')]({'where':{'id':_0x39577a[_0x371a('0x3d')]['id']}})[_0x371a('0x1b')](handleEntityNotFound(_0x1e7789,null))[_0x371a('0x1b')](saveUpdates(_0x39577a['body'],null))[_0x371a('0x1b')](respondWithResult(_0x1e7789,null))[_0x371a('0x40')](handleError(_0x1e7789,null));};exports['destroy']=function(_0x3d6c40,_0x219247){return db[_0x371a('0x23')][_0x371a('0x3f')]({'where':{'id':_0x3d6c40[_0x371a('0x3d')]['id']}})['then'](handleEntityNotFound(_0x219247,null))[_0x371a('0x1b')](removeEntity(_0x219247,null))[_0x371a('0x40')](handleError(_0x219247,null));};exports['addUsers']=function(_0x5ba659,_0x1225b0,_0x37d57c){return db[_0x371a('0x23')][_0x371a('0x3f')]({'where':{'id':_0x5ba659[_0x371a('0x3d')]['id']}})[_0x371a('0x1b')](handleEntityNotFound(_0x1225b0,null))[_0x371a('0x1b')](function(_0x12d59a){if(_0x12d59a){return _0x12d59a[_0x371a('0x43')](_0x5ba659[_0x371a('0x42')][_0x371a('0x44')],_[_0x371a('0x45')](_0x5ba659[_0x371a('0x42')],[_0x371a('0x44'),'id'])||{});}})['then'](respondWithResult(_0x1225b0,null))['catch'](handleError(_0x1225b0,null));};exports[_0x371a('0x46')]=function(_0x5a38b1,_0x482fc2,_0x8adb71){var _0x199106;return db[_0x371a('0x23')][_0x371a('0x3f')]({'where':{'id':_0x5a38b1[_0x371a('0x3d')]['id']}})['then'](handleEntityNotFound(_0x482fc2,null))[_0x371a('0x1b')](function(_0x1b635d){if(_0x1b635d){return _0x1b635d[_0x371a('0x46')](_0x5a38b1['query']['ids'])[_0x371a('0x1b')](function(_0x5653b9){if(_[_0x371a('0x47')](_0x5a38b1[_0x371a('0x26')][_0x371a('0x44')])){for(var _0x28f8ab=0x0;_0x28f8ab<_0x5a38b1[_0x371a('0x26')]['ids'][_0x371a('0x2c')];_0x28f8ab+=0x1){socket[_0x371a('0x48')](_0x371a('0x49'),{'UserId':_0x5a38b1['query'][_0x371a('0x44')][_0x28f8ab],'SquareProjectId':_0x5a38b1[_0x371a('0x3d')]['id']});}}else{socket['emit'](_0x371a('0x49'),{'UserId':_0x5a38b1[_0x371a('0x26')][_0x371a('0x44')],'SquareProjectId':_0x5a38b1[_0x371a('0x3d')]['id']});}});}})[_0x371a('0x1b')](respondWithStatusCode(_0x482fc2,null))[_0x371a('0x40')](handleError(_0x482fc2,null));};exports[_0x371a('0x4a')]=function(_0x27d937,_0x4dc977,_0x18c38a){var _0x2e01e5={};var _0x35c2f4={};var _0x348e7f;var _0x16fbae;return db['SquareProject'][_0x371a('0x4b')]({'where':{'id':_0x27d937[_0x371a('0x3d')]['id']}})[_0x371a('0x1b')](handleEntityNotFound(_0x4dc977,null))[_0x371a('0x1b')](function(_0x4b092d){if(_0x4b092d){_0x348e7f=_0x4b092d;_0x35c2f4[_0x371a('0x24')]=_['keys'](db[_0x371a('0x4c')]['rawAttributes']);_0x35c2f4[_0x371a('0x26')]=_[_0x371a('0x25')](_0x27d937['query']);_0x35c2f4[_0x371a('0x3e')]=_[_0x371a('0x29')](_0x35c2f4['model'],_0x35c2f4[_0x371a('0x26')]);_0x2e01e5[_0x371a('0x2a')]=_[_0x371a('0x29')](_0x35c2f4['model'],qs[_0x371a('0x2b')](_0x27d937[_0x371a('0x26')][_0x371a('0x2b')]));_0x2e01e5[_0x371a('0x2a')]=_0x2e01e5[_0x371a('0x2a')][_0x371a('0x2c')]?_0x2e01e5[_0x371a('0x2a')]:_0x35c2f4[_0x371a('0x24')];_0x2e01e5[_0x371a('0x2e')]=qs['sort'](_0x27d937[_0x371a('0x26')][_0x371a('0x2f')]);_0x2e01e5[_0x371a('0x30')]=qs['filters'](_['pick'](_0x27d937[_0x371a('0x26')],_0x35c2f4['filters']));if(_0x27d937[_0x371a('0x26')][_0x371a('0x35')]){_0x2e01e5['where']=_[_0x371a('0x34')](_0x2e01e5[_0x371a('0x30')],{'$or':_[_0x371a('0x36')](_0x2e01e5[_0x371a('0x2a')],function(_0x2f7838){var _0x1c1e28={};_0x1c1e28[_0x2f7838]={'$like':'%'+_0x27d937[_0x371a('0x26')][_0x371a('0x35')]+'%'};return _0x1c1e28;})});}_0x2e01e5=_['merge']({},_0x2e01e5,_0x27d937[_0x371a('0x37')]);return _0x348e7f[_0x371a('0x4a')](_0x2e01e5);}})['then'](function(_0x2cf385){if(_0x2cf385){_0x16fbae=_0x2cf385[_0x371a('0x2c')];if(!_0x27d937[_0x371a('0x26')]['hasOwnProperty'](_0x371a('0x2d'))){_0x2e01e5[_0x371a('0x15')]=qs[_0x371a('0x15')](_0x27d937[_0x371a('0x26')][_0x371a('0x15')]);_0x2e01e5[_0x371a('0x14')]=qs[_0x371a('0x14')](_0x27d937[_0x371a('0x26')][_0x371a('0x14')]);}return _0x348e7f[_0x371a('0x4a')](_0x2e01e5);}})[_0x371a('0x1b')](function(_0x14d1b1){if(_0x14d1b1){return _0x14d1b1?{'count':_0x16fbae,'rows':_0x14d1b1}:null;}})['then'](respondWithResult(_0x4dc977,null))['catch'](handleError(_0x4dc977,null));};
\ No newline at end of file
+var _0xe2eb=['../../config/utils','../../config/environment','socket.io-emitter','sendStatus','status','end','json','count','offset','set','Content-Range','save','update','then','destroy','error','stack','name','send','index','rawAttributes','model','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','add','day','merge','filter','options','SquareProject','includeAll','findAll','rows','catch','show','params','keys','include','find','create','body','addUsers','ids','omit','removeUsers','isArray','userSquareProject:remove','emit','getUsers','findOne','User','pick','map','fast-json-patch','request-promise','moment','util','path','sox','to-csv','jsforce','desk.js','papaparse','../../components/parsers/qs','api'];(function(_0x41ee6a,_0x3af48f){var _0x2a76c7=function(_0x2cddf4){while(--_0x2cddf4){_0x41ee6a['push'](_0x41ee6a['shift']());}};_0x2a76c7(++_0x3af48f);}(_0xe2eb,0x1c2));var _0xbe2e=function(_0x188dbe,_0x434b1c){_0x188dbe=_0x188dbe-0x0;var _0x3a0c2d=_0xe2eb[_0x188dbe];return _0x3a0c2d;};'use strict';var jsonpatch=require(_0xbe2e('0x0'));var rp=require(_0xbe2e('0x1'));var moment=require(_0xbe2e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xbe2e('0x3'));var path=require(_0xbe2e('0x4'));var sox=require(_0xbe2e('0x5'));var csv=require(_0xbe2e('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xbe2e('0x7'));var deskjs=require(_0xbe2e('0x8'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xbe2e('0x9'));var qs=require(_0xbe2e('0xa'));var logger=require('../../config/logger')(_0xbe2e('0xb'));var utils=require(_0xbe2e('0xc'));var config=require(_0xbe2e('0xd'));var db=require('../../mysqldb')['db'];var socket=require(_0xbe2e('0xe'))({'host':'localhost','port':0x18eb});require('./squareProject.socket')['register'](socket);function respondWithStatusCode(_0x107ca1,_0x91c3f9){_0x91c3f9=_0x91c3f9||0xcc;return function(_0x3aaf38){if(_0x3aaf38){return _0x107ca1[_0xbe2e('0xf')](_0x91c3f9);}return _0x107ca1[_0xbe2e('0x10')](_0x91c3f9)[_0xbe2e('0x11')]();};}function respondWithResult(_0x4fe7c8,_0x3bda16){_0x3bda16=_0x3bda16||0xc8;return function(_0x5331f7){if(_0x5331f7){return _0x4fe7c8[_0xbe2e('0x10')](_0x3bda16)[_0xbe2e('0x12')](_0x5331f7);}};}function respondWithFilteredResult(_0x367e11,_0x4a1c1c){return function(_0x4faa2f){if(_0x4faa2f){var _0x56dae0=_0x4faa2f[_0xbe2e('0x13')],_0x461864=_0x4a1c1c[_0xbe2e('0x14')],_0xf46b3d=_0x4a1c1c['offset']+_0x4a1c1c['limit'],_0x287507;if(_0xf46b3d>=_0x56dae0){_0xf46b3d=_0x56dae0;_0x287507=0xc8;}else{_0x287507=0xce;}_0x367e11[_0xbe2e('0x10')](_0x287507);return _0x367e11[_0xbe2e('0x15')](_0xbe2e('0x16'),_0x461864+'-'+_0xf46b3d+'/'+_0x56dae0)[_0xbe2e('0x12')](_0x4faa2f);}return null;};}function patchUpdates(_0x27ab4e){return function(_0x5c6381){try{jsonpatch['apply'](_0x5c6381,_0x27ab4e,!![]);}catch(_0x3116e0){return BPromise['reject'](_0x3116e0);}return _0x5c6381[_0xbe2e('0x17')]();};}function saveUpdates(_0x3a20e5,_0xd3db0d){return function(_0x56e5db){if(_0x56e5db){return _0x56e5db[_0xbe2e('0x18')](_0x3a20e5)[_0xbe2e('0x19')](function(_0x65df09){return _0x65df09;});}return null;};}function removeEntity(_0x307903,_0xef481f){return function(_0x29a46c){if(_0x29a46c){return _0x29a46c[_0xbe2e('0x1a')]()[_0xbe2e('0x19')](function(){_0x307903[_0xbe2e('0x10')](0xcc)['end']();});}};}function handleEntityNotFound(_0x53c2c5,_0x11362e){return function(_0x337bfb){if(!_0x337bfb){_0x53c2c5[_0xbe2e('0xf')](0x194);}return _0x337bfb;};}function handleError(_0x57ea57,_0x202a5f){_0x202a5f=_0x202a5f||0x1f4;return function(_0x5edeae){logger[_0xbe2e('0x1b')](_0x5edeae[_0xbe2e('0x1c')]);if(_0x5edeae[_0xbe2e('0x1d')]){delete _0x5edeae['name'];}_0x57ea57[_0xbe2e('0x10')](_0x202a5f)[_0xbe2e('0x1e')](_0x5edeae);};}exports[_0xbe2e('0x1f')]=function(_0x1e7a6e,_0x227783){var _0x497700={},_0x3e719e={},_0x11e785={'count':0x0,'rows':[]};var _0x13dec0=db['SquareProject'][_0xbe2e('0x20')];_0x3e719e[_0xbe2e('0x21')]=_['keys'](_0x13dec0);var _0x5a2f88={'dateStart':_0x1e7a6e[_0xbe2e('0x22')][_0xbe2e('0x23')],'dateEnd':_0x1e7a6e[_0xbe2e('0x22')][_0xbe2e('0x24')]};delete _0x1e7a6e[_0xbe2e('0x22')]['dateStart'];delete _0x1e7a6e[_0xbe2e('0x22')][_0xbe2e('0x24')];_0x3e719e[_0xbe2e('0x22')]=_['keys'](_0x1e7a6e['query']);_0x3e719e[_0xbe2e('0x25')]=_[_0xbe2e('0x26')](_0x3e719e['model'],_0x3e719e[_0xbe2e('0x22')]);_0x497700[_0xbe2e('0x27')]=_[_0xbe2e('0x26')](_0x3e719e[_0xbe2e('0x21')],qs['fields'](_0x1e7a6e[_0xbe2e('0x22')][_0xbe2e('0x28')]));_0x497700[_0xbe2e('0x27')]=_0x497700[_0xbe2e('0x27')][_0xbe2e('0x29')]?_0x497700[_0xbe2e('0x27')]:_0x3e719e[_0xbe2e('0x21')];if(!_0x1e7a6e[_0xbe2e('0x22')][_0xbe2e('0x2a')](_0xbe2e('0x2b'))){_0x497700[_0xbe2e('0x2c')]=qs[_0xbe2e('0x2c')](_0x1e7a6e[_0xbe2e('0x22')][_0xbe2e('0x2c')]);_0x497700[_0xbe2e('0x14')]=qs[_0xbe2e('0x14')](_0x1e7a6e[_0xbe2e('0x22')][_0xbe2e('0x14')]);}_0x497700[_0xbe2e('0x2d')]=qs[_0xbe2e('0x2e')](_0x1e7a6e[_0xbe2e('0x22')]['sort']);_0x497700[_0xbe2e('0x2f')]=qs[_0xbe2e('0x25')](_['pick'](_0x1e7a6e[_0xbe2e('0x22')],_0x3e719e['filters']));if(_0x5a2f88['dateStart']){if(_0x5a2f88[_0xbe2e('0x24')]){_0x5a2f88[_0xbe2e('0x24')]=moment(_0x5a2f88[_0xbe2e('0x24')])[_0xbe2e('0x30')](0x1,_0xbe2e('0x31'));}else{_0x5a2f88['dateEnd']=moment(_0x5a2f88[_0xbe2e('0x23')])[_0xbe2e('0x30')](0x1,_0xbe2e('0x31'));}_[_0xbe2e('0x32')](_0x497700['where'],{'createdAt':{'$gte':_0x5a2f88[_0xbe2e('0x23')],'$lte':_0x5a2f88[_0xbe2e('0x24')]}});}if(_0x1e7a6e[_0xbe2e('0x22')][_0xbe2e('0x33')]){_0x497700[_0xbe2e('0x2f')]=_[_0xbe2e('0x32')](_0x497700[_0xbe2e('0x2f')],{'$or':_['map'](_0x497700[_0xbe2e('0x27')],function(_0x2147ba){var _0x49a7ba={};_0x49a7ba[_0x2147ba]={'$like':'%'+_0x1e7a6e[_0xbe2e('0x22')][_0xbe2e('0x33')]+'%'};return _0x49a7ba;})});}_0x497700=_[_0xbe2e('0x32')]({},_0x497700,_0x1e7a6e[_0xbe2e('0x34')]);var _0x56d5f0={'where':_0x497700[_0xbe2e('0x2f')]};return db[_0xbe2e('0x35')][_0xbe2e('0x13')](_0x56d5f0)[_0xbe2e('0x19')](function(_0x5de56f){_0x11e785['count']=_0x5de56f;if(_0x1e7a6e['query'][_0xbe2e('0x36')]){_0x497700['include']=[{'all':!![]}];}return db[_0xbe2e('0x35')][_0xbe2e('0x37')](_0x497700);})['then'](function(_0x55f438){_0x11e785[_0xbe2e('0x38')]=_0x55f438;return _0x11e785;})['then'](respondWithFilteredResult(_0x227783,_0x497700))[_0xbe2e('0x39')](handleError(_0x227783,null));};exports[_0xbe2e('0x3a')]=function(_0x31028c,_0x2a1740){var _0x443c70={'raw':![],'where':{'id':_0x31028c[_0xbe2e('0x3b')]['id']}},_0x46952={};_0x46952[_0xbe2e('0x21')]=_['keys'](db[_0xbe2e('0x35')][_0xbe2e('0x20')]);_0x46952[_0xbe2e('0x22')]=_[_0xbe2e('0x3c')](_0x31028c[_0xbe2e('0x22')]);_0x46952[_0xbe2e('0x25')]=_[_0xbe2e('0x26')](_0x46952[_0xbe2e('0x21')],_0x46952['query']);_0x443c70[_0xbe2e('0x27')]=_[_0xbe2e('0x26')](_0x46952[_0xbe2e('0x21')],qs[_0xbe2e('0x28')](_0x31028c['query'][_0xbe2e('0x28')]));_0x443c70[_0xbe2e('0x27')]=_0x443c70['attributes'][_0xbe2e('0x29')]?_0x443c70[_0xbe2e('0x27')]:_0x46952[_0xbe2e('0x21')];if(_0x31028c['query']['includeAll']){_0x443c70[_0xbe2e('0x3d')]=[{'all':!![]}];}_0x443c70=_[_0xbe2e('0x32')]({},_0x443c70,_0x31028c['options']);return db[_0xbe2e('0x35')][_0xbe2e('0x3e')](_0x443c70)[_0xbe2e('0x19')](handleEntityNotFound(_0x2a1740,null))[_0xbe2e('0x19')](respondWithResult(_0x2a1740,null))['catch'](handleError(_0x2a1740,null));};exports[_0xbe2e('0x3f')]=function(_0x3784ad,_0x180c15){return db[_0xbe2e('0x35')][_0xbe2e('0x3f')](_0x3784ad[_0xbe2e('0x40')],{})[_0xbe2e('0x19')](respondWithResult(_0x180c15,0xc9))[_0xbe2e('0x39')](handleError(_0x180c15,null));};exports['update']=function(_0x5abc09,_0x46a68d){if(_0x5abc09[_0xbe2e('0x40')]['id']){delete _0x5abc09[_0xbe2e('0x40')]['id'];}return db[_0xbe2e('0x35')]['find']({'where':{'id':_0x5abc09[_0xbe2e('0x3b')]['id']}})[_0xbe2e('0x19')](handleEntityNotFound(_0x46a68d,null))[_0xbe2e('0x19')](saveUpdates(_0x5abc09['body'],null))['then'](respondWithResult(_0x46a68d,null))[_0xbe2e('0x39')](handleError(_0x46a68d,null));};exports[_0xbe2e('0x1a')]=function(_0x23abe8,_0x43b818){return db['SquareProject'][_0xbe2e('0x3e')]({'where':{'id':_0x23abe8[_0xbe2e('0x3b')]['id']}})['then'](handleEntityNotFound(_0x43b818,null))[_0xbe2e('0x19')](removeEntity(_0x43b818,null))[_0xbe2e('0x39')](handleError(_0x43b818,null));};exports[_0xbe2e('0x41')]=function(_0xd64c7a,_0x2f8747,_0x5159e3){return db[_0xbe2e('0x35')][_0xbe2e('0x3e')]({'where':{'id':_0xd64c7a[_0xbe2e('0x3b')]['id']}})['then'](handleEntityNotFound(_0x2f8747,null))[_0xbe2e('0x19')](function(_0x573ba0){if(_0x573ba0){return _0x573ba0[_0xbe2e('0x41')](_0xd64c7a[_0xbe2e('0x40')][_0xbe2e('0x42')],_[_0xbe2e('0x43')](_0xd64c7a['body'],['ids','id'])||{});}})[_0xbe2e('0x19')](respondWithResult(_0x2f8747,null))[_0xbe2e('0x39')](handleError(_0x2f8747,null));};exports[_0xbe2e('0x44')]=function(_0x8c55cc,_0x5aa9d5,_0x9665b4){var _0x30da8c;return db[_0xbe2e('0x35')][_0xbe2e('0x3e')]({'where':{'id':_0x8c55cc[_0xbe2e('0x3b')]['id']}})[_0xbe2e('0x19')](handleEntityNotFound(_0x5aa9d5,null))[_0xbe2e('0x19')](function(_0x3ed938){if(_0x3ed938){return _0x3ed938[_0xbe2e('0x44')](_0x8c55cc['query'][_0xbe2e('0x42')])['then'](function(_0x47b847){if(_[_0xbe2e('0x45')](_0x8c55cc['query'][_0xbe2e('0x42')])){for(var _0x1c2367=0x0;_0x1c2367<_0x8c55cc['query'][_0xbe2e('0x42')][_0xbe2e('0x29')];_0x1c2367+=0x1){socket['emit'](_0xbe2e('0x46'),{'UserId':_0x8c55cc[_0xbe2e('0x22')]['ids'][_0x1c2367],'SquareProjectId':_0x8c55cc[_0xbe2e('0x3b')]['id']});}}else{socket[_0xbe2e('0x47')](_0xbe2e('0x46'),{'UserId':_0x8c55cc['query']['ids'],'SquareProjectId':_0x8c55cc['params']['id']});}});}})['then'](respondWithStatusCode(_0x5aa9d5,null))[_0xbe2e('0x39')](handleError(_0x5aa9d5,null));};exports[_0xbe2e('0x48')]=function(_0x4f510d,_0x7d7412,_0x37475b){var _0x3090a6={};var _0x28300c={};var _0x1fd29a;var _0xb46547;return db[_0xbe2e('0x35')][_0xbe2e('0x49')]({'where':{'id':_0x4f510d['params']['id']}})[_0xbe2e('0x19')](handleEntityNotFound(_0x7d7412,null))[_0xbe2e('0x19')](function(_0x1a7bbb){if(_0x1a7bbb){_0x1fd29a=_0x1a7bbb;_0x28300c[_0xbe2e('0x21')]=_[_0xbe2e('0x3c')](db[_0xbe2e('0x4a')][_0xbe2e('0x20')]);_0x28300c['query']=_['keys'](_0x4f510d['query']);_0x28300c[_0xbe2e('0x25')]=_[_0xbe2e('0x26')](_0x28300c[_0xbe2e('0x21')],_0x28300c[_0xbe2e('0x22')]);_0x3090a6['attributes']=_[_0xbe2e('0x26')](_0x28300c[_0xbe2e('0x21')],qs[_0xbe2e('0x28')](_0x4f510d[_0xbe2e('0x22')][_0xbe2e('0x28')]));_0x3090a6[_0xbe2e('0x27')]=_0x3090a6[_0xbe2e('0x27')][_0xbe2e('0x29')]?_0x3090a6['attributes']:_0x28300c[_0xbe2e('0x21')];_0x3090a6['order']=qs[_0xbe2e('0x2e')](_0x4f510d[_0xbe2e('0x22')][_0xbe2e('0x2e')]);_0x3090a6[_0xbe2e('0x2f')]=qs[_0xbe2e('0x25')](_[_0xbe2e('0x4b')](_0x4f510d[_0xbe2e('0x22')],_0x28300c[_0xbe2e('0x25')]));if(_0x4f510d['query']['filter']){_0x3090a6[_0xbe2e('0x2f')]=_[_0xbe2e('0x32')](_0x3090a6[_0xbe2e('0x2f')],{'$or':_[_0xbe2e('0x4c')](_0x3090a6[_0xbe2e('0x27')],function(_0x44a64f){var _0x17aa2e={};_0x17aa2e[_0x44a64f]={'$like':'%'+_0x4f510d[_0xbe2e('0x22')][_0xbe2e('0x33')]+'%'};return _0x17aa2e;})});}_0x3090a6=_[_0xbe2e('0x32')]({},_0x3090a6,_0x4f510d[_0xbe2e('0x34')]);return _0x1fd29a['getUsers'](_0x3090a6);}})['then'](function(_0x20e77){if(_0x20e77){_0xb46547=_0x20e77['length'];if(!_0x4f510d[_0xbe2e('0x22')][_0xbe2e('0x2a')](_0xbe2e('0x2b'))){_0x3090a6[_0xbe2e('0x2c')]=qs[_0xbe2e('0x2c')](_0x4f510d[_0xbe2e('0x22')][_0xbe2e('0x2c')]);_0x3090a6['offset']=qs[_0xbe2e('0x14')](_0x4f510d[_0xbe2e('0x22')][_0xbe2e('0x14')]);}return _0x1fd29a[_0xbe2e('0x48')](_0x3090a6);}})[_0xbe2e('0x19')](function(_0x3878a3){if(_0x3878a3){return _0x3878a3?{'count':_0xb46547,'rows':_0x3878a3}:null;}})[_0xbe2e('0x19')](respondWithResult(_0x7d7412,null))[_0xbe2e('0x39')](handleError(_0x7d7412,null));};
\ No newline at end of file
index ccba560..da5188f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2059=['setMaxListeners','save','update','remove','emit','hasOwnProperty','events','SquareProject'];(function(_0x5589d4,_0x4e28f2){var _0x33847f=function(_0x24f8ca){while(--_0x24f8ca){_0x5589d4['push'](_0x5589d4['shift']());}};_0x33847f(++_0x4e28f2);}(_0x2059,0xf6));var _0x9205=function(_0x4ce028,_0x526d4b){_0x4ce028=_0x4ce028-0x0;var _0x583d0c=_0x2059[_0x4ce028];return _0x583d0c;};'use strict';var EventEmitter=require(_0x9205('0x0'));var SquareProject=require('../../mysqldb')['db'][_0x9205('0x1')];var SquareProjectEvents=new EventEmitter();SquareProjectEvents[_0x9205('0x2')](0x0);var events={'afterCreate':_0x9205('0x3'),'afterUpdate':_0x9205('0x4'),'afterDestroy':_0x9205('0x5')};function emitEvent(_0x5014a4){return function(_0x46ef8d,_0x3609c1,_0x4407dc){SquareProjectEvents[_0x9205('0x6')](_0x5014a4+':'+_0x46ef8d['id'],_0x46ef8d);SquareProjectEvents[_0x9205('0x6')](_0x5014a4,_0x46ef8d);_0x4407dc(null);};}for(var e in events){if(events[_0x9205('0x7')](e)){var event=events[e];SquareProject['hook'](e,emitEvent(event));}}module['exports']=SquareProjectEvents;
\ No newline at end of file
+var _0x14dd=['save','update','remove','emit','hasOwnProperty','hook','SquareProject','setMaxListeners'];(function(_0x3a0c9f,_0x171e05){var _0x24fd65=function(_0x43667e){while(--_0x43667e){_0x3a0c9f['push'](_0x3a0c9f['shift']());}};_0x24fd65(++_0x171e05);}(_0x14dd,0x19e));var _0xd14d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x14dd[_0x3dd15e];return _0x231fd0;};'use strict';var EventEmitter=require('events');var SquareProject=require('../../mysqldb')['db'][_0xd14d('0x0')];var SquareProjectEvents=new EventEmitter();SquareProjectEvents[_0xd14d('0x1')](0x0);var events={'afterCreate':_0xd14d('0x2'),'afterUpdate':_0xd14d('0x3'),'afterDestroy':_0xd14d('0x4')};function emitEvent(_0x33bb0c){return function(_0x570317,_0x1c9e9d,_0x53cbb1){SquareProjectEvents[_0xd14d('0x5')](_0x33bb0c+':'+_0x570317['id'],_0x570317);SquareProjectEvents['emit'](_0x33bb0c,_0x570317);_0x53cbb1(null);};}for(var e in events){if(events[_0xd14d('0x6')](e)){var event=events[e];SquareProject[_0xd14d('0x7')](e,emitEvent(event));}}module['exports']=SquareProjectEvents;
\ No newline at end of file
index 8143b59..21e0984 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd3e7=['bluebird','request-promise','./squareProject.attributes','exports','define','SquareProject','square_projects','lodash','util','api'];(function(_0xdc4996,_0x15bedc){var _0x20fbb9=function(_0x47c811){while(--_0x47c811){_0xdc4996['push'](_0xdc4996['shift']());}};_0x20fbb9(++_0x15bedc);}(_0xd3e7,0x1d3));var _0x7d3e=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xd3e7[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x7d3e('0x0'));var util=require(_0x7d3e('0x1'));var logger=require('../../config/logger')(_0x7d3e('0x2'));var moment=require('moment');var BPromise=require(_0x7d3e('0x3'));var rp=require(_0x7d3e('0x4'));var attributes=require(_0x7d3e('0x5'));module[_0x7d3e('0x6')]=function(_0x355447,_0x19129c){return _0x355447[_0x7d3e('0x7')](_0x7d3e('0x8'),attributes,{'tableName':_0x7d3e('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8b13=['exports','define','SquareProject','square_projects','lodash','util','../../config/logger','api','moment','bluebird','./squareProject.attributes'];(function(_0x1c9f23,_0x38b024){var _0x58a46a=function(_0x574888){while(--_0x574888){_0x1c9f23['push'](_0x1c9f23['shift']());}};_0x58a46a(++_0x38b024);}(_0x8b13,0x1d2));var _0x38b1=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x8b13[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x38b1('0x0'));var util=require(_0x38b1('0x1'));var logger=require(_0x38b1('0x2'))(_0x38b1('0x3'));var moment=require(_0x38b1('0x4'));var BPromise=require(_0x38b1('0x5'));var rp=require('request-promise');var attributes=require(_0x38b1('0x6'));module[_0x38b1('0x7')]=function(_0x3fdd2b,_0x13f1c9){return _0x3fdd2b[_0x38b1('0x8')](_0x38b1('0x9'),attributes,{'tableName':_0x38b1('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1135253..cdb77c9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x909d=['../../config/environment','client','http','socket.io-emitter','./squareProject.socket','register','request','then','info','SquareProject,\x20%s,\x20%s','request\x20sent','debug','SquareProject,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','ShowSquareProject','SquareProject','find','raw','options','where','attributes','include','model','map','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils'];(function(_0x2a319f,_0x3ea13e){var _0x4931e0=function(_0x62a1a8){while(--_0x62a1a8){_0x2a319f['push'](_0x2a319f['shift']());}};_0x4931e0(++_0x3ea13e);}(_0x909d,0x170));var _0xd909=function(_0x13b02f,_0x462a53){_0x13b02f=_0x13b02f-0x0;var _0x12e9a6=_0x909d[_0x13b02f];return _0x12e9a6;};'use strict';var _=require('lodash');var util=require(_0xd909('0x0'));var moment=require(_0xd909('0x1'));var BPromise=require(_0xd909('0x2'));var rs=require(_0xd909('0x3'));var fs=require('fs');var db=require(_0xd909('0x4'))['db'];var utils=require(_0xd909('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0xd909('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xd909('0x7')][_0xd909('0x8')]({'port':0x232a});var socket=require(_0xd909('0x9'))({'host':'localhost','port':0x18eb});require(_0xd909('0xa'))[_0xd909('0xb')](socket);function respondWithRpcPromise(_0x41d544,_0x5b853e,_0x31c803){return new BPromise(function(_0xe79209,_0x4c416c){return client[_0xd909('0xc')](_0x41d544,_0x31c803)[_0xd909('0xd')](function(_0x3cb01a){logger[_0xd909('0xe')](_0xd909('0xf'),_0x5b853e,_0xd909('0x10'));logger[_0xd909('0x11')](_0xd909('0x12'),_0x5b853e,_0xd909('0x10'),JSON[_0xd909('0x13')](_0x3cb01a));if(_0x3cb01a[_0xd909('0x14')]){if(_0x3cb01a[_0xd909('0x14')][_0xd909('0x15')]===0x1f4){logger[_0xd909('0x14')](_0xd909('0xf'),_0x5b853e,_0x3cb01a['error'][_0xd909('0x16')]);return _0x4c416c(_0x3cb01a['error'][_0xd909('0x16')]);}logger[_0xd909('0x14')](_0xd909('0xf'),_0x5b853e,_0x3cb01a[_0xd909('0x14')][_0xd909('0x16')]);return _0xe79209(_0x3cb01a[_0xd909('0x14')][_0xd909('0x16')]);}else{logger[_0xd909('0xe')](_0xd909('0xf'),_0x5b853e,_0xd909('0x10'));_0xe79209(_0x3cb01a['result'][_0xd909('0x16')]);}})[_0xd909('0x17')](function(_0x11a530){logger[_0xd909('0x14')](_0xd909('0xf'),_0x5b853e,_0x11a530);_0x4c416c(_0x11a530);});});}exports[_0xd909('0x18')]=function(_0x2f68cd){var _0x490db2=this;return new Promise(function(_0x2ca8dd,_0x4ff5cc){return db[_0xd909('0x19')][_0xd909('0x1a')]({'raw':_0x2f68cd['options']?_0x2f68cd['options'][_0xd909('0x1b')]===undefined?!![]:![]:!![],'where':_0x2f68cd['options']?_0x2f68cd[_0xd909('0x1c')][_0xd909('0x1d')]||null:null,'attributes':_0x2f68cd[_0xd909('0x1c')]?_0x2f68cd[_0xd909('0x1c')][_0xd909('0x1e')]||null:null,'include':_0x2f68cd[_0xd909('0x1c')]?_0x2f68cd[_0xd909('0x1c')][_0xd909('0x1f')]?_['map'](_0x2f68cd[_0xd909('0x1c')][_0xd909('0x1f')],function(_0x268574){return{'model':db[_0x268574[_0xd909('0x20')]],'as':_0x268574['as'],'attributes':_0x268574[_0xd909('0x1e')],'include':_0x268574[_0xd909('0x1f')]?_[_0xd909('0x21')](_0x268574[_0xd909('0x1f')],function(_0x59a71d){return{'model':db[_0x59a71d['model']],'as':_0x59a71d['as'],'attributes':_0x59a71d['attributes'],'include':_0x59a71d[_0xd909('0x1f')]?_[_0xd909('0x21')](_0x59a71d[_0xd909('0x1f')],function(_0x413021){return{'model':db[_0x413021['model']],'as':_0x413021['as'],'attributes':_0x413021['attributes']};}):[]};}):[]};}):[]:[]})[_0xd909('0xd')](function(_0x438bbd){logger['info']('ShowSquareProject',_0x2f68cd);logger['debug'](_0xd909('0x18'),_0x2f68cd,JSON[_0xd909('0x13')](_0x438bbd));_0x2ca8dd(_0x438bbd);})[_0xd909('0x17')](function(_0x1660ef){logger['error'](_0xd909('0x18'),_0x1660ef[_0xd909('0x16')],_0x2f68cd);_0x4ff5cc(_0x490db2[_0xd909('0x14')](0x1f4,_0x1660ef[_0xd909('0x16')]));});});};
\ No newline at end of file
+var _0x873a=['SquareProject,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','ShowSquareProject','SquareProject','find','options','raw','map','include','model','attributes','then','debug','lodash','util','moment','bluebird','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','localhost','./squareProject.socket','register','request','info','SquareProject,\x20%s,\x20%s'];(function(_0x1191be,_0x355e3d){var _0x3b27dc=function(_0x1fd866){while(--_0x1fd866){_0x1191be['push'](_0x1191be['shift']());}};_0x3b27dc(++_0x355e3d);}(_0x873a,0x7c));var _0xa873=function(_0x261eb4,_0x25bb9f){_0x261eb4=_0x261eb4-0x0;var _0x24522b=_0x873a[_0x261eb4];return _0x24522b;};'use strict';var _=require(_0xa873('0x0'));var util=require(_0xa873('0x1'));var moment=require(_0xa873('0x2'));var BPromise=require(_0xa873('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xa873('0x4'));var logger=require(_0xa873('0x5'))('rpc');var config=require(_0xa873('0x6'));var jayson=require(_0xa873('0x7'));var client=jayson[_0xa873('0x8')][_0xa873('0x9')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0xa873('0xa'),'port':0x18eb});require(_0xa873('0xb'))[_0xa873('0xc')](socket);function respondWithRpcPromise(_0x5953fa,_0xbfddd2,_0x52a6c9){return new BPromise(function(_0x1268f9,_0x40747f){return client[_0xa873('0xd')](_0x5953fa,_0x52a6c9)['then'](function(_0x54eedc){logger[_0xa873('0xe')](_0xa873('0xf'),_0xbfddd2,'request\x20sent');logger['debug'](_0xa873('0x10'),_0xbfddd2,'request\x20sent',JSON[_0xa873('0x11')](_0x54eedc));if(_0x54eedc[_0xa873('0x12')]){if(_0x54eedc['error'][_0xa873('0x13')]===0x1f4){logger['error'](_0xa873('0xf'),_0xbfddd2,_0x54eedc['error']['message']);return _0x40747f(_0x54eedc['error'][_0xa873('0x14')]);}logger[_0xa873('0x12')](_0xa873('0xf'),_0xbfddd2,_0x54eedc['error'][_0xa873('0x14')]);return _0x1268f9(_0x54eedc['error']['message']);}else{logger['info']('SquareProject,\x20%s,\x20%s',_0xbfddd2,_0xa873('0x15'));_0x1268f9(_0x54eedc[_0xa873('0x16')][_0xa873('0x14')]);}})[_0xa873('0x17')](function(_0x2a032c){logger['error'](_0xa873('0xf'),_0xbfddd2,_0x2a032c);_0x40747f(_0x2a032c);});});}exports[_0xa873('0x18')]=function(_0x7842c9){var _0x5af5a9=this;return new Promise(function(_0x3a8e24,_0x490597){return db[_0xa873('0x19')][_0xa873('0x1a')]({'raw':_0x7842c9['options']?_0x7842c9[_0xa873('0x1b')][_0xa873('0x1c')]===undefined?!![]:![]:!![],'where':_0x7842c9[_0xa873('0x1b')]?_0x7842c9[_0xa873('0x1b')]['where']||null:null,'attributes':_0x7842c9[_0xa873('0x1b')]?_0x7842c9[_0xa873('0x1b')]['attributes']||null:null,'include':_0x7842c9['options']?_0x7842c9[_0xa873('0x1b')]['include']?_[_0xa873('0x1d')](_0x7842c9[_0xa873('0x1b')][_0xa873('0x1e')],function(_0x4ef0a5){return{'model':db[_0x4ef0a5[_0xa873('0x1f')]],'as':_0x4ef0a5['as'],'attributes':_0x4ef0a5['attributes'],'include':_0x4ef0a5[_0xa873('0x1e')]?_[_0xa873('0x1d')](_0x4ef0a5[_0xa873('0x1e')],function(_0x2f4c95){return{'model':db[_0x2f4c95[_0xa873('0x1f')]],'as':_0x2f4c95['as'],'attributes':_0x2f4c95[_0xa873('0x20')],'include':_0x2f4c95[_0xa873('0x1e')]?_[_0xa873('0x1d')](_0x2f4c95[_0xa873('0x1e')],function(_0x3b3ff1){return{'model':db[_0x3b3ff1[_0xa873('0x1f')]],'as':_0x3b3ff1['as'],'attributes':_0x3b3ff1[_0xa873('0x20')]};}):[]};}):[]};}):[]:[]})[_0xa873('0x21')](function(_0x22e2af){logger[_0xa873('0xe')](_0xa873('0x18'),_0x7842c9);logger[_0xa873('0x22')](_0xa873('0x18'),_0x7842c9,JSON[_0xa873('0x11')](_0x22e2af));_0x3a8e24(_0x22e2af);})[_0xa873('0x17')](function(_0x1aa071){logger[_0xa873('0x12')]('ShowSquareProject',_0x1aa071[_0xa873('0x14')],_0x7842c9);_0x490597(_0x5af5a9[_0xa873('0x12')](0x1f4,_0x1aa071['message']));});});};
\ No newline at end of file
index 814a79c..598f509 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7cda=['save','remove','update','removeListener','register','squareProject:'];(function(_0x1d03f1,_0x7f2edf){var _0x40c77e=function(_0x2f1025){while(--_0x2f1025){_0x1d03f1['push'](_0x1d03f1['shift']());}};_0x40c77e(++_0x7f2edf);}(_0x7cda,0xf6));var _0xa7cd=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7cda[_0x3dd15e];return _0x231fd0;};'use strict';var SquareProjectEvents=require('./squareProject.events');var events=[_0xa7cd('0x0'),_0xa7cd('0x1'),_0xa7cd('0x2')];function createListener(_0x530979,_0x3511eb){return function(_0x5230b9){_0x3511eb['emit'](_0x530979,_0x5230b9);};}function removeListener(_0x232be5,_0xdb8470){return function(){SquareProjectEvents[_0xa7cd('0x3')](_0x232be5,_0xdb8470);};}exports[_0xa7cd('0x4')]=function(_0x5f20a2){for(var _0x3d43e6=0x0,_0x5c2b39=events['length'];_0x3d43e6<_0x5c2b39;_0x3d43e6++){var _0x6525a=events[_0x3d43e6];var _0x4a9e39=createListener(_0xa7cd('0x5')+_0x6525a,_0x5f20a2);SquareProjectEvents['on'](_0x6525a,_0x4a9e39);}};
\ No newline at end of file
+var _0xb63f=['emit','removeListener','length','remove','update'];(function(_0x382afc,_0x188545){var _0x503954=function(_0x2f3406){while(--_0x2f3406){_0x382afc['push'](_0x382afc['shift']());}};_0x503954(++_0x188545);}(_0xb63f,0xa3));var _0xfb63=function(_0x172948,_0x4262cc){_0x172948=_0x172948-0x0;var _0x4aeaa9=_0xb63f[_0x172948];return _0x4aeaa9;};'use strict';var SquareProjectEvents=require('./squareProject.events');var events=['save',_0xfb63('0x0'),_0xfb63('0x1')];function createListener(_0x153899,_0x281c86){return function(_0x39f1d8){_0x281c86[_0xfb63('0x2')](_0x153899,_0x39f1d8);};}function removeListener(_0x2fac8f,_0x3fe487){return function(){SquareProjectEvents[_0xfb63('0x3')](_0x2fac8f,_0x3fe487);};}exports['register']=function(_0x39cc2c){for(var _0x4cd271=0x0,_0x284c59=events[_0xfb63('0x4')];_0x4cd271<_0x284c59;_0x4cd271++){var _0x51bc4f=events[_0x4cd271];var _0x495392=createListener('squareProject:'+_0x51bc4f,_0x39cc2c);SquareProjectEvents['on'](_0x51bc4f,_0x495392);}};
\ No newline at end of file
index fab2075..4d59783 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1cd2=['util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareRecording.controller','get','isAuthenticated','index','/:id','show','download','post','create','put','delete','destroy','exports','multer'];(function(_0x5a776b,_0x46f785){var _0xbbef59=function(_0x38313e){while(--_0x38313e){_0x5a776b['push'](_0x5a776b['shift']());}};_0xbbef59(++_0x46f785);}(_0x1cd2,0xb3));var _0x21cd=function(_0xc074ab,_0x1794ad){_0xc074ab=_0xc074ab-0x0;var _0x38f5ef=_0x1cd2[_0xc074ab];return _0x38f5ef;};'use strict';var multer=require(_0x21cd('0x0'));var util=require(_0x21cd('0x1'));var path=require(_0x21cd('0x2'));var express=require('express');var router=express[_0x21cd('0x3')]();var auth=require(_0x21cd('0x4'));var interaction=require(_0x21cd('0x5'));var config=require(_0x21cd('0x6'));var controller=require(_0x21cd('0x7'));router[_0x21cd('0x8')]('/',auth[_0x21cd('0x9')](),controller[_0x21cd('0xa')]);router[_0x21cd('0x8')](_0x21cd('0xb'),auth[_0x21cd('0x9')](),controller[_0x21cd('0xc')]);router[_0x21cd('0x8')]('/:id/download',auth[_0x21cd('0x9')](),controller[_0x21cd('0xd')]);router[_0x21cd('0xe')]('/',auth['isAuthenticated'](),controller[_0x21cd('0xf')]);router[_0x21cd('0x10')](_0x21cd('0xb'),auth[_0x21cd('0x9')](),controller['update']);router[_0x21cd('0x11')]('/:id',auth[_0x21cd('0x9')](),controller[_0x21cd('0x12')]);module[_0x21cd('0x13')]=router;
\ No newline at end of file
+var _0xdf17=['../../components/interaction/service','../../config/environment','get','index','/:id','isAuthenticated','/:id/download','download','post','create','update','delete','destroy','path','../../components/auth/service'];(function(_0xfedc72,_0x292f02){var _0x2c7c78=function(_0x12fbf1){while(--_0x12fbf1){_0xfedc72['push'](_0xfedc72['shift']());}};_0x2c7c78(++_0x292f02);}(_0xdf17,0x1ed));var _0x7df1=function(_0x3635ce,_0x33a6f9){_0x3635ce=_0x3635ce-0x0;var _0x97ecd0=_0xdf17[_0x3635ce];return _0x97ecd0;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x7df1('0x0'));var express=require('express');var router=express['Router']();var auth=require(_0x7df1('0x1'));var interaction=require(_0x7df1('0x2'));var config=require(_0x7df1('0x3'));var controller=require('./squareRecording.controller');router[_0x7df1('0x4')]('/',auth['isAuthenticated'](),controller[_0x7df1('0x5')]);router['get'](_0x7df1('0x6'),auth[_0x7df1('0x7')](),controller['show']);router[_0x7df1('0x4')](_0x7df1('0x8'),auth[_0x7df1('0x7')](),controller[_0x7df1('0x9')]);router[_0x7df1('0xa')]('/',auth[_0x7df1('0x7')](),controller[_0x7df1('0xb')]);router['put'](_0x7df1('0x6'),auth[_0x7df1('0x7')](),controller[_0x7df1('0xc')]);router[_0x7df1('0xd')](_0x7df1('0x6'),auth[_0x7df1('0x7')](),controller[_0x7df1('0xe')]);module['exports']=router;
\ No newline at end of file
index d38d82e..8c2a026 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e56=['sequelize','exports','STRING'];(function(_0x51f30a,_0x3da844){var _0x3927d0=function(_0x29ff51){while(--_0x29ff51){_0x51f30a['push'](_0x51f30a['shift']());}};_0x3927d0(++_0x3da844);}(_0x3e56,0x132));var _0x63e5=function(_0x2aecb2,_0x343312){_0x2aecb2=_0x2aecb2-0x0;var _0x3ebb80=_0x3e56[_0x2aecb2];return _0x3ebb80;};'use strict';var Sequelize=require(_0x63e5('0x0'));module[_0x63e5('0x1')]={'uniqueid':{'type':Sequelize['STRING']},'callerid':{'type':Sequelize[_0x63e5('0x2')]},'calleridname':{'type':Sequelize[_0x63e5('0x2')]},'context':{'type':Sequelize[_0x63e5('0x2')]},'extension':{'type':Sequelize[_0x63e5('0x2')]},'priority':{'type':Sequelize[_0x63e5('0x2')]},'accountcode':{'type':Sequelize[_0x63e5('0x2')]},'dnid':{'type':Sequelize[_0x63e5('0x2')]},'projectName':{'type':Sequelize[_0x63e5('0x2')]},'saveName':{'type':Sequelize['STRING']},'filename':{'type':Sequelize['STRING']},'savePath':{'type':Sequelize[_0x63e5('0x2')]}};
\ No newline at end of file
+var _0x632d=['STRING','exports'];(function(_0x18c570,_0x111717){var _0x1293f1=function(_0x518796){while(--_0x518796){_0x18c570['push'](_0x18c570['shift']());}};_0x1293f1(++_0x111717);}(_0x632d,0xbf));var _0xd632=function(_0x38f5f8,_0xefe164){_0x38f5f8=_0x38f5f8-0x0;var _0x34e820=_0x632d[_0x38f5f8];return _0x34e820;};'use strict';var Sequelize=require('sequelize');module[_0xd632('0x0')]={'uniqueid':{'type':Sequelize[_0xd632('0x1')]},'callerid':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0xd632('0x1')]},'context':{'type':Sequelize[_0xd632('0x1')]},'extension':{'type':Sequelize[_0xd632('0x1')]},'priority':{'type':Sequelize[_0xd632('0x1')]},'accountcode':{'type':Sequelize['STRING']},'dnid':{'type':Sequelize[_0xd632('0x1')]},'projectName':{'type':Sequelize[_0xd632('0x1')]},'saveName':{'type':Sequelize[_0xd632('0x1')]},'filename':{'type':Sequelize['STRING']},'savePath':{'type':Sequelize[_0xd632('0x1')]}};
\ No newline at end of file
index dfd2d4c..099080e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['filename','extname','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','Content-Range','update','stack','send','index','SquareRecording','rawAttributes','query','dateEnd','keys','filters','intersection','model','fields','attributes','length','hasOwnProperty','limit','order','sort','pick','dateStart','add','day','merge','where','map','filter','options','then','includeAll','include','findAll','rows','show','catch','create','body','find','params','destroy','download','type','uniqueid','format','%s.cypher','value','existsSync','savePath','secrets','recording','SquareRecording\x20not\x20found'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x008c,0x188));var _0xc008=function(_0x28b83a,_0x401d6f){_0x28b83a=_0x28b83a-0x0;var _0x5985d9=_0x008c[_0x28b83a];return _0x5985d9;};'use strict';var jsonpatch=require(_0xc008('0x0'));var rp=require(_0xc008('0x1'));var moment=require(_0xc008('0x2'));var BPromise=require(_0xc008('0x3'));var Mustache=require(_0xc008('0x4'));var util=require('util');var path=require(_0xc008('0x5'));var sox=require(_0xc008('0x6'));var csv=require(_0xc008('0x7'));var ejs=require(_0xc008('0x8'));var fs=require('fs');var _=require(_0xc008('0x9'));var squel=require(_0xc008('0xa'));var crypto=require(_0xc008('0xb'));var jsforce=require(_0xc008('0xc'));var deskjs=require(_0xc008('0xd'));var toCsv=require('to-csv');var querystring=require(_0xc008('0xe'));var Papa=require('papaparse');var qs=require(_0xc008('0xf'));var logger=require('../../config/logger')('api');var utils=require(_0xc008('0x10'));var config=require(_0xc008('0x11'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x51ba7d,_0x543eb8){_0x543eb8=_0x543eb8||0xcc;return function(_0x1eacfa){if(_0x1eacfa){return _0x51ba7d[_0xc008('0x12')](_0x543eb8);}return _0x51ba7d['status'](_0x543eb8)[_0xc008('0x13')]();};}function respondWithResult(_0x332fd4,_0x2ea200){_0x2ea200=_0x2ea200||0xc8;return function(_0x2a5b4e){if(_0x2a5b4e){return _0x332fd4[_0xc008('0x14')](_0x2ea200)[_0xc008('0x15')](_0x2a5b4e);}};}function respondWithFilteredResult(_0x69726e,_0x593f7a){return function(_0x560e28){if(_0x560e28){var _0x33f44c=_0x560e28[_0xc008('0x16')],_0x50c1ab=_0x593f7a[_0xc008('0x17')],_0x25e13f=_0x593f7a[_0xc008('0x17')]+_0x593f7a['limit'],_0x4584e1;if(_0x25e13f>=_0x33f44c){_0x25e13f=_0x33f44c;_0x4584e1=0xc8;}else{_0x4584e1=0xce;}_0x69726e['status'](_0x4584e1);return _0x69726e['set'](_0xc008('0x18'),_0x50c1ab+'-'+_0x25e13f+'/'+_0x33f44c)[_0xc008('0x15')](_0x560e28);}return null;};}function patchUpdates(_0x3cafe3){return function(_0x3eb12a){try{jsonpatch['apply'](_0x3eb12a,_0x3cafe3,!![]);}catch(_0x53b06e){return BPromise['reject'](_0x53b06e);}return _0x3eb12a['save']();};}function saveUpdates(_0x46042b,_0x462af5){return function(_0x501137){if(_0x501137){return _0x501137[_0xc008('0x19')](_0x46042b)['then'](function(_0x4bd611){return _0x4bd611;});}return null;};}function removeEntity(_0x543e5d,_0x50261c){return function(_0x5754a0){if(_0x5754a0){return _0x5754a0['destroy']()['then'](function(){_0x543e5d['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x5a58bd,_0x13a263){return function(_0x4777a6){if(!_0x4777a6){_0x5a58bd[_0xc008('0x12')](0x194);}return _0x4777a6;};}function handleError(_0x415af3,_0x11cc75){_0x11cc75=_0x11cc75||0x1f4;return function(_0x110128){logger['error'](_0x110128[_0xc008('0x1a')]);if(_0x110128['name']){delete _0x110128['name'];}_0x415af3[_0xc008('0x14')](_0x11cc75)[_0xc008('0x1b')](_0x110128);};}exports[_0xc008('0x1c')]=function(_0x3cb28c,_0x5410f5){var _0x48582b={},_0x5de1e9={},_0x3f7b07={'count':0x0,'rows':[]};var _0x15dade=db[_0xc008('0x1d')][_0xc008('0x1e')];_0x5de1e9['model']=_['keys'](_0x15dade);var _0x4fce9c={'dateStart':_0x3cb28c['query']['dateStart'],'dateEnd':_0x3cb28c[_0xc008('0x1f')][_0xc008('0x20')]};delete _0x3cb28c[_0xc008('0x1f')]['dateStart'];delete _0x3cb28c[_0xc008('0x1f')][_0xc008('0x20')];_0x5de1e9[_0xc008('0x1f')]=_[_0xc008('0x21')](_0x3cb28c['query']);_0x5de1e9[_0xc008('0x22')]=_[_0xc008('0x23')](_0x5de1e9['model'],_0x5de1e9['query']);_0x48582b['attributes']=_[_0xc008('0x23')](_0x5de1e9[_0xc008('0x24')],qs[_0xc008('0x25')](_0x3cb28c[_0xc008('0x1f')][_0xc008('0x25')]));_0x48582b[_0xc008('0x26')]=_0x48582b[_0xc008('0x26')][_0xc008('0x27')]?_0x48582b[_0xc008('0x26')]:_0x5de1e9[_0xc008('0x24')];if(!_0x3cb28c[_0xc008('0x1f')][_0xc008('0x28')]('nolimit')){_0x48582b[_0xc008('0x29')]=qs[_0xc008('0x29')](_0x3cb28c['query'][_0xc008('0x29')]);_0x48582b[_0xc008('0x17')]=qs[_0xc008('0x17')](_0x3cb28c[_0xc008('0x1f')][_0xc008('0x17')]);}_0x48582b[_0xc008('0x2a')]=qs[_0xc008('0x2b')](_0x3cb28c[_0xc008('0x1f')][_0xc008('0x2b')]);_0x48582b['where']=qs[_0xc008('0x22')](_[_0xc008('0x2c')](_0x3cb28c[_0xc008('0x1f')],_0x5de1e9[_0xc008('0x22')]));if(_0x4fce9c[_0xc008('0x2d')]){if(_0x4fce9c[_0xc008('0x20')]){_0x4fce9c[_0xc008('0x20')]=moment(_0x4fce9c['dateEnd'])[_0xc008('0x2e')](0x1,_0xc008('0x2f'));}else{_0x4fce9c['dateEnd']=moment(_0x4fce9c[_0xc008('0x2d')])[_0xc008('0x2e')](0x1,'day');}_[_0xc008('0x30')](_0x48582b[_0xc008('0x31')],{'createdAt':{'$gte':_0x4fce9c[_0xc008('0x2d')],'$lte':_0x4fce9c['dateEnd']}});}if(_0x3cb28c['query']['filter']){_0x48582b[_0xc008('0x31')]=_['merge'](_0x48582b[_0xc008('0x31')],{'$or':_[_0xc008('0x32')](_0x48582b[_0xc008('0x26')],function(_0x440459){var _0x3148e1={};_0x3148e1[_0x440459]={'$like':'%'+_0x3cb28c[_0xc008('0x1f')][_0xc008('0x33')]+'%'};return _0x3148e1;})});}_0x48582b=_[_0xc008('0x30')]({},_0x48582b,_0x3cb28c[_0xc008('0x34')]);var _0x387dfd={'where':_0x48582b[_0xc008('0x31')]};return db[_0xc008('0x1d')][_0xc008('0x16')](_0x387dfd)[_0xc008('0x35')](function(_0x4cace5){_0x3f7b07[_0xc008('0x16')]=_0x4cace5;if(_0x3cb28c[_0xc008('0x1f')][_0xc008('0x36')]){_0x48582b[_0xc008('0x37')]=[{'all':!![]}];}return db['SquareRecording'][_0xc008('0x38')](_0x48582b);})[_0xc008('0x35')](function(_0xc8cb91){_0x3f7b07[_0xc008('0x39')]=_0xc8cb91;return _0x3f7b07;})[_0xc008('0x35')](respondWithFilteredResult(_0x5410f5,_0x48582b))['catch'](handleError(_0x5410f5,null));};exports[_0xc008('0x3a')]=function(_0x3323f4,_0x3794b0){var _0x3e9a99={'raw':!![],'where':{'id':_0x3323f4['params']['id']}},_0x7279e8={};_0x7279e8[_0xc008('0x24')]=_[_0xc008('0x21')](db[_0xc008('0x1d')][_0xc008('0x1e')]);_0x7279e8['query']=_[_0xc008('0x21')](_0x3323f4[_0xc008('0x1f')]);_0x7279e8[_0xc008('0x22')]=_['intersection'](_0x7279e8[_0xc008('0x24')],_0x7279e8['query']);_0x3e9a99[_0xc008('0x26')]=_['intersection'](_0x7279e8[_0xc008('0x24')],qs[_0xc008('0x25')](_0x3323f4['query'][_0xc008('0x25')]));_0x3e9a99[_0xc008('0x26')]=_0x3e9a99[_0xc008('0x26')]['length']?_0x3e9a99[_0xc008('0x26')]:_0x7279e8[_0xc008('0x24')];if(_0x3323f4[_0xc008('0x1f')][_0xc008('0x36')]){_0x3e9a99[_0xc008('0x37')]=[{'all':!![]}];}_0x3e9a99=_[_0xc008('0x30')]({},_0x3e9a99,_0x3323f4['options']);return db['SquareRecording']['find'](_0x3e9a99)[_0xc008('0x35')](handleEntityNotFound(_0x3794b0,null))[_0xc008('0x35')](respondWithResult(_0x3794b0,null))[_0xc008('0x3b')](handleError(_0x3794b0,null));};exports[_0xc008('0x3c')]=function(_0x25289f,_0x24f6a4){return db[_0xc008('0x1d')][_0xc008('0x3c')](_0x25289f['body'],{})['then'](respondWithResult(_0x24f6a4,0xc9))['catch'](handleError(_0x24f6a4,null));};exports[_0xc008('0x19')]=function(_0x2651cf,_0x158eae){if(_0x2651cf['body']['id']){delete _0x2651cf[_0xc008('0x3d')]['id'];}return db[_0xc008('0x1d')][_0xc008('0x3e')]({'where':{'id':_0x2651cf[_0xc008('0x3f')]['id']}})[_0xc008('0x35')](handleEntityNotFound(_0x158eae,null))[_0xc008('0x35')](saveUpdates(_0x2651cf[_0xc008('0x3d')],null))[_0xc008('0x35')](respondWithResult(_0x158eae,null))[_0xc008('0x3b')](handleError(_0x158eae,null));};exports[_0xc008('0x40')]=function(_0x52c444,_0x4c63d4){return db[_0xc008('0x1d')]['find']({'where':{'id':_0x52c444[_0xc008('0x3f')]['id']}})[_0xc008('0x35')](handleEntityNotFound(_0x4c63d4,null))[_0xc008('0x35')](removeEntity(_0x4c63d4,null))['catch'](handleError(_0x4c63d4,null));};exports[_0xc008('0x41')]=function(_0x32b435,_0xee64,_0x8b9775){var _0x750cc9=require('../../components/encryptor');var _0x3a7b3b=![];var _0x27b022={};if(_0x32b435['query'][_0xc008('0x42')]&&_0x32b435[_0xc008('0x1f')]['type']==='uniqueid'){_0x27b022[_0xc008('0x43')]=_0x32b435[_0xc008('0x3f')]['id'];}else{_0x27b022['id']=_0x32b435[_0xc008('0x3f')]['id'];}return db[_0xc008('0x1d')][_0xc008('0x3e')]({'where':_0x27b022,'attributes':['id','savePath','filename'],'raw':!![]})[_0xc008('0x35')](handleEntityNotFound(_0xee64,null))['then'](function(_0x3d7cce){if(_0x3d7cce){var _0x25d351=util[_0xc008('0x44')](_0xc008('0x45'),_0x3d7cce[_0xc008('0x46')]);if(fs[_0xc008('0x47')](_0x25d351)){_0x3a7b3b=!![];return _0x750cc9['decryptFile'](_0x25d351,_0x3d7cce[_0xc008('0x48')],config[_0xc008('0x49')][_0xc008('0x4a')])[_0xc008('0x35')](function(){return _0x3d7cce;});}return _0x3d7cce;}})[_0xc008('0x35')](function(_0x5aa385){if(_0x5aa385){if(!fs[_0xc008('0x47')](_0x5aa385['savePath'])){throw new db['Sequelize']['ValidationError'](_0xc008('0x4b'));}if(_0x5aa385[_0xc008('0x4c')]){return _0xee64[_0xc008('0x41')](_0x5aa385['savePath'],_0x5aa385[_0xc008('0x4c')]+path[_0xc008('0x4d')](_0x5aa385[_0xc008('0x48')]),function(){if(_0x3a7b3b){fs['unlink'](_0x5aa385[_0xc008('0x48')]);}});}else{return _0xee64[_0xc008('0x41')](_0x5aa385[_0xc008('0x48')],function(_0x1b5a22){if(_0x3a7b3b){fs['unlink'](_0x5aa385[_0xc008('0x48')]);}});}}})['catch'](handleError(_0xee64,null));};
\ No newline at end of file
+var _0xb903=['limit','set','Content-Range','apply','reject','save','update','destroy','then','error','stack','name','SquareRecording','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','fields','length','attributes','hasOwnProperty','sort','where','add','day','merge','filter','map','count','includeAll','include','findAll','rows','catch','show','params','options','create','body','find','../../components/encryptor','type','uniqueid','savePath','filename','format','%s.cypher','existsSync','decryptFile','secrets','recording','Sequelize','ValidationError','SquareRecording\x20not\x20found','download','extname','unlink','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','sendStatus','end','status','json','offset'];(function(_0x2deb1a,_0x3cbdb4){var _0x44723a=function(_0xd67e36){while(--_0xd67e36){_0x2deb1a['push'](_0x2deb1a['shift']());}};_0x44723a(++_0x3cbdb4);}(_0xb903,0x185));var _0x3b90=function(_0x37b4fa,_0x2b90ae){_0x37b4fa=_0x37b4fa-0x0;var _0x570340=_0xb903[_0x37b4fa];return _0x570340;};'use strict';var jsonpatch=require(_0x3b90('0x0'));var rp=require(_0x3b90('0x1'));var moment=require(_0x3b90('0x2'));var BPromise=require(_0x3b90('0x3'));var Mustache=require('mustache');var util=require(_0x3b90('0x4'));var path=require(_0x3b90('0x5'));var sox=require(_0x3b90('0x6'));var csv=require(_0x3b90('0x7'));var ejs=require(_0x3b90('0x8'));var fs=require('fs');var _=require(_0x3b90('0x9'));var squel=require(_0x3b90('0xa'));var crypto=require('crypto');var jsforce=require(_0x3b90('0xb'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x3b90('0xc'));var Papa=require(_0x3b90('0xd'));var qs=require(_0x3b90('0xe'));var logger=require(_0x3b90('0xf'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x56261b,_0x55db3f){_0x55db3f=_0x55db3f||0xcc;return function(_0x336913){if(_0x336913){return _0x56261b[_0x3b90('0x10')](_0x55db3f);}return _0x56261b['status'](_0x55db3f)[_0x3b90('0x11')]();};}function respondWithResult(_0x233509,_0x4bb8f4){_0x4bb8f4=_0x4bb8f4||0xc8;return function(_0x45b75f){if(_0x45b75f){return _0x233509[_0x3b90('0x12')](_0x4bb8f4)[_0x3b90('0x13')](_0x45b75f);}};}function respondWithFilteredResult(_0x4badcb,_0x5447df){return function(_0x58c4d1){if(_0x58c4d1){var _0x542cb3=_0x58c4d1['count'],_0x492d39=_0x5447df['offset'],_0x3a0a55=_0x5447df[_0x3b90('0x14')]+_0x5447df[_0x3b90('0x15')],_0x2c72fb;if(_0x3a0a55>=_0x542cb3){_0x3a0a55=_0x542cb3;_0x2c72fb=0xc8;}else{_0x2c72fb=0xce;}_0x4badcb[_0x3b90('0x12')](_0x2c72fb);return _0x4badcb[_0x3b90('0x16')](_0x3b90('0x17'),_0x492d39+'-'+_0x3a0a55+'/'+_0x542cb3)['json'](_0x58c4d1);}return null;};}function patchUpdates(_0x494970){return function(_0xd83280){try{jsonpatch[_0x3b90('0x18')](_0xd83280,_0x494970,!![]);}catch(_0x4e9120){return BPromise[_0x3b90('0x19')](_0x4e9120);}return _0xd83280[_0x3b90('0x1a')]();};}function saveUpdates(_0x11ad7d,_0x131f3f){return function(_0x4f388b){if(_0x4f388b){return _0x4f388b[_0x3b90('0x1b')](_0x11ad7d)['then'](function(_0xd8d873){return _0xd8d873;});}return null;};}function removeEntity(_0x231690,_0x535894){return function(_0x39ae7c){if(_0x39ae7c){return _0x39ae7c[_0x3b90('0x1c')]()[_0x3b90('0x1d')](function(){_0x231690[_0x3b90('0x12')](0xcc)[_0x3b90('0x11')]();});}};}function handleEntityNotFound(_0x43deca,_0x3bc7d5){return function(_0x2f4270){if(!_0x2f4270){_0x43deca[_0x3b90('0x10')](0x194);}return _0x2f4270;};}function handleError(_0x3e5bb8,_0x4e2175){_0x4e2175=_0x4e2175||0x1f4;return function(_0x20b06a){logger[_0x3b90('0x1e')](_0x20b06a[_0x3b90('0x1f')]);if(_0x20b06a[_0x3b90('0x20')]){delete _0x20b06a[_0x3b90('0x20')];}_0x3e5bb8[_0x3b90('0x12')](_0x4e2175)['send'](_0x20b06a);};}exports['index']=function(_0x40955a,_0x29d472){var _0x103324={},_0x2ffa1a={},_0x583523={'count':0x0,'rows':[]};var _0x414462=db[_0x3b90('0x21')][_0x3b90('0x22')];_0x2ffa1a['model']=_[_0x3b90('0x23')](_0x414462);var _0x138d79={'dateStart':_0x40955a[_0x3b90('0x24')][_0x3b90('0x25')],'dateEnd':_0x40955a[_0x3b90('0x24')][_0x3b90('0x26')]};delete _0x40955a['query'][_0x3b90('0x25')];delete _0x40955a['query'][_0x3b90('0x26')];_0x2ffa1a[_0x3b90('0x24')]=_[_0x3b90('0x23')](_0x40955a[_0x3b90('0x24')]);_0x2ffa1a[_0x3b90('0x27')]=_[_0x3b90('0x28')](_0x2ffa1a[_0x3b90('0x29')],_0x2ffa1a[_0x3b90('0x24')]);_0x103324['attributes']=_['intersection'](_0x2ffa1a[_0x3b90('0x29')],qs[_0x3b90('0x2a')](_0x40955a[_0x3b90('0x24')][_0x3b90('0x2a')]));_0x103324['attributes']=_0x103324['attributes'][_0x3b90('0x2b')]?_0x103324[_0x3b90('0x2c')]:_0x2ffa1a[_0x3b90('0x29')];if(!_0x40955a['query'][_0x3b90('0x2d')]('nolimit')){_0x103324['limit']=qs[_0x3b90('0x15')](_0x40955a[_0x3b90('0x24')]['limit']);_0x103324[_0x3b90('0x14')]=qs[_0x3b90('0x14')](_0x40955a[_0x3b90('0x24')]['offset']);}_0x103324['order']=qs[_0x3b90('0x2e')](_0x40955a[_0x3b90('0x24')][_0x3b90('0x2e')]);_0x103324[_0x3b90('0x2f')]=qs['filters'](_['pick'](_0x40955a[_0x3b90('0x24')],_0x2ffa1a[_0x3b90('0x27')]));if(_0x138d79['dateStart']){if(_0x138d79['dateEnd']){_0x138d79[_0x3b90('0x26')]=moment(_0x138d79[_0x3b90('0x26')])[_0x3b90('0x30')](0x1,_0x3b90('0x31'));}else{_0x138d79['dateEnd']=moment(_0x138d79[_0x3b90('0x25')])['add'](0x1,_0x3b90('0x31'));}_[_0x3b90('0x32')](_0x103324[_0x3b90('0x2f')],{'createdAt':{'$gte':_0x138d79[_0x3b90('0x25')],'$lte':_0x138d79[_0x3b90('0x26')]}});}if(_0x40955a[_0x3b90('0x24')][_0x3b90('0x33')]){_0x103324['where']=_[_0x3b90('0x32')](_0x103324[_0x3b90('0x2f')],{'$or':_[_0x3b90('0x34')](_0x103324[_0x3b90('0x2c')],function(_0x3d6040){var _0x390952={};_0x390952[_0x3d6040]={'$like':'%'+_0x40955a[_0x3b90('0x24')][_0x3b90('0x33')]+'%'};return _0x390952;})});}_0x103324=_[_0x3b90('0x32')]({},_0x103324,_0x40955a['options']);var _0x369d0d={'where':_0x103324[_0x3b90('0x2f')]};return db[_0x3b90('0x21')][_0x3b90('0x35')](_0x369d0d)[_0x3b90('0x1d')](function(_0xb71509){_0x583523[_0x3b90('0x35')]=_0xb71509;if(_0x40955a[_0x3b90('0x24')][_0x3b90('0x36')]){_0x103324[_0x3b90('0x37')]=[{'all':!![]}];}return db[_0x3b90('0x21')][_0x3b90('0x38')](_0x103324);})[_0x3b90('0x1d')](function(_0x11285e){_0x583523[_0x3b90('0x39')]=_0x11285e;return _0x583523;})[_0x3b90('0x1d')](respondWithFilteredResult(_0x29d472,_0x103324))[_0x3b90('0x3a')](handleError(_0x29d472,null));};exports[_0x3b90('0x3b')]=function(_0x33056a,_0x37e8dd){var _0x11698a={'raw':!![],'where':{'id':_0x33056a[_0x3b90('0x3c')]['id']}},_0x4d1157={};_0x4d1157[_0x3b90('0x29')]=_[_0x3b90('0x23')](db[_0x3b90('0x21')]['rawAttributes']);_0x4d1157[_0x3b90('0x24')]=_['keys'](_0x33056a['query']);_0x4d1157[_0x3b90('0x27')]=_[_0x3b90('0x28')](_0x4d1157['model'],_0x4d1157[_0x3b90('0x24')]);_0x11698a[_0x3b90('0x2c')]=_[_0x3b90('0x28')](_0x4d1157[_0x3b90('0x29')],qs[_0x3b90('0x2a')](_0x33056a[_0x3b90('0x24')][_0x3b90('0x2a')]));_0x11698a[_0x3b90('0x2c')]=_0x11698a[_0x3b90('0x2c')]['length']?_0x11698a[_0x3b90('0x2c')]:_0x4d1157[_0x3b90('0x29')];if(_0x33056a['query'][_0x3b90('0x36')]){_0x11698a[_0x3b90('0x37')]=[{'all':!![]}];}_0x11698a=_[_0x3b90('0x32')]({},_0x11698a,_0x33056a[_0x3b90('0x3d')]);return db[_0x3b90('0x21')]['find'](_0x11698a)['then'](handleEntityNotFound(_0x37e8dd,null))[_0x3b90('0x1d')](respondWithResult(_0x37e8dd,null))['catch'](handleError(_0x37e8dd,null));};exports[_0x3b90('0x3e')]=function(_0xd5817,_0x330002){return db[_0x3b90('0x21')][_0x3b90('0x3e')](_0xd5817['body'],{})['then'](respondWithResult(_0x330002,0xc9))[_0x3b90('0x3a')](handleError(_0x330002,null));};exports[_0x3b90('0x1b')]=function(_0x9e2ee5,_0x5d7333){if(_0x9e2ee5[_0x3b90('0x3f')]['id']){delete _0x9e2ee5[_0x3b90('0x3f')]['id'];}return db[_0x3b90('0x21')][_0x3b90('0x40')]({'where':{'id':_0x9e2ee5[_0x3b90('0x3c')]['id']}})[_0x3b90('0x1d')](handleEntityNotFound(_0x5d7333,null))[_0x3b90('0x1d')](saveUpdates(_0x9e2ee5[_0x3b90('0x3f')],null))[_0x3b90('0x1d')](respondWithResult(_0x5d7333,null))['catch'](handleError(_0x5d7333,null));};exports[_0x3b90('0x1c')]=function(_0x407784,_0x2b5b6f){return db['SquareRecording'][_0x3b90('0x40')]({'where':{'id':_0x407784['params']['id']}})[_0x3b90('0x1d')](handleEntityNotFound(_0x2b5b6f,null))[_0x3b90('0x1d')](removeEntity(_0x2b5b6f,null))[_0x3b90('0x3a')](handleError(_0x2b5b6f,null));};exports['download']=function(_0x2a3fe8,_0x1ec976,_0x5334b5){var _0x499ec1=require(_0x3b90('0x41'));var _0x24337e=![];var _0x1eb16e={};if(_0x2a3fe8[_0x3b90('0x24')]['type']&&_0x2a3fe8['query'][_0x3b90('0x42')]===_0x3b90('0x43')){_0x1eb16e[_0x3b90('0x43')]=_0x2a3fe8[_0x3b90('0x3c')]['id'];}else{_0x1eb16e['id']=_0x2a3fe8[_0x3b90('0x3c')]['id'];}return db[_0x3b90('0x21')][_0x3b90('0x40')]({'where':_0x1eb16e,'attributes':['id',_0x3b90('0x44'),_0x3b90('0x45')],'raw':!![]})['then'](handleEntityNotFound(_0x1ec976,null))[_0x3b90('0x1d')](function(_0x13427d){if(_0x13427d){var _0x54243d=util[_0x3b90('0x46')](_0x3b90('0x47'),_0x13427d['value']);if(fs[_0x3b90('0x48')](_0x54243d)){_0x24337e=!![];return _0x499ec1[_0x3b90('0x49')](_0x54243d,_0x13427d[_0x3b90('0x44')],config[_0x3b90('0x4a')][_0x3b90('0x4b')])[_0x3b90('0x1d')](function(){return _0x13427d;});}return _0x13427d;}})[_0x3b90('0x1d')](function(_0x47c9d1){if(_0x47c9d1){if(!fs[_0x3b90('0x48')](_0x47c9d1[_0x3b90('0x44')])){throw new db[(_0x3b90('0x4c'))][(_0x3b90('0x4d'))](_0x3b90('0x4e'));}if(_0x47c9d1[_0x3b90('0x45')]){return _0x1ec976[_0x3b90('0x4f')](_0x47c9d1[_0x3b90('0x44')],_0x47c9d1[_0x3b90('0x45')]+path[_0x3b90('0x50')](_0x47c9d1[_0x3b90('0x44')]),function(){if(_0x24337e){fs[_0x3b90('0x51')](_0x47c9d1[_0x3b90('0x44')]);}});}else{return _0x1ec976[_0x3b90('0x4f')](_0x47c9d1[_0x3b90('0x44')],function(_0x5c901e){if(_0x24337e){fs[_0x3b90('0x51')](_0x47c9d1['savePath']);}});}}})[_0x3b90('0x3a')](handleError(_0x1ec976,null));};
\ No newline at end of file
index a4be564..abf0cce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x277c=['moment','bluebird','request-promise','./squareRecording.attributes','exports','SquareRecording','lodash','../../config/logger','api'];(function(_0x7efa47,_0x3e2549){var _0x37e530=function(_0x313034){while(--_0x313034){_0x7efa47['push'](_0x7efa47['shift']());}};_0x37e530(++_0x3e2549);}(_0x277c,0x153));var _0xc277=function(_0x75a29d,_0x220fa1){_0x75a29d=_0x75a29d-0x0;var _0x5f5a67=_0x277c[_0x75a29d];return _0x5f5a67;};'use strict';var _=require(_0xc277('0x0'));var util=require('util');var logger=require(_0xc277('0x1'))(_0xc277('0x2'));var moment=require(_0xc277('0x3'));var BPromise=require(_0xc277('0x4'));var rp=require(_0xc277('0x5'));var attributes=require(_0xc277('0x6'));module[_0xc277('0x7')]=function(_0x29f81d,_0x4f78ab){return _0x29f81d['define'](_0xc277('0x8'),attributes,{'tableName':'square_recordings','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2e3b=['../../config/logger','api','moment','bluebird','request-promise','./squareRecording.attributes','exports','define','square_recordings','util'];(function(_0x564643,_0x4a3e14){var _0x1b9c87=function(_0x2691e2){while(--_0x2691e2){_0x564643['push'](_0x564643['shift']());}};_0x1b9c87(++_0x4a3e14);}(_0x2e3b,0x81));var _0xb2e3=function(_0x39cedd,_0x2b833b){_0x39cedd=_0x39cedd-0x0;var _0xbb7b87=_0x2e3b[_0x39cedd];return _0xbb7b87;};'use strict';var _=require('lodash');var util=require(_0xb2e3('0x0'));var logger=require(_0xb2e3('0x1'))(_0xb2e3('0x2'));var moment=require(_0xb2e3('0x3'));var BPromise=require(_0xb2e3('0x4'));var rp=require(_0xb2e3('0x5'));var attributes=require(_0xb2e3('0x6'));module[_0xb2e3('0x7')]=function(_0x4d30d7,_0x2bc877){return _0x4d30d7[_0xb2e3('0x8')]('SquareRecording',attributes,{'tableName':_0xb2e3('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 0d46a8c..bced264 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2502=['then','info','SquareRecording,\x20%s,\x20%s','request\x20sent','SquareRecording,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','SquareRecording','create','options','raw','CreateSquareRecording','debug','stringify','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x2502,0xf9));var _0x2250=function(_0x17fe61,_0x2f43b7){_0x17fe61=_0x17fe61-0x0;var _0x2b3cd1=_0x2502[_0x17fe61];return _0x2b3cd1;};'use strict';var _=require(_0x2250('0x0'));var util=require(_0x2250('0x1'));var moment=require('moment');var BPromise=require(_0x2250('0x2'));var rs=require(_0x2250('0x3'));var fs=require('fs');var db=require(_0x2250('0x4'))['db'];var utils=require(_0x2250('0x5'));var logger=require('../../config/logger')(_0x2250('0x6'));var config=require(_0x2250('0x7'));var jayson=require(_0x2250('0x8'));var client=jayson[_0x2250('0x9')][_0x2250('0xa')]({'port':0x232a});function respondWithRpcPromise(_0xf4961b,_0xd03fd0,_0x222c9b){return new BPromise(function(_0x498d5d,_0x191566){return client[_0x2250('0xb')](_0xf4961b,_0x222c9b)[_0x2250('0xc')](function(_0x5c5ae3){logger[_0x2250('0xd')](_0x2250('0xe'),_0xd03fd0,_0x2250('0xf'));logger['debug'](_0x2250('0x10'),_0xd03fd0,_0x2250('0xf'),JSON['stringify'](_0x5c5ae3));if(_0x5c5ae3[_0x2250('0x11')]){if(_0x5c5ae3['error'][_0x2250('0x12')]===0x1f4){logger[_0x2250('0x11')](_0x2250('0xe'),_0xd03fd0,_0x5c5ae3[_0x2250('0x11')]['message']);return _0x191566(_0x5c5ae3[_0x2250('0x11')][_0x2250('0x13')]);}logger[_0x2250('0x11')](_0x2250('0xe'),_0xd03fd0,_0x5c5ae3[_0x2250('0x11')]['message']);return _0x498d5d(_0x5c5ae3[_0x2250('0x11')]['message']);}else{logger[_0x2250('0xd')](_0x2250('0xe'),_0xd03fd0,_0x2250('0xf'));_0x498d5d(_0x5c5ae3[_0x2250('0x14')]['message']);}})[_0x2250('0x15')](function(_0xabc126){logger[_0x2250('0x11')](_0x2250('0xe'),_0xd03fd0,_0xabc126);_0x191566(_0xabc126);});});}exports['CreateSquareRecording']=function(_0x4c9017){var _0x59775b=this;return new Promise(function(_0x3bcbcf,_0x3065bb){return db[_0x2250('0x16')][_0x2250('0x17')](_0x4c9017['body'],{'raw':_0x4c9017[_0x2250('0x18')]?_0x4c9017['options'][_0x2250('0x19')]===undefined?!![]:![]:!![]})[_0x2250('0xc')](function(_0x260a89){logger[_0x2250('0xd')](_0x2250('0x1a'),_0x4c9017);logger[_0x2250('0x1b')](_0x2250('0x1a'),_0x4c9017,JSON[_0x2250('0x1c')](_0x260a89));_0x3bcbcf(_0x260a89);})['catch'](function(_0x169c1b){logger['error'](_0x2250('0x1a'),_0x169c1b[_0x2250('0x13')],_0x4c9017);_0x3065bb(_0x59775b[_0x2250('0x11')](0x1f4,_0x169c1b[_0x2250('0x13')]));});});};
\ No newline at end of file
+var _0x5279=['../../config/environment','jayson/promise','client','request','then','info','SquareRecording,\x20%s,\x20%s','request\x20sent','debug','SquareRecording,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','CreateSquareRecording','SquareRecording','create','body','options','raw','lodash','util','moment','bluebird','../../config/utils','../../config/logger'];(function(_0x59b9f3,_0x591906){var _0x180c20=function(_0x56fe15){while(--_0x56fe15){_0x59b9f3['push'](_0x59b9f3['shift']());}};_0x180c20(++_0x591906);}(_0x5279,0x1d6));var _0x9527=function(_0x4dcc2d,_0x422839){_0x4dcc2d=_0x4dcc2d-0x0;var _0x1bbd79=_0x5279[_0x4dcc2d];return _0x1bbd79;};'use strict';var _=require(_0x9527('0x0'));var util=require(_0x9527('0x1'));var moment=require(_0x9527('0x2'));var BPromise=require(_0x9527('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x9527('0x4'));var logger=require(_0x9527('0x5'))('rpc');var config=require(_0x9527('0x6'));var jayson=require(_0x9527('0x7'));var client=jayson[_0x9527('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1a4485,_0x54523a,_0xb96be1){return new BPromise(function(_0x406527,_0x451d1e){return client[_0x9527('0x9')](_0x1a4485,_0xb96be1)[_0x9527('0xa')](function(_0xf615f1){logger[_0x9527('0xb')](_0x9527('0xc'),_0x54523a,_0x9527('0xd'));logger[_0x9527('0xe')](_0x9527('0xf'),_0x54523a,_0x9527('0xd'),JSON[_0x9527('0x10')](_0xf615f1));if(_0xf615f1[_0x9527('0x11')]){if(_0xf615f1['error'][_0x9527('0x12')]===0x1f4){logger[_0x9527('0x11')]('SquareRecording,\x20%s,\x20%s',_0x54523a,_0xf615f1[_0x9527('0x11')][_0x9527('0x13')]);return _0x451d1e(_0xf615f1[_0x9527('0x11')][_0x9527('0x13')]);}logger[_0x9527('0x11')](_0x9527('0xc'),_0x54523a,_0xf615f1[_0x9527('0x11')][_0x9527('0x13')]);return _0x406527(_0xf615f1[_0x9527('0x11')]['message']);}else{logger[_0x9527('0xb')](_0x9527('0xc'),_0x54523a,_0x9527('0xd'));_0x406527(_0xf615f1[_0x9527('0x14')][_0x9527('0x13')]);}})[_0x9527('0x15')](function(_0x23725e){logger['error'](_0x9527('0xc'),_0x54523a,_0x23725e);_0x451d1e(_0x23725e);});});}exports[_0x9527('0x16')]=function(_0x21b5c4){var _0x4e522f=this;return new Promise(function(_0x5513eb,_0x1c8c22){return db[_0x9527('0x17')][_0x9527('0x18')](_0x21b5c4[_0x9527('0x19')],{'raw':_0x21b5c4[_0x9527('0x1a')]?_0x21b5c4[_0x9527('0x1a')][_0x9527('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0x11d443){logger[_0x9527('0xb')](_0x9527('0x16'),_0x21b5c4);logger['debug'](_0x9527('0x16'),_0x21b5c4,JSON[_0x9527('0x10')](_0x11d443));_0x5513eb(_0x11d443);})[_0x9527('0x15')](function(_0xd83704){logger[_0x9527('0x11')](_0x9527('0x16'),_0xd83704[_0x9527('0x13')],_0x21b5c4);_0x1c8c22(_0x4e522f['error'](0x1f4,_0xd83704[_0x9527('0x13')]));});});};
\ No newline at end of file
index bb87d7b..ba67348 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfabd=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','describe','/:id','show','post','put','update','exports','multer','util','path'];(function(_0x4a9beb,_0x159482){var _0x2d4c58=function(_0x28dabf){while(--_0x28dabf){_0x4a9beb['push'](_0x4a9beb['shift']());}};_0x2d4c58(++_0x159482);}(_0xfabd,0x1d8));var _0xdfab=function(_0x5837c5,_0x1e9184){_0x5837c5=_0x5837c5-0x0;var _0x7e1be0=_0xfabd[_0x5837c5];return _0x7e1be0;};'use strict';var multer=require(_0xdfab('0x0'));var util=require(_0xdfab('0x1'));var path=require(_0xdfab('0x2'));var express=require(_0xdfab('0x3'));var router=express[_0xdfab('0x4')]();var auth=require(_0xdfab('0x5'));var interaction=require(_0xdfab('0x6'));var config=require(_0xdfab('0x7'));var controller=require('./squareReport.controller');router[_0xdfab('0x8')]('/',auth[_0xdfab('0x9')](),controller[_0xdfab('0xa')]);router[_0xdfab('0x8')](_0xdfab('0xb'),auth['isAuthenticated'](),controller[_0xdfab('0xc')]);router['get'](_0xdfab('0xd'),auth['isAuthenticated'](),controller[_0xdfab('0xe')]);router[_0xdfab('0xf')]('/',auth[_0xdfab('0x9')](),controller['create']);router[_0xdfab('0x10')](_0xdfab('0xd'),auth[_0xdfab('0x9')](),controller[_0xdfab('0x11')]);router['delete'](_0xdfab('0xd'),auth[_0xdfab('0x9')](),controller['destroy']);module[_0xdfab('0x12')]=router;
\ No newline at end of file
+var _0xfb55=['/:id','update','delete','destroy','exports','multer','path','Router','../../config/environment','./squareReport.controller','get','isAuthenticated','index','describe','show','post','create','put'];(function(_0x2a3f6d,_0x1e8838){var _0x1a7e21=function(_0xc26c1c){while(--_0xc26c1c){_0x2a3f6d['push'](_0x2a3f6d['shift']());}};_0x1a7e21(++_0x1e8838);}(_0xfb55,0x113));var _0x5fb5=function(_0x4b5f39,_0x48bc44){_0x4b5f39=_0x4b5f39-0x0;var _0x59ff78=_0xfb55[_0x4b5f39];return _0x59ff78;};'use strict';var multer=require(_0x5fb5('0x0'));var util=require('util');var path=require(_0x5fb5('0x1'));var express=require('express');var router=express[_0x5fb5('0x2')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x5fb5('0x3'));var controller=require(_0x5fb5('0x4'));router[_0x5fb5('0x5')]('/',auth[_0x5fb5('0x6')](),controller[_0x5fb5('0x7')]);router['get']('/describe',auth[_0x5fb5('0x6')](),controller[_0x5fb5('0x8')]);router[_0x5fb5('0x5')]('/:id',auth[_0x5fb5('0x6')](),controller[_0x5fb5('0x9')]);router[_0x5fb5('0xa')]('/',auth[_0x5fb5('0x6')](),controller[_0x5fb5('0xb')]);router[_0x5fb5('0xc')](_0x5fb5('0xd'),auth['isAuthenticated'](),controller[_0x5fb5('0xe')]);router[_0x5fb5('0xf')](_0x5fb5('0xd'),auth[_0x5fb5('0x6')](),controller[_0x5fb5('0x10')]);module[_0x5fb5('0x11')]=router;
\ No newline at end of file
index ac132cf..c1e7308 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xade7=['DATE','exports','STRING'];(function(_0x1e7b16,_0x4607a1){var _0x37fadc=function(_0x1fc9ce){while(--_0x1fc9ce){_0x1e7b16['push'](_0x1e7b16['shift']());}};_0x37fadc(++_0x4607a1);}(_0xade7,0x70));var _0x7ade=function(_0x2c7061,_0x324fa7){_0x2c7061=_0x2c7061-0x0;var _0x576748=_0xade7[_0x2c7061];return _0x576748;};'use strict';var Sequelize=require('sequelize');module[_0x7ade('0x0')]={'network':{'type':Sequelize[_0x7ade('0x1')]},'network_script':{'type':Sequelize[_0x7ade('0x1')]},'request':{'type':Sequelize[_0x7ade('0x1')]},'channel':{'type':Sequelize[_0x7ade('0x1')]},'language':{'type':Sequelize[_0x7ade('0x1')]},'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize['STRING']},'version':{'type':Sequelize[_0x7ade('0x1')]},'callerid':{'type':Sequelize[_0x7ade('0x1')]},'calleridname':{'type':Sequelize['STRING']},'callingpres':{'type':Sequelize[_0x7ade('0x1')]},'callingani2':{'type':Sequelize[_0x7ade('0x1')]},'callington':{'type':Sequelize[_0x7ade('0x1')]},'callingtns':{'type':Sequelize['STRING']},'dnid':{'type':Sequelize['STRING']},'rdnis':{'type':Sequelize[_0x7ade('0x1')]},'context':{'type':Sequelize[_0x7ade('0x1')]},'extension':{'type':Sequelize[_0x7ade('0x1')]},'priority':{'type':Sequelize['STRING']},'enhanced':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0x7ade('0x1')]},'threadid':{'type':Sequelize[_0x7ade('0x1')]},'project_name':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize[_0x7ade('0x2')]},'leaveAt':{'type':Sequelize['DATE']}};
\ No newline at end of file
+var _0x9825=['DATE','sequelize','exports','STRING'];(function(_0x4a321c,_0x3ab7d5){var _0x108e52=function(_0x3e5e3b){while(--_0x3e5e3b){_0x4a321c['push'](_0x4a321c['shift']());}};_0x108e52(++_0x3ab7d5);}(_0x9825,0x155));var _0x5982=function(_0x2d2cac,_0x227f0d){_0x2d2cac=_0x2d2cac-0x0;var _0xcfb71b=_0x9825[_0x2d2cac];return _0xcfb71b;};'use strict';var Sequelize=require(_0x5982('0x0'));module[_0x5982('0x1')]={'network':{'type':Sequelize['STRING']},'network_script':{'type':Sequelize[_0x5982('0x2')]},'request':{'type':Sequelize[_0x5982('0x2')]},'channel':{'type':Sequelize[_0x5982('0x2')]},'language':{'type':Sequelize[_0x5982('0x2')]},'type':{'type':Sequelize[_0x5982('0x2')]},'uniqueid':{'type':Sequelize['STRING']},'version':{'type':Sequelize[_0x5982('0x2')]},'callerid':{'type':Sequelize[_0x5982('0x2')]},'calleridname':{'type':Sequelize[_0x5982('0x2')]},'callingpres':{'type':Sequelize[_0x5982('0x2')]},'callingani2':{'type':Sequelize[_0x5982('0x2')]},'callington':{'type':Sequelize[_0x5982('0x2')]},'callingtns':{'type':Sequelize[_0x5982('0x2')]},'dnid':{'type':Sequelize[_0x5982('0x2')]},'rdnis':{'type':Sequelize['STRING']},'context':{'type':Sequelize['STRING']},'extension':{'type':Sequelize[_0x5982('0x2')]},'priority':{'type':Sequelize[_0x5982('0x2')]},'enhanced':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0x5982('0x2')]},'threadid':{'type':Sequelize[_0x5982('0x2')]},'project_name':{'type':Sequelize[_0x5982('0x2')]},'joinAt':{'type':Sequelize[_0x5982('0x3')]},'leaveAt':{'type':Sequelize[_0x5982('0x3')]}};
\ No newline at end of file
index a5dc667..dee1d0d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe14d=['../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','error','stack','name','send','index','SquareReport','model','keys','query','dateEnd','filters','intersection','attributes','fields','length','nolimit','limit','order','sort','pick','dateStart','add','merge','where','filter','map','options','includeAll','include','findAll','rows','show','params','rawAttributes','find','create','body','catch','destroy','describe','fast-json-patch','request-promise','moment','bluebird','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','api'];(function(_0x36eaaa,_0x326732){var _0x461349=function(_0x4e4180){while(--_0x4e4180){_0x36eaaa['push'](_0x36eaaa['shift']());}};_0x461349(++_0x326732);}(_0xe14d,0x1ee));var _0xde14=function(_0x543084,_0x4337f5){_0x543084=_0x543084-0x0;var _0x306a57=_0xe14d[_0x543084];return _0x306a57;};'use strict';var jsonpatch=require(_0xde14('0x0'));var rp=require(_0xde14('0x1'));var moment=require(_0xde14('0x2'));var BPromise=require(_0xde14('0x3'));var Mustache=require('mustache');var util=require(_0xde14('0x4'));var path=require(_0xde14('0x5'));var sox=require('sox');var csv=require(_0xde14('0x6'));var ejs=require(_0xde14('0x7'));var fs=require('fs');var _=require(_0xde14('0x8'));var squel=require(_0xde14('0x9'));var crypto=require(_0xde14('0xa'));var jsforce=require(_0xde14('0xb'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xde14('0xc'));var Papa=require(_0xde14('0xd'));var qs=require(_0xde14('0xe'));var logger=require(_0xde14('0xf'))(_0xde14('0x10'));var utils=require(_0xde14('0x11'));var config=require(_0xde14('0x12'));var db=require(_0xde14('0x13'))['db'];function respondWithStatusCode(_0x4b2b15,_0x1a7167){_0x1a7167=_0x1a7167||0xcc;return function(_0xe785fb){if(_0xe785fb){return _0x4b2b15[_0xde14('0x14')](_0x1a7167);}return _0x4b2b15[_0xde14('0x15')](_0x1a7167)[_0xde14('0x16')]();};}function respondWithResult(_0x30a4c4,_0x1a1c32){_0x1a1c32=_0x1a1c32||0xc8;return function(_0x3d5a29){if(_0x3d5a29){return _0x30a4c4[_0xde14('0x15')](_0x1a1c32)[_0xde14('0x17')](_0x3d5a29);}};}function respondWithFilteredResult(_0x105f96,_0x464624){return function(_0x3521d4){if(_0x3521d4){var _0x281c54=_0x3521d4[_0xde14('0x18')],_0x1489e9=_0x464624[_0xde14('0x19')],_0x54c58b=_0x464624[_0xde14('0x19')]+_0x464624['limit'],_0x584959;if(_0x54c58b>=_0x281c54){_0x54c58b=_0x281c54;_0x584959=0xc8;}else{_0x584959=0xce;}_0x105f96[_0xde14('0x15')](_0x584959);return _0x105f96[_0xde14('0x1a')](_0xde14('0x1b'),_0x1489e9+'-'+_0x54c58b+'/'+_0x281c54)[_0xde14('0x17')](_0x3521d4);}return null;};}function patchUpdates(_0x3de959){return function(_0x1b9d4b){try{jsonpatch[_0xde14('0x1c')](_0x1b9d4b,_0x3de959,!![]);}catch(_0x6f6eea){return BPromise[_0xde14('0x1d')](_0x6f6eea);}return _0x1b9d4b[_0xde14('0x1e')]();};}function saveUpdates(_0x590a8b,_0x3f5fcf){return function(_0x3bfc59){if(_0x3bfc59){return _0x3bfc59[_0xde14('0x1f')](_0x590a8b)[_0xde14('0x20')](function(_0x4ce69f){return _0x4ce69f;});}return null;};}function removeEntity(_0x394de7,_0x53e905){return function(_0x45d101){if(_0x45d101){return _0x45d101['destroy']()[_0xde14('0x20')](function(){_0x394de7[_0xde14('0x15')](0xcc)[_0xde14('0x16')]();});}};}function handleEntityNotFound(_0x1949ab,_0x39bdc5){return function(_0x11a4d9){if(!_0x11a4d9){_0x1949ab[_0xde14('0x14')](0x194);}return _0x11a4d9;};}function handleError(_0x2dd9e7,_0xdd8d59){_0xdd8d59=_0xdd8d59||0x1f4;return function(_0x163b79){logger[_0xde14('0x21')](_0x163b79[_0xde14('0x22')]);if(_0x163b79[_0xde14('0x23')]){delete _0x163b79['name'];}_0x2dd9e7[_0xde14('0x15')](_0xdd8d59)[_0xde14('0x24')](_0x163b79);};}exports[_0xde14('0x25')]=function(_0xbd05d6,_0x1bb7be){var _0x21ef15={},_0x310d75={},_0x23c735={'count':0x0,'rows':[]};var _0x1618e1=db[_0xde14('0x26')]['rawAttributes'];_0x310d75[_0xde14('0x27')]=_[_0xde14('0x28')](_0x1618e1);var _0x3eaee5={'dateStart':_0xbd05d6[_0xde14('0x29')]['dateStart'],'dateEnd':_0xbd05d6[_0xde14('0x29')][_0xde14('0x2a')]};delete _0xbd05d6[_0xde14('0x29')]['dateStart'];delete _0xbd05d6[_0xde14('0x29')]['dateEnd'];_0x310d75[_0xde14('0x29')]=_[_0xde14('0x28')](_0xbd05d6[_0xde14('0x29')]);_0x310d75[_0xde14('0x2b')]=_[_0xde14('0x2c')](_0x310d75[_0xde14('0x27')],_0x310d75[_0xde14('0x29')]);_0x21ef15[_0xde14('0x2d')]=_['intersection'](_0x310d75[_0xde14('0x27')],qs[_0xde14('0x2e')](_0xbd05d6['query'][_0xde14('0x2e')]));_0x21ef15['attributes']=_0x21ef15[_0xde14('0x2d')][_0xde14('0x2f')]?_0x21ef15[_0xde14('0x2d')]:_0x310d75[_0xde14('0x27')];if(!_0xbd05d6[_0xde14('0x29')]['hasOwnProperty'](_0xde14('0x30'))){_0x21ef15[_0xde14('0x31')]=qs['limit'](_0xbd05d6[_0xde14('0x29')][_0xde14('0x31')]);_0x21ef15[_0xde14('0x19')]=qs[_0xde14('0x19')](_0xbd05d6[_0xde14('0x29')][_0xde14('0x19')]);}_0x21ef15[_0xde14('0x32')]=qs[_0xde14('0x33')](_0xbd05d6[_0xde14('0x29')]['sort']);_0x21ef15['where']=qs[_0xde14('0x2b')](_[_0xde14('0x34')](_0xbd05d6[_0xde14('0x29')],_0x310d75[_0xde14('0x2b')]));if(_0x3eaee5[_0xde14('0x35')]){if(_0x3eaee5[_0xde14('0x2a')]){_0x3eaee5[_0xde14('0x2a')]=moment(_0x3eaee5[_0xde14('0x2a')])[_0xde14('0x36')](0x1,'day');}else{_0x3eaee5[_0xde14('0x2a')]=moment(_0x3eaee5['dateStart'])['add'](0x1,'day');}_[_0xde14('0x37')](_0x21ef15[_0xde14('0x38')],{'createdAt':{'$gte':_0x3eaee5[_0xde14('0x35')],'$lte':_0x3eaee5[_0xde14('0x2a')]}});}if(_0xbd05d6[_0xde14('0x29')][_0xde14('0x39')]){_0x21ef15[_0xde14('0x38')]=_[_0xde14('0x37')](_0x21ef15['where'],{'$or':_[_0xde14('0x3a')](_0x21ef15[_0xde14('0x2d')],function(_0x3864ff){var _0x2b3004={};_0x2b3004[_0x3864ff]={'$like':'%'+_0xbd05d6[_0xde14('0x29')][_0xde14('0x39')]+'%'};return _0x2b3004;})});}_0x21ef15=_[_0xde14('0x37')]({},_0x21ef15,_0xbd05d6[_0xde14('0x3b')]);var _0x50db0d={'where':_0x21ef15[_0xde14('0x38')]};return db[_0xde14('0x26')][_0xde14('0x18')](_0x50db0d)[_0xde14('0x20')](function(_0x4f7141){_0x23c735['count']=_0x4f7141;if(_0xbd05d6[_0xde14('0x29')][_0xde14('0x3c')]){_0x21ef15[_0xde14('0x3d')]=[{'all':!![]}];}return db[_0xde14('0x26')][_0xde14('0x3e')](_0x21ef15);})['then'](function(_0x24b02c){_0x23c735[_0xde14('0x3f')]=_0x24b02c;return _0x23c735;})[_0xde14('0x20')](respondWithFilteredResult(_0x1bb7be,_0x21ef15))['catch'](handleError(_0x1bb7be,null));};exports[_0xde14('0x40')]=function(_0x571c2c,_0x46ac22){var _0x51ace9={'raw':!![],'where':{'id':_0x571c2c[_0xde14('0x41')]['id']}},_0x102770={};_0x102770[_0xde14('0x27')]=_[_0xde14('0x28')](db[_0xde14('0x26')][_0xde14('0x42')]);_0x102770[_0xde14('0x29')]=_[_0xde14('0x28')](_0x571c2c['query']);_0x102770[_0xde14('0x2b')]=_['intersection'](_0x102770[_0xde14('0x27')],_0x102770['query']);_0x51ace9[_0xde14('0x2d')]=_[_0xde14('0x2c')](_0x102770[_0xde14('0x27')],qs[_0xde14('0x2e')](_0x571c2c[_0xde14('0x29')][_0xde14('0x2e')]));_0x51ace9[_0xde14('0x2d')]=_0x51ace9[_0xde14('0x2d')]['length']?_0x51ace9[_0xde14('0x2d')]:_0x102770[_0xde14('0x27')];if(_0x571c2c[_0xde14('0x29')][_0xde14('0x3c')]){_0x51ace9['include']=[{'all':!![]}];}_0x51ace9=_[_0xde14('0x37')]({},_0x51ace9,_0x571c2c[_0xde14('0x3b')]);return db[_0xde14('0x26')][_0xde14('0x43')](_0x51ace9)[_0xde14('0x20')](handleEntityNotFound(_0x46ac22,null))[_0xde14('0x20')](respondWithResult(_0x46ac22,null))['catch'](handleError(_0x46ac22,null));};exports[_0xde14('0x44')]=function(_0x518426,_0xa408ec){return db[_0xde14('0x26')]['create'](_0x518426[_0xde14('0x45')],{})[_0xde14('0x20')](respondWithResult(_0xa408ec,0xc9))[_0xde14('0x46')](handleError(_0xa408ec,null));};exports[_0xde14('0x1f')]=function(_0x2d05c7,_0x1c87e1){if(_0x2d05c7[_0xde14('0x45')]['id']){delete _0x2d05c7['body']['id'];}return db[_0xde14('0x26')]['find']({'where':{'id':_0x2d05c7[_0xde14('0x41')]['id']}})[_0xde14('0x20')](handleEntityNotFound(_0x1c87e1,null))[_0xde14('0x20')](saveUpdates(_0x2d05c7[_0xde14('0x45')],null))[_0xde14('0x20')](respondWithResult(_0x1c87e1,null))[_0xde14('0x46')](handleError(_0x1c87e1,null));};exports[_0xde14('0x47')]=function(_0x1f7316,_0x3495d1){return db[_0xde14('0x26')]['find']({'where':{'id':_0x1f7316[_0xde14('0x41')]['id']}})[_0xde14('0x20')](handleEntityNotFound(_0x3495d1,null))[_0xde14('0x20')](removeEntity(_0x3495d1,null))[_0xde14('0x46')](handleError(_0x3495d1,null));};exports[_0xde14('0x48')]=function(_0x4874ed,_0x3a0e32){return db['SquareReport'][_0xde14('0x48')]()[_0xde14('0x20')](respondWithResult(_0x3a0e32,null))[_0xde14('0x46')](handleError(_0x3a0e32,null));};
\ No newline at end of file
+var _0x2750=['squel','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','api','../../mysqldb','sendStatus','status','end','offset','set','json','then','destroy','error','stack','name','send','rawAttributes','model','keys','query','dateEnd','dateStart','intersection','fields','attributes','length','nolimit','limit','sort','where','filters','add','day','merge','filter','map','options','SquareReport','count','include','findAll','rows','catch','show','params','includeAll','find','create','update','body','describe','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash'];(function(_0x35387d,_0x1ba72f){var _0x3aba56=function(_0x42cd08){while(--_0x42cd08){_0x35387d['push'](_0x35387d['shift']());}};_0x3aba56(++_0x1ba72f);}(_0x2750,0x13b));var _0x0275=function(_0x4d72eb,_0x21c16a){_0x4d72eb=_0x4d72eb-0x0;var _0x3aadd5=_0x2750[_0x4d72eb];return _0x3aadd5;};'use strict';var jsonpatch=require(_0x0275('0x0'));var rp=require('request-promise');var moment=require(_0x0275('0x1'));var BPromise=require(_0x0275('0x2'));var Mustache=require(_0x0275('0x3'));var util=require(_0x0275('0x4'));var path=require(_0x0275('0x5'));var sox=require(_0x0275('0x6'));var csv=require(_0x0275('0x7'));var ejs=require(_0x0275('0x8'));var fs=require('fs');var _=require(_0x0275('0x9'));var squel=require(_0x0275('0xa'));var crypto=require('crypto');var jsforce=require(_0x0275('0xb'));var deskjs=require(_0x0275('0xc'));var toCsv=require(_0x0275('0x7'));var querystring=require(_0x0275('0xd'));var Papa=require('papaparse');var qs=require(_0x0275('0xe'));var logger=require(_0x0275('0xf'))(_0x0275('0x10'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x0275('0x11'))['db'];function respondWithStatusCode(_0x565377,_0x26fa6b){_0x26fa6b=_0x26fa6b||0xcc;return function(_0x377087){if(_0x377087){return _0x565377[_0x0275('0x12')](_0x26fa6b);}return _0x565377[_0x0275('0x13')](_0x26fa6b)[_0x0275('0x14')]();};}function respondWithResult(_0x5ae208,_0x2e8723){_0x2e8723=_0x2e8723||0xc8;return function(_0x1e0932){if(_0x1e0932){return _0x5ae208[_0x0275('0x13')](_0x2e8723)['json'](_0x1e0932);}};}function respondWithFilteredResult(_0x55ffd6,_0x292f93){return function(_0x395398){if(_0x395398){var _0x37f809=_0x395398['count'],_0x46a729=_0x292f93[_0x0275('0x15')],_0x28827b=_0x292f93[_0x0275('0x15')]+_0x292f93['limit'],_0x36921c;if(_0x28827b>=_0x37f809){_0x28827b=_0x37f809;_0x36921c=0xc8;}else{_0x36921c=0xce;}_0x55ffd6[_0x0275('0x13')](_0x36921c);return _0x55ffd6[_0x0275('0x16')]('Content-Range',_0x46a729+'-'+_0x28827b+'/'+_0x37f809)[_0x0275('0x17')](_0x395398);}return null;};}function patchUpdates(_0x31c76b){return function(_0x4a5578){try{jsonpatch['apply'](_0x4a5578,_0x31c76b,!![]);}catch(_0x56e719){return BPromise['reject'](_0x56e719);}return _0x4a5578['save']();};}function saveUpdates(_0x566ad6,_0x44f7b0){return function(_0x48d3f4){if(_0x48d3f4){return _0x48d3f4['update'](_0x566ad6)[_0x0275('0x18')](function(_0x30730a){return _0x30730a;});}return null;};}function removeEntity(_0x20c7fc,_0x5c5036){return function(_0x1bd201){if(_0x1bd201){return _0x1bd201[_0x0275('0x19')]()['then'](function(){_0x20c7fc['status'](0xcc)[_0x0275('0x14')]();});}};}function handleEntityNotFound(_0xfe9f2f,_0x562c82){return function(_0x592a53){if(!_0x592a53){_0xfe9f2f[_0x0275('0x12')](0x194);}return _0x592a53;};}function handleError(_0x5ab9e7,_0x16e6cc){_0x16e6cc=_0x16e6cc||0x1f4;return function(_0x5c75f1){logger[_0x0275('0x1a')](_0x5c75f1[_0x0275('0x1b')]);if(_0x5c75f1['name']){delete _0x5c75f1[_0x0275('0x1c')];}_0x5ab9e7[_0x0275('0x13')](_0x16e6cc)[_0x0275('0x1d')](_0x5c75f1);};}exports['index']=function(_0x2552bc,_0x44bbf8){var _0x24c928={},_0x15813f={},_0x1a2024={'count':0x0,'rows':[]};var _0x437752=db['SquareReport'][_0x0275('0x1e')];_0x15813f[_0x0275('0x1f')]=_[_0x0275('0x20')](_0x437752);var _0x275dac={'dateStart':_0x2552bc[_0x0275('0x21')]['dateStart'],'dateEnd':_0x2552bc[_0x0275('0x21')][_0x0275('0x22')]};delete _0x2552bc[_0x0275('0x21')][_0x0275('0x23')];delete _0x2552bc[_0x0275('0x21')]['dateEnd'];_0x15813f[_0x0275('0x21')]=_[_0x0275('0x20')](_0x2552bc[_0x0275('0x21')]);_0x15813f['filters']=_['intersection'](_0x15813f[_0x0275('0x1f')],_0x15813f[_0x0275('0x21')]);_0x24c928['attributes']=_[_0x0275('0x24')](_0x15813f[_0x0275('0x1f')],qs[_0x0275('0x25')](_0x2552bc[_0x0275('0x21')]['fields']));_0x24c928[_0x0275('0x26')]=_0x24c928[_0x0275('0x26')][_0x0275('0x27')]?_0x24c928[_0x0275('0x26')]:_0x15813f['model'];if(!_0x2552bc[_0x0275('0x21')]['hasOwnProperty'](_0x0275('0x28'))){_0x24c928['limit']=qs[_0x0275('0x29')](_0x2552bc[_0x0275('0x21')]['limit']);_0x24c928[_0x0275('0x15')]=qs[_0x0275('0x15')](_0x2552bc[_0x0275('0x21')][_0x0275('0x15')]);}_0x24c928['order']=qs[_0x0275('0x2a')](_0x2552bc[_0x0275('0x21')][_0x0275('0x2a')]);_0x24c928[_0x0275('0x2b')]=qs[_0x0275('0x2c')](_['pick'](_0x2552bc[_0x0275('0x21')],_0x15813f[_0x0275('0x2c')]));if(_0x275dac[_0x0275('0x23')]){if(_0x275dac[_0x0275('0x22')]){_0x275dac[_0x0275('0x22')]=moment(_0x275dac[_0x0275('0x22')])[_0x0275('0x2d')](0x1,_0x0275('0x2e'));}else{_0x275dac[_0x0275('0x22')]=moment(_0x275dac[_0x0275('0x23')])[_0x0275('0x2d')](0x1,'day');}_[_0x0275('0x2f')](_0x24c928[_0x0275('0x2b')],{'createdAt':{'$gte':_0x275dac[_0x0275('0x23')],'$lte':_0x275dac[_0x0275('0x22')]}});}if(_0x2552bc[_0x0275('0x21')][_0x0275('0x30')]){_0x24c928[_0x0275('0x2b')]=_[_0x0275('0x2f')](_0x24c928[_0x0275('0x2b')],{'$or':_[_0x0275('0x31')](_0x24c928[_0x0275('0x26')],function(_0x43417a){var _0x32f0cf={};_0x32f0cf[_0x43417a]={'$like':'%'+_0x2552bc[_0x0275('0x21')]['filter']+'%'};return _0x32f0cf;})});}_0x24c928=_[_0x0275('0x2f')]({},_0x24c928,_0x2552bc[_0x0275('0x32')]);var _0x4d2d59={'where':_0x24c928[_0x0275('0x2b')]};return db[_0x0275('0x33')][_0x0275('0x34')](_0x4d2d59)[_0x0275('0x18')](function(_0x3611f5){_0x1a2024[_0x0275('0x34')]=_0x3611f5;if(_0x2552bc[_0x0275('0x21')]['includeAll']){_0x24c928[_0x0275('0x35')]=[{'all':!![]}];}return db[_0x0275('0x33')][_0x0275('0x36')](_0x24c928);})[_0x0275('0x18')](function(_0x4f888c){_0x1a2024[_0x0275('0x37')]=_0x4f888c;return _0x1a2024;})[_0x0275('0x18')](respondWithFilteredResult(_0x44bbf8,_0x24c928))[_0x0275('0x38')](handleError(_0x44bbf8,null));};exports[_0x0275('0x39')]=function(_0x4ad75f,_0xcbfe0a){var _0x52f69c={'raw':!![],'where':{'id':_0x4ad75f[_0x0275('0x3a')]['id']}},_0x261e66={};_0x261e66[_0x0275('0x1f')]=_[_0x0275('0x20')](db['SquareReport'][_0x0275('0x1e')]);_0x261e66[_0x0275('0x21')]=_['keys'](_0x4ad75f[_0x0275('0x21')]);_0x261e66[_0x0275('0x2c')]=_[_0x0275('0x24')](_0x261e66['model'],_0x261e66[_0x0275('0x21')]);_0x52f69c[_0x0275('0x26')]=_['intersection'](_0x261e66[_0x0275('0x1f')],qs[_0x0275('0x25')](_0x4ad75f[_0x0275('0x21')][_0x0275('0x25')]));_0x52f69c[_0x0275('0x26')]=_0x52f69c[_0x0275('0x26')][_0x0275('0x27')]?_0x52f69c[_0x0275('0x26')]:_0x261e66[_0x0275('0x1f')];if(_0x4ad75f[_0x0275('0x21')][_0x0275('0x3b')]){_0x52f69c['include']=[{'all':!![]}];}_0x52f69c=_[_0x0275('0x2f')]({},_0x52f69c,_0x4ad75f[_0x0275('0x32')]);return db[_0x0275('0x33')][_0x0275('0x3c')](_0x52f69c)[_0x0275('0x18')](handleEntityNotFound(_0xcbfe0a,null))[_0x0275('0x18')](respondWithResult(_0xcbfe0a,null))[_0x0275('0x38')](handleError(_0xcbfe0a,null));};exports[_0x0275('0x3d')]=function(_0x300e40,_0x3ac454){return db[_0x0275('0x33')]['create'](_0x300e40['body'],{})[_0x0275('0x18')](respondWithResult(_0x3ac454,0xc9))[_0x0275('0x38')](handleError(_0x3ac454,null));};exports[_0x0275('0x3e')]=function(_0x3bd019,_0x310c6b){if(_0x3bd019['body']['id']){delete _0x3bd019[_0x0275('0x3f')]['id'];}return db['SquareReport'][_0x0275('0x3c')]({'where':{'id':_0x3bd019[_0x0275('0x3a')]['id']}})[_0x0275('0x18')](handleEntityNotFound(_0x310c6b,null))[_0x0275('0x18')](saveUpdates(_0x3bd019['body'],null))[_0x0275('0x18')](respondWithResult(_0x310c6b,null))['catch'](handleError(_0x310c6b,null));};exports['destroy']=function(_0x515860,_0x28e90f){return db['SquareReport'][_0x0275('0x3c')]({'where':{'id':_0x515860[_0x0275('0x3a')]['id']}})[_0x0275('0x18')](handleEntityNotFound(_0x28e90f,null))[_0x0275('0x18')](removeEntity(_0x28e90f,null))[_0x0275('0x38')](handleError(_0x28e90f,null));};exports[_0x0275('0x40')]=function(_0x2973d6,_0x591bfd){return db[_0x0275('0x33')]['describe']()[_0x0275('0x18')](respondWithResult(_0x591bfd,null))[_0x0275('0x38')](handleError(_0x591bfd,null));};
\ No newline at end of file
index 588c5bc..8ed20f6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5eb6=['moment','bluebird','request-promise','./squareReport.attributes','define','SquareReport','util'];(function(_0x1ab692,_0x443f43){var _0x3d12a4=function(_0x18c806){while(--_0x18c806){_0x1ab692['push'](_0x1ab692['shift']());}};_0x3d12a4(++_0x443f43);}(_0x5eb6,0x1a3));var _0x65eb=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x5eb6[_0x42cae2];return _0x5f256f;};'use strict';var _=require('lodash');var util=require(_0x65eb('0x0'));var logger=require('../../config/logger')('api');var moment=require(_0x65eb('0x1'));var BPromise=require(_0x65eb('0x2'));var rp=require(_0x65eb('0x3'));var attributes=require(_0x65eb('0x4'));module['exports']=function(_0x4b07ff,_0x4bcdc4){return _0x4b07ff[_0x65eb('0x5')](_0x65eb('0x6'),attributes,{'tableName':'report_square','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x499b=['uniqueid','project_name','leaveAt','lodash','api','moment','bluebird','request-promise','exports','define','SquareReport','report_square','uid_pname'];(function(_0x258635,_0x115952){var _0x4c50c4=function(_0x11fe17){while(--_0x11fe17){_0x258635['push'](_0x258635['shift']());}};_0x4c50c4(++_0x115952);}(_0x499b,0xfa));var _0xb499=function(_0x5a37e4,_0x185687){_0x5a37e4=_0x5a37e4-0x0;var _0x5e79b3=_0x499b[_0x5a37e4];return _0x5e79b3;};'use strict';var _=require(_0xb499('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xb499('0x1'));var moment=require(_0xb499('0x2'));var BPromise=require(_0xb499('0x3'));var rp=require(_0xb499('0x4'));var attributes=require('./squareReport.attributes');module[_0xb499('0x5')]=function(_0xf30393,_0x3e64d0){return _0xf30393[_0xb499('0x6')](_0xb499('0x7'),attributes,{'tableName':_0xb499('0x8'),'paranoid':![],'indexes':[{'name':_0xb499('0x9'),'fields':[_0xb499('0xa'),_0xb499('0xb')]},{'name':_0xb499('0xc'),'fields':[_0xb499('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
index 0a4b32d..6d57c14 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x97cc=['code','SquareReport,\x20%s,\x20%s','message','result','catch','CreateSquareReport','create','body','options','UpdateSquareReport','update','where','attributes','limit','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','SquareReport,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x2b0f0c,_0x1a7d50){var _0x49a5c9=function(_0x4a2ede){while(--_0x4a2ede){_0x2b0f0c['push'](_0x2b0f0c['shift']());}};_0x49a5c9(++_0x1a7d50);}(_0x97cc,0x19a));var _0xc97c=function(_0x469ce1,_0x39c803){_0x469ce1=_0x469ce1-0x0;var _0x13ba31=_0x97cc[_0x469ce1];return _0x13ba31;};'use strict';var _=require(_0xc97c('0x0'));var util=require(_0xc97c('0x1'));var moment=require(_0xc97c('0x2'));var BPromise=require('bluebird');var rs=require(_0xc97c('0x3'));var fs=require('fs');var db=require(_0xc97c('0x4'))['db'];var utils=require(_0xc97c('0x5'));var logger=require('../../config/logger')(_0xc97c('0x6'));var config=require(_0xc97c('0x7'));var jayson=require(_0xc97c('0x8'));var client=jayson[_0xc97c('0x9')][_0xc97c('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x19e6c6,_0x56a385,_0x4fcdc0){return new BPromise(function(_0x156425,_0x46fb8d){return client[_0xc97c('0xb')](_0x19e6c6,_0x4fcdc0)[_0xc97c('0xc')](function(_0x1ef337){logger[_0xc97c('0xd')]('SquareReport,\x20%s,\x20%s',_0x56a385,_0xc97c('0xe'));logger[_0xc97c('0xf')](_0xc97c('0x10'),_0x56a385,_0xc97c('0xe'),JSON[_0xc97c('0x11')](_0x1ef337));if(_0x1ef337['error']){if(_0x1ef337[_0xc97c('0x12')][_0xc97c('0x13')]===0x1f4){logger['error'](_0xc97c('0x14'),_0x56a385,_0x1ef337[_0xc97c('0x12')][_0xc97c('0x15')]);return _0x46fb8d(_0x1ef337[_0xc97c('0x12')][_0xc97c('0x15')]);}logger[_0xc97c('0x12')](_0xc97c('0x14'),_0x56a385,_0x1ef337[_0xc97c('0x12')][_0xc97c('0x15')]);return _0x156425(_0x1ef337[_0xc97c('0x12')][_0xc97c('0x15')]);}else{logger[_0xc97c('0xd')](_0xc97c('0x14'),_0x56a385,_0xc97c('0xe'));_0x156425(_0x1ef337[_0xc97c('0x16')][_0xc97c('0x15')]);}})[_0xc97c('0x17')](function(_0x564366){logger[_0xc97c('0x12')](_0xc97c('0x14'),_0x56a385,_0x564366);_0x46fb8d(_0x564366);});});}exports[_0xc97c('0x18')]=function(_0x93c319){var _0x54206f=this;return new Promise(function(_0xf2aa0b,_0x3fe411){return db['SquareReport'][_0xc97c('0x19')](_0x93c319[_0xc97c('0x1a')],{'raw':_0x93c319[_0xc97c('0x1b')]?_0x93c319[_0xc97c('0x1b')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x247f4d){logger[_0xc97c('0xd')](_0xc97c('0x18'),_0x93c319);logger['debug']('CreateSquareReport',_0x93c319,JSON[_0xc97c('0x11')](_0x247f4d));_0xf2aa0b(_0x247f4d);})[_0xc97c('0x17')](function(_0x3bff37){logger[_0xc97c('0x12')](_0xc97c('0x18'),_0x3bff37[_0xc97c('0x15')],_0x93c319);_0x3fe411(_0x54206f['error'](0x1f4,_0x3bff37[_0xc97c('0x15')]));});});};exports[_0xc97c('0x1c')]=function(_0x5eec74){var _0x25e749=this;return new Promise(function(_0x283faa,_0x19ab46){return db['SquareReport'][_0xc97c('0x1d')](_0x5eec74[_0xc97c('0x1a')],{'raw':_0x5eec74[_0xc97c('0x1b')]?_0x5eec74[_0xc97c('0x1b')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5eec74[_0xc97c('0x1b')]?_0x5eec74[_0xc97c('0x1b')][_0xc97c('0x1e')]||null:null,'attributes':_0x5eec74[_0xc97c('0x1b')]?_0x5eec74['options'][_0xc97c('0x1f')]||null:null,'limit':_0x5eec74[_0xc97c('0x1b')]?_0x5eec74[_0xc97c('0x1b')][_0xc97c('0x20')]||null:null})[_0xc97c('0xc')](function(_0x385c5e){logger[_0xc97c('0xd')](_0xc97c('0x1c'),_0x5eec74);logger['debug'](_0xc97c('0x1c'),_0x5eec74,JSON[_0xc97c('0x11')](_0x385c5e));_0x283faa(_0x385c5e);})[_0xc97c('0x17')](function(_0x318cb6){logger['error'](_0xc97c('0x1c'),_0x318cb6[_0xc97c('0x15')],_0x5eec74);_0x19ab46(_0x25e749[_0xc97c('0x12')](0x1f4,_0x318cb6['message']));});});};
\ No newline at end of file
+var _0xa55e=['http','then','SquareReport,\x20%s,\x20%s','request\x20sent','debug','SquareReport,\x20%s,\x20%s,\x20%s','error','code','message','info','result','CreateSquareReport','SquareReport','create','body','options','raw','stringify','catch','UpdateSquareReport','update','where','attributes','limit','lodash','util','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client'];(function(_0x1c5be2,_0x6fa098){var _0x19784b=function(_0x256635){while(--_0x256635){_0x1c5be2['push'](_0x1c5be2['shift']());}};_0x19784b(++_0x6fa098);}(_0xa55e,0x1a4));var _0xea55=function(_0x30ae3a,_0x24d1f1){_0x30ae3a=_0x30ae3a-0x0;var _0x16e00e=_0xa55e[_0x30ae3a];return _0x16e00e;};'use strict';var _=require(_0xea55('0x0'));var util=require(_0xea55('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xea55('0x2'));var fs=require('fs');var db=require(_0xea55('0x3'))['db'];var utils=require(_0xea55('0x4'));var logger=require(_0xea55('0x5'))(_0xea55('0x6'));var config=require('../../config/environment');var jayson=require(_0xea55('0x7'));var client=jayson[_0xea55('0x8')][_0xea55('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x348f03,_0x5f2532,_0x216343){return new BPromise(function(_0x466219,_0xdea1c7){return client['request'](_0x348f03,_0x216343)[_0xea55('0xa')](function(_0x35adb5){logger['info'](_0xea55('0xb'),_0x5f2532,_0xea55('0xc'));logger[_0xea55('0xd')](_0xea55('0xe'),_0x5f2532,'request\x20sent',JSON['stringify'](_0x35adb5));if(_0x35adb5[_0xea55('0xf')]){if(_0x35adb5[_0xea55('0xf')][_0xea55('0x10')]===0x1f4){logger[_0xea55('0xf')](_0xea55('0xb'),_0x5f2532,_0x35adb5[_0xea55('0xf')]['message']);return _0xdea1c7(_0x35adb5['error']['message']);}logger[_0xea55('0xf')](_0xea55('0xb'),_0x5f2532,_0x35adb5['error'][_0xea55('0x11')]);return _0x466219(_0x35adb5['error']['message']);}else{logger[_0xea55('0x12')](_0xea55('0xb'),_0x5f2532,_0xea55('0xc'));_0x466219(_0x35adb5[_0xea55('0x13')][_0xea55('0x11')]);}})['catch'](function(_0x4cf331){logger[_0xea55('0xf')](_0xea55('0xb'),_0x5f2532,_0x4cf331);_0xdea1c7(_0x4cf331);});});}exports[_0xea55('0x14')]=function(_0x35e721){var _0x1e7256=this;return new Promise(function(_0x2dd663,_0xa20a8c){return db[_0xea55('0x15')][_0xea55('0x16')](_0x35e721[_0xea55('0x17')],{'raw':_0x35e721[_0xea55('0x18')]?_0x35e721['options'][_0xea55('0x19')]===undefined?!![]:![]:!![]})['then'](function(_0x3bf807){logger[_0xea55('0x12')]('CreateSquareReport',_0x35e721);logger['debug'](_0xea55('0x14'),_0x35e721,JSON[_0xea55('0x1a')](_0x3bf807));_0x2dd663(_0x3bf807);})[_0xea55('0x1b')](function(_0x9192aa){logger[_0xea55('0xf')](_0xea55('0x14'),_0x9192aa[_0xea55('0x11')],_0x35e721);_0xa20a8c(_0x1e7256[_0xea55('0xf')](0x1f4,_0x9192aa[_0xea55('0x11')]));});});};exports[_0xea55('0x1c')]=function(_0x5cb9f1){var _0x36e8a8=this;return new Promise(function(_0x2566f2,_0x5940d7){return db[_0xea55('0x15')][_0xea55('0x1d')](_0x5cb9f1[_0xea55('0x17')],{'raw':_0x5cb9f1[_0xea55('0x18')]?_0x5cb9f1[_0xea55('0x18')][_0xea55('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5cb9f1[_0xea55('0x18')]?_0x5cb9f1['options'][_0xea55('0x1e')]||null:null,'attributes':_0x5cb9f1[_0xea55('0x18')]?_0x5cb9f1[_0xea55('0x18')][_0xea55('0x1f')]||null:null,'limit':_0x5cb9f1[_0xea55('0x18')]?_0x5cb9f1['options'][_0xea55('0x20')]||null:null})['then'](function(_0x3fcff7){logger['info'](_0xea55('0x1c'),_0x5cb9f1);logger[_0xea55('0xd')](_0xea55('0x1c'),_0x5cb9f1,JSON[_0xea55('0x1a')](_0x3fcff7));_0x2566f2(_0x3fcff7);})[_0xea55('0x1b')](function(_0x5ebb92){logger[_0xea55('0xf')]('UpdateSquareReport',_0x5ebb92['message'],_0x5cb9f1);_0x5940d7(_0x36e8a8[_0xea55('0xf')](0x1f4,_0x5ebb92['message']));});});};
\ No newline at end of file
index 0324f07..d3aed12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8d54=['../../config/environment','./squareReportDetail.controller','get','isAuthenticated','/describe','describe','show','post','create','put','/:id','update','multer','path','express','Router','../../components/auth/service'];(function(_0x88d1df,_0x273b1e){var _0x529aca=function(_0x477cc7){while(--_0x477cc7){_0x88d1df['push'](_0x88d1df['shift']());}};_0x529aca(++_0x273b1e);}(_0x8d54,0x160));var _0x48d5=function(_0x30b2c6,_0x1eafe8){_0x30b2c6=_0x30b2c6-0x0;var _0x42052d=_0x8d54[_0x30b2c6];return _0x42052d;};'use strict';var multer=require(_0x48d5('0x0'));var util=require('util');var path=require(_0x48d5('0x1'));var express=require(_0x48d5('0x2'));var router=express[_0x48d5('0x3')]();var auth=require(_0x48d5('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x48d5('0x5'));var controller=require(_0x48d5('0x6'));router[_0x48d5('0x7')]('/',auth[_0x48d5('0x8')](),controller['index']);router[_0x48d5('0x7')](_0x48d5('0x9'),auth[_0x48d5('0x8')](),controller[_0x48d5('0xa')]);router[_0x48d5('0x7')]('/:id',auth[_0x48d5('0x8')](),controller[_0x48d5('0xb')]);router[_0x48d5('0xc')]('/',auth['isAuthenticated'](),controller[_0x48d5('0xd')]);router[_0x48d5('0xe')](_0x48d5('0xf'),auth[_0x48d5('0x8')](),controller[_0x48d5('0x10')]);router['delete'](_0x48d5('0xf'),auth[_0x48d5('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x836f=['get','isAuthenticated','index','describe','/:id','show','post','delete','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareReportDetail.controller'];(function(_0x4f91f5,_0x3af070){var _0x5bad8a=function(_0x1e33a1){while(--_0x1e33a1){_0x4f91f5['push'](_0x4f91f5['shift']());}};_0x5bad8a(++_0x3af070);}(_0x836f,0x75));var _0xf836=function(_0x5ceab7,_0x145487){_0x5ceab7=_0x5ceab7-0x0;var _0x5e7d6a=_0x836f[_0x5ceab7];return _0x5e7d6a;};'use strict';var multer=require(_0xf836('0x0'));var util=require(_0xf836('0x1'));var path=require(_0xf836('0x2'));var express=require(_0xf836('0x3'));var router=express[_0xf836('0x4')]();var auth=require(_0xf836('0x5'));var interaction=require(_0xf836('0x6'));var config=require(_0xf836('0x7'));var controller=require(_0xf836('0x8'));router[_0xf836('0x9')]('/',auth[_0xf836('0xa')](),controller[_0xf836('0xb')]);router['get']('/describe',auth[_0xf836('0xa')](),controller[_0xf836('0xc')]);router[_0xf836('0x9')](_0xf836('0xd'),auth[_0xf836('0xa')](),controller[_0xf836('0xe')]);router[_0xf836('0xf')]('/',auth[_0xf836('0xa')](),controller['create']);router['put'](_0xf836('0xd'),auth['isAuthenticated'](),controller['update']);router[_0xf836('0x10')]('/:id',auth[_0xf836('0xa')](),controller['destroy']);module[_0xf836('0x11')]=router;
\ No newline at end of file
index 57e1ffc..ee8fdfe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4748=['TEXT','STRING'];(function(_0x40dd17,_0x213f2a){var _0x738878=function(_0x33ff68){while(--_0x33ff68){_0x40dd17['push'](_0x40dd17['shift']());}};_0x738878(++_0x213f2a);}(_0x4748,0xef));var _0x8474=function(_0x58c0ad,_0x544d33){_0x58c0ad=_0x58c0ad-0x0;var _0x524d70=_0x4748[_0x58c0ad];return _0x524d70;};'use strict';var Sequelize=require('sequelize');module['exports']={'uniqueid':{'type':Sequelize[_0x8474('0x0')]},'node':{'type':Sequelize[_0x8474('0x0')]},'application':{'type':Sequelize[_0x8474('0x0')]},'data':{'type':Sequelize[_0x8474('0x1')]},'project_name':{'type':Sequelize[_0x8474('0x0')]},'callerid':{'type':Sequelize[_0x8474('0x0')]}};
\ No newline at end of file
+var _0x2d05=['STRING','TEXT'];(function(_0x1cfd9c,_0x9b7df6){var _0xacfc8b=function(_0x21558b){while(--_0x21558b){_0x1cfd9c['push'](_0x1cfd9c['shift']());}};_0xacfc8b(++_0x9b7df6);}(_0x2d05,0x82));var _0x52d0=function(_0x547ebd,_0x159e1a){_0x547ebd=_0x547ebd-0x0;var _0x27387d=_0x2d05[_0x547ebd];return _0x27387d;};'use strict';var Sequelize=require('sequelize');module['exports']={'uniqueid':{'type':Sequelize[_0x52d0('0x0')]},'node':{'type':Sequelize[_0x52d0('0x0')]},'application':{'type':Sequelize[_0x52d0('0x0')]},'data':{'type':Sequelize[_0x52d0('0x1')]},'project_name':{'type':Sequelize[_0x52d0('0x0')]},'callerid':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 4c9f3b4..5bc5933 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0787=['filter','options','SquareDetailsReport','count','includeAll','include','rows','catch','show','params','create','update','body','find','describe','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','json','offset','set','Content-Range','apply','reject','save','then','destroy','end','error','stack','name','send','index','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','fields','length','hasOwnProperty','limit','order','sort','where','pick','day','merge','map','attributes'];(function(_0x4b369d,_0x265eb8){var _0x571a98=function(_0x56341a){while(--_0x56341a){_0x4b369d['push'](_0x4b369d['shift']());}};_0x571a98(++_0x265eb8);}(_0x0787,0x16d));var _0x7078=function(_0x5b8b97,_0x6b4dfa){_0x5b8b97=_0x5b8b97-0x0;var _0x1fdf84=_0x0787[_0x5b8b97];return _0x1fdf84;};'use strict';var jsonpatch=require(_0x7078('0x0'));var rp=require(_0x7078('0x1'));var moment=require(_0x7078('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x7078('0x3'));var util=require(_0x7078('0x4'));var path=require(_0x7078('0x5'));var sox=require(_0x7078('0x6'));var csv=require(_0x7078('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x7078('0x8'));var jsforce=require(_0x7078('0x9'));var deskjs=require(_0x7078('0xa'));var toCsv=require(_0x7078('0x7'));var querystring=require(_0x7078('0xb'));var Papa=require(_0x7078('0xc'));var qs=require(_0x7078('0xd'));var logger=require(_0x7078('0xe'))(_0x7078('0xf'));var utils=require(_0x7078('0x10'));var config=require('../../config/environment');var db=require(_0x7078('0x11'))['db'];function respondWithStatusCode(_0x5eb33d,_0x15e8c4){_0x15e8c4=_0x15e8c4||0xcc;return function(_0x2ee291){if(_0x2ee291){return _0x5eb33d[_0x7078('0x12')](_0x15e8c4);}return _0x5eb33d['status'](_0x15e8c4)['end']();};}function respondWithResult(_0x3f5415,_0x23d54e){_0x23d54e=_0x23d54e||0xc8;return function(_0x149fec){if(_0x149fec){return _0x3f5415[_0x7078('0x13')](_0x23d54e)[_0x7078('0x14')](_0x149fec);}};}function respondWithFilteredResult(_0x45fd74,_0x5e6443){return function(_0x1a94ef){if(_0x1a94ef){var _0x33384c=_0x1a94ef['count'],_0x5ed20d=_0x5e6443[_0x7078('0x15')],_0x4091e3=_0x5e6443[_0x7078('0x15')]+_0x5e6443['limit'],_0xa9e2b1;if(_0x4091e3>=_0x33384c){_0x4091e3=_0x33384c;_0xa9e2b1=0xc8;}else{_0xa9e2b1=0xce;}_0x45fd74[_0x7078('0x13')](_0xa9e2b1);return _0x45fd74[_0x7078('0x16')](_0x7078('0x17'),_0x5ed20d+'-'+_0x4091e3+'/'+_0x33384c)[_0x7078('0x14')](_0x1a94ef);}return null;};}function patchUpdates(_0x149c6b){return function(_0x35b4fa){try{jsonpatch[_0x7078('0x18')](_0x35b4fa,_0x149c6b,!![]);}catch(_0x155396){return BPromise[_0x7078('0x19')](_0x155396);}return _0x35b4fa[_0x7078('0x1a')]();};}function saveUpdates(_0x51850c,_0x4b96e1){return function(_0x29b89b){if(_0x29b89b){return _0x29b89b['update'](_0x51850c)[_0x7078('0x1b')](function(_0x40a803){return _0x40a803;});}return null;};}function removeEntity(_0x169afb,_0x1dc694){return function(_0x42da57){if(_0x42da57){return _0x42da57[_0x7078('0x1c')]()['then'](function(){_0x169afb[_0x7078('0x13')](0xcc)[_0x7078('0x1d')]();});}};}function handleEntityNotFound(_0x39bdbf,_0x3602d0){return function(_0x51432b){if(!_0x51432b){_0x39bdbf['sendStatus'](0x194);}return _0x51432b;};}function handleError(_0x2c36cc,_0x48620d){_0x48620d=_0x48620d||0x1f4;return function(_0x45a137){logger[_0x7078('0x1e')](_0x45a137[_0x7078('0x1f')]);if(_0x45a137[_0x7078('0x20')]){delete _0x45a137[_0x7078('0x20')];}_0x2c36cc['status'](_0x48620d)[_0x7078('0x21')](_0x45a137);};}exports[_0x7078('0x22')]=function(_0x335ee4,_0x3531a1){var _0xb4f916={},_0x41e20b={},_0x2cd474={'count':0x0,'rows':[]};var _0x7238c2=db['SquareDetailsReport'][_0x7078('0x23')];_0x41e20b['model']=_[_0x7078('0x24')](_0x7238c2);var _0xf690a1={'dateStart':_0x335ee4[_0x7078('0x25')][_0x7078('0x26')],'dateEnd':_0x335ee4['query'][_0x7078('0x27')]};delete _0x335ee4[_0x7078('0x25')]['dateStart'];delete _0x335ee4[_0x7078('0x25')]['dateEnd'];_0x41e20b['query']=_[_0x7078('0x24')](_0x335ee4[_0x7078('0x25')]);_0x41e20b[_0x7078('0x28')]=_[_0x7078('0x29')](_0x41e20b[_0x7078('0x2a')],_0x41e20b['query']);_0xb4f916['attributes']=_[_0x7078('0x29')](_0x41e20b[_0x7078('0x2a')],qs[_0x7078('0x2b')](_0x335ee4['query'][_0x7078('0x2b')]));_0xb4f916['attributes']=_0xb4f916['attributes'][_0x7078('0x2c')]?_0xb4f916['attributes']:_0x41e20b[_0x7078('0x2a')];if(!_0x335ee4[_0x7078('0x25')][_0x7078('0x2d')]('nolimit')){_0xb4f916['limit']=qs[_0x7078('0x2e')](_0x335ee4[_0x7078('0x25')][_0x7078('0x2e')]);_0xb4f916[_0x7078('0x15')]=qs['offset'](_0x335ee4['query'][_0x7078('0x15')]);}_0xb4f916[_0x7078('0x2f')]=qs['sort'](_0x335ee4[_0x7078('0x25')][_0x7078('0x30')]);_0xb4f916[_0x7078('0x31')]=qs[_0x7078('0x28')](_[_0x7078('0x32')](_0x335ee4[_0x7078('0x25')],_0x41e20b['filters']));if(_0xf690a1[_0x7078('0x26')]){if(_0xf690a1[_0x7078('0x27')]){_0xf690a1[_0x7078('0x27')]=moment(_0xf690a1[_0x7078('0x27')])['add'](0x1,_0x7078('0x33'));}else{_0xf690a1[_0x7078('0x27')]=moment(_0xf690a1[_0x7078('0x26')])['add'](0x1,_0x7078('0x33'));}_[_0x7078('0x34')](_0xb4f916[_0x7078('0x31')],{'createdAt':{'$gte':_0xf690a1[_0x7078('0x26')],'$lte':_0xf690a1[_0x7078('0x27')]}});}if(_0x335ee4[_0x7078('0x25')]['filter']){_0xb4f916['where']=_[_0x7078('0x34')](_0xb4f916['where'],{'$or':_[_0x7078('0x35')](_0xb4f916[_0x7078('0x36')],function(_0x3f69d6){var _0xceddbc={};_0xceddbc[_0x3f69d6]={'$like':'%'+_0x335ee4[_0x7078('0x25')][_0x7078('0x37')]+'%'};return _0xceddbc;})});}_0xb4f916=_[_0x7078('0x34')]({},_0xb4f916,_0x335ee4[_0x7078('0x38')]);var _0x11dc64={'where':_0xb4f916[_0x7078('0x31')]};return db[_0x7078('0x39')][_0x7078('0x3a')](_0x11dc64)['then'](function(_0x3b7b92){_0x2cd474['count']=_0x3b7b92;if(_0x335ee4[_0x7078('0x25')][_0x7078('0x3b')]){_0xb4f916[_0x7078('0x3c')]=[{'all':!![]}];}return db[_0x7078('0x39')]['findAll'](_0xb4f916);})[_0x7078('0x1b')](function(_0x418c20){_0x2cd474[_0x7078('0x3d')]=_0x418c20;return _0x2cd474;})[_0x7078('0x1b')](respondWithFilteredResult(_0x3531a1,_0xb4f916))[_0x7078('0x3e')](handleError(_0x3531a1,null));};exports[_0x7078('0x3f')]=function(_0x1cf88b,_0x31086c){var _0x157279={'raw':!![],'where':{'id':_0x1cf88b[_0x7078('0x40')]['id']}},_0x171a38={};_0x171a38['model']=_[_0x7078('0x24')](db[_0x7078('0x39')][_0x7078('0x23')]);_0x171a38[_0x7078('0x25')]=_[_0x7078('0x24')](_0x1cf88b[_0x7078('0x25')]);_0x171a38[_0x7078('0x28')]=_[_0x7078('0x29')](_0x171a38[_0x7078('0x2a')],_0x171a38[_0x7078('0x25')]);_0x157279[_0x7078('0x36')]=_[_0x7078('0x29')](_0x171a38['model'],qs[_0x7078('0x2b')](_0x1cf88b['query'][_0x7078('0x2b')]));_0x157279[_0x7078('0x36')]=_0x157279['attributes'][_0x7078('0x2c')]?_0x157279[_0x7078('0x36')]:_0x171a38[_0x7078('0x2a')];if(_0x1cf88b[_0x7078('0x25')][_0x7078('0x3b')]){_0x157279[_0x7078('0x3c')]=[{'all':!![]}];}_0x157279=_[_0x7078('0x34')]({},_0x157279,_0x1cf88b['options']);return db['SquareDetailsReport']['find'](_0x157279)[_0x7078('0x1b')](handleEntityNotFound(_0x31086c,null))[_0x7078('0x1b')](respondWithResult(_0x31086c,null))[_0x7078('0x3e')](handleError(_0x31086c,null));};exports[_0x7078('0x41')]=function(_0x415f19,_0x116357){return db[_0x7078('0x39')]['create'](_0x415f19['body'],{})[_0x7078('0x1b')](respondWithResult(_0x116357,0xc9))[_0x7078('0x3e')](handleError(_0x116357,null));};exports[_0x7078('0x42')]=function(_0x490a13,_0x5a3e8d){if(_0x490a13[_0x7078('0x43')]['id']){delete _0x490a13[_0x7078('0x43')]['id'];}return db[_0x7078('0x39')]['find']({'where':{'id':_0x490a13[_0x7078('0x40')]['id']}})[_0x7078('0x1b')](handleEntityNotFound(_0x5a3e8d,null))[_0x7078('0x1b')](saveUpdates(_0x490a13[_0x7078('0x43')],null))[_0x7078('0x1b')](respondWithResult(_0x5a3e8d,null))[_0x7078('0x3e')](handleError(_0x5a3e8d,null));};exports[_0x7078('0x1c')]=function(_0x12bba8,_0x3c2dd9){return db[_0x7078('0x39')][_0x7078('0x44')]({'where':{'id':_0x12bba8[_0x7078('0x40')]['id']}})[_0x7078('0x1b')](handleEntityNotFound(_0x3c2dd9,null))['then'](removeEntity(_0x3c2dd9,null))[_0x7078('0x3e')](handleError(_0x3c2dd9,null));};exports[_0x7078('0x45')]=function(_0x19be2b,_0x487258){return db['SquareDetailsReport'][_0x7078('0x45')]()['then'](respondWithResult(_0x487258,null))[_0x7078('0x3e')](handleError(_0x487258,null));};
\ No newline at end of file
+var _0xf9a3=['dateStart','dateEnd','query','keys','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','pick','add','day','merge','filter','where','map','options','includeAll','include','rows','params','rawAttributes','find','catch','create','body','describe','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','squel','querystring','papaparse','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject','save','update','then','destroy','end','error','stack','name','send','index','SquareDetailsReport','model'];(function(_0x111fa6,_0x2bbfa5){var _0x5624ce=function(_0x46bc3c){while(--_0x46bc3c){_0x111fa6['push'](_0x111fa6['shift']());}};_0x5624ce(++_0x2bbfa5);}(_0xf9a3,0xa3));var _0x3f9a=function(_0x3b9e8d,_0x267bc0){_0x3b9e8d=_0x3b9e8d-0x0;var _0x165175=_0xf9a3[_0x3b9e8d];return _0x165175;};'use strict';var jsonpatch=require(_0x3f9a('0x0'));var rp=require(_0x3f9a('0x1'));var moment=require(_0x3f9a('0x2'));var BPromise=require(_0x3f9a('0x3'));var Mustache=require(_0x3f9a('0x4'));var util=require(_0x3f9a('0x5'));var path=require('path');var sox=require(_0x3f9a('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x3f9a('0x7'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x3f9a('0x8'));var Papa=require(_0x3f9a('0x9'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x3f9a('0xa'));var utils=require(_0x3f9a('0xb'));var config=require(_0x3f9a('0xc'));var db=require(_0x3f9a('0xd'))['db'];function respondWithStatusCode(_0x3fa11f,_0x119021){_0x119021=_0x119021||0xcc;return function(_0x2be88c){if(_0x2be88c){return _0x3fa11f[_0x3f9a('0xe')](_0x119021);}return _0x3fa11f[_0x3f9a('0xf')](_0x119021)['end']();};}function respondWithResult(_0x31e731,_0x32e4d7){_0x32e4d7=_0x32e4d7||0xc8;return function(_0x5203d4){if(_0x5203d4){return _0x31e731[_0x3f9a('0xf')](_0x32e4d7)[_0x3f9a('0x10')](_0x5203d4);}};}function respondWithFilteredResult(_0x5e9322,_0x33fcb6){return function(_0x29d0dd){if(_0x29d0dd){var _0x595a27=_0x29d0dd[_0x3f9a('0x11')],_0x2db342=_0x33fcb6['offset'],_0x1af05f=_0x33fcb6[_0x3f9a('0x12')]+_0x33fcb6[_0x3f9a('0x13')],_0x2822e9;if(_0x1af05f>=_0x595a27){_0x1af05f=_0x595a27;_0x2822e9=0xc8;}else{_0x2822e9=0xce;}_0x5e9322['status'](_0x2822e9);return _0x5e9322['set'](_0x3f9a('0x14'),_0x2db342+'-'+_0x1af05f+'/'+_0x595a27)[_0x3f9a('0x10')](_0x29d0dd);}return null;};}function patchUpdates(_0x5c30cf){return function(_0x21883a){try{jsonpatch[_0x3f9a('0x15')](_0x21883a,_0x5c30cf,!![]);}catch(_0x38f61a){return BPromise[_0x3f9a('0x16')](_0x38f61a);}return _0x21883a[_0x3f9a('0x17')]();};}function saveUpdates(_0xda618a,_0x48cf0f){return function(_0x1364a4){if(_0x1364a4){return _0x1364a4[_0x3f9a('0x18')](_0xda618a)[_0x3f9a('0x19')](function(_0x129f83){return _0x129f83;});}return null;};}function removeEntity(_0x15635e,_0x5949a1){return function(_0x47381d){if(_0x47381d){return _0x47381d[_0x3f9a('0x1a')]()[_0x3f9a('0x19')](function(){_0x15635e[_0x3f9a('0xf')](0xcc)[_0x3f9a('0x1b')]();});}};}function handleEntityNotFound(_0x2f8d9c,_0x351ba1){return function(_0x4f5472){if(!_0x4f5472){_0x2f8d9c['sendStatus'](0x194);}return _0x4f5472;};}function handleError(_0x37fbcc,_0x64013b){_0x64013b=_0x64013b||0x1f4;return function(_0x4f3fc2){logger[_0x3f9a('0x1c')](_0x4f3fc2[_0x3f9a('0x1d')]);if(_0x4f3fc2[_0x3f9a('0x1e')]){delete _0x4f3fc2[_0x3f9a('0x1e')];}_0x37fbcc[_0x3f9a('0xf')](_0x64013b)[_0x3f9a('0x1f')](_0x4f3fc2);};}exports[_0x3f9a('0x20')]=function(_0x3e7ffb,_0x4db88e){var _0x1507e1={},_0x591b2b={},_0x2d6aa5={'count':0x0,'rows':[]};var _0xf6127b=db[_0x3f9a('0x21')]['rawAttributes'];_0x591b2b[_0x3f9a('0x22')]=_['keys'](_0xf6127b);var _0xd7b029={'dateStart':_0x3e7ffb['query'][_0x3f9a('0x23')],'dateEnd':_0x3e7ffb['query'][_0x3f9a('0x24')]};delete _0x3e7ffb[_0x3f9a('0x25')][_0x3f9a('0x23')];delete _0x3e7ffb['query']['dateEnd'];_0x591b2b[_0x3f9a('0x25')]=_[_0x3f9a('0x26')](_0x3e7ffb[_0x3f9a('0x25')]);_0x591b2b[_0x3f9a('0x27')]=_['intersection'](_0x591b2b[_0x3f9a('0x22')],_0x591b2b[_0x3f9a('0x25')]);_0x1507e1[_0x3f9a('0x28')]=_[_0x3f9a('0x29')](_0x591b2b[_0x3f9a('0x22')],qs[_0x3f9a('0x2a')](_0x3e7ffb[_0x3f9a('0x25')]['fields']));_0x1507e1['attributes']=_0x1507e1[_0x3f9a('0x28')][_0x3f9a('0x2b')]?_0x1507e1[_0x3f9a('0x28')]:_0x591b2b[_0x3f9a('0x22')];if(!_0x3e7ffb[_0x3f9a('0x25')][_0x3f9a('0x2c')](_0x3f9a('0x2d'))){_0x1507e1[_0x3f9a('0x13')]=qs[_0x3f9a('0x13')](_0x3e7ffb['query'][_0x3f9a('0x13')]);_0x1507e1[_0x3f9a('0x12')]=qs[_0x3f9a('0x12')](_0x3e7ffb[_0x3f9a('0x25')][_0x3f9a('0x12')]);}_0x1507e1[_0x3f9a('0x2e')]=qs['sort'](_0x3e7ffb['query'][_0x3f9a('0x2f')]);_0x1507e1['where']=qs[_0x3f9a('0x27')](_[_0x3f9a('0x30')](_0x3e7ffb['query'],_0x591b2b['filters']));if(_0xd7b029[_0x3f9a('0x23')]){if(_0xd7b029[_0x3f9a('0x24')]){_0xd7b029[_0x3f9a('0x24')]=moment(_0xd7b029[_0x3f9a('0x24')])[_0x3f9a('0x31')](0x1,_0x3f9a('0x32'));}else{_0xd7b029[_0x3f9a('0x24')]=moment(_0xd7b029[_0x3f9a('0x23')])[_0x3f9a('0x31')](0x1,_0x3f9a('0x32'));}_[_0x3f9a('0x33')](_0x1507e1['where'],{'createdAt':{'$gte':_0xd7b029[_0x3f9a('0x23')],'$lte':_0xd7b029[_0x3f9a('0x24')]}});}if(_0x3e7ffb['query'][_0x3f9a('0x34')]){_0x1507e1[_0x3f9a('0x35')]=_[_0x3f9a('0x33')](_0x1507e1['where'],{'$or':_[_0x3f9a('0x36')](_0x1507e1[_0x3f9a('0x28')],function(_0x1d4705){var _0x46c2bf={};_0x46c2bf[_0x1d4705]={'$like':'%'+_0x3e7ffb[_0x3f9a('0x25')]['filter']+'%'};return _0x46c2bf;})});}_0x1507e1=_[_0x3f9a('0x33')]({},_0x1507e1,_0x3e7ffb[_0x3f9a('0x37')]);var _0x26a749={'where':_0x1507e1[_0x3f9a('0x35')]};return db['SquareDetailsReport']['count'](_0x26a749)[_0x3f9a('0x19')](function(_0x749268){_0x2d6aa5['count']=_0x749268;if(_0x3e7ffb[_0x3f9a('0x25')][_0x3f9a('0x38')]){_0x1507e1[_0x3f9a('0x39')]=[{'all':!![]}];}return db['SquareDetailsReport']['findAll'](_0x1507e1);})[_0x3f9a('0x19')](function(_0x44b30a){_0x2d6aa5[_0x3f9a('0x3a')]=_0x44b30a;return _0x2d6aa5;})[_0x3f9a('0x19')](respondWithFilteredResult(_0x4db88e,_0x1507e1))['catch'](handleError(_0x4db88e,null));};exports['show']=function(_0x2a579d,_0x256eab){var _0x299f47={'raw':!![],'where':{'id':_0x2a579d[_0x3f9a('0x3b')]['id']}},_0x443811={};_0x443811[_0x3f9a('0x22')]=_[_0x3f9a('0x26')](db[_0x3f9a('0x21')][_0x3f9a('0x3c')]);_0x443811[_0x3f9a('0x25')]=_[_0x3f9a('0x26')](_0x2a579d[_0x3f9a('0x25')]);_0x443811[_0x3f9a('0x27')]=_[_0x3f9a('0x29')](_0x443811['model'],_0x443811[_0x3f9a('0x25')]);_0x299f47['attributes']=_[_0x3f9a('0x29')](_0x443811['model'],qs[_0x3f9a('0x2a')](_0x2a579d['query'][_0x3f9a('0x2a')]));_0x299f47[_0x3f9a('0x28')]=_0x299f47[_0x3f9a('0x28')][_0x3f9a('0x2b')]?_0x299f47[_0x3f9a('0x28')]:_0x443811[_0x3f9a('0x22')];if(_0x2a579d[_0x3f9a('0x25')]['includeAll']){_0x299f47['include']=[{'all':!![]}];}_0x299f47=_['merge']({},_0x299f47,_0x2a579d[_0x3f9a('0x37')]);return db[_0x3f9a('0x21')][_0x3f9a('0x3d')](_0x299f47)['then'](handleEntityNotFound(_0x256eab,null))[_0x3f9a('0x19')](respondWithResult(_0x256eab,null))[_0x3f9a('0x3e')](handleError(_0x256eab,null));};exports['create']=function(_0x30f903,_0x5188cd){return db[_0x3f9a('0x21')][_0x3f9a('0x3f')](_0x30f903[_0x3f9a('0x40')],{})[_0x3f9a('0x19')](respondWithResult(_0x5188cd,0xc9))[_0x3f9a('0x3e')](handleError(_0x5188cd,null));};exports[_0x3f9a('0x18')]=function(_0x7b8aad,_0x420511){if(_0x7b8aad[_0x3f9a('0x40')]['id']){delete _0x7b8aad['body']['id'];}return db[_0x3f9a('0x21')][_0x3f9a('0x3d')]({'where':{'id':_0x7b8aad[_0x3f9a('0x3b')]['id']}})[_0x3f9a('0x19')](handleEntityNotFound(_0x420511,null))[_0x3f9a('0x19')](saveUpdates(_0x7b8aad[_0x3f9a('0x40')],null))[_0x3f9a('0x19')](respondWithResult(_0x420511,null))['catch'](handleError(_0x420511,null));};exports['destroy']=function(_0x247169,_0x228e26){return db[_0x3f9a('0x21')]['find']({'where':{'id':_0x247169[_0x3f9a('0x3b')]['id']}})[_0x3f9a('0x19')](handleEntityNotFound(_0x228e26,null))[_0x3f9a('0x19')](removeEntity(_0x228e26,null))[_0x3f9a('0x3e')](handleError(_0x228e26,null));};exports[_0x3f9a('0x41')]=function(_0x56f6d0,_0xf68a19){return db['SquareDetailsReport'][_0x3f9a('0x41')]()[_0x3f9a('0x19')](respondWithResult(_0xf68a19,null))['catch'](handleError(_0xf68a19,null));};
\ No newline at end of file
index 5bca8d5..385e09a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa81f=['lodash','api','bluebird','request-promise','./squareReportDetail.attributes','exports','SquareDetailsReport','report_square_details'];(function(_0xb49f68,_0x3b2899){var _0x503f83=function(_0x332838){while(--_0x332838){_0xb49f68['push'](_0xb49f68['shift']());}};_0x503f83(++_0x3b2899);}(_0xa81f,0x158));var _0xfa81=function(_0x1df7b8,_0x2fe5e5){_0x1df7b8=_0x1df7b8-0x0;var _0x29d911=_0xa81f[_0x1df7b8];return _0x29d911;};'use strict';var _=require(_0xfa81('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xfa81('0x1'));var moment=require('moment');var BPromise=require(_0xfa81('0x2'));var rp=require(_0xfa81('0x3'));var attributes=require(_0xfa81('0x4'));module[_0xfa81('0x5')]=function(_0x269812,_0x1c01e8){return _0x269812['define'](_0xfa81('0x6'),attributes,{'tableName':_0xfa81('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6771=['request-promise','./squareReportDetail.attributes','lodash','api','moment','bluebird'];(function(_0x2583a7,_0x3beef9){var _0x35de7b=function(_0x29e036){while(--_0x29e036){_0x2583a7['push'](_0x2583a7['shift']());}};_0x35de7b(++_0x3beef9);}(_0x6771,0x1ee));var _0x1677=function(_0x267c12,_0x11c6d3){_0x267c12=_0x267c12-0x0;var _0x2ed614=_0x6771[_0x267c12];return _0x2ed614;};'use strict';var _=require(_0x1677('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x1677('0x1'));var moment=require(_0x1677('0x2'));var BPromise=require(_0x1677('0x3'));var rp=require(_0x1677('0x4'));var attributes=require(_0x1677('0x5'));module['exports']=function(_0x4f1367,_0x72658d){return _0x4f1367['define']('SquareDetailsReport',attributes,{'tableName':'report_square_details','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ba1e96e..70ed703 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['result','catch','CreateSquareDetailsReport','SquareDetailsReport','create','body','options','raw','then','stringify','lodash','util','moment','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','SquareDetailsReport,\x20%s,\x20%s','request\x20sent','SquareDetailsReport,\x20%s,\x20%s,\x20%s','error','code','message','info'];(function(_0x32c217,_0x149826){var _0x2f7cc0=function(_0x4b6d71){while(--_0x4b6d71){_0x32c217['push'](_0x32c217['shift']());}};_0x2f7cc0(++_0x149826);}(_0x7a54,0x106));var _0x47a5=function(_0x1d0542,_0x1b8bf7){_0x1d0542=_0x1d0542-0x0;var _0x2f4bc9=_0x7a54[_0x1d0542];return _0x2f4bc9;};'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 db=require(_0x47a5('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x47a5('0x5'))(_0x47a5('0x6'));var config=require(_0x47a5('0x7'));var jayson=require(_0x47a5('0x8'));var client=jayson[_0x47a5('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3d5629,_0x59199c,_0x343372){return new BPromise(function(_0x30e405,_0x506eda){return client[_0x47a5('0xa')](_0x3d5629,_0x343372)['then'](function(_0x5d90b3){logger['info'](_0x47a5('0xb'),_0x59199c,_0x47a5('0xc'));logger['debug'](_0x47a5('0xd'),_0x59199c,'request\x20sent',JSON['stringify'](_0x5d90b3));if(_0x5d90b3[_0x47a5('0xe')]){if(_0x5d90b3[_0x47a5('0xe')][_0x47a5('0xf')]===0x1f4){logger[_0x47a5('0xe')](_0x47a5('0xb'),_0x59199c,_0x5d90b3[_0x47a5('0xe')][_0x47a5('0x10')]);return _0x506eda(_0x5d90b3['error'][_0x47a5('0x10')]);}logger[_0x47a5('0xe')](_0x47a5('0xb'),_0x59199c,_0x5d90b3[_0x47a5('0xe')][_0x47a5('0x10')]);return _0x30e405(_0x5d90b3[_0x47a5('0xe')][_0x47a5('0x10')]);}else{logger[_0x47a5('0x11')]('SquareDetailsReport,\x20%s,\x20%s',_0x59199c,_0x47a5('0xc'));_0x30e405(_0x5d90b3[_0x47a5('0x12')][_0x47a5('0x10')]);}})[_0x47a5('0x13')](function(_0x1ef44c){logger['error']('SquareDetailsReport,\x20%s,\x20%s',_0x59199c,_0x1ef44c);_0x506eda(_0x1ef44c);});});}exports[_0x47a5('0x14')]=function(_0x4b966e){var _0x5247fd=this;return new Promise(function(_0x423a81,_0xaf70a6){return db[_0x47a5('0x15')][_0x47a5('0x16')](_0x4b966e[_0x47a5('0x17')],{'raw':_0x4b966e[_0x47a5('0x18')]?_0x4b966e[_0x47a5('0x18')][_0x47a5('0x19')]===undefined?!![]:![]:!![]})[_0x47a5('0x1a')](function(_0x4a9fcb){logger[_0x47a5('0x11')](_0x47a5('0x14'),_0x4b966e);logger['debug'](_0x47a5('0x14'),_0x4b966e,JSON[_0x47a5('0x1b')](_0x4a9fcb));_0x423a81(_0x4a9fcb);})[_0x47a5('0x13')](function(_0x4c5910){logger[_0x47a5('0xe')](_0x47a5('0x14'),_0x4c5910[_0x47a5('0x10')],_0x4b966e);_0xaf70a6(_0x5247fd[_0x47a5('0xe')](0x1f4,_0x4c5910['message']));});});};
\ No newline at end of file
+var _0x9957=['client','http','request','info','SquareDetailsReport,\x20%s,\x20%s','request\x20sent','debug','SquareDetailsReport,\x20%s,\x20%s,\x20%s','error','message','result','CreateSquareDetailsReport','body','raw','then','stringify','catch','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise'];(function(_0x2330a1,_0x4bb8d3){var _0x32c0a6=function(_0xba8ada){while(--_0xba8ada){_0x2330a1['push'](_0x2330a1['shift']());}};_0x32c0a6(++_0x4bb8d3);}(_0x9957,0x93));var _0x7995=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0x9957[_0x1facfa];return _0x9ec701;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));var BPromise=require(_0x7995('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0x7995('0x4'))['db'];var utils=require(_0x7995('0x5'));var logger=require(_0x7995('0x6'))(_0x7995('0x7'));var config=require('../../config/environment');var jayson=require(_0x7995('0x8'));var client=jayson[_0x7995('0x9')][_0x7995('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x219534,_0xbda126,_0x326741){return new BPromise(function(_0x4996ca,_0x465276){return client[_0x7995('0xb')](_0x219534,_0x326741)['then'](function(_0xa2e5f0){logger[_0x7995('0xc')](_0x7995('0xd'),_0xbda126,_0x7995('0xe'));logger[_0x7995('0xf')](_0x7995('0x10'),_0xbda126,_0x7995('0xe'),JSON['stringify'](_0xa2e5f0));if(_0xa2e5f0[_0x7995('0x11')]){if(_0xa2e5f0[_0x7995('0x11')]['code']===0x1f4){logger[_0x7995('0x11')](_0x7995('0xd'),_0xbda126,_0xa2e5f0[_0x7995('0x11')][_0x7995('0x12')]);return _0x465276(_0xa2e5f0[_0x7995('0x11')][_0x7995('0x12')]);}logger[_0x7995('0x11')]('SquareDetailsReport,\x20%s,\x20%s',_0xbda126,_0xa2e5f0['error'][_0x7995('0x12')]);return _0x4996ca(_0xa2e5f0[_0x7995('0x11')][_0x7995('0x12')]);}else{logger[_0x7995('0xc')](_0x7995('0xd'),_0xbda126,_0x7995('0xe'));_0x4996ca(_0xa2e5f0[_0x7995('0x13')][_0x7995('0x12')]);}})['catch'](function(_0x2eeacc){logger['error'](_0x7995('0xd'),_0xbda126,_0x2eeacc);_0x465276(_0x2eeacc);});});}exports[_0x7995('0x14')]=function(_0x43d4b8){var _0x291317=this;return new Promise(function(_0x1e1415,_0x37a7d4){return db['SquareDetailsReport']['create'](_0x43d4b8[_0x7995('0x15')],{'raw':_0x43d4b8['options']?_0x43d4b8['options'][_0x7995('0x16')]===undefined?!![]:![]:!![]})[_0x7995('0x17')](function(_0x4cbe10){logger[_0x7995('0xc')]('CreateSquareDetailsReport',_0x43d4b8);logger['debug'](_0x7995('0x14'),_0x43d4b8,JSON[_0x7995('0x18')](_0x4cbe10));_0x1e1415(_0x4cbe10);})[_0x7995('0x19')](function(_0x1a8568){logger[_0x7995('0x11')](_0x7995('0x14'),_0x1a8568['message'],_0x43d4b8);_0x37a7d4(_0x291317[_0x7995('0x11')](0x1f4,_0x1a8568[_0x7995('0x12')]));});});};
\ No newline at end of file
index 25829a3..06c4596 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f08=['../../components/auth/service','./system.controller','get','isAuthenticated','index','killProcess','express','Router'];(function(_0x13b8f3,_0x442821){var _0x1a6d06=function(_0x5126f2){while(--_0x5126f2){_0x13b8f3['push'](_0x13b8f3['shift']());}};_0x1a6d06(++_0x442821);}(_0x0f08,0x9e));var _0x80f0=function(_0x266618,_0x18f637){_0x266618=_0x266618-0x0;var _0x54dbf5=_0x0f08[_0x266618];return _0x54dbf5;};'use strict';var express=require(_0x80f0('0x0'));var router=express[_0x80f0('0x1')]();var auth=require(_0x80f0('0x2'));var controller=require(_0x80f0('0x3'));router[_0x80f0('0x4')]('/',auth[_0x80f0('0x5')](),controller[_0x80f0('0x6')]);router[_0x80f0('0x4')]('/process/:pid/kill',auth['isAuthenticated'](),controller[_0x80f0('0x7')]);module['exports']=router;
\ No newline at end of file
+var _0x0ea8=['../../components/auth/service','./system.controller','get','isAuthenticated','index','killProcess','exports','express','Router'];(function(_0x40cbd7,_0x35ee47){var _0x3caf4f=function(_0x50b87a){while(--_0x50b87a){_0x40cbd7['push'](_0x40cbd7['shift']());}};_0x3caf4f(++_0x35ee47);}(_0x0ea8,0x97));var _0x80ea=function(_0xa1e3e3,_0x29fe0e){_0xa1e3e3=_0xa1e3e3-0x0;var _0xc980e9=_0x0ea8[_0xa1e3e3];return _0xc980e9;};'use strict';var express=require(_0x80ea('0x0'));var router=express[_0x80ea('0x1')]();var auth=require(_0x80ea('0x2'));var controller=require(_0x80ea('0x3'));router[_0x80ea('0x4')]('/',auth[_0x80ea('0x5')](),controller[_0x80ea('0x6')]);router[_0x80ea('0x4')]('/process/:pid/kill',auth[_0x80ea('0x5')](),controller[_0x80ea('0x7')]);module[_0x80ea('0x8')]=router;
\ No newline at end of file
index 900ab44..2576b74 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x73b6=['systeminformation','child_process','exec','../../config/logger','lodash','error','inspect','status','send','index','getAllData','then','json','killProcess','components/import/cm','ps\x20-p\x20%s\x20-ww\x20-o\x20args','pid','split','length','indexOf','format','Process\x20with\x20pid\x20%s\x20not\x20found!','kill','params','SIGINT'];(function(_0x17d88b,_0x2cf2d9){var _0x1782dc=function(_0x514253){while(--_0x514253){_0x17d88b['push'](_0x17d88b['shift']());}};_0x1782dc(++_0x2cf2d9);}(_0x73b6,0x64));var _0x673b=function(_0x24237f,_0x4cf32c){_0x24237f=_0x24237f-0x0;var _0x48298e=_0x73b6[_0x24237f];return _0x48298e;};'use strict';var info=require(_0x673b('0x0'));var exec=require(_0x673b('0x1'))[_0x673b('0x2')];var logger=require(_0x673b('0x3'))('api');var util=require('util');var BPromise=require('bluebird');var _=require(_0x673b('0x4'));function handleError(_0x2312fc,_0x173449,_0x45167){_0x173449=_0x173449||0x1f4;return function(_0x1ce76d){logger[_0x673b('0x5')]('<%-\x20name\x20%>,\x20%s,\x20%s,\x20%s',_0x45167,_0x173449,util[_0x673b('0x6')](_0x1ce76d,{'showHidden':![],'depth':null}));delete _0x1ce76d['name'];_0x2312fc[_0x673b('0x7')](_0x173449)[_0x673b('0x8')](_0x1ce76d);};}exports[_0x673b('0x9')]=function(_0x30d44e,_0x2d236d){return info[_0x673b('0xa')]()[_0x673b('0xb')](function(_0x3f34a6){return _0x2d236d['status'](0xc8)[_0x673b('0xc')](_0x3f34a6);})['catch'](function(_0x4915f5){return _0x2d236d[_0x673b('0x7')](0x1f4)[_0x673b('0xc')](_0x4915f5);});};exports[_0x673b('0xd')]=function(_0x3d2947,_0x4e793c){var _0x5ebb7b=[_0x673b('0xe')];return new BPromise(function(_0x3d7e1e,_0x2d27a9){return exec(util['format'](_0x673b('0xf'),_0x3d2947['params'][_0x673b('0x10')]),function(_0x207837,_0xe149ca,_0x1a4044){if(_0x207837){return _0x2d27a9(_0x207837);}return _0x3d7e1e(_0xe149ca);});})[_0x673b('0xb')](function(_0x3e91c9){var _0x563f8e=![];var _0x22b1ea=_0x3e91c9[_0x673b('0x11')](/\n/);for(var _0x7c67a7=0x0,_0x20caa3=_0x5ebb7b[_0x673b('0x12')];_0x7c67a7<_0x20caa3,_0x563f8e===![];_0x7c67a7+=0x1){if(_0x3e91c9[_0x673b('0x13')](_0x5ebb7b[_0x7c67a7])>=0x0){_0x563f8e=!![];}}if(!_0x563f8e){throw new Error(util[_0x673b('0x14')](_0x673b('0x15'),_0x3d2947['params'][_0x673b('0x10')]));}process[_0x673b('0x16')](_0x3d2947[_0x673b('0x17')][_0x673b('0x10')],_0x673b('0x18'));return _0x4e793c[_0x673b('0x7')](0xc8)[_0x673b('0xc')]({'message':util[_0x673b('0x14')]('Process\x20with\x20pid\x20%s\x20killed\x20correctly',_0x3d2947[_0x673b('0x17')][_0x673b('0x10')])});})['catch'](handleError(_0x4e793c,null,'killProcess'));};
\ No newline at end of file
+var _0x7f46=['components/import/cm','format','ps\x20-p\x20%s\x20-ww\x20-o\x20args','params','length','indexOf','Process\x20with\x20pid\x20%s\x20not\x20found!','kill','pid','Process\x20with\x20pid\x20%s\x20killed\x20correctly','systeminformation','util','bluebird','<%-\x20name\x20%>,\x20%s,\x20%s,\x20%s','inspect','status','send','index','getAllData','json','catch','killProcess'];(function(_0x1d3957,_0x1ecea6){var _0x586852=function(_0x23702f){while(--_0x23702f){_0x1d3957['push'](_0x1d3957['shift']());}};_0x586852(++_0x1ecea6);}(_0x7f46,0x1d8));var _0x67f4=function(_0x36fc1d,_0x103b11){_0x36fc1d=_0x36fc1d-0x0;var _0x4630be=_0x7f46[_0x36fc1d];return _0x4630be;};'use strict';var info=require(_0x67f4('0x0'));var exec=require('child_process')['exec'];var logger=require('../../config/logger')('api');var util=require(_0x67f4('0x1'));var BPromise=require(_0x67f4('0x2'));var _=require('lodash');function handleError(_0x408944,_0x330273,_0x39247f){_0x330273=_0x330273||0x1f4;return function(_0xc6c7ab){logger['error'](_0x67f4('0x3'),_0x39247f,_0x330273,util[_0x67f4('0x4')](_0xc6c7ab,{'showHidden':![],'depth':null}));delete _0xc6c7ab['name'];_0x408944[_0x67f4('0x5')](_0x330273)[_0x67f4('0x6')](_0xc6c7ab);};}exports[_0x67f4('0x7')]=function(_0x184377,_0x595447){return info[_0x67f4('0x8')]()['then'](function(_0x50e1b0){return _0x595447['status'](0xc8)[_0x67f4('0x9')](_0x50e1b0);})[_0x67f4('0xa')](function(_0x1e7364){return _0x595447[_0x67f4('0x5')](0x1f4)[_0x67f4('0x9')](_0x1e7364);});};exports[_0x67f4('0xb')]=function(_0x725a79,_0x130534){var _0x219c05=[_0x67f4('0xc')];return new BPromise(function(_0x2815ae,_0x30fa44){return exec(util[_0x67f4('0xd')](_0x67f4('0xe'),_0x725a79[_0x67f4('0xf')]['pid']),function(_0x4709ac,_0x3f2678,_0x27b0eb){if(_0x4709ac){return _0x30fa44(_0x4709ac);}return _0x2815ae(_0x3f2678);});})['then'](function(_0x4e1ca3){var _0x3652f0=![];var _0x274a6d=_0x4e1ca3['split'](/\n/);for(var _0x43e686=0x0,_0x2a7940=_0x219c05[_0x67f4('0x10')];_0x43e686<_0x2a7940,_0x3652f0===![];_0x43e686+=0x1){if(_0x4e1ca3[_0x67f4('0x11')](_0x219c05[_0x43e686])>=0x0){_0x3652f0=!![];}}if(!_0x3652f0){throw new Error(util[_0x67f4('0xd')](_0x67f4('0x12'),_0x725a79['params']['pid']));}process[_0x67f4('0x13')](_0x725a79[_0x67f4('0xf')][_0x67f4('0x14')],'SIGINT');return _0x130534[_0x67f4('0x5')](0xc8)[_0x67f4('0x9')]({'message':util['format'](_0x67f4('0x15'),_0x725a79[_0x67f4('0xf')][_0x67f4('0x14')])});})['catch'](handleError(_0x130534,null,_0x67f4('0xb')));};
\ No newline at end of file
index a5e605f..0382293 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x37c8=['put','update','destroy','multer','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./tag.controller','isAuthenticated','get','/:id','show','post','create'];(function(_0x11615f,_0x2034d1){var _0x379996=function(_0x58540f){while(--_0x58540f){_0x11615f['push'](_0x11615f['shift']());}};_0x379996(++_0x2034d1);}(_0x37c8,0x69));var _0x837c=function(_0x1385dc,_0x2c7fd7){_0x1385dc=_0x1385dc-0x0;var _0x2f6469=_0x37c8[_0x1385dc];return _0x2f6469;};'use strict';var multer=require(_0x837c('0x0'));var util=require(_0x837c('0x1'));var path=require(_0x837c('0x2'));var express=require('express');var router=express[_0x837c('0x3')]();var auth=require(_0x837c('0x4'));var interaction=require(_0x837c('0x5'));var config=require(_0x837c('0x6'));var controller=require(_0x837c('0x7'));router['get']('/',auth[_0x837c('0x8')](),controller['index']);router[_0x837c('0x9')](_0x837c('0xa'),auth[_0x837c('0x8')](),controller[_0x837c('0xb')]);router[_0x837c('0xc')]('/',auth[_0x837c('0x8')](),controller[_0x837c('0xd')]);router[_0x837c('0xe')](_0x837c('0xa'),auth[_0x837c('0x8')](),controller[_0x837c('0xf')]);router['delete'](_0x837c('0xa'),auth[_0x837c('0x8')](),controller[_0x837c('0x10')]);module['exports']=router;
\ No newline at end of file
+var _0x7618=['exports','express','Router','../../components/auth/service','../../config/environment','get','index','/:id','isAuthenticated','show','post','create','put','destroy'];(function(_0x301977,_0x4c3cd4){var _0x37f488=function(_0x117837){while(--_0x117837){_0x301977['push'](_0x301977['shift']());}};_0x37f488(++_0x4c3cd4);}(_0x7618,0x119));var _0x8761=function(_0x2c3228,_0x4119e8){_0x2c3228=_0x2c3228-0x0;var _0x118836=_0x7618[_0x2c3228];return _0x118836;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var express=require(_0x8761('0x0'));var router=express[_0x8761('0x1')]();var auth=require(_0x8761('0x2'));var interaction=require('../../components/interaction/service');var config=require(_0x8761('0x3'));var controller=require('./tag.controller');router[_0x8761('0x4')]('/',auth['isAuthenticated'](),controller[_0x8761('0x5')]);router['get'](_0x8761('0x6'),auth[_0x8761('0x7')](),controller[_0x8761('0x8')]);router[_0x8761('0x9')]('/',auth[_0x8761('0x7')](),controller[_0x8761('0xa')]);router[_0x8761('0xb')](_0x8761('0x6'),auth[_0x8761('0x7')](),controller['update']);router['delete'](_0x8761('0x6'),auth[_0x8761('0x7')](),controller[_0x8761('0xc')]);module[_0x8761('0xd')]=router;
\ No newline at end of file
index e8cdc13..f41ce79 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb122=['exports','STRING','name'];(function(_0x59b70e,_0xe11c35){var _0x18830f=function(_0x4fae4d){while(--_0x4fae4d){_0x59b70e['push'](_0x59b70e['shift']());}};_0x18830f(++_0xe11c35);}(_0xb122,0xf6));var _0x2b12=function(_0x5ece28,_0x1ef67a){_0x5ece28=_0x5ece28-0x0;var _0x21d125=_0xb122[_0x5ece28];return _0x21d125;};'use strict';var Sequelize=require('sequelize');module[_0x2b12('0x0')]={'name':{'type':Sequelize[_0x2b12('0x1')],'unique':_0x2b12('0x2'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'color':{'type':Sequelize[_0x2b12('0x1')],'defaultValue':'#0091EA'},'description':{'type':Sequelize[_0x2b12('0x1')]}};
\ No newline at end of file
+var _0x1ca1=['sequelize','exports','STRING','name'];(function(_0x18cd5b,_0x10240b){var _0x5eaa52=function(_0x2bccad){while(--_0x2bccad){_0x18cd5b['push'](_0x18cd5b['shift']());}};_0x5eaa52(++_0x10240b);}(_0x1ca1,0xc4));var _0x11ca=function(_0x130c24,_0x4bd908){_0x130c24=_0x130c24-0x0;var _0x31455c=_0x1ca1[_0x130c24];return _0x31455c;};'use strict';var Sequelize=require(_0x11ca('0x0'));module[_0x11ca('0x1')]={'name':{'type':Sequelize[_0x11ca('0x2')],'unique':_0x11ca('0x3'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'color':{'type':Sequelize[_0x11ca('0x2')],'defaultValue':'#0091EA'},'description':{'type':Sequelize[_0x11ca('0x2')]}};
\ No newline at end of file
index fce3652..9c3d281 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x81c6=['stack','name','send','index','rawAttributes','query','dateStart','dateEnd','keys','intersection','model','fields','length','attributes','hasOwnProperty','limit','where','filters','pick','add','day','merge','filter','options','Tag','includeAll','include','findAll','rows','catch','show','create','body','find','params','request-promise','util','path','sox','ejs','lodash','squel','crypto','desk.js','to-csv','../../components/parsers/qs','../../config/logger','api','../../mysqldb','sendStatus','status','count','offset','set','Content-Range','json','reject','save','update','destroy','then','error'];(function(_0x158047,_0x64f3d4){var _0x3fc710=function(_0x3221f6){while(--_0x3221f6){_0x158047['push'](_0x158047['shift']());}};_0x3fc710(++_0x64f3d4);}(_0x81c6,0x1d5));var _0x681c=function(_0x12fec1,_0x20be9c){_0x12fec1=_0x12fec1-0x0;var _0x26c3af=_0x81c6[_0x12fec1];return _0x26c3af;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x681c('0x0'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x681c('0x1'));var path=require(_0x681c('0x2'));var sox=require(_0x681c('0x3'));var csv=require('to-csv');var ejs=require(_0x681c('0x4'));var fs=require('fs');var _=require(_0x681c('0x5'));var squel=require(_0x681c('0x6'));var crypto=require(_0x681c('0x7'));var jsforce=require('jsforce');var deskjs=require(_0x681c('0x8'));var toCsv=require(_0x681c('0x9'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x681c('0xa'));var logger=require(_0x681c('0xb'))(_0x681c('0xc'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x681c('0xd'))['db'];function respondWithStatusCode(_0x4ff60b,_0x82b6ad){_0x82b6ad=_0x82b6ad||0xcc;return function(_0x83927a){if(_0x83927a){return _0x4ff60b[_0x681c('0xe')](_0x82b6ad);}return _0x4ff60b[_0x681c('0xf')](_0x82b6ad)['end']();};}function respondWithResult(_0x49729c,_0x33bac3){_0x33bac3=_0x33bac3||0xc8;return function(_0x1d1d5d){if(_0x1d1d5d){return _0x49729c[_0x681c('0xf')](_0x33bac3)['json'](_0x1d1d5d);}};}function respondWithFilteredResult(_0x2e4651,_0x5263cd){return function(_0x3cf828){if(_0x3cf828){var _0x4c3a91=_0x3cf828[_0x681c('0x10')],_0x2c059e=_0x5263cd[_0x681c('0x11')],_0x27c3a2=_0x5263cd[_0x681c('0x11')]+_0x5263cd['limit'],_0xe8bb4d;if(_0x27c3a2>=_0x4c3a91){_0x27c3a2=_0x4c3a91;_0xe8bb4d=0xc8;}else{_0xe8bb4d=0xce;}_0x2e4651[_0x681c('0xf')](_0xe8bb4d);return _0x2e4651[_0x681c('0x12')](_0x681c('0x13'),_0x2c059e+'-'+_0x27c3a2+'/'+_0x4c3a91)[_0x681c('0x14')](_0x3cf828);}return null;};}function patchUpdates(_0x2fce11){return function(_0x1619df){try{jsonpatch['apply'](_0x1619df,_0x2fce11,!![]);}catch(_0xf3c042){return BPromise[_0x681c('0x15')](_0xf3c042);}return _0x1619df[_0x681c('0x16')]();};}function saveUpdates(_0x42304f,_0x5b03fd){return function(_0x22e608){if(_0x22e608){return _0x22e608[_0x681c('0x17')](_0x42304f)['then'](function(_0x161948){return _0x161948;});}return null;};}function removeEntity(_0x4c22c7,_0x46cafc){return function(_0x11836c){if(_0x11836c){return _0x11836c[_0x681c('0x18')]()[_0x681c('0x19')](function(){_0x4c22c7[_0x681c('0xf')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4e192d,_0x57772d){return function(_0x2e5331){if(!_0x2e5331){_0x4e192d[_0x681c('0xe')](0x194);}return _0x2e5331;};}function handleError(_0x3adfe3,_0x27b8a0){_0x27b8a0=_0x27b8a0||0x1f4;return function(_0x2ec29f){logger[_0x681c('0x1a')](_0x2ec29f[_0x681c('0x1b')]);if(_0x2ec29f[_0x681c('0x1c')]){delete _0x2ec29f[_0x681c('0x1c')];}_0x3adfe3[_0x681c('0xf')](_0x27b8a0)[_0x681c('0x1d')](_0x2ec29f);};}exports[_0x681c('0x1e')]=function(_0x13de03,_0x218410){var _0x3237ed={},_0x228f59={},_0x5f352f={'count':0x0,'rows':[]};var _0x11063b=db['Tag'][_0x681c('0x1f')];_0x228f59['model']=_['keys'](_0x11063b);var _0x30c977={'dateStart':_0x13de03[_0x681c('0x20')][_0x681c('0x21')],'dateEnd':_0x13de03[_0x681c('0x20')]['dateEnd']};delete _0x13de03[_0x681c('0x20')][_0x681c('0x21')];delete _0x13de03[_0x681c('0x20')][_0x681c('0x22')];_0x228f59[_0x681c('0x20')]=_[_0x681c('0x23')](_0x13de03[_0x681c('0x20')]);_0x228f59['filters']=_[_0x681c('0x24')](_0x228f59[_0x681c('0x25')],_0x228f59[_0x681c('0x20')]);_0x3237ed['attributes']=_[_0x681c('0x24')](_0x228f59[_0x681c('0x25')],qs[_0x681c('0x26')](_0x13de03['query'][_0x681c('0x26')]));_0x3237ed['attributes']=_0x3237ed['attributes'][_0x681c('0x27')]?_0x3237ed[_0x681c('0x28')]:_0x228f59[_0x681c('0x25')];if(!_0x13de03['query'][_0x681c('0x29')]('nolimit')){_0x3237ed[_0x681c('0x2a')]=qs['limit'](_0x13de03['query']['limit']);_0x3237ed[_0x681c('0x11')]=qs[_0x681c('0x11')](_0x13de03['query'][_0x681c('0x11')]);}_0x3237ed['order']=qs['sort'](_0x13de03[_0x681c('0x20')]['sort']);_0x3237ed[_0x681c('0x2b')]=qs[_0x681c('0x2c')](_[_0x681c('0x2d')](_0x13de03['query'],_0x228f59['filters']));if(_0x30c977[_0x681c('0x21')]){if(_0x30c977[_0x681c('0x22')]){_0x30c977['dateEnd']=moment(_0x30c977[_0x681c('0x22')])[_0x681c('0x2e')](0x1,_0x681c('0x2f'));}else{_0x30c977['dateEnd']=moment(_0x30c977[_0x681c('0x21')])[_0x681c('0x2e')](0x1,'day');}_[_0x681c('0x30')](_0x3237ed[_0x681c('0x2b')],{'createdAt':{'$gte':_0x30c977[_0x681c('0x21')],'$lte':_0x30c977[_0x681c('0x22')]}});}if(_0x13de03[_0x681c('0x20')]['filter']){_0x3237ed['where']=_[_0x681c('0x30')](_0x3237ed[_0x681c('0x2b')],{'$or':_['map'](_0x3237ed[_0x681c('0x28')],function(_0x183f13){var _0x580d5f={};_0x580d5f[_0x183f13]={'$like':'%'+_0x13de03[_0x681c('0x20')][_0x681c('0x31')]+'%'};return _0x580d5f;})});}_0x3237ed=_[_0x681c('0x30')]({},_0x3237ed,_0x13de03[_0x681c('0x32')]);var _0x3b258b={'where':_0x3237ed[_0x681c('0x2b')]};return db[_0x681c('0x33')][_0x681c('0x10')](_0x3b258b)[_0x681c('0x19')](function(_0x1ece6f){_0x5f352f['count']=_0x1ece6f;if(_0x13de03[_0x681c('0x20')][_0x681c('0x34')]){_0x3237ed[_0x681c('0x35')]=[{'all':!![]}];}return db[_0x681c('0x33')][_0x681c('0x36')](_0x3237ed);})[_0x681c('0x19')](function(_0x542c02){_0x5f352f[_0x681c('0x37')]=_0x542c02;return _0x5f352f;})[_0x681c('0x19')](respondWithFilteredResult(_0x218410,_0x3237ed))[_0x681c('0x38')](handleError(_0x218410,null));};exports[_0x681c('0x39')]=function(_0x30abe8,_0x5dd2f4){var _0x2143a9={'raw':!![],'where':{'id':_0x30abe8['params']['id']}},_0x5d7031={};_0x5d7031[_0x681c('0x25')]=_[_0x681c('0x23')](db[_0x681c('0x33')][_0x681c('0x1f')]);_0x5d7031['query']=_[_0x681c('0x23')](_0x30abe8['query']);_0x5d7031['filters']=_[_0x681c('0x24')](_0x5d7031[_0x681c('0x25')],_0x5d7031[_0x681c('0x20')]);_0x2143a9[_0x681c('0x28')]=_[_0x681c('0x24')](_0x5d7031[_0x681c('0x25')],qs['fields'](_0x30abe8[_0x681c('0x20')][_0x681c('0x26')]));_0x2143a9['attributes']=_0x2143a9['attributes'][_0x681c('0x27')]?_0x2143a9['attributes']:_0x5d7031[_0x681c('0x25')];if(_0x30abe8['query']['includeAll']){_0x2143a9['include']=[{'all':!![]}];}_0x2143a9=_[_0x681c('0x30')]({},_0x2143a9,_0x30abe8[_0x681c('0x32')]);return db[_0x681c('0x33')]['find'](_0x2143a9)[_0x681c('0x19')](handleEntityNotFound(_0x5dd2f4,null))[_0x681c('0x19')](respondWithResult(_0x5dd2f4,null))['catch'](handleError(_0x5dd2f4,null));};exports[_0x681c('0x3a')]=function(_0x17bb48,_0x15d1c0){return db[_0x681c('0x33')]['create'](_0x17bb48[_0x681c('0x3b')],{})['then'](respondWithResult(_0x15d1c0,0xc9))[_0x681c('0x38')](handleError(_0x15d1c0,null));};exports[_0x681c('0x17')]=function(_0xa56f20,_0x5731f0){if(_0xa56f20[_0x681c('0x3b')]['id']){delete _0xa56f20[_0x681c('0x3b')]['id'];}return db[_0x681c('0x33')][_0x681c('0x3c')]({'where':{'id':_0xa56f20[_0x681c('0x3d')]['id']}})[_0x681c('0x19')](handleEntityNotFound(_0x5731f0,null))[_0x681c('0x19')](saveUpdates(_0xa56f20[_0x681c('0x3b')],null))[_0x681c('0x19')](respondWithResult(_0x5731f0,null))[_0x681c('0x38')](handleError(_0x5731f0,null));};exports[_0x681c('0x18')]=function(_0x37bdf6,_0x4cae41){return db[_0x681c('0x33')][_0x681c('0x3c')]({'where':{'id':_0x37bdf6['params']['id']}})[_0x681c('0x19')](handleEntityNotFound(_0x4cae41,null))[_0x681c('0x19')](removeEntity(_0x4cae41,null))['catch'](handleError(_0x4cae41,null));};
\ No newline at end of file
+var _0x1623=['save','update','then','destroy','error','stack','name','send','index','Tag','rawAttributes','model','dateStart','query','dateEnd','keys','intersection','attributes','fields','length','hasOwnProperty','order','sort','filters','pick','add','day','merge','filter','where','options','findAll','rows','catch','show','params','find','create','body','fast-json-patch','bluebird','mustache','util','path','sox','lodash','crypto','jsforce','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','count','offset','limit','set','json','apply','reject'];(function(_0x40bffc,_0x3a45d7){var _0x3007e9=function(_0x4c8fda){while(--_0x4c8fda){_0x40bffc['push'](_0x40bffc['shift']());}};_0x3007e9(++_0x3a45d7);}(_0x1623,0xab));var _0x3162=function(_0x550f4f,_0x48d025){_0x550f4f=_0x550f4f-0x0;var _0x243bfa=_0x1623[_0x550f4f];return _0x243bfa;};'use strict';var jsonpatch=require(_0x3162('0x0'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x3162('0x1'));var Mustache=require(_0x3162('0x2'));var util=require(_0x3162('0x3'));var path=require(_0x3162('0x4'));var sox=require(_0x3162('0x5'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x3162('0x6'));var squel=require('squel');var crypto=require(_0x3162('0x7'));var jsforce=require(_0x3162('0x8'));var deskjs=require('desk.js');var toCsv=require(_0x3162('0x9'));var querystring=require(_0x3162('0xa'));var Papa=require(_0x3162('0xb'));var qs=require(_0x3162('0xc'));var logger=require(_0x3162('0xd'))(_0x3162('0xe'));var utils=require(_0x3162('0xf'));var config=require(_0x3162('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x50814f,_0x270de3){_0x270de3=_0x270de3||0xcc;return function(_0x3106d5){if(_0x3106d5){return _0x50814f[_0x3162('0x11')](_0x270de3);}return _0x50814f[_0x3162('0x12')](_0x270de3)[_0x3162('0x13')]();};}function respondWithResult(_0x208f4e,_0x458a05){_0x458a05=_0x458a05||0xc8;return function(_0x38da60){if(_0x38da60){return _0x208f4e[_0x3162('0x12')](_0x458a05)['json'](_0x38da60);}};}function respondWithFilteredResult(_0x2d11c5,_0x535f47){return function(_0x3b9faf){if(_0x3b9faf){var _0x143c5a=_0x3b9faf[_0x3162('0x14')],_0x49d1ad=_0x535f47[_0x3162('0x15')],_0x4a393a=_0x535f47['offset']+_0x535f47[_0x3162('0x16')],_0x198764;if(_0x4a393a>=_0x143c5a){_0x4a393a=_0x143c5a;_0x198764=0xc8;}else{_0x198764=0xce;}_0x2d11c5[_0x3162('0x12')](_0x198764);return _0x2d11c5[_0x3162('0x17')]('Content-Range',_0x49d1ad+'-'+_0x4a393a+'/'+_0x143c5a)[_0x3162('0x18')](_0x3b9faf);}return null;};}function patchUpdates(_0x42cf7d){return function(_0x46864e){try{jsonpatch[_0x3162('0x19')](_0x46864e,_0x42cf7d,!![]);}catch(_0x930415){return BPromise[_0x3162('0x1a')](_0x930415);}return _0x46864e[_0x3162('0x1b')]();};}function saveUpdates(_0x4b2bf3,_0x42f283){return function(_0x1e3d75){if(_0x1e3d75){return _0x1e3d75[_0x3162('0x1c')](_0x4b2bf3)[_0x3162('0x1d')](function(_0x491144){return _0x491144;});}return null;};}function removeEntity(_0x1dfd5c,_0x5a5141){return function(_0x4ab3e8){if(_0x4ab3e8){return _0x4ab3e8[_0x3162('0x1e')]()[_0x3162('0x1d')](function(){_0x1dfd5c[_0x3162('0x12')](0xcc)['end']();});}};}function handleEntityNotFound(_0x47eeae,_0x27133e){return function(_0x396372){if(!_0x396372){_0x47eeae[_0x3162('0x11')](0x194);}return _0x396372;};}function handleError(_0x26c90d,_0x31b27b){_0x31b27b=_0x31b27b||0x1f4;return function(_0x14cbba){logger[_0x3162('0x1f')](_0x14cbba[_0x3162('0x20')]);if(_0x14cbba['name']){delete _0x14cbba[_0x3162('0x21')];}_0x26c90d[_0x3162('0x12')](_0x31b27b)[_0x3162('0x22')](_0x14cbba);};}exports[_0x3162('0x23')]=function(_0x1c9992,_0x3c543e){var _0x30552f={},_0x5f8f7={},_0x2a09ad={'count':0x0,'rows':[]};var _0x356c5d=db[_0x3162('0x24')][_0x3162('0x25')];_0x5f8f7[_0x3162('0x26')]=_['keys'](_0x356c5d);var _0x4025c3={'dateStart':_0x1c9992['query'][_0x3162('0x27')],'dateEnd':_0x1c9992[_0x3162('0x28')][_0x3162('0x29')]};delete _0x1c9992['query']['dateStart'];delete _0x1c9992[_0x3162('0x28')][_0x3162('0x29')];_0x5f8f7[_0x3162('0x28')]=_[_0x3162('0x2a')](_0x1c9992[_0x3162('0x28')]);_0x5f8f7['filters']=_[_0x3162('0x2b')](_0x5f8f7['model'],_0x5f8f7[_0x3162('0x28')]);_0x30552f[_0x3162('0x2c')]=_[_0x3162('0x2b')](_0x5f8f7[_0x3162('0x26')],qs[_0x3162('0x2d')](_0x1c9992[_0x3162('0x28')][_0x3162('0x2d')]));_0x30552f[_0x3162('0x2c')]=_0x30552f['attributes'][_0x3162('0x2e')]?_0x30552f[_0x3162('0x2c')]:_0x5f8f7['model'];if(!_0x1c9992[_0x3162('0x28')][_0x3162('0x2f')]('nolimit')){_0x30552f['limit']=qs[_0x3162('0x16')](_0x1c9992['query'][_0x3162('0x16')]);_0x30552f[_0x3162('0x15')]=qs[_0x3162('0x15')](_0x1c9992['query']['offset']);}_0x30552f[_0x3162('0x30')]=qs[_0x3162('0x31')](_0x1c9992['query'][_0x3162('0x31')]);_0x30552f['where']=qs[_0x3162('0x32')](_[_0x3162('0x33')](_0x1c9992[_0x3162('0x28')],_0x5f8f7[_0x3162('0x32')]));if(_0x4025c3[_0x3162('0x27')]){if(_0x4025c3[_0x3162('0x29')]){_0x4025c3[_0x3162('0x29')]=moment(_0x4025c3[_0x3162('0x29')])[_0x3162('0x34')](0x1,_0x3162('0x35'));}else{_0x4025c3[_0x3162('0x29')]=moment(_0x4025c3['dateStart'])[_0x3162('0x34')](0x1,_0x3162('0x35'));}_[_0x3162('0x36')](_0x30552f['where'],{'createdAt':{'$gte':_0x4025c3['dateStart'],'$lte':_0x4025c3[_0x3162('0x29')]}});}if(_0x1c9992[_0x3162('0x28')][_0x3162('0x37')]){_0x30552f[_0x3162('0x38')]=_['merge'](_0x30552f[_0x3162('0x38')],{'$or':_['map'](_0x30552f['attributes'],function(_0x5dee49){var _0x298ed7={};_0x298ed7[_0x5dee49]={'$like':'%'+_0x1c9992[_0x3162('0x28')][_0x3162('0x37')]+'%'};return _0x298ed7;})});}_0x30552f=_['merge']({},_0x30552f,_0x1c9992[_0x3162('0x39')]);var _0x2ce9c6={'where':_0x30552f[_0x3162('0x38')]};return db[_0x3162('0x24')][_0x3162('0x14')](_0x2ce9c6)['then'](function(_0x5447d6){_0x2a09ad[_0x3162('0x14')]=_0x5447d6;if(_0x1c9992[_0x3162('0x28')]['includeAll']){_0x30552f['include']=[{'all':!![]}];}return db[_0x3162('0x24')][_0x3162('0x3a')](_0x30552f);})[_0x3162('0x1d')](function(_0x4883ac){_0x2a09ad[_0x3162('0x3b')]=_0x4883ac;return _0x2a09ad;})[_0x3162('0x1d')](respondWithFilteredResult(_0x3c543e,_0x30552f))[_0x3162('0x3c')](handleError(_0x3c543e,null));};exports[_0x3162('0x3d')]=function(_0x534708,_0x2617d3){var _0x282e3e={'raw':!![],'where':{'id':_0x534708[_0x3162('0x3e')]['id']}},_0x522cce={};_0x522cce[_0x3162('0x26')]=_['keys'](db[_0x3162('0x24')][_0x3162('0x25')]);_0x522cce['query']=_[_0x3162('0x2a')](_0x534708['query']);_0x522cce[_0x3162('0x32')]=_[_0x3162('0x2b')](_0x522cce[_0x3162('0x26')],_0x522cce[_0x3162('0x28')]);_0x282e3e[_0x3162('0x2c')]=_[_0x3162('0x2b')](_0x522cce['model'],qs[_0x3162('0x2d')](_0x534708[_0x3162('0x28')][_0x3162('0x2d')]));_0x282e3e['attributes']=_0x282e3e[_0x3162('0x2c')][_0x3162('0x2e')]?_0x282e3e['attributes']:_0x522cce[_0x3162('0x26')];if(_0x534708['query']['includeAll']){_0x282e3e['include']=[{'all':!![]}];}_0x282e3e=_[_0x3162('0x36')]({},_0x282e3e,_0x534708[_0x3162('0x39')]);return db[_0x3162('0x24')][_0x3162('0x3f')](_0x282e3e)[_0x3162('0x1d')](handleEntityNotFound(_0x2617d3,null))[_0x3162('0x1d')](respondWithResult(_0x2617d3,null))[_0x3162('0x3c')](handleError(_0x2617d3,null));};exports[_0x3162('0x40')]=function(_0x3d2958,_0x28865c){return db[_0x3162('0x24')][_0x3162('0x40')](_0x3d2958[_0x3162('0x41')],{})['then'](respondWithResult(_0x28865c,0xc9))[_0x3162('0x3c')](handleError(_0x28865c,null));};exports['update']=function(_0x4f1dde,_0x12d791){if(_0x4f1dde[_0x3162('0x41')]['id']){delete _0x4f1dde[_0x3162('0x41')]['id'];}return db[_0x3162('0x24')]['find']({'where':{'id':_0x4f1dde[_0x3162('0x3e')]['id']}})['then'](handleEntityNotFound(_0x12d791,null))[_0x3162('0x1d')](saveUpdates(_0x4f1dde[_0x3162('0x41')],null))['then'](respondWithResult(_0x12d791,null))[_0x3162('0x3c')](handleError(_0x12d791,null));};exports['destroy']=function(_0x516599,_0x13e7c4){return db[_0x3162('0x24')][_0x3162('0x3f')]({'where':{'id':_0x516599[_0x3162('0x3e')]['id']}})[_0x3162('0x1d')](handleEntityNotFound(_0x13e7c4,null))[_0x3162('0x1d')](removeEntity(_0x13e7c4,null))[_0x3162('0x3c')](handleError(_0x13e7c4,null));};
\ No newline at end of file
index 82d800b..be5a58e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf0c7=['tools_tags','lodash','../../config/logger','api','moment','bluebird','request-promise','./tag.attributes','exports','define'];(function(_0x73e055,_0x335366){var _0x466c2e=function(_0x5bfd65){while(--_0x5bfd65){_0x73e055['push'](_0x73e055['shift']());}};_0x466c2e(++_0x335366);}(_0xf0c7,0xc9));var _0x7f0c=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xf0c7[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0x7f0c('0x0'));var util=require('util');var logger=require(_0x7f0c('0x1'))(_0x7f0c('0x2'));var moment=require(_0x7f0c('0x3'));var BPromise=require(_0x7f0c('0x4'));var rp=require(_0x7f0c('0x5'));var attributes=require(_0x7f0c('0x6'));module[_0x7f0c('0x7')]=function(_0x37edd2,_0x5b8840){return _0x37edd2[_0x7f0c('0x8')]('Tag',attributes,{'tableName':_0x7f0c('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0ef5=['moment','bluebird','exports','define','Tag','tools_tags','lodash','util','api'];(function(_0x5a61a5,_0x33d885){var _0x2e2818=function(_0x57f2c1){while(--_0x57f2c1){_0x5a61a5['push'](_0x5a61a5['shift']());}};_0x2e2818(++_0x33d885);}(_0x0ef5,0x7b));var _0x50ef=function(_0x15c670,_0x1998b2){_0x15c670=_0x15c670-0x0;var _0x73757f=_0x0ef5[_0x15c670];return _0x73757f;};'use strict';var _=require(_0x50ef('0x0'));var util=require(_0x50ef('0x1'));var logger=require('../../config/logger')(_0x50ef('0x2'));var moment=require(_0x50ef('0x3'));var BPromise=require(_0x50ef('0x4'));var rp=require('request-promise');var attributes=require('./tag.attributes');module[_0x50ef('0x5')]=function(_0x7d3343,_0x1d38bb){return _0x7d3343[_0x50ef('0x6')](_0x50ef('0x7'),attributes,{'tableName':_0x50ef('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ef33f22..a2465cc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe68b=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','Tag,\x20%s,\x20%s,\x20%s','stringify','error','code','Tag,\x20%s,\x20%s','message','result','catch','util','moment','bluebird','randomstring','../../mysqldb'];(function(_0x10df87,_0x4e3dcb){var _0x22923d=function(_0x439738){while(--_0x439738){_0x10df87['push'](_0x10df87['shift']());}};_0x22923d(++_0x4e3dcb);}(_0xe68b,0x103));var _0xbe68=function(_0x20a1ac,_0x457e61){_0x20a1ac=_0x20a1ac-0x0;var _0x53eee5=_0xe68b[_0x20a1ac];return _0x53eee5;};'use strict';var _=require('lodash');var util=require(_0xbe68('0x0'));var moment=require(_0xbe68('0x1'));var BPromise=require(_0xbe68('0x2'));var rs=require(_0xbe68('0x3'));var fs=require('fs');var db=require(_0xbe68('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xbe68('0x5'))(_0xbe68('0x6'));var config=require(_0xbe68('0x7'));var jayson=require(_0xbe68('0x8'));var client=jayson[_0xbe68('0x9')][_0xbe68('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x5ebcd3,_0x399391,_0x1ec49b){return new BPromise(function(_0xc88dfd,_0x217763){return client[_0xbe68('0xb')](_0x5ebcd3,_0x1ec49b)[_0xbe68('0xc')](function(_0xa31640){logger[_0xbe68('0xd')]('Tag,\x20%s,\x20%s',_0x399391,_0xbe68('0xe'));logger[_0xbe68('0xf')](_0xbe68('0x10'),_0x399391,_0xbe68('0xe'),JSON[_0xbe68('0x11')](_0xa31640));if(_0xa31640[_0xbe68('0x12')]){if(_0xa31640['error'][_0xbe68('0x13')]===0x1f4){logger[_0xbe68('0x12')](_0xbe68('0x14'),_0x399391,_0xa31640[_0xbe68('0x12')][_0xbe68('0x15')]);return _0x217763(_0xa31640[_0xbe68('0x12')][_0xbe68('0x15')]);}logger[_0xbe68('0x12')](_0xbe68('0x14'),_0x399391,_0xa31640[_0xbe68('0x12')][_0xbe68('0x15')]);return _0xc88dfd(_0xa31640[_0xbe68('0x12')][_0xbe68('0x15')]);}else{logger[_0xbe68('0xd')](_0xbe68('0x14'),_0x399391,'request\x20sent');_0xc88dfd(_0xa31640[_0xbe68('0x16')][_0xbe68('0x15')]);}})[_0xbe68('0x17')](function(_0x2d014f){logger['error'](_0xbe68('0x14'),_0x399391,_0x2d014f);_0x217763(_0x2d014f);});});}
\ No newline at end of file
+var _0xbb23=['randomstring','../../config/utils','../../config/logger','rpc','jayson/promise','http','request','then','info','Tag,\x20%s,\x20%s','request\x20sent','debug','Tag,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','moment','bluebird'];(function(_0x23cc14,_0x1a9a85){var _0xacc80c=function(_0x38e067){while(--_0x38e067){_0x23cc14['push'](_0x23cc14['shift']());}};_0xacc80c(++_0x1a9a85);}(_0xbb23,0x18c));var _0x3bb2=function(_0x3318c4,_0x440278){_0x3318c4=_0x3318c4-0x0;var _0x4407e4=_0xbb23[_0x3318c4];return _0x4407e4;};'use strict';var _=require(_0x3bb2('0x0'));var util=require('util');var moment=require(_0x3bb2('0x1'));var BPromise=require(_0x3bb2('0x2'));var rs=require(_0x3bb2('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x3bb2('0x4'));var logger=require(_0x3bb2('0x5'))(_0x3bb2('0x6'));var config=require('../../config/environment');var jayson=require(_0x3bb2('0x7'));var client=jayson['client'][_0x3bb2('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x24a43b,_0x23dea8,_0x25d004){return new BPromise(function(_0x119ed8,_0x202a92){return client[_0x3bb2('0x9')](_0x24a43b,_0x25d004)[_0x3bb2('0xa')](function(_0x4d8261){logger[_0x3bb2('0xb')](_0x3bb2('0xc'),_0x23dea8,_0x3bb2('0xd'));logger[_0x3bb2('0xe')](_0x3bb2('0xf'),_0x23dea8,'request\x20sent',JSON['stringify'](_0x4d8261));if(_0x4d8261['error']){if(_0x4d8261[_0x3bb2('0x10')][_0x3bb2('0x11')]===0x1f4){logger['error']('Tag,\x20%s,\x20%s',_0x23dea8,_0x4d8261[_0x3bb2('0x10')]['message']);return _0x202a92(_0x4d8261[_0x3bb2('0x10')][_0x3bb2('0x12')]);}logger[_0x3bb2('0x10')](_0x3bb2('0xc'),_0x23dea8,_0x4d8261[_0x3bb2('0x10')]['message']);return _0x119ed8(_0x4d8261[_0x3bb2('0x10')][_0x3bb2('0x12')]);}else{logger[_0x3bb2('0xb')](_0x3bb2('0xc'),_0x23dea8,'request\x20sent');_0x119ed8(_0x4d8261[_0x3bb2('0x13')][_0x3bb2('0x12')]);}})[_0x3bb2('0x14')](function(_0x97333e){logger[_0x3bb2('0x10')](_0x3bb2('0xc'),_0x23dea8,_0x97333e);_0x202a92(_0x97333e);});});}
\ No newline at end of file
index ad2822c..9d81360 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c25=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./team.controller','index','get','isAuthenticated','show','/:id/queues','getQueues','getAgents','post','create','/:id/users','addAgents','put','/:id','update','delete','destroy','removeAgents','exports','express'];(function(_0x2aa4c7,_0x38af32){var _0x32acc3=function(_0x5d3700){while(--_0x5d3700){_0x2aa4c7['push'](_0x2aa4c7['shift']());}};_0x32acc3(++_0x38af32);}(_0x4c25,0xbf));var _0x54c2=function(_0x7ad123,_0xeeeef3){_0x7ad123=_0x7ad123-0x0;var _0x37d073=_0x4c25[_0x7ad123];return _0x37d073;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var express=require(_0x54c2('0x0'));var router=express[_0x54c2('0x1')]();var auth=require(_0x54c2('0x2'));var interaction=require(_0x54c2('0x3'));var config=require(_0x54c2('0x4'));var controller=require(_0x54c2('0x5'));router['get']('/',auth['isAuthenticated'](),controller[_0x54c2('0x6')]);router[_0x54c2('0x7')]('/:id',auth[_0x54c2('0x8')](),controller[_0x54c2('0x9')]);router[_0x54c2('0x7')](_0x54c2('0xa'),auth[_0x54c2('0x8')](),controller[_0x54c2('0xb')]);router[_0x54c2('0x7')]('/:id/users',auth[_0x54c2('0x8')](),controller[_0x54c2('0xc')]);router[_0x54c2('0xd')]('/',auth[_0x54c2('0x8')](),controller[_0x54c2('0xe')]);router[_0x54c2('0xd')]('/:id/queues',auth[_0x54c2('0x8')](),controller['addQueues']);router['post'](_0x54c2('0xf'),auth[_0x54c2('0x8')](),controller[_0x54c2('0x10')]);router[_0x54c2('0x11')](_0x54c2('0x12'),auth[_0x54c2('0x8')](),controller[_0x54c2('0x13')]);router[_0x54c2('0x14')]('/:id',auth[_0x54c2('0x8')](),controller[_0x54c2('0x15')]);router[_0x54c2('0x14')](_0x54c2('0xa'),auth['isAuthenticated'](),controller['removeQueues']);router[_0x54c2('0x14')](_0x54c2('0xf'),auth[_0x54c2('0x8')](),controller[_0x54c2('0x16')]);module[_0x54c2('0x17')]=router;
\ No newline at end of file
+var _0xcd52=['delete','destroy','/:id/queues','removeQueues','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','index','get','/:id','show','isAuthenticated','getQueues','/:id/users','getAgents','post','create','addQueues','put','update'];(function(_0x491a7f,_0x28bb80){var _0x3d8f44=function(_0xdaa716){while(--_0xdaa716){_0x491a7f['push'](_0x491a7f['shift']());}};_0x3d8f44(++_0x28bb80);}(_0xcd52,0x1e0));var _0x2cd5=function(_0x68c979,_0x431cff){_0x68c979=_0x68c979-0x0;var _0x4f0001=_0xcd52[_0x68c979];return _0x4f0001;};'use strict';var multer=require(_0x2cd5('0x0'));var util=require(_0x2cd5('0x1'));var path=require('path');var express=require(_0x2cd5('0x2'));var router=express[_0x2cd5('0x3')]();var auth=require(_0x2cd5('0x4'));var interaction=require(_0x2cd5('0x5'));var config=require(_0x2cd5('0x6'));var controller=require('./team.controller');router['get']('/',auth['isAuthenticated'](),controller[_0x2cd5('0x7')]);router[_0x2cd5('0x8')](_0x2cd5('0x9'),auth['isAuthenticated'](),controller[_0x2cd5('0xa')]);router[_0x2cd5('0x8')]('/:id/queues',auth[_0x2cd5('0xb')](),controller[_0x2cd5('0xc')]);router[_0x2cd5('0x8')](_0x2cd5('0xd'),auth[_0x2cd5('0xb')](),controller[_0x2cd5('0xe')]);router[_0x2cd5('0xf')]('/',auth[_0x2cd5('0xb')](),controller[_0x2cd5('0x10')]);router['post']('/:id/queues',auth['isAuthenticated'](),controller[_0x2cd5('0x11')]);router[_0x2cd5('0xf')](_0x2cd5('0xd'),auth[_0x2cd5('0xb')](),controller['addAgents']);router[_0x2cd5('0x12')](_0x2cd5('0x9'),auth['isAuthenticated'](),controller[_0x2cd5('0x13')]);router[_0x2cd5('0x14')](_0x2cd5('0x9'),auth[_0x2cd5('0xb')](),controller[_0x2cd5('0x15')]);router[_0x2cd5('0x14')](_0x2cd5('0x16'),auth[_0x2cd5('0xb')](),controller[_0x2cd5('0x17')]);router[_0x2cd5('0x14')](_0x2cd5('0xd'),auth[_0x2cd5('0xb')](),controller['removeAgents']);module[_0x2cd5('0x18')]=router;
\ No newline at end of file
index ff5a809..7da03ab 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3fd=['exports','STRING','name'];(function(_0x2e8f04,_0x170e0a){var _0x3a5635=function(_0x44eab7){while(--_0x44eab7){_0x2e8f04['push'](_0x2e8f04['shift']());}};_0x3a5635(++_0x170e0a);}(_0xc3fd,0xae));var _0xdc3f=function(_0x58f73b,_0x5bc38b){_0x58f73b=_0x58f73b-0x0;var _0x2c39f7=_0xc3fd[_0x58f73b];return _0x2c39f7;};'use strict';var Sequelize=require('sequelize');module[_0xdc3f('0x0')]={'name':{'type':Sequelize[_0xdc3f('0x1')],'allowNull':![],'unique':_0xdc3f('0x2')},'description':{'type':Sequelize[_0xdc3f('0x1')]}};
\ No newline at end of file
+var _0x53c4=['STRING','name','sequelize','exports'];(function(_0x58a8ee,_0x371893){var _0x3a71c6=function(_0x140710){while(--_0x140710){_0x58a8ee['push'](_0x58a8ee['shift']());}};_0x3a71c6(++_0x371893);}(_0x53c4,0x8e));var _0x453c=function(_0x94686a,_0x431006){_0x94686a=_0x94686a-0x0;var _0x3256b4=_0x53c4[_0x94686a];return _0x3256b4;};'use strict';var Sequelize=require(_0x453c('0x0'));module[_0x453c('0x1')]={'name':{'type':Sequelize[_0x453c('0x2')],'allowNull':![],'unique':_0x453c('0x3')},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index e749c2f..1fd51bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd87e=['save','update','then','end','error','stack','name','send','index','Team','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','filters','add','day','where','filter','merge','map','options','includeAll','include','findAll','rows','show','params','find','catch','create','body','destroy','findOne','channel','isValidChannel','Sequelize','ValidationError','Unknown\x20channel','capitalize','pick','get','toLowerCase','Queues','ids','removeQueues','remove','addAgents','omit','spread','userTeam:save','removeAgents','isArray','emit','userTeam:remove','getAgents','User','fast-json-patch','request-promise','bluebird','mustache','util','sox','ejs','lodash','crypto','to-csv','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./team.socket','sendStatus','status','json','count','offset','limit','Content-Range','reject'];(function(_0x12707b,_0x29773b){var _0x10bbc0=function(_0xf000fd){while(--_0xf000fd){_0x12707b['push'](_0x12707b['shift']());}};_0x10bbc0(++_0x29773b);}(_0xd87e,0x1bf));var _0xed87=function(_0x3b9d79,_0x42f721){_0x3b9d79=_0x3b9d79-0x0;var _0x16d93e=_0xd87e[_0x3b9d79];return _0x16d93e;};'use strict';var jsonpatch=require(_0xed87('0x0'));var rp=require(_0xed87('0x1'));var moment=require('moment');var BPromise=require(_0xed87('0x2'));var Mustache=require(_0xed87('0x3'));var util=require(_0xed87('0x4'));var path=require('path');var sox=require(_0xed87('0x5'));var csv=require('to-csv');var ejs=require(_0xed87('0x6'));var fs=require('fs');var _=require(_0xed87('0x7'));var squel=require('squel');var crypto=require(_0xed87('0x8'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xed87('0x9'));var querystring=require(_0xed87('0xa'));var Papa=require(_0xed87('0xb'));var qs=require(_0xed87('0xc'));var logger=require('../../config/logger')(_0xed87('0xd'));var utils=require(_0xed87('0xe'));var config=require(_0xed87('0xf'));var db=require(_0xed87('0x10'))['db'];var socket=require(_0xed87('0x11'))({'host':_0xed87('0x12'),'port':0x18eb});require(_0xed87('0x13'))['register'](socket);function respondWithStatusCode(_0x22b59d,_0xf104cb){_0xf104cb=_0xf104cb||0xcc;return function(_0x5cf4fe){if(_0x5cf4fe){return _0x22b59d[_0xed87('0x14')](_0xf104cb);}return _0x22b59d[_0xed87('0x15')](_0xf104cb)['end']();};}function respondWithResult(_0x4ffc2d,_0x466f35){_0x466f35=_0x466f35||0xc8;return function(_0x32276e){if(_0x32276e){return _0x4ffc2d[_0xed87('0x15')](_0x466f35)[_0xed87('0x16')](_0x32276e);}};}function respondWithFilteredResult(_0x16bfd6,_0x3865c5){return function(_0x52dfe8){if(_0x52dfe8){var _0x4494da=_0x52dfe8[_0xed87('0x17')],_0x19b283=_0x3865c5[_0xed87('0x18')],_0x1722a6=_0x3865c5[_0xed87('0x18')]+_0x3865c5[_0xed87('0x19')],_0x1e9a3d;if(_0x1722a6>=_0x4494da){_0x1722a6=_0x4494da;_0x1e9a3d=0xc8;}else{_0x1e9a3d=0xce;}_0x16bfd6[_0xed87('0x15')](_0x1e9a3d);return _0x16bfd6['set'](_0xed87('0x1a'),_0x19b283+'-'+_0x1722a6+'/'+_0x4494da)[_0xed87('0x16')](_0x52dfe8);}return null;};}function patchUpdates(_0x2c386a){return function(_0xfb8a44){try{jsonpatch['apply'](_0xfb8a44,_0x2c386a,!![]);}catch(_0x211085){return BPromise[_0xed87('0x1b')](_0x211085);}return _0xfb8a44[_0xed87('0x1c')]();};}function saveUpdates(_0x3f9e08,_0x98a2ca){return function(_0x58d804){if(_0x58d804){return _0x58d804[_0xed87('0x1d')](_0x3f9e08)[_0xed87('0x1e')](function(_0x3b7981){return _0x3b7981;});}return null;};}function removeEntity(_0x52e81c,_0x5a7329){return function(_0x5db546){if(_0x5db546){return _0x5db546['destroy']()[_0xed87('0x1e')](function(){_0x52e81c['status'](0xcc)[_0xed87('0x1f')]();});}};}function handleEntityNotFound(_0x2b0b98,_0x5b1659){return function(_0x2bab5b){if(!_0x2bab5b){_0x2b0b98['sendStatus'](0x194);}return _0x2bab5b;};}function handleError(_0x3d1641,_0x24962e){_0x24962e=_0x24962e||0x1f4;return function(_0x27799a){logger[_0xed87('0x20')](_0x27799a[_0xed87('0x21')]);if(_0x27799a['name']){delete _0x27799a[_0xed87('0x22')];}_0x3d1641[_0xed87('0x15')](_0x24962e)[_0xed87('0x23')](_0x27799a);};}exports[_0xed87('0x24')]=function(_0x31c600,_0x289e38){var _0x25a6f7={},_0x4735b3={},_0x40b2fa={'count':0x0,'rows':[]};var _0x38f5c=db[_0xed87('0x25')][_0xed87('0x26')];_0x4735b3[_0xed87('0x27')]=_[_0xed87('0x28')](_0x38f5c);var _0x4dfaf2={'dateStart':_0x31c600[_0xed87('0x29')][_0xed87('0x2a')],'dateEnd':_0x31c600['query'][_0xed87('0x2b')]};delete _0x31c600[_0xed87('0x29')][_0xed87('0x2a')];delete _0x31c600['query']['dateEnd'];_0x4735b3[_0xed87('0x29')]=_[_0xed87('0x28')](_0x31c600[_0xed87('0x29')]);_0x4735b3['filters']=_[_0xed87('0x2c')](_0x4735b3[_0xed87('0x27')],_0x4735b3[_0xed87('0x29')]);_0x25a6f7[_0xed87('0x2d')]=_[_0xed87('0x2c')](_0x4735b3[_0xed87('0x27')],qs[_0xed87('0x2e')](_0x31c600[_0xed87('0x29')][_0xed87('0x2e')]));_0x25a6f7['attributes']=_0x25a6f7[_0xed87('0x2d')][_0xed87('0x2f')]?_0x25a6f7['attributes']:_0x4735b3[_0xed87('0x27')];if(!_0x31c600['query'][_0xed87('0x30')](_0xed87('0x31'))){_0x25a6f7[_0xed87('0x19')]=qs[_0xed87('0x19')](_0x31c600[_0xed87('0x29')][_0xed87('0x19')]);_0x25a6f7[_0xed87('0x18')]=qs[_0xed87('0x18')](_0x31c600[_0xed87('0x29')][_0xed87('0x18')]);}_0x25a6f7[_0xed87('0x32')]=qs['sort'](_0x31c600[_0xed87('0x29')][_0xed87('0x33')]);_0x25a6f7['where']=qs[_0xed87('0x34')](_['pick'](_0x31c600[_0xed87('0x29')],_0x4735b3[_0xed87('0x34')]));if(_0x4dfaf2['dateStart']){if(_0x4dfaf2[_0xed87('0x2b')]){_0x4dfaf2[_0xed87('0x2b')]=moment(_0x4dfaf2[_0xed87('0x2b')])[_0xed87('0x35')](0x1,_0xed87('0x36'));}else{_0x4dfaf2['dateEnd']=moment(_0x4dfaf2[_0xed87('0x2a')])['add'](0x1,_0xed87('0x36'));}_['merge'](_0x25a6f7[_0xed87('0x37')],{'createdAt':{'$gte':_0x4dfaf2[_0xed87('0x2a')],'$lte':_0x4dfaf2[_0xed87('0x2b')]}});}if(_0x31c600[_0xed87('0x29')][_0xed87('0x38')]){_0x25a6f7[_0xed87('0x37')]=_[_0xed87('0x39')](_0x25a6f7[_0xed87('0x37')],{'$or':_[_0xed87('0x3a')](_0x25a6f7['attributes'],function(_0x4b49f8){var _0xa6714a={};_0xa6714a[_0x4b49f8]={'$like':'%'+_0x31c600[_0xed87('0x29')][_0xed87('0x38')]+'%'};return _0xa6714a;})});}_0x25a6f7=_[_0xed87('0x39')]({},_0x25a6f7,_0x31c600[_0xed87('0x3b')]);var _0x3e5881={'where':_0x25a6f7['where']};return db[_0xed87('0x25')][_0xed87('0x17')](_0x3e5881)[_0xed87('0x1e')](function(_0x5b188e){_0x40b2fa[_0xed87('0x17')]=_0x5b188e;if(_0x31c600[_0xed87('0x29')][_0xed87('0x3c')]){_0x25a6f7[_0xed87('0x3d')]=[{'all':!![]}];}return db[_0xed87('0x25')][_0xed87('0x3e')](_0x25a6f7);})[_0xed87('0x1e')](function(_0x2f5338){_0x40b2fa[_0xed87('0x3f')]=_0x2f5338;return _0x40b2fa;})[_0xed87('0x1e')](respondWithFilteredResult(_0x289e38,_0x25a6f7))['catch'](handleError(_0x289e38,null));};exports[_0xed87('0x40')]=function(_0x3c7fcc,_0xd6210f){var _0x4d9dbd={'raw':![],'where':{'id':_0x3c7fcc[_0xed87('0x41')]['id']}},_0x51d4b8={};_0x51d4b8[_0xed87('0x27')]=_[_0xed87('0x28')](db[_0xed87('0x25')]['rawAttributes']);_0x51d4b8[_0xed87('0x29')]=_[_0xed87('0x28')](_0x3c7fcc['query']);_0x51d4b8[_0xed87('0x34')]=_[_0xed87('0x2c')](_0x51d4b8[_0xed87('0x27')],_0x51d4b8[_0xed87('0x29')]);_0x4d9dbd[_0xed87('0x2d')]=_[_0xed87('0x2c')](_0x51d4b8[_0xed87('0x27')],qs[_0xed87('0x2e')](_0x3c7fcc[_0xed87('0x29')][_0xed87('0x2e')]));_0x4d9dbd[_0xed87('0x2d')]=_0x4d9dbd['attributes'][_0xed87('0x2f')]?_0x4d9dbd[_0xed87('0x2d')]:_0x51d4b8[_0xed87('0x27')];if(_0x3c7fcc[_0xed87('0x29')][_0xed87('0x3c')]){_0x4d9dbd[_0xed87('0x3d')]=[{'all':!![]}];}_0x4d9dbd=_[_0xed87('0x39')]({},_0x4d9dbd,_0x3c7fcc[_0xed87('0x3b')]);return db[_0xed87('0x25')][_0xed87('0x42')](_0x4d9dbd)[_0xed87('0x1e')](handleEntityNotFound(_0xd6210f,null))[_0xed87('0x1e')](respondWithResult(_0xd6210f,null))[_0xed87('0x43')](handleError(_0xd6210f,null));};exports[_0xed87('0x44')]=function(_0x2ed9c3,_0x2f05ba){return db[_0xed87('0x25')]['create'](_0x2ed9c3[_0xed87('0x45')],{})[_0xed87('0x1e')](respondWithResult(_0x2f05ba,0xc9))[_0xed87('0x43')](handleError(_0x2f05ba,null));};exports['update']=function(_0xf3e487,_0x1adb7a){if(_0xf3e487['body']['id']){delete _0xf3e487[_0xed87('0x45')]['id'];}return db[_0xed87('0x25')][_0xed87('0x42')]({'where':{'id':_0xf3e487[_0xed87('0x41')]['id']}})['then'](handleEntityNotFound(_0x1adb7a,null))[_0xed87('0x1e')](saveUpdates(_0xf3e487[_0xed87('0x45')],null))[_0xed87('0x1e')](respondWithResult(_0x1adb7a,null))[_0xed87('0x43')](handleError(_0x1adb7a,null));};exports[_0xed87('0x46')]=function(_0x363823,_0x242b57){return db[_0xed87('0x25')][_0xed87('0x42')]({'where':{'id':_0x363823[_0xed87('0x41')]['id']}})[_0xed87('0x1e')](handleEntityNotFound(_0x242b57,null))[_0xed87('0x1e')](removeEntity(_0x242b57,null))[_0xed87('0x43')](handleError(_0x242b57,null));};exports['getQueues']=function(_0x43ffa4,_0x4ea4e3,_0x17cad7){return db[_0xed87('0x25')][_0xed87('0x47')]({'where':{'id':_0x43ffa4[_0xed87('0x41')]['id']}})[_0xed87('0x1e')](handleEntityNotFound(_0x4ea4e3,null))[_0xed87('0x1e')](function(_0x25f837){if(!_0x43ffa4[_0xed87('0x29')][_0xed87('0x48')]||!utils[_0xed87('0x49')](_0x43ffa4['query'][_0xed87('0x48')])){throw new db[(_0xed87('0x4a'))][(_0xed87('0x4b'))](_0xed87('0x4c'));}var _0x32f26a={};var _0x44b176={};_0x44b176[_0xed87('0x27')]=_[_0xed87('0x28')](db[_[_0xed87('0x4d')](_0x43ffa4[_0xed87('0x29')][_0xed87('0x48')]['toLowerCase']())+'Queue'][_0xed87('0x26')]);_0x44b176[_0xed87('0x29')]=_[_0xed87('0x28')](_0x43ffa4[_0xed87('0x29')]);_0x44b176[_0xed87('0x34')]=_['intersection'](_0x44b176[_0xed87('0x27')],_0x44b176[_0xed87('0x29')]);_0x32f26a[_0xed87('0x2d')]=_[_0xed87('0x2c')](_0x44b176[_0xed87('0x27')],qs[_0xed87('0x2e')](_0x43ffa4[_0xed87('0x29')][_0xed87('0x2e')]));_0x32f26a[_0xed87('0x2d')]=_0x32f26a[_0xed87('0x2d')][_0xed87('0x2f')]?_0x32f26a[_0xed87('0x2d')]:_0x44b176[_0xed87('0x27')];_0x32f26a[_0xed87('0x19')]=qs['limit'](_0x43ffa4[_0xed87('0x29')][_0xed87('0x19')]);_0x32f26a[_0xed87('0x18')]=qs[_0xed87('0x18')](_0x43ffa4[_0xed87('0x29')][_0xed87('0x18')]);_0x32f26a[_0xed87('0x32')]=qs[_0xed87('0x33')](_0x43ffa4['query'][_0xed87('0x33')]);_0x32f26a[_0xed87('0x37')]=qs[_0xed87('0x34')](_[_0xed87('0x4e')](_0x43ffa4[_0xed87('0x29')],_0x44b176[_0xed87('0x34')]));_0x32f26a=_['merge']({},_0x32f26a,_0x43ffa4['options']);return _0x25f837[_0xed87('0x4f')+_[_0xed87('0x4d')](_0x43ffa4[_0xed87('0x29')][_0xed87('0x48')][_0xed87('0x50')]())+_0xed87('0x51')](_0x32f26a);})[_0xed87('0x1e')](respondWithResult(_0x4ea4e3,null))[_0xed87('0x43')](handleError(_0x4ea4e3,null));};exports['addQueues']=function(_0x1b1575,_0x59a74e,_0xd3b300){return db[_0xed87('0x25')]['findOne']({'where':{'id':_0x1b1575[_0xed87('0x41')]['id']}})[_0xed87('0x1e')](function(_0x4b9b6c){if(_0x4b9b6c){if(!_0x1b1575[_0xed87('0x45')][_0xed87('0x48')]||!utils[_0xed87('0x49')](_0x1b1575[_0xed87('0x45')][_0xed87('0x48')])){throw new db['Sequelize'][(_0xed87('0x4b'))](_0xed87('0x4c'));}return _0x4b9b6c[_0xed87('0x35')+_[_0xed87('0x4d')](_0x1b1575['body']['channel'][_0xed87('0x50')]())+_0xed87('0x51')](_0x1b1575['body'][_0xed87('0x52')]);}return null;})[_0xed87('0x1e')](handleEntityNotFound(_0x59a74e,null))[_0xed87('0x1e')](respondWithStatusCode(_0x59a74e,null))[_0xed87('0x43')](handleError(_0x59a74e,null));};exports[_0xed87('0x53')]=function(_0x3eaf59,_0x168cc8,_0x264277){return db[_0xed87('0x25')][_0xed87('0x47')]({'where':{'id':_0x3eaf59[_0xed87('0x41')]['id']}})[_0xed87('0x1e')](function(_0x486e28){if(_0x486e28){if(!_0x3eaf59[_0xed87('0x29')]['channel']||!utils[_0xed87('0x49')](_0x3eaf59[_0xed87('0x29')]['channel'])){throw new db['Sequelize'][(_0xed87('0x4b'))](_0xed87('0x4c'));}return _0x486e28[_0xed87('0x54')+_[_0xed87('0x4d')](_0x3eaf59[_0xed87('0x29')][_0xed87('0x48')][_0xed87('0x50')]())+_0xed87('0x51')](_0x3eaf59['query'][_0xed87('0x52')]);}return null;})[_0xed87('0x1e')](handleEntityNotFound(_0x168cc8,null))[_0xed87('0x1e')](respondWithStatusCode(_0x168cc8,null))[_0xed87('0x43')](handleError(_0x168cc8,null));};exports[_0xed87('0x55')]=function(_0x2139a0,_0x47176b,_0x2e05bc){return db[_0xed87('0x25')][_0xed87('0x42')]({'where':{'id':_0x2139a0['params']['id']}})['then'](handleEntityNotFound(_0x47176b,null))['then'](function(_0x1fd2a3){if(_0x1fd2a3){return _0x1fd2a3[_0xed87('0x55')](_0x2139a0[_0xed87('0x45')][_0xed87('0x52')],_[_0xed87('0x56')](_0x2139a0['body'],[_0xed87('0x52'),'id'])||{})[_0xed87('0x57')](function(_0x3ed0e4){for(var _0x1a925d=0x0;_0x1a925d<_0x2139a0[_0xed87('0x45')][_0xed87('0x52')]['length'];_0x1a925d+=0x1){socket['emit'](_0xed87('0x58'),{'UserId':_0x2139a0[_0xed87('0x45')][_0xed87('0x52')][_0x1a925d],'TeamId':_0x2139a0[_0xed87('0x41')]['id']});}return _0x3ed0e4;});}})[_0xed87('0x1e')](respondWithResult(_0x47176b,null))[_0xed87('0x43')](handleError(_0x47176b,null));};exports[_0xed87('0x59')]=function(_0x3b1b8d,_0x23512f,_0x2a4781){var _0x25e736;return db[_0xed87('0x25')]['find']({'where':{'id':_0x3b1b8d[_0xed87('0x41')]['id']}})[_0xed87('0x1e')](handleEntityNotFound(_0x23512f,null))[_0xed87('0x1e')](function(_0x261e49){if(_0x261e49){return _0x261e49[_0xed87('0x59')](_0x3b1b8d[_0xed87('0x29')]['ids'])[_0xed87('0x1e')](function(_0x1b8f9d){if(_[_0xed87('0x5a')](_0x3b1b8d[_0xed87('0x29')]['ids'])){for(var _0x54277b=0x0;_0x54277b<_0x3b1b8d['query']['ids']['length'];_0x54277b+=0x1){socket[_0xed87('0x5b')](_0xed87('0x5c'),{'UserId':_0x3b1b8d[_0xed87('0x29')][_0xed87('0x52')][_0x54277b],'TeamId':_0x3b1b8d[_0xed87('0x41')]['id']});}}else{socket[_0xed87('0x5b')](_0xed87('0x5c'),{'UserId':_0x3b1b8d[_0xed87('0x29')][_0xed87('0x52')],'TeamId':_0x3b1b8d['params']['id']});}});}})['then'](respondWithStatusCode(_0x23512f,null))[_0xed87('0x43')](handleError(_0x23512f,null));};exports[_0xed87('0x5d')]=function(_0xa39fbe,_0x2347b1,_0xfc89ca){var _0x521ec9={};var _0x5a24a1={};var _0x140e9b;var _0x1462a7;return db['Team'][_0xed87('0x47')]({'where':{'id':_0xa39fbe['params']['id']}})[_0xed87('0x1e')](handleEntityNotFound(_0x2347b1,null))['then'](function(_0x32446d){if(_0x32446d){_0x140e9b=_0x32446d;_0x5a24a1[_0xed87('0x27')]=_[_0xed87('0x28')](db[_0xed87('0x5e')][_0xed87('0x26')]);_0x5a24a1['query']=_[_0xed87('0x28')](_0xa39fbe[_0xed87('0x29')]);_0x5a24a1['filters']=_[_0xed87('0x2c')](_0x5a24a1['model'],_0x5a24a1[_0xed87('0x29')]);_0x521ec9[_0xed87('0x2d')]=_['intersection'](_0x5a24a1[_0xed87('0x27')],qs[_0xed87('0x2e')](_0xa39fbe['query'][_0xed87('0x2e')]));_0x521ec9[_0xed87('0x2d')]=_0x521ec9[_0xed87('0x2d')][_0xed87('0x2f')]?_0x521ec9['attributes']:_0x5a24a1[_0xed87('0x27')];_0x521ec9[_0xed87('0x32')]=qs[_0xed87('0x33')](_0xa39fbe[_0xed87('0x29')][_0xed87('0x33')]);_0x521ec9[_0xed87('0x37')]=qs[_0xed87('0x34')](_[_0xed87('0x4e')](_0xa39fbe[_0xed87('0x29')],_0x5a24a1[_0xed87('0x34')]));if(_0xa39fbe[_0xed87('0x29')][_0xed87('0x38')]){_0x521ec9[_0xed87('0x37')]=_[_0xed87('0x39')](_0x521ec9[_0xed87('0x37')],{'$or':_[_0xed87('0x3a')](_0x521ec9[_0xed87('0x2d')],function(_0x2e4da7){var _0x43716b={};_0x43716b[_0x2e4da7]={'$like':'%'+_0xa39fbe[_0xed87('0x29')][_0xed87('0x38')]+'%'};return _0x43716b;})});}_0x521ec9=_['merge']({},_0x521ec9,_0xa39fbe[_0xed87('0x3b')]);return _0x140e9b[_0xed87('0x5d')](_0x521ec9);}})[_0xed87('0x1e')](function(_0x131f1a){if(_0x131f1a){_0x1462a7=_0x131f1a[_0xed87('0x2f')];if(!_0xa39fbe[_0xed87('0x29')][_0xed87('0x30')](_0xed87('0x31'))){_0x521ec9[_0xed87('0x19')]=qs['limit'](_0xa39fbe[_0xed87('0x29')][_0xed87('0x19')]);_0x521ec9[_0xed87('0x18')]=qs[_0xed87('0x18')](_0xa39fbe[_0xed87('0x29')][_0xed87('0x18')]);}return _0x140e9b['getAgents'](_0x521ec9);}})['then'](function(_0x5277f7){if(_0x5277f7){return _0x5277f7?{'count':_0x1462a7,'rows':_0x5277f7}:null;}})[_0xed87('0x1e')](respondWithResult(_0x2347b1,null))['catch'](handleError(_0x2347b1,null));};
\ No newline at end of file
+var _0xebae=['chat','mail','sms','fax','voice','loginInPause','voicePause','UserVoiceQueueRt','upsert','format','%s/%s','SIP','omit','spread','removeAgents','openchannel','emit','userTeam:remove','getAgents','User','fast-json-patch','request-promise','moment','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./team.socket','register','sendStatus','end','status','json','offset','limit','set','reject','save','update','then','error','stack','name','index','Team','keys','query','dateStart','dateEnd','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','where','filters','pick','add','day','merge','map','filter','options','count','includeAll','include','findAll','rows','catch','params','rawAttributes','find','create','body','destroy','getQueues','channel','isValidChannel','Unknown\x20channel','capitalize','toLowerCase','Queue','sort','get','Queues','addQueues','Sequelize','ValidationError','ids','removeQueues','findOne','addAgents','each'];(function(_0x3e5cc9,_0x38fbd7){var _0x4bd5c9=function(_0x4be73c){while(--_0x4be73c){_0x3e5cc9['push'](_0x3e5cc9['shift']());}};_0x4bd5c9(++_0x38fbd7);}(_0xebae,0x83));var _0xeeba=function(_0x2900bf,_0x396900){_0x2900bf=_0x2900bf-0x0;var _0x4ff896=_0xebae[_0x2900bf];return _0x4ff896;};'use strict';var jsonpatch=require(_0xeeba('0x0'));var rp=require(_0xeeba('0x1'));var moment=require(_0xeeba('0x2'));var BPromise=require(_0xeeba('0x3'));var Mustache=require('mustache');var util=require('util');var path=require(_0xeeba('0x4'));var sox=require(_0xeeba('0x5'));var csv=require(_0xeeba('0x6'));var ejs=require(_0xeeba('0x7'));var fs=require('fs');var _=require(_0xeeba('0x8'));var squel=require(_0xeeba('0x9'));var crypto=require(_0xeeba('0xa'));var jsforce=require(_0xeeba('0xb'));var deskjs=require(_0xeeba('0xc'));var toCsv=require(_0xeeba('0x6'));var querystring=require(_0xeeba('0xd'));var Papa=require(_0xeeba('0xe'));var qs=require(_0xeeba('0xf'));var logger=require('../../config/logger')(_0xeeba('0x10'));var utils=require(_0xeeba('0x11'));var config=require(_0xeeba('0x12'));var db=require(_0xeeba('0x13'))['db'];var socket=require(_0xeeba('0x14'))({'host':_0xeeba('0x15'),'port':0x18eb});require(_0xeeba('0x16'))[_0xeeba('0x17')](socket);function respondWithStatusCode(_0x28c31a,_0x46b816){_0x46b816=_0x46b816||0xcc;return function(_0x530905){if(_0x530905){return _0x28c31a[_0xeeba('0x18')](_0x46b816);}return _0x28c31a['status'](_0x46b816)[_0xeeba('0x19')]();};}function respondWithResult(_0xab2cd8,_0x313d68){_0x313d68=_0x313d68||0xc8;return function(_0x5ead04){if(_0x5ead04){return _0xab2cd8[_0xeeba('0x1a')](_0x313d68)[_0xeeba('0x1b')](_0x5ead04);}};}function respondWithFilteredResult(_0x5f0d5e,_0x34ea22){return function(_0x44053e){if(_0x44053e){var _0x472ffe=_0x44053e['count'],_0x4167ec=_0x34ea22[_0xeeba('0x1c')],_0x50b7b7=_0x34ea22[_0xeeba('0x1c')]+_0x34ea22[_0xeeba('0x1d')],_0x1421e0;if(_0x50b7b7>=_0x472ffe){_0x50b7b7=_0x472ffe;_0x1421e0=0xc8;}else{_0x1421e0=0xce;}_0x5f0d5e['status'](_0x1421e0);return _0x5f0d5e[_0xeeba('0x1e')]('Content-Range',_0x4167ec+'-'+_0x50b7b7+'/'+_0x472ffe)[_0xeeba('0x1b')](_0x44053e);}return null;};}function patchUpdates(_0x1068f2){return function(_0x4aeeb1){try{jsonpatch['apply'](_0x4aeeb1,_0x1068f2,!![]);}catch(_0x2648cc){return BPromise[_0xeeba('0x1f')](_0x2648cc);}return _0x4aeeb1[_0xeeba('0x20')]();};}function saveUpdates(_0x2d90c0,_0xace097){return function(_0x156c7f){if(_0x156c7f){return _0x156c7f[_0xeeba('0x21')](_0x2d90c0)[_0xeeba('0x22')](function(_0x4b409d){return _0x4b409d;});}return null;};}function removeEntity(_0x4fc54d,_0x52c50c){return function(_0x3d4a9b){if(_0x3d4a9b){return _0x3d4a9b['destroy']()[_0xeeba('0x22')](function(){_0x4fc54d[_0xeeba('0x1a')](0xcc)[_0xeeba('0x19')]();});}};}function handleEntityNotFound(_0x2f6927,_0x41ed47){return function(_0x2cfffd){if(!_0x2cfffd){_0x2f6927['sendStatus'](0x194);}return _0x2cfffd;};}function handleError(_0x2465b2,_0x25343c){_0x25343c=_0x25343c||0x1f4;return function(_0x25b04c){logger[_0xeeba('0x23')](_0x25b04c[_0xeeba('0x24')]);if(_0x25b04c[_0xeeba('0x25')]){delete _0x25b04c[_0xeeba('0x25')];}_0x2465b2['status'](_0x25343c)['send'](_0x25b04c);};}exports[_0xeeba('0x26')]=function(_0x14714c,_0x4101cf){var _0x4ec6f9={},_0x2e3bf2={},_0x5771bc={'count':0x0,'rows':[]};var _0x1e2d9d=db[_0xeeba('0x27')]['rawAttributes'];_0x2e3bf2['model']=_[_0xeeba('0x28')](_0x1e2d9d);var _0xedd2db={'dateStart':_0x14714c[_0xeeba('0x29')][_0xeeba('0x2a')],'dateEnd':_0x14714c[_0xeeba('0x29')][_0xeeba('0x2b')]};delete _0x14714c['query'][_0xeeba('0x2a')];delete _0x14714c['query'][_0xeeba('0x2b')];_0x2e3bf2['query']=_[_0xeeba('0x28')](_0x14714c['query']);_0x2e3bf2['filters']=_[_0xeeba('0x2c')](_0x2e3bf2[_0xeeba('0x2d')],_0x2e3bf2[_0xeeba('0x29')]);_0x4ec6f9[_0xeeba('0x2e')]=_['intersection'](_0x2e3bf2[_0xeeba('0x2d')],qs[_0xeeba('0x2f')](_0x14714c[_0xeeba('0x29')][_0xeeba('0x2f')]));_0x4ec6f9[_0xeeba('0x2e')]=_0x4ec6f9[_0xeeba('0x2e')][_0xeeba('0x30')]?_0x4ec6f9[_0xeeba('0x2e')]:_0x2e3bf2[_0xeeba('0x2d')];if(!_0x14714c[_0xeeba('0x29')][_0xeeba('0x31')](_0xeeba('0x32'))){_0x4ec6f9[_0xeeba('0x1d')]=qs[_0xeeba('0x1d')](_0x14714c['query'][_0xeeba('0x1d')]);_0x4ec6f9[_0xeeba('0x1c')]=qs['offset'](_0x14714c[_0xeeba('0x29')][_0xeeba('0x1c')]);}_0x4ec6f9[_0xeeba('0x33')]=qs['sort'](_0x14714c[_0xeeba('0x29')]['sort']);_0x4ec6f9[_0xeeba('0x34')]=qs[_0xeeba('0x35')](_[_0xeeba('0x36')](_0x14714c['query'],_0x2e3bf2[_0xeeba('0x35')]));if(_0xedd2db['dateStart']){if(_0xedd2db[_0xeeba('0x2b')]){_0xedd2db['dateEnd']=moment(_0xedd2db[_0xeeba('0x2b')])[_0xeeba('0x37')](0x1,_0xeeba('0x38'));}else{_0xedd2db[_0xeeba('0x2b')]=moment(_0xedd2db['dateStart'])['add'](0x1,_0xeeba('0x38'));}_[_0xeeba('0x39')](_0x4ec6f9[_0xeeba('0x34')],{'createdAt':{'$gte':_0xedd2db[_0xeeba('0x2a')],'$lte':_0xedd2db[_0xeeba('0x2b')]}});}if(_0x14714c[_0xeeba('0x29')]['filter']){_0x4ec6f9[_0xeeba('0x34')]=_[_0xeeba('0x39')](_0x4ec6f9['where'],{'$or':_[_0xeeba('0x3a')](_0x4ec6f9[_0xeeba('0x2e')],function(_0x54efcd){var _0xab0bb={};_0xab0bb[_0x54efcd]={'$like':'%'+_0x14714c['query'][_0xeeba('0x3b')]+'%'};return _0xab0bb;})});}_0x4ec6f9=_[_0xeeba('0x39')]({},_0x4ec6f9,_0x14714c[_0xeeba('0x3c')]);var _0x56a2ca={'where':_0x4ec6f9['where']};return db[_0xeeba('0x27')][_0xeeba('0x3d')](_0x56a2ca)[_0xeeba('0x22')](function(_0x5da17b){_0x5771bc['count']=_0x5da17b;if(_0x14714c[_0xeeba('0x29')][_0xeeba('0x3e')]){_0x4ec6f9[_0xeeba('0x3f')]=[{'all':!![]}];}return db[_0xeeba('0x27')][_0xeeba('0x40')](_0x4ec6f9);})[_0xeeba('0x22')](function(_0x5f27dd){_0x5771bc[_0xeeba('0x41')]=_0x5f27dd;return _0x5771bc;})[_0xeeba('0x22')](respondWithFilteredResult(_0x4101cf,_0x4ec6f9))[_0xeeba('0x42')](handleError(_0x4101cf,null));};exports['show']=function(_0x15a68a,_0x298ffe){var _0x3ea1b5={'raw':![],'where':{'id':_0x15a68a[_0xeeba('0x43')]['id']}},_0x4f8079={};_0x4f8079['model']=_[_0xeeba('0x28')](db['Team'][_0xeeba('0x44')]);_0x4f8079[_0xeeba('0x29')]=_[_0xeeba('0x28')](_0x15a68a['query']);_0x4f8079[_0xeeba('0x35')]=_[_0xeeba('0x2c')](_0x4f8079[_0xeeba('0x2d')],_0x4f8079['query']);_0x3ea1b5[_0xeeba('0x2e')]=_[_0xeeba('0x2c')](_0x4f8079['model'],qs[_0xeeba('0x2f')](_0x15a68a[_0xeeba('0x29')][_0xeeba('0x2f')]));_0x3ea1b5[_0xeeba('0x2e')]=_0x3ea1b5['attributes'][_0xeeba('0x30')]?_0x3ea1b5[_0xeeba('0x2e')]:_0x4f8079['model'];if(_0x15a68a[_0xeeba('0x29')][_0xeeba('0x3e')]){_0x3ea1b5[_0xeeba('0x3f')]=[{'all':!![]}];}_0x3ea1b5=_[_0xeeba('0x39')]({},_0x3ea1b5,_0x15a68a['options']);return db[_0xeeba('0x27')][_0xeeba('0x45')](_0x3ea1b5)[_0xeeba('0x22')](handleEntityNotFound(_0x298ffe,null))['then'](respondWithResult(_0x298ffe,null))[_0xeeba('0x42')](handleError(_0x298ffe,null));};exports[_0xeeba('0x46')]=function(_0x277d95,_0x309cb2){return db[_0xeeba('0x27')][_0xeeba('0x46')](_0x277d95[_0xeeba('0x47')],{})[_0xeeba('0x22')](respondWithResult(_0x309cb2,0xc9))[_0xeeba('0x42')](handleError(_0x309cb2,null));};exports['update']=function(_0x190a2d,_0x21e00e){if(_0x190a2d[_0xeeba('0x47')]['id']){delete _0x190a2d[_0xeeba('0x47')]['id'];}return db[_0xeeba('0x27')]['find']({'where':{'id':_0x190a2d[_0xeeba('0x43')]['id']}})[_0xeeba('0x22')](handleEntityNotFound(_0x21e00e,null))[_0xeeba('0x22')](saveUpdates(_0x190a2d['body'],null))[_0xeeba('0x22')](respondWithResult(_0x21e00e,null))['catch'](handleError(_0x21e00e,null));};exports[_0xeeba('0x48')]=function(_0x19e59e,_0xadfd70){return db['Team']['find']({'where':{'id':_0x19e59e[_0xeeba('0x43')]['id']}})[_0xeeba('0x22')](handleEntityNotFound(_0xadfd70,null))['then'](removeEntity(_0xadfd70,null))['catch'](handleError(_0xadfd70,null));};exports[_0xeeba('0x49')]=function(_0x3b1db9,_0x3476d9,_0x46fd53){return db[_0xeeba('0x27')]['findOne']({'where':{'id':_0x3b1db9['params']['id']}})[_0xeeba('0x22')](handleEntityNotFound(_0x3476d9,null))['then'](function(_0x55f260){if(!_0x3b1db9[_0xeeba('0x29')][_0xeeba('0x4a')]||!utils[_0xeeba('0x4b')](_0x3b1db9['query'][_0xeeba('0x4a')])){throw new db['Sequelize']['ValidationError'](_0xeeba('0x4c'));}var _0x2c476d={};var _0x17cce2={};_0x17cce2[_0xeeba('0x2d')]=_['keys'](db[_[_0xeeba('0x4d')](_0x3b1db9[_0xeeba('0x29')]['channel'][_0xeeba('0x4e')]())+_0xeeba('0x4f')][_0xeeba('0x44')]);_0x17cce2[_0xeeba('0x29')]=_[_0xeeba('0x28')](_0x3b1db9[_0xeeba('0x29')]);_0x17cce2[_0xeeba('0x35')]=_[_0xeeba('0x2c')](_0x17cce2[_0xeeba('0x2d')],_0x17cce2[_0xeeba('0x29')]);_0x2c476d[_0xeeba('0x2e')]=_[_0xeeba('0x2c')](_0x17cce2['model'],qs[_0xeeba('0x2f')](_0x3b1db9['query'][_0xeeba('0x2f')]));_0x2c476d[_0xeeba('0x2e')]=_0x2c476d[_0xeeba('0x2e')][_0xeeba('0x30')]?_0x2c476d[_0xeeba('0x2e')]:_0x17cce2['model'];_0x2c476d[_0xeeba('0x1d')]=qs[_0xeeba('0x1d')](_0x3b1db9[_0xeeba('0x29')][_0xeeba('0x1d')]);_0x2c476d[_0xeeba('0x1c')]=qs[_0xeeba('0x1c')](_0x3b1db9['query'][_0xeeba('0x1c')]);_0x2c476d[_0xeeba('0x33')]=qs[_0xeeba('0x50')](_0x3b1db9[_0xeeba('0x29')]['sort']);_0x2c476d[_0xeeba('0x34')]=qs['filters'](_[_0xeeba('0x36')](_0x3b1db9[_0xeeba('0x29')],_0x17cce2[_0xeeba('0x35')]));_0x2c476d=_[_0xeeba('0x39')]({},_0x2c476d,_0x3b1db9[_0xeeba('0x3c')]);return _0x55f260[_0xeeba('0x51')+_[_0xeeba('0x4d')](_0x3b1db9[_0xeeba('0x29')][_0xeeba('0x4a')][_0xeeba('0x4e')]())+_0xeeba('0x52')](_0x2c476d);})[_0xeeba('0x22')](respondWithResult(_0x3476d9,null))[_0xeeba('0x42')](handleError(_0x3476d9,null));};exports[_0xeeba('0x53')]=function(_0x4ac3c7,_0x24fe9c,_0x4540f9){return db['Team']['findOne']({'where':{'id':_0x4ac3c7[_0xeeba('0x43')]['id']}})[_0xeeba('0x22')](function(_0x28890b){if(_0x28890b){if(!_0x4ac3c7['body']['channel']||!utils[_0xeeba('0x4b')](_0x4ac3c7[_0xeeba('0x47')][_0xeeba('0x4a')])){throw new db[(_0xeeba('0x54'))][(_0xeeba('0x55'))](_0xeeba('0x4c'));}return _0x28890b[_0xeeba('0x37')+_[_0xeeba('0x4d')](_0x4ac3c7[_0xeeba('0x47')][_0xeeba('0x4a')][_0xeeba('0x4e')]())+_0xeeba('0x52')](_0x4ac3c7[_0xeeba('0x47')][_0xeeba('0x56')]);}return null;})['then'](handleEntityNotFound(_0x24fe9c,null))['then'](respondWithStatusCode(_0x24fe9c,null))[_0xeeba('0x42')](handleError(_0x24fe9c,null));};exports[_0xeeba('0x57')]=function(_0xa782b0,_0x1042fa,_0x10dca7){return db[_0xeeba('0x27')][_0xeeba('0x58')]({'where':{'id':_0xa782b0[_0xeeba('0x43')]['id']}})[_0xeeba('0x22')](function(_0x59e982){if(_0x59e982){if(!_0xa782b0[_0xeeba('0x29')][_0xeeba('0x4a')]||!utils[_0xeeba('0x4b')](_0xa782b0['query'][_0xeeba('0x4a')])){throw new db[(_0xeeba('0x54'))][(_0xeeba('0x55'))](_0xeeba('0x4c'));}return _0x59e982['remove'+_['capitalize'](_0xa782b0[_0xeeba('0x29')][_0xeeba('0x4a')][_0xeeba('0x4e')]())+'Queues'](_0xa782b0[_0xeeba('0x29')][_0xeeba('0x56')]);}return null;})[_0xeeba('0x22')](handleEntityNotFound(_0x1042fa,null))['then'](respondWithStatusCode(_0x1042fa,null))[_0xeeba('0x42')](handleError(_0x1042fa,null));};exports[_0xeeba('0x59')]=function(_0x184c23,_0x7bede,_0x1a34f0){return db[_0xeeba('0x27')]['find']({'where':{'id':_0x184c23['params']['id']}})[_0xeeba('0x22')](handleEntityNotFound(_0x7bede,null))[_0xeeba('0x22')](function(_0xc70c81){if(_0xc70c81){return BPromise[_0xeeba('0x5a')](['voice',_0xeeba('0x5b'),_0xeeba('0x5c'),_0xeeba('0x5d'),_0xeeba('0x5e'),'openchannel'],function(_0x389bff){return _0xc70c81['get'+_[_0xeeba('0x4d')](_0x389bff)+_0xeeba('0x52')]({'attributes':['id',_0xeeba('0x25')]})['then'](function(_0x43273e){return BPromise[_0xeeba('0x5a')](_0x43273e,function(_0x109346){return _0x109346[_0xeeba('0x59')](_0x184c23[_0xeeba('0x47')][_0xeeba('0x56')])['then'](function(){if(_0x389bff===_0xeeba('0x5f')){return db['User']['findAll']({'where':{'id':_0x184c23[_0xeeba('0x47')][_0xeeba('0x56')]},'attributes':['id',_0xeeba('0x25'),_0xeeba('0x60'),_0xeeba('0x61')],'raw':!![]});}})[_0xeeba('0x22')](function(_0x36062d){if(_0x389bff===_0xeeba('0x5f')){return BPromise[_0xeeba('0x5a')](_0x36062d,function(_0x8e7381){return db[_0xeeba('0x62')][_0xeeba('0x63')]({'membername':_0x8e7381[_0xeeba('0x25')],'UserId':_0x8e7381['id'],'queue_name':_0x109346[_0xeeba('0x25')],'VoiceQueueId':_0x109346['id'],'interface':util[_0xeeba('0x64')](_0xeeba('0x65'),_0xeeba('0x66'),_0x8e7381[_0xeeba('0x25')]),'paused':_0x8e7381[_0xeeba('0x61')]||![],'penalty':0x0});});}});});})[_0xeeba('0x22')](function(){return _0xc70c81;});})[_0xeeba('0x22')](function(){return _0xc70c81;});}})[_0xeeba('0x22')](function(_0x1cf239){if(_0x1cf239){return _0x1cf239['addAgents'](_0x184c23[_0xeeba('0x47')][_0xeeba('0x56')],_[_0xeeba('0x67')](_0x184c23[_0xeeba('0x47')],[_0xeeba('0x56'),'id'])||{})[_0xeeba('0x68')](function(_0x19e8d4){for(var _0x19e12c=0x0;_0x19e12c<_0x184c23['body'][_0xeeba('0x56')][_0xeeba('0x30')];_0x19e12c+=0x1){socket['emit']('userTeam:save',{'UserId':_0x184c23[_0xeeba('0x47')][_0xeeba('0x56')][_0x19e12c],'TeamId':_0x184c23[_0xeeba('0x43')]['id']});}return _0x19e8d4;});}})[_0xeeba('0x22')](respondWithResult(_0x7bede,null))['catch'](handleError(_0x7bede,null));};exports[_0xeeba('0x69')]=function(_0x1b3da1,_0x23abff,_0x160ebf){var _0x4d71ac;return db[_0xeeba('0x27')][_0xeeba('0x45')]({'where':{'id':_0x1b3da1[_0xeeba('0x43')]['id']}})[_0xeeba('0x22')](handleEntityNotFound(_0x23abff,null))[_0xeeba('0x22')](function(_0x34b21e){if(_0x34b21e){return BPromise[_0xeeba('0x5a')]([_0xeeba('0x5f'),_0xeeba('0x5b'),_0xeeba('0x5c'),'sms','fax',_0xeeba('0x6a')],function(_0x4b74ee){return _0x34b21e[_0xeeba('0x51')+_[_0xeeba('0x4d')](_0x4b74ee)+_0xeeba('0x52')]({'attributes':['id',_0xeeba('0x25')]})[_0xeeba('0x22')](function(_0x3093be){return BPromise[_0xeeba('0x5a')](_0x3093be,function(_0xd6e613){return _0xd6e613[_0xeeba('0x69')](_0x1b3da1[_0xeeba('0x29')][_0xeeba('0x56')])['then'](function(){if(_0x4b74ee===_0xeeba('0x5f')){return db['UserVoiceQueueRt'][_0xeeba('0x48')]({'where':{'VoiceQueueId':_0xd6e613['id'],'UserId':_0x1b3da1[_0xeeba('0x29')][_0xeeba('0x56')]}});}});});})['then'](function(){return _0x34b21e;});})['then'](function(){return _0x34b21e;});}})[_0xeeba('0x22')](function(_0x26b075){if(_0x26b075){return _0x26b075[_0xeeba('0x69')](_0x1b3da1[_0xeeba('0x29')][_0xeeba('0x56')])['then'](function(_0x181875){if(_['isArray'](_0x1b3da1[_0xeeba('0x29')][_0xeeba('0x56')])){for(var _0x1b4136=0x0;_0x1b4136<_0x1b3da1[_0xeeba('0x29')][_0xeeba('0x56')][_0xeeba('0x30')];_0x1b4136+=0x1){socket[_0xeeba('0x6b')]('userTeam:remove',{'UserId':_0x1b3da1[_0xeeba('0x29')]['ids'][_0x1b4136],'TeamId':_0x1b3da1['params']['id']});}}else{socket[_0xeeba('0x6b')](_0xeeba('0x6c'),{'UserId':_0x1b3da1[_0xeeba('0x29')][_0xeeba('0x56')],'TeamId':_0x1b3da1[_0xeeba('0x43')]['id']});}});}})[_0xeeba('0x22')](respondWithStatusCode(_0x23abff,null))['catch'](handleError(_0x23abff,null));};exports[_0xeeba('0x6d')]=function(_0x4c5173,_0x590dfc,_0x24efc2){var _0xea70f4={};var _0x143363={};var _0x3b7516;var _0x59d0dd;return db['Team'][_0xeeba('0x58')]({'where':{'id':_0x4c5173[_0xeeba('0x43')]['id']}})[_0xeeba('0x22')](handleEntityNotFound(_0x590dfc,null))[_0xeeba('0x22')](function(_0x2115b2){if(_0x2115b2){_0x3b7516=_0x2115b2;_0x143363[_0xeeba('0x2d')]=_[_0xeeba('0x28')](db[_0xeeba('0x6e')]['rawAttributes']);_0x143363['query']=_[_0xeeba('0x28')](_0x4c5173[_0xeeba('0x29')]);_0x143363[_0xeeba('0x35')]=_['intersection'](_0x143363[_0xeeba('0x2d')],_0x143363[_0xeeba('0x29')]);_0xea70f4['attributes']=_[_0xeeba('0x2c')](_0x143363['model'],qs[_0xeeba('0x2f')](_0x4c5173[_0xeeba('0x29')]['fields']));_0xea70f4[_0xeeba('0x2e')]=_0xea70f4['attributes'][_0xeeba('0x30')]?_0xea70f4[_0xeeba('0x2e')]:_0x143363[_0xeeba('0x2d')];_0xea70f4['order']=qs[_0xeeba('0x50')](_0x4c5173[_0xeeba('0x29')]['sort']);_0xea70f4['where']=qs[_0xeeba('0x35')](_[_0xeeba('0x36')](_0x4c5173['query'],_0x143363[_0xeeba('0x35')]));if(_0x4c5173[_0xeeba('0x29')][_0xeeba('0x3b')]){_0xea70f4[_0xeeba('0x34')]=_[_0xeeba('0x39')](_0xea70f4[_0xeeba('0x34')],{'$or':_[_0xeeba('0x3a')](_0xea70f4[_0xeeba('0x2e')],function(_0xe3f4){var _0x2d5e0e={};_0x2d5e0e[_0xe3f4]={'$like':'%'+_0x4c5173['query'][_0xeeba('0x3b')]+'%'};return _0x2d5e0e;})});}_0xea70f4=_[_0xeeba('0x39')]({},_0xea70f4,_0x4c5173[_0xeeba('0x3c')]);return _0x3b7516[_0xeeba('0x6d')](_0xea70f4);}})[_0xeeba('0x22')](function(_0x17f4da){if(_0x17f4da){_0x59d0dd=_0x17f4da[_0xeeba('0x30')];if(!_0x4c5173[_0xeeba('0x29')][_0xeeba('0x31')](_0xeeba('0x32'))){_0xea70f4['limit']=qs[_0xeeba('0x1d')](_0x4c5173['query'][_0xeeba('0x1d')]);_0xea70f4[_0xeeba('0x1c')]=qs[_0xeeba('0x1c')](_0x4c5173[_0xeeba('0x29')]['offset']);}return _0x3b7516[_0xeeba('0x6d')](_0xea70f4);}})[_0xeeba('0x22')](function(_0x515689){if(_0x515689){return _0x515689?{'count':_0x59d0dd,'rows':_0x515689}:null;}})['then'](respondWithResult(_0x590dfc,null))[_0xeeba('0x42')](handleError(_0x590dfc,null));};
\ No newline at end of file
index cd7baec..7fd98f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x95de=['events','../../mysqldb','setMaxListeners','save','update','emit','hasOwnProperty'];(function(_0x2bdff1,_0x3faac6){var _0x491a00=function(_0x2bfe3d){while(--_0x2bfe3d){_0x2bdff1['push'](_0x2bdff1['shift']());}};_0x491a00(++_0x3faac6);}(_0x95de,0xd9));var _0xe95d=function(_0x21a9d9,_0x4d5ac8){_0x21a9d9=_0x21a9d9-0x0;var _0x46adce=_0x95de[_0x21a9d9];return _0x46adce;};'use strict';var EventEmitter=require(_0xe95d('0x0'));var Team=require(_0xe95d('0x1'))['db']['Team'];var TeamEvents=new EventEmitter();TeamEvents[_0xe95d('0x2')](0x0);var events={'afterCreate':_0xe95d('0x3'),'afterUpdate':_0xe95d('0x4'),'afterDestroy':'remove'};function emitEvent(_0x1bb374){return function(_0x34e664,_0x3ac3ea,_0x53f461){TeamEvents['emit'](_0x1bb374+':'+_0x34e664['id'],_0x34e664);TeamEvents[_0xe95d('0x5')](_0x1bb374,_0x34e664);_0x53f461(null);};}for(var e in events){if(events[_0xe95d('0x6')](e)){var event=events[e];Team['hook'](e,emitEvent(event));}}module['exports']=TeamEvents;
\ No newline at end of file
+var _0x0379=['../../mysqldb','Team','setMaxListeners','save','update','emit','hasOwnProperty','hook','exports','events'];(function(_0x127c25,_0x57fa8b){var _0xd59c67=function(_0x15882c){while(--_0x15882c){_0x127c25['push'](_0x127c25['shift']());}};_0xd59c67(++_0x57fa8b);}(_0x0379,0x8b));var _0x9037=function(_0x51b19b,_0x5015d2){_0x51b19b=_0x51b19b-0x0;var _0x1a3cd6=_0x0379[_0x51b19b];return _0x1a3cd6;};'use strict';var EventEmitter=require(_0x9037('0x0'));var Team=require(_0x9037('0x1'))['db'][_0x9037('0x2')];var TeamEvents=new EventEmitter();TeamEvents[_0x9037('0x3')](0x0);var events={'afterCreate':_0x9037('0x4'),'afterUpdate':_0x9037('0x5'),'afterDestroy':'remove'};function emitEvent(_0x36efd6){return function(_0x1237c5,_0x166071,_0x342014){TeamEvents[_0x9037('0x6')](_0x36efd6+':'+_0x1237c5['id'],_0x1237c5);TeamEvents[_0x9037('0x6')](_0x36efd6,_0x1237c5);_0x342014(null);};}for(var e in events){if(events[_0x9037('0x7')](e)){var event=events[e];Team[_0x9037('0x8')](e,emitEvent(event));}}module[_0x9037('0x9')]=TeamEvents;
\ No newline at end of file
index 261c706..b445bad 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(_0x499bd9,_0x35effe){var _0x3da3af=function(_0x391225){while(--_0x391225){_0x499bd9['push'](_0x499bd9['shift']());}};_0x3da3af(++_0x35effe);}(_0x008c,0x188));var _0xc008=function(_0x20629d,_0x1a6757){_0x20629d=_0x20629d-0x0;var _0x4ca950=_0x008c[_0x20629d];return _0x4ca950;};'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 _0x34e8=['lodash','util','../../config/logger','api','bluebird','request-promise','./team.attributes','exports','define','teams'];(function(_0x1d68d0,_0x281326){var _0x4b7fd6=function(_0x182f5b){while(--_0x182f5b){_0x1d68d0['push'](_0x1d68d0['shift']());}};_0x4b7fd6(++_0x281326);}(_0x34e8,0x12c));var _0x834e=function(_0x61b799,_0x2c36c3){_0x61b799=_0x61b799-0x0;var _0x5e558e=_0x34e8[_0x61b799];return _0x5e558e;};'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')]('Team',attributes,{'tableName':_0x834e('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 057bd8c..a5fe1a3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x64b7=['code','error','message','result','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','socket.io-emitter','localhost','./team.socket','register','request','then','info','Team,\x20%s,\x20%s','request\x20sent','Team,\x20%s,\x20%s,\x20%s'];(function(_0x1f28bc,_0x123185){var _0x587f1b=function(_0x3ee46d){while(--_0x3ee46d){_0x1f28bc['push'](_0x1f28bc['shift']());}};_0x587f1b(++_0x123185);}(_0x64b7,0x1f2));var _0x764b=function(_0x167cc1,_0x56ef5a){_0x167cc1=_0x167cc1-0x0;var _0x10bc4b=_0x64b7[_0x167cc1];return _0x10bc4b;};'use strict';var _=require(_0x764b('0x0'));var util=require(_0x764b('0x1'));var moment=require(_0x764b('0x2'));var BPromise=require(_0x764b('0x3'));var rs=require(_0x764b('0x4'));var fs=require('fs');var db=require(_0x764b('0x5'))['db'];var utils=require(_0x764b('0x6'));var logger=require(_0x764b('0x7'))(_0x764b('0x8'));var config=require(_0x764b('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x764b('0xa')][_0x764b('0xb')]({'port':0x232a});var socket=require(_0x764b('0xc'))({'host':_0x764b('0xd'),'port':0x18eb});require(_0x764b('0xe'))[_0x764b('0xf')](socket);function respondWithRpcPromise(_0x28ca5c,_0x467146,_0x474ddf){return new BPromise(function(_0x3251b2,_0x6810a8){return client[_0x764b('0x10')](_0x28ca5c,_0x474ddf)[_0x764b('0x11')](function(_0x291ce1){logger[_0x764b('0x12')](_0x764b('0x13'),_0x467146,_0x764b('0x14'));logger['debug'](_0x764b('0x15'),_0x467146,_0x764b('0x14'),JSON['stringify'](_0x291ce1));if(_0x291ce1['error']){if(_0x291ce1['error'][_0x764b('0x16')]===0x1f4){logger[_0x764b('0x17')](_0x764b('0x13'),_0x467146,_0x291ce1[_0x764b('0x17')][_0x764b('0x18')]);return _0x6810a8(_0x291ce1['error']['message']);}logger[_0x764b('0x17')]('Team,\x20%s,\x20%s',_0x467146,_0x291ce1[_0x764b('0x17')][_0x764b('0x18')]);return _0x3251b2(_0x291ce1[_0x764b('0x17')][_0x764b('0x18')]);}else{logger['info'](_0x764b('0x13'),_0x467146,_0x764b('0x14'));_0x3251b2(_0x291ce1[_0x764b('0x19')][_0x764b('0x18')]);}})['catch'](function(_0x2a2239){logger[_0x764b('0x17')](_0x764b('0x13'),_0x467146,_0x2a2239);_0x6810a8(_0x2a2239);});});}
\ No newline at end of file
+var _0x1760=['info','Team,\x20%s,\x20%s','request\x20sent','debug','error','message','result','catch','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','./team.socket','request','then'];(function(_0x79cff8,_0x563ac4){var _0x1297b4=function(_0x240d17){while(--_0x240d17){_0x79cff8['push'](_0x79cff8['shift']());}};_0x1297b4(++_0x563ac4);}(_0x1760,0x11b));var _0x0176=function(_0x27f673,_0x3bf6b6){_0x27f673=_0x27f673-0x0;var _0x536ebb=_0x1760[_0x27f673];return _0x536ebb;};'use strict';var _=require(_0x0176('0x0'));var util=require('util');var moment=require(_0x0176('0x1'));var BPromise=require(_0x0176('0x2'));var rs=require(_0x0176('0x3'));var fs=require('fs');var db=require(_0x0176('0x4'))['db'];var utils=require(_0x0176('0x5'));var logger=require(_0x0176('0x6'))(_0x0176('0x7'));var config=require(_0x0176('0x8'));var jayson=require(_0x0176('0x9'));var client=jayson[_0x0176('0xa')][_0x0176('0xb')]({'port':0x232a});var socket=require(_0x0176('0xc'))({'host':_0x0176('0xd'),'port':0x18eb});require(_0x0176('0xe'))['register'](socket);function respondWithRpcPromise(_0x3a5431,_0x157a0b,_0xe2f9a){return new BPromise(function(_0x22c428,_0xbd7b23){return client[_0x0176('0xf')](_0x3a5431,_0xe2f9a)[_0x0176('0x10')](function(_0xb5e00c){logger[_0x0176('0x11')](_0x0176('0x12'),_0x157a0b,_0x0176('0x13'));logger[_0x0176('0x14')]('Team,\x20%s,\x20%s,\x20%s',_0x157a0b,'request\x20sent',JSON['stringify'](_0xb5e00c));if(_0xb5e00c['error']){if(_0xb5e00c['error']['code']===0x1f4){logger[_0x0176('0x15')](_0x0176('0x12'),_0x157a0b,_0xb5e00c['error'][_0x0176('0x16')]);return _0xbd7b23(_0xb5e00c[_0x0176('0x15')][_0x0176('0x16')]);}logger[_0x0176('0x15')]('Team,\x20%s,\x20%s',_0x157a0b,_0xb5e00c[_0x0176('0x15')]['message']);return _0x22c428(_0xb5e00c[_0x0176('0x15')][_0x0176('0x16')]);}else{logger[_0x0176('0x11')](_0x0176('0x12'),_0x157a0b,_0x0176('0x13'));_0x22c428(_0xb5e00c[_0x0176('0x17')][_0x0176('0x16')]);}})[_0x0176('0x18')](function(_0x3167d1){logger[_0x0176('0x15')](_0x0176('0x12'),_0x157a0b,_0x3167d1);_0xbd7b23(_0x3167d1);});});}
\ No newline at end of file
index d2331bf..bef4d3c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3010=['team:','./team.events','save','update','emit','register','length'];(function(_0x15c51a,_0x15941f){var _0x304bf6=function(_0x359447){while(--_0x359447){_0x15c51a['push'](_0x15c51a['shift']());}};_0x304bf6(++_0x15941f);}(_0x3010,0x197));var _0x0301=function(_0x2d842c,_0x5e05b4){_0x2d842c=_0x2d842c-0x0;var _0x4f1d44=_0x3010[_0x2d842c];return _0x4f1d44;};'use strict';var TeamEvents=require(_0x0301('0x0'));var events=[_0x0301('0x1'),'remove',_0x0301('0x2')];function createListener(_0x3d4fef,_0x149159){return function(_0x435fc4){_0x149159[_0x0301('0x3')](_0x3d4fef,_0x435fc4);};}function removeListener(_0x516332,_0x1d3b47){return function(){TeamEvents['removeListener'](_0x516332,_0x1d3b47);};}exports[_0x0301('0x4')]=function(_0x42d425){for(var _0x2708b4=0x0,_0x550c98=events[_0x0301('0x5')];_0x2708b4<_0x550c98;_0x2708b4++){var _0x28fd3f=events[_0x2708b4];var _0x45c013=createListener(_0x0301('0x6')+_0x28fd3f,_0x42d425);TeamEvents['on'](_0x28fd3f,_0x45c013);}};
\ No newline at end of file
+var _0x2f69=['removeListener','register','team:','./team.events','save','update','emit'];(function(_0x42bdad,_0x12836c){var _0x122626=function(_0x2eb29c){while(--_0x2eb29c){_0x42bdad['push'](_0x42bdad['shift']());}};_0x122626(++_0x12836c);}(_0x2f69,0x1a0));var _0x92f6=function(_0x167cc1,_0x56ef5a){_0x167cc1=_0x167cc1-0x0;var _0x10bc4b=_0x2f69[_0x167cc1];return _0x10bc4b;};'use strict';var TeamEvents=require(_0x92f6('0x0'));var events=[_0x92f6('0x1'),'remove',_0x92f6('0x2')];function createListener(_0x799116,_0x2aa814){return function(_0x2cbb86){_0x2aa814[_0x92f6('0x3')](_0x799116,_0x2cbb86);};}function removeListener(_0x1d31e3,_0xa1c5e2){return function(){TeamEvents[_0x92f6('0x4')](_0x1d31e3,_0xa1c5e2);};}exports[_0x92f6('0x5')]=function(_0x24819f){for(var _0x2552ae=0x0,_0x5794a4=events['length'];_0x2552ae<_0x5794a4;_0x2552ae++){var _0xc566fd=events[_0x2552ae];var _0x52239e=createListener(_0x92f6('0x6')+_0xc566fd,_0x24819f);TeamEvents['on'](_0xc566fd,_0x52239e);}};
\ No newline at end of file
index b9edc8f..ad78e3d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c55=['create','update','destroy','exports','multer','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./template.controller','isAuthenticated','get','/:id','show','post'];(function(_0x4c9380,_0x2fefc0){var _0x49a523=function(_0x165e85){while(--_0x165e85){_0x4c9380['push'](_0x4c9380['shift']());}};_0x49a523(++_0x2fefc0);}(_0x3c55,0x7b));var _0x53c5=function(_0x3a88a2,_0x442c87){_0x3a88a2=_0x3a88a2-0x0;var _0x520d5b=_0x3c55[_0x3a88a2];return _0x520d5b;};'use strict';var multer=require(_0x53c5('0x0'));var util=require(_0x53c5('0x1'));var path=require(_0x53c5('0x2'));var express=require('express');var router=express[_0x53c5('0x3')]();var auth=require(_0x53c5('0x4'));var interaction=require(_0x53c5('0x5'));var config=require(_0x53c5('0x6'));var controller=require(_0x53c5('0x7'));router['get']('/',auth[_0x53c5('0x8')](),controller['index']);router[_0x53c5('0x9')](_0x53c5('0xa'),auth[_0x53c5('0x8')](),controller[_0x53c5('0xb')]);router[_0x53c5('0xc')]('/',auth['isAuthenticated'](),controller[_0x53c5('0xd')]);router['put']('/:id',auth[_0x53c5('0x8')](),controller[_0x53c5('0xe')]);router['delete'](_0x53c5('0xa'),auth[_0x53c5('0x8')](),controller[_0x53c5('0xf')]);module[_0x53c5('0x10')]=router;
\ No newline at end of file
+var _0x3560=['destroy','exports','path','express','Router','../../components/auth/service','../../config/environment','get','isAuthenticated','post','create','put','/:id'];(function(_0x248e36,_0x5e293d){var _0x5616dd=function(_0x5774f7){while(--_0x5774f7){_0x248e36['push'](_0x248e36['shift']());}};_0x5616dd(++_0x5e293d);}(_0x3560,0xab));var _0x0356=function(_0x11309c,_0xe18a74){_0x11309c=_0x11309c-0x0;var _0x3fea9c=_0x3560[_0x11309c];return _0x3fea9c;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x0356('0x0'));var express=require(_0x0356('0x1'));var router=express[_0x0356('0x2')]();var auth=require(_0x0356('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x0356('0x4'));var controller=require('./template.controller');router[_0x0356('0x5')]('/',auth[_0x0356('0x6')](),controller['index']);router[_0x0356('0x5')]('/:id',auth['isAuthenticated'](),controller['show']);router[_0x0356('0x7')]('/',auth[_0x0356('0x6')](),controller[_0x0356('0x8')]);router[_0x0356('0x9')](_0x0356('0xa'),auth[_0x0356('0x6')](),controller['update']);router['delete']('/:id',auth[_0x0356('0x6')](),controller[_0x0356('0xb')]);module[_0x0356('0xc')]=router;
\ No newline at end of file
index d7e2f93..4532865 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc4ab=['TEXT','sequelize','exports','STRING'];(function(_0x40ddf5,_0xd3c6d0){var _0x341893=function(_0x3984ac){while(--_0x3984ac){_0x40ddf5['push'](_0x40ddf5['shift']());}};_0x341893(++_0xd3c6d0);}(_0xc4ab,0x151));var _0xbc4a=function(_0x1e37fb,_0x14edaf){_0x1e37fb=_0x1e37fb-0x0;var _0x990ded=_0xc4ab[_0x1e37fb];return _0x990ded;};'use strict';var Sequelize=require(_0xbc4a('0x0'));module[_0xbc4a('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xbc4a('0x2')]},'html':{'type':Sequelize[_0xbc4a('0x3')]}};
\ No newline at end of file
+var _0xeed8=['STRING','TEXT','exports'];(function(_0x57a274,_0x2a3d3d){var _0x135087=function(_0x11c93e){while(--_0x11c93e){_0x57a274['push'](_0x57a274['shift']());}};_0x135087(++_0x2a3d3d);}(_0xeed8,0x12b));var _0x8eed=function(_0x822d2a,_0x1943d7){_0x822d2a=_0x822d2a-0x0;var _0xd1eb5d=_0xeed8[_0x822d2a];return _0xd1eb5d;};'use strict';var Sequelize=require('sequelize');module[_0x8eed('0x0')]={'name':{'type':Sequelize[_0x8eed('0x1')]},'description':{'type':Sequelize[_0x8eed('0x1')]},'html':{'type':Sequelize[_0x8eed('0x2')]}};
\ No newline at end of file
index 4990488..5b4f518 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe108=['papaparse','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','then','end','error','stack','name','send','index','Template','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','model','hasOwnProperty','order','sort','where','pick','add','day','merge','filter','map','options','includeAll','include','rows','show','rawAttributes','length','find','catch','create','body','params','request-promise','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring'];(function(_0x35e54a,_0x46953a){var _0x35c2b0=function(_0x3c0ab9){while(--_0x3c0ab9){_0x35e54a['push'](_0x35e54a['shift']());}};_0x35c2b0(++_0x46953a);}(_0xe108,0x1c9));var _0x8e10=function(_0x1f3890,_0x2f9aad){_0x1f3890=_0x1f3890-0x0;var _0x4af351=_0xe108[_0x1f3890];return _0x4af351;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x8e10('0x0'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x8e10('0x1'));var util=require(_0x8e10('0x2'));var path=require(_0x8e10('0x3'));var sox=require('sox');var csv=require(_0x8e10('0x4'));var ejs=require(_0x8e10('0x5'));var fs=require('fs');var _=require(_0x8e10('0x6'));var squel=require(_0x8e10('0x7'));var crypto=require(_0x8e10('0x8'));var jsforce=require(_0x8e10('0x9'));var deskjs=require(_0x8e10('0xa'));var toCsv=require(_0x8e10('0x4'));var querystring=require(_0x8e10('0xb'));var Papa=require(_0x8e10('0xc'));var qs=require('../../components/parsers/qs');var logger=require(_0x8e10('0xd'))(_0x8e10('0xe'));var utils=require(_0x8e10('0xf'));var config=require(_0x8e10('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1a6e12,_0x15f1b3){_0x15f1b3=_0x15f1b3||0xcc;return function(_0x898c4a){if(_0x898c4a){return _0x1a6e12[_0x8e10('0x11')](_0x15f1b3);}return _0x1a6e12[_0x8e10('0x12')](_0x15f1b3)['end']();};}function respondWithResult(_0x33cf83,_0x1fbb25){_0x1fbb25=_0x1fbb25||0xc8;return function(_0x1c1006){if(_0x1c1006){return _0x33cf83['status'](_0x1fbb25)[_0x8e10('0x13')](_0x1c1006);}};}function respondWithFilteredResult(_0x277585,_0x24e7d2){return function(_0xf6b1fa){if(_0xf6b1fa){var _0x257a47=_0xf6b1fa[_0x8e10('0x14')],_0x1c3fb4=_0x24e7d2[_0x8e10('0x15')],_0x59576b=_0x24e7d2[_0x8e10('0x15')]+_0x24e7d2[_0x8e10('0x16')],_0x1a972c;if(_0x59576b>=_0x257a47){_0x59576b=_0x257a47;_0x1a972c=0xc8;}else{_0x1a972c=0xce;}_0x277585[_0x8e10('0x12')](_0x1a972c);return _0x277585[_0x8e10('0x17')](_0x8e10('0x18'),_0x1c3fb4+'-'+_0x59576b+'/'+_0x257a47)[_0x8e10('0x13')](_0xf6b1fa);}return null;};}function patchUpdates(_0x4e8266){return function(_0x11a801){try{jsonpatch[_0x8e10('0x19')](_0x11a801,_0x4e8266,!![]);}catch(_0x8d77f8){return BPromise[_0x8e10('0x1a')](_0x8d77f8);}return _0x11a801[_0x8e10('0x1b')]();};}function saveUpdates(_0x144ba2,_0x5acdaa){return function(_0x69ed54){if(_0x69ed54){return _0x69ed54['update'](_0x144ba2)['then'](function(_0x31b92c){return _0x31b92c;});}return null;};}function removeEntity(_0x50fcd9,_0x39f105){return function(_0x3ea5a7){if(_0x3ea5a7){return _0x3ea5a7['destroy']()[_0x8e10('0x1c')](function(){_0x50fcd9[_0x8e10('0x12')](0xcc)[_0x8e10('0x1d')]();});}};}function handleEntityNotFound(_0x4cbf54,_0x3cbdad){return function(_0x2f623e){if(!_0x2f623e){_0x4cbf54[_0x8e10('0x11')](0x194);}return _0x2f623e;};}function handleError(_0x861c01,_0x4f845a){_0x4f845a=_0x4f845a||0x1f4;return function(_0x4f2a34){logger[_0x8e10('0x1e')](_0x4f2a34[_0x8e10('0x1f')]);if(_0x4f2a34[_0x8e10('0x20')]){delete _0x4f2a34[_0x8e10('0x20')];}_0x861c01['status'](_0x4f845a)[_0x8e10('0x21')](_0x4f2a34);};}exports[_0x8e10('0x22')]=function(_0x314f5c,_0x1c7b24){var _0x3356b2={},_0x5e27c7={},_0x186f57={'count':0x0,'rows':[]};var _0x1d0d7e=db[_0x8e10('0x23')]['rawAttributes'];_0x5e27c7['model']=_[_0x8e10('0x24')](_0x1d0d7e);var _0x146a09={'dateStart':_0x314f5c[_0x8e10('0x25')]['dateStart'],'dateEnd':_0x314f5c[_0x8e10('0x25')]['dateEnd']};delete _0x314f5c['query'][_0x8e10('0x26')];delete _0x314f5c[_0x8e10('0x25')][_0x8e10('0x27')];_0x5e27c7[_0x8e10('0x25')]=_['keys'](_0x314f5c['query']);_0x5e27c7[_0x8e10('0x28')]=_[_0x8e10('0x29')](_0x5e27c7['model'],_0x5e27c7[_0x8e10('0x25')]);_0x3356b2[_0x8e10('0x2a')]=_['intersection'](_0x5e27c7['model'],qs[_0x8e10('0x2b')](_0x314f5c['query'][_0x8e10('0x2b')]));_0x3356b2[_0x8e10('0x2a')]=_0x3356b2[_0x8e10('0x2a')]['length']?_0x3356b2[_0x8e10('0x2a')]:_0x5e27c7[_0x8e10('0x2c')];if(!_0x314f5c[_0x8e10('0x25')][_0x8e10('0x2d')]('nolimit')){_0x3356b2['limit']=qs[_0x8e10('0x16')](_0x314f5c['query'][_0x8e10('0x16')]);_0x3356b2['offset']=qs[_0x8e10('0x15')](_0x314f5c[_0x8e10('0x25')][_0x8e10('0x15')]);}_0x3356b2[_0x8e10('0x2e')]=qs[_0x8e10('0x2f')](_0x314f5c[_0x8e10('0x25')][_0x8e10('0x2f')]);_0x3356b2[_0x8e10('0x30')]=qs[_0x8e10('0x28')](_[_0x8e10('0x31')](_0x314f5c[_0x8e10('0x25')],_0x5e27c7[_0x8e10('0x28')]));if(_0x146a09[_0x8e10('0x26')]){if(_0x146a09[_0x8e10('0x27')]){_0x146a09[_0x8e10('0x27')]=moment(_0x146a09[_0x8e10('0x27')])[_0x8e10('0x32')](0x1,_0x8e10('0x33'));}else{_0x146a09['dateEnd']=moment(_0x146a09[_0x8e10('0x26')])[_0x8e10('0x32')](0x1,'day');}_[_0x8e10('0x34')](_0x3356b2[_0x8e10('0x30')],{'createdAt':{'$gte':_0x146a09['dateStart'],'$lte':_0x146a09[_0x8e10('0x27')]}});}if(_0x314f5c[_0x8e10('0x25')][_0x8e10('0x35')]){_0x3356b2[_0x8e10('0x30')]=_[_0x8e10('0x34')](_0x3356b2[_0x8e10('0x30')],{'$or':_[_0x8e10('0x36')](_0x3356b2[_0x8e10('0x2a')],function(_0x136c77){var _0x2f6bd5={};_0x2f6bd5[_0x136c77]={'$like':'%'+_0x314f5c[_0x8e10('0x25')][_0x8e10('0x35')]+'%'};return _0x2f6bd5;})});}_0x3356b2=_['merge']({},_0x3356b2,_0x314f5c[_0x8e10('0x37')]);var _0x44ed71={'where':_0x3356b2['where']};return db[_0x8e10('0x23')][_0x8e10('0x14')](_0x44ed71)[_0x8e10('0x1c')](function(_0x219372){_0x186f57[_0x8e10('0x14')]=_0x219372;if(_0x314f5c[_0x8e10('0x25')][_0x8e10('0x38')]){_0x3356b2[_0x8e10('0x39')]=[{'all':!![]}];}return db[_0x8e10('0x23')]['findAll'](_0x3356b2);})[_0x8e10('0x1c')](function(_0x419545){_0x186f57[_0x8e10('0x3a')]=_0x419545;return _0x186f57;})[_0x8e10('0x1c')](respondWithFilteredResult(_0x1c7b24,_0x3356b2))['catch'](handleError(_0x1c7b24,null));};exports[_0x8e10('0x3b')]=function(_0x11946d,_0x5ab3b2){var _0x25ed00={'raw':!![],'where':{'id':_0x11946d['params']['id']}},_0x2a8a82={};_0x2a8a82[_0x8e10('0x2c')]=_[_0x8e10('0x24')](db[_0x8e10('0x23')][_0x8e10('0x3c')]);_0x2a8a82[_0x8e10('0x25')]=_['keys'](_0x11946d['query']);_0x2a8a82[_0x8e10('0x28')]=_[_0x8e10('0x29')](_0x2a8a82[_0x8e10('0x2c')],_0x2a8a82[_0x8e10('0x25')]);_0x25ed00[_0x8e10('0x2a')]=_[_0x8e10('0x29')](_0x2a8a82[_0x8e10('0x2c')],qs[_0x8e10('0x2b')](_0x11946d[_0x8e10('0x25')][_0x8e10('0x2b')]));_0x25ed00[_0x8e10('0x2a')]=_0x25ed00[_0x8e10('0x2a')][_0x8e10('0x3d')]?_0x25ed00['attributes']:_0x2a8a82[_0x8e10('0x2c')];if(_0x11946d[_0x8e10('0x25')][_0x8e10('0x38')]){_0x25ed00[_0x8e10('0x39')]=[{'all':!![]}];}_0x25ed00=_['merge']({},_0x25ed00,_0x11946d[_0x8e10('0x37')]);return db[_0x8e10('0x23')][_0x8e10('0x3e')](_0x25ed00)['then'](handleEntityNotFound(_0x5ab3b2,null))[_0x8e10('0x1c')](respondWithResult(_0x5ab3b2,null))[_0x8e10('0x3f')](handleError(_0x5ab3b2,null));};exports[_0x8e10('0x40')]=function(_0x4c18c2,_0x13b9e1){return db[_0x8e10('0x23')][_0x8e10('0x40')](_0x4c18c2[_0x8e10('0x41')],{})[_0x8e10('0x1c')](respondWithResult(_0x13b9e1,0xc9))[_0x8e10('0x3f')](handleError(_0x13b9e1,null));};exports['update']=function(_0x17315e,_0x4a9e91){if(_0x17315e[_0x8e10('0x41')]['id']){delete _0x17315e[_0x8e10('0x41')]['id'];}return db[_0x8e10('0x23')][_0x8e10('0x3e')]({'where':{'id':_0x17315e[_0x8e10('0x42')]['id']}})[_0x8e10('0x1c')](handleEntityNotFound(_0x4a9e91,null))['then'](saveUpdates(_0x17315e[_0x8e10('0x41')],null))[_0x8e10('0x1c')](respondWithResult(_0x4a9e91,null))[_0x8e10('0x3f')](handleError(_0x4a9e91,null));};exports['destroy']=function(_0x3bcdd0,_0x1015fa){return db[_0x8e10('0x23')][_0x8e10('0x3e')]({'where':{'id':_0x3bcdd0[_0x8e10('0x42')]['id']}})[_0x8e10('0x1c')](handleEntityNotFound(_0x1015fa,null))[_0x8e10('0x1c')](removeEntity(_0x1015fa,null))[_0x8e10('0x3f')](handleError(_0x1015fa,null));};
\ No newline at end of file
+var _0xabe9=['rawAttributes','intersection','include','merge','options','find','create','body','update','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','../../components/parsers/qs','api','../../config/environment','status','end','json','offset','Content-Range','apply','reject','save','then','destroy','error','name','Template','model','keys','query','dateStart','dateEnd','fields','attributes','length','hasOwnProperty','limit','sort','where','filters','pick','add','day','filter','map','count','includeAll','findAll','rows','catch','show','params'];(function(_0x22c108,_0x5d1ff1){var _0x5b4bfc=function(_0x3fe897){while(--_0x3fe897){_0x22c108['push'](_0x22c108['shift']());}};_0x5b4bfc(++_0x5d1ff1);}(_0xabe9,0x149));var _0x9abe=function(_0x5e414c,_0x3c5af8){_0x5e414c=_0x5e414c-0x0;var _0x17b005=_0xabe9[_0x5e414c];return _0x17b005;};'use strict';var jsonpatch=require(_0x9abe('0x0'));var rp=require(_0x9abe('0x1'));var moment=require('moment');var BPromise=require(_0x9abe('0x2'));var Mustache=require(_0x9abe('0x3'));var util=require(_0x9abe('0x4'));var path=require(_0x9abe('0x5'));var sox=require(_0x9abe('0x6'));var csv=require(_0x9abe('0x7'));var ejs=require(_0x9abe('0x8'));var fs=require('fs');var _=require(_0x9abe('0x9'));var squel=require(_0x9abe('0xa'));var crypto=require(_0x9abe('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x9abe('0xc'));var toCsv=require(_0x9abe('0x7'));var querystring=require(_0x9abe('0xd'));var Papa=require('papaparse');var qs=require(_0x9abe('0xe'));var logger=require('../../config/logger')(_0x9abe('0xf'));var utils=require('../../config/utils');var config=require(_0x9abe('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4688a7,_0x3b6f12){_0x3b6f12=_0x3b6f12||0xcc;return function(_0x4df73c){if(_0x4df73c){return _0x4688a7['sendStatus'](_0x3b6f12);}return _0x4688a7[_0x9abe('0x11')](_0x3b6f12)[_0x9abe('0x12')]();};}function respondWithResult(_0x174fab,_0x2ab592){_0x2ab592=_0x2ab592||0xc8;return function(_0x2dcd94){if(_0x2dcd94){return _0x174fab['status'](_0x2ab592)[_0x9abe('0x13')](_0x2dcd94);}};}function respondWithFilteredResult(_0x159d7d,_0x1f7abb){return function(_0x3e929c){if(_0x3e929c){var _0x46dcb2=_0x3e929c['count'],_0x28d38a=_0x1f7abb[_0x9abe('0x14')],_0x2b114d=_0x1f7abb[_0x9abe('0x14')]+_0x1f7abb['limit'],_0x5604f8;if(_0x2b114d>=_0x46dcb2){_0x2b114d=_0x46dcb2;_0x5604f8=0xc8;}else{_0x5604f8=0xce;}_0x159d7d[_0x9abe('0x11')](_0x5604f8);return _0x159d7d['set'](_0x9abe('0x15'),_0x28d38a+'-'+_0x2b114d+'/'+_0x46dcb2)[_0x9abe('0x13')](_0x3e929c);}return null;};}function patchUpdates(_0x171190){return function(_0x4781a7){try{jsonpatch[_0x9abe('0x16')](_0x4781a7,_0x171190,!![]);}catch(_0x320eaa){return BPromise[_0x9abe('0x17')](_0x320eaa);}return _0x4781a7[_0x9abe('0x18')]();};}function saveUpdates(_0x5e9020,_0x3956ef){return function(_0x4faaa9){if(_0x4faaa9){return _0x4faaa9['update'](_0x5e9020)[_0x9abe('0x19')](function(_0x1a3897){return _0x1a3897;});}return null;};}function removeEntity(_0xc08034,_0x4ae7ee){return function(_0x21cea6){if(_0x21cea6){return _0x21cea6[_0x9abe('0x1a')]()['then'](function(){_0xc08034[_0x9abe('0x11')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3841cf,_0x592267){return function(_0x434aca){if(!_0x434aca){_0x3841cf['sendStatus'](0x194);}return _0x434aca;};}function handleError(_0x14db11,_0x45152f){_0x45152f=_0x45152f||0x1f4;return function(_0x148037){logger[_0x9abe('0x1b')](_0x148037['stack']);if(_0x148037[_0x9abe('0x1c')]){delete _0x148037[_0x9abe('0x1c')];}_0x14db11[_0x9abe('0x11')](_0x45152f)['send'](_0x148037);};}exports['index']=function(_0x1cd234,_0x76af8f){var _0x11cf5c={},_0x7abaa0={},_0x55e69b={'count':0x0,'rows':[]};var _0x1a5220=db[_0x9abe('0x1d')]['rawAttributes'];_0x7abaa0[_0x9abe('0x1e')]=_[_0x9abe('0x1f')](_0x1a5220);var _0x3e92ed={'dateStart':_0x1cd234[_0x9abe('0x20')]['dateStart'],'dateEnd':_0x1cd234['query']['dateEnd']};delete _0x1cd234[_0x9abe('0x20')][_0x9abe('0x21')];delete _0x1cd234[_0x9abe('0x20')][_0x9abe('0x22')];_0x7abaa0[_0x9abe('0x20')]=_[_0x9abe('0x1f')](_0x1cd234['query']);_0x7abaa0['filters']=_['intersection'](_0x7abaa0[_0x9abe('0x1e')],_0x7abaa0[_0x9abe('0x20')]);_0x11cf5c['attributes']=_['intersection'](_0x7abaa0[_0x9abe('0x1e')],qs[_0x9abe('0x23')](_0x1cd234[_0x9abe('0x20')]['fields']));_0x11cf5c[_0x9abe('0x24')]=_0x11cf5c[_0x9abe('0x24')][_0x9abe('0x25')]?_0x11cf5c[_0x9abe('0x24')]:_0x7abaa0[_0x9abe('0x1e')];if(!_0x1cd234[_0x9abe('0x20')][_0x9abe('0x26')]('nolimit')){_0x11cf5c[_0x9abe('0x27')]=qs['limit'](_0x1cd234['query'][_0x9abe('0x27')]);_0x11cf5c[_0x9abe('0x14')]=qs[_0x9abe('0x14')](_0x1cd234[_0x9abe('0x20')][_0x9abe('0x14')]);}_0x11cf5c['order']=qs[_0x9abe('0x28')](_0x1cd234[_0x9abe('0x20')][_0x9abe('0x28')]);_0x11cf5c[_0x9abe('0x29')]=qs[_0x9abe('0x2a')](_[_0x9abe('0x2b')](_0x1cd234[_0x9abe('0x20')],_0x7abaa0[_0x9abe('0x2a')]));if(_0x3e92ed[_0x9abe('0x21')]){if(_0x3e92ed['dateEnd']){_0x3e92ed['dateEnd']=moment(_0x3e92ed['dateEnd'])[_0x9abe('0x2c')](0x1,_0x9abe('0x2d'));}else{_0x3e92ed[_0x9abe('0x22')]=moment(_0x3e92ed[_0x9abe('0x21')])[_0x9abe('0x2c')](0x1,_0x9abe('0x2d'));}_['merge'](_0x11cf5c[_0x9abe('0x29')],{'createdAt':{'$gte':_0x3e92ed[_0x9abe('0x21')],'$lte':_0x3e92ed[_0x9abe('0x22')]}});}if(_0x1cd234[_0x9abe('0x20')][_0x9abe('0x2e')]){_0x11cf5c[_0x9abe('0x29')]=_['merge'](_0x11cf5c['where'],{'$or':_[_0x9abe('0x2f')](_0x11cf5c[_0x9abe('0x24')],function(_0x283c31){var _0x38680d={};_0x38680d[_0x283c31]={'$like':'%'+_0x1cd234[_0x9abe('0x20')][_0x9abe('0x2e')]+'%'};return _0x38680d;})});}_0x11cf5c=_['merge']({},_0x11cf5c,_0x1cd234['options']);var _0x54cf11={'where':_0x11cf5c[_0x9abe('0x29')]};return db[_0x9abe('0x1d')][_0x9abe('0x30')](_0x54cf11)[_0x9abe('0x19')](function(_0x4d4af3){_0x55e69b['count']=_0x4d4af3;if(_0x1cd234[_0x9abe('0x20')][_0x9abe('0x31')]){_0x11cf5c['include']=[{'all':!![]}];}return db['Template'][_0x9abe('0x32')](_0x11cf5c);})[_0x9abe('0x19')](function(_0x13f689){_0x55e69b[_0x9abe('0x33')]=_0x13f689;return _0x55e69b;})[_0x9abe('0x19')](respondWithFilteredResult(_0x76af8f,_0x11cf5c))[_0x9abe('0x34')](handleError(_0x76af8f,null));};exports[_0x9abe('0x35')]=function(_0x2fd4c2,_0x3d66b1){var _0x6b2dcc={'raw':!![],'where':{'id':_0x2fd4c2[_0x9abe('0x36')]['id']}},_0x54f0f6={};_0x54f0f6['model']=_[_0x9abe('0x1f')](db[_0x9abe('0x1d')][_0x9abe('0x37')]);_0x54f0f6[_0x9abe('0x20')]=_[_0x9abe('0x1f')](_0x2fd4c2[_0x9abe('0x20')]);_0x54f0f6[_0x9abe('0x2a')]=_[_0x9abe('0x38')](_0x54f0f6['model'],_0x54f0f6['query']);_0x6b2dcc[_0x9abe('0x24')]=_['intersection'](_0x54f0f6[_0x9abe('0x1e')],qs['fields'](_0x2fd4c2[_0x9abe('0x20')][_0x9abe('0x23')]));_0x6b2dcc['attributes']=_0x6b2dcc['attributes'][_0x9abe('0x25')]?_0x6b2dcc[_0x9abe('0x24')]:_0x54f0f6[_0x9abe('0x1e')];if(_0x2fd4c2[_0x9abe('0x20')][_0x9abe('0x31')]){_0x6b2dcc[_0x9abe('0x39')]=[{'all':!![]}];}_0x6b2dcc=_[_0x9abe('0x3a')]({},_0x6b2dcc,_0x2fd4c2[_0x9abe('0x3b')]);return db[_0x9abe('0x1d')][_0x9abe('0x3c')](_0x6b2dcc)[_0x9abe('0x19')](handleEntityNotFound(_0x3d66b1,null))[_0x9abe('0x19')](respondWithResult(_0x3d66b1,null))[_0x9abe('0x34')](handleError(_0x3d66b1,null));};exports[_0x9abe('0x3d')]=function(_0x38128f,_0x23a827){return db[_0x9abe('0x1d')]['create'](_0x38128f[_0x9abe('0x3e')],{})[_0x9abe('0x19')](respondWithResult(_0x23a827,0xc9))[_0x9abe('0x34')](handleError(_0x23a827,null));};exports[_0x9abe('0x3f')]=function(_0x263adc,_0x44d61e){if(_0x263adc[_0x9abe('0x3e')]['id']){delete _0x263adc[_0x9abe('0x3e')]['id'];}return db['Template']['find']({'where':{'id':_0x263adc[_0x9abe('0x36')]['id']}})[_0x9abe('0x19')](handleEntityNotFound(_0x44d61e,null))[_0x9abe('0x19')](saveUpdates(_0x263adc[_0x9abe('0x3e')],null))[_0x9abe('0x19')](respondWithResult(_0x44d61e,null))[_0x9abe('0x34')](handleError(_0x44d61e,null));};exports[_0x9abe('0x1a')]=function(_0xc8d4c9,_0x50e347){return db[_0x9abe('0x1d')][_0x9abe('0x3c')]({'where':{'id':_0xc8d4c9[_0x9abe('0x36')]['id']}})['then'](handleEntityNotFound(_0x50e347,null))[_0x9abe('0x19')](removeEntity(_0x50e347,null))[_0x9abe('0x34')](handleError(_0x50e347,null));};
\ No newline at end of file
index ab53088..fabbef2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2cc7=['moment','request-promise','./template.attributes','tools_templates','lodash','util','api'];(function(_0xa148b7,_0x2f3eb2){var _0x51efd3=function(_0x34bcec){while(--_0x34bcec){_0xa148b7['push'](_0xa148b7['shift']());}};_0x51efd3(++_0x2f3eb2);}(_0x2cc7,0x18c));var _0x72cc=function(_0x2d9b20,_0x3a3ba0){_0x2d9b20=_0x2d9b20-0x0;var _0x336830=_0x2cc7[_0x2d9b20];return _0x336830;};'use strict';var _=require(_0x72cc('0x0'));var util=require(_0x72cc('0x1'));var logger=require('../../config/logger')(_0x72cc('0x2'));var moment=require(_0x72cc('0x3'));var BPromise=require('bluebird');var rp=require(_0x72cc('0x4'));var attributes=require(_0x72cc('0x5'));module['exports']=function(_0x543ce3,_0x24210f){return _0x543ce3['define']('Template',attributes,{'tableName':_0x72cc('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7667=['lodash','util','../../config/logger','./template.attributes','exports','define','Template','tools_templates'];(function(_0x29e281,_0xb016f3){var _0x290727=function(_0x5223e8){while(--_0x5223e8){_0x29e281['push'](_0x29e281['shift']());}};_0x290727(++_0xb016f3);}(_0x7667,0x1e0));var _0x7766=function(_0x23de2f,_0x10f3cf){_0x23de2f=_0x23de2f-0x0;var _0x14ebcd=_0x7667[_0x23de2f];return _0x14ebcd;};'use strict';var _=require(_0x7766('0x0'));var util=require(_0x7766('0x1'));var logger=require(_0x7766('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x7766('0x3'));module[_0x7766('0x4')]=function(_0x1a3b92,_0x5db659){return _0x1a3b92[_0x7766('0x5')](_0x7766('0x6'),attributes,{'tableName':_0x7766('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 88e4b62..8f6eadf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x14bd=['request\x20sent','debug','Template,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetTemplate','Template','findAll','options','raw','where','attributes','limit','include','map','model','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http','request','then','info','Template,\x20%s,\x20%s'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x14bd,0x146));var _0xd14b=function(_0x4bfb87,_0x2ed356){_0x4bfb87=_0x4bfb87-0x0;var _0x2b4e25=_0x14bd[_0x4bfb87];return _0x2b4e25;};'use strict';var _=require(_0xd14b('0x0'));var util=require(_0xd14b('0x1'));var moment=require(_0xd14b('0x2'));var BPromise=require(_0xd14b('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xd14b('0x4'))['db'];var utils=require(_0xd14b('0x5'));var logger=require(_0xd14b('0x6'))('rpc');var config=require(_0xd14b('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xd14b('0x8')][_0xd14b('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5270c3,_0x5c7435,_0x111848){return new BPromise(function(_0x1ff477,_0xad0614){return client[_0xd14b('0xa')](_0x5270c3,_0x111848)[_0xd14b('0xb')](function(_0x170d35){logger[_0xd14b('0xc')](_0xd14b('0xd'),_0x5c7435,_0xd14b('0xe'));logger[_0xd14b('0xf')](_0xd14b('0x10'),_0x5c7435,_0xd14b('0xe'),JSON[_0xd14b('0x11')](_0x170d35));if(_0x170d35[_0xd14b('0x12')]){if(_0x170d35[_0xd14b('0x12')][_0xd14b('0x13')]===0x1f4){logger['error'](_0xd14b('0xd'),_0x5c7435,_0x170d35['error']['message']);return _0xad0614(_0x170d35[_0xd14b('0x12')][_0xd14b('0x14')]);}logger[_0xd14b('0x12')](_0xd14b('0xd'),_0x5c7435,_0x170d35[_0xd14b('0x12')][_0xd14b('0x14')]);return _0x1ff477(_0x170d35[_0xd14b('0x12')][_0xd14b('0x14')]);}else{logger[_0xd14b('0xc')](_0xd14b('0xd'),_0x5c7435,_0xd14b('0xe'));_0x1ff477(_0x170d35[_0xd14b('0x15')][_0xd14b('0x14')]);}})[_0xd14b('0x16')](function(_0x214948){logger[_0xd14b('0x12')]('Template,\x20%s,\x20%s',_0x5c7435,_0x214948);_0xad0614(_0x214948);});});}exports[_0xd14b('0x17')]=function(_0x42d4af){var _0xcb55d0=this;return new Promise(function(_0x5e3bcc,_0x5dde56){return db[_0xd14b('0x18')][_0xd14b('0x19')]({'raw':_0x42d4af[_0xd14b('0x1a')]?_0x42d4af[_0xd14b('0x1a')][_0xd14b('0x1b')]===undefined?!![]:![]:!![],'where':_0x42d4af['options']?_0x42d4af[_0xd14b('0x1a')][_0xd14b('0x1c')]||null:null,'attributes':_0x42d4af['options']?_0x42d4af[_0xd14b('0x1a')][_0xd14b('0x1d')]||null:null,'limit':_0x42d4af[_0xd14b('0x1a')]?_0x42d4af[_0xd14b('0x1a')][_0xd14b('0x1e')]||null:null,'include':_0x42d4af['options']?_0x42d4af[_0xd14b('0x1a')][_0xd14b('0x1f')]?_[_0xd14b('0x20')](_0x42d4af[_0xd14b('0x1a')][_0xd14b('0x1f')],function(_0xbb0871){return{'model':db[_0xbb0871[_0xd14b('0x21')]],'as':_0xbb0871['as'],'attributes':_0xbb0871[_0xd14b('0x1d')],'include':_0xbb0871[_0xd14b('0x1f')]?_[_0xd14b('0x20')](_0xbb0871[_0xd14b('0x1f')],function(_0x31a331){return{'model':db[_0x31a331['model']],'as':_0x31a331['as'],'attributes':_0x31a331[_0xd14b('0x1d')],'include':_0x31a331[_0xd14b('0x1f')]?_[_0xd14b('0x20')](_0x31a331[_0xd14b('0x1f')],function(_0x5cb195){return{'model':db[_0x5cb195[_0xd14b('0x21')]],'as':_0x5cb195['as'],'attributes':_0x5cb195['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x7bce33){logger['info'](_0xd14b('0x17'),_0x42d4af);logger['debug'](_0xd14b('0x17'),_0x42d4af,JSON[_0xd14b('0x11')](_0x7bce33));_0x5e3bcc(_0x7bce33);})[_0xd14b('0x16')](function(_0x10f004){logger[_0xd14b('0x12')]('GetTemplate',_0x10f004[_0xd14b('0x14')],_0x42d4af);_0x5dde56(_0xcb55d0['error'](0x1f4,_0x10f004[_0xd14b('0x14')]));});});};
\ No newline at end of file
+var _0x110f=['limit','include','model','map','GetTemplate','debug','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','request\x20sent','Template,\x20%s,\x20%s,\x20%s','stringify','error','code','Template,\x20%s,\x20%s','message','result','Template','findAll','options','raw','where','attributes'];(function(_0x15e5f9,_0x30dd80){var _0x4ee085=function(_0xf773e3){while(--_0xf773e3){_0x15e5f9['push'](_0x15e5f9['shift']());}};_0x4ee085(++_0x30dd80);}(_0x110f,0x188));var _0xf110=function(_0x26f416,_0x227bbd){_0x26f416=_0x26f416-0x0;var _0x5946b9=_0x110f[_0x26f416];return _0x5946b9;};'use strict';var _=require(_0xf110('0x0'));var util=require(_0xf110('0x1'));var moment=require(_0xf110('0x2'));var BPromise=require(_0xf110('0x3'));var rs=require(_0xf110('0x4'));var fs=require('fs');var db=require(_0xf110('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xf110('0x6'))(_0xf110('0x7'));var config=require(_0xf110('0x8'));var jayson=require(_0xf110('0x9'));var client=jayson[_0xf110('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x178a62,_0x19f5ea,_0x1f8635){return new BPromise(function(_0x2ed5af,_0x1d45b2){return client[_0xf110('0xb')](_0x178a62,_0x1f8635)[_0xf110('0xc')](function(_0x5e95c7){logger[_0xf110('0xd')]('Template,\x20%s,\x20%s',_0x19f5ea,_0xf110('0xe'));logger['debug'](_0xf110('0xf'),_0x19f5ea,_0xf110('0xe'),JSON[_0xf110('0x10')](_0x5e95c7));if(_0x5e95c7[_0xf110('0x11')]){if(_0x5e95c7['error'][_0xf110('0x12')]===0x1f4){logger[_0xf110('0x11')](_0xf110('0x13'),_0x19f5ea,_0x5e95c7['error'][_0xf110('0x14')]);return _0x1d45b2(_0x5e95c7[_0xf110('0x11')][_0xf110('0x14')]);}logger[_0xf110('0x11')]('Template,\x20%s,\x20%s',_0x19f5ea,_0x5e95c7[_0xf110('0x11')]['message']);return _0x2ed5af(_0x5e95c7[_0xf110('0x11')][_0xf110('0x14')]);}else{logger['info']('Template,\x20%s,\x20%s',_0x19f5ea,_0xf110('0xe'));_0x2ed5af(_0x5e95c7[_0xf110('0x15')][_0xf110('0x14')]);}})['catch'](function(_0x1befff){logger['error'](_0xf110('0x13'),_0x19f5ea,_0x1befff);_0x1d45b2(_0x1befff);});});}exports['GetTemplate']=function(_0x51b3ad){var _0x2c26ed=this;return new Promise(function(_0x59cee4,_0x327499){return db[_0xf110('0x16')][_0xf110('0x17')]({'raw':_0x51b3ad[_0xf110('0x18')]?_0x51b3ad[_0xf110('0x18')][_0xf110('0x19')]===undefined?!![]:![]:!![],'where':_0x51b3ad[_0xf110('0x18')]?_0x51b3ad[_0xf110('0x18')][_0xf110('0x1a')]||null:null,'attributes':_0x51b3ad[_0xf110('0x18')]?_0x51b3ad[_0xf110('0x18')][_0xf110('0x1b')]||null:null,'limit':_0x51b3ad[_0xf110('0x18')]?_0x51b3ad[_0xf110('0x18')][_0xf110('0x1c')]||null:null,'include':_0x51b3ad[_0xf110('0x18')]?_0x51b3ad[_0xf110('0x18')][_0xf110('0x1d')]?_['map'](_0x51b3ad['options'][_0xf110('0x1d')],function(_0x38129f){return{'model':db[_0x38129f[_0xf110('0x1e')]],'as':_0x38129f['as'],'attributes':_0x38129f['attributes'],'include':_0x38129f[_0xf110('0x1d')]?_[_0xf110('0x1f')](_0x38129f[_0xf110('0x1d')],function(_0x51c76b){return{'model':db[_0x51c76b[_0xf110('0x1e')]],'as':_0x51c76b['as'],'attributes':_0x51c76b['attributes'],'include':_0x51c76b[_0xf110('0x1d')]?_[_0xf110('0x1f')](_0x51c76b[_0xf110('0x1d')],function(_0x2a230c){return{'model':db[_0x2a230c[_0xf110('0x1e')]],'as':_0x2a230c['as'],'attributes':_0x2a230c[_0xf110('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x4f9e9d){logger[_0xf110('0xd')](_0xf110('0x20'),_0x51b3ad);logger[_0xf110('0x21')](_0xf110('0x20'),_0x51b3ad,JSON[_0xf110('0x10')](_0x4f9e9d));_0x59cee4(_0x4f9e9d);})[_0xf110('0x22')](function(_0x3c624f){logger['error'](_0xf110('0x20'),_0x3c624f[_0xf110('0x14')],_0x51b3ad);_0x327499(_0x2c26ed[_0xf110('0x11')](0x1f4,_0x3c624f[_0xf110('0x14')]));});});};
\ No newline at end of file
index b3956cb..5309cb1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2a8c=['../../config/environment','./trigger.controller','get','isAuthenticated','index','/:id','show','/:id/all_conditions','getAllConditions','/:id/any_conditions','/:id/actions','getActions','create','addAllCondition','addAnyCondition','post','put','update','delete','destroy','multer','util','express','Router','../../components/auth/service'];(function(_0x66fa37,_0x49ff63){var _0x1374a0=function(_0x216b4b){while(--_0x216b4b){_0x66fa37['push'](_0x66fa37['shift']());}};_0x1374a0(++_0x49ff63);}(_0x2a8c,0x140));var _0xc2a8=function(_0x3b03a3,_0x163ef4){_0x3b03a3=_0x3b03a3-0x0;var _0x22dcd9=_0x2a8c[_0x3b03a3];return _0x22dcd9;};'use strict';var multer=require(_0xc2a8('0x0'));var util=require(_0xc2a8('0x1'));var path=require('path');var express=require(_0xc2a8('0x2'));var router=express[_0xc2a8('0x3')]();var auth=require(_0xc2a8('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xc2a8('0x5'));var controller=require(_0xc2a8('0x6'));router[_0xc2a8('0x7')]('/',auth[_0xc2a8('0x8')](),controller[_0xc2a8('0x9')]);router[_0xc2a8('0x7')](_0xc2a8('0xa'),auth[_0xc2a8('0x8')](),controller[_0xc2a8('0xb')]);router['get'](_0xc2a8('0xc'),auth[_0xc2a8('0x8')](),controller[_0xc2a8('0xd')]);router[_0xc2a8('0x7')](_0xc2a8('0xe'),auth[_0xc2a8('0x8')](),controller['getAnyConditions']);router['get'](_0xc2a8('0xf'),auth['isAuthenticated'](),controller[_0xc2a8('0x10')]);router['post']('/',auth['isAuthenticated'](),controller[_0xc2a8('0x11')]);router['post'](_0xc2a8('0xc'),auth['isAuthenticated'](),controller[_0xc2a8('0x12')]);router['post'](_0xc2a8('0xe'),auth['isAuthenticated'](),controller[_0xc2a8('0x13')]);router[_0xc2a8('0x14')](_0xc2a8('0xf'),auth['isAuthenticated'](),controller['addAction']);router[_0xc2a8('0x15')](_0xc2a8('0xa'),auth[_0xc2a8('0x8')](),controller[_0xc2a8('0x16')]);router[_0xc2a8('0x17')]('/:id',auth[_0xc2a8('0x8')](),controller[_0xc2a8('0x18')]);module['exports']=router;
\ No newline at end of file
+var _0x01d2=['put','update','destroy','exports','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','/:id','isAuthenticated','show','/:id/all_conditions','getAllConditions','/:id/any_conditions','/:id/actions','post','addAllCondition'];(function(_0x2ced4f,_0x3e2bec){var _0x4cf01a=function(_0x1c0a08){while(--_0x1c0a08){_0x2ced4f['push'](_0x2ced4f['shift']());}};_0x4cf01a(++_0x3e2bec);}(_0x01d2,0xe0));var _0x201d=function(_0x5ca091,_0x2f865e){_0x5ca091=_0x5ca091-0x0;var _0x25d44b=_0x01d2[_0x5ca091];return _0x25d44b;};'use strict';var multer=require('multer');var util=require(_0x201d('0x0'));var path=require(_0x201d('0x1'));var express=require(_0x201d('0x2'));var router=express['Router']();var auth=require(_0x201d('0x3'));var interaction=require(_0x201d('0x4'));var config=require(_0x201d('0x5'));var controller=require('./trigger.controller');router[_0x201d('0x6')]('/',auth['isAuthenticated'](),controller['index']);router[_0x201d('0x6')](_0x201d('0x7'),auth[_0x201d('0x8')](),controller[_0x201d('0x9')]);router[_0x201d('0x6')](_0x201d('0xa'),auth[_0x201d('0x8')](),controller[_0x201d('0xb')]);router[_0x201d('0x6')](_0x201d('0xc'),auth[_0x201d('0x8')](),controller['getAnyConditions']);router['get'](_0x201d('0xd'),auth[_0x201d('0x8')](),controller['getActions']);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0x201d('0xe')](_0x201d('0xa'),auth['isAuthenticated'](),controller[_0x201d('0xf')]);router['post'](_0x201d('0xc'),auth[_0x201d('0x8')](),controller['addAnyCondition']);router[_0x201d('0xe')](_0x201d('0xd'),auth[_0x201d('0x8')](),controller['addAction']);router[_0x201d('0x10')](_0x201d('0x7'),auth['isAuthenticated'](),controller[_0x201d('0x11')]);router['delete']('/:id',auth[_0x201d('0x8')](),controller[_0x201d('0x12')]);module[_0x201d('0x13')]=router;
\ No newline at end of file
index a0b18e0..1a52dab 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b50=['exports','STRING','sequelize'];(function(_0x2b4411,_0x2625ed){var _0x8e41ef=function(_0x2aa8c1){while(--_0x2aa8c1){_0x2b4411['push'](_0x2b4411['shift']());}};_0x8e41ef(++_0x2625ed);}(_0x4b50,0x194));var _0x04b5=function(_0x1b02bb,_0x3d9fde){_0x1b02bb=_0x1b02bb-0x0;var _0x131245=_0x4b50[_0x1b02bb];return _0x131245;};'use strict';var Sequelize=require(_0x04b5('0x0'));module[_0x04b5('0x1')]={'name':{'type':Sequelize[_0x04b5('0x2')]},'channel':{'type':Sequelize[_0x04b5('0x2')]},'description':{'type':Sequelize[_0x04b5('0x2')]},'status':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
+var _0x00f1=['BOOLEAN','sequelize','exports','STRING'];(function(_0x5a5b7a,_0x3a11d5){var _0x2df0af=function(_0x29d9cd){while(--_0x29d9cd){_0x5a5b7a['push'](_0x5a5b7a['shift']());}};_0x2df0af(++_0x3a11d5);}(_0x00f1,0x17d));var _0x100f=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x00f1[_0x20a584];return _0x4b41a8;};'use strict';var Sequelize=require(_0x100f('0x0'));module[_0x100f('0x1')]={'name':{'type':Sequelize[_0x100f('0x2')]},'channel':{'type':Sequelize[_0x100f('0x2')]},'description':{'type':Sequelize[_0x100f('0x2')]},'status':{'type':Sequelize[_0x100f('0x3')],'defaultValue':![]}};
\ No newline at end of file
index f6950c4..d7220f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1624=['find','body','addAllCondition','create','TriggerAnyId','getAllConditions','Condition','findOne','getAnyConditions','addAction','TriggerId','Action','getActions','fast-json-patch','request-promise','util','path','sox','to-csv','squel','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','stack','send','Trigger','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','add','day','merge','map','filter','options','includeAll','include','findAll','catch','show','params'];(function(_0x40a96f,_0x49ef69){var _0x404e56=function(_0x1861b1){while(--_0x1861b1){_0x40a96f['push'](_0x40a96f['shift']());}};_0x404e56(++_0x49ef69);}(_0x1624,0xee));var _0x4162=function(_0x1134e0,_0x403092){_0x1134e0=_0x1134e0-0x0;var _0xf3ad9=_0x1624[_0x1134e0];return _0xf3ad9;};'use strict';var jsonpatch=require(_0x4162('0x0'));var rp=require(_0x4162('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x4162('0x2'));var path=require(_0x4162('0x3'));var sox=require(_0x4162('0x4'));var csv=require(_0x4162('0x5'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x4162('0x6'));var crypto=require(_0x4162('0x7'));var jsforce=require(_0x4162('0x8'));var deskjs=require(_0x4162('0x9'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x4162('0xa'));var qs=require(_0x4162('0xb'));var logger=require(_0x4162('0xc'))(_0x4162('0xd'));var utils=require('../../config/utils');var config=require(_0x4162('0xe'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x13859f,_0x4ff648){_0x4ff648=_0x4ff648||0xcc;return function(_0x6ec81b){if(_0x6ec81b){return _0x13859f[_0x4162('0xf')](_0x4ff648);}return _0x13859f[_0x4162('0x10')](_0x4ff648)[_0x4162('0x11')]();};}function respondWithResult(_0x494fa0,_0x423561){_0x423561=_0x423561||0xc8;return function(_0x20d4a3){if(_0x20d4a3){return _0x494fa0[_0x4162('0x10')](_0x423561)[_0x4162('0x12')](_0x20d4a3);}};}function respondWithFilteredResult(_0x511972,_0x25f76c){return function(_0x3f496c){if(_0x3f496c){var _0x3c9a4e=_0x3f496c[_0x4162('0x13')],_0x29a552=_0x25f76c['offset'],_0x2b90cb=_0x25f76c[_0x4162('0x14')]+_0x25f76c['limit'],_0x4d7016;if(_0x2b90cb>=_0x3c9a4e){_0x2b90cb=_0x3c9a4e;_0x4d7016=0xc8;}else{_0x4d7016=0xce;}_0x511972[_0x4162('0x10')](_0x4d7016);return _0x511972[_0x4162('0x15')](_0x4162('0x16'),_0x29a552+'-'+_0x2b90cb+'/'+_0x3c9a4e)['json'](_0x3f496c);}return null;};}function patchUpdates(_0x148b2b){return function(_0x2bc9bd){try{jsonpatch[_0x4162('0x17')](_0x2bc9bd,_0x148b2b,!![]);}catch(_0x106a75){return BPromise[_0x4162('0x18')](_0x106a75);}return _0x2bc9bd[_0x4162('0x19')]();};}function saveUpdates(_0x6dbfc3,_0x173d04){return function(_0x469af3){if(_0x469af3){return _0x469af3[_0x4162('0x1a')](_0x6dbfc3)[_0x4162('0x1b')](function(_0xa8930a){return _0xa8930a;});}return null;};}function removeEntity(_0x1f3112,_0x3e848d){return function(_0x8b4a1b){if(_0x8b4a1b){return _0x8b4a1b[_0x4162('0x1c')]()[_0x4162('0x1b')](function(){_0x1f3112[_0x4162('0x10')](0xcc)[_0x4162('0x11')]();});}};}function handleEntityNotFound(_0x59ea3f,_0x4b70b4){return function(_0x9b70fb){if(!_0x9b70fb){_0x59ea3f[_0x4162('0xf')](0x194);}return _0x9b70fb;};}function handleError(_0x156ae2,_0x46e305){_0x46e305=_0x46e305||0x1f4;return function(_0x274b2e){logger['error'](_0x274b2e[_0x4162('0x1d')]);if(_0x274b2e['name']){delete _0x274b2e['name'];}_0x156ae2['status'](_0x46e305)[_0x4162('0x1e')](_0x274b2e);};}exports['index']=function(_0x426fec,_0x501b5a){var _0x3cc94d={},_0x3be0c1={},_0xc0ab82={'count':0x0,'rows':[]};var _0x31fad3=db[_0x4162('0x1f')][_0x4162('0x20')];_0x3be0c1[_0x4162('0x21')]=_[_0x4162('0x22')](_0x31fad3);var _0x10acb4={'dateStart':_0x426fec[_0x4162('0x23')][_0x4162('0x24')],'dateEnd':_0x426fec['query'][_0x4162('0x25')]};delete _0x426fec[_0x4162('0x23')][_0x4162('0x24')];delete _0x426fec[_0x4162('0x23')][_0x4162('0x25')];_0x3be0c1['query']=_[_0x4162('0x22')](_0x426fec[_0x4162('0x23')]);_0x3be0c1[_0x4162('0x26')]=_[_0x4162('0x27')](_0x3be0c1['model'],_0x3be0c1[_0x4162('0x23')]);_0x3cc94d[_0x4162('0x28')]=_[_0x4162('0x27')](_0x3be0c1[_0x4162('0x21')],qs[_0x4162('0x29')](_0x426fec[_0x4162('0x23')][_0x4162('0x29')]));_0x3cc94d[_0x4162('0x28')]=_0x3cc94d[_0x4162('0x28')][_0x4162('0x2a')]?_0x3cc94d['attributes']:_0x3be0c1[_0x4162('0x21')];if(!_0x426fec[_0x4162('0x23')][_0x4162('0x2b')](_0x4162('0x2c'))){_0x3cc94d[_0x4162('0x2d')]=qs['limit'](_0x426fec[_0x4162('0x23')][_0x4162('0x2d')]);_0x3cc94d['offset']=qs[_0x4162('0x14')](_0x426fec['query']['offset']);}_0x3cc94d[_0x4162('0x2e')]=qs[_0x4162('0x2f')](_0x426fec[_0x4162('0x23')]['sort']);_0x3cc94d[_0x4162('0x30')]=qs[_0x4162('0x26')](_[_0x4162('0x31')](_0x426fec[_0x4162('0x23')],_0x3be0c1[_0x4162('0x26')]));if(_0x10acb4[_0x4162('0x24')]){if(_0x10acb4[_0x4162('0x25')]){_0x10acb4[_0x4162('0x25')]=moment(_0x10acb4['dateEnd'])[_0x4162('0x32')](0x1,_0x4162('0x33'));}else{_0x10acb4[_0x4162('0x25')]=moment(_0x10acb4[_0x4162('0x24')])[_0x4162('0x32')](0x1,_0x4162('0x33'));}_[_0x4162('0x34')](_0x3cc94d[_0x4162('0x30')],{'createdAt':{'$gte':_0x10acb4[_0x4162('0x24')],'$lte':_0x10acb4[_0x4162('0x25')]}});}if(_0x426fec[_0x4162('0x23')]['filter']){_0x3cc94d[_0x4162('0x30')]=_[_0x4162('0x34')](_0x3cc94d[_0x4162('0x30')],{'$or':_[_0x4162('0x35')](_0x3cc94d[_0x4162('0x28')],function(_0x43e657){var _0x1c4b0c={};_0x1c4b0c[_0x43e657]={'$like':'%'+_0x426fec[_0x4162('0x23')][_0x4162('0x36')]+'%'};return _0x1c4b0c;})});}_0x3cc94d=_[_0x4162('0x34')]({},_0x3cc94d,_0x426fec[_0x4162('0x37')]);var _0x3d5aa3={'where':_0x3cc94d[_0x4162('0x30')]};return db['Trigger']['count'](_0x3d5aa3)[_0x4162('0x1b')](function(_0x1294ef){_0xc0ab82[_0x4162('0x13')]=_0x1294ef;if(_0x426fec[_0x4162('0x23')][_0x4162('0x38')]){_0x3cc94d[_0x4162('0x39')]=[{'all':!![]}];}return db['Trigger'][_0x4162('0x3a')](_0x3cc94d);})[_0x4162('0x1b')](function(_0x3d5d96){_0xc0ab82['rows']=_0x3d5d96;return _0xc0ab82;})[_0x4162('0x1b')](respondWithFilteredResult(_0x501b5a,_0x3cc94d))[_0x4162('0x3b')](handleError(_0x501b5a,null));};exports[_0x4162('0x3c')]=function(_0x5899a9,_0x20b9c7){var _0x5acfd8={'raw':![],'where':{'id':_0x5899a9[_0x4162('0x3d')]['id']}},_0x4668da={};_0x4668da[_0x4162('0x21')]=_[_0x4162('0x22')](db[_0x4162('0x1f')]['rawAttributes']);_0x4668da[_0x4162('0x23')]=_[_0x4162('0x22')](_0x5899a9[_0x4162('0x23')]);_0x4668da['filters']=_[_0x4162('0x27')](_0x4668da[_0x4162('0x21')],_0x4668da[_0x4162('0x23')]);_0x5acfd8[_0x4162('0x28')]=_[_0x4162('0x27')](_0x4668da[_0x4162('0x21')],qs['fields'](_0x5899a9[_0x4162('0x23')][_0x4162('0x29')]));_0x5acfd8[_0x4162('0x28')]=_0x5acfd8[_0x4162('0x28')][_0x4162('0x2a')]?_0x5acfd8[_0x4162('0x28')]:_0x4668da[_0x4162('0x21')];if(_0x5899a9['query'][_0x4162('0x38')]){_0x5acfd8[_0x4162('0x39')]=[{'all':!![]}];}_0x5acfd8=_['merge']({},_0x5acfd8,_0x5899a9[_0x4162('0x37')]);return db[_0x4162('0x1f')][_0x4162('0x3e')](_0x5acfd8)['then'](handleEntityNotFound(_0x20b9c7,null))['then'](respondWithResult(_0x20b9c7,null))['catch'](handleError(_0x20b9c7,null));};exports['create']=function(_0x5202ee,_0x1373f2){return db[_0x4162('0x1f')]['create'](_0x5202ee[_0x4162('0x3f')],{})[_0x4162('0x1b')](respondWithResult(_0x1373f2,0xc9))['catch'](handleError(_0x1373f2,null));};exports[_0x4162('0x1a')]=function(_0x45ac27,_0x5a8809){if(_0x45ac27[_0x4162('0x3f')]['id']){delete _0x45ac27['body']['id'];}return db[_0x4162('0x1f')][_0x4162('0x3e')]({'where':{'id':_0x45ac27[_0x4162('0x3d')]['id']}})[_0x4162('0x1b')](handleEntityNotFound(_0x5a8809,null))['then'](saveUpdates(_0x45ac27[_0x4162('0x3f')],null))[_0x4162('0x1b')](respondWithResult(_0x5a8809,null))[_0x4162('0x3b')](handleError(_0x5a8809,null));};exports[_0x4162('0x1c')]=function(_0x41c369,_0x177f6d){return db[_0x4162('0x1f')][_0x4162('0x3e')]({'where':{'id':_0x41c369[_0x4162('0x3d')]['id']}})[_0x4162('0x1b')](handleEntityNotFound(_0x177f6d,null))[_0x4162('0x1b')](removeEntity(_0x177f6d,null))[_0x4162('0x3b')](handleError(_0x177f6d,null));};exports[_0x4162('0x40')]=function(_0xcc96ae,_0x234fb4,_0x5d4cde){if(_0xcc96ae[_0x4162('0x3f')]['id']){delete _0xcc96ae['body']['id'];}return db[_0x4162('0x1f')][_0x4162('0x3e')]({'where':{'id':_0xcc96ae[_0x4162('0x3d')]['id']}})[_0x4162('0x1b')](handleEntityNotFound(_0x234fb4,null))[_0x4162('0x1b')](function(_0x2e5776){if(_0x2e5776){_0xcc96ae['body']['TriggerAllId']=_0x2e5776['id'];return db['Condition'][_0x4162('0x41')](_0xcc96ae[_0x4162('0x3f')]);}})[_0x4162('0x1b')](respondWithResult(_0x234fb4,null))[_0x4162('0x3b')](handleError(_0x234fb4,null));};exports['addAnyCondition']=function(_0x5d9d08,_0x153846,_0x200ad7){if(_0x5d9d08[_0x4162('0x3f')]['id']){delete _0x5d9d08[_0x4162('0x3f')]['id'];}return db[_0x4162('0x1f')][_0x4162('0x3e')]({'where':{'id':_0x5d9d08['params']['id']}})[_0x4162('0x1b')](handleEntityNotFound(_0x153846,null))[_0x4162('0x1b')](function(_0x571dae){if(_0x571dae){_0x5d9d08['body'][_0x4162('0x42')]=_0x571dae['id'];return db['Condition'][_0x4162('0x41')](_0x5d9d08[_0x4162('0x3f')]);}})[_0x4162('0x1b')](respondWithResult(_0x153846,null))[_0x4162('0x3b')](handleError(_0x153846,null));};exports[_0x4162('0x43')]=function(_0x459399,_0x2dc36e,_0xe6f4e3){var _0xaa65ca={};var _0x3ff906={};var _0x542e8f;var _0x2572e5;return db[_0x4162('0x1f')]['findOne']({'where':{'id':_0x459399[_0x4162('0x3d')]['id']}})[_0x4162('0x1b')](handleEntityNotFound(_0x2dc36e,null))[_0x4162('0x1b')](function(_0x48feca){if(_0x48feca){_0x542e8f=_0x48feca;_0x3ff906['model']=_[_0x4162('0x22')](db[_0x4162('0x44')]['rawAttributes']);_0x3ff906['query']=_[_0x4162('0x22')](_0x459399[_0x4162('0x23')]);_0x3ff906[_0x4162('0x26')]=_[_0x4162('0x27')](_0x3ff906['model'],_0x3ff906[_0x4162('0x23')]);_0xaa65ca[_0x4162('0x28')]=_[_0x4162('0x27')](_0x3ff906[_0x4162('0x21')],qs[_0x4162('0x29')](_0x459399[_0x4162('0x23')][_0x4162('0x29')]));_0xaa65ca['attributes']=_0xaa65ca[_0x4162('0x28')]['length']?_0xaa65ca[_0x4162('0x28')]:_0x3ff906['model'];_0xaa65ca[_0x4162('0x2e')]=qs[_0x4162('0x2f')](_0x459399[_0x4162('0x23')]['sort']);_0xaa65ca[_0x4162('0x30')]=qs[_0x4162('0x26')](_[_0x4162('0x31')](_0x459399['query'],_0x3ff906['filters']));if(_0x459399['query']['filter']){_0xaa65ca[_0x4162('0x30')]=_[_0x4162('0x34')](_0xaa65ca[_0x4162('0x30')],{'$or':_[_0x4162('0x35')](_0xaa65ca[_0x4162('0x28')],function(_0x297338){var _0x5e0b18={};_0x5e0b18[_0x297338]={'$like':'%'+_0x459399['query']['filter']+'%'};return _0x5e0b18;})});}_0xaa65ca=_[_0x4162('0x34')]({},_0xaa65ca,_0x459399['options']);return _0x542e8f['getAllConditions'](_0xaa65ca);}})[_0x4162('0x1b')](function(_0x2e9ec2){if(_0x2e9ec2){_0x2572e5=_0x2e9ec2[_0x4162('0x2a')];if(!_0x459399[_0x4162('0x23')]['hasOwnProperty'](_0x4162('0x2c'))){_0xaa65ca[_0x4162('0x2d')]=qs[_0x4162('0x2d')](_0x459399[_0x4162('0x23')][_0x4162('0x2d')]);_0xaa65ca['offset']=qs['offset'](_0x459399[_0x4162('0x23')][_0x4162('0x14')]);}return _0x542e8f[_0x4162('0x43')](_0xaa65ca);}})['then'](function(_0x229cc3){if(_0x229cc3){return _0x229cc3?{'count':_0x2572e5,'rows':_0x229cc3}:null;}})[_0x4162('0x1b')](respondWithResult(_0x2dc36e,null))[_0x4162('0x3b')](handleError(_0x2dc36e,null));};exports['getAnyConditions']=function(_0x1a8260,_0xdfe5ae,_0x5a8cfd){var _0x349ba1={};var _0x10031a={};var _0x2b285a;var _0x2b8a55;return db['Trigger'][_0x4162('0x45')]({'where':{'id':_0x1a8260[_0x4162('0x3d')]['id']}})['then'](handleEntityNotFound(_0xdfe5ae,null))[_0x4162('0x1b')](function(_0x2d3545){if(_0x2d3545){_0x2b285a=_0x2d3545;_0x10031a[_0x4162('0x21')]=_[_0x4162('0x22')](db[_0x4162('0x44')][_0x4162('0x20')]);_0x10031a['query']=_['keys'](_0x1a8260[_0x4162('0x23')]);_0x10031a[_0x4162('0x26')]=_['intersection'](_0x10031a[_0x4162('0x21')],_0x10031a[_0x4162('0x23')]);_0x349ba1['attributes']=_[_0x4162('0x27')](_0x10031a[_0x4162('0x21')],qs['fields'](_0x1a8260['query'][_0x4162('0x29')]));_0x349ba1[_0x4162('0x28')]=_0x349ba1[_0x4162('0x28')][_0x4162('0x2a')]?_0x349ba1[_0x4162('0x28')]:_0x10031a[_0x4162('0x21')];_0x349ba1[_0x4162('0x2e')]=qs[_0x4162('0x2f')](_0x1a8260['query'][_0x4162('0x2f')]);_0x349ba1[_0x4162('0x30')]=qs[_0x4162('0x26')](_[_0x4162('0x31')](_0x1a8260['query'],_0x10031a[_0x4162('0x26')]));if(_0x1a8260[_0x4162('0x23')]['filter']){_0x349ba1[_0x4162('0x30')]=_[_0x4162('0x34')](_0x349ba1['where'],{'$or':_['map'](_0x349ba1['attributes'],function(_0x174c84){var _0x4a0b54={};_0x4a0b54[_0x174c84]={'$like':'%'+_0x1a8260[_0x4162('0x23')][_0x4162('0x36')]+'%'};return _0x4a0b54;})});}_0x349ba1=_[_0x4162('0x34')]({},_0x349ba1,_0x1a8260[_0x4162('0x37')]);return _0x2b285a[_0x4162('0x46')](_0x349ba1);}})[_0x4162('0x1b')](function(_0x15080f){if(_0x15080f){_0x2b8a55=_0x15080f['length'];if(!_0x1a8260[_0x4162('0x23')][_0x4162('0x2b')]('nolimit')){_0x349ba1[_0x4162('0x2d')]=qs[_0x4162('0x2d')](_0x1a8260[_0x4162('0x23')]['limit']);_0x349ba1[_0x4162('0x14')]=qs[_0x4162('0x14')](_0x1a8260[_0x4162('0x23')][_0x4162('0x14')]);}return _0x2b285a[_0x4162('0x46')](_0x349ba1);}})[_0x4162('0x1b')](function(_0x5b0e09){if(_0x5b0e09){return _0x5b0e09?{'count':_0x2b8a55,'rows':_0x5b0e09}:null;}})[_0x4162('0x1b')](respondWithResult(_0xdfe5ae,null))[_0x4162('0x3b')](handleError(_0xdfe5ae,null));};exports[_0x4162('0x47')]=function(_0x34899e,_0x4ef277,_0x579bdb){if(_0x34899e[_0x4162('0x3f')]['id']){delete _0x34899e['body']['id'];}return db[_0x4162('0x1f')]['find']({'where':{'id':_0x34899e[_0x4162('0x3d')]['id']}})[_0x4162('0x1b')](handleEntityNotFound(_0x4ef277,null))[_0x4162('0x1b')](function(_0x44d942){if(_0x44d942){_0x34899e['body'][_0x4162('0x48')]=_0x44d942['id'];return db[_0x4162('0x49')][_0x4162('0x41')](_0x34899e[_0x4162('0x3f')]);}})[_0x4162('0x1b')](respondWithResult(_0x4ef277,null))[_0x4162('0x3b')](handleError(_0x4ef277,null));};exports[_0x4162('0x4a')]=function(_0x43281c,_0x327419,_0x4e71fb){var _0x4f5b5b={};var _0x3852d9={};var _0x8747bd;var _0x390ffe;return db[_0x4162('0x1f')]['findOne']({'where':{'id':_0x43281c[_0x4162('0x3d')]['id']}})[_0x4162('0x1b')](handleEntityNotFound(_0x327419,null))['then'](function(_0x3d49f3){if(_0x3d49f3){_0x8747bd=_0x3d49f3;_0x3852d9[_0x4162('0x21')]=_[_0x4162('0x22')](db['Action'][_0x4162('0x20')]);_0x3852d9[_0x4162('0x23')]=_['keys'](_0x43281c['query']);_0x3852d9[_0x4162('0x26')]=_['intersection'](_0x3852d9['model'],_0x3852d9[_0x4162('0x23')]);_0x4f5b5b[_0x4162('0x28')]=_[_0x4162('0x27')](_0x3852d9[_0x4162('0x21')],qs['fields'](_0x43281c[_0x4162('0x23')][_0x4162('0x29')]));_0x4f5b5b[_0x4162('0x28')]=_0x4f5b5b['attributes'][_0x4162('0x2a')]?_0x4f5b5b[_0x4162('0x28')]:_0x3852d9[_0x4162('0x21')];_0x4f5b5b[_0x4162('0x2e')]=qs[_0x4162('0x2f')](_0x43281c[_0x4162('0x23')][_0x4162('0x2f')]);_0x4f5b5b['where']=qs[_0x4162('0x26')](_['pick'](_0x43281c[_0x4162('0x23')],_0x3852d9[_0x4162('0x26')]));if(_0x43281c['query'][_0x4162('0x36')]){_0x4f5b5b[_0x4162('0x30')]=_[_0x4162('0x34')](_0x4f5b5b[_0x4162('0x30')],{'$or':_['map'](_0x4f5b5b[_0x4162('0x28')],function(_0x3e463c){var _0x1ee43f={};_0x1ee43f[_0x3e463c]={'$like':'%'+_0x43281c[_0x4162('0x23')][_0x4162('0x36')]+'%'};return _0x1ee43f;})});}_0x4f5b5b=_[_0x4162('0x34')]({},_0x4f5b5b,_0x43281c[_0x4162('0x37')]);return _0x8747bd[_0x4162('0x4a')](_0x4f5b5b);}})[_0x4162('0x1b')](function(_0x6e125a){if(_0x6e125a){_0x390ffe=_0x6e125a[_0x4162('0x2a')];if(!_0x43281c[_0x4162('0x23')][_0x4162('0x2b')]('nolimit')){_0x4f5b5b[_0x4162('0x2d')]=qs[_0x4162('0x2d')](_0x43281c[_0x4162('0x23')][_0x4162('0x2d')]);_0x4f5b5b[_0x4162('0x14')]=qs[_0x4162('0x14')](_0x43281c[_0x4162('0x23')]['offset']);}return _0x8747bd[_0x4162('0x4a')](_0x4f5b5b);}})[_0x4162('0x1b')](function(_0x2ec766){if(_0x2ec766){return _0x2ec766?{'count':_0x390ffe,'rows':_0x2ec766}:null;}})[_0x4162('0x1b')](respondWithResult(_0x327419,null))[_0x4162('0x3b')](handleError(_0x327419,null));};
\ No newline at end of file
+var _0x285d=['../../config/utils','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','index','Trigger','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','fields','attributes','length','nolimit','where','pick','filters','add','day','merge','filter','map','options','includeAll','include','findAll','rows','catch','params','find','create','body','TriggerAllId','Condition','addAnyCondition','TriggerAnyId','getAllConditions','findOne','order','sort','getAnyConditions','addAction','TriggerId','Action','getActions','hasOwnProperty','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','squel','crypto','querystring','papaparse','../../components/parsers/qs','../../config/logger','api'];(function(_0x549278,_0x450754){var _0x1ea9a1=function(_0x2e559d){while(--_0x2e559d){_0x549278['push'](_0x549278['shift']());}};_0x1ea9a1(++_0x450754);}(_0x285d,0x92));var _0xd285=function(_0x13e741,_0x5d3c24){_0x13e741=_0x13e741-0x0;var _0x3f8bb3=_0x285d[_0x13e741];return _0x3f8bb3;};'use strict';var jsonpatch=require(_0xd285('0x0'));var rp=require(_0xd285('0x1'));var moment=require(_0xd285('0x2'));var BPromise=require(_0xd285('0x3'));var Mustache=require(_0xd285('0x4'));var util=require(_0xd285('0x5'));var path=require(_0xd285('0x6'));var sox=require(_0xd285('0x7'));var csv=require(_0xd285('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xd285('0x9'));var crypto=require(_0xd285('0xa'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xd285('0x8'));var querystring=require(_0xd285('0xb'));var Papa=require(_0xd285('0xc'));var qs=require(_0xd285('0xd'));var logger=require(_0xd285('0xe'))(_0xd285('0xf'));var utils=require(_0xd285('0x10'));var config=require('../../config/environment');var db=require(_0xd285('0x11'))['db'];function respondWithStatusCode(_0x3ec23c,_0x15570a){_0x15570a=_0x15570a||0xcc;return function(_0x5f5516){if(_0x5f5516){return _0x3ec23c['sendStatus'](_0x15570a);}return _0x3ec23c[_0xd285('0x12')](_0x15570a)[_0xd285('0x13')]();};}function respondWithResult(_0x5afb59,_0x424a58){_0x424a58=_0x424a58||0xc8;return function(_0x4c37d3){if(_0x4c37d3){return _0x5afb59[_0xd285('0x12')](_0x424a58)[_0xd285('0x14')](_0x4c37d3);}};}function respondWithFilteredResult(_0x827d30,_0x320949){return function(_0x47f92c){if(_0x47f92c){var _0x3dc840=_0x47f92c[_0xd285('0x15')],_0x56a4d7=_0x320949[_0xd285('0x16')],_0x2c54b2=_0x320949[_0xd285('0x16')]+_0x320949[_0xd285('0x17')],_0x1b076e;if(_0x2c54b2>=_0x3dc840){_0x2c54b2=_0x3dc840;_0x1b076e=0xc8;}else{_0x1b076e=0xce;}_0x827d30['status'](_0x1b076e);return _0x827d30[_0xd285('0x18')](_0xd285('0x19'),_0x56a4d7+'-'+_0x2c54b2+'/'+_0x3dc840)[_0xd285('0x14')](_0x47f92c);}return null;};}function patchUpdates(_0x3d562b){return function(_0x62fa6b){try{jsonpatch[_0xd285('0x1a')](_0x62fa6b,_0x3d562b,!![]);}catch(_0x57e930){return BPromise[_0xd285('0x1b')](_0x57e930);}return _0x62fa6b[_0xd285('0x1c')]();};}function saveUpdates(_0x479119,_0x13384e){return function(_0x5a7820){if(_0x5a7820){return _0x5a7820[_0xd285('0x1d')](_0x479119)[_0xd285('0x1e')](function(_0xf0029f){return _0xf0029f;});}return null;};}function removeEntity(_0x352336,_0x51572c){return function(_0x379501){if(_0x379501){return _0x379501[_0xd285('0x1f')]()[_0xd285('0x1e')](function(){_0x352336['status'](0xcc)[_0xd285('0x13')]();});}};}function handleEntityNotFound(_0x11cf52,_0x1626e6){return function(_0x3598b5){if(!_0x3598b5){_0x11cf52['sendStatus'](0x194);}return _0x3598b5;};}function handleError(_0x5f0410,_0x27344c){_0x27344c=_0x27344c||0x1f4;return function(_0x46b01d){logger[_0xd285('0x20')](_0x46b01d[_0xd285('0x21')]);if(_0x46b01d[_0xd285('0x22')]){delete _0x46b01d[_0xd285('0x22')];}_0x5f0410[_0xd285('0x12')](_0x27344c)[_0xd285('0x23')](_0x46b01d);};}exports[_0xd285('0x24')]=function(_0x1858f2,_0x2cab13){var _0xdf355b={},_0x188073={},_0x1be450={'count':0x0,'rows':[]};var _0x14be83=db[_0xd285('0x25')][_0xd285('0x26')];_0x188073[_0xd285('0x27')]=_[_0xd285('0x28')](_0x14be83);var _0x5e3874={'dateStart':_0x1858f2[_0xd285('0x29')][_0xd285('0x2a')],'dateEnd':_0x1858f2['query'][_0xd285('0x2b')]};delete _0x1858f2[_0xd285('0x29')][_0xd285('0x2a')];delete _0x1858f2[_0xd285('0x29')][_0xd285('0x2b')];_0x188073[_0xd285('0x29')]=_[_0xd285('0x28')](_0x1858f2[_0xd285('0x29')]);_0x188073['filters']=_[_0xd285('0x2c')](_0x188073[_0xd285('0x27')],_0x188073['query']);_0xdf355b['attributes']=_[_0xd285('0x2c')](_0x188073['model'],qs['fields'](_0x1858f2[_0xd285('0x29')][_0xd285('0x2d')]));_0xdf355b[_0xd285('0x2e')]=_0xdf355b['attributes'][_0xd285('0x2f')]?_0xdf355b['attributes']:_0x188073[_0xd285('0x27')];if(!_0x1858f2['query']['hasOwnProperty'](_0xd285('0x30'))){_0xdf355b['limit']=qs[_0xd285('0x17')](_0x1858f2['query']['limit']);_0xdf355b[_0xd285('0x16')]=qs[_0xd285('0x16')](_0x1858f2['query'][_0xd285('0x16')]);}_0xdf355b['order']=qs['sort'](_0x1858f2[_0xd285('0x29')]['sort']);_0xdf355b[_0xd285('0x31')]=qs['filters'](_[_0xd285('0x32')](_0x1858f2[_0xd285('0x29')],_0x188073[_0xd285('0x33')]));if(_0x5e3874[_0xd285('0x2a')]){if(_0x5e3874[_0xd285('0x2b')]){_0x5e3874[_0xd285('0x2b')]=moment(_0x5e3874[_0xd285('0x2b')])[_0xd285('0x34')](0x1,_0xd285('0x35'));}else{_0x5e3874[_0xd285('0x2b')]=moment(_0x5e3874['dateStart'])['add'](0x1,_0xd285('0x35'));}_[_0xd285('0x36')](_0xdf355b[_0xd285('0x31')],{'createdAt':{'$gte':_0x5e3874[_0xd285('0x2a')],'$lte':_0x5e3874[_0xd285('0x2b')]}});}if(_0x1858f2[_0xd285('0x29')][_0xd285('0x37')]){_0xdf355b[_0xd285('0x31')]=_[_0xd285('0x36')](_0xdf355b['where'],{'$or':_[_0xd285('0x38')](_0xdf355b[_0xd285('0x2e')],function(_0x200de7){var _0x37fd88={};_0x37fd88[_0x200de7]={'$like':'%'+_0x1858f2[_0xd285('0x29')][_0xd285('0x37')]+'%'};return _0x37fd88;})});}_0xdf355b=_[_0xd285('0x36')]({},_0xdf355b,_0x1858f2[_0xd285('0x39')]);var _0x340c0e={'where':_0xdf355b[_0xd285('0x31')]};return db[_0xd285('0x25')][_0xd285('0x15')](_0x340c0e)[_0xd285('0x1e')](function(_0x4e7423){_0x1be450[_0xd285('0x15')]=_0x4e7423;if(_0x1858f2[_0xd285('0x29')][_0xd285('0x3a')]){_0xdf355b[_0xd285('0x3b')]=[{'all':!![]}];}return db[_0xd285('0x25')][_0xd285('0x3c')](_0xdf355b);})[_0xd285('0x1e')](function(_0x42e504){_0x1be450[_0xd285('0x3d')]=_0x42e504;return _0x1be450;})[_0xd285('0x1e')](respondWithFilteredResult(_0x2cab13,_0xdf355b))[_0xd285('0x3e')](handleError(_0x2cab13,null));};exports['show']=function(_0x393a73,_0x1171ce){var _0x13c461={'raw':![],'where':{'id':_0x393a73[_0xd285('0x3f')]['id']}},_0x4a9a67={};_0x4a9a67[_0xd285('0x27')]=_[_0xd285('0x28')](db[_0xd285('0x25')]['rawAttributes']);_0x4a9a67[_0xd285('0x29')]=_[_0xd285('0x28')](_0x393a73[_0xd285('0x29')]);_0x4a9a67[_0xd285('0x33')]=_[_0xd285('0x2c')](_0x4a9a67[_0xd285('0x27')],_0x4a9a67[_0xd285('0x29')]);_0x13c461['attributes']=_[_0xd285('0x2c')](_0x4a9a67['model'],qs[_0xd285('0x2d')](_0x393a73[_0xd285('0x29')][_0xd285('0x2d')]));_0x13c461['attributes']=_0x13c461[_0xd285('0x2e')][_0xd285('0x2f')]?_0x13c461['attributes']:_0x4a9a67[_0xd285('0x27')];if(_0x393a73['query'][_0xd285('0x3a')]){_0x13c461['include']=[{'all':!![]}];}_0x13c461=_['merge']({},_0x13c461,_0x393a73[_0xd285('0x39')]);return db[_0xd285('0x25')][_0xd285('0x40')](_0x13c461)[_0xd285('0x1e')](handleEntityNotFound(_0x1171ce,null))['then'](respondWithResult(_0x1171ce,null))[_0xd285('0x3e')](handleError(_0x1171ce,null));};exports[_0xd285('0x41')]=function(_0x1fbf7f,_0x5cb773){return db[_0xd285('0x25')][_0xd285('0x41')](_0x1fbf7f[_0xd285('0x42')],{})[_0xd285('0x1e')](respondWithResult(_0x5cb773,0xc9))[_0xd285('0x3e')](handleError(_0x5cb773,null));};exports[_0xd285('0x1d')]=function(_0x145b3b,_0x1c9ce){if(_0x145b3b[_0xd285('0x42')]['id']){delete _0x145b3b[_0xd285('0x42')]['id'];}return db[_0xd285('0x25')][_0xd285('0x40')]({'where':{'id':_0x145b3b[_0xd285('0x3f')]['id']}})[_0xd285('0x1e')](handleEntityNotFound(_0x1c9ce,null))[_0xd285('0x1e')](saveUpdates(_0x145b3b[_0xd285('0x42')],null))[_0xd285('0x1e')](respondWithResult(_0x1c9ce,null))[_0xd285('0x3e')](handleError(_0x1c9ce,null));};exports['destroy']=function(_0x4b5b4d,_0x3e6e26){return db[_0xd285('0x25')]['find']({'where':{'id':_0x4b5b4d[_0xd285('0x3f')]['id']}})[_0xd285('0x1e')](handleEntityNotFound(_0x3e6e26,null))[_0xd285('0x1e')](removeEntity(_0x3e6e26,null))[_0xd285('0x3e')](handleError(_0x3e6e26,null));};exports['addAllCondition']=function(_0x3c628f,_0xf7e8c6,_0x52e9d7){if(_0x3c628f[_0xd285('0x42')]['id']){delete _0x3c628f['body']['id'];}return db[_0xd285('0x25')]['find']({'where':{'id':_0x3c628f['params']['id']}})[_0xd285('0x1e')](handleEntityNotFound(_0xf7e8c6,null))[_0xd285('0x1e')](function(_0x4dd800){if(_0x4dd800){_0x3c628f[_0xd285('0x42')][_0xd285('0x43')]=_0x4dd800['id'];return db[_0xd285('0x44')]['create'](_0x3c628f[_0xd285('0x42')]);}})['then'](respondWithResult(_0xf7e8c6,null))[_0xd285('0x3e')](handleError(_0xf7e8c6,null));};exports[_0xd285('0x45')]=function(_0x2c9f05,_0x3ee426,_0x39584f){if(_0x2c9f05['body']['id']){delete _0x2c9f05[_0xd285('0x42')]['id'];}return db[_0xd285('0x25')][_0xd285('0x40')]({'where':{'id':_0x2c9f05[_0xd285('0x3f')]['id']}})[_0xd285('0x1e')](handleEntityNotFound(_0x3ee426,null))[_0xd285('0x1e')](function(_0x4887b7){if(_0x4887b7){_0x2c9f05[_0xd285('0x42')][_0xd285('0x46')]=_0x4887b7['id'];return db['Condition'][_0xd285('0x41')](_0x2c9f05[_0xd285('0x42')]);}})[_0xd285('0x1e')](respondWithResult(_0x3ee426,null))['catch'](handleError(_0x3ee426,null));};exports[_0xd285('0x47')]=function(_0x2cfd12,_0x51feb8,_0x540e6f){var _0x3ec8e5={};var _0x443759={};var _0x4d1be8;var _0x5b1fa2;return db[_0xd285('0x25')][_0xd285('0x48')]({'where':{'id':_0x2cfd12[_0xd285('0x3f')]['id']}})[_0xd285('0x1e')](handleEntityNotFound(_0x51feb8,null))[_0xd285('0x1e')](function(_0x1ff4e4){if(_0x1ff4e4){_0x4d1be8=_0x1ff4e4;_0x443759[_0xd285('0x27')]=_[_0xd285('0x28')](db[_0xd285('0x44')][_0xd285('0x26')]);_0x443759['query']=_['keys'](_0x2cfd12[_0xd285('0x29')]);_0x443759[_0xd285('0x33')]=_[_0xd285('0x2c')](_0x443759[_0xd285('0x27')],_0x443759['query']);_0x3ec8e5[_0xd285('0x2e')]=_['intersection'](_0x443759[_0xd285('0x27')],qs[_0xd285('0x2d')](_0x2cfd12[_0xd285('0x29')][_0xd285('0x2d')]));_0x3ec8e5['attributes']=_0x3ec8e5['attributes'][_0xd285('0x2f')]?_0x3ec8e5[_0xd285('0x2e')]:_0x443759['model'];_0x3ec8e5[_0xd285('0x49')]=qs[_0xd285('0x4a')](_0x2cfd12['query']['sort']);_0x3ec8e5[_0xd285('0x31')]=qs[_0xd285('0x33')](_[_0xd285('0x32')](_0x2cfd12[_0xd285('0x29')],_0x443759['filters']));if(_0x2cfd12['query'][_0xd285('0x37')]){_0x3ec8e5[_0xd285('0x31')]=_[_0xd285('0x36')](_0x3ec8e5[_0xd285('0x31')],{'$or':_['map'](_0x3ec8e5[_0xd285('0x2e')],function(_0x5a528b){var _0x3e3021={};_0x3e3021[_0x5a528b]={'$like':'%'+_0x2cfd12[_0xd285('0x29')][_0xd285('0x37')]+'%'};return _0x3e3021;})});}_0x3ec8e5=_[_0xd285('0x36')]({},_0x3ec8e5,_0x2cfd12[_0xd285('0x39')]);return _0x4d1be8[_0xd285('0x47')](_0x3ec8e5);}})[_0xd285('0x1e')](function(_0x38ebf8){if(_0x38ebf8){_0x5b1fa2=_0x38ebf8[_0xd285('0x2f')];if(!_0x2cfd12[_0xd285('0x29')]['hasOwnProperty'](_0xd285('0x30'))){_0x3ec8e5[_0xd285('0x17')]=qs[_0xd285('0x17')](_0x2cfd12[_0xd285('0x29')][_0xd285('0x17')]);_0x3ec8e5[_0xd285('0x16')]=qs[_0xd285('0x16')](_0x2cfd12[_0xd285('0x29')]['offset']);}return _0x4d1be8['getAllConditions'](_0x3ec8e5);}})[_0xd285('0x1e')](function(_0x4ea01c){if(_0x4ea01c){return _0x4ea01c?{'count':_0x5b1fa2,'rows':_0x4ea01c}:null;}})['then'](respondWithResult(_0x51feb8,null))['catch'](handleError(_0x51feb8,null));};exports['getAnyConditions']=function(_0x5cf583,_0x648a4e,_0x758f2f){var _0x592ca2={};var _0xf5c1a1={};var _0x5242e3;var _0x36f825;return db[_0xd285('0x25')]['findOne']({'where':{'id':_0x5cf583['params']['id']}})['then'](handleEntityNotFound(_0x648a4e,null))[_0xd285('0x1e')](function(_0x18ae5b){if(_0x18ae5b){_0x5242e3=_0x18ae5b;_0xf5c1a1[_0xd285('0x27')]=_[_0xd285('0x28')](db[_0xd285('0x44')][_0xd285('0x26')]);_0xf5c1a1[_0xd285('0x29')]=_[_0xd285('0x28')](_0x5cf583[_0xd285('0x29')]);_0xf5c1a1[_0xd285('0x33')]=_[_0xd285('0x2c')](_0xf5c1a1['model'],_0xf5c1a1[_0xd285('0x29')]);_0x592ca2[_0xd285('0x2e')]=_[_0xd285('0x2c')](_0xf5c1a1[_0xd285('0x27')],qs[_0xd285('0x2d')](_0x5cf583[_0xd285('0x29')]['fields']));_0x592ca2[_0xd285('0x2e')]=_0x592ca2['attributes'][_0xd285('0x2f')]?_0x592ca2[_0xd285('0x2e')]:_0xf5c1a1[_0xd285('0x27')];_0x592ca2[_0xd285('0x49')]=qs[_0xd285('0x4a')](_0x5cf583['query']['sort']);_0x592ca2[_0xd285('0x31')]=qs[_0xd285('0x33')](_[_0xd285('0x32')](_0x5cf583[_0xd285('0x29')],_0xf5c1a1['filters']));if(_0x5cf583[_0xd285('0x29')][_0xd285('0x37')]){_0x592ca2[_0xd285('0x31')]=_[_0xd285('0x36')](_0x592ca2['where'],{'$or':_[_0xd285('0x38')](_0x592ca2[_0xd285('0x2e')],function(_0x31268c){var _0x5775e7={};_0x5775e7[_0x31268c]={'$like':'%'+_0x5cf583[_0xd285('0x29')][_0xd285('0x37')]+'%'};return _0x5775e7;})});}_0x592ca2=_[_0xd285('0x36')]({},_0x592ca2,_0x5cf583['options']);return _0x5242e3[_0xd285('0x4b')](_0x592ca2);}})[_0xd285('0x1e')](function(_0x9ec1d2){if(_0x9ec1d2){_0x36f825=_0x9ec1d2[_0xd285('0x2f')];if(!_0x5cf583[_0xd285('0x29')]['hasOwnProperty']('nolimit')){_0x592ca2[_0xd285('0x17')]=qs[_0xd285('0x17')](_0x5cf583['query'][_0xd285('0x17')]);_0x592ca2[_0xd285('0x16')]=qs['offset'](_0x5cf583['query'][_0xd285('0x16')]);}return _0x5242e3[_0xd285('0x4b')](_0x592ca2);}})['then'](function(_0x43b94e){if(_0x43b94e){return _0x43b94e?{'count':_0x36f825,'rows':_0x43b94e}:null;}})['then'](respondWithResult(_0x648a4e,null))['catch'](handleError(_0x648a4e,null));};exports[_0xd285('0x4c')]=function(_0x2c59f6,_0x4f5c61,_0x3f1df5){if(_0x2c59f6[_0xd285('0x42')]['id']){delete _0x2c59f6[_0xd285('0x42')]['id'];}return db[_0xd285('0x25')][_0xd285('0x40')]({'where':{'id':_0x2c59f6['params']['id']}})[_0xd285('0x1e')](handleEntityNotFound(_0x4f5c61,null))['then'](function(_0x5a2711){if(_0x5a2711){_0x2c59f6[_0xd285('0x42')][_0xd285('0x4d')]=_0x5a2711['id'];return db[_0xd285('0x4e')][_0xd285('0x41')](_0x2c59f6[_0xd285('0x42')]);}})[_0xd285('0x1e')](respondWithResult(_0x4f5c61,null))[_0xd285('0x3e')](handleError(_0x4f5c61,null));};exports[_0xd285('0x4f')]=function(_0x25182b,_0x423d83,_0x106858){var _0x63d842={};var _0x1a21ef={};var _0x5cfda7;var _0x2cfd1f;return db['Trigger'][_0xd285('0x48')]({'where':{'id':_0x25182b['params']['id']}})[_0xd285('0x1e')](handleEntityNotFound(_0x423d83,null))[_0xd285('0x1e')](function(_0x1f2cdf){if(_0x1f2cdf){_0x5cfda7=_0x1f2cdf;_0x1a21ef[_0xd285('0x27')]=_['keys'](db[_0xd285('0x4e')][_0xd285('0x26')]);_0x1a21ef['query']=_[_0xd285('0x28')](_0x25182b['query']);_0x1a21ef[_0xd285('0x33')]=_[_0xd285('0x2c')](_0x1a21ef[_0xd285('0x27')],_0x1a21ef[_0xd285('0x29')]);_0x63d842[_0xd285('0x2e')]=_[_0xd285('0x2c')](_0x1a21ef[_0xd285('0x27')],qs[_0xd285('0x2d')](_0x25182b[_0xd285('0x29')][_0xd285('0x2d')]));_0x63d842[_0xd285('0x2e')]=_0x63d842[_0xd285('0x2e')][_0xd285('0x2f')]?_0x63d842[_0xd285('0x2e')]:_0x1a21ef[_0xd285('0x27')];_0x63d842[_0xd285('0x49')]=qs['sort'](_0x25182b[_0xd285('0x29')]['sort']);_0x63d842[_0xd285('0x31')]=qs[_0xd285('0x33')](_['pick'](_0x25182b[_0xd285('0x29')],_0x1a21ef[_0xd285('0x33')]));if(_0x25182b[_0xd285('0x29')]['filter']){_0x63d842['where']=_[_0xd285('0x36')](_0x63d842['where'],{'$or':_['map'](_0x63d842[_0xd285('0x2e')],function(_0x1c18cb){var _0x5f2fad={};_0x5f2fad[_0x1c18cb]={'$like':'%'+_0x25182b[_0xd285('0x29')][_0xd285('0x37')]+'%'};return _0x5f2fad;})});}_0x63d842=_[_0xd285('0x36')]({},_0x63d842,_0x25182b['options']);return _0x5cfda7[_0xd285('0x4f')](_0x63d842);}})[_0xd285('0x1e')](function(_0x48985a){if(_0x48985a){_0x2cfd1f=_0x48985a[_0xd285('0x2f')];if(!_0x25182b[_0xd285('0x29')][_0xd285('0x50')]('nolimit')){_0x63d842[_0xd285('0x17')]=qs[_0xd285('0x17')](_0x25182b[_0xd285('0x29')][_0xd285('0x17')]);_0x63d842[_0xd285('0x16')]=qs[_0xd285('0x16')](_0x25182b[_0xd285('0x29')]['offset']);}return _0x5cfda7[_0xd285('0x4f')](_0x63d842);}})['then'](function(_0x2de7aa){if(_0x2de7aa){return _0x2de7aa?{'count':_0x2cfd1f,'rows':_0x2de7aa}:null;}})[_0xd285('0x1e')](respondWithResult(_0x423d83,null))[_0xd285('0x3e')](handleError(_0x423d83,null));};
\ No newline at end of file
index ce8007a..f1da2b7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf365=['define','Trigger','tools_triggers','../../config/logger','api','moment','bluebird','request-promise','./trigger.attributes','exports'];(function(_0x41031d,_0x17a3ee){var _0x2606c8=function(_0x24b03a){while(--_0x24b03a){_0x41031d['push'](_0x41031d['shift']());}};_0x2606c8(++_0x17a3ee);}(_0xf365,0x71));var _0x5f36=function(_0x3bf04a,_0x56ed90){_0x3bf04a=_0x3bf04a-0x0;var _0x241e4b=_0xf365[_0x3bf04a];return _0x241e4b;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x5f36('0x0'))(_0x5f36('0x1'));var moment=require(_0x5f36('0x2'));var BPromise=require(_0x5f36('0x3'));var rp=require(_0x5f36('0x4'));var attributes=require(_0x5f36('0x5'));module[_0x5f36('0x6')]=function(_0x1428b1,_0x838c1d){return _0x1428b1[_0x5f36('0x7')](_0x5f36('0x8'),attributes,{'tableName':_0x5f36('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x01df=['tools_triggers','lodash','util','../../config/logger','api','request-promise','exports','define'];(function(_0x4e3925,_0x5e7d7f){var _0x38aad6=function(_0x124b46){while(--_0x124b46){_0x4e3925['push'](_0x4e3925['shift']());}};_0x38aad6(++_0x5e7d7f);}(_0x01df,0x199));var _0xf01d=function(_0x4de370,_0x145fc7){_0x4de370=_0x4de370-0x0;var _0x2f513c=_0x01df[_0x4de370];return _0x2f513c;};'use strict';var _=require(_0xf01d('0x0'));var util=require(_0xf01d('0x1'));var logger=require(_0xf01d('0x2'))(_0xf01d('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xf01d('0x4'));var attributes=require('./trigger.attributes');module[_0xf01d('0x5')]=function(_0x17e922,_0x4db24e){return _0x17e922[_0xf01d('0x6')]('Trigger',attributes,{'tableName':_0xf01d('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2659f38..1f6bd35 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x73fb=['error','code','message','GetTrigger','Trigger','findAll','options','raw','where','attributes','limit','include','map','model','catch','ShowTrigger','lodash','util','moment','bluebird','randomstring','../../config/utils','rpc','../../config/environment','jayson/promise','http','request','then','info','Trigger,\x20%s,\x20%s','request\x20sent','debug','stringify'];(function(_0x347c58,_0x1b6797){var _0x15207c=function(_0x89fb3d){while(--_0x89fb3d){_0x347c58['push'](_0x347c58['shift']());}};_0x15207c(++_0x1b6797);}(_0x73fb,0xb5));var _0xb73f=function(_0x37867f,_0x25343f){_0x37867f=_0x37867f-0x0;var _0x50b467=_0x73fb[_0x37867f];return _0x50b467;};'use strict';var _=require(_0xb73f('0x0'));var util=require(_0xb73f('0x1'));var moment=require(_0xb73f('0x2'));var BPromise=require(_0xb73f('0x3'));var rs=require(_0xb73f('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xb73f('0x5'));var logger=require('../../config/logger')(_0xb73f('0x6'));var config=require(_0xb73f('0x7'));var jayson=require(_0xb73f('0x8'));var client=jayson['client'][_0xb73f('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5e6899,_0x186730,_0x2dcfe2){return new BPromise(function(_0x1ddd78,_0x310e87){return client[_0xb73f('0xa')](_0x5e6899,_0x2dcfe2)[_0xb73f('0xb')](function(_0x468641){logger[_0xb73f('0xc')](_0xb73f('0xd'),_0x186730,_0xb73f('0xe'));logger[_0xb73f('0xf')]('Trigger,\x20%s,\x20%s,\x20%s',_0x186730,'request\x20sent',JSON[_0xb73f('0x10')](_0x468641));if(_0x468641[_0xb73f('0x11')]){if(_0x468641[_0xb73f('0x11')][_0xb73f('0x12')]===0x1f4){logger[_0xb73f('0x11')]('Trigger,\x20%s,\x20%s',_0x186730,_0x468641['error'][_0xb73f('0x13')]);return _0x310e87(_0x468641[_0xb73f('0x11')]['message']);}logger[_0xb73f('0x11')]('Trigger,\x20%s,\x20%s',_0x186730,_0x468641[_0xb73f('0x11')]['message']);return _0x1ddd78(_0x468641[_0xb73f('0x11')][_0xb73f('0x13')]);}else{logger[_0xb73f('0xc')](_0xb73f('0xd'),_0x186730,'request\x20sent');_0x1ddd78(_0x468641['result']['message']);}})['catch'](function(_0x33b9d6){logger[_0xb73f('0x11')](_0xb73f('0xd'),_0x186730,_0x33b9d6);_0x310e87(_0x33b9d6);});});}exports[_0xb73f('0x14')]=function(_0xcbdfe1){var _0x3e3663=this;return new Promise(function(_0x3b739a,_0x2083b7){return db[_0xb73f('0x15')][_0xb73f('0x16')]({'raw':_0xcbdfe1[_0xb73f('0x17')]?_0xcbdfe1[_0xb73f('0x17')][_0xb73f('0x18')]===undefined?!![]:![]:!![],'where':_0xcbdfe1['options']?_0xcbdfe1[_0xb73f('0x17')][_0xb73f('0x19')]||null:null,'attributes':_0xcbdfe1[_0xb73f('0x17')]?_0xcbdfe1[_0xb73f('0x17')][_0xb73f('0x1a')]||null:null,'limit':_0xcbdfe1[_0xb73f('0x17')]?_0xcbdfe1[_0xb73f('0x17')][_0xb73f('0x1b')]||null:null,'include':_0xcbdfe1[_0xb73f('0x17')]?_0xcbdfe1['options'][_0xb73f('0x1c')]?_[_0xb73f('0x1d')](_0xcbdfe1[_0xb73f('0x17')][_0xb73f('0x1c')],function(_0x312d9e){return{'model':db[_0x312d9e['model']],'as':_0x312d9e['as'],'attributes':_0x312d9e[_0xb73f('0x1a')],'include':_0x312d9e[_0xb73f('0x1c')]?_[_0xb73f('0x1d')](_0x312d9e[_0xb73f('0x1c')],function(_0x1a9ea8){return{'model':db[_0x1a9ea8[_0xb73f('0x1e')]],'as':_0x1a9ea8['as'],'attributes':_0x1a9ea8['attributes'],'include':_0x1a9ea8[_0xb73f('0x1c')]?_[_0xb73f('0x1d')](_0x1a9ea8[_0xb73f('0x1c')],function(_0x41d3c2){return{'model':db[_0x41d3c2[_0xb73f('0x1e')]],'as':_0x41d3c2['as'],'attributes':_0x41d3c2[_0xb73f('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xb73f('0xb')](function(_0x54e004){logger['info'](_0xb73f('0x14'),_0xcbdfe1);logger['debug'](_0xb73f('0x14'),_0xcbdfe1,JSON[_0xb73f('0x10')](_0x54e004));_0x3b739a(_0x54e004);})[_0xb73f('0x1f')](function(_0x594d5a){logger['error'](_0xb73f('0x14'),_0x594d5a[_0xb73f('0x13')],_0xcbdfe1);_0x2083b7(_0x3e3663[_0xb73f('0x11')](0x1f4,_0x594d5a[_0xb73f('0x13')]));});});};exports['ShowTrigger']=function(_0x24bdeb){var _0x56fe23=this;return new Promise(function(_0x53cb87,_0x417850){return db[_0xb73f('0x15')]['find']({'raw':_0x24bdeb[_0xb73f('0x17')]?_0x24bdeb['options'][_0xb73f('0x18')]===undefined?!![]:![]:!![],'where':_0x24bdeb['options']?_0x24bdeb[_0xb73f('0x17')][_0xb73f('0x19')]||null:null,'attributes':_0x24bdeb['options']?_0x24bdeb[_0xb73f('0x17')][_0xb73f('0x1a')]||null:null,'include':_0x24bdeb[_0xb73f('0x17')]?_0x24bdeb[_0xb73f('0x17')][_0xb73f('0x1c')]?_[_0xb73f('0x1d')](_0x24bdeb[_0xb73f('0x17')]['include'],function(_0x18c487){return{'model':db[_0x18c487[_0xb73f('0x1e')]],'as':_0x18c487['as'],'attributes':_0x18c487[_0xb73f('0x1a')],'include':_0x18c487[_0xb73f('0x1c')]?_[_0xb73f('0x1d')](_0x18c487[_0xb73f('0x1c')],function(_0x5b6903){return{'model':db[_0x5b6903[_0xb73f('0x1e')]],'as':_0x5b6903['as'],'attributes':_0x5b6903[_0xb73f('0x1a')],'include':_0x5b6903[_0xb73f('0x1c')]?_[_0xb73f('0x1d')](_0x5b6903['include'],function(_0x594d32){return{'model':db[_0x594d32['model']],'as':_0x594d32['as'],'attributes':_0x594d32['attributes']};}):[]};}):[]};}):[]:[]})[_0xb73f('0xb')](function(_0x140932){logger[_0xb73f('0xc')](_0xb73f('0x20'),_0x24bdeb);logger['debug']('ShowTrigger',_0x24bdeb,JSON['stringify'](_0x140932));_0x53cb87(_0x140932);})[_0xb73f('0x1f')](function(_0x2fabe5){logger[_0xb73f('0x11')](_0xb73f('0x20'),_0x2fabe5['message'],_0x24bdeb);_0x417850(_0x56fe23['error'](0x1f4,_0x2fabe5[_0xb73f('0x13')]));});});};
\ No newline at end of file
+var _0x0d3f=['moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','Trigger,\x20%s,\x20%s','request\x20sent','debug','Trigger,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetTrigger','Trigger','findAll','options','raw','limit','include','model','attributes','map','ShowTrigger','find','where','lodash','util'];(function(_0x566cb7,_0x1f8ed6){var _0x9961ac=function(_0x421b75){while(--_0x421b75){_0x566cb7['push'](_0x566cb7['shift']());}};_0x9961ac(++_0x1f8ed6);}(_0x0d3f,0x70));var _0xf0d3=function(_0x404957,_0x5192a4){_0x404957=_0x404957-0x0;var _0x4e0365=_0x0d3f[_0x404957];return _0x4e0365;};'use strict';var _=require(_0xf0d3('0x0'));var util=require(_0xf0d3('0x1'));var moment=require(_0xf0d3('0x2'));var BPromise=require(_0xf0d3('0x3'));var rs=require(_0xf0d3('0x4'));var fs=require('fs');var db=require(_0xf0d3('0x5'))['db'];var utils=require(_0xf0d3('0x6'));var logger=require(_0xf0d3('0x7'))(_0xf0d3('0x8'));var config=require(_0xf0d3('0x9'));var jayson=require(_0xf0d3('0xa'));var client=jayson['client'][_0xf0d3('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x3f364e,_0x530189,_0x516aaf){return new BPromise(function(_0x5a52e1,_0x2531a2){return client[_0xf0d3('0xc')](_0x3f364e,_0x516aaf)[_0xf0d3('0xd')](function(_0x14494f){logger[_0xf0d3('0xe')](_0xf0d3('0xf'),_0x530189,_0xf0d3('0x10'));logger[_0xf0d3('0x11')](_0xf0d3('0x12'),_0x530189,'request\x20sent',JSON[_0xf0d3('0x13')](_0x14494f));if(_0x14494f[_0xf0d3('0x14')]){if(_0x14494f[_0xf0d3('0x14')][_0xf0d3('0x15')]===0x1f4){logger[_0xf0d3('0x14')](_0xf0d3('0xf'),_0x530189,_0x14494f[_0xf0d3('0x14')]['message']);return _0x2531a2(_0x14494f[_0xf0d3('0x14')][_0xf0d3('0x16')]);}logger[_0xf0d3('0x14')]('Trigger,\x20%s,\x20%s',_0x530189,_0x14494f[_0xf0d3('0x14')][_0xf0d3('0x16')]);return _0x5a52e1(_0x14494f[_0xf0d3('0x14')]['message']);}else{logger[_0xf0d3('0xe')](_0xf0d3('0xf'),_0x530189,_0xf0d3('0x10'));_0x5a52e1(_0x14494f[_0xf0d3('0x17')][_0xf0d3('0x16')]);}})[_0xf0d3('0x18')](function(_0x40827f){logger['error'](_0xf0d3('0xf'),_0x530189,_0x40827f);_0x2531a2(_0x40827f);});});}exports[_0xf0d3('0x19')]=function(_0x38cfdc){var _0x120907=this;return new Promise(function(_0x4fb209,_0x5d8704){return db[_0xf0d3('0x1a')][_0xf0d3('0x1b')]({'raw':_0x38cfdc['options']?_0x38cfdc[_0xf0d3('0x1c')][_0xf0d3('0x1d')]===undefined?!![]:![]:!![],'where':_0x38cfdc[_0xf0d3('0x1c')]?_0x38cfdc[_0xf0d3('0x1c')]['where']||null:null,'attributes':_0x38cfdc[_0xf0d3('0x1c')]?_0x38cfdc[_0xf0d3('0x1c')]['attributes']||null:null,'limit':_0x38cfdc[_0xf0d3('0x1c')]?_0x38cfdc['options'][_0xf0d3('0x1e')]||null:null,'include':_0x38cfdc[_0xf0d3('0x1c')]?_0x38cfdc[_0xf0d3('0x1c')]['include']?_['map'](_0x38cfdc[_0xf0d3('0x1c')][_0xf0d3('0x1f')],function(_0x411f3e){return{'model':db[_0x411f3e[_0xf0d3('0x20')]],'as':_0x411f3e['as'],'attributes':_0x411f3e[_0xf0d3('0x21')],'include':_0x411f3e[_0xf0d3('0x1f')]?_[_0xf0d3('0x22')](_0x411f3e[_0xf0d3('0x1f')],function(_0x379929){return{'model':db[_0x379929[_0xf0d3('0x20')]],'as':_0x379929['as'],'attributes':_0x379929[_0xf0d3('0x21')],'include':_0x379929[_0xf0d3('0x1f')]?_[_0xf0d3('0x22')](_0x379929[_0xf0d3('0x1f')],function(_0x121da5){return{'model':db[_0x121da5['model']],'as':_0x121da5['as'],'attributes':_0x121da5[_0xf0d3('0x21')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x576c83){logger[_0xf0d3('0xe')](_0xf0d3('0x19'),_0x38cfdc);logger[_0xf0d3('0x11')](_0xf0d3('0x19'),_0x38cfdc,JSON[_0xf0d3('0x13')](_0x576c83));_0x4fb209(_0x576c83);})['catch'](function(_0x5f142e){logger[_0xf0d3('0x14')](_0xf0d3('0x19'),_0x5f142e['message'],_0x38cfdc);_0x5d8704(_0x120907[_0xf0d3('0x14')](0x1f4,_0x5f142e[_0xf0d3('0x16')]));});});};exports[_0xf0d3('0x23')]=function(_0x49a937){var _0xf870dd=this;return new Promise(function(_0x2e2bb6,_0x5a9fd3){return db['Trigger'][_0xf0d3('0x24')]({'raw':_0x49a937['options']?_0x49a937['options'][_0xf0d3('0x1d')]===undefined?!![]:![]:!![],'where':_0x49a937[_0xf0d3('0x1c')]?_0x49a937['options'][_0xf0d3('0x25')]||null:null,'attributes':_0x49a937[_0xf0d3('0x1c')]?_0x49a937[_0xf0d3('0x1c')][_0xf0d3('0x21')]||null:null,'include':_0x49a937['options']?_0x49a937[_0xf0d3('0x1c')][_0xf0d3('0x1f')]?_[_0xf0d3('0x22')](_0x49a937[_0xf0d3('0x1c')][_0xf0d3('0x1f')],function(_0xbc608e){return{'model':db[_0xbc608e['model']],'as':_0xbc608e['as'],'attributes':_0xbc608e[_0xf0d3('0x21')],'include':_0xbc608e['include']?_[_0xf0d3('0x22')](_0xbc608e[_0xf0d3('0x1f')],function(_0x34cf87){return{'model':db[_0x34cf87['model']],'as':_0x34cf87['as'],'attributes':_0x34cf87[_0xf0d3('0x21')],'include':_0x34cf87[_0xf0d3('0x1f')]?_[_0xf0d3('0x22')](_0x34cf87['include'],function(_0x5dceb0){return{'model':db[_0x5dceb0[_0xf0d3('0x20')]],'as':_0x5dceb0['as'],'attributes':_0x5dceb0[_0xf0d3('0x21')]};}):[]};}):[]};}):[]:[]})[_0xf0d3('0xd')](function(_0x532ccc){logger[_0xf0d3('0xe')](_0xf0d3('0x23'),_0x49a937);logger[_0xf0d3('0x11')](_0xf0d3('0x23'),_0x49a937,JSON[_0xf0d3('0x13')](_0x532ccc));_0x2e2bb6(_0x532ccc);})[_0xf0d3('0x18')](function(_0x1f587c){logger[_0xf0d3('0x14')]('ShowTrigger',_0x1f587c[_0xf0d3('0x16')],_0x49a937);_0x5a9fd3(_0xf870dd['error'](0x1f4,_0x1f587c['message']));});});};
\ No newline at end of file
index 54b3bb9..6027ed4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x188d=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./trunk.controller','get','isAuthenticated','/:id','show','/:id/clone','post','update','delete','destroy','path'];(function(_0x316951,_0x4e1914){var _0x3f4d88=function(_0x5cabdf){while(--_0x5cabdf){_0x316951['push'](_0x316951['shift']());}};_0x3f4d88(++_0x4e1914);}(_0x188d,0x8f));var _0xd188=function(_0x119b96,_0x587acd){_0x119b96=_0x119b96-0x0;var _0x516cbf=_0x188d[_0x119b96];return _0x516cbf;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xd188('0x0'));var express=require(_0xd188('0x1'));var router=express[_0xd188('0x2')]();var auth=require(_0xd188('0x3'));var interaction=require(_0xd188('0x4'));var config=require(_0xd188('0x5'));var controller=require(_0xd188('0x6'));router[_0xd188('0x7')]('/',auth[_0xd188('0x8')](),controller['index']);router[_0xd188('0x7')](_0xd188('0x9'),auth['isAuthenticated'](),controller[_0xd188('0xa')]);router['post'](_0xd188('0xb'),auth[_0xd188('0x8')](),controller['clone']);router[_0xd188('0xc')]('/',auth[_0xd188('0x8')](),controller['create']);router['put'](_0xd188('0x9'),auth[_0xd188('0x8')](),controller[_0xd188('0xd')]);router[_0xd188('0xe')](_0xd188('0x9'),auth[_0xd188('0x8')](),controller[_0xd188('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0xa34d=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./trunk.controller','get','isAuthenticated','index','/:id','post','/:id/clone','clone','create','put','update','delete','destroy','exports','path','express'];(function(_0x297fd3,_0x115406){var _0x2af381=function(_0x1dd31b){while(--_0x1dd31b){_0x297fd3['push'](_0x297fd3['shift']());}};_0x2af381(++_0x115406);}(_0xa34d,0x9e));var _0xda34=function(_0x21b41d,_0x2dd57a){_0x21b41d=_0x21b41d-0x0;var _0x3485c7=_0xa34d[_0x21b41d];return _0x3485c7;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xda34('0x0'));var express=require(_0xda34('0x1'));var router=express[_0xda34('0x2')]();var auth=require(_0xda34('0x3'));var interaction=require(_0xda34('0x4'));var config=require(_0xda34('0x5'));var controller=require(_0xda34('0x6'));router[_0xda34('0x7')]('/',auth[_0xda34('0x8')](),controller[_0xda34('0x9')]);router[_0xda34('0x7')](_0xda34('0xa'),auth['isAuthenticated'](),controller['show']);router[_0xda34('0xb')](_0xda34('0xc'),auth['isAuthenticated'](),controller[_0xda34('0xd')]);router[_0xda34('0xb')]('/',auth['isAuthenticated'](),controller[_0xda34('0xe')]);router[_0xda34('0xf')](_0xda34('0xa'),auth[_0xda34('0x8')](),controller[_0xda34('0x10')]);router[_0xda34('0x11')](_0xda34('0xa'),auth[_0xda34('0x8')](),controller[_0xda34('0x12')]);module[_0xda34('0x13')]=router;
\ No newline at end of file
index f4a35a1..f7208f0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7e7=['always','accept','refuse','originate','uac','uas','fingerprint','active','passive','dynamic','update','update,nonat','BOOLEAN','sequelize','STRING','ENUM','user','friend','from-voip-provider','ALLOWED_PASSED_SCREEN','ALLOWED_FAILED_SCREEN','ALLOWED','PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN','PROHIB','udp','setDataValue','transport','join','getDataValue','split','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]','rfc2833','inband','auto','yes','outgoing','force_rport,comedia','nat','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]','all','ulaw;alaw;gsm','allow','port,invite','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]','INTEGER'];(function(_0x522453,_0x3f05a3){var _0x1f9be5=function(_0x4ccfb0){while(--_0x4ccfb0){_0x522453['push'](_0x522453['shift']());}};_0x1f9be5(++_0x3f05a3);}(_0xb7e7,0x121));var _0x7b7e=function(_0x36eaaa,_0x326732){_0x36eaaa=_0x36eaaa-0x0;var _0x461349=_0xb7e7[_0x36eaaa];return _0x461349;};'use strict';var Sequelize=require(_0x7b7e('0x0'));module['exports']={'name':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':![],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize[_0x7b7e('0x2')]('friend',_0x7b7e('0x3'),'peer'),'allowNull':![],'defaultValue':_0x7b7e('0x4')},'context':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':![],'defaultValue':_0x7b7e('0x5')},'callingpres':{'type':Sequelize['ENUM']('ALLOWED_NOT_SCREENED',_0x7b7e('0x6'),_0x7b7e('0x7'),_0x7b7e('0x8'),'PROHIB_NOT_SCREENED',_0x7b7e('0x9'),_0x7b7e('0xa'),_0x7b7e('0xb'))},'deny':{'type':Sequelize[_0x7b7e('0x1')]},'permit':{'type':Sequelize[_0x7b7e('0x1')]},'secret':{'type':Sequelize[_0x7b7e('0x1')]},'md5secret':{'type':Sequelize[_0x7b7e('0x1')]},'remotesecret':{'type':Sequelize['STRING']},'transport':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0xc'),'set':function(_0x10a666){this[_0x7b7e('0xd')](_0x7b7e('0xe'),_0x10a666?_0x10a666[_0x7b7e('0xf')](','):null);},'get':function(){return this[_0x7b7e('0x10')](_0x7b7e('0xe'))?this[_0x7b7e('0x10')]('transport')[_0x7b7e('0x11')](','):null;},'comment':_0x7b7e('0x12')},'dtmfmode':{'type':Sequelize['ENUM'](_0x7b7e('0x13'),'info','shortinfo',_0x7b7e('0x14'),_0x7b7e('0x15')),'defaultValue':_0x7b7e('0x13')},'directmedia':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no','nonat','update',_0x7b7e('0x17')),'defaultValue':'no'},'directrtpsetup':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0x7b7e('0x1')]},'directmediadeny':{'type':Sequelize[_0x7b7e('0x1')]},'nat':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0x18'),'set':function(_0x200ef7){this[_0x7b7e('0xd')](_0x7b7e('0x19'),_0x200ef7?_0x200ef7[_0x7b7e('0xf')](','):null);},'get':function(){return this[_0x7b7e('0x10')](_0x7b7e('0x19'))?this[_0x7b7e('0x10')](_0x7b7e('0x19'))[_0x7b7e('0x11')](','):null;},'comment':_0x7b7e('0x1a')},'callgroup':{'type':Sequelize['STRING']},'namedcallgroup':{'type':Sequelize[_0x7b7e('0x1')]},'pickupgroup':{'type':Sequelize[_0x7b7e('0x1')]},'namedpickupgroup':{'type':Sequelize[_0x7b7e('0x1')]},'language':{'type':Sequelize['STRING'],'defaultValue':'en'},'tonezone':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':!![]},'disallow':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0x1b')},'allow':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':![],'defaultValue':_0x7b7e('0x1c'),'set':function(_0x303d8c){this[_0x7b7e('0xd')](_0x7b7e('0x1d'),_0x303d8c?_0x303d8c['join'](';'):'ulaw;alaw;gsm');},'get':function(){return this['getDataValue'](_0x7b7e('0x1d'))?this[_0x7b7e('0x10')](_0x7b7e('0x1d'))['split'](';'):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22alaw\x22]'},'autoframing':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no')},'insecure':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0x1e'),'set':function(_0x7aa71){this[_0x7b7e('0xd')]('insecure',_0x7aa71?_0x7aa71[_0x7b7e('0xf')](','):null);},'get':function(){return this[_0x7b7e('0x10')]('insecure')?this['getDataValue']('insecure')[_0x7b7e('0x11')](','):null;},'comment':_0x7b7e('0x1f')},'trustrpid':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'progressinband':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no','never')},'promiscredir':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'useclientcode':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'accountcode':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'setvar':{'type':Sequelize['STRING']},'callerid':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':'\x22\x22\x20<>'},'amaflags':{'type':Sequelize[_0x7b7e('0x1')]},'callcounter':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':_0x7b7e('0x16')},'busylevel':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'allowoverlap':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'allowsubscribe':{'type':Sequelize['ENUM']('yes','no')},'allowtransfer':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'ignoresdpversion':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no')},'subscribecontext':{'type':Sequelize[_0x7b7e('0x1')]},'template':{'type':Sequelize[_0x7b7e('0x1')]},'videosupport':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no',_0x7b7e('0x21')),'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'rfc2833compensate':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'mailbox':{'type':Sequelize[_0x7b7e('0x1')]},'session_timers':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x22'),_0x7b7e('0x23'),_0x7b7e('0x24'))},'session_expires':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'session_minse':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'session_refresher':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x25'),_0x7b7e('0x26')),'defaultValue':_0x7b7e('0x26')},'t38pt_usertpsource':{'type':Sequelize['STRING']},'regexten':{'type':Sequelize[_0x7b7e('0x1')]},'fromdomain':{'type':Sequelize[_0x7b7e('0x1')]},'fromuser':{'type':Sequelize[_0x7b7e('0x1')]},'port':{'type':Sequelize[_0x7b7e('0x20')](0x5)},'qualify':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':_0x7b7e('0x16')},'keepalive':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'defaultip':{'type':Sequelize[_0x7b7e('0x1')]},'defaultuser':{'type':Sequelize[_0x7b7e('0x1')]},'rtptimeout':{'type':Sequelize['INTEGER'](0xb)},'rtpholdtimeout':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'rtpkeepalive':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'sendrpid':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no','pai'),'defaultValue':'no'},'outboundproxy':{'type':Sequelize[_0x7b7e('0x1')]},'callbackextension':{'type':Sequelize[_0x7b7e('0x1')]},'timert1':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'timerb':{'type':Sequelize['INTEGER'](0xb)},'qualifyfreq':{'type':Sequelize['INTEGER'](0xb)},'contactpermit':{'type':Sequelize[_0x7b7e('0x1')]},'contactdeny':{'type':Sequelize['STRING']},'contactacl':{'type':Sequelize[_0x7b7e('0x1')]},'unsolicited_mailbox':{'type':Sequelize[_0x7b7e('0x1')]},'use_q850_reason':{'type':Sequelize['STRING']},'maxforwards':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'encryption':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'avpf':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'force_avp':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'icesupport':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'dtlsenable':{'type':Sequelize['ENUM']('yes','no')},'dtlsverify':{'type':Sequelize[_0x7b7e('0x2')]('yes','no',_0x7b7e('0x27'),'certificate')},'dtlsrekey':{'type':Sequelize['INTEGER'](0xb)},'dtlscertfile':{'type':Sequelize[_0x7b7e('0x1')]},'dtlsprivatekey':{'type':Sequelize['STRING']},'dtlscipher':{'type':Sequelize[_0x7b7e('0x1')]},'dtlscafile':{'type':Sequelize['STRING']},'dtlscapath':{'type':Sequelize[_0x7b7e('0x1')]},'dtlssetup':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x28'),_0x7b7e('0x29'),'actpass'),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0x7b7e('0x1')]},'usereqphone':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0x7b7e('0x1')]},'recordofffeature':{'type':Sequelize[_0x7b7e('0x1')]},'call_limit':{'type':Sequelize[_0x7b7e('0x20')](0xb),'defaultValue':0x3e8},'registertrying':{'type':Sequelize['ENUM']('yes','no')},'subscribemwi':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no')},'vmexten':{'type':Sequelize[_0x7b7e('0x1')]},'mohinterpret':{'type':Sequelize[_0x7b7e('0x1')]},'mohsuggest':{'type':Sequelize[_0x7b7e('0x1')]},'parkinglot':{'type':Sequelize[_0x7b7e('0x1')]},'description':{'type':Sequelize[_0x7b7e('0x1')]},'host':{'type':Sequelize['STRING'],'defaultValue':_0x7b7e('0x2a')},'canreinvite':{'type':Sequelize[_0x7b7e('0x2')]('yes','no','nonat',_0x7b7e('0x2b'),_0x7b7e('0x2c')),'defaultValue':'no'},'registry':{'type':Sequelize[_0x7b7e('0x1')]},'otherFields':{'type':Sequelize[_0x7b7e('0x1')]},'active':{'type':Sequelize[_0x7b7e('0x2d')],'allowNull':![],'defaultValue':!![]},'t38pt_udptl':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':'no'}};
\ No newline at end of file
+var _0xb7e7=['always','accept','refuse','originate','uac','uas','fingerprint','active','passive','dynamic','update','update,nonat','BOOLEAN','sequelize','STRING','ENUM','user','friend','from-voip-provider','ALLOWED_PASSED_SCREEN','ALLOWED_FAILED_SCREEN','ALLOWED','PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN','PROHIB','udp','setDataValue','transport','join','getDataValue','split','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]','rfc2833','inband','auto','yes','outgoing','force_rport,comedia','nat','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]','all','ulaw;alaw;gsm','allow','port,invite','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]','INTEGER'];(function(_0x1876c7,_0x379202){var _0x2b9572=function(_0x9bf2ff){while(--_0x9bf2ff){_0x1876c7['push'](_0x1876c7['shift']());}};_0x2b9572(++_0x379202);}(_0xb7e7,0x121));var _0x7b7e=function(_0x5c9307,_0x5b97e4){_0x5c9307=_0x5c9307-0x0;var _0x373e29=_0xb7e7[_0x5c9307];return _0x373e29;};'use strict';var Sequelize=require(_0x7b7e('0x0'));module['exports']={'name':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':![],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize[_0x7b7e('0x2')]('friend',_0x7b7e('0x3'),'peer'),'allowNull':![],'defaultValue':_0x7b7e('0x4')},'context':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':![],'defaultValue':_0x7b7e('0x5')},'callingpres':{'type':Sequelize['ENUM']('ALLOWED_NOT_SCREENED',_0x7b7e('0x6'),_0x7b7e('0x7'),_0x7b7e('0x8'),'PROHIB_NOT_SCREENED',_0x7b7e('0x9'),_0x7b7e('0xa'),_0x7b7e('0xb'))},'deny':{'type':Sequelize[_0x7b7e('0x1')]},'permit':{'type':Sequelize[_0x7b7e('0x1')]},'secret':{'type':Sequelize[_0x7b7e('0x1')]},'md5secret':{'type':Sequelize[_0x7b7e('0x1')]},'remotesecret':{'type':Sequelize['STRING']},'transport':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0xc'),'set':function(_0x10a666){this[_0x7b7e('0xd')](_0x7b7e('0xe'),_0x10a666?_0x10a666[_0x7b7e('0xf')](','):null);},'get':function(){return this[_0x7b7e('0x10')](_0x7b7e('0xe'))?this[_0x7b7e('0x10')]('transport')[_0x7b7e('0x11')](','):null;},'comment':_0x7b7e('0x12')},'dtmfmode':{'type':Sequelize['ENUM'](_0x7b7e('0x13'),'info','shortinfo',_0x7b7e('0x14'),_0x7b7e('0x15')),'defaultValue':_0x7b7e('0x13')},'directmedia':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no','nonat','update',_0x7b7e('0x17')),'defaultValue':'no'},'directrtpsetup':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0x7b7e('0x1')]},'directmediadeny':{'type':Sequelize[_0x7b7e('0x1')]},'nat':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0x18'),'set':function(_0x200ef7){this[_0x7b7e('0xd')](_0x7b7e('0x19'),_0x200ef7?_0x200ef7[_0x7b7e('0xf')](','):null);},'get':function(){return this[_0x7b7e('0x10')](_0x7b7e('0x19'))?this[_0x7b7e('0x10')](_0x7b7e('0x19'))[_0x7b7e('0x11')](','):null;},'comment':_0x7b7e('0x1a')},'callgroup':{'type':Sequelize['STRING']},'namedcallgroup':{'type':Sequelize[_0x7b7e('0x1')]},'pickupgroup':{'type':Sequelize[_0x7b7e('0x1')]},'namedpickupgroup':{'type':Sequelize[_0x7b7e('0x1')]},'language':{'type':Sequelize['STRING'],'defaultValue':'en'},'tonezone':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':!![]},'disallow':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0x1b')},'allow':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':![],'defaultValue':_0x7b7e('0x1c'),'set':function(_0x303d8c){this[_0x7b7e('0xd')](_0x7b7e('0x1d'),_0x303d8c?_0x303d8c['join'](';'):'ulaw;alaw;gsm');},'get':function(){return this['getDataValue'](_0x7b7e('0x1d'))?this[_0x7b7e('0x10')](_0x7b7e('0x1d'))['split'](';'):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22alaw\x22]'},'autoframing':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no')},'insecure':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0x1e'),'set':function(_0x7aa71){this[_0x7b7e('0xd')]('insecure',_0x7aa71?_0x7aa71[_0x7b7e('0xf')](','):null);},'get':function(){return this[_0x7b7e('0x10')]('insecure')?this['getDataValue']('insecure')[_0x7b7e('0x11')](','):null;},'comment':_0x7b7e('0x1f')},'trustrpid':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'progressinband':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no','never')},'promiscredir':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'useclientcode':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'accountcode':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'setvar':{'type':Sequelize['STRING']},'callerid':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':'\x22\x22\x20<>'},'amaflags':{'type':Sequelize[_0x7b7e('0x1')]},'callcounter':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':_0x7b7e('0x16')},'busylevel':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'allowoverlap':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'allowsubscribe':{'type':Sequelize['ENUM']('yes','no')},'allowtransfer':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'ignoresdpversion':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no')},'subscribecontext':{'type':Sequelize[_0x7b7e('0x1')]},'template':{'type':Sequelize[_0x7b7e('0x1')]},'videosupport':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no',_0x7b7e('0x21')),'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'rfc2833compensate':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'mailbox':{'type':Sequelize[_0x7b7e('0x1')]},'session_timers':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x22'),_0x7b7e('0x23'),_0x7b7e('0x24'))},'session_expires':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'session_minse':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'session_refresher':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x25'),_0x7b7e('0x26')),'defaultValue':_0x7b7e('0x26')},'t38pt_usertpsource':{'type':Sequelize['STRING']},'regexten':{'type':Sequelize[_0x7b7e('0x1')]},'fromdomain':{'type':Sequelize[_0x7b7e('0x1')]},'fromuser':{'type':Sequelize[_0x7b7e('0x1')]},'port':{'type':Sequelize[_0x7b7e('0x20')](0x5)},'qualify':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':_0x7b7e('0x16')},'keepalive':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'defaultip':{'type':Sequelize[_0x7b7e('0x1')]},'defaultuser':{'type':Sequelize[_0x7b7e('0x1')]},'rtptimeout':{'type':Sequelize['INTEGER'](0xb)},'rtpholdtimeout':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'rtpkeepalive':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'sendrpid':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no','pai'),'defaultValue':'no'},'outboundproxy':{'type':Sequelize[_0x7b7e('0x1')]},'callbackextension':{'type':Sequelize[_0x7b7e('0x1')]},'timert1':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'timerb':{'type':Sequelize['INTEGER'](0xb)},'qualifyfreq':{'type':Sequelize['INTEGER'](0xb)},'contactpermit':{'type':Sequelize[_0x7b7e('0x1')]},'contactdeny':{'type':Sequelize['STRING']},'contactacl':{'type':Sequelize[_0x7b7e('0x1')]},'unsolicited_mailbox':{'type':Sequelize[_0x7b7e('0x1')]},'use_q850_reason':{'type':Sequelize['STRING']},'maxforwards':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'encryption':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'avpf':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'force_avp':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'icesupport':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'dtlsenable':{'type':Sequelize['ENUM']('yes','no')},'dtlsverify':{'type':Sequelize[_0x7b7e('0x2')]('yes','no',_0x7b7e('0x27'),'certificate')},'dtlsrekey':{'type':Sequelize['INTEGER'](0xb)},'dtlscertfile':{'type':Sequelize[_0x7b7e('0x1')]},'dtlsprivatekey':{'type':Sequelize['STRING']},'dtlscipher':{'type':Sequelize[_0x7b7e('0x1')]},'dtlscafile':{'type':Sequelize['STRING']},'dtlscapath':{'type':Sequelize[_0x7b7e('0x1')]},'dtlssetup':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x28'),_0x7b7e('0x29'),'actpass'),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0x7b7e('0x1')]},'usereqphone':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0x7b7e('0x1')]},'recordofffeature':{'type':Sequelize[_0x7b7e('0x1')]},'call_limit':{'type':Sequelize[_0x7b7e('0x20')](0xb),'defaultValue':0x3e8},'registertrying':{'type':Sequelize['ENUM']('yes','no')},'subscribemwi':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no')},'vmexten':{'type':Sequelize[_0x7b7e('0x1')]},'mohinterpret':{'type':Sequelize[_0x7b7e('0x1')]},'mohsuggest':{'type':Sequelize[_0x7b7e('0x1')]},'parkinglot':{'type':Sequelize[_0x7b7e('0x1')]},'description':{'type':Sequelize[_0x7b7e('0x1')]},'host':{'type':Sequelize['STRING'],'defaultValue':_0x7b7e('0x2a')},'canreinvite':{'type':Sequelize[_0x7b7e('0x2')]('yes','no','nonat',_0x7b7e('0x2b'),_0x7b7e('0x2c')),'defaultValue':'no'},'registry':{'type':Sequelize[_0x7b7e('0x1')]},'otherFields':{'type':Sequelize[_0x7b7e('0x1')]},'active':{'type':Sequelize[_0x7b7e('0x2d')],'allowNull':![],'defaultValue':!![]},'t38pt_udptl':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':'no'}};
\ No newline at end of file
index f4c6509..1f40cad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x12bf=['update','destroy','end','stack','name','send','index','Trunk','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','length','nolimit','order','sort','where','filters','pick','day','filter','merge','options','includeAll','include','rows','show','params','find','clone','get','body','createdAt','updatedAt','create','findAll','readFileSync','join','root','server/files/templates/trunk.ejs','server/files/templates/registry.ejs','utf8','writeFileSync','/etc/asterisk/sip_xcally_trunks.conf','render','/etc/asterisk/sip_xcally_registers.conf','Reload','chan_sip.so','fast-json-patch','request-promise','moment','mustache','to-csv','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','Trunk,\x20%s,\x20%s','request\x20sent','debug','Trunk,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','json','count','offset','limit','set','Content-Range','apply'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x12bf,0xed));var _0xf12b=function(_0x278624,_0x5bb7ee){_0x278624=_0x278624-0x0;var _0x3e5011=_0x12bf[_0x278624];return _0x3e5011;};'use strict';var jsonpatch=require(_0xf12b('0x0'));var rp=require(_0xf12b('0x1'));var moment=require(_0xf12b('0x2'));var BPromise=require('bluebird');var Mustache=require(_0xf12b('0x3'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0xf12b('0x4'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xf12b('0x5'));var squel=require(_0xf12b('0x6'));var crypto=require(_0xf12b('0x7'));var jsforce=require(_0xf12b('0x8'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xf12b('0x9'));var Papa=require(_0xf12b('0xa'));var qs=require(_0xf12b('0xb'));var logger=require(_0xf12b('0xc'))('api');var utils=require('../../config/utils');var config=require(_0xf12b('0xd'));var db=require('../../mysqldb')['db'];var jayson=require(_0xf12b('0xe'));var client=jayson[_0xf12b('0xf')][_0xf12b('0x10')]({'port':0x232a});function respondWithRpcPromise(_0x3d64a6,_0x35617c,_0x281b25,_0x330e6b){return new BPromise(function(_0x5363a9,_0xf7cb28){var _0x417e38=_0x330e6b||client;return _0x417e38[_0xf12b('0x11')](_0x3d64a6,_0x281b25)[_0xf12b('0x12')](function(_0x12e585){logger[_0xf12b('0x13')](_0xf12b('0x14'),_0x35617c,_0xf12b('0x15'));logger[_0xf12b('0x16')](_0xf12b('0x17'),_0x35617c,_0xf12b('0x15'),JSON[_0xf12b('0x18')](_0x12e585));if(_0x12e585[_0xf12b('0x19')]){if(_0x12e585[_0xf12b('0x19')][_0xf12b('0x1a')]===0x1f4){logger[_0xf12b('0x19')](_0xf12b('0x14'),_0x35617c,_0x12e585[_0xf12b('0x19')][_0xf12b('0x1b')]);return _0xf7cb28(_0x12e585[_0xf12b('0x19')]['message']);}logger[_0xf12b('0x19')](_0xf12b('0x14'),_0x35617c,_0x12e585[_0xf12b('0x19')][_0xf12b('0x1b')]);return _0x5363a9(_0x12e585['error'][_0xf12b('0x1b')]);}else{logger[_0xf12b('0x13')]('Trunk,\x20%s,\x20%s',_0x35617c,_0xf12b('0x15'));_0x5363a9(_0x12e585[_0xf12b('0x1c')][_0xf12b('0x1b')]);}})[_0xf12b('0x1d')](function(_0x46bb48){logger['error'](_0xf12b('0x14'),_0x35617c,_0x46bb48);_0xf7cb28(_0x46bb48);});});}function respondWithStatusCode(_0x407d2b,_0x54473f){_0x54473f=_0x54473f||0xcc;return function(_0x338f18){if(_0x338f18){return _0x407d2b[_0xf12b('0x1e')](_0x54473f);}return _0x407d2b[_0xf12b('0x1f')](_0x54473f)['end']();};}function respondWithResult(_0x14e790,_0x1729bd){_0x1729bd=_0x1729bd||0xc8;return function(_0x370e7c){if(_0x370e7c){return _0x14e790[_0xf12b('0x1f')](_0x1729bd)[_0xf12b('0x20')](_0x370e7c);}};}function respondWithFilteredResult(_0x5b3916,_0x22928d){return function(_0x3e7d7e){if(_0x3e7d7e){var _0x121ae2=_0x3e7d7e[_0xf12b('0x21')],_0x221e67=_0x22928d[_0xf12b('0x22')],_0xe59361=_0x22928d[_0xf12b('0x22')]+_0x22928d[_0xf12b('0x23')],_0x528ee9;if(_0xe59361>=_0x121ae2){_0xe59361=_0x121ae2;_0x528ee9=0xc8;}else{_0x528ee9=0xce;}_0x5b3916[_0xf12b('0x1f')](_0x528ee9);return _0x5b3916[_0xf12b('0x24')](_0xf12b('0x25'),_0x221e67+'-'+_0xe59361+'/'+_0x121ae2)['json'](_0x3e7d7e);}return null;};}function patchUpdates(_0x32e03e){return function(_0xe2fa7b){try{jsonpatch[_0xf12b('0x26')](_0xe2fa7b,_0x32e03e,!![]);}catch(_0x1a93fa){return BPromise['reject'](_0x1a93fa);}return _0xe2fa7b['save']();};}function saveUpdates(_0x14eeb8,_0x6c78cf){return function(_0x1e4a85){if(_0x1e4a85){return _0x1e4a85[_0xf12b('0x27')](_0x14eeb8)[_0xf12b('0x12')](function(_0x4ffb7e){return _0x4ffb7e;});}return null;};}function removeEntity(_0x40b962,_0x1471af){return function(_0x3f100a){if(_0x3f100a){return _0x3f100a[_0xf12b('0x28')]()[_0xf12b('0x12')](function(){_0x40b962[_0xf12b('0x1f')](0xcc)[_0xf12b('0x29')]();});}};}function handleEntityNotFound(_0x9f40de,_0x3c7e94){return function(_0x57cb7b){if(!_0x57cb7b){_0x9f40de[_0xf12b('0x1e')](0x194);}return _0x57cb7b;};}function handleError(_0xd0aba4,_0x43f0d2){_0x43f0d2=_0x43f0d2||0x1f4;return function(_0xfac28f){logger['error'](_0xfac28f[_0xf12b('0x2a')]);if(_0xfac28f[_0xf12b('0x2b')]){delete _0xfac28f[_0xf12b('0x2b')];}_0xd0aba4[_0xf12b('0x1f')](_0x43f0d2)[_0xf12b('0x2c')](_0xfac28f);};}exports[_0xf12b('0x2d')]=function(_0x302e77,_0x177c46){var _0x3005b6={},_0x50dfee={},_0x2feb9e={'count':0x0,'rows':[]};var _0x135d15=db[_0xf12b('0x2e')][_0xf12b('0x2f')];_0x50dfee[_0xf12b('0x30')]=_[_0xf12b('0x31')](_0x135d15);var _0x4ce2a1={'dateStart':_0x302e77[_0xf12b('0x32')][_0xf12b('0x33')],'dateEnd':_0x302e77[_0xf12b('0x32')][_0xf12b('0x34')]};delete _0x302e77['query'][_0xf12b('0x33')];delete _0x302e77[_0xf12b('0x32')][_0xf12b('0x34')];_0x50dfee[_0xf12b('0x32')]=_[_0xf12b('0x31')](_0x302e77[_0xf12b('0x32')]);_0x50dfee['filters']=_[_0xf12b('0x35')](_0x50dfee[_0xf12b('0x30')],_0x50dfee[_0xf12b('0x32')]);_0x3005b6[_0xf12b('0x36')]=_[_0xf12b('0x35')](_0x50dfee[_0xf12b('0x30')],qs[_0xf12b('0x37')](_0x302e77[_0xf12b('0x32')]['fields']));_0x3005b6[_0xf12b('0x36')]=_0x3005b6['attributes'][_0xf12b('0x38')]?_0x3005b6[_0xf12b('0x36')]:_0x50dfee['model'];if(!_0x302e77['query']['hasOwnProperty'](_0xf12b('0x39'))){_0x3005b6[_0xf12b('0x23')]=qs[_0xf12b('0x23')](_0x302e77[_0xf12b('0x32')][_0xf12b('0x23')]);_0x3005b6['offset']=qs[_0xf12b('0x22')](_0x302e77[_0xf12b('0x32')][_0xf12b('0x22')]);}_0x3005b6[_0xf12b('0x3a')]=qs[_0xf12b('0x3b')](_0x302e77['query'][_0xf12b('0x3b')]);_0x3005b6[_0xf12b('0x3c')]=qs[_0xf12b('0x3d')](_[_0xf12b('0x3e')](_0x302e77[_0xf12b('0x32')],_0x50dfee[_0xf12b('0x3d')]));if(_0x4ce2a1['dateStart']){if(_0x4ce2a1[_0xf12b('0x34')]){_0x4ce2a1['dateEnd']=moment(_0x4ce2a1[_0xf12b('0x34')])['add'](0x1,_0xf12b('0x3f'));}else{_0x4ce2a1['dateEnd']=moment(_0x4ce2a1[_0xf12b('0x33')])['add'](0x1,_0xf12b('0x3f'));}_['merge'](_0x3005b6[_0xf12b('0x3c')],{'createdAt':{'$gte':_0x4ce2a1['dateStart'],'$lte':_0x4ce2a1[_0xf12b('0x34')]}});}if(_0x302e77[_0xf12b('0x32')][_0xf12b('0x40')]){_0x3005b6[_0xf12b('0x3c')]=_[_0xf12b('0x41')](_0x3005b6[_0xf12b('0x3c')],{'$or':_['map'](_0x3005b6[_0xf12b('0x36')],function(_0x3c1837){var _0x1a972f={};_0x1a972f[_0x3c1837]={'$like':'%'+_0x302e77[_0xf12b('0x32')]['filter']+'%'};return _0x1a972f;})});}_0x3005b6=_['merge']({},_0x3005b6,_0x302e77[_0xf12b('0x42')]);var _0x3415d3={'where':_0x3005b6['where']};return db[_0xf12b('0x2e')]['count'](_0x3415d3)[_0xf12b('0x12')](function(_0x2805a1){_0x2feb9e[_0xf12b('0x21')]=_0x2805a1;if(_0x302e77[_0xf12b('0x32')][_0xf12b('0x43')]){_0x3005b6[_0xf12b('0x44')]=[{'all':!![]}];}return db[_0xf12b('0x2e')]['findAll'](_0x3005b6);})[_0xf12b('0x12')](function(_0x9ed95a){_0x2feb9e[_0xf12b('0x45')]=_0x9ed95a;return _0x2feb9e;})['then'](respondWithFilteredResult(_0x177c46,_0x3005b6))[_0xf12b('0x1d')](handleError(_0x177c46,null));};exports[_0xf12b('0x46')]=function(_0x1710e8,_0xeaaf27){var _0x1e47a9={'raw':![],'where':{'id':_0x1710e8[_0xf12b('0x47')]['id']}},_0x4015b0={};_0x4015b0['model']=_['keys'](db[_0xf12b('0x2e')][_0xf12b('0x2f')]);_0x4015b0['query']=_[_0xf12b('0x31')](_0x1710e8[_0xf12b('0x32')]);_0x4015b0[_0xf12b('0x3d')]=_[_0xf12b('0x35')](_0x4015b0[_0xf12b('0x30')],_0x4015b0[_0xf12b('0x32')]);_0x1e47a9['attributes']=_[_0xf12b('0x35')](_0x4015b0['model'],qs['fields'](_0x1710e8[_0xf12b('0x32')][_0xf12b('0x37')]));_0x1e47a9[_0xf12b('0x36')]=_0x1e47a9['attributes'][_0xf12b('0x38')]?_0x1e47a9[_0xf12b('0x36')]:_0x4015b0[_0xf12b('0x30')];if(_0x1710e8['query'][_0xf12b('0x43')]){_0x1e47a9[_0xf12b('0x44')]=[{'all':!![]}];}_0x1e47a9=_[_0xf12b('0x41')]({},_0x1e47a9,_0x1710e8[_0xf12b('0x42')]);return db[_0xf12b('0x2e')][_0xf12b('0x48')](_0x1e47a9)[_0xf12b('0x12')](handleEntityNotFound(_0xeaaf27,null))[_0xf12b('0x12')](respondWithResult(_0xeaaf27,null))['catch'](handleError(_0xeaaf27,null));};exports[_0xf12b('0x49')]=function(_0x118c53,_0x200652){var _0x4cfbc9={'raw':![],'where':{'id':_0x118c53[_0xf12b('0x47')]['id']}},_0xe61dda={};_0xe61dda['model']=_[_0xf12b('0x31')](db[_0xf12b('0x2e')][_0xf12b('0x2f')]);_0x4cfbc9['attributes']=_[_0xf12b('0x35')](_0xe61dda[_0xf12b('0x30')],qs[_0xf12b('0x37')](_0x118c53['query']['fields']));_0x4cfbc9[_0xf12b('0x36')]=_0x4cfbc9['attributes']['length']?_0x4cfbc9[_0xf12b('0x36')]:_0xe61dda[_0xf12b('0x30')];if(_0x118c53['query'][_0xf12b('0x43')]){_0x4cfbc9[_0xf12b('0x44')]=[{'all':!![]}];}_0x4cfbc9=_[_0xf12b('0x41')]({},_0x4cfbc9,_0x118c53[_0xf12b('0x42')]);return db[_0xf12b('0x2e')]['find'](_0x4cfbc9)['then'](handleEntityNotFound(_0x200652,null))[_0xf12b('0x12')](function(_0x2a23c7){if(_0x2a23c7){var _0x2aa23b=_0x2a23c7[_0xf12b('0x4a')]({'plain':!![]});_0x2aa23b=qs['omit'](_0x2aa23b,['id','createdAt','updatedAt']);_0x118c53[_0xf12b('0x4b')]=_['omit'](_0x118c53[_0xf12b('0x4b')],['id',_0xf12b('0x4c'),_0xf12b('0x4d')]);return db[_0xf12b('0x2e')][_0xf12b('0x4e')](_['merge'](_0x2aa23b,_0x118c53['body']),{'include':_0x118c53['query'][_0xf12b('0x43')]?[{'all':!![]}]:undefined});}})[_0xf12b('0x12')](respondWithResult(_0x200652,0xc9))[_0xf12b('0x1d')](handleError(_0x200652,null));};exports['create']=function(_0x477548,_0x1bd43b,_0x3aa15b){var _0x5e0b77;return db['Trunk'][_0xf12b('0x4e')](_0x477548[_0xf12b('0x4b')],{'raw':!![]})['then'](function(_0x42c5f1){_0x5e0b77=_0x42c5f1;return db['Trunk'][_0xf12b('0x4f')]({'raw':!![]});})['then'](function(_0x4d420f){var _0x3945d5=fs[_0xf12b('0x50')](path[_0xf12b('0x51')](config[_0xf12b('0x52')],_0xf12b('0x53')),'utf8');var _0x16a9f9=fs['readFileSync'](path[_0xf12b('0x51')](config[_0xf12b('0x52')],_0xf12b('0x54')),_0xf12b('0x55'));var _0xd1dd4d=ejs['render'](_0x3945d5,{'trunks':_0x4d420f||[]});fs[_0xf12b('0x56')](_0xf12b('0x57'),_0xd1dd4d);if(_0x5e0b77['registry']){var _0x3445b0=ejs[_0xf12b('0x58')](_0x16a9f9,{'trunks':_0x4d420f||[]});fs[_0xf12b('0x56')](_0xf12b('0x59'),_0x3445b0);}})[_0xf12b('0x12')](function(){return respondWithRpcPromise(_0xf12b('0x5a'),_0xf12b('0x4e'),{'module':_0xf12b('0x5b')});})['then'](function(){return _0x5e0b77;})['then'](respondWithResult(_0x1bd43b,0xc9))[_0xf12b('0x1d')](handleError(_0x1bd43b,null));};exports['update']=function(_0x2841e0,_0x500a22,_0x1e3d1b){var _0x471ab2;return db[_0xf12b('0x2e')][_0xf12b('0x48')]({'where':{'id':_0x2841e0[_0xf12b('0x47')]['id']}})[_0xf12b('0x12')](handleEntityNotFound(_0x500a22,null))[_0xf12b('0x12')](saveUpdates(_0x2841e0[_0xf12b('0x4b')],null))[_0xf12b('0x12')](function(_0xc58012){if(_0xc58012){_0x471ab2=_0xc58012;return db[_0xf12b('0x2e')][_0xf12b('0x4f')]({'raw':!![]});}})[_0xf12b('0x12')](function(_0x23a0da){if(_0x23a0da){var _0x5126c5=fs[_0xf12b('0x50')](path[_0xf12b('0x51')](config[_0xf12b('0x52')],'server/files/templates/trunk.ejs'),_0xf12b('0x55'));var _0x442d29=fs['readFileSync'](path[_0xf12b('0x51')](config[_0xf12b('0x52')],_0xf12b('0x54')),_0xf12b('0x55'));var _0x2c5af4=ejs[_0xf12b('0x58')](_0x5126c5,{'trunks':_0x23a0da||[]});fs['writeFileSync']('/etc/asterisk/sip_xcally_trunks.conf',_0x2c5af4);var _0xcd00bd=ejs[_0xf12b('0x58')](_0x442d29,{'trunks':_0x23a0da||[]});fs[_0xf12b('0x56')]('/etc/asterisk/sip_xcally_registers.conf',_0xcd00bd);return respondWithRpcPromise('Reload',_0xf12b('0x27'),{'module':_0xf12b('0x5b')});}return null;})[_0xf12b('0x12')](function(_0x389141){if(_0x389141){return _0x471ab2;}})[_0xf12b('0x12')](respondWithResult(_0x500a22,null))[_0xf12b('0x1d')](handleError(_0x500a22,null));};exports[_0xf12b('0x28')]=function(_0x4db15f,_0x60f01f,_0x1a25eb){var _0x3df2f5;return db['Trunk'][_0xf12b('0x48')]({'where':{'id':_0x4db15f['params']['id']}})['then'](handleEntityNotFound(_0x60f01f,null))[_0xf12b('0x12')](removeEntity(_0x60f01f,null))[_0xf12b('0x12')](function(){return db[_0xf12b('0x2e')]['findAll']({'raw':!![]});})[_0xf12b('0x12')](function(_0x2b9f2c){var _0x55ba2d=fs[_0xf12b('0x50')](path[_0xf12b('0x51')](config[_0xf12b('0x52')],_0xf12b('0x53')),_0xf12b('0x55'));var _0x2c4104=fs[_0xf12b('0x50')](path[_0xf12b('0x51')](config[_0xf12b('0x52')],_0xf12b('0x54')),_0xf12b('0x55'));var _0x433e52=ejs[_0xf12b('0x58')](_0x55ba2d,{'trunks':_0x2b9f2c});var _0x36be78=ejs[_0xf12b('0x58')](_0x2c4104,{'trunks':_0x2b9f2c});fs[_0xf12b('0x56')](_0xf12b('0x57'),_0x433e52);fs[_0xf12b('0x56')](_0xf12b('0x59'),_0x36be78);return respondWithRpcPromise('Reload','destroy',{'module':_0xf12b('0x5b')});})[_0xf12b('0x1d')](handleError(_0x60f01f,null));};
\ No newline at end of file
+var _0xedd1=['includeAll','include','Trunk','rows','show','params','fields','find','clone','omit','body','createdAt','updatedAt','findAll','readFileSync','join','root','server/files/templates/trunk.ejs','utf8','server/files/templates/registry.ejs','render','writeFileSync','/etc/asterisk/sip_xcally_trunks.conf','registry','/etc/asterisk/sip_xcally_registers.conf','Reload','create','chan_sip.so','fast-json-patch','request-promise','moment','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','../../components/parsers/qs','../../config/logger','api','../../mysqldb','jayson/promise','client','http','then','info','Trunk,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','catch','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','update','destroy','stack','send','index','rawAttributes','model','keys','query','dateEnd','dateStart','filters','intersection','attributes','length','nolimit','order','sort','where','pick','add','day','merge','filter','options','count'];(function(_0x514740,_0x11134c){var _0x11aecb=function(_0x246e7d){while(--_0x246e7d){_0x514740['push'](_0x514740['shift']());}};_0x11aecb(++_0x11134c);}(_0xedd1,0x18c));var _0x1edd=function(_0x1945a5,_0x50de54){_0x1945a5=_0x1945a5-0x0;var _0x5817a5=_0xedd1[_0x1945a5];return _0x5817a5;};'use strict';var jsonpatch=require(_0x1edd('0x0'));var rp=require(_0x1edd('0x1'));var moment=require(_0x1edd('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x1edd('0x3'));var sox=require(_0x1edd('0x4'));var csv=require(_0x1edd('0x5'));var ejs=require(_0x1edd('0x6'));var fs=require('fs');var _=require(_0x1edd('0x7'));var squel=require(_0x1edd('0x8'));var crypto=require(_0x1edd('0x9'));var jsforce=require(_0x1edd('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x1edd('0xb'));var qs=require(_0x1edd('0xc'));var logger=require(_0x1edd('0xd'))(_0x1edd('0xe'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x1edd('0xf'))['db'];var jayson=require(_0x1edd('0x10'));var client=jayson[_0x1edd('0x11')][_0x1edd('0x12')]({'port':0x232a});function respondWithRpcPromise(_0x192c17,_0x5d59d8,_0xc4e2a1,_0x358280){return new BPromise(function(_0x4f361b,_0x49f40e){var _0x45d985=_0x358280||client;return _0x45d985['request'](_0x192c17,_0xc4e2a1)[_0x1edd('0x13')](function(_0x214b62){logger[_0x1edd('0x14')](_0x1edd('0x15'),_0x5d59d8,_0x1edd('0x16'));logger[_0x1edd('0x17')]('Trunk,\x20%s,\x20%s,\x20%s',_0x5d59d8,_0x1edd('0x16'),JSON[_0x1edd('0x18')](_0x214b62));if(_0x214b62[_0x1edd('0x19')]){if(_0x214b62['error']['code']===0x1f4){logger['error'](_0x1edd('0x15'),_0x5d59d8,_0x214b62[_0x1edd('0x19')][_0x1edd('0x1a')]);return _0x49f40e(_0x214b62[_0x1edd('0x19')]['message']);}logger[_0x1edd('0x19')](_0x1edd('0x15'),_0x5d59d8,_0x214b62[_0x1edd('0x19')]['message']);return _0x4f361b(_0x214b62['error'][_0x1edd('0x1a')]);}else{logger[_0x1edd('0x14')](_0x1edd('0x15'),_0x5d59d8,_0x1edd('0x16'));_0x4f361b(_0x214b62['result'][_0x1edd('0x1a')]);}})[_0x1edd('0x1b')](function(_0x3c311b){logger['error'](_0x1edd('0x15'),_0x5d59d8,_0x3c311b);_0x49f40e(_0x3c311b);});});}function respondWithStatusCode(_0x590cd1,_0x52f3ea){_0x52f3ea=_0x52f3ea||0xcc;return function(_0x2b82ef){if(_0x2b82ef){return _0x590cd1[_0x1edd('0x1c')](_0x52f3ea);}return _0x590cd1[_0x1edd('0x1d')](_0x52f3ea)[_0x1edd('0x1e')]();};}function respondWithResult(_0x436334,_0x464619){_0x464619=_0x464619||0xc8;return function(_0x214c51){if(_0x214c51){return _0x436334['status'](_0x464619)[_0x1edd('0x1f')](_0x214c51);}};}function respondWithFilteredResult(_0x134e80,_0x5e9746){return function(_0x56ff28){if(_0x56ff28){var _0x39565e=_0x56ff28['count'],_0x51d338=_0x5e9746[_0x1edd('0x20')],_0xb09448=_0x5e9746[_0x1edd('0x20')]+_0x5e9746[_0x1edd('0x21')],_0x3d8879;if(_0xb09448>=_0x39565e){_0xb09448=_0x39565e;_0x3d8879=0xc8;}else{_0x3d8879=0xce;}_0x134e80['status'](_0x3d8879);return _0x134e80[_0x1edd('0x22')](_0x1edd('0x23'),_0x51d338+'-'+_0xb09448+'/'+_0x39565e)[_0x1edd('0x1f')](_0x56ff28);}return null;};}function patchUpdates(_0xbb91be){return function(_0x407bb9){try{jsonpatch[_0x1edd('0x24')](_0x407bb9,_0xbb91be,!![]);}catch(_0x5ac680){return BPromise[_0x1edd('0x25')](_0x5ac680);}return _0x407bb9['save']();};}function saveUpdates(_0x3323d1,_0x1615a6){return function(_0x1524e5){if(_0x1524e5){return _0x1524e5[_0x1edd('0x26')](_0x3323d1)[_0x1edd('0x13')](function(_0xc73dcc){return _0xc73dcc;});}return null;};}function removeEntity(_0x14da03,_0x327833){return function(_0x2866c9){if(_0x2866c9){return _0x2866c9[_0x1edd('0x27')]()[_0x1edd('0x13')](function(){_0x14da03[_0x1edd('0x1d')](0xcc)[_0x1edd('0x1e')]();});}};}function handleEntityNotFound(_0x296f4a,_0x58054d){return function(_0x87785d){if(!_0x87785d){_0x296f4a[_0x1edd('0x1c')](0x194);}return _0x87785d;};}function handleError(_0x320ad5,_0x1e02d9){_0x1e02d9=_0x1e02d9||0x1f4;return function(_0xc7a0b6){logger['error'](_0xc7a0b6[_0x1edd('0x28')]);if(_0xc7a0b6['name']){delete _0xc7a0b6['name'];}_0x320ad5['status'](_0x1e02d9)[_0x1edd('0x29')](_0xc7a0b6);};}exports[_0x1edd('0x2a')]=function(_0x2fd555,_0x583cce){var _0x162439={},_0x531b90={},_0x421762={'count':0x0,'rows':[]};var _0x44e72c=db['Trunk'][_0x1edd('0x2b')];_0x531b90[_0x1edd('0x2c')]=_[_0x1edd('0x2d')](_0x44e72c);var _0x2f378b={'dateStart':_0x2fd555[_0x1edd('0x2e')]['dateStart'],'dateEnd':_0x2fd555['query'][_0x1edd('0x2f')]};delete _0x2fd555[_0x1edd('0x2e')][_0x1edd('0x30')];delete _0x2fd555[_0x1edd('0x2e')]['dateEnd'];_0x531b90[_0x1edd('0x2e')]=_[_0x1edd('0x2d')](_0x2fd555['query']);_0x531b90[_0x1edd('0x31')]=_[_0x1edd('0x32')](_0x531b90[_0x1edd('0x2c')],_0x531b90[_0x1edd('0x2e')]);_0x162439[_0x1edd('0x33')]=_[_0x1edd('0x32')](_0x531b90['model'],qs['fields'](_0x2fd555[_0x1edd('0x2e')]['fields']));_0x162439[_0x1edd('0x33')]=_0x162439['attributes'][_0x1edd('0x34')]?_0x162439[_0x1edd('0x33')]:_0x531b90[_0x1edd('0x2c')];if(!_0x2fd555[_0x1edd('0x2e')]['hasOwnProperty'](_0x1edd('0x35'))){_0x162439[_0x1edd('0x21')]=qs[_0x1edd('0x21')](_0x2fd555[_0x1edd('0x2e')][_0x1edd('0x21')]);_0x162439[_0x1edd('0x20')]=qs[_0x1edd('0x20')](_0x2fd555['query'][_0x1edd('0x20')]);}_0x162439[_0x1edd('0x36')]=qs[_0x1edd('0x37')](_0x2fd555[_0x1edd('0x2e')][_0x1edd('0x37')]);_0x162439[_0x1edd('0x38')]=qs[_0x1edd('0x31')](_[_0x1edd('0x39')](_0x2fd555['query'],_0x531b90[_0x1edd('0x31')]));if(_0x2f378b['dateStart']){if(_0x2f378b[_0x1edd('0x2f')]){_0x2f378b[_0x1edd('0x2f')]=moment(_0x2f378b[_0x1edd('0x2f')])[_0x1edd('0x3a')](0x1,_0x1edd('0x3b'));}else{_0x2f378b['dateEnd']=moment(_0x2f378b['dateStart'])[_0x1edd('0x3a')](0x1,_0x1edd('0x3b'));}_[_0x1edd('0x3c')](_0x162439[_0x1edd('0x38')],{'createdAt':{'$gte':_0x2f378b['dateStart'],'$lte':_0x2f378b[_0x1edd('0x2f')]}});}if(_0x2fd555[_0x1edd('0x2e')][_0x1edd('0x3d')]){_0x162439[_0x1edd('0x38')]=_[_0x1edd('0x3c')](_0x162439[_0x1edd('0x38')],{'$or':_['map'](_0x162439[_0x1edd('0x33')],function(_0x4fab7b){var _0x5aecfc={};_0x5aecfc[_0x4fab7b]={'$like':'%'+_0x2fd555[_0x1edd('0x2e')][_0x1edd('0x3d')]+'%'};return _0x5aecfc;})});}_0x162439=_[_0x1edd('0x3c')]({},_0x162439,_0x2fd555[_0x1edd('0x3e')]);var _0x5f3459={'where':_0x162439['where']};return db['Trunk']['count'](_0x5f3459)[_0x1edd('0x13')](function(_0x4471da){_0x421762[_0x1edd('0x3f')]=_0x4471da;if(_0x2fd555[_0x1edd('0x2e')][_0x1edd('0x40')]){_0x162439[_0x1edd('0x41')]=[{'all':!![]}];}return db[_0x1edd('0x42')]['findAll'](_0x162439);})[_0x1edd('0x13')](function(_0x45932c){_0x421762[_0x1edd('0x43')]=_0x45932c;return _0x421762;})['then'](respondWithFilteredResult(_0x583cce,_0x162439))['catch'](handleError(_0x583cce,null));};exports[_0x1edd('0x44')]=function(_0x39c00c,_0x5d72ac){var _0xae9147={'raw':![],'where':{'id':_0x39c00c[_0x1edd('0x45')]['id']}},_0x4e0a25={};_0x4e0a25['model']=_[_0x1edd('0x2d')](db['Trunk'][_0x1edd('0x2b')]);_0x4e0a25[_0x1edd('0x2e')]=_['keys'](_0x39c00c['query']);_0x4e0a25[_0x1edd('0x31')]=_['intersection'](_0x4e0a25[_0x1edd('0x2c')],_0x4e0a25[_0x1edd('0x2e')]);_0xae9147[_0x1edd('0x33')]=_['intersection'](_0x4e0a25[_0x1edd('0x2c')],qs['fields'](_0x39c00c['query'][_0x1edd('0x46')]));_0xae9147['attributes']=_0xae9147['attributes'][_0x1edd('0x34')]?_0xae9147[_0x1edd('0x33')]:_0x4e0a25[_0x1edd('0x2c')];if(_0x39c00c[_0x1edd('0x2e')]['includeAll']){_0xae9147[_0x1edd('0x41')]=[{'all':!![]}];}_0xae9147=_['merge']({},_0xae9147,_0x39c00c[_0x1edd('0x3e')]);return db[_0x1edd('0x42')][_0x1edd('0x47')](_0xae9147)[_0x1edd('0x13')](handleEntityNotFound(_0x5d72ac,null))[_0x1edd('0x13')](respondWithResult(_0x5d72ac,null))[_0x1edd('0x1b')](handleError(_0x5d72ac,null));};exports[_0x1edd('0x48')]=function(_0x494f59,_0x1d1920){var _0x1e0fc1={'raw':![],'where':{'id':_0x494f59['params']['id']}},_0x659e2b={};_0x659e2b[_0x1edd('0x2c')]=_[_0x1edd('0x2d')](db[_0x1edd('0x42')][_0x1edd('0x2b')]);_0x1e0fc1[_0x1edd('0x33')]=_['intersection'](_0x659e2b['model'],qs[_0x1edd('0x46')](_0x494f59[_0x1edd('0x2e')][_0x1edd('0x46')]));_0x1e0fc1[_0x1edd('0x33')]=_0x1e0fc1[_0x1edd('0x33')][_0x1edd('0x34')]?_0x1e0fc1['attributes']:_0x659e2b[_0x1edd('0x2c')];if(_0x494f59[_0x1edd('0x2e')][_0x1edd('0x40')]){_0x1e0fc1[_0x1edd('0x41')]=[{'all':!![]}];}_0x1e0fc1=_[_0x1edd('0x3c')]({},_0x1e0fc1,_0x494f59['options']);return db[_0x1edd('0x42')][_0x1edd('0x47')](_0x1e0fc1)[_0x1edd('0x13')](handleEntityNotFound(_0x1d1920,null))[_0x1edd('0x13')](function(_0x1bf3cc){if(_0x1bf3cc){var _0x241fbc=_0x1bf3cc['get']({'plain':!![]});_0x241fbc=qs[_0x1edd('0x49')](_0x241fbc,['id','createdAt','updatedAt']);_0x494f59[_0x1edd('0x4a')]=_['omit'](_0x494f59[_0x1edd('0x4a')],['id',_0x1edd('0x4b'),_0x1edd('0x4c')]);return db['Trunk']['create'](_[_0x1edd('0x3c')](_0x241fbc,_0x494f59['body']),{'include':_0x494f59[_0x1edd('0x2e')][_0x1edd('0x40')]?[{'all':!![]}]:undefined});}})[_0x1edd('0x13')](respondWithResult(_0x1d1920,0xc9))[_0x1edd('0x1b')](handleError(_0x1d1920,null));};exports['create']=function(_0x1034ca,_0x1df6da,_0x46ece1){var _0x48cb51;return db['Trunk']['create'](_0x1034ca[_0x1edd('0x4a')],{'raw':!![]})[_0x1edd('0x13')](function(_0x5b397e){_0x48cb51=_0x5b397e;return db[_0x1edd('0x42')][_0x1edd('0x4d')]({'raw':!![]});})[_0x1edd('0x13')](function(_0x5ef496){var _0xbbbd79=fs[_0x1edd('0x4e')](path[_0x1edd('0x4f')](config[_0x1edd('0x50')],_0x1edd('0x51')),_0x1edd('0x52'));var _0x26900c=fs['readFileSync'](path[_0x1edd('0x4f')](config[_0x1edd('0x50')],_0x1edd('0x53')),_0x1edd('0x52'));var _0x15b451=ejs[_0x1edd('0x54')](_0xbbbd79,{'trunks':_0x5ef496||[]});fs[_0x1edd('0x55')](_0x1edd('0x56'),_0x15b451);if(_0x48cb51[_0x1edd('0x57')]){var _0x587958=ejs[_0x1edd('0x54')](_0x26900c,{'trunks':_0x5ef496||[]});fs['writeFileSync'](_0x1edd('0x58'),_0x587958);}})[_0x1edd('0x13')](function(){return respondWithRpcPromise(_0x1edd('0x59'),_0x1edd('0x5a'),{'module':'chan_sip.so'});})[_0x1edd('0x13')](function(){return _0x48cb51;})[_0x1edd('0x13')](respondWithResult(_0x1df6da,0xc9))[_0x1edd('0x1b')](handleError(_0x1df6da,null));};exports[_0x1edd('0x26')]=function(_0x317632,_0x3c7aa0,_0x42cb56){var _0x1a9085;return db[_0x1edd('0x42')][_0x1edd('0x47')]({'where':{'id':_0x317632['params']['id']}})[_0x1edd('0x13')](handleEntityNotFound(_0x3c7aa0,null))[_0x1edd('0x13')](saveUpdates(_0x317632[_0x1edd('0x4a')],null))[_0x1edd('0x13')](function(_0x4522f3){if(_0x4522f3){_0x1a9085=_0x4522f3;return db[_0x1edd('0x42')][_0x1edd('0x4d')]({'raw':!![]});}})[_0x1edd('0x13')](function(_0x4316d8){if(_0x4316d8){var _0x33fd23=fs[_0x1edd('0x4e')](path[_0x1edd('0x4f')](config['root'],'server/files/templates/trunk.ejs'),_0x1edd('0x52'));var _0x503a4f=fs[_0x1edd('0x4e')](path['join'](config[_0x1edd('0x50')],'server/files/templates/registry.ejs'),_0x1edd('0x52'));var _0x24dcfd=ejs[_0x1edd('0x54')](_0x33fd23,{'trunks':_0x4316d8||[]});fs[_0x1edd('0x55')]('/etc/asterisk/sip_xcally_trunks.conf',_0x24dcfd);var _0x48c6ad=ejs['render'](_0x503a4f,{'trunks':_0x4316d8||[]});fs[_0x1edd('0x55')](_0x1edd('0x58'),_0x48c6ad);return respondWithRpcPromise(_0x1edd('0x59'),_0x1edd('0x26'),{'module':_0x1edd('0x5b')});}return null;})[_0x1edd('0x13')](function(_0x585121){if(_0x585121){return _0x1a9085;}})['then'](respondWithResult(_0x3c7aa0,null))[_0x1edd('0x1b')](handleError(_0x3c7aa0,null));};exports['destroy']=function(_0x260d5f,_0x456cd1,_0x1d5b8d){var _0x1428c1;return db[_0x1edd('0x42')][_0x1edd('0x47')]({'where':{'id':_0x260d5f[_0x1edd('0x45')]['id']}})[_0x1edd('0x13')](handleEntityNotFound(_0x456cd1,null))[_0x1edd('0x13')](removeEntity(_0x456cd1,null))[_0x1edd('0x13')](function(){return db[_0x1edd('0x42')][_0x1edd('0x4d')]({'raw':!![]});})[_0x1edd('0x13')](function(_0x588133){var _0x9d0b4b=fs[_0x1edd('0x4e')](path[_0x1edd('0x4f')](config[_0x1edd('0x50')],_0x1edd('0x51')),_0x1edd('0x52'));var _0x4ba034=fs[_0x1edd('0x4e')](path[_0x1edd('0x4f')](config['root'],_0x1edd('0x53')),_0x1edd('0x52'));var _0x21aaf9=ejs[_0x1edd('0x54')](_0x9d0b4b,{'trunks':_0x588133});var _0x1eb057=ejs[_0x1edd('0x54')](_0x4ba034,{'trunks':_0x588133});fs[_0x1edd('0x55')]('/etc/asterisk/sip_xcally_trunks.conf',_0x21aaf9);fs['writeFileSync'](_0x1edd('0x58'),_0x1eb057);return respondWithRpcPromise('Reload',_0x1edd('0x27'),{'module':_0x1edd('0x5b')});})[_0x1edd('0x1b')](handleError(_0x456cd1,null));};
\ No newline at end of file
index 40ec160..3651c0e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x737e=['define','tools_trunks','lodash','util','../../config/logger','api','request-promise','exports'];(function(_0x398284,_0x52e9b0){var _0x529c0c=function(_0x3f30e8){while(--_0x3f30e8){_0x398284['push'](_0x398284['shift']());}};_0x529c0c(++_0x52e9b0);}(_0x737e,0x8a));var _0xe737=function(_0x5bea7b,_0x5f56cf){_0x5bea7b=_0x5bea7b-0x0;var _0x1d6411=_0x737e[_0x5bea7b];return _0x1d6411;};'use strict';var _=require(_0xe737('0x0'));var util=require(_0xe737('0x1'));var logger=require(_0xe737('0x2'))(_0xe737('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xe737('0x4'));var attributes=require('./trunk.attributes');module[_0xe737('0x5')]=function(_0x333822,_0x481666){return _0x333822[_0xe737('0x6')]('Trunk',attributes,{'tableName':_0xe737('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4772=['./trunk.attributes','tools_trunks','util','../../config/logger','moment','bluebird','request-promise'];(function(_0x59f9ba,_0x52aed5){var _0x4909bc=function(_0x520804){while(--_0x520804){_0x59f9ba['push'](_0x59f9ba['shift']());}};_0x4909bc(++_0x52aed5);}(_0x4772,0xdb));var _0x2477=function(_0x2811fb,_0x85ee07){_0x2811fb=_0x2811fb-0x0;var _0x2aca7d=_0x4772[_0x2811fb];return _0x2aca7d;};'use strict';var _=require('lodash');var util=require(_0x2477('0x0'));var logger=require(_0x2477('0x1'))('api');var moment=require(_0x2477('0x2'));var BPromise=require(_0x2477('0x3'));var rp=require(_0x2477('0x4'));var attributes=require(_0x2477('0x5'));module['exports']=function(_0x58c778,_0x57d688){return _0x58c778['define']('Trunk',attributes,{'tableName':_0x2477('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6a873c0..3823748 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f1c=['raw','where','attributes','limit','include','map','model','then','debug','ShowTrunk','Trunk','find','stringify','lodash','util','moment','randomstring','../../config/environment','jayson/promise','client','http','request','info','Trunk,\x20%s,\x20%s','request\x20sent','error','code','message','catch','GetTrunk','options'];(function(_0xe077c0,_0x220fa4){var _0x4e724d=function(_0x5d587f){while(--_0x5d587f){_0xe077c0['push'](_0xe077c0['shift']());}};_0x4e724d(++_0x220fa4);}(_0x0f1c,0xc7));var _0xc0f1=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0f1c[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xc0f1('0x0'));var util=require(_0xc0f1('0x1'));var moment=require(_0xc0f1('0x2'));var BPromise=require('bluebird');var rs=require(_0xc0f1('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require(_0xc0f1('0x4'));var jayson=require(_0xc0f1('0x5'));var client=jayson[_0xc0f1('0x6')][_0xc0f1('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x278a6d,_0x2b8212,_0x241e59){return new BPromise(function(_0x35a9a7,_0x309acc){return client[_0xc0f1('0x8')](_0x278a6d,_0x241e59)['then'](function(_0x54715b){logger[_0xc0f1('0x9')](_0xc0f1('0xa'),_0x2b8212,_0xc0f1('0xb'));logger['debug']('Trunk,\x20%s,\x20%s,\x20%s',_0x2b8212,_0xc0f1('0xb'),JSON['stringify'](_0x54715b));if(_0x54715b[_0xc0f1('0xc')]){if(_0x54715b['error'][_0xc0f1('0xd')]===0x1f4){logger['error']('Trunk,\x20%s,\x20%s',_0x2b8212,_0x54715b[_0xc0f1('0xc')][_0xc0f1('0xe')]);return _0x309acc(_0x54715b[_0xc0f1('0xc')][_0xc0f1('0xe')]);}logger['error'](_0xc0f1('0xa'),_0x2b8212,_0x54715b[_0xc0f1('0xc')][_0xc0f1('0xe')]);return _0x35a9a7(_0x54715b[_0xc0f1('0xc')][_0xc0f1('0xe')]);}else{logger['info'](_0xc0f1('0xa'),_0x2b8212,_0xc0f1('0xb'));_0x35a9a7(_0x54715b['result']['message']);}})[_0xc0f1('0xf')](function(_0x5c9225){logger[_0xc0f1('0xc')](_0xc0f1('0xa'),_0x2b8212,_0x5c9225);_0x309acc(_0x5c9225);});});}exports[_0xc0f1('0x10')]=function(_0x2ea6bd){var _0x318cae=this;return new Promise(function(_0x33150e,_0x589317){return db['Trunk']['findAll']({'raw':_0x2ea6bd['options']?_0x2ea6bd[_0xc0f1('0x11')][_0xc0f1('0x12')]===undefined?!![]:![]:!![],'where':_0x2ea6bd[_0xc0f1('0x11')]?_0x2ea6bd[_0xc0f1('0x11')][_0xc0f1('0x13')]||null:null,'attributes':_0x2ea6bd['options']?_0x2ea6bd['options'][_0xc0f1('0x14')]||null:null,'limit':_0x2ea6bd['options']?_0x2ea6bd[_0xc0f1('0x11')][_0xc0f1('0x15')]||null:null,'include':_0x2ea6bd[_0xc0f1('0x11')]?_0x2ea6bd[_0xc0f1('0x11')][_0xc0f1('0x16')]?_[_0xc0f1('0x17')](_0x2ea6bd['options']['include'],function(_0x29d4fb){return{'model':db[_0x29d4fb[_0xc0f1('0x18')]],'as':_0x29d4fb['as'],'attributes':_0x29d4fb[_0xc0f1('0x14')],'include':_0x29d4fb[_0xc0f1('0x16')]?_[_0xc0f1('0x17')](_0x29d4fb[_0xc0f1('0x16')],function(_0xdf17ec){return{'model':db[_0xdf17ec[_0xc0f1('0x18')]],'as':_0xdf17ec['as'],'attributes':_0xdf17ec['attributes'],'include':_0xdf17ec[_0xc0f1('0x16')]?_[_0xc0f1('0x17')](_0xdf17ec[_0xc0f1('0x16')],function(_0x3a55a0){return{'model':db[_0x3a55a0[_0xc0f1('0x18')]],'as':_0x3a55a0['as'],'attributes':_0x3a55a0[_0xc0f1('0x14')]};}):[]};}):[]};}):[]:[]})[_0xc0f1('0x19')](function(_0x312443){logger[_0xc0f1('0x9')](_0xc0f1('0x10'),_0x2ea6bd);logger[_0xc0f1('0x1a')](_0xc0f1('0x10'),_0x2ea6bd,JSON['stringify'](_0x312443));_0x33150e(_0x312443);})[_0xc0f1('0xf')](function(_0x17eb64){logger[_0xc0f1('0xc')]('GetTrunk',_0x17eb64[_0xc0f1('0xe')],_0x2ea6bd);_0x589317(_0x318cae[_0xc0f1('0xc')](0x1f4,_0x17eb64[_0xc0f1('0xe')]));});});};exports[_0xc0f1('0x1b')]=function(_0x34e9fa){var _0x4f6a3e=this;return new Promise(function(_0x4ac400,_0x17c626){return db[_0xc0f1('0x1c')][_0xc0f1('0x1d')]({'raw':_0x34e9fa[_0xc0f1('0x11')]?_0x34e9fa[_0xc0f1('0x11')]['raw']===undefined?!![]:![]:!![],'where':_0x34e9fa[_0xc0f1('0x11')]?_0x34e9fa[_0xc0f1('0x11')]['where']||null:null,'attributes':_0x34e9fa[_0xc0f1('0x11')]?_0x34e9fa['options'][_0xc0f1('0x14')]||null:null,'include':_0x34e9fa[_0xc0f1('0x11')]?_0x34e9fa[_0xc0f1('0x11')][_0xc0f1('0x16')]?_[_0xc0f1('0x17')](_0x34e9fa['options'][_0xc0f1('0x16')],function(_0x1fc0bb){return{'model':db[_0x1fc0bb[_0xc0f1('0x18')]],'as':_0x1fc0bb['as'],'attributes':_0x1fc0bb[_0xc0f1('0x14')],'include':_0x1fc0bb[_0xc0f1('0x16')]?_[_0xc0f1('0x17')](_0x1fc0bb['include'],function(_0x4df09f){return{'model':db[_0x4df09f[_0xc0f1('0x18')]],'as':_0x4df09f['as'],'attributes':_0x4df09f[_0xc0f1('0x14')],'include':_0x4df09f[_0xc0f1('0x16')]?_[_0xc0f1('0x17')](_0x4df09f[_0xc0f1('0x16')],function(_0x5d9965){return{'model':db[_0x5d9965[_0xc0f1('0x18')]],'as':_0x5d9965['as'],'attributes':_0x5d9965['attributes']};}):[]};}):[]};}):[]:[]})[_0xc0f1('0x19')](function(_0x5e8ad3){logger[_0xc0f1('0x9')](_0xc0f1('0x1b'),_0x34e9fa);logger['debug'](_0xc0f1('0x1b'),_0x34e9fa,JSON[_0xc0f1('0x1e')](_0x5e8ad3));_0x4ac400(_0x5e8ad3);})[_0xc0f1('0xf')](function(_0x9ea51a){logger['error']('ShowTrunk',_0x9ea51a[_0xc0f1('0xe')],_0x34e9fa);_0x17c626(_0x4f6a3e[_0xc0f1('0xc')](0x1f4,_0x9ea51a['message']));});});};
\ No newline at end of file
+var _0x5a3f=['ShowTrunk','stringify','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','info','Trunk,\x20%s,\x20%s','debug','Trunk,\x20%s,\x20%s,\x20%s','error','code','message','request\x20sent','result','GetTrunk','Trunk','findAll','options','where','include','model','attributes','map','then','catch','raw'];(function(_0x344a3f,_0x579a22){var _0x264712=function(_0x34c9f0){while(--_0x34c9f0){_0x344a3f['push'](_0x344a3f['shift']());}};_0x264712(++_0x579a22);}(_0x5a3f,0xfe));var _0xf5a3=function(_0x394200,_0x5337d0){_0x394200=_0x394200-0x0;var _0x7c6864=_0x5a3f[_0x394200];return _0x7c6864;};'use strict';var _=require(_0xf5a3('0x0'));var util=require(_0xf5a3('0x1'));var moment=require(_0xf5a3('0x2'));var BPromise=require(_0xf5a3('0x3'));var rs=require(_0xf5a3('0x4'));var fs=require('fs');var db=require(_0xf5a3('0x5'))['db'];var utils=require(_0xf5a3('0x6'));var logger=require(_0xf5a3('0x7'))(_0xf5a3('0x8'));var config=require(_0xf5a3('0x9'));var jayson=require(_0xf5a3('0xa'));var client=jayson[_0xf5a3('0xb')][_0xf5a3('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x220384,_0x30af40,_0x2a881c){return new BPromise(function(_0x22ad07,_0x29c120){return client['request'](_0x220384,_0x2a881c)['then'](function(_0x1370e7){logger[_0xf5a3('0xd')](_0xf5a3('0xe'),_0x30af40,'request\x20sent');logger[_0xf5a3('0xf')](_0xf5a3('0x10'),_0x30af40,'request\x20sent',JSON['stringify'](_0x1370e7));if(_0x1370e7[_0xf5a3('0x11')]){if(_0x1370e7[_0xf5a3('0x11')][_0xf5a3('0x12')]===0x1f4){logger[_0xf5a3('0x11')](_0xf5a3('0xe'),_0x30af40,_0x1370e7[_0xf5a3('0x11')][_0xf5a3('0x13')]);return _0x29c120(_0x1370e7[_0xf5a3('0x11')][_0xf5a3('0x13')]);}logger[_0xf5a3('0x11')]('Trunk,\x20%s,\x20%s',_0x30af40,_0x1370e7['error'][_0xf5a3('0x13')]);return _0x22ad07(_0x1370e7[_0xf5a3('0x11')][_0xf5a3('0x13')]);}else{logger[_0xf5a3('0xd')](_0xf5a3('0xe'),_0x30af40,_0xf5a3('0x14'));_0x22ad07(_0x1370e7[_0xf5a3('0x15')]['message']);}})['catch'](function(_0x5681c2){logger[_0xf5a3('0x11')]('Trunk,\x20%s,\x20%s',_0x30af40,_0x5681c2);_0x29c120(_0x5681c2);});});}exports[_0xf5a3('0x16')]=function(_0x4ede4c){var _0x592111=this;return new Promise(function(_0x528e1c,_0x1d5943){return db[_0xf5a3('0x17')][_0xf5a3('0x18')]({'raw':_0x4ede4c[_0xf5a3('0x19')]?_0x4ede4c[_0xf5a3('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x4ede4c[_0xf5a3('0x19')]?_0x4ede4c[_0xf5a3('0x19')][_0xf5a3('0x1a')]||null:null,'attributes':_0x4ede4c[_0xf5a3('0x19')]?_0x4ede4c[_0xf5a3('0x19')]['attributes']||null:null,'limit':_0x4ede4c['options']?_0x4ede4c[_0xf5a3('0x19')]['limit']||null:null,'include':_0x4ede4c[_0xf5a3('0x19')]?_0x4ede4c['options'][_0xf5a3('0x1b')]?_['map'](_0x4ede4c[_0xf5a3('0x19')][_0xf5a3('0x1b')],function(_0x472829){return{'model':db[_0x472829[_0xf5a3('0x1c')]],'as':_0x472829['as'],'attributes':_0x472829[_0xf5a3('0x1d')],'include':_0x472829[_0xf5a3('0x1b')]?_[_0xf5a3('0x1e')](_0x472829[_0xf5a3('0x1b')],function(_0x22cad6){return{'model':db[_0x22cad6[_0xf5a3('0x1c')]],'as':_0x22cad6['as'],'attributes':_0x22cad6['attributes'],'include':_0x22cad6['include']?_[_0xf5a3('0x1e')](_0x22cad6[_0xf5a3('0x1b')],function(_0x314f49){return{'model':db[_0x314f49['model']],'as':_0x314f49['as'],'attributes':_0x314f49['attributes']};}):[]};}):[]};}):[]:[]})[_0xf5a3('0x1f')](function(_0x238b78){logger[_0xf5a3('0xd')](_0xf5a3('0x16'),_0x4ede4c);logger['debug']('GetTrunk',_0x4ede4c,JSON['stringify'](_0x238b78));_0x528e1c(_0x238b78);})[_0xf5a3('0x20')](function(_0x19624f){logger[_0xf5a3('0x11')](_0xf5a3('0x16'),_0x19624f[_0xf5a3('0x13')],_0x4ede4c);_0x1d5943(_0x592111['error'](0x1f4,_0x19624f[_0xf5a3('0x13')]));});});};exports['ShowTrunk']=function(_0x1bc9dc){var _0x4c4041=this;return new Promise(function(_0x57182a,_0xcc8613){return db['Trunk']['find']({'raw':_0x1bc9dc[_0xf5a3('0x19')]?_0x1bc9dc[_0xf5a3('0x19')][_0xf5a3('0x21')]===undefined?!![]:![]:!![],'where':_0x1bc9dc[_0xf5a3('0x19')]?_0x1bc9dc['options'][_0xf5a3('0x1a')]||null:null,'attributes':_0x1bc9dc['options']?_0x1bc9dc[_0xf5a3('0x19')][_0xf5a3('0x1d')]||null:null,'include':_0x1bc9dc['options']?_0x1bc9dc[_0xf5a3('0x19')][_0xf5a3('0x1b')]?_[_0xf5a3('0x1e')](_0x1bc9dc[_0xf5a3('0x19')][_0xf5a3('0x1b')],function(_0x1ce1e8){return{'model':db[_0x1ce1e8[_0xf5a3('0x1c')]],'as':_0x1ce1e8['as'],'attributes':_0x1ce1e8[_0xf5a3('0x1d')],'include':_0x1ce1e8['include']?_[_0xf5a3('0x1e')](_0x1ce1e8[_0xf5a3('0x1b')],function(_0x826514){return{'model':db[_0x826514[_0xf5a3('0x1c')]],'as':_0x826514['as'],'attributes':_0x826514[_0xf5a3('0x1d')],'include':_0x826514[_0xf5a3('0x1b')]?_['map'](_0x826514['include'],function(_0x2dd0b0){return{'model':db[_0x2dd0b0[_0xf5a3('0x1c')]],'as':_0x2dd0b0['as'],'attributes':_0x2dd0b0[_0xf5a3('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xf5a3('0x1f')](function(_0x29d447){logger[_0xf5a3('0xd')]('ShowTrunk',_0x1bc9dc);logger['debug'](_0xf5a3('0x22'),_0x1bc9dc,JSON[_0xf5a3('0x23')](_0x29d447));_0x57182a(_0x29d447);})[_0xf5a3('0x20')](function(_0x4e608f){logger[_0xf5a3('0x11')]('ShowTrunk',_0x4e608f['message'],_0x1bc9dc);_0xcc8613(_0x4c4041[_0xf5a3('0x11')](0x1f4,_0x4e608f['message']));});});};
\ No newline at end of file
index 2f62c6e..580d60d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1053=['show','/:id/avatar','getAvatar','/:id/contacts','getContacts','/:id/queues','getQueues','/:id/queues_rt','getVoiceQueuesRt','/:id/groups','getGroups','/:id/recordings','getRecordings','/:id/openchannel/interactions','/:id/mail/interactions','getSmsInteractions','/:id/fax/interactions','getTeams','/:id/lists','getLists','/:id/agents','getAgents','/:id/prefixes','getVoicePrefixes','/:id/fax_accounts','getFaxAccounts','getMailAccounts','getOpenchannelAccounts','/:id/sms_accounts','getSmsAccounts','/:id/chat_websites','getChatWebsites','/:id/square_projects','getSquareProjects','post','/create_many','bulkCreate','addContacts','create','addQueues','diskStorage','join','root','format','now','single','file','addAvatar','/:id/login','login','/:id/logout','/:id/pause','/:id/unpause','/:id/teams','addTeams','/:id/chat_interactions','addChatInteractions','/:id/mail_interactions','addMailInteractions','/:id/sms_interactions','addSmsInteractions','/:id/openchannel_interactions','addOpenchannelInteractions','addFaxAccounts','/:id/mail_accounts','addOpenchannelAccounts','addSquareProjects','update','put','changePassword','removeQueues','delete','removeTeams','destroy','removeChatInteractions','removeMailInteractions','removeFaxInteractions','removeSmsInteractions','removeOpenchannelInteractions','removeFaxAccounts','removeMailAccounts','/:id/openchannel_accounts','removeChatWebsites','removeSquareProjects','exports','multer','express','../../components/interaction/service','../../config/environment','./user.controller','get','index','isAuthenticated','describe','/:id'];(function(_0x593636,_0x5d0757){var _0x5b20f1=function(_0x42ce3f){while(--_0x42ce3f){_0x593636['push'](_0x593636['shift']());}};_0x5b20f1(++_0x5d0757);}(_0x1053,0x113));var _0x3105=function(_0x2b98d4,_0x1de753){_0x2b98d4=_0x2b98d4-0x0;var _0x76ce5b=_0x1053[_0x2b98d4];return _0x76ce5b;};'use strict';var multer=require(_0x3105('0x0'));var util=require('util');var path=require('path');var express=require(_0x3105('0x1'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x3105('0x2'));var config=require(_0x3105('0x3'));var controller=require(_0x3105('0x4'));router[_0x3105('0x5')]('/',auth['isAuthenticated'](),controller[_0x3105('0x6')]);router[_0x3105('0x5')]('/describe',auth[_0x3105('0x7')](),controller[_0x3105('0x8')]);router[_0x3105('0x5')](_0x3105('0x9'),auth[_0x3105('0x7')](),controller[_0x3105('0xa')]);router[_0x3105('0x5')](_0x3105('0xb'),controller[_0x3105('0xc')]);router[_0x3105('0x5')](_0x3105('0xd'),auth[_0x3105('0x7')](),controller[_0x3105('0xe')]);router[_0x3105('0x5')](_0x3105('0xf'),auth['isAuthenticated'](),controller[_0x3105('0x10')]);router[_0x3105('0x5')](_0x3105('0x11'),auth[_0x3105('0x7')](),controller[_0x3105('0x12')]);router[_0x3105('0x5')](_0x3105('0x13'),auth['isAuthenticated'](),controller[_0x3105('0x14')]);router['get'](_0x3105('0x15'),auth[_0x3105('0x7')](),controller[_0x3105('0x16')]);router[_0x3105('0x5')]('/:id/chat/interactions',auth[_0x3105('0x7')](),controller['getChatInteractions']);router[_0x3105('0x5')](_0x3105('0x17'),auth[_0x3105('0x7')](),controller['getOpenchannelInteractions']);router[_0x3105('0x5')](_0x3105('0x18'),auth['isAuthenticated'](),controller['getMailInteractions']);router[_0x3105('0x5')]('/:id/sms/interactions',auth[_0x3105('0x7')](),controller[_0x3105('0x19')]);router[_0x3105('0x5')](_0x3105('0x1a'),auth[_0x3105('0x7')](),controller['getFaxInteractions']);router[_0x3105('0x5')]('/:id/teams',auth[_0x3105('0x7')](),controller[_0x3105('0x1b')]);router['get'](_0x3105('0x1c'),auth['isAuthenticated'](),controller[_0x3105('0x1d')]);router[_0x3105('0x5')](_0x3105('0x1e'),auth[_0x3105('0x7')](),controller[_0x3105('0x1f')]);router['get'](_0x3105('0x20'),auth['isAuthenticated'](),controller[_0x3105('0x21')]);router[_0x3105('0x5')](_0x3105('0x22'),auth[_0x3105('0x7')](),controller[_0x3105('0x23')]);router['get']('/:id/mail_accounts',auth[_0x3105('0x7')](),controller[_0x3105('0x24')]);router[_0x3105('0x5')]('/:id/openchannel_accounts',auth[_0x3105('0x7')](),controller[_0x3105('0x25')]);router[_0x3105('0x5')](_0x3105('0x26'),auth[_0x3105('0x7')](),controller[_0x3105('0x27')]);router[_0x3105('0x5')](_0x3105('0x28'),auth['isAuthenticated'](),controller[_0x3105('0x29')]);router[_0x3105('0x5')](_0x3105('0x2a'),auth[_0x3105('0x7')](),controller[_0x3105('0x2b')]);router[_0x3105('0x2c')](_0x3105('0x2d'),auth[_0x3105('0x7')](),controller[_0x3105('0x2e')]);router[_0x3105('0x2c')]('/:id/contacts',auth['isAuthenticated'](),controller[_0x3105('0x2f')]);router[_0x3105('0x2c')]('/',auth['isAuthenticated'](),controller[_0x3105('0x30')]);router[_0x3105('0x2c')](_0x3105('0xf'),auth['isAuthenticated'](),controller[_0x3105('0x31')]);var upload=multer({'storage':multer[_0x3105('0x32')]({'destination':function(_0x22c655,_0x184431,_0xed06fe){_0xed06fe(null,path[_0x3105('0x33')](config[_0x3105('0x34')],'server/files/images/'));},'filename':function(_0x158deb,_0x25e600,_0x363bc6){_0x363bc6(null,util[_0x3105('0x35')]('%s-%s',Date[_0x3105('0x36')](),_0x25e600['originalname']));}})});router['post'](_0x3105('0xb'),upload[_0x3105('0x37')](_0x3105('0x38')),controller[_0x3105('0x39')]);router[_0x3105('0x2c')](_0x3105('0x3a'),auth[_0x3105('0x7')](),controller[_0x3105('0x3b')]);router[_0x3105('0x2c')](_0x3105('0x3c'),auth[_0x3105('0x7')](),controller['logout']);router[_0x3105('0x2c')](_0x3105('0x3d'),auth['isAuthenticated'](),controller['pause']);router['post'](_0x3105('0x3e'),auth[_0x3105('0x7')](),controller['unpause']);router[_0x3105('0x2c')](_0x3105('0x3f'),auth[_0x3105('0x7')](),controller[_0x3105('0x40')]);router[_0x3105('0x2c')](_0x3105('0x41'),auth[_0x3105('0x7')](),controller[_0x3105('0x42')]);router['post'](_0x3105('0x43'),auth[_0x3105('0x7')](),controller[_0x3105('0x44')]);router['post']('/:id/fax_interactions',auth[_0x3105('0x7')](),controller['addFaxInteractions']);router[_0x3105('0x2c')](_0x3105('0x45'),auth[_0x3105('0x7')](),controller[_0x3105('0x46')]);router[_0x3105('0x2c')](_0x3105('0x47'),auth[_0x3105('0x7')](),controller[_0x3105('0x48')]);router['post'](_0x3105('0x22'),auth[_0x3105('0x7')](),controller[_0x3105('0x49')]);router[_0x3105('0x2c')](_0x3105('0x4a'),auth[_0x3105('0x7')](),controller['addMailAccounts']);router[_0x3105('0x2c')]('/:id/openchannel_accounts',auth['isAuthenticated'](),controller[_0x3105('0x4b')]);router[_0x3105('0x2c')](_0x3105('0x26'),auth['isAuthenticated'](),controller['addSmsAccounts']);router[_0x3105('0x2c')]('/:id/chat_websites',auth[_0x3105('0x7')](),controller['addChatWebsites']);router[_0x3105('0x2c')]('/:id/square_projects',auth['isAuthenticated'](),controller[_0x3105('0x4c')]);router['put']('/:id',auth['isAuthenticated'](),controller[_0x3105('0x4d')]);router[_0x3105('0x4e')]('/:id/password',auth['isAuthenticated'](),controller[_0x3105('0x4f')]);router['delete']('/:id/queues',auth['isAuthenticated'](),controller[_0x3105('0x50')]);router[_0x3105('0x51')]('/:id/teams',auth[_0x3105('0x7')](),controller[_0x3105('0x52')]);router['delete'](_0x3105('0x9'),auth[_0x3105('0x7')](),controller[_0x3105('0x53')]);router[_0x3105('0x51')](_0x3105('0x41'),auth[_0x3105('0x7')](),controller[_0x3105('0x54')]);router[_0x3105('0x51')](_0x3105('0x43'),auth[_0x3105('0x7')](),controller[_0x3105('0x55')]);router['delete']('/:id/fax_interactions',auth[_0x3105('0x7')](),controller[_0x3105('0x56')]);router[_0x3105('0x51')](_0x3105('0x45'),auth[_0x3105('0x7')](),controller[_0x3105('0x57')]);router[_0x3105('0x51')](_0x3105('0x47'),auth[_0x3105('0x7')](),controller[_0x3105('0x58')]);router['delete'](_0x3105('0x22'),auth[_0x3105('0x7')](),controller[_0x3105('0x59')]);router[_0x3105('0x51')](_0x3105('0x4a'),auth['isAuthenticated'](),controller[_0x3105('0x5a')]);router['delete'](_0x3105('0x5b'),auth['isAuthenticated'](),controller['removeOpenchannelAccounts']);router[_0x3105('0x51')](_0x3105('0x26'),auth['isAuthenticated'](),controller['removeSmsAccounts']);router['delete'](_0x3105('0x28'),auth[_0x3105('0x7')](),controller[_0x3105('0x5c')]);router[_0x3105('0x51')](_0x3105('0x2a'),auth[_0x3105('0x7')](),controller[_0x3105('0x5d')]);module[_0x3105('0x5e')]=router;
\ No newline at end of file
+var _0xee46=['file','/:id/login','logout','/:id/pause','unpause','/:id/teams','addTeams','/:id/chat_interactions','/:id/fax_interactions','addFaxInteractions','/:id/sms_interactions','addSmsInteractions','/:id/openchannel_interactions','addOpenchannelInteractions','addMailAccounts','addSmsAccounts','addChatWebsites','addSquareProjects','put','update','changePassword','delete','removeQueues','removeTeams','destroy','removeChatInteractions','removeMailInteractions','removeFaxInteractions','removeSmsInteractions','removeOpenchannelInteractions','removeMailAccounts','removeOpenchannelAccounts','removeChatWebsites','removeSquareProjects','exports','multer','path','express','../../components/interaction/service','./user.controller','isAuthenticated','index','get','/describe','/:id','/:id/avatar','getAvatar','/:id/contacts','getContacts','getQueues','/:id/queues_rt','getGroups','/:id/recordings','/:id/chat/interactions','getChatInteractions','/:id/mail/interactions','getMailInteractions','/:id/sms/interactions','getSmsInteractions','/:id/fax/interactions','getTeams','/:id/agents','getAgents','/:id/prefixes','getVoicePrefixes','/:id/fax_accounts','getFaxAccounts','/:id/mail_accounts','/:id/openchannel_accounts','getOpenchannelAccounts','/:id/sms_accounts','getSmsAccounts','/:id/chat_websites','getChatWebsites','/:id/square_projects','getSquareProjects','post','/create_many','bulkCreate','create','/:id/queues','addQueues','diskStorage','join','server/files/images/','format','%s-%s','now','originalname','single'];(function(_0x3091f5,_0x10a2f6){var _0x4f0d5e=function(_0x15e46c){while(--_0x15e46c){_0x3091f5['push'](_0x3091f5['shift']());}};_0x4f0d5e(++_0x10a2f6);}(_0xee46,0x131));var _0x6ee4=function(_0x4843ed,_0xd6f8b7){_0x4843ed=_0x4843ed-0x0;var _0x322b49=_0xee46[_0x4843ed];return _0x322b49;};'use strict';var multer=require(_0x6ee4('0x0'));var util=require('util');var path=require(_0x6ee4('0x1'));var express=require(_0x6ee4('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x6ee4('0x3'));var config=require('../../config/environment');var controller=require(_0x6ee4('0x4'));router['get']('/',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x6')]);router[_0x6ee4('0x7')](_0x6ee4('0x8'),auth[_0x6ee4('0x5')](),controller['describe']);router[_0x6ee4('0x7')](_0x6ee4('0x9'),auth[_0x6ee4('0x5')](),controller['show']);router['get'](_0x6ee4('0xa'),controller[_0x6ee4('0xb')]);router[_0x6ee4('0x7')](_0x6ee4('0xc'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0xd')]);router[_0x6ee4('0x7')]('/:id/queues',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0xe')]);router[_0x6ee4('0x7')](_0x6ee4('0xf'),auth[_0x6ee4('0x5')](),controller['getVoiceQueuesRt']);router['get']('/:id/groups',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x10')]);router['get'](_0x6ee4('0x11'),auth['isAuthenticated'](),controller['getRecordings']);router[_0x6ee4('0x7')](_0x6ee4('0x12'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x13')]);router[_0x6ee4('0x7')]('/:id/openchannel/interactions',auth[_0x6ee4('0x5')](),controller['getOpenchannelInteractions']);router[_0x6ee4('0x7')](_0x6ee4('0x14'),auth['isAuthenticated'](),controller[_0x6ee4('0x15')]);router[_0x6ee4('0x7')](_0x6ee4('0x16'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x17')]);router[_0x6ee4('0x7')](_0x6ee4('0x18'),auth[_0x6ee4('0x5')](),controller['getFaxInteractions']);router['get']('/:id/teams',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x19')]);router[_0x6ee4('0x7')]('/:id/lists',auth[_0x6ee4('0x5')](),controller['getLists']);router[_0x6ee4('0x7')](_0x6ee4('0x1a'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x1b')]);router[_0x6ee4('0x7')](_0x6ee4('0x1c'),auth['isAuthenticated'](),controller[_0x6ee4('0x1d')]);router[_0x6ee4('0x7')](_0x6ee4('0x1e'),auth['isAuthenticated'](),controller[_0x6ee4('0x1f')]);router[_0x6ee4('0x7')](_0x6ee4('0x20'),auth[_0x6ee4('0x5')](),controller['getMailAccounts']);router['get'](_0x6ee4('0x21'),auth['isAuthenticated'](),controller[_0x6ee4('0x22')]);router[_0x6ee4('0x7')](_0x6ee4('0x23'),auth['isAuthenticated'](),controller[_0x6ee4('0x24')]);router[_0x6ee4('0x7')](_0x6ee4('0x25'),auth['isAuthenticated'](),controller[_0x6ee4('0x26')]);router['get'](_0x6ee4('0x27'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x28')]);router[_0x6ee4('0x29')](_0x6ee4('0x2a'),auth['isAuthenticated'](),controller[_0x6ee4('0x2b')]);router[_0x6ee4('0x29')](_0x6ee4('0xc'),auth[_0x6ee4('0x5')](),controller['addContacts']);router[_0x6ee4('0x29')]('/',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x2c')]);router['post'](_0x6ee4('0x2d'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x2e')]);var upload=multer({'storage':multer[_0x6ee4('0x2f')]({'destination':function(_0x1e68cb,_0xb9b6e8,_0xd05f33){_0xd05f33(null,path[_0x6ee4('0x30')](config['root'],_0x6ee4('0x31')));},'filename':function(_0x15178b,_0x266d39,_0x549879){_0x549879(null,util[_0x6ee4('0x32')](_0x6ee4('0x33'),Date[_0x6ee4('0x34')](),_0x266d39[_0x6ee4('0x35')]));}})});router['post'](_0x6ee4('0xa'),upload[_0x6ee4('0x36')](_0x6ee4('0x37')),controller['addAvatar']);router['post'](_0x6ee4('0x38'),auth[_0x6ee4('0x5')](),controller['login']);router[_0x6ee4('0x29')]('/:id/logout',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x39')]);router[_0x6ee4('0x29')](_0x6ee4('0x3a'),auth['isAuthenticated'](),controller['pause']);router[_0x6ee4('0x29')]('/:id/unpause',auth['isAuthenticated'](),controller[_0x6ee4('0x3b')]);router[_0x6ee4('0x29')](_0x6ee4('0x3c'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x3d')]);router[_0x6ee4('0x29')](_0x6ee4('0x3e'),auth['isAuthenticated'](),controller['addChatInteractions']);router['post']('/:id/mail_interactions',auth['isAuthenticated'](),controller['addMailInteractions']);router[_0x6ee4('0x29')](_0x6ee4('0x3f'),auth['isAuthenticated'](),controller[_0x6ee4('0x40')]);router[_0x6ee4('0x29')](_0x6ee4('0x41'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x42')]);router[_0x6ee4('0x29')](_0x6ee4('0x43'),auth['isAuthenticated'](),controller[_0x6ee4('0x44')]);router['post'](_0x6ee4('0x1e'),auth[_0x6ee4('0x5')](),controller['addFaxAccounts']);router[_0x6ee4('0x29')](_0x6ee4('0x20'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x45')]);router[_0x6ee4('0x29')](_0x6ee4('0x21'),auth[_0x6ee4('0x5')](),controller['addOpenchannelAccounts']);router[_0x6ee4('0x29')](_0x6ee4('0x23'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x46')]);router[_0x6ee4('0x29')](_0x6ee4('0x25'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x47')]);router[_0x6ee4('0x29')](_0x6ee4('0x27'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x48')]);router[_0x6ee4('0x49')](_0x6ee4('0x9'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x4a')]);router[_0x6ee4('0x49')]('/:id/password',auth['isAuthenticated'](),controller[_0x6ee4('0x4b')]);router[_0x6ee4('0x4c')](_0x6ee4('0x2d'),auth['isAuthenticated'](),controller[_0x6ee4('0x4d')]);router['delete'](_0x6ee4('0x3c'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x4e')]);router['delete']('/:id',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x4f')]);router['delete'](_0x6ee4('0x3e'),auth['isAuthenticated'](),controller[_0x6ee4('0x50')]);router[_0x6ee4('0x4c')]('/:id/mail_interactions',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x51')]);router[_0x6ee4('0x4c')]('/:id/fax_interactions',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x52')]);router[_0x6ee4('0x4c')](_0x6ee4('0x41'),auth['isAuthenticated'](),controller[_0x6ee4('0x53')]);router[_0x6ee4('0x4c')]('/:id/openchannel_interactions',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x54')]);router[_0x6ee4('0x4c')]('/:id/fax_accounts',auth[_0x6ee4('0x5')](),controller['removeFaxAccounts']);router[_0x6ee4('0x4c')](_0x6ee4('0x20'),auth['isAuthenticated'](),controller[_0x6ee4('0x55')]);router[_0x6ee4('0x4c')]('/:id/openchannel_accounts',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x56')]);router[_0x6ee4('0x4c')](_0x6ee4('0x23'),auth[_0x6ee4('0x5')](),controller['removeSmsAccounts']);router[_0x6ee4('0x4c')](_0x6ee4('0x25'),auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x57')]);router[_0x6ee4('0x4c')]('/:id/square_projects',auth[_0x6ee4('0x5')](),controller[_0x6ee4('0x58')]);module[_0x6ee4('0x59')]=router;
\ No newline at end of file
index c7f21bd..44ef70b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf5c2=['showWebBar','get','isArray','wss','encryption','avpf','force_avp','icesupport','dtlsenable','dtlsverify','dtlssetup','dtlscertfile','dtlsprivatekey','rtcp_mux','/etc/pki/tls/certs/motion.crt','/etc/pki/tls/private/motion.key','permissions','map','sequelize','moment','util','lodash','exports','STRING','setDataValue','name','defaultuser','fullname','callerid','format','getDataValue','email','toLowerCase','admin','agent','telephone','local','internal','accountcode','BOOLEAN','DEFAULT\x20PAUSE','DATE','INTEGER','ENUM','user','peer','friend','ALLOWED_PASSED_SCREEN','ALLOWED_FAILED_SCREEN','ALLOWED','PROHIB_NOT_SCREENED','PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN','PROHIB','udp','transport','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]','rfc2833','shortinfo','inband','yes','nonat','outgoing','force_rport,comedia','nat','split','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]','ulaw;alaw;gsm','join','allow','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22gsm\x22]','insecure','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]','never','\x22\x22\x20<>','always','accept','refuse','originate','uas','certificate','active','passive','actpass'];(function(_0x1be156,_0x5c98b5){var _0x5b6634=function(_0x52988f){while(--_0x52988f){_0x1be156['push'](_0x1be156['shift']());}};_0x5b6634(++_0x5c98b5);}(_0xf5c2,0x10e));var _0x2f5c=function(_0x25662e,_0x4cec68){_0x25662e=_0x25662e-0x0;var _0x59b7bc=_0xf5c2[_0x25662e];return _0x59b7bc;};'use strict';var Sequelize=require(_0x2f5c('0x0'));var moment=require(_0x2f5c('0x1'));var util=require(_0x2f5c('0x2'));var _=require(_0x2f5c('0x3'));module[_0x2f5c('0x4')]={'name':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':![],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i},'set':function(_0xe436f8){this[_0x2f5c('0x6')](_0x2f5c('0x7'),_0xe436f8);this[_0x2f5c('0x6')](_0x2f5c('0x8'),_0xe436f8);},'comment':'The\x20name\x20of\x20the\x20user'},'fullname':{'type':Sequelize['STRING'],'allowNull':![],'set':function(_0x1cb2a5){this['setDataValue'](_0x2f5c('0x9'),_0x1cb2a5);this['setDataValue'](_0x2f5c('0xa'),util[_0x2f5c('0xb')]('\x22%s\x22\x20<%s>',_0x1cb2a5,this[_0x2f5c('0xc')]('internal')));}},'alias':{'type':Sequelize[_0x2f5c('0x5')]},'email':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0x2f5c('0xd'),'validate':{'isEmail':!![]},'set':function(_0x1a7a32){if(_0x1a7a32){this[_0x2f5c('0x6')](_0x2f5c('0xd'),_0x1a7a32[_0x2f5c('0xe')]());}}},'role':{'type':Sequelize['ENUM'](_0x2f5c('0xf'),'user',_0x2f5c('0x10'),_0x2f5c('0x11')),'allowNull':![]},'password':{'type':Sequelize['STRING'],'allowNull':![],'validate':{'notEmpty':!![]}},'provider':{'type':Sequelize['STRING'],'defaultValue':_0x2f5c('0x12')},'internal':{'type':Sequelize['INTEGER'](0xb),'allowNull':![],'unique':_0x2f5c('0x13'),'set':function(_0x24a4f1){this[_0x2f5c('0x6')](_0x2f5c('0x13'),_0x24a4f1);this[_0x2f5c('0x6')](_0x2f5c('0x14'),_0x24a4f1);this[_0x2f5c('0x6')]('callerid',util[_0x2f5c('0xb')]('\x22%s\x22\x20<%s>',this['getDataValue'](_0x2f5c('0x9')),_0x24a4f1));}},'salt':{'type':Sequelize[_0x2f5c('0x5')]},'phone':{'type':Sequelize[_0x2f5c('0x5')]},'mobile':{'type':Sequelize[_0x2f5c('0x5')]},'address':{'type':Sequelize[_0x2f5c('0x5')]},'zipcode':{'type':Sequelize[_0x2f5c('0x5')]},'userpic':{'type':Sequelize[_0x2f5c('0x5')]},'city':{'type':Sequelize['STRING']},'country':{'type':Sequelize[_0x2f5c('0x5')]},'online':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'lastLoginAt':{'type':Sequelize['DATE']},'voicePause':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'chatPause':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'mailPause':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'faxPause':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'smsPause':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'openchannelPause':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'pauseType':{'type':Sequelize['STRING'],'defaultValue':_0x2f5c('0x16')},'lastPauseAt':{'type':Sequelize[_0x2f5c('0x17')]},'chatCapacity':{'type':Sequelize[_0x2f5c('0x18')],'defaultValue':0x0},'mailCapacity':{'type':Sequelize[_0x2f5c('0x18')],'defaultValue':0x0},'faxCapacity':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'smsCapacity':{'type':Sequelize[_0x2f5c('0x18')],'defaultValue':0x0},'openchannelCapacity':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'phoneBarAutoAnswer':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'phoneBarEnableSettings':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':!![]},'phoneBarListenPort':{'type':Sequelize['INTEGER'](0x5),'defaultValue':0x13c4},'phoneBarExpires':{'type':Sequelize[_0x2f5c('0x18')](0x5),'defaultValue':0x78},'phoneBarRemoteControl':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarRemoteControlPort':{'type':Sequelize['INTEGER'],'defaultValue':0x26a0},'phoneBarEnableRecording':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarRingInUse':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'chanspy':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'description':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'host':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![],'defaultValue':'dynamic'},'ipaddr':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'port':{'type':Sequelize[_0x2f5c('0x18')](0x5),'allowNull':!![]},'regseconds':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'fullcontact':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'regserver':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'useragent':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'lastms':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'type':{'type':Sequelize[_0x2f5c('0x19')]('friend',_0x2f5c('0x1a'),_0x2f5c('0x1b')),'allowNull':!![],'defaultValue':_0x2f5c('0x1c')},'context':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![],'defaultValue':'from-sip'},'callingpres':{'type':Sequelize[_0x2f5c('0x19')]('ALLOWED_NOT_SCREENED',_0x2f5c('0x1d'),_0x2f5c('0x1e'),_0x2f5c('0x1f'),_0x2f5c('0x20'),_0x2f5c('0x21'),_0x2f5c('0x22'),_0x2f5c('0x23')),'allowNull':!![]},'deny':{'type':Sequelize['STRING'],'allowNull':!![]},'permit':{'type':Sequelize['STRING'],'allowNull':!![]},'secret':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'md5secret':{'type':Sequelize['STRING'],'allowNull':!![]},'remotesecret':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'transport':{'type':Sequelize['STRING'],'allowNull':!![],'defaultValue':_0x2f5c('0x24'),'set':function(_0x252191){this[_0x2f5c('0x6')]('transport',_0x252191?_0x252191['join'](','):null);},'get':function(){return this[_0x2f5c('0xc')]('transport')?this['getDataValue'](_0x2f5c('0x25'))['split'](','):null;},'comment':_0x2f5c('0x26')},'dtmfmode':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x27'),'info',_0x2f5c('0x28'),_0x2f5c('0x29'),'auto'),'allowNull':!![],'defaultValue':_0x2f5c('0x27')},'directmedia':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no',_0x2f5c('0x2b'),'update',_0x2f5c('0x2c')),'allowNull':!![],'defaultValue':'no'},'directrtpsetup':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![],'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'directmediadeny':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'nat':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![],'defaultValue':_0x2f5c('0x2d'),'set':function(_0x172921){this[_0x2f5c('0x6')](_0x2f5c('0x2e'),_0x172921?_0x172921['join'](','):null);},'get':function(){return this['getDataValue']('nat')?this[_0x2f5c('0xc')](_0x2f5c('0x2e'))[_0x2f5c('0x2f')](','):null;},'comment':_0x2f5c('0x30')},'callgroup':{'type':Sequelize['STRING']},'namedcallgroup':{'type':Sequelize[_0x2f5c('0x5')]},'pickupgroup':{'type':Sequelize[_0x2f5c('0x5')]},'namedpickupgroup':{'type':Sequelize[_0x2f5c('0x5')]},'language':{'type':Sequelize['STRING'],'defaultValue':'en'},'tonezone':{'type':Sequelize[_0x2f5c('0x5')]},'disallow':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'all'},'allow':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':![],'defaultValue':_0x2f5c('0x31'),'set':function(_0x4c8bd0){this[_0x2f5c('0x6')]('allow',_0x4c8bd0?_0x4c8bd0[_0x2f5c('0x32')](';'):_0x2f5c('0x31'));},'get':function(){return this[_0x2f5c('0xc')](_0x2f5c('0x33'))?this[_0x2f5c('0xc')](_0x2f5c('0x33'))[_0x2f5c('0x2f')](';'):null;},'comment':_0x2f5c('0x34')},'autoframing':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'insecure':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![],'set':function(_0x5e56cd){this[_0x2f5c('0x6')](_0x2f5c('0x35'),_0x5e56cd?_0x5e56cd[_0x2f5c('0x32')](','):null);},'get':function(){return this[_0x2f5c('0xc')](_0x2f5c('0x35'))?this['getDataValue'](_0x2f5c('0x35'))['split'](','):null;},'comment':_0x2f5c('0x36')},'trustrpid':{'type':Sequelize[_0x2f5c('0x19')]('yes','no'),'allowNull':!![],'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize['ENUM'](_0x2f5c('0x2a'),'no'),'allowNull':!![],'defaultValue':'no'},'progressinband':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no',_0x2f5c('0x37')),'allowNull':!![]},'promiscredir':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'useclientcode':{'type':Sequelize['ENUM'](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'accountcode':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'setvar':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'callerid':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![],'defaultValue':_0x2f5c('0x38')},'amaflags':{'type':Sequelize['STRING'],'allowNull':!![]},'callcounter':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![],'defaultValue':_0x2f5c('0x2a')},'busylevel':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'allowoverlap':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'allowsubscribe':{'type':Sequelize['ENUM']('yes','no'),'allowNull':!![]},'allowtransfer':{'type':Sequelize['ENUM'](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'ignoresdpversion':{'type':Sequelize['ENUM'](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'subscribecontext':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'template':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'videosupport':{'type':Sequelize['ENUM'](_0x2f5c('0x2a'),'no',_0x2f5c('0x39')),'allowNull':!![],'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'rfc2833compensate':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'mailbox':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'session_timers':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x3a'),_0x2f5c('0x3b'),_0x2f5c('0x3c')),'allowNull':!![]},'session_expires':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'session_minse':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'session_refresher':{'type':Sequelize[_0x2f5c('0x19')]('uac',_0x2f5c('0x3d')),'allowNull':!![],'defaultValue':'uas'},'t38pt_usertpsource':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'regexten':{'type':Sequelize['STRING'],'allowNull':!![]},'fromdomain':{'type':Sequelize['STRING'],'allowNull':!![]},'fromuser':{'type':Sequelize['STRING'],'allowNull':!![]},'qualify':{'type':Sequelize[_0x2f5c('0x19')]('yes','no'),'allowNull':!![],'defaultValue':_0x2f5c('0x2a')},'keepalive':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'defaultip':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'defaultuser':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'rtptimeout':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'rtpholdtimeout':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'rtpkeepalive':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'sendrpid':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![],'defaultValue':'no'},'outboundproxy':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'callbackextension':{'type':Sequelize['STRING'],'allowNull':!![]},'timert1':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'timerb':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'qualifyfreq':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'contactpermit':{'type':Sequelize['STRING'],'allowNull':!![]},'contactdeny':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'contactacl':{'type':Sequelize['STRING'],'allowNull':!![]},'unsolicited_mailbox':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'use_q850_reason':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'maxforwards':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'encryption':{'type':Sequelize[_0x2f5c('0x19')]('yes','no'),'allowNull':!![],'defaultValue':'no'},'avpf':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'force_avp':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'icesupport':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'dtlsenable':{'type':Sequelize['ENUM'](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'dtlsverify':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no','fingerprint',_0x2f5c('0x3e')),'allowNull':!![]},'dtlsrekey':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![]},'dtlscertfile':{'type':Sequelize['STRING'],'allowNull':!![]},'dtlsprivatekey':{'type':Sequelize['STRING'],'allowNull':!![]},'dtlscipher':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'dtlscafile':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'dtlscapath':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'dtlssetup':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x3f'),_0x2f5c('0x40'),_0x2f5c('0x41')),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'usereqphone':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![],'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'recordofffeature':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'call_limit':{'type':Sequelize[_0x2f5c('0x18')](0xb),'allowNull':!![],'defaultValue':0xa},'registertrying':{'type':Sequelize[_0x2f5c('0x19')](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'subscribemwi':{'type':Sequelize['ENUM'](_0x2f5c('0x2a'),'no'),'allowNull':!![]},'vmexten':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'mohinterpret':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'mohsuggest':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'parkinglot':{'type':Sequelize[_0x2f5c('0x5')],'allowNull':!![]},'canreinvite':{'type':Sequelize[_0x2f5c('0x19')]('yes','no',_0x2f5c('0x2b'),'update','update,nonat'),'allowNull':!![],'defaultValue':'no'},'loginInPause':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'resetPasswordToken':{'type':Sequelize['STRING']},'resetPasswordExpires':{'type':Sequelize['DATE']},'showWebBar':{'type':Sequelize[_0x2f5c('0x18')],'defaultValue':0x0,'set':function(_0x3382b4){this[_0x2f5c('0x6')](_0x2f5c('0x42'),_0x3382b4);var _0x11c3bb=this[_0x2f5c('0x43')]({'plain':!![]});switch(_0x3382b4){case 0x0:case 0x1:var _0x3d6919=_0x11c3bb[_0x2f5c('0x25')]?_[_0x2f5c('0x44')](_0x11c3bb['transport'])?_0x11c3bb[_0x2f5c('0x25')][_0x2f5c('0x32')]():_0x11c3bb[_0x2f5c('0x25')]:_0x2f5c('0x24');if(_0x3d6919===_0x2f5c('0x45')){_0x3d6919=_0x2f5c('0x24');}this[_0x2f5c('0x6')]('transport',_0x3d6919);this[_0x2f5c('0x6')](_0x2f5c('0x46'),'no');this[_0x2f5c('0x6')](_0x2f5c('0x47'),null);this[_0x2f5c('0x6')](_0x2f5c('0x48'),null);this[_0x2f5c('0x6')](_0x2f5c('0x49'),null);this[_0x2f5c('0x6')](_0x2f5c('0x4a'),null);this[_0x2f5c('0x6')](_0x2f5c('0x4b'),null);this[_0x2f5c('0x6')](_0x2f5c('0x4c'),null);this['setDataValue'](_0x2f5c('0x4d'),null);this[_0x2f5c('0x6')](_0x2f5c('0x4e'),null);this[_0x2f5c('0x6')](_0x2f5c('0x4f'),'no');break;case 0x2:this[_0x2f5c('0x6')](_0x2f5c('0x25'),'wss');this[_0x2f5c('0x6')](_0x2f5c('0x46'),'yes');this[_0x2f5c('0x6')](_0x2f5c('0x47'),'yes');this[_0x2f5c('0x6')](_0x2f5c('0x48'),_0x2f5c('0x2a'));this[_0x2f5c('0x6')](_0x2f5c('0x49'),_0x2f5c('0x2a'));this[_0x2f5c('0x6')](_0x2f5c('0x4a'),_0x2f5c('0x2a'));this['setDataValue'](_0x2f5c('0x4b'),'no');this[_0x2f5c('0x6')](_0x2f5c('0x4c'),_0x2f5c('0x41'));this['setDataValue']('dtlscertfile',_0x11c3bb[_0x2f5c('0x4d')]||_0x2f5c('0x50'));this[_0x2f5c('0x6')]('dtlsprivatekey',_0x11c3bb[_0x2f5c('0x4e')]||_0x2f5c('0x51'));this['setDataValue'](_0x2f5c('0x4f'),_0x2f5c('0x2a'));break;default:}}},'permissions':{'type':Sequelize['TEXT'],'set':function(_0x207f13){this['setDataValue'](_0x2f5c('0x52'),_0x207f13?_0x207f13[_0x2f5c('0x32')](','):[]);},'get':function(){return this[_0x2f5c('0xc')]('permissions')?_[_0x2f5c('0x53')](this[_0x2f5c('0xc')](_0x2f5c('0x52'))[_0x2f5c('0x2f')](','),function(_0x222460){return parseInt(_0x222460,0xa);}):[];}},'phoneBarUnconditionalNumber':{'type':Sequelize['STRING']},'phoneBarNoReplyNumber':{'type':Sequelize[_0x2f5c('0x5')]},'phoneBarBusyNumber':{'type':Sequelize[_0x2f5c('0x5')]},'phoneBarUnconditional':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'phoneBarNoReply':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'phoneBarBusy':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'phoneBarDnd':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':!![]},'phoneBarUnansweredCallBadge':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':!![]},'phoneBarEnableDtmfTone':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'phoneBarAutoAnswerDelay':{'type':Sequelize[_0x2f5c('0x18')],'defaultValue':0x0},'extensionMonitor':{'type':Sequelize[_0x2f5c('0x5')],'defaultValue':''},'crudPermissions':{'type':Sequelize[_0x2f5c('0x18')],'defaultValue':0x0},'rtcp_mux':{'type':Sequelize['ENUM'](_0x2f5c('0x2a'),'no'),'defaultValue':'no'},'allowmessenger':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':!![]},'phoneBarOutboundProxy':{'type':Sequelize[_0x2f5c('0x5')]},'passwordResetAt':{'type':Sequelize['DATE'],'defaultValue':null},'phoneBarEnableJaws':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'phoneBarEnableVideoRecording':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]},'phoneBarPrefixRequired':{'type':Sequelize[_0x2f5c('0x15')],'defaultValue':![]}};
\ No newline at end of file
+var _0xa9ed=['PROHIB_NOT_SCREENED','PROHIB_PASSED_SCREEN','udp','transport','split','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]','rfc2833','info','shortinfo','inband','auto','yes','nonat','outgoing','force_rport,comedia','nat','join','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]','all','ulaw;alaw;gsm','allow','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22gsm\x22]','insecure','never','\x22\x22\x20<>','accept','refuse','originate','uac','uas','fingerprint','certificate','active','update','update,nonat','showWebBar','isArray','wss','avpf','force_avp','icesupport','dtlsenable','dtlsverify','dtlssetup','dtlscertfile','rtcp_mux','encryption','/etc/pki/tls/certs/motion.crt','dtlsprivatekey','TEXT','permissions','map','sequelize','util','STRING','setDataValue','The\x20name\x20of\x20the\x20user','fullname','callerid','\x22%s\x22\x20<%s>','internal','email','toLowerCase','ENUM','admin','user','agent','telephone','local','INTEGER','accountcode','getDataValue','BOOLEAN','DATE','DEFAULT\x20PAUSE','dynamic','friend','peer','from-sip','ALLOWED_NOT_SCREENED','ALLOWED_PASSED_SCREEN','ALLOWED'];(function(_0x52df4d,_0xe7da57){var _0x22ec44=function(_0x229a89){while(--_0x229a89){_0x52df4d['push'](_0x52df4d['shift']());}};_0x22ec44(++_0xe7da57);}(_0xa9ed,0xd8));var _0xda9e=function(_0xa148b7,_0x2f3eb2){_0xa148b7=_0xa148b7-0x0;var _0x51efd3=_0xa9ed[_0xa148b7];return _0x51efd3;};'use strict';var Sequelize=require(_0xda9e('0x0'));var moment=require('moment');var util=require(_0xda9e('0x1'));var _=require('lodash');module['exports']={'name':{'type':Sequelize[_0xda9e('0x2')],'allowNull':![],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i},'set':function(_0x9fdd10){this[_0xda9e('0x3')]('name',_0x9fdd10);this[_0xda9e('0x3')]('defaultuser',_0x9fdd10);},'comment':_0xda9e('0x4')},'fullname':{'type':Sequelize[_0xda9e('0x2')],'allowNull':![],'set':function(_0x533695){this[_0xda9e('0x3')](_0xda9e('0x5'),_0x533695);this[_0xda9e('0x3')](_0xda9e('0x6'),util['format'](_0xda9e('0x7'),_0x533695,this['getDataValue'](_0xda9e('0x8'))));}},'alias':{'type':Sequelize['STRING']},'email':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0xda9e('0x9'),'validate':{'isEmail':!![]},'set':function(_0x1a8c94){if(_0x1a8c94){this[_0xda9e('0x3')](_0xda9e('0x9'),_0x1a8c94[_0xda9e('0xa')]());}}},'role':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0xc'),_0xda9e('0xd'),_0xda9e('0xe'),_0xda9e('0xf')),'allowNull':![]},'password':{'type':Sequelize[_0xda9e('0x2')],'allowNull':![],'validate':{'notEmpty':!![]}},'provider':{'type':Sequelize['STRING'],'defaultValue':_0xda9e('0x10')},'internal':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':![],'unique':_0xda9e('0x8'),'set':function(_0x310eee){this[_0xda9e('0x3')](_0xda9e('0x8'),_0x310eee);this[_0xda9e('0x3')](_0xda9e('0x12'),_0x310eee);this['setDataValue'](_0xda9e('0x6'),util['format'](_0xda9e('0x7'),this[_0xda9e('0x13')](_0xda9e('0x5')),_0x310eee));}},'salt':{'type':Sequelize['STRING']},'phone':{'type':Sequelize[_0xda9e('0x2')]},'mobile':{'type':Sequelize['STRING']},'address':{'type':Sequelize[_0xda9e('0x2')]},'zipcode':{'type':Sequelize['STRING']},'userpic':{'type':Sequelize['STRING']},'city':{'type':Sequelize['STRING']},'country':{'type':Sequelize[_0xda9e('0x2')]},'online':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'lastLoginAt':{'type':Sequelize[_0xda9e('0x15')]},'voicePause':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'chatPause':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'mailPause':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'faxPause':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'smsPause':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'openchannelPause':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'pauseType':{'type':Sequelize[_0xda9e('0x2')],'defaultValue':_0xda9e('0x16')},'lastPauseAt':{'type':Sequelize[_0xda9e('0x15')]},'chatCapacity':{'type':Sequelize[_0xda9e('0x11')],'defaultValue':0x0},'mailCapacity':{'type':Sequelize[_0xda9e('0x11')],'defaultValue':0x0},'faxCapacity':{'type':Sequelize[_0xda9e('0x11')],'defaultValue':0x0},'smsCapacity':{'type':Sequelize[_0xda9e('0x11')],'defaultValue':0x0},'openchannelCapacity':{'type':Sequelize[_0xda9e('0x11')],'defaultValue':0x0},'phoneBarAutoAnswer':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'phoneBarEnableSettings':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':!![]},'phoneBarListenPort':{'type':Sequelize[_0xda9e('0x11')](0x5),'defaultValue':0x13c4},'phoneBarExpires':{'type':Sequelize[_0xda9e('0x11')](0x5),'defaultValue':0x78},'phoneBarRemoteControl':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'phoneBarRemoteControlPort':{'type':Sequelize[_0xda9e('0x11')],'defaultValue':0x26a0},'phoneBarEnableRecording':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarRingInUse':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'chanspy':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'description':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'host':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![],'defaultValue':_0xda9e('0x17')},'ipaddr':{'type':Sequelize['STRING'],'allowNull':!![]},'port':{'type':Sequelize[_0xda9e('0x11')](0x5),'allowNull':!![]},'regseconds':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'fullcontact':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'regserver':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'useragent':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'lastms':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'type':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x18'),'user',_0xda9e('0x19')),'allowNull':!![],'defaultValue':_0xda9e('0x18')},'context':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![],'defaultValue':_0xda9e('0x1a')},'callingpres':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x1b'),_0xda9e('0x1c'),'ALLOWED_FAILED_SCREEN',_0xda9e('0x1d'),_0xda9e('0x1e'),_0xda9e('0x1f'),'PROHIB_FAILED_SCREEN','PROHIB'),'allowNull':!![]},'deny':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'permit':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'secret':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'md5secret':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'remotesecret':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'transport':{'type':Sequelize['STRING'],'allowNull':!![],'defaultValue':_0xda9e('0x20'),'set':function(_0x1880df){this[_0xda9e('0x3')](_0xda9e('0x21'),_0x1880df?_0x1880df['join'](','):null);},'get':function(){return this[_0xda9e('0x13')](_0xda9e('0x21'))?this[_0xda9e('0x13')](_0xda9e('0x21'))[_0xda9e('0x22')](','):null;},'comment':_0xda9e('0x23')},'dtmfmode':{'type':Sequelize['ENUM'](_0xda9e('0x24'),_0xda9e('0x25'),_0xda9e('0x26'),_0xda9e('0x27'),_0xda9e('0x28')),'allowNull':!![],'defaultValue':_0xda9e('0x24')},'directmedia':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no',_0xda9e('0x2a'),'update',_0xda9e('0x2b')),'allowNull':!![],'defaultValue':'no'},'directrtpsetup':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'allowNull':!![],'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'directmediadeny':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'nat':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![],'defaultValue':_0xda9e('0x2c'),'set':function(_0x77ee54){this[_0xda9e('0x3')](_0xda9e('0x2d'),_0x77ee54?_0x77ee54[_0xda9e('0x2e')](','):null);},'get':function(){return this[_0xda9e('0x13')](_0xda9e('0x2d'))?this[_0xda9e('0x13')](_0xda9e('0x2d'))['split'](','):null;},'comment':_0xda9e('0x2f')},'callgroup':{'type':Sequelize['STRING']},'namedcallgroup':{'type':Sequelize[_0xda9e('0x2')]},'pickupgroup':{'type':Sequelize['STRING']},'namedpickupgroup':{'type':Sequelize[_0xda9e('0x2')]},'language':{'type':Sequelize[_0xda9e('0x2')],'defaultValue':'en'},'tonezone':{'type':Sequelize['STRING']},'disallow':{'type':Sequelize[_0xda9e('0x2')],'allowNull':![],'defaultValue':_0xda9e('0x30')},'allow':{'type':Sequelize[_0xda9e('0x2')],'allowNull':![],'defaultValue':_0xda9e('0x31'),'set':function(_0x3864ea){this['setDataValue'](_0xda9e('0x32'),_0x3864ea?_0x3864ea['join'](';'):_0xda9e('0x31'));},'get':function(){return this[_0xda9e('0x13')](_0xda9e('0x32'))?this[_0xda9e('0x13')](_0xda9e('0x32'))[_0xda9e('0x22')](';'):null;},'comment':_0xda9e('0x33')},'autoframing':{'type':Sequelize[_0xda9e('0xb')]('yes','no'),'allowNull':!![]},'insecure':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![],'set':function(_0x5d812c){this[_0xda9e('0x3')](_0xda9e('0x34'),_0x5d812c?_0x5d812c[_0xda9e('0x2e')](','):null);},'get':function(){return this[_0xda9e('0x13')](_0xda9e('0x34'))?this[_0xda9e('0x13')](_0xda9e('0x34'))[_0xda9e('0x22')](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]'},'trustrpid':{'type':Sequelize['ENUM'](_0xda9e('0x29'),'no'),'allowNull':!![],'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize[_0xda9e('0xb')]('yes','no'),'allowNull':!![],'defaultValue':'no'},'progressinband':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no',_0xda9e('0x35')),'allowNull':!![]},'promiscredir':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'allowNull':!![]},'useclientcode':{'type':Sequelize['ENUM'](_0xda9e('0x29'),'no'),'allowNull':!![]},'accountcode':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'setvar':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'callerid':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![],'defaultValue':_0xda9e('0x36')},'amaflags':{'type':Sequelize['STRING'],'allowNull':!![]},'callcounter':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'allowNull':!![],'defaultValue':_0xda9e('0x29')},'busylevel':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'allowoverlap':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'allowNull':!![]},'allowsubscribe':{'type':Sequelize[_0xda9e('0xb')]('yes','no'),'allowNull':!![]},'allowtransfer':{'type':Sequelize['ENUM'](_0xda9e('0x29'),'no'),'allowNull':!![]},'ignoresdpversion':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'allowNull':!![]},'subscribecontext':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'template':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'videosupport':{'type':Sequelize[_0xda9e('0xb')]('yes','no','always'),'allowNull':!![],'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'rfc2833compensate':{'type':Sequelize[_0xda9e('0xb')]('yes','no'),'allowNull':!![]},'mailbox':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'session_timers':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x37'),_0xda9e('0x38'),_0xda9e('0x39')),'allowNull':!![]},'session_expires':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'session_minse':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'session_refresher':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x3a'),'uas'),'allowNull':!![],'defaultValue':_0xda9e('0x3b')},'t38pt_usertpsource':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'regexten':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'fromdomain':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'fromuser':{'type':Sequelize['STRING'],'allowNull':!![]},'qualify':{'type':Sequelize[_0xda9e('0xb')]('yes','no'),'allowNull':!![],'defaultValue':_0xda9e('0x29')},'keepalive':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'defaultip':{'type':Sequelize['STRING'],'allowNull':!![]},'defaultuser':{'type':Sequelize['STRING'],'allowNull':!![]},'rtptimeout':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'rtpholdtimeout':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'rtpkeepalive':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'sendrpid':{'type':Sequelize[_0xda9e('0xb')]('yes','no'),'allowNull':!![],'defaultValue':'no'},'outboundproxy':{'type':Sequelize['STRING'],'allowNull':!![]},'callbackextension':{'type':Sequelize['STRING'],'allowNull':!![]},'timert1':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'timerb':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'qualifyfreq':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'contactpermit':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'contactdeny':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'contactacl':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'unsolicited_mailbox':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'use_q850_reason':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'maxforwards':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'encryption':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'allowNull':!![],'defaultValue':'no'},'avpf':{'type':Sequelize[_0xda9e('0xb')]('yes','no'),'allowNull':!![]},'force_avp':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'allowNull':!![]},'icesupport':{'type':Sequelize['ENUM'](_0xda9e('0x29'),'no'),'allowNull':!![]},'dtlsenable':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'allowNull':!![]},'dtlsverify':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no',_0xda9e('0x3c'),_0xda9e('0x3d')),'allowNull':!![]},'dtlsrekey':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![]},'dtlscertfile':{'type':Sequelize['STRING'],'allowNull':!![]},'dtlsprivatekey':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'dtlscipher':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'dtlscafile':{'type':Sequelize['STRING'],'allowNull':!![]},'dtlscapath':{'type':Sequelize['STRING'],'allowNull':!![]},'dtlssetup':{'type':Sequelize['ENUM'](_0xda9e('0x3e'),'passive','actpass'),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'usereqphone':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'allowNull':!![],'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'recordofffeature':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'call_limit':{'type':Sequelize[_0xda9e('0x11')](0xb),'allowNull':!![],'defaultValue':0xa},'registertrying':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'allowNull':!![]},'subscribemwi':{'type':Sequelize[_0xda9e('0xb')]('yes','no'),'allowNull':!![]},'vmexten':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'mohinterpret':{'type':Sequelize['STRING'],'allowNull':!![]},'mohsuggest':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'parkinglot':{'type':Sequelize[_0xda9e('0x2')],'allowNull':!![]},'canreinvite':{'type':Sequelize[_0xda9e('0xb')]('yes','no',_0xda9e('0x2a'),_0xda9e('0x3f'),_0xda9e('0x40')),'allowNull':!![],'defaultValue':'no'},'loginInPause':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'resetPasswordToken':{'type':Sequelize['STRING']},'resetPasswordExpires':{'type':Sequelize['DATE']},'showWebBar':{'type':Sequelize[_0xda9e('0x11')],'defaultValue':0x0,'set':function(_0x29b105){this[_0xda9e('0x3')](_0xda9e('0x41'),_0x29b105);var _0x504863=this['get']({'plain':!![]});switch(_0x29b105){case 0x0:case 0x1:var _0x168c5b=_0x504863[_0xda9e('0x21')]?_[_0xda9e('0x42')](_0x504863['transport'])?_0x504863[_0xda9e('0x21')][_0xda9e('0x2e')]():_0x504863['transport']:_0xda9e('0x20');if(_0x168c5b===_0xda9e('0x43')){_0x168c5b=_0xda9e('0x20');}this['setDataValue']('transport',_0x168c5b);this[_0xda9e('0x3')]('encryption','no');this['setDataValue'](_0xda9e('0x44'),null);this[_0xda9e('0x3')](_0xda9e('0x45'),null);this['setDataValue'](_0xda9e('0x46'),null);this[_0xda9e('0x3')](_0xda9e('0x47'),null);this['setDataValue'](_0xda9e('0x48'),null);this[_0xda9e('0x3')](_0xda9e('0x49'),null);this['setDataValue'](_0xda9e('0x4a'),null);this[_0xda9e('0x3')]('dtlsprivatekey',null);this[_0xda9e('0x3')](_0xda9e('0x4b'),'no');break;case 0x2:this['setDataValue'](_0xda9e('0x21'),'wss');this['setDataValue'](_0xda9e('0x4c'),'yes');this['setDataValue'](_0xda9e('0x44'),_0xda9e('0x29'));this[_0xda9e('0x3')](_0xda9e('0x45'),'yes');this[_0xda9e('0x3')](_0xda9e('0x46'),_0xda9e('0x29'));this[_0xda9e('0x3')](_0xda9e('0x47'),_0xda9e('0x29'));this[_0xda9e('0x3')](_0xda9e('0x48'),'no');this[_0xda9e('0x3')](_0xda9e('0x49'),'actpass');this['setDataValue']('dtlscertfile',_0x504863[_0xda9e('0x4a')]||_0xda9e('0x4d'));this['setDataValue']('dtlsprivatekey',_0x504863[_0xda9e('0x4e')]||'/etc/pki/tls/private/motion.key');this['setDataValue'](_0xda9e('0x4b'),_0xda9e('0x29'));break;default:}}},'permissions':{'type':Sequelize[_0xda9e('0x4f')],'set':function(_0x573259){this['setDataValue'](_0xda9e('0x50'),_0x573259?_0x573259[_0xda9e('0x2e')](','):[]);},'get':function(){return this[_0xda9e('0x13')](_0xda9e('0x50'))?_[_0xda9e('0x51')](this[_0xda9e('0x13')](_0xda9e('0x50'))[_0xda9e('0x22')](','),function(_0x599e30){return parseInt(_0x599e30,0xa);}):[];}},'phoneBarUnconditionalNumber':{'type':Sequelize[_0xda9e('0x2')]},'phoneBarNoReplyNumber':{'type':Sequelize[_0xda9e('0x2')]},'phoneBarBusyNumber':{'type':Sequelize['STRING']},'phoneBarUnconditional':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarNoReply':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'phoneBarBusy':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'phoneBarDnd':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':!![]},'phoneBarUnansweredCallBadge':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':!![]},'phoneBarEnableDtmfTone':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarAutoAnswerDelay':{'type':Sequelize[_0xda9e('0x11')],'defaultValue':0x0},'extensionMonitor':{'type':Sequelize['STRING'],'defaultValue':''},'crudPermissions':{'type':Sequelize[_0xda9e('0x11')],'defaultValue':0x0},'rtcp_mux':{'type':Sequelize[_0xda9e('0xb')](_0xda9e('0x29'),'no'),'defaultValue':'no'},'allowmessenger':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':!![]},'phoneBarOutboundProxy':{'type':Sequelize[_0xda9e('0x2')]},'passwordResetAt':{'type':Sequelize[_0xda9e('0x15')],'defaultValue':null},'phoneBarEnableJaws':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarEnableVideoRecording':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]},'phoneBarPrefixRequired':{'type':Sequelize[_0xda9e('0x14')],'defaultValue':![]}};
\ No newline at end of file
index 24552d8..a4a7738 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf2e3=['create','changePassword','oldPassword','newPassword','Sequelize','ValidationError','Invalid\x20body\x20format.\x20Use\x20oldPassord\x20and\x20newPassword','authenticate','Wrong\x20credentials','New\x20password\x20must\x20be\x20different\x20from\x20old\x20password','Invalid\x20body\x20format.\x20Use\x20newPassword','Unauthorized','addQueues','loginInPause','isValidChannel','channel','Unknown\x20channel','capitalize','ids','voice','VoiceQueue','findAll','format','SIP','voicePause','penalty','UserVoiceQueueRt','upsert','removeQueues','remove','toLowerCase','Queues','addAvatar','userpic','file','filename','join','server/files/images/logos/default_profile.png','download','root','server/files/images/','getContacts','findOne','UserId','CmContact','describe','rows','Queue','Unknown\x20role','get','getVoiceQueuesRt','order','map','getGroups','ChatGroup','getRecordings','VoiceRecording','getChatInteractions','ChatInteraction','getOpenchannelInteractions','OpenchannelInteraction','MailInteraction','getSmsInteractions','SmsInteraction','getFaxInteractions','FaxInteraction','login','user:%s','user:forcelogout','remoteAddress','connection','each','MemberReport','YYYY-MM-DD\x20HH:mm:ss','all','LOGIN','push','PAUSE','LOGININPAUSE','logout','%s/%s','forEach','pause','QueuePause','updateAttributes','getChannels','type','DEFAULT\x20PAUSE','unpause','mailPause','chatPause','faxPause','openchannelPause','smsPause','pauseType','lastPauseAt','manual','chat','fax','openchannel','%s%s','Pause','getTeams','Team','addTeams','removeTeams','getLists','getAgents','Agents','getVoiceQueues','You\x20can\x27t\x20delete\x20yourself','addChatInteractions','spread','emit','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','user_has_sms_interactions:save','removeSmsInteractions','user_has_sms_interactions:remove','addOpenchannelInteractions','removeOpenchannelInteractions','user_has_openchannel_interactions:remove','getVoicePrefixes','VoicePrefix','getFaxAccounts','FaxAccount','addFaxAccounts','removeFaxAccounts','getMailAccounts','MailAccount','addMailAccounts','OpenchannelAccount','getOpenchannelAccounts','addOpenchannelAccounts','removeOpenchannelAccounts','getSmsAccounts','addSmsAccounts','removeSmsAccounts','ChatWebsite','addChatWebsites','removeChatWebsites','getSquareProjects','SquareProject','addSquareProjects','removeSquareProjects','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./user.socket','register','jayson/promise','client','http','request','then','info','User,\x20%s,\x20%s','request\x20sent','User,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','status','count','offset','limit','Content-Range','json','apply','reject','save','update','destroy','end','sendStatus','stack','name','send','index','User','rawAttributes','model','differenceBy','keys','password','salt','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','add','day','merge','sequelize','lower','filter','options','includeAll','include','show','params','find','bulkCreate','body','addContacts','omit','role','agent','telephone','admin','user','getLicense','telephones','isNil','count\x20%s:\x20%s','internal','Setting','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)','SELECT','from','voicemail','mailbox','VoiceMail','fullname','email','102','103','110','104','105','106','107','108','109','111'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xf2e3,0x9b));var _0x3f2e=function(_0x8a969d,_0x339d9f){_0x8a969d=_0x8a969d-0x0;var _0x1d8dc7=_0xf2e3[_0x8a969d];return _0x1d8dc7;};'use strict';var jsonpatch=require(_0x3f2e('0x0'));var rp=require('request-promise');var moment=require(_0x3f2e('0x1'));var BPromise=require(_0x3f2e('0x2'));var Mustache=require(_0x3f2e('0x3'));var util=require(_0x3f2e('0x4'));var path=require(_0x3f2e('0x5'));var sox=require(_0x3f2e('0x6'));var csv=require(_0x3f2e('0x7'));var ejs=require(_0x3f2e('0x8'));var fs=require('fs');var _=require(_0x3f2e('0x9'));var squel=require('squel');var crypto=require(_0x3f2e('0xa'));var jsforce=require(_0x3f2e('0xb'));var deskjs=require(_0x3f2e('0xc'));var toCsv=require(_0x3f2e('0x7'));var querystring=require(_0x3f2e('0xd'));var Papa=require(_0x3f2e('0xe'));var qs=require(_0x3f2e('0xf'));var logger=require(_0x3f2e('0x10'))(_0x3f2e('0x11'));var utils=require(_0x3f2e('0x12'));var config=require(_0x3f2e('0x13'));var db=require(_0x3f2e('0x14'))['db'];var socket=require(_0x3f2e('0x15'))({'host':_0x3f2e('0x16'),'port':0x18eb});require(_0x3f2e('0x17'))[_0x3f2e('0x18')](socket);var jayson=require(_0x3f2e('0x19'));var client=jayson[_0x3f2e('0x1a')][_0x3f2e('0x1b')]({'port':0x232a});function respondWithRpcPromise(_0x5a4da3,_0x27c697,_0xaa6ef5,_0x5471f9){return new BPromise(function(_0xe83663,_0x65a39){var _0x9dd50b=_0x5471f9||client;return _0x9dd50b[_0x3f2e('0x1c')](_0x5a4da3,_0xaa6ef5)[_0x3f2e('0x1d')](function(_0x57cba7){logger[_0x3f2e('0x1e')](_0x3f2e('0x1f'),_0x27c697,_0x3f2e('0x20'));logger['debug'](_0x3f2e('0x21'),_0x27c697,_0x3f2e('0x20'),JSON[_0x3f2e('0x22')](_0x57cba7));if(_0x57cba7[_0x3f2e('0x23')]){if(_0x57cba7[_0x3f2e('0x23')][_0x3f2e('0x24')]===0x1f4){logger[_0x3f2e('0x23')](_0x3f2e('0x1f'),_0x27c697,_0x57cba7[_0x3f2e('0x23')][_0x3f2e('0x25')]);return _0x65a39(_0x57cba7[_0x3f2e('0x23')]['message']);}logger[_0x3f2e('0x23')](_0x3f2e('0x1f'),_0x27c697,_0x57cba7[_0x3f2e('0x23')][_0x3f2e('0x25')]);return _0xe83663(_0x57cba7[_0x3f2e('0x23')]['message']);}else{logger['info'](_0x3f2e('0x1f'),_0x27c697,_0x3f2e('0x20'));_0xe83663(_0x57cba7[_0x3f2e('0x26')][_0x3f2e('0x25')]);}})[_0x3f2e('0x27')](function(_0x897971){logger['error']('User,\x20%s,\x20%s',_0x27c697,_0x897971);_0x65a39(_0x897971);});});}function respondWithStatusCode(_0xf81165,_0x37dab2){_0x37dab2=_0x37dab2||0xcc;return function(_0x5a66d6){if(_0x5a66d6){return _0xf81165['sendStatus'](_0x37dab2);}return _0xf81165[_0x3f2e('0x28')](_0x37dab2)['end']();};}function respondWithResult(_0x1b8c67,_0x401ed9){_0x401ed9=_0x401ed9||0xc8;return function(_0x515e32){if(_0x515e32){return _0x1b8c67['status'](_0x401ed9)['json'](_0x515e32);}};}function respondWithFilteredResult(_0x265bf1,_0x3d7631){return function(_0x4c61d9){if(_0x4c61d9){var _0x11a7cc=_0x4c61d9[_0x3f2e('0x29')],_0x47eca6=_0x3d7631[_0x3f2e('0x2a')],_0x1ad875=_0x3d7631[_0x3f2e('0x2a')]+_0x3d7631[_0x3f2e('0x2b')],_0x598541;if(_0x1ad875>=_0x11a7cc){_0x1ad875=_0x11a7cc;_0x598541=0xc8;}else{_0x598541=0xce;}_0x265bf1[_0x3f2e('0x28')](_0x598541);return _0x265bf1['set'](_0x3f2e('0x2c'),_0x47eca6+'-'+_0x1ad875+'/'+_0x11a7cc)[_0x3f2e('0x2d')](_0x4c61d9);}return null;};}function patchUpdates(_0x5eab38){return function(_0x528063){try{jsonpatch[_0x3f2e('0x2e')](_0x528063,_0x5eab38,!![]);}catch(_0x1e5db4){return BPromise[_0x3f2e('0x2f')](_0x1e5db4);}return _0x528063[_0x3f2e('0x30')]();};}function saveUpdates(_0x5452f5,_0x3eaaeb){return function(_0x465a94){if(_0x465a94){return _0x465a94[_0x3f2e('0x31')](_0x5452f5)['then'](function(_0x349ed4){return _0x349ed4;});}return null;};}function removeEntity(_0x2741d0,_0xa6a8ab){return function(_0x4c8a4b){if(_0x4c8a4b){return _0x4c8a4b[_0x3f2e('0x32')]()[_0x3f2e('0x1d')](function(){_0x2741d0[_0x3f2e('0x28')](0xcc)[_0x3f2e('0x33')]();});}};}function handleEntityNotFound(_0x7217d0,_0x46196e){return function(_0x50b698){if(!_0x50b698){_0x7217d0[_0x3f2e('0x34')](0x194);}return _0x50b698;};}function handleError(_0x3481f2,_0x3101c4){_0x3101c4=_0x3101c4||0x1f4;return function(_0x46953f){logger[_0x3f2e('0x23')](_0x46953f[_0x3f2e('0x35')]);if(_0x46953f[_0x3f2e('0x36')]){delete _0x46953f['name'];}_0x3481f2[_0x3f2e('0x28')](_0x3101c4)[_0x3f2e('0x37')](_0x46953f);};}exports[_0x3f2e('0x38')]=function(_0x239af7,_0x4e6161){var _0x5da5c3={},_0x5349d0={},_0x35ead3={'count':0x0,'rows':[]};var _0x2ba3b9=db[_0x3f2e('0x39')][_0x3f2e('0x3a')];_0x5349d0[_0x3f2e('0x3b')]=_[_0x3f2e('0x3c')](_[_0x3f2e('0x3d')](_0x2ba3b9),[_0x3f2e('0x3e'),_0x3f2e('0x3f')]);var _0x556b38={'dateStart':_0x239af7[_0x3f2e('0x40')][_0x3f2e('0x41')],'dateEnd':_0x239af7[_0x3f2e('0x40')][_0x3f2e('0x42')]};delete _0x239af7['query'][_0x3f2e('0x41')];delete _0x239af7[_0x3f2e('0x40')][_0x3f2e('0x42')];_0x5349d0[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x239af7[_0x3f2e('0x40')]);_0x5349d0[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x5349d0['model'],_0x5349d0[_0x3f2e('0x40')]);_0x5da5c3[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x5349d0[_0x3f2e('0x3b')],qs['fields'](_0x239af7[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x5da5c3['attributes']=_0x5da5c3[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x5da5c3['attributes']:_0x5349d0[_0x3f2e('0x3b')];if(!_0x239af7[_0x3f2e('0x40')][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x5da5c3['limit']=qs[_0x3f2e('0x2b')](_0x239af7[_0x3f2e('0x40')]['limit']);_0x5da5c3['offset']=qs[_0x3f2e('0x2a')](_0x239af7[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}_0x5da5c3['order']=qs[_0x3f2e('0x4a')](_0x239af7[_0x3f2e('0x40')][_0x3f2e('0x4a')]);_0x5da5c3[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x239af7[_0x3f2e('0x40')],_0x5349d0[_0x3f2e('0x43')]));if(_0x556b38[_0x3f2e('0x41')]){if(_0x556b38[_0x3f2e('0x42')]){_0x556b38['dateEnd']=moment(_0x556b38['dateEnd'])[_0x3f2e('0x4d')](0x1,_0x3f2e('0x4e'));}else{_0x556b38['dateEnd']=moment(_0x556b38['dateStart'])[_0x3f2e('0x4d')](0x1,_0x3f2e('0x4e'));}_[_0x3f2e('0x4f')](_0x5da5c3['where'],{'createdAt':{'$gte':_0x556b38[_0x3f2e('0x41')],'$lte':_0x556b38[_0x3f2e('0x42')]}});}if(_0x239af7[_0x3f2e('0x40')]['filter']){_0x5da5c3[_0x3f2e('0x4b')]=_[_0x3f2e('0x4f')](_0x5da5c3[_0x3f2e('0x4b')],{'$or':_['map'](_0x5da5c3[_0x3f2e('0x45')],function(_0x2d2044){return db[_0x3f2e('0x50')]['where'](db[_0x3f2e('0x50')]['fn']('lower',db[_0x3f2e('0x50')]['col'](_0x2d2044)),{'$like':db['sequelize']['fn'](_0x3f2e('0x51'),'%'+_0x239af7[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%')});})});}_0x5da5c3=_[_0x3f2e('0x4f')]({},_0x5da5c3,_0x239af7[_0x3f2e('0x53')]);var _0x5c9cda={'where':_0x5da5c3['where']};return db[_0x3f2e('0x39')][_0x3f2e('0x29')](_0x5c9cda)[_0x3f2e('0x1d')](function(_0x19bcea){_0x35ead3[_0x3f2e('0x29')]=_0x19bcea;if(_0x239af7[_0x3f2e('0x40')][_0x3f2e('0x54')]){_0x5da5c3[_0x3f2e('0x55')]=[{'all':!![]}];}return db[_0x3f2e('0x39')]['findAll'](_0x5da5c3);})['then'](function(_0x2fe0c3){_0x35ead3['rows']=_0x2fe0c3;return _0x35ead3;})[_0x3f2e('0x1d')](respondWithFilteredResult(_0x4e6161,_0x5da5c3))[_0x3f2e('0x27')](handleError(_0x4e6161,null));};exports[_0x3f2e('0x56')]=function(_0x3eca92,_0x4b6950){var _0xd871da={'raw':![],'where':{'id':_0x3eca92[_0x3f2e('0x57')]['id']}},_0x4e7491={};_0x4e7491[_0x3f2e('0x3b')]=_['differenceBy'](_[_0x3f2e('0x3d')](db['User'][_0x3f2e('0x3a')]),[_0x3f2e('0x3e'),_0x3f2e('0x3f')]);_0x4e7491['query']=_[_0x3f2e('0x3d')](_0x3eca92[_0x3f2e('0x40')]);_0x4e7491[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x4e7491[_0x3f2e('0x3b')],_0x4e7491[_0x3f2e('0x40')]);_0xd871da[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x4e7491[_0x3f2e('0x3b')],qs[_0x3f2e('0x46')](_0x3eca92['query'][_0x3f2e('0x46')]));_0xd871da[_0x3f2e('0x45')]=_0xd871da[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0xd871da[_0x3f2e('0x45')]:_0x4e7491[_0x3f2e('0x3b')];if(_0x3eca92[_0x3f2e('0x40')][_0x3f2e('0x54')]){_0xd871da['include']=[{'all':!![]}];}_0xd871da=_[_0x3f2e('0x4f')]({},_0xd871da,_0x3eca92[_0x3f2e('0x53')]);return db[_0x3f2e('0x39')][_0x3f2e('0x58')](_0xd871da)[_0x3f2e('0x1d')](handleEntityNotFound(_0x4b6950,null))['then'](respondWithResult(_0x4b6950,null))['catch'](handleError(_0x4b6950,null));};exports[_0x3f2e('0x59')]=function(_0x4609c3,_0x40f252){return db['User']['bulkCreate'](_0x4609c3['body'],{'raw':![],'individualHooks':!![]})[_0x3f2e('0x1d')](respondWithResult(_0x40f252,0xc9))[_0x3f2e('0x27')](handleError(_0x40f252,null));};exports[_0x3f2e('0x31')]=function(_0x217bdd,_0x359197){if(_0x217bdd['body']['id']){delete _0x217bdd[_0x3f2e('0x5a')]['id'];}return db[_0x3f2e('0x39')]['find']({'where':{'id':_0x217bdd[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x359197,null))[_0x3f2e('0x1d')](saveUpdates(_0x217bdd[_0x3f2e('0x5a')],null))['then'](respondWithResult(_0x359197,null))[_0x3f2e('0x27')](handleError(_0x359197,null));};exports['describe']=function(_0x4dc239,_0x793fbb){return db['User']['describe']()[_0x3f2e('0x1d')](respondWithResult(_0x793fbb,null))['catch'](handleError(_0x793fbb,null));};exports[_0x3f2e('0x5b')]=function(_0x36a8da,_0x15bd0f,_0x31605b){return db['User'][_0x3f2e('0x58')]({'where':{'id':_0x36a8da[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x15bd0f,null))[_0x3f2e('0x1d')](function(_0x5538aa){if(_0x5538aa){return _0x5538aa[_0x3f2e('0x5b')](_0x36a8da['body']['ids'],_[_0x3f2e('0x5c')](_0x36a8da[_0x3f2e('0x5a')],['ids','id'])||{});}})['then'](respondWithResult(_0x15bd0f,null))[_0x3f2e('0x27')](handleError(_0x15bd0f,null));};var getLicense=function(_0x27e810){return new BPromise(function(_0x32cd8e,_0x487daf){var _0x22b00a=0x0;_0x27e810[_0x3f2e('0x5a')][_0x3f2e('0x5d')]===_0x3f2e('0x5e')&&_0x32cd8e('agent\x20role');return db[_0x3f2e('0x39')]['count']({'where':{'$or':[{'role':_0x27e810[_0x3f2e('0x5a')][_0x3f2e('0x5d')]===_0x3f2e('0x5f')?_0x3f2e('0x5f'):[_0x3f2e('0x60'),_0x3f2e('0x61')]}]}})[_0x3f2e('0x1d')](function(_0x266f60){_0x22b00a=_0x266f60;return require('../../config/license/util')[_0x3f2e('0x62')]();})['then'](function(_0x48f0e5){var _0x29065c=_0x27e810[_0x3f2e('0x5a')]['role']===_0x3f2e('0x5f')?_0x3f2e('0x63'):'users';if(!_[_0x3f2e('0x64')](_0x48f0e5[_0x29065c])&&_0x22b00a>=_0x48f0e5[_0x29065c]){return _0x487daf({'message':'License\x20limit\x20reached'});}return _0x32cd8e(util['format'](_0x3f2e('0x65'),_0x29065c,_0x22b00a));})[_0x3f2e('0x27')](function(_0xab3c94){return _0x487daf(_0xab3c94);});});};exports['create']=function(_0x5be2ba,_0x42004d){return getLicense(_0x5be2ba)[_0x3f2e('0x1d')](function(_0x1ac6a3){if(!_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x66')]){var _0x3a8983;return db[_0x3f2e('0x67')][_0x3f2e('0x68')](0x1)[_0x3f2e('0x1d')](function(_0x10abd8){_0x3a8983=_0x10abd8[_0x3f2e('0x69')];return db[_0x3f2e('0x39')][_0x3f2e('0x6a')](_0x3f2e('0x66'));})[_0x3f2e('0x1d')](function(_0x24d30e){if(_[_0x3f2e('0x64')](_0x24d30e)){if(_0x3a8983){_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x66')]=_0x3a8983;}else{_0x5be2ba[_0x3f2e('0x5a')]['internal']=0x1;}}else{if(_[_0x3f2e('0x64')](_0x3a8983)||_0x3a8983==_0x24d30e){_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x66')]=_0x24d30e+0x1;}else if(_0x3a8983>_0x24d30e){_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x66')]=_0x3a8983;}else{return db[_0x3f2e('0x50')][_0x3f2e('0x40')](_0x3f2e('0x6b'),{'type':db[_0x3f2e('0x50')]['QueryTypes'][_0x3f2e('0x6c')]})['then'](function(_0x32088c){if(_0x32088c&&_0x32088c[_0x3f2e('0x47')]){for(var _0x5c72cb=0x0,_0x12e402=_0x32088c[_0x3f2e('0x47')];_0x5c72cb<_0x12e402&&_['isNil'](_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x66')]);_0x5c72cb++){if(_0x3a8983<=_0x32088c[_0x5c72cb][_0x3f2e('0x6d')]){_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x66')]=_0x32088c[_0x5c72cb][_0x3f2e('0x6d')];}else if(_0x3a8983>_0x32088c[_0x5c72cb][_0x3f2e('0x6d')]&&_0x3a8983<=_0x32088c[_0x5c72cb]['to']){_0x5be2ba[_0x3f2e('0x5a')]['internal']=_0x3a8983;}}}if(_[_0x3f2e('0x64')](_0x5be2ba['body'][_0x3f2e('0x66')])){_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x66')]=_0x24d30e+0x1;}});}}});}})[_0x3f2e('0x1d')](function(){if(_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x6e')]){_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x6f')]=_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x66')];_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x70')]={'mailbox':_0x5be2ba['body'][_0x3f2e('0x66')],'password':_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x3e')],'fullname':_0x5be2ba[_0x3f2e('0x5a')][_0x3f2e('0x71')],'email':_0x5be2ba['body'][_0x3f2e('0x72')]};}if(_0x5be2ba[_0x3f2e('0x5a')]&&_0x5be2ba['body'][_0x3f2e('0x5d')]===_0x3f2e('0x5e')){_0x5be2ba['body']['permissions']=['101',_0x3f2e('0x73'),_0x3f2e('0x74'),_0x3f2e('0x75'),_0x3f2e('0x76'),_0x3f2e('0x77'),_0x3f2e('0x78'),_0x3f2e('0x79'),_0x3f2e('0x7a'),_0x3f2e('0x7b'),'100',_0x3f2e('0x7c')];}return db['User'][_0x3f2e('0x7d')](_0x5be2ba['body'],{'include':[{'model':db[_0x3f2e('0x70')],'as':_0x3f2e('0x70')}]});})['then'](respondWithResult(_0x42004d,0xc9))[_0x3f2e('0x27')](handleError(_0x42004d,null));};exports[_0x3f2e('0x7e')]=function(_0x79006,_0xf7e669,_0x50d5ca){if(_0x79006[_0x3f2e('0x5a')]['id']){delete _0x79006['body']['id'];}return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x79006[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](function(_0x2b3cab){if(_0x2b3cab){if(_0x2b3cab['id']==_0x79006[_0x3f2e('0x61')]['id']){if(!_0x79006['body'][_0x3f2e('0x7f')]||!_0x79006[_0x3f2e('0x5a')][_0x3f2e('0x80')]){throw new db[(_0x3f2e('0x81'))][(_0x3f2e('0x82'))](_0x3f2e('0x83'));}if(!_0x2b3cab[_0x3f2e('0x84')](_0x79006['body']['oldPassword'])){throw new db['Sequelize']['ValidationError'](_0x3f2e('0x85'));}if(_0x79006['body'][_0x3f2e('0x7f')]==_0x79006['body'][_0x3f2e('0x80')]){throw new db[(_0x3f2e('0x81'))][(_0x3f2e('0x82'))](_0x3f2e('0x86'));}return _0x2b3cab;}else if(_0x79006[_0x3f2e('0x61')][_0x3f2e('0x5d')]==_0x3f2e('0x60')){if(!_0x79006['body'][_0x3f2e('0x80')]){throw new db[(_0x3f2e('0x81'))][(_0x3f2e('0x82'))](_0x3f2e('0x87'));}return _0x2b3cab;}else if(_0x79006['user']['role']==_0x3f2e('0x61')){if(!_0x79006[_0x3f2e('0x5a')][_0x3f2e('0x80')]){throw new db['Sequelize'][(_0x3f2e('0x82'))](_0x3f2e('0x87'));}if(_0x2b3cab['role']!=_0x3f2e('0x5e')){throw new db[(_0x3f2e('0x81'))][(_0x3f2e('0x82'))](_0x3f2e('0x88'));}return _0x2b3cab;}else{throw new db['Sequelize'][(_0x3f2e('0x82'))](_0x3f2e('0x88'));}}return null;})[_0x3f2e('0x1d')](handleEntityNotFound(_0xf7e669,null))[_0x3f2e('0x1d')](saveUpdates({'password':_0x79006[_0x3f2e('0x5a')][_0x3f2e('0x80')],'passwordResetAt':_0x79006[_0x3f2e('0x61')]['id']==_0x79006[_0x3f2e('0x57')]['id']?moment():null},null))[_0x3f2e('0x1d')](respondWithResult(_0xf7e669,null))['catch'](handleError(_0xf7e669,null));};exports[_0x3f2e('0x89')]=function(_0x40c2a1,_0x244be9,_0x25f651){var _0x19891d;return db[_0x3f2e('0x39')]['find']({'where':{'id':_0x40c2a1[_0x3f2e('0x57')]['id']},'attributes':['id',_0x3f2e('0x36'),_0x3f2e('0x5d'),_0x3f2e('0x8a'),'voicePause']})[_0x3f2e('0x1d')](handleEntityNotFound(_0x244be9,null))[_0x3f2e('0x1d')](function(_0x25a5e9){if(_0x25a5e9){_0x19891d=_0x25a5e9;if(!utils[_0x3f2e('0x8b')](_0x40c2a1['body'][_0x3f2e('0x8c')])){throw new db[(_0x3f2e('0x81'))][(_0x3f2e('0x82'))](_0x3f2e('0x8d'));}return _0x25a5e9[_0x3f2e('0x4d')+_[_0x3f2e('0x8e')](_0x40c2a1[_0x3f2e('0x5a')][_0x3f2e('0x8c')]['toLowerCase']())+'Queues'](_0x40c2a1[_0x3f2e('0x5a')][_0x3f2e('0x8f')],{'penalty':_0x40c2a1[_0x3f2e('0x5a')]['penalty']||0x0});}})['then'](function(){if(_0x40c2a1[_0x3f2e('0x5a')][_0x3f2e('0x8c')]===_0x3f2e('0x90')){return db[_0x3f2e('0x91')][_0x3f2e('0x92')]({'where':{'id':_0x40c2a1[_0x3f2e('0x5a')][_0x3f2e('0x8f')]||[]},'raw':!![],'attributes':['id','name']});}})[_0x3f2e('0x1d')](function(_0x48eaff){var _0x6fee1d=[];if(_0x40c2a1[_0x3f2e('0x5a')][_0x3f2e('0x8c')]===_0x3f2e('0x90')){for(var _0x5b5619=0x0;_0x5b5619<_0x48eaff['length'];_0x5b5619+=0x1){_0x6fee1d['push']({'membername':_0x19891d[_0x3f2e('0x36')],'UserId':_0x19891d['id'],'queue_name':_0x48eaff[_0x5b5619]['name'],'VoiceQueueId':_0x48eaff[_0x5b5619]['id'],'interface':util[_0x3f2e('0x93')]('%s/%s',_0x3f2e('0x94'),_0x19891d[_0x3f2e('0x36')]),'paused':_0x19891d[_0x3f2e('0x95')]||![],'penalty':_0x40c2a1[_0x3f2e('0x5a')][_0x3f2e('0x96')]||0x0});}return BPromise['each'](_0x6fee1d,function(_0x3e3d0e){return db[_0x3f2e('0x97')][_0x3f2e('0x98')](_0x3e3d0e);});}return _0x19891d;})['then'](respondWithStatusCode(_0x244be9,null))[_0x3f2e('0x27')](handleError(_0x244be9,null));};exports[_0x3f2e('0x99')]=function(_0x3222fb,_0x5595e4,_0x1cd9aa){var _0x346749;return db[_0x3f2e('0x39')]['find']({'where':{'id':_0x3222fb[_0x3f2e('0x57')]['id']},'attributes':['id',_0x3f2e('0x36'),_0x3f2e('0x5d')]})['then'](handleEntityNotFound(_0x5595e4,null))['then'](function(_0x54b9c9){if(_0x54b9c9){_0x346749=_0x54b9c9;if(!_0x3222fb['query'][_0x3f2e('0x8c')]||!utils[_0x3f2e('0x8b')](_0x3222fb[_0x3f2e('0x40')]['channel'])){throw new db[(_0x3f2e('0x81'))][(_0x3f2e('0x82'))](_0x3f2e('0x8d'));}return _0x54b9c9[_0x3f2e('0x9a')+_[_0x3f2e('0x8e')](_0x3222fb[_0x3f2e('0x40')][_0x3f2e('0x8c')][_0x3f2e('0x9b')]())+_0x3f2e('0x9c')](_0x3222fb['query']['ids']);}})['then'](function(_0x4561e1){if(_0x3222fb['query']['channel']===_0x3f2e('0x90')){return db['UserVoiceQueueRt'][_0x3f2e('0x32')]({'where':{'UserId':_0x3222fb['params']['id'],'VoiceQueueId':_0x3222fb['query'][_0x3f2e('0x8f')]},'individualHooks':!![]})[_0x3f2e('0x1d')](function(){return _0x346749;});}return _0x346749;})[_0x3f2e('0x1d')](respondWithStatusCode(_0x5595e4,null))[_0x3f2e('0x27')](handleError(_0x5595e4,null));};exports[_0x3f2e('0x9d')]=function(_0x4de39f,_0x2bf900,_0x13d8c8){_0x4de39f[_0x3f2e('0x5a')][_0x3f2e('0x9e')]=_0x4de39f[_0x3f2e('0x9f')][_0x3f2e('0xa0')];return db['User'][_0x3f2e('0x58')]({'where':{'id':_0x4de39f[_0x3f2e('0x57')]['id']}})['then'](handleEntityNotFound(_0x2bf900,null))['then'](saveUpdates(_0x4de39f[_0x3f2e('0x5a')],null))[_0x3f2e('0x1d')](respondWithResult(_0x2bf900,null))[_0x3f2e('0x27')](handleError(_0x2bf900,null));};exports['getAvatar']=function(_0xf986c8,_0x31725e,_0x4418cd){var _0x15e9d5=path[_0x3f2e('0xa1')](config['root'],_0x3f2e('0xa2'));return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0xf986c8[_0x3f2e('0x57')]['id']},'attributes':['id',_0x3f2e('0x9e')],'raw':!![]})['then'](handleEntityNotFound(_0x31725e,null))[_0x3f2e('0x1d')](function(_0x1811ac){if(_0x1811ac){if(_[_0x3f2e('0x64')](_0x1811ac[_0x3f2e('0x9e')])){return _0x31725e[_0x3f2e('0xa3')](_0x15e9d5);}else{if(!fs['existsSync'](path[_0x3f2e('0xa1')](config[_0x3f2e('0xa4')],'server/files/images/',_0x1811ac[_0x3f2e('0x9e')]))){return _0x31725e[_0x3f2e('0xa3')](_0x15e9d5);}return _0x31725e[_0x3f2e('0xa3')](path[_0x3f2e('0xa1')](config[_0x3f2e('0xa4')],_0x3f2e('0xa5'),_0x1811ac['userpic']));}}})[_0x3f2e('0x27')](handleError(_0x31725e,null));};exports[_0x3f2e('0xa6')]=function(_0x2af2a2,_0x3f0798,_0x4b22a3){var _0x40108a;var _0x1474fe={'where':{}},_0x51b344={},_0xf27215={'count':0x0,'rows':[]};return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x2af2a2[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x3f0798,null))[_0x3f2e('0x1d')](function(_0x3768ff){if(_0x3768ff){_0x40108a=_0x3768ff;_0x1474fe[_0x3f2e('0x4b')][_0x3f2e('0xa8')]=_0x3768ff['id'];return db[_0x3f2e('0xa9')][_0x3f2e('0xaa')]();}})[_0x3f2e('0x1d')](function(_0x2b4919){if(_0x2b4919){_0x51b344['model']=_[_0x3f2e('0x3d')](_0x2b4919);_0x51b344[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x2af2a2[_0x3f2e('0x40')]);_0x51b344[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x51b344['model'],_0x51b344[_0x3f2e('0x40')]);_0x1474fe[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x51b344[_0x3f2e('0x3b')],qs['fields'](_0x2af2a2[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x1474fe['attributes']=_0x1474fe['attributes']['length']?_0x1474fe['attributes']:_0x51b344['model'];if(!_0x2af2a2[_0x3f2e('0x40')][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x1474fe[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x2af2a2[_0x3f2e('0x40')][_0x3f2e('0x2b')]);_0x1474fe['offset']=qs[_0x3f2e('0x2a')](_0x2af2a2[_0x3f2e('0x40')]['offset']);}_0x1474fe['order']=qs['sort'](_0x2af2a2[_0x3f2e('0x40')]['sort']);_0x1474fe[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x2af2a2[_0x3f2e('0x40')],_0x51b344[_0x3f2e('0x43')]));if(_0x2af2a2[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x1474fe[_0x3f2e('0x4b')]=_[_0x3f2e('0x4f')](_0x1474fe[_0x3f2e('0x4b')],{'$or':_['map'](_0x1474fe[_0x3f2e('0x45')],function(_0x588e60){var _0x2bf880={};_0x2bf880[_0x588e60]={'$like':'%'+_0x2af2a2[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x2bf880;})});}_0x1474fe=_[_0x3f2e('0x4f')]({},_0x1474fe,_0x2af2a2[_0x3f2e('0x53')]);return _0x40108a[_0x3f2e('0xa6')](_['pick'](_0x1474fe,[_0x3f2e('0x4b')]))[_0x3f2e('0x1d')](function(_0x43dc60){_0xf27215[_0x3f2e('0x29')]=_0x43dc60['length']||0x0;if(_0x2af2a2[_0x3f2e('0x40')][_0x3f2e('0x54')]){_0x1474fe[_0x3f2e('0x55')]=[{'all':!![]}];}return _0x40108a[_0x3f2e('0xa6')](_0x1474fe);})[_0x3f2e('0x1d')](function(_0x33dda3){_0xf27215[_0x3f2e('0xab')]=_0x33dda3;return _0xf27215;});}})[_0x3f2e('0x1d')](respondWithFilteredResult(_0x3f0798,_0x1474fe))[_0x3f2e('0x27')](handleError(_0x3f0798,null));};exports['getQueues']=function(_0x3a9e66,_0x5a680c,_0xa40a93){var _0x827f6d;var _0x397a0e;var _0x249d84={};var _0x468d17;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x3a9e66['params']['id']},'attributes':['id',_0x3f2e('0x36'),'role']})['then'](handleEntityNotFound(_0x5a680c,null))[_0x3f2e('0x1d')](function(_0x1a5a18){if(!utils[_0x3f2e('0x8b')](_0x3a9e66[_0x3f2e('0x40')][_0x3f2e('0x8c')])){throw new db[(_0x3f2e('0x81'))][(_0x3f2e('0x82'))](_0x3f2e('0x8d'));}_0x827f6d=_0x1a5a18;var _0xa2e7a={};_0xa2e7a[_0x3f2e('0x3b')]=_[_0x3f2e('0x3d')](db[_[_0x3f2e('0x8e')](_0x3a9e66[_0x3f2e('0x40')][_0x3f2e('0x8c')])+'Queue'][_0x3f2e('0x3a')]);_0xa2e7a[_0x3f2e('0x40')]=_['keys'](_0x3a9e66[_0x3f2e('0x40')]);_0xa2e7a[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0xa2e7a['model'],_0xa2e7a['query']);_0x249d84['attributes']=_['intersection'](_0xa2e7a[_0x3f2e('0x3b')],qs['fields'](_0x3a9e66[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x249d84[_0x3f2e('0x45')]=_0x249d84[_0x3f2e('0x45')]['length']?_0x249d84[_0x3f2e('0x45')]:_0xa2e7a[_0x3f2e('0x3b')];_0x249d84['order']=qs[_0x3f2e('0x4a')](_0x3a9e66[_0x3f2e('0x40')]['sort']);_0x249d84[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x3a9e66[_0x3f2e('0x40')],_0xa2e7a[_0x3f2e('0x43')]));if(_0x3a9e66[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x249d84['where']=_['merge'](_0x249d84['where'],{'$or':_['map'](_0x249d84[_0x3f2e('0x45')],function(_0x15f0af){var _0x4dfb50={};_0x4dfb50[_0x15f0af]={'$like':'%'+_0x3a9e66[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x4dfb50;})});}_0x249d84=_[_0x3f2e('0x4f')]({},_0x249d84,_0x3a9e66['options']);switch(_0x827f6d[_0x3f2e('0x5d')]){case _0x3f2e('0x60'):return db[_[_0x3f2e('0x8e')](_0x3a9e66['query']['channel'])+_0x3f2e('0xac')][_0x3f2e('0x92')](_0x249d84);case _0x3f2e('0x61'):case _0x3f2e('0x5e'):return _0x827f6d['get'+_[_0x3f2e('0x8e')](_0x3a9e66[_0x3f2e('0x40')][_0x3f2e('0x8c')])+_0x3f2e('0x9c')](_0x249d84);default:throw new db[(_0x3f2e('0x81'))][(_0x3f2e('0x82'))](_0x3f2e('0xad'));}})[_0x3f2e('0x1d')](function(_0x4112f5){_0x468d17=_0x4112f5[_0x3f2e('0x47')];if(!_0x3a9e66['query']['hasOwnProperty'](_0x3f2e('0x49'))){_0x249d84[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x3a9e66[_0x3f2e('0x40')][_0x3f2e('0x2b')]);_0x249d84[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x3a9e66[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}switch(_0x827f6d[_0x3f2e('0x5d')]){case _0x3f2e('0x60'):return db[_[_0x3f2e('0x8e')](_0x3a9e66[_0x3f2e('0x40')]['channel'])+_0x3f2e('0xac')][_0x3f2e('0x92')](_0x249d84);case'user':case _0x3f2e('0x5e'):return _0x827f6d[_0x3f2e('0xae')+_[_0x3f2e('0x8e')](_0x3a9e66[_0x3f2e('0x40')][_0x3f2e('0x8c')])+_0x3f2e('0x9c')](_0x249d84);}})[_0x3f2e('0x1d')](function(_0x4587c5){return{'count':_0x468d17,'rows':_0x4587c5};})['then'](respondWithResult(_0x5a680c,null))[_0x3f2e('0x27')](handleError(_0x5a680c,null));};exports[_0x3f2e('0xaf')]=function(_0x5beca6,_0xf18440,_0x469702){var _0x13402d={};var _0x98cb12={};var _0x5e9fc0;var _0x45a82f;return db['User'][_0x3f2e('0xa7')]({'where':{'id':_0x5beca6['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0xf18440,null))[_0x3f2e('0x1d')](function(_0x22c819){if(_0x22c819){_0x5e9fc0=_0x22c819;_0x98cb12[_0x3f2e('0x3b')]=_['keys'](db[_0x3f2e('0x97')][_0x3f2e('0x3a')]);_0x98cb12[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x5beca6[_0x3f2e('0x40')]);_0x98cb12[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x98cb12[_0x3f2e('0x3b')],_0x98cb12[_0x3f2e('0x40')]);_0x13402d['attributes']=_['intersection'](_0x98cb12[_0x3f2e('0x3b')],qs['fields'](_0x5beca6[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x13402d[_0x3f2e('0x45')]=_0x13402d[_0x3f2e('0x45')]['length']?_0x13402d['attributes']:_0x98cb12[_0x3f2e('0x3b')];_0x13402d[_0x3f2e('0xb0')]=qs[_0x3f2e('0x4a')](_0x5beca6[_0x3f2e('0x40')]['sort']);_0x13402d[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_['pick'](_0x5beca6[_0x3f2e('0x40')],_0x98cb12['filters']));if(_0x5beca6['query'][_0x3f2e('0x52')]){_0x13402d[_0x3f2e('0x4b')]=_[_0x3f2e('0x4f')](_0x13402d['where'],{'$or':_[_0x3f2e('0xb1')](_0x13402d[_0x3f2e('0x45')],function(_0x19729a){var _0x135a22={};_0x135a22[_0x19729a]={'$like':'%'+_0x5beca6[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x135a22;})});}_0x13402d=_[_0x3f2e('0x4f')]({},_0x13402d,_0x5beca6[_0x3f2e('0x53')]);return _0x5e9fc0[_0x3f2e('0xaf')](_0x13402d);}})[_0x3f2e('0x1d')](function(_0x584fbd){if(_0x584fbd){_0x45a82f=_0x584fbd[_0x3f2e('0x47')];if(!_0x5beca6[_0x3f2e('0x40')][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x13402d['limit']=qs[_0x3f2e('0x2b')](_0x5beca6['query'][_0x3f2e('0x2b')]);_0x13402d[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x5beca6[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0x5e9fc0[_0x3f2e('0xaf')](_0x13402d);}})[_0x3f2e('0x1d')](function(_0x294650){if(_0x294650){return _0x294650?{'count':_0x45a82f,'rows':_0x294650}:null;}})[_0x3f2e('0x1d')](respondWithResult(_0xf18440,null))[_0x3f2e('0x27')](handleError(_0xf18440,null));};exports[_0x3f2e('0xb2')]=function(_0x16d98d,_0x1da691,_0x880d2){var _0x280981={};var _0xe4a6ec={};var _0x5ed202;var _0x903593;return db['User'][_0x3f2e('0xa7')]({'where':{'id':_0x16d98d['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x1da691,null))[_0x3f2e('0x1d')](function(_0x46cf4){if(_0x46cf4){_0x5ed202=_0x46cf4;_0xe4a6ec[_0x3f2e('0x3b')]=_[_0x3f2e('0x3d')](db[_0x3f2e('0xb3')]['rawAttributes']);_0xe4a6ec[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x16d98d[_0x3f2e('0x40')]);_0xe4a6ec['filters']=_[_0x3f2e('0x44')](_0xe4a6ec['model'],_0xe4a6ec[_0x3f2e('0x40')]);_0x280981[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0xe4a6ec[_0x3f2e('0x3b')],qs[_0x3f2e('0x46')](_0x16d98d['query'][_0x3f2e('0x46')]));_0x280981['attributes']=_0x280981[_0x3f2e('0x45')]['length']?_0x280981[_0x3f2e('0x45')]:_0xe4a6ec[_0x3f2e('0x3b')];_0x280981['order']=qs[_0x3f2e('0x4a')](_0x16d98d['query'][_0x3f2e('0x4a')]);_0x280981[_0x3f2e('0x4b')]=qs['filters'](_[_0x3f2e('0x4c')](_0x16d98d['query'],_0xe4a6ec[_0x3f2e('0x43')]));if(_0x16d98d[_0x3f2e('0x40')]['filter']){_0x280981['where']=_[_0x3f2e('0x4f')](_0x280981[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x280981[_0x3f2e('0x45')],function(_0x1bf3cf){var _0x272b34={};_0x272b34[_0x1bf3cf]={'$like':'%'+_0x16d98d[_0x3f2e('0x40')]['filter']+'%'};return _0x272b34;})});}_0x280981=_[_0x3f2e('0x4f')]({},_0x280981,_0x16d98d[_0x3f2e('0x53')]);return _0x5ed202['getGroups'](_0x280981);}})[_0x3f2e('0x1d')](function(_0x151b1c){if(_0x151b1c){_0x903593=_0x151b1c[_0x3f2e('0x47')];if(!_0x16d98d['query'][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x280981[_0x3f2e('0x2b')]=qs['limit'](_0x16d98d['query'][_0x3f2e('0x2b')]);_0x280981[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x16d98d[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0x5ed202[_0x3f2e('0xb2')](_0x280981);}})[_0x3f2e('0x1d')](function(_0x32a0ec){if(_0x32a0ec){return _0x32a0ec?{'count':_0x903593,'rows':_0x32a0ec}:null;}})['then'](respondWithResult(_0x1da691,null))[_0x3f2e('0x27')](handleError(_0x1da691,null));};exports[_0x3f2e('0xb4')]=function(_0x97866,_0xf04093,_0x3a1433){var _0x4ed006={'raw':!![],'where':{}};var _0x48649c={};var _0x41965a={'count':0x0,'rows':[]};return db[_0x3f2e('0x39')]['findOne']({'where':{'id':_0x97866[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0xf04093,null))[_0x3f2e('0x1d')](function(_0x4918ca){if(_0x4918ca){_0x48649c['model']=_['keys'](db[_0x3f2e('0xb5')][_0x3f2e('0x3a')]);_0x48649c[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x97866[_0x3f2e('0x40')]);_0x48649c[_0x3f2e('0x43')]=_['intersection'](_0x48649c['model'],_0x48649c[_0x3f2e('0x40')]);_0x4ed006[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x48649c[_0x3f2e('0x3b')],qs[_0x3f2e('0x46')](_0x97866[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x4ed006[_0x3f2e('0x45')]=_0x4ed006[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x4ed006['attributes']:_0x48649c[_0x3f2e('0x3b')];if(!_0x97866[_0x3f2e('0x40')][_0x3f2e('0x48')]('nolimit')){_0x4ed006[_0x3f2e('0x2b')]=qs['limit'](_0x97866[_0x3f2e('0x40')][_0x3f2e('0x2b')]);_0x4ed006['offset']=qs[_0x3f2e('0x2a')](_0x97866[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}_0x4ed006[_0x3f2e('0xb0')]=qs['sort'](_0x97866['query'][_0x3f2e('0x4a')]);_0x4ed006[_0x3f2e('0x4b')]=qs['filters'](_[_0x3f2e('0x4c')](_0x97866[_0x3f2e('0x40')],_0x48649c[_0x3f2e('0x43')]));_0x4ed006['where'][_0x3f2e('0xa8')]=_0x4918ca['id'];if(_0x97866[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x4ed006[_0x3f2e('0x4b')]=_[_0x3f2e('0x4f')](_0x4ed006[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x4ed006[_0x3f2e('0x45')],function(_0x1a090e){var _0x22736c={};_0x22736c[_0x1a090e]={'$like':'%'+_0x97866[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x22736c;})});}_0x4ed006=_[_0x3f2e('0x4f')]({},_0x4ed006,_0x97866[_0x3f2e('0x53')]);return db[_0x3f2e('0xb5')][_0x3f2e('0x29')]({'where':_0x4ed006[_0x3f2e('0x4b')]})['then'](function(_0xe308ca){_0x41965a[_0x3f2e('0x29')]=_0xe308ca;if(_0x97866[_0x3f2e('0x40')]['includeAll']){_0x4ed006[_0x3f2e('0x55')]=[{'all':!![]}];}return db[_0x3f2e('0xb5')][_0x3f2e('0x92')](_0x4ed006);})[_0x3f2e('0x1d')](function(_0xb56481){_0x41965a[_0x3f2e('0xab')]=_0xb56481;return _0x41965a;});}})['then'](respondWithFilteredResult(_0xf04093,_0x4ed006))[_0x3f2e('0x27')](handleError(_0xf04093,null));};exports[_0x3f2e('0xb6')]=function(_0x1ec40d,_0x4ed068,_0x426cd0){var _0x4c685e={};var _0x2bd9d6={};var _0x43a902;var _0x8b1446;return db[_0x3f2e('0x39')]['findOne']({'where':{'id':_0x1ec40d[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x4ed068,null))[_0x3f2e('0x1d')](function(_0x3b6ab2){if(_0x3b6ab2){_0x43a902=_0x3b6ab2;_0x2bd9d6['model']=_[_0x3f2e('0x3d')](db[_0x3f2e('0xb7')][_0x3f2e('0x3a')]);_0x2bd9d6[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x1ec40d[_0x3f2e('0x40')]);_0x2bd9d6[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x2bd9d6['model'],_0x2bd9d6[_0x3f2e('0x40')]);_0x4c685e[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x2bd9d6['model'],qs[_0x3f2e('0x46')](_0x1ec40d[_0x3f2e('0x40')]['fields']));_0x4c685e[_0x3f2e('0x45')]=_0x4c685e[_0x3f2e('0x45')]['length']?_0x4c685e[_0x3f2e('0x45')]:_0x2bd9d6['model'];_0x4c685e[_0x3f2e('0xb0')]=qs[_0x3f2e('0x4a')](_0x1ec40d['query'][_0x3f2e('0x4a')]);_0x4c685e[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x1ec40d[_0x3f2e('0x40')],_0x2bd9d6['filters']));if(_0x1ec40d['query'][_0x3f2e('0x52')]){_0x4c685e['where']=_[_0x3f2e('0x4f')](_0x4c685e[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x4c685e[_0x3f2e('0x45')],function(_0x42e99f){var _0x26045b={};_0x26045b[_0x42e99f]={'$like':'%'+_0x1ec40d[_0x3f2e('0x40')]['filter']+'%'};return _0x26045b;})});}_0x4c685e=_[_0x3f2e('0x4f')]({},_0x4c685e,_0x1ec40d[_0x3f2e('0x53')]);return _0x43a902[_0x3f2e('0xb6')](_0x4c685e);}})[_0x3f2e('0x1d')](function(_0x1ec6c4){if(_0x1ec6c4){_0x8b1446=_0x1ec6c4[_0x3f2e('0x47')];if(!_0x1ec40d[_0x3f2e('0x40')][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x4c685e[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x1ec40d['query'][_0x3f2e('0x2b')]);_0x4c685e['offset']=qs[_0x3f2e('0x2a')](_0x1ec40d[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0x43a902['getChatInteractions'](_0x4c685e);}})['then'](function(_0x378601){if(_0x378601){return _0x378601?{'count':_0x8b1446,'rows':_0x378601}:null;}})['then'](respondWithResult(_0x4ed068,null))['catch'](handleError(_0x4ed068,null));};exports[_0x3f2e('0xb8')]=function(_0x26c9e6,_0x51558d,_0x17d476){var _0x2760e8={};var _0x38b7c5={};var _0x5c6c6f;var _0x3e784c;return db[_0x3f2e('0x39')]['findOne']({'where':{'id':_0x26c9e6['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x51558d,null))[_0x3f2e('0x1d')](function(_0x4d91b0){if(_0x4d91b0){_0x5c6c6f=_0x4d91b0;_0x38b7c5['model']=_[_0x3f2e('0x3d')](db[_0x3f2e('0xb9')][_0x3f2e('0x3a')]);_0x38b7c5[_0x3f2e('0x40')]=_['keys'](_0x26c9e6['query']);_0x38b7c5[_0x3f2e('0x43')]=_['intersection'](_0x38b7c5[_0x3f2e('0x3b')],_0x38b7c5[_0x3f2e('0x40')]);_0x2760e8['attributes']=_['intersection'](_0x38b7c5['model'],qs[_0x3f2e('0x46')](_0x26c9e6['query'][_0x3f2e('0x46')]));_0x2760e8[_0x3f2e('0x45')]=_0x2760e8[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x2760e8[_0x3f2e('0x45')]:_0x38b7c5[_0x3f2e('0x3b')];_0x2760e8['order']=qs['sort'](_0x26c9e6[_0x3f2e('0x40')][_0x3f2e('0x4a')]);_0x2760e8[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x26c9e6[_0x3f2e('0x40')],_0x38b7c5[_0x3f2e('0x43')]));if(_0x26c9e6['query'][_0x3f2e('0x52')]){_0x2760e8[_0x3f2e('0x4b')]=_['merge'](_0x2760e8[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x2760e8['attributes'],function(_0x15b2fd){var _0x408732={};_0x408732[_0x15b2fd]={'$like':'%'+_0x26c9e6[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x408732;})});}_0x2760e8=_[_0x3f2e('0x4f')]({},_0x2760e8,_0x26c9e6[_0x3f2e('0x53')]);return _0x5c6c6f[_0x3f2e('0xb8')](_0x2760e8);}})['then'](function(_0xf3c62){if(_0xf3c62){_0x3e784c=_0xf3c62[_0x3f2e('0x47')];if(!_0x26c9e6[_0x3f2e('0x40')][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x2760e8['limit']=qs[_0x3f2e('0x2b')](_0x26c9e6['query'][_0x3f2e('0x2b')]);_0x2760e8['offset']=qs['offset'](_0x26c9e6['query'][_0x3f2e('0x2a')]);}return _0x5c6c6f[_0x3f2e('0xb8')](_0x2760e8);}})[_0x3f2e('0x1d')](function(_0x353b66){if(_0x353b66){return _0x353b66?{'count':_0x3e784c,'rows':_0x353b66}:null;}})[_0x3f2e('0x1d')](respondWithResult(_0x51558d,null))['catch'](handleError(_0x51558d,null));};exports['getMailInteractions']=function(_0x2fdb5d,_0x102ab3,_0x4e5552){var _0x1bcc33={'raw':!![],'where':{}};var _0x38568e={};var _0x88b00d={'count':0x0,'rows':[]};return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x2fdb5d[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x102ab3,null))['then'](function(_0x1dded8){if(_0x1dded8){_0x38568e[_0x3f2e('0x3b')]=_['keys'](db[_0x3f2e('0xba')][_0x3f2e('0x3a')]);_0x38568e[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x2fdb5d[_0x3f2e('0x40')]);_0x38568e[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x38568e['model'],_0x38568e[_0x3f2e('0x40')]);_0x1bcc33[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x38568e[_0x3f2e('0x3b')],qs['fields'](_0x2fdb5d[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x1bcc33[_0x3f2e('0x45')]=_0x1bcc33[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x1bcc33[_0x3f2e('0x45')]:_0x38568e['model'];if(!_0x2fdb5d[_0x3f2e('0x40')]['hasOwnProperty'](_0x3f2e('0x49'))){_0x1bcc33[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x2fdb5d[_0x3f2e('0x40')][_0x3f2e('0x2b')]);_0x1bcc33[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x2fdb5d['query']['offset']);}_0x1bcc33[_0x3f2e('0xb0')]=qs[_0x3f2e('0x4a')](_0x2fdb5d[_0x3f2e('0x40')]['sort']);_0x1bcc33[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_['pick'](_0x2fdb5d[_0x3f2e('0x40')],_0x38568e[_0x3f2e('0x43')]));_0x1bcc33[_0x3f2e('0x4b')][_0x3f2e('0xa8')]=_0x1dded8['id'];if(_0x2fdb5d[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x1bcc33[_0x3f2e('0x4b')]=_[_0x3f2e('0x4f')](_0x1bcc33[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x1bcc33[_0x3f2e('0x45')],function(_0x52d33f){var _0xdd1f09={};_0xdd1f09[_0x52d33f]={'$like':'%'+_0x2fdb5d[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0xdd1f09;})});}_0x1bcc33=_[_0x3f2e('0x4f')]({},_0x1bcc33,_0x2fdb5d[_0x3f2e('0x53')]);return db['MailInteraction']['count']({'where':_0x1bcc33[_0x3f2e('0x4b')]})[_0x3f2e('0x1d')](function(_0x4a6924){_0x88b00d[_0x3f2e('0x29')]=_0x4a6924;if(_0x2fdb5d['query'][_0x3f2e('0x54')]){_0x1bcc33[_0x3f2e('0x55')]=[{'all':!![]}];}return db[_0x3f2e('0xba')][_0x3f2e('0x92')](_0x1bcc33);})[_0x3f2e('0x1d')](function(_0x347670){_0x88b00d[_0x3f2e('0xab')]=_0x347670;return _0x88b00d;});}})['then'](respondWithFilteredResult(_0x102ab3,_0x1bcc33))[_0x3f2e('0x27')](handleError(_0x102ab3,null));};exports[_0x3f2e('0xbb')]=function(_0x488042,_0x23f1c1,_0x24303e){var _0x3509df={};var _0x30baa4={};var _0xedb153;var _0x3029d1;return db['User']['findOne']({'where':{'id':_0x488042[_0x3f2e('0x57')]['id']}})['then'](handleEntityNotFound(_0x23f1c1,null))[_0x3f2e('0x1d')](function(_0x142eac){if(_0x142eac){_0xedb153=_0x142eac;_0x30baa4[_0x3f2e('0x3b')]=_[_0x3f2e('0x3d')](db[_0x3f2e('0xbc')][_0x3f2e('0x3a')]);_0x30baa4['query']=_[_0x3f2e('0x3d')](_0x488042['query']);_0x30baa4[_0x3f2e('0x43')]=_['intersection'](_0x30baa4[_0x3f2e('0x3b')],_0x30baa4[_0x3f2e('0x40')]);_0x3509df['attributes']=_[_0x3f2e('0x44')](_0x30baa4[_0x3f2e('0x3b')],qs[_0x3f2e('0x46')](_0x488042[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x3509df[_0x3f2e('0x45')]=_0x3509df[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x3509df[_0x3f2e('0x45')]:_0x30baa4[_0x3f2e('0x3b')];_0x3509df[_0x3f2e('0xb0')]=qs[_0x3f2e('0x4a')](_0x488042['query'][_0x3f2e('0x4a')]);_0x3509df[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x488042[_0x3f2e('0x40')],_0x30baa4[_0x3f2e('0x43')]));if(_0x488042[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x3509df['where']=_[_0x3f2e('0x4f')](_0x3509df[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x3509df[_0x3f2e('0x45')],function(_0x2bdc4d){var _0x2d1901={};_0x2d1901[_0x2bdc4d]={'$like':'%'+_0x488042[_0x3f2e('0x40')]['filter']+'%'};return _0x2d1901;})});}_0x3509df=_['merge']({},_0x3509df,_0x488042['options']);return _0xedb153['getSmsInteractions'](_0x3509df);}})[_0x3f2e('0x1d')](function(_0x529673){if(_0x529673){_0x3029d1=_0x529673[_0x3f2e('0x47')];if(!_0x488042['query'][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x3509df[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x488042[_0x3f2e('0x40')][_0x3f2e('0x2b')]);_0x3509df[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x488042[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0xedb153['getSmsInteractions'](_0x3509df);}})['then'](function(_0x5cac5e){if(_0x5cac5e){return _0x5cac5e?{'count':_0x3029d1,'rows':_0x5cac5e}:null;}})[_0x3f2e('0x1d')](respondWithResult(_0x23f1c1,null))[_0x3f2e('0x27')](handleError(_0x23f1c1,null));};exports[_0x3f2e('0xbd')]=function(_0x2314fc,_0x2a9bba,_0x5802db){var _0x475581={};var _0x3b0c5d={};var _0x10b71f;var _0x2dfa63;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x2314fc['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x2a9bba,null))[_0x3f2e('0x1d')](function(_0x9c44c9){if(_0x9c44c9){_0x10b71f=_0x9c44c9;_0x3b0c5d[_0x3f2e('0x3b')]=_['keys'](db[_0x3f2e('0xbe')][_0x3f2e('0x3a')]);_0x3b0c5d[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x2314fc[_0x3f2e('0x40')]);_0x3b0c5d['filters']=_[_0x3f2e('0x44')](_0x3b0c5d[_0x3f2e('0x3b')],_0x3b0c5d[_0x3f2e('0x40')]);_0x475581['attributes']=_[_0x3f2e('0x44')](_0x3b0c5d['model'],qs[_0x3f2e('0x46')](_0x2314fc[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x475581['attributes']=_0x475581['attributes'][_0x3f2e('0x47')]?_0x475581[_0x3f2e('0x45')]:_0x3b0c5d[_0x3f2e('0x3b')];_0x475581['order']=qs[_0x3f2e('0x4a')](_0x2314fc[_0x3f2e('0x40')][_0x3f2e('0x4a')]);_0x475581[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x2314fc[_0x3f2e('0x40')],_0x3b0c5d[_0x3f2e('0x43')]));if(_0x2314fc[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x475581[_0x3f2e('0x4b')]=_[_0x3f2e('0x4f')](_0x475581[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x475581[_0x3f2e('0x45')],function(_0x1b828b){var _0x57394f={};_0x57394f[_0x1b828b]={'$like':'%'+_0x2314fc[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x57394f;})});}_0x475581=_[_0x3f2e('0x4f')]({},_0x475581,_0x2314fc[_0x3f2e('0x53')]);return _0x10b71f[_0x3f2e('0xbd')](_0x475581);}})[_0x3f2e('0x1d')](function(_0x51284a){if(_0x51284a){_0x2dfa63=_0x51284a[_0x3f2e('0x47')];if(!_0x2314fc[_0x3f2e('0x40')][_0x3f2e('0x48')]('nolimit')){_0x475581['limit']=qs[_0x3f2e('0x2b')](_0x2314fc[_0x3f2e('0x40')][_0x3f2e('0x2b')]);_0x475581[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x2314fc[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0x10b71f[_0x3f2e('0xbd')](_0x475581);}})[_0x3f2e('0x1d')](function(_0x5cf817){if(_0x5cf817){return _0x5cf817?{'count':_0x2dfa63,'rows':_0x5cf817}:null;}})['then'](respondWithResult(_0x2a9bba,null))[_0x3f2e('0x27')](handleError(_0x2a9bba,null));};exports[_0x3f2e('0xbf')]=function(_0x258367,_0x55087d,_0x39e6aa){var _0x56f306;var _0x4c4cb6;return db['User'][_0x3f2e('0x58')]({'where':{'id':_0x258367[_0x3f2e('0x57')]['id'],'role':_0x3f2e('0x5e')},'attributes':['id',_0x3f2e('0x36'),_0x3f2e('0x5d'),_0x3f2e('0x66'),_0x3f2e('0x8a')]})['then'](handleEntityNotFound(_0x55087d,null))[_0x3f2e('0x1d')](function(_0x28d75e){if(_0x28d75e){_0x56f306=_0x28d75e;socket['to'](util[_0x3f2e('0x93')](_0x3f2e('0xc0'),_0x56f306[_0x3f2e('0x36')]))['emit'](_0x3f2e('0xc1'),{'ip':_0x258367['headers']['x-forwarded-for']||_0x258367['connection']['remoteAddress']||_0x258367['socket'][_0x3f2e('0xc2')]||_0x258367[_0x3f2e('0xc3')]['socket'][_0x3f2e('0xc2')]});return db['UserVoiceQueueRt'][_0x3f2e('0x32')]({'where':{'membername':_0x56f306[_0x3f2e('0x36')]},'individualHooks':!![]});}})[_0x3f2e('0x1d')](function(_0x30b3fb){if(_0x56f306){return _0x56f306['getVoiceQueues']({'raw':!![]});}})[_0x3f2e('0x1d')](function(_0x425a5a){var _0x57eace=[];if(_0x425a5a){_0x4c4cb6=_0x425a5a;if(_0x4c4cb6['length']){for(var _0x538b54=0x0;_0x538b54<_0x4c4cb6[_0x3f2e('0x47')];_0x538b54++){_0x57eace['push']({'membername':_0x56f306[_0x3f2e('0x36')],'UserId':_0x56f306['id'],'queue_name':_0x4c4cb6[_0x538b54][_0x3f2e('0x36')],'VoiceQueueId':_0x4c4cb6[_0x538b54]['id'],'interface':util[_0x3f2e('0x93')]('%s/%s',_0x3f2e('0x94'),_0x56f306[_0x3f2e('0x36')]),'paused':_0x56f306[_0x3f2e('0x8a')]||![],'penalty':_0x4c4cb6[_0x538b54]['UserVoiceQueue.penalty']||0x0});}return BPromise[_0x3f2e('0xc4')](_0x57eace,function(_0x36db5e){return db[_0x3f2e('0x97')]['upsert'](_0x36db5e);});}}})[_0x3f2e('0x1d')](function(){return db[_0x3f2e('0xc5')][_0x3f2e('0x92')]({'where':{'membername':_0x56f306[_0x3f2e('0x36')],'interface':util['format']('%s/%s',_0x3f2e('0x94'),_0x56f306[_0x3f2e('0x36')]),'exitAt':null}});})[_0x3f2e('0x1d')](function(_0x218510){var _0xc312e4=[];_0x218510['forEach'](function(_0x1336ce){_0xc312e4['push'](_0x1336ce[_0x3f2e('0x31')]({'exitAt':moment()[_0x3f2e('0x93')](_0x3f2e('0xc6'))}));});return BPromise[_0x3f2e('0xc7')](_0xc312e4);})['then'](function(){var _0x376d52=[];var _0xc353d8=[];var _0x397f29=utils['getChannels']();var _0x73bc14={'membername':_0x56f306[_0x3f2e('0x36')],'interface':util[_0x3f2e('0x93')]('%s/%s',_0x3f2e('0x94'),_0x56f306[_0x3f2e('0x36')]),'enterAt':moment()[_0x3f2e('0x93')]('YYYY-MM-DD\x20HH:mm:ss'),'role':_0x56f306[_0x3f2e('0x5d')],'internal':_0x56f306[_0x3f2e('0x66')]};_0x397f29['forEach'](function(_0x319b8a){_0x376d52['push'](_[_0x3f2e('0x4f')]({'channel':_0x319b8a,'type':_0x3f2e('0xc8')},_0x73bc14));if(_0x56f306[_0x3f2e('0x8a')]){_0xc353d8[_0x3f2e('0xc9')](_['merge']({'channel':_0x319b8a,'type':_0x3f2e('0xca'),'data1':_0x3f2e('0xcb')},_0x73bc14));}});return db[_0x3f2e('0xc5')]['bulkCreate'](_0x376d52['concat'](_0xc353d8),{'individualHooks':!![]});})[_0x3f2e('0x1d')](function(){return _0x56f306[_0x3f2e('0x31')]({'online':!![],'lastLoginAt':moment()[_0x3f2e('0x93')](_0x3f2e('0xc6')),'voicePause':_0x56f306[_0x3f2e('0x8a')]||![],'mailPause':_0x56f306[_0x3f2e('0x8a')]||![],'chatPause':_0x56f306['loginInPause']||![],'faxPause':_0x56f306['loginInPause']||![],'smsPause':_0x56f306[_0x3f2e('0x8a')]||![],'openchannelPause':_0x56f306[_0x3f2e('0x8a')]||![],'pauseType':_0x56f306[_0x3f2e('0x8a')]?_0x3f2e('0xcb'):null,'lastPauseAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')});})[_0x3f2e('0x1d')](respondWithResult(_0x55087d,null))[_0x3f2e('0x27')](handleError(_0x55087d,null));};exports[_0x3f2e('0xcc')]=function(_0x545f9e,_0x1b35d1,_0xdcfcf7){var _0x1d7ed4;return db['User'][_0x3f2e('0x58')]({'where':{'id':_0x545f9e[_0x3f2e('0x57')]['id'],'role':_0x3f2e('0x5e')},'attributes':['id','name',_0x3f2e('0x5d')]})[_0x3f2e('0x1d')](handleEntityNotFound(_0x1b35d1,null))[_0x3f2e('0x1d')](function(_0x1cdc30){if(_0x1cdc30){_0x1d7ed4=_0x1cdc30;return db[_0x3f2e('0x97')][_0x3f2e('0x32')]({'where':{'membername':_0x1d7ed4[_0x3f2e('0x36')]},'individualHooks':!![]});}})[_0x3f2e('0x1d')](function(){return db[_0x3f2e('0xc5')][_0x3f2e('0x92')]({'where':{'membername':_0x1d7ed4[_0x3f2e('0x36')],'interface':util['format'](_0x3f2e('0xcd'),_0x3f2e('0x94'),_0x1d7ed4['name']),'exitAt':null}});})[_0x3f2e('0x1d')](function(_0x5be5ce){var _0x374c41=[];_0x5be5ce[_0x3f2e('0xce')](function(_0x46fe11){_0x374c41[_0x3f2e('0xc9')](_0x46fe11[_0x3f2e('0x31')]({'exitAt':moment()[_0x3f2e('0x93')]('YYYY-MM-DD\x20HH:mm:ss')}));});return BPromise[_0x3f2e('0xc7')](_0x374c41);})['then'](function(){return _0x1d7ed4[_0x3f2e('0x31')]({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});})[_0x3f2e('0x1d')](respondWithResult(_0x1b35d1,null))['catch'](handleError(_0x1b35d1,null));};exports[_0x3f2e('0xcf')]=function(_0x141bf5,_0x55ec0b,_0x41ed13){var _0x2d2eb1;return db[_0x3f2e('0x97')][_0x3f2e('0x31')]({'paused':0x1},{'where':{'UserId':_0x141bf5[_0x3f2e('0x57')]['id']},'individualHooks':!![]})[_0x3f2e('0x1d')](function(){return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x141bf5[_0x3f2e('0x57')]['id'],'role':_0x3f2e('0x5e')},'attributes':['id',_0x3f2e('0x36'),_0x3f2e('0x5d'),_0x3f2e('0x66')]});})[_0x3f2e('0x1d')](handleEntityNotFound(_0x55ec0b,null))[_0x3f2e('0x1d')](function(_0x4ce654){if(_0x4ce654){_0x2d2eb1=_0x4ce654;return respondWithRpcPromise(_0x3f2e('0xd0'),_0x3f2e('0xcf'),{'id':_0x2d2eb1['id'],'name':_0x2d2eb1[_0x3f2e('0x36')],'pause':!![]});}})[_0x3f2e('0x1d')](function(){if(_0x2d2eb1){return db[_0x3f2e('0xc5')][_0x3f2e('0x92')]({'where':{'membername':_0x2d2eb1[_0x3f2e('0x36')],'interface':util[_0x3f2e('0x93')](_0x3f2e('0xcd'),_0x3f2e('0x94'),_0x2d2eb1[_0x3f2e('0x36')]),'type':_0x3f2e('0xca'),'exitAt':null}});}})[_0x3f2e('0x1d')](function(_0x242beb){if(_0x242beb[_0x3f2e('0x47')]){var _0x36bc4f=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');for(var _0xd77b67=0x0,_0x24f39f=_0x242beb[_0x3f2e('0x47')];_0xd77b67<_0x24f39f;_0xd77b67++){_0x242beb[_0xd77b67][_0x3f2e('0xd1')]({'exitAt':_0x36bc4f});}}})[_0x3f2e('0x1d')](function(){var _0x4fc25b=[];var _0x4a87bd=utils[_0x3f2e('0xd2')]();_0x4a87bd[_0x3f2e('0xce')](function(_0x4f6b02){_0x4fc25b[_0x3f2e('0xc9')]({'channel':_0x4f6b02,'membername':_0x2d2eb1[_0x3f2e('0x36')],'interface':util['format'](_0x3f2e('0xcd'),_0x3f2e('0x94'),_0x2d2eb1[_0x3f2e('0x36')]),'type':_0x3f2e('0xca'),'enterAt':moment()[_0x3f2e('0x93')]('YYYY-MM-DD\x20HH:mm:ss'),'data1':_0x141bf5[_0x3f2e('0x5a')][_0x3f2e('0xd3')]||_0x3f2e('0xd4'),'role':_0x2d2eb1[_0x3f2e('0x5d')],'internal':_0x2d2eb1[_0x3f2e('0x66')]});});return db['MemberReport'][_0x3f2e('0x59')](_0x4fc25b,{'individualHooks':!![]});})[_0x3f2e('0x1d')](function(){return _0x2d2eb1[_0x3f2e('0x31')]({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x141bf5['body'][_0x3f2e('0xd3')]||_0x3f2e('0xd4'),'lastPauseAt':moment()[_0x3f2e('0x93')](_0x3f2e('0xc6'))});})[_0x3f2e('0x1d')](respondWithResult(_0x55ec0b,null))[_0x3f2e('0x27')](handleError(_0x55ec0b,null));};exports[_0x3f2e('0xd5')]=function(_0x4ee7be,_0x2ed329,_0x295efa){var _0x323365;return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x4ee7be[_0x3f2e('0x57')]['id']},'attributes':['id',_0x3f2e('0x36'),_0x3f2e('0x5d'),_0x3f2e('0x95'),_0x3f2e('0xd6'),_0x3f2e('0xd7'),_0x3f2e('0xd8'),_0x3f2e('0xd9'),_0x3f2e('0xda'),_0x3f2e('0xdb'),_0x3f2e('0xdc')]})[_0x3f2e('0x1d')](handleEntityNotFound(_0x2ed329,null))[_0x3f2e('0x1d')](function(_0xc88dd){if(_0xc88dd){_0x323365=_0xc88dd;if(_0x4ee7be[_0x3f2e('0x5a')][_0x3f2e('0x8c')]&&!utils['isValidChannel'](_0x4ee7be[_0x3f2e('0x5a')][_0x3f2e('0x8c')])){throw new db[(_0x3f2e('0x81'))][(_0x3f2e('0x82'))](_0x3f2e('0x8d'));}switch(_0x4ee7be[_0x3f2e('0x5a')][_0x3f2e('0x8c')]){case'voice':return respondWithRpcPromise('QueuePause',_0x3f2e('0xd5'),{'id':_0x323365['id'],'name':_0x323365[_0x3f2e('0x36')],'pause':![]})[_0x3f2e('0x1d')](function(){return db[_0x3f2e('0x97')]['update']({'paused':0x0},{'where':{'UserId':_0x323365['id']},'individualHooks':!![]});})[_0x3f2e('0x1d')](function(){return db[_0x3f2e('0xc5')][_0x3f2e('0x58')]({'where':{'channel':_0x4ee7be[_0x3f2e('0x5a')]['channel'],'membername':_0x323365[_0x3f2e('0x36')],'interface':util['format'](_0x3f2e('0xcd'),_0x3f2e('0x94'),_0x323365['name']),'type':_0x3f2e('0xca'),'exitAt':null}});})[_0x3f2e('0x1d')](function(_0x4d08ca){if(_0x4d08ca){return _0x4d08ca[_0x3f2e('0x31')]({'exitAt':moment()[_0x3f2e('0x93')](_0x3f2e('0xc6')),'data2':_0x3f2e('0xdd')},{'individualHooks':!![]});}return null;})[_0x3f2e('0x1d')](function(){return _0x323365[_0x3f2e('0x31')]({'voicePause':![]});});case'mail':case _0x3f2e('0xde'):case _0x3f2e('0xdf'):case'sms':case _0x3f2e('0xe0'):return db[_0x3f2e('0xc5')][_0x3f2e('0x58')]({'where':{'channel':_0x4ee7be['body']['channel'],'membername':_0x323365['name'],'interface':util['format'](_0x3f2e('0xcd'),'SIP',_0x323365[_0x3f2e('0x36')]),'type':_0x3f2e('0xca'),'exitAt':null}})[_0x3f2e('0x1d')](function(_0x466376){if(_0x466376){return _0x466376[_0x3f2e('0x31')]({'exitAt':moment()['format'](_0x3f2e('0xc6')),'data2':_0x3f2e('0xdd')},{'individualHooks':!![]});}return null;})['then'](function(){var _0x3341e1={};_['set'](_0x3341e1,util[_0x3f2e('0x93')](_0x3f2e('0xe1'),_0x4ee7be[_0x3f2e('0x5a')][_0x3f2e('0x8c')],_0x3f2e('0xe2')),![]);return _0x323365['update'](_0x3341e1);});default:return respondWithRpcPromise(_0x3f2e('0xd0'),_0x3f2e('0xd5'),{'id':_0x323365['id'],'name':_0x323365['name'],'pause':![]})[_0x3f2e('0x1d')](function(){return db[_0x3f2e('0x97')][_0x3f2e('0x31')]({'paused':0x0},{'where':{'UserId':_0x323365['id']}});})['then'](function(){return db[_0x3f2e('0xc5')][_0x3f2e('0x92')]({'where':{'membername':_0x323365['name'],'interface':util[_0x3f2e('0x93')](_0x3f2e('0xcd'),_0x3f2e('0x94'),_0x323365['name']),'type':_0x3f2e('0xca'),'exitAt':null}});})[_0x3f2e('0x1d')](function(_0x47605d){var _0x20ebd8=[];_0x47605d[_0x3f2e('0xce')](function(_0x5f334f){_0x20ebd8[_0x3f2e('0xc9')](_0x5f334f['update']({'exitAt':moment()[_0x3f2e('0x93')](_0x3f2e('0xc6')),'data2':_0x3f2e('0xdd')}));});return BPromise[_0x3f2e('0xc7')](_0x20ebd8);})[_0x3f2e('0x1d')](function(){return _0x323365['update']({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0x3f2e('0x1d')](respondWithResult(_0x2ed329,null))[_0x3f2e('0x27')](handleError(_0x2ed329,null));};exports[_0x3f2e('0xe3')]=function(_0x224db4,_0x5b59e5,_0x398987){var _0x23dbad={};var _0x360f94={};var _0x113044;var _0x348493;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x224db4[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x5b59e5,null))['then'](function(_0x209dac){if(_0x209dac){_0x113044=_0x209dac;_0x360f94[_0x3f2e('0x3b')]=_[_0x3f2e('0x3d')](db[_0x3f2e('0xe4')][_0x3f2e('0x3a')]);_0x360f94[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x224db4[_0x3f2e('0x40')]);_0x360f94[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x360f94[_0x3f2e('0x3b')],_0x360f94[_0x3f2e('0x40')]);_0x23dbad[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x360f94[_0x3f2e('0x3b')],qs[_0x3f2e('0x46')](_0x224db4['query']['fields']));_0x23dbad['attributes']=_0x23dbad[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x23dbad[_0x3f2e('0x45')]:_0x360f94[_0x3f2e('0x3b')];_0x23dbad['order']=qs[_0x3f2e('0x4a')](_0x224db4[_0x3f2e('0x40')][_0x3f2e('0x4a')]);_0x23dbad[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x224db4[_0x3f2e('0x40')],_0x360f94[_0x3f2e('0x43')]));if(_0x224db4[_0x3f2e('0x40')]['filter']){_0x23dbad['where']=_[_0x3f2e('0x4f')](_0x23dbad['where'],{'$or':_[_0x3f2e('0xb1')](_0x23dbad[_0x3f2e('0x45')],function(_0x14b954){var _0x3602c8={};_0x3602c8[_0x14b954]={'$like':'%'+_0x224db4[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x3602c8;})});}_0x23dbad=_[_0x3f2e('0x4f')]({},_0x23dbad,_0x224db4['options']);return _0x113044[_0x3f2e('0xe3')](_0x23dbad);}})[_0x3f2e('0x1d')](function(_0x5414fb){if(_0x5414fb){_0x348493=_0x5414fb['length'];if(!_0x224db4['query']['hasOwnProperty']('nolimit')){_0x23dbad[_0x3f2e('0x2b')]=qs['limit'](_0x224db4[_0x3f2e('0x40')]['limit']);_0x23dbad['offset']=qs[_0x3f2e('0x2a')](_0x224db4['query'][_0x3f2e('0x2a')]);}return _0x113044['getTeams'](_0x23dbad);}})[_0x3f2e('0x1d')](function(_0x4668da){if(_0x4668da){return _0x4668da?{'count':_0x348493,'rows':_0x4668da}:null;}})['then'](respondWithResult(_0x5b59e5,null))[_0x3f2e('0x27')](handleError(_0x5b59e5,null));};exports['addTeams']=function(_0x41f146,_0x946628,_0x3ef305){return db['User'][_0x3f2e('0x58')]({'where':{'id':_0x41f146['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x946628,null))[_0x3f2e('0x1d')](function(_0x43c84c){if(_0x43c84c){return _0x43c84c[_0x3f2e('0xe5')](_0x41f146[_0x3f2e('0x5a')][_0x3f2e('0x8f')],_['omit'](_0x41f146[_0x3f2e('0x5a')],[_0x3f2e('0x8f'),'id'])||{});}})['then'](respondWithResult(_0x946628,null))[_0x3f2e('0x27')](handleError(_0x946628,null));};exports['removeTeams']=function(_0x8f5b93,_0x5a2602,_0x3a5d1f){var _0x32962b;return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x8f5b93[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x5a2602,null))['then'](function(_0x486875){if(_0x486875){return _0x486875[_0x3f2e('0xe6')](_0x8f5b93[_0x3f2e('0x40')][_0x3f2e('0x8f')]);}})[_0x3f2e('0x1d')](respondWithStatusCode(_0x5a2602,null))[_0x3f2e('0x27')](handleError(_0x5a2602,null));};exports[_0x3f2e('0xe7')]=function(_0x136b06,_0x1c36f5,_0x361dce){var _0x1dbf38={};var _0x3dec2f={};var _0x3bdddc;var _0x11431d;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x136b06[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x1c36f5,null))[_0x3f2e('0x1d')](function(_0x20bcfb){if(_0x20bcfb){_0x3bdddc=_0x20bcfb;_0x3dec2f[_0x3f2e('0x3b')]=_['keys'](db['CmList'][_0x3f2e('0x3a')]);_0x3dec2f[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x136b06[_0x3f2e('0x40')]);_0x3dec2f[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x3dec2f[_0x3f2e('0x3b')],_0x3dec2f[_0x3f2e('0x40')]);_0x1dbf38['attributes']=_[_0x3f2e('0x44')](_0x3dec2f['model'],qs['fields'](_0x136b06[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x1dbf38[_0x3f2e('0x45')]=_0x1dbf38[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x1dbf38['attributes']:_0x3dec2f[_0x3f2e('0x3b')];_0x1dbf38[_0x3f2e('0xb0')]=qs[_0x3f2e('0x4a')](_0x136b06[_0x3f2e('0x40')][_0x3f2e('0x4a')]);_0x1dbf38[_0x3f2e('0x4b')]=qs['filters'](_['pick'](_0x136b06[_0x3f2e('0x40')],_0x3dec2f['filters']));if(_0x136b06['query'][_0x3f2e('0x52')]){_0x1dbf38['where']=_['merge'](_0x1dbf38[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x1dbf38['attributes'],function(_0x180387){var _0x401580={};_0x401580[_0x180387]={'$like':'%'+_0x136b06[_0x3f2e('0x40')]['filter']+'%'};return _0x401580;})});}_0x1dbf38=_['merge']({},_0x1dbf38,_0x136b06[_0x3f2e('0x53')]);return _0x3bdddc['getLists'](_0x1dbf38);}})[_0x3f2e('0x1d')](function(_0x194c36){if(_0x194c36){_0x11431d=_0x194c36[_0x3f2e('0x47')];if(!_0x136b06[_0x3f2e('0x40')]['hasOwnProperty'](_0x3f2e('0x49'))){_0x1dbf38[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x136b06[_0x3f2e('0x40')][_0x3f2e('0x2b')]);_0x1dbf38[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x136b06[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0x3bdddc[_0x3f2e('0xe7')](_0x1dbf38);}})['then'](function(_0xd2fb94){if(_0xd2fb94){return _0xd2fb94?{'count':_0x11431d,'rows':_0xd2fb94}:null;}})['then'](respondWithResult(_0x1c36f5,null))[_0x3f2e('0x27')](handleError(_0x1c36f5,null));};exports[_0x3f2e('0xe8')]=function(_0x2cdab9,_0x55b3cf,_0x4f8637){var _0x4486e6={};var _0x3278cf={};var _0x276995;var _0x4167c4;return db['User'][_0x3f2e('0xa7')]({'where':{'id':_0x2cdab9['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x55b3cf,null))[_0x3f2e('0x1d')](function(_0x5434fc){if(_0x5434fc){_0x276995=_0x5434fc;_0x3278cf[_0x3f2e('0x3b')]=_['keys'](db['User'][_0x3f2e('0x3a')]);_0x3278cf[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x2cdab9[_0x3f2e('0x40')]);_0x3278cf[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x3278cf[_0x3f2e('0x3b')],_0x3278cf[_0x3f2e('0x40')]);_0x4486e6['attributes']=_[_0x3f2e('0x44')](_0x3278cf[_0x3f2e('0x3b')],qs[_0x3f2e('0x46')](_0x2cdab9[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x4486e6[_0x3f2e('0x45')]=_0x4486e6[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x4486e6[_0x3f2e('0x45')]:_0x3278cf[_0x3f2e('0x3b')];_0x4486e6['order']=qs['sort'](_0x2cdab9['query'][_0x3f2e('0x4a')]);_0x4486e6[_0x3f2e('0x4b')]=qs['filters'](_[_0x3f2e('0x4c')](_0x2cdab9[_0x3f2e('0x40')],_0x3278cf[_0x3f2e('0x43')]));if(_0x2cdab9[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x4486e6[_0x3f2e('0x4b')]=_[_0x3f2e('0x4f')](_0x4486e6[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x4486e6[_0x3f2e('0x45')],function(_0x4f8a9e){var _0x17215f={};_0x17215f[_0x4f8a9e]={'$like':'%'+_0x2cdab9[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x17215f;})});}_0x4486e6[_0x3f2e('0x3b')]=db[_0x3f2e('0x39')];_0x4486e6['as']=_0x3f2e('0xe9');_0x4486e6=_[_0x3f2e('0x4f')]({},_0x4486e6,_0x2cdab9['options']);return _0x276995[_0x3f2e('0xea')]({'include':[_0x4486e6]});}})[_0x3f2e('0x1d')](function(_0x32ee3c){if(_0x32ee3c){var _0x4b458c={},_0x201435=[],_0x412eae=0x0;for(var _0x5072ac=0x0;_0x5072ac<_0x32ee3c['length'];_0x5072ac+=0x1){for(var _0x197f55=0x0,_0x164c2f;_0x197f55<_0x32ee3c[_0x5072ac][_0x3f2e('0xe9')]['length'];_0x197f55+=0x1){_0x164c2f=_0x32ee3c[_0x5072ac]['Agents'][_0x197f55][_0x3f2e('0xae')]({'plain':!![]});_0x4b458c[_0x164c2f['id']]=_0x164c2f;}}_0x4b458c=_['values'](_0x4b458c);for(var _0x4b61c6=qs[_0x3f2e('0x2a')](_0x2cdab9[_0x3f2e('0x40')]['offset']);_0x4b61c6<_0x4b458c[_0x3f2e('0x47')]&&_0x201435[_0x3f2e('0x47')]<qs[_0x3f2e('0x2b')](_0x2cdab9[_0x3f2e('0x40')]['limit']);_0x4b61c6+=0x1){if(_0x4b458c[_0x4b61c6]){_0x201435[_0x3f2e('0xc9')](_0x4b458c[_0x4b61c6]);}}return{'count':_0x4b458c['length'],'rows':_0x201435};}})[_0x3f2e('0x1d')](respondWithResult(_0x55b3cf,null))[_0x3f2e('0x27')](handleError(_0x55b3cf,null));};exports[_0x3f2e('0x32')]=function(_0x462695,_0x59adac){if(_0x462695[_0x3f2e('0x61')]['id']==_0x462695[_0x3f2e('0x57')]['id']){return _0x59adac[_0x3f2e('0x28')](0x1f4)[_0x3f2e('0x37')]({'message':_0x3f2e('0xeb')});}return db['User'][_0x3f2e('0x58')]({'where':{'id':_0x462695['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x59adac,null))[_0x3f2e('0x1d')](removeEntity(_0x59adac,null))[_0x3f2e('0x27')](handleError(_0x59adac,null));};exports[_0x3f2e('0xec')]=function(_0x9c955a,_0x3b1926,_0x4d1737){return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x9c955a[_0x3f2e('0x57')]['id']}})['then'](handleEntityNotFound(_0x3b1926,null))[_0x3f2e('0x1d')](function(_0x4f2600){if(_0x4f2600){return _0x4f2600[_0x3f2e('0xec')](_0x9c955a['body'][_0x3f2e('0x8f')],_[_0x3f2e('0x5c')](_0x9c955a[_0x3f2e('0x5a')],[_0x3f2e('0x8f'),'id'])||{})[_0x3f2e('0xed')](function(){for(var _0x311016=0x0;_0x311016<_0x9c955a[_0x3f2e('0x5a')]['ids'][_0x3f2e('0x47')];_0x311016+=0x1){socket[_0x3f2e('0xee')]('user_has_chat_interactions:save',{'ChatInteractionId':Number(_0x9c955a[_0x3f2e('0x5a')][_0x3f2e('0x8f')][_0x311016]),'UserId':Number(_0x9c955a[_0x3f2e('0x57')]['id'])});}return _0x9c955a[_0x3f2e('0x5a')][_0x3f2e('0x8f')];});}})[_0x3f2e('0x1d')](respondWithResult(_0x3b1926,null))['catch'](handleError(_0x3b1926,null));};exports[_0x3f2e('0xef')]=function(_0x494b20,_0x499351,_0x3ccc11){var _0x55686f;return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x494b20[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x499351,null))['then'](function(_0x7e7eb0){if(_0x7e7eb0){return _0x7e7eb0[_0x3f2e('0xef')](_0x494b20[_0x3f2e('0x40')][_0x3f2e('0x8f')])[_0x3f2e('0x1d')](function(_0x1780a8){if(_[_0x3f2e('0xf0')](_0x494b20[_0x3f2e('0x40')][_0x3f2e('0x8f')])){for(var _0x26d7c0=0x0;_0x26d7c0<_0x494b20[_0x3f2e('0x40')][_0x3f2e('0x8f')][_0x3f2e('0x47')];_0x26d7c0+=0x1){socket['emit']('user_has_chat_interactions:remove',{'ChatInteractionId':Number(_0x494b20[_0x3f2e('0x40')][_0x3f2e('0x8f')][_0x26d7c0]),'UserId':Number(_0x494b20[_0x3f2e('0x57')]['id'])});}}else{socket[_0x3f2e('0xee')](_0x3f2e('0xf1'),{'ChatInteractionId':Number(_0x494b20[_0x3f2e('0x40')][_0x3f2e('0x8f')]),'UserId':Number(_0x494b20[_0x3f2e('0x57')]['id'])});}});}})[_0x3f2e('0x1d')](respondWithStatusCode(_0x499351,null))[_0x3f2e('0x27')](handleError(_0x499351,null));};exports[_0x3f2e('0xf2')]=function(_0x560a1e,_0x49b797,_0x102f0d){return db['User'][_0x3f2e('0x58')]({'where':{'id':_0x560a1e[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x49b797,null))[_0x3f2e('0x1d')](function(_0x45f4f7){if(_0x45f4f7){return _0x45f4f7[_0x3f2e('0xf2')](_0x560a1e['body']['ids'],_[_0x3f2e('0x5c')](_0x560a1e[_0x3f2e('0x5a')],['ids','id'])||{})[_0x3f2e('0xed')](function(){for(var _0x2a67e7=0x0;_0x2a67e7<_0x560a1e[_0x3f2e('0x5a')][_0x3f2e('0x8f')][_0x3f2e('0x47')];_0x2a67e7+=0x1){socket[_0x3f2e('0xee')](_0x3f2e('0xf3'),{'MailInteractionId':Number(_0x560a1e[_0x3f2e('0x5a')][_0x3f2e('0x8f')][_0x2a67e7]),'UserId':Number(_0x560a1e[_0x3f2e('0x57')]['id'])});}return _0x560a1e[_0x3f2e('0x5a')]['ids'];});}})[_0x3f2e('0x1d')](respondWithResult(_0x49b797,null))['catch'](handleError(_0x49b797,null));};exports[_0x3f2e('0xf4')]=function(_0x56573a,_0x5f2e59,_0x586c7c){var _0x3c1fcb;return db['User']['find']({'where':{'id':_0x56573a['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x5f2e59,null))['then'](function(_0x5ceac3){if(_0x5ceac3){return _0x5ceac3[_0x3f2e('0xf4')](_0x56573a[_0x3f2e('0x40')][_0x3f2e('0x8f')])[_0x3f2e('0x1d')](function(_0x25f1e7){if(_[_0x3f2e('0xf0')](_0x56573a[_0x3f2e('0x40')]['ids'])){for(var _0x558325=0x0;_0x558325<_0x56573a['query'][_0x3f2e('0x8f')][_0x3f2e('0x47')];_0x558325+=0x1){socket[_0x3f2e('0xee')](_0x3f2e('0xf5'),{'MailInteractionId':Number(_0x56573a[_0x3f2e('0x40')][_0x3f2e('0x8f')][_0x558325]),'UserId':Number(_0x56573a['params']['id'])});}}else{socket[_0x3f2e('0xee')]('user_has_mail_interactions:remove',{'MailInteractionId':Number(_0x56573a[_0x3f2e('0x40')][_0x3f2e('0x8f')]),'UserId':Number(_0x56573a[_0x3f2e('0x57')]['id'])});}});}})[_0x3f2e('0x1d')](respondWithStatusCode(_0x5f2e59,null))[_0x3f2e('0x27')](handleError(_0x5f2e59,null));};exports[_0x3f2e('0xf6')]=function(_0x3e1f86,_0x97c3d5,_0x2e932c){return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x3e1f86[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x97c3d5,null))[_0x3f2e('0x1d')](function(_0x5199fd){if(_0x5199fd){return _0x5199fd[_0x3f2e('0xf6')](_0x3e1f86['body'][_0x3f2e('0x8f')],_[_0x3f2e('0x5c')](_0x3e1f86[_0x3f2e('0x5a')],[_0x3f2e('0x8f'),'id'])||{})[_0x3f2e('0xed')](function(){for(var _0x4826d9=0x0;_0x4826d9<_0x3e1f86[_0x3f2e('0x5a')][_0x3f2e('0x8f')][_0x3f2e('0x47')];_0x4826d9+=0x1){socket[_0x3f2e('0xee')](_0x3f2e('0xf7'),{'FaxInteractionId':Number(_0x3e1f86[_0x3f2e('0x5a')][_0x3f2e('0x8f')][_0x4826d9]),'UserId':Number(_0x3e1f86[_0x3f2e('0x57')]['id'])});}return _0x3e1f86[_0x3f2e('0x5a')]['ids'];});}})[_0x3f2e('0x1d')](respondWithResult(_0x97c3d5,null))[_0x3f2e('0x27')](handleError(_0x97c3d5,null));};exports[_0x3f2e('0xf8')]=function(_0x300cce,_0x1f7115,_0xc9e6a7){var _0x433966;return db[_0x3f2e('0x39')]['find']({'where':{'id':_0x300cce[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x1f7115,null))[_0x3f2e('0x1d')](function(_0xfcce5){if(_0xfcce5){return _0xfcce5[_0x3f2e('0xf8')](_0x300cce[_0x3f2e('0x40')][_0x3f2e('0x8f')])['then'](function(_0x864a9b){if(_['isArray'](_0x300cce[_0x3f2e('0x40')][_0x3f2e('0x8f')])){for(var _0x5dc2ef=0x0;_0x5dc2ef<_0x300cce[_0x3f2e('0x40')][_0x3f2e('0x8f')][_0x3f2e('0x47')];_0x5dc2ef+=0x1){socket[_0x3f2e('0xee')]('user_has_fax_interactions:remove',{'FaxInteractionId':Number(_0x300cce[_0x3f2e('0x40')][_0x3f2e('0x8f')][_0x5dc2ef]),'UserId':Number(_0x300cce[_0x3f2e('0x57')]['id'])});}}else{socket[_0x3f2e('0xee')](_0x3f2e('0xf9'),{'FaxInteractionId':Number(_0x300cce[_0x3f2e('0x40')]['ids']),'UserId':Number(_0x300cce[_0x3f2e('0x57')]['id'])});}});}})[_0x3f2e('0x1d')](respondWithStatusCode(_0x1f7115,null))['catch'](handleError(_0x1f7115,null));};exports[_0x3f2e('0xfa')]=function(_0xb0ebcb,_0x5b7e14,_0x19c77a){return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0xb0ebcb[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x5b7e14,null))[_0x3f2e('0x1d')](function(_0x5eae7f){if(_0x5eae7f){return _0x5eae7f[_0x3f2e('0xfa')](_0xb0ebcb['body']['ids'],_['omit'](_0xb0ebcb[_0x3f2e('0x5a')],[_0x3f2e('0x8f'),'id'])||{})[_0x3f2e('0xed')](function(){for(var _0x5d7091=0x0;_0x5d7091<_0xb0ebcb[_0x3f2e('0x5a')][_0x3f2e('0x8f')][_0x3f2e('0x47')];_0x5d7091+=0x1){socket[_0x3f2e('0xee')](_0x3f2e('0xfb'),{'SmsInteractionId':Number(_0xb0ebcb[_0x3f2e('0x5a')][_0x3f2e('0x8f')][_0x5d7091]),'UserId':Number(_0xb0ebcb[_0x3f2e('0x57')]['id'])});}return _0xb0ebcb[_0x3f2e('0x5a')][_0x3f2e('0x8f')];});}})[_0x3f2e('0x1d')](respondWithResult(_0x5b7e14,null))[_0x3f2e('0x27')](handleError(_0x5b7e14,null));};exports[_0x3f2e('0xfc')]=function(_0x534a84,_0x3127ea,_0x408eae){var _0x42e5a6;return db[_0x3f2e('0x39')]['find']({'where':{'id':_0x534a84[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x3127ea,null))[_0x3f2e('0x1d')](function(_0x7acefd){if(_0x7acefd){return _0x7acefd[_0x3f2e('0xfc')](_0x534a84[_0x3f2e('0x40')][_0x3f2e('0x8f')])[_0x3f2e('0x1d')](function(_0x1f83e0){if(_['isArray'](_0x534a84[_0x3f2e('0x40')]['ids'])){for(var _0x2ed1eb=0x0;_0x2ed1eb<_0x534a84[_0x3f2e('0x40')][_0x3f2e('0x8f')][_0x3f2e('0x47')];_0x2ed1eb+=0x1){socket['emit'](_0x3f2e('0xfd'),{'SmsInteractionId':Number(_0x534a84[_0x3f2e('0x40')][_0x3f2e('0x8f')][_0x2ed1eb]),'UserId':Number(_0x534a84[_0x3f2e('0x57')]['id'])});}}else{socket[_0x3f2e('0xee')](_0x3f2e('0xfd'),{'SmsInteractionId':Number(_0x534a84[_0x3f2e('0x40')][_0x3f2e('0x8f')]),'UserId':Number(_0x534a84[_0x3f2e('0x57')]['id'])});}});}})[_0x3f2e('0x1d')](respondWithStatusCode(_0x3127ea,null))[_0x3f2e('0x27')](handleError(_0x3127ea,null));};exports[_0x3f2e('0xfe')]=function(_0x86e831,_0x4e8a55,_0x4ea588){return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x86e831[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x4e8a55,null))[_0x3f2e('0x1d')](function(_0x5d151f){if(_0x5d151f){return _0x5d151f[_0x3f2e('0xfe')](_0x86e831[_0x3f2e('0x5a')][_0x3f2e('0x8f')],_[_0x3f2e('0x5c')](_0x86e831[_0x3f2e('0x5a')],[_0x3f2e('0x8f'),'id'])||{})[_0x3f2e('0xed')](function(){for(var _0x26948c=0x0;_0x26948c<_0x86e831[_0x3f2e('0x5a')]['ids'][_0x3f2e('0x47')];_0x26948c+=0x1){socket['emit']('user_has_openchannel_interactions:save',{'OpenchannelInteractionId':Number(_0x86e831['body'][_0x3f2e('0x8f')][_0x26948c]),'UserId':Number(_0x86e831['params']['id'])});}return _0x86e831[_0x3f2e('0x5a')][_0x3f2e('0x8f')];});}})[_0x3f2e('0x1d')](respondWithResult(_0x4e8a55,null))[_0x3f2e('0x27')](handleError(_0x4e8a55,null));};exports[_0x3f2e('0xff')]=function(_0x1d97ef,_0xd4d7e0,_0x589910){var _0x27f851;return db[_0x3f2e('0x39')]['find']({'where':{'id':_0x1d97ef[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0xd4d7e0,null))[_0x3f2e('0x1d')](function(_0x360f57){if(_0x360f57){return _0x360f57[_0x3f2e('0xff')](_0x1d97ef[_0x3f2e('0x40')][_0x3f2e('0x8f')])['then'](function(_0x52f069){if(_[_0x3f2e('0xf0')](_0x1d97ef[_0x3f2e('0x40')][_0x3f2e('0x8f')])){for(var _0x1956cd=0x0;_0x1956cd<_0x1d97ef['query'][_0x3f2e('0x8f')][_0x3f2e('0x47')];_0x1956cd+=0x1){socket[_0x3f2e('0xee')](_0x3f2e('0x100'),{'OpenchannelInteractionId':Number(_0x1d97ef[_0x3f2e('0x40')]['ids'][_0x1956cd]),'UserId':Number(_0x1d97ef[_0x3f2e('0x57')]['id'])});}}else{socket[_0x3f2e('0xee')](_0x3f2e('0x100'),{'OpenchannelInteractionId':Number(_0x1d97ef[_0x3f2e('0x40')][_0x3f2e('0x8f')]),'UserId':Number(_0x1d97ef['params']['id'])});}});}})[_0x3f2e('0x1d')](respondWithStatusCode(_0xd4d7e0,null))['catch'](handleError(_0xd4d7e0,null));};exports[_0x3f2e('0x101')]=function(_0x35fb0a,_0x31c647,_0x297941){var _0x29d4a7={};var _0x1dbe87={};var _0x360b39;var _0x2f081a;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x35fb0a[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x31c647,null))['then'](function(_0x38270c){if(_0x38270c){_0x360b39=_0x38270c;_0x1dbe87[_0x3f2e('0x3b')]=_[_0x3f2e('0x3d')](db[_0x3f2e('0x102')][_0x3f2e('0x3a')]);_0x1dbe87[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x35fb0a[_0x3f2e('0x40')]);_0x1dbe87[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x1dbe87[_0x3f2e('0x3b')],_0x1dbe87[_0x3f2e('0x40')]);_0x29d4a7[_0x3f2e('0x45')]=_['intersection'](_0x1dbe87[_0x3f2e('0x3b')],qs[_0x3f2e('0x46')](_0x35fb0a[_0x3f2e('0x40')]['fields']));_0x29d4a7[_0x3f2e('0x45')]=_0x29d4a7['attributes'][_0x3f2e('0x47')]?_0x29d4a7['attributes']:_0x1dbe87[_0x3f2e('0x3b')];_0x29d4a7[_0x3f2e('0xb0')]=qs[_0x3f2e('0x4a')](_0x35fb0a[_0x3f2e('0x40')]['sort']);_0x29d4a7[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x35fb0a[_0x3f2e('0x40')],_0x1dbe87[_0x3f2e('0x43')]));if(_0x35fb0a[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x29d4a7['where']=_['merge'](_0x29d4a7[_0x3f2e('0x4b')],{'$or':_['map'](_0x29d4a7['attributes'],function(_0x26d032){var _0x46049a={};_0x46049a[_0x26d032]={'$like':'%'+_0x35fb0a[_0x3f2e('0x40')]['filter']+'%'};return _0x46049a;})});}_0x29d4a7=_[_0x3f2e('0x4f')]({},_0x29d4a7,_0x35fb0a[_0x3f2e('0x53')]);return _0x360b39[_0x3f2e('0x101')](_0x29d4a7);}})['then'](function(_0x3ad650){if(_0x3ad650){_0x2f081a=_0x3ad650['length'];if(!_0x35fb0a[_0x3f2e('0x40')]['hasOwnProperty'](_0x3f2e('0x49'))){_0x29d4a7[_0x3f2e('0x2b')]=qs['limit'](_0x35fb0a[_0x3f2e('0x40')]['limit']);_0x29d4a7[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x35fb0a[_0x3f2e('0x40')]['offset']);}return _0x360b39[_0x3f2e('0x101')](_0x29d4a7);}})[_0x3f2e('0x1d')](function(_0x31916c){if(_0x31916c){return _0x31916c?{'count':_0x2f081a,'rows':_0x31916c}:null;}})[_0x3f2e('0x1d')](respondWithResult(_0x31c647,null))[_0x3f2e('0x27')](handleError(_0x31c647,null));};exports[_0x3f2e('0x103')]=function(_0x323fb5,_0x56c105,_0x450159){var _0x75b349={};var _0x292b58={};var _0x457deb;var _0x47a1cd;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x323fb5[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x56c105,null))[_0x3f2e('0x1d')](function(_0xad0bcc){if(_0xad0bcc){_0x457deb=_0xad0bcc;_0x292b58[_0x3f2e('0x3b')]=_['keys'](db[_0x3f2e('0x104')]['rawAttributes']);_0x292b58[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x323fb5[_0x3f2e('0x40')]);_0x292b58['filters']=_[_0x3f2e('0x44')](_0x292b58[_0x3f2e('0x3b')],_0x292b58[_0x3f2e('0x40')]);_0x75b349[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x292b58[_0x3f2e('0x3b')],qs[_0x3f2e('0x46')](_0x323fb5[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x75b349['attributes']=_0x75b349[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x75b349[_0x3f2e('0x45')]:_0x292b58[_0x3f2e('0x3b')];_0x75b349[_0x3f2e('0xb0')]=qs[_0x3f2e('0x4a')](_0x323fb5['query'][_0x3f2e('0x4a')]);_0x75b349[_0x3f2e('0x4b')]=qs['filters'](_[_0x3f2e('0x4c')](_0x323fb5[_0x3f2e('0x40')],_0x292b58[_0x3f2e('0x43')]));if(_0x323fb5[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x75b349['where']=_['merge'](_0x75b349[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x75b349[_0x3f2e('0x45')],function(_0x48f1e4){var _0x343a2a={};_0x343a2a[_0x48f1e4]={'$like':'%'+_0x323fb5[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x343a2a;})});}_0x75b349=_['merge']({},_0x75b349,_0x323fb5[_0x3f2e('0x53')]);return _0x457deb[_0x3f2e('0x103')](_0x75b349);}})['then'](function(_0x29121a){if(_0x29121a){_0x47a1cd=_0x29121a[_0x3f2e('0x47')];if(!_0x323fb5[_0x3f2e('0x40')]['hasOwnProperty'](_0x3f2e('0x49'))){_0x75b349[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x323fb5[_0x3f2e('0x40')]['limit']);_0x75b349['offset']=qs[_0x3f2e('0x2a')](_0x323fb5[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0x457deb[_0x3f2e('0x103')](_0x75b349);}})[_0x3f2e('0x1d')](function(_0x502620){if(_0x502620){return _0x502620?{'count':_0x47a1cd,'rows':_0x502620}:null;}})['then'](respondWithResult(_0x56c105,null))['catch'](handleError(_0x56c105,null));};exports[_0x3f2e('0x105')]=function(_0xcb644d,_0x2afdea,_0x4b698b){return db[_0x3f2e('0x39')]['find']({'where':{'id':_0xcb644d['params']['id']}})['then'](handleEntityNotFound(_0x2afdea,null))['then'](function(_0x2924a4){if(_0x2924a4){return _0x2924a4[_0x3f2e('0x105')](_0xcb644d[_0x3f2e('0x5a')]['ids'],_[_0x3f2e('0x5c')](_0xcb644d[_0x3f2e('0x5a')],[_0x3f2e('0x8f'),'id'])||{});}})[_0x3f2e('0x1d')](respondWithResult(_0x2afdea,null))['catch'](handleError(_0x2afdea,null));};exports[_0x3f2e('0x106')]=function(_0x1dde76,_0x2505ad,_0x184115){var _0x3f831d;return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x1dde76[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x2505ad,null))[_0x3f2e('0x1d')](function(_0x22f6ce){if(_0x22f6ce){return _0x22f6ce['removeFaxAccounts'](_0x1dde76[_0x3f2e('0x40')][_0x3f2e('0x8f')]);}})[_0x3f2e('0x1d')](respondWithStatusCode(_0x2505ad,null))[_0x3f2e('0x27')](handleError(_0x2505ad,null));};exports[_0x3f2e('0x107')]=function(_0x2cd0e3,_0x54e8c3,_0x48a6da){var _0x46d7b5={};var _0x5aff0b={};var _0x391829;var _0x4c9f41;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x2cd0e3['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x54e8c3,null))[_0x3f2e('0x1d')](function(_0x18a99e){if(_0x18a99e){_0x391829=_0x18a99e;_0x5aff0b[_0x3f2e('0x3b')]=_[_0x3f2e('0x3d')](db[_0x3f2e('0x108')]['rawAttributes']);_0x5aff0b[_0x3f2e('0x40')]=_['keys'](_0x2cd0e3[_0x3f2e('0x40')]);_0x5aff0b[_0x3f2e('0x43')]=_['intersection'](_0x5aff0b[_0x3f2e('0x3b')],_0x5aff0b[_0x3f2e('0x40')]);_0x46d7b5['attributes']=_[_0x3f2e('0x44')](_0x5aff0b[_0x3f2e('0x3b')],qs[_0x3f2e('0x46')](_0x2cd0e3[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x46d7b5['attributes']=_0x46d7b5[_0x3f2e('0x45')]['length']?_0x46d7b5[_0x3f2e('0x45')]:_0x5aff0b[_0x3f2e('0x3b')];_0x46d7b5[_0x3f2e('0xb0')]=qs['sort'](_0x2cd0e3[_0x3f2e('0x40')][_0x3f2e('0x4a')]);_0x46d7b5[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x2cd0e3[_0x3f2e('0x40')],_0x5aff0b[_0x3f2e('0x43')]));if(_0x2cd0e3[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x46d7b5[_0x3f2e('0x4b')]=_[_0x3f2e('0x4f')](_0x46d7b5[_0x3f2e('0x4b')],{'$or':_['map'](_0x46d7b5['attributes'],function(_0x45eef1){var _0x3c4408={};_0x3c4408[_0x45eef1]={'$like':'%'+_0x2cd0e3[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x3c4408;})});}_0x46d7b5=_[_0x3f2e('0x4f')]({},_0x46d7b5,_0x2cd0e3[_0x3f2e('0x53')]);return _0x391829['getMailAccounts'](_0x46d7b5);}})['then'](function(_0x2906e8){if(_0x2906e8){_0x4c9f41=_0x2906e8[_0x3f2e('0x47')];if(!_0x2cd0e3[_0x3f2e('0x40')][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x46d7b5[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x2cd0e3[_0x3f2e('0x40')][_0x3f2e('0x2b')]);_0x46d7b5[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x2cd0e3[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0x391829[_0x3f2e('0x107')](_0x46d7b5);}})[_0x3f2e('0x1d')](function(_0x1d4b42){if(_0x1d4b42){return _0x1d4b42?{'count':_0x4c9f41,'rows':_0x1d4b42}:null;}})[_0x3f2e('0x1d')](respondWithResult(_0x54e8c3,null))[_0x3f2e('0x27')](handleError(_0x54e8c3,null));};exports[_0x3f2e('0x109')]=function(_0x6181ad,_0x3aba38,_0x5ae40a){return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x6181ad['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x3aba38,null))[_0x3f2e('0x1d')](function(_0x5d0804){if(_0x5d0804){return _0x5d0804['addMailAccounts'](_0x6181ad[_0x3f2e('0x5a')][_0x3f2e('0x8f')],_['omit'](_0x6181ad[_0x3f2e('0x5a')],['ids','id'])||{});}})['then'](respondWithResult(_0x3aba38,null))[_0x3f2e('0x27')](handleError(_0x3aba38,null));};exports['removeMailAccounts']=function(_0x41417c,_0x2cc625,_0x330dc8){var _0x4c457f;return db['User'][_0x3f2e('0x58')]({'where':{'id':_0x41417c['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x2cc625,null))['then'](function(_0x1bc60c){if(_0x1bc60c){return _0x1bc60c['removeMailAccounts'](_0x41417c[_0x3f2e('0x40')][_0x3f2e('0x8f')]);}})['then'](respondWithStatusCode(_0x2cc625,null))['catch'](handleError(_0x2cc625,null));};exports['getOpenchannelAccounts']=function(_0x26886f,_0x5f1bf8,_0x16756d){var _0x338c25={};var _0x4d4dee={};var _0x31975d;var _0x184c34;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x26886f[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x5f1bf8,null))[_0x3f2e('0x1d')](function(_0x423d23){if(_0x423d23){_0x31975d=_0x423d23;_0x4d4dee[_0x3f2e('0x3b')]=_[_0x3f2e('0x3d')](db[_0x3f2e('0x10a')][_0x3f2e('0x3a')]);_0x4d4dee[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x26886f['query']);_0x4d4dee[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x4d4dee['model'],_0x4d4dee[_0x3f2e('0x40')]);_0x338c25[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x4d4dee[_0x3f2e('0x3b')],qs[_0x3f2e('0x46')](_0x26886f[_0x3f2e('0x40')]['fields']));_0x338c25[_0x3f2e('0x45')]=_0x338c25[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x338c25['attributes']:_0x4d4dee[_0x3f2e('0x3b')];_0x338c25[_0x3f2e('0xb0')]=qs['sort'](_0x26886f['query'][_0x3f2e('0x4a')]);_0x338c25[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_[_0x3f2e('0x4c')](_0x26886f[_0x3f2e('0x40')],_0x4d4dee[_0x3f2e('0x43')]));if(_0x26886f['query']['filter']){_0x338c25[_0x3f2e('0x4b')]=_[_0x3f2e('0x4f')](_0x338c25['where'],{'$or':_['map'](_0x338c25[_0x3f2e('0x45')],function(_0xa332e7){var _0x50cb37={};_0x50cb37[_0xa332e7]={'$like':'%'+_0x26886f['query'][_0x3f2e('0x52')]+'%'};return _0x50cb37;})});}_0x338c25=_[_0x3f2e('0x4f')]({},_0x338c25,_0x26886f[_0x3f2e('0x53')]);return _0x31975d[_0x3f2e('0x10b')](_0x338c25);}})[_0x3f2e('0x1d')](function(_0x332719){if(_0x332719){_0x184c34=_0x332719[_0x3f2e('0x47')];if(!_0x26886f[_0x3f2e('0x40')][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x338c25[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x26886f[_0x3f2e('0x40')]['limit']);_0x338c25['offset']=qs['offset'](_0x26886f[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0x31975d['getOpenchannelAccounts'](_0x338c25);}})[_0x3f2e('0x1d')](function(_0x227a4a){if(_0x227a4a){return _0x227a4a?{'count':_0x184c34,'rows':_0x227a4a}:null;}})[_0x3f2e('0x1d')](respondWithResult(_0x5f1bf8,null))['catch'](handleError(_0x5f1bf8,null));};exports[_0x3f2e('0x10c')]=function(_0x262468,_0x27482d,_0x57d294){return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x262468[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x27482d,null))[_0x3f2e('0x1d')](function(_0x485e0c){if(_0x485e0c){return _0x485e0c[_0x3f2e('0x10c')](_0x262468[_0x3f2e('0x5a')][_0x3f2e('0x8f')],_['omit'](_0x262468[_0x3f2e('0x5a')],['ids','id'])||{});}})['then'](respondWithResult(_0x27482d,null))[_0x3f2e('0x27')](handleError(_0x27482d,null));};exports[_0x3f2e('0x10d')]=function(_0x3e4665,_0x514b8c,_0x2019ce){var _0x3976ef;return db[_0x3f2e('0x39')]['find']({'where':{'id':_0x3e4665['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x514b8c,null))[_0x3f2e('0x1d')](function(_0x24953){if(_0x24953){return _0x24953[_0x3f2e('0x10d')](_0x3e4665[_0x3f2e('0x40')][_0x3f2e('0x8f')]);}})[_0x3f2e('0x1d')](respondWithStatusCode(_0x514b8c,null))[_0x3f2e('0x27')](handleError(_0x514b8c,null));};exports['getSmsAccounts']=function(_0x5c096c,_0xce009d,_0x4a240c){var _0x4298d2={};var _0x5d5d13={};var _0x295f31;var _0xbfce6d;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x5c096c[_0x3f2e('0x57')]['id']}})['then'](handleEntityNotFound(_0xce009d,null))[_0x3f2e('0x1d')](function(_0x180e95){if(_0x180e95){_0x295f31=_0x180e95;_0x5d5d13[_0x3f2e('0x3b')]=_['keys'](db['SmsAccount'][_0x3f2e('0x3a')]);_0x5d5d13[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x5c096c['query']);_0x5d5d13[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x5d5d13[_0x3f2e('0x3b')],_0x5d5d13[_0x3f2e('0x40')]);_0x4298d2[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x5d5d13['model'],qs[_0x3f2e('0x46')](_0x5c096c[_0x3f2e('0x40')]['fields']));_0x4298d2[_0x3f2e('0x45')]=_0x4298d2[_0x3f2e('0x45')][_0x3f2e('0x47')]?_0x4298d2[_0x3f2e('0x45')]:_0x5d5d13[_0x3f2e('0x3b')];_0x4298d2[_0x3f2e('0xb0')]=qs[_0x3f2e('0x4a')](_0x5c096c[_0x3f2e('0x40')][_0x3f2e('0x4a')]);_0x4298d2[_0x3f2e('0x4b')]=qs['filters'](_[_0x3f2e('0x4c')](_0x5c096c[_0x3f2e('0x40')],_0x5d5d13[_0x3f2e('0x43')]));if(_0x5c096c['query'][_0x3f2e('0x52')]){_0x4298d2[_0x3f2e('0x4b')]=_['merge'](_0x4298d2['where'],{'$or':_[_0x3f2e('0xb1')](_0x4298d2[_0x3f2e('0x45')],function(_0x40d8f4){var _0x248013={};_0x248013[_0x40d8f4]={'$like':'%'+_0x5c096c[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x248013;})});}_0x4298d2=_[_0x3f2e('0x4f')]({},_0x4298d2,_0x5c096c[_0x3f2e('0x53')]);return _0x295f31['getSmsAccounts'](_0x4298d2);}})[_0x3f2e('0x1d')](function(_0x43108f){if(_0x43108f){_0xbfce6d=_0x43108f[_0x3f2e('0x47')];if(!_0x5c096c[_0x3f2e('0x40')][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x4298d2[_0x3f2e('0x2b')]=qs['limit'](_0x5c096c[_0x3f2e('0x40')]['limit']);_0x4298d2[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x5c096c[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0x295f31[_0x3f2e('0x10e')](_0x4298d2);}})[_0x3f2e('0x1d')](function(_0x5c7eab){if(_0x5c7eab){return _0x5c7eab?{'count':_0xbfce6d,'rows':_0x5c7eab}:null;}})[_0x3f2e('0x1d')](respondWithResult(_0xce009d,null))[_0x3f2e('0x27')](handleError(_0xce009d,null));};exports[_0x3f2e('0x10f')]=function(_0x4cc2e0,_0x385b0e,_0x59c579){return db['User'][_0x3f2e('0x58')]({'where':{'id':_0x4cc2e0['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x385b0e,null))['then'](function(_0x5b3783){if(_0x5b3783){return _0x5b3783[_0x3f2e('0x10f')](_0x4cc2e0['body'][_0x3f2e('0x8f')],_[_0x3f2e('0x5c')](_0x4cc2e0[_0x3f2e('0x5a')],[_0x3f2e('0x8f'),'id'])||{});}})[_0x3f2e('0x1d')](respondWithResult(_0x385b0e,null))[_0x3f2e('0x27')](handleError(_0x385b0e,null));};exports['removeSmsAccounts']=function(_0x292e92,_0x333091,_0x2b11c3){var _0xf4f103;return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x292e92['params']['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x333091,null))[_0x3f2e('0x1d')](function(_0x3807fd){if(_0x3807fd){return _0x3807fd[_0x3f2e('0x110')](_0x292e92[_0x3f2e('0x40')]['ids']);}})[_0x3f2e('0x1d')](respondWithStatusCode(_0x333091,null))[_0x3f2e('0x27')](handleError(_0x333091,null));};exports['getChatWebsites']=function(_0x52f6b8,_0x52bef6,_0x72d7fe){var _0x340a8e={};var _0x17541a={};var _0x5c3a38;var _0x5b8327;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x52f6b8[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x52bef6,null))[_0x3f2e('0x1d')](function(_0x3acacb){if(_0x3acacb){_0x5c3a38=_0x3acacb;_0x17541a['model']=_['keys'](db[_0x3f2e('0x111')][_0x3f2e('0x3a')]);_0x17541a[_0x3f2e('0x40')]=_[_0x3f2e('0x3d')](_0x52f6b8[_0x3f2e('0x40')]);_0x17541a[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x17541a[_0x3f2e('0x3b')],_0x17541a[_0x3f2e('0x40')]);_0x340a8e[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x17541a[_0x3f2e('0x3b')],qs['fields'](_0x52f6b8['query'][_0x3f2e('0x46')]));_0x340a8e['attributes']=_0x340a8e[_0x3f2e('0x45')]['length']?_0x340a8e[_0x3f2e('0x45')]:_0x17541a[_0x3f2e('0x3b')];_0x340a8e[_0x3f2e('0xb0')]=qs[_0x3f2e('0x4a')](_0x52f6b8[_0x3f2e('0x40')][_0x3f2e('0x4a')]);_0x340a8e[_0x3f2e('0x4b')]=qs['filters'](_[_0x3f2e('0x4c')](_0x52f6b8[_0x3f2e('0x40')],_0x17541a[_0x3f2e('0x43')]));if(_0x52f6b8[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x340a8e[_0x3f2e('0x4b')]=_[_0x3f2e('0x4f')](_0x340a8e[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x340a8e[_0x3f2e('0x45')],function(_0x193535){var _0x575ac0={};_0x575ac0[_0x193535]={'$like':'%'+_0x52f6b8[_0x3f2e('0x40')][_0x3f2e('0x52')]+'%'};return _0x575ac0;})});}_0x340a8e=_[_0x3f2e('0x4f')]({},_0x340a8e,_0x52f6b8['options']);return _0x5c3a38['getChatWebsites'](_0x340a8e);}})['then'](function(_0x5056ab){if(_0x5056ab){_0x5b8327=_0x5056ab[_0x3f2e('0x47')];if(!_0x52f6b8['query'][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x340a8e[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x52f6b8[_0x3f2e('0x40')][_0x3f2e('0x2b')]);_0x340a8e[_0x3f2e('0x2a')]=qs[_0x3f2e('0x2a')](_0x52f6b8[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0x5c3a38['getChatWebsites'](_0x340a8e);}})[_0x3f2e('0x1d')](function(_0xcc2945){if(_0xcc2945){return _0xcc2945?{'count':_0x5b8327,'rows':_0xcc2945}:null;}})[_0x3f2e('0x1d')](respondWithResult(_0x52bef6,null))[_0x3f2e('0x27')](handleError(_0x52bef6,null));};exports['addChatWebsites']=function(_0x5a7dd8,_0x2a9df1,_0x2b7bd7){return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x5a7dd8[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x2a9df1,null))[_0x3f2e('0x1d')](function(_0x416025){if(_0x416025){return _0x416025[_0x3f2e('0x112')](_0x5a7dd8[_0x3f2e('0x5a')]['ids'],_[_0x3f2e('0x5c')](_0x5a7dd8['body'],['ids','id'])||{});}})[_0x3f2e('0x1d')](respondWithResult(_0x2a9df1,null))[_0x3f2e('0x27')](handleError(_0x2a9df1,null));};exports[_0x3f2e('0x113')]=function(_0x4d26e5,_0x5967ce,_0x5927ea){var _0x540a35;return db[_0x3f2e('0x39')]['find']({'where':{'id':_0x4d26e5[_0x3f2e('0x57')]['id']}})['then'](handleEntityNotFound(_0x5967ce,null))[_0x3f2e('0x1d')](function(_0x2e3fc1){if(_0x2e3fc1){return _0x2e3fc1['removeChatWebsites'](_0x4d26e5[_0x3f2e('0x40')][_0x3f2e('0x8f')]);}})[_0x3f2e('0x1d')](respondWithStatusCode(_0x5967ce,null))['catch'](handleError(_0x5967ce,null));};exports[_0x3f2e('0x114')]=function(_0x932cd7,_0x3e49af,_0x2bff58){var _0x5dafa5={};var _0x480bcb={};var _0xc148fe;var _0x141cae;return db[_0x3f2e('0x39')][_0x3f2e('0xa7')]({'where':{'id':_0x932cd7[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x3e49af,null))[_0x3f2e('0x1d')](function(_0x567f51){if(_0x567f51){_0xc148fe=_0x567f51;_0x480bcb[_0x3f2e('0x3b')]=_[_0x3f2e('0x3d')](db[_0x3f2e('0x115')][_0x3f2e('0x3a')]);_0x480bcb[_0x3f2e('0x40')]=_['keys'](_0x932cd7[_0x3f2e('0x40')]);_0x480bcb[_0x3f2e('0x43')]=_[_0x3f2e('0x44')](_0x480bcb[_0x3f2e('0x3b')],_0x480bcb[_0x3f2e('0x40')]);_0x5dafa5[_0x3f2e('0x45')]=_[_0x3f2e('0x44')](_0x480bcb['model'],qs['fields'](_0x932cd7[_0x3f2e('0x40')][_0x3f2e('0x46')]));_0x5dafa5[_0x3f2e('0x45')]=_0x5dafa5[_0x3f2e('0x45')]['length']?_0x5dafa5[_0x3f2e('0x45')]:_0x480bcb[_0x3f2e('0x3b')];_0x5dafa5[_0x3f2e('0xb0')]=qs[_0x3f2e('0x4a')](_0x932cd7[_0x3f2e('0x40')][_0x3f2e('0x4a')]);_0x5dafa5[_0x3f2e('0x4b')]=qs[_0x3f2e('0x43')](_['pick'](_0x932cd7[_0x3f2e('0x40')],_0x480bcb['filters']));if(_0x932cd7[_0x3f2e('0x40')][_0x3f2e('0x52')]){_0x5dafa5['where']=_[_0x3f2e('0x4f')](_0x5dafa5[_0x3f2e('0x4b')],{'$or':_[_0x3f2e('0xb1')](_0x5dafa5[_0x3f2e('0x45')],function(_0x295a1e){var _0x1824f0={};_0x1824f0[_0x295a1e]={'$like':'%'+_0x932cd7[_0x3f2e('0x40')]['filter']+'%'};return _0x1824f0;})});}_0x5dafa5=_[_0x3f2e('0x4f')]({},_0x5dafa5,_0x932cd7['options']);return _0xc148fe[_0x3f2e('0x114')](_0x5dafa5);}})[_0x3f2e('0x1d')](function(_0x148728){if(_0x148728){_0x141cae=_0x148728[_0x3f2e('0x47')];if(!_0x932cd7[_0x3f2e('0x40')][_0x3f2e('0x48')](_0x3f2e('0x49'))){_0x5dafa5[_0x3f2e('0x2b')]=qs[_0x3f2e('0x2b')](_0x932cd7[_0x3f2e('0x40')][_0x3f2e('0x2b')]);_0x5dafa5['offset']=qs[_0x3f2e('0x2a')](_0x932cd7[_0x3f2e('0x40')][_0x3f2e('0x2a')]);}return _0xc148fe[_0x3f2e('0x114')](_0x5dafa5);}})['then'](function(_0x12aea7){if(_0x12aea7){return _0x12aea7?{'count':_0x141cae,'rows':_0x12aea7}:null;}})[_0x3f2e('0x1d')](respondWithResult(_0x3e49af,null))[_0x3f2e('0x27')](handleError(_0x3e49af,null));};exports[_0x3f2e('0x116')]=function(_0x14a8a1,_0xd7c337,_0x1825c7){return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x14a8a1[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0xd7c337,null))[_0x3f2e('0x1d')](function(_0x4b5986){if(_0x4b5986){return _0x4b5986[_0x3f2e('0x116')](_0x14a8a1['body'][_0x3f2e('0x8f')],_[_0x3f2e('0x5c')](_0x14a8a1[_0x3f2e('0x5a')],[_0x3f2e('0x8f'),'id'])||{});}})[_0x3f2e('0x1d')](respondWithResult(_0xd7c337,null))[_0x3f2e('0x27')](handleError(_0xd7c337,null));};exports[_0x3f2e('0x117')]=function(_0x2125dc,_0x102910,_0x326963){var _0x1253a8;return db[_0x3f2e('0x39')][_0x3f2e('0x58')]({'where':{'id':_0x2125dc[_0x3f2e('0x57')]['id']}})[_0x3f2e('0x1d')](handleEntityNotFound(_0x102910,null))[_0x3f2e('0x1d')](function(_0x12e74c){if(_0x12e74c){return _0x12e74c[_0x3f2e('0x117')](_0x2125dc[_0x3f2e('0x40')][_0x3f2e('0x8f')]);}})[_0x3f2e('0x1d')](respondWithStatusCode(_0x102910,null))[_0x3f2e('0x27')](handleError(_0x102910,null));};
\ No newline at end of file
+var _0x99c1=['lower','col','options','User','includeAll','include','findAll','show','params','password','salt','find','bulkCreate','body','describe','addContacts','ids','role','agent','agent\x20role','telephone','admin','user','../../config/license/util','telephones','users','isNil','format','count\x20%s:\x20%s','create','internal','Setting','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)','SELECT','from','voicemail','VoiceMail','permissions','102','103','110','104','105','106','108','109','111','oldPassword','newPassword','ValidationError','Invalid\x20body\x20format.\x20Use\x20oldPassord\x20and\x20newPassword','authenticate','Sequelize','Wrong\x20credentials','Invalid\x20body\x20format.\x20Use\x20newPassword','Unauthorized','addQueues','loginInPause','isValidChannel','add','capitalize','channel','toLowerCase','Queues','penalty','voice','push','%s/%s','voicePause','each','UserVoiceQueueRt','removeQueues','Unknown\x20channel','destroy','addAvatar','userpic','file','filename','join','server/files/images/logos/default_profile.png','download','existsSync','root','getContacts','findOne','UserId','nolimit','rows','Queue','map','get','Unknown\x20role','getVoiceQueuesRt','getGroups','VoiceRecording','getChatInteractions','ChatInteraction','getOpenchannelInteractions','OpenchannelInteraction','getMailInteractions','MailInteraction','getSmsInteractions','SmsInteraction','getFaxInteractions','FaxInteraction','login','phone','mobile','interface','LOCAL/%s@from-sip/n','SIP/%s','user:%s','emit','user:forcelogout','headers','connection','remoteAddress','socket','upsert','SIP','all','getChannels','YYYY-MM-DD\x20HH:mm:ss','forEach','LOGIN','device','LOGININPAUSE','MemberReport','concat','logout','pause','updateAttributes','PAUSE','type','DEFAULT\x20PAUSE','unpause','mailPause','chatPause','faxPause','openchannelPause','smsPause','pauseType','lastPauseAt','QueuePause','manual','fax','sms','openchannel','%s%s','Pause','getTeams','addTeams','omit','removeTeams','CmList','getLists','getAgents','Agents','values','You\x20can\x27t\x20delete\x20yourself','addChatInteractions','spread','user_has_chat_interactions:save','removeChatInteractions','user_has_chat_interactions:remove','user_has_mail_interactions:save','removeMailInteractions','user_has_mail_interactions:remove','addFaxInteractions','user_has_fax_interactions:save','isArray','user_has_fax_interactions:remove','addSmsInteractions','removeSmsInteractions','user_has_sms_interactions:remove','addOpenchannelInteractions','user_has_openchannel_interactions:save','removeOpenchannelInteractions','user_has_openchannel_interactions:remove','getVoicePrefixes','getFaxAccounts','addFaxAccounts','removeFaxAccounts','getMailAccounts','MailAccount','addMailAccounts','removeMailAccounts','getOpenchannelAccounts','OpenchannelAccount','addOpenchannelAccounts','removeOpenchannelAccounts','SmsAccount','getSmsAccounts','addSmsAccounts','removeSmsAccounts','getChatWebsites','addChatWebsites','removeChatWebsites','getSquareProjects','removeSquareProjects','fast-json-patch','moment','bluebird','path','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./user.socket','register','jayson/promise','client','http','request','then','User,\x20%s,\x20%s','request\x20sent','debug','User,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','stack','name','send','index','rawAttributes','differenceBy','keys','dateStart','query','dateEnd','intersection','model','fields','attributes','length','hasOwnProperty','order','sort','filters','pick','day','where','filter','merge','sequelize'];(function(_0x4defe0,_0x1049d5){var _0xbd6b4d=function(_0x18ba36){while(--_0x18ba36){_0x4defe0['push'](_0x4defe0['shift']());}};_0xbd6b4d(++_0x1049d5);}(_0x99c1,0x1e0));var _0x199c=function(_0x2a679b,_0x278c13){_0x2a679b=_0x2a679b-0x0;var _0x17179f=_0x99c1[_0x2a679b];return _0x17179f;};'use strict';var jsonpatch=require(_0x199c('0x0'));var rp=require('request-promise');var moment=require(_0x199c('0x1'));var BPromise=require(_0x199c('0x2'));var Mustache=require('mustache');var util=require('util');var path=require(_0x199c('0x3'));var sox=require(_0x199c('0x4'));var csv=require(_0x199c('0x5'));var ejs=require(_0x199c('0x6'));var fs=require('fs');var _=require(_0x199c('0x7'));var squel=require('squel');var crypto=require(_0x199c('0x8'));var jsforce=require(_0x199c('0x9'));var deskjs=require('desk.js');var toCsv=require(_0x199c('0x5'));var querystring=require(_0x199c('0xa'));var Papa=require(_0x199c('0xb'));var qs=require(_0x199c('0xc'));var logger=require('../../config/logger')(_0x199c('0xd'));var utils=require(_0x199c('0xe'));var config=require(_0x199c('0xf'));var db=require(_0x199c('0x10'))['db'];var socket=require(_0x199c('0x11'))({'host':_0x199c('0x12'),'port':0x18eb});require(_0x199c('0x13'))[_0x199c('0x14')](socket);var jayson=require(_0x199c('0x15'));var client=jayson[_0x199c('0x16')][_0x199c('0x17')]({'port':0x232a});function respondWithRpcPromise(_0x151c21,_0x41bb6a,_0x40dc2a,_0x473f30){return new BPromise(function(_0x3076ed,_0x38127f){var _0x4b0f2a=_0x473f30||client;return _0x4b0f2a[_0x199c('0x18')](_0x151c21,_0x40dc2a)[_0x199c('0x19')](function(_0xb4aa1f){logger['info'](_0x199c('0x1a'),_0x41bb6a,_0x199c('0x1b'));logger[_0x199c('0x1c')](_0x199c('0x1d'),_0x41bb6a,_0x199c('0x1b'),JSON[_0x199c('0x1e')](_0xb4aa1f));if(_0xb4aa1f['error']){if(_0xb4aa1f[_0x199c('0x1f')][_0x199c('0x20')]===0x1f4){logger[_0x199c('0x1f')](_0x199c('0x1a'),_0x41bb6a,_0xb4aa1f[_0x199c('0x1f')][_0x199c('0x21')]);return _0x38127f(_0xb4aa1f[_0x199c('0x1f')]['message']);}logger[_0x199c('0x1f')](_0x199c('0x1a'),_0x41bb6a,_0xb4aa1f[_0x199c('0x1f')][_0x199c('0x21')]);return _0x3076ed(_0xb4aa1f[_0x199c('0x1f')][_0x199c('0x21')]);}else{logger[_0x199c('0x22')](_0x199c('0x1a'),_0x41bb6a,_0x199c('0x1b'));_0x3076ed(_0xb4aa1f['result'][_0x199c('0x21')]);}})[_0x199c('0x23')](function(_0x40c01e){logger[_0x199c('0x1f')](_0x199c('0x1a'),_0x41bb6a,_0x40c01e);_0x38127f(_0x40c01e);});});}function respondWithStatusCode(_0x2353bd,_0x8401a){_0x8401a=_0x8401a||0xcc;return function(_0x34efdd){if(_0x34efdd){return _0x2353bd[_0x199c('0x24')](_0x8401a);}return _0x2353bd[_0x199c('0x25')](_0x8401a)[_0x199c('0x26')]();};}function respondWithResult(_0x19ed94,_0x3845c4){_0x3845c4=_0x3845c4||0xc8;return function(_0x491f03){if(_0x491f03){return _0x19ed94['status'](_0x3845c4)[_0x199c('0x27')](_0x491f03);}};}function respondWithFilteredResult(_0x4c2053,_0x1ea06a){return function(_0x34440f){if(_0x34440f){var _0x2bef58=_0x34440f[_0x199c('0x28')],_0x41e516=_0x1ea06a[_0x199c('0x29')],_0x2437df=_0x1ea06a[_0x199c('0x29')]+_0x1ea06a[_0x199c('0x2a')],_0x18bd2d;if(_0x2437df>=_0x2bef58){_0x2437df=_0x2bef58;_0x18bd2d=0xc8;}else{_0x18bd2d=0xce;}_0x4c2053[_0x199c('0x25')](_0x18bd2d);return _0x4c2053[_0x199c('0x2b')](_0x199c('0x2c'),_0x41e516+'-'+_0x2437df+'/'+_0x2bef58)[_0x199c('0x27')](_0x34440f);}return null;};}function patchUpdates(_0x2dc29b){return function(_0x157bb8){try{jsonpatch[_0x199c('0x2d')](_0x157bb8,_0x2dc29b,!![]);}catch(_0x519295){return BPromise[_0x199c('0x2e')](_0x519295);}return _0x157bb8[_0x199c('0x2f')]();};}function saveUpdates(_0x40994e,_0x2ad00d){return function(_0x4158bf){if(_0x4158bf){return _0x4158bf[_0x199c('0x30')](_0x40994e)[_0x199c('0x19')](function(_0x32f9e1){return _0x32f9e1;});}return null;};}function removeEntity(_0x328bd6,_0x1f9b73){return function(_0x383b28){if(_0x383b28){return _0x383b28['destroy']()[_0x199c('0x19')](function(){_0x328bd6['status'](0xcc)[_0x199c('0x26')]();});}};}function handleEntityNotFound(_0x1efa9b,_0x2f139d){return function(_0x25b9ff){if(!_0x25b9ff){_0x1efa9b['sendStatus'](0x194);}return _0x25b9ff;};}function handleError(_0x37f521,_0x14e549){_0x14e549=_0x14e549||0x1f4;return function(_0x2e6391){logger[_0x199c('0x1f')](_0x2e6391[_0x199c('0x31')]);if(_0x2e6391['name']){delete _0x2e6391[_0x199c('0x32')];}_0x37f521[_0x199c('0x25')](_0x14e549)[_0x199c('0x33')](_0x2e6391);};}exports[_0x199c('0x34')]=function(_0xac5b0d,_0x159c55){var _0x188e8d={},_0xf958cb={},_0x5d6cb1={'count':0x0,'rows':[]};var _0x22f133=db['User'][_0x199c('0x35')];_0xf958cb['model']=_[_0x199c('0x36')](_[_0x199c('0x37')](_0x22f133),['password','salt']);var _0x29c259={'dateStart':_0xac5b0d['query'][_0x199c('0x38')],'dateEnd':_0xac5b0d[_0x199c('0x39')]['dateEnd']};delete _0xac5b0d[_0x199c('0x39')][_0x199c('0x38')];delete _0xac5b0d[_0x199c('0x39')][_0x199c('0x3a')];_0xf958cb[_0x199c('0x39')]=_[_0x199c('0x37')](_0xac5b0d[_0x199c('0x39')]);_0xf958cb['filters']=_[_0x199c('0x3b')](_0xf958cb[_0x199c('0x3c')],_0xf958cb[_0x199c('0x39')]);_0x188e8d['attributes']=_['intersection'](_0xf958cb[_0x199c('0x3c')],qs['fields'](_0xac5b0d['query'][_0x199c('0x3d')]));_0x188e8d['attributes']=_0x188e8d[_0x199c('0x3e')][_0x199c('0x3f')]?_0x188e8d[_0x199c('0x3e')]:_0xf958cb['model'];if(!_0xac5b0d[_0x199c('0x39')][_0x199c('0x40')]('nolimit')){_0x188e8d['limit']=qs[_0x199c('0x2a')](_0xac5b0d[_0x199c('0x39')][_0x199c('0x2a')]);_0x188e8d[_0x199c('0x29')]=qs[_0x199c('0x29')](_0xac5b0d['query'][_0x199c('0x29')]);}_0x188e8d[_0x199c('0x41')]=qs['sort'](_0xac5b0d[_0x199c('0x39')][_0x199c('0x42')]);_0x188e8d['where']=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0xac5b0d[_0x199c('0x39')],_0xf958cb['filters']));if(_0x29c259['dateStart']){if(_0x29c259[_0x199c('0x3a')]){_0x29c259[_0x199c('0x3a')]=moment(_0x29c259[_0x199c('0x3a')])['add'](0x1,_0x199c('0x45'));}else{_0x29c259[_0x199c('0x3a')]=moment(_0x29c259[_0x199c('0x38')])['add'](0x1,_0x199c('0x45'));}_['merge'](_0x188e8d[_0x199c('0x46')],{'createdAt':{'$gte':_0x29c259['dateStart'],'$lte':_0x29c259[_0x199c('0x3a')]}});}if(_0xac5b0d[_0x199c('0x39')][_0x199c('0x47')]){_0x188e8d['where']=_[_0x199c('0x48')](_0x188e8d[_0x199c('0x46')],{'$or':_['map'](_0x188e8d[_0x199c('0x3e')],function(_0x5d6263){return db[_0x199c('0x49')][_0x199c('0x46')](db[_0x199c('0x49')]['fn'](_0x199c('0x4a'),db[_0x199c('0x49')][_0x199c('0x4b')](_0x5d6263)),{'$like':db[_0x199c('0x49')]['fn'](_0x199c('0x4a'),'%'+_0xac5b0d[_0x199c('0x39')]['filter']+'%')});})});}_0x188e8d=_[_0x199c('0x48')]({},_0x188e8d,_0xac5b0d[_0x199c('0x4c')]);var _0x27ad88={'where':_0x188e8d[_0x199c('0x46')]};return db[_0x199c('0x4d')]['count'](_0x27ad88)[_0x199c('0x19')](function(_0x1f9f49){_0x5d6cb1['count']=_0x1f9f49;if(_0xac5b0d[_0x199c('0x39')][_0x199c('0x4e')]){_0x188e8d[_0x199c('0x4f')]=[{'all':!![]}];}return db['User'][_0x199c('0x50')](_0x188e8d);})[_0x199c('0x19')](function(_0x56fe0b){_0x5d6cb1['rows']=_0x56fe0b;return _0x5d6cb1;})[_0x199c('0x19')](respondWithFilteredResult(_0x159c55,_0x188e8d))[_0x199c('0x23')](handleError(_0x159c55,null));};exports[_0x199c('0x51')]=function(_0x26eb56,_0xdd60e8){var _0x402fe5={'raw':![],'where':{'id':_0x26eb56[_0x199c('0x52')]['id']}},_0x315fc4={};_0x315fc4[_0x199c('0x3c')]=_['differenceBy'](_[_0x199c('0x37')](db[_0x199c('0x4d')][_0x199c('0x35')]),[_0x199c('0x53'),_0x199c('0x54')]);_0x315fc4['query']=_['keys'](_0x26eb56[_0x199c('0x39')]);_0x315fc4[_0x199c('0x43')]=_['intersection'](_0x315fc4[_0x199c('0x3c')],_0x315fc4[_0x199c('0x39')]);_0x402fe5[_0x199c('0x3e')]=_['intersection'](_0x315fc4[_0x199c('0x3c')],qs['fields'](_0x26eb56[_0x199c('0x39')]['fields']));_0x402fe5[_0x199c('0x3e')]=_0x402fe5[_0x199c('0x3e')][_0x199c('0x3f')]?_0x402fe5[_0x199c('0x3e')]:_0x315fc4[_0x199c('0x3c')];if(_0x26eb56[_0x199c('0x39')][_0x199c('0x4e')]){_0x402fe5['include']=[{'all':!![]}];}_0x402fe5=_[_0x199c('0x48')]({},_0x402fe5,_0x26eb56[_0x199c('0x4c')]);return db[_0x199c('0x4d')][_0x199c('0x55')](_0x402fe5)[_0x199c('0x19')](handleEntityNotFound(_0xdd60e8,null))[_0x199c('0x19')](respondWithResult(_0xdd60e8,null))[_0x199c('0x23')](handleError(_0xdd60e8,null));};exports[_0x199c('0x56')]=function(_0x465ae0,_0xc7d910){return db['User']['bulkCreate'](_0x465ae0[_0x199c('0x57')],{'raw':![],'individualHooks':!![]})[_0x199c('0x19')](respondWithResult(_0xc7d910,0xc9))['catch'](handleError(_0xc7d910,null));};exports[_0x199c('0x30')]=function(_0x2d8586,_0x2131c7){if(_0x2d8586[_0x199c('0x57')]['id']){delete _0x2d8586[_0x199c('0x57')]['id'];}return db[_0x199c('0x4d')]['find']({'where':{'id':_0x2d8586[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x2131c7,null))['then'](saveUpdates(_0x2d8586[_0x199c('0x57')],null))[_0x199c('0x19')](respondWithResult(_0x2131c7,null))[_0x199c('0x23')](handleError(_0x2131c7,null));};exports[_0x199c('0x58')]=function(_0x2dfa3e,_0x4f6c6b){return db[_0x199c('0x4d')][_0x199c('0x58')]()['then'](respondWithResult(_0x4f6c6b,null))[_0x199c('0x23')](handleError(_0x4f6c6b,null));};exports[_0x199c('0x59')]=function(_0x511fc8,_0x4073c4,_0x1f5c0b){return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x511fc8[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x4073c4,null))[_0x199c('0x19')](function(_0x309318){if(_0x309318){return _0x309318['addContacts'](_0x511fc8[_0x199c('0x57')][_0x199c('0x5a')],_['omit'](_0x511fc8[_0x199c('0x57')],['ids','id'])||{});}})[_0x199c('0x19')](respondWithResult(_0x4073c4,null))['catch'](handleError(_0x4073c4,null));};var getLicense=function(_0x466207){return new BPromise(function(_0x11e932,_0x48740f){var _0x40c282=0x0;_0x466207[_0x199c('0x57')][_0x199c('0x5b')]===_0x199c('0x5c')&&_0x11e932(_0x199c('0x5d'));return db[_0x199c('0x4d')]['count']({'where':{'$or':[{'role':_0x466207['body'][_0x199c('0x5b')]===_0x199c('0x5e')?'telephone':[_0x199c('0x5f'),_0x199c('0x60')]}]}})[_0x199c('0x19')](function(_0x4f2a2d){_0x40c282=_0x4f2a2d;return require(_0x199c('0x61'))['getLicense']();})[_0x199c('0x19')](function(_0x446f46){var _0x369b60=_0x466207[_0x199c('0x57')][_0x199c('0x5b')]===_0x199c('0x5e')?_0x199c('0x62'):_0x199c('0x63');if(!_[_0x199c('0x64')](_0x446f46[_0x369b60])&&_0x40c282>=_0x446f46[_0x369b60]){return _0x48740f({'message':'License\x20limit\x20reached'});}return _0x11e932(util[_0x199c('0x65')](_0x199c('0x66'),_0x369b60,_0x40c282));})[_0x199c('0x23')](function(_0x40c3c4){return _0x48740f(_0x40c3c4);});});};exports[_0x199c('0x67')]=function(_0x5000a2,_0x9a3806){return getLicense(_0x5000a2)['then'](function(_0x3d3d10){if(!_0x5000a2['body'][_0x199c('0x68')]){var _0x1430ec;return db[_0x199c('0x69')][_0x199c('0x6a')](0x1)[_0x199c('0x19')](function(_0xbbea29){_0x1430ec=_0xbbea29[_0x199c('0x6b')];return db[_0x199c('0x4d')][_0x199c('0x6c')](_0x199c('0x68'));})[_0x199c('0x19')](function(_0x4f2fa1){if(_['isNil'](_0x4f2fa1)){if(_0x1430ec){_0x5000a2['body'][_0x199c('0x68')]=_0x1430ec;}else{_0x5000a2[_0x199c('0x57')]['internal']=0x1;}}else{if(_[_0x199c('0x64')](_0x1430ec)||_0x1430ec==_0x4f2fa1){_0x5000a2[_0x199c('0x57')]['internal']=_0x4f2fa1+0x1;}else if(_0x1430ec>_0x4f2fa1){_0x5000a2[_0x199c('0x57')][_0x199c('0x68')]=_0x1430ec;}else{return db[_0x199c('0x49')]['query'](_0x199c('0x6d'),{'type':db[_0x199c('0x49')]['QueryTypes'][_0x199c('0x6e')]})['then'](function(_0x2b9dee){if(_0x2b9dee&&_0x2b9dee['length']){for(var _0x50ac54=0x0,_0x3858d2=_0x2b9dee[_0x199c('0x3f')];_0x50ac54<_0x3858d2&&_[_0x199c('0x64')](_0x5000a2[_0x199c('0x57')]['internal']);_0x50ac54++){if(_0x1430ec<=_0x2b9dee[_0x50ac54][_0x199c('0x6f')]){_0x5000a2[_0x199c('0x57')]['internal']=_0x2b9dee[_0x50ac54]['from'];}else if(_0x1430ec>_0x2b9dee[_0x50ac54][_0x199c('0x6f')]&&_0x1430ec<=_0x2b9dee[_0x50ac54]['to']){_0x5000a2['body'][_0x199c('0x68')]=_0x1430ec;}}}if(_['isNil'](_0x5000a2['body'][_0x199c('0x68')])){_0x5000a2[_0x199c('0x57')][_0x199c('0x68')]=_0x4f2fa1+0x1;}});}}});}})[_0x199c('0x19')](function(){if(_0x5000a2[_0x199c('0x57')][_0x199c('0x70')]){_0x5000a2[_0x199c('0x57')]['mailbox']=_0x5000a2[_0x199c('0x57')][_0x199c('0x68')];_0x5000a2[_0x199c('0x57')][_0x199c('0x71')]={'mailbox':_0x5000a2[_0x199c('0x57')]['internal'],'password':_0x5000a2[_0x199c('0x57')][_0x199c('0x53')],'fullname':_0x5000a2[_0x199c('0x57')]['fullname'],'email':_0x5000a2[_0x199c('0x57')]['email']};}if(_0x5000a2[_0x199c('0x57')]&&_0x5000a2[_0x199c('0x57')][_0x199c('0x5b')]===_0x199c('0x5c')){_0x5000a2[_0x199c('0x57')][_0x199c('0x72')]=['101',_0x199c('0x73'),_0x199c('0x74'),_0x199c('0x75'),_0x199c('0x76'),_0x199c('0x77'),_0x199c('0x78'),'107',_0x199c('0x79'),_0x199c('0x7a'),'100',_0x199c('0x7b')];}return db[_0x199c('0x4d')]['create'](_0x5000a2[_0x199c('0x57')],{'include':[{'model':db['VoiceMail'],'as':_0x199c('0x71')}]});})[_0x199c('0x19')](respondWithResult(_0x9a3806,0xc9))['catch'](handleError(_0x9a3806,null));};exports['changePassword']=function(_0x1b8ca1,_0x1fbd1d,_0x218dfd){if(_0x1b8ca1[_0x199c('0x57')]['id']){delete _0x1b8ca1[_0x199c('0x57')]['id'];}return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x1b8ca1['params']['id']}})[_0x199c('0x19')](function(_0x401d20){if(_0x401d20){if(_0x401d20['id']==_0x1b8ca1[_0x199c('0x60')]['id']){if(!_0x1b8ca1[_0x199c('0x57')][_0x199c('0x7c')]||!_0x1b8ca1[_0x199c('0x57')][_0x199c('0x7d')]){throw new db['Sequelize'][(_0x199c('0x7e'))](_0x199c('0x7f'));}if(!_0x401d20[_0x199c('0x80')](_0x1b8ca1[_0x199c('0x57')][_0x199c('0x7c')])){throw new db[(_0x199c('0x81'))][(_0x199c('0x7e'))](_0x199c('0x82'));}if(_0x1b8ca1[_0x199c('0x57')]['oldPassword']==_0x1b8ca1['body']['newPassword']){throw new db[(_0x199c('0x81'))][(_0x199c('0x7e'))]('New\x20password\x20must\x20be\x20different\x20from\x20old\x20password');}return _0x401d20;}else if(_0x1b8ca1[_0x199c('0x60')][_0x199c('0x5b')]=='admin'){if(!_0x1b8ca1[_0x199c('0x57')][_0x199c('0x7d')]){throw new db[(_0x199c('0x81'))][(_0x199c('0x7e'))](_0x199c('0x83'));}return _0x401d20;}else if(_0x1b8ca1[_0x199c('0x60')][_0x199c('0x5b')]==_0x199c('0x60')){if(!_0x1b8ca1['body'][_0x199c('0x7d')]){throw new db[(_0x199c('0x81'))]['ValidationError'](_0x199c('0x83'));}if(_0x401d20[_0x199c('0x5b')]!=_0x199c('0x5c')){throw new db[(_0x199c('0x81'))]['ValidationError']('Unauthorized');}return _0x401d20;}else{throw new db['Sequelize'][(_0x199c('0x7e'))](_0x199c('0x84'));}}return null;})[_0x199c('0x19')](handleEntityNotFound(_0x1fbd1d,null))[_0x199c('0x19')](saveUpdates({'password':_0x1b8ca1[_0x199c('0x57')]['newPassword'],'passwordResetAt':_0x1b8ca1[_0x199c('0x60')]['id']==_0x1b8ca1['params']['id']?moment():null},null))[_0x199c('0x19')](respondWithResult(_0x1fbd1d,null))[_0x199c('0x23')](handleError(_0x1fbd1d,null));};exports[_0x199c('0x85')]=function(_0x54c6f0,_0x158c33,_0x2d8418){var _0x4ac72e;return db[_0x199c('0x4d')]['find']({'where':{'id':_0x54c6f0['params']['id']},'attributes':['id','name',_0x199c('0x5b'),_0x199c('0x86'),'voicePause']})[_0x199c('0x19')](handleEntityNotFound(_0x158c33,null))[_0x199c('0x19')](function(_0x11eb94){if(_0x11eb94){_0x4ac72e=_0x11eb94;if(!utils[_0x199c('0x87')](_0x54c6f0[_0x199c('0x57')]['channel'])){throw new db['Sequelize'][(_0x199c('0x7e'))]('Unknown\x20channel');}return _0x11eb94[_0x199c('0x88')+_[_0x199c('0x89')](_0x54c6f0[_0x199c('0x57')][_0x199c('0x8a')][_0x199c('0x8b')]())+_0x199c('0x8c')](_0x54c6f0[_0x199c('0x57')]['ids'],{'penalty':_0x54c6f0[_0x199c('0x57')][_0x199c('0x8d')]||0x0});}})[_0x199c('0x19')](function(){if(_0x54c6f0[_0x199c('0x57')][_0x199c('0x8a')]===_0x199c('0x8e')){return db['VoiceQueue'][_0x199c('0x50')]({'where':{'id':_0x54c6f0[_0x199c('0x57')][_0x199c('0x5a')]||[]},'raw':!![],'attributes':['id',_0x199c('0x32')]});}})[_0x199c('0x19')](function(_0x6e8cb0){var _0x3bb4d8=[];if(_0x54c6f0[_0x199c('0x57')][_0x199c('0x8a')]==='voice'&&_0x4ac72e['role']==='agent'){for(var _0x599582=0x0;_0x599582<_0x6e8cb0[_0x199c('0x3f')];_0x599582+=0x1){_0x3bb4d8[_0x199c('0x8f')]({'membername':_0x4ac72e[_0x199c('0x32')],'UserId':_0x4ac72e['id'],'queue_name':_0x6e8cb0[_0x599582]['name'],'VoiceQueueId':_0x6e8cb0[_0x599582]['id'],'interface':util[_0x199c('0x65')](_0x199c('0x90'),'SIP',_0x4ac72e[_0x199c('0x32')]),'paused':_0x4ac72e[_0x199c('0x91')]||![],'penalty':_0x54c6f0[_0x199c('0x57')][_0x199c('0x8d')]||0x0});}return BPromise[_0x199c('0x92')](_0x3bb4d8,function(_0x151e91){return db[_0x199c('0x93')]['upsert'](_0x151e91);});}return _0x4ac72e;})[_0x199c('0x19')](respondWithStatusCode(_0x158c33,null))[_0x199c('0x23')](handleError(_0x158c33,null));};exports[_0x199c('0x94')]=function(_0x38cd43,_0x53baed,_0x44baab){var _0x1af830;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x38cd43[_0x199c('0x52')]['id']},'attributes':['id',_0x199c('0x32'),_0x199c('0x5b')]})['then'](handleEntityNotFound(_0x53baed,null))[_0x199c('0x19')](function(_0x2557e7){if(_0x2557e7){_0x1af830=_0x2557e7;if(!_0x38cd43[_0x199c('0x39')][_0x199c('0x8a')]||!utils['isValidChannel'](_0x38cd43[_0x199c('0x39')][_0x199c('0x8a')])){throw new db['Sequelize'][(_0x199c('0x7e'))](_0x199c('0x95'));}return _0x2557e7['remove'+_[_0x199c('0x89')](_0x38cd43[_0x199c('0x39')][_0x199c('0x8a')][_0x199c('0x8b')]())+_0x199c('0x8c')](_0x38cd43[_0x199c('0x39')]['ids']);}})[_0x199c('0x19')](function(_0x49ce56){if(_0x38cd43[_0x199c('0x39')][_0x199c('0x8a')]===_0x199c('0x8e')){return db[_0x199c('0x93')][_0x199c('0x96')]({'where':{'UserId':_0x38cd43[_0x199c('0x52')]['id'],'VoiceQueueId':_0x38cd43[_0x199c('0x39')][_0x199c('0x5a')]},'individualHooks':!![]})[_0x199c('0x19')](function(){return _0x1af830;});}return _0x1af830;})['then'](respondWithStatusCode(_0x53baed,null))[_0x199c('0x23')](handleError(_0x53baed,null));};exports[_0x199c('0x97')]=function(_0x1a1c11,_0x36d41f,_0x208a17){_0x1a1c11[_0x199c('0x57')][_0x199c('0x98')]=_0x1a1c11[_0x199c('0x99')][_0x199c('0x9a')];return db['User']['find']({'where':{'id':_0x1a1c11[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x36d41f,null))['then'](saveUpdates(_0x1a1c11[_0x199c('0x57')],null))['then'](respondWithResult(_0x36d41f,null))[_0x199c('0x23')](handleError(_0x36d41f,null));};exports['getAvatar']=function(_0x5032a6,_0x20a317,_0x364e2d){var _0x5b7195=path[_0x199c('0x9b')](config['root'],_0x199c('0x9c'));return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x5032a6['params']['id']},'attributes':['id',_0x199c('0x98')],'raw':!![]})[_0x199c('0x19')](handleEntityNotFound(_0x20a317,null))[_0x199c('0x19')](function(_0x51b8f7){if(_0x51b8f7){if(_[_0x199c('0x64')](_0x51b8f7['userpic'])){return _0x20a317[_0x199c('0x9d')](_0x5b7195);}else{if(!fs[_0x199c('0x9e')](path[_0x199c('0x9b')](config[_0x199c('0x9f')],'server/files/images/',_0x51b8f7[_0x199c('0x98')]))){return _0x20a317['download'](_0x5b7195);}return _0x20a317[_0x199c('0x9d')](path[_0x199c('0x9b')](config[_0x199c('0x9f')],'server/files/images/',_0x51b8f7[_0x199c('0x98')]));}}})[_0x199c('0x23')](handleError(_0x20a317,null));};exports[_0x199c('0xa0')]=function(_0x306016,_0x2245e3,_0x5a062b){var _0x546024;var _0x56ee60={'where':{}},_0x2367fd={},_0x2607ed={'count':0x0,'rows':[]};return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x306016['params']['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x2245e3,null))[_0x199c('0x19')](function(_0x77265f){if(_0x77265f){_0x546024=_0x77265f;_0x56ee60[_0x199c('0x46')][_0x199c('0xa2')]=_0x77265f['id'];return db['CmContact']['describe']();}})['then'](function(_0x3847cf){if(_0x3847cf){_0x2367fd['model']=_['keys'](_0x3847cf);_0x2367fd[_0x199c('0x39')]=_[_0x199c('0x37')](_0x306016[_0x199c('0x39')]);_0x2367fd[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x2367fd[_0x199c('0x3c')],_0x2367fd[_0x199c('0x39')]);_0x56ee60[_0x199c('0x3e')]=_[_0x199c('0x3b')](_0x2367fd['model'],qs['fields'](_0x306016[_0x199c('0x39')]['fields']));_0x56ee60[_0x199c('0x3e')]=_0x56ee60[_0x199c('0x3e')][_0x199c('0x3f')]?_0x56ee60[_0x199c('0x3e')]:_0x2367fd[_0x199c('0x3c')];if(!_0x306016['query'][_0x199c('0x40')](_0x199c('0xa3'))){_0x56ee60[_0x199c('0x2a')]=qs['limit'](_0x306016[_0x199c('0x39')]['limit']);_0x56ee60[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x306016[_0x199c('0x39')][_0x199c('0x29')]);}_0x56ee60['order']=qs[_0x199c('0x42')](_0x306016[_0x199c('0x39')][_0x199c('0x42')]);_0x56ee60[_0x199c('0x46')]=qs['filters'](_[_0x199c('0x44')](_0x306016[_0x199c('0x39')],_0x2367fd['filters']));if(_0x306016['query'][_0x199c('0x47')]){_0x56ee60['where']=_['merge'](_0x56ee60[_0x199c('0x46')],{'$or':_['map'](_0x56ee60[_0x199c('0x3e')],function(_0xcd84c6){var _0x276d98={};_0x276d98[_0xcd84c6]={'$like':'%'+_0x306016[_0x199c('0x39')]['filter']+'%'};return _0x276d98;})});}_0x56ee60=_['merge']({},_0x56ee60,_0x306016[_0x199c('0x4c')]);return _0x546024['getContacts'](_[_0x199c('0x44')](_0x56ee60,[_0x199c('0x46')]))[_0x199c('0x19')](function(_0xdbd817){_0x2607ed[_0x199c('0x28')]=_0xdbd817[_0x199c('0x3f')]||0x0;if(_0x306016[_0x199c('0x39')]['includeAll']){_0x56ee60[_0x199c('0x4f')]=[{'all':!![]}];}return _0x546024['getContacts'](_0x56ee60);})[_0x199c('0x19')](function(_0x4200ff){_0x2607ed[_0x199c('0xa4')]=_0x4200ff;return _0x2607ed;});}})[_0x199c('0x19')](respondWithFilteredResult(_0x2245e3,_0x56ee60))[_0x199c('0x23')](handleError(_0x2245e3,null));};exports['getQueues']=function(_0x16af9c,_0x53876f,_0x40c623){var _0x46c36b;var _0x2790d5;var _0x239849={};var _0x20f93c;return db['User']['findOne']({'where':{'id':_0x16af9c['params']['id']},'attributes':['id','name','role']})[_0x199c('0x19')](handleEntityNotFound(_0x53876f,null))[_0x199c('0x19')](function(_0x31ca21){if(!utils[_0x199c('0x87')](_0x16af9c[_0x199c('0x39')][_0x199c('0x8a')])){throw new db[(_0x199c('0x81'))][(_0x199c('0x7e'))](_0x199c('0x95'));}_0x46c36b=_0x31ca21;var _0x2f6e9e={};_0x2f6e9e[_0x199c('0x3c')]=_[_0x199c('0x37')](db[_[_0x199c('0x89')](_0x16af9c['query'][_0x199c('0x8a')])+_0x199c('0xa5')][_0x199c('0x35')]);_0x2f6e9e['query']=_[_0x199c('0x37')](_0x16af9c['query']);_0x2f6e9e['filters']=_['intersection'](_0x2f6e9e[_0x199c('0x3c')],_0x2f6e9e['query']);_0x239849['attributes']=_[_0x199c('0x3b')](_0x2f6e9e[_0x199c('0x3c')],qs[_0x199c('0x3d')](_0x16af9c[_0x199c('0x39')][_0x199c('0x3d')]));_0x239849[_0x199c('0x3e')]=_0x239849[_0x199c('0x3e')][_0x199c('0x3f')]?_0x239849[_0x199c('0x3e')]:_0x2f6e9e[_0x199c('0x3c')];_0x239849[_0x199c('0x41')]=qs['sort'](_0x16af9c[_0x199c('0x39')]['sort']);_0x239849[_0x199c('0x46')]=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x16af9c[_0x199c('0x39')],_0x2f6e9e[_0x199c('0x43')]));if(_0x16af9c[_0x199c('0x39')]['filter']){_0x239849[_0x199c('0x46')]=_[_0x199c('0x48')](_0x239849[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x239849[_0x199c('0x3e')],function(_0x38aabb){var _0x240f34={};_0x240f34[_0x38aabb]={'$like':'%'+_0x16af9c[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0x240f34;})});}_0x239849=_['merge']({},_0x239849,_0x16af9c['options']);switch(_0x46c36b['role']){case _0x199c('0x5f'):return db[_[_0x199c('0x89')](_0x16af9c[_0x199c('0x39')][_0x199c('0x8a')])+_0x199c('0xa5')][_0x199c('0x50')](_0x239849);case _0x199c('0x60'):case _0x199c('0x5c'):return _0x46c36b[_0x199c('0xa7')+_['capitalize'](_0x16af9c[_0x199c('0x39')]['channel'])+'Queues'](_0x239849);default:throw new db[(_0x199c('0x81'))][(_0x199c('0x7e'))](_0x199c('0xa8'));}})['then'](function(_0x46f95c){_0x20f93c=_0x46f95c[_0x199c('0x3f')];if(!_0x16af9c[_0x199c('0x39')][_0x199c('0x40')](_0x199c('0xa3'))){_0x239849['limit']=qs[_0x199c('0x2a')](_0x16af9c['query'][_0x199c('0x2a')]);_0x239849[_0x199c('0x29')]=qs['offset'](_0x16af9c['query'][_0x199c('0x29')]);}switch(_0x46c36b[_0x199c('0x5b')]){case _0x199c('0x5f'):return db[_[_0x199c('0x89')](_0x16af9c[_0x199c('0x39')][_0x199c('0x8a')])+'Queue']['findAll'](_0x239849);case _0x199c('0x60'):case _0x199c('0x5c'):return _0x46c36b[_0x199c('0xa7')+_[_0x199c('0x89')](_0x16af9c[_0x199c('0x39')][_0x199c('0x8a')])+_0x199c('0x8c')](_0x239849);}})[_0x199c('0x19')](function(_0x2829ce){return{'count':_0x20f93c,'rows':_0x2829ce};})['then'](respondWithResult(_0x53876f,null))[_0x199c('0x23')](handleError(_0x53876f,null));};exports[_0x199c('0xa9')]=function(_0x267f25,_0x2dbdc0,_0x1de0e6){var _0x40887d={};var _0x2fa9f5={};var _0x5c9aea;var _0x44db5e;return db[_0x199c('0x4d')]['findOne']({'where':{'id':_0x267f25[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x2dbdc0,null))[_0x199c('0x19')](function(_0x388775){if(_0x388775){_0x5c9aea=_0x388775;_0x2fa9f5[_0x199c('0x3c')]=_['keys'](db['UserVoiceQueueRt'][_0x199c('0x35')]);_0x2fa9f5[_0x199c('0x39')]=_[_0x199c('0x37')](_0x267f25[_0x199c('0x39')]);_0x2fa9f5[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x2fa9f5[_0x199c('0x3c')],_0x2fa9f5[_0x199c('0x39')]);_0x40887d[_0x199c('0x3e')]=_[_0x199c('0x3b')](_0x2fa9f5['model'],qs[_0x199c('0x3d')](_0x267f25[_0x199c('0x39')][_0x199c('0x3d')]));_0x40887d[_0x199c('0x3e')]=_0x40887d[_0x199c('0x3e')][_0x199c('0x3f')]?_0x40887d[_0x199c('0x3e')]:_0x2fa9f5[_0x199c('0x3c')];_0x40887d[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x267f25['query'][_0x199c('0x42')]);_0x40887d['where']=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x267f25[_0x199c('0x39')],_0x2fa9f5[_0x199c('0x43')]));if(_0x267f25[_0x199c('0x39')][_0x199c('0x47')]){_0x40887d[_0x199c('0x46')]=_[_0x199c('0x48')](_0x40887d[_0x199c('0x46')],{'$or':_['map'](_0x40887d[_0x199c('0x3e')],function(_0x55216e){var _0x7c29f8={};_0x7c29f8[_0x55216e]={'$like':'%'+_0x267f25[_0x199c('0x39')]['filter']+'%'};return _0x7c29f8;})});}_0x40887d=_['merge']({},_0x40887d,_0x267f25['options']);return _0x5c9aea[_0x199c('0xa9')](_0x40887d);}})[_0x199c('0x19')](function(_0xea23af){if(_0xea23af){_0x44db5e=_0xea23af[_0x199c('0x3f')];if(!_0x267f25['query'][_0x199c('0x40')](_0x199c('0xa3'))){_0x40887d[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x267f25[_0x199c('0x39')][_0x199c('0x2a')]);_0x40887d[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x267f25[_0x199c('0x39')][_0x199c('0x29')]);}return _0x5c9aea[_0x199c('0xa9')](_0x40887d);}})[_0x199c('0x19')](function(_0xeb75ac){if(_0xeb75ac){return _0xeb75ac?{'count':_0x44db5e,'rows':_0xeb75ac}:null;}})['then'](respondWithResult(_0x2dbdc0,null))[_0x199c('0x23')](handleError(_0x2dbdc0,null));};exports[_0x199c('0xaa')]=function(_0x3e69be,_0x4868cd,_0x34b076){var _0x50a92d={};var _0x1d09fa={};var _0x40b693;var _0x5cd11f;return db['User'][_0x199c('0xa1')]({'where':{'id':_0x3e69be[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x4868cd,null))['then'](function(_0x26d21b){if(_0x26d21b){_0x40b693=_0x26d21b;_0x1d09fa[_0x199c('0x3c')]=_[_0x199c('0x37')](db['ChatGroup'][_0x199c('0x35')]);_0x1d09fa[_0x199c('0x39')]=_[_0x199c('0x37')](_0x3e69be[_0x199c('0x39')]);_0x1d09fa['filters']=_[_0x199c('0x3b')](_0x1d09fa[_0x199c('0x3c')],_0x1d09fa[_0x199c('0x39')]);_0x50a92d[_0x199c('0x3e')]=_[_0x199c('0x3b')](_0x1d09fa['model'],qs[_0x199c('0x3d')](_0x3e69be[_0x199c('0x39')][_0x199c('0x3d')]));_0x50a92d[_0x199c('0x3e')]=_0x50a92d[_0x199c('0x3e')][_0x199c('0x3f')]?_0x50a92d[_0x199c('0x3e')]:_0x1d09fa[_0x199c('0x3c')];_0x50a92d[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x3e69be[_0x199c('0x39')][_0x199c('0x42')]);_0x50a92d['where']=qs['filters'](_[_0x199c('0x44')](_0x3e69be[_0x199c('0x39')],_0x1d09fa[_0x199c('0x43')]));if(_0x3e69be[_0x199c('0x39')][_0x199c('0x47')]){_0x50a92d[_0x199c('0x46')]=_['merge'](_0x50a92d[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x50a92d[_0x199c('0x3e')],function(_0x40793a){var _0x24afd8={};_0x24afd8[_0x40793a]={'$like':'%'+_0x3e69be[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0x24afd8;})});}_0x50a92d=_[_0x199c('0x48')]({},_0x50a92d,_0x3e69be[_0x199c('0x4c')]);return _0x40b693[_0x199c('0xaa')](_0x50a92d);}})[_0x199c('0x19')](function(_0x20ec2a){if(_0x20ec2a){_0x5cd11f=_0x20ec2a[_0x199c('0x3f')];if(!_0x3e69be[_0x199c('0x39')]['hasOwnProperty'](_0x199c('0xa3'))){_0x50a92d['limit']=qs[_0x199c('0x2a')](_0x3e69be[_0x199c('0x39')][_0x199c('0x2a')]);_0x50a92d[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x3e69be['query'][_0x199c('0x29')]);}return _0x40b693['getGroups'](_0x50a92d);}})['then'](function(_0x48c3ec){if(_0x48c3ec){return _0x48c3ec?{'count':_0x5cd11f,'rows':_0x48c3ec}:null;}})['then'](respondWithResult(_0x4868cd,null))[_0x199c('0x23')](handleError(_0x4868cd,null));};exports['getRecordings']=function(_0x4f8d60,_0x4d064b,_0x5ce062){var _0x688697={'raw':!![],'where':{}};var _0x5edc47={};var _0x339f26={'count':0x0,'rows':[]};return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x4f8d60[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x4d064b,null))[_0x199c('0x19')](function(_0x5f1476){if(_0x5f1476){_0x5edc47['model']=_[_0x199c('0x37')](db['VoiceRecording'][_0x199c('0x35')]);_0x5edc47[_0x199c('0x39')]=_[_0x199c('0x37')](_0x4f8d60[_0x199c('0x39')]);_0x5edc47[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x5edc47[_0x199c('0x3c')],_0x5edc47[_0x199c('0x39')]);_0x688697[_0x199c('0x3e')]=_[_0x199c('0x3b')](_0x5edc47['model'],qs[_0x199c('0x3d')](_0x4f8d60['query'][_0x199c('0x3d')]));_0x688697['attributes']=_0x688697[_0x199c('0x3e')][_0x199c('0x3f')]?_0x688697[_0x199c('0x3e')]:_0x5edc47[_0x199c('0x3c')];if(!_0x4f8d60[_0x199c('0x39')]['hasOwnProperty'](_0x199c('0xa3'))){_0x688697[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x4f8d60[_0x199c('0x39')][_0x199c('0x2a')]);_0x688697[_0x199c('0x29')]=qs['offset'](_0x4f8d60[_0x199c('0x39')][_0x199c('0x29')]);}_0x688697[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x4f8d60[_0x199c('0x39')][_0x199c('0x42')]);_0x688697[_0x199c('0x46')]=qs[_0x199c('0x43')](_['pick'](_0x4f8d60['query'],_0x5edc47[_0x199c('0x43')]));_0x688697[_0x199c('0x46')]['UserId']=_0x5f1476['id'];if(_0x4f8d60[_0x199c('0x39')]['filter']){_0x688697['where']=_['merge'](_0x688697[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x688697['attributes'],function(_0x4cd610){var _0x15187b={};_0x15187b[_0x4cd610]={'$like':'%'+_0x4f8d60[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0x15187b;})});}_0x688697=_[_0x199c('0x48')]({},_0x688697,_0x4f8d60['options']);return db[_0x199c('0xab')]['count']({'where':_0x688697['where']})['then'](function(_0x6fcd1){_0x339f26[_0x199c('0x28')]=_0x6fcd1;if(_0x4f8d60[_0x199c('0x39')][_0x199c('0x4e')]){_0x688697[_0x199c('0x4f')]=[{'all':!![]}];}return db[_0x199c('0xab')][_0x199c('0x50')](_0x688697);})['then'](function(_0x4ff903){_0x339f26[_0x199c('0xa4')]=_0x4ff903;return _0x339f26;});}})[_0x199c('0x19')](respondWithFilteredResult(_0x4d064b,_0x688697))[_0x199c('0x23')](handleError(_0x4d064b,null));};exports[_0x199c('0xac')]=function(_0x52f5a0,_0x5f3dbc,_0x64b729){var _0x2050a5={};var _0x3aefb7={};var _0x342c35;var _0x582e72;return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x52f5a0[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x5f3dbc,null))[_0x199c('0x19')](function(_0x502e29){if(_0x502e29){_0x342c35=_0x502e29;_0x3aefb7[_0x199c('0x3c')]=_[_0x199c('0x37')](db[_0x199c('0xad')][_0x199c('0x35')]);_0x3aefb7[_0x199c('0x39')]=_[_0x199c('0x37')](_0x52f5a0[_0x199c('0x39')]);_0x3aefb7[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x3aefb7['model'],_0x3aefb7[_0x199c('0x39')]);_0x2050a5['attributes']=_[_0x199c('0x3b')](_0x3aefb7['model'],qs[_0x199c('0x3d')](_0x52f5a0[_0x199c('0x39')]['fields']));_0x2050a5[_0x199c('0x3e')]=_0x2050a5['attributes'][_0x199c('0x3f')]?_0x2050a5['attributes']:_0x3aefb7[_0x199c('0x3c')];_0x2050a5[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x52f5a0[_0x199c('0x39')][_0x199c('0x42')]);_0x2050a5['where']=qs['filters'](_['pick'](_0x52f5a0[_0x199c('0x39')],_0x3aefb7[_0x199c('0x43')]));if(_0x52f5a0[_0x199c('0x39')][_0x199c('0x47')]){_0x2050a5[_0x199c('0x46')]=_[_0x199c('0x48')](_0x2050a5[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x2050a5[_0x199c('0x3e')],function(_0x23d508){var _0x50257a={};_0x50257a[_0x23d508]={'$like':'%'+_0x52f5a0['query'][_0x199c('0x47')]+'%'};return _0x50257a;})});}_0x2050a5=_['merge']({},_0x2050a5,_0x52f5a0[_0x199c('0x4c')]);return _0x342c35[_0x199c('0xac')](_0x2050a5);}})['then'](function(_0x4a38fe){if(_0x4a38fe){_0x582e72=_0x4a38fe[_0x199c('0x3f')];if(!_0x52f5a0[_0x199c('0x39')][_0x199c('0x40')](_0x199c('0xa3'))){_0x2050a5[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x52f5a0[_0x199c('0x39')][_0x199c('0x2a')]);_0x2050a5[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x52f5a0[_0x199c('0x39')][_0x199c('0x29')]);}return _0x342c35[_0x199c('0xac')](_0x2050a5);}})[_0x199c('0x19')](function(_0x23f7c4){if(_0x23f7c4){return _0x23f7c4?{'count':_0x582e72,'rows':_0x23f7c4}:null;}})[_0x199c('0x19')](respondWithResult(_0x5f3dbc,null))['catch'](handleError(_0x5f3dbc,null));};exports[_0x199c('0xae')]=function(_0x5aa502,_0x36f960,_0x1061ad){var _0x1136a0={};var _0x125ca0={};var _0x4203ff;var _0xd1e38c;return db['User']['findOne']({'where':{'id':_0x5aa502[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x36f960,null))[_0x199c('0x19')](function(_0x43b2b4){if(_0x43b2b4){_0x4203ff=_0x43b2b4;_0x125ca0[_0x199c('0x3c')]=_['keys'](db[_0x199c('0xaf')][_0x199c('0x35')]);_0x125ca0[_0x199c('0x39')]=_['keys'](_0x5aa502['query']);_0x125ca0['filters']=_[_0x199c('0x3b')](_0x125ca0[_0x199c('0x3c')],_0x125ca0[_0x199c('0x39')]);_0x1136a0[_0x199c('0x3e')]=_['intersection'](_0x125ca0[_0x199c('0x3c')],qs['fields'](_0x5aa502[_0x199c('0x39')][_0x199c('0x3d')]));_0x1136a0[_0x199c('0x3e')]=_0x1136a0[_0x199c('0x3e')][_0x199c('0x3f')]?_0x1136a0[_0x199c('0x3e')]:_0x125ca0[_0x199c('0x3c')];_0x1136a0[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x5aa502[_0x199c('0x39')][_0x199c('0x42')]);_0x1136a0[_0x199c('0x46')]=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x5aa502[_0x199c('0x39')],_0x125ca0['filters']));if(_0x5aa502[_0x199c('0x39')][_0x199c('0x47')]){_0x1136a0[_0x199c('0x46')]=_[_0x199c('0x48')](_0x1136a0[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x1136a0['attributes'],function(_0x4da62e){var _0x2bf867={};_0x2bf867[_0x4da62e]={'$like':'%'+_0x5aa502['query'][_0x199c('0x47')]+'%'};return _0x2bf867;})});}_0x1136a0=_[_0x199c('0x48')]({},_0x1136a0,_0x5aa502[_0x199c('0x4c')]);return _0x4203ff[_0x199c('0xae')](_0x1136a0);}})[_0x199c('0x19')](function(_0x3e84aa){if(_0x3e84aa){_0xd1e38c=_0x3e84aa['length'];if(!_0x5aa502['query'][_0x199c('0x40')](_0x199c('0xa3'))){_0x1136a0['limit']=qs['limit'](_0x5aa502[_0x199c('0x39')][_0x199c('0x2a')]);_0x1136a0[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x5aa502['query']['offset']);}return _0x4203ff[_0x199c('0xae')](_0x1136a0);}})[_0x199c('0x19')](function(_0x24670f){if(_0x24670f){return _0x24670f?{'count':_0xd1e38c,'rows':_0x24670f}:null;}})[_0x199c('0x19')](respondWithResult(_0x36f960,null))[_0x199c('0x23')](handleError(_0x36f960,null));};exports[_0x199c('0xb0')]=function(_0x10b3f8,_0x55efa1,_0x2834c1){var _0x3d681f={'raw':!![],'where':{}};var _0x184e44={};var _0x2b0c2d={'count':0x0,'rows':[]};return db[_0x199c('0x4d')]['findOne']({'where':{'id':_0x10b3f8['params']['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x55efa1,null))[_0x199c('0x19')](function(_0x22a302){if(_0x22a302){_0x184e44[_0x199c('0x3c')]=_[_0x199c('0x37')](db[_0x199c('0xb1')][_0x199c('0x35')]);_0x184e44[_0x199c('0x39')]=_[_0x199c('0x37')](_0x10b3f8[_0x199c('0x39')]);_0x184e44[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x184e44[_0x199c('0x3c')],_0x184e44[_0x199c('0x39')]);_0x3d681f[_0x199c('0x3e')]=_['intersection'](_0x184e44[_0x199c('0x3c')],qs[_0x199c('0x3d')](_0x10b3f8[_0x199c('0x39')][_0x199c('0x3d')]));_0x3d681f[_0x199c('0x3e')]=_0x3d681f[_0x199c('0x3e')][_0x199c('0x3f')]?_0x3d681f[_0x199c('0x3e')]:_0x184e44[_0x199c('0x3c')];if(!_0x10b3f8[_0x199c('0x39')][_0x199c('0x40')](_0x199c('0xa3'))){_0x3d681f[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x10b3f8['query'][_0x199c('0x2a')]);_0x3d681f['offset']=qs['offset'](_0x10b3f8[_0x199c('0x39')][_0x199c('0x29')]);}_0x3d681f[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x10b3f8[_0x199c('0x39')]['sort']);_0x3d681f[_0x199c('0x46')]=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x10b3f8['query'],_0x184e44['filters']));_0x3d681f[_0x199c('0x46')]['UserId']=_0x22a302['id'];if(_0x10b3f8[_0x199c('0x39')][_0x199c('0x47')]){_0x3d681f['where']=_[_0x199c('0x48')](_0x3d681f[_0x199c('0x46')],{'$or':_['map'](_0x3d681f[_0x199c('0x3e')],function(_0xd94688){var _0x4397b1={};_0x4397b1[_0xd94688]={'$like':'%'+_0x10b3f8[_0x199c('0x39')]['filter']+'%'};return _0x4397b1;})});}_0x3d681f=_['merge']({},_0x3d681f,_0x10b3f8[_0x199c('0x4c')]);return db[_0x199c('0xb1')]['count']({'where':_0x3d681f[_0x199c('0x46')]})[_0x199c('0x19')](function(_0x1b628d){_0x2b0c2d[_0x199c('0x28')]=_0x1b628d;if(_0x10b3f8['query'][_0x199c('0x4e')]){_0x3d681f[_0x199c('0x4f')]=[{'all':!![]}];}return db[_0x199c('0xb1')][_0x199c('0x50')](_0x3d681f);})[_0x199c('0x19')](function(_0x5379ac){_0x2b0c2d[_0x199c('0xa4')]=_0x5379ac;return _0x2b0c2d;});}})[_0x199c('0x19')](respondWithFilteredResult(_0x55efa1,_0x3d681f))[_0x199c('0x23')](handleError(_0x55efa1,null));};exports[_0x199c('0xb2')]=function(_0x3b3513,_0x33e910,_0x56a340){var _0x4ab2f6={};var _0x19ab46={};var _0x1f9e9c;var _0x22142f;return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x3b3513['params']['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x33e910,null))['then'](function(_0x1a7682){if(_0x1a7682){_0x1f9e9c=_0x1a7682;_0x19ab46[_0x199c('0x3c')]=_[_0x199c('0x37')](db[_0x199c('0xb3')][_0x199c('0x35')]);_0x19ab46['query']=_[_0x199c('0x37')](_0x3b3513[_0x199c('0x39')]);_0x19ab46['filters']=_[_0x199c('0x3b')](_0x19ab46[_0x199c('0x3c')],_0x19ab46['query']);_0x4ab2f6[_0x199c('0x3e')]=_['intersection'](_0x19ab46['model'],qs['fields'](_0x3b3513[_0x199c('0x39')]['fields']));_0x4ab2f6[_0x199c('0x3e')]=_0x4ab2f6[_0x199c('0x3e')][_0x199c('0x3f')]?_0x4ab2f6['attributes']:_0x19ab46[_0x199c('0x3c')];_0x4ab2f6[_0x199c('0x41')]=qs['sort'](_0x3b3513['query']['sort']);_0x4ab2f6[_0x199c('0x46')]=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x3b3513[_0x199c('0x39')],_0x19ab46['filters']));if(_0x3b3513[_0x199c('0x39')]['filter']){_0x4ab2f6[_0x199c('0x46')]=_[_0x199c('0x48')](_0x4ab2f6[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x4ab2f6[_0x199c('0x3e')],function(_0x43bcdd){var _0x52163e={};_0x52163e[_0x43bcdd]={'$like':'%'+_0x3b3513[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0x52163e;})});}_0x4ab2f6=_[_0x199c('0x48')]({},_0x4ab2f6,_0x3b3513[_0x199c('0x4c')]);return _0x1f9e9c['getSmsInteractions'](_0x4ab2f6);}})[_0x199c('0x19')](function(_0x5f0689){if(_0x5f0689){_0x22142f=_0x5f0689[_0x199c('0x3f')];if(!_0x3b3513[_0x199c('0x39')][_0x199c('0x40')](_0x199c('0xa3'))){_0x4ab2f6[_0x199c('0x2a')]=qs['limit'](_0x3b3513[_0x199c('0x39')][_0x199c('0x2a')]);_0x4ab2f6[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x3b3513['query']['offset']);}return _0x1f9e9c[_0x199c('0xb2')](_0x4ab2f6);}})[_0x199c('0x19')](function(_0x1ead7f){if(_0x1ead7f){return _0x1ead7f?{'count':_0x22142f,'rows':_0x1ead7f}:null;}})[_0x199c('0x19')](respondWithResult(_0x33e910,null))[_0x199c('0x23')](handleError(_0x33e910,null));};exports[_0x199c('0xb4')]=function(_0x397eb4,_0x37df3e,_0xeb29b6){var _0x597b48={};var _0x39243f={};var _0x18d056;var _0x4d659d;return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x397eb4[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x37df3e,null))[_0x199c('0x19')](function(_0x18b0ef){if(_0x18b0ef){_0x18d056=_0x18b0ef;_0x39243f['model']=_[_0x199c('0x37')](db[_0x199c('0xb5')][_0x199c('0x35')]);_0x39243f[_0x199c('0x39')]=_[_0x199c('0x37')](_0x397eb4[_0x199c('0x39')]);_0x39243f[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x39243f[_0x199c('0x3c')],_0x39243f[_0x199c('0x39')]);_0x597b48['attributes']=_[_0x199c('0x3b')](_0x39243f[_0x199c('0x3c')],qs[_0x199c('0x3d')](_0x397eb4['query']['fields']));_0x597b48[_0x199c('0x3e')]=_0x597b48['attributes']['length']?_0x597b48[_0x199c('0x3e')]:_0x39243f[_0x199c('0x3c')];_0x597b48[_0x199c('0x41')]=qs['sort'](_0x397eb4[_0x199c('0x39')][_0x199c('0x42')]);_0x597b48[_0x199c('0x46')]=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x397eb4[_0x199c('0x39')],_0x39243f[_0x199c('0x43')]));if(_0x397eb4['query'][_0x199c('0x47')]){_0x597b48['where']=_[_0x199c('0x48')](_0x597b48[_0x199c('0x46')],{'$or':_['map'](_0x597b48[_0x199c('0x3e')],function(_0x5d1717){var _0x3865e1={};_0x3865e1[_0x5d1717]={'$like':'%'+_0x397eb4[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0x3865e1;})});}_0x597b48=_[_0x199c('0x48')]({},_0x597b48,_0x397eb4[_0x199c('0x4c')]);return _0x18d056[_0x199c('0xb4')](_0x597b48);}})[_0x199c('0x19')](function(_0x328cbd){if(_0x328cbd){_0x4d659d=_0x328cbd[_0x199c('0x3f')];if(!_0x397eb4[_0x199c('0x39')][_0x199c('0x40')](_0x199c('0xa3'))){_0x597b48[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x397eb4['query']['limit']);_0x597b48[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x397eb4[_0x199c('0x39')][_0x199c('0x29')]);}return _0x18d056[_0x199c('0xb4')](_0x597b48);}})['then'](function(_0x58f9d3){if(_0x58f9d3){return _0x58f9d3?{'count':_0x4d659d,'rows':_0x58f9d3}:null;}})[_0x199c('0x19')](respondWithResult(_0x37df3e,null))[_0x199c('0x23')](handleError(_0x37df3e,null));};exports[_0x199c('0xb6')]=function(_0x532da3,_0x326e22,_0x49448f){var _0x41e7f6;var _0x45e843;var _0x15c9c0;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x532da3[_0x199c('0x52')]['id'],'role':'agent'},'attributes':['id','name',_0x199c('0xb7'),_0x199c('0xb8'),_0x199c('0x5b'),_0x199c('0x68'),_0x199c('0x86')]})[_0x199c('0x19')](handleEntityNotFound(_0x326e22,null))['then'](function(_0x4cfd61){if(_0x4cfd61){_0x41e7f6=_0x4cfd61;_0x15c9c0=_0x532da3[_0x199c('0x57')][_0x199c('0xb9')]&&_0x41e7f6[_0x532da3[_0x199c('0x57')]['interface']]?util[_0x199c('0x65')](_0x199c('0xba'),_0x41e7f6[_0x532da3[_0x199c('0x57')][_0x199c('0xb9')]]):util[_0x199c('0x65')](_0x199c('0xbb'),_0x41e7f6['name']);socket['to'](util[_0x199c('0x65')](_0x199c('0xbc'),_0x41e7f6[_0x199c('0x32')]))[_0x199c('0xbd')](_0x199c('0xbe'),{'ip':_0x532da3[_0x199c('0xbf')]['x-forwarded-for']||_0x532da3[_0x199c('0xc0')][_0x199c('0xc1')]||_0x532da3['socket'][_0x199c('0xc1')]||_0x532da3[_0x199c('0xc0')][_0x199c('0xc2')][_0x199c('0xc1')]});return db[_0x199c('0x93')][_0x199c('0x96')]({'where':{'membername':_0x41e7f6[_0x199c('0x32')]},'individualHooks':!![]});}})[_0x199c('0x19')](function(_0x518ff9){if(_0x41e7f6){return _0x41e7f6['getVoiceQueues']({'raw':!![]});}})[_0x199c('0x19')](function(_0x4bdc8d){var _0x6f44f0=[];if(_0x4bdc8d){_0x45e843=_0x4bdc8d;if(_0x45e843['length']){for(var _0x22da5f=0x0;_0x22da5f<_0x45e843['length'];_0x22da5f++){_0x6f44f0[_0x199c('0x8f')]({'membername':_0x41e7f6[_0x199c('0x32')],'UserId':_0x41e7f6['id'],'queue_name':_0x45e843[_0x22da5f][_0x199c('0x32')],'VoiceQueueId':_0x45e843[_0x22da5f]['id'],'interface':_0x15c9c0||util[_0x199c('0x65')](_0x199c('0x90'),'SIP',_0x41e7f6[_0x199c('0x32')]),'paused':_0x41e7f6['loginInPause']||![],'penalty':_0x45e843[_0x22da5f]['UserVoiceQueue.penalty']||0x0});}return BPromise['each'](_0x6f44f0,function(_0x4caaa9){return db[_0x199c('0x93')][_0x199c('0xc3')](_0x4caaa9);});}}})[_0x199c('0x19')](function(){return db['MemberReport']['findAll']({'where':{'membername':_0x41e7f6[_0x199c('0x32')],'interface':util[_0x199c('0x65')](_0x199c('0x90'),_0x199c('0xc4'),_0x41e7f6[_0x199c('0x32')]),'exitAt':null}});})['then'](function(_0x4b71e9){var _0x6a8fb9=[];_0x4b71e9['forEach'](function(_0x137fbc){_0x6a8fb9[_0x199c('0x8f')](_0x137fbc[_0x199c('0x30')]({'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')}));});return BPromise[_0x199c('0xc5')](_0x6a8fb9);})[_0x199c('0x19')](function(){var _0xe6d8f2=[];var _0x3aa418=[];var _0x5df950=utils[_0x199c('0xc6')]();var _0x55d013={'membername':_0x41e7f6[_0x199c('0x32')],'interface':util['format']('%s/%s','SIP',_0x41e7f6[_0x199c('0x32')]),'enterAt':moment()[_0x199c('0x65')](_0x199c('0xc7')),'role':_0x41e7f6[_0x199c('0x5b')],'internal':_0x41e7f6[_0x199c('0x68')]};_0x5df950[_0x199c('0xc8')](function(_0x2d4940){_0xe6d8f2[_0x199c('0x8f')](_[_0x199c('0x48')]({'channel':_0x2d4940,'type':_0x199c('0xc9'),'data1':_0x532da3[_0x199c('0x57')][_0x199c('0xca')],'data2':_0x15c9c0},_0x55d013));if(_0x41e7f6['loginInPause']){_0x3aa418['push'](_[_0x199c('0x48')]({'channel':_0x2d4940,'type':'PAUSE','data1':_0x199c('0xcb')},_0x55d013));}});return db[_0x199c('0xcc')]['bulkCreate'](_0xe6d8f2[_0x199c('0xcd')](_0x3aa418),{'individualHooks':!![]});})[_0x199c('0x19')](function(){return _0x41e7f6[_0x199c('0x30')]({'online':!![],'lastLoginAt':moment()[_0x199c('0x65')](_0x199c('0xc7')),'voicePause':_0x41e7f6[_0x199c('0x86')]||![],'mailPause':_0x41e7f6[_0x199c('0x86')]||![],'chatPause':_0x41e7f6['loginInPause']||![],'faxPause':_0x41e7f6[_0x199c('0x86')]||![],'smsPause':_0x41e7f6[_0x199c('0x86')]||![],'openchannelPause':_0x41e7f6[_0x199c('0x86')]||![],'pauseType':_0x41e7f6['loginInPause']?_0x199c('0xcb'):null,'lastPauseAt':moment()['format'](_0x199c('0xc7'))});})[_0x199c('0x19')](respondWithResult(_0x326e22,null))[_0x199c('0x23')](handleError(_0x326e22,null));};exports[_0x199c('0xce')]=function(_0x50440b,_0x20a6bd,_0x1f13b8){var _0x59ba38;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x50440b[_0x199c('0x52')]['id'],'role':_0x199c('0x5c')},'attributes':['id',_0x199c('0x32'),_0x199c('0x5b')]})[_0x199c('0x19')](handleEntityNotFound(_0x20a6bd,null))[_0x199c('0x19')](function(_0xf145f8){if(_0xf145f8){_0x59ba38=_0xf145f8;return db[_0x199c('0x93')][_0x199c('0x96')]({'where':{'membername':_0x59ba38[_0x199c('0x32')]},'individualHooks':!![]});}})[_0x199c('0x19')](function(){return db[_0x199c('0xcc')]['findAll']({'where':{'membername':_0x59ba38[_0x199c('0x32')],'interface':util[_0x199c('0x65')]('%s/%s',_0x199c('0xc4'),_0x59ba38[_0x199c('0x32')]),'exitAt':null}});})['then'](function(_0x19b53b){var _0x4463c8=[];_0x19b53b[_0x199c('0xc8')](function(_0x3626b9){_0x4463c8[_0x199c('0x8f')](_0x3626b9[_0x199c('0x30')]({'exitAt':moment()[_0x199c('0x65')](_0x199c('0xc7'))}));});return BPromise[_0x199c('0xc5')](_0x4463c8);})[_0x199c('0x19')](function(){return _0x59ba38['update']({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});})[_0x199c('0x19')](respondWithResult(_0x20a6bd,null))[_0x199c('0x23')](handleError(_0x20a6bd,null));};exports[_0x199c('0xcf')]=function(_0x5f394d,_0x3d7f7a,_0x32170f){var _0x5cd2b4;return db[_0x199c('0x93')][_0x199c('0x30')]({'paused':0x1},{'where':{'UserId':_0x5f394d[_0x199c('0x52')]['id']},'individualHooks':!![]})[_0x199c('0x19')](function(){return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x5f394d[_0x199c('0x52')]['id'],'role':_0x199c('0x5c')},'attributes':['id',_0x199c('0x32'),_0x199c('0x5b'),'internal']});})[_0x199c('0x19')](handleEntityNotFound(_0x3d7f7a,null))[_0x199c('0x19')](function(_0x209579){if(_0x209579){_0x5cd2b4=_0x209579;return respondWithRpcPromise('QueuePause',_0x199c('0xcf'),{'id':_0x5cd2b4['id'],'name':_0x5cd2b4[_0x199c('0x32')],'pause':!![]});}})[_0x199c('0x19')](function(){if(_0x5cd2b4){return db[_0x199c('0xcc')][_0x199c('0x50')]({'where':{'membername':_0x5cd2b4['name'],'interface':util['format'](_0x199c('0x90'),'SIP',_0x5cd2b4[_0x199c('0x32')]),'type':'PAUSE','exitAt':null}});}})[_0x199c('0x19')](function(_0x5e5912){if(_0x5e5912['length']){var _0x4ff906=moment()[_0x199c('0x65')](_0x199c('0xc7'));for(var _0x32aa32=0x0,_0x4e4170=_0x5e5912[_0x199c('0x3f')];_0x32aa32<_0x4e4170;_0x32aa32++){_0x5e5912[_0x32aa32][_0x199c('0xd0')]({'exitAt':_0x4ff906});}}})[_0x199c('0x19')](function(){var _0x3284ed=[];var _0x2afdb6=utils[_0x199c('0xc6')]();_0x2afdb6[_0x199c('0xc8')](function(_0x17ec85){_0x3284ed[_0x199c('0x8f')]({'channel':_0x17ec85,'membername':_0x5cd2b4[_0x199c('0x32')],'interface':util['format'](_0x199c('0x90'),_0x199c('0xc4'),_0x5cd2b4[_0x199c('0x32')]),'type':_0x199c('0xd1'),'enterAt':moment()[_0x199c('0x65')]('YYYY-MM-DD\x20HH:mm:ss'),'data1':_0x5f394d[_0x199c('0x57')][_0x199c('0xd2')]||_0x199c('0xd3'),'role':_0x5cd2b4[_0x199c('0x5b')],'internal':_0x5cd2b4[_0x199c('0x68')]});});return db[_0x199c('0xcc')][_0x199c('0x56')](_0x3284ed,{'individualHooks':!![]});})['then'](function(){return _0x5cd2b4[_0x199c('0x30')]({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x5f394d['body'][_0x199c('0xd2')]||_0x199c('0xd3'),'lastPauseAt':moment()['format'](_0x199c('0xc7'))});})[_0x199c('0x19')](respondWithResult(_0x3d7f7a,null))[_0x199c('0x23')](handleError(_0x3d7f7a,null));};exports[_0x199c('0xd4')]=function(_0x5e18e2,_0x5e88c0,_0x4e87db){var _0x47a83f;return db['User']['find']({'where':{'id':_0x5e18e2[_0x199c('0x52')]['id']},'attributes':['id',_0x199c('0x32'),_0x199c('0x5b'),_0x199c('0x91'),_0x199c('0xd5'),_0x199c('0xd6'),_0x199c('0xd7'),_0x199c('0xd8'),_0x199c('0xd9'),_0x199c('0xda'),_0x199c('0xdb')]})[_0x199c('0x19')](handleEntityNotFound(_0x5e88c0,null))[_0x199c('0x19')](function(_0x1ef59c){if(_0x1ef59c){_0x47a83f=_0x1ef59c;if(_0x5e18e2[_0x199c('0x57')]['channel']&&!utils[_0x199c('0x87')](_0x5e18e2['body']['channel'])){throw new db[(_0x199c('0x81'))]['ValidationError'](_0x199c('0x95'));}switch(_0x5e18e2[_0x199c('0x57')][_0x199c('0x8a')]){case _0x199c('0x8e'):return respondWithRpcPromise(_0x199c('0xdc'),_0x199c('0xd4'),{'id':_0x47a83f['id'],'name':_0x47a83f[_0x199c('0x32')],'pause':![]})[_0x199c('0x19')](function(){return db[_0x199c('0x93')][_0x199c('0x30')]({'paused':0x0},{'where':{'UserId':_0x47a83f['id']},'individualHooks':!![]});})['then'](function(){return db[_0x199c('0xcc')][_0x199c('0x55')]({'where':{'channel':_0x5e18e2['body'][_0x199c('0x8a')],'membername':_0x47a83f[_0x199c('0x32')],'interface':util[_0x199c('0x65')](_0x199c('0x90'),_0x199c('0xc4'),_0x47a83f[_0x199c('0x32')]),'type':_0x199c('0xd1'),'exitAt':null}});})['then'](function(_0x56ea29){if(_0x56ea29){return _0x56ea29[_0x199c('0x30')]({'exitAt':moment()[_0x199c('0x65')](_0x199c('0xc7')),'data2':_0x199c('0xdd')},{'individualHooks':!![]});}return null;})[_0x199c('0x19')](function(){return _0x47a83f[_0x199c('0x30')]({'voicePause':![]});});case'mail':case'chat':case _0x199c('0xde'):case _0x199c('0xdf'):case _0x199c('0xe0'):return db[_0x199c('0xcc')][_0x199c('0x55')]({'where':{'channel':_0x5e18e2[_0x199c('0x57')]['channel'],'membername':_0x47a83f[_0x199c('0x32')],'interface':util[_0x199c('0x65')](_0x199c('0x90'),'SIP',_0x47a83f[_0x199c('0x32')]),'type':_0x199c('0xd1'),'exitAt':null}})[_0x199c('0x19')](function(_0x34d0aa){if(_0x34d0aa){return _0x34d0aa[_0x199c('0x30')]({'exitAt':moment()[_0x199c('0x65')](_0x199c('0xc7')),'data2':_0x199c('0xdd')},{'individualHooks':!![]});}return null;})[_0x199c('0x19')](function(){var _0x1bb843={};_[_0x199c('0x2b')](_0x1bb843,util['format'](_0x199c('0xe1'),_0x5e18e2['body'][_0x199c('0x8a')],_0x199c('0xe2')),![]);return _0x47a83f[_0x199c('0x30')](_0x1bb843);});default:return respondWithRpcPromise('QueuePause',_0x199c('0xd4'),{'id':_0x47a83f['id'],'name':_0x47a83f[_0x199c('0x32')],'pause':![]})[_0x199c('0x19')](function(){return db[_0x199c('0x93')]['update']({'paused':0x0},{'where':{'UserId':_0x47a83f['id']}});})[_0x199c('0x19')](function(){return db[_0x199c('0xcc')][_0x199c('0x50')]({'where':{'membername':_0x47a83f[_0x199c('0x32')],'interface':util[_0x199c('0x65')]('%s/%s',_0x199c('0xc4'),_0x47a83f['name']),'type':'PAUSE','exitAt':null}});})[_0x199c('0x19')](function(_0x120757){var _0x59d667=[];_0x120757[_0x199c('0xc8')](function(_0xf34368){_0x59d667['push'](_0xf34368[_0x199c('0x30')]({'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'data2':_0x199c('0xdd')}));});return BPromise[_0x199c('0xc5')](_0x59d667);})[_0x199c('0x19')](function(){return _0x47a83f['update']({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0x199c('0x19')](respondWithResult(_0x5e88c0,null))[_0x199c('0x23')](handleError(_0x5e88c0,null));};exports[_0x199c('0xe3')]=function(_0x1db5e8,_0x1fcc1a,_0x44f934){var _0x282b59={};var _0x1bb3a5={};var _0x59a701;var _0x404987;return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x1db5e8[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x1fcc1a,null))[_0x199c('0x19')](function(_0x967ad0){if(_0x967ad0){_0x59a701=_0x967ad0;_0x1bb3a5[_0x199c('0x3c')]=_[_0x199c('0x37')](db['Team'][_0x199c('0x35')]);_0x1bb3a5[_0x199c('0x39')]=_['keys'](_0x1db5e8[_0x199c('0x39')]);_0x1bb3a5[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x1bb3a5[_0x199c('0x3c')],_0x1bb3a5[_0x199c('0x39')]);_0x282b59[_0x199c('0x3e')]=_[_0x199c('0x3b')](_0x1bb3a5[_0x199c('0x3c')],qs[_0x199c('0x3d')](_0x1db5e8['query'][_0x199c('0x3d')]));_0x282b59[_0x199c('0x3e')]=_0x282b59[_0x199c('0x3e')][_0x199c('0x3f')]?_0x282b59[_0x199c('0x3e')]:_0x1bb3a5[_0x199c('0x3c')];_0x282b59['order']=qs[_0x199c('0x42')](_0x1db5e8[_0x199c('0x39')][_0x199c('0x42')]);_0x282b59[_0x199c('0x46')]=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x1db5e8[_0x199c('0x39')],_0x1bb3a5[_0x199c('0x43')]));if(_0x1db5e8[_0x199c('0x39')][_0x199c('0x47')]){_0x282b59[_0x199c('0x46')]=_['merge'](_0x282b59[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x282b59[_0x199c('0x3e')],function(_0x25d5b6){var _0x2a06d7={};_0x2a06d7[_0x25d5b6]={'$like':'%'+_0x1db5e8[_0x199c('0x39')]['filter']+'%'};return _0x2a06d7;})});}_0x282b59=_['merge']({},_0x282b59,_0x1db5e8[_0x199c('0x4c')]);return _0x59a701['getTeams'](_0x282b59);}})[_0x199c('0x19')](function(_0x2ce6d7){if(_0x2ce6d7){_0x404987=_0x2ce6d7[_0x199c('0x3f')];if(!_0x1db5e8[_0x199c('0x39')][_0x199c('0x40')](_0x199c('0xa3'))){_0x282b59[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x1db5e8[_0x199c('0x39')]['limit']);_0x282b59['offset']=qs['offset'](_0x1db5e8[_0x199c('0x39')][_0x199c('0x29')]);}return _0x59a701[_0x199c('0xe3')](_0x282b59);}})[_0x199c('0x19')](function(_0xe64267){if(_0xe64267){return _0xe64267?{'count':_0x404987,'rows':_0xe64267}:null;}})['then'](respondWithResult(_0x1fcc1a,null))['catch'](handleError(_0x1fcc1a,null));};exports[_0x199c('0xe4')]=function(_0x54f7ab,_0xbcf0c0,_0x2cfe5f){return db[_0x199c('0x4d')]['find']({'where':{'id':_0x54f7ab[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0xbcf0c0,null))[_0x199c('0x19')](function(_0x37f662){if(_0x37f662){return _0x37f662[_0x199c('0xe4')](_0x54f7ab['body']['ids'],_[_0x199c('0xe5')](_0x54f7ab[_0x199c('0x57')],[_0x199c('0x5a'),'id'])||{});}})[_0x199c('0x19')](respondWithResult(_0xbcf0c0,null))[_0x199c('0x23')](handleError(_0xbcf0c0,null));};exports[_0x199c('0xe6')]=function(_0x125b46,_0x331613,_0x2c881f){var _0x4e02cc;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x125b46[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x331613,null))['then'](function(_0x2d43fe){if(_0x2d43fe){return _0x2d43fe[_0x199c('0xe6')](_0x125b46[_0x199c('0x39')][_0x199c('0x5a')]);}})[_0x199c('0x19')](respondWithStatusCode(_0x331613,null))[_0x199c('0x23')](handleError(_0x331613,null));};exports['getLists']=function(_0x39bc13,_0x39a4b0,_0x17e915){var _0x8bbd5f={};var _0x711d2f={};var _0x144ffd;var _0x46a626;return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x39bc13[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x39a4b0,null))['then'](function(_0x20959c){if(_0x20959c){_0x144ffd=_0x20959c;_0x711d2f[_0x199c('0x3c')]=_['keys'](db[_0x199c('0xe7')][_0x199c('0x35')]);_0x711d2f[_0x199c('0x39')]=_[_0x199c('0x37')](_0x39bc13['query']);_0x711d2f[_0x199c('0x43')]=_['intersection'](_0x711d2f[_0x199c('0x3c')],_0x711d2f['query']);_0x8bbd5f[_0x199c('0x3e')]=_[_0x199c('0x3b')](_0x711d2f[_0x199c('0x3c')],qs[_0x199c('0x3d')](_0x39bc13['query']['fields']));_0x8bbd5f[_0x199c('0x3e')]=_0x8bbd5f['attributes'][_0x199c('0x3f')]?_0x8bbd5f['attributes']:_0x711d2f[_0x199c('0x3c')];_0x8bbd5f[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x39bc13[_0x199c('0x39')][_0x199c('0x42')]);_0x8bbd5f['where']=qs['filters'](_[_0x199c('0x44')](_0x39bc13[_0x199c('0x39')],_0x711d2f[_0x199c('0x43')]));if(_0x39bc13[_0x199c('0x39')][_0x199c('0x47')]){_0x8bbd5f[_0x199c('0x46')]=_[_0x199c('0x48')](_0x8bbd5f['where'],{'$or':_['map'](_0x8bbd5f[_0x199c('0x3e')],function(_0x4119ec){var _0x19620f={};_0x19620f[_0x4119ec]={'$like':'%'+_0x39bc13[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0x19620f;})});}_0x8bbd5f=_[_0x199c('0x48')]({},_0x8bbd5f,_0x39bc13[_0x199c('0x4c')]);return _0x144ffd[_0x199c('0xe8')](_0x8bbd5f);}})[_0x199c('0x19')](function(_0x23ef4c){if(_0x23ef4c){_0x46a626=_0x23ef4c['length'];if(!_0x39bc13['query']['hasOwnProperty'](_0x199c('0xa3'))){_0x8bbd5f[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x39bc13[_0x199c('0x39')][_0x199c('0x2a')]);_0x8bbd5f[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x39bc13[_0x199c('0x39')][_0x199c('0x29')]);}return _0x144ffd['getLists'](_0x8bbd5f);}})['then'](function(_0x2ad8f5){if(_0x2ad8f5){return _0x2ad8f5?{'count':_0x46a626,'rows':_0x2ad8f5}:null;}})['then'](respondWithResult(_0x39a4b0,null))[_0x199c('0x23')](handleError(_0x39a4b0,null));};exports[_0x199c('0xe9')]=function(_0x18f3d0,_0x4988ec,_0x54e770){var _0x2dc124={};var _0x487cdc={};var _0x3038e7;var _0x4eb203;return db['User'][_0x199c('0xa1')]({'where':{'id':_0x18f3d0[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x4988ec,null))[_0x199c('0x19')](function(_0x1f7174){if(_0x1f7174){_0x3038e7=_0x1f7174;_0x487cdc[_0x199c('0x3c')]=_[_0x199c('0x37')](db[_0x199c('0x4d')][_0x199c('0x35')]);_0x487cdc[_0x199c('0x39')]=_[_0x199c('0x37')](_0x18f3d0[_0x199c('0x39')]);_0x487cdc['filters']=_['intersection'](_0x487cdc['model'],_0x487cdc[_0x199c('0x39')]);_0x2dc124[_0x199c('0x3e')]=_[_0x199c('0x3b')](_0x487cdc[_0x199c('0x3c')],qs['fields'](_0x18f3d0['query'][_0x199c('0x3d')]));_0x2dc124['attributes']=_0x2dc124[_0x199c('0x3e')][_0x199c('0x3f')]?_0x2dc124[_0x199c('0x3e')]:_0x487cdc[_0x199c('0x3c')];_0x2dc124['order']=qs['sort'](_0x18f3d0[_0x199c('0x39')][_0x199c('0x42')]);_0x2dc124[_0x199c('0x46')]=qs['filters'](_[_0x199c('0x44')](_0x18f3d0[_0x199c('0x39')],_0x487cdc[_0x199c('0x43')]));if(_0x18f3d0['query'][_0x199c('0x47')]){_0x2dc124[_0x199c('0x46')]=_[_0x199c('0x48')](_0x2dc124[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x2dc124[_0x199c('0x3e')],function(_0xc85456){var _0x21ebf1={};_0x21ebf1[_0xc85456]={'$like':'%'+_0x18f3d0[_0x199c('0x39')]['filter']+'%'};return _0x21ebf1;})});}_0x2dc124['model']=db['User'];_0x2dc124['as']=_0x199c('0xea');_0x2dc124=_[_0x199c('0x48')]({},_0x2dc124,_0x18f3d0[_0x199c('0x4c')]);return _0x3038e7['getVoiceQueues']({'include':[_0x2dc124]});}})['then'](function(_0x175537){if(_0x175537){var _0x53dc26={},_0x44de96=[],_0x406367=0x0;for(var _0x5b6d36=0x0;_0x5b6d36<_0x175537['length'];_0x5b6d36+=0x1){for(var _0x142143=0x0,_0x4e6836;_0x142143<_0x175537[_0x5b6d36][_0x199c('0xea')][_0x199c('0x3f')];_0x142143+=0x1){_0x4e6836=_0x175537[_0x5b6d36][_0x199c('0xea')][_0x142143][_0x199c('0xa7')]({'plain':!![]});_0x53dc26[_0x4e6836['id']]=_0x4e6836;}}_0x53dc26=_[_0x199c('0xeb')](_0x53dc26);for(var _0x47bc52=qs[_0x199c('0x29')](_0x18f3d0['query']['offset']);_0x47bc52<_0x53dc26[_0x199c('0x3f')]&&_0x44de96['length']<qs['limit'](_0x18f3d0[_0x199c('0x39')][_0x199c('0x2a')]);_0x47bc52+=0x1){if(_0x53dc26[_0x47bc52]){_0x44de96[_0x199c('0x8f')](_0x53dc26[_0x47bc52]);}}return{'count':_0x53dc26[_0x199c('0x3f')],'rows':_0x44de96};}})[_0x199c('0x19')](respondWithResult(_0x4988ec,null))['catch'](handleError(_0x4988ec,null));};exports[_0x199c('0x96')]=function(_0x16da5f,_0x45d097){if(_0x16da5f[_0x199c('0x60')]['id']==_0x16da5f['params']['id']){return _0x45d097[_0x199c('0x25')](0x1f4)[_0x199c('0x33')]({'message':_0x199c('0xec')});}return db['User'][_0x199c('0x55')]({'where':{'id':_0x16da5f[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x45d097,null))[_0x199c('0x19')](removeEntity(_0x45d097,null))[_0x199c('0x23')](handleError(_0x45d097,null));};exports[_0x199c('0xed')]=function(_0x36c54d,_0x2419d2,_0x2e4ee3){return db['User'][_0x199c('0x55')]({'where':{'id':_0x36c54d[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x2419d2,null))[_0x199c('0x19')](function(_0xb718e1){if(_0xb718e1){return _0xb718e1[_0x199c('0xed')](_0x36c54d[_0x199c('0x57')][_0x199c('0x5a')],_[_0x199c('0xe5')](_0x36c54d['body'],[_0x199c('0x5a'),'id'])||{})[_0x199c('0xee')](function(){for(var _0x1e16b8=0x0;_0x1e16b8<_0x36c54d[_0x199c('0x57')][_0x199c('0x5a')]['length'];_0x1e16b8+=0x1){socket['emit'](_0x199c('0xef'),{'ChatInteractionId':Number(_0x36c54d['body'][_0x199c('0x5a')][_0x1e16b8]),'UserId':Number(_0x36c54d[_0x199c('0x52')]['id'])});}return _0x36c54d[_0x199c('0x57')][_0x199c('0x5a')];});}})[_0x199c('0x19')](respondWithResult(_0x2419d2,null))[_0x199c('0x23')](handleError(_0x2419d2,null));};exports['removeChatInteractions']=function(_0x45fe3e,_0x3bf6ec,_0x14304b){var _0x3393b8;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x45fe3e[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x3bf6ec,null))[_0x199c('0x19')](function(_0x43e5a6){if(_0x43e5a6){return _0x43e5a6[_0x199c('0xf0')](_0x45fe3e[_0x199c('0x39')][_0x199c('0x5a')])[_0x199c('0x19')](function(_0x47a153){if(_['isArray'](_0x45fe3e['query'][_0x199c('0x5a')])){for(var _0x297dc5=0x0;_0x297dc5<_0x45fe3e[_0x199c('0x39')][_0x199c('0x5a')][_0x199c('0x3f')];_0x297dc5+=0x1){socket[_0x199c('0xbd')](_0x199c('0xf1'),{'ChatInteractionId':Number(_0x45fe3e[_0x199c('0x39')]['ids'][_0x297dc5]),'UserId':Number(_0x45fe3e[_0x199c('0x52')]['id'])});}}else{socket[_0x199c('0xbd')](_0x199c('0xf1'),{'ChatInteractionId':Number(_0x45fe3e[_0x199c('0x39')]['ids']),'UserId':Number(_0x45fe3e[_0x199c('0x52')]['id'])});}});}})['then'](respondWithStatusCode(_0x3bf6ec,null))[_0x199c('0x23')](handleError(_0x3bf6ec,null));};exports['addMailInteractions']=function(_0x25d7e4,_0x234ea2,_0x235332){return db[_0x199c('0x4d')]['find']({'where':{'id':_0x25d7e4[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x234ea2,null))[_0x199c('0x19')](function(_0x47793e){if(_0x47793e){return _0x47793e['addMailInteractions'](_0x25d7e4[_0x199c('0x57')]['ids'],_['omit'](_0x25d7e4[_0x199c('0x57')],[_0x199c('0x5a'),'id'])||{})[_0x199c('0xee')](function(){for(var _0x5287ee=0x0;_0x5287ee<_0x25d7e4[_0x199c('0x57')][_0x199c('0x5a')]['length'];_0x5287ee+=0x1){socket[_0x199c('0xbd')](_0x199c('0xf2'),{'MailInteractionId':Number(_0x25d7e4['body'][_0x199c('0x5a')][_0x5287ee]),'UserId':Number(_0x25d7e4[_0x199c('0x52')]['id'])});}return _0x25d7e4[_0x199c('0x57')][_0x199c('0x5a')];});}})[_0x199c('0x19')](respondWithResult(_0x234ea2,null))[_0x199c('0x23')](handleError(_0x234ea2,null));};exports['removeMailInteractions']=function(_0x4ab6b8,_0xb0832d,_0x1e8ae5){var _0x1c9824;return db[_0x199c('0x4d')]['find']({'where':{'id':_0x4ab6b8[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0xb0832d,null))[_0x199c('0x19')](function(_0x4afed7){if(_0x4afed7){return _0x4afed7[_0x199c('0xf3')](_0x4ab6b8['query'][_0x199c('0x5a')])[_0x199c('0x19')](function(_0x25fc78){if(_['isArray'](_0x4ab6b8[_0x199c('0x39')][_0x199c('0x5a')])){for(var _0x25bb1b=0x0;_0x25bb1b<_0x4ab6b8[_0x199c('0x39')][_0x199c('0x5a')][_0x199c('0x3f')];_0x25bb1b+=0x1){socket[_0x199c('0xbd')](_0x199c('0xf4'),{'MailInteractionId':Number(_0x4ab6b8[_0x199c('0x39')][_0x199c('0x5a')][_0x25bb1b]),'UserId':Number(_0x4ab6b8['params']['id'])});}}else{socket[_0x199c('0xbd')]('user_has_mail_interactions:remove',{'MailInteractionId':Number(_0x4ab6b8[_0x199c('0x39')][_0x199c('0x5a')]),'UserId':Number(_0x4ab6b8[_0x199c('0x52')]['id'])});}});}})[_0x199c('0x19')](respondWithStatusCode(_0xb0832d,null))[_0x199c('0x23')](handleError(_0xb0832d,null));};exports[_0x199c('0xf5')]=function(_0x1b8bea,_0x34380b,_0x588d77){return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x1b8bea['params']['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x34380b,null))['then'](function(_0x1d9909){if(_0x1d9909){return _0x1d9909['addFaxInteractions'](_0x1b8bea['body'][_0x199c('0x5a')],_['omit'](_0x1b8bea['body'],['ids','id'])||{})[_0x199c('0xee')](function(){for(var _0x2e0b18=0x0;_0x2e0b18<_0x1b8bea['body']['ids'][_0x199c('0x3f')];_0x2e0b18+=0x1){socket[_0x199c('0xbd')](_0x199c('0xf6'),{'FaxInteractionId':Number(_0x1b8bea[_0x199c('0x57')]['ids'][_0x2e0b18]),'UserId':Number(_0x1b8bea[_0x199c('0x52')]['id'])});}return _0x1b8bea[_0x199c('0x57')][_0x199c('0x5a')];});}})[_0x199c('0x19')](respondWithResult(_0x34380b,null))[_0x199c('0x23')](handleError(_0x34380b,null));};exports['removeFaxInteractions']=function(_0xa0bd30,_0x5a1bda,_0xbf5ab9){var _0x3b8747;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0xa0bd30[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x5a1bda,null))['then'](function(_0x4a9068){if(_0x4a9068){return _0x4a9068['removeFaxInteractions'](_0xa0bd30[_0x199c('0x39')][_0x199c('0x5a')])['then'](function(_0x60f4de){if(_[_0x199c('0xf7')](_0xa0bd30[_0x199c('0x39')][_0x199c('0x5a')])){for(var _0x476201=0x0;_0x476201<_0xa0bd30['query'][_0x199c('0x5a')][_0x199c('0x3f')];_0x476201+=0x1){socket[_0x199c('0xbd')](_0x199c('0xf8'),{'FaxInteractionId':Number(_0xa0bd30[_0x199c('0x39')][_0x199c('0x5a')][_0x476201]),'UserId':Number(_0xa0bd30[_0x199c('0x52')]['id'])});}}else{socket[_0x199c('0xbd')](_0x199c('0xf8'),{'FaxInteractionId':Number(_0xa0bd30[_0x199c('0x39')][_0x199c('0x5a')]),'UserId':Number(_0xa0bd30[_0x199c('0x52')]['id'])});}});}})['then'](respondWithStatusCode(_0x5a1bda,null))['catch'](handleError(_0x5a1bda,null));};exports[_0x199c('0xf9')]=function(_0x419c88,_0x23f159,_0x3f3d11){return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x419c88['params']['id']}})['then'](handleEntityNotFound(_0x23f159,null))['then'](function(_0x986bf6){if(_0x986bf6){return _0x986bf6[_0x199c('0xf9')](_0x419c88[_0x199c('0x57')][_0x199c('0x5a')],_['omit'](_0x419c88['body'],[_0x199c('0x5a'),'id'])||{})[_0x199c('0xee')](function(){for(var _0x2a0b2a=0x0;_0x2a0b2a<_0x419c88[_0x199c('0x57')][_0x199c('0x5a')][_0x199c('0x3f')];_0x2a0b2a+=0x1){socket[_0x199c('0xbd')]('user_has_sms_interactions:save',{'SmsInteractionId':Number(_0x419c88[_0x199c('0x57')][_0x199c('0x5a')][_0x2a0b2a]),'UserId':Number(_0x419c88[_0x199c('0x52')]['id'])});}return _0x419c88[_0x199c('0x57')]['ids'];});}})['then'](respondWithResult(_0x23f159,null))[_0x199c('0x23')](handleError(_0x23f159,null));};exports[_0x199c('0xfa')]=function(_0x2f35f3,_0x10016f,_0x1ff8f0){var _0x17ba1a;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x2f35f3[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x10016f,null))['then'](function(_0x30180a){if(_0x30180a){return _0x30180a[_0x199c('0xfa')](_0x2f35f3['query'][_0x199c('0x5a')])['then'](function(_0x3a4d70){if(_[_0x199c('0xf7')](_0x2f35f3['query'][_0x199c('0x5a')])){for(var _0x1da4ac=0x0;_0x1da4ac<_0x2f35f3['query']['ids'][_0x199c('0x3f')];_0x1da4ac+=0x1){socket[_0x199c('0xbd')](_0x199c('0xfb'),{'SmsInteractionId':Number(_0x2f35f3['query'][_0x199c('0x5a')][_0x1da4ac]),'UserId':Number(_0x2f35f3[_0x199c('0x52')]['id'])});}}else{socket[_0x199c('0xbd')](_0x199c('0xfb'),{'SmsInteractionId':Number(_0x2f35f3[_0x199c('0x39')][_0x199c('0x5a')]),'UserId':Number(_0x2f35f3['params']['id'])});}});}})['then'](respondWithStatusCode(_0x10016f,null))[_0x199c('0x23')](handleError(_0x10016f,null));};exports[_0x199c('0xfc')]=function(_0x41fb4f,_0x464f55,_0x5b9b22){return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x41fb4f['params']['id']}})['then'](handleEntityNotFound(_0x464f55,null))[_0x199c('0x19')](function(_0x27ca3e){if(_0x27ca3e){return _0x27ca3e[_0x199c('0xfc')](_0x41fb4f['body'][_0x199c('0x5a')],_[_0x199c('0xe5')](_0x41fb4f[_0x199c('0x57')],['ids','id'])||{})[_0x199c('0xee')](function(){for(var _0xc1c3d3=0x0;_0xc1c3d3<_0x41fb4f[_0x199c('0x57')]['ids'][_0x199c('0x3f')];_0xc1c3d3+=0x1){socket[_0x199c('0xbd')](_0x199c('0xfd'),{'OpenchannelInteractionId':Number(_0x41fb4f[_0x199c('0x57')][_0x199c('0x5a')][_0xc1c3d3]),'UserId':Number(_0x41fb4f[_0x199c('0x52')]['id'])});}return _0x41fb4f[_0x199c('0x57')][_0x199c('0x5a')];});}})['then'](respondWithResult(_0x464f55,null))['catch'](handleError(_0x464f55,null));};exports['removeOpenchannelInteractions']=function(_0x5537a6,_0x4c984b,_0x3f648e){var _0x427713;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x5537a6[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x4c984b,null))[_0x199c('0x19')](function(_0x5000e5){if(_0x5000e5){return _0x5000e5[_0x199c('0xfe')](_0x5537a6[_0x199c('0x39')][_0x199c('0x5a')])[_0x199c('0x19')](function(_0x24e565){if(_[_0x199c('0xf7')](_0x5537a6['query'][_0x199c('0x5a')])){for(var _0x2ca95f=0x0;_0x2ca95f<_0x5537a6[_0x199c('0x39')]['ids'][_0x199c('0x3f')];_0x2ca95f+=0x1){socket['emit'](_0x199c('0xff'),{'OpenchannelInteractionId':Number(_0x5537a6[_0x199c('0x39')][_0x199c('0x5a')][_0x2ca95f]),'UserId':Number(_0x5537a6[_0x199c('0x52')]['id'])});}}else{socket[_0x199c('0xbd')](_0x199c('0xff'),{'OpenchannelInteractionId':Number(_0x5537a6['query'][_0x199c('0x5a')]),'UserId':Number(_0x5537a6[_0x199c('0x52')]['id'])});}});}})[_0x199c('0x19')](respondWithStatusCode(_0x4c984b,null))[_0x199c('0x23')](handleError(_0x4c984b,null));};exports[_0x199c('0x100')]=function(_0x5474c7,_0x5bb403,_0x14c596){var _0x3d51bf={};var _0x494bdc={};var _0x8f22cd;var _0x182117;return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x5474c7[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x5bb403,null))[_0x199c('0x19')](function(_0x2f6b22){if(_0x2f6b22){_0x8f22cd=_0x2f6b22;_0x494bdc[_0x199c('0x3c')]=_[_0x199c('0x37')](db['VoicePrefix'][_0x199c('0x35')]);_0x494bdc[_0x199c('0x39')]=_[_0x199c('0x37')](_0x5474c7['query']);_0x494bdc[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x494bdc[_0x199c('0x3c')],_0x494bdc[_0x199c('0x39')]);_0x3d51bf[_0x199c('0x3e')]=_['intersection'](_0x494bdc[_0x199c('0x3c')],qs[_0x199c('0x3d')](_0x5474c7[_0x199c('0x39')]['fields']));_0x3d51bf['attributes']=_0x3d51bf[_0x199c('0x3e')][_0x199c('0x3f')]?_0x3d51bf[_0x199c('0x3e')]:_0x494bdc[_0x199c('0x3c')];_0x3d51bf[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x5474c7[_0x199c('0x39')][_0x199c('0x42')]);_0x3d51bf[_0x199c('0x46')]=qs['filters'](_[_0x199c('0x44')](_0x5474c7[_0x199c('0x39')],_0x494bdc[_0x199c('0x43')]));if(_0x5474c7['query']['filter']){_0x3d51bf[_0x199c('0x46')]=_[_0x199c('0x48')](_0x3d51bf[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x3d51bf[_0x199c('0x3e')],function(_0x1806ba){var _0xc38315={};_0xc38315[_0x1806ba]={'$like':'%'+_0x5474c7[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0xc38315;})});}_0x3d51bf=_[_0x199c('0x48')]({},_0x3d51bf,_0x5474c7['options']);return _0x8f22cd['getVoicePrefixes'](_0x3d51bf);}})[_0x199c('0x19')](function(_0x5946ac){if(_0x5946ac){_0x182117=_0x5946ac['length'];if(!_0x5474c7[_0x199c('0x39')][_0x199c('0x40')](_0x199c('0xa3'))){_0x3d51bf[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x5474c7[_0x199c('0x39')][_0x199c('0x2a')]);_0x3d51bf[_0x199c('0x29')]=qs['offset'](_0x5474c7[_0x199c('0x39')][_0x199c('0x29')]);}return _0x8f22cd['getVoicePrefixes'](_0x3d51bf);}})[_0x199c('0x19')](function(_0xc87fd6){if(_0xc87fd6){return _0xc87fd6?{'count':_0x182117,'rows':_0xc87fd6}:null;}})['then'](respondWithResult(_0x5bb403,null))[_0x199c('0x23')](handleError(_0x5bb403,null));};exports['getFaxAccounts']=function(_0x14d54e,_0x17cc18,_0x4dbc18){var _0x5749d2={};var _0x1a8ab8={};var _0x5b9cce;var _0x3a2ddb;return db['User'][_0x199c('0xa1')]({'where':{'id':_0x14d54e[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x17cc18,null))[_0x199c('0x19')](function(_0x5a7ad9){if(_0x5a7ad9){_0x5b9cce=_0x5a7ad9;_0x1a8ab8[_0x199c('0x3c')]=_[_0x199c('0x37')](db['FaxAccount']['rawAttributes']);_0x1a8ab8[_0x199c('0x39')]=_['keys'](_0x14d54e[_0x199c('0x39')]);_0x1a8ab8[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x1a8ab8[_0x199c('0x3c')],_0x1a8ab8[_0x199c('0x39')]);_0x5749d2['attributes']=_['intersection'](_0x1a8ab8[_0x199c('0x3c')],qs[_0x199c('0x3d')](_0x14d54e[_0x199c('0x39')][_0x199c('0x3d')]));_0x5749d2[_0x199c('0x3e')]=_0x5749d2[_0x199c('0x3e')]['length']?_0x5749d2['attributes']:_0x1a8ab8[_0x199c('0x3c')];_0x5749d2[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x14d54e[_0x199c('0x39')][_0x199c('0x42')]);_0x5749d2[_0x199c('0x46')]=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x14d54e['query'],_0x1a8ab8['filters']));if(_0x14d54e[_0x199c('0x39')][_0x199c('0x47')]){_0x5749d2['where']=_[_0x199c('0x48')](_0x5749d2[_0x199c('0x46')],{'$or':_['map'](_0x5749d2[_0x199c('0x3e')],function(_0x280cdd){var _0x237174={};_0x237174[_0x280cdd]={'$like':'%'+_0x14d54e[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0x237174;})});}_0x5749d2=_[_0x199c('0x48')]({},_0x5749d2,_0x14d54e[_0x199c('0x4c')]);return _0x5b9cce['getFaxAccounts'](_0x5749d2);}})[_0x199c('0x19')](function(_0x431ffe){if(_0x431ffe){_0x3a2ddb=_0x431ffe[_0x199c('0x3f')];if(!_0x14d54e[_0x199c('0x39')][_0x199c('0x40')](_0x199c('0xa3'))){_0x5749d2[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x14d54e['query'][_0x199c('0x2a')]);_0x5749d2[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x14d54e[_0x199c('0x39')][_0x199c('0x29')]);}return _0x5b9cce[_0x199c('0x101')](_0x5749d2);}})[_0x199c('0x19')](function(_0x1ceca0){if(_0x1ceca0){return _0x1ceca0?{'count':_0x3a2ddb,'rows':_0x1ceca0}:null;}})[_0x199c('0x19')](respondWithResult(_0x17cc18,null))[_0x199c('0x23')](handleError(_0x17cc18,null));};exports[_0x199c('0x102')]=function(_0x19ade6,_0x142201,_0x108092){return db['User'][_0x199c('0x55')]({'where':{'id':_0x19ade6[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x142201,null))[_0x199c('0x19')](function(_0x267237){if(_0x267237){return _0x267237[_0x199c('0x102')](_0x19ade6[_0x199c('0x57')][_0x199c('0x5a')],_[_0x199c('0xe5')](_0x19ade6[_0x199c('0x57')],[_0x199c('0x5a'),'id'])||{});}})['then'](respondWithResult(_0x142201,null))[_0x199c('0x23')](handleError(_0x142201,null));};exports[_0x199c('0x103')]=function(_0x19fa88,_0x1277a0,_0x2be096){var _0x7c9902;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x19fa88[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x1277a0,null))[_0x199c('0x19')](function(_0x19664a){if(_0x19664a){return _0x19664a[_0x199c('0x103')](_0x19fa88[_0x199c('0x39')][_0x199c('0x5a')]);}})['then'](respondWithStatusCode(_0x1277a0,null))['catch'](handleError(_0x1277a0,null));};exports[_0x199c('0x104')]=function(_0x505a59,_0x498575,_0x298523){var _0x30d568={};var _0x438c27={};var _0x5630ee;var _0x13615d;return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x505a59['params']['id']}})['then'](handleEntityNotFound(_0x498575,null))['then'](function(_0x5862cd){if(_0x5862cd){_0x5630ee=_0x5862cd;_0x438c27[_0x199c('0x3c')]=_[_0x199c('0x37')](db[_0x199c('0x105')][_0x199c('0x35')]);_0x438c27[_0x199c('0x39')]=_[_0x199c('0x37')](_0x505a59['query']);_0x438c27[_0x199c('0x43')]=_['intersection'](_0x438c27['model'],_0x438c27[_0x199c('0x39')]);_0x30d568['attributes']=_['intersection'](_0x438c27['model'],qs[_0x199c('0x3d')](_0x505a59[_0x199c('0x39')][_0x199c('0x3d')]));_0x30d568[_0x199c('0x3e')]=_0x30d568[_0x199c('0x3e')][_0x199c('0x3f')]?_0x30d568[_0x199c('0x3e')]:_0x438c27[_0x199c('0x3c')];_0x30d568[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x505a59[_0x199c('0x39')][_0x199c('0x42')]);_0x30d568['where']=qs[_0x199c('0x43')](_['pick'](_0x505a59[_0x199c('0x39')],_0x438c27['filters']));if(_0x505a59['query'][_0x199c('0x47')]){_0x30d568[_0x199c('0x46')]=_[_0x199c('0x48')](_0x30d568[_0x199c('0x46')],{'$or':_['map'](_0x30d568[_0x199c('0x3e')],function(_0x543478){var _0x298b54={};_0x298b54[_0x543478]={'$like':'%'+_0x505a59[_0x199c('0x39')]['filter']+'%'};return _0x298b54;})});}_0x30d568=_[_0x199c('0x48')]({},_0x30d568,_0x505a59[_0x199c('0x4c')]);return _0x5630ee[_0x199c('0x104')](_0x30d568);}})['then'](function(_0x3eb835){if(_0x3eb835){_0x13615d=_0x3eb835['length'];if(!_0x505a59['query'][_0x199c('0x40')]('nolimit')){_0x30d568[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x505a59[_0x199c('0x39')][_0x199c('0x2a')]);_0x30d568[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x505a59['query'][_0x199c('0x29')]);}return _0x5630ee[_0x199c('0x104')](_0x30d568);}})[_0x199c('0x19')](function(_0x3d94d3){if(_0x3d94d3){return _0x3d94d3?{'count':_0x13615d,'rows':_0x3d94d3}:null;}})['then'](respondWithResult(_0x498575,null))[_0x199c('0x23')](handleError(_0x498575,null));};exports[_0x199c('0x106')]=function(_0x28f9fe,_0x57d70e,_0x19812d){return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x28f9fe[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x57d70e,null))[_0x199c('0x19')](function(_0x24fd8a){if(_0x24fd8a){return _0x24fd8a[_0x199c('0x106')](_0x28f9fe[_0x199c('0x57')][_0x199c('0x5a')],_[_0x199c('0xe5')](_0x28f9fe[_0x199c('0x57')],[_0x199c('0x5a'),'id'])||{});}})[_0x199c('0x19')](respondWithResult(_0x57d70e,null))[_0x199c('0x23')](handleError(_0x57d70e,null));};exports[_0x199c('0x107')]=function(_0x2faec6,_0x56e715,_0x356cf1){var _0x147d99;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x2faec6['params']['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x56e715,null))[_0x199c('0x19')](function(_0x42b6be){if(_0x42b6be){return _0x42b6be[_0x199c('0x107')](_0x2faec6[_0x199c('0x39')][_0x199c('0x5a')]);}})['then'](respondWithStatusCode(_0x56e715,null))[_0x199c('0x23')](handleError(_0x56e715,null));};exports[_0x199c('0x108')]=function(_0x298c5,_0x319d92,_0x3f7c7d){var _0x3030ab={};var _0x5d61f4={};var _0x48b002;var _0x277681;return db[_0x199c('0x4d')]['findOne']({'where':{'id':_0x298c5[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x319d92,null))[_0x199c('0x19')](function(_0x120707){if(_0x120707){_0x48b002=_0x120707;_0x5d61f4[_0x199c('0x3c')]=_['keys'](db[_0x199c('0x109')][_0x199c('0x35')]);_0x5d61f4['query']=_[_0x199c('0x37')](_0x298c5[_0x199c('0x39')]);_0x5d61f4[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x5d61f4[_0x199c('0x3c')],_0x5d61f4['query']);_0x3030ab[_0x199c('0x3e')]=_[_0x199c('0x3b')](_0x5d61f4[_0x199c('0x3c')],qs[_0x199c('0x3d')](_0x298c5[_0x199c('0x39')][_0x199c('0x3d')]));_0x3030ab[_0x199c('0x3e')]=_0x3030ab[_0x199c('0x3e')][_0x199c('0x3f')]?_0x3030ab['attributes']:_0x5d61f4[_0x199c('0x3c')];_0x3030ab[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x298c5[_0x199c('0x39')]['sort']);_0x3030ab[_0x199c('0x46')]=qs[_0x199c('0x43')](_['pick'](_0x298c5['query'],_0x5d61f4[_0x199c('0x43')]));if(_0x298c5[_0x199c('0x39')][_0x199c('0x47')]){_0x3030ab[_0x199c('0x46')]=_[_0x199c('0x48')](_0x3030ab[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x3030ab[_0x199c('0x3e')],function(_0x28c96a){var _0x323c52={};_0x323c52[_0x28c96a]={'$like':'%'+_0x298c5['query']['filter']+'%'};return _0x323c52;})});}_0x3030ab=_['merge']({},_0x3030ab,_0x298c5[_0x199c('0x4c')]);return _0x48b002[_0x199c('0x108')](_0x3030ab);}})['then'](function(_0x275ac7){if(_0x275ac7){_0x277681=_0x275ac7[_0x199c('0x3f')];if(!_0x298c5[_0x199c('0x39')][_0x199c('0x40')](_0x199c('0xa3'))){_0x3030ab[_0x199c('0x2a')]=qs['limit'](_0x298c5['query']['limit']);_0x3030ab['offset']=qs['offset'](_0x298c5['query'][_0x199c('0x29')]);}return _0x48b002['getOpenchannelAccounts'](_0x3030ab);}})[_0x199c('0x19')](function(_0xa6b33e){if(_0xa6b33e){return _0xa6b33e?{'count':_0x277681,'rows':_0xa6b33e}:null;}})[_0x199c('0x19')](respondWithResult(_0x319d92,null))[_0x199c('0x23')](handleError(_0x319d92,null));};exports[_0x199c('0x10a')]=function(_0x2c17b0,_0xb51363,_0x18cdcf){return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x2c17b0[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0xb51363,null))[_0x199c('0x19')](function(_0x5c39e0){if(_0x5c39e0){return _0x5c39e0[_0x199c('0x10a')](_0x2c17b0[_0x199c('0x57')][_0x199c('0x5a')],_[_0x199c('0xe5')](_0x2c17b0[_0x199c('0x57')],['ids','id'])||{});}})['then'](respondWithResult(_0xb51363,null))[_0x199c('0x23')](handleError(_0xb51363,null));};exports[_0x199c('0x10b')]=function(_0x9bab6,_0x4dead1,_0x3e8b71){var _0x482810;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x9bab6[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x4dead1,null))[_0x199c('0x19')](function(_0x14a20c){if(_0x14a20c){return _0x14a20c['removeOpenchannelAccounts'](_0x9bab6[_0x199c('0x39')][_0x199c('0x5a')]);}})[_0x199c('0x19')](respondWithStatusCode(_0x4dead1,null))['catch'](handleError(_0x4dead1,null));};exports['getSmsAccounts']=function(_0x1e37b6,_0x40d52b,_0x41956e){var _0x11d31c={};var _0x34ae91={};var _0x46ae94;var _0x2cd6a3;return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x1e37b6[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x40d52b,null))['then'](function(_0x1287da){if(_0x1287da){_0x46ae94=_0x1287da;_0x34ae91[_0x199c('0x3c')]=_[_0x199c('0x37')](db[_0x199c('0x10c')][_0x199c('0x35')]);_0x34ae91[_0x199c('0x39')]=_[_0x199c('0x37')](_0x1e37b6[_0x199c('0x39')]);_0x34ae91[_0x199c('0x43')]=_[_0x199c('0x3b')](_0x34ae91[_0x199c('0x3c')],_0x34ae91[_0x199c('0x39')]);_0x11d31c[_0x199c('0x3e')]=_[_0x199c('0x3b')](_0x34ae91['model'],qs[_0x199c('0x3d')](_0x1e37b6[_0x199c('0x39')][_0x199c('0x3d')]));_0x11d31c['attributes']=_0x11d31c['attributes'][_0x199c('0x3f')]?_0x11d31c['attributes']:_0x34ae91[_0x199c('0x3c')];_0x11d31c['order']=qs['sort'](_0x1e37b6[_0x199c('0x39')][_0x199c('0x42')]);_0x11d31c[_0x199c('0x46')]=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x1e37b6[_0x199c('0x39')],_0x34ae91[_0x199c('0x43')]));if(_0x1e37b6['query'][_0x199c('0x47')]){_0x11d31c[_0x199c('0x46')]=_[_0x199c('0x48')](_0x11d31c[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x11d31c[_0x199c('0x3e')],function(_0x5cccb5){var _0x564ef1={};_0x564ef1[_0x5cccb5]={'$like':'%'+_0x1e37b6[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0x564ef1;})});}_0x11d31c=_[_0x199c('0x48')]({},_0x11d31c,_0x1e37b6[_0x199c('0x4c')]);return _0x46ae94[_0x199c('0x10d')](_0x11d31c);}})['then'](function(_0xe15a8c){if(_0xe15a8c){_0x2cd6a3=_0xe15a8c['length'];if(!_0x1e37b6[_0x199c('0x39')]['hasOwnProperty'](_0x199c('0xa3'))){_0x11d31c[_0x199c('0x2a')]=qs[_0x199c('0x2a')](_0x1e37b6['query'][_0x199c('0x2a')]);_0x11d31c[_0x199c('0x29')]=qs['offset'](_0x1e37b6[_0x199c('0x39')][_0x199c('0x29')]);}return _0x46ae94[_0x199c('0x10d')](_0x11d31c);}})[_0x199c('0x19')](function(_0x483e4c){if(_0x483e4c){return _0x483e4c?{'count':_0x2cd6a3,'rows':_0x483e4c}:null;}})[_0x199c('0x19')](respondWithResult(_0x40d52b,null))[_0x199c('0x23')](handleError(_0x40d52b,null));};exports[_0x199c('0x10e')]=function(_0x204c47,_0x29aaf5,_0x4b6657){return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x204c47[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x29aaf5,null))[_0x199c('0x19')](function(_0xc8d2f5){if(_0xc8d2f5){return _0xc8d2f5[_0x199c('0x10e')](_0x204c47['body'][_0x199c('0x5a')],_[_0x199c('0xe5')](_0x204c47[_0x199c('0x57')],['ids','id'])||{});}})[_0x199c('0x19')](respondWithResult(_0x29aaf5,null))[_0x199c('0x23')](handleError(_0x29aaf5,null));};exports[_0x199c('0x10f')]=function(_0x57be69,_0x31e96b,_0x3320cb){var _0x3827b2;return db['User'][_0x199c('0x55')]({'where':{'id':_0x57be69[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x31e96b,null))[_0x199c('0x19')](function(_0x351ee9){if(_0x351ee9){return _0x351ee9[_0x199c('0x10f')](_0x57be69[_0x199c('0x39')][_0x199c('0x5a')]);}})[_0x199c('0x19')](respondWithStatusCode(_0x31e96b,null))[_0x199c('0x23')](handleError(_0x31e96b,null));};exports[_0x199c('0x110')]=function(_0x14985b,_0x11a8bf,_0x437df3){var _0x146a12={};var _0x4bb4eb={};var _0xdc682b;var _0x26cf19;return db[_0x199c('0x4d')][_0x199c('0xa1')]({'where':{'id':_0x14985b['params']['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x11a8bf,null))[_0x199c('0x19')](function(_0x385d58){if(_0x385d58){_0xdc682b=_0x385d58;_0x4bb4eb[_0x199c('0x3c')]=_[_0x199c('0x37')](db['ChatWebsite'][_0x199c('0x35')]);_0x4bb4eb[_0x199c('0x39')]=_[_0x199c('0x37')](_0x14985b['query']);_0x4bb4eb['filters']=_[_0x199c('0x3b')](_0x4bb4eb[_0x199c('0x3c')],_0x4bb4eb['query']);_0x146a12['attributes']=_[_0x199c('0x3b')](_0x4bb4eb[_0x199c('0x3c')],qs[_0x199c('0x3d')](_0x14985b[_0x199c('0x39')]['fields']));_0x146a12[_0x199c('0x3e')]=_0x146a12[_0x199c('0x3e')][_0x199c('0x3f')]?_0x146a12[_0x199c('0x3e')]:_0x4bb4eb[_0x199c('0x3c')];_0x146a12[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x14985b[_0x199c('0x39')][_0x199c('0x42')]);_0x146a12[_0x199c('0x46')]=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x14985b[_0x199c('0x39')],_0x4bb4eb[_0x199c('0x43')]));if(_0x14985b['query']['filter']){_0x146a12[_0x199c('0x46')]=_[_0x199c('0x48')](_0x146a12[_0x199c('0x46')],{'$or':_[_0x199c('0xa6')](_0x146a12[_0x199c('0x3e')],function(_0x5b5b1f){var _0x146cd0={};_0x146cd0[_0x5b5b1f]={'$like':'%'+_0x14985b[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0x146cd0;})});}_0x146a12=_[_0x199c('0x48')]({},_0x146a12,_0x14985b[_0x199c('0x4c')]);return _0xdc682b['getChatWebsites'](_0x146a12);}})[_0x199c('0x19')](function(_0x52e328){if(_0x52e328){_0x26cf19=_0x52e328[_0x199c('0x3f')];if(!_0x14985b[_0x199c('0x39')]['hasOwnProperty'](_0x199c('0xa3'))){_0x146a12[_0x199c('0x2a')]=qs['limit'](_0x14985b[_0x199c('0x39')]['limit']);_0x146a12[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x14985b['query']['offset']);}return _0xdc682b['getChatWebsites'](_0x146a12);}})[_0x199c('0x19')](function(_0x2c59f6){if(_0x2c59f6){return _0x2c59f6?{'count':_0x26cf19,'rows':_0x2c59f6}:null;}})[_0x199c('0x19')](respondWithResult(_0x11a8bf,null))[_0x199c('0x23')](handleError(_0x11a8bf,null));};exports[_0x199c('0x111')]=function(_0x471264,_0x2d6f21,_0x464cbd){return db[_0x199c('0x4d')]['find']({'where':{'id':_0x471264[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x2d6f21,null))['then'](function(_0x680094){if(_0x680094){return _0x680094[_0x199c('0x111')](_0x471264['body'][_0x199c('0x5a')],_['omit'](_0x471264[_0x199c('0x57')],['ids','id'])||{});}})[_0x199c('0x19')](respondWithResult(_0x2d6f21,null))[_0x199c('0x23')](handleError(_0x2d6f21,null));};exports['removeChatWebsites']=function(_0x219d78,_0x1bea94,_0x47363b){var _0x3532a2;return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0x219d78['params']['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x1bea94,null))['then'](function(_0x530b1a){if(_0x530b1a){return _0x530b1a[_0x199c('0x112')](_0x219d78[_0x199c('0x39')][_0x199c('0x5a')]);}})[_0x199c('0x19')](respondWithStatusCode(_0x1bea94,null))[_0x199c('0x23')](handleError(_0x1bea94,null));};exports['getSquareProjects']=function(_0x48e9b1,_0x3b0afb,_0x586547){var _0x21fd7d={};var _0x54b358={};var _0x511996;var _0x549e9c;return db[_0x199c('0x4d')]['findOne']({'where':{'id':_0x48e9b1['params']['id']}})['then'](handleEntityNotFound(_0x3b0afb,null))['then'](function(_0x16890c){if(_0x16890c){_0x511996=_0x16890c;_0x54b358['model']=_[_0x199c('0x37')](db['SquareProject'][_0x199c('0x35')]);_0x54b358[_0x199c('0x39')]=_['keys'](_0x48e9b1[_0x199c('0x39')]);_0x54b358[_0x199c('0x43')]=_['intersection'](_0x54b358['model'],_0x54b358[_0x199c('0x39')]);_0x21fd7d['attributes']=_[_0x199c('0x3b')](_0x54b358['model'],qs[_0x199c('0x3d')](_0x48e9b1[_0x199c('0x39')][_0x199c('0x3d')]));_0x21fd7d[_0x199c('0x3e')]=_0x21fd7d['attributes'][_0x199c('0x3f')]?_0x21fd7d[_0x199c('0x3e')]:_0x54b358[_0x199c('0x3c')];_0x21fd7d[_0x199c('0x41')]=qs[_0x199c('0x42')](_0x48e9b1[_0x199c('0x39')]['sort']);_0x21fd7d[_0x199c('0x46')]=qs[_0x199c('0x43')](_[_0x199c('0x44')](_0x48e9b1['query'],_0x54b358[_0x199c('0x43')]));if(_0x48e9b1[_0x199c('0x39')][_0x199c('0x47')]){_0x21fd7d[_0x199c('0x46')]=_[_0x199c('0x48')](_0x21fd7d['where'],{'$or':_['map'](_0x21fd7d[_0x199c('0x3e')],function(_0x135076){var _0x3365a5={};_0x3365a5[_0x135076]={'$like':'%'+_0x48e9b1[_0x199c('0x39')][_0x199c('0x47')]+'%'};return _0x3365a5;})});}_0x21fd7d=_[_0x199c('0x48')]({},_0x21fd7d,_0x48e9b1['options']);return _0x511996[_0x199c('0x113')](_0x21fd7d);}})[_0x199c('0x19')](function(_0x43b7c0){if(_0x43b7c0){_0x549e9c=_0x43b7c0['length'];if(!_0x48e9b1['query'][_0x199c('0x40')]('nolimit')){_0x21fd7d[_0x199c('0x2a')]=qs['limit'](_0x48e9b1[_0x199c('0x39')]['limit']);_0x21fd7d[_0x199c('0x29')]=qs[_0x199c('0x29')](_0x48e9b1[_0x199c('0x39')]['offset']);}return _0x511996[_0x199c('0x113')](_0x21fd7d);}})[_0x199c('0x19')](function(_0x568145){if(_0x568145){return _0x568145?{'count':_0x549e9c,'rows':_0x568145}:null;}})['then'](respondWithResult(_0x3b0afb,null))[_0x199c('0x23')](handleError(_0x3b0afb,null));};exports['addSquareProjects']=function(_0xe2f3fc,_0x158a5b,_0x5dbe4c){return db[_0x199c('0x4d')][_0x199c('0x55')]({'where':{'id':_0xe2f3fc[_0x199c('0x52')]['id']}})['then'](handleEntityNotFound(_0x158a5b,null))[_0x199c('0x19')](function(_0x22bb70){if(_0x22bb70){return _0x22bb70['addSquareProjects'](_0xe2f3fc['body']['ids'],_[_0x199c('0xe5')](_0xe2f3fc[_0x199c('0x57')],['ids','id'])||{});}})[_0x199c('0x19')](respondWithResult(_0x158a5b,null))[_0x199c('0x23')](handleError(_0x158a5b,null));};exports[_0x199c('0x114')]=function(_0x4203f7,_0x36b383,_0x4335c6){var _0x25cd6b;return db['User']['find']({'where':{'id':_0x4203f7[_0x199c('0x52')]['id']}})[_0x199c('0x19')](handleEntityNotFound(_0x36b383,null))[_0x199c('0x19')](function(_0x14a1c6){if(_0x14a1c6){return _0x14a1c6['removeSquareProjects'](_0x4203f7['query'][_0x199c('0x5a')]);}})[_0x199c('0x19')](respondWithStatusCode(_0x36b383,null))[_0x199c('0x23')](handleError(_0x36b383,null));};
\ No newline at end of file
index dc60535..2921653 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ef3=['setMaxListeners','save','update','emit','hook','exports','events','../../mysqldb','User'];(function(_0x23929d,_0x2d8984){var _0x52d817=function(_0x45ef82){while(--_0x45ef82){_0x23929d['push'](_0x23929d['shift']());}};_0x52d817(++_0x2d8984);}(_0x2ef3,0xba));var _0x32ef=function(_0x33c927,_0x52c3a1){_0x33c927=_0x33c927-0x0;var _0x5e0514=_0x2ef3[_0x33c927];return _0x5e0514;};'use strict';var EventEmitter=require(_0x32ef('0x0'));var User=require(_0x32ef('0x1'))['db'][_0x32ef('0x2')];var UserEvents=new EventEmitter();UserEvents[_0x32ef('0x3')](0x0);var events={'afterCreate':_0x32ef('0x4'),'afterUpdate':_0x32ef('0x5'),'afterDestroy':'remove'};function emitEvent(_0x38f865){return function(_0x38b7f3,_0x524ab6,_0x402857){UserEvents[_0x32ef('0x6')](_0x38f865+':'+_0x38b7f3['id'],_0x38b7f3);UserEvents['emit'](_0x38f865,_0x38b7f3);_0x402857(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];User[_0x32ef('0x7')](e,emitEvent(event));}}module[_0x32ef('0x8')]=UserEvents;
\ No newline at end of file
+var _0x2ef3=['setMaxListeners','save','update','emit','hook','exports','events','../../mysqldb','User'];(function(_0x5473da,_0x49396c){var _0x3b0928=function(_0x556ba7){while(--_0x556ba7){_0x5473da['push'](_0x5473da['shift']());}};_0x3b0928(++_0x49396c);}(_0x2ef3,0xba));var _0x32ef=function(_0x18dd45,_0x55e402){_0x18dd45=_0x18dd45-0x0;var _0x4f99ab=_0x2ef3[_0x18dd45];return _0x4f99ab;};'use strict';var EventEmitter=require(_0x32ef('0x0'));var User=require(_0x32ef('0x1'))['db'][_0x32ef('0x2')];var UserEvents=new EventEmitter();UserEvents[_0x32ef('0x3')](0x0);var events={'afterCreate':_0x32ef('0x4'),'afterUpdate':_0x32ef('0x5'),'afterDestroy':'remove'};function emitEvent(_0x38f865){return function(_0x38b7f3,_0x524ab6,_0x402857){UserEvents[_0x32ef('0x6')](_0x38f865+':'+_0x38b7f3['id'],_0x38b7f3);UserEvents['emit'](_0x38f865,_0x38b7f3);_0x402857(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];User[_0x32ef('0x7')](e,emitEvent(event));}}module[_0x32ef('0x8')]=UserEvents;
\ No newline at end of file
index 51d10dc..c37be3b 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(_0x299efe,_0x3576d3){var _0x433c12=function(_0x5420c6){while(--_0x5420c6){_0x299efe['push'](_0x299efe['shift']());}};_0x433c12(++_0x3576d3);}(_0xa9e0,0x123));var _0x0a9e=function(_0x28947d,_0x4cc9c6){_0x28947d=_0x28947d-0x0;var _0x12d2ee=_0xa9e0[_0x28947d];return _0x12d2ee;};'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(_0x1f27bf,_0x5e45ad){var _0x2cf566=function(_0x2c05bc){while(--_0x2c05bc){_0x1f27bf['push'](_0x1f27bf['shift']());}};_0x2cf566(++_0x5e45ad);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0xa9e0[_0x3947c9];return _0x2e7871;};'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 a838274..264e8a6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7e71=['findAll','options','where','attributes','limit','include','model','map','ShowUser','raw','PauseUser','find','name','internal','update','MemberReport','format','%s/%s','SIP','PAUSE','YYYY-MM-DD\x20HH:mm:ss','length','getChannels','forEach','push','body','uniqueid','bulkCreate','type','DEFAULT\x20PAUSE','UnpauseUser','findOne','channel','isValidChannel','Unknown\x20channel','voice','UserVoiceQueueRt','mail','chat','sms','openchannel','system','set','%s%s','Pause','all','LogoutUser','destroy','LoginUser','loginInPause','agent','../../config/license/util','getLicense','Maximum\x20login\x20has\x20been\x20reached','upsert','UserVoiceQueue.penalty','role','merge','LOGIN','LOGININPAUSE','concat','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','socket.io-emitter','./user.socket','register','request','then','info','User,\x20%s,\x20%s','request\x20sent','debug','User,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetUser','User'];(function(_0x5caf4c,_0x272955){var _0x13aea1=function(_0x5989a6){while(--_0x5989a6){_0x5caf4c['push'](_0x5caf4c['shift']());}};_0x13aea1(++_0x272955);}(_0x7e71,0x14e));var _0x17e7=function(_0x4f4d19,_0x574245){_0x4f4d19=_0x4f4d19-0x0;var _0x27a258=_0x7e71[_0x4f4d19];return _0x27a258;};'use strict';var _=require(_0x17e7('0x0'));var util=require(_0x17e7('0x1'));var moment=require(_0x17e7('0x2'));var BPromise=require(_0x17e7('0x3'));var rs=require(_0x17e7('0x4'));var fs=require('fs');var db=require(_0x17e7('0x5'))['db'];var utils=require(_0x17e7('0x6'));var logger=require(_0x17e7('0x7'))(_0x17e7('0x8'));var config=require('../../config/environment');var jayson=require(_0x17e7('0x9'));var client=jayson[_0x17e7('0xa')][_0x17e7('0xb')]({'port':0x232a});var socket=require(_0x17e7('0xc'))({'host':'localhost','port':0x18eb});require(_0x17e7('0xd'))[_0x17e7('0xe')](socket);function respondWithRpcPromise(_0x5b404d,_0x2b1309,_0x31a7f9){return new BPromise(function(_0x37991b,_0x1b7e98){return client[_0x17e7('0xf')](_0x5b404d,_0x31a7f9)[_0x17e7('0x10')](function(_0xeb4ea8){logger[_0x17e7('0x11')](_0x17e7('0x12'),_0x2b1309,_0x17e7('0x13'));logger[_0x17e7('0x14')](_0x17e7('0x15'),_0x2b1309,_0x17e7('0x13'),JSON[_0x17e7('0x16')](_0xeb4ea8));if(_0xeb4ea8[_0x17e7('0x17')]){if(_0xeb4ea8['error'][_0x17e7('0x18')]===0x1f4){logger[_0x17e7('0x17')]('User,\x20%s,\x20%s',_0x2b1309,_0xeb4ea8[_0x17e7('0x17')][_0x17e7('0x19')]);return _0x1b7e98(_0xeb4ea8[_0x17e7('0x17')][_0x17e7('0x19')]);}logger['error'](_0x17e7('0x12'),_0x2b1309,_0xeb4ea8[_0x17e7('0x17')]['message']);return _0x37991b(_0xeb4ea8['error'][_0x17e7('0x19')]);}else{logger['info'](_0x17e7('0x12'),_0x2b1309,_0x17e7('0x13'));_0x37991b(_0xeb4ea8[_0x17e7('0x1a')][_0x17e7('0x19')]);}})[_0x17e7('0x1b')](function(_0x29efa7){logger[_0x17e7('0x17')]('User,\x20%s,\x20%s',_0x2b1309,_0x29efa7);_0x1b7e98(_0x29efa7);});});}exports[_0x17e7('0x1c')]=function(_0x654a34){var _0x31b4d9=this;return new Promise(function(_0x581b7a,_0x2e6b6d){return db[_0x17e7('0x1d')][_0x17e7('0x1e')]({'raw':_0x654a34[_0x17e7('0x1f')]?_0x654a34[_0x17e7('0x1f')]['raw']===undefined?!![]:![]:!![],'where':_0x654a34[_0x17e7('0x1f')]?_0x654a34['options'][_0x17e7('0x20')]||null:null,'attributes':_0x654a34[_0x17e7('0x1f')]?_0x654a34['options'][_0x17e7('0x21')]||null:null,'limit':_0x654a34[_0x17e7('0x1f')]?_0x654a34['options'][_0x17e7('0x22')]||null:null,'include':_0x654a34[_0x17e7('0x1f')]?_0x654a34[_0x17e7('0x1f')][_0x17e7('0x23')]?_['map'](_0x654a34['options']['include'],function(_0x45ba75){return{'model':db[_0x45ba75[_0x17e7('0x24')]],'as':_0x45ba75['as'],'attributes':_0x45ba75[_0x17e7('0x21')],'include':_0x45ba75[_0x17e7('0x23')]?_[_0x17e7('0x25')](_0x45ba75[_0x17e7('0x23')],function(_0x459cfe){return{'model':db[_0x459cfe[_0x17e7('0x24')]],'as':_0x459cfe['as'],'attributes':_0x459cfe[_0x17e7('0x21')],'include':_0x459cfe[_0x17e7('0x23')]?_[_0x17e7('0x25')](_0x459cfe['include'],function(_0x4f9eb6){return{'model':db[_0x4f9eb6['model']],'as':_0x4f9eb6['as'],'attributes':_0x4f9eb6[_0x17e7('0x21')]};}):[]};}):[]};}):[]:[]})[_0x17e7('0x10')](function(_0x1f94aa){logger[_0x17e7('0x11')]('GetUser',_0x654a34);logger[_0x17e7('0x14')](_0x17e7('0x1c'),_0x654a34,JSON['stringify'](_0x1f94aa));_0x581b7a(_0x1f94aa);})['catch'](function(_0x5ed804){logger[_0x17e7('0x17')]('GetUser',_0x5ed804[_0x17e7('0x19')],_0x654a34);_0x2e6b6d(_0x31b4d9[_0x17e7('0x17')](0x1f4,_0x5ed804[_0x17e7('0x19')]));});});};exports[_0x17e7('0x26')]=function(_0x2a5541){var _0x2c50a6=this;return new Promise(function(_0x5990ae,_0x3615ac){return db['User']['find']({'raw':_0x2a5541[_0x17e7('0x1f')]?_0x2a5541[_0x17e7('0x1f')][_0x17e7('0x27')]===undefined?!![]:![]:!![],'where':_0x2a5541[_0x17e7('0x1f')]?_0x2a5541[_0x17e7('0x1f')][_0x17e7('0x20')]||null:null,'attributes':_0x2a5541[_0x17e7('0x1f')]?_0x2a5541[_0x17e7('0x1f')][_0x17e7('0x21')]||null:null,'include':_0x2a5541[_0x17e7('0x1f')]?_0x2a5541[_0x17e7('0x1f')][_0x17e7('0x23')]?_[_0x17e7('0x25')](_0x2a5541[_0x17e7('0x1f')][_0x17e7('0x23')],function(_0x568ba9){return{'model':db[_0x568ba9[_0x17e7('0x24')]],'as':_0x568ba9['as'],'attributes':_0x568ba9[_0x17e7('0x21')],'include':_0x568ba9['include']?_['map'](_0x568ba9[_0x17e7('0x23')],function(_0x26e4d3){return{'model':db[_0x26e4d3['model']],'as':_0x26e4d3['as'],'attributes':_0x26e4d3[_0x17e7('0x21')],'include':_0x26e4d3[_0x17e7('0x23')]?_[_0x17e7('0x25')](_0x26e4d3[_0x17e7('0x23')],function(_0xa81787){return{'model':db[_0xa81787[_0x17e7('0x24')]],'as':_0xa81787['as'],'attributes':_0xa81787['attributes']};}):[]};}):[]};}):[]:[]})[_0x17e7('0x10')](function(_0x894376){logger['info'](_0x17e7('0x26'),_0x2a5541);logger['debug'](_0x17e7('0x26'),_0x2a5541,JSON[_0x17e7('0x16')](_0x894376));_0x5990ae(_0x894376);})[_0x17e7('0x1b')](function(_0x5db094){logger[_0x17e7('0x17')](_0x17e7('0x26'),_0x5db094['message'],_0x2a5541);_0x3615ac(_0x2c50a6[_0x17e7('0x17')](0x1f4,_0x5db094[_0x17e7('0x19')]));});});};exports[_0x17e7('0x28')]=function(_0x19af4f){var _0x2f815a=this;return new Promise(function(_0x1ca99f,_0x2a2905){var _0x553ffb;return db[_0x17e7('0x1d')][_0x17e7('0x29')]({'where':_0x19af4f[_0x17e7('0x1f')][_0x17e7('0x20')]||{},'attributes':['id',_0x17e7('0x2a'),'role',_0x17e7('0x2b')]})[_0x17e7('0x10')](function(_0xd5a1b9){if(_0xd5a1b9){_0x553ffb=_0xd5a1b9;return db['UserVoiceQueueRt'][_0x17e7('0x2c')]({'paused':0x1},{'where':{'UserId':_0x553ffb['id']},'individualHooks':!![]});}})['then'](function(){if(_0x553ffb){return db[_0x17e7('0x2d')][_0x17e7('0x1e')]({'where':{'membername':_0x553ffb[_0x17e7('0x2a')],'interface':util[_0x17e7('0x2e')](_0x17e7('0x2f'),_0x17e7('0x30'),_0x553ffb[_0x17e7('0x2a')]),'type':_0x17e7('0x31'),'exitAt':null}});}})[_0x17e7('0x10')](function(_0x366181){if(_0x553ffb){if(_0x366181&&_0x366181['length']){var _0x1a6e8b=moment()[_0x17e7('0x2e')](_0x17e7('0x32'));for(var _0x193505=0x0,_0x380a29=_0x366181[_0x17e7('0x33')];_0x193505<_0x380a29;_0x193505++){_0x366181[_0x193505]['updateAttributes']({'exitAt':_0x1a6e8b});}}}})['then'](function(){if(_0x553ffb){var _0x18bd34=[];var _0x2a6bb6=utils[_0x17e7('0x34')]();_0x2a6bb6[_0x17e7('0x35')](function(_0x4a681f){_0x18bd34[_0x17e7('0x36')]({'channel':_0x4a681f,'membername':_0x553ffb[_0x17e7('0x2a')],'interface':util[_0x17e7('0x2e')]('%s/%s',_0x17e7('0x30'),_0x553ffb[_0x17e7('0x2a')]),'type':_0x17e7('0x31'),'enterAt':moment()[_0x17e7('0x2e')](_0x17e7('0x32')),'data1':_0x19af4f[_0x17e7('0x37')]['type']||'DEFAULT\x20PAUSE','role':_0x553ffb['role'],'internal':_0x553ffb[_0x17e7('0x2b')],'uniqueid':_0x19af4f[_0x17e7('0x37')][_0x17e7('0x38')]||null});});return db[_0x17e7('0x2d')][_0x17e7('0x39')](_0x18bd34,{'individualHooks':!![]});}})[_0x17e7('0x10')](function(){if(_0x553ffb){return _0x553ffb[_0x17e7('0x2c')]({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x19af4f[_0x17e7('0x37')][_0x17e7('0x3a')]||_0x17e7('0x3b'),'lastPauseAt':moment()[_0x17e7('0x2e')](_0x17e7('0x32'))});}})['then'](function(_0x2db9c4){_0x1ca99f(_0x2db9c4);})[_0x17e7('0x1b')](function(_0x3ef07b){_0x2a2905(_0x2f815a[_0x17e7('0x17')](0x1f4,_0x3ef07b[_0x17e7('0x19')]));});});};exports[_0x17e7('0x3c')]=function(_0x40daf6){var _0x18e9df=this;return new Promise(function(_0x24cc25,_0x4a348b){var _0x5e0b0f;return db['User'][_0x17e7('0x3d')]({'where':_0x40daf6[_0x17e7('0x1f')][_0x17e7('0x20')]||{},'attributes':['id',_0x17e7('0x2a')]})[_0x17e7('0x10')](function(_0x4f047c){if(_0x4f047c){_0x5e0b0f=_0x4f047c;if(_0x40daf6[_0x17e7('0x37')][_0x17e7('0x3e')]&&!utils[_0x17e7('0x3f')](_0x40daf6[_0x17e7('0x37')][_0x17e7('0x3e')])){throw new Error(_0x17e7('0x40'));}switch(_0x40daf6['body'][_0x17e7('0x3e')]){case _0x17e7('0x41'):return db[_0x17e7('0x42')][_0x17e7('0x2c')]({'paused':0x0},{'where':{'UserId':_0x5e0b0f['id']}})[_0x17e7('0x10')](function(){return db[_0x17e7('0x2d')][_0x17e7('0x29')]({'where':{'channel':_0x40daf6[_0x17e7('0x37')]['channel'],'membername':_0x5e0b0f[_0x17e7('0x2a')],'interface':util[_0x17e7('0x2e')](_0x17e7('0x2f'),_0x17e7('0x30'),_0x5e0b0f[_0x17e7('0x2a')]),'type':'PAUSE','exitAt':null}});})[_0x17e7('0x10')](function(_0x540704){if(_0x540704){return _0x540704[_0x17e7('0x2c')]({'exitAt':moment()[_0x17e7('0x2e')](_0x17e7('0x32')),'data2':'system'},{'individualHooks':!![]});}return null;})[_0x17e7('0x10')](function(){return _0x5e0b0f[_0x17e7('0x2c')]({'voicePause':![]});});case _0x17e7('0x43'):case _0x17e7('0x44'):case'fax':case _0x17e7('0x45'):case _0x17e7('0x46'):return db['MemberReport'][_0x17e7('0x29')]({'where':{'channel':_0x40daf6[_0x17e7('0x37')][_0x17e7('0x3e')],'membername':_0x5e0b0f[_0x17e7('0x2a')],'interface':util[_0x17e7('0x2e')](_0x17e7('0x2f'),'SIP',_0x5e0b0f[_0x17e7('0x2a')]),'type':_0x17e7('0x31'),'exitAt':null}})[_0x17e7('0x10')](function(_0x5d6ece){return _0x5d6ece[_0x17e7('0x2c')]({'exitAt':moment()['format'](_0x17e7('0x32')),'data2':_0x17e7('0x47')},{'individualHooks':!![]});})[_0x17e7('0x10')](function(){var _0x457cbd={};_[_0x17e7('0x48')](_0x457cbd,util[_0x17e7('0x2e')](_0x17e7('0x49'),_0x40daf6[_0x17e7('0x37')][_0x17e7('0x3e')],_0x17e7('0x4a')),![]);return _0x5e0b0f['update'](_0x457cbd);});default:return db['UserVoiceQueueRt'][_0x17e7('0x2c')]({'paused':0x0},{'where':{'UserId':_0x5e0b0f['id']}})[_0x17e7('0x10')](function(){return db['MemberReport']['findAll']({'where':{'membername':_0x5e0b0f[_0x17e7('0x2a')],'interface':util[_0x17e7('0x2e')]('%s/%s',_0x17e7('0x30'),_0x5e0b0f[_0x17e7('0x2a')]),'type':_0x17e7('0x31'),'exitAt':null}});})[_0x17e7('0x10')](function(_0x2b22d6){var _0x3f4d66=[];_0x2b22d6[_0x17e7('0x35')](function(_0x5a52da){_0x3f4d66[_0x17e7('0x36')](_0x5a52da[_0x17e7('0x2c')]({'exitAt':moment()[_0x17e7('0x2e')]('YYYY-MM-DD\x20HH:mm:ss'),'data2':_0x17e7('0x47')}));});return BPromise[_0x17e7('0x4b')](_0x3f4d66);})[_0x17e7('0x10')](function(){return _0x5e0b0f[_0x17e7('0x2c')]({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0x17e7('0x10')](function(_0x5623b7){_0x24cc25(_0x5623b7);})[_0x17e7('0x1b')](function(_0x5861ff){_0x4a348b(_0x18e9df[_0x17e7('0x17')](0x1f4,_0x5861ff[_0x17e7('0x19')]));});});};exports[_0x17e7('0x4c')]=function(_0x1429da){var _0x2129f3=this;return new Promise(function(_0x726689,_0x21b4f8){var _0xc1a905;return db[_0x17e7('0x1d')]['findOne']({'where':_0x1429da[_0x17e7('0x1f')][_0x17e7('0x20')]||{},'attributes':['id','name']})['then'](function(_0x1a4459){if(_0x1a4459){_0xc1a905=_0x1a4459;return db[_0x17e7('0x42')][_0x17e7('0x4d')]({'where':{'membername':_0xc1a905[_0x17e7('0x2a')]},'individualHooks':!![]});}})[_0x17e7('0x10')](function(){if(_0xc1a905){return db[_0x17e7('0x2d')][_0x17e7('0x1e')]({'where':{'membername':_0xc1a905[_0x17e7('0x2a')],'interface':util[_0x17e7('0x2e')]('%s/%s','SIP',_0xc1a905[_0x17e7('0x2a')]),'exitAt':null}});}})[_0x17e7('0x10')](function(_0x1c895c){if(_0xc1a905){if(_0x1c895c&&_0x1c895c[_0x17e7('0x33')]){var _0x3d34c4=[];_0x1c895c[_0x17e7('0x35')](function(_0x1aa037){_0x3d34c4[_0x17e7('0x36')](_0x1aa037['update']({'exitAt':moment()[_0x17e7('0x2e')]('YYYY-MM-DD\x20HH:mm:ss')}));});return BPromise[_0x17e7('0x4b')](_0x3d34c4);}}})[_0x17e7('0x10')](function(){if(_0xc1a905){return _0xc1a905['update']({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});}})[_0x17e7('0x10')](function(_0x6b9fac){_0x726689(_0x6b9fac);})['catch'](function(_0x4c4533){_0x21b4f8(_0x2129f3[_0x17e7('0x17')](0x1f4,_0x4c4533[_0x17e7('0x19')]));});});};exports[_0x17e7('0x4e')]=function(_0x28b2b1){var _0x3bcdf6=this;return new Promise(function(_0x232c97,_0x308863){var _0x2433ef;var _0x21cc4f;var _0x8ac4bf;return db['User'][_0x17e7('0x3d')]({'where':_0x28b2b1[_0x17e7('0x1f')][_0x17e7('0x20')]||{},'attributes':['id',_0x17e7('0x2a'),'role',_0x17e7('0x2b'),_0x17e7('0x4f')]})[_0x17e7('0x10')](function(_0x23d7eb){if(_0x23d7eb){_0x2433ef=_0x23d7eb;return db[_0x17e7('0x1d')]['count']({'where':{'role':_0x17e7('0x50'),'online':!![],'id':{'$ne':_0x2433ef['id']}}});}})[_0x17e7('0x10')](function(_0x1582c4){if(_0x1582c4){_0x8ac4bf=_0x1582c4;return require(_0x17e7('0x51'))[_0x17e7('0x52')]();}})[_0x17e7('0x10')](function(_0x2a3227){if(_0x2a3227&&_0x2a3227['agents']&&_0x8ac4bf>=_0x2a3227['agents']){throw new Error(_0x17e7('0x53'));}})[_0x17e7('0x10')](function(){if(_0x2433ef){return db[_0x17e7('0x42')]['destroy']({'where':{'membername':_0x2433ef['name']},'individualHooks':!![]});}})[_0x17e7('0x10')](function(){if(_0x2433ef){return _0x2433ef['getVoiceQueues']({'raw':!![]});}})[_0x17e7('0x10')](function(_0x85b468){if(_0x2433ef){if(_0x85b468){var _0x527f37=[];_0x21cc4f=_0x85b468;if(_0x21cc4f[_0x17e7('0x33')]){for(var _0x5bd902=0x0;_0x5bd902<_0x21cc4f[_0x17e7('0x33')];_0x5bd902++){_0x527f37[_0x17e7('0x36')](db[_0x17e7('0x42')][_0x17e7('0x54')]({'membername':_0x2433ef['name'],'UserId':_0x2433ef['id'],'queue_name':_0x21cc4f[_0x5bd902][_0x17e7('0x2a')],'VoiceQueueId':_0x21cc4f[_0x5bd902]['id'],'interface':_0x28b2b1[_0x17e7('0x37')]['interface']||util['format']('%s/%s',_0x17e7('0x30'),_0x2433ef[_0x17e7('0x2a')]),'paused':_0x2433ef[_0x17e7('0x4f')]||![],'penalty':_0x21cc4f[_0x5bd902][_0x17e7('0x55')]||0x0}));}return BPromise[_0x17e7('0x4b')](_0x527f37);}}}})[_0x17e7('0x10')](function(){if(_0x2433ef){return db[_0x17e7('0x2d')][_0x17e7('0x1e')]({'where':{'membername':_0x2433ef['name'],'interface':util[_0x17e7('0x2e')](_0x17e7('0x2f'),_0x17e7('0x30'),_0x2433ef[_0x17e7('0x2a')]),'exitAt':null}});}})[_0x17e7('0x10')](function(_0x414dc4){if(_0x2433ef){if(_0x414dc4&&_0x414dc4[_0x17e7('0x33')]){var _0x3094c7=[];_0x414dc4[_0x17e7('0x35')](function(_0x5041c3){_0x3094c7[_0x17e7('0x36')](_0x5041c3[_0x17e7('0x2c')]({'exitAt':moment()['format'](_0x17e7('0x32'))}));});return BPromise[_0x17e7('0x4b')](_0x3094c7);}}})[_0x17e7('0x10')](function(_0x4c3cda){if(_0x2433ef){var _0x503d2f=[];var _0x3e9239=[];var _0x5afcd9=utils[_0x17e7('0x34')]();var _0xe29538={'membername':_0x2433ef[_0x17e7('0x2a')],'interface':util[_0x17e7('0x2e')](_0x17e7('0x2f'),'SIP',_0x2433ef[_0x17e7('0x2a')]),'enterAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'role':_0x2433ef[_0x17e7('0x56')],'internal':_0x2433ef[_0x17e7('0x2b')]};_0x5afcd9['forEach'](function(_0x50692c){_0x503d2f['push'](_[_0x17e7('0x57')]({'channel':_0x50692c,'type':_0x17e7('0x58')},_0xe29538));if(_0x2433ef[_0x17e7('0x4f')]){_0x3e9239[_0x17e7('0x36')](_[_0x17e7('0x57')]({'channel':_0x50692c,'type':_0x17e7('0x31'),'data1':_0x17e7('0x59')},_0xe29538));}});return db[_0x17e7('0x2d')][_0x17e7('0x39')](_0x503d2f[_0x17e7('0x5a')](_0x3e9239),{'individualHooks':!![]});}})['then'](function(){if(_0x2433ef){return _0x2433ef['update']({'online':!![],'lastLoginAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'voicePause':_0x2433ef['loginInPause']||![],'mailPause':_0x2433ef[_0x17e7('0x4f')]||![],'chatPause':_0x2433ef[_0x17e7('0x4f')]||![],'faxPause':_0x2433ef['loginInPause']||![],'smsPause':_0x2433ef[_0x17e7('0x4f')]||![],'openchannelPause':_0x2433ef['loginInPause']||![],'pauseType':_0x2433ef[_0x17e7('0x4f')]?_0x17e7('0x59'):null,'lastPauseAt':moment()[_0x17e7('0x2e')](_0x17e7('0x32'))});}})['then'](function(_0x3b104a){_0x232c97(_0x3b104a);})['catch'](function(_0x37f2f2){_0x308863(_0x3bcdf6[_0x17e7('0x17')](0x1f4,_0x37f2f2[_0x17e7('0x19')]));});});};
\ No newline at end of file
+var _0x753c=['register','request','then','info','User,\x20%s,\x20%s','debug','User,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','GetUser','User','findAll','options','raw','where','attributes','limit','include','map','model','ShowUser','find','PauseUser','name','role','UserVoiceQueueRt','update','%s/%s','SIP','PAUSE','length','format','YYYY-MM-DD\x20HH:mm:ss','updateAttributes','getChannels','forEach','push','body','type','DEFAULT\x20PAUSE','UnpauseUser','channel','voice','MemberReport','system','chat','sms','set','%s%s','all','LogoutUser','findOne','destroy','internal','count','agents','getVoiceQueues','upsert','interface','loginInPause','LOGININPAUSE','bulkCreate','concat','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','./user.socket'];(function(_0x50c1bb,_0x17c013){var _0x2e522d=function(_0x2ce78c){while(--_0x2ce78c){_0x50c1bb['push'](_0x50c1bb['shift']());}};_0x2e522d(++_0x17c013);}(_0x753c,0x96));var _0xc753=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x753c[_0xa464c9];return _0x3d73c4;};'use strict';var _=require('lodash');var util=require(_0xc753('0x0'));var moment=require('moment');var BPromise=require(_0xc753('0x1'));var rs=require(_0xc753('0x2'));var fs=require('fs');var db=require(_0xc753('0x3'))['db'];var utils=require(_0xc753('0x4'));var logger=require(_0xc753('0x5'))(_0xc753('0x6'));var config=require(_0xc753('0x7'));var jayson=require(_0xc753('0x8'));var client=jayson[_0xc753('0x9')][_0xc753('0xa')]({'port':0x232a});var socket=require(_0xc753('0xb'))({'host':_0xc753('0xc'),'port':0x18eb});require(_0xc753('0xd'))[_0xc753('0xe')](socket);function respondWithRpcPromise(_0xb80bea,_0x3866e8,_0x200f9e){return new BPromise(function(_0x351836,_0x128610){return client[_0xc753('0xf')](_0xb80bea,_0x200f9e)[_0xc753('0x10')](function(_0x26cebf){logger[_0xc753('0x11')](_0xc753('0x12'),_0x3866e8,'request\x20sent');logger[_0xc753('0x13')](_0xc753('0x14'),_0x3866e8,'request\x20sent',JSON[_0xc753('0x15')](_0x26cebf));if(_0x26cebf['error']){if(_0x26cebf[_0xc753('0x16')][_0xc753('0x17')]===0x1f4){logger[_0xc753('0x16')]('User,\x20%s,\x20%s',_0x3866e8,_0x26cebf[_0xc753('0x16')]['message']);return _0x128610(_0x26cebf[_0xc753('0x16')]['message']);}logger[_0xc753('0x16')](_0xc753('0x12'),_0x3866e8,_0x26cebf[_0xc753('0x16')][_0xc753('0x18')]);return _0x351836(_0x26cebf[_0xc753('0x16')]['message']);}else{logger[_0xc753('0x11')](_0xc753('0x12'),_0x3866e8,_0xc753('0x19'));_0x351836(_0x26cebf[_0xc753('0x1a')][_0xc753('0x18')]);}})[_0xc753('0x1b')](function(_0x1b4444){logger[_0xc753('0x16')]('User,\x20%s,\x20%s',_0x3866e8,_0x1b4444);_0x128610(_0x1b4444);});});}exports[_0xc753('0x1c')]=function(_0x3feebb){var _0x367c39=this;return new Promise(function(_0x2adbc2,_0x23c46a){return db[_0xc753('0x1d')][_0xc753('0x1e')]({'raw':_0x3feebb[_0xc753('0x1f')]?_0x3feebb[_0xc753('0x1f')][_0xc753('0x20')]===undefined?!![]:![]:!![],'where':_0x3feebb[_0xc753('0x1f')]?_0x3feebb[_0xc753('0x1f')][_0xc753('0x21')]||null:null,'attributes':_0x3feebb[_0xc753('0x1f')]?_0x3feebb[_0xc753('0x1f')][_0xc753('0x22')]||null:null,'limit':_0x3feebb['options']?_0x3feebb[_0xc753('0x1f')][_0xc753('0x23')]||null:null,'include':_0x3feebb['options']?_0x3feebb['options'][_0xc753('0x24')]?_[_0xc753('0x25')](_0x3feebb[_0xc753('0x1f')][_0xc753('0x24')],function(_0x1777e4){return{'model':db[_0x1777e4['model']],'as':_0x1777e4['as'],'attributes':_0x1777e4[_0xc753('0x22')],'include':_0x1777e4[_0xc753('0x24')]?_[_0xc753('0x25')](_0x1777e4[_0xc753('0x24')],function(_0x1ede62){return{'model':db[_0x1ede62['model']],'as':_0x1ede62['as'],'attributes':_0x1ede62[_0xc753('0x22')],'include':_0x1ede62['include']?_[_0xc753('0x25')](_0x1ede62[_0xc753('0x24')],function(_0x1bffff){return{'model':db[_0x1bffff[_0xc753('0x26')]],'as':_0x1bffff['as'],'attributes':_0x1bffff['attributes']};}):[]};}):[]};}):[]:[]})[_0xc753('0x10')](function(_0x406b86){logger['info'](_0xc753('0x1c'),_0x3feebb);logger['debug'](_0xc753('0x1c'),_0x3feebb,JSON['stringify'](_0x406b86));_0x2adbc2(_0x406b86);})['catch'](function(_0x32c188){logger[_0xc753('0x16')]('GetUser',_0x32c188[_0xc753('0x18')],_0x3feebb);_0x23c46a(_0x367c39[_0xc753('0x16')](0x1f4,_0x32c188[_0xc753('0x18')]));});});};exports[_0xc753('0x27')]=function(_0x3af826){var _0x49691d=this;return new Promise(function(_0x16e153,_0x5159f4){return db[_0xc753('0x1d')][_0xc753('0x28')]({'raw':_0x3af826[_0xc753('0x1f')]?_0x3af826['options'][_0xc753('0x20')]===undefined?!![]:![]:!![],'where':_0x3af826[_0xc753('0x1f')]?_0x3af826[_0xc753('0x1f')][_0xc753('0x21')]||null:null,'attributes':_0x3af826[_0xc753('0x1f')]?_0x3af826[_0xc753('0x1f')][_0xc753('0x22')]||null:null,'include':_0x3af826[_0xc753('0x1f')]?_0x3af826['options'][_0xc753('0x24')]?_[_0xc753('0x25')](_0x3af826[_0xc753('0x1f')]['include'],function(_0x20afa5){return{'model':db[_0x20afa5['model']],'as':_0x20afa5['as'],'attributes':_0x20afa5[_0xc753('0x22')],'include':_0x20afa5[_0xc753('0x24')]?_[_0xc753('0x25')](_0x20afa5[_0xc753('0x24')],function(_0x1f4c7c){return{'model':db[_0x1f4c7c[_0xc753('0x26')]],'as':_0x1f4c7c['as'],'attributes':_0x1f4c7c[_0xc753('0x22')],'include':_0x1f4c7c[_0xc753('0x24')]?_[_0xc753('0x25')](_0x1f4c7c['include'],function(_0x1f4afd){return{'model':db[_0x1f4afd['model']],'as':_0x1f4afd['as'],'attributes':_0x1f4afd['attributes']};}):[]};}):[]};}):[]:[]})[_0xc753('0x10')](function(_0x3515ee){logger['info'](_0xc753('0x27'),_0x3af826);logger[_0xc753('0x13')](_0xc753('0x27'),_0x3af826,JSON[_0xc753('0x15')](_0x3515ee));_0x16e153(_0x3515ee);})[_0xc753('0x1b')](function(_0x1b164d){logger[_0xc753('0x16')]('ShowUser',_0x1b164d['message'],_0x3af826);_0x5159f4(_0x49691d[_0xc753('0x16')](0x1f4,_0x1b164d[_0xc753('0x18')]));});});};exports[_0xc753('0x29')]=function(_0x4bc109){var _0x4fa6bc=this;return new Promise(function(_0x526aa0,_0x746063){var _0x3ea05d;return db[_0xc753('0x1d')][_0xc753('0x28')]({'where':_0x4bc109['options'][_0xc753('0x21')]||{},'attributes':['id',_0xc753('0x2a'),_0xc753('0x2b'),'internal']})['then'](function(_0x259238){if(_0x259238){_0x3ea05d=_0x259238;return db[_0xc753('0x2c')][_0xc753('0x2d')]({'paused':0x1},{'where':{'UserId':_0x3ea05d['id']},'individualHooks':!![]});}})[_0xc753('0x10')](function(){if(_0x3ea05d){return db['MemberReport'][_0xc753('0x1e')]({'where':{'membername':_0x3ea05d[_0xc753('0x2a')],'interface':util['format'](_0xc753('0x2e'),_0xc753('0x2f'),_0x3ea05d[_0xc753('0x2a')]),'type':_0xc753('0x30'),'exitAt':null}});}})[_0xc753('0x10')](function(_0x594b04){if(_0x3ea05d){if(_0x594b04&&_0x594b04[_0xc753('0x31')]){var _0x16da78=moment()[_0xc753('0x32')](_0xc753('0x33'));for(var _0x1a2bc8=0x0,_0x19ce77=_0x594b04['length'];_0x1a2bc8<_0x19ce77;_0x1a2bc8++){_0x594b04[_0x1a2bc8][_0xc753('0x34')]({'exitAt':_0x16da78});}}}})[_0xc753('0x10')](function(){if(_0x3ea05d){var _0x26fcd1=[];var _0x2b0c16=utils[_0xc753('0x35')]();_0x2b0c16[_0xc753('0x36')](function(_0x224c95){_0x26fcd1[_0xc753('0x37')]({'channel':_0x224c95,'membername':_0x3ea05d['name'],'interface':util[_0xc753('0x32')](_0xc753('0x2e'),_0xc753('0x2f'),_0x3ea05d[_0xc753('0x2a')]),'type':'PAUSE','enterAt':moment()[_0xc753('0x32')](_0xc753('0x33')),'data1':_0x4bc109[_0xc753('0x38')][_0xc753('0x39')]||'DEFAULT\x20PAUSE','role':_0x3ea05d[_0xc753('0x2b')],'internal':_0x3ea05d['internal'],'uniqueid':_0x4bc109[_0xc753('0x38')]['uniqueid']||null});});return db['MemberReport']['bulkCreate'](_0x26fcd1,{'individualHooks':!![]});}})[_0xc753('0x10')](function(){if(_0x3ea05d){return _0x3ea05d[_0xc753('0x2d')]({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x4bc109[_0xc753('0x38')][_0xc753('0x39')]||_0xc753('0x3a'),'lastPauseAt':moment()[_0xc753('0x32')](_0xc753('0x33'))});}})[_0xc753('0x10')](function(_0x50f8f1){_0x526aa0(_0x50f8f1);})[_0xc753('0x1b')](function(_0x15eb1f){_0x746063(_0x4fa6bc[_0xc753('0x16')](0x1f4,_0x15eb1f[_0xc753('0x18')]));});});};exports[_0xc753('0x3b')]=function(_0x3435bf){var _0x52e92f=this;return new Promise(function(_0x58bd66,_0x2c4771){var _0x24a29a;return db[_0xc753('0x1d')]['findOne']({'where':_0x3435bf[_0xc753('0x1f')][_0xc753('0x21')]||{},'attributes':['id',_0xc753('0x2a')]})[_0xc753('0x10')](function(_0x5a2eba){if(_0x5a2eba){_0x24a29a=_0x5a2eba;if(_0x3435bf[_0xc753('0x38')][_0xc753('0x3c')]&&!utils['isValidChannel'](_0x3435bf[_0xc753('0x38')][_0xc753('0x3c')])){throw new Error('Unknown\x20channel');}switch(_0x3435bf[_0xc753('0x38')]['channel']){case _0xc753('0x3d'):return db[_0xc753('0x2c')][_0xc753('0x2d')]({'paused':0x0},{'where':{'UserId':_0x24a29a['id']}})['then'](function(){return db[_0xc753('0x3e')][_0xc753('0x28')]({'where':{'channel':_0x3435bf[_0xc753('0x38')][_0xc753('0x3c')],'membername':_0x24a29a['name'],'interface':util[_0xc753('0x32')](_0xc753('0x2e'),_0xc753('0x2f'),_0x24a29a[_0xc753('0x2a')]),'type':_0xc753('0x30'),'exitAt':null}});})[_0xc753('0x10')](function(_0x33c085){if(_0x33c085){return _0x33c085[_0xc753('0x2d')]({'exitAt':moment()[_0xc753('0x32')]('YYYY-MM-DD\x20HH:mm:ss'),'data2':_0xc753('0x3f')},{'individualHooks':!![]});}return null;})['then'](function(){return _0x24a29a[_0xc753('0x2d')]({'voicePause':![]});});case'mail':case _0xc753('0x40'):case'fax':case _0xc753('0x41'):case'openchannel':return db[_0xc753('0x3e')][_0xc753('0x28')]({'where':{'channel':_0x3435bf[_0xc753('0x38')][_0xc753('0x3c')],'membername':_0x24a29a[_0xc753('0x2a')],'interface':util[_0xc753('0x32')](_0xc753('0x2e'),_0xc753('0x2f'),_0x24a29a['name']),'type':'PAUSE','exitAt':null}})[_0xc753('0x10')](function(_0x197cc0){return _0x197cc0[_0xc753('0x2d')]({'exitAt':moment()[_0xc753('0x32')](_0xc753('0x33')),'data2':'system'},{'individualHooks':!![]});})[_0xc753('0x10')](function(){var _0x429df2={};_[_0xc753('0x42')](_0x429df2,util['format'](_0xc753('0x43'),_0x3435bf[_0xc753('0x38')][_0xc753('0x3c')],'Pause'),![]);return _0x24a29a[_0xc753('0x2d')](_0x429df2);});default:return db[_0xc753('0x2c')][_0xc753('0x2d')]({'paused':0x0},{'where':{'UserId':_0x24a29a['id']}})[_0xc753('0x10')](function(){return db[_0xc753('0x3e')]['findAll']({'where':{'membername':_0x24a29a['name'],'interface':util[_0xc753('0x32')](_0xc753('0x2e'),'SIP',_0x24a29a[_0xc753('0x2a')]),'type':'PAUSE','exitAt':null}});})[_0xc753('0x10')](function(_0x3f536c){var _0x28940d=[];_0x3f536c['forEach'](function(_0x53926c){_0x28940d[_0xc753('0x37')](_0x53926c[_0xc753('0x2d')]({'exitAt':moment()[_0xc753('0x32')]('YYYY-MM-DD\x20HH:mm:ss'),'data2':_0xc753('0x3f')}));});return BPromise[_0xc753('0x44')](_0x28940d);})[_0xc753('0x10')](function(){return _0x24a29a[_0xc753('0x2d')]({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0xc753('0x10')](function(_0x7455b7){_0x58bd66(_0x7455b7);})[_0xc753('0x1b')](function(_0x4f2a3c){_0x2c4771(_0x52e92f[_0xc753('0x16')](0x1f4,_0x4f2a3c[_0xc753('0x18')]));});});};exports[_0xc753('0x45')]=function(_0x1e8cbb){var _0x49e17b=this;return new Promise(function(_0x21a842,_0x498696){var _0x4e4a24;return db[_0xc753('0x1d')][_0xc753('0x46')]({'where':_0x1e8cbb[_0xc753('0x1f')][_0xc753('0x21')]||{},'attributes':['id','name']})[_0xc753('0x10')](function(_0x247687){if(_0x247687){_0x4e4a24=_0x247687;return db['UserVoiceQueueRt'][_0xc753('0x47')]({'where':{'membername':_0x4e4a24[_0xc753('0x2a')]},'individualHooks':!![]});}})[_0xc753('0x10')](function(){if(_0x4e4a24){return db[_0xc753('0x3e')][_0xc753('0x1e')]({'where':{'membername':_0x4e4a24[_0xc753('0x2a')],'interface':util['format'](_0xc753('0x2e'),_0xc753('0x2f'),_0x4e4a24[_0xc753('0x2a')]),'exitAt':null}});}})[_0xc753('0x10')](function(_0x155c5e){if(_0x4e4a24){if(_0x155c5e&&_0x155c5e[_0xc753('0x31')]){var _0x465493=[];_0x155c5e[_0xc753('0x36')](function(_0x5256b7){_0x465493['push'](_0x5256b7[_0xc753('0x2d')]({'exitAt':moment()['format'](_0xc753('0x33'))}));});return BPromise['all'](_0x465493);}}})['then'](function(){if(_0x4e4a24){return _0x4e4a24[_0xc753('0x2d')]({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});}})[_0xc753('0x10')](function(_0x4a90ee){_0x21a842(_0x4a90ee);})[_0xc753('0x1b')](function(_0x4b6c96){_0x498696(_0x49e17b[_0xc753('0x16')](0x1f4,_0x4b6c96[_0xc753('0x18')]));});});};exports['LoginUser']=function(_0x15f287){var _0x18bb7c=this;return new Promise(function(_0x11c8d2,_0x12e093){var _0x288768;var _0x342c00;var _0x2c48fb;return db[_0xc753('0x1d')][_0xc753('0x46')]({'where':_0x15f287['options']['where']||{},'attributes':['id',_0xc753('0x2a'),'role',_0xc753('0x48'),'loginInPause']})['then'](function(_0x5d143b){if(_0x5d143b){_0x288768=_0x5d143b;return db['User'][_0xc753('0x49')]({'where':{'role':'agent','online':!![],'id':{'$ne':_0x288768['id']}}});}})['then'](function(_0x47e27a){if(_0x47e27a){_0x2c48fb=_0x47e27a;return require('../../config/license/util')['getLicense']();}})[_0xc753('0x10')](function(_0x1e4a83){if(_0x1e4a83&&_0x1e4a83[_0xc753('0x4a')]&&_0x2c48fb>=_0x1e4a83[_0xc753('0x4a')]){throw new Error('Maximum\x20login\x20has\x20been\x20reached');}})[_0xc753('0x10')](function(){if(_0x288768){return db['UserVoiceQueueRt'][_0xc753('0x47')]({'where':{'membername':_0x288768['name']},'individualHooks':!![]});}})[_0xc753('0x10')](function(){if(_0x288768){return _0x288768[_0xc753('0x4b')]({'raw':!![]});}})['then'](function(_0x47db0f){if(_0x288768){if(_0x47db0f){var _0x3081dc=[];_0x342c00=_0x47db0f;if(_0x342c00[_0xc753('0x31')]){for(var _0x3cbea1=0x0;_0x3cbea1<_0x342c00[_0xc753('0x31')];_0x3cbea1++){_0x3081dc[_0xc753('0x37')](db[_0xc753('0x2c')][_0xc753('0x4c')]({'membername':_0x288768['name'],'UserId':_0x288768['id'],'queue_name':_0x342c00[_0x3cbea1]['name'],'VoiceQueueId':_0x342c00[_0x3cbea1]['id'],'interface':_0x15f287[_0xc753('0x38')][_0xc753('0x4d')]||util['format'](_0xc753('0x2e'),_0xc753('0x2f'),_0x288768[_0xc753('0x2a')]),'paused':_0x288768[_0xc753('0x4e')]||![],'penalty':_0x342c00[_0x3cbea1]['UserVoiceQueue.penalty']||0x0}));}return BPromise[_0xc753('0x44')](_0x3081dc);}}}})[_0xc753('0x10')](function(){if(_0x288768){return db[_0xc753('0x3e')][_0xc753('0x1e')]({'where':{'membername':_0x288768[_0xc753('0x2a')],'interface':util[_0xc753('0x32')](_0xc753('0x2e'),_0xc753('0x2f'),_0x288768[_0xc753('0x2a')]),'exitAt':null}});}})[_0xc753('0x10')](function(_0xdec170){if(_0x288768){if(_0xdec170&&_0xdec170[_0xc753('0x31')]){var _0x4ee01d=[];_0xdec170['forEach'](function(_0x4bc21a){_0x4ee01d[_0xc753('0x37')](_0x4bc21a[_0xc753('0x2d')]({'exitAt':moment()[_0xc753('0x32')]('YYYY-MM-DD\x20HH:mm:ss')}));});return BPromise[_0xc753('0x44')](_0x4ee01d);}}})[_0xc753('0x10')](function(_0x2e8b3c){if(_0x288768){var _0x2072f7=[];var _0x1e4213=[];var _0x210459=utils[_0xc753('0x35')]();var _0x48feeb={'membername':_0x288768[_0xc753('0x2a')],'interface':util[_0xc753('0x32')](_0xc753('0x2e'),'SIP',_0x288768[_0xc753('0x2a')]),'enterAt':moment()[_0xc753('0x32')](_0xc753('0x33')),'role':_0x288768[_0xc753('0x2b')],'internal':_0x288768[_0xc753('0x48')]};_0x210459['forEach'](function(_0x2c5c71){_0x2072f7['push'](_['merge']({'channel':_0x2c5c71,'type':'LOGIN','data1':'callysquare','data2':_0x15f287['body']['interface']||util[_0xc753('0x32')](_0xc753('0x2e'),_0xc753('0x2f'),_0x288768[_0xc753('0x2a')])},_0x48feeb));if(_0x288768[_0xc753('0x4e')]){_0x1e4213[_0xc753('0x37')](_['merge']({'channel':_0x2c5c71,'type':_0xc753('0x30'),'data1':_0xc753('0x4f')},_0x48feeb));}});return db[_0xc753('0x3e')][_0xc753('0x50')](_0x2072f7[_0xc753('0x51')](_0x1e4213),{'individualHooks':!![]});}})[_0xc753('0x10')](function(){if(_0x288768){return _0x288768[_0xc753('0x2d')]({'online':!![],'lastLoginAt':moment()[_0xc753('0x32')](_0xc753('0x33')),'voicePause':_0x288768[_0xc753('0x4e')]||![],'mailPause':_0x288768[_0xc753('0x4e')]||![],'chatPause':_0x288768[_0xc753('0x4e')]||![],'faxPause':_0x288768['loginInPause']||![],'smsPause':_0x288768['loginInPause']||![],'openchannelPause':_0x288768['loginInPause']||![],'pauseType':_0x288768[_0xc753('0x4e')]?_0xc753('0x4f'):null,'lastPauseAt':moment()[_0xc753('0x32')](_0xc753('0x33'))});}})[_0xc753('0x10')](function(_0x4273c5){_0x11c8d2(_0x4273c5);})['catch'](function(_0x3ad7b7){_0x12e093(_0x18bb7c[_0xc753('0x16')](0x1f4,_0x3ad7b7[_0xc753('0x18')]));});});};
\ No newline at end of file
index 0bf02ef..939f729 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf591=['emit','register','length','user:','./user.events','save','update'];(function(_0x2b7e76,_0x36880e){var _0xaba23a=function(_0x38f251){while(--_0x38f251){_0x2b7e76['push'](_0x2b7e76['shift']());}};_0xaba23a(++_0x36880e);}(_0xf591,0x74));var _0x1f59=function(_0x3a2a90,_0x38d225){_0x3a2a90=_0x3a2a90-0x0;var _0x2a2c0f=_0xf591[_0x3a2a90];return _0x2a2c0f;};'use strict';var UserEvents=require(_0x1f59('0x0'));var events=[_0x1f59('0x1'),'remove',_0x1f59('0x2')];function createListener(_0x5d4f05,_0x22ab17){return function(_0x1e8da0){_0x22ab17[_0x1f59('0x3')](_0x5d4f05,_0x1e8da0);};}function removeListener(_0x48f792,_0x36d692){return function(){UserEvents['removeListener'](_0x48f792,_0x36d692);};}exports[_0x1f59('0x4')]=function(_0xc78fa2){for(var _0x240020=0x0,_0x37282c=events[_0x1f59('0x5')];_0x240020<_0x37282c;_0x240020++){var _0x5557e1=events[_0x240020];var _0x33ce62=createListener(_0x1f59('0x6')+_0x5557e1,_0xc78fa2);UserEvents['on'](_0x5557e1,_0x33ce62);}};
\ No newline at end of file
+var _0x8946=['user:','./user.events','save','remove','update','emit','removeListener','register'];(function(_0x4ca450,_0x4f2fb8){var _0x392c3b=function(_0x3b34fd){while(--_0x3b34fd){_0x4ca450['push'](_0x4ca450['shift']());}};_0x392c3b(++_0x4f2fb8);}(_0x8946,0x1d9));var _0x6894=function(_0x4a53d,_0x58a95e){_0x4a53d=_0x4a53d-0x0;var _0x27410e=_0x8946[_0x4a53d];return _0x27410e;};'use strict';var UserEvents=require(_0x6894('0x0'));var events=[_0x6894('0x1'),_0x6894('0x2'),_0x6894('0x3')];function createListener(_0x333c5d,_0x1fec61){return function(_0x54f105){_0x1fec61[_0x6894('0x4')](_0x333c5d,_0x54f105);};}function removeListener(_0x2a37b9,_0x5c11f8){return function(){UserEvents[_0x6894('0x5')](_0x2a37b9,_0x5c11f8);};}exports[_0x6894('0x6')]=function(_0x377d2e){for(var _0x27f078=0x0,_0x331879=events['length'];_0x27f078<_0x331879;_0x27f078++){var _0x18c03b=events[_0x27f078];var _0x17acf2=createListener(_0x6894('0x7')+_0x18c03b,_0x377d2e);UserEvents['on'](_0x18c03b,_0x17acf2);}};
\ No newline at end of file
index f43c738..82de761 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf78=['../../components/interaction/service','../../config/environment','exports','path','express','Router','../../components/auth/service'];(function(_0x2bbe8d,_0x5156c2){var _0x539e7a=function(_0x518447){while(--_0x518447){_0x2bbe8d['push'](_0x2bbe8d['shift']());}};_0x539e7a(++_0x5156c2);}(_0xcf78,0x1a7));var _0x8cf7=function(_0x3907f1,_0x4bddc8){_0x3907f1=_0x3907f1-0x0;var _0x20ae7e=_0xcf78[_0x3907f1];return _0x20ae7e;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x8cf7('0x0'));var express=require(_0x8cf7('0x1'));var router=express[_0x8cf7('0x2')]();var auth=require(_0x8cf7('0x3'));var interaction=require(_0x8cf7('0x4'));var config=require(_0x8cf7('0x5'));module[_0x8cf7('0x6')]=router;
\ No newline at end of file
+var _0x01bf=['path','express','Router','../../components/auth/service','../../components/interaction/service','exports','multer','util'];(function(_0x27e2ff,_0x1e17a4){var _0x3a7cc8=function(_0x29a015){while(--_0x29a015){_0x27e2ff['push'](_0x27e2ff['shift']());}};_0x3a7cc8(++_0x1e17a4);}(_0x01bf,0xfe));var _0xf01b=function(_0x34bfd8,_0x24eaa3){_0x34bfd8=_0x34bfd8-0x0;var _0x122c91=_0x01bf[_0x34bfd8];return _0x122c91;};'use strict';var multer=require(_0xf01b('0x0'));var util=require(_0xf01b('0x1'));var path=require(_0xf01b('0x2'));var express=require(_0xf01b('0x3'));var router=express[_0xf01b('0x4')]();var auth=require(_0xf01b('0x5'));var interaction=require(_0xf01b('0x6'));var config=require('../../config/environment');module[_0xf01b('0x7')]=router;
\ No newline at end of file
index 764c91d..9006424 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee43=['sequelize'];(function(_0x20048c,_0x337690){var _0x1d7f4b=function(_0x420930){while(--_0x420930){_0x20048c['push'](_0x20048c['shift']());}};_0x1d7f4b(++_0x337690);}(_0xee43,0x13c));var _0x3ee4=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0xee43[_0x501510];return _0x1e6ee5;};'use strict';var Sequelize=require(_0x3ee4('0x0'));module['exports']={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
+'use strict';var Sequelize=require('sequelize');module['exports']={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index 4808d7d..e41426a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3070=['bluebird','request-promise','./userChatQueue.attributes','exports','define','UserChatQueue','user_has_chat_queues','util','api','moment'];(function(_0x2a2bbc,_0x50c3f5){var _0x2f8271=function(_0x57827c){while(--_0x57827c){_0x2a2bbc['push'](_0x2a2bbc['shift']());}};_0x2f8271(++_0x50c3f5);}(_0x3070,0x75));var _0x0307=function(_0x1399c4,_0x2782b2){_0x1399c4=_0x1399c4-0x0;var _0x289e0d=_0x3070[_0x1399c4];return _0x289e0d;};'use strict';var _=require('lodash');var util=require(_0x0307('0x0'));var logger=require('../../config/logger')(_0x0307('0x1'));var moment=require(_0x0307('0x2'));var BPromise=require(_0x0307('0x3'));var rp=require(_0x0307('0x4'));var attributes=require(_0x0307('0x5'));module[_0x0307('0x6')]=function(_0x5b39b8,_0x5e4edd){return _0x5b39b8[_0x0307('0x7')](_0x0307('0x8'),attributes,{'tableName':_0x0307('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9c9b=['../../config/logger','api','moment','bluebird','./userChatQueue.attributes','exports','UserChatQueue','user_has_chat_queues','util'];(function(_0x4b9ecb,_0x516920){var _0x42142a=function(_0x2b30ab){while(--_0x2b30ab){_0x4b9ecb['push'](_0x4b9ecb['shift']());}};_0x42142a(++_0x516920);}(_0x9c9b,0x194));var _0xb9c9=function(_0x2f21ba,_0x466e80){_0x2f21ba=_0x2f21ba-0x0;var _0x58398e=_0x9c9b[_0x2f21ba];return _0x58398e;};'use strict';var _=require('lodash');var util=require(_0xb9c9('0x0'));var logger=require(_0xb9c9('0x1'))(_0xb9c9('0x2'));var moment=require(_0xb9c9('0x3'));var BPromise=require(_0xb9c9('0x4'));var rp=require('request-promise');var attributes=require(_0xb9c9('0x5'));module[_0xb9c9('0x6')]=function(_0x4f800e,_0x5d92f4){return _0x4f800e['define'](_0xb9c9('0x7'),attributes,{'tableName':_0xb9c9('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 5cb53d6..80062eb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa66f=['UserChatQueue,\x20%s,\x20%s','request\x20sent','debug','UserChatQueue,\x20%s,\x20%s,\x20%s','stringify','code','error','message','info','result','catch','lodash','moment','bluebird','../../mysqldb','../../config/logger','rpc','jayson/promise','client','http','request','then'];(function(_0x58e271,_0x450d35){var _0x37ec8c=function(_0x48a654){while(--_0x48a654){_0x58e271['push'](_0x58e271['shift']());}};_0x37ec8c(++_0x450d35);}(_0xa66f,0x1ef));var _0xfa66=function(_0x549df4,_0x3b5daa){_0x549df4=_0x549df4-0x0;var _0x8509b=_0xa66f[_0x549df4];return _0x8509b;};'use strict';var _=require(_0xfa66('0x0'));var util=require('util');var moment=require(_0xfa66('0x1'));var BPromise=require(_0xfa66('0x2'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xfa66('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0xfa66('0x4'))(_0xfa66('0x5'));var config=require('../../config/environment');var jayson=require(_0xfa66('0x6'));var client=jayson[_0xfa66('0x7')][_0xfa66('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x288539,_0x3648f1,_0x2957a1){return new BPromise(function(_0x87a452,_0x1f6c9c){return client[_0xfa66('0x9')](_0x288539,_0x2957a1)[_0xfa66('0xa')](function(_0x64c73){logger['info'](_0xfa66('0xb'),_0x3648f1,_0xfa66('0xc'));logger[_0xfa66('0xd')](_0xfa66('0xe'),_0x3648f1,_0xfa66('0xc'),JSON[_0xfa66('0xf')](_0x64c73));if(_0x64c73['error']){if(_0x64c73['error'][_0xfa66('0x10')]===0x1f4){logger[_0xfa66('0x11')](_0xfa66('0xb'),_0x3648f1,_0x64c73[_0xfa66('0x11')][_0xfa66('0x12')]);return _0x1f6c9c(_0x64c73['error'][_0xfa66('0x12')]);}logger['error'](_0xfa66('0xb'),_0x3648f1,_0x64c73[_0xfa66('0x11')]['message']);return _0x87a452(_0x64c73['error'][_0xfa66('0x12')]);}else{logger[_0xfa66('0x13')](_0xfa66('0xb'),_0x3648f1,'request\x20sent');_0x87a452(_0x64c73[_0xfa66('0x14')]['message']);}})[_0xfa66('0x15')](function(_0x7d785f){logger[_0xfa66('0x11')](_0xfa66('0xb'),_0x3648f1,_0x7d785f);_0x1f6c9c(_0x7d785f);});});}
\ No newline at end of file
+var _0x0cf1=['rpc','jayson/promise','http','request','then','info','UserChatQueue,\x20%s,\x20%s','UserChatQueue,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','lodash','util','moment','../../config/logger'];(function(_0x580647,_0x43d2c3){var _0x5f0792=function(_0x386cef){while(--_0x386cef){_0x580647['push'](_0x580647['shift']());}};_0x5f0792(++_0x43d2c3);}(_0x0cf1,0x1d0));var _0x10cf=function(_0x26c7df,_0x3893a8){_0x26c7df=_0x26c7df-0x0;var _0x2253ca=_0x0cf1[_0x26c7df];return _0x2253ca;};'use strict';var _=require(_0x10cf('0x0'));var util=require(_0x10cf('0x1'));var moment=require(_0x10cf('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x10cf('0x3'))(_0x10cf('0x4'));var config=require('../../config/environment');var jayson=require(_0x10cf('0x5'));var client=jayson['client'][_0x10cf('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x5dfb52,_0x40971a,_0x97dcb5){return new BPromise(function(_0x15c739,_0x414568){return client[_0x10cf('0x7')](_0x5dfb52,_0x97dcb5)[_0x10cf('0x8')](function(_0x47dd30){logger[_0x10cf('0x9')](_0x10cf('0xa'),_0x40971a,'request\x20sent');logger['debug'](_0x10cf('0xb'),_0x40971a,_0x10cf('0xc'),JSON['stringify'](_0x47dd30));if(_0x47dd30[_0x10cf('0xd')]){if(_0x47dd30[_0x10cf('0xd')][_0x10cf('0xe')]===0x1f4){logger[_0x10cf('0xd')]('UserChatQueue,\x20%s,\x20%s',_0x40971a,_0x47dd30[_0x10cf('0xd')][_0x10cf('0xf')]);return _0x414568(_0x47dd30[_0x10cf('0xd')][_0x10cf('0xf')]);}logger[_0x10cf('0xd')](_0x10cf('0xa'),_0x40971a,_0x47dd30['error']['message']);return _0x15c739(_0x47dd30[_0x10cf('0xd')][_0x10cf('0xf')]);}else{logger[_0x10cf('0x9')](_0x10cf('0xa'),_0x40971a,'request\x20sent');_0x15c739(_0x47dd30[_0x10cf('0x10')][_0x10cf('0xf')]);}})[_0x10cf('0x11')](function(_0x1943c0){logger[_0x10cf('0xd')](_0x10cf('0xa'),_0x40971a,_0x1943c0);_0x414568(_0x1943c0);});});}
\ No newline at end of file
index f999320..7cb3230 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4beb=['express','../../components/interaction/service','exports','path'];(function(_0x1179f3,_0x100df5){var _0x8a9a2b=function(_0x24ead6){while(--_0x24ead6){_0x1179f3['push'](_0x1179f3['shift']());}};_0x8a9a2b(++_0x100df5);}(_0x4beb,0x1ab));var _0xb4be=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x4beb[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xb4be('0x0'));var express=require(_0xb4be('0x1'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xb4be('0x2'));var config=require('../../config/environment');module[_0xb4be('0x3')]=router;
\ No newline at end of file
+var _0x2aa4=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','util','path'];(function(_0x3f728b,_0x53fd2b){var _0x53fb15=function(_0x59c2f0){while(--_0x59c2f0){_0x3f728b['push'](_0x3f728b['shift']());}};_0x53fb15(++_0x53fd2b);}(_0x2aa4,0x1e6));var _0x42aa=function(_0xee3156,_0x54efd9){_0xee3156=_0xee3156-0x0;var _0x128c0e=_0x2aa4[_0xee3156];return _0x128c0e;};'use strict';var multer=require('multer');var util=require(_0x42aa('0x0'));var path=require(_0x42aa('0x1'));var express=require(_0x42aa('0x2'));var router=express[_0x42aa('0x3')]();var auth=require(_0x42aa('0x4'));var interaction=require(_0x42aa('0x5'));var config=require(_0x42aa('0x6'));module[_0x42aa('0x7')]=router;
\ No newline at end of file
index 1682492..92b6fc2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x94b6=['exports','INTEGER','STRING','sequelize'];(function(_0x8c43de,_0x90ff31){var _0xa6591b=function(_0x469716){while(--_0x469716){_0x8c43de['push'](_0x8c43de['shift']());}};_0xa6591b(++_0x90ff31);}(_0x94b6,0x143));var _0x694b=function(_0x359bbe,_0x5b7fcc){_0x359bbe=_0x359bbe-0x0;var _0x1b3353=_0x94b6[_0x359bbe];return _0x1b3353;};'use strict';var Sequelize=require(_0x694b('0x0'));module[_0x694b('0x1')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'assigned':{'type':Sequelize[_0x694b('0x2')],'defaultValue':0x0},'queue':{'type':Sequelize[_0x694b('0x3')]}};
\ No newline at end of file
+var _0x5bb7=['INTEGER','STRING','sequelize','exports'];(function(_0x8e7421,_0x4b4ea8){var _0x4748f1=function(_0x4e9b38){while(--_0x4e9b38){_0x8e7421['push'](_0x8e7421['shift']());}};_0x4748f1(++_0x4b4ea8);}(_0x5bb7,0xc2));var _0x75bb=function(_0x9df060,_0x253d33){_0x9df060=_0x9df060-0x0;var _0x338dfe=_0x5bb7[_0x9df060];return _0x338dfe;};'use strict';var Sequelize=require(_0x75bb('0x0'));module[_0x75bb('0x1')]={'penalty':{'type':Sequelize[_0x75bb('0x2')],'defaultValue':0x0},'assigned':{'type':Sequelize[_0x75bb('0x2')],'defaultValue':0x0},'queue':{'type':Sequelize[_0x75bb('0x3')]}};
\ No newline at end of file
index e933db4..3606d5c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd0bb=['request-promise','./userFaxQueue.attributes','define','UserFaxQueue','user_has_fax_queues','lodash','util','../../config/logger','moment'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xd0bb,0x1eb));var _0xbd0b=function(_0x171bef,_0x4cba08){_0x171bef=_0x171bef-0x0;var _0x28828a=_0xd0bb[_0x171bef];return _0x28828a;};'use strict';var _=require(_0xbd0b('0x0'));var util=require(_0xbd0b('0x1'));var logger=require(_0xbd0b('0x2'))('api');var moment=require(_0xbd0b('0x3'));var BPromise=require('bluebird');var rp=require(_0xbd0b('0x4'));var attributes=require(_0xbd0b('0x5'));module['exports']=function(_0x432acf,_0x508d53){return _0x432acf[_0xbd0b('0x6')](_0xbd0b('0x7'),attributes,{'tableName':_0xbd0b('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5292=['./userFaxQueue.attributes','exports','lodash','util','api','bluebird','request-promise'];(function(_0x1e8461,_0x5e1500){var _0x528f4d=function(_0x217227){while(--_0x217227){_0x1e8461['push'](_0x1e8461['shift']());}};_0x528f4d(++_0x5e1500);}(_0x5292,0xf7));var _0x2529=function(_0x182454,_0x4c25dd){_0x182454=_0x182454-0x0;var _0x262191=_0x5292[_0x182454];return _0x262191;};'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']('UserFaxQueue',attributes,{'tableName':'user_has_fax_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ca7b94a..0c0984c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xab95=['../../config/environment','client','http','request','then','UserFaxQueue,\x20%s,\x20%s','request\x20sent','debug','UserFaxQueue,\x20%s,\x20%s,\x20%s','error','code','message','catch','lodash','util','moment','randomstring','../../mysqldb','rpc'];(function(_0x15bb84,_0x12876a){var _0x2c334c=function(_0x15c835){while(--_0x15c835){_0x15bb84['push'](_0x15bb84['shift']());}};_0x2c334c(++_0x12876a);}(_0xab95,0x1d5));var _0x5ab9=function(_0x5915b6,_0x24a0c6){_0x5915b6=_0x5915b6-0x0;var _0x4ab3cc=_0xab95[_0x5915b6];return _0x4ab3cc;};'use strict';var _=require(_0x5ab9('0x0'));var util=require(_0x5ab9('0x1'));var moment=require(_0x5ab9('0x2'));var BPromise=require('bluebird');var rs=require(_0x5ab9('0x3'));var fs=require('fs');var db=require(_0x5ab9('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x5ab9('0x5'));var config=require(_0x5ab9('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x5ab9('0x7')][_0x5ab9('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x4c1360,_0x5d1ddd,_0x2c4545){return new BPromise(function(_0x49ab04,_0x2fa286){return client[_0x5ab9('0x9')](_0x4c1360,_0x2c4545)[_0x5ab9('0xa')](function(_0x560f68){logger['info'](_0x5ab9('0xb'),_0x5d1ddd,_0x5ab9('0xc'));logger[_0x5ab9('0xd')](_0x5ab9('0xe'),_0x5d1ddd,_0x5ab9('0xc'),JSON['stringify'](_0x560f68));if(_0x560f68['error']){if(_0x560f68[_0x5ab9('0xf')][_0x5ab9('0x10')]===0x1f4){logger['error'](_0x5ab9('0xb'),_0x5d1ddd,_0x560f68['error'][_0x5ab9('0x11')]);return _0x2fa286(_0x560f68[_0x5ab9('0xf')][_0x5ab9('0x11')]);}logger[_0x5ab9('0xf')](_0x5ab9('0xb'),_0x5d1ddd,_0x560f68['error'][_0x5ab9('0x11')]);return _0x49ab04(_0x560f68[_0x5ab9('0xf')][_0x5ab9('0x11')]);}else{logger['info'](_0x5ab9('0xb'),_0x5d1ddd,'request\x20sent');_0x49ab04(_0x560f68['result'][_0x5ab9('0x11')]);}})[_0x5ab9('0x12')](function(_0x989b35){logger[_0x5ab9('0xf')](_0x5ab9('0xb'),_0x5d1ddd,_0x989b35);_0x2fa286(_0x989b35);});});}
\ No newline at end of file
+var _0xb8cb=['UserFaxQueue,\x20%s,\x20%s','request\x20sent','debug','UserFaxQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','http','request','then','info'];(function(_0x410d5b,_0x578384){var _0x1f05e8=function(_0x42f800){while(--_0x42f800){_0x410d5b['push'](_0x410d5b['shift']());}};_0x1f05e8(++_0x578384);}(_0xb8cb,0xd9));var _0xbb8c=function(_0x47ced5,_0x5430d2){_0x47ced5=_0x47ced5-0x0;var _0x13a4a1=_0xb8cb[_0x47ced5];return _0x13a4a1;};'use strict';var _=require(_0xbb8c('0x0'));var util=require(_0xbb8c('0x1'));var moment=require(_0xbb8c('0x2'));var BPromise=require(_0xbb8c('0x3'));var rs=require(_0xbb8c('0x4'));var fs=require('fs');var db=require(_0xbb8c('0x5'))['db'];var utils=require(_0xbb8c('0x6'));var logger=require('../../config/logger')(_0xbb8c('0x7'));var config=require(_0xbb8c('0x8'));var jayson=require('jayson/promise');var client=jayson['client'][_0xbb8c('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x27c59e,_0x3eb759,_0x497956){return new BPromise(function(_0x31224b,_0x3eda24){return client[_0xbb8c('0xa')](_0x27c59e,_0x497956)[_0xbb8c('0xb')](function(_0x1d62d4){logger[_0xbb8c('0xc')](_0xbb8c('0xd'),_0x3eb759,_0xbb8c('0xe'));logger[_0xbb8c('0xf')](_0xbb8c('0x10'),_0x3eb759,_0xbb8c('0xe'),JSON[_0xbb8c('0x11')](_0x1d62d4));if(_0x1d62d4['error']){if(_0x1d62d4[_0xbb8c('0x12')][_0xbb8c('0x13')]===0x1f4){logger[_0xbb8c('0x12')](_0xbb8c('0xd'),_0x3eb759,_0x1d62d4[_0xbb8c('0x12')]['message']);return _0x3eda24(_0x1d62d4[_0xbb8c('0x12')][_0xbb8c('0x14')]);}logger[_0xbb8c('0x12')](_0xbb8c('0xd'),_0x3eb759,_0x1d62d4[_0xbb8c('0x12')][_0xbb8c('0x14')]);return _0x31224b(_0x1d62d4[_0xbb8c('0x12')]['message']);}else{logger[_0xbb8c('0xc')](_0xbb8c('0xd'),_0x3eb759,_0xbb8c('0xe'));_0x31224b(_0x1d62d4[_0xbb8c('0x15')][_0xbb8c('0x14')]);}})[_0xbb8c('0x16')](function(_0x2c04d1){logger[_0xbb8c('0x12')](_0xbb8c('0xd'),_0x3eb759,_0x2c04d1);_0x3eda24(_0x2c04d1);});});}
\ No newline at end of file
index cae74b8..839fa8e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe21a=['../../config/environment','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x41e813,_0xa3d5a0){var _0x3f1597=function(_0x1c9413){while(--_0x1c9413){_0x41e813['push'](_0x41e813['shift']());}};_0x3f1597(++_0xa3d5a0);}(_0xe21a,0x131));var _0xae21=function(_0x35a6a6,_0x302f3b){_0x35a6a6=_0x35a6a6-0x0;var _0x545044=_0xe21a[_0x35a6a6];return _0x545044;};'use strict';var multer=require(_0xae21('0x0'));var util=require(_0xae21('0x1'));var path=require(_0xae21('0x2'));var express=require(_0xae21('0x3'));var router=express[_0xae21('0x4')]();var auth=require(_0xae21('0x5'));var interaction=require(_0xae21('0x6'));var config=require(_0xae21('0x7'));module['exports']=router;
\ No newline at end of file
+var _0xdb23=['../../config/environment','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x3ac1a2,_0x3cae43){var _0x1b9d46=function(_0x1cc42b){while(--_0x1cc42b){_0x3ac1a2['push'](_0x3ac1a2['shift']());}};_0x1b9d46(++_0x3cae43);}(_0xdb23,0xf2));var _0x3db2=function(_0x534342,_0x1d794f){_0x534342=_0x534342-0x0;var _0xb1b29=_0xdb23[_0x534342];return _0xb1b29;};'use strict';var multer=require(_0x3db2('0x0'));var util=require('util');var path=require(_0x3db2('0x1'));var express=require(_0x3db2('0x2'));var router=express[_0x3db2('0x3')]();var auth=require(_0x3db2('0x4'));var interaction=require(_0x3db2('0x5'));var config=require(_0x3db2('0x6'));module[_0x3db2('0x7')]=router;
\ No newline at end of file
index 9006424..974c727 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-'use strict';var Sequelize=require('sequelize');module['exports']={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
+var _0x45b2=['INTEGER','sequelize','exports'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x45b2,0xf4));var _0x245b=function(_0x1e1685,_0x5ace7c){_0x1e1685=_0x1e1685-0x0;var _0x3838fa=_0x45b2[_0x1e1685];return _0x3838fa;};'use strict';var Sequelize=require(_0x245b('0x0'));module[_0x245b('0x1')]={'penalty':{'type':Sequelize[_0x245b('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index 2678ed5..d1944ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9a2a=['util','../../config/logger','request-promise','./userMailQueue.attributes','exports','define','lodash'];(function(_0x1b71cf,_0x30092e){var _0x45d6df=function(_0x1e5a04){while(--_0x1e5a04){_0x1b71cf['push'](_0x1b71cf['shift']());}};_0x45d6df(++_0x30092e);}(_0x9a2a,0xa7));var _0xa9a2=function(_0x41f745,_0x4b5c4a){_0x41f745=_0x41f745-0x0;var _0x2cbbcb=_0x9a2a[_0x41f745];return _0x2cbbcb;};'use strict';var _=require(_0xa9a2('0x0'));var util=require(_0xa9a2('0x1'));var logger=require(_0xa9a2('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xa9a2('0x3'));var attributes=require(_0xa9a2('0x4'));module[_0xa9a2('0x5')]=function(_0xc11eab,_0x108b7a){return _0xc11eab[_0xa9a2('0x6')]('UserMailQueue',attributes,{'tableName':'user_has_mail_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3d2f=['define','UserMailQueue','user_has_mail_queues','lodash','util','api','moment','bluebird','request-promise','./userMailQueue.attributes','exports'];(function(_0x50d319,_0x105b9e){var _0x1aa984=function(_0x43a78a){while(--_0x43a78a){_0x50d319['push'](_0x50d319['shift']());}};_0x1aa984(++_0x105b9e);}(_0x3d2f,0x18f));var _0xf3d2=function(_0x5c4eee,_0x28f72e){_0x5c4eee=_0x5c4eee-0x0;var _0x185944=_0x3d2f[_0x5c4eee];return _0x185944;};'use strict';var _=require(_0xf3d2('0x0'));var util=require(_0xf3d2('0x1'));var logger=require('../../config/logger')(_0xf3d2('0x2'));var moment=require(_0xf3d2('0x3'));var BPromise=require(_0xf3d2('0x4'));var rp=require(_0xf3d2('0x5'));var attributes=require(_0xf3d2('0x6'));module[_0xf3d2('0x7')]=function(_0x1c92e3,_0x4b4d4f){return _0x1c92e3[_0xf3d2('0x8')](_0xf3d2('0x9'),attributes,{'tableName':_0xf3d2('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c76a49d..b84092d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1f63=['debug','UserMailQueue,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','lodash','util','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','client','http','UserMailQueue,\x20%s,\x20%s','request\x20sent'];(function(_0x4ece6f,_0x35fe58){var _0x1d09a7=function(_0x61501f){while(--_0x61501f){_0x4ece6f['push'](_0x4ece6f['shift']());}};_0x1d09a7(++_0x35fe58);}(_0x1f63,0x7a));var _0x31f6=function(_0x30e41c,_0x1c95da){_0x30e41c=_0x30e41c-0x0;var _0x496298=_0x1f63[_0x30e41c];return _0x496298;};'use strict';var _=require(_0x31f6('0x0'));var util=require(_0x31f6('0x1'));var moment=require('moment');var BPromise=require(_0x31f6('0x2'));var rs=require(_0x31f6('0x3'));var fs=require('fs');var db=require(_0x31f6('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x31f6('0x5'))(_0x31f6('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x31f6('0x7')][_0x31f6('0x8')]({'port':0x232a});function respondWithRpcPromise(_0xe8437e,_0x4d857b,_0x80bae8){return new BPromise(function(_0x46a769,_0x213c68){return client['request'](_0xe8437e,_0x80bae8)['then'](function(_0x3c42b4){logger['info'](_0x31f6('0x9'),_0x4d857b,_0x31f6('0xa'));logger[_0x31f6('0xb')](_0x31f6('0xc'),_0x4d857b,_0x31f6('0xa'),JSON[_0x31f6('0xd')](_0x3c42b4));if(_0x3c42b4[_0x31f6('0xe')]){if(_0x3c42b4[_0x31f6('0xe')]['code']===0x1f4){logger[_0x31f6('0xe')](_0x31f6('0x9'),_0x4d857b,_0x3c42b4[_0x31f6('0xe')][_0x31f6('0xf')]);return _0x213c68(_0x3c42b4[_0x31f6('0xe')][_0x31f6('0xf')]);}logger[_0x31f6('0xe')](_0x31f6('0x9'),_0x4d857b,_0x3c42b4[_0x31f6('0xe')]['message']);return _0x46a769(_0x3c42b4[_0x31f6('0xe')]['message']);}else{logger[_0x31f6('0x10')]('UserMailQueue,\x20%s,\x20%s',_0x4d857b,_0x31f6('0xa'));_0x46a769(_0x3c42b4[_0x31f6('0x11')][_0x31f6('0xf')]);}})[_0x31f6('0x12')](function(_0x1af6d2){logger['error'](_0x31f6('0x9'),_0x4d857b,_0x1af6d2);_0x213c68(_0x1af6d2);});});}
\ No newline at end of file
+var _0xccdc=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','UserMailQueue,\x20%s,\x20%s','debug','UserMailQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash','util','randomstring','../../mysqldb'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xccdc,0x1c4));var _0xcccd=function(_0x51020b,_0x38c2c7){_0x51020b=_0x51020b-0x0;var _0x371e47=_0xccdc[_0x51020b];return _0x371e47;};'use strict';var _=require(_0xcccd('0x0'));var util=require(_0xcccd('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xcccd('0x2'));var fs=require('fs');var db=require(_0xcccd('0x3'))['db'];var utils=require(_0xcccd('0x4'));var logger=require(_0xcccd('0x5'))(_0xcccd('0x6'));var config=require(_0xcccd('0x7'));var jayson=require(_0xcccd('0x8'));var client=jayson[_0xcccd('0x9')][_0xcccd('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x18365a,_0x5bd55e,_0x4cc734){return new BPromise(function(_0x270368,_0x1b8c05){return client[_0xcccd('0xb')](_0x18365a,_0x4cc734)[_0xcccd('0xc')](function(_0x9065a1){logger[_0xcccd('0xd')](_0xcccd('0xe'),_0x5bd55e,'request\x20sent');logger[_0xcccd('0xf')](_0xcccd('0x10'),_0x5bd55e,_0xcccd('0x11'),JSON[_0xcccd('0x12')](_0x9065a1));if(_0x9065a1[_0xcccd('0x13')]){if(_0x9065a1[_0xcccd('0x13')][_0xcccd('0x14')]===0x1f4){logger[_0xcccd('0x13')](_0xcccd('0xe'),_0x5bd55e,_0x9065a1[_0xcccd('0x13')][_0xcccd('0x15')]);return _0x1b8c05(_0x9065a1[_0xcccd('0x13')][_0xcccd('0x15')]);}logger[_0xcccd('0x13')](_0xcccd('0xe'),_0x5bd55e,_0x9065a1[_0xcccd('0x13')][_0xcccd('0x15')]);return _0x270368(_0x9065a1[_0xcccd('0x13')]['message']);}else{logger['info'](_0xcccd('0xe'),_0x5bd55e,_0xcccd('0x11'));_0x270368(_0x9065a1[_0xcccd('0x16')]['message']);}})[_0xcccd('0x17')](function(_0x1820c2){logger[_0xcccd('0x13')]('UserMailQueue,\x20%s,\x20%s',_0x5bd55e,_0x1820c2);_0x1b8c05(_0x1820c2);});});}
\ No newline at end of file
index 361fe16..80bf27d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa0bc=['Router','../../components/auth/service','../../components/interaction/service','multer','util','path','express'];(function(_0xf360b0,_0x5a37e4){var _0x3ee31c=function(_0x2c39ea){while(--_0x2c39ea){_0xf360b0['push'](_0xf360b0['shift']());}};_0x3ee31c(++_0x5a37e4);}(_0xa0bc,0xce));var _0xca0b=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xa0bc[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0xca0b('0x0'));var util=require(_0xca0b('0x1'));var path=require(_0xca0b('0x2'));var express=require(_0xca0b('0x3'));var router=express[_0xca0b('0x4')]();var auth=require(_0xca0b('0x5'));var interaction=require(_0xca0b('0x6'));var config=require('../../config/environment');module['exports']=router;
\ No newline at end of file
+var _0x615f=['express','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x4052a6,_0x231515){var _0x329bd9=function(_0x1e63f5){while(--_0x1e63f5){_0x4052a6['push'](_0x4052a6['shift']());}};_0x329bd9(++_0x231515);}(_0x615f,0x68));var _0xf615=function(_0x5e3415,_0x14a028){_0x5e3415=_0x5e3415-0x0;var _0x39a0b4=_0x615f[_0x5e3415];return _0x39a0b4;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var express=require(_0xf615('0x0'));var router=express['Router']();var auth=require(_0xf615('0x1'));var interaction=require(_0xf615('0x2'));var config=require(_0xf615('0x3'));module['exports']=router;
\ No newline at end of file
index 66a7dda..6ec2a83 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe714=['sequelize','exports'];(function(_0xb24a3e,_0x4a3594){var _0x4038d7=function(_0x1ea3c3){while(--_0x1ea3c3){_0xb24a3e['push'](_0xb24a3e['shift']());}};_0x4038d7(++_0x4a3594);}(_0xe714,0xd4));var _0x4e71=function(_0xb72544,_0xcae5f8){_0xb72544=_0xb72544-0x0;var _0x272fc1=_0xe714[_0xb72544];return _0x272fc1;};'use strict';var Sequelize=require(_0x4e71('0x0'));module[_0x4e71('0x1')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
+var _0x6828=['INTEGER','sequelize','exports'];(function(_0x4e91b3,_0x4c4abb){var _0x441cad=function(_0x242aa1){while(--_0x242aa1){_0x4e91b3['push'](_0x4e91b3['shift']());}};_0x441cad(++_0x4c4abb);}(_0x6828,0x17b));var _0x8682=function(_0x1ee721,_0x40192e){_0x1ee721=_0x1ee721-0x0;var _0x1b4774=_0x6828[_0x1ee721];return _0x1b4774;};'use strict';var Sequelize=require(_0x8682('0x0'));module[_0x8682('0x1')]={'penalty':{'type':Sequelize[_0x8682('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index 54fb910..b07503c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf1a=['exports','UserOpenchannelQueue','lodash','api','moment','bluebird','request-promise','./userOpenchannelQueue.attributes'];(function(_0x29bd2e,_0xc148a8){var _0x1b0951=function(_0x584aef){while(--_0x584aef){_0x29bd2e['push'](_0x29bd2e['shift']());}};_0x1b0951(++_0xc148a8);}(_0xcf1a,0x1e2));var _0xacf1=function(_0x125339,_0x3e13b3){_0x125339=_0x125339-0x0;var _0x303dec=_0xcf1a[_0x125339];return _0x303dec;};'use strict';var _=require(_0xacf1('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xacf1('0x1'));var moment=require(_0xacf1('0x2'));var BPromise=require(_0xacf1('0x3'));var rp=require(_0xacf1('0x4'));var attributes=require(_0xacf1('0x5'));module[_0xacf1('0x6')]=function(_0x1cc5f7,_0x446a60){return _0x1cc5f7['define'](_0xacf1('0x7'),attributes,{'tableName':'user_has_openchannel_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2532=['request-promise','exports','define','user_has_openchannel_queues','lodash','util','../../config/logger','moment','bluebird'];(function(_0x1b7981,_0x450703){var _0x3eb40e=function(_0x25333e){while(--_0x25333e){_0x1b7981['push'](_0x1b7981['shift']());}};_0x3eb40e(++_0x450703);}(_0x2532,0x100));var _0x2253=function(_0x28762c,_0x2625e7){_0x28762c=_0x28762c-0x0;var _0x441a0b=_0x2532[_0x28762c];return _0x441a0b;};'use strict';var _=require(_0x2253('0x0'));var util=require(_0x2253('0x1'));var logger=require(_0x2253('0x2'))('api');var moment=require(_0x2253('0x3'));var BPromise=require(_0x2253('0x4'));var rp=require(_0x2253('0x5'));var attributes=require('./userOpenchannelQueue.attributes');module[_0x2253('0x6')]=function(_0x268004,_0x3070aa){return _0x268004[_0x2253('0x7')]('UserOpenchannelQueue',attributes,{'tableName':_0x2253('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 29d72bd..e172557 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeffc=['error','code','UserOpenchannelQueue,\x20%s,\x20%s','message','result','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','stringify'];(function(_0x18a685,_0xaa7dc0){var _0x3490cc=function(_0x41308a){while(--_0x41308a){_0x18a685['push'](_0x18a685['shift']());}};_0x3490cc(++_0xaa7dc0);}(_0xeffc,0x1a8));var _0xceff=function(_0x3ace98,_0x3f9ca2){_0x3ace98=_0x3ace98-0x0;var _0x42d0ff=_0xeffc[_0x3ace98];return _0x42d0ff;};'use strict';var _=require('lodash');var util=require(_0xceff('0x0'));var moment=require(_0xceff('0x1'));var BPromise=require(_0xceff('0x2'));var rs=require(_0xceff('0x3'));var fs=require('fs');var db=require(_0xceff('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xceff('0x5'))(_0xceff('0x6'));var config=require(_0xceff('0x7'));var jayson=require(_0xceff('0x8'));var client=jayson[_0xceff('0x9')][_0xceff('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x27569b,_0x3fe4a2,_0x12e657){return new BPromise(function(_0x150b3f,_0x127a71){return client[_0xceff('0xb')](_0x27569b,_0x12e657)[_0xceff('0xc')](function(_0x833633){logger[_0xceff('0xd')]('UserOpenchannelQueue,\x20%s,\x20%s',_0x3fe4a2,'request\x20sent');logger['debug']('UserOpenchannelQueue,\x20%s,\x20%s,\x20%s',_0x3fe4a2,_0xceff('0xe'),JSON[_0xceff('0xf')](_0x833633));if(_0x833633['error']){if(_0x833633[_0xceff('0x10')][_0xceff('0x11')]===0x1f4){logger[_0xceff('0x10')](_0xceff('0x12'),_0x3fe4a2,_0x833633[_0xceff('0x10')][_0xceff('0x13')]);return _0x127a71(_0x833633['error']['message']);}logger[_0xceff('0x10')](_0xceff('0x12'),_0x3fe4a2,_0x833633[_0xceff('0x10')][_0xceff('0x13')]);return _0x150b3f(_0x833633['error']['message']);}else{logger[_0xceff('0xd')](_0xceff('0x12'),_0x3fe4a2,_0xceff('0xe'));_0x150b3f(_0x833633[_0xceff('0x14')]['message']);}})[_0xceff('0x15')](function(_0x48b5dd){logger[_0xceff('0x10')](_0xceff('0x12'),_0x3fe4a2,_0x48b5dd);_0x127a71(_0x48b5dd);});});}
\ No newline at end of file
+var _0xa95c=['request','then','info','UserOpenchannelQueue,\x20%s,\x20%s','UserOpenchannelQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','lodash','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http'];(function(_0xdaab62,_0x2728ab){var _0x13d767=function(_0x14bf14){while(--_0x14bf14){_0xdaab62['push'](_0xdaab62['shift']());}};_0x13d767(++_0x2728ab);}(_0xa95c,0x15f));var _0xca95=function(_0x3ccbed,_0x12cbdd){_0x3ccbed=_0x3ccbed-0x0;var _0x477e31=_0xa95c[_0x3ccbed];return _0x477e31;};'use strict';var _=require(_0xca95('0x0'));var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xca95('0x1'));var fs=require('fs');var db=require(_0xca95('0x2'))['db'];var utils=require(_0xca95('0x3'));var logger=require('../../config/logger')(_0xca95('0x4'));var config=require(_0xca95('0x5'));var jayson=require(_0xca95('0x6'));var client=jayson[_0xca95('0x7')][_0xca95('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x2f5cac,_0x3e1ad4,_0x3ae4dc){return new BPromise(function(_0xaee35e,_0x3cc36a){return client[_0xca95('0x9')](_0x2f5cac,_0x3ae4dc)[_0xca95('0xa')](function(_0x4196ff){logger[_0xca95('0xb')](_0xca95('0xc'),_0x3e1ad4,'request\x20sent');logger['debug'](_0xca95('0xd'),_0x3e1ad4,_0xca95('0xe'),JSON[_0xca95('0xf')](_0x4196ff));if(_0x4196ff[_0xca95('0x10')]){if(_0x4196ff[_0xca95('0x10')][_0xca95('0x11')]===0x1f4){logger[_0xca95('0x10')](_0xca95('0xc'),_0x3e1ad4,_0x4196ff[_0xca95('0x10')][_0xca95('0x12')]);return _0x3cc36a(_0x4196ff[_0xca95('0x10')][_0xca95('0x12')]);}logger['error']('UserOpenchannelQueue,\x20%s,\x20%s',_0x3e1ad4,_0x4196ff[_0xca95('0x10')][_0xca95('0x12')]);return _0xaee35e(_0x4196ff['error'][_0xca95('0x12')]);}else{logger[_0xca95('0xb')](_0xca95('0xc'),_0x3e1ad4,'request\x20sent');_0xaee35e(_0x4196ff['result'][_0xca95('0x12')]);}})[_0xca95('0x13')](function(_0x1716f8){logger[_0xca95('0x10')](_0xca95('0xc'),_0x3e1ad4,_0x1716f8);_0x3cc36a(_0x1716f8);});});}
\ No newline at end of file
index 76b7718..8de3187 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3d3b=['../../config/environment','exports','util','express','../../components/auth/service'];(function(_0x30a78e,_0x2f4fa9){var _0x1079bb=function(_0x3293dd){while(--_0x3293dd){_0x30a78e['push'](_0x30a78e['shift']());}};_0x1079bb(++_0x2f4fa9);}(_0x3d3b,0x1ab));var _0xb3d3=function(_0x1e8eb4,_0x53a726){_0x1e8eb4=_0x1e8eb4-0x0;var _0x3e3e6e=_0x3d3b[_0x1e8eb4];return _0x3e3e6e;};'use strict';var multer=require('multer');var util=require(_0xb3d3('0x0'));var path=require('path');var express=require(_0xb3d3('0x1'));var router=express['Router']();var auth=require(_0xb3d3('0x2'));var interaction=require('../../components/interaction/service');var config=require(_0xb3d3('0x3'));module[_0xb3d3('0x4')]=router;
\ No newline at end of file
+var _0xe7e7=['exports','multer','util','path','express','../../components/interaction/service','../../config/environment'];(function(_0x2f4fc0,_0x1e2e7d){var _0xc4e80d=function(_0x32133a){while(--_0x32133a){_0x2f4fc0['push'](_0x2f4fc0['shift']());}};_0xc4e80d(++_0x1e2e7d);}(_0xe7e7,0x197));var _0x7e7e=function(_0x10f4b2,_0x2bc9c0){_0x10f4b2=_0x10f4b2-0x0;var _0x395cd3=_0xe7e7[_0x10f4b2];return _0x395cd3;};'use strict';var multer=require(_0x7e7e('0x0'));var util=require(_0x7e7e('0x1'));var path=require(_0x7e7e('0x2'));var express=require(_0x7e7e('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x7e7e('0x4'));var config=require(_0x7e7e('0x5'));module[_0x7e7e('0x6')]=router;
\ No newline at end of file
index 1239fae..32a70df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x793c=['INTEGER','sequelize'];(function(_0x46688f,_0x302e66){var _0x5ee527=function(_0x38337c){while(--_0x38337c){_0x46688f['push'](_0x46688f['shift']());}};_0x5ee527(++_0x302e66);}(_0x793c,0x14f));var _0xc793=function(_0x47a349,_0x4699d9){_0x47a349=_0x47a349-0x0;var _0x18ab75=_0x793c[_0x47a349];return _0x18ab75;};'use strict';var Sequelize=require(_0xc793('0x0'));module['exports']={'penalty':{'type':Sequelize[_0xc793('0x1')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x462a=['exports','sequelize'];(function(_0x136dab,_0x53224d){var _0x40a311=function(_0x358c1e){while(--_0x358c1e){_0x136dab['push'](_0x136dab['shift']());}};_0x40a311(++_0x53224d);}(_0x462a,0x123));var _0xa462=function(_0x2239c1,_0x5595e5){_0x2239c1=_0x2239c1-0x0;var _0x3cd347=_0x462a[_0x2239c1];return _0x3cd347;};'use strict';var Sequelize=require(_0xa462('0x0'));module[_0xa462('0x1')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index 643a582..7faa374 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8013=['lodash','util','api','moment','bluebird','request-promise','exports','define','UserSmsQueue','user_has_sms_queues'];(function(_0x3ecb0f,_0x55fece){var _0x5630f7=function(_0x3cb64e){while(--_0x3cb64e){_0x3ecb0f['push'](_0x3ecb0f['shift']());}};_0x5630f7(++_0x55fece);}(_0x8013,0x1a4));var _0x3801=function(_0x15550a,_0x2f3e05){_0x15550a=_0x15550a-0x0;var _0x4e2e37=_0x8013[_0x15550a];return _0x4e2e37;};'use strict';var _=require(_0x3801('0x0'));var util=require(_0x3801('0x1'));var logger=require('../../config/logger')(_0x3801('0x2'));var moment=require(_0x3801('0x3'));var BPromise=require(_0x3801('0x4'));var rp=require(_0x3801('0x5'));var attributes=require('./userSmsQueue.attributes');module[_0x3801('0x6')]=function(_0x24675f,_0x23762f){return _0x24675f[_0x3801('0x7')](_0x3801('0x8'),attributes,{'tableName':_0x3801('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8bc1=['lodash','util','../../config/logger','api','moment','bluebird','request-promise','./userSmsQueue.attributes','exports','define','UserSmsQueue','user_has_sms_queues'];(function(_0x3a1904,_0x4297bf){var _0x4446e1=function(_0x4ea574){while(--_0x4ea574){_0x3a1904['push'](_0x3a1904['shift']());}};_0x4446e1(++_0x4297bf);}(_0x8bc1,0x84));var _0x18bc=function(_0x579f51,_0x4455b3){_0x579f51=_0x579f51-0x0;var _0x413e80=_0x8bc1[_0x579f51];return _0x413e80;};'use strict';var _=require(_0x18bc('0x0'));var util=require(_0x18bc('0x1'));var logger=require(_0x18bc('0x2'))(_0x18bc('0x3'));var moment=require(_0x18bc('0x4'));var BPromise=require(_0x18bc('0x5'));var rp=require(_0x18bc('0x6'));var attributes=require(_0x18bc('0x7'));module[_0x18bc('0x8')]=function(_0x414ad8,_0x480d91){return _0x414ad8[_0x18bc('0x9')](_0x18bc('0xa'),attributes,{'tableName':_0x18bc('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ce01c76..f7beffe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6f9=['code','message','error','result','catch','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','UserSmsQueue,\x20%s,\x20%s','UserSmsQueue,\x20%s,\x20%s,\x20%s','request\x20sent'];(function(_0xe1269d,_0x57b7c3){var _0x261ca1=function(_0x13b234){while(--_0x13b234){_0xe1269d['push'](_0xe1269d['shift']());}};_0x261ca1(++_0x57b7c3);}(_0xa6f9,0x1e9));var _0x9a6f=function(_0x4736da,_0x87f75b){_0x4736da=_0x4736da-0x0;var _0x4c42a1=_0xa6f9[_0x4736da];return _0x4c42a1;};'use strict';var _=require(_0x9a6f('0x0'));var util=require('util');var moment=require(_0x9a6f('0x1'));var BPromise=require(_0x9a6f('0x2'));var rs=require(_0x9a6f('0x3'));var fs=require('fs');var db=require(_0x9a6f('0x4'))['db'];var utils=require(_0x9a6f('0x5'));var logger=require(_0x9a6f('0x6'))(_0x9a6f('0x7'));var config=require('../../config/environment');var jayson=require(_0x9a6f('0x8'));var client=jayson[_0x9a6f('0x9')][_0x9a6f('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x529949,_0x3d6575,_0x3f5c22){return new BPromise(function(_0x156adc,_0x36d4f6){return client[_0x9a6f('0xb')](_0x529949,_0x3f5c22)[_0x9a6f('0xc')](function(_0x5acca7){logger[_0x9a6f('0xd')](_0x9a6f('0xe'),_0x3d6575,'request\x20sent');logger['debug'](_0x9a6f('0xf'),_0x3d6575,_0x9a6f('0x10'),JSON['stringify'](_0x5acca7));if(_0x5acca7['error']){if(_0x5acca7['error'][_0x9a6f('0x11')]===0x1f4){logger['error'](_0x9a6f('0xe'),_0x3d6575,_0x5acca7['error']['message']);return _0x36d4f6(_0x5acca7['error'][_0x9a6f('0x12')]);}logger[_0x9a6f('0x13')]('UserSmsQueue,\x20%s,\x20%s',_0x3d6575,_0x5acca7['error'][_0x9a6f('0x12')]);return _0x156adc(_0x5acca7['error'][_0x9a6f('0x12')]);}else{logger[_0x9a6f('0xd')](_0x9a6f('0xe'),_0x3d6575,'request\x20sent');_0x156adc(_0x5acca7[_0x9a6f('0x14')][_0x9a6f('0x12')]);}})[_0x9a6f('0x15')](function(_0x1d774a){logger[_0x9a6f('0x13')](_0x9a6f('0xe'),_0x3d6575,_0x1d774a);_0x36d4f6(_0x1d774a);});});}
\ No newline at end of file
+var _0x395a=['stringify','error','code','message','result','lodash','util','moment','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','then','info','UserSmsQueue,\x20%s,\x20%s','debug','UserSmsQueue,\x20%s,\x20%s,\x20%s','request\x20sent'];(function(_0xd2f4ac,_0x5aa8e5){var _0x9757b2=function(_0x442ced){while(--_0x442ced){_0xd2f4ac['push'](_0xd2f4ac['shift']());}};_0x9757b2(++_0x5aa8e5);}(_0x395a,0x159));var _0xa395=function(_0x77d310,_0x2b2fe7){_0x77d310=_0x77d310-0x0;var _0x2cdce4=_0x395a[_0x77d310];return _0x2cdce4;};'use strict';var _=require(_0xa395('0x0'));var util=require(_0xa395('0x1'));var moment=require(_0xa395('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xa395('0x3'));var logger=require(_0xa395('0x4'))(_0xa395('0x5'));var config=require('../../config/environment');var jayson=require(_0xa395('0x6'));var client=jayson[_0xa395('0x7')][_0xa395('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x4e38ad,_0x492f47,_0x397dc3){return new BPromise(function(_0x3a23c5,_0x39f352){return client['request'](_0x4e38ad,_0x397dc3)[_0xa395('0x9')](function(_0x5e4bf6){logger[_0xa395('0xa')](_0xa395('0xb'),_0x492f47,'request\x20sent');logger[_0xa395('0xc')](_0xa395('0xd'),_0x492f47,_0xa395('0xe'),JSON[_0xa395('0xf')](_0x5e4bf6));if(_0x5e4bf6[_0xa395('0x10')]){if(_0x5e4bf6[_0xa395('0x10')][_0xa395('0x11')]===0x1f4){logger[_0xa395('0x10')](_0xa395('0xb'),_0x492f47,_0x5e4bf6[_0xa395('0x10')][_0xa395('0x12')]);return _0x39f352(_0x5e4bf6[_0xa395('0x10')][_0xa395('0x12')]);}logger['error']('UserSmsQueue,\x20%s,\x20%s',_0x492f47,_0x5e4bf6[_0xa395('0x10')][_0xa395('0x12')]);return _0x3a23c5(_0x5e4bf6[_0xa395('0x10')][_0xa395('0x12')]);}else{logger['info'](_0xa395('0xb'),_0x492f47,_0xa395('0xe'));_0x3a23c5(_0x5e4bf6[_0xa395('0x13')]['message']);}})['catch'](function(_0x4c6b2a){logger[_0xa395('0x10')](_0xa395('0xb'),_0x492f47,_0x4c6b2a);_0x39f352(_0x4c6b2a);});});}
\ No newline at end of file
index 3a51ef3..1680679 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x39ae=['../../config/environment','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x2c3911,_0x25f413){var _0x2822ed=function(_0x144867){while(--_0x144867){_0x2c3911['push'](_0x2c3911['shift']());}};_0x2822ed(++_0x25f413);}(_0x39ae,0x1d6));var _0xe39a=function(_0x599f41,_0x4db732){_0x599f41=_0x599f41-0x0;var _0x2e4d58=_0x39ae[_0x599f41];return _0x2e4d58;};'use strict';var multer=require(_0xe39a('0x0'));var util=require(_0xe39a('0x1'));var path=require(_0xe39a('0x2'));var express=require(_0xe39a('0x3'));var router=express[_0xe39a('0x4')]();var auth=require(_0xe39a('0x5'));var interaction=require(_0xe39a('0x6'));var config=require(_0xe39a('0x7'));module[_0xe39a('0x8')]=router;
\ No newline at end of file
+var _0xcf86=['../../components/auth/service','../../components/interaction/service','exports','path','express'];(function(_0x1d8b9c,_0xc2cdd3){var _0x459bf4=function(_0xe2f94b){while(--_0xe2f94b){_0x1d8b9c['push'](_0x1d8b9c['shift']());}};_0x459bf4(++_0xc2cdd3);}(_0xcf86,0x76));var _0x6cf8=function(_0x5d80de,_0x2cf15d){_0x5d80de=_0x5d80de-0x0;var _0x1c7556=_0xcf86[_0x5d80de];return _0x1c7556;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x6cf8('0x0'));var express=require(_0x6cf8('0x1'));var router=express['Router']();var auth=require(_0x6cf8('0x2'));var interaction=require(_0x6cf8('0x3'));var config=require('../../config/environment');module[_0x6cf8('0x4')]=router;
\ No newline at end of file
index 5f9effc..cec151c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x25aa=['exports','sequelize'];(function(_0x471893,_0x2752a6){var _0x1a6495=function(_0x5e8a19){while(--_0x5e8a19){_0x471893['push'](_0x471893['shift']());}};_0x1a6495(++_0x2752a6);}(_0x25aa,0x77));var _0xa25a=function(_0x295a3d,_0x56d487){_0x295a3d=_0x295a3d-0x0;var _0x23a732=_0x25aa[_0x295a3d];return _0x23a732;};'use strict';var Sequelize=require(_0xa25a('0x0'));module[_0xa25a('0x1')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
+var _0x1203=['exports','INTEGER','sequelize'];(function(_0x2e0443,_0x7e5974){var _0x52d450=function(_0x3a9985){while(--_0x3a9985){_0x2e0443['push'](_0x2e0443['shift']());}};_0x52d450(++_0x7e5974);}(_0x1203,0xe0));var _0x3120=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x1203[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x3120('0x0'));module[_0x3120('0x1')]={'penalty':{'type':Sequelize[_0x3120('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index 91cbe6f..2817c21 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa560=['UserVoiceQueue','user_has_voice_queues','lodash','api','moment','./userVoiceQueue.attributes','exports','define'];(function(_0x3c7f79,_0x590a9b){var _0xb8dda0=function(_0x524aa3){while(--_0x524aa3){_0x3c7f79['push'](_0x3c7f79['shift']());}};_0xb8dda0(++_0x590a9b);}(_0xa560,0xfa));var _0x0a56=function(_0x59ee6f,_0x450239){_0x59ee6f=_0x59ee6f-0x0;var _0x4c0979=_0xa560[_0x59ee6f];return _0x4c0979;};'use strict';var _=require(_0x0a56('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x0a56('0x1'));var moment=require(_0x0a56('0x2'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x0a56('0x3'));module[_0x0a56('0x4')]=function(_0x4b40e9,_0x510e9f){return _0x4b40e9[_0x0a56('0x5')](_0x0a56('0x6'),attributes,{'tableName':_0x0a56('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2b82=['api','moment','bluebird','request-promise','./userVoiceQueue.attributes','exports','user_has_voice_queues','lodash','../../config/logger'];(function(_0x59fe6b,_0x2d43ae){var _0x4d1875=function(_0x3c2bbd){while(--_0x3c2bbd){_0x59fe6b['push'](_0x59fe6b['shift']());}};_0x4d1875(++_0x2d43ae);}(_0x2b82,0x73));var _0x22b8=function(_0x137332,_0x22dc60){_0x137332=_0x137332-0x0;var _0x4af806=_0x2b82[_0x137332];return _0x4af806;};'use strict';var _=require(_0x22b8('0x0'));var util=require('util');var logger=require(_0x22b8('0x1'))(_0x22b8('0x2'));var moment=require(_0x22b8('0x3'));var BPromise=require(_0x22b8('0x4'));var rp=require(_0x22b8('0x5'));var attributes=require(_0x22b8('0x6'));module[_0x22b8('0x7')]=function(_0x2baad7,_0x507f33){return _0x2baad7['define']('UserVoiceQueue',attributes,{'tableName':_0x22b8('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 3761678..6f6d3ab 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd4bc=['bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','http','request','then','info','UserVoiceQueue,\x20%s,\x20%s','request\x20sent','UserVoiceQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util'];(function(_0x4eb603,_0x5e4bb4){var _0x509d88=function(_0x1182b5){while(--_0x1182b5){_0x4eb603['push'](_0x4eb603['shift']());}};_0x509d88(++_0x5e4bb4);}(_0xd4bc,0x148));var _0xcd4b=function(_0x4169d8,_0x3d7cd4){_0x4169d8=_0x4169d8-0x0;var _0x32084a=_0xd4bc[_0x4169d8];return _0x32084a;};'use strict';var _=require(_0xcd4b('0x0'));var util=require(_0xcd4b('0x1'));var moment=require('moment');var BPromise=require(_0xcd4b('0x2'));var rs=require(_0xcd4b('0x3'));var fs=require('fs');var db=require(_0xcd4b('0x4'))['db'];var utils=require(_0xcd4b('0x5'));var logger=require(_0xcd4b('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0xcd4b('0x7'));var client=jayson[_0xcd4b('0x8')][_0xcd4b('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2d5405,_0x1ad5ea,_0x5aca79){return new BPromise(function(_0x1bc64f,_0x57244f){return client[_0xcd4b('0xa')](_0x2d5405,_0x5aca79)[_0xcd4b('0xb')](function(_0x49302c){logger[_0xcd4b('0xc')](_0xcd4b('0xd'),_0x1ad5ea,_0xcd4b('0xe'));logger['debug'](_0xcd4b('0xf'),_0x1ad5ea,'request\x20sent',JSON[_0xcd4b('0x10')](_0x49302c));if(_0x49302c[_0xcd4b('0x11')]){if(_0x49302c[_0xcd4b('0x11')][_0xcd4b('0x12')]===0x1f4){logger[_0xcd4b('0x11')]('UserVoiceQueue,\x20%s,\x20%s',_0x1ad5ea,_0x49302c['error'][_0xcd4b('0x13')]);return _0x57244f(_0x49302c[_0xcd4b('0x11')]['message']);}logger[_0xcd4b('0x11')](_0xcd4b('0xd'),_0x1ad5ea,_0x49302c[_0xcd4b('0x11')][_0xcd4b('0x13')]);return _0x1bc64f(_0x49302c['error']['message']);}else{logger[_0xcd4b('0xc')]('UserVoiceQueue,\x20%s,\x20%s',_0x1ad5ea,'request\x20sent');_0x1bc64f(_0x49302c[_0xcd4b('0x14')][_0xcd4b('0x13')]);}})[_0xcd4b('0x15')](function(_0x5983db){logger[_0xcd4b('0x11')](_0xcd4b('0xd'),_0x1ad5ea,_0x5983db);_0x57244f(_0x5983db);});});}
\ No newline at end of file
+var _0x36e9=['lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','debug','UserVoiceQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','UserVoiceQueue,\x20%s,\x20%s','result'];(function(_0x57410f,_0x38adce){var _0x3f4abe=function(_0x3a47b3){while(--_0x3a47b3){_0x57410f['push'](_0x57410f['shift']());}};_0x3f4abe(++_0x38adce);}(_0x36e9,0x150));var _0x936e=function(_0x3054be,_0x1bdc8b){_0x3054be=_0x3054be-0x0;var _0x3df150=_0x36e9[_0x3054be];return _0x3df150;};'use strict';var _=require(_0x936e('0x0'));var util=require(_0x936e('0x1'));var moment=require(_0x936e('0x2'));var BPromise=require(_0x936e('0x3'));var rs=require(_0x936e('0x4'));var fs=require('fs');var db=require(_0x936e('0x5'))['db'];var utils=require(_0x936e('0x6'));var logger=require('../../config/logger')(_0x936e('0x7'));var config=require(_0x936e('0x8'));var jayson=require(_0x936e('0x9'));var client=jayson[_0x936e('0xa')][_0x936e('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x1b9387,_0x329ef2,_0x1e60d1){return new BPromise(function(_0x3661ea,_0x28424d){return client[_0x936e('0xc')](_0x1b9387,_0x1e60d1)[_0x936e('0xd')](function(_0xa5d80d){logger[_0x936e('0xe')]('UserVoiceQueue,\x20%s,\x20%s',_0x329ef2,'request\x20sent');logger[_0x936e('0xf')](_0x936e('0x10'),_0x329ef2,_0x936e('0x11'),JSON[_0x936e('0x12')](_0xa5d80d));if(_0xa5d80d['error']){if(_0xa5d80d[_0x936e('0x13')][_0x936e('0x14')]===0x1f4){logger[_0x936e('0x13')]('UserVoiceQueue,\x20%s,\x20%s',_0x329ef2,_0xa5d80d['error'][_0x936e('0x15')]);return _0x28424d(_0xa5d80d[_0x936e('0x13')][_0x936e('0x15')]);}logger['error'](_0x936e('0x16'),_0x329ef2,_0xa5d80d[_0x936e('0x13')][_0x936e('0x15')]);return _0x3661ea(_0xa5d80d[_0x936e('0x13')][_0x936e('0x15')]);}else{logger['info'](_0x936e('0x16'),_0x329ef2,'request\x20sent');_0x3661ea(_0xa5d80d[_0x936e('0x17')][_0x936e('0x15')]);}})['catch'](function(_0x3a6e3c){logger[_0x936e('0x13')](_0x936e('0x16'),_0x329ef2,_0x3a6e3c);_0x28424d(_0x3a6e3c);});});}
\ No newline at end of file
index 62d2496..985d61c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6796=['path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','util'];(function(_0x24afd3,_0xcc36f0){var _0xffe96f=function(_0x4f9cb0){while(--_0x4f9cb0){_0x24afd3['push'](_0x24afd3['shift']());}};_0xffe96f(++_0xcc36f0);}(_0x6796,0xb7));var _0x6679=function(_0xbb091,_0x3fe7ee){_0xbb091=_0xbb091-0x0;var _0x467a04=_0x6796[_0xbb091];return _0x467a04;};'use strict';var multer=require('multer');var util=require(_0x6679('0x0'));var path=require(_0x6679('0x1'));var express=require(_0x6679('0x2'));var router=express[_0x6679('0x3')]();var auth=require(_0x6679('0x4'));var interaction=require(_0x6679('0x5'));var config=require(_0x6679('0x6'));module[_0x6679('0x7')]=router;
\ No newline at end of file
+var _0x5010=['Router','../../components/auth/service','../../components/interaction/service','exports','multer','util','path','express'];(function(_0x5e42a7,_0x3eba35){var _0x36d21b=function(_0x567f0a){while(--_0x567f0a){_0x5e42a7['push'](_0x5e42a7['shift']());}};_0x36d21b(++_0x3eba35);}(_0x5010,0x194));var _0x0501=function(_0x3443e4,_0x4a7dbc){_0x3443e4=_0x3443e4-0x0;var _0x35fed3=_0x5010[_0x3443e4];return _0x35fed3;};'use strict';var multer=require(_0x0501('0x0'));var util=require(_0x0501('0x1'));var path=require(_0x0501('0x2'));var express=require(_0x0501('0x3'));var router=express[_0x0501('0x4')]();var auth=require(_0x0501('0x5'));var interaction=require(_0x0501('0x6'));var config=require('../../config/environment');module[_0x0501('0x7')]=router;
\ No newline at end of file
index a390b07..64eb9a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfab7=['exports','INTEGER','Required\x20by\x20Asterisk','STRING','queue_interface'];(function(_0x165915,_0x23efe3){var _0x48458b=function(_0x2c3a23){while(--_0x2c3a23){_0x165915['push'](_0x165915['shift']());}};_0x48458b(++_0x23efe3);}(_0xfab7,0x1ea));var _0x7fab=function(_0x1cf51a,_0x1b64d4){_0x1cf51a=_0x1cf51a-0x0;var _0x45d930=_0xfab7[_0x1cf51a];return _0x45d930;};'use strict';var Sequelize=require('sequelize');module[_0x7fab('0x0')]={'uniqueid':{'type':Sequelize[_0x7fab('0x1')],'primaryKey':!![],'autoIncrement':!![],'comment':_0x7fab('0x2')},'membername':{'type':Sequelize[_0x7fab('0x3')],'allowNull':![],'comment':_0x7fab('0x2')},'UserId':{'type':Sequelize[_0x7fab('0x1')],'allowNull':![]},'queue_name':{'type':Sequelize[_0x7fab('0x3')],'allowNull':![],'unique':_0x7fab('0x4'),'comment':'Required\x20by\x20Asterisk'},'VoiceQueueId':{'type':Sequelize[_0x7fab('0x1')],'allowNull':![]},'interface':{'type':Sequelize[_0x7fab('0x3')],'allowNull':![],'unique':_0x7fab('0x4'),'comment':_0x7fab('0x2')},'penalty':{'type':Sequelize[_0x7fab('0x1')](0xb),'defaultValue':0x0,'comment':_0x7fab('0x2')},'paused':{'type':Sequelize[_0x7fab('0x1')](0xb),'defaultValue':0x0,'comment':_0x7fab('0x2')}};
\ No newline at end of file
+var _0x6e9c=['STRING','sequelize','exports','INTEGER','Required\x20by\x20Asterisk'];(function(_0x9a36ec,_0x7afd44){var _0x397955=function(_0x16e50e){while(--_0x16e50e){_0x9a36ec['push'](_0x9a36ec['shift']());}};_0x397955(++_0x7afd44);}(_0x6e9c,0x1e1));var _0xc6e9=function(_0x436fad,_0x5cacca){_0x436fad=_0x436fad-0x0;var _0x3872e8=_0x6e9c[_0x436fad];return _0x3872e8;};'use strict';var Sequelize=require(_0xc6e9('0x0'));module[_0xc6e9('0x1')]={'uniqueid':{'type':Sequelize[_0xc6e9('0x2')],'primaryKey':!![],'autoIncrement':!![],'comment':_0xc6e9('0x3')},'membername':{'type':Sequelize[_0xc6e9('0x4')],'allowNull':![],'comment':_0xc6e9('0x3')},'UserId':{'type':Sequelize[_0xc6e9('0x2')],'allowNull':![]},'queue_name':{'type':Sequelize[_0xc6e9('0x4')],'allowNull':![],'unique':'queue_interface','comment':_0xc6e9('0x3')},'VoiceQueueId':{'type':Sequelize['INTEGER'],'allowNull':![]},'interface':{'type':Sequelize[_0xc6e9('0x4')],'allowNull':![],'unique':'queue_interface','comment':_0xc6e9('0x3')},'penalty':{'type':Sequelize[_0xc6e9('0x2')](0xb),'defaultValue':0x0,'comment':_0xc6e9('0x3')},'paused':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0,'comment':_0xc6e9('0x3')}};
\ No newline at end of file
index 4f9836b..ad19b75 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd06f=['hook','exports','events','setMaxListeners','update','remove','emit','hasOwnProperty'];(function(_0x34db7f,_0x3e22f8){var _0x509554=function(_0x112764){while(--_0x112764){_0x34db7f['push'](_0x34db7f['shift']());}};_0x509554(++_0x3e22f8);}(_0xd06f,0xaa));var _0xfd06=function(_0x1533ee,_0x42126b){_0x1533ee=_0x1533ee-0x0;var _0x242798=_0xd06f[_0x1533ee];return _0x242798;};'use strict';var EventEmitter=require(_0xfd06('0x0'));var UserVoiceQueueRt=require('../../mysqldb')['db']['UserVoiceQueueRt'];var UserVoiceQueueRtEvents=new EventEmitter();UserVoiceQueueRtEvents[_0xfd06('0x1')](0x0);var events={'afterCreate':'save','afterUpdate':_0xfd06('0x2'),'afterDestroy':_0xfd06('0x3')};function emitEvent(_0x5904c5){return function(_0x259f23,_0x1bc2eb,_0x67b6a3){UserVoiceQueueRtEvents['emit'](_0x5904c5+':'+_0x259f23['id'],_0x259f23);UserVoiceQueueRtEvents[_0xfd06('0x4')](_0x5904c5,_0x259f23);_0x67b6a3(null);};}for(var e in events){if(events[_0xfd06('0x5')](e)){var event=events[e];UserVoiceQueueRt[_0xfd06('0x6')](e,emitEvent(event));}}module[_0xfd06('0x7')]=UserVoiceQueueRtEvents;
\ No newline at end of file
+var _0xc13d=['update','remove','emit','hasOwnProperty','hook','exports','UserVoiceQueueRt','setMaxListeners'];(function(_0x4601f5,_0x46485b){var _0x87b76e=function(_0x3aa261){while(--_0x3aa261){_0x4601f5['push'](_0x4601f5['shift']());}};_0x87b76e(++_0x46485b);}(_0xc13d,0xf6));var _0xdc13=function(_0x230f34,_0x184d05){_0x230f34=_0x230f34-0x0;var _0x307db5=_0xc13d[_0x230f34];return _0x307db5;};'use strict';var EventEmitter=require('events');var UserVoiceQueueRt=require('../../mysqldb')['db'][_0xdc13('0x0')];var UserVoiceQueueRtEvents=new EventEmitter();UserVoiceQueueRtEvents[_0xdc13('0x1')](0x0);var events={'afterCreate':'save','afterUpdate':_0xdc13('0x2'),'afterDestroy':_0xdc13('0x3')};function emitEvent(_0x30afc2){return function(_0x1cb699,_0x29549a,_0x169baf){UserVoiceQueueRtEvents[_0xdc13('0x4')](_0x30afc2+':'+_0x1cb699['id'],_0x1cb699);UserVoiceQueueRtEvents[_0xdc13('0x4')](_0x30afc2,_0x1cb699);_0x169baf(null);};}for(var e in events){if(events[_0xdc13('0x5')](e)){var event=events[e];UserVoiceQueueRt[_0xdc13('0x6')](e,emitEvent(event));}}module[_0xdc13('0x7')]=UserVoiceQueueRtEvents;
\ No newline at end of file
index df9a5cd..b2fd761 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1414=['UserVoiceQueueRt','user_has_voice_queues_rt','api','request-promise','define'];(function(_0x331243,_0x2546e5){var _0x470f0e=function(_0x31e898){while(--_0x31e898){_0x331243['push'](_0x331243['shift']());}};_0x470f0e(++_0x2546e5);}(_0x1414,0x1a6));var _0x4141=function(_0x12615b,_0x2573a2){_0x12615b=_0x12615b-0x0;var _0x1d7fae=_0x1414[_0x12615b];return _0x1d7fae;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')(_0x4141('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x4141('0x1'));var attributes=require('./userVoiceQueueRt.attributes');module['exports']=function(_0x50deb4,_0x57926f){return _0x50deb4[_0x4141('0x2')](_0x4141('0x3'),attributes,{'tableName':_0x4141('0x4'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa177=['api','moment','exports','define','UserVoiceQueueRt','user_has_voice_queues_rt','lodash','../../config/logger'];(function(_0x21782d,_0x5ba43d){var _0x4f5cef=function(_0x10f603){while(--_0x10f603){_0x21782d['push'](_0x21782d['shift']());}};_0x4f5cef(++_0x5ba43d);}(_0xa177,0xf6));var _0x7a17=function(_0x2b5e24,_0x5eedbf){_0x2b5e24=_0x2b5e24-0x0;var _0x13526b=_0xa177[_0x2b5e24];return _0x13526b;};'use strict';var _=require(_0x7a17('0x0'));var util=require('util');var logger=require(_0x7a17('0x1'))(_0x7a17('0x2'));var moment=require(_0x7a17('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require('./userVoiceQueueRt.attributes');module[_0x7a17('0x4')]=function(_0x3ff048,_0x57e6de){return _0x3ff048[_0x7a17('0x5')](_0x7a17('0x6'),attributes,{'tableName':_0x7a17('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 21fe79d..be2d2a5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbed7=['moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','register','request','then','info','UserVoiceQueueRt,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','catch','GetVoiceQueueRtPauses','UserVoiceQueueRt','findAll','options','raw','where','sequelize','COUNT','literal','`paused`\x20=\x201,\x201,\x20null','outboundQueuePauses','lodash','util'];(function(_0x21d3b4,_0x4d0bf6){var _0x47feea=function(_0x4d8a14){while(--_0x4d8a14){_0x21d3b4['push'](_0x21d3b4['shift']());}};_0x47feea(++_0x4d0bf6);}(_0xbed7,0x14b));var _0x7bed=function(_0x333103,_0x5cde1a){_0x333103=_0x333103-0x0;var _0x451500=_0xbed7[_0x333103];return _0x451500;};'use strict';var _=require(_0x7bed('0x0'));var util=require(_0x7bed('0x1'));var moment=require(_0x7bed('0x2'));var BPromise=require(_0x7bed('0x3'));var rs=require(_0x7bed('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x7bed('0x5'));var logger=require(_0x7bed('0x6'))(_0x7bed('0x7'));var config=require(_0x7bed('0x8'));var jayson=require(_0x7bed('0x9'));var client=jayson[_0x7bed('0xa')][_0x7bed('0xb')]({'port':0x232a});var socket=require(_0x7bed('0xc'))({'host':_0x7bed('0xd'),'port':0x18eb});require('./userVoiceQueueRt.socket')[_0x7bed('0xe')](socket);function respondWithRpcPromise(_0x27f7d9,_0x49e751,_0x1e4643){return new BPromise(function(_0x3439f5,_0x5a8766){return client[_0x7bed('0xf')](_0x27f7d9,_0x1e4643)[_0x7bed('0x10')](function(_0x4845e1){logger[_0x7bed('0x11')](_0x7bed('0x12'),_0x49e751,_0x7bed('0x13'));logger[_0x7bed('0x14')]('UserVoiceQueueRt,\x20%s,\x20%s,\x20%s',_0x49e751,_0x7bed('0x13'),JSON[_0x7bed('0x15')](_0x4845e1));if(_0x4845e1[_0x7bed('0x16')]){if(_0x4845e1[_0x7bed('0x16')][_0x7bed('0x17')]===0x1f4){logger[_0x7bed('0x16')]('UserVoiceQueueRt,\x20%s,\x20%s',_0x49e751,_0x4845e1[_0x7bed('0x16')][_0x7bed('0x18')]);return _0x5a8766(_0x4845e1[_0x7bed('0x16')][_0x7bed('0x18')]);}logger['error'](_0x7bed('0x12'),_0x49e751,_0x4845e1[_0x7bed('0x16')][_0x7bed('0x18')]);return _0x3439f5(_0x4845e1[_0x7bed('0x16')][_0x7bed('0x18')]);}else{logger[_0x7bed('0x11')](_0x7bed('0x12'),_0x49e751,'request\x20sent');_0x3439f5(_0x4845e1['result'][_0x7bed('0x18')]);}})[_0x7bed('0x19')](function(_0x278019){logger[_0x7bed('0x16')](_0x7bed('0x12'),_0x49e751,_0x278019);_0x5a8766(_0x278019);});});}exports[_0x7bed('0x1a')]=function(_0x210e7a){var _0x348e25=this;return new Promise(function(_0x164acf,_0x315607){return db[_0x7bed('0x1b')][_0x7bed('0x1c')]({'raw':_0x210e7a['options']?_0x210e7a[_0x7bed('0x1d')][_0x7bed('0x1e')]===undefined?!![]:![]:!![],'where':_0x210e7a[_0x7bed('0x1d')]?_0x210e7a[_0x7bed('0x1d')][_0x7bed('0x1f')]||null:null,'attributes':[[db[_0x7bed('0x20')]['fn'](_0x7bed('0x21'),db[_0x7bed('0x20')]['fn']('IF',db[_0x7bed('0x20')][_0x7bed('0x22')](_0x7bed('0x23')))),_0x7bed('0x24')]]})[_0x7bed('0x10')](function(_0x42c63f){logger[_0x7bed('0x11')]('GetVoiceQueueRtPauses',_0x210e7a);logger['debug']('GetVoiceQueueRtPauses',_0x210e7a,JSON['stringify'](_0x42c63f));_0x164acf(_0x42c63f);})[_0x7bed('0x19')](function(_0x5b9e5b){logger[_0x7bed('0x16')](_0x7bed('0x1a'),_0x5b9e5b[_0x7bed('0x18')],_0x210e7a);_0x315607(_0x348e25[_0x7bed('0x16')](0x1f4,_0x5b9e5b['message']));});});};
\ No newline at end of file
+var _0xe79f=['sequelize','COUNT','literal','outboundQueuePauses','GetVoiceQueueRtPauses','catch','lodash','moment','randomstring','rpc','../../config/environment','jayson/promise','socket.io-emitter','localhost','register','then','info','UserVoiceQueueRt,\x20%s,\x20%s,\x20%s','stringify','error','code','UserVoiceQueueRt,\x20%s,\x20%s','message','result','UserVoiceQueueRt','findAll','options','where'];(function(_0x1e726a,_0x4f3638){var _0x32faef=function(_0x50096f){while(--_0x50096f){_0x1e726a['push'](_0x1e726a['shift']());}};_0x32faef(++_0x4f3638);}(_0xe79f,0x13a));var _0xfe79=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xe79f[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xfe79('0x0'));var util=require('util');var moment=require(_0xfe79('0x1'));var BPromise=require('bluebird');var rs=require(_0xfe79('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xfe79('0x3'));var config=require(_0xfe79('0x4'));var jayson=require(_0xfe79('0x5'));var client=jayson['client']['http']({'port':0x232a});var socket=require(_0xfe79('0x6'))({'host':_0xfe79('0x7'),'port':0x18eb});require('./userVoiceQueueRt.socket')[_0xfe79('0x8')](socket);function respondWithRpcPromise(_0x2411bd,_0x5ee81d,_0x362308){return new BPromise(function(_0x1f775e,_0x548509){return client['request'](_0x2411bd,_0x362308)[_0xfe79('0x9')](function(_0x1a4d29){logger[_0xfe79('0xa')]('UserVoiceQueueRt,\x20%s,\x20%s',_0x5ee81d,'request\x20sent');logger['debug'](_0xfe79('0xb'),_0x5ee81d,'request\x20sent',JSON[_0xfe79('0xc')](_0x1a4d29));if(_0x1a4d29[_0xfe79('0xd')]){if(_0x1a4d29[_0xfe79('0xd')][_0xfe79('0xe')]===0x1f4){logger['error'](_0xfe79('0xf'),_0x5ee81d,_0x1a4d29[_0xfe79('0xd')][_0xfe79('0x10')]);return _0x548509(_0x1a4d29[_0xfe79('0xd')][_0xfe79('0x10')]);}logger['error'](_0xfe79('0xf'),_0x5ee81d,_0x1a4d29[_0xfe79('0xd')][_0xfe79('0x10')]);return _0x1f775e(_0x1a4d29[_0xfe79('0xd')][_0xfe79('0x10')]);}else{logger[_0xfe79('0xa')]('UserVoiceQueueRt,\x20%s,\x20%s',_0x5ee81d,'request\x20sent');_0x1f775e(_0x1a4d29[_0xfe79('0x11')]['message']);}})['catch'](function(_0x3903e3){logger[_0xfe79('0xd')]('UserVoiceQueueRt,\x20%s,\x20%s',_0x5ee81d,_0x3903e3);_0x548509(_0x3903e3);});});}exports['GetVoiceQueueRtPauses']=function(_0x193230){var _0x215e40=this;return new Promise(function(_0x8b92c3,_0x21d150){return db[_0xfe79('0x12')][_0xfe79('0x13')]({'raw':_0x193230[_0xfe79('0x14')]?_0x193230[_0xfe79('0x14')]['raw']===undefined?!![]:![]:!![],'where':_0x193230[_0xfe79('0x14')]?_0x193230[_0xfe79('0x14')][_0xfe79('0x15')]||null:null,'attributes':[[db[_0xfe79('0x16')]['fn'](_0xfe79('0x17'),db[_0xfe79('0x16')]['fn']('IF',db[_0xfe79('0x16')][_0xfe79('0x18')]('`paused`\x20=\x201,\x201,\x20null'))),_0xfe79('0x19')]]})[_0xfe79('0x9')](function(_0x3804b4){logger[_0xfe79('0xa')](_0xfe79('0x1a'),_0x193230);logger['debug']('GetVoiceQueueRtPauses',_0x193230,JSON['stringify'](_0x3804b4));_0x8b92c3(_0x3804b4);})[_0xfe79('0x1b')](function(_0x10138a){logger[_0xfe79('0xd')](_0xfe79('0x1a'),_0x10138a[_0xfe79('0x10')],_0x193230);_0x21d150(_0x215e40['error'](0x1f4,_0x10138a[_0xfe79('0x10')]));});});};
\ No newline at end of file
index 995117d..122338f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f4d=['update','emit','removeListener','register','length','userVoiceQueueRt:'];(function(_0x39ff03,_0x3ad4ef){var _0x48c100=function(_0x5e776a){while(--_0x5e776a){_0x39ff03['push'](_0x39ff03['shift']());}};_0x48c100(++_0x3ad4ef);}(_0x0f4d,0x12c));var _0xd0f4=function(_0x46f18c,_0xf6d872){_0x46f18c=_0x46f18c-0x0;var _0x37bded=_0x0f4d[_0x46f18c];return _0x37bded;};'use strict';var UserVoiceQueueRtEvents=require('./userVoiceQueueRt.events');var events=['save','remove',_0xd0f4('0x0')];function createListener(_0x5c8510,_0x20e395){return function(_0x2c06de){_0x20e395[_0xd0f4('0x1')](_0x5c8510,_0x2c06de);};}function removeListener(_0x347170,_0x1a9ba5){return function(){UserVoiceQueueRtEvents[_0xd0f4('0x2')](_0x347170,_0x1a9ba5);};}exports[_0xd0f4('0x3')]=function(_0x1d9a9d){for(var _0x531f85=0x0,_0x1164da=events[_0xd0f4('0x4')];_0x531f85<_0x1164da;_0x531f85++){var _0x4d0ab0=events[_0x531f85];var _0x3992be=createListener(_0xd0f4('0x5')+_0x4d0ab0,_0x1d9a9d);UserVoiceQueueRtEvents['on'](_0x4d0ab0,_0x3992be);}};
\ No newline at end of file
+var _0x31f0=['emit','removeListener','userVoiceQueueRt:','./userVoiceQueueRt.events','remove'];(function(_0x31bfbe,_0x46edad){var _0x1537a5=function(_0x12f533){while(--_0x12f533){_0x31bfbe['push'](_0x31bfbe['shift']());}};_0x1537a5(++_0x46edad);}(_0x31f0,0xb7));var _0x031f=function(_0x490266,_0x4131b4){_0x490266=_0x490266-0x0;var _0x1123ad=_0x31f0[_0x490266];return _0x1123ad;};'use strict';var UserVoiceQueueRtEvents=require(_0x031f('0x0'));var events=['save',_0x031f('0x1'),'update'];function createListener(_0x3747a5,_0x2021ea){return function(_0x2b04d4){_0x2021ea[_0x031f('0x2')](_0x3747a5,_0x2b04d4);};}function removeListener(_0x526a45,_0x3c0612){return function(){UserVoiceQueueRtEvents[_0x031f('0x3')](_0x526a45,_0x3c0612);};}exports['register']=function(_0x4c0f94){for(var _0x56328c=0x0,_0x3dc98e=events['length'];_0x56328c<_0x3dc98e;_0x56328c++){var _0x365f59=events[_0x56328c];var _0x4300b4=createListener(_0x031f('0x4')+_0x365f59,_0x4c0f94);UserVoiceQueueRtEvents['on'](_0x365f59,_0x4300b4);}};
\ No newline at end of file
index c210aef..167f554 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa7c3=['create','put','delete','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./variable.controller','get','isAuthenticated','index','/:id','show','post'];(function(_0x648515,_0x44c899){var _0x533c36=function(_0xbfdefc){while(--_0xbfdefc){_0x648515['push'](_0x648515['shift']());}};_0x533c36(++_0x44c899);}(_0xa7c3,0x124));var _0x3a7c=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xa7c3[_0x20a584];return _0x4b41a8;};'use strict';var multer=require(_0x3a7c('0x0'));var util=require('util');var path=require(_0x3a7c('0x1'));var express=require(_0x3a7c('0x2'));var router=express[_0x3a7c('0x3')]();var auth=require(_0x3a7c('0x4'));var interaction=require(_0x3a7c('0x5'));var config=require(_0x3a7c('0x6'));var controller=require(_0x3a7c('0x7'));router[_0x3a7c('0x8')]('/',auth[_0x3a7c('0x9')](),controller[_0x3a7c('0xa')]);router[_0x3a7c('0x8')](_0x3a7c('0xb'),auth[_0x3a7c('0x9')](),controller[_0x3a7c('0xc')]);router[_0x3a7c('0xd')]('/',auth['isAuthenticated'](),controller[_0x3a7c('0xe')]);router[_0x3a7c('0xf')](_0x3a7c('0xb'),auth[_0x3a7c('0x9')](),controller['update']);router[_0x3a7c('0x10')](_0x3a7c('0xb'),auth[_0x3a7c('0x9')](),controller['destroy']);module[_0x3a7c('0x11')]=router;
\ No newline at end of file
+var _0x0e72=['express','../../components/auth/service','../../components/interaction/service','../../config/environment','./variable.controller','get','isAuthenticated','index','post','create','/:id','update','delete','destroy','exports','multer','util','path'];(function(_0x284fe5,_0x4a914b){var _0x2deaa0=function(_0x2cbf3d){while(--_0x2cbf3d){_0x284fe5['push'](_0x284fe5['shift']());}};_0x2deaa0(++_0x4a914b);}(_0x0e72,0x141));var _0x20e7=function(_0x2e913b,_0x4b7071){_0x2e913b=_0x2e913b-0x0;var _0x173899=_0x0e72[_0x2e913b];return _0x173899;};'use strict';var multer=require(_0x20e7('0x0'));var util=require(_0x20e7('0x1'));var path=require(_0x20e7('0x2'));var express=require(_0x20e7('0x3'));var router=express['Router']();var auth=require(_0x20e7('0x4'));var interaction=require(_0x20e7('0x5'));var config=require(_0x20e7('0x6'));var controller=require(_0x20e7('0x7'));router[_0x20e7('0x8')]('/',auth[_0x20e7('0x9')](),controller[_0x20e7('0xa')]);router['get']('/:id',auth[_0x20e7('0x9')](),controller['show']);router[_0x20e7('0xb')]('/',auth['isAuthenticated'](),controller[_0x20e7('0xc')]);router['put'](_0x20e7('0xd'),auth['isAuthenticated'](),controller[_0x20e7('0xe')]);router[_0x20e7('0xf')](_0x20e7('0xd'),auth[_0x20e7('0x9')](),controller[_0x20e7('0x10')]);module[_0x20e7('0x11')]=router;
\ No newline at end of file
index 83dbec8..6e07f6e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfe33=['name','STRING','sequelize','exports'];(function(_0x56e818,_0xc4e2d7){var _0x565dcc=function(_0x3f596b){while(--_0x3f596b){_0x56e818['push'](_0x56e818['shift']());}};_0x565dcc(++_0xc4e2d7);}(_0xfe33,0x13e));var _0x3fe3=function(_0x2e2eab,_0x2e609a){_0x2e2eab=_0x2e2eab-0x0;var _0x2357bc=_0xfe33[_0x2e2eab];return _0x2357bc;};'use strict';var Sequelize=require(_0x3fe3('0x0'));module[_0x3fe3('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0x3fe3('0x2'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x3fe3('0x3')]}};
\ No newline at end of file
+var _0xd3e7=['STRING','sequelize'];(function(_0x245e10,_0x5ec265){var _0x2159ec=function(_0x1c09e2){while(--_0x1c09e2){_0x245e10['push'](_0x245e10['shift']());}};_0x2159ec(++_0x5ec265);}(_0xd3e7,0xe3));var _0x7d3e=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xd3e7[_0x20a584];return _0x4b41a8;};'use strict';var Sequelize=require(_0x7d3e('0x0'));module['exports']={'name':{'type':Sequelize[_0x7d3e('0x1')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index f74934b..b6058c1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfbf1=['mustache','util','sox','ejs','squel','jsforce','to-csv','../../config/logger','api','../../config/utils','status','end','count','offset','limit','set','Content-Range','json','reject','save','then','destroy','sendStatus','error','name','send','Variable','rawAttributes','model','keys','query','dateStart','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','dateEnd','add','day','merge','filter','map','includeAll','include','rows','show','options','find','create','body','catch','update','params','fast-json-patch','request-promise','moment'];(function(_0x16051a,_0x5e4326){var _0x35d20d=function(_0x52b02e){while(--_0x52b02e){_0x16051a['push'](_0x16051a['shift']());}};_0x35d20d(++_0x5e4326);}(_0xfbf1,0x16b));var _0x1fbf=function(_0x56b726,_0x28aaac){_0x56b726=_0x56b726-0x0;var _0x360997=_0xfbf1[_0x56b726];return _0x360997;};'use strict';var jsonpatch=require(_0x1fbf('0x0'));var rp=require(_0x1fbf('0x1'));var moment=require(_0x1fbf('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x1fbf('0x3'));var util=require(_0x1fbf('0x4'));var path=require('path');var sox=require(_0x1fbf('0x5'));var csv=require('to-csv');var ejs=require(_0x1fbf('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x1fbf('0x7'));var crypto=require('crypto');var jsforce=require(_0x1fbf('0x8'));var deskjs=require('desk.js');var toCsv=require(_0x1fbf('0x9'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0x1fbf('0xa'))(_0x1fbf('0xb'));var utils=require(_0x1fbf('0xc'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5f1795,_0x4d8c3b){_0x4d8c3b=_0x4d8c3b||0xcc;return function(_0xf33c3d){if(_0xf33c3d){return _0x5f1795['sendStatus'](_0x4d8c3b);}return _0x5f1795[_0x1fbf('0xd')](_0x4d8c3b)[_0x1fbf('0xe')]();};}function respondWithResult(_0x425943,_0x49fd98){_0x49fd98=_0x49fd98||0xc8;return function(_0x2202df){if(_0x2202df){return _0x425943['status'](_0x49fd98)['json'](_0x2202df);}};}function respondWithFilteredResult(_0x54fa75,_0x5e2edd){return function(_0x5b5192){if(_0x5b5192){var _0x4c79f7=_0x5b5192[_0x1fbf('0xf')],_0x3bf375=_0x5e2edd[_0x1fbf('0x10')],_0x1bc643=_0x5e2edd[_0x1fbf('0x10')]+_0x5e2edd[_0x1fbf('0x11')],_0x23be37;if(_0x1bc643>=_0x4c79f7){_0x1bc643=_0x4c79f7;_0x23be37=0xc8;}else{_0x23be37=0xce;}_0x54fa75['status'](_0x23be37);return _0x54fa75[_0x1fbf('0x12')](_0x1fbf('0x13'),_0x3bf375+'-'+_0x1bc643+'/'+_0x4c79f7)[_0x1fbf('0x14')](_0x5b5192);}return null;};}function patchUpdates(_0x4f6a51){return function(_0x43e945){try{jsonpatch['apply'](_0x43e945,_0x4f6a51,!![]);}catch(_0x24e4d1){return BPromise[_0x1fbf('0x15')](_0x24e4d1);}return _0x43e945[_0x1fbf('0x16')]();};}function saveUpdates(_0x5e2692,_0x3e21c1){return function(_0x495620){if(_0x495620){return _0x495620['update'](_0x5e2692)[_0x1fbf('0x17')](function(_0x40164e){return _0x40164e;});}return null;};}function removeEntity(_0x162cbf,_0x3b8b8b){return function(_0x3468a2){if(_0x3468a2){return _0x3468a2[_0x1fbf('0x18')]()[_0x1fbf('0x17')](function(){_0x162cbf[_0x1fbf('0xd')](0xcc)[_0x1fbf('0xe')]();});}};}function handleEntityNotFound(_0x510281,_0x434ab0){return function(_0x24dcaa){if(!_0x24dcaa){_0x510281[_0x1fbf('0x19')](0x194);}return _0x24dcaa;};}function handleError(_0x36eea6,_0x3222d2){_0x3222d2=_0x3222d2||0x1f4;return function(_0x57c445){logger[_0x1fbf('0x1a')](_0x57c445['stack']);if(_0x57c445[_0x1fbf('0x1b')]){delete _0x57c445[_0x1fbf('0x1b')];}_0x36eea6[_0x1fbf('0xd')](_0x3222d2)[_0x1fbf('0x1c')](_0x57c445);};}exports['index']=function(_0x57ba83,_0x1cc11){var _0x5aa2bf={},_0x4ceae6={},_0x4357e0={'count':0x0,'rows':[]};var _0x2c790f=db[_0x1fbf('0x1d')][_0x1fbf('0x1e')];_0x4ceae6[_0x1fbf('0x1f')]=_[_0x1fbf('0x20')](_0x2c790f);var _0x3bb62c={'dateStart':_0x57ba83[_0x1fbf('0x21')][_0x1fbf('0x22')],'dateEnd':_0x57ba83[_0x1fbf('0x21')]['dateEnd']};delete _0x57ba83['query'][_0x1fbf('0x22')];delete _0x57ba83[_0x1fbf('0x21')]['dateEnd'];_0x4ceae6[_0x1fbf('0x21')]=_[_0x1fbf('0x20')](_0x57ba83['query']);_0x4ceae6[_0x1fbf('0x23')]=_[_0x1fbf('0x24')](_0x4ceae6[_0x1fbf('0x1f')],_0x4ceae6[_0x1fbf('0x21')]);_0x5aa2bf[_0x1fbf('0x25')]=_[_0x1fbf('0x24')](_0x4ceae6[_0x1fbf('0x1f')],qs[_0x1fbf('0x26')](_0x57ba83[_0x1fbf('0x21')][_0x1fbf('0x26')]));_0x5aa2bf[_0x1fbf('0x25')]=_0x5aa2bf[_0x1fbf('0x25')][_0x1fbf('0x27')]?_0x5aa2bf[_0x1fbf('0x25')]:_0x4ceae6[_0x1fbf('0x1f')];if(!_0x57ba83['query'][_0x1fbf('0x28')](_0x1fbf('0x29'))){_0x5aa2bf[_0x1fbf('0x11')]=qs[_0x1fbf('0x11')](_0x57ba83['query']['limit']);_0x5aa2bf[_0x1fbf('0x10')]=qs[_0x1fbf('0x10')](_0x57ba83[_0x1fbf('0x21')][_0x1fbf('0x10')]);}_0x5aa2bf['order']=qs['sort'](_0x57ba83['query'][_0x1fbf('0x2a')]);_0x5aa2bf[_0x1fbf('0x2b')]=qs[_0x1fbf('0x23')](_['pick'](_0x57ba83['query'],_0x4ceae6[_0x1fbf('0x23')]));if(_0x3bb62c[_0x1fbf('0x22')]){if(_0x3bb62c[_0x1fbf('0x2c')]){_0x3bb62c[_0x1fbf('0x2c')]=moment(_0x3bb62c['dateEnd'])[_0x1fbf('0x2d')](0x1,_0x1fbf('0x2e'));}else{_0x3bb62c[_0x1fbf('0x2c')]=moment(_0x3bb62c[_0x1fbf('0x22')])[_0x1fbf('0x2d')](0x1,_0x1fbf('0x2e'));}_[_0x1fbf('0x2f')](_0x5aa2bf[_0x1fbf('0x2b')],{'createdAt':{'$gte':_0x3bb62c[_0x1fbf('0x22')],'$lte':_0x3bb62c['dateEnd']}});}if(_0x57ba83[_0x1fbf('0x21')][_0x1fbf('0x30')]){_0x5aa2bf[_0x1fbf('0x2b')]=_[_0x1fbf('0x2f')](_0x5aa2bf[_0x1fbf('0x2b')],{'$or':_[_0x1fbf('0x31')](_0x5aa2bf[_0x1fbf('0x25')],function(_0x314829){var _0x19ae32={};_0x19ae32[_0x314829]={'$like':'%'+_0x57ba83[_0x1fbf('0x21')][_0x1fbf('0x30')]+'%'};return _0x19ae32;})});}_0x5aa2bf=_[_0x1fbf('0x2f')]({},_0x5aa2bf,_0x57ba83['options']);var _0x55a3e0={'where':_0x5aa2bf[_0x1fbf('0x2b')]};return db[_0x1fbf('0x1d')]['count'](_0x55a3e0)[_0x1fbf('0x17')](function(_0x3efbfc){_0x4357e0[_0x1fbf('0xf')]=_0x3efbfc;if(_0x57ba83['query'][_0x1fbf('0x32')]){_0x5aa2bf[_0x1fbf('0x33')]=[{'all':!![]}];}return db['Variable']['findAll'](_0x5aa2bf);})['then'](function(_0x58a582){_0x4357e0[_0x1fbf('0x34')]=_0x58a582;return _0x4357e0;})[_0x1fbf('0x17')](respondWithFilteredResult(_0x1cc11,_0x5aa2bf))['catch'](handleError(_0x1cc11,null));};exports[_0x1fbf('0x35')]=function(_0x29ac0a,_0x133b6c){var _0x16d9f0={'raw':!![],'where':{'id':_0x29ac0a['params']['id']}},_0x4baaaa={};_0x4baaaa[_0x1fbf('0x1f')]=_[_0x1fbf('0x20')](db['Variable'][_0x1fbf('0x1e')]);_0x4baaaa['query']=_[_0x1fbf('0x20')](_0x29ac0a[_0x1fbf('0x21')]);_0x4baaaa[_0x1fbf('0x23')]=_['intersection'](_0x4baaaa['model'],_0x4baaaa[_0x1fbf('0x21')]);_0x16d9f0[_0x1fbf('0x25')]=_[_0x1fbf('0x24')](_0x4baaaa['model'],qs[_0x1fbf('0x26')](_0x29ac0a['query']['fields']));_0x16d9f0[_0x1fbf('0x25')]=_0x16d9f0[_0x1fbf('0x25')]['length']?_0x16d9f0[_0x1fbf('0x25')]:_0x4baaaa[_0x1fbf('0x1f')];if(_0x29ac0a[_0x1fbf('0x21')][_0x1fbf('0x32')]){_0x16d9f0[_0x1fbf('0x33')]=[{'all':!![]}];}_0x16d9f0=_[_0x1fbf('0x2f')]({},_0x16d9f0,_0x29ac0a[_0x1fbf('0x36')]);return db[_0x1fbf('0x1d')][_0x1fbf('0x37')](_0x16d9f0)[_0x1fbf('0x17')](handleEntityNotFound(_0x133b6c,null))[_0x1fbf('0x17')](respondWithResult(_0x133b6c,null))['catch'](handleError(_0x133b6c,null));};exports[_0x1fbf('0x38')]=function(_0x3d9d86,_0xf00ab3){return db['Variable'][_0x1fbf('0x38')](_0x3d9d86[_0x1fbf('0x39')],{})['then'](respondWithResult(_0xf00ab3,0xc9))[_0x1fbf('0x3a')](handleError(_0xf00ab3,null));};exports[_0x1fbf('0x3b')]=function(_0x4e2739,_0x33372d){if(_0x4e2739[_0x1fbf('0x39')]['id']){delete _0x4e2739[_0x1fbf('0x39')]['id'];}return db['Variable'][_0x1fbf('0x37')]({'where':{'id':_0x4e2739[_0x1fbf('0x3c')]['id']}})[_0x1fbf('0x17')](handleEntityNotFound(_0x33372d,null))[_0x1fbf('0x17')](saveUpdates(_0x4e2739['body'],null))[_0x1fbf('0x17')](respondWithResult(_0x33372d,null))[_0x1fbf('0x3a')](handleError(_0x33372d,null));};exports[_0x1fbf('0x18')]=function(_0x2b5f7b,_0x4f0c05){return db[_0x1fbf('0x1d')][_0x1fbf('0x37')]({'where':{'id':_0x2b5f7b[_0x1fbf('0x3c')]['id']}})[_0x1fbf('0x17')](handleEntityNotFound(_0x4f0c05,null))[_0x1fbf('0x17')](removeEntity(_0x4f0c05,null))['catch'](handleError(_0x4f0c05,null));};
\ No newline at end of file
+var _0x0188=['Variable','rawAttributes','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','add','day','merge','filter','where','options','count','include','findAll','rows','catch','params','includeAll','find','create','body','fast-json-patch','moment','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','json','offset','limit','set','update','then','destroy','end','error','stack','name','send','index'];(function(_0x36f46e,_0x50299c){var _0x1608fe=function(_0x408d49){while(--_0x408d49){_0x36f46e['push'](_0x36f46e['shift']());}};_0x1608fe(++_0x50299c);}(_0x0188,0x1a7));var _0x8018=function(_0x1a8f86,_0x5ed9c4){_0x1a8f86=_0x1a8f86-0x0;var _0x20d876=_0x0188[_0x1a8f86];return _0x20d876;};'use strict';var jsonpatch=require(_0x8018('0x0'));var rp=require('request-promise');var moment=require(_0x8018('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x8018('0x2'));var util=require(_0x8018('0x3'));var path=require(_0x8018('0x4'));var sox=require('sox');var csv=require(_0x8018('0x5'));var ejs=require(_0x8018('0x6'));var fs=require('fs');var _=require(_0x8018('0x7'));var squel=require(_0x8018('0x8'));var crypto=require(_0x8018('0x9'));var jsforce=require(_0x8018('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x8018('0xb'));var Papa=require(_0x8018('0xc'));var qs=require(_0x8018('0xd'));var logger=require(_0x8018('0xe'))('api');var utils=require(_0x8018('0xf'));var config=require(_0x8018('0x10'));var db=require(_0x8018('0x11'))['db'];function respondWithStatusCode(_0x523212,_0x8e883){_0x8e883=_0x8e883||0xcc;return function(_0x483652){if(_0x483652){return _0x523212['sendStatus'](_0x8e883);}return _0x523212[_0x8018('0x12')](_0x8e883)['end']();};}function respondWithResult(_0x41cc81,_0x1ab9a4){_0x1ab9a4=_0x1ab9a4||0xc8;return function(_0x4bb783){if(_0x4bb783){return _0x41cc81[_0x8018('0x12')](_0x1ab9a4)[_0x8018('0x13')](_0x4bb783);}};}function respondWithFilteredResult(_0x9e926a,_0x10a990){return function(_0xaf07b4){if(_0xaf07b4){var _0x1b7c93=_0xaf07b4['count'],_0x480fbf=_0x10a990[_0x8018('0x14')],_0xf0df20=_0x10a990['offset']+_0x10a990[_0x8018('0x15')],_0xe883da;if(_0xf0df20>=_0x1b7c93){_0xf0df20=_0x1b7c93;_0xe883da=0xc8;}else{_0xe883da=0xce;}_0x9e926a['status'](_0xe883da);return _0x9e926a[_0x8018('0x16')]('Content-Range',_0x480fbf+'-'+_0xf0df20+'/'+_0x1b7c93)[_0x8018('0x13')](_0xaf07b4);}return null;};}function patchUpdates(_0xe52e28){return function(_0x2ea20d){try{jsonpatch['apply'](_0x2ea20d,_0xe52e28,!![]);}catch(_0x2a7dee){return BPromise['reject'](_0x2a7dee);}return _0x2ea20d['save']();};}function saveUpdates(_0x33d1b9,_0x3701b3){return function(_0xabfa48){if(_0xabfa48){return _0xabfa48[_0x8018('0x17')](_0x33d1b9)[_0x8018('0x18')](function(_0x16ea56){return _0x16ea56;});}return null;};}function removeEntity(_0x218a04,_0x20ca58){return function(_0x5b72a6){if(_0x5b72a6){return _0x5b72a6[_0x8018('0x19')]()[_0x8018('0x18')](function(){_0x218a04[_0x8018('0x12')](0xcc)[_0x8018('0x1a')]();});}};}function handleEntityNotFound(_0x53ce5f,_0x9b063c){return function(_0x40281a){if(!_0x40281a){_0x53ce5f['sendStatus'](0x194);}return _0x40281a;};}function handleError(_0x5a8a01,_0x4fb304){_0x4fb304=_0x4fb304||0x1f4;return function(_0x1fdad1){logger[_0x8018('0x1b')](_0x1fdad1[_0x8018('0x1c')]);if(_0x1fdad1['name']){delete _0x1fdad1[_0x8018('0x1d')];}_0x5a8a01[_0x8018('0x12')](_0x4fb304)[_0x8018('0x1e')](_0x1fdad1);};}exports[_0x8018('0x1f')]=function(_0x3c4bee,_0x17f147){var _0x2d28ef={},_0x5a186c={},_0x58cf9d={'count':0x0,'rows':[]};var _0x5e5a53=db[_0x8018('0x20')][_0x8018('0x21')];_0x5a186c[_0x8018('0x22')]=_[_0x8018('0x23')](_0x5e5a53);var _0x282d8e={'dateStart':_0x3c4bee[_0x8018('0x24')][_0x8018('0x25')],'dateEnd':_0x3c4bee[_0x8018('0x24')][_0x8018('0x26')]};delete _0x3c4bee['query'][_0x8018('0x25')];delete _0x3c4bee['query'][_0x8018('0x26')];_0x5a186c[_0x8018('0x24')]=_[_0x8018('0x23')](_0x3c4bee[_0x8018('0x24')]);_0x5a186c[_0x8018('0x27')]=_[_0x8018('0x28')](_0x5a186c[_0x8018('0x22')],_0x5a186c['query']);_0x2d28ef[_0x8018('0x29')]=_[_0x8018('0x28')](_0x5a186c[_0x8018('0x22')],qs[_0x8018('0x2a')](_0x3c4bee[_0x8018('0x24')]['fields']));_0x2d28ef[_0x8018('0x29')]=_0x2d28ef['attributes'][_0x8018('0x2b')]?_0x2d28ef[_0x8018('0x29')]:_0x5a186c[_0x8018('0x22')];if(!_0x3c4bee[_0x8018('0x24')][_0x8018('0x2c')](_0x8018('0x2d'))){_0x2d28ef[_0x8018('0x15')]=qs[_0x8018('0x15')](_0x3c4bee[_0x8018('0x24')][_0x8018('0x15')]);_0x2d28ef[_0x8018('0x14')]=qs[_0x8018('0x14')](_0x3c4bee[_0x8018('0x24')]['offset']);}_0x2d28ef[_0x8018('0x2e')]=qs['sort'](_0x3c4bee[_0x8018('0x24')][_0x8018('0x2f')]);_0x2d28ef['where']=qs[_0x8018('0x27')](_[_0x8018('0x30')](_0x3c4bee[_0x8018('0x24')],_0x5a186c['filters']));if(_0x282d8e[_0x8018('0x25')]){if(_0x282d8e[_0x8018('0x26')]){_0x282d8e[_0x8018('0x26')]=moment(_0x282d8e[_0x8018('0x26')])[_0x8018('0x31')](0x1,_0x8018('0x32'));}else{_0x282d8e['dateEnd']=moment(_0x282d8e[_0x8018('0x25')])['add'](0x1,'day');}_[_0x8018('0x33')](_0x2d28ef['where'],{'createdAt':{'$gte':_0x282d8e[_0x8018('0x25')],'$lte':_0x282d8e[_0x8018('0x26')]}});}if(_0x3c4bee['query'][_0x8018('0x34')]){_0x2d28ef[_0x8018('0x35')]=_[_0x8018('0x33')](_0x2d28ef[_0x8018('0x35')],{'$or':_['map'](_0x2d28ef[_0x8018('0x29')],function(_0x2d28a6){var _0x4bac1c={};_0x4bac1c[_0x2d28a6]={'$like':'%'+_0x3c4bee[_0x8018('0x24')][_0x8018('0x34')]+'%'};return _0x4bac1c;})});}_0x2d28ef=_[_0x8018('0x33')]({},_0x2d28ef,_0x3c4bee[_0x8018('0x36')]);var _0x43b75f={'where':_0x2d28ef[_0x8018('0x35')]};return db[_0x8018('0x20')][_0x8018('0x37')](_0x43b75f)[_0x8018('0x18')](function(_0x2bfa54){_0x58cf9d[_0x8018('0x37')]=_0x2bfa54;if(_0x3c4bee[_0x8018('0x24')]['includeAll']){_0x2d28ef[_0x8018('0x38')]=[{'all':!![]}];}return db[_0x8018('0x20')][_0x8018('0x39')](_0x2d28ef);})[_0x8018('0x18')](function(_0x2f32a2){_0x58cf9d[_0x8018('0x3a')]=_0x2f32a2;return _0x58cf9d;})['then'](respondWithFilteredResult(_0x17f147,_0x2d28ef))[_0x8018('0x3b')](handleError(_0x17f147,null));};exports['show']=function(_0x35b2a9,_0x29b46d){var _0x2c14e8={'raw':!![],'where':{'id':_0x35b2a9[_0x8018('0x3c')]['id']}},_0x219695={};_0x219695['model']=_[_0x8018('0x23')](db[_0x8018('0x20')]['rawAttributes']);_0x219695[_0x8018('0x24')]=_['keys'](_0x35b2a9[_0x8018('0x24')]);_0x219695[_0x8018('0x27')]=_[_0x8018('0x28')](_0x219695[_0x8018('0x22')],_0x219695[_0x8018('0x24')]);_0x2c14e8[_0x8018('0x29')]=_['intersection'](_0x219695['model'],qs[_0x8018('0x2a')](_0x35b2a9[_0x8018('0x24')][_0x8018('0x2a')]));_0x2c14e8[_0x8018('0x29')]=_0x2c14e8[_0x8018('0x29')][_0x8018('0x2b')]?_0x2c14e8[_0x8018('0x29')]:_0x219695[_0x8018('0x22')];if(_0x35b2a9[_0x8018('0x24')][_0x8018('0x3d')]){_0x2c14e8[_0x8018('0x38')]=[{'all':!![]}];}_0x2c14e8=_[_0x8018('0x33')]({},_0x2c14e8,_0x35b2a9[_0x8018('0x36')]);return db['Variable'][_0x8018('0x3e')](_0x2c14e8)[_0x8018('0x18')](handleEntityNotFound(_0x29b46d,null))[_0x8018('0x18')](respondWithResult(_0x29b46d,null))[_0x8018('0x3b')](handleError(_0x29b46d,null));};exports[_0x8018('0x3f')]=function(_0x49f25f,_0x5cc698){return db['Variable'][_0x8018('0x3f')](_0x49f25f['body'],{})[_0x8018('0x18')](respondWithResult(_0x5cc698,0xc9))[_0x8018('0x3b')](handleError(_0x5cc698,null));};exports[_0x8018('0x17')]=function(_0x5d7ee8,_0x50a991){if(_0x5d7ee8['body']['id']){delete _0x5d7ee8[_0x8018('0x40')]['id'];}return db['Variable'][_0x8018('0x3e')]({'where':{'id':_0x5d7ee8[_0x8018('0x3c')]['id']}})[_0x8018('0x18')](handleEntityNotFound(_0x50a991,null))[_0x8018('0x18')](saveUpdates(_0x5d7ee8['body'],null))[_0x8018('0x18')](respondWithResult(_0x50a991,null))[_0x8018('0x3b')](handleError(_0x50a991,null));};exports[_0x8018('0x19')]=function(_0x377f73,_0x238465){return db['Variable'][_0x8018('0x3e')]({'where':{'id':_0x377f73[_0x8018('0x3c')]['id']}})['then'](handleEntityNotFound(_0x238465,null))[_0x8018('0x18')](removeEntity(_0x238465,null))[_0x8018('0x3b')](handleError(_0x238465,null));};
\ No newline at end of file
index 3f9d7ae..7abc834 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(_0x37222f,_0x25a5ab){var _0x5c5a6d=function(_0x27218b){while(--_0x27218b){_0x37222f['push'](_0x37222f['shift']());}};_0x5c5a6d(++_0x25a5ab);}(_0x7a54,0x106));var _0x47a5=function(_0x311a29,_0x2a7d53){_0x311a29=_0x311a29-0x0;var _0x5b607b=_0x7a54[_0x311a29];return _0x5b607b;};'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 _0x5fab=['request-promise','./variable.attributes','exports','define','Variable','lodash','util','api','moment','bluebird'];(function(_0x4452d4,_0x360749){var _0x410a50=function(_0x4c5a35){while(--_0x4c5a35){_0x4452d4['push'](_0x4452d4['shift']());}};_0x410a50(++_0x360749);}(_0x5fab,0x177));var _0xb5fa=function(_0x1ae491,_0x5b83b9){_0x1ae491=_0x1ae491-0x0;var _0x4958a5=_0x5fab[_0x1ae491];return _0x4958a5;};'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':'tools_variables','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 3b89eb7..d0a4e25 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd80a=['catch','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','client','http','then','info','Variable,\x20%s,\x20%s','debug','request\x20sent','stringify','error','message','result','ShowVariable','Variable','find','options','raw','where','include','map','model','attributes'];(function(_0x471a6b,_0x4f8dab){var _0x1691e8=function(_0x130ee4){while(--_0x130ee4){_0x471a6b['push'](_0x471a6b['shift']());}};_0x1691e8(++_0x4f8dab);}(_0xd80a,0xd3));var _0xad80=function(_0x3629a5,_0x455bcd){_0x3629a5=_0x3629a5-0x0;var _0x2b1bc0=_0xd80a[_0x3629a5];return _0x2b1bc0;};'use strict';var _=require(_0xad80('0x0'));var util=require(_0xad80('0x1'));var moment=require(_0xad80('0x2'));var BPromise=require('bluebird');var rs=require(_0xad80('0x3'));var fs=require('fs');var db=require(_0xad80('0x4'))['db'];var utils=require(_0xad80('0x5'));var logger=require('../../config/logger')(_0xad80('0x6'));var config=require(_0xad80('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xad80('0x8')][_0xad80('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x6361bc,_0x5cf3c9,_0x2d6050){return new BPromise(function(_0x25bcc6,_0x1b9bda){return client['request'](_0x6361bc,_0x2d6050)[_0xad80('0xa')](function(_0x106e52){logger[_0xad80('0xb')](_0xad80('0xc'),_0x5cf3c9,'request\x20sent');logger[_0xad80('0xd')]('Variable,\x20%s,\x20%s,\x20%s',_0x5cf3c9,_0xad80('0xe'),JSON[_0xad80('0xf')](_0x106e52));if(_0x106e52[_0xad80('0x10')]){if(_0x106e52[_0xad80('0x10')]['code']===0x1f4){logger[_0xad80('0x10')](_0xad80('0xc'),_0x5cf3c9,_0x106e52[_0xad80('0x10')]['message']);return _0x1b9bda(_0x106e52[_0xad80('0x10')][_0xad80('0x11')]);}logger[_0xad80('0x10')](_0xad80('0xc'),_0x5cf3c9,_0x106e52['error'][_0xad80('0x11')]);return _0x25bcc6(_0x106e52[_0xad80('0x10')][_0xad80('0x11')]);}else{logger[_0xad80('0xb')](_0xad80('0xc'),_0x5cf3c9,_0xad80('0xe'));_0x25bcc6(_0x106e52[_0xad80('0x12')][_0xad80('0x11')]);}})['catch'](function(_0xb0df4a){logger[_0xad80('0x10')]('Variable,\x20%s,\x20%s',_0x5cf3c9,_0xb0df4a);_0x1b9bda(_0xb0df4a);});});}exports[_0xad80('0x13')]=function(_0x13f8f0){var _0x368e23=this;return new Promise(function(_0x7cb28d,_0x4238be){return db[_0xad80('0x14')][_0xad80('0x15')]({'raw':_0x13f8f0[_0xad80('0x16')]?_0x13f8f0[_0xad80('0x16')][_0xad80('0x17')]===undefined?!![]:![]:!![],'where':_0x13f8f0['options']?_0x13f8f0[_0xad80('0x16')][_0xad80('0x18')]||null:null,'attributes':_0x13f8f0[_0xad80('0x16')]?_0x13f8f0['options']['attributes']||null:null,'include':_0x13f8f0[_0xad80('0x16')]?_0x13f8f0[_0xad80('0x16')][_0xad80('0x19')]?_[_0xad80('0x1a')](_0x13f8f0[_0xad80('0x16')][_0xad80('0x19')],function(_0x1a6f29){return{'model':db[_0x1a6f29[_0xad80('0x1b')]],'as':_0x1a6f29['as'],'attributes':_0x1a6f29[_0xad80('0x1c')],'include':_0x1a6f29[_0xad80('0x19')]?_['map'](_0x1a6f29[_0xad80('0x19')],function(_0x51b572){return{'model':db[_0x51b572[_0xad80('0x1b')]],'as':_0x51b572['as'],'attributes':_0x51b572['attributes'],'include':_0x51b572[_0xad80('0x19')]?_[_0xad80('0x1a')](_0x51b572[_0xad80('0x19')],function(_0xfe60e){return{'model':db[_0xfe60e[_0xad80('0x1b')]],'as':_0xfe60e['as'],'attributes':_0xfe60e[_0xad80('0x1c')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x3d4854){logger[_0xad80('0xb')](_0xad80('0x13'),_0x13f8f0);logger['debug'](_0xad80('0x13'),_0x13f8f0,JSON[_0xad80('0xf')](_0x3d4854));_0x7cb28d(_0x3d4854);})[_0xad80('0x1d')](function(_0x78d55e){logger['error'](_0xad80('0x13'),_0x78d55e['message'],_0x13f8f0);_0x4238be(_0x368e23[_0xad80('0x10')](0x1f4,_0x78d55e[_0xad80('0x11')]));});});};
\ No newline at end of file
+var _0x0f75=['include','map','model','attributes','lodash','util','moment','randomstring','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','request','then','info','Variable,\x20%s,\x20%s','request\x20sent','debug','Variable,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','ShowVariable','Variable','options','raw'];(function(_0x738d7,_0x497481){var _0x260ff4=function(_0x503925){while(--_0x503925){_0x738d7['push'](_0x738d7['shift']());}};_0x260ff4(++_0x497481);}(_0x0f75,0xf4));var _0x50f7=function(_0x11ca1c,_0x4dfd3d){_0x11ca1c=_0x11ca1c-0x0;var _0x2ec4c2=_0x0f75[_0x11ca1c];return _0x2ec4c2;};'use strict';var _=require(_0x50f7('0x0'));var util=require(_0x50f7('0x1'));var moment=require(_0x50f7('0x2'));var BPromise=require('bluebird');var rs=require(_0x50f7('0x3'));var fs=require('fs');var db=require(_0x50f7('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x50f7('0x5'))('rpc');var config=require(_0x50f7('0x6'));var jayson=require(_0x50f7('0x7'));var client=jayson[_0x50f7('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3a674c,_0x5eb7a6,_0x3f2420){return new BPromise(function(_0x1ff528,_0x1144e6){return client[_0x50f7('0x9')](_0x3a674c,_0x3f2420)[_0x50f7('0xa')](function(_0x1e0db3){logger[_0x50f7('0xb')](_0x50f7('0xc'),_0x5eb7a6,_0x50f7('0xd'));logger[_0x50f7('0xe')](_0x50f7('0xf'),_0x5eb7a6,_0x50f7('0xd'),JSON[_0x50f7('0x10')](_0x1e0db3));if(_0x1e0db3['error']){if(_0x1e0db3['error'][_0x50f7('0x11')]===0x1f4){logger['error'](_0x50f7('0xc'),_0x5eb7a6,_0x1e0db3[_0x50f7('0x12')]['message']);return _0x1144e6(_0x1e0db3[_0x50f7('0x12')]['message']);}logger[_0x50f7('0x12')](_0x50f7('0xc'),_0x5eb7a6,_0x1e0db3[_0x50f7('0x12')][_0x50f7('0x13')]);return _0x1ff528(_0x1e0db3[_0x50f7('0x12')][_0x50f7('0x13')]);}else{logger[_0x50f7('0xb')](_0x50f7('0xc'),_0x5eb7a6,_0x50f7('0xd'));_0x1ff528(_0x1e0db3[_0x50f7('0x14')][_0x50f7('0x13')]);}})[_0x50f7('0x15')](function(_0x46efb9){logger['error']('Variable,\x20%s,\x20%s',_0x5eb7a6,_0x46efb9);_0x1144e6(_0x46efb9);});});}exports[_0x50f7('0x16')]=function(_0x37d152){var _0x13c41c=this;return new Promise(function(_0x5afeb8,_0x3f85fb){return db[_0x50f7('0x17')]['find']({'raw':_0x37d152[_0x50f7('0x18')]?_0x37d152[_0x50f7('0x18')][_0x50f7('0x19')]===undefined?!![]:![]:!![],'where':_0x37d152[_0x50f7('0x18')]?_0x37d152['options']['where']||null:null,'attributes':_0x37d152[_0x50f7('0x18')]?_0x37d152[_0x50f7('0x18')]['attributes']||null:null,'include':_0x37d152[_0x50f7('0x18')]?_0x37d152['options'][_0x50f7('0x1a')]?_[_0x50f7('0x1b')](_0x37d152['options']['include'],function(_0x301d06){return{'model':db[_0x301d06[_0x50f7('0x1c')]],'as':_0x301d06['as'],'attributes':_0x301d06[_0x50f7('0x1d')],'include':_0x301d06[_0x50f7('0x1a')]?_[_0x50f7('0x1b')](_0x301d06[_0x50f7('0x1a')],function(_0x1732aa){return{'model':db[_0x1732aa[_0x50f7('0x1c')]],'as':_0x1732aa['as'],'attributes':_0x1732aa[_0x50f7('0x1d')],'include':_0x1732aa['include']?_['map'](_0x1732aa[_0x50f7('0x1a')],function(_0x4a09d1){return{'model':db[_0x4a09d1[_0x50f7('0x1c')]],'as':_0x4a09d1['as'],'attributes':_0x4a09d1[_0x50f7('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x50f7('0xa')](function(_0x2cdc79){logger[_0x50f7('0xb')]('ShowVariable',_0x37d152);logger['debug'](_0x50f7('0x16'),_0x37d152,JSON['stringify'](_0x2cdc79));_0x5afeb8(_0x2cdc79);})[_0x50f7('0x15')](function(_0x30e807){logger[_0x50f7('0x12')](_0x50f7('0x16'),_0x30e807['message'],_0x37d152);_0x3f85fb(_0x13c41c['error'](0x1f4,_0x30e807[_0x50f7('0x13')]));});});};
\ No newline at end of file
index 92dbd34..7b5db39 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c8b=['reset','pull','/restart','restart','/migrations','migrations','exports','express','../../components/auth/service','./version.controller','get','/fetch','isAuthenticated','canUpdate'];(function(_0x47e0b4,_0x337450){var _0x2b5eb0=function(_0x19977b){while(--_0x19977b){_0x47e0b4['push'](_0x47e0b4['shift']());}};_0x2b5eb0(++_0x337450);}(_0x1c8b,0x19d));var _0xb1c8=function(_0x2437d2,_0x26440a){_0x2437d2=_0x2437d2-0x0;var _0x2760a5=_0x1c8b[_0x2437d2];return _0x2760a5;};'use strict';var express=require(_0xb1c8('0x0'));var router=express['Router']();var auth=require(_0xb1c8('0x1'));var controller=require(_0xb1c8('0x2'));router[_0xb1c8('0x3')]('/',controller['index']);router[_0xb1c8('0x3')](_0xb1c8('0x4'),auth[_0xb1c8('0x5')](),auth[_0xb1c8('0x6')](),controller['fetch']);router[_0xb1c8('0x3')]('/reset',auth[_0xb1c8('0x5')](),auth[_0xb1c8('0x6')](),controller[_0xb1c8('0x7')]);router[_0xb1c8('0x3')]('/pull',auth[_0xb1c8('0x5')](),auth[_0xb1c8('0x6')](),controller[_0xb1c8('0x8')]);router[_0xb1c8('0x3')](_0xb1c8('0x9'),auth[_0xb1c8('0x5')](),controller[_0xb1c8('0xa')]);router[_0xb1c8('0x3')](_0xb1c8('0xb'),controller[_0xb1c8('0xc')]);module[_0xb1c8('0xd')]=router;
\ No newline at end of file
+var _0x5235=['/reset','isAuthenticated','reset','/pull','pull','/restart','restart','migrations','exports','express','get','index','/fetch','canUpdate'];(function(_0x312d7d,_0x140ac0){var _0x955e1e=function(_0x5a2922){while(--_0x5a2922){_0x312d7d['push'](_0x312d7d['shift']());}};_0x955e1e(++_0x140ac0);}(_0x5235,0x79));var _0x5523=function(_0x1667df,_0x266940){_0x1667df=_0x1667df-0x0;var _0x341abf=_0x5235[_0x1667df];return _0x341abf;};'use strict';var express=require(_0x5523('0x0'));var router=express['Router']();var auth=require('../../components/auth/service');var controller=require('./version.controller');router[_0x5523('0x1')]('/',controller[_0x5523('0x2')]);router['get'](_0x5523('0x3'),auth['isAuthenticated'](),auth[_0x5523('0x4')](),controller['fetch']);router['get'](_0x5523('0x5'),auth[_0x5523('0x6')](),auth[_0x5523('0x4')](),controller[_0x5523('0x7')]);router[_0x5523('0x1')](_0x5523('0x8'),auth['isAuthenticated'](),auth[_0x5523('0x4')](),controller[_0x5523('0x9')]);router[_0x5523('0x1')](_0x5523('0xa'),auth[_0x5523('0x6')](),controller[_0x5523('0xb')]);router[_0x5523('0x1')]('/migrations',controller[_0x5523('0xc')]);module[_0x5523('0xd')]=router;
\ No newline at end of file
index f702eb7..9069f53 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(_0x65397d,_0xf997ae){var _0x357509=function(_0xd16a93){while(--_0xd16a93){_0x65397d['push'](_0x65397d['shift']());}};_0x357509(++_0xf997ae);}(_0x9957,0x93));var _0x7995=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0x9957[_0x6131cd];return _0x47e916;};'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(_0x5b3e63,_0x53686e){var _0x2e8e4d=function(_0x5275bf){while(--_0x5275bf){_0x5b3e63['push'](_0x5b3e63['shift']());}};_0x2e8e4d(++_0x53686e);}(_0x9957,0x93));var _0x7995=function(_0x5ddb1c,_0x5ea4df){_0x5ddb1c=_0x5ddb1c-0x0;var _0x354adc=_0x9957[_0x5ddb1c];return _0x354adc;};'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 3be53df..086761c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['./voiceAgentReport.controller','get','isAuthenticated','index','/describe','/:id','show','post','create','put','update','delete','destroy','multer','path','express','Router','../../components/interaction/service','../../config/environment'];(function(_0x42111f,_0xad26f9){var _0x1bc8ef=function(_0x55a1ce){while(--_0x55a1ce){_0x42111f['push'](_0x42111f['shift']());}};_0x1bc8ef(++_0xad26f9);}(_0xb10b,0x12a));var _0xbb10=function(_0x5bfaa7,_0x404773){_0x5bfaa7=_0x5bfaa7-0x0;var _0xe1b1a3=_0xb10b[_0x5bfaa7];return _0xe1b1a3;};'use strict';var multer=require(_0xbb10('0x0'));var util=require('util');var path=require(_0xbb10('0x1'));var express=require(_0xbb10('0x2'));var router=express[_0xbb10('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xbb10('0x4'));var config=require(_0xbb10('0x5'));var controller=require(_0xbb10('0x6'));router[_0xbb10('0x7')]('/',auth[_0xbb10('0x8')](),controller[_0xbb10('0x9')]);router['get'](_0xbb10('0xa'),auth[_0xbb10('0x8')](),controller['describe']);router[_0xbb10('0x7')](_0xbb10('0xb'),auth[_0xbb10('0x8')](),controller[_0xbb10('0xc')]);router[_0xbb10('0xd')]('/',auth[_0xbb10('0x8')](),controller[_0xbb10('0xe')]);router[_0xbb10('0xf')]('/:id',auth['isAuthenticated'](),controller[_0xbb10('0x10')]);router[_0xbb10('0x11')](_0xbb10('0xb'),auth['isAuthenticated'](),controller[_0xbb10('0x12')]);module['exports']=router;
\ No newline at end of file
+var _0x7a54=['/describe','describe','create','put','/:id','destroy','exports','multer','util','path','Router','../../components/auth/service','../../config/environment','./voiceAgentReport.controller','get','isAuthenticated','index'];(function(_0x25517c,_0x1ce923){var _0x177cac=function(_0x467909){while(--_0x467909){_0x25517c['push'](_0x25517c['shift']());}};_0x177cac(++_0x1ce923);}(_0x7a54,0x106));var _0x47a5=function(_0x34c616,_0x2faff2){_0x34c616=_0x34c616-0x0;var _0x3853bb=_0x7a54[_0x34c616];return _0x3853bb;};'use strict';var multer=require(_0x47a5('0x0'));var util=require(_0x47a5('0x1'));var path=require(_0x47a5('0x2'));var express=require('express');var router=express[_0x47a5('0x3')]();var auth=require(_0x47a5('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x47a5('0x5'));var controller=require(_0x47a5('0x6'));router[_0x47a5('0x7')]('/',auth[_0x47a5('0x8')](),controller[_0x47a5('0x9')]);router['get'](_0x47a5('0xa'),auth['isAuthenticated'](),controller[_0x47a5('0xb')]);router[_0x47a5('0x7')]('/:id',auth[_0x47a5('0x8')](),controller['show']);router['post']('/',auth['isAuthenticated'](),controller[_0x47a5('0xc')]);router[_0x47a5('0xd')]('/:id',auth[_0x47a5('0x8')](),controller['update']);router['delete'](_0x47a5('0xe'),auth[_0x47a5('0x8')](),controller[_0x47a5('0xf')]);module[_0x47a5('0x10')]=router;
\ No newline at end of file
index ac16549..6f192f5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde21=['STRING','DATE','INTEGER','BOOLEAN','sequelize'];(function(_0x5f12fd,_0x33c70d){var _0x58bd80=function(_0x515f56){while(--_0x515f56){_0x5f12fd['push'](_0x5f12fd['shift']());}};_0x58bd80(++_0x33c70d);}(_0xde21,0x126));var _0x1de2=function(_0x30a4ac,_0x138cdb){_0x30a4ac=_0x30a4ac-0x0;var _0xde6ff9=_0xde21[_0x30a4ac];return _0xde6ff9;};'use strict';var Sequelize=require(_0x1de2('0x0'));module['exports']={'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x1de2('0x1')]},'calleridnum':{'type':Sequelize[_0x1de2('0x1')]},'calleridname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize['STRING']},'interface':{'type':Sequelize['STRING']},'membername':{'type':Sequelize[_0x1de2('0x1')]},'agentcalledAt':{'type':Sequelize[_0x1de2('0x2')]},'agentconnectAt':{'type':Sequelize[_0x1de2('0x2')]},'agentcompleteAt':{'type':Sequelize[_0x1de2('0x2')]},'agentringnoanswerAt':{'type':Sequelize['DATE']},'agentdumpAt':{'type':Sequelize[_0x1de2('0x2')]},'holdtime':{'type':Sequelize[_0x1de2('0x3')]},'agentcomplete':{'type':Sequelize[_0x1de2('0x4')],'defaultValue':![]},'agentringnoanswer':{'type':Sequelize[_0x1de2('0x4')],'defaultValue':![]},'agentdump':{'type':Sequelize[_0x1de2('0x4')],'defaultValue':![]},'talktime':{'type':Sequelize[_0x1de2('0x3')]},'agentacw':{'type':Sequelize[_0x1de2('0x4')],'defaultValue':![]},'acwtime':{'type':Sequelize['INTEGER']},'reason':{'type':Sequelize[_0x1de2('0x1')]},'lastevent':{'type':Sequelize[_0x1de2('0x1')]},'channel':{'type':Sequelize[_0x1de2('0x1')]},'channelstate':{'type':Sequelize[_0x1de2('0x3')]},'channelstatedesc':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize['STRING']},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize[_0x1de2('0x1')]},'accountcode':{'type':Sequelize[_0x1de2('0x1')]},'context':{'type':Sequelize[_0x1de2('0x1')]},'exten':{'type':Sequelize[_0x1de2('0x1')]},'priority':{'type':Sequelize[_0x1de2('0x1')]},'destchannel':{'type':Sequelize[_0x1de2('0x1')]},'destchannelstate':{'type':Sequelize[_0x1de2('0x3')]},'destchannelstatedesc':{'type':Sequelize[_0x1de2('0x1')]},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize['STRING']},'destconnectedlinenum':{'type':Sequelize[_0x1de2('0x1')]},'destconnectedlinename':{'type':Sequelize['STRING']},'destlanguage':{'type':Sequelize['STRING']},'destaccountcode':{'type':Sequelize['STRING']},'destcontext':{'type':Sequelize[_0x1de2('0x1')]},'destexten':{'type':Sequelize['STRING']},'destpriority':{'type':Sequelize['STRING']},'destuniqueid':{'type':Sequelize[_0x1de2('0x1')]},'answeredelsewheredestinationuniqueid':{'type':Sequelize[_0x1de2('0x1')]},'answeredelsewheremembername':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xef63=['DATE','BOOLEAN','INTEGER','sequelize','exports','STRING'];(function(_0x59ddd3,_0x21440c){var _0x49fb32=function(_0x35d5dd){while(--_0x35d5dd){_0x59ddd3['push'](_0x59ddd3['shift']());}};_0x49fb32(++_0x21440c);}(_0xef63,0xf3));var _0x3ef6=function(_0x436dc2,_0x400d04){_0x436dc2=_0x436dc2-0x0;var _0x2a52a5=_0xef63[_0x436dc2];return _0x2a52a5;};'use strict';var Sequelize=require(_0x3ef6('0x0'));module[_0x3ef6('0x1')]={'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x3ef6('0x2')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x3ef6('0x2')]},'queue':{'type':Sequelize[_0x3ef6('0x2')]},'interface':{'type':Sequelize[_0x3ef6('0x2')]},'membername':{'type':Sequelize[_0x3ef6('0x2')]},'agentcalledAt':{'type':Sequelize[_0x3ef6('0x3')]},'agentconnectAt':{'type':Sequelize['DATE']},'agentcompleteAt':{'type':Sequelize[_0x3ef6('0x3')]},'agentringnoanswerAt':{'type':Sequelize[_0x3ef6('0x3')]},'agentdumpAt':{'type':Sequelize[_0x3ef6('0x3')]},'holdtime':{'type':Sequelize['INTEGER']},'agentcomplete':{'type':Sequelize[_0x3ef6('0x4')],'defaultValue':![]},'agentringnoanswer':{'type':Sequelize[_0x3ef6('0x4')],'defaultValue':![]},'agentdump':{'type':Sequelize[_0x3ef6('0x4')],'defaultValue':![]},'talktime':{'type':Sequelize[_0x3ef6('0x5')]},'agentacw':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'acwtime':{'type':Sequelize[_0x3ef6('0x5')]},'reason':{'type':Sequelize[_0x3ef6('0x2')]},'lastevent':{'type':Sequelize[_0x3ef6('0x2')]},'channel':{'type':Sequelize[_0x3ef6('0x2')]},'channelstate':{'type':Sequelize[_0x3ef6('0x5')]},'channelstatedesc':{'type':Sequelize[_0x3ef6('0x2')]},'connectedlinenum':{'type':Sequelize[_0x3ef6('0x2')]},'connectedlinename':{'type':Sequelize[_0x3ef6('0x2')]},'language':{'type':Sequelize[_0x3ef6('0x2')]},'accountcode':{'type':Sequelize[_0x3ef6('0x2')]},'context':{'type':Sequelize[_0x3ef6('0x2')]},'exten':{'type':Sequelize[_0x3ef6('0x2')]},'priority':{'type':Sequelize[_0x3ef6('0x2')]},'destchannel':{'type':Sequelize['STRING']},'destchannelstate':{'type':Sequelize[_0x3ef6('0x5')]},'destchannelstatedesc':{'type':Sequelize['STRING']},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize[_0x3ef6('0x2')]},'destconnectedlinenum':{'type':Sequelize[_0x3ef6('0x2')]},'destconnectedlinename':{'type':Sequelize[_0x3ef6('0x2')]},'destlanguage':{'type':Sequelize[_0x3ef6('0x2')]},'destaccountcode':{'type':Sequelize[_0x3ef6('0x2')]},'destcontext':{'type':Sequelize['STRING']},'destexten':{'type':Sequelize[_0x3ef6('0x2')]},'destpriority':{'type':Sequelize[_0x3ef6('0x2')]},'destuniqueid':{'type':Sequelize[_0x3ef6('0x2')]},'answeredelsewheredestinationuniqueid':{'type':Sequelize[_0x3ef6('0x2')]},'answeredelsewheremembername':{'type':Sequelize[_0x3ef6('0x2')]}};
\ No newline at end of file
index 4d342a6..808046a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcca7=['pick','add','day','filter','merge','map','findAll','catch','show','params','includeAll','include','options','find','create','body','update','describe','fast-json-patch','request-promise','moment','bluebird','path','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','apply','reject','then','destroy','error','stack','name','send','VoiceAgentReport','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where'];(function(_0x1505be,_0x880a3c){var _0x52084f=function(_0x5610bc){while(--_0x5610bc){_0x1505be['push'](_0x1505be['shift']());}};_0x52084f(++_0x880a3c);}(_0xcca7,0x1aa));var _0x7cca=function(_0x4959df,_0x13a285){_0x4959df=_0x4959df-0x0;var _0x209a5f=_0xcca7[_0x4959df];return _0x209a5f;};'use strict';var jsonpatch=require(_0x7cca('0x0'));var rp=require(_0x7cca('0x1'));var moment=require(_0x7cca('0x2'));var BPromise=require(_0x7cca('0x3'));var Mustache=require('mustache');var util=require('util');var path=require(_0x7cca('0x4'));var sox=require('sox');var csv=require(_0x7cca('0x5'));var ejs=require(_0x7cca('0x6'));var fs=require('fs');var _=require(_0x7cca('0x7'));var squel=require(_0x7cca('0x8'));var crypto=require(_0x7cca('0x9'));var jsforce=require(_0x7cca('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x7cca('0xb'));var Papa=require(_0x7cca('0xc'));var qs=require(_0x7cca('0xd'));var logger=require(_0x7cca('0xe'))(_0x7cca('0xf'));var utils=require(_0x7cca('0x10'));var config=require(_0x7cca('0x11'));var db=require(_0x7cca('0x12'))['db'];function respondWithStatusCode(_0x27323a,_0x1a773e){_0x1a773e=_0x1a773e||0xcc;return function(_0x53b5f6){if(_0x53b5f6){return _0x27323a[_0x7cca('0x13')](_0x1a773e);}return _0x27323a[_0x7cca('0x14')](_0x1a773e)[_0x7cca('0x15')]();};}function respondWithResult(_0x34e14f,_0x25a65a){_0x25a65a=_0x25a65a||0xc8;return function(_0x4b7b66){if(_0x4b7b66){return _0x34e14f[_0x7cca('0x14')](_0x25a65a)[_0x7cca('0x16')](_0x4b7b66);}};}function respondWithFilteredResult(_0x2854c7,_0x4d0d6d){return function(_0x54e492){if(_0x54e492){var _0x8ea157=_0x54e492[_0x7cca('0x17')],_0x20c1b2=_0x4d0d6d[_0x7cca('0x18')],_0x27d671=_0x4d0d6d[_0x7cca('0x18')]+_0x4d0d6d['limit'],_0x847cce;if(_0x27d671>=_0x8ea157){_0x27d671=_0x8ea157;_0x847cce=0xc8;}else{_0x847cce=0xce;}_0x2854c7[_0x7cca('0x14')](_0x847cce);return _0x2854c7['set']('Content-Range',_0x20c1b2+'-'+_0x27d671+'/'+_0x8ea157)['json'](_0x54e492);}return null;};}function patchUpdates(_0x33a466){return function(_0xbaf563){try{jsonpatch[_0x7cca('0x19')](_0xbaf563,_0x33a466,!![]);}catch(_0x33db6b){return BPromise[_0x7cca('0x1a')](_0x33db6b);}return _0xbaf563['save']();};}function saveUpdates(_0xb35e1d,_0x4fba9e){return function(_0x5d47f8){if(_0x5d47f8){return _0x5d47f8['update'](_0xb35e1d)[_0x7cca('0x1b')](function(_0x25297b){return _0x25297b;});}return null;};}function removeEntity(_0x2beb6c,_0x1a20be){return function(_0x36ba41){if(_0x36ba41){return _0x36ba41[_0x7cca('0x1c')]()[_0x7cca('0x1b')](function(){_0x2beb6c[_0x7cca('0x14')](0xcc)['end']();});}};}function handleEntityNotFound(_0x31baf4,_0x3154b0){return function(_0x165d13){if(!_0x165d13){_0x31baf4[_0x7cca('0x13')](0x194);}return _0x165d13;};}function handleError(_0x55b689,_0x144a26){_0x144a26=_0x144a26||0x1f4;return function(_0x337a9e){logger[_0x7cca('0x1d')](_0x337a9e[_0x7cca('0x1e')]);if(_0x337a9e[_0x7cca('0x1f')]){delete _0x337a9e[_0x7cca('0x1f')];}_0x55b689[_0x7cca('0x14')](_0x144a26)[_0x7cca('0x20')](_0x337a9e);};}exports['index']=function(_0xfe121c,_0x1dd3b3){var _0x1774fc={},_0xdaf07f={},_0x41d7c1={'count':0x0,'rows':[]};var _0x21da68=db[_0x7cca('0x21')][_0x7cca('0x22')];_0xdaf07f['model']=_[_0x7cca('0x23')](_0x21da68);var _0x5c8410={'dateStart':_0xfe121c[_0x7cca('0x24')][_0x7cca('0x25')],'dateEnd':_0xfe121c['query'][_0x7cca('0x26')]};delete _0xfe121c[_0x7cca('0x24')]['dateStart'];delete _0xfe121c[_0x7cca('0x24')][_0x7cca('0x26')];_0xdaf07f[_0x7cca('0x24')]=_['keys'](_0xfe121c['query']);_0xdaf07f[_0x7cca('0x27')]=_[_0x7cca('0x28')](_0xdaf07f[_0x7cca('0x29')],_0xdaf07f[_0x7cca('0x24')]);_0x1774fc[_0x7cca('0x2a')]=_[_0x7cca('0x28')](_0xdaf07f[_0x7cca('0x29')],qs['fields'](_0xfe121c['query'][_0x7cca('0x2b')]));_0x1774fc[_0x7cca('0x2a')]=_0x1774fc[_0x7cca('0x2a')]['length']?_0x1774fc[_0x7cca('0x2a')]:_0xdaf07f['model'];if(!_0xfe121c[_0x7cca('0x24')][_0x7cca('0x2c')](_0x7cca('0x2d'))){_0x1774fc[_0x7cca('0x2e')]=qs['limit'](_0xfe121c[_0x7cca('0x24')][_0x7cca('0x2e')]);_0x1774fc[_0x7cca('0x18')]=qs['offset'](_0xfe121c['query']['offset']);}_0x1774fc[_0x7cca('0x2f')]=qs[_0x7cca('0x30')](_0xfe121c['query'][_0x7cca('0x30')]);_0x1774fc[_0x7cca('0x31')]=qs[_0x7cca('0x27')](_[_0x7cca('0x32')](_0xfe121c[_0x7cca('0x24')],_0xdaf07f[_0x7cca('0x27')]));if(_0x5c8410[_0x7cca('0x25')]){if(_0x5c8410['dateEnd']){_0x5c8410[_0x7cca('0x26')]=moment(_0x5c8410[_0x7cca('0x26')])[_0x7cca('0x33')](0x1,_0x7cca('0x34'));}else{_0x5c8410['dateEnd']=moment(_0x5c8410[_0x7cca('0x25')])[_0x7cca('0x33')](0x1,_0x7cca('0x34'));}_['merge'](_0x1774fc[_0x7cca('0x31')],{'createdAt':{'$gte':_0x5c8410['dateStart'],'$lte':_0x5c8410[_0x7cca('0x26')]}});}if(_0xfe121c[_0x7cca('0x24')][_0x7cca('0x35')]){_0x1774fc[_0x7cca('0x31')]=_[_0x7cca('0x36')](_0x1774fc[_0x7cca('0x31')],{'$or':_[_0x7cca('0x37')](_0x1774fc[_0x7cca('0x2a')],function(_0x3617b8){var _0x4f1f11={};_0x4f1f11[_0x3617b8]={'$like':'%'+_0xfe121c['query'][_0x7cca('0x35')]+'%'};return _0x4f1f11;})});}_0x1774fc=_[_0x7cca('0x36')]({},_0x1774fc,_0xfe121c['options']);var _0x48d87f={'where':_0x1774fc[_0x7cca('0x31')]};return db[_0x7cca('0x21')][_0x7cca('0x17')](_0x48d87f)[_0x7cca('0x1b')](function(_0x371c67){_0x41d7c1['count']=_0x371c67;if(_0xfe121c[_0x7cca('0x24')]['includeAll']){_0x1774fc['include']=[{'all':!![]}];}return db[_0x7cca('0x21')][_0x7cca('0x38')](_0x1774fc);})['then'](function(_0x3b120b){_0x41d7c1['rows']=_0x3b120b;return _0x41d7c1;})[_0x7cca('0x1b')](respondWithFilteredResult(_0x1dd3b3,_0x1774fc))[_0x7cca('0x39')](handleError(_0x1dd3b3,null));};exports[_0x7cca('0x3a')]=function(_0x47e2e6,_0xb966da){var _0x207250={'raw':![],'where':{'id':_0x47e2e6[_0x7cca('0x3b')]['id']}},_0x2e8d97={};_0x2e8d97['model']=_[_0x7cca('0x23')](db[_0x7cca('0x21')][_0x7cca('0x22')]);_0x2e8d97[_0x7cca('0x24')]=_[_0x7cca('0x23')](_0x47e2e6[_0x7cca('0x24')]);_0x2e8d97['filters']=_['intersection'](_0x2e8d97['model'],_0x2e8d97['query']);_0x207250[_0x7cca('0x2a')]=_['intersection'](_0x2e8d97['model'],qs[_0x7cca('0x2b')](_0x47e2e6[_0x7cca('0x24')][_0x7cca('0x2b')]));_0x207250[_0x7cca('0x2a')]=_0x207250[_0x7cca('0x2a')]['length']?_0x207250[_0x7cca('0x2a')]:_0x2e8d97[_0x7cca('0x29')];if(_0x47e2e6[_0x7cca('0x24')][_0x7cca('0x3c')]){_0x207250[_0x7cca('0x3d')]=[{'all':!![]}];}_0x207250=_[_0x7cca('0x36')]({},_0x207250,_0x47e2e6[_0x7cca('0x3e')]);return db[_0x7cca('0x21')][_0x7cca('0x3f')](_0x207250)[_0x7cca('0x1b')](handleEntityNotFound(_0xb966da,null))[_0x7cca('0x1b')](respondWithResult(_0xb966da,null))['catch'](handleError(_0xb966da,null));};exports['create']=function(_0x36f12f,_0x5913eb){return db[_0x7cca('0x21')][_0x7cca('0x40')](_0x36f12f[_0x7cca('0x41')],{})[_0x7cca('0x1b')](respondWithResult(_0x5913eb,0xc9))[_0x7cca('0x39')](handleError(_0x5913eb,null));};exports[_0x7cca('0x42')]=function(_0x184b56,_0xe0059e){if(_0x184b56[_0x7cca('0x41')]['id']){delete _0x184b56[_0x7cca('0x41')]['id'];}return db['VoiceAgentReport'][_0x7cca('0x3f')]({'where':{'id':_0x184b56[_0x7cca('0x3b')]['id']}})[_0x7cca('0x1b')](handleEntityNotFound(_0xe0059e,null))[_0x7cca('0x1b')](saveUpdates(_0x184b56[_0x7cca('0x41')],null))[_0x7cca('0x1b')](respondWithResult(_0xe0059e,null))[_0x7cca('0x39')](handleError(_0xe0059e,null));};exports[_0x7cca('0x1c')]=function(_0x218114,_0x43c581){return db[_0x7cca('0x21')][_0x7cca('0x3f')]({'where':{'id':_0x218114[_0x7cca('0x3b')]['id']}})[_0x7cca('0x1b')](handleEntityNotFound(_0x43c581,null))[_0x7cca('0x1b')](removeEntity(_0x43c581,null))[_0x7cca('0x39')](handleError(_0x43c581,null));};exports[_0x7cca('0x43')]=function(_0x27c527,_0x343a64){return db[_0x7cca('0x21')][_0x7cca('0x43')]()[_0x7cca('0x1b')](respondWithResult(_0x343a64,null))[_0x7cca('0x39')](handleError(_0x343a64,null));};
\ No newline at end of file
+var _0x207c=['includeAll','include','findAll','rows','catch','show','params','rawAttributes','find','create','body','describe','request-promise','moment','bluebird','mustache','util','path','sox','ejs','jsforce','desk.js','to-csv','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','count','offset','Content-Range','json','reject','save','update','then','destroy','end','error','stack','name','send','index','VoiceAgentReport','model','query','dateStart','dateEnd','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','add','day','where','merge','filter','options'];(function(_0x1b7cb2,_0x1e61e5){var _0x54f7ba=function(_0x3b375f){while(--_0x3b375f){_0x1b7cb2['push'](_0x1b7cb2['shift']());}};_0x54f7ba(++_0x1e61e5);}(_0x207c,0x1e8));var _0xc207=function(_0xdb951d,_0x1dc42b){_0xdb951d=_0xdb951d-0x0;var _0x5e789e=_0x207c[_0xdb951d];return _0x5e789e;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xc207('0x0'));var moment=require(_0xc207('0x1'));var BPromise=require(_0xc207('0x2'));var Mustache=require(_0xc207('0x3'));var util=require(_0xc207('0x4'));var path=require(_0xc207('0x5'));var sox=require(_0xc207('0x6'));var csv=require('to-csv');var ejs=require(_0xc207('0x7'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xc207('0x8'));var deskjs=require(_0xc207('0x9'));var toCsv=require(_0xc207('0xa'));var querystring=require('querystring');var Papa=require(_0xc207('0xb'));var qs=require(_0xc207('0xc'));var logger=require(_0xc207('0xd'))('api');var utils=require(_0xc207('0xe'));var config=require(_0xc207('0xf'));var db=require(_0xc207('0x10'))['db'];function respondWithStatusCode(_0x13ec41,_0x201162){_0x201162=_0x201162||0xcc;return function(_0x347549){if(_0x347549){return _0x13ec41['sendStatus'](_0x201162);}return _0x13ec41['status'](_0x201162)['end']();};}function respondWithResult(_0x19b297,_0x491062){_0x491062=_0x491062||0xc8;return function(_0x2741f3){if(_0x2741f3){return _0x19b297[_0xc207('0x11')](_0x491062)['json'](_0x2741f3);}};}function respondWithFilteredResult(_0x3e1108,_0xb86b06){return function(_0x3062f5){if(_0x3062f5){var _0x32acbf=_0x3062f5[_0xc207('0x12')],_0xe993a0=_0xb86b06[_0xc207('0x13')],_0x51e967=_0xb86b06[_0xc207('0x13')]+_0xb86b06['limit'],_0xc62672;if(_0x51e967>=_0x32acbf){_0x51e967=_0x32acbf;_0xc62672=0xc8;}else{_0xc62672=0xce;}_0x3e1108['status'](_0xc62672);return _0x3e1108['set'](_0xc207('0x14'),_0xe993a0+'-'+_0x51e967+'/'+_0x32acbf)[_0xc207('0x15')](_0x3062f5);}return null;};}function patchUpdates(_0x3d9c7b){return function(_0x65f539){try{jsonpatch['apply'](_0x65f539,_0x3d9c7b,!![]);}catch(_0x1bc70c){return BPromise[_0xc207('0x16')](_0x1bc70c);}return _0x65f539[_0xc207('0x17')]();};}function saveUpdates(_0x5f288e,_0x4129b8){return function(_0x488cc0){if(_0x488cc0){return _0x488cc0[_0xc207('0x18')](_0x5f288e)[_0xc207('0x19')](function(_0x131dc8){return _0x131dc8;});}return null;};}function removeEntity(_0x461f6a,_0xce0770){return function(_0x2caec5){if(_0x2caec5){return _0x2caec5[_0xc207('0x1a')]()[_0xc207('0x19')](function(){_0x461f6a[_0xc207('0x11')](0xcc)[_0xc207('0x1b')]();});}};}function handleEntityNotFound(_0x3112ff,_0xe227a){return function(_0x40de25){if(!_0x40de25){_0x3112ff['sendStatus'](0x194);}return _0x40de25;};}function handleError(_0x163b36,_0x5cda23){_0x5cda23=_0x5cda23||0x1f4;return function(_0x2e89c5){logger[_0xc207('0x1c')](_0x2e89c5[_0xc207('0x1d')]);if(_0x2e89c5[_0xc207('0x1e')]){delete _0x2e89c5[_0xc207('0x1e')];}_0x163b36[_0xc207('0x11')](_0x5cda23)[_0xc207('0x1f')](_0x2e89c5);};}exports[_0xc207('0x20')]=function(_0xa52138,_0x2385f7){var _0x25c91e={},_0x27df03={},_0x3f738e={'count':0x0,'rows':[]};var _0x138970=db[_0xc207('0x21')]['rawAttributes'];_0x27df03[_0xc207('0x22')]=_['keys'](_0x138970);var _0x4cb3af={'dateStart':_0xa52138[_0xc207('0x23')][_0xc207('0x24')],'dateEnd':_0xa52138[_0xc207('0x23')][_0xc207('0x25')]};delete _0xa52138[_0xc207('0x23')]['dateStart'];delete _0xa52138[_0xc207('0x23')][_0xc207('0x25')];_0x27df03[_0xc207('0x23')]=_[_0xc207('0x26')](_0xa52138[_0xc207('0x23')]);_0x27df03[_0xc207('0x27')]=_[_0xc207('0x28')](_0x27df03[_0xc207('0x22')],_0x27df03[_0xc207('0x23')]);_0x25c91e[_0xc207('0x29')]=_[_0xc207('0x28')](_0x27df03[_0xc207('0x22')],qs[_0xc207('0x2a')](_0xa52138['query'][_0xc207('0x2a')]));_0x25c91e[_0xc207('0x29')]=_0x25c91e[_0xc207('0x29')][_0xc207('0x2b')]?_0x25c91e[_0xc207('0x29')]:_0x27df03[_0xc207('0x22')];if(!_0xa52138['query'][_0xc207('0x2c')](_0xc207('0x2d'))){_0x25c91e[_0xc207('0x2e')]=qs[_0xc207('0x2e')](_0xa52138['query'][_0xc207('0x2e')]);_0x25c91e[_0xc207('0x13')]=qs[_0xc207('0x13')](_0xa52138[_0xc207('0x23')][_0xc207('0x13')]);}_0x25c91e[_0xc207('0x2f')]=qs[_0xc207('0x30')](_0xa52138[_0xc207('0x23')][_0xc207('0x30')]);_0x25c91e['where']=qs['filters'](_[_0xc207('0x31')](_0xa52138[_0xc207('0x23')],_0x27df03[_0xc207('0x27')]));if(_0x4cb3af[_0xc207('0x24')]){if(_0x4cb3af['dateEnd']){_0x4cb3af[_0xc207('0x25')]=moment(_0x4cb3af[_0xc207('0x25')])[_0xc207('0x32')](0x1,_0xc207('0x33'));}else{_0x4cb3af[_0xc207('0x25')]=moment(_0x4cb3af['dateStart'])[_0xc207('0x32')](0x1,_0xc207('0x33'));}_['merge'](_0x25c91e[_0xc207('0x34')],{'createdAt':{'$gte':_0x4cb3af['dateStart'],'$lte':_0x4cb3af[_0xc207('0x25')]}});}if(_0xa52138[_0xc207('0x23')]['filter']){_0x25c91e[_0xc207('0x34')]=_[_0xc207('0x35')](_0x25c91e[_0xc207('0x34')],{'$or':_['map'](_0x25c91e['attributes'],function(_0x37cc19){var _0x347d57={};_0x347d57[_0x37cc19]={'$like':'%'+_0xa52138[_0xc207('0x23')][_0xc207('0x36')]+'%'};return _0x347d57;})});}_0x25c91e=_['merge']({},_0x25c91e,_0xa52138[_0xc207('0x37')]);var _0x47cdc4={'where':_0x25c91e['where']};return db['VoiceAgentReport']['count'](_0x47cdc4)[_0xc207('0x19')](function(_0x370d0d){_0x3f738e[_0xc207('0x12')]=_0x370d0d;if(_0xa52138['query'][_0xc207('0x38')]){_0x25c91e[_0xc207('0x39')]=[{'all':!![]}];}return db[_0xc207('0x21')][_0xc207('0x3a')](_0x25c91e);})['then'](function(_0x47d43a){_0x3f738e[_0xc207('0x3b')]=_0x47d43a;return _0x3f738e;})[_0xc207('0x19')](respondWithFilteredResult(_0x2385f7,_0x25c91e))[_0xc207('0x3c')](handleError(_0x2385f7,null));};exports[_0xc207('0x3d')]=function(_0x58537e,_0x122883){var _0x19a67d={'raw':![],'where':{'id':_0x58537e[_0xc207('0x3e')]['id']}},_0x3a935a={};_0x3a935a[_0xc207('0x22')]=_[_0xc207('0x26')](db[_0xc207('0x21')][_0xc207('0x3f')]);_0x3a935a[_0xc207('0x23')]=_['keys'](_0x58537e[_0xc207('0x23')]);_0x3a935a[_0xc207('0x27')]=_['intersection'](_0x3a935a[_0xc207('0x22')],_0x3a935a[_0xc207('0x23')]);_0x19a67d[_0xc207('0x29')]=_[_0xc207('0x28')](_0x3a935a[_0xc207('0x22')],qs['fields'](_0x58537e[_0xc207('0x23')][_0xc207('0x2a')]));_0x19a67d[_0xc207('0x29')]=_0x19a67d['attributes'][_0xc207('0x2b')]?_0x19a67d[_0xc207('0x29')]:_0x3a935a[_0xc207('0x22')];if(_0x58537e[_0xc207('0x23')]['includeAll']){_0x19a67d['include']=[{'all':!![]}];}_0x19a67d=_[_0xc207('0x35')]({},_0x19a67d,_0x58537e[_0xc207('0x37')]);return db[_0xc207('0x21')][_0xc207('0x40')](_0x19a67d)[_0xc207('0x19')](handleEntityNotFound(_0x122883,null))[_0xc207('0x19')](respondWithResult(_0x122883,null))[_0xc207('0x3c')](handleError(_0x122883,null));};exports[_0xc207('0x41')]=function(_0x20edff,_0x212552){return db[_0xc207('0x21')][_0xc207('0x41')](_0x20edff['body'],{})['then'](respondWithResult(_0x212552,0xc9))[_0xc207('0x3c')](handleError(_0x212552,null));};exports[_0xc207('0x18')]=function(_0x2468d0,_0x480f12){if(_0x2468d0[_0xc207('0x42')]['id']){delete _0x2468d0[_0xc207('0x42')]['id'];}return db[_0xc207('0x21')][_0xc207('0x40')]({'where':{'id':_0x2468d0['params']['id']}})[_0xc207('0x19')](handleEntityNotFound(_0x480f12,null))['then'](saveUpdates(_0x2468d0[_0xc207('0x42')],null))['then'](respondWithResult(_0x480f12,null))['catch'](handleError(_0x480f12,null));};exports[_0xc207('0x1a')]=function(_0x30f02e,_0x4eeb63){return db['VoiceAgentReport']['find']({'where':{'id':_0x30f02e[_0xc207('0x3e')]['id']}})[_0xc207('0x19')](handleEntityNotFound(_0x4eeb63,null))[_0xc207('0x19')](removeEntity(_0x4eeb63,null))[_0xc207('0x3c')](handleError(_0x4eeb63,null));};exports[_0xc207('0x43')]=function(_0x35e967,_0x3dc457){return db[_0xc207('0x21')]['describe']()[_0xc207('0x19')](respondWithResult(_0x3dc457,null))[_0xc207('0x3c')](handleError(_0x3dc457,null));};
\ No newline at end of file
index 500a1c9..0aa5c46 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x899e=['lodash','api','moment','request-promise','./voiceAgentReport.attributes','exports','define','VoiceAgentReport','report_agent','destuniqueid'];(function(_0x45af93,_0x27b801){var _0x45220f=function(_0x2f4a2d){while(--_0x2f4a2d){_0x45af93['push'](_0x45af93['shift']());}};_0x45220f(++_0x27b801);}(_0x899e,0x1cc));var _0xe899=function(_0x415301,_0x4116ce){_0x415301=_0x415301-0x0;var _0x686c02=_0x899e[_0x415301];return _0x686c02;};'use strict';var _=require(_0xe899('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xe899('0x1'));var moment=require(_0xe899('0x2'));var BPromise=require('bluebird');var rp=require(_0xe899('0x3'));var attributes=require(_0xe899('0x4'));module[_0xe899('0x5')]=function(_0x30ebf2,_0x328af4){return _0x30ebf2[_0xe899('0x6')](_0xe899('0x7'),attributes,{'tableName':_0xe899('0x8'),'paranoid':![],'indexes':[{'fields':['uniqueid',_0xe899('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x433e=['moment','bluebird','request-promise','./voiceAgentReport.attributes','exports','define','VoiceAgentReport','report_agent','util','../../config/logger','api'];(function(_0x62da38,_0x64b681){var _0x4abed0=function(_0x5d23b3){while(--_0x5d23b3){_0x62da38['push'](_0x62da38['shift']());}};_0x4abed0(++_0x64b681);}(_0x433e,0xa2));var _0xe433=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x433e[_0x321bb2];return _0x9c12ed;};'use strict';var _=require('lodash');var util=require(_0xe433('0x0'));var logger=require(_0xe433('0x1'))(_0xe433('0x2'));var moment=require(_0xe433('0x3'));var BPromise=require(_0xe433('0x4'));var rp=require(_0xe433('0x5'));var attributes=require(_0xe433('0x6'));module[_0xe433('0x7')]=function(_0x3b9e2a,_0x49a4ce){return _0x3b9e2a[_0xe433('0x8')](_0xe433('0x9'),attributes,{'tableName':_0xe433('0xa'),'paranoid':![],'indexes':[{'fields':['uniqueid','destuniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index 9943648..0e15dc7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['jayson/promise','client','http','request','info','VoiceAgentReport,\x20%s,\x20%s','request\x20sent','debug','VoiceAgentReport,\x20%s,\x20%s,\x20%s','error','message','result','CreateVoiceAgentReport','body','raw','then','stringify','catch','UpdateVoiceAgentReport','VoiceAgentReport','options','attributes','limit','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x565ed7,_0x398228){var _0x183ad7=function(_0x5a43d7){while(--_0x5a43d7){_0x565ed7['push'](_0x565ed7['shift']());}};_0x183ad7(++_0x398228);}(_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 db=require(_0x7995('0x4'))['db'];var utils=require(_0x7995('0x5'));var logger=require(_0x7995('0x6'))(_0x7995('0x7'));var config=require('../../config/environment');var jayson=require(_0x7995('0x8'));var client=jayson[_0x7995('0x9')][_0x7995('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x219534,_0xbda126,_0x326741){return new BPromise(function(_0x4996ca,_0x465276){return client[_0x7995('0xb')](_0x219534,_0x326741)['then'](function(_0xa2e5f0){logger[_0x7995('0xc')](_0x7995('0xd'),_0xbda126,_0x7995('0xe'));logger[_0x7995('0xf')](_0x7995('0x10'),_0xbda126,_0x7995('0xe'),JSON['stringify'](_0xa2e5f0));if(_0xa2e5f0[_0x7995('0x11')]){if(_0xa2e5f0[_0x7995('0x11')]['code']===0x1f4){logger[_0x7995('0x11')](_0x7995('0xd'),_0xbda126,_0xa2e5f0[_0x7995('0x11')][_0x7995('0x12')]);return _0x465276(_0xa2e5f0[_0x7995('0x11')][_0x7995('0x12')]);}logger[_0x7995('0x11')]('VoiceAgentReport,\x20%s,\x20%s',_0xbda126,_0xa2e5f0['error'][_0x7995('0x12')]);return _0x4996ca(_0xa2e5f0[_0x7995('0x11')][_0x7995('0x12')]);}else{logger[_0x7995('0xc')](_0x7995('0xd'),_0xbda126,_0x7995('0xe'));_0x4996ca(_0xa2e5f0[_0x7995('0x13')][_0x7995('0x12')]);}})['catch'](function(_0x2eeacc){logger['error'](_0x7995('0xd'),_0xbda126,_0x2eeacc);_0x465276(_0x2eeacc);});});}exports[_0x7995('0x14')]=function(_0x43d4b8){var _0x291317=this;return new Promise(function(_0x1e1415,_0x37a7d4){return db['VoiceAgentReport']['create'](_0x43d4b8[_0x7995('0x15')],{'raw':_0x43d4b8['options']?_0x43d4b8['options'][_0x7995('0x16')]===undefined?!![]:![]:!![]})[_0x7995('0x17')](function(_0x4cbe10){logger[_0x7995('0xc')]('CreateVoiceAgentReport',_0x43d4b8);logger['debug'](_0x7995('0x14'),_0x43d4b8,JSON[_0x7995('0x18')](_0x4cbe10));_0x1e1415(_0x4cbe10);})[_0x7995('0x19')](function(_0x1a8568){logger[_0x7995('0x11')](_0x7995('0x14'),_0x1a8568['message'],_0x43d4b8);_0x37a7d4(_0x291317[_0x7995('0x11')](0x1f4,_0x1a8568[_0x7995('0x12')]));});});};exports[_0x7995('0x1a')]=function(_0x285437){var _0x563799=this;return new Promise(function(_0x13bc35,_0x475351){return db[_0x7995('0x1b')]['update'](_0x285437[_0x7995('0x15')],{'raw':_0x285437[_0x7995('0x1c')]?_0x285437[_0x7995('0x1c')][_0x7995('0x16')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x285437[_0x7995('0x1c')]?_0x285437[_0x7995('0x1c')]['where']||null:null,'attributes':_0x285437[_0x7995('0x1c')]?_0x285437['options'][_0x7995('0x1d')]||null:null,'limit':_0x285437[_0x7995('0x1c')]?_0x285437[_0x7995('0x1c')][_0x7995('0x1e')]||null:null})[_0x7995('0x17')](function(_0x4b6f99){logger[_0x7995('0xc')]('UpdateVoiceAgentReport',_0x285437);logger[_0x7995('0xf')](_0x7995('0x1a'),_0x285437,JSON[_0x7995('0x18')](_0x4b6f99));_0x13bc35(_0x4b6f99);})['catch'](function(_0x530611){logger['error'](_0x7995('0x1a'),_0x530611[_0x7995('0x12')],_0x285437);_0x475351(_0x563799[_0x7995('0x11')](0x1f4,_0x530611[_0x7995('0x12')]));});});};
\ No newline at end of file
+var _0x7a54=['moment','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','VoiceAgentReport,\x20%s,\x20%s','request\x20sent','VoiceAgentReport,\x20%s,\x20%s,\x20%s','error','code','message','info','result','catch','CreateVoiceAgentReport','VoiceAgentReport','create','body','options','raw','then','stringify','UpdateVoiceAgentReport','update','attributes','limit','debug','lodash','util'];(function(_0x21ecfe,_0x3789ba){var _0x2d7f73=function(_0x236e04){while(--_0x236e04){_0x21ecfe['push'](_0x21ecfe['shift']());}};_0x2d7f73(++_0x3789ba);}(_0x7a54,0x106));var _0x47a5=function(_0x236a9b,_0x103816){_0x236a9b=_0x236a9b-0x0;var _0x4abe71=_0x7a54[_0x236a9b];return _0x4abe71;};'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 db=require(_0x47a5('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x47a5('0x5'))(_0x47a5('0x6'));var config=require(_0x47a5('0x7'));var jayson=require(_0x47a5('0x8'));var client=jayson[_0x47a5('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3d5629,_0x59199c,_0x343372){return new BPromise(function(_0x30e405,_0x506eda){return client[_0x47a5('0xa')](_0x3d5629,_0x343372)['then'](function(_0x5d90b3){logger['info'](_0x47a5('0xb'),_0x59199c,_0x47a5('0xc'));logger['debug'](_0x47a5('0xd'),_0x59199c,'request\x20sent',JSON['stringify'](_0x5d90b3));if(_0x5d90b3[_0x47a5('0xe')]){if(_0x5d90b3[_0x47a5('0xe')][_0x47a5('0xf')]===0x1f4){logger[_0x47a5('0xe')](_0x47a5('0xb'),_0x59199c,_0x5d90b3[_0x47a5('0xe')][_0x47a5('0x10')]);return _0x506eda(_0x5d90b3['error'][_0x47a5('0x10')]);}logger[_0x47a5('0xe')](_0x47a5('0xb'),_0x59199c,_0x5d90b3[_0x47a5('0xe')][_0x47a5('0x10')]);return _0x30e405(_0x5d90b3[_0x47a5('0xe')][_0x47a5('0x10')]);}else{logger[_0x47a5('0x11')]('VoiceAgentReport,\x20%s,\x20%s',_0x59199c,_0x47a5('0xc'));_0x30e405(_0x5d90b3[_0x47a5('0x12')][_0x47a5('0x10')]);}})[_0x47a5('0x13')](function(_0x1ef44c){logger['error']('VoiceAgentReport,\x20%s,\x20%s',_0x59199c,_0x1ef44c);_0x506eda(_0x1ef44c);});});}exports[_0x47a5('0x14')]=function(_0x4b966e){var _0x5247fd=this;return new Promise(function(_0x423a81,_0xaf70a6){return db[_0x47a5('0x15')][_0x47a5('0x16')](_0x4b966e[_0x47a5('0x17')],{'raw':_0x4b966e[_0x47a5('0x18')]?_0x4b966e[_0x47a5('0x18')][_0x47a5('0x19')]===undefined?!![]:![]:!![]})[_0x47a5('0x1a')](function(_0x4a9fcb){logger[_0x47a5('0x11')](_0x47a5('0x14'),_0x4b966e);logger['debug'](_0x47a5('0x14'),_0x4b966e,JSON[_0x47a5('0x1b')](_0x4a9fcb));_0x423a81(_0x4a9fcb);})[_0x47a5('0x13')](function(_0x4c5910){logger[_0x47a5('0xe')](_0x47a5('0x14'),_0x4c5910[_0x47a5('0x10')],_0x4b966e);_0xaf70a6(_0x5247fd[_0x47a5('0xe')](0x1f4,_0x4c5910['message']));});});};exports[_0x47a5('0x1c')]=function(_0x385687){var _0x513981=this;return new Promise(function(_0x28747d,_0xc4cd63){return db[_0x47a5('0x15')][_0x47a5('0x1d')](_0x385687[_0x47a5('0x17')],{'raw':_0x385687['options']?_0x385687['options'][_0x47a5('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x385687['options']?_0x385687[_0x47a5('0x18')]['where']||null:null,'attributes':_0x385687[_0x47a5('0x18')]?_0x385687[_0x47a5('0x18')][_0x47a5('0x1e')]||null:null,'limit':_0x385687[_0x47a5('0x18')]?_0x385687[_0x47a5('0x18')][_0x47a5('0x1f')]||null:null})[_0x47a5('0x1a')](function(_0x136b14){logger[_0x47a5('0x11')](_0x47a5('0x1c'),_0x385687);logger[_0x47a5('0x20')](_0x47a5('0x1c'),_0x385687,JSON[_0x47a5('0x1b')](_0x136b14));_0x28747d(_0x136b14);})['catch'](function(_0x243210){logger['error'](_0x47a5('0x1c'),_0x243210[_0x47a5('0x10')],_0x385687);_0xc4cd63(_0x513981[_0x47a5('0xe')](0x1f4,_0x243210['message']));});});};
\ No newline at end of file
index 9e46f86..7bed2ec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5910=['show','post','create','put','update','delete','destroy','exports','multer','Router','../../components/interaction/service','../../config/environment','./voiceCallReport.controller','get','isAuthenticated','index','/:id'];(function(_0x5f51f9,_0x356b43){var _0x5a10d4=function(_0x52a61a){while(--_0x52a61a){_0x5f51f9['push'](_0x5f51f9['shift']());}};_0x5a10d4(++_0x356b43);}(_0x5910,0xd4));var _0x0591=function(_0xc5d0a1,_0x56f12e){_0xc5d0a1=_0xc5d0a1-0x0;var _0x41e8a3=_0x5910[_0xc5d0a1];return _0x41e8a3;};'use strict';var multer=require(_0x0591('0x0'));var util=require('util');var path=require('path');var express=require('express');var router=express[_0x0591('0x1')]();var auth=require('../../components/auth/service');var interaction=require(_0x0591('0x2'));var config=require(_0x0591('0x3'));var controller=require(_0x0591('0x4'));router[_0x0591('0x5')]('/',auth[_0x0591('0x6')](),controller[_0x0591('0x7')]);router[_0x0591('0x5')]('/describe',auth['isAuthenticated'](),controller['describe']);router[_0x0591('0x5')](_0x0591('0x8'),auth['isAuthenticated'](),controller[_0x0591('0x9')]);router[_0x0591('0xa')]('/',auth[_0x0591('0x6')](),controller[_0x0591('0xb')]);router[_0x0591('0xc')](_0x0591('0x8'),auth['isAuthenticated'](),controller[_0x0591('0xd')]);router[_0x0591('0xe')](_0x0591('0x8'),auth[_0x0591('0x6')](),controller[_0x0591('0xf')]);module[_0x0591('0x10')]=router;
\ No newline at end of file
+var _0x185f=['./voiceCallReport.controller','get','index','/describe','describe','/:id','isAuthenticated','show','post','create','put','update','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x167b19,_0x56081a){var _0x1fcca2=function(_0x544ca4){while(--_0x544ca4){_0x167b19['push'](_0x167b19['shift']());}};_0x1fcca2(++_0x56081a);}(_0x185f,0x82));var _0xf185=function(_0x44deea,_0x40f4fd){_0x44deea=_0x44deea-0x0;var _0xdeafb4=_0x185f[_0x44deea];return _0xdeafb4;};'use strict';var multer=require(_0xf185('0x0'));var util=require(_0xf185('0x1'));var path=require(_0xf185('0x2'));var express=require(_0xf185('0x3'));var router=express[_0xf185('0x4')]();var auth=require(_0xf185('0x5'));var interaction=require(_0xf185('0x6'));var config=require(_0xf185('0x7'));var controller=require(_0xf185('0x8'));router[_0xf185('0x9')]('/',auth['isAuthenticated'](),controller[_0xf185('0xa')]);router[_0xf185('0x9')](_0xf185('0xb'),auth['isAuthenticated'](),controller[_0xf185('0xc')]);router[_0xf185('0x9')](_0xf185('0xd'),auth[_0xf185('0xe')](),controller[_0xf185('0xf')]);router[_0xf185('0x10')]('/',auth[_0xf185('0xe')](),controller[_0xf185('0x11')]);router[_0xf185('0x12')](_0xf185('0xd'),auth[_0xf185('0xe')](),controller[_0xf185('0x13')]);router[_0xf185('0x14')](_0xf185('0xd'),auth[_0xf185('0xe')](),controller[_0xf185('0x15')]);module[_0xf185('0x16')]=router;
\ No newline at end of file
index e30911a..3e0df10 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4606=['INTEGER','exports','STRING','inbound','internal','outbound','inbound-fax','outbound-fax','dialer','DATE'];(function(_0x3d93d9,_0x2deffe){var _0x490294=function(_0x1f277d){while(--_0x1f277d){_0x3d93d9['push'](_0x3d93d9['shift']());}};_0x490294(++_0x2deffe);}(_0x4606,0x14b));var _0x6460=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x4606[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require('sequelize');module[_0x6460('0x0')]={'uniqueid':{'type':Sequelize[_0x6460('0x1')]},'type':{'type':Sequelize['ENUM'](_0x6460('0x2'),_0x6460('0x3'),_0x6460('0x4'),_0x6460('0x5'),_0x6460('0x6'),_0x6460('0x7'))},'tag':{'type':Sequelize[_0x6460('0x1')]},'accountcode':{'type':Sequelize[_0x6460('0x1')]},'source':{'type':Sequelize[_0x6460('0x1')]},'destination':{'type':Sequelize[_0x6460('0x1')]},'destinationcontext':{'type':Sequelize['STRING']},'callerid':{'type':Sequelize[_0x6460('0x1')]},'channel':{'type':Sequelize[_0x6460('0x1')]},'destinationchannel':{'type':Sequelize[_0x6460('0x1')]},'lastapplication':{'type':Sequelize['STRING']},'lastdata':{'type':Sequelize['TEXT']},'starttime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0x6460('0x8')]},'endtime':{'type':Sequelize[_0x6460('0x8')]},'duration':{'type':Sequelize['INTEGER']},'billableseconds':{'type':Sequelize[_0x6460('0x9')]},'mohtime':{'type':Sequelize[_0x6460('0x9')],'defaultValue':0x0},'disposition':{'type':Sequelize['STRING']},'amaflags':{'type':Sequelize['STRING']},'userfield':{'type':Sequelize[_0x6460('0x1')]},'userDisposition':{'type':Sequelize[_0x6460('0x1')]},'note':{'type':Sequelize[_0x6460('0x1')]},'prefix':{'type':Sequelize[_0x6460('0x1')]}};
\ No newline at end of file
+var _0x850a=['outbound-fax','dialer','DATE','INTEGER','sequelize','exports','STRING','ENUM','inbound','outbound','inbound-fax'];(function(_0xa55be7,_0x407cea){var _0x5045fd=function(_0x3b6ff2){while(--_0x3b6ff2){_0xa55be7['push'](_0xa55be7['shift']());}};_0x5045fd(++_0x407cea);}(_0x850a,0xb4));var _0xa850=function(_0x5a6644,_0x45d612){_0x5a6644=_0x5a6644-0x0;var _0x3a2a5d=_0x850a[_0x5a6644];return _0x3a2a5d;};'use strict';var Sequelize=require(_0xa850('0x0'));module[_0xa850('0x1')]={'uniqueid':{'type':Sequelize[_0xa850('0x2')]},'type':{'type':Sequelize[_0xa850('0x3')](_0xa850('0x4'),'internal',_0xa850('0x5'),_0xa850('0x6'),_0xa850('0x7'),_0xa850('0x8'))},'tag':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0xa850('0x2')]},'source':{'type':Sequelize[_0xa850('0x2')]},'destination':{'type':Sequelize['STRING']},'destinationcontext':{'type':Sequelize[_0xa850('0x2')]},'callerid':{'type':Sequelize[_0xa850('0x2')]},'channel':{'type':Sequelize['STRING']},'destinationchannel':{'type':Sequelize[_0xa850('0x2')]},'lastapplication':{'type':Sequelize[_0xa850('0x2')]},'lastdata':{'type':Sequelize['TEXT']},'starttime':{'type':Sequelize[_0xa850('0x9')]},'answertime':{'type':Sequelize[_0xa850('0x9')]},'endtime':{'type':Sequelize[_0xa850('0x9')]},'duration':{'type':Sequelize[_0xa850('0xa')]},'billableseconds':{'type':Sequelize[_0xa850('0xa')]},'mohtime':{'type':Sequelize[_0xa850('0xa')],'defaultValue':0x0},'disposition':{'type':Sequelize['STRING']},'amaflags':{'type':Sequelize['STRING']},'userfield':{'type':Sequelize[_0xa850('0x2')]},'userDisposition':{'type':Sequelize[_0xa850('0x2')]},'note':{'type':Sequelize[_0xa850('0x2')]},'prefix':{'type':Sequelize['STRING']}};
\ No newline at end of file
index d3127aa..180d67f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x820c=['uniqueid','user','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','../../components/parsers/qs','api','../../config/utils','../../mysqldb','sendStatus','status','json','count','offset','limit','set','apply','reject','save','update','then','destroy','end','error','stack','send','VoiceCallReport','rawAttributes','model','query','dateStart','dateEnd','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','sort','where','pick','add','day','merge','map','filter','options','include','alias','User','findAll','rows','catch','show','params','includeAll','find','body','describe'];(function(_0x4e5f40,_0x3bf5d2){var _0x7d58be=function(_0xd91e4d){while(--_0xd91e4d){_0x4e5f40['push'](_0x4e5f40['shift']());}};_0x7d58be(++_0x3bf5d2);}(_0x820c,0x165));var _0xc820=function(_0x130d62,_0x11de56){_0x130d62=_0x130d62-0x0;var _0x486d4e=_0x820c[_0x130d62];return _0x486d4e;};'use strict';var jsonpatch=require(_0xc820('0x0'));var rp=require('request-promise');var moment=require(_0xc820('0x1'));var BPromise=require(_0xc820('0x2'));var Mustache=require(_0xc820('0x3'));var util=require(_0xc820('0x4'));var path=require('path');var sox=require(_0xc820('0x5'));var csv=require(_0xc820('0x6'));var ejs=require(_0xc820('0x7'));var fs=require('fs');var _=require(_0xc820('0x8'));var squel=require(_0xc820('0x9'));var crypto=require('crypto');var jsforce=require(_0xc820('0xa'));var deskjs=require(_0xc820('0xb'));var toCsv=require(_0xc820('0x6'));var querystring=require(_0xc820('0xc'));var Papa=require('papaparse');var qs=require(_0xc820('0xd'));var logger=require('../../config/logger')(_0xc820('0xe'));var utils=require(_0xc820('0xf'));var config=require('../../config/environment');var db=require(_0xc820('0x10'))['db'];function respondWithStatusCode(_0x4d1b1c,_0xb57171){_0xb57171=_0xb57171||0xcc;return function(_0x591c7e){if(_0x591c7e){return _0x4d1b1c[_0xc820('0x11')](_0xb57171);}return _0x4d1b1c['status'](_0xb57171)['end']();};}function respondWithResult(_0x2172a3,_0x242960){_0x242960=_0x242960||0xc8;return function(_0x3e0bfe){if(_0x3e0bfe){return _0x2172a3[_0xc820('0x12')](_0x242960)[_0xc820('0x13')](_0x3e0bfe);}};}function respondWithFilteredResult(_0x226d19,_0x385cc7){return function(_0x4b06fe){if(_0x4b06fe){var _0x2030e6=_0x4b06fe[_0xc820('0x14')],_0x4aca34=_0x385cc7[_0xc820('0x15')],_0x340689=_0x385cc7[_0xc820('0x15')]+_0x385cc7[_0xc820('0x16')],_0x4a58ef;if(_0x340689>=_0x2030e6){_0x340689=_0x2030e6;_0x4a58ef=0xc8;}else{_0x4a58ef=0xce;}_0x226d19[_0xc820('0x12')](_0x4a58ef);return _0x226d19[_0xc820('0x17')]('Content-Range',_0x4aca34+'-'+_0x340689+'/'+_0x2030e6)[_0xc820('0x13')](_0x4b06fe);}return null;};}function patchUpdates(_0x167dd8){return function(_0x24d011){try{jsonpatch[_0xc820('0x18')](_0x24d011,_0x167dd8,!![]);}catch(_0x1b75cf){return BPromise[_0xc820('0x19')](_0x1b75cf);}return _0x24d011[_0xc820('0x1a')]();};}function saveUpdates(_0x48149d,_0x98f13d){return function(_0x4f0b87){if(_0x4f0b87){return _0x4f0b87[_0xc820('0x1b')](_0x48149d)[_0xc820('0x1c')](function(_0x29c2e8){return _0x29c2e8;});}return null;};}function removeEntity(_0x3bd8c2,_0x1b8b3b){return function(_0x20123f){if(_0x20123f){return _0x20123f[_0xc820('0x1d')]()['then'](function(){_0x3bd8c2[_0xc820('0x12')](0xcc)[_0xc820('0x1e')]();});}};}function handleEntityNotFound(_0x868ad0,_0x1feadc){return function(_0x570a63){if(!_0x570a63){_0x868ad0['sendStatus'](0x194);}return _0x570a63;};}function handleError(_0x2fc053,_0x583785){_0x583785=_0x583785||0x1f4;return function(_0x54ed16){logger[_0xc820('0x1f')](_0x54ed16[_0xc820('0x20')]);if(_0x54ed16['name']){delete _0x54ed16['name'];}_0x2fc053[_0xc820('0x12')](_0x583785)[_0xc820('0x21')](_0x54ed16);};}exports['index']=function(_0x559bcb,_0x35ef7c){var _0x2c97e6={},_0x56d5ed={},_0x26cb4b={'count':0x0,'rows':[]};var _0x1e4990=db[_0xc820('0x22')][_0xc820('0x23')];_0x56d5ed[_0xc820('0x24')]=_['keys'](_0x1e4990);var _0x47dcec={'dateStart':_0x559bcb[_0xc820('0x25')][_0xc820('0x26')],'dateEnd':_0x559bcb['query']['dateEnd']};delete _0x559bcb[_0xc820('0x25')]['dateStart'];delete _0x559bcb[_0xc820('0x25')][_0xc820('0x27')];_0x56d5ed[_0xc820('0x25')]=_[_0xc820('0x28')](_0x559bcb[_0xc820('0x25')]);_0x56d5ed[_0xc820('0x29')]=_[_0xc820('0x2a')](_0x56d5ed['model'],_0x56d5ed[_0xc820('0x25')]);_0x2c97e6['attributes']=_[_0xc820('0x2a')](_0x56d5ed[_0xc820('0x24')],qs['fields'](_0x559bcb[_0xc820('0x25')][_0xc820('0x2b')]));_0x2c97e6[_0xc820('0x2c')]=_0x2c97e6[_0xc820('0x2c')][_0xc820('0x2d')]?_0x2c97e6[_0xc820('0x2c')]:_0x56d5ed[_0xc820('0x24')];if(!_0x559bcb[_0xc820('0x25')][_0xc820('0x2e')](_0xc820('0x2f'))){_0x2c97e6[_0xc820('0x16')]=qs[_0xc820('0x16')](_0x559bcb[_0xc820('0x25')]['limit']);_0x2c97e6[_0xc820('0x15')]=qs[_0xc820('0x15')](_0x559bcb['query'][_0xc820('0x15')]);}_0x2c97e6['order']=qs[_0xc820('0x30')](_0x559bcb[_0xc820('0x25')][_0xc820('0x30')]);_0x2c97e6[_0xc820('0x31')]=qs[_0xc820('0x29')](_[_0xc820('0x32')](_0x559bcb['query'],_0x56d5ed['filters']));if(_0x47dcec[_0xc820('0x26')]){if(_0x47dcec[_0xc820('0x27')]){_0x47dcec[_0xc820('0x27')]=moment(_0x47dcec[_0xc820('0x27')])[_0xc820('0x33')](0x1,_0xc820('0x34'));}else{_0x47dcec['dateEnd']=moment(_0x47dcec[_0xc820('0x26')])[_0xc820('0x33')](0x1,'day');}_[_0xc820('0x35')](_0x2c97e6[_0xc820('0x31')],{'createdAt':{'$gte':_0x47dcec[_0xc820('0x26')],'$lte':_0x47dcec['dateEnd']}});}if(_0x559bcb['query']['filter']){_0x2c97e6[_0xc820('0x31')]=_['merge'](_0x2c97e6[_0xc820('0x31')],{'$or':_[_0xc820('0x36')](_0x2c97e6[_0xc820('0x2c')],function(_0x313778){var _0x3859c7={};_0x3859c7[_0x313778]={'$like':'%'+_0x559bcb['query'][_0xc820('0x37')]+'%'};return _0x3859c7;})});}_0x2c97e6=_[_0xc820('0x35')]({},_0x2c97e6,_0x559bcb[_0xc820('0x38')]);var _0x42b815={'where':_0x2c97e6[_0xc820('0x31')]};return db[_0xc820('0x22')][_0xc820('0x14')](_0x42b815)[_0xc820('0x1c')](function(_0x308c41){_0x26cb4b[_0xc820('0x14')]=_0x308c41;if(_0x559bcb[_0xc820('0x25')]['includeAll']){_0x2c97e6[_0xc820('0x39')]=[{'attributes':['id','name','fullname',_0xc820('0x3a')],'model':db[_0xc820('0x3b')],'as':_0xc820('0x3b')}];}return db[_0xc820('0x22')][_0xc820('0x3c')](_0x2c97e6);})[_0xc820('0x1c')](function(_0x2a7106){_0x26cb4b[_0xc820('0x3d')]=_0x2a7106;return _0x26cb4b;})[_0xc820('0x1c')](respondWithFilteredResult(_0x35ef7c,_0x2c97e6))[_0xc820('0x3e')](handleError(_0x35ef7c,null));};exports[_0xc820('0x3f')]=function(_0x13131f,_0x1fc13a){var _0x45fe02={'raw':!![],'where':{'id':_0x13131f[_0xc820('0x40')]['id']}},_0x18e778={};_0x18e778[_0xc820('0x24')]=_[_0xc820('0x28')](db['VoiceCallReport'][_0xc820('0x23')]);_0x18e778[_0xc820('0x25')]=_['keys'](_0x13131f['query']);_0x18e778[_0xc820('0x29')]=_['intersection'](_0x18e778['model'],_0x18e778[_0xc820('0x25')]);_0x45fe02[_0xc820('0x2c')]=_[_0xc820('0x2a')](_0x18e778['model'],qs[_0xc820('0x2b')](_0x13131f[_0xc820('0x25')][_0xc820('0x2b')]));_0x45fe02[_0xc820('0x2c')]=_0x45fe02[_0xc820('0x2c')][_0xc820('0x2d')]?_0x45fe02[_0xc820('0x2c')]:_0x18e778[_0xc820('0x24')];if(_0x13131f['query'][_0xc820('0x41')]){_0x45fe02[_0xc820('0x39')]=[{'all':!![]}];}_0x45fe02=_[_0xc820('0x35')]({},_0x45fe02,_0x13131f[_0xc820('0x38')]);return db[_0xc820('0x22')][_0xc820('0x42')](_0x45fe02)['then'](handleEntityNotFound(_0x1fc13a,null))['then'](respondWithResult(_0x1fc13a,null))[_0xc820('0x3e')](handleError(_0x1fc13a,null));};exports['create']=function(_0x1b546c,_0x1eac0d){return db[_0xc820('0x22')]['create'](_0x1b546c[_0xc820('0x43')],{})['then'](respondWithResult(_0x1eac0d,0xc9))[_0xc820('0x3e')](handleError(_0x1eac0d,null));};exports[_0xc820('0x1d')]=function(_0x2f0119,_0x2958ac){return db[_0xc820('0x22')][_0xc820('0x42')]({'where':{'id':_0x2f0119['params']['id']}})['then'](handleEntityNotFound(_0x2958ac,null))[_0xc820('0x1c')](removeEntity(_0x2958ac,null))[_0xc820('0x3e')](handleError(_0x2958ac,null));};exports['describe']=function(_0x2c7b08,_0x4d761f){return db[_0xc820('0x22')][_0xc820('0x44')]()['then'](respondWithResult(_0x4d761f,null))['catch'](handleError(_0x4d761f,null));};exports[_0xc820('0x1b')]=function(_0x3ffe26,_0x198835){if(_0x3ffe26[_0xc820('0x43')]['uniqueid']){delete _0x3ffe26['body'][_0xc820('0x45')];}return db[_0xc820('0x22')][_0xc820('0x42')]({'where':{'uniqueid':_0x3ffe26[_0xc820('0x40')]['id'],'UserId':{'$or':[null,_0x3ffe26[_0xc820('0x46')]['id']]}}})['then'](handleEntityNotFound(_0x198835,null))[_0xc820('0x1c')](saveUpdates(_0x3ffe26['body'],null))[_0xc820('0x1c')](respondWithResult(_0x198835,null))[_0xc820('0x3e')](handleError(_0x198835,null));};
\ No newline at end of file
+var _0xd80d=['name','index','VoiceCallReport','keys','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','length','hasOwnProperty','limit','offset','sort','pick','day','merge','where','map','filter','options','include','fullname','alias','User','findAll','rows','show','params','rawAttributes','includeAll','find','catch','create','body','describe','uniqueid','user','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','count','json','apply','reject','save','update','then'];(function(_0x501831,_0x4d0b01){var _0x3ac5d5=function(_0x400174){while(--_0x400174){_0x501831['push'](_0x501831['shift']());}};_0x3ac5d5(++_0x4d0b01);}(_0xd80d,0x141));var _0xdd80=function(_0xf4d7b1,_0x30be6c){_0xf4d7b1=_0xf4d7b1-0x0;var _0x43b94c=_0xd80d[_0xf4d7b1];return _0x43b94c;};'use strict';var jsonpatch=require(_0xdd80('0x0'));var rp=require(_0xdd80('0x1'));var moment=require(_0xdd80('0x2'));var BPromise=require(_0xdd80('0x3'));var Mustache=require(_0xdd80('0x4'));var util=require('util');var path=require(_0xdd80('0x5'));var sox=require(_0xdd80('0x6'));var csv=require(_0xdd80('0x7'));var ejs=require(_0xdd80('0x8'));var fs=require('fs');var _=require(_0xdd80('0x9'));var squel=require(_0xdd80('0xa'));var crypto=require('crypto');var jsforce=require(_0xdd80('0xb'));var deskjs=require('desk.js');var toCsv=require(_0xdd80('0x7'));var querystring=require(_0xdd80('0xc'));var Papa=require(_0xdd80('0xd'));var qs=require(_0xdd80('0xe'));var logger=require(_0xdd80('0xf'))('api');var utils=require(_0xdd80('0x10'));var config=require(_0xdd80('0x11'));var db=require(_0xdd80('0x12'))['db'];function respondWithStatusCode(_0x2602b9,_0x50a946){_0x50a946=_0x50a946||0xcc;return function(_0x176cef){if(_0x176cef){return _0x2602b9[_0xdd80('0x13')](_0x50a946);}return _0x2602b9['status'](_0x50a946)[_0xdd80('0x14')]();};}function respondWithResult(_0x28e37c,_0x12a1e6){_0x12a1e6=_0x12a1e6||0xc8;return function(_0x276aaa){if(_0x276aaa){return _0x28e37c[_0xdd80('0x15')](_0x12a1e6)['json'](_0x276aaa);}};}function respondWithFilteredResult(_0x4ca3f1,_0x137933){return function(_0x555d02){if(_0x555d02){var _0x570f57=_0x555d02[_0xdd80('0x16')],_0x46afe9=_0x137933['offset'],_0x18bda3=_0x137933['offset']+_0x137933['limit'],_0x25ec17;if(_0x18bda3>=_0x570f57){_0x18bda3=_0x570f57;_0x25ec17=0xc8;}else{_0x25ec17=0xce;}_0x4ca3f1['status'](_0x25ec17);return _0x4ca3f1['set']('Content-Range',_0x46afe9+'-'+_0x18bda3+'/'+_0x570f57)[_0xdd80('0x17')](_0x555d02);}return null;};}function patchUpdates(_0x23db23){return function(_0x119d00){try{jsonpatch[_0xdd80('0x18')](_0x119d00,_0x23db23,!![]);}catch(_0x573962){return BPromise[_0xdd80('0x19')](_0x573962);}return _0x119d00[_0xdd80('0x1a')]();};}function saveUpdates(_0x3c110b,_0x5a60a7){return function(_0x4c1807){if(_0x4c1807){return _0x4c1807[_0xdd80('0x1b')](_0x3c110b)[_0xdd80('0x1c')](function(_0x148812){return _0x148812;});}return null;};}function removeEntity(_0x56b5ed,_0x35228b){return function(_0x18ea31){if(_0x18ea31){return _0x18ea31['destroy']()[_0xdd80('0x1c')](function(){_0x56b5ed[_0xdd80('0x15')](0xcc)[_0xdd80('0x14')]();});}};}function handleEntityNotFound(_0x55ed37,_0x28b9c5){return function(_0x205d6a){if(!_0x205d6a){_0x55ed37[_0xdd80('0x13')](0x194);}return _0x205d6a;};}function handleError(_0x4bb7f3,_0x4fe148){_0x4fe148=_0x4fe148||0x1f4;return function(_0x552fd2){logger['error'](_0x552fd2['stack']);if(_0x552fd2[_0xdd80('0x1d')]){delete _0x552fd2['name'];}_0x4bb7f3[_0xdd80('0x15')](_0x4fe148)['send'](_0x552fd2);};}exports[_0xdd80('0x1e')]=function(_0x3b54d7,_0x24015f){var _0xb5a73b={},_0x1ede53={},_0x1d79be={'count':0x0,'rows':[]};var _0xeb39f4=db[_0xdd80('0x1f')]['rawAttributes'];_0x1ede53['model']=_[_0xdd80('0x20')](_0xeb39f4);var _0x1b373b={'dateStart':_0x3b54d7[_0xdd80('0x21')][_0xdd80('0x22')],'dateEnd':_0x3b54d7['query'][_0xdd80('0x23')]};delete _0x3b54d7['query']['dateStart'];delete _0x3b54d7[_0xdd80('0x21')][_0xdd80('0x23')];_0x1ede53['query']=_[_0xdd80('0x20')](_0x3b54d7[_0xdd80('0x21')]);_0x1ede53[_0xdd80('0x24')]=_[_0xdd80('0x25')](_0x1ede53[_0xdd80('0x26')],_0x1ede53[_0xdd80('0x21')]);_0xb5a73b[_0xdd80('0x27')]=_[_0xdd80('0x25')](_0x1ede53['model'],qs['fields'](_0x3b54d7[_0xdd80('0x21')][_0xdd80('0x28')]));_0xb5a73b['attributes']=_0xb5a73b['attributes'][_0xdd80('0x29')]?_0xb5a73b[_0xdd80('0x27')]:_0x1ede53[_0xdd80('0x26')];if(!_0x3b54d7[_0xdd80('0x21')][_0xdd80('0x2a')]('nolimit')){_0xb5a73b['limit']=qs[_0xdd80('0x2b')](_0x3b54d7[_0xdd80('0x21')][_0xdd80('0x2b')]);_0xb5a73b[_0xdd80('0x2c')]=qs[_0xdd80('0x2c')](_0x3b54d7[_0xdd80('0x21')][_0xdd80('0x2c')]);}_0xb5a73b['order']=qs[_0xdd80('0x2d')](_0x3b54d7[_0xdd80('0x21')][_0xdd80('0x2d')]);_0xb5a73b['where']=qs[_0xdd80('0x24')](_[_0xdd80('0x2e')](_0x3b54d7[_0xdd80('0x21')],_0x1ede53[_0xdd80('0x24')]));if(_0x1b373b[_0xdd80('0x22')]){if(_0x1b373b['dateEnd']){_0x1b373b[_0xdd80('0x23')]=moment(_0x1b373b[_0xdd80('0x23')])['add'](0x1,_0xdd80('0x2f'));}else{_0x1b373b[_0xdd80('0x23')]=moment(_0x1b373b['dateStart'])['add'](0x1,_0xdd80('0x2f'));}_[_0xdd80('0x30')](_0xb5a73b[_0xdd80('0x31')],{'createdAt':{'$gte':_0x1b373b[_0xdd80('0x22')],'$lte':_0x1b373b[_0xdd80('0x23')]}});}if(_0x3b54d7['query']['filter']){_0xb5a73b[_0xdd80('0x31')]=_[_0xdd80('0x30')](_0xb5a73b['where'],{'$or':_[_0xdd80('0x32')](_0xb5a73b['attributes'],function(_0x354748){var _0x3499be={};_0x3499be[_0x354748]={'$like':'%'+_0x3b54d7['query'][_0xdd80('0x33')]+'%'};return _0x3499be;})});}_0xb5a73b=_[_0xdd80('0x30')]({},_0xb5a73b,_0x3b54d7[_0xdd80('0x34')]);var _0x237141={'where':_0xb5a73b[_0xdd80('0x31')]};return db[_0xdd80('0x1f')][_0xdd80('0x16')](_0x237141)[_0xdd80('0x1c')](function(_0x2e1303){_0x1d79be[_0xdd80('0x16')]=_0x2e1303;if(_0x3b54d7['query']['includeAll']){_0xb5a73b[_0xdd80('0x35')]=[{'attributes':['id',_0xdd80('0x1d'),_0xdd80('0x36'),_0xdd80('0x37')],'model':db[_0xdd80('0x38')],'as':'User'}];}return db[_0xdd80('0x1f')][_0xdd80('0x39')](_0xb5a73b);})[_0xdd80('0x1c')](function(_0x5932c6){_0x1d79be[_0xdd80('0x3a')]=_0x5932c6;return _0x1d79be;})['then'](respondWithFilteredResult(_0x24015f,_0xb5a73b))['catch'](handleError(_0x24015f,null));};exports[_0xdd80('0x3b')]=function(_0x27cee2,_0x4a4e8b){var _0x3f5799={'raw':!![],'where':{'id':_0x27cee2[_0xdd80('0x3c')]['id']}},_0x40d3e5={};_0x40d3e5[_0xdd80('0x26')]=_['keys'](db[_0xdd80('0x1f')][_0xdd80('0x3d')]);_0x40d3e5[_0xdd80('0x21')]=_[_0xdd80('0x20')](_0x27cee2[_0xdd80('0x21')]);_0x40d3e5[_0xdd80('0x24')]=_[_0xdd80('0x25')](_0x40d3e5[_0xdd80('0x26')],_0x40d3e5[_0xdd80('0x21')]);_0x3f5799[_0xdd80('0x27')]=_[_0xdd80('0x25')](_0x40d3e5[_0xdd80('0x26')],qs[_0xdd80('0x28')](_0x27cee2[_0xdd80('0x21')][_0xdd80('0x28')]));_0x3f5799['attributes']=_0x3f5799[_0xdd80('0x27')][_0xdd80('0x29')]?_0x3f5799[_0xdd80('0x27')]:_0x40d3e5[_0xdd80('0x26')];if(_0x27cee2['query'][_0xdd80('0x3e')]){_0x3f5799[_0xdd80('0x35')]=[{'all':!![]}];}_0x3f5799=_[_0xdd80('0x30')]({},_0x3f5799,_0x27cee2['options']);return db[_0xdd80('0x1f')][_0xdd80('0x3f')](_0x3f5799)[_0xdd80('0x1c')](handleEntityNotFound(_0x4a4e8b,null))['then'](respondWithResult(_0x4a4e8b,null))[_0xdd80('0x40')](handleError(_0x4a4e8b,null));};exports[_0xdd80('0x41')]=function(_0x50c4a8,_0x832218){return db[_0xdd80('0x1f')][_0xdd80('0x41')](_0x50c4a8[_0xdd80('0x42')],{})[_0xdd80('0x1c')](respondWithResult(_0x832218,0xc9))[_0xdd80('0x40')](handleError(_0x832218,null));};exports['destroy']=function(_0x48e2d2,_0x5983d7){return db[_0xdd80('0x1f')][_0xdd80('0x3f')]({'where':{'id':_0x48e2d2[_0xdd80('0x3c')]['id']}})['then'](handleEntityNotFound(_0x5983d7,null))[_0xdd80('0x1c')](removeEntity(_0x5983d7,null))[_0xdd80('0x40')](handleError(_0x5983d7,null));};exports[_0xdd80('0x43')]=function(_0x271808,_0x3b6ee2){return db['VoiceCallReport']['describe']()[_0xdd80('0x1c')](respondWithResult(_0x3b6ee2,null))[_0xdd80('0x40')](handleError(_0x3b6ee2,null));};exports[_0xdd80('0x1b')]=function(_0x38ef54,_0x4dd0ed){if(_0x38ef54['body']['uniqueid']){delete _0x38ef54['body'][_0xdd80('0x44')];}return db['VoiceCallReport'][_0xdd80('0x3f')]({'where':{'uniqueid':_0x38ef54[_0xdd80('0x3c')]['id'],'UserId':{'$or':[null,_0x38ef54[_0xdd80('0x45')]['id']]}}})[_0xdd80('0x1c')](handleEntityNotFound(_0x4dd0ed,null))['then'](saveUpdates(_0x38ef54[_0xdd80('0x42')],null))['then'](respondWithResult(_0x4dd0ed,null))[_0xdd80('0x40')](handleError(_0x4dd0ed,null));};
\ No newline at end of file
index 90d8511..7567d63 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d9f=['report_call','util','../../config/logger','api','moment','bluebird','request-promise','./voiceCallReport.attributes','exports','define','VoiceCallReport'];(function(_0x47b58b,_0x41a189){var _0x46bebe=function(_0x22bbfa){while(--_0x22bbfa){_0x47b58b['push'](_0x47b58b['shift']());}};_0x46bebe(++_0x41a189);}(_0x7d9f,0x135));var _0xf7d9=function(_0x491cbe,_0x45c8ba){_0x491cbe=_0x491cbe-0x0;var _0x59449d=_0x7d9f[_0x491cbe];return _0x59449d;};'use strict';var _=require('lodash');var util=require(_0xf7d9('0x0'));var logger=require(_0xf7d9('0x1'))(_0xf7d9('0x2'));var moment=require(_0xf7d9('0x3'));var BPromise=require(_0xf7d9('0x4'));var rp=require(_0xf7d9('0x5'));var attributes=require(_0xf7d9('0x6'));module[_0xf7d9('0x7')]=function(_0x1ea0e2,_0xe8bd6d){return _0x1ea0e2[_0xf7d9('0x8')](_0xf7d9('0x9'),attributes,{'tableName':_0xf7d9('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0207=['request-promise','./voiceCallReport.attributes','exports','report_call','util','moment','bluebird'];(function(_0x23ca3a,_0xe44c43){var _0x5c1aab=function(_0x29bcdd){while(--_0x29bcdd){_0x23ca3a['push'](_0x23ca3a['shift']());}};_0x5c1aab(++_0xe44c43);}(_0x0207,0x162));var _0x7020=function(_0x5b1489,_0x2e8611){_0x5b1489=_0x5b1489-0x0;var _0x1d84d2=_0x0207[_0x5b1489];return _0x1d84d2;};'use strict';var _=require('lodash');var util=require(_0x7020('0x0'));var logger=require('../../config/logger')('api');var moment=require(_0x7020('0x1'));var BPromise=require(_0x7020('0x2'));var rp=require(_0x7020('0x3'));var attributes=require(_0x7020('0x4'));module[_0x7020('0x5')]=function(_0x25174b,_0x1066dd){return _0x25174b['define']('VoiceCallReport',attributes,{'tableName':_0x7020('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index e0693be..6956e29 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4235=['options','attributes','map','model','include','create','CreateVoiceCallReport','UpdateVoiceCallReport','body','raw','limit','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','VoiceCallReport,\x20%s,\x20%s,\x20%s','stringify','error','code','VoiceCallReport,\x20%s,\x20%s','message','result','catch','GetVoiceCallReport','VoiceCallReport','findAll'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x4235,0xce));var _0x5423=function(_0x1bda6c,_0x5440b1){_0x1bda6c=_0x1bda6c-0x0;var _0x501a86=_0x4235[_0x1bda6c];return _0x501a86;};'use strict';var _=require(_0x5423('0x0'));var util=require(_0x5423('0x1'));var moment=require(_0x5423('0x2'));var BPromise=require(_0x5423('0x3'));var rs=require(_0x5423('0x4'));var fs=require('fs');var db=require(_0x5423('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x5423('0x6'))(_0x5423('0x7'));var config=require(_0x5423('0x8'));var jayson=require(_0x5423('0x9'));var client=jayson[_0x5423('0xa')][_0x5423('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x52d4c7,_0x1db8f2,_0x1432c9){return new BPromise(function(_0x580051,_0x4350e9){return client[_0x5423('0xc')](_0x52d4c7,_0x1432c9)[_0x5423('0xd')](function(_0x173bf9){logger[_0x5423('0xe')]('VoiceCallReport,\x20%s,\x20%s',_0x1db8f2,_0x5423('0xf'));logger[_0x5423('0x10')](_0x5423('0x11'),_0x1db8f2,_0x5423('0xf'),JSON[_0x5423('0x12')](_0x173bf9));if(_0x173bf9[_0x5423('0x13')]){if(_0x173bf9[_0x5423('0x13')][_0x5423('0x14')]===0x1f4){logger['error'](_0x5423('0x15'),_0x1db8f2,_0x173bf9[_0x5423('0x13')][_0x5423('0x16')]);return _0x4350e9(_0x173bf9[_0x5423('0x13')]['message']);}logger[_0x5423('0x13')](_0x5423('0x15'),_0x1db8f2,_0x173bf9[_0x5423('0x13')]['message']);return _0x580051(_0x173bf9[_0x5423('0x13')][_0x5423('0x16')]);}else{logger[_0x5423('0xe')](_0x5423('0x15'),_0x1db8f2,_0x5423('0xf'));_0x580051(_0x173bf9[_0x5423('0x17')][_0x5423('0x16')]);}})[_0x5423('0x18')](function(_0x39605e){logger[_0x5423('0x13')](_0x5423('0x15'),_0x1db8f2,_0x39605e);_0x4350e9(_0x39605e);});});}exports[_0x5423('0x19')]=function(_0x445344){var _0x39b991=this;return new Promise(function(_0x4dbc5b,_0x2afbed){return db[_0x5423('0x1a')][_0x5423('0x1b')]({'raw':_0x445344[_0x5423('0x1c')]?_0x445344[_0x5423('0x1c')]['raw']===undefined?!![]:![]:!![],'where':_0x445344[_0x5423('0x1c')]?_0x445344['options']['where']||null:null,'attributes':_0x445344['options']?_0x445344[_0x5423('0x1c')][_0x5423('0x1d')]||null:null,'limit':_0x445344[_0x5423('0x1c')]?_0x445344[_0x5423('0x1c')]['limit']||null:null,'include':_0x445344[_0x5423('0x1c')]?_0x445344[_0x5423('0x1c')]['include']?_[_0x5423('0x1e')](_0x445344[_0x5423('0x1c')]['include'],function(_0x511f71){return{'model':db[_0x511f71[_0x5423('0x1f')]],'as':_0x511f71['as'],'attributes':_0x511f71[_0x5423('0x1d')],'include':_0x511f71['include']?_[_0x5423('0x1e')](_0x511f71['include'],function(_0x4b3a6e){return{'model':db[_0x4b3a6e[_0x5423('0x1f')]],'as':_0x4b3a6e['as'],'attributes':_0x4b3a6e[_0x5423('0x1d')],'include':_0x4b3a6e[_0x5423('0x20')]?_[_0x5423('0x1e')](_0x4b3a6e[_0x5423('0x20')],function(_0x2ad843){return{'model':db[_0x2ad843[_0x5423('0x1f')]],'as':_0x2ad843['as'],'attributes':_0x2ad843[_0x5423('0x1d')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x4af632){logger['info'](_0x5423('0x19'),_0x445344);logger[_0x5423('0x10')](_0x5423('0x19'),_0x445344,JSON[_0x5423('0x12')](_0x4af632));_0x4dbc5b(_0x4af632);})[_0x5423('0x18')](function(_0x55ad0d){logger[_0x5423('0x13')](_0x5423('0x19'),_0x55ad0d[_0x5423('0x16')],_0x445344);_0x2afbed(_0x39b991[_0x5423('0x13')](0x1f4,_0x55ad0d[_0x5423('0x16')]));});});};exports['CreateVoiceCallReport']=function(_0x28d91f){var _0x21742e=this;return new Promise(function(_0x9b0c4b,_0x529ab2){return db[_0x5423('0x1a')][_0x5423('0x21')](_0x28d91f['body'],{'raw':_0x28d91f['options']?_0x28d91f[_0x5423('0x1c')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x21e14a){logger[_0x5423('0xe')]('CreateVoiceCallReport',_0x28d91f);logger[_0x5423('0x10')](_0x5423('0x22'),_0x28d91f,JSON[_0x5423('0x12')](_0x21e14a));_0x9b0c4b(_0x21e14a);})['catch'](function(_0x26da7c){logger[_0x5423('0x13')](_0x5423('0x22'),_0x26da7c['message'],_0x28d91f);_0x529ab2(_0x21742e['error'](0x1f4,_0x26da7c[_0x5423('0x16')]));});});};exports[_0x5423('0x23')]=function(_0x5e8b08){var _0x4e4b8c=this;return new Promise(function(_0x12de2a,_0x575c6b){return db[_0x5423('0x1a')]['update'](_0x5e8b08[_0x5423('0x24')],{'raw':_0x5e8b08[_0x5423('0x1c')]?_0x5e8b08[_0x5423('0x1c')][_0x5423('0x25')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5e8b08['options']?_0x5e8b08['options']['where']||null:null,'attributes':_0x5e8b08[_0x5423('0x1c')]?_0x5e8b08['options'][_0x5423('0x1d')]||null:null,'limit':_0x5e8b08['options']?_0x5e8b08[_0x5423('0x1c')][_0x5423('0x26')]||null:null})[_0x5423('0xd')](function(_0x4526fe){logger[_0x5423('0xe')](_0x5423('0x23'),_0x5e8b08);logger[_0x5423('0x10')](_0x5423('0x23'),_0x5e8b08,JSON[_0x5423('0x12')](_0x4526fe));_0x12de2a(_0x4526fe);})[_0x5423('0x18')](function(_0x312fae){logger[_0x5423('0x13')](_0x5423('0x23'),_0x312fae[_0x5423('0x16')],_0x5e8b08);_0x575c6b(_0x4e4b8c[_0x5423('0x13')](0x1f4,_0x312fae[_0x5423('0x16')]));});});};
\ No newline at end of file
+var _0x92dd=['then','info','VoiceCallReport,\x20%s,\x20%s','request\x20sent','debug','VoiceCallReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','GetVoiceCallReport','VoiceCallReport','options','raw','where','attributes','limit','include','model','map','body','CreateVoiceCallReport','UpdateVoiceCallReport','update','lodash','util','moment','bluebird','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','request'];(function(_0x17af0f,_0x281577){var _0x4f5fda=function(_0x34d126){while(--_0x34d126){_0x17af0f['push'](_0x17af0f['shift']());}};_0x4f5fda(++_0x281577);}(_0x92dd,0xcd));var _0xd92d=function(_0x1cb305,_0x4f7c6d){_0x1cb305=_0x1cb305-0x0;var _0x3f64b1=_0x92dd[_0x1cb305];return _0x3f64b1;};'use strict';var _=require(_0xd92d('0x0'));var util=require(_0xd92d('0x1'));var moment=require(_0xd92d('0x2'));var BPromise=require(_0xd92d('0x3'));var rs=require('randomstring');var fs=require('fs');var db=require(_0xd92d('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xd92d('0x5'))(_0xd92d('0x6'));var config=require(_0xd92d('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xd92d('0x8')][_0xd92d('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4becd1,_0x2fd1ac,_0x5d2570){return new BPromise(function(_0x1fb1c7,_0x16d3e3){return client[_0xd92d('0xa')](_0x4becd1,_0x5d2570)[_0xd92d('0xb')](function(_0x330344){logger[_0xd92d('0xc')](_0xd92d('0xd'),_0x2fd1ac,_0xd92d('0xe'));logger[_0xd92d('0xf')](_0xd92d('0x10'),_0x2fd1ac,'request\x20sent',JSON[_0xd92d('0x11')](_0x330344));if(_0x330344['error']){if(_0x330344[_0xd92d('0x12')][_0xd92d('0x13')]===0x1f4){logger[_0xd92d('0x12')](_0xd92d('0xd'),_0x2fd1ac,_0x330344[_0xd92d('0x12')]['message']);return _0x16d3e3(_0x330344[_0xd92d('0x12')]['message']);}logger[_0xd92d('0x12')](_0xd92d('0xd'),_0x2fd1ac,_0x330344[_0xd92d('0x12')]['message']);return _0x1fb1c7(_0x330344[_0xd92d('0x12')][_0xd92d('0x14')]);}else{logger[_0xd92d('0xc')](_0xd92d('0xd'),_0x2fd1ac,_0xd92d('0xe'));_0x1fb1c7(_0x330344['result']['message']);}})[_0xd92d('0x15')](function(_0x442423){logger[_0xd92d('0x12')](_0xd92d('0xd'),_0x2fd1ac,_0x442423);_0x16d3e3(_0x442423);});});}exports[_0xd92d('0x16')]=function(_0x19e757){var _0xbc4c43=this;return new Promise(function(_0x17c309,_0x30a632){return db[_0xd92d('0x17')]['findAll']({'raw':_0x19e757['options']?_0x19e757[_0xd92d('0x18')][_0xd92d('0x19')]===undefined?!![]:![]:!![],'where':_0x19e757[_0xd92d('0x18')]?_0x19e757[_0xd92d('0x18')][_0xd92d('0x1a')]||null:null,'attributes':_0x19e757[_0xd92d('0x18')]?_0x19e757[_0xd92d('0x18')][_0xd92d('0x1b')]||null:null,'limit':_0x19e757[_0xd92d('0x18')]?_0x19e757[_0xd92d('0x18')][_0xd92d('0x1c')]||null:null,'include':_0x19e757[_0xd92d('0x18')]?_0x19e757[_0xd92d('0x18')][_0xd92d('0x1d')]?_['map'](_0x19e757[_0xd92d('0x18')]['include'],function(_0x15e036){return{'model':db[_0x15e036[_0xd92d('0x1e')]],'as':_0x15e036['as'],'attributes':_0x15e036[_0xd92d('0x1b')],'include':_0x15e036[_0xd92d('0x1d')]?_[_0xd92d('0x1f')](_0x15e036['include'],function(_0xf82b43){return{'model':db[_0xf82b43[_0xd92d('0x1e')]],'as':_0xf82b43['as'],'attributes':_0xf82b43[_0xd92d('0x1b')],'include':_0xf82b43[_0xd92d('0x1d')]?_['map'](_0xf82b43[_0xd92d('0x1d')],function(_0x3d30a2){return{'model':db[_0x3d30a2['model']],'as':_0x3d30a2['as'],'attributes':_0x3d30a2[_0xd92d('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x46f328){logger[_0xd92d('0xc')](_0xd92d('0x16'),_0x19e757);logger[_0xd92d('0xf')](_0xd92d('0x16'),_0x19e757,JSON['stringify'](_0x46f328));_0x17c309(_0x46f328);})[_0xd92d('0x15')](function(_0x159d02){logger[_0xd92d('0x12')](_0xd92d('0x16'),_0x159d02['message'],_0x19e757);_0x30a632(_0xbc4c43[_0xd92d('0x12')](0x1f4,_0x159d02[_0xd92d('0x14')]));});});};exports['CreateVoiceCallReport']=function(_0x514aff){var _0x271de9=this;return new Promise(function(_0x177546,_0x2253d7){return db[_0xd92d('0x17')]['create'](_0x514aff[_0xd92d('0x20')],{'raw':_0x514aff['options']?_0x514aff[_0xd92d('0x18')]['raw']===undefined?!![]:![]:!![]})[_0xd92d('0xb')](function(_0x5445a2){logger[_0xd92d('0xc')](_0xd92d('0x21'),_0x514aff);logger[_0xd92d('0xf')](_0xd92d('0x21'),_0x514aff,JSON[_0xd92d('0x11')](_0x5445a2));_0x177546(_0x5445a2);})[_0xd92d('0x15')](function(_0x42ce32){logger[_0xd92d('0x12')](_0xd92d('0x21'),_0x42ce32['message'],_0x514aff);_0x2253d7(_0x271de9['error'](0x1f4,_0x42ce32[_0xd92d('0x14')]));});});};exports[_0xd92d('0x22')]=function(_0x4d1b8e){var _0x8c8961=this;return new Promise(function(_0x5d8385,_0x2b20d0){return db[_0xd92d('0x17')][_0xd92d('0x23')](_0x4d1b8e[_0xd92d('0x20')],{'raw':_0x4d1b8e[_0xd92d('0x18')]?_0x4d1b8e[_0xd92d('0x18')][_0xd92d('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x4d1b8e[_0xd92d('0x18')]?_0x4d1b8e['options'][_0xd92d('0x1a')]||null:null,'attributes':_0x4d1b8e['options']?_0x4d1b8e['options'][_0xd92d('0x1b')]||null:null,'limit':_0x4d1b8e[_0xd92d('0x18')]?_0x4d1b8e[_0xd92d('0x18')][_0xd92d('0x1c')]||null:null})[_0xd92d('0xb')](function(_0x4fea12){logger[_0xd92d('0xc')](_0xd92d('0x22'),_0x4d1b8e);logger['debug'](_0xd92d('0x22'),_0x4d1b8e,JSON[_0xd92d('0x11')](_0x4fea12));_0x5d8385(_0x4fea12);})[_0xd92d('0x15')](function(_0x3ce2c7){logger[_0xd92d('0x12')](_0xd92d('0x22'),_0x3ce2c7[_0xd92d('0x14')],_0x4d1b8e);_0x2b20d0(_0x8c8961[_0xd92d('0x12')](0x1f4,_0x3ce2c7['message']));});});};
\ No newline at end of file
index dd36da6..8a2c779 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcacb=['destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../config/environment','get','isAuthenticated','index','/:id','put','update','delete'];(function(_0xedb647,_0x2c08bb){var _0x122bde=function(_0x2573d5){while(--_0x2573d5){_0xedb647['push'](_0xedb647['shift']());}};_0x122bde(++_0x2c08bb);}(_0xcacb,0x72));var _0xbcac=function(_0x559948,_0x5d7a75){_0x559948=_0x559948-0x0;var _0x4fc8d5=_0xcacb[_0x559948];return _0x4fc8d5;};'use strict';var multer=require(_0xbcac('0x0'));var util=require(_0xbcac('0x1'));var path=require(_0xbcac('0x2'));var express=require(_0xbcac('0x3'));var router=express[_0xbcac('0x4')]();var auth=require(_0xbcac('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xbcac('0x6'));var controller=require('./voiceChanSpy.controller');router[_0xbcac('0x7')]('/',auth[_0xbcac('0x8')](),controller[_0xbcac('0x9')]);router['get'](_0xbcac('0xa'),auth['isAuthenticated'](),controller['show']);router['post']('/',auth[_0xbcac('0x8')](),controller['create']);router[_0xbcac('0xb')](_0xbcac('0xa'),auth['isAuthenticated'](),controller[_0xbcac('0xc')]);router[_0xbcac('0xd')](_0xbcac('0xa'),auth['isAuthenticated'](),controller[_0xbcac('0xe')]);module[_0xbcac('0xf')]=router;
\ No newline at end of file
+var _0x3c53=['get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','multer','util','path','express','Router','../../config/environment','./voiceChanSpy.controller'];(function(_0x2df980,_0x4a0040){var _0x4d2088=function(_0x11b850){while(--_0x11b850){_0x2df980['push'](_0x2df980['shift']());}};_0x4d2088(++_0x4a0040);}(_0x3c53,0x1d4));var _0x33c5=function(_0x59ba8e,_0x19db79){_0x59ba8e=_0x59ba8e-0x0;var _0x109bee=_0x3c53[_0x59ba8e];return _0x109bee;};'use strict';var multer=require(_0x33c5('0x0'));var util=require(_0x33c5('0x1'));var path=require(_0x33c5('0x2'));var express=require(_0x33c5('0x3'));var router=express[_0x33c5('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x33c5('0x5'));var controller=require(_0x33c5('0x6'));router[_0x33c5('0x7')]('/',auth[_0x33c5('0x8')](),controller[_0x33c5('0x9')]);router[_0x33c5('0x7')](_0x33c5('0xa'),auth['isAuthenticated'](),controller[_0x33c5('0xb')]);router[_0x33c5('0xc')]('/',auth['isAuthenticated'](),controller[_0x33c5('0xd')]);router[_0x33c5('0xe')](_0x33c5('0xa'),auth['isAuthenticated'](),controller[_0x33c5('0xf')]);router[_0x33c5('0x10')](_0x33c5('0xa'),auth[_0x33c5('0x8')](),controller[_0x33c5('0x11')]);module[_0x33c5('0x12')]=router;
\ No newline at end of file
index b602ac3..0e998ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f07=['name','setDataValue','options','getDataValue','split','BOOLEAN','sequelize','exports','STRING'];(function(_0x13d07a,_0x41efc3){var _0x5ee0ee=function(_0x4ca94a){while(--_0x4ca94a){_0x13d07a['push'](_0x13d07a['shift']());}};_0x5ee0ee(++_0x41efc3);}(_0x0f07,0x189));var _0x70f0=function(_0x74b7b7,_0x17aa1e){_0x74b7b7=_0x74b7b7-0x0;var _0x1ddbcb=_0x0f07[_0x74b7b7];return _0x1ddbcb;};'use strict';var Sequelize=require(_0x70f0('0x0'));module[_0x70f0('0x1')]={'name':{'type':Sequelize[_0x70f0('0x2')]},'prefix':{'type':Sequelize['STRING'],'unique':_0x70f0('0x3'),'allowNull':![]},'options':{'type':Sequelize[_0x70f0('0x2')],'set':function(_0x1cb7fa){this[_0x70f0('0x4')](_0x70f0('0x5'),_0x1cb7fa?_0x1cb7fa['join'](''):[]);},'get':function(){return this[_0x70f0('0x6')](_0x70f0('0x5'))?this[_0x70f0('0x6')](_0x70f0('0x5'))[_0x70f0('0x7')](''):[];}},'auth':{'type':Sequelize[_0x70f0('0x8')],'defaultValue':![]},'password':{'type':Sequelize[_0x70f0('0x2')]},'record':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'recordingFormat':{'type':Sequelize[_0x70f0('0x2')]},'description':{'type':Sequelize[_0x70f0('0x2')]}};
\ No newline at end of file
+var _0x6d98=['exports','STRING','name','setDataValue','getDataValue','options','split','BOOLEAN','sequelize'];(function(_0xe0e18,_0x195e61){var _0x1bd018=function(_0x6d86db){while(--_0x6d86db){_0xe0e18['push'](_0xe0e18['shift']());}};_0x1bd018(++_0x195e61);}(_0x6d98,0x98));var _0x86d9=function(_0x1d1a7b,_0x10b8d6){_0x1d1a7b=_0x1d1a7b-0x0;var _0x48213f=_0x6d98[_0x1d1a7b];return _0x48213f;};'use strict';var Sequelize=require(_0x86d9('0x0'));module[_0x86d9('0x1')]={'name':{'type':Sequelize[_0x86d9('0x2')]},'prefix':{'type':Sequelize[_0x86d9('0x2')],'unique':_0x86d9('0x3'),'allowNull':![]},'options':{'type':Sequelize[_0x86d9('0x2')],'set':function(_0x415d56){this[_0x86d9('0x4')]('options',_0x415d56?_0x415d56['join'](''):[]);},'get':function(){return this[_0x86d9('0x5')](_0x86d9('0x6'))?this['getDataValue'](_0x86d9('0x6'))[_0x86d9('0x7')](''):[];}},'auth':{'type':Sequelize[_0x86d9('0x8')],'defaultValue':![]},'password':{'type':Sequelize[_0x86d9('0x2')]},'record':{'type':Sequelize[_0x86d9('0x8')],'defaultValue':![]},'recordingFormat':{'type':Sequelize[_0x86d9('0x2')]},'description':{'type':Sequelize[_0x86d9('0x2')]}};
\ No newline at end of file
index 963d856..270a4ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf65e=['moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','set','Content-Range','apply','reject','sendStatus','error','stack','name','send','index','VoiceChanSpy','rawAttributes','model','dateStart','query','dateEnd','filters','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','add','day','merge','filter','map','then','include','findAll','catch','params','keys','intersection','includeAll','options','create','body','update','find','destroy','request-promise'];(function(_0x46ea99,_0x530b63){var _0x40f2e7=function(_0x48c6bf){while(--_0x48c6bf){_0x46ea99['push'](_0x46ea99['shift']());}};_0x40f2e7(++_0x530b63);}(_0xf65e,0x158));var _0xef65=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xf65e[_0x3dd15e];return _0x231fd0;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xef65('0x0'));var moment=require(_0xef65('0x1'));var BPromise=require(_0xef65('0x2'));var Mustache=require(_0xef65('0x3'));var util=require(_0xef65('0x4'));var path=require(_0xef65('0x5'));var sox=require(_0xef65('0x6'));var csv=require('to-csv');var ejs=require(_0xef65('0x7'));var fs=require('fs');var _=require(_0xef65('0x8'));var squel=require('squel');var crypto=require(_0xef65('0x9'));var jsforce=require('jsforce');var deskjs=require(_0xef65('0xa'));var toCsv=require('to-csv');var querystring=require(_0xef65('0xb'));var Papa=require(_0xef65('0xc'));var qs=require(_0xef65('0xd'));var logger=require(_0xef65('0xe'))(_0xef65('0xf'));var utils=require(_0xef65('0x10'));var config=require(_0xef65('0x11'));var db=require(_0xef65('0x12'))['db'];function respondWithStatusCode(_0xf9e971,_0x1ed40d){_0x1ed40d=_0x1ed40d||0xcc;return function(_0x3d51a6){if(_0x3d51a6){return _0xf9e971['sendStatus'](_0x1ed40d);}return _0xf9e971[_0xef65('0x13')](_0x1ed40d)[_0xef65('0x14')]();};}function respondWithResult(_0x4108ac,_0x5a5523){_0x5a5523=_0x5a5523||0xc8;return function(_0x17ae74){if(_0x17ae74){return _0x4108ac[_0xef65('0x13')](_0x5a5523)[_0xef65('0x15')](_0x17ae74);}};}function respondWithFilteredResult(_0x45385e,_0x7a3c5a){return function(_0x4a0098){if(_0x4a0098){var _0x5090b9=_0x4a0098[_0xef65('0x16')],_0xe234d8=_0x7a3c5a['offset'],_0x27a6b9=_0x7a3c5a[_0xef65('0x17')]+_0x7a3c5a['limit'],_0x38d1d3;if(_0x27a6b9>=_0x5090b9){_0x27a6b9=_0x5090b9;_0x38d1d3=0xc8;}else{_0x38d1d3=0xce;}_0x45385e['status'](_0x38d1d3);return _0x45385e[_0xef65('0x18')](_0xef65('0x19'),_0xe234d8+'-'+_0x27a6b9+'/'+_0x5090b9)['json'](_0x4a0098);}return null;};}function patchUpdates(_0x235676){return function(_0x4efb79){try{jsonpatch[_0xef65('0x1a')](_0x4efb79,_0x235676,!![]);}catch(_0x5ac1ad){return BPromise[_0xef65('0x1b')](_0x5ac1ad);}return _0x4efb79['save']();};}function saveUpdates(_0x230cfb,_0x5aa4c0){return function(_0x3ae7fb){if(_0x3ae7fb){return _0x3ae7fb['update'](_0x230cfb)['then'](function(_0x1bcafd){return _0x1bcafd;});}return null;};}function removeEntity(_0xc25782,_0x3f74e9){return function(_0x4122d6){if(_0x4122d6){return _0x4122d6['destroy']()['then'](function(){_0xc25782['status'](0xcc)[_0xef65('0x14')]();});}};}function handleEntityNotFound(_0x4ce694,_0x3dc315){return function(_0x160798){if(!_0x160798){_0x4ce694[_0xef65('0x1c')](0x194);}return _0x160798;};}function handleError(_0x5e0c44,_0x3d582c){_0x3d582c=_0x3d582c||0x1f4;return function(_0x2355c2){logger[_0xef65('0x1d')](_0x2355c2[_0xef65('0x1e')]);if(_0x2355c2['name']){delete _0x2355c2[_0xef65('0x1f')];}_0x5e0c44['status'](_0x3d582c)[_0xef65('0x20')](_0x2355c2);};}exports[_0xef65('0x21')]=function(_0x7e67ad,_0x4fc01a){var _0x1de33a={},_0x4222ed={},_0x4809a3={'count':0x0,'rows':[]};var _0x4b3606=db[_0xef65('0x22')][_0xef65('0x23')];_0x4222ed[_0xef65('0x24')]=_['keys'](_0x4b3606);var _0x457712={'dateStart':_0x7e67ad['query'][_0xef65('0x25')],'dateEnd':_0x7e67ad[_0xef65('0x26')][_0xef65('0x27')]};delete _0x7e67ad[_0xef65('0x26')][_0xef65('0x25')];delete _0x7e67ad[_0xef65('0x26')][_0xef65('0x27')];_0x4222ed[_0xef65('0x26')]=_['keys'](_0x7e67ad['query']);_0x4222ed[_0xef65('0x28')]=_['intersection'](_0x4222ed[_0xef65('0x24')],_0x4222ed[_0xef65('0x26')]);_0x1de33a['attributes']=_['intersection'](_0x4222ed[_0xef65('0x24')],qs[_0xef65('0x29')](_0x7e67ad['query'][_0xef65('0x29')]));_0x1de33a['attributes']=_0x1de33a[_0xef65('0x2a')][_0xef65('0x2b')]?_0x1de33a[_0xef65('0x2a')]:_0x4222ed['model'];if(!_0x7e67ad[_0xef65('0x26')][_0xef65('0x2c')](_0xef65('0x2d'))){_0x1de33a[_0xef65('0x2e')]=qs[_0xef65('0x2e')](_0x7e67ad[_0xef65('0x26')][_0xef65('0x2e')]);_0x1de33a[_0xef65('0x17')]=qs['offset'](_0x7e67ad['query'][_0xef65('0x17')]);}_0x1de33a[_0xef65('0x2f')]=qs[_0xef65('0x30')](_0x7e67ad[_0xef65('0x26')][_0xef65('0x30')]);_0x1de33a[_0xef65('0x31')]=qs['filters'](_['pick'](_0x7e67ad[_0xef65('0x26')],_0x4222ed[_0xef65('0x28')]));if(_0x457712['dateStart']){if(_0x457712[_0xef65('0x27')]){_0x457712[_0xef65('0x27')]=moment(_0x457712[_0xef65('0x27')])[_0xef65('0x32')](0x1,'day');}else{_0x457712[_0xef65('0x27')]=moment(_0x457712[_0xef65('0x25')])[_0xef65('0x32')](0x1,_0xef65('0x33'));}_[_0xef65('0x34')](_0x1de33a[_0xef65('0x31')],{'createdAt':{'$gte':_0x457712[_0xef65('0x25')],'$lte':_0x457712['dateEnd']}});}if(_0x7e67ad[_0xef65('0x26')][_0xef65('0x35')]){_0x1de33a['where']=_[_0xef65('0x34')](_0x1de33a[_0xef65('0x31')],{'$or':_[_0xef65('0x36')](_0x1de33a['attributes'],function(_0x53507f){var _0x5a89cc={};_0x5a89cc[_0x53507f]={'$like':'%'+_0x7e67ad['query'][_0xef65('0x35')]+'%'};return _0x5a89cc;})});}_0x1de33a=_[_0xef65('0x34')]({},_0x1de33a,_0x7e67ad['options']);var _0x50201d={'where':_0x1de33a['where']};return db['VoiceChanSpy']['count'](_0x50201d)[_0xef65('0x37')](function(_0xac3ba0){_0x4809a3[_0xef65('0x16')]=_0xac3ba0;if(_0x7e67ad[_0xef65('0x26')]['includeAll']){_0x1de33a[_0xef65('0x38')]=[{'all':!![]}];}return db[_0xef65('0x22')][_0xef65('0x39')](_0x1de33a);})['then'](function(_0x14e453){_0x4809a3['rows']=_0x14e453;return _0x4809a3;})[_0xef65('0x37')](respondWithFilteredResult(_0x4fc01a,_0x1de33a))[_0xef65('0x3a')](handleError(_0x4fc01a,null));};exports['show']=function(_0x1f1382,_0x255125){var _0xb075e8={'raw':![],'where':{'id':_0x1f1382[_0xef65('0x3b')]['id']}},_0x42281e={};_0x42281e[_0xef65('0x24')]=_['keys'](db['VoiceChanSpy']['rawAttributes']);_0x42281e['query']=_[_0xef65('0x3c')](_0x1f1382['query']);_0x42281e[_0xef65('0x28')]=_[_0xef65('0x3d')](_0x42281e[_0xef65('0x24')],_0x42281e['query']);_0xb075e8['attributes']=_['intersection'](_0x42281e[_0xef65('0x24')],qs[_0xef65('0x29')](_0x1f1382[_0xef65('0x26')][_0xef65('0x29')]));_0xb075e8[_0xef65('0x2a')]=_0xb075e8[_0xef65('0x2a')][_0xef65('0x2b')]?_0xb075e8[_0xef65('0x2a')]:_0x42281e[_0xef65('0x24')];if(_0x1f1382[_0xef65('0x26')][_0xef65('0x3e')]){_0xb075e8['include']=[{'all':!![]}];}_0xb075e8=_[_0xef65('0x34')]({},_0xb075e8,_0x1f1382[_0xef65('0x3f')]);return db[_0xef65('0x22')]['find'](_0xb075e8)[_0xef65('0x37')](handleEntityNotFound(_0x255125,null))['then'](respondWithResult(_0x255125,null))[_0xef65('0x3a')](handleError(_0x255125,null));};exports[_0xef65('0x40')]=function(_0x3afd10,_0x465774){return db[_0xef65('0x22')][_0xef65('0x40')](_0x3afd10[_0xef65('0x41')],{})[_0xef65('0x37')](respondWithResult(_0x465774,0xc9))[_0xef65('0x3a')](handleError(_0x465774,null));};exports[_0xef65('0x42')]=function(_0x1ceef3,_0x4c5822){if(_0x1ceef3[_0xef65('0x41')]['id']){delete _0x1ceef3[_0xef65('0x41')]['id'];}return db[_0xef65('0x22')][_0xef65('0x43')]({'where':{'id':_0x1ceef3[_0xef65('0x3b')]['id']}})[_0xef65('0x37')](handleEntityNotFound(_0x4c5822,null))[_0xef65('0x37')](saveUpdates(_0x1ceef3['body'],null))[_0xef65('0x37')](respondWithResult(_0x4c5822,null))[_0xef65('0x3a')](handleError(_0x4c5822,null));};exports[_0xef65('0x44')]=function(_0x5882d6,_0x1e253e){return db[_0xef65('0x22')][_0xef65('0x43')]({'where':{'id':_0x5882d6[_0xef65('0x3b')]['id']}})[_0xef65('0x37')](handleEntityNotFound(_0x1e253e,null))['then'](removeEntity(_0x1e253e,null))['catch'](handleError(_0x1e253e,null));};
\ No newline at end of file
+var _0x14b0=['json','count','offset','limit','set','Content-Range','apply','reject','save','then','end','stack','name','send','index','VoiceChanSpy','rawAttributes','model','dateStart','query','dateEnd','keys','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','add','day','merge','where','filter','map','options','include','findAll','rows','catch','show','params','includeAll','find','create','body','update','fast-json-patch','request-promise','bluebird','mustache','path','sox','to-csv','lodash','squel','crypto','jsforce','querystring','papaparse','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status'];(function(_0x41ef55,_0xb33f15){var _0x3574d3=function(_0x1c07aa){while(--_0x1c07aa){_0x41ef55['push'](_0x41ef55['shift']());}};_0x3574d3(++_0xb33f15);}(_0x14b0,0x75));var _0x014b=function(_0x3fa6b8,_0x32957a){_0x3fa6b8=_0x3fa6b8-0x0;var _0x7f1332=_0x14b0[_0x3fa6b8];return _0x7f1332;};'use strict';var jsonpatch=require(_0x014b('0x0'));var rp=require(_0x014b('0x1'));var moment=require('moment');var BPromise=require(_0x014b('0x2'));var Mustache=require(_0x014b('0x3'));var util=require('util');var path=require(_0x014b('0x4'));var sox=require(_0x014b('0x5'));var csv=require(_0x014b('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x014b('0x7'));var squel=require(_0x014b('0x8'));var crypto=require(_0x014b('0x9'));var jsforce=require(_0x014b('0xa'));var deskjs=require('desk.js');var toCsv=require(_0x014b('0x6'));var querystring=require(_0x014b('0xb'));var Papa=require(_0x014b('0xc'));var qs=require('../../components/parsers/qs');var logger=require(_0x014b('0xd'))('api');var utils=require(_0x014b('0xe'));var config=require(_0x014b('0xf'));var db=require(_0x014b('0x10'))['db'];function respondWithStatusCode(_0xa760de,_0x51f31b){_0x51f31b=_0x51f31b||0xcc;return function(_0x379b14){if(_0x379b14){return _0xa760de[_0x014b('0x11')](_0x51f31b);}return _0xa760de['status'](_0x51f31b)['end']();};}function respondWithResult(_0x2e5a24,_0x46ac46){_0x46ac46=_0x46ac46||0xc8;return function(_0x1e9226){if(_0x1e9226){return _0x2e5a24[_0x014b('0x12')](_0x46ac46)[_0x014b('0x13')](_0x1e9226);}};}function respondWithFilteredResult(_0x439b87,_0x355a1a){return function(_0xad2c0f){if(_0xad2c0f){var _0x291833=_0xad2c0f[_0x014b('0x14')],_0x3eb41a=_0x355a1a['offset'],_0x2cf6fd=_0x355a1a[_0x014b('0x15')]+_0x355a1a[_0x014b('0x16')],_0x2cfa38;if(_0x2cf6fd>=_0x291833){_0x2cf6fd=_0x291833;_0x2cfa38=0xc8;}else{_0x2cfa38=0xce;}_0x439b87[_0x014b('0x12')](_0x2cfa38);return _0x439b87[_0x014b('0x17')](_0x014b('0x18'),_0x3eb41a+'-'+_0x2cf6fd+'/'+_0x291833)[_0x014b('0x13')](_0xad2c0f);}return null;};}function patchUpdates(_0x2b8bb7){return function(_0x2a067f){try{jsonpatch[_0x014b('0x19')](_0x2a067f,_0x2b8bb7,!![]);}catch(_0x110eb1){return BPromise[_0x014b('0x1a')](_0x110eb1);}return _0x2a067f[_0x014b('0x1b')]();};}function saveUpdates(_0x1a93e4,_0x91c6b7){return function(_0x182194){if(_0x182194){return _0x182194['update'](_0x1a93e4)[_0x014b('0x1c')](function(_0x3d2f12){return _0x3d2f12;});}return null;};}function removeEntity(_0x48581f,_0x46d074){return function(_0x5790b9){if(_0x5790b9){return _0x5790b9['destroy']()[_0x014b('0x1c')](function(){_0x48581f['status'](0xcc)[_0x014b('0x1d')]();});}};}function handleEntityNotFound(_0x41e835,_0x231748){return function(_0x3977f6){if(!_0x3977f6){_0x41e835[_0x014b('0x11')](0x194);}return _0x3977f6;};}function handleError(_0x57e8d5,_0x4adb49){_0x4adb49=_0x4adb49||0x1f4;return function(_0x79e802){logger['error'](_0x79e802[_0x014b('0x1e')]);if(_0x79e802[_0x014b('0x1f')]){delete _0x79e802[_0x014b('0x1f')];}_0x57e8d5[_0x014b('0x12')](_0x4adb49)[_0x014b('0x20')](_0x79e802);};}exports[_0x014b('0x21')]=function(_0x8c44b,_0xad9662){var _0x224107={},_0x501b68={},_0x2d8500={'count':0x0,'rows':[]};var _0x3112ea=db[_0x014b('0x22')][_0x014b('0x23')];_0x501b68[_0x014b('0x24')]=_['keys'](_0x3112ea);var _0x5d4a9d={'dateStart':_0x8c44b['query'][_0x014b('0x25')],'dateEnd':_0x8c44b[_0x014b('0x26')][_0x014b('0x27')]};delete _0x8c44b[_0x014b('0x26')][_0x014b('0x25')];delete _0x8c44b[_0x014b('0x26')][_0x014b('0x27')];_0x501b68[_0x014b('0x26')]=_[_0x014b('0x28')](_0x8c44b[_0x014b('0x26')]);_0x501b68[_0x014b('0x29')]=_[_0x014b('0x2a')](_0x501b68[_0x014b('0x24')],_0x501b68[_0x014b('0x26')]);_0x224107[_0x014b('0x2b')]=_[_0x014b('0x2a')](_0x501b68[_0x014b('0x24')],qs[_0x014b('0x2c')](_0x8c44b[_0x014b('0x26')][_0x014b('0x2c')]));_0x224107[_0x014b('0x2b')]=_0x224107['attributes']['length']?_0x224107['attributes']:_0x501b68[_0x014b('0x24')];if(!_0x8c44b[_0x014b('0x26')][_0x014b('0x2d')](_0x014b('0x2e'))){_0x224107['limit']=qs[_0x014b('0x16')](_0x8c44b[_0x014b('0x26')][_0x014b('0x16')]);_0x224107['offset']=qs[_0x014b('0x15')](_0x8c44b[_0x014b('0x26')][_0x014b('0x15')]);}_0x224107[_0x014b('0x2f')]=qs[_0x014b('0x30')](_0x8c44b[_0x014b('0x26')]['sort']);_0x224107['where']=qs[_0x014b('0x29')](_[_0x014b('0x31')](_0x8c44b[_0x014b('0x26')],_0x501b68[_0x014b('0x29')]));if(_0x5d4a9d[_0x014b('0x25')]){if(_0x5d4a9d['dateEnd']){_0x5d4a9d[_0x014b('0x27')]=moment(_0x5d4a9d[_0x014b('0x27')])[_0x014b('0x32')](0x1,_0x014b('0x33'));}else{_0x5d4a9d[_0x014b('0x27')]=moment(_0x5d4a9d[_0x014b('0x25')])['add'](0x1,_0x014b('0x33'));}_[_0x014b('0x34')](_0x224107[_0x014b('0x35')],{'createdAt':{'$gte':_0x5d4a9d['dateStart'],'$lte':_0x5d4a9d['dateEnd']}});}if(_0x8c44b[_0x014b('0x26')][_0x014b('0x36')]){_0x224107[_0x014b('0x35')]=_[_0x014b('0x34')](_0x224107[_0x014b('0x35')],{'$or':_[_0x014b('0x37')](_0x224107[_0x014b('0x2b')],function(_0x26f114){var _0x472aea={};_0x472aea[_0x26f114]={'$like':'%'+_0x8c44b[_0x014b('0x26')][_0x014b('0x36')]+'%'};return _0x472aea;})});}_0x224107=_[_0x014b('0x34')]({},_0x224107,_0x8c44b[_0x014b('0x38')]);var _0x2ada4e={'where':_0x224107[_0x014b('0x35')]};return db[_0x014b('0x22')][_0x014b('0x14')](_0x2ada4e)['then'](function(_0x1c57b6){_0x2d8500['count']=_0x1c57b6;if(_0x8c44b[_0x014b('0x26')]['includeAll']){_0x224107[_0x014b('0x39')]=[{'all':!![]}];}return db[_0x014b('0x22')][_0x014b('0x3a')](_0x224107);})[_0x014b('0x1c')](function(_0x2ca61a){_0x2d8500[_0x014b('0x3b')]=_0x2ca61a;return _0x2d8500;})[_0x014b('0x1c')](respondWithFilteredResult(_0xad9662,_0x224107))[_0x014b('0x3c')](handleError(_0xad9662,null));};exports[_0x014b('0x3d')]=function(_0x323959,_0x5381c1){var _0x3275e0={'raw':![],'where':{'id':_0x323959[_0x014b('0x3e')]['id']}},_0x3efebf={};_0x3efebf[_0x014b('0x24')]=_[_0x014b('0x28')](db[_0x014b('0x22')]['rawAttributes']);_0x3efebf[_0x014b('0x26')]=_[_0x014b('0x28')](_0x323959[_0x014b('0x26')]);_0x3efebf[_0x014b('0x29')]=_['intersection'](_0x3efebf['model'],_0x3efebf[_0x014b('0x26')]);_0x3275e0['attributes']=_['intersection'](_0x3efebf[_0x014b('0x24')],qs['fields'](_0x323959[_0x014b('0x26')]['fields']));_0x3275e0[_0x014b('0x2b')]=_0x3275e0['attributes']['length']?_0x3275e0['attributes']:_0x3efebf[_0x014b('0x24')];if(_0x323959[_0x014b('0x26')][_0x014b('0x3f')]){_0x3275e0[_0x014b('0x39')]=[{'all':!![]}];}_0x3275e0=_[_0x014b('0x34')]({},_0x3275e0,_0x323959[_0x014b('0x38')]);return db[_0x014b('0x22')][_0x014b('0x40')](_0x3275e0)[_0x014b('0x1c')](handleEntityNotFound(_0x5381c1,null))['then'](respondWithResult(_0x5381c1,null))[_0x014b('0x3c')](handleError(_0x5381c1,null));};exports[_0x014b('0x41')]=function(_0x4c444d,_0x217bf5){return db[_0x014b('0x22')][_0x014b('0x41')](_0x4c444d[_0x014b('0x42')],{})[_0x014b('0x1c')](respondWithResult(_0x217bf5,0xc9))[_0x014b('0x3c')](handleError(_0x217bf5,null));};exports[_0x014b('0x43')]=function(_0x3c0632,_0x53a77c){if(_0x3c0632[_0x014b('0x42')]['id']){delete _0x3c0632['body']['id'];}return db['VoiceChanSpy'][_0x014b('0x40')]({'where':{'id':_0x3c0632[_0x014b('0x3e')]['id']}})[_0x014b('0x1c')](handleEntityNotFound(_0x53a77c,null))[_0x014b('0x1c')](saveUpdates(_0x3c0632[_0x014b('0x42')],null))[_0x014b('0x1c')](respondWithResult(_0x53a77c,null))[_0x014b('0x3c')](handleError(_0x53a77c,null));};exports['destroy']=function(_0x24663e,_0x41e52){return db[_0x014b('0x22')]['find']({'where':{'id':_0x24663e[_0x014b('0x3e')]['id']}})[_0x014b('0x1c')](handleEntityNotFound(_0x41e52,null))['then'](removeEntity(_0x41e52,null))[_0x014b('0x3c')](handleError(_0x41e52,null));};
\ No newline at end of file
index 0b7a5f6..1df2bdf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4080=['password','SIP/%s,%s','name','options','StopMixMonitor','length','internal','User','agent','then','catch','exports','models','define','VoiceChanSpy','VoiceExtension','destroy','bulkCreate','lodash','util','bluebird','./voiceChanSpy.attributes','from-sip','system','format','merge','Set','CDR(type)=%s','record','push','MixMonitor','${UNIQUEID}.%s,ab','recordingFormat','auth','Authenticate'];(function(_0x4215b9,_0x100d7e){var _0x469e4c=function(_0x3cb0d5){while(--_0x3cb0d5){_0x4215b9['push'](_0x4215b9['shift']());}};_0x469e4c(++_0x100d7e);}(_0x4080,0x7b));var _0x0408=function(_0x2baca1,_0x2f3557){_0x2baca1=_0x2baca1-0x0;var _0x9aa62a=_0x4080[_0x2baca1];return _0x9aa62a;};'use strict';var _=require(_0x0408('0x0'));var util=require(_0x0408('0x1'));var BPromise=require(_0x0408('0x2'));var logger=require('../../config/logger')('api');var attributes=require(_0x0408('0x3'));var getUserApplications=function(_0x202d5f,_0x1662a3,_0x2d3c07){var _0xd08b57=0x1;var _0x3f03b3=[];var _0x18b07c={'context':_0x0408('0x4'),'type':_0x0408('0x5'),'isApp':![]};var _0x4ca93f={'exten':util[_0x0408('0x6')]('%s%s',_0x202d5f['prefix'],_0x2d3c07),'ChanSpyId':_0x202d5f['id'],'UserId':_0x1662a3['id']};_0x3f03b3['push'](_[_0x0408('0x7')]({'app':_0x0408('0x8'),'appdata':util['format'](_0x0408('0x9'),'chanspy'),'priority':_0xd08b57++},_0x18b07c,_0x4ca93f));if(_0x202d5f[_0x0408('0xa')]){_0x3f03b3[_0x0408('0xb')](_[_0x0408('0x7')]({'app':_0x0408('0xc'),'appdata':util['format'](_0x0408('0xd'),_0x202d5f[_0x0408('0xe')]),'priority':_0xd08b57++},_0x18b07c,_0x4ca93f));}if(_0x202d5f[_0x0408('0xf')]){_0x3f03b3['push'](_['merge']({'app':_0x0408('0x10'),'appdata':_0x202d5f[_0x0408('0x11')],'priority':_0xd08b57++},_0x18b07c,_0x4ca93f));}_0x3f03b3[_0x0408('0xb')](_[_0x0408('0x7')]({'app':'ChanSpy','appdata':util[_0x0408('0x6')](_0x0408('0x12'),_0x1662a3[_0x0408('0x13')],_0x202d5f['options']?_0x202d5f[_0x0408('0x14')]['join'](''):''),'priority':_0xd08b57++},_0x18b07c,_0x4ca93f));if(_0x202d5f[_0x0408('0xa')]){_0x3f03b3[_0x0408('0xb')](_['merge']({'app':_0x0408('0x15'),'priority':_0xd08b57++},_0x18b07c,_0x4ca93f));}return _0x3f03b3;};var getChanSpyApplications=function(_0x40ea29,_0x20907a){var _0x3b8608=[];for(var _0x1627e0=0x0,_0x33d696=0x1;_0x1627e0<_0x20907a[_0x0408('0x16')];_0x1627e0++,_0x33d696=0x1){var _0x2bebc8=getUserApplications(_0x40ea29,_0x20907a[_0x1627e0],_0x20907a[_0x1627e0][_0x0408('0x17')]);var _0x280e0d=getUserApplications(_0x40ea29,_0x20907a[_0x1627e0],_0x20907a[_0x1627e0][_0x0408('0x13')]);_0x3b8608=_0x3b8608['concat'](_0x2bebc8,_0x280e0d);}return _0x3b8608;};var getChanSpyPromise=function(_0x682e47,_0x2df694){return new BPromise(function(_0x4e9bf4,_0xfe94b){return _0x682e47[_0x0408('0x18')]['findAll']({'attributes':['id',_0x0408('0x13'),_0x0408('0x17')],'where':{'role':_0x0408('0x19'),'chanspy':!![]},'raw':!![]})[_0x0408('0x1a')](function(_0xc76bbc){if(_0xc76bbc){return _0x4e9bf4(getChanSpyApplications(_0x2df694,_0xc76bbc));}return _0x4e9bf4([]);})[_0x0408('0x1b')](function(_0x3dccc6){_0xfe94b(_0x3dccc6);});});};module[_0x0408('0x1c')]=function(_0x501eff,_0x344d19){var _0x38c221=_0x501eff[_0x0408('0x1d')];return _0x501eff[_0x0408('0x1e')](_0x0408('0x1f'),attributes,{'tableName':'voice_chanspy','paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x3239a0,_0x545869,_0x488f43){return getChanSpyPromise(_0x38c221,_0x3239a0)[_0x0408('0x1a')](function(_0x4b5d0f){if(_0x4b5d0f&&_0x4b5d0f[_0x0408('0x16')]){return _0x38c221[_0x0408('0x20')]['bulkCreate'](_0x4b5d0f);}})['then'](function(){_0x488f43();})['catch'](function(_0x538812){_0x488f43(_0x538812);});},'afterUpdate':function(_0x1d0c2b,_0x27e4be,_0x54d49b){return _0x38c221[_0x0408('0x20')][_0x0408('0x21')]({'where':{'ChanSpyId':_0x1d0c2b['id']}})[_0x0408('0x1a')](function(){return getChanSpyPromise(_0x38c221,_0x1d0c2b);})[_0x0408('0x1a')](function(_0x57f189){if(_0x57f189&&_0x57f189['length']){return _0x38c221[_0x0408('0x20')][_0x0408('0x22')](_0x57f189);}})['then'](function(){_0x54d49b();})[_0x0408('0x1b')](function(_0x28c14b){_0x54d49b(_0x28c14b);});},'afterDestroy':function(_0x5a5d35,_0x116e47,_0x43bcb8){return _0x38c221[_0x0408('0x20')]['destroy']({'where':{'ChanSpyId':_0x5a5d35['id']}})[_0x0408('0x1a')](function(){_0x43bcb8();})[_0x0408('0x1b')](function(_0x29c978){_0x43bcb8(_0x29c978);});}}});};
\ No newline at end of file
+var _0x9c18=['Authenticate','password','SIP/%s,%s','options','StopMixMonitor','internal','name','concat','agent','then','exports','models','define','VoiceChanSpy','voice_chanspy','length','VoiceExtension','bulkCreate','catch','destroy','lodash','util','../../config/logger','api','./voiceChanSpy.attributes','from-sip','system','format','%s%s','prefix','push','merge','CDR(type)=%s','chanspy','record','MixMonitor','${UNIQUEID}.%s,ab','recordingFormat'];(function(_0x37d2d4,_0x41c1bd){var _0x5dbefe=function(_0x37519f){while(--_0x37519f){_0x37d2d4['push'](_0x37d2d4['shift']());}};_0x5dbefe(++_0x41c1bd);}(_0x9c18,0x16a));var _0x89c1=function(_0x565c49,_0x54acd0){_0x565c49=_0x565c49-0x0;var _0x20ca34=_0x9c18[_0x565c49];return _0x20ca34;};'use strict';var _=require(_0x89c1('0x0'));var util=require(_0x89c1('0x1'));var BPromise=require('bluebird');var logger=require(_0x89c1('0x2'))(_0x89c1('0x3'));var attributes=require(_0x89c1('0x4'));var getUserApplications=function(_0x26aa09,_0x4cfad,_0xb93582){var _0x1574ef=0x1;var _0x1d1989=[];var _0x4202c7={'context':_0x89c1('0x5'),'type':_0x89c1('0x6'),'isApp':![]};var _0x1b2158={'exten':util[_0x89c1('0x7')](_0x89c1('0x8'),_0x26aa09[_0x89c1('0x9')],_0xb93582),'ChanSpyId':_0x26aa09['id'],'UserId':_0x4cfad['id']};_0x1d1989[_0x89c1('0xa')](_[_0x89c1('0xb')]({'app':'Set','appdata':util[_0x89c1('0x7')](_0x89c1('0xc'),_0x89c1('0xd')),'priority':_0x1574ef++},_0x4202c7,_0x1b2158));if(_0x26aa09[_0x89c1('0xe')]){_0x1d1989['push'](_[_0x89c1('0xb')]({'app':_0x89c1('0xf'),'appdata':util[_0x89c1('0x7')](_0x89c1('0x10'),_0x26aa09[_0x89c1('0x11')]),'priority':_0x1574ef++},_0x4202c7,_0x1b2158));}if(_0x26aa09['auth']){_0x1d1989[_0x89c1('0xa')](_[_0x89c1('0xb')]({'app':_0x89c1('0x12'),'appdata':_0x26aa09[_0x89c1('0x13')],'priority':_0x1574ef++},_0x4202c7,_0x1b2158));}_0x1d1989[_0x89c1('0xa')](_[_0x89c1('0xb')]({'app':'ChanSpy','appdata':util[_0x89c1('0x7')](_0x89c1('0x14'),_0x4cfad['name'],_0x26aa09[_0x89c1('0x15')]?_0x26aa09[_0x89c1('0x15')]['join'](''):''),'priority':_0x1574ef++},_0x4202c7,_0x1b2158));if(_0x26aa09[_0x89c1('0xe')]){_0x1d1989['push'](_['merge']({'app':_0x89c1('0x16'),'priority':_0x1574ef++},_0x4202c7,_0x1b2158));}return _0x1d1989;};var getChanSpyApplications=function(_0x453cd1,_0xc21eb3){var _0x31766e=[];for(var _0x351254=0x0,_0x515ff2=0x1;_0x351254<_0xc21eb3['length'];_0x351254++,_0x515ff2=0x1){var _0x156d3b=getUserApplications(_0x453cd1,_0xc21eb3[_0x351254],_0xc21eb3[_0x351254][_0x89c1('0x17')]);var _0x1736eb=getUserApplications(_0x453cd1,_0xc21eb3[_0x351254],_0xc21eb3[_0x351254][_0x89c1('0x18')]);_0x31766e=_0x31766e[_0x89c1('0x19')](_0x156d3b,_0x1736eb);}return _0x31766e;};var getChanSpyPromise=function(_0x50dac2,_0x4c5465){return new BPromise(function(_0x279c8f,_0x295796){return _0x50dac2['User']['findAll']({'attributes':['id',_0x89c1('0x18'),_0x89c1('0x17')],'where':{'role':_0x89c1('0x1a'),'chanspy':!![]},'raw':!![]})[_0x89c1('0x1b')](function(_0x23e466){if(_0x23e466){return _0x279c8f(getChanSpyApplications(_0x4c5465,_0x23e466));}return _0x279c8f([]);})['catch'](function(_0x4e704a){_0x295796(_0x4e704a);});});};module[_0x89c1('0x1c')]=function(_0x4c0092,_0x345eb5){var _0x4c5776=_0x4c0092[_0x89c1('0x1d')];return _0x4c0092[_0x89c1('0x1e')](_0x89c1('0x1f'),attributes,{'tableName':_0x89c1('0x20'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x59ebad,_0x27f179,_0x5b57e2){return getChanSpyPromise(_0x4c5776,_0x59ebad)[_0x89c1('0x1b')](function(_0x2cc203){if(_0x2cc203&&_0x2cc203[_0x89c1('0x21')]){return _0x4c5776[_0x89c1('0x22')][_0x89c1('0x23')](_0x2cc203);}})['then'](function(){_0x5b57e2();})[_0x89c1('0x24')](function(_0x1b991c){_0x5b57e2(_0x1b991c);});},'afterUpdate':function(_0x45ab11,_0x43e6fa,_0x38b282){return _0x4c5776[_0x89c1('0x22')][_0x89c1('0x25')]({'where':{'ChanSpyId':_0x45ab11['id']}})[_0x89c1('0x1b')](function(){return getChanSpyPromise(_0x4c5776,_0x45ab11);})[_0x89c1('0x1b')](function(_0x410f1c){if(_0x410f1c&&_0x410f1c[_0x89c1('0x21')]){return _0x4c5776[_0x89c1('0x22')][_0x89c1('0x23')](_0x410f1c);}})[_0x89c1('0x1b')](function(){_0x38b282();})['catch'](function(_0x7ef95){_0x38b282(_0x7ef95);});},'afterDestroy':function(_0x406b15,_0x37119b,_0xec522d){return _0x4c5776['VoiceExtension']['destroy']({'where':{'ChanSpyId':_0x406b15['id']}})[_0x89c1('0x1b')](function(){_0xec522d();})['catch'](function(_0x159041){_0xec522d(_0x159041);});}}});};
\ No newline at end of file
index e771610..6ef4083 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd0da=['rpc','client','then','info','VoiceChanSpy,\x20%s,\x20%s','request\x20sent','debug','VoiceChanSpy,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger'];(function(_0x207411,_0x510818){var _0x421e8d=function(_0x1459e3){while(--_0x1459e3){_0x207411['push'](_0x207411['shift']());}};_0x421e8d(++_0x510818);}(_0xd0da,0x1b1));var _0xad0d=function(_0x485abd,_0x32c7c1){_0x485abd=_0x485abd-0x0;var _0x3379f1=_0xd0da[_0x485abd];return _0x3379f1;};'use strict';var _=require(_0xad0d('0x0'));var util=require(_0xad0d('0x1'));var moment=require(_0xad0d('0x2'));var BPromise=require(_0xad0d('0x3'));var rs=require(_0xad0d('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0xad0d('0x5'));var logger=require(_0xad0d('0x6'))(_0xad0d('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xad0d('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x5cfc7d,_0xc14f42,_0xa95863){return new BPromise(function(_0xcc6f55,_0xc7e517){return client['request'](_0x5cfc7d,_0xa95863)[_0xad0d('0x9')](function(_0x162095){logger[_0xad0d('0xa')](_0xad0d('0xb'),_0xc14f42,_0xad0d('0xc'));logger[_0xad0d('0xd')](_0xad0d('0xe'),_0xc14f42,_0xad0d('0xc'),JSON[_0xad0d('0xf')](_0x162095));if(_0x162095[_0xad0d('0x10')]){if(_0x162095[_0xad0d('0x10')][_0xad0d('0x11')]===0x1f4){logger[_0xad0d('0x10')]('VoiceChanSpy,\x20%s,\x20%s',_0xc14f42,_0x162095[_0xad0d('0x10')][_0xad0d('0x12')]);return _0xc7e517(_0x162095['error'][_0xad0d('0x12')]);}logger[_0xad0d('0x10')]('VoiceChanSpy,\x20%s,\x20%s',_0xc14f42,_0x162095[_0xad0d('0x10')][_0xad0d('0x12')]);return _0xcc6f55(_0x162095['error'][_0xad0d('0x12')]);}else{logger[_0xad0d('0xa')]('VoiceChanSpy,\x20%s,\x20%s',_0xc14f42,_0xad0d('0xc'));_0xcc6f55(_0x162095['result']['message']);}})[_0xad0d('0x13')](function(_0x3677b5){logger[_0xad0d('0x10')]('VoiceChanSpy,\x20%s,\x20%s',_0xc14f42,_0x3677b5);_0xc7e517(_0x3677b5);});});}
\ No newline at end of file
+var _0x196b=['info','VoiceChanSpy,\x20%s,\x20%s','debug','VoiceChanSpy,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','catch','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','then'];(function(_0x83c9ab,_0x55c6e1){var _0x4b8361=function(_0x36a299){while(--_0x36a299){_0x83c9ab['push'](_0x83c9ab['shift']());}};_0x4b8361(++_0x55c6e1);}(_0x196b,0x9d));var _0xb196=function(_0x597c1c,_0x1b0d8f){_0x597c1c=_0x597c1c-0x0;var _0x1e1ca2=_0x196b[_0x597c1c];return _0x1e1ca2;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xb196('0x0'));var BPromise=require(_0xb196('0x1'));var rs=require(_0xb196('0x2'));var fs=require('fs');var db=require(_0xb196('0x3'))['db'];var utils=require(_0xb196('0x4'));var logger=require(_0xb196('0x5'))(_0xb196('0x6'));var config=require(_0xb196('0x7'));var jayson=require(_0xb196('0x8'));var client=jayson['client'][_0xb196('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x471b68,_0x1fe888,_0x3a4d43){return new BPromise(function(_0x4f54cb,_0xb78dca){return client['request'](_0x471b68,_0x3a4d43)[_0xb196('0xa')](function(_0x1d2f48){logger[_0xb196('0xb')](_0xb196('0xc'),_0x1fe888,'request\x20sent');logger[_0xb196('0xd')](_0xb196('0xe'),_0x1fe888,_0xb196('0xf'),JSON[_0xb196('0x10')](_0x1d2f48));if(_0x1d2f48['error']){if(_0x1d2f48[_0xb196('0x11')]['code']===0x1f4){logger[_0xb196('0x11')](_0xb196('0xc'),_0x1fe888,_0x1d2f48[_0xb196('0x11')][_0xb196('0x12')]);return _0xb78dca(_0x1d2f48[_0xb196('0x11')]['message']);}logger[_0xb196('0x11')](_0xb196('0xc'),_0x1fe888,_0x1d2f48[_0xb196('0x11')][_0xb196('0x12')]);return _0x4f54cb(_0x1d2f48[_0xb196('0x11')][_0xb196('0x12')]);}else{logger[_0xb196('0xb')](_0xb196('0xc'),_0x1fe888,'request\x20sent');_0x4f54cb(_0x1d2f48[_0xb196('0x13')][_0xb196('0x12')]);}})[_0xb196('0x14')](function(_0x2bc19c){logger['error'](_0xb196('0xc'),_0x1fe888,_0x2bc19c);_0xb78dca(_0x2bc19c);});});}
\ No newline at end of file
index 62ee14b..825044a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x28f1=['../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceContext.controller','isAuthenticated','index','get','show','create','put','/:id','update','delete','destroy','exports','multer','path','express','Router'];(function(_0x5b7114,_0x2217ab){var _0x378b85=function(_0x175808){while(--_0x175808){_0x5b7114['push'](_0x5b7114['shift']());}};_0x378b85(++_0x2217ab);}(_0x28f1,0x178));var _0x128f=function(_0x12c76e,_0x4d3ea9){_0x12c76e=_0x12c76e-0x0;var _0x12cf10=_0x28f1[_0x12c76e];return _0x12cf10;};'use strict';var multer=require(_0x128f('0x0'));var util=require('util');var path=require(_0x128f('0x1'));var express=require(_0x128f('0x2'));var router=express[_0x128f('0x3')]();var auth=require(_0x128f('0x4'));var interaction=require(_0x128f('0x5'));var config=require(_0x128f('0x6'));var controller=require(_0x128f('0x7'));router['get']('/',auth[_0x128f('0x8')](),controller[_0x128f('0x9')]);router[_0x128f('0xa')]('/:id',auth['isAuthenticated'](),controller[_0x128f('0xb')]);router['post']('/',auth[_0x128f('0x8')](),controller[_0x128f('0xc')]);router[_0x128f('0xd')](_0x128f('0xe'),auth[_0x128f('0x8')](),controller[_0x128f('0xf')]);router[_0x128f('0x10')](_0x128f('0xe'),auth['isAuthenticated'](),controller[_0x128f('0x11')]);module[_0x128f('0x12')]=router;
\ No newline at end of file
+var _0x224e=['show','post','create','put','update','/:id','destroy','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceContext.controller','isAuthenticated','index'];(function(_0xb1ef6e,_0x17dc04){var _0x3ae624=function(_0x1b94dc){while(--_0x1b94dc){_0xb1ef6e['push'](_0xb1ef6e['shift']());}};_0x3ae624(++_0x17dc04);}(_0x224e,0xf2));var _0xe224=function(_0x3f79ef,_0x434740){_0x3f79ef=_0x3f79ef-0x0;var _0x34cb16=_0x224e[_0x3f79ef];return _0x34cb16;};'use strict';var multer=require(_0xe224('0x0'));var util=require('util');var path=require(_0xe224('0x1'));var express=require(_0xe224('0x2'));var router=express[_0xe224('0x3')]();var auth=require(_0xe224('0x4'));var interaction=require(_0xe224('0x5'));var config=require(_0xe224('0x6'));var controller=require(_0xe224('0x7'));router['get']('/',auth[_0xe224('0x8')](),controller[_0xe224('0x9')]);router['get']('/:id',auth[_0xe224('0x8')](),controller[_0xe224('0xa')]);router[_0xe224('0xb')]('/',auth[_0xe224('0x8')](),controller[_0xe224('0xc')]);router[_0xe224('0xd')]('/:id',auth[_0xe224('0x8')](),controller[_0xe224('0xe')]);router['delete'](_0xe224('0xf'),auth[_0xe224('0x8')](),controller[_0xe224('0x10')]);module[_0xe224('0x11')]=router;
\ No newline at end of file
index 6d99b5e..f3580cc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0075=['name','BOOLEAN','sequelize','exports','STRING'];(function(_0x37225a,_0x2f310d){var _0x126efc=function(_0x5c5465){while(--_0x5c5465){_0x37225a['push'](_0x37225a['shift']());}};_0x126efc(++_0x2f310d);}(_0x0075,0xbb));var _0x5007=function(_0x4a31c5,_0x5a4ad9){_0x4a31c5=_0x4a31c5-0x0;var _0x59f364=_0x0075[_0x4a31c5];return _0x59f364;};'use strict';var Sequelize=require(_0x5007('0x0'));module[_0x5007('0x1')]={'name':{'type':Sequelize[_0x5007('0x2')],'unique':_0x5007('0x3')},'description':{'type':Sequelize[_0x5007('0x2')],'allowNull':!![]},'defaultEntry':{'type':Sequelize[_0x5007('0x4')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x1da3=['sequelize','STRING','name'];(function(_0x57134a,_0x3d95b4){var _0x199547=function(_0x2bd5f7){while(--_0x2bd5f7){_0x57134a['push'](_0x57134a['shift']());}};_0x199547(++_0x3d95b4);}(_0x1da3,0xcc));var _0x31da=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0x1da3[_0x57b54c];return _0x59cc19;};'use strict';var Sequelize=require(_0x31da('0x0'));module['exports']={'name':{'type':Sequelize[_0x31da('0x1')],'unique':_0x31da('0x2')},'description':{'type':Sequelize[_0x31da('0x1')],'allowNull':!![]},'defaultEntry':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0}};
\ No newline at end of file
index 41799b7..017dc92 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2451=['render','writeFileSync','/etc/asterisk/extensions_xcally_contexts.conf','Reload','create','chan_sip.so','body','fast-json-patch','request-promise','moment','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','request','then','info','VoiceContext,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','sendStatus','status','offset','set','Content-Range','json','reject','save','update','destroy','name','index','VoiceContext','rawAttributes','keys','query','dateStart','dateEnd','filters','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','add','day','filter','merge','map','count','includeAll','include','findAll','rows','show','params','options','find','readFileSync','join','root','server/files/templates/context.ejs','utf8'];(function(_0x2749b8,_0x570e1c){var _0x589657=function(_0x4b5169){while(--_0x4b5169){_0x2749b8['push'](_0x2749b8['shift']());}};_0x589657(++_0x570e1c);}(_0x2451,0xb7));var _0x1245=function(_0x46aff0,_0x122890){_0x46aff0=_0x46aff0-0x0;var _0x9d78cf=_0x2451[_0x46aff0];return _0x9d78cf;};'use strict';var jsonpatch=require(_0x1245('0x0'));var rp=require(_0x1245('0x1'));var moment=require(_0x1245('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x1245('0x3'));var sox=require(_0x1245('0x4'));var csv=require(_0x1245('0x5'));var ejs=require(_0x1245('0x6'));var fs=require('fs');var _=require(_0x1245('0x7'));var squel=require('squel');var crypto=require(_0x1245('0x8'));var jsforce=require(_0x1245('0x9'));var deskjs=require(_0x1245('0xa'));var toCsv=require('to-csv');var querystring=require(_0x1245('0xb'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0x1245('0xc'))(_0x1245('0xd'));var utils=require(_0x1245('0xe'));var config=require(_0x1245('0xf'));var db=require(_0x1245('0x10'))['db'];var jayson=require(_0x1245('0x11'));var client=jayson[_0x1245('0x12')][_0x1245('0x13')]({'port':0x232a});function respondWithRpcPromise(_0x3eb233,_0x575a6a,_0x79b212,_0x23fc5b){return new BPromise(function(_0x54cecc,_0x19308f){var _0x10370c=_0x23fc5b||client;return _0x10370c[_0x1245('0x14')](_0x3eb233,_0x79b212)[_0x1245('0x15')](function(_0x4c6b66){logger[_0x1245('0x16')](_0x1245('0x17'),_0x575a6a,_0x1245('0x18'));logger[_0x1245('0x19')]('VoiceContext,\x20%s,\x20%s,\x20%s',_0x575a6a,_0x1245('0x18'),JSON[_0x1245('0x1a')](_0x4c6b66));if(_0x4c6b66['error']){if(_0x4c6b66['error']['code']===0x1f4){logger[_0x1245('0x1b')](_0x1245('0x17'),_0x575a6a,_0x4c6b66[_0x1245('0x1b')][_0x1245('0x1c')]);return _0x19308f(_0x4c6b66[_0x1245('0x1b')][_0x1245('0x1c')]);}logger[_0x1245('0x1b')](_0x1245('0x17'),_0x575a6a,_0x4c6b66['error']['message']);return _0x54cecc(_0x4c6b66[_0x1245('0x1b')][_0x1245('0x1c')]);}else{logger[_0x1245('0x16')]('VoiceContext,\x20%s,\x20%s',_0x575a6a,_0x1245('0x18'));_0x54cecc(_0x4c6b66[_0x1245('0x1d')][_0x1245('0x1c')]);}})[_0x1245('0x1e')](function(_0x76112d){logger['error']('VoiceContext,\x20%s,\x20%s',_0x575a6a,_0x76112d);_0x19308f(_0x76112d);});});}function respondWithStatusCode(_0x4d1528,_0x519689){_0x519689=_0x519689||0xcc;return function(_0x18c02b){if(_0x18c02b){return _0x4d1528[_0x1245('0x1f')](_0x519689);}return _0x4d1528[_0x1245('0x20')](_0x519689)['end']();};}function respondWithResult(_0x3d56fe,_0x377f53){_0x377f53=_0x377f53||0xc8;return function(_0x4b9ce6){if(_0x4b9ce6){return _0x3d56fe[_0x1245('0x20')](_0x377f53)['json'](_0x4b9ce6);}};}function respondWithFilteredResult(_0x566f74,_0x572a8f){return function(_0x590794){if(_0x590794){var _0x2e497b=_0x590794['count'],_0x576fa5=_0x572a8f[_0x1245('0x21')],_0x19890a=_0x572a8f['offset']+_0x572a8f['limit'],_0x41d12f;if(_0x19890a>=_0x2e497b){_0x19890a=_0x2e497b;_0x41d12f=0xc8;}else{_0x41d12f=0xce;}_0x566f74[_0x1245('0x20')](_0x41d12f);return _0x566f74[_0x1245('0x22')](_0x1245('0x23'),_0x576fa5+'-'+_0x19890a+'/'+_0x2e497b)[_0x1245('0x24')](_0x590794);}return null;};}function patchUpdates(_0x1e753b){return function(_0x21cb4d){try{jsonpatch['apply'](_0x21cb4d,_0x1e753b,!![]);}catch(_0x1369ae){return BPromise[_0x1245('0x25')](_0x1369ae);}return _0x21cb4d[_0x1245('0x26')]();};}function saveUpdates(_0x3f942d,_0x272b42){return function(_0x5069b4){if(_0x5069b4){return _0x5069b4[_0x1245('0x27')](_0x3f942d)[_0x1245('0x15')](function(_0x14782b){return _0x14782b;});}return null;};}function removeEntity(_0x194795,_0x5a3dbc){return function(_0x40ee5e){if(_0x40ee5e){return _0x40ee5e[_0x1245('0x28')]()[_0x1245('0x15')](function(){_0x194795[_0x1245('0x20')](0xcc)['end']();});}};}function handleEntityNotFound(_0x440cef,_0x51f905){return function(_0x147424){if(!_0x147424){_0x440cef[_0x1245('0x1f')](0x194);}return _0x147424;};}function handleError(_0x23db1c,_0x3f18f3){_0x3f18f3=_0x3f18f3||0x1f4;return function(_0x8d5051){logger[_0x1245('0x1b')](_0x8d5051['stack']);if(_0x8d5051[_0x1245('0x29')]){delete _0x8d5051[_0x1245('0x29')];}_0x23db1c[_0x1245('0x20')](_0x3f18f3)['send'](_0x8d5051);};}exports[_0x1245('0x2a')]=function(_0x354d63,_0x31e5ff){var _0x3a1605={},_0x3af9e3={},_0x14ff85={'count':0x0,'rows':[]};var _0x420078=db[_0x1245('0x2b')][_0x1245('0x2c')];_0x3af9e3['model']=_[_0x1245('0x2d')](_0x420078);var _0x10e7d1={'dateStart':_0x354d63[_0x1245('0x2e')][_0x1245('0x2f')],'dateEnd':_0x354d63['query'][_0x1245('0x30')]};delete _0x354d63[_0x1245('0x2e')]['dateStart'];delete _0x354d63['query']['dateEnd'];_0x3af9e3[_0x1245('0x2e')]=_[_0x1245('0x2d')](_0x354d63[_0x1245('0x2e')]);_0x3af9e3[_0x1245('0x31')]=_[_0x1245('0x32')](_0x3af9e3['model'],_0x3af9e3[_0x1245('0x2e')]);_0x3a1605[_0x1245('0x33')]=_['intersection'](_0x3af9e3[_0x1245('0x34')],qs[_0x1245('0x35')](_0x354d63[_0x1245('0x2e')][_0x1245('0x35')]));_0x3a1605[_0x1245('0x33')]=_0x3a1605[_0x1245('0x33')][_0x1245('0x36')]?_0x3a1605[_0x1245('0x33')]:_0x3af9e3['model'];if(!_0x354d63['query'][_0x1245('0x37')](_0x1245('0x38'))){_0x3a1605[_0x1245('0x39')]=qs[_0x1245('0x39')](_0x354d63[_0x1245('0x2e')][_0x1245('0x39')]);_0x3a1605[_0x1245('0x21')]=qs[_0x1245('0x21')](_0x354d63[_0x1245('0x2e')][_0x1245('0x21')]);}_0x3a1605[_0x1245('0x3a')]=qs['sort'](_0x354d63[_0x1245('0x2e')][_0x1245('0x3b')]);_0x3a1605[_0x1245('0x3c')]=qs[_0x1245('0x31')](_[_0x1245('0x3d')](_0x354d63[_0x1245('0x2e')],_0x3af9e3['filters']));if(_0x10e7d1[_0x1245('0x2f')]){if(_0x10e7d1['dateEnd']){_0x10e7d1[_0x1245('0x30')]=moment(_0x10e7d1[_0x1245('0x30')])[_0x1245('0x3e')](0x1,_0x1245('0x3f'));}else{_0x10e7d1[_0x1245('0x30')]=moment(_0x10e7d1[_0x1245('0x2f')])[_0x1245('0x3e')](0x1,_0x1245('0x3f'));}_['merge'](_0x3a1605['where'],{'createdAt':{'$gte':_0x10e7d1['dateStart'],'$lte':_0x10e7d1[_0x1245('0x30')]}});}if(_0x354d63[_0x1245('0x2e')][_0x1245('0x40')]){_0x3a1605[_0x1245('0x3c')]=_[_0x1245('0x41')](_0x3a1605[_0x1245('0x3c')],{'$or':_[_0x1245('0x42')](_0x3a1605[_0x1245('0x33')],function(_0x599a03){var _0x15ad97={};_0x15ad97[_0x599a03]={'$like':'%'+_0x354d63[_0x1245('0x2e')][_0x1245('0x40')]+'%'};return _0x15ad97;})});}_0x3a1605=_[_0x1245('0x41')]({},_0x3a1605,_0x354d63['options']);var _0x2bc000={'where':_0x3a1605[_0x1245('0x3c')]};return db[_0x1245('0x2b')]['count'](_0x2bc000)[_0x1245('0x15')](function(_0x265349){_0x14ff85[_0x1245('0x43')]=_0x265349;if(_0x354d63[_0x1245('0x2e')][_0x1245('0x44')]){_0x3a1605[_0x1245('0x45')]=[{'all':!![]}];}return db['VoiceContext'][_0x1245('0x46')](_0x3a1605);})[_0x1245('0x15')](function(_0x4afe93){_0x14ff85[_0x1245('0x47')]=_0x4afe93;return _0x14ff85;})[_0x1245('0x15')](respondWithFilteredResult(_0x31e5ff,_0x3a1605))[_0x1245('0x1e')](handleError(_0x31e5ff,null));};exports[_0x1245('0x48')]=function(_0x391666,_0x4f7fc7){var _0x4c4431={'raw':![],'where':{'id':_0x391666[_0x1245('0x49')]['id']}},_0x7b123b={};_0x7b123b['model']=_['keys'](db[_0x1245('0x2b')]['rawAttributes']);_0x7b123b['query']=_[_0x1245('0x2d')](_0x391666['query']);_0x7b123b[_0x1245('0x31')]=_['intersection'](_0x7b123b[_0x1245('0x34')],_0x7b123b[_0x1245('0x2e')]);_0x4c4431['attributes']=_['intersection'](_0x7b123b[_0x1245('0x34')],qs[_0x1245('0x35')](_0x391666[_0x1245('0x2e')][_0x1245('0x35')]));_0x4c4431[_0x1245('0x33')]=_0x4c4431['attributes'][_0x1245('0x36')]?_0x4c4431['attributes']:_0x7b123b['model'];if(_0x391666[_0x1245('0x2e')][_0x1245('0x44')]){_0x4c4431[_0x1245('0x45')]=[{'all':!![]}];}_0x4c4431=_[_0x1245('0x41')]({},_0x4c4431,_0x391666[_0x1245('0x4a')]);return db[_0x1245('0x2b')][_0x1245('0x4b')](_0x4c4431)['then'](handleEntityNotFound(_0x4f7fc7,null))[_0x1245('0x15')](respondWithResult(_0x4f7fc7,null))[_0x1245('0x1e')](handleError(_0x4f7fc7,null));};exports['create']=function(_0x2624dc,_0x743b0b,_0x1dce11){var _0x22bb4a;return db[_0x1245('0x2b')]['create'](_0x2624dc['body'],{'raw':!![]})['then'](function(_0x1270d2){_0x22bb4a=_0x1270d2;return db[_0x1245('0x2b')][_0x1245('0x46')]({'raw':!![]});})[_0x1245('0x15')](function(_0x485faa){var _0x5e600a=fs[_0x1245('0x4c')](path[_0x1245('0x4d')](config[_0x1245('0x4e')],_0x1245('0x4f')),_0x1245('0x50'));var _0x4c01e9=ejs[_0x1245('0x51')](_0x5e600a,{'contexts':_0x485faa||[]});fs[_0x1245('0x52')](_0x1245('0x53'),_0x4c01e9);})[_0x1245('0x15')](function(){return respondWithRpcPromise(_0x1245('0x54'),_0x1245('0x55'),{'module':_0x1245('0x56')});})[_0x1245('0x15')](function(){return _0x22bb4a;})['then'](respondWithResult(_0x743b0b,0xc9))['catch'](handleError(_0x743b0b,null));};exports[_0x1245('0x27')]=function(_0x174046,_0x575b06,_0x4f5bb1){var _0x310a75;return db[_0x1245('0x2b')][_0x1245('0x4b')]({'where':{'id':_0x174046[_0x1245('0x49')]['id']}})[_0x1245('0x15')](handleEntityNotFound(_0x575b06,null))[_0x1245('0x15')](saveUpdates(_0x174046[_0x1245('0x57')],null))[_0x1245('0x15')](function(_0x38bbda){if(_0x38bbda){_0x310a75=_0x38bbda;return db[_0x1245('0x2b')]['findAll']({'raw':!![]});}})['then'](function(_0x2353b9){var _0x52729c=fs[_0x1245('0x4c')](path['join'](config[_0x1245('0x4e')],_0x1245('0x4f')),_0x1245('0x50'));var _0x3794eb=ejs['render'](_0x52729c,{'contexts':_0x2353b9||[]});fs[_0x1245('0x52')](_0x1245('0x53'),_0x3794eb);})[_0x1245('0x15')](function(){return respondWithRpcPromise(_0x1245('0x54'),_0x1245('0x27'),{'module':_0x1245('0x56')});})[_0x1245('0x15')](function(){return _0x310a75;})[_0x1245('0x15')](respondWithResult(_0x575b06,null))[_0x1245('0x1e')](handleError(_0x575b06,null));};exports[_0x1245('0x28')]=function(_0x2f7c2d,_0x5704dc,_0x2eb338){var _0x27dc56;return db['VoiceContext'][_0x1245('0x4b')]({'where':{'id':_0x2f7c2d[_0x1245('0x49')]['id']}})[_0x1245('0x15')](handleEntityNotFound(_0x5704dc,null))['then'](removeEntity(_0x5704dc,null))[_0x1245('0x15')](function(){return db[_0x1245('0x2b')][_0x1245('0x46')]({'raw':!![]});})[_0x1245('0x15')](function(_0x2e8e05){var _0x4341b4=fs[_0x1245('0x4c')](path['join'](config[_0x1245('0x4e')],_0x1245('0x4f')),_0x1245('0x50'));var _0x4774a2=ejs['render'](_0x4341b4,{'contexts':_0x2e8e05});fs[_0x1245('0x52')](_0x1245('0x53'),_0x4774a2);return respondWithRpcPromise(_0x1245('0x54'),_0x1245('0x28'),{'module':'chan_sip.so'});})['catch'](handleError(_0x5704dc,null));};
\ No newline at end of file
+var _0x9bfa=['render','writeFileSync','/etc/asterisk/extensions_xcally_contexts.conf','Reload','chan_sip.so','body','utf8','fast-json-patch','request-promise','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','client','request','then','info','VoiceContext,\x20%s,\x20%s','request\x20sent','debug','VoiceContext,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','sendStatus','status','json','offset','limit','set','Content-Range','apply','reject','update','destroy','end','stack','name','send','index','VoiceContext','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','length','sort','where','filters','pick','add','day','merge','filter','map','options','count','include','findAll','rows','show','params','includeAll','find','create','readFileSync','join','root','server/files/templates/context.ejs'];(function(_0x49b312,_0x2b0ee5){var _0x33b94b=function(_0x4f1be5){while(--_0x4f1be5){_0x49b312['push'](_0x49b312['shift']());}};_0x33b94b(++_0x2b0ee5);}(_0x9bfa,0x167));var _0xa9bf=function(_0x40150f,_0x1be18d){_0x40150f=_0x40150f-0x0;var _0x2babe2=_0x9bfa[_0x40150f];return _0x2babe2;};'use strict';var jsonpatch=require(_0xa9bf('0x0'));var rp=require(_0xa9bf('0x1'));var moment=require('moment');var BPromise=require(_0xa9bf('0x2'));var Mustache=require(_0xa9bf('0x3'));var util=require(_0xa9bf('0x4'));var path=require('path');var sox=require(_0xa9bf('0x5'));var csv=require(_0xa9bf('0x6'));var ejs=require(_0xa9bf('0x7'));var fs=require('fs');var _=require(_0xa9bf('0x8'));var squel=require(_0xa9bf('0x9'));var crypto=require(_0xa9bf('0xa'));var jsforce=require(_0xa9bf('0xb'));var deskjs=require(_0xa9bf('0xc'));var toCsv=require('to-csv');var querystring=require(_0xa9bf('0xd'));var Papa=require(_0xa9bf('0xe'));var qs=require(_0xa9bf('0xf'));var logger=require(_0xa9bf('0x10'))('api');var utils=require(_0xa9bf('0x11'));var config=require(_0xa9bf('0x12'));var db=require('../../mysqldb')['db'];var jayson=require('jayson/promise');var client=jayson[_0xa9bf('0x13')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1c7e57,_0xd1b5eb,_0x47d7c1,_0x2a02eb){return new BPromise(function(_0x41f345,_0x1f155b){var _0x319b34=_0x2a02eb||client;return _0x319b34[_0xa9bf('0x14')](_0x1c7e57,_0x47d7c1)[_0xa9bf('0x15')](function(_0x222217){logger[_0xa9bf('0x16')](_0xa9bf('0x17'),_0xd1b5eb,_0xa9bf('0x18'));logger[_0xa9bf('0x19')](_0xa9bf('0x1a'),_0xd1b5eb,'request\x20sent',JSON['stringify'](_0x222217));if(_0x222217['error']){if(_0x222217[_0xa9bf('0x1b')][_0xa9bf('0x1c')]===0x1f4){logger[_0xa9bf('0x1b')](_0xa9bf('0x17'),_0xd1b5eb,_0x222217['error'][_0xa9bf('0x1d')]);return _0x1f155b(_0x222217[_0xa9bf('0x1b')][_0xa9bf('0x1d')]);}logger[_0xa9bf('0x1b')](_0xa9bf('0x17'),_0xd1b5eb,_0x222217['error'][_0xa9bf('0x1d')]);return _0x41f345(_0x222217[_0xa9bf('0x1b')]['message']);}else{logger['info'](_0xa9bf('0x17'),_0xd1b5eb,_0xa9bf('0x18'));_0x41f345(_0x222217[_0xa9bf('0x1e')][_0xa9bf('0x1d')]);}})[_0xa9bf('0x1f')](function(_0x17fc3f){logger[_0xa9bf('0x1b')](_0xa9bf('0x17'),_0xd1b5eb,_0x17fc3f);_0x1f155b(_0x17fc3f);});});}function respondWithStatusCode(_0x5c4ad5,_0x5bca40){_0x5bca40=_0x5bca40||0xcc;return function(_0x4748c5){if(_0x4748c5){return _0x5c4ad5[_0xa9bf('0x20')](_0x5bca40);}return _0x5c4ad5[_0xa9bf('0x21')](_0x5bca40)['end']();};}function respondWithResult(_0xa324f4,_0x397c98){_0x397c98=_0x397c98||0xc8;return function(_0x4c78f3){if(_0x4c78f3){return _0xa324f4[_0xa9bf('0x21')](_0x397c98)[_0xa9bf('0x22')](_0x4c78f3);}};}function respondWithFilteredResult(_0x27ac8b,_0x3ddff5){return function(_0x45d1b6){if(_0x45d1b6){var _0x1b3540=_0x45d1b6['count'],_0x439910=_0x3ddff5[_0xa9bf('0x23')],_0x296cd6=_0x3ddff5[_0xa9bf('0x23')]+_0x3ddff5[_0xa9bf('0x24')],_0x13ca75;if(_0x296cd6>=_0x1b3540){_0x296cd6=_0x1b3540;_0x13ca75=0xc8;}else{_0x13ca75=0xce;}_0x27ac8b['status'](_0x13ca75);return _0x27ac8b[_0xa9bf('0x25')](_0xa9bf('0x26'),_0x439910+'-'+_0x296cd6+'/'+_0x1b3540)[_0xa9bf('0x22')](_0x45d1b6);}return null;};}function patchUpdates(_0x37b01d){return function(_0x494c34){try{jsonpatch[_0xa9bf('0x27')](_0x494c34,_0x37b01d,!![]);}catch(_0x36019f){return BPromise[_0xa9bf('0x28')](_0x36019f);}return _0x494c34['save']();};}function saveUpdates(_0x3cf741,_0x4a1ef8){return function(_0x47e0cd){if(_0x47e0cd){return _0x47e0cd[_0xa9bf('0x29')](_0x3cf741)[_0xa9bf('0x15')](function(_0x473b7d){return _0x473b7d;});}return null;};}function removeEntity(_0x322546,_0x5b3113){return function(_0x3ab79b){if(_0x3ab79b){return _0x3ab79b[_0xa9bf('0x2a')]()[_0xa9bf('0x15')](function(){_0x322546[_0xa9bf('0x21')](0xcc)[_0xa9bf('0x2b')]();});}};}function handleEntityNotFound(_0x4877e7,_0x513f0d){return function(_0x333577){if(!_0x333577){_0x4877e7['sendStatus'](0x194);}return _0x333577;};}function handleError(_0x3e8234,_0x3de9bf){_0x3de9bf=_0x3de9bf||0x1f4;return function(_0x4c440d){logger['error'](_0x4c440d[_0xa9bf('0x2c')]);if(_0x4c440d[_0xa9bf('0x2d')]){delete _0x4c440d[_0xa9bf('0x2d')];}_0x3e8234[_0xa9bf('0x21')](_0x3de9bf)[_0xa9bf('0x2e')](_0x4c440d);};}exports[_0xa9bf('0x2f')]=function(_0x5df1b2,_0x114edf){var _0x564507={},_0x4c844c={},_0x4fa004={'count':0x0,'rows':[]};var _0x1b51bf=db[_0xa9bf('0x30')]['rawAttributes'];_0x4c844c[_0xa9bf('0x31')]=_[_0xa9bf('0x32')](_0x1b51bf);var _0x195ae6={'dateStart':_0x5df1b2[_0xa9bf('0x33')][_0xa9bf('0x34')],'dateEnd':_0x5df1b2[_0xa9bf('0x33')][_0xa9bf('0x35')]};delete _0x5df1b2['query']['dateStart'];delete _0x5df1b2[_0xa9bf('0x33')][_0xa9bf('0x35')];_0x4c844c['query']=_['keys'](_0x5df1b2[_0xa9bf('0x33')]);_0x4c844c['filters']=_[_0xa9bf('0x36')](_0x4c844c[_0xa9bf('0x31')],_0x4c844c[_0xa9bf('0x33')]);_0x564507[_0xa9bf('0x37')]=_['intersection'](_0x4c844c[_0xa9bf('0x31')],qs[_0xa9bf('0x38')](_0x5df1b2[_0xa9bf('0x33')][_0xa9bf('0x38')]));_0x564507[_0xa9bf('0x37')]=_0x564507[_0xa9bf('0x37')][_0xa9bf('0x39')]?_0x564507[_0xa9bf('0x37')]:_0x4c844c[_0xa9bf('0x31')];if(!_0x5df1b2[_0xa9bf('0x33')]['hasOwnProperty']('nolimit')){_0x564507[_0xa9bf('0x24')]=qs[_0xa9bf('0x24')](_0x5df1b2['query'][_0xa9bf('0x24')]);_0x564507['offset']=qs[_0xa9bf('0x23')](_0x5df1b2[_0xa9bf('0x33')][_0xa9bf('0x23')]);}_0x564507['order']=qs[_0xa9bf('0x3a')](_0x5df1b2[_0xa9bf('0x33')][_0xa9bf('0x3a')]);_0x564507[_0xa9bf('0x3b')]=qs[_0xa9bf('0x3c')](_[_0xa9bf('0x3d')](_0x5df1b2['query'],_0x4c844c[_0xa9bf('0x3c')]));if(_0x195ae6[_0xa9bf('0x34')]){if(_0x195ae6['dateEnd']){_0x195ae6[_0xa9bf('0x35')]=moment(_0x195ae6[_0xa9bf('0x35')])[_0xa9bf('0x3e')](0x1,_0xa9bf('0x3f'));}else{_0x195ae6[_0xa9bf('0x35')]=moment(_0x195ae6['dateStart'])[_0xa9bf('0x3e')](0x1,_0xa9bf('0x3f'));}_[_0xa9bf('0x40')](_0x564507[_0xa9bf('0x3b')],{'createdAt':{'$gte':_0x195ae6[_0xa9bf('0x34')],'$lte':_0x195ae6[_0xa9bf('0x35')]}});}if(_0x5df1b2[_0xa9bf('0x33')][_0xa9bf('0x41')]){_0x564507[_0xa9bf('0x3b')]=_[_0xa9bf('0x40')](_0x564507[_0xa9bf('0x3b')],{'$or':_[_0xa9bf('0x42')](_0x564507[_0xa9bf('0x37')],function(_0x419ed2){var _0x46c159={};_0x46c159[_0x419ed2]={'$like':'%'+_0x5df1b2[_0xa9bf('0x33')][_0xa9bf('0x41')]+'%'};return _0x46c159;})});}_0x564507=_['merge']({},_0x564507,_0x5df1b2[_0xa9bf('0x43')]);var _0x532630={'where':_0x564507[_0xa9bf('0x3b')]};return db[_0xa9bf('0x30')][_0xa9bf('0x44')](_0x532630)['then'](function(_0x12cb16){_0x4fa004[_0xa9bf('0x44')]=_0x12cb16;if(_0x5df1b2['query']['includeAll']){_0x564507[_0xa9bf('0x45')]=[{'all':!![]}];}return db[_0xa9bf('0x30')][_0xa9bf('0x46')](_0x564507);})[_0xa9bf('0x15')](function(_0x4f08c9){_0x4fa004[_0xa9bf('0x47')]=_0x4f08c9;return _0x4fa004;})[_0xa9bf('0x15')](respondWithFilteredResult(_0x114edf,_0x564507))[_0xa9bf('0x1f')](handleError(_0x114edf,null));};exports[_0xa9bf('0x48')]=function(_0x4f3d97,_0x170d8e){var _0x1467b0={'raw':![],'where':{'id':_0x4f3d97[_0xa9bf('0x49')]['id']}},_0x42e814={};_0x42e814[_0xa9bf('0x31')]=_[_0xa9bf('0x32')](db[_0xa9bf('0x30')]['rawAttributes']);_0x42e814['query']=_[_0xa9bf('0x32')](_0x4f3d97['query']);_0x42e814[_0xa9bf('0x3c')]=_[_0xa9bf('0x36')](_0x42e814[_0xa9bf('0x31')],_0x42e814[_0xa9bf('0x33')]);_0x1467b0[_0xa9bf('0x37')]=_[_0xa9bf('0x36')](_0x42e814[_0xa9bf('0x31')],qs['fields'](_0x4f3d97[_0xa9bf('0x33')][_0xa9bf('0x38')]));_0x1467b0[_0xa9bf('0x37')]=_0x1467b0['attributes'][_0xa9bf('0x39')]?_0x1467b0['attributes']:_0x42e814['model'];if(_0x4f3d97[_0xa9bf('0x33')][_0xa9bf('0x4a')]){_0x1467b0['include']=[{'all':!![]}];}_0x1467b0=_[_0xa9bf('0x40')]({},_0x1467b0,_0x4f3d97[_0xa9bf('0x43')]);return db[_0xa9bf('0x30')][_0xa9bf('0x4b')](_0x1467b0)['then'](handleEntityNotFound(_0x170d8e,null))['then'](respondWithResult(_0x170d8e,null))[_0xa9bf('0x1f')](handleError(_0x170d8e,null));};exports['create']=function(_0x1cba7e,_0x2ae9fe,_0x2d37ea){var _0x54aa50;return db[_0xa9bf('0x30')][_0xa9bf('0x4c')](_0x1cba7e['body'],{'raw':!![]})[_0xa9bf('0x15')](function(_0x23515d){_0x54aa50=_0x23515d;return db['VoiceContext']['findAll']({'raw':!![]});})['then'](function(_0x145e83){var _0x16d182=fs[_0xa9bf('0x4d')](path[_0xa9bf('0x4e')](config[_0xa9bf('0x4f')],_0xa9bf('0x50')),'utf8');var _0x104796=ejs[_0xa9bf('0x51')](_0x16d182,{'contexts':_0x145e83||[]});fs[_0xa9bf('0x52')](_0xa9bf('0x53'),_0x104796);})['then'](function(){return respondWithRpcPromise(_0xa9bf('0x54'),_0xa9bf('0x4c'),{'module':_0xa9bf('0x55')});})['then'](function(){return _0x54aa50;})['then'](respondWithResult(_0x2ae9fe,0xc9))[_0xa9bf('0x1f')](handleError(_0x2ae9fe,null));};exports[_0xa9bf('0x29')]=function(_0x41bdc5,_0x524e14,_0x2cc622){var _0x22de7f;return db[_0xa9bf('0x30')]['find']({'where':{'id':_0x41bdc5[_0xa9bf('0x49')]['id']}})[_0xa9bf('0x15')](handleEntityNotFound(_0x524e14,null))[_0xa9bf('0x15')](saveUpdates(_0x41bdc5[_0xa9bf('0x56')],null))['then'](function(_0x28d6a4){if(_0x28d6a4){_0x22de7f=_0x28d6a4;return db['VoiceContext'][_0xa9bf('0x46')]({'raw':!![]});}})[_0xa9bf('0x15')](function(_0x73e474){var _0x4105e1=fs[_0xa9bf('0x4d')](path['join'](config['root'],_0xa9bf('0x50')),_0xa9bf('0x57'));var _0x2150f2=ejs[_0xa9bf('0x51')](_0x4105e1,{'contexts':_0x73e474||[]});fs['writeFileSync']('/etc/asterisk/extensions_xcally_contexts.conf',_0x2150f2);})['then'](function(){return respondWithRpcPromise(_0xa9bf('0x54'),_0xa9bf('0x29'),{'module':_0xa9bf('0x55')});})[_0xa9bf('0x15')](function(){return _0x22de7f;})[_0xa9bf('0x15')](respondWithResult(_0x524e14,null))[_0xa9bf('0x1f')](handleError(_0x524e14,null));};exports[_0xa9bf('0x2a')]=function(_0x4e5b42,_0x6774b9,_0x52de80){var _0x17daaf;return db['VoiceContext']['find']({'where':{'id':_0x4e5b42[_0xa9bf('0x49')]['id']}})[_0xa9bf('0x15')](handleEntityNotFound(_0x6774b9,null))[_0xa9bf('0x15')](removeEntity(_0x6774b9,null))[_0xa9bf('0x15')](function(){return db[_0xa9bf('0x30')][_0xa9bf('0x46')]({'raw':!![]});})[_0xa9bf('0x15')](function(_0x9f2f0e){var _0x3572c7=fs[_0xa9bf('0x4d')](path['join'](config[_0xa9bf('0x4f')],_0xa9bf('0x50')),'utf8');var _0x559d75=ejs[_0xa9bf('0x51')](_0x3572c7,{'contexts':_0x9f2f0e});fs['writeFileSync'](_0xa9bf('0x53'),_0x559d75);return respondWithRpcPromise(_0xa9bf('0x54'),_0xa9bf('0x2a'),{'module':_0xa9bf('0x55')});})['catch'](handleError(_0x6774b9,null));};
\ No newline at end of file
index 6671a62..f0393a6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x68fd=['define','VoiceContext','voice_contexts','lodash','util','api','moment','bluebird','request-promise','./voiceContext.attributes'];(function(_0xf73c09,_0x4e424e){var _0xa8923c=function(_0x4831c1){while(--_0x4831c1){_0xf73c09['push'](_0xf73c09['shift']());}};_0xa8923c(++_0x4e424e);}(_0x68fd,0x19d));var _0xd68f=function(_0x33eeac,_0x43706d){_0x33eeac=_0x33eeac-0x0;var _0x3fa5d9=_0x68fd[_0x33eeac];return _0x3fa5d9;};'use strict';var _=require(_0xd68f('0x0'));var util=require(_0xd68f('0x1'));var logger=require('../../config/logger')(_0xd68f('0x2'));var moment=require(_0xd68f('0x3'));var BPromise=require(_0xd68f('0x4'));var rp=require(_0xd68f('0x5'));var attributes=require(_0xd68f('0x6'));module['exports']=function(_0x13c6a8,_0x49d52c){return _0x13c6a8[_0xd68f('0x7')](_0xd68f('0x8'),attributes,{'tableName':_0xd68f('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xbf1b=['util','api','bluebird','./voiceContext.attributes','exports','voice_contexts','lodash'];(function(_0x8c43de,_0x90ff31){var _0xa6591b=function(_0x469716){while(--_0x469716){_0x8c43de['push'](_0x8c43de['shift']());}};_0xa6591b(++_0x90ff31);}(_0xbf1b,0xc3));var _0xbbf1=function(_0x487b0c,_0x14ff74){_0x487b0c=_0x487b0c-0x0;var _0x1adbdc=_0xbf1b[_0x487b0c];return _0x1adbdc;};'use strict';var _=require(_0xbbf1('0x0'));var util=require(_0xbbf1('0x1'));var logger=require('../../config/logger')(_0xbbf1('0x2'));var moment=require('moment');var BPromise=require(_0xbbf1('0x3'));var rp=require('request-promise');var attributes=require(_0xbbf1('0x4'));module[_0xbbf1('0x5')]=function(_0x6e0c97,_0x4ed361){return _0x6e0c97['define']('VoiceContext',attributes,{'tableName':_0xbbf1('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index cf71e66..4803bd9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e35=['error','code','VoiceContext,\x20%s,\x20%s','message','result','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','VoiceContext,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x423a39,_0x5978ae){var _0x56aa65=function(_0xd5320b){while(--_0xd5320b){_0x423a39['push'](_0x423a39['shift']());}};_0x56aa65(++_0x5978ae);}(_0x3e35,0x96));var _0x53e3=function(_0x2ec2bf,_0x64e983){_0x2ec2bf=_0x2ec2bf-0x0;var _0x2c279c=_0x3e35[_0x2ec2bf];return _0x2c279c;};'use strict';var _=require('lodash');var util=require(_0x53e3('0x0'));var moment=require(_0x53e3('0x1'));var BPromise=require(_0x53e3('0x2'));var rs=require(_0x53e3('0x3'));var fs=require('fs');var db=require(_0x53e3('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x53e3('0x5'))(_0x53e3('0x6'));var config=require(_0x53e3('0x7'));var jayson=require(_0x53e3('0x8'));var client=jayson[_0x53e3('0x9')][_0x53e3('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4e9cc5,_0x2bb098,_0x4ebe39){return new BPromise(function(_0x399758,_0x14d39e){return client[_0x53e3('0xb')](_0x4e9cc5,_0x4ebe39)[_0x53e3('0xc')](function(_0x4bed4a){logger[_0x53e3('0xd')]('VoiceContext,\x20%s,\x20%s',_0x2bb098,_0x53e3('0xe'));logger[_0x53e3('0xf')](_0x53e3('0x10'),_0x2bb098,_0x53e3('0xe'),JSON[_0x53e3('0x11')](_0x4bed4a));if(_0x4bed4a[_0x53e3('0x12')]){if(_0x4bed4a[_0x53e3('0x12')][_0x53e3('0x13')]===0x1f4){logger[_0x53e3('0x12')](_0x53e3('0x14'),_0x2bb098,_0x4bed4a[_0x53e3('0x12')][_0x53e3('0x15')]);return _0x14d39e(_0x4bed4a['error'][_0x53e3('0x15')]);}logger[_0x53e3('0x12')](_0x53e3('0x14'),_0x2bb098,_0x4bed4a['error'][_0x53e3('0x15')]);return _0x399758(_0x4bed4a[_0x53e3('0x12')][_0x53e3('0x15')]);}else{logger['info']('VoiceContext,\x20%s,\x20%s',_0x2bb098,_0x53e3('0xe'));_0x399758(_0x4bed4a[_0x53e3('0x16')][_0x53e3('0x15')]);}})[_0x53e3('0x17')](function(_0xfdd22a){logger['error'](_0x53e3('0x14'),_0x2bb098,_0xfdd22a);_0x14d39e(_0xfdd22a);});});}
\ No newline at end of file
+var _0x96bc=['catch','lodash','moment','bluebird','randomstring','../../config/logger','rpc','jayson/promise','client','http','request','then','info','VoiceContext,\x20%s,\x20%s','request\x20sent','error','message','result'];(function(_0x40bc01,_0x22a9a9){var _0x42365b=function(_0x2d3d88){while(--_0x2d3d88){_0x40bc01['push'](_0x40bc01['shift']());}};_0x42365b(++_0x22a9a9);}(_0x96bc,0x19f));var _0xc96b=function(_0x3b00c1,_0x3d5759){_0x3b00c1=_0x3b00c1-0x0;var _0x1cbfbe=_0x96bc[_0x3b00c1];return _0x1cbfbe;};'use strict';var _=require(_0xc96b('0x0'));var util=require('util');var moment=require(_0xc96b('0x1'));var BPromise=require(_0xc96b('0x2'));var rs=require(_0xc96b('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xc96b('0x4'))(_0xc96b('0x5'));var config=require('../../config/environment');var jayson=require(_0xc96b('0x6'));var client=jayson[_0xc96b('0x7')][_0xc96b('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x19f90b,_0x5c9a75,_0x435e61){return new BPromise(function(_0x5010e0,_0x46192c){return client[_0xc96b('0x9')](_0x19f90b,_0x435e61)[_0xc96b('0xa')](function(_0x192826){logger[_0xc96b('0xb')](_0xc96b('0xc'),_0x5c9a75,_0xc96b('0xd'));logger['debug']('VoiceContext,\x20%s,\x20%s,\x20%s',_0x5c9a75,_0xc96b('0xd'),JSON['stringify'](_0x192826));if(_0x192826[_0xc96b('0xe')]){if(_0x192826[_0xc96b('0xe')]['code']===0x1f4){logger[_0xc96b('0xe')]('VoiceContext,\x20%s,\x20%s',_0x5c9a75,_0x192826['error'][_0xc96b('0xf')]);return _0x46192c(_0x192826['error'][_0xc96b('0xf')]);}logger[_0xc96b('0xe')](_0xc96b('0xc'),_0x5c9a75,_0x192826['error']['message']);return _0x5010e0(_0x192826[_0xc96b('0xe')][_0xc96b('0xf')]);}else{logger[_0xc96b('0xb')]('VoiceContext,\x20%s,\x20%s',_0x5c9a75,_0xc96b('0xd'));_0x5010e0(_0x192826[_0xc96b('0x10')][_0xc96b('0xf')]);}})[_0xc96b('0x11')](function(_0x1e0887){logger[_0xc96b('0xe')]('VoiceContext,\x20%s,\x20%s',_0x5c9a75,_0x1e0887);_0x46192c(_0x1e0887);});});}
\ No newline at end of file
index dc8152a..24609ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x814b=['path','express','Router','../../components/auth/service','../../config/environment','./voiceDialReport.controller','get','isAuthenticated','index','describe','/:id','show','post','create','put','update','delete','exports','multer','util'];(function(_0x446ff6,_0x489623){var _0x36290e=function(_0x17305c){while(--_0x17305c){_0x446ff6['push'](_0x446ff6['shift']());}};_0x36290e(++_0x489623);}(_0x814b,0x1a2));var _0xb814=function(_0x7633c,_0x1e45bf){_0x7633c=_0x7633c-0x0;var _0x1b77e2=_0x814b[_0x7633c];return _0x1b77e2;};'use strict';var multer=require(_0xb814('0x0'));var util=require(_0xb814('0x1'));var path=require(_0xb814('0x2'));var express=require(_0xb814('0x3'));var router=express[_0xb814('0x4')]();var auth=require(_0xb814('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xb814('0x6'));var controller=require(_0xb814('0x7'));router[_0xb814('0x8')]('/',auth[_0xb814('0x9')](),controller[_0xb814('0xa')]);router[_0xb814('0x8')]('/describe',auth[_0xb814('0x9')](),controller[_0xb814('0xb')]);router['get'](_0xb814('0xc'),auth[_0xb814('0x9')](),controller[_0xb814('0xd')]);router[_0xb814('0xe')]('/',auth[_0xb814('0x9')](),controller[_0xb814('0xf')]);router[_0xb814('0x10')](_0xb814('0xc'),auth[_0xb814('0x9')](),controller[_0xb814('0x11')]);router[_0xb814('0x12')]('/:id',auth[_0xb814('0x9')](),controller['destroy']);module[_0xb814('0x13')]=router;
\ No newline at end of file
+var _0x814b=['path','express','Router','../../components/auth/service','../../config/environment','./voiceDialReport.controller','get','isAuthenticated','index','describe','/:id','show','post','create','put','update','delete','exports','multer','util'];(function(_0x186bff,_0x2525c2){var _0x341eb3=function(_0xe2c9ee){while(--_0xe2c9ee){_0x186bff['push'](_0x186bff['shift']());}};_0x341eb3(++_0x2525c2);}(_0x814b,0x1a2));var _0xb814=function(_0x8abd64,_0x539570){_0x8abd64=_0x8abd64-0x0;var _0xd2511e=_0x814b[_0x8abd64];return _0xd2511e;};'use strict';var multer=require(_0xb814('0x0'));var util=require(_0xb814('0x1'));var path=require(_0xb814('0x2'));var express=require(_0xb814('0x3'));var router=express[_0xb814('0x4')]();var auth=require(_0xb814('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xb814('0x6'));var controller=require(_0xb814('0x7'));router[_0xb814('0x8')]('/',auth[_0xb814('0x9')](),controller[_0xb814('0xa')]);router[_0xb814('0x8')]('/describe',auth[_0xb814('0x9')](),controller[_0xb814('0xb')]);router['get'](_0xb814('0xc'),auth[_0xb814('0x9')](),controller[_0xb814('0xd')]);router[_0xb814('0xe')]('/',auth[_0xb814('0x9')](),controller[_0xb814('0xf')]);router[_0xb814('0x10')](_0xb814('0xc'),auth[_0xb814('0x9')](),controller[_0xb814('0x11')]);router[_0xb814('0x12')]('/:id',auth[_0xb814('0x9')](),controller['destroy']);module[_0xb814('0x13')]=router;
\ No newline at end of file
index 739f776..7fa110d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x005f=['sequelize','exports','STRING','INTEGER','DATE'];(function(_0x316d06,_0x398a16){var _0x2312eb=function(_0x14d7c1){while(--_0x14d7c1){_0x316d06['push'](_0x316d06['shift']());}};_0x2312eb(++_0x398a16);}(_0x005f,0xa5));var _0xf005=function(_0x29a8db,_0x1ebb7e){_0x29a8db=_0x29a8db-0x0;var _0x7f1f8f=_0x005f[_0x29a8db];return _0x7f1f8f;};'use strict';var Sequelize=require(_0xf005('0x0'));module[_0xf005('0x1')]={'privilege':{'type':Sequelize[_0xf005('0x2')]},'channel':{'type':Sequelize[_0xf005('0x2')]},'channelstate':{'type':Sequelize[_0xf005('0x3')]},'channelstatedesc':{'type':Sequelize[_0xf005('0x2')]},'calleridnum':{'type':Sequelize[_0xf005('0x2')]},'calleridname':{'type':Sequelize[_0xf005('0x2')]},'connectedlinenum':{'type':Sequelize[_0xf005('0x2')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize[_0xf005('0x2')]},'accountcode':{'type':Sequelize[_0xf005('0x2')]},'context':{'type':Sequelize['STRING']},'exten':{'type':Sequelize[_0xf005('0x2')]},'priority':{'type':Sequelize[_0xf005('0x3')]},'uniqueid':{'type':Sequelize[_0xf005('0x2')]},'linkedid':{'type':Sequelize[_0xf005('0x2')]},'destchannel':{'type':Sequelize[_0xf005('0x2')]},'destchannelstate':{'type':Sequelize['INTEGER']},'destchannelstatedesc':{'type':Sequelize['STRING']},'destcalleridnum':{'type':Sequelize[_0xf005('0x2')]},'destcalleridname':{'type':Sequelize[_0xf005('0x2')]},'destconnectedlinenum':{'type':Sequelize[_0xf005('0x2')]},'destconnectedlinename':{'type':Sequelize['STRING']},'destlanguage':{'type':Sequelize['STRING']},'destaccountcode':{'type':Sequelize['STRING']},'destcontext':{'type':Sequelize[_0xf005('0x2')]},'destexten':{'type':Sequelize[_0xf005('0x2')]},'destpriority':{'type':Sequelize[_0xf005('0x3')]},'destuniqueid':{'type':Sequelize['STRING']},'destlinkedid':{'type':Sequelize[_0xf005('0x2')]},'dialstring':{'type':Sequelize['STRING']},'dialstatus':{'type':Sequelize[_0xf005('0x2')]},'starttime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0xf005('0x4')]},'endtime':{'type':Sequelize[_0xf005('0x4')]},'lastevent':{'type':Sequelize[_0xf005('0x2')],'comment':'called,connect,complete'},'routeId':{'type':Sequelize[_0xf005('0x3')]},'duration':{'type':Sequelize[_0xf005('0x3')]},'holdtime':{'type':Sequelize['INTEGER']},'billableseconds':{'type':Sequelize[_0xf005('0x3')]}};
\ No newline at end of file
+var _0x8c7b=['sequelize','exports','STRING','INTEGER','DATE','called,connect,complete'];(function(_0x3f00ee,_0x1d1673){var _0x18a07e=function(_0x4dad57){while(--_0x4dad57){_0x3f00ee['push'](_0x3f00ee['shift']());}};_0x18a07e(++_0x1d1673);}(_0x8c7b,0xd8));var _0xb8c7=function(_0x14a709,_0x2ea79b){_0x14a709=_0x14a709-0x0;var _0x3b0094=_0x8c7b[_0x14a709];return _0x3b0094;};'use strict';var Sequelize=require(_0xb8c7('0x0'));module[_0xb8c7('0x1')]={'privilege':{'type':Sequelize[_0xb8c7('0x2')]},'channel':{'type':Sequelize[_0xb8c7('0x2')]},'channelstate':{'type':Sequelize[_0xb8c7('0x3')]},'channelstatedesc':{'type':Sequelize[_0xb8c7('0x2')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0xb8c7('0x2')]},'connectedlinenum':{'type':Sequelize['STRING']},'connectedlinename':{'type':Sequelize[_0xb8c7('0x2')]},'language':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0xb8c7('0x2')]},'context':{'type':Sequelize[_0xb8c7('0x2')]},'exten':{'type':Sequelize[_0xb8c7('0x2')]},'priority':{'type':Sequelize[_0xb8c7('0x3')]},'uniqueid':{'type':Sequelize[_0xb8c7('0x2')]},'linkedid':{'type':Sequelize[_0xb8c7('0x2')]},'destchannel':{'type':Sequelize[_0xb8c7('0x2')]},'destchannelstate':{'type':Sequelize[_0xb8c7('0x3')]},'destchannelstatedesc':{'type':Sequelize[_0xb8c7('0x2')]},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize[_0xb8c7('0x2')]},'destconnectedlinenum':{'type':Sequelize['STRING']},'destconnectedlinename':{'type':Sequelize[_0xb8c7('0x2')]},'destlanguage':{'type':Sequelize[_0xb8c7('0x2')]},'destaccountcode':{'type':Sequelize['STRING']},'destcontext':{'type':Sequelize[_0xb8c7('0x2')]},'destexten':{'type':Sequelize[_0xb8c7('0x2')]},'destpriority':{'type':Sequelize[_0xb8c7('0x3')]},'destuniqueid':{'type':Sequelize[_0xb8c7('0x2')]},'destlinkedid':{'type':Sequelize[_0xb8c7('0x2')]},'dialstring':{'type':Sequelize[_0xb8c7('0x2')]},'dialstatus':{'type':Sequelize['STRING']},'starttime':{'type':Sequelize[_0xb8c7('0x4')]},'answertime':{'type':Sequelize[_0xb8c7('0x4')]},'endtime':{'type':Sequelize[_0xb8c7('0x4')]},'lastevent':{'type':Sequelize[_0xb8c7('0x2')],'comment':_0xb8c7('0x5')},'routeId':{'type':Sequelize[_0xb8c7('0x3')]},'duration':{'type':Sequelize['INTEGER']},'holdtime':{'type':Sequelize['INTEGER']},'billableseconds':{'type':Sequelize[_0xb8c7('0x3')]}};
\ No newline at end of file
index e62eca3..4041c6f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x93ae=['set','Content-Range','apply','reject','save','update','destroy','then','stack','name','index','VoiceDialReport','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','filters','add','day','merge','where','filter','map','options','includeAll','include','findAll','rows','catch','show','params','create','body','find','describe','fast-json-patch','request-promise','moment','bluebird','util','sox','to-csv','ejs','squel','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','limit'];(function(_0xc9cdf2,_0x1b3fee){var _0x2b33cb=function(_0x9b0944){while(--_0x9b0944){_0xc9cdf2['push'](_0xc9cdf2['shift']());}};_0x2b33cb(++_0x1b3fee);}(_0x93ae,0x186));var _0xe93a=function(_0x189305,_0x3f4bec){_0x189305=_0x189305-0x0;var _0xe457f4=_0x93ae[_0x189305];return _0xe457f4;};'use strict';var jsonpatch=require(_0xe93a('0x0'));var rp=require(_0xe93a('0x1'));var moment=require(_0xe93a('0x2'));var BPromise=require(_0xe93a('0x3'));var Mustache=require('mustache');var util=require(_0xe93a('0x4'));var path=require('path');var sox=require(_0xe93a('0x5'));var csv=require(_0xe93a('0x6'));var ejs=require(_0xe93a('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0xe93a('0x8'));var crypto=require(_0xe93a('0x9'));var jsforce=require('jsforce');var deskjs=require(_0xe93a('0xa'));var toCsv=require(_0xe93a('0x6'));var querystring=require(_0xe93a('0xb'));var Papa=require(_0xe93a('0xc'));var qs=require(_0xe93a('0xd'));var logger=require('../../config/logger')(_0xe93a('0xe'));var utils=require(_0xe93a('0xf'));var config=require(_0xe93a('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4e8890,_0x429bed){_0x429bed=_0x429bed||0xcc;return function(_0x44bc50){if(_0x44bc50){return _0x4e8890[_0xe93a('0x11')](_0x429bed);}return _0x4e8890['status'](_0x429bed)[_0xe93a('0x12')]();};}function respondWithResult(_0xde5c39,_0x291975){_0x291975=_0x291975||0xc8;return function(_0x3e2d05){if(_0x3e2d05){return _0xde5c39[_0xe93a('0x13')](_0x291975)[_0xe93a('0x14')](_0x3e2d05);}};}function respondWithFilteredResult(_0x24efee,_0x422b37){return function(_0x2c7f00){if(_0x2c7f00){var _0x5e7009=_0x2c7f00[_0xe93a('0x15')],_0xd6c055=_0x422b37[_0xe93a('0x16')],_0x3d375e=_0x422b37['offset']+_0x422b37[_0xe93a('0x17')],_0x1d27b3;if(_0x3d375e>=_0x5e7009){_0x3d375e=_0x5e7009;_0x1d27b3=0xc8;}else{_0x1d27b3=0xce;}_0x24efee['status'](_0x1d27b3);return _0x24efee[_0xe93a('0x18')](_0xe93a('0x19'),_0xd6c055+'-'+_0x3d375e+'/'+_0x5e7009)['json'](_0x2c7f00);}return null;};}function patchUpdates(_0x536cde){return function(_0x9b3b84){try{jsonpatch[_0xe93a('0x1a')](_0x9b3b84,_0x536cde,!![]);}catch(_0x567042){return BPromise[_0xe93a('0x1b')](_0x567042);}return _0x9b3b84[_0xe93a('0x1c')]();};}function saveUpdates(_0x2738f8,_0x16d17c){return function(_0x556e07){if(_0x556e07){return _0x556e07[_0xe93a('0x1d')](_0x2738f8)['then'](function(_0x104e84){return _0x104e84;});}return null;};}function removeEntity(_0x1fd83a,_0x53546){return function(_0x13e5d8){if(_0x13e5d8){return _0x13e5d8[_0xe93a('0x1e')]()[_0xe93a('0x1f')](function(){_0x1fd83a[_0xe93a('0x13')](0xcc)[_0xe93a('0x12')]();});}};}function handleEntityNotFound(_0x4282f4,_0x37bf64){return function(_0x16a370){if(!_0x16a370){_0x4282f4[_0xe93a('0x11')](0x194);}return _0x16a370;};}function handleError(_0x4baf24,_0x584130){_0x584130=_0x584130||0x1f4;return function(_0x3750f1){logger['error'](_0x3750f1[_0xe93a('0x20')]);if(_0x3750f1[_0xe93a('0x21')]){delete _0x3750f1[_0xe93a('0x21')];}_0x4baf24[_0xe93a('0x13')](_0x584130)['send'](_0x3750f1);};}exports[_0xe93a('0x22')]=function(_0x32a6c0,_0x35fc1d){var _0x2f7026={},_0x1f40d9={},_0x64eee3={'count':0x0,'rows':[]};var _0x3a2688=db[_0xe93a('0x23')][_0xe93a('0x24')];_0x1f40d9[_0xe93a('0x25')]=_[_0xe93a('0x26')](_0x3a2688);var _0x39b50d={'dateStart':_0x32a6c0[_0xe93a('0x27')][_0xe93a('0x28')],'dateEnd':_0x32a6c0[_0xe93a('0x27')][_0xe93a('0x29')]};delete _0x32a6c0[_0xe93a('0x27')][_0xe93a('0x28')];delete _0x32a6c0[_0xe93a('0x27')]['dateEnd'];_0x1f40d9[_0xe93a('0x27')]=_['keys'](_0x32a6c0['query']);_0x1f40d9['filters']=_['intersection'](_0x1f40d9[_0xe93a('0x25')],_0x1f40d9[_0xe93a('0x27')]);_0x2f7026['attributes']=_[_0xe93a('0x2a')](_0x1f40d9['model'],qs[_0xe93a('0x2b')](_0x32a6c0['query']['fields']));_0x2f7026[_0xe93a('0x2c')]=_0x2f7026[_0xe93a('0x2c')][_0xe93a('0x2d')]?_0x2f7026[_0xe93a('0x2c')]:_0x1f40d9[_0xe93a('0x25')];if(!_0x32a6c0['query'][_0xe93a('0x2e')](_0xe93a('0x2f'))){_0x2f7026[_0xe93a('0x17')]=qs['limit'](_0x32a6c0[_0xe93a('0x27')][_0xe93a('0x17')]);_0x2f7026[_0xe93a('0x16')]=qs[_0xe93a('0x16')](_0x32a6c0[_0xe93a('0x27')][_0xe93a('0x16')]);}_0x2f7026[_0xe93a('0x30')]=qs[_0xe93a('0x31')](_0x32a6c0[_0xe93a('0x27')][_0xe93a('0x31')]);_0x2f7026['where']=qs[_0xe93a('0x32')](_['pick'](_0x32a6c0['query'],_0x1f40d9['filters']));if(_0x39b50d[_0xe93a('0x28')]){if(_0x39b50d[_0xe93a('0x29')]){_0x39b50d[_0xe93a('0x29')]=moment(_0x39b50d[_0xe93a('0x29')])[_0xe93a('0x33')](0x1,_0xe93a('0x34'));}else{_0x39b50d['dateEnd']=moment(_0x39b50d[_0xe93a('0x28')])['add'](0x1,_0xe93a('0x34'));}_[_0xe93a('0x35')](_0x2f7026[_0xe93a('0x36')],{'createdAt':{'$gte':_0x39b50d[_0xe93a('0x28')],'$lte':_0x39b50d['dateEnd']}});}if(_0x32a6c0['query'][_0xe93a('0x37')]){_0x2f7026[_0xe93a('0x36')]=_[_0xe93a('0x35')](_0x2f7026[_0xe93a('0x36')],{'$or':_[_0xe93a('0x38')](_0x2f7026['attributes'],function(_0x4da017){var _0x206e21={};_0x206e21[_0x4da017]={'$like':'%'+_0x32a6c0[_0xe93a('0x27')][_0xe93a('0x37')]+'%'};return _0x206e21;})});}_0x2f7026=_[_0xe93a('0x35')]({},_0x2f7026,_0x32a6c0[_0xe93a('0x39')]);var _0x377c94={'where':_0x2f7026[_0xe93a('0x36')]};return db[_0xe93a('0x23')][_0xe93a('0x15')](_0x377c94)[_0xe93a('0x1f')](function(_0x18f527){_0x64eee3[_0xe93a('0x15')]=_0x18f527;if(_0x32a6c0[_0xe93a('0x27')][_0xe93a('0x3a')]){_0x2f7026[_0xe93a('0x3b')]=[{'all':!![]}];}return db['VoiceDialReport'][_0xe93a('0x3c')](_0x2f7026);})[_0xe93a('0x1f')](function(_0x5bdd27){_0x64eee3[_0xe93a('0x3d')]=_0x5bdd27;return _0x64eee3;})['then'](respondWithFilteredResult(_0x35fc1d,_0x2f7026))[_0xe93a('0x3e')](handleError(_0x35fc1d,null));};exports[_0xe93a('0x3f')]=function(_0x4339ac,_0x5afc40){var _0x2ffd10={'raw':!![],'where':{'id':_0x4339ac[_0xe93a('0x40')]['id']}},_0x3305fa={};_0x3305fa[_0xe93a('0x25')]=_[_0xe93a('0x26')](db[_0xe93a('0x23')]['rawAttributes']);_0x3305fa['query']=_[_0xe93a('0x26')](_0x4339ac[_0xe93a('0x27')]);_0x3305fa['filters']=_['intersection'](_0x3305fa['model'],_0x3305fa['query']);_0x2ffd10[_0xe93a('0x2c')]=_[_0xe93a('0x2a')](_0x3305fa[_0xe93a('0x25')],qs[_0xe93a('0x2b')](_0x4339ac['query'][_0xe93a('0x2b')]));_0x2ffd10[_0xe93a('0x2c')]=_0x2ffd10['attributes']['length']?_0x2ffd10[_0xe93a('0x2c')]:_0x3305fa[_0xe93a('0x25')];if(_0x4339ac[_0xe93a('0x27')][_0xe93a('0x3a')]){_0x2ffd10['include']=[{'all':!![]}];}_0x2ffd10=_['merge']({},_0x2ffd10,_0x4339ac['options']);return db['VoiceDialReport']['find'](_0x2ffd10)['then'](handleEntityNotFound(_0x5afc40,null))[_0xe93a('0x1f')](respondWithResult(_0x5afc40,null))[_0xe93a('0x3e')](handleError(_0x5afc40,null));};exports[_0xe93a('0x41')]=function(_0x58e70b,_0x285f71){return db[_0xe93a('0x23')]['create'](_0x58e70b[_0xe93a('0x42')],{})[_0xe93a('0x1f')](respondWithResult(_0x285f71,0xc9))['catch'](handleError(_0x285f71,null));};exports['update']=function(_0x22f321,_0x88ff6){if(_0x22f321[_0xe93a('0x42')]['id']){delete _0x22f321[_0xe93a('0x42')]['id'];}return db[_0xe93a('0x23')][_0xe93a('0x43')]({'where':{'id':_0x22f321['params']['id']}})['then'](handleEntityNotFound(_0x88ff6,null))[_0xe93a('0x1f')](saveUpdates(_0x22f321[_0xe93a('0x42')],null))['then'](respondWithResult(_0x88ff6,null))[_0xe93a('0x3e')](handleError(_0x88ff6,null));};exports['destroy']=function(_0xe16bc,_0x1870bc){return db['VoiceDialReport'][_0xe93a('0x43')]({'where':{'id':_0xe16bc[_0xe93a('0x40')]['id']}})['then'](handleEntityNotFound(_0x1870bc,null))[_0xe93a('0x1f')](removeEntity(_0x1870bc,null))['catch'](handleError(_0x1870bc,null));};exports[_0xe93a('0x44')]=function(_0x3c6543,_0x29454d){return db['VoiceDialReport'][_0xe93a('0x44')]()[_0xe93a('0x1f')](respondWithResult(_0x29454d,null))[_0xe93a('0x3e')](handleError(_0x29454d,null));};
\ No newline at end of file
+var _0xe37d=['query','dateStart','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','filters','pick','dateEnd','add','day','filter','merge','options','VoiceDialReport','count','then','includeAll','include','findAll','rows','catch','show','params','find','body','update','describe','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','offset','set','Content-Range','reject','save','destroy','sendStatus','stack','name','send','index','rawAttributes','model','keys'];(function(_0xd51931,_0x586542){var _0xde9fb6=function(_0x374f0e){while(--_0x374f0e){_0xd51931['push'](_0xd51931['shift']());}};_0xde9fb6(++_0x586542);}(_0xe37d,0x146));var _0xde37=function(_0x12ab62,_0x4a6930){_0x12ab62=_0x12ab62-0x0;var _0x553f0a=_0xe37d[_0x12ab62];return _0x553f0a;};'use strict';var jsonpatch=require(_0xde37('0x0'));var rp=require(_0xde37('0x1'));var moment=require(_0xde37('0x2'));var BPromise=require(_0xde37('0x3'));var Mustache=require(_0xde37('0x4'));var util=require(_0xde37('0x5'));var path=require(_0xde37('0x6'));var sox=require(_0xde37('0x7'));var csv=require('to-csv');var ejs=require(_0xde37('0x8'));var fs=require('fs');var _=require(_0xde37('0x9'));var squel=require('squel');var crypto=require(_0xde37('0xa'));var jsforce=require(_0xde37('0xb'));var deskjs=require(_0xde37('0xc'));var toCsv=require(_0xde37('0xd'));var querystring=require(_0xde37('0xe'));var Papa=require(_0xde37('0xf'));var qs=require(_0xde37('0x10'));var logger=require(_0xde37('0x11'))(_0xde37('0x12'));var utils=require(_0xde37('0x13'));var config=require(_0xde37('0x14'));var db=require(_0xde37('0x15'))['db'];function respondWithStatusCode(_0x28b82d,_0x333342){_0x333342=_0x333342||0xcc;return function(_0x5edad5){if(_0x5edad5){return _0x28b82d['sendStatus'](_0x333342);}return _0x28b82d[_0xde37('0x16')](_0x333342)[_0xde37('0x17')]();};}function respondWithResult(_0x49c3a6,_0x30634f){_0x30634f=_0x30634f||0xc8;return function(_0x20c763){if(_0x20c763){return _0x49c3a6['status'](_0x30634f)[_0xde37('0x18')](_0x20c763);}};}function respondWithFilteredResult(_0x478ac5,_0x5a1e48){return function(_0x4c653a){if(_0x4c653a){var _0x504426=_0x4c653a['count'],_0x593620=_0x5a1e48[_0xde37('0x19')],_0x27dbe2=_0x5a1e48[_0xde37('0x19')]+_0x5a1e48['limit'],_0x2d38b0;if(_0x27dbe2>=_0x504426){_0x27dbe2=_0x504426;_0x2d38b0=0xc8;}else{_0x2d38b0=0xce;}_0x478ac5[_0xde37('0x16')](_0x2d38b0);return _0x478ac5[_0xde37('0x1a')](_0xde37('0x1b'),_0x593620+'-'+_0x27dbe2+'/'+_0x504426)[_0xde37('0x18')](_0x4c653a);}return null;};}function patchUpdates(_0xb8f75c){return function(_0x57b563){try{jsonpatch['apply'](_0x57b563,_0xb8f75c,!![]);}catch(_0x157156){return BPromise[_0xde37('0x1c')](_0x157156);}return _0x57b563[_0xde37('0x1d')]();};}function saveUpdates(_0x2516c5,_0x12b5c3){return function(_0x5b24fd){if(_0x5b24fd){return _0x5b24fd['update'](_0x2516c5)['then'](function(_0x2c2661){return _0x2c2661;});}return null;};}function removeEntity(_0xa1d0e3,_0x23f5c8){return function(_0x1ec94d){if(_0x1ec94d){return _0x1ec94d[_0xde37('0x1e')]()['then'](function(){_0xa1d0e3[_0xde37('0x16')](0xcc)[_0xde37('0x17')]();});}};}function handleEntityNotFound(_0x690a7d,_0x30377c){return function(_0x478a4a){if(!_0x478a4a){_0x690a7d[_0xde37('0x1f')](0x194);}return _0x478a4a;};}function handleError(_0x4ea16c,_0x5f010f){_0x5f010f=_0x5f010f||0x1f4;return function(_0x2b629e){logger['error'](_0x2b629e[_0xde37('0x20')]);if(_0x2b629e[_0xde37('0x21')]){delete _0x2b629e[_0xde37('0x21')];}_0x4ea16c[_0xde37('0x16')](_0x5f010f)[_0xde37('0x22')](_0x2b629e);};}exports[_0xde37('0x23')]=function(_0x58e57e,_0x34402d){var _0x501791={},_0x6328a4={},_0x4d707b={'count':0x0,'rows':[]};var _0x5a8f0a=db['VoiceDialReport'][_0xde37('0x24')];_0x6328a4[_0xde37('0x25')]=_[_0xde37('0x26')](_0x5a8f0a);var _0x44d346={'dateStart':_0x58e57e[_0xde37('0x27')][_0xde37('0x28')],'dateEnd':_0x58e57e[_0xde37('0x27')]['dateEnd']};delete _0x58e57e['query'][_0xde37('0x28')];delete _0x58e57e[_0xde37('0x27')]['dateEnd'];_0x6328a4[_0xde37('0x27')]=_[_0xde37('0x26')](_0x58e57e[_0xde37('0x27')]);_0x6328a4['filters']=_['intersection'](_0x6328a4[_0xde37('0x25')],_0x6328a4[_0xde37('0x27')]);_0x501791['attributes']=_[_0xde37('0x29')](_0x6328a4[_0xde37('0x25')],qs[_0xde37('0x2a')](_0x58e57e['query'][_0xde37('0x2a')]));_0x501791[_0xde37('0x2b')]=_0x501791[_0xde37('0x2b')][_0xde37('0x2c')]?_0x501791[_0xde37('0x2b')]:_0x6328a4[_0xde37('0x25')];if(!_0x58e57e[_0xde37('0x27')][_0xde37('0x2d')](_0xde37('0x2e'))){_0x501791[_0xde37('0x2f')]=qs[_0xde37('0x2f')](_0x58e57e[_0xde37('0x27')][_0xde37('0x2f')]);_0x501791['offset']=qs[_0xde37('0x19')](_0x58e57e[_0xde37('0x27')][_0xde37('0x19')]);}_0x501791[_0xde37('0x30')]=qs['sort'](_0x58e57e['query'][_0xde37('0x31')]);_0x501791[_0xde37('0x32')]=qs[_0xde37('0x33')](_[_0xde37('0x34')](_0x58e57e[_0xde37('0x27')],_0x6328a4[_0xde37('0x33')]));if(_0x44d346[_0xde37('0x28')]){if(_0x44d346['dateEnd']){_0x44d346[_0xde37('0x35')]=moment(_0x44d346[_0xde37('0x35')])[_0xde37('0x36')](0x1,_0xde37('0x37'));}else{_0x44d346[_0xde37('0x35')]=moment(_0x44d346[_0xde37('0x28')])['add'](0x1,_0xde37('0x37'));}_['merge'](_0x501791[_0xde37('0x32')],{'createdAt':{'$gte':_0x44d346[_0xde37('0x28')],'$lte':_0x44d346['dateEnd']}});}if(_0x58e57e['query'][_0xde37('0x38')]){_0x501791[_0xde37('0x32')]=_[_0xde37('0x39')](_0x501791[_0xde37('0x32')],{'$or':_['map'](_0x501791[_0xde37('0x2b')],function(_0x50f0ad){var _0x4d703e={};_0x4d703e[_0x50f0ad]={'$like':'%'+_0x58e57e[_0xde37('0x27')]['filter']+'%'};return _0x4d703e;})});}_0x501791=_['merge']({},_0x501791,_0x58e57e[_0xde37('0x3a')]);var _0x18e5b2={'where':_0x501791['where']};return db[_0xde37('0x3b')][_0xde37('0x3c')](_0x18e5b2)[_0xde37('0x3d')](function(_0x144870){_0x4d707b[_0xde37('0x3c')]=_0x144870;if(_0x58e57e['query'][_0xde37('0x3e')]){_0x501791[_0xde37('0x3f')]=[{'all':!![]}];}return db[_0xde37('0x3b')][_0xde37('0x40')](_0x501791);})[_0xde37('0x3d')](function(_0x65a150){_0x4d707b[_0xde37('0x41')]=_0x65a150;return _0x4d707b;})[_0xde37('0x3d')](respondWithFilteredResult(_0x34402d,_0x501791))[_0xde37('0x42')](handleError(_0x34402d,null));};exports[_0xde37('0x43')]=function(_0x3c7f9f,_0x5a6905){var _0x26bb44={'raw':!![],'where':{'id':_0x3c7f9f[_0xde37('0x44')]['id']}},_0x2705be={};_0x2705be['model']=_[_0xde37('0x26')](db[_0xde37('0x3b')]['rawAttributes']);_0x2705be[_0xde37('0x27')]=_[_0xde37('0x26')](_0x3c7f9f[_0xde37('0x27')]);_0x2705be[_0xde37('0x33')]=_[_0xde37('0x29')](_0x2705be['model'],_0x2705be[_0xde37('0x27')]);_0x26bb44[_0xde37('0x2b')]=_[_0xde37('0x29')](_0x2705be[_0xde37('0x25')],qs['fields'](_0x3c7f9f[_0xde37('0x27')][_0xde37('0x2a')]));_0x26bb44[_0xde37('0x2b')]=_0x26bb44[_0xde37('0x2b')][_0xde37('0x2c')]?_0x26bb44[_0xde37('0x2b')]:_0x2705be['model'];if(_0x3c7f9f[_0xde37('0x27')][_0xde37('0x3e')]){_0x26bb44['include']=[{'all':!![]}];}_0x26bb44=_['merge']({},_0x26bb44,_0x3c7f9f['options']);return db[_0xde37('0x3b')][_0xde37('0x45')](_0x26bb44)[_0xde37('0x3d')](handleEntityNotFound(_0x5a6905,null))[_0xde37('0x3d')](respondWithResult(_0x5a6905,null))[_0xde37('0x42')](handleError(_0x5a6905,null));};exports['create']=function(_0x10677f,_0x26404b){return db['VoiceDialReport']['create'](_0x10677f[_0xde37('0x46')],{})[_0xde37('0x3d')](respondWithResult(_0x26404b,0xc9))[_0xde37('0x42')](handleError(_0x26404b,null));};exports[_0xde37('0x47')]=function(_0x20b610,_0x57b936){if(_0x20b610['body']['id']){delete _0x20b610[_0xde37('0x46')]['id'];}return db[_0xde37('0x3b')]['find']({'where':{'id':_0x20b610[_0xde37('0x44')]['id']}})[_0xde37('0x3d')](handleEntityNotFound(_0x57b936,null))[_0xde37('0x3d')](saveUpdates(_0x20b610[_0xde37('0x46')],null))['then'](respondWithResult(_0x57b936,null))['catch'](handleError(_0x57b936,null));};exports[_0xde37('0x1e')]=function(_0x2fc7f9,_0x60bb45){return db[_0xde37('0x3b')][_0xde37('0x45')]({'where':{'id':_0x2fc7f9[_0xde37('0x44')]['id']}})[_0xde37('0x3d')](handleEntityNotFound(_0x60bb45,null))[_0xde37('0x3d')](removeEntity(_0x60bb45,null))['catch'](handleError(_0x60bb45,null));};exports[_0xde37('0x48')]=function(_0x42cc99,_0x35ffe1){return db[_0xde37('0x3b')][_0xde37('0x48')]()[_0xde37('0x3d')](respondWithResult(_0x35ffe1,null))[_0xde37('0x42')](handleError(_0x35ffe1,null));};
\ No newline at end of file
index ea10cde..f853903 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1bf5=['define','VoiceDialReport','report_dial','uniqueid','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./voiceDialReport.attributes','exports'];(function(_0x592b65,_0x5ba3a3){var _0x21511a=function(_0x19fa1a){while(--_0x19fa1a){_0x592b65['push'](_0x592b65['shift']());}};_0x21511a(++_0x5ba3a3);}(_0x1bf5,0x122));var _0x51bf=function(_0x1d426f,_0x37e919){_0x1d426f=_0x1d426f-0x0;var _0x17f71a=_0x1bf5[_0x1d426f];return _0x17f71a;};'use strict';var _=require(_0x51bf('0x0'));var util=require(_0x51bf('0x1'));var logger=require(_0x51bf('0x2'))(_0x51bf('0x3'));var moment=require(_0x51bf('0x4'));var BPromise=require(_0x51bf('0x5'));var rp=require(_0x51bf('0x6'));var attributes=require(_0x51bf('0x7'));module[_0x51bf('0x8')]=function(_0x3b08f4,_0xfeba57){return _0x3b08f4[_0x51bf('0x9')](_0x51bf('0xa'),attributes,{'tableName':_0x51bf('0xb'),'paranoid':![],'indexes':[{'fields':[_0x51bf('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x2026=['define','VoiceDialReport','report_dial','uniqueid','lodash','util','../../config/logger','api','moment','bluebird','./voiceDialReport.attributes','exports'];(function(_0x211218,_0x5a6b0a){var _0x3db618=function(_0x3bee53){while(--_0x3bee53){_0x211218['push'](_0x211218['shift']());}};_0x3db618(++_0x5a6b0a);}(_0x2026,0x160));var _0x6202=function(_0x1c5aaf,_0x4d6767){_0x1c5aaf=_0x1c5aaf-0x0;var _0xe0d7a2=_0x2026[_0x1c5aaf];return _0xe0d7a2;};'use strict';var _=require(_0x6202('0x0'));var util=require(_0x6202('0x1'));var logger=require(_0x6202('0x2'))(_0x6202('0x3'));var moment=require(_0x6202('0x4'));var BPromise=require(_0x6202('0x5'));var rp=require('request-promise');var attributes=require(_0x6202('0x6'));module[_0x6202('0x7')]=function(_0x23c304,_0x5ace47){return _0x23c304[_0x6202('0x8')](_0x6202('0x9'),attributes,{'tableName':_0x6202('0xa'),'paranoid':![],'indexes':[{'fields':[_0x6202('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index 99b294a..0d0e7b9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x14a0=['code','VoiceDialReport,\x20%s,\x20%s','message','info','result','CreateVoiceDialReport','VoiceDialReport','create','body','options','raw','debug','catch','UpdateVoiceDialReport','update','attributes','limit','then','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','http','VoiceDialReport,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x44a5a7,_0xc88021){var _0x32a853=function(_0x48d13f){while(--_0x48d13f){_0x44a5a7['push'](_0x44a5a7['shift']());}};_0x32a853(++_0xc88021);}(_0x14a0,0x8e));var _0x014a=function(_0x1ae0ea,_0x5c0919){_0x1ae0ea=_0x1ae0ea-0x0;var _0x404277=_0x14a0[_0x1ae0ea];return _0x404277;};'use strict';var _=require('lodash');var util=require(_0x014a('0x0'));var moment=require(_0x014a('0x1'));var BPromise=require(_0x014a('0x2'));var rs=require(_0x014a('0x3'));var fs=require('fs');var db=require(_0x014a('0x4'))['db'];var utils=require(_0x014a('0x5'));var logger=require(_0x014a('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x014a('0x7'));var client=jayson[_0x014a('0x8')][_0x014a('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5ec84d,_0x5a61ac,_0x11b8ce){return new BPromise(function(_0x6d05f2,_0x22f17c){return client['request'](_0x5ec84d,_0x11b8ce)['then'](function(_0x2519e3){logger['info']('VoiceDialReport,\x20%s,\x20%s',_0x5a61ac,'request\x20sent');logger['debug'](_0x014a('0xa'),_0x5a61ac,'request\x20sent',JSON[_0x014a('0xb')](_0x2519e3));if(_0x2519e3[_0x014a('0xc')]){if(_0x2519e3['error'][_0x014a('0xd')]===0x1f4){logger[_0x014a('0xc')](_0x014a('0xe'),_0x5a61ac,_0x2519e3[_0x014a('0xc')][_0x014a('0xf')]);return _0x22f17c(_0x2519e3[_0x014a('0xc')][_0x014a('0xf')]);}logger[_0x014a('0xc')](_0x014a('0xe'),_0x5a61ac,_0x2519e3[_0x014a('0xc')][_0x014a('0xf')]);return _0x6d05f2(_0x2519e3[_0x014a('0xc')]['message']);}else{logger[_0x014a('0x10')](_0x014a('0xe'),_0x5a61ac,'request\x20sent');_0x6d05f2(_0x2519e3[_0x014a('0x11')][_0x014a('0xf')]);}})['catch'](function(_0x16e6fc){logger[_0x014a('0xc')](_0x014a('0xe'),_0x5a61ac,_0x16e6fc);_0x22f17c(_0x16e6fc);});});}exports[_0x014a('0x12')]=function(_0x2c26ac){var _0x12d339=this;return new Promise(function(_0x61ec9f,_0x263b07){return db[_0x014a('0x13')][_0x014a('0x14')](_0x2c26ac[_0x014a('0x15')],{'raw':_0x2c26ac[_0x014a('0x16')]?_0x2c26ac[_0x014a('0x16')][_0x014a('0x17')]===undefined?!![]:![]:!![]})['then'](function(_0x359903){logger[_0x014a('0x10')](_0x014a('0x12'),_0x2c26ac);logger[_0x014a('0x18')](_0x014a('0x12'),_0x2c26ac,JSON[_0x014a('0xb')](_0x359903));_0x61ec9f(_0x359903);})[_0x014a('0x19')](function(_0x3dd2d0){logger[_0x014a('0xc')]('CreateVoiceDialReport',_0x3dd2d0[_0x014a('0xf')],_0x2c26ac);_0x263b07(_0x12d339['error'](0x1f4,_0x3dd2d0[_0x014a('0xf')]));});});};exports[_0x014a('0x1a')]=function(_0x44d921){var _0x36d52b=this;return new Promise(function(_0x2b3c10,_0x113b12){return db[_0x014a('0x13')][_0x014a('0x1b')](_0x44d921[_0x014a('0x15')],{'raw':_0x44d921['options']?_0x44d921[_0x014a('0x16')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x44d921[_0x014a('0x16')]?_0x44d921[_0x014a('0x16')]['where']||null:null,'attributes':_0x44d921['options']?_0x44d921[_0x014a('0x16')][_0x014a('0x1c')]||null:null,'limit':_0x44d921[_0x014a('0x16')]?_0x44d921['options'][_0x014a('0x1d')]||null:null})[_0x014a('0x1e')](function(_0x598179){logger[_0x014a('0x10')](_0x014a('0x1a'),_0x44d921);logger['debug']('UpdateVoiceDialReport',_0x44d921,JSON[_0x014a('0xb')](_0x598179));_0x2b3c10(_0x598179);})[_0x014a('0x19')](function(_0xe70dfa){logger[_0x014a('0xc')]('UpdateVoiceDialReport',_0xe70dfa[_0x014a('0xf')],_0x44d921);_0x113b12(_0x36d52b[_0x014a('0xc')](0x1f4,_0xe70dfa[_0x014a('0xf')]));});});};
\ No newline at end of file
+var _0x4137=['CreateVoiceDialReport','VoiceDialReport','body','options','raw','UpdateVoiceDialReport','update','where','attributes','limit','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','VoiceDialReport,\x20%s,\x20%s','debug','VoiceDialReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch'];(function(_0x5e3c97,_0x27a1e5){var _0xbaa0a3=function(_0x43b7c6){while(--_0x43b7c6){_0x5e3c97['push'](_0x5e3c97['shift']());}};_0xbaa0a3(++_0x27a1e5);}(_0x4137,0xf8));var _0x7413=function(_0x27af45,_0x1b57aa){_0x27af45=_0x27af45-0x0;var _0x18df21=_0x4137[_0x27af45];return _0x18df21;};'use strict';var _=require(_0x7413('0x0'));var util=require(_0x7413('0x1'));var moment=require(_0x7413('0x2'));var BPromise=require(_0x7413('0x3'));var rs=require(_0x7413('0x4'));var fs=require('fs');var db=require(_0x7413('0x5'))['db'];var utils=require(_0x7413('0x6'));var logger=require(_0x7413('0x7'))(_0x7413('0x8'));var config=require(_0x7413('0x9'));var jayson=require(_0x7413('0xa'));var client=jayson[_0x7413('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0xc808cd,_0x188d89,_0x5b39ac){return new BPromise(function(_0x15af0d,_0x5f4cd0){return client[_0x7413('0xc')](_0xc808cd,_0x5b39ac)[_0x7413('0xd')](function(_0x4e320b){logger[_0x7413('0xe')](_0x7413('0xf'),_0x188d89,'request\x20sent');logger[_0x7413('0x10')](_0x7413('0x11'),_0x188d89,_0x7413('0x12'),JSON[_0x7413('0x13')](_0x4e320b));if(_0x4e320b[_0x7413('0x14')]){if(_0x4e320b['error'][_0x7413('0x15')]===0x1f4){logger[_0x7413('0x14')]('VoiceDialReport,\x20%s,\x20%s',_0x188d89,_0x4e320b[_0x7413('0x14')][_0x7413('0x16')]);return _0x5f4cd0(_0x4e320b[_0x7413('0x14')]['message']);}logger['error']('VoiceDialReport,\x20%s,\x20%s',_0x188d89,_0x4e320b[_0x7413('0x14')][_0x7413('0x16')]);return _0x15af0d(_0x4e320b['error'][_0x7413('0x16')]);}else{logger[_0x7413('0xe')]('VoiceDialReport,\x20%s,\x20%s',_0x188d89,_0x7413('0x12'));_0x15af0d(_0x4e320b['result']['message']);}})[_0x7413('0x17')](function(_0x568d1f){logger[_0x7413('0x14')]('VoiceDialReport,\x20%s,\x20%s',_0x188d89,_0x568d1f);_0x5f4cd0(_0x568d1f);});});}exports[_0x7413('0x18')]=function(_0x3230d8){var _0x19157f=this;return new Promise(function(_0x12a01e,_0x2a3417){return db[_0x7413('0x19')]['create'](_0x3230d8[_0x7413('0x1a')],{'raw':_0x3230d8[_0x7413('0x1b')]?_0x3230d8[_0x7413('0x1b')][_0x7413('0x1c')]===undefined?!![]:![]:!![]})['then'](function(_0x239d0e){logger[_0x7413('0xe')](_0x7413('0x18'),_0x3230d8);logger[_0x7413('0x10')](_0x7413('0x18'),_0x3230d8,JSON[_0x7413('0x13')](_0x239d0e));_0x12a01e(_0x239d0e);})[_0x7413('0x17')](function(_0x4e18cb){logger['error']('CreateVoiceDialReport',_0x4e18cb[_0x7413('0x16')],_0x3230d8);_0x2a3417(_0x19157f['error'](0x1f4,_0x4e18cb[_0x7413('0x16')]));});});};exports[_0x7413('0x1d')]=function(_0x3b0c81){var _0x2fc0f4=this;return new Promise(function(_0x1d46e9,_0x346ce8){return db[_0x7413('0x19')][_0x7413('0x1e')](_0x3b0c81[_0x7413('0x1a')],{'raw':_0x3b0c81['options']?_0x3b0c81['options'][_0x7413('0x1c')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3b0c81['options']?_0x3b0c81[_0x7413('0x1b')][_0x7413('0x1f')]||null:null,'attributes':_0x3b0c81[_0x7413('0x1b')]?_0x3b0c81['options'][_0x7413('0x20')]||null:null,'limit':_0x3b0c81[_0x7413('0x1b')]?_0x3b0c81[_0x7413('0x1b')][_0x7413('0x21')]||null:null})[_0x7413('0xd')](function(_0x2e521f){logger['info'](_0x7413('0x1d'),_0x3b0c81);logger['debug'](_0x7413('0x1d'),_0x3b0c81,JSON[_0x7413('0x13')](_0x2e521f));_0x1d46e9(_0x2e521f);})[_0x7413('0x17')](function(_0x13a836){logger[_0x7413('0x14')](_0x7413('0x1d'),_0x13a836['message'],_0x3b0c81);_0x346ce8(_0x2fc0f4[_0x7413('0x14')](0x1f4,_0x13a836[_0x7413('0x16')]));});});};
\ No newline at end of file
index 31b25a7..9e7cbb3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f9b=['/:id','isAuthenticated','show','post','addApplications','put','update','destroy','exports','multer','util','Router','../../components/auth/service','../../config/environment','./voiceExtension.controller','get','index'];(function(_0x257bb8,_0x4347ee){var _0x17e781=function(_0x1bdaa7){while(--_0x1bdaa7){_0x257bb8['push'](_0x257bb8['shift']());}};_0x17e781(++_0x4347ee);}(_0x6f9b,0x17f));var _0xb6f9=function(_0x20dc3a,_0x3a8665){_0x20dc3a=_0x20dc3a-0x0;var _0x2ae623=_0x6f9b[_0x20dc3a];return _0x2ae623;};'use strict';var multer=require(_0xb6f9('0x0'));var util=require(_0xb6f9('0x1'));var path=require('path');var express=require('express');var router=express[_0xb6f9('0x2')]();var auth=require(_0xb6f9('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xb6f9('0x4'));var controller=require(_0xb6f9('0x5'));router[_0xb6f9('0x6')]('/',auth['isAuthenticated'](),controller[_0xb6f9('0x7')]);router[_0xb6f9('0x6')](_0xb6f9('0x8'),auth[_0xb6f9('0x9')](),controller[_0xb6f9('0xa')]);router[_0xb6f9('0xb')]('/',auth[_0xb6f9('0x9')](),controller['create']);router[_0xb6f9('0xb')]('/:id/applications',auth[_0xb6f9('0x9')](),controller[_0xb6f9('0xc')]);router[_0xb6f9('0xd')](_0xb6f9('0x8'),auth[_0xb6f9('0x9')](),controller[_0xb6f9('0xe')]);router['delete']('/:id',auth[_0xb6f9('0x9')](),controller[_0xb6f9('0xf')]);module[_0xb6f9('0x10')]=router;
\ No newline at end of file
+var _0x3ede=['destroy','exports','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','index','get','show','post','create','/:id/applications','addApplications','update','/:id'];(function(_0x46e363,_0x45d7e2){var _0x3fb059=function(_0x5e6274){while(--_0x5e6274){_0x46e363['push'](_0x46e363['shift']());}};_0x3fb059(++_0x45d7e2);}(_0x3ede,0x18e));var _0xe3ed=function(_0x353c53,_0x2102c0){_0x353c53=_0x353c53-0x0;var _0x2c55da=_0x3ede[_0x353c53];return _0x2c55da;};'use strict';var multer=require('multer');var util=require(_0xe3ed('0x0'));var path=require(_0xe3ed('0x1'));var express=require(_0xe3ed('0x2'));var router=express['Router']();var auth=require(_0xe3ed('0x3'));var interaction=require(_0xe3ed('0x4'));var config=require(_0xe3ed('0x5'));var controller=require('./voiceExtension.controller');router['get']('/',auth[_0xe3ed('0x6')](),controller[_0xe3ed('0x7')]);router[_0xe3ed('0x8')]('/:id',auth[_0xe3ed('0x6')](),controller[_0xe3ed('0x9')]);router[_0xe3ed('0xa')]('/',auth[_0xe3ed('0x6')](),controller[_0xe3ed('0xb')]);router[_0xe3ed('0xa')](_0xe3ed('0xc'),auth[_0xe3ed('0x6')](),controller[_0xe3ed('0xd')]);router['put']('/:id',auth[_0xe3ed('0x6')](),controller[_0xe3ed('0xe')]);router['delete'](_0xe3ed('0xf'),auth[_0xe3ed('0x6')](),controller[_0xe3ed('0x10')]);module[_0xe3ed('0x11')]=router;
\ No newline at end of file
index f8ac892..1a6210b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb024=['NoOp','ENUM','inbound','internal','inbound-fax','outbound-fax','any','*,*,*,*','INTEGER','BOOLEAN','sequelize','exports','STRING','compositeIndex'];(function(_0x2d277f,_0x32b8da){var _0x5d6f15=function(_0x3e22ef){while(--_0x3e22ef){_0x2d277f['push'](_0x2d277f['shift']());}};_0x5d6f15(++_0x32b8da);}(_0xb024,0x96));var _0x4b02=function(_0x21a9d9,_0x4d5ac8){_0x21a9d9=_0x21a9d9-0x0;var _0x46adce=_0xb024[_0x21a9d9];return _0x46adce;};'use strict';var Sequelize=require(_0x4b02('0x0'));module[_0x4b02('0x1')]={'context':{'type':Sequelize['STRING'],'allowNull':![],'unique':'compositeIndex','validate':{'notEmpty':!![],'is':/[A-Za-z0-9._\+*!\-\[\]]+$/i}},'exten':{'type':Sequelize[_0x4b02('0x2')],'allowNull':![],'unique':_0x4b02('0x3')},'priority':{'type':Sequelize[_0x4b02('0x2')],'allowNull':![],'defaultValue':'1','unique':_0x4b02('0x3')},'tag':{'type':Sequelize[_0x4b02('0x2')],'allowNull':![],'defaultValue':'--'},'app':{'type':Sequelize[_0x4b02('0x2')],'allowNull':![],'defaultValue':_0x4b02('0x4')},'appdata':{'type':Sequelize[_0x4b02('0x2')](0x1000),'allowNull':!![],'defaultValue':''},'type':{'type':Sequelize[_0x4b02('0x5')](_0x4b02('0x6'),'outbound',_0x4b02('0x7'),_0x4b02('0x8'),_0x4b02('0x9'),'system',_0x4b02('0xa')),'allowNull':![]},'description':{'type':Sequelize[_0x4b02('0x2')]},'interval':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x4b02('0xb')},'IntervalId':{'type':Sequelize[_0x4b02('0xc')]},'isApp':{'type':Sequelize[_0x4b02('0xd')],'allowNull':![],'defaultValue':![]},'appType':{'type':Sequelize['STRING'],'defaultValue':null},'callerID':{'type':Sequelize['STRING'],'allowNull':!![]},'record':{'type':Sequelize[_0x4b02('0xd')],'defaultValue':![]},'cutdigits':{'type':Sequelize[_0x4b02('0xc')]},'recordingFormat':{'type':Sequelize['STRING'],'defaultValue':'wav'},'answer':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]}};
\ No newline at end of file
+var _0x3d1b=['outbound-fax','system','INTEGER','BOOLEAN','wav','exports','STRING','compositeIndex','NoOp','inbound','outbound','internal'];(function(_0xa66b48,_0x326c54){var _0x230f65=function(_0x9ac5c0){while(--_0x9ac5c0){_0xa66b48['push'](_0xa66b48['shift']());}};_0x230f65(++_0x326c54);}(_0x3d1b,0x7d));var _0xb3d1=function(_0x1c238f,_0x36012b){_0x1c238f=_0x1c238f-0x0;var _0x344288=_0x3d1b[_0x1c238f];return _0x344288;};'use strict';var Sequelize=require('sequelize');module[_0xb3d1('0x0')]={'context':{'type':Sequelize[_0xb3d1('0x1')],'allowNull':![],'unique':_0xb3d1('0x2'),'validate':{'notEmpty':!![],'is':/[A-Za-z0-9._\+*!\-\[\]]+$/i}},'exten':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0xb3d1('0x2')},'priority':{'type':Sequelize[_0xb3d1('0x1')],'allowNull':![],'defaultValue':'1','unique':'compositeIndex'},'tag':{'type':Sequelize[_0xb3d1('0x1')],'allowNull':![],'defaultValue':'--'},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xb3d1('0x3')},'appdata':{'type':Sequelize[_0xb3d1('0x1')](0x1000),'allowNull':!![],'defaultValue':''},'type':{'type':Sequelize['ENUM'](_0xb3d1('0x4'),_0xb3d1('0x5'),_0xb3d1('0x6'),'inbound-fax',_0xb3d1('0x7'),_0xb3d1('0x8'),'any'),'allowNull':![]},'description':{'type':Sequelize[_0xb3d1('0x1')]},'interval':{'type':Sequelize[_0xb3d1('0x1')],'allowNull':![],'defaultValue':'*,*,*,*'},'IntervalId':{'type':Sequelize[_0xb3d1('0x9')]},'isApp':{'type':Sequelize[_0xb3d1('0xa')],'allowNull':![],'defaultValue':![]},'appType':{'type':Sequelize[_0xb3d1('0x1')],'defaultValue':null},'callerID':{'type':Sequelize[_0xb3d1('0x1')],'allowNull':!![]},'record':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'cutdigits':{'type':Sequelize['INTEGER']},'recordingFormat':{'type':Sequelize[_0xb3d1('0x1')],'defaultValue':_0xb3d1('0xb')},'answer':{'type':Sequelize[_0xb3d1('0xa')],'defaultValue':!![]}};
\ No newline at end of file
index 3da572f..70a3db3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['json','offset','limit','Content-Range','apply','reject','save','update','then','error','stack','name','rawAttributes','keys','query','dateStart','dateEnd','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','where','filters','pick','add','day','merge','filter','map','options','includeAll','include','findAll','rows','catch','show','params','VoiceExtension','length','find','create','body','type','outbound','startsWith','exten','concat','description','cutdigits','context','destroy','bulkCreate','findAndCountAll','cast(priority\x20as\x20unsigned)','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./voiceExtension.socket','sendStatus','status','end'];(function(_0x505493,_0xa913c8){var _0x5604cc=function(_0x23f626){while(--_0x23f626){_0x505493['push'](_0x505493['shift']());}};_0x5604cc(++_0xa913c8);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2576d7,_0x167624){_0x2576d7=_0x2576d7-0x0;var _0x16a08c=_0xa9e0[_0x2576d7];return _0x16a08c;};'use strict';var jsonpatch=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0a9e('0x3'));var path=require('path');var sox=require(_0x0a9e('0x4'));var csv=require(_0x0a9e('0x5'));var ejs=require(_0x0a9e('0x6'));var fs=require('fs');var _=require(_0x0a9e('0x7'));var squel=require(_0x0a9e('0x8'));var crypto=require('crypto');var jsforce=require(_0x0a9e('0x9'));var deskjs=require(_0x0a9e('0xa'));var toCsv=require(_0x0a9e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0a9e('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x0a9e('0xc'));var config=require(_0x0a9e('0xd'));var db=require(_0x0a9e('0xe'))['db'];var socket=require(_0x0a9e('0xf'))({'host':_0x0a9e('0x10'),'port':0x18eb});require(_0x0a9e('0x11'))['register'](socket);function respondWithStatusCode(_0x50dfb2,_0x527cdd){_0x527cdd=_0x527cdd||0xcc;return function(_0x4cfe67){if(_0x4cfe67){return _0x50dfb2[_0x0a9e('0x12')](_0x527cdd);}return _0x50dfb2[_0x0a9e('0x13')](_0x527cdd)[_0x0a9e('0x14')]();};}function respondWithResult(_0x26d672,_0x32d742){_0x32d742=_0x32d742||0xc8;return function(_0x69aeb7){if(_0x69aeb7){return _0x26d672['status'](_0x32d742)[_0x0a9e('0x15')](_0x69aeb7);}};}function respondWithFilteredResult(_0x239b12,_0x2b4227){return function(_0x281129){if(_0x281129){var _0x44dcfd=_0x281129['count'],_0x4d5611=_0x2b4227[_0x0a9e('0x16')],_0x52a03d=_0x2b4227['offset']+_0x2b4227[_0x0a9e('0x17')],_0x22dccb;if(_0x52a03d>=_0x44dcfd){_0x52a03d=_0x44dcfd;_0x22dccb=0xc8;}else{_0x22dccb=0xce;}_0x239b12[_0x0a9e('0x13')](_0x22dccb);return _0x239b12['set'](_0x0a9e('0x18'),_0x4d5611+'-'+_0x52a03d+'/'+_0x44dcfd)['json'](_0x281129);}return null;};}function patchUpdates(_0x459eb1){return function(_0x478723){try{jsonpatch[_0x0a9e('0x19')](_0x478723,_0x459eb1,!![]);}catch(_0x205fd6){return BPromise[_0x0a9e('0x1a')](_0x205fd6);}return _0x478723[_0x0a9e('0x1b')]();};}function saveUpdates(_0x530eb7,_0x20559e){return function(_0x1314ae){if(_0x1314ae){return _0x1314ae[_0x0a9e('0x1c')](_0x530eb7)[_0x0a9e('0x1d')](function(_0x105080){return _0x105080;});}return null;};}function removeEntity(_0x4bb1e3,_0x2c3407){return function(_0x155cce){if(_0x155cce){return _0x155cce['destroy']()[_0x0a9e('0x1d')](function(){_0x4bb1e3['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x3a02e1,_0x432e56){return function(_0x38e7c4){if(!_0x38e7c4){_0x3a02e1[_0x0a9e('0x12')](0x194);}return _0x38e7c4;};}function handleError(_0x4abc77,_0xfb6e48){_0xfb6e48=_0xfb6e48||0x1f4;return function(_0x2fb0e4){logger[_0x0a9e('0x1e')](_0x2fb0e4[_0x0a9e('0x1f')]);if(_0x2fb0e4[_0x0a9e('0x20')]){delete _0x2fb0e4[_0x0a9e('0x20')];}_0x4abc77[_0x0a9e('0x13')](_0xfb6e48)['send'](_0x2fb0e4);};}exports['index']=function(_0x197ec0,_0x3a8e58){var _0x40c424={},_0x33161b={},_0x526cf3={'count':0x0,'rows':[]};var _0x384319=db['VoiceExtension'][_0x0a9e('0x21')];_0x33161b['model']=_[_0x0a9e('0x22')](_0x384319);var _0x34dc65={'dateStart':_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x24')],'dateEnd':_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x25')]};delete _0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x24')];delete _0x197ec0['query'][_0x0a9e('0x25')];_0x33161b[_0x0a9e('0x23')]=_[_0x0a9e('0x22')](_0x197ec0[_0x0a9e('0x23')]);_0x33161b['filters']=_[_0x0a9e('0x26')](_0x33161b[_0x0a9e('0x27')],_0x33161b[_0x0a9e('0x23')]);_0x40c424[_0x0a9e('0x28')]=_[_0x0a9e('0x26')](_0x33161b[_0x0a9e('0x27')],qs[_0x0a9e('0x29')](_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0x40c424['attributes']=_0x40c424[_0x0a9e('0x28')]['length']?_0x40c424[_0x0a9e('0x28')]:_0x33161b[_0x0a9e('0x27')];if(!_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x2a')](_0x0a9e('0x2b'))){_0x40c424['limit']=qs[_0x0a9e('0x17')](_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x17')]);_0x40c424[_0x0a9e('0x16')]=qs[_0x0a9e('0x16')](_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x16')]);}_0x40c424[_0x0a9e('0x2c')]=qs['sort'](_0x197ec0[_0x0a9e('0x23')]['sort']);_0x40c424[_0x0a9e('0x2d')]=qs[_0x0a9e('0x2e')](_[_0x0a9e('0x2f')](_0x197ec0[_0x0a9e('0x23')],_0x33161b['filters']));if(_0x34dc65[_0x0a9e('0x24')]){if(_0x34dc65[_0x0a9e('0x25')]){_0x34dc65[_0x0a9e('0x25')]=moment(_0x34dc65[_0x0a9e('0x25')])['add'](0x1,'day');}else{_0x34dc65[_0x0a9e('0x25')]=moment(_0x34dc65['dateStart'])[_0x0a9e('0x30')](0x1,_0x0a9e('0x31'));}_[_0x0a9e('0x32')](_0x40c424[_0x0a9e('0x2d')],{'createdAt':{'$gte':_0x34dc65['dateStart'],'$lte':_0x34dc65[_0x0a9e('0x25')]}});}if(_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x33')]){_0x40c424['where']=_[_0x0a9e('0x32')](_0x40c424[_0x0a9e('0x2d')],{'$or':_[_0x0a9e('0x34')](_0x40c424['attributes'],function(_0x546ef8){var _0x11b61d={};_0x11b61d[_0x546ef8]={'$like':'%'+_0x197ec0[_0x0a9e('0x23')]['filter']+'%'};return _0x11b61d;})});}_0x40c424=_[_0x0a9e('0x32')]({},_0x40c424,_0x197ec0[_0x0a9e('0x35')]);var _0x2e1b3a={'where':_0x40c424[_0x0a9e('0x2d')]};return db['VoiceExtension']['count'](_0x2e1b3a)[_0x0a9e('0x1d')](function(_0x45b3d0){_0x526cf3['count']=_0x45b3d0;if(_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x36')]){_0x40c424[_0x0a9e('0x37')]=[{'all':!![]}];}return db['VoiceExtension'][_0x0a9e('0x38')](_0x40c424);})[_0x0a9e('0x1d')](function(_0x274e8e){_0x526cf3[_0x0a9e('0x39')]=_0x274e8e;return _0x526cf3;})[_0x0a9e('0x1d')](respondWithFilteredResult(_0x3a8e58,_0x40c424))[_0x0a9e('0x3a')](handleError(_0x3a8e58,null));};exports[_0x0a9e('0x3b')]=function(_0x45a9b8,_0x23b089){var _0x3da2cd={'raw':![],'where':{'id':_0x45a9b8[_0x0a9e('0x3c')]['id']}},_0x2c3711={};_0x2c3711[_0x0a9e('0x27')]=_[_0x0a9e('0x22')](db[_0x0a9e('0x3d')]['rawAttributes']);_0x2c3711['query']=_[_0x0a9e('0x22')](_0x45a9b8[_0x0a9e('0x23')]);_0x2c3711[_0x0a9e('0x2e')]=_[_0x0a9e('0x26')](_0x2c3711[_0x0a9e('0x27')],_0x2c3711[_0x0a9e('0x23')]);_0x3da2cd[_0x0a9e('0x28')]=_[_0x0a9e('0x26')](_0x2c3711[_0x0a9e('0x27')],qs[_0x0a9e('0x29')](_0x45a9b8[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0x3da2cd['attributes']=_0x3da2cd[_0x0a9e('0x28')][_0x0a9e('0x3e')]?_0x3da2cd[_0x0a9e('0x28')]:_0x2c3711[_0x0a9e('0x27')];if(_0x45a9b8[_0x0a9e('0x23')][_0x0a9e('0x36')]){_0x3da2cd[_0x0a9e('0x37')]=[{'all':!![]}];}_0x3da2cd=_[_0x0a9e('0x32')]({},_0x3da2cd,_0x45a9b8['options']);return db[_0x0a9e('0x3d')]['find'](_0x3da2cd)[_0x0a9e('0x1d')](handleEntityNotFound(_0x23b089,null))[_0x0a9e('0x1d')](respondWithResult(_0x23b089,null))[_0x0a9e('0x3a')](handleError(_0x23b089,null));};exports['destroy']=function(_0x14bec2,_0x7f6eb1){return db[_0x0a9e('0x3d')][_0x0a9e('0x3f')]({'where':{'id':_0x14bec2[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x1d')](handleEntityNotFound(_0x7f6eb1,null))[_0x0a9e('0x1d')](removeEntity(_0x7f6eb1,null))['catch'](handleError(_0x7f6eb1,null));};exports[_0x0a9e('0x40')]=function(_0x1bde3c,_0x1b5e80){if(_0x1bde3c[_0x0a9e('0x41')][_0x0a9e('0x42')]===_0x0a9e('0x43')&&!_[_0x0a9e('0x44')](_0x1bde3c[_0x0a9e('0x41')][_0x0a9e('0x45')],'_')){_0x1bde3c['body'][_0x0a9e('0x45')]='_'[_0x0a9e('0x46')](_0x1bde3c['body']['exten']);}return db['VoiceExtension'][_0x0a9e('0x40')](_0x1bde3c[_0x0a9e('0x41')],{'raw':![]})[_0x0a9e('0x1d')](respondWithResult(_0x1b5e80,0xc9))[_0x0a9e('0x3a')](handleError(_0x1b5e80,null));};exports[_0x0a9e('0x1c')]=function(_0x30decb,_0x2e5165){if(_0x30decb[_0x0a9e('0x41')]['id']){delete _0x30decb['body']['id'];}return db['VoiceExtension']['find']({'where':{'id':_0x30decb[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x1d')](handleEntityNotFound(_0x2e5165,null))[_0x0a9e('0x1d')](function(_0x5bb3ed){if(_0x5bb3ed){return db[_0x0a9e('0x3d')][_0x0a9e('0x1c')](_['pick'](_0x30decb['body'],[_0x0a9e('0x45'),'context',_0x0a9e('0x47'),'recordingFormat',_0x0a9e('0x48')]),{'where':{'context':_0x5bb3ed[_0x0a9e('0x49')],'exten':_0x5bb3ed[_0x0a9e('0x45')]},'individualHooks':!![]})['then'](function(_0x2f82da){return _0x2f82da;});}return null;})[_0x0a9e('0x1d')](respondWithStatusCode(_0x2e5165,null))['catch'](handleError(_0x2e5165,null));};exports['addApplications']=function(_0x128aa6,_0x3aedd0,_0x49c095){return db[_0x0a9e('0x3d')]['findOne']({'where':{'id':_0x128aa6[_0x0a9e('0x3c')]['id']}})['then'](handleEntityNotFound(_0x3aedd0,null))[_0x0a9e('0x1d')](function(_0x4a6deb){if(_0x4a6deb){return db['sequelize']['transaction'](function(_0x2da03c){return db['VoiceExtension'][_0x0a9e('0x4a')]({'where':{'VoiceExtensionId':_0x128aa6[_0x0a9e('0x3c')]['id']},'transaction':_0x2da03c})[_0x0a9e('0x1d')](function(_0x19b4df){var _0x232830=_[_0x0a9e('0x34')](_0x128aa6[_0x0a9e('0x41')],function(_0x28d814){_0x28d814['VoiceExtensionId']=_0x128aa6[_0x0a9e('0x3c')]['id'];return _0x28d814;});return db[_0x0a9e('0x3d')][_0x0a9e('0x4b')](_0x232830,{'transaction':_0x2da03c});});})[_0x0a9e('0x1d')](function(){return db[_0x0a9e('0x3d')][_0x0a9e('0x4c')]({'where':{'isApp':!![],'VoiceExtensionId':_0x128aa6['params']['id']},'order':_0x0a9e('0x4d')});});}})[_0x0a9e('0x1d')](respondWithResult(_0x3aedd0,null))['catch'](handleError(_0x3aedd0,null));};
\ No newline at end of file
+var _0xa9e0=['json','offset','limit','Content-Range','apply','reject','save','update','then','error','stack','name','rawAttributes','keys','query','dateStart','dateEnd','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','where','filters','pick','add','day','merge','filter','map','options','includeAll','include','findAll','rows','catch','show','params','VoiceExtension','length','find','create','body','type','outbound','startsWith','exten','concat','description','cutdigits','context','destroy','bulkCreate','findAndCountAll','cast(priority\x20as\x20unsigned)','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','localhost','./voiceExtension.socket','sendStatus','status','end'];(function(_0x2e7a43,_0x3b3df4){var _0x52e9e1=function(_0x2c08cf){while(--_0x2c08cf){_0x2e7a43['push'](_0x2e7a43['shift']());}};_0x52e9e1(++_0x3b3df4);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5c3c0b,_0x4ee35e){_0x5c3c0b=_0x5c3c0b-0x0;var _0x52ecd2=_0xa9e0[_0x5c3c0b];return _0x52ecd2;};'use strict';var jsonpatch=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0a9e('0x3'));var path=require('path');var sox=require(_0x0a9e('0x4'));var csv=require(_0x0a9e('0x5'));var ejs=require(_0x0a9e('0x6'));var fs=require('fs');var _=require(_0x0a9e('0x7'));var squel=require(_0x0a9e('0x8'));var crypto=require('crypto');var jsforce=require(_0x0a9e('0x9'));var deskjs=require(_0x0a9e('0xa'));var toCsv=require(_0x0a9e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0a9e('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x0a9e('0xc'));var config=require(_0x0a9e('0xd'));var db=require(_0x0a9e('0xe'))['db'];var socket=require(_0x0a9e('0xf'))({'host':_0x0a9e('0x10'),'port':0x18eb});require(_0x0a9e('0x11'))['register'](socket);function respondWithStatusCode(_0x50dfb2,_0x527cdd){_0x527cdd=_0x527cdd||0xcc;return function(_0x4cfe67){if(_0x4cfe67){return _0x50dfb2[_0x0a9e('0x12')](_0x527cdd);}return _0x50dfb2[_0x0a9e('0x13')](_0x527cdd)[_0x0a9e('0x14')]();};}function respondWithResult(_0x26d672,_0x32d742){_0x32d742=_0x32d742||0xc8;return function(_0x69aeb7){if(_0x69aeb7){return _0x26d672['status'](_0x32d742)[_0x0a9e('0x15')](_0x69aeb7);}};}function respondWithFilteredResult(_0x239b12,_0x2b4227){return function(_0x281129){if(_0x281129){var _0x44dcfd=_0x281129['count'],_0x4d5611=_0x2b4227[_0x0a9e('0x16')],_0x52a03d=_0x2b4227['offset']+_0x2b4227[_0x0a9e('0x17')],_0x22dccb;if(_0x52a03d>=_0x44dcfd){_0x52a03d=_0x44dcfd;_0x22dccb=0xc8;}else{_0x22dccb=0xce;}_0x239b12[_0x0a9e('0x13')](_0x22dccb);return _0x239b12['set'](_0x0a9e('0x18'),_0x4d5611+'-'+_0x52a03d+'/'+_0x44dcfd)['json'](_0x281129);}return null;};}function patchUpdates(_0x459eb1){return function(_0x478723){try{jsonpatch[_0x0a9e('0x19')](_0x478723,_0x459eb1,!![]);}catch(_0x205fd6){return BPromise[_0x0a9e('0x1a')](_0x205fd6);}return _0x478723[_0x0a9e('0x1b')]();};}function saveUpdates(_0x530eb7,_0x20559e){return function(_0x1314ae){if(_0x1314ae){return _0x1314ae[_0x0a9e('0x1c')](_0x530eb7)[_0x0a9e('0x1d')](function(_0x105080){return _0x105080;});}return null;};}function removeEntity(_0x4bb1e3,_0x2c3407){return function(_0x155cce){if(_0x155cce){return _0x155cce['destroy']()[_0x0a9e('0x1d')](function(){_0x4bb1e3['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x3a02e1,_0x432e56){return function(_0x38e7c4){if(!_0x38e7c4){_0x3a02e1[_0x0a9e('0x12')](0x194);}return _0x38e7c4;};}function handleError(_0x4abc77,_0xfb6e48){_0xfb6e48=_0xfb6e48||0x1f4;return function(_0x2fb0e4){logger[_0x0a9e('0x1e')](_0x2fb0e4[_0x0a9e('0x1f')]);if(_0x2fb0e4[_0x0a9e('0x20')]){delete _0x2fb0e4[_0x0a9e('0x20')];}_0x4abc77[_0x0a9e('0x13')](_0xfb6e48)['send'](_0x2fb0e4);};}exports['index']=function(_0x197ec0,_0x3a8e58){var _0x40c424={},_0x33161b={},_0x526cf3={'count':0x0,'rows':[]};var _0x384319=db['VoiceExtension'][_0x0a9e('0x21')];_0x33161b['model']=_[_0x0a9e('0x22')](_0x384319);var _0x34dc65={'dateStart':_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x24')],'dateEnd':_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x25')]};delete _0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x24')];delete _0x197ec0['query'][_0x0a9e('0x25')];_0x33161b[_0x0a9e('0x23')]=_[_0x0a9e('0x22')](_0x197ec0[_0x0a9e('0x23')]);_0x33161b['filters']=_[_0x0a9e('0x26')](_0x33161b[_0x0a9e('0x27')],_0x33161b[_0x0a9e('0x23')]);_0x40c424[_0x0a9e('0x28')]=_[_0x0a9e('0x26')](_0x33161b[_0x0a9e('0x27')],qs[_0x0a9e('0x29')](_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0x40c424['attributes']=_0x40c424[_0x0a9e('0x28')]['length']?_0x40c424[_0x0a9e('0x28')]:_0x33161b[_0x0a9e('0x27')];if(!_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x2a')](_0x0a9e('0x2b'))){_0x40c424['limit']=qs[_0x0a9e('0x17')](_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x17')]);_0x40c424[_0x0a9e('0x16')]=qs[_0x0a9e('0x16')](_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x16')]);}_0x40c424[_0x0a9e('0x2c')]=qs['sort'](_0x197ec0[_0x0a9e('0x23')]['sort']);_0x40c424[_0x0a9e('0x2d')]=qs[_0x0a9e('0x2e')](_[_0x0a9e('0x2f')](_0x197ec0[_0x0a9e('0x23')],_0x33161b['filters']));if(_0x34dc65[_0x0a9e('0x24')]){if(_0x34dc65[_0x0a9e('0x25')]){_0x34dc65[_0x0a9e('0x25')]=moment(_0x34dc65[_0x0a9e('0x25')])['add'](0x1,'day');}else{_0x34dc65[_0x0a9e('0x25')]=moment(_0x34dc65['dateStart'])[_0x0a9e('0x30')](0x1,_0x0a9e('0x31'));}_[_0x0a9e('0x32')](_0x40c424[_0x0a9e('0x2d')],{'createdAt':{'$gte':_0x34dc65['dateStart'],'$lte':_0x34dc65[_0x0a9e('0x25')]}});}if(_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x33')]){_0x40c424['where']=_[_0x0a9e('0x32')](_0x40c424[_0x0a9e('0x2d')],{'$or':_[_0x0a9e('0x34')](_0x40c424['attributes'],function(_0x546ef8){var _0x11b61d={};_0x11b61d[_0x546ef8]={'$like':'%'+_0x197ec0[_0x0a9e('0x23')]['filter']+'%'};return _0x11b61d;})});}_0x40c424=_[_0x0a9e('0x32')]({},_0x40c424,_0x197ec0[_0x0a9e('0x35')]);var _0x2e1b3a={'where':_0x40c424[_0x0a9e('0x2d')]};return db['VoiceExtension']['count'](_0x2e1b3a)[_0x0a9e('0x1d')](function(_0x45b3d0){_0x526cf3['count']=_0x45b3d0;if(_0x197ec0[_0x0a9e('0x23')][_0x0a9e('0x36')]){_0x40c424[_0x0a9e('0x37')]=[{'all':!![]}];}return db['VoiceExtension'][_0x0a9e('0x38')](_0x40c424);})[_0x0a9e('0x1d')](function(_0x274e8e){_0x526cf3[_0x0a9e('0x39')]=_0x274e8e;return _0x526cf3;})[_0x0a9e('0x1d')](respondWithFilteredResult(_0x3a8e58,_0x40c424))[_0x0a9e('0x3a')](handleError(_0x3a8e58,null));};exports[_0x0a9e('0x3b')]=function(_0x45a9b8,_0x23b089){var _0x3da2cd={'raw':![],'where':{'id':_0x45a9b8[_0x0a9e('0x3c')]['id']}},_0x2c3711={};_0x2c3711[_0x0a9e('0x27')]=_[_0x0a9e('0x22')](db[_0x0a9e('0x3d')]['rawAttributes']);_0x2c3711['query']=_[_0x0a9e('0x22')](_0x45a9b8[_0x0a9e('0x23')]);_0x2c3711[_0x0a9e('0x2e')]=_[_0x0a9e('0x26')](_0x2c3711[_0x0a9e('0x27')],_0x2c3711[_0x0a9e('0x23')]);_0x3da2cd[_0x0a9e('0x28')]=_[_0x0a9e('0x26')](_0x2c3711[_0x0a9e('0x27')],qs[_0x0a9e('0x29')](_0x45a9b8[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0x3da2cd['attributes']=_0x3da2cd[_0x0a9e('0x28')][_0x0a9e('0x3e')]?_0x3da2cd[_0x0a9e('0x28')]:_0x2c3711[_0x0a9e('0x27')];if(_0x45a9b8[_0x0a9e('0x23')][_0x0a9e('0x36')]){_0x3da2cd[_0x0a9e('0x37')]=[{'all':!![]}];}_0x3da2cd=_[_0x0a9e('0x32')]({},_0x3da2cd,_0x45a9b8['options']);return db[_0x0a9e('0x3d')]['find'](_0x3da2cd)[_0x0a9e('0x1d')](handleEntityNotFound(_0x23b089,null))[_0x0a9e('0x1d')](respondWithResult(_0x23b089,null))[_0x0a9e('0x3a')](handleError(_0x23b089,null));};exports['destroy']=function(_0x14bec2,_0x7f6eb1){return db[_0x0a9e('0x3d')][_0x0a9e('0x3f')]({'where':{'id':_0x14bec2[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x1d')](handleEntityNotFound(_0x7f6eb1,null))[_0x0a9e('0x1d')](removeEntity(_0x7f6eb1,null))['catch'](handleError(_0x7f6eb1,null));};exports[_0x0a9e('0x40')]=function(_0x1bde3c,_0x1b5e80){if(_0x1bde3c[_0x0a9e('0x41')][_0x0a9e('0x42')]===_0x0a9e('0x43')&&!_[_0x0a9e('0x44')](_0x1bde3c[_0x0a9e('0x41')][_0x0a9e('0x45')],'_')){_0x1bde3c['body'][_0x0a9e('0x45')]='_'[_0x0a9e('0x46')](_0x1bde3c['body']['exten']);}return db['VoiceExtension'][_0x0a9e('0x40')](_0x1bde3c[_0x0a9e('0x41')],{'raw':![]})[_0x0a9e('0x1d')](respondWithResult(_0x1b5e80,0xc9))[_0x0a9e('0x3a')](handleError(_0x1b5e80,null));};exports[_0x0a9e('0x1c')]=function(_0x30decb,_0x2e5165){if(_0x30decb[_0x0a9e('0x41')]['id']){delete _0x30decb['body']['id'];}return db['VoiceExtension']['find']({'where':{'id':_0x30decb[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x1d')](handleEntityNotFound(_0x2e5165,null))[_0x0a9e('0x1d')](function(_0x5bb3ed){if(_0x5bb3ed){return db[_0x0a9e('0x3d')][_0x0a9e('0x1c')](_['pick'](_0x30decb['body'],[_0x0a9e('0x45'),'context',_0x0a9e('0x47'),'recordingFormat',_0x0a9e('0x48')]),{'where':{'context':_0x5bb3ed[_0x0a9e('0x49')],'exten':_0x5bb3ed[_0x0a9e('0x45')]},'individualHooks':!![]})['then'](function(_0x2f82da){return _0x2f82da;});}return null;})[_0x0a9e('0x1d')](respondWithStatusCode(_0x2e5165,null))['catch'](handleError(_0x2e5165,null));};exports['addApplications']=function(_0x128aa6,_0x3aedd0,_0x49c095){return db[_0x0a9e('0x3d')]['findOne']({'where':{'id':_0x128aa6[_0x0a9e('0x3c')]['id']}})['then'](handleEntityNotFound(_0x3aedd0,null))[_0x0a9e('0x1d')](function(_0x4a6deb){if(_0x4a6deb){return db['sequelize']['transaction'](function(_0x2da03c){return db['VoiceExtension'][_0x0a9e('0x4a')]({'where':{'VoiceExtensionId':_0x128aa6[_0x0a9e('0x3c')]['id']},'transaction':_0x2da03c})[_0x0a9e('0x1d')](function(_0x19b4df){var _0x232830=_[_0x0a9e('0x34')](_0x128aa6[_0x0a9e('0x41')],function(_0x28d814){_0x28d814['VoiceExtensionId']=_0x128aa6[_0x0a9e('0x3c')]['id'];return _0x28d814;});return db[_0x0a9e('0x3d')][_0x0a9e('0x4b')](_0x232830,{'transaction':_0x2da03c});});})[_0x0a9e('0x1d')](function(){return db[_0x0a9e('0x3d')][_0x0a9e('0x4c')]({'where':{'isApp':!![],'VoiceExtensionId':_0x128aa6['params']['id']},'order':_0x0a9e('0x4d')});});}})[_0x0a9e('0x1d')](respondWithResult(_0x3aedd0,null))['catch'](handleError(_0x3aedd0,null));};
\ No newline at end of file
index 80d0811..688ef53 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ad4=['remove','emit','hook','exports','events','VoiceExtension','setMaxListeners','save','update'];(function(_0x22801c,_0x35d9da){var _0x26f273=function(_0x29fd1f){while(--_0x29fd1f){_0x22801c['push'](_0x22801c['shift']());}};_0x26f273(++_0x35d9da);}(_0x2ad4,0xf7));var _0x42ad=function(_0x1e393b,_0x355f6b){_0x1e393b=_0x1e393b-0x0;var _0x3d0bfe=_0x2ad4[_0x1e393b];return _0x3d0bfe;};'use strict';var EventEmitter=require(_0x42ad('0x0'));var VoiceExtension=require('../../mysqldb')['db'][_0x42ad('0x1')];var VoiceExtensionEvents=new EventEmitter();VoiceExtensionEvents[_0x42ad('0x2')](0x0);var events={'afterCreate':_0x42ad('0x3'),'afterUpdate':_0x42ad('0x4'),'afterDestroy':_0x42ad('0x5')};function emitEvent(_0x197e9d){return function(_0x4ad542,_0x54bdba,_0x111ff2){VoiceExtensionEvents[_0x42ad('0x6')](_0x197e9d+':'+_0x4ad542['id'],_0x4ad542);VoiceExtensionEvents[_0x42ad('0x6')](_0x197e9d,_0x4ad542);_0x111ff2(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];VoiceExtension[_0x42ad('0x7')](e,emitEvent(event));}}module[_0x42ad('0x8')]=VoiceExtensionEvents;
\ No newline at end of file
+var _0xa168=['emit','hasOwnProperty','events','../../mysqldb','VoiceExtension','setMaxListeners','update','remove'];(function(_0x2246d5,_0x204186){var _0x439671=function(_0x31c0a8){while(--_0x31c0a8){_0x2246d5['push'](_0x2246d5['shift']());}};_0x439671(++_0x204186);}(_0xa168,0x132));var _0x8a16=function(_0x48043a,_0x2b99c1){_0x48043a=_0x48043a-0x0;var _0x7d92d2=_0xa168[_0x48043a];return _0x7d92d2;};'use strict';var EventEmitter=require(_0x8a16('0x0'));var VoiceExtension=require(_0x8a16('0x1'))['db'][_0x8a16('0x2')];var VoiceExtensionEvents=new EventEmitter();VoiceExtensionEvents[_0x8a16('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x8a16('0x4'),'afterDestroy':_0x8a16('0x5')};function emitEvent(_0x3faf60){return function(_0xc271e5,_0x5c34f4,_0x28201b){VoiceExtensionEvents[_0x8a16('0x6')](_0x3faf60+':'+_0xc271e5['id'],_0xc271e5);VoiceExtensionEvents[_0x8a16('0x6')](_0x3faf60,_0xc271e5);_0x28201b(null);};}for(var e in events){if(events[_0x8a16('0x7')](e)){var event=events[e];VoiceExtension['hook'](e,emitEvent(event));}}module['exports']=VoiceExtensionEvents;
\ No newline at end of file
index 910ab66..9b54a0d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8eb7=['../../config/logger','bluebird','exports','define','VoiceExtension','voice_extensions','lodash'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0x8eb7,0x1e9));var _0x78eb=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x8eb7[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x78eb('0x0'));var util=require('util');var logger=require(_0x78eb('0x1'))('api');var moment=require('moment');var BPromise=require(_0x78eb('0x2'));var rp=require('request-promise');var attributes=require('./voiceExtension.attributes');module[_0x78eb('0x3')]=function(_0x579c5e,_0x423df6){return _0x579c5e[_0x78eb('0x4')](_0x78eb('0x5'),attributes,{'tableName':_0x78eb('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xae05=['VoiceExtension','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./voiceExtension.attributes','exports','define'];(function(_0x3d399b,_0x1cc981){var _0x1f9032=function(_0xfba6ed){while(--_0xfba6ed){_0x3d399b['push'](_0x3d399b['shift']());}};_0x1f9032(++_0x1cc981);}(_0xae05,0x156));var _0x5ae0=function(_0x16fe3d,_0x49dc87){_0x16fe3d=_0x16fe3d-0x0;var _0x1e354f=_0xae05[_0x16fe3d];return _0x1e354f;};'use strict';var _=require(_0x5ae0('0x0'));var util=require(_0x5ae0('0x1'));var logger=require(_0x5ae0('0x2'))(_0x5ae0('0x3'));var moment=require(_0x5ae0('0x4'));var BPromise=require(_0x5ae0('0x5'));var rp=require(_0x5ae0('0x6'));var attributes=require(_0x5ae0('0x7'));module[_0x5ae0('0x8')]=function(_0x1b567c,_0xf712b7){return _0x1b567c[_0x5ae0('0x9')](_0x5ae0('0xa'),attributes,{'tableName':'voice_extensions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index aad42bf..07d2c87 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb91=['../../config/logger','rpc','jayson/promise','client','socket.io-emitter','localhost','register','request','then','info','VoiceExtension,\x20%s,\x20%s','debug','VoiceExtension,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','catch','VoiceExtension','findAll','options','where','limit','include','model','attributes','map','GetVoiceExtension','moment','bluebird','randomstring','../../mysqldb'];(function(_0x19ad7b,_0x2ae8fa){var _0x8a0f00=function(_0x56781d){while(--_0x56781d){_0x19ad7b['push'](_0x19ad7b['shift']());}};_0x8a0f00(++_0x2ae8fa);}(_0xcb91,0x1a9));var _0x1cb9=function(_0xd9f102,_0x5a0d28){_0xd9f102=_0xd9f102-0x0;var _0x2652e4=_0xcb91[_0xd9f102];return _0x2652e4;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x1cb9('0x0'));var BPromise=require(_0x1cb9('0x1'));var rs=require(_0x1cb9('0x2'));var fs=require('fs');var db=require(_0x1cb9('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x1cb9('0x4'))(_0x1cb9('0x5'));var config=require('../../config/environment');var jayson=require(_0x1cb9('0x6'));var client=jayson[_0x1cb9('0x7')]['http']({'port':0x232a});var socket=require(_0x1cb9('0x8'))({'host':_0x1cb9('0x9'),'port':0x18eb});require('./voiceExtension.socket')[_0x1cb9('0xa')](socket);function respondWithRpcPromise(_0x12567c,_0x59d1be,_0x3ae0f1){return new BPromise(function(_0x5a0e99,_0x567139){return client[_0x1cb9('0xb')](_0x12567c,_0x3ae0f1)[_0x1cb9('0xc')](function(_0x74ce19){logger[_0x1cb9('0xd')](_0x1cb9('0xe'),_0x59d1be,'request\x20sent');logger[_0x1cb9('0xf')](_0x1cb9('0x10'),_0x59d1be,_0x1cb9('0x11'),JSON[_0x1cb9('0x12')](_0x74ce19));if(_0x74ce19[_0x1cb9('0x13')]){if(_0x74ce19['error']['code']===0x1f4){logger['error'](_0x1cb9('0xe'),_0x59d1be,_0x74ce19[_0x1cb9('0x13')][_0x1cb9('0x14')]);return _0x567139(_0x74ce19[_0x1cb9('0x13')]['message']);}logger[_0x1cb9('0x13')](_0x1cb9('0xe'),_0x59d1be,_0x74ce19[_0x1cb9('0x13')][_0x1cb9('0x14')]);return _0x5a0e99(_0x74ce19[_0x1cb9('0x13')]['message']);}else{logger['info'](_0x1cb9('0xe'),_0x59d1be,_0x1cb9('0x11'));_0x5a0e99(_0x74ce19[_0x1cb9('0x15')][_0x1cb9('0x14')]);}})[_0x1cb9('0x16')](function(_0xf22920){logger[_0x1cb9('0x13')]('VoiceExtension,\x20%s,\x20%s',_0x59d1be,_0xf22920);_0x567139(_0xf22920);});});}exports['GetVoiceExtension']=function(_0x1b2fa6){var _0x41ac41=this;return new Promise(function(_0x2b2669,_0x31481a){return db[_0x1cb9('0x17')][_0x1cb9('0x18')]({'raw':_0x1b2fa6[_0x1cb9('0x19')]?_0x1b2fa6['options']['raw']===undefined?!![]:![]:!![],'where':_0x1b2fa6[_0x1cb9('0x19')]?_0x1b2fa6['options'][_0x1cb9('0x1a')]||null:null,'attributes':_0x1b2fa6[_0x1cb9('0x19')]?_0x1b2fa6['options']['attributes']||null:null,'limit':_0x1b2fa6[_0x1cb9('0x19')]?_0x1b2fa6[_0x1cb9('0x19')][_0x1cb9('0x1b')]||null:null,'include':_0x1b2fa6[_0x1cb9('0x19')]?_0x1b2fa6[_0x1cb9('0x19')][_0x1cb9('0x1c')]?_['map'](_0x1b2fa6['options'][_0x1cb9('0x1c')],function(_0x557199){return{'model':db[_0x557199[_0x1cb9('0x1d')]],'as':_0x557199['as'],'attributes':_0x557199[_0x1cb9('0x1e')],'include':_0x557199[_0x1cb9('0x1c')]?_[_0x1cb9('0x1f')](_0x557199[_0x1cb9('0x1c')],function(_0x53f9fa){return{'model':db[_0x53f9fa[_0x1cb9('0x1d')]],'as':_0x53f9fa['as'],'attributes':_0x53f9fa[_0x1cb9('0x1e')],'include':_0x53f9fa['include']?_[_0x1cb9('0x1f')](_0x53f9fa[_0x1cb9('0x1c')],function(_0x41a9a0){return{'model':db[_0x41a9a0[_0x1cb9('0x1d')]],'as':_0x41a9a0['as'],'attributes':_0x41a9a0[_0x1cb9('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x1cb9('0xc')](function(_0x2e28fe){logger[_0x1cb9('0xd')](_0x1cb9('0x20'),_0x1b2fa6);logger[_0x1cb9('0xf')]('GetVoiceExtension',_0x1b2fa6,JSON[_0x1cb9('0x12')](_0x2e28fe));_0x2b2669(_0x2e28fe);})['catch'](function(_0x110282){logger['error'](_0x1cb9('0x20'),_0x110282[_0x1cb9('0x14')],_0x1b2fa6);_0x31481a(_0x41ac41[_0x1cb9('0x13')](0x1f4,_0x110282[_0x1cb9('0x14')]));});});};
\ No newline at end of file
+var _0x3c81=['VoiceExtension,\x20%s,\x20%s','request\x20sent','debug','VoiceExtension,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetVoiceExtension','findAll','options','raw','where','attributes','limit','include','model','map','lodash','util','bluebird','randomstring','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','./voiceExtension.socket','request','then','info'];(function(_0x2a8992,_0x5a6036){var _0x3344dd=function(_0x21ebf4){while(--_0x21ebf4){_0x2a8992['push'](_0x2a8992['shift']());}};_0x3344dd(++_0x5a6036);}(_0x3c81,0x102));var _0x13c8=function(_0x2eb38b,_0x20f57d){_0x2eb38b=_0x2eb38b-0x0;var _0x239f19=_0x3c81[_0x2eb38b];return _0x239f19;};'use strict';var _=require(_0x13c8('0x0'));var util=require(_0x13c8('0x1'));var moment=require('moment');var BPromise=require(_0x13c8('0x2'));var rs=require(_0x13c8('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require(_0x13c8('0x4'));var jayson=require(_0x13c8('0x5'));var client=jayson[_0x13c8('0x6')][_0x13c8('0x7')]({'port':0x232a});var socket=require(_0x13c8('0x8'))({'host':_0x13c8('0x9'),'port':0x18eb});require(_0x13c8('0xa'))['register'](socket);function respondWithRpcPromise(_0x17c228,_0x4905c3,_0x380aed){return new BPromise(function(_0x296463,_0x189ce6){return client[_0x13c8('0xb')](_0x17c228,_0x380aed)[_0x13c8('0xc')](function(_0x13c717){logger[_0x13c8('0xd')](_0x13c8('0xe'),_0x4905c3,_0x13c8('0xf'));logger[_0x13c8('0x10')](_0x13c8('0x11'),_0x4905c3,_0x13c8('0xf'),JSON[_0x13c8('0x12')](_0x13c717));if(_0x13c717[_0x13c8('0x13')]){if(_0x13c717['error'][_0x13c8('0x14')]===0x1f4){logger[_0x13c8('0x13')](_0x13c8('0xe'),_0x4905c3,_0x13c717[_0x13c8('0x13')]['message']);return _0x189ce6(_0x13c717[_0x13c8('0x13')]['message']);}logger['error']('VoiceExtension,\x20%s,\x20%s',_0x4905c3,_0x13c717[_0x13c8('0x13')]['message']);return _0x296463(_0x13c717[_0x13c8('0x13')][_0x13c8('0x15')]);}else{logger[_0x13c8('0xd')](_0x13c8('0xe'),_0x4905c3,'request\x20sent');_0x296463(_0x13c717[_0x13c8('0x16')][_0x13c8('0x15')]);}})[_0x13c8('0x17')](function(_0x3bc5a9){logger[_0x13c8('0x13')](_0x13c8('0xe'),_0x4905c3,_0x3bc5a9);_0x189ce6(_0x3bc5a9);});});}exports[_0x13c8('0x18')]=function(_0x251c38){var _0x34fbc0=this;return new Promise(function(_0x31d122,_0xe9386a){return db['VoiceExtension'][_0x13c8('0x19')]({'raw':_0x251c38[_0x13c8('0x1a')]?_0x251c38[_0x13c8('0x1a')][_0x13c8('0x1b')]===undefined?!![]:![]:!![],'where':_0x251c38['options']?_0x251c38[_0x13c8('0x1a')][_0x13c8('0x1c')]||null:null,'attributes':_0x251c38[_0x13c8('0x1a')]?_0x251c38[_0x13c8('0x1a')][_0x13c8('0x1d')]||null:null,'limit':_0x251c38[_0x13c8('0x1a')]?_0x251c38['options'][_0x13c8('0x1e')]||null:null,'include':_0x251c38[_0x13c8('0x1a')]?_0x251c38[_0x13c8('0x1a')][_0x13c8('0x1f')]?_['map'](_0x251c38[_0x13c8('0x1a')][_0x13c8('0x1f')],function(_0x4e392f){return{'model':db[_0x4e392f['model']],'as':_0x4e392f['as'],'attributes':_0x4e392f[_0x13c8('0x1d')],'include':_0x4e392f[_0x13c8('0x1f')]?_['map'](_0x4e392f['include'],function(_0x288c3c){return{'model':db[_0x288c3c[_0x13c8('0x20')]],'as':_0x288c3c['as'],'attributes':_0x288c3c['attributes'],'include':_0x288c3c['include']?_[_0x13c8('0x21')](_0x288c3c['include'],function(_0x545b47){return{'model':db[_0x545b47[_0x13c8('0x20')]],'as':_0x545b47['as'],'attributes':_0x545b47[_0x13c8('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x13c8('0xc')](function(_0x560ede){logger['info'](_0x13c8('0x18'),_0x251c38);logger[_0x13c8('0x10')](_0x13c8('0x18'),_0x251c38,JSON[_0x13c8('0x12')](_0x560ede));_0x31d122(_0x560ede);})[_0x13c8('0x17')](function(_0x220d40){logger[_0x13c8('0x13')]('GetVoiceExtension',_0x220d40[_0x13c8('0x15')],_0x251c38);_0xe9386a(_0x34fbc0[_0x13c8('0x13')](0x1f4,_0x220d40['message']));});});};
\ No newline at end of file
index c718e21..68f9c73 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaac6=['update','emit','removeListener','register','voiceExtension:','./voiceExtension.events','save'];(function(_0x2810e4,_0x528e9e){var _0x17d891=function(_0x174b60){while(--_0x174b60){_0x2810e4['push'](_0x2810e4['shift']());}};_0x17d891(++_0x528e9e);}(_0xaac6,0x139));var _0x6aac=function(_0x5c3c0b,_0x4ee35e){_0x5c3c0b=_0x5c3c0b-0x0;var _0x52ecd2=_0xaac6[_0x5c3c0b];return _0x52ecd2;};'use strict';var VoiceExtensionEvents=require(_0x6aac('0x0'));var events=[_0x6aac('0x1'),'remove',_0x6aac('0x2')];function createListener(_0x1ecaf5,_0x2d451b){return function(_0x53516d){_0x2d451b[_0x6aac('0x3')](_0x1ecaf5,_0x53516d);};}function removeListener(_0x1b8200,_0x5bb59d){return function(){VoiceExtensionEvents[_0x6aac('0x4')](_0x1b8200,_0x5bb59d);};}exports[_0x6aac('0x5')]=function(_0xb29061){for(var _0x539a4c=0x0,_0x11a92b=events['length'];_0x539a4c<_0x11a92b;_0x539a4c++){var _0x4a0f0b=events[_0x539a4c];var _0x18717e=createListener(_0x6aac('0x6')+_0x4a0f0b,_0xb29061);VoiceExtensionEvents['on'](_0x4a0f0b,_0x18717e);}};
\ No newline at end of file
+var _0x5201=['remove','update','emit','removeListener','register','length','voiceExtension:','./voiceExtension.events','save'];(function(_0x590b63,_0x14debb){var _0x3c9380=function(_0x58fc67){while(--_0x58fc67){_0x590b63['push'](_0x590b63['shift']());}};_0x3c9380(++_0x14debb);}(_0x5201,0x130));var _0x1520=function(_0x2b11e9,_0x24178b){_0x2b11e9=_0x2b11e9-0x0;var _0xaae61d=_0x5201[_0x2b11e9];return _0xaae61d;};'use strict';var VoiceExtensionEvents=require(_0x1520('0x0'));var events=[_0x1520('0x1'),_0x1520('0x2'),_0x1520('0x3')];function createListener(_0x59466f,_0x4e5896){return function(_0x448f6b){_0x4e5896[_0x1520('0x4')](_0x59466f,_0x448f6b);};}function removeListener(_0x3cdc0a,_0x28cd19){return function(){VoiceExtensionEvents[_0x1520('0x5')](_0x3cdc0a,_0x28cd19);};}exports[_0x1520('0x6')]=function(_0x51e25e){for(var _0x33a4c1=0x0,_0x32cb9a=events[_0x1520('0x7')];_0x33a4c1<_0x32cb9a;_0x33a4c1++){var _0x29affe=events[_0x33a4c1];var _0x2cd4db=createListener(_0x1520('0x8')+_0x29affe,_0x51e25e);VoiceExtensionEvents['on'](_0x29affe,_0x2cd4db);}};
\ No newline at end of file
index be37cba..efe68ae 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['/:id','show','create','put','update','exports','multer','util','path','../../components/auth/service','../../config/environment','./voiceMail.controller','get','isAuthenticated','index'];(function(_0xb9580,_0x441821){var _0x532515=function(_0x32ef38){while(--_0x32ef38){_0xb9580['push'](_0xb9580['shift']());}};_0x532515(++_0x441821);}(_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 express=require('express');var router=express['Router']();var auth=require(_0x0a9e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x0a9e('0x4'));var controller=require(_0x0a9e('0x5'));router[_0x0a9e('0x6')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x8')]);router['get'](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xa')]);router['get']('/:id/messages',auth[_0x0a9e('0x7')](),controller['getMessages']);router['post']('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xb')]);router[_0x0a9e('0xc')](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xd')]);router['delete']('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0x0a9e('0xe')]=router;
\ No newline at end of file
+var _0xa9e0=['/:id','show','create','put','update','exports','multer','util','path','../../components/auth/service','../../config/environment','./voiceMail.controller','get','isAuthenticated','index'];(function(_0x5b7b22,_0x5bc479){var _0x53dc9d=function(_0x5108c0){while(--_0x5108c0){_0x5b7b22['push'](_0x5b7b22['shift']());}};_0x53dc9d(++_0x5bc479);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5c3c0b,_0x4ee35e){_0x5c3c0b=_0x5c3c0b-0x0;var _0x52ecd2=_0xa9e0[_0x5c3c0b];return _0x52ecd2;};'use strict';var multer=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var path=require(_0x0a9e('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x0a9e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x0a9e('0x4'));var controller=require(_0x0a9e('0x5'));router[_0x0a9e('0x6')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x8')]);router['get'](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xa')]);router['get']('/:id/messages',auth[_0x0a9e('0x7')](),controller['getMessages']);router['post']('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xb')]);router[_0x0a9e('0xc')](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xd')]);router['delete']('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0x0a9e('0xe')]=router;
\ No newline at end of file
index 3aa07c1..553d569 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xef7d=['ENUM','yes','TINYINT(4)','INTEGER','sequelize','exports','STRING','from-voicemail','contest_mailbox','setDataValue','string','trim','central'];(function(_0x43314a,_0x24d63d){var _0x459a41=function(_0x2e4673){while(--_0x2e4673){_0x43314a['push'](_0x43314a['shift']());}};_0x459a41(++_0x24d63d);}(_0xef7d,0x170));var _0xdef7=function(_0x104ff9,_0x114d31){_0x104ff9=_0x104ff9-0x0;var _0x2ecb50=_0xef7d[_0x104ff9];return _0x2ecb50;};'use strict';var Sequelize=require(_0xdef7('0x0'));module[_0xdef7('0x1')]={'customer_id':{'type':Sequelize[_0xdef7('0x2')]},'context':{'type':Sequelize['STRING'],'defaultValue':_0xdef7('0x3'),'unique':'contest_mailbox'},'mailbox':{'type':Sequelize[_0xdef7('0x2')],'defaultValue':'','allowNull':![],'unique':_0xdef7('0x4')},'password':{'type':Sequelize[_0xdef7('0x2')]},'fullname':{'type':Sequelize['STRING']},'email':{'type':Sequelize[_0xdef7('0x2')],'validate':{'isEmail':!![]},'set':function(_0x2ec6f9){this[_0xdef7('0x5')]('email',typeof _0x2ec6f9===_0xdef7('0x6')&&_0x2ec6f9[_0xdef7('0x7')]()?_0x2ec6f9['trim']():null);}},'pager':{'type':Sequelize['STRING']},'tz':{'type':Sequelize[_0xdef7('0x2')],'defaultValue':_0xdef7('0x8')},'attach':{'type':Sequelize[_0xdef7('0x9')](_0xdef7('0xa'),'no'),'defaultValue':_0xdef7('0xa'),'allowNull':![]},'saycid':{'type':Sequelize[_0xdef7('0x9')]('yes','no'),'defaultValue':_0xdef7('0xa'),'allowNull':![]},'dialout':{'type':Sequelize[_0xdef7('0x2')]},'callback':{'type':Sequelize['STRING']},'review':{'type':Sequelize[_0xdef7('0x9')](_0xdef7('0xa'),'no'),'defaultValue':'no','allowNull':![]},'operator':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no','allowNull':![]},'envelope':{'type':Sequelize[_0xdef7('0x9')]('yes','no'),'defaultValue':'no','allowNull':![]},'sayduration':{'type':Sequelize['ENUM'](_0xdef7('0xa'),'no'),'defaultValue':'no','allowNull':![]},'saydurationm':{'type':_0xdef7('0xb'),'defaultValue':0x1,'allowNull':![]},'sendvoicemail':{'type':Sequelize[_0xdef7('0x9')](_0xdef7('0xa'),'no'),'defaultValue':'no','allowNull':![]},'delete':{'type':Sequelize[_0xdef7('0x9')](_0xdef7('0xa'),'no'),'defaultValue':'no','allowNull':![]},'nextaftercmd':{'type':Sequelize[_0xdef7('0x9')]('yes','no'),'defaultValue':_0xdef7('0xa'),'allowNull':![]},'forcename':{'type':Sequelize['ENUM'](_0xdef7('0xa'),'no'),'defaultValue':'no','allowNull':![]},'forcegreetings':{'type':Sequelize['ENUM'](_0xdef7('0xa'),'no'),'defaultValue':'no','allowNull':![]},'hidefromdir':{'type':Sequelize[_0xdef7('0x9')](_0xdef7('0xa'),'no'),'defaultValue':'yes','allowNull':![]},'stamp':{'type':'TIMESTAMP'},'emailsubject':{'type':Sequelize[_0xdef7('0x2')]},'emailbody':{'type':Sequelize[_0xdef7('0x2')]},'name':{'type':Sequelize[_0xdef7('0x2')]},'maxsecs':{'type':Sequelize[_0xdef7('0xc')](0xff),'defaultValue':0xb4,'allowNull':![]},'maxmsg':{'type':Sequelize['INTEGER'](0xff),'defaultValue':0x64,'allowNull':![]}};
\ No newline at end of file
+var _0x6e64=['string','trim','central','yes','ENUM','TINYINT(4)','TIMESTAMP','INTEGER','sequelize','exports','STRING','contest_mailbox'];(function(_0x4f3242,_0x391954){var _0x49844f=function(_0x5ee033){while(--_0x5ee033){_0x4f3242['push'](_0x4f3242['shift']());}};_0x49844f(++_0x391954);}(_0x6e64,0x1dc));var _0x46e6=function(_0x1a3adb,_0x13f915){_0x1a3adb=_0x1a3adb-0x0;var _0x16d0cd=_0x6e64[_0x1a3adb];return _0x16d0cd;};'use strict';var Sequelize=require(_0x46e6('0x0'));module[_0x46e6('0x1')]={'customer_id':{'type':Sequelize[_0x46e6('0x2')]},'context':{'type':Sequelize[_0x46e6('0x2')],'defaultValue':'from-voicemail','unique':_0x46e6('0x3')},'mailbox':{'type':Sequelize['STRING'],'defaultValue':'','allowNull':![],'unique':_0x46e6('0x3')},'password':{'type':Sequelize[_0x46e6('0x2')]},'fullname':{'type':Sequelize[_0x46e6('0x2')]},'email':{'type':Sequelize[_0x46e6('0x2')],'validate':{'isEmail':!![]},'set':function(_0x2e2a74){this['setDataValue']('email',typeof _0x2e2a74===_0x46e6('0x4')&&_0x2e2a74['trim']()?_0x2e2a74[_0x46e6('0x5')]():null);}},'pager':{'type':Sequelize['STRING']},'tz':{'type':Sequelize[_0x46e6('0x2')],'defaultValue':_0x46e6('0x6')},'attach':{'type':Sequelize['ENUM'](_0x46e6('0x7'),'no'),'defaultValue':'yes','allowNull':![]},'saycid':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':_0x46e6('0x7'),'allowNull':![]},'dialout':{'type':Sequelize[_0x46e6('0x2')]},'callback':{'type':Sequelize[_0x46e6('0x2')]},'review':{'type':Sequelize[_0x46e6('0x8')](_0x46e6('0x7'),'no'),'defaultValue':'no','allowNull':![]},'operator':{'type':Sequelize[_0x46e6('0x8')](_0x46e6('0x7'),'no'),'defaultValue':'no','allowNull':![]},'envelope':{'type':Sequelize[_0x46e6('0x8')]('yes','no'),'defaultValue':'no','allowNull':![]},'sayduration':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no','allowNull':![]},'saydurationm':{'type':_0x46e6('0x9'),'defaultValue':0x1,'allowNull':![]},'sendvoicemail':{'type':Sequelize[_0x46e6('0x8')](_0x46e6('0x7'),'no'),'defaultValue':'no','allowNull':![]},'delete':{'type':Sequelize[_0x46e6('0x8')](_0x46e6('0x7'),'no'),'defaultValue':'no','allowNull':![]},'nextaftercmd':{'type':Sequelize[_0x46e6('0x8')](_0x46e6('0x7'),'no'),'defaultValue':_0x46e6('0x7'),'allowNull':![]},'forcename':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no','allowNull':![]},'forcegreetings':{'type':Sequelize[_0x46e6('0x8')]('yes','no'),'defaultValue':'no','allowNull':![]},'hidefromdir':{'type':Sequelize[_0x46e6('0x8')](_0x46e6('0x7'),'no'),'defaultValue':'yes','allowNull':![]},'stamp':{'type':_0x46e6('0xa')},'emailsubject':{'type':Sequelize[_0x46e6('0x2')]},'emailbody':{'type':Sequelize[_0x46e6('0x2')]},'name':{'type':Sequelize[_0x46e6('0x2')]},'maxsecs':{'type':Sequelize[_0x46e6('0xb')](0xff),'defaultValue':0xb4,'allowNull':![]},'maxmsg':{'type':Sequelize['INTEGER'](0xff),'defaultValue':0x64,'allowNull':![]}};
\ No newline at end of file
index 55673df..597b664 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ba1=['model','query','dateStart','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','filters','pick','dateEnd','add','day','merge','where','map','filter','options','count','includeAll','include','findAll','rows','show','params','keys','find','create','body','catch','getMessages','findOne','VoiceMailMessage','mailbox','findAndCountAll','fast-json-patch','request-promise','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','Content-Range','apply','reject','save','update','then','destroy','error','stack','index','VoiceMail','rawAttributes'];(function(_0x2e8802,_0x59ad8c){var _0x4617aa=function(_0x4380b4){while(--_0x4380b4){_0x2e8802['push'](_0x2e8802['shift']());}};_0x4617aa(++_0x59ad8c);}(_0x6ba1,0x71));var _0x16ba=function(_0xe595d4,_0x3e1dc0){_0xe595d4=_0xe595d4-0x0;var _0x3c23db=_0x6ba1[_0xe595d4];return _0x3c23db;};'use strict';var jsonpatch=require(_0x16ba('0x0'));var rp=require(_0x16ba('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x16ba('0x2'));var util=require(_0x16ba('0x3'));var path=require(_0x16ba('0x4'));var sox=require('sox');var csv=require(_0x16ba('0x5'));var ejs=require(_0x16ba('0x6'));var fs=require('fs');var _=require(_0x16ba('0x7'));var squel=require(_0x16ba('0x8'));var crypto=require(_0x16ba('0x9'));var jsforce=require(_0x16ba('0xa'));var deskjs=require(_0x16ba('0xb'));var toCsv=require(_0x16ba('0x5'));var querystring=require(_0x16ba('0xc'));var Papa=require(_0x16ba('0xd'));var qs=require(_0x16ba('0xe'));var logger=require(_0x16ba('0xf'))(_0x16ba('0x10'));var utils=require('../../config/utils');var config=require(_0x16ba('0x11'));var db=require(_0x16ba('0x12'))['db'];function respondWithStatusCode(_0x396178,_0x587685){_0x587685=_0x587685||0xcc;return function(_0xb7853b){if(_0xb7853b){return _0x396178[_0x16ba('0x13')](_0x587685);}return _0x396178[_0x16ba('0x14')](_0x587685)[_0x16ba('0x15')]();};}function respondWithResult(_0x5284b9,_0x164db4){_0x164db4=_0x164db4||0xc8;return function(_0x50516f){if(_0x50516f){return _0x5284b9[_0x16ba('0x14')](_0x164db4)[_0x16ba('0x16')](_0x50516f);}};}function respondWithFilteredResult(_0x5788d0,_0x38ada6){return function(_0x4ac9a3){if(_0x4ac9a3){var _0x251803=_0x4ac9a3['count'],_0x48fa2f=_0x38ada6[_0x16ba('0x17')],_0x344604=_0x38ada6[_0x16ba('0x17')]+_0x38ada6[_0x16ba('0x18')],_0x23d636;if(_0x344604>=_0x251803){_0x344604=_0x251803;_0x23d636=0xc8;}else{_0x23d636=0xce;}_0x5788d0[_0x16ba('0x14')](_0x23d636);return _0x5788d0['set'](_0x16ba('0x19'),_0x48fa2f+'-'+_0x344604+'/'+_0x251803)[_0x16ba('0x16')](_0x4ac9a3);}return null;};}function patchUpdates(_0x1901c4){return function(_0x174b4d){try{jsonpatch[_0x16ba('0x1a')](_0x174b4d,_0x1901c4,!![]);}catch(_0x14b3d7){return BPromise[_0x16ba('0x1b')](_0x14b3d7);}return _0x174b4d[_0x16ba('0x1c')]();};}function saveUpdates(_0x2d95a4,_0x4dbd38){return function(_0x3d8d01){if(_0x3d8d01){return _0x3d8d01[_0x16ba('0x1d')](_0x2d95a4)[_0x16ba('0x1e')](function(_0x7c3a41){return _0x7c3a41;});}return null;};}function removeEntity(_0x1372c5,_0x44ee77){return function(_0x2a579f){if(_0x2a579f){return _0x2a579f[_0x16ba('0x1f')]()[_0x16ba('0x1e')](function(){_0x1372c5['status'](0xcc)[_0x16ba('0x15')]();});}};}function handleEntityNotFound(_0x7c762a,_0x3870e9){return function(_0x592930){if(!_0x592930){_0x7c762a[_0x16ba('0x13')](0x194);}return _0x592930;};}function handleError(_0x244633,_0x437c2c){_0x437c2c=_0x437c2c||0x1f4;return function(_0x267d67){logger[_0x16ba('0x20')](_0x267d67[_0x16ba('0x21')]);if(_0x267d67['name']){delete _0x267d67['name'];}_0x244633[_0x16ba('0x14')](_0x437c2c)['send'](_0x267d67);};}exports[_0x16ba('0x22')]=function(_0x6bbecd,_0x152720){var _0x509643={},_0x365303={},_0x46ac90={'count':0x0,'rows':[]};var _0xc8da9c=db[_0x16ba('0x23')][_0x16ba('0x24')];_0x365303[_0x16ba('0x25')]=_['keys'](_0xc8da9c);var _0x21c4d9={'dateStart':_0x6bbecd[_0x16ba('0x26')][_0x16ba('0x27')],'dateEnd':_0x6bbecd[_0x16ba('0x26')]['dateEnd']};delete _0x6bbecd[_0x16ba('0x26')][_0x16ba('0x27')];delete _0x6bbecd[_0x16ba('0x26')]['dateEnd'];_0x365303[_0x16ba('0x26')]=_['keys'](_0x6bbecd[_0x16ba('0x26')]);_0x365303['filters']=_[_0x16ba('0x28')](_0x365303[_0x16ba('0x25')],_0x365303[_0x16ba('0x26')]);_0x509643['attributes']=_[_0x16ba('0x28')](_0x365303['model'],qs['fields'](_0x6bbecd[_0x16ba('0x26')][_0x16ba('0x29')]));_0x509643[_0x16ba('0x2a')]=_0x509643[_0x16ba('0x2a')][_0x16ba('0x2b')]?_0x509643[_0x16ba('0x2a')]:_0x365303[_0x16ba('0x25')];if(!_0x6bbecd[_0x16ba('0x26')][_0x16ba('0x2c')](_0x16ba('0x2d'))){_0x509643[_0x16ba('0x18')]=qs[_0x16ba('0x18')](_0x6bbecd[_0x16ba('0x26')][_0x16ba('0x18')]);_0x509643[_0x16ba('0x17')]=qs[_0x16ba('0x17')](_0x6bbecd[_0x16ba('0x26')][_0x16ba('0x17')]);}_0x509643[_0x16ba('0x2e')]=qs[_0x16ba('0x2f')](_0x6bbecd[_0x16ba('0x26')][_0x16ba('0x2f')]);_0x509643['where']=qs[_0x16ba('0x30')](_[_0x16ba('0x31')](_0x6bbecd[_0x16ba('0x26')],_0x365303['filters']));if(_0x21c4d9[_0x16ba('0x27')]){if(_0x21c4d9[_0x16ba('0x32')]){_0x21c4d9[_0x16ba('0x32')]=moment(_0x21c4d9[_0x16ba('0x32')])[_0x16ba('0x33')](0x1,'day');}else{_0x21c4d9[_0x16ba('0x32')]=moment(_0x21c4d9[_0x16ba('0x27')])[_0x16ba('0x33')](0x1,_0x16ba('0x34'));}_[_0x16ba('0x35')](_0x509643[_0x16ba('0x36')],{'createdAt':{'$gte':_0x21c4d9[_0x16ba('0x27')],'$lte':_0x21c4d9[_0x16ba('0x32')]}});}if(_0x6bbecd[_0x16ba('0x26')]['filter']){_0x509643[_0x16ba('0x36')]=_[_0x16ba('0x35')](_0x509643[_0x16ba('0x36')],{'$or':_[_0x16ba('0x37')](_0x509643['attributes'],function(_0x4dbb61){var _0x7b6ef9={};_0x7b6ef9[_0x4dbb61]={'$like':'%'+_0x6bbecd['query'][_0x16ba('0x38')]+'%'};return _0x7b6ef9;})});}_0x509643=_[_0x16ba('0x35')]({},_0x509643,_0x6bbecd[_0x16ba('0x39')]);var _0x46bfb5={'where':_0x509643[_0x16ba('0x36')]};return db[_0x16ba('0x23')][_0x16ba('0x3a')](_0x46bfb5)[_0x16ba('0x1e')](function(_0x13ab9f){_0x46ac90['count']=_0x13ab9f;if(_0x6bbecd[_0x16ba('0x26')][_0x16ba('0x3b')]){_0x509643[_0x16ba('0x3c')]=[{'all':!![]}];}return db[_0x16ba('0x23')][_0x16ba('0x3d')](_0x509643);})[_0x16ba('0x1e')](function(_0x1c64fe){_0x46ac90[_0x16ba('0x3e')]=_0x1c64fe;return _0x46ac90;})[_0x16ba('0x1e')](respondWithFilteredResult(_0x152720,_0x509643))['catch'](handleError(_0x152720,null));};exports[_0x16ba('0x3f')]=function(_0x4894e0,_0x3a1f93){var _0x3b65f9={'raw':!![],'where':{'id':_0x4894e0[_0x16ba('0x40')]['id']}},_0x35f859={};_0x35f859[_0x16ba('0x25')]=_[_0x16ba('0x41')](db[_0x16ba('0x23')][_0x16ba('0x24')]);_0x35f859[_0x16ba('0x26')]=_[_0x16ba('0x41')](_0x4894e0[_0x16ba('0x26')]);_0x35f859[_0x16ba('0x30')]=_[_0x16ba('0x28')](_0x35f859[_0x16ba('0x25')],_0x35f859[_0x16ba('0x26')]);_0x3b65f9[_0x16ba('0x2a')]=_[_0x16ba('0x28')](_0x35f859[_0x16ba('0x25')],qs['fields'](_0x4894e0[_0x16ba('0x26')]['fields']));_0x3b65f9['attributes']=_0x3b65f9['attributes'][_0x16ba('0x2b')]?_0x3b65f9[_0x16ba('0x2a')]:_0x35f859['model'];if(_0x4894e0[_0x16ba('0x26')][_0x16ba('0x3b')]){_0x3b65f9['include']=[{'all':!![]}];}_0x3b65f9=_[_0x16ba('0x35')]({},_0x3b65f9,_0x4894e0[_0x16ba('0x39')]);return db[_0x16ba('0x23')][_0x16ba('0x42')](_0x3b65f9)['then'](handleEntityNotFound(_0x3a1f93,null))[_0x16ba('0x1e')](respondWithResult(_0x3a1f93,null))['catch'](handleError(_0x3a1f93,null));};exports[_0x16ba('0x43')]=function(_0x32babb,_0x23014c){return db['VoiceMail']['create'](_0x32babb['body'],{})['then'](respondWithResult(_0x23014c,0xc9))['catch'](handleError(_0x23014c,null));};exports[_0x16ba('0x1d')]=function(_0x50968b,_0x2706ab){if(_0x50968b[_0x16ba('0x44')]['id']){delete _0x50968b['body']['id'];}return db[_0x16ba('0x23')]['find']({'where':{'id':_0x50968b[_0x16ba('0x40')]['id']}})[_0x16ba('0x1e')](handleEntityNotFound(_0x2706ab,null))['then'](saveUpdates(_0x50968b[_0x16ba('0x44')],null))['then'](respondWithResult(_0x2706ab,null))['catch'](handleError(_0x2706ab,null));};exports['destroy']=function(_0x268d26,_0x947bfd){return db[_0x16ba('0x23')][_0x16ba('0x42')]({'where':{'id':_0x268d26['params']['id']}})[_0x16ba('0x1e')](handleEntityNotFound(_0x947bfd,null))['then'](removeEntity(_0x947bfd,null))[_0x16ba('0x45')](handleError(_0x947bfd,null));};exports[_0x16ba('0x46')]=function(_0x103df0,_0x23d7d6,_0x1b68e8){return db[_0x16ba('0x23')][_0x16ba('0x47')]({'where':{'id':_0x103df0[_0x16ba('0x40')]['id']}})[_0x16ba('0x1e')](handleEntityNotFound(_0x23d7d6,null))[_0x16ba('0x1e')](function(_0x11ce1d){var _0x39d348;var _0x55222b={},_0x449045={};_0x449045[_0x16ba('0x25')]=_[_0x16ba('0x41')](db[_0x16ba('0x48')]['rawAttributes']);_0x449045[_0x16ba('0x26')]=_[_0x16ba('0x41')](_0x103df0[_0x16ba('0x26')]);_0x449045[_0x16ba('0x30')]=_[_0x16ba('0x28')](_0x449045[_0x16ba('0x25')],_0x449045['query']);_0x55222b['attributes']=_[_0x16ba('0x28')](_0x449045[_0x16ba('0x25')],qs[_0x16ba('0x29')](_0x103df0[_0x16ba('0x26')][_0x16ba('0x29')]));_0x55222b[_0x16ba('0x2a')]=_0x55222b[_0x16ba('0x2a')][_0x16ba('0x2b')]?_0x55222b[_0x16ba('0x2a')]:_0x449045[_0x16ba('0x25')];if(!_0x103df0[_0x16ba('0x26')][_0x16ba('0x2c')](_0x16ba('0x2d'))){_0x55222b[_0x16ba('0x18')]=qs[_0x16ba('0x18')](_0x103df0[_0x16ba('0x26')][_0x16ba('0x18')]);_0x55222b[_0x16ba('0x17')]=qs[_0x16ba('0x17')](_0x103df0[_0x16ba('0x26')][_0x16ba('0x17')]);}_0x55222b[_0x16ba('0x2e')]=qs['sort'](_0x103df0['query'][_0x16ba('0x2f')]);_0x55222b['where']=qs[_0x16ba('0x30')](_[_0x16ba('0x31')](_0x103df0[_0x16ba('0x26')],_0x449045[_0x16ba('0x30')]));if(_0x103df0[_0x16ba('0x26')]['filter']){_0x55222b['where']=_[_0x16ba('0x35')](_0x55222b[_0x16ba('0x36')],{'$or':_[_0x16ba('0x37')](_0x55222b[_0x16ba('0x2a')],function(_0x15a899){var _0x5ae397={};_0x5ae397[_0x15a899]={'$like':'%'+_0x103df0[_0x16ba('0x26')][_0x16ba('0x38')]+'%'};return _0x5ae397;})});}_0x55222b['where']=_[_0x16ba('0x35')](_0x55222b[_0x16ba('0x36')],{'mailboxuser':_0x11ce1d[_0x16ba('0x49')]});_0x55222b=_[_0x16ba('0x35')]({},_0x55222b,_0x103df0[_0x16ba('0x39')]);return db[_0x16ba('0x48')][_0x16ba('0x4a')](_0x55222b)[_0x16ba('0x1e')](respondWithFilteredResult(_0x23d7d6,_0x55222b));})['catch'](handleError(_0x23d7d6,null));};
\ No newline at end of file
+var _0xc92e=['dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','add','day','merge','map','VoiceMail','count','catch','params','rawAttributes','includeAll','find','create','body','getMessages','findOne','VoiceMailMessage','order','filter','mailbox','fast-json-patch','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','Content-Range','apply','reject','save','update','then','destroy','stack','name','index','model','keys'];(function(_0x40ac5e,_0x2de228){var _0x2839d6=function(_0x123d47){while(--_0x123d47){_0x40ac5e['push'](_0x40ac5e['shift']());}};_0x2839d6(++_0x2de228);}(_0xc92e,0x65));var _0xec92=function(_0x58f370,_0x3af080){_0x58f370=_0x58f370-0x0;var _0x5a3c0c=_0xc92e[_0x58f370];return _0x5a3c0c;};'use strict';var jsonpatch=require(_0xec92('0x0'));var rp=require('request-promise');var moment=require(_0xec92('0x1'));var BPromise=require(_0xec92('0x2'));var Mustache=require(_0xec92('0x3'));var util=require('util');var path=require(_0xec92('0x4'));var sox=require(_0xec92('0x5'));var csv=require(_0xec92('0x6'));var ejs=require(_0xec92('0x7'));var fs=require('fs');var _=require(_0xec92('0x8'));var squel=require(_0xec92('0x9'));var crypto=require(_0xec92('0xa'));var jsforce=require('jsforce');var deskjs=require(_0xec92('0xb'));var toCsv=require(_0xec92('0x6'));var querystring=require('querystring');var Papa=require(_0xec92('0xc'));var qs=require(_0xec92('0xd'));var logger=require(_0xec92('0xe'))(_0xec92('0xf'));var utils=require(_0xec92('0x10'));var config=require(_0xec92('0x11'));var db=require(_0xec92('0x12'))['db'];function respondWithStatusCode(_0x3843fc,_0x13d2da){_0x13d2da=_0x13d2da||0xcc;return function(_0x321996){if(_0x321996){return _0x3843fc[_0xec92('0x13')](_0x13d2da);}return _0x3843fc[_0xec92('0x14')](_0x13d2da)[_0xec92('0x15')]();};}function respondWithResult(_0x293465,_0x2f8177){_0x2f8177=_0x2f8177||0xc8;return function(_0x40ba30){if(_0x40ba30){return _0x293465[_0xec92('0x14')](_0x2f8177)[_0xec92('0x16')](_0x40ba30);}};}function respondWithFilteredResult(_0x12184a,_0x2cd17c){return function(_0x425ed7){if(_0x425ed7){var _0xd09175=_0x425ed7['count'],_0x1fab94=_0x2cd17c[_0xec92('0x17')],_0x4056f3=_0x2cd17c[_0xec92('0x17')]+_0x2cd17c[_0xec92('0x18')],_0x18e84e;if(_0x4056f3>=_0xd09175){_0x4056f3=_0xd09175;_0x18e84e=0xc8;}else{_0x18e84e=0xce;}_0x12184a[_0xec92('0x14')](_0x18e84e);return _0x12184a['set'](_0xec92('0x19'),_0x1fab94+'-'+_0x4056f3+'/'+_0xd09175)[_0xec92('0x16')](_0x425ed7);}return null;};}function patchUpdates(_0xe36f81){return function(_0x4e3c58){try{jsonpatch[_0xec92('0x1a')](_0x4e3c58,_0xe36f81,!![]);}catch(_0x2e00d6){return BPromise[_0xec92('0x1b')](_0x2e00d6);}return _0x4e3c58[_0xec92('0x1c')]();};}function saveUpdates(_0x327256,_0x393487){return function(_0x56a581){if(_0x56a581){return _0x56a581[_0xec92('0x1d')](_0x327256)[_0xec92('0x1e')](function(_0x56240f){return _0x56240f;});}return null;};}function removeEntity(_0x285272,_0x220b12){return function(_0x1a03d5){if(_0x1a03d5){return _0x1a03d5[_0xec92('0x1f')]()[_0xec92('0x1e')](function(){_0x285272[_0xec92('0x14')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4007a8,_0x7d7218){return function(_0x5a9e34){if(!_0x5a9e34){_0x4007a8[_0xec92('0x13')](0x194);}return _0x5a9e34;};}function handleError(_0x49e577,_0x5736a4){_0x5736a4=_0x5736a4||0x1f4;return function(_0x2226c8){logger['error'](_0x2226c8[_0xec92('0x20')]);if(_0x2226c8[_0xec92('0x21')]){delete _0x2226c8[_0xec92('0x21')];}_0x49e577[_0xec92('0x14')](_0x5736a4)['send'](_0x2226c8);};}exports[_0xec92('0x22')]=function(_0x1f75ac,_0x1e69be){var _0x46d4ad={},_0x5132bf={},_0x441041={'count':0x0,'rows':[]};var _0x1e805f=db['VoiceMail']['rawAttributes'];_0x5132bf[_0xec92('0x23')]=_[_0xec92('0x24')](_0x1e805f);var _0x2c9085={'dateStart':_0x1f75ac['query'][_0xec92('0x25')],'dateEnd':_0x1f75ac[_0xec92('0x26')][_0xec92('0x27')]};delete _0x1f75ac[_0xec92('0x26')][_0xec92('0x25')];delete _0x1f75ac[_0xec92('0x26')]['dateEnd'];_0x5132bf[_0xec92('0x26')]=_[_0xec92('0x24')](_0x1f75ac['query']);_0x5132bf[_0xec92('0x28')]=_[_0xec92('0x29')](_0x5132bf[_0xec92('0x23')],_0x5132bf[_0xec92('0x26')]);_0x46d4ad[_0xec92('0x2a')]=_['intersection'](_0x5132bf[_0xec92('0x23')],qs[_0xec92('0x2b')](_0x1f75ac[_0xec92('0x26')][_0xec92('0x2b')]));_0x46d4ad[_0xec92('0x2a')]=_0x46d4ad[_0xec92('0x2a')][_0xec92('0x2c')]?_0x46d4ad[_0xec92('0x2a')]:_0x5132bf['model'];if(!_0x1f75ac[_0xec92('0x26')][_0xec92('0x2d')](_0xec92('0x2e'))){_0x46d4ad['limit']=qs[_0xec92('0x18')](_0x1f75ac[_0xec92('0x26')][_0xec92('0x18')]);_0x46d4ad[_0xec92('0x17')]=qs[_0xec92('0x17')](_0x1f75ac[_0xec92('0x26')][_0xec92('0x17')]);}_0x46d4ad['order']=qs[_0xec92('0x2f')](_0x1f75ac['query'][_0xec92('0x2f')]);_0x46d4ad[_0xec92('0x30')]=qs['filters'](_[_0xec92('0x31')](_0x1f75ac[_0xec92('0x26')],_0x5132bf[_0xec92('0x28')]));if(_0x2c9085['dateStart']){if(_0x2c9085[_0xec92('0x27')]){_0x2c9085['dateEnd']=moment(_0x2c9085[_0xec92('0x27')])[_0xec92('0x32')](0x1,_0xec92('0x33'));}else{_0x2c9085[_0xec92('0x27')]=moment(_0x2c9085['dateStart'])['add'](0x1,_0xec92('0x33'));}_[_0xec92('0x34')](_0x46d4ad[_0xec92('0x30')],{'createdAt':{'$gte':_0x2c9085['dateStart'],'$lte':_0x2c9085[_0xec92('0x27')]}});}if(_0x1f75ac[_0xec92('0x26')]['filter']){_0x46d4ad[_0xec92('0x30')]=_[_0xec92('0x34')](_0x46d4ad[_0xec92('0x30')],{'$or':_[_0xec92('0x35')](_0x46d4ad[_0xec92('0x2a')],function(_0x34c626){var _0x1153cd={};_0x1153cd[_0x34c626]={'$like':'%'+_0x1f75ac[_0xec92('0x26')]['filter']+'%'};return _0x1153cd;})});}_0x46d4ad=_[_0xec92('0x34')]({},_0x46d4ad,_0x1f75ac['options']);var _0x142224={'where':_0x46d4ad[_0xec92('0x30')]};return db[_0xec92('0x36')][_0xec92('0x37')](_0x142224)['then'](function(_0x2142c4){_0x441041[_0xec92('0x37')]=_0x2142c4;if(_0x1f75ac[_0xec92('0x26')]['includeAll']){_0x46d4ad['include']=[{'all':!![]}];}return db['VoiceMail']['findAll'](_0x46d4ad);})[_0xec92('0x1e')](function(_0x3a877a){_0x441041['rows']=_0x3a877a;return _0x441041;})[_0xec92('0x1e')](respondWithFilteredResult(_0x1e69be,_0x46d4ad))[_0xec92('0x38')](handleError(_0x1e69be,null));};exports['show']=function(_0x47c054,_0x5457e2){var _0x14b3d2={'raw':!![],'where':{'id':_0x47c054[_0xec92('0x39')]['id']}},_0x7ba785={};_0x7ba785[_0xec92('0x23')]=_[_0xec92('0x24')](db[_0xec92('0x36')][_0xec92('0x3a')]);_0x7ba785['query']=_[_0xec92('0x24')](_0x47c054[_0xec92('0x26')]);_0x7ba785[_0xec92('0x28')]=_[_0xec92('0x29')](_0x7ba785[_0xec92('0x23')],_0x7ba785[_0xec92('0x26')]);_0x14b3d2[_0xec92('0x2a')]=_[_0xec92('0x29')](_0x7ba785['model'],qs[_0xec92('0x2b')](_0x47c054[_0xec92('0x26')][_0xec92('0x2b')]));_0x14b3d2['attributes']=_0x14b3d2[_0xec92('0x2a')]['length']?_0x14b3d2[_0xec92('0x2a')]:_0x7ba785[_0xec92('0x23')];if(_0x47c054[_0xec92('0x26')][_0xec92('0x3b')]){_0x14b3d2['include']=[{'all':!![]}];}_0x14b3d2=_['merge']({},_0x14b3d2,_0x47c054['options']);return db[_0xec92('0x36')][_0xec92('0x3c')](_0x14b3d2)[_0xec92('0x1e')](handleEntityNotFound(_0x5457e2,null))[_0xec92('0x1e')](respondWithResult(_0x5457e2,null))[_0xec92('0x38')](handleError(_0x5457e2,null));};exports[_0xec92('0x3d')]=function(_0x12ce8a,_0x35623d){return db[_0xec92('0x36')][_0xec92('0x3d')](_0x12ce8a[_0xec92('0x3e')],{})['then'](respondWithResult(_0x35623d,0xc9))[_0xec92('0x38')](handleError(_0x35623d,null));};exports[_0xec92('0x1d')]=function(_0x5c6ab0,_0x213826){if(_0x5c6ab0[_0xec92('0x3e')]['id']){delete _0x5c6ab0['body']['id'];}return db[_0xec92('0x36')][_0xec92('0x3c')]({'where':{'id':_0x5c6ab0[_0xec92('0x39')]['id']}})[_0xec92('0x1e')](handleEntityNotFound(_0x213826,null))[_0xec92('0x1e')](saveUpdates(_0x5c6ab0[_0xec92('0x3e')],null))[_0xec92('0x1e')](respondWithResult(_0x213826,null))[_0xec92('0x38')](handleError(_0x213826,null));};exports[_0xec92('0x1f')]=function(_0x152313,_0x13412d){return db['VoiceMail'][_0xec92('0x3c')]({'where':{'id':_0x152313['params']['id']}})[_0xec92('0x1e')](handleEntityNotFound(_0x13412d,null))[_0xec92('0x1e')](removeEntity(_0x13412d,null))[_0xec92('0x38')](handleError(_0x13412d,null));};exports[_0xec92('0x3f')]=function(_0x5a6fea,_0x3c09f9,_0x28dcc3){return db['VoiceMail'][_0xec92('0x40')]({'where':{'id':_0x5a6fea['params']['id']}})[_0xec92('0x1e')](handleEntityNotFound(_0x3c09f9,null))[_0xec92('0x1e')](function(_0x268687){var _0x7ede40;var _0x5214ac={},_0x45d6e6={};_0x45d6e6[_0xec92('0x23')]=_[_0xec92('0x24')](db[_0xec92('0x41')][_0xec92('0x3a')]);_0x45d6e6[_0xec92('0x26')]=_[_0xec92('0x24')](_0x5a6fea[_0xec92('0x26')]);_0x45d6e6[_0xec92('0x28')]=_[_0xec92('0x29')](_0x45d6e6[_0xec92('0x23')],_0x45d6e6[_0xec92('0x26')]);_0x5214ac[_0xec92('0x2a')]=_[_0xec92('0x29')](_0x45d6e6[_0xec92('0x23')],qs[_0xec92('0x2b')](_0x5a6fea[_0xec92('0x26')]['fields']));_0x5214ac[_0xec92('0x2a')]=_0x5214ac[_0xec92('0x2a')]['length']?_0x5214ac[_0xec92('0x2a')]:_0x45d6e6[_0xec92('0x23')];if(!_0x5a6fea[_0xec92('0x26')][_0xec92('0x2d')](_0xec92('0x2e'))){_0x5214ac[_0xec92('0x18')]=qs['limit'](_0x5a6fea[_0xec92('0x26')][_0xec92('0x18')]);_0x5214ac[_0xec92('0x17')]=qs['offset'](_0x5a6fea['query'][_0xec92('0x17')]);}_0x5214ac[_0xec92('0x42')]=qs[_0xec92('0x2f')](_0x5a6fea[_0xec92('0x26')][_0xec92('0x2f')]);_0x5214ac['where']=qs['filters'](_[_0xec92('0x31')](_0x5a6fea[_0xec92('0x26')],_0x45d6e6[_0xec92('0x28')]));if(_0x5a6fea[_0xec92('0x26')][_0xec92('0x43')]){_0x5214ac[_0xec92('0x30')]=_['merge'](_0x5214ac['where'],{'$or':_[_0xec92('0x35')](_0x5214ac[_0xec92('0x2a')],function(_0x574585){var _0x1230ab={};_0x1230ab[_0x574585]={'$like':'%'+_0x5a6fea[_0xec92('0x26')][_0xec92('0x43')]+'%'};return _0x1230ab;})});}_0x5214ac[_0xec92('0x30')]=_[_0xec92('0x34')](_0x5214ac[_0xec92('0x30')],{'mailboxuser':_0x268687[_0xec92('0x44')]});_0x5214ac=_['merge']({},_0x5214ac,_0x5a6fea['options']);return db['VoiceMailMessage']['findAndCountAll'](_0x5214ac)['then'](respondWithFilteredResult(_0x3c09f9,_0x5214ac));})[_0xec92('0x38')](handleError(_0x3c09f9,null));};
\ No newline at end of file
index d7a8c59..52269f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbeda=['define','voice_voicemail','context','lodash','util','api','moment','request-promise','exports'];(function(_0x1cbcf1,_0x3f9fd9){var _0x3a06f0=function(_0x5425d4){while(--_0x5425d4){_0x1cbcf1['push'](_0x1cbcf1['shift']());}};_0x3a06f0(++_0x3f9fd9);}(_0xbeda,0x1b3));var _0xabed=function(_0x32b122,_0x1ad490){_0x32b122=_0x32b122-0x0;var _0x4ad25a=_0xbeda[_0x32b122];return _0x4ad25a;};'use strict';var _=require(_0xabed('0x0'));var util=require(_0xabed('0x1'));var logger=require('../../config/logger')(_0xabed('0x2'));var moment=require(_0xabed('0x3'));var BPromise=require('bluebird');var rp=require(_0xabed('0x4'));var attributes=require('./voiceMail.attributes');module[_0xabed('0x5')]=function(_0x1e0a02,_0x4f209f){return _0x1e0a02[_0xabed('0x6')]('VoiceMail',attributes,{'tableName':_0xabed('0x7'),'paranoid':![],'indexes':[{'name':'mailbox_context','fields':['mailbox',_0xabed('0x8')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x3437=['request-promise','./voiceMail.attributes','exports','define','VoiceMail','voice_voicemail','mailbox_context','mailbox','context','lodash','util','api','moment','bluebird'];(function(_0x366ba3,_0x1d65a4){var _0x110b52=function(_0x591d41){while(--_0x591d41){_0x366ba3['push'](_0x366ba3['shift']());}};_0x110b52(++_0x1d65a4);}(_0x3437,0x159));var _0x7343=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0x3437[_0x432682];return _0x463d05;};'use strict';var _=require(_0x7343('0x0'));var util=require(_0x7343('0x1'));var logger=require('../../config/logger')(_0x7343('0x2'));var moment=require(_0x7343('0x3'));var BPromise=require(_0x7343('0x4'));var rp=require(_0x7343('0x5'));var attributes=require(_0x7343('0x6'));module[_0x7343('0x7')]=function(_0x5d4719,_0x1edd5c){return _0x5d4719[_0x7343('0x8')](_0x7343('0x9'),attributes,{'tableName':_0x7343('0xa'),'paranoid':![],'indexes':[{'name':_0x7343('0xb'),'fields':[_0x7343('0xc'),_0x7343('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
index 0bb2850..138dd93 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x570d=['catch','lodash','bluebird','randomstring','../../mysqldb','../../config/utils','jayson/promise','http','request','then','info','VoiceMail,\x20%s,\x20%s','request\x20sent','debug','VoiceMail,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result'];(function(_0x49c1b0,_0x35b033){var _0x5be831=function(_0x1ae2a4){while(--_0x1ae2a4){_0x49c1b0['push'](_0x49c1b0['shift']());}};_0x5be831(++_0x35b033);}(_0x570d,0x105));var _0xd570=function(_0x315191,_0x25ad92){_0x315191=_0x315191-0x0;var _0x321f3e=_0x570d[_0x315191];return _0x321f3e;};'use strict';var _=require(_0xd570('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xd570('0x1'));var rs=require(_0xd570('0x2'));var fs=require('fs');var db=require(_0xd570('0x3'))['db'];var utils=require(_0xd570('0x4'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0xd570('0x5'));var client=jayson['client'][_0xd570('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x4d0404,_0x395d2c,_0x47b424){return new BPromise(function(_0x4fba8a,_0x10137d){return client[_0xd570('0x7')](_0x4d0404,_0x47b424)[_0xd570('0x8')](function(_0x1cfdeb){logger[_0xd570('0x9')](_0xd570('0xa'),_0x395d2c,_0xd570('0xb'));logger[_0xd570('0xc')](_0xd570('0xd'),_0x395d2c,'request\x20sent',JSON[_0xd570('0xe')](_0x1cfdeb));if(_0x1cfdeb[_0xd570('0xf')]){if(_0x1cfdeb[_0xd570('0xf')][_0xd570('0x10')]===0x1f4){logger[_0xd570('0xf')](_0xd570('0xa'),_0x395d2c,_0x1cfdeb[_0xd570('0xf')][_0xd570('0x11')]);return _0x10137d(_0x1cfdeb['error'][_0xd570('0x11')]);}logger[_0xd570('0xf')](_0xd570('0xa'),_0x395d2c,_0x1cfdeb[_0xd570('0xf')][_0xd570('0x11')]);return _0x4fba8a(_0x1cfdeb['error'][_0xd570('0x11')]);}else{logger[_0xd570('0x9')](_0xd570('0xa'),_0x395d2c,_0xd570('0xb'));_0x4fba8a(_0x1cfdeb[_0xd570('0x12')][_0xd570('0x11')]);}})[_0xd570('0x13')](function(_0xe3e8b){logger['error']('VoiceMail,\x20%s,\x20%s',_0x395d2c,_0xe3e8b);_0x10137d(_0xe3e8b);});});}
\ No newline at end of file
+var _0x9285=['util','moment','bluebird','randomstring','../../config/logger','rpc','../../config/environment','jayson/promise','request','then','info','VoiceMail,\x20%s,\x20%s','debug','VoiceMail,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','code','error','message','result','catch','lodash'];(function(_0x25e61e,_0x2c96fb){var _0x20ff12=function(_0x18e14b){while(--_0x18e14b){_0x25e61e['push'](_0x25e61e['shift']());}};_0x20ff12(++_0x2c96fb);}(_0x9285,0xc5));var _0x5928=function(_0x5d422c,_0x337bab){_0x5d422c=_0x5d422c-0x0;var _0xfc8ead=_0x9285[_0x5d422c];return _0xfc8ead;};'use strict';var _=require(_0x5928('0x0'));var util=require(_0x5928('0x1'));var moment=require(_0x5928('0x2'));var BPromise=require(_0x5928('0x3'));var rs=require(_0x5928('0x4'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x5928('0x5'))(_0x5928('0x6'));var config=require(_0x5928('0x7'));var jayson=require(_0x5928('0x8'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x466c5d,_0xe5ea41,_0x7b65d8){return new BPromise(function(_0x40cbfd,_0x31d312){return client[_0x5928('0x9')](_0x466c5d,_0x7b65d8)[_0x5928('0xa')](function(_0x11da56){logger[_0x5928('0xb')](_0x5928('0xc'),_0xe5ea41,'request\x20sent');logger[_0x5928('0xd')](_0x5928('0xe'),_0xe5ea41,_0x5928('0xf'),JSON[_0x5928('0x10')](_0x11da56));if(_0x11da56['error']){if(_0x11da56['error'][_0x5928('0x11')]===0x1f4){logger['error'](_0x5928('0xc'),_0xe5ea41,_0x11da56[_0x5928('0x12')][_0x5928('0x13')]);return _0x31d312(_0x11da56[_0x5928('0x12')][_0x5928('0x13')]);}logger[_0x5928('0x12')]('VoiceMail,\x20%s,\x20%s',_0xe5ea41,_0x11da56[_0x5928('0x12')]['message']);return _0x40cbfd(_0x11da56[_0x5928('0x12')][_0x5928('0x13')]);}else{logger['info'](_0x5928('0xc'),_0xe5ea41,_0x5928('0xf'));_0x40cbfd(_0x11da56[_0x5928('0x14')][_0x5928('0x13')]);}})[_0x5928('0x15')](function(_0x1eae37){logger['error'](_0x5928('0xc'),_0xe5ea41,_0x1eae37);_0x31d312(_0x1eae37);});});}
\ No newline at end of file
index bbd1514..ee2665e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6ca=['./voiceMailMessage.controller','isAuthenticated','index','/:id','show','get','download','post','create','update','delete','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x5d80de,_0x2cf15d){var _0x1c7556=function(_0x5bd806){while(--_0x5bd806){_0x5d80de['push'](_0x5d80de['shift']());}};_0x1c7556(++_0x2cf15d);}(_0xa6ca,0x84));var _0xaa6c=function(_0x2dea24,_0x2fc021){_0x2dea24=_0x2dea24-0x0;var _0x309d58=_0xa6ca[_0x2dea24];return _0x309d58;};'use strict';var multer=require(_0xaa6c('0x0'));var util=require(_0xaa6c('0x1'));var path=require(_0xaa6c('0x2'));var express=require(_0xaa6c('0x3'));var router=express[_0xaa6c('0x4')]();var auth=require(_0xaa6c('0x5'));var interaction=require(_0xaa6c('0x6'));var config=require(_0xaa6c('0x7'));var controller=require(_0xaa6c('0x8'));router['get']('/',auth[_0xaa6c('0x9')](),controller[_0xaa6c('0xa')]);router['get'](_0xaa6c('0xb'),auth['isAuthenticated'](),controller[_0xaa6c('0xc')]);router[_0xaa6c('0xd')]('/:id/download',auth[_0xaa6c('0x9')](),controller[_0xaa6c('0xe')]);router[_0xaa6c('0xf')]('/',auth[_0xaa6c('0x9')](),controller[_0xaa6c('0x10')]);router['put'](_0xaa6c('0xb'),auth['isAuthenticated'](),controller[_0xaa6c('0x11')]);router[_0xaa6c('0x12')](_0xaa6c('0xb'),auth[_0xaa6c('0x9')](),controller['destroy']);module[_0xaa6c('0x13')]=router;
\ No newline at end of file
+var _0xa020=['download','create','put','update','delete','destroy','exports','multer','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceMailMessage.controller','get','isAuthenticated','/:id','show'];(function(_0x382b2a,_0x3d63b7){var _0x38950=function(_0x3d99db){while(--_0x3d99db){_0x382b2a['push'](_0x382b2a['shift']());}};_0x38950(++_0x3d63b7);}(_0xa020,0xa7));var _0x0a02=function(_0x143c25,_0x55fda6){_0x143c25=_0x143c25-0x0;var _0x2a7771=_0xa020[_0x143c25];return _0x2a7771;};'use strict';var multer=require(_0x0a02('0x0'));var util=require('util');var path=require('path');var express=require('express');var router=express['Router']();var auth=require(_0x0a02('0x1'));var interaction=require(_0x0a02('0x2'));var config=require(_0x0a02('0x3'));var controller=require(_0x0a02('0x4'));router[_0x0a02('0x5')]('/',auth[_0x0a02('0x6')](),controller['index']);router[_0x0a02('0x5')](_0x0a02('0x7'),auth['isAuthenticated'](),controller[_0x0a02('0x8')]);router[_0x0a02('0x5')]('/:id/download',auth['isAuthenticated'](),controller[_0x0a02('0x9')]);router['post']('/',auth[_0x0a02('0x6')](),controller[_0x0a02('0xa')]);router[_0x0a02('0xb')](_0x0a02('0x7'),auth[_0x0a02('0x6')](),controller[_0x0a02('0xc')]);router[_0x0a02('0xd')](_0x0a02('0x7'),auth[_0x0a02('0x6')](),controller[_0x0a02('0xe')]);module[_0x0a02('0xf')]=router;
\ No newline at end of file
index e13b01d..c60ee3a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c58=['TIMESTAMP','exports','getDataValue','INTEGER','STRING','BLOB','long'];(function(_0x31e9b4,_0x4473f6){var _0x1ada54=function(_0x46f138){while(--_0x46f138){_0x31e9b4['push'](_0x31e9b4['shift']());}};_0x1ada54(++_0x4473f6);}(_0x1c58,0x1e4));var _0x81c5=function(_0x43e96b,_0x361a7b){_0x43e96b=_0x43e96b-0x0;var _0x12ad0b=_0x1c58[_0x43e96b];return _0x12ad0b;};'use strict';var Sequelize=require('sequelize');module[_0x81c5('0x0')]={'name':{'type':Sequelize['VIRTUAL'],'get':function(_0x3f5b18){return this[_0x81c5('0x1')]('id');}},'msgnum':{'type':Sequelize[_0x81c5('0x2')](0xb),'defaultValue':0x0,'allowNull':![]},'dir':{'type':Sequelize[_0x81c5('0x3')],'defaultValue':''},'context':{'type':Sequelize[_0x81c5('0x3')],'defaultValue':''},'macrocontext':{'type':Sequelize[_0x81c5('0x3')],'defaultValue':''},'callerid':{'type':Sequelize[_0x81c5('0x3')],'defaultValue':''},'origtime':{'type':Sequelize[_0x81c5('0x3')],'defaultValue':''},'duration':{'type':Sequelize[_0x81c5('0x3')],'defaultValue':''},'mailboxuser':{'type':Sequelize['STRING'],'defaultValue':''},'mailboxcontext':{'type':Sequelize['STRING'],'defaultValue':''},'recording':{'type':Sequelize[_0x81c5('0x4')](_0x81c5('0x5')),'defaultValue':null},'flag':{'type':Sequelize[_0x81c5('0x3')],'defaultValue':''},'msg_id':{'type':Sequelize[_0x81c5('0x3')],'defaultValue':''},'stamp':{'type':_0x81c5('0x6'),'allowNull':![]}};
\ No newline at end of file
+var _0x9834=['getDataValue','INTEGER','STRING','BLOB','sequelize','exports'];(function(_0x30ae5c,_0x1d8805){var _0x4d8b36=function(_0x41b837){while(--_0x41b837){_0x30ae5c['push'](_0x30ae5c['shift']());}};_0x4d8b36(++_0x1d8805);}(_0x9834,0x18a));var _0x4983=function(_0x163b58,_0x5efe7b){_0x163b58=_0x163b58-0x0;var _0x9fd29b=_0x9834[_0x163b58];return _0x9fd29b;};'use strict';var Sequelize=require(_0x4983('0x0'));module[_0x4983('0x1')]={'name':{'type':Sequelize['VIRTUAL'],'get':function(_0x1ac92e){return this[_0x4983('0x2')]('id');}},'msgnum':{'type':Sequelize[_0x4983('0x3')](0xb),'defaultValue':0x0,'allowNull':![]},'dir':{'type':Sequelize['STRING'],'defaultValue':''},'context':{'type':Sequelize['STRING'],'defaultValue':''},'macrocontext':{'type':Sequelize[_0x4983('0x4')],'defaultValue':''},'callerid':{'type':Sequelize[_0x4983('0x4')],'defaultValue':''},'origtime':{'type':Sequelize[_0x4983('0x4')],'defaultValue':''},'duration':{'type':Sequelize[_0x4983('0x4')],'defaultValue':''},'mailboxuser':{'type':Sequelize[_0x4983('0x4')],'defaultValue':''},'mailboxcontext':{'type':Sequelize[_0x4983('0x4')],'defaultValue':''},'recording':{'type':Sequelize[_0x4983('0x5')]('long'),'defaultValue':null},'flag':{'type':Sequelize[_0x4983('0x4')],'defaultValue':''},'msg_id':{'type':Sequelize[_0x4983('0x4')],'defaultValue':''},'stamp':{'type':'TIMESTAMP','allowNull':![]}};
\ No newline at end of file
index c0f325d..1e7ce8c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6620=['querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','update','then','destroy','stack','name','index','VoiceMailMessage','model','differenceBy','keys','query','dateStart','dateEnd','intersection','attributes','fields','length','nolimit','limit','sort','where','filters','pick','add','day','merge','map','filter','options','includeAll','include','rows','catch','show','params','rawAttributes','find','create','body','download','recording','Sequelize','VoiceMailMessage\x20not\x20found','msg_id','Content-Disposition','attachment;\x20filename=\x22','.wav\x22','send','request-promise','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js'];(function(_0x4664db,_0x1de672){var _0x5615b4=function(_0x54fb5a){while(--_0x54fb5a){_0x4664db['push'](_0x4664db['shift']());}};_0x5615b4(++_0x1de672);}(_0x6620,0x8f));var _0x0662=function(_0x15ed2e,_0x345d58){_0x15ed2e=_0x15ed2e-0x0;var _0x340f17=_0x6620[_0x15ed2e];return _0x340f17;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x0662('0x0'));var moment=require('moment');var BPromise=require(_0x0662('0x1'));var Mustache=require('mustache');var util=require('util');var path=require(_0x0662('0x2'));var sox=require(_0x0662('0x3'));var csv=require(_0x0662('0x4'));var ejs=require(_0x0662('0x5'));var fs=require('fs');var _=require(_0x0662('0x6'));var squel=require(_0x0662('0x7'));var crypto=require(_0x0662('0x8'));var jsforce=require(_0x0662('0x9'));var deskjs=require(_0x0662('0xa'));var toCsv=require(_0x0662('0x4'));var querystring=require(_0x0662('0xb'));var Papa=require(_0x0662('0xc'));var qs=require(_0x0662('0xd'));var logger=require(_0x0662('0xe'))(_0x0662('0xf'));var utils=require(_0x0662('0x10'));var config=require(_0x0662('0x11'));var db=require(_0x0662('0x12'))['db'];function respondWithStatusCode(_0xec5938,_0x3f004a){_0x3f004a=_0x3f004a||0xcc;return function(_0x183dfe){if(_0x183dfe){return _0xec5938[_0x0662('0x13')](_0x3f004a);}return _0xec5938[_0x0662('0x14')](_0x3f004a)[_0x0662('0x15')]();};}function respondWithResult(_0x58d509,_0x4ccf19){_0x4ccf19=_0x4ccf19||0xc8;return function(_0xee547e){if(_0xee547e){return _0x58d509['status'](_0x4ccf19)[_0x0662('0x16')](_0xee547e);}};}function respondWithFilteredResult(_0x1f5105,_0x5e5c70){return function(_0x511a71){if(_0x511a71){var _0x3e439c=_0x511a71[_0x0662('0x17')],_0x14401c=_0x5e5c70[_0x0662('0x18')],_0xd0ed64=_0x5e5c70[_0x0662('0x18')]+_0x5e5c70['limit'],_0x35b949;if(_0xd0ed64>=_0x3e439c){_0xd0ed64=_0x3e439c;_0x35b949=0xc8;}else{_0x35b949=0xce;}_0x1f5105[_0x0662('0x14')](_0x35b949);return _0x1f5105[_0x0662('0x19')](_0x0662('0x1a'),_0x14401c+'-'+_0xd0ed64+'/'+_0x3e439c)['json'](_0x511a71);}return null;};}function patchUpdates(_0x2fb4a8){return function(_0x5d9f8c){try{jsonpatch[_0x0662('0x1b')](_0x5d9f8c,_0x2fb4a8,!![]);}catch(_0x467e94){return BPromise[_0x0662('0x1c')](_0x467e94);}return _0x5d9f8c['save']();};}function saveUpdates(_0x5ea340,_0x1f1d02){return function(_0x27d33d){if(_0x27d33d){return _0x27d33d[_0x0662('0x1d')](_0x5ea340)[_0x0662('0x1e')](function(_0x257174){return _0x257174;});}return null;};}function removeEntity(_0x5cea26,_0x2315db){return function(_0x2dd5d6){if(_0x2dd5d6){return _0x2dd5d6[_0x0662('0x1f')]()[_0x0662('0x1e')](function(){_0x5cea26[_0x0662('0x14')](0xcc)[_0x0662('0x15')]();});}};}function handleEntityNotFound(_0x386031,_0x23862d){return function(_0x420b75){if(!_0x420b75){_0x386031[_0x0662('0x13')](0x194);}return _0x420b75;};}function handleError(_0x3373d4,_0x265825){_0x265825=_0x265825||0x1f4;return function(_0x17a49b){logger['error'](_0x17a49b[_0x0662('0x20')]);if(_0x17a49b[_0x0662('0x21')]){delete _0x17a49b[_0x0662('0x21')];}_0x3373d4[_0x0662('0x14')](_0x265825)['send'](_0x17a49b);};}exports[_0x0662('0x22')]=function(_0x65a8a,_0x3072df){var _0x717ff3={},_0x18aad3={},_0x2cb598={'count':0x0,'rows':[]};var _0x44f646=db[_0x0662('0x23')]['rawAttributes'];_0x18aad3[_0x0662('0x24')]=_[_0x0662('0x25')](_[_0x0662('0x26')](_0x44f646),[_0x0662('0x21')]);var _0x45ed1a={'dateStart':_0x65a8a[_0x0662('0x27')][_0x0662('0x28')],'dateEnd':_0x65a8a[_0x0662('0x27')]['dateEnd']};delete _0x65a8a[_0x0662('0x27')][_0x0662('0x28')];delete _0x65a8a[_0x0662('0x27')][_0x0662('0x29')];_0x18aad3[_0x0662('0x27')]=_[_0x0662('0x26')](_0x65a8a[_0x0662('0x27')]);_0x18aad3['filters']=_[_0x0662('0x2a')](_0x18aad3[_0x0662('0x24')],_0x18aad3[_0x0662('0x27')]);_0x717ff3[_0x0662('0x2b')]=_[_0x0662('0x2a')](_0x18aad3[_0x0662('0x24')],qs[_0x0662('0x2c')](_0x65a8a[_0x0662('0x27')]['fields']));_0x717ff3[_0x0662('0x2b')]=_0x717ff3[_0x0662('0x2b')][_0x0662('0x2d')]?_0x717ff3[_0x0662('0x2b')]:_0x18aad3[_0x0662('0x24')];if(!_0x65a8a[_0x0662('0x27')]['hasOwnProperty'](_0x0662('0x2e'))){_0x717ff3[_0x0662('0x2f')]=qs[_0x0662('0x2f')](_0x65a8a[_0x0662('0x27')]['limit']);_0x717ff3[_0x0662('0x18')]=qs[_0x0662('0x18')](_0x65a8a['query'][_0x0662('0x18')]);}_0x717ff3['order']=qs[_0x0662('0x30')](_0x65a8a[_0x0662('0x27')][_0x0662('0x30')]);_0x717ff3[_0x0662('0x31')]=qs[_0x0662('0x32')](_[_0x0662('0x33')](_0x65a8a['query'],_0x18aad3[_0x0662('0x32')]));if(_0x45ed1a[_0x0662('0x28')]){if(_0x45ed1a[_0x0662('0x29')]){_0x45ed1a['dateEnd']=moment(_0x45ed1a['dateEnd'])[_0x0662('0x34')](0x1,_0x0662('0x35'));}else{_0x45ed1a[_0x0662('0x29')]=moment(_0x45ed1a['dateStart'])[_0x0662('0x34')](0x1,_0x0662('0x35'));}_[_0x0662('0x36')](_0x717ff3[_0x0662('0x31')],{'createdAt':{'$gte':_0x45ed1a[_0x0662('0x28')],'$lte':_0x45ed1a[_0x0662('0x29')]}});}if(_0x65a8a[_0x0662('0x27')]['filter']){_0x717ff3[_0x0662('0x31')]=_[_0x0662('0x36')](_0x717ff3[_0x0662('0x31')],{'$or':_[_0x0662('0x37')](_0x717ff3[_0x0662('0x2b')],function(_0x1a1051){var _0xff895d={};_0xff895d[_0x1a1051]={'$like':'%'+_0x65a8a[_0x0662('0x27')][_0x0662('0x38')]+'%'};return _0xff895d;})});}_0x717ff3=_[_0x0662('0x36')]({},_0x717ff3,_0x65a8a[_0x0662('0x39')]);var _0x3a86e0={'where':_0x717ff3[_0x0662('0x31')]};return db[_0x0662('0x23')]['count'](_0x3a86e0)['then'](function(_0x3e205a){_0x2cb598[_0x0662('0x17')]=_0x3e205a;if(_0x65a8a[_0x0662('0x27')][_0x0662('0x3a')]){_0x717ff3[_0x0662('0x3b')]=[{'all':!![]}];}return db[_0x0662('0x23')]['findAll'](_0x717ff3);})[_0x0662('0x1e')](function(_0x27d9c5){_0x2cb598[_0x0662('0x3c')]=_0x27d9c5;return _0x2cb598;})[_0x0662('0x1e')](respondWithFilteredResult(_0x3072df,_0x717ff3))[_0x0662('0x3d')](handleError(_0x3072df,null));};exports[_0x0662('0x3e')]=function(_0x3e1754,_0x59fae8){var _0x2595ab={'raw':!![],'where':{'id':_0x3e1754[_0x0662('0x3f')]['id']}},_0x90babd={};_0x90babd[_0x0662('0x24')]=_['keys'](db[_0x0662('0x23')][_0x0662('0x40')]);_0x90babd[_0x0662('0x27')]=_[_0x0662('0x26')](_0x3e1754[_0x0662('0x27')]);_0x90babd[_0x0662('0x32')]=_[_0x0662('0x2a')](_0x90babd[_0x0662('0x24')],_0x90babd['query']);_0x2595ab['attributes']=_['intersection'](_0x90babd[_0x0662('0x24')],qs['fields'](_0x3e1754[_0x0662('0x27')][_0x0662('0x2c')]));_0x2595ab[_0x0662('0x2b')]=_0x2595ab[_0x0662('0x2b')]['length']?_0x2595ab[_0x0662('0x2b')]:_0x90babd['model'];if(_0x3e1754[_0x0662('0x27')][_0x0662('0x3a')]){_0x2595ab[_0x0662('0x3b')]=[{'all':!![]}];}_0x2595ab=_['merge']({},_0x2595ab,_0x3e1754[_0x0662('0x39')]);return db[_0x0662('0x23')][_0x0662('0x41')](_0x2595ab)['then'](handleEntityNotFound(_0x59fae8,null))[_0x0662('0x1e')](respondWithResult(_0x59fae8,null))[_0x0662('0x3d')](handleError(_0x59fae8,null));};exports[_0x0662('0x42')]=function(_0x4c834d,_0xea4d6){return db['VoiceMailMessage'][_0x0662('0x42')](_0x4c834d[_0x0662('0x43')],{})['then'](respondWithResult(_0xea4d6,0xc9))[_0x0662('0x3d')](handleError(_0xea4d6,null));};exports['update']=function(_0x247f94,_0x44b530){if(_0x247f94['body']['id']){delete _0x247f94['body']['id'];}return db[_0x0662('0x23')][_0x0662('0x41')]({'where':{'id':_0x247f94[_0x0662('0x3f')]['id']}})[_0x0662('0x1e')](handleEntityNotFound(_0x44b530,null))['then'](saveUpdates(_0x247f94[_0x0662('0x43')],null))[_0x0662('0x1e')](respondWithResult(_0x44b530,null))[_0x0662('0x3d')](handleError(_0x44b530,null));};exports[_0x0662('0x1f')]=function(_0x55258f,_0x47d7ed){return db[_0x0662('0x23')]['find']({'where':{'id':_0x55258f[_0x0662('0x3f')]['id']}})[_0x0662('0x1e')](handleEntityNotFound(_0x47d7ed,null))[_0x0662('0x1e')](removeEntity(_0x47d7ed,null))[_0x0662('0x3d')](handleError(_0x47d7ed,null));};exports[_0x0662('0x44')]=function(_0x13bfd1,_0x490f4d,_0x1d99ef){return db[_0x0662('0x23')][_0x0662('0x41')]({'where':{'id':_0x13bfd1[_0x0662('0x3f')]['id']},'attributes':['id',_0x0662('0x45'),'msg_id']})['then'](handleEntityNotFound(_0x490f4d,null))[_0x0662('0x1e')](function(_0x269da5){if(_0x269da5){if(!_0x269da5[_0x0662('0x45')]){throw new db[(_0x0662('0x46'))]['ValidationError'](_0x0662('0x47'));}var _0x1291df={'Content-Type':'audio/wav','Content-Disposition':'attachment'};if(_0x269da5[_0x0662('0x48')]){_0x1291df[_0x0662('0x49')]=_0x0662('0x4a')+_0x269da5[_0x0662('0x48')]+_0x0662('0x4b');}_0x490f4d['set'](_0x1291df);return _0x490f4d[_0x0662('0x4c')](new Buffer(_0x269da5[_0x0662('0x45')]));}})[_0x0662('0x3d')](handleError(_0x490f4d,null));};
\ No newline at end of file
+var _0xc2da=['../../config/logger','api','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','update','then','destroy','error','name','send','VoiceMailMessage','rawAttributes','model','differenceBy','keys','query','dateStart','dateEnd','filters','intersection','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','add','merge','map','filter','options','count','include','catch','params','fields','includeAll','find','create','body','recording','msg_id','Sequelize','ValidationError','VoiceMailMessage\x20not\x20found','audio/wav','attachment','Content-Disposition','attachment;\x20filename=\x22','.wav\x22','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring'];(function(_0x1b5398,_0x5f5823){var _0x4e354a=function(_0x6bcf29){while(--_0x6bcf29){_0x1b5398['push'](_0x1b5398['shift']());}};_0x4e354a(++_0x5f5823);}(_0xc2da,0x168));var _0xac2d=function(_0x3cba80,_0x3024e7){_0x3cba80=_0x3cba80-0x0;var _0x11cb67=_0xc2da[_0x3cba80];return _0x11cb67;};'use strict';var jsonpatch=require(_0xac2d('0x0'));var rp=require(_0xac2d('0x1'));var moment=require(_0xac2d('0x2'));var BPromise=require(_0xac2d('0x3'));var Mustache=require(_0xac2d('0x4'));var util=require(_0xac2d('0x5'));var path=require(_0xac2d('0x6'));var sox=require(_0xac2d('0x7'));var csv=require('to-csv');var ejs=require(_0xac2d('0x8'));var fs=require('fs');var _=require(_0xac2d('0x9'));var squel=require(_0xac2d('0xa'));var crypto=require('crypto');var jsforce=require(_0xac2d('0xb'));var deskjs=require(_0xac2d('0xc'));var toCsv=require(_0xac2d('0xd'));var querystring=require(_0xac2d('0xe'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0xac2d('0xf'))(_0xac2d('0x10'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x431e9b,_0x37b8e3){_0x37b8e3=_0x37b8e3||0xcc;return function(_0x37d359){if(_0x37d359){return _0x431e9b[_0xac2d('0x11')](_0x37b8e3);}return _0x431e9b[_0xac2d('0x12')](_0x37b8e3)[_0xac2d('0x13')]();};}function respondWithResult(_0x381ccd,_0x2dcba6){_0x2dcba6=_0x2dcba6||0xc8;return function(_0x531cdd){if(_0x531cdd){return _0x381ccd[_0xac2d('0x12')](_0x2dcba6)[_0xac2d('0x14')](_0x531cdd);}};}function respondWithFilteredResult(_0x3be72b,_0x145a9b){return function(_0x259a2c){if(_0x259a2c){var _0x4658aa=_0x259a2c['count'],_0x26bc4b=_0x145a9b[_0xac2d('0x15')],_0x2699d1=_0x145a9b[_0xac2d('0x15')]+_0x145a9b[_0xac2d('0x16')],_0xe402f7;if(_0x2699d1>=_0x4658aa){_0x2699d1=_0x4658aa;_0xe402f7=0xc8;}else{_0xe402f7=0xce;}_0x3be72b[_0xac2d('0x12')](_0xe402f7);return _0x3be72b[_0xac2d('0x17')](_0xac2d('0x18'),_0x26bc4b+'-'+_0x2699d1+'/'+_0x4658aa)[_0xac2d('0x14')](_0x259a2c);}return null;};}function patchUpdates(_0x4faf57){return function(_0x5296d2){try{jsonpatch[_0xac2d('0x19')](_0x5296d2,_0x4faf57,!![]);}catch(_0x3f4e30){return BPromise[_0xac2d('0x1a')](_0x3f4e30);}return _0x5296d2['save']();};}function saveUpdates(_0x4940d3,_0x25cddc){return function(_0x343995){if(_0x343995){return _0x343995[_0xac2d('0x1b')](_0x4940d3)[_0xac2d('0x1c')](function(_0x30549c){return _0x30549c;});}return null;};}function removeEntity(_0x4b870d,_0x7a5a5d){return function(_0x5ab092){if(_0x5ab092){return _0x5ab092[_0xac2d('0x1d')]()['then'](function(){_0x4b870d[_0xac2d('0x12')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3ff30d,_0x87641c){return function(_0x9ac62b){if(!_0x9ac62b){_0x3ff30d[_0xac2d('0x11')](0x194);}return _0x9ac62b;};}function handleError(_0x3c7696,_0x1e4c61){_0x1e4c61=_0x1e4c61||0x1f4;return function(_0x4d60eb){logger[_0xac2d('0x1e')](_0x4d60eb['stack']);if(_0x4d60eb[_0xac2d('0x1f')]){delete _0x4d60eb['name'];}_0x3c7696[_0xac2d('0x12')](_0x1e4c61)[_0xac2d('0x20')](_0x4d60eb);};}exports['index']=function(_0x4bd22f,_0x5f1f4f){var _0x8e0ed9={},_0x26b868={},_0x521874={'count':0x0,'rows':[]};var _0x4a6159=db[_0xac2d('0x21')][_0xac2d('0x22')];_0x26b868[_0xac2d('0x23')]=_[_0xac2d('0x24')](_[_0xac2d('0x25')](_0x4a6159),[_0xac2d('0x1f')]);var _0x2bb3a8={'dateStart':_0x4bd22f[_0xac2d('0x26')][_0xac2d('0x27')],'dateEnd':_0x4bd22f['query'][_0xac2d('0x28')]};delete _0x4bd22f['query'][_0xac2d('0x27')];delete _0x4bd22f[_0xac2d('0x26')][_0xac2d('0x28')];_0x26b868[_0xac2d('0x26')]=_[_0xac2d('0x25')](_0x4bd22f[_0xac2d('0x26')]);_0x26b868[_0xac2d('0x29')]=_[_0xac2d('0x2a')](_0x26b868[_0xac2d('0x23')],_0x26b868[_0xac2d('0x26')]);_0x8e0ed9[_0xac2d('0x2b')]=_[_0xac2d('0x2a')](_0x26b868[_0xac2d('0x23')],qs['fields'](_0x4bd22f[_0xac2d('0x26')]['fields']));_0x8e0ed9[_0xac2d('0x2b')]=_0x8e0ed9['attributes'][_0xac2d('0x2c')]?_0x8e0ed9[_0xac2d('0x2b')]:_0x26b868[_0xac2d('0x23')];if(!_0x4bd22f['query'][_0xac2d('0x2d')](_0xac2d('0x2e'))){_0x8e0ed9[_0xac2d('0x16')]=qs['limit'](_0x4bd22f['query']['limit']);_0x8e0ed9[_0xac2d('0x15')]=qs[_0xac2d('0x15')](_0x4bd22f[_0xac2d('0x26')][_0xac2d('0x15')]);}_0x8e0ed9[_0xac2d('0x2f')]=qs[_0xac2d('0x30')](_0x4bd22f[_0xac2d('0x26')][_0xac2d('0x30')]);_0x8e0ed9[_0xac2d('0x31')]=qs[_0xac2d('0x29')](_[_0xac2d('0x32')](_0x4bd22f[_0xac2d('0x26')],_0x26b868['filters']));if(_0x2bb3a8['dateStart']){if(_0x2bb3a8[_0xac2d('0x28')]){_0x2bb3a8[_0xac2d('0x28')]=moment(_0x2bb3a8[_0xac2d('0x28')])[_0xac2d('0x33')](0x1,'day');}else{_0x2bb3a8[_0xac2d('0x28')]=moment(_0x2bb3a8['dateStart'])['add'](0x1,'day');}_[_0xac2d('0x34')](_0x8e0ed9[_0xac2d('0x31')],{'createdAt':{'$gte':_0x2bb3a8[_0xac2d('0x27')],'$lte':_0x2bb3a8[_0xac2d('0x28')]}});}if(_0x4bd22f[_0xac2d('0x26')]['filter']){_0x8e0ed9['where']=_[_0xac2d('0x34')](_0x8e0ed9['where'],{'$or':_[_0xac2d('0x35')](_0x8e0ed9[_0xac2d('0x2b')],function(_0x5860e8){var _0x2df218={};_0x2df218[_0x5860e8]={'$like':'%'+_0x4bd22f[_0xac2d('0x26')][_0xac2d('0x36')]+'%'};return _0x2df218;})});}_0x8e0ed9=_[_0xac2d('0x34')]({},_0x8e0ed9,_0x4bd22f[_0xac2d('0x37')]);var _0x8111a1={'where':_0x8e0ed9[_0xac2d('0x31')]};return db[_0xac2d('0x21')][_0xac2d('0x38')](_0x8111a1)[_0xac2d('0x1c')](function(_0x2f44c4){_0x521874[_0xac2d('0x38')]=_0x2f44c4;if(_0x4bd22f[_0xac2d('0x26')]['includeAll']){_0x8e0ed9[_0xac2d('0x39')]=[{'all':!![]}];}return db['VoiceMailMessage']['findAll'](_0x8e0ed9);})[_0xac2d('0x1c')](function(_0x4f2230){_0x521874['rows']=_0x4f2230;return _0x521874;})[_0xac2d('0x1c')](respondWithFilteredResult(_0x5f1f4f,_0x8e0ed9))[_0xac2d('0x3a')](handleError(_0x5f1f4f,null));};exports['show']=function(_0xfd0fcb,_0x3dde8e){var _0x3de0ad={'raw':!![],'where':{'id':_0xfd0fcb[_0xac2d('0x3b')]['id']}},_0x5cc867={};_0x5cc867[_0xac2d('0x23')]=_[_0xac2d('0x25')](db['VoiceMailMessage']['rawAttributes']);_0x5cc867['query']=_['keys'](_0xfd0fcb[_0xac2d('0x26')]);_0x5cc867[_0xac2d('0x29')]=_['intersection'](_0x5cc867[_0xac2d('0x23')],_0x5cc867[_0xac2d('0x26')]);_0x3de0ad[_0xac2d('0x2b')]=_[_0xac2d('0x2a')](_0x5cc867[_0xac2d('0x23')],qs[_0xac2d('0x3c')](_0xfd0fcb['query'][_0xac2d('0x3c')]));_0x3de0ad[_0xac2d('0x2b')]=_0x3de0ad[_0xac2d('0x2b')]['length']?_0x3de0ad[_0xac2d('0x2b')]:_0x5cc867[_0xac2d('0x23')];if(_0xfd0fcb[_0xac2d('0x26')][_0xac2d('0x3d')]){_0x3de0ad['include']=[{'all':!![]}];}_0x3de0ad=_[_0xac2d('0x34')]({},_0x3de0ad,_0xfd0fcb[_0xac2d('0x37')]);return db[_0xac2d('0x21')][_0xac2d('0x3e')](_0x3de0ad)[_0xac2d('0x1c')](handleEntityNotFound(_0x3dde8e,null))[_0xac2d('0x1c')](respondWithResult(_0x3dde8e,null))[_0xac2d('0x3a')](handleError(_0x3dde8e,null));};exports[_0xac2d('0x3f')]=function(_0x26559b,_0x2e06cf){return db['VoiceMailMessage'][_0xac2d('0x3f')](_0x26559b[_0xac2d('0x40')],{})[_0xac2d('0x1c')](respondWithResult(_0x2e06cf,0xc9))[_0xac2d('0x3a')](handleError(_0x2e06cf,null));};exports[_0xac2d('0x1b')]=function(_0x3bf79b,_0x2dd2fc){if(_0x3bf79b[_0xac2d('0x40')]['id']){delete _0x3bf79b[_0xac2d('0x40')]['id'];}return db[_0xac2d('0x21')][_0xac2d('0x3e')]({'where':{'id':_0x3bf79b[_0xac2d('0x3b')]['id']}})['then'](handleEntityNotFound(_0x2dd2fc,null))[_0xac2d('0x1c')](saveUpdates(_0x3bf79b[_0xac2d('0x40')],null))['then'](respondWithResult(_0x2dd2fc,null))[_0xac2d('0x3a')](handleError(_0x2dd2fc,null));};exports[_0xac2d('0x1d')]=function(_0x30e5ff,_0x49e41d){return db[_0xac2d('0x21')][_0xac2d('0x3e')]({'where':{'id':_0x30e5ff[_0xac2d('0x3b')]['id']}})[_0xac2d('0x1c')](handleEntityNotFound(_0x49e41d,null))['then'](removeEntity(_0x49e41d,null))['catch'](handleError(_0x49e41d,null));};exports['download']=function(_0x189534,_0x57d98c,_0x3f0214){return db[_0xac2d('0x21')][_0xac2d('0x3e')]({'where':{'id':_0x189534[_0xac2d('0x3b')]['id']},'attributes':['id',_0xac2d('0x41'),_0xac2d('0x42')]})['then'](handleEntityNotFound(_0x57d98c,null))[_0xac2d('0x1c')](function(_0x151589){if(_0x151589){if(!_0x151589[_0xac2d('0x41')]){throw new db[(_0xac2d('0x43'))][(_0xac2d('0x44'))](_0xac2d('0x45'));}var _0x24e5af={'Content-Type':_0xac2d('0x46'),'Content-Disposition':_0xac2d('0x47')};if(_0x151589[_0xac2d('0x42')]){_0x24e5af[_0xac2d('0x48')]=_0xac2d('0x49')+_0x151589[_0xac2d('0x42')]+_0xac2d('0x4a');}_0x57d98c[_0xac2d('0x17')](_0x24e5af);return _0x57d98c[_0xac2d('0x20')](new Buffer(_0x151589[_0xac2d('0x41')]));}})['catch'](handleError(_0x57d98c,null));};
\ No newline at end of file
index 9f6536d..d5509e1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa79a=['moment','bluebird','request-promise','./voiceMailMessage.attributes','define','VoiceMailMessage','dir','../../config/logger','api'];(function(_0x54a7a0,_0x52dece){var _0x4e91d2=function(_0x547854){while(--_0x547854){_0x54a7a0['push'](_0x54a7a0['shift']());}};_0x4e91d2(++_0x52dece);}(_0xa79a,0x181));var _0xaa79=function(_0x59474d,_0x13475b){_0x59474d=_0x59474d-0x0;var _0x4e977a=_0xa79a[_0x59474d];return _0x4e977a;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xaa79('0x0'))(_0xaa79('0x1'));var moment=require(_0xaa79('0x2'));var BPromise=require(_0xaa79('0x3'));var rp=require(_0xaa79('0x4'));var attributes=require(_0xaa79('0x5'));module['exports']=function(_0x1930ad,_0x54d1fb){return _0x1930ad[_0xaa79('0x6')](_0xaa79('0x7'),attributes,{'tableName':'voice_voicemail_messages','paranoid':![],'indexes':[{'name':_0xaa79('0x8'),'fields':[_0xaa79('0x8')]}],'timestamps':![]});};
\ No newline at end of file
+var _0xa088=['voice_voicemail_messages','dir','lodash','util','api','moment','request-promise','./voiceMailMessage.attributes','exports','define'];(function(_0x37bef1,_0xecf330){var _0x342427=function(_0xa1884c){while(--_0xa1884c){_0x37bef1['push'](_0x37bef1['shift']());}};_0x342427(++_0xecf330);}(_0xa088,0x84));var _0x8a08=function(_0x64837b,_0x478a8e){_0x64837b=_0x64837b-0x0;var _0x2a3c1b=_0xa088[_0x64837b];return _0x2a3c1b;};'use strict';var _=require(_0x8a08('0x0'));var util=require(_0x8a08('0x1'));var logger=require('../../config/logger')(_0x8a08('0x2'));var moment=require(_0x8a08('0x3'));var BPromise=require('bluebird');var rp=require(_0x8a08('0x4'));var attributes=require(_0x8a08('0x5'));module[_0x8a08('0x6')]=function(_0x38d6eb,_0x5c4db5){return _0x38d6eb[_0x8a08('0x7')]('VoiceMailMessage',attributes,{'tableName':_0x8a08('0x8'),'paranoid':![],'indexes':[{'name':_0x8a08('0x9'),'fields':[_0x8a08('0x9')]}],'timestamps':![]});};
\ No newline at end of file
index f5d6ea4..810c6fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbca5=['then','info','VoiceMailMessage,\x20%s,\x20%s','request\x20sent','VoiceMailMessage,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request'];(function(_0x3e9d70,_0x446e86){var _0x80a11d=function(_0x183f74){while(--_0x183f74){_0x3e9d70['push'](_0x3e9d70['shift']());}};_0x80a11d(++_0x446e86);}(_0xbca5,0x1d6));var _0x5bca=function(_0x33654f,_0x1313a8){_0x33654f=_0x33654f-0x0;var _0x1e01b4=_0xbca5[_0x33654f];return _0x1e01b4;};'use strict';var _=require(_0x5bca('0x0'));var util=require(_0x5bca('0x1'));var moment=require(_0x5bca('0x2'));var BPromise=require(_0x5bca('0x3'));var rs=require(_0x5bca('0x4'));var fs=require('fs');var db=require(_0x5bca('0x5'))['db'];var utils=require(_0x5bca('0x6'));var logger=require(_0x5bca('0x7'))('rpc');var config=require(_0x5bca('0x8'));var jayson=require(_0x5bca('0x9'));var client=jayson[_0x5bca('0xa')][_0x5bca('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x521668,_0xc7301c,_0x4d3e28){return new BPromise(function(_0x25b2af,_0x5c186c){return client[_0x5bca('0xc')](_0x521668,_0x4d3e28)[_0x5bca('0xd')](function(_0x52f0b6){logger[_0x5bca('0xe')](_0x5bca('0xf'),_0xc7301c,_0x5bca('0x10'));logger['debug'](_0x5bca('0x11'),_0xc7301c,_0x5bca('0x10'),JSON['stringify'](_0x52f0b6));if(_0x52f0b6[_0x5bca('0x12')]){if(_0x52f0b6[_0x5bca('0x12')][_0x5bca('0x13')]===0x1f4){logger[_0x5bca('0x12')](_0x5bca('0xf'),_0xc7301c,_0x52f0b6[_0x5bca('0x12')]['message']);return _0x5c186c(_0x52f0b6['error']['message']);}logger[_0x5bca('0x12')](_0x5bca('0xf'),_0xc7301c,_0x52f0b6[_0x5bca('0x12')][_0x5bca('0x14')]);return _0x25b2af(_0x52f0b6[_0x5bca('0x12')]['message']);}else{logger[_0x5bca('0xe')](_0x5bca('0xf'),_0xc7301c,'request\x20sent');_0x25b2af(_0x52f0b6[_0x5bca('0x15')][_0x5bca('0x14')]);}})[_0x5bca('0x16')](function(_0x136b85){logger['error'](_0x5bca('0xf'),_0xc7301c,_0x136b85);_0x5c186c(_0x136b85);});});}
\ No newline at end of file
+var _0x177d=['message','result','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','request','info','request\x20sent','debug','VoiceMailMessage,\x20%s,\x20%s,\x20%s','error','VoiceMailMessage,\x20%s,\x20%s'];(function(_0x3054be,_0x1bdc8b){var _0x3df150=function(_0x56cfbf){while(--_0x56cfbf){_0x3054be['push'](_0x3054be['shift']());}};_0x3df150(++_0x1bdc8b);}(_0x177d,0x1bb));var _0xd177=function(_0x362fe8,_0x1893d0){_0x362fe8=_0x362fe8-0x0;var _0x1e7965=_0x177d[_0x362fe8];return _0x1e7965;};'use strict';var _=require('lodash');var util=require(_0xd177('0x0'));var moment=require(_0xd177('0x1'));var BPromise=require(_0xd177('0x2'));var rs=require(_0xd177('0x3'));var fs=require('fs');var db=require(_0xd177('0x4'))['db'];var utils=require(_0xd177('0x5'));var logger=require(_0xd177('0x6'))('rpc');var config=require(_0xd177('0x7'));var jayson=require(_0xd177('0x8'));var client=jayson[_0xd177('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4d7417,_0x508b7a,_0x5190bb){return new BPromise(function(_0x32bc4b,_0x363784){return client[_0xd177('0xa')](_0x4d7417,_0x5190bb)['then'](function(_0xed8871){logger[_0xd177('0xb')]('VoiceMailMessage,\x20%s,\x20%s',_0x508b7a,_0xd177('0xc'));logger[_0xd177('0xd')](_0xd177('0xe'),_0x508b7a,'request\x20sent',JSON['stringify'](_0xed8871));if(_0xed8871[_0xd177('0xf')]){if(_0xed8871['error']['code']===0x1f4){logger[_0xd177('0xf')](_0xd177('0x10'),_0x508b7a,_0xed8871['error'][_0xd177('0x11')]);return _0x363784(_0xed8871['error'][_0xd177('0x11')]);}logger[_0xd177('0xf')](_0xd177('0x10'),_0x508b7a,_0xed8871[_0xd177('0xf')][_0xd177('0x11')]);return _0x32bc4b(_0xed8871[_0xd177('0xf')][_0xd177('0x11')]);}else{logger[_0xd177('0xb')]('VoiceMailMessage,\x20%s,\x20%s',_0x508b7a,'request\x20sent');_0x32bc4b(_0xed8871[_0xd177('0x12')][_0xd177('0x11')]);}})[_0xd177('0x13')](function(_0x509d18){logger[_0xd177('0xf')](_0xd177('0x10'),_0x508b7a,_0x509d18);_0x363784(_0x509d18);});});}
\ No newline at end of file
index d6d3bcb..4e9ab35 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf619=['/:id/sounds/:id2','removeSound','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceMusicOnHold.controller','get','isAuthenticated','index','/:id','getSounds','create','post','/:id/sounds','put','update','destroy','delete'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xf619,0xbb));var _0x9f61=function(_0x332097,_0x183f32){_0x332097=_0x332097-0x0;var _0x2ad42a=_0xf619[_0x332097];return _0x2ad42a;};'use strict';var multer=require(_0x9f61('0x0'));var util=require(_0x9f61('0x1'));var path=require('path');var express=require(_0x9f61('0x2'));var router=express[_0x9f61('0x3')]();var auth=require(_0x9f61('0x4'));var interaction=require(_0x9f61('0x5'));var config=require(_0x9f61('0x6'));var controller=require(_0x9f61('0x7'));router[_0x9f61('0x8')]('/',auth[_0x9f61('0x9')](),controller[_0x9f61('0xa')]);router[_0x9f61('0x8')](_0x9f61('0xb'),auth[_0x9f61('0x9')](),controller['show']);router[_0x9f61('0x8')]('/:id/sounds',auth['isAuthenticated'](),controller[_0x9f61('0xc')]);router['post']('/',auth[_0x9f61('0x9')](),controller[_0x9f61('0xd')]);router[_0x9f61('0xe')](_0x9f61('0xf'),auth[_0x9f61('0x9')](),controller['addSound']);router[_0x9f61('0x10')]('/:id',auth[_0x9f61('0x9')](),controller[_0x9f61('0x11')]);router['delete'](_0x9f61('0xb'),auth['isAuthenticated'](),controller[_0x9f61('0x12')]);router[_0x9f61('0x13')](_0x9f61('0x14'),auth[_0x9f61('0x9')](),controller[_0x9f61('0x15')]);module[_0x9f61('0x16')]=router;
\ No newline at end of file
+var _0xce16=['show','/:id/sounds','getSounds','post','create','addSound','put','delete','destroy','/:id/sounds/:id2','removeSound','exports','multer','util','path','Router','../../components/interaction/service','../../config/environment','get','index','/:id','isAuthenticated'];(function(_0x34004a,_0x100f1e){var _0x2c323c=function(_0x2ca4bc){while(--_0x2ca4bc){_0x34004a['push'](_0x34004a['shift']());}};_0x2c323c(++_0x100f1e);}(_0xce16,0x114));var _0x6ce1=function(_0x1743e7,_0x1d9761){_0x1743e7=_0x1743e7-0x0;var _0x21b834=_0xce16[_0x1743e7];return _0x21b834;};'use strict';var multer=require(_0x6ce1('0x0'));var util=require(_0x6ce1('0x1'));var path=require(_0x6ce1('0x2'));var express=require('express');var router=express[_0x6ce1('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x6ce1('0x4'));var config=require(_0x6ce1('0x5'));var controller=require('./voiceMusicOnHold.controller');router[_0x6ce1('0x6')]('/',auth['isAuthenticated'](),controller[_0x6ce1('0x7')]);router[_0x6ce1('0x6')](_0x6ce1('0x8'),auth[_0x6ce1('0x9')](),controller[_0x6ce1('0xa')]);router[_0x6ce1('0x6')](_0x6ce1('0xb'),auth[_0x6ce1('0x9')](),controller[_0x6ce1('0xc')]);router[_0x6ce1('0xd')]('/',auth['isAuthenticated'](),controller[_0x6ce1('0xe')]);router[_0x6ce1('0xd')]('/:id/sounds',auth[_0x6ce1('0x9')](),controller[_0x6ce1('0xf')]);router[_0x6ce1('0x10')](_0x6ce1('0x8'),auth[_0x6ce1('0x9')](),controller['update']);router[_0x6ce1('0x11')](_0x6ce1('0x8'),auth[_0x6ce1('0x9')](),controller[_0x6ce1('0x12')]);router[_0x6ce1('0x11')](_0x6ce1('0x13'),auth[_0x6ce1('0x9')](),controller[_0x6ce1('0x14')]);module[_0x6ce1('0x15')]=router;
\ No newline at end of file
index c6d6e6d..2507625 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7372=['mp3','alpha','TIMESTAMP','BOOLEAN','sequelize','exports','STRING','custom','files','mp3nb','quietmp3nb','quietmp3'];(function(_0x1c5545,_0x53be36){var _0x203365=function(_0x39855f){while(--_0x39855f){_0x1c5545['push'](_0x1c5545['shift']());}};_0x203365(++_0x53be36);}(_0x7372,0xf4));var _0x2737=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7372[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x2737('0x0'));module[_0x2737('0x1')]={'name':{'type':Sequelize[_0x2737('0x2')],'allowNull':![],'unique':'name'},'mode':{'type':Sequelize['ENUM'](_0x2737('0x3'),_0x2737('0x4'),_0x2737('0x5'),_0x2737('0x6'),_0x2737('0x7'),_0x2737('0x8')),'allowNull':!![],'defaultValue':_0x2737('0x4')},'directory':{'type':Sequelize[_0x2737('0x2')],'allowNull':!![]},'application':{'type':Sequelize[_0x2737('0x2')],'allowNull':!![]},'digit':{'type':Sequelize['STRING'],'allowNull':!![]},'sort':{'type':Sequelize['STRING'],'allowNull':!![],'defaultValue':_0x2737('0x9')},'format':{'type':Sequelize['STRING'],'allowNull':!![]},'stamp':{'type':_0x2737('0xa')},'defaultEntry':{'type':Sequelize[_0x2737('0xb')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x7c85=['sequelize','exports','STRING','ENUM','custom','mp3nb','quietmp3nb','quietmp3','mp3','files','BOOLEAN'];(function(_0x587b55,_0x58cce0){var _0x51f07f=function(_0x277045){while(--_0x277045){_0x587b55['push'](_0x587b55['shift']());}};_0x51f07f(++_0x58cce0);}(_0x7c85,0x108));var _0x57c8=function(_0x3168e1,_0xa046e0){_0x3168e1=_0x3168e1-0x0;var _0x13ad69=_0x7c85[_0x3168e1];return _0x13ad69;};'use strict';var Sequelize=require(_0x57c8('0x0'));module[_0x57c8('0x1')]={'name':{'type':Sequelize[_0x57c8('0x2')],'allowNull':![],'unique':'name'},'mode':{'type':Sequelize[_0x57c8('0x3')](_0x57c8('0x4'),'files',_0x57c8('0x5'),_0x57c8('0x6'),_0x57c8('0x7'),_0x57c8('0x8')),'allowNull':!![],'defaultValue':_0x57c8('0x9')},'directory':{'type':Sequelize[_0x57c8('0x2')],'allowNull':!![]},'application':{'type':Sequelize['STRING'],'allowNull':!![]},'digit':{'type':Sequelize[_0x57c8('0x2')],'allowNull':!![]},'sort':{'type':Sequelize[_0x57c8('0x2')],'allowNull':!![],'defaultValue':'alpha'},'format':{'type':Sequelize[_0x57c8('0x2')],'allowNull':!![]},'stamp':{'type':'TIMESTAMP'},'defaultEntry':{'type':Sequelize[_0x57c8('0xa')],'defaultValue':0x0}};
\ No newline at end of file
index 2d36169..bff348e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['message','addSound','converted_format','createdAt','join','server/files/sounds/converted','%s.%s','basename','save_name','server/files/moh','symlinkSync','Sequelize','findOne','removeSound','id2','getSounds','Sound','hasOwnProperty','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','apply','reject','save','update','then','destroy','end','error','name','send','index','VoiceMusicOnHold','rawAttributes','keys','query','dateEnd','dateStart','filters','intersection','model','fields','attributes','length','nolimit','order','sort','where','pick','add','day','merge','filter','map','options','includeAll','include','findAll','catch','show','params','find','body','create','sequelize','transaction','mode','directory','0777','readdirSync','forEach','unlinkSync','ValidationError'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0xa9e0,0x123));var _0x0a9e=function(_0x45e98e,_0x169b60){_0x45e98e=_0x45e98e-0x0;var _0x374dba=_0xa9e0[_0x45e98e];return _0x374dba;};'use strict';var jsonpatch=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0a9e('0x3'));var path=require('path');var sox=require(_0x0a9e('0x4'));var csv=require(_0x0a9e('0x5'));var ejs=require(_0x0a9e('0x6'));var fs=require('fs');var _=require(_0x0a9e('0x7'));var squel=require(_0x0a9e('0x8'));var crypto=require('crypto');var jsforce=require(_0x0a9e('0x9'));var deskjs=require(_0x0a9e('0xa'));var toCsv=require(_0x0a9e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0a9e('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x0a9e('0xc'));var config=require(_0x0a9e('0xd'));var db=require(_0x0a9e('0xe'))['db'];function respondWithStatusCode(_0x3ab53f,_0xfeb75b){_0xfeb75b=_0xfeb75b||0xcc;return function(_0xbd1168){if(_0xbd1168){return _0x3ab53f['sendStatus'](_0xfeb75b);}return _0x3ab53f['status'](_0xfeb75b)['end']();};}function respondWithResult(_0x4cfe67,_0x273d4d){_0x273d4d=_0x273d4d||0xc8;return function(_0x36471c){if(_0x36471c){return _0x4cfe67[_0x0a9e('0xf')](_0x273d4d)[_0x0a9e('0x10')](_0x36471c);}};}function respondWithFilteredResult(_0x32d742,_0x69aeb7){return function(_0x5db4b0){if(_0x5db4b0){var _0x4283ce=_0x5db4b0[_0x0a9e('0x11')],_0x239b12=_0x69aeb7[_0x0a9e('0x12')],_0x2b4227=_0x69aeb7['offset']+_0x69aeb7[_0x0a9e('0x13')],_0x281129;if(_0x2b4227>=_0x4283ce){_0x2b4227=_0x4283ce;_0x281129=0xc8;}else{_0x281129=0xce;}_0x32d742['status'](_0x281129);return _0x32d742[_0x0a9e('0x14')]('Content-Range',_0x239b12+'-'+_0x2b4227+'/'+_0x4283ce)[_0x0a9e('0x10')](_0x5db4b0);}return null;};}function patchUpdates(_0x12066b){return function(_0x48f32d){try{jsonpatch[_0x0a9e('0x15')](_0x48f32d,_0x12066b,!![]);}catch(_0x5a0a06){return BPromise[_0x0a9e('0x16')](_0x5a0a06);}return _0x48f32d[_0x0a9e('0x17')]();};}function saveUpdates(_0x106033,_0x205fd6){return function(_0x31b1ca){if(_0x31b1ca){return _0x31b1ca[_0x0a9e('0x18')](_0x106033)[_0x0a9e('0x19')](function(_0x20559e){return _0x20559e;});}return null;};}function removeEntity(_0x1314ae,_0x112016){return function(_0x1c696a){if(_0x1c696a){return _0x1c696a[_0x0a9e('0x1a')]()['then'](function(){_0x1314ae[_0x0a9e('0xf')](0xcc)[_0x0a9e('0x1b')]();});}};}function handleEntityNotFound(_0x53682f,_0x20f109){return function(_0x5a09ef){if(!_0x5a09ef){_0x53682f['sendStatus'](0x194);}return _0x5a09ef;};}function handleError(_0x3a02e1,_0x432e56){_0x432e56=_0x432e56||0x1f4;return function(_0x38e7c4){logger[_0x0a9e('0x1c')](_0x38e7c4['stack']);if(_0x38e7c4[_0x0a9e('0x1d')]){delete _0x38e7c4[_0x0a9e('0x1d')];}_0x3a02e1[_0x0a9e('0xf')](_0x432e56)[_0x0a9e('0x1e')](_0x38e7c4);};}exports[_0x0a9e('0x1f')]=function(_0x42ac8f,_0x16b1ca){var _0x5ea472={},_0x59181e={},_0x197ec0={'count':0x0,'rows':[]};var _0x3a8e58=db[_0x0a9e('0x20')][_0x0a9e('0x21')];_0x59181e['model']=_[_0x0a9e('0x22')](_0x3a8e58);var _0x479bc4={'dateStart':_0x42ac8f[_0x0a9e('0x23')]['dateStart'],'dateEnd':_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x24')]};delete _0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x25')];delete _0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x24')];_0x59181e[_0x0a9e('0x23')]=_[_0x0a9e('0x22')](_0x42ac8f['query']);_0x59181e[_0x0a9e('0x26')]=_[_0x0a9e('0x27')](_0x59181e[_0x0a9e('0x28')],_0x59181e[_0x0a9e('0x23')]);_0x5ea472['attributes']=_[_0x0a9e('0x27')](_0x59181e[_0x0a9e('0x28')],qs[_0x0a9e('0x29')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0x5ea472[_0x0a9e('0x2a')]=_0x5ea472[_0x0a9e('0x2a')][_0x0a9e('0x2b')]?_0x5ea472[_0x0a9e('0x2a')]:_0x59181e['model'];if(!_0x42ac8f[_0x0a9e('0x23')]['hasOwnProperty'](_0x0a9e('0x2c'))){_0x5ea472[_0x0a9e('0x13')]=qs[_0x0a9e('0x13')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x13')]);_0x5ea472['offset']=qs[_0x0a9e('0x12')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x12')]);}_0x5ea472[_0x0a9e('0x2d')]=qs[_0x0a9e('0x2e')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x2e')]);_0x5ea472[_0x0a9e('0x2f')]=qs['filters'](_[_0x0a9e('0x30')](_0x42ac8f['query'],_0x59181e[_0x0a9e('0x26')]));if(_0x479bc4[_0x0a9e('0x25')]){if(_0x479bc4[_0x0a9e('0x24')]){_0x479bc4[_0x0a9e('0x24')]=moment(_0x479bc4['dateEnd'])[_0x0a9e('0x31')](0x1,_0x0a9e('0x32'));}else{_0x479bc4[_0x0a9e('0x24')]=moment(_0x479bc4[_0x0a9e('0x25')])['add'](0x1,'day');}_[_0x0a9e('0x33')](_0x5ea472['where'],{'createdAt':{'$gte':_0x479bc4[_0x0a9e('0x25')],'$lte':_0x479bc4[_0x0a9e('0x24')]}});}if(_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x34')]){_0x5ea472['where']=_[_0x0a9e('0x33')](_0x5ea472[_0x0a9e('0x2f')],{'$or':_[_0x0a9e('0x35')](_0x5ea472['attributes'],function(_0x1dbf74){var _0x1a180b={};_0x1a180b[_0x1dbf74]={'$like':'%'+_0x42ac8f[_0x0a9e('0x23')]['filter']+'%'};return _0x1a180b;})});}_0x5ea472=_['merge']({},_0x5ea472,_0x42ac8f[_0x0a9e('0x36')]);var _0x40d766={'where':_0x5ea472['where']};return db[_0x0a9e('0x20')][_0x0a9e('0x11')](_0x40d766)[_0x0a9e('0x19')](function(_0x148f55){_0x197ec0['count']=_0x148f55;if(_0x42ac8f['query'][_0x0a9e('0x37')]){_0x5ea472[_0x0a9e('0x38')]=[{'all':!![]}];}return db['VoiceMusicOnHold'][_0x0a9e('0x39')](_0x5ea472);})[_0x0a9e('0x19')](function(_0x1459bb){_0x197ec0['rows']=_0x1459bb;return _0x197ec0;})[_0x0a9e('0x19')](respondWithFilteredResult(_0x16b1ca,_0x5ea472))[_0x0a9e('0x3a')](handleError(_0x16b1ca,null));};exports[_0x0a9e('0x3b')]=function(_0x43dd5b,_0x13cb1f){var _0xeaa5e5={'raw':![],'where':{'id':_0x43dd5b[_0x0a9e('0x3c')]['id']}},_0x2881b3={};_0x2881b3[_0x0a9e('0x28')]=_[_0x0a9e('0x22')](db[_0x0a9e('0x20')][_0x0a9e('0x21')]);_0x2881b3[_0x0a9e('0x23')]=_[_0x0a9e('0x22')](_0x43dd5b[_0x0a9e('0x23')]);_0x2881b3['filters']=_['intersection'](_0x2881b3[_0x0a9e('0x28')],_0x2881b3[_0x0a9e('0x23')]);_0xeaa5e5[_0x0a9e('0x2a')]=_[_0x0a9e('0x27')](_0x2881b3[_0x0a9e('0x28')],qs[_0x0a9e('0x29')](_0x43dd5b[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0xeaa5e5[_0x0a9e('0x2a')]=_0xeaa5e5[_0x0a9e('0x2a')][_0x0a9e('0x2b')]?_0xeaa5e5[_0x0a9e('0x2a')]:_0x2881b3['model'];if(_0x43dd5b[_0x0a9e('0x23')][_0x0a9e('0x37')]){_0xeaa5e5[_0x0a9e('0x38')]=[{'all':!![]}];}_0xeaa5e5=_[_0x0a9e('0x33')]({},_0xeaa5e5,_0x43dd5b[_0x0a9e('0x36')]);return db[_0x0a9e('0x20')][_0x0a9e('0x3d')](_0xeaa5e5)[_0x0a9e('0x19')](handleEntityNotFound(_0x13cb1f,null))['then'](respondWithResult(_0x13cb1f,null))[_0x0a9e('0x3a')](handleError(_0x13cb1f,null));};exports['update']=function(_0x473dc8,_0x476688){if(_0x473dc8[_0x0a9e('0x3e')]['id']){delete _0x473dc8['body']['id'];}return db[_0x0a9e('0x20')][_0x0a9e('0x3d')]({'where':{'id':_0x473dc8[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x19')](handleEntityNotFound(_0x476688,null))[_0x0a9e('0x19')](saveUpdates(_0x473dc8[_0x0a9e('0x3e')],null))[_0x0a9e('0x19')](respondWithResult(_0x476688,null))['catch'](handleError(_0x476688,null));};exports[_0x0a9e('0x3f')]=function(_0x1bde3c,_0x1b5e80,_0x16f976){return db[_0x0a9e('0x40')][_0x0a9e('0x41')](function(_0x6054ee){if(_0x1bde3c[_0x0a9e('0x3e')][_0x0a9e('0x42')]==='files'){_0x1bde3c[_0x0a9e('0x3e')][_0x0a9e('0x43')]=path['join'](config['root'],'server/files/moh',_0x1bde3c[_0x0a9e('0x3e')][_0x0a9e('0x1d')]);}return db[_0x0a9e('0x20')][_0x0a9e('0x3f')](_0x1bde3c[_0x0a9e('0x3e')],{'transaction':_0x6054ee})[_0x0a9e('0x19')](function(_0x2e5165){if(_0x1bde3c[_0x0a9e('0x3e')]['mode']==='files'){fs['mkdirSync'](_0x2e5165[_0x0a9e('0x43')],parseInt(_0x0a9e('0x44'),0x8));}return _0x2e5165;});})[_0x0a9e('0x19')](respondWithResult(_0x1b5e80,0xc9))['catch'](handleError(_0x1b5e80,null));};exports[_0x0a9e('0x1a')]=function(_0x161aa7,_0x53d113,_0x5a88da){var _0x2ef381;return db['VoiceMusicOnHold'][_0x0a9e('0x3d')]({'where':{'id':_0x161aa7['params']['id']}})[_0x0a9e('0x19')](function(_0x3c20b2){if(_0x3c20b2){return db[_0x0a9e('0x40')]['transaction'](function(_0x2f82da){return _0x3c20b2[_0x0a9e('0x1a')]({'transaction':_0x2f82da,'raw':!![]})['then'](function(_0x50f687){if(_0x50f687[_0x0a9e('0x43')]){fs[_0x0a9e('0x45')](_0x50f687['directory'])[_0x0a9e('0x46')](function(_0x5ce9ac){fs[_0x0a9e('0x47')](path['join'](_0x50f687[_0x0a9e('0x43')],_0x5ce9ac));});fs['rmdirSync'](_0x50f687['directory']);}return _0x50f687;});})['catch'](function(_0x2da03c){throw new db['Sequelize'][(_0x0a9e('0x48'))](_0x2da03c[_0x0a9e('0x49')]);});}})[_0x0a9e('0x19')](handleEntityNotFound(_0x53d113,null))[_0x0a9e('0x19')](removeEntity(_0x53d113,null))[_0x0a9e('0x3a')](handleError(_0x53d113,null));};exports[_0x0a9e('0x4a')]=function(_0xd10662,_0x28d814,_0x4e67ab){return db[_0x0a9e('0x40')][_0x0a9e('0x41')](function(_0x2642bb){var _0x30c491;return db[_0x0a9e('0x20')][_0x0a9e('0x3d')]({'where':{'id':_0xd10662['params']['id']}})[_0x0a9e('0x19')](function(_0x26bc80){if(_0x26bc80){_0x30c491=_0x26bc80;return _0x26bc80['addSound'](_0xd10662[_0x0a9e('0x3e')]['id'],{'transaction':_0x2642bb});}})['then'](function(_0x20c668){if(_0x20c668){return db['Sound']['findOne']({'where':{'id':_0xd10662['body']['id']},'attributes':['id',_0x0a9e('0x1d'),'save_name',_0x0a9e('0x4b'),_0x0a9e('0x4c')],'raw':!![]});}})[_0x0a9e('0x19')](function(_0x7be420){if(_0x7be420){var _0x1cca9f=path[_0x0a9e('0x4d')](config['root'],_0x0a9e('0x4e'),util['format'](_0x0a9e('0x4f'),path[_0x0a9e('0x50')](_0x7be420[_0x0a9e('0x51')],path['extname'](_0x7be420[_0x0a9e('0x51')])),_0x7be420[_0x0a9e('0x4b')]));var _0x119677=path[_0x0a9e('0x4d')](config['root'],_0x0a9e('0x52'),_0x30c491[_0x0a9e('0x1d')],util['format'](_0x0a9e('0x4f'),_0x7be420[_0x0a9e('0x1d')],_0x7be420[_0x0a9e('0x4b')]));fs[_0x0a9e('0x53')](_0x1cca9f,_0x119677);return _0x7be420;}})[_0x0a9e('0x3a')](function(_0x4d4a35){throw new db[(_0x0a9e('0x54'))][(_0x0a9e('0x48'))](_0x4d4a35[_0x0a9e('0x49')]);});})['then'](handleEntityNotFound(_0x28d814,null))[_0x0a9e('0x19')](respondWithResult(_0x28d814,0xc9))['catch'](handleError(_0x28d814,null));};exports['removeSound']=function(_0x242745,_0x4556c5,_0x9375fb){return db[_0x0a9e('0x40')][_0x0a9e('0x41')](function(_0xc8c264){var _0x387489;return db[_0x0a9e('0x20')][_0x0a9e('0x55')]({'where':{'id':_0x242745[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x19')](handleEntityNotFound(_0x4556c5,null))[_0x0a9e('0x19')](function(_0x2bbb86){if(_0x2bbb86){_0x387489=_0x2bbb86;return _0x2bbb86[_0x0a9e('0x56')](_0x242745[_0x0a9e('0x3c')][_0x0a9e('0x57')]);}})[_0x0a9e('0x19')](function(_0x4257c9){if(_0x4257c9){return db['Sound'][_0x0a9e('0x55')]({'where':{'id':_0x242745[_0x0a9e('0x3c')][_0x0a9e('0x57')]},'attributes':['id','name',_0x0a9e('0x51'),_0x0a9e('0x4b'),'createdAt'],'raw':!![]});}})[_0x0a9e('0x19')](function(_0x56e31e){if(_0x56e31e){fs[_0x0a9e('0x47')](path[_0x0a9e('0x4d')](_0x387489[_0x0a9e('0x43')],util['format']('%s.%s',_0x56e31e['name'],_0x56e31e[_0x0a9e('0x4b')])));return _0x56e31e;}})[_0x0a9e('0x3a')](function(_0x1104ad){throw new db[(_0x0a9e('0x54'))][(_0x0a9e('0x48'))](_0x1104ad[_0x0a9e('0x49')]);});})[_0x0a9e('0x19')](handleEntityNotFound(_0x4556c5,null))[_0x0a9e('0x19')](respondWithStatusCode(_0x4556c5,0xcc))['catch'](handleError(_0x4556c5,null));};exports[_0x0a9e('0x58')]=function(_0xcbc8b2,_0x12ccdb,_0x4a4fc7){var _0x2bdc44={};var _0x583b2e={};var _0x4437ff;var _0x44351d;return db['VoiceMusicOnHold'][_0x0a9e('0x55')]({'where':{'id':_0xcbc8b2[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x19')](handleEntityNotFound(_0x12ccdb,null))[_0x0a9e('0x19')](function(_0x542ece){if(_0x542ece){_0x4437ff=_0x542ece;_0x583b2e[_0x0a9e('0x28')]=_[_0x0a9e('0x22')](db[_0x0a9e('0x59')][_0x0a9e('0x21')]);_0x583b2e['query']=_[_0x0a9e('0x22')](_0xcbc8b2[_0x0a9e('0x23')]);_0x583b2e[_0x0a9e('0x26')]=_[_0x0a9e('0x27')](_0x583b2e['model'],_0x583b2e[_0x0a9e('0x23')]);_0x2bdc44[_0x0a9e('0x2a')]=_[_0x0a9e('0x27')](_0x583b2e[_0x0a9e('0x28')],qs[_0x0a9e('0x29')](_0xcbc8b2[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0x2bdc44[_0x0a9e('0x2a')]=_0x2bdc44[_0x0a9e('0x2a')][_0x0a9e('0x2b')]?_0x2bdc44[_0x0a9e('0x2a')]:_0x583b2e[_0x0a9e('0x28')];_0x2bdc44[_0x0a9e('0x2d')]=qs[_0x0a9e('0x2e')](_0xcbc8b2['query'][_0x0a9e('0x2e')]);_0x2bdc44[_0x0a9e('0x2f')]=qs[_0x0a9e('0x26')](_['pick'](_0xcbc8b2[_0x0a9e('0x23')],_0x583b2e[_0x0a9e('0x26')]));if(_0xcbc8b2[_0x0a9e('0x23')][_0x0a9e('0x34')]){_0x2bdc44['where']=_['merge'](_0x2bdc44[_0x0a9e('0x2f')],{'$or':_[_0x0a9e('0x35')](_0x2bdc44['attributes'],function(_0x45108c){var _0x53a6a1={};_0x53a6a1[_0x45108c]={'$like':'%'+_0xcbc8b2[_0x0a9e('0x23')][_0x0a9e('0x34')]+'%'};return _0x53a6a1;})});}_0x2bdc44=_['merge']({},_0x2bdc44,_0xcbc8b2[_0x0a9e('0x36')]);return _0x4437ff[_0x0a9e('0x58')](_0x2bdc44);}})[_0x0a9e('0x19')](function(_0x42b959){if(_0x42b959){_0x44351d=_0x42b959[_0x0a9e('0x2b')];if(!_0xcbc8b2[_0x0a9e('0x23')][_0x0a9e('0x5a')]('nolimit')){_0x2bdc44[_0x0a9e('0x13')]=qs[_0x0a9e('0x13')](_0xcbc8b2[_0x0a9e('0x23')][_0x0a9e('0x13')]);_0x2bdc44['offset']=qs[_0x0a9e('0x12')](_0xcbc8b2[_0x0a9e('0x23')]['offset']);}return _0x4437ff[_0x0a9e('0x58')](_0x2bdc44);}})['then'](function(_0x163710){if(_0x163710){return _0x163710?{'count':_0x44351d,'rows':_0x163710}:null;}})[_0x0a9e('0x19')](respondWithResult(_0x12ccdb,null))[_0x0a9e('0x3a')](handleError(_0x12ccdb,null));};
\ No newline at end of file
+var _0xa9e0=['message','addSound','converted_format','createdAt','join','server/files/sounds/converted','%s.%s','basename','save_name','server/files/moh','symlinkSync','Sequelize','findOne','removeSound','id2','getSounds','Sound','hasOwnProperty','fast-json-patch','request-promise','moment','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','apply','reject','save','update','then','destroy','end','error','name','send','index','VoiceMusicOnHold','rawAttributes','keys','query','dateEnd','dateStart','filters','intersection','model','fields','attributes','length','nolimit','order','sort','where','pick','add','day','merge','filter','map','options','includeAll','include','findAll','catch','show','params','find','body','create','sequelize','transaction','mode','directory','0777','readdirSync','forEach','unlinkSync','ValidationError'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0xa9e0,0x123));var _0x0a9e=function(_0x484e36,_0x4482d8){_0x484e36=_0x484e36-0x0;var _0xafc85d=_0xa9e0[_0x484e36];return _0xafc85d;};'use strict';var jsonpatch=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0a9e('0x3'));var path=require('path');var sox=require(_0x0a9e('0x4'));var csv=require(_0x0a9e('0x5'));var ejs=require(_0x0a9e('0x6'));var fs=require('fs');var _=require(_0x0a9e('0x7'));var squel=require(_0x0a9e('0x8'));var crypto=require('crypto');var jsforce=require(_0x0a9e('0x9'));var deskjs=require(_0x0a9e('0xa'));var toCsv=require(_0x0a9e('0x5'));var querystring=require('querystring');var Papa=require('papaparse');var qs=require(_0x0a9e('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x0a9e('0xc'));var config=require(_0x0a9e('0xd'));var db=require(_0x0a9e('0xe'))['db'];function respondWithStatusCode(_0x3ab53f,_0xfeb75b){_0xfeb75b=_0xfeb75b||0xcc;return function(_0xbd1168){if(_0xbd1168){return _0x3ab53f['sendStatus'](_0xfeb75b);}return _0x3ab53f['status'](_0xfeb75b)['end']();};}function respondWithResult(_0x4cfe67,_0x273d4d){_0x273d4d=_0x273d4d||0xc8;return function(_0x36471c){if(_0x36471c){return _0x4cfe67[_0x0a9e('0xf')](_0x273d4d)[_0x0a9e('0x10')](_0x36471c);}};}function respondWithFilteredResult(_0x32d742,_0x69aeb7){return function(_0x5db4b0){if(_0x5db4b0){var _0x4283ce=_0x5db4b0[_0x0a9e('0x11')],_0x239b12=_0x69aeb7[_0x0a9e('0x12')],_0x2b4227=_0x69aeb7['offset']+_0x69aeb7[_0x0a9e('0x13')],_0x281129;if(_0x2b4227>=_0x4283ce){_0x2b4227=_0x4283ce;_0x281129=0xc8;}else{_0x281129=0xce;}_0x32d742['status'](_0x281129);return _0x32d742[_0x0a9e('0x14')]('Content-Range',_0x239b12+'-'+_0x2b4227+'/'+_0x4283ce)[_0x0a9e('0x10')](_0x5db4b0);}return null;};}function patchUpdates(_0x12066b){return function(_0x48f32d){try{jsonpatch[_0x0a9e('0x15')](_0x48f32d,_0x12066b,!![]);}catch(_0x5a0a06){return BPromise[_0x0a9e('0x16')](_0x5a0a06);}return _0x48f32d[_0x0a9e('0x17')]();};}function saveUpdates(_0x106033,_0x205fd6){return function(_0x31b1ca){if(_0x31b1ca){return _0x31b1ca[_0x0a9e('0x18')](_0x106033)[_0x0a9e('0x19')](function(_0x20559e){return _0x20559e;});}return null;};}function removeEntity(_0x1314ae,_0x112016){return function(_0x1c696a){if(_0x1c696a){return _0x1c696a[_0x0a9e('0x1a')]()['then'](function(){_0x1314ae[_0x0a9e('0xf')](0xcc)[_0x0a9e('0x1b')]();});}};}function handleEntityNotFound(_0x53682f,_0x20f109){return function(_0x5a09ef){if(!_0x5a09ef){_0x53682f['sendStatus'](0x194);}return _0x5a09ef;};}function handleError(_0x3a02e1,_0x432e56){_0x432e56=_0x432e56||0x1f4;return function(_0x38e7c4){logger[_0x0a9e('0x1c')](_0x38e7c4['stack']);if(_0x38e7c4[_0x0a9e('0x1d')]){delete _0x38e7c4[_0x0a9e('0x1d')];}_0x3a02e1[_0x0a9e('0xf')](_0x432e56)[_0x0a9e('0x1e')](_0x38e7c4);};}exports[_0x0a9e('0x1f')]=function(_0x42ac8f,_0x16b1ca){var _0x5ea472={},_0x59181e={},_0x197ec0={'count':0x0,'rows':[]};var _0x3a8e58=db[_0x0a9e('0x20')][_0x0a9e('0x21')];_0x59181e['model']=_[_0x0a9e('0x22')](_0x3a8e58);var _0x479bc4={'dateStart':_0x42ac8f[_0x0a9e('0x23')]['dateStart'],'dateEnd':_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x24')]};delete _0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x25')];delete _0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x24')];_0x59181e[_0x0a9e('0x23')]=_[_0x0a9e('0x22')](_0x42ac8f['query']);_0x59181e[_0x0a9e('0x26')]=_[_0x0a9e('0x27')](_0x59181e[_0x0a9e('0x28')],_0x59181e[_0x0a9e('0x23')]);_0x5ea472['attributes']=_[_0x0a9e('0x27')](_0x59181e[_0x0a9e('0x28')],qs[_0x0a9e('0x29')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0x5ea472[_0x0a9e('0x2a')]=_0x5ea472[_0x0a9e('0x2a')][_0x0a9e('0x2b')]?_0x5ea472[_0x0a9e('0x2a')]:_0x59181e['model'];if(!_0x42ac8f[_0x0a9e('0x23')]['hasOwnProperty'](_0x0a9e('0x2c'))){_0x5ea472[_0x0a9e('0x13')]=qs[_0x0a9e('0x13')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x13')]);_0x5ea472['offset']=qs[_0x0a9e('0x12')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x12')]);}_0x5ea472[_0x0a9e('0x2d')]=qs[_0x0a9e('0x2e')](_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x2e')]);_0x5ea472[_0x0a9e('0x2f')]=qs['filters'](_[_0x0a9e('0x30')](_0x42ac8f['query'],_0x59181e[_0x0a9e('0x26')]));if(_0x479bc4[_0x0a9e('0x25')]){if(_0x479bc4[_0x0a9e('0x24')]){_0x479bc4[_0x0a9e('0x24')]=moment(_0x479bc4['dateEnd'])[_0x0a9e('0x31')](0x1,_0x0a9e('0x32'));}else{_0x479bc4[_0x0a9e('0x24')]=moment(_0x479bc4[_0x0a9e('0x25')])['add'](0x1,'day');}_[_0x0a9e('0x33')](_0x5ea472['where'],{'createdAt':{'$gte':_0x479bc4[_0x0a9e('0x25')],'$lte':_0x479bc4[_0x0a9e('0x24')]}});}if(_0x42ac8f[_0x0a9e('0x23')][_0x0a9e('0x34')]){_0x5ea472['where']=_[_0x0a9e('0x33')](_0x5ea472[_0x0a9e('0x2f')],{'$or':_[_0x0a9e('0x35')](_0x5ea472['attributes'],function(_0x1dbf74){var _0x1a180b={};_0x1a180b[_0x1dbf74]={'$like':'%'+_0x42ac8f[_0x0a9e('0x23')]['filter']+'%'};return _0x1a180b;})});}_0x5ea472=_['merge']({},_0x5ea472,_0x42ac8f[_0x0a9e('0x36')]);var _0x40d766={'where':_0x5ea472['where']};return db[_0x0a9e('0x20')][_0x0a9e('0x11')](_0x40d766)[_0x0a9e('0x19')](function(_0x148f55){_0x197ec0['count']=_0x148f55;if(_0x42ac8f['query'][_0x0a9e('0x37')]){_0x5ea472[_0x0a9e('0x38')]=[{'all':!![]}];}return db['VoiceMusicOnHold'][_0x0a9e('0x39')](_0x5ea472);})[_0x0a9e('0x19')](function(_0x1459bb){_0x197ec0['rows']=_0x1459bb;return _0x197ec0;})[_0x0a9e('0x19')](respondWithFilteredResult(_0x16b1ca,_0x5ea472))[_0x0a9e('0x3a')](handleError(_0x16b1ca,null));};exports[_0x0a9e('0x3b')]=function(_0x43dd5b,_0x13cb1f){var _0xeaa5e5={'raw':![],'where':{'id':_0x43dd5b[_0x0a9e('0x3c')]['id']}},_0x2881b3={};_0x2881b3[_0x0a9e('0x28')]=_[_0x0a9e('0x22')](db[_0x0a9e('0x20')][_0x0a9e('0x21')]);_0x2881b3[_0x0a9e('0x23')]=_[_0x0a9e('0x22')](_0x43dd5b[_0x0a9e('0x23')]);_0x2881b3['filters']=_['intersection'](_0x2881b3[_0x0a9e('0x28')],_0x2881b3[_0x0a9e('0x23')]);_0xeaa5e5[_0x0a9e('0x2a')]=_[_0x0a9e('0x27')](_0x2881b3[_0x0a9e('0x28')],qs[_0x0a9e('0x29')](_0x43dd5b[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0xeaa5e5[_0x0a9e('0x2a')]=_0xeaa5e5[_0x0a9e('0x2a')][_0x0a9e('0x2b')]?_0xeaa5e5[_0x0a9e('0x2a')]:_0x2881b3['model'];if(_0x43dd5b[_0x0a9e('0x23')][_0x0a9e('0x37')]){_0xeaa5e5[_0x0a9e('0x38')]=[{'all':!![]}];}_0xeaa5e5=_[_0x0a9e('0x33')]({},_0xeaa5e5,_0x43dd5b[_0x0a9e('0x36')]);return db[_0x0a9e('0x20')][_0x0a9e('0x3d')](_0xeaa5e5)[_0x0a9e('0x19')](handleEntityNotFound(_0x13cb1f,null))['then'](respondWithResult(_0x13cb1f,null))[_0x0a9e('0x3a')](handleError(_0x13cb1f,null));};exports['update']=function(_0x473dc8,_0x476688){if(_0x473dc8[_0x0a9e('0x3e')]['id']){delete _0x473dc8['body']['id'];}return db[_0x0a9e('0x20')][_0x0a9e('0x3d')]({'where':{'id':_0x473dc8[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x19')](handleEntityNotFound(_0x476688,null))[_0x0a9e('0x19')](saveUpdates(_0x473dc8[_0x0a9e('0x3e')],null))[_0x0a9e('0x19')](respondWithResult(_0x476688,null))['catch'](handleError(_0x476688,null));};exports[_0x0a9e('0x3f')]=function(_0x1bde3c,_0x1b5e80,_0x16f976){return db[_0x0a9e('0x40')][_0x0a9e('0x41')](function(_0x6054ee){if(_0x1bde3c[_0x0a9e('0x3e')][_0x0a9e('0x42')]==='files'){_0x1bde3c[_0x0a9e('0x3e')][_0x0a9e('0x43')]=path['join'](config['root'],'server/files/moh',_0x1bde3c[_0x0a9e('0x3e')][_0x0a9e('0x1d')]);}return db[_0x0a9e('0x20')][_0x0a9e('0x3f')](_0x1bde3c[_0x0a9e('0x3e')],{'transaction':_0x6054ee})[_0x0a9e('0x19')](function(_0x2e5165){if(_0x1bde3c[_0x0a9e('0x3e')]['mode']==='files'){fs['mkdirSync'](_0x2e5165[_0x0a9e('0x43')],parseInt(_0x0a9e('0x44'),0x8));}return _0x2e5165;});})[_0x0a9e('0x19')](respondWithResult(_0x1b5e80,0xc9))['catch'](handleError(_0x1b5e80,null));};exports[_0x0a9e('0x1a')]=function(_0x161aa7,_0x53d113,_0x5a88da){var _0x2ef381;return db['VoiceMusicOnHold'][_0x0a9e('0x3d')]({'where':{'id':_0x161aa7['params']['id']}})[_0x0a9e('0x19')](function(_0x3c20b2){if(_0x3c20b2){return db[_0x0a9e('0x40')]['transaction'](function(_0x2f82da){return _0x3c20b2[_0x0a9e('0x1a')]({'transaction':_0x2f82da,'raw':!![]})['then'](function(_0x50f687){if(_0x50f687[_0x0a9e('0x43')]){fs[_0x0a9e('0x45')](_0x50f687['directory'])[_0x0a9e('0x46')](function(_0x5ce9ac){fs[_0x0a9e('0x47')](path['join'](_0x50f687[_0x0a9e('0x43')],_0x5ce9ac));});fs['rmdirSync'](_0x50f687['directory']);}return _0x50f687;});})['catch'](function(_0x2da03c){throw new db['Sequelize'][(_0x0a9e('0x48'))](_0x2da03c[_0x0a9e('0x49')]);});}})[_0x0a9e('0x19')](handleEntityNotFound(_0x53d113,null))[_0x0a9e('0x19')](removeEntity(_0x53d113,null))[_0x0a9e('0x3a')](handleError(_0x53d113,null));};exports[_0x0a9e('0x4a')]=function(_0xd10662,_0x28d814,_0x4e67ab){return db[_0x0a9e('0x40')][_0x0a9e('0x41')](function(_0x2642bb){var _0x30c491;return db[_0x0a9e('0x20')][_0x0a9e('0x3d')]({'where':{'id':_0xd10662['params']['id']}})[_0x0a9e('0x19')](function(_0x26bc80){if(_0x26bc80){_0x30c491=_0x26bc80;return _0x26bc80['addSound'](_0xd10662[_0x0a9e('0x3e')]['id'],{'transaction':_0x2642bb});}})['then'](function(_0x20c668){if(_0x20c668){return db['Sound']['findOne']({'where':{'id':_0xd10662['body']['id']},'attributes':['id',_0x0a9e('0x1d'),'save_name',_0x0a9e('0x4b'),_0x0a9e('0x4c')],'raw':!![]});}})[_0x0a9e('0x19')](function(_0x7be420){if(_0x7be420){var _0x1cca9f=path[_0x0a9e('0x4d')](config['root'],_0x0a9e('0x4e'),util['format'](_0x0a9e('0x4f'),path[_0x0a9e('0x50')](_0x7be420[_0x0a9e('0x51')],path['extname'](_0x7be420[_0x0a9e('0x51')])),_0x7be420[_0x0a9e('0x4b')]));var _0x119677=path[_0x0a9e('0x4d')](config['root'],_0x0a9e('0x52'),_0x30c491[_0x0a9e('0x1d')],util['format'](_0x0a9e('0x4f'),_0x7be420[_0x0a9e('0x1d')],_0x7be420[_0x0a9e('0x4b')]));fs[_0x0a9e('0x53')](_0x1cca9f,_0x119677);return _0x7be420;}})[_0x0a9e('0x3a')](function(_0x4d4a35){throw new db[(_0x0a9e('0x54'))][(_0x0a9e('0x48'))](_0x4d4a35[_0x0a9e('0x49')]);});})['then'](handleEntityNotFound(_0x28d814,null))[_0x0a9e('0x19')](respondWithResult(_0x28d814,0xc9))['catch'](handleError(_0x28d814,null));};exports['removeSound']=function(_0x242745,_0x4556c5,_0x9375fb){return db[_0x0a9e('0x40')][_0x0a9e('0x41')](function(_0xc8c264){var _0x387489;return db[_0x0a9e('0x20')][_0x0a9e('0x55')]({'where':{'id':_0x242745[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x19')](handleEntityNotFound(_0x4556c5,null))[_0x0a9e('0x19')](function(_0x2bbb86){if(_0x2bbb86){_0x387489=_0x2bbb86;return _0x2bbb86[_0x0a9e('0x56')](_0x242745[_0x0a9e('0x3c')][_0x0a9e('0x57')]);}})[_0x0a9e('0x19')](function(_0x4257c9){if(_0x4257c9){return db['Sound'][_0x0a9e('0x55')]({'where':{'id':_0x242745[_0x0a9e('0x3c')][_0x0a9e('0x57')]},'attributes':['id','name',_0x0a9e('0x51'),_0x0a9e('0x4b'),'createdAt'],'raw':!![]});}})[_0x0a9e('0x19')](function(_0x56e31e){if(_0x56e31e){fs[_0x0a9e('0x47')](path[_0x0a9e('0x4d')](_0x387489[_0x0a9e('0x43')],util['format']('%s.%s',_0x56e31e['name'],_0x56e31e[_0x0a9e('0x4b')])));return _0x56e31e;}})[_0x0a9e('0x3a')](function(_0x1104ad){throw new db[(_0x0a9e('0x54'))][(_0x0a9e('0x48'))](_0x1104ad[_0x0a9e('0x49')]);});})[_0x0a9e('0x19')](handleEntityNotFound(_0x4556c5,null))[_0x0a9e('0x19')](respondWithStatusCode(_0x4556c5,0xcc))['catch'](handleError(_0x4556c5,null));};exports[_0x0a9e('0x58')]=function(_0xcbc8b2,_0x12ccdb,_0x4a4fc7){var _0x2bdc44={};var _0x583b2e={};var _0x4437ff;var _0x44351d;return db['VoiceMusicOnHold'][_0x0a9e('0x55')]({'where':{'id':_0xcbc8b2[_0x0a9e('0x3c')]['id']}})[_0x0a9e('0x19')](handleEntityNotFound(_0x12ccdb,null))[_0x0a9e('0x19')](function(_0x542ece){if(_0x542ece){_0x4437ff=_0x542ece;_0x583b2e[_0x0a9e('0x28')]=_[_0x0a9e('0x22')](db[_0x0a9e('0x59')][_0x0a9e('0x21')]);_0x583b2e['query']=_[_0x0a9e('0x22')](_0xcbc8b2[_0x0a9e('0x23')]);_0x583b2e[_0x0a9e('0x26')]=_[_0x0a9e('0x27')](_0x583b2e['model'],_0x583b2e[_0x0a9e('0x23')]);_0x2bdc44[_0x0a9e('0x2a')]=_[_0x0a9e('0x27')](_0x583b2e[_0x0a9e('0x28')],qs[_0x0a9e('0x29')](_0xcbc8b2[_0x0a9e('0x23')][_0x0a9e('0x29')]));_0x2bdc44[_0x0a9e('0x2a')]=_0x2bdc44[_0x0a9e('0x2a')][_0x0a9e('0x2b')]?_0x2bdc44[_0x0a9e('0x2a')]:_0x583b2e[_0x0a9e('0x28')];_0x2bdc44[_0x0a9e('0x2d')]=qs[_0x0a9e('0x2e')](_0xcbc8b2['query'][_0x0a9e('0x2e')]);_0x2bdc44[_0x0a9e('0x2f')]=qs[_0x0a9e('0x26')](_['pick'](_0xcbc8b2[_0x0a9e('0x23')],_0x583b2e[_0x0a9e('0x26')]));if(_0xcbc8b2[_0x0a9e('0x23')][_0x0a9e('0x34')]){_0x2bdc44['where']=_['merge'](_0x2bdc44[_0x0a9e('0x2f')],{'$or':_[_0x0a9e('0x35')](_0x2bdc44['attributes'],function(_0x45108c){var _0x53a6a1={};_0x53a6a1[_0x45108c]={'$like':'%'+_0xcbc8b2[_0x0a9e('0x23')][_0x0a9e('0x34')]+'%'};return _0x53a6a1;})});}_0x2bdc44=_['merge']({},_0x2bdc44,_0xcbc8b2[_0x0a9e('0x36')]);return _0x4437ff[_0x0a9e('0x58')](_0x2bdc44);}})[_0x0a9e('0x19')](function(_0x42b959){if(_0x42b959){_0x44351d=_0x42b959[_0x0a9e('0x2b')];if(!_0xcbc8b2[_0x0a9e('0x23')][_0x0a9e('0x5a')]('nolimit')){_0x2bdc44[_0x0a9e('0x13')]=qs[_0x0a9e('0x13')](_0xcbc8b2[_0x0a9e('0x23')][_0x0a9e('0x13')]);_0x2bdc44['offset']=qs[_0x0a9e('0x12')](_0xcbc8b2[_0x0a9e('0x23')]['offset']);}return _0x4437ff[_0x0a9e('0x58')](_0x2bdc44);}})['then'](function(_0x163710){if(_0x163710){return _0x163710?{'count':_0x44351d,'rows':_0x163710}:null;}})[_0x0a9e('0x19')](respondWithResult(_0x12ccdb,null))[_0x0a9e('0x3a')](handleError(_0x12ccdb,null));};
\ No newline at end of file
index d00c437..699b2a4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x02d8=['api','moment','define','VoiceMusicOnHold','voice_musiconhold','../../config/logger'];(function(_0x57b1d6,_0x169061){var _0x511b17=function(_0x55d69f){while(--_0x55d69f){_0x57b1d6['push'](_0x57b1d6['shift']());}};_0x511b17(++_0x169061);}(_0x02d8,0x11f));var _0x802d=function(_0x465d16,_0x3546b5){_0x465d16=_0x465d16-0x0;var _0x34c91a=_0x02d8[_0x465d16];return _0x34c91a;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x802d('0x0'))(_0x802d('0x1'));var moment=require(_0x802d('0x2'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require('./voiceMusicOnHold.attributes');module['exports']=function(_0xde4f00,_0x366e54){return _0xde4f00[_0x802d('0x3')](_0x802d('0x4'),attributes,{'tableName':_0x802d('0x5'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5620=['VoiceMusicOnHold','voice_musiconhold','lodash','../../config/logger','api','./voiceMusicOnHold.attributes','define'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x5620,0xbf));var _0x0562=function(_0x101a17,_0x5d047a){_0x101a17=_0x101a17-0x0;var _0x3b76ee=_0x5620[_0x101a17];return _0x3b76ee;};'use strict';var _=require(_0x0562('0x0'));var util=require('util');var logger=require(_0x0562('0x1'))(_0x0562('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x0562('0x3'));module['exports']=function(_0x18ea87,_0x530400){return _0x18ea87[_0x0562('0x4')](_0x0562('0x5'),attributes,{'tableName':_0x0562('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1057615..45c89d7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9dbf=['../../config/environment','jayson/promise','http','request','then','info','VoiceMusicOnHold,\x20%s,\x20%s','VoiceMusicOnHold,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','lodash','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0xa2651d,_0x15de52){var _0x3fb302=function(_0x4508b3){while(--_0x4508b3){_0xa2651d['push'](_0xa2651d['shift']());}};_0x3fb302(++_0x15de52);}(_0x9dbf,0x99));var _0xf9db=function(_0x5a0dfe,_0x4ccd61){_0x5a0dfe=_0x5a0dfe-0x0;var _0x321d91=_0x9dbf[_0x5a0dfe];return _0x321d91;};'use strict';var _=require(_0xf9db('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xf9db('0x1'));var rs=require(_0xf9db('0x2'));var fs=require('fs');var db=require(_0xf9db('0x3'))['db'];var utils=require(_0xf9db('0x4'));var logger=require(_0xf9db('0x5'))(_0xf9db('0x6'));var config=require(_0xf9db('0x7'));var jayson=require(_0xf9db('0x8'));var client=jayson['client'][_0xf9db('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x127970,_0x243e22,_0xd42310){return new BPromise(function(_0x50b2ba,_0x2a22e6){return client[_0xf9db('0xa')](_0x127970,_0xd42310)[_0xf9db('0xb')](function(_0xdae46){logger[_0xf9db('0xc')](_0xf9db('0xd'),_0x243e22,'request\x20sent');logger['debug'](_0xf9db('0xe'),_0x243e22,_0xf9db('0xf'),JSON['stringify'](_0xdae46));if(_0xdae46[_0xf9db('0x10')]){if(_0xdae46['error'][_0xf9db('0x11')]===0x1f4){logger[_0xf9db('0x10')]('VoiceMusicOnHold,\x20%s,\x20%s',_0x243e22,_0xdae46[_0xf9db('0x10')][_0xf9db('0x12')]);return _0x2a22e6(_0xdae46['error'][_0xf9db('0x12')]);}logger['error'](_0xf9db('0xd'),_0x243e22,_0xdae46['error']['message']);return _0x50b2ba(_0xdae46['error'][_0xf9db('0x12')]);}else{logger['info'](_0xf9db('0xd'),_0x243e22,_0xf9db('0xf'));_0x50b2ba(_0xdae46[_0xf9db('0x13')]['message']);}})['catch'](function(_0x26b672){logger['error'](_0xf9db('0xd'),_0x243e22,_0x26b672);_0x2a22e6(_0x26b672);});});}
\ No newline at end of file
+var _0xd42d=['http','request','then','info','VoiceMusicOnHold,\x20%s,\x20%s','request\x20sent','debug','VoiceMusicOnHold,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x323591,_0x518650){var _0x423982=function(_0x1b7a15){while(--_0x1b7a15){_0x323591['push'](_0x323591['shift']());}};_0x423982(++_0x518650);}(_0xd42d,0x1d5));var _0xdd42=function(_0x66454d,_0x4ddf22){_0x66454d=_0x66454d-0x0;var _0x4eb726=_0xd42d[_0x66454d];return _0x4eb726;};'use strict';var _=require(_0xdd42('0x0'));var util=require(_0xdd42('0x1'));var moment=require(_0xdd42('0x2'));var BPromise=require(_0xdd42('0x3'));var rs=require(_0xdd42('0x4'));var fs=require('fs');var db=require(_0xdd42('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xdd42('0x6'))(_0xdd42('0x7'));var config=require(_0xdd42('0x8'));var jayson=require(_0xdd42('0x9'));var client=jayson[_0xdd42('0xa')][_0xdd42('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x50ab49,_0x2dd3c3,_0x4a7d07){return new BPromise(function(_0x373ef3,_0x53a3c5){return client[_0xdd42('0xc')](_0x50ab49,_0x4a7d07)[_0xdd42('0xd')](function(_0x39f196){logger[_0xdd42('0xe')](_0xdd42('0xf'),_0x2dd3c3,_0xdd42('0x10'));logger[_0xdd42('0x11')](_0xdd42('0x12'),_0x2dd3c3,'request\x20sent',JSON[_0xdd42('0x13')](_0x39f196));if(_0x39f196[_0xdd42('0x14')]){if(_0x39f196['error'][_0xdd42('0x15')]===0x1f4){logger['error']('VoiceMusicOnHold,\x20%s,\x20%s',_0x2dd3c3,_0x39f196[_0xdd42('0x14')][_0xdd42('0x16')]);return _0x53a3c5(_0x39f196[_0xdd42('0x14')]['message']);}logger[_0xdd42('0x14')](_0xdd42('0xf'),_0x2dd3c3,_0x39f196[_0xdd42('0x14')][_0xdd42('0x16')]);return _0x373ef3(_0x39f196['error'][_0xdd42('0x16')]);}else{logger[_0xdd42('0xe')](_0xdd42('0xf'),_0x2dd3c3,_0xdd42('0x10'));_0x373ef3(_0x39f196[_0xdd42('0x17')][_0xdd42('0x16')]);}})['catch'](function(_0x215367){logger[_0xdd42('0x14')]('VoiceMusicOnHold,\x20%s,\x20%s',_0x2dd3c3,_0x215367);_0x53a3c5(_0x215367);});});}
\ No newline at end of file
index d9e9fa6..8bfce2d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6052=['create','post','addAgents','delete','/:id','destroy','removeAgents','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voicePrefix.controller','get','isAuthenticated','index','/describe','describe','/:id/users','getAgents'];(function(_0x4f4ddd,_0x555817){var _0x3f4476=function(_0x4f6b32){while(--_0x4f6b32){_0x4f4ddd['push'](_0x4f4ddd['shift']());}};_0x3f4476(++_0x555817);}(_0x6052,0xb0));var _0x2605=function(_0x1c0465,_0x44a6f0){_0x1c0465=_0x1c0465-0x0;var _0x583bfc=_0x6052[_0x1c0465];return _0x583bfc;};'use strict';var multer=require(_0x2605('0x0'));var util=require(_0x2605('0x1'));var path=require(_0x2605('0x2'));var express=require(_0x2605('0x3'));var router=express[_0x2605('0x4')]();var auth=require(_0x2605('0x5'));var interaction=require(_0x2605('0x6'));var config=require(_0x2605('0x7'));var controller=require(_0x2605('0x8'));router[_0x2605('0x9')]('/',auth[_0x2605('0xa')](),controller[_0x2605('0xb')]);router[_0x2605('0x9')](_0x2605('0xc'),auth['isAuthenticated'](),controller[_0x2605('0xd')]);router['get']('/:id',auth[_0x2605('0xa')](),controller['show']);router['get'](_0x2605('0xe'),auth[_0x2605('0xa')](),controller[_0x2605('0xf')]);router['post']('/',auth[_0x2605('0xa')](),controller[_0x2605('0x10')]);router[_0x2605('0x11')](_0x2605('0xe'),auth[_0x2605('0xa')](),controller[_0x2605('0x12')]);router['put']('/:id',auth[_0x2605('0xa')](),controller['update']);router[_0x2605('0x13')](_0x2605('0x14'),auth[_0x2605('0xa')](),controller[_0x2605('0x15')]);router[_0x2605('0x13')](_0x2605('0xe'),auth[_0x2605('0xa')](),controller[_0x2605('0x16')]);module[_0x2605('0x17')]=router;
\ No newline at end of file
+var _0xd4ed=['show','/:id/users','addAgents','put','delete','destroy','removeAgents','multer','util','path','express','../../components/auth/service','./voicePrefix.controller','get','isAuthenticated','index','/describe','/:id'];(function(_0x243fc1,_0x122011){var _0x20948a=function(_0x1b5c2e){while(--_0x1b5c2e){_0x243fc1['push'](_0x243fc1['shift']());}};_0x20948a(++_0x122011);}(_0xd4ed,0x73));var _0xdd4e=function(_0x468d9d,_0x48bba9){_0x468d9d=_0x468d9d-0x0;var _0xdce6b6=_0xd4ed[_0x468d9d];return _0xdce6b6;};'use strict';var multer=require(_0xdd4e('0x0'));var util=require(_0xdd4e('0x1'));var path=require(_0xdd4e('0x2'));var express=require(_0xdd4e('0x3'));var router=express['Router']();var auth=require(_0xdd4e('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xdd4e('0x5'));router[_0xdd4e('0x6')]('/',auth[_0xdd4e('0x7')](),controller[_0xdd4e('0x8')]);router[_0xdd4e('0x6')](_0xdd4e('0x9'),auth['isAuthenticated'](),controller['describe']);router[_0xdd4e('0x6')](_0xdd4e('0xa'),auth['isAuthenticated'](),controller[_0xdd4e('0xb')]);router[_0xdd4e('0x6')](_0xdd4e('0xc'),auth[_0xdd4e('0x7')](),controller['getAgents']);router['post']('/',auth['isAuthenticated'](),controller['create']);router['post'](_0xdd4e('0xc'),auth['isAuthenticated'](),controller[_0xdd4e('0xd')]);router[_0xdd4e('0xe')]('/:id',auth[_0xdd4e('0x7')](),controller['update']);router[_0xdd4e('0xf')](_0xdd4e('0xa'),auth['isAuthenticated'](),controller[_0xdd4e('0x10')]);router[_0xdd4e('0xf')](_0xdd4e('0xc'),auth[_0xdd4e('0x7')](),controller[_0xdd4e('0x11')]);module['exports']=router;
\ No newline at end of file
index 94ad97d..b24406f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d30=['INTEGER','sequelize','exports','STRING','name','VIRTUAL','system-'];(function(_0x20187f,_0xbf67c9){var _0x398db5=function(_0x3b7ac2){while(--_0x3b7ac2){_0x20187f['push'](_0x20187f['shift']());}};_0x398db5(++_0xbf67c9);}(_0x4d30,0x1e4));var _0x04d3=function(_0x561d50,_0xf859df){_0x561d50=_0x561d50-0x0;var _0x277e39=_0x4d30[_0x561d50];return _0x277e39;};'use strict';var Sequelize=require(_0x04d3('0x0'));module[_0x04d3('0x1')]={'name':{'type':Sequelize[_0x04d3('0x2')],'allowNull':![],'unique':_0x04d3('0x3')},'prefix':{'type':Sequelize[_0x04d3('0x4')],'get':function(_0x18ffed){return _0x04d3('0x5')+this['getDataValue'](_0x04d3('0x3'))+'-';}},'description':{'type':Sequelize['STRING']},'callerIdAll':{'type':Sequelize['STRING']},'VoiceExtensionId':{'type':Sequelize[_0x04d3('0x6')]}};
\ No newline at end of file
+var _0xbbd8=['INTEGER','STRING','name','VIRTUAL','system-','getDataValue'];(function(_0x44a518,_0x15e102){var _0x5dfd7e=function(_0x4d6e97){while(--_0x4d6e97){_0x44a518['push'](_0x44a518['shift']());}};_0x5dfd7e(++_0x15e102);}(_0xbbd8,0x19f));var _0x8bbd=function(_0x435187,_0x4138f5){_0x435187=_0x435187-0x0;var _0x105aaf=_0xbbd8[_0x435187];return _0x105aaf;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0x8bbd('0x0')],'allowNull':![],'unique':_0x8bbd('0x1')},'prefix':{'type':Sequelize[_0x8bbd('0x2')],'get':function(_0x34392d){return _0x8bbd('0x3')+this[_0x8bbd('0x4')](_0x8bbd('0x1'))+'-';}},'description':{'type':Sequelize[_0x8bbd('0x0')]},'callerIdAll':{'type':Sequelize[_0x8bbd('0x0')]},'VoiceExtensionId':{'type':Sequelize[_0x8bbd('0x5')]}};
\ No newline at end of file
index 507cf7c..a2c0697 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0531=['omit','spread','userVoicePrefix:save','removeAgents','emit','userVoicePrefix:remove','getAgents','findOne','User','hasOwnProperty','fast-json-patch','request-promise','mustache','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','socket.io-emitter','register','sendStatus','status','end','json','offset','set','Content-Range','apply','reject','then','index','rawAttributes','keys','query','dateStart','dateEnd','filters','model','intersection','fields','attributes','length','nolimit','limit','order','sort','pick','add','day','merge','where','filter','map','options','VoicePrefix','count','includeAll','include','findAll','rows','catch','show','params','destroy','describe','create','sequelize','transaction','body','get','find','VoiceExtensionId','context','from-sip','app','system','priority','appdata','prefix','NoOp','Voice\x20Prefix','VoiceExtension','VoicePrefixId','bulkCreate','push','name','callerIdAll','Set','PREFIX-CALLERIDALL=','goto','${EXTEN:','charAt','update','system-','findById','addAgents','ids'];(function(_0x42525d,_0x34170e){var _0x37d7db=function(_0x3de174){while(--_0x3de174){_0x42525d['push'](_0x42525d['shift']());}};_0x37d7db(++_0x34170e);}(_0x0531,0xde));var _0x1053=function(_0x458363,_0x1675db){_0x458363=_0x458363-0x0;var _0x4d0290=_0x0531[_0x458363];return _0x4d0290;};'use strict';var jsonpatch=require(_0x1053('0x0'));var rp=require(_0x1053('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x1053('0x2'));var util=require('util');var path=require('path');var sox=require(_0x1053('0x3'));var csv=require(_0x1053('0x4'));var ejs=require(_0x1053('0x5'));var fs=require('fs');var _=require(_0x1053('0x6'));var squel=require(_0x1053('0x7'));var crypto=require(_0x1053('0x8'));var jsforce=require(_0x1053('0x9'));var deskjs=require(_0x1053('0xa'));var toCsv=require(_0x1053('0x4'));var querystring=require(_0x1053('0xb'));var Papa=require('papaparse');var qs=require(_0x1053('0xc'));var logger=require(_0x1053('0xd'))(_0x1053('0xe'));var utils=require('../../config/utils');var config=require(_0x1053('0xf'));var db=require(_0x1053('0x10'))['db'];var socket=require(_0x1053('0x11'))({'host':'localhost','port':0x18eb});require('./voicePrefix.socket')[_0x1053('0x12')](socket);function respondWithStatusCode(_0x47f9b7,_0x57a8fa){_0x57a8fa=_0x57a8fa||0xcc;return function(_0x18323a){if(_0x18323a){return _0x47f9b7[_0x1053('0x13')](_0x57a8fa);}return _0x47f9b7[_0x1053('0x14')](_0x57a8fa)[_0x1053('0x15')]();};}function respondWithResult(_0x44b763,_0x28e0ae){_0x28e0ae=_0x28e0ae||0xc8;return function(_0x1a8dbc){if(_0x1a8dbc){return _0x44b763[_0x1053('0x14')](_0x28e0ae)[_0x1053('0x16')](_0x1a8dbc);}};}function respondWithFilteredResult(_0x2884b2,_0x5f477d){return function(_0x4d6aa1){if(_0x4d6aa1){var _0x7ca740=_0x4d6aa1['count'],_0x2e5b96=_0x5f477d[_0x1053('0x17')],_0x41bf5c=_0x5f477d[_0x1053('0x17')]+_0x5f477d['limit'],_0x4db31d;if(_0x41bf5c>=_0x7ca740){_0x41bf5c=_0x7ca740;_0x4db31d=0xc8;}else{_0x4db31d=0xce;}_0x2884b2['status'](_0x4db31d);return _0x2884b2[_0x1053('0x18')](_0x1053('0x19'),_0x2e5b96+'-'+_0x41bf5c+'/'+_0x7ca740)[_0x1053('0x16')](_0x4d6aa1);}return null;};}function patchUpdates(_0x26c285){return function(_0x5301fc){try{jsonpatch[_0x1053('0x1a')](_0x5301fc,_0x26c285,!![]);}catch(_0x30e687){return BPromise[_0x1053('0x1b')](_0x30e687);}return _0x5301fc['save']();};}function saveUpdates(_0x259fb6,_0x54be7a){return function(_0xd7f210){if(_0xd7f210){return _0xd7f210['update'](_0x259fb6)['then'](function(_0x1b7f9e){return _0x1b7f9e;});}return null;};}function removeEntity(_0x448651,_0x98ea93){return function(_0x53a626){if(_0x53a626){return _0x53a626['destroy']()[_0x1053('0x1c')](function(){_0x448651[_0x1053('0x14')](0xcc)[_0x1053('0x15')]();});}};}function handleEntityNotFound(_0x27371a,_0x5a1065){return function(_0x88aa73){if(!_0x88aa73){_0x27371a['sendStatus'](0x194);}return _0x88aa73;};}function handleError(_0x2a13a7,_0x485f14){_0x485f14=_0x485f14||0x1f4;return function(_0x901db2){logger['error'](_0x901db2['stack']);if(_0x901db2['name']){delete _0x901db2['name'];}_0x2a13a7[_0x1053('0x14')](_0x485f14)['send'](_0x901db2);};}exports[_0x1053('0x1d')]=function(_0x219582,_0x136541){var _0x25f17e={},_0x1132f={},_0x15f581={'count':0x0,'rows':[]};var _0x2c7c39=db['VoicePrefix'][_0x1053('0x1e')];_0x1132f['model']=_[_0x1053('0x1f')](_0x2c7c39);var _0x2a4b4a={'dateStart':_0x219582[_0x1053('0x20')][_0x1053('0x21')],'dateEnd':_0x219582[_0x1053('0x20')][_0x1053('0x22')]};delete _0x219582[_0x1053('0x20')][_0x1053('0x21')];delete _0x219582[_0x1053('0x20')][_0x1053('0x22')];_0x1132f[_0x1053('0x20')]=_[_0x1053('0x1f')](_0x219582[_0x1053('0x20')]);_0x1132f[_0x1053('0x23')]=_['intersection'](_0x1132f[_0x1053('0x24')],_0x1132f[_0x1053('0x20')]);_0x25f17e['attributes']=_[_0x1053('0x25')](_0x1132f[_0x1053('0x24')],qs[_0x1053('0x26')](_0x219582[_0x1053('0x20')][_0x1053('0x26')]));_0x25f17e[_0x1053('0x27')]=_0x25f17e[_0x1053('0x27')][_0x1053('0x28')]?_0x25f17e[_0x1053('0x27')]:_0x1132f[_0x1053('0x24')];if(!_0x219582[_0x1053('0x20')]['hasOwnProperty'](_0x1053('0x29'))){_0x25f17e[_0x1053('0x2a')]=qs[_0x1053('0x2a')](_0x219582[_0x1053('0x20')]['limit']);_0x25f17e[_0x1053('0x17')]=qs[_0x1053('0x17')](_0x219582[_0x1053('0x20')][_0x1053('0x17')]);}_0x25f17e[_0x1053('0x2b')]=qs[_0x1053('0x2c')](_0x219582[_0x1053('0x20')][_0x1053('0x2c')]);_0x25f17e['where']=qs[_0x1053('0x23')](_[_0x1053('0x2d')](_0x219582['query'],_0x1132f[_0x1053('0x23')]));if(_0x2a4b4a['dateStart']){if(_0x2a4b4a['dateEnd']){_0x2a4b4a['dateEnd']=moment(_0x2a4b4a[_0x1053('0x22')])[_0x1053('0x2e')](0x1,_0x1053('0x2f'));}else{_0x2a4b4a[_0x1053('0x22')]=moment(_0x2a4b4a[_0x1053('0x21')])[_0x1053('0x2e')](0x1,'day');}_[_0x1053('0x30')](_0x25f17e[_0x1053('0x31')],{'createdAt':{'$gte':_0x2a4b4a[_0x1053('0x21')],'$lte':_0x2a4b4a[_0x1053('0x22')]}});}if(_0x219582[_0x1053('0x20')][_0x1053('0x32')]){_0x25f17e[_0x1053('0x31')]=_[_0x1053('0x30')](_0x25f17e[_0x1053('0x31')],{'$or':_[_0x1053('0x33')](_0x25f17e[_0x1053('0x27')],function(_0x2b8ad0){var _0x5de715={};_0x5de715[_0x2b8ad0]={'$like':'%'+_0x219582[_0x1053('0x20')][_0x1053('0x32')]+'%'};return _0x5de715;})});}_0x25f17e=_[_0x1053('0x30')]({},_0x25f17e,_0x219582[_0x1053('0x34')]);var _0x1c4c70={'where':_0x25f17e['where']};return db[_0x1053('0x35')][_0x1053('0x36')](_0x1c4c70)[_0x1053('0x1c')](function(_0x5e565d){_0x15f581[_0x1053('0x36')]=_0x5e565d;if(_0x219582[_0x1053('0x20')][_0x1053('0x37')]){_0x25f17e[_0x1053('0x38')]=[{'all':!![]}];}return db[_0x1053('0x35')][_0x1053('0x39')](_0x25f17e);})[_0x1053('0x1c')](function(_0xe555a7){_0x15f581[_0x1053('0x3a')]=_0xe555a7;return _0x15f581;})[_0x1053('0x1c')](respondWithFilteredResult(_0x136541,_0x25f17e))[_0x1053('0x3b')](handleError(_0x136541,null));};exports[_0x1053('0x3c')]=function(_0x11c48c,_0x376f44){var _0x258066={'raw':![],'where':{'id':_0x11c48c[_0x1053('0x3d')]['id']}},_0x220d08={};_0x220d08['model']=_[_0x1053('0x1f')](db['VoicePrefix'][_0x1053('0x1e')]);_0x220d08[_0x1053('0x20')]=_[_0x1053('0x1f')](_0x11c48c[_0x1053('0x20')]);_0x220d08[_0x1053('0x23')]=_[_0x1053('0x25')](_0x220d08[_0x1053('0x24')],_0x220d08[_0x1053('0x20')]);_0x258066[_0x1053('0x27')]=_[_0x1053('0x25')](_0x220d08['model'],qs[_0x1053('0x26')](_0x11c48c[_0x1053('0x20')]['fields']));_0x258066[_0x1053('0x27')]=_0x258066[_0x1053('0x27')][_0x1053('0x28')]?_0x258066['attributes']:_0x220d08[_0x1053('0x24')];if(_0x11c48c[_0x1053('0x20')]['includeAll']){_0x258066[_0x1053('0x38')]=[{'all':!![]}];}_0x258066=_[_0x1053('0x30')]({},_0x258066,_0x11c48c[_0x1053('0x34')]);return db[_0x1053('0x35')]['find'](_0x258066)[_0x1053('0x1c')](handleEntityNotFound(_0x376f44,null))[_0x1053('0x1c')](respondWithResult(_0x376f44,null))[_0x1053('0x3b')](handleError(_0x376f44,null));};exports[_0x1053('0x3e')]=function(_0x45c0e0,_0x7188fe){return db[_0x1053('0x35')]['find']({'where':{'id':_0x45c0e0[_0x1053('0x3d')]['id']}})[_0x1053('0x1c')](handleEntityNotFound(_0x7188fe,null))[_0x1053('0x1c')](removeEntity(_0x7188fe,null))[_0x1053('0x3b')](handleError(_0x7188fe,null));};exports[_0x1053('0x3f')]=function(_0x2f9b7b,_0x1237e4){return db[_0x1053('0x35')]['describe']()['then'](respondWithResult(_0x1237e4,null))[_0x1053('0x3b')](handleError(_0x1237e4,null));};exports[_0x1053('0x40')]=function(_0x4ec53b,_0x204ac8){var _0x828bc3;return db[_0x1053('0x41')][_0x1053('0x42')](function(_0x177baa){return db['VoicePrefix'][_0x1053('0x40')](_0x4ec53b[_0x1053('0x43')],{'transaction':_0x177baa})[_0x1053('0x1c')](function(_0x2df04a){_0x828bc3=_0x2df04a[_0x1053('0x44')]({'plain':!![]});return db['VoiceExtension'][_0x1053('0x45')]({'where':{'id':_0x828bc3[_0x1053('0x46')]},'raw':!![]})['then'](function(_0x353680){return createVoicePrefixExtensions(_0x828bc3,_0x353680,_0x177baa);});});})[_0x1053('0x1c')](function(){return _0x828bc3;})[_0x1053('0x1c')](respondWithResult(_0x204ac8,null))['catch'](handleError(_0x204ac8,null));};function Extension(_0x1875b3,_0x5e0085,_0x4e322a,_0x358424){this[_0x1053('0x47')]=_0x1053('0x48');this['exten']=_0x1875b3;this[_0x1053('0x49')]=_0x4e322a;this['type']=_0x1053('0x4a');this['description']='Voice\x20Prefix\x20Extension';this[_0x1053('0x4b')]=_0x5e0085;this[_0x1053('0x4c')]=_0x358424;}function createVoicePrefixExtensions(_0x2f58b4,_0x504151,_0x2fbc4){return new BPromise(function(_0x3cc7cb,_0x4e2e38){var _0x875463=new Extension(formatPrefixName(_0x2f58b4[_0x1053('0x4d')]),0x1,_0x1053('0x4e'),_0x1053('0x4f'));_0x875463['VoicePrefixId']=_0x2f58b4['id'];return db[_0x1053('0x50')][_0x1053('0x40')](_0x875463,{'transaction':_0x2fbc4})[_0x1053('0x1c')](function(_0x525fdb){var _0x5cadaf=_0x525fdb[_0x1053('0x44')]({'plain':!![]});var _0x5900a6=_[_0x1053('0x33')](addVoicePrefixExtensions(_0x2f58b4,_0x504151),function(_0x3b7c35){_0x3b7c35[_0x1053('0x46')]=_0x5cadaf['id'];_0x3b7c35[_0x1053('0x51')]=_0x2f58b4['id'];return _0x3b7c35;});return db[_0x1053('0x50')][_0x1053('0x52')](_0x5900a6,{'transaction':_0x2fbc4})[_0x1053('0x1c')](function(_0xdf7df3){if(!_0xdf7df3){return _0x4e2e38('Extensions\x20creation\x20failed');}else{return _0x3cc7cb(_0xdf7df3);}})[_0x1053('0x3b')](function(_0xaf51e5){return _0x4e2e38(_0xaf51e5);});});;});};function addVoicePrefixExtensions(_0x8ec4af,_0x56254b){var _0x284d7a=[];var _0xe4cbc3=formatPrefixName(_0x8ec4af['prefix']);_0x284d7a[_0x1053('0x53')](new Extension(_0xe4cbc3,0x2,'Set','CDR(prefix)='+_0x8ec4af[_0x1053('0x54')]));if(_0x8ec4af[_0x1053('0x55')]){_0x284d7a['push'](new Extension(_0xe4cbc3,0x3,_0x1053('0x56'),_0x1053('0x57')+_0x8ec4af[_0x1053('0x55')]));}else{_0x284d7a['push'](new Extension(_0xe4cbc3,0x3,'NoOp','No\x20callerid\x20available'));}_0x284d7a[_0x1053('0x53')](new Extension(_0xe4cbc3,0x4,_0x1053('0x58'),_0x56254b[_0x1053('0x47')]+','+_0x1053('0x59')+(0x8+_0x8ec4af[_0x1053('0x54')][_0x1053('0x28')])+'}'+','+0x1));return _0x284d7a;}function formatPrefixName(_0x36ac09){var _0x3aea4b='_';for(var _0x430167=0x0;_0x430167<_0x36ac09[_0x1053('0x28')];_0x430167++){if(_0x36ac09['charAt'](_0x430167)=='-'){_0x3aea4b+=_0x36ac09[_0x1053('0x5a')](_0x430167);}else{_0x3aea4b+='['+_0x36ac09['charAt'](_0x430167)+']';}}_0x3aea4b+='.';return _0x3aea4b;}exports[_0x1053('0x5b')]=function(_0xb3c8cb,_0x51e982,_0x56cf4e){var _0x5ca15b=_0xb3c8cb[_0x1053('0x43')];_0x5ca15b[_0x1053('0x4d')]=_0x1053('0x5c')+_0x5ca15b['name']+'-';return db[_0x1053('0x41')]['transaction'](function(_0x21d038){return db[_0x1053('0x35')][_0x1053('0x5b')](_0x5ca15b,{'where':{'id':_0x5ca15b['id']},'transaction':_0x21d038})[_0x1053('0x1c')](function(){return db[_0x1053('0x50')][_0x1053('0x3e')]({'where':{'VoicePrefixId':_0x5ca15b['id']},'transaction':_0x21d038})[_0x1053('0x1c')](function(){return db[_0x1053('0x50')][_0x1053('0x45')]({'where':{'id':_0x5ca15b[_0x1053('0x46')]},'raw':!![]})[_0x1053('0x1c')](function(_0x9e8720){return createVoicePrefixExtensions(_0x5ca15b,_0x9e8720,_0x21d038);});});});})[_0x1053('0x1c')](function(){return db[_0x1053('0x35')][_0x1053('0x5d')](_0x5ca15b['id']);})[_0x1053('0x1c')](respondWithResult(_0x51e982,null))['catch'](handleError(_0x51e982,null));};exports[_0x1053('0x5e')]=function(_0x36bb21,_0x5dca3a,_0x2262c8){return db[_0x1053('0x35')][_0x1053('0x45')]({'where':{'id':_0x36bb21[_0x1053('0x3d')]['id']}})['then'](handleEntityNotFound(_0x5dca3a,null))[_0x1053('0x1c')](function(_0x245e2f){if(_0x245e2f){return _0x245e2f[_0x1053('0x5e')](_0x36bb21[_0x1053('0x43')][_0x1053('0x5f')],_[_0x1053('0x60')](_0x36bb21[_0x1053('0x43')],[_0x1053('0x5f'),'id'])||{})[_0x1053('0x61')](function(_0x2af0cc){for(var _0x51d200=0x0;_0x51d200<_0x36bb21['body'][_0x1053('0x5f')][_0x1053('0x28')];_0x51d200+=0x1){socket['emit'](_0x1053('0x62'),{'UserId':_0x36bb21[_0x1053('0x43')][_0x1053('0x5f')][_0x51d200],'VoicePrefixId':_0x36bb21[_0x1053('0x3d')]['id']});}return _0x2af0cc;});}})[_0x1053('0x1c')](respondWithResult(_0x5dca3a,null))[_0x1053('0x3b')](handleError(_0x5dca3a,null));};exports[_0x1053('0x63')]=function(_0xe33b62,_0x493b92,_0x34e40b){var _0x3ddcd4;return db[_0x1053('0x35')]['find']({'where':{'id':_0xe33b62['params']['id']}})[_0x1053('0x1c')](handleEntityNotFound(_0x493b92,null))[_0x1053('0x1c')](function(_0x11d801){if(_0x11d801){return _0x11d801[_0x1053('0x63')](_0xe33b62[_0x1053('0x20')]['ids'])[_0x1053('0x1c')](function(_0x3b714e){if(_['isArray'](_0xe33b62[_0x1053('0x20')][_0x1053('0x5f')])){for(var _0x47971c=0x0;_0x47971c<_0xe33b62[_0x1053('0x20')]['ids']['length'];_0x47971c+=0x1){socket[_0x1053('0x64')](_0x1053('0x65'),{'UserId':_0xe33b62['query'][_0x1053('0x5f')][_0x47971c],'VoicePrefixId':_0xe33b62['params']['id']});}}else{socket['emit'](_0x1053('0x65'),{'UserId':_0xe33b62[_0x1053('0x20')][_0x1053('0x5f')],'VoicePrefixId':_0xe33b62['params']['id']});}});}})['then'](respondWithStatusCode(_0x493b92,null))[_0x1053('0x3b')](handleError(_0x493b92,null));};exports[_0x1053('0x66')]=function(_0x2e4be5,_0x4d37a6,_0x44905c){var _0x2a8d61={};var _0x3787a5={};var _0x470c4f;var _0x787918;return db[_0x1053('0x35')][_0x1053('0x67')]({'where':{'id':_0x2e4be5['params']['id']}})[_0x1053('0x1c')](handleEntityNotFound(_0x4d37a6,null))[_0x1053('0x1c')](function(_0x1c3dd9){if(_0x1c3dd9){_0x470c4f=_0x1c3dd9;_0x3787a5['model']=_[_0x1053('0x1f')](db[_0x1053('0x68')][_0x1053('0x1e')]);_0x3787a5['query']=_[_0x1053('0x1f')](_0x2e4be5[_0x1053('0x20')]);_0x3787a5[_0x1053('0x23')]=_[_0x1053('0x25')](_0x3787a5[_0x1053('0x24')],_0x3787a5[_0x1053('0x20')]);_0x2a8d61['attributes']=_['intersection'](_0x3787a5['model'],qs[_0x1053('0x26')](_0x2e4be5[_0x1053('0x20')][_0x1053('0x26')]));_0x2a8d61[_0x1053('0x27')]=_0x2a8d61['attributes'][_0x1053('0x28')]?_0x2a8d61[_0x1053('0x27')]:_0x3787a5[_0x1053('0x24')];_0x2a8d61[_0x1053('0x2b')]=qs[_0x1053('0x2c')](_0x2e4be5[_0x1053('0x20')]['sort']);_0x2a8d61[_0x1053('0x31')]=qs[_0x1053('0x23')](_['pick'](_0x2e4be5[_0x1053('0x20')],_0x3787a5[_0x1053('0x23')]));if(_0x2e4be5[_0x1053('0x20')]['filter']){_0x2a8d61['where']=_[_0x1053('0x30')](_0x2a8d61[_0x1053('0x31')],{'$or':_[_0x1053('0x33')](_0x2a8d61['attributes'],function(_0xfb9d8f){var _0x38bebd={};_0x38bebd[_0xfb9d8f]={'$like':'%'+_0x2e4be5[_0x1053('0x20')][_0x1053('0x32')]+'%'};return _0x38bebd;})});}_0x2a8d61=_[_0x1053('0x30')]({},_0x2a8d61,_0x2e4be5[_0x1053('0x34')]);return _0x470c4f[_0x1053('0x66')](_0x2a8d61);}})[_0x1053('0x1c')](function(_0x22cab9){if(_0x22cab9){_0x787918=_0x22cab9['length'];if(!_0x2e4be5['query'][_0x1053('0x69')]('nolimit')){_0x2a8d61[_0x1053('0x2a')]=qs[_0x1053('0x2a')](_0x2e4be5[_0x1053('0x20')][_0x1053('0x2a')]);_0x2a8d61[_0x1053('0x17')]=qs[_0x1053('0x17')](_0x2e4be5[_0x1053('0x20')]['offset']);}return _0x470c4f[_0x1053('0x66')](_0x2a8d61);}})[_0x1053('0x1c')](function(_0x57cd27){if(_0x57cd27){return _0x57cd27?{'count':_0x787918,'rows':_0x57cd27}:null;}})['then'](respondWithResult(_0x4d37a6,null))[_0x1053('0x3b')](handleError(_0x4d37a6,null));};
\ No newline at end of file
+var _0x847d=['User','pick','hasOwnProperty','request-promise','moment','bluebird','util','sox','to-csv','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','./voicePrefix.socket','register','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','destroy','then','error','stack','name','send','index','VoicePrefix','rawAttributes','model','keys','query','dateEnd','filters','intersection','attributes','fields','length','nolimit','order','sort','where','dateStart','add','day','merge','filter','includeAll','include','findAll','rows','catch','params','describe','create','sequelize','body','get','VoiceExtension','find','VoiceExtensionId','context','from-sip','app','type','system','Voice\x20Prefix\x20Extension','priority','appdata','NoOp','Voice\x20Prefix','VoicePrefixId','map','Extensions\x20creation\x20failed','prefix','push','Set','callerIdAll','No\x20callerid\x20available','goto','${EXTEN:','charAt','update','system-','transaction','findById','addAgents','ids','omit','spread','removeAgents','isArray','emit','userVoicePrefix:remove','getAgents','findOne'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0x847d,0x14a));var _0xd847=function(_0x43a6cd,_0x503d1a){_0x43a6cd=_0x43a6cd-0x0;var _0x5acb36=_0x847d[_0x43a6cd];return _0x5acb36;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xd847('0x0'));var moment=require(_0xd847('0x1'));var BPromise=require(_0xd847('0x2'));var Mustache=require('mustache');var util=require(_0xd847('0x3'));var path=require('path');var sox=require(_0xd847('0x4'));var csv=require(_0xd847('0x5'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xd847('0x6'));var squel=require(_0xd847('0x7'));var crypto=require(_0xd847('0x8'));var jsforce=require(_0xd847('0x9'));var deskjs=require('desk.js');var toCsv=require(_0xd847('0x5'));var querystring=require(_0xd847('0xa'));var Papa=require(_0xd847('0xb'));var qs=require(_0xd847('0xc'));var logger=require(_0xd847('0xd'))(_0xd847('0xe'));var utils=require(_0xd847('0xf'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var socket=require('socket.io-emitter')({'host':'localhost','port':0x18eb});require(_0xd847('0x10'))[_0xd847('0x11')](socket);function respondWithStatusCode(_0xa99c6c,_0x4f5ec2){_0x4f5ec2=_0x4f5ec2||0xcc;return function(_0x4cbb6f){if(_0x4cbb6f){return _0xa99c6c[_0xd847('0x12')](_0x4f5ec2);}return _0xa99c6c[_0xd847('0x13')](_0x4f5ec2)[_0xd847('0x14')]();};}function respondWithResult(_0x2ea8e7,_0x1e4e26){_0x1e4e26=_0x1e4e26||0xc8;return function(_0x1fc1ba){if(_0x1fc1ba){return _0x2ea8e7[_0xd847('0x13')](_0x1e4e26)[_0xd847('0x15')](_0x1fc1ba);}};}function respondWithFilteredResult(_0x1c827a,_0x2faa39){return function(_0x3c4805){if(_0x3c4805){var _0x54d827=_0x3c4805[_0xd847('0x16')],_0x304333=_0x2faa39[_0xd847('0x17')],_0x165fbe=_0x2faa39['offset']+_0x2faa39[_0xd847('0x18')],_0xd69fc9;if(_0x165fbe>=_0x54d827){_0x165fbe=_0x54d827;_0xd69fc9=0xc8;}else{_0xd69fc9=0xce;}_0x1c827a[_0xd847('0x13')](_0xd69fc9);return _0x1c827a[_0xd847('0x19')](_0xd847('0x1a'),_0x304333+'-'+_0x165fbe+'/'+_0x54d827)['json'](_0x3c4805);}return null;};}function patchUpdates(_0x1ef765){return function(_0x5eb665){try{jsonpatch[_0xd847('0x1b')](_0x5eb665,_0x1ef765,!![]);}catch(_0x44a57b){return BPromise[_0xd847('0x1c')](_0x44a57b);}return _0x5eb665[_0xd847('0x1d')]();};}function saveUpdates(_0x3905b8,_0x5a58f3){return function(_0x6e91ab){if(_0x6e91ab){return _0x6e91ab['update'](_0x3905b8)['then'](function(_0x25e139){return _0x25e139;});}return null;};}function removeEntity(_0x2c1091,_0x8d4d6f){return function(_0x2a57df){if(_0x2a57df){return _0x2a57df[_0xd847('0x1e')]()[_0xd847('0x1f')](function(){_0x2c1091[_0xd847('0x13')](0xcc)[_0xd847('0x14')]();});}};}function handleEntityNotFound(_0x1eaf08,_0x27c9f2){return function(_0x351ffb){if(!_0x351ffb){_0x1eaf08[_0xd847('0x12')](0x194);}return _0x351ffb;};}function handleError(_0x4a1691,_0x560563){_0x560563=_0x560563||0x1f4;return function(_0x26a787){logger[_0xd847('0x20')](_0x26a787[_0xd847('0x21')]);if(_0x26a787['name']){delete _0x26a787[_0xd847('0x22')];}_0x4a1691[_0xd847('0x13')](_0x560563)[_0xd847('0x23')](_0x26a787);};}exports[_0xd847('0x24')]=function(_0x19c024,_0x5b8e2a){var _0x24793c={},_0x460eba={},_0x1b80a2={'count':0x0,'rows':[]};var _0x59296b=db[_0xd847('0x25')][_0xd847('0x26')];_0x460eba[_0xd847('0x27')]=_[_0xd847('0x28')](_0x59296b);var _0x19bf66={'dateStart':_0x19c024[_0xd847('0x29')]['dateStart'],'dateEnd':_0x19c024[_0xd847('0x29')]['dateEnd']};delete _0x19c024['query']['dateStart'];delete _0x19c024[_0xd847('0x29')][_0xd847('0x2a')];_0x460eba[_0xd847('0x29')]=_[_0xd847('0x28')](_0x19c024[_0xd847('0x29')]);_0x460eba[_0xd847('0x2b')]=_[_0xd847('0x2c')](_0x460eba[_0xd847('0x27')],_0x460eba[_0xd847('0x29')]);_0x24793c[_0xd847('0x2d')]=_[_0xd847('0x2c')](_0x460eba[_0xd847('0x27')],qs['fields'](_0x19c024['query'][_0xd847('0x2e')]));_0x24793c[_0xd847('0x2d')]=_0x24793c[_0xd847('0x2d')][_0xd847('0x2f')]?_0x24793c[_0xd847('0x2d')]:_0x460eba['model'];if(!_0x19c024[_0xd847('0x29')]['hasOwnProperty'](_0xd847('0x30'))){_0x24793c['limit']=qs[_0xd847('0x18')](_0x19c024['query'][_0xd847('0x18')]);_0x24793c[_0xd847('0x17')]=qs['offset'](_0x19c024['query'][_0xd847('0x17')]);}_0x24793c[_0xd847('0x31')]=qs[_0xd847('0x32')](_0x19c024[_0xd847('0x29')][_0xd847('0x32')]);_0x24793c[_0xd847('0x33')]=qs['filters'](_['pick'](_0x19c024[_0xd847('0x29')],_0x460eba[_0xd847('0x2b')]));if(_0x19bf66[_0xd847('0x34')]){if(_0x19bf66['dateEnd']){_0x19bf66[_0xd847('0x2a')]=moment(_0x19bf66[_0xd847('0x2a')])['add'](0x1,'day');}else{_0x19bf66[_0xd847('0x2a')]=moment(_0x19bf66['dateStart'])[_0xd847('0x35')](0x1,_0xd847('0x36'));}_[_0xd847('0x37')](_0x24793c['where'],{'createdAt':{'$gte':_0x19bf66['dateStart'],'$lte':_0x19bf66[_0xd847('0x2a')]}});}if(_0x19c024['query']['filter']){_0x24793c[_0xd847('0x33')]=_['merge'](_0x24793c['where'],{'$or':_['map'](_0x24793c[_0xd847('0x2d')],function(_0x309bff){var _0x379814={};_0x379814[_0x309bff]={'$like':'%'+_0x19c024[_0xd847('0x29')][_0xd847('0x38')]+'%'};return _0x379814;})});}_0x24793c=_[_0xd847('0x37')]({},_0x24793c,_0x19c024['options']);var _0x383ef7={'where':_0x24793c['where']};return db[_0xd847('0x25')]['count'](_0x383ef7)[_0xd847('0x1f')](function(_0x1fd607){_0x1b80a2['count']=_0x1fd607;if(_0x19c024[_0xd847('0x29')][_0xd847('0x39')]){_0x24793c[_0xd847('0x3a')]=[{'all':!![]}];}return db[_0xd847('0x25')][_0xd847('0x3b')](_0x24793c);})[_0xd847('0x1f')](function(_0x4eb17b){_0x1b80a2[_0xd847('0x3c')]=_0x4eb17b;return _0x1b80a2;})[_0xd847('0x1f')](respondWithFilteredResult(_0x5b8e2a,_0x24793c))[_0xd847('0x3d')](handleError(_0x5b8e2a,null));};exports['show']=function(_0x39386f,_0xf2a6cd){var _0x54b8c8={'raw':![],'where':{'id':_0x39386f['params']['id']}},_0x1b8b95={};_0x1b8b95[_0xd847('0x27')]=_[_0xd847('0x28')](db[_0xd847('0x25')][_0xd847('0x26')]);_0x1b8b95['query']=_[_0xd847('0x28')](_0x39386f[_0xd847('0x29')]);_0x1b8b95[_0xd847('0x2b')]=_['intersection'](_0x1b8b95[_0xd847('0x27')],_0x1b8b95[_0xd847('0x29')]);_0x54b8c8[_0xd847('0x2d')]=_['intersection'](_0x1b8b95[_0xd847('0x27')],qs[_0xd847('0x2e')](_0x39386f[_0xd847('0x29')][_0xd847('0x2e')]));_0x54b8c8['attributes']=_0x54b8c8['attributes']['length']?_0x54b8c8[_0xd847('0x2d')]:_0x1b8b95[_0xd847('0x27')];if(_0x39386f[_0xd847('0x29')][_0xd847('0x39')]){_0x54b8c8['include']=[{'all':!![]}];}_0x54b8c8=_[_0xd847('0x37')]({},_0x54b8c8,_0x39386f['options']);return db[_0xd847('0x25')]['find'](_0x54b8c8)[_0xd847('0x1f')](handleEntityNotFound(_0xf2a6cd,null))['then'](respondWithResult(_0xf2a6cd,null))[_0xd847('0x3d')](handleError(_0xf2a6cd,null));};exports['destroy']=function(_0x16cf96,_0x277cbb){return db[_0xd847('0x25')]['find']({'where':{'id':_0x16cf96[_0xd847('0x3e')]['id']}})[_0xd847('0x1f')](handleEntityNotFound(_0x277cbb,null))[_0xd847('0x1f')](removeEntity(_0x277cbb,null))[_0xd847('0x3d')](handleError(_0x277cbb,null));};exports['describe']=function(_0x4ef6a8,_0x58dd6f){return db[_0xd847('0x25')][_0xd847('0x3f')]()[_0xd847('0x1f')](respondWithResult(_0x58dd6f,null))[_0xd847('0x3d')](handleError(_0x58dd6f,null));};exports[_0xd847('0x40')]=function(_0x28857a,_0x341289){var _0x35d0a6;return db[_0xd847('0x41')]['transaction'](function(_0x1edfec){return db[_0xd847('0x25')][_0xd847('0x40')](_0x28857a[_0xd847('0x42')],{'transaction':_0x1edfec})['then'](function(_0x432928){_0x35d0a6=_0x432928[_0xd847('0x43')]({'plain':!![]});return db[_0xd847('0x44')][_0xd847('0x45')]({'where':{'id':_0x35d0a6[_0xd847('0x46')]},'raw':!![]})[_0xd847('0x1f')](function(_0xa3f6c2){return createVoicePrefixExtensions(_0x35d0a6,_0xa3f6c2,_0x1edfec);});});})[_0xd847('0x1f')](function(){return _0x35d0a6;})[_0xd847('0x1f')](respondWithResult(_0x341289,null))[_0xd847('0x3d')](handleError(_0x341289,null));};function Extension(_0x38167a,_0x3eb020,_0x44d486,_0x6fe8cd){this[_0xd847('0x47')]=_0xd847('0x48');this['exten']=_0x38167a;this[_0xd847('0x49')]=_0x44d486;this[_0xd847('0x4a')]=_0xd847('0x4b');this['description']=_0xd847('0x4c');this[_0xd847('0x4d')]=_0x3eb020;this[_0xd847('0x4e')]=_0x6fe8cd;}function createVoicePrefixExtensions(_0x12bcab,_0x25b921,_0x2dcb7d){return new BPromise(function(_0x3744cf,_0x4fc0c9){var _0x1b06d7=new Extension(formatPrefixName(_0x12bcab['prefix']),0x1,_0xd847('0x4f'),_0xd847('0x50'));_0x1b06d7[_0xd847('0x51')]=_0x12bcab['id'];return db[_0xd847('0x44')]['create'](_0x1b06d7,{'transaction':_0x2dcb7d})[_0xd847('0x1f')](function(_0xdb0c93){var _0x40e8f2=_0xdb0c93[_0xd847('0x43')]({'plain':!![]});var _0x2ac629=_[_0xd847('0x52')](addVoicePrefixExtensions(_0x12bcab,_0x25b921),function(_0x299b77){_0x299b77[_0xd847('0x46')]=_0x40e8f2['id'];_0x299b77[_0xd847('0x51')]=_0x12bcab['id'];return _0x299b77;});return db[_0xd847('0x44')]['bulkCreate'](_0x2ac629,{'transaction':_0x2dcb7d})['then'](function(_0x23a78f){if(!_0x23a78f){return _0x4fc0c9(_0xd847('0x53'));}else{return _0x3744cf(_0x23a78f);}})[_0xd847('0x3d')](function(_0x325917){return _0x4fc0c9(_0x325917);});});;});};function addVoicePrefixExtensions(_0x3cbea0,_0x1444e7){var _0x74c9d9=[];var _0x1f23e5=formatPrefixName(_0x3cbea0[_0xd847('0x54')]);_0x74c9d9[_0xd847('0x55')](new Extension(_0x1f23e5,0x2,_0xd847('0x56'),'CDR(prefix)='+_0x3cbea0[_0xd847('0x22')]));if(_0x3cbea0['callerIdAll']){_0x74c9d9['push'](new Extension(_0x1f23e5,0x3,_0xd847('0x56'),'PREFIX-CALLERIDALL='+_0x3cbea0[_0xd847('0x57')]));}else{_0x74c9d9[_0xd847('0x55')](new Extension(_0x1f23e5,0x3,_0xd847('0x4f'),_0xd847('0x58')));}_0x74c9d9[_0xd847('0x55')](new Extension(_0x1f23e5,0x4,_0xd847('0x59'),_0x1444e7[_0xd847('0x47')]+','+_0xd847('0x5a')+(0x8+_0x3cbea0['name'][_0xd847('0x2f')])+'}'+','+0x1));return _0x74c9d9;}function formatPrefixName(_0x2ba97a){var _0x467cf9='_';for(var _0x288010=0x0;_0x288010<_0x2ba97a['length'];_0x288010++){if(_0x2ba97a[_0xd847('0x5b')](_0x288010)=='-'){_0x467cf9+=_0x2ba97a['charAt'](_0x288010);}else{_0x467cf9+='['+_0x2ba97a['charAt'](_0x288010)+']';}}_0x467cf9+='.';return _0x467cf9;}exports[_0xd847('0x5c')]=function(_0x4953c5,_0x2a8611,_0xb24979){var _0x1161c4=_0x4953c5[_0xd847('0x42')];_0x1161c4[_0xd847('0x54')]=_0xd847('0x5d')+_0x1161c4[_0xd847('0x22')]+'-';return db[_0xd847('0x41')][_0xd847('0x5e')](function(_0x22588c){return db['VoicePrefix'][_0xd847('0x5c')](_0x1161c4,{'where':{'id':_0x1161c4['id']},'transaction':_0x22588c})['then'](function(){return db[_0xd847('0x44')][_0xd847('0x1e')]({'where':{'VoicePrefixId':_0x1161c4['id']},'transaction':_0x22588c})['then'](function(){return db[_0xd847('0x44')][_0xd847('0x45')]({'where':{'id':_0x1161c4[_0xd847('0x46')]},'raw':!![]})[_0xd847('0x1f')](function(_0x5ed521){return createVoicePrefixExtensions(_0x1161c4,_0x5ed521,_0x22588c);});});});})[_0xd847('0x1f')](function(){return db[_0xd847('0x25')][_0xd847('0x5f')](_0x1161c4['id']);})[_0xd847('0x1f')](respondWithResult(_0x2a8611,null))[_0xd847('0x3d')](handleError(_0x2a8611,null));};exports[_0xd847('0x60')]=function(_0x114174,_0x27dfa9,_0x32e0b1){return db['VoicePrefix'][_0xd847('0x45')]({'where':{'id':_0x114174['params']['id']}})[_0xd847('0x1f')](handleEntityNotFound(_0x27dfa9,null))[_0xd847('0x1f')](function(_0x814699){if(_0x814699){return _0x814699['addAgents'](_0x114174[_0xd847('0x42')][_0xd847('0x61')],_[_0xd847('0x62')](_0x114174[_0xd847('0x42')],[_0xd847('0x61'),'id'])||{})[_0xd847('0x63')](function(_0x300468){for(var _0x5c4f20=0x0;_0x5c4f20<_0x114174['body']['ids']['length'];_0x5c4f20+=0x1){socket['emit']('userVoicePrefix:save',{'UserId':_0x114174[_0xd847('0x42')][_0xd847('0x61')][_0x5c4f20],'VoicePrefixId':_0x114174['params']['id']});}return _0x300468;});}})['then'](respondWithResult(_0x27dfa9,null))[_0xd847('0x3d')](handleError(_0x27dfa9,null));};exports[_0xd847('0x64')]=function(_0x5497fc,_0x236241,_0x5e48b1){var _0x348c99;return db[_0xd847('0x25')][_0xd847('0x45')]({'where':{'id':_0x5497fc['params']['id']}})[_0xd847('0x1f')](handleEntityNotFound(_0x236241,null))[_0xd847('0x1f')](function(_0x109e3c){if(_0x109e3c){return _0x109e3c[_0xd847('0x64')](_0x5497fc['query'][_0xd847('0x61')])[_0xd847('0x1f')](function(_0x454ef6){if(_[_0xd847('0x65')](_0x5497fc[_0xd847('0x29')]['ids'])){for(var _0xe2bd64=0x0;_0xe2bd64<_0x5497fc['query'][_0xd847('0x61')][_0xd847('0x2f')];_0xe2bd64+=0x1){socket[_0xd847('0x66')](_0xd847('0x67'),{'UserId':_0x5497fc[_0xd847('0x29')]['ids'][_0xe2bd64],'VoicePrefixId':_0x5497fc[_0xd847('0x3e')]['id']});}}else{socket[_0xd847('0x66')](_0xd847('0x67'),{'UserId':_0x5497fc[_0xd847('0x29')]['ids'],'VoicePrefixId':_0x5497fc['params']['id']});}});}})[_0xd847('0x1f')](respondWithStatusCode(_0x236241,null))[_0xd847('0x3d')](handleError(_0x236241,null));};exports[_0xd847('0x68')]=function(_0x36b794,_0x155b2c,_0x1b6b68){var _0x2dcfec={};var _0x2a905c={};var _0x1095a0;var _0x9142f6;return db[_0xd847('0x25')][_0xd847('0x69')]({'where':{'id':_0x36b794[_0xd847('0x3e')]['id']}})[_0xd847('0x1f')](handleEntityNotFound(_0x155b2c,null))['then'](function(_0x42707a){if(_0x42707a){_0x1095a0=_0x42707a;_0x2a905c[_0xd847('0x27')]=_[_0xd847('0x28')](db[_0xd847('0x6a')][_0xd847('0x26')]);_0x2a905c[_0xd847('0x29')]=_[_0xd847('0x28')](_0x36b794[_0xd847('0x29')]);_0x2a905c[_0xd847('0x2b')]=_['intersection'](_0x2a905c[_0xd847('0x27')],_0x2a905c['query']);_0x2dcfec[_0xd847('0x2d')]=_[_0xd847('0x2c')](_0x2a905c[_0xd847('0x27')],qs['fields'](_0x36b794[_0xd847('0x29')]['fields']));_0x2dcfec['attributes']=_0x2dcfec[_0xd847('0x2d')][_0xd847('0x2f')]?_0x2dcfec['attributes']:_0x2a905c[_0xd847('0x27')];_0x2dcfec['order']=qs['sort'](_0x36b794[_0xd847('0x29')][_0xd847('0x32')]);_0x2dcfec[_0xd847('0x33')]=qs[_0xd847('0x2b')](_[_0xd847('0x6b')](_0x36b794[_0xd847('0x29')],_0x2a905c[_0xd847('0x2b')]));if(_0x36b794['query'][_0xd847('0x38')]){_0x2dcfec[_0xd847('0x33')]=_[_0xd847('0x37')](_0x2dcfec[_0xd847('0x33')],{'$or':_['map'](_0x2dcfec[_0xd847('0x2d')],function(_0xcbaccb){var _0x3fc0c2={};_0x3fc0c2[_0xcbaccb]={'$like':'%'+_0x36b794[_0xd847('0x29')]['filter']+'%'};return _0x3fc0c2;})});}_0x2dcfec=_[_0xd847('0x37')]({},_0x2dcfec,_0x36b794['options']);return _0x1095a0['getAgents'](_0x2dcfec);}})[_0xd847('0x1f')](function(_0x326226){if(_0x326226){_0x9142f6=_0x326226[_0xd847('0x2f')];if(!_0x36b794[_0xd847('0x29')][_0xd847('0x6c')](_0xd847('0x30'))){_0x2dcfec['limit']=qs[_0xd847('0x18')](_0x36b794['query'][_0xd847('0x18')]);_0x2dcfec['offset']=qs[_0xd847('0x17')](_0x36b794['query'][_0xd847('0x17')]);}return _0x1095a0[_0xd847('0x68')](_0x2dcfec);}})[_0xd847('0x1f')](function(_0x347938){if(_0x347938){return _0x347938?{'count':_0x9142f6,'rows':_0x347938}:null;}})[_0xd847('0x1f')](respondWithResult(_0x155b2c,null))[_0xd847('0x3d')](handleError(_0x155b2c,null));};
\ No newline at end of file
index 3c8ff37..109cc01 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x50a6=['hasOwnProperty','hook','exports','events','../../mysqldb','save','remove'];(function(_0x21aeed,_0x387040){var _0x12bad5=function(_0x6a625e){while(--_0x6a625e){_0x21aeed['push'](_0x21aeed['shift']());}};_0x12bad5(++_0x387040);}(_0x50a6,0xa4));var _0x650a=function(_0x2730da,_0x1098bd){_0x2730da=_0x2730da-0x0;var _0xfe9991=_0x50a6[_0x2730da];return _0xfe9991;};'use strict';var EventEmitter=require(_0x650a('0x0'));var VoicePrefix=require(_0x650a('0x1'))['db']['VoicePrefix'];var VoicePrefixEvents=new EventEmitter();VoicePrefixEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x650a('0x2'),'afterUpdate':'update','afterDestroy':_0x650a('0x3')};function emitEvent(_0x15dd02){return function(_0x2c71ba,_0x4a0147,_0xa3311){VoicePrefixEvents['emit'](_0x15dd02+':'+_0x2c71ba['id'],_0x2c71ba);VoicePrefixEvents['emit'](_0x15dd02,_0x2c71ba);_0xa3311(null);};}for(var e in events){if(events[_0x650a('0x4')](e)){var event=events[e];VoicePrefix[_0x650a('0x5')](e,emitEvent(event));}}module[_0x650a('0x6')]=VoicePrefixEvents;
\ No newline at end of file
+var _0xb66c=['update','remove','emit','hook','exports','events','VoicePrefix','save'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xb66c,0x175));var _0xcb66=function(_0x19be7e,_0x5e0aae){_0x19be7e=_0x19be7e-0x0;var _0x4c9302=_0xb66c[_0x19be7e];return _0x4c9302;};'use strict';var EventEmitter=require(_0xcb66('0x0'));var VoicePrefix=require('../../mysqldb')['db'][_0xcb66('0x1')];var VoicePrefixEvents=new EventEmitter();VoicePrefixEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xcb66('0x2'),'afterUpdate':_0xcb66('0x3'),'afterDestroy':_0xcb66('0x4')};function emitEvent(_0x5f487c){return function(_0x35d439,_0x386241,_0x3f7cc7){VoicePrefixEvents[_0xcb66('0x5')](_0x5f487c+':'+_0x35d439['id'],_0x35d439);VoicePrefixEvents['emit'](_0x5f487c,_0x35d439);_0x3f7cc7(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];VoicePrefix[_0xcb66('0x6')](e,emitEvent(event));}}module[_0xcb66('0x7')]=VoicePrefixEvents;
\ No newline at end of file
index f49dbaa..4d09690 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1fb2=['util','../../config/logger','api','moment','request-promise','./voicePrefix.attributes','define','lodash'];(function(_0x5933fb,_0x9115ad){var _0x44d988=function(_0x295228){while(--_0x295228){_0x5933fb['push'](_0x5933fb['shift']());}};_0x44d988(++_0x9115ad);}(_0x1fb2,0x18f));var _0x21fb=function(_0x3ca131,_0x7ebfd4){_0x3ca131=_0x3ca131-0x0;var _0x19cd23=_0x1fb2[_0x3ca131];return _0x19cd23;};'use strict';var _=require(_0x21fb('0x0'));var util=require(_0x21fb('0x1'));var logger=require(_0x21fb('0x2'))(_0x21fb('0x3'));var moment=require(_0x21fb('0x4'));var BPromise=require('bluebird');var rp=require(_0x21fb('0x5'));var attributes=require(_0x21fb('0x6'));module['exports']=function(_0x2fd2e5,_0x1bac4a){return _0x2fd2e5[_0x21fb('0x7')]('VoicePrefix',attributes,{'tableName':'voice_prefixes','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe4a5=['define','VoicePrefix','voice_prefixes','lodash','util','../../config/logger','api','moment','bluebird','./voicePrefix.attributes','exports'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0xe4a5,0xea));var _0x5e4a=function(_0x8f4ca2,_0xc4ac52){_0x8f4ca2=_0x8f4ca2-0x0;var _0x126663=_0xe4a5[_0x8f4ca2];return _0x126663;};'use strict';var _=require(_0x5e4a('0x0'));var util=require(_0x5e4a('0x1'));var logger=require(_0x5e4a('0x2'))(_0x5e4a('0x3'));var moment=require(_0x5e4a('0x4'));var BPromise=require(_0x5e4a('0x5'));var rp=require('request-promise');var attributes=require(_0x5e4a('0x6'));module[_0x5e4a('0x7')]=function(_0x2e09c2,_0x3596cd){return _0x2e09c2[_0x5e4a('0x8')](_0x5e4a('0x9'),attributes,{'tableName':_0x5e4a('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 752aa6e..1ce3177 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc830=['./voicePrefix.socket','register','request','then','info','VoicePrefix,\x20%s,\x20%s','request\x20sent','debug','VoicePrefix,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','util','bluebird','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','localhost'];(function(_0x2d41ed,_0x575cf2){var _0x42cf7d=function(_0x1afb30){while(--_0x1afb30){_0x2d41ed['push'](_0x2d41ed['shift']());}};_0x42cf7d(++_0x575cf2);}(_0xc830,0x17e));var _0x0c83=function(_0x2068ed,_0xfd9570){_0x2068ed=_0x2068ed-0x0;var _0x35cf82=_0xc830[_0x2068ed];return _0x35cf82;};'use strict';var _=require('lodash');var util=require(_0x0c83('0x0'));var moment=require('moment');var BPromise=require(_0x0c83('0x1'));var rs=require('randomstring');var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require(_0x0c83('0x2'));var logger=require(_0x0c83('0x3'))(_0x0c83('0x4'));var config=require(_0x0c83('0x5'));var jayson=require('jayson/promise');var client=jayson[_0x0c83('0x6')][_0x0c83('0x7')]({'port':0x232a});var socket=require('socket.io-emitter')({'host':_0x0c83('0x8'),'port':0x18eb});require(_0x0c83('0x9'))[_0x0c83('0xa')](socket);function respondWithRpcPromise(_0x1583ea,_0x5ed922,_0x4d787e){return new BPromise(function(_0x52902c,_0x276cec){return client[_0x0c83('0xb')](_0x1583ea,_0x4d787e)[_0x0c83('0xc')](function(_0xc90fb1){logger[_0x0c83('0xd')](_0x0c83('0xe'),_0x5ed922,_0x0c83('0xf'));logger[_0x0c83('0x10')](_0x0c83('0x11'),_0x5ed922,_0x0c83('0xf'),JSON[_0x0c83('0x12')](_0xc90fb1));if(_0xc90fb1[_0x0c83('0x13')]){if(_0xc90fb1[_0x0c83('0x13')][_0x0c83('0x14')]===0x1f4){logger[_0x0c83('0x13')](_0x0c83('0xe'),_0x5ed922,_0xc90fb1[_0x0c83('0x13')][_0x0c83('0x15')]);return _0x276cec(_0xc90fb1['error']['message']);}logger[_0x0c83('0x13')](_0x0c83('0xe'),_0x5ed922,_0xc90fb1[_0x0c83('0x13')][_0x0c83('0x15')]);return _0x52902c(_0xc90fb1['error'][_0x0c83('0x15')]);}else{logger['info'](_0x0c83('0xe'),_0x5ed922,_0x0c83('0xf'));_0x52902c(_0xc90fb1['result'][_0x0c83('0x15')]);}})[_0x0c83('0x16')](function(_0x1318b9){logger[_0x0c83('0x13')](_0x0c83('0xe'),_0x5ed922,_0x1318b9);_0x276cec(_0x1318b9);});});}
\ No newline at end of file
+var _0xa02a=['code','VoicePrefix,\x20%s,\x20%s','message','catch','util','bluebird','randomstring','../../config/logger','rpc','../../config/environment','jayson/promise','client','socket.io-emitter','localhost','./voicePrefix.socket','register','request','then','info','request\x20sent','debug','stringify','error'];(function(_0x13ec2b,_0x40b664){var _0x1fb3f4=function(_0x3e91e9){while(--_0x3e91e9){_0x13ec2b['push'](_0x13ec2b['shift']());}};_0x1fb3f4(++_0x40b664);}(_0xa02a,0xd3));var _0xaa02=function(_0x156877,_0x1b99b2){_0x156877=_0x156877-0x0;var _0x161036=_0xa02a[_0x156877];return _0x161036;};'use strict';var _=require('lodash');var util=require(_0xaa02('0x0'));var moment=require('moment');var BPromise=require(_0xaa02('0x1'));var rs=require(_0xaa02('0x2'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xaa02('0x3'))(_0xaa02('0x4'));var config=require(_0xaa02('0x5'));var jayson=require(_0xaa02('0x6'));var client=jayson[_0xaa02('0x7')]['http']({'port':0x232a});var socket=require(_0xaa02('0x8'))({'host':_0xaa02('0x9'),'port':0x18eb});require(_0xaa02('0xa'))[_0xaa02('0xb')](socket);function respondWithRpcPromise(_0x53083b,_0x5ea06c,_0x4707f7){return new BPromise(function(_0x12b7ae,_0x1bbc14){return client[_0xaa02('0xc')](_0x53083b,_0x4707f7)[_0xaa02('0xd')](function(_0x2f9fa9){logger[_0xaa02('0xe')]('VoicePrefix,\x20%s,\x20%s',_0x5ea06c,_0xaa02('0xf'));logger[_0xaa02('0x10')]('VoicePrefix,\x20%s,\x20%s,\x20%s',_0x5ea06c,'request\x20sent',JSON[_0xaa02('0x11')](_0x2f9fa9));if(_0x2f9fa9[_0xaa02('0x12')]){if(_0x2f9fa9['error'][_0xaa02('0x13')]===0x1f4){logger[_0xaa02('0x12')](_0xaa02('0x14'),_0x5ea06c,_0x2f9fa9[_0xaa02('0x12')]['message']);return _0x1bbc14(_0x2f9fa9[_0xaa02('0x12')][_0xaa02('0x15')]);}logger[_0xaa02('0x12')](_0xaa02('0x14'),_0x5ea06c,_0x2f9fa9[_0xaa02('0x12')][_0xaa02('0x15')]);return _0x12b7ae(_0x2f9fa9[_0xaa02('0x12')][_0xaa02('0x15')]);}else{logger[_0xaa02('0xe')](_0xaa02('0x14'),_0x5ea06c,_0xaa02('0xf'));_0x12b7ae(_0x2f9fa9['result'][_0xaa02('0x15')]);}})[_0xaa02('0x16')](function(_0xc3984d){logger[_0xaa02('0x12')](_0xaa02('0x14'),_0x5ea06c,_0xc3984d);_0x1bbc14(_0xc3984d);});});}
\ No newline at end of file
index 57f299b..051db22 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6353=['register','length','./voicePrefix.events','save','emit','removeListener'];(function(_0x108208,_0x37a545){var _0x13f3c0=function(_0x2b2745){while(--_0x2b2745){_0x108208['push'](_0x108208['shift']());}};_0x13f3c0(++_0x37a545);}(_0x6353,0x158));var _0x3635=function(_0x22d02c,_0x15300f){_0x22d02c=_0x22d02c-0x0;var _0x5158f1=_0x6353[_0x22d02c];return _0x5158f1;};'use strict';var VoicePrefixEvents=require(_0x3635('0x0'));var events=[_0x3635('0x1'),'remove','update'];function createListener(_0x12008d,_0x5e1089){return function(_0x5e35fc){_0x5e1089[_0x3635('0x2')](_0x12008d,_0x5e35fc);};}function removeListener(_0x503c20,_0x41f8cf){return function(){VoicePrefixEvents[_0x3635('0x3')](_0x503c20,_0x41f8cf);};}exports[_0x3635('0x4')]=function(_0x332e18){for(var _0x58c48d=0x0,_0x3e7c06=events[_0x3635('0x5')];_0x58c48d<_0x3e7c06;_0x58c48d++){var _0x18503a=events[_0x58c48d];var _0x3c715f=createListener('voicePrefix:'+_0x18503a,_0x332e18);VoicePrefixEvents['on'](_0x18503a,_0x3c715f);}};
\ No newline at end of file
+var _0xffb3=['./voicePrefix.events','update','emit','removeListener'];(function(_0x39ad2a,_0x97f3f){var _0x19ca65=function(_0x912d88){while(--_0x912d88){_0x39ad2a['push'](_0x39ad2a['shift']());}};_0x19ca65(++_0x97f3f);}(_0xffb3,0xc0));var _0x3ffb=function(_0xf94f72,_0x3fe5d8){_0xf94f72=_0xf94f72-0x0;var _0x472294=_0xffb3[_0xf94f72];return _0x472294;};'use strict';var VoicePrefixEvents=require(_0x3ffb('0x0'));var events=['save','remove',_0x3ffb('0x1')];function createListener(_0xd50aeb,_0x48f173){return function(_0x25a612){_0x48f173[_0x3ffb('0x2')](_0xd50aeb,_0x25a612);};}function removeListener(_0x17ea8f,_0x32e9f6){return function(){VoicePrefixEvents[_0x3ffb('0x3')](_0x17ea8f,_0x32e9f6);};}exports['register']=function(_0x1eeab0){for(var _0x590a21=0x0,_0x9646a8=events['length'];_0x590a21<_0x9646a8;_0x590a21++){var _0x86120d=events[_0x590a21];var _0x56c85e=createListener('voicePrefix:'+_0x86120d,_0x1eeab0);VoicePrefixEvents['on'](_0x86120d,_0x56c85e);}};
\ No newline at end of file
index 3452f75..24c4c80 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5745=['/:id','show','/:id/hoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','getHopperFinals','/:id/hopper_black','getHopperBlacks','/:id/teams','getTeams','/:id/users','/:id/members','getMembers','getLists','/:id/blacklists','getBlackLists','create','/:id/clone','post','addTeams','/:id/lists','addLists','addBlackLists','delete','destroy','removeAgents','removeLists','removeBlackLists','multer','util','path','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceQueue.controller','get','isAuthenticated'];(function(_0x9649d5,_0x2aa18a){var _0x4d1c85=function(_0x366105){while(--_0x366105){_0x9649d5['push'](_0x9649d5['shift']());}};_0x4d1c85(++_0x2aa18a);}(_0x5745,0x1bf));var _0x5574=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x5745[_0x14add3];return _0x4a174f;};'use strict';var multer=require(_0x5574('0x0'));var util=require(_0x5574('0x1'));var path=require(_0x5574('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x5574('0x3'));var interaction=require(_0x5574('0x4'));var config=require(_0x5574('0x5'));var controller=require(_0x5574('0x6'));router[_0x5574('0x7')]('/',auth[_0x5574('0x8')](),controller['index']);router[_0x5574('0x7')](_0x5574('0x9'),auth[_0x5574('0x8')](),controller[_0x5574('0xa')]);router[_0x5574('0x7')](_0x5574('0xb'),auth[_0x5574('0x8')](),controller['getHoppers']);router[_0x5574('0x7')](_0x5574('0xc'),auth[_0x5574('0x8')](),controller[_0x5574('0xd')]);router[_0x5574('0x7')](_0x5574('0xe'),auth['isAuthenticated'](),controller[_0x5574('0xf')]);router[_0x5574('0x7')](_0x5574('0x10'),auth[_0x5574('0x8')](),controller[_0x5574('0x11')]);router[_0x5574('0x7')](_0x5574('0x12'),auth[_0x5574('0x8')](),controller[_0x5574('0x13')]);router['get'](_0x5574('0x14'),auth['isAuthenticated'](),controller['getAgents']);router[_0x5574('0x7')](_0x5574('0x15'),auth['isAuthenticated'](),controller[_0x5574('0x16')]);router[_0x5574('0x7')]('/:id/lists',auth[_0x5574('0x8')](),controller[_0x5574('0x17')]);router[_0x5574('0x7')](_0x5574('0x18'),auth[_0x5574('0x8')](),controller[_0x5574('0x19')]);router['post']('/',auth[_0x5574('0x8')](),controller[_0x5574('0x1a')]);router['post'](_0x5574('0x1b'),auth[_0x5574('0x8')](),controller['clone']);router[_0x5574('0x1c')](_0x5574('0x12'),auth[_0x5574('0x8')](),controller[_0x5574('0x1d')]);router[_0x5574('0x1c')](_0x5574('0x14'),auth[_0x5574('0x8')](),controller['addAgents']);router[_0x5574('0x1c')](_0x5574('0x1e'),auth[_0x5574('0x8')](),controller[_0x5574('0x1f')]);router[_0x5574('0x1c')](_0x5574('0x18'),auth[_0x5574('0x8')](),controller[_0x5574('0x20')]);router['put'](_0x5574('0x9'),auth['isAuthenticated'](),controller['update']);router[_0x5574('0x21')]('/:id',auth[_0x5574('0x8')](),controller[_0x5574('0x22')]);router[_0x5574('0x21')]('/:id/teams',auth['isAuthenticated'](),controller['removeTeams']);router['delete'](_0x5574('0x14'),auth[_0x5574('0x8')](),controller[_0x5574('0x23')]);router[_0x5574('0x21')](_0x5574('0x1e'),auth[_0x5574('0x8')](),controller[_0x5574('0x24')]);router[_0x5574('0x21')]('/:id/blacklists',auth['isAuthenticated'](),controller[_0x5574('0x25')]);module['exports']=router;
\ No newline at end of file
+var _0x18db=['show','/:id/hoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','getHopperFinals','/:id/hopper_black','getHopperBlacks','/:id/teams','getTeams','/:id/users','getAgents','/:id/members','getMembers','/:id/lists','getLists','/:id/blacklists','getBlackLists','post','/:id/clone','clone','addTeams','addLists','update','delete','destroy','removeTeams','removeAgents','removeLists','exports','multer','path','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceQueue.controller','get','isAuthenticated','index','/:id'];(function(_0x4c4037,_0x15054b){var _0x357862=function(_0x480015){while(--_0x480015){_0x4c4037['push'](_0x4c4037['shift']());}};_0x357862(++_0x15054b);}(_0x18db,0x6e));var _0xb18d=function(_0x53018a,_0x1529c2){_0x53018a=_0x53018a-0x0;var _0x1df574=_0x18db[_0x53018a];return _0x1df574;};'use strict';var multer=require(_0xb18d('0x0'));var util=require('util');var path=require(_0xb18d('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0xb18d('0x2'));var interaction=require(_0xb18d('0x3'));var config=require(_0xb18d('0x4'));var controller=require(_0xb18d('0x5'));router[_0xb18d('0x6')]('/',auth[_0xb18d('0x7')](),controller[_0xb18d('0x8')]);router[_0xb18d('0x6')](_0xb18d('0x9'),auth['isAuthenticated'](),controller[_0xb18d('0xa')]);router['get'](_0xb18d('0xb'),auth[_0xb18d('0x7')](),controller['getHoppers']);router[_0xb18d('0x6')](_0xb18d('0xc'),auth[_0xb18d('0x7')](),controller[_0xb18d('0xd')]);router['get'](_0xb18d('0xe'),auth[_0xb18d('0x7')](),controller[_0xb18d('0xf')]);router[_0xb18d('0x6')](_0xb18d('0x10'),auth[_0xb18d('0x7')](),controller[_0xb18d('0x11')]);router['get'](_0xb18d('0x12'),auth[_0xb18d('0x7')](),controller[_0xb18d('0x13')]);router[_0xb18d('0x6')](_0xb18d('0x14'),auth[_0xb18d('0x7')](),controller[_0xb18d('0x15')]);router[_0xb18d('0x6')](_0xb18d('0x16'),auth['isAuthenticated'](),controller[_0xb18d('0x17')]);router['get'](_0xb18d('0x18'),auth['isAuthenticated'](),controller[_0xb18d('0x19')]);router[_0xb18d('0x6')](_0xb18d('0x1a'),auth[_0xb18d('0x7')](),controller[_0xb18d('0x1b')]);router[_0xb18d('0x1c')]('/',auth[_0xb18d('0x7')](),controller['create']);router[_0xb18d('0x1c')](_0xb18d('0x1d'),auth[_0xb18d('0x7')](),controller[_0xb18d('0x1e')]);router[_0xb18d('0x1c')](_0xb18d('0x12'),auth[_0xb18d('0x7')](),controller[_0xb18d('0x1f')]);router[_0xb18d('0x1c')](_0xb18d('0x14'),auth['isAuthenticated'](),controller['addAgents']);router[_0xb18d('0x1c')](_0xb18d('0x18'),auth[_0xb18d('0x7')](),controller[_0xb18d('0x20')]);router[_0xb18d('0x1c')](_0xb18d('0x1a'),auth[_0xb18d('0x7')](),controller['addBlackLists']);router['put'](_0xb18d('0x9'),auth['isAuthenticated'](),controller[_0xb18d('0x21')]);router[_0xb18d('0x22')](_0xb18d('0x9'),auth['isAuthenticated'](),controller[_0xb18d('0x23')]);router[_0xb18d('0x22')](_0xb18d('0x12'),auth[_0xb18d('0x7')](),controller[_0xb18d('0x24')]);router[_0xb18d('0x22')](_0xb18d('0x14'),auth['isAuthenticated'](),controller[_0xb18d('0x25')]);router[_0xb18d('0x22')](_0xb18d('0x18'),auth[_0xb18d('0x7')](),controller[_0xb18d('0x26')]);router[_0xb18d('0x22')](_0xb18d('0x1a'),auth[_0xb18d('0x7')](),controller['removeBlackLists']);module[_0xb18d('0x27')]=router;
\ No newline at end of file
index dfbdc7a..1aa18f1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['booked','roundrobin','progressive','predictive','power','INTEGER','yes','all','once','TEXT','join','periodic_announce','split','joinempty','leavewhenempty','BOOLEAN','acw','wrapuptime','Active/Disactive\x20Campaign','Dial\x20Method.','UNSIGNED','Max\x209999\x20channels,\x200\x20means\x20unlimited.','FLOAT','Power\x20Level:\x20Calls\x20for\x20agents\x20(min:1,\x20max:10).','agentBusyFactor','dropRate','Only\x20for\x20predictive\x20method.','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','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\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)','07:00-22:00,*,*,*','always','onlyIfOpen','#AMD\x20Initial\x20Silence','#AMD\x20After\x20Greeting\x20Silence','#AMD\x20Total\x20Analysis\x20Time','#AMD\x20Min\x20Word\x20Length','#AMD\x20Between\x20Words\x20Silence','#AMD\x20Maximum\x20Number\x20Of\x20Words','#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)','#AMD\x20Maximum\x20Word\x20Length','#RecallMe\x20Timeout\x20(min:1)','Active/Disactive\x20Recall\x20In\x20Queue','DESC','ASC','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','Cut\x20Digit\x20(min:1,\x20max:15)','sequelize','exports','STRING','ENUM','inbound','default','leastrecent','random','rrmemory','wrandom','setDataValue','strategy','getDataValue','dialMethod'];(function(_0xb47e97,_0x1c9b7b){var _0x3dc310=function(_0x215d94){while(--_0x215d94){_0xb47e97['push'](_0xb47e97['shift']());}};_0x3dc310(++_0x1c9b7b);}(_0x7a54,0x106));var _0x47a5=function(_0xf182b7,_0x479b6a){_0xf182b7=_0xf182b7-0x0;var _0x3460f9=_0x7a54[_0xf182b7];return _0x3460f9;};'use strict';var Sequelize=require(_0x47a5('0x0'));module[_0x47a5('0x1')]={'name':{'type':Sequelize[_0x47a5('0x2')],'allowNull':![],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize[_0x47a5('0x3')](_0x47a5('0x4'),'outbound'),'allowNull':![],'defaultValue':_0x47a5('0x4')},'musiconhold':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':_0x47a5('0x5')},'announce':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':''},'strategy':{'type':Sequelize[_0x47a5('0x3')]('rr','ringall',_0x47a5('0x6'),'fewestcalls',_0x47a5('0x7'),_0x47a5('0x8'),'linear',_0x47a5('0x9'),'rrordered'),'allowNull':![],'defaultValue':'ringall','set':function(_0x582352){this[_0x47a5('0xa')](_0x47a5('0xb'),_0x582352?_0x582352:'rrmemory');},'get':function(){var _0x2eb0dd=this['getDataValue']('type');var _0x1f47f4=this[_0x47a5('0xc')](_0x47a5('0xd'));var _0x250fad=this[_0x47a5('0xc')](_0x47a5('0xb'));if(_0x2eb0dd===_0x47a5('0x4')){return _0x250fad;}if(_0x1f47f4==='booked'&&_0x250fad===_0x47a5('0x8')||_0x1f47f4===_0x47a5('0xe')&&_0x250fad===_0x47a5('0xf')){return _0x250fad;}if(_0x1f47f4===_0x47a5('0x10')||_0x1f47f4===_0x47a5('0x11')||_0x1f47f4===_0x47a5('0x12')){return _0x250fad;}return null;}},'servicelevel':{'type':Sequelize[_0x47a5('0x13')](0xb),'defaultValue':0x0},'context':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':null},'penaltymemberslimit':{'type':Sequelize['INTEGER'](0xb)},'timeout':{'type':Sequelize[_0x47a5('0x13')](0xb),'defaultValue':0xf},'retry':{'type':Sequelize[_0x47a5('0x13')](0xb),'defaultValue':0x2},'timeoutpriority':{'type':Sequelize[_0x47a5('0x2')]},'weight':{'type':Sequelize[_0x47a5('0x13')](0xb),'allowNull':!![],'defaultValue':0x0},'wrapuptime':{'type':Sequelize[_0x47a5('0x13')](0xb),'defaultValue':0x0},'autofill':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':_0x47a5('0x14')},'autopause':{'type':Sequelize['ENUM']('yes','no',_0x47a5('0x15')),'defaultValue':'no'},'autopausedelay':{'type':Sequelize[_0x47a5('0x13')](0xb)},'autopausebusy':{'type':Sequelize[_0x47a5('0x3')](_0x47a5('0x14'),'no'),'defaultValue':'no'},'autopauseunavail':{'type':Sequelize[_0x47a5('0x3')](_0x47a5('0x14'),'no'),'defaultValue':'no'},'maxlen':{'type':Sequelize[_0x47a5('0x13')](0xb),'defaultValue':0x0},'setinterfacevar':{'type':Sequelize[_0x47a5('0x3')](_0x47a5('0x14'),'no'),'defaultValue':'no'},'setqueueentryvar':{'type':Sequelize['ENUM'](_0x47a5('0x14'),'no'),'defautValue':'no'},'setqueuevar':{'type':Sequelize[_0x47a5('0x3')]('yes','no'),'defaultValue':'no'},'eventmemberstatus':{'type':Sequelize[_0x47a5('0x3')](_0x47a5('0x14'),'no'),'defaultValue':'no'},'membermacro':{'type':Sequelize[_0x47a5('0x2')],'allowNull':!![]},'membergosub':{'type':Sequelize['STRING'],'allowNull':!![]},'announce_frequency':{'type':Sequelize[_0x47a5('0x13')](0xb),'defaultValue':0x0},'min_announce_frequency':{'type':Sequelize[_0x47a5('0x13')](0xb),'defaultValue':0x0},'periodic_announce_frequency':{'type':Sequelize[_0x47a5('0x13')](0xb),'defaultValue':0x0},'random_periodic_announce':{'type':Sequelize[_0x47a5('0x3')]('yes','no'),'defaultValue':'no'},'relative_periodic_announce':{'type':Sequelize[_0x47a5('0x3')](_0x47a5('0x14'),'no'),'defaultValue':'yes'},'announce_holdtime':{'type':Sequelize[_0x47a5('0x3')](_0x47a5('0x14'),'no',_0x47a5('0x16')),'defaultValue':'no'},'announce_position':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':'no'},'announce_to_first_user':{'type':Sequelize[_0x47a5('0x3')]('yes','no')},'announce_position_limit':{'type':Sequelize['INTEGER'](0xb)},'announce_round_seconds':{'type':Sequelize[_0x47a5('0x3')]('0','5','10','15','20','30'),'defaultValue':'0'},'monitor_format':{'type':Sequelize['STRING'],'defaultValue':''},'monitor_type':{'type':Sequelize[_0x47a5('0x2')]},'queue_youarenext':{'type':Sequelize['STRING'],'defaultValue':null},'queue_thereare':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':null},'queue_callswaiting':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':null},'queue_holdtime':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':null},'queue_minute':{'type':Sequelize[_0x47a5('0x2')],'allowNull':!![],'defaultValue':null},'queue_minutes':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':null},'queue_seconds':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':null},'queue_thankyou':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':null},'queue_reporthold':{'type':Sequelize[_0x47a5('0x2')]},'queue_quantity1':{'type':Sequelize[_0x47a5('0x2')]},'queue_quantity2':{'type':Sequelize[_0x47a5('0x2')]},'queue_periodic_announce':{'type':Sequelize[_0x47a5('0x2')]},'queue_less_than':{'type':Sequelize[_0x47a5('0x2')]},'periodic_announce':{'type':Sequelize[_0x47a5('0x17')],'set':function(_0x528582){this[_0x47a5('0xa')]('periodic_announce',_0x528582?_0x528582[_0x47a5('0x18')](','):[]);},'get':function(){return this[_0x47a5('0xc')](_0x47a5('0x19'))?this['getDataValue'](_0x47a5('0x19'))[_0x47a5('0x1a')](','):[];}},'joinempty':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':_0x47a5('0x14'),'set':function(_0x51cc81){this['setDataValue'](_0x47a5('0x1b'),_0x51cc81?_0x51cc81[_0x47a5('0x18')](','):[]);},'get':function(){return this['getDataValue']('joinempty')?this[_0x47a5('0xc')](_0x47a5('0x1b'))['split'](','):[];}},'leavewhenempty':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':'no','set':function(_0x53119b){this[_0x47a5('0xa')](_0x47a5('0x1c'),_0x53119b?_0x53119b['join'](','):[]);},'get':function(){return this['getDataValue'](_0x47a5('0x1c'))?this['getDataValue'](_0x47a5('0x1c'))[_0x47a5('0x1a')](','):[];}},'reportholdtime':{'type':Sequelize[_0x47a5('0x3')]('yes','no'),'defaultValue':'no'},'ringinuse':{'type':Sequelize[_0x47a5('0x3')]('yes','no'),'defaultValue':'no'},'memberdelay':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'timeoutrestart':{'type':Sequelize[_0x47a5('0x3')]('yes','no'),'defaultValue':'no'},'defaultrule':{'type':Sequelize[_0x47a5('0x2')]},'description':{'type':Sequelize['STRING']},'acw':{'type':Sequelize[_0x47a5('0x1d')],'defaultValue':0x0,'set':function(_0x3534cb){this[_0x47a5('0xa')](_0x47a5('0x1e'),_0x3534cb);if(_0x3534cb){if(this[_0x47a5('0xc')](_0x47a5('0x1f'))<0x2){this[_0x47a5('0xa')](_0x47a5('0x1f'),0x2);}}}},'acwTimeout':{'type':Sequelize[_0x47a5('0x13')](0xb),'defaultValue':0xa},'dialActive':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':_0x47a5('0x20')},'dialMethod':{'type':Sequelize[_0x47a5('0x3')]('preview',_0x47a5('0x10'),_0x47a5('0x12'),_0x47a5('0x11'),'booked'),'defaultValue':_0x47a5('0x10'),'comment':_0x47a5('0x21')},'dialLimitChannel':{'type':Sequelize['INTEGER'](0x4)[_0x47a5('0x22')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0x47a5('0x23')},'dialLimitQueue':{'type':Sequelize['INTEGER'](0x4)['UNSIGNED'],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':'Max\x209999\x20member\x20in\x20queue(min:1,\x20max:9999),\x200\x20means\x20unlimited.'},'dialPowerLevel':{'type':Sequelize[_0x47a5('0x24')](0x2)['UNSIGNED'],'defaultValue':0x1,'validate':{'min':0x1,'max':0xa},'comment':_0x47a5('0x25')},'dialPredictiveOptimization':{'type':Sequelize[_0x47a5('0x3')](_0x47a5('0x26'),_0x47a5('0x27')),'defaultValue':_0x47a5('0x27'),'comment':_0x47a5('0x28')},'dialPredictiveOptimizationPercentage':{'type':Sequelize[_0x47a5('0x24')](0x2)[_0x47a5('0x22')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x5f},'comment':_0x47a5('0x29')},'dialPredictiveInterval':{'type':Sequelize[_0x47a5('0x13')](0x3)[_0x47a5('0x22')],'defaultValue':0xa,'validate':{'min':0x5,'max':0x1e},'comment':_0x47a5('0x2a')},'dialOriginateCallerIdName':{'type':Sequelize[_0x47a5('0x2')]},'dialOriginateCallerIdNumber':{'type':Sequelize['STRING']},'dialOriginateTimeout':{'type':Sequelize[_0x47a5('0x13')](0x3)[_0x47a5('0x22')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0x47a5('0x2b')},'dialQueueOptions':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':'tTxX','comment':_0x47a5('0x2c')},'dialQueueTimeout':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'Queue\x20Timeout\x20Seconds\x20(min:1,\x20max:999)'},'dialQueueProject':{'type':Sequelize['STRING'],'comment':_0x47a5('0x2d')},'dialCongestionMaxRetry':{'type':Sequelize['INTEGER'](0x3)[_0x47a5('0x22')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x47a5('0x2e')},'dialCongestionRetryFrequency':{'type':Sequelize[_0x47a5('0x13')](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x47a5('0x2f')},'dialBusyMaxRetry':{'type':Sequelize[_0x47a5('0x13')](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'#Busy\x20Retry\x20(min:1,\x20max:999)'},'dialBusyRetryFrequency':{'type':Sequelize[_0x47a5('0x13')](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x47a5('0x30')},'dialNoAnswerMaxRetry':{'type':Sequelize[_0x47a5('0x13')](0x3)[_0x47a5('0x22')],'defaultValue':0x3,'comment':_0x47a5('0x31')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0x47a5('0x13')](0x5)[_0x47a5('0x22')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x47a5('0x32')},'dialGlobalMaxRetry':{'type':Sequelize[_0x47a5('0x13')](0x3)[_0x47a5('0x22')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0x47a5('0x33')},'dialTimezone':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':_0x47a5('0x34')},'dialPrefix':{'type':Sequelize[_0x47a5('0x2')],'defaultValue':null},'dialCheckDuplicateType':{'type':Sequelize[_0x47a5('0x3')](_0x47a5('0x35'),'never',_0x47a5('0x36')),'defaultValue':_0x47a5('0x35')},'dialAMDActive':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':'Active/Disactive\x20AMD'},'dialAMDInitialSilence':{'type':Sequelize[_0x47a5('0x13')](0x9)['UNSIGNED'],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0x47a5('0x37')},'dialAMDGreeting':{'type':Sequelize[_0x47a5('0x13')](0x9)['UNSIGNED'],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':'#AMD\x20Greeting'},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0x47a5('0x13')](0x9)['UNSIGNED'],'defaultValue':0x320,'validate':{'min':0x0},'comment':_0x47a5('0x38')},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0x47a5('0x13')](0x9)[_0x47a5('0x22')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x47a5('0x39')},'dialAMDMinWordLength':{'type':Sequelize[_0x47a5('0x13')](0x9)[_0x47a5('0x22')],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0x47a5('0x3a')},'dialAMDBetweenWordsSilence':{'type':Sequelize['INTEGER'](0x9)['UNSIGNED'],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0x47a5('0x3b')},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0x47a5('0x13')](0x9)[_0x47a5('0x22')],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0x47a5('0x3c')},'dialAMDSilenceThreshold':{'type':Sequelize[_0x47a5('0x13')](0x5)[_0x47a5('0x22')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0x47a5('0x3d')},'dialAMDMaximumWordLength':{'type':Sequelize['INTEGER'](0x9)[_0x47a5('0x22')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x47a5('0x3e')},'dialRecallMeTimeout':{'type':Sequelize[_0x47a5('0x13')](0x5)['UNSIGNED'],'validate':{'min':0x1},'defaultValue':0x1e,'comment':_0x47a5('0x3f')},'dialRecallInQueue':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':_0x47a5('0x40')},'dialOrderByScheduledAt':{'type':Sequelize[_0x47a5('0x3')](_0x47a5('0x41'),_0x47a5('0x42')),'defaultValue':'DESC'},'dialQueueProject2':{'type':Sequelize[_0x47a5('0x2')],'comment':_0x47a5('0x2d')},'dialAgiAfterHangupClient':{'type':Sequelize[_0x47a5('0x1d')],'defaultValue':![]},'dialAgiAfterHangupAgent':{'type':Sequelize[_0x47a5('0x1d')],'defaultValue':![]},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0x47a5('0x13')](0x3)[_0x47a5('0x22')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x47a5('0x43')},'dialCutDigit':{'type':Sequelize['INTEGER'](0x3)[_0x47a5('0x22')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x47a5('0x44')}};
\ No newline at end of file
+var _0xb10b=['#RecallMe\x20Timeout\x20(min:1)','Active/Disactive\x20Recall\x20In\x20Queue','DESC','AGI\x20queue\x20option\x20(use:\x20agi://127.0.0.1/square,<project_name>)','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','Cut\x20Digit\x20(min:1,\x20max:15)','sequelize','STRING','name','ENUM','outbound','inbound','default','leastrecent','fewestcalls','rrmemory','linear','wrandom','rrordered','ringall','setDataValue','strategy','getDataValue','type','dialMethod','booked','progressive','predictive','power','INTEGER','yes','all','once','TEXT','periodic_announce','split','join','joinempty','leavewhenempty','acw','wrapuptime','BOOLEAN','Dial\x20Method.','Max\x209999\x20channels,\x200\x20means\x20unlimited.','UNSIGNED','Max\x209999\x20member\x20in\x20queue(min:1,\x20max:9999),\x200\x20means\x20unlimited.','Power\x20Level:\x20Calls\x20for\x20agents\x20(min:1,\x20max:10).','agentBusyFactor','dropRate','Only\x20for\x20predictive\x20method.','FLOAT','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','Congestion\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Busy\x20Retry\x20(min:1,\x20max:999)','Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)','07:00-22:00,*,*,*','always','never','onlyIfOpen','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#AMD\x20After\x20Greeting\x20Silence','#AMD\x20Total\x20Analysis\x20Time','#AMD\x20Min\x20Word\x20Length','#AMD\x20Between\x20Words\x20Silence','#AMD\x20Maximum\x20Number\x20Of\x20Words','#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)','#AMD\x20Maximum\x20Word\x20Length'];(function(_0x288b86,_0x3e8c3a){var _0x5e1360=function(_0x23f930){while(--_0x23f930){_0x288b86['push'](_0x288b86['shift']());}};_0x5e1360(++_0x3e8c3a);}(_0xb10b,0x12a));var _0xbb10=function(_0x20edcb,_0x4d49a8){_0x20edcb=_0x20edcb-0x0;var _0x1ced78=_0xb10b[_0x20edcb];return _0x1ced78;};'use strict';var Sequelize=require(_0xbb10('0x0'));module['exports']={'name':{'type':Sequelize[_0xbb10('0x1')],'allowNull':![],'unique':_0xbb10('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize[_0xbb10('0x3')]('inbound',_0xbb10('0x4')),'allowNull':![],'defaultValue':_0xbb10('0x5')},'musiconhold':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':_0xbb10('0x6')},'announce':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':''},'strategy':{'type':Sequelize[_0xbb10('0x3')]('rr','ringall',_0xbb10('0x7'),_0xbb10('0x8'),'random',_0xbb10('0x9'),_0xbb10('0xa'),_0xbb10('0xb'),_0xbb10('0xc')),'allowNull':![],'defaultValue':_0xbb10('0xd'),'set':function(_0x1ce33e){this[_0xbb10('0xe')](_0xbb10('0xf'),_0x1ce33e?_0x1ce33e:'rrmemory');},'get':function(){var _0x4e47f8=this[_0xbb10('0x10')](_0xbb10('0x11'));var _0xce64f3=this['getDataValue'](_0xbb10('0x12'));var _0x5be7e0=this[_0xbb10('0x10')](_0xbb10('0xf'));if(_0x4e47f8===_0xbb10('0x5')){return _0x5be7e0;}if(_0xce64f3===_0xbb10('0x13')&&_0x5be7e0===_0xbb10('0x9')||_0xce64f3===_0xbb10('0x13')&&_0x5be7e0==='roundrobin'){return _0x5be7e0;}if(_0xce64f3===_0xbb10('0x14')||_0xce64f3===_0xbb10('0x15')||_0xce64f3===_0xbb10('0x16')){return _0x5be7e0;}return null;}},'servicelevel':{'type':Sequelize[_0xbb10('0x17')](0xb),'defaultValue':0x0},'context':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':null},'penaltymemberslimit':{'type':Sequelize[_0xbb10('0x17')](0xb)},'timeout':{'type':Sequelize[_0xbb10('0x17')](0xb),'defaultValue':0xf},'retry':{'type':Sequelize[_0xbb10('0x17')](0xb),'defaultValue':0x2},'timeoutpriority':{'type':Sequelize[_0xbb10('0x1')]},'weight':{'type':Sequelize[_0xbb10('0x17')](0xb),'allowNull':!![],'defaultValue':0x0},'wrapuptime':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'autofill':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x18'),'no'),'defaultValue':_0xbb10('0x18')},'autopause':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x18'),'no',_0xbb10('0x19')),'defaultValue':'no'},'autopausedelay':{'type':Sequelize[_0xbb10('0x17')](0xb)},'autopausebusy':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x18'),'no'),'defaultValue':'no'},'autopauseunavail':{'type':Sequelize[_0xbb10('0x3')]('yes','no'),'defaultValue':'no'},'maxlen':{'type':Sequelize[_0xbb10('0x17')](0xb),'defaultValue':0x0},'setinterfacevar':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x18'),'no'),'defaultValue':'no'},'setqueueentryvar':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x18'),'no'),'defautValue':'no'},'setqueuevar':{'type':Sequelize[_0xbb10('0x3')]('yes','no'),'defaultValue':'no'},'eventmemberstatus':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x18'),'no'),'defaultValue':'no'},'membermacro':{'type':Sequelize['STRING'],'allowNull':!![]},'membergosub':{'type':Sequelize['STRING'],'allowNull':!![]},'announce_frequency':{'type':Sequelize[_0xbb10('0x17')](0xb),'defaultValue':0x0},'min_announce_frequency':{'type':Sequelize[_0xbb10('0x17')](0xb),'defaultValue':0x0},'periodic_announce_frequency':{'type':Sequelize[_0xbb10('0x17')](0xb),'defaultValue':0x0},'random_periodic_announce':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x18'),'no'),'defaultValue':'no'},'relative_periodic_announce':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x18'),'no'),'defaultValue':_0xbb10('0x18')},'announce_holdtime':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x18'),'no',_0xbb10('0x1a')),'defaultValue':'no'},'announce_position':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':'no'},'announce_to_first_user':{'type':Sequelize['ENUM']('yes','no')},'announce_position_limit':{'type':Sequelize['INTEGER'](0xb)},'announce_round_seconds':{'type':Sequelize[_0xbb10('0x3')]('0','5','10','15','20','30'),'defaultValue':'0'},'monitor_format':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':''},'monitor_type':{'type':Sequelize[_0xbb10('0x1')]},'queue_youarenext':{'type':Sequelize['STRING'],'defaultValue':null},'queue_thereare':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':null},'queue_callswaiting':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':null},'queue_holdtime':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':null},'queue_minute':{'type':Sequelize[_0xbb10('0x1')],'allowNull':!![],'defaultValue':null},'queue_minutes':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':null},'queue_seconds':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':null},'queue_thankyou':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':null},'queue_reporthold':{'type':Sequelize['STRING']},'queue_quantity1':{'type':Sequelize[_0xbb10('0x1')]},'queue_quantity2':{'type':Sequelize[_0xbb10('0x1')]},'queue_periodic_announce':{'type':Sequelize[_0xbb10('0x1')]},'queue_less_than':{'type':Sequelize[_0xbb10('0x1')]},'periodic_announce':{'type':Sequelize[_0xbb10('0x1b')],'set':function(_0x2ff4c1){this['setDataValue'](_0xbb10('0x1c'),_0x2ff4c1?_0x2ff4c1['join'](','):[]);},'get':function(){return this[_0xbb10('0x10')]('periodic_announce')?this[_0xbb10('0x10')](_0xbb10('0x1c'))[_0xbb10('0x1d')](','):[];}},'joinempty':{'type':Sequelize['STRING'],'defaultValue':'yes','set':function(_0x4c3744){this[_0xbb10('0xe')]('joinempty',_0x4c3744?_0x4c3744[_0xbb10('0x1e')](','):[]);},'get':function(){return this[_0xbb10('0x10')](_0xbb10('0x1f'))?this[_0xbb10('0x10')](_0xbb10('0x1f'))[_0xbb10('0x1d')](','):[];}},'leavewhenempty':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':'no','set':function(_0x4975f5){this[_0xbb10('0xe')](_0xbb10('0x20'),_0x4975f5?_0x4975f5[_0xbb10('0x1e')](','):[]);},'get':function(){return this[_0xbb10('0x10')](_0xbb10('0x20'))?this[_0xbb10('0x10')](_0xbb10('0x20'))[_0xbb10('0x1d')](','):[];}},'reportholdtime':{'type':Sequelize[_0xbb10('0x3')]('yes','no'),'defaultValue':'no'},'ringinuse':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x18'),'no'),'defaultValue':'no'},'memberdelay':{'type':Sequelize[_0xbb10('0x17')](0xb),'defaultValue':0x0},'timeoutrestart':{'type':Sequelize[_0xbb10('0x3')]('yes','no'),'defaultValue':'no'},'defaultrule':{'type':Sequelize[_0xbb10('0x1')]},'description':{'type':Sequelize['STRING']},'acw':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'set':function(_0x3eb3cc){this[_0xbb10('0xe')](_0xbb10('0x21'),_0x3eb3cc);if(_0x3eb3cc){if(this[_0xbb10('0x10')](_0xbb10('0x22'))<0x2){this[_0xbb10('0xe')]('wrapuptime',0x2);}}}},'acwTimeout':{'type':Sequelize[_0xbb10('0x17')](0xb),'defaultValue':0xa},'dialActive':{'type':Sequelize[_0xbb10('0x23')],'defaultValue':0x0,'comment':'Active/Disactive\x20Campaign'},'dialMethod':{'type':Sequelize['ENUM']('preview',_0xbb10('0x14'),_0xbb10('0x16'),_0xbb10('0x15'),'booked'),'defaultValue':_0xbb10('0x14'),'comment':_0xbb10('0x24')},'dialLimitChannel':{'type':Sequelize[_0xbb10('0x17')](0x4)['UNSIGNED'],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0xbb10('0x25')},'dialLimitQueue':{'type':Sequelize[_0xbb10('0x17')](0x4)[_0xbb10('0x26')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0xbb10('0x27')},'dialPowerLevel':{'type':Sequelize['FLOAT'](0x2)[_0xbb10('0x26')],'defaultValue':0x1,'validate':{'min':0x1,'max':0xa},'comment':_0xbb10('0x28')},'dialPredictiveOptimization':{'type':Sequelize['ENUM'](_0xbb10('0x29'),_0xbb10('0x2a')),'defaultValue':_0xbb10('0x2a'),'comment':_0xbb10('0x2b')},'dialPredictiveOptimizationPercentage':{'type':Sequelize[_0xbb10('0x2c')](0x2)[_0xbb10('0x26')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x5f},'comment':'Predictive\x20Optimization\x20Percentage\x20(min:\x201,\x20max:\x2095)'},'dialPredictiveInterval':{'type':Sequelize[_0xbb10('0x17')](0x3)[_0xbb10('0x26')],'defaultValue':0xa,'validate':{'min':0x5,'max':0x1e},'comment':_0xbb10('0x2d')},'dialOriginateCallerIdName':{'type':Sequelize[_0xbb10('0x1')]},'dialOriginateCallerIdNumber':{'type':Sequelize['STRING']},'dialOriginateTimeout':{'type':Sequelize[_0xbb10('0x17')](0x3)[_0xbb10('0x26')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0xbb10('0x2e')},'dialQueueOptions':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':'tTxX','comment':_0xbb10('0x2f')},'dialQueueTimeout':{'type':Sequelize[_0xbb10('0x17')](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'Queue\x20Timeout\x20Seconds\x20(min:1,\x20max:999)'},'dialQueueProject':{'type':Sequelize[_0xbb10('0x1')],'comment':'AGI\x20queue\x20option\x20(use:\x20agi://127.0.0.1/square,<project_name>)'},'dialCongestionMaxRetry':{'type':Sequelize[_0xbb10('0x17')](0x3)[_0xbb10('0x26')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'#Congestion\x20Retry\x20(min:1,\x20max:999)'},'dialCongestionRetryFrequency':{'type':Sequelize[_0xbb10('0x17')](0x5)[_0xbb10('0x26')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xbb10('0x30')},'dialBusyMaxRetry':{'type':Sequelize['INTEGER'](0x3)[_0xbb10('0x26')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xbb10('0x31')},'dialBusyRetryFrequency':{'type':Sequelize[_0xbb10('0x17')](0x5)[_0xbb10('0x26')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xbb10('0x32')},'dialNoAnswerMaxRetry':{'type':Sequelize[_0xbb10('0x17')](0x3)[_0xbb10('0x26')],'defaultValue':0x3,'comment':_0xbb10('0x33')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0xbb10('0x17')](0x5)[_0xbb10('0x26')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xbb10('0x34')},'dialGlobalMaxRetry':{'type':Sequelize[_0xbb10('0x17')](0x3)['UNSIGNED'],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0xbb10('0x35')},'dialTimezone':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize['STRING'],'defaultValue':_0xbb10('0x36')},'dialPrefix':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':null},'dialCheckDuplicateType':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x37'),_0xbb10('0x38'),_0xbb10('0x39')),'defaultValue':_0xbb10('0x37')},'dialAMDActive':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':'Active/Disactive\x20AMD'},'dialAMDInitialSilence':{'type':Sequelize[_0xbb10('0x17')](0x9)[_0xbb10('0x26')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0xbb10('0x3a')},'dialAMDGreeting':{'type':Sequelize['INTEGER'](0x9)['UNSIGNED'],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0xbb10('0x3b')},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0xbb10('0x17')](0x9)[_0xbb10('0x26')],'defaultValue':0x320,'validate':{'min':0x0},'comment':_0xbb10('0x3c')},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0xbb10('0x17')](0x9)[_0xbb10('0x26')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0xbb10('0x3d')},'dialAMDMinWordLength':{'type':Sequelize[_0xbb10('0x17')](0x9)[_0xbb10('0x26')],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0xbb10('0x3e')},'dialAMDBetweenWordsSilence':{'type':Sequelize['INTEGER'](0x9)['UNSIGNED'],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0xbb10('0x3f')},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0xbb10('0x17')](0x9)[_0xbb10('0x26')],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0xbb10('0x40')},'dialAMDSilenceThreshold':{'type':Sequelize[_0xbb10('0x17')](0x5)[_0xbb10('0x26')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0xbb10('0x41')},'dialAMDMaximumWordLength':{'type':Sequelize[_0xbb10('0x17')](0x9)[_0xbb10('0x26')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0xbb10('0x42')},'dialRecallMeTimeout':{'type':Sequelize[_0xbb10('0x17')](0x5)[_0xbb10('0x26')],'validate':{'min':0x1},'defaultValue':0x1e,'comment':_0xbb10('0x43')},'dialRecallInQueue':{'type':Sequelize[_0xbb10('0x23')],'defaultValue':0x0,'comment':_0xbb10('0x44')},'dialOrderByScheduledAt':{'type':Sequelize['ENUM'](_0xbb10('0x45'),'ASC'),'defaultValue':_0xbb10('0x45')},'dialQueueProject2':{'type':Sequelize[_0xbb10('0x1')],'comment':_0xbb10('0x46')},'dialAgiAfterHangupClient':{'type':Sequelize[_0xbb10('0x23')],'defaultValue':![]},'dialAgiAfterHangupAgent':{'type':Sequelize[_0xbb10('0x23')],'defaultValue':![]},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0xbb10('0x17')](0x3)[_0xbb10('0x26')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xbb10('0x47')},'dialCutDigit':{'type':Sequelize[_0xbb10('0x17')](0x3)[_0xbb10('0x26')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xbb10('0x48')}};
\ No newline at end of file
index 8e52add..50ba73a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ab8=['getAgents','getMembers','getLists','addLists','dialCheckDuplicateType','insert','into','cm_hopper','fromQuery','phone','ContactId','updatedAt','select','field','NOW()','scheduledAt','CmListId','toString','ListId','from','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20NOT\x20IN\x20(?)','calleridnum','cm_hopper_final','onlyIfOpen','phone\x20IS\x20NOT\x20NULL','VoiceQueueId\x20=\x20?','cm_contacts','sequelize','getBlackLists','addBlackLists','cm_hopper_black','removeBlackLists','bluebird','mustache','util','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/utils','../../mysqldb','localhost','./voiceQueue.socket','register','sendStatus','status','json','offset','Content-Range','apply','reject','save','update','then','destroy','end','stack','name','send','index','rawAttributes','model','query','dateStart','dateEnd','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filters','add','day','merge','filter','options','count','includeAll','include','findAll','rows','catch','params','VoiceQueue','find','create','body','addAgents','user','clone','get','omit','createdAt','CmHopper','VoiceQueueId','getHopperHistories','findOne','CmHopperHistory','getHopperFinals','map','CmHopperFinal','getHopperBlacks','CmHopperBlack','getTeams','Team','addTeams','Agents','penalty','ids','removeTeams','removeAgents','spread','emit','userVoiceQueue:save','User','voicePause','push','UserVoiceQueueRt','upsert','format','%s/%s','SIP','all','realtime'];(function(_0x5315dc,_0x5624e0){var _0x13d2a3=function(_0x5e4864){while(--_0x5e4864){_0x5315dc['push'](_0x5315dc['shift']());}};_0x13d2a3(++_0x5624e0);}(_0x1ab8,0x136));var _0x81ab=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0x1ab8[_0x432682];return _0x463d05;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x81ab('0x0'));var Mustache=require(_0x81ab('0x1'));var util=require(_0x81ab('0x2'));var path=require('path');var sox=require(_0x81ab('0x3'));var csv=require(_0x81ab('0x4'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x81ab('0x5'));var squel=require(_0x81ab('0x6'));var crypto=require(_0x81ab('0x7'));var jsforce=require(_0x81ab('0x8'));var deskjs=require(_0x81ab('0x9'));var toCsv=require(_0x81ab('0x4'));var querystring=require('querystring');var Papa=require(_0x81ab('0xa'));var qs=require(_0x81ab('0xb'));var logger=require('../../config/logger')('api');var utils=require(_0x81ab('0xc'));var config=require('../../config/environment');var db=require(_0x81ab('0xd'))['db'];var socket=require('socket.io-emitter')({'host':_0x81ab('0xe'),'port':0x18eb});require(_0x81ab('0xf'))[_0x81ab('0x10')](socket);function respondWithStatusCode(_0x3e1f12,_0x310911){_0x310911=_0x310911||0xcc;return function(_0x25907f){if(_0x25907f){return _0x3e1f12[_0x81ab('0x11')](_0x310911);}return _0x3e1f12[_0x81ab('0x12')](_0x310911)['end']();};}function respondWithResult(_0x1f03c9,_0x2154da){_0x2154da=_0x2154da||0xc8;return function(_0x34fbd4){if(_0x34fbd4){return _0x1f03c9[_0x81ab('0x12')](_0x2154da)[_0x81ab('0x13')](_0x34fbd4);}};}function respondWithFilteredResult(_0xe0e4d,_0x5ccffa){return function(_0x22616f){if(_0x22616f){var _0xea823d=_0x22616f['count'],_0x399a3d=_0x5ccffa[_0x81ab('0x14')],_0x1188d4=_0x5ccffa[_0x81ab('0x14')]+_0x5ccffa['limit'],_0x4106fc;if(_0x1188d4>=_0xea823d){_0x1188d4=_0xea823d;_0x4106fc=0xc8;}else{_0x4106fc=0xce;}_0xe0e4d[_0x81ab('0x12')](_0x4106fc);return _0xe0e4d['set'](_0x81ab('0x15'),_0x399a3d+'-'+_0x1188d4+'/'+_0xea823d)[_0x81ab('0x13')](_0x22616f);}return null;};}function patchUpdates(_0x2d2223){return function(_0x1805cf){try{jsonpatch[_0x81ab('0x16')](_0x1805cf,_0x2d2223,!![]);}catch(_0x6370f4){return BPromise[_0x81ab('0x17')](_0x6370f4);}return _0x1805cf[_0x81ab('0x18')]();};}function saveUpdates(_0x5df75d,_0x4bc345){return function(_0x3e7703){if(_0x3e7703){return _0x3e7703[_0x81ab('0x19')](_0x5df75d)[_0x81ab('0x1a')](function(_0x524d59){return _0x524d59;});}return null;};}function removeEntity(_0xc61b6b,_0x3f1c59){return function(_0x5d797f){if(_0x5d797f){return _0x5d797f[_0x81ab('0x1b')]()['then'](function(){_0xc61b6b[_0x81ab('0x12')](0xcc)[_0x81ab('0x1c')]();});}};}function handleEntityNotFound(_0x52159c,_0x1681db){return function(_0x8b2af6){if(!_0x8b2af6){_0x52159c[_0x81ab('0x11')](0x194);}return _0x8b2af6;};}function handleError(_0x1113d7,_0x3d0186){_0x3d0186=_0x3d0186||0x1f4;return function(_0x50b396){logger['error'](_0x50b396[_0x81ab('0x1d')]);if(_0x50b396[_0x81ab('0x1e')]){delete _0x50b396['name'];}_0x1113d7[_0x81ab('0x12')](_0x3d0186)[_0x81ab('0x1f')](_0x50b396);};}exports[_0x81ab('0x20')]=function(_0x25ef2f,_0x10b497){var _0x32f669={},_0x4b3866={},_0x16a7f8={'count':0x0,'rows':[]};var _0x5f36df=db['VoiceQueue'][_0x81ab('0x21')];_0x4b3866[_0x81ab('0x22')]=_['keys'](_0x5f36df);var _0x4b232e={'dateStart':_0x25ef2f[_0x81ab('0x23')][_0x81ab('0x24')],'dateEnd':_0x25ef2f[_0x81ab('0x23')]['dateEnd']};delete _0x25ef2f[_0x81ab('0x23')][_0x81ab('0x24')];delete _0x25ef2f[_0x81ab('0x23')][_0x81ab('0x25')];_0x4b3866[_0x81ab('0x23')]=_[_0x81ab('0x26')](_0x25ef2f[_0x81ab('0x23')]);_0x4b3866['filters']=_[_0x81ab('0x27')](_0x4b3866[_0x81ab('0x22')],_0x4b3866[_0x81ab('0x23')]);_0x32f669[_0x81ab('0x28')]=_[_0x81ab('0x27')](_0x4b3866[_0x81ab('0x22')],qs[_0x81ab('0x29')](_0x25ef2f[_0x81ab('0x23')][_0x81ab('0x29')]));_0x32f669['attributes']=_0x32f669[_0x81ab('0x28')][_0x81ab('0x2a')]?_0x32f669['attributes']:_0x4b3866[_0x81ab('0x22')];if(!_0x25ef2f['query'][_0x81ab('0x2b')](_0x81ab('0x2c'))){_0x32f669[_0x81ab('0x2d')]=qs[_0x81ab('0x2d')](_0x25ef2f[_0x81ab('0x23')]['limit']);_0x32f669[_0x81ab('0x14')]=qs[_0x81ab('0x14')](_0x25ef2f[_0x81ab('0x23')]['offset']);}_0x32f669[_0x81ab('0x2e')]=qs[_0x81ab('0x2f')](_0x25ef2f['query']['sort']);_0x32f669[_0x81ab('0x30')]=qs['filters'](_[_0x81ab('0x31')](_0x25ef2f[_0x81ab('0x23')],_0x4b3866[_0x81ab('0x32')]));if(_0x4b232e[_0x81ab('0x24')]){if(_0x4b232e['dateEnd']){_0x4b232e['dateEnd']=moment(_0x4b232e[_0x81ab('0x25')])[_0x81ab('0x33')](0x1,_0x81ab('0x34'));}else{_0x4b232e['dateEnd']=moment(_0x4b232e[_0x81ab('0x24')])[_0x81ab('0x33')](0x1,_0x81ab('0x34'));}_[_0x81ab('0x35')](_0x32f669[_0x81ab('0x30')],{'createdAt':{'$gte':_0x4b232e[_0x81ab('0x24')],'$lte':_0x4b232e[_0x81ab('0x25')]}});}if(_0x25ef2f['query'][_0x81ab('0x36')]){_0x32f669[_0x81ab('0x30')]=_[_0x81ab('0x35')](_0x32f669[_0x81ab('0x30')],{'$or':_['map'](_0x32f669[_0x81ab('0x28')],function(_0x27ec45){var _0x3213e6={};_0x3213e6[_0x27ec45]={'$like':'%'+_0x25ef2f[_0x81ab('0x23')][_0x81ab('0x36')]+'%'};return _0x3213e6;})});}_0x32f669=_['merge']({},_0x32f669,_0x25ef2f[_0x81ab('0x37')]);var _0x19daff={'where':_0x32f669[_0x81ab('0x30')]};return db['VoiceQueue'][_0x81ab('0x38')](_0x19daff)['then'](function(_0x596520){_0x16a7f8[_0x81ab('0x38')]=_0x596520;if(_0x25ef2f[_0x81ab('0x23')][_0x81ab('0x39')]){_0x32f669[_0x81ab('0x3a')]=[{'all':!![]}];}return db['VoiceQueue'][_0x81ab('0x3b')](_0x32f669);})[_0x81ab('0x1a')](function(_0x5da136){_0x16a7f8[_0x81ab('0x3c')]=_0x5da136;return _0x16a7f8;})['then'](respondWithFilteredResult(_0x10b497,_0x32f669))[_0x81ab('0x3d')](handleError(_0x10b497,null));};exports['show']=function(_0x2d465f,_0x1bc12d){var _0x448aa2={'raw':![],'where':{'id':_0x2d465f[_0x81ab('0x3e')]['id']}},_0x4af098={};_0x4af098['model']=_['keys'](db[_0x81ab('0x3f')][_0x81ab('0x21')]);_0x4af098[_0x81ab('0x23')]=_[_0x81ab('0x26')](_0x2d465f[_0x81ab('0x23')]);_0x4af098[_0x81ab('0x32')]=_[_0x81ab('0x27')](_0x4af098[_0x81ab('0x22')],_0x4af098[_0x81ab('0x23')]);_0x448aa2[_0x81ab('0x28')]=_[_0x81ab('0x27')](_0x4af098[_0x81ab('0x22')],qs['fields'](_0x2d465f[_0x81ab('0x23')][_0x81ab('0x29')]));_0x448aa2[_0x81ab('0x28')]=_0x448aa2[_0x81ab('0x28')][_0x81ab('0x2a')]?_0x448aa2['attributes']:_0x4af098[_0x81ab('0x22')];if(_0x2d465f[_0x81ab('0x23')][_0x81ab('0x39')]){_0x448aa2[_0x81ab('0x3a')]=[{'all':!![]}];}_0x448aa2=_['merge']({},_0x448aa2,_0x2d465f[_0x81ab('0x37')]);return db[_0x81ab('0x3f')][_0x81ab('0x40')](_0x448aa2)['then'](handleEntityNotFound(_0x1bc12d,null))[_0x81ab('0x1a')](respondWithResult(_0x1bc12d,null))[_0x81ab('0x3d')](handleError(_0x1bc12d,null));};exports[_0x81ab('0x41')]=function(_0x4e1663,_0x2fd956){var _0x29cb91=null;return db[_0x81ab('0x3f')][_0x81ab('0x41')](_0x4e1663[_0x81ab('0x42')],{})[_0x81ab('0x1a')](function(_0x1732d1){_0x29cb91=_0x1732d1;if(_0x1732d1){_0x29cb91[_0x81ab('0x43')]([_0x4e1663[_0x81ab('0x44')]['id']]);}return _0x29cb91;})[_0x81ab('0x1a')](respondWithResult(_0x2fd956,0xc9))[_0x81ab('0x3d')](handleError(_0x2fd956,null));};exports[_0x81ab('0x45')]=function(_0xda26c,_0x8d1fa8){var _0x569c52={'raw':![],'where':{'id':_0xda26c[_0x81ab('0x3e')]['id']}},_0x57c3e9={};_0x57c3e9[_0x81ab('0x22')]=_['keys'](db['VoiceQueue'][_0x81ab('0x21')]);_0x569c52[_0x81ab('0x28')]=_['intersection'](_0x57c3e9[_0x81ab('0x22')],qs[_0x81ab('0x29')](_0xda26c['query']['fields']));_0x569c52[_0x81ab('0x28')]=_0x569c52[_0x81ab('0x28')]['length']?_0x569c52[_0x81ab('0x28')]:_0x57c3e9[_0x81ab('0x22')];if(_0xda26c[_0x81ab('0x23')]['includeAll']){_0x569c52['include']=[{'all':!![]}];}_0x569c52=_[_0x81ab('0x35')]({},_0x569c52,_0xda26c[_0x81ab('0x37')]);return db[_0x81ab('0x3f')][_0x81ab('0x40')](_0x569c52)[_0x81ab('0x1a')](handleEntityNotFound(_0x8d1fa8,null))[_0x81ab('0x1a')](function(_0xc502a6){if(_0xc502a6){var _0x5863df=_0xc502a6[_0x81ab('0x46')]({'plain':!![]});_0x5863df=qs[_0x81ab('0x47')](_0x5863df,['id',_0x81ab('0x48'),'updatedAt']);_0xda26c[_0x81ab('0x42')]=_['omit'](_0xda26c[_0x81ab('0x42')],['id','createdAt','updatedAt']);return db['VoiceQueue']['create'](_[_0x81ab('0x35')](_0x5863df,_0xda26c[_0x81ab('0x42')]),{'include':_0xda26c[_0x81ab('0x23')][_0x81ab('0x39')]?[{'all':!![]}]:undefined});}})[_0x81ab('0x1a')](respondWithResult(_0x8d1fa8,0xc9))[_0x81ab('0x3d')](handleError(_0x8d1fa8,null));};exports[_0x81ab('0x19')]=function(_0x1dec9f,_0x540528){if(_0x1dec9f[_0x81ab('0x42')]['id']){delete _0x1dec9f[_0x81ab('0x42')]['id'];}return db[_0x81ab('0x3f')][_0x81ab('0x40')]({'where':{'id':_0x1dec9f[_0x81ab('0x3e')]['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0x540528,null))[_0x81ab('0x1a')](saveUpdates(_0x1dec9f[_0x81ab('0x42')],null))[_0x81ab('0x1a')](respondWithResult(_0x540528,null))['catch'](handleError(_0x540528,null));};exports[_0x81ab('0x1b')]=function(_0x31a7e6,_0x9bb057){return db[_0x81ab('0x3f')]['find']({'where':{'id':_0x31a7e6['params']['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0x9bb057,null))[_0x81ab('0x1a')](removeEntity(_0x9bb057,null))['catch'](handleError(_0x9bb057,null));};exports['getHoppers']=function(_0x326df2,_0x36f355,_0x42942a){var _0x32c3ab={'raw':![],'where':{}};var _0x11fa58={};var _0x1dbc0e={'count':0x0,'rows':[]};return db[_0x81ab('0x3f')]['findOne']({'where':{'id':_0x326df2[_0x81ab('0x3e')]['id']}})['then'](handleEntityNotFound(_0x36f355,null))[_0x81ab('0x1a')](function(_0x5a014c){if(_0x5a014c){_0x11fa58[_0x81ab('0x22')]=_['keys'](db[_0x81ab('0x49')][_0x81ab('0x21')]);_0x11fa58['query']=_[_0x81ab('0x26')](_0x326df2[_0x81ab('0x23')]);_0x11fa58[_0x81ab('0x32')]=_[_0x81ab('0x27')](_0x11fa58[_0x81ab('0x22')],_0x11fa58['query']);_0x32c3ab[_0x81ab('0x28')]=_['intersection'](_0x11fa58[_0x81ab('0x22')],qs[_0x81ab('0x29')](_0x326df2['query'][_0x81ab('0x29')]));_0x32c3ab[_0x81ab('0x28')]=_0x32c3ab[_0x81ab('0x28')][_0x81ab('0x2a')]?_0x32c3ab[_0x81ab('0x28')]:_0x11fa58['model'];if(!_0x326df2[_0x81ab('0x23')][_0x81ab('0x2b')](_0x81ab('0x2c'))){_0x32c3ab['limit']=qs['limit'](_0x326df2[_0x81ab('0x23')][_0x81ab('0x2d')]);_0x32c3ab[_0x81ab('0x14')]=qs[_0x81ab('0x14')](_0x326df2[_0x81ab('0x23')]['offset']);}_0x32c3ab[_0x81ab('0x2e')]=qs[_0x81ab('0x2f')](_0x326df2[_0x81ab('0x23')][_0x81ab('0x2f')]);_0x32c3ab[_0x81ab('0x30')]=qs[_0x81ab('0x32')](_[_0x81ab('0x31')](_0x326df2[_0x81ab('0x23')],_0x11fa58[_0x81ab('0x32')]));_0x32c3ab[_0x81ab('0x30')][_0x81ab('0x4a')]=_0x5a014c['id'];if(_0x326df2[_0x81ab('0x23')][_0x81ab('0x36')]){_0x32c3ab[_0x81ab('0x30')]=_[_0x81ab('0x35')](_0x32c3ab['where'],{'$or':_['map'](_0x32c3ab[_0x81ab('0x28')],function(_0x4be155){var _0x1e3a38={};_0x1e3a38[_0x4be155]={'$like':'%'+_0x326df2['query']['filter']+'%'};return _0x1e3a38;})});}_0x32c3ab=_[_0x81ab('0x35')]({},_0x32c3ab,_0x326df2[_0x81ab('0x37')]);return db[_0x81ab('0x49')]['count']({'where':_0x32c3ab[_0x81ab('0x30')]})[_0x81ab('0x1a')](function(_0x5930c7){_0x1dbc0e['count']=_0x5930c7;if(_0x326df2[_0x81ab('0x23')]['includeAll']){_0x32c3ab[_0x81ab('0x3a')]=[{'all':!![]}];}return db['CmHopper'][_0x81ab('0x3b')](_0x32c3ab);})[_0x81ab('0x1a')](function(_0x72b2de){_0x1dbc0e[_0x81ab('0x3c')]=_0x72b2de;return _0x1dbc0e;});}})[_0x81ab('0x1a')](respondWithFilteredResult(_0x36f355,_0x32c3ab))[_0x81ab('0x3d')](handleError(_0x36f355,null));};exports[_0x81ab('0x4b')]=function(_0x24a3b5,_0x4b4db9,_0x3cf50e){var _0x4b4fe0={'raw':!![],'where':{}};var _0x27a846={};var _0x3bc91b={'count':0x0,'rows':[]};return db[_0x81ab('0x3f')][_0x81ab('0x4c')]({'where':{'id':_0x24a3b5[_0x81ab('0x3e')]['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0x4b4db9,null))[_0x81ab('0x1a')](function(_0x2af022){if(_0x2af022){_0x27a846[_0x81ab('0x22')]=_[_0x81ab('0x26')](db[_0x81ab('0x4d')]['rawAttributes']);_0x27a846[_0x81ab('0x23')]=_['keys'](_0x24a3b5[_0x81ab('0x23')]);_0x27a846['filters']=_[_0x81ab('0x27')](_0x27a846[_0x81ab('0x22')],_0x27a846['query']);_0x4b4fe0['attributes']=_[_0x81ab('0x27')](_0x27a846[_0x81ab('0x22')],qs['fields'](_0x24a3b5['query'][_0x81ab('0x29')]));_0x4b4fe0[_0x81ab('0x28')]=_0x4b4fe0[_0x81ab('0x28')][_0x81ab('0x2a')]?_0x4b4fe0[_0x81ab('0x28')]:_0x27a846[_0x81ab('0x22')];if(!_0x24a3b5[_0x81ab('0x23')][_0x81ab('0x2b')](_0x81ab('0x2c'))){_0x4b4fe0[_0x81ab('0x2d')]=qs[_0x81ab('0x2d')](_0x24a3b5[_0x81ab('0x23')][_0x81ab('0x2d')]);_0x4b4fe0[_0x81ab('0x14')]=qs[_0x81ab('0x14')](_0x24a3b5[_0x81ab('0x23')]['offset']);}_0x4b4fe0[_0x81ab('0x2e')]=qs[_0x81ab('0x2f')](_0x24a3b5[_0x81ab('0x23')][_0x81ab('0x2f')]);_0x4b4fe0[_0x81ab('0x30')]=qs[_0x81ab('0x32')](_[_0x81ab('0x31')](_0x24a3b5[_0x81ab('0x23')],_0x27a846[_0x81ab('0x32')]));_0x4b4fe0[_0x81ab('0x30')][_0x81ab('0x4a')]=_0x2af022['id'];if(_0x24a3b5[_0x81ab('0x23')][_0x81ab('0x36')]){_0x4b4fe0[_0x81ab('0x30')]=_[_0x81ab('0x35')](_0x4b4fe0[_0x81ab('0x30')],{'$or':_['map'](_0x4b4fe0[_0x81ab('0x28')],function(_0x369b46){var _0x5a0338={};_0x5a0338[_0x369b46]={'$like':'%'+_0x24a3b5[_0x81ab('0x23')]['filter']+'%'};return _0x5a0338;})});}_0x4b4fe0=_[_0x81ab('0x35')]({},_0x4b4fe0,_0x24a3b5['options']);return db[_0x81ab('0x4d')][_0x81ab('0x38')]({'where':_0x4b4fe0[_0x81ab('0x30')]})[_0x81ab('0x1a')](function(_0x314774){_0x3bc91b[_0x81ab('0x38')]=_0x314774;if(_0x24a3b5[_0x81ab('0x23')][_0x81ab('0x39')]){_0x4b4fe0[_0x81ab('0x3a')]=[{'all':!![]}];}return db[_0x81ab('0x4d')][_0x81ab('0x3b')](_0x4b4fe0);})[_0x81ab('0x1a')](function(_0x455bfa){_0x3bc91b['rows']=_0x455bfa;return _0x3bc91b;});}})[_0x81ab('0x1a')](respondWithFilteredResult(_0x4b4db9,_0x4b4fe0))[_0x81ab('0x3d')](handleError(_0x4b4db9,null));};exports[_0x81ab('0x4e')]=function(_0x401de7,_0x4bf4a7,_0x5c709e){var _0x56780b={'raw':!![],'where':{}};var _0x56920b={};var _0x24fa21={'count':0x0,'rows':[]};return db[_0x81ab('0x3f')]['findOne']({'where':{'id':_0x401de7[_0x81ab('0x3e')]['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0x4bf4a7,null))[_0x81ab('0x1a')](function(_0x586375){if(_0x586375){_0x56920b['model']=_[_0x81ab('0x26')](db['CmHopperFinal'][_0x81ab('0x21')]);_0x56920b[_0x81ab('0x23')]=_[_0x81ab('0x26')](_0x401de7[_0x81ab('0x23')]);_0x56920b['filters']=_[_0x81ab('0x27')](_0x56920b[_0x81ab('0x22')],_0x56920b['query']);_0x56780b[_0x81ab('0x28')]=_[_0x81ab('0x27')](_0x56920b[_0x81ab('0x22')],qs[_0x81ab('0x29')](_0x401de7['query'][_0x81ab('0x29')]));_0x56780b[_0x81ab('0x28')]=_0x56780b[_0x81ab('0x28')][_0x81ab('0x2a')]?_0x56780b[_0x81ab('0x28')]:_0x56920b[_0x81ab('0x22')];if(!_0x401de7[_0x81ab('0x23')][_0x81ab('0x2b')](_0x81ab('0x2c'))){_0x56780b[_0x81ab('0x2d')]=qs[_0x81ab('0x2d')](_0x401de7[_0x81ab('0x23')]['limit']);_0x56780b[_0x81ab('0x14')]=qs[_0x81ab('0x14')](_0x401de7[_0x81ab('0x23')][_0x81ab('0x14')]);}_0x56780b['order']=qs[_0x81ab('0x2f')](_0x401de7[_0x81ab('0x23')][_0x81ab('0x2f')]);_0x56780b[_0x81ab('0x30')]=qs[_0x81ab('0x32')](_[_0x81ab('0x31')](_0x401de7[_0x81ab('0x23')],_0x56920b[_0x81ab('0x32')]));_0x56780b[_0x81ab('0x30')][_0x81ab('0x4a')]=_0x586375['id'];if(_0x401de7['query'][_0x81ab('0x36')]){_0x56780b[_0x81ab('0x30')]=_[_0x81ab('0x35')](_0x56780b['where'],{'$or':_[_0x81ab('0x4f')](_0x56780b[_0x81ab('0x28')],function(_0x174ca7){var _0x15d722={};_0x15d722[_0x174ca7]={'$like':'%'+_0x401de7[_0x81ab('0x23')][_0x81ab('0x36')]+'%'};return _0x15d722;})});}_0x56780b=_['merge']({},_0x56780b,_0x401de7[_0x81ab('0x37')]);return db[_0x81ab('0x50')][_0x81ab('0x38')]({'where':_0x56780b[_0x81ab('0x30')]})[_0x81ab('0x1a')](function(_0x43f79f){_0x24fa21['count']=_0x43f79f;if(_0x401de7[_0x81ab('0x23')][_0x81ab('0x39')]){_0x56780b['include']=[{'all':!![]}];}return db[_0x81ab('0x50')][_0x81ab('0x3b')](_0x56780b);})[_0x81ab('0x1a')](function(_0x480195){_0x24fa21['rows']=_0x480195;return _0x24fa21;});}})[_0x81ab('0x1a')](respondWithFilteredResult(_0x4bf4a7,_0x56780b))['catch'](handleError(_0x4bf4a7,null));};exports[_0x81ab('0x51')]=function(_0x2d1708,_0x1069d7,_0x4191e7){var _0xbbbd1e={'raw':!![],'where':{}};var _0x46f37a={};var _0x4aabb7={'count':0x0,'rows':[]};return db['VoiceQueue'][_0x81ab('0x4c')]({'where':{'id':_0x2d1708['params']['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0x1069d7,null))[_0x81ab('0x1a')](function(_0x2fd682){if(_0x2fd682){_0x46f37a[_0x81ab('0x22')]=_[_0x81ab('0x26')](db[_0x81ab('0x52')]['rawAttributes']);_0x46f37a[_0x81ab('0x23')]=_['keys'](_0x2d1708['query']);_0x46f37a[_0x81ab('0x32')]=_[_0x81ab('0x27')](_0x46f37a[_0x81ab('0x22')],_0x46f37a[_0x81ab('0x23')]);_0xbbbd1e[_0x81ab('0x28')]=_[_0x81ab('0x27')](_0x46f37a['model'],qs['fields'](_0x2d1708['query'][_0x81ab('0x29')]));_0xbbbd1e[_0x81ab('0x28')]=_0xbbbd1e[_0x81ab('0x28')][_0x81ab('0x2a')]?_0xbbbd1e[_0x81ab('0x28')]:_0x46f37a[_0x81ab('0x22')];if(!_0x2d1708[_0x81ab('0x23')][_0x81ab('0x2b')](_0x81ab('0x2c'))){_0xbbbd1e[_0x81ab('0x2d')]=qs[_0x81ab('0x2d')](_0x2d1708['query']['limit']);_0xbbbd1e[_0x81ab('0x14')]=qs['offset'](_0x2d1708[_0x81ab('0x23')][_0x81ab('0x14')]);}_0xbbbd1e[_0x81ab('0x2e')]=qs[_0x81ab('0x2f')](_0x2d1708['query'][_0x81ab('0x2f')]);_0xbbbd1e[_0x81ab('0x30')]=qs[_0x81ab('0x32')](_['pick'](_0x2d1708[_0x81ab('0x23')],_0x46f37a[_0x81ab('0x32')]));_0xbbbd1e[_0x81ab('0x30')]['VoiceQueueId']=_0x2fd682['id'];if(_0x2d1708[_0x81ab('0x23')]['filter']){_0xbbbd1e[_0x81ab('0x30')]=_[_0x81ab('0x35')](_0xbbbd1e[_0x81ab('0x30')],{'$or':_[_0x81ab('0x4f')](_0xbbbd1e[_0x81ab('0x28')],function(_0x1b0ebd){var _0x3918c2={};_0x3918c2[_0x1b0ebd]={'$like':'%'+_0x2d1708['query'][_0x81ab('0x36')]+'%'};return _0x3918c2;})});}_0xbbbd1e=_[_0x81ab('0x35')]({},_0xbbbd1e,_0x2d1708['options']);return db[_0x81ab('0x52')][_0x81ab('0x38')]({'where':_0xbbbd1e[_0x81ab('0x30')]})[_0x81ab('0x1a')](function(_0x2b71a5){_0x4aabb7[_0x81ab('0x38')]=_0x2b71a5;if(_0x2d1708['query'][_0x81ab('0x39')]){_0xbbbd1e[_0x81ab('0x3a')]=[{'all':!![]}];}return db[_0x81ab('0x52')][_0x81ab('0x3b')](_0xbbbd1e);})[_0x81ab('0x1a')](function(_0x3deee8){_0x4aabb7['rows']=_0x3deee8;return _0x4aabb7;});}})['then'](respondWithFilteredResult(_0x1069d7,_0xbbbd1e))[_0x81ab('0x3d')](handleError(_0x1069d7,null));};exports[_0x81ab('0x53')]=function(_0x15009f,_0x2981f4,_0x843ed3){var _0x4e4853={};var _0x3389c7={};var _0x2d43a5;var _0x585d2d;return db[_0x81ab('0x3f')]['findOne']({'where':{'id':_0x15009f[_0x81ab('0x3e')]['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0x2981f4,null))[_0x81ab('0x1a')](function(_0x1bb3c7){if(_0x1bb3c7){_0x2d43a5=_0x1bb3c7;_0x3389c7[_0x81ab('0x22')]=_[_0x81ab('0x26')](db[_0x81ab('0x54')][_0x81ab('0x21')]);_0x3389c7['query']=_[_0x81ab('0x26')](_0x15009f[_0x81ab('0x23')]);_0x3389c7[_0x81ab('0x32')]=_['intersection'](_0x3389c7[_0x81ab('0x22')],_0x3389c7['query']);_0x4e4853[_0x81ab('0x28')]=_['intersection'](_0x3389c7[_0x81ab('0x22')],qs['fields'](_0x15009f['query']['fields']));_0x4e4853['attributes']=_0x4e4853[_0x81ab('0x28')][_0x81ab('0x2a')]?_0x4e4853[_0x81ab('0x28')]:_0x3389c7[_0x81ab('0x22')];_0x4e4853[_0x81ab('0x2e')]=qs[_0x81ab('0x2f')](_0x15009f[_0x81ab('0x23')][_0x81ab('0x2f')]);_0x4e4853[_0x81ab('0x30')]=qs[_0x81ab('0x32')](_['pick'](_0x15009f[_0x81ab('0x23')],_0x3389c7[_0x81ab('0x32')]));if(_0x15009f[_0x81ab('0x23')]['filter']){_0x4e4853['where']=_['merge'](_0x4e4853['where'],{'$or':_[_0x81ab('0x4f')](_0x4e4853[_0x81ab('0x28')],function(_0x14bd28){var _0x3e7624={};_0x3e7624[_0x14bd28]={'$like':'%'+_0x15009f[_0x81ab('0x23')][_0x81ab('0x36')]+'%'};return _0x3e7624;})});}_0x4e4853=_[_0x81ab('0x35')]({},_0x4e4853,_0x15009f[_0x81ab('0x37')]);return _0x2d43a5['getTeams'](_0x4e4853);}})[_0x81ab('0x1a')](function(_0x41515f){if(_0x41515f){_0x585d2d=_0x41515f['length'];if(!_0x15009f[_0x81ab('0x23')][_0x81ab('0x2b')]('nolimit')){_0x4e4853['limit']=qs['limit'](_0x15009f[_0x81ab('0x23')][_0x81ab('0x2d')]);_0x4e4853[_0x81ab('0x14')]=qs[_0x81ab('0x14')](_0x15009f['query'][_0x81ab('0x14')]);}return _0x2d43a5[_0x81ab('0x53')](_0x4e4853);}})[_0x81ab('0x1a')](function(_0x12342e){if(_0x12342e){return _0x12342e?{'count':_0x585d2d,'rows':_0x12342e}:null;}})[_0x81ab('0x1a')](respondWithResult(_0x2981f4,null))[_0x81ab('0x3d')](handleError(_0x2981f4,null));};exports[_0x81ab('0x55')]=function(_0x219c1a,_0x2029c0,_0x140507){var _0x21462e=[];var _0x32f254;return db[_0x81ab('0x54')][_0x81ab('0x3b')]({'where':{'id':_0x219c1a[_0x81ab('0x42')]['ids']},'attributes':['id'],'include':[{'model':db['User'],'as':_0x81ab('0x56'),'attributes':['id'],'raw':!![]}]})['then'](function(_0x54a907){if(_0x54a907){for(var _0x3e3408=0x0;_0x3e3408<_0x54a907[_0x81ab('0x2a')];_0x3e3408+=0x1){for(var _0x330cc7=0x0;_0x330cc7<_0x54a907[_0x3e3408][_0x81ab('0x56')][_0x81ab('0x2a')];_0x330cc7+=0x1){_0x21462e=_['union'](_0x21462e,[_0x54a907[_0x3e3408][_0x81ab('0x56')][_0x330cc7]['id']]);}}return _0x21462e;}})['then'](function(_0x3806ee){if(_0x3806ee){return db['VoiceQueue'][_0x81ab('0x40')]({'where':{'id':_0x219c1a[_0x81ab('0x3e')]['id']}});}})[_0x81ab('0x1a')](function(_0x520a4f){if(_0x520a4f){_0x32f254=_0x520a4f;return _0x32f254[_0x81ab('0x43')](_0x21462e,{'penalty':_0x219c1a[_0x81ab('0x42')][_0x81ab('0x57')]});}})[_0x81ab('0x1a')](function(_0x404d12){if(_0x404d12){return _0x32f254['addTeams'](_0x219c1a[_0x81ab('0x42')][_0x81ab('0x58')]);}})[_0x81ab('0x1a')](handleEntityNotFound(_0x2029c0,null))[_0x81ab('0x1a')](respondWithStatusCode(_0x2029c0,null))[_0x81ab('0x3d')](handleError(_0x2029c0,null));};exports[_0x81ab('0x59')]=function(_0xffd14,_0x9123e5,_0x4c46b0){var _0x525dbf=[];var _0x56be93;return db[_0x81ab('0x54')][_0x81ab('0x3b')]({'where':{'id':_0xffd14[_0x81ab('0x23')]['ids']},'attributes':['id'],'include':[{'model':db['User'],'as':_0x81ab('0x56'),'attributes':['id'],'raw':!![]}]})[_0x81ab('0x1a')](function(_0x588830){if(_0x588830){for(var _0x273e98=0x0;_0x273e98<_0x588830[_0x81ab('0x2a')];_0x273e98+=0x1){for(var _0x19df16=0x0;_0x19df16<_0x588830[_0x273e98]['Agents'][_0x81ab('0x2a')];_0x19df16+=0x1){_0x525dbf=_['union'](_0x525dbf,[_0x588830[_0x273e98]['Agents'][_0x19df16]['id']]);}}return _0x525dbf;}})[_0x81ab('0x1a')](function(_0x338f2c){if(_0x338f2c){return db[_0x81ab('0x3f')][_0x81ab('0x40')]({'where':{'id':_0xffd14[_0x81ab('0x3e')]['id']}});}})[_0x81ab('0x1a')](function(_0x3561aa){if(_0x3561aa){_0x56be93=_0x3561aa;return _0x56be93[_0x81ab('0x5a')](_0x525dbf);}})[_0x81ab('0x1a')](function(_0x19af73){if(_0x56be93){return _0x56be93[_0x81ab('0x59')](_0xffd14[_0x81ab('0x23')][_0x81ab('0x58')]);}})[_0x81ab('0x1a')](handleEntityNotFound(_0x9123e5,null))[_0x81ab('0x1a')](respondWithStatusCode(_0x9123e5,null))[_0x81ab('0x3d')](handleError(_0x9123e5,null));};exports[_0x81ab('0x43')]=function(_0x3f63c3,_0x48fdd5,_0x25deff){var _0xa9e784,_0x53cdd9;return db[_0x81ab('0x3f')][_0x81ab('0x40')]({'where':{'id':_0x3f63c3['params']['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0x48fdd5,null))[_0x81ab('0x1a')](function(_0x3ab0b1){if(_0x3ab0b1){_0x53cdd9=_0x3ab0b1;return _0x3ab0b1['addAgents'](_0x3f63c3['body'][_0x81ab('0x58')],_[_0x81ab('0x47')](_0x3f63c3[_0x81ab('0x42')],[_0x81ab('0x58'),'id'])||{})[_0x81ab('0x5b')](function(_0x4f7793){for(var _0xd5ebbc=0x0;_0xd5ebbc<_0x3f63c3[_0x81ab('0x42')][_0x81ab('0x58')]['length'];_0xd5ebbc+=0x1){socket[_0x81ab('0x5c')](_0x81ab('0x5d'),{'UserId':_0x3f63c3[_0x81ab('0x42')]['ids'][_0xd5ebbc],'VoiceQueueId':_0x3f63c3[_0x81ab('0x3e')]['id']});}return _0x4f7793;});}})['then'](function(_0x37a95e){_0xa9e784=_0x37a95e||[];if(_0x53cdd9){return db[_0x81ab('0x5e')][_0x81ab('0x3b')]({'where':{'id':_0x3f63c3['body'][_0x81ab('0x58')]},'attributes':['id',_0x81ab('0x1e'),'loginInPause',_0x81ab('0x5f')],'raw':!![]});}})['then'](function(_0x4c9d6b){if(_0x4c9d6b&&_0x4c9d6b[_0x81ab('0x2a')]){var _0x9ca6d2=[];for(var _0xbde56e=0x0;_0xbde56e<_0x4c9d6b[_0x81ab('0x2a')];_0xbde56e++){_0x9ca6d2[_0x81ab('0x60')](db[_0x81ab('0x61')][_0x81ab('0x62')]({'membername':_0x4c9d6b[_0xbde56e]['name'],'UserId':_0x4c9d6b[_0xbde56e]['id'],'queue_name':_0x53cdd9[_0x81ab('0x1e')],'VoiceQueueId':_0x53cdd9['id'],'interface':util[_0x81ab('0x63')](_0x81ab('0x64'),_0x81ab('0x65'),_0x4c9d6b[_0xbde56e]['name']),'paused':_0x4c9d6b[_0xbde56e][_0x81ab('0x5f')]||![],'penalty':_0x3f63c3[_0x81ab('0x42')]['penalty']||0x0}));}return BPromise[_0x81ab('0x66')](_0x9ca6d2);}})['then'](function(_0x574aa7){return _0xa9e784;})[_0x81ab('0x1a')](respondWithResult(_0x48fdd5,null))[_0x81ab('0x3d')](handleError(_0x48fdd5,null));};exports['removeAgents']=function(_0x4c7b17,_0x364898,_0x243112){var _0x381c4d;return db[_0x81ab('0x3f')][_0x81ab('0x40')]({'where':{'id':_0x4c7b17[_0x81ab('0x3e')]['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0x364898,null))['then'](function(_0x789c6f){if(_0x789c6f){return _0x789c6f['removeAgents'](_0x4c7b17[_0x81ab('0x23')]['ids'])['then'](function(_0x348fae){if(_['isArray'](_0x4c7b17[_0x81ab('0x23')][_0x81ab('0x58')])){for(var _0x5af711=0x0;_0x5af711<_0x4c7b17['query'][_0x81ab('0x58')]['length'];_0x5af711+=0x1){socket[_0x81ab('0x5c')]('userVoiceQueue:remove',{'UserId':_0x4c7b17['query']['ids'][_0x5af711],'VoiceQueueId':_0x4c7b17[_0x81ab('0x3e')]['id']});}}else{socket[_0x81ab('0x5c')]('userVoiceQueue:remove',{'UserId':_0x4c7b17[_0x81ab('0x23')][_0x81ab('0x58')],'VoiceQueueId':_0x4c7b17['params']['id']});}});}})[_0x81ab('0x1a')](function(_0x55fb8d){if(_0x4c7b17[_0x81ab('0x23')][_0x81ab('0x67')]){_0x381c4d=_0x55fb8d;return db[_0x81ab('0x61')][_0x81ab('0x1b')]({'where':{'VoiceQueueId':_0x4c7b17[_0x81ab('0x3e')]['id'],'UserId':_0x4c7b17[_0x81ab('0x23')]['ids']}})['then'](function(){return _0x381c4d;});}})[_0x81ab('0x1a')](respondWithStatusCode(_0x364898,null))['catch'](handleError(_0x364898,null));};exports[_0x81ab('0x68')]=function(_0x2ad190,_0x57fcf5,_0x29c930){var _0x3af3f0={};var _0x51acb8={};var _0x9094b1;var _0x66ceaa;return db[_0x81ab('0x3f')][_0x81ab('0x4c')]({'where':{'id':_0x2ad190[_0x81ab('0x3e')]['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0x57fcf5,null))[_0x81ab('0x1a')](function(_0x594cf3){if(_0x594cf3){_0x9094b1=_0x594cf3;_0x51acb8[_0x81ab('0x22')]=_[_0x81ab('0x26')](db[_0x81ab('0x5e')][_0x81ab('0x21')]);_0x51acb8['query']=_[_0x81ab('0x26')](_0x2ad190[_0x81ab('0x23')]);_0x51acb8[_0x81ab('0x32')]=_['intersection'](_0x51acb8[_0x81ab('0x22')],_0x51acb8[_0x81ab('0x23')]);_0x3af3f0[_0x81ab('0x28')]=_[_0x81ab('0x27')](_0x51acb8[_0x81ab('0x22')],qs['fields'](_0x2ad190[_0x81ab('0x23')][_0x81ab('0x29')]));_0x3af3f0[_0x81ab('0x28')]=_0x3af3f0[_0x81ab('0x28')]['length']?_0x3af3f0['attributes']:_0x51acb8[_0x81ab('0x22')];_0x3af3f0['order']=qs[_0x81ab('0x2f')](_0x2ad190[_0x81ab('0x23')]['sort']);_0x3af3f0['where']=qs[_0x81ab('0x32')](_[_0x81ab('0x31')](_0x2ad190[_0x81ab('0x23')],_0x51acb8[_0x81ab('0x32')]));if(_0x2ad190[_0x81ab('0x23')][_0x81ab('0x36')]){_0x3af3f0['where']=_['merge'](_0x3af3f0[_0x81ab('0x30')],{'$or':_[_0x81ab('0x4f')](_0x3af3f0[_0x81ab('0x28')],function(_0x5c85ce){var _0x2b0f7e={};_0x2b0f7e[_0x5c85ce]={'$like':'%'+_0x2ad190[_0x81ab('0x23')]['filter']+'%'};return _0x2b0f7e;})});}_0x3af3f0=_[_0x81ab('0x35')]({},_0x3af3f0,_0x2ad190['options']);return _0x9094b1[_0x81ab('0x68')](_0x3af3f0);}})[_0x81ab('0x1a')](function(_0x508284){if(_0x508284){_0x66ceaa=_0x508284[_0x81ab('0x2a')];if(!_0x2ad190[_0x81ab('0x23')][_0x81ab('0x2b')]('nolimit')){_0x3af3f0[_0x81ab('0x2d')]=qs[_0x81ab('0x2d')](_0x2ad190['query'][_0x81ab('0x2d')]);_0x3af3f0['offset']=qs[_0x81ab('0x14')](_0x2ad190['query'][_0x81ab('0x14')]);}return _0x9094b1['getAgents'](_0x3af3f0);}})[_0x81ab('0x1a')](function(_0x5a74c8){if(_0x5a74c8){return _0x5a74c8?{'count':_0x66ceaa,'rows':_0x5a74c8}:null;}})[_0x81ab('0x1a')](respondWithResult(_0x57fcf5,null))[_0x81ab('0x3d')](handleError(_0x57fcf5,null));};exports[_0x81ab('0x69')]=function(_0x4f74ab,_0xe0b1d8,_0x25ba82){var _0x40d8e6={};var _0x5ebc24={};var _0x3e1fe1;var _0x37e3e1;return db['VoiceQueue'][_0x81ab('0x4c')]({'where':{'id':_0x4f74ab['params']['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0xe0b1d8,null))[_0x81ab('0x1a')](function(_0x2d78ee){if(_0x2d78ee){_0x3e1fe1=_0x2d78ee;_0x5ebc24[_0x81ab('0x22')]=_[_0x81ab('0x26')](db['UserVoiceQueueRt'][_0x81ab('0x21')]);_0x5ebc24['query']=_[_0x81ab('0x26')](_0x4f74ab['query']);_0x5ebc24[_0x81ab('0x32')]=_[_0x81ab('0x27')](_0x5ebc24['model'],_0x5ebc24['query']);_0x40d8e6['attributes']=_[_0x81ab('0x27')](_0x5ebc24[_0x81ab('0x22')],qs[_0x81ab('0x29')](_0x4f74ab[_0x81ab('0x23')]['fields']));_0x40d8e6[_0x81ab('0x28')]=_0x40d8e6[_0x81ab('0x28')][_0x81ab('0x2a')]?_0x40d8e6[_0x81ab('0x28')]:_0x5ebc24['model'];_0x40d8e6[_0x81ab('0x2e')]=qs[_0x81ab('0x2f')](_0x4f74ab[_0x81ab('0x23')][_0x81ab('0x2f')]);_0x40d8e6[_0x81ab('0x30')]=qs[_0x81ab('0x32')](_[_0x81ab('0x31')](_0x4f74ab[_0x81ab('0x23')],_0x5ebc24[_0x81ab('0x32')]));if(_0x4f74ab[_0x81ab('0x23')][_0x81ab('0x36')]){_0x40d8e6[_0x81ab('0x30')]=_[_0x81ab('0x35')](_0x40d8e6[_0x81ab('0x30')],{'$or':_[_0x81ab('0x4f')](_0x40d8e6[_0x81ab('0x28')],function(_0x759bdf){var _0x9e5e43={};_0x9e5e43[_0x759bdf]={'$like':'%'+_0x4f74ab['query'][_0x81ab('0x36')]+'%'};return _0x9e5e43;})});}_0x40d8e6=_[_0x81ab('0x35')]({},_0x40d8e6,_0x4f74ab[_0x81ab('0x37')]);return _0x3e1fe1[_0x81ab('0x69')](_0x40d8e6);}})[_0x81ab('0x1a')](function(_0x1fedae){if(_0x1fedae){_0x37e3e1=_0x1fedae['length'];if(!_0x4f74ab['query'][_0x81ab('0x2b')](_0x81ab('0x2c'))){_0x40d8e6[_0x81ab('0x2d')]=qs[_0x81ab('0x2d')](_0x4f74ab['query']['limit']);_0x40d8e6[_0x81ab('0x14')]=qs[_0x81ab('0x14')](_0x4f74ab[_0x81ab('0x23')][_0x81ab('0x14')]);}return _0x3e1fe1[_0x81ab('0x69')](_0x40d8e6);}})[_0x81ab('0x1a')](function(_0x41a44e){return _0x41a44e?{'count':_0x37e3e1,'rows':_0x41a44e}:null;})[_0x81ab('0x1a')](respondWithResult(_0xe0b1d8,null))[_0x81ab('0x3d')](handleError(_0xe0b1d8,null));};exports[_0x81ab('0x6a')]=function(_0x19ec73,_0x1fd935,_0x51f3e6){var _0x5d912c={};var _0x59b22e={};var _0x1d4473;var _0x3edf41;return db[_0x81ab('0x3f')][_0x81ab('0x4c')]({'where':{'id':_0x19ec73[_0x81ab('0x3e')]['id']}})['then'](handleEntityNotFound(_0x1fd935,null))[_0x81ab('0x1a')](function(_0xe49787){if(_0xe49787){_0x1d4473=_0xe49787;_0x59b22e[_0x81ab('0x22')]=_[_0x81ab('0x26')](db['CmList']['rawAttributes']);_0x59b22e['query']=_[_0x81ab('0x26')](_0x19ec73['query']);_0x59b22e[_0x81ab('0x32')]=_[_0x81ab('0x27')](_0x59b22e[_0x81ab('0x22')],_0x59b22e[_0x81ab('0x23')]);_0x5d912c[_0x81ab('0x28')]=_[_0x81ab('0x27')](_0x59b22e['model'],qs[_0x81ab('0x29')](_0x19ec73[_0x81ab('0x23')][_0x81ab('0x29')]));_0x5d912c[_0x81ab('0x28')]=_0x5d912c[_0x81ab('0x28')][_0x81ab('0x2a')]?_0x5d912c['attributes']:_0x59b22e['model'];_0x5d912c['order']=qs['sort'](_0x19ec73[_0x81ab('0x23')][_0x81ab('0x2f')]);_0x5d912c[_0x81ab('0x30')]=qs[_0x81ab('0x32')](_[_0x81ab('0x31')](_0x19ec73[_0x81ab('0x23')],_0x59b22e[_0x81ab('0x32')]));if(_0x19ec73[_0x81ab('0x23')][_0x81ab('0x36')]){_0x5d912c[_0x81ab('0x30')]=_[_0x81ab('0x35')](_0x5d912c[_0x81ab('0x30')],{'$or':_['map'](_0x5d912c[_0x81ab('0x28')],function(_0x55f218){var _0x197396={};_0x197396[_0x55f218]={'$like':'%'+_0x19ec73[_0x81ab('0x23')]['filter']+'%'};return _0x197396;})});}_0x5d912c=_[_0x81ab('0x35')]({},_0x5d912c,_0x19ec73[_0x81ab('0x37')]);return _0x1d4473[_0x81ab('0x6a')](_0x5d912c);}})[_0x81ab('0x1a')](function(_0x29f07d){if(_0x29f07d){_0x3edf41=_0x29f07d[_0x81ab('0x2a')];if(!_0x19ec73['query']['hasOwnProperty'](_0x81ab('0x2c'))){_0x5d912c[_0x81ab('0x2d')]=qs[_0x81ab('0x2d')](_0x19ec73[_0x81ab('0x23')]['limit']);_0x5d912c[_0x81ab('0x14')]=qs[_0x81ab('0x14')](_0x19ec73[_0x81ab('0x23')][_0x81ab('0x14')]);}return _0x1d4473[_0x81ab('0x6a')](_0x5d912c);}})[_0x81ab('0x1a')](function(_0x126bff){if(_0x126bff){return _0x126bff?{'count':_0x3edf41,'rows':_0x126bff}:null;}})[_0x81ab('0x1a')](respondWithResult(_0x1fd935,null))[_0x81ab('0x3d')](handleError(_0x1fd935,null));};exports['addLists']=function(_0x4acb8e,_0x467bd1,_0x91d9d7){var _0x44c977,_0x54c302;return db[_0x81ab('0x3f')][_0x81ab('0x40')]({'where':{'id':_0x4acb8e[_0x81ab('0x3e')]['id']}})['then'](handleEntityNotFound(_0x467bd1,null))[_0x81ab('0x1a')](function(_0x2e3b57){if(_0x2e3b57){_0x54c302=_0x2e3b57;return _0x2e3b57[_0x81ab('0x6b')](_0x4acb8e['body'][_0x81ab('0x58')],_[_0x81ab('0x47')](_0x4acb8e[_0x81ab('0x42')],[_0x81ab('0x58'),'id'])||{});}return null;})[_0x81ab('0x5b')](function(_0x53e9e1){var _0x52c978;_0x44c977=_0x53e9e1||[];var _0x19167b=[];if(_0x53e9e1){for(var _0x2c85a9=0x0;_0x2c85a9<_0x53e9e1[_0x81ab('0x2a')];_0x2c85a9+=0x1){var _0x4bffa1=_0x53e9e1[_0x2c85a9][_0x81ab('0x46')]({'plain':!![]});_0x54c302['dialCheckDuplicateType']=_0x4acb8e['body'][_0x81ab('0x6c')]?_0x4acb8e['body'][_0x81ab('0x6c')]:_0x54c302[_0x81ab('0x6c')];switch(_0x54c302[_0x81ab('0x6c')]){case'always':_0x52c978=squel[_0x81ab('0x6d')]()[_0x81ab('0x6e')](_0x81ab('0x6f'))[_0x81ab('0x70')]([_0x81ab('0x71'),'scheduledAt',_0x81ab('0x72'),'ListId',_0x81ab('0x4a'),'createdAt',_0x81ab('0x73')],squel[_0x81ab('0x74')]()[_0x81ab('0x75')](_0x81ab('0x71'),'phone')[_0x81ab('0x75')](_0x81ab('0x76'),_0x81ab('0x77'))[_0x81ab('0x75')]('id','ContactId')[_0x81ab('0x75')](_0x4bffa1[_0x81ab('0x78')][_0x81ab('0x79')](),_0x81ab('0x7a'))[_0x81ab('0x75')](_0x4acb8e['params']['id'][_0x81ab('0x79')](),'VoiceQueueId')['field']('NOW()',_0x81ab('0x48'))[_0x81ab('0x75')]('NOW()',_0x81ab('0x73'))[_0x81ab('0x7b')]('cm_contacts')[_0x81ab('0x30')](_0x81ab('0x7c'))['where'](_0x81ab('0x7d'),_0x4bffa1[_0x81ab('0x78')]['toString']())['where']('phone\x20IS\x20NOT\x20NULL')[_0x81ab('0x30')](_0x81ab('0x7e'),squel[_0x81ab('0x74')]()[_0x81ab('0x75')](_0x81ab('0x7f'))[_0x81ab('0x7b')](_0x81ab('0x80'))[_0x81ab('0x30')]('VoiceQueueId\x20=\x20?',_0x4acb8e[_0x81ab('0x3e')]['id'][_0x81ab('0x79')]()))[_0x81ab('0x30')](_0x81ab('0x7e'),squel[_0x81ab('0x74')]()[_0x81ab('0x75')](_0x81ab('0x71'))[_0x81ab('0x7b')](_0x81ab('0x6f'))[_0x81ab('0x30')]('VoiceQueueId\x20=\x20?',_0x4acb8e[_0x81ab('0x3e')]['id'][_0x81ab('0x79')]())))['toString']();break;case _0x81ab('0x81'):_0x52c978=squel['insert']()['into'](_0x81ab('0x6f'))[_0x81ab('0x70')]([_0x81ab('0x71'),_0x81ab('0x77'),'ContactId',_0x81ab('0x7a'),_0x81ab('0x4a'),_0x81ab('0x48'),_0x81ab('0x73')],squel[_0x81ab('0x74')]()[_0x81ab('0x75')](_0x81ab('0x71'),_0x81ab('0x71'))[_0x81ab('0x75')](_0x81ab('0x76'),'scheduledAt')['field']('id','ContactId')[_0x81ab('0x75')](_0x4bffa1[_0x81ab('0x78')]['toString'](),_0x81ab('0x7a'))[_0x81ab('0x75')](_0x4acb8e[_0x81ab('0x3e')]['id'][_0x81ab('0x79')](),'VoiceQueueId')[_0x81ab('0x75')](_0x81ab('0x76'),_0x81ab('0x48'))[_0x81ab('0x75')](_0x81ab('0x76'),_0x81ab('0x73'))[_0x81ab('0x7b')]('cm_contacts')[_0x81ab('0x30')]('deletedAt\x20IS\x20NULL')[_0x81ab('0x30')](_0x81ab('0x7d'),_0x4bffa1['CmListId'][_0x81ab('0x79')]())['where'](_0x81ab('0x82'))['where']('phone\x20NOT\x20IN\x20(?)',squel[_0x81ab('0x74')]()['field'](_0x81ab('0x71'))[_0x81ab('0x7b')](_0x81ab('0x6f'))['where'](_0x81ab('0x83'),_0x4acb8e[_0x81ab('0x3e')]['id'][_0x81ab('0x79')]())))[_0x81ab('0x79')]();break;default:_0x52c978=squel[_0x81ab('0x6d')]()[_0x81ab('0x6e')]('cm_hopper')[_0x81ab('0x70')]([_0x81ab('0x71'),_0x81ab('0x77'),'ContactId',_0x81ab('0x7a'),_0x81ab('0x4a'),'createdAt',_0x81ab('0x73')],squel[_0x81ab('0x74')]()['field'](_0x81ab('0x71'),_0x81ab('0x71'))[_0x81ab('0x75')]('NOW()','scheduledAt')['field']('id','ContactId')['field'](_0x4bffa1[_0x81ab('0x78')][_0x81ab('0x79')](),_0x81ab('0x7a'))[_0x81ab('0x75')](_0x4acb8e[_0x81ab('0x3e')]['id'][_0x81ab('0x79')](),_0x81ab('0x4a'))[_0x81ab('0x75')](_0x81ab('0x76'),_0x81ab('0x48'))[_0x81ab('0x75')](_0x81ab('0x76'),_0x81ab('0x73'))[_0x81ab('0x7b')](_0x81ab('0x84'))[_0x81ab('0x30')](_0x81ab('0x7c'))[_0x81ab('0x30')](_0x81ab('0x7d'),_0x4bffa1[_0x81ab('0x78')][_0x81ab('0x79')]())[_0x81ab('0x30')](_0x81ab('0x82')))[_0x81ab('0x79')]();}_0x19167b['push'](db[_0x81ab('0x85')][_0x81ab('0x23')](_0x52c978));}return BPromise[_0x81ab('0x66')](_0x19167b);}})[_0x81ab('0x1a')](function(){return _0x44c977;})[_0x81ab('0x1a')](respondWithResult(_0x467bd1,null))[_0x81ab('0x3d')](handleError(_0x467bd1,null));};exports['removeLists']=function(_0x518a2e,_0x2cd393,_0x173283){var _0x509009;return db[_0x81ab('0x3f')][_0x81ab('0x40')]({'where':{'id':_0x518a2e['params']['id']}})[_0x81ab('0x1a')](handleEntityNotFound(_0x2cd393,null))[_0x81ab('0x1a')](function(_0x140d1a){if(_0x140d1a){return _0x140d1a['removeLists'](_0x518a2e[_0x81ab('0x23')]['ids']);}})['then'](function(_0x5b9206){if(_0x5b9206){_0x509009=_0x5b9206;return db[_0x81ab('0x49')][_0x81ab('0x1b')]({'where':{'ListId':_0x518a2e[_0x81ab('0x23')]['ids'],'VoiceQueueId':_0x518a2e[_0x81ab('0x3e')]['id']}})[_0x81ab('0x1a')](function(){return _0x509009;});}})[_0x81ab('0x1a')](respondWithStatusCode(_0x2cd393,null))[_0x81ab('0x3d')](handleError(_0x2cd393,null));};exports[_0x81ab('0x86')]=function(_0x1d306d,_0x377bcf,_0x4cb227){var _0x152eb5={};var _0x49bb54={};var _0x43fd21;var _0xb66811;return db[_0x81ab('0x3f')]['findOne']({'where':{'id':_0x1d306d[_0x81ab('0x3e')]['id']}})['then'](handleEntityNotFound(_0x377bcf,null))[_0x81ab('0x1a')](function(_0x157858){if(_0x157858){_0x43fd21=_0x157858;_0x49bb54[_0x81ab('0x22')]=_[_0x81ab('0x26')](db['CmList'][_0x81ab('0x21')]);_0x49bb54[_0x81ab('0x23')]=_[_0x81ab('0x26')](_0x1d306d['query']);_0x49bb54[_0x81ab('0x32')]=_['intersection'](_0x49bb54['model'],_0x49bb54[_0x81ab('0x23')]);_0x152eb5['attributes']=_['intersection'](_0x49bb54['model'],qs[_0x81ab('0x29')](_0x1d306d[_0x81ab('0x23')]['fields']));_0x152eb5[_0x81ab('0x28')]=_0x152eb5[_0x81ab('0x28')]['length']?_0x152eb5[_0x81ab('0x28')]:_0x49bb54[_0x81ab('0x22')];_0x152eb5[_0x81ab('0x2e')]=qs['sort'](_0x1d306d['query'][_0x81ab('0x2f')]);_0x152eb5[_0x81ab('0x30')]=qs['filters'](_[_0x81ab('0x31')](_0x1d306d[_0x81ab('0x23')],_0x49bb54[_0x81ab('0x32')]));if(_0x1d306d[_0x81ab('0x23')][_0x81ab('0x36')]){_0x152eb5[_0x81ab('0x30')]=_['merge'](_0x152eb5['where'],{'$or':_[_0x81ab('0x4f')](_0x152eb5[_0x81ab('0x28')],function(_0x4f5328){var _0x11758b={};_0x11758b[_0x4f5328]={'$like':'%'+_0x1d306d['query'][_0x81ab('0x36')]+'%'};return _0x11758b;})});}_0x152eb5=_[_0x81ab('0x35')]({},_0x152eb5,_0x1d306d[_0x81ab('0x37')]);return _0x43fd21['getBlackLists'](_0x152eb5);}})[_0x81ab('0x1a')](function(_0xdc36da){if(_0xdc36da){_0xb66811=_0xdc36da['length'];if(!_0x1d306d[_0x81ab('0x23')][_0x81ab('0x2b')](_0x81ab('0x2c'))){_0x152eb5[_0x81ab('0x2d')]=qs[_0x81ab('0x2d')](_0x1d306d[_0x81ab('0x23')][_0x81ab('0x2d')]);_0x152eb5[_0x81ab('0x14')]=qs[_0x81ab('0x14')](_0x1d306d[_0x81ab('0x23')][_0x81ab('0x14')]);}return _0x43fd21[_0x81ab('0x86')](_0x152eb5);}})['then'](function(_0x36593b){if(_0x36593b){return _0x36593b?{'count':_0xb66811,'rows':_0x36593b}:null;}})[_0x81ab('0x1a')](respondWithResult(_0x377bcf,null))[_0x81ab('0x3d')](handleError(_0x377bcf,null));};exports[_0x81ab('0x87')]=function(_0x5bc903,_0x4ab255,_0x65a04c){var _0x586618,_0x1ecf1c;return db[_0x81ab('0x3f')][_0x81ab('0x40')]({'where':{'id':_0x5bc903['params']['id']}})['then'](handleEntityNotFound(_0x4ab255,null))[_0x81ab('0x1a')](function(_0x438faf){if(_0x438faf){_0x1ecf1c=_0x438faf;return _0x438faf[_0x81ab('0x87')](_0x5bc903[_0x81ab('0x42')][_0x81ab('0x58')],_[_0x81ab('0x47')](_0x5bc903['body'],[_0x81ab('0x58'),'id'])||{});}return null;})[_0x81ab('0x5b')](function(_0x563faf){var _0x20a1fd;_0x586618=_0x563faf||[];var _0xb33210=[];if(_0x563faf){for(var _0x1fb31a=0x0;_0x1fb31a<_0x563faf[_0x81ab('0x2a')];_0x1fb31a+=0x1){var _0x34ef51=_0x563faf[_0x1fb31a][_0x81ab('0x46')]({'plain':!![]});_0x20a1fd=squel[_0x81ab('0x6d')]()[_0x81ab('0x6e')](_0x81ab('0x88'))[_0x81ab('0x70')](['phone',_0x81ab('0x72'),_0x81ab('0x7a'),_0x81ab('0x4a'),_0x81ab('0x48'),_0x81ab('0x73')],squel[_0x81ab('0x74')]()[_0x81ab('0x75')](_0x81ab('0x71'),_0x81ab('0x71'))['field']('id',_0x81ab('0x72'))[_0x81ab('0x75')](_0x34ef51[_0x81ab('0x78')]['toString'](),_0x81ab('0x7a'))[_0x81ab('0x75')](_0x5bc903[_0x81ab('0x3e')]['id'][_0x81ab('0x79')](),_0x81ab('0x4a'))['field'](_0x81ab('0x76'),_0x81ab('0x48'))[_0x81ab('0x75')](_0x81ab('0x76'),_0x81ab('0x73'))[_0x81ab('0x7b')](_0x81ab('0x84'))[_0x81ab('0x30')](_0x81ab('0x7c'))[_0x81ab('0x30')]('ListId\x20=\x20?',_0x34ef51[_0x81ab('0x78')]['toString']())[_0x81ab('0x30')](_0x81ab('0x82')))['toString']();_0xb33210[_0x81ab('0x60')](db[_0x81ab('0x85')][_0x81ab('0x23')](_0x20a1fd));}return BPromise['all'](_0xb33210);}})[_0x81ab('0x1a')](function(){return _0x586618;})[_0x81ab('0x1a')](respondWithResult(_0x4ab255,null))[_0x81ab('0x3d')](handleError(_0x4ab255,null));};exports[_0x81ab('0x89')]=function(_0x27821a,_0x5447e3,_0x1e056b){var _0x36764e;return db[_0x81ab('0x3f')][_0x81ab('0x40')]({'where':{'id':_0x27821a['params']['id']}})['then'](handleEntityNotFound(_0x5447e3,null))[_0x81ab('0x1a')](function(_0xe6cb07){if(_0xe6cb07){return _0xe6cb07['removeBlackLists'](_0x27821a['query'][_0x81ab('0x58')]);}})[_0x81ab('0x1a')](function(_0x369de6){if(_0x369de6){_0x36764e=_0x369de6;return db[_0x81ab('0x52')]['destroy']({'where':{'ListId':_0x27821a[_0x81ab('0x23')][_0x81ab('0x58')],'VoiceQueueId':_0x27821a['params']['id']}})[_0x81ab('0x1a')](function(){return _0x36764e;});}})['then'](respondWithStatusCode(_0x5447e3,null))[_0x81ab('0x3d')](handleError(_0x5447e3,null));};
\ No newline at end of file
+var _0x6322=['end','json','count','offset','limit','set','Content-Range','apply','then','error','stack','name','send','VoiceQueue','rawAttributes','model','query','dateStart','dateEnd','keys','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','add','merge','filter','options','include','findAll','rows','show','params','length','find','create','body','catch','clone','includeAll','omit','createdAt','updatedAt','getHoppers','findOne','CmHopper','pick','VoiceQueueId','map','getHopperHistories','CmHopperHistory','getHopperFinals','CmHopperFinal','getHopperBlacks','CmHopperBlack','getTeams','Team','addTeams','ids','User','Agents','union','addAgents','removeTeams','removeAgents','spread','emit','userVoiceQueue:save','loginInPause','voicePause','push','UserVoiceQueueRt','format','%s/%s','SIP','penalty','all','isArray','userVoiceQueue:remove','destroy','getAgents','getMembers','CmList','getLists','addLists','dialCheckDuplicateType','into','cm_hopper','fromQuery','phone','scheduledAt','ContactId','ListId','select','field','NOW()','CmListId','toString','cm_contacts','deletedAt\x20IS\x20NULL','phone\x20IS\x20NOT\x20NULL','from','cm_hopper_final','VoiceQueueId\x20=\x20?','phone\x20NOT\x20IN\x20(?)','onlyIfOpen','insert','ListId\x20=\x20?','sequelize','removeLists','getBlackLists','addBlackLists','cm_hopper_black','removeBlackLists','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','../../components/parsers/qs','../../config/logger','api','../../mysqldb','socket.io-emitter','localhost','./voiceQueue.socket','register','sendStatus','status'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0x6322,0x77));var _0x2632=function(_0x2feead,_0x2aeaa4){_0x2feead=_0x2feead-0x0;var _0x28643e=_0x6322[_0x2feead];return _0x28643e;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x2632('0x0'));var moment=require(_0x2632('0x1'));var BPromise=require(_0x2632('0x2'));var Mustache=require(_0x2632('0x3'));var util=require(_0x2632('0x4'));var path=require('path');var sox=require(_0x2632('0x5'));var csv=require(_0x2632('0x6'));var ejs=require(_0x2632('0x7'));var fs=require('fs');var _=require(_0x2632('0x8'));var squel=require(_0x2632('0x9'));var crypto=require(_0x2632('0xa'));var jsforce=require(_0x2632('0xb'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x2632('0xc'));var Papa=require('papaparse');var qs=require(_0x2632('0xd'));var logger=require(_0x2632('0xe'))(_0x2632('0xf'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x2632('0x10'))['db'];var socket=require(_0x2632('0x11'))({'host':_0x2632('0x12'),'port':0x18eb});require(_0x2632('0x13'))[_0x2632('0x14')](socket);function respondWithStatusCode(_0x20a101,_0x3407f9){_0x3407f9=_0x3407f9||0xcc;return function(_0x2f3868){if(_0x2f3868){return _0x20a101[_0x2632('0x15')](_0x3407f9);}return _0x20a101[_0x2632('0x16')](_0x3407f9)[_0x2632('0x17')]();};}function respondWithResult(_0x47131a,_0x566167){_0x566167=_0x566167||0xc8;return function(_0x28c1fa){if(_0x28c1fa){return _0x47131a[_0x2632('0x16')](_0x566167)[_0x2632('0x18')](_0x28c1fa);}};}function respondWithFilteredResult(_0x307099,_0x39a2bc){return function(_0x36c115){if(_0x36c115){var _0x102324=_0x36c115[_0x2632('0x19')],_0x31ed90=_0x39a2bc[_0x2632('0x1a')],_0x49ceb1=_0x39a2bc[_0x2632('0x1a')]+_0x39a2bc[_0x2632('0x1b')],_0x6db730;if(_0x49ceb1>=_0x102324){_0x49ceb1=_0x102324;_0x6db730=0xc8;}else{_0x6db730=0xce;}_0x307099[_0x2632('0x16')](_0x6db730);return _0x307099[_0x2632('0x1c')](_0x2632('0x1d'),_0x31ed90+'-'+_0x49ceb1+'/'+_0x102324)[_0x2632('0x18')](_0x36c115);}return null;};}function patchUpdates(_0x2fff81){return function(_0x56cd9c){try{jsonpatch[_0x2632('0x1e')](_0x56cd9c,_0x2fff81,!![]);}catch(_0x1dc6ce){return BPromise['reject'](_0x1dc6ce);}return _0x56cd9c['save']();};}function saveUpdates(_0x45bdb9,_0x3df76b){return function(_0x18f487){if(_0x18f487){return _0x18f487['update'](_0x45bdb9)[_0x2632('0x1f')](function(_0x4b73ba){return _0x4b73ba;});}return null;};}function removeEntity(_0x296cdb,_0x372fda){return function(_0x22105a){if(_0x22105a){return _0x22105a['destroy']()[_0x2632('0x1f')](function(){_0x296cdb[_0x2632('0x16')](0xcc)[_0x2632('0x17')]();});}};}function handleEntityNotFound(_0x5dac15,_0x5a0afa){return function(_0x234c1e){if(!_0x234c1e){_0x5dac15[_0x2632('0x15')](0x194);}return _0x234c1e;};}function handleError(_0x3e7e76,_0x81f82e){_0x81f82e=_0x81f82e||0x1f4;return function(_0x44d214){logger[_0x2632('0x20')](_0x44d214[_0x2632('0x21')]);if(_0x44d214[_0x2632('0x22')]){delete _0x44d214[_0x2632('0x22')];}_0x3e7e76[_0x2632('0x16')](_0x81f82e)[_0x2632('0x23')](_0x44d214);};}exports['index']=function(_0x54fc73,_0x369210){var _0x37a3c5={},_0x44b034={},_0x1dec10={'count':0x0,'rows':[]};var _0x36214f=db[_0x2632('0x24')][_0x2632('0x25')];_0x44b034[_0x2632('0x26')]=_['keys'](_0x36214f);var _0xbda806={'dateStart':_0x54fc73[_0x2632('0x27')][_0x2632('0x28')],'dateEnd':_0x54fc73[_0x2632('0x27')][_0x2632('0x29')]};delete _0x54fc73['query'][_0x2632('0x28')];delete _0x54fc73['query'][_0x2632('0x29')];_0x44b034[_0x2632('0x27')]=_[_0x2632('0x2a')](_0x54fc73['query']);_0x44b034[_0x2632('0x2b')]=_[_0x2632('0x2c')](_0x44b034[_0x2632('0x26')],_0x44b034[_0x2632('0x27')]);_0x37a3c5['attributes']=_['intersection'](_0x44b034[_0x2632('0x26')],qs['fields'](_0x54fc73[_0x2632('0x27')][_0x2632('0x2d')]));_0x37a3c5['attributes']=_0x37a3c5[_0x2632('0x2e')]['length']?_0x37a3c5[_0x2632('0x2e')]:_0x44b034[_0x2632('0x26')];if(!_0x54fc73[_0x2632('0x27')][_0x2632('0x2f')](_0x2632('0x30'))){_0x37a3c5['limit']=qs[_0x2632('0x1b')](_0x54fc73[_0x2632('0x27')]['limit']);_0x37a3c5[_0x2632('0x1a')]=qs[_0x2632('0x1a')](_0x54fc73[_0x2632('0x27')]['offset']);}_0x37a3c5[_0x2632('0x31')]=qs[_0x2632('0x32')](_0x54fc73['query'][_0x2632('0x32')]);_0x37a3c5[_0x2632('0x33')]=qs[_0x2632('0x2b')](_['pick'](_0x54fc73['query'],_0x44b034['filters']));if(_0xbda806[_0x2632('0x28')]){if(_0xbda806['dateEnd']){_0xbda806['dateEnd']=moment(_0xbda806[_0x2632('0x29')])[_0x2632('0x34')](0x1,'day');}else{_0xbda806['dateEnd']=moment(_0xbda806[_0x2632('0x28')])['add'](0x1,'day');}_[_0x2632('0x35')](_0x37a3c5[_0x2632('0x33')],{'createdAt':{'$gte':_0xbda806[_0x2632('0x28')],'$lte':_0xbda806['dateEnd']}});}if(_0x54fc73[_0x2632('0x27')][_0x2632('0x36')]){_0x37a3c5[_0x2632('0x33')]=_[_0x2632('0x35')](_0x37a3c5['where'],{'$or':_['map'](_0x37a3c5[_0x2632('0x2e')],function(_0x46638d){var _0x154948={};_0x154948[_0x46638d]={'$like':'%'+_0x54fc73['query'][_0x2632('0x36')]+'%'};return _0x154948;})});}_0x37a3c5=_[_0x2632('0x35')]({},_0x37a3c5,_0x54fc73[_0x2632('0x37')]);var _0x247e54={'where':_0x37a3c5[_0x2632('0x33')]};return db[_0x2632('0x24')][_0x2632('0x19')](_0x247e54)[_0x2632('0x1f')](function(_0x2b6abf){_0x1dec10['count']=_0x2b6abf;if(_0x54fc73[_0x2632('0x27')]['includeAll']){_0x37a3c5[_0x2632('0x38')]=[{'all':!![]}];}return db['VoiceQueue'][_0x2632('0x39')](_0x37a3c5);})[_0x2632('0x1f')](function(_0x4303fa){_0x1dec10[_0x2632('0x3a')]=_0x4303fa;return _0x1dec10;})[_0x2632('0x1f')](respondWithFilteredResult(_0x369210,_0x37a3c5))['catch'](handleError(_0x369210,null));};exports[_0x2632('0x3b')]=function(_0x263da4,_0x475a29){var _0x29d702={'raw':![],'where':{'id':_0x263da4[_0x2632('0x3c')]['id']}},_0x8a65bd={};_0x8a65bd[_0x2632('0x26')]=_[_0x2632('0x2a')](db[_0x2632('0x24')]['rawAttributes']);_0x8a65bd[_0x2632('0x27')]=_[_0x2632('0x2a')](_0x263da4[_0x2632('0x27')]);_0x8a65bd[_0x2632('0x2b')]=_[_0x2632('0x2c')](_0x8a65bd['model'],_0x8a65bd[_0x2632('0x27')]);_0x29d702[_0x2632('0x2e')]=_[_0x2632('0x2c')](_0x8a65bd[_0x2632('0x26')],qs[_0x2632('0x2d')](_0x263da4[_0x2632('0x27')][_0x2632('0x2d')]));_0x29d702[_0x2632('0x2e')]=_0x29d702['attributes'][_0x2632('0x3d')]?_0x29d702[_0x2632('0x2e')]:_0x8a65bd[_0x2632('0x26')];if(_0x263da4[_0x2632('0x27')]['includeAll']){_0x29d702['include']=[{'all':!![]}];}_0x29d702=_[_0x2632('0x35')]({},_0x29d702,_0x263da4[_0x2632('0x37')]);return db['VoiceQueue'][_0x2632('0x3e')](_0x29d702)[_0x2632('0x1f')](handleEntityNotFound(_0x475a29,null))['then'](respondWithResult(_0x475a29,null))['catch'](handleError(_0x475a29,null));};exports['create']=function(_0x2434d6,_0x163366){return db[_0x2632('0x24')][_0x2632('0x3f')](_0x2434d6[_0x2632('0x40')],{})[_0x2632('0x1f')](respondWithResult(_0x163366,0xc9))[_0x2632('0x41')](handleError(_0x163366,null));};exports[_0x2632('0x42')]=function(_0x53aafb,_0x5e9207){var _0x36dbc3={'raw':![],'where':{'id':_0x53aafb[_0x2632('0x3c')]['id']}},_0x33d175={};_0x33d175[_0x2632('0x26')]=_['keys'](db['VoiceQueue'][_0x2632('0x25')]);_0x36dbc3[_0x2632('0x2e')]=_[_0x2632('0x2c')](_0x33d175[_0x2632('0x26')],qs['fields'](_0x53aafb[_0x2632('0x27')]['fields']));_0x36dbc3['attributes']=_0x36dbc3['attributes'][_0x2632('0x3d')]?_0x36dbc3[_0x2632('0x2e')]:_0x33d175[_0x2632('0x26')];if(_0x53aafb['query'][_0x2632('0x43')]){_0x36dbc3[_0x2632('0x38')]=[{'all':!![]}];}_0x36dbc3=_[_0x2632('0x35')]({},_0x36dbc3,_0x53aafb[_0x2632('0x37')]);return db[_0x2632('0x24')][_0x2632('0x3e')](_0x36dbc3)[_0x2632('0x1f')](handleEntityNotFound(_0x5e9207,null))[_0x2632('0x1f')](function(_0xccf0a8){if(_0xccf0a8){var _0x1309b9=_0xccf0a8['get']({'plain':!![]});_0x1309b9=qs[_0x2632('0x44')](_0x1309b9,['id',_0x2632('0x45'),_0x2632('0x46')]);_0x53aafb[_0x2632('0x40')]=_[_0x2632('0x44')](_0x53aafb[_0x2632('0x40')],['id','createdAt',_0x2632('0x46')]);return db[_0x2632('0x24')][_0x2632('0x3f')](_['merge'](_0x1309b9,_0x53aafb[_0x2632('0x40')]),{'include':_0x53aafb[_0x2632('0x27')]['includeAll']?[{'all':!![]}]:undefined});}})[_0x2632('0x1f')](respondWithResult(_0x5e9207,0xc9))[_0x2632('0x41')](handleError(_0x5e9207,null));};exports['update']=function(_0x47693f,_0x30ff77){if(_0x47693f[_0x2632('0x40')]['id']){delete _0x47693f[_0x2632('0x40')]['id'];}return db[_0x2632('0x24')][_0x2632('0x3e')]({'where':{'id':_0x47693f['params']['id']}})['then'](handleEntityNotFound(_0x30ff77,null))[_0x2632('0x1f')](saveUpdates(_0x47693f[_0x2632('0x40')],null))[_0x2632('0x1f')](respondWithResult(_0x30ff77,null))[_0x2632('0x41')](handleError(_0x30ff77,null));};exports['destroy']=function(_0x24720c,_0x70da48){return db[_0x2632('0x24')]['find']({'where':{'id':_0x24720c[_0x2632('0x3c')]['id']}})['then'](handleEntityNotFound(_0x70da48,null))['then'](removeEntity(_0x70da48,null))[_0x2632('0x41')](handleError(_0x70da48,null));};exports[_0x2632('0x47')]=function(_0x1c17cc,_0x55e1cc,_0x1169ba){var _0x2654c5={'raw':![],'where':{}};var _0x500af9={};var _0x3ad557={'count':0x0,'rows':[]};return db['VoiceQueue'][_0x2632('0x48')]({'where':{'id':_0x1c17cc[_0x2632('0x3c')]['id']}})['then'](handleEntityNotFound(_0x55e1cc,null))[_0x2632('0x1f')](function(_0x1fd4db){if(_0x1fd4db){_0x500af9[_0x2632('0x26')]=_[_0x2632('0x2a')](db[_0x2632('0x49')][_0x2632('0x25')]);_0x500af9['query']=_[_0x2632('0x2a')](_0x1c17cc['query']);_0x500af9['filters']=_[_0x2632('0x2c')](_0x500af9[_0x2632('0x26')],_0x500af9['query']);_0x2654c5[_0x2632('0x2e')]=_[_0x2632('0x2c')](_0x500af9['model'],qs['fields'](_0x1c17cc[_0x2632('0x27')][_0x2632('0x2d')]));_0x2654c5[_0x2632('0x2e')]=_0x2654c5['attributes']['length']?_0x2654c5[_0x2632('0x2e')]:_0x500af9[_0x2632('0x26')];if(!_0x1c17cc[_0x2632('0x27')]['hasOwnProperty']('nolimit')){_0x2654c5[_0x2632('0x1b')]=qs['limit'](_0x1c17cc['query'][_0x2632('0x1b')]);_0x2654c5['offset']=qs[_0x2632('0x1a')](_0x1c17cc[_0x2632('0x27')][_0x2632('0x1a')]);}_0x2654c5[_0x2632('0x31')]=qs[_0x2632('0x32')](_0x1c17cc[_0x2632('0x27')][_0x2632('0x32')]);_0x2654c5[_0x2632('0x33')]=qs[_0x2632('0x2b')](_[_0x2632('0x4a')](_0x1c17cc['query'],_0x500af9[_0x2632('0x2b')]));_0x2654c5[_0x2632('0x33')][_0x2632('0x4b')]=_0x1fd4db['id'];if(_0x1c17cc[_0x2632('0x27')]['filter']){_0x2654c5['where']=_['merge'](_0x2654c5[_0x2632('0x33')],{'$or':_[_0x2632('0x4c')](_0x2654c5[_0x2632('0x2e')],function(_0x1974c2){var _0x3dce9f={};_0x3dce9f[_0x1974c2]={'$like':'%'+_0x1c17cc[_0x2632('0x27')][_0x2632('0x36')]+'%'};return _0x3dce9f;})});}_0x2654c5=_[_0x2632('0x35')]({},_0x2654c5,_0x1c17cc[_0x2632('0x37')]);return db['CmHopper'][_0x2632('0x19')]({'where':_0x2654c5['where']})[_0x2632('0x1f')](function(_0x4b57ea){_0x3ad557['count']=_0x4b57ea;if(_0x1c17cc[_0x2632('0x27')][_0x2632('0x43')]){_0x2654c5[_0x2632('0x38')]=[{'all':!![]}];}return db[_0x2632('0x49')][_0x2632('0x39')](_0x2654c5);})['then'](function(_0x45c19f){_0x3ad557[_0x2632('0x3a')]=_0x45c19f;return _0x3ad557;});}})[_0x2632('0x1f')](respondWithFilteredResult(_0x55e1cc,_0x2654c5))[_0x2632('0x41')](handleError(_0x55e1cc,null));};exports[_0x2632('0x4d')]=function(_0x5998ba,_0x19d708,_0x36d91f){var _0x2b7a7e={'raw':!![],'where':{}};var _0x4fcabf={};var _0x1f2136={'count':0x0,'rows':[]};return db[_0x2632('0x24')][_0x2632('0x48')]({'where':{'id':_0x5998ba[_0x2632('0x3c')]['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x19d708,null))[_0x2632('0x1f')](function(_0x547cbd){if(_0x547cbd){_0x4fcabf[_0x2632('0x26')]=_[_0x2632('0x2a')](db['CmHopperHistory']['rawAttributes']);_0x4fcabf['query']=_['keys'](_0x5998ba[_0x2632('0x27')]);_0x4fcabf[_0x2632('0x2b')]=_[_0x2632('0x2c')](_0x4fcabf[_0x2632('0x26')],_0x4fcabf[_0x2632('0x27')]);_0x2b7a7e['attributes']=_[_0x2632('0x2c')](_0x4fcabf[_0x2632('0x26')],qs[_0x2632('0x2d')](_0x5998ba[_0x2632('0x27')]['fields']));_0x2b7a7e[_0x2632('0x2e')]=_0x2b7a7e['attributes'][_0x2632('0x3d')]?_0x2b7a7e[_0x2632('0x2e')]:_0x4fcabf['model'];if(!_0x5998ba[_0x2632('0x27')][_0x2632('0x2f')](_0x2632('0x30'))){_0x2b7a7e[_0x2632('0x1b')]=qs['limit'](_0x5998ba[_0x2632('0x27')][_0x2632('0x1b')]);_0x2b7a7e[_0x2632('0x1a')]=qs[_0x2632('0x1a')](_0x5998ba[_0x2632('0x27')][_0x2632('0x1a')]);}_0x2b7a7e[_0x2632('0x31')]=qs['sort'](_0x5998ba['query']['sort']);_0x2b7a7e['where']=qs[_0x2632('0x2b')](_['pick'](_0x5998ba[_0x2632('0x27')],_0x4fcabf[_0x2632('0x2b')]));_0x2b7a7e[_0x2632('0x33')]['VoiceQueueId']=_0x547cbd['id'];if(_0x5998ba[_0x2632('0x27')]['filter']){_0x2b7a7e[_0x2632('0x33')]=_[_0x2632('0x35')](_0x2b7a7e[_0x2632('0x33')],{'$or':_[_0x2632('0x4c')](_0x2b7a7e[_0x2632('0x2e')],function(_0x14be14){var _0x185528={};_0x185528[_0x14be14]={'$like':'%'+_0x5998ba[_0x2632('0x27')][_0x2632('0x36')]+'%'};return _0x185528;})});}_0x2b7a7e=_['merge']({},_0x2b7a7e,_0x5998ba[_0x2632('0x37')]);return db[_0x2632('0x4e')][_0x2632('0x19')]({'where':_0x2b7a7e[_0x2632('0x33')]})[_0x2632('0x1f')](function(_0x2b7034){_0x1f2136[_0x2632('0x19')]=_0x2b7034;if(_0x5998ba[_0x2632('0x27')][_0x2632('0x43')]){_0x2b7a7e[_0x2632('0x38')]=[{'all':!![]}];}return db[_0x2632('0x4e')][_0x2632('0x39')](_0x2b7a7e);})['then'](function(_0x4c6f4b){_0x1f2136[_0x2632('0x3a')]=_0x4c6f4b;return _0x1f2136;});}})[_0x2632('0x1f')](respondWithFilteredResult(_0x19d708,_0x2b7a7e))['catch'](handleError(_0x19d708,null));};exports[_0x2632('0x4f')]=function(_0x26a0aa,_0x3f84a7,_0x70bec5){var _0x4cf566={'raw':!![],'where':{}};var _0x2fa1fc={};var _0x43bb06={'count':0x0,'rows':[]};return db[_0x2632('0x24')][_0x2632('0x48')]({'where':{'id':_0x26a0aa[_0x2632('0x3c')]['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x3f84a7,null))[_0x2632('0x1f')](function(_0x5b0c83){if(_0x5b0c83){_0x2fa1fc[_0x2632('0x26')]=_[_0x2632('0x2a')](db['CmHopperFinal'][_0x2632('0x25')]);_0x2fa1fc[_0x2632('0x27')]=_[_0x2632('0x2a')](_0x26a0aa[_0x2632('0x27')]);_0x2fa1fc[_0x2632('0x2b')]=_[_0x2632('0x2c')](_0x2fa1fc[_0x2632('0x26')],_0x2fa1fc[_0x2632('0x27')]);_0x4cf566[_0x2632('0x2e')]=_[_0x2632('0x2c')](_0x2fa1fc[_0x2632('0x26')],qs['fields'](_0x26a0aa[_0x2632('0x27')][_0x2632('0x2d')]));_0x4cf566['attributes']=_0x4cf566[_0x2632('0x2e')][_0x2632('0x3d')]?_0x4cf566[_0x2632('0x2e')]:_0x2fa1fc[_0x2632('0x26')];if(!_0x26a0aa[_0x2632('0x27')][_0x2632('0x2f')]('nolimit')){_0x4cf566[_0x2632('0x1b')]=qs[_0x2632('0x1b')](_0x26a0aa[_0x2632('0x27')]['limit']);_0x4cf566[_0x2632('0x1a')]=qs['offset'](_0x26a0aa[_0x2632('0x27')][_0x2632('0x1a')]);}_0x4cf566['order']=qs['sort'](_0x26a0aa[_0x2632('0x27')][_0x2632('0x32')]);_0x4cf566[_0x2632('0x33')]=qs[_0x2632('0x2b')](_[_0x2632('0x4a')](_0x26a0aa[_0x2632('0x27')],_0x2fa1fc[_0x2632('0x2b')]));_0x4cf566['where'][_0x2632('0x4b')]=_0x5b0c83['id'];if(_0x26a0aa['query'][_0x2632('0x36')]){_0x4cf566[_0x2632('0x33')]=_[_0x2632('0x35')](_0x4cf566[_0x2632('0x33')],{'$or':_['map'](_0x4cf566[_0x2632('0x2e')],function(_0x27238a){var _0x54a7fc={};_0x54a7fc[_0x27238a]={'$like':'%'+_0x26a0aa['query'][_0x2632('0x36')]+'%'};return _0x54a7fc;})});}_0x4cf566=_[_0x2632('0x35')]({},_0x4cf566,_0x26a0aa[_0x2632('0x37')]);return db['CmHopperFinal'][_0x2632('0x19')]({'where':_0x4cf566[_0x2632('0x33')]})[_0x2632('0x1f')](function(_0x4b2e09){_0x43bb06[_0x2632('0x19')]=_0x4b2e09;if(_0x26a0aa[_0x2632('0x27')][_0x2632('0x43')]){_0x4cf566[_0x2632('0x38')]=[{'all':!![]}];}return db[_0x2632('0x50')][_0x2632('0x39')](_0x4cf566);})[_0x2632('0x1f')](function(_0x4ac338){_0x43bb06['rows']=_0x4ac338;return _0x43bb06;});}})['then'](respondWithFilteredResult(_0x3f84a7,_0x4cf566))['catch'](handleError(_0x3f84a7,null));};exports[_0x2632('0x51')]=function(_0x18e1a5,_0x369bfe,_0x2ed87d){var _0x5ade78={'raw':!![],'where':{}};var _0x5ef9ff={};var _0x5ae76b={'count':0x0,'rows':[]};return db[_0x2632('0x24')][_0x2632('0x48')]({'where':{'id':_0x18e1a5['params']['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x369bfe,null))[_0x2632('0x1f')](function(_0x7a776f){if(_0x7a776f){_0x5ef9ff[_0x2632('0x26')]=_[_0x2632('0x2a')](db[_0x2632('0x52')]['rawAttributes']);_0x5ef9ff[_0x2632('0x27')]=_[_0x2632('0x2a')](_0x18e1a5[_0x2632('0x27')]);_0x5ef9ff['filters']=_[_0x2632('0x2c')](_0x5ef9ff[_0x2632('0x26')],_0x5ef9ff[_0x2632('0x27')]);_0x5ade78[_0x2632('0x2e')]=_[_0x2632('0x2c')](_0x5ef9ff['model'],qs[_0x2632('0x2d')](_0x18e1a5[_0x2632('0x27')]['fields']));_0x5ade78['attributes']=_0x5ade78[_0x2632('0x2e')]['length']?_0x5ade78[_0x2632('0x2e')]:_0x5ef9ff['model'];if(!_0x18e1a5['query'][_0x2632('0x2f')](_0x2632('0x30'))){_0x5ade78[_0x2632('0x1b')]=qs[_0x2632('0x1b')](_0x18e1a5[_0x2632('0x27')][_0x2632('0x1b')]);_0x5ade78[_0x2632('0x1a')]=qs[_0x2632('0x1a')](_0x18e1a5[_0x2632('0x27')]['offset']);}_0x5ade78['order']=qs['sort'](_0x18e1a5[_0x2632('0x27')][_0x2632('0x32')]);_0x5ade78[_0x2632('0x33')]=qs[_0x2632('0x2b')](_[_0x2632('0x4a')](_0x18e1a5[_0x2632('0x27')],_0x5ef9ff[_0x2632('0x2b')]));_0x5ade78[_0x2632('0x33')]['VoiceQueueId']=_0x7a776f['id'];if(_0x18e1a5[_0x2632('0x27')][_0x2632('0x36')]){_0x5ade78[_0x2632('0x33')]=_[_0x2632('0x35')](_0x5ade78[_0x2632('0x33')],{'$or':_[_0x2632('0x4c')](_0x5ade78['attributes'],function(_0x339482){var _0x36a032={};_0x36a032[_0x339482]={'$like':'%'+_0x18e1a5[_0x2632('0x27')][_0x2632('0x36')]+'%'};return _0x36a032;})});}_0x5ade78=_['merge']({},_0x5ade78,_0x18e1a5['options']);return db[_0x2632('0x52')]['count']({'where':_0x5ade78[_0x2632('0x33')]})[_0x2632('0x1f')](function(_0x5aad47){_0x5ae76b[_0x2632('0x19')]=_0x5aad47;if(_0x18e1a5[_0x2632('0x27')][_0x2632('0x43')]){_0x5ade78[_0x2632('0x38')]=[{'all':!![]}];}return db['CmHopperBlack'][_0x2632('0x39')](_0x5ade78);})[_0x2632('0x1f')](function(_0x28f734){_0x5ae76b[_0x2632('0x3a')]=_0x28f734;return _0x5ae76b;});}})[_0x2632('0x1f')](respondWithFilteredResult(_0x369bfe,_0x5ade78))[_0x2632('0x41')](handleError(_0x369bfe,null));};exports[_0x2632('0x53')]=function(_0xfa6e44,_0x13e41b,_0x4ab85d){var _0x445f6c={};var _0x3d9ccd={};var _0x50c761;var _0x146b96;return db[_0x2632('0x24')][_0x2632('0x48')]({'where':{'id':_0xfa6e44['params']['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x13e41b,null))[_0x2632('0x1f')](function(_0xdf92c2){if(_0xdf92c2){_0x50c761=_0xdf92c2;_0x3d9ccd['model']=_[_0x2632('0x2a')](db[_0x2632('0x54')][_0x2632('0x25')]);_0x3d9ccd[_0x2632('0x27')]=_['keys'](_0xfa6e44[_0x2632('0x27')]);_0x3d9ccd[_0x2632('0x2b')]=_[_0x2632('0x2c')](_0x3d9ccd['model'],_0x3d9ccd[_0x2632('0x27')]);_0x445f6c[_0x2632('0x2e')]=_[_0x2632('0x2c')](_0x3d9ccd[_0x2632('0x26')],qs[_0x2632('0x2d')](_0xfa6e44[_0x2632('0x27')][_0x2632('0x2d')]));_0x445f6c[_0x2632('0x2e')]=_0x445f6c[_0x2632('0x2e')][_0x2632('0x3d')]?_0x445f6c[_0x2632('0x2e')]:_0x3d9ccd['model'];_0x445f6c[_0x2632('0x31')]=qs['sort'](_0xfa6e44[_0x2632('0x27')][_0x2632('0x32')]);_0x445f6c['where']=qs[_0x2632('0x2b')](_['pick'](_0xfa6e44[_0x2632('0x27')],_0x3d9ccd['filters']));if(_0xfa6e44[_0x2632('0x27')]['filter']){_0x445f6c[_0x2632('0x33')]=_[_0x2632('0x35')](_0x445f6c['where'],{'$or':_[_0x2632('0x4c')](_0x445f6c[_0x2632('0x2e')],function(_0x18ab22){var _0x4bda65={};_0x4bda65[_0x18ab22]={'$like':'%'+_0xfa6e44[_0x2632('0x27')]['filter']+'%'};return _0x4bda65;})});}_0x445f6c=_['merge']({},_0x445f6c,_0xfa6e44[_0x2632('0x37')]);return _0x50c761[_0x2632('0x53')](_0x445f6c);}})[_0x2632('0x1f')](function(_0x3f922e){if(_0x3f922e){_0x146b96=_0x3f922e[_0x2632('0x3d')];if(!_0xfa6e44[_0x2632('0x27')][_0x2632('0x2f')](_0x2632('0x30'))){_0x445f6c['limit']=qs[_0x2632('0x1b')](_0xfa6e44[_0x2632('0x27')][_0x2632('0x1b')]);_0x445f6c[_0x2632('0x1a')]=qs[_0x2632('0x1a')](_0xfa6e44['query']['offset']);}return _0x50c761[_0x2632('0x53')](_0x445f6c);}})[_0x2632('0x1f')](function(_0x2040c5){if(_0x2040c5){return _0x2040c5?{'count':_0x146b96,'rows':_0x2040c5}:null;}})[_0x2632('0x1f')](respondWithResult(_0x13e41b,null))[_0x2632('0x41')](handleError(_0x13e41b,null));};exports[_0x2632('0x55')]=function(_0x1cc825,_0x4f1ce9,_0x2c8ab5){var _0x2cbac9=[];var _0x1a7dd8;return db['Team'][_0x2632('0x39')]({'where':{'id':_0x1cc825['body'][_0x2632('0x56')]},'attributes':['id'],'include':[{'model':db[_0x2632('0x57')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x2632('0x1f')](function(_0x390521){if(_0x390521){for(var _0x556b1f=0x0;_0x556b1f<_0x390521[_0x2632('0x3d')];_0x556b1f+=0x1){for(var _0x427572=0x0;_0x427572<_0x390521[_0x556b1f][_0x2632('0x58')][_0x2632('0x3d')];_0x427572+=0x1){_0x2cbac9=_[_0x2632('0x59')](_0x2cbac9,[_0x390521[_0x556b1f][_0x2632('0x58')][_0x427572]['id']]);}}return _0x2cbac9;}})[_0x2632('0x1f')](function(_0x565a05){if(_0x565a05){return db[_0x2632('0x24')][_0x2632('0x3e')]({'where':{'id':_0x1cc825['params']['id']}});}})[_0x2632('0x1f')](function(_0x2bda6a){if(_0x2bda6a){_0x1a7dd8=_0x2bda6a;return _0x1a7dd8[_0x2632('0x5a')](_0x2cbac9,{'penalty':_0x1cc825['body']['penalty']});}})[_0x2632('0x1f')](function(_0x32fa75){if(_0x32fa75){return _0x1a7dd8['addTeams'](_0x1cc825[_0x2632('0x40')][_0x2632('0x56')]);}})['then'](handleEntityNotFound(_0x4f1ce9,null))[_0x2632('0x1f')](respondWithStatusCode(_0x4f1ce9,null))[_0x2632('0x41')](handleError(_0x4f1ce9,null));};exports[_0x2632('0x5b')]=function(_0x256d3e,_0x457a3c,_0x2602d7){var _0x11c0c3=[];var _0x245d9c;return db[_0x2632('0x54')][_0x2632('0x39')]({'where':{'id':_0x256d3e[_0x2632('0x27')][_0x2632('0x56')]},'attributes':['id'],'include':[{'model':db['User'],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x2632('0x1f')](function(_0x3fc5eb){if(_0x3fc5eb){for(var _0x15d830=0x0;_0x15d830<_0x3fc5eb['length'];_0x15d830+=0x1){for(var _0x43a236=0x0;_0x43a236<_0x3fc5eb[_0x15d830][_0x2632('0x58')][_0x2632('0x3d')];_0x43a236+=0x1){_0x11c0c3=_[_0x2632('0x59')](_0x11c0c3,[_0x3fc5eb[_0x15d830][_0x2632('0x58')][_0x43a236]['id']]);}}return _0x11c0c3;}})['then'](function(_0x2ddd49){if(_0x2ddd49){return db['VoiceQueue']['find']({'where':{'id':_0x256d3e[_0x2632('0x3c')]['id']}});}})['then'](function(_0x1f8a70){if(_0x1f8a70){_0x245d9c=_0x1f8a70;return _0x245d9c[_0x2632('0x5c')](_0x11c0c3);}})[_0x2632('0x1f')](function(_0x530c28){if(_0x245d9c){return _0x245d9c[_0x2632('0x5b')](_0x256d3e[_0x2632('0x27')][_0x2632('0x56')]);}})[_0x2632('0x1f')](handleEntityNotFound(_0x457a3c,null))[_0x2632('0x1f')](respondWithStatusCode(_0x457a3c,null))[_0x2632('0x41')](handleError(_0x457a3c,null));};exports['addAgents']=function(_0x339747,_0xa72877,_0x14a563){var _0x39e8e5,_0x5ca9fa;return db[_0x2632('0x24')][_0x2632('0x3e')]({'where':{'id':_0x339747['params']['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0xa72877,null))[_0x2632('0x1f')](function(_0x5870e3){if(_0x5870e3){_0x5ca9fa=_0x5870e3;return _0x5870e3[_0x2632('0x5a')](_0x339747[_0x2632('0x40')]['ids'],_['omit'](_0x339747[_0x2632('0x40')],[_0x2632('0x56'),'id'])||{})[_0x2632('0x5d')](function(_0xd1abee){for(var _0x436654=0x0;_0x436654<_0x339747['body']['ids'][_0x2632('0x3d')];_0x436654+=0x1){socket[_0x2632('0x5e')](_0x2632('0x5f'),{'UserId':_0x339747[_0x2632('0x40')]['ids'][_0x436654],'VoiceQueueId':_0x339747['params']['id']});}return _0xd1abee;});}})[_0x2632('0x1f')](function(_0x3b56b1){_0x39e8e5=_0x3b56b1||[];if(_0x5ca9fa){return db[_0x2632('0x57')]['findAll']({'where':{'id':_0x339747[_0x2632('0x40')][_0x2632('0x56')]},'attributes':['id','name',_0x2632('0x60'),_0x2632('0x61')],'raw':!![]});}})[_0x2632('0x1f')](function(_0x4ae414){if(_0x4ae414&&_0x4ae414[_0x2632('0x3d')]){var _0x5c1aee=[];for(var _0x24c644=0x0;_0x24c644<_0x4ae414[_0x2632('0x3d')];_0x24c644++){_0x5c1aee[_0x2632('0x62')](db[_0x2632('0x63')]['upsert']({'membername':_0x4ae414[_0x24c644]['name'],'UserId':_0x4ae414[_0x24c644]['id'],'queue_name':_0x5ca9fa[_0x2632('0x22')],'VoiceQueueId':_0x5ca9fa['id'],'interface':util[_0x2632('0x64')](_0x2632('0x65'),_0x2632('0x66'),_0x4ae414[_0x24c644][_0x2632('0x22')]),'paused':_0x4ae414[_0x24c644][_0x2632('0x61')]||![],'penalty':_0x339747['body'][_0x2632('0x67')]||0x0}));}return BPromise[_0x2632('0x68')](_0x5c1aee);}})[_0x2632('0x1f')](function(_0x270941){return _0x39e8e5;})['then'](respondWithResult(_0xa72877,null))[_0x2632('0x41')](handleError(_0xa72877,null));};exports['removeAgents']=function(_0x1aac02,_0x2318b8,_0x179463){var _0x199343;return db[_0x2632('0x24')]['find']({'where':{'id':_0x1aac02['params']['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x2318b8,null))['then'](function(_0x52db1a){if(_0x52db1a){return _0x52db1a[_0x2632('0x5c')](_0x1aac02['query'][_0x2632('0x56')])['then'](function(_0x477434){if(_[_0x2632('0x69')](_0x1aac02[_0x2632('0x27')][_0x2632('0x56')])){for(var _0x3e37a3=0x0;_0x3e37a3<_0x1aac02['query'][_0x2632('0x56')][_0x2632('0x3d')];_0x3e37a3+=0x1){socket['emit']('userVoiceQueue:remove',{'UserId':_0x1aac02[_0x2632('0x27')][_0x2632('0x56')][_0x3e37a3],'VoiceQueueId':_0x1aac02[_0x2632('0x3c')]['id']});}}else{socket['emit'](_0x2632('0x6a'),{'UserId':_0x1aac02['query'][_0x2632('0x56')],'VoiceQueueId':_0x1aac02[_0x2632('0x3c')]['id']});}});}})[_0x2632('0x1f')](function(_0x546bb0){if(_0x1aac02[_0x2632('0x27')]['realtime']){_0x199343=_0x546bb0;return db['UserVoiceQueueRt'][_0x2632('0x6b')]({'where':{'VoiceQueueId':_0x1aac02[_0x2632('0x3c')]['id'],'UserId':_0x1aac02[_0x2632('0x27')][_0x2632('0x56')]}})[_0x2632('0x1f')](function(){return _0x199343;});}})[_0x2632('0x1f')](respondWithStatusCode(_0x2318b8,null))['catch'](handleError(_0x2318b8,null));};exports['getAgents']=function(_0x83225d,_0x497614,_0x37cc12){var _0x28d69d={};var _0x1bafd4={};var _0x3a6267;var _0x13d533;return db[_0x2632('0x24')][_0x2632('0x48')]({'where':{'id':_0x83225d[_0x2632('0x3c')]['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x497614,null))['then'](function(_0x47c631){if(_0x47c631){_0x3a6267=_0x47c631;_0x1bafd4['model']=_[_0x2632('0x2a')](db[_0x2632('0x57')]['rawAttributes']);_0x1bafd4[_0x2632('0x27')]=_[_0x2632('0x2a')](_0x83225d[_0x2632('0x27')]);_0x1bafd4['filters']=_[_0x2632('0x2c')](_0x1bafd4['model'],_0x1bafd4[_0x2632('0x27')]);_0x28d69d[_0x2632('0x2e')]=_[_0x2632('0x2c')](_0x1bafd4[_0x2632('0x26')],qs[_0x2632('0x2d')](_0x83225d[_0x2632('0x27')]['fields']));_0x28d69d[_0x2632('0x2e')]=_0x28d69d[_0x2632('0x2e')]['length']?_0x28d69d['attributes']:_0x1bafd4[_0x2632('0x26')];_0x28d69d[_0x2632('0x31')]=qs[_0x2632('0x32')](_0x83225d['query']['sort']);_0x28d69d[_0x2632('0x33')]=qs[_0x2632('0x2b')](_[_0x2632('0x4a')](_0x83225d[_0x2632('0x27')],_0x1bafd4[_0x2632('0x2b')]));if(_0x83225d[_0x2632('0x27')][_0x2632('0x36')]){_0x28d69d[_0x2632('0x33')]=_[_0x2632('0x35')](_0x28d69d['where'],{'$or':_[_0x2632('0x4c')](_0x28d69d['attributes'],function(_0x5c104e){var _0x4852c9={};_0x4852c9[_0x5c104e]={'$like':'%'+_0x83225d[_0x2632('0x27')][_0x2632('0x36')]+'%'};return _0x4852c9;})});}_0x28d69d=_[_0x2632('0x35')]({},_0x28d69d,_0x83225d[_0x2632('0x37')]);return _0x3a6267[_0x2632('0x6c')](_0x28d69d);}})[_0x2632('0x1f')](function(_0x4b501c){if(_0x4b501c){_0x13d533=_0x4b501c[_0x2632('0x3d')];if(!_0x83225d[_0x2632('0x27')][_0x2632('0x2f')]('nolimit')){_0x28d69d[_0x2632('0x1b')]=qs[_0x2632('0x1b')](_0x83225d[_0x2632('0x27')][_0x2632('0x1b')]);_0x28d69d['offset']=qs[_0x2632('0x1a')](_0x83225d['query'][_0x2632('0x1a')]);}return _0x3a6267[_0x2632('0x6c')](_0x28d69d);}})[_0x2632('0x1f')](function(_0x38806b){if(_0x38806b){return _0x38806b?{'count':_0x13d533,'rows':_0x38806b}:null;}})[_0x2632('0x1f')](respondWithResult(_0x497614,null))[_0x2632('0x41')](handleError(_0x497614,null));};exports[_0x2632('0x6d')]=function(_0xb1a155,_0x3c7006,_0x35e08b){var _0x125f66={};var _0x3e90af={};var _0x3e8c57;var _0x2659a8;return db[_0x2632('0x24')]['findOne']({'where':{'id':_0xb1a155[_0x2632('0x3c')]['id']}})['then'](handleEntityNotFound(_0x3c7006,null))[_0x2632('0x1f')](function(_0x410614){if(_0x410614){_0x3e8c57=_0x410614;_0x3e90af[_0x2632('0x26')]=_[_0x2632('0x2a')](db[_0x2632('0x63')][_0x2632('0x25')]);_0x3e90af[_0x2632('0x27')]=_[_0x2632('0x2a')](_0xb1a155[_0x2632('0x27')]);_0x3e90af[_0x2632('0x2b')]=_[_0x2632('0x2c')](_0x3e90af[_0x2632('0x26')],_0x3e90af[_0x2632('0x27')]);_0x125f66[_0x2632('0x2e')]=_[_0x2632('0x2c')](_0x3e90af[_0x2632('0x26')],qs[_0x2632('0x2d')](_0xb1a155[_0x2632('0x27')][_0x2632('0x2d')]));_0x125f66[_0x2632('0x2e')]=_0x125f66[_0x2632('0x2e')][_0x2632('0x3d')]?_0x125f66[_0x2632('0x2e')]:_0x3e90af['model'];_0x125f66[_0x2632('0x31')]=qs[_0x2632('0x32')](_0xb1a155[_0x2632('0x27')][_0x2632('0x32')]);_0x125f66[_0x2632('0x33')]=qs[_0x2632('0x2b')](_[_0x2632('0x4a')](_0xb1a155[_0x2632('0x27')],_0x3e90af[_0x2632('0x2b')]));if(_0xb1a155[_0x2632('0x27')][_0x2632('0x36')]){_0x125f66[_0x2632('0x33')]=_['merge'](_0x125f66[_0x2632('0x33')],{'$or':_[_0x2632('0x4c')](_0x125f66['attributes'],function(_0x4b3f5e){var _0x6b16f2={};_0x6b16f2[_0x4b3f5e]={'$like':'%'+_0xb1a155[_0x2632('0x27')][_0x2632('0x36')]+'%'};return _0x6b16f2;})});}_0x125f66=_['merge']({},_0x125f66,_0xb1a155[_0x2632('0x37')]);return _0x3e8c57[_0x2632('0x6d')](_0x125f66);}})[_0x2632('0x1f')](function(_0x5f5de4){if(_0x5f5de4){_0x2659a8=_0x5f5de4[_0x2632('0x3d')];if(!_0xb1a155[_0x2632('0x27')][_0x2632('0x2f')]('nolimit')){_0x125f66['limit']=qs[_0x2632('0x1b')](_0xb1a155[_0x2632('0x27')][_0x2632('0x1b')]);_0x125f66['offset']=qs[_0x2632('0x1a')](_0xb1a155[_0x2632('0x27')][_0x2632('0x1a')]);}return _0x3e8c57['getMembers'](_0x125f66);}})[_0x2632('0x1f')](function(_0x2a0061){return _0x2a0061?{'count':_0x2659a8,'rows':_0x2a0061}:null;})[_0x2632('0x1f')](respondWithResult(_0x3c7006,null))[_0x2632('0x41')](handleError(_0x3c7006,null));};exports['getLists']=function(_0x6c9c9,_0x3d6081,_0x609971){var _0x4a0d3b={};var _0x3743c1={};var _0x5ba595;var _0x387ec9;return db['VoiceQueue'][_0x2632('0x48')]({'where':{'id':_0x6c9c9[_0x2632('0x3c')]['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x3d6081,null))['then'](function(_0x1c0480){if(_0x1c0480){_0x5ba595=_0x1c0480;_0x3743c1[_0x2632('0x26')]=_[_0x2632('0x2a')](db[_0x2632('0x6e')][_0x2632('0x25')]);_0x3743c1['query']=_[_0x2632('0x2a')](_0x6c9c9[_0x2632('0x27')]);_0x3743c1[_0x2632('0x2b')]=_[_0x2632('0x2c')](_0x3743c1[_0x2632('0x26')],_0x3743c1[_0x2632('0x27')]);_0x4a0d3b[_0x2632('0x2e')]=_[_0x2632('0x2c')](_0x3743c1['model'],qs['fields'](_0x6c9c9[_0x2632('0x27')]['fields']));_0x4a0d3b[_0x2632('0x2e')]=_0x4a0d3b[_0x2632('0x2e')][_0x2632('0x3d')]?_0x4a0d3b[_0x2632('0x2e')]:_0x3743c1[_0x2632('0x26')];_0x4a0d3b[_0x2632('0x31')]=qs['sort'](_0x6c9c9[_0x2632('0x27')][_0x2632('0x32')]);_0x4a0d3b['where']=qs[_0x2632('0x2b')](_[_0x2632('0x4a')](_0x6c9c9[_0x2632('0x27')],_0x3743c1['filters']));if(_0x6c9c9['query']['filter']){_0x4a0d3b['where']=_[_0x2632('0x35')](_0x4a0d3b[_0x2632('0x33')],{'$or':_['map'](_0x4a0d3b[_0x2632('0x2e')],function(_0x3be2f0){var _0x34e5ca={};_0x34e5ca[_0x3be2f0]={'$like':'%'+_0x6c9c9[_0x2632('0x27')][_0x2632('0x36')]+'%'};return _0x34e5ca;})});}_0x4a0d3b=_['merge']({},_0x4a0d3b,_0x6c9c9[_0x2632('0x37')]);return _0x5ba595[_0x2632('0x6f')](_0x4a0d3b);}})[_0x2632('0x1f')](function(_0x549dce){if(_0x549dce){_0x387ec9=_0x549dce[_0x2632('0x3d')];if(!_0x6c9c9[_0x2632('0x27')][_0x2632('0x2f')](_0x2632('0x30'))){_0x4a0d3b[_0x2632('0x1b')]=qs[_0x2632('0x1b')](_0x6c9c9['query'][_0x2632('0x1b')]);_0x4a0d3b[_0x2632('0x1a')]=qs[_0x2632('0x1a')](_0x6c9c9[_0x2632('0x27')]['offset']);}return _0x5ba595[_0x2632('0x6f')](_0x4a0d3b);}})[_0x2632('0x1f')](function(_0x3d192f){if(_0x3d192f){return _0x3d192f?{'count':_0x387ec9,'rows':_0x3d192f}:null;}})['then'](respondWithResult(_0x3d6081,null))[_0x2632('0x41')](handleError(_0x3d6081,null));};exports[_0x2632('0x70')]=function(_0x17226b,_0x4672c7,_0x4dd739){var _0x38b374,_0x526a44;return db['VoiceQueue'][_0x2632('0x3e')]({'where':{'id':_0x17226b[_0x2632('0x3c')]['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x4672c7,null))['then'](function(_0x3572b4){if(_0x3572b4){_0x526a44=_0x3572b4;return _0x3572b4[_0x2632('0x70')](_0x17226b[_0x2632('0x40')]['ids'],_['omit'](_0x17226b['body'],[_0x2632('0x56'),'id'])||{});}return null;})[_0x2632('0x5d')](function(_0x2c2a5c){var _0xe1d221;_0x38b374=_0x2c2a5c||[];var _0x278768=[];if(_0x2c2a5c){for(var _0xc25305=0x0;_0xc25305<_0x2c2a5c[_0x2632('0x3d')];_0xc25305+=0x1){var _0x1c987d=_0x2c2a5c[_0xc25305]['get']({'plain':!![]});_0x526a44[_0x2632('0x71')]=_0x17226b[_0x2632('0x40')][_0x2632('0x71')]?_0x17226b['body'][_0x2632('0x71')]:_0x526a44['dialCheckDuplicateType'];switch(_0x526a44[_0x2632('0x71')]){case'always':_0xe1d221=squel['insert']()[_0x2632('0x72')](_0x2632('0x73'))[_0x2632('0x74')]([_0x2632('0x75'),_0x2632('0x76'),_0x2632('0x77'),_0x2632('0x78'),_0x2632('0x4b'),_0x2632('0x45'),'updatedAt'],squel[_0x2632('0x79')]()[_0x2632('0x7a')](_0x2632('0x75'),_0x2632('0x75'))[_0x2632('0x7a')](_0x2632('0x7b'),'scheduledAt')[_0x2632('0x7a')]('id',_0x2632('0x77'))['field'](_0x1c987d[_0x2632('0x7c')][_0x2632('0x7d')](),_0x2632('0x78'))[_0x2632('0x7a')](_0x17226b[_0x2632('0x3c')]['id']['toString'](),'VoiceQueueId')[_0x2632('0x7a')](_0x2632('0x7b'),_0x2632('0x45'))[_0x2632('0x7a')](_0x2632('0x7b'),_0x2632('0x46'))['from'](_0x2632('0x7e'))[_0x2632('0x33')](_0x2632('0x7f'))[_0x2632('0x33')]('ListId\x20=\x20?',_0x1c987d[_0x2632('0x7c')][_0x2632('0x7d')]())[_0x2632('0x33')](_0x2632('0x80'))[_0x2632('0x33')]('phone\x20NOT\x20IN\x20(?)',squel[_0x2632('0x79')]()[_0x2632('0x7a')]('calleridnum')[_0x2632('0x81')](_0x2632('0x82'))[_0x2632('0x33')](_0x2632('0x83'),_0x17226b[_0x2632('0x3c')]['id']['toString']()))[_0x2632('0x33')](_0x2632('0x84'),squel[_0x2632('0x79')]()[_0x2632('0x7a')](_0x2632('0x75'))[_0x2632('0x81')](_0x2632('0x73'))[_0x2632('0x33')](_0x2632('0x83'),_0x17226b[_0x2632('0x3c')]['id']['toString']())))[_0x2632('0x7d')]();break;case _0x2632('0x85'):_0xe1d221=squel[_0x2632('0x86')]()[_0x2632('0x72')](_0x2632('0x73'))[_0x2632('0x74')](['phone',_0x2632('0x76'),'ContactId','ListId','VoiceQueueId',_0x2632('0x45'),_0x2632('0x46')],squel[_0x2632('0x79')]()['field'](_0x2632('0x75'),_0x2632('0x75'))[_0x2632('0x7a')]('NOW()',_0x2632('0x76'))[_0x2632('0x7a')]('id','ContactId')[_0x2632('0x7a')](_0x1c987d['CmListId'][_0x2632('0x7d')](),_0x2632('0x78'))[_0x2632('0x7a')](_0x17226b[_0x2632('0x3c')]['id']['toString'](),_0x2632('0x4b'))[_0x2632('0x7a')](_0x2632('0x7b'),'createdAt')[_0x2632('0x7a')](_0x2632('0x7b'),_0x2632('0x46'))[_0x2632('0x81')]('cm_contacts')[_0x2632('0x33')](_0x2632('0x7f'))['where'](_0x2632('0x87'),_0x1c987d[_0x2632('0x7c')]['toString']())['where'](_0x2632('0x80'))['where'](_0x2632('0x84'),squel[_0x2632('0x79')]()[_0x2632('0x7a')](_0x2632('0x75'))[_0x2632('0x81')](_0x2632('0x73'))[_0x2632('0x33')](_0x2632('0x83'),_0x17226b['params']['id'][_0x2632('0x7d')]())))[_0x2632('0x7d')]();break;default:_0xe1d221=squel[_0x2632('0x86')]()[_0x2632('0x72')]('cm_hopper')[_0x2632('0x74')]([_0x2632('0x75'),_0x2632('0x76'),_0x2632('0x77'),_0x2632('0x78'),_0x2632('0x4b'),_0x2632('0x45'),_0x2632('0x46')],squel[_0x2632('0x79')]()[_0x2632('0x7a')](_0x2632('0x75'),'phone')['field']('NOW()',_0x2632('0x76'))[_0x2632('0x7a')]('id',_0x2632('0x77'))[_0x2632('0x7a')](_0x1c987d[_0x2632('0x7c')][_0x2632('0x7d')](),'ListId')[_0x2632('0x7a')](_0x17226b[_0x2632('0x3c')]['id'][_0x2632('0x7d')](),_0x2632('0x4b'))[_0x2632('0x7a')](_0x2632('0x7b'),_0x2632('0x45'))[_0x2632('0x7a')](_0x2632('0x7b'),_0x2632('0x46'))[_0x2632('0x81')]('cm_contacts')[_0x2632('0x33')](_0x2632('0x7f'))[_0x2632('0x33')](_0x2632('0x87'),_0x1c987d[_0x2632('0x7c')]['toString']())[_0x2632('0x33')](_0x2632('0x80')))[_0x2632('0x7d')]();}_0x278768[_0x2632('0x62')](db[_0x2632('0x88')][_0x2632('0x27')](_0xe1d221));}return BPromise['all'](_0x278768);}})[_0x2632('0x1f')](function(){return _0x38b374;})[_0x2632('0x1f')](respondWithResult(_0x4672c7,null))[_0x2632('0x41')](handleError(_0x4672c7,null));};exports[_0x2632('0x89')]=function(_0x1a66fa,_0x29af7b,_0x1cc9b3){var _0x23d62b;return db[_0x2632('0x24')][_0x2632('0x3e')]({'where':{'id':_0x1a66fa['params']['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x29af7b,null))['then'](function(_0x9510c8){if(_0x9510c8){return _0x9510c8[_0x2632('0x89')](_0x1a66fa[_0x2632('0x27')][_0x2632('0x56')]);}})[_0x2632('0x1f')](function(_0x361a0c){if(_0x361a0c){_0x23d62b=_0x361a0c;return db[_0x2632('0x49')][_0x2632('0x6b')]({'where':{'ListId':_0x1a66fa[_0x2632('0x27')]['ids'],'VoiceQueueId':_0x1a66fa[_0x2632('0x3c')]['id']}})[_0x2632('0x1f')](function(){return _0x23d62b;});}})[_0x2632('0x1f')](respondWithStatusCode(_0x29af7b,null))['catch'](handleError(_0x29af7b,null));};exports['getBlackLists']=function(_0x1d440d,_0x3ddc72,_0x518de1){var _0x5b6406={};var _0x2f7940={};var _0x5643ac;var _0x3d8c11;return db[_0x2632('0x24')][_0x2632('0x48')]({'where':{'id':_0x1d440d[_0x2632('0x3c')]['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x3ddc72,null))[_0x2632('0x1f')](function(_0x3cd360){if(_0x3cd360){_0x5643ac=_0x3cd360;_0x2f7940[_0x2632('0x26')]=_[_0x2632('0x2a')](db[_0x2632('0x6e')][_0x2632('0x25')]);_0x2f7940[_0x2632('0x27')]=_[_0x2632('0x2a')](_0x1d440d[_0x2632('0x27')]);_0x2f7940[_0x2632('0x2b')]=_[_0x2632('0x2c')](_0x2f7940[_0x2632('0x26')],_0x2f7940['query']);_0x5b6406[_0x2632('0x2e')]=_[_0x2632('0x2c')](_0x2f7940[_0x2632('0x26')],qs['fields'](_0x1d440d[_0x2632('0x27')][_0x2632('0x2d')]));_0x5b6406[_0x2632('0x2e')]=_0x5b6406[_0x2632('0x2e')][_0x2632('0x3d')]?_0x5b6406[_0x2632('0x2e')]:_0x2f7940[_0x2632('0x26')];_0x5b6406['order']=qs[_0x2632('0x32')](_0x1d440d[_0x2632('0x27')]['sort']);_0x5b6406[_0x2632('0x33')]=qs[_0x2632('0x2b')](_[_0x2632('0x4a')](_0x1d440d['query'],_0x2f7940[_0x2632('0x2b')]));if(_0x1d440d[_0x2632('0x27')][_0x2632('0x36')]){_0x5b6406[_0x2632('0x33')]=_[_0x2632('0x35')](_0x5b6406[_0x2632('0x33')],{'$or':_[_0x2632('0x4c')](_0x5b6406[_0x2632('0x2e')],function(_0x2b0d76){var _0x14a9f3={};_0x14a9f3[_0x2b0d76]={'$like':'%'+_0x1d440d[_0x2632('0x27')][_0x2632('0x36')]+'%'};return _0x14a9f3;})});}_0x5b6406=_[_0x2632('0x35')]({},_0x5b6406,_0x1d440d[_0x2632('0x37')]);return _0x5643ac[_0x2632('0x8a')](_0x5b6406);}})[_0x2632('0x1f')](function(_0x20f706){if(_0x20f706){_0x3d8c11=_0x20f706[_0x2632('0x3d')];if(!_0x1d440d[_0x2632('0x27')][_0x2632('0x2f')]('nolimit')){_0x5b6406[_0x2632('0x1b')]=qs[_0x2632('0x1b')](_0x1d440d[_0x2632('0x27')][_0x2632('0x1b')]);_0x5b6406[_0x2632('0x1a')]=qs['offset'](_0x1d440d[_0x2632('0x27')][_0x2632('0x1a')]);}return _0x5643ac[_0x2632('0x8a')](_0x5b6406);}})[_0x2632('0x1f')](function(_0x110255){if(_0x110255){return _0x110255?{'count':_0x3d8c11,'rows':_0x110255}:null;}})['then'](respondWithResult(_0x3ddc72,null))['catch'](handleError(_0x3ddc72,null));};exports[_0x2632('0x8b')]=function(_0xba2417,_0x5aa266,_0x1ffd0b){var _0x1979fd,_0x5c9ef6;return db['VoiceQueue'][_0x2632('0x3e')]({'where':{'id':_0xba2417['params']['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x5aa266,null))[_0x2632('0x1f')](function(_0x2e891a){if(_0x2e891a){_0x5c9ef6=_0x2e891a;return _0x2e891a[_0x2632('0x8b')](_0xba2417[_0x2632('0x40')][_0x2632('0x56')],_[_0x2632('0x44')](_0xba2417[_0x2632('0x40')],['ids','id'])||{});}return null;})[_0x2632('0x5d')](function(_0xbfc12e){var _0x25b884;_0x1979fd=_0xbfc12e||[];var _0x10a736=[];if(_0xbfc12e){for(var _0x1d441e=0x0;_0x1d441e<_0xbfc12e[_0x2632('0x3d')];_0x1d441e+=0x1){var _0x321e21=_0xbfc12e[_0x1d441e]['get']({'plain':!![]});_0x25b884=squel[_0x2632('0x86')]()[_0x2632('0x72')](_0x2632('0x8c'))[_0x2632('0x74')]([_0x2632('0x75'),'ContactId',_0x2632('0x78'),_0x2632('0x4b'),_0x2632('0x45'),_0x2632('0x46')],squel['select']()[_0x2632('0x7a')](_0x2632('0x75'),_0x2632('0x75'))[_0x2632('0x7a')]('id',_0x2632('0x77'))[_0x2632('0x7a')](_0x321e21[_0x2632('0x7c')]['toString'](),_0x2632('0x78'))[_0x2632('0x7a')](_0xba2417[_0x2632('0x3c')]['id'][_0x2632('0x7d')](),_0x2632('0x4b'))[_0x2632('0x7a')](_0x2632('0x7b'),'createdAt')[_0x2632('0x7a')](_0x2632('0x7b'),'updatedAt')[_0x2632('0x81')](_0x2632('0x7e'))[_0x2632('0x33')](_0x2632('0x7f'))[_0x2632('0x33')](_0x2632('0x87'),_0x321e21[_0x2632('0x7c')][_0x2632('0x7d')]())[_0x2632('0x33')](_0x2632('0x80')))[_0x2632('0x7d')]();_0x10a736[_0x2632('0x62')](db['sequelize']['query'](_0x25b884));}return BPromise[_0x2632('0x68')](_0x10a736);}})[_0x2632('0x1f')](function(){return _0x1979fd;})['then'](respondWithResult(_0x5aa266,null))['catch'](handleError(_0x5aa266,null));};exports[_0x2632('0x8d')]=function(_0x30eb49,_0x49e569,_0x391e3d){var _0x419d12;return db[_0x2632('0x24')]['find']({'where':{'id':_0x30eb49[_0x2632('0x3c')]['id']}})[_0x2632('0x1f')](handleEntityNotFound(_0x49e569,null))[_0x2632('0x1f')](function(_0x31b782){if(_0x31b782){return _0x31b782[_0x2632('0x8d')](_0x30eb49['query']['ids']);}})[_0x2632('0x1f')](function(_0xd050ea){if(_0xd050ea){_0x419d12=_0xd050ea;return db[_0x2632('0x52')]['destroy']({'where':{'ListId':_0x30eb49['query'][_0x2632('0x56')],'VoiceQueueId':_0x30eb49['params']['id']}})['then'](function(){return _0x419d12;});}})[_0x2632('0x1f')](respondWithStatusCode(_0x49e569,null))[_0x2632('0x41')](handleError(_0x49e569,null));};
\ No newline at end of file
index 523fede..001716a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe303=['hook','exports','events','VoiceQueue','save','update','emit','hasOwnProperty'];(function(_0x1f5a63,_0x511504){var _0x30bb7a=function(_0x476310){while(--_0x476310){_0x1f5a63['push'](_0x1f5a63['shift']());}};_0x30bb7a(++_0x511504);}(_0xe303,0x112));var _0x3e30=function(_0x6e1c9e,_0x5b639e){_0x6e1c9e=_0x6e1c9e-0x0;var _0x1946ed=_0xe303[_0x6e1c9e];return _0x1946ed;};'use strict';var EventEmitter=require(_0x3e30('0x0'));var VoiceQueue=require('../../mysqldb')['db'][_0x3e30('0x1')];var VoiceQueueEvents=new EventEmitter();VoiceQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x3e30('0x2'),'afterUpdate':_0x3e30('0x3'),'afterDestroy':'remove'};function emitEvent(_0x482002){return function(_0x27275e,_0x528c55,_0x623863){VoiceQueueEvents[_0x3e30('0x4')](_0x482002+':'+_0x27275e['id'],_0x27275e);VoiceQueueEvents[_0x3e30('0x4')](_0x482002,_0x27275e);_0x623863(null);};}for(var e in events){if(events[_0x3e30('0x5')](e)){var event=events[e];VoiceQueue[_0x3e30('0x6')](e,emitEvent(event));}}module[_0x3e30('0x7')]=VoiceQueueEvents;
\ No newline at end of file
+var _0xb223=['emit','hasOwnProperty','hook','exports','../../mysqldb','save','update','remove'];(function(_0x574617,_0x42eccc){var _0x29de90=function(_0x367aff){while(--_0x367aff){_0x574617['push'](_0x574617['shift']());}};_0x29de90(++_0x42eccc);}(_0xb223,0x194));var _0x3b22=function(_0xdd7d60,_0x52d918){_0xdd7d60=_0xdd7d60-0x0;var _0x2c3f95=_0xb223[_0xdd7d60];return _0x2c3f95;};'use strict';var EventEmitter=require('events');var VoiceQueue=require(_0x3b22('0x0'))['db']['VoiceQueue'];var VoiceQueueEvents=new EventEmitter();VoiceQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x3b22('0x1'),'afterUpdate':_0x3b22('0x2'),'afterDestroy':_0x3b22('0x3')};function emitEvent(_0xea2fc3){return function(_0xedb49,_0x493144,_0x22f0ba){VoiceQueueEvents[_0x3b22('0x4')](_0xea2fc3+':'+_0xedb49['id'],_0xedb49);VoiceQueueEvents['emit'](_0xea2fc3,_0xedb49);_0x22f0ba(null);};}for(var e in events){if(events[_0x3b22('0x5')](e)){var event=events[e];VoiceQueue[_0x3b22('0x6')](e,emitEvent(event));}}module[_0x3b22('0x7')]=VoiceQueueEvents;
\ No newline at end of file
index 879b4a5..bef901b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf61d=['bluebird','./voiceQueue.attributes','VoiceQueue','voice_queues','lodash','../../config/logger','api','moment'];(function(_0x3218bb,_0x23842f){var _0x1d4df5=function(_0x503639){while(--_0x503639){_0x3218bb['push'](_0x3218bb['shift']());}};_0x1d4df5(++_0x23842f);}(_0xf61d,0xac));var _0xdf61=function(_0x4c0622,_0x5dacaf){_0x4c0622=_0x4c0622-0x0;var _0x1799d8=_0xf61d[_0x4c0622];return _0x1799d8;};'use strict';var _=require(_0xdf61('0x0'));var util=require('util');var logger=require(_0xdf61('0x1'))(_0xdf61('0x2'));var moment=require(_0xdf61('0x3'));var BPromise=require(_0xdf61('0x4'));var rp=require('request-promise');var attributes=require(_0xdf61('0x5'));module['exports']=function(_0x3d6872,_0x1f450f){return _0x3d6872['define'](_0xdf61('0x6'),attributes,{'tableName':_0xdf61('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3ce0=['moment','request-promise','./voiceQueue.attributes','exports','VoiceQueue','voice_queues','../../config/logger','api'];(function(_0x3b9267,_0x2ab8cf){var _0x396cbe=function(_0x5a30f8){while(--_0x5a30f8){_0x3b9267['push'](_0x3b9267['shift']());}};_0x396cbe(++_0x2ab8cf);}(_0x3ce0,0xc6));var _0x03ce=function(_0x35e699,_0x10d023){_0x35e699=_0x35e699-0x0;var _0xe9f84d=_0x3ce0[_0x35e699];return _0xe9f84d;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x03ce('0x0'))(_0x03ce('0x1'));var moment=require(_0x03ce('0x2'));var BPromise=require('bluebird');var rp=require(_0x03ce('0x3'));var attributes=require(_0x03ce('0x4'));module[_0x03ce('0x5')]=function(_0x23aba2,_0x2ca6ef){return _0x23aba2['define'](_0x03ce('0x6'),attributes,{'tableName':_0x03ce('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index de6cbc0..09d9085 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x33af=['raw','where','attributes','limit','include','model','map','ShowVoiceQueue','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','socket.io-emitter','localhost','./voiceQueue.socket','register','request','then','info','debug','VoiceQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','VoiceQueue,\x20%s,\x20%s','result','catch','GetVoiceQueue','VoiceQueue','findAll','options'];(function(_0x1cce8f,_0x12486f){var _0xb26c31=function(_0x2b6eaf){while(--_0x2b6eaf){_0x1cce8f['push'](_0x1cce8f['shift']());}};_0xb26c31(++_0x12486f);}(_0x33af,0xec));var _0xf33a=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x33af[_0x14add3];return _0x4a174f;};'use strict';var _=require('lodash');var util=require(_0xf33a('0x0'));var moment=require('moment');var BPromise=require(_0xf33a('0x1'));var rs=require(_0xf33a('0x2'));var fs=require('fs');var db=require(_0xf33a('0x3'))['db'];var utils=require(_0xf33a('0x4'));var logger=require(_0xf33a('0x5'))(_0xf33a('0x6'));var config=require('../../config/environment');var jayson=require(_0xf33a('0x7'));var client=jayson[_0xf33a('0x8')]['http']({'port':0x232a});var socket=require(_0xf33a('0x9'))({'host':_0xf33a('0xa'),'port':0x18eb});require(_0xf33a('0xb'))[_0xf33a('0xc')](socket);function respondWithRpcPromise(_0x2baabb,_0x2cb169,_0x52517f){return new BPromise(function(_0x29bb24,_0x14eb0e){return client[_0xf33a('0xd')](_0x2baabb,_0x52517f)[_0xf33a('0xe')](function(_0x44ee7f){logger[_0xf33a('0xf')]('VoiceQueue,\x20%s,\x20%s',_0x2cb169,'request\x20sent');logger[_0xf33a('0x10')](_0xf33a('0x11'),_0x2cb169,_0xf33a('0x12'),JSON[_0xf33a('0x13')](_0x44ee7f));if(_0x44ee7f[_0xf33a('0x14')]){if(_0x44ee7f['error'][_0xf33a('0x15')]===0x1f4){logger[_0xf33a('0x14')]('VoiceQueue,\x20%s,\x20%s',_0x2cb169,_0x44ee7f['error'][_0xf33a('0x16')]);return _0x14eb0e(_0x44ee7f[_0xf33a('0x14')][_0xf33a('0x16')]);}logger[_0xf33a('0x14')](_0xf33a('0x17'),_0x2cb169,_0x44ee7f[_0xf33a('0x14')][_0xf33a('0x16')]);return _0x29bb24(_0x44ee7f[_0xf33a('0x14')]['message']);}else{logger[_0xf33a('0xf')]('VoiceQueue,\x20%s,\x20%s',_0x2cb169,_0xf33a('0x12'));_0x29bb24(_0x44ee7f[_0xf33a('0x18')]['message']);}})[_0xf33a('0x19')](function(_0x25c931){logger['error'](_0xf33a('0x17'),_0x2cb169,_0x25c931);_0x14eb0e(_0x25c931);});});}exports[_0xf33a('0x1a')]=function(_0x38d69a){var _0x2a9f0e=this;return new Promise(function(_0x532502,_0x11efa0){return db[_0xf33a('0x1b')][_0xf33a('0x1c')]({'raw':_0x38d69a[_0xf33a('0x1d')]?_0x38d69a[_0xf33a('0x1d')][_0xf33a('0x1e')]===undefined?!![]:![]:!![],'where':_0x38d69a[_0xf33a('0x1d')]?_0x38d69a[_0xf33a('0x1d')][_0xf33a('0x1f')]||null:null,'attributes':_0x38d69a[_0xf33a('0x1d')]?_0x38d69a['options'][_0xf33a('0x20')]||null:null,'limit':_0x38d69a[_0xf33a('0x1d')]?_0x38d69a[_0xf33a('0x1d')][_0xf33a('0x21')]||null:null,'include':_0x38d69a[_0xf33a('0x1d')]?_0x38d69a['options'][_0xf33a('0x22')]?_['map'](_0x38d69a[_0xf33a('0x1d')][_0xf33a('0x22')],function(_0x394468){return{'model':db[_0x394468[_0xf33a('0x23')]],'as':_0x394468['as'],'attributes':_0x394468[_0xf33a('0x20')],'include':_0x394468['include']?_[_0xf33a('0x24')](_0x394468[_0xf33a('0x22')],function(_0x5edf1a){return{'model':db[_0x5edf1a['model']],'as':_0x5edf1a['as'],'attributes':_0x5edf1a[_0xf33a('0x20')],'include':_0x5edf1a['include']?_['map'](_0x5edf1a[_0xf33a('0x22')],function(_0x4f60a4){return{'model':db[_0x4f60a4[_0xf33a('0x23')]],'as':_0x4f60a4['as'],'attributes':_0x4f60a4['attributes']};}):[]};}):[]};}):[]:[]})[_0xf33a('0xe')](function(_0xdc2b34){logger[_0xf33a('0xf')](_0xf33a('0x1a'),_0x38d69a);logger[_0xf33a('0x10')](_0xf33a('0x1a'),_0x38d69a,JSON[_0xf33a('0x13')](_0xdc2b34));_0x532502(_0xdc2b34);})[_0xf33a('0x19')](function(_0x26e81){logger[_0xf33a('0x14')](_0xf33a('0x1a'),_0x26e81[_0xf33a('0x16')],_0x38d69a);_0x11efa0(_0x2a9f0e[_0xf33a('0x14')](0x1f4,_0x26e81[_0xf33a('0x16')]));});});};exports[_0xf33a('0x25')]=function(_0x5eb14a){var _0x627fd2=this;return new Promise(function(_0x293cb5,_0x1fc982){return db[_0xf33a('0x1b')]['find']({'raw':_0x5eb14a[_0xf33a('0x1d')]?_0x5eb14a[_0xf33a('0x1d')][_0xf33a('0x1e')]===undefined?!![]:![]:!![],'where':_0x5eb14a[_0xf33a('0x1d')]?_0x5eb14a[_0xf33a('0x1d')][_0xf33a('0x1f')]||null:null,'attributes':_0x5eb14a['options']?_0x5eb14a[_0xf33a('0x1d')][_0xf33a('0x20')]||null:null,'include':_0x5eb14a[_0xf33a('0x1d')]?_0x5eb14a[_0xf33a('0x1d')][_0xf33a('0x22')]?_['map'](_0x5eb14a['options'][_0xf33a('0x22')],function(_0x4b25dd){return{'model':db[_0x4b25dd['model']],'as':_0x4b25dd['as'],'attributes':_0x4b25dd['attributes'],'include':_0x4b25dd[_0xf33a('0x22')]?_[_0xf33a('0x24')](_0x4b25dd['include'],function(_0x21f250){return{'model':db[_0x21f250['model']],'as':_0x21f250['as'],'attributes':_0x21f250[_0xf33a('0x20')],'include':_0x21f250[_0xf33a('0x22')]?_[_0xf33a('0x24')](_0x21f250[_0xf33a('0x22')],function(_0x156731){return{'model':db[_0x156731[_0xf33a('0x23')]],'as':_0x156731['as'],'attributes':_0x156731['attributes']};}):[]};}):[]};}):[]:[]})[_0xf33a('0xe')](function(_0x29a39f){logger['info'](_0xf33a('0x25'),_0x5eb14a);logger[_0xf33a('0x10')](_0xf33a('0x25'),_0x5eb14a,JSON['stringify'](_0x29a39f));_0x293cb5(_0x29a39f);})[_0xf33a('0x19')](function(_0x1650c){logger[_0xf33a('0x14')](_0xf33a('0x25'),_0x1650c[_0xf33a('0x16')],_0x5eb14a);_0x1fc982(_0x627fd2[_0xf33a('0x14')](0x1f4,_0x1650c[_0xf33a('0x16')]));});});};
\ No newline at end of file
+var _0x71ab=['request','VoiceQueue,\x20%s,\x20%s','request\x20sent','debug','error','message','info','result','catch','GetVoiceQueue','VoiceQueue','findAll','raw','options','attributes','limit','include','map','model','then','stringify','ShowVoiceQueue','find','where','util','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','localhost','./voiceQueue.socket','register'];(function(_0x505bb4,_0x1d06f8){var _0x179861=function(_0x17fbdc){while(--_0x17fbdc){_0x505bb4['push'](_0x505bb4['shift']());}};_0x179861(++_0x1d06f8);}(_0x71ab,0x64));var _0xb71a=function(_0x2b4411,_0x2625ed){_0x2b4411=_0x2b4411-0x0;var _0x8e41ef=_0x71ab[_0x2b4411];return _0x8e41ef;};'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 db=require(_0xb71a('0x2'))['db'];var utils=require(_0xb71a('0x3'));var logger=require(_0xb71a('0x4'))(_0xb71a('0x5'));var config=require(_0xb71a('0x6'));var jayson=require(_0xb71a('0x7'));var client=jayson[_0xb71a('0x8')][_0xb71a('0x9')]({'port':0x232a});var socket=require(_0xb71a('0xa'))({'host':_0xb71a('0xb'),'port':0x18eb});require(_0xb71a('0xc'))[_0xb71a('0xd')](socket);function respondWithRpcPromise(_0x43ca14,_0x471ab6,_0x18c7a6){return new BPromise(function(_0xbfef18,_0x378c96){return client[_0xb71a('0xe')](_0x43ca14,_0x18c7a6)['then'](function(_0xfec897){logger['info'](_0xb71a('0xf'),_0x471ab6,_0xb71a('0x10'));logger[_0xb71a('0x11')]('VoiceQueue,\x20%s,\x20%s,\x20%s',_0x471ab6,_0xb71a('0x10'),JSON['stringify'](_0xfec897));if(_0xfec897[_0xb71a('0x12')]){if(_0xfec897['error']['code']===0x1f4){logger[_0xb71a('0x12')](_0xb71a('0xf'),_0x471ab6,_0xfec897[_0xb71a('0x12')][_0xb71a('0x13')]);return _0x378c96(_0xfec897['error']['message']);}logger['error'](_0xb71a('0xf'),_0x471ab6,_0xfec897[_0xb71a('0x12')][_0xb71a('0x13')]);return _0xbfef18(_0xfec897[_0xb71a('0x12')][_0xb71a('0x13')]);}else{logger[_0xb71a('0x14')](_0xb71a('0xf'),_0x471ab6,_0xb71a('0x10'));_0xbfef18(_0xfec897[_0xb71a('0x15')]['message']);}})[_0xb71a('0x16')](function(_0x2d6369){logger[_0xb71a('0x12')](_0xb71a('0xf'),_0x471ab6,_0x2d6369);_0x378c96(_0x2d6369);});});}exports[_0xb71a('0x17')]=function(_0xf83e73){var _0x349de1=this;return new Promise(function(_0x7cd1f9,_0x20bdfe){return db[_0xb71a('0x18')][_0xb71a('0x19')]({'raw':_0xf83e73['options']?_0xf83e73['options'][_0xb71a('0x1a')]===undefined?!![]:![]:!![],'where':_0xf83e73[_0xb71a('0x1b')]?_0xf83e73['options']['where']||null:null,'attributes':_0xf83e73[_0xb71a('0x1b')]?_0xf83e73['options'][_0xb71a('0x1c')]||null:null,'limit':_0xf83e73[_0xb71a('0x1b')]?_0xf83e73[_0xb71a('0x1b')][_0xb71a('0x1d')]||null:null,'include':_0xf83e73[_0xb71a('0x1b')]?_0xf83e73[_0xb71a('0x1b')][_0xb71a('0x1e')]?_[_0xb71a('0x1f')](_0xf83e73['options'][_0xb71a('0x1e')],function(_0x2c15bc){return{'model':db[_0x2c15bc[_0xb71a('0x20')]],'as':_0x2c15bc['as'],'attributes':_0x2c15bc[_0xb71a('0x1c')],'include':_0x2c15bc[_0xb71a('0x1e')]?_[_0xb71a('0x1f')](_0x2c15bc[_0xb71a('0x1e')],function(_0xfc8df0){return{'model':db[_0xfc8df0[_0xb71a('0x20')]],'as':_0xfc8df0['as'],'attributes':_0xfc8df0[_0xb71a('0x1c')],'include':_0xfc8df0[_0xb71a('0x1e')]?_[_0xb71a('0x1f')](_0xfc8df0[_0xb71a('0x1e')],function(_0x5ae0ed){return{'model':db[_0x5ae0ed[_0xb71a('0x20')]],'as':_0x5ae0ed['as'],'attributes':_0x5ae0ed[_0xb71a('0x1c')]};}):[]};}):[]};}):[]:[]})[_0xb71a('0x21')](function(_0x358954){logger[_0xb71a('0x14')](_0xb71a('0x17'),_0xf83e73);logger[_0xb71a('0x11')](_0xb71a('0x17'),_0xf83e73,JSON[_0xb71a('0x22')](_0x358954));_0x7cd1f9(_0x358954);})[_0xb71a('0x16')](function(_0xcb40fc){logger['error']('GetVoiceQueue',_0xcb40fc[_0xb71a('0x13')],_0xf83e73);_0x20bdfe(_0x349de1['error'](0x1f4,_0xcb40fc[_0xb71a('0x13')]));});});};exports[_0xb71a('0x23')]=function(_0x4d9e1a){var _0x147014=this;return new Promise(function(_0xa42f25,_0x1fe058){return db[_0xb71a('0x18')][_0xb71a('0x24')]({'raw':_0x4d9e1a[_0xb71a('0x1b')]?_0x4d9e1a['options'][_0xb71a('0x1a')]===undefined?!![]:![]:!![],'where':_0x4d9e1a[_0xb71a('0x1b')]?_0x4d9e1a[_0xb71a('0x1b')][_0xb71a('0x25')]||null:null,'attributes':_0x4d9e1a['options']?_0x4d9e1a[_0xb71a('0x1b')][_0xb71a('0x1c')]||null:null,'include':_0x4d9e1a[_0xb71a('0x1b')]?_0x4d9e1a[_0xb71a('0x1b')][_0xb71a('0x1e')]?_[_0xb71a('0x1f')](_0x4d9e1a[_0xb71a('0x1b')][_0xb71a('0x1e')],function(_0x10a203){return{'model':db[_0x10a203[_0xb71a('0x20')]],'as':_0x10a203['as'],'attributes':_0x10a203['attributes'],'include':_0x10a203['include']?_[_0xb71a('0x1f')](_0x10a203[_0xb71a('0x1e')],function(_0x2fd09e){return{'model':db[_0x2fd09e[_0xb71a('0x20')]],'as':_0x2fd09e['as'],'attributes':_0x2fd09e[_0xb71a('0x1c')],'include':_0x2fd09e[_0xb71a('0x1e')]?_[_0xb71a('0x1f')](_0x2fd09e['include'],function(_0x990c82){return{'model':db[_0x990c82['model']],'as':_0x990c82['as'],'attributes':_0x990c82[_0xb71a('0x1c')]};}):[]};}):[]};}):[]:[]})[_0xb71a('0x21')](function(_0x147002){logger[_0xb71a('0x14')]('ShowVoiceQueue',_0x4d9e1a);logger[_0xb71a('0x11')](_0xb71a('0x23'),_0x4d9e1a,JSON[_0xb71a('0x22')](_0x147002));_0xa42f25(_0x147002);})[_0xb71a('0x16')](function(_0x1ce0ed){logger[_0xb71a('0x12')](_0xb71a('0x23'),_0x1ce0ed[_0xb71a('0x13')],_0x4d9e1a);_0x1fe058(_0x147014[_0xb71a('0x12')](0x1f4,_0x1ce0ed['message']));});});};
\ No newline at end of file
index e7cdd91..689ae27 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x10ae=['remove','emit','register','voiceQueue:','./voiceQueue.events'];(function(_0x59dff4,_0x1efead){var _0x430ed7=function(_0xb89e7a){while(--_0xb89e7a){_0x59dff4['push'](_0x59dff4['shift']());}};_0x430ed7(++_0x1efead);}(_0x10ae,0x1ad));var _0xe10a=function(_0x3e2edd,_0x2d6918){_0x3e2edd=_0x3e2edd-0x0;var _0x1a1fcd=_0x10ae[_0x3e2edd];return _0x1a1fcd;};'use strict';var VoiceQueueEvents=require(_0xe10a('0x0'));var events=['save',_0xe10a('0x1'),'update'];function createListener(_0x4e6292,_0x22461a){return function(_0x110676){_0x22461a[_0xe10a('0x2')](_0x4e6292,_0x110676);};}function removeListener(_0x1139d6,_0x35fc75){return function(){VoiceQueueEvents['removeListener'](_0x1139d6,_0x35fc75);};}exports[_0xe10a('0x3')]=function(_0x1c8009){for(var _0x164843=0x0,_0x3a1903=events['length'];_0x164843<_0x3a1903;_0x164843++){var _0x3a44b2=events[_0x164843];var _0xd3092e=createListener(_0xe10a('0x4')+_0x3a44b2,_0x1c8009);VoiceQueueEvents['on'](_0x3a44b2,_0xd3092e);}};
\ No newline at end of file
+var _0x3b8d=['voiceQueue:','./voiceQueue.events','save','remove','update','emit'];(function(_0x1cc027,_0x48531e){var _0x22f100=function(_0x4ea1cc){while(--_0x4ea1cc){_0x1cc027['push'](_0x1cc027['shift']());}};_0x22f100(++_0x48531e);}(_0x3b8d,0x97));var _0xd3b8=function(_0x112245,_0xfcc15a){_0x112245=_0x112245-0x0;var _0x22a567=_0x3b8d[_0x112245];return _0x22a567;};'use strict';var VoiceQueueEvents=require(_0xd3b8('0x0'));var events=[_0xd3b8('0x1'),_0xd3b8('0x2'),_0xd3b8('0x3')];function createListener(_0x61bce2,_0x28dc81){return function(_0x1761ae){_0x28dc81[_0xd3b8('0x4')](_0x61bce2,_0x1761ae);};}function removeListener(_0x343494,_0x39783e){return function(){VoiceQueueEvents['removeListener'](_0x343494,_0x39783e);};}exports['register']=function(_0x56f793){for(var _0x2b879b=0x0,_0x1c4783=events['length'];_0x2b879b<_0x1c4783;_0x2b879b++){var _0x1b3ab1=events[_0x2b879b];var _0xc7f120=createListener(_0xd3b8('0x5')+_0x1b3ab1,_0x56f793);VoiceQueueEvents['on'](_0x1b3ab1,_0xc7f120);}};
\ No newline at end of file
index 6a6f7b8..5b7608f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4bd3=['index','isAuthenticated','describe','/index','getVoiceQueuesReport','/:id','post','create','put','update','destroy','exports','multer','path','express','../../config/environment','./voiceQueueReport.controller','get'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x4bd3,0x174));var _0x34bd=function(_0x28d7d3,_0x11db04){_0x28d7d3=_0x28d7d3-0x0;var _0x5e7f8d=_0x4bd3[_0x28d7d3];return _0x5e7f8d;};'use strict';var multer=require(_0x34bd('0x0'));var util=require('util');var path=require(_0x34bd('0x1'));var express=require(_0x34bd('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x34bd('0x3'));var controller=require(_0x34bd('0x4'));router[_0x34bd('0x5')]('/',auth['isAuthenticated'](),controller[_0x34bd('0x6')]);router[_0x34bd('0x5')]('/describe',auth[_0x34bd('0x7')](),controller[_0x34bd('0x8')]);router['get'](_0x34bd('0x9'),auth[_0x34bd('0x7')](),controller[_0x34bd('0xa')]);router[_0x34bd('0x5')](_0x34bd('0xb'),auth[_0x34bd('0x7')](),controller['show']);router[_0x34bd('0xc')]('/',auth[_0x34bd('0x7')](),controller[_0x34bd('0xd')]);router[_0x34bd('0xe')]('/:id',auth['isAuthenticated'](),controller[_0x34bd('0xf')]);router['delete']('/:id',auth[_0x34bd('0x7')](),controller[_0x34bd('0x10')]);module[_0x34bd('0x11')]=router;
\ No newline at end of file
+var _0xef0f=['index','get','/describe','describe','/index','getVoiceQueuesReport','/:id','show','post','create','put','update','delete','destroy','exports','multer','path','express','Router','../../components/interaction/service','../../config/environment','./voiceQueueReport.controller','isAuthenticated'];(function(_0x34814d,_0x40b388){var _0x50fd83=function(_0xa76d96){while(--_0xa76d96){_0x34814d['push'](_0x34814d['shift']());}};_0x50fd83(++_0x40b388);}(_0xef0f,0x168));var _0xfef0=function(_0x4fb2e6,_0x1e8f0c){_0x4fb2e6=_0x4fb2e6-0x0;var _0x17f55a=_0xef0f[_0x4fb2e6];return _0x17f55a;};'use strict';var multer=require(_0xfef0('0x0'));var util=require('util');var path=require(_0xfef0('0x1'));var express=require(_0xfef0('0x2'));var router=express[_0xfef0('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xfef0('0x4'));var config=require(_0xfef0('0x5'));var controller=require(_0xfef0('0x6'));router['get']('/',auth[_0xfef0('0x7')](),controller[_0xfef0('0x8')]);router[_0xfef0('0x9')](_0xfef0('0xa'),auth[_0xfef0('0x7')](),controller[_0xfef0('0xb')]);router['get'](_0xfef0('0xc'),auth['isAuthenticated'](),controller[_0xfef0('0xd')]);router[_0xfef0('0x9')](_0xfef0('0xe'),auth[_0xfef0('0x7')](),controller[_0xfef0('0xf')]);router[_0xfef0('0x10')]('/',auth[_0xfef0('0x7')](),controller[_0xfef0('0x11')]);router[_0xfef0('0x12')](_0xfef0('0xe'),auth[_0xfef0('0x7')](),controller[_0xfef0('0x13')]);router[_0xfef0('0x14')](_0xfef0('0xe'),auth['isAuthenticated'](),controller[_0xfef0('0x15')]);module[_0xfef0('0x16')]=router;
\ No newline at end of file
index 72eaba4..62ace68 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe416=['DATE','getDataValue','format','YYYY-MM-DD\x20HH:mm:ss','diff','seconds','setDataValue','queuecallerleaveAt','holdtime','INTEGER','BOOLEAN','COMPLETEDBYCALLER,\x20COMPLETEDBYAGENT,\x20FORWARDTRANFER,\x20BLINDTRANSFER,\x20ATTENDEDTRANSFER,\x20EXITWITHKEY,\x20TIMEOUT','sequelize','exports','STRING'];(function(_0x50007c,_0x1cbf11){var _0x5c1ec7=function(_0x52d038){while(--_0x52d038){_0x50007c['push'](_0x50007c['shift']());}};_0x5c1ec7(++_0x1cbf11);}(_0xe416,0x1a1));var _0x6e41=function(_0x54b70b,_0x288206){_0x54b70b=_0x54b70b-0x0;var _0x3c2fcf=_0xe416[_0x54b70b];return _0x3c2fcf;};'use strict';var Sequelize=require(_0x6e41('0x0'));var moment=require('moment');module[_0x6e41('0x1')]={'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x6e41('0x2')]},'calleridnum':{'type':Sequelize[_0x6e41('0x2')]},'calleridname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0x6e41('0x2')]},'queuecallerjoinAt':{'type':Sequelize[_0x6e41('0x3')]},'queuecallerleaveAt':{'type':Sequelize['DATE'],'set':function(_0x5a682f){var _0x39ee6c=moment(_0x5a682f);var _0x49294d=moment(this[_0x6e41('0x4')]('queuecallerjoinAt'))[_0x6e41('0x5')](_0x6e41('0x6'));var _0x44dc82=_0x39ee6c[_0x6e41('0x7')](_0x49294d,_0x6e41('0x8'));this[_0x6e41('0x9')](_0x6e41('0xa'),_0x5a682f);this[_0x6e41('0x9')](_0x6e41('0xb'),_0x44dc82||null);}},'position':{'type':Sequelize['INTEGER']},'count':{'type':Sequelize[_0x6e41('0xc')]},'queuecallerabandon':{'type':Sequelize[_0x6e41('0xd')],'defaultValue':![]},'queuecallerabandonAt':{'type':Sequelize['DATE']},'queuecallercomplete':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queuecallercompleteAt':{'type':Sequelize[_0x6e41('0x3')]},'queuecallerexit':{'type':Sequelize[_0x6e41('0xd')],'defaultValue':![]},'queuecallerexitAt':{'type':Sequelize[_0x6e41('0x3')]},'queuecallerexitreason':{'type':Sequelize[_0x6e41('0x2')],'comment':_0x6e41('0xe')},'originalposition':{'type':Sequelize[_0x6e41('0xc')]},'channel':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize[_0x6e41('0x2')]},'connectedlinename':{'type':Sequelize[_0x6e41('0x2')]},'accountcode':{'type':Sequelize[_0x6e41('0x2')]},'context':{'type':Sequelize[_0x6e41('0x2')]},'exten':{'type':Sequelize[_0x6e41('0x2')]},'priority':{'type':Sequelize[_0x6e41('0x2')]},'holdtime':{'type':Sequelize[_0x6e41('0xc')]},'mohtime':{'type':Sequelize[_0x6e41('0xc')],'defaultValue':0x0},'assigned':{'type':Sequelize[_0x6e41('0xd')],'defaultValue':![]},'lastAssignedTo':{'type':Sequelize[_0x6e41('0x2')]},'transfer':{'type':Sequelize[_0x6e41('0xd')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0x6e41('0x2')],'comment':'FORWARD,\x20BLIND,\x20ATTENDED'},'transferexten':{'type':Sequelize[_0x6e41('0x2')]},'transferuniqueid':{'type':Sequelize[_0x6e41('0x2')]},'disposition':{'type':Sequelize[_0x6e41('0x2')]}};
\ No newline at end of file
+var _0x6657=['sequelize','moment','exports','STRING','DATE','format','YYYY-MM-DD\x20HH:mm:ss','diff','seconds','setDataValue','queuecallerleaveAt','holdtime','INTEGER','BOOLEAN','COMPLETEDBYCALLER,\x20COMPLETEDBYAGENT,\x20FORWARDTRANFER,\x20BLINDTRANSFER,\x20ATTENDEDTRANSFER,\x20EXITWITHKEY,\x20TIMEOUT','FORWARD,\x20BLIND,\x20ATTENDED'];(function(_0xc2865b,_0x18a99d){var _0x2bacaf=function(_0x25172a){while(--_0x25172a){_0xc2865b['push'](_0xc2865b['shift']());}};_0x2bacaf(++_0x18a99d);}(_0x6657,0x1b0));var _0x7665=function(_0x16d10f,_0x2ba2d5){_0x16d10f=_0x16d10f-0x0;var _0x50c823=_0x6657[_0x16d10f];return _0x50c823;};'use strict';var Sequelize=require(_0x7665('0x0'));var moment=require(_0x7665('0x1'));module[_0x7665('0x2')]={'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x7665('0x3')]},'calleridnum':{'type':Sequelize[_0x7665('0x3')]},'calleridname':{'type':Sequelize[_0x7665('0x3')]},'queue':{'type':Sequelize[_0x7665('0x3')]},'queuecallerjoinAt':{'type':Sequelize[_0x7665('0x4')]},'queuecallerleaveAt':{'type':Sequelize[_0x7665('0x4')],'set':function(_0xb9368c){var _0x57a1d8=moment(_0xb9368c);var _0x59c593=moment(this['getDataValue']('queuecallerjoinAt'))[_0x7665('0x5')](_0x7665('0x6'));var _0x46cb4b=_0x57a1d8[_0x7665('0x7')](_0x59c593,_0x7665('0x8'));this[_0x7665('0x9')](_0x7665('0xa'),_0xb9368c);this['setDataValue'](_0x7665('0xb'),_0x46cb4b||null);}},'position':{'type':Sequelize[_0x7665('0xc')]},'count':{'type':Sequelize[_0x7665('0xc')]},'queuecallerabandon':{'type':Sequelize[_0x7665('0xd')],'defaultValue':![]},'queuecallerabandonAt':{'type':Sequelize[_0x7665('0x4')]},'queuecallercomplete':{'type':Sequelize[_0x7665('0xd')],'defaultValue':![]},'queuecallercompleteAt':{'type':Sequelize[_0x7665('0x4')]},'queuecallerexit':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queuecallerexitAt':{'type':Sequelize[_0x7665('0x4')]},'queuecallerexitreason':{'type':Sequelize[_0x7665('0x3')],'comment':_0x7665('0xe')},'originalposition':{'type':Sequelize[_0x7665('0xc')]},'channel':{'type':Sequelize[_0x7665('0x3')]},'connectedlinenum':{'type':Sequelize['STRING']},'connectedlinename':{'type':Sequelize[_0x7665('0x3')]},'accountcode':{'type':Sequelize[_0x7665('0x3')]},'context':{'type':Sequelize[_0x7665('0x3')]},'exten':{'type':Sequelize[_0x7665('0x3')]},'priority':{'type':Sequelize[_0x7665('0x3')]},'holdtime':{'type':Sequelize[_0x7665('0xc')]},'mohtime':{'type':Sequelize[_0x7665('0xc')],'defaultValue':0x0},'assigned':{'type':Sequelize[_0x7665('0xd')],'defaultValue':![]},'lastAssignedTo':{'type':Sequelize['STRING']},'transfer':{'type':Sequelize[_0x7665('0xd')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0x7665('0x3')],'comment':_0x7665('0xf')},'transferexten':{'type':Sequelize[_0x7665('0x3')]},'transferuniqueid':{'type':Sequelize[_0x7665('0x3')]},'disposition':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 09abe06..2405472 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b07=['count','offset','json','apply','reject','update','then','destroy','error','stack','name','send','index','VoiceQueueReport','model','keys','query','dateStart','dateEnd','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','filters','pick','add','day','merge','where','filter','map','options','includeAll','include','findAll','rows','catch','show','params','rawAttributes','body','find','describe','getVoiceQueuesReport','order','sort','fast-json-patch','mustache','util','to-csv','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','localhost','register','sendStatus','status','end'];(function(_0x12fc8d,_0x19ee33){var _0x3f9d04=function(_0x52e51c){while(--_0x52e51c){_0x12fc8d['push'](_0x12fc8d['shift']());}};_0x3f9d04(++_0x19ee33);}(_0x8b07,0x141));var _0x78b0=function(_0x2665f6,_0xb19935){_0x2665f6=_0x2665f6-0x0;var _0x23ac24=_0x8b07[_0x2665f6];return _0x23ac24;};'use strict';var jsonpatch=require(_0x78b0('0x0'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x78b0('0x1'));var util=require(_0x78b0('0x2'));var path=require('path');var sox=require('sox');var csv=require(_0x78b0('0x3'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x78b0('0x4'));var squel=require('squel');var crypto=require(_0x78b0('0x5'));var jsforce=require(_0x78b0('0x6'));var deskjs=require(_0x78b0('0x7'));var toCsv=require(_0x78b0('0x3'));var querystring=require(_0x78b0('0x8'));var Papa=require(_0x78b0('0x9'));var qs=require('../../components/parsers/qs');var logger=require(_0x78b0('0xa'))('api');var utils=require(_0x78b0('0xb'));var config=require(_0x78b0('0xc'));var db=require(_0x78b0('0xd'))['db'];var socket=require('socket.io-emitter')({'host':_0x78b0('0xe'),'port':0x18eb});require('./voiceQueueReport.socket')[_0x78b0('0xf')](socket);function respondWithStatusCode(_0x3deace,_0xf288a1){_0xf288a1=_0xf288a1||0xcc;return function(_0x2fbf41){if(_0x2fbf41){return _0x3deace[_0x78b0('0x10')](_0xf288a1);}return _0x3deace[_0x78b0('0x11')](_0xf288a1)[_0x78b0('0x12')]();};}function respondWithResult(_0x5a8525,_0x1069d5){_0x1069d5=_0x1069d5||0xc8;return function(_0x592ab9){if(_0x592ab9){return _0x5a8525[_0x78b0('0x11')](_0x1069d5)['json'](_0x592ab9);}};}function respondWithFilteredResult(_0x15b00c,_0x1cb4a2){return function(_0x23ce99){if(_0x23ce99){var _0x3bbbac=_0x23ce99[_0x78b0('0x13')],_0x1399cf=_0x1cb4a2[_0x78b0('0x14')],_0x5dfbb7=_0x1cb4a2[_0x78b0('0x14')]+_0x1cb4a2['limit'],_0x476d52;if(_0x5dfbb7>=_0x3bbbac){_0x5dfbb7=_0x3bbbac;_0x476d52=0xc8;}else{_0x476d52=0xce;}_0x15b00c[_0x78b0('0x11')](_0x476d52);return _0x15b00c['set']('Content-Range',_0x1399cf+'-'+_0x5dfbb7+'/'+_0x3bbbac)[_0x78b0('0x15')](_0x23ce99);}return null;};}function patchUpdates(_0x3ac94a){return function(_0x51eed0){try{jsonpatch[_0x78b0('0x16')](_0x51eed0,_0x3ac94a,!![]);}catch(_0x508ec5){return BPromise[_0x78b0('0x17')](_0x508ec5);}return _0x51eed0['save']();};}function saveUpdates(_0x59c2fc,_0x30bc27){return function(_0x54c906){if(_0x54c906){return _0x54c906[_0x78b0('0x18')](_0x59c2fc)[_0x78b0('0x19')](function(_0x29fd58){return _0x29fd58;});}return null;};}function removeEntity(_0x509d1b,_0x2deeb8){return function(_0x25284b){if(_0x25284b){return _0x25284b[_0x78b0('0x1a')]()['then'](function(){_0x509d1b['status'](0xcc)[_0x78b0('0x12')]();});}};}function handleEntityNotFound(_0x3c1868,_0x509359){return function(_0x95b012){if(!_0x95b012){_0x3c1868[_0x78b0('0x10')](0x194);}return _0x95b012;};}function handleError(_0x27b6db,_0x552224){_0x552224=_0x552224||0x1f4;return function(_0x36ba8a){logger[_0x78b0('0x1b')](_0x36ba8a[_0x78b0('0x1c')]);if(_0x36ba8a[_0x78b0('0x1d')]){delete _0x36ba8a['name'];}_0x27b6db['status'](_0x552224)[_0x78b0('0x1e')](_0x36ba8a);};}exports[_0x78b0('0x1f')]=function(_0x14c63b,_0x38d92e){var _0x480056={},_0x3a709b={},_0x20187c={'count':0x0,'rows':[]};var _0x20aabc=db[_0x78b0('0x20')]['rawAttributes'];_0x3a709b[_0x78b0('0x21')]=_[_0x78b0('0x22')](_0x20aabc);var _0x338a83={'dateStart':_0x14c63b[_0x78b0('0x23')][_0x78b0('0x24')],'dateEnd':_0x14c63b['query'][_0x78b0('0x25')]};delete _0x14c63b[_0x78b0('0x23')][_0x78b0('0x24')];delete _0x14c63b[_0x78b0('0x23')][_0x78b0('0x25')];_0x3a709b[_0x78b0('0x23')]=_[_0x78b0('0x22')](_0x14c63b[_0x78b0('0x23')]);_0x3a709b['filters']=_['intersection'](_0x3a709b[_0x78b0('0x21')],_0x3a709b['query']);_0x480056[_0x78b0('0x26')]=_[_0x78b0('0x27')](_0x3a709b['model'],qs[_0x78b0('0x28')](_0x14c63b[_0x78b0('0x23')][_0x78b0('0x28')]));_0x480056[_0x78b0('0x26')]=_0x480056[_0x78b0('0x26')][_0x78b0('0x29')]?_0x480056['attributes']:_0x3a709b[_0x78b0('0x21')];if(!_0x14c63b['query'][_0x78b0('0x2a')](_0x78b0('0x2b'))){_0x480056[_0x78b0('0x2c')]=qs[_0x78b0('0x2c')](_0x14c63b[_0x78b0('0x23')][_0x78b0('0x2c')]);_0x480056[_0x78b0('0x14')]=qs['offset'](_0x14c63b['query'][_0x78b0('0x14')]);}_0x480056['order']=qs['sort'](_0x14c63b[_0x78b0('0x23')]['sort']);_0x480056['where']=qs[_0x78b0('0x2d')](_[_0x78b0('0x2e')](_0x14c63b['query'],_0x3a709b['filters']));if(_0x338a83[_0x78b0('0x24')]){if(_0x338a83[_0x78b0('0x25')]){_0x338a83[_0x78b0('0x25')]=moment(_0x338a83['dateEnd'])[_0x78b0('0x2f')](0x1,_0x78b0('0x30'));}else{_0x338a83[_0x78b0('0x25')]=moment(_0x338a83['dateStart'])[_0x78b0('0x2f')](0x1,_0x78b0('0x30'));}_[_0x78b0('0x31')](_0x480056[_0x78b0('0x32')],{'createdAt':{'$gte':_0x338a83[_0x78b0('0x24')],'$lte':_0x338a83[_0x78b0('0x25')]}});}if(_0x14c63b[_0x78b0('0x23')][_0x78b0('0x33')]){_0x480056['where']=_[_0x78b0('0x31')](_0x480056[_0x78b0('0x32')],{'$or':_[_0x78b0('0x34')](_0x480056[_0x78b0('0x26')],function(_0x537753){var _0x223b2b={};_0x223b2b[_0x537753]={'$like':'%'+_0x14c63b[_0x78b0('0x23')]['filter']+'%'};return _0x223b2b;})});}_0x480056=_['merge']({},_0x480056,_0x14c63b[_0x78b0('0x35')]);var _0x202a87={'where':_0x480056[_0x78b0('0x32')]};return db['VoiceQueueReport'][_0x78b0('0x13')](_0x202a87)['then'](function(_0x2d50e7){_0x20187c[_0x78b0('0x13')]=_0x2d50e7;if(_0x14c63b['query'][_0x78b0('0x36')]){_0x480056[_0x78b0('0x37')]=[{'all':!![]}];}return db['VoiceQueueReport'][_0x78b0('0x38')](_0x480056);})['then'](function(_0x11d2cf){_0x20187c[_0x78b0('0x39')]=_0x11d2cf;return _0x20187c;})[_0x78b0('0x19')](respondWithFilteredResult(_0x38d92e,_0x480056))[_0x78b0('0x3a')](handleError(_0x38d92e,null));};exports[_0x78b0('0x3b')]=function(_0x2d2944,_0x4ee5ff){var _0x433ecb={'raw':![],'where':{'id':_0x2d2944[_0x78b0('0x3c')]['id']}},_0x1acb73={};_0x1acb73[_0x78b0('0x21')]=_[_0x78b0('0x22')](db[_0x78b0('0x20')][_0x78b0('0x3d')]);_0x1acb73[_0x78b0('0x23')]=_[_0x78b0('0x22')](_0x2d2944[_0x78b0('0x23')]);_0x1acb73['filters']=_[_0x78b0('0x27')](_0x1acb73[_0x78b0('0x21')],_0x1acb73[_0x78b0('0x23')]);_0x433ecb['attributes']=_[_0x78b0('0x27')](_0x1acb73[_0x78b0('0x21')],qs[_0x78b0('0x28')](_0x2d2944['query']['fields']));_0x433ecb[_0x78b0('0x26')]=_0x433ecb[_0x78b0('0x26')][_0x78b0('0x29')]?_0x433ecb[_0x78b0('0x26')]:_0x1acb73['model'];if(_0x2d2944[_0x78b0('0x23')][_0x78b0('0x36')]){_0x433ecb[_0x78b0('0x37')]=[{'all':!![]}];}_0x433ecb=_['merge']({},_0x433ecb,_0x2d2944['options']);return db[_0x78b0('0x20')]['find'](_0x433ecb)[_0x78b0('0x19')](handleEntityNotFound(_0x4ee5ff,null))[_0x78b0('0x19')](respondWithResult(_0x4ee5ff,null))['catch'](handleError(_0x4ee5ff,null));};exports['create']=function(_0x456a07,_0x1c9cbf){return db['VoiceQueueReport']['create'](_0x456a07[_0x78b0('0x3e')],{})['then'](respondWithResult(_0x1c9cbf,0xc9))[_0x78b0('0x3a')](handleError(_0x1c9cbf,null));};exports[_0x78b0('0x18')]=function(_0x157f3d,_0x4885b7){if(_0x157f3d[_0x78b0('0x3e')]['id']){delete _0x157f3d['body']['id'];}return db['VoiceQueueReport'][_0x78b0('0x3f')]({'where':{'id':_0x157f3d[_0x78b0('0x3c')]['id']}})[_0x78b0('0x19')](handleEntityNotFound(_0x4885b7,null))[_0x78b0('0x19')](saveUpdates(_0x157f3d[_0x78b0('0x3e')],null))[_0x78b0('0x19')](respondWithResult(_0x4885b7,null))[_0x78b0('0x3a')](handleError(_0x4885b7,null));};exports[_0x78b0('0x1a')]=function(_0xb22eed,_0x42e881){return db['VoiceQueueReport'][_0x78b0('0x3f')]({'where':{'id':_0xb22eed[_0x78b0('0x3c')]['id']}})[_0x78b0('0x19')](handleEntityNotFound(_0x42e881,null))['then'](removeEntity(_0x42e881,null))[_0x78b0('0x3a')](handleError(_0x42e881,null));};exports[_0x78b0('0x40')]=function(_0xea8b1d,_0xba1e0f){return db['VoiceQueueReport'][_0x78b0('0x40')]()[_0x78b0('0x19')](respondWithResult(_0xba1e0f,null))['catch'](handleError(_0xba1e0f,null));};exports[_0x78b0('0x41')]=function(_0x23bac0,_0x5033fa){var _0xeb0ac2={},_0x5c5fe4={},_0x713929={'count':0x0,'rows':[]};_0x5c5fe4[_0x78b0('0x21')]=_['keys'](db['VoiceQueueReport'][_0x78b0('0x3d')]);var _0x2e0227={'dateStart':_0x23bac0[_0x78b0('0x23')][_0x78b0('0x24')],'dateEnd':_0x23bac0[_0x78b0('0x23')][_0x78b0('0x25')]};delete _0x23bac0[_0x78b0('0x23')][_0x78b0('0x24')];delete _0x23bac0[_0x78b0('0x23')][_0x78b0('0x25')];_0x5c5fe4[_0x78b0('0x23')]=_[_0x78b0('0x22')](_0x23bac0[_0x78b0('0x23')]);_0x5c5fe4[_0x78b0('0x2d')]=_['intersection'](_0x5c5fe4[_0x78b0('0x21')],_0x5c5fe4[_0x78b0('0x23')]);_0xeb0ac2[_0x78b0('0x26')]=_[_0x78b0('0x27')](_0x5c5fe4['model'],qs[_0x78b0('0x28')](_0x23bac0[_0x78b0('0x23')][_0x78b0('0x28')]));_0xeb0ac2[_0x78b0('0x26')]=_0xeb0ac2['attributes'][_0x78b0('0x29')]?_0xeb0ac2['attributes']:_0x5c5fe4[_0x78b0('0x21')];if(!_0x23bac0['query'][_0x78b0('0x2a')](_0x78b0('0x2b'))){_0xeb0ac2[_0x78b0('0x2c')]=qs['limit'](_0x23bac0[_0x78b0('0x23')][_0x78b0('0x2c')]);_0xeb0ac2[_0x78b0('0x14')]=qs[_0x78b0('0x14')](_0x23bac0[_0x78b0('0x23')][_0x78b0('0x14')]);}_0xeb0ac2[_0x78b0('0x42')]=qs[_0x78b0('0x43')](_0x23bac0[_0x78b0('0x23')][_0x78b0('0x43')]);_0xeb0ac2['where']=qs[_0x78b0('0x2d')](_[_0x78b0('0x2e')](_0x23bac0[_0x78b0('0x23')],_0x5c5fe4[_0x78b0('0x2d')]));if(_0x2e0227['dateStart']){if(_0x2e0227['dateEnd']){_0x2e0227[_0x78b0('0x25')]=moment(_0x2e0227['dateEnd'])[_0x78b0('0x2f')](0x1,_0x78b0('0x30'));}else{_0x2e0227[_0x78b0('0x25')]=moment(_0x2e0227[_0x78b0('0x24')])['add'](0x1,_0x78b0('0x30'));}_[_0x78b0('0x31')](_0xeb0ac2[_0x78b0('0x32')],{'createdAt':{'$gte':_0x2e0227[_0x78b0('0x24')],'$lte':_0x2e0227[_0x78b0('0x25')]}});}if(_0x23bac0[_0x78b0('0x23')][_0x78b0('0x33')]){_0xeb0ac2['where']=_['merge'](_0xeb0ac2[_0x78b0('0x32')],{'$or':_[_0x78b0('0x34')](_0xeb0ac2[_0x78b0('0x26')],function(_0x28af1c){var _0xf867a2={};_0xf867a2[_0x28af1c]={'$like':'%'+_0x23bac0['query'][_0x78b0('0x33')]+'%'};return _0xf867a2;})});}_0xeb0ac2=_[_0x78b0('0x31')]({},_0xeb0ac2,_0x23bac0['options']);var _0x495326={'where':_0xeb0ac2[_0x78b0('0x32')]};return db[_0x78b0('0x20')][_0x78b0('0x13')](_0x495326)[_0x78b0('0x19')](function(_0x1d8c1b){_0x713929[_0x78b0('0x13')]=_0x1d8c1b;if(_0x23bac0[_0x78b0('0x23')]['includeAll']){_0xeb0ac2[_0x78b0('0x37')]=[{'all':!![]}];}return db[_0x78b0('0x20')][_0x78b0('0x38')](_0xeb0ac2);})['then'](function(_0x343510){_0x713929[_0x78b0('0x39')]=_0x343510;return _0x713929;})[_0x78b0('0x19')](respondWithFilteredResult(_0x5033fa,_0xeb0ac2,'getVoiceQueuesReport'))[_0x78b0('0x3a')](handleError(_0x5033fa,null,_0x78b0('0x41')));};
\ No newline at end of file
+var _0x4aab=['localhost','register','sendStatus','end','status','json','count','offset','set','Content-Range','reject','save','destroy','then','error','stack','name','send','index','VoiceQueueReport','model','keys','dateStart','dateEnd','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','filters','pick','add','day','merge','filter','map','options','includeAll','include','findAll','rows','catch','show','params','rawAttributes','create','body','find','describe','getVoiceQueuesReport','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','squel','crypto','desk.js','papaparse','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter'];(function(_0x217730,_0x16e78e){var _0x2c8823=function(_0x10fe35){while(--_0x10fe35){_0x217730['push'](_0x217730['shift']());}};_0x2c8823(++_0x16e78e);}(_0x4aab,0x1a5));var _0xb4aa=function(_0x4054a4,_0x1f5fc8){_0x4054a4=_0x4054a4-0x0;var _0x42fc0a=_0x4aab[_0x4054a4];return _0x42fc0a;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xb4aa('0x0'));var moment=require(_0xb4aa('0x1'));var BPromise=require(_0xb4aa('0x2'));var Mustache=require('mustache');var util=require(_0xb4aa('0x3'));var path=require(_0xb4aa('0x4'));var sox=require(_0xb4aa('0x5'));var csv=require(_0xb4aa('0x6'));var ejs=require(_0xb4aa('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0xb4aa('0x8'));var crypto=require(_0xb4aa('0x9'));var jsforce=require('jsforce');var deskjs=require(_0xb4aa('0xa'));var toCsv=require(_0xb4aa('0x6'));var querystring=require('querystring');var Papa=require(_0xb4aa('0xb'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0xb4aa('0xc'));var utils=require(_0xb4aa('0xd'));var config=require(_0xb4aa('0xe'));var db=require(_0xb4aa('0xf'))['db'];var socket=require(_0xb4aa('0x10'))({'host':_0xb4aa('0x11'),'port':0x18eb});require('./voiceQueueReport.socket')[_0xb4aa('0x12')](socket);function respondWithStatusCode(_0x4fd9ec,_0x1c689c){_0x1c689c=_0x1c689c||0xcc;return function(_0x234864){if(_0x234864){return _0x4fd9ec[_0xb4aa('0x13')](_0x1c689c);}return _0x4fd9ec['status'](_0x1c689c)[_0xb4aa('0x14')]();};}function respondWithResult(_0x1a073b,_0x5a0e38){_0x5a0e38=_0x5a0e38||0xc8;return function(_0x25aae9){if(_0x25aae9){return _0x1a073b[_0xb4aa('0x15')](_0x5a0e38)[_0xb4aa('0x16')](_0x25aae9);}};}function respondWithFilteredResult(_0x47381f,_0x3b4bec){return function(_0x4e38b3){if(_0x4e38b3){var _0x5a7ab2=_0x4e38b3[_0xb4aa('0x17')],_0x32987b=_0x3b4bec[_0xb4aa('0x18')],_0x34d1d0=_0x3b4bec[_0xb4aa('0x18')]+_0x3b4bec['limit'],_0x3583c5;if(_0x34d1d0>=_0x5a7ab2){_0x34d1d0=_0x5a7ab2;_0x3583c5=0xc8;}else{_0x3583c5=0xce;}_0x47381f[_0xb4aa('0x15')](_0x3583c5);return _0x47381f[_0xb4aa('0x19')](_0xb4aa('0x1a'),_0x32987b+'-'+_0x34d1d0+'/'+_0x5a7ab2)[_0xb4aa('0x16')](_0x4e38b3);}return null;};}function patchUpdates(_0x54cf99){return function(_0x5e2b4e){try{jsonpatch['apply'](_0x5e2b4e,_0x54cf99,!![]);}catch(_0x4f1a34){return BPromise[_0xb4aa('0x1b')](_0x4f1a34);}return _0x5e2b4e[_0xb4aa('0x1c')]();};}function saveUpdates(_0x27b50e,_0x4d2ce8){return function(_0x5855b4){if(_0x5855b4){return _0x5855b4['update'](_0x27b50e)['then'](function(_0x8fd9bc){return _0x8fd9bc;});}return null;};}function removeEntity(_0x33eb7e,_0x46b942){return function(_0x5877a7){if(_0x5877a7){return _0x5877a7[_0xb4aa('0x1d')]()[_0xb4aa('0x1e')](function(){_0x33eb7e[_0xb4aa('0x15')](0xcc)[_0xb4aa('0x14')]();});}};}function handleEntityNotFound(_0x493743,_0x162799){return function(_0x311401){if(!_0x311401){_0x493743[_0xb4aa('0x13')](0x194);}return _0x311401;};}function handleError(_0x23e0cc,_0x118fd1){_0x118fd1=_0x118fd1||0x1f4;return function(_0x35fbdf){logger[_0xb4aa('0x1f')](_0x35fbdf[_0xb4aa('0x20')]);if(_0x35fbdf[_0xb4aa('0x21')]){delete _0x35fbdf[_0xb4aa('0x21')];}_0x23e0cc[_0xb4aa('0x15')](_0x118fd1)[_0xb4aa('0x22')](_0x35fbdf);};}exports[_0xb4aa('0x23')]=function(_0x1d9d49,_0x47947e){var _0x5a54f2={},_0x5ebb90={},_0x59cd6a={'count':0x0,'rows':[]};var _0x1b31af=db[_0xb4aa('0x24')]['rawAttributes'];_0x5ebb90[_0xb4aa('0x25')]=_[_0xb4aa('0x26')](_0x1b31af);var _0x44ed0c={'dateStart':_0x1d9d49['query'][_0xb4aa('0x27')],'dateEnd':_0x1d9d49['query'][_0xb4aa('0x28')]};delete _0x1d9d49['query'][_0xb4aa('0x27')];delete _0x1d9d49['query']['dateEnd'];_0x5ebb90[_0xb4aa('0x29')]=_[_0xb4aa('0x26')](_0x1d9d49['query']);_0x5ebb90['filters']=_[_0xb4aa('0x2a')](_0x5ebb90[_0xb4aa('0x25')],_0x5ebb90['query']);_0x5a54f2[_0xb4aa('0x2b')]=_[_0xb4aa('0x2a')](_0x5ebb90[_0xb4aa('0x25')],qs[_0xb4aa('0x2c')](_0x1d9d49[_0xb4aa('0x29')][_0xb4aa('0x2c')]));_0x5a54f2[_0xb4aa('0x2b')]=_0x5a54f2[_0xb4aa('0x2b')][_0xb4aa('0x2d')]?_0x5a54f2[_0xb4aa('0x2b')]:_0x5ebb90[_0xb4aa('0x25')];if(!_0x1d9d49['query'][_0xb4aa('0x2e')](_0xb4aa('0x2f'))){_0x5a54f2[_0xb4aa('0x30')]=qs[_0xb4aa('0x30')](_0x1d9d49[_0xb4aa('0x29')]['limit']);_0x5a54f2[_0xb4aa('0x18')]=qs['offset'](_0x1d9d49[_0xb4aa('0x29')]['offset']);}_0x5a54f2[_0xb4aa('0x31')]=qs[_0xb4aa('0x32')](_0x1d9d49['query'][_0xb4aa('0x32')]);_0x5a54f2[_0xb4aa('0x33')]=qs[_0xb4aa('0x34')](_[_0xb4aa('0x35')](_0x1d9d49[_0xb4aa('0x29')],_0x5ebb90[_0xb4aa('0x34')]));if(_0x44ed0c[_0xb4aa('0x27')]){if(_0x44ed0c['dateEnd']){_0x44ed0c[_0xb4aa('0x28')]=moment(_0x44ed0c[_0xb4aa('0x28')])[_0xb4aa('0x36')](0x1,_0xb4aa('0x37'));}else{_0x44ed0c['dateEnd']=moment(_0x44ed0c[_0xb4aa('0x27')])['add'](0x1,_0xb4aa('0x37'));}_[_0xb4aa('0x38')](_0x5a54f2[_0xb4aa('0x33')],{'createdAt':{'$gte':_0x44ed0c['dateStart'],'$lte':_0x44ed0c[_0xb4aa('0x28')]}});}if(_0x1d9d49[_0xb4aa('0x29')][_0xb4aa('0x39')]){_0x5a54f2['where']=_[_0xb4aa('0x38')](_0x5a54f2[_0xb4aa('0x33')],{'$or':_[_0xb4aa('0x3a')](_0x5a54f2[_0xb4aa('0x2b')],function(_0x22ab3a){var _0x253a90={};_0x253a90[_0x22ab3a]={'$like':'%'+_0x1d9d49[_0xb4aa('0x29')][_0xb4aa('0x39')]+'%'};return _0x253a90;})});}_0x5a54f2=_[_0xb4aa('0x38')]({},_0x5a54f2,_0x1d9d49[_0xb4aa('0x3b')]);var _0x4e66a3={'where':_0x5a54f2[_0xb4aa('0x33')]};return db[_0xb4aa('0x24')][_0xb4aa('0x17')](_0x4e66a3)['then'](function(_0x445e50){_0x59cd6a['count']=_0x445e50;if(_0x1d9d49[_0xb4aa('0x29')][_0xb4aa('0x3c')]){_0x5a54f2[_0xb4aa('0x3d')]=[{'all':!![]}];}return db[_0xb4aa('0x24')][_0xb4aa('0x3e')](_0x5a54f2);})[_0xb4aa('0x1e')](function(_0x97c103){_0x59cd6a[_0xb4aa('0x3f')]=_0x97c103;return _0x59cd6a;})['then'](respondWithFilteredResult(_0x47947e,_0x5a54f2))[_0xb4aa('0x40')](handleError(_0x47947e,null));};exports[_0xb4aa('0x41')]=function(_0xd4cb18,_0x39313f){var _0x48d095={'raw':![],'where':{'id':_0xd4cb18[_0xb4aa('0x42')]['id']}},_0x48c186={};_0x48c186[_0xb4aa('0x25')]=_[_0xb4aa('0x26')](db[_0xb4aa('0x24')][_0xb4aa('0x43')]);_0x48c186[_0xb4aa('0x29')]=_['keys'](_0xd4cb18['query']);_0x48c186[_0xb4aa('0x34')]=_[_0xb4aa('0x2a')](_0x48c186[_0xb4aa('0x25')],_0x48c186[_0xb4aa('0x29')]);_0x48d095[_0xb4aa('0x2b')]=_[_0xb4aa('0x2a')](_0x48c186['model'],qs[_0xb4aa('0x2c')](_0xd4cb18[_0xb4aa('0x29')][_0xb4aa('0x2c')]));_0x48d095[_0xb4aa('0x2b')]=_0x48d095[_0xb4aa('0x2b')][_0xb4aa('0x2d')]?_0x48d095[_0xb4aa('0x2b')]:_0x48c186['model'];if(_0xd4cb18[_0xb4aa('0x29')]['includeAll']){_0x48d095[_0xb4aa('0x3d')]=[{'all':!![]}];}_0x48d095=_['merge']({},_0x48d095,_0xd4cb18[_0xb4aa('0x3b')]);return db[_0xb4aa('0x24')]['find'](_0x48d095)[_0xb4aa('0x1e')](handleEntityNotFound(_0x39313f,null))[_0xb4aa('0x1e')](respondWithResult(_0x39313f,null))['catch'](handleError(_0x39313f,null));};exports[_0xb4aa('0x44')]=function(_0x4ef353,_0x2e3387){return db[_0xb4aa('0x24')][_0xb4aa('0x44')](_0x4ef353['body'],{})['then'](respondWithResult(_0x2e3387,0xc9))[_0xb4aa('0x40')](handleError(_0x2e3387,null));};exports['update']=function(_0x3ca2ef,_0x2287b9){if(_0x3ca2ef[_0xb4aa('0x45')]['id']){delete _0x3ca2ef[_0xb4aa('0x45')]['id'];}return db[_0xb4aa('0x24')][_0xb4aa('0x46')]({'where':{'id':_0x3ca2ef[_0xb4aa('0x42')]['id']}})['then'](handleEntityNotFound(_0x2287b9,null))['then'](saveUpdates(_0x3ca2ef[_0xb4aa('0x45')],null))['then'](respondWithResult(_0x2287b9,null))[_0xb4aa('0x40')](handleError(_0x2287b9,null));};exports['destroy']=function(_0x5055b8,_0x4aba4b){return db[_0xb4aa('0x24')][_0xb4aa('0x46')]({'where':{'id':_0x5055b8[_0xb4aa('0x42')]['id']}})['then'](handleEntityNotFound(_0x4aba4b,null))['then'](removeEntity(_0x4aba4b,null))['catch'](handleError(_0x4aba4b,null));};exports[_0xb4aa('0x47')]=function(_0x31c03e,_0x8f8aa2){return db[_0xb4aa('0x24')]['describe']()[_0xb4aa('0x1e')](respondWithResult(_0x8f8aa2,null))[_0xb4aa('0x40')](handleError(_0x8f8aa2,null));};exports[_0xb4aa('0x48')]=function(_0x339da6,_0x57218d){var _0x3a73c3={},_0x44b743={},_0x2293a0={'count':0x0,'rows':[]};_0x44b743[_0xb4aa('0x25')]=_[_0xb4aa('0x26')](db[_0xb4aa('0x24')][_0xb4aa('0x43')]);var _0x3c8e81={'dateStart':_0x339da6[_0xb4aa('0x29')][_0xb4aa('0x27')],'dateEnd':_0x339da6['query'][_0xb4aa('0x28')]};delete _0x339da6[_0xb4aa('0x29')]['dateStart'];delete _0x339da6[_0xb4aa('0x29')][_0xb4aa('0x28')];_0x44b743[_0xb4aa('0x29')]=_[_0xb4aa('0x26')](_0x339da6['query']);_0x44b743['filters']=_['intersection'](_0x44b743[_0xb4aa('0x25')],_0x44b743['query']);_0x3a73c3['attributes']=_['intersection'](_0x44b743[_0xb4aa('0x25')],qs[_0xb4aa('0x2c')](_0x339da6[_0xb4aa('0x29')][_0xb4aa('0x2c')]));_0x3a73c3[_0xb4aa('0x2b')]=_0x3a73c3[_0xb4aa('0x2b')][_0xb4aa('0x2d')]?_0x3a73c3[_0xb4aa('0x2b')]:_0x44b743['model'];if(!_0x339da6[_0xb4aa('0x29')][_0xb4aa('0x2e')](_0xb4aa('0x2f'))){_0x3a73c3[_0xb4aa('0x30')]=qs[_0xb4aa('0x30')](_0x339da6[_0xb4aa('0x29')]['limit']);_0x3a73c3['offset']=qs[_0xb4aa('0x18')](_0x339da6[_0xb4aa('0x29')][_0xb4aa('0x18')]);}_0x3a73c3[_0xb4aa('0x31')]=qs[_0xb4aa('0x32')](_0x339da6[_0xb4aa('0x29')]['sort']);_0x3a73c3[_0xb4aa('0x33')]=qs[_0xb4aa('0x34')](_['pick'](_0x339da6[_0xb4aa('0x29')],_0x44b743[_0xb4aa('0x34')]));if(_0x3c8e81[_0xb4aa('0x27')]){if(_0x3c8e81['dateEnd']){_0x3c8e81['dateEnd']=moment(_0x3c8e81[_0xb4aa('0x28')])[_0xb4aa('0x36')](0x1,_0xb4aa('0x37'));}else{_0x3c8e81[_0xb4aa('0x28')]=moment(_0x3c8e81[_0xb4aa('0x27')])['add'](0x1,_0xb4aa('0x37'));}_[_0xb4aa('0x38')](_0x3a73c3[_0xb4aa('0x33')],{'createdAt':{'$gte':_0x3c8e81[_0xb4aa('0x27')],'$lte':_0x3c8e81['dateEnd']}});}if(_0x339da6[_0xb4aa('0x29')][_0xb4aa('0x39')]){_0x3a73c3['where']=_[_0xb4aa('0x38')](_0x3a73c3[_0xb4aa('0x33')],{'$or':_[_0xb4aa('0x3a')](_0x3a73c3[_0xb4aa('0x2b')],function(_0x10c859){var _0x3cb061={};_0x3cb061[_0x10c859]={'$like':'%'+_0x339da6[_0xb4aa('0x29')]['filter']+'%'};return _0x3cb061;})});}_0x3a73c3=_['merge']({},_0x3a73c3,_0x339da6[_0xb4aa('0x3b')]);var _0x2efdc3={'where':_0x3a73c3['where']};return db['VoiceQueueReport']['count'](_0x2efdc3)['then'](function(_0x21a15d){_0x2293a0[_0xb4aa('0x17')]=_0x21a15d;if(_0x339da6['query']['includeAll']){_0x3a73c3['include']=[{'all':!![]}];}return db['VoiceQueueReport']['findAll'](_0x3a73c3);})[_0xb4aa('0x1e')](function(_0x25da20){_0x2293a0[_0xb4aa('0x3f')]=_0x25da20;return _0x2293a0;})[_0xb4aa('0x1e')](respondWithFilteredResult(_0x57218d,_0x3a73c3,_0xb4aa('0x48')))[_0xb4aa('0x40')](handleError(_0x57218d,null,_0xb4aa('0x48')));};
\ No newline at end of file
index b78a670..1209eb9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd83b=['setMaxListeners','save','update','remove','emit','hasOwnProperty','hook','events','../../mysqldb','VoiceQueueReport'];(function(_0x2b3235,_0x3a9420){var _0x1abd28=function(_0x58ab1e){while(--_0x58ab1e){_0x2b3235['push'](_0x2b3235['shift']());}};_0x1abd28(++_0x3a9420);}(_0xd83b,0x1d3));var _0xbd83=function(_0x74b300,_0x1f13c2){_0x74b300=_0x74b300-0x0;var _0x5ae816=_0xd83b[_0x74b300];return _0x5ae816;};'use strict';var EventEmitter=require(_0xbd83('0x0'));var VoiceQueueReport=require(_0xbd83('0x1'))['db'][_0xbd83('0x2')];var VoiceQueueReportEvents=new EventEmitter();VoiceQueueReportEvents[_0xbd83('0x3')](0x0);var events={'afterCreate':_0xbd83('0x4'),'afterUpdate':_0xbd83('0x5'),'afterDestroy':_0xbd83('0x6')};function emitEvent(_0x178b7c){return function(_0x45a65a,_0x8fdebc,_0x4e8ddb){VoiceQueueReportEvents['emit'](_0x178b7c+':'+_0x45a65a['id'],_0x45a65a);VoiceQueueReportEvents[_0xbd83('0x7')](_0x178b7c,_0x45a65a);_0x4e8ddb(null);};}for(var e in events){if(events[_0xbd83('0x8')](e)){var event=events[e];VoiceQueueReport[_0xbd83('0x9')](e,emitEvent(event));}}module['exports']=VoiceQueueReportEvents;
\ No newline at end of file
+var _0xbfd2=['setMaxListeners','update','remove','emit','hasOwnProperty','VoiceQueueReport'];(function(_0x49bf6c,_0x349215){var _0x31fdbb=function(_0x301852){while(--_0x301852){_0x49bf6c['push'](_0x49bf6c['shift']());}};_0x31fdbb(++_0x349215);}(_0xbfd2,0x14f));var _0x2bfd=function(_0x2d4fbe,_0x8c9cd4){_0x2d4fbe=_0x2d4fbe-0x0;var _0x5c95f2=_0xbfd2[_0x2d4fbe];return _0x5c95f2;};'use strict';var EventEmitter=require('events');var VoiceQueueReport=require('../../mysqldb')['db'][_0x2bfd('0x0')];var VoiceQueueReportEvents=new EventEmitter();VoiceQueueReportEvents[_0x2bfd('0x1')](0x0);var events={'afterCreate':'save','afterUpdate':_0x2bfd('0x2'),'afterDestroy':_0x2bfd('0x3')};function emitEvent(_0x38e297){return function(_0x47dcc5,_0x3e4740,_0x32c933){VoiceQueueReportEvents[_0x2bfd('0x4')](_0x38e297+':'+_0x47dcc5['id'],_0x47dcc5);VoiceQueueReportEvents[_0x2bfd('0x4')](_0x38e297,_0x47dcc5);_0x32c933(null);};}for(var e in events){if(events[_0x2bfd('0x5')](e)){var event=events[e];VoiceQueueReport['hook'](e,emitEvent(event));}}module['exports']=VoiceQueueReportEvents;
\ No newline at end of file
index fa96afb..4a98a89 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa2f6=['report_queue','lodash','util','../../config/logger','api','bluebird','request-promise','./voiceQueueReport.attributes','VoiceQueueReport'];(function(_0x1eb7ca,_0x332ff7){var _0x233ca0=function(_0x115d6b){while(--_0x115d6b){_0x1eb7ca['push'](_0x1eb7ca['shift']());}};_0x233ca0(++_0x332ff7);}(_0xa2f6,0x14e));var _0x6a2f=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xa2f6[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x6a2f('0x0'));var util=require(_0x6a2f('0x1'));var logger=require(_0x6a2f('0x2'))(_0x6a2f('0x3'));var moment=require('moment');var BPromise=require(_0x6a2f('0x4'));var rp=require(_0x6a2f('0x5'));var attributes=require(_0x6a2f('0x6'));module['exports']=function(_0x3f0f59,_0x170577){return _0x3f0f59['define'](_0x6a2f('0x7'),attributes,{'tableName':_0x6a2f('0x8'),'paranoid':![],'indexes':[{'fields':['uniqueid']},{'fields':['calleridnum']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x7749=['./voiceQueueReport.attributes','exports','define','VoiceQueueReport','report_queue','uniqueid','calleridnum','lodash','util','api'];(function(_0x5ddaac,_0x2697a8){var _0x2a9c58=function(_0x851032){while(--_0x851032){_0x5ddaac['push'](_0x5ddaac['shift']());}};_0x2a9c58(++_0x2697a8);}(_0x7749,0x183));var _0x9774=function(_0x3d1396,_0x3923a0){_0x3d1396=_0x3d1396-0x0;var _0x59143b=_0x7749[_0x3d1396];return _0x59143b;};'use strict';var _=require(_0x9774('0x0'));var util=require(_0x9774('0x1'));var logger=require('../../config/logger')(_0x9774('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x9774('0x3'));module[_0x9774('0x4')]=function(_0x25532e,_0x20e4c4){return _0x25532e[_0x9774('0x5')](_0x9774('0x6'),attributes,{'tableName':_0x9774('0x7'),'paranoid':![],'indexes':[{'fields':[_0x9774('0x8')]},{'fields':[_0x9774('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index bf9d35f..418994a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfa94=['catch','CreateVoiceQueueReport','body','raw','UpdateVoiceQueueReport','lodash','moment','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','socket.io-emitter','./voiceQueueReport.socket','register','request','then','info','request\x20sent','debug','stringify','error','code','VoiceQueueReport,\x20%s,\x20%s','message','result','GetVoiceQueueReport','VoiceQueueReport','findAll','options','where','attributes','limit','include','map','model'];(function(_0x32b542,_0x4512fa){var _0x554d54=function(_0x35cdfc){while(--_0x35cdfc){_0x32b542['push'](_0x32b542['shift']());}};_0x554d54(++_0x4512fa);}(_0xfa94,0xef));var _0x4fa9=function(_0x576d8a,_0x2d7bde){_0x576d8a=_0x576d8a-0x0;var _0x3dc3ef=_0xfa94[_0x576d8a];return _0x3dc3ef;};'use strict';var _=require(_0x4fa9('0x0'));var util=require('util');var moment=require(_0x4fa9('0x1'));var BPromise=require('bluebird');var rs=require(_0x4fa9('0x2'));var fs=require('fs');var db=require(_0x4fa9('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x4fa9('0x4'))(_0x4fa9('0x5'));var config=require(_0x4fa9('0x6'));var jayson=require(_0x4fa9('0x7'));var client=jayson[_0x4fa9('0x8')][_0x4fa9('0x9')]({'port':0x232a});var socket=require(_0x4fa9('0xa'))({'host':'localhost','port':0x18eb});require(_0x4fa9('0xb'))[_0x4fa9('0xc')](socket);function respondWithRpcPromise(_0x48fe52,_0x500b64,_0x2bcd56){return new BPromise(function(_0x4d4309,_0x2049ea){return client[_0x4fa9('0xd')](_0x48fe52,_0x2bcd56)[_0x4fa9('0xe')](function(_0x5d66e0){logger[_0x4fa9('0xf')]('VoiceQueueReport,\x20%s,\x20%s',_0x500b64,_0x4fa9('0x10'));logger[_0x4fa9('0x11')]('VoiceQueueReport,\x20%s,\x20%s,\x20%s',_0x500b64,_0x4fa9('0x10'),JSON[_0x4fa9('0x12')](_0x5d66e0));if(_0x5d66e0[_0x4fa9('0x13')]){if(_0x5d66e0['error'][_0x4fa9('0x14')]===0x1f4){logger['error'](_0x4fa9('0x15'),_0x500b64,_0x5d66e0[_0x4fa9('0x13')]['message']);return _0x2049ea(_0x5d66e0[_0x4fa9('0x13')][_0x4fa9('0x16')]);}logger[_0x4fa9('0x13')](_0x4fa9('0x15'),_0x500b64,_0x5d66e0[_0x4fa9('0x13')][_0x4fa9('0x16')]);return _0x4d4309(_0x5d66e0[_0x4fa9('0x13')][_0x4fa9('0x16')]);}else{logger[_0x4fa9('0xf')]('VoiceQueueReport,\x20%s,\x20%s',_0x500b64,_0x4fa9('0x10'));_0x4d4309(_0x5d66e0[_0x4fa9('0x17')]['message']);}})['catch'](function(_0x2b93a2){logger['error'](_0x4fa9('0x15'),_0x500b64,_0x2b93a2);_0x2049ea(_0x2b93a2);});});}exports[_0x4fa9('0x18')]=function(_0x50a0d9){var _0x1f6a63=this;return new Promise(function(_0x51395d,_0x3f8036){return db[_0x4fa9('0x19')][_0x4fa9('0x1a')]({'raw':_0x50a0d9[_0x4fa9('0x1b')]?_0x50a0d9[_0x4fa9('0x1b')]['raw']===undefined?!![]:![]:!![],'where':_0x50a0d9[_0x4fa9('0x1b')]?_0x50a0d9[_0x4fa9('0x1b')][_0x4fa9('0x1c')]||null:null,'attributes':_0x50a0d9['options']?_0x50a0d9[_0x4fa9('0x1b')][_0x4fa9('0x1d')]||null:null,'limit':_0x50a0d9[_0x4fa9('0x1b')]?_0x50a0d9[_0x4fa9('0x1b')][_0x4fa9('0x1e')]||null:null,'include':_0x50a0d9[_0x4fa9('0x1b')]?_0x50a0d9[_0x4fa9('0x1b')][_0x4fa9('0x1f')]?_[_0x4fa9('0x20')](_0x50a0d9[_0x4fa9('0x1b')][_0x4fa9('0x1f')],function(_0x1fbbcf){return{'model':db[_0x1fbbcf[_0x4fa9('0x21')]],'as':_0x1fbbcf['as'],'attributes':_0x1fbbcf[_0x4fa9('0x1d')],'include':_0x1fbbcf[_0x4fa9('0x1f')]?_[_0x4fa9('0x20')](_0x1fbbcf[_0x4fa9('0x1f')],function(_0x1e5836){return{'model':db[_0x1e5836[_0x4fa9('0x21')]],'as':_0x1e5836['as'],'attributes':_0x1e5836[_0x4fa9('0x1d')],'include':_0x1e5836['include']?_[_0x4fa9('0x20')](_0x1e5836[_0x4fa9('0x1f')],function(_0x12f169){return{'model':db[_0x12f169[_0x4fa9('0x21')]],'as':_0x12f169['as'],'attributes':_0x12f169[_0x4fa9('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x4fa9('0xe')](function(_0x31ada4){logger['info'](_0x4fa9('0x18'),_0x50a0d9);logger[_0x4fa9('0x11')](_0x4fa9('0x18'),_0x50a0d9,JSON[_0x4fa9('0x12')](_0x31ada4));_0x51395d(_0x31ada4);})[_0x4fa9('0x22')](function(_0xb9fed8){logger[_0x4fa9('0x13')](_0x4fa9('0x18'),_0xb9fed8[_0x4fa9('0x16')],_0x50a0d9);_0x3f8036(_0x1f6a63[_0x4fa9('0x13')](0x1f4,_0xb9fed8[_0x4fa9('0x16')]));});});};exports[_0x4fa9('0x23')]=function(_0x3b4b88){var _0x1b7f9c=this;return new Promise(function(_0x29b2a2,_0x1fa94e){return db[_0x4fa9('0x19')]['create'](_0x3b4b88[_0x4fa9('0x24')],{'raw':_0x3b4b88[_0x4fa9('0x1b')]?_0x3b4b88[_0x4fa9('0x1b')][_0x4fa9('0x25')]===undefined?!![]:![]:!![]})[_0x4fa9('0xe')](function(_0x357bd3){logger['info'](_0x4fa9('0x23'),_0x3b4b88);logger[_0x4fa9('0x11')](_0x4fa9('0x23'),_0x3b4b88,JSON['stringify'](_0x357bd3));_0x29b2a2(_0x357bd3);})[_0x4fa9('0x22')](function(_0x4c14fd){logger['error'](_0x4fa9('0x23'),_0x4c14fd['message'],_0x3b4b88);_0x1fa94e(_0x1b7f9c[_0x4fa9('0x13')](0x1f4,_0x4c14fd[_0x4fa9('0x16')]));});});};exports[_0x4fa9('0x26')]=function(_0x58c70c){var _0x4edfa3=this;return new Promise(function(_0xa0533f,_0x3449bb){return db[_0x4fa9('0x19')]['update'](_0x58c70c[_0x4fa9('0x24')],{'raw':_0x58c70c[_0x4fa9('0x1b')]?_0x58c70c[_0x4fa9('0x1b')][_0x4fa9('0x25')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x58c70c[_0x4fa9('0x1b')]?_0x58c70c[_0x4fa9('0x1b')][_0x4fa9('0x1c')]||null:null,'attributes':_0x58c70c[_0x4fa9('0x1b')]?_0x58c70c[_0x4fa9('0x1b')][_0x4fa9('0x1d')]||null:null,'limit':_0x58c70c[_0x4fa9('0x1b')]?_0x58c70c[_0x4fa9('0x1b')]['limit']||null:null})[_0x4fa9('0xe')](function(_0x4cf490){logger['info'](_0x4fa9('0x26'),_0x58c70c);logger['debug']('UpdateVoiceQueueReport',_0x58c70c,JSON['stringify'](_0x4cf490));_0xa0533f(_0x4cf490);})[_0x4fa9('0x22')](function(_0x16be90){logger['error'](_0x4fa9('0x26'),_0x16be90['message'],_0x58c70c);_0x3449bb(_0x4edfa3['error'](0x1f4,_0x16be90[_0x4fa9('0x16')]));});});};
\ No newline at end of file
+var _0x6967=['randomstring','../../mysqldb','../../config/logger','rpc','jayson/promise','client','http','socket.io-emitter','localhost','./voiceQueueReport.socket','info','VoiceQueueReport,\x20%s,\x20%s','request\x20sent','debug','VoiceQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','GetVoiceQueueReport','VoiceQueueReport','options','where','limit','include','attributes','map','model','then','CreateVoiceQueueReport','create','raw','UpdateVoiceQueueReport','update','body','lodash','util','bluebird'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x6967,0x99));var _0x7696=function(_0x1a2d93,_0x42a613){_0x1a2d93=_0x1a2d93-0x0;var _0x36f96a=_0x6967[_0x1a2d93];return _0x36f96a;};'use strict';var _=require(_0x7696('0x0'));var util=require(_0x7696('0x1'));var moment=require('moment');var BPromise=require(_0x7696('0x2'));var rs=require(_0x7696('0x3'));var fs=require('fs');var db=require(_0x7696('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x7696('0x5'))(_0x7696('0x6'));var config=require('../../config/environment');var jayson=require(_0x7696('0x7'));var client=jayson[_0x7696('0x8')][_0x7696('0x9')]({'port':0x232a});var socket=require(_0x7696('0xa'))({'host':_0x7696('0xb'),'port':0x18eb});require(_0x7696('0xc'))['register'](socket);function respondWithRpcPromise(_0x4d5b1d,_0xdb4488,_0x42b537){return new BPromise(function(_0x44e507,_0x35d599){return client['request'](_0x4d5b1d,_0x42b537)['then'](function(_0xf00afa){logger[_0x7696('0xd')](_0x7696('0xe'),_0xdb4488,_0x7696('0xf'));logger[_0x7696('0x10')](_0x7696('0x11'),_0xdb4488,'request\x20sent',JSON[_0x7696('0x12')](_0xf00afa));if(_0xf00afa[_0x7696('0x13')]){if(_0xf00afa[_0x7696('0x13')][_0x7696('0x14')]===0x1f4){logger[_0x7696('0x13')]('VoiceQueueReport,\x20%s,\x20%s',_0xdb4488,_0xf00afa[_0x7696('0x13')][_0x7696('0x15')]);return _0x35d599(_0xf00afa[_0x7696('0x13')]['message']);}logger['error'](_0x7696('0xe'),_0xdb4488,_0xf00afa[_0x7696('0x13')][_0x7696('0x15')]);return _0x44e507(_0xf00afa[_0x7696('0x13')][_0x7696('0x15')]);}else{logger[_0x7696('0xd')](_0x7696('0xe'),_0xdb4488,_0x7696('0xf'));_0x44e507(_0xf00afa['result']['message']);}})[_0x7696('0x16')](function(_0x12a9d1){logger['error'](_0x7696('0xe'),_0xdb4488,_0x12a9d1);_0x35d599(_0x12a9d1);});});}exports[_0x7696('0x17')]=function(_0xe401c8){var _0x41f1e9=this;return new Promise(function(_0x2f851e,_0x3c2064){return db[_0x7696('0x18')]['findAll']({'raw':_0xe401c8[_0x7696('0x19')]?_0xe401c8['options']['raw']===undefined?!![]:![]:!![],'where':_0xe401c8[_0x7696('0x19')]?_0xe401c8[_0x7696('0x19')][_0x7696('0x1a')]||null:null,'attributes':_0xe401c8['options']?_0xe401c8[_0x7696('0x19')]['attributes']||null:null,'limit':_0xe401c8[_0x7696('0x19')]?_0xe401c8['options'][_0x7696('0x1b')]||null:null,'include':_0xe401c8[_0x7696('0x19')]?_0xe401c8[_0x7696('0x19')][_0x7696('0x1c')]?_['map'](_0xe401c8[_0x7696('0x19')][_0x7696('0x1c')],function(_0x56017c){return{'model':db[_0x56017c['model']],'as':_0x56017c['as'],'attributes':_0x56017c[_0x7696('0x1d')],'include':_0x56017c[_0x7696('0x1c')]?_[_0x7696('0x1e')](_0x56017c[_0x7696('0x1c')],function(_0x43c92c){return{'model':db[_0x43c92c[_0x7696('0x1f')]],'as':_0x43c92c['as'],'attributes':_0x43c92c[_0x7696('0x1d')],'include':_0x43c92c[_0x7696('0x1c')]?_['map'](_0x43c92c[_0x7696('0x1c')],function(_0x33f3e3){return{'model':db[_0x33f3e3[_0x7696('0x1f')]],'as':_0x33f3e3['as'],'attributes':_0x33f3e3[_0x7696('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x7696('0x20')](function(_0xa14bf7){logger[_0x7696('0xd')](_0x7696('0x17'),_0xe401c8);logger[_0x7696('0x10')]('GetVoiceQueueReport',_0xe401c8,JSON[_0x7696('0x12')](_0xa14bf7));_0x2f851e(_0xa14bf7);})[_0x7696('0x16')](function(_0x6b5d3){logger[_0x7696('0x13')](_0x7696('0x17'),_0x6b5d3[_0x7696('0x15')],_0xe401c8);_0x3c2064(_0x41f1e9[_0x7696('0x13')](0x1f4,_0x6b5d3['message']));});});};exports[_0x7696('0x21')]=function(_0x27e821){var _0x181313=this;return new Promise(function(_0x7151fb,_0x183c09){return db[_0x7696('0x18')][_0x7696('0x22')](_0x27e821['body'],{'raw':_0x27e821[_0x7696('0x19')]?_0x27e821[_0x7696('0x19')][_0x7696('0x23')]===undefined?!![]:![]:!![]})[_0x7696('0x20')](function(_0x63a742){logger[_0x7696('0xd')](_0x7696('0x21'),_0x27e821);logger[_0x7696('0x10')](_0x7696('0x21'),_0x27e821,JSON['stringify'](_0x63a742));_0x7151fb(_0x63a742);})['catch'](function(_0x597939){logger[_0x7696('0x13')](_0x7696('0x21'),_0x597939[_0x7696('0x15')],_0x27e821);_0x183c09(_0x181313[_0x7696('0x13')](0x1f4,_0x597939[_0x7696('0x15')]));});});};exports[_0x7696('0x24')]=function(_0x3fa87d){var _0x14944e=this;return new Promise(function(_0x4824dc,_0x1e0da3){return db['VoiceQueueReport'][_0x7696('0x25')](_0x3fa87d[_0x7696('0x26')],{'raw':_0x3fa87d[_0x7696('0x19')]?_0x3fa87d[_0x7696('0x19')][_0x7696('0x23')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3fa87d[_0x7696('0x19')]?_0x3fa87d['options'][_0x7696('0x1a')]||null:null,'attributes':_0x3fa87d[_0x7696('0x19')]?_0x3fa87d[_0x7696('0x19')][_0x7696('0x1d')]||null:null,'limit':_0x3fa87d['options']?_0x3fa87d[_0x7696('0x19')]['limit']||null:null})[_0x7696('0x20')](function(_0x97a81f){logger[_0x7696('0xd')](_0x7696('0x24'),_0x3fa87d);logger[_0x7696('0x10')](_0x7696('0x24'),_0x3fa87d,JSON[_0x7696('0x12')](_0x97a81f));_0x4824dc(_0x97a81f);})['catch'](function(_0x182bef){logger['error'](_0x7696('0x24'),_0x182bef[_0x7696('0x15')],_0x3fa87d);_0x1e0da3(_0x14944e[_0x7696('0x13')](0x1f4,_0x182bef[_0x7696('0x15')]));});});};
\ No newline at end of file
index 7f79d72..80cdfe9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8acc=['register','length','voiceQueueReport:','save','remove','update'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x8acc,0xdb));var _0xc8ac=function(_0x2b9630,_0x394f14){_0x2b9630=_0x2b9630-0x0;var _0x5cb3ba=_0x8acc[_0x2b9630];return _0x5cb3ba;};'use strict';var VoiceQueueReportEvents=require('./voiceQueueReport.events');var events=[_0xc8ac('0x0'),_0xc8ac('0x1'),_0xc8ac('0x2')];function createListener(_0x479dbd,_0x2e18e6){return function(_0x40df52){_0x2e18e6['emit'](_0x479dbd,_0x40df52);};}function removeListener(_0x280b6c,_0x1bb12c){return function(){VoiceQueueReportEvents['removeListener'](_0x280b6c,_0x1bb12c);};}exports[_0xc8ac('0x3')]=function(_0x18cca3){for(var _0x3cc5ec=0x0,_0x3f0850=events[_0xc8ac('0x4')];_0x3cc5ec<_0x3f0850;_0x3cc5ec++){var _0x184cb1=events[_0x3cc5ec];var _0x5b96d4=createListener(_0xc8ac('0x5')+_0x184cb1,_0x18cca3);VoiceQueueReportEvents['on'](_0x184cb1,_0x5b96d4);}};
\ No newline at end of file
+var _0xe98c=['removeListener','register','length','voiceQueueReport:','./voiceQueueReport.events','save','remove','update','emit'];(function(_0x1ea2a7,_0x14c846){var _0x36fdec=function(_0x19d7f9){while(--_0x19d7f9){_0x1ea2a7['push'](_0x1ea2a7['shift']());}};_0x36fdec(++_0x14c846);}(_0xe98c,0xd3));var _0xce98=function(_0x4fd626,_0x3b460a){_0x4fd626=_0x4fd626-0x0;var _0xdf769d=_0xe98c[_0x4fd626];return _0xdf769d;};'use strict';var VoiceQueueReportEvents=require(_0xce98('0x0'));var events=[_0xce98('0x1'),_0xce98('0x2'),_0xce98('0x3')];function createListener(_0x132d78,_0x4c35ac){return function(_0x3331b2){_0x4c35ac[_0xce98('0x4')](_0x132d78,_0x3331b2);};}function removeListener(_0x176584,_0x146048){return function(){VoiceQueueReportEvents[_0xce98('0x5')](_0x176584,_0x146048);};}exports[_0xce98('0x6')]=function(_0x1ee467){for(var _0x50f0ea=0x0,_0x9c5d9c=events[_0xce98('0x7')];_0x50f0ea<_0x9c5d9c;_0x50f0ea++){var _0x203c84=events[_0x50f0ea];var _0x5987b5=createListener(_0xce98('0x8')+_0x203c84,_0x1ee467);VoiceQueueReportEvents['on'](_0x203c84,_0x5987b5);}};
\ No newline at end of file
index 644abc4..63e5838 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['/:id','show','create','update','delete','destroy','multer','util','path','../../components/auth/service','../../config/environment','./voiceQueuesLog.controller','get','isAuthenticated','index'];(function(_0x1dc79a,_0x8638a1){var _0x4a06fb=function(_0x36dc33){while(--_0x36dc33){_0x1dc79a['push'](_0x1dc79a['shift']());}};_0x4a06fb(++_0x8638a1);}(_0xa9e0,0x123));var _0x0a9e=function(_0xbe200f,_0x4b50eb){_0xbe200f=_0xbe200f-0x0;var _0x192597=_0xa9e0[_0xbe200f];return _0x192597;};'use strict';var multer=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var path=require(_0x0a9e('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x0a9e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x0a9e('0x4'));var controller=require(_0x0a9e('0x5'));router[_0x0a9e('0x6')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x8')]);router['get'](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xa')]);router['post']('/',auth['isAuthenticated'](),controller[_0x0a9e('0xb')]);router['put']('/:id',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xc')]);router[_0x0a9e('0xd')](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xe')]);module['exports']=router;
\ No newline at end of file
+var _0xa9e0=['/:id','show','create','update','delete','destroy','multer','util','path','../../components/auth/service','../../config/environment','./voiceQueuesLog.controller','get','isAuthenticated','index'];(function(_0x4f0116,_0x2d05b7){var _0x4d9a89=function(_0x6d6c15){while(--_0x6d6c15){_0x4f0116['push'](_0x4f0116['shift']());}};_0x4d9a89(++_0x2d05b7);}(_0xa9e0,0x123));var _0x0a9e=function(_0x13ea00,_0x12f610){_0x13ea00=_0x13ea00-0x0;var _0x1f7347=_0xa9e0[_0x13ea00];return _0x1f7347;};'use strict';var multer=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var path=require(_0x0a9e('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x0a9e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x0a9e('0x4'));var controller=require(_0x0a9e('0x5'));router[_0x0a9e('0x6')]('/',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0x8')]);router['get'](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xa')]);router['post']('/',auth['isAuthenticated'](),controller[_0x0a9e('0xb')]);router['put']('/:id',auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xc')]);router[_0x0a9e('0xd')](_0x0a9e('0x9'),auth[_0x0a9e('0x7')](),controller[_0x0a9e('0xe')]);module['exports']=router;
\ No newline at end of file
index c8fe576..9945494 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7217=['sequelize','exports','STRING','DATE','format','YYYY-MM-DD\x20HH:mm:ss'];(function(_0x218ca4,_0x41cc40){var _0x1b3ff9=function(_0x5003cd){while(--_0x5003cd){_0x218ca4['push'](_0x218ca4['shift']());}};_0x1b3ff9(++_0x41cc40);}(_0x7217,0x19e));var _0x7721=function(_0x12d033,_0x25fa2f){_0x12d033=_0x12d033-0x0;var _0x3b4e80=_0x7217[_0x12d033];return _0x3b4e80;};'use strict';var Sequelize=require(_0x7721('0x0'));var moment=require('moment');module[_0x7721('0x1')]={'time':{'type':Sequelize[_0x7721('0x2')]},'callid':{'type':Sequelize[_0x7721('0x2')],'allowNull':![],'defaultValue':''},'queuename':{'type':Sequelize[_0x7721('0x2')],'allowNull':![],'defaultValue':''},'agent':{'type':Sequelize[_0x7721('0x2')],'allowNull':![],'defaultValue':''},'event':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'data':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'data1':{'type':Sequelize[_0x7721('0x2')],'allowNull':![],'defaultValue':''},'data2':{'type':Sequelize[_0x7721('0x2')],'allowNull':![],'defaultValue':''},'data3':{'type':Sequelize[_0x7721('0x2')],'allowNull':![],'defaultValue':''},'data4':{'type':Sequelize[_0x7721('0x2')],'allowNull':![],'defaultValue':''},'data5':{'type':Sequelize[_0x7721('0x2')],'allowNull':![],'defaultValue':''},'dtm':{'type':Sequelize[_0x7721('0x3')],'allowNull':![],'defaultValue':moment()[_0x7721('0x4')](_0x7721('0x5'))}};
\ No newline at end of file
+var _0x7dfd=['format','YYYY-MM-DD\x20HH:mm:ss','sequelize','moment','exports','STRING','DATE'];(function(_0x1b0e0d,_0x203a47){var _0x33fa66=function(_0x49ea68){while(--_0x49ea68){_0x1b0e0d['push'](_0x1b0e0d['shift']());}};_0x33fa66(++_0x203a47);}(_0x7dfd,0x1c2));var _0xd7df=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7dfd[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xd7df('0x0'));var moment=require(_0xd7df('0x1'));module[_0xd7df('0x2')]={'time':{'type':Sequelize[_0xd7df('0x3')]},'callid':{'type':Sequelize[_0xd7df('0x3')],'allowNull':![],'defaultValue':''},'queuename':{'type':Sequelize[_0xd7df('0x3')],'allowNull':![],'defaultValue':''},'agent':{'type':Sequelize[_0xd7df('0x3')],'allowNull':![],'defaultValue':''},'event':{'type':Sequelize[_0xd7df('0x3')],'allowNull':![],'defaultValue':''},'data':{'type':Sequelize[_0xd7df('0x3')],'allowNull':![],'defaultValue':''},'data1':{'type':Sequelize[_0xd7df('0x3')],'allowNull':![],'defaultValue':''},'data2':{'type':Sequelize[_0xd7df('0x3')],'allowNull':![],'defaultValue':''},'data3':{'type':Sequelize[_0xd7df('0x3')],'allowNull':![],'defaultValue':''},'data4':{'type':Sequelize[_0xd7df('0x3')],'allowNull':![],'defaultValue':''},'data5':{'type':Sequelize[_0xd7df('0x3')],'allowNull':![],'defaultValue':''},'dtm':{'type':Sequelize[_0xd7df('0x4')],'allowNull':![],'defaultValue':moment()[_0xd7df('0x5')](_0xd7df('0x6'))}};
\ No newline at end of file
index 0562975..0d3874b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x41ad=['status','json','offset','limit','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','index','VoiceQueuesLog','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','pick','dateStart','dateEnd','add','day','where','merge','map','count','includeAll','include','findAll','show','params','options','catch','create','body','find','request-promise','bluebird','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','../../mysqldb','sendStatus'];(function(_0x26793a,_0x49cf51){var _0x575efb=function(_0x2f4db7){while(--_0x2f4db7){_0x26793a['push'](_0x26793a['shift']());}};_0x575efb(++_0x49cf51);}(_0x41ad,0xa1));var _0xd41a=function(_0x12647c,_0x341146){_0x12647c=_0x12647c-0x0;var _0x564742=_0x41ad[_0x12647c];return _0x564742;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xd41a('0x0'));var moment=require('moment');var BPromise=require(_0xd41a('0x1'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0xd41a('0x2'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xd41a('0x3'));var squel=require(_0xd41a('0x4'));var crypto=require(_0xd41a('0x5'));var jsforce=require(_0xd41a('0x6'));var deskjs=require(_0xd41a('0x7'));var toCsv=require('to-csv');var querystring=require(_0xd41a('0x8'));var Papa=require('papaparse');var qs=require(_0xd41a('0x9'));var logger=require(_0xd41a('0xa'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xd41a('0xb'))['db'];function respondWithStatusCode(_0x4a70f1,_0x57c4dd){_0x57c4dd=_0x57c4dd||0xcc;return function(_0x4bcad5){if(_0x4bcad5){return _0x4a70f1[_0xd41a('0xc')](_0x57c4dd);}return _0x4a70f1[_0xd41a('0xd')](_0x57c4dd)['end']();};}function respondWithResult(_0x1a4216,_0x4ef447){_0x4ef447=_0x4ef447||0xc8;return function(_0x3b534f){if(_0x3b534f){return _0x1a4216[_0xd41a('0xd')](_0x4ef447)[_0xd41a('0xe')](_0x3b534f);}};}function respondWithFilteredResult(_0x28338c,_0x2deb10){return function(_0xa320b3){if(_0xa320b3){var _0x545423=_0xa320b3['count'],_0x37ccee=_0x2deb10[_0xd41a('0xf')],_0x273427=_0x2deb10[_0xd41a('0xf')]+_0x2deb10[_0xd41a('0x10')],_0x104e04;if(_0x273427>=_0x545423){_0x273427=_0x545423;_0x104e04=0xc8;}else{_0x104e04=0xce;}_0x28338c[_0xd41a('0xd')](_0x104e04);return _0x28338c['set'](_0xd41a('0x11'),_0x37ccee+'-'+_0x273427+'/'+_0x545423)['json'](_0xa320b3);}return null;};}function patchUpdates(_0x5fa9b4){return function(_0x14bd76){try{jsonpatch[_0xd41a('0x12')](_0x14bd76,_0x5fa9b4,!![]);}catch(_0x42c9f3){return BPromise[_0xd41a('0x13')](_0x42c9f3);}return _0x14bd76[_0xd41a('0x14')]();};}function saveUpdates(_0x5163d5,_0x4a80fe){return function(_0x21bf3e){if(_0x21bf3e){return _0x21bf3e[_0xd41a('0x15')](_0x5163d5)[_0xd41a('0x16')](function(_0x1cd151){return _0x1cd151;});}return null;};}function removeEntity(_0x124cf4,_0x323b4e){return function(_0x595ae6){if(_0x595ae6){return _0x595ae6[_0xd41a('0x17')]()[_0xd41a('0x16')](function(){_0x124cf4[_0xd41a('0xd')](0xcc)['end']();});}};}function handleEntityNotFound(_0x241873,_0x3003f4){return function(_0x14f644){if(!_0x14f644){_0x241873[_0xd41a('0xc')](0x194);}return _0x14f644;};}function handleError(_0x4d9e80,_0x1328dc){_0x1328dc=_0x1328dc||0x1f4;return function(_0x534e8b){logger[_0xd41a('0x18')](_0x534e8b[_0xd41a('0x19')]);if(_0x534e8b[_0xd41a('0x1a')]){delete _0x534e8b[_0xd41a('0x1a')];}_0x4d9e80[_0xd41a('0xd')](_0x1328dc)[_0xd41a('0x1b')](_0x534e8b);};}exports[_0xd41a('0x1c')]=function(_0x2c9427,_0x2a7cb0){var _0x1cec71={},_0xdc4211={},_0x279623={'count':0x0,'rows':[]};var _0x5b1f97=db[_0xd41a('0x1d')][_0xd41a('0x1e')];_0xdc4211[_0xd41a('0x1f')]=_['keys'](_0x5b1f97);var _0x2675b8={'dateStart':_0x2c9427[_0xd41a('0x20')]['dateStart'],'dateEnd':_0x2c9427[_0xd41a('0x20')]['dateEnd']};delete _0x2c9427[_0xd41a('0x20')]['dateStart'];delete _0x2c9427[_0xd41a('0x20')]['dateEnd'];_0xdc4211[_0xd41a('0x20')]=_[_0xd41a('0x21')](_0x2c9427['query']);_0xdc4211[_0xd41a('0x22')]=_[_0xd41a('0x23')](_0xdc4211['model'],_0xdc4211[_0xd41a('0x20')]);_0x1cec71[_0xd41a('0x24')]=_['intersection'](_0xdc4211['model'],qs[_0xd41a('0x25')](_0x2c9427[_0xd41a('0x20')][_0xd41a('0x25')]));_0x1cec71[_0xd41a('0x24')]=_0x1cec71[_0xd41a('0x24')][_0xd41a('0x26')]?_0x1cec71['attributes']:_0xdc4211['model'];if(!_0x2c9427[_0xd41a('0x20')]['hasOwnProperty']('nolimit')){_0x1cec71[_0xd41a('0x10')]=qs['limit'](_0x2c9427[_0xd41a('0x20')][_0xd41a('0x10')]);_0x1cec71[_0xd41a('0xf')]=qs[_0xd41a('0xf')](_0x2c9427[_0xd41a('0x20')][_0xd41a('0xf')]);}_0x1cec71['order']=qs['sort'](_0x2c9427['query']['sort']);_0x1cec71['where']=qs['filters'](_[_0xd41a('0x27')](_0x2c9427[_0xd41a('0x20')],_0xdc4211[_0xd41a('0x22')]));if(_0x2675b8[_0xd41a('0x28')]){if(_0x2675b8['dateEnd']){_0x2675b8[_0xd41a('0x29')]=moment(_0x2675b8[_0xd41a('0x29')])[_0xd41a('0x2a')](0x1,'day');}else{_0x2675b8[_0xd41a('0x29')]=moment(_0x2675b8[_0xd41a('0x28')])[_0xd41a('0x2a')](0x1,_0xd41a('0x2b'));}_['merge'](_0x1cec71[_0xd41a('0x2c')],{'createdAt':{'$gte':_0x2675b8[_0xd41a('0x28')],'$lte':_0x2675b8[_0xd41a('0x29')]}});}if(_0x2c9427[_0xd41a('0x20')]['filter']){_0x1cec71['where']=_[_0xd41a('0x2d')](_0x1cec71[_0xd41a('0x2c')],{'$or':_[_0xd41a('0x2e')](_0x1cec71[_0xd41a('0x24')],function(_0x4b66b3){var _0x283d8d={};_0x283d8d[_0x4b66b3]={'$like':'%'+_0x2c9427[_0xd41a('0x20')]['filter']+'%'};return _0x283d8d;})});}_0x1cec71=_[_0xd41a('0x2d')]({},_0x1cec71,_0x2c9427['options']);var _0x33e619={'where':_0x1cec71[_0xd41a('0x2c')]};return db[_0xd41a('0x1d')]['count'](_0x33e619)[_0xd41a('0x16')](function(_0x4efdfd){_0x279623[_0xd41a('0x2f')]=_0x4efdfd;if(_0x2c9427[_0xd41a('0x20')][_0xd41a('0x30')]){_0x1cec71[_0xd41a('0x31')]=[{'all':!![]}];}return db[_0xd41a('0x1d')][_0xd41a('0x32')](_0x1cec71);})[_0xd41a('0x16')](function(_0x472cae){_0x279623['rows']=_0x472cae;return _0x279623;})[_0xd41a('0x16')](respondWithFilteredResult(_0x2a7cb0,_0x1cec71))['catch'](handleError(_0x2a7cb0,null));};exports[_0xd41a('0x33')]=function(_0x542fca,_0x141a03){var _0x3b83f6={'raw':!![],'where':{'id':_0x542fca[_0xd41a('0x34')]['id']}},_0x102caf={};_0x102caf[_0xd41a('0x1f')]=_[_0xd41a('0x21')](db[_0xd41a('0x1d')]['rawAttributes']);_0x102caf[_0xd41a('0x20')]=_['keys'](_0x542fca[_0xd41a('0x20')]);_0x102caf[_0xd41a('0x22')]=_[_0xd41a('0x23')](_0x102caf[_0xd41a('0x1f')],_0x102caf[_0xd41a('0x20')]);_0x3b83f6[_0xd41a('0x24')]=_[_0xd41a('0x23')](_0x102caf[_0xd41a('0x1f')],qs[_0xd41a('0x25')](_0x542fca[_0xd41a('0x20')][_0xd41a('0x25')]));_0x3b83f6[_0xd41a('0x24')]=_0x3b83f6[_0xd41a('0x24')][_0xd41a('0x26')]?_0x3b83f6[_0xd41a('0x24')]:_0x102caf[_0xd41a('0x1f')];if(_0x542fca[_0xd41a('0x20')][_0xd41a('0x30')]){_0x3b83f6[_0xd41a('0x31')]=[{'all':!![]}];}_0x3b83f6=_[_0xd41a('0x2d')]({},_0x3b83f6,_0x542fca[_0xd41a('0x35')]);return db['VoiceQueuesLog']['find'](_0x3b83f6)[_0xd41a('0x16')](handleEntityNotFound(_0x141a03,null))[_0xd41a('0x16')](respondWithResult(_0x141a03,null))[_0xd41a('0x36')](handleError(_0x141a03,null));};exports[_0xd41a('0x37')]=function(_0x23e4ed,_0x101167){return db[_0xd41a('0x1d')]['create'](_0x23e4ed['body'],{})[_0xd41a('0x16')](respondWithResult(_0x101167,0xc9))[_0xd41a('0x36')](handleError(_0x101167,null));};exports[_0xd41a('0x15')]=function(_0xa1a283,_0x1fd5ee){if(_0xa1a283[_0xd41a('0x38')]['id']){delete _0xa1a283['body']['id'];}return db['VoiceQueuesLog'][_0xd41a('0x39')]({'where':{'id':_0xa1a283[_0xd41a('0x34')]['id']}})[_0xd41a('0x16')](handleEntityNotFound(_0x1fd5ee,null))[_0xd41a('0x16')](saveUpdates(_0xa1a283[_0xd41a('0x38')],null))[_0xd41a('0x16')](respondWithResult(_0x1fd5ee,null))['catch'](handleError(_0x1fd5ee,null));};exports['destroy']=function(_0x55f417,_0x5401d3){return db['VoiceQueuesLog']['find']({'where':{'id':_0x55f417[_0xd41a('0x34')]['id']}})[_0xd41a('0x16')](handleEntityNotFound(_0x5401d3,null))[_0xd41a('0x16')](removeEntity(_0x5401d3,null))[_0xd41a('0x36')](handleError(_0x5401d3,null));};
\ No newline at end of file
+var _0x8b2c=['VoiceQueuesLog','model','keys','query','dateEnd','filters','intersection','attributes','fields','length','nolimit','offset','order','sort','where','dateStart','add','day','merge','filter','options','includeAll','include','findAll','rows','params','rawAttributes','find','catch','create','body','fast-json-patch','request-promise','bluebird','mustache','path','sox','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','limit','set','Content-Range','apply','reject','save','update','destroy','then','error','stack','name','send','index'];(function(_0x1b5aea,_0x1afe6f){var _0x51cae9=function(_0x1494a6){while(--_0x1494a6){_0x1b5aea['push'](_0x1b5aea['shift']());}};_0x51cae9(++_0x1afe6f);}(_0x8b2c,0x1f4));var _0xc8b2=function(_0x84691d,_0x1d4054){_0x84691d=_0x84691d-0x0;var _0x2e9bea=_0x8b2c[_0x84691d];return _0x2e9bea;};'use strict';var jsonpatch=require(_0xc8b2('0x0'));var rp=require(_0xc8b2('0x1'));var moment=require('moment');var BPromise=require(_0xc8b2('0x2'));var Mustache=require(_0xc8b2('0x3'));var util=require('util');var path=require(_0xc8b2('0x4'));var sox=require(_0xc8b2('0x5'));var csv=require(_0xc8b2('0x6'));var ejs=require(_0xc8b2('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0xc8b2('0x8'));var crypto=require(_0xc8b2('0x9'));var jsforce=require(_0xc8b2('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xc8b2('0xb'));var Papa=require(_0xc8b2('0xc'));var qs=require('../../components/parsers/qs');var logger=require(_0xc8b2('0xd'))(_0xc8b2('0xe'));var utils=require(_0xc8b2('0xf'));var config=require('../../config/environment');var db=require(_0xc8b2('0x10'))['db'];function respondWithStatusCode(_0x2a730d,_0x5678a7){_0x5678a7=_0x5678a7||0xcc;return function(_0x236dbe){if(_0x236dbe){return _0x2a730d[_0xc8b2('0x11')](_0x5678a7);}return _0x2a730d[_0xc8b2('0x12')](_0x5678a7)[_0xc8b2('0x13')]();};}function respondWithResult(_0xc792f3,_0x1c7783){_0x1c7783=_0x1c7783||0xc8;return function(_0x1132b4){if(_0x1132b4){return _0xc792f3['status'](_0x1c7783)[_0xc8b2('0x14')](_0x1132b4);}};}function respondWithFilteredResult(_0x3e3b69,_0x2b83ed){return function(_0x1aec73){if(_0x1aec73){var _0x5ca01b=_0x1aec73[_0xc8b2('0x15')],_0x44522f=_0x2b83ed['offset'],_0x59e25b=_0x2b83ed['offset']+_0x2b83ed[_0xc8b2('0x16')],_0x3d1f9c;if(_0x59e25b>=_0x5ca01b){_0x59e25b=_0x5ca01b;_0x3d1f9c=0xc8;}else{_0x3d1f9c=0xce;}_0x3e3b69[_0xc8b2('0x12')](_0x3d1f9c);return _0x3e3b69[_0xc8b2('0x17')](_0xc8b2('0x18'),_0x44522f+'-'+_0x59e25b+'/'+_0x5ca01b)[_0xc8b2('0x14')](_0x1aec73);}return null;};}function patchUpdates(_0x4fa378){return function(_0x452c2f){try{jsonpatch[_0xc8b2('0x19')](_0x452c2f,_0x4fa378,!![]);}catch(_0x1f46ab){return BPromise[_0xc8b2('0x1a')](_0x1f46ab);}return _0x452c2f[_0xc8b2('0x1b')]();};}function saveUpdates(_0x18b0db,_0x67bedb){return function(_0x322d1a){if(_0x322d1a){return _0x322d1a[_0xc8b2('0x1c')](_0x18b0db)['then'](function(_0x43ccff){return _0x43ccff;});}return null;};}function removeEntity(_0x5389e0,_0x105116){return function(_0x509a46){if(_0x509a46){return _0x509a46[_0xc8b2('0x1d')]()[_0xc8b2('0x1e')](function(){_0x5389e0[_0xc8b2('0x12')](0xcc)[_0xc8b2('0x13')]();});}};}function handleEntityNotFound(_0x311587,_0x487f61){return function(_0x37582b){if(!_0x37582b){_0x311587[_0xc8b2('0x11')](0x194);}return _0x37582b;};}function handleError(_0x3c0b3d,_0x3f83a9){_0x3f83a9=_0x3f83a9||0x1f4;return function(_0x4ab96c){logger[_0xc8b2('0x1f')](_0x4ab96c[_0xc8b2('0x20')]);if(_0x4ab96c[_0xc8b2('0x21')]){delete _0x4ab96c[_0xc8b2('0x21')];}_0x3c0b3d['status'](_0x3f83a9)[_0xc8b2('0x22')](_0x4ab96c);};}exports[_0xc8b2('0x23')]=function(_0x3e8c3a,_0xe8e1f0){var _0x6f055f={},_0x5a4769={},_0x365782={'count':0x0,'rows':[]};var _0x52e5d6=db[_0xc8b2('0x24')]['rawAttributes'];_0x5a4769[_0xc8b2('0x25')]=_[_0xc8b2('0x26')](_0x52e5d6);var _0x50f1f7={'dateStart':_0x3e8c3a[_0xc8b2('0x27')]['dateStart'],'dateEnd':_0x3e8c3a['query'][_0xc8b2('0x28')]};delete _0x3e8c3a[_0xc8b2('0x27')]['dateStart'];delete _0x3e8c3a[_0xc8b2('0x27')][_0xc8b2('0x28')];_0x5a4769[_0xc8b2('0x27')]=_['keys'](_0x3e8c3a[_0xc8b2('0x27')]);_0x5a4769[_0xc8b2('0x29')]=_[_0xc8b2('0x2a')](_0x5a4769['model'],_0x5a4769[_0xc8b2('0x27')]);_0x6f055f[_0xc8b2('0x2b')]=_[_0xc8b2('0x2a')](_0x5a4769[_0xc8b2('0x25')],qs[_0xc8b2('0x2c')](_0x3e8c3a[_0xc8b2('0x27')][_0xc8b2('0x2c')]));_0x6f055f[_0xc8b2('0x2b')]=_0x6f055f[_0xc8b2('0x2b')][_0xc8b2('0x2d')]?_0x6f055f[_0xc8b2('0x2b')]:_0x5a4769['model'];if(!_0x3e8c3a[_0xc8b2('0x27')]['hasOwnProperty'](_0xc8b2('0x2e'))){_0x6f055f['limit']=qs[_0xc8b2('0x16')](_0x3e8c3a['query'][_0xc8b2('0x16')]);_0x6f055f[_0xc8b2('0x2f')]=qs[_0xc8b2('0x2f')](_0x3e8c3a[_0xc8b2('0x27')][_0xc8b2('0x2f')]);}_0x6f055f[_0xc8b2('0x30')]=qs['sort'](_0x3e8c3a[_0xc8b2('0x27')][_0xc8b2('0x31')]);_0x6f055f[_0xc8b2('0x32')]=qs[_0xc8b2('0x29')](_['pick'](_0x3e8c3a[_0xc8b2('0x27')],_0x5a4769[_0xc8b2('0x29')]));if(_0x50f1f7[_0xc8b2('0x33')]){if(_0x50f1f7[_0xc8b2('0x28')]){_0x50f1f7[_0xc8b2('0x28')]=moment(_0x50f1f7['dateEnd'])[_0xc8b2('0x34')](0x1,_0xc8b2('0x35'));}else{_0x50f1f7[_0xc8b2('0x28')]=moment(_0x50f1f7[_0xc8b2('0x33')])[_0xc8b2('0x34')](0x1,_0xc8b2('0x35'));}_['merge'](_0x6f055f[_0xc8b2('0x32')],{'createdAt':{'$gte':_0x50f1f7[_0xc8b2('0x33')],'$lte':_0x50f1f7[_0xc8b2('0x28')]}});}if(_0x3e8c3a[_0xc8b2('0x27')]['filter']){_0x6f055f['where']=_[_0xc8b2('0x36')](_0x6f055f[_0xc8b2('0x32')],{'$or':_['map'](_0x6f055f[_0xc8b2('0x2b')],function(_0x149fe4){var _0xd222f6={};_0xd222f6[_0x149fe4]={'$like':'%'+_0x3e8c3a[_0xc8b2('0x27')][_0xc8b2('0x37')]+'%'};return _0xd222f6;})});}_0x6f055f=_[_0xc8b2('0x36')]({},_0x6f055f,_0x3e8c3a[_0xc8b2('0x38')]);var _0x26b622={'where':_0x6f055f['where']};return db[_0xc8b2('0x24')][_0xc8b2('0x15')](_0x26b622)[_0xc8b2('0x1e')](function(_0x2f45a4){_0x365782[_0xc8b2('0x15')]=_0x2f45a4;if(_0x3e8c3a['query'][_0xc8b2('0x39')]){_0x6f055f[_0xc8b2('0x3a')]=[{'all':!![]}];}return db[_0xc8b2('0x24')][_0xc8b2('0x3b')](_0x6f055f);})[_0xc8b2('0x1e')](function(_0x9d254){_0x365782[_0xc8b2('0x3c')]=_0x9d254;return _0x365782;})[_0xc8b2('0x1e')](respondWithFilteredResult(_0xe8e1f0,_0x6f055f))['catch'](handleError(_0xe8e1f0,null));};exports['show']=function(_0x3f2f06,_0x30727f){var _0x424bfa={'raw':!![],'where':{'id':_0x3f2f06[_0xc8b2('0x3d')]['id']}},_0x30a7a0={};_0x30a7a0[_0xc8b2('0x25')]=_['keys'](db[_0xc8b2('0x24')][_0xc8b2('0x3e')]);_0x30a7a0[_0xc8b2('0x27')]=_[_0xc8b2('0x26')](_0x3f2f06[_0xc8b2('0x27')]);_0x30a7a0[_0xc8b2('0x29')]=_[_0xc8b2('0x2a')](_0x30a7a0[_0xc8b2('0x25')],_0x30a7a0['query']);_0x424bfa['attributes']=_[_0xc8b2('0x2a')](_0x30a7a0[_0xc8b2('0x25')],qs[_0xc8b2('0x2c')](_0x3f2f06[_0xc8b2('0x27')]['fields']));_0x424bfa[_0xc8b2('0x2b')]=_0x424bfa[_0xc8b2('0x2b')][_0xc8b2('0x2d')]?_0x424bfa[_0xc8b2('0x2b')]:_0x30a7a0['model'];if(_0x3f2f06['query'][_0xc8b2('0x39')]){_0x424bfa[_0xc8b2('0x3a')]=[{'all':!![]}];}_0x424bfa=_['merge']({},_0x424bfa,_0x3f2f06[_0xc8b2('0x38')]);return db[_0xc8b2('0x24')][_0xc8b2('0x3f')](_0x424bfa)['then'](handleEntityNotFound(_0x30727f,null))[_0xc8b2('0x1e')](respondWithResult(_0x30727f,null))[_0xc8b2('0x40')](handleError(_0x30727f,null));};exports[_0xc8b2('0x41')]=function(_0x3ab94a,_0x2fd730){return db[_0xc8b2('0x24')][_0xc8b2('0x41')](_0x3ab94a[_0xc8b2('0x42')],{})['then'](respondWithResult(_0x2fd730,0xc9))['catch'](handleError(_0x2fd730,null));};exports[_0xc8b2('0x1c')]=function(_0xe1c092,_0x1cd811){if(_0xe1c092['body']['id']){delete _0xe1c092[_0xc8b2('0x42')]['id'];}return db[_0xc8b2('0x24')][_0xc8b2('0x3f')]({'where':{'id':_0xe1c092[_0xc8b2('0x3d')]['id']}})[_0xc8b2('0x1e')](handleEntityNotFound(_0x1cd811,null))[_0xc8b2('0x1e')](saveUpdates(_0xe1c092['body'],null))[_0xc8b2('0x1e')](respondWithResult(_0x1cd811,null))[_0xc8b2('0x40')](handleError(_0x1cd811,null));};exports[_0xc8b2('0x1d')]=function(_0x290cec,_0xa2e259){return db[_0xc8b2('0x24')][_0xc8b2('0x3f')]({'where':{'id':_0x290cec[_0xc8b2('0x3d')]['id']}})[_0xc8b2('0x1e')](handleEntityNotFound(_0xa2e259,null))[_0xc8b2('0x1e')](removeEntity(_0xa2e259,null))[_0xc8b2('0x40')](handleError(_0xa2e259,null));};
\ No newline at end of file
index c798424..bb364e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x081e=['request-promise','./voiceQueuesLog.attributes','exports','define','VoiceQueuesLog','voice_queues_log','event_dtm','event','dtm','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x47af63,_0x1a8585){var _0x3ec58e=function(_0x3544ec){while(--_0x3544ec){_0x47af63['push'](_0x47af63['shift']());}};_0x3ec58e(++_0x1a8585);}(_0x081e,0x9f));var _0xe081=function(_0x32d414,_0x4d23da){_0x32d414=_0x32d414-0x0;var _0x4e0bca=_0x081e[_0x32d414];return _0x4e0bca;};'use strict';var _=require(_0xe081('0x0'));var util=require(_0xe081('0x1'));var logger=require(_0xe081('0x2'))(_0xe081('0x3'));var moment=require(_0xe081('0x4'));var BPromise=require(_0xe081('0x5'));var rp=require(_0xe081('0x6'));var attributes=require(_0xe081('0x7'));module[_0xe081('0x8')]=function(_0x5a70ca,_0x39fb34){return _0x5a70ca[_0xe081('0x9')](_0xe081('0xa'),attributes,{'tableName':_0xe081('0xb'),'paranoid':![],'indexes':[{'name':_0xe081('0xc'),'fields':[_0xe081('0xd'),_0xe081('0xe')]}],'timestamps':![]});};
\ No newline at end of file
+var _0xf426=['lodash','util','api','moment','request-promise','./voiceQueuesLog.attributes','exports','define','VoiceQueuesLog','voice_queues_log','event_dtm','dtm'];(function(_0x1979bf,_0x21d994){var _0xfea58=function(_0x3ddde6){while(--_0x3ddde6){_0x1979bf['push'](_0x1979bf['shift']());}};_0xfea58(++_0x21d994);}(_0xf426,0x168));var _0x6f42=function(_0x41dfac,_0x278319){_0x41dfac=_0x41dfac-0x0;var _0x12900b=_0xf426[_0x41dfac];return _0x12900b;};'use strict';var _=require(_0x6f42('0x0'));var util=require(_0x6f42('0x1'));var logger=require('../../config/logger')(_0x6f42('0x2'));var moment=require(_0x6f42('0x3'));var BPromise=require('bluebird');var rp=require(_0x6f42('0x4'));var attributes=require(_0x6f42('0x5'));module[_0x6f42('0x6')]=function(_0x2d9121,_0x32bd6c){return _0x2d9121[_0x6f42('0x7')](_0x6f42('0x8'),attributes,{'tableName':_0x6f42('0x9'),'paranoid':![],'indexes':[{'name':_0x6f42('0xa'),'fields':['event',_0x6f42('0xb')]}],'timestamps':![]});};
\ No newline at end of file
index b5ef2af..f156cda 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7ec=['result','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','client','http','request','then','info','VoiceQueuesLog,\x20%s,\x20%s','debug','VoiceQueuesLog,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message'];(function(_0x5a0f53,_0x3cf8a4){var _0x262793=function(_0x7d6caa){while(--_0x7d6caa){_0x5a0f53['push'](_0x5a0f53['shift']());}};_0x262793(++_0x3cf8a4);}(_0xc7ec,0x1a3));var _0xcc7e=function(_0x14477e,_0x44d4da){_0x14477e=_0x14477e-0x0;var _0x5d4a05=_0xc7ec[_0x14477e];return _0x5d4a05;};'use strict';var _=require(_0xcc7e('0x0'));var util=require(_0xcc7e('0x1'));var moment=require(_0xcc7e('0x2'));var BPromise=require(_0xcc7e('0x3'));var rs=require(_0xcc7e('0x4'));var fs=require('fs');var db=require(_0xcc7e('0x5'))['db'];var utils=require(_0xcc7e('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0xcc7e('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xcc7e('0x8')][_0xcc7e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5dba35,_0xe100e6,_0x12e4b6){return new BPromise(function(_0x10bf76,_0x4c454c){return client[_0xcc7e('0xa')](_0x5dba35,_0x12e4b6)[_0xcc7e('0xb')](function(_0x41aba7){logger[_0xcc7e('0xc')](_0xcc7e('0xd'),_0xe100e6,'request\x20sent');logger[_0xcc7e('0xe')](_0xcc7e('0xf'),_0xe100e6,_0xcc7e('0x10'),JSON[_0xcc7e('0x11')](_0x41aba7));if(_0x41aba7[_0xcc7e('0x12')]){if(_0x41aba7[_0xcc7e('0x12')][_0xcc7e('0x13')]===0x1f4){logger['error']('VoiceQueuesLog,\x20%s,\x20%s',_0xe100e6,_0x41aba7[_0xcc7e('0x12')][_0xcc7e('0x14')]);return _0x4c454c(_0x41aba7[_0xcc7e('0x12')][_0xcc7e('0x14')]);}logger[_0xcc7e('0x12')](_0xcc7e('0xd'),_0xe100e6,_0x41aba7['error'][_0xcc7e('0x14')]);return _0x10bf76(_0x41aba7['error'][_0xcc7e('0x14')]);}else{logger[_0xcc7e('0xc')]('VoiceQueuesLog,\x20%s,\x20%s',_0xe100e6,_0xcc7e('0x10'));_0x10bf76(_0x41aba7[_0xcc7e('0x15')][_0xcc7e('0x14')]);}})['catch'](function(_0x592f19){logger[_0xcc7e('0x12')](_0xcc7e('0xd'),_0xe100e6,_0x592f19);_0x4c454c(_0x592f19);});});}
\ No newline at end of file
+var _0x8581=['message','result','catch','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','request\x20sent','VoiceQueuesLog,\x20%s,\x20%s,\x20%s','stringify','error','code','VoiceQueuesLog,\x20%s,\x20%s'];(function(_0x385d08,_0x29da48){var _0x26bfb3=function(_0x227c0e){while(--_0x227c0e){_0x385d08['push'](_0x385d08['shift']());}};_0x26bfb3(++_0x29da48);}(_0x8581,0x163));var _0x1858=function(_0x4cca38,_0x7428a6){_0x4cca38=_0x4cca38-0x0;var _0xd8531d=_0x8581[_0x4cca38];return _0xd8531d;};'use strict';var _=require('lodash');var util=require(_0x1858('0x0'));var moment=require(_0x1858('0x1'));var BPromise=require('bluebird');var rs=require(_0x1858('0x2'));var fs=require('fs');var db=require(_0x1858('0x3'))['db'];var utils=require(_0x1858('0x4'));var logger=require(_0x1858('0x5'))(_0x1858('0x6'));var config=require(_0x1858('0x7'));var jayson=require(_0x1858('0x8'));var client=jayson[_0x1858('0x9')][_0x1858('0xa')]({'port':0x232a});function respondWithRpcPromise(_0xf679a2,_0x3fcb0b,_0x1d4663){return new BPromise(function(_0x3c0f4c,_0x5c8ba0){return client[_0x1858('0xb')](_0xf679a2,_0x1d4663)[_0x1858('0xc')](function(_0x14a55a){logger['info']('VoiceQueuesLog,\x20%s,\x20%s',_0x3fcb0b,_0x1858('0xd'));logger['debug'](_0x1858('0xe'),_0x3fcb0b,_0x1858('0xd'),JSON[_0x1858('0xf')](_0x14a55a));if(_0x14a55a[_0x1858('0x10')]){if(_0x14a55a['error'][_0x1858('0x11')]===0x1f4){logger[_0x1858('0x10')](_0x1858('0x12'),_0x3fcb0b,_0x14a55a[_0x1858('0x10')][_0x1858('0x13')]);return _0x5c8ba0(_0x14a55a[_0x1858('0x10')]['message']);}logger['error']('VoiceQueuesLog,\x20%s,\x20%s',_0x3fcb0b,_0x14a55a['error']['message']);return _0x3c0f4c(_0x14a55a['error'][_0x1858('0x13')]);}else{logger['info']('VoiceQueuesLog,\x20%s,\x20%s',_0x3fcb0b,'request\x20sent');_0x3c0f4c(_0x14a55a[_0x1858('0x14')][_0x1858('0x13')]);}})[_0x1858('0x15')](function(_0x3df737){logger[_0x1858('0x10')](_0x1858('0x12'),_0x3fcb0b,_0x3df737);_0x5c8ba0(_0x3df737);});});}
\ No newline at end of file
index 4e7190f..f8b0519 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa73a=['show','/:id/download','download','downloads','put','/:id','update','delete','destroy','exports','util','path','express','Router','../../components/auth/service','get','isAuthenticated','index','/describe','describe'];(function(_0xf7a42f,_0x5e856a){var _0x47d1a5=function(_0x5f4229){while(--_0x5f4229){_0xf7a42f['push'](_0xf7a42f['shift']());}};_0x47d1a5(++_0x5e856a);}(_0xa73a,0x82));var _0xaa73=function(_0x5311a1,_0x304912){_0x5311a1=_0x5311a1-0x0;var _0x2acb9f=_0xa73a[_0x5311a1];return _0x2acb9f;};'use strict';var multer=require('multer');var util=require(_0xaa73('0x0'));var path=require(_0xaa73('0x1'));var express=require(_0xaa73('0x2'));var router=express[_0xaa73('0x3')]();var auth=require(_0xaa73('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./voiceRecording.controller');router[_0xaa73('0x5')]('/',auth[_0xaa73('0x6')](),controller[_0xaa73('0x7')]);router[_0xaa73('0x5')](_0xaa73('0x8'),auth[_0xaa73('0x6')](),controller[_0xaa73('0x9')]);router['get']('/:id',auth[_0xaa73('0x6')](),controller[_0xaa73('0xa')]);router[_0xaa73('0x5')](_0xaa73('0xb'),auth[_0xaa73('0x6')](),controller[_0xaa73('0xc')]);router['get']('/:id/downloads',controller[_0xaa73('0xd')]);router['post']('/',auth[_0xaa73('0x6')](),controller['create']);router[_0xaa73('0xe')](_0xaa73('0xf'),auth[_0xaa73('0x6')](),controller[_0xaa73('0x10')]);router[_0xaa73('0x11')](_0xaa73('0xf'),auth['isAuthenticated'](),controller[_0xaa73('0x12')]);module[_0xaa73('0x13')]=router;
\ No newline at end of file
+var _0x0c29=['index','/describe','describe','/:id','show','/:id/download','download','/:id/downloads','downloads','post','put','update','delete','destroy','exports','path','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated'];(function(_0x5281fc,_0x319b97){var _0x34a8bf=function(_0x26e9e1){while(--_0x26e9e1){_0x5281fc['push'](_0x5281fc['shift']());}};_0x34a8bf(++_0x319b97);}(_0x0c29,0xb7));var _0x90c2=function(_0xba1760,_0x191969){_0xba1760=_0xba1760-0x0;var _0x1f3143=_0x0c29[_0xba1760];return _0x1f3143;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x90c2('0x0'));var express=require('express');var router=express[_0x90c2('0x1')]();var auth=require(_0x90c2('0x2'));var interaction=require(_0x90c2('0x3'));var config=require('../../config/environment');var controller=require('./voiceRecording.controller');router[_0x90c2('0x4')]('/',auth[_0x90c2('0x5')](),controller[_0x90c2('0x6')]);router[_0x90c2('0x4')](_0x90c2('0x7'),auth[_0x90c2('0x5')](),controller[_0x90c2('0x8')]);router[_0x90c2('0x4')](_0x90c2('0x9'),auth[_0x90c2('0x5')](),controller[_0x90c2('0xa')]);router[_0x90c2('0x4')](_0x90c2('0xb'),auth[_0x90c2('0x5')](),controller[_0x90c2('0xc')]);router[_0x90c2('0x4')](_0x90c2('0xd'),controller[_0x90c2('0xe')]);router[_0x90c2('0xf')]('/',auth[_0x90c2('0x5')](),controller['create']);router[_0x90c2('0x10')](_0x90c2('0x9'),auth['isAuthenticated'](),controller[_0x90c2('0x11')]);router[_0x90c2('0x12')](_0x90c2('0x9'),auth[_0x90c2('0x5')](),controller[_0x90c2('0x13')]);module[_0x90c2('0x14')]=router;
\ No newline at end of file
index f1543d2..fbce378 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdaa7=['sequelize','moment','path','VIRTUAL','getDataValue','value','STRING','setDataValue','channel','membername','split','INTEGER','DATE','createdAt','format','MM-DD-YYYY\x20HH:mm','toString','updatedAt'];(function(_0x11c707,_0x195620){var _0x4275eb=function(_0xcca672){while(--_0xcca672){_0x11c707['push'](_0x11c707['shift']());}};_0x4275eb(++_0x195620);}(_0xdaa7,0x1e6));var _0x7daa=function(_0x2a4095,_0x13f4f0){_0x2a4095=_0x2a4095-0x0;var _0x52eeab=_0xdaa7[_0x2a4095];return _0x52eeab;};'use strict';var Sequelize=require(_0x7daa('0x0'));var moment=require(_0x7daa('0x1'));var path=require(_0x7daa('0x2'));module['exports']={'format':{'type':Sequelize[_0x7daa('0x3')],'get':function(){return this[_0x7daa('0x4')]('value')?path['extname'](this[_0x7daa('0x4')](_0x7daa('0x5'))):undefined;}},'uniqueid':{'type':Sequelize[_0x7daa('0x6')]},'channel':{'type':Sequelize[_0x7daa('0x6')],'set':function(_0x507156){if(_0x507156){this[_0x7daa('0x7')](_0x7daa('0x8'),_0x507156);this['setDataValue'](_0x7daa('0x9'),_0x507156[_0x7daa('0xa')](/\/|-/)[0x1]);}}},'membername':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0x7daa('0x6')]},'calleridname':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize[_0x7daa('0x6')]},'connectedlinename':{'type':Sequelize[_0x7daa('0x6')]},'accountcode':{'type':Sequelize[_0x7daa('0x6')]},'context':{'type':Sequelize[_0x7daa('0x6')]},'exten':{'type':Sequelize['STRING']},'value':{'type':Sequelize[_0x7daa('0x6')]},'type':{'type':Sequelize['STRING']},'rating':{'type':Sequelize[_0x7daa('0xb')],'validate':{'max':0x5,'min':0x0}},'queue':{'type':Sequelize['STRING']},'userDisposition':{'type':Sequelize[_0x7daa('0x6')]},'createdAt':{'type':Sequelize[_0x7daa('0xc')],'get':function(){return moment(this['getDataValue'](_0x7daa('0xd')))[_0x7daa('0xe')](_0x7daa('0xf'))[_0x7daa('0x10')]();}},'updatedAt':{'type':Sequelize[_0x7daa('0xc')],'get':function(){return moment(this['getDataValue'](_0x7daa('0x11')))[_0x7daa('0xe')](_0x7daa('0xf'))[_0x7daa('0x10')]();}}};
\ No newline at end of file
+var _0xf340=['STRING','channel','setDataValue','membername','split','INTEGER','DATE','createdAt','format','toString','updatedAt','MM-DD-YYYY\x20HH:mm','moment','path','VIRTUAL','getDataValue','value','extname'];(function(_0x108189,_0x215861){var _0x42f9af=function(_0x328861){while(--_0x328861){_0x108189['push'](_0x108189['shift']());}};_0x42f9af(++_0x215861);}(_0xf340,0x9c));var _0x0f34=function(_0x20cc9f,_0x3ecb26){_0x20cc9f=_0x20cc9f-0x0;var _0x527573=_0xf340[_0x20cc9f];return _0x527573;};'use strict';var Sequelize=require('sequelize');var moment=require(_0x0f34('0x0'));var path=require(_0x0f34('0x1'));module['exports']={'format':{'type':Sequelize[_0x0f34('0x2')],'get':function(){return this[_0x0f34('0x3')](_0x0f34('0x4'))?path[_0x0f34('0x5')](this[_0x0f34('0x3')](_0x0f34('0x4'))):undefined;}},'uniqueid':{'type':Sequelize['STRING']},'channel':{'type':Sequelize[_0x0f34('0x6')],'set':function(_0x586592){if(_0x586592){this['setDataValue'](_0x0f34('0x7'),_0x586592);this[_0x0f34('0x8')](_0x0f34('0x9'),_0x586592[_0x0f34('0xa')](/\/|-/)[0x1]);}}},'membername':{'type':Sequelize[_0x0f34('0x6')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x0f34('0x6')]},'connectedlinenum':{'type':Sequelize[_0x0f34('0x6')]},'connectedlinename':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0x0f34('0x6')]},'context':{'type':Sequelize[_0x0f34('0x6')]},'exten':{'type':Sequelize[_0x0f34('0x6')]},'value':{'type':Sequelize[_0x0f34('0x6')]},'type':{'type':Sequelize[_0x0f34('0x6')]},'rating':{'type':Sequelize[_0x0f34('0xb')],'validate':{'max':0x5,'min':0x0}},'queue':{'type':Sequelize[_0x0f34('0x6')]},'userDisposition':{'type':Sequelize[_0x0f34('0x6')]},'createdAt':{'type':Sequelize[_0x0f34('0xc')],'get':function(){return moment(this['getDataValue'](_0x0f34('0xd')))[_0x0f34('0xe')]('MM-DD-YYYY\x20HH:mm')[_0x0f34('0xf')]();}},'updatedAt':{'type':Sequelize[_0x0f34('0xc')],'get':function(){return moment(this[_0x0f34('0x3')](_0x0f34('0x10')))[_0x0f34('0xe')](_0x0f34('0x11'))[_0x0f34('0xf')]();}}};
\ No newline at end of file
index 4a7b490..16a6681 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xadb5=['querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','offset','limit','set','Content-Range','json','apply','save','update','destroy','then','error','stack','name','send','index','VoiceRecording','rawAttributes','differenceBy','keys','format','query','dateStart','dateEnd','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','day','merge','filter','count','includeAll','include','rows','catch','show','length','find','create','body','params','describe','type','uniqueid','value','decryptFile','secrets','recording','existsSync','Sequelize','ValidationError','VoiceRecording\x20not\x20found','filename','extname','unlink','download','../../components/encryptor','sequelize','col','token','$and','push','%s.cypher','request-promise','bluebird','mustache','util','sox','to-csv','ejs','squel','crypto','jsforce','desk.js'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xadb5,0xad));var _0x5adb=function(_0x11c818,_0x521b0f){_0x11c818=_0x11c818-0x0;var _0x3a43d0=_0xadb5[_0x11c818];return _0x3a43d0;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0x5adb('0x0'));var moment=require('moment');var BPromise=require(_0x5adb('0x1'));var Mustache=require(_0x5adb('0x2'));var util=require(_0x5adb('0x3'));var path=require('path');var sox=require(_0x5adb('0x4'));var csv=require(_0x5adb('0x5'));var ejs=require(_0x5adb('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x5adb('0x7'));var crypto=require(_0x5adb('0x8'));var jsforce=require(_0x5adb('0x9'));var deskjs=require(_0x5adb('0xa'));var toCsv=require(_0x5adb('0x5'));var querystring=require(_0x5adb('0xb'));var Papa=require(_0x5adb('0xc'));var qs=require(_0x5adb('0xd'));var logger=require(_0x5adb('0xe'))(_0x5adb('0xf'));var utils=require(_0x5adb('0x10'));var config=require(_0x5adb('0x11'));var db=require(_0x5adb('0x12'))['db'];function respondWithStatusCode(_0x275428,_0x563d86){_0x563d86=_0x563d86||0xcc;return function(_0x4c268d){if(_0x4c268d){return _0x275428[_0x5adb('0x13')](_0x563d86);}return _0x275428[_0x5adb('0x14')](_0x563d86)[_0x5adb('0x15')]();};}function respondWithResult(_0x53b772,_0x29f0d5){_0x29f0d5=_0x29f0d5||0xc8;return function(_0x56012f){if(_0x56012f){return _0x53b772[_0x5adb('0x14')](_0x29f0d5)['json'](_0x56012f);}};}function respondWithFilteredResult(_0x8cfcc6,_0x39a0b3){return function(_0x44abe3){if(_0x44abe3){var _0x5c929a=_0x44abe3['count'],_0x2a545b=_0x39a0b3[_0x5adb('0x16')],_0x34af2c=_0x39a0b3['offset']+_0x39a0b3[_0x5adb('0x17')],_0xf82f72;if(_0x34af2c>=_0x5c929a){_0x34af2c=_0x5c929a;_0xf82f72=0xc8;}else{_0xf82f72=0xce;}_0x8cfcc6[_0x5adb('0x14')](_0xf82f72);return _0x8cfcc6[_0x5adb('0x18')](_0x5adb('0x19'),_0x2a545b+'-'+_0x34af2c+'/'+_0x5c929a)[_0x5adb('0x1a')](_0x44abe3);}return null;};}function patchUpdates(_0x39d24d){return function(_0xa29dc){try{jsonpatch[_0x5adb('0x1b')](_0xa29dc,_0x39d24d,!![]);}catch(_0xb953a6){return BPromise['reject'](_0xb953a6);}return _0xa29dc[_0x5adb('0x1c')]();};}function saveUpdates(_0x5de028,_0x1d9e86){return function(_0x558f76){if(_0x558f76){return _0x558f76[_0x5adb('0x1d')](_0x5de028)['then'](function(_0x5e218c){return _0x5e218c;});}return null;};}function removeEntity(_0x1fbaa5,_0x1bed20){return function(_0x438671){if(_0x438671){return _0x438671[_0x5adb('0x1e')]()[_0x5adb('0x1f')](function(){_0x1fbaa5['status'](0xcc)[_0x5adb('0x15')]();});}};}function handleEntityNotFound(_0x5c296e,_0x4e9f16){return function(_0x3754cc){if(!_0x3754cc){_0x5c296e[_0x5adb('0x13')](0x194);}return _0x3754cc;};}function handleError(_0x1a38d3,_0x1a8014){_0x1a8014=_0x1a8014||0x1f4;return function(_0x1e9ccf){logger[_0x5adb('0x20')](_0x1e9ccf[_0x5adb('0x21')]);if(_0x1e9ccf['name']){delete _0x1e9ccf[_0x5adb('0x22')];}_0x1a38d3[_0x5adb('0x14')](_0x1a8014)[_0x5adb('0x23')](_0x1e9ccf);};}exports[_0x5adb('0x24')]=function(_0xeb556c,_0x49f203){var _0x2fee18={},_0x2e1e63={},_0x5aed76={'count':0x0,'rows':[]};var _0x1feecf=db[_0x5adb('0x25')][_0x5adb('0x26')];_0x2e1e63['model']=_[_0x5adb('0x27')](_[_0x5adb('0x28')](_0x1feecf),[_0x5adb('0x29')]);var _0x2c64a3={'dateStart':_0xeb556c[_0x5adb('0x2a')][_0x5adb('0x2b')],'dateEnd':_0xeb556c['query']['dateEnd']};delete _0xeb556c['query'][_0x5adb('0x2b')];delete _0xeb556c[_0x5adb('0x2a')][_0x5adb('0x2c')];_0x2e1e63[_0x5adb('0x2a')]=_[_0x5adb('0x28')](_0xeb556c['query']);_0x2e1e63[_0x5adb('0x2d')]=_[_0x5adb('0x2e')](_0x2e1e63[_0x5adb('0x2f')],_0x2e1e63[_0x5adb('0x2a')]);_0x2fee18[_0x5adb('0x30')]=_[_0x5adb('0x2e')](_0x2e1e63[_0x5adb('0x2f')],qs[_0x5adb('0x31')](_0xeb556c[_0x5adb('0x2a')][_0x5adb('0x31')]));_0x2fee18['attributes']=_0x2fee18[_0x5adb('0x30')]['length']?_0x2fee18[_0x5adb('0x30')]:_0x2e1e63[_0x5adb('0x2f')];if(!_0xeb556c['query'][_0x5adb('0x32')](_0x5adb('0x33'))){_0x2fee18[_0x5adb('0x17')]=qs['limit'](_0xeb556c[_0x5adb('0x2a')][_0x5adb('0x17')]);_0x2fee18['offset']=qs['offset'](_0xeb556c[_0x5adb('0x2a')]['offset']);}_0x2fee18[_0x5adb('0x34')]=qs[_0x5adb('0x35')](_0xeb556c[_0x5adb('0x2a')][_0x5adb('0x35')]);_0x2fee18[_0x5adb('0x36')]=qs['filters'](_[_0x5adb('0x37')](_0xeb556c[_0x5adb('0x2a')],_0x2e1e63[_0x5adb('0x2d')]));if(_0x2c64a3['dateStart']){if(_0x2c64a3['dateEnd']){_0x2c64a3[_0x5adb('0x2c')]=moment(_0x2c64a3[_0x5adb('0x2c')])['add'](0x1,_0x5adb('0x38'));}else{_0x2c64a3['dateEnd']=moment(_0x2c64a3[_0x5adb('0x2b')])['add'](0x1,_0x5adb('0x38'));}_['merge'](_0x2fee18[_0x5adb('0x36')],{'createdAt':{'$gte':_0x2c64a3[_0x5adb('0x2b')],'$lte':_0x2c64a3['dateEnd']}});}if(_0xeb556c[_0x5adb('0x2a')]['filter']){_0x2fee18[_0x5adb('0x36')]=_[_0x5adb('0x39')](_0x2fee18[_0x5adb('0x36')],{'$or':_['map'](_0x2fee18[_0x5adb('0x30')],function(_0x2b3b0b){var _0xcdaf8e={};_0xcdaf8e[_0x2b3b0b]={'$like':'%'+_0xeb556c[_0x5adb('0x2a')][_0x5adb('0x3a')]+'%'};return _0xcdaf8e;})});}_0x2fee18=_['merge']({},_0x2fee18,_0xeb556c['options']);var _0x4f491a={'where':_0x2fee18['where']};return db[_0x5adb('0x25')][_0x5adb('0x3b')](_0x4f491a)[_0x5adb('0x1f')](function(_0x399489){_0x5aed76[_0x5adb('0x3b')]=_0x399489;if(_0xeb556c[_0x5adb('0x2a')][_0x5adb('0x3c')]){_0x2fee18[_0x5adb('0x3d')]=[{'all':!![]}];}return db['VoiceRecording']['findAll'](_0x2fee18);})[_0x5adb('0x1f')](function(_0x48eb26){_0x5aed76[_0x5adb('0x3e')]=_0x48eb26;return _0x5aed76;})[_0x5adb('0x1f')](respondWithFilteredResult(_0x49f203,_0x2fee18))[_0x5adb('0x3f')](handleError(_0x49f203,null));};exports[_0x5adb('0x40')]=function(_0xdfecfd,_0x522ee5){var _0x43d320={'raw':![],'where':{'id':_0xdfecfd['params']['id']}},_0x565b03={};_0x565b03[_0x5adb('0x2f')]=_[_0x5adb('0x28')](db['VoiceRecording'][_0x5adb('0x26')]);_0x565b03[_0x5adb('0x2a')]=_[_0x5adb('0x28')](_0xdfecfd[_0x5adb('0x2a')]);_0x565b03[_0x5adb('0x2d')]=_[_0x5adb('0x2e')](_0x565b03[_0x5adb('0x2f')],_0x565b03['query']);_0x43d320['attributes']=_[_0x5adb('0x2e')](_0x565b03[_0x5adb('0x2f')],qs[_0x5adb('0x31')](_0xdfecfd[_0x5adb('0x2a')]['fields']));_0x43d320['attributes']=_0x43d320[_0x5adb('0x30')][_0x5adb('0x41')]?_0x43d320[_0x5adb('0x30')]:_0x565b03[_0x5adb('0x2f')];if(_0xdfecfd[_0x5adb('0x2a')]['includeAll']){_0x43d320[_0x5adb('0x3d')]=[{'all':!![]}];}_0x43d320=_[_0x5adb('0x39')]({},_0x43d320,_0xdfecfd['options']);return db[_0x5adb('0x25')][_0x5adb('0x42')](_0x43d320)[_0x5adb('0x1f')](handleEntityNotFound(_0x522ee5,null))[_0x5adb('0x1f')](respondWithResult(_0x522ee5,null))[_0x5adb('0x3f')](handleError(_0x522ee5,null));};exports[_0x5adb('0x43')]=function(_0x39840e,_0x54252){return db['VoiceRecording'][_0x5adb('0x43')](_0x39840e['body'],{})['then'](respondWithResult(_0x54252,0xc9))['catch'](handleError(_0x54252,null));};exports[_0x5adb('0x1d')]=function(_0x3fbac8,_0x207a81){if(_0x3fbac8['body']['id']){delete _0x3fbac8[_0x5adb('0x44')]['id'];}return db['VoiceRecording'][_0x5adb('0x42')]({'where':{'id':_0x3fbac8[_0x5adb('0x45')]['id']}})[_0x5adb('0x1f')](handleEntityNotFound(_0x207a81,null))['then'](saveUpdates(_0x3fbac8[_0x5adb('0x44')],null))['then'](respondWithResult(_0x207a81,null))[_0x5adb('0x3f')](handleError(_0x207a81,null));};exports[_0x5adb('0x1e')]=function(_0x55c535,_0x2402a3){return db[_0x5adb('0x25')][_0x5adb('0x42')]({'where':{'id':_0x55c535[_0x5adb('0x45')]['id']}})[_0x5adb('0x1f')](handleEntityNotFound(_0x2402a3,null))['then'](removeEntity(_0x2402a3,null))[_0x5adb('0x3f')](handleError(_0x2402a3,null));};exports[_0x5adb('0x46')]=function(_0x3bcf6f,_0x1b0938){return db['VoiceRecording'][_0x5adb('0x46')]()[_0x5adb('0x1f')](respondWithResult(_0x1b0938,null))[_0x5adb('0x3f')](handleError(_0x1b0938,null));};exports['download']=function(_0x2b34a8,_0xd0e5b7,_0x444a6c){var _0xfd3471=require('../../components/encryptor');var _0x3f5c8e=![];var _0x91775c={};if(_0x2b34a8[_0x5adb('0x2a')][_0x5adb('0x47')]&&_0x2b34a8[_0x5adb('0x2a')]['type']===_0x5adb('0x48')){_0x91775c['uniqueid']=_0x2b34a8[_0x5adb('0x45')]['id'];}else{_0x91775c['id']=_0x2b34a8['params']['id'];}return db[_0x5adb('0x25')][_0x5adb('0x42')]({'where':_0x91775c,'attributes':['id',_0x5adb('0x49')],'raw':!![]})[_0x5adb('0x1f')](handleEntityNotFound(_0xd0e5b7,null))['then'](function(_0x18f95c){if(_0x18f95c){var _0x229ae2=util[_0x5adb('0x29')]('%s.cypher',_0x18f95c['value']);if(fs['existsSync'](_0x229ae2)){_0x3f5c8e=!![];return _0xfd3471[_0x5adb('0x4a')](_0x229ae2,_0x18f95c[_0x5adb('0x49')],config[_0x5adb('0x4b')][_0x5adb('0x4c')])[_0x5adb('0x1f')](function(){return _0x18f95c;});}return _0x18f95c;}})[_0x5adb('0x1f')](function(_0x204b9b){if(_0x204b9b){if(!fs[_0x5adb('0x4d')](_0x204b9b[_0x5adb('0x49')])){throw new db[(_0x5adb('0x4e'))][(_0x5adb('0x4f'))](_0x5adb('0x50'));}if(_0x204b9b[_0x5adb('0x51')]){return _0xd0e5b7['download'](_0x204b9b['value'],_0x204b9b[_0x5adb('0x51')]+path[_0x5adb('0x52')](_0x204b9b[_0x5adb('0x49')]),function(){if(_0x3f5c8e){fs[_0x5adb('0x53')](_0x204b9b['value']);}});}else{return _0xd0e5b7[_0x5adb('0x54')](_0x204b9b[_0x5adb('0x49')],function(_0x5d2d2f){if(_0x3f5c8e){fs[_0x5adb('0x53')](_0x204b9b[_0x5adb('0x49')]);}});}}})[_0x5adb('0x3f')](handleError(_0xd0e5b7,null));};exports['downloads']=function(_0x30d185,_0x409357,_0x19df2f){var _0x30c92c=require(_0x5adb('0x55'));var _0x428019=![];var _0x513f26={'$and':[db[_0x5adb('0x56')][_0x5adb('0x36')](db[_0x5adb('0x56')]['fn']('MD5',db[_0x5adb('0x56')][_0x5adb('0x57')](_0x5adb('0x48'))),_0x30d185['query'][_0x5adb('0x58')])]};if(_0x30d185['query'][_0x5adb('0x47')]&&_0x30d185[_0x5adb('0x2a')][_0x5adb('0x47')]==='uniqueid'){_0x513f26[_0x5adb('0x59')][_0x5adb('0x5a')]({'uniqueid':_0x30d185['params']['id']});}else{_0x513f26[_0x5adb('0x59')][_0x5adb('0x5a')]({'id':_0x30d185[_0x5adb('0x45')]['id']});}return db[_0x5adb('0x25')]['find']({'where':_0x513f26,'attributes':['id',_0x5adb('0x49')],'raw':!![]})[_0x5adb('0x1f')](handleEntityNotFound(_0x409357,null))[_0x5adb('0x1f')](function(_0x16716e){if(_0x16716e){var _0x5b7556=util['format'](_0x5adb('0x5b'),_0x16716e['value']);if(fs['existsSync'](_0x5b7556)){_0x428019=!![];return _0x30c92c['decryptFile'](_0x5b7556,_0x16716e[_0x5adb('0x49')],config[_0x5adb('0x4b')]['recording'])[_0x5adb('0x1f')](function(){return _0x16716e;});}return _0x16716e;}})[_0x5adb('0x1f')](function(_0xcdde17){if(_0xcdde17){if(!fs[_0x5adb('0x4d')](_0xcdde17[_0x5adb('0x49')])){throw new db[(_0x5adb('0x4e'))][(_0x5adb('0x4f'))](_0x5adb('0x50'));}if(_0xcdde17['filename']){return _0x409357['download'](_0xcdde17['value'],_0xcdde17[_0x5adb('0x51')]+path[_0x5adb('0x52')](_0xcdde17[_0x5adb('0x49')]),function(){if(_0x428019){fs[_0x5adb('0x53')](_0xcdde17[_0x5adb('0x49')]);}});}else{return _0x409357[_0x5adb('0x54')](_0xcdde17[_0x5adb('0x49')],function(_0x25f761){if(_0x428019){fs['unlink'](_0xcdde17['value']);}});}}})[_0x5adb('0x3f')](handleError(_0x409357,null));};
\ No newline at end of file
+var _0xc4aa=['destroy','error','stack','name','send','index','VoiceRecording','rawAttributes','model','differenceBy','keys','format','query','dateStart','dateEnd','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','add','merge','filter','options','findAll','rows','catch','show','params','includeAll','include','find','create','body','describe','type','uniqueid','value','%s.cypher','existsSync','decryptFile','secrets','recording','Sequelize','ValidationError','VoiceRecording\x20not\x20found','download','filename','unlink','downloads','../../components/encryptor','sequelize','MD5','col','token','$and','push','extname','fast-json-patch','request-promise','moment','bluebird','mustache','util','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','end','status','count','offset','limit','Content-Range','json','apply','reject','save','update','then'];(function(_0x46326d,_0x4547ed){var _0x4ed815=function(_0x27a802){while(--_0x27a802){_0x46326d['push'](_0x46326d['shift']());}};_0x4ed815(++_0x4547ed);}(_0xc4aa,0x1b7));var _0xac4a=function(_0xaa1b3e,_0x47d976){_0xaa1b3e=_0xaa1b3e-0x0;var _0x454d7d=_0xc4aa[_0xaa1b3e];return _0x454d7d;};'use strict';var jsonpatch=require(_0xac4a('0x0'));var rp=require(_0xac4a('0x1'));var moment=require(_0xac4a('0x2'));var BPromise=require(_0xac4a('0x3'));var Mustache=require(_0xac4a('0x4'));var util=require(_0xac4a('0x5'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xac4a('0x6'));var fs=require('fs');var _=require(_0xac4a('0x7'));var squel=require(_0xac4a('0x8'));var crypto=require(_0xac4a('0x9'));var jsforce=require(_0xac4a('0xa'));var deskjs=require(_0xac4a('0xb'));var toCsv=require(_0xac4a('0xc'));var querystring=require(_0xac4a('0xd'));var Papa=require('papaparse');var qs=require('../../components/parsers/qs');var logger=require(_0xac4a('0xe'))(_0xac4a('0xf'));var utils=require(_0xac4a('0x10'));var config=require('../../config/environment');var db=require(_0xac4a('0x11'))['db'];function respondWithStatusCode(_0x3a82de,_0x3e64f5){_0x3e64f5=_0x3e64f5||0xcc;return function(_0x4d4acc){if(_0x4d4acc){return _0x3a82de[_0xac4a('0x12')](_0x3e64f5);}return _0x3a82de['status'](_0x3e64f5)[_0xac4a('0x13')]();};}function respondWithResult(_0x4855b6,_0x333ca5){_0x333ca5=_0x333ca5||0xc8;return function(_0x2a0776){if(_0x2a0776){return _0x4855b6[_0xac4a('0x14')](_0x333ca5)['json'](_0x2a0776);}};}function respondWithFilteredResult(_0x21a79,_0x68424a){return function(_0x247b78){if(_0x247b78){var _0x6e00d4=_0x247b78[_0xac4a('0x15')],_0x1b4313=_0x68424a[_0xac4a('0x16')],_0x3b71c0=_0x68424a[_0xac4a('0x16')]+_0x68424a[_0xac4a('0x17')],_0x34bc01;if(_0x3b71c0>=_0x6e00d4){_0x3b71c0=_0x6e00d4;_0x34bc01=0xc8;}else{_0x34bc01=0xce;}_0x21a79[_0xac4a('0x14')](_0x34bc01);return _0x21a79['set'](_0xac4a('0x18'),_0x1b4313+'-'+_0x3b71c0+'/'+_0x6e00d4)[_0xac4a('0x19')](_0x247b78);}return null;};}function patchUpdates(_0x23eb66){return function(_0x144553){try{jsonpatch[_0xac4a('0x1a')](_0x144553,_0x23eb66,!![]);}catch(_0x387a54){return BPromise[_0xac4a('0x1b')](_0x387a54);}return _0x144553[_0xac4a('0x1c')]();};}function saveUpdates(_0x546c5d,_0x5ac21e){return function(_0x21a729){if(_0x21a729){return _0x21a729[_0xac4a('0x1d')](_0x546c5d)[_0xac4a('0x1e')](function(_0x4d837c){return _0x4d837c;});}return null;};}function removeEntity(_0x39e83e,_0x15c223){return function(_0x3752e4){if(_0x3752e4){return _0x3752e4[_0xac4a('0x1f')]()[_0xac4a('0x1e')](function(){_0x39e83e[_0xac4a('0x14')](0xcc)[_0xac4a('0x13')]();});}};}function handleEntityNotFound(_0x3ca790,_0x534092){return function(_0x3d8f0a){if(!_0x3d8f0a){_0x3ca790[_0xac4a('0x12')](0x194);}return _0x3d8f0a;};}function handleError(_0x599787,_0x3d7ce0){_0x3d7ce0=_0x3d7ce0||0x1f4;return function(_0x4169c0){logger[_0xac4a('0x20')](_0x4169c0[_0xac4a('0x21')]);if(_0x4169c0['name']){delete _0x4169c0[_0xac4a('0x22')];}_0x599787[_0xac4a('0x14')](_0x3d7ce0)[_0xac4a('0x23')](_0x4169c0);};}exports[_0xac4a('0x24')]=function(_0x594f36,_0x2b0dc2){var _0x222507={},_0x36054a={},_0x3e2c69={'count':0x0,'rows':[]};var _0x3bc318=db[_0xac4a('0x25')][_0xac4a('0x26')];_0x36054a[_0xac4a('0x27')]=_[_0xac4a('0x28')](_[_0xac4a('0x29')](_0x3bc318),[_0xac4a('0x2a')]);var _0x4e17ce={'dateStart':_0x594f36[_0xac4a('0x2b')][_0xac4a('0x2c')],'dateEnd':_0x594f36[_0xac4a('0x2b')][_0xac4a('0x2d')]};delete _0x594f36[_0xac4a('0x2b')]['dateStart'];delete _0x594f36['query'][_0xac4a('0x2d')];_0x36054a[_0xac4a('0x2b')]=_[_0xac4a('0x29')](_0x594f36['query']);_0x36054a['filters']=_[_0xac4a('0x2e')](_0x36054a[_0xac4a('0x27')],_0x36054a[_0xac4a('0x2b')]);_0x222507[_0xac4a('0x2f')]=_[_0xac4a('0x2e')](_0x36054a['model'],qs[_0xac4a('0x30')](_0x594f36['query'][_0xac4a('0x30')]));_0x222507['attributes']=_0x222507[_0xac4a('0x2f')][_0xac4a('0x31')]?_0x222507[_0xac4a('0x2f')]:_0x36054a[_0xac4a('0x27')];if(!_0x594f36[_0xac4a('0x2b')][_0xac4a('0x32')](_0xac4a('0x33'))){_0x222507[_0xac4a('0x17')]=qs[_0xac4a('0x17')](_0x594f36[_0xac4a('0x2b')][_0xac4a('0x17')]);_0x222507[_0xac4a('0x16')]=qs[_0xac4a('0x16')](_0x594f36[_0xac4a('0x2b')]['offset']);}_0x222507[_0xac4a('0x34')]=qs[_0xac4a('0x35')](_0x594f36['query'][_0xac4a('0x35')]);_0x222507[_0xac4a('0x36')]=qs['filters'](_['pick'](_0x594f36[_0xac4a('0x2b')],_0x36054a[_0xac4a('0x37')]));if(_0x4e17ce[_0xac4a('0x2c')]){if(_0x4e17ce[_0xac4a('0x2d')]){_0x4e17ce['dateEnd']=moment(_0x4e17ce[_0xac4a('0x2d')])[_0xac4a('0x38')](0x1,'day');}else{_0x4e17ce[_0xac4a('0x2d')]=moment(_0x4e17ce[_0xac4a('0x2c')])[_0xac4a('0x38')](0x1,'day');}_[_0xac4a('0x39')](_0x222507[_0xac4a('0x36')],{'createdAt':{'$gte':_0x4e17ce[_0xac4a('0x2c')],'$lte':_0x4e17ce['dateEnd']}});}if(_0x594f36[_0xac4a('0x2b')][_0xac4a('0x3a')]){_0x222507['where']=_['merge'](_0x222507[_0xac4a('0x36')],{'$or':_['map'](_0x222507['attributes'],function(_0x5f0af0){var _0x4fee3a={};_0x4fee3a[_0x5f0af0]={'$like':'%'+_0x594f36[_0xac4a('0x2b')][_0xac4a('0x3a')]+'%'};return _0x4fee3a;})});}_0x222507=_[_0xac4a('0x39')]({},_0x222507,_0x594f36[_0xac4a('0x3b')]);var _0x2bdb21={'where':_0x222507[_0xac4a('0x36')]};return db[_0xac4a('0x25')][_0xac4a('0x15')](_0x2bdb21)[_0xac4a('0x1e')](function(_0x1f7721){_0x3e2c69[_0xac4a('0x15')]=_0x1f7721;if(_0x594f36[_0xac4a('0x2b')]['includeAll']){_0x222507['include']=[{'all':!![]}];}return db['VoiceRecording'][_0xac4a('0x3c')](_0x222507);})[_0xac4a('0x1e')](function(_0x14e80b){_0x3e2c69[_0xac4a('0x3d')]=_0x14e80b;return _0x3e2c69;})[_0xac4a('0x1e')](respondWithFilteredResult(_0x2b0dc2,_0x222507))[_0xac4a('0x3e')](handleError(_0x2b0dc2,null));};exports[_0xac4a('0x3f')]=function(_0x3441f2,_0x3e9973){var _0x3edb19={'raw':![],'where':{'id':_0x3441f2[_0xac4a('0x40')]['id']}},_0x561cb7={};_0x561cb7[_0xac4a('0x27')]=_[_0xac4a('0x29')](db[_0xac4a('0x25')][_0xac4a('0x26')]);_0x561cb7['query']=_[_0xac4a('0x29')](_0x3441f2[_0xac4a('0x2b')]);_0x561cb7['filters']=_[_0xac4a('0x2e')](_0x561cb7['model'],_0x561cb7[_0xac4a('0x2b')]);_0x3edb19[_0xac4a('0x2f')]=_[_0xac4a('0x2e')](_0x561cb7[_0xac4a('0x27')],qs[_0xac4a('0x30')](_0x3441f2[_0xac4a('0x2b')][_0xac4a('0x30')]));_0x3edb19[_0xac4a('0x2f')]=_0x3edb19[_0xac4a('0x2f')][_0xac4a('0x31')]?_0x3edb19[_0xac4a('0x2f')]:_0x561cb7[_0xac4a('0x27')];if(_0x3441f2['query'][_0xac4a('0x41')]){_0x3edb19[_0xac4a('0x42')]=[{'all':!![]}];}_0x3edb19=_[_0xac4a('0x39')]({},_0x3edb19,_0x3441f2['options']);return db[_0xac4a('0x25')][_0xac4a('0x43')](_0x3edb19)['then'](handleEntityNotFound(_0x3e9973,null))[_0xac4a('0x1e')](respondWithResult(_0x3e9973,null))['catch'](handleError(_0x3e9973,null));};exports[_0xac4a('0x44')]=function(_0xe620f6,_0x136a65){return db['VoiceRecording']['create'](_0xe620f6[_0xac4a('0x45')],{})['then'](respondWithResult(_0x136a65,0xc9))[_0xac4a('0x3e')](handleError(_0x136a65,null));};exports['update']=function(_0x3d2aaf,_0x530bbb){if(_0x3d2aaf[_0xac4a('0x45')]['id']){delete _0x3d2aaf[_0xac4a('0x45')]['id'];}return db[_0xac4a('0x25')][_0xac4a('0x43')]({'where':{'id':_0x3d2aaf['params']['id']}})[_0xac4a('0x1e')](handleEntityNotFound(_0x530bbb,null))[_0xac4a('0x1e')](saveUpdates(_0x3d2aaf[_0xac4a('0x45')],null))[_0xac4a('0x1e')](respondWithResult(_0x530bbb,null))[_0xac4a('0x3e')](handleError(_0x530bbb,null));};exports[_0xac4a('0x1f')]=function(_0x187306,_0x4e6e19){return db[_0xac4a('0x25')][_0xac4a('0x43')]({'where':{'id':_0x187306['params']['id']}})[_0xac4a('0x1e')](handleEntityNotFound(_0x4e6e19,null))[_0xac4a('0x1e')](removeEntity(_0x4e6e19,null))[_0xac4a('0x3e')](handleError(_0x4e6e19,null));};exports[_0xac4a('0x46')]=function(_0x4bb2fb,_0x3bd846){return db[_0xac4a('0x25')][_0xac4a('0x46')]()[_0xac4a('0x1e')](respondWithResult(_0x3bd846,null))[_0xac4a('0x3e')](handleError(_0x3bd846,null));};exports['download']=function(_0x179373,_0x564b10,_0x307441){var _0x2c04af=require('../../components/encryptor');var _0x5c9c49=![];var _0x437466={};if(_0x179373[_0xac4a('0x2b')]['type']&&_0x179373[_0xac4a('0x2b')][_0xac4a('0x47')]===_0xac4a('0x48')){_0x437466[_0xac4a('0x48')]=_0x179373['params']['id'];}else{_0x437466['id']=_0x179373[_0xac4a('0x40')]['id'];}return db[_0xac4a('0x25')][_0xac4a('0x43')]({'where':_0x437466,'attributes':['id',_0xac4a('0x49')],'raw':!![]})[_0xac4a('0x1e')](handleEntityNotFound(_0x564b10,null))[_0xac4a('0x1e')](function(_0x36179a){if(_0x36179a){var _0x487a44=util[_0xac4a('0x2a')](_0xac4a('0x4a'),_0x36179a[_0xac4a('0x49')]);if(fs[_0xac4a('0x4b')](_0x487a44)){_0x5c9c49=!![];return _0x2c04af[_0xac4a('0x4c')](_0x487a44,_0x36179a[_0xac4a('0x49')],config[_0xac4a('0x4d')][_0xac4a('0x4e')])[_0xac4a('0x1e')](function(){return _0x36179a;});}return _0x36179a;}})[_0xac4a('0x1e')](function(_0x3b175a){if(_0x3b175a){if(!fs[_0xac4a('0x4b')](_0x3b175a[_0xac4a('0x49')])){throw new db[(_0xac4a('0x4f'))][(_0xac4a('0x50'))](_0xac4a('0x51'));}if(_0x3b175a['filename']){return _0x564b10[_0xac4a('0x52')](_0x3b175a['value'],_0x3b175a[_0xac4a('0x53')]+path['extname'](_0x3b175a[_0xac4a('0x49')]),function(){if(_0x5c9c49){fs['unlink'](_0x3b175a[_0xac4a('0x49')]);}});}else{return _0x564b10['download'](_0x3b175a['value'],function(_0x52c957){if(_0x5c9c49){fs[_0xac4a('0x54')](_0x3b175a[_0xac4a('0x49')]);}});}}})[_0xac4a('0x3e')](handleError(_0x564b10,null));};exports[_0xac4a('0x55')]=function(_0xb7b884,_0x592a4b,_0x1e1ffa){var _0x50dece=require(_0xac4a('0x56'));var _0x5d03e5=![];var _0x347880={'$and':[db[_0xac4a('0x57')][_0xac4a('0x36')](db[_0xac4a('0x57')]['fn'](_0xac4a('0x58'),db[_0xac4a('0x57')][_0xac4a('0x59')](_0xac4a('0x48'))),_0xb7b884[_0xac4a('0x2b')][_0xac4a('0x5a')])]};if(_0xb7b884[_0xac4a('0x2b')][_0xac4a('0x47')]&&_0xb7b884[_0xac4a('0x2b')][_0xac4a('0x47')]===_0xac4a('0x48')){_0x347880[_0xac4a('0x5b')][_0xac4a('0x5c')]({'uniqueid':_0xb7b884['params']['id']});}else{_0x347880[_0xac4a('0x5b')][_0xac4a('0x5c')]({'id':_0xb7b884['params']['id']});}return db[_0xac4a('0x25')][_0xac4a('0x43')]({'where':_0x347880,'attributes':['id',_0xac4a('0x49')],'raw':!![]})[_0xac4a('0x1e')](handleEntityNotFound(_0x592a4b,null))[_0xac4a('0x1e')](function(_0x4d1440){if(_0x4d1440){var _0x47c6d8=util[_0xac4a('0x2a')](_0xac4a('0x4a'),_0x4d1440[_0xac4a('0x49')]);if(fs[_0xac4a('0x4b')](_0x47c6d8)){_0x5d03e5=!![];return _0x50dece[_0xac4a('0x4c')](_0x47c6d8,_0x4d1440[_0xac4a('0x49')],config[_0xac4a('0x4d')][_0xac4a('0x4e')])[_0xac4a('0x1e')](function(){return _0x4d1440;});}return _0x4d1440;}})[_0xac4a('0x1e')](function(_0x278c09){if(_0x278c09){if(!fs['existsSync'](_0x278c09['value'])){throw new db[(_0xac4a('0x4f'))][(_0xac4a('0x50'))](_0xac4a('0x51'));}if(_0x278c09[_0xac4a('0x53')]){return _0x592a4b[_0xac4a('0x52')](_0x278c09[_0xac4a('0x49')],_0x278c09[_0xac4a('0x53')]+path[_0xac4a('0x5d')](_0x278c09[_0xac4a('0x49')]),function(){if(_0x5d03e5){fs[_0xac4a('0x54')](_0x278c09[_0xac4a('0x49')]);}});}else{return _0x592a4b[_0xac4a('0x52')](_0x278c09['value'],function(_0x13c854){if(_0x5d03e5){fs[_0xac4a('0x54')](_0x278c09[_0xac4a('0x49')]);}});}}})[_0xac4a('0x3e')](handleError(_0x592a4b,null));};
\ No newline at end of file
index d26357d..934a46e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfaf6=['exports','define','VoiceRecording','voice_recordings','uniqueid','util','../../config/logger','moment','bluebird','./voiceRecording.attributes'];(function(_0x487c94,_0x24d978){var _0x3c8549=function(_0x4ed680){while(--_0x4ed680){_0x487c94['push'](_0x487c94['shift']());}};_0x3c8549(++_0x24d978);}(_0xfaf6,0x16d));var _0x6faf=function(_0x122cc7,_0x26d629){_0x122cc7=_0x122cc7-0x0;var _0x178602=_0xfaf6[_0x122cc7];return _0x178602;};'use strict';var _=require('lodash');var util=require(_0x6faf('0x0'));var logger=require(_0x6faf('0x1'))('api');var moment=require(_0x6faf('0x2'));var BPromise=require(_0x6faf('0x3'));var rp=require('request-promise');var attributes=require(_0x6faf('0x4'));module[_0x6faf('0x5')]=function(_0x1b1fb7,_0x584e09){return _0x1b1fb7[_0x6faf('0x6')](_0x6faf('0x7'),attributes,{'tableName':_0x6faf('0x8'),'paranoid':![],'indexes':[{'name':_0x6faf('0x9'),'fields':[_0x6faf('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xf425=['VoiceRecording','voice_recordings','uniqueid','lodash','util','moment','bluebird','request-promise','exports','define'];(function(_0xa394b4,_0x4695e4){var _0x1ee89b=function(_0x12e5e9){while(--_0x12e5e9){_0xa394b4['push'](_0xa394b4['shift']());}};_0x1ee89b(++_0x4695e4);}(_0xf425,0x19d));var _0x5f42=function(_0x3e7653,_0x414e83){_0x3e7653=_0x3e7653-0x0;var _0x2d518d=_0xf425[_0x3e7653];return _0x2d518d;};'use strict';var _=require(_0x5f42('0x0'));var util=require(_0x5f42('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x5f42('0x2'));var BPromise=require(_0x5f42('0x3'));var rp=require(_0x5f42('0x4'));var attributes=require('./voiceRecording.attributes');module[_0x5f42('0x5')]=function(_0x51ca16,_0x5ce53d){return _0x51ca16[_0x5f42('0x6')](_0x5f42('0x7'),attributes,{'tableName':_0x5f42('0x8'),'paranoid':![],'indexes':[{'name':_0x5f42('0x9'),'fields':[_0x5f42('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index ef30da4..e19e61d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ef1=['callRecordingEncryption','value','format','%s.cypher','encryptFile','secrets','recording','unlink','CreateVoiceRecording\x20file\x20encrypted','CreateVoiceRecording','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','VoiceRecording,\x20%s,\x20%s,\x20%s','stringify','error','VoiceRecording,\x20%s,\x20%s','message','result','catch','UpdateVoiceRecording','VoiceRecording','update','body','options','where','attributes','limit','debug','../../components/encryptor','Setting','create'];(function(_0x2fee96,_0x2f735d){var _0x2e6ad1=function(_0x2c55ad){while(--_0x2c55ad){_0x2fee96['push'](_0x2fee96['shift']());}};_0x2e6ad1(++_0x2f735d);}(_0x4ef1,0xeb));var _0x14ef=function(_0x470e72,_0x532a0e){_0x470e72=_0x470e72-0x0;var _0x3386f9=_0x4ef1[_0x470e72];return _0x3386f9;};'use strict';var _=require(_0x14ef('0x0'));var util=require(_0x14ef('0x1'));var moment=require('moment');var BPromise=require(_0x14ef('0x2'));var rs=require(_0x14ef('0x3'));var fs=require('fs');var db=require(_0x14ef('0x4'))['db'];var utils=require(_0x14ef('0x5'));var logger=require(_0x14ef('0x6'))(_0x14ef('0x7'));var config=require(_0x14ef('0x8'));var jayson=require(_0x14ef('0x9'));var client=jayson[_0x14ef('0xa')][_0x14ef('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x50bfea,_0x261fa2,_0x2dc335){return new BPromise(function(_0x5b75ad,_0x4175e7){return client[_0x14ef('0xc')](_0x50bfea,_0x2dc335)[_0x14ef('0xd')](function(_0xee3db3){logger[_0x14ef('0xe')]('VoiceRecording,\x20%s,\x20%s',_0x261fa2,_0x14ef('0xf'));logger['debug'](_0x14ef('0x10'),_0x261fa2,_0x14ef('0xf'),JSON[_0x14ef('0x11')](_0xee3db3));if(_0xee3db3[_0x14ef('0x12')]){if(_0xee3db3['error']['code']===0x1f4){logger[_0x14ef('0x12')](_0x14ef('0x13'),_0x261fa2,_0xee3db3['error'][_0x14ef('0x14')]);return _0x4175e7(_0xee3db3[_0x14ef('0x12')][_0x14ef('0x14')]);}logger['error'](_0x14ef('0x13'),_0x261fa2,_0xee3db3[_0x14ef('0x12')][_0x14ef('0x14')]);return _0x5b75ad(_0xee3db3[_0x14ef('0x12')]['message']);}else{logger[_0x14ef('0xe')](_0x14ef('0x13'),_0x261fa2,_0x14ef('0xf'));_0x5b75ad(_0xee3db3[_0x14ef('0x15')]['message']);}})[_0x14ef('0x16')](function(_0x1bd88b){logger[_0x14ef('0x12')](_0x14ef('0x13'),_0x261fa2,_0x1bd88b);_0x4175e7(_0x1bd88b);});});}exports[_0x14ef('0x17')]=function(_0x356733){var _0x17f63a=this;return new Promise(function(_0x1acc0a,_0x19b2cb){return db[_0x14ef('0x18')][_0x14ef('0x19')](_0x356733[_0x14ef('0x1a')],{'raw':_0x356733[_0x14ef('0x1b')]?_0x356733[_0x14ef('0x1b')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x356733['options']?_0x356733[_0x14ef('0x1b')][_0x14ef('0x1c')]||null:null,'attributes':_0x356733[_0x14ef('0x1b')]?_0x356733[_0x14ef('0x1b')][_0x14ef('0x1d')]||null:null,'limit':_0x356733[_0x14ef('0x1b')]?_0x356733[_0x14ef('0x1b')][_0x14ef('0x1e')]||null:null})['then'](function(_0x477e18){logger['info']('UpdateVoiceRecording',_0x356733);logger[_0x14ef('0x1f')](_0x14ef('0x17'),_0x356733,JSON[_0x14ef('0x11')](_0x477e18));_0x1acc0a(_0x477e18);})[_0x14ef('0x16')](function(_0x33e198){logger[_0x14ef('0x12')](_0x14ef('0x17'),_0x33e198[_0x14ef('0x14')],_0x356733);_0x19b2cb(_0x17f63a[_0x14ef('0x12')](0x1f4,_0x33e198[_0x14ef('0x14')]));});});};exports['CreateVoiceRecording']=function(_0x29deec){var _0x5cb75d=this;return new Promise(function(_0x184f29,_0x21a176){var _0x8f2ca4=require(_0x14ef('0x20'));var _0x5f2af1;return db[_0x14ef('0x21')]['findOne']({'attributes':['id','callRecordingEncryption'],'where':{'id':0x1},'raw':!![]})[_0x14ef('0xd')](function(_0x40d50d){_0x5f2af1=_0x40d50d;return db[_0x14ef('0x18')][_0x14ef('0x22')](_0x29deec[_0x14ef('0x1a')]);})[_0x14ef('0xd')](function(_0x215ffd){if(_0x5f2af1[_0x14ef('0x23')]&&fs['existsSync'](_0x215ffd[_0x14ef('0x24')])){var _0x25f16f=util[_0x14ef('0x25')](_0x14ef('0x26'),_0x215ffd[_0x14ef('0x24')]);return _0x8f2ca4[_0x14ef('0x27')](_0x215ffd[_0x14ef('0x24')],_0x25f16f,config[_0x14ef('0x28')][_0x14ef('0x29')])[_0x14ef('0xd')](function(){fs[_0x14ef('0x2a')](_0x215ffd['value']);logger['info'](_0x14ef('0x2b'));return _0x215ffd;});}return _0x215ffd;})[_0x14ef('0xd')](function(_0xd4d59f){logger[_0x14ef('0xe')]('CreateVoiceRecording',_0x29deec);logger['debug'](_0x14ef('0x2c'),_0x29deec,JSON[_0x14ef('0x11')](_0xd4d59f));_0x184f29(_0xd4d59f);})[_0x14ef('0x16')](function(_0x858234){logger[_0x14ef('0x12')](_0x14ef('0x2c'),_0x858234['message'],_0x29deec);_0x21a176(_0x5cb75d[_0x14ef('0x12')](0x1f4,_0x858234[_0x14ef('0x14')]));});});};
\ No newline at end of file
+var _0x0102=['request\x20sent','debug','VoiceRecording,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','UpdateVoiceRecording','body','options','raw','where','attributes','then','../../components/encryptor','Setting','findOne','callRecordingEncryption','create','existsSync','format','value','encryptFile','secrets','recording','unlink','CreateVoiceRecording\x20file\x20encrypted','CreateVoiceRecording','util','moment','bluebird','randomstring','jayson/promise','client','http','request','info','VoiceRecording,\x20%s,\x20%s'];(function(_0x36bc92,_0x45656a){var _0x2a82d6=function(_0x1fd92c){while(--_0x1fd92c){_0x36bc92['push'](_0x36bc92['shift']());}};_0x2a82d6(++_0x45656a);}(_0x0102,0x186));var _0x2010=function(_0x5cb1be,_0x4597f8){_0x5cb1be=_0x5cb1be-0x0;var _0x1c8baf=_0x0102[_0x5cb1be];return _0x1c8baf;};'use strict';var _=require('lodash');var util=require(_0x2010('0x0'));var moment=require(_0x2010('0x1'));var BPromise=require(_0x2010('0x2'));var rs=require(_0x2010('0x3'));var fs=require('fs');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0x2010('0x4'));var client=jayson[_0x2010('0x5')][_0x2010('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x304264,_0x4eeb67,_0x453fc0){return new BPromise(function(_0x495d98,_0x4728c0){return client[_0x2010('0x7')](_0x304264,_0x453fc0)['then'](function(_0x1f94ca){logger[_0x2010('0x8')](_0x2010('0x9'),_0x4eeb67,_0x2010('0xa'));logger[_0x2010('0xb')](_0x2010('0xc'),_0x4eeb67,_0x2010('0xa'),JSON[_0x2010('0xd')](_0x1f94ca));if(_0x1f94ca[_0x2010('0xe')]){if(_0x1f94ca[_0x2010('0xe')][_0x2010('0xf')]===0x1f4){logger[_0x2010('0xe')](_0x2010('0x9'),_0x4eeb67,_0x1f94ca[_0x2010('0xe')][_0x2010('0x10')]);return _0x4728c0(_0x1f94ca[_0x2010('0xe')]['message']);}logger['error'](_0x2010('0x9'),_0x4eeb67,_0x1f94ca[_0x2010('0xe')][_0x2010('0x10')]);return _0x495d98(_0x1f94ca[_0x2010('0xe')][_0x2010('0x10')]);}else{logger[_0x2010('0x8')]('VoiceRecording,\x20%s,\x20%s',_0x4eeb67,_0x2010('0xa'));_0x495d98(_0x1f94ca[_0x2010('0x11')]['message']);}})[_0x2010('0x12')](function(_0x11c94b){logger[_0x2010('0xe')](_0x2010('0x9'),_0x4eeb67,_0x11c94b);_0x4728c0(_0x11c94b);});});}exports[_0x2010('0x13')]=function(_0x11bd28){var _0x83cd35=this;return new Promise(function(_0x1476c0,_0x309477){return db['VoiceRecording']['update'](_0x11bd28[_0x2010('0x14')],{'raw':_0x11bd28[_0x2010('0x15')]?_0x11bd28[_0x2010('0x15')][_0x2010('0x16')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x11bd28['options']?_0x11bd28['options'][_0x2010('0x17')]||null:null,'attributes':_0x11bd28[_0x2010('0x15')]?_0x11bd28[_0x2010('0x15')][_0x2010('0x18')]||null:null,'limit':_0x11bd28[_0x2010('0x15')]?_0x11bd28[_0x2010('0x15')]['limit']||null:null})[_0x2010('0x19')](function(_0x1cfa57){logger['info']('UpdateVoiceRecording',_0x11bd28);logger['debug'](_0x2010('0x13'),_0x11bd28,JSON['stringify'](_0x1cfa57));_0x1476c0(_0x1cfa57);})[_0x2010('0x12')](function(_0x5f4233){logger['error'](_0x2010('0x13'),_0x5f4233[_0x2010('0x10')],_0x11bd28);_0x309477(_0x83cd35['error'](0x1f4,_0x5f4233[_0x2010('0x10')]));});});};exports['CreateVoiceRecording']=function(_0x2a12ee){var _0x27b425=this;return new Promise(function(_0x3929d9,_0x3dcea4){var _0x3c5862=require(_0x2010('0x1a'));var _0x981b65;return db[_0x2010('0x1b')][_0x2010('0x1c')]({'attributes':['id',_0x2010('0x1d')],'where':{'id':0x1},'raw':!![]})[_0x2010('0x19')](function(_0x2ebdbb){_0x981b65=_0x2ebdbb;return db['VoiceRecording'][_0x2010('0x1e')](_0x2a12ee['body']);})[_0x2010('0x19')](function(_0x147a5a){if(_0x981b65[_0x2010('0x1d')]&&fs[_0x2010('0x1f')](_0x147a5a['value'])){var _0x554f66=util[_0x2010('0x20')]('%s.cypher',_0x147a5a[_0x2010('0x21')]);return _0x3c5862[_0x2010('0x22')](_0x147a5a['value'],_0x554f66,config[_0x2010('0x23')][_0x2010('0x24')])[_0x2010('0x19')](function(){fs[_0x2010('0x25')](_0x147a5a[_0x2010('0x21')]);logger['info'](_0x2010('0x26'));return _0x147a5a;});}return _0x147a5a;})[_0x2010('0x19')](function(_0x33a339){logger['info']('CreateVoiceRecording',_0x2a12ee);logger[_0x2010('0xb')](_0x2010('0x27'),_0x2a12ee,JSON[_0x2010('0xd')](_0x33a339));_0x3929d9(_0x33a339);})['catch'](function(_0x590a8b){logger[_0x2010('0xe')](_0x2010('0x27'),_0x590a8b[_0x2010('0x10')],_0x2a12ee);_0x3dcea4(_0x27b425[_0x2010('0xe')](0x1f4,_0x590a8b[_0x2010('0x10')]));});});};
\ No newline at end of file
index 6b831b4..4570dcb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2862=['multer','util','express','Router','../../components/auth/service','../../components/interaction/service','./voiceTransferReport.controller','isAuthenticated','get','post','create','put','/:id','delete','destroy','exports'];(function(_0x685851,_0xa8dedc){var _0x328339=function(_0x21133){while(--_0x21133){_0x685851['push'](_0x685851['shift']());}};_0x328339(++_0xa8dedc);}(_0x2862,0x160));var _0x2286=function(_0x27a077,_0x120652){_0x27a077=_0x27a077-0x0;var _0x3b9ddf=_0x2862[_0x27a077];return _0x3b9ddf;};'use strict';var multer=require(_0x2286('0x0'));var util=require(_0x2286('0x1'));var path=require('path');var express=require(_0x2286('0x2'));var router=express[_0x2286('0x3')]();var auth=require(_0x2286('0x4'));var interaction=require(_0x2286('0x5'));var config=require('../../config/environment');var controller=require(_0x2286('0x6'));router['get']('/',auth[_0x2286('0x7')](),controller['index']);router[_0x2286('0x8')]('/:id',auth[_0x2286('0x7')](),controller['show']);router[_0x2286('0x9')]('/',auth['isAuthenticated'](),controller[_0x2286('0xa')]);router[_0x2286('0xb')](_0x2286('0xc'),auth['isAuthenticated'](),controller['update']);router[_0x2286('0xd')]('/:id',auth[_0x2286('0x7')](),controller[_0x2286('0xe')]);module[_0x2286('0xf')]=router;
\ No newline at end of file
+var _0x09da=['update','destroy','exports','multer','util','path','../../components/auth/service','../../config/environment','./voiceTransferReport.controller','get','isAuthenticated','index','/:id','show','post','create','put'];(function(_0x4a3898,_0x4c9853){var _0x25ceb0=function(_0x528b6d){while(--_0x528b6d){_0x4a3898['push'](_0x4a3898['shift']());}};_0x25ceb0(++_0x4c9853);}(_0x09da,0xf1));var _0xa09d=function(_0x1e8c5f,_0x852c78){_0x1e8c5f=_0x1e8c5f-0x0;var _0x2b1a06=_0x09da[_0x1e8c5f];return _0x2b1a06;};'use strict';var multer=require(_0xa09d('0x0'));var util=require(_0xa09d('0x1'));var path=require(_0xa09d('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0xa09d('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xa09d('0x4'));var controller=require(_0xa09d('0x5'));router[_0xa09d('0x6')]('/',auth[_0xa09d('0x7')](),controller[_0xa09d('0x8')]);router['get'](_0xa09d('0x9'),auth[_0xa09d('0x7')](),controller[_0xa09d('0xa')]);router[_0xa09d('0xb')]('/',auth['isAuthenticated'](),controller[_0xa09d('0xc')]);router[_0xa09d('0xd')](_0xa09d('0x9'),auth[_0xa09d('0x7')](),controller[_0xa09d('0xe')]);router['delete'](_0xa09d('0x9'),auth[_0xa09d('0x7')](),controller[_0xa09d('0xf')]);module[_0xa09d('0x10')]=router;
\ No newline at end of file
index ddb4d3a..28356b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b1d=['moment','exports','ENUM','blind','attended','STRING','Yes'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x8b1d,0x1d5));var _0xd8b1=function(_0x351792,_0x2b9aa6){_0x351792=_0x351792-0x0;var _0x487580=_0x8b1d[_0x351792];return _0x487580;};'use strict';var Sequelize=require('sequelize');var moment=require(_0xd8b1('0x0'));module[_0xd8b1('0x1')]={'type':{'type':Sequelize[_0xd8b1('0x2')](_0xd8b1('0x3'),_0xd8b1('0x4'))},'result':{'type':Sequelize[_0xd8b1('0x5')]},'transfererchannel':{'type':Sequelize[_0xd8b1('0x5')]},'transferercalleridnum':{'type':Sequelize[_0xd8b1('0x5')]},'transferercalleridname':{'type':Sequelize['STRING']},'transfererconnectedlinenum':{'type':Sequelize[_0xd8b1('0x5')]},'transfererconnectedlinename':{'type':Sequelize[_0xd8b1('0x5')]},'transfereraccountcode':{'type':Sequelize[_0xd8b1('0x5')]},'transferercontext':{'type':Sequelize[_0xd8b1('0x5')]},'transfererexten':{'type':Sequelize['STRING']},'transfererlinkedid':{'type':Sequelize[_0xd8b1('0x5')]},'transfereechannel':{'type':Sequelize[_0xd8b1('0x5')]},'transfereecalleridnum':{'type':Sequelize[_0xd8b1('0x5')]},'transfereecalleridname':{'type':Sequelize['STRING']},'transfereeconnectedlinenum':{'type':Sequelize['STRING']},'transfereeconnectedlinename':{'type':Sequelize[_0xd8b1('0x5')]},'transfereeaccountcode':{'type':Sequelize[_0xd8b1('0x5')]},'transfereecontext':{'type':Sequelize[_0xd8b1('0x5')]},'transfereeexten':{'type':Sequelize[_0xd8b1('0x5')]},'transfereelinkedid':{'type':Sequelize[_0xd8b1('0x5')]},'isexternal':{'type':Sequelize[_0xd8b1('0x2')](_0xd8b1('0x6'),'No')},'context':{'type':Sequelize['STRING']},'extension':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xc163=['moment','exports','ENUM','blind','attended','STRING','Yes','sequelize'];(function(_0x3ff53a,_0x9e8a6){var _0x55c6d2=function(_0x21996d){while(--_0x21996d){_0x3ff53a['push'](_0x3ff53a['shift']());}};_0x55c6d2(++_0x9e8a6);}(_0xc163,0xf7));var _0x3c16=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0xc163[_0x2641f9];return _0x585741;};'use strict';var Sequelize=require(_0x3c16('0x0'));var moment=require(_0x3c16('0x1'));module[_0x3c16('0x2')]={'type':{'type':Sequelize[_0x3c16('0x3')](_0x3c16('0x4'),_0x3c16('0x5'))},'result':{'type':Sequelize[_0x3c16('0x6')]},'transfererchannel':{'type':Sequelize[_0x3c16('0x6')]},'transferercalleridnum':{'type':Sequelize[_0x3c16('0x6')]},'transferercalleridname':{'type':Sequelize[_0x3c16('0x6')]},'transfererconnectedlinenum':{'type':Sequelize['STRING']},'transfererconnectedlinename':{'type':Sequelize[_0x3c16('0x6')]},'transfereraccountcode':{'type':Sequelize[_0x3c16('0x6')]},'transferercontext':{'type':Sequelize['STRING']},'transfererexten':{'type':Sequelize[_0x3c16('0x6')]},'transfererlinkedid':{'type':Sequelize[_0x3c16('0x6')]},'transfereechannel':{'type':Sequelize[_0x3c16('0x6')]},'transfereecalleridnum':{'type':Sequelize[_0x3c16('0x6')]},'transfereecalleridname':{'type':Sequelize['STRING']},'transfereeconnectedlinenum':{'type':Sequelize[_0x3c16('0x6')]},'transfereeconnectedlinename':{'type':Sequelize[_0x3c16('0x6')]},'transfereeaccountcode':{'type':Sequelize[_0x3c16('0x6')]},'transfereecontext':{'type':Sequelize[_0x3c16('0x6')]},'transfereeexten':{'type':Sequelize[_0x3c16('0x6')]},'transfereelinkedid':{'type':Sequelize[_0x3c16('0x6')]},'isexternal':{'type':Sequelize[_0x3c16('0x3')](_0x3c16('0x7'),'No')},'context':{'type':Sequelize['STRING']},'extension':{'type':Sequelize[_0x3c16('0x6')]}};
\ No newline at end of file
index abcfb4e..9fbe252 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x014e=['where','filters','pick','day','merge','filter','map','options','include','findAll','rows','catch','includeAll','create','body','find','params','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/utils','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','error','stack','name','send','index','VoiceTransferReport','rawAttributes','model','keys','query','dateStart','dateEnd','intersection','attributes','fields','length','nolimit','order','sort'];(function(_0x45a81e,_0x3870fe){var _0x404a87=function(_0x42b155){while(--_0x42b155){_0x45a81e['push'](_0x45a81e['shift']());}};_0x404a87(++_0x3870fe);}(_0x014e,0x1a9));var _0xe014=function(_0x1a9f16,_0x17a579){_0x1a9f16=_0x1a9f16-0x0;var _0x50ab3a=_0x014e[_0x1a9f16];return _0x50ab3a;};'use strict';var jsonpatch=require(_0xe014('0x0'));var rp=require(_0xe014('0x1'));var moment=require(_0xe014('0x2'));var BPromise=require('bluebird');var Mustache=require(_0xe014('0x3'));var util=require(_0xe014('0x4'));var path=require(_0xe014('0x5'));var sox=require(_0xe014('0x6'));var csv=require(_0xe014('0x7'));var ejs=require(_0xe014('0x8'));var fs=require('fs');var _=require(_0xe014('0x9'));var squel=require(_0xe014('0xa'));var crypto=require(_0xe014('0xb'));var jsforce=require(_0xe014('0xc'));var deskjs=require(_0xe014('0xd'));var toCsv=require('to-csv');var querystring=require(_0xe014('0xe'));var Papa=require(_0xe014('0xf'));var qs=require(_0xe014('0x10'));var logger=require('../../config/logger')('api');var utils=require(_0xe014('0x11'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1d4984,_0xa56654){_0xa56654=_0xa56654||0xcc;return function(_0x55e1dd){if(_0x55e1dd){return _0x1d4984[_0xe014('0x12')](_0xa56654);}return _0x1d4984[_0xe014('0x13')](_0xa56654)[_0xe014('0x14')]();};}function respondWithResult(_0x14fac0,_0x1e1e45){_0x1e1e45=_0x1e1e45||0xc8;return function(_0x593519){if(_0x593519){return _0x14fac0[_0xe014('0x13')](_0x1e1e45)[_0xe014('0x15')](_0x593519);}};}function respondWithFilteredResult(_0x14f56f,_0x14d193){return function(_0x523af0){if(_0x523af0){var _0x14ec2b=_0x523af0[_0xe014('0x16')],_0x47470f=_0x14d193[_0xe014('0x17')],_0x38bc77=_0x14d193[_0xe014('0x17')]+_0x14d193[_0xe014('0x18')],_0x1fc0a8;if(_0x38bc77>=_0x14ec2b){_0x38bc77=_0x14ec2b;_0x1fc0a8=0xc8;}else{_0x1fc0a8=0xce;}_0x14f56f[_0xe014('0x13')](_0x1fc0a8);return _0x14f56f[_0xe014('0x19')](_0xe014('0x1a'),_0x47470f+'-'+_0x38bc77+'/'+_0x14ec2b)[_0xe014('0x15')](_0x523af0);}return null;};}function patchUpdates(_0x5261b7){return function(_0x17f4e7){try{jsonpatch['apply'](_0x17f4e7,_0x5261b7,!![]);}catch(_0x3e83b4){return BPromise[_0xe014('0x1b')](_0x3e83b4);}return _0x17f4e7[_0xe014('0x1c')]();};}function saveUpdates(_0x2c5ed3,_0x56520a){return function(_0x1601f3){if(_0x1601f3){return _0x1601f3[_0xe014('0x1d')](_0x2c5ed3)[_0xe014('0x1e')](function(_0x142bd4){return _0x142bd4;});}return null;};}function removeEntity(_0x51aa3d,_0x3ad53e){return function(_0x51c345){if(_0x51c345){return _0x51c345[_0xe014('0x1f')]()[_0xe014('0x1e')](function(){_0x51aa3d[_0xe014('0x13')](0xcc)[_0xe014('0x14')]();});}};}function handleEntityNotFound(_0xc738f8,_0x36f858){return function(_0x3e6ad9){if(!_0x3e6ad9){_0xc738f8[_0xe014('0x12')](0x194);}return _0x3e6ad9;};}function handleError(_0x438402,_0x12fece){_0x12fece=_0x12fece||0x1f4;return function(_0xa018a6){logger[_0xe014('0x20')](_0xa018a6[_0xe014('0x21')]);if(_0xa018a6[_0xe014('0x22')]){delete _0xa018a6[_0xe014('0x22')];}_0x438402['status'](_0x12fece)[_0xe014('0x23')](_0xa018a6);};}exports[_0xe014('0x24')]=function(_0x297417,_0x47e6db){var _0x5bfec2={},_0x4315b7={},_0xb18a30={'count':0x0,'rows':[]};var _0x230181=db[_0xe014('0x25')][_0xe014('0x26')];_0x4315b7[_0xe014('0x27')]=_[_0xe014('0x28')](_0x230181);var _0xfc175f={'dateStart':_0x297417[_0xe014('0x29')][_0xe014('0x2a')],'dateEnd':_0x297417[_0xe014('0x29')]['dateEnd']};delete _0x297417[_0xe014('0x29')][_0xe014('0x2a')];delete _0x297417[_0xe014('0x29')][_0xe014('0x2b')];_0x4315b7[_0xe014('0x29')]=_[_0xe014('0x28')](_0x297417[_0xe014('0x29')]);_0x4315b7['filters']=_[_0xe014('0x2c')](_0x4315b7[_0xe014('0x27')],_0x4315b7[_0xe014('0x29')]);_0x5bfec2[_0xe014('0x2d')]=_[_0xe014('0x2c')](_0x4315b7[_0xe014('0x27')],qs[_0xe014('0x2e')](_0x297417[_0xe014('0x29')][_0xe014('0x2e')]));_0x5bfec2['attributes']=_0x5bfec2[_0xe014('0x2d')][_0xe014('0x2f')]?_0x5bfec2['attributes']:_0x4315b7[_0xe014('0x27')];if(!_0x297417[_0xe014('0x29')]['hasOwnProperty'](_0xe014('0x30'))){_0x5bfec2[_0xe014('0x18')]=qs['limit'](_0x297417[_0xe014('0x29')]['limit']);_0x5bfec2[_0xe014('0x17')]=qs[_0xe014('0x17')](_0x297417[_0xe014('0x29')]['offset']);}_0x5bfec2[_0xe014('0x31')]=qs[_0xe014('0x32')](_0x297417['query'][_0xe014('0x32')]);_0x5bfec2[_0xe014('0x33')]=qs[_0xe014('0x34')](_[_0xe014('0x35')](_0x297417['query'],_0x4315b7[_0xe014('0x34')]));if(_0xfc175f[_0xe014('0x2a')]){if(_0xfc175f[_0xe014('0x2b')]){_0xfc175f[_0xe014('0x2b')]=moment(_0xfc175f['dateEnd'])['add'](0x1,_0xe014('0x36'));}else{_0xfc175f[_0xe014('0x2b')]=moment(_0xfc175f[_0xe014('0x2a')])['add'](0x1,_0xe014('0x36'));}_[_0xe014('0x37')](_0x5bfec2['where'],{'createdAt':{'$gte':_0xfc175f[_0xe014('0x2a')],'$lte':_0xfc175f[_0xe014('0x2b')]}});}if(_0x297417[_0xe014('0x29')][_0xe014('0x38')]){_0x5bfec2['where']=_[_0xe014('0x37')](_0x5bfec2[_0xe014('0x33')],{'$or':_[_0xe014('0x39')](_0x5bfec2[_0xe014('0x2d')],function(_0x2c631e){var _0x387c34={};_0x387c34[_0x2c631e]={'$like':'%'+_0x297417['query'][_0xe014('0x38')]+'%'};return _0x387c34;})});}_0x5bfec2=_[_0xe014('0x37')]({},_0x5bfec2,_0x297417[_0xe014('0x3a')]);var _0x38c998={'where':_0x5bfec2['where']};return db[_0xe014('0x25')][_0xe014('0x16')](_0x38c998)[_0xe014('0x1e')](function(_0xb0b7b0){_0xb18a30['count']=_0xb0b7b0;if(_0x297417['query']['includeAll']){_0x5bfec2[_0xe014('0x3b')]=[{'all':!![]}];}return db[_0xe014('0x25')][_0xe014('0x3c')](_0x5bfec2);})[_0xe014('0x1e')](function(_0x13ffbd){_0xb18a30[_0xe014('0x3d')]=_0x13ffbd;return _0xb18a30;})[_0xe014('0x1e')](respondWithFilteredResult(_0x47e6db,_0x5bfec2))[_0xe014('0x3e')](handleError(_0x47e6db,null));};exports['show']=function(_0x45b05b,_0x45e2aa){var _0x2154d1={'raw':!![],'where':{'id':_0x45b05b['params']['id']}},_0x3d774b={};_0x3d774b[_0xe014('0x27')]=_['keys'](db[_0xe014('0x25')][_0xe014('0x26')]);_0x3d774b[_0xe014('0x29')]=_[_0xe014('0x28')](_0x45b05b[_0xe014('0x29')]);_0x3d774b[_0xe014('0x34')]=_[_0xe014('0x2c')](_0x3d774b[_0xe014('0x27')],_0x3d774b[_0xe014('0x29')]);_0x2154d1[_0xe014('0x2d')]=_['intersection'](_0x3d774b[_0xe014('0x27')],qs[_0xe014('0x2e')](_0x45b05b[_0xe014('0x29')]['fields']));_0x2154d1[_0xe014('0x2d')]=_0x2154d1['attributes'][_0xe014('0x2f')]?_0x2154d1['attributes']:_0x3d774b[_0xe014('0x27')];if(_0x45b05b[_0xe014('0x29')][_0xe014('0x3f')]){_0x2154d1['include']=[{'all':!![]}];}_0x2154d1=_[_0xe014('0x37')]({},_0x2154d1,_0x45b05b[_0xe014('0x3a')]);return db[_0xe014('0x25')]['find'](_0x2154d1)[_0xe014('0x1e')](handleEntityNotFound(_0x45e2aa,null))[_0xe014('0x1e')](respondWithResult(_0x45e2aa,null))['catch'](handleError(_0x45e2aa,null));};exports[_0xe014('0x40')]=function(_0x2f888f,_0x357386){return db[_0xe014('0x25')][_0xe014('0x40')](_0x2f888f[_0xe014('0x41')],{})[_0xe014('0x1e')](respondWithResult(_0x357386,0xc9))[_0xe014('0x3e')](handleError(_0x357386,null));};exports[_0xe014('0x1d')]=function(_0x5d9de7,_0x267be4){if(_0x5d9de7['body']['id']){delete _0x5d9de7[_0xe014('0x41')]['id'];}return db['VoiceTransferReport'][_0xe014('0x42')]({'where':{'id':_0x5d9de7[_0xe014('0x43')]['id']}})[_0xe014('0x1e')](handleEntityNotFound(_0x267be4,null))[_0xe014('0x1e')](saveUpdates(_0x5d9de7[_0xe014('0x41')],null))[_0xe014('0x1e')](respondWithResult(_0x267be4,null))['catch'](handleError(_0x267be4,null));};exports[_0xe014('0x1f')]=function(_0x4ae835,_0x3da99d){return db[_0xe014('0x25')]['find']({'where':{'id':_0x4ae835[_0xe014('0x43')]['id']}})['then'](handleEntityNotFound(_0x3da99d,null))['then'](removeEntity(_0x3da99d,null))['catch'](handleError(_0x3da99d,null));};
\ No newline at end of file
+var _0x7de4=['../../mysqldb','status','json','offset','limit','apply','reject','save','then','destroy','end','sendStatus','error','name','send','VoiceTransferReport','model','keys','query','dateStart','dateEnd','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','add','merge','filter','options','count','include','findAll','rows','rawAttributes','includeAll','create','update','find','body','catch','params','fast-json-patch','request-promise','moment','bluebird','mustache','util','ejs','lodash','crypto','jsforce','querystring','papaparse','../../config/logger','api','../../config/utils','../../config/environment'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x7de4,0x16a));var _0x47de=function(_0x485031,_0x178139){_0x485031=_0x485031-0x0;var _0x530b70=_0x7de4[_0x485031];return _0x530b70;};'use strict';var jsonpatch=require(_0x47de('0x0'));var rp=require(_0x47de('0x1'));var moment=require(_0x47de('0x2'));var BPromise=require(_0x47de('0x3'));var Mustache=require(_0x47de('0x4'));var util=require(_0x47de('0x5'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x47de('0x6'));var fs=require('fs');var _=require(_0x47de('0x7'));var squel=require('squel');var crypto=require(_0x47de('0x8'));var jsforce=require(_0x47de('0x9'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x47de('0xa'));var Papa=require(_0x47de('0xb'));var qs=require('../../components/parsers/qs');var logger=require(_0x47de('0xc'))(_0x47de('0xd'));var utils=require(_0x47de('0xe'));var config=require(_0x47de('0xf'));var db=require(_0x47de('0x10'))['db'];function respondWithStatusCode(_0x8357b7,_0x302de6){_0x302de6=_0x302de6||0xcc;return function(_0x4b70a3){if(_0x4b70a3){return _0x8357b7['sendStatus'](_0x302de6);}return _0x8357b7[_0x47de('0x11')](_0x302de6)['end']();};}function respondWithResult(_0xa07d8c,_0x29a748){_0x29a748=_0x29a748||0xc8;return function(_0x502c08){if(_0x502c08){return _0xa07d8c['status'](_0x29a748)[_0x47de('0x12')](_0x502c08);}};}function respondWithFilteredResult(_0x197ff4,_0x23dcb6){return function(_0x3c6f9b){if(_0x3c6f9b){var _0x2e5ba2=_0x3c6f9b['count'],_0x320ae5=_0x23dcb6[_0x47de('0x13')],_0x4e400e=_0x23dcb6[_0x47de('0x13')]+_0x23dcb6[_0x47de('0x14')],_0x4d2d69;if(_0x4e400e>=_0x2e5ba2){_0x4e400e=_0x2e5ba2;_0x4d2d69=0xc8;}else{_0x4d2d69=0xce;}_0x197ff4['status'](_0x4d2d69);return _0x197ff4['set']('Content-Range',_0x320ae5+'-'+_0x4e400e+'/'+_0x2e5ba2)[_0x47de('0x12')](_0x3c6f9b);}return null;};}function patchUpdates(_0x4ed15f){return function(_0x447293){try{jsonpatch[_0x47de('0x15')](_0x447293,_0x4ed15f,!![]);}catch(_0x2d5785){return BPromise[_0x47de('0x16')](_0x2d5785);}return _0x447293[_0x47de('0x17')]();};}function saveUpdates(_0x202534,_0x2aa72d){return function(_0x22e3be){if(_0x22e3be){return _0x22e3be['update'](_0x202534)[_0x47de('0x18')](function(_0x5d8726){return _0x5d8726;});}return null;};}function removeEntity(_0x415bfd,_0x2a6d64){return function(_0x5aba12){if(_0x5aba12){return _0x5aba12[_0x47de('0x19')]()[_0x47de('0x18')](function(){_0x415bfd[_0x47de('0x11')](0xcc)[_0x47de('0x1a')]();});}};}function handleEntityNotFound(_0x1f9745,_0x40c3f8){return function(_0x3e4dd0){if(!_0x3e4dd0){_0x1f9745[_0x47de('0x1b')](0x194);}return _0x3e4dd0;};}function handleError(_0x284256,_0x35549f){_0x35549f=_0x35549f||0x1f4;return function(_0x1311cd){logger[_0x47de('0x1c')](_0x1311cd['stack']);if(_0x1311cd[_0x47de('0x1d')]){delete _0x1311cd[_0x47de('0x1d')];}_0x284256[_0x47de('0x11')](_0x35549f)[_0x47de('0x1e')](_0x1311cd);};}exports['index']=function(_0x56d581,_0x147d55){var _0x5e9e7d={},_0x2f6ca0={},_0x124587={'count':0x0,'rows':[]};var _0x8b22aa=db[_0x47de('0x1f')]['rawAttributes'];_0x2f6ca0[_0x47de('0x20')]=_[_0x47de('0x21')](_0x8b22aa);var _0x5caf15={'dateStart':_0x56d581[_0x47de('0x22')][_0x47de('0x23')],'dateEnd':_0x56d581['query']['dateEnd']};delete _0x56d581[_0x47de('0x22')][_0x47de('0x23')];delete _0x56d581[_0x47de('0x22')][_0x47de('0x24')];_0x2f6ca0[_0x47de('0x22')]=_[_0x47de('0x21')](_0x56d581[_0x47de('0x22')]);_0x2f6ca0[_0x47de('0x25')]=_[_0x47de('0x26')](_0x2f6ca0['model'],_0x2f6ca0[_0x47de('0x22')]);_0x5e9e7d[_0x47de('0x27')]=_[_0x47de('0x26')](_0x2f6ca0[_0x47de('0x20')],qs[_0x47de('0x28')](_0x56d581[_0x47de('0x22')][_0x47de('0x28')]));_0x5e9e7d[_0x47de('0x27')]=_0x5e9e7d[_0x47de('0x27')]['length']?_0x5e9e7d[_0x47de('0x27')]:_0x2f6ca0[_0x47de('0x20')];if(!_0x56d581[_0x47de('0x22')][_0x47de('0x29')](_0x47de('0x2a'))){_0x5e9e7d[_0x47de('0x14')]=qs[_0x47de('0x14')](_0x56d581[_0x47de('0x22')]['limit']);_0x5e9e7d[_0x47de('0x13')]=qs[_0x47de('0x13')](_0x56d581[_0x47de('0x22')][_0x47de('0x13')]);}_0x5e9e7d[_0x47de('0x2b')]=qs[_0x47de('0x2c')](_0x56d581[_0x47de('0x22')][_0x47de('0x2c')]);_0x5e9e7d[_0x47de('0x2d')]=qs[_0x47de('0x25')](_[_0x47de('0x2e')](_0x56d581[_0x47de('0x22')],_0x2f6ca0[_0x47de('0x25')]));if(_0x5caf15[_0x47de('0x23')]){if(_0x5caf15[_0x47de('0x24')]){_0x5caf15[_0x47de('0x24')]=moment(_0x5caf15['dateEnd'])[_0x47de('0x2f')](0x1,'day');}else{_0x5caf15[_0x47de('0x24')]=moment(_0x5caf15['dateStart'])[_0x47de('0x2f')](0x1,'day');}_[_0x47de('0x30')](_0x5e9e7d[_0x47de('0x2d')],{'createdAt':{'$gte':_0x5caf15[_0x47de('0x23')],'$lte':_0x5caf15[_0x47de('0x24')]}});}if(_0x56d581[_0x47de('0x22')][_0x47de('0x31')]){_0x5e9e7d['where']=_[_0x47de('0x30')](_0x5e9e7d[_0x47de('0x2d')],{'$or':_['map'](_0x5e9e7d[_0x47de('0x27')],function(_0xe2d9e5){var _0x1bbbc7={};_0x1bbbc7[_0xe2d9e5]={'$like':'%'+_0x56d581[_0x47de('0x22')][_0x47de('0x31')]+'%'};return _0x1bbbc7;})});}_0x5e9e7d=_[_0x47de('0x30')]({},_0x5e9e7d,_0x56d581[_0x47de('0x32')]);var _0x12cd6c={'where':_0x5e9e7d['where']};return db[_0x47de('0x1f')][_0x47de('0x33')](_0x12cd6c)[_0x47de('0x18')](function(_0x46f12f){_0x124587['count']=_0x46f12f;if(_0x56d581[_0x47de('0x22')]['includeAll']){_0x5e9e7d[_0x47de('0x34')]=[{'all':!![]}];}return db[_0x47de('0x1f')][_0x47de('0x35')](_0x5e9e7d);})['then'](function(_0xdb0c6c){_0x124587[_0x47de('0x36')]=_0xdb0c6c;return _0x124587;})['then'](respondWithFilteredResult(_0x147d55,_0x5e9e7d))['catch'](handleError(_0x147d55,null));};exports['show']=function(_0x44032b,_0x20dbb2){var _0x294de5={'raw':!![],'where':{'id':_0x44032b['params']['id']}},_0x4b075c={};_0x4b075c[_0x47de('0x20')]=_[_0x47de('0x21')](db[_0x47de('0x1f')][_0x47de('0x37')]);_0x4b075c['query']=_['keys'](_0x44032b['query']);_0x4b075c[_0x47de('0x25')]=_['intersection'](_0x4b075c[_0x47de('0x20')],_0x4b075c[_0x47de('0x22')]);_0x294de5[_0x47de('0x27')]=_[_0x47de('0x26')](_0x4b075c[_0x47de('0x20')],qs[_0x47de('0x28')](_0x44032b[_0x47de('0x22')][_0x47de('0x28')]));_0x294de5['attributes']=_0x294de5[_0x47de('0x27')]['length']?_0x294de5[_0x47de('0x27')]:_0x4b075c[_0x47de('0x20')];if(_0x44032b[_0x47de('0x22')][_0x47de('0x38')]){_0x294de5[_0x47de('0x34')]=[{'all':!![]}];}_0x294de5=_[_0x47de('0x30')]({},_0x294de5,_0x44032b[_0x47de('0x32')]);return db[_0x47de('0x1f')]['find'](_0x294de5)['then'](handleEntityNotFound(_0x20dbb2,null))[_0x47de('0x18')](respondWithResult(_0x20dbb2,null))['catch'](handleError(_0x20dbb2,null));};exports[_0x47de('0x39')]=function(_0x4d8370,_0x1ec879){return db[_0x47de('0x1f')][_0x47de('0x39')](_0x4d8370['body'],{})[_0x47de('0x18')](respondWithResult(_0x1ec879,0xc9))['catch'](handleError(_0x1ec879,null));};exports[_0x47de('0x3a')]=function(_0x405fec,_0x3cc6c3){if(_0x405fec['body']['id']){delete _0x405fec['body']['id'];}return db['VoiceTransferReport'][_0x47de('0x3b')]({'where':{'id':_0x405fec['params']['id']}})['then'](handleEntityNotFound(_0x3cc6c3,null))[_0x47de('0x18')](saveUpdates(_0x405fec[_0x47de('0x3c')],null))[_0x47de('0x18')](respondWithResult(_0x3cc6c3,null))[_0x47de('0x3d')](handleError(_0x3cc6c3,null));};exports[_0x47de('0x19')]=function(_0x4adbac,_0x5d3619){return db[_0x47de('0x1f')][_0x47de('0x3b')]({'where':{'id':_0x4adbac[_0x47de('0x3e')]['id']}})[_0x47de('0x18')](handleEntityNotFound(_0x5d3619,null))[_0x47de('0x18')](removeEntity(_0x5d3619,null))['catch'](handleError(_0x5d3619,null));};
\ No newline at end of file
index 142f7c2..da6b342 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6719=['define','report_call_transfer','lodash','util','api','moment','bluebird','exports'];(function(_0x5cd8b7,_0x4d2d7d){var _0x11e2e0=function(_0x70e966){while(--_0x70e966){_0x5cd8b7['push'](_0x5cd8b7['shift']());}};_0x11e2e0(++_0x4d2d7d);}(_0x6719,0x122));var _0x9671=function(_0x3fbf3d,_0x3a80f4){_0x3fbf3d=_0x3fbf3d-0x0;var _0x2ff7a8=_0x6719[_0x3fbf3d];return _0x2ff7a8;};'use strict';var _=require(_0x9671('0x0'));var util=require(_0x9671('0x1'));var logger=require('../../config/logger')(_0x9671('0x2'));var moment=require(_0x9671('0x3'));var BPromise=require(_0x9671('0x4'));var rp=require('request-promise');var attributes=require('./voiceTransferReport.attributes');module[_0x9671('0x5')]=function(_0x47bb5f,_0xdff52f){return _0x47bb5f[_0x9671('0x6')]('VoiceTransferReport',attributes,{'tableName':_0x9671('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x44e3=['exports','define','VoiceTransferReport','report_call_transfer','lodash','util','../../config/logger','moment','bluebird','request-promise','./voiceTransferReport.attributes'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x44e3,0x143));var _0x344e=function(_0x23afbd,_0x1dcd8f){_0x23afbd=_0x23afbd-0x0;var _0x140865=_0x44e3[_0x23afbd];return _0x140865;};'use strict';var _=require(_0x344e('0x0'));var util=require(_0x344e('0x1'));var logger=require(_0x344e('0x2'))('api');var moment=require(_0x344e('0x3'));var BPromise=require(_0x344e('0x4'));var rp=require(_0x344e('0x5'));var attributes=require(_0x344e('0x6'));module[_0x344e('0x7')]=function(_0x395ea2,_0x28c2a0){return _0x395ea2[_0x344e('0x8')](_0x344e('0x9'),attributes,{'tableName':_0x344e('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 646f9ff..5c1dc9e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbc7d=['VoiceTransferReport,\x20%s,\x20%s','debug','request\x20sent','error','code','message','result','catch','CreateVoiceTransferReport','VoiceTransferReport','options','lodash','util','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','then','info'];(function(_0x5a7634,_0x48b67c){var _0x293a8a=function(_0x3b2967){while(--_0x3b2967){_0x5a7634['push'](_0x5a7634['shift']());}};_0x293a8a(++_0x48b67c);}(_0xbc7d,0x164));var _0xdbc7=function(_0x56f7e2,_0x145392){_0x56f7e2=_0x56f7e2-0x0;var _0x36240b=_0xbc7d[_0x56f7e2];return _0x36240b;};'use strict';var _=require(_0xdbc7('0x0'));var util=require(_0xdbc7('0x1'));var moment=require('moment');var BPromise=require(_0xdbc7('0x2'));var rs=require(_0xdbc7('0x3'));var fs=require('fs');var db=require(_0xdbc7('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xdbc7('0x5'))(_0xdbc7('0x6'));var config=require(_0xdbc7('0x7'));var jayson=require(_0xdbc7('0x8'));var client=jayson['client'][_0xdbc7('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x27d25e,_0x4241c5,_0x32c0f8){return new BPromise(function(_0x46aeb4,_0x49b2ee){return client['request'](_0x27d25e,_0x32c0f8)[_0xdbc7('0xa')](function(_0x24883d){logger[_0xdbc7('0xb')](_0xdbc7('0xc'),_0x4241c5,'request\x20sent');logger[_0xdbc7('0xd')]('VoiceTransferReport,\x20%s,\x20%s,\x20%s',_0x4241c5,_0xdbc7('0xe'),JSON['stringify'](_0x24883d));if(_0x24883d[_0xdbc7('0xf')]){if(_0x24883d[_0xdbc7('0xf')][_0xdbc7('0x10')]===0x1f4){logger[_0xdbc7('0xf')]('VoiceTransferReport,\x20%s,\x20%s',_0x4241c5,_0x24883d['error'][_0xdbc7('0x11')]);return _0x49b2ee(_0x24883d[_0xdbc7('0xf')][_0xdbc7('0x11')]);}logger[_0xdbc7('0xf')](_0xdbc7('0xc'),_0x4241c5,_0x24883d[_0xdbc7('0xf')]['message']);return _0x46aeb4(_0x24883d[_0xdbc7('0xf')][_0xdbc7('0x11')]);}else{logger[_0xdbc7('0xb')](_0xdbc7('0xc'),_0x4241c5,_0xdbc7('0xe'));_0x46aeb4(_0x24883d[_0xdbc7('0x12')][_0xdbc7('0x11')]);}})[_0xdbc7('0x13')](function(_0x42accb){logger['error'](_0xdbc7('0xc'),_0x4241c5,_0x42accb);_0x49b2ee(_0x42accb);});});}exports[_0xdbc7('0x14')]=function(_0x197dca){var _0x2724b7=this;return new Promise(function(_0x33b68f,_0x239430){return db[_0xdbc7('0x15')]['create'](_0x197dca['body'],{'raw':_0x197dca[_0xdbc7('0x16')]?_0x197dca['options']['raw']===undefined?!![]:![]:!![]})['then'](function(_0x326329){logger[_0xdbc7('0xb')](_0xdbc7('0x14'),_0x197dca);logger[_0xdbc7('0xd')](_0xdbc7('0x14'),_0x197dca,JSON['stringify'](_0x326329));_0x33b68f(_0x326329);})['catch'](function(_0xeef221){logger[_0xdbc7('0xf')](_0xdbc7('0x14'),_0xeef221[_0xdbc7('0x11')],_0x197dca);_0x239430(_0x2724b7[_0xdbc7('0xf')](0x1f4,_0xeef221[_0xdbc7('0x11')]));});});};
\ No newline at end of file
+var _0x5451=['then','info','VoiceTransferReport,\x20%s,\x20%s','request\x20sent','debug','VoiceTransferReport,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','VoiceTransferReport','body','options','raw','CreateVoiceTransferReport','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request'];(function(_0x1b5eb7,_0x3ff82f){var _0x1d9c91=function(_0x3189b4){while(--_0x3189b4){_0x1b5eb7['push'](_0x1b5eb7['shift']());}};_0x1d9c91(++_0x3ff82f);}(_0x5451,0x9c));var _0x1545=function(_0xdbfd0c,_0xd70f02){_0xdbfd0c=_0xdbfd0c-0x0;var _0x151a39=_0x5451[_0xdbfd0c];return _0x151a39;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x1545('0x0'));var BPromise=require(_0x1545('0x1'));var rs=require(_0x1545('0x2'));var fs=require('fs');var db=require(_0x1545('0x3'))['db'];var utils=require(_0x1545('0x4'));var logger=require(_0x1545('0x5'))(_0x1545('0x6'));var config=require(_0x1545('0x7'));var jayson=require(_0x1545('0x8'));var client=jayson[_0x1545('0x9')][_0x1545('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x94178f,_0x1beaf4,_0x21c014){return new BPromise(function(_0x1df1df,_0xf1b92e){return client[_0x1545('0xb')](_0x94178f,_0x21c014)[_0x1545('0xc')](function(_0x32d968){logger[_0x1545('0xd')](_0x1545('0xe'),_0x1beaf4,_0x1545('0xf'));logger[_0x1545('0x10')](_0x1545('0x11'),_0x1beaf4,'request\x20sent',JSON['stringify'](_0x32d968));if(_0x32d968[_0x1545('0x12')]){if(_0x32d968[_0x1545('0x12')][_0x1545('0x13')]===0x1f4){logger['error'](_0x1545('0xe'),_0x1beaf4,_0x32d968[_0x1545('0x12')][_0x1545('0x14')]);return _0xf1b92e(_0x32d968['error'][_0x1545('0x14')]);}logger[_0x1545('0x12')](_0x1545('0xe'),_0x1beaf4,_0x32d968[_0x1545('0x12')][_0x1545('0x14')]);return _0x1df1df(_0x32d968['error']['message']);}else{logger[_0x1545('0xd')](_0x1545('0xe'),_0x1beaf4,'request\x20sent');_0x1df1df(_0x32d968[_0x1545('0x15')][_0x1545('0x14')]);}})[_0x1545('0x16')](function(_0x2e47fb){logger[_0x1545('0x12')]('VoiceTransferReport,\x20%s,\x20%s',_0x1beaf4,_0x2e47fb);_0xf1b92e(_0x2e47fb);});});}exports['CreateVoiceTransferReport']=function(_0x42f975){var _0x5b822e=this;return new Promise(function(_0x590823,_0x229bbe){return db[_0x1545('0x17')]['create'](_0x42f975[_0x1545('0x18')],{'raw':_0x42f975[_0x1545('0x19')]?_0x42f975[_0x1545('0x19')][_0x1545('0x1a')]===undefined?!![]:![]:!![]})[_0x1545('0xc')](function(_0x2b1aff){logger[_0x1545('0xd')](_0x1545('0x1b'),_0x42f975);logger['debug']('CreateVoiceTransferReport',_0x42f975,JSON['stringify'](_0x2b1aff));_0x590823(_0x2b1aff);})['catch'](function(_0x2c13d2){logger[_0x1545('0x12')](_0x1545('0x1b'),_0x2c13d2[_0x1545('0x14')],_0x42f975);_0x229bbe(_0x5b822e[_0x1545('0x12')](0x1f4,_0x2c13d2['message']));});});};
\ No newline at end of file
index f10b809..8dc35c4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc17c=['then','listen','info','start','map','filter','online','name','join','status','None','seedDB','default','./config/license','catch','error','exit','./mysqldb','./config/environment','./config/logger','./config/pm2','./config/pm2/config','./config/schedule','./config/schedule/chat','sequelize'];(function(_0x100e0c,_0x5523b8){var _0x4db1aa=function(_0x29f480){while(--_0x29f480){_0x100e0c['push'](_0x100e0c['shift']());}};_0x4db1aa(++_0x5523b8);}(_0xc17c,0x124));var _0xcc17=function(_0x87a4dc,_0xfd7200){_0x87a4dc=_0x87a4dc-0x0;var _0x29c5cf=_0xc17c[_0x87a4dc];return _0x29c5cf;};'use strict';var _=require('lodash');var mysqldb=require(_0xcc17('0x0'));var rpc=require('./rpc');var config=require(_0xcc17('0x1'));var logger=require(_0xcc17('0x2'))('app');var pm2=require(_0xcc17('0x3'));var pm2Config=require(_0xcc17('0x4'));var schedule=require(_0xcc17('0x5'));var chat=require(_0xcc17('0x6'));function main(){return mysqldb['db'][_0xcc17('0x7')]['sync']()[_0xcc17('0x8')](function(){return rpc[_0xcc17('0x9')]();})['then'](function(_0x442f4b){logger[_0xcc17('0xa')](_0x442f4b);return chat[_0xcc17('0xb')]();})[_0xcc17('0x8')](function(){return schedule['start']();})['then'](function(_0xa15e25){logger[_0xcc17('0xa')](_0xa15e25);return pm2[_0xcc17('0xb')](pm2Config);})['then'](function(_0x319d79){logger['info']('Online\x20apps:',_[_0xcc17('0xc')](_[_0xcc17('0xd')](_0x319d79,{'status':_0xcc17('0xe')}),_0xcc17('0xf'))[_0xcc17('0x10')]());logger['info']('Offline\x20apps:',_['map'](_[_0xcc17('0xd')](_0x319d79,function(_0x443922){return _0x443922[_0xcc17('0x11')]!==_0xcc17('0xe');}),_0xcc17('0xf'))['join']()||_0xcc17('0x12'));config[_0xcc17('0x13')]&&require('./config/seedDB')[_0xcc17('0x14')]();require(_0xcc17('0x15'))['default']();})[_0xcc17('0x16')](function(_0x219c80){logger[_0xcc17('0x17')]('Server\x20failed\x20to\x20start\x20due\x20to\x20error:\x20%s',_0x219c80);process[_0xcc17('0x18')](0x1);});}main();
\ No newline at end of file
+var _0x20be=['seedDB','./config/seedDB','default','./config/license','catch','Server\x20failed\x20to\x20start\x20due\x20to\x20error:\x20%s','exit','lodash','./mysqldb','./rpc','./config/logger','app','./config/pm2','./config/pm2/config','./config/schedule','./config/schedule/chat','sequelize','sync','then','listen','info','start','Online\x20apps:','filter','online','name','join','Offline\x20apps:','map','status','None'];(function(_0xd5babc,_0x1d76bc){var _0x365261=function(_0x5c2042){while(--_0x5c2042){_0xd5babc['push'](_0xd5babc['shift']());}};_0x365261(++_0x1d76bc);}(_0x20be,0x11e));var _0xe20b=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x20be[_0x42cae2];return _0x5f256f;};'use strict';var _=require(_0xe20b('0x0'));var mysqldb=require(_0xe20b('0x1'));var rpc=require(_0xe20b('0x2'));var config=require('./config/environment');var logger=require(_0xe20b('0x3'))(_0xe20b('0x4'));var pm2=require(_0xe20b('0x5'));var pm2Config=require(_0xe20b('0x6'));var schedule=require(_0xe20b('0x7'));var chat=require(_0xe20b('0x8'));function main(){return mysqldb['db'][_0xe20b('0x9')][_0xe20b('0xa')]()[_0xe20b('0xb')](function(){return rpc[_0xe20b('0xc')]();})[_0xe20b('0xb')](function(_0x4f1359){logger[_0xe20b('0xd')](_0x4f1359);return chat['start']();})[_0xe20b('0xb')](function(){return schedule['start']();})['then'](function(_0x2a614e){logger[_0xe20b('0xd')](_0x2a614e);return pm2[_0xe20b('0xe')](pm2Config);})[_0xe20b('0xb')](function(_0x574b62){logger[_0xe20b('0xd')](_0xe20b('0xf'),_['map'](_[_0xe20b('0x10')](_0x574b62,{'status':_0xe20b('0x11')}),_0xe20b('0x12'))[_0xe20b('0x13')]());logger[_0xe20b('0xd')](_0xe20b('0x14'),_[_0xe20b('0x15')](_[_0xe20b('0x10')](_0x574b62,function(_0x4fae48){return _0x4fae48[_0xe20b('0x16')]!=='online';}),_0xe20b('0x12'))[_0xe20b('0x13')]()||_0xe20b('0x17'));config[_0xe20b('0x18')]&&require(_0xe20b('0x19'))[_0xe20b('0x1a')]();require(_0xe20b('0x1b'))[_0xe20b('0x1a')]();})[_0xe20b('0x1c')](function(_0x1d8caf){logger['error'](_0xe20b('0x1d'),_0x1d8caf);process[_0xe20b('0x1e')](0x1);});}main();
\ No newline at end of file
index f4808bc..140f6a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf4d4=['unmanaged','json','Unmanaged.','catch','headers','authorization','startsWith','User','name','authenticate','user','Bearer','User\x20not\x20found.','isAuthenticated','../../config/license/util','getLicense','update','sign','signToken','hasRole','Required\x20role\x20needs\x20to\x20be\x20set','indexOf','role','userRoles','Forbidden','setTokenCookie','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','motion.token','cookie','motion.user','stringify','pick','redirect','/dashboards/general','../../mysqldb','jsonwebtoken','composable-middleware','basic-auth','ipaddr.js','secrets','session','fullname','email','userpic','permissions','voicePause','chatPause','faxPause','smsPause','pauseType','showWebBar','phoneBarRemoteControlPort','phoneBarRemoteControl','use','ChatInteraction','params','closed','then','status','disposition'];(function(_0x3ac58c,_0x463a97){var _0xa15d67=function(_0x4b9094){while(--_0x4b9094){_0x3ac58c['push'](_0x3ac58c['shift']());}};_0xa15d67(++_0x463a97);}(_0xf4d4,0x1c6));var _0x4f4d=function(_0x2587d6,_0x1f5199){_0x2587d6=_0x2587d6-0x0;var _0x969921=_0xf4d4[_0x2587d6];return _0x969921;};'use strict';var db=require(_0x4f4d('0x0'))['db'];var config=require('../../config/environment');var _=require('lodash');var jwt=require(_0x4f4d('0x1'));var expressJwt=require('express-jwt');var compose=require(_0x4f4d('0x2'));var basicAuth=require(_0x4f4d('0x3'));var ipaddr=require(_0x4f4d('0x4'));var validateJwt=expressJwt({'secret':config[_0x4f4d('0x5')][_0x4f4d('0x6')]});var userAttributes=['id','role',_0x4f4d('0x7'),'name','internal',_0x4f4d('0x8'),_0x4f4d('0x9'),_0x4f4d('0xa'),_0x4f4d('0xb'),_0x4f4d('0xc'),'mailPause',_0x4f4d('0xd'),_0x4f4d('0xe'),'openchannelPause',_0x4f4d('0xf'),_0x4f4d('0x10'),_0x4f4d('0x11'),_0x4f4d('0x12')];exports['isChatInteractionAuthorized']=function(){return isAuthenticated(!![])[_0x4f4d('0x13')](function(_0x2a5681,_0x4d31b8,_0x58cfbf){if(_0x2a5681['user']){_0x58cfbf();}else{return db[_0x4f4d('0x14')]['findOne']({'where':{'id':_0x2a5681[_0x4f4d('0x15')]['id']},'attributes':['id',_0x4f4d('0x16'),'disposition'],'raw':!![]})[_0x4f4d('0x17')](function(_0x41e9b1){if(_0x41e9b1&&_0x41e9b1[_0x4f4d('0x16')]){return _0x4d31b8[_0x4f4d('0x18')](_0x41e9b1[_0x4f4d('0x19')]===_0x4f4d('0x1a')?0x195:0x193)[_0x4f4d('0x1b')]({'message':_0x41e9b1[_0x4f4d('0x19')]===_0x4f4d('0x1a')?_0x4f4d('0x1c'):'Forbidden.'});}else{_0x58cfbf();}})[_0x4f4d('0x1d')](function(_0xab5075){_0x58cfbf(_0xab5075);});}});};function isAuthenticated(_0x5ad630){return compose()[_0x4f4d('0x13')](function(_0x30c1c1,_0x1a6afa,_0x185834){if(_0x30c1c1[_0x4f4d('0x1e')][_0x4f4d('0x1f')]){if(_[_0x4f4d('0x20')](_0x30c1c1[_0x4f4d('0x1e')][_0x4f4d('0x1f')],'Basic')){var _0x55293c=basicAuth(_0x30c1c1);db[_0x4f4d('0x21')]['find']({'where':{'name':_0x55293c[_0x4f4d('0x22')]}})[_0x4f4d('0x17')](function(_0x574ae8){if(!_0x574ae8||!_0x574ae8[_0x4f4d('0x23')](_0x55293c['pass'])){return _0x1a6afa[_0x4f4d('0x18')](0x191)[_0x4f4d('0x1b')]({'message':'Wrong\x20credentials.'});}_0x30c1c1[_0x4f4d('0x24')]={'id':_0x574ae8['id']};_0x185834();})[_0x4f4d('0x1d')](function(_0x4f1822){_0x185834(_0x4f1822);});}else if(_[_0x4f4d('0x20')](_0x30c1c1['headers'][_0x4f4d('0x1f')],_0x4f4d('0x25'))){validateJwt(_0x30c1c1,_0x1a6afa,_0x185834);}}else{if(_0x5ad630){_0x185834();}else{return _0x1a6afa[_0x4f4d('0x18')](0x191)['json']({'message':'Unknown\x20authorization\x20format.'});}}})[_0x4f4d('0x13')](function(_0x186b02,_0x501c0f,_0x42292a){if(_0x186b02[_0x4f4d('0x24')]){db['User']['find']({'where':{'id':_0x186b02[_0x4f4d('0x24')]['id']},'attributes':userAttributes})[_0x4f4d('0x17')](function(_0x4e9a57){if(!_0x4e9a57){return _0x501c0f[_0x4f4d('0x18')](0x194)[_0x4f4d('0x1b')]({'message':_0x4f4d('0x26')});}_0x186b02[_0x4f4d('0x24')]=_0x4e9a57;_0x42292a();})[_0x4f4d('0x1d')](function(_0x5c1bed){_0x42292a(_0x5c1bed);});}else if(_0x5ad630){_0x42292a();}else{return _0x501c0f[_0x4f4d('0x18')](0x194)['json']({'message':'User\x20object\x20not\x20found.'});}});}exports[_0x4f4d('0x27')]=isAuthenticated;function canUpdate(){return compose()['use'](function(_0x44468c,_0x1011de,_0x2f5aa2){return require(_0x4f4d('0x28'))[_0x4f4d('0x29')]()[_0x4f4d('0x17')](function(_0x54bbff){if(_0x54bbff[_0x4f4d('0x2a')]){_0x2f5aa2();}else{return _0x1011de[_0x4f4d('0x18')](0x193)[_0x4f4d('0x1b')]({'message':'Forbidden'});}})[_0x4f4d('0x1d')](function(_0x1a8648){_0x2f5aa2(_0x1a8648);});});}exports['canUpdate']=canUpdate;function signToken(_0x574f5c,_0x58d534){return jwt[_0x4f4d('0x2b')]({'id':_0x574f5c,'role':_0x58d534},config['secrets'][_0x4f4d('0x6')],{'expiresIn':0x15180});}exports[_0x4f4d('0x2c')]=signToken;exports[_0x4f4d('0x2d')]=function(_0x4ecb1f){if(!_0x4ecb1f){throw new Error(_0x4f4d('0x2e'));}return compose()['use'](isAuthenticated())['use'](function meetsRequirements(_0x36094f,_0x17e69c,_0x5867a5){if(config['userRoles'][_0x4f4d('0x2f')](_0x36094f[_0x4f4d('0x24')][_0x4f4d('0x30')])>=config[_0x4f4d('0x31')]['indexOf'](_0x4ecb1f)){return _0x5867a5();}else{return _0x17e69c[_0x4f4d('0x18')](0x193)[_0x4f4d('0x1b')]({'message':_0x4f4d('0x32')});}});};exports[_0x4f4d('0x33')]=function(_0x2cc17b,_0x149a34){if(!_0x2cc17b[_0x4f4d('0x24')]){return _0x149a34[_0x4f4d('0x18')](0x194)[_0x4f4d('0x1b')]({'message':_0x4f4d('0x34')});}var _0x533adb=signToken(_0x2cc17b[_0x4f4d('0x24')]['id'],_0x2cc17b[_0x4f4d('0x24')][_0x4f4d('0x30')]);_0x149a34['cookie'](_0x4f4d('0x35'),_0x533adb);_0x149a34[_0x4f4d('0x36')](_0x4f4d('0x37'),JSON[_0x4f4d('0x38')](_[_0x4f4d('0x39')](_0x2cc17b[_0x4f4d('0x24')],userAttributes)));_0x149a34[_0x4f4d('0x3a')](_0x4f4d('0x3b'));};
\ No newline at end of file
+var _0x0c66=['redirect','/dashboards/general','../../mysqldb','../../config/environment','lodash','jsonwebtoken','express-jwt','composable-middleware','basic-auth','ipaddr.js','secrets','session','role','fullname','name','internal','email','userpic','permissions','voicePause','mailPause','smsPause','openchannelPause','pauseType','showWebBar','phoneBarRemoteControlPort','phoneBarRemoteControl','isChatInteractionAuthorized','use','user','ChatInteraction','findOne','params','disposition','then','closed','status','unmanaged','json','Unmanaged.','Forbidden.','headers','authorization','startsWith','Basic','User','find','authenticate','pass','Wrong\x20credentials.','catch','Bearer','Unknown\x20authorization\x20format.','User\x20not\x20found.','User\x20object\x20not\x20found.','../../config/license/util','getLicense','update','Forbidden','canUpdate','sign','signToken','hasRole','Required\x20role\x20needs\x20to\x20be\x20set','userRoles','indexOf','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','cookie','motion.user','stringify','pick'];(function(_0x3a6efd,_0x2a5102){var _0x487b9a=function(_0x104f89){while(--_0x104f89){_0x3a6efd['push'](_0x3a6efd['shift']());}};_0x487b9a(++_0x2a5102);}(_0x0c66,0xd7));var _0x60c6=function(_0x47aa64,_0xfb8a07){_0x47aa64=_0x47aa64-0x0;var _0x549c7a=_0x0c66[_0x47aa64];return _0x549c7a;};'use strict';var db=require(_0x60c6('0x0'))['db'];var config=require(_0x60c6('0x1'));var _=require(_0x60c6('0x2'));var jwt=require(_0x60c6('0x3'));var expressJwt=require(_0x60c6('0x4'));var compose=require(_0x60c6('0x5'));var basicAuth=require(_0x60c6('0x6'));var ipaddr=require(_0x60c6('0x7'));var validateJwt=expressJwt({'secret':config[_0x60c6('0x8')][_0x60c6('0x9')]});var userAttributes=['id',_0x60c6('0xa'),_0x60c6('0xb'),_0x60c6('0xc'),_0x60c6('0xd'),_0x60c6('0xe'),_0x60c6('0xf'),_0x60c6('0x10'),_0x60c6('0x11'),'chatPause',_0x60c6('0x12'),'faxPause',_0x60c6('0x13'),_0x60c6('0x14'),_0x60c6('0x15'),_0x60c6('0x16'),_0x60c6('0x17'),_0x60c6('0x18')];exports[_0x60c6('0x19')]=function(){return isAuthenticated(!![])[_0x60c6('0x1a')](function(_0x405bec,_0x37909d,_0x276edc){if(_0x405bec[_0x60c6('0x1b')]){_0x276edc();}else{return db[_0x60c6('0x1c')][_0x60c6('0x1d')]({'where':{'id':_0x405bec[_0x60c6('0x1e')]['id']},'attributes':['id','closed',_0x60c6('0x1f')],'raw':!![]})[_0x60c6('0x20')](function(_0x185a2f){if(_0x185a2f&&_0x185a2f[_0x60c6('0x21')]){return _0x37909d[_0x60c6('0x22')](_0x185a2f[_0x60c6('0x1f')]===_0x60c6('0x23')?0x195:0x193)[_0x60c6('0x24')]({'message':_0x185a2f['disposition']===_0x60c6('0x23')?_0x60c6('0x25'):_0x60c6('0x26')});}else{_0x276edc();}})['catch'](function(_0x57bcd6){_0x276edc(_0x57bcd6);});}});};function isAuthenticated(_0x3d2a73){return compose()[_0x60c6('0x1a')](function(_0x550ae0,_0x10a1c9,_0x151104){if(_0x550ae0[_0x60c6('0x27')][_0x60c6('0x28')]){if(_[_0x60c6('0x29')](_0x550ae0[_0x60c6('0x27')][_0x60c6('0x28')],_0x60c6('0x2a'))){var _0x29ddc8=basicAuth(_0x550ae0);db[_0x60c6('0x2b')][_0x60c6('0x2c')]({'where':{'name':_0x29ddc8['name']}})[_0x60c6('0x20')](function(_0x353344){if(!_0x353344||!_0x353344[_0x60c6('0x2d')](_0x29ddc8[_0x60c6('0x2e')])){return _0x10a1c9['status'](0x191)[_0x60c6('0x24')]({'message':_0x60c6('0x2f')});}_0x550ae0[_0x60c6('0x1b')]={'id':_0x353344['id']};_0x151104();})[_0x60c6('0x30')](function(_0x251b03){_0x151104(_0x251b03);});}else if(_[_0x60c6('0x29')](_0x550ae0['headers'][_0x60c6('0x28')],_0x60c6('0x31'))){validateJwt(_0x550ae0,_0x10a1c9,_0x151104);}}else{if(_0x3d2a73){_0x151104();}else{return _0x10a1c9[_0x60c6('0x22')](0x191)[_0x60c6('0x24')]({'message':_0x60c6('0x32')});}}})['use'](function(_0x38729c,_0x31a61d,_0x339fe6){if(_0x38729c[_0x60c6('0x1b')]){db[_0x60c6('0x2b')][_0x60c6('0x2c')]({'where':{'id':_0x38729c[_0x60c6('0x1b')]['id']},'attributes':userAttributes})[_0x60c6('0x20')](function(_0x57b138){if(!_0x57b138){return _0x31a61d['status'](0x194)[_0x60c6('0x24')]({'message':_0x60c6('0x33')});}_0x38729c[_0x60c6('0x1b')]=_0x57b138;_0x339fe6();})[_0x60c6('0x30')](function(_0x59af22){_0x339fe6(_0x59af22);});}else if(_0x3d2a73){_0x339fe6();}else{return _0x31a61d[_0x60c6('0x22')](0x194)[_0x60c6('0x24')]({'message':_0x60c6('0x34')});}});}exports['isAuthenticated']=isAuthenticated;function canUpdate(){return compose()[_0x60c6('0x1a')](function(_0x1ced6a,_0x2c31fc,_0xce2908){return require(_0x60c6('0x35'))[_0x60c6('0x36')]()['then'](function(_0x4725bf){if(_0x4725bf[_0x60c6('0x37')]){_0xce2908();}else{return _0x2c31fc['status'](0x193)[_0x60c6('0x24')]({'message':_0x60c6('0x38')});}})[_0x60c6('0x30')](function(_0x531e10){_0xce2908(_0x531e10);});});}exports[_0x60c6('0x39')]=canUpdate;function signToken(_0x506372,_0x4ba210){return jwt[_0x60c6('0x3a')]({'id':_0x506372,'role':_0x4ba210},config[_0x60c6('0x8')][_0x60c6('0x9')],{'expiresIn':0x15180});}exports[_0x60c6('0x3b')]=signToken;exports[_0x60c6('0x3c')]=function(_0x308e22){if(!_0x308e22){throw new Error(_0x60c6('0x3d'));}return compose()['use'](isAuthenticated())[_0x60c6('0x1a')](function meetsRequirements(_0x1c5ec4,_0x16135f,_0x4ed360){if(config[_0x60c6('0x3e')][_0x60c6('0x3f')](_0x1c5ec4[_0x60c6('0x1b')]['role'])>=config[_0x60c6('0x3e')][_0x60c6('0x3f')](_0x308e22)){return _0x4ed360();}else{return _0x16135f[_0x60c6('0x22')](0x193)[_0x60c6('0x24')]({'message':_0x60c6('0x38')});}});};exports['setTokenCookie']=function(_0x4ec31d,_0x537a1e){if(!_0x4ec31d[_0x60c6('0x1b')]){return _0x537a1e[_0x60c6('0x22')](0x194)[_0x60c6('0x24')]({'message':_0x60c6('0x40')});}var _0x101e0b=signToken(_0x4ec31d[_0x60c6('0x1b')]['id'],_0x4ec31d[_0x60c6('0x1b')][_0x60c6('0xa')]);_0x537a1e[_0x60c6('0x41')]('motion.token',_0x101e0b);_0x537a1e[_0x60c6('0x41')](_0x60c6('0x42'),JSON[_0x60c6('0x43')](_[_0x60c6('0x44')](_0x4ec31d['user'],userAttributes)));_0x537a1e[_0x60c6('0x45')](_0x60c6('0x46'));};
\ No newline at end of file
index 7605357..110eae1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x872c=['hasOwnProperty','encryptFile','createCipher','algorithm','data','update','binary','write','end','final','close','decryptFile','createReadStream','createWriteStream','createDecipher','unlink','crypto','bluebird','aes192'];(function(_0xe6a426,_0xfa868f){var _0x103a12=function(_0x49d6e8){while(--_0x49d6e8){_0xe6a426['push'](_0xe6a426['shift']());}};_0x103a12(++_0xfa868f);}(_0x872c,0x153));var _0xc872=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x872c[_0x3b380d];return _0x54502b;};'use strict';var crypto=require(_0xc872('0x0'));var fs=require('fs');var BPromise=require(_0xc872('0x1'));var defaultOptions={'algorithm':_0xc872('0x2')};function combineOptions(_0x3fbf19){var _0x537139={};for(var _0x18db63 in defaultOptions){if(defaultOptions[_0xc872('0x3')](_0x18db63)){_0x537139[_0x18db63]=defaultOptions[_0x18db63];}}if(_0x3fbf19){for(var _0x1cf744 in _0x3fbf19){if(_0x3fbf19[_0xc872('0x3')](_0x1cf744)){_0x537139[_0x1cf744]=_0x3fbf19[_0x1cf744];}}}return _0x537139;}exports[_0xc872('0x4')]=function(_0x17c03a,_0x19e318,_0x563233,_0xe77119){return new BPromise(function(_0x1b7dea,_0x2ad9f5){_0xe77119=combineOptions(_0xe77119);var _0xcf864c=new Buffer(_0x563233);var _0x3a5cb5=fs['createReadStream'](_0x17c03a);var _0x4087f1=fs['createWriteStream'](_0x19e318);var _0x5283f9=crypto[_0xc872('0x5')](_0xe77119[_0xc872('0x6')],_0xcf864c);_0x3a5cb5['on'](_0xc872('0x7'),function(_0x18e647){var _0x20d074=new Buffer(_0x5283f9[_0xc872('0x8')](_0x18e647),_0xc872('0x9'));_0x4087f1[_0xc872('0xa')](_0x20d074);});_0x3a5cb5['on'](_0xc872('0xb'),function(){try{var _0x5e9451=new Buffer(_0x5283f9[_0xc872('0xc')](_0xc872('0x9')),_0xc872('0x9'));_0x4087f1[_0xc872('0xa')](_0x5e9451);_0x4087f1[_0xc872('0xb')]();_0x4087f1['on'](_0xc872('0xd'),function(){return _0x1b7dea(_0x19e318);});}catch(_0x1a1a7d){fs['unlink'](_0x19e318);return _0x2ad9f5(_0x1a1a7d);}});});};exports[_0xc872('0xe')]=function(_0x1ef943,_0x4ce039,_0x246334,_0x48b780){return new BPromise(function(_0x244473,_0x5b97e6){_0x48b780=combineOptions(_0x48b780);var _0x4dbd9c=new Buffer(_0x246334);var _0x45924c=fs[_0xc872('0xf')](_0x1ef943);var _0x2166fa=fs[_0xc872('0x10')](_0x4ce039);var _0x4e547a=crypto[_0xc872('0x11')](_0x48b780[_0xc872('0x6')],_0x4dbd9c);_0x45924c['on'](_0xc872('0x7'),function(_0x13e46f){var _0x572b40=new Buffer(_0x4e547a['update'](_0x13e46f),'binary');_0x2166fa['write'](_0x572b40);});_0x45924c['on']('end',function(){try{var _0x3d82da=new Buffer(_0x4e547a['final'](_0xc872('0x9')),_0xc872('0x9'));_0x2166fa[_0xc872('0xa')](_0x3d82da);_0x2166fa['end']();_0x2166fa['on'](_0xc872('0xd'),function(){return _0x244473(_0x4ce039);});}catch(_0x136013){fs[_0xc872('0x12')](_0x4ce039);return _0x5b97e6(_0x136013);}});});};
\ No newline at end of file
+var _0x1255=['binary','end','close','decryptFile','createDecipher','final','unlink','crypto','bluebird','aes192','hasOwnProperty','encryptFile','createReadStream','createWriteStream','createCipher','algorithm','data','update','write'];(function(_0x31ce19,_0xdc7b35){var _0x53f6c5=function(_0x2e479d){while(--_0x2e479d){_0x31ce19['push'](_0x31ce19['shift']());}};_0x53f6c5(++_0xdc7b35);}(_0x1255,0x14a));var _0x5125=function(_0x3dc7aa,_0x3cf056){_0x3dc7aa=_0x3dc7aa-0x0;var _0x290ee9=_0x1255[_0x3dc7aa];return _0x290ee9;};'use strict';var crypto=require(_0x5125('0x0'));var fs=require('fs');var BPromise=require(_0x5125('0x1'));var defaultOptions={'algorithm':_0x5125('0x2')};function combineOptions(_0x13d2ac){var _0x2de148={};for(var _0xd05965 in defaultOptions){if(defaultOptions[_0x5125('0x3')](_0xd05965)){_0x2de148[_0xd05965]=defaultOptions[_0xd05965];}}if(_0x13d2ac){for(var _0x44e6de in _0x13d2ac){if(_0x13d2ac[_0x5125('0x3')](_0x44e6de)){_0x2de148[_0x44e6de]=_0x13d2ac[_0x44e6de];}}}return _0x2de148;}exports[_0x5125('0x4')]=function(_0x4e11f,_0x3b7a2a,_0x56acef,_0x34c077){return new BPromise(function(_0x69f0a,_0x583aba){_0x34c077=combineOptions(_0x34c077);var _0x3b8988=new Buffer(_0x56acef);var _0x4db810=fs[_0x5125('0x5')](_0x4e11f);var _0x4fba5=fs[_0x5125('0x6')](_0x3b7a2a);var _0xc0724a=crypto[_0x5125('0x7')](_0x34c077[_0x5125('0x8')],_0x3b8988);_0x4db810['on'](_0x5125('0x9'),function(_0x5b8752){var _0xd343fc=new Buffer(_0xc0724a[_0x5125('0xa')](_0x5b8752),'binary');_0x4fba5[_0x5125('0xb')](_0xd343fc);});_0x4db810['on']('end',function(){try{var _0x503793=new Buffer(_0xc0724a['final']('binary'),_0x5125('0xc'));_0x4fba5[_0x5125('0xb')](_0x503793);_0x4fba5[_0x5125('0xd')]();_0x4fba5['on'](_0x5125('0xe'),function(){return _0x69f0a(_0x3b7a2a);});}catch(_0x5f566e){fs['unlink'](_0x3b7a2a);return _0x583aba(_0x5f566e);}});});};exports[_0x5125('0xf')]=function(_0x2c9d9b,_0x376d5b,_0x3ba2ac,_0x2becb9){return new BPromise(function(_0x5506e3,_0x3e0a45){_0x2becb9=combineOptions(_0x2becb9);var _0x37e523=new Buffer(_0x3ba2ac);var _0x16dcb5=fs[_0x5125('0x5')](_0x2c9d9b);var _0x201de0=fs[_0x5125('0x6')](_0x376d5b);var _0x2ba99b=crypto[_0x5125('0x10')](_0x2becb9[_0x5125('0x8')],_0x37e523);_0x16dcb5['on'](_0x5125('0x9'),function(_0x20fc9c){var _0x193957=new Buffer(_0x2ba99b[_0x5125('0xa')](_0x20fc9c),_0x5125('0xc'));_0x201de0[_0x5125('0xb')](_0x193957);});_0x16dcb5['on'](_0x5125('0xd'),function(){try{var _0x1e6db6=new Buffer(_0x2ba99b[_0x5125('0x11')](_0x5125('0xc')),_0x5125('0xc'));_0x201de0['write'](_0x1e6db6);_0x201de0[_0x5125('0xd')]();_0x201de0['on'](_0x5125('0xe'),function(){return _0x5506e3(_0x376d5b);});}catch(_0x35f969){fs[_0x5125('0x12')](_0x376d5b);return _0x3e0a45(_0x35f969);}});});};
\ No newline at end of file
index becfee7..7d164ac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x814b=['SELECT','num','Empty','length','push','dirname','basename','existsSync','join','mkdirSync','each','%s%d.%s','csv','%s.%s','writeFileSync','zip','Completed','error','util','path','lodash','to-csv','bluebird','zip-dir','../../mysqldb','dbH','argv','savename','AnalyticExtractedReport','update','Setting','find','split','splitSizeCsv','then','query','format','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','sequelize','QueryTypes'];(function(_0x4e9a07,_0x1b49f0){var _0xab802a=function(_0x73ba57){while(--_0x73ba57){_0x4e9a07['push'](_0x4e9a07['shift']());}};_0xab802a(++_0x1b49f0);}(_0x814b,0x1a2));var _0xb814=function(_0x138d06,_0x33edf2){_0x138d06=_0x138d06-0x0;var _0x1a01eb=_0x814b[_0x138d06];return _0x1a01eb;};'use strict';var util=require(_0xb814('0x0'));var path=require(_0xb814('0x1'));var _=require(_0xb814('0x2'));var csv=require(_0xb814('0x3'));var fs=require('fs');var BPromise=require(_0xb814('0x4'));var zipdir=require(_0xb814('0x5'));var rimraf=require('rimraf');var db=require(_0xb814('0x6'))['db'];var dbH=require(_0xb814('0x6'))[_0xb814('0x7')];var EXTRACTED_REPORT_ID=Number(process[_0xb814('0x8')][0x2]);var QUERY=process[_0xb814('0x8')][0x3];var PATH=process[_0xb814('0x8')][0x4];function analyticExtractedReport(_0x53e507,_0x3b0829){var _0x2e6272={'status':_0x53e507};var _0x5c8539={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x3b0829){_0x2e6272[_0xb814('0x9')]=_0x3b0829;}return db[_0xb814('0xa')][_0xb814('0xb')](_0x2e6272,_0x5c8539);}function main(){var _0x41166c=0x1388;var _0x1fea33;return db[_0xb814('0xc')][_0xb814('0xd')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0xb814('0xe'),_0xb814('0xf')]})[_0xb814('0x10')](function(_0x10e4a6){if(_0x10e4a6){_0x1fea33=_0x10e4a6;_0x41166c=_0x1fea33['splitSizeCsv']||0x1388;}})[_0xb814('0x10')](function(){return dbH['sequelize'][_0xb814('0x11')](util[_0xb814('0x12')](_0xb814('0x13'),QUERY),{'type':dbH[_0xb814('0x14')][_0xb814('0x15')][_0xb814('0x16')]});})[_0xb814('0x10')](function(_0x41ed7b){if(!_0x41ed7b[0x0][_0xb814('0x17')]){return analyticExtractedReport(_0xb814('0x18'));}var _0x3f4881=[];var _0x44fb96=0x0;var _0x17f5bd=!![];if(_0x41ed7b&&_0x41ed7b[_0xb814('0x19')]){var _0x303aca=_0x41ed7b[0x0][_0xb814('0x17')]%(_0x44fb96+_0x41166c);if(_0x1fea33[_0xb814('0xe')]){for(;_0x17f5bd;_0x44fb96+=_0x41166c,_0x303aca=_0x41ed7b[0x0][_0xb814('0x17')]%(_0x44fb96+_0x41166c)){if(_0x303aca==0x0||_0x303aca==_0x41ed7b[0x0][_0xb814('0x17')]){_0x17f5bd=![];}_0x3f4881[_0xb814('0x1a')](dbH[_0xb814('0x14')]['query'](util[_0xb814('0x12')]('%s\x20limit\x20%d\x20OFFSET\x20%d',QUERY,_0x41166c,_0x44fb96),{'type':dbH[_0xb814('0x14')][_0xb814('0x15')]['SELECT']}));}}else{_0x3f4881['push'](dbH['sequelize'][_0xb814('0x11')](QUERY,{'type':dbH['sequelize']['QueryTypes'][_0xb814('0x16')]}));}}var _0x24211d=path[_0xb814('0x1b')](PATH);var _0x4e139e=path[_0xb814('0x1c')](PATH,'.csv');var _0x1e6393=_0x1fea33[_0xb814('0xe')]&&_0x3f4881[_0xb814('0x19')]>0x1;var _0x470e81=[];if(!fs[_0xb814('0x1d')](path[_0xb814('0x1e')](_0x24211d,_0x4e139e))&&_0x1e6393){fs[_0xb814('0x1f')](path['join'](_0x24211d,_0x4e139e));}return BPromise[_0xb814('0x20')](_0x3f4881,function(_0x52b7a3){_0x470e81[_0xb814('0x1a')](_0x52b7a3);})[_0xb814('0x10')](function(){for(var _0x31c7ec=0x0;_0x31c7ec<_0x470e81[_0xb814('0x19')];_0x31c7ec+=0x1){var _0x1c8a2e;var _0xb9e57d=_0x470e81[_0x31c7ec];if(_0x1e6393){_0x1c8a2e=path[_0xb814('0x1e')](_0x24211d,_0x4e139e,util['format'](_0xb814('0x21'),_0x4e139e,_0x31c7ec,_0xb814('0x22')));}else{_0x1c8a2e=path[_0xb814('0x1e')](_0x24211d,util[_0xb814('0x12')](_0xb814('0x23'),_0x4e139e,_0xb814('0x22')));}fs[_0xb814('0x24')](_0x1c8a2e,csv(_0xb9e57d));}})[_0xb814('0x10')](function(){if(_0x1e6393){zipdir(path['join'](_0x24211d,_0x4e139e),{'saveTo':path[_0xb814('0x1e')](_0x24211d,util[_0xb814('0x12')]('%s.%s',_0x4e139e,_0xb814('0x25')))},function(_0x37d24d,_0x530744){});rimraf(path['join'](_0x24211d,_0x4e139e),function(){});}})[_0xb814('0x10')](function(){return analyticExtractedReport(_0xb814('0x26'),_0x1e6393?util['format'](_0xb814('0x23'),_0x4e139e,_0x1e6393?'zip':_0xb814('0x22')):null);});})['catch'](function(_0x4cfc58){console[_0xb814('0x27')](_0x4cfc58);return analyticExtractedReport('Error');});}main();
\ No newline at end of file
+var _0x814b=['SELECT','num','Empty','length','push','dirname','basename','existsSync','join','mkdirSync','each','%s%d.%s','csv','%s.%s','writeFileSync','zip','Completed','error','util','path','lodash','to-csv','bluebird','zip-dir','../../mysqldb','dbH','argv','savename','AnalyticExtractedReport','update','Setting','find','split','splitSizeCsv','then','query','format','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','sequelize','QueryTypes'];(function(_0x3ba537,_0x56b969){var _0x585c1a=function(_0x1dd30b){while(--_0x1dd30b){_0x3ba537['push'](_0x3ba537['shift']());}};_0x585c1a(++_0x56b969);}(_0x814b,0x1a2));var _0xb814=function(_0x438578,_0xeccb24){_0x438578=_0x438578-0x0;var _0x55f90b=_0x814b[_0x438578];return _0x55f90b;};'use strict';var util=require(_0xb814('0x0'));var path=require(_0xb814('0x1'));var _=require(_0xb814('0x2'));var csv=require(_0xb814('0x3'));var fs=require('fs');var BPromise=require(_0xb814('0x4'));var zipdir=require(_0xb814('0x5'));var rimraf=require('rimraf');var db=require(_0xb814('0x6'))['db'];var dbH=require(_0xb814('0x6'))[_0xb814('0x7')];var EXTRACTED_REPORT_ID=Number(process[_0xb814('0x8')][0x2]);var QUERY=process[_0xb814('0x8')][0x3];var PATH=process[_0xb814('0x8')][0x4];function analyticExtractedReport(_0x53e507,_0x3b0829){var _0x2e6272={'status':_0x53e507};var _0x5c8539={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x3b0829){_0x2e6272[_0xb814('0x9')]=_0x3b0829;}return db[_0xb814('0xa')][_0xb814('0xb')](_0x2e6272,_0x5c8539);}function main(){var _0x41166c=0x1388;var _0x1fea33;return db[_0xb814('0xc')][_0xb814('0xd')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0xb814('0xe'),_0xb814('0xf')]})[_0xb814('0x10')](function(_0x10e4a6){if(_0x10e4a6){_0x1fea33=_0x10e4a6;_0x41166c=_0x1fea33['splitSizeCsv']||0x1388;}})[_0xb814('0x10')](function(){return dbH['sequelize'][_0xb814('0x11')](util[_0xb814('0x12')](_0xb814('0x13'),QUERY),{'type':dbH[_0xb814('0x14')][_0xb814('0x15')][_0xb814('0x16')]});})[_0xb814('0x10')](function(_0x41ed7b){if(!_0x41ed7b[0x0][_0xb814('0x17')]){return analyticExtractedReport(_0xb814('0x18'));}var _0x3f4881=[];var _0x44fb96=0x0;var _0x17f5bd=!![];if(_0x41ed7b&&_0x41ed7b[_0xb814('0x19')]){var _0x303aca=_0x41ed7b[0x0][_0xb814('0x17')]%(_0x44fb96+_0x41166c);if(_0x1fea33[_0xb814('0xe')]){for(;_0x17f5bd;_0x44fb96+=_0x41166c,_0x303aca=_0x41ed7b[0x0][_0xb814('0x17')]%(_0x44fb96+_0x41166c)){if(_0x303aca==0x0||_0x303aca==_0x41ed7b[0x0][_0xb814('0x17')]){_0x17f5bd=![];}_0x3f4881[_0xb814('0x1a')](dbH[_0xb814('0x14')]['query'](util[_0xb814('0x12')]('%s\x20limit\x20%d\x20OFFSET\x20%d',QUERY,_0x41166c,_0x44fb96),{'type':dbH[_0xb814('0x14')][_0xb814('0x15')]['SELECT']}));}}else{_0x3f4881['push'](dbH['sequelize'][_0xb814('0x11')](QUERY,{'type':dbH['sequelize']['QueryTypes'][_0xb814('0x16')]}));}}var _0x24211d=path[_0xb814('0x1b')](PATH);var _0x4e139e=path[_0xb814('0x1c')](PATH,'.csv');var _0x1e6393=_0x1fea33[_0xb814('0xe')]&&_0x3f4881[_0xb814('0x19')]>0x1;var _0x470e81=[];if(!fs[_0xb814('0x1d')](path[_0xb814('0x1e')](_0x24211d,_0x4e139e))&&_0x1e6393){fs[_0xb814('0x1f')](path['join'](_0x24211d,_0x4e139e));}return BPromise[_0xb814('0x20')](_0x3f4881,function(_0x52b7a3){_0x470e81[_0xb814('0x1a')](_0x52b7a3);})[_0xb814('0x10')](function(){for(var _0x31c7ec=0x0;_0x31c7ec<_0x470e81[_0xb814('0x19')];_0x31c7ec+=0x1){var _0x1c8a2e;var _0xb9e57d=_0x470e81[_0x31c7ec];if(_0x1e6393){_0x1c8a2e=path[_0xb814('0x1e')](_0x24211d,_0x4e139e,util['format'](_0xb814('0x21'),_0x4e139e,_0x31c7ec,_0xb814('0x22')));}else{_0x1c8a2e=path[_0xb814('0x1e')](_0x24211d,util[_0xb814('0x12')](_0xb814('0x23'),_0x4e139e,_0xb814('0x22')));}fs[_0xb814('0x24')](_0x1c8a2e,csv(_0xb9e57d));}})[_0xb814('0x10')](function(){if(_0x1e6393){zipdir(path['join'](_0x24211d,_0x4e139e),{'saveTo':path[_0xb814('0x1e')](_0x24211d,util[_0xb814('0x12')]('%s.%s',_0x4e139e,_0xb814('0x25')))},function(_0x37d24d,_0x530744){});rimraf(path['join'](_0x24211d,_0x4e139e),function(){});}})[_0xb814('0x10')](function(){return analyticExtractedReport(_0xb814('0x26'),_0x1e6393?util['format'](_0xb814('0x23'),_0x4e139e,_0x1e6393?'zip':_0xb814('0x22')):null);});})['catch'](function(_0x4cfc58){console[_0xb814('0x27')](_0x4cfc58);return analyticExtractedReport('Error');});}main();
\ No newline at end of file
index 148e23d..f00f2e5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdcbf=['tableHeader','num','Empty','basename','.pdf','Setting','then','splitSizePdf','length','split','sequelize','format','%s\x20limit\x20%d\x20OFFSET\x20%d','QueryTypes','SELECT','query','existsSync','join','mkdirSync','name','endDate','landscape','header','hasOwnProperty','toString','body','/fonts/Roboto-Medium.ttf','/fonts/Roboto-Italic.ttf','createPdfKitDocument','pdf','%s.%s','pipe','createWriteStream','finish','error','zip','Completed','AnalyticExtractedReport','findOne','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','Error','lodash','bluebird','util','path','pdfmake/src/printer','zip-dir','rimraf','../../mysqldb','dbH','argv','MMMM\x20Do\x20YYYY,\x20h:mm:ss\x20a','savename','update','push'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0xdcbf,0xce));var _0xfdcb=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xdcbf[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0xfdcb('0x0'));var fs=require('fs');var BPromise=require(_0xfdcb('0x1'));var util=require(_0xfdcb('0x2'));var path=require(_0xfdcb('0x3'));var moment=require('moment');var PdfPrinter=require(_0xfdcb('0x4'));var zipdir=require(_0xfdcb('0x5'));var rimraf=require(_0xfdcb('0x6'));var db=require(_0xfdcb('0x7'))['db'];var dbH=require(_0xfdcb('0x7'))[_0xfdcb('0x8')];var EXTRACTED_REPORT_ID=Number(process[_0xfdcb('0x9')][0x2]);var QUERY=process[_0xfdcb('0x9')][0x3];var PATH=process[_0xfdcb('0x9')][0x4];var NAME=process['argv'][0x5];var FORMAT=_0xfdcb('0xa');var _extractedReport;function analyticExtractedReport(_0x22ba07,_0x388124){var _0x35335b={'status':_0x22ba07};var _0xef2d13={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x388124){_0x35335b[_0xfdcb('0xb')]=_0x388124;}return db['AnalyticExtractedReport'][_0xfdcb('0xc')](_0x35335b,_0xef2d13);}function getHeader(_0x67e1f2){var _0x5dc90f=[];for(var _0x1c653e in _0x67e1f2){if(_0x67e1f2['hasOwnProperty'](_0x1c653e)){_0x5dc90f[_0xfdcb('0xd')]({'text':_0x1c653e,'style':_0xfdcb('0xe')});}}return _0x5dc90f;}function extractReport(_0x235d30){var _0x4eee1a=0x1388;var _0x963e0a;if(!_0x235d30[0x0][_0xfdcb('0xf')]){return analyticExtractedReport(_0xfdcb('0x10'));}var _0xc4d92e=[];var _0x5c4a1=0x0;var _0x24068e=!![];var _0x4baaff=path['dirname'](PATH);var _0x712e62=path[_0xfdcb('0x11')](PATH,_0xfdcb('0x12'));var _0x3d3b24=![];var _0x519f10=[];return db[_0xfdcb('0x13')]['find']({'where':{'id':0x1},'raw':!![],'attributes':['id','split','splitSizePdf']})[_0xfdcb('0x14')](function(_0x390773){if(_0x390773){_0x963e0a=_0x390773;_0x4eee1a=_0x963e0a[_0xfdcb('0x15')]||0x3e8;}})['then'](function(){if(_0x235d30&&_0x235d30[_0xfdcb('0x16')]){var _0x31fe79=_0x235d30[0x0][_0xfdcb('0xf')]%(_0x5c4a1+_0x4eee1a);if(_0x963e0a[_0xfdcb('0x17')]){for(;_0x24068e;_0x5c4a1+=_0x4eee1a,_0x31fe79=_0x235d30[0x0]['num']%(_0x5c4a1+_0x4eee1a)){if(_0x31fe79==0x0||_0x31fe79==_0x235d30[0x0]['num']){_0x24068e=![];}_0xc4d92e[_0xfdcb('0xd')](dbH[_0xfdcb('0x18')]['query'](util[_0xfdcb('0x19')](_0xfdcb('0x1a'),QUERY,_0x4eee1a,_0x5c4a1),{'type':dbH[_0xfdcb('0x18')][_0xfdcb('0x1b')][_0xfdcb('0x1c')]}));}}else{_0xc4d92e[_0xfdcb('0xd')](dbH[_0xfdcb('0x18')][_0xfdcb('0x1d')](QUERY,{'type':dbH[_0xfdcb('0x18')][_0xfdcb('0x1b')][_0xfdcb('0x1c')]}));}}_0x3d3b24=_0x963e0a[_0xfdcb('0x17')]&&_0xc4d92e[_0xfdcb('0x16')]>0x1;if(!fs[_0xfdcb('0x1e')](path[_0xfdcb('0x1f')](_0x4baaff,_0x712e62))&&_0x3d3b24){fs[_0xfdcb('0x20')](path[_0xfdcb('0x1f')](_0x4baaff,_0x712e62));}return BPromise['each'](_0xc4d92e,function(_0x23bfad){_0x519f10[_0xfdcb('0xd')](_0x23bfad);});})[_0xfdcb('0x14')](function(){return BPromise['each'](_0xc4d92e,function(_0x4087f2,_0x596b0a){var _0x55da4e;var _0x2ed537=util[_0xfdcb('0x19')]('Name:\x20%s\x0aReport:\x20%s\x0aFrom:\x20%s\x20To:\x20%s',NAME,_extractedReport[_0xfdcb('0x21')],moment(_extractedReport['startDate'])['format'](FORMAT),moment(_extractedReport[_0xfdcb('0x22')])[_0xfdcb('0x19')](FORMAT));var _0x4c9a1d={'pageSize':'A4','pageOrientation':_0xfdcb('0x23'),'content':[{'text':_0x2ed537,'style':_0xfdcb('0x24')}],'styles':{'header':{'fontSize':0x12,'bold':!![],'margin':[0x0,0x0,0x0,0xa]},'tableHeader':{'bold':!![],'fontSize':0xd,'color':'black'}}};var _0xe4ace9={'headerRows':0x1,'body':[]};_0xe4ace9['body'][_0xfdcb('0xd')](getHeader(_0x4087f2[0x0]));var _0x13e69b;for(var _0x5d8bfd=0x0;_0x5d8bfd<_0x4087f2['length'];_0x5d8bfd+=0x1){_0x13e69b=[];for(var _0x289a8f in _0x4087f2[_0x5d8bfd]){if(_0x4087f2[_0x5d8bfd][_0xfdcb('0x25')](_0x289a8f)){_0x13e69b[_0xfdcb('0xd')](_0x4087f2[_0x5d8bfd][_0x289a8f]?_[_0xfdcb('0x26')](_0x4087f2[_0x5d8bfd][_0x289a8f]):'');}}_0xe4ace9[_0xfdcb('0x27')]['push'](_0x13e69b);}_0x4c9a1d['content'][_0xfdcb('0xd')]({'table':_0xe4ace9});return new BPromise(function(_0x4a2fbb,_0x586e74){var _0x3782ae=new PdfPrinter({'Roboto':{'normal':__dirname+'/fonts/Roboto-Regular.ttf','bold':__dirname+_0xfdcb('0x28'),'italics':__dirname+_0xfdcb('0x29'),'bolditalics':__dirname+'/fonts/Roboto-MediumItalic.ttf'}});var _0x1f177e=_0x3782ae[_0xfdcb('0x2a')](_0x4c9a1d);if(_0x3d3b24){_0x55da4e=path[_0xfdcb('0x1f')](_0x4baaff,_0x712e62,util[_0xfdcb('0x19')]('%s%d.%s',_0x712e62,_0x596b0a,_0xfdcb('0x2b')));}else{_0x55da4e=path[_0xfdcb('0x1f')](_0x4baaff,util['format'](_0xfdcb('0x2c'),_0x712e62,_0xfdcb('0x2b')));}var _0x3deb38=_0x1f177e[_0xfdcb('0x2d')](fs[_0xfdcb('0x2e')](_0x55da4e));_0x3deb38['on'](_0xfdcb('0x2f'),function(){_0x4a2fbb();});_0x3deb38['on'](_0xfdcb('0x30'),function(_0x4e51ab){console['log']('err',_0x4e51ab);_0x586e74(_0x4e51ab);});_0x1f177e['end']();});});})[_0xfdcb('0x14')](function(){if(_0x3d3b24){return new BPromise(function(_0x5b428b,_0x548d9e){zipdir(path[_0xfdcb('0x1f')](_0x4baaff,_0x712e62),{'saveTo':path['join'](_0x4baaff,util['format'](_0xfdcb('0x2c'),_0x712e62,_0xfdcb('0x31')))},function(_0x529ac9){if(_0x529ac9){_0x548d9e(_0x529ac9);}else{_0x5b428b();}});});}})['then'](function(){if(_0x3d3b24){rimraf(path[_0xfdcb('0x1f')](_0x4baaff,_0x712e62),function(){});}})[_0xfdcb('0x14')](function(){return analyticExtractedReport(_0xfdcb('0x32'),_0x3d3b24?util['format']('%s.%s',_0x712e62,_0x3d3b24?_0xfdcb('0x31'):_0xfdcb('0x2b')):null);});}function main(){return db[_0xfdcb('0x33')][_0xfdcb('0x34')]({'where':{'id':EXTRACTED_REPORT_ID}})[_0xfdcb('0x14')](function(_0x1f5524){_extractedReport=_0x1f5524;return dbH[_0xfdcb('0x18')][_0xfdcb('0x1d')](util[_0xfdcb('0x19')](_0xfdcb('0x35'),QUERY),{'type':dbH[_0xfdcb('0x18')][_0xfdcb('0x1b')][_0xfdcb('0x1c')]});})[_0xfdcb('0x14')](extractReport)['catch'](function(_0x3db3b1){console[_0xfdcb('0x30')](_0x3db3b1);return analyticExtractedReport(_0xfdcb('0x36'));});}main();
\ No newline at end of file
+var _0x2ae0=['dbH','argv','MMMM\x20Do\x20YYYY,\x20h:mm:ss\x20a','AnalyticExtractedReport','update','hasOwnProperty','tableHeader','num','Empty','dirname','.pdf','Setting','find','split','splitSizePdf','then','push','sequelize','query','format','%s\x20limit\x20%d\x20OFFSET\x20%d','QueryTypes','SELECT','length','mkdirSync','each','name','startDate','header','body','toString','content','/fonts/Roboto-Regular.ttf','/fonts/Roboto-Medium.ttf','/fonts/Roboto-Italic.ttf','createPdfKitDocument','join','%s%d.%s','pdf','%s.%s','pipe','createWriteStream','finish','error','log','err','end','zip','Completed','findOne','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','catch','Error','lodash','bluebird','moment','pdfmake/src/printer','zip-dir','rimraf','../../mysqldb'];(function(_0x16f9a0,_0x5b1d27){var _0x45fc55=function(_0x8da6eb){while(--_0x8da6eb){_0x16f9a0['push'](_0x16f9a0['shift']());}};_0x45fc55(++_0x5b1d27);}(_0x2ae0,0x161));var _0x02ae=function(_0x3bc56a,_0x26a687){_0x3bc56a=_0x3bc56a-0x0;var _0x2f9c7c=_0x2ae0[_0x3bc56a];return _0x2f9c7c;};'use strict';var _=require(_0x02ae('0x0'));var fs=require('fs');var BPromise=require(_0x02ae('0x1'));var util=require('util');var path=require('path');var moment=require(_0x02ae('0x2'));var PdfPrinter=require(_0x02ae('0x3'));var zipdir=require(_0x02ae('0x4'));var rimraf=require(_0x02ae('0x5'));var db=require('../../mysqldb')['db'];var dbH=require(_0x02ae('0x6'))[_0x02ae('0x7')];var EXTRACTED_REPORT_ID=Number(process[_0x02ae('0x8')][0x2]);var QUERY=process[_0x02ae('0x8')][0x3];var PATH=process[_0x02ae('0x8')][0x4];var NAME=process[_0x02ae('0x8')][0x5];var FORMAT=_0x02ae('0x9');var _extractedReport;function analyticExtractedReport(_0x174329,_0x2f4312){var _0x593b65={'status':_0x174329};var _0xf605c7={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x2f4312){_0x593b65['savename']=_0x2f4312;}return db[_0x02ae('0xa')][_0x02ae('0xb')](_0x593b65,_0xf605c7);}function getHeader(_0x2d761a){var _0x4abcb8=[];for(var _0x42ced3 in _0x2d761a){if(_0x2d761a[_0x02ae('0xc')](_0x42ced3)){_0x4abcb8['push']({'text':_0x42ced3,'style':_0x02ae('0xd')});}}return _0x4abcb8;}function extractReport(_0x2bb999){var _0x7d2329=0x1388;var _0x57afca;if(!_0x2bb999[0x0][_0x02ae('0xe')]){return analyticExtractedReport(_0x02ae('0xf'));}var _0x272230=[];var _0x5e6c40=0x0;var _0x5c59b4=!![];var _0x478c61=path[_0x02ae('0x10')](PATH);var _0x4394f4=path['basename'](PATH,_0x02ae('0x11'));var _0x2febc7=![];var _0x1a1a65=[];return db[_0x02ae('0x12')][_0x02ae('0x13')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0x02ae('0x14'),_0x02ae('0x15')]})['then'](function(_0x1806cf){if(_0x1806cf){_0x57afca=_0x1806cf;_0x7d2329=_0x57afca[_0x02ae('0x15')]||0x3e8;}})[_0x02ae('0x16')](function(){if(_0x2bb999&&_0x2bb999['length']){var _0x4fb40d=_0x2bb999[0x0]['num']%(_0x5e6c40+_0x7d2329);if(_0x57afca['split']){for(;_0x5c59b4;_0x5e6c40+=_0x7d2329,_0x4fb40d=_0x2bb999[0x0]['num']%(_0x5e6c40+_0x7d2329)){if(_0x4fb40d==0x0||_0x4fb40d==_0x2bb999[0x0]['num']){_0x5c59b4=![];}_0x272230[_0x02ae('0x17')](dbH[_0x02ae('0x18')][_0x02ae('0x19')](util[_0x02ae('0x1a')](_0x02ae('0x1b'),QUERY,_0x7d2329,_0x5e6c40),{'type':dbH['sequelize'][_0x02ae('0x1c')][_0x02ae('0x1d')]}));}}else{_0x272230['push'](dbH[_0x02ae('0x18')][_0x02ae('0x19')](QUERY,{'type':dbH['sequelize'][_0x02ae('0x1c')][_0x02ae('0x1d')]}));}}_0x2febc7=_0x57afca['split']&&_0x272230[_0x02ae('0x1e')]>0x1;if(!fs['existsSync'](path['join'](_0x478c61,_0x4394f4))&&_0x2febc7){fs[_0x02ae('0x1f')](path['join'](_0x478c61,_0x4394f4));}return BPromise[_0x02ae('0x20')](_0x272230,function(_0x1af2c7){_0x1a1a65['push'](_0x1af2c7);});})['then'](function(){return BPromise['each'](_0x272230,function(_0x23b49c,_0x48c35f){var _0x278ef5;var _0x538140=util[_0x02ae('0x1a')]('Name:\x20%s\x0aReport:\x20%s\x0aFrom:\x20%s\x20To:\x20%s',NAME,_extractedReport[_0x02ae('0x21')],moment(_extractedReport[_0x02ae('0x22')])[_0x02ae('0x1a')](FORMAT),moment(_extractedReport['endDate'])[_0x02ae('0x1a')](FORMAT));var _0x62159d={'pageSize':'A4','pageOrientation':'landscape','content':[{'text':_0x538140,'style':_0x02ae('0x23')}],'styles':{'header':{'fontSize':0x12,'bold':!![],'margin':[0x0,0x0,0x0,0xa]},'tableHeader':{'bold':!![],'fontSize':0xd,'color':'black'}}};var _0x4526af={'headerRows':0x1,'body':[]};_0x4526af[_0x02ae('0x24')]['push'](getHeader(_0x23b49c[0x0]));var _0x8be2e4;for(var _0x1847ad=0x0;_0x1847ad<_0x23b49c[_0x02ae('0x1e')];_0x1847ad+=0x1){_0x8be2e4=[];for(var _0xd27d9a in _0x23b49c[_0x1847ad]){if(_0x23b49c[_0x1847ad][_0x02ae('0xc')](_0xd27d9a)){_0x8be2e4[_0x02ae('0x17')](_0x23b49c[_0x1847ad][_0xd27d9a]?_[_0x02ae('0x25')](_0x23b49c[_0x1847ad][_0xd27d9a]):'');}}_0x4526af[_0x02ae('0x24')][_0x02ae('0x17')](_0x8be2e4);}_0x62159d[_0x02ae('0x26')][_0x02ae('0x17')]({'table':_0x4526af});return new BPromise(function(_0x1fac3b,_0x344acb){var _0x380de1=new PdfPrinter({'Roboto':{'normal':__dirname+_0x02ae('0x27'),'bold':__dirname+_0x02ae('0x28'),'italics':__dirname+_0x02ae('0x29'),'bolditalics':__dirname+'/fonts/Roboto-MediumItalic.ttf'}});var _0x43cfd7=_0x380de1[_0x02ae('0x2a')](_0x62159d);if(_0x2febc7){_0x278ef5=path[_0x02ae('0x2b')](_0x478c61,_0x4394f4,util[_0x02ae('0x1a')](_0x02ae('0x2c'),_0x4394f4,_0x48c35f,_0x02ae('0x2d')));}else{_0x278ef5=path['join'](_0x478c61,util[_0x02ae('0x1a')](_0x02ae('0x2e'),_0x4394f4,_0x02ae('0x2d')));}var _0x3e2d00=_0x43cfd7[_0x02ae('0x2f')](fs[_0x02ae('0x30')](_0x278ef5));_0x3e2d00['on'](_0x02ae('0x31'),function(){_0x1fac3b();});_0x3e2d00['on'](_0x02ae('0x32'),function(_0x58452b){console[_0x02ae('0x33')](_0x02ae('0x34'),_0x58452b);_0x344acb(_0x58452b);});_0x43cfd7[_0x02ae('0x35')]();});});})[_0x02ae('0x16')](function(){if(_0x2febc7){return new BPromise(function(_0x4bf8fc,_0x557b3a){zipdir(path['join'](_0x478c61,_0x4394f4),{'saveTo':path[_0x02ae('0x2b')](_0x478c61,util[_0x02ae('0x1a')](_0x02ae('0x2e'),_0x4394f4,_0x02ae('0x36')))},function(_0x24f08e){if(_0x24f08e){_0x557b3a(_0x24f08e);}else{_0x4bf8fc();}});});}})[_0x02ae('0x16')](function(){if(_0x2febc7){rimraf(path[_0x02ae('0x2b')](_0x478c61,_0x4394f4),function(){});}})[_0x02ae('0x16')](function(){return analyticExtractedReport(_0x02ae('0x37'),_0x2febc7?util[_0x02ae('0x1a')](_0x02ae('0x2e'),_0x4394f4,_0x2febc7?_0x02ae('0x36'):_0x02ae('0x2d')):null);});}function main(){return db[_0x02ae('0xa')][_0x02ae('0x38')]({'where':{'id':EXTRACTED_REPORT_ID}})[_0x02ae('0x16')](function(_0xc370e){_extractedReport=_0xc370e;return dbH[_0x02ae('0x18')]['query'](util[_0x02ae('0x1a')](_0x02ae('0x39'),QUERY),{'type':dbH[_0x02ae('0x18')][_0x02ae('0x1c')]['SELECT']});})[_0x02ae('0x16')](extractReport)[_0x02ae('0x3a')](function(_0x28d63c){console[_0x02ae('0x32')](_0x28d63c);return analyticExtractedReport(_0x02ae('0x3b'));});}main();
\ No newline at end of file
index 812c5c2..051bee9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x216b=['existsSync','join','mkdirSync','each','format','%s%d.%s','xlsx','%s.%s','writeFileSync','binary','zip','Completed','Error','util','path','lodash','bluebird','zip-dir','rimraf','../../mysqldb','dbH','argv','savename','AnalyticExtractedReport','update','find','split','splitSizeXlsx','then','sequelize','QueryTypes','SELECT','num','Empty','push','query','dirname','basename','.xlsx','length'];(function(_0x255040,_0x53f6fe){var _0x2c0d66=function(_0xa29d97){while(--_0xa29d97){_0x255040['push'](_0x255040['shift']());}};_0x2c0d66(++_0x53f6fe);}(_0x216b,0x85));var _0xb216=function(_0x3a60f1,_0xd1087b){_0x3a60f1=_0x3a60f1-0x0;var _0xb3c20b=_0x216b[_0x3a60f1];return _0xb3c20b;};'use strict';var util=require(_0xb216('0x0'));var path=require(_0xb216('0x1'));var _=require(_0xb216('0x2'));var fs=require('fs');var json2xls=require('json2xls');var BPromise=require(_0xb216('0x3'));var zipdir=require(_0xb216('0x4'));var rimraf=require(_0xb216('0x5'));var db=require(_0xb216('0x6'))['db'];var dbH=require(_0xb216('0x6'))[_0xb216('0x7')];var EXTRACTED_REPORT_ID=Number(process[_0xb216('0x8')][0x2]);var QUERY=process[_0xb216('0x8')][0x3];var PATH=process['argv'][0x4];function analyticExtractedReport(_0xff2de1,_0x1b81b5){var _0xe68b1c={'status':_0xff2de1};var _0xb9f210={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x1b81b5){_0xe68b1c[_0xb216('0x9')]=_0x1b81b5;}return db[_0xb216('0xa')][_0xb216('0xb')](_0xe68b1c,_0xb9f210);}function main(){var _0x45440f=0x1388;var _0x16a872;return db['Setting'][_0xb216('0xc')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0xb216('0xd'),_0xb216('0xe')]})[_0xb216('0xf')](function(_0x105fde){if(_0x105fde){_0x16a872=_0x105fde;_0x45440f=_0x16a872[_0xb216('0xe')]||0x1388;}})[_0xb216('0xf')](function(){return dbH[_0xb216('0x10')]['query'](util['format']('SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t',QUERY),{'type':dbH[_0xb216('0x10')][_0xb216('0x11')][_0xb216('0x12')]});})[_0xb216('0xf')](function(_0x4182a5){if(!_0x4182a5[0x0][_0xb216('0x13')]){return analyticExtractedReport(_0xb216('0x14'));}var _0x522276=[];var _0x4dff73=0x0;var _0xb6139a=!![];if(_0x16a872[_0xb216('0xd')]){if(_0x4182a5&&_0x4182a5['length']){var _0x400a7d=_0x4182a5[0x0][_0xb216('0x13')]%(_0x4dff73+_0x45440f);for(;_0xb6139a;_0x4dff73+=_0x45440f,_0x400a7d=_0x4182a5[0x0][_0xb216('0x13')]%(_0x4dff73+_0x45440f)){if(_0x400a7d==0x0||_0x400a7d==_0x4182a5[0x0][_0xb216('0x13')]){_0xb6139a=![];}_0x522276[_0xb216('0x15')](dbH[_0xb216('0x10')]['query'](util['format']('%s\x20limit\x20%d\x20OFFSET\x20%d',QUERY,_0x45440f,_0x4dff73),{'type':dbH[_0xb216('0x10')][_0xb216('0x11')][_0xb216('0x12')]}));}}}else{_0x522276['push'](dbH[_0xb216('0x10')][_0xb216('0x16')](QUERY,{'type':dbH[_0xb216('0x10')][_0xb216('0x11')][_0xb216('0x12')]}));}var _0x1f86e2=path[_0xb216('0x17')](PATH);var _0x1cb6eb=path[_0xb216('0x18')](PATH,_0xb216('0x19'));var _0x1b79a4=_0x16a872[_0xb216('0xd')]&&_0x522276[_0xb216('0x1a')]>0x1;var _0x13cdf0=[];if(!fs[_0xb216('0x1b')](path[_0xb216('0x1c')](_0x1f86e2,_0x1cb6eb))&&_0x1b79a4){fs[_0xb216('0x1d')](path['join'](_0x1f86e2,_0x1cb6eb));}return BPromise[_0xb216('0x1e')](_0x522276,function(_0x53a1dc){_0x13cdf0[_0xb216('0x15')](_0x53a1dc);})['then'](function(){for(var _0x41c3e5=0x0;_0x41c3e5<_0x13cdf0[_0xb216('0x1a')];_0x41c3e5+=0x1){var _0x2f28b;var _0x4729ea=_0x13cdf0[_0x41c3e5];if(_0x1b79a4){_0x2f28b=path[_0xb216('0x1c')](_0x1f86e2,_0x1cb6eb,util[_0xb216('0x1f')](_0xb216('0x20'),_0x1cb6eb,_0x41c3e5,_0xb216('0x21')));}else{_0x2f28b=path[_0xb216('0x1c')](_0x1f86e2,util['format'](_0xb216('0x22'),_0x1cb6eb,_0xb216('0x21')));}fs[_0xb216('0x23')](_0x2f28b,json2xls(_0x4729ea),_0xb216('0x24'));}})[_0xb216('0xf')](function(){if(_0x1b79a4){zipdir(path['join'](_0x1f86e2,_0x1cb6eb),{'saveTo':path[_0xb216('0x1c')](_0x1f86e2,util[_0xb216('0x1f')]('%s.%s',_0x1cb6eb,_0xb216('0x25')))},function(_0x1e465e,_0x182cb8){});rimraf(path['join'](_0x1f86e2,_0x1cb6eb),function(){});}})[_0xb216('0xf')](function(){return analyticExtractedReport(_0xb216('0x26'),_0x1b79a4?util[_0xb216('0x1f')](_0xb216('0x22'),_0x1cb6eb,_0x1b79a4?'zip':_0xb216('0x21')):null);});})['catch'](function(_0x2ba54f){console['error'](_0x2ba54f);return analyticExtractedReport(_0xb216('0x27'));});}main();
\ No newline at end of file
+var _0x0841=['format','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','sequelize','Empty','length','num','push','query','%s\x20limit\x20%d\x20OFFSET\x20%d','QueryTypes','SELECT','dirname','basename','.xlsx','existsSync','join','mkdirSync','each','%s%d.%s','xlsx','%s.%s','writeFileSync','binary','Completed','zip','catch','error','path','lodash','bluebird','rimraf','../../mysqldb','dbH','argv','savename','AnalyticExtractedReport','update','Setting','find','split','splitSizeXlsx','then'];(function(_0x1b6563,_0x3bf0f1){var _0xdea7b8=function(_0x49e6c6){while(--_0x49e6c6){_0x1b6563['push'](_0x1b6563['shift']());}};_0xdea7b8(++_0x3bf0f1);}(_0x0841,0x6f));var _0x1084=function(_0x135332,_0x464ba3){_0x135332=_0x135332-0x0;var _0x2d0b6e=_0x0841[_0x135332];return _0x2d0b6e;};'use strict';var util=require('util');var path=require(_0x1084('0x0'));var _=require(_0x1084('0x1'));var fs=require('fs');var json2xls=require('json2xls');var BPromise=require(_0x1084('0x2'));var zipdir=require('zip-dir');var rimraf=require(_0x1084('0x3'));var db=require(_0x1084('0x4'))['db'];var dbH=require('../../mysqldb')[_0x1084('0x5')];var EXTRACTED_REPORT_ID=Number(process['argv'][0x2]);var QUERY=process['argv'][0x3];var PATH=process[_0x1084('0x6')][0x4];function analyticExtractedReport(_0x204972,_0x441e04){var _0x5d24a5={'status':_0x204972};var _0x5cae15={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x441e04){_0x5d24a5[_0x1084('0x7')]=_0x441e04;}return db[_0x1084('0x8')][_0x1084('0x9')](_0x5d24a5,_0x5cae15);}function main(){var _0x5893da=0x1388;var _0xa56e19;return db[_0x1084('0xa')][_0x1084('0xb')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0x1084('0xc'),_0x1084('0xd')]})[_0x1084('0xe')](function(_0x1904ec){if(_0x1904ec){_0xa56e19=_0x1904ec;_0x5893da=_0xa56e19[_0x1084('0xd')]||0x1388;}})[_0x1084('0xe')](function(){return dbH['sequelize']['query'](util[_0x1084('0xf')](_0x1084('0x10'),QUERY),{'type':dbH[_0x1084('0x11')]['QueryTypes']['SELECT']});})[_0x1084('0xe')](function(_0x530490){if(!_0x530490[0x0]['num']){return analyticExtractedReport(_0x1084('0x12'));}var _0x36b9f8=[];var _0x593b2b=0x0;var _0x1e6244=!![];if(_0xa56e19[_0x1084('0xc')]){if(_0x530490&&_0x530490[_0x1084('0x13')]){var _0x1b69a4=_0x530490[0x0][_0x1084('0x14')]%(_0x593b2b+_0x5893da);for(;_0x1e6244;_0x593b2b+=_0x5893da,_0x1b69a4=_0x530490[0x0][_0x1084('0x14')]%(_0x593b2b+_0x5893da)){if(_0x1b69a4==0x0||_0x1b69a4==_0x530490[0x0]['num']){_0x1e6244=![];}_0x36b9f8[_0x1084('0x15')](dbH[_0x1084('0x11')][_0x1084('0x16')](util[_0x1084('0xf')](_0x1084('0x17'),QUERY,_0x5893da,_0x593b2b),{'type':dbH[_0x1084('0x11')][_0x1084('0x18')]['SELECT']}));}}}else{_0x36b9f8[_0x1084('0x15')](dbH[_0x1084('0x11')][_0x1084('0x16')](QUERY,{'type':dbH[_0x1084('0x11')][_0x1084('0x18')][_0x1084('0x19')]}));}var _0x44d0a9=path[_0x1084('0x1a')](PATH);var _0x53976b=path[_0x1084('0x1b')](PATH,_0x1084('0x1c'));var _0x55d684=_0xa56e19[_0x1084('0xc')]&&_0x36b9f8[_0x1084('0x13')]>0x1;var _0x20e87f=[];if(!fs[_0x1084('0x1d')](path[_0x1084('0x1e')](_0x44d0a9,_0x53976b))&&_0x55d684){fs[_0x1084('0x1f')](path[_0x1084('0x1e')](_0x44d0a9,_0x53976b));}return BPromise[_0x1084('0x20')](_0x36b9f8,function(_0x32b4ee){_0x20e87f['push'](_0x32b4ee);})[_0x1084('0xe')](function(){for(var _0x4babe7=0x0;_0x4babe7<_0x20e87f['length'];_0x4babe7+=0x1){var _0x5e4c62;var _0x1d8e91=_0x20e87f[_0x4babe7];if(_0x55d684){_0x5e4c62=path[_0x1084('0x1e')](_0x44d0a9,_0x53976b,util[_0x1084('0xf')](_0x1084('0x21'),_0x53976b,_0x4babe7,_0x1084('0x22')));}else{_0x5e4c62=path[_0x1084('0x1e')](_0x44d0a9,util[_0x1084('0xf')](_0x1084('0x23'),_0x53976b,_0x1084('0x22')));}fs[_0x1084('0x24')](_0x5e4c62,json2xls(_0x1d8e91),_0x1084('0x25'));}})[_0x1084('0xe')](function(){if(_0x55d684){zipdir(path[_0x1084('0x1e')](_0x44d0a9,_0x53976b),{'saveTo':path[_0x1084('0x1e')](_0x44d0a9,util['format'](_0x1084('0x23'),_0x53976b,'zip'))},function(_0xa9d9ec,_0x35a11){});rimraf(path[_0x1084('0x1e')](_0x44d0a9,_0x53976b),function(){});}})[_0x1084('0xe')](function(){return analyticExtractedReport(_0x1084('0x26'),_0x55d684?util[_0x1084('0xf')](_0x1084('0x23'),_0x53976b,_0x55d684?_0x1084('0x27'):'xlsx'):null);});})[_0x1084('0x28')](function(_0x509f67){console[_0x1084('0x29')](_0x509f67);return analyticExtractedReport('Error');});}main();
\ No newline at end of file
index 1ba7f70..4173af6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf57=['models','Interval','findAll','then','intervals','IntervalId','uniq','map','CAST(priority\x20AS\x20UNSIGNED)','groupBy','queue','hasOwnProperty','answer','progress','priority','extensions','push','type','context','exten','Set','format','CDR(type)=%s','length','createdAt','updatedAt','*,*,*,*','interval','tag','CDR(tag)=','callerID','CALLERID(all)=','VoiceExtensionId','indexOf','toLowerCase','appType','custom','Answer','record','recordingFormat','${UNIQUEID}.','StopMixMonitor','GotoIfTime',',${EXTEN},','concat','Hangup','destroy','VoiceExtension','sortBy','catch','rewrite','lodash','util'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xcf57,0x13c));var _0x7cf5=function(_0x54551e,_0x429370){_0x54551e=_0x54551e-0x0;var _0x1d6913=_0xcf57[_0x54551e];return _0x1d6913;};'use strict';var _=require(_0x7cf5('0x0'));var util=require(_0x7cf5('0x1'));function rewrite(_0xb02126,_0x184ee0){var _0x376376=this;return _0xb02126[_0x7cf5('0x2')][_0x7cf5('0x3')][_0x7cf5('0x4')]({'raw':!![]})[_0x7cf5('0x5')](function(_0x29066c){_0x376376[_0x7cf5('0x6')]=_0x29066c;return _0xb02126[_0x7cf5('0x2')]['VoiceExtension'][_0x7cf5('0x4')]({'where':{'IntervalId':_0x184ee0[_0x7cf5('0x7')]},'raw':!![]});})[_0x7cf5('0x5')](function(_0x4fe852){return _0xb02126[_0x7cf5('0x2')]['VoiceExtension'][_0x7cf5('0x4')]({'where':{'exten':{'$in':_[_0x7cf5('0x8')](_[_0x7cf5('0x9')](_0x4fe852,'exten'))},'isApp':!![]},'order':[{'raw':_0x7cf5('0xa')}],'raw':!![]});})[_0x7cf5('0x5')](function(_0x36542e){var _0x625255=_[_0x7cf5('0xb')](_0x36542e,'exten');var _0x58d770=[_0x7cf5('0xc'),'playback'];var _0x513fae=[];var _0x59baee=[];for(var _0x3a6ddb in _0x625255){if(_0x625255[_0x7cf5('0xd')](_0x3a6ddb)){_0x376376[_0x7cf5('0xe')]=![];_0x376376[_0x7cf5('0xf')]=![];_0x376376[_0x7cf5('0x10')]=0x2;_0x376376[_0x7cf5('0x11')]=[];_0x376376['extensions'][_0x7cf5('0x12')]({'type':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x13')],'context':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x14')],'exten':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x15')],'priority':_0x376376['priority']++,'app':_0x7cf5('0x16'),'appdata':util[_0x7cf5('0x17')](_0x7cf5('0x18'),_0x625255[_0x3a6ddb][0x0]['type']),'VoiceExtensionId':_0x625255[_0x3a6ddb][0x0]['VoiceExtensionId']});for(var _0x254b0e=0x0,_0x183b2b=0x0;_0x254b0e<_0x625255[_0x3a6ddb][_0x7cf5('0x19')];_0x254b0e+=0x1,_0x183b2b=0x0){var _0x4e0f3f=_0x625255[_0x3a6ddb][_0x254b0e];var _0x1e1973=[];var _0x44fe59=[];delete _0x4e0f3f['id'];delete _0x4e0f3f[_0x7cf5('0x1a')];delete _0x4e0f3f[_0x7cf5('0x1b')];var _0x10e0da=_0x4e0f3f['interval']!==_0x7cf5('0x1c')?[_0x4e0f3f[_0x7cf5('0x1d')]]:_0x4e0f3f[_0x7cf5('0x7')]?_[_0x7cf5('0x9')](_['filter'](_0x376376[_0x7cf5('0x6')],{'IntervalId':_0x4e0f3f[_0x7cf5('0x7')]}),'interval'):[];if(_0x4e0f3f[_0x7cf5('0xd')](_0x7cf5('0x1e'))){if(_0x4e0f3f[_0x7cf5('0x1e')]&&_0x4e0f3f[_0x7cf5('0x1e')]!=='--'){_0x1e1973[_0x7cf5('0x12')]({'type':_0x4e0f3f['type'],'app':'Set','appdata':_0x7cf5('0x1f')+_0x4e0f3f[_0x7cf5('0x1e')],'context':_0x4e0f3f[_0x7cf5('0x14')],'exten':_0x4e0f3f[_0x7cf5('0x15')],'priority':_0x10e0da['length']+_0x376376[_0x7cf5('0x10')]+_0x183b2b++,'VoiceExtensionId':_0x625255[_0x3a6ddb][0x0]['VoiceExtensionId']});}}if(_0x4e0f3f['hasOwnProperty'](_0x7cf5('0x20'))){if(_0x4e0f3f[_0x7cf5('0x20')]){_0x1e1973[_0x7cf5('0x12')]({'type':_0x4e0f3f[_0x7cf5('0x13')],'app':_0x7cf5('0x16'),'appdata':_0x7cf5('0x21')+_0x4e0f3f[_0x7cf5('0x20')],'context':_0x4e0f3f[_0x7cf5('0x14')],'exten':_0x4e0f3f[_0x7cf5('0x15')],'priority':_0x10e0da[_0x7cf5('0x19')]+_0x376376['priority']+_0x183b2b++,'VoiceExtensionId':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x22')]});}}if(_0x4e0f3f[_0x7cf5('0xd')](_0x7cf5('0xe'))){if(_0x58d770[_0x7cf5('0x23')](_0x4e0f3f['app'][_0x7cf5('0x24')]())>=0x0&&_0x4e0f3f[_0x7cf5('0x25')]!==_0x7cf5('0x26')){if(!_0x376376[_0x7cf5('0xe')]&&_0x4e0f3f[_0x7cf5('0xe')]){_0x376376[_0x7cf5('0xe')]=!![];_0x1e1973[_0x7cf5('0x12')]({'type':_0x4e0f3f['type'],'app':_0x7cf5('0x27'),'context':_0x4e0f3f[_0x7cf5('0x14')],'exten':_0x4e0f3f[_0x7cf5('0x15')],'priority':_0x10e0da['length']+_0x376376[_0x7cf5('0x10')]+_0x183b2b++,'VoiceExtensionId':_0x625255[_0x3a6ddb][0x0]['VoiceExtensionId']});}if(!_0x376376[_0x7cf5('0xe')]&&!_0x376376[_0x7cf5('0xf')]&&!_0x4e0f3f['answer']){_0x376376['progress']=!![];_0x1e1973['push']({'type':_0x4e0f3f[_0x7cf5('0x13')],'app':'Progress','context':_0x4e0f3f[_0x7cf5('0x14')],'exten':_0x4e0f3f[_0x7cf5('0x15')],'priority':_0x10e0da[_0x7cf5('0x19')]+_0x376376[_0x7cf5('0x10')]+_0x183b2b++,'VoiceExtensionId':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x22')]});}}}if(_0x4e0f3f[_0x7cf5('0xd')](_0x7cf5('0x28'))&&_0x4e0f3f['hasOwnProperty'](_0x7cf5('0x29'))){if(_0x4e0f3f[_0x7cf5('0x28')]){_0x1e1973['push']({'type':_0x4e0f3f[_0x7cf5('0x13')],'app':'MixMonitor','appdata':_0x7cf5('0x2a')+_0x4e0f3f[_0x7cf5('0x29')]+',ab','context':_0x4e0f3f[_0x7cf5('0x14')],'exten':_0x4e0f3f[_0x7cf5('0x15')],'priority':_0x10e0da['length']+_0x376376[_0x7cf5('0x10')]+_0x183b2b++,'VoiceExtensionId':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x22')]});}}if(_0x4e0f3f['hasOwnProperty'](_0x7cf5('0x28'))&&_0x4e0f3f['hasOwnProperty']('recordingFormat')){if(_0x4e0f3f[_0x7cf5('0x28')]){_0x44fe59[_0x7cf5('0x12')]({'type':_0x4e0f3f['type'],'app':_0x7cf5('0x2b'),'appdata':null,'context':_0x4e0f3f[_0x7cf5('0x14')],'exten':_0x4e0f3f[_0x7cf5('0x15')],'priority':_0x10e0da['length']+_0x376376['priority']+_0x183b2b++ +0x1,'VoiceExtensionId':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x22')]});}}for(var _0x22d22d=0x0;_0x22d22d<_0x10e0da[_0x7cf5('0x19')];_0x22d22d+=0x1){var _0x167f64=_0x376376['priority']+_0x10e0da[_0x7cf5('0x19')];var _0x2c7005=_0x22d22d===_0x10e0da['length']-0x1?_0x376376[_0x7cf5('0x10')]+_0x1e1973[_0x7cf5('0x19')]+_0x44fe59['length']+0x2:_0x376376[_0x7cf5('0x10')]+_0x22d22d+0x1;_0x1e1973['splice'](_0x22d22d,0x0,{'type':_0x4e0f3f[_0x7cf5('0x13')],'app':_0x7cf5('0x2c'),'appdata':_0x10e0da[_0x22d22d]+'?'+_0x4e0f3f['context']+',${EXTEN},'+_0x167f64+':'+_0x4e0f3f['context']+_0x7cf5('0x2d')+_0x2c7005,'exten':_0x4e0f3f[_0x7cf5('0x15')],'context':_0x4e0f3f[_0x7cf5('0x14')],'priority':_0x376376[_0x7cf5('0x10')]+_0x22d22d,'VoiceExtensionId':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x22')]});}_0x4e0f3f[_0x7cf5('0x10')]=_0x1e1973[_0x7cf5('0x19')]?_['last'](_0x1e1973)[_0x7cf5('0x10')]+0x1:_0x376376[_0x7cf5('0x10')];_0x376376[_0x7cf5('0x10')]=(_0x44fe59[_0x7cf5('0x19')]?_['last'](_0x44fe59)['priority']:_0x4e0f3f[_0x7cf5('0x10')])+0x1;_0x376376[_0x7cf5('0x11')]=_[_0x7cf5('0x2e')](_0x376376['extensions'],_0x1e1973,[_0x4e0f3f],_0x44fe59);}_0x376376['extensions'][_0x7cf5('0x12')]({'type':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x13')],'app':_0x7cf5('0x2f'),'exten':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x15')],'context':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x14')],'priority':_0x376376[_0x7cf5('0x10')],'VoiceExtensionId':_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x22')]});_0x513fae[_0x7cf5('0x12')](_0x625255[_0x3a6ddb][0x0][_0x7cf5('0x22')]);_0x59baee=_[_0x7cf5('0x2e')](_0x59baee,_0x376376['extensions']);}}return _0xb02126['transaction'](function(_0x1e9a4f){return _0xb02126[_0x7cf5('0x2')]['VoiceExtension'][_0x7cf5('0x30')]({'where':{'VoiceExtensionId':{'$in':_0x513fae}},'transaction':_0x1e9a4f})[_0x7cf5('0x5')](function(_0x4f8816){return _0xb02126[_0x7cf5('0x2')][_0x7cf5('0x31')]['bulkCreate'](_[_0x7cf5('0x32')](_0x59baee,_0x7cf5('0x10')),{'transaction':_0x1e9a4f});});});})[_0x7cf5('0x33')](function(_0x1acfbe){console['error'](_0x1acfbe);});}exports[_0x7cf5('0x34')]=rewrite;
\ No newline at end of file
+var _0x1400=['destroy','bulkCreate','catch','error','rewrite','util','models','Interval','then','intervals','VoiceExtension','findAll','IntervalId','uniq','map','exten','queue','playback','hasOwnProperty','answer','progress','priority','extensions','push','type','context','format','CDR(type)=%s','VoiceExtensionId','length','createdAt','updatedAt','interval','*,*,*,*','filter','tag','Set','CDR(tag)=','callerID','CALLERID(all)=','indexOf','app','appType','custom','Answer','Progress','record','recordingFormat','MixMonitor','${UNIQUEID}.','StopMixMonitor','splice',',${EXTEN},','last','concat','transaction'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x1400,0x75));var _0x0140=function(_0xfb4365,_0xd18f10){_0xfb4365=_0xfb4365-0x0;var _0x109516=_0x1400[_0xfb4365];return _0x109516;};'use strict';var _=require('lodash');var util=require(_0x0140('0x0'));function rewrite(_0x1d9358,_0x24982c){var _0x35aa13=this;return _0x1d9358[_0x0140('0x1')][_0x0140('0x2')]['findAll']({'raw':!![]})[_0x0140('0x3')](function(_0x2c4143){_0x35aa13[_0x0140('0x4')]=_0x2c4143;return _0x1d9358[_0x0140('0x1')][_0x0140('0x5')][_0x0140('0x6')]({'where':{'IntervalId':_0x24982c[_0x0140('0x7')]},'raw':!![]});})[_0x0140('0x3')](function(_0x436a17){return _0x1d9358[_0x0140('0x1')]['VoiceExtension'][_0x0140('0x6')]({'where':{'exten':{'$in':_[_0x0140('0x8')](_[_0x0140('0x9')](_0x436a17,_0x0140('0xa')))},'isApp':!![]},'order':[{'raw':'CAST(priority\x20AS\x20UNSIGNED)'}],'raw':!![]});})['then'](function(_0x110bce){var _0x5f27fd=_['groupBy'](_0x110bce,'exten');var _0x4b4922=[_0x0140('0xb'),_0x0140('0xc')];var _0xd8a9fc=[];var _0x18ab66=[];for(var _0x4388d5 in _0x5f27fd){if(_0x5f27fd[_0x0140('0xd')](_0x4388d5)){_0x35aa13[_0x0140('0xe')]=![];_0x35aa13[_0x0140('0xf')]=![];_0x35aa13[_0x0140('0x10')]=0x2;_0x35aa13[_0x0140('0x11')]=[];_0x35aa13[_0x0140('0x11')][_0x0140('0x12')]({'type':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x13')],'context':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x14')],'exten':_0x5f27fd[_0x4388d5][0x0][_0x0140('0xa')],'priority':_0x35aa13[_0x0140('0x10')]++,'app':'Set','appdata':util[_0x0140('0x15')](_0x0140('0x16'),_0x5f27fd[_0x4388d5][0x0][_0x0140('0x13')]),'VoiceExtensionId':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x17')]});for(var _0x571cc7=0x0,_0xd419f7=0x0;_0x571cc7<_0x5f27fd[_0x4388d5][_0x0140('0x18')];_0x571cc7+=0x1,_0xd419f7=0x0){var _0xd89043=_0x5f27fd[_0x4388d5][_0x571cc7];var _0x422f5b=[];var _0x3dd0c6=[];delete _0xd89043['id'];delete _0xd89043[_0x0140('0x19')];delete _0xd89043[_0x0140('0x1a')];var _0x96c7bb=_0xd89043[_0x0140('0x1b')]!==_0x0140('0x1c')?[_0xd89043[_0x0140('0x1b')]]:_0xd89043[_0x0140('0x7')]?_['map'](_[_0x0140('0x1d')](_0x35aa13[_0x0140('0x4')],{'IntervalId':_0xd89043[_0x0140('0x7')]}),_0x0140('0x1b')):[];if(_0xd89043[_0x0140('0xd')](_0x0140('0x1e'))){if(_0xd89043[_0x0140('0x1e')]&&_0xd89043[_0x0140('0x1e')]!=='--'){_0x422f5b[_0x0140('0x12')]({'type':_0xd89043['type'],'app':_0x0140('0x1f'),'appdata':_0x0140('0x20')+_0xd89043[_0x0140('0x1e')],'context':_0xd89043[_0x0140('0x14')],'exten':_0xd89043[_0x0140('0xa')],'priority':_0x96c7bb['length']+_0x35aa13[_0x0140('0x10')]+_0xd419f7++,'VoiceExtensionId':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x17')]});}}if(_0xd89043[_0x0140('0xd')](_0x0140('0x21'))){if(_0xd89043['callerID']){_0x422f5b[_0x0140('0x12')]({'type':_0xd89043[_0x0140('0x13')],'app':_0x0140('0x1f'),'appdata':_0x0140('0x22')+_0xd89043[_0x0140('0x21')],'context':_0xd89043[_0x0140('0x14')],'exten':_0xd89043[_0x0140('0xa')],'priority':_0x96c7bb[_0x0140('0x18')]+_0x35aa13[_0x0140('0x10')]+_0xd419f7++,'VoiceExtensionId':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x17')]});}}if(_0xd89043['hasOwnProperty'](_0x0140('0xe'))){if(_0x4b4922[_0x0140('0x23')](_0xd89043[_0x0140('0x24')]['toLowerCase']())>=0x0&&_0xd89043[_0x0140('0x25')]!==_0x0140('0x26')){if(!_0x35aa13['answer']&&_0xd89043['answer']){_0x35aa13['answer']=!![];_0x422f5b[_0x0140('0x12')]({'type':_0xd89043['type'],'app':_0x0140('0x27'),'context':_0xd89043[_0x0140('0x14')],'exten':_0xd89043[_0x0140('0xa')],'priority':_0x96c7bb['length']+_0x35aa13[_0x0140('0x10')]+_0xd419f7++,'VoiceExtensionId':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x17')]});}if(!_0x35aa13[_0x0140('0xe')]&&!_0x35aa13['progress']&&!_0xd89043['answer']){_0x35aa13[_0x0140('0xf')]=!![];_0x422f5b[_0x0140('0x12')]({'type':_0xd89043[_0x0140('0x13')],'app':_0x0140('0x28'),'context':_0xd89043['context'],'exten':_0xd89043[_0x0140('0xa')],'priority':_0x96c7bb[_0x0140('0x18')]+_0x35aa13[_0x0140('0x10')]+_0xd419f7++,'VoiceExtensionId':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x17')]});}}}if(_0xd89043[_0x0140('0xd')](_0x0140('0x29'))&&_0xd89043['hasOwnProperty'](_0x0140('0x2a'))){if(_0xd89043[_0x0140('0x29')]){_0x422f5b[_0x0140('0x12')]({'type':_0xd89043['type'],'app':_0x0140('0x2b'),'appdata':_0x0140('0x2c')+_0xd89043[_0x0140('0x2a')]+',ab','context':_0xd89043['context'],'exten':_0xd89043['exten'],'priority':_0x96c7bb[_0x0140('0x18')]+_0x35aa13[_0x0140('0x10')]+_0xd419f7++,'VoiceExtensionId':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x17')]});}}if(_0xd89043[_0x0140('0xd')](_0x0140('0x29'))&&_0xd89043[_0x0140('0xd')]('recordingFormat')){if(_0xd89043['record']){_0x3dd0c6[_0x0140('0x12')]({'type':_0xd89043['type'],'app':_0x0140('0x2d'),'appdata':null,'context':_0xd89043[_0x0140('0x14')],'exten':_0xd89043['exten'],'priority':_0x96c7bb['length']+_0x35aa13['priority']+_0xd419f7++ +0x1,'VoiceExtensionId':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x17')]});}}for(var _0x572cf3=0x0;_0x572cf3<_0x96c7bb[_0x0140('0x18')];_0x572cf3+=0x1){var _0x40bf6a=_0x35aa13[_0x0140('0x10')]+_0x96c7bb[_0x0140('0x18')];var _0x3bf1dc=_0x572cf3===_0x96c7bb[_0x0140('0x18')]-0x1?_0x35aa13[_0x0140('0x10')]+_0x422f5b[_0x0140('0x18')]+_0x3dd0c6['length']+0x2:_0x35aa13[_0x0140('0x10')]+_0x572cf3+0x1;_0x422f5b[_0x0140('0x2e')](_0x572cf3,0x0,{'type':_0xd89043[_0x0140('0x13')],'app':'GotoIfTime','appdata':_0x96c7bb[_0x572cf3]+'?'+_0xd89043[_0x0140('0x14')]+_0x0140('0x2f')+_0x40bf6a+':'+_0xd89043[_0x0140('0x14')]+',${EXTEN},'+_0x3bf1dc,'exten':_0xd89043[_0x0140('0xa')],'context':_0xd89043[_0x0140('0x14')],'priority':_0x35aa13[_0x0140('0x10')]+_0x572cf3,'VoiceExtensionId':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x17')]});}_0xd89043['priority']=_0x422f5b['length']?_[_0x0140('0x30')](_0x422f5b)[_0x0140('0x10')]+0x1:_0x35aa13[_0x0140('0x10')];_0x35aa13[_0x0140('0x10')]=(_0x3dd0c6['length']?_[_0x0140('0x30')](_0x3dd0c6)[_0x0140('0x10')]:_0xd89043[_0x0140('0x10')])+0x1;_0x35aa13['extensions']=_[_0x0140('0x31')](_0x35aa13['extensions'],_0x422f5b,[_0xd89043],_0x3dd0c6);}_0x35aa13['extensions'][_0x0140('0x12')]({'type':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x13')],'app':'Hangup','exten':_0x5f27fd[_0x4388d5][0x0][_0x0140('0xa')],'context':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x14')],'priority':_0x35aa13['priority'],'VoiceExtensionId':_0x5f27fd[_0x4388d5][0x0][_0x0140('0x17')]});_0xd8a9fc[_0x0140('0x12')](_0x5f27fd[_0x4388d5][0x0][_0x0140('0x17')]);_0x18ab66=_[_0x0140('0x31')](_0x18ab66,_0x35aa13[_0x0140('0x11')]);}}return _0x1d9358[_0x0140('0x32')](function(_0x4cdb0d){return _0x1d9358['models'][_0x0140('0x5')][_0x0140('0x33')]({'where':{'VoiceExtensionId':{'$in':_0xd8a9fc}},'transaction':_0x4cdb0d})['then'](function(_0x526c25){return _0x1d9358[_0x0140('0x1')][_0x0140('0x5')][_0x0140('0x34')](_['sortBy'](_0x18ab66,'priority'),{'transaction':_0x4cdb0d});});});})[_0x0140('0x35')](function(_0xa504e7){console[_0x0140('0x36')](_0xa504e7);});}exports[_0x0140('0x37')]=rewrite;
\ No newline at end of file
index 28d781d..cf504fc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd3d1=['VoiceQueue','findAll','dialCheckDuplicateType','CmList','Lists','get','always','sequelize','query','VoiceQueueId','push','all','BlackLists','Campaign','CampaignId','onlyIfOpen','cmContact,\x20%s,\x20%s','generalCheckHopper','Error\x20processing\x20rows\x20block:','finally','emit','resume','contact:csv_','unlinkSync','Unable\x20to\x20delete\x20temp\x20file:','exit','SIGINT','info','CSV\x20import\x20process\x20stopped!','resolve','CmContact','createReadStream','parse','pause','CSV\x20parsed\x20correctly!','CSV\x20parse\x20error','Error\x20executing\x20contact\x20csv\x20import:','bluebird','../../../mysqldb','util','lodash','squel','papaparse','socket.io-emitter','localhost','../../../api/cmContact/cmContact.socket','register','argv','undefined','null','Missing\x20filepath\x20parameter!','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','map','message','join','hasOwnProperty','data','phone','birthDate','YYYY-MM-DD','birthDate\x20format\x20is\x20invalid,\x20YYYY-MM-DD\x20format\x20is\x20supported!','email','email\x20format\x20is\x20not\x20valid!','ListId','length','find','duplicate','Duplicate\x20Contact','create','keys','then','pick','catch','Error\x20while\x20creating\x20contact:\x20','stringify','checkHopper','inspect','insert','into','fromQuery','scheduledAt','ContactId','createdAt','updatedAt','select','field','toString','NOW()','from','cm_contacts','where','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','\x20=\x20?','cm_hopper','id\x20IN\x20?','str','calleridnum','cm_hopper_final'];(function(_0x549791,_0x970e8b){var _0x145775=function(_0x456369){while(--_0x456369){_0x549791['push'](_0x549791['shift']());}};_0x145775(++_0x970e8b);}(_0xd3d1,0x172));var _0x1d3d=function(_0x122096,_0x60c295){_0x122096=_0x122096-0x0;var _0x3d1966=_0xd3d1[_0x122096];return _0x3d1966;};'use strict';var BPromise=require(_0x1d3d('0x0'));var db=require(_0x1d3d('0x1'))['db'];var logger=require('../../../config/logger')('api');var util=require(_0x1d3d('0x2'));var _=require(_0x1d3d('0x3'));var fs=require('fs');var squel=require(_0x1d3d('0x4'));var Papa=require(_0x1d3d('0x5'));var socket=require(_0x1d3d('0x6'))({'host':_0x1d3d('0x7'),'port':0x18eb});require(_0x1d3d('0x8'))[_0x1d3d('0x9')](socket);try{if(!process[_0x1d3d('0xa')][0x2]||process[_0x1d3d('0xa')][0x2]===_0x1d3d('0xb')||process[_0x1d3d('0xa')][0x2]===_0x1d3d('0xc')){throw new Error(_0x1d3d('0xd'));}var FILEPATH=process[_0x1d3d('0xa')][0x2];if(!process[_0x1d3d('0xa')][0x3]||process[_0x1d3d('0xa')][0x3]==='undefined'||process[_0x1d3d('0xa')][0x3]===_0x1d3d('0xc')||!process[_0x1d3d('0xa')][0x4]||process[_0x1d3d('0xa')][0x4]===_0x1d3d('0xb')||process[_0x1d3d('0xa')][0x4]===_0x1d3d('0xc')){throw new Error(_0x1d3d('0xe'));}var FIELDS=_[_0x1d3d('0xf')](process[_0x1d3d('0xa')][0x3][_0x1d3d('0x10')](','),process['argv'][0x4][_0x1d3d('0x10')](','));if(!process[_0x1d3d('0xa')][0x5]||process['argv'][0x5]==='undefined'||process[_0x1d3d('0xa')][0x5]===_0x1d3d('0xc')){throw new Error(_0x1d3d('0x11'));}var LISTID=process['argv'][0x5];var COMPANYID=process[_0x1d3d('0xa')][0x6]&&process['argv'][0x6]!==_0x1d3d('0xb')&&process[_0x1d3d('0xa')][0x6]!==_0x1d3d('0xc')?process[_0x1d3d('0xa')][0x6]:null;var DUPLICATES=process[_0x1d3d('0xa')][0x7]&&process[_0x1d3d('0xa')][0x7]!==_0x1d3d('0xb')&&process['argv'][0x7]!=='null'?process[_0x1d3d('0xa')][0x7]:null;if(!process[_0x1d3d('0xa')][0x8]||process['argv'][0x8]===_0x1d3d('0xb')||process['argv'][0x8]===_0x1d3d('0xc')){throw new Error(_0x1d3d('0x12'));}var SOCKET_TIMESTAMP=process[_0x1d3d('0xa')][0x8];}catch(_0x2d6dfb){logger['error'](_0x2d6dfb);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(_0x2b77ee,_0x56db7a,_0x56c424,_0x108005){var _0x2bfac3={'message':_0x56db7a};_0x2bfac3[_0x2b77ee]=!![];if(_0x56c424){_0x2bfac3[_0x1d3d('0x13')]=_0x56c424;}if(_0x108005){_0x2bfac3[_0x1d3d('0x14')]=_0x108005;}return _0x2bfac3;}function isEmail(_0xa6f180){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))*$/[_0x1d3d('0x15')](_0xa6f180);}function checkRow(_0x471df5,_0xa55c43,_0x270b90){return new BPromise(function(_0x18f234,_0x1610a6){if(_['isNil'](_0x471df5)){return _0x1610a6(handleCheckRowError(_0x1d3d('0x16'),_0x1d3d('0x17'),null,_0x270b90));}if(_0x471df5['errors']&&_0x471df5[_0x1d3d('0x18')]['length']){var _0x467ea7=_[_0x1d3d('0x19')](_0x471df5[_0x1d3d('0x18')],_0x1d3d('0x1a'))[_0x1d3d('0x1b')](';');return _0x1610a6(handleCheckRowError(_0x1d3d('0x16'),_0x467ea7,null,_0x270b90));}var _0x2b8074={};for(var _0x298fd3 in FIELDS){if(FIELDS[_0x1d3d('0x1c')](_0x298fd3)&&FIELDS[_0x298fd3]){_0x2b8074[_0x298fd3]=_0x471df5[_0x1d3d('0x1d')][0x0][FIELDS[_0x298fd3]]||_0x471df5[_0x1d3d('0x1d')][0x0]['\ufeff'+FIELDS[_0x298fd3]];}}if(!_0x2b8074['firstName']){return _0x1610a6(handleCheckRowError(_0x1d3d('0x16'),'firstName\x20not\x20specified!',null,_0x270b90));}if(!_0x2b8074[_0x1d3d('0x1e')]){return _0x1610a6(handleCheckRowError(_0x1d3d('0x16'),'phone\x20not\x20specified!',null,_0x270b90));}if(_0x2b8074[_0x1d3d('0x1f')]){var _0x16b7b3=moment(_0x2b8074[_0x1d3d('0x1f')],_0x1d3d('0x20'));if(!_0x16b7b3['isValid']()){return _0x1610a6(handleCheckRowError(_0x1d3d('0x16'),_0x1d3d('0x21'),null,_0x270b90));}}if(_0x2b8074['email']){if(!isEmail(_0x2b8074[_0x1d3d('0x22')])){return _0x1610a6(handleCheckRowError('error',_0x1d3d('0x23'),null,_0x270b90));}}_0x2b8074[_0x1d3d('0x24')]=LISTID;_0x2b8074['CompanyId']=COMPANYID||undefined;if(DUPLICATES&&DUPLICATES[_0x1d3d('0x25')]&&_0xa55c43){var _0x192f60={};for(var _0x102b70=0x0,_0x250b03=DUPLICATES[_0x1d3d('0x25')];_0x102b70<_0x250b03;_0x102b70+=0x1){_0x192f60[DUPLICATES[_0x102b70]]=_0x2b8074[DUPLICATES[_0x102b70]];}var _0x462628=_[_0x1d3d('0x26')](_0xa55c43,_0x192f60);if(_0x462628){return _0x1610a6(handleCheckRowError(_0x1d3d('0x27'),_0x1d3d('0x28'),_0x462628,_0x270b90));}}return db['CmContact'][_0x1d3d('0x29')](_0x2b8074,{'raw':!![],'hooks':![],'fields':_[_0x1d3d('0x2a')](_0x2b8074)})[_0x1d3d('0x2b')](function(_0x253e9b){if(DUPLICATES&&DUPLICATES['length']&&_0xa55c43){_0xa55c43['push'](_[_0x1d3d('0x2c')](_0x2b8074,DUPLICATES));}hopperContacts+=(hopperContacts?',':'')+_0x253e9b['id'];return _0x18f234();})[_0x1d3d('0x2d')](function(_0x47a8e3){return _0x1610a6(handleCheckRowError(_0x1d3d('0x16'),_0x1d3d('0x2e')+(_0x47a8e3[_0x1d3d('0x1a')]||JSON[_0x1d3d('0x2f')](_0x47a8e3)),null,_0x270b90));});});}function checkHopper(){function _0x5d906d(){return function(_0x5ad85b){logger[_0x1d3d('0x16')]('cmContact',_0x1d3d('0x30'),util[_0x1d3d('0x31')](_0x5ad85b,{'showHidden':![],'depth':null}));};}var _0x3574d7=function(_0x318dd3,_0xbe316){var _0x195e3e=squel[_0x1d3d('0x32')]()[_0x1d3d('0x33')]('cm_hopper')[_0x1d3d('0x34')](['phone',_0x1d3d('0x35'),_0x1d3d('0x36'),'ListId',_0xbe316,_0x1d3d('0x37'),_0x1d3d('0x38')],squel[_0x1d3d('0x39')]()[_0x1d3d('0x3a')]('phone','phone')[_0x1d3d('0x3a')]('NOW()',_0x1d3d('0x35'))[_0x1d3d('0x3a')]('id','ContactId')[_0x1d3d('0x3a')](LISTID[_0x1d3d('0x3b')](),'ListId')[_0x1d3d('0x3a')](_0x318dd3['id'][_0x1d3d('0x3b')](),_0xbe316)[_0x1d3d('0x3a')](_0x1d3d('0x3c'),_0x1d3d('0x37'))[_0x1d3d('0x3a')]('NOW()',_0x1d3d('0x38'))[_0x1d3d('0x3d')](_0x1d3d('0x3e'))[_0x1d3d('0x3f')](_0x1d3d('0x40'))['where'](_0x1d3d('0x41'),LISTID[_0x1d3d('0x3b')]())[_0x1d3d('0x3f')](_0x1d3d('0x42'))['where'](_0x1d3d('0x43'),squel[_0x1d3d('0x39')]()[_0x1d3d('0x3a')](_0x1d3d('0x1e'))[_0x1d3d('0x3d')]('cm_hopper')['where'](_0xbe316+_0x1d3d('0x44'),_0x318dd3['id'][_0x1d3d('0x3b')]())))[_0x1d3d('0x3b')]();return _0x195e3e;};var _0x66efd=function(_0x6f655c,_0x5c87c6){var _0x7560fe=squel['insert']()[_0x1d3d('0x33')](_0x1d3d('0x45'))[_0x1d3d('0x34')]([_0x1d3d('0x1e'),'scheduledAt',_0x1d3d('0x36'),_0x1d3d('0x24'),_0x5c87c6,_0x1d3d('0x37'),_0x1d3d('0x38')],squel[_0x1d3d('0x39')]()[_0x1d3d('0x3a')](_0x1d3d('0x1e'),'phone')[_0x1d3d('0x3a')]('NOW()',_0x1d3d('0x35'))[_0x1d3d('0x3a')]('id','ContactId')[_0x1d3d('0x3a')](LISTID['toString'](),_0x1d3d('0x24'))['field'](_0x6f655c['id'][_0x1d3d('0x3b')](),_0x5c87c6)[_0x1d3d('0x3a')](_0x1d3d('0x3c'),_0x1d3d('0x37'))[_0x1d3d('0x3a')](_0x1d3d('0x3c'),_0x1d3d('0x38'))[_0x1d3d('0x3d')]('cm_contacts')['where']('deletedAt\x20IS\x20NULL')[_0x1d3d('0x3f')](_0x1d3d('0x41'),LISTID[_0x1d3d('0x3b')]())[_0x1d3d('0x3f')](_0x1d3d('0x46'),squel[_0x1d3d('0x47')](hopperContacts))['where']('phone\x20IS\x20NOT\x20NULL')['where']('phone\x20NOT\x20IN\x20(?)',squel[_0x1d3d('0x39')]()[_0x1d3d('0x3a')](_0x1d3d('0x48'))[_0x1d3d('0x3d')](_0x1d3d('0x49'))[_0x1d3d('0x3f')](_0x5c87c6+_0x1d3d('0x44'),_0x6f655c['id'][_0x1d3d('0x3b')]()))[_0x1d3d('0x3f')](_0x1d3d('0x43'),squel[_0x1d3d('0x39')]()[_0x1d3d('0x3a')](_0x1d3d('0x1e'))[_0x1d3d('0x3d')](_0x1d3d('0x45'))['where'](_0x5c87c6+_0x1d3d('0x44'),_0x6f655c['id'][_0x1d3d('0x3b')]())))[_0x1d3d('0x3b')]();return _0x7560fe;};function _0xcfc9c7(_0x502f6c,_0x41930f){var _0x4973b4=squel['insert']()[_0x1d3d('0x33')](_0x1d3d('0x45'))['fromQuery']([_0x1d3d('0x1e'),_0x1d3d('0x35'),'ContactId',_0x1d3d('0x24'),_0x41930f,_0x1d3d('0x37'),_0x1d3d('0x38')],squel[_0x1d3d('0x39')]()[_0x1d3d('0x3a')](_0x1d3d('0x1e'),_0x1d3d('0x1e'))[_0x1d3d('0x3a')](_0x1d3d('0x3c'),'scheduledAt')[_0x1d3d('0x3a')]('id','ContactId')['field'](LISTID['toString'](),'ListId')[_0x1d3d('0x3a')](_0x502f6c['id'][_0x1d3d('0x3b')](),_0x41930f)[_0x1d3d('0x3a')](_0x1d3d('0x3c'),'createdAt')[_0x1d3d('0x3a')]('NOW()',_0x1d3d('0x38'))[_0x1d3d('0x3d')]('cm_contacts')[_0x1d3d('0x3f')](_0x1d3d('0x40'))['where'](_0x1d3d('0x41'),LISTID[_0x1d3d('0x3b')]())[_0x1d3d('0x3f')](_0x1d3d('0x46'),squel[_0x1d3d('0x47')](hopperContacts))[_0x1d3d('0x3f')]('phone\x20IS\x20NOT\x20NULL'))[_0x1d3d('0x3b')]();return _0x4973b4;}function _0x31b07c(_0x1ea7ce,_0x1183c0){var _0x35e53e=squel['insert']()[_0x1d3d('0x33')]('cm_hopper_black')[_0x1d3d('0x34')](['phone',_0x1d3d('0x36'),_0x1d3d('0x24'),_0x1183c0,_0x1d3d('0x37'),_0x1d3d('0x38')],squel[_0x1d3d('0x39')]()[_0x1d3d('0x3a')](_0x1d3d('0x1e'),'phone')[_0x1d3d('0x3a')]('id',_0x1d3d('0x36'))[_0x1d3d('0x3a')](LISTID[_0x1d3d('0x3b')](),_0x1d3d('0x24'))[_0x1d3d('0x3a')](_0x1ea7ce['id']['toString'](),_0x1183c0)[_0x1d3d('0x3a')](_0x1d3d('0x3c'),_0x1d3d('0x37'))[_0x1d3d('0x3a')](_0x1d3d('0x3c'),'updatedAt')[_0x1d3d('0x3d')](_0x1d3d('0x3e'))[_0x1d3d('0x3f')]('deletedAt\x20IS\x20NULL')[_0x1d3d('0x3f')]('ListId\x20=\x20?',LISTID[_0x1d3d('0x3b')]())['where'](_0x1d3d('0x46'),squel[_0x1d3d('0x47')](hopperContacts))[_0x1d3d('0x3f')]('phone\x20IS\x20NOT\x20NULL'))[_0x1d3d('0x3b')]();return _0x35e53e;}return db[_0x1d3d('0x4a')][_0x1d3d('0x4b')]({'where':{'type':'outbound'},'attributes':['id',_0x1d3d('0x4c')],'include':[{'model':db[_0x1d3d('0x4d')],'as':_0x1d3d('0x4e'),'where':{'id':LISTID}}]})['then'](function(_0x336263){var _0x31672e=[];if(_0x336263){var _0x37667d;for(var _0x411cb0=0x0,_0x107494;_0x411cb0<_0x336263['length'];_0x411cb0+=0x1){_0x107494=_0x336263[_0x411cb0][_0x1d3d('0x4f')]({'plain':!![]});switch(_0x107494[_0x1d3d('0x4c')]){case _0x1d3d('0x50'):_0x31672e['push'](db[_0x1d3d('0x51')][_0x1d3d('0x52')](_0x66efd(_0x107494,_0x1d3d('0x53')))[_0x1d3d('0x2b')](function(){})[_0x1d3d('0x2d')](_0x5d906d()));break;case'onlyIfOpen':_0x31672e[_0x1d3d('0x54')](db[_0x1d3d('0x51')]['query'](_0x3574d7(_0x107494,_0x1d3d('0x53')))[_0x1d3d('0x2b')](function(){})['catch'](_0x5d906d()));break;default:_0x31672e[_0x1d3d('0x54')](db[_0x1d3d('0x51')][_0x1d3d('0x52')](_0xcfc9c7(_0x107494,_0x1d3d('0x53')))['then'](function(){})[_0x1d3d('0x2d')](_0x5d906d()));}}}return _0x31672e;})[_0x1d3d('0x55')]()[_0x1d3d('0x2b')](function(){return db[_0x1d3d('0x4a')]['findAll']({'where':{'type':'outbound'},'attributes':['id'],'include':[{'model':db[_0x1d3d('0x4d')],'as':_0x1d3d('0x56'),'where':{'id':LISTID}}]})[_0x1d3d('0x2b')](function(_0x14e615){var _0x3645b2=[];if(_0x14e615){var _0x33a3f3;for(var _0x19f00b=0x0,_0x4d3e35;_0x19f00b<_0x14e615[_0x1d3d('0x25')];_0x19f00b+=0x1){_0x4d3e35=_0x14e615[_0x19f00b][_0x1d3d('0x4f')]({'plain':!![]});_0x3645b2['push'](db[_0x1d3d('0x51')][_0x1d3d('0x52')](_0x31b07c(_0x4d3e35,_0x1d3d('0x53')))['then'](function(){})[_0x1d3d('0x2d')](_0x5d906d()));}}return _0x3645b2;})[_0x1d3d('0x55')]();})[_0x1d3d('0x2b')](function(){return db[_0x1d3d('0x57')]['findAll']({'attributes':['id',_0x1d3d('0x4c')],'include':[{'model':db[_0x1d3d('0x4d')],'as':_0x1d3d('0x4e'),'where':{'id':LISTID}}]})[_0x1d3d('0x2b')](function(_0x58c51a){var _0xc2c9e2=[];if(_0x58c51a){for(var _0x9a0a16=0x0,_0x17081a;_0x9a0a16<_0x58c51a['length'];_0x9a0a16+=0x1){_0x17081a=_0x58c51a[_0x9a0a16][_0x1d3d('0x4f')]({'plain':!![]});switch(_0x17081a[_0x1d3d('0x4c')]){case'always':_0xc2c9e2[_0x1d3d('0x54')](db['sequelize'][_0x1d3d('0x52')](_0x66efd(_0x17081a,_0x1d3d('0x58')))['then'](function(){})['catch'](_0x5d906d()));break;case _0x1d3d('0x59'):_0xc2c9e2[_0x1d3d('0x54')](db['sequelize'][_0x1d3d('0x52')](_0x3574d7(_0x17081a,_0x1d3d('0x58')))[_0x1d3d('0x2b')](function(){})[_0x1d3d('0x2d')](_0x5d906d()));break;default:_0xc2c9e2['push'](db[_0x1d3d('0x51')][_0x1d3d('0x52')](_0xcfc9c7(_0x17081a,_0x1d3d('0x58')))['then'](function(){})[_0x1d3d('0x2d')](_0x5d906d()));}}}return _0xc2c9e2;})[_0x1d3d('0x55')]();})[_0x1d3d('0x2b')](function(){return db['Campaign'][_0x1d3d('0x4b')]({'attributes':['id'],'include':[{'model':db[_0x1d3d('0x4d')],'as':_0x1d3d('0x56'),'where':{'id':LISTID}}]})[_0x1d3d('0x2b')](function(_0x1f9d7e){var _0x2926e0=[];if(_0x1f9d7e){for(var _0x516cb9=0x0,_0x1dd488;_0x516cb9<_0x1f9d7e[_0x1d3d('0x25')];_0x516cb9+=0x1){_0x1dd488=_0x1f9d7e[_0x516cb9]['get']({'plain':!![]});_0x2926e0[_0x1d3d('0x54')](db[_0x1d3d('0x51')][_0x1d3d('0x52')](_0x31b07c(_0x1dd488,'CampaignId'))[_0x1d3d('0x2b')](function(){})['catch'](_0x5d906d()));}}return _0x2926e0;})['all']();})['catch'](function(_0x451410){logger['error'](_0x1d3d('0x5a'),_0x1d3d('0x5b'),_0x451410[_0x1d3d('0x1a')]);});}var processPromises=function(_0x175e7f){return BPromise['all'](promises)['then'](function(_0x2abd7e){})[_0x1d3d('0x2d')](function(_0x5dc159){logger[_0x1d3d('0x16')](_0x1d3d('0x5c'),JSON['stringify'](_0x5dc159));})[_0x1d3d('0x5d')](function(){socket[_0x1d3d('0x5e')]('contact:csv_'+SOCKET_TIMESTAMP,{'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});promises=[];success=0x0;errors=0x0;duplicates=0x0;rows=[];if(_0x175e7f){return _0x175e7f[_0x1d3d('0x5f')]();}});};var endCsv=function(){return BPromise['resolve']()[_0x1d3d('0x2b')](function(){if(hopperContacts){return checkHopper();}})[_0x1d3d('0x2b')](function(){socket[_0x1d3d('0x5e')](_0x1d3d('0x60')+SOCKET_TIMESTAMP,{'finished':!![],'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});try{fs[_0x1d3d('0x61')](FILEPATH);}catch(_0x47fef2){logger[_0x1d3d('0x16')](_0x1d3d('0x62'),JSON[_0x1d3d('0x2f')](_0x47fef2));}finally{process[_0x1d3d('0x63')](0x0);}});};process['on'](_0x1d3d('0x64'),function(){logger[_0x1d3d('0x65')](_0x1d3d('0x66'));endCsv();});function main(){return BPromise[_0x1d3d('0x67')]()[_0x1d3d('0x2b')](function(){if(DUPLICATES){DUPLICATES=DUPLICATES[_0x1d3d('0x10')](',');return db[_0x1d3d('0x68')][_0x1d3d('0x4b')]({'where':{'ListId':LISTID},'attributes':DUPLICATES,'raw':!![]});}})['then'](function(_0x8054f9){var _0x5f138c=fs[_0x1d3d('0x69')](FILEPATH,{'highWaterMark':0xf*0x400*0x400});Papa[_0x1d3d('0x6a')](_0x5f138c,{'header':!![],'skipEmptyLines':!![],'step':function(_0x3a8a53,_0x1d5518){total+=0x1;var _0x410d43=total;promises[_0x1d3d('0x54')](checkRow(_0x3a8a53,_0x8054f9,_0x410d43)[_0x1d3d('0x2b')](function(){success+=0x1;})[_0x1d3d('0x2d')](function(_0x264c82){if(_0x264c82['error']){errors+=0x1;delete _0x264c82['error'];}else if(_0x264c82['duplicate']){duplicates+=0x1;delete _0x264c82[_0x1d3d('0x27')];}rows['push'](_0x264c82);}));if(total%0xc8===0x0){_0x1d5518[_0x1d3d('0x6b')]();return processPromises(_0x1d5518);}},'complete':function(){return processPromises()['then'](function(){logger[_0x1d3d('0x65')](_0x1d3d('0x6c'));endCsv();});},'error':function(_0x376dc9,_0x3657ce){logger['info'](_0x1d3d('0x6d'),JSON[_0x1d3d('0x2f')](_0x376dc9));endCsv();}});})[_0x1d3d('0x2d')](function(_0x24f238){logger['error'](_0x1d3d('0x6e'),JSON[_0x1d3d('0x2f')](_0x24f238));});}main();
\ No newline at end of file
+var _0xc6d8=['contact:csv_','resume','resolve','unlinkSync','Unable\x20to\x20delete\x20temp\x20file:','exit','SIGINT','parse','pause','info','CSV\x20parsed\x20correctly!','CSV\x20parse\x20error','Error\x20executing\x20contact\x20csv\x20import:','bluebird','../../../config/logger','util','squel','localhost','../../../api/cmContact/cmContact.socket','register','argv','undefined','Missing\x20filepath\x20parameter!','null','zipObject','split','Missing\x20ListId\x20parameter!','Missing\x20socket_timestamp\x20parameter!','error','index','The\x20row\x20is\x20empty\x20or\x20the\x20number\x20of\x20parameters\x20does\x20not\x20match\x20the\x20columns!','errors','length','map','message','join','hasOwnProperty','data','firstName','phone','phone\x20not\x20specified!','birthDate','YYYY-MM-DD','isValid','birthDate\x20format\x20is\x20invalid,\x20YYYY-MM-DD\x20format\x20is\x20supported!','email','email\x20format\x20is\x20not\x20valid!','ListId','CompanyId','duplicate','CmContact','create','keys','then','catch','Error\x20while\x20creating\x20contact:\x20','stringify','cmContact','checkHopper','insert','into','cm_hopper','fromQuery','scheduledAt','ContactId','updatedAt','select','field','NOW()','toString','createdAt','from','cm_contacts','where','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','\x20=\x20?','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','id\x20IN\x20?','str','VoiceQueue','outbound','dialCheckDuplicateType','Lists','get','always','push','VoiceQueueId','onlyIfOpen','sequelize','query','all','findAll','CmList','BlackLists','Campaign','CampaignId','generalCheckHopper','finally','emit'];(function(_0x2a0527,_0x2fc13f){var _0x1f4163=function(_0x259840){while(--_0x259840){_0x2a0527['push'](_0x2a0527['shift']());}};_0x1f4163(++_0x2fc13f);}(_0xc6d8,0xd7));var _0x8c6d=function(_0xbf19d7,_0x58b2bf){_0xbf19d7=_0xbf19d7-0x0;var _0x376e11=_0xc6d8[_0xbf19d7];return _0x376e11;};'use strict';var BPromise=require(_0x8c6d('0x0'));var db=require('../../../mysqldb')['db'];var logger=require(_0x8c6d('0x1'))('api');var util=require(_0x8c6d('0x2'));var _=require('lodash');var fs=require('fs');var squel=require(_0x8c6d('0x3'));var Papa=require('papaparse');var socket=require('socket.io-emitter')({'host':_0x8c6d('0x4'),'port':0x18eb});require(_0x8c6d('0x5'))[_0x8c6d('0x6')](socket);try{if(!process[_0x8c6d('0x7')][0x2]||process[_0x8c6d('0x7')][0x2]===_0x8c6d('0x8')||process[_0x8c6d('0x7')][0x2]==='null'){throw new Error(_0x8c6d('0x9'));}var FILEPATH=process[_0x8c6d('0x7')][0x2];if(!process[_0x8c6d('0x7')][0x3]||process['argv'][0x3]===_0x8c6d('0x8')||process[_0x8c6d('0x7')][0x3]===_0x8c6d('0xa')||!process[_0x8c6d('0x7')][0x4]||process[_0x8c6d('0x7')][0x4]===_0x8c6d('0x8')||process[_0x8c6d('0x7')][0x4]===_0x8c6d('0xa')){throw new Error('Missing\x20binding\x20parameters!');}var FIELDS=_[_0x8c6d('0xb')](process['argv'][0x3]['split'](','),process[_0x8c6d('0x7')][0x4][_0x8c6d('0xc')](','));if(!process[_0x8c6d('0x7')][0x5]||process[_0x8c6d('0x7')][0x5]===_0x8c6d('0x8')||process[_0x8c6d('0x7')][0x5]===_0x8c6d('0xa')){throw new Error(_0x8c6d('0xd'));}var LISTID=process[_0x8c6d('0x7')][0x5];var COMPANYID=process[_0x8c6d('0x7')][0x6]&&process['argv'][0x6]!==_0x8c6d('0x8')&&process['argv'][0x6]!==_0x8c6d('0xa')?process['argv'][0x6]:null;var DUPLICATES=process[_0x8c6d('0x7')][0x7]&&process[_0x8c6d('0x7')][0x7]!=='undefined'&&process[_0x8c6d('0x7')][0x7]!==_0x8c6d('0xa')?process['argv'][0x7]:null;if(!process[_0x8c6d('0x7')][0x8]||process['argv'][0x8]==='undefined'||process[_0x8c6d('0x7')][0x8]==='null'){throw new Error(_0x8c6d('0xe'));}var SOCKET_TIMESTAMP=process[_0x8c6d('0x7')][0x8];}catch(_0x1d0f0a){logger[_0x8c6d('0xf')](_0x1d0f0a);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(_0x5ac817,_0x56854a,_0x5512be,_0x550079){var _0x212199={'message':_0x56854a};_0x212199[_0x5ac817]=!![];if(_0x5512be){_0x212199['contact']=_0x5512be;}if(_0x550079){_0x212199[_0x8c6d('0x10')]=_0x550079;}return _0x212199;}function isEmail(_0x4b6835){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))*$/['test'](_0x4b6835);}function checkRow(_0x37fd7c,_0x8cebeb,_0x54dcc7){return new BPromise(function(_0x512a72,_0x51bb08){if(_['isNil'](_0x37fd7c)){return _0x51bb08(handleCheckRowError(_0x8c6d('0xf'),_0x8c6d('0x11'),null,_0x54dcc7));}if(_0x37fd7c[_0x8c6d('0x12')]&&_0x37fd7c['errors'][_0x8c6d('0x13')]){var _0x4cb88b=_[_0x8c6d('0x14')](_0x37fd7c['errors'],_0x8c6d('0x15'))[_0x8c6d('0x16')](';');return _0x51bb08(handleCheckRowError(_0x8c6d('0xf'),_0x4cb88b,null,_0x54dcc7));}var _0x2b6d18={};for(var _0x1e6755 in FIELDS){if(FIELDS[_0x8c6d('0x17')](_0x1e6755)&&FIELDS[_0x1e6755]){_0x2b6d18[_0x1e6755]=_0x37fd7c[_0x8c6d('0x18')][0x0][FIELDS[_0x1e6755]]||_0x37fd7c[_0x8c6d('0x18')][0x0]['\ufeff'+FIELDS[_0x1e6755]];}}if(!_0x2b6d18[_0x8c6d('0x19')]){return _0x51bb08(handleCheckRowError('error','firstName\x20not\x20specified!',null,_0x54dcc7));}if(!_0x2b6d18[_0x8c6d('0x1a')]){return _0x51bb08(handleCheckRowError(_0x8c6d('0xf'),_0x8c6d('0x1b'),null,_0x54dcc7));}if(_0x2b6d18[_0x8c6d('0x1c')]){var _0x370626=moment(_0x2b6d18[_0x8c6d('0x1c')],_0x8c6d('0x1d'));if(!_0x370626[_0x8c6d('0x1e')]()){return _0x51bb08(handleCheckRowError(_0x8c6d('0xf'),_0x8c6d('0x1f'),null,_0x54dcc7));}}if(_0x2b6d18[_0x8c6d('0x20')]){if(!isEmail(_0x2b6d18[_0x8c6d('0x20')])){return _0x51bb08(handleCheckRowError('error',_0x8c6d('0x21'),null,_0x54dcc7));}}_0x2b6d18[_0x8c6d('0x22')]=LISTID;_0x2b6d18[_0x8c6d('0x23')]=COMPANYID||undefined;if(DUPLICATES&&DUPLICATES[_0x8c6d('0x13')]&&_0x8cebeb){var _0x115621={};for(var _0xa46064=0x0,_0x1383df=DUPLICATES[_0x8c6d('0x13')];_0xa46064<_0x1383df;_0xa46064+=0x1){_0x115621[DUPLICATES[_0xa46064]]=_0x2b6d18[DUPLICATES[_0xa46064]];}var _0x247448=_['find'](_0x8cebeb,_0x115621);if(_0x247448){return _0x51bb08(handleCheckRowError(_0x8c6d('0x24'),'Duplicate\x20Contact',_0x247448,_0x54dcc7));}}return db[_0x8c6d('0x25')][_0x8c6d('0x26')](_0x2b6d18,{'raw':!![],'hooks':![],'fields':_[_0x8c6d('0x27')](_0x2b6d18)})[_0x8c6d('0x28')](function(_0x334afb){if(DUPLICATES&&DUPLICATES[_0x8c6d('0x13')]&&_0x8cebeb){_0x8cebeb['push'](_['pick'](_0x2b6d18,DUPLICATES));}hopperContacts+=(hopperContacts?',':'')+_0x334afb['id'];return _0x512a72();})[_0x8c6d('0x29')](function(_0x2b7ca7){return _0x51bb08(handleCheckRowError(_0x8c6d('0xf'),_0x8c6d('0x2a')+(_0x2b7ca7['message']||JSON[_0x8c6d('0x2b')](_0x2b7ca7)),null,_0x54dcc7));});});}function checkHopper(){function _0x466f37(){return function(_0xdc33f5){logger[_0x8c6d('0xf')](_0x8c6d('0x2c'),_0x8c6d('0x2d'),util['inspect'](_0xdc33f5,{'showHidden':![],'depth':null}));};}var _0x3c16d3=function(_0x2d3a36,_0x1349be){var _0x2ef932=squel[_0x8c6d('0x2e')]()[_0x8c6d('0x2f')](_0x8c6d('0x30'))[_0x8c6d('0x31')]([_0x8c6d('0x1a'),_0x8c6d('0x32'),_0x8c6d('0x33'),_0x8c6d('0x22'),_0x1349be,'createdAt',_0x8c6d('0x34')],squel[_0x8c6d('0x35')]()[_0x8c6d('0x36')](_0x8c6d('0x1a'),_0x8c6d('0x1a'))['field'](_0x8c6d('0x37'),_0x8c6d('0x32'))['field']('id',_0x8c6d('0x33'))[_0x8c6d('0x36')](LISTID[_0x8c6d('0x38')](),'ListId')[_0x8c6d('0x36')](_0x2d3a36['id'][_0x8c6d('0x38')](),_0x1349be)[_0x8c6d('0x36')](_0x8c6d('0x37'),_0x8c6d('0x39'))[_0x8c6d('0x36')](_0x8c6d('0x37'),_0x8c6d('0x34'))[_0x8c6d('0x3a')](_0x8c6d('0x3b'))[_0x8c6d('0x3c')]('deletedAt\x20IS\x20NULL')['where']('ListId\x20=\x20?',LISTID[_0x8c6d('0x38')]())[_0x8c6d('0x3c')](_0x8c6d('0x3d'))[_0x8c6d('0x3c')](_0x8c6d('0x3e'),squel['select']()[_0x8c6d('0x36')](_0x8c6d('0x1a'))[_0x8c6d('0x3a')]('cm_hopper')[_0x8c6d('0x3c')](_0x1349be+_0x8c6d('0x3f'),_0x2d3a36['id']['toString']())))['toString']();return _0x2ef932;};var _0x4bd626=function(_0x5d598d,_0x4a033f){var _0x8fbbb8=squel[_0x8c6d('0x2e')]()[_0x8c6d('0x2f')](_0x8c6d('0x30'))[_0x8c6d('0x31')](['phone','scheduledAt','ContactId','ListId',_0x4a033f,_0x8c6d('0x39'),'updatedAt'],squel[_0x8c6d('0x35')]()[_0x8c6d('0x36')](_0x8c6d('0x1a'),_0x8c6d('0x1a'))[_0x8c6d('0x36')](_0x8c6d('0x37'),'scheduledAt')[_0x8c6d('0x36')]('id',_0x8c6d('0x33'))['field'](LISTID[_0x8c6d('0x38')](),_0x8c6d('0x22'))['field'](_0x5d598d['id'][_0x8c6d('0x38')](),_0x4a033f)[_0x8c6d('0x36')](_0x8c6d('0x37'),_0x8c6d('0x39'))[_0x8c6d('0x36')](_0x8c6d('0x37'),_0x8c6d('0x34'))[_0x8c6d('0x3a')](_0x8c6d('0x3b'))[_0x8c6d('0x3c')](_0x8c6d('0x40'))[_0x8c6d('0x3c')](_0x8c6d('0x41'),LISTID[_0x8c6d('0x38')]())[_0x8c6d('0x3c')](_0x8c6d('0x42'),squel['str'](hopperContacts))['where']('phone\x20IS\x20NOT\x20NULL')[_0x8c6d('0x3c')](_0x8c6d('0x3e'),squel[_0x8c6d('0x35')]()[_0x8c6d('0x36')]('calleridnum')[_0x8c6d('0x3a')]('cm_hopper_final')[_0x8c6d('0x3c')](_0x4a033f+_0x8c6d('0x3f'),_0x5d598d['id'][_0x8c6d('0x38')]()))['where'](_0x8c6d('0x3e'),squel['select']()[_0x8c6d('0x36')]('phone')[_0x8c6d('0x3a')](_0x8c6d('0x30'))[_0x8c6d('0x3c')](_0x4a033f+_0x8c6d('0x3f'),_0x5d598d['id']['toString']())))[_0x8c6d('0x38')]();return _0x8fbbb8;};function _0xa43dfa(_0x46b533,_0x181a82){var _0x309396=squel[_0x8c6d('0x2e')]()[_0x8c6d('0x2f')](_0x8c6d('0x30'))['fromQuery']([_0x8c6d('0x1a'),_0x8c6d('0x32'),_0x8c6d('0x33'),_0x8c6d('0x22'),_0x181a82,'createdAt',_0x8c6d('0x34')],squel['select']()['field'](_0x8c6d('0x1a'),_0x8c6d('0x1a'))[_0x8c6d('0x36')](_0x8c6d('0x37'),_0x8c6d('0x32'))[_0x8c6d('0x36')]('id',_0x8c6d('0x33'))['field'](LISTID[_0x8c6d('0x38')](),_0x8c6d('0x22'))[_0x8c6d('0x36')](_0x46b533['id']['toString'](),_0x181a82)[_0x8c6d('0x36')](_0x8c6d('0x37'),_0x8c6d('0x39'))[_0x8c6d('0x36')](_0x8c6d('0x37'),'updatedAt')[_0x8c6d('0x3a')](_0x8c6d('0x3b'))['where'](_0x8c6d('0x40'))['where'](_0x8c6d('0x41'),LISTID['toString']())['where'](_0x8c6d('0x42'),squel[_0x8c6d('0x43')](hopperContacts))[_0x8c6d('0x3c')](_0x8c6d('0x3d')))[_0x8c6d('0x38')]();return _0x309396;}function _0x3090a9(_0x23ef83,_0x1c37ac){var _0x143262=squel[_0x8c6d('0x2e')]()[_0x8c6d('0x2f')]('cm_hopper_black')[_0x8c6d('0x31')]([_0x8c6d('0x1a'),_0x8c6d('0x33'),'ListId',_0x1c37ac,_0x8c6d('0x39'),_0x8c6d('0x34')],squel[_0x8c6d('0x35')]()['field'](_0x8c6d('0x1a'),'phone')[_0x8c6d('0x36')]('id','ContactId')['field'](LISTID[_0x8c6d('0x38')](),_0x8c6d('0x22'))['field'](_0x23ef83['id']['toString'](),_0x1c37ac)['field'](_0x8c6d('0x37'),_0x8c6d('0x39'))[_0x8c6d('0x36')](_0x8c6d('0x37'),'updatedAt')['from'](_0x8c6d('0x3b'))[_0x8c6d('0x3c')](_0x8c6d('0x40'))[_0x8c6d('0x3c')](_0x8c6d('0x41'),LISTID[_0x8c6d('0x38')]())[_0x8c6d('0x3c')](_0x8c6d('0x42'),squel['str'](hopperContacts))[_0x8c6d('0x3c')](_0x8c6d('0x3d')))[_0x8c6d('0x38')]();return _0x143262;}return db[_0x8c6d('0x44')]['findAll']({'where':{'type':_0x8c6d('0x45')},'attributes':['id',_0x8c6d('0x46')],'include':[{'model':db['CmList'],'as':_0x8c6d('0x47'),'where':{'id':LISTID}}]})[_0x8c6d('0x28')](function(_0x52298b){var _0x56c3e5=[];if(_0x52298b){var _0x34bc8c;for(var _0x51fc61=0x0,_0x4861ec;_0x51fc61<_0x52298b[_0x8c6d('0x13')];_0x51fc61+=0x1){_0x4861ec=_0x52298b[_0x51fc61][_0x8c6d('0x48')]({'plain':!![]});switch(_0x4861ec[_0x8c6d('0x46')]){case _0x8c6d('0x49'):_0x56c3e5[_0x8c6d('0x4a')](db['sequelize']['query'](_0x4bd626(_0x4861ec,_0x8c6d('0x4b')))[_0x8c6d('0x28')](function(){})[_0x8c6d('0x29')](_0x466f37()));break;case _0x8c6d('0x4c'):_0x56c3e5[_0x8c6d('0x4a')](db[_0x8c6d('0x4d')][_0x8c6d('0x4e')](_0x3c16d3(_0x4861ec,'VoiceQueueId'))[_0x8c6d('0x28')](function(){})[_0x8c6d('0x29')](_0x466f37()));break;default:_0x56c3e5[_0x8c6d('0x4a')](db[_0x8c6d('0x4d')][_0x8c6d('0x4e')](_0xa43dfa(_0x4861ec,_0x8c6d('0x4b')))[_0x8c6d('0x28')](function(){})['catch'](_0x466f37()));}}}return _0x56c3e5;})[_0x8c6d('0x4f')]()[_0x8c6d('0x28')](function(){return db[_0x8c6d('0x44')][_0x8c6d('0x50')]({'where':{'type':'outbound'},'attributes':['id'],'include':[{'model':db[_0x8c6d('0x51')],'as':_0x8c6d('0x52'),'where':{'id':LISTID}}]})[_0x8c6d('0x28')](function(_0xf86ea6){var _0x532b0d=[];if(_0xf86ea6){var _0x18e663;for(var _0x5bdd7f=0x0,_0x4fd9ff;_0x5bdd7f<_0xf86ea6[_0x8c6d('0x13')];_0x5bdd7f+=0x1){_0x4fd9ff=_0xf86ea6[_0x5bdd7f][_0x8c6d('0x48')]({'plain':!![]});_0x532b0d['push'](db[_0x8c6d('0x4d')][_0x8c6d('0x4e')](_0x3090a9(_0x4fd9ff,_0x8c6d('0x4b')))[_0x8c6d('0x28')](function(){})[_0x8c6d('0x29')](_0x466f37()));}}return _0x532b0d;})[_0x8c6d('0x4f')]();})[_0x8c6d('0x28')](function(){return db[_0x8c6d('0x53')][_0x8c6d('0x50')]({'attributes':['id',_0x8c6d('0x46')],'include':[{'model':db[_0x8c6d('0x51')],'as':_0x8c6d('0x47'),'where':{'id':LISTID}}]})[_0x8c6d('0x28')](function(_0x95a36e){var _0x285e1c=[];if(_0x95a36e){for(var _0x4344c3=0x0,_0x18a8ec;_0x4344c3<_0x95a36e['length'];_0x4344c3+=0x1){_0x18a8ec=_0x95a36e[_0x4344c3][_0x8c6d('0x48')]({'plain':!![]});switch(_0x18a8ec[_0x8c6d('0x46')]){case _0x8c6d('0x49'):_0x285e1c[_0x8c6d('0x4a')](db[_0x8c6d('0x4d')][_0x8c6d('0x4e')](_0x4bd626(_0x18a8ec,_0x8c6d('0x54')))[_0x8c6d('0x28')](function(){})[_0x8c6d('0x29')](_0x466f37()));break;case _0x8c6d('0x4c'):_0x285e1c[_0x8c6d('0x4a')](db[_0x8c6d('0x4d')][_0x8c6d('0x4e')](_0x3c16d3(_0x18a8ec,'CampaignId'))[_0x8c6d('0x28')](function(){})[_0x8c6d('0x29')](_0x466f37()));break;default:_0x285e1c[_0x8c6d('0x4a')](db[_0x8c6d('0x4d')]['query'](_0xa43dfa(_0x18a8ec,_0x8c6d('0x54')))[_0x8c6d('0x28')](function(){})[_0x8c6d('0x29')](_0x466f37()));}}}return _0x285e1c;})[_0x8c6d('0x4f')]();})[_0x8c6d('0x28')](function(){return db['Campaign'][_0x8c6d('0x50')]({'attributes':['id'],'include':[{'model':db[_0x8c6d('0x51')],'as':'BlackLists','where':{'id':LISTID}}]})['then'](function(_0x3b2edd){var _0x1d2019=[];if(_0x3b2edd){for(var _0x353363=0x0,_0x232cac;_0x353363<_0x3b2edd[_0x8c6d('0x13')];_0x353363+=0x1){_0x232cac=_0x3b2edd[_0x353363][_0x8c6d('0x48')]({'plain':!![]});_0x1d2019[_0x8c6d('0x4a')](db[_0x8c6d('0x4d')][_0x8c6d('0x4e')](_0x3090a9(_0x232cac,_0x8c6d('0x54')))[_0x8c6d('0x28')](function(){})['catch'](_0x466f37()));}}return _0x1d2019;})['all']();})['catch'](function(_0x3f2454){logger[_0x8c6d('0xf')]('cmContact,\x20%s,\x20%s',_0x8c6d('0x55'),_0x3f2454['message']);});}var processPromises=function(_0x31d9b7){return BPromise[_0x8c6d('0x4f')](promises)[_0x8c6d('0x28')](function(_0x372179){})[_0x8c6d('0x29')](function(_0x276ad5){logger[_0x8c6d('0xf')]('Error\x20processing\x20rows\x20block:',JSON['stringify'](_0x276ad5));})[_0x8c6d('0x56')](function(){socket[_0x8c6d('0x57')](_0x8c6d('0x58')+SOCKET_TIMESTAMP,{'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});promises=[];success=0x0;errors=0x0;duplicates=0x0;rows=[];if(_0x31d9b7){return _0x31d9b7[_0x8c6d('0x59')]();}});};var endCsv=function(){return BPromise[_0x8c6d('0x5a')]()[_0x8c6d('0x28')](function(){if(hopperContacts){return checkHopper();}})[_0x8c6d('0x28')](function(){socket[_0x8c6d('0x57')](_0x8c6d('0x58')+SOCKET_TIMESTAMP,{'finished':!![],'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});try{fs[_0x8c6d('0x5b')](FILEPATH);}catch(_0x5c0e4b){logger[_0x8c6d('0xf')](_0x8c6d('0x5c'),JSON[_0x8c6d('0x2b')](_0x5c0e4b));}finally{process[_0x8c6d('0x5d')](0x0);}});};process['on'](_0x8c6d('0x5e'),function(){logger['info']('CSV\x20import\x20process\x20stopped!');endCsv();});function main(){return BPromise[_0x8c6d('0x5a')]()['then'](function(){if(DUPLICATES){DUPLICATES=DUPLICATES['split'](',');return db[_0x8c6d('0x25')][_0x8c6d('0x50')]({'where':{'ListId':LISTID},'attributes':DUPLICATES,'raw':!![]});}})[_0x8c6d('0x28')](function(_0x7712b8){var _0x49a4ab=fs['createReadStream'](FILEPATH,{'highWaterMark':0xf*0x400*0x400});Papa[_0x8c6d('0x5f')](_0x49a4ab,{'header':!![],'skipEmptyLines':!![],'step':function(_0xa67c13,_0x45b9df){total+=0x1;var _0x4ba5ee=total;promises[_0x8c6d('0x4a')](checkRow(_0xa67c13,_0x7712b8,_0x4ba5ee)[_0x8c6d('0x28')](function(){success+=0x1;})['catch'](function(_0x8df7a0){if(_0x8df7a0[_0x8c6d('0xf')]){errors+=0x1;delete _0x8df7a0[_0x8c6d('0xf')];}else if(_0x8df7a0[_0x8c6d('0x24')]){duplicates+=0x1;delete _0x8df7a0[_0x8c6d('0x24')];}rows[_0x8c6d('0x4a')](_0x8df7a0);}));if(total%0xc8===0x0){_0x45b9df[_0x8c6d('0x60')]();return processPromises(_0x45b9df);}},'complete':function(){return processPromises()['then'](function(){logger[_0x8c6d('0x61')](_0x8c6d('0x62'));endCsv();});},'error':function(_0x2ef720,_0x170095){logger[_0x8c6d('0x61')](_0x8c6d('0x63'),JSON[_0x8c6d('0x2b')](_0x2ef720));endCsv();}});})[_0x8c6d('0x29')](function(_0x576ad8){logger[_0x8c6d('0xf')](_0x8c6d('0x64'),JSON[_0x8c6d('0x2b')](_0x576ad8));});}main();
\ No newline at end of file
index fbbde36..d4a870a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xefa1=['voice_queues','VoiceQueueId','voice_queues_has_cm_blacklists','campaigns_has_cm_lists','campaigns','CampaignId','campaigns_has_cm_blacklists','finish','affectedRows','unlink','catch','complete','argv','arguments\x20<filename>\x20<parameters>\x20<agents>','file\x20doesn\x27t\x20exists','binding\x20doesn\x27t\x20exists','firstName','ListId\x20is\x20mandatory','body\x20id\x20mandatory','map','SIGINT','uncaughtException','path','util','bluebird','moment','../../../mysqldb','../../../config/environment','../../../config/logger','import','localhost','YYYY-MM-DD\x20HH:mm:ss','test','select','field','from','join','.id\x20=\x20','where','\x20=\x20','.dialCheckDuplicateType\x20IN\x20(','cm_contacts.phone','cm_contacts.id','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.updatedAt','cm_contacts.UserId','insert','into','cm_hopper','phone','scheduledat','ContactId','ListId','createdAt','updatedAt','priority','UserId','recallme','fields','cm_contacts','cm_contacts.ListId\x20=\x20','.CmListId\x20=\x20?','\x22always\x22','\x22onlyIfOpen\x22','cm_contacts.phone\x20NOT\x20IN\x20(?)','toString','.CmListId','ListId\x20=\x20?','concat','keys','CompanyId','fromQuery',')\x20NOT\x20IN\x20?','id\x20IN\x20?','MIN(id)','min_id','info','Received\x20SIGINT','error','message','exit','errors','push','query','spread','main','stringify','send','start','binding','root','server/files/tmp','.csv','header','writeFileSync','parse','createReadStream','data','length','rows','hasOwnProperty','trim','replace','isValid','isNaN','includes','agent\x20not\x20exists','dateOfBirth','YYYY-MM-DD','appendFileSync','emit','contact:import:','Abort\x20parser','SystemError','step','duplicates','CREATE\x20TABLE\x20','\x20LIKE\x20cm_contacts;','format','LOAD\x20DATA\x20LOCAL\x20INFILE\x20\x27%s\x27\x20INTO\x20TABLE\x20%s\x20CHARACTER\x20SET\x20UTF8\x20FIELDS\x20TERMINATED\x20BY\x20\x27,\x27\x20ENCLOSED\x20BY\x20\x27\x22\x27\x20LINES\x20TERMINATED\x20BY\x20\x27\x0a\x27\x20IGNORE\x201\x20ROWS\x20(%s)\x20SET\x20id\x20=\x20NULL,\x20ListId\x20=\x20%s,\x20CompanyId\x20=\x20%s,\x20createdAt\x20=\x20\x27%s\x27,\x20updatedAt\x20=\x20\x27%s\x27','isNil','DROP\x20TABLE\x20','voice_queues_has_cm_lists'];(function(_0x11ce46,_0x177a85){var _0x368a1e=function(_0x425454){while(--_0x425454){_0x11ce46['push'](_0x11ce46['shift']());}};_0x368a1e(++_0x177a85);}(_0xefa1,0x18a));var _0x1efa=function(_0x134542,_0x977384){_0x134542=_0x134542-0x0;var _0x3d18ab=_0xefa1[_0x134542];return _0x3d18ab;};'use strict';var fs=require('fs');var path=require(_0x1efa('0x0'));var _=require('lodash');var Papa=require('papaparse');var util=require(_0x1efa('0x1'));var BPromise=require(_0x1efa('0x2'));var moment=require(_0x1efa('0x3'));var squel=require('squel');var db=require(_0x1efa('0x4'))['db'];var config=require(_0x1efa('0x5'));var logger=require(_0x1efa('0x6'))(_0x1efa('0x7'));var socket=require('socket.io-emitter')({'host':_0x1efa('0x8'),'port':0x18eb});var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()['format'](_0x1efa('0x9'));function isEmail(_0x17d6ee){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))*$/[_0x1efa('0xa')](_0x17d6ee);}function selectNotIn(_0x4f08f4,_0x25f0ef,_0xc3fd30,_0x55d764,_0x46bfd5){return squel[_0x1efa('0xb')]()[_0x1efa('0xc')]('phone')[_0x1efa('0xd')](_0x55d764)[_0x1efa('0xe')](_0x25f0ef,null,_0x25f0ef+_0x1efa('0xf')+_0x55d764+'.'+_0xc3fd30)[_0x1efa('0x10')](_0x55d764+'.'+_0xc3fd30+_0x1efa('0x11')+_0x4f08f4+'.'+_0xc3fd30)[_0x1efa('0x10')](_0x25f0ef+_0x1efa('0x12')+_0x46bfd5[_0x1efa('0xe')]()+')');}function insertCmHopper(_0x2e182b,_0x2f4235,_0x591a97,_0x1fd8a9,_0x2de615){var _0x55abcc=[_0x1efa('0x13'),'cm_contacts.scheduledat',_0x1efa('0x14'),_0x1efa('0x15'),_0x2f4235+'.'+_0x1fd8a9,_0x1efa('0x16'),_0x1efa('0x17'),'cm_contacts.priority',_0x1efa('0x18'),'\x22'+_0x2de615+'\x22'];return squel[_0x1efa('0x19')]()[_0x1efa('0x1a')](_0x1efa('0x1b'))['fromQuery']([_0x1efa('0x1c'),_0x1efa('0x1d'),_0x1efa('0x1e'),_0x1efa('0x1f'),_0x1fd8a9,_0x1efa('0x20'),_0x1efa('0x21'),_0x1efa('0x22'),_0x1efa('0x23'),_0x1efa('0x24')],squel[_0x1efa('0xb')]()[_0x1efa('0x25')](_0x55abcc)[_0x1efa('0xd')](_0x2f4235)['join'](_0x1efa('0x26'),null,_0x1efa('0x27')+_0x2f4235+'.CmListId')[_0x1efa('0xe')](_0x591a97,null,_0x591a97+'.id\x20=\x20'+_0x2f4235+'.'+_0x1fd8a9)[_0x1efa('0x10')](_0x2f4235+_0x1efa('0x28'),_0x2e182b)[_0x1efa('0x10')]('cm_contacts.createdAt\x20=\x20?',NOW)['where']('cm_contacts.phone\x20NOT\x20IN\x20(?)',selectNotIn(_0x2f4235,_0x591a97,_0x1fd8a9,_0x1efa('0x1b'),[_0x1efa('0x29'),_0x1efa('0x2a')]))[_0x1efa('0x10')](_0x1efa('0x2b'),selectNotIn(_0x2f4235,_0x591a97,_0x1fd8a9,_0x1efa('0x1b'),[_0x1efa('0x29')])))[_0x1efa('0x2c')]();}function insertCmHopperBlack(_0x10f885,_0x2f8af2,_0x5dfb08,_0x36d2fc){var _0x46ba98=[_0x1efa('0x13'),_0x1efa('0x14'),'cm_contacts.ListId',_0x2f8af2+'.'+_0x36d2fc,_0x1efa('0x16'),_0x1efa('0x17')];return squel[_0x1efa('0x19')]()[_0x1efa('0x1a')]('cm_hopper_black')['fromQuery'](['phone',_0x1efa('0x1e'),_0x1efa('0x1f'),_0x36d2fc,_0x1efa('0x20'),_0x1efa('0x21')],squel[_0x1efa('0xb')]()[_0x1efa('0x25')](_0x46ba98)[_0x1efa('0xd')](_0x2f8af2)[_0x1efa('0xe')](_0x1efa('0x26'),null,_0x1efa('0x27')+_0x2f8af2+_0x1efa('0x2d'))[_0x1efa('0xe')](_0x5dfb08,null,_0x5dfb08+_0x1efa('0xf')+_0x2f8af2+'.'+_0x36d2fc)[_0x1efa('0x10')](_0x2f8af2+_0x1efa('0x28'),_0x10f885)[_0x1efa('0x10')]('cm_contacts.createdAt\x20=\x20?',NOW)['where']('cm_contacts.phone\x20NOT\x20IN\x20(?)',squel[_0x1efa('0xb')]()[_0x1efa('0xc')](_0x1efa('0x1c'))[_0x1efa('0xd')]('cm_hopper_black')['where'](_0x1efa('0x2e'),_0x10f885)[_0x1efa('0x10')](_0x36d2fc+'\x20=\x20?',_0x2f8af2+'.'+_0x36d2fc)))[_0x1efa('0x2c')]();}function insertCmContact(_0x49e7dd,_0x527e7e,_0x3f8ec1,_0x120f15){var _0x2bf941=_[_0x1efa('0x2f')](_[_0x1efa('0x30')](_0x120f15),[_0x1efa('0x1f'),_0x1efa('0x31'),_0x1efa('0x20'),_0x1efa('0x21')]);return squel[_0x1efa('0x19')]()[_0x1efa('0x1a')](_0x1efa('0x26'))[_0x1efa('0x32')](_0x2bf941,squel['select']()[_0x1efa('0x25')](_0x2bf941)[_0x1efa('0xd')](_0x527e7e)['where']('('+_0x3f8ec1[_0x1efa('0xe')](',')+_0x1efa('0x33'),squel[_0x1efa('0xb')]()[_0x1efa('0x25')](_0x3f8ec1)[_0x1efa('0xd')]('cm_contacts')[_0x1efa('0x10')]('ListId\x20=\x20?',_0x49e7dd))['where'](_0x1efa('0x34'),squel['select']()['field'](_0x1efa('0x35'),_0x1efa('0x36'))[_0x1efa('0xd')](_0x527e7e)['group'](_0x3f8ec1['join'](','))))[_0x1efa('0x2c')]();}function handleStop(){logger[_0x1efa('0x37')](_0x1efa('0x38'));stopped=!![];}function handleUncaughtException(_0x198260){logger[_0x1efa('0x39')](_0x198260[_0x1efa('0x3a')]);process[_0x1efa('0x3b')](0x1);}function handleError(_0x4d5609,_0x930ac6){stats[_0x1efa('0x3c')][_0x1efa('0x3d')]({'name':_0x930ac6['code'],'message':_0x930ac6[_0x1efa('0x3a')],'row':_0x4d5609});}function handleQuery(_0x49c733){logger[_0x1efa('0x37')](_0x49c733);return db['sequelize'][_0x1efa('0x3e')](_0x49c733)[_0x1efa('0x3f')](function(_0x3862e3){results[_0x1efa('0x3d')](_0x3862e3);})['catch'](function(_0x19cd05){logger['error'](_0x19cd05[_0x1efa('0x3a')]);});}function main(_0x52fe09,_0x2b430d,_0x46df76,_0x527292){logger['info'](_0x1efa('0x40'),_0x52fe09,JSON[_0x1efa('0x41')](_0x2b430d));process[_0x1efa('0x42')](_0x1efa('0x43'));var _0x3333a0=_0x2b430d[_0x1efa('0x44')];var _0x178bab=_0x2b430d['socket_timestamp'];var _0x4c642d=path[_0x1efa('0xe')](config[_0x1efa('0x45')],_0x1efa('0x46'),_0x178bab+_0x1efa('0x47'));var _0x51c0ac=_[_0x1efa('0x30')](_0x3333a0)[_0x1efa('0xe')]();logger[_0x1efa('0x37')](_0x1efa('0x48'),_0x51c0ac);fs[_0x1efa('0x49')](_0x4c642d,_0x51c0ac+'\x0a');Papa[_0x1efa('0x4a')](fs[_0x1efa('0x4b')](_0x52fe09),{'header':!![],'skipEmptyLines':!![],'step':function(_0x1fe81a,_0x339e2f){try{for(var _0x3ac9ab=0x0,_0x46a998=[];_0x3ac9ab<_0x1fe81a[_0x1efa('0x4c')][_0x1efa('0x4d')];_0x3ac9ab++){stats[_0x1efa('0x4e')]+=0x1;if(_0x1fe81a[_0x1efa('0x3c')][_0x3ac9ab]){handleError(_0x1fe81a[_0x1efa('0x4c')][_0x3ac9ab],_0x1fe81a[_0x1efa('0x3c')][_0x3ac9ab]);}else{var _0x3f7e46=[];for(var _0x479975 in _0x3333a0){if(_0x3333a0[_0x1efa('0x4f')](_0x479975)){if(_0x1fe81a[_0x1efa('0x4c')][_0x3ac9ab][_0x3333a0[_0x479975]]){var _0x4668f4=_[_0x1efa('0x50')](_0x1fe81a['data'][_0x3ac9ab][_0x3333a0[_0x479975]][_0x1efa('0x51')](/"/g,'\x27'));switch(_0x479975){case _0x1efa('0x1d'):var _0x6acf11=moment(_0x4668f4,_0x1efa('0x9'),!![]);if(_0x6acf11[_0x1efa('0x52')]()){_0x46a998[_0x1efa('0x3d')]('\x22'+_0x4668f4+'\x22');}else{_0x3f7e46[_0x1efa('0x3d')]('scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)');}break;case'priority':var _0x2ef991=parseInt(_0x4668f4);_0x4668f4=_[_0x1efa('0x53')](_0x2ef991)||_0x2ef991<0x0||_0x2ef991>0x4?_0x527292?0x3:0x2:_0x2ef991;_0x46a998[_0x1efa('0x3d')]('\x22'+_0x4668f4+'\x22');break;case'UserId':var _0x17f1b4=parseInt(_0x4668f4);if(_['isNumber'](_0x17f1b4)&&_[_0x1efa('0x54')](_0x46df76,_0x17f1b4)){_0x46a998[_0x1efa('0x3d')]('\x22'+_0x17f1b4+'\x22');}else{_0x3f7e46[_0x1efa('0x3d')](_0x1efa('0x55'));}break;case'email':if(isEmail(_0x4668f4)){_0x46a998[_0x1efa('0x3d')]('\x22'+_0x4668f4+'\x22');}else{_0x3f7e46[_0x1efa('0x3d')]('email\x20wrong\x20format');}break;case _0x1efa('0x56'):var _0x9ddc6b=moment(_0x4668f4,_0x1efa('0x57'),!![]);if(_0x9ddc6b['isValid']()){_0x46a998[_0x1efa('0x3d')]('\x22'+_0x4668f4+'\x22');}else{_0x3f7e46[_0x1efa('0x3d')]('dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)');}break;default:_0x46a998[_0x1efa('0x3d')]('\x22'+_0x4668f4+'\x22');}}else{switch(_0x479975){case'firstName':case _0x1efa('0x1c'):_0x3f7e46[_0x1efa('0x3d')](_0x479975+'\x20not\x20specified');break;default:_0x46a998['push']('\x22\x22');}}}}if(_0x3f7e46[_0x1efa('0x4d')]){handleError(_0x1fe81a[_0x1efa('0x4c')][_0x3ac9ab],{'code':'SystemRow','message':_0x3f7e46['join']()});}else{fs[_0x1efa('0x58')](_0x4c642d,_0x46a998[_0x1efa('0xe')]()+'\x0a');}_0x46a998=[];}if(!(stats['rows']%0xc8)){socket[_0x1efa('0x59')](_0x1efa('0x5a')+_0x178bab,stats);stats[_0x1efa('0x3c')]=[];}}if(stopped){logger['info'](_0x1efa('0x5b'));_0x339e2f['abort']();}}catch(_0x27112b){handleError(_0x1fe81a[_0x1efa('0x4c')][_0x3ac9ab],{'code':_0x1efa('0x5c'),'message':_0x27112b[_0x1efa('0x3a')]});logger[_0x1efa('0x39')](_0x1efa('0x5d'),_0x27112b[_0x1efa('0x3a')]);}},'complete':function(){try{var _0x1fa371=[];var _0x561670=_0x1efa('0x26');if(_0x2b430d['duplicates']&&_0x2b430d[_0x1efa('0x5e')]['length']){_0x561670='cm_contacts_'+_0x178bab;_0x1fa371['push'](_0x1efa('0x5f')+_0x561670+_0x1efa('0x60'));}var _0x260530=util[_0x1efa('0x61')](_0x1efa('0x62'),_0x4c642d,_0x561670,_0x51c0ac,_0x2b430d[_0x1efa('0x1f')],_0x2b430d[_0x1efa('0x31')]||null,NOW,NOW);if(_[_0x1efa('0x63')](_0x3333a0[_0x1efa('0x1d')])){_0x260530+=',\x20scheduledAt\x20=\x20NOW()';}_0x1fa371[_0x1efa('0x3d')](_0x260530);if(_0x2b430d[_0x1efa('0x5e')]&&_0x2b430d[_0x1efa('0x5e')][_0x1efa('0x4d')]){_0x1fa371[_0x1efa('0x3d')](insertCmContact(_0x2b430d['ListId'],_0x561670,_0x2b430d[_0x1efa('0x5e')],_0x3333a0));_0x1fa371[_0x1efa('0x3d')](_0x1efa('0x64')+_0x561670+';');}_0x1fa371[_0x1efa('0x3d')](insertCmHopper(_0x2b430d[_0x1efa('0x1f')],_0x1efa('0x65'),_0x1efa('0x66'),_0x1efa('0x67'),_0x527292));_0x1fa371['push'](insertCmHopperBlack(_0x2b430d[_0x1efa('0x1f')],_0x1efa('0x68'),_0x1efa('0x66'),'VoiceQueueId'));_0x1fa371[_0x1efa('0x3d')](insertCmHopper(_0x2b430d[_0x1efa('0x1f')],_0x1efa('0x69'),_0x1efa('0x6a'),_0x1efa('0x6b'),_0x527292));_0x1fa371['push'](insertCmHopperBlack(_0x2b430d[_0x1efa('0x1f')],_0x1efa('0x6c'),_0x1efa('0x6a'),'CampaignId'));BPromise['each'](_0x1fa371,handleQuery)['then'](function(_0x50b370){stats[_0x1efa('0x6d')]=!![];stats[_0x1efa('0x6e')]=_0x2b430d[_0x1efa('0x5e')]&&_0x2b430d[_0x1efa('0x5e')][_0x1efa('0x4d')]?results[0x2][_0x1efa('0x6e')]:results[0x0][_0x1efa('0x6e')];socket[_0x1efa('0x59')](_0x1efa('0x5a')+_0x178bab,stats);fs[_0x1efa('0x6f')](_0x52fe09);fs['unlink'](_0x4c642d);process[_0x1efa('0x3b')](0x0);})[_0x1efa('0x70')](function(_0x1615eb){logger[_0x1efa('0x39')](_0x1615eb[_0x1efa('0x3a')]);process[_0x1efa('0x3b')](0x1);});}catch(_0x373d2b){logger[_0x1efa('0x39')](_0x1efa('0x71'),_0x373d2b[_0x1efa('0x3a')]);process[_0x1efa('0x3b')](0x1);}},'error':function(_0x1500f3,_0x301685,_0x3b8060,_0x354ea9){throw new Error(_0x354ea9);}});}function validate(){if(process[_0x1efa('0x72')]&&process[_0x1efa('0x72')][_0x1efa('0x4d')]<0x4){throw new Error(_0x1efa('0x73'));}var _0xe5b0d1=path['join'](config[_0x1efa('0x45')],_0x1efa('0x46'),process[_0x1efa('0x72')][0x2]);if(!fs['existsSync'](_0xe5b0d1)){throw new Error(_0x1efa('0x74'));}var _0x210c93={};try{_0x210c93=JSON[_0x1efa('0x4a')](process[_0x1efa('0x72')][0x3]);if(!_0x210c93['binding']){throw new Error(_0x1efa('0x75'));}if(!_0x210c93[_0x1efa('0x44')][_0x1efa('0x1c')]){throw new Error('phone\x20is\x20mandatory');}if(!_0x210c93[_0x1efa('0x44')][_0x1efa('0x76')]){throw new Error('firstName\x20is\x20mandatory');}var _0x154394=0x0;if(_0x210c93[_0x1efa('0x44')]['UserId']){_0x154394=0x1;}if(!_0x210c93[_0x1efa('0x1f')]){throw new Error(_0x1efa('0x77'));}}catch(_0x3ac45b){throw new Error(_0x1efa('0x78'));}var _0x40c3df=[];try{_0x40c3df=_[_0x1efa('0x79')](JSON['parse'](process[_0x1efa('0x72')][0x4]),'id');}catch(_0x57290c){logger['info']('No\x20agent\x20available');}main(_0xe5b0d1,_0x210c93,_0x40c3df,_0x154394);}validate();process['on'](_0x1efa('0x7a'),handleStop);process['on'](_0x1efa('0x7b'),handleUncaughtException);
\ No newline at end of file
+var _0x29ce=['cm_contacts.id','cm_contacts.createdAt','cm_contacts.priority','insert','into','cm_hopper','fromQuery','scheduledat','ContactId','ListId','createdAt','updatedAt','priority','UserId','fields','.CmListId\x20=\x20?','\x22always\x22','cm_contacts.ListId','cm_contacts.updatedAt','cm_hopper_black','cm_contacts','cm_contacts.ListId\x20=\x20','.CmListId','cm_contacts.createdAt\x20=\x20?','ListId\x20=\x20?','\x20=\x20?','toString','keys',')\x20NOT\x20IN\x20?','id\x20IN\x20?','MIN(id)','group','info','Received\x20SIGINT','error','message','exit','errors','push','code','spread','main','stringify','send','binding','root','.csv','writeFileSync','parse','data','hasOwnProperty','replace','scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)','isNumber','includes','agent\x20not\x20exists','email','email\x20wrong\x20format','dateOfBirth','YYYY-MM-DD','isValid','dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)','\x20not\x20specified','length','appendFileSync','rows','emit','contact:import:','abort','duplicates','cm_contacts_','CREATE\x20TABLE\x20','\x20LIKE\x20cm_contacts;','format','LOAD\x20DATA\x20LOCAL\x20INFILE\x20\x27%s\x27\x20INTO\x20TABLE\x20%s\x20CHARACTER\x20SET\x20UTF8\x20FIELDS\x20TERMINATED\x20BY\x20\x27,\x27\x20ENCLOSED\x20BY\x20\x27\x22\x27\x20LINES\x20TERMINATED\x20BY\x20\x27\x0a\x27\x20IGNORE\x201\x20ROWS\x20(%s)\x20SET\x20id\x20=\x20NULL,\x20ListId\x20=\x20%s,\x20CompanyId\x20=\x20%s,\x20createdAt\x20=\x20\x27%s\x27,\x20updatedAt\x20=\x20\x27%s\x27','CompanyId','isNil',',\x20scheduledAt\x20=\x20NOW()','DROP\x20TABLE\x20','voice_queues','VoiceQueueId','campaigns_has_cm_lists','CampaignId','campaigns_has_cm_blacklists','campaigns','each','then','finish','affectedRows','unlink','catch','complete','argv','server/files/tmp','existsSync','file\x20doesn\x27t\x20exists','binding\x20doesn\x27t\x20exists','phone\x20is\x20mandatory','firstName','firstName\x20is\x20mandatory','body\x20id\x20mandatory','map','No\x20agent\x20available','SIGINT','uncaughtException','path','lodash','papaparse','bluebird','squel','../../../mysqldb','../../../config/environment','../../../config/logger','import','socket.io-emitter','localhost','YYYY-MM-DD\x20HH:mm:ss','test','select','field','phone','from','join','.id\x20=\x20','\x20=\x20','where','cm_contacts.phone','cm_contacts.scheduledat'];(function(_0x3d72ac,_0x3d3061){var _0x57d3cb=function(_0x12e58d){while(--_0x12e58d){_0x3d72ac['push'](_0x3d72ac['shift']());}};_0x57d3cb(++_0x3d3061);}(_0x29ce,0x1e9));var _0xe29c=function(_0x286695,_0x48bba1){_0x286695=_0x286695-0x0;var _0x354c55=_0x29ce[_0x286695];return _0x354c55;};'use strict';var fs=require('fs');var path=require(_0xe29c('0x0'));var _=require(_0xe29c('0x1'));var Papa=require(_0xe29c('0x2'));var util=require('util');var BPromise=require(_0xe29c('0x3'));var moment=require('moment');var squel=require(_0xe29c('0x4'));var db=require(_0xe29c('0x5'))['db'];var config=require(_0xe29c('0x6'));var logger=require(_0xe29c('0x7'))(_0xe29c('0x8'));var socket=require(_0xe29c('0x9'))({'host':_0xe29c('0xa'),'port':0x18eb});var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()['format'](_0xe29c('0xb'));function isEmail(_0x3ca995){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))*$/[_0xe29c('0xc')](_0x3ca995);}function selectNotIn(_0x1cd5b4,_0x320e08,_0x57b02b,_0x180963,_0x290251){return squel[_0xe29c('0xd')]()[_0xe29c('0xe')](_0xe29c('0xf'))[_0xe29c('0x10')](_0x180963)[_0xe29c('0x11')](_0x320e08,null,_0x320e08+_0xe29c('0x12')+_0x180963+'.'+_0x57b02b)['where'](_0x180963+'.'+_0x57b02b+_0xe29c('0x13')+_0x1cd5b4+'.'+_0x57b02b)[_0xe29c('0x14')](_0x320e08+'.dialCheckDuplicateType\x20IN\x20('+_0x290251[_0xe29c('0x11')]()+')');}function insertCmHopper(_0x4828a4,_0x3e3b41,_0x361c15,_0x3b41b5,_0xcf8069){var _0xd8eed4=[_0xe29c('0x15'),_0xe29c('0x16'),_0xe29c('0x17'),'cm_contacts.ListId',_0x3e3b41+'.'+_0x3b41b5,_0xe29c('0x18'),'cm_contacts.updatedAt',_0xe29c('0x19'),'cm_contacts.UserId','\x22'+_0xcf8069+'\x22'];return squel[_0xe29c('0x1a')]()[_0xe29c('0x1b')](_0xe29c('0x1c'))[_0xe29c('0x1d')]([_0xe29c('0xf'),_0xe29c('0x1e'),_0xe29c('0x1f'),_0xe29c('0x20'),_0x3b41b5,_0xe29c('0x21'),_0xe29c('0x22'),_0xe29c('0x23'),_0xe29c('0x24'),'recallme'],squel[_0xe29c('0xd')]()[_0xe29c('0x25')](_0xd8eed4)[_0xe29c('0x10')](_0x3e3b41)[_0xe29c('0x11')]('cm_contacts',null,'cm_contacts.ListId\x20=\x20'+_0x3e3b41+'.CmListId')['join'](_0x361c15,null,_0x361c15+_0xe29c('0x12')+_0x3e3b41+'.'+_0x3b41b5)[_0xe29c('0x14')](_0x3e3b41+_0xe29c('0x26'),_0x4828a4)['where']('cm_contacts.createdAt\x20=\x20?',NOW)[_0xe29c('0x14')]('cm_contacts.phone\x20NOT\x20IN\x20(?)',selectNotIn(_0x3e3b41,_0x361c15,_0x3b41b5,_0xe29c('0x1c'),[_0xe29c('0x27'),'\x22onlyIfOpen\x22']))[_0xe29c('0x14')]('cm_contacts.phone\x20NOT\x20IN\x20(?)',selectNotIn(_0x3e3b41,_0x361c15,_0x3b41b5,_0xe29c('0x1c'),[_0xe29c('0x27')])))['toString']();}function insertCmHopperBlack(_0x102aef,_0x4612bb,_0x4d4135,_0x3dea12){var _0x28ea74=['cm_contacts.phone',_0xe29c('0x17'),_0xe29c('0x28'),_0x4612bb+'.'+_0x3dea12,_0xe29c('0x18'),_0xe29c('0x29')];return squel[_0xe29c('0x1a')]()[_0xe29c('0x1b')](_0xe29c('0x2a'))['fromQuery']([_0xe29c('0xf'),'ContactId','ListId',_0x3dea12,_0xe29c('0x21'),_0xe29c('0x22')],squel[_0xe29c('0xd')]()[_0xe29c('0x25')](_0x28ea74)[_0xe29c('0x10')](_0x4612bb)[_0xe29c('0x11')](_0xe29c('0x2b'),null,_0xe29c('0x2c')+_0x4612bb+_0xe29c('0x2d'))[_0xe29c('0x11')](_0x4d4135,null,_0x4d4135+_0xe29c('0x12')+_0x4612bb+'.'+_0x3dea12)[_0xe29c('0x14')](_0x4612bb+_0xe29c('0x26'),_0x102aef)[_0xe29c('0x14')](_0xe29c('0x2e'),NOW)[_0xe29c('0x14')]('cm_contacts.phone\x20NOT\x20IN\x20(?)',squel[_0xe29c('0xd')]()[_0xe29c('0xe')](_0xe29c('0xf'))['from'](_0xe29c('0x2a'))[_0xe29c('0x14')](_0xe29c('0x2f'),_0x102aef)[_0xe29c('0x14')](_0x3dea12+_0xe29c('0x30'),_0x4612bb+'.'+_0x3dea12)))[_0xe29c('0x31')]();}function insertCmContact(_0x92152c,_0x346e89,_0x29157f,_0x47743c){var _0x4b1227=_['concat'](_[_0xe29c('0x32')](_0x47743c),[_0xe29c('0x20'),'CompanyId','createdAt',_0xe29c('0x22')]);return squel[_0xe29c('0x1a')]()[_0xe29c('0x1b')](_0xe29c('0x2b'))[_0xe29c('0x1d')](_0x4b1227,squel[_0xe29c('0xd')]()[_0xe29c('0x25')](_0x4b1227)[_0xe29c('0x10')](_0x346e89)[_0xe29c('0x14')]('('+_0x29157f[_0xe29c('0x11')](',')+_0xe29c('0x33'),squel[_0xe29c('0xd')]()[_0xe29c('0x25')](_0x29157f)['from'](_0xe29c('0x2b'))[_0xe29c('0x14')](_0xe29c('0x2f'),_0x92152c))[_0xe29c('0x14')](_0xe29c('0x34'),squel['select']()[_0xe29c('0xe')](_0xe29c('0x35'),'min_id')['from'](_0x346e89)[_0xe29c('0x36')](_0x29157f[_0xe29c('0x11')](','))))[_0xe29c('0x31')]();}function handleStop(){logger[_0xe29c('0x37')](_0xe29c('0x38'));stopped=!![];}function handleUncaughtException(_0x584cfa){logger[_0xe29c('0x39')](_0x584cfa[_0xe29c('0x3a')]);process[_0xe29c('0x3b')](0x1);}function handleError(_0x421e1b,_0x11db52){stats[_0xe29c('0x3c')][_0xe29c('0x3d')]({'name':_0x11db52[_0xe29c('0x3e')],'message':_0x11db52[_0xe29c('0x3a')],'row':_0x421e1b});}function handleQuery(_0x18e860){logger['info'](_0x18e860);return db['sequelize']['query'](_0x18e860)[_0xe29c('0x3f')](function(_0x187b79){results['push'](_0x187b79);})['catch'](function(_0x2d449e){logger[_0xe29c('0x39')](_0x2d449e[_0xe29c('0x3a')]);});}function main(_0x5e1b81,_0x1aa808,_0x3d303b,_0x2060ea){logger[_0xe29c('0x37')](_0xe29c('0x40'),_0x5e1b81,JSON[_0xe29c('0x41')](_0x1aa808));process[_0xe29c('0x42')]('start');var _0x59b727=_0x1aa808[_0xe29c('0x43')];var _0x424f58=_0x1aa808['socket_timestamp'];var _0x3cdfc1=path['join'](config[_0xe29c('0x44')],'server/files/tmp',_0x424f58+_0xe29c('0x45'));var _0x54aafa=_['keys'](_0x59b727)[_0xe29c('0x11')]();logger[_0xe29c('0x37')]('header',_0x54aafa);fs[_0xe29c('0x46')](_0x3cdfc1,_0x54aafa+'\x0a');Papa[_0xe29c('0x47')](fs['createReadStream'](_0x5e1b81),{'header':!![],'skipEmptyLines':!![],'step':function(_0x96855e,_0x11c13b){try{for(var _0x1bbb87=0x0,_0x1e0c35=[];_0x1bbb87<_0x96855e[_0xe29c('0x48')]['length'];_0x1bbb87++){stats['rows']+=0x1;if(_0x96855e[_0xe29c('0x3c')][_0x1bbb87]){handleError(_0x96855e[_0xe29c('0x48')][_0x1bbb87],_0x96855e[_0xe29c('0x3c')][_0x1bbb87]);}else{var _0x462a28=[];for(var _0x43326b in _0x59b727){if(_0x59b727[_0xe29c('0x49')](_0x43326b)){if(_0x96855e[_0xe29c('0x48')][_0x1bbb87][_0x59b727[_0x43326b]]){var _0x213adf=_['trim'](_0x96855e[_0xe29c('0x48')][_0x1bbb87][_0x59b727[_0x43326b]][_0xe29c('0x4a')](/"/g,'\x27'));switch(_0x43326b){case'scheduledat':var _0x51ccd0=moment(_0x213adf,'YYYY-MM-DD\x20HH:mm:ss',!![]);if(_0x51ccd0['isValid']()){_0x1e0c35[_0xe29c('0x3d')]('\x22'+_0x213adf+'\x22');}else{_0x462a28['push'](_0xe29c('0x4b'));}break;case'priority':var _0x523a05=parseInt(_0x213adf);_0x213adf=_['isNaN'](_0x523a05)||_0x523a05<0x0||_0x523a05>0x4?_0x2060ea?0x3:0x2:_0x523a05;_0x1e0c35['push']('\x22'+_0x213adf+'\x22');break;case _0xe29c('0x24'):var _0x4197a9=parseInt(_0x213adf);if(_[_0xe29c('0x4c')](_0x4197a9)&&_[_0xe29c('0x4d')](_0x3d303b,_0x4197a9)){_0x1e0c35[_0xe29c('0x3d')]('\x22'+_0x4197a9+'\x22');}else{_0x462a28[_0xe29c('0x3d')](_0xe29c('0x4e'));}break;case _0xe29c('0x4f'):if(isEmail(_0x213adf)){_0x1e0c35['push']('\x22'+_0x213adf+'\x22');}else{_0x462a28[_0xe29c('0x3d')](_0xe29c('0x50'));}break;case _0xe29c('0x51'):var _0x2eba40=moment(_0x213adf,_0xe29c('0x52'),!![]);if(_0x2eba40[_0xe29c('0x53')]()){_0x1e0c35[_0xe29c('0x3d')]('\x22'+_0x213adf+'\x22');}else{_0x462a28[_0xe29c('0x3d')](_0xe29c('0x54'));}break;default:_0x1e0c35[_0xe29c('0x3d')]('\x22'+_0x213adf+'\x22');}}else{switch(_0x43326b){case'firstName':case _0xe29c('0xf'):_0x462a28[_0xe29c('0x3d')](_0x43326b+_0xe29c('0x55'));break;default:_0x1e0c35[_0xe29c('0x3d')]('\x22\x22');}}}}if(_0x462a28[_0xe29c('0x56')]){handleError(_0x96855e[_0xe29c('0x48')][_0x1bbb87],{'code':'SystemRow','message':_0x462a28['join']()});}else{fs[_0xe29c('0x57')](_0x3cdfc1,_0x1e0c35[_0xe29c('0x11')]()+'\x0a');}_0x1e0c35=[];}if(!(stats[_0xe29c('0x58')]%0xc8)){socket[_0xe29c('0x59')](_0xe29c('0x5a')+_0x424f58,stats);stats[_0xe29c('0x3c')]=[];}}if(stopped){logger[_0xe29c('0x37')]('Abort\x20parser');_0x11c13b[_0xe29c('0x5b')]();}}catch(_0x30bec3){handleError(_0x96855e[_0xe29c('0x48')][_0x1bbb87],{'code':'SystemError','message':_0x30bec3[_0xe29c('0x3a')]});logger[_0xe29c('0x39')]('step',_0x30bec3[_0xe29c('0x3a')]);}},'complete':function(){try{var _0x502747=[];var _0x2cb7ac=_0xe29c('0x2b');if(_0x1aa808['duplicates']&&_0x1aa808[_0xe29c('0x5c')][_0xe29c('0x56')]){_0x2cb7ac=_0xe29c('0x5d')+_0x424f58;_0x502747[_0xe29c('0x3d')](_0xe29c('0x5e')+_0x2cb7ac+_0xe29c('0x5f'));}var _0x370ac5=util[_0xe29c('0x60')](_0xe29c('0x61'),_0x3cdfc1,_0x2cb7ac,_0x54aafa,_0x1aa808[_0xe29c('0x20')],_0x1aa808[_0xe29c('0x62')]||null,NOW,NOW);if(_[_0xe29c('0x63')](_0x59b727[_0xe29c('0x1e')])){_0x370ac5+=_0xe29c('0x64');}_0x502747[_0xe29c('0x3d')](_0x370ac5);if(_0x1aa808[_0xe29c('0x5c')]&&_0x1aa808[_0xe29c('0x5c')][_0xe29c('0x56')]){_0x502747['push'](insertCmContact(_0x1aa808[_0xe29c('0x20')],_0x2cb7ac,_0x1aa808[_0xe29c('0x5c')],_0x59b727));_0x502747[_0xe29c('0x3d')](_0xe29c('0x65')+_0x2cb7ac+';');}_0x502747[_0xe29c('0x3d')](insertCmHopper(_0x1aa808[_0xe29c('0x20')],'voice_queues_has_cm_lists',_0xe29c('0x66'),_0xe29c('0x67'),_0x2060ea));_0x502747['push'](insertCmHopperBlack(_0x1aa808[_0xe29c('0x20')],'voice_queues_has_cm_blacklists','voice_queues','VoiceQueueId'));_0x502747['push'](insertCmHopper(_0x1aa808[_0xe29c('0x20')],_0xe29c('0x68'),'campaigns',_0xe29c('0x69'),_0x2060ea));_0x502747[_0xe29c('0x3d')](insertCmHopperBlack(_0x1aa808[_0xe29c('0x20')],_0xe29c('0x6a'),_0xe29c('0x6b'),_0xe29c('0x69')));BPromise[_0xe29c('0x6c')](_0x502747,handleQuery)[_0xe29c('0x6d')](function(_0x5d4c7f){stats[_0xe29c('0x6e')]=!![];stats[_0xe29c('0x6f')]=_0x1aa808[_0xe29c('0x5c')]&&_0x1aa808[_0xe29c('0x5c')][_0xe29c('0x56')]?results[0x2][_0xe29c('0x6f')]:results[0x0][_0xe29c('0x6f')];socket['emit'](_0xe29c('0x5a')+_0x424f58,stats);fs[_0xe29c('0x70')](_0x5e1b81);fs['unlink'](_0x3cdfc1);process[_0xe29c('0x3b')](0x0);})[_0xe29c('0x71')](function(_0x35ebc7){logger[_0xe29c('0x39')](_0x35ebc7[_0xe29c('0x3a')]);process[_0xe29c('0x3b')](0x1);});}catch(_0x588a84){logger['error'](_0xe29c('0x72'),_0x588a84[_0xe29c('0x3a')]);process[_0xe29c('0x3b')](0x1);}},'error':function(_0x5ec97b,_0xfd6a61,_0x46ac4f,_0x578c18){throw new Error(_0x578c18);}});}function validate(){if(process['argv']&&process[_0xe29c('0x73')][_0xe29c('0x56')]<0x4){throw new Error('arguments\x20<filename>\x20<parameters>\x20<agents>');}var _0x1e667d=path[_0xe29c('0x11')](config['root'],_0xe29c('0x74'),process[_0xe29c('0x73')][0x2]);if(!fs[_0xe29c('0x75')](_0x1e667d)){throw new Error(_0xe29c('0x76'));}var _0x24c6cd={};try{_0x24c6cd=JSON[_0xe29c('0x47')](process['argv'][0x3]);if(!_0x24c6cd[_0xe29c('0x43')]){throw new Error(_0xe29c('0x77'));}if(!_0x24c6cd[_0xe29c('0x43')][_0xe29c('0xf')]){throw new Error(_0xe29c('0x78'));}if(!_0x24c6cd[_0xe29c('0x43')][_0xe29c('0x79')]){throw new Error(_0xe29c('0x7a'));}var _0x4533f9=0x0;if(_0x24c6cd['binding'][_0xe29c('0x24')]){_0x4533f9=0x1;}if(!_0x24c6cd[_0xe29c('0x20')]){throw new Error('ListId\x20is\x20mandatory');}}catch(_0x454cc4){throw new Error(_0xe29c('0x7b'));}var _0x369202=[];try{_0x369202=_[_0xe29c('0x7c')](JSON[_0xe29c('0x47')](process[_0xe29c('0x73')][0x4]),'id');}catch(_0x43d860){logger[_0xe29c('0x37')](_0xe29c('0x7d'));}main(_0x1e667d,_0x24c6cd,_0x369202,_0x4533f9);}validate();process['on'](_0xe29c('0x7e'),handleStop);process['on'](_0xe29c('0x7f'),handleUncaughtException);
\ No newline at end of file
index 0d86046..e057707 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x70e0=['Queue','uniqueid','Date','agentcalledAt','***\x20Agent\x20Info\x20***','Agent\x20Name','destcalleridname','***\x20Time\x20Info\x20***','Agent\x20Ring','Agent\x20Connect','agentconnectAt','Agent\x20Complete','Hold\x20Time','talktime','Member\x20Name','membername','UniqueId','answertime','Complete\x20Time','getSubjects','[xCALLY\x20Ticket]','toLowerCase','voice','push','queue','outbound','string','Outbound\x20Call','variable','destcalleridnum','inbound','***\x20Call\x20Info\x20***','keyValue','Caller\x20Number','Caller\x20Name','Call\x20To'];(function(_0x174ef5,_0x256e8e){var _0x1cc379=function(_0x3eafcf){while(--_0x3eafcf){_0x174ef5['push'](_0x174ef5['shift']());}};_0x1cc379(++_0x256e8e);}(_0x70e0,0x17b));var _0x070e=function(_0x32e19f,_0xac314d){_0x32e19f=_0x32e19f-0x0;var _0x3eda03=_0x70e0[_0x32e19f];return _0x3eda03;};'use strict';exports[_0x070e('0x0')]=function(_0x331547,_0x198c2e){var _0x4d95bb=[{'type':'string','content':_0x070e('0x1'),'variableName':null}];switch(_0x331547[_0x070e('0x2')]()){case _0x070e('0x3'):switch(_0x198c2e[_0x070e('0x2')]()){case'inbound':_0x4d95bb[_0x070e('0x4')]({'type':'variable','content':'','variableName':_0x070e('0x5')});_0x4d95bb['push']({'type':'variable','content':'','variableName':'calleridnum'});break;case _0x070e('0x6'):_0x4d95bb[_0x070e('0x4')]({'type':_0x070e('0x7'),'content':_0x070e('0x8'),'variableName':null});_0x4d95bb[_0x070e('0x4')]({'type':_0x070e('0x9'),'content':'','variableName':_0x070e('0xa')});break;}}return _0x4d95bb;};exports['getDescriptions']=function(_0x49b2fb,_0x50f4eb){var _0x2e3e5e=[];switch(_0x49b2fb[_0x070e('0x2')]()){case _0x070e('0x3'):switch(_0x50f4eb[_0x070e('0x2')]()){case _0x070e('0xb'):_0x2e3e5e=[{'type':_0x070e('0x7'),'content':_0x070e('0xc'),'key':null,'keyType':null,'variableName':null},{'type':_0x070e('0xd'),'content':'','key':_0x070e('0xe'),'keyType':_0x070e('0x9'),'variableName':'calleridnum'},{'type':'keyValue','content':'','key':_0x070e('0xf'),'keyType':'variable','variableName':'calleridname'},{'type':'keyValue','content':'','key':_0x070e('0x10'),'keyType':_0x070e('0x9'),'variableName':'destexten'},{'type':'keyValue','content':'','key':_0x070e('0x11'),'keyType':_0x070e('0x9'),'variableName':_0x070e('0x5')},{'type':_0x070e('0xd'),'content':'','key':'UniqueId','keyType':'variable','variableName':_0x070e('0x12')},{'type':_0x070e('0xd'),'content':'','key':_0x070e('0x13'),'keyType':_0x070e('0x9'),'variableName':_0x070e('0x14')},{'type':'string','content':_0x070e('0x15'),'key':null,'keyType':null,'variableName':null},{'type':_0x070e('0xd'),'content':'','key':_0x070e('0x16'),'keyType':_0x070e('0x9'),'variableName':_0x070e('0x17')},{'type':'keyValue','content':'','key':'Agent\x20Number','keyType':'variable','variableName':_0x070e('0xa')},{'type':_0x070e('0x7'),'content':_0x070e('0x18'),'key':null,'keyType':null,'variableName':null},{'type':'keyValue','content':'','key':_0x070e('0x19'),'keyType':'variable','variableName':_0x070e('0x14')},{'type':_0x070e('0xd'),'content':'','key':_0x070e('0x1a'),'keyType':_0x070e('0x9'),'variableName':_0x070e('0x1b')},{'type':_0x070e('0xd'),'content':'','key':_0x070e('0x1c'),'keyType':_0x070e('0x9'),'variableName':'agentcompleteAt'},{'type':_0x070e('0xd'),'content':'','key':_0x070e('0x1d'),'keyType':_0x070e('0x9'),'variableName':'holdtime'},{'type':_0x070e('0xd'),'content':'','key':'Talk\x20Time','keyType':'variable','variableName':_0x070e('0x1e')}];break;case _0x070e('0x6'):_0x2e3e5e=[{'type':_0x070e('0x7'),'content':_0x070e('0xc'),'variableName':null},{'type':_0x070e('0xd'),'content':'','key':'Called\x20Number','keyType':_0x070e('0x9'),'keyContent':'','variableName':_0x070e('0xa')},{'type':_0x070e('0xd'),'content':'','key':_0x070e('0x1f'),'keyType':_0x070e('0x9'),'keyContent':'','variableName':_0x070e('0x20')},{'type':_0x070e('0xd'),'content':'','key':_0x070e('0x21'),'keyType':'variable','keyContent':'','variableName':_0x070e('0x12')},{'type':_0x070e('0xd'),'content':'','key':_0x070e('0x13'),'keyType':'variable','keyContent':'','variableName':'starttime'},{'type':_0x070e('0x7'),'content':_0x070e('0x18')},{'type':_0x070e('0xd'),'content':'','key':'Answer\x20Time','keyType':_0x070e('0x9'),'keyContent':'','variableName':_0x070e('0x22')},{'type':_0x070e('0xd'),'content':'','key':_0x070e('0x23'),'keyType':'variable','keyContent':'','variableName':'endtime'}];break;}}return _0x2e3e5e;};
\ No newline at end of file
+var _0xb821=['Member\x20Name','membername','Date','starttime','Answer\x20Time','answertime','endtime','[xCALLY\x20Ticket]','toLowerCase','inbound','push','variable','calleridnum','outbound','string','Outbound\x20Call','getDescriptions','voice','***\x20Call\x20Info\x20***','keyValue','Caller\x20Number','calleridname','Call\x20To','queue','UniqueId','uniqueid','***\x20Agent\x20Info\x20***','destcalleridname','Agent\x20Number','***\x20Time\x20Info\x20***','Agent\x20Ring','agentcalledAt','agentconnectAt','Agent\x20Complete','agentcompleteAt','Hold\x20Time','Talk\x20Time','talktime','Called\x20Number','destcalleridnum'];(function(_0x231e16,_0x67347b){var _0x570a7c=function(_0x2c35b4){while(--_0x2c35b4){_0x231e16['push'](_0x231e16['shift']());}};_0x570a7c(++_0x67347b);}(_0xb821,0xa7));var _0x1b82=function(_0x3efff1,_0x23e506){_0x3efff1=_0x3efff1-0x0;var _0xbfe954=_0xb821[_0x3efff1];return _0xbfe954;};'use strict';exports['getSubjects']=function(_0x30b4a5,_0x4f6190){var _0x5924c6=[{'type':'string','content':_0x1b82('0x0'),'variableName':null}];switch(_0x30b4a5['toLowerCase']()){case'voice':switch(_0x4f6190[_0x1b82('0x1')]()){case _0x1b82('0x2'):_0x5924c6[_0x1b82('0x3')]({'type':_0x1b82('0x4'),'content':'','variableName':'queue'});_0x5924c6[_0x1b82('0x3')]({'type':_0x1b82('0x4'),'content':'','variableName':_0x1b82('0x5')});break;case _0x1b82('0x6'):_0x5924c6[_0x1b82('0x3')]({'type':_0x1b82('0x7'),'content':_0x1b82('0x8'),'variableName':null});_0x5924c6[_0x1b82('0x3')]({'type':_0x1b82('0x4'),'content':'','variableName':'destcalleridnum'});break;}}return _0x5924c6;};exports[_0x1b82('0x9')]=function(_0x30c6ee,_0x44dfd4){var _0x14c57a=[];switch(_0x30c6ee[_0x1b82('0x1')]()){case _0x1b82('0xa'):switch(_0x44dfd4[_0x1b82('0x1')]()){case _0x1b82('0x2'):_0x14c57a=[{'type':'string','content':_0x1b82('0xb'),'key':null,'keyType':null,'variableName':null},{'type':_0x1b82('0xc'),'content':'','key':_0x1b82('0xd'),'keyType':_0x1b82('0x4'),'variableName':'calleridnum'},{'type':_0x1b82('0xc'),'content':'','key':'Caller\x20Name','keyType':'variable','variableName':_0x1b82('0xe')},{'type':'keyValue','content':'','key':_0x1b82('0xf'),'keyType':_0x1b82('0x4'),'variableName':'destexten'},{'type':_0x1b82('0xc'),'content':'','key':'Queue','keyType':'variable','variableName':_0x1b82('0x10')},{'type':'keyValue','content':'','key':_0x1b82('0x11'),'keyType':_0x1b82('0x4'),'variableName':_0x1b82('0x12')},{'type':'keyValue','content':'','key':'Date','keyType':_0x1b82('0x4'),'variableName':'agentcalledAt'},{'type':_0x1b82('0x7'),'content':_0x1b82('0x13'),'key':null,'keyType':null,'variableName':null},{'type':_0x1b82('0xc'),'content':'','key':'Agent\x20Name','keyType':_0x1b82('0x4'),'variableName':_0x1b82('0x14')},{'type':_0x1b82('0xc'),'content':'','key':_0x1b82('0x15'),'keyType':_0x1b82('0x4'),'variableName':'destcalleridnum'},{'type':_0x1b82('0x7'),'content':_0x1b82('0x16'),'key':null,'keyType':null,'variableName':null},{'type':_0x1b82('0xc'),'content':'','key':_0x1b82('0x17'),'keyType':_0x1b82('0x4'),'variableName':_0x1b82('0x18')},{'type':_0x1b82('0xc'),'content':'','key':'Agent\x20Connect','keyType':_0x1b82('0x4'),'variableName':_0x1b82('0x19')},{'type':'keyValue','content':'','key':_0x1b82('0x1a'),'keyType':_0x1b82('0x4'),'variableName':_0x1b82('0x1b')},{'type':'keyValue','content':'','key':_0x1b82('0x1c'),'keyType':'variable','variableName':'holdtime'},{'type':'keyValue','content':'','key':_0x1b82('0x1d'),'keyType':_0x1b82('0x4'),'variableName':_0x1b82('0x1e')}];break;case _0x1b82('0x6'):_0x14c57a=[{'type':'string','content':_0x1b82('0xb'),'variableName':null},{'type':_0x1b82('0xc'),'content':'','key':_0x1b82('0x1f'),'keyType':_0x1b82('0x4'),'keyContent':'','variableName':_0x1b82('0x20')},{'type':_0x1b82('0xc'),'content':'','key':_0x1b82('0x21'),'keyType':_0x1b82('0x4'),'keyContent':'','variableName':_0x1b82('0x22')},{'type':_0x1b82('0xc'),'content':'','key':_0x1b82('0x11'),'keyType':_0x1b82('0x4'),'keyContent':'','variableName':_0x1b82('0x12')},{'type':'keyValue','content':'','key':_0x1b82('0x23'),'keyType':_0x1b82('0x4'),'keyContent':'','variableName':_0x1b82('0x24')},{'type':_0x1b82('0x7'),'content':_0x1b82('0x16')},{'type':_0x1b82('0xc'),'content':'','key':_0x1b82('0x25'),'keyType':_0x1b82('0x4'),'keyContent':'','variableName':_0x1b82('0x26')},{'type':_0x1b82('0xc'),'content':'','key':'Complete\x20Time','keyType':_0x1b82('0x4'),'keyContent':'','variableName':_0x1b82('0x27')}];break;}}return _0x14c57a;};
\ No newline at end of file
index ccf2124..1227c19 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd4f8=['unknown','[%s]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','toUpperCase','name','role','stringify','findOne','then','update','info','error','tracked','query','clone','omit','body','html','fax','lodash','../../mysqldb','openchannel-interactions','../../config/logger','mail-interactions','chat-interactions','upperFirst','InteractionId'];(function(_0x1dc258,_0x1e911d){var _0x3e00b6=function(_0x342b99){while(--_0x342b99){_0x1dc258['push'](_0x1dc258['shift']());}};_0x3e00b6(++_0x1e911d);}(_0xd4f8,0xae));var _0x8d4f=function(_0x41d49a,_0x1621c6){_0x41d49a=_0x41d49a-0x0;var _0x5d5c45=_0xd4f8[_0x41d49a];return _0x5d5c45;};'use strict';var _=require(_0x8d4f('0x0'));var db=require(_0x8d4f('0x1'))['db'];var loggers={'openchannel':require('../../config/logger')(_0x8d4f('0x2')),'mail':require(_0x8d4f('0x3'))(_0x8d4f('0x4')),'fax':require(_0x8d4f('0x3'))('fax-interactions'),'sms':require(_0x8d4f('0x3'))('sms-interactions'),'chat':require(_0x8d4f('0x3'))(_0x8d4f('0x5'))};function getInteractionId(_0x145790,_0x52924c,_0x2adc56){if(_0x145790&&_0x145790[_[_0x8d4f('0x6')](_0x2adc56)+'InteractionId']){return _0x145790[_[_0x8d4f('0x6')](_0x2adc56)+_0x8d4f('0x7')];}else if(_0x145790&&_0x145790['id']){return _0x145790['id'];}else if(_0x52924c&&_0x52924c['id']){return _0x52924c['id'];}else{return _0x8d4f('0x8');}}function log(_0x2bf120,_0x44c119,_0x398aea,_0x2d9e8a,_0x342a2e,_0x482a9b){loggers[_0x342a2e['toLowerCase']()][_0x2bf120](_0x8d4f('0x9'),_0x482a9b[_0x8d4f('0xa')](),_0x44c119?_0x44c119['id']:null,_0x44c119?_0x44c119[_0x8d4f('0xb')]:null,_0x44c119?_0x44c119[_0x8d4f('0xc')]:null,getInteractionId(_0x398aea,_0x2d9e8a,_0x342a2e),_0x398aea?JSON[_0x8d4f('0xd')](_0x398aea):'null');}function updateUser(_0x3226c2,_0x1545ea,_0x22d6d2,_0xcb8c31,_0x477e55){db[_[_0x8d4f('0x6')](_0xcb8c31)+'Interaction'][_0x8d4f('0xe')]({'where':{'id':getInteractionId(_0x1545ea,_0x22d6d2,_0xcb8c31)}})[_0x8d4f('0xf')](function(_0x4f92a5){if(_0x4f92a5){return _0x4f92a5[_0x8d4f('0x10')]({'UserId':_0x3226c2?_0x3226c2['id']:null});}})[_0x8d4f('0xf')](function(_0x10d925){if(_0x10d925){log(_0x8d4f('0x11'),_0x3226c2,_0x1545ea,_0x22d6d2,_0xcb8c31,_0x477e55);}})['catch'](function(){log(_0x8d4f('0x12'),_0x3226c2,_0x1545ea,_0x22d6d2,_0xcb8c31,_0x477e55);});}exports[_0x8d4f('0x13')]=function(_0x1cd78a,_0x4a7215){return function(_0x17a0e9,_0x5d3af1,_0x483cf2){var _0xeb6472=_0x17a0e9['user'];var _0x172722={};var _0x1d5e97=_0x17a0e9[_0x8d4f('0x14')];if(_0x172722){_0x172722=_[_0x8d4f('0x15')](_0x17a0e9['body']);_0x172722=_[_0x8d4f('0x16')](_0x172722,[_0x8d4f('0x17'),_0x8d4f('0x18'),'phone',_0x8d4f('0x19'),'mobile']);}updateUser(_0xeb6472,_0x172722,_0x1d5e97,_0x1cd78a,_0x4a7215);_0x483cf2(null);};};
\ No newline at end of file
+var _0x7deb=['role','stringify','null','Interaction','findOne','then','info','error','tracked','user','query','body','omit','html','phone','fax','mobile','lodash','../../mysqldb','../../config/logger','fax-interactions','sms-interactions','chat-interactions','upperFirst','InteractionId','unknown','toLowerCase','[%s]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','toUpperCase','name'];(function(_0xb945fa,_0x23535a){var _0x4e04b5=function(_0x486867){while(--_0x486867){_0xb945fa['push'](_0xb945fa['shift']());}};_0x4e04b5(++_0x23535a);}(_0x7deb,0x11f));var _0xb7de=function(_0x20aae1,_0x51efd4){_0x20aae1=_0x20aae1-0x0;var _0x510601=_0x7deb[_0x20aae1];return _0x510601;};'use strict';var _=require(_0xb7de('0x0'));var db=require(_0xb7de('0x1'))['db'];var loggers={'openchannel':require(_0xb7de('0x2'))('openchannel-interactions'),'mail':require('../../config/logger')('mail-interactions'),'fax':require('../../config/logger')(_0xb7de('0x3')),'sms':require(_0xb7de('0x2'))(_0xb7de('0x4')),'chat':require(_0xb7de('0x2'))(_0xb7de('0x5'))};function getInteractionId(_0x3fa2f8,_0x27e8ab,_0x12dc76){if(_0x3fa2f8&&_0x3fa2f8[_[_0xb7de('0x6')](_0x12dc76)+_0xb7de('0x7')]){return _0x3fa2f8[_['upperFirst'](_0x12dc76)+_0xb7de('0x7')];}else if(_0x3fa2f8&&_0x3fa2f8['id']){return _0x3fa2f8['id'];}else if(_0x27e8ab&&_0x27e8ab['id']){return _0x27e8ab['id'];}else{return _0xb7de('0x8');}}function log(_0x45e9b2,_0x1b12a3,_0x51aaad,_0x26ad9c,_0x4c665,_0x14a610){loggers[_0x4c665[_0xb7de('0x9')]()][_0x45e9b2](_0xb7de('0xa'),_0x14a610[_0xb7de('0xb')](),_0x1b12a3?_0x1b12a3['id']:null,_0x1b12a3?_0x1b12a3[_0xb7de('0xc')]:null,_0x1b12a3?_0x1b12a3[_0xb7de('0xd')]:null,getInteractionId(_0x51aaad,_0x26ad9c,_0x4c665),_0x51aaad?JSON[_0xb7de('0xe')](_0x51aaad):_0xb7de('0xf'));}function updateUser(_0x4d79b6,_0x52060a,_0x1ff575,_0x2c33cb,_0xbd4963){db[_['upperFirst'](_0x2c33cb)+_0xb7de('0x10')][_0xb7de('0x11')]({'where':{'id':getInteractionId(_0x52060a,_0x1ff575,_0x2c33cb)}})[_0xb7de('0x12')](function(_0x571aae){if(_0x571aae){return _0x571aae['update']({'UserId':_0x4d79b6?_0x4d79b6['id']:null});}})['then'](function(_0x52c34e){if(_0x52c34e){log(_0xb7de('0x13'),_0x4d79b6,_0x52060a,_0x1ff575,_0x2c33cb,_0xbd4963);}})['catch'](function(){log(_0xb7de('0x14'),_0x4d79b6,_0x52060a,_0x1ff575,_0x2c33cb,_0xbd4963);});}exports[_0xb7de('0x15')]=function(_0x437d86,_0x1b7639){return function(_0x34f210,_0x545e0d,_0x28aad4){var _0x279621=_0x34f210[_0xb7de('0x16')];var _0x3c8b70={};var _0x177338=_0x34f210[_0xb7de('0x17')];if(_0x3c8b70){_0x3c8b70=_['clone'](_0x34f210[_0xb7de('0x18')]);_0x3c8b70=_[_0xb7de('0x19')](_0x3c8b70,[_0xb7de('0x18'),_0xb7de('0x1a'),_0xb7de('0x1b'),_0xb7de('0x1c'),_0xb7de('0x1d')]);}updateUser(_0x279621,_0x3c8b70,_0x177338,_0x437d86,_0x1b7639);_0x28aad4(null);};};
\ No newline at end of file
index 87fb9eb..a9ae5fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7d5=['catch','users','User','admin','user','isUserLimit','crypto','composable-middleware','../../mysqldb','license','data1','split','createDecipher','%s:%s:%s','update','base64','utf8','final','parse','use','License','then','count','format'];(function(_0x5ad0d7,_0x2645f8){var _0xd83bd=function(_0x33d3bd){while(--_0x33d3bd){_0x5ad0d7['push'](_0x5ad0d7['shift']());}};_0xd83bd(++_0x2645f8);}(_0xc7d5,0x156));var _0x5c7d=function(_0x2646cc,_0x4ac5f0){_0x2646cc=_0x2646cc-0x0;var _0x3882c1=_0xc7d5[_0x2646cc];return _0x3882c1;};'use strict';var crypto=require(_0x5c7d('0x0'));var util=require('util');var compose=require(_0x5c7d('0x1'));var db=require(_0x5c7d('0x2'))['db'];var config=require('../../config/environment');function getValueFromLicense(_0x245b77,_0x483fb3){if(_0x245b77&&_0x483fb3){if(_0x483fb3['data1']&&_0x483fb3[_0x5c7d('0x3')]){var _0x3ecadb=_0x483fb3[_0x5c7d('0x4')];var _0x2c43d4=_0x483fb3[_0x5c7d('0x3')];var _0x440490=_0x3ecadb[_0x5c7d('0x5')]('-')[0x4];var _0x3b930f=_0x3ecadb[_0x5c7d('0x5')]('-')[0x0];var _0x576f5e=crypto[_0x5c7d('0x6')]('aes-256-ctr',util['format'](_0x5c7d('0x7'),_0x440490,_0x3ecadb,_0x3b930f));var _0x689cae=_0x576f5e[_0x5c7d('0x8')](_0x2c43d4,_0x5c7d('0x9'),_0x5c7d('0xa'));_0x689cae+=_0x576f5e[_0x5c7d('0xb')](_0x5c7d('0xa'));var _0x5dacb1=JSON[_0x5c7d('0xc')](_0x689cae);return _0x5dacb1['hasOwnProperty'](_0x245b77)?_0x5dacb1[_0x245b77]:null;}}return null;}function isLimit(_0xe55935,_0x315227,_0x22e435,_0xb8633f){var _0x3cdaaa=_0x315227;return compose()[_0x5c7d('0xd')](function(_0x532b0b,_0x33eea5,_0x37e0b2){return db[_0x5c7d('0xe')]['findOne']({'where':{'id':0x1},'raw':!![]})['then'](function(_0x11c948){var _0x29a6d5=getValueFromLicense(_0xe55935,_0x11c948);return _0x29a6d5?_0x29a6d5:_0x3cdaaa;})[_0x5c7d('0xf')](function(_0x19a8e4){_0x3cdaaa=_0x19a8e4;return _0x22e435[_0x5c7d('0x10')](_0xb8633f);})['then'](function(_0x653593){if(_0x653593>=_0x3cdaaa){return _0x33eea5['status'](0x193)['json']({'message':util[_0x5c7d('0x11')]('Maximum\x20%s\x20limit\x20have\x20been\x20reached',_0xe55935)});}_0x37e0b2();})[_0x5c7d('0x12')](function(_0x5a5067){_0x37e0b2(_0x5a5067);});});}function isUserLimit(){return isLimit(_0x5c7d('0x13'),0x1,db[_0x5c7d('0x14')],{'where':{'$or':[{'role':_0x5c7d('0x15')},{'role':_0x5c7d('0x16')}]}});}exports[_0x5c7d('0x17')]=isUserLimit;
\ No newline at end of file
+var _0xbb9e=['catch','User','admin','user','crypto','composable-middleware','../../mysqldb','../../config/environment','license','split','createDecipher','aes-256-ctr','format','%s:%s:%s','update','base64','utf8','final','use','License','then','count','status','json'];(function(_0xffa198,_0x5a8940){var _0x1e4b50=function(_0x1f1c43){while(--_0x1f1c43){_0xffa198['push'](_0xffa198['shift']());}};_0x1e4b50(++_0x5a8940);}(_0xbb9e,0xf4));var _0xebb9=function(_0x40c073,_0x3c9873){_0x40c073=_0x40c073-0x0;var _0x12577f=_0xbb9e[_0x40c073];return _0x12577f;};'use strict';var crypto=require(_0xebb9('0x0'));var util=require('util');var compose=require(_0xebb9('0x1'));var db=require(_0xebb9('0x2'))['db'];var config=require(_0xebb9('0x3'));function getValueFromLicense(_0x272c1e,_0xd953e6){if(_0x272c1e&&_0xd953e6){if(_0xd953e6['data1']&&_0xd953e6[_0xebb9('0x4')]){var _0x2a64eb=_0xd953e6['data1'];var _0x503ac8=_0xd953e6['license'];var _0xd576d4=_0x2a64eb[_0xebb9('0x5')]('-')[0x4];var _0x9406ae=_0x2a64eb['split']('-')[0x0];var _0x2d07a0=crypto[_0xebb9('0x6')](_0xebb9('0x7'),util[_0xebb9('0x8')](_0xebb9('0x9'),_0xd576d4,_0x2a64eb,_0x9406ae));var _0x3b3aa0=_0x2d07a0[_0xebb9('0xa')](_0x503ac8,_0xebb9('0xb'),_0xebb9('0xc'));_0x3b3aa0+=_0x2d07a0[_0xebb9('0xd')]('utf8');var _0x37f8fe=JSON['parse'](_0x3b3aa0);return _0x37f8fe['hasOwnProperty'](_0x272c1e)?_0x37f8fe[_0x272c1e]:null;}}return null;}function isLimit(_0x2ff6b3,_0x11a99e,_0x21c51d,_0x4106be){var _0x176441=_0x11a99e;return compose()[_0xebb9('0xe')](function(_0x2ab8a9,_0x57e34c,_0x3aafc1){return db[_0xebb9('0xf')]['findOne']({'where':{'id':0x1},'raw':!![]})[_0xebb9('0x10')](function(_0x6e8981){var _0x3e72c2=getValueFromLicense(_0x2ff6b3,_0x6e8981);return _0x3e72c2?_0x3e72c2:_0x176441;})['then'](function(_0x5e9bbf){_0x176441=_0x5e9bbf;return _0x21c51d[_0xebb9('0x11')](_0x4106be);})[_0xebb9('0x10')](function(_0x59dafc){if(_0x59dafc>=_0x176441){return _0x57e34c[_0xebb9('0x12')](0x193)[_0xebb9('0x13')]({'message':util[_0xebb9('0x8')]('Maximum\x20%s\x20limit\x20have\x20been\x20reached',_0x2ff6b3)});}_0x3aafc1();})[_0xebb9('0x14')](function(_0x2b01ab){_0x3aafc1(_0x2b01ab);});});}function isUserLimit(){return isLimit('users',0x1,db[_0xebb9('0x15')],{'where':{'$or':[{'role':_0xebb9('0x16')},{'role':_0xebb9('0x17')}]}});}exports['isUserLimit']=isUserLimit;
\ No newline at end of file
index 598c95a..4e90dd6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc277=['limit','offset','map','priority','col','unsigned','DESC','cast','omit','length','isObject','isArray','unset','hasOwnProperty','lodash','split','filters','forOwn','parse'];(function(_0x136177,_0x2486ab){var _0x3197e9=function(_0x5d20be){while(--_0x5d20be){_0x136177['push'](_0x136177['shift']());}};_0x3197e9(++_0x2486ab);}(_0xc277,0x105));var _0x7c27=function(_0x2b7234,_0x5de479){_0x2b7234=_0x2b7234-0x0;var _0x22d999=_0xc277[_0x2b7234];return _0x22d999;};'use strict';var _=require(_0x7c27('0x0'));var sequelize=require('sequelize');var LIMIT_VALUE=0xfa;exports['fields']=function(_0x4137b5){var _0x1fdcef=null;if(_0x4137b5){_0x1fdcef=_0x4137b5[_0x7c27('0x1')](',');}return _0x1fdcef;};exports[_0x7c27('0x2')]=function(_0x414643){var _0x5035ce={};if(!_['isEmpty'](_0x414643)){_0x5035ce={};_[_0x7c27('0x3')](_0x414643,function(_0x16fa49,_0x1df79b){try{_0x5035ce[_0x1df79b]=JSON[_0x7c27('0x4')](_0x16fa49);}catch(_0x51eed0){_0x5035ce[_0x1df79b]=_0x16fa49[_0x7c27('0x1')](',');}});}return _0x5035ce;};exports[_0x7c27('0x5')]=function(_0x543870){_0x543870=parseInt(_0x543870,0xa);if(!_0x543870||_0x543870<0x0){_0x543870=LIMIT_VALUE;}return _0x543870;};exports[_0x7c27('0x6')]=function(_0x263e02){_0x263e02=parseInt(_0x263e02,0xa);if(!_0x263e02||_0x263e02<0x0){_0x263e02=0x0;}return _0x263e02;};exports['sort']=function(_0x5ab337){var _0x2b4691,_0x345218=null;if(_0x5ab337){_0x2b4691=_0x5ab337[_0x7c27('0x1')](',');_0x345218=_[_0x7c27('0x7')](_0x2b4691,function(_0x1bbab0){if(_0x1bbab0['indexOf']('-')===0x0){return[_0x1bbab0===_0x7c27('0x8')?sequelize['cast'](sequelize[_0x7c27('0x9')](_0x7c27('0x8')),_0x7c27('0xa')):_0x1bbab0['substr'](0x1),_0x7c27('0xb')];}else{return[_0x1bbab0==='priority'?sequelize[_0x7c27('0xc')](sequelize['col'](_0x7c27('0x8')),_0x7c27('0xa')):_0x1bbab0,'ASC'];}});}return _0x345218;};exports[_0x7c27('0xd')]=function(_0x264921,_0x26882d){if(_['isEmpty'](_0x264921)){return _0x264921;}if(_['isArray'](_0x264921)){for(var _0x49ddf6=0x0;_0x49ddf6<_0x264921[_0x7c27('0xe')];_0x49ddf6+=0x1){_0x264921[_0x49ddf6]=this['omit'](_0x264921[_0x49ddf6],_0x26882d);}return _0x264921;}if(!_[_0x7c27('0xf')](_0x264921)){return _0x264921;}if(_['isString'](_0x26882d)){_0x26882d=[_0x26882d];}if(!_[_0x7c27('0x10')](_0x26882d)){return _0x264921;}for(var _0x56bf8c=0x0;_0x56bf8c<_0x26882d[_0x7c27('0xe')];_0x56bf8c+=0x1){_[_0x7c27('0x11')](_0x264921,_0x26882d[_0x56bf8c]);}for(var _0x38cd50 in _0x264921){if(_0x264921[_0x7c27('0x12')](_0x38cd50)){_0x264921[_0x38cd50]=this[_0x7c27('0xd')](_0x264921[_0x38cd50],_0x26882d);}}return _0x264921;};
\ No newline at end of file
+var _0xc5af=['split','filters','isEmpty','limit','offset','sort','map','indexOf','priority','unsigned','substr','DESC','col','ASC','omit','isArray','length','isString','unset','lodash','sequelize','fields'];(function(_0x3f853e,_0x43579f){var _0x33386f=function(_0x1c565f){while(--_0x1c565f){_0x3f853e['push'](_0x3f853e['shift']());}};_0x33386f(++_0x43579f);}(_0xc5af,0x81));var _0xfc5a=function(_0x1656eb,_0x50acbb){_0x1656eb=_0x1656eb-0x0;var _0x1d8802=_0xc5af[_0x1656eb];return _0x1d8802;};'use strict';var _=require(_0xfc5a('0x0'));var sequelize=require(_0xfc5a('0x1'));var LIMIT_VALUE=0xfa;exports[_0xfc5a('0x2')]=function(_0x594324){var _0x73fb80=null;if(_0x594324){_0x73fb80=_0x594324[_0xfc5a('0x3')](',');}return _0x73fb80;};exports[_0xfc5a('0x4')]=function(_0x375cdd){var _0x11a0d9={};if(!_[_0xfc5a('0x5')](_0x375cdd)){_0x11a0d9={};_['forOwn'](_0x375cdd,function(_0x16631e,_0xc7cb0b){try{_0x11a0d9[_0xc7cb0b]=JSON['parse'](_0x16631e);}catch(_0x401b39){_0x11a0d9[_0xc7cb0b]=_0x16631e[_0xfc5a('0x3')](',');}});}return _0x11a0d9;};exports[_0xfc5a('0x6')]=function(_0x3a0889){_0x3a0889=parseInt(_0x3a0889,0xa);if(!_0x3a0889||_0x3a0889<0x0){_0x3a0889=LIMIT_VALUE;}return _0x3a0889;};exports[_0xfc5a('0x7')]=function(_0x50e4e9){_0x50e4e9=parseInt(_0x50e4e9,0xa);if(!_0x50e4e9||_0x50e4e9<0x0){_0x50e4e9=0x0;}return _0x50e4e9;};exports[_0xfc5a('0x8')]=function(_0xcfdaad){var _0x2b7418,_0x28c721=null;if(_0xcfdaad){_0x2b7418=_0xcfdaad[_0xfc5a('0x3')](',');_0x28c721=_[_0xfc5a('0x9')](_0x2b7418,function(_0x542025){if(_0x542025[_0xfc5a('0xa')]('-')===0x0){return[_0x542025==='priority'?sequelize['cast'](sequelize['col'](_0xfc5a('0xb')),_0xfc5a('0xc')):_0x542025[_0xfc5a('0xd')](0x1),_0xfc5a('0xe')];}else{return[_0x542025===_0xfc5a('0xb')?sequelize['cast'](sequelize[_0xfc5a('0xf')]('priority'),_0xfc5a('0xc')):_0x542025,_0xfc5a('0x10')];}});}return _0x28c721;};exports[_0xfc5a('0x11')]=function(_0x4a8d3d,_0x51c72c){if(_[_0xfc5a('0x5')](_0x4a8d3d)){return _0x4a8d3d;}if(_[_0xfc5a('0x12')](_0x4a8d3d)){for(var _0x6c0744=0x0;_0x6c0744<_0x4a8d3d[_0xfc5a('0x13')];_0x6c0744+=0x1){_0x4a8d3d[_0x6c0744]=this[_0xfc5a('0x11')](_0x4a8d3d[_0x6c0744],_0x51c72c);}return _0x4a8d3d;}if(!_['isObject'](_0x4a8d3d)){return _0x4a8d3d;}if(_[_0xfc5a('0x14')](_0x51c72c)){_0x51c72c=[_0x51c72c];}if(!_[_0xfc5a('0x12')](_0x51c72c)){return _0x4a8d3d;}for(var _0x299fef=0x0;_0x299fef<_0x51c72c[_0xfc5a('0x13')];_0x299fef+=0x1){_[_0xfc5a('0x15')](_0x4a8d3d,_0x51c72c[_0x299fef]);}for(var _0xdb17cb in _0x4a8d3d){if(_0x4a8d3d['hasOwnProperty'](_0xdb17cb)){_0x4a8d3d[_0xdb17cb]=this['omit'](_0x4a8d3d[_0xdb17cb],_0x51c72c);}}return _0x4a8d3d;};
\ No newline at end of file
index 6219e01..e23a11e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8917=['sync','secrets','session','serve-favicon','errorhandler','path','passport','express-session','cors','express-sequelize-session','moment','Store','default','get','env','production','use','public','set','appPath','join','root','development','test','client','favicon.ico','json\x20replacer','toISOString','static','/server/views','engine','html','renderFile','view\x20engine','urlencoded','50mb','json','sessions'];(function(_0x302297,_0x20614f){var _0x1d90c6=function(_0x364b6f){while(--_0x364b6f){_0x302297['push'](_0x302297['shift']());}};_0x1d90c6(++_0x20614f);}(_0x8917,0x75));var _0x7891=function(_0x47a060,_0x1eb6c9){_0x47a060=_0x47a060-0x0;var _0x49c085=_0x8917[_0x47a060];return _0x49c085;};'use strict';var express=require('express');var favicon=require(_0x7891('0x0'));var bodyParser=require('body-parser');var methodOverride=require('method-override');var cookieParser=require('cookie-parser');var errorHandler=require(_0x7891('0x1'));var path=require(_0x7891('0x2'));var passport=require(_0x7891('0x3'));var session=require(_0x7891('0x4'));var cors=require(_0x7891('0x5'));var expressSequelizeSession=require(_0x7891('0x6'));var moment=require(_0x7891('0x7'));var config=require('./environment');var db=require('../mysqldb')['db'];var Store=expressSequelizeSession(session[_0x7891('0x8')]);exports[_0x7891('0x9')]=function(_0x3470a1){var _0xf04faf=_0x3470a1[_0x7891('0xa')](_0x7891('0xb'));if(_0xf04faf===_0x7891('0xc')){_0x3470a1[_0x7891('0xd')](favicon(path['join'](config['root'],_0x7891('0xe'),'favicon.ico')));_0x3470a1[_0x7891('0xf')](_0x7891('0x10'),path[_0x7891('0x11')](config[_0x7891('0x12')],_0x7891('0xe')));}if(_0xf04faf===_0x7891('0x13')||_0xf04faf===_0x7891('0x14')){_0x3470a1[_0x7891('0xd')](favicon(path[_0x7891('0x11')](config[_0x7891('0x12')],_0x7891('0x15'),_0x7891('0x16'))));_0x3470a1[_0x7891('0xf')](_0x7891('0x10'),path[_0x7891('0x11')](config['root'],_0x7891('0x15')));_0x3470a1[_0x7891('0xd')](errorHandler());}_0x3470a1[_0x7891('0xf')](_0x7891('0x17'),function(_0x1a9feb,_0x9dfddf){if(this[_0x1a9feb]instanceof Date){_0x9dfddf=this[_0x1a9feb][_0x7891('0x18')]()['split']('.')[0x0]+'Z';}return _0x9dfddf;});_0x3470a1['use'](express[_0x7891('0x19')](_0x3470a1['get'](_0x7891('0x10'))));_0x3470a1[_0x7891('0xf')]('views',config[_0x7891('0x12')]+_0x7891('0x1a'));_0x3470a1[_0x7891('0x1b')](_0x7891('0x1c'),require('ejs')[_0x7891('0x1d')]);_0x3470a1['set'](_0x7891('0x1e'),_0x7891('0x1c'));_0x3470a1['use'](bodyParser[_0x7891('0x1f')]({'limit':_0x7891('0x20'),'extended':!![]}));_0x3470a1[_0x7891('0xd')](bodyParser[_0x7891('0x21')]({'limit':'50mb'}));_0x3470a1[_0x7891('0xd')](cors());_0x3470a1[_0x7891('0xd')](methodOverride());_0x3470a1[_0x7891('0xd')](cookieParser());_0x3470a1[_0x7891('0xd')](passport['initialize']());var _0x32d013=new Store(db['sequelize'],_0x7891('0x22'));_0x32d013['Session'][_0x7891('0x23')]();_0x3470a1[_0x7891('0xd')](session({'secret':config[_0x7891('0x24')][_0x7891('0x25')],'saveUninitialized':!![],'resave':![],'store':_0x32d013}));};
\ No newline at end of file
+var _0x160f=['Store','default','get','env','production','use','join','root','public','favicon.ico','appPath','development','test','set','client','json\x20replacer','engine','html','renderFile','view\x20engine','urlencoded','50mb','json','initialize','sessions','sync','secrets','session','express','serve-favicon','body-parser','method-override','cookie-parser','errorhandler','path','passport','cors','moment','./environment','../mysqldb'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0x160f,0x184));var _0xf160=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x160f[_0x3dd15e];return _0x231fd0;};'use strict';var express=require(_0xf160('0x0'));var favicon=require(_0xf160('0x1'));var bodyParser=require(_0xf160('0x2'));var methodOverride=require(_0xf160('0x3'));var cookieParser=require(_0xf160('0x4'));var errorHandler=require(_0xf160('0x5'));var path=require(_0xf160('0x6'));var passport=require(_0xf160('0x7'));var session=require('express-session');var cors=require(_0xf160('0x8'));var expressSequelizeSession=require('express-sequelize-session');var moment=require(_0xf160('0x9'));var config=require(_0xf160('0xa'));var db=require(_0xf160('0xb'))['db'];var Store=expressSequelizeSession(session[_0xf160('0xc')]);exports[_0xf160('0xd')]=function(_0x50eecd){var _0x115b62=_0x50eecd[_0xf160('0xe')](_0xf160('0xf'));if(_0x115b62===_0xf160('0x10')){_0x50eecd[_0xf160('0x11')](favicon(path[_0xf160('0x12')](config[_0xf160('0x13')],_0xf160('0x14'),_0xf160('0x15'))));_0x50eecd['set'](_0xf160('0x16'),path[_0xf160('0x12')](config[_0xf160('0x13')],'public'));}if(_0x115b62===_0xf160('0x17')||_0x115b62===_0xf160('0x18')){_0x50eecd['use'](favicon(path['join'](config['root'],'client',_0xf160('0x15'))));_0x50eecd[_0xf160('0x19')](_0xf160('0x16'),path[_0xf160('0x12')](config[_0xf160('0x13')],_0xf160('0x1a')));_0x50eecd['use'](errorHandler());}_0x50eecd['set'](_0xf160('0x1b'),function(_0x32eed5,_0x5ef099){if(this[_0x32eed5]instanceof Date){_0x5ef099=this[_0x32eed5]['toISOString']()['split']('.')[0x0]+'Z';}return _0x5ef099;});_0x50eecd[_0xf160('0x11')](express['static'](_0x50eecd['get'](_0xf160('0x16'))));_0x50eecd[_0xf160('0x19')]('views',config['root']+'/server/views');_0x50eecd[_0xf160('0x1c')](_0xf160('0x1d'),require('ejs')[_0xf160('0x1e')]);_0x50eecd[_0xf160('0x19')](_0xf160('0x1f'),_0xf160('0x1d'));_0x50eecd['use'](bodyParser[_0xf160('0x20')]({'limit':_0xf160('0x21'),'extended':!![]}));_0x50eecd['use'](bodyParser[_0xf160('0x22')]({'limit':_0xf160('0x21')}));_0x50eecd[_0xf160('0x11')](cors());_0x50eecd[_0xf160('0x11')](methodOverride());_0x50eecd[_0xf160('0x11')](cookieParser());_0x50eecd[_0xf160('0x11')](passport[_0xf160('0x23')]());var _0x3e2c53=new Store(db['sequelize'],_0xf160('0x24'));_0x3e2c53['Session'][_0xf160('0x25')]();_0x50eecd['use'](session({'secret':config[_0xf160('0x26')][_0xf160('0x27')],'saveUninitialized':!![],'resave':![],'store':_0x3e2c53}));};
\ No newline at end of file
index 0e95dc1..eaf159d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7166=['getFirstInterface','map','model','join','md5','update','digest','hex','getUuid','platform','replace','hostname','createHash','substring','bimedia-machine-uuid','child_process','execSync','networkInterfaces','orderBy','keys','length','filter','family','IPv4','internal','concat','head','00:00:00:00:00:00','address','127.0.0.1'];(function(_0x160fc6,_0x1f628e){var _0x2e1dab=function(_0x2f3939){while(--_0x2f3939){_0x160fc6['push'](_0x160fc6['shift']());}};_0x2e1dab(++_0x1f628e);}(_0x7166,0x194));var _0x6716=function(_0x3d38ae,_0x51102b){_0x3d38ae=_0x3d38ae-0x0;var _0x3757ee=_0x7166[_0x3d38ae];return _0x3757ee;};'use strict';var _=require('lodash');var os=require('os');var crypto=require('crypto');var machine=require(_0x6716('0x0'));var exec=require(_0x6716('0x1'))[_0x6716('0x2')];function getInterfaces(){var _0x386c54=[];var _0x344164=os[_0x6716('0x3')]();var _0x58099f=_[_0x6716('0x4')](_[_0x6716('0x5')](_0x344164));for(var _0x4d199c=0x0;_0x4d199c<_0x58099f[_0x6716('0x6')];_0x4d199c++){var _0x2b6d49=_0x344164[_0x58099f[_0x4d199c]][_0x6716('0x7')](function(_0x129c12){return _0x129c12[_0x6716('0x8')]===_0x6716('0x9')&&_0x129c12[_0x6716('0xa')]===![];});_0x386c54=_0x386c54[_0x6716('0xb')](_0x2b6d49);}return _0x386c54;}function getFirstInterface(){var _0x13bace=_[_0x6716('0xc')](getInterfaces());return{'macAddress':_0x13bace&&_0x13bace['mac']?_0x13bace['mac']:_0x6716('0xd'),'ipAddress':_0x13bace&&_0x13bace[_0x6716('0xe')]?_0x13bace['address']:_0x6716('0xf')};}exports[_0x6716('0x10')]=getFirstInterface;function getCPUhash(){var _0x59c9d0=_[_0x6716('0x4')](os['cpus']()[_0x6716('0x11')](function(_0x231332){return _0x231332[_0x6716('0x12')];}))[_0x6716('0x13')](':');return crypto['createHash'](_0x6716('0x14'))[_0x6716('0x15')](_0x59c9d0)[_0x6716('0x16')](_0x6716('0x17'));}exports[_0x6716('0x18')]=function(){switch(os[_0x6716('0x19')]()){case'win32':return exec('dmidecode\x20--string\x20system-uuid',{'encoding':'utf8'})[_0x6716('0x1a')]('\x0d\x0a','');default:var _0x1f6d44=getFirstInterface();var _0x48f7cb=getCPUhash();var _0x4cc9fd=_0x48f7cb+'|'+os[_0x6716('0x1b')]()+'|'+_0x1f6d44['macAddress']+'|'+_0x1f6d44['ipAddress'];var _0x1b359c=crypto[_0x6716('0x1c')](_0x6716('0x14'))[_0x6716('0x15')](_0x4cc9fd)[_0x6716('0x16')]('hex');return _0x1b359c[_0x6716('0x1d')](0x0,0x8)+'-'+_0x1b359c[_0x6716('0x1d')](0x8,0xc)+'-'+_0x1b359c[_0x6716('0x1d')](0xc,0x10)+'-'+_0x1b359c[_0x6716('0x1d')](0x10,0x14)+'-'+_0x1b359c['substring'](0x14);}};
\ No newline at end of file
+var _0xce98=['update','hex','getUuid','platform','win32','dmidecode\x20--string\x20system-uuid','replace','ipAddress','substring','lodash','crypto','child_process','execSync','networkInterfaces','orderBy','keys','length','filter','IPv4','concat','head','mac','00:00:00:00:00:00','address','127.0.0.1','getFirstInterface','map','model','join','createHash','md5'];(function(_0x1310ee,_0x2956f7){var _0x57d42c=function(_0x59c7a0){while(--_0x59c7a0){_0x1310ee['push'](_0x1310ee['shift']());}};_0x57d42c(++_0x2956f7);}(_0xce98,0xe2));var _0x8ce9=function(_0x48a7d9,_0x44450d){_0x48a7d9=_0x48a7d9-0x0;var _0x5ec274=_0xce98[_0x48a7d9];return _0x5ec274;};'use strict';var _=require(_0x8ce9('0x0'));var os=require('os');var crypto=require(_0x8ce9('0x1'));var machine=require('bimedia-machine-uuid');var exec=require(_0x8ce9('0x2'))[_0x8ce9('0x3')];function getInterfaces(){var _0x397322=[];var _0x313df2=os[_0x8ce9('0x4')]();var _0x78fc07=_[_0x8ce9('0x5')](_[_0x8ce9('0x6')](_0x313df2));for(var _0x398c89=0x0;_0x398c89<_0x78fc07[_0x8ce9('0x7')];_0x398c89++){var _0xa7cdac=_0x313df2[_0x78fc07[_0x398c89]][_0x8ce9('0x8')](function(_0xb49604){return _0xb49604['family']===_0x8ce9('0x9')&&_0xb49604['internal']===![];});_0x397322=_0x397322[_0x8ce9('0xa')](_0xa7cdac);}return _0x397322;}function getFirstInterface(){var _0x5d00cf=_[_0x8ce9('0xb')](getInterfaces());return{'macAddress':_0x5d00cf&&_0x5d00cf[_0x8ce9('0xc')]?_0x5d00cf['mac']:_0x8ce9('0xd'),'ipAddress':_0x5d00cf&&_0x5d00cf[_0x8ce9('0xe')]?_0x5d00cf['address']:_0x8ce9('0xf')};}exports[_0x8ce9('0x10')]=getFirstInterface;function getCPUhash(){var _0x14e767=_[_0x8ce9('0x5')](os['cpus']()[_0x8ce9('0x11')](function(_0x33b503){return _0x33b503[_0x8ce9('0x12')];}))[_0x8ce9('0x13')](':');return crypto[_0x8ce9('0x14')](_0x8ce9('0x15'))[_0x8ce9('0x16')](_0x14e767)['digest'](_0x8ce9('0x17'));}exports[_0x8ce9('0x18')]=function(){switch(os[_0x8ce9('0x19')]()){case _0x8ce9('0x1a'):return exec(_0x8ce9('0x1b'),{'encoding':'utf8'})[_0x8ce9('0x1c')]('\x0d\x0a','');default:var _0x201889=getFirstInterface();var _0x4a56a4=getCPUhash();var _0x14578b=_0x4a56a4+'|'+os['hostname']()+'|'+_0x201889['macAddress']+'|'+_0x201889[_0x8ce9('0x1d')];var _0x46fffc=crypto['createHash'](_0x8ce9('0x15'))[_0x8ce9('0x16')](_0x14578b)['digest'](_0x8ce9('0x17'));return _0x46fffc[_0x8ce9('0x1e')](0x0,0x8)+'-'+_0x46fffc[_0x8ce9('0x1e')](0x8,0xc)+'-'+_0x46fffc[_0x8ce9('0x1e')](0xc,0x10)+'-'+_0x46fffc['substring'](0x10,0x14)+'-'+_0x46fffc[_0x8ce9('0x1e')](0x14);}};
\ No newline at end of file
index ab7f615..18c174d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xac12=['SERVICE\x20LICENSE\x20STARTED\x20%s','catch','default','https','bluebird','pkginfo','version','../environment','./hardware','license','../../api/jira/jira.controller','www.xcallymotion.com','format','/api/servers/%s/check?version=%s','exports','GET','application/json','request','setEncoding','utf8','data','end','parse','aes-256-ctr','secrets','session','update','base64','final','createDecipher','||FIELD||VALUE||\x0a','User','findOne','admin','fullname','email','then','|uuid|','|name|','|email|','ipAddress','openIssue','MOTLICENSE','Motion\x20License\x20Alert','Alert','active','data2','THE\x20LICENSE\x20HAS\x20BEEN\x20UPDATED','data1','Disabled','info','THE\x20LICENSE\x20HAS\x20BEEN\x20DISABLED','Changed','uuid','%s\x20-\x20GRAY\x20PERIOD\x20STARTED\x20AT\x20%s','toUpperCase','YYYY-MM-DD\x20HH:mm','DEMO\x20START\x20AT\x20%s','NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s','error','message','finally','getUuid','findOrCreate','spread'];(function(_0x1ec157,_0x1262c0){var _0x5376c3=function(_0x2237b0){while(--_0x2237b0){_0x1ec157['push'](_0x1ec157['shift']());}};_0x5376c3(++_0x1262c0);}(_0xac12,0x85));var _0x2ac1=function(_0x5bc3ed,_0x1aeb65){_0x5bc3ed=_0x5bc3ed-0x0;var _0x2f5943=_0xac12[_0x5bc3ed];return _0x2f5943;};'use strict';var util=require('util');var https=require(_0x2ac1('0x0'));var crypto=require('crypto');var moment=require('moment');var BPromise=require(_0x2ac1('0x1'));var pkginfo=require(_0x2ac1('0x2'))(module,_0x2ac1('0x3'));var db=require('../../mysqldb')['db'];var config=require(_0x2ac1('0x4'));var hardware=require(_0x2ac1('0x5'));var logger=require('../logger')(_0x2ac1('0x6'));var jira=require(_0x2ac1('0x7'));var HOST=_0x2ac1('0x8');var TIME=0x3c*0x1388;var DAYS=0x7;var GRAY_PERIOD_REASON;var ADMIN;function httpRequest(_0x5f2be9){return new BPromise(function(_0x229c84,_0x3ebdbb){var _0x1ed66e={'host':HOST,'port':0x1bb,'path':util[_0x2ac1('0x9')](_0x2ac1('0xa'),_0x5f2be9,module[_0x2ac1('0xb')][_0x2ac1('0x3')]),'method':_0x2ac1('0xc'),'timeout':0xea60,'headers':{'Content-Type':_0x2ac1('0xd')}};var _0x141a6e=https[_0x2ac1('0xe')](_0x1ed66e,function(_0x2f8fcc){_0x2f8fcc[_0x2ac1('0xf')](_0x2ac1('0x10'));var _0x192ba5='';_0x2f8fcc['on'](_0x2ac1('0x11'),function(_0xc6f98e){_0x192ba5+=_0xc6f98e;});_0x2f8fcc['on'](_0x2ac1('0x12'),function(){try{_0x229c84(JSON[_0x2ac1('0x13')](_0x192ba5));}catch(_0x42e04c){_0x3ebdbb(_0x42e04c);}});});_0x141a6e['on']('error',_0x3ebdbb);_0x141a6e[_0x2ac1('0x12')]();});}function encryptDate(_0x59ebb9){var _0x24baf7=crypto['createCipher'](_0x2ac1('0x14'),config[_0x2ac1('0x15')][_0x2ac1('0x16')]);var _0x352cbd=_0x24baf7[_0x2ac1('0x17')](_0x59ebb9,'utf8',_0x2ac1('0x18'));_0x352cbd+=_0x24baf7[_0x2ac1('0x19')](_0x2ac1('0x18'));return _0x352cbd;}function decryptDate(_0xbdb0e2){var _0xb5dd1a=crypto[_0x2ac1('0x1a')](_0x2ac1('0x14'),config[_0x2ac1('0x15')]['session']);var _0x5b918a=_0xb5dd1a[_0x2ac1('0x17')](_0xbdb0e2,_0x2ac1('0x18'),_0x2ac1('0x10'));_0x5b918a+=_0xb5dd1a[_0x2ac1('0x19')](_0x2ac1('0x10'));return _0x5b918a;}function sendJiraAlert(_0x5ef2d0,_0x30c8ff,_0x5ada86){var _0x4452a6=_0x2ac1('0x1b');return db[_0x2ac1('0x1c')][_0x2ac1('0x1d')]({'where':{'role':_0x2ac1('0x1e')},'attributes':[_0x2ac1('0x1f'),_0x2ac1('0x20')],'raw':!![]})[_0x2ac1('0x21')](function(_0x1d6bb5){ADMIN=_0x1d6bb5;_0x4452a6+='|reason|'+_0x5ada86+'|\x0a';_0x4452a6+=_0x2ac1('0x22')+_0x5ef2d0+'|\x0a';_0x4452a6+='|machineUuid|'+_0x30c8ff+'|\x0a';_0x4452a6+=_0x2ac1('0x23')+ADMIN[_0x2ac1('0x1f')]+'|\x0a';_0x4452a6+=_0x2ac1('0x24')+ADMIN[_0x2ac1('0x20')]+'|\x0a';return _0x4452a6;})['then'](function(_0x5cb2f4){var _0x2f3c71=hardware['getFirstInterface']()[_0x2ac1('0x25')];return jira[_0x2ac1('0x26')]({'key':_0x2ac1('0x27'),'summary':_0x2ac1('0x28'),'description':_0x5cb2f4,'issuetype':_0x2ac1('0x29'),'oldToken':_0x5ef2d0,'newToken':_0x30c8ff,'email':ADMIN[_0x2ac1('0x20')],'name':ADMIN['fullname'],'reason':GRAY_PERIOD_REASON,'ip':_0x2f3c71});});}function manageLicense(_0x211afb,_0x1031a8){var _0x5f4c7e=_0x1031a8['get']({'plain':!![]});httpRequest(_0x211afb)[_0x2ac1('0x21')](function(_0x286cd6){if(_0x286cd6[_0x2ac1('0x2a')]){if(!_0x5f4c7e['license']&&_0x5f4c7e['license']!=_0x286cd6[_0x2ac1('0x6')]||_0x5f4c7e['license']&&_0x5f4c7e['data2']){logger['info']('THE\x20LICENSE\x20HAS\x20BEEN\x20ENABLED');}if(_0x5f4c7e[_0x2ac1('0x6')]&&!_0x5f4c7e[_0x2ac1('0x2b')]&&_0x5f4c7e[_0x2ac1('0x6')]!=_0x286cd6[_0x2ac1('0x6')]){logger['info'](_0x2ac1('0x2c'));}if(_0x5f4c7e['license']&&!_0x5f4c7e['data2']&&_0x5f4c7e[_0x2ac1('0x6')]==_0x286cd6[_0x2ac1('0x6')]){return _0x1031a8;}return _0x1031a8[_0x2ac1('0x17')]({'data1':_0x211afb,'data2':null,'license':_0x286cd6['license']});}else{if(_0x286cd6[_0x2ac1('0x6')]||_0x5f4c7e['license']){if(!_0x5f4c7e['data2']){if(_0x5f4c7e[_0x2ac1('0x2d')]==_0x211afb){GRAY_PERIOD_REASON=_0x2ac1('0x2e');logger[_0x2ac1('0x2f')](_0x2ac1('0x30'));}else{GRAY_PERIOD_REASON=_0x2ac1('0x31');logger[_0x2ac1('0x2f')]('NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s',_0x5f4c7e[_0x2ac1('0x2d')],_0x211afb);}sendJiraAlert(_0x5f4c7e[_0x2ac1('0x2d')],_0x286cd6[_0x2ac1('0x32')],GRAY_PERIOD_REASON);logger[_0x2ac1('0x2f')](_0x2ac1('0x33'),GRAY_PERIOD_REASON[_0x2ac1('0x34')](),moment()[_0x2ac1('0x9')](_0x2ac1('0x35')));return _0x1031a8[_0x2ac1('0x17')]({'data2':encryptDate(moment()['format'](_0x2ac1('0x35')))});}else{if(moment()['diff'](decryptDate(_0x5f4c7e[_0x2ac1('0x2b')]),'days')>DAYS){logger['info'](_0x2ac1('0x36'),moment()[_0x2ac1('0x9')](_0x2ac1('0x35')));return _0x1031a8[_0x2ac1('0x17')]({'data1':_0x211afb,'data2':null,'license':null});}}}else{if(_0x5f4c7e[_0x2ac1('0x2d')]!=_0x211afb){logger[_0x2ac1('0x2f')](_0x2ac1('0x37'),_0x5f4c7e[_0x2ac1('0x2d')],_0x211afb);return _0x1031a8[_0x2ac1('0x17')]({'data1':_0x211afb,'data2':null,'license':null});}}}return _0x1031a8;})[_0x2ac1('0x21')](function(_0x5d7e04){_0x1031a8=_0x5d7e04;})['catch'](function(_0x62c5e0){logger[_0x2ac1('0x38')](_0x62c5e0[_0x2ac1('0x39')]);})[_0x2ac1('0x3a')](function(){setTimeout(function(){manageLicense(hardware[_0x2ac1('0x3b')](),_0x1031a8);},TIME);});}function defaultLicense(){var _0x42f6a5=hardware[_0x2ac1('0x3b')]();if(_0x42f6a5){return db['License'][_0x2ac1('0x3c')]({'where':{'id':0x1},'defaults':{'data1':_0x42f6a5}})[_0x2ac1('0x3d')](function(_0x154e3d,_0x243a6d){logger['info'](_0x2ac1('0x3e'),_0x42f6a5);manageLicense(_0x42f6a5,_0x154e3d);})[_0x2ac1('0x3f')](function(_0x53dcb){logger['error'](_0x53dcb[_0x2ac1('0x39')]);});}}exports[_0x2ac1('0x40')]=defaultLicense;
\ No newline at end of file
+var _0x5f5e=['%s\x20-\x20GRAY\x20PERIOD\x20STARTED\x20AT\x20%s','format','YYYY-MM-DD\x20HH:mm','update','diff','days','then','message','finally','getUuid','findOrCreate','spread','SERVICE\x20LICENSE\x20STARTED\x20%s','catch','util','https','crypto','moment','bluebird','pkginfo','version','./hardware','../logger','license','../../api/jira/jira.controller','www.xcallymotion.com','/api/servers/%s/check?version=%s','exports','GET','application/json','request','setEncoding','utf8','data','end','parse','error','aes-256-ctr','secrets','session','base64','final','createDecipher','||FIELD||VALUE||\x0a','User','findOne','fullname','|reason|','|uuid|','|machineUuid|','|email|','email','getFirstInterface','ipAddress','Motion\x20License\x20Alert','Alert','get','active','data2','info','THE\x20LICENSE\x20HAS\x20BEEN\x20ENABLED','data1','Disabled','Changed','NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s','uuid'];(function(_0x31dde9,_0x12e816){var _0x1fbf2d=function(_0x1d1bf6){while(--_0x1d1bf6){_0x31dde9['push'](_0x31dde9['shift']());}};_0x1fbf2d(++_0x12e816);}(_0x5f5e,0x92));var _0xe5f5=function(_0x1b5d88,_0xb26a1e){_0x1b5d88=_0x1b5d88-0x0;var _0x42ac47=_0x5f5e[_0x1b5d88];return _0x42ac47;};'use strict';var util=require(_0xe5f5('0x0'));var https=require(_0xe5f5('0x1'));var crypto=require(_0xe5f5('0x2'));var moment=require(_0xe5f5('0x3'));var BPromise=require(_0xe5f5('0x4'));var pkginfo=require(_0xe5f5('0x5'))(module,_0xe5f5('0x6'));var db=require('../../mysqldb')['db'];var config=require('../environment');var hardware=require(_0xe5f5('0x7'));var logger=require(_0xe5f5('0x8'))(_0xe5f5('0x9'));var jira=require(_0xe5f5('0xa'));var HOST=_0xe5f5('0xb');var TIME=0x3c*0x1388;var DAYS=0x7;var GRAY_PERIOD_REASON;var ADMIN;function httpRequest(_0x566691){return new BPromise(function(_0x2fe6ea,_0x1a8cff){var _0x27ba2c={'host':HOST,'port':0x1bb,'path':util['format'](_0xe5f5('0xc'),_0x566691,module[_0xe5f5('0xd')][_0xe5f5('0x6')]),'method':_0xe5f5('0xe'),'timeout':0xea60,'headers':{'Content-Type':_0xe5f5('0xf')}};var _0x5e061b=https[_0xe5f5('0x10')](_0x27ba2c,function(_0x5609e1){_0x5609e1[_0xe5f5('0x11')](_0xe5f5('0x12'));var _0x5cc362='';_0x5609e1['on'](_0xe5f5('0x13'),function(_0x5650d8){_0x5cc362+=_0x5650d8;});_0x5609e1['on'](_0xe5f5('0x14'),function(){try{_0x2fe6ea(JSON[_0xe5f5('0x15')](_0x5cc362));}catch(_0x4c6bd4){_0x1a8cff(_0x4c6bd4);}});});_0x5e061b['on'](_0xe5f5('0x16'),_0x1a8cff);_0x5e061b[_0xe5f5('0x14')]();});}function encryptDate(_0x10a965){var _0x36b868=crypto['createCipher'](_0xe5f5('0x17'),config[_0xe5f5('0x18')][_0xe5f5('0x19')]);var _0x2e47d1=_0x36b868['update'](_0x10a965,_0xe5f5('0x12'),_0xe5f5('0x1a'));_0x2e47d1+=_0x36b868[_0xe5f5('0x1b')](_0xe5f5('0x1a'));return _0x2e47d1;}function decryptDate(_0x1a5d3e){var _0x174cd7=crypto[_0xe5f5('0x1c')](_0xe5f5('0x17'),config['secrets'][_0xe5f5('0x19')]);var _0xc21778=_0x174cd7['update'](_0x1a5d3e,'base64','utf8');_0xc21778+=_0x174cd7[_0xe5f5('0x1b')]('utf8');return _0xc21778;}function sendJiraAlert(_0x1a3a38,_0x16f917,_0x3086fb){var _0x2a756a=_0xe5f5('0x1d');return db[_0xe5f5('0x1e')][_0xe5f5('0x1f')]({'where':{'role':'admin'},'attributes':[_0xe5f5('0x20'),'email'],'raw':!![]})['then'](function(_0x153e06){ADMIN=_0x153e06;_0x2a756a+=_0xe5f5('0x21')+_0x3086fb+'|\x0a';_0x2a756a+=_0xe5f5('0x22')+_0x1a3a38+'|\x0a';_0x2a756a+=_0xe5f5('0x23')+_0x16f917+'|\x0a';_0x2a756a+='|name|'+ADMIN[_0xe5f5('0x20')]+'|\x0a';_0x2a756a+=_0xe5f5('0x24')+ADMIN[_0xe5f5('0x25')]+'|\x0a';return _0x2a756a;})['then'](function(_0x4860cc){var _0x1665a1=hardware[_0xe5f5('0x26')]()[_0xe5f5('0x27')];return jira['openIssue']({'key':'MOTLICENSE','summary':_0xe5f5('0x28'),'description':_0x4860cc,'issuetype':_0xe5f5('0x29'),'oldToken':_0x1a3a38,'newToken':_0x16f917,'email':ADMIN[_0xe5f5('0x25')],'name':ADMIN[_0xe5f5('0x20')],'reason':GRAY_PERIOD_REASON,'ip':_0x1665a1});});}function manageLicense(_0x1ec355,_0x3af962){var _0x2338d4=_0x3af962[_0xe5f5('0x2a')]({'plain':!![]});httpRequest(_0x1ec355)['then'](function(_0x4efae0){if(_0x4efae0[_0xe5f5('0x2b')]){if(!_0x2338d4['license']&&_0x2338d4[_0xe5f5('0x9')]!=_0x4efae0[_0xe5f5('0x9')]||_0x2338d4['license']&&_0x2338d4[_0xe5f5('0x2c')]){logger[_0xe5f5('0x2d')](_0xe5f5('0x2e'));}if(_0x2338d4[_0xe5f5('0x9')]&&!_0x2338d4[_0xe5f5('0x2c')]&&_0x2338d4[_0xe5f5('0x9')]!=_0x4efae0[_0xe5f5('0x9')]){logger['info']('THE\x20LICENSE\x20HAS\x20BEEN\x20UPDATED');}if(_0x2338d4['license']&&!_0x2338d4[_0xe5f5('0x2c')]&&_0x2338d4['license']==_0x4efae0[_0xe5f5('0x9')]){return _0x3af962;}return _0x3af962['update']({'data1':_0x1ec355,'data2':null,'license':_0x4efae0[_0xe5f5('0x9')]});}else{if(_0x4efae0[_0xe5f5('0x9')]||_0x2338d4['license']){if(!_0x2338d4['data2']){if(_0x2338d4[_0xe5f5('0x2f')]==_0x1ec355){GRAY_PERIOD_REASON=_0xe5f5('0x30');logger['info']('THE\x20LICENSE\x20HAS\x20BEEN\x20DISABLED');}else{GRAY_PERIOD_REASON=_0xe5f5('0x31');logger[_0xe5f5('0x2d')](_0xe5f5('0x32'),_0x2338d4[_0xe5f5('0x2f')],_0x1ec355);}sendJiraAlert(_0x2338d4[_0xe5f5('0x2f')],_0x4efae0[_0xe5f5('0x33')],GRAY_PERIOD_REASON);logger['info'](_0xe5f5('0x34'),GRAY_PERIOD_REASON['toUpperCase'](),moment()[_0xe5f5('0x35')](_0xe5f5('0x36')));return _0x3af962[_0xe5f5('0x37')]({'data2':encryptDate(moment()['format'](_0xe5f5('0x36')))});}else{if(moment()[_0xe5f5('0x38')](decryptDate(_0x2338d4[_0xe5f5('0x2c')]),_0xe5f5('0x39'))>DAYS){logger['info']('DEMO\x20START\x20AT\x20%s',moment()[_0xe5f5('0x35')](_0xe5f5('0x36')));return _0x3af962[_0xe5f5('0x37')]({'data1':_0x1ec355,'data2':null,'license':null});}}}else{if(_0x2338d4['data1']!=_0x1ec355){logger[_0xe5f5('0x2d')](_0xe5f5('0x32'),_0x2338d4[_0xe5f5('0x2f')],_0x1ec355);return _0x3af962[_0xe5f5('0x37')]({'data1':_0x1ec355,'data2':null,'license':null});}}}return _0x3af962;})[_0xe5f5('0x3a')](function(_0x33bfcb){_0x3af962=_0x33bfcb;})['catch'](function(_0x93a584){logger[_0xe5f5('0x16')](_0x93a584[_0xe5f5('0x3b')]);})[_0xe5f5('0x3c')](function(){setTimeout(function(){manageLicense(hardware[_0xe5f5('0x3d')](),_0x3af962);},TIME);});}function defaultLicense(){var _0x41c5e4=hardware[_0xe5f5('0x3d')]();if(_0x41c5e4){return db['License'][_0xe5f5('0x3e')]({'where':{'id':0x1},'defaults':{'data1':_0x41c5e4}})[_0xe5f5('0x3f')](function(_0x5c6f9c,_0x7263cf){logger['info'](_0xe5f5('0x40'),_0x41c5e4);manageLicense(_0x41c5e4,_0x5c6f9c);})[_0xe5f5('0x41')](function(_0x2a0b15){logger[_0xe5f5('0x16')](_0x2a0b15[_0xe5f5('0x3b')]);});}}exports['default']=defaultLicense;
\ No newline at end of file
index dea44fc..8ad14a2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x611a=['data1','split','createDecipher','%s:%s:%s','final','parse','demo','uuid','getUuid','secrets','session','update','utf8','gray','deadline','add','format','grayReason','changed','disabled','Breaking\x20license','message','2027-01-01T00:00:00.000Z','getLicense','find','defaults','then','checkLicense','crypto','moment','./hardware','../environment','../../mysqldb','License\x20key\x20value\x20not\x20found'];(function(_0x3a0356,_0x15d1dc){var _0x5bef61=function(_0x912178){while(--_0x912178){_0x3a0356['push'](_0x3a0356['shift']());}};_0x5bef61(++_0x15d1dc);}(_0x611a,0x82));var _0xa611=function(_0x5117a0,_0x530366){_0x5117a0=_0x5117a0-0x0;var _0x47d85d=_0x611a[_0x5117a0];return _0x47d85d;};'use strict';var crypto=require(_0xa611('0x0'));var util=require('util');var _=require('lodash');var moment=require(_0xa611('0x1'));var hardware=require(_0xa611('0x2'));var config=require(_0xa611('0x3'));var db=require(_0xa611('0x4'))['db'];function checkLicense(_0x132d23,_0x4f3fc8){if(_0x132d23){try{var _0x23c6c6=_0x4f3fc8||_0x132d23['license'];if(_['isEmpty'](_0x23c6c6)){throw new Error(_0xa611('0x5'));}var _0x43bbe9=_0x132d23[_0xa611('0x6')];var _0x3c1c51=_0x132d23['data2'];var _0x2dee1b=_0x43bbe9[_0xa611('0x7')]('-')[0x4];var _0x39517f=_0x43bbe9[_0xa611('0x7')]('-')[0x0];var _0x23cce3=crypto[_0xa611('0x8')]('aes-256-ctr',util['format'](_0xa611('0x9'),_0x2dee1b,_0x43bbe9,_0x39517f));var _0xa6d43c=_0x23cce3['update'](_0x23c6c6,'base64','utf8');_0xa6d43c+=_0x23cce3[_0xa611('0xa')]('utf8');var _0x3bb523=JSON[_0xa611('0xb')](_0xa6d43c);_0x3bb523[_0xa611('0xc')]=![];_0x3bb523[_0xa611('0xd')]=_0x43bbe9;_0x3bb523['machineUuid']=hardware[_0xa611('0xe')]();if(_0x3c1c51){var _0x35e80d=crypto['createDecipher']('aes-256-ctr',config[_0xa611('0xf')][_0xa611('0x10')]);var _0x21033e=_0x35e80d[_0xa611('0x11')](_0x3c1c51,'base64',_0xa611('0x12'));_0x21033e+=_0x35e80d['final'](_0xa611('0x12'));_0x3bb523[_0xa611('0x13')]=_0x21033e;_0x3bb523[_0xa611('0x14')]=moment(_0x21033e)[_0xa611('0x15')](0x7,'days')[_0xa611('0x16')]();_0x3bb523[_0xa611('0x17')]=_0x3bb523[_0xa611('0xd')]!=_0x3bb523['machineUuid']?_0xa611('0x18'):_0xa611('0x19');}return _0x3bb523;}catch(_0x3eaada){return{'breaking':!![],'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':'2027-01-01T00:00:00.000Z','chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':_0xa611('0x1a'),'uuid':_0x132d23[_0xa611('0x6')],'machineUuid':hardware[_0xa611('0xe')](),'message':_0x3eaada[_0xa611('0x1b')],'virtual':0x0,'voice':!![]};}}return{'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0xa611('0x1c'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':'Demo\x20license','uuid':_0x132d23[_0xa611('0x6')],'machineUuid':hardware[_0xa611('0xe')](),'virtual':0x0,'voice':!![]};}exports[_0xa611('0x1d')]=function(_0x1be96d){return db['License'][_0xa611('0x1e')](_[_0xa611('0x1f')](_0x1be96d,{'raw':!![],'where':{'id':0x1}}))[_0xa611('0x20')](function(_0x4c97fe){return checkLicense(_0x4c97fe,null);});};exports[_0xa611('0x21')]=checkLicense;
\ No newline at end of file
+var _0x59d1=['createDecipher','aes-256-ctr','format','%s:%s:%s','update','base64','utf8','final','parse','uuid','secrets','gray','deadline','add','days','grayReason','changed','2027-01-01T00:00:00.000Z','Breaking\x20license','getUuid','defaults','then','crypto','lodash','moment','./hardware','../environment','../../mysqldb','isEmpty','License\x20key\x20value\x20not\x20found','data1','data2','split'];(function(_0x2aa0e7,_0x4e5145){var _0x1472c0=function(_0x4deaeb){while(--_0x4deaeb){_0x2aa0e7['push'](_0x2aa0e7['shift']());}};_0x1472c0(++_0x4e5145);}(_0x59d1,0x79));var _0x159d=function(_0x39647c,_0x489def){_0x39647c=_0x39647c-0x0;var _0x41ee71=_0x59d1[_0x39647c];return _0x41ee71;};'use strict';var crypto=require(_0x159d('0x0'));var util=require('util');var _=require(_0x159d('0x1'));var moment=require(_0x159d('0x2'));var hardware=require(_0x159d('0x3'));var config=require(_0x159d('0x4'));var db=require(_0x159d('0x5'))['db'];function checkLicense(_0x18ce9a,_0x4fd780){if(_0x18ce9a){try{var _0x5c0c24=_0x4fd780||_0x18ce9a['license'];if(_[_0x159d('0x6')](_0x5c0c24)){throw new Error(_0x159d('0x7'));}var _0x120bde=_0x18ce9a[_0x159d('0x8')];var _0x1ae352=_0x18ce9a[_0x159d('0x9')];var _0x3568b1=_0x120bde[_0x159d('0xa')]('-')[0x4];var _0x540d25=_0x120bde[_0x159d('0xa')]('-')[0x0];var _0x40df3f=crypto[_0x159d('0xb')](_0x159d('0xc'),util[_0x159d('0xd')](_0x159d('0xe'),_0x3568b1,_0x120bde,_0x540d25));var _0x28c074=_0x40df3f[_0x159d('0xf')](_0x5c0c24,_0x159d('0x10'),_0x159d('0x11'));_0x28c074+=_0x40df3f[_0x159d('0x12')]('utf8');var _0x34d617=JSON[_0x159d('0x13')](_0x28c074);_0x34d617['demo']=![];_0x34d617[_0x159d('0x14')]=_0x120bde;_0x34d617['machineUuid']=hardware['getUuid']();if(_0x1ae352){var _0x4ac626=crypto['createDecipher'](_0x159d('0xc'),config[_0x159d('0x15')]['session']);var _0x38a2bb=_0x4ac626[_0x159d('0xf')](_0x1ae352,_0x159d('0x10'),_0x159d('0x11'));_0x38a2bb+=_0x4ac626[_0x159d('0x12')](_0x159d('0x11'));_0x34d617[_0x159d('0x16')]=_0x38a2bb;_0x34d617[_0x159d('0x17')]=moment(_0x38a2bb)[_0x159d('0x18')](0x7,_0x159d('0x19'))[_0x159d('0xd')]();_0x34d617[_0x159d('0x1a')]=_0x34d617[_0x159d('0x14')]!=_0x34d617['machineUuid']?_0x159d('0x1b'):'disabled';}return _0x34d617;}catch(_0x4fae34){return{'breaking':!![],'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0x159d('0x1c'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':_0x159d('0x1d'),'uuid':_0x18ce9a['data1'],'machineUuid':hardware['getUuid'](),'message':_0x4fae34['message'],'virtual':0x0,'voice':!![]};}}return{'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0x159d('0x1c'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':'Demo\x20license','uuid':_0x18ce9a[_0x159d('0x8')],'machineUuid':hardware[_0x159d('0x1e')](),'virtual':0x0,'voice':!![]};}exports['getLicense']=function(_0x37d781){return db['License']['find'](_[_0x159d('0x1f')](_0x37d781,{'raw':!![],'where':{'id':0x1}}))[_0x159d('0x20')](function(_0x5600d5){return checkLicense(_0x5600d5,null);});};exports['checkLicense']=checkLicense;
\ No newline at end of file
index 6a97c09..aea6b76 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9a19=['exports','http://localhost:9000','myappanuglar-secret','secret'];(function(_0x452fc7,_0x54a55b){var _0xdab52c=function(_0x21b137){while(--_0x21b137){_0x452fc7['push'](_0x452fc7['shift']());}};_0xdab52c(++_0x54a55b);}(_0x9a19,0x114));var _0x99a1=function(_0x4fe19c,_0x45d0fe){_0x4fe19c=_0x4fe19c-0x0;var _0x952ac7=_0x9a19[_0x4fe19c];return _0x952ac7;};'use strict';module[_0x99a1('0x0')]={'DOMAIN':_0x99a1('0x1'),'SESSION_SECRET':_0x99a1('0x2'),'GOOGLE_ID':'app-id','GOOGLE_SECRET':_0x99a1('0x3'),'DEBUG':''};
\ No newline at end of file
+var _0xc577=['secret','exports','app-id'];(function(_0x457c2c,_0x4fc52e){var _0x549d49=function(_0x270efd){while(--_0x270efd){_0x457c2c['push'](_0x457c2c['shift']());}};_0x549d49(++_0x4fc52e);}(_0xc577,0x172));var _0x7c57=function(_0x33f3f8,_0x51b47a){_0x33f3f8=_0x33f3f8-0x0;var _0x2122db=_0xc577[_0x33f3f8];return _0x2122db;};'use strict';module[_0x7c57('0x0')]={'DOMAIN':'http://localhost:9000','SESSION_SECRET':'myappanuglar-secret','GOOGLE_ID':_0x7c57('0x1'),'GOOGLE_SECRET':_0x7c57('0x2'),'DEBUG':''};
\ No newline at end of file
index 6325a96..ecdd274 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd82a=['error','info','Console','env','moment','winston','INFO','join','/var','log','xcally','format','[%s]\x20[%s]\x20%s\x20-\x20%s','YYYY-MM-DD\x20HH:mm:ss','level','toUpperCase','message','exports','transports','File','%s-%s'];(function(_0x2de0ee,_0x115806){var _0x5a17ee=function(_0x4a8688){while(--_0x4a8688){_0x2de0ee['push'](_0x2de0ee['shift']());}};_0x5a17ee(++_0x115806);}(_0xd82a,0xd6));var _0xad82=function(_0x35da42,_0x5c2610){_0x35da42=_0x35da42-0x0;var _0x370035=_0xd82a[_0x35da42];return _0x370035;};'use strict';var moment=require(_0xad82('0x0'));var winston=require(_0xad82('0x1'));var util=require('util');var path=require('path');var debugLevel=_0xad82('0x2');function filename(_0x180233,_0x36ee72){return path[_0xad82('0x3')](_0xad82('0x4'),_0xad82('0x5'),_0xad82('0x6'),util[_0xad82('0x7')]('%s-%s.log',_0x180233,_0x36ee72));}function formatter(_0x398e7b,_0x1049ec){return util['format'](_0xad82('0x8'),moment()[_0xad82('0x7')](_0xad82('0x9')),_0x1049ec[_0xad82('0xa')][_0xad82('0xb')](),_0x398e7b,_0x1049ec[_0xad82('0xc')]);}module[_0xad82('0xd')]=function(_0x2dd9f5){return new winston['Logger']({'transports':[new winston[(_0xad82('0xe'))][(_0xad82('0xf'))]({'name':util[_0xad82('0x7')](_0xad82('0x10'),_0x2dd9f5,'error'),'filename':filename(_0x2dd9f5,_0xad82('0x11')),'level':'error','json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x5e1132){return formatter(_0x2dd9f5,_0x5e1132);}}),new winston[(_0xad82('0xe'))][(_0xad82('0xf'))]({'name':util[_0xad82('0x7')](_0xad82('0x10'),_0x2dd9f5,'info'),'filename':filename(_0x2dd9f5,_0xad82('0x12')),'level':_0xad82('0x12'),'json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x4e7ba2){return formatter(_0x2dd9f5,_0x4e7ba2);}}),new winston[(_0xad82('0xe'))][(_0xad82('0x13'))]({'level':process[_0xad82('0x14')]['debugLevel']||debugLevel,'json':![],'formatter':function(_0x9ffd03){return formatter(_0x2dd9f5,_0x9ffd03);}})]});};
\ No newline at end of file
+var _0xe180=['%s-%s.log','[%s]\x20[%s]\x20%s\x20-\x20%s','YYYY-MM-DD\x20HH:mm:ss','level','message','exports','Logger','transports','File','%s-%s','error','info','util','INFO','join','/var','log','xcally','format'];(function(_0x1f9ffb,_0x88e50e){var _0x37835f=function(_0x62950b){while(--_0x62950b){_0x1f9ffb['push'](_0x1f9ffb['shift']());}};_0x37835f(++_0x88e50e);}(_0xe180,0x129));var _0x0e18=function(_0x176329,_0x568c84){_0x176329=_0x176329-0x0;var _0x31997c=_0xe180[_0x176329];return _0x31997c;};'use strict';var moment=require('moment');var winston=require('winston');var util=require(_0x0e18('0x0'));var path=require('path');var debugLevel=_0x0e18('0x1');function filename(_0x2ac4b8,_0x309c26){return path[_0x0e18('0x2')](_0x0e18('0x3'),_0x0e18('0x4'),_0x0e18('0x5'),util[_0x0e18('0x6')](_0x0e18('0x7'),_0x2ac4b8,_0x309c26));}function formatter(_0x1963e6,_0x132a08){return util['format'](_0x0e18('0x8'),moment()[_0x0e18('0x6')](_0x0e18('0x9')),_0x132a08[_0x0e18('0xa')]['toUpperCase'](),_0x1963e6,_0x132a08[_0x0e18('0xb')]);}module[_0x0e18('0xc')]=function(_0x5d3d7d){return new winston[(_0x0e18('0xd'))]({'transports':[new winston[(_0x0e18('0xe'))][(_0x0e18('0xf'))]({'name':util['format'](_0x0e18('0x10'),_0x5d3d7d,_0x0e18('0x11')),'filename':filename(_0x5d3d7d,_0x0e18('0x11')),'level':_0x0e18('0x11'),'json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x10a34e){return formatter(_0x5d3d7d,_0x10a34e);}}),new winston[(_0x0e18('0xe'))][(_0x0e18('0xf'))]({'name':util['format'](_0x0e18('0x10'),_0x5d3d7d,'info'),'filename':filename(_0x5d3d7d,_0x0e18('0x12')),'level':_0x0e18('0x12'),'json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x332bf0){return formatter(_0x5d3d7d,_0x332bf0);}}),new winston[(_0x0e18('0xe'))]['Console']({'level':process['env']['debugLevel']||debugLevel,'json':![],'formatter':function(_0x27eb4d){return formatter(_0x5d3d7d,_0x27eb4d);}})]});};
\ No newline at end of file
index 6b28bb0..7af35c0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4346=['../../services/express/index.js','../../services/ami/index.js','../../services/agi/index.js','email','routing','../../services/routing/index.js','exports','path','express','join'];(function(_0x244882,_0x8b1c54){var _0x5d0bf1=function(_0x115f3c){while(--_0x115f3c){_0x244882['push'](_0x244882['shift']());}};_0x5d0bf1(++_0x8b1c54);}(_0x4346,0x133));var _0x6434=function(_0x9d14e3,_0x5a6072){_0x9d14e3=_0x9d14e3-0x0;var _0x19bf32=_0x4346[_0x9d14e3];return _0x19bf32;};'use strict';var path=require(_0x6434('0x0'));var os=require('os');var config={'apps':[{'name':_0x6434('0x1'),'script':path[_0x6434('0x2')](__dirname,_0x6434('0x3'))},{'name':'ami','script':path[_0x6434('0x2')](__dirname,_0x6434('0x4'))},{'name':'agi','script':path[_0x6434('0x2')](__dirname,_0x6434('0x5'))},{'name':_0x6434('0x6'),'script':path[_0x6434('0x2')](__dirname,'../../services/email/index.js')},{'name':_0x6434('0x7'),'script':path[_0x6434('0x2')](__dirname,_0x6434('0x8'))}]};module[_0x6434('0x9')]=config;
\ No newline at end of file
+var _0xf3e9=['agi','routing','../../services/routing/index.js','exports','path','join','../../services/express/index.js','ami','../../services/ami/index.js'];(function(_0x1928c9,_0x13a6d1){var _0x51b5fb=function(_0x24cf70){while(--_0x24cf70){_0x1928c9['push'](_0x1928c9['shift']());}};_0x51b5fb(++_0x13a6d1);}(_0xf3e9,0x1b4));var _0x9f3e=function(_0x8d13ba,_0x30eafb){_0x8d13ba=_0x8d13ba-0x0;var _0x531813=_0xf3e9[_0x8d13ba];return _0x531813;};'use strict';var path=require(_0x9f3e('0x0'));var os=require('os');var config={'apps':[{'name':'express','script':path[_0x9f3e('0x1')](__dirname,_0x9f3e('0x2'))},{'name':_0x9f3e('0x3'),'script':path[_0x9f3e('0x1')](__dirname,_0x9f3e('0x4'))},{'name':_0x9f3e('0x5'),'script':path[_0x9f3e('0x1')](__dirname,'../../services/agi/index.js')},{'name':'email','script':path[_0x9f3e('0x1')](__dirname,'../../services/email/index.js')},{'name':_0x9f3e('0x6'),'script':path['join'](__dirname,_0x9f3e('0x7'))}]};module[_0x9f3e('0x8')]=config;
\ No newline at end of file
index 116903f..6119428 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['start','then','disconnect','stop','restart','list','describe','delete','pm2','bluebird','./config','connected'];(function(_0xc650b4,_0x2ae121){var _0x47841b=function(_0x588d6c){while(--_0x588d6c){_0xc650b4['push'](_0xc650b4['shift']());}};_0x47841b(++_0x2ae121);}(_0x008c,0x188));var _0xc008=function(_0x4729ea,_0x478433){_0x4729ea=_0x4729ea-0x0;var _0x2a3aef=_0x008c[_0x4729ea];return _0x2a3aef;};'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
+var _0x008c=['start','then','disconnect','stop','restart','list','describe','delete','pm2','bluebird','./config','connected'];(function(_0x3e6812,_0x4601b0){var _0x4101c9=function(_0x52b823){while(--_0x52b823){_0x3e6812['push'](_0x3e6812['shift']());}};_0x4101c9(++_0x4601b0);}(_0x008c,0x188));var _0xc008=function(_0x41dd01,_0x3287fe){_0x41dd01=_0x41dd01-0x0;var _0x1b2a58=_0x008c[_0x41dd01];return _0x1b2a58;};'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 3a7a447..ed50c75 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2624=['start','lodash','moment','socket.io-emitter','localhost','Setting','find','chatTimeout','ChatInteraction','findAll','subtract','minutes','then','update','format','YYYY-MM-DD\x20HH:mm:ss','map','chatInteraction:update','catch','error'];(function(_0x29d915,_0x54a040){var _0x160f86=function(_0x237dfa){while(--_0x237dfa){_0x29d915['push'](_0x29d915['shift']());}};_0x160f86(++_0x54a040);}(_0x2624,0x191));var _0x4262=function(_0x4d7718,_0x2cc9e8){_0x4d7718=_0x4d7718-0x0;var _0x1c5d2e=_0x2624[_0x4d7718];return _0x1c5d2e;};'use strict';var _=require(_0x4262('0x0'));var moment=require(_0x4262('0x1'));var db=require('../../mysqldb')['db'];var io=require(_0x4262('0x2'))({'host':_0x4262('0x3'),'port':0x18eb});function closeInteractions(){var _0x4ae6f2=0x0;var _0x237ec=[];return db[_0x4262('0x4')][_0x4262('0x5')]({'raw':!![],'attributes':['id',_0x4262('0x6')],'where':{'id':0x1}})['then'](function(_0x135502){_0x4ae6f2=_0x135502[_0x4262('0x6')];if(_0x4ae6f2){return db[_0x4262('0x7')][_0x4262('0x8')]({'raw':!![],'attributes':['id','lastMsgAt'],'where':{'closed':![],'lastMsgAt':{'$lt':moment()[_0x4262('0x9')](_0x135502['chatTimeout'],_0x4262('0xa'))}}});}else{return[];}})[_0x4262('0xb')](function(_0x3b16f6){_0x237ec=_0x3b16f6;if(_0x4ae6f2){return db['ChatInteraction'][_0x4262('0xc')]({'closeReason':'system','disposition':'timeout','closed':!![],'closedAt':moment()[_0x4262('0xd')](_0x4262('0xe'))},{'where':{'id':_[_0x4262('0xf')](_0x237ec||[],'id')}});}})[_0x4262('0xb')](function(_0x375c74){for(var _0x1373a4=0x0;_0x1373a4<_0x237ec['length'];_0x1373a4++){io['emit'](_0x4262('0x10'),{'id':_0x237ec[_0x1373a4]['id'],'closed':!![]});}})[_0x4262('0x11')](function(_0xb896e1){console[_0x4262('0x12')](_0xb896e1);});}exports[_0x4262('0x13')]=function(){setInterval(function(){return closeInteractions();},0x3c*0x3e8);return closeInteractions();};
\ No newline at end of file
+var _0xfb5b=['subtract','minutes','then','system','timeout','YYYY-MM-DD\x20HH:mm:ss','map','length','emit','chatInteraction:update','catch','../../mysqldb','socket.io-emitter','find','chatTimeout','ChatInteraction','findAll','lastMsgAt'];(function(_0x3b3baa,_0x8a83e2){var _0x5f37b2=function(_0x4ef7bb){while(--_0x4ef7bb){_0x3b3baa['push'](_0x3b3baa['shift']());}};_0x5f37b2(++_0x8a83e2);}(_0xfb5b,0x89));var _0xbfb5=function(_0x149626,_0x2bebfc){_0x149626=_0x149626-0x0;var _0x3ec1a4=_0xfb5b[_0x149626];return _0x3ec1a4;};'use strict';var _=require('lodash');var moment=require('moment');var db=require(_0xbfb5('0x0'))['db'];var io=require(_0xbfb5('0x1'))({'host':'localhost','port':0x18eb});function closeInteractions(){var _0x357390=0x0;var _0x48af36=[];return db['Setting'][_0xbfb5('0x2')]({'raw':!![],'attributes':['id',_0xbfb5('0x3')],'where':{'id':0x1}})['then'](function(_0x39244f){_0x357390=_0x39244f[_0xbfb5('0x3')];if(_0x357390){return db[_0xbfb5('0x4')][_0xbfb5('0x5')]({'raw':!![],'attributes':['id',_0xbfb5('0x6')],'where':{'closed':![],'lastMsgAt':{'$lt':moment()[_0xbfb5('0x7')](_0x39244f[_0xbfb5('0x3')],_0xbfb5('0x8'))}}});}else{return[];}})[_0xbfb5('0x9')](function(_0x4b954){_0x48af36=_0x4b954;if(_0x357390){return db[_0xbfb5('0x4')]['update']({'closeReason':_0xbfb5('0xa'),'disposition':_0xbfb5('0xb'),'closed':!![],'closedAt':moment()['format'](_0xbfb5('0xc'))},{'where':{'id':_[_0xbfb5('0xd')](_0x48af36||[],'id')}});}})['then'](function(_0x5e7eda){for(var _0x5a4d10=0x0;_0x5a4d10<_0x48af36[_0xbfb5('0xe')];_0x5a4d10++){io[_0xbfb5('0xf')](_0xbfb5('0x10'),{'id':_0x48af36[_0x5a4d10]['id'],'closed':!![]});}})[_0xbfb5('0x11')](function(_0x4d5f84){console['error'](_0x4d5f84);});}exports['start']=function(){setInterval(function(){return closeInteractions();},0x3c*0x3e8);return closeInteractions();};
\ No newline at end of file
index 83f2264..3c2560f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf969=['exec\x20defaul\x20report\x20id:%s','CustomReportId','exec\x20custom\x20report\x20id:%s','no\x20report\x20id','Schedule','findAll','MailServerOut','keys','jobs','toString','keyBy','difference','intersection','length','exists','stop','deleteJob','delete\x20cron','my\x20id','resolve','run\x20job','cron','startAt','endAt','add','start','add\x20cron','stop\x20cron','isBetween','update','update\x20cron','run','util','path','cron-job-manager','jayson/promise','bluebird','../logger','schedule','../../mysqldb','../../api/analyticDefaultReport/analyticDefaultReport.controller','client','http','info','Try\x20to\x20send\x20a\x20mail\x20to','email','Smtp','service','MailAccount','host','port','secure','authentication','user','pass','\x22%s\x22\x20<%s>','name','bcc','format','subtractNumber','subtractUnit','savename','%s.%s','basename','extname','zip','join','existsSync','status','Sent','message','attachments','text','Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a','Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','sendIfEmpty','empty\x20file,\x20email\x20not\x20sent','request','SendMail','then','error\x20mail','email\x20sent','catch','error','stringify','data','isNil','subtractNumber\x20null\x20or\x20undefined','subtractUnit\x20null\x20or\x20undefined','subtract','YYYY-MM-DD\x20HH:mm:ss','scheduled','output','DefaultReportId'];(function(_0x2ed176,_0x1d3e64){var _0x10f61a=function(_0x5339a5){while(--_0x5339a5){_0x2ed176['push'](_0x2ed176['shift']());}};_0x10f61a(++_0x1d3e64);}(_0xf969,0x13a));var _0x9f96=function(_0x59fc71,_0x4dbf8c){_0x59fc71=_0x59fc71-0x0;var _0x151c37=_0xf969[_0x59fc71];return _0x151c37;};'use strict';var fs=require('fs');var util=require(_0x9f96('0x0'));var path=require(_0x9f96('0x1'));var _=require('lodash');var moment=require('moment');var CronJobManager=require(_0x9f96('0x2'));var jayson=require(_0x9f96('0x3'));var BPromise=require(_0x9f96('0x4'));var logger=require(_0x9f96('0x5'))(_0x9f96('0x6'));var db=require(_0x9f96('0x7'))['db'];var analyticCustomReportController=require('../../api/analyticCustomReport/analyticCustomReport.controller');var analyticDefaultReportController=require(_0x9f96('0x8'));var client=jayson[_0x9f96('0x9')][_0x9f96('0xa')]({'port':0x232b});var manager=new CronJobManager();function handleSendEmail(_0x4f8502,_0x3bcb32){return function(){logger[_0x9f96('0xb')](_0x9f96('0xc'),_0x4f8502[_0x9f96('0xd')]);var _0x1a3948=!![];var _0x44dcaa={'tls':{'rejectUnauthorized':![]}};if(_0x4f8502['MailAccount'][_0x9f96('0xe')][_0x9f96('0xf')]){_0x44dcaa[_0x9f96('0xf')]=_0x4f8502[_0x9f96('0x10')][_0x9f96('0xe')]['service'];}else{_0x44dcaa[_0x9f96('0x11')]=_0x4f8502[_0x9f96('0x10')]['Smtp'][_0x9f96('0x11')];_0x44dcaa[_0x9f96('0x12')]=_0x4f8502[_0x9f96('0x10')]['Smtp'][_0x9f96('0x12')];_0x44dcaa[_0x9f96('0x13')]=_0x4f8502[_0x9f96('0x10')][_0x9f96('0xe')][_0x9f96('0x13')];}if(_0x4f8502[_0x9f96('0x10')][_0x9f96('0xe')][_0x9f96('0x14')]){_0x44dcaa['auth']={'user':_0x4f8502['MailAccount'][_0x9f96('0xe')][_0x9f96('0x15')],'pass':_0x4f8502[_0x9f96('0x10')][_0x9f96('0xe')][_0x9f96('0x16')]};}var _0x4e65e3={'account':_0x44dcaa,'message':{'from':util['format'](_0x9f96('0x17'),_0x4f8502[_0x9f96('0x10')][_0x9f96('0x18')],_0x4f8502[_0x9f96('0x10')][_0x9f96('0xd')]||_0x4f8502[_0x9f96('0x10')][_0x9f96('0xe')]['user']),'to':_0x4f8502[_0x9f96('0xd')],'cc':_0x4f8502['cc'],'bcc':_0x4f8502[_0x9f96('0x19')],'subject':util[_0x9f96('0x1a')]('Report\x20%s\x20last\x20%s\x20%s',_0x3bcb32[_0x9f96('0x18')],_0x4f8502[_0x9f96('0x1b')],_0x4f8502[_0x9f96('0x1c')])}};var _0x5996e1=path['join'](__dirname,'../../files/reports');var _0x1e8165=_0x3bcb32[_0x9f96('0x1d')];var _0x5113a6=util['format'](_0x9f96('0x1e'),path[_0x9f96('0x1f')](_0x3bcb32[_0x9f96('0x1d')],path[_0x9f96('0x20')](_0x3bcb32[_0x9f96('0x1d')])),_0x9f96('0x21'));var _0x36e0b5=path[_0x9f96('0x22')](_0x5996e1,_0x1e8165);var _0x40dcd8=path[_0x9f96('0x22')](_0x5996e1,_0x5113a6);if(fs[_0x9f96('0x23')](_0x36e0b5)){_0x3bcb32[_0x9f96('0x24')]=_0x9f96('0x25');_0x4e65e3[_0x9f96('0x26')][_0x9f96('0x27')]=[{'filename':_0x1e8165,'path':_0x36e0b5}];_0x4e65e3['message'][_0x9f96('0x28')]=util[_0x9f96('0x1a')](_0x9f96('0x29'),JSON['stringify'](_0x3bcb32,null,0x2));}else if(fs[_0x9f96('0x23')](_0x40dcd8)){_0x3bcb32[_0x9f96('0x24')]=_0x9f96('0x25');_0x4e65e3[_0x9f96('0x26')]['attachments']=[{'filename':_0x5113a6,'path':_0x40dcd8}];}else{_0x4e65e3['message'][_0x9f96('0x28')]=_0x9f96('0x2a');if(!_0x4f8502[_0x9f96('0x2b')]){_0x1a3948=![];logger['info'](_0x9f96('0x2c'));}}if(_0x1a3948){return client[_0x9f96('0x2d')](_0x9f96('0x2e'),_0x4e65e3)[_0x9f96('0x2f')](function(_0x48efc0){if(_0x48efc0['error']){return logger['error'](_0x9f96('0x30'),JSON['stringify'](_0x48efc0));}return logger[_0x9f96('0xb')](_0x9f96('0x31'));})[_0x9f96('0x32')](function(_0xde6cf6){return logger[_0x9f96('0x33')](_0x9f96('0x30'),JSON[_0x9f96('0x34')](_0xde6cf6));});}};}function handleError(){return function(_0x53a677){return logger[_0x9f96('0x33')](JSON[_0x9f96('0x34')](_0x53a677));};}function handleResult(_0x1034c9){return function(_0x1ccd5e){logger['info'](_0x9f96('0x35'),JSON[_0x9f96('0x34')](_0x1ccd5e));if(_0x1034c9[_0x9f96('0x10')]&&_0x1034c9[_0x9f96('0x10')][_0x9f96('0xe')]&&!_['isNil'](_0x1034c9[_0x9f96('0xd')])){setTimeout(handleSendEmail(_0x1034c9,_0x1ccd5e),0x3c*0x3e8);}};}function handleJob(_0x51a3e0){return function(){try{if(_[_0x9f96('0x36')](_0x51a3e0[_0x9f96('0x1b')])){return logger[_0x9f96('0xb')](_0x9f96('0x37'));}if(_[_0x9f96('0x36')](_0x51a3e0[_0x9f96('0x1c')])){return logger['info'](_0x9f96('0x38'));}var _0x1ea895={'startDate':moment()[_0x9f96('0x39')](_0x51a3e0[_0x9f96('0x1b')],_0x51a3e0['subtractUnit'])[_0x9f96('0x1a')](_0x9f96('0x3a')),'endDate':moment()[_0x9f96('0x1a')](_0x9f96('0x3a')),'type':_0x9f96('0x3b'),'output':_0x51a3e0[_0x9f96('0x3c')],'name':_0x51a3e0[_0x9f96('0x18')]};if(!_[_0x9f96('0x36')](_0x51a3e0[_0x9f96('0x3d')])){logger['info'](_0x9f96('0x3e'),_0x51a3e0[_0x9f96('0x3d')]);return analyticDefaultReportController['runReport']({'id':_0x51a3e0[_0x9f96('0x3d')]},_0x1ea895)[_0x9f96('0x2f')](handleResult(_0x51a3e0))[_0x9f96('0x32')](handleError());}if(!_['isNil'](_0x51a3e0[_0x9f96('0x3f')])){logger['info'](_0x9f96('0x40'),_0x51a3e0[_0x9f96('0x3f')]);return analyticCustomReportController['runReport']({'id':_0x51a3e0[_0x9f96('0x3f')]},_0x1ea895)['then'](handleResult(_0x51a3e0))[_0x9f96('0x32')](handleError());}}catch(_0x34282e){logger[_0x9f96('0x33')](JSON['stringify'](_0x34282e));}return logger[_0x9f96('0xb')](_0x9f96('0x41'));};}function getJobs(_0x28892b){var _0x9f30a1={};if(_0x28892b){_0x9f30a1['id']=_0x28892b;}return db[_0x9f96('0x42')][_0x9f96('0x43')]({'where':_0x9f30a1,'include':[{'model':db[_0x9f96('0x10')],'attributes':['id',_0x9f96('0x18'),_0x9f96('0xd')],'include':[{'model':db[_0x9f96('0x44')],'as':_0x9f96('0xe')}]}]})['then'](function(_0x9ea7a9){var _0x49f9ea=_[_0x9f96('0x45')](manager[_0x9f96('0x46')]);var _0x35ca22=_['map'](_0x9ea7a9,function(_0x2673b0){return _0x2673b0['id'][_0x9f96('0x47')]();});var _0xe15c07=_[_0x9f96('0x48')](_0x9ea7a9,function(_0x42642e){return _0x42642e['id'][_0x9f96('0x47')]();});var _0x10fedc=_0x28892b?_0x35ca22:_[_0x9f96('0x49')](_0x35ca22,_0x49f9ea);var _0x519a7a=_[_0x9f96('0x4a')](_0x35ca22,_0x49f9ea);var _0x12f84f=_['difference'](_0x49f9ea,_0x35ca22);var _0x4075ba;var _0x4e0a4c;for(_0x4075ba=0x0;_0x4075ba<_0x12f84f[_0x9f96('0x4b')]&&!_0x28892b;_0x4075ba+=0x1){_0x4e0a4c=_0x12f84f[_0x4075ba][_0x9f96('0x47')]();if(manager[_0x9f96('0x4c')](_0x4e0a4c)){manager[_0x9f96('0x4d')](_0x4e0a4c);manager[_0x9f96('0x4e')](_0x4e0a4c);logger['info'](_0x9f96('0x4f'),_0x4e0a4c);}}logger[_0x9f96('0xb')]('toRun',JSON[_0x9f96('0x34')](_0x10fedc));for(_0x4075ba=0x0;_0x4075ba<_0x10fedc[_0x9f96('0x4b')];_0x4075ba+=0x1){_0x4e0a4c=_0x10fedc[_0x4075ba][_0x9f96('0x47')]();logger[_0x9f96('0xb')]('index',_0x4e0a4c);if(_0x28892b){logger[_0x9f96('0xb')](_0x9f96('0x50'),_0x28892b);logger[_0x9f96('0xb')](JSON[_0x9f96('0x34')](_0xe15c07[_0x4e0a4c]));BPromise[_0x9f96('0x51')]()[_0x9f96('0x2f')](handleJob(_0xe15c07[_0x4e0a4c]));logger[_0x9f96('0xb')](_0x9f96('0x52'),_0xe15c07[_0x4e0a4c][_0x9f96('0x18')],_0xe15c07[_0x4e0a4c][_0x9f96('0x53')]);}else if(_0xe15c07[_0x4e0a4c][_0x9f96('0x53')]&&_0xe15c07[_0x4e0a4c]['active']&&moment()['isBetween'](_0xe15c07[_0x4e0a4c][_0x9f96('0x54')],_0xe15c07[_0x4e0a4c][_0x9f96('0x55')])){manager[_0x9f96('0x56')](_0x4e0a4c,_0xe15c07[_0x4e0a4c][_0x9f96('0x53')],handleJob(_0xe15c07[_0x4e0a4c]));manager[_0x9f96('0x57')](_0x4e0a4c);logger[_0x9f96('0xb')](_0x9f96('0x58'),_0xe15c07[_0x4e0a4c][_0x9f96('0x18')],_0xe15c07[_0x4e0a4c][_0x9f96('0x53')]);}else if(manager[_0x9f96('0x4c')](_0x4e0a4c)){manager[_0x9f96('0x4d')](_0x4e0a4c);manager[_0x9f96('0x4e')](_0x4e0a4c);logger['info'](_0x9f96('0x59'),_0xe15c07[_0x4e0a4c][_0x9f96('0x18')],_0xe15c07[_0x4e0a4c][_0x9f96('0x53')]);}}for(_0x4075ba=0x0,_0x4e0a4c;_0x4075ba<_0x519a7a[_0x9f96('0x4b')]&&!_0x28892b;_0x4075ba+=0x1){_0x4e0a4c=_0x519a7a[_0x4075ba][_0x9f96('0x47')]();if(manager['exists'](_0x4e0a4c)){if(_0xe15c07[_0x4e0a4c]['cron']&&_0xe15c07[_0x4e0a4c]['active']&&moment()[_0x9f96('0x5a')](_0xe15c07[_0x4e0a4c][_0x9f96('0x54')],_0xe15c07[_0x4e0a4c][_0x9f96('0x55')])){manager[_0x9f96('0x5b')](_0x4e0a4c,_0xe15c07[_0x4e0a4c][_0x9f96('0x53')],handleJob(_0xe15c07[_0x4e0a4c]));logger[_0x9f96('0xb')](_0x9f96('0x5c'),_0xe15c07[_0x4e0a4c][_0x9f96('0x18')],_0xe15c07[_0x4e0a4c][_0x9f96('0x53')]);}else{manager[_0x9f96('0x4d')](_0x4e0a4c);manager['deleteJob'](_0x4e0a4c);logger[_0x9f96('0xb')]('stop\x20cron',_0xe15c07[_0x4e0a4c][_0x9f96('0x18')],_0xe15c07[_0x4e0a4c][_0x9f96('0x53')]);}}}})['catch'](function(_0x3d729e){logger['error'](JSON[_0x9f96('0x34')](_0x3d729e));});}exports[_0x9f96('0x5d')]=function(_0x3f2e29){return getJobs(_0x3f2e29);};exports[_0x9f96('0x57')]=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};
\ No newline at end of file
+var _0x09fa=['user','name','bcc','Report\x20%s\x20last\x20%s\x20%s','subtractNumber','subtractUnit','../../files/reports','savename','extname','zip','join','existsSync','status','Sent','message','attachments','text','format','Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a','Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','sendIfEmpty','request','SendMail','then','error','error\x20mail','stringify','email\x20sent','catch','data','isNil','subtractNumber\x20null\x20or\x20undefined','subtract','YYYY-MM-DD\x20HH:mm:ss','scheduled','output','DefaultReportId','runReport','CustomReportId','exec\x20custom\x20report\x20id:%s','no\x20report\x20id','Schedule','MailServerOut','keys','jobs','map','toString','keyBy','difference','intersection','exists','stop','deleteJob','toRun','index','my\x20id','cron','isBetween','endAt','add','start','add\x20cron','length','active','startAt','update','update\x20cron','stop\x20cron','run','util','path','cron-job-manager','jayson/promise','bluebird','../logger','schedule','../../api/analyticCustomReport/analyticCustomReport.controller','http','info','Try\x20to\x20send\x20a\x20mail\x20to','email','MailAccount','Smtp','service','host','port','secure','auth'];(function(_0x5eef05,_0x1be989){var _0x56d4b8=function(_0x57993d){while(--_0x57993d){_0x5eef05['push'](_0x5eef05['shift']());}};_0x56d4b8(++_0x1be989);}(_0x09fa,0x14d));var _0xa09f=function(_0x502c7d,_0x2f1285){_0x502c7d=_0x502c7d-0x0;var _0x30b7ed=_0x09fa[_0x502c7d];return _0x30b7ed;};'use strict';var fs=require('fs');var util=require(_0xa09f('0x0'));var path=require(_0xa09f('0x1'));var _=require('lodash');var moment=require('moment');var CronJobManager=require(_0xa09f('0x2'));var jayson=require(_0xa09f('0x3'));var BPromise=require(_0xa09f('0x4'));var logger=require(_0xa09f('0x5'))(_0xa09f('0x6'));var db=require('../../mysqldb')['db'];var analyticCustomReportController=require(_0xa09f('0x7'));var analyticDefaultReportController=require('../../api/analyticDefaultReport/analyticDefaultReport.controller');var client=jayson['client'][_0xa09f('0x8')]({'port':0x232b});var manager=new CronJobManager();function handleSendEmail(_0x363fda,_0x4ffddb){return function(){logger[_0xa09f('0x9')](_0xa09f('0xa'),_0x363fda[_0xa09f('0xb')]);var _0x496fd3=!![];var _0x3ccd51={'tls':{'rejectUnauthorized':![]}};if(_0x363fda[_0xa09f('0xc')][_0xa09f('0xd')][_0xa09f('0xe')]){_0x3ccd51[_0xa09f('0xe')]=_0x363fda[_0xa09f('0xc')]['Smtp']['service'];}else{_0x3ccd51[_0xa09f('0xf')]=_0x363fda[_0xa09f('0xc')]['Smtp'][_0xa09f('0xf')];_0x3ccd51['port']=_0x363fda['MailAccount'][_0xa09f('0xd')][_0xa09f('0x10')];_0x3ccd51[_0xa09f('0x11')]=_0x363fda[_0xa09f('0xc')]['Smtp'][_0xa09f('0x11')];}if(_0x363fda[_0xa09f('0xc')][_0xa09f('0xd')]['authentication']){_0x3ccd51[_0xa09f('0x12')]={'user':_0x363fda['MailAccount'][_0xa09f('0xd')][_0xa09f('0x13')],'pass':_0x363fda[_0xa09f('0xc')][_0xa09f('0xd')]['pass']};}var _0x567aef={'account':_0x3ccd51,'message':{'from':util['format']('\x22%s\x22\x20<%s>',_0x363fda[_0xa09f('0xc')][_0xa09f('0x14')],_0x363fda[_0xa09f('0xc')]['email']||_0x363fda['MailAccount'][_0xa09f('0xd')][_0xa09f('0x13')]),'to':_0x363fda[_0xa09f('0xb')],'cc':_0x363fda['cc'],'bcc':_0x363fda[_0xa09f('0x15')],'subject':util['format'](_0xa09f('0x16'),_0x4ffddb['name'],_0x363fda[_0xa09f('0x17')],_0x363fda[_0xa09f('0x18')])}};var _0x4141b9=path['join'](__dirname,_0xa09f('0x19'));var _0x546d92=_0x4ffddb[_0xa09f('0x1a')];var _0x10aecf=util['format']('%s.%s',path['basename'](_0x4ffddb[_0xa09f('0x1a')],path[_0xa09f('0x1b')](_0x4ffddb[_0xa09f('0x1a')])),_0xa09f('0x1c'));var _0x1392b8=path['join'](_0x4141b9,_0x546d92);var _0x370492=path[_0xa09f('0x1d')](_0x4141b9,_0x10aecf);if(fs[_0xa09f('0x1e')](_0x1392b8)){_0x4ffddb[_0xa09f('0x1f')]=_0xa09f('0x20');_0x567aef[_0xa09f('0x21')][_0xa09f('0x22')]=[{'filename':_0x546d92,'path':_0x1392b8}];_0x567aef[_0xa09f('0x21')][_0xa09f('0x23')]=util[_0xa09f('0x24')](_0xa09f('0x25'),JSON['stringify'](_0x4ffddb,null,0x2));}else if(fs[_0xa09f('0x1e')](_0x370492)){_0x4ffddb[_0xa09f('0x1f')]=_0xa09f('0x20');_0x567aef['message'][_0xa09f('0x22')]=[{'filename':_0x10aecf,'path':_0x370492}];}else{_0x567aef['message'][_0xa09f('0x23')]=_0xa09f('0x26');if(!_0x363fda[_0xa09f('0x27')]){_0x496fd3=![];logger['info']('empty\x20file,\x20email\x20not\x20sent');}}if(_0x496fd3){return client[_0xa09f('0x28')](_0xa09f('0x29'),_0x567aef)[_0xa09f('0x2a')](function(_0x3a94fd){if(_0x3a94fd[_0xa09f('0x2b')]){return logger['error'](_0xa09f('0x2c'),JSON[_0xa09f('0x2d')](_0x3a94fd));}return logger[_0xa09f('0x9')](_0xa09f('0x2e'));})[_0xa09f('0x2f')](function(_0x3da46b){return logger[_0xa09f('0x2b')](_0xa09f('0x2c'),JSON['stringify'](_0x3da46b));});}};}function handleError(){return function(_0x1c9cf5){return logger[_0xa09f('0x2b')](JSON[_0xa09f('0x2d')](_0x1c9cf5));};}function handleResult(_0x3e2c73){return function(_0x80c904){logger[_0xa09f('0x9')](_0xa09f('0x30'),JSON[_0xa09f('0x2d')](_0x80c904));if(_0x3e2c73[_0xa09f('0xc')]&&_0x3e2c73[_0xa09f('0xc')][_0xa09f('0xd')]&&!_[_0xa09f('0x31')](_0x3e2c73[_0xa09f('0xb')])){setTimeout(handleSendEmail(_0x3e2c73,_0x80c904),0x3c*0x3e8);}};}function handleJob(_0x2f837b){return function(){try{if(_[_0xa09f('0x31')](_0x2f837b[_0xa09f('0x17')])){return logger['info'](_0xa09f('0x32'));}if(_['isNil'](_0x2f837b[_0xa09f('0x18')])){return logger[_0xa09f('0x9')]('subtractUnit\x20null\x20or\x20undefined');}var _0x2b7dd3={'startDate':moment()[_0xa09f('0x33')](_0x2f837b[_0xa09f('0x17')],_0x2f837b['subtractUnit'])[_0xa09f('0x24')](_0xa09f('0x34')),'endDate':moment()[_0xa09f('0x24')]('YYYY-MM-DD\x20HH:mm:ss'),'type':_0xa09f('0x35'),'output':_0x2f837b[_0xa09f('0x36')],'name':_0x2f837b[_0xa09f('0x14')]};if(!_[_0xa09f('0x31')](_0x2f837b[_0xa09f('0x37')])){logger[_0xa09f('0x9')]('exec\x20defaul\x20report\x20id:%s',_0x2f837b['DefaultReportId']);return analyticDefaultReportController[_0xa09f('0x38')]({'id':_0x2f837b[_0xa09f('0x37')]},_0x2b7dd3)['then'](handleResult(_0x2f837b))[_0xa09f('0x2f')](handleError());}if(!_[_0xa09f('0x31')](_0x2f837b[_0xa09f('0x39')])){logger['info'](_0xa09f('0x3a'),_0x2f837b[_0xa09f('0x39')]);return analyticCustomReportController[_0xa09f('0x38')]({'id':_0x2f837b[_0xa09f('0x39')]},_0x2b7dd3)[_0xa09f('0x2a')](handleResult(_0x2f837b))[_0xa09f('0x2f')](handleError());}}catch(_0x46a4b4){logger[_0xa09f('0x2b')](JSON['stringify'](_0x46a4b4));}return logger[_0xa09f('0x9')](_0xa09f('0x3b'));};}function getJobs(_0x3c3340){var _0x310b1f={};if(_0x3c3340){_0x310b1f['id']=_0x3c3340;}return db[_0xa09f('0x3c')]['findAll']({'where':_0x310b1f,'include':[{'model':db[_0xa09f('0xc')],'attributes':['id',_0xa09f('0x14'),_0xa09f('0xb')],'include':[{'model':db[_0xa09f('0x3d')],'as':_0xa09f('0xd')}]}]})[_0xa09f('0x2a')](function(_0x345d59){var _0x202206=_[_0xa09f('0x3e')](manager[_0xa09f('0x3f')]);var _0x3a9897=_[_0xa09f('0x40')](_0x345d59,function(_0x32529e){return _0x32529e['id'][_0xa09f('0x41')]();});var _0x1b652b=_[_0xa09f('0x42')](_0x345d59,function(_0xc559a4){return _0xc559a4['id']['toString']();});var _0x362b9f=_0x3c3340?_0x3a9897:_[_0xa09f('0x43')](_0x3a9897,_0x202206);var _0x33f71f=_[_0xa09f('0x44')](_0x3a9897,_0x202206);var _0x3d60c0=_[_0xa09f('0x43')](_0x202206,_0x3a9897);var _0x3fe706;var _0x39d47d;for(_0x3fe706=0x0;_0x3fe706<_0x3d60c0['length']&&!_0x3c3340;_0x3fe706+=0x1){_0x39d47d=_0x3d60c0[_0x3fe706][_0xa09f('0x41')]();if(manager[_0xa09f('0x45')](_0x39d47d)){manager[_0xa09f('0x46')](_0x39d47d);manager[_0xa09f('0x47')](_0x39d47d);logger[_0xa09f('0x9')]('delete\x20cron',_0x39d47d);}}logger[_0xa09f('0x9')](_0xa09f('0x48'),JSON[_0xa09f('0x2d')](_0x362b9f));for(_0x3fe706=0x0;_0x3fe706<_0x362b9f['length'];_0x3fe706+=0x1){_0x39d47d=_0x362b9f[_0x3fe706][_0xa09f('0x41')]();logger[_0xa09f('0x9')](_0xa09f('0x49'),_0x39d47d);if(_0x3c3340){logger['info'](_0xa09f('0x4a'),_0x3c3340);logger[_0xa09f('0x9')](JSON[_0xa09f('0x2d')](_0x1b652b[_0x39d47d]));BPromise['resolve']()['then'](handleJob(_0x1b652b[_0x39d47d]));logger[_0xa09f('0x9')]('run\x20job',_0x1b652b[_0x39d47d][_0xa09f('0x14')],_0x1b652b[_0x39d47d][_0xa09f('0x4b')]);}else if(_0x1b652b[_0x39d47d][_0xa09f('0x4b')]&&_0x1b652b[_0x39d47d]['active']&&moment()[_0xa09f('0x4c')](_0x1b652b[_0x39d47d]['startAt'],_0x1b652b[_0x39d47d][_0xa09f('0x4d')])){manager[_0xa09f('0x4e')](_0x39d47d,_0x1b652b[_0x39d47d][_0xa09f('0x4b')],handleJob(_0x1b652b[_0x39d47d]));manager[_0xa09f('0x4f')](_0x39d47d);logger[_0xa09f('0x9')](_0xa09f('0x50'),_0x1b652b[_0x39d47d][_0xa09f('0x14')],_0x1b652b[_0x39d47d][_0xa09f('0x4b')]);}else if(manager[_0xa09f('0x45')](_0x39d47d)){manager['stop'](_0x39d47d);manager['deleteJob'](_0x39d47d);logger[_0xa09f('0x9')]('stop\x20cron',_0x1b652b[_0x39d47d][_0xa09f('0x14')],_0x1b652b[_0x39d47d][_0xa09f('0x4b')]);}}for(_0x3fe706=0x0,_0x39d47d;_0x3fe706<_0x33f71f[_0xa09f('0x51')]&&!_0x3c3340;_0x3fe706+=0x1){_0x39d47d=_0x33f71f[_0x3fe706][_0xa09f('0x41')]();if(manager[_0xa09f('0x45')](_0x39d47d)){if(_0x1b652b[_0x39d47d][_0xa09f('0x4b')]&&_0x1b652b[_0x39d47d][_0xa09f('0x52')]&&moment()[_0xa09f('0x4c')](_0x1b652b[_0x39d47d][_0xa09f('0x53')],_0x1b652b[_0x39d47d]['endAt'])){manager[_0xa09f('0x54')](_0x39d47d,_0x1b652b[_0x39d47d][_0xa09f('0x4b')],handleJob(_0x1b652b[_0x39d47d]));logger[_0xa09f('0x9')](_0xa09f('0x55'),_0x1b652b[_0x39d47d][_0xa09f('0x14')],_0x1b652b[_0x39d47d][_0xa09f('0x4b')]);}else{manager[_0xa09f('0x46')](_0x39d47d);manager[_0xa09f('0x47')](_0x39d47d);logger[_0xa09f('0x9')](_0xa09f('0x56'),_0x1b652b[_0x39d47d]['name'],_0x1b652b[_0x39d47d][_0xa09f('0x4b')]);}}}})[_0xa09f('0x2f')](function(_0x29756d){logger[_0xa09f('0x2b')](JSON[_0xa09f('0x2d')](_0x29756d));});}exports[_0xa09f('0x57')]=function(_0x32d76d){return getJobs(_0x32d76d);};exports[_0xa09f('0x4f')]=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};
\ No newline at end of file
index b39c6ae..07e9505 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d84=['contacts2','hopper2','catch','util','push','Innocenzo','@xcally.com','now','innocenzo.biondo','CmContact','destroy','log','finished\x20populating','contacts1','CmHopper','hopper1','bulkCreate','then'];(function(_0x5bbac4,_0x5b3821){var _0x16c37f=function(_0xc7c6cf){while(--_0xc7c6cf){_0x5bbac4['push'](_0x5bbac4['shift']());}};_0x16c37f(++_0x5b3821);}(_0x4d84,0x1c5));var _0x44d8=function(_0x264d4d,_0x118fb5){_0x264d4d=_0x264d4d-0x0;var _0xc917e2=_0x4d84[_0x264d4d];return _0xc917e2;};'use strict';var util=require(_0x44d8('0x0'));var db=require('../mysqldb')['db'];var contacts=[];var hopper=[];var contacts2=[];var hopper2=[];for(var i=0x1;i<=0x4b0;i+=0x1){contacts[_0x44d8('0x1')]({'id':i,'firstName':_0x44d8('0x2')+i,'lastName':'Biondo'+i,'phone':0xf879fb460+i,'email':'innocenzo.biondo'+i+_0x44d8('0x3')});}for(var i=0x1;i<=0x4b0;i+=0x1){hopper['push']({'id':i,'active':![],'scheduledat':Date[_0x44d8('0x4')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0x44d8('0x4')](),'updatedAt':Date[_0x44d8('0x4')]()});}for(var i=0x4b1;i<=0x960;i+=0x1){contacts2['push']({'id':i,'firstName':'Innocenzo'+i,'lastName':'Biondo'+i,'phone':0xf879fb460+i,'email':_0x44d8('0x5')+i+'@xcally.com'});}for(var i=0x4b1;i<=0x960;i+=0x1){hopper2['push']({'id':i,'active':![],'scheduledat':Date['now'](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0x44d8('0x4')](),'updatedAt':Date[_0x44d8('0x4')]()});}db[_0x44d8('0x6')][_0x44d8('0x7')]({'where':{}})['then'](function(){return db[_0x44d8('0x6')]['bulkCreate'](contacts);})['then'](function(){console[_0x44d8('0x8')](_0x44d8('0x9'),_0x44d8('0xa'));return db['CmHopper'][_0x44d8('0x7')]({'where':{}});})['then'](function(){return db[_0x44d8('0xb')]['bulkCreate'](hopper);})['then'](function(){console[_0x44d8('0x8')](_0x44d8('0x9'),_0x44d8('0xc'));return db[_0x44d8('0x6')][_0x44d8('0xd')](contacts2);})[_0x44d8('0xe')](function(){console[_0x44d8('0x8')](_0x44d8('0x9'),_0x44d8('0xf'));return db['CmHopper']['bulkCreate'](hopper2);})[_0x44d8('0xe')](function(){console[_0x44d8('0x8')](_0x44d8('0x9'),_0x44d8('0x10'));})[_0x44d8('0x11')](function(_0x2fe2a0){console[_0x44d8('0x8')](_0x2fe2a0);});
\ No newline at end of file
+var _0xb665=['bulkCreate','contacts1','CmHopper','finished\x20populating','hopper1','log','contacts2','hopper2','../mysqldb','push','Biondo','innocenzo.biondo','@xcally.com','now','Innocenzo','CmContact','destroy','then'];(function(_0x2e41e2,_0x4e7250){var _0x2844d6=function(_0x28ce24){while(--_0x28ce24){_0x2e41e2['push'](_0x2e41e2['shift']());}};_0x2844d6(++_0x4e7250);}(_0xb665,0x128));var _0x5b66=function(_0x24c60a,_0x4dca0c){_0x24c60a=_0x24c60a-0x0;var _0x35f041=_0xb665[_0x24c60a];return _0x35f041;};'use strict';var util=require('util');var db=require(_0x5b66('0x0'))['db'];var contacts=[];var hopper=[];var contacts2=[];var hopper2=[];for(var i=0x1;i<=0x4b0;i+=0x1){contacts[_0x5b66('0x1')]({'id':i,'firstName':'Innocenzo'+i,'lastName':_0x5b66('0x2')+i,'phone':0xf879fb460+i,'email':_0x5b66('0x3')+i+_0x5b66('0x4')});}for(var i=0x1;i<=0x4b0;i+=0x1){hopper[_0x5b66('0x1')]({'id':i,'active':![],'scheduledat':Date[_0x5b66('0x5')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0x5b66('0x5')](),'updatedAt':Date[_0x5b66('0x5')]()});}for(var i=0x4b1;i<=0x960;i+=0x1){contacts2[_0x5b66('0x1')]({'id':i,'firstName':_0x5b66('0x6')+i,'lastName':'Biondo'+i,'phone':0xf879fb460+i,'email':_0x5b66('0x3')+i+'@xcally.com'});}for(var i=0x4b1;i<=0x960;i+=0x1){hopper2['push']({'id':i,'active':![],'scheduledat':Date['now'](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0x5b66('0x5')](),'updatedAt':Date['now']()});}db[_0x5b66('0x7')][_0x5b66('0x8')]({'where':{}})[_0x5b66('0x9')](function(){return db[_0x5b66('0x7')][_0x5b66('0xa')](contacts);})[_0x5b66('0x9')](function(){console['log']('finished\x20populating',_0x5b66('0xb'));return db['CmHopper'][_0x5b66('0x8')]({'where':{}});})[_0x5b66('0x9')](function(){return db[_0x5b66('0xc')]['bulkCreate'](hopper);})['then'](function(){console['log'](_0x5b66('0xd'),_0x5b66('0xe'));return db[_0x5b66('0x7')][_0x5b66('0xa')](contacts2);})[_0x5b66('0x9')](function(){console[_0x5b66('0xf')](_0x5b66('0xd'),_0x5b66('0x10'));return db['CmHopper'][_0x5b66('0xa')](hopper2);})[_0x5b66('0x9')](function(){console[_0x5b66('0xf')]('finished\x20populating',_0x5b66('0x11'));})['catch'](function(_0x499d24){console[_0x5b66('0xf')](_0x499d24);});
\ No newline at end of file
index a1c7af8..5deb0a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x157f=['\x22%s\x22\x20<%s>','bulkCreate','then','log','add\x20user','catch','util','../mysqldb','push','format','%s%s','agent','%s%s@xcally.com','password','udp','wss','ulaw','yes','/etc/pki/tls/certs/motion.crt','/etc/pki/tls/private/motion.key','actpass'];(function(_0x290161,_0x99af13){var _0x4bce5b=function(_0x360f46){while(--_0x360f46){_0x290161['push'](_0x290161['shift']());}};_0x4bce5b(++_0x99af13);}(_0x157f,0x141));var _0xf157=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0x157f[_0x397e5f];return _0x5302b8;};'use strict';var util=require(_0xf157('0x0'));var db=require(_0xf157('0x1'))['db'];var users=[];for(var i=0x1;i<=0xc8;i+=0x1){users[_0xf157('0x2')]({'name':util[_0xf157('0x3')](_0xf157('0x4'),_0xf157('0x5'),i),'fullname':util[_0xf157('0x3')](_0xf157('0x4'),_0xf157('0x5'),i),'email':util[_0xf157('0x3')](_0xf157('0x6'),'agent',i),'role':_0xf157('0x5'),'password':_0xf157('0x7'),'internal':0xfa0+i,'type':'friend','transport':[_0xf157('0x8'),'ws',_0xf157('0x9')],'disallow':['all'],'allow':[_0xf157('0xa')],'defaultuser':util[_0xf157('0x3')](_0xf157('0x4'),_0xf157('0x5'),i),'encryption':_0xf157('0xb'),'avpf':_0xf157('0xb'),'force_avp':'yes','icesupport':_0xf157('0xb'),'dtlsenable':_0xf157('0xb'),'dtlsverify':'no','dtlscertfile':_0xf157('0xc'),'dtlsprivatekey':_0xf157('0xd'),'dtlssetup':_0xf157('0xe'),'callerid':util['format'](_0xf157('0xf'),util[_0xf157('0x3')]('%s%s',_0xf157('0x5'),i),0xfa0+i)});}db['User'][_0xf157('0x10')](users)[_0xf157('0x11')](function(){console[_0xf157('0x12')](_0xf157('0x13'));})[_0xf157('0x14')](function(_0x57d7bd){console[_0xf157('0x12')](_0x57d7bd);});
\ No newline at end of file
+var _0xd9d0=['all','ulaw','yes','/etc/pki/tls/certs/motion.crt','/etc/pki/tls/private/motion.key','actpass','\x22%s\x22\x20<%s>','User','bulkCreate','then','add\x20user','catch','log','util','../mysqldb','push','format','agent','%s%s','%s%s@xcally.com','password','friend','udp','wss'];(function(_0x10dc64,_0x11bb29){var _0x9cf98d=function(_0x558d71){while(--_0x558d71){_0x10dc64['push'](_0x10dc64['shift']());}};_0x9cf98d(++_0x11bb29);}(_0xd9d0,0xe5));var _0x0d9d=function(_0x227242,_0x1f77a6){_0x227242=_0x227242-0x0;var _0x2711e8=_0xd9d0[_0x227242];return _0x2711e8;};'use strict';var util=require(_0x0d9d('0x0'));var db=require(_0x0d9d('0x1'))['db'];var users=[];for(var i=0x1;i<=0xc8;i+=0x1){users[_0x0d9d('0x2')]({'name':util[_0x0d9d('0x3')]('%s%s',_0x0d9d('0x4'),i),'fullname':util['format'](_0x0d9d('0x5'),_0x0d9d('0x4'),i),'email':util['format'](_0x0d9d('0x6'),_0x0d9d('0x4'),i),'role':'agent','password':_0x0d9d('0x7'),'internal':0xfa0+i,'type':_0x0d9d('0x8'),'transport':[_0x0d9d('0x9'),'ws',_0x0d9d('0xa')],'disallow':[_0x0d9d('0xb')],'allow':[_0x0d9d('0xc')],'defaultuser':util[_0x0d9d('0x3')]('%s%s',_0x0d9d('0x4'),i),'encryption':_0x0d9d('0xd'),'avpf':_0x0d9d('0xd'),'force_avp':_0x0d9d('0xd'),'icesupport':_0x0d9d('0xd'),'dtlsenable':'yes','dtlsverify':'no','dtlscertfile':_0x0d9d('0xe'),'dtlsprivatekey':_0x0d9d('0xf'),'dtlssetup':_0x0d9d('0x10'),'callerid':util[_0x0d9d('0x3')](_0x0d9d('0x11'),util[_0x0d9d('0x3')](_0x0d9d('0x5'),_0x0d9d('0x4'),i),0xfa0+i)});}db[_0x0d9d('0x12')][_0x0d9d('0x13')](users)[_0x0d9d('0x14')](function(){console['log'](_0x0d9d('0x15'));})[_0x0d9d('0x16')](function(_0x312cda){console[_0x0d9d('0x17')](_0x312cda);});
\ No newline at end of file
index b6ada4f..79e6425 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7c6=['OpenchannelInteraction','OpenchannelInteractions','admin','voice:inbound','voice:outbound','hasOwnProperty','include','push','findAll','ChatQueue','SmsQueue','OpenchannelQueue','Trunk','Campaign','user','getVoiceQueues','getChatQueues','getOpenchannelQueues','getSmsQueues','getMailQueues','all','then','length','voice','chat','fax','mail','openchannel','telephone:%s','trunk:%s','campaign:%s:%s','leave','map','emit','user_has_chat_interactions:remove','user_has_mail_interactions:remove','removeFaxInteractions','user_has_fax_interactions:remove','removeSmsInteractions','user_has_sms_interactions:remove','user_has_openchannel_interactions:remove','catch','log','join','connection','setMaxListeners','address','request','remotePort','connectedAt','SocketIO\x20','nsp','disconnect','DISCONNECTED','CONNECTED','util','../mysqldb','./environment','name','Agents','User','role','agent','telephone','type','ivr','format','user:%s','handshake','query','find','ChatInteractions','MailInteraction','MailInteractions','FaxInteraction','FaxInteractions','SmsInteraction','SmsInteractions'];(function(_0x3e327e,_0x254d35){var _0x9f890a=function(_0x4b35ed){while(--_0x4b35ed){_0x3e327e['push'](_0x3e327e['shift']());}};_0x9f890a(++_0x254d35);}(_0xc7c6,0x85));var _0x6c7c=function(_0x4555d9,_0x7319bb){_0x4555d9=_0x4555d9-0x0;var _0x2c340e=_0xc7c6[_0x4555d9];return _0x2c340e;};'use strict';var _=require('lodash');var util=require(_0x6c7c('0x0'));var BPromise=require('bluebird');var db=require(_0x6c7c('0x1'))['db'];var config=require(_0x6c7c('0x2'));var queryQueues={'attributes':['id',_0x6c7c('0x3')],'include':[{'as':_0x6c7c('0x4'),'model':db[_0x6c7c('0x5')],'attributes':['id',_0x6c7c('0x3'),_0x6c7c('0x6')],'raw':!![],'where':{'role':_0x6c7c('0x7')},'required':![]}]};var queryTelephones={'raw':!![],'attributes':['id',_0x6c7c('0x3')],'where':{'role':_0x6c7c('0x8')}};var queryTrunks={'raw':!![],'attributes':['id',_0x6c7c('0x3')]};var queryAgents={'raw':!![],'attributes':['id',_0x6c7c('0x3')],'where':{'role':_0x6c7c('0x7')}};var queryCampaigns={'raw':!![],'attributes':['id',_0x6c7c('0x3'),_0x6c7c('0x9')],'where':{'type':_0x6c7c('0xa')}};function joinOrLeaveQueues(_0x1111b2,_0x20c82d,_0x4f5147,_0x1dee0f){_0x1111b2[_0x20c82d](util[_0x6c7c('0xb')]('%s:queue:%s',_0x4f5147,_0x1dee0f['name']));if(_0x1dee0f[_0x6c7c('0x4')]){for(var _0x5212d8=0x0;_0x5212d8<_0x1dee0f[_0x6c7c('0x4')]['length'];_0x5212d8+=0x1){_0x1111b2[_0x20c82d](util[_0x6c7c('0xb')](_0x6c7c('0xc'),_0x1dee0f[_0x6c7c('0x4')][_0x5212d8][_0x6c7c('0x3')]));}}}function joinOrLeave(_0x4204a2,_0x3b814b,_0x349f3f){var _0x159b24;if(_0x4204a2[_0x6c7c('0xd')][_0x6c7c('0xe')]['id']){db[_0x6c7c('0x5')][_0x6c7c('0xf')]({'attributes':['id',_0x6c7c('0x3'),_0x6c7c('0x6')],'where':{'id':_0x4204a2['handshake']['query']['id']},'include':[{'model':db['ChatInteraction'],'as':_0x6c7c('0x10'),'attributes':['id'],'raw':!![]},{'model':db[_0x6c7c('0x11')],'as':_0x6c7c('0x12'),'attributes':['id'],'raw':!![]},{'model':db[_0x6c7c('0x13')],'as':_0x6c7c('0x14'),'attributes':['id'],'raw':!![]},{'model':db[_0x6c7c('0x15')],'as':_0x6c7c('0x16'),'attributes':['id'],'raw':!![]},{'model':db[_0x6c7c('0x17')],'as':_0x6c7c('0x18'),'attributes':['id'],'raw':!![]}]})['then'](function(_0x170862){if(_0x170862){_0x159b24=_0x170862;_0x4204a2[_0x3b814b](util[_0x6c7c('0xb')](_0x6c7c('0xc'),_0x170862[_0x6c7c('0x3')]));var _0x375d75=[];switch(_0x170862[_0x6c7c('0x6')]){case _0x6c7c('0x19'):_0x4204a2[_0x3b814b](_0x6c7c('0x1a'));_0x4204a2[_0x3b814b](_0x6c7c('0x1b'));if(queryQueues[_0x6c7c('0x1c')]('include')){delete queryQueues[_0x6c7c('0x1d')];}_0x375d75[_0x6c7c('0x1e')](db['VoiceQueue'][_0x6c7c('0x1f')](queryQueues));_0x375d75['push'](db[_0x6c7c('0x20')]['findAll'](queryQueues));_0x375d75[_0x6c7c('0x1e')](db['FaxQueue']['findAll'](queryQueues));_0x375d75['push'](db[_0x6c7c('0x21')][_0x6c7c('0x1f')](queryQueues));_0x375d75[_0x6c7c('0x1e')](db['MailQueue'][_0x6c7c('0x1f')](queryQueues));_0x375d75[_0x6c7c('0x1e')](db[_0x6c7c('0x22')][_0x6c7c('0x1f')](queryQueues));_0x375d75[_0x6c7c('0x1e')](db[_0x6c7c('0x5')][_0x6c7c('0x1f')](queryTelephones));_0x375d75['push'](db[_0x6c7c('0x23')][_0x6c7c('0x1f')](queryTrunks));_0x375d75[_0x6c7c('0x1e')](db[_0x6c7c('0x24')]['findAll'](queryCampaigns));_0x375d75[_0x6c7c('0x1e')](db[_0x6c7c('0x5')][_0x6c7c('0x1f')](queryAgents));break;case _0x6c7c('0x25'):_0x4204a2[_0x3b814b](_0x6c7c('0x1a'));_0x4204a2[_0x3b814b](_0x6c7c('0x1b'));_0x375d75[_0x6c7c('0x1e')](_0x170862[_0x6c7c('0x26')](queryQueues));_0x375d75[_0x6c7c('0x1e')](_0x170862[_0x6c7c('0x27')](queryQueues));_0x375d75['push'](_0x170862['getFaxQueues'](queryQueues));_0x375d75['push'](_0x170862['getSmsQueues'](queryQueues));_0x375d75[_0x6c7c('0x1e')](_0x170862['getMailQueues'](queryQueues));_0x375d75[_0x6c7c('0x1e')](_0x170862[_0x6c7c('0x28')](queryQueues));_0x375d75['push'](db[_0x6c7c('0x5')][_0x6c7c('0x1f')](queryTelephones));_0x375d75[_0x6c7c('0x1e')](db[_0x6c7c('0x23')][_0x6c7c('0x1f')](queryTrunks));_0x375d75[_0x6c7c('0x1e')](db[_0x6c7c('0x24')][_0x6c7c('0x1f')](queryCampaigns));break;case _0x6c7c('0x7'):_0x4204a2[_0x3b814b]('voice:inbound');_0x4204a2[_0x3b814b]('voice:outbound');_0x375d75[_0x6c7c('0x1e')](_0x170862[_0x6c7c('0x26')]({'attributes':['id',_0x6c7c('0x3')]}));_0x375d75[_0x6c7c('0x1e')](_0x170862['getChatQueues']({'attributes':['id','name']}));_0x375d75[_0x6c7c('0x1e')](_0x170862['getFaxQueues']({'attributes':['id',_0x6c7c('0x3')]}));_0x375d75[_0x6c7c('0x1e')](_0x170862[_0x6c7c('0x29')]({'attributes':['id',_0x6c7c('0x3')]}));_0x375d75[_0x6c7c('0x1e')](_0x170862[_0x6c7c('0x2a')]({'attributes':['id',_0x6c7c('0x3')]}));_0x375d75[_0x6c7c('0x1e')](_0x170862[_0x6c7c('0x28')]({'attributes':['id',_0x6c7c('0x3')]}));break;}return BPromise[_0x6c7c('0x2b')](_0x375d75);}})[_0x6c7c('0x2c')](function(_0x35cf2b){if(_0x35cf2b&&_0x35cf2b['length']){for(var _0x31b064=0x0;_0x31b064<_0x35cf2b['length'];_0x31b064+=0x1){for(var _0x56a33f=0x0;_0x56a33f<_0x35cf2b[_0x31b064][_0x6c7c('0x2d')];_0x56a33f+=0x1){switch(_0x31b064){case 0x0:joinOrLeaveQueues(_0x4204a2,_0x3b814b,_0x6c7c('0x2e'),_0x35cf2b[_0x31b064][_0x56a33f]);break;case 0x1:joinOrLeaveQueues(_0x4204a2,_0x3b814b,_0x6c7c('0x2f'),_0x35cf2b[_0x31b064][_0x56a33f]);break;case 0x2:joinOrLeaveQueues(_0x4204a2,_0x3b814b,_0x6c7c('0x30'),_0x35cf2b[_0x31b064][_0x56a33f]);break;case 0x3:joinOrLeaveQueues(_0x4204a2,_0x3b814b,'sms',_0x35cf2b[_0x31b064][_0x56a33f]);break;case 0x4:joinOrLeaveQueues(_0x4204a2,_0x3b814b,_0x6c7c('0x31'),_0x35cf2b[_0x31b064][_0x56a33f]);break;case 0x5:joinOrLeaveQueues(_0x4204a2,_0x3b814b,_0x6c7c('0x32'),_0x35cf2b[_0x31b064][_0x56a33f]);break;case 0x6:_0x4204a2[_0x3b814b](util[_0x6c7c('0xb')](_0x6c7c('0x33'),_0x35cf2b[_0x31b064][_0x56a33f]['name']));break;case 0x7:_0x4204a2[_0x3b814b](util[_0x6c7c('0xb')](_0x6c7c('0x34'),_0x35cf2b[_0x31b064][_0x56a33f][_0x6c7c('0x3')]));break;case 0x8:_0x4204a2[_0x3b814b](util[_0x6c7c('0xb')](_0x6c7c('0x35'),_0x35cf2b[_0x31b064][_0x56a33f][_0x6c7c('0x9')],_0x35cf2b[_0x31b064][_0x56a33f]['name']));break;case 0x9:_0x4204a2[_0x3b814b](util['format'](_0x6c7c('0xc'),_0x35cf2b[_0x31b064][_0x56a33f][_0x6c7c('0x3')]));break;}}}}})[_0x6c7c('0x2c')](function(){if(_0x3b814b===_0x6c7c('0x36')){var _0x5e258c=_[_0x6c7c('0x37')](_0x159b24['ChatInteractions'],'id');return _0x159b24['removeChatInteractions'](_0x5e258c)['then'](function(){for(var _0x59cf1b=0x0;_0x59cf1b<_0x5e258c[_0x6c7c('0x2d')];_0x59cf1b+=0x1){_0x349f3f[_0x6c7c('0x38')](_0x6c7c('0x39'),{'ChatInteractionId':Number(_0x5e258c[_0x59cf1b]),'UserId':Number(_0x159b24['id'])});}});}})[_0x6c7c('0x2c')](function(){if(_0x3b814b===_0x6c7c('0x36')){var _0x6f8a68=_['map'](_0x159b24[_0x6c7c('0x12')],'id');return _0x159b24['removeMailInteractions'](_0x6f8a68)[_0x6c7c('0x2c')](function(){for(var _0x10bef8=0x0;_0x10bef8<_0x6f8a68[_0x6c7c('0x2d')];_0x10bef8+=0x1){_0x349f3f['emit'](_0x6c7c('0x3a'),{'MailInteractionId':Number(_0x6f8a68[_0x10bef8]),'UserId':Number(_0x159b24['id'])});}});}})[_0x6c7c('0x2c')](function(){if(_0x3b814b==='leave'){var _0x1e8eca=_[_0x6c7c('0x37')](_0x159b24[_0x6c7c('0x14')],'id');return _0x159b24[_0x6c7c('0x3b')](_0x1e8eca)[_0x6c7c('0x2c')](function(){for(var _0x59353d=0x0;_0x59353d<_0x1e8eca[_0x6c7c('0x2d')];_0x59353d+=0x1){_0x349f3f[_0x6c7c('0x38')](_0x6c7c('0x3c'),{'FaxInteractionId':Number(_0x1e8eca[_0x59353d]),'UserId':Number(_0x159b24['id'])});}});}})['then'](function(){if(_0x3b814b===_0x6c7c('0x36')){var _0x2a5c77=_[_0x6c7c('0x37')](_0x159b24[_0x6c7c('0x16')],'id');return _0x159b24[_0x6c7c('0x3d')](_0x2a5c77)['then'](function(){for(var _0x31ed91=0x0;_0x31ed91<_0x2a5c77[_0x6c7c('0x2d')];_0x31ed91+=0x1){_0x349f3f['emit'](_0x6c7c('0x3e'),{'SmsInteractionId':Number(_0x2a5c77[_0x31ed91]),'UserId':Number(_0x159b24['id'])});}});}})[_0x6c7c('0x2c')](function(){if(_0x3b814b==='leave'){var _0x1b3cda=_['map'](_0x159b24[_0x6c7c('0x18')],'id');return _0x159b24['removeOpenchannelInteractions'](_0x1b3cda)[_0x6c7c('0x2c')](function(){for(var _0x35e12c=0x0;_0x35e12c<_0x1b3cda['length'];_0x35e12c+=0x1){_0x349f3f[_0x6c7c('0x38')](_0x6c7c('0x3f'),{'OpenchannelInteractionId':Number(_0x1b3cda[_0x35e12c]),'UserId':Number(_0x159b24['id'])});}});}})[_0x6c7c('0x40')](function(_0x32a3fe){_0x4204a2[_0x6c7c('0x41')](_0x32a3fe);});}}function onDisconnect(_0x1ac24a,_0x3fc415){joinOrLeave(_0x1ac24a,_0x6c7c('0x36'),_0x3fc415);}function onConnect(_0x3e843e){joinOrLeave(_0x3e843e,_0x6c7c('0x42'));}exports['default']=function(_0x5b8c25){_0x5b8c25['on'](_0x6c7c('0x43'),function(_0x12063d){_0x12063d[_0x6c7c('0x44')](0x0);_0x12063d[_0x6c7c('0x45')]=_0x12063d[_0x6c7c('0x46')][_0x6c7c('0x43')]['remoteAddress']+':'+_0x12063d['request'][_0x6c7c('0x43')][_0x6c7c('0x47')];_0x12063d[_0x6c7c('0x48')]=new Date();_0x12063d[_0x6c7c('0x41')]=function(_0x16f586){console[_0x6c7c('0x41')](_0x6c7c('0x49')+_0x12063d[_0x6c7c('0x4a')][_0x6c7c('0x3')]+'['+_0x12063d[_0x6c7c('0x45')]+']',_0x16f586);};_0x12063d['on'](_0x6c7c('0x4b'),function(){onDisconnect(_0x12063d,_0x5b8c25);_0x12063d['log'](_0x6c7c('0x4c'));});onConnect(_0x12063d);_0x12063d[_0x6c7c('0x41')](_0x6c7c('0x4d'));});};
\ No newline at end of file
+var _0x90dc=['mail','openchannel','telephone:%s','trunk:%s','leave','map','removeChatInteractions','user_has_chat_interactions:remove','emit','removeFaxInteractions','removeSmsInteractions','user_has_sms_interactions:remove','removeOpenchannelInteractions','user_has_openchannel_interactions:remove','catch','join','default','address','request','connection','remoteAddress','remotePort','connectedAt','log','SocketIO\x20','disconnect','DISCONNECTED','CONNECTED','lodash','util','bluebird','../mysqldb','./environment','name','Agents','User','role','agent','telephone','type','ivr','format','%s:queue:%s','length','user:%s','handshake','find','ChatInteractions','MailInteraction','MailInteractions','FaxInteraction','FaxInteractions','SmsInteraction','SmsInteractions','OpenchannelInteraction','OpenchannelInteractions','admin','voice:outbound','include','push','VoiceQueue','findAll','ChatQueue','SmsQueue','MailQueue','OpenchannelQueue','Trunk','Campaign','voice:inbound','getChatQueues','getFaxQueues','getSmsQueues','getMailQueues','getOpenchannelQueues','getVoiceQueues','all','then','voice','sms'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x90dc,0x6b));var _0xc90d=function(_0x3ffbc6,_0x4171bb){_0x3ffbc6=_0x3ffbc6-0x0;var _0x3c64ab=_0x90dc[_0x3ffbc6];return _0x3c64ab;};'use strict';var _=require(_0xc90d('0x0'));var util=require(_0xc90d('0x1'));var BPromise=require(_0xc90d('0x2'));var db=require(_0xc90d('0x3'))['db'];var config=require(_0xc90d('0x4'));var queryQueues={'attributes':['id',_0xc90d('0x5')],'include':[{'as':_0xc90d('0x6'),'model':db[_0xc90d('0x7')],'attributes':['id',_0xc90d('0x5'),_0xc90d('0x8')],'raw':!![],'where':{'role':_0xc90d('0x9')},'required':![]}]};var queryTelephones={'raw':!![],'attributes':['id',_0xc90d('0x5')],'where':{'role':_0xc90d('0xa')}};var queryTrunks={'raw':!![],'attributes':['id','name']};var queryAgents={'raw':!![],'attributes':['id','name'],'where':{'role':'agent'}};var queryCampaigns={'raw':!![],'attributes':['id',_0xc90d('0x5'),_0xc90d('0xb')],'where':{'type':_0xc90d('0xc')}};function joinOrLeaveQueues(_0x27adfb,_0x4962ce,_0x3d3ba5,_0x3bbfb5){_0x27adfb[_0x4962ce](util[_0xc90d('0xd')](_0xc90d('0xe'),_0x3d3ba5,_0x3bbfb5[_0xc90d('0x5')]));if(_0x3bbfb5[_0xc90d('0x6')]){for(var _0x2f046c=0x0;_0x2f046c<_0x3bbfb5['Agents'][_0xc90d('0xf')];_0x2f046c+=0x1){_0x27adfb[_0x4962ce](util[_0xc90d('0xd')](_0xc90d('0x10'),_0x3bbfb5['Agents'][_0x2f046c][_0xc90d('0x5')]));}}}function joinOrLeave(_0x4305da,_0x25ef9f,_0xf349ed){var _0xd19769;if(_0x4305da[_0xc90d('0x11')]['query']['id']){db['User'][_0xc90d('0x12')]({'attributes':['id',_0xc90d('0x5'),_0xc90d('0x8')],'where':{'id':_0x4305da[_0xc90d('0x11')]['query']['id']},'include':[{'model':db['ChatInteraction'],'as':_0xc90d('0x13'),'attributes':['id'],'raw':!![]},{'model':db[_0xc90d('0x14')],'as':_0xc90d('0x15'),'attributes':['id'],'raw':!![]},{'model':db[_0xc90d('0x16')],'as':_0xc90d('0x17'),'attributes':['id'],'raw':!![]},{'model':db[_0xc90d('0x18')],'as':_0xc90d('0x19'),'attributes':['id'],'raw':!![]},{'model':db[_0xc90d('0x1a')],'as':_0xc90d('0x1b'),'attributes':['id'],'raw':!![]}]})['then'](function(_0xe7ab15){if(_0xe7ab15){_0xd19769=_0xe7ab15;_0x4305da[_0x25ef9f](util[_0xc90d('0xd')](_0xc90d('0x10'),_0xe7ab15[_0xc90d('0x5')]));var _0x58d0ea=[];switch(_0xe7ab15['role']){case _0xc90d('0x1c'):_0x4305da[_0x25ef9f]('voice:inbound');_0x4305da[_0x25ef9f](_0xc90d('0x1d'));if(queryQueues['hasOwnProperty'](_0xc90d('0x1e'))){delete queryQueues[_0xc90d('0x1e')];}_0x58d0ea[_0xc90d('0x1f')](db[_0xc90d('0x20')][_0xc90d('0x21')](queryQueues));_0x58d0ea[_0xc90d('0x1f')](db[_0xc90d('0x22')]['findAll'](queryQueues));_0x58d0ea[_0xc90d('0x1f')](db['FaxQueue']['findAll'](queryQueues));_0x58d0ea['push'](db[_0xc90d('0x23')][_0xc90d('0x21')](queryQueues));_0x58d0ea[_0xc90d('0x1f')](db[_0xc90d('0x24')][_0xc90d('0x21')](queryQueues));_0x58d0ea[_0xc90d('0x1f')](db[_0xc90d('0x25')][_0xc90d('0x21')](queryQueues));_0x58d0ea[_0xc90d('0x1f')](db[_0xc90d('0x7')][_0xc90d('0x21')](queryTelephones));_0x58d0ea[_0xc90d('0x1f')](db[_0xc90d('0x26')]['findAll'](queryTrunks));_0x58d0ea[_0xc90d('0x1f')](db[_0xc90d('0x27')]['findAll'](queryCampaigns));_0x58d0ea[_0xc90d('0x1f')](db['User']['findAll'](queryAgents));break;case'user':_0x4305da[_0x25ef9f](_0xc90d('0x28'));_0x4305da[_0x25ef9f](_0xc90d('0x1d'));_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15['getVoiceQueues'](queryQueues));_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15[_0xc90d('0x29')](queryQueues));_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15[_0xc90d('0x2a')](queryQueues));_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15[_0xc90d('0x2b')](queryQueues));_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15[_0xc90d('0x2c')](queryQueues));_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15[_0xc90d('0x2d')](queryQueues));_0x58d0ea[_0xc90d('0x1f')](db[_0xc90d('0x7')][_0xc90d('0x21')](queryTelephones));_0x58d0ea[_0xc90d('0x1f')](db['Trunk'][_0xc90d('0x21')](queryTrunks));_0x58d0ea['push'](db[_0xc90d('0x27')]['findAll'](queryCampaigns));break;case'agent':_0x4305da[_0x25ef9f](_0xc90d('0x28'));_0x4305da[_0x25ef9f]('voice:outbound');_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15[_0xc90d('0x2e')]({'attributes':['id',_0xc90d('0x5')]}));_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15[_0xc90d('0x29')]({'attributes':['id','name']}));_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15[_0xc90d('0x2a')]({'attributes':['id',_0xc90d('0x5')]}));_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15[_0xc90d('0x2b')]({'attributes':['id','name']}));_0x58d0ea[_0xc90d('0x1f')](_0xe7ab15[_0xc90d('0x2c')]({'attributes':['id',_0xc90d('0x5')]}));_0x58d0ea['push'](_0xe7ab15['getOpenchannelQueues']({'attributes':['id','name']}));break;}return BPromise[_0xc90d('0x2f')](_0x58d0ea);}})[_0xc90d('0x30')](function(_0x5dbf26){if(_0x5dbf26&&_0x5dbf26['length']){for(var _0x97a75e=0x0;_0x97a75e<_0x5dbf26[_0xc90d('0xf')];_0x97a75e+=0x1){for(var _0x85a112=0x0;_0x85a112<_0x5dbf26[_0x97a75e]['length'];_0x85a112+=0x1){switch(_0x97a75e){case 0x0:joinOrLeaveQueues(_0x4305da,_0x25ef9f,_0xc90d('0x31'),_0x5dbf26[_0x97a75e][_0x85a112]);break;case 0x1:joinOrLeaveQueues(_0x4305da,_0x25ef9f,'chat',_0x5dbf26[_0x97a75e][_0x85a112]);break;case 0x2:joinOrLeaveQueues(_0x4305da,_0x25ef9f,'fax',_0x5dbf26[_0x97a75e][_0x85a112]);break;case 0x3:joinOrLeaveQueues(_0x4305da,_0x25ef9f,_0xc90d('0x32'),_0x5dbf26[_0x97a75e][_0x85a112]);break;case 0x4:joinOrLeaveQueues(_0x4305da,_0x25ef9f,_0xc90d('0x33'),_0x5dbf26[_0x97a75e][_0x85a112]);break;case 0x5:joinOrLeaveQueues(_0x4305da,_0x25ef9f,_0xc90d('0x34'),_0x5dbf26[_0x97a75e][_0x85a112]);break;case 0x6:_0x4305da[_0x25ef9f](util['format'](_0xc90d('0x35'),_0x5dbf26[_0x97a75e][_0x85a112][_0xc90d('0x5')]));break;case 0x7:_0x4305da[_0x25ef9f](util[_0xc90d('0xd')](_0xc90d('0x36'),_0x5dbf26[_0x97a75e][_0x85a112][_0xc90d('0x5')]));break;case 0x8:_0x4305da[_0x25ef9f](util['format']('campaign:%s:%s',_0x5dbf26[_0x97a75e][_0x85a112][_0xc90d('0xb')],_0x5dbf26[_0x97a75e][_0x85a112][_0xc90d('0x5')]));break;case 0x9:_0x4305da[_0x25ef9f](util['format'](_0xc90d('0x10'),_0x5dbf26[_0x97a75e][_0x85a112]['name']));break;}}}}})[_0xc90d('0x30')](function(){if(_0x25ef9f===_0xc90d('0x37')){var _0xb69563=_[_0xc90d('0x38')](_0xd19769[_0xc90d('0x13')],'id');return _0xd19769[_0xc90d('0x39')](_0xb69563)[_0xc90d('0x30')](function(){for(var _0x23d3f4=0x0;_0x23d3f4<_0xb69563[_0xc90d('0xf')];_0x23d3f4+=0x1){_0xf349ed['emit'](_0xc90d('0x3a'),{'ChatInteractionId':Number(_0xb69563[_0x23d3f4]),'UserId':Number(_0xd19769['id'])});}});}})[_0xc90d('0x30')](function(){if(_0x25ef9f===_0xc90d('0x37')){var _0x50f7e2=_['map'](_0xd19769[_0xc90d('0x15')],'id');return _0xd19769['removeMailInteractions'](_0x50f7e2)[_0xc90d('0x30')](function(){for(var _0x8e61d8=0x0;_0x8e61d8<_0x50f7e2['length'];_0x8e61d8+=0x1){_0xf349ed[_0xc90d('0x3b')]('user_has_mail_interactions:remove',{'MailInteractionId':Number(_0x50f7e2[_0x8e61d8]),'UserId':Number(_0xd19769['id'])});}});}})[_0xc90d('0x30')](function(){if(_0x25ef9f==='leave'){var _0x2a029a=_[_0xc90d('0x38')](_0xd19769['FaxInteractions'],'id');return _0xd19769[_0xc90d('0x3c')](_0x2a029a)['then'](function(){for(var _0x42b001=0x0;_0x42b001<_0x2a029a[_0xc90d('0xf')];_0x42b001+=0x1){_0xf349ed[_0xc90d('0x3b')]('user_has_fax_interactions:remove',{'FaxInteractionId':Number(_0x2a029a[_0x42b001]),'UserId':Number(_0xd19769['id'])});}});}})[_0xc90d('0x30')](function(){if(_0x25ef9f===_0xc90d('0x37')){var _0x1ffafd=_['map'](_0xd19769[_0xc90d('0x19')],'id');return _0xd19769[_0xc90d('0x3d')](_0x1ffafd)[_0xc90d('0x30')](function(){for(var _0x2211c8=0x0;_0x2211c8<_0x1ffafd['length'];_0x2211c8+=0x1){_0xf349ed['emit'](_0xc90d('0x3e'),{'SmsInteractionId':Number(_0x1ffafd[_0x2211c8]),'UserId':Number(_0xd19769['id'])});}});}})['then'](function(){if(_0x25ef9f===_0xc90d('0x37')){var _0x50cf1e=_[_0xc90d('0x38')](_0xd19769['OpenchannelInteractions'],'id');return _0xd19769[_0xc90d('0x3f')](_0x50cf1e)[_0xc90d('0x30')](function(){for(var _0x49ec61=0x0;_0x49ec61<_0x50cf1e[_0xc90d('0xf')];_0x49ec61+=0x1){_0xf349ed[_0xc90d('0x3b')](_0xc90d('0x40'),{'OpenchannelInteractionId':Number(_0x50cf1e[_0x49ec61]),'UserId':Number(_0xd19769['id'])});}});}})[_0xc90d('0x41')](function(_0x1cbe7a){_0x4305da['log'](_0x1cbe7a);});}}function onDisconnect(_0x12ccbc,_0x479d38){joinOrLeave(_0x12ccbc,_0xc90d('0x37'),_0x479d38);}function onConnect(_0x4c40e4){joinOrLeave(_0x4c40e4,_0xc90d('0x42'));}exports[_0xc90d('0x43')]=function(_0xd8aa17){_0xd8aa17['on']('connection',function(_0x420080){_0x420080['setMaxListeners'](0x0);_0x420080[_0xc90d('0x44')]=_0x420080[_0xc90d('0x45')][_0xc90d('0x46')][_0xc90d('0x47')]+':'+_0x420080[_0xc90d('0x45')][_0xc90d('0x46')][_0xc90d('0x48')];_0x420080[_0xc90d('0x49')]=new Date();_0x420080[_0xc90d('0x4a')]=function(_0xda59d6){console[_0xc90d('0x4a')](_0xc90d('0x4b')+_0x420080['nsp'][_0xc90d('0x5')]+'['+_0x420080[_0xc90d('0x44')]+']',_0xda59d6);};_0x420080['on'](_0xc90d('0x4c'),function(){onDisconnect(_0x420080,_0xd8aa17);_0x420080[_0xc90d('0x4a')](_0xc90d('0x4d'));});onConnect(_0x420080);_0x420080['log'](_0xc90d('0x4e'));});};
\ No newline at end of file
index 8ff91ac..c0973dd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa81e=['Fax','FaxInteraction','FaxMessage','Mail','MailInteraction','MailMessage','Openchannel','OpenchannelInteraction','request','EventManager','Trigger,\x20%s','error','code','direction','User','find','UserId','name','interface','format','SIP/%s','channel','incomingmessage','catch','get','event','opened','closed','then','default','length','hasOwnProperty','model','hook','callback','toLowerCase','condition','../../mysqldb','../logger','triggers','client','http','Chat','ChatInteraction','afterCreate','newinteraction','afterUpdate','closedinteraction','ChatMessage','newmessage','Sms','SmsInteraction','SmsMessage'];(function(_0x33c8b3,_0x27dc52){var _0x25089b=function(_0x392058){while(--_0x392058){_0x33c8b3['push'](_0x33c8b3['shift']());}};_0x25089b(++_0x27dc52);}(_0xa81e,0x8f));var _0xea81=function(_0x16b9ed,_0x56517a){_0x16b9ed=_0x16b9ed-0x0;var _0x66b1f8=_0xa81e[_0x16b9ed];return _0x66b1f8;};'use strict';var util=require('util');var db=require(_0xea81('0x0'))['db'];var jayson=require('jayson/promise');var logger=require(_0xea81('0x1'))(_0xea81('0x2'));var client=jayson[_0xea81('0x3')][_0xea81('0x4')]({'port':0x232a});var triggers=[{'channel':_0xea81('0x5'),'model':_0xea81('0x6'),'event':_0xea81('0x7'),'condition':_0xea81('0x8'),'callback':afterCreate},{'channel':_0xea81('0x5'),'model':_0xea81('0x6'),'event':_0xea81('0x9'),'condition':_0xea81('0xa'),'callback':afterUpdate},{'channel':_0xea81('0x5'),'model':_0xea81('0xb'),'event':_0xea81('0x7'),'condition':_0xea81('0xc'),'callback':afterCreateMessage},{'channel':_0xea81('0xd'),'model':_0xea81('0xe'),'event':_0xea81('0x7'),'condition':_0xea81('0x8'),'callback':afterCreate},{'channel':_0xea81('0xd'),'model':_0xea81('0xe'),'event':_0xea81('0x9'),'condition':_0xea81('0xa'),'callback':afterUpdate},{'channel':_0xea81('0xd'),'model':_0xea81('0xf'),'event':_0xea81('0x7'),'condition':'newmessage','callback':afterCreateMessage},{'channel':'Fax','model':'FaxInteraction','event':_0xea81('0x7'),'condition':_0xea81('0x8'),'callback':afterCreate},{'channel':_0xea81('0x10'),'model':_0xea81('0x11'),'event':'afterUpdate','condition':_0xea81('0xa'),'callback':afterUpdate},{'channel':_0xea81('0x10'),'model':_0xea81('0x12'),'event':_0xea81('0x7'),'condition':'newmessage','callback':afterCreateMessage},{'channel':_0xea81('0x13'),'model':_0xea81('0x14'),'event':_0xea81('0x7'),'condition':_0xea81('0x8'),'callback':afterCreate},{'channel':_0xea81('0x13'),'model':'MailInteraction','event':_0xea81('0x9'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0xea81('0x13'),'model':_0xea81('0x15'),'event':_0xea81('0x7'),'condition':_0xea81('0xc'),'callback':afterCreateMessage},{'channel':_0xea81('0x16'),'model':_0xea81('0x17'),'event':'afterCreate','condition':_0xea81('0x8'),'callback':afterCreate},{'channel':_0xea81('0x16'),'model':_0xea81('0x17'),'event':_0xea81('0x9'),'condition':_0xea81('0xa'),'callback':afterUpdate},{'channel':_0xea81('0x16'),'model':'OpenchannelMessage','event':_0xea81('0x7'),'condition':'newmessage','callback':afterCreateMessage}];function request(_0x1d5390){return client[_0xea81('0x18')](_0xea81('0x19'),_0x1d5390)['then'](function(_0x5ad87f){logger['info'](_0xea81('0x1a'),_0xea81('0x19'),_0x5ad87f);if(_0x5ad87f[_0xea81('0x1b')]){if(_0x5ad87f[_0xea81('0x1b')][_0xea81('0x1c')]===0x1f4){logger[_0xea81('0x1b')](_0xea81('0x1a'),_0xea81('0x19'),_0x5ad87f['error']);}}})['catch'](function(_0x21f0b2){logger[_0xea81('0x1b')](_0xea81('0x1a'),_0xea81('0x19'),_0x21f0b2);});}function afterCreateMessage(_0xb00fb3,_0x2231d5){return function(_0xe1b305,_0x370800){_0xe1b305=_0xe1b305['get']({'plain':!![]});_0xe1b305['channel']=_0xb00fb3;_0xe1b305['event']=_0xe1b305[_0xea81('0x1d')];if(_0xe1b305['UserId']){return db[_0xea81('0x1e')][_0xea81('0x1f')]({'where':{'id':_0xe1b305[_0xea81('0x20')]},'attributes':['id',_0xea81('0x21')],'raw':!![]})['then'](function(_0x113f50){_0xe1b305[_0xea81('0x22')]=util[_0xea81('0x23')](_0xea81('0x24'),_0x113f50['name']);_0xe1b305[_0xea81('0x25')]=_0xb00fb3;return request({'event':_0xea81('0x26'),'message':_0xe1b305});})[_0xea81('0x27')](function(_0x14b1ec){console[_0xea81('0x1b')](_0x14b1ec);});}else{return request({'event':'outgoingmessage','message':_0xe1b305});}};}function afterCreate(_0x24229c,_0x1971e4){return function(_0x52c0a5,_0x46585b){_0x52c0a5=_0x52c0a5[_0xea81('0x28')]({'plain':!![]});_0x52c0a5['channel']=_0x24229c;_0x52c0a5[_0xea81('0x29')]=_0xea81('0x2a');return request({'event':_0x1971e4,'message':_0x52c0a5});};}function afterUpdate(_0x17a862,_0x46a5f3){return function(_0xb9b542,_0x326349){if(_0xb9b542['changed'](_0xea81('0x2b'))&&_0xb9b542['closed']){_0xb9b542=_0xb9b542['get']({'plain':!![]});_0xb9b542[_0xea81('0x25')]=_0x17a862;_0xb9b542[_0xea81('0x29')]=_0xea81('0x2b');if(_0xb9b542['UserId']){return db[_0xea81('0x1e')]['find']({'where':{'id':_0xb9b542[_0xea81('0x20')]},'attributes':['id',_0xea81('0x21')],'raw':!![]})[_0xea81('0x2c')](function(_0x51df2c){_0xb9b542['interface']=util[_0xea81('0x23')](_0xea81('0x24'),_0x51df2c[_0xea81('0x21')]);return request({'event':_0x46a5f3,'message':_0xb9b542});})[_0xea81('0x27')](function(_0x63e466){console[_0xea81('0x1b')](_0x63e466);});}else{return request({'event':_0x46a5f3,'message':_0xb9b542});}}};}exports[_0xea81('0x2d')]=function(){for(var _0x302c52=0x0;_0x302c52<triggers[_0xea81('0x2e')];_0x302c52+=0x1){if(db[_0xea81('0x2f')](triggers[_0x302c52][_0xea81('0x30')])){db[triggers[_0x302c52]['model']][_0xea81('0x31')](triggers[_0x302c52][_0xea81('0x29')],triggers[_0x302c52][_0xea81('0x32')](triggers[_0x302c52][_0xea81('0x25')][_0xea81('0x33')](),triggers[_0x302c52][_0xea81('0x34')]));}}};
\ No newline at end of file
+var _0x0512=['opened','changed','closed','format','default','hasOwnProperty','model','hook','callback','toLowerCase','condition','util','../../mysqldb','jayson/promise','../logger','triggers','Chat','afterCreate','ChatInteraction','afterUpdate','ChatMessage','Sms','SmsInteraction','newinteraction','closedinteraction','SmsMessage','newmessage','Fax','FaxInteraction','FaxMessage','Mail','MailInteraction','MailMessage','Openchannel','OpenchannelInteraction','OpenchannelMessage','request','EventManager','then','info','Trigger,\x20%s','error','code','catch','channel','event','direction','User','find','UserId','name','SIP/%s','outgoingmessage','get'];(function(_0x1d7f24,_0x333384){var _0x20e84f=function(_0x4bff70){while(--_0x4bff70){_0x1d7f24['push'](_0x1d7f24['shift']());}};_0x20e84f(++_0x333384);}(_0x0512,0xe3));var _0x2051=function(_0x1079cd,_0x13ce5b){_0x1079cd=_0x1079cd-0x0;var _0x3936ce=_0x0512[_0x1079cd];return _0x3936ce;};'use strict';var util=require(_0x2051('0x0'));var db=require(_0x2051('0x1'))['db'];var jayson=require(_0x2051('0x2'));var logger=require(_0x2051('0x3'))(_0x2051('0x4'));var client=jayson['client']['http']({'port':0x232a});var triggers=[{'channel':_0x2051('0x5'),'model':'ChatInteraction','event':_0x2051('0x6'),'condition':'newinteraction','callback':afterCreate},{'channel':_0x2051('0x5'),'model':_0x2051('0x7'),'event':_0x2051('0x8'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0x2051('0x5'),'model':_0x2051('0x9'),'event':'afterCreate','condition':'newmessage','callback':afterCreateMessage},{'channel':_0x2051('0xa'),'model':_0x2051('0xb'),'event':_0x2051('0x6'),'condition':_0x2051('0xc'),'callback':afterCreate},{'channel':_0x2051('0xa'),'model':_0x2051('0xb'),'event':'afterUpdate','condition':_0x2051('0xd'),'callback':afterUpdate},{'channel':_0x2051('0xa'),'model':_0x2051('0xe'),'event':_0x2051('0x6'),'condition':_0x2051('0xf'),'callback':afterCreateMessage},{'channel':_0x2051('0x10'),'model':_0x2051('0x11'),'event':'afterCreate','condition':_0x2051('0xc'),'callback':afterCreate},{'channel':'Fax','model':_0x2051('0x11'),'event':_0x2051('0x8'),'condition':_0x2051('0xd'),'callback':afterUpdate},{'channel':_0x2051('0x10'),'model':_0x2051('0x12'),'event':_0x2051('0x6'),'condition':_0x2051('0xf'),'callback':afterCreateMessage},{'channel':'Mail','model':'MailInteraction','event':_0x2051('0x6'),'condition':'newinteraction','callback':afterCreate},{'channel':_0x2051('0x13'),'model':_0x2051('0x14'),'event':_0x2051('0x8'),'condition':_0x2051('0xd'),'callback':afterUpdate},{'channel':'Mail','model':_0x2051('0x15'),'event':'afterCreate','condition':_0x2051('0xf'),'callback':afterCreateMessage},{'channel':_0x2051('0x16'),'model':'OpenchannelInteraction','event':_0x2051('0x6'),'condition':'newinteraction','callback':afterCreate},{'channel':_0x2051('0x16'),'model':_0x2051('0x17'),'event':_0x2051('0x8'),'condition':_0x2051('0xd'),'callback':afterUpdate},{'channel':_0x2051('0x16'),'model':_0x2051('0x18'),'event':_0x2051('0x6'),'condition':_0x2051('0xf'),'callback':afterCreateMessage}];function request(_0x11c7ba){return client[_0x2051('0x19')](_0x2051('0x1a'),_0x11c7ba)[_0x2051('0x1b')](function(_0x2d441b){logger[_0x2051('0x1c')](_0x2051('0x1d'),_0x2051('0x1a'),_0x2d441b);if(_0x2d441b[_0x2051('0x1e')]){if(_0x2d441b[_0x2051('0x1e')][_0x2051('0x1f')]===0x1f4){logger[_0x2051('0x1e')]('Trigger,\x20%s','EventManager',_0x2d441b[_0x2051('0x1e')]);}}})[_0x2051('0x20')](function(_0x403bd7){logger['error'](_0x2051('0x1d'),_0x2051('0x1a'),_0x403bd7);});}function afterCreateMessage(_0x44373e,_0x270391){return function(_0x4f1ed6,_0x22b0e6){_0x4f1ed6=_0x4f1ed6['get']({'plain':!![]});_0x4f1ed6[_0x2051('0x21')]=_0x44373e;_0x4f1ed6[_0x2051('0x22')]=_0x4f1ed6[_0x2051('0x23')];if(_0x4f1ed6['UserId']){return db[_0x2051('0x24')][_0x2051('0x25')]({'where':{'id':_0x4f1ed6[_0x2051('0x26')]},'attributes':['id',_0x2051('0x27')],'raw':!![]})[_0x2051('0x1b')](function(_0x316ea7){_0x4f1ed6['interface']=util['format'](_0x2051('0x28'),_0x316ea7[_0x2051('0x27')]);_0x4f1ed6[_0x2051('0x21')]=_0x44373e;return request({'event':'incomingmessage','message':_0x4f1ed6});})['catch'](function(_0x1e0814){console[_0x2051('0x1e')](_0x1e0814);});}else{return request({'event':_0x2051('0x29'),'message':_0x4f1ed6});}};}function afterCreate(_0x4bf38b,_0x29d6bf){return function(_0x20fe93,_0x48a70c){_0x20fe93=_0x20fe93[_0x2051('0x2a')]({'plain':!![]});_0x20fe93['channel']=_0x4bf38b;_0x20fe93[_0x2051('0x22')]=_0x2051('0x2b');return request({'event':_0x29d6bf,'message':_0x20fe93});};}function afterUpdate(_0x1b5f98,_0x23e99e){return function(_0x46527d,_0x275635){if(_0x46527d[_0x2051('0x2c')](_0x2051('0x2d'))&&_0x46527d[_0x2051('0x2d')]){_0x46527d=_0x46527d[_0x2051('0x2a')]({'plain':!![]});_0x46527d[_0x2051('0x21')]=_0x1b5f98;_0x46527d[_0x2051('0x22')]=_0x2051('0x2d');if(_0x46527d[_0x2051('0x26')]){return db[_0x2051('0x24')][_0x2051('0x25')]({'where':{'id':_0x46527d['UserId']},'attributes':['id','name'],'raw':!![]})[_0x2051('0x1b')](function(_0x58af6b){_0x46527d['interface']=util[_0x2051('0x2e')](_0x2051('0x28'),_0x58af6b['name']);return request({'event':_0x23e99e,'message':_0x46527d});})[_0x2051('0x20')](function(_0x258fb3){console[_0x2051('0x1e')](_0x258fb3);});}else{return request({'event':_0x23e99e,'message':_0x46527d});}}};}exports[_0x2051('0x2f')]=function(){for(var _0x47e43a=0x0;_0x47e43a<triggers['length'];_0x47e43a+=0x1){if(db[_0x2051('0x30')](triggers[_0x47e43a][_0x2051('0x31')])){db[triggers[_0x47e43a][_0x2051('0x31')]][_0x2051('0x32')](triggers[_0x47e43a][_0x2051('0x22')],triggers[_0x47e43a][_0x2051('0x33')](triggers[_0x47e43a][_0x2051('0x21')][_0x2051('0x34')](),triggers[_0x47e43a][_0x2051('0x35')]));}}};
\ No newline at end of file
index a36bf3e..c9f046d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5c19=['voice','mail','fax','sms','openchannel','toLowerCase','includes','lodash'];(function(_0x1e0a46,_0x3e92cc){var _0x43fab9=function(_0x3ffb5c){while(--_0x3ffb5c){_0x1e0a46['push'](_0x1e0a46['shift']());}};_0x43fab9(++_0x3e92cc);}(_0x5c19,0x1bf));var _0x95c1=function(_0xab2f46,_0xf5cd3c){_0xab2f46=_0xab2f46-0x0;var _0x13e330=_0x5c19[_0xab2f46];return _0x13e330;};'use strict';var _=require(_0x95c1('0x0'));var channels=[_0x95c1('0x1'),_0x95c1('0x2'),'chat',_0x95c1('0x3'),_0x95c1('0x4'),_0x95c1('0x5')];module['exports']={'getChannels':function(){return channels;},'isValidChannel':function(_0x5d040b){_0x5d040b=_0x5d040b[_0x95c1('0x6')]();return _[_0x95c1('0x7')](channels,_0x5d040b);}};
\ No newline at end of file
+var _0xc00a=['exports','toLowerCase','includes','lodash','voice','chat','fax','sms'];(function(_0x17d9e3,_0x1f969c){var _0x14192d=function(_0x159745){while(--_0x159745){_0x17d9e3['push'](_0x17d9e3['shift']());}};_0x14192d(++_0x1f969c);}(_0xc00a,0x1f3));var _0xac00=function(_0xd8323,_0x28a00e){_0xd8323=_0xd8323-0x0;var _0x583d69=_0xc00a[_0xd8323];return _0x583d69;};'use strict';var _=require(_0xac00('0x0'));var channels=[_0xac00('0x1'),'mail',_0xac00('0x2'),_0xac00('0x3'),_0xac00('0x4'),'openchannel'];module[_0xac00('0x5')]={'getChannels':function(){return channels;},'isValidChannel':function(_0x4ede0a){_0x4ede0a=_0x4ede0a[_0xac00('0x6')]();return _[_0xac00('0x7')](channels,_0x4ede0a);}};
\ No newline at end of file
index fff83b0..9cea3b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xad9d=['404','status','render','json','send','exports'];(function(_0x4cbb3e,_0x9a48bf){var _0x511ec3=function(_0x22f0a0){while(--_0x22f0a0){_0x4cbb3e['push'](_0x4cbb3e['shift']());}};_0x511ec3(++_0x9a48bf);}(_0xad9d,0x1e5));var _0xdad9=function(_0x27ddc1,_0x336d4b){_0x27ddc1=_0x27ddc1-0x0;var _0x138e37=_0xad9d[_0x27ddc1];return _0x138e37;};'use strict';module[_0xdad9('0x0')][0x194]=function pageNotFound(_0x396635,_0x5ba966){var _0x4f4eea=_0xdad9('0x1');var _0x383e3d=0x194;var _0x5173e4={'status':_0x383e3d};_0x5ba966[_0xdad9('0x2')](_0x5173e4['status']);_0x5ba966[_0xdad9('0x3')](_0x4f4eea,{},function(_0x55c548,_0x153b14){if(_0x55c548){return _0x5ba966[_0xdad9('0x2')](_0x5173e4['status'])[_0xdad9('0x4')](_0x5173e4);}_0x5ba966[_0xdad9('0x5')](_0x153b14);});};
\ No newline at end of file
+var _0xe26d=['json','send','status'];(function(_0x5741d5,_0x12726c){var _0x405e9a=function(_0x4f890e){while(--_0x4f890e){_0x5741d5['push'](_0x5741d5['shift']());}};_0x405e9a(++_0x12726c);}(_0xe26d,0xaa));var _0xde26=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xe26d[_0x14add3];return _0x4a174f;};'use strict';module['exports'][0x194]=function pageNotFound(_0x5ea058,_0x10265b){var _0x4a8e99='404';var _0x2b8dcb=0x194;var _0x532de6={'status':_0x2b8dcb};_0x10265b['status'](_0x532de6[_0xde26('0x0')]);_0x10265b['render'](_0x4a8e99,{},function(_0x5f0b1f,_0x2e437c){if(_0x5f0b1f){return _0x10265b[_0xde26('0x0')](_0x532de6[_0xde26('0x0')])[_0xde26('0x1')](_0x532de6);}_0x10265b[_0xde26('0x2')](_0x2e437c);});};
\ No newline at end of file
diff --git a/server/migrations/2.0.72.js b/server/migrations/2.0.72.js
new file mode 100644 (file)
index 0000000..a97e286
--- /dev/null
@@ -0,0 +1,166 @@
+'use strict';
+
+var BPromise = require('bluebird');
+var util = require('util');
+
+var logger = require('../config/logger')('migration');
+
+var Sequence = function() {};
+
+Sequence.prototype.enqueue = function(fn) {
+    this.tail = this.tail ? this.tail.finally(fn) : fn();
+};
+
+var Migration = function(queryInterface) {
+    this.queryInterface = queryInterface;
+    this.sequence = new Sequence();
+};
+
+Migration.prototype.changeColumn = function(table, column, type) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .changeColumn(table, column, type)
+            .then(function() {
+                logger.info('Changed column %s in table %s', column, table);
+            })
+            .catch(function(err) {
+                logger.info(JSON.stringify(err));
+            });
+    });
+};
+
+Migration.prototype.addColumn = function(table, column, type) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .addColumn(table, column, type)
+            .then(function() {
+                logger.info('Added column %s to %s', column, table);
+            })
+            .catch(function(err) {
+                logger.info(JSON.stringify(err));
+            });
+    });
+};
+
+Migration.prototype.dropTable = function(table) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .dropTable(table, {
+                force: true
+            })
+            .then(function() {
+                logger.info('table dropped %s', table);
+            })
+            .catch(function(err) {
+                logger.info(JSON.stringify(err));
+            });
+    });
+};
+
+Migration.prototype.addIndex = function(table, column, 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 user_has_voice_queues_rt
+            migration.query('DELETE FROM user_has_voice_queues_rt WHERE UserId NOT IN (SELECT id FROM users WHERE role = \'agent\')');
+            // END user_has_voice_queues_rt
+
+            //START REPORT_SQUARE
+            migration.addIndex('report_square', ['uniqueid', 'project_name'], 'uid_pname');
+
+            migration.addIndex('report_square', ['leaveAt'], 'leaveAt');
+            //END REPORT_SQUARE
+
+            // START FINAL
+            migration.final(resolve);
+            // END FINAL
+        });
+    },
+
+    down: function(queryInterface, Sequelize) {
+        // var migration = new Migration(queryInterface);
+    }
+};
\ No newline at end of file
index 572cee1..7d28c4a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3f57=['VoicePrefixes','user_has_voice_prefixes','ChatWebsites','user_has_chat_websites','FaxAccounts','user_has_fax_accounts','user_has_mail_accounts','OpenchannelAccounts','SmsAccounts','user_has_sms_accounts','SquareProjects','user_has_square_projects','VoiceExtension','SpiedAgents','ChanSpyId','Applications','moh_has_sounds','VoiceQueueId','Hoppers','CmHopperHistory','HopperHistories','HopperBlacks','JscriptySessions','Trunk','TrunkId','TrunkBackup','TrunkBackupId','belongsTo','IntervalId','voice_queues_has_cm_lists','Agents','Teams','team_has_voice_queues','BlackLists','voice_queues_has_cm_blacklists','Messages','mailboxuser','mailbox','QueueCalls','uniqueid','AgentReports','Contact','ContactId','MailAccountId','MailServerOut','hasOne','Imap','Smtp','Dispositions','CannedAnswer','Answers','Interactions','List','ListId','TemplateId','team_has_mail_queues','MailInteractionId','Account','Owner','mail_interaction_has_tags','Tags','ThroughTags','Users','Attachments','Interaction','restrict','FaxAccountId','TagId','fax_interaction_has_tags','FaxInteractionId','AttachmentId','SmsAccountId','SmsApplication','SmsInteractionId','sms_interaction_has_tags','team_has_sms_queues','OpenchannelAccountId','user_has_openchannel_accounts','OpenchannelQueueId','OpenchannelInteractionId','openchannel_interaction_has_tags','ChatWebsiteId','ChatApplication','Agent','Queue','ChatQueueId','Website','ChatInteractionId','chat_interaction_has_tags','team_has_chat_queues','ChatInternalMessage','ChatGroupId','Contacts','CompanyId','cm_contact_has_tags','Campaign','CampaignId','All','OneAll','Any','OneAny','Actions','Intervals','MailApplications','ChatApplications','SmsApplications','DefaultReportId','AnalyticCustomReport','CustomReportId','Trigger','AllConditions','AllCondition','TriggerAllId','AnyConditions','AnyCondition','TriggerAnyId','TriggerId','Fields','MetricId','Configurations','AccountId','SubjectId','Descriptions','DescriptionId','FieldId','Description','Field','VariableId','SugarcrmConfiguration','Subjects','DeskField','int_desk_configuration_has_tags','Subject','ZendeskField','int_zendesk_configuration_has_tags','FreshdeskAccount','int_freshdesk_configuration_has_tags','VtigerConfiguration','int_vtiger_configuration_has_tags','FromId','ToId','SessionId','ProjectId','user_has_teams','team_has_fax_queues','OpenchannelQueues','SquareProjectId','campaigns_has_cm_lists','campaigns_has_cm_blacklists','FromMailAccountId','FromAccount','FromUserId','FromAgent','ToUserId','ToMailQueueId','ToQueue','ToMailAccountId','ToAccount','ToAgent','ToChatWebsiteId','FaxTransferReport','ToFaxQueueId','ToFaxAccountId','FromOpenchannelAccountId','ToOpenchannelAccountId','FromSmsAccountId','ToSmsQueueId','ToSmsAccountId','CustomFields','exports','path','../config/environment','sequelize','jstz','defaultsDeep','motion2','xcall','xC@LL1234','127.0.0.1','mysql','utf8mb4','utf8_general_ci','sequelizeHistory','name','utf8','database','password','options','User','import','../api/user/user.model','VoiceChanSpy','../api/voiceChanSpy/voiceChanSpy.model','VoiceContext','../api/voiceContext/voiceContext.model','../api/voiceExtension/voiceExtension.model','VoiceMusicOnHold','../api/voiceMusicOnHold/voiceMusicOnHold.model','VoiceQueue','../api/voiceQueue/voiceQueue.model','VoiceRecording','../api/voiceRecording/voiceRecording.model','VoiceMail','VoiceMailMessage','../api/voiceMailMessage/voiceMailMessage.model','VoiceCallReport','VoiceDialReport','../api/voiceDialReport/voiceDialReport.model','VoiceAgentReport','../api/voiceAgentReport/voiceAgentReport.model','VoiceQueueReport','../api/voiceQueueReport/voiceQueueReport.model','MemberReport','../api/memberReport/memberReport.model','VoiceTransferReport','../api/voiceTransferReport/voiceTransferReport.model','UserVoiceQueueRt','../api/userVoiceQueueRt/userVoiceQueueRt.model','UserVoiceQueue','../api/userChatQueue/userChatQueue.model','UserMailQueue','../api/userMailQueue/userMailQueue.model','UserFaxQueue','UserSmsQueue','../api/userSmsQueue/userSmsQueue.model','UserOpenchannelQueue','../api/userOpenchannelQueue/userOpenchannelQueue.model','MailServerIn','../api/mailServerOut/mailServerOut.model','MailAccount','../api/mailAccount/mailAccount.model','MailQueue','../api/mailQueue/mailQueue.model','MailSubstatus','MailInteraction','../api/mailInteraction/mailInteraction.model','MailMessage','../api/mailMessage/mailMessage.model','MailApplication','../api/mailApplication/mailApplication.model','MailQueueReport','Dashboard','../api/dashboard/dashboard.model','DashboardItem','../api/dashboardItem/dashboardItem.model','FaxAccount','../api/faxAccount/faxAccount.model','FaxApplication','../api/faxApplication/faxApplication.model','FaxInteraction','../api/faxInteraction/faxInteraction.model','FaxMessage','../api/faxQueue/faxQueue.model','FaxQueueReport','../api/faxQueueReport/faxQueueReport.model','SmsAccount','../api/smsAccount/smsAccount.model','../api/smsApplication/smsApplication.model','../api/smsInteraction/smsInteraction.model','SmsMessage','../api/smsMessage/smsMessage.model','SmsQueue','../api/smsQueue/smsQueue.model','OpenchannelAccount','OpenchannelApplication','OpenchannelInteraction','../api/openchannelInteraction/openchannelInteraction.model','OpenchannelMessage','../api/openchannelMessage/openchannelMessage.model','OpenchannelQueue','../api/openchannelQueue/openchannelQueue.model','ChatWebsite','../api/chatWebsite/chatWebsite.model','OpenchannelQueueReport','../api/chatApplication/chatApplication.model','../api/chatInteraction/chatInteraction.model','ChatMessage','../api/chatMessage/chatMessage.model','../api/chatOfflineMessage/chatOfflineMessage.model','ChatQueue','../api/chatQueue/chatQueue.model','ChatGroup','../api/chatGroup/chatGroup.model','ChatProactiveAction','../api/chatProactiveAction/chatProactiveAction.model','CmCompany','../api/cmCompany/cmCompany.model','CmContact','CmHopper','../api/cmHopper/cmHopper.model','CmHopperBlack','CmHopperFinal','ReportAgentPreview','../api/reportAgentPreview/reportAgentPreview.model','CmCustomField','../api/cmCustomField/cmCustomField.model','Action','../api/action/action.model','Automation','Disposition','../api/disposition/disposition.model','Condition','../api/condition/condition.model','Interval','../api/interval/interval.model','../api/pause/pause.model','Cdr','../api/cdr/cdr.model','../api/voiceQueuesLog/voiceQueuesLog.model','Schedule','Sound','../api/sound/sound.model','Tag','../api/tag/tag.model','Template','../api/template/template.model','Variable','../api/variable/variable.model','Integration','../api/integration/integration.model','../api/analyticCustomReport/analyticCustomReport.model','AnalyticDefaultReport','../api/analyticDefaultReport/analyticDefaultReport.model','AnalyticExtractedReport','../api/analyticExtractedReport/analyticExtractedReport.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','SalesforceField','../api/intSalesforceField/intSalesforceField.model','SugarcrmAccount','../api/intSugarcrmAccount/intSugarcrmAccount.model','SugarcrmField','../api/intSugarcrmField/intSugarcrmField.model','DeskAccount','../api/intDeskAccount/intDeskAccount.model','DeskConfiguration','../api/intDeskConfiguration/intDeskConfiguration.model','../api/intDeskField/intDeskField.model','ZohoAccount','ZohoConfiguration','ZohoField','../api/intZohoField/intZohoField.model','ZendeskAccount','../api/intZendeskAccount/intZendeskAccount.model','ZendeskConfiguration','../api/intZendeskConfiguration/intZendeskConfiguration.model','FreshdeskConfiguration','FreshdeskField','../api/intFreshdeskField/intFreshdeskField.model','VtigerAccount','../api/intVtigerConfiguration/intVtigerConfiguration.model','VtigerField','../api/intVtigerField/intVtigerField.model','Network','ChatQueueReport','../api/chatQueueReport/chatQueueReport.model','JscriptyAnswerReport','../api/jscriptyAnswerReport/jscriptyAnswerReport.model','JscriptyQuestionReport','../api/jscriptyQuestionReport/jscriptyQuestionReport.model','JscriptySessionReport','../api/jscriptySessionReport/jscriptySessionReport.model','SmsQueueReport','../api/smsQueueReport/smsQueueReport.model','SquareReport','../api/squareReport/squareReport.model','SquareDetailsReport','../api/squareReportDetail/squareReportDetail.model','JscriptyProject','Setting','../api/setting/setting.model','SquareOdbc','SquareProject','SquareRecording','../api/squareRecording/squareRecording.model','Team','../api/team/team.model','../api/license/license.model','../api/campaign/campaign.model','Migration','../api/migration/migration.model','Attachment','Plugin','../api/plugin/plugin.model','MailTransferReport','../api/mailTransferReport/mailTransferReport.model','ChatTransferReport','../api/chatTransferReport/chatTransferReport.model','../api/faxTransferReport/faxTransferReport.model','OpenchannelTransferReport','../api/openchannelTransferReport/openchannelTransferReport.model','SmsTransferReport','../api/smsTransferReport/smsTransferReport.model','CmList','../api/cmList/cmList.model','VoicePrefix','../api/voicePrefix/voicePrefix.model','cascade','UserId','hasMany','Recordings','VoiceQueuesRt','HopperFinals','HopperHistory','ChatInteractions','SmsInteraction','SmsInteractions','FaxInteractions','MailInteractions','belongsToMany','cm_user_has_contacts','Lists','cm_user_has_lists','user_has_mail_interactions','ChatInteraction','user_has_chat_interactions','user_has_fax_interactions','user_has_sms_interactions','OpenchannelInteractions','user_has_openchannel_interactions','VoiceQueues','MailQueues','ChatQueues','UserChatQueue','FaxQueue','FaxQueues','SmsQueues'];(function(_0x3d6d80,_0x1689b7){var _0x30712a=function(_0x24c266){while(--_0x24c266){_0x3d6d80['push'](_0x3d6d80['shift']());}};_0x30712a(++_0x1689b7);}(_0x3f57,0xaa));var _0x73f5=function(_0x29c3a9,_0x3b2e5e){_0x29c3a9=_0x29c3a9-0x0;var _0x1f164b=_0x3f57[_0x29c3a9];return _0x1f164b;};'use strict';var path=require(_0x73f5('0x0'));var config=require(_0x73f5('0x1'));var Sequelize=require(_0x73f5('0x2'));var _=require('lodash');var jstz=require(_0x73f5('0x3'));var timezone=jstz['determine']();config[_0x73f5('0x2')]=_[_0x73f5('0x4')](config[_0x73f5('0x2')],{'database':_0x73f5('0x5'),'username':_0x73f5('0x6'),'password':_0x73f5('0x7'),'options':{'host':_0x73f5('0x8'),'port':0xcea,'dialect':_0x73f5('0x9'),'dialectOptions':{'charset':_0x73f5('0xa')},'logging':![],'timezone':timezone['name'](),'define':{'charset':'utf8','collate':_0x73f5('0xb')}}});config[_0x73f5('0xc')]=_[_0x73f5('0x4')](config[_0x73f5('0xc')],{'database':'motion2','username':'xcall','password':'xC@LL1234','options':{'host':'127.0.0.1','port':0xcea,'dialect':_0x73f5('0x9'),'dialectOptions':{'charset':_0x73f5('0xa')},'logging':![],'timezone':timezone[_0x73f5('0xd')](),'define':{'charset':_0x73f5('0xe'),'collate':'utf8_general_ci'}}});var db={'Sequelize':Sequelize,'sequelize':new Sequelize(config['sequelize'][_0x73f5('0xf')],config[_0x73f5('0x2')]['username'],config[_0x73f5('0x2')][_0x73f5('0x10')],config['sequelize']['options'])};var dbH={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0x73f5('0xc')][_0x73f5('0xf')],config[_0x73f5('0xc')]['username'],config[_0x73f5('0xc')][_0x73f5('0x10')],config[_0x73f5('0xc')][_0x73f5('0x11')])};db[_0x73f5('0x12')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x14'));db[_0x73f5('0x15')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x16'));db[_0x73f5('0x17')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x18'));db['VoiceExtension']=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x19'));db[_0x73f5('0x1a')]=db[_0x73f5('0x2')]['import'](_0x73f5('0x1b'));db[_0x73f5('0x1c')]=db['sequelize']['import'](_0x73f5('0x1d'));db[_0x73f5('0x1e')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x1f'));db[_0x73f5('0x20')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/voiceMail/voiceMail.model');db[_0x73f5('0x21')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x22'));db[_0x73f5('0x23')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/voiceCallReport/voiceCallReport.model');db[_0x73f5('0x24')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x25'));db[_0x73f5('0x26')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x27'));db[_0x73f5('0x28')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x29'));db[_0x73f5('0x2a')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x2b'));db['Trunk']=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/trunk/trunk.model');db[_0x73f5('0x2c')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x2d'));db[_0x73f5('0x2e')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x2f'));db[_0x73f5('0x30')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/userVoiceQueue/userVoiceQueue.model');db['UserChatQueue']=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x31'));db[_0x73f5('0x32')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x33'));db[_0x73f5('0x34')]=db[_0x73f5('0x2')]['import']('../api/userFaxQueue/userFaxQueue.model');db[_0x73f5('0x35')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x36'));db[_0x73f5('0x37')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x38'));db[_0x73f5('0x39')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/mailServerIn/mailServerIn.model');db['MailServerOut']=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x3a'));db[_0x73f5('0x3b')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x3c'));db[_0x73f5('0x3d')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x3e'));db[_0x73f5('0x3f')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/mailSubstatus/mailSubstatus.model');db[_0x73f5('0x40')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x41'));db[_0x73f5('0x42')]=db['sequelize']['import'](_0x73f5('0x43'));db[_0x73f5('0x44')]=db['sequelize']['import'](_0x73f5('0x45'));db[_0x73f5('0x46')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/mailQueueReport/mailQueueReport.model');db[_0x73f5('0x47')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x48'));db[_0x73f5('0x49')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x4a'));db[_0x73f5('0x4b')]=db['sequelize']['import'](_0x73f5('0x4c'));db[_0x73f5('0x4d')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x4e'));db[_0x73f5('0x4f')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x50'));db[_0x73f5('0x51')]=db[_0x73f5('0x2')]['import']('../api/faxMessage/faxMessage.model');db['FaxQueue']=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x52'));db[_0x73f5('0x53')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x54'));db[_0x73f5('0x55')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x56'));db['SmsApplication']=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x57'));db['SmsInteraction']=db['sequelize']['import'](_0x73f5('0x58'));db[_0x73f5('0x59')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x5a'));db[_0x73f5('0x5b')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x5c'));db[_0x73f5('0x5d')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/openchannelAccount/openchannelAccount.model');db[_0x73f5('0x5e')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/openchannelApplication/openchannelApplication.model');db[_0x73f5('0x5f')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x60'));db[_0x73f5('0x61')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x62'));db[_0x73f5('0x63')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x64'));db[_0x73f5('0x65')]=db[_0x73f5('0x2')]['import'](_0x73f5('0x66'));db[_0x73f5('0x67')]=db['sequelize'][_0x73f5('0x13')]('../api/openchannelQueueReport/openchannelQueueReport.model');db['ChatApplication']=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x68'));db['ChatInteraction']=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x69'));db[_0x73f5('0x6a')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x6b'));db['ChatOfflineMessage']=db[_0x73f5('0x2')]['import'](_0x73f5('0x6c'));db[_0x73f5('0x6d')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x6e'));db[_0x73f5('0x6f')]=db[_0x73f5('0x2')]['import'](_0x73f5('0x70'));db[_0x73f5('0x71')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x72'));db[_0x73f5('0x73')]=db['sequelize']['import'](_0x73f5('0x74'));db[_0x73f5('0x75')]=db['sequelize']['import']('../api/cmContact/cmContact.model');db[_0x73f5('0x76')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x77'));db[_0x73f5('0x78')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/cmHopperBlack/cmHopperBlack.model');db[_0x73f5('0x79')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/cmHopperFinal/cmHopperFinal.model');db['CmHopperHistory']=db['sequelize'][_0x73f5('0x13')]('../api/cmHopperHistory/cmHopperHistory.model');db[_0x73f5('0x7a')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x7b'));db[_0x73f5('0x7c')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x7d'));db[_0x73f5('0x7e')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x7f'));db[_0x73f5('0x80')]=db['sequelize']['import']('../api/automation/automation.model');db['CannedAnswer']=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/cannedAnswer/cannedAnswer.model');db[_0x73f5('0x81')]=db[_0x73f5('0x2')]['import'](_0x73f5('0x82'));db[_0x73f5('0x83')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x84'));db[_0x73f5('0x85')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x86'));db['Pause']=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x87'));db[_0x73f5('0x88')]=db[_0x73f5('0x2')]['import'](_0x73f5('0x89'));db['VoiceQueuesLog']=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x8a'));db[_0x73f5('0x8b')]=db['sequelize'][_0x73f5('0x13')]('../api/schedule/schedule.model');db[_0x73f5('0x8c')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x8d'));db[_0x73f5('0x8e')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x8f'));db[_0x73f5('0x90')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x91'));db['Trigger']=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/trigger/trigger.model');db[_0x73f5('0x92')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0x93'));db[_0x73f5('0x94')]=db[_0x73f5('0x2')]['import'](_0x73f5('0x95'));db['IntegrationReport']=db[_0x73f5('0x2')]['import']('../api/integrationReport/integrationReport.model');db['AnalyticCustomReport']=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x96'));db[_0x73f5('0x97')]=db['sequelize']['import'](_0x73f5('0x98'));db[_0x73f5('0x99')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x9a'));db[_0x73f5('0x9b')]=db['sequelize']['import'](_0x73f5('0x9c'));db[_0x73f5('0x9d')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0x9e'));db[_0x73f5('0x9f')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xa0'));db[_0x73f5('0xa1')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xa2'));db[_0x73f5('0xa3')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xa4'));db[_0x73f5('0xa5')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xa6'));db[_0x73f5('0xa7')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0xa8'));db['SugarcrmConfiguration']=db[_0x73f5('0x2')]['import']('../api/intSugarcrmConfiguration/intSugarcrmConfiguration.model');db[_0x73f5('0xa9')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0xaa'));db[_0x73f5('0xab')]=db['sequelize']['import'](_0x73f5('0xac'));db[_0x73f5('0xad')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xae'));db['DeskField']=db['sequelize']['import'](_0x73f5('0xaf'));db[_0x73f5('0xb0')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/intZohoAccount/intZohoAccount.model');db[_0x73f5('0xb1')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/intZohoConfiguration/intZohoConfiguration.model');db[_0x73f5('0xb2')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xb3'));db[_0x73f5('0xb4')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0xb5'));db[_0x73f5('0xb6')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xb7'));db['ZendeskField']=db[_0x73f5('0x2')]['import']('../api/intZendeskField/intZendeskField.model');db['FreshdeskAccount']=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/intFreshdeskAccount/intFreshdeskAccount.model');db[_0x73f5('0xb8')]=db['sequelize'][_0x73f5('0x13')]('../api/intFreshdeskConfiguration/intFreshdeskConfiguration.model');db[_0x73f5('0xb9')]=db[_0x73f5('0x2')]['import'](_0x73f5('0xba'));db[_0x73f5('0xbb')]=db[_0x73f5('0x2')]['import']('../api/intVtigerAccount/intVtigerAccount.model');db['VtigerConfiguration']=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xbc'));db[_0x73f5('0xbd')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xbe'));db['Integration']=db[_0x73f5('0x2')]['import'](_0x73f5('0x95'));db[_0x73f5('0xbf')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/network/network.model');db[_0x73f5('0xc0')]=db[_0x73f5('0x2')]['import'](_0x73f5('0xc1'));db['ChatInternalMessage']=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/chatInternalMessage/chatInternalMessage.model');db[_0x73f5('0xc2')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xc3'));db[_0x73f5('0xc4')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xc5'));db[_0x73f5('0xc6')]=db[_0x73f5('0x2')]['import'](_0x73f5('0xc7'));db[_0x73f5('0xc8')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0xc9'));db[_0x73f5('0xca')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xcb'));db[_0x73f5('0xcc')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xcd'));db[_0x73f5('0xce')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/jscriptyProject/jscriptyProject.model');db[_0x73f5('0xcf')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xd0'));db[_0x73f5('0xd1')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/squareOdbc/squareOdbc.model');db[_0x73f5('0xd2')]=db[_0x73f5('0x2')][_0x73f5('0x13')]('../api/squareProject/squareProject.model');db[_0x73f5('0xd3')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0xd4'));db[_0x73f5('0xd5')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xd6'));db['License']=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xd7'));db['Campaign']=db[_0x73f5('0x2')]['import'](_0x73f5('0xd8'));db[_0x73f5('0xd9')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xda'));db[_0x73f5('0xdb')]=db['sequelize']['import']('../api/attachment/attachment.model');db[_0x73f5('0xdc')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xdd'));db[_0x73f5('0xde')]=db[_0x73f5('0x2')]['import'](_0x73f5('0xdf'));db[_0x73f5('0xe0')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xe1'));db['FaxTransferReport']=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xe2'));db[_0x73f5('0xe3')]=db[_0x73f5('0x2')]['import'](_0x73f5('0xe4'));db[_0x73f5('0xe5')]=db[_0x73f5('0x2')][_0x73f5('0x13')](_0x73f5('0xe6'));db[_0x73f5('0xe7')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0xe8'));db[_0x73f5('0xe9')]=db['sequelize'][_0x73f5('0x13')](_0x73f5('0xea'));db[_0x73f5('0x12')]['hasOne'](db[_0x73f5('0x20')],{'as':_0x73f5('0x20'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0xec')});db[_0x73f5('0x12')][_0x73f5('0xed')](db['VoiceRecording'],{'as':_0x73f5('0xee'),'foreignKey':'UserId'});db[_0x73f5('0x12')][_0x73f5('0xed')](db[_0x73f5('0x2e')],{'as':_0x73f5('0xef'),'foreignKey':_0x73f5('0xec')});db[_0x73f5('0x12')][_0x73f5('0xed')](db['VoiceExtension'],{'as':'Extensions','onDelete':_0x73f5('0xeb'),'hooks':!![]});db[_0x73f5('0x12')][_0x73f5('0xed')](db[_0x73f5('0x79')],{'as':_0x73f5('0xf0'),'foreignKey':_0x73f5('0xec')});db[_0x73f5('0x12')]['hasMany'](db['CmHopperHistory'],{'as':_0x73f5('0xf1'),'foreignKey':'UserId'});db[_0x73f5('0x12')][_0x73f5('0xed')](db[_0x73f5('0x7a')],{'as':_0x73f5('0x7a'),'foreignKey':'UserId'});db[_0x73f5('0x12')][_0x73f5('0xed')](db[_0x73f5('0x5f')],{'as':'OpenchannelInteractions','foreignKey':_0x73f5('0xec')});db[_0x73f5('0x12')][_0x73f5('0xed')](db['ChatInteraction'],{'as':_0x73f5('0xf2'),'foreignKey':'UserId'});db['User'][_0x73f5('0xed')](db[_0x73f5('0xf3')],{'as':_0x73f5('0xf4'),'foreignKey':_0x73f5('0xec')});db[_0x73f5('0x12')][_0x73f5('0xed')](db['FaxInteraction'],{'as':_0x73f5('0xf5'),'foreignKey':_0x73f5('0xec')});db[_0x73f5('0x12')]['hasMany'](db[_0x73f5('0x40')],{'as':_0x73f5('0xf6'),'foreignKey':_0x73f5('0xec')});db[_0x73f5('0x12')][_0x73f5('0xf7')](db[_0x73f5('0x6f')],{'as':'Groups','through':'chat_group_has_users'});db[_0x73f5('0x12')][_0x73f5('0xf7')](db['CmContact'],{'as':'Contacts','through':_0x73f5('0xf8')});db[_0x73f5('0x12')]['belongsToMany'](db[_0x73f5('0xe7')],{'as':_0x73f5('0xf9'),'through':_0x73f5('0xfa')});db[_0x73f5('0x12')][_0x73f5('0xf7')](db['Team'],{'through':'user_has_teams'});db[_0x73f5('0x12')][_0x73f5('0xf7')](db[_0x73f5('0x40')],{'as':_0x73f5('0xf6'),'through':_0x73f5('0xfb')});db['User'][_0x73f5('0xf7')](db[_0x73f5('0xfc')],{'as':_0x73f5('0xf2'),'through':_0x73f5('0xfd')});db[_0x73f5('0x12')][_0x73f5('0xf7')](db['FaxInteraction'],{'as':_0x73f5('0xf5'),'through':_0x73f5('0xfe')});db[_0x73f5('0x12')][_0x73f5('0xf7')](db[_0x73f5('0xf3')],{'as':_0x73f5('0xf4'),'through':_0x73f5('0xff')});db['User']['belongsToMany'](db['OpenchannelInteraction'],{'as':_0x73f5('0x100'),'through':_0x73f5('0x101')});db[_0x73f5('0x12')][_0x73f5('0xf7')](db['VoiceQueue'],{'as':_0x73f5('0x102'),'through':_0x73f5('0x30'),'required':![]});db[_0x73f5('0x12')]['belongsToMany'](db[_0x73f5('0x3d')],{'as':_0x73f5('0x103'),'through':_0x73f5('0x32'),'required':![]});db[_0x73f5('0x12')][_0x73f5('0xf7')](db[_0x73f5('0x6d')],{'as':_0x73f5('0x104'),'through':_0x73f5('0x105'),'required':![],'hooks':!![]});db[_0x73f5('0x12')]['belongsToMany'](db[_0x73f5('0x106')],{'as':_0x73f5('0x107'),'through':_0x73f5('0x34'),'required':![]});db[_0x73f5('0x12')][_0x73f5('0xf7')](db['SmsQueue'],{'as':_0x73f5('0x108'),'through':_0x73f5('0x35'),'required':![]});db['User']['belongsToMany'](db[_0x73f5('0x63')],{'as':'OpenchannelQueues','through':'UserOpenchannelQueue','required':![]});db[_0x73f5('0x12')]['belongsToMany'](db['CmList'],{'through':'cm_user_has_lists'});db[_0x73f5('0x12')][_0x73f5('0xf7')](db[_0x73f5('0xe9')],{'as':_0x73f5('0x109'),'through':_0x73f5('0x10a'),'required':![]});db[_0x73f5('0x12')][_0x73f5('0xf7')](db['ChatWebsite'],{'as':_0x73f5('0x10b'),'through':_0x73f5('0x10c')});db[_0x73f5('0x12')][_0x73f5('0xf7')](db[_0x73f5('0x4b')],{'as':_0x73f5('0x10d'),'through':_0x73f5('0x10e')});db[_0x73f5('0x12')]['belongsToMany'](db[_0x73f5('0x3b')],{'as':'MailAccounts','through':_0x73f5('0x10f')});db[_0x73f5('0x12')][_0x73f5('0xf7')](db['OpenchannelAccount'],{'as':_0x73f5('0x110'),'through':'user_has_openchannel_accounts'});db['User']['belongsToMany'](db[_0x73f5('0x55')],{'as':_0x73f5('0x111'),'through':_0x73f5('0x112')});db['User'][_0x73f5('0xf7')](db['SquareProject'],{'as':_0x73f5('0x113'),'through':_0x73f5('0x114')});db[_0x73f5('0x15')]['hasMany'](db[_0x73f5('0x115')],{'as':_0x73f5('0x116'),'onDelete':'cascade','foreignKey':_0x73f5('0x117')});db[_0x73f5('0x17')]['hasMany'](db['VoiceExtension'],{'onDelete':_0x73f5('0xeb')});db[_0x73f5('0x115')]['hasMany'](db['VoiceExtension'],{'as':_0x73f5('0x118'),'onDelete':_0x73f5('0xeb')});db[_0x73f5('0x1a')][_0x73f5('0xf7')](db['Sound'],{'as':'Sounds','through':_0x73f5('0x119')});db[_0x73f5('0x1c')][_0x73f5('0xed')](db['UserVoiceQueueRt'],{'as':'Members','foreignKey':_0x73f5('0x11a')});db[_0x73f5('0x1c')][_0x73f5('0xed')](db[_0x73f5('0x76')],{'as':_0x73f5('0x11b'),'foreignKey':_0x73f5('0x11a')});db[_0x73f5('0x1c')][_0x73f5('0xed')](db[_0x73f5('0x79')],{'as':_0x73f5('0xf0'),'foreignKey':_0x73f5('0x11a')});db['VoiceQueue'][_0x73f5('0xed')](db[_0x73f5('0x11c')],{'as':_0x73f5('0x11d'),'foreignKey':'VoiceQueueId'});db[_0x73f5('0x1c')][_0x73f5('0xed')](db[_0x73f5('0x7a')],{'as':_0x73f5('0x7a'),'foreignKey':'VoiceQueueId'});db[_0x73f5('0x1c')][_0x73f5('0xed')](db[_0x73f5('0x78')],{'as':_0x73f5('0x11e'),'foreignKey':_0x73f5('0x11a')});db[_0x73f5('0x1c')][_0x73f5('0xed')](db[_0x73f5('0xc6')],{'as':_0x73f5('0x11f'),'foreignKey':'VoiceQueueId'});db['VoiceQueue']['belongsTo'](db[_0x73f5('0x120')],{'as':'Trunk','foreignKey':_0x73f5('0x121')});db['VoiceQueue']['belongsTo'](db[_0x73f5('0x120')],{'as':_0x73f5('0x122'),'foreignKey':_0x73f5('0x123')});db[_0x73f5('0x1c')][_0x73f5('0x124')](db[_0x73f5('0x85')],{'as':_0x73f5('0x85'),'foreignKey':_0x73f5('0x125')});db[_0x73f5('0x1c')][_0x73f5('0xf7')](db[_0x73f5('0xe7')],{'as':_0x73f5('0xf9'),'through':_0x73f5('0x126')});db['VoiceQueue'][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':_0x73f5('0x127'),'through':'UserVoiceQueue'});db[_0x73f5('0x1c')][_0x73f5('0xf7')](db[_0x73f5('0xd5')],{'as':_0x73f5('0x128'),'through':_0x73f5('0x129')});db['VoiceQueue'][_0x73f5('0xf7')](db['CmList'],{'as':_0x73f5('0x12a'),'through':_0x73f5('0x12b')});db[_0x73f5('0x1e')][_0x73f5('0x124')](db[_0x73f5('0x12')],{'as':_0x73f5('0x12'),'foreignKey':_0x73f5('0xec')});db[_0x73f5('0x20')][_0x73f5('0xed')](db[_0x73f5('0x21')],{'as':_0x73f5('0x12c'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x12d'),'sourceKey':_0x73f5('0x12e')});db[_0x73f5('0x21')]['belongsTo'](db[_0x73f5('0x20')],{'foreignKey':_0x73f5('0x12d'),'targetKey':_0x73f5('0x12e')});db[_0x73f5('0x23')]['hasMany'](db['VoiceQueueReport'],{'as':_0x73f5('0x12f'),'foreignKey':_0x73f5('0x130'),'constraints':![]});db[_0x73f5('0x23')][_0x73f5('0xed')](db[_0x73f5('0x26')],{'as':_0x73f5('0x131'),'foreignKey':'uniqueid','constraints':![]});db[_0x73f5('0x23')]['belongsTo'](db[_0x73f5('0x12')],{'as':_0x73f5('0x12'),'foreignKey':_0x73f5('0xec')});db[_0x73f5('0x23')][_0x73f5('0x124')](db['CmContact'],{'as':_0x73f5('0x132'),'foreignKey':_0x73f5('0x133')});db[_0x73f5('0x39')]['belongsTo'](db[_0x73f5('0x3b')],{'as':_0x73f5('0x3b'),'foreignKey':_0x73f5('0x134')});db[_0x73f5('0x135')][_0x73f5('0x124')](db[_0x73f5('0x3b')],{'as':'MailAccount','foreignKey':_0x73f5('0x134')});db['MailAccount'][_0x73f5('0x136')](db[_0x73f5('0x39')],{'as':_0x73f5('0x137'),'onDelete':_0x73f5('0xeb')});db[_0x73f5('0x3b')][_0x73f5('0x136')](db[_0x73f5('0x135')],{'as':_0x73f5('0x138'),'onDelete':_0x73f5('0xeb')});db[_0x73f5('0x3b')][_0x73f5('0xed')](db[_0x73f5('0x81')],{'as':_0x73f5('0x139'),'foreignKey':_0x73f5('0x134')});db[_0x73f5('0x3b')][_0x73f5('0xed')](db[_0x73f5('0x13a')],{'as':_0x73f5('0x13b'),'foreignKey':_0x73f5('0x134')});db['MailAccount'][_0x73f5('0xed')](db['MailMessage'],{'as':'Messages','foreignKey':_0x73f5('0x134')});db[_0x73f5('0x3b')][_0x73f5('0xed')](db[_0x73f5('0x40')],{'as':_0x73f5('0x13c')});db[_0x73f5('0x3b')][_0x73f5('0xed')](db[_0x73f5('0x44')],{'as':_0x73f5('0x118')});db['MailAccount']['belongsTo'](db[_0x73f5('0xe7')],{'as':_0x73f5('0x13d'),'foreignKey':_0x73f5('0x13e')});db['MailAccount'][_0x73f5('0x124')](db['Template'],{'as':'Template','foreignKey':_0x73f5('0x13f')});db[_0x73f5('0x3b')]['belongsToMany'](db[_0x73f5('0x12')],{'as':_0x73f5('0x127'),'through':_0x73f5('0x10f')});db['MailQueue'][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':_0x73f5('0x127'),'through':_0x73f5('0x32')});db[_0x73f5('0x3d')][_0x73f5('0xf7')](db[_0x73f5('0xd5')],{'through':_0x73f5('0x140'),'as':_0x73f5('0x128')});db['MailInteraction'][_0x73f5('0xed')](db[_0x73f5('0x42')],{'as':_0x73f5('0x12c'),'onDelete':'cascade','foreignKey':_0x73f5('0x141')});db['MailInteraction']['belongsTo'](db['MailAccount'],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x134')});db[_0x73f5('0x40')][_0x73f5('0x124')](db[_0x73f5('0x75')],{'as':_0x73f5('0x132'),'foreignKey':'ContactId'});db[_0x73f5('0x40')][_0x73f5('0x124')](db[_0x73f5('0x12')],{'as':_0x73f5('0x143'),'foreignKey':_0x73f5('0xec')});db[_0x73f5('0x40')][_0x73f5('0xf7')](db[_0x73f5('0x8e')],{'through':_0x73f5('0x144'),'as':_0x73f5('0x145')});db[_0x73f5('0x40')][_0x73f5('0xf7')](db['Tag'],{'through':_0x73f5('0x144'),'as':_0x73f5('0x146')});db['MailInteraction'][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':_0x73f5('0x147'),'through':_0x73f5('0xfb'),'foreignKey':_0x73f5('0x141')});db[_0x73f5('0x42')][_0x73f5('0xed')](db[_0x73f5('0xdb')],{'as':_0x73f5('0x148'),'onDelete':_0x73f5('0xeb')});db['MailMessage']['belongsTo'](db['User'],{'as':'User'});db['MailMessage'][_0x73f5('0x124')](db['CmContact'],{'onDelete':'cascade','as':_0x73f5('0x132')});db[_0x73f5('0x42')][_0x73f5('0x124')](db[_0x73f5('0x40')],{'as':_0x73f5('0x149'),'foreignKey':_0x73f5('0x141')});db[_0x73f5('0x42')][_0x73f5('0x124')](db[_0x73f5('0x3b')],{'as':_0x73f5('0x142'),'foreignKey':'MailAccountId'});db[_0x73f5('0x44')][_0x73f5('0x124')](db[_0x73f5('0x12')],{'onDelete':_0x73f5('0x14a')});db[_0x73f5('0x44')][_0x73f5('0x124')](db[_0x73f5('0x3d')],{'onDelete':'restrict'});db[_0x73f5('0x44')][_0x73f5('0x124')](db[_0x73f5('0x3b')],{'onDelete':'restrict'});db['MailApplication']['belongsTo'](db[_0x73f5('0x85')],{'onDelete':'restrict','foreignKey':_0x73f5('0x125')});db[_0x73f5('0x44')][_0x73f5('0x124')](db[_0x73f5('0x8e')],{'onDelete':_0x73f5('0x14a'),'foreignKey':'TagId'});db['MailQueueReport'][_0x73f5('0x124')](db[_0x73f5('0x3b')],{});db['MailQueueReport'][_0x73f5('0x124')](db[_0x73f5('0xe7')],{'as':'List','foreignKey':'ListId'});db[_0x73f5('0x46')][_0x73f5('0x124')](db['CmContact'],{'as':'Contact','foreignKey':'ContactId'});db['MailQueueReport'][_0x73f5('0x124')](db['MailInteraction'],{});db[_0x73f5('0x46')][_0x73f5('0x124')](db['MailMessage'],{});db['MailQueueReport']['belongsTo'](db['User'],{});db[_0x73f5('0x46')]['belongsTo'](db['MailQueue'],{});db[_0x73f5('0x47')][_0x73f5('0xed')](db['DashboardItem'],{'as':'Items','onDelete':'cascade'});db[_0x73f5('0x4b')]['hasMany'](db['Disposition'],{'as':_0x73f5('0x139'),'foreignKey':_0x73f5('0x14b')});db['FaxAccount']['hasMany'](db[_0x73f5('0x13a')],{'as':'Answers','foreignKey':_0x73f5('0x14b')});db[_0x73f5('0x4b')]['hasMany'](db[_0x73f5('0x4f')],{'as':_0x73f5('0x13c')});db[_0x73f5('0x4b')][_0x73f5('0xed')](db[_0x73f5('0x4d')],{'as':_0x73f5('0x118')});db['FaxAccount'][_0x73f5('0xed')](db[_0x73f5('0x115')],{'as':'Exntensions','onDelete':_0x73f5('0xeb')});db[_0x73f5('0x4b')][_0x73f5('0xed')](db[_0x73f5('0x51')],{'as':_0x73f5('0x12c')});db[_0x73f5('0x4b')]['belongsTo'](db[_0x73f5('0x120')],{'as':'Trunk'});db[_0x73f5('0x4b')][_0x73f5('0x124')](db['CmList'],{'as':'List','foreignKey':'ListId'});db['FaxAccount'][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':_0x73f5('0x127'),'through':_0x73f5('0x10e')});db[_0x73f5('0x4d')]['belongsTo'](db[_0x73f5('0x12')],{'onDelete':_0x73f5('0x14a')});db[_0x73f5('0x4d')]['belongsTo'](db[_0x73f5('0x106')],{'onDelete':_0x73f5('0x14a')});db['FaxApplication'][_0x73f5('0x124')](db[_0x73f5('0x4b')],{'onDelete':'restrict'});db[_0x73f5('0x4d')][_0x73f5('0x124')](db[_0x73f5('0x8e')],{'onDelete':_0x73f5('0x14a'),'foreignKey':_0x73f5('0x14c')});db[_0x73f5('0x4f')][_0x73f5('0xed')](db[_0x73f5('0x51')],{'as':_0x73f5('0x12c'),'onDelete':_0x73f5('0xeb'),'foreignKey':'FaxInteractionId'});db[_0x73f5('0x4f')][_0x73f5('0x124')](db[_0x73f5('0x4b')],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x14b')});db[_0x73f5('0x4f')]['belongsTo'](db[_0x73f5('0x75')],{'as':_0x73f5('0x132'),'foreignKey':'ContactId'});db[_0x73f5('0x4f')]['belongsTo'](db[_0x73f5('0x12')],{'as':_0x73f5('0x143'),'foreignKey':_0x73f5('0xec')});db['FaxInteraction']['belongsToMany'](db[_0x73f5('0x8e')],{'through':_0x73f5('0x14d'),'as':_0x73f5('0x145')});db[_0x73f5('0x4f')][_0x73f5('0xf7')](db[_0x73f5('0x8e')],{'through':_0x73f5('0x14d'),'as':'ThroughTags'});db[_0x73f5('0x4f')]['belongsToMany'](db[_0x73f5('0x12')],{'as':_0x73f5('0x147'),'through':'user_has_fax_interactions','foreignKey':'FaxInteractionId'});db[_0x73f5('0x51')]['belongsTo'](db[_0x73f5('0x12')],{'onDelete':_0x73f5('0xeb'),'as':_0x73f5('0x12')});db[_0x73f5('0x51')][_0x73f5('0x124')](db[_0x73f5('0x4f')],{'as':_0x73f5('0x149'),'foreignKey':_0x73f5('0x14e')});db[_0x73f5('0x51')][_0x73f5('0x124')](db[_0x73f5('0x75')],{'onDelete':_0x73f5('0xeb'),'as':'Contact'});db['FaxMessage'][_0x73f5('0x124')](db['Attachment'],{'as':'Attachment','foreignKey':_0x73f5('0x14f')});db['FaxMessage'][_0x73f5('0x124')](db[_0x73f5('0x4b')],{'as':_0x73f5('0x142'),'foreignKey':'FaxAccountId'});db[_0x73f5('0x106')]['belongsToMany'](db['User'],{'as':_0x73f5('0x127'),'through':_0x73f5('0x34')});db[_0x73f5('0x106')][_0x73f5('0xf7')](db[_0x73f5('0xd5')],{'through':'team_has_fax_queues','as':'Teams'});db['FaxQueueReport'][_0x73f5('0x124')](db['FaxAccount'],{});db[_0x73f5('0x53')]['belongsTo'](db[_0x73f5('0xe7')],{'as':_0x73f5('0x13d'),'foreignKey':_0x73f5('0x13e')});db[_0x73f5('0x53')]['belongsTo'](db[_0x73f5('0x75')],{'as':'Contact','foreignKey':_0x73f5('0x133')});db[_0x73f5('0x53')]['belongsTo'](db['FaxInteraction'],{});db[_0x73f5('0x53')]['belongsTo'](db[_0x73f5('0x51')],{});db['FaxQueueReport']['belongsTo'](db[_0x73f5('0x12')],{});db[_0x73f5('0x53')][_0x73f5('0x124')](db[_0x73f5('0x106')],{});db[_0x73f5('0x55')][_0x73f5('0xed')](db[_0x73f5('0x81')],{'as':_0x73f5('0x139'),'foreignKey':_0x73f5('0x150')});db['SmsAccount'][_0x73f5('0xed')](db[_0x73f5('0x13a')],{'as':'Answers','foreignKey':_0x73f5('0x150')});db[_0x73f5('0x55')][_0x73f5('0xed')](db['SmsMessage'],{'as':'Messages','foreignKey':_0x73f5('0x150')});db['SmsAccount']['hasMany'](db[_0x73f5('0xf3')],{'as':'Interactions'});db[_0x73f5('0x55')]['hasMany'](db['SmsApplication'],{'as':'Applications'});db[_0x73f5('0x55')][_0x73f5('0x124')](db[_0x73f5('0xe7')],{'as':_0x73f5('0x13d'),'foreignKey':_0x73f5('0x13e')});db[_0x73f5('0x55')][_0x73f5('0xf7')](db['User'],{'as':_0x73f5('0x127'),'through':'user_has_sms_accounts'});db[_0x73f5('0x151')][_0x73f5('0x124')](db[_0x73f5('0x12')],{'onDelete':_0x73f5('0x14a')});db[_0x73f5('0x151')]['belongsTo'](db[_0x73f5('0x5b')],{'onDelete':_0x73f5('0x14a')});db[_0x73f5('0x151')][_0x73f5('0x124')](db[_0x73f5('0x55')],{'onDelete':'restrict'});db[_0x73f5('0x151')][_0x73f5('0x124')](db[_0x73f5('0x85')],{'onDelete':_0x73f5('0x14a'),'foreignKey':_0x73f5('0x125')});db[_0x73f5('0x151')]['belongsTo'](db['Tag'],{'onDelete':_0x73f5('0x14a'),'foreignKey':_0x73f5('0x14c')});db[_0x73f5('0xf3')][_0x73f5('0xed')](db[_0x73f5('0x59')],{'as':_0x73f5('0x12c'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x152')});db[_0x73f5('0xf3')][_0x73f5('0x124')](db[_0x73f5('0x55')],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x150')});db['SmsInteraction']['belongsTo'](db[_0x73f5('0x75')],{'as':_0x73f5('0x132'),'foreignKey':'ContactId'});db[_0x73f5('0xf3')][_0x73f5('0x124')](db['User'],{'as':'Owner','foreignKey':'UserId'});db[_0x73f5('0xf3')][_0x73f5('0xf7')](db[_0x73f5('0x8e')],{'through':_0x73f5('0x153'),'as':'Tags'});db['SmsInteraction'][_0x73f5('0xf7')](db[_0x73f5('0x8e')],{'through':_0x73f5('0x153'),'as':'ThroughTags'});db['SmsInteraction'][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':'Users','through':'user_has_sms_interactions','foreignKey':_0x73f5('0x152')});db[_0x73f5('0x59')][_0x73f5('0x124')](db[_0x73f5('0x12')],{'as':_0x73f5('0x12')});db[_0x73f5('0x59')][_0x73f5('0x124')](db[_0x73f5('0x75')],{'onDelete':'cascade','as':_0x73f5('0x132')});db['SmsMessage'][_0x73f5('0x124')](db[_0x73f5('0xf3')],{'onDelete':_0x73f5('0xeb'),'as':'Interaction','foreignKey':_0x73f5('0x152')});db['SmsMessage'][_0x73f5('0x124')](db[_0x73f5('0x55')],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x150')});db['SmsQueue'][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':'Agents','through':_0x73f5('0x35'),'foreignKey':'SmsQueueId'});db['SmsQueue']['belongsToMany'](db[_0x73f5('0xd5')],{'through':_0x73f5('0x154'),'as':_0x73f5('0x128')});db[_0x73f5('0x5d')][_0x73f5('0xed')](db[_0x73f5('0x81')],{'as':_0x73f5('0x139'),'foreignKey':_0x73f5('0x155')});db['OpenchannelAccount']['hasMany'](db[_0x73f5('0x13a')],{'as':_0x73f5('0x13b'),'foreignKey':_0x73f5('0x155')});db[_0x73f5('0x5d')][_0x73f5('0xed')](db[_0x73f5('0x5f')],{'as':_0x73f5('0x13c'),'foreignKey':_0x73f5('0x155')});db[_0x73f5('0x5d')][_0x73f5('0xed')](db[_0x73f5('0x61')],{'as':_0x73f5('0x12c'),'foreignKey':_0x73f5('0x155')});db[_0x73f5('0x5d')][_0x73f5('0xed')](db['OpenchannelApplication'],{'as':_0x73f5('0x118'),'foreignKey':_0x73f5('0x155')});db[_0x73f5('0x5d')]['belongsTo'](db[_0x73f5('0xe7')],{'as':_0x73f5('0x13d'),'foreignKey':_0x73f5('0x13e')});db[_0x73f5('0x5d')]['belongsToMany'](db[_0x73f5('0x12')],{'as':'Agents','through':_0x73f5('0x156')});db[_0x73f5('0x5e')][_0x73f5('0x124')](db['User'],{'onDelete':_0x73f5('0x14a')});db[_0x73f5('0x5e')]['belongsTo'](db[_0x73f5('0x63')],{'onDelete':_0x73f5('0x14a'),'foreignKey':_0x73f5('0x157')});db[_0x73f5('0x5e')][_0x73f5('0x124')](db['OpenchannelAccount'],{'onDelete':_0x73f5('0x14a'),'foreignKey':_0x73f5('0x155')});db[_0x73f5('0x5e')][_0x73f5('0x124')](db['Interval'],{'onDelete':_0x73f5('0x14a'),'foreignKey':_0x73f5('0x125')});db[_0x73f5('0x5e')][_0x73f5('0x124')](db[_0x73f5('0x8e')],{'onDelete':'restrict','foreignKey':_0x73f5('0x14c')});db[_0x73f5('0x5f')][_0x73f5('0xed')](db[_0x73f5('0x61')],{'as':_0x73f5('0x12c'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x158')});db[_0x73f5('0x5f')][_0x73f5('0x124')](db[_0x73f5('0x5d')],{'as':'Account','foreignKey':_0x73f5('0x155')});db[_0x73f5('0x5f')][_0x73f5('0x124')](db['CmContact'],{'as':_0x73f5('0x132'),'foreignKey':_0x73f5('0x133')});db[_0x73f5('0x5f')][_0x73f5('0x124')](db['User'],{'as':'Owner','foreignKey':_0x73f5('0xec')});db['OpenchannelInteraction'][_0x73f5('0xf7')](db['Tag'],{'through':_0x73f5('0x159'),'as':_0x73f5('0x145')});db['OpenchannelInteraction'][_0x73f5('0xf7')](db[_0x73f5('0x8e')],{'through':_0x73f5('0x159'),'as':_0x73f5('0x146')});db[_0x73f5('0x5f')][_0x73f5('0xf7')](db['User'],{'as':'Users','through':_0x73f5('0x101'),'foreignKey':_0x73f5('0x158')});db[_0x73f5('0x61')]['belongsTo'](db[_0x73f5('0x12')],{'onDelete':_0x73f5('0xeb'),'as':_0x73f5('0x12')});db[_0x73f5('0x61')][_0x73f5('0x124')](db['CmContact'],{'onDelete':_0x73f5('0xeb'),'as':_0x73f5('0x132')});db[_0x73f5('0x61')][_0x73f5('0x124')](db[_0x73f5('0x5f')],{'onDelete':_0x73f5('0xeb'),'as':_0x73f5('0x149'),'foreignKey':_0x73f5('0x158')});db[_0x73f5('0x61')][_0x73f5('0x124')](db[_0x73f5('0xdb')],{'as':_0x73f5('0xdb'),'foreignKey':_0x73f5('0x14f')});db[_0x73f5('0x61')]['belongsTo'](db[_0x73f5('0x5d')],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x155')});db[_0x73f5('0x63')][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':_0x73f5('0x127'),'through':_0x73f5('0x37'),'foreignKey':'OpenchannelQueueId'});db[_0x73f5('0x63')]['belongsToMany'](db[_0x73f5('0xd5')],{'through':'team_has_openchannel_queues','as':_0x73f5('0x128')});db[_0x73f5('0x65')]['hasMany'](db[_0x73f5('0x81')],{'as':_0x73f5('0x139'),'foreignKey':_0x73f5('0x15a')});db[_0x73f5('0x65')][_0x73f5('0xed')](db[_0x73f5('0x13a')],{'as':_0x73f5('0x13b'),'foreignKey':'ChatWebsiteId'});db[_0x73f5('0x65')][_0x73f5('0xed')](db[_0x73f5('0x71')],{'as':'ProactiveActions'});db[_0x73f5('0x65')][_0x73f5('0xed')](db[_0x73f5('0xfc')],{'as':_0x73f5('0x13c')});db[_0x73f5('0x65')]['hasMany'](db['ChatApplication'],{'as':_0x73f5('0x118')});db[_0x73f5('0x65')][_0x73f5('0xed')](db[_0x73f5('0x6a')],{'as':_0x73f5('0x12c')});db[_0x73f5('0x65')][_0x73f5('0x124')](db[_0x73f5('0xe7')],{'as':_0x73f5('0x13d'),'foreignKey':'ListId'});db['ChatWebsite']['belongsTo'](db[_0x73f5('0x85')],{'as':'Interval','foreignKey':_0x73f5('0x125')});db[_0x73f5('0x65')][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':_0x73f5('0x127'),'through':'user_has_chat_websites'});db[_0x73f5('0x67')][_0x73f5('0x124')](db['OpenchannelAccount'],{});db['OpenchannelQueueReport'][_0x73f5('0x124')](db[_0x73f5('0xe7')],{'as':_0x73f5('0x13d'),'foreignKey':_0x73f5('0x13e')});db[_0x73f5('0x67')]['belongsTo'](db[_0x73f5('0x75')],{'as':'Contact','foreignKey':_0x73f5('0x133')});db['OpenchannelQueueReport']['belongsTo'](db['OpenchannelInteraction'],{});db['OpenchannelQueueReport'][_0x73f5('0x124')](db['OpenchannelMessage'],{});db['OpenchannelQueueReport'][_0x73f5('0x124')](db[_0x73f5('0x12')],{});db[_0x73f5('0x67')][_0x73f5('0x124')](db[_0x73f5('0x63')],{});db[_0x73f5('0x15b')]['belongsTo'](db[_0x73f5('0x12')],{'as':_0x73f5('0x15c'),'foreignKey':_0x73f5('0xec'),'onDelete':'restrict'});db[_0x73f5('0x15b')][_0x73f5('0x124')](db[_0x73f5('0x6d')],{'as':_0x73f5('0x15d'),'foreignKey':_0x73f5('0x15e'),'onDelete':_0x73f5('0x14a')});db['ChatApplication'][_0x73f5('0x124')](db['ChatWebsite'],{'as':_0x73f5('0x15f'),'foreignKey':'ChatWebsiteId','onDelete':_0x73f5('0x14a')});db['ChatApplication']['belongsTo'](db[_0x73f5('0x8e')],{'onDelete':_0x73f5('0x14a'),'foreignKey':_0x73f5('0x14c')});db[_0x73f5('0xfc')]['hasMany'](db[_0x73f5('0x6a')],{'as':_0x73f5('0x12c'),'onDelete':'cascade','foreignKey':_0x73f5('0x160')});db['ChatInteraction'][_0x73f5('0x124')](db[_0x73f5('0x65')],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x15a')});db[_0x73f5('0xfc')][_0x73f5('0x124')](db[_0x73f5('0x75')],{'as':_0x73f5('0x132'),'foreignKey':'ContactId'});db[_0x73f5('0xfc')]['belongsTo'](db[_0x73f5('0x12')],{'as':_0x73f5('0x143'),'foreignKey':_0x73f5('0xec')});db[_0x73f5('0xfc')][_0x73f5('0xf7')](db[_0x73f5('0x8e')],{'through':_0x73f5('0x161'),'as':'Tags'});db[_0x73f5('0xfc')]['belongsToMany'](db[_0x73f5('0x8e')],{'through':'chat_interaction_has_tags','as':_0x73f5('0x146')});db['ChatInteraction']['belongsToMany'](db[_0x73f5('0x12')],{'as':_0x73f5('0x147'),'through':'user_has_chat_interactions','foreignKey':_0x73f5('0x160')});db['ChatMessage'][_0x73f5('0x124')](db[_0x73f5('0x12')],{'onDelete':'cascade','as':'User'});db[_0x73f5('0x6a')][_0x73f5('0x124')](db[_0x73f5('0x75')],{'onDelete':_0x73f5('0xeb'),'as':_0x73f5('0x132'),'foreignKey':'ContactId'});db[_0x73f5('0x6a')][_0x73f5('0x124')](db['ChatInteraction'],{'onDelete':_0x73f5('0xeb'),'as':_0x73f5('0x149'),'foreignKey':_0x73f5('0x160')});db[_0x73f5('0x6a')][_0x73f5('0x124')](db['Attachment'],{'as':'Attachment','foreignKey':'AttachmentId'});db['ChatMessage'][_0x73f5('0x124')](db[_0x73f5('0x65')],{'as':'Account','foreignKey':_0x73f5('0x15a')});db['ChatOfflineMessage'][_0x73f5('0x124')](db[_0x73f5('0x75')],{'onDelete':_0x73f5('0xeb'),'as':_0x73f5('0x132'),'foreignKey':_0x73f5('0x133')});db['ChatOfflineMessage']['belongsTo'](db[_0x73f5('0x65')],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x15a')});db[_0x73f5('0x6d')]['belongsToMany'](db[_0x73f5('0x12')],{'as':'Agents','through':_0x73f5('0x105'),'hooks':!![]});db[_0x73f5('0x6d')][_0x73f5('0xf7')](db[_0x73f5('0xd5')],{'through':_0x73f5('0x162'),'as':_0x73f5('0x128')});db[_0x73f5('0x6f')]['hasMany'](db[_0x73f5('0x163')],{'as':'Messages','foreignKey':_0x73f5('0x164'),'onDelete':'cascade'});db[_0x73f5('0x6f')][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':'Members','through':'chat_group_has_users'});db[_0x73f5('0x71')][_0x73f5('0x124')](db[_0x73f5('0x65')],{'as':_0x73f5('0x15f'),'foreignKey':_0x73f5('0x15a')});db[_0x73f5('0x73')][_0x73f5('0xed')](db[_0x73f5('0x75')],{'as':_0x73f5('0x165'),'foreignKey':_0x73f5('0x166')});db[_0x73f5('0x75')][_0x73f5('0xed')](db[_0x73f5('0x76')],{'as':_0x73f5('0x11b'),'foreignKey':_0x73f5('0x133')});db[_0x73f5('0x75')]['hasMany'](db[_0x73f5('0x79')],{'as':'HopperFinals','foreignKey':_0x73f5('0x133')});db[_0x73f5('0x75')][_0x73f5('0xed')](db['CmHopperHistory'],{'as':_0x73f5('0x11d'),'foreignKey':'ContactId'});db['CmContact'][_0x73f5('0xed')](db['ReportAgentPreview'],{'as':_0x73f5('0x7a'),'foreignKey':'ContactId'});db[_0x73f5('0x75')]['hasMany'](db['JscriptySessionReport'],{'as':'JscriptySessions','foreignKey':'ContactId'});db['CmContact'][_0x73f5('0xed')](db[_0x73f5('0x5f')],{'as':'OpenchannelInteractions','foreignKey':_0x73f5('0x133'),'onDelete':_0x73f5('0x14a')});db[_0x73f5('0x75')][_0x73f5('0xed')](db[_0x73f5('0xfc')],{'as':'ChatInteractions','foreignKey':_0x73f5('0x133'),'onDelete':_0x73f5('0x14a')});db[_0x73f5('0x75')]['hasMany'](db[_0x73f5('0xf3')],{'as':'SmsInteractions','foreignKey':_0x73f5('0x133'),'onDelete':_0x73f5('0x14a')});db['CmContact']['hasMany'](db[_0x73f5('0x4f')],{'as':_0x73f5('0xf5'),'foreignKey':_0x73f5('0x133'),'onDelete':'restrict'});db[_0x73f5('0x75')][_0x73f5('0xed')](db[_0x73f5('0x40')],{'as':'MailInteractions','foreignKey':_0x73f5('0x133'),'onDelete':_0x73f5('0x14a')});db[_0x73f5('0x75')][_0x73f5('0x124')](db[_0x73f5('0x73')],{'as':'Company','foreignKey':_0x73f5('0x166')});db[_0x73f5('0x75')][_0x73f5('0x124')](db[_0x73f5('0xe7')],{'as':_0x73f5('0x13d'),'foreignKey':_0x73f5('0x13e'),'onDelete':_0x73f5('0xeb')});db['CmContact'][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':_0x73f5('0x147'),'through':_0x73f5('0xf8')});db[_0x73f5('0x75')]['belongsToMany'](db['Tag'],{'as':_0x73f5('0x145'),'through':_0x73f5('0x167')});db['CmContact'][_0x73f5('0xf7')](db[_0x73f5('0x8e')],{'through':'cm_contact_has_tags','as':_0x73f5('0x146')});db['CmHopper'][_0x73f5('0x124')](db[_0x73f5('0x75')],{'as':_0x73f5('0x132'),'foreignKey':_0x73f5('0x133'),'onDelete':_0x73f5('0xeb')});db[_0x73f5('0x76')]['belongsTo'](db[_0x73f5('0xe7')],{'as':'List','foreignKey':'ListId','onDelete':'cascade'});db[_0x73f5('0x76')][_0x73f5('0x124')](db[_0x73f5('0x12')],{'as':_0x73f5('0x15c'),'foreignKey':_0x73f5('0xec')});db['CmHopper']['belongsTo'](db[_0x73f5('0x1c')],{'as':'Queue','foreignKey':_0x73f5('0x11a'),'onDelete':'cascade'});db['CmHopper']['belongsTo'](db[_0x73f5('0x168')],{'as':'Campaign','foreignKey':_0x73f5('0x169'),'onDelete':_0x73f5('0xeb')});db[_0x73f5('0x78')]['belongsTo'](db[_0x73f5('0x75')],{'as':_0x73f5('0x132'),'foreignKey':_0x73f5('0x133'),'onDelete':'cascade'});db[_0x73f5('0x78')][_0x73f5('0x124')](db[_0x73f5('0xe7')],{'as':_0x73f5('0x13d'),'foreignKey':_0x73f5('0x13e'),'onDelete':_0x73f5('0xeb')});db['CmHopperBlack'][_0x73f5('0x124')](db[_0x73f5('0x1c')],{'as':_0x73f5('0x15d'),'foreignKey':_0x73f5('0x11a'),'onDelete':'cascade'});db[_0x73f5('0x78')][_0x73f5('0x124')](db[_0x73f5('0x168')],{'as':_0x73f5('0x168'),'foreignKey':_0x73f5('0x169'),'onDelete':_0x73f5('0xeb')});db[_0x73f5('0x80')][_0x73f5('0xed')](db['Condition'],{'as':{'plural':_0x73f5('0x16a'),'singular':_0x73f5('0x16b')},'foreignKey':'AutomationAllId','onDelete':_0x73f5('0xeb'),'hooks':!![]});db[_0x73f5('0x80')][_0x73f5('0xed')](db['Condition'],{'as':{'plural':_0x73f5('0x16c'),'singular':_0x73f5('0x16d')},'foreignKey':'AutomationAnyId','onDelete':_0x73f5('0xeb'),'hooks':!![]});db[_0x73f5('0x80')][_0x73f5('0xed')](db['Action'],{'as':_0x73f5('0x16e'),'foreignKey':'AutomationId','onDelete':'cascade','hooks':!![]});db[_0x73f5('0x85')][_0x73f5('0xed')](db[_0x73f5('0x85')],{'as':_0x73f5('0x16f'),'foreignKey':'IntervalId','onDelete':_0x73f5('0xeb'),'hooks':!![],'required':![]});db[_0x73f5('0x85')][_0x73f5('0xed')](db[_0x73f5('0x115')],{'as':'Extensions','foreignKey':_0x73f5('0x125'),'onDelete':_0x73f5('0x14a')});db[_0x73f5('0x85')]['hasMany'](db[_0x73f5('0x44')],{'as':_0x73f5('0x170'),'foreignKey':_0x73f5('0x125')});db[_0x73f5('0x85')][_0x73f5('0xed')](db[_0x73f5('0x15b')],{'as':_0x73f5('0x171'),'foreignKey':'IntervalId'});db[_0x73f5('0x85')][_0x73f5('0xed')](db['FaxApplication'],{'as':'FaxApplications','foreignKey':_0x73f5('0x125')});db['Interval'][_0x73f5('0xed')](db[_0x73f5('0x151')],{'as':_0x73f5('0x172'),'foreignKey':_0x73f5('0x125')});db[_0x73f5('0x8b')][_0x73f5('0x124')](db[_0x73f5('0x3b')],{});db[_0x73f5('0x8b')][_0x73f5('0x124')](db[_0x73f5('0x97')],{'foreignKey':_0x73f5('0x173')});db[_0x73f5('0x8b')][_0x73f5('0x124')](db[_0x73f5('0x174')],{'foreignKey':_0x73f5('0x175')});db[_0x73f5('0x8c')][_0x73f5('0xf7')](db[_0x73f5('0x1a')],{'as':'Mohs','through':_0x73f5('0x119'),'onDelete':'restrict'});db[_0x73f5('0x8e')]['belongsToMany'](db[_0x73f5('0x75')],{'through':_0x73f5('0x167')});db[_0x73f5('0x8e')][_0x73f5('0xf7')](db[_0x73f5('0xfc')],{'through':_0x73f5('0x161')});db[_0x73f5('0x8e')]['belongsToMany'](db[_0x73f5('0x40')],{'through':'mail_interaction_has_tags'});db[_0x73f5('0x8e')][_0x73f5('0xf7')](db[_0x73f5('0xf3')],{'through':_0x73f5('0x153')});db['Tag'][_0x73f5('0xf7')](db['FaxInteraction'],{'through':_0x73f5('0x14d')});db['Tag'][_0x73f5('0xf7')](db[_0x73f5('0x5f')],{'through':_0x73f5('0x159')});db[_0x73f5('0x176')]['hasMany'](db[_0x73f5('0x83')],{'as':{'plural':_0x73f5('0x177'),'singular':_0x73f5('0x178')},'foreignKey':_0x73f5('0x179'),'onDelete':'cascade','hooks':!![]});db[_0x73f5('0x176')][_0x73f5('0xed')](db['Condition'],{'as':{'plural':_0x73f5('0x17a'),'singular':_0x73f5('0x17b')},'foreignKey':_0x73f5('0x17c'),'onDelete':_0x73f5('0xeb'),'hooks':!![]});db[_0x73f5('0x176')][_0x73f5('0xed')](db[_0x73f5('0x7e')],{'as':_0x73f5('0x16e'),'foreignKey':_0x73f5('0x17d'),'onDelete':'cascade','hooks':!![]});db[_0x73f5('0x174')][_0x73f5('0xed')](db[_0x73f5('0x9d')],{'as':_0x73f5('0x17e'),'onDelete':_0x73f5('0xeb'),'foreignKey':'CustomReportId','hooks':!![]});db[_0x73f5('0x97')][_0x73f5('0xed')](db[_0x73f5('0x9d')],{'as':_0x73f5('0x17e'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x173')});db[_0x73f5('0x9b')][_0x73f5('0xed')](db[_0x73f5('0x9d')],{'as':_0x73f5('0x17e'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x17f')});db['AnalyticFieldReport'][_0x73f5('0x124')](db['AnalyticMetric'],{'foreignKey':_0x73f5('0x17f')});db[_0x73f5('0xa1')][_0x73f5('0xed')](db[_0x73f5('0xa3')],{'as':_0x73f5('0x180'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x181')});db[_0x73f5('0xa3')][_0x73f5('0xed')](db[_0x73f5('0xa5')],{'as':'Subjects','onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x182')});db[_0x73f5('0xa3')][_0x73f5('0xed')](db[_0x73f5('0xa5')],{'as':_0x73f5('0x183'),'onDelete':'cascade','foreignKey':_0x73f5('0x184')});db[_0x73f5('0xa3')][_0x73f5('0xed')](db[_0x73f5('0xa5')],{'as':_0x73f5('0x17e'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x185')});db[_0x73f5('0xa3')][_0x73f5('0x124')](db[_0x73f5('0xa1')],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x181')});db[_0x73f5('0xa5')][_0x73f5('0xed')](db[_0x73f5('0xa5')],{'as':'Subject','foreignKey':_0x73f5('0x182')});db['SalesforceField']['hasMany'](db['SalesforceField'],{'as':_0x73f5('0x186'),'foreignKey':_0x73f5('0x184')});db[_0x73f5('0xa5')][_0x73f5('0xed')](db[_0x73f5('0xa5')],{'as':_0x73f5('0x187'),'foreignKey':_0x73f5('0x185')});db['SalesforceField'][_0x73f5('0x124')](db[_0x73f5('0x92')],{'as':_0x73f5('0x92'),'foreignKey':_0x73f5('0x188')});db['SugarcrmAccount'][_0x73f5('0xed')](db[_0x73f5('0x189')],{'as':_0x73f5('0x180'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x181')});db[_0x73f5('0x189')][_0x73f5('0xed')](db[_0x73f5('0xa9')],{'as':_0x73f5('0x18a'),'onDelete':_0x73f5('0xeb'),'foreignKey':'SubjectId'});db[_0x73f5('0x189')][_0x73f5('0xed')](db['SugarcrmField'],{'as':_0x73f5('0x183'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x184')});db['SugarcrmConfiguration']['hasMany'](db[_0x73f5('0xa9')],{'as':_0x73f5('0x17e'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x185')});db[_0x73f5('0x189')]['belongsTo'](db['SugarcrmAccount'],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x181')});db[_0x73f5('0xa9')]['hasMany'](db[_0x73f5('0xa9')],{'as':'Subject','foreignKey':_0x73f5('0x182')});db[_0x73f5('0xa9')][_0x73f5('0xed')](db[_0x73f5('0xa9')],{'as':_0x73f5('0x186'),'foreignKey':_0x73f5('0x184')});db[_0x73f5('0xa9')][_0x73f5('0xed')](db[_0x73f5('0xa9')],{'as':_0x73f5('0x187'),'foreignKey':'FieldId'});db[_0x73f5('0xa9')][_0x73f5('0x124')](db[_0x73f5('0x92')],{'as':_0x73f5('0x92'),'foreignKey':_0x73f5('0x188')});db[_0x73f5('0xab')][_0x73f5('0xed')](db[_0x73f5('0xad')],{'as':_0x73f5('0x180'),'onDelete':'cascade','foreignKey':_0x73f5('0x181')});db[_0x73f5('0xad')][_0x73f5('0xed')](db[_0x73f5('0x18b')],{'as':_0x73f5('0x18a'),'onDelete':_0x73f5('0xeb'),'foreignKey':'SubjectId'});db['DeskConfiguration']['hasMany'](db[_0x73f5('0x18b')],{'as':_0x73f5('0x183'),'onDelete':'cascade','foreignKey':_0x73f5('0x184')});db['DeskConfiguration'][_0x73f5('0xed')](db[_0x73f5('0x18b')],{'as':_0x73f5('0x17e'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x185')});db[_0x73f5('0xad')][_0x73f5('0x124')](db[_0x73f5('0xab')],{'as':'Account','foreignKey':_0x73f5('0x181')});db['DeskConfiguration'][_0x73f5('0xf7')](db['Tag'],{'through':_0x73f5('0x18c')});db[_0x73f5('0x18b')]['hasMany'](db[_0x73f5('0x18b')],{'as':_0x73f5('0x18d'),'foreignKey':_0x73f5('0x182')});db[_0x73f5('0x18b')]['hasMany'](db[_0x73f5('0x18b')],{'as':_0x73f5('0x186'),'foreignKey':_0x73f5('0x184')});db['DeskField'][_0x73f5('0xed')](db[_0x73f5('0x18b')],{'as':_0x73f5('0x187'),'foreignKey':'FieldId'});db[_0x73f5('0x18b')][_0x73f5('0x124')](db['Variable'],{'as':_0x73f5('0x92'),'foreignKey':_0x73f5('0x188')});db['ZohoAccount']['hasMany'](db['ZohoConfiguration'],{'as':'Configurations','onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x181')});db[_0x73f5('0xb1')][_0x73f5('0xed')](db[_0x73f5('0xb2')],{'as':_0x73f5('0x18a'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x182')});db[_0x73f5('0xb1')][_0x73f5('0xed')](db[_0x73f5('0xb2')],{'as':_0x73f5('0x183'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x184')});db['ZohoConfiguration'][_0x73f5('0xed')](db[_0x73f5('0xb2')],{'as':_0x73f5('0x17e'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x185')});db[_0x73f5('0xb1')]['belongsTo'](db[_0x73f5('0xb0')],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x181')});db[_0x73f5('0xb2')][_0x73f5('0xed')](db[_0x73f5('0xb2')],{'as':_0x73f5('0x18d'),'foreignKey':_0x73f5('0x182')});db[_0x73f5('0xb2')][_0x73f5('0xed')](db[_0x73f5('0xb2')],{'as':_0x73f5('0x186'),'foreignKey':_0x73f5('0x184')});db[_0x73f5('0xb2')][_0x73f5('0xed')](db[_0x73f5('0xb2')],{'as':_0x73f5('0x187'),'foreignKey':_0x73f5('0x185')});db[_0x73f5('0xb2')][_0x73f5('0x124')](db['Variable'],{'as':_0x73f5('0x92'),'foreignKey':_0x73f5('0x188')});db['ZendeskAccount'][_0x73f5('0xed')](db[_0x73f5('0xb6')],{'as':_0x73f5('0x180'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x181')});db[_0x73f5('0xb6')][_0x73f5('0xed')](db[_0x73f5('0x18e')],{'as':'Subjects','foreignKey':_0x73f5('0x182')});db[_0x73f5('0xb6')]['hasMany'](db[_0x73f5('0x18e')],{'as':_0x73f5('0x183'),'foreignKey':'DescriptionId'});db[_0x73f5('0xb6')][_0x73f5('0xed')](db[_0x73f5('0x18e')],{'as':_0x73f5('0x17e'),'foreignKey':'FieldId'});db[_0x73f5('0xb6')][_0x73f5('0x124')](db['ZendeskAccount'],{'as':'Account','foreignKey':_0x73f5('0x181')});db[_0x73f5('0xb6')][_0x73f5('0xf7')](db[_0x73f5('0x8e')],{'through':_0x73f5('0x18f')});db[_0x73f5('0x18e')][_0x73f5('0xed')](db[_0x73f5('0x18e')],{'as':_0x73f5('0x18d'),'foreignKey':_0x73f5('0x182')});db[_0x73f5('0x18e')][_0x73f5('0xed')](db['ZendeskField'],{'as':'Description','foreignKey':'DescriptionId'});db['ZendeskField']['hasMany'](db[_0x73f5('0x18e')],{'as':_0x73f5('0x187'),'foreignKey':_0x73f5('0x185')});db[_0x73f5('0x18e')][_0x73f5('0x124')](db[_0x73f5('0x92')],{'as':'Variable','foreignKey':'VariableId'});db[_0x73f5('0x190')][_0x73f5('0xed')](db['FreshdeskConfiguration'],{'as':_0x73f5('0x180'),'onDelete':'cascade','foreignKey':_0x73f5('0x181')});db['FreshdeskConfiguration'][_0x73f5('0xed')](db['FreshdeskField'],{'as':'Subjects','onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x182')});db['FreshdeskConfiguration'][_0x73f5('0xed')](db['FreshdeskField'],{'as':_0x73f5('0x183'),'onDelete':'cascade','foreignKey':_0x73f5('0x184')});db[_0x73f5('0xb8')][_0x73f5('0xed')](db[_0x73f5('0xb9')],{'as':'Fields','onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x185')});db['FreshdeskConfiguration']['belongsTo'](db[_0x73f5('0x190')],{'as':'Account','foreignKey':_0x73f5('0x181')});db[_0x73f5('0xb8')][_0x73f5('0xf7')](db['Tag'],{'through':_0x73f5('0x191')});db[_0x73f5('0xb9')]['hasMany'](db['FreshdeskField'],{'as':_0x73f5('0x18d'),'foreignKey':_0x73f5('0x182')});db[_0x73f5('0xb9')]['hasMany'](db[_0x73f5('0xb9')],{'as':'Description','foreignKey':_0x73f5('0x184')});db['FreshdeskField'][_0x73f5('0xed')](db['FreshdeskField'],{'as':_0x73f5('0x187'),'foreignKey':_0x73f5('0x185')});db[_0x73f5('0xb9')][_0x73f5('0x124')](db[_0x73f5('0x92')],{'as':'Variable','foreignKey':'VariableId'});db[_0x73f5('0xbb')]['hasMany'](db[_0x73f5('0x192')],{'as':_0x73f5('0x180'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x181')});db[_0x73f5('0x192')][_0x73f5('0xed')](db[_0x73f5('0xbd')],{'as':'Subjects','foreignKey':'SubjectId'});db['VtigerConfiguration'][_0x73f5('0xed')](db[_0x73f5('0xbd')],{'as':'Descriptions','foreignKey':'DescriptionId'});db[_0x73f5('0x192')][_0x73f5('0xed')](db[_0x73f5('0xbd')],{'as':'Fields','foreignKey':_0x73f5('0x185')});db[_0x73f5('0x192')]['belongsTo'](db['VtigerAccount'],{'as':_0x73f5('0x142'),'foreignKey':_0x73f5('0x181')});db[_0x73f5('0x192')]['belongsToMany'](db[_0x73f5('0x8e')],{'through':_0x73f5('0x193')});db['VtigerField'][_0x73f5('0xed')](db['VtigerField'],{'as':_0x73f5('0x18d'),'foreignKey':_0x73f5('0x182')});db[_0x73f5('0xbd')][_0x73f5('0xed')](db[_0x73f5('0xbd')],{'as':_0x73f5('0x186'),'foreignKey':_0x73f5('0x184')});db['VtigerField'][_0x73f5('0xed')](db['VtigerField'],{'as':'Field','foreignKey':_0x73f5('0x185')});db[_0x73f5('0xbd')][_0x73f5('0x124')](db['Variable'],{'as':_0x73f5('0x92'),'foreignKey':_0x73f5('0x188')});db[_0x73f5('0xc0')]['belongsTo'](db[_0x73f5('0x65')],{});db[_0x73f5('0xc0')][_0x73f5('0x124')](db[_0x73f5('0xe7')],{'as':_0x73f5('0x13d'),'foreignKey':_0x73f5('0x13e')});db[_0x73f5('0xc0')][_0x73f5('0x124')](db['CmContact'],{'as':_0x73f5('0x132'),'foreignKey':_0x73f5('0x133')});db[_0x73f5('0xc0')][_0x73f5('0x124')](db['ChatInteraction'],{});db[_0x73f5('0xc0')][_0x73f5('0x124')](db[_0x73f5('0x6a')],{});db[_0x73f5('0xc0')][_0x73f5('0x124')](db['User'],{});db[_0x73f5('0xc0')][_0x73f5('0x124')](db[_0x73f5('0x6d')],{});db[_0x73f5('0x163')][_0x73f5('0x124')](db['User'],{'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x194')});db[_0x73f5('0x163')][_0x73f5('0x124')](db['User'],{'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x195')});db['JscriptySessionReport'][_0x73f5('0xed')](db[_0x73f5('0xc4')],{'foreignKey':_0x73f5('0x196'),'onDelete':_0x73f5('0xeb')});db[_0x73f5('0xc6')]['hasMany'](db[_0x73f5('0xc2')],{'foreignKey':_0x73f5('0x196'),'onDelete':_0x73f5('0xeb')});db[_0x73f5('0xc8')][_0x73f5('0x124')](db[_0x73f5('0x55')],{});db[_0x73f5('0xc8')]['belongsTo'](db[_0x73f5('0xe7')],{'as':'List','foreignKey':_0x73f5('0x13e')});db[_0x73f5('0xc8')][_0x73f5('0x124')](db[_0x73f5('0x75')],{'as':_0x73f5('0x132'),'foreignKey':_0x73f5('0x133')});db['SmsQueueReport']['belongsTo'](db[_0x73f5('0xf3')],{});db[_0x73f5('0xc8')][_0x73f5('0x124')](db[_0x73f5('0x59')],{});db['SmsQueueReport']['belongsTo'](db[_0x73f5('0x12')],{});db[_0x73f5('0xc8')][_0x73f5('0x124')](db[_0x73f5('0x5b')],{});db['JscriptyProject'][_0x73f5('0xed')](db[_0x73f5('0xc6')],{'foreignKey':_0x73f5('0x197')});db[_0x73f5('0xce')][_0x73f5('0xed')](db[_0x73f5('0xc4')],{'foreignKey':_0x73f5('0x197')});db[_0x73f5('0xce')][_0x73f5('0xed')](db['JscriptyAnswerReport'],{'foreignKey':_0x73f5('0x197')});db[_0x73f5('0xd2')][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':_0x73f5('0x147'),'through':_0x73f5('0x114')});db[_0x73f5('0xd5')][_0x73f5('0xf7')](db['User'],{'as':_0x73f5('0x127'),'through':_0x73f5('0x198')});db[_0x73f5('0xd5')][_0x73f5('0xf7')](db['VoiceQueue'],{'through':_0x73f5('0x129'),'as':_0x73f5('0x102')});db[_0x73f5('0xd5')][_0x73f5('0xf7')](db[_0x73f5('0x3d')],{'through':_0x73f5('0x140'),'as':_0x73f5('0x103')});db[_0x73f5('0xd5')][_0x73f5('0xf7')](db[_0x73f5('0x6d')],{'through':'team_has_chat_queues','as':_0x73f5('0x104')});db[_0x73f5('0xd5')]['belongsToMany'](db[_0x73f5('0x106')],{'through':_0x73f5('0x199'),'as':_0x73f5('0x107')});db[_0x73f5('0xd5')][_0x73f5('0xf7')](db[_0x73f5('0x5b')],{'through':_0x73f5('0x154'),'as':_0x73f5('0x108')});db['Team'][_0x73f5('0xf7')](db[_0x73f5('0x63')],{'through':'team_has_openchannel_queues','as':_0x73f5('0x19a')});db[_0x73f5('0x168')][_0x73f5('0xed')](db['CmHopper'],{'as':_0x73f5('0x11b'),'foreignKey':_0x73f5('0x169')});db[_0x73f5('0x168')][_0x73f5('0xed')](db['CmHopperFinal'],{'as':_0x73f5('0xf0'),'foreignKey':_0x73f5('0x169')});db[_0x73f5('0x168')][_0x73f5('0xed')](db[_0x73f5('0x11c')],{'as':'HopperHistories','foreignKey':'CampaignId'});db[_0x73f5('0x168')][_0x73f5('0xed')](db['CmHopperBlack'],{'as':_0x73f5('0x11e'),'foreignKey':_0x73f5('0x169')});db['Campaign'][_0x73f5('0x124')](db[_0x73f5('0x120')],{'as':'Trunk','foreignKey':_0x73f5('0x121')});db[_0x73f5('0x168')][_0x73f5('0x124')](db[_0x73f5('0x120')],{'as':_0x73f5('0x122'),'foreignKey':'TrunkBackupId'});db[_0x73f5('0x168')][_0x73f5('0x124')](db[_0x73f5('0x85')],{'as':_0x73f5('0x85'),'foreignKey':_0x73f5('0x125')});db[_0x73f5('0x168')]['belongsTo'](db['SquareProject'],{'as':_0x73f5('0xd2'),'foreignKey':_0x73f5('0x19b')});db[_0x73f5('0x168')][_0x73f5('0xf7')](db[_0x73f5('0xe7')],{'as':_0x73f5('0xf9'),'through':_0x73f5('0x19c')});db[_0x73f5('0x168')]['belongsToMany'](db[_0x73f5('0xe7')],{'as':_0x73f5('0x12a'),'through':_0x73f5('0x19d')});db['MailTransferReport'][_0x73f5('0x124')](db[_0x73f5('0x42')],{});db[_0x73f5('0xde')][_0x73f5('0x124')](db[_0x73f5('0x40')],{});db[_0x73f5('0xde')][_0x73f5('0x124')](db[_0x73f5('0x3b')],{'foreignKey':_0x73f5('0x19e'),'as':_0x73f5('0x19f')});db[_0x73f5('0xde')][_0x73f5('0x124')](db['User'],{'foreignKey':_0x73f5('0x1a0'),'as':_0x73f5('0x1a1')});db[_0x73f5('0xde')]['belongsTo'](db[_0x73f5('0x12')],{'foreignKey':_0x73f5('0x1a2'),'as':'ToAgent'});db[_0x73f5('0xde')]['belongsTo'](db[_0x73f5('0x3d')],{'foreignKey':_0x73f5('0x1a3'),'as':_0x73f5('0x1a4')});db[_0x73f5('0xde')][_0x73f5('0x124')](db[_0x73f5('0x3b')],{'foreignKey':_0x73f5('0x1a5'),'as':_0x73f5('0x1a6')});db[_0x73f5('0xe0')]['belongsTo'](db[_0x73f5('0x6a')],{});db[_0x73f5('0xe0')]['belongsTo'](db['ChatInteraction'],{});db[_0x73f5('0xe0')][_0x73f5('0x124')](db['ChatWebsite'],{'foreignKey':'FromChatWebsiteId','as':'FromAccount'});db[_0x73f5('0xe0')][_0x73f5('0x124')](db['User'],{'foreignKey':'FromUserId','as':_0x73f5('0x1a1')});db[_0x73f5('0xe0')]['belongsTo'](db[_0x73f5('0x12')],{'foreignKey':_0x73f5('0x1a2'),'as':_0x73f5('0x1a7')});db[_0x73f5('0xe0')][_0x73f5('0x124')](db['ChatQueue'],{'foreignKey':'ToChatQueueId','as':'ToQueue'});db[_0x73f5('0xe0')][_0x73f5('0x124')](db['ChatWebsite'],{'foreignKey':_0x73f5('0x1a8'),'as':_0x73f5('0x1a6')});db[_0x73f5('0x1a9')][_0x73f5('0x124')](db['FaxMessage'],{});db[_0x73f5('0x1a9')][_0x73f5('0x124')](db[_0x73f5('0x4f')],{});db['FaxTransferReport']['belongsTo'](db['FaxAccount'],{'foreignKey':'FromFaxAccountId','as':_0x73f5('0x19f')});db['FaxTransferReport'][_0x73f5('0x124')](db[_0x73f5('0x12')],{'foreignKey':'FromUserId','as':_0x73f5('0x1a1')});db[_0x73f5('0x1a9')]['belongsTo'](db[_0x73f5('0x12')],{'foreignKey':'ToUserId','as':'ToAgent'});db[_0x73f5('0x1a9')][_0x73f5('0x124')](db[_0x73f5('0x106')],{'foreignKey':_0x73f5('0x1aa'),'as':'ToQueue'});db[_0x73f5('0x1a9')][_0x73f5('0x124')](db['FaxAccount'],{'foreignKey':_0x73f5('0x1ab'),'as':'ToAccount'});db['OpenchannelTransferReport'][_0x73f5('0x124')](db[_0x73f5('0x61')],{});db[_0x73f5('0xe3')][_0x73f5('0x124')](db[_0x73f5('0x5f')],{});db['OpenchannelTransferReport']['belongsTo'](db[_0x73f5('0x5d')],{'foreignKey':_0x73f5('0x1ac'),'as':_0x73f5('0x19f')});db[_0x73f5('0xe3')][_0x73f5('0x124')](db[_0x73f5('0x12')],{'foreignKey':_0x73f5('0x1a0'),'as':_0x73f5('0x1a1')});db['OpenchannelTransferReport'][_0x73f5('0x124')](db[_0x73f5('0x12')],{'foreignKey':_0x73f5('0x1a2'),'as':'ToAgent'});db[_0x73f5('0xe3')]['belongsTo'](db[_0x73f5('0x63')],{'foreignKey':'ToOpenchannelQueueId','as':_0x73f5('0x1a4')});db['OpenchannelTransferReport'][_0x73f5('0x124')](db[_0x73f5('0x5d')],{'foreignKey':_0x73f5('0x1ad'),'as':_0x73f5('0x1a6')});db[_0x73f5('0xe5')]['belongsTo'](db[_0x73f5('0x59')],{});db[_0x73f5('0xe5')]['belongsTo'](db['SmsInteraction'],{});db[_0x73f5('0xe5')][_0x73f5('0x124')](db[_0x73f5('0x55')],{'foreignKey':_0x73f5('0x1ae'),'as':_0x73f5('0x19f')});db[_0x73f5('0xe5')][_0x73f5('0x124')](db[_0x73f5('0x12')],{'foreignKey':_0x73f5('0x1a0'),'as':_0x73f5('0x1a1')});db[_0x73f5('0xe5')][_0x73f5('0x124')](db[_0x73f5('0x12')],{'foreignKey':_0x73f5('0x1a2'),'as':'ToAgent'});db['SmsTransferReport'][_0x73f5('0x124')](db['SmsQueue'],{'foreignKey':_0x73f5('0x1af'),'as':'ToQueue'});db[_0x73f5('0xe5')][_0x73f5('0x124')](db[_0x73f5('0x55')],{'foreignKey':_0x73f5('0x1b0'),'as':'ToAccount'});db[_0x73f5('0xe7')][_0x73f5('0xed')](db['Disposition'],{'as':_0x73f5('0x139'),'foreignKey':_0x73f5('0x13e')});db[_0x73f5('0xe7')][_0x73f5('0xed')](db['CmCustomField'],{'as':_0x73f5('0x1b1'),'foreignKey':_0x73f5('0x13e')});db['CmList'][_0x73f5('0xed')](db[_0x73f5('0x75')],{'as':_0x73f5('0x165'),'onDelete':_0x73f5('0xeb'),'foreignKey':_0x73f5('0x13e')});db[_0x73f5('0xe7')]['hasMany'](db[_0x73f5('0x79')],{'as':_0x73f5('0xf0'),'foreignKey':_0x73f5('0x13e')});db[_0x73f5('0xe7')][_0x73f5('0xed')](db['CmHopperHistory'],{'as':'HopperHistory','foreignKey':'ListId'});db['CmList'][_0x73f5('0xed')](db[_0x73f5('0x7a')],{'as':_0x73f5('0x7a'),'foreignKey':'ListId'});db['CmList'][_0x73f5('0xf7')](db[_0x73f5('0x1c')],{'as':'Queues','through':_0x73f5('0x126')});db[_0x73f5('0xe7')][_0x73f5('0xf7')](db[_0x73f5('0x12')],{'as':_0x73f5('0x127'),'through':_0x73f5('0xfa')});db[_0x73f5('0xe9')][_0x73f5('0xed')](db[_0x73f5('0x115')],{'as':'Extensions','onDelete':_0x73f5('0x14a')});db[_0x73f5('0xe9')][_0x73f5('0xf7')](db['User'],{'as':_0x73f5('0x127'),'through':'user_has_voice_prefixes'});module[_0x73f5('0x1b2')]={'db':db,'dbH':dbH};
\ No newline at end of file
+var _0xeb87=['Items','FaxAccountId','FaxApplication','fax_interaction_has_tags','Interaction','FaxInteractionId','AttachmentId','team_has_fax_queues','FaxQueueReport','SmsAccountId','SmsInteraction','IntervalId','SmsInteractionId','Owner','sms_interaction_has_tags','SmsQueueId','team_has_sms_queues','Teams','OpenchannelAccountId','OpenchannelInteractionId','openchannel_interaction_has_tags','team_has_openchannel_queues','ProactiveActions','ChatMessage','OpenchannelQueueReport','ChatApplication','Agent','Website','ChatWebsiteId','ChatInteractionId','chat_interaction_has_tags','team_has_chat_queues','ChatGroupId','CompanyId','Company','cm_contact_has_tags','Queue','CampaignId','All','AutomationAllId','Any','OneAny','AutomationAnyId','AutomationId','Intervals','Extensions','MailApplications','ChatApplications','FaxApplications','SmsApplications','DefaultReportId','CustomReportId','Mohs','AllConditions','TriggerAllId','AnyConditions','AnyCondition','TriggerAnyId','Actions','TriggerId','AnalyticFieldReport','Fields','AnalyticMetric','MetricId','Configurations','AccountId','Subjects','Descriptions','FieldId','Subject','SubjectId','Description','DescriptionId','Field','VariableId','SugarcrmField','DeskField','int_desk_configuration_has_tags','ZohoConfiguration','ZendeskConfiguration','int_zendesk_configuration_has_tags','FreshdeskAccount','FreshdeskField','int_freshdesk_configuration_has_tags','int_vtiger_configuration_has_tags','FromId','ToId','SessionId','JscriptyAnswerReport','SmsQueueReport','ProjectId','team_has_mail_queues','TrunkBackup','TrunkBackupId','SquareProjectId','campaigns_has_cm_lists','campaigns_has_cm_blacklists','MailTransferReport','FromMailAccountId','FromAccount','FromUserId','FromAgent','ToUserId','ToAgent','ToMailQueueId','ToQueue','ToMailAccountId','ToAccount','FromChatWebsiteId','ToChatQueueId','ToChatWebsiteId','ToFaxQueueId','ToFaxAccountId','OpenchannelTransferReport','FromOpenchannelAccountId','ToOpenchannelQueueId','ToOpenchannelAccountId','FromSmsAccountId','ToSmsAccountId','CmCustomField','Queues','exports','path','../config/environment','sequelize','jstz','defaultsDeep','motion2','xC@LL1234','127.0.0.1','mysql','name','utf8_general_ci','sequelizeHistory','xcall','utf8mb4','database','username','password','options','User','import','../api/user/user.model','VoiceChanSpy','VoiceContext','VoiceExtension','../api/voiceMusicOnHold/voiceMusicOnHold.model','VoiceQueue','../api/voiceQueue/voiceQueue.model','VoiceRecording','../api/voiceRecording/voiceRecording.model','VoiceMail','../api/voiceMail/voiceMail.model','../api/voiceMailMessage/voiceMailMessage.model','VoiceCallReport','../api/voiceCallReport/voiceCallReport.model','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','../api/userVoiceQueueRt/userVoiceQueueRt.model','../api/userVoiceQueue/userVoiceQueue.model','../api/userChatQueue/userChatQueue.model','UserMailQueue','../api/userMailQueue/userMailQueue.model','UserFaxQueue','../api/userFaxQueue/userFaxQueue.model','UserSmsQueue','../api/userOpenchannelQueue/userOpenchannelQueue.model','MailServerIn','../api/mailServerIn/mailServerIn.model','MailServerOut','MailAccount','MailQueue','MailSubstatus','MailInteraction','../api/mailInteraction/mailInteraction.model','MailApplication','../api/mailQueueReport/mailQueueReport.model','Dashboard','../api/dashboard/dashboard.model','DashboardItem','../api/dashboardItem/dashboardItem.model','FaxAccount','../api/faxAccount/faxAccount.model','FaxInteraction','../api/faxInteraction/faxInteraction.model','FaxMessage','../api/faxMessage/faxMessage.model','FaxQueue','../api/faxQueue/faxQueue.model','SmsAccount','../api/smsAccount/smsAccount.model','SmsApplication','../api/smsApplication/smsApplication.model','../api/smsInteraction/smsInteraction.model','SmsMessage','../api/smsMessage/smsMessage.model','SmsQueue','../api/smsQueue/smsQueue.model','OpenchannelAccount','../api/openchannelAccount/openchannelAccount.model','OpenchannelApplication','../api/openchannelApplication/openchannelApplication.model','OpenchannelInteraction','../api/openchannelInteraction/openchannelInteraction.model','OpenchannelMessage','OpenchannelQueue','../api/openchannelQueue/openchannelQueue.model','../api/chatWebsite/chatWebsite.model','../api/openchannelQueueReport/openchannelQueueReport.model','../api/chatApplication/chatApplication.model','ChatInteraction','../api/chatInteraction/chatInteraction.model','ChatOfflineMessage','../api/chatOfflineMessage/chatOfflineMessage.model','ChatQueue','../api/chatQueue/chatQueue.model','ChatGroup','ChatProactiveAction','CmCompany','../api/cmCompany/cmCompany.model','CmContact','CmHopper','../api/cmHopper/cmHopper.model','CmHopperBlack','../api/cmHopperBlack/cmHopperBlack.model','CmHopperFinal','../api/cmHopperFinal/cmHopperFinal.model','CmHopperHistory','ReportAgentPreview','../api/reportAgentPreview/reportAgentPreview.model','Action','../api/action/action.model','Automation','../api/automation/automation.model','CannedAnswer','../api/cannedAnswer/cannedAnswer.model','Disposition','Condition','Interval','../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','IntegrationReport','../api/integrationReport/integrationReport.model','AnalyticCustomReport','../api/analyticCustomReport/analyticCustomReport.model','AnalyticDefaultReport','../api/analyticDefaultReport/analyticDefaultReport.model','AnalyticExtractedReport','../api/analyticExtractedReport/analyticExtractedReport.model','../api/analyticMetric/analyticMetric.model','../api/analyticFieldReport/analyticFieldReport.model','AnalyticTreeReport','../api/analyticTreeReport/analyticTreeReport.model','SalesforceAccount','../api/intSalesforceAccount/intSalesforceAccount.model','SalesforceConfiguration','SalesforceField','SugarcrmAccount','../api/intSugarcrmAccount/intSugarcrmAccount.model','SugarcrmConfiguration','../api/intSugarcrmConfiguration/intSugarcrmConfiguration.model','../api/intSugarcrmField/intSugarcrmField.model','DeskAccount','../api/intDeskAccount/intDeskAccount.model','DeskConfiguration','../api/intDeskConfiguration/intDeskConfiguration.model','../api/intDeskField/intDeskField.model','ZohoAccount','../api/intZohoAccount/intZohoAccount.model','../api/intZohoConfiguration/intZohoConfiguration.model','ZohoField','ZendeskAccount','../api/intZendeskAccount/intZendeskAccount.model','../api/intZendeskConfiguration/intZendeskConfiguration.model','ZendeskField','../api/intZendeskField/intZendeskField.model','../api/intFreshdeskAccount/intFreshdeskAccount.model','FreshdeskConfiguration','../api/intFreshdeskConfiguration/intFreshdeskConfiguration.model','../api/intFreshdeskField/intFreshdeskField.model','VtigerAccount','../api/intVtigerAccount/intVtigerAccount.model','VtigerConfiguration','../api/intVtigerConfiguration/intVtigerConfiguration.model','VtigerField','../api/intVtigerField/intVtigerField.model','../api/integration/integration.model','Network','../api/network/network.model','ChatQueueReport','../api/chatQueueReport/chatQueueReport.model','ChatInternalMessage','../api/chatInternalMessage/chatInternalMessage.model','../api/jscriptyAnswerReport/jscriptyAnswerReport.model','JscriptyQuestionReport','../api/jscriptyQuestionReport/jscriptyQuestionReport.model','../api/jscriptySessionReport/jscriptySessionReport.model','../api/smsQueueReport/smsQueueReport.model','../api/squareReport/squareReport.model','SquareDetailsReport','../api/squareReportDetail/squareReportDetail.model','JscriptyProject','../api/setting/setting.model','SquareOdbc','SquareProject','../api/squareProject/squareProject.model','SquareRecording','Team','License','../api/license/license.model','Campaign','../api/campaign/campaign.model','../api/migration/migration.model','Attachment','../api/attachment/attachment.model','Plugin','../api/plugin/plugin.model','../api/mailTransferReport/mailTransferReport.model','ChatTransferReport','../api/chatTransferReport/chatTransferReport.model','FaxTransferReport','../api/faxTransferReport/faxTransferReport.model','../api/openchannelTransferReport/openchannelTransferReport.model','SmsTransferReport','../api/smsTransferReport/smsTransferReport.model','../api/cmList/cmList.model','VoicePrefix','hasOne','cascade','UserId','hasMany','Recordings','UserVoiceQueueRt','VoiceQueuesRt','HopperFinals','HopperHistory','OpenchannelInteractions','SmsInteractions','FaxInteractions','MailInteractions','Groups','chat_group_has_users','belongsToMany','Contacts','cm_user_has_contacts','CmList','Lists','cm_user_has_lists','user_has_teams','user_has_mail_interactions','ChatInteractions','user_has_chat_interactions','user_has_fax_interactions','user_has_sms_interactions','user_has_openchannel_interactions','VoiceQueues','UserVoiceQueue','ChatQueues','UserChatQueue','FaxQueues','SmsQueues','OpenchannelQueues','UserOpenchannelQueue','VoicePrefixes','user_has_voice_prefixes','ChatWebsite','ChatWebsites','user_has_chat_websites','user_has_fax_accounts','MailAccounts','user_has_mail_accounts','OpenchannelAccounts','user_has_openchannel_accounts','user_has_sms_accounts','SquareProjects','user_has_square_projects','SpiedAgents','ChanSpyId','VoiceMusicOnHold','Sounds','moh_has_sounds','VoiceQueueId','Hoppers','HopperHistories','HopperBlacks','JscriptySessionReport','JscriptySessions','belongsTo','TrunkId','voice_queues_has_cm_lists','Agents','team_has_voice_queues','BlackLists','voice_queues_has_cm_blacklists','Messages','mailboxuser','mailbox','QueueCalls','uniqueid','AgentReports','Contact','ContactId','MailAccountId','Imap','Smtp','Dispositions','Answers','Interactions','Applications','List','ListId','Template','MailInteractionId','Account','Tags','mail_interaction_has_tags','ThroughTags','Users','MailMessage','Attachments','restrict','TagId','MailQueueReport'];(function(_0x2fc6a1,_0x1ad007){var _0x5613a3=function(_0x1aa8ce){while(--_0x1aa8ce){_0x2fc6a1['push'](_0x2fc6a1['shift']());}};_0x5613a3(++_0x1ad007);}(_0xeb87,0x7a));var _0x7eb8=function(_0x55879d,_0xfcd2fb){_0x55879d=_0x55879d-0x0;var _0x384dbd=_0xeb87[_0x55879d];return _0x384dbd;};'use strict';var path=require(_0x7eb8('0x0'));var config=require(_0x7eb8('0x1'));var Sequelize=require(_0x7eb8('0x2'));var _=require('lodash');var jstz=require(_0x7eb8('0x3'));var timezone=jstz['determine']();config[_0x7eb8('0x2')]=_[_0x7eb8('0x4')](config[_0x7eb8('0x2')],{'database':_0x7eb8('0x5'),'username':'xcall','password':_0x7eb8('0x6'),'options':{'host':_0x7eb8('0x7'),'port':0xcea,'dialect':_0x7eb8('0x8'),'dialectOptions':{'charset':'utf8mb4'},'logging':![],'timezone':timezone[_0x7eb8('0x9')](),'define':{'charset':'utf8','collate':_0x7eb8('0xa')}}});config[_0x7eb8('0xb')]=_[_0x7eb8('0x4')](config['sequelizeHistory'],{'database':_0x7eb8('0x5'),'username':_0x7eb8('0xc'),'password':_0x7eb8('0x6'),'options':{'host':_0x7eb8('0x7'),'port':0xcea,'dialect':'mysql','dialectOptions':{'charset':_0x7eb8('0xd')},'logging':![],'timezone':timezone[_0x7eb8('0x9')](),'define':{'charset':'utf8','collate':_0x7eb8('0xa')}}});var db={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0x7eb8('0x2')][_0x7eb8('0xe')],config[_0x7eb8('0x2')][_0x7eb8('0xf')],config[_0x7eb8('0x2')][_0x7eb8('0x10')],config['sequelize'][_0x7eb8('0x11')])};var dbH={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0x7eb8('0xb')]['database'],config['sequelizeHistory'][_0x7eb8('0xf')],config['sequelizeHistory']['password'],config[_0x7eb8('0xb')]['options'])};db[_0x7eb8('0x12')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x14'));db[_0x7eb8('0x15')]=db['sequelize'][_0x7eb8('0x13')]('../api/voiceChanSpy/voiceChanSpy.model');db[_0x7eb8('0x16')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/voiceContext/voiceContext.model');db[_0x7eb8('0x17')]=db[_0x7eb8('0x2')]['import']('../api/voiceExtension/voiceExtension.model');db['VoiceMusicOnHold']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x18'));db[_0x7eb8('0x19')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x1a'));db[_0x7eb8('0x1b')]=db['sequelize']['import'](_0x7eb8('0x1c'));db[_0x7eb8('0x1d')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x1e'));db['VoiceMailMessage']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x1f'));db[_0x7eb8('0x20')]=db['sequelize']['import'](_0x7eb8('0x21'));db[_0x7eb8('0x22')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x23'));db[_0x7eb8('0x24')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x25'));db[_0x7eb8('0x26')]=db[_0x7eb8('0x2')]['import']('../api/voiceQueueReport/voiceQueueReport.model');db[_0x7eb8('0x27')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x28'));db[_0x7eb8('0x29')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x2a'));db[_0x7eb8('0x2b')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x2c'));db['UserVoiceQueueRt']=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x2d'));db['UserVoiceQueue']=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x2e'));db['UserChatQueue']=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x2f'));db[_0x7eb8('0x30')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x31'));db[_0x7eb8('0x32')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x33'));db[_0x7eb8('0x34')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/userSmsQueue/userSmsQueue.model');db['UserOpenchannelQueue']=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x35'));db[_0x7eb8('0x36')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x37'));db[_0x7eb8('0x38')]=db['sequelize'][_0x7eb8('0x13')]('../api/mailServerOut/mailServerOut.model');db[_0x7eb8('0x39')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/mailAccount/mailAccount.model');db[_0x7eb8('0x3a')]=db[_0x7eb8('0x2')]['import']('../api/mailQueue/mailQueue.model');db[_0x7eb8('0x3b')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/mailSubstatus/mailSubstatus.model');db[_0x7eb8('0x3c')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x3d'));db['MailMessage']=db['sequelize'][_0x7eb8('0x13')]('../api/mailMessage/mailMessage.model');db[_0x7eb8('0x3e')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/mailApplication/mailApplication.model');db['MailQueueReport']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x3f'));db[_0x7eb8('0x40')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x41'));db[_0x7eb8('0x42')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x43'));db[_0x7eb8('0x44')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x45'));db['FaxApplication']=db['sequelize'][_0x7eb8('0x13')]('../api/faxApplication/faxApplication.model');db[_0x7eb8('0x46')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x47'));db[_0x7eb8('0x48')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x49'));db[_0x7eb8('0x4a')]=db['sequelize']['import'](_0x7eb8('0x4b'));db['FaxQueueReport']=db[_0x7eb8('0x2')]['import']('../api/faxQueueReport/faxQueueReport.model');db[_0x7eb8('0x4c')]=db['sequelize']['import'](_0x7eb8('0x4d'));db[_0x7eb8('0x4e')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x4f'));db['SmsInteraction']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x50'));db[_0x7eb8('0x51')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x52'));db[_0x7eb8('0x53')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x54'));db[_0x7eb8('0x55')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x56'));db[_0x7eb8('0x57')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x58'));db[_0x7eb8('0x59')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x5a'));db[_0x7eb8('0x5b')]=db[_0x7eb8('0x2')]['import']('../api/openchannelMessage/openchannelMessage.model');db[_0x7eb8('0x5c')]=db['sequelize']['import'](_0x7eb8('0x5d'));db['ChatWebsite']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x5e'));db['OpenchannelQueueReport']=db['sequelize']['import'](_0x7eb8('0x5f'));db['ChatApplication']=db['sequelize']['import'](_0x7eb8('0x60'));db[_0x7eb8('0x61')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x62'));db['ChatMessage']=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/chatMessage/chatMessage.model');db[_0x7eb8('0x63')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x64'));db[_0x7eb8('0x65')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x66'));db[_0x7eb8('0x67')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/chatGroup/chatGroup.model');db[_0x7eb8('0x68')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/chatProactiveAction/chatProactiveAction.model');db[_0x7eb8('0x69')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x6a'));db[_0x7eb8('0x6b')]=db['sequelize'][_0x7eb8('0x13')]('../api/cmContact/cmContact.model');db[_0x7eb8('0x6c')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x6d'));db[_0x7eb8('0x6e')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x6f'));db[_0x7eb8('0x70')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x71'));db[_0x7eb8('0x72')]=db['sequelize']['import']('../api/cmHopperHistory/cmHopperHistory.model');db[_0x7eb8('0x73')]=db['sequelize']['import'](_0x7eb8('0x74'));db['CmCustomField']=db[_0x7eb8('0x2')]['import']('../api/cmCustomField/cmCustomField.model');db[_0x7eb8('0x75')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x76'));db[_0x7eb8('0x77')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x78'));db[_0x7eb8('0x79')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x7a'));db[_0x7eb8('0x7b')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/disposition/disposition.model');db[_0x7eb8('0x7c')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/condition/condition.model');db[_0x7eb8('0x7d')]=db[_0x7eb8('0x2')]['import']('../api/interval/interval.model');db['Pause']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x7e'));db[_0x7eb8('0x7f')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x80'));db['VoiceQueuesLog']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x81'));db[_0x7eb8('0x82')]=db[_0x7eb8('0x2')]['import']('../api/schedule/schedule.model');db[_0x7eb8('0x83')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x84'));db[_0x7eb8('0x85')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x86'));db['Template']=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x87'));db[_0x7eb8('0x88')]=db[_0x7eb8('0x2')]['import']('../api/trigger/trigger.model');db[_0x7eb8('0x89')]=db['sequelize'][_0x7eb8('0x13')]('../api/variable/variable.model');db['Integration']=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/integration/integration.model');db[_0x7eb8('0x8a')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x8b'));db[_0x7eb8('0x8c')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x8d'));db[_0x7eb8('0x8e')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x8f'));db[_0x7eb8('0x90')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x91'));db['AnalyticMetric']=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x92'));db['AnalyticFieldReport']=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x93'));db[_0x7eb8('0x94')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x95'));db[_0x7eb8('0x96')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0x97'));db[_0x7eb8('0x98')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/intSalesforceConfiguration/intSalesforceConfiguration.model');db[_0x7eb8('0x99')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/intSalesforceField/intSalesforceField.model');db[_0x7eb8('0x9a')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0x9b'));db[_0x7eb8('0x9c')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x9d'));db['SugarcrmField']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0x9e'));db[_0x7eb8('0x9f')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0xa0'));db[_0x7eb8('0xa1')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0xa2'));db['DeskField']=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0xa3'));db[_0x7eb8('0xa4')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0xa5'));db['ZohoConfiguration']=db[_0x7eb8('0x2')]['import'](_0x7eb8('0xa6'));db[_0x7eb8('0xa7')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/intZohoField/intZohoField.model');db[_0x7eb8('0xa8')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0xa9'));db['ZendeskConfiguration']=db[_0x7eb8('0x2')]['import'](_0x7eb8('0xaa'));db[_0x7eb8('0xab')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xac'));db['FreshdeskAccount']=db[_0x7eb8('0x2')]['import'](_0x7eb8('0xad'));db[_0x7eb8('0xae')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0xaf'));db['FreshdeskField']=db['sequelize']['import'](_0x7eb8('0xb0'));db[_0x7eb8('0xb1')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xb2'));db[_0x7eb8('0xb3')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0xb4'));db[_0x7eb8('0xb5')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0xb6'));db['Integration']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xb7'));db[_0x7eb8('0xb8')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0xb9'));db[_0x7eb8('0xba')]=db['sequelize']['import'](_0x7eb8('0xbb'));db[_0x7eb8('0xbc')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xbd'));db['JscriptyAnswerReport']=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0xbe'));db[_0x7eb8('0xbf')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xc0'));db['JscriptySessionReport']=db[_0x7eb8('0x2')]['import'](_0x7eb8('0xc1'));db['SmsQueueReport']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xc2'));db['SquareReport']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xc3'));db[_0x7eb8('0xc4')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0xc5'));db[_0x7eb8('0xc6')]=db[_0x7eb8('0x2')]['import']('../api/jscriptyProject/jscriptyProject.model');db['Setting']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xc7'));db[_0x7eb8('0xc8')]=db['sequelize'][_0x7eb8('0x13')]('../api/squareOdbc/squareOdbc.model');db[_0x7eb8('0xc9')]=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0xca'));db[_0x7eb8('0xcb')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')]('../api/squareRecording/squareRecording.model');db[_0x7eb8('0xcc')]=db['sequelize'][_0x7eb8('0x13')]('../api/team/team.model');db[_0x7eb8('0xcd')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xce'));db[_0x7eb8('0xcf')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xd0'));db['Migration']=db['sequelize']['import'](_0x7eb8('0xd1'));db[_0x7eb8('0xd2')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xd3'));db[_0x7eb8('0xd4')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xd5'));db['MailTransferReport']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xd6'));db[_0x7eb8('0xd7')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xd8'));db[_0x7eb8('0xd9')]=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xda'));db['OpenchannelTransferReport']=db['sequelize'][_0x7eb8('0x13')](_0x7eb8('0xdb'));db[_0x7eb8('0xdc')]=db[_0x7eb8('0x2')]['import'](_0x7eb8('0xdd'));db['CmList']=db[_0x7eb8('0x2')][_0x7eb8('0x13')](_0x7eb8('0xde'));db[_0x7eb8('0xdf')]=db['sequelize'][_0x7eb8('0x13')]('../api/voicePrefix/voicePrefix.model');db[_0x7eb8('0x12')][_0x7eb8('0xe0')](db[_0x7eb8('0x1d')],{'as':_0x7eb8('0x1d'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x12')][_0x7eb8('0xe3')](db[_0x7eb8('0x1b')],{'as':_0x7eb8('0xe4'),'foreignKey':_0x7eb8('0xe2')});db['User']['hasMany'](db[_0x7eb8('0xe5')],{'as':_0x7eb8('0xe6'),'foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x12')][_0x7eb8('0xe3')](db[_0x7eb8('0x17')],{'as':'Extensions','onDelete':_0x7eb8('0xe1'),'hooks':!![]});db['User'][_0x7eb8('0xe3')](db[_0x7eb8('0x70')],{'as':_0x7eb8('0xe7'),'foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x12')]['hasMany'](db[_0x7eb8('0x72')],{'as':_0x7eb8('0xe8'),'foreignKey':'UserId'});db[_0x7eb8('0x12')][_0x7eb8('0xe3')](db['ReportAgentPreview'],{'as':_0x7eb8('0x73'),'foreignKey':'UserId'});db[_0x7eb8('0x12')][_0x7eb8('0xe3')](db[_0x7eb8('0x59')],{'as':_0x7eb8('0xe9'),'foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x12')][_0x7eb8('0xe3')](db[_0x7eb8('0x61')],{'as':'ChatInteractions','foreignKey':'UserId'});db[_0x7eb8('0x12')]['hasMany'](db['SmsInteraction'],{'as':_0x7eb8('0xea'),'foreignKey':_0x7eb8('0xe2')});db['User']['hasMany'](db[_0x7eb8('0x46')],{'as':_0x7eb8('0xeb'),'foreignKey':_0x7eb8('0xe2')});db['User'][_0x7eb8('0xe3')](db[_0x7eb8('0x3c')],{'as':_0x7eb8('0xec'),'foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x12')]['belongsToMany'](db[_0x7eb8('0x67')],{'as':_0x7eb8('0xed'),'through':_0x7eb8('0xee')});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0xf0'),'through':_0x7eb8('0xf1')});db['User'][_0x7eb8('0xef')](db[_0x7eb8('0xf2')],{'as':_0x7eb8('0xf3'),'through':_0x7eb8('0xf4')});db['User'][_0x7eb8('0xef')](db[_0x7eb8('0xcc')],{'through':_0x7eb8('0xf5')});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db[_0x7eb8('0x3c')],{'as':_0x7eb8('0xec'),'through':_0x7eb8('0xf6')});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db[_0x7eb8('0x61')],{'as':_0x7eb8('0xf7'),'through':_0x7eb8('0xf8')});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db[_0x7eb8('0x46')],{'as':'FaxInteractions','through':_0x7eb8('0xf9')});db['User'][_0x7eb8('0xef')](db['SmsInteraction'],{'as':_0x7eb8('0xea'),'through':_0x7eb8('0xfa')});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db['OpenchannelInteraction'],{'as':_0x7eb8('0xe9'),'through':_0x7eb8('0xfb')});db[_0x7eb8('0x12')]['belongsToMany'](db['VoiceQueue'],{'as':_0x7eb8('0xfc'),'through':_0x7eb8('0xfd'),'required':![]});db['User'][_0x7eb8('0xef')](db[_0x7eb8('0x3a')],{'as':'MailQueues','through':'UserMailQueue','required':![]});db['User'][_0x7eb8('0xef')](db[_0x7eb8('0x65')],{'as':_0x7eb8('0xfe'),'through':_0x7eb8('0xff'),'required':![],'hooks':!![]});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db['FaxQueue'],{'as':_0x7eb8('0x100'),'through':_0x7eb8('0x32'),'required':![]});db[_0x7eb8('0x12')]['belongsToMany'](db[_0x7eb8('0x53')],{'as':_0x7eb8('0x101'),'through':'UserSmsQueue','required':![]});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db[_0x7eb8('0x5c')],{'as':_0x7eb8('0x102'),'through':_0x7eb8('0x103'),'required':![]});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db['CmList'],{'through':_0x7eb8('0xf4')});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db[_0x7eb8('0xdf')],{'as':_0x7eb8('0x104'),'through':_0x7eb8('0x105'),'required':![]});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db[_0x7eb8('0x106')],{'as':_0x7eb8('0x107'),'through':_0x7eb8('0x108')});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db[_0x7eb8('0x44')],{'as':'FaxAccounts','through':_0x7eb8('0x109')});db[_0x7eb8('0x12')]['belongsToMany'](db[_0x7eb8('0x39')],{'as':_0x7eb8('0x10a'),'through':_0x7eb8('0x10b')});db['User']['belongsToMany'](db[_0x7eb8('0x55')],{'as':_0x7eb8('0x10c'),'through':_0x7eb8('0x10d')});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db[_0x7eb8('0x4c')],{'as':'SmsAccounts','through':_0x7eb8('0x10e')});db[_0x7eb8('0x12')][_0x7eb8('0xef')](db[_0x7eb8('0xc9')],{'as':_0x7eb8('0x10f'),'through':_0x7eb8('0x110')});db[_0x7eb8('0x15')][_0x7eb8('0xe3')](db[_0x7eb8('0x17')],{'as':_0x7eb8('0x111'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x112')});db[_0x7eb8('0x16')][_0x7eb8('0xe3')](db['VoiceExtension'],{'onDelete':_0x7eb8('0xe1')});db['VoiceExtension'][_0x7eb8('0xe3')](db[_0x7eb8('0x17')],{'as':'Applications','onDelete':_0x7eb8('0xe1')});db[_0x7eb8('0x113')][_0x7eb8('0xef')](db[_0x7eb8('0x83')],{'as':_0x7eb8('0x114'),'through':_0x7eb8('0x115')});db[_0x7eb8('0x19')][_0x7eb8('0xe3')](db[_0x7eb8('0xe5')],{'as':'Members','foreignKey':_0x7eb8('0x116')});db[_0x7eb8('0x19')][_0x7eb8('0xe3')](db[_0x7eb8('0x6c')],{'as':_0x7eb8('0x117'),'foreignKey':_0x7eb8('0x116')});db[_0x7eb8('0x19')]['hasMany'](db[_0x7eb8('0x70')],{'as':_0x7eb8('0xe7'),'foreignKey':_0x7eb8('0x116')});db[_0x7eb8('0x19')][_0x7eb8('0xe3')](db[_0x7eb8('0x72')],{'as':_0x7eb8('0x118'),'foreignKey':_0x7eb8('0x116')});db[_0x7eb8('0x19')]['hasMany'](db['ReportAgentPreview'],{'as':_0x7eb8('0x73'),'foreignKey':_0x7eb8('0x116')});db[_0x7eb8('0x19')][_0x7eb8('0xe3')](db[_0x7eb8('0x6e')],{'as':_0x7eb8('0x119'),'foreignKey':'VoiceQueueId'});db[_0x7eb8('0x19')][_0x7eb8('0xe3')](db[_0x7eb8('0x11a')],{'as':_0x7eb8('0x11b'),'foreignKey':_0x7eb8('0x116')});db[_0x7eb8('0x19')][_0x7eb8('0x11c')](db[_0x7eb8('0x29')],{'as':_0x7eb8('0x29'),'foreignKey':_0x7eb8('0x11d')});db[_0x7eb8('0x19')][_0x7eb8('0x11c')](db['Trunk'],{'as':'TrunkBackup','foreignKey':'TrunkBackupId'});db[_0x7eb8('0x19')][_0x7eb8('0x11c')](db[_0x7eb8('0x7d')],{'as':_0x7eb8('0x7d'),'foreignKey':'IntervalId'});db[_0x7eb8('0x19')][_0x7eb8('0xef')](db['CmList'],{'as':_0x7eb8('0xf3'),'through':_0x7eb8('0x11e')});db['VoiceQueue']['belongsToMany'](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0xfd')});db[_0x7eb8('0x19')]['belongsToMany'](db[_0x7eb8('0xcc')],{'as':'Teams','through':_0x7eb8('0x120')});db[_0x7eb8('0x19')][_0x7eb8('0xef')](db[_0x7eb8('0xf2')],{'as':_0x7eb8('0x121'),'through':_0x7eb8('0x122')});db['VoiceRecording'][_0x7eb8('0x11c')](db['User'],{'as':'User','foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x1d')]['hasMany'](db['VoiceMailMessage'],{'as':_0x7eb8('0x123'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x124'),'sourceKey':_0x7eb8('0x125')});db['VoiceMailMessage'][_0x7eb8('0x11c')](db[_0x7eb8('0x1d')],{'foreignKey':_0x7eb8('0x124'),'targetKey':_0x7eb8('0x125')});db[_0x7eb8('0x20')]['hasMany'](db[_0x7eb8('0x26')],{'as':_0x7eb8('0x126'),'foreignKey':_0x7eb8('0x127'),'constraints':![]});db[_0x7eb8('0x20')]['hasMany'](db[_0x7eb8('0x24')],{'as':_0x7eb8('0x128'),'foreignKey':_0x7eb8('0x127'),'constraints':![]});db[_0x7eb8('0x20')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x12'),'foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x20')]['belongsTo'](db['CmContact'],{'as':_0x7eb8('0x129'),'foreignKey':_0x7eb8('0x12a')});db['MailServerIn'][_0x7eb8('0x11c')](db[_0x7eb8('0x39')],{'as':_0x7eb8('0x39'),'foreignKey':_0x7eb8('0x12b')});db[_0x7eb8('0x38')][_0x7eb8('0x11c')](db[_0x7eb8('0x39')],{'as':_0x7eb8('0x39'),'foreignKey':_0x7eb8('0x12b')});db[_0x7eb8('0x39')][_0x7eb8('0xe0')](db[_0x7eb8('0x36')],{'as':_0x7eb8('0x12c'),'onDelete':_0x7eb8('0xe1')});db[_0x7eb8('0x39')]['hasOne'](db[_0x7eb8('0x38')],{'as':_0x7eb8('0x12d'),'onDelete':_0x7eb8('0xe1')});db[_0x7eb8('0x39')][_0x7eb8('0xe3')](db[_0x7eb8('0x7b')],{'as':_0x7eb8('0x12e'),'foreignKey':_0x7eb8('0x12b')});db[_0x7eb8('0x39')][_0x7eb8('0xe3')](db[_0x7eb8('0x79')],{'as':_0x7eb8('0x12f'),'foreignKey':_0x7eb8('0x12b')});db[_0x7eb8('0x39')][_0x7eb8('0xe3')](db['MailMessage'],{'as':_0x7eb8('0x123'),'foreignKey':_0x7eb8('0x12b')});db[_0x7eb8('0x39')][_0x7eb8('0xe3')](db[_0x7eb8('0x3c')],{'as':_0x7eb8('0x130')});db[_0x7eb8('0x39')][_0x7eb8('0xe3')](db['MailApplication'],{'as':_0x7eb8('0x131')});db[_0x7eb8('0x39')][_0x7eb8('0x11c')](db[_0x7eb8('0xf2')],{'as':_0x7eb8('0x132'),'foreignKey':_0x7eb8('0x133')});db['MailAccount'][_0x7eb8('0x11c')](db['Template'],{'as':_0x7eb8('0x134'),'foreignKey':'TemplateId'});db[_0x7eb8('0x39')][_0x7eb8('0xef')](db['User'],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0x10b')});db[_0x7eb8('0x3a')]['belongsToMany'](db[_0x7eb8('0x12')],{'as':'Agents','through':_0x7eb8('0x30')});db[_0x7eb8('0x3a')]['belongsToMany'](db[_0x7eb8('0xcc')],{'through':'team_has_mail_queues','as':'Teams'});db[_0x7eb8('0x3c')][_0x7eb8('0xe3')](db['MailMessage'],{'as':'Messages','onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x135')});db[_0x7eb8('0x3c')][_0x7eb8('0x11c')](db['MailAccount'],{'as':_0x7eb8('0x136'),'foreignKey':_0x7eb8('0x12b')});db[_0x7eb8('0x3c')][_0x7eb8('0x11c')](db[_0x7eb8('0x6b')],{'as':'Contact','foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0x3c')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'as':'Owner','foreignKey':'UserId'});db[_0x7eb8('0x3c')][_0x7eb8('0xef')](db[_0x7eb8('0x85')],{'through':'mail_interaction_has_tags','as':_0x7eb8('0x137')});db[_0x7eb8('0x3c')]['belongsToMany'](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x138'),'as':_0x7eb8('0x139')});db[_0x7eb8('0x3c')][_0x7eb8('0xef')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x13a'),'through':_0x7eb8('0xf6'),'foreignKey':_0x7eb8('0x135')});db[_0x7eb8('0x13b')][_0x7eb8('0xe3')](db[_0x7eb8('0xd2')],{'as':_0x7eb8('0x13c'),'onDelete':'cascade'});db[_0x7eb8('0x13b')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x12')});db[_0x7eb8('0x13b')][_0x7eb8('0x11c')](db[_0x7eb8('0x6b')],{'onDelete':'cascade','as':'Contact'});db[_0x7eb8('0x13b')]['belongsTo'](db['MailInteraction'],{'as':'Interaction','foreignKey':_0x7eb8('0x135')});db['MailMessage'][_0x7eb8('0x11c')](db['MailAccount'],{'as':_0x7eb8('0x136'),'foreignKey':_0x7eb8('0x12b')});db[_0x7eb8('0x3e')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x3e')][_0x7eb8('0x11c')](db[_0x7eb8('0x3a')],{'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x3e')][_0x7eb8('0x11c')](db['MailAccount'],{'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x3e')][_0x7eb8('0x11c')](db[_0x7eb8('0x7d')],{'onDelete':_0x7eb8('0x13d'),'foreignKey':'IntervalId'});db[_0x7eb8('0x3e')][_0x7eb8('0x11c')](db[_0x7eb8('0x85')],{'onDelete':'restrict','foreignKey':_0x7eb8('0x13e')});db[_0x7eb8('0x13f')][_0x7eb8('0x11c')](db[_0x7eb8('0x39')],{});db[_0x7eb8('0x13f')][_0x7eb8('0x11c')](db[_0x7eb8('0xf2')],{'as':_0x7eb8('0x132'),'foreignKey':'ListId'});db[_0x7eb8('0x13f')][_0x7eb8('0x11c')](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0x129'),'foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0x13f')][_0x7eb8('0x11c')](db[_0x7eb8('0x3c')],{});db[_0x7eb8('0x13f')][_0x7eb8('0x11c')](db[_0x7eb8('0x13b')],{});db[_0x7eb8('0x13f')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{});db[_0x7eb8('0x13f')][_0x7eb8('0x11c')](db[_0x7eb8('0x3a')],{});db[_0x7eb8('0x40')][_0x7eb8('0xe3')](db['DashboardItem'],{'as':_0x7eb8('0x140'),'onDelete':_0x7eb8('0xe1')});db['FaxAccount']['hasMany'](db[_0x7eb8('0x7b')],{'as':_0x7eb8('0x12e'),'foreignKey':'FaxAccountId'});db[_0x7eb8('0x44')]['hasMany'](db[_0x7eb8('0x79')],{'as':'Answers','foreignKey':_0x7eb8('0x141')});db['FaxAccount'][_0x7eb8('0xe3')](db[_0x7eb8('0x46')],{'as':'Interactions'});db['FaxAccount'][_0x7eb8('0xe3')](db['FaxApplication'],{'as':'Applications'});db[_0x7eb8('0x44')][_0x7eb8('0xe3')](db[_0x7eb8('0x17')],{'as':'Exntensions','onDelete':_0x7eb8('0xe1')});db[_0x7eb8('0x44')][_0x7eb8('0xe3')](db[_0x7eb8('0x48')],{'as':_0x7eb8('0x123')});db[_0x7eb8('0x44')][_0x7eb8('0x11c')](db[_0x7eb8('0x29')],{'as':'Trunk'});db[_0x7eb8('0x44')][_0x7eb8('0x11c')](db[_0x7eb8('0xf2')],{'as':_0x7eb8('0x132'),'foreignKey':_0x7eb8('0x133')});db[_0x7eb8('0x44')]['belongsToMany'](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0x109')});db[_0x7eb8('0x142')]['belongsTo'](db['User'],{'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x142')]['belongsTo'](db['FaxQueue'],{'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x142')][_0x7eb8('0x11c')](db[_0x7eb8('0x44')],{'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x142')][_0x7eb8('0x11c')](db[_0x7eb8('0x85')],{'onDelete':'restrict','foreignKey':_0x7eb8('0x13e')});db[_0x7eb8('0x46')][_0x7eb8('0xe3')](db['FaxMessage'],{'as':_0x7eb8('0x123'),'onDelete':_0x7eb8('0xe1'),'foreignKey':'FaxInteractionId'});db['FaxInteraction'][_0x7eb8('0x11c')](db[_0x7eb8('0x44')],{'as':_0x7eb8('0x136'),'foreignKey':_0x7eb8('0x141')});db[_0x7eb8('0x46')]['belongsTo'](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0x129'),'foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0x46')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'as':'Owner','foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x46')][_0x7eb8('0xef')](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x143'),'as':_0x7eb8('0x137')});db['FaxInteraction'][_0x7eb8('0xef')](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x143'),'as':_0x7eb8('0x139')});db[_0x7eb8('0x46')]['belongsToMany'](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x13a'),'through':_0x7eb8('0xf9'),'foreignKey':'FaxInteractionId'});db[_0x7eb8('0x48')][_0x7eb8('0x11c')](db['User'],{'onDelete':_0x7eb8('0xe1'),'as':_0x7eb8('0x12')});db[_0x7eb8('0x48')]['belongsTo'](db[_0x7eb8('0x46')],{'as':_0x7eb8('0x144'),'foreignKey':_0x7eb8('0x145')});db[_0x7eb8('0x48')][_0x7eb8('0x11c')](db['CmContact'],{'onDelete':'cascade','as':'Contact'});db[_0x7eb8('0x48')][_0x7eb8('0x11c')](db['Attachment'],{'as':_0x7eb8('0xd2'),'foreignKey':_0x7eb8('0x146')});db[_0x7eb8('0x48')][_0x7eb8('0x11c')](db[_0x7eb8('0x44')],{'as':_0x7eb8('0x136'),'foreignKey':'FaxAccountId'});db[_0x7eb8('0x4a')][_0x7eb8('0xef')](db['User'],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0x32')});db[_0x7eb8('0x4a')]['belongsToMany'](db[_0x7eb8('0xcc')],{'through':_0x7eb8('0x147'),'as':'Teams'});db[_0x7eb8('0x148')]['belongsTo'](db[_0x7eb8('0x44')],{});db[_0x7eb8('0x148')][_0x7eb8('0x11c')](db[_0x7eb8('0xf2')],{'as':_0x7eb8('0x132'),'foreignKey':_0x7eb8('0x133')});db[_0x7eb8('0x148')]['belongsTo'](db[_0x7eb8('0x6b')],{'as':'Contact','foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0x148')][_0x7eb8('0x11c')](db[_0x7eb8('0x46')],{});db[_0x7eb8('0x148')][_0x7eb8('0x11c')](db['FaxMessage'],{});db[_0x7eb8('0x148')]['belongsTo'](db[_0x7eb8('0x12')],{});db[_0x7eb8('0x148')][_0x7eb8('0x11c')](db['FaxQueue'],{});db['SmsAccount']['hasMany'](db[_0x7eb8('0x7b')],{'as':_0x7eb8('0x12e'),'foreignKey':_0x7eb8('0x149')});db['SmsAccount'][_0x7eb8('0xe3')](db[_0x7eb8('0x79')],{'as':_0x7eb8('0x12f'),'foreignKey':_0x7eb8('0x149')});db[_0x7eb8('0x4c')][_0x7eb8('0xe3')](db['SmsMessage'],{'as':_0x7eb8('0x123'),'foreignKey':'SmsAccountId'});db[_0x7eb8('0x4c')][_0x7eb8('0xe3')](db[_0x7eb8('0x14a')],{'as':_0x7eb8('0x130')});db['SmsAccount'][_0x7eb8('0xe3')](db[_0x7eb8('0x4e')],{'as':_0x7eb8('0x131')});db[_0x7eb8('0x4c')][_0x7eb8('0x11c')](db[_0x7eb8('0xf2')],{'as':_0x7eb8('0x132'),'foreignKey':_0x7eb8('0x133')});db['SmsAccount'][_0x7eb8('0xef')](db['User'],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0x10e')});db['SmsApplication'][_0x7eb8('0x11c')](db['User'],{'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x4e')][_0x7eb8('0x11c')](db[_0x7eb8('0x53')],{'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x4e')][_0x7eb8('0x11c')](db['SmsAccount'],{'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x4e')][_0x7eb8('0x11c')](db[_0x7eb8('0x7d')],{'onDelete':_0x7eb8('0x13d'),'foreignKey':_0x7eb8('0x14b')});db[_0x7eb8('0x4e')][_0x7eb8('0x11c')](db[_0x7eb8('0x85')],{'onDelete':'restrict','foreignKey':_0x7eb8('0x13e')});db[_0x7eb8('0x14a')][_0x7eb8('0xe3')](db[_0x7eb8('0x51')],{'as':'Messages','onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x14c')});db[_0x7eb8('0x14a')]['belongsTo'](db['SmsAccount'],{'as':_0x7eb8('0x136'),'foreignKey':'SmsAccountId'});db[_0x7eb8('0x14a')][_0x7eb8('0x11c')](db['CmContact'],{'as':'Contact','foreignKey':'ContactId'});db[_0x7eb8('0x14a')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x14d'),'foreignKey':_0x7eb8('0xe2')});db['SmsInteraction']['belongsToMany'](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x14e'),'as':_0x7eb8('0x137')});db['SmsInteraction'][_0x7eb8('0xef')](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x14e'),'as':_0x7eb8('0x139')});db[_0x7eb8('0x14a')]['belongsToMany'](db['User'],{'as':_0x7eb8('0x13a'),'through':_0x7eb8('0xfa'),'foreignKey':_0x7eb8('0x14c')});db[_0x7eb8('0x51')]['belongsTo'](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x12')});db[_0x7eb8('0x51')]['belongsTo'](db['CmContact'],{'onDelete':_0x7eb8('0xe1'),'as':_0x7eb8('0x129')});db[_0x7eb8('0x51')][_0x7eb8('0x11c')](db['SmsInteraction'],{'onDelete':'cascade','as':_0x7eb8('0x144'),'foreignKey':_0x7eb8('0x14c')});db[_0x7eb8('0x51')][_0x7eb8('0x11c')](db[_0x7eb8('0x4c')],{'as':'Account','foreignKey':_0x7eb8('0x149')});db[_0x7eb8('0x53')]['belongsToMany'](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x11f'),'through':'UserSmsQueue','foreignKey':_0x7eb8('0x14f')});db[_0x7eb8('0x53')][_0x7eb8('0xef')](db[_0x7eb8('0xcc')],{'through':_0x7eb8('0x150'),'as':_0x7eb8('0x151')});db[_0x7eb8('0x55')][_0x7eb8('0xe3')](db[_0x7eb8('0x7b')],{'as':_0x7eb8('0x12e'),'foreignKey':_0x7eb8('0x152')});db['OpenchannelAccount'][_0x7eb8('0xe3')](db['CannedAnswer'],{'as':_0x7eb8('0x12f'),'foreignKey':_0x7eb8('0x152')});db[_0x7eb8('0x55')][_0x7eb8('0xe3')](db[_0x7eb8('0x59')],{'as':'Interactions','foreignKey':_0x7eb8('0x152')});db[_0x7eb8('0x55')][_0x7eb8('0xe3')](db[_0x7eb8('0x5b')],{'as':'Messages','foreignKey':_0x7eb8('0x152')});db[_0x7eb8('0x55')][_0x7eb8('0xe3')](db[_0x7eb8('0x57')],{'as':_0x7eb8('0x131'),'foreignKey':_0x7eb8('0x152')});db[_0x7eb8('0x55')][_0x7eb8('0x11c')](db[_0x7eb8('0xf2')],{'as':_0x7eb8('0x132'),'foreignKey':'ListId'});db[_0x7eb8('0x55')][_0x7eb8('0xef')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0x10d')});db['OpenchannelApplication'][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x57')][_0x7eb8('0x11c')](db['OpenchannelQueue'],{'onDelete':_0x7eb8('0x13d'),'foreignKey':'OpenchannelQueueId'});db[_0x7eb8('0x57')][_0x7eb8('0x11c')](db[_0x7eb8('0x55')],{'onDelete':'restrict','foreignKey':_0x7eb8('0x152')});db['OpenchannelApplication'][_0x7eb8('0x11c')](db[_0x7eb8('0x7d')],{'onDelete':'restrict','foreignKey':_0x7eb8('0x14b')});db['OpenchannelApplication']['belongsTo'](db[_0x7eb8('0x85')],{'onDelete':_0x7eb8('0x13d'),'foreignKey':_0x7eb8('0x13e')});db[_0x7eb8('0x59')][_0x7eb8('0xe3')](db[_0x7eb8('0x5b')],{'as':'Messages','onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x153')});db['OpenchannelInteraction'][_0x7eb8('0x11c')](db[_0x7eb8('0x55')],{'as':_0x7eb8('0x136'),'foreignKey':'OpenchannelAccountId'});db[_0x7eb8('0x59')]['belongsTo'](db['CmContact'],{'as':_0x7eb8('0x129'),'foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0x59')]['belongsTo'](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x14d'),'foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x59')][_0x7eb8('0xef')](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x154'),'as':'Tags'});db['OpenchannelInteraction']['belongsToMany'](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x154'),'as':_0x7eb8('0x139')});db['OpenchannelInteraction'][_0x7eb8('0xef')](db[_0x7eb8('0x12')],{'as':'Users','through':_0x7eb8('0xfb'),'foreignKey':_0x7eb8('0x153')});db['OpenchannelMessage'][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'onDelete':_0x7eb8('0xe1'),'as':_0x7eb8('0x12')});db['OpenchannelMessage'][_0x7eb8('0x11c')](db['CmContact'],{'onDelete':_0x7eb8('0xe1'),'as':_0x7eb8('0x129')});db[_0x7eb8('0x5b')]['belongsTo'](db[_0x7eb8('0x59')],{'onDelete':_0x7eb8('0xe1'),'as':_0x7eb8('0x144'),'foreignKey':_0x7eb8('0x153')});db[_0x7eb8('0x5b')]['belongsTo'](db[_0x7eb8('0xd2')],{'as':_0x7eb8('0xd2'),'foreignKey':'AttachmentId'});db[_0x7eb8('0x5b')][_0x7eb8('0x11c')](db['OpenchannelAccount'],{'as':_0x7eb8('0x136'),'foreignKey':_0x7eb8('0x152')});db[_0x7eb8('0x5c')][_0x7eb8('0xef')](db['User'],{'as':_0x7eb8('0x11f'),'through':'UserOpenchannelQueue','foreignKey':'OpenchannelQueueId'});db[_0x7eb8('0x5c')][_0x7eb8('0xef')](db[_0x7eb8('0xcc')],{'through':_0x7eb8('0x155'),'as':_0x7eb8('0x151')});db['ChatWebsite'][_0x7eb8('0xe3')](db['Disposition'],{'as':_0x7eb8('0x12e'),'foreignKey':'ChatWebsiteId'});db[_0x7eb8('0x106')][_0x7eb8('0xe3')](db[_0x7eb8('0x79')],{'as':'Answers','foreignKey':'ChatWebsiteId'});db['ChatWebsite'][_0x7eb8('0xe3')](db[_0x7eb8('0x68')],{'as':_0x7eb8('0x156')});db[_0x7eb8('0x106')][_0x7eb8('0xe3')](db[_0x7eb8('0x61')],{'as':_0x7eb8('0x130')});db[_0x7eb8('0x106')][_0x7eb8('0xe3')](db['ChatApplication'],{'as':_0x7eb8('0x131')});db[_0x7eb8('0x106')][_0x7eb8('0xe3')](db[_0x7eb8('0x157')],{'as':_0x7eb8('0x123')});db[_0x7eb8('0x106')]['belongsTo'](db['CmList'],{'as':_0x7eb8('0x132'),'foreignKey':_0x7eb8('0x133')});db['ChatWebsite'][_0x7eb8('0x11c')](db['Interval'],{'as':_0x7eb8('0x7d'),'foreignKey':_0x7eb8('0x14b')});db[_0x7eb8('0x106')][_0x7eb8('0xef')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0x108')});db['OpenchannelQueueReport'][_0x7eb8('0x11c')](db['OpenchannelAccount'],{});db[_0x7eb8('0x158')][_0x7eb8('0x11c')](db['CmList'],{'as':_0x7eb8('0x132'),'foreignKey':_0x7eb8('0x133')});db['OpenchannelQueueReport'][_0x7eb8('0x11c')](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0x129'),'foreignKey':_0x7eb8('0x12a')});db['OpenchannelQueueReport']['belongsTo'](db[_0x7eb8('0x59')],{});db[_0x7eb8('0x158')][_0x7eb8('0x11c')](db[_0x7eb8('0x5b')],{});db[_0x7eb8('0x158')]['belongsTo'](db[_0x7eb8('0x12')],{});db[_0x7eb8('0x158')][_0x7eb8('0x11c')](db[_0x7eb8('0x5c')],{});db[_0x7eb8('0x159')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x15a'),'foreignKey':_0x7eb8('0xe2'),'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x159')]['belongsTo'](db[_0x7eb8('0x65')],{'as':'Queue','foreignKey':'ChatQueueId','onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x159')][_0x7eb8('0x11c')](db[_0x7eb8('0x106')],{'as':_0x7eb8('0x15b'),'foreignKey':_0x7eb8('0x15c'),'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x159')]['belongsTo'](db[_0x7eb8('0x85')],{'onDelete':_0x7eb8('0x13d'),'foreignKey':'TagId'});db[_0x7eb8('0x61')][_0x7eb8('0xe3')](db[_0x7eb8('0x157')],{'as':_0x7eb8('0x123'),'onDelete':'cascade','foreignKey':_0x7eb8('0x15d')});db[_0x7eb8('0x61')]['belongsTo'](db['ChatWebsite'],{'as':_0x7eb8('0x136'),'foreignKey':_0x7eb8('0x15c')});db[_0x7eb8('0x61')][_0x7eb8('0x11c')](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0x129'),'foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0x61')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x14d'),'foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x61')][_0x7eb8('0xef')](db['Tag'],{'through':'chat_interaction_has_tags','as':_0x7eb8('0x137')});db[_0x7eb8('0x61')][_0x7eb8('0xef')](db['Tag'],{'through':_0x7eb8('0x15e'),'as':_0x7eb8('0x139')});db[_0x7eb8('0x61')]['belongsToMany'](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x13a'),'through':'user_has_chat_interactions','foreignKey':'ChatInteractionId'});db['ChatMessage'][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'onDelete':_0x7eb8('0xe1'),'as':_0x7eb8('0x12')});db['ChatMessage'][_0x7eb8('0x11c')](db[_0x7eb8('0x6b')],{'onDelete':_0x7eb8('0xe1'),'as':'Contact','foreignKey':'ContactId'});db[_0x7eb8('0x157')]['belongsTo'](db[_0x7eb8('0x61')],{'onDelete':_0x7eb8('0xe1'),'as':_0x7eb8('0x144'),'foreignKey':_0x7eb8('0x15d')});db[_0x7eb8('0x157')][_0x7eb8('0x11c')](db[_0x7eb8('0xd2')],{'as':_0x7eb8('0xd2'),'foreignKey':'AttachmentId'});db[_0x7eb8('0x157')][_0x7eb8('0x11c')](db[_0x7eb8('0x106')],{'as':'Account','foreignKey':'ChatWebsiteId'});db[_0x7eb8('0x63')]['belongsTo'](db[_0x7eb8('0x6b')],{'onDelete':_0x7eb8('0xe1'),'as':_0x7eb8('0x129'),'foreignKey':'ContactId'});db[_0x7eb8('0x63')][_0x7eb8('0x11c')](db['ChatWebsite'],{'as':'Account','foreignKey':_0x7eb8('0x15c')});db[_0x7eb8('0x65')]['belongsToMany'](db['User'],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0xff'),'hooks':!![]});db['ChatQueue'][_0x7eb8('0xef')](db[_0x7eb8('0xcc')],{'through':_0x7eb8('0x15f'),'as':_0x7eb8('0x151')});db[_0x7eb8('0x67')]['hasMany'](db[_0x7eb8('0xbc')],{'as':_0x7eb8('0x123'),'foreignKey':_0x7eb8('0x160'),'onDelete':'cascade'});db[_0x7eb8('0x67')][_0x7eb8('0xef')](db[_0x7eb8('0x12')],{'as':'Members','through':_0x7eb8('0xee')});db[_0x7eb8('0x68')][_0x7eb8('0x11c')](db[_0x7eb8('0x106')],{'as':_0x7eb8('0x15b'),'foreignKey':'ChatWebsiteId'});db[_0x7eb8('0x69')][_0x7eb8('0xe3')](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0xf0'),'foreignKey':_0x7eb8('0x161')});db['CmContact']['hasMany'](db[_0x7eb8('0x6c')],{'as':'Hoppers','foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0x6b')][_0x7eb8('0xe3')](db[_0x7eb8('0x70')],{'as':_0x7eb8('0xe7'),'foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0x6b')]['hasMany'](db[_0x7eb8('0x72')],{'as':_0x7eb8('0x118'),'foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0x6b')][_0x7eb8('0xe3')](db[_0x7eb8('0x73')],{'as':'ReportAgentPreview','foreignKey':_0x7eb8('0x12a')});db['CmContact'][_0x7eb8('0xe3')](db[_0x7eb8('0x11a')],{'as':_0x7eb8('0x11b'),'foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0x6b')][_0x7eb8('0xe3')](db[_0x7eb8('0x59')],{'as':_0x7eb8('0xe9'),'foreignKey':_0x7eb8('0x12a'),'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x6b')]['hasMany'](db[_0x7eb8('0x61')],{'as':_0x7eb8('0xf7'),'foreignKey':_0x7eb8('0x12a'),'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x6b')][_0x7eb8('0xe3')](db[_0x7eb8('0x14a')],{'as':_0x7eb8('0xea'),'foreignKey':_0x7eb8('0x12a'),'onDelete':_0x7eb8('0x13d')});db['CmContact'][_0x7eb8('0xe3')](db[_0x7eb8('0x46')],{'as':_0x7eb8('0xeb'),'foreignKey':_0x7eb8('0x12a'),'onDelete':'restrict'});db[_0x7eb8('0x6b')][_0x7eb8('0xe3')](db[_0x7eb8('0x3c')],{'as':_0x7eb8('0xec'),'foreignKey':_0x7eb8('0x12a'),'onDelete':'restrict'});db[_0x7eb8('0x6b')]['belongsTo'](db['CmCompany'],{'as':_0x7eb8('0x162'),'foreignKey':_0x7eb8('0x161')});db[_0x7eb8('0x6b')][_0x7eb8('0x11c')](db['CmList'],{'as':'List','foreignKey':_0x7eb8('0x133'),'onDelete':_0x7eb8('0xe1')});db['CmContact'][_0x7eb8('0xef')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x13a'),'through':_0x7eb8('0xf1')});db['CmContact']['belongsToMany'](db[_0x7eb8('0x85')],{'as':_0x7eb8('0x137'),'through':_0x7eb8('0x163')});db[_0x7eb8('0x6b')][_0x7eb8('0xef')](db[_0x7eb8('0x85')],{'through':'cm_contact_has_tags','as':_0x7eb8('0x139')});db[_0x7eb8('0x6c')]['belongsTo'](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0x129'),'foreignKey':_0x7eb8('0x12a'),'onDelete':_0x7eb8('0xe1')});db['CmHopper'][_0x7eb8('0x11c')](db['CmList'],{'as':_0x7eb8('0x132'),'foreignKey':_0x7eb8('0x133'),'onDelete':_0x7eb8('0xe1')});db['CmHopper'][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x15a'),'foreignKey':_0x7eb8('0xe2')});db[_0x7eb8('0x6c')][_0x7eb8('0x11c')](db[_0x7eb8('0x19')],{'as':_0x7eb8('0x164'),'foreignKey':'VoiceQueueId','onDelete':_0x7eb8('0xe1')});db['CmHopper']['belongsTo'](db[_0x7eb8('0xcf')],{'as':_0x7eb8('0xcf'),'foreignKey':_0x7eb8('0x165'),'onDelete':_0x7eb8('0xe1')});db[_0x7eb8('0x6e')]['belongsTo'](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0x129'),'foreignKey':'ContactId','onDelete':_0x7eb8('0xe1')});db['CmHopperBlack'][_0x7eb8('0x11c')](db[_0x7eb8('0xf2')],{'as':'List','foreignKey':'ListId','onDelete':_0x7eb8('0xe1')});db['CmHopperBlack'][_0x7eb8('0x11c')](db[_0x7eb8('0x19')],{'as':_0x7eb8('0x164'),'foreignKey':'VoiceQueueId','onDelete':_0x7eb8('0xe1')});db[_0x7eb8('0x6e')][_0x7eb8('0x11c')](db[_0x7eb8('0xcf')],{'as':_0x7eb8('0xcf'),'foreignKey':'CampaignId','onDelete':'cascade'});db[_0x7eb8('0x77')][_0x7eb8('0xe3')](db[_0x7eb8('0x7c')],{'as':{'plural':_0x7eb8('0x166'),'singular':'OneAll'},'foreignKey':_0x7eb8('0x167'),'onDelete':'cascade','hooks':!![]});db[_0x7eb8('0x77')][_0x7eb8('0xe3')](db[_0x7eb8('0x7c')],{'as':{'plural':_0x7eb8('0x168'),'singular':_0x7eb8('0x169')},'foreignKey':_0x7eb8('0x16a'),'onDelete':'cascade','hooks':!![]});db[_0x7eb8('0x77')][_0x7eb8('0xe3')](db['Action'],{'as':'Actions','foreignKey':_0x7eb8('0x16b'),'onDelete':_0x7eb8('0xe1'),'hooks':!![]});db[_0x7eb8('0x7d')][_0x7eb8('0xe3')](db[_0x7eb8('0x7d')],{'as':_0x7eb8('0x16c'),'foreignKey':_0x7eb8('0x14b'),'onDelete':'cascade','hooks':!![],'required':![]});db[_0x7eb8('0x7d')][_0x7eb8('0xe3')](db[_0x7eb8('0x17')],{'as':_0x7eb8('0x16d'),'foreignKey':_0x7eb8('0x14b'),'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x7d')][_0x7eb8('0xe3')](db[_0x7eb8('0x3e')],{'as':_0x7eb8('0x16e'),'foreignKey':_0x7eb8('0x14b')});db[_0x7eb8('0x7d')][_0x7eb8('0xe3')](db['ChatApplication'],{'as':_0x7eb8('0x16f'),'foreignKey':_0x7eb8('0x14b')});db[_0x7eb8('0x7d')]['hasMany'](db[_0x7eb8('0x142')],{'as':_0x7eb8('0x170'),'foreignKey':'IntervalId'});db[_0x7eb8('0x7d')][_0x7eb8('0xe3')](db[_0x7eb8('0x4e')],{'as':_0x7eb8('0x171'),'foreignKey':'IntervalId'});db[_0x7eb8('0x82')][_0x7eb8('0x11c')](db[_0x7eb8('0x39')],{});db[_0x7eb8('0x82')][_0x7eb8('0x11c')](db[_0x7eb8('0x8e')],{'foreignKey':_0x7eb8('0x172')});db['Schedule'][_0x7eb8('0x11c')](db[_0x7eb8('0x8c')],{'foreignKey':_0x7eb8('0x173')});db[_0x7eb8('0x83')][_0x7eb8('0xef')](db[_0x7eb8('0x113')],{'as':_0x7eb8('0x174'),'through':_0x7eb8('0x115'),'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0x85')][_0x7eb8('0xef')](db['CmContact'],{'through':'cm_contact_has_tags'});db[_0x7eb8('0x85')][_0x7eb8('0xef')](db[_0x7eb8('0x61')],{'through':_0x7eb8('0x15e')});db[_0x7eb8('0x85')][_0x7eb8('0xef')](db['MailInteraction'],{'through':_0x7eb8('0x138')});db[_0x7eb8('0x85')][_0x7eb8('0xef')](db['SmsInteraction'],{'through':_0x7eb8('0x14e')});db[_0x7eb8('0x85')][_0x7eb8('0xef')](db[_0x7eb8('0x46')],{'through':_0x7eb8('0x143')});db['Tag'][_0x7eb8('0xef')](db[_0x7eb8('0x59')],{'through':_0x7eb8('0x154')});db[_0x7eb8('0x88')][_0x7eb8('0xe3')](db[_0x7eb8('0x7c')],{'as':{'plural':_0x7eb8('0x175'),'singular':'AllCondition'},'foreignKey':_0x7eb8('0x176'),'onDelete':_0x7eb8('0xe1'),'hooks':!![]});db[_0x7eb8('0x88')][_0x7eb8('0xe3')](db[_0x7eb8('0x7c')],{'as':{'plural':_0x7eb8('0x177'),'singular':_0x7eb8('0x178')},'foreignKey':_0x7eb8('0x179'),'onDelete':_0x7eb8('0xe1'),'hooks':!![]});db[_0x7eb8('0x88')]['hasMany'](db['Action'],{'as':_0x7eb8('0x17a'),'foreignKey':_0x7eb8('0x17b'),'onDelete':'cascade','hooks':!![]});db[_0x7eb8('0x8c')]['hasMany'](db['AnalyticFieldReport'],{'as':'Fields','onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x173'),'hooks':!![]});db[_0x7eb8('0x8e')][_0x7eb8('0xe3')](db[_0x7eb8('0x17c')],{'as':_0x7eb8('0x17d'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x172')});db[_0x7eb8('0x17e')][_0x7eb8('0xe3')](db[_0x7eb8('0x17c')],{'as':_0x7eb8('0x17d'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x17f')});db[_0x7eb8('0x17c')]['belongsTo'](db['AnalyticMetric'],{'foreignKey':_0x7eb8('0x17f')});db[_0x7eb8('0x96')][_0x7eb8('0xe3')](db[_0x7eb8('0x98')],{'as':_0x7eb8('0x180'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x181')});db[_0x7eb8('0x98')]['hasMany'](db[_0x7eb8('0x99')],{'as':_0x7eb8('0x182'),'onDelete':'cascade','foreignKey':'SubjectId'});db[_0x7eb8('0x98')][_0x7eb8('0xe3')](db[_0x7eb8('0x99')],{'as':_0x7eb8('0x183'),'onDelete':_0x7eb8('0xe1'),'foreignKey':'DescriptionId'});db[_0x7eb8('0x98')][_0x7eb8('0xe3')](db[_0x7eb8('0x99')],{'as':'Fields','onDelete':'cascade','foreignKey':_0x7eb8('0x184')});db['SalesforceConfiguration'][_0x7eb8('0x11c')](db[_0x7eb8('0x96')],{'as':_0x7eb8('0x136'),'foreignKey':_0x7eb8('0x181')});db['SalesforceField']['hasMany'](db['SalesforceField'],{'as':_0x7eb8('0x185'),'foreignKey':_0x7eb8('0x186')});db['SalesforceField'][_0x7eb8('0xe3')](db['SalesforceField'],{'as':_0x7eb8('0x187'),'foreignKey':_0x7eb8('0x188')});db[_0x7eb8('0x99')][_0x7eb8('0xe3')](db[_0x7eb8('0x99')],{'as':_0x7eb8('0x189'),'foreignKey':_0x7eb8('0x184')});db[_0x7eb8('0x99')][_0x7eb8('0x11c')](db[_0x7eb8('0x89')],{'as':'Variable','foreignKey':_0x7eb8('0x18a')});db[_0x7eb8('0x9a')][_0x7eb8('0xe3')](db[_0x7eb8('0x9c')],{'as':_0x7eb8('0x180'),'onDelete':'cascade','foreignKey':_0x7eb8('0x181')});db[_0x7eb8('0x9c')][_0x7eb8('0xe3')](db['SugarcrmField'],{'as':'Subjects','onDelete':'cascade','foreignKey':_0x7eb8('0x186')});db[_0x7eb8('0x9c')]['hasMany'](db['SugarcrmField'],{'as':_0x7eb8('0x183'),'onDelete':_0x7eb8('0xe1'),'foreignKey':'DescriptionId'});db['SugarcrmConfiguration']['hasMany'](db[_0x7eb8('0x18b')],{'as':'Fields','onDelete':'cascade','foreignKey':'FieldId'});db[_0x7eb8('0x9c')][_0x7eb8('0x11c')](db[_0x7eb8('0x9a')],{'as':_0x7eb8('0x136'),'foreignKey':_0x7eb8('0x181')});db[_0x7eb8('0x18b')][_0x7eb8('0xe3')](db['SugarcrmField'],{'as':_0x7eb8('0x185'),'foreignKey':_0x7eb8('0x186')});db[_0x7eb8('0x18b')]['hasMany'](db[_0x7eb8('0x18b')],{'as':_0x7eb8('0x187'),'foreignKey':_0x7eb8('0x188')});db[_0x7eb8('0x18b')][_0x7eb8('0xe3')](db['SugarcrmField'],{'as':'Field','foreignKey':_0x7eb8('0x184')});db['SugarcrmField'][_0x7eb8('0x11c')](db[_0x7eb8('0x89')],{'as':_0x7eb8('0x89'),'foreignKey':_0x7eb8('0x18a')});db[_0x7eb8('0x9f')][_0x7eb8('0xe3')](db['DeskConfiguration'],{'as':'Configurations','onDelete':'cascade','foreignKey':_0x7eb8('0x181')});db[_0x7eb8('0xa1')][_0x7eb8('0xe3')](db[_0x7eb8('0x18c')],{'as':_0x7eb8('0x182'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x186')});db[_0x7eb8('0xa1')][_0x7eb8('0xe3')](db[_0x7eb8('0x18c')],{'as':_0x7eb8('0x183'),'onDelete':'cascade','foreignKey':_0x7eb8('0x188')});db[_0x7eb8('0xa1')][_0x7eb8('0xe3')](db[_0x7eb8('0x18c')],{'as':_0x7eb8('0x17d'),'onDelete':'cascade','foreignKey':_0x7eb8('0x184')});db[_0x7eb8('0xa1')][_0x7eb8('0x11c')](db['DeskAccount'],{'as':'Account','foreignKey':_0x7eb8('0x181')});db[_0x7eb8('0xa1')][_0x7eb8('0xef')](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x18d')});db[_0x7eb8('0x18c')][_0x7eb8('0xe3')](db['DeskField'],{'as':'Subject','foreignKey':_0x7eb8('0x186')});db['DeskField']['hasMany'](db['DeskField'],{'as':_0x7eb8('0x187'),'foreignKey':_0x7eb8('0x188')});db[_0x7eb8('0x18c')][_0x7eb8('0xe3')](db[_0x7eb8('0x18c')],{'as':_0x7eb8('0x189'),'foreignKey':'FieldId'});db['DeskField']['belongsTo'](db['Variable'],{'as':'Variable','foreignKey':_0x7eb8('0x18a')});db[_0x7eb8('0xa4')]['hasMany'](db[_0x7eb8('0x18e')],{'as':_0x7eb8('0x180'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x181')});db['ZohoConfiguration'][_0x7eb8('0xe3')](db[_0x7eb8('0xa7')],{'as':'Subjects','onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x186')});db['ZohoConfiguration']['hasMany'](db[_0x7eb8('0xa7')],{'as':'Descriptions','onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x188')});db[_0x7eb8('0x18e')][_0x7eb8('0xe3')](db[_0x7eb8('0xa7')],{'as':_0x7eb8('0x17d'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x184')});db['ZohoConfiguration'][_0x7eb8('0x11c')](db[_0x7eb8('0xa4')],{'as':_0x7eb8('0x136'),'foreignKey':'AccountId'});db[_0x7eb8('0xa7')]['hasMany'](db[_0x7eb8('0xa7')],{'as':'Subject','foreignKey':'SubjectId'});db[_0x7eb8('0xa7')][_0x7eb8('0xe3')](db[_0x7eb8('0xa7')],{'as':_0x7eb8('0x187'),'foreignKey':_0x7eb8('0x188')});db['ZohoField'][_0x7eb8('0xe3')](db[_0x7eb8('0xa7')],{'as':_0x7eb8('0x189'),'foreignKey':_0x7eb8('0x184')});db[_0x7eb8('0xa7')][_0x7eb8('0x11c')](db[_0x7eb8('0x89')],{'as':_0x7eb8('0x89'),'foreignKey':'VariableId'});db['ZendeskAccount'][_0x7eb8('0xe3')](db[_0x7eb8('0x18f')],{'as':_0x7eb8('0x180'),'onDelete':_0x7eb8('0xe1'),'foreignKey':'AccountId'});db[_0x7eb8('0x18f')][_0x7eb8('0xe3')](db[_0x7eb8('0xab')],{'as':_0x7eb8('0x182'),'foreignKey':_0x7eb8('0x186')});db['ZendeskConfiguration'][_0x7eb8('0xe3')](db['ZendeskField'],{'as':'Descriptions','foreignKey':_0x7eb8('0x188')});db[_0x7eb8('0x18f')]['hasMany'](db[_0x7eb8('0xab')],{'as':_0x7eb8('0x17d'),'foreignKey':'FieldId'});db[_0x7eb8('0x18f')]['belongsTo'](db[_0x7eb8('0xa8')],{'as':_0x7eb8('0x136'),'foreignKey':'AccountId'});db[_0x7eb8('0x18f')][_0x7eb8('0xef')](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x190')});db[_0x7eb8('0xab')][_0x7eb8('0xe3')](db[_0x7eb8('0xab')],{'as':_0x7eb8('0x185'),'foreignKey':_0x7eb8('0x186')});db[_0x7eb8('0xab')][_0x7eb8('0xe3')](db[_0x7eb8('0xab')],{'as':_0x7eb8('0x187'),'foreignKey':_0x7eb8('0x188')});db[_0x7eb8('0xab')][_0x7eb8('0xe3')](db[_0x7eb8('0xab')],{'as':_0x7eb8('0x189'),'foreignKey':'FieldId'});db[_0x7eb8('0xab')][_0x7eb8('0x11c')](db[_0x7eb8('0x89')],{'as':_0x7eb8('0x89'),'foreignKey':'VariableId'});db[_0x7eb8('0x191')][_0x7eb8('0xe3')](db[_0x7eb8('0xae')],{'as':'Configurations','onDelete':'cascade','foreignKey':_0x7eb8('0x181')});db[_0x7eb8('0xae')]['hasMany'](db['FreshdeskField'],{'as':_0x7eb8('0x182'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x186')});db[_0x7eb8('0xae')][_0x7eb8('0xe3')](db[_0x7eb8('0x192')],{'as':_0x7eb8('0x183'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x188')});db[_0x7eb8('0xae')][_0x7eb8('0xe3')](db['FreshdeskField'],{'as':_0x7eb8('0x17d'),'onDelete':'cascade','foreignKey':_0x7eb8('0x184')});db['FreshdeskConfiguration']['belongsTo'](db[_0x7eb8('0x191')],{'as':_0x7eb8('0x136'),'foreignKey':_0x7eb8('0x181')});db[_0x7eb8('0xae')][_0x7eb8('0xef')](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x193')});db['FreshdeskField'][_0x7eb8('0xe3')](db['FreshdeskField'],{'as':_0x7eb8('0x185'),'foreignKey':_0x7eb8('0x186')});db[_0x7eb8('0x192')][_0x7eb8('0xe3')](db['FreshdeskField'],{'as':_0x7eb8('0x187'),'foreignKey':_0x7eb8('0x188')});db['FreshdeskField'][_0x7eb8('0xe3')](db[_0x7eb8('0x192')],{'as':_0x7eb8('0x189'),'foreignKey':_0x7eb8('0x184')});db[_0x7eb8('0x192')][_0x7eb8('0x11c')](db['Variable'],{'as':_0x7eb8('0x89'),'foreignKey':'VariableId'});db[_0x7eb8('0xb1')][_0x7eb8('0xe3')](db[_0x7eb8('0xb3')],{'as':_0x7eb8('0x180'),'onDelete':'cascade','foreignKey':_0x7eb8('0x181')});db['VtigerConfiguration'][_0x7eb8('0xe3')](db[_0x7eb8('0xb5')],{'as':_0x7eb8('0x182'),'foreignKey':_0x7eb8('0x186')});db['VtigerConfiguration'][_0x7eb8('0xe3')](db[_0x7eb8('0xb5')],{'as':_0x7eb8('0x183'),'foreignKey':_0x7eb8('0x188')});db[_0x7eb8('0xb3')][_0x7eb8('0xe3')](db[_0x7eb8('0xb5')],{'as':'Fields','foreignKey':_0x7eb8('0x184')});db[_0x7eb8('0xb3')]['belongsTo'](db[_0x7eb8('0xb1')],{'as':'Account','foreignKey':_0x7eb8('0x181')});db[_0x7eb8('0xb3')][_0x7eb8('0xef')](db[_0x7eb8('0x85')],{'through':_0x7eb8('0x194')});db[_0x7eb8('0xb5')][_0x7eb8('0xe3')](db['VtigerField'],{'as':_0x7eb8('0x185'),'foreignKey':_0x7eb8('0x186')});db[_0x7eb8('0xb5')][_0x7eb8('0xe3')](db[_0x7eb8('0xb5')],{'as':_0x7eb8('0x187'),'foreignKey':_0x7eb8('0x188')});db[_0x7eb8('0xb5')]['hasMany'](db[_0x7eb8('0xb5')],{'as':'Field','foreignKey':_0x7eb8('0x184')});db['VtigerField'][_0x7eb8('0x11c')](db[_0x7eb8('0x89')],{'as':_0x7eb8('0x89'),'foreignKey':_0x7eb8('0x18a')});db[_0x7eb8('0xba')][_0x7eb8('0x11c')](db['ChatWebsite'],{});db['ChatQueueReport'][_0x7eb8('0x11c')](db[_0x7eb8('0xf2')],{'as':_0x7eb8('0x132'),'foreignKey':'ListId'});db[_0x7eb8('0xba')][_0x7eb8('0x11c')](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0x129'),'foreignKey':_0x7eb8('0x12a')});db[_0x7eb8('0xba')][_0x7eb8('0x11c')](db[_0x7eb8('0x61')],{});db[_0x7eb8('0xba')]['belongsTo'](db[_0x7eb8('0x157')],{});db[_0x7eb8('0xba')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{});db[_0x7eb8('0xba')][_0x7eb8('0x11c')](db[_0x7eb8('0x65')],{});db[_0x7eb8('0xbc')][_0x7eb8('0x11c')](db['User'],{'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x195')});db[_0x7eb8('0xbc')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x196')});db['JscriptySessionReport'][_0x7eb8('0xe3')](db['JscriptyQuestionReport'],{'foreignKey':_0x7eb8('0x197'),'onDelete':_0x7eb8('0xe1')});db['JscriptySessionReport'][_0x7eb8('0xe3')](db[_0x7eb8('0x198')],{'foreignKey':'SessionId','onDelete':'cascade'});db[_0x7eb8('0x199')][_0x7eb8('0x11c')](db[_0x7eb8('0x4c')],{});db[_0x7eb8('0x199')]['belongsTo'](db[_0x7eb8('0xf2')],{'as':_0x7eb8('0x132'),'foreignKey':_0x7eb8('0x133')});db['SmsQueueReport'][_0x7eb8('0x11c')](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0x129'),'foreignKey':_0x7eb8('0x12a')});db['SmsQueueReport'][_0x7eb8('0x11c')](db[_0x7eb8('0x14a')],{});db[_0x7eb8('0x199')]['belongsTo'](db[_0x7eb8('0x51')],{});db[_0x7eb8('0x199')][_0x7eb8('0x11c')](db['User'],{});db['SmsQueueReport']['belongsTo'](db['SmsQueue'],{});db['JscriptyProject'][_0x7eb8('0xe3')](db[_0x7eb8('0x11a')],{'foreignKey':_0x7eb8('0x19a')});db[_0x7eb8('0xc6')]['hasMany'](db[_0x7eb8('0xbf')],{'foreignKey':_0x7eb8('0x19a')});db['JscriptyProject'][_0x7eb8('0xe3')](db[_0x7eb8('0x198')],{'foreignKey':_0x7eb8('0x19a')});db[_0x7eb8('0xc9')][_0x7eb8('0xef')](db[_0x7eb8('0x12')],{'as':'Users','through':_0x7eb8('0x110')});db['Team']['belongsToMany'](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0xf5')});db[_0x7eb8('0xcc')][_0x7eb8('0xef')](db[_0x7eb8('0x19')],{'through':_0x7eb8('0x120'),'as':_0x7eb8('0xfc')});db[_0x7eb8('0xcc')][_0x7eb8('0xef')](db[_0x7eb8('0x3a')],{'through':_0x7eb8('0x19b'),'as':'MailQueues'});db[_0x7eb8('0xcc')]['belongsToMany'](db[_0x7eb8('0x65')],{'through':_0x7eb8('0x15f'),'as':'ChatQueues'});db['Team'][_0x7eb8('0xef')](db[_0x7eb8('0x4a')],{'through':_0x7eb8('0x147'),'as':_0x7eb8('0x100')});db[_0x7eb8('0xcc')][_0x7eb8('0xef')](db['SmsQueue'],{'through':_0x7eb8('0x150'),'as':_0x7eb8('0x101')});db[_0x7eb8('0xcc')][_0x7eb8('0xef')](db[_0x7eb8('0x5c')],{'through':_0x7eb8('0x155'),'as':'OpenchannelQueues'});db['Campaign'][_0x7eb8('0xe3')](db['CmHopper'],{'as':_0x7eb8('0x117'),'foreignKey':_0x7eb8('0x165')});db[_0x7eb8('0xcf')][_0x7eb8('0xe3')](db[_0x7eb8('0x70')],{'as':_0x7eb8('0xe7'),'foreignKey':'CampaignId'});db[_0x7eb8('0xcf')][_0x7eb8('0xe3')](db[_0x7eb8('0x72')],{'as':_0x7eb8('0x118'),'foreignKey':_0x7eb8('0x165')});db[_0x7eb8('0xcf')]['hasMany'](db['CmHopperBlack'],{'as':_0x7eb8('0x119'),'foreignKey':_0x7eb8('0x165')});db[_0x7eb8('0xcf')][_0x7eb8('0x11c')](db[_0x7eb8('0x29')],{'as':_0x7eb8('0x29'),'foreignKey':_0x7eb8('0x11d')});db[_0x7eb8('0xcf')][_0x7eb8('0x11c')](db[_0x7eb8('0x29')],{'as':_0x7eb8('0x19c'),'foreignKey':_0x7eb8('0x19d')});db[_0x7eb8('0xcf')][_0x7eb8('0x11c')](db['Interval'],{'as':'Interval','foreignKey':_0x7eb8('0x14b')});db[_0x7eb8('0xcf')]['belongsTo'](db[_0x7eb8('0xc9')],{'as':_0x7eb8('0xc9'),'foreignKey':_0x7eb8('0x19e')});db[_0x7eb8('0xcf')]['belongsToMany'](db[_0x7eb8('0xf2')],{'as':'Lists','through':_0x7eb8('0x19f')});db[_0x7eb8('0xcf')]['belongsToMany'](db[_0x7eb8('0xf2')],{'as':'BlackLists','through':_0x7eb8('0x1a0')});db[_0x7eb8('0x1a1')][_0x7eb8('0x11c')](db[_0x7eb8('0x13b')],{});db['MailTransferReport']['belongsTo'](db['MailInteraction'],{});db[_0x7eb8('0x1a1')][_0x7eb8('0x11c')](db[_0x7eb8('0x39')],{'foreignKey':_0x7eb8('0x1a2'),'as':_0x7eb8('0x1a3')});db[_0x7eb8('0x1a1')]['belongsTo'](db[_0x7eb8('0x12')],{'foreignKey':_0x7eb8('0x1a4'),'as':_0x7eb8('0x1a5')});db[_0x7eb8('0x1a1')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'foreignKey':_0x7eb8('0x1a6'),'as':_0x7eb8('0x1a7')});db[_0x7eb8('0x1a1')][_0x7eb8('0x11c')](db[_0x7eb8('0x3a')],{'foreignKey':_0x7eb8('0x1a8'),'as':_0x7eb8('0x1a9')});db[_0x7eb8('0x1a1')]['belongsTo'](db[_0x7eb8('0x39')],{'foreignKey':_0x7eb8('0x1aa'),'as':_0x7eb8('0x1ab')});db['ChatTransferReport'][_0x7eb8('0x11c')](db['ChatMessage'],{});db[_0x7eb8('0xd7')][_0x7eb8('0x11c')](db[_0x7eb8('0x61')],{});db[_0x7eb8('0xd7')][_0x7eb8('0x11c')](db[_0x7eb8('0x106')],{'foreignKey':_0x7eb8('0x1ac'),'as':'FromAccount'});db[_0x7eb8('0xd7')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'foreignKey':_0x7eb8('0x1a4'),'as':'FromAgent'});db[_0x7eb8('0xd7')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'foreignKey':_0x7eb8('0x1a6'),'as':_0x7eb8('0x1a7')});db[_0x7eb8('0xd7')][_0x7eb8('0x11c')](db[_0x7eb8('0x65')],{'foreignKey':_0x7eb8('0x1ad'),'as':_0x7eb8('0x1a9')});db[_0x7eb8('0xd7')][_0x7eb8('0x11c')](db[_0x7eb8('0x106')],{'foreignKey':_0x7eb8('0x1ae'),'as':'ToAccount'});db['FaxTransferReport'][_0x7eb8('0x11c')](db[_0x7eb8('0x48')],{});db[_0x7eb8('0xd9')][_0x7eb8('0x11c')](db[_0x7eb8('0x46')],{});db[_0x7eb8('0xd9')][_0x7eb8('0x11c')](db['FaxAccount'],{'foreignKey':'FromFaxAccountId','as':_0x7eb8('0x1a3')});db['FaxTransferReport'][_0x7eb8('0x11c')](db['User'],{'foreignKey':_0x7eb8('0x1a4'),'as':'FromAgent'});db[_0x7eb8('0xd9')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'foreignKey':_0x7eb8('0x1a6'),'as':_0x7eb8('0x1a7')});db['FaxTransferReport'][_0x7eb8('0x11c')](db[_0x7eb8('0x4a')],{'foreignKey':_0x7eb8('0x1af'),'as':_0x7eb8('0x1a9')});db['FaxTransferReport'][_0x7eb8('0x11c')](db['FaxAccount'],{'foreignKey':_0x7eb8('0x1b0'),'as':_0x7eb8('0x1ab')});db[_0x7eb8('0x1b1')][_0x7eb8('0x11c')](db[_0x7eb8('0x5b')],{});db[_0x7eb8('0x1b1')][_0x7eb8('0x11c')](db[_0x7eb8('0x59')],{});db[_0x7eb8('0x1b1')]['belongsTo'](db[_0x7eb8('0x55')],{'foreignKey':_0x7eb8('0x1b2'),'as':_0x7eb8('0x1a3')});db[_0x7eb8('0x1b1')]['belongsTo'](db[_0x7eb8('0x12')],{'foreignKey':_0x7eb8('0x1a4'),'as':_0x7eb8('0x1a5')});db[_0x7eb8('0x1b1')][_0x7eb8('0x11c')](db[_0x7eb8('0x12')],{'foreignKey':_0x7eb8('0x1a6'),'as':_0x7eb8('0x1a7')});db[_0x7eb8('0x1b1')][_0x7eb8('0x11c')](db['OpenchannelQueue'],{'foreignKey':_0x7eb8('0x1b3'),'as':_0x7eb8('0x1a9')});db[_0x7eb8('0x1b1')]['belongsTo'](db['OpenchannelAccount'],{'foreignKey':_0x7eb8('0x1b4'),'as':'ToAccount'});db[_0x7eb8('0xdc')][_0x7eb8('0x11c')](db[_0x7eb8('0x51')],{});db[_0x7eb8('0xdc')]['belongsTo'](db[_0x7eb8('0x14a')],{});db['SmsTransferReport'][_0x7eb8('0x11c')](db[_0x7eb8('0x4c')],{'foreignKey':_0x7eb8('0x1b5'),'as':_0x7eb8('0x1a3')});db['SmsTransferReport'][_0x7eb8('0x11c')](db['User'],{'foreignKey':'FromUserId','as':_0x7eb8('0x1a5')});db['SmsTransferReport']['belongsTo'](db[_0x7eb8('0x12')],{'foreignKey':_0x7eb8('0x1a6'),'as':_0x7eb8('0x1a7')});db[_0x7eb8('0xdc')]['belongsTo'](db['SmsQueue'],{'foreignKey':'ToSmsQueueId','as':'ToQueue'});db[_0x7eb8('0xdc')]['belongsTo'](db[_0x7eb8('0x4c')],{'foreignKey':_0x7eb8('0x1b6'),'as':'ToAccount'});db[_0x7eb8('0xf2')][_0x7eb8('0xe3')](db['Disposition'],{'as':_0x7eb8('0x12e'),'foreignKey':_0x7eb8('0x133')});db[_0x7eb8('0xf2')][_0x7eb8('0xe3')](db[_0x7eb8('0x1b7')],{'as':'CustomFields','foreignKey':_0x7eb8('0x133')});db['CmList']['hasMany'](db[_0x7eb8('0x6b')],{'as':_0x7eb8('0xf0'),'onDelete':_0x7eb8('0xe1'),'foreignKey':_0x7eb8('0x133')});db[_0x7eb8('0xf2')][_0x7eb8('0xe3')](db[_0x7eb8('0x70')],{'as':_0x7eb8('0xe7'),'foreignKey':_0x7eb8('0x133')});db[_0x7eb8('0xf2')][_0x7eb8('0xe3')](db['CmHopperHistory'],{'as':'HopperHistory','foreignKey':_0x7eb8('0x133')});db['CmList'][_0x7eb8('0xe3')](db[_0x7eb8('0x73')],{'as':'ReportAgentPreview','foreignKey':_0x7eb8('0x133')});db[_0x7eb8('0xf2')][_0x7eb8('0xef')](db[_0x7eb8('0x19')],{'as':_0x7eb8('0x1b8'),'through':_0x7eb8('0x11e')});db['CmList'][_0x7eb8('0xef')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0xf4')});db[_0x7eb8('0xdf')]['hasMany'](db[_0x7eb8('0x17')],{'as':_0x7eb8('0x16d'),'onDelete':_0x7eb8('0x13d')});db[_0x7eb8('0xdf')][_0x7eb8('0xef')](db[_0x7eb8('0x12')],{'as':_0x7eb8('0x11f'),'through':_0x7eb8('0x105')});module[_0x7eb8('0x1b9')]={'db':db,'dbH':dbH};
\ No newline at end of file
index 7d892f4..28ae796 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6308=['/demo','/snippet','snippet','/:url(api|auth|components|app|bower_components|assets)/*','get','sendFile','appPath','/index.html','path','express-winston','./config/environment','./config/logger','api','auth','use','format','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s','method','headers','connection','remoteAddress','url','responseTime','user','name','role','body','agent_id','x-forwarded-for','statusCode','device','agent_name','/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/voiceMail','/api/voice/mails/messages','./api/voiceMailMessage','/api/voice/calls/reports','/api/voice/dials/reports','./api/voiceDialReport','/api/voice/agents/reports','./api/voiceAgentReport','/api/voice/queues/reports','./api/voiceQueueReport','./api/memberReport','/api/trunks','./api/trunk','/api/voice/transfers/reports','./api/voiceTransferReport','/api/mail/out_servers','./api/mailServerOut','/api/mail/accounts','./api/mailAccount','/api/mail/queues','./api/mailQueue','./api/mailSubstatus','/api/mail/messages','./api/mailMessage','/api/mail/applications','/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/faxInteraction','/api/fax/messages','./api/faxMessage','/api/fax/queues','./api/faxQueueReport','/api/sms/accounts','./api/smsAccount','/api/sms/applications','/api/sms/interactions','./api/smsInteraction','/api/sms/messages','./api/smsMessage','/api/sms/queues','./api/smsQueue','./api/openchannelAccount','/api/openchannel/applications','/api/openchannel/interactions','/api/openchannel/messages','./api/openchannelMessage','./api/openchannelQueue','./api/chatWebsite','/api/openchannel/reports/queue','./api/openchannelQueueReport','/api/chat/applications','./api/chatApplication','/api/chat/interactions','./api/chatInteraction','/api/chat/messages','./api/chatMessage','/api/chat/offline_messages','./api/chatOfflineMessage','./api/chatQueue','/api/chat/groups','./api/chatGroup','/api/chat/proactive_actions','./api/chatProactiveAction','/api/cm/companies','/api/cm/contacts','./api/cmContact','/api/cm/hopper','./api/cmHopper','/api/cm/hopper_black','/api/cm/hopper_final','./api/cmHopperFinal','/api/cm/hopper_history','/api/cm/custom_fields','./api/cmCustomField','./api/action','./api/automation','/api/canned_answers','./api/cannedAnswer','/api/dispositions','./api/disposition','./api/condition','./api/interval','/api/pauses','./api/pause','./api/cdr','/api/voiceQueuesLog','./api/voiceQueuesLog','/api/schedules','./api/schedule','/api/sounds','./api/sound','./api/template','./api/trigger','/api/variables','./api/variable','/api/integrations','./api/integration','/api/analytics/custom_reports','./api/analyticCustomReport','/api/analytics/default_reports','./api/analyticDefaultReport','/api/analytics/extracted_reports','./api/analyticExtractedReport','/api/analytics/field_reports','./api/analyticTreeReport','/api/integrations/salesforce/accounts','./api/intSalesforceAccount','/api/integrations/salesforce/fields','./api/intSalesforceField','/api/integrations/sugarcrm/accounts','./api/intSugarcrmAccount','/api/integrations/sugarcrm/configurations','./api/intSugarcrmConfiguration','/api/integrations/sugarcrm/fields','./api/intSugarcrmField','./api/intDeskAccount','/api/integrations/desk/configurations','./api/intDeskConfiguration','/api/integrations/desk/fields','/api/integrations/zoho/accounts','./api/intZohoAccount','./api/intZohoConfiguration','./api/intZohoField','/api/integrations/zendesk/accounts','./api/intZendeskAccount','/api/integrations/zendesk/fields','./api/intZendeskField','/api/integrations/freshdesk/accounts','./api/intFreshdeskAccount','/api/integrations/freshdesk/configurations','./api/intFreshdeskConfiguration','/api/integrations/freshdesk/fields','./api/intFreshdeskField','/api/integrations/vtiger/accounts','./api/intVtigerAccount','/api/integrations/vtiger/fields','./api/intVtigerField','/api/networks','/api/chat/reports/queue','./api/chatQueueReport','/api/chat/internal/messages','/api/jscripty/answers/reports','./api/jscriptyAnswerReport','/api/jscripty/questions/reports','./api/jscriptyQuestionReport','/api/jscripty/sessions/reports','./api/jscriptySessionReport','/api/sms/reports/queue','./api/smsQueueReport','/api/square/reports','/api/square/details/reports','./api/squareReportDetail','/api/jscripty/projects','/api/settings','./api/squareOdbc','./api/squareRecording','/api/teams','/api/license','/api/campaigns','./api/campaign','./api/migration','/api/attachments','./api/attachment','/api/plugins','./api/plugin','/api/mail/reports/transfer','./api/mailTransferReport','/api/chat/reports/transfer','/api/fax/reports/transfer','./api/faxTransferReport','/api/openchannel/reports/transfer','./api/openchannelTransferReport','/api/sms/reports/transfer','/api/cm/lists','/api/voice/prefixes','./api/voicePrefix','./api/authLocal','/api/auth/google','./api/authGoogle','/api/rpc','./api/rpc','/api/version','./api/version','/api/system','./api/system','/api/pm2','./api/pm2','static','root','/apidoc','/www','join'];(function(_0x1b2ff7,_0x12a034){var _0x31656a=function(_0x1165a5){while(--_0x1165a5){_0x1b2ff7['push'](_0x1b2ff7['shift']());}};_0x31656a(++_0x12a034);}(_0x6308,0x1f2));var _0x8630=function(_0x24061a,_0x1c9f4d){_0x24061a=_0x24061a-0x0;var _0x82054e=_0x6308[_0x24061a];return _0x82054e;};'use strict';var path=require(_0x8630('0x0'));var express=require('express');var ewinston=require(_0x8630('0x1'));var util=require('util');var errors=require('./errors');var config=require(_0x8630('0x2'));var logger=require(_0x8630('0x3'))(_0x8630('0x4'));var authLogger=require(_0x8630('0x3'))(_0x8630('0x5'));exports['default']=function(_0x4b2cfb){_0x4b2cfb[_0x8630('0x6')](ewinston['logger']({'winstonInstance':logger,'meta':![],'statusLevels':!![],'msg':function(_0x337086,_0x3d5a10){return util[_0x8630('0x7')](_0x8630('0x8'),_0x337086[_0x8630('0x9')],_0x337086[_0x8630('0xa')]['x-forwarded-for']?_0x337086[_0x8630('0xa')]['x-forwarded-for']:_0x337086[_0x8630('0xb')][_0x8630('0xc')]||_0x337086['ip'],_0x337086[_0x8630('0xd')],_0x3d5a10['statusCode'],_0x3d5a10[_0x8630('0xe')],_0x337086[_0x8630('0xf')]?_0x337086[_0x8630('0xf')]['id']:null,_0x337086['user']?_0x337086[_0x8630('0xf')][_0x8630('0x10')]:null,_0x337086['user']?_0x337086['user'][_0x8630('0x11')]:null);}}));_0x4b2cfb[_0x8630('0x6')](ewinston['logger']({'winstonInstance':authLogger,'meta':![],'statusLevels':!![],'msg':function(_0x3040be,_0x4db686){var _0xf31c17='%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s';if(_0x3040be[_0x8630('0x12')]&&_0x3040be['body']['device']&&_0x3040be[_0x8630('0x12')][_0x8630('0x13')]){_0xf31c17='%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s\x20(id=%s\x20name=%s)';}return util['format'](_0xf31c17,_0x3040be[_0x8630('0x9')],_0x3040be['headers'][_0x8630('0x14')]?_0x3040be[_0x8630('0xa')][_0x8630('0x14')]:_0x3040be[_0x8630('0xb')][_0x8630('0xc')]||_0x3040be['ip'],_0x3040be[_0x8630('0xd')],_0x4db686[_0x8630('0x15')],_0x4db686[_0x8630('0xe')],_0x3040be[_0x8630('0xf')]?_0x3040be['user']['id']:null,_0x3040be['user']?_0x3040be[_0x8630('0xf')][_0x8630('0x10')]:null,_0x3040be['user']?_0x3040be['user'][_0x8630('0x11')]:null,_0x3040be[_0x8630('0x12')]&&_0x3040be[_0x8630('0x12')]['device']?_0x3040be['body'][_0x8630('0x16')]:'other',_0x3040be[_0x8630('0x12')]&&_0x3040be[_0x8630('0x12')][_0x8630('0x13')]?_0x3040be[_0x8630('0x12')]['agent_id']:'',_0x3040be[_0x8630('0x12')]&&_0x3040be[_0x8630('0x12')][_0x8630('0x17')]?_0x3040be[_0x8630('0x12')][_0x8630('0x17')]:'');},'ignoreRoute':function(_0x309d04){var _0x37b7aa=/\/api\/users\/[0-9]+\/(login|logout)/gi;return!_0x37b7aa['test'](_0x309d04['url']);}}));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x18'),require(_0x8630('0x19')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x1a'),require(_0x8630('0x1b')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x1c'),require(_0x8630('0x1d')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x1e'),require(_0x8630('0x1f')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x20'),require(_0x8630('0x21')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x22'),require('./api/voiceQueue'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x23'),require(_0x8630('0x24')));_0x4b2cfb[_0x8630('0x6')]('/api/voice/mails',require(_0x8630('0x25')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x26'),require(_0x8630('0x27')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x28'),require('./api/voiceCallReport'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x29'),require(_0x8630('0x2a')));_0x4b2cfb['use'](_0x8630('0x2b'),require(_0x8630('0x2c')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x2d'),require(_0x8630('0x2e')));_0x4b2cfb[_0x8630('0x6')]('/api/members/reports',require(_0x8630('0x2f')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x30'),require(_0x8630('0x31')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x32'),require(_0x8630('0x33')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x34'),require(_0x8630('0x35')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x36'),require(_0x8630('0x37')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x38'),require(_0x8630('0x39')));_0x4b2cfb[_0x8630('0x6')]('/api/mail/substatuses',require(_0x8630('0x3a')));_0x4b2cfb[_0x8630('0x6')]('/api/mail/interactions',require('./api/mailInteraction'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x3b'),require(_0x8630('0x3c')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x3d'),require('./api/mailApplication'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x3e'),require(_0x8630('0x3f')));_0x4b2cfb[_0x8630('0x6')]('/api/dashboards',require(_0x8630('0x40')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x41'),require(_0x8630('0x42')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x43'),require(_0x8630('0x44')));_0x4b2cfb['use'](_0x8630('0x45'),require(_0x8630('0x46')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x47'),require(_0x8630('0x48')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x49'),require(_0x8630('0x4a')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x4b'),require('./api/faxQueue'));_0x4b2cfb[_0x8630('0x6')]('/api/fax/reports/queue',require(_0x8630('0x4c')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x4d'),require(_0x8630('0x4e')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x4f'),require('./api/smsApplication'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x50'),require(_0x8630('0x51')));_0x4b2cfb['use'](_0x8630('0x52'),require(_0x8630('0x53')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x54'),require(_0x8630('0x55')));_0x4b2cfb[_0x8630('0x6')]('/api/openchannel/accounts',require(_0x8630('0x56')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x57'),require('./api/openchannelApplication'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x58'),require('./api/openchannelInteraction'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x59'),require(_0x8630('0x5a')));_0x4b2cfb['use']('/api/openchannel/queues',require(_0x8630('0x5b')));_0x4b2cfb['use']('/api/chat/websites',require(_0x8630('0x5c')));_0x4b2cfb['use'](_0x8630('0x5d'),require(_0x8630('0x5e')));_0x4b2cfb['use'](_0x8630('0x5f'),require(_0x8630('0x60')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x61'),require(_0x8630('0x62')));_0x4b2cfb['use'](_0x8630('0x63'),require(_0x8630('0x64')));_0x4b2cfb['use'](_0x8630('0x65'),require(_0x8630('0x66')));_0x4b2cfb[_0x8630('0x6')]('/api/chat/queues',require(_0x8630('0x67')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x68'),require(_0x8630('0x69')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x6a'),require(_0x8630('0x6b')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x6c'),require('./api/cmCompany'));_0x4b2cfb['use'](_0x8630('0x6d'),require(_0x8630('0x6e')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x6f'),require(_0x8630('0x70')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x71'),require('./api/cmHopperBlack'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x72'),require(_0x8630('0x73')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x74'),require('./api/cmHopperHistory'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x75'),require(_0x8630('0x76')));_0x4b2cfb[_0x8630('0x6')]('/api/actions',require(_0x8630('0x77')));_0x4b2cfb[_0x8630('0x6')]('/api/automations',require(_0x8630('0x78')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x79'),require(_0x8630('0x7a')));_0x4b2cfb['use'](_0x8630('0x7b'),require(_0x8630('0x7c')));_0x4b2cfb['use']('/api/conditions',require(_0x8630('0x7d')));_0x4b2cfb[_0x8630('0x6')]('/api/intervals',require(_0x8630('0x7e')));_0x4b2cfb['use'](_0x8630('0x7f'),require(_0x8630('0x80')));_0x4b2cfb[_0x8630('0x6')]('/api/cdr',require(_0x8630('0x81')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x82'),require(_0x8630('0x83')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x84'),require(_0x8630('0x85')));_0x4b2cfb['use'](_0x8630('0x86'),require(_0x8630('0x87')));_0x4b2cfb[_0x8630('0x6')]('/api/tags',require('./api/tag'));_0x4b2cfb[_0x8630('0x6')]('/api/templates',require(_0x8630('0x88')));_0x4b2cfb[_0x8630('0x6')]('/api/triggers',require(_0x8630('0x89')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x8a'),require(_0x8630('0x8b')));_0x4b2cfb['use'](_0x8630('0x8c'),require(_0x8630('0x8d')));_0x4b2cfb[_0x8630('0x6')]('/api/integrations/reports',require('./api/integrationReport'));_0x4b2cfb['use'](_0x8630('0x8e'),require(_0x8630('0x8f')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x90'),require(_0x8630('0x91')));_0x4b2cfb['use'](_0x8630('0x92'),require(_0x8630('0x93')));_0x4b2cfb[_0x8630('0x6')]('/api/analytics/metrics',require('./api/analyticMetric'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x94'),require('./api/analyticFieldReport'));_0x4b2cfb[_0x8630('0x6')]('/api/analytics/tree_reports',require(_0x8630('0x95')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x96'),require(_0x8630('0x97')));_0x4b2cfb[_0x8630('0x6')]('/api/integrations/salesforce/configurations',require('./api/intSalesforceConfiguration'));_0x4b2cfb['use'](_0x8630('0x98'),require(_0x8630('0x99')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x9a'),require(_0x8630('0x9b')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x9c'),require(_0x8630('0x9d')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0x9e'),require(_0x8630('0x9f')));_0x4b2cfb[_0x8630('0x6')]('/api/integrations/desk/accounts',require(_0x8630('0xa0')));_0x4b2cfb['use'](_0x8630('0xa1'),require(_0x8630('0xa2')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xa3'),require('./api/intDeskField'));_0x4b2cfb['use'](_0x8630('0xa4'),require(_0x8630('0xa5')));_0x4b2cfb[_0x8630('0x6')]('/api/integrations/zoho/configurations',require(_0x8630('0xa6')));_0x4b2cfb[_0x8630('0x6')]('/api/integrations/zoho/fields',require(_0x8630('0xa7')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xa8'),require(_0x8630('0xa9')));_0x4b2cfb[_0x8630('0x6')]('/api/integrations/zendesk/configurations',require('./api/intZendeskConfiguration'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xaa'),require(_0x8630('0xab')));_0x4b2cfb['use'](_0x8630('0xac'),require(_0x8630('0xad')));_0x4b2cfb['use'](_0x8630('0xae'),require(_0x8630('0xaf')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xb0'),require(_0x8630('0xb1')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xb2'),require(_0x8630('0xb3')));_0x4b2cfb[_0x8630('0x6')]('/api/integrations/vtiger/configurations',require('./api/intVtigerConfiguration'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xb4'),require(_0x8630('0xb5')));_0x4b2cfb['use'](_0x8630('0xb6'),require('./api/network'));_0x4b2cfb['use'](_0x8630('0xb7'),require(_0x8630('0xb8')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xb9'),require('./api/chatInternalMessage'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xba'),require(_0x8630('0xbb')));_0x4b2cfb['use'](_0x8630('0xbc'),require(_0x8630('0xbd')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xbe'),require(_0x8630('0xbf')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xc0'),require(_0x8630('0xc1')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xc2'),require('./api/squareReport'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xc3'),require(_0x8630('0xc4')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xc5'),require('./api/jscriptyProject'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xc6'),require('./api/setting'));_0x4b2cfb[_0x8630('0x6')]('/api/square/odbc',require(_0x8630('0xc7')));_0x4b2cfb[_0x8630('0x6')]('/api/square/projects',require('./api/squareProject'));_0x4b2cfb['use']('/api/square/recordings',require(_0x8630('0xc8')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xc9'),require('./api/team'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xca'),require('./api/license'));_0x4b2cfb['use'](_0x8630('0xcb'),require(_0x8630('0xcc')));_0x4b2cfb[_0x8630('0x6')]('/api/migrations',require(_0x8630('0xcd')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xce'),require(_0x8630('0xcf')));_0x4b2cfb['use'](_0x8630('0xd0'),require(_0x8630('0xd1')));_0x4b2cfb['use'](_0x8630('0xd2'),require(_0x8630('0xd3')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xd4'),require('./api/chatTransferReport'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xd5'),require(_0x8630('0xd6')));_0x4b2cfb['use'](_0x8630('0xd7'),require(_0x8630('0xd8')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xd9'),require('./api/smsTransferReport'));_0x4b2cfb['use'](_0x8630('0xda'),require('./api/cmList'));_0x4b2cfb['use'](_0x8630('0xdb'),require(_0x8630('0xdc')));_0x4b2cfb['use']('/api/auth/local',require(_0x8630('0xdd')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xde'),require(_0x8630('0xdf')));_0x4b2cfb[_0x8630('0x6')]('/api/jira',require('./api/jira'));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xe0'),require(_0x8630('0xe1')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xe2'),require(_0x8630('0xe3')));_0x4b2cfb['use'](_0x8630('0xe4'),require(_0x8630('0xe5')));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xe6'),require(_0x8630('0xe7')));_0x4b2cfb[_0x8630('0x6')]('/apidoc',express[_0x8630('0xe8')](path['join'](config[_0x8630('0xe9')],_0x8630('0xea'))));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xeb'),express[_0x8630('0xe8')](path[_0x8630('0xec')](config[_0x8630('0xe9')],_0x8630('0xeb'))));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xed'),express[_0x8630('0xe8')](path[_0x8630('0xec')](config[_0x8630('0xe9')],_0x8630('0xed'))));_0x4b2cfb[_0x8630('0x6')](_0x8630('0xee'),express['static'](path['join'](config[_0x8630('0xe9')],_0x8630('0xef'),'1.0.10')));_0x4b2cfb[_0x8630('0x6')]('/plugins',express['static'](path[_0x8630('0xec')](config[_0x8630('0xe9')],'/server/files/plugins')));_0x4b2cfb['route'](_0x8630('0xf0'))[_0x8630('0xf1')](errors[0x194]);_0x4b2cfb['route']('/*')[_0x8630('0xf1')](function(_0x2040ff,_0x46cddc){_0x46cddc[_0x8630('0xf2')](path['resolve'](_0x4b2cfb[_0x8630('0xf1')](_0x8630('0xf3'))+_0x8630('0xf4')));});};
\ No newline at end of file
+var _0x60d7=['/api/integrations/salesforce/fields','./api/intSalesforceField','./api/intSugarcrmAccount','/api/integrations/sugarcrm/configurations','./api/intSugarcrmConfiguration','./api/intSugarcrmField','/api/integrations/desk/accounts','./api/intDeskAccount','/api/integrations/desk/configurations','./api/intDeskConfiguration','/api/integrations/desk/fields','./api/intDeskField','./api/intZohoAccount','/api/integrations/zoho/configurations','./api/intZohoField','/api/integrations/zendesk/configurations','./api/intZendeskConfiguration','/api/integrations/zendesk/fields','./api/intZendeskField','/api/integrations/freshdesk/accounts','./api/intFreshdeskAccount','./api/intFreshdeskConfiguration','/api/integrations/vtiger/accounts','/api/integrations/vtiger/configurations','./api/intVtigerField','/api/networks','./api/network','./api/chatQueueReport','/api/chat/internal/messages','/api/jscripty/questions/reports','./api/jscriptyQuestionReport','./api/jscriptySessionReport','/api/sms/reports/queue','./api/smsQueueReport','/api/square/reports','/api/square/details/reports','./api/squareReportDetail','./api/jscriptyProject','./api/setting','/api/square/odbc','./api/squareOdbc','/api/square/projects','./api/squareProject','./api/squareRecording','./api/team','./api/license','/api/migrations','/api/attachments','./api/plugin','./api/mailTransferReport','./api/chatTransferReport','/api/openchannel/reports/transfer','./api/openchannelTransferReport','/api/sms/reports/transfer','./api/smsTransferReport','./api/voicePrefix','/api/auth/local','/api/auth/google','./api/authGoogle','/api/jira','./api/jira','/api/rpc','./api/rpc','/api/version','./api/version','/api/system','./api/system','/apidoc','static','join','root','/demo','/snippet','snippet','/plugins','/server/files/plugins','route','get','resolve','appPath','/index.html','path','express','util','./config/environment','api','./config/logger','auth','default','use','logger','format','method','headers','x-forwarded-for','connection','remoteAddress','statusCode','responseTime','user','name','role','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s','body','device','agent_id','other','agent_name','test','url','/api/users','./api/user','/api/voice/chanspy','/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/voiceDialReport','/api/voice/agents/reports','./api/voiceAgentReport','./api/voiceQueueReport','/api/trunks','/api/mail/out_servers','./api/mailServerOut','/api/mail/accounts','/api/mail/substatuses','./api/mailSubstatus','/api/mail/interactions','./api/mailInteraction','/api/mail/messages','./api/mailMessage','/api/mail/applications','./api/mailApplication','/api/mail/reports/queue','./api/mailQueueReport','/api/dashboards','/api/dashboards/items','/api/fax/interactions','./api/faxInteraction','/api/fax/queues','./api/faxQueue','/api/fax/reports/queue','./api/faxQueueReport','/api/sms/accounts','./api/smsAccount','./api/smsApplication','/api/sms/interactions','./api/smsInteraction','/api/sms/messages','./api/smsMessage','/api/sms/queues','./api/smsQueue','/api/openchannel/accounts','./api/openchannelAccount','/api/openchannel/applications','./api/openchannelApplication','/api/openchannel/interactions','./api/openchannelInteraction','/api/openchannel/queues','./api/openchannelQueue','./api/chatWebsite','/api/openchannel/reports/queue','./api/openchannelQueueReport','/api/chat/applications','/api/chat/interactions','./api/chatInteraction','/api/chat/messages','./api/chatMessage','/api/chat/offline_messages','./api/chatOfflineMessage','/api/chat/groups','./api/chatProactiveAction','./api/cmCompany','/api/cm/contacts','./api/cmContact','/api/cm/hopper','./api/cmHopper','/api/cm/hopper_black','/api/cm/hopper_final','./api/cmHopperFinal','/api/cm/hopper_history','./api/cmHopperHistory','/api/cm/custom_fields','./api/cmCustomField','/api/actions','/api/automations','./api/automation','/api/canned_answers','./api/cannedAnswer','./api/disposition','./api/condition','./api/interval','/api/pauses','./api/pause','/api/cdr','./api/cdr','/api/voiceQueuesLog','./api/voiceQueuesLog','/api/schedules','./api/schedule','/api/sounds','./api/sound','/api/tags','./api/tag','/api/triggers','./api/trigger','/api/variables','./api/variable','/api/integrations','./api/integration','/api/integrations/reports','./api/integrationReport','/api/analytics/custom_reports','./api/analyticCustomReport','./api/analyticDefaultReport','/api/analytics/extracted_reports','./api/analyticExtractedReport','./api/analyticMetric','/api/analytics/field_reports','./api/analyticFieldReport','/api/analytics/tree_reports','/api/integrations/salesforce/accounts','/api/integrations/salesforce/configurations','./api/intSalesforceConfiguration'];(function(_0x497e54,_0x316d36){var _0x3a465d=function(_0x54a569){while(--_0x54a569){_0x497e54['push'](_0x497e54['shift']());}};_0x3a465d(++_0x316d36);}(_0x60d7,0x139));var _0x760d=function(_0x484e2e,_0x1ae63d){_0x484e2e=_0x484e2e-0x0;var _0x501690=_0x60d7[_0x484e2e];return _0x501690;};'use strict';var path=require(_0x760d('0x0'));var express=require(_0x760d('0x1'));var ewinston=require('express-winston');var util=require(_0x760d('0x2'));var errors=require('./errors');var config=require(_0x760d('0x3'));var logger=require('./config/logger')(_0x760d('0x4'));var authLogger=require(_0x760d('0x5'))(_0x760d('0x6'));exports[_0x760d('0x7')]=function(_0x47affe){_0x47affe[_0x760d('0x8')](ewinston[_0x760d('0x9')]({'winstonInstance':logger,'meta':![],'statusLevels':!![],'msg':function(_0x39282b,_0x463b41){return util[_0x760d('0xa')]('%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s',_0x39282b[_0x760d('0xb')],_0x39282b[_0x760d('0xc')][_0x760d('0xd')]?_0x39282b['headers'][_0x760d('0xd')]:_0x39282b[_0x760d('0xe')][_0x760d('0xf')]||_0x39282b['ip'],_0x39282b['url'],_0x463b41[_0x760d('0x10')],_0x463b41[_0x760d('0x11')],_0x39282b['user']?_0x39282b[_0x760d('0x12')]['id']:null,_0x39282b[_0x760d('0x12')]?_0x39282b[_0x760d('0x12')][_0x760d('0x13')]:null,_0x39282b[_0x760d('0x12')]?_0x39282b[_0x760d('0x12')][_0x760d('0x14')]:null);}}));_0x47affe[_0x760d('0x8')](ewinston[_0x760d('0x9')]({'winstonInstance':authLogger,'meta':![],'statusLevels':!![],'msg':function(_0x2a956d,_0x28bd1b){var _0x543d6e=_0x760d('0x15');if(_0x2a956d['body']&&_0x2a956d[_0x760d('0x16')][_0x760d('0x17')]&&_0x2a956d[_0x760d('0x16')][_0x760d('0x18')]){_0x543d6e='%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s\x20(id=%s\x20name=%s)';}return util['format'](_0x543d6e,_0x2a956d[_0x760d('0xb')],_0x2a956d[_0x760d('0xc')][_0x760d('0xd')]?_0x2a956d[_0x760d('0xc')][_0x760d('0xd')]:_0x2a956d[_0x760d('0xe')]['remoteAddress']||_0x2a956d['ip'],_0x2a956d['url'],_0x28bd1b[_0x760d('0x10')],_0x28bd1b[_0x760d('0x11')],_0x2a956d[_0x760d('0x12')]?_0x2a956d[_0x760d('0x12')]['id']:null,_0x2a956d[_0x760d('0x12')]?_0x2a956d[_0x760d('0x12')][_0x760d('0x13')]:null,_0x2a956d[_0x760d('0x12')]?_0x2a956d[_0x760d('0x12')][_0x760d('0x14')]:null,_0x2a956d['body']&&_0x2a956d[_0x760d('0x16')][_0x760d('0x17')]?_0x2a956d[_0x760d('0x16')][_0x760d('0x17')]:_0x760d('0x19'),_0x2a956d['body']&&_0x2a956d[_0x760d('0x16')][_0x760d('0x18')]?_0x2a956d[_0x760d('0x16')]['agent_id']:'',_0x2a956d['body']&&_0x2a956d[_0x760d('0x16')][_0x760d('0x1a')]?_0x2a956d[_0x760d('0x16')][_0x760d('0x1a')]:'');},'ignoreRoute':function(_0x359e7a){var _0x16bbdb=/\/api\/users\/[0-9]+\/(login|logout)/gi;return!_0x16bbdb[_0x760d('0x1b')](_0x359e7a[_0x760d('0x1c')]);}}));_0x47affe['use'](_0x760d('0x1d'),require(_0x760d('0x1e')));_0x47affe[_0x760d('0x8')](_0x760d('0x1f'),require('./api/voiceChanSpy'));_0x47affe[_0x760d('0x8')]('/api/voice/contexts',require('./api/voiceContext'));_0x47affe[_0x760d('0x8')](_0x760d('0x20'),require(_0x760d('0x21')));_0x47affe[_0x760d('0x8')](_0x760d('0x22'),require(_0x760d('0x23')));_0x47affe[_0x760d('0x8')](_0x760d('0x24'),require('./api/voiceQueue'));_0x47affe[_0x760d('0x8')](_0x760d('0x25'),require(_0x760d('0x26')));_0x47affe[_0x760d('0x8')]('/api/voice/mails',require('./api/voiceMail'));_0x47affe[_0x760d('0x8')](_0x760d('0x27'),require(_0x760d('0x28')));_0x47affe[_0x760d('0x8')](_0x760d('0x29'),require(_0x760d('0x2a')));_0x47affe[_0x760d('0x8')](_0x760d('0x2b'),require(_0x760d('0x2c')));_0x47affe[_0x760d('0x8')](_0x760d('0x2d'),require(_0x760d('0x2e')));_0x47affe[_0x760d('0x8')]('/api/voice/queues/reports',require(_0x760d('0x2f')));_0x47affe[_0x760d('0x8')]('/api/members/reports',require('./api/memberReport'));_0x47affe[_0x760d('0x8')](_0x760d('0x30'),require('./api/trunk'));_0x47affe[_0x760d('0x8')]('/api/voice/transfers/reports',require('./api/voiceTransferReport'));_0x47affe[_0x760d('0x8')](_0x760d('0x31'),require(_0x760d('0x32')));_0x47affe[_0x760d('0x8')](_0x760d('0x33'),require('./api/mailAccount'));_0x47affe['use']('/api/mail/queues',require('./api/mailQueue'));_0x47affe[_0x760d('0x8')](_0x760d('0x34'),require(_0x760d('0x35')));_0x47affe[_0x760d('0x8')](_0x760d('0x36'),require(_0x760d('0x37')));_0x47affe['use'](_0x760d('0x38'),require(_0x760d('0x39')));_0x47affe[_0x760d('0x8')](_0x760d('0x3a'),require(_0x760d('0x3b')));_0x47affe[_0x760d('0x8')](_0x760d('0x3c'),require(_0x760d('0x3d')));_0x47affe['use'](_0x760d('0x3e'),require('./api/dashboard'));_0x47affe[_0x760d('0x8')](_0x760d('0x3f'),require('./api/dashboardItem'));_0x47affe[_0x760d('0x8')]('/api/fax/accounts',require('./api/faxAccount'));_0x47affe[_0x760d('0x8')]('/api/fax/applications',require('./api/faxApplication'));_0x47affe[_0x760d('0x8')](_0x760d('0x40'),require(_0x760d('0x41')));_0x47affe['use']('/api/fax/messages',require('./api/faxMessage'));_0x47affe[_0x760d('0x8')](_0x760d('0x42'),require(_0x760d('0x43')));_0x47affe[_0x760d('0x8')](_0x760d('0x44'),require(_0x760d('0x45')));_0x47affe[_0x760d('0x8')](_0x760d('0x46'),require(_0x760d('0x47')));_0x47affe['use']('/api/sms/applications',require(_0x760d('0x48')));_0x47affe['use'](_0x760d('0x49'),require(_0x760d('0x4a')));_0x47affe[_0x760d('0x8')](_0x760d('0x4b'),require(_0x760d('0x4c')));_0x47affe[_0x760d('0x8')](_0x760d('0x4d'),require(_0x760d('0x4e')));_0x47affe[_0x760d('0x8')](_0x760d('0x4f'),require(_0x760d('0x50')));_0x47affe[_0x760d('0x8')](_0x760d('0x51'),require(_0x760d('0x52')));_0x47affe[_0x760d('0x8')](_0x760d('0x53'),require(_0x760d('0x54')));_0x47affe['use']('/api/openchannel/messages',require('./api/openchannelMessage'));_0x47affe['use'](_0x760d('0x55'),require(_0x760d('0x56')));_0x47affe[_0x760d('0x8')]('/api/chat/websites',require(_0x760d('0x57')));_0x47affe[_0x760d('0x8')](_0x760d('0x58'),require(_0x760d('0x59')));_0x47affe[_0x760d('0x8')](_0x760d('0x5a'),require('./api/chatApplication'));_0x47affe[_0x760d('0x8')](_0x760d('0x5b'),require(_0x760d('0x5c')));_0x47affe[_0x760d('0x8')](_0x760d('0x5d'),require(_0x760d('0x5e')));_0x47affe[_0x760d('0x8')](_0x760d('0x5f'),require(_0x760d('0x60')));_0x47affe[_0x760d('0x8')]('/api/chat/queues',require('./api/chatQueue'));_0x47affe[_0x760d('0x8')](_0x760d('0x61'),require('./api/chatGroup'));_0x47affe[_0x760d('0x8')]('/api/chat/proactive_actions',require(_0x760d('0x62')));_0x47affe['use']('/api/cm/companies',require(_0x760d('0x63')));_0x47affe[_0x760d('0x8')](_0x760d('0x64'),require(_0x760d('0x65')));_0x47affe['use'](_0x760d('0x66'),require(_0x760d('0x67')));_0x47affe['use'](_0x760d('0x68'),require('./api/cmHopperBlack'));_0x47affe[_0x760d('0x8')](_0x760d('0x69'),require(_0x760d('0x6a')));_0x47affe['use'](_0x760d('0x6b'),require(_0x760d('0x6c')));_0x47affe[_0x760d('0x8')](_0x760d('0x6d'),require(_0x760d('0x6e')));_0x47affe[_0x760d('0x8')](_0x760d('0x6f'),require('./api/action'));_0x47affe[_0x760d('0x8')](_0x760d('0x70'),require(_0x760d('0x71')));_0x47affe[_0x760d('0x8')](_0x760d('0x72'),require(_0x760d('0x73')));_0x47affe['use']('/api/dispositions',require(_0x760d('0x74')));_0x47affe[_0x760d('0x8')]('/api/conditions',require(_0x760d('0x75')));_0x47affe[_0x760d('0x8')]('/api/intervals',require(_0x760d('0x76')));_0x47affe['use'](_0x760d('0x77'),require(_0x760d('0x78')));_0x47affe[_0x760d('0x8')](_0x760d('0x79'),require(_0x760d('0x7a')));_0x47affe['use'](_0x760d('0x7b'),require(_0x760d('0x7c')));_0x47affe[_0x760d('0x8')](_0x760d('0x7d'),require(_0x760d('0x7e')));_0x47affe[_0x760d('0x8')](_0x760d('0x7f'),require(_0x760d('0x80')));_0x47affe[_0x760d('0x8')](_0x760d('0x81'),require(_0x760d('0x82')));_0x47affe[_0x760d('0x8')]('/api/templates',require('./api/template'));_0x47affe[_0x760d('0x8')](_0x760d('0x83'),require(_0x760d('0x84')));_0x47affe[_0x760d('0x8')](_0x760d('0x85'),require(_0x760d('0x86')));_0x47affe[_0x760d('0x8')](_0x760d('0x87'),require(_0x760d('0x88')));_0x47affe[_0x760d('0x8')](_0x760d('0x89'),require(_0x760d('0x8a')));_0x47affe[_0x760d('0x8')](_0x760d('0x8b'),require(_0x760d('0x8c')));_0x47affe[_0x760d('0x8')]('/api/analytics/default_reports',require(_0x760d('0x8d')));_0x47affe[_0x760d('0x8')](_0x760d('0x8e'),require(_0x760d('0x8f')));_0x47affe[_0x760d('0x8')]('/api/analytics/metrics',require(_0x760d('0x90')));_0x47affe['use'](_0x760d('0x91'),require(_0x760d('0x92')));_0x47affe[_0x760d('0x8')](_0x760d('0x93'),require('./api/analyticTreeReport'));_0x47affe[_0x760d('0x8')](_0x760d('0x94'),require('./api/intSalesforceAccount'));_0x47affe[_0x760d('0x8')](_0x760d('0x95'),require(_0x760d('0x96')));_0x47affe[_0x760d('0x8')](_0x760d('0x97'),require(_0x760d('0x98')));_0x47affe[_0x760d('0x8')]('/api/integrations/sugarcrm/accounts',require(_0x760d('0x99')));_0x47affe['use'](_0x760d('0x9a'),require(_0x760d('0x9b')));_0x47affe[_0x760d('0x8')]('/api/integrations/sugarcrm/fields',require(_0x760d('0x9c')));_0x47affe['use'](_0x760d('0x9d'),require(_0x760d('0x9e')));_0x47affe[_0x760d('0x8')](_0x760d('0x9f'),require(_0x760d('0xa0')));_0x47affe['use'](_0x760d('0xa1'),require(_0x760d('0xa2')));_0x47affe[_0x760d('0x8')]('/api/integrations/zoho/accounts',require(_0x760d('0xa3')));_0x47affe[_0x760d('0x8')](_0x760d('0xa4'),require('./api/intZohoConfiguration'));_0x47affe['use']('/api/integrations/zoho/fields',require(_0x760d('0xa5')));_0x47affe[_0x760d('0x8')]('/api/integrations/zendesk/accounts',require('./api/intZendeskAccount'));_0x47affe[_0x760d('0x8')](_0x760d('0xa6'),require(_0x760d('0xa7')));_0x47affe[_0x760d('0x8')](_0x760d('0xa8'),require(_0x760d('0xa9')));_0x47affe[_0x760d('0x8')](_0x760d('0xaa'),require(_0x760d('0xab')));_0x47affe[_0x760d('0x8')]('/api/integrations/freshdesk/configurations',require(_0x760d('0xac')));_0x47affe[_0x760d('0x8')]('/api/integrations/freshdesk/fields',require('./api/intFreshdeskField'));_0x47affe[_0x760d('0x8')](_0x760d('0xad'),require('./api/intVtigerAccount'));_0x47affe[_0x760d('0x8')](_0x760d('0xae'),require('./api/intVtigerConfiguration'));_0x47affe[_0x760d('0x8')]('/api/integrations/vtiger/fields',require(_0x760d('0xaf')));_0x47affe['use'](_0x760d('0xb0'),require(_0x760d('0xb1')));_0x47affe['use']('/api/chat/reports/queue',require(_0x760d('0xb2')));_0x47affe[_0x760d('0x8')](_0x760d('0xb3'),require('./api/chatInternalMessage'));_0x47affe[_0x760d('0x8')]('/api/jscripty/answers/reports',require('./api/jscriptyAnswerReport'));_0x47affe[_0x760d('0x8')](_0x760d('0xb4'),require(_0x760d('0xb5')));_0x47affe['use']('/api/jscripty/sessions/reports',require(_0x760d('0xb6')));_0x47affe[_0x760d('0x8')](_0x760d('0xb7'),require(_0x760d('0xb8')));_0x47affe[_0x760d('0x8')](_0x760d('0xb9'),require('./api/squareReport'));_0x47affe[_0x760d('0x8')](_0x760d('0xba'),require(_0x760d('0xbb')));_0x47affe[_0x760d('0x8')]('/api/jscripty/projects',require(_0x760d('0xbc')));_0x47affe[_0x760d('0x8')]('/api/settings',require(_0x760d('0xbd')));_0x47affe['use'](_0x760d('0xbe'),require(_0x760d('0xbf')));_0x47affe[_0x760d('0x8')](_0x760d('0xc0'),require(_0x760d('0xc1')));_0x47affe['use']('/api/square/recordings',require(_0x760d('0xc2')));_0x47affe[_0x760d('0x8')]('/api/teams',require(_0x760d('0xc3')));_0x47affe[_0x760d('0x8')]('/api/license',require(_0x760d('0xc4')));_0x47affe[_0x760d('0x8')]('/api/campaigns',require('./api/campaign'));_0x47affe[_0x760d('0x8')](_0x760d('0xc5'),require('./api/migration'));_0x47affe[_0x760d('0x8')](_0x760d('0xc6'),require('./api/attachment'));_0x47affe[_0x760d('0x8')]('/api/plugins',require(_0x760d('0xc7')));_0x47affe[_0x760d('0x8')]('/api/mail/reports/transfer',require(_0x760d('0xc8')));_0x47affe['use']('/api/chat/reports/transfer',require(_0x760d('0xc9')));_0x47affe['use']('/api/fax/reports/transfer',require('./api/faxTransferReport'));_0x47affe['use'](_0x760d('0xca'),require(_0x760d('0xcb')));_0x47affe[_0x760d('0x8')](_0x760d('0xcc'),require(_0x760d('0xcd')));_0x47affe[_0x760d('0x8')]('/api/cm/lists',require('./api/cmList'));_0x47affe[_0x760d('0x8')]('/api/voice/prefixes',require(_0x760d('0xce')));_0x47affe[_0x760d('0x8')](_0x760d('0xcf'),require('./api/authLocal'));_0x47affe[_0x760d('0x8')](_0x760d('0xd0'),require(_0x760d('0xd1')));_0x47affe[_0x760d('0x8')](_0x760d('0xd2'),require(_0x760d('0xd3')));_0x47affe[_0x760d('0x8')](_0x760d('0xd4'),require(_0x760d('0xd5')));_0x47affe[_0x760d('0x8')](_0x760d('0xd6'),require(_0x760d('0xd7')));_0x47affe[_0x760d('0x8')](_0x760d('0xd8'),require(_0x760d('0xd9')));_0x47affe[_0x760d('0x8')]('/api/pm2',require('./api/pm2'));_0x47affe[_0x760d('0x8')](_0x760d('0xda'),express[_0x760d('0xdb')](path[_0x760d('0xdc')](config['root'],_0x760d('0xda'))));_0x47affe['use']('/www',express[_0x760d('0xdb')](path[_0x760d('0xdc')](config[_0x760d('0xdd')],'/www')));_0x47affe[_0x760d('0x8')](_0x760d('0xde'),express[_0x760d('0xdb')](path[_0x760d('0xdc')](config[_0x760d('0xdd')],_0x760d('0xde'))));_0x47affe[_0x760d('0x8')](_0x760d('0xdf'),express[_0x760d('0xdb')](path['join'](config[_0x760d('0xdd')],_0x760d('0xe0'),'1.0.10')));_0x47affe[_0x760d('0x8')](_0x760d('0xe1'),express[_0x760d('0xdb')](path[_0x760d('0xdc')](config['root'],_0x760d('0xe2'))));_0x47affe[_0x760d('0xe3')]('/:url(api|auth|components|app|bower_components|assets)/*')['get'](errors[0x194]);_0x47affe[_0x760d('0xe3')]('/*')[_0x760d('0xe4')](function(_0x7ce645,_0x121cff){_0x121cff['sendFile'](path[_0x760d('0xe5')](_0x47affe[_0x760d('0xe4')](_0x760d('0xe6'))+_0x760d('0xe7')));});};
\ No newline at end of file
index 68399c7..b8c6395 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc80f=['lodash','../config/environment','listen','merge','../api/user/user.rpc','../api/voiceExtension/voiceExtension.rpc','../api/voiceQueue/voiceQueue.rpc','../api/voiceCallReport/voiceCallReport.rpc','../api/voiceDialReport/voiceDialReport.rpc','../api/voiceAgentReport/voiceAgentReport.rpc','../api/voiceQueueReport/voiceQueueReport.rpc','../api/memberReport/memberReport.rpc','../api/trunk/trunk.rpc','../api/mailServerIn/mailServerIn.rpc','../api/mailAccount/mailAccount.rpc','../api/mailInteraction/mailInteraction.rpc','../api/mailApplication/mailApplication.rpc','../api/mailQueueReport/mailQueueReport.rpc','../api/faxAccount/faxAccount.rpc','../api/faxApplication/faxApplication.rpc','../api/faxInteraction/faxInteraction.rpc','../api/faxMessage/faxMessage.rpc','../api/faxQueue/faxQueue.rpc','../api/faxQueueReport/faxQueueReport.rpc','../api/smsAccount/smsAccount.rpc','../api/smsInteraction/smsInteraction.rpc','../api/smsMessage/smsMessage.rpc','../api/openchannelApplication/openchannelApplication.rpc','../api/openchannelInteraction/openchannelInteraction.rpc','../api/openchannelMessage/openchannelMessage.rpc','../api/openchannelQueue/openchannelQueue.rpc','../api/openchannelQueueReport/openchannelQueueReport.rpc','../api/chatInteraction/chatInteraction.rpc','../api/chatMessage/chatMessage.rpc','../api/chatQueue/chatQueue.rpc','../api/cmContact/cmContact.rpc','../api/cmHopperBlack/cmHopperBlack.rpc','../api/cmHopperHistory/cmHopperHistory.rpc','../api/reportAgentPreview/reportAgentPreview.rpc','../api/pause/pause.rpc','../api/sound/sound.rpc','../api/template/template.rpc','../api/variable/variable.rpc','../api/intDeskAccount/intDeskAccount.rpc','../api/intZohoAccount/intZohoAccount.rpc','../api/intZendeskAccount/intZendeskAccount.rpc','../api/intFreshdeskAccount/intFreshdeskAccount.rpc','../api/intVtigerAccount/intVtigerAccount.rpc','../api/smsQueueReport/smsQueueReport.rpc','../api/squareReport/squareReport.rpc','../api/squareOdbc/squareOdbc.rpc','../api/squareProject/squareProject.rpc','../api/campaign/campaign.rpc','../api/attachment/attachment.rpc','../api/plugin/plugin.rpc','server','http','rpc','port','localhost','log','Express\x20RPC\x20server\x20listening\x20on\x20%s:%d!','../config/triggers','default','RPC\x20listening\x20on\x20','jayson/promise','bluebird'];(function(_0x24a090,_0x1bf06d){var _0x2535cc=function(_0x2fdce4){while(--_0x2fdce4){_0x24a090['push'](_0x24a090['shift']());}};_0x2535cc(++_0x1bf06d);}(_0xc80f,0x10a));var _0xfc80=function(_0x1412b1,_0x3af707){_0x1412b1=_0x1412b1-0x0;var _0xaca0d0=_0xc80f[_0x1412b1];return _0xaca0d0;};'use strict';var jayson=require(_0xfc80('0x0'));var BPromise=require(_0xfc80('0x1'));var _=require(_0xfc80('0x2'));var config=require(_0xfc80('0x3'));exports[_0xfc80('0x4')]=function(){return new BPromise(function(_0x369e2c,_0x420eab){var _0x4ba2f2={};_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x6')));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x7')));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x8')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require('../api/voiceRecording/voiceRecording.rpc'));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x9')));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0xa')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0xb')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0xc')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0xd')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0xe')));_0x4ba2f2=_['merge'](_0x4ba2f2,require('../api/voiceTransferReport/voiceTransferReport.rpc'));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require('../api/userVoiceQueueRt/userVoiceQueueRt.rpc'));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0xf')));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x10')));_0x4ba2f2=_['merge'](_0x4ba2f2,require('../api/mailQueue/mailQueue.rpc'));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x11')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require('../api/mailMessage/mailMessage.rpc'));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x12')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x13')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x14')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x15')));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x16')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x17')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x18')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x19')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x1a')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x1b')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x1c')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require('../api/smsQueue/smsQueue.rpc'));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x1d')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x1e')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x1f')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x20')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x21')));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x22')));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x23')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x24')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x25')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require('../api/cmHopper/cmHopper.rpc'));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x26')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require('../api/cmHopperFinal/cmHopperFinal.rpc'));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x27')));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x28')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require('../api/interval/interval.rpc'));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x29')));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x2a')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x2b')));_0x4ba2f2=_['merge'](_0x4ba2f2,require('../api/trigger/trigger.rpc'));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x2c')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require('../api/intSalesforceAccount/intSalesforceAccount.rpc'));_0x4ba2f2=_['merge'](_0x4ba2f2,require('../api/intSugarcrmAccount/intSugarcrmAccount.rpc'));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x2d')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x2e')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x2f')));_0x4ba2f2=_['merge'](_0x4ba2f2,require(_0xfc80('0x30')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x31')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require('../api/chatQueueReport/chatQueueReport.rpc'));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x32')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x33')));_0x4ba2f2=_['merge'](_0x4ba2f2,require('../api/squareReportDetail/squareReportDetail.rpc'));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x34')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x35')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require('../api/squareRecording/squareRecording.rpc'));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x36')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x37')));_0x4ba2f2=_[_0xfc80('0x5')](_0x4ba2f2,require(_0xfc80('0x38')));var _0x6301b2=jayson[_0xfc80('0x39')](_0x4ba2f2)[_0xfc80('0x3a')]();var _0x58e664=config[_0xfc80('0x3b')][_0xfc80('0x3c')]||config[_0xfc80('0x3c')]+0x1;var _0x450c45=config[_0xfc80('0x3b')]['ip']||_0xfc80('0x3d');_0x6301b2['on']('error',function(_0x33d4f3){return _0x420eab(_0x33d4f3);});_0x6301b2[_0xfc80('0x4')](_0x58e664,_0x450c45,function(){console[_0xfc80('0x3e')](_0xfc80('0x3f'),_0x450c45,_0x58e664);require(_0xfc80('0x40'))[_0xfc80('0x41')]();return _0x369e2c(_0xfc80('0x42')+_0x450c45+':'+_0x58e664);});});};
\ No newline at end of file
+var _0xded0=['../api/faxMessage/faxMessage.rpc','../api/faxQueue/faxQueue.rpc','../api/faxQueueReport/faxQueueReport.rpc','../api/smsAccount/smsAccount.rpc','../api/smsInteraction/smsInteraction.rpc','../api/smsQueue/smsQueue.rpc','../api/openchannelApplication/openchannelApplication.rpc','../api/openchannelInteraction/openchannelInteraction.rpc','../api/openchannelMessage/openchannelMessage.rpc','../api/openchannelQueue/openchannelQueue.rpc','../api/openchannelQueueReport/openchannelQueueReport.rpc','../api/chatInteraction/chatInteraction.rpc','../api/chatMessage/chatMessage.rpc','../api/chatQueue/chatQueue.rpc','../api/cmContact/cmContact.rpc','../api/cmHopper/cmHopper.rpc','../api/cmHopperBlack/cmHopperBlack.rpc','../api/cmHopperFinal/cmHopperFinal.rpc','../api/cmHopperHistory/cmHopperHistory.rpc','../api/interval/interval.rpc','../api/pause/pause.rpc','../api/sound/sound.rpc','../api/template/template.rpc','../api/trigger/trigger.rpc','../api/variable/variable.rpc','../api/intSugarcrmAccount/intSugarcrmAccount.rpc','../api/intDeskAccount/intDeskAccount.rpc','../api/intZohoAccount/intZohoAccount.rpc','../api/intZendeskAccount/intZendeskAccount.rpc','../api/intVtigerAccount/intVtigerAccount.rpc','../api/chatQueueReport/chatQueueReport.rpc','../api/squareReport/squareReport.rpc','../api/squareReportDetail/squareReportDetail.rpc','../api/squareProject/squareProject.rpc','../api/campaign/campaign.rpc','../api/attachment/attachment.rpc','http','port','localhost','error','log','Express\x20RPC\x20server\x20listening\x20on\x20%s:%d!','../config/triggers','default','RPC\x20listening\x20on\x20','bluebird','lodash','../config/environment','listen','merge','../api/user/user.rpc','../api/voiceRecording/voiceRecording.rpc','../api/voiceCallReport/voiceCallReport.rpc','../api/voiceDialReport/voiceDialReport.rpc','../api/voiceAgentReport/voiceAgentReport.rpc','../api/voiceQueueReport/voiceQueueReport.rpc','../api/memberReport/memberReport.rpc','../api/mailServerIn/mailServerIn.rpc','../api/mailAccount/mailAccount.rpc','../api/mailInteraction/mailInteraction.rpc','../api/mailMessage/mailMessage.rpc','../api/mailApplication/mailApplication.rpc','../api/faxApplication/faxApplication.rpc','../api/faxInteraction/faxInteraction.rpc'];(function(_0x439c2a,_0x395028){var _0xfa0c7e=function(_0x54a6c3){while(--_0x54a6c3){_0x439c2a['push'](_0x439c2a['shift']());}};_0xfa0c7e(++_0x395028);}(_0xded0,0xad));var _0x0ded=function(_0x38abe7,_0x4f04d2){_0x38abe7=_0x38abe7-0x0;var _0x54c009=_0xded0[_0x38abe7];return _0x54c009;};'use strict';var jayson=require('jayson/promise');var BPromise=require(_0x0ded('0x0'));var _=require(_0x0ded('0x1'));var config=require(_0x0ded('0x2'));exports[_0x0ded('0x3')]=function(){return new BPromise(function(_0x5cbead,_0x3f6696){var _0xf5f99f={};_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x5')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require('../api/voiceExtension/voiceExtension.rpc'));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require('../api/voiceQueue/voiceQueue.rpc'));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x6')));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x7')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x8')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x9')));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0xa')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0xb')));_0xf5f99f=_['merge'](_0xf5f99f,require('../api/trunk/trunk.rpc'));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require('../api/voiceTransferReport/voiceTransferReport.rpc'));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require('../api/userVoiceQueueRt/userVoiceQueueRt.rpc'));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0xc')));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0xd')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require('../api/mailQueue/mailQueue.rpc'));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0xe')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0xf')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x10')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require('../api/mailQueueReport/mailQueueReport.rpc'));_0xf5f99f=_['merge'](_0xf5f99f,require('../api/faxAccount/faxAccount.rpc'));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x11')));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x12')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x13')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x14')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x15')));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x16')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x17')));_0xf5f99f=_['merge'](_0xf5f99f,require('../api/smsMessage/smsMessage.rpc'));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x18')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x19')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x1a')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x1b')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x1c')));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x1d')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x1e')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x1f')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x20')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x21')));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x22')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x23')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x24')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x25')));_0xf5f99f=_['merge'](_0xf5f99f,require('../api/reportAgentPreview/reportAgentPreview.rpc'));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x26')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x27')));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x28')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x29')));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x2a')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x2b')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require('../api/intSalesforceAccount/intSalesforceAccount.rpc'));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x2c')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x2d')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x2e')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x2f')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require('../api/intFreshdeskAccount/intFreshdeskAccount.rpc'));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x30')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x31')));_0xf5f99f=_['merge'](_0xf5f99f,require('../api/smsQueueReport/smsQueueReport.rpc'));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x32')));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x33')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require('../api/squareOdbc/squareOdbc.rpc'));_0xf5f99f=_['merge'](_0xf5f99f,require(_0x0ded('0x34')));_0xf5f99f=_['merge'](_0xf5f99f,require('../api/squareRecording/squareRecording.rpc'));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x35')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require(_0x0ded('0x36')));_0xf5f99f=_[_0x0ded('0x4')](_0xf5f99f,require('../api/plugin/plugin.rpc'));var _0x3c3e6d=jayson['server'](_0xf5f99f)[_0x0ded('0x37')]();var _0x36ce39=config['rpc'][_0x0ded('0x38')]||config['port']+0x1;var _0x52b175=config['rpc']['ip']||_0x0ded('0x39');_0x3c3e6d['on'](_0x0ded('0x3a'),function(_0x28cb68){return _0x3f6696(_0x28cb68);});_0x3c3e6d[_0x0ded('0x3')](_0x36ce39,_0x52b175,function(){console[_0x0ded('0x3b')](_0x0ded('0x3c'),_0x52b175,_0x36ce39);require(_0x0ded('0x3d'))[_0x0ded('0x3e')]();return _0x5cbead(_0x0ded('0x3f')+_0x52b175+':'+_0x36ce39);});});};
\ No newline at end of file
index bc02c0d..466348d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x52bf=['VERBOSE\x20\x22%s\x22','exec','isArray','EXEC\x20%s\x20%s','setContext','SET\x20CONTEXT\x20%s','setExtension','SET\x20EXTENSION\x20%s','SET\x20PRIORITY\x20%s','setVariable','toString','replace','sayNumber','SAY\x20NUMBER\x20%s\x20%s','SAY\x20DIGITS\x20%s\x20%s','SAY\x20PHONETIC\x20\x22%s\x22\x20%s','continueAt','extension','setPriority','getVariable','recordFile','wav','streamFile','STREAM\x20FILE\x20\x22%s\x22\x20\x22%s\x22','agi','AGI','wait','WAIT','ID:%s\x20-\x20LABEL:\x20%s\x20-\x20MSG:\x20%s','label','exports','util','lodash','events','EventEmitter','./reply','./error','utf8','setTimeout','setEncoding','headers','emit','ready','line','toLowerCase','hangup','substring','search','520\x20End\x20of\x20proper','function','no\x20code','result=','indexOf','startsWith','split','length','error','E_AGI_SOCKET_ERROR','code','close','E_AGI_SOCKET_CLOSE','timeout','E_AGI_SOCKET_TIMEOUT','pipe','inherits','prototype','sendRequest','command','sync','answer','ANSWER','getData','beep','format','GET\x20DATA\x20\x22%s\x22\x20%s\x20%s','noop','NO\x20MESSAGE'];(function(_0x3456fe,_0x4e21b6){var _0x46fdcb=function(_0x2a67ea){while(--_0x2a67ea){_0x3456fe['push'](_0x3456fe['shift']());}};_0x46fdcb(++_0x4e21b6);}(_0x52bf,0x106));var _0xf52b=function(_0x46ec16,_0x53cda9){_0x46ec16=_0x46ec16-0x0;var _0x6cdb7d=_0x52bf[_0x46ec16];return _0x6cdb7d;};'use strict';var util=require(_0xf52b('0x0'));var _=require(_0xf52b('0x1'));var EventEmitter=require(_0xf52b('0x2'))[_0xf52b('0x3')];var AGIReply=require(_0xf52b('0x4'));var AGIError=require(_0xf52b('0x5'));function AGIChannel(_0x4166e4){var _0x4efb42=this,_0x475b54=new AGIReply(),_0xd581b1=![],_0xd93c06={};EventEmitter['call'](_0x4efb42);_0x4166e4['setEncoding'](_0xf52b('0x6'));_0x4166e4[_0xf52b('0x7')](0x8*0x3c*0x3c*0x3e8);_0x475b54[_0xf52b('0x8')]('utf8');_0x475b54['on'](_0xf52b('0x9'),function(_0x49f565){for(var _0x124da1 in _0x49f565){_0x4efb42[_0x124da1]=_0x49f565[_0x124da1];}_0x4efb42[_0xf52b('0xa')](_0xf52b('0xb'));});_0x475b54['on'](_0xf52b('0xc'),function(_0x13d17d){if(_0x13d17d[_0xf52b('0xd')]()==_0xf52b('0xe')){_0x4efb42[_0xf52b('0xa')]('hangup');return;}if(_0x13d17d[_0xf52b('0xf')](0x0,0xb)=='520-Invalid'){_0xd581b1=!![];}if(_0xd581b1){_0xd93c06['rx']+=_0x13d17d+'\x0a';if(_0x13d17d[_0xf52b('0x10')](_0xf52b('0x11'))!=-0x1){_0xd581b1=![];}}else{_0xd93c06['rx']=_0x13d17d;}if(_0xd581b1){return;}if(typeof _0xd93c06['cb']==_0xf52b('0x12')){var _0x38ea25=_0xd93c06['rx'][_0xf52b('0xf')](0x0,0x3),_0x4bc371=null,_0x4a97ec=null;_0x38ea25=parseInt(_0x38ea25);if(isNaN(_0x38ea25)){_0xd93c06['cb'](null,{'code':0x1f4,'result':-0x1,'extra':_0xf52b('0x13')});return;}if(_0x38ea25!=0xc8){_0xd93c06['cb'](null,{'code':_0x38ea25,'result':-0x1,'extra':'KO'});return;}_0x4bc371=_0xd93c06['rx'][_0xf52b('0xf')](0x4)['replace'](_0xf52b('0x14'),'');if(_0x4bc371[_0xf52b('0x15')]('\x20')!=-0x1){_0x4bc371=_0x4bc371['substr'](0x0,_0x4bc371[_0xf52b('0x15')]('\x20'));}if(_[_0xf52b('0x16')](_0x4bc371,'-1')){_0x4bc371=parseInt(_0x4bc371);}_0x4a97ec=_0xd93c06['rx'][_0xf52b('0x17')]('\x20');if(_0x4a97ec[_0xf52b('0x18')]==0x3){_0x4a97ec=_0x4a97ec[0x2]['substring'](0x1,_0x4a97ec[0x2][_0xf52b('0x18')]-0x1);}else if(_0x4a97ec[_0xf52b('0x18')]>0x3){var _0x549296=/\((.+)\)/;var _0x12af5c=_0xd93c06['rx']['match'](_0x549296);if(_0x12af5c){_0x4a97ec=_0x12af5c[0x1];}else{_0x4a97ec=null;}}else{_0x4a97ec=null;}_0xd93c06['cb'](null,{'code':_0x38ea25,'result':_0x4bc371,'extra':_0x4a97ec});}});_0x4166e4['on'](_0xf52b('0x19'),function(_0x26e125){_0x4efb42['emit'](_0xf52b('0x19'),new AGIError(_0xf52b('0x1a'),_0x26e125[_0xf52b('0x1b')]));});_0x4166e4['on'](_0xf52b('0x1c'),function(){_0x4efb42[_0xf52b('0xa')](_0xf52b('0x1c'),new AGIError(_0xf52b('0x1d')));});_0x4166e4['on'](_0xf52b('0x1e'),function(){_0x4efb42['emit'](_0xf52b('0x1e'),new AGIError(_0xf52b('0x1f')));_0x4166e4['destroy']();});_0x4166e4[_0xf52b('0x20')](_0x475b54);this['command']=function(_0x26835d,_0x190a10){var _0x26835d=_0x26835d||'',_0x190a10=typeof _0x190a10==_0xf52b('0x12')?_0x190a10:new Function();_0xd93c06={'tx':_0x26835d,'rx':'','cb':_0x190a10};_0x4166e4['write'](_0x26835d+'\x0a');},this['close']=function(){_0x4166e4['destroy']();};}util[_0xf52b('0x21')](AGIChannel,EventEmitter);AGIChannel[_0xf52b('0x22')][_0xf52b('0x23')]=function(_0x5488ae){return this[_0xf52b('0x24')][_0xf52b('0x25')](this,_0x5488ae);};AGIChannel['prototype'][_0xf52b('0x26')]=function(){return this[_0xf52b('0x23')](_0xf52b('0x27'));};AGIChannel[_0xf52b('0x22')][_0xf52b('0x28')]=function(_0x154908,_0x5dd0a3,_0x3034a5){_0x154908=_0x154908===undefined?_0xf52b('0x29'):_0x154908;_0x5dd0a3=_0x5dd0a3===undefined?'5':_0x5dd0a3;_0x3034a5=_0x3034a5===undefined?'1':_0x3034a5;return this[_0xf52b('0x23')](util[_0xf52b('0x2a')](_0xf52b('0x2b'),_0x154908,_0x5dd0a3*0x3e8,_0x3034a5));};AGIChannel['prototype'][_0xf52b('0x2c')]=function(_0x4c065a){_0x4c065a=_0x4c065a||_0xf52b('0x2d');return this[_0xf52b('0x23')](util['format'](_0xf52b('0x2e'),_0x4c065a));};AGIChannel[_0xf52b('0x22')][_0xf52b('0x2f')]=function(_0x2fc1d3,_0x568037){if(_[_0xf52b('0x30')](_0x568037)){return this['sendRequest'](util[_0xf52b('0x2a')](_0xf52b('0x31'),_0x2fc1d3,_0x568037['join'](',')));}return this[_0xf52b('0x23')](util[_0xf52b('0x2a')](_0xf52b('0x31'),_0x2fc1d3,_0x568037));};AGIChannel[_0xf52b('0x22')][_0xf52b('0x32')]=function(_0x237b9f){return this[_0xf52b('0x23')](util[_0xf52b('0x2a')](_0xf52b('0x33'),_0x237b9f));};AGIChannel[_0xf52b('0x22')][_0xf52b('0x34')]=function(_0x1fb8ab){return this[_0xf52b('0x23')](util[_0xf52b('0x2a')](_0xf52b('0x35'),_0x1fb8ab));};AGIChannel[_0xf52b('0x22')]['setPriority']=function(_0x30c0c9){return this[_0xf52b('0x23')](util['format'](_0xf52b('0x36'),_0x30c0c9));};AGIChannel[_0xf52b('0x22')][_0xf52b('0xe')]=function(){return this[_0xf52b('0x23')]('HANGUP');};AGIChannel['prototype'][_0xf52b('0x37')]=function(_0x10ad6d,_0x3e3ced){return this[_0xf52b('0x23')](util[_0xf52b('0x2a')]('SET\x20VARIABLE\x20%s\x20\x22%s\x22',_0x10ad6d,_0x3e3ced?_0x3e3ced[_0xf52b('0x38')]()[_0xf52b('0x39')](/(\r\n|\n|\r)/gm,'\x20'):''));};AGIChannel[_0xf52b('0x22')][_0xf52b('0x3a')]=function(_0x116566,_0x383d15){return this[_0xf52b('0x23')](util[_0xf52b('0x2a')](_0xf52b('0x3b'),_0x116566,_0x383d15));};AGIChannel['prototype']['sayDigits']=function(_0x183a00,_0x2a7446){return this[_0xf52b('0x23')](util['format'](_0xf52b('0x3c'),_0x183a00,_0x2a7446));};AGIChannel['prototype']['sayPhonetic']=function(_0x1f2e94,_0x5501fe){return this[_0xf52b('0x23')](util[_0xf52b('0x2a')](_0xf52b('0x3d'),_0x1f2e94,_0x5501fe));};AGIChannel[_0xf52b('0x22')][_0xf52b('0x3e')]=function(_0x59a47e,_0x272ef6,_0xadb21a){_0x272ef6=_0x272ef6||this[_0xf52b('0x3f')];_0xadb21a=_0xadb21a||0x1;this[_0xf52b('0x32')](_0x59a47e);this[_0xf52b('0x34')](_0x272ef6);this[_0xf52b('0x40')](_0xadb21a);return this[_0xf52b('0x2c')](util[_0xf52b('0x2a')]('GOTO\x20%s\x20%s\x20%s',_0x59a47e,_0x272ef6,_0xadb21a));};AGIChannel[_0xf52b('0x22')][_0xf52b('0x41')]=function(_0x18b06a){return this[_0xf52b('0x23')](util[_0xf52b('0x2a')]('GET\x20VARIABLE\x20\x22%s\x22',_0x18b06a));};AGIChannel[_0xf52b('0x22')][_0xf52b('0x42')]=function(_0x3a9602,_0x4f8b2d,_0x4ff890,_0x11a0d1,_0x538148,_0x5547b5){_0x4f8b2d=_0x4f8b2d||_0xf52b('0x43');_0x4ff890=_0x4ff890||'';_0x11a0d1=_0x11a0d1===undefined?-0x1:_0x11a0d1==='-1'?-0x1:_0x11a0d1*0x3e8;_0x538148=_0x538148===undefined?'':'s='+_0x538148;_0x5547b5=_0x5547b5?'BEEP':'';return this[_0xf52b('0x23')](util[_0xf52b('0x2a')]('RECORD\x20FILE\x20\x22%s\x22\x20\x22%s\x22\x20\x22%s\x22\x20%s\x20%s\x20%s',_0x3a9602,_0x4f8b2d,_0x4ff890,_0x11a0d1,_0x5547b5,_0x538148));};AGIChannel[_0xf52b('0x22')][_0xf52b('0x44')]=function(_0x527f1d,_0x6cea69){_0x6cea69=_0x6cea69||'';return this[_0xf52b('0x23')](util[_0xf52b('0x2a')](_0xf52b('0x45'),_0x527f1d,_0x6cea69));};AGIChannel[_0xf52b('0x22')][_0xf52b('0x46')]=function(_0x338829){return this[_0xf52b('0x2f')](_0xf52b('0x47'),_0x338829);};AGIChannel[_0xf52b('0x22')][_0xf52b('0x48')]=function(_0x5e2e4d){return this[_0xf52b('0x2f')](_0xf52b('0x49'),_0x5e2e4d);};AGIChannel[_0xf52b('0x22')][_0xf52b('0x19')]=function(_0x507f4d,_0x16709a){this[_0xf52b('0x2c')](util[_0xf52b('0x2a')](_0xf52b('0x4a'),_0x507f4d['id'],_0x507f4d[_0xf52b('0x4b')],_0x16709a));return{'code':0x1f4,'result':'-1','extra':''};};module[_0xf52b('0x4c')]=AGIChannel;
\ No newline at end of file
+var _0xa9e2=['label','util','EventEmitter','./reply','setEncoding','setTimeout','headers','hangup','substring','520-Invalid','search','no\x20code','replace','indexOf','split','length','match','emit','error','E_AGI_SOCKET_ERROR','code','close','timeout','E_AGI_SOCKET_TIMEOUT','destroy','pipe','command','function','write','inherits','prototype','sendRequest','sync','answer','ANSWER','beep','format','GET\x20DATA\x20\x22%s\x22\x20%s\x20%s','noop','exec','isArray','EXEC\x20%s\x20%s','setContext','setExtension','SET\x20EXTENSION\x20%s','SET\x20PRIORITY\x20%s','HANGUP','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','setPriority','GOTO\x20%s\x20%s\x20%s','wav','BEEP','RECORD\x20FILE\x20\x22%s\x22\x20\x22%s\x22\x20\x22%s\x22\x20%s\x20%s\x20%s','streamFile','AGI','wait','WAIT'];(function(_0xf50820,_0x56f041){var _0x2a9b10=function(_0x33f0f4){while(--_0x33f0f4){_0xf50820['push'](_0xf50820['shift']());}};_0x2a9b10(++_0x56f041);}(_0xa9e2,0xc1));var _0x2a9e=function(_0x11be54,_0x466c77){_0x11be54=_0x11be54-0x0;var _0x541ef3=_0xa9e2[_0x11be54];return _0x541ef3;};'use strict';var util=require(_0x2a9e('0x0'));var _=require('lodash');var EventEmitter=require('events')[_0x2a9e('0x1')];var AGIReply=require(_0x2a9e('0x2'));var AGIError=require('./error');function AGIChannel(_0x1c71ff){var _0x41ef6a=this,_0xdaf0=new AGIReply(),_0x43a587=![],_0x34c0b8={};EventEmitter['call'](_0x41ef6a);_0x1c71ff[_0x2a9e('0x3')]('utf8');_0x1c71ff[_0x2a9e('0x4')](0x8*0x3c*0x3c*0x3e8);_0xdaf0[_0x2a9e('0x3')]('utf8');_0xdaf0['on'](_0x2a9e('0x5'),function(_0x2d4639){for(var _0x38049f in _0x2d4639){_0x41ef6a[_0x38049f]=_0x2d4639[_0x38049f];}_0x41ef6a['emit']('ready');});_0xdaf0['on']('line',function(_0x1cd55a){if(_0x1cd55a['toLowerCase']()==_0x2a9e('0x6')){_0x41ef6a['emit']('hangup');return;}if(_0x1cd55a[_0x2a9e('0x7')](0x0,0xb)==_0x2a9e('0x8')){_0x43a587=!![];}if(_0x43a587){_0x34c0b8['rx']+=_0x1cd55a+'\x0a';if(_0x1cd55a[_0x2a9e('0x9')]('520\x20End\x20of\x20proper')!=-0x1){_0x43a587=![];}}else{_0x34c0b8['rx']=_0x1cd55a;}if(_0x43a587){return;}if(typeof _0x34c0b8['cb']=='function'){var _0x5ebbe4=_0x34c0b8['rx'][_0x2a9e('0x7')](0x0,0x3),_0x523dba=null,_0x25386a=null;_0x5ebbe4=parseInt(_0x5ebbe4);if(isNaN(_0x5ebbe4)){_0x34c0b8['cb'](null,{'code':0x1f4,'result':-0x1,'extra':_0x2a9e('0xa')});return;}if(_0x5ebbe4!=0xc8){_0x34c0b8['cb'](null,{'code':_0x5ebbe4,'result':-0x1,'extra':'KO'});return;}_0x523dba=_0x34c0b8['rx'][_0x2a9e('0x7')](0x4)[_0x2a9e('0xb')]('result=','');if(_0x523dba[_0x2a9e('0xc')]('\x20')!=-0x1){_0x523dba=_0x523dba['substr'](0x0,_0x523dba[_0x2a9e('0xc')]('\x20'));}if(_['startsWith'](_0x523dba,'-1')){_0x523dba=parseInt(_0x523dba);}_0x25386a=_0x34c0b8['rx'][_0x2a9e('0xd')]('\x20');if(_0x25386a[_0x2a9e('0xe')]==0x3){_0x25386a=_0x25386a[0x2][_0x2a9e('0x7')](0x1,_0x25386a[0x2][_0x2a9e('0xe')]-0x1);}else if(_0x25386a[_0x2a9e('0xe')]>0x3){var _0xeba52=/\((.+)\)/;var _0x4f490b=_0x34c0b8['rx'][_0x2a9e('0xf')](_0xeba52);if(_0x4f490b){_0x25386a=_0x4f490b[0x1];}else{_0x25386a=null;}}else{_0x25386a=null;}_0x34c0b8['cb'](null,{'code':_0x5ebbe4,'result':_0x523dba,'extra':_0x25386a});}});_0x1c71ff['on']('error',function(_0x5f0f85){_0x41ef6a[_0x2a9e('0x10')](_0x2a9e('0x11'),new AGIError(_0x2a9e('0x12'),_0x5f0f85[_0x2a9e('0x13')]));});_0x1c71ff['on'](_0x2a9e('0x14'),function(){_0x41ef6a['emit'](_0x2a9e('0x14'),new AGIError('E_AGI_SOCKET_CLOSE'));});_0x1c71ff['on'](_0x2a9e('0x15'),function(){_0x41ef6a[_0x2a9e('0x10')](_0x2a9e('0x15'),new AGIError(_0x2a9e('0x16')));_0x1c71ff[_0x2a9e('0x17')]();});_0x1c71ff[_0x2a9e('0x18')](_0xdaf0);this[_0x2a9e('0x19')]=function(_0x3908ca,_0x2727d7){var _0x3908ca=_0x3908ca||'',_0x2727d7=typeof _0x2727d7==_0x2a9e('0x1a')?_0x2727d7:new Function();_0x34c0b8={'tx':_0x3908ca,'rx':'','cb':_0x2727d7};_0x1c71ff[_0x2a9e('0x1b')](_0x3908ca+'\x0a');},this[_0x2a9e('0x14')]=function(){_0x1c71ff[_0x2a9e('0x17')]();};}util[_0x2a9e('0x1c')](AGIChannel,EventEmitter);AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x1e')]=function(_0xb603df){return this[_0x2a9e('0x19')][_0x2a9e('0x1f')](this,_0xb603df);};AGIChannel['prototype'][_0x2a9e('0x20')]=function(){return this[_0x2a9e('0x1e')](_0x2a9e('0x21'));};AGIChannel[_0x2a9e('0x1d')]['getData']=function(_0x45330b,_0x3d604d,_0x4f52a9){_0x45330b=_0x45330b===undefined?_0x2a9e('0x22'):_0x45330b;_0x3d604d=_0x3d604d===undefined?'5':_0x3d604d;_0x4f52a9=_0x4f52a9===undefined?'1':_0x4f52a9;return this[_0x2a9e('0x1e')](util[_0x2a9e('0x23')](_0x2a9e('0x24'),_0x45330b,_0x3d604d*0x3e8,_0x4f52a9));};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x25')]=function(_0x2f22c5){_0x2f22c5=_0x2f22c5||'NO\x20MESSAGE';return this['sendRequest'](util[_0x2a9e('0x23')]('VERBOSE\x20\x22%s\x22',_0x2f22c5));};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x26')]=function(_0x505986,_0x421290){if(_[_0x2a9e('0x27')](_0x421290)){return this[_0x2a9e('0x1e')](util[_0x2a9e('0x23')](_0x2a9e('0x28'),_0x505986,_0x421290['join'](',')));}return this['sendRequest'](util[_0x2a9e('0x23')](_0x2a9e('0x28'),_0x505986,_0x421290));};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x29')]=function(_0x5db881){return this['sendRequest'](util[_0x2a9e('0x23')]('SET\x20CONTEXT\x20%s',_0x5db881));};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x2a')]=function(_0x30a9ba){return this[_0x2a9e('0x1e')](util[_0x2a9e('0x23')](_0x2a9e('0x2b'),_0x30a9ba));};AGIChannel[_0x2a9e('0x1d')]['setPriority']=function(_0x2c0e9b){return this[_0x2a9e('0x1e')](util[_0x2a9e('0x23')](_0x2a9e('0x2c'),_0x2c0e9b));};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x6')]=function(){return this[_0x2a9e('0x1e')](_0x2a9e('0x2d'));};AGIChannel[_0x2a9e('0x1d')]['setVariable']=function(_0x35b0ca,_0x5b07d0){return this['sendRequest'](util[_0x2a9e('0x23')](_0x2a9e('0x2e'),_0x35b0ca,_0x5b07d0?_0x5b07d0[_0x2a9e('0x2f')]()[_0x2a9e('0xb')](/(\r\n|\n|\r)/gm,'\x20'):''));};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x30')]=function(_0x3b0224,_0x3aba14){return this[_0x2a9e('0x1e')](util[_0x2a9e('0x23')](_0x2a9e('0x31'),_0x3b0224,_0x3aba14));};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x32')]=function(_0xd0e782,_0x5f4461){return this[_0x2a9e('0x1e')](util['format'](_0x2a9e('0x33'),_0xd0e782,_0x5f4461));};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x34')]=function(_0x52fa34,_0x13be1f){return this[_0x2a9e('0x1e')](util[_0x2a9e('0x23')](_0x2a9e('0x35'),_0x52fa34,_0x13be1f));};AGIChannel[_0x2a9e('0x1d')]['continueAt']=function(_0x578d5a,_0x2a3cd2,_0x4f9235){_0x2a3cd2=_0x2a3cd2||this['extension'];_0x4f9235=_0x4f9235||0x1;this[_0x2a9e('0x29')](_0x578d5a);this['setExtension'](_0x2a3cd2);this[_0x2a9e('0x36')](_0x4f9235);return this['noop'](util[_0x2a9e('0x23')](_0x2a9e('0x37'),_0x578d5a,_0x2a3cd2,_0x4f9235));};AGIChannel[_0x2a9e('0x1d')]['getVariable']=function(_0x4999bc){return this['sendRequest'](util['format']('GET\x20VARIABLE\x20\x22%s\x22',_0x4999bc));};AGIChannel[_0x2a9e('0x1d')]['recordFile']=function(_0x42db7d,_0x78dc69,_0x8c7376,_0x56d109,_0x5bf079,_0x24d5c2){_0x78dc69=_0x78dc69||_0x2a9e('0x38');_0x8c7376=_0x8c7376||'';_0x56d109=_0x56d109===undefined?-0x1:_0x56d109==='-1'?-0x1:_0x56d109*0x3e8;_0x5bf079=_0x5bf079===undefined?'':'s='+_0x5bf079;_0x24d5c2=_0x24d5c2?_0x2a9e('0x39'):'';return this[_0x2a9e('0x1e')](util[_0x2a9e('0x23')](_0x2a9e('0x3a'),_0x42db7d,_0x78dc69,_0x8c7376,_0x56d109,_0x24d5c2,_0x5bf079));};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x3b')]=function(_0x41407e,_0x3ba41d){_0x3ba41d=_0x3ba41d||'';return this[_0x2a9e('0x1e')](util[_0x2a9e('0x23')]('STREAM\x20FILE\x20\x22%s\x22\x20\x22%s\x22',_0x41407e,_0x3ba41d));};AGIChannel[_0x2a9e('0x1d')]['agi']=function(_0x225397){return this[_0x2a9e('0x26')](_0x2a9e('0x3c'),_0x225397);};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x3d')]=function(_0x18f5c9){return this[_0x2a9e('0x26')](_0x2a9e('0x3e'),_0x18f5c9);};AGIChannel[_0x2a9e('0x1d')][_0x2a9e('0x11')]=function(_0x211c1d,_0x2d7f04){this[_0x2a9e('0x25')](util[_0x2a9e('0x23')]('ID:%s\x20-\x20LABEL:\x20%s\x20-\x20MSG:\x20%s',_0x211c1d['id'],_0x211c1d[_0x2a9e('0x3f')],_0x2d7f04));return{'code':0x1f4,'result':'-1','extra':''};};module['exports']=AGIChannel;
\ No newline at end of file
index d54bffd..df04da0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb6ae=['apply','name','Argument\x20\x27port\x27\x20missing\x20in\x20function\x20call.','Server\x20error.\x20Code:\x20%s.','Server\x20closed.','[LICENSE\x20VOICE]\x20Server\x20license\x20voice\x20disabled.','Socket\x20error.\x20Code:\x20%s.','Socket\x20timeout.','Empty\x20command.','Missing\x20\x27ivr.agi_network_script\x27.','Missing\x20\x27ivr.entry\x27\x20menu.','E_AGI_UNDEFINED','push','format'];(function(_0x462266,_0xbdc282){var _0x5e32f2=function(_0x5f5176){while(--_0x5f5176){_0x462266['push'](_0x462266['shift']());}};_0x5e32f2(++_0xbdc282);}(_0xb6ae,0x80));var _0xeb6a=function(_0x2f45ea,_0x15c656){_0x2f45ea=_0x2f45ea-0x0;var _0x485a84=_0xb6ae[_0x2f45ea];return _0x485a84;};'use strict';var util=require('util');var error={'E_AGI_UNDEFINED':'Undefined\x20error.','E_AGI_ARGUMENT_PORT':_0xeb6a('0x0'),'E_AGI_SERVER_ERROR':_0xeb6a('0x1'),'E_AGI_SERVER_CLOSE':_0xeb6a('0x2'),'E_AGI_SERVER_MAXCONNECTION':'[LICENSE]\x20Server\x20max\x20connection.\x20Count:\x20%s.','E_AGI_SERVER_VOICE_DISABLED':_0xeb6a('0x3'),'E_AGI_SOCKET_ERROR':_0xeb6a('0x4'),'E_AGI_SOCKET_CLOSE':'Socket\x20closed.','E_AGI_SOCKET_TIMEOUT':_0xeb6a('0x5'),'E_AGI_COMMAND_EMPTY':_0xeb6a('0x6'),'E_AGI_IVR_AGI_NETWORK_SCRIPT':_0xeb6a('0x7'),'E_AGI_IVR_ENTRY':_0xeb6a('0x8')};function AGIError(_0x528a79){var _0x528a79=_0x528a79||null,_0x3a76b=_0x3a76b||[],_0xfb1c2=0x1,_0x2e3f14='';if(!error[_0x528a79]){_0x528a79=_0xeb6a('0x9');}_0x3a76b['push'](error[_0x528a79]);while(arguments[_0xfb1c2]){_0x3a76b[_0xeb6a('0xa')](arguments[_0xfb1c2]);_0xfb1c2++;}_0x2e3f14=util[_0xeb6a('0xb')][_0xeb6a('0xc')](util,_0x3a76b);this['message']=_0x2e3f14;this[_0xeb6a('0xd')]=_0x528a79;}module['exports']=AGIError;
\ No newline at end of file
+var _0x8e4b=['E_AGI_UNDEFINED','push','format','apply','message','name','exports','util','Undefined\x20error.','Argument\x20\x27port\x27\x20missing\x20in\x20function\x20call.','Server\x20closed.','[LICENSE]\x20Server\x20max\x20connection.\x20Count:\x20%s.','[LICENSE\x20VOICE]\x20Server\x20license\x20voice\x20disabled.','Socket\x20closed.','Socket\x20timeout.','Empty\x20command.','Missing\x20\x27ivr.agi_network_script\x27.'];(function(_0x5cf6ba,_0x109c14){var _0x231955=function(_0x2eb480){while(--_0x2eb480){_0x5cf6ba['push'](_0x5cf6ba['shift']());}};_0x231955(++_0x109c14);}(_0x8e4b,0x117));var _0xb8e4=function(_0x21cb7f,_0x48cd16){_0x21cb7f=_0x21cb7f-0x0;var _0x5a079a=_0x8e4b[_0x21cb7f];return _0x5a079a;};'use strict';var util=require(_0xb8e4('0x0'));var error={'E_AGI_UNDEFINED':_0xb8e4('0x1'),'E_AGI_ARGUMENT_PORT':_0xb8e4('0x2'),'E_AGI_SERVER_ERROR':'Server\x20error.\x20Code:\x20%s.','E_AGI_SERVER_CLOSE':_0xb8e4('0x3'),'E_AGI_SERVER_MAXCONNECTION':_0xb8e4('0x4'),'E_AGI_SERVER_VOICE_DISABLED':_0xb8e4('0x5'),'E_AGI_SOCKET_ERROR':'Socket\x20error.\x20Code:\x20%s.','E_AGI_SOCKET_CLOSE':_0xb8e4('0x6'),'E_AGI_SOCKET_TIMEOUT':_0xb8e4('0x7'),'E_AGI_COMMAND_EMPTY':_0xb8e4('0x8'),'E_AGI_IVR_AGI_NETWORK_SCRIPT':_0xb8e4('0x9'),'E_AGI_IVR_ENTRY':'Missing\x20\x27ivr.entry\x27\x20menu.'};function AGIError(_0x401a9b){var _0x401a9b=_0x401a9b||null,_0x20aa0c=_0x20aa0c||[],_0x43d281=0x1,_0x347d5d='';if(!error[_0x401a9b]){_0x401a9b=_0xb8e4('0xa');}_0x20aa0c[_0xb8e4('0xb')](error[_0x401a9b]);while(arguments[_0x43d281]){_0x20aa0c[_0xb8e4('0xb')](arguments[_0x43d281]);_0x43d281++;}_0x347d5d=util[_0xb8e4('0xc')][_0xb8e4('0xd')](util,_0x20aa0c);this[_0xb8e4('0xe')]=_0x347d5d;this[_0xb8e4('0xf')]=_0x401a9b;}module[_0xb8e4('0x10')]=AGIError;
\ No newline at end of file
index 930e34f..85e2c0c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcecc=['target','default','agicommand','invalid','max\x20retry\x20reach','condition\x20not\x20found','lodash','agi','getsecretdigits','vertices','edges','numberOfEdges','prototype','addEdge','push','size','relations','getVertex','traverseBFS','info','length','no\x20edge/s\x20available','condition','vswitch'];(function(_0x1aeef9,_0x34f451){var _0x38ae5a=function(_0x128e9f){while(--_0x128e9f){_0x1aeef9['push'](_0x1aeef9['shift']());}};_0x38ae5a(++_0x34f451);}(_0xcecc,0x186));var _0xccec=function(_0x4553f3,_0x3230ca){_0x4553f3=_0x4553f3-0x0;var _0x340a64=_0xcecc[_0x4553f3];return _0x340a64;};'use strict';var _=require(_0xccec('0x0'));var logger=require('../../../config/logger')(_0xccec('0x1'));var verticesWithRetry=['menu','getdigits',_0xccec('0x2')];var Graph=function(){this[_0xccec('0x3')]={};this[_0xccec('0x4')]={};this[_0xccec('0x5')]=0x0;};Graph['prototype']['addVertex']=function(_0x160675){this['vertices'][_0x160675['id']]=_0x160675;this[_0xccec('0x4')][_0x160675['id']]=[];};Graph[_0xccec('0x6')][_0xccec('0x7')]=function(_0x5788aa,_0x372ea6,_0x3d7b1a){this['edges'][_0x5788aa][_0xccec('0x8')]({'target':_0x372ea6,'condition':_0x3d7b1a});this[_0xccec('0x5')]+=0x1;};Graph[_0xccec('0x6')][_0xccec('0x9')]=function(){return _['size'](this[_0xccec('0x3')]);};Graph['prototype'][_0xccec('0xa')]=function(){return this[_0xccec('0x5')];};Graph['prototype'][_0xccec('0xb')]=function(_0x1e2b5f){return this[_0xccec('0x3')][_0x1e2b5f];};Graph['prototype'][_0xccec('0xc')]=function(_0x2ac888,_0x27b36f){if(!this[_0xccec('0x3')][_0x2ac888]){return logger[_0xccec('0xd')]('no\x20vertex\x20found');}var _0x2882d9=_0x27b36f(this['vertices'][_0x2ac888]);if(!_0x2882d9){return logger['info']('stop\x20traverse');}if(this[_0xccec('0x4')][_0x2ac888][_0xccec('0xe')]===0x0){return logger[_0xccec('0xd')](_0xccec('0xf'));}for(var _0x1d588f=0x0,_0x3b8786=[],_0x7abe38=![];_0x1d588f<this[_0xccec('0x4')][_0x2ac888][_0xccec('0xe')];_0x1d588f+=0x1){if(this['edges'][_0x2ac888][_0x1d588f]['condition']){_0x3b8786=this['edges'][_0x2ac888][_0x1d588f][_0xccec('0x10')]['split'](',');for(var _0x76b9fd=0x0;_0x76b9fd<_0x3b8786[_0xccec('0xe')];_0x76b9fd+=0x1){if(this[_0xccec('0x3')][_0x2ac888]['agicommand']===_0xccec('0x11')&&_0x3b8786[_0x76b9fd]==='-'){_0x7abe38=this[_0xccec('0x4')][_0x2ac888][_0x1d588f][_0xccec('0x12')];logger['info'](_0xccec('0x13'),_0x3b8786[_0x76b9fd],this[_0xccec('0x4')][_0x2ac888][_0x1d588f][_0xccec('0x12')]);}else if(this['vertices'][_0x2ac888][_0xccec('0x14')]==='menu'&&_0x3b8786[_0x76b9fd]==='i'){_0x7abe38=this[_0xccec('0x4')][_0x2ac888][_0x1d588f]['target'];logger[_0xccec('0xd')](_0xccec('0x15'),_0x3b8786[_0x76b9fd],this[_0xccec('0x4')][_0x2ac888][_0x1d588f][_0xccec('0x12')]);}if(_0x3b8786[_0x76b9fd]===_0x2882d9){return this[_0xccec('0xc')](this[_0xccec('0x4')][_0x2ac888][_0x1d588f][_0xccec('0x12')],_0x27b36f);}}}else{return this[_0xccec('0xc')](this[_0xccec('0x4')][_0x2ac888][_0x1d588f]['target'],_0x27b36f);}}if(_0x3b8786[_0xccec('0xe')]){if(this[_0xccec('0x3')][_0x2ac888][_0xccec('0x14')]===_0xccec('0x11')){if(_0x7abe38){return this['traverseBFS'](_0x7abe38,_0x27b36f);}return logger[_0xccec('0xd')]('default\x20on\x20switch\x20not\x20found');}else if(_['includes'](verticesWithRetry,this['vertices'][_0x2ac888][_0xccec('0x14')])){if(_0x2882d9==='-'){return logger[_0xccec('0xd')](_0xccec('0x16'));}if(_0x7abe38&&_0x2882d9!=='t'){return this[_0xccec('0xc')](_0x7abe38,_0x27b36f);}return this[_0xccec('0xc')](_0x2ac888,_0x27b36f);}return logger[_0xccec('0xd')](_0xccec('0x17'));}};module['exports']=Graph;
\ No newline at end of file
+var _0x5c00=['getVertex','traverseBFS','info','no\x20vertex\x20found','stop\x20traverse','length','no\x20edge/s\x20available','condition','split','agicommand','vswitch','default','menu','target','invalid','default\x20on\x20switch\x20not\x20found','includes','max\x20retry\x20reach','lodash','../../../config/logger','agi','getdigits','vertices','edges','numberOfEdges','prototype','push','size'];(function(_0x1a04c4,_0xb6bfbe){var _0x2ef860=function(_0x3310d0){while(--_0x3310d0){_0x1a04c4['push'](_0x1a04c4['shift']());}};_0x2ef860(++_0xb6bfbe);}(_0x5c00,0x17e));var _0x05c0=function(_0x1501e2,_0x271210){_0x1501e2=_0x1501e2-0x0;var _0xfce8c5=_0x5c00[_0x1501e2];return _0xfce8c5;};'use strict';var _=require(_0x05c0('0x0'));var logger=require(_0x05c0('0x1'))(_0x05c0('0x2'));var verticesWithRetry=['menu',_0x05c0('0x3'),'getsecretdigits'];var Graph=function(){this[_0x05c0('0x4')]={};this[_0x05c0('0x5')]={};this[_0x05c0('0x6')]=0x0;};Graph[_0x05c0('0x7')]['addVertex']=function(_0x145973){this[_0x05c0('0x4')][_0x145973['id']]=_0x145973;this[_0x05c0('0x5')][_0x145973['id']]=[];};Graph[_0x05c0('0x7')]['addEdge']=function(_0x3a3b1b,_0x34eb5f,_0x3ad5b7){this['edges'][_0x3a3b1b][_0x05c0('0x8')]({'target':_0x34eb5f,'condition':_0x3ad5b7});this[_0x05c0('0x6')]+=0x1;};Graph[_0x05c0('0x7')][_0x05c0('0x9')]=function(){return _[_0x05c0('0x9')](this[_0x05c0('0x4')]);};Graph['prototype']['relations']=function(){return this[_0x05c0('0x6')];};Graph['prototype'][_0x05c0('0xa')]=function(_0x11cf03){return this[_0x05c0('0x4')][_0x11cf03];};Graph['prototype'][_0x05c0('0xb')]=function(_0x5eec41,_0x16a290){if(!this[_0x05c0('0x4')][_0x5eec41]){return logger[_0x05c0('0xc')](_0x05c0('0xd'));}var _0x25764b=_0x16a290(this[_0x05c0('0x4')][_0x5eec41]);if(!_0x25764b){return logger[_0x05c0('0xc')](_0x05c0('0xe'));}if(this['edges'][_0x5eec41][_0x05c0('0xf')]===0x0){return logger[_0x05c0('0xc')](_0x05c0('0x10'));}for(var _0x29e6b0=0x0,_0x27c7bd=[],_0x40153e=![];_0x29e6b0<this[_0x05c0('0x5')][_0x5eec41][_0x05c0('0xf')];_0x29e6b0+=0x1){if(this[_0x05c0('0x5')][_0x5eec41][_0x29e6b0]['condition']){_0x27c7bd=this[_0x05c0('0x5')][_0x5eec41][_0x29e6b0][_0x05c0('0x11')][_0x05c0('0x12')](',');for(var _0x54fef0=0x0;_0x54fef0<_0x27c7bd[_0x05c0('0xf')];_0x54fef0+=0x1){if(this[_0x05c0('0x4')][_0x5eec41][_0x05c0('0x13')]===_0x05c0('0x14')&&_0x27c7bd[_0x54fef0]==='-'){_0x40153e=this[_0x05c0('0x5')][_0x5eec41][_0x29e6b0]['target'];logger[_0x05c0('0xc')](_0x05c0('0x15'),_0x27c7bd[_0x54fef0],this['edges'][_0x5eec41][_0x29e6b0]['target']);}else if(this['vertices'][_0x5eec41][_0x05c0('0x13')]===_0x05c0('0x16')&&_0x27c7bd[_0x54fef0]==='i'){_0x40153e=this[_0x05c0('0x5')][_0x5eec41][_0x29e6b0][_0x05c0('0x17')];logger[_0x05c0('0xc')](_0x05c0('0x18'),_0x27c7bd[_0x54fef0],this[_0x05c0('0x5')][_0x5eec41][_0x29e6b0]['target']);}if(_0x27c7bd[_0x54fef0]===_0x25764b){return this[_0x05c0('0xb')](this[_0x05c0('0x5')][_0x5eec41][_0x29e6b0]['target'],_0x16a290);}}}else{return this['traverseBFS'](this['edges'][_0x5eec41][_0x29e6b0]['target'],_0x16a290);}}if(_0x27c7bd['length']){if(this[_0x05c0('0x4')][_0x5eec41][_0x05c0('0x13')]==='vswitch'){if(_0x40153e){return this[_0x05c0('0xb')](_0x40153e,_0x16a290);}return logger[_0x05c0('0xc')](_0x05c0('0x19'));}else if(_[_0x05c0('0x1a')](verticesWithRetry,this['vertices'][_0x5eec41][_0x05c0('0x13')])){if(_0x25764b==='-'){return logger[_0x05c0('0xc')](_0x05c0('0x1b'));}if(_0x40153e&&_0x25764b!=='t'){return this[_0x05c0('0xb')](_0x40153e,_0x16a290);}return this[_0x05c0('0xb')](_0x5eec41,_0x16a290);}return logger[_0x05c0('0xc')]('condition\x20not\x20found');}};module['exports']=Graph;
\ No newline at end of file
index 0dd5b2c..6ff592b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed0f=['stringify','[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','arg_1','calleridname','dnid','uniqueid','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','evtHangup','toJson','mxGraphModel','root','agicommand','retry','maxRetry','addVertex','omit','mxCell','isArray','length','source','target','addEdge','value','catch','createSquareReport','updateSquareReport','then','hasOwnProperty','indexOf','agi_','substring','inspect','debug','variables','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','timeout','hangup','sync','production','start','[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','callerid','traverseBFS','clear','vertex','gotoc\x20block\x20stop\x20traverse\x20BFS','context','extension','priority','response','result','toString','agicommand\x20not\x20found','exception','finally','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','[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','close','Project\x20%s\x20not\x20found','getLicense','voice','callysquare','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]\x20VOICE\x20IS\x20DISABLED','[LICENSE]','./server','connection','lodash','syncho','../../config/environment','../../config/logger','agi','./rpc','./mailRpc','syncho\x20error','log','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','info','[LISTENING]\x20Cally\x20Square\x20listening\x200.0.0.0:4573','name','error','format','message','[ERROR]\x20%s'];(function(_0x4b369d,_0x265eb8){var _0x571a98=function(_0x56341a){while(--_0x56341a){_0x4b369d['push'](_0x4b369d['shift']());}};_0x571a98(++_0x265eb8);}(_0xed0f,0x9d));var _0xfed0=function(_0x4ce45a,_0x55a777){_0x4ce45a=_0x4ce45a-0x0;var _0x3b65d2=_0xed0f[_0x4ce45a];return _0x3b65d2;};'use strict';var parser=require('xml2json');var _=require(_0xfed0('0x0'));var syncho=require(_0xfed0('0x1'));var util=require('util');var config=require(_0xfed0('0x2'));var logger=require(_0xfed0('0x3'))(_0xfed0('0x4'));var utilLicense=require('../../config/license/util');var rpc=require(_0xfed0('0x5'));var mailRpc=require(_0xfed0('0x6'));var Graph=require('./graph');var Vertices=require('./vertices');var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;function connectionHandler(_0x400ece){process['nextTick'](function(){syncho(function(){try{setChannelVariables(_0x400ece);agiHandler(_0x400ece);}catch(_0x286b10){logger['error'](_0xfed0('0x7'),JSON['stringify'](_0x286b10,null,0x2));}});});}function listeningHandler(_0x2c94ad){console[_0xfed0('0x8')](_0xfed0('0x9'),0x11dd);logger[_0xfed0('0xa')](_0xfed0('0xb'));}function errorHandler(_0x109ac6){if(_0x109ac6&&_0x109ac6[_0xfed0('0xc')]&&_0x109ac6['message']){logger[_0xfed0('0xd')](util[_0xfed0('0xe')]('[%s]\x20%s',_0x109ac6[_0xfed0('0xc')],_0x109ac6[_0xfed0('0xf')]));}else{logger['error'](util['format'](_0xfed0('0x10'),JSON[_0xfed0('0x11')](_0x109ac6,null,0x2)));}}function closeHandler(){logger['info'](util['format'](_0xfed0('0x12'),this[_0xfed0('0x13')],this[_0xfed0('0x14')],this['callerid'],this[_0xfed0('0x15')],this[_0xfed0('0x16')]));try{updateSquareReport(this);}catch(_0x451f84){logger[_0xfed0('0xd')](_0x451f84['message']);}}function timeoutHandler(){logger[_0xfed0('0xa')](util['format']('[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0xfed0('0x13')],this['calleridname'],this['callerid'],this['dnid'],this[_0xfed0('0x16')]));}function hangupHandler(){logger[_0xfed0('0xa')](util[_0xfed0('0xe')](_0xfed0('0x17'),this[_0xfed0('0x13')],this[_0xfed0('0x14')],this['callerid'],this['dnid'],this[_0xfed0('0x16')]));this[_0xfed0('0x18')]=!![];}function getRoot(_0x240f73){return parser[_0xfed0('0x19')](_0x240f73,{'object':!![]})[_0xfed0('0x1a')][_0xfed0('0x1b')];}function addVertex(_0x1cf261,_0x2e16a7,_0x17c9ed){_0x2e16a7[_0xfed0('0x1c')]=_0x17c9ed;if(_0x2e16a7['hasOwnProperty'](_0xfed0('0x1d'))){_0x2e16a7[_0xfed0('0x1e')]=parseInt(_0x2e16a7[_0xfed0('0x1d')],0xa);}_0x1cf261[_0xfed0('0x1f')](_[_0xfed0('0x20')](_0x2e16a7,_0xfed0('0x21')));}function initGraph(_0x251c69,_0x55d19d){var _0xf77da5=new Graph();for(var _0x3b26b0 in _0x251c69){if(_0x251c69['hasOwnProperty'](_0x3b26b0)){if(_[_0xfed0('0x22')](_0x251c69[_0x3b26b0])){for(var _0x1afb2b=0x0;_0x1afb2b<_0x251c69[_0x3b26b0][_0xfed0('0x23')];_0x1afb2b+=0x1){addVertex(_0xf77da5,_0x251c69[_0x3b26b0][_0x1afb2b],_0x3b26b0);}}else{addVertex(_0xf77da5,_0x251c69[_0x3b26b0],_0x3b26b0);}}}for(var _0x2c9dc1=0x0;_0x2c9dc1<_0x55d19d[_0xfed0('0x23')];_0x2c9dc1+=0x1){if(_0x55d19d[_0x2c9dc1][_0xfed0('0x24')]&&_0x55d19d[_0x2c9dc1][_0xfed0('0x25')]){_0xf77da5[_0xfed0('0x26')](_0x55d19d[_0x2c9dc1][_0xfed0('0x24')],_0x55d19d[_0x2c9dc1][_0xfed0('0x25')],_0x55d19d[_0x2c9dc1][_0xfed0('0x27')]);}}return _0xf77da5;}function getSquareProject(_0x155b84,_0x3f86f4){rpc['getSquareProject'](_0x155b84)['then'](function(_0x1c44fd){_0x3f86f4(null,_0x1c44fd);})[_0xfed0('0x28')](function(_0x2e2db7){_0x3f86f4(null,_0x2e2db7);});}function createSquareReport(_0x31bdb1,_0x40a2a1){rpc[_0xfed0('0x29')](_0x31bdb1)['then'](function(_0x2145a7){_0x40a2a1(null,_0x2145a7);})[_0xfed0('0x28')](function(_0x20c337){_0x40a2a1(null,_0x20c337);});}function updateSquareReport(_0x2eb001,_0x4260eb){rpc[_0xfed0('0x2a')](_0x2eb001[_0xfed0('0x16')],_0x2eb001[_0xfed0('0x13')])[_0xfed0('0x2b')](function(_0x551486){if(_0x4260eb){_0x4260eb(null,_0x551486);}})[_0xfed0('0x28')](function(_0x2b78d3){if(_0x4260eb){_0x4260eb(null,_0x2b78d3);}});}function setChannelVariables(_0x184f6f){for(var _0x3c504f in _0x184f6f){if(_0x184f6f[_0xfed0('0x2c')](_0x3c504f)){if(_0x3c504f[_0xfed0('0x2d')](_0xfed0('0x2e'))===0x0){_0x184f6f[_0x3c504f[_0xfed0('0x2f')](0x4)]=_0x184f6f[_0x3c504f];delete _0x184f6f[_0x3c504f];}}}}function getLogFromObject(_0x4fdced){return util[_0xfed0('0x30')](_0x4fdced,{'showHidden':![],'depth':null});}function agiHandler(_0x33574c){var _0x456890,_0x1e20bb,_0x2226e4,_0x2cdd85,_0x8b478e;logger[_0xfed0('0x31')](_0xfed0('0x32'),JSON[_0xfed0('0x11')](_0x33574c,null,0x2));logger[_0xfed0('0xa')](util[_0xfed0('0xe')](_0xfed0('0x33'),_0x33574c[_0xfed0('0x13')],_0x33574c[_0xfed0('0x14')],_0x33574c['callerid'],_0x33574c['dnid'],_0x33574c[_0xfed0('0x16')]));_0x33574c['on']('error',errorHandler);_0x33574c['on']('close',closeHandler);_0x33574c['on'](_0xfed0('0x34'),timeoutHandler);_0x33574c[_0xfed0('0x18')]=![];_0x33574c['on'](_0xfed0('0x35'),hangupHandler);var _0x4903c5=getSquareProject[_0xfed0('0x36')](null,_0x33574c[_0xfed0('0x13')]);if(_0x4903c5){if(_0x4903c5['production']){_0x456890=getRoot(_0x4903c5[_0xfed0('0x37')]);if(_0x456890&&_0x456890[_0xfed0('0x38')]){logger[_0xfed0('0x31')](_0xfed0('0x1b'),JSON[_0xfed0('0x11')](_0x456890,null,0x2));createSquareReport[_0xfed0('0x36')](null,_0x33574c);_0x1e20bb=initGraph(_[_0xfed0('0x20')](_0x456890,_0xfed0('0x21')),_0x456890[_0xfed0('0x21')]);_0x2226e4=new Vertices(_0x33574c,rpc,mailRpc);logger[_0xfed0('0xa')](util['format'](_0xfed0('0x39'),_0x33574c[_0xfed0('0x13')],_0x33574c[_0xfed0('0x14')],_0x33574c[_0xfed0('0x3a')],_0x33574c[_0xfed0('0x15')],_0x33574c[_0xfed0('0x16')]));_0x1e20bb[_0xfed0('0x3b')](_0x456890[_0xfed0('0x38')]['id'],function(_0x482936){try{_0x482936=_0x2226e4[_0xfed0('0x3c')](_0x482936);logger[_0xfed0('0x31')](_0xfed0('0x3d'),JSON[_0xfed0('0x11')](_0x482936,null,0x2));if(_0x482936[_0xfed0('0x1c')]==='gotoc'){logger[_0xfed0('0xa')](_0xfed0('0x3e'));_0x33574c['context']=_0x482936['context']||_0x33574c[_0xfed0('0x3f')];_0x33574c[_0xfed0('0x40')]=_0x482936[_0xfed0('0x40')];_0x33574c[_0xfed0('0x41')]=_0x482936['priority']?_0x482936['priority']-0x1:0x1;return null;}else if(_0x482936&&_0x2226e4[_0x482936[_0xfed0('0x1c')]]){_0x8b478e=_0x2226e4[_0x482936[_0xfed0('0x1c')]](_0x482936);logger[_0xfed0('0xa')](_0xfed0('0x42'),JSON[_0xfed0('0x11')](_0x8b478e,null,0x2));if(_0x8b478e&&_0x8b478e['code']===AGI_CODE_SUCCESS&&_0x8b478e[_0xfed0('0x43')]!==AGI_RESULT_ERROR&&!_0x33574c[_0xfed0('0x18')]){logger[_0xfed0('0x31')](_0xfed0('0x42'),getLogFromObject(_0x8b478e));return _['isUndefined'](_0x8b478e[_0xfed0('0x43')])?null:_0x8b478e[_0xfed0('0x43')][_0xfed0('0x44')]();}else{logger[_0xfed0('0xd')](_0xfed0('0x42'),getLogFromObject(_0x8b478e));return null;}}else{logger[_0xfed0('0xd')](_0xfed0('0x45'));return null;}}catch(_0x2cf9c3){logger['error'](_0xfed0('0x46'),getLogFromObject(_0x2cf9c3));return null;}});if(_0x456890[_0xfed0('0x47')]){logger[_0xfed0('0xa')](util[_0xfed0('0xe')](_0xfed0('0x48'),_0x33574c[_0xfed0('0x13')],_0x33574c[_0xfed0('0x14')],_0x33574c[_0xfed0('0x3a')],_0x33574c[_0xfed0('0x15')],_0x33574c['uniqueid']));_0x1e20bb[_0xfed0('0x3b')](_0x456890[_0xfed0('0x47')]['id'],function(_0x47b46f){try{_0x47b46f=_0x2226e4[_0xfed0('0x3c')](_0x47b46f);logger[_0xfed0('0x31')](_0xfed0('0x3d'),JSON['stringify'](_0x47b46f,null,0x2));if(_0x47b46f&&_0x2226e4[_0x47b46f[_0xfed0('0x1c')]]){_0x8b478e=_0x2226e4[_0x47b46f[_0xfed0('0x1c')]](_0x47b46f);if(_0x8b478e){logger[_0xfed0('0x31')](_0xfed0('0x42'),getLogFromObject(_0x8b478e));return _['isUndefined'](_0x8b478e[_0xfed0('0x43')])?null:_0x8b478e[_0xfed0('0x43')][_0xfed0('0x44')]();}else{logger[_0xfed0('0xd')]('response',getLogFromObject(_0x8b478e));return null;}}else{logger[_0xfed0('0xd')](_0xfed0('0x45'));return null;}}catch(_0x18ae22){logger['error']('exception',getLogFromObject(_0x18ae22));return null;}});}logger['info'](util['format'](_0xfed0('0x49'),_0x33574c[_0xfed0('0x13')],_0x33574c[_0xfed0('0x14')],_0x33574c[_0xfed0('0x3a')],_0x33574c[_0xfed0('0x15')],_0x33574c['uniqueid']));logger[_0xfed0('0xa')](util[_0xfed0('0xe')](_0xfed0('0x4a'),_0x33574c['context'],_0x33574c[_0xfed0('0x40')],parseInt(_0x33574c['priority'],0xa)+0x1));_0x33574c[_0xfed0('0x4b')](_0x33574c[_0xfed0('0x3f')],_0x33574c[_0xfed0('0x40')],parseInt(_0x33574c[_0xfed0('0x41')],0xa)+0x1);_0x33574c['close']();}}else{logger[_0xfed0('0xd')](util[_0xfed0('0xe')](_0xfed0('0x4c'),_0x33574c[_0xfed0('0x13')]));_0x33574c[_0xfed0('0x4b')](_0x33574c[_0xfed0('0x3f')],_0x33574c['extension'],parseInt(_0x33574c[_0xfed0('0x41')],0xa)+0x1);_0x33574c[_0xfed0('0x4d')]();}}else{logger[_0xfed0('0xd')](util[_0xfed0('0xe')](_0xfed0('0x4e'),_0x33574c[_0xfed0('0x13')]));_0x33574c[_0xfed0('0x4b')](_0x33574c[_0xfed0('0x3f')],_0x33574c['extension'],parseInt(_0x33574c[_0xfed0('0x41')],0xa)+0x1);_0x33574c['close']();}}function main(){var _0x550d4f;return utilLicense[_0xfed0('0x4f')]()[_0xfed0('0x2b')](function(_0x34f6ea){if(_0x34f6ea){if(_0x34f6ea[_0xfed0('0x50')]){if(_0x34f6ea['callysquare']&&_0x34f6ea[_0xfed0('0x51')]>0x0){logger[_0xfed0('0xa')](util[_0xfed0('0xe')]('[LICENSE]\x20CHANNELS:\x20%s',_0x34f6ea[_0xfed0('0x51')]));_0x550d4f=_0x34f6ea[_0xfed0('0x51')];}else{logger[_0xfed0('0xa')](_0xfed0('0x52'));}}else{logger[_0xfed0('0xa')](_0xfed0('0x53'));_0x550d4f=-0x1;}}})[_0xfed0('0x28')](function(_0x1f06db){logger[_0xfed0('0xd')](_0xfed0('0x54'),JSON[_0xfed0('0x11')](_0x1f06db,null,0x2));})[_0xfed0('0x47')](function(){var _0x7a79fb=require(_0xfed0('0x55'))(0x11dd,'0.0.0.0',_0x550d4f);_0x7a79fb['on']('error',errorHandler);_0x7a79fb['on']('listening',listeningHandler);_0x7a79fb['on'](_0xfed0('0x56'),connectionHandler);_0x7a79fb['on'](_0xfed0('0x4d'),closeHandler);});}main();
\ No newline at end of file
+var _0x547f=['[LICENSE]','0.0.0.0','listening','connection','xml2json','lodash','syncho','util','../../config/environment','../../config/logger','agi','../../config/license/util','./rpc','./mailRpc','./graph','./vertices','syncho\x20error','log','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','info','[LISTENING]\x20Cally\x20Square\x20listening\x200.0.0.0:4573','name','message','error','format','[%s]\x20%s','[ERROR]\x20%s','stringify','[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','arg_1','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','calleridname','evtHangup','toJson','root','agicommand','hasOwnProperty','retry','maxRetry','isArray','length','source','target','addEdge','getSquareProject','then','catch','updateSquareReport','indexOf','agi_','inspect','debug','variables','close','timeout','sync','production','start','omit','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','priority','response','code','result','isUndefined','exception','finally','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','vertex','toString','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','extension','continueAt','Project\x20%s\x20not\x20published','Project\x20%s\x20not\x20found','voice','[LICENSE]\x20CHANNELS:\x20%s','callysquare','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]\x20VOICE\x20IS\x20DISABLED'];(function(_0x920531,_0x9940eb){var _0x3dd1cc=function(_0x557132){while(--_0x557132){_0x920531['push'](_0x920531['shift']());}};_0x3dd1cc(++_0x9940eb);}(_0x547f,0x174));var _0xf547=function(_0x2a8c67,_0x46d128){_0x2a8c67=_0x2a8c67-0x0;var _0x2ce550=_0x547f[_0x2a8c67];return _0x2ce550;};'use strict';var parser=require(_0xf547('0x0'));var _=require(_0xf547('0x1'));var syncho=require(_0xf547('0x2'));var util=require(_0xf547('0x3'));var config=require(_0xf547('0x4'));var logger=require(_0xf547('0x5'))(_0xf547('0x6'));var utilLicense=require(_0xf547('0x7'));var rpc=require(_0xf547('0x8'));var mailRpc=require(_0xf547('0x9'));var Graph=require(_0xf547('0xa'));var Vertices=require(_0xf547('0xb'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;function connectionHandler(_0x5ccb43){process['nextTick'](function(){syncho(function(){try{setChannelVariables(_0x5ccb43);agiHandler(_0x5ccb43);}catch(_0x33fe09){logger['error'](_0xf547('0xc'),JSON['stringify'](_0x33fe09,null,0x2));}});});}function listeningHandler(_0x40606f){console[_0xf547('0xd')](_0xf547('0xe'),0x11dd);logger[_0xf547('0xf')](_0xf547('0x10'));}function errorHandler(_0x378c60){if(_0x378c60&&_0x378c60[_0xf547('0x11')]&&_0x378c60[_0xf547('0x12')]){logger[_0xf547('0x13')](util[_0xf547('0x14')](_0xf547('0x15'),_0x378c60[_0xf547('0x11')],_0x378c60[_0xf547('0x12')]));}else{logger[_0xf547('0x13')](util[_0xf547('0x14')](_0xf547('0x16'),JSON[_0xf547('0x17')](_0x378c60,null,0x2)));}}function closeHandler(){logger[_0xf547('0xf')](util[_0xf547('0x14')](_0xf547('0x18'),this[_0xf547('0x19')],this['calleridname'],this[_0xf547('0x1a')],this['dnid'],this[_0xf547('0x1b')]));try{updateSquareReport(this);}catch(_0x273e71){logger[_0xf547('0x13')](_0x273e71[_0xf547('0x12')]);}}function timeoutHandler(){logger['info'](util[_0xf547('0x14')](_0xf547('0x1c'),this['arg_1'],this['calleridname'],this['callerid'],this[_0xf547('0x1d')],this['uniqueid']));}function hangupHandler(){logger[_0xf547('0xf')](util['format'](_0xf547('0x1e'),this[_0xf547('0x19')],this[_0xf547('0x1f')],this['callerid'],this[_0xf547('0x1d')],this[_0xf547('0x1b')]));this[_0xf547('0x20')]=!![];}function getRoot(_0x3ce1f8){return parser[_0xf547('0x21')](_0x3ce1f8,{'object':!![]})['mxGraphModel'][_0xf547('0x22')];}function addVertex(_0x21820a,_0x910b91,_0x29101f){_0x910b91[_0xf547('0x23')]=_0x29101f;if(_0x910b91[_0xf547('0x24')](_0xf547('0x25'))){_0x910b91[_0xf547('0x26')]=parseInt(_0x910b91[_0xf547('0x25')],0xa);}_0x21820a['addVertex'](_['omit'](_0x910b91,'mxCell'));}function initGraph(_0x265831,_0x7ff55a){var _0x5b8b4f=new Graph();for(var _0x14648b in _0x265831){if(_0x265831[_0xf547('0x24')](_0x14648b)){if(_[_0xf547('0x27')](_0x265831[_0x14648b])){for(var _0x59d27c=0x0;_0x59d27c<_0x265831[_0x14648b][_0xf547('0x28')];_0x59d27c+=0x1){addVertex(_0x5b8b4f,_0x265831[_0x14648b][_0x59d27c],_0x14648b);}}else{addVertex(_0x5b8b4f,_0x265831[_0x14648b],_0x14648b);}}}for(var _0x37dc69=0x0;_0x37dc69<_0x7ff55a[_0xf547('0x28')];_0x37dc69+=0x1){if(_0x7ff55a[_0x37dc69][_0xf547('0x29')]&&_0x7ff55a[_0x37dc69][_0xf547('0x2a')]){_0x5b8b4f[_0xf547('0x2b')](_0x7ff55a[_0x37dc69]['source'],_0x7ff55a[_0x37dc69][_0xf547('0x2a')],_0x7ff55a[_0x37dc69]['value']);}}return _0x5b8b4f;}function getSquareProject(_0x289ff0,_0x531d6e){rpc[_0xf547('0x2c')](_0x289ff0)[_0xf547('0x2d')](function(_0x53ee0c){_0x531d6e(null,_0x53ee0c);})[_0xf547('0x2e')](function(_0x4b9d1f){_0x531d6e(null,_0x4b9d1f);});}function createSquareReport(_0x4a2796,_0x799ab7){rpc['createSquareReport'](_0x4a2796)[_0xf547('0x2d')](function(_0x35f946){_0x799ab7(null,_0x35f946);})[_0xf547('0x2e')](function(_0x23f9ca){_0x799ab7(null,_0x23f9ca);});}function updateSquareReport(_0x3c0f69,_0x4a34f2){rpc[_0xf547('0x2f')](_0x3c0f69[_0xf547('0x1b')],_0x3c0f69[_0xf547('0x19')])[_0xf547('0x2d')](function(_0x336f0a){if(_0x4a34f2){_0x4a34f2(null,_0x336f0a);}})['catch'](function(_0x322a0b){if(_0x4a34f2){_0x4a34f2(null,_0x322a0b);}});}function setChannelVariables(_0x497a75){for(var _0x50a882 in _0x497a75){if(_0x497a75[_0xf547('0x24')](_0x50a882)){if(_0x50a882[_0xf547('0x30')](_0xf547('0x31'))===0x0){_0x497a75[_0x50a882['substring'](0x4)]=_0x497a75[_0x50a882];delete _0x497a75[_0x50a882];}}}}function getLogFromObject(_0x2cc510){return util[_0xf547('0x32')](_0x2cc510,{'showHidden':![],'depth':null});}function agiHandler(_0x163add){var _0x123d29,_0x4dc73d,_0x1491ab,_0x14331b,_0x18daf7;logger[_0xf547('0x33')](_0xf547('0x34'),JSON[_0xf547('0x17')](_0x163add,null,0x2));logger[_0xf547('0xf')](util[_0xf547('0x14')]('[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x163add[_0xf547('0x19')],_0x163add['calleridname'],_0x163add[_0xf547('0x1a')],_0x163add[_0xf547('0x1d')],_0x163add[_0xf547('0x1b')]));_0x163add['on'](_0xf547('0x13'),errorHandler);_0x163add['on'](_0xf547('0x35'),closeHandler);_0x163add['on'](_0xf547('0x36'),timeoutHandler);_0x163add[_0xf547('0x20')]=![];_0x163add['on']('hangup',hangupHandler);var _0xfe70f3=getSquareProject[_0xf547('0x37')](null,_0x163add[_0xf547('0x19')]);if(_0xfe70f3){if(_0xfe70f3[_0xf547('0x38')]){_0x123d29=getRoot(_0xfe70f3[_0xf547('0x38')]);if(_0x123d29&&_0x123d29[_0xf547('0x39')]){logger[_0xf547('0x33')]('root',JSON['stringify'](_0x123d29,null,0x2));createSquareReport[_0xf547('0x37')](null,_0x163add);_0x4dc73d=initGraph(_[_0xf547('0x3a')](_0x123d29,_0xf547('0x3b')),_0x123d29[_0xf547('0x3b')]);_0x1491ab=new Vertices(_0x163add,rpc,mailRpc);logger[_0xf547('0xf')](util['format'](_0xf547('0x3c'),_0x163add[_0xf547('0x19')],_0x163add[_0xf547('0x1f')],_0x163add[_0xf547('0x1a')],_0x163add[_0xf547('0x1d')],_0x163add['uniqueid']));_0x4dc73d[_0xf547('0x3d')](_0x123d29['start']['id'],function(_0x3efce2){try{_0x3efce2=_0x1491ab[_0xf547('0x3e')](_0x3efce2);logger[_0xf547('0x33')]('vertex',JSON[_0xf547('0x17')](_0x3efce2,null,0x2));if(_0x3efce2['agicommand']===_0xf547('0x3f')){logger[_0xf547('0xf')](_0xf547('0x40'));_0x163add['context']=_0x3efce2[_0xf547('0x41')]||_0x163add[_0xf547('0x41')];_0x163add['extension']=_0x3efce2['extension'];_0x163add[_0xf547('0x42')]=_0x3efce2[_0xf547('0x42')]?_0x3efce2[_0xf547('0x42')]-0x1:0x1;return null;}else if(_0x3efce2&&_0x1491ab[_0x3efce2['agicommand']]){_0x18daf7=_0x1491ab[_0x3efce2[_0xf547('0x23')]](_0x3efce2);logger[_0xf547('0xf')](_0xf547('0x43'),JSON[_0xf547('0x17')](_0x18daf7,null,0x2));if(_0x18daf7&&_0x18daf7[_0xf547('0x44')]===AGI_CODE_SUCCESS&&_0x18daf7[_0xf547('0x45')]!==AGI_RESULT_ERROR&&!_0x163add[_0xf547('0x20')]){logger[_0xf547('0x33')](_0xf547('0x43'),getLogFromObject(_0x18daf7));return _[_0xf547('0x46')](_0x18daf7[_0xf547('0x45')])?null:_0x18daf7[_0xf547('0x45')]['toString']();}else{logger[_0xf547('0x13')](_0xf547('0x43'),getLogFromObject(_0x18daf7));return null;}}else{logger['error']('agicommand\x20not\x20found');return null;}}catch(_0x17d8c1){logger[_0xf547('0x13')](_0xf547('0x47'),getLogFromObject(_0x17d8c1));return null;}});if(_0x123d29[_0xf547('0x48')]){logger['info'](util[_0xf547('0x14')](_0xf547('0x49'),_0x163add[_0xf547('0x19')],_0x163add[_0xf547('0x1f')],_0x163add[_0xf547('0x1a')],_0x163add[_0xf547('0x1d')],_0x163add[_0xf547('0x1b')]));_0x4dc73d[_0xf547('0x3d')](_0x123d29['finally']['id'],function(_0x1892e6){try{_0x1892e6=_0x1491ab[_0xf547('0x3e')](_0x1892e6);logger[_0xf547('0x33')](_0xf547('0x4a'),JSON['stringify'](_0x1892e6,null,0x2));if(_0x1892e6&&_0x1491ab[_0x1892e6['agicommand']]){_0x18daf7=_0x1491ab[_0x1892e6[_0xf547('0x23')]](_0x1892e6);if(_0x18daf7){logger[_0xf547('0x33')](_0xf547('0x43'),getLogFromObject(_0x18daf7));return _['isUndefined'](_0x18daf7[_0xf547('0x45')])?null:_0x18daf7['result'][_0xf547('0x4b')]();}else{logger['error'](_0xf547('0x43'),getLogFromObject(_0x18daf7));return null;}}else{logger[_0xf547('0x13')](_0xf547('0x4c'));return null;}}catch(_0x2f4e2a){logger[_0xf547('0x13')](_0xf547('0x47'),getLogFromObject(_0x2f4e2a));return null;}});}logger[_0xf547('0xf')](util[_0xf547('0x14')](_0xf547('0x4d'),_0x163add[_0xf547('0x19')],_0x163add[_0xf547('0x1f')],_0x163add[_0xf547('0x1a')],_0x163add[_0xf547('0x1d')],_0x163add[_0xf547('0x1b')]));logger[_0xf547('0xf')](util[_0xf547('0x14')](_0xf547('0x4e'),_0x163add[_0xf547('0x41')],_0x163add[_0xf547('0x4f')],parseInt(_0x163add[_0xf547('0x42')],0xa)+0x1));_0x163add[_0xf547('0x50')](_0x163add[_0xf547('0x41')],_0x163add[_0xf547('0x4f')],parseInt(_0x163add[_0xf547('0x42')],0xa)+0x1);_0x163add[_0xf547('0x35')]();}}else{logger['error'](util[_0xf547('0x14')](_0xf547('0x51'),_0x163add[_0xf547('0x19')]));_0x163add[_0xf547('0x50')](_0x163add[_0xf547('0x41')],_0x163add['extension'],parseInt(_0x163add[_0xf547('0x42')],0xa)+0x1);_0x163add[_0xf547('0x35')]();}}else{logger[_0xf547('0x13')](util['format'](_0xf547('0x52'),_0x163add[_0xf547('0x19')]));_0x163add['continueAt'](_0x163add[_0xf547('0x41')],_0x163add[_0xf547('0x4f')],parseInt(_0x163add[_0xf547('0x42')],0xa)+0x1);_0x163add[_0xf547('0x35')]();}}function main(){var _0x41a7e1;return utilLicense['getLicense']()['then'](function(_0x5dc5a1){if(_0x5dc5a1){if(_0x5dc5a1[_0xf547('0x53')]){if(_0x5dc5a1['callysquare']&&_0x5dc5a1['callysquare']>0x0){logger[_0xf547('0xf')](util[_0xf547('0x14')](_0xf547('0x54'),_0x5dc5a1[_0xf547('0x55')]));_0x41a7e1=_0x5dc5a1[_0xf547('0x55')];}else{logger[_0xf547('0xf')](_0xf547('0x56'));}}else{logger['info'](_0xf547('0x57'));_0x41a7e1=-0x1;}}})[_0xf547('0x2e')](function(_0x5328dd){logger['error'](_0xf547('0x58'),JSON[_0xf547('0x17')](_0x5328dd,null,0x2));})['finally'](function(){var _0x13058e=require('./server')(0x11dd,_0xf547('0x59'),_0x41a7e1);_0x13058e['on'](_0xf547('0x13'),errorHandler);_0x13058e['on'](_0xf547('0x5a'),listeningHandler);_0x13058e['on'](_0xf547('0x5b'),connectionHandler);_0x13058e['on']('close',closeHandler);});}main();
\ No newline at end of file
index e601344..5063bbc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['catch','sendMailMessage','SendMail','bluebird','jayson/promise','client','http','request','then','error','message'];(function(_0x2a0f60,_0x4661d1){var _0xd667c8=function(_0x987926){while(--_0x987926){_0x2a0f60['push'](_0x2a0f60['shift']());}};_0xd667c8(++_0x4661d1);}(_0x34e8,0x12c));var _0x834e=function(_0x4a138b,_0x56fec8){_0x4a138b=_0x4a138b-0x0;var _0x4f1e83=_0x34e8[_0x4a138b];return _0x4f1e83;};'use strict';var BPromise=require(_0x834e('0x0'));var jayson=require(_0x834e('0x1'));var client=jayson[_0x834e('0x2')][_0x834e('0x3')]({'port':0x232b});function request(_0x530939,_0x832422){return new BPromise(function(_0x21e2e0,_0x472111){return client[_0x834e('0x4')](_0x530939,_0x832422)[_0x834e('0x5')](function(_0x19a3e0){if(_0x19a3e0[_0x834e('0x6')]){return _0x472111(_0x19a3e0['error'][_0x834e('0x7')]);}else{return _0x21e2e0(_0x19a3e0['result']);}})[_0x834e('0x8')](function(_0x3cc2e3){return _0x472111(_0x3cc2e3);});});}exports[_0x834e('0x9')]=function(_0x2e69e2,_0x33ea05){return request(_0x834e('0xa'),{'account':_0x2e69e2,'message':_0x33ea05});};
\ No newline at end of file
+var _0x814b=['bluebird','jayson/promise','client','http','request','then','error','result','catch','sendMailMessage','SendMail'];(function(_0x196a94,_0x551e7f){var _0x28a600=function(_0xbd7b86){while(--_0xbd7b86){_0x196a94['push'](_0x196a94['shift']());}};_0x28a600(++_0x551e7f);}(_0x814b,0x1a2));var _0xb814=function(_0x3a081b,_0x516437){_0x3a081b=_0x3a081b-0x0;var _0xb166c4=_0x814b[_0x3a081b];return _0xb166c4;};'use strict';var BPromise=require(_0xb814('0x0'));var jayson=require(_0xb814('0x1'));var client=jayson[_0xb814('0x2')][_0xb814('0x3')]({'port':0x232b});function request(_0xfbb64b,_0x477725){return new BPromise(function(_0x4a98af,_0x38c21a){return client[_0xb814('0x4')](_0xfbb64b,_0x477725)[_0xb814('0x5')](function(_0x4237bc){if(_0x4237bc[_0xb814('0x6')]){return _0x38c21a(_0x4237bc[_0xb814('0x6')]['message']);}else{return _0x4a98af(_0x4237bc[_0xb814('0x7')]);}})[_0xb814('0x8')](function(_0x5c8539){return _0x38c21a(_0x5c8539);});});}exports[_0xb814('0x9')]=function(_0x2913a6,_0x186d5a){return request(_0xb814('0xa'),{'account':_0x2913a6,'message':_0x186d5a});};
\ No newline at end of file
index 06ba057..b0b10e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['call','_inBody','inherits','prototype','_transform','\x0d\x0a\x0d\x0a','_localBuffer','toString','indexOf','substring','split','trim','slice','length','emit','headers','line','exports','util','Transform'];(function(_0x4fabbe,_0xc514f3){var _0x5510dd=function(_0x1e7d23){while(--_0x1e7d23){_0x4fabbe['push'](_0x4fabbe['shift']());}};_0x5510dd(++_0xc514f3);}(_0xb10b,0x12a));var _0xbb10=function(_0x24eab8,_0x2f471c){_0x24eab8=_0x24eab8-0x0;var _0x41d883=_0xb10b[_0x24eab8];return _0x41d883;};'use strict';var util=require(_0xbb10('0x0'));var Transform=require('stream')[_0xbb10('0x1')];function AGIReply(_0x35bc5f){Transform[_0xbb10('0x2')](this,_0x35bc5f);this['_localBuffer']='';this[_0xbb10('0x3')]=![];}util[_0xbb10('0x4')](AGIReply,Transform);AGIReply[_0xbb10('0x5')][_0xbb10('0x6')]=function(_0x49baf4,_0x312b72,_0x481979){var _0x328583='\x0a',_0x3cdd53=['\x0a\x0a',_0xbb10('0x7')],_0x513741=-0x1,_0x1b9e94=-0x1,_0x3fb675='',_0x21370f=0x0,_0x1c3ee5='',_0x2353ef='';this[_0xbb10('0x8')]+=_0x49baf4[_0xbb10('0x9')]();_0x1c3ee5=this['_localBuffer'];if(!this['_inBody']){_0x21370f=0x0;while(_0x3cdd53[_0x21370f]){while((_0x1b9e94=_0x1c3ee5[_0xbb10('0xa')](_0x3cdd53[_0x21370f]))!=-0x1){_0x3fb675=_0x3cdd53[_0x21370f];_0x2353ef=_0x1c3ee5[_0xbb10('0xb')](0x0,_0x1b9e94);_0x1c3ee5=_0x1c3ee5[_0xbb10('0xb')](_0x1b9e94+_0x3fb675['length']);var _0x408248=_0x2353ef[_0xbb10('0xc')](_0x328583),_0x5be7e0=0x0,_0x44fb19={},_0x916a32='',_0x285009='',_0x193a27=-0x1;while(_0x408248[_0x5be7e0]){_0x193a27=_0x408248[_0x5be7e0][_0xbb10('0xa')](':');if(_0x193a27!=-0x1){_0x916a32=_0x408248[_0x5be7e0]['slice'](0x0,_0x193a27)[_0xbb10('0xd')]();_0x285009=_0x408248[_0x5be7e0][_0xbb10('0xe')](_0x193a27+0x1)[_0xbb10('0xd')]();if(_0x916a32[_0xbb10('0xf')]>0x0){_0x44fb19[_0x916a32]=_0x285009;}}else{}_0x5be7e0++;}this[_0xbb10('0x10')](_0xbb10('0x11'),_0x44fb19);this[_0xbb10('0x3')]=!![];}_0x21370f++;}this[_0xbb10('0x8')]=_0x1c3ee5;}else{while((_0x513741=_0x1c3ee5[_0xbb10('0xa')](_0x328583))!=-0x1){_0x2353ef=_0x1c3ee5[_0xbb10('0xb')](0x0,_0x513741);this['emit'](_0xbb10('0x12'),_0x2353ef);_0x1c3ee5=_0x1c3ee5[_0xbb10('0xb')](_0x513741+_0x328583[_0xbb10('0xf')]);}this[_0xbb10('0x8')]=_0x1c3ee5;}_0x481979();};module[_0xbb10('0x13')]=AGIReply;
\ No newline at end of file
+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(_0x5d6814,_0x1dfdc5){var _0x271a00=function(_0xf9c87c){while(--_0xf9c87c){_0x5d6814['push'](_0x5d6814['shift']());}};_0x271a00(++_0x1dfdc5);}(_0x5f2f,0x73));var _0xf5f2=function(_0x2d638f,_0x828e1e){_0x2d638f=_0x2d638f-0x0;var _0x5a59ed=_0x5f2f[_0x2d638f];return _0x5a59ed;};'use strict';var util=require(_0xf5f2('0x0'));var Transform=require(_0xf5f2('0x1'))[_0xf5f2('0x2')];function AGIReply(_0x1a7be1){Transform[_0xf5f2('0x3')](this,_0x1a7be1);this[_0xf5f2('0x4')]='';this[_0xf5f2('0x5')]=![];}util[_0xf5f2('0x6')](AGIReply,Transform);AGIReply['prototype']['_transform']=function(_0x1665c7,_0x192215,_0xad7f65){var _0x3eebf6='\x0a',_0x3133bc=['\x0a\x0a',_0xf5f2('0x7')],_0x473100=-0x1,_0x5907aa=-0x1,_0x466882='',_0x46cd9c=0x0,_0x2ec345='',_0x56a69f='';this[_0xf5f2('0x4')]+=_0x1665c7[_0xf5f2('0x8')]();_0x2ec345=this['_localBuffer'];if(!this[_0xf5f2('0x5')]){_0x46cd9c=0x0;while(_0x3133bc[_0x46cd9c]){while((_0x5907aa=_0x2ec345['indexOf'](_0x3133bc[_0x46cd9c]))!=-0x1){_0x466882=_0x3133bc[_0x46cd9c];_0x56a69f=_0x2ec345['substring'](0x0,_0x5907aa);_0x2ec345=_0x2ec345[_0xf5f2('0x9')](_0x5907aa+_0x466882[_0xf5f2('0xa')]);var _0x4b78cd=_0x56a69f[_0xf5f2('0xb')](_0x3eebf6),_0x336f6b=0x0,_0x14b51f={},_0x331482='',_0x3f2997='',_0x59bb6c=-0x1;while(_0x4b78cd[_0x336f6b]){_0x59bb6c=_0x4b78cd[_0x336f6b]['indexOf'](':');if(_0x59bb6c!=-0x1){_0x331482=_0x4b78cd[_0x336f6b][_0xf5f2('0xc')](0x0,_0x59bb6c)[_0xf5f2('0xd')]();_0x3f2997=_0x4b78cd[_0x336f6b][_0xf5f2('0xc')](_0x59bb6c+0x1)[_0xf5f2('0xd')]();if(_0x331482[_0xf5f2('0xa')]>0x0){_0x14b51f[_0x331482]=_0x3f2997;}}else{}_0x336f6b++;}this['emit'](_0xf5f2('0xe'),_0x14b51f);this[_0xf5f2('0x5')]=!![];}_0x46cd9c++;}this[_0xf5f2('0x4')]=_0x2ec345;}else{while((_0x473100=_0x2ec345[_0xf5f2('0xf')](_0x3eebf6))!=-0x1){_0x56a69f=_0x2ec345[_0xf5f2('0x9')](0x0,_0x473100);this[_0xf5f2('0x10')](_0xf5f2('0x11'),_0x56a69f);_0x2ec345=_0x2ec345[_0xf5f2('0x9')](_0x473100+_0x3eebf6[_0xf5f2('0xa')]);}this[_0xf5f2('0x4')]=_0x2ec345;}_0xad7f65();};module[_0xf5f2('0x12')]=AGIReply;
\ No newline at end of file
index b79e033..c42ed22 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf533=['getSquareOdbcById','ShowSquareOdbc','getTrunkById','ShowTrunk','getSoundById','save_name','getIntervalById','Interval','Intervals','getSmsAccountById','ShowSmsAccount','createSmsMessage','CreateSmsMessage','createSquareReport','CreateSquareReport','merge','format','YYYY-MM-DD\x20HH:mm:ss','arg_1','arg_2','CreateSquareRecording','createCmContact','phone','ListId','CreateCmContact','getPauseById','ShowPause','agentLogin','LoginUser','PauseUser','agentUnpause','UnpauseUser','agentLogout','LogoutUser','bluebird','moment','jayson/promise','client','http','request','then','error','message','result','catch','ShowSquareProject','ShowMailAccount','MailServerOut','Smtp','name','email','getSquareProjectById','getVoiceQueueById','getVariableById','ShowVariable'];(function(_0x4e80ff,_0x5d0d86){var _0x39ddcd=function(_0x6ab69f){while(--_0x6ab69f){_0x4e80ff['push'](_0x4e80ff['shift']());}};_0x39ddcd(++_0x5d0d86);}(_0xf533,0xc7));var _0x3f53=function(_0x29c3b2,_0x3c12ac){_0x29c3b2=_0x29c3b2-0x0;var _0x4b3aa7=_0xf533[_0x29c3b2];return _0x4b3aa7;};'use strict';var BPromise=require(_0x3f53('0x0'));var moment=require(_0x3f53('0x1'));var _=require('lodash');var util=require('util');var jayson=require(_0x3f53('0x2'));var client=jayson[_0x3f53('0x3')][_0x3f53('0x4')]({'port':0x2329});function request(_0x4bd7c2,_0x128983){return new BPromise(function(_0xa020c1,_0x2879b3){return client[_0x3f53('0x5')](_0x4bd7c2,_0x128983)[_0x3f53('0x6')](function(_0x27b0a2){if(_0x27b0a2[_0x3f53('0x7')]){return _0x2879b3(_0x27b0a2['error'][_0x3f53('0x8')]);}else{return _0xa020c1(_0x27b0a2[_0x3f53('0x9')]);}})[_0x3f53('0xa')](function(_0x4efc98){return _0x2879b3(_0x4efc98);});});}exports['getSquareProject']=function(_0x3315cb){return request(_0x3f53('0xb'),{'options':{'raw':![],'where':{'name':_0x3315cb},'attributes':['production']}});};exports['getMailAccountById']=function(_0x5dfb39){return request(_0x3f53('0xc'),{'options':{'raw':![],'where':{'id':_0x5dfb39},'include':[{'model':_0x3f53('0xd'),'as':_0x3f53('0xe')}],'attributes':['id',_0x3f53('0xf'),_0x3f53('0x10')]}});};exports[_0x3f53('0x11')]=function(_0x5af96c){return request(_0x3f53('0xb'),{'options':{'where':{'id':_0x5af96c},'attributes':['name']}});};exports[_0x3f53('0x12')]=function(_0x444c51){return request('ShowVoiceQueue',{'options':{'where':{'id':_0x444c51},'attributes':['name']}});};exports[_0x3f53('0x13')]=function(_0x491aa0){return request(_0x3f53('0x14'),{'options':{'where':{'id':_0x491aa0},'attributes':[_0x3f53('0xf')]}});};exports[_0x3f53('0x15')]=function(_0xb46076){return request(_0x3f53('0x16'),{'options':{'where':{'id':_0xb46076},'attributes':['dsn']}});};exports['getUserById']=function(_0x1b3469){return request('ShowUser',{'options':{'where':{'id':_0x1b3469},'attributes':[_0x3f53('0xf')]}});};exports[_0x3f53('0x17')]=function(_0x48901d){return request(_0x3f53('0x18'),{'options':{'where':{'id':_0x48901d},'attributes':['name']}});};exports[_0x3f53('0x19')]=function(_0x57b170){return request('ShowSound',{'options':{'where':{'id':_0x57b170},'attributes':[_0x3f53('0x1a')]}});};exports[_0x3f53('0x1b')]=function(_0xe33352){return request('ShowInterval',{'options':{'raw':![],'where':{'id':_0xe33352},'include':[{'model':_0x3f53('0x1c'),'as':_0x3f53('0x1d')}]}});};exports[_0x3f53('0x1e')]=function(_0x371e16){return request(_0x3f53('0x1f'),{'options':{'where':{'id':_0x371e16},'attributes':['id',_0x3f53('0xf')]}});};exports[_0x3f53('0x20')]=function(_0xed8c17){return request(_0x3f53('0x21'),{'body':_0xed8c17});};exports['createSquareDetailsReport']=function(_0x260f50){return request('CreateSquareDetailsReport',{'body':_0x260f50});};exports[_0x3f53('0x22')]=function(_0x2f13dd){return request(_0x3f53('0x23'),{'body':_[_0x3f53('0x24')](_0x2f13dd,{'joinAt':moment()[_0x3f53('0x25')](_0x3f53('0x26')),'project_name':_0x2f13dd[_0x3f53('0x27')],'prev_project_name':_0x2f13dd[_0x3f53('0x28')]||'','is_subproject':_0x2f13dd[_0x3f53('0x28')]?!![]:![]})});};exports['updateSquareReport']=function(_0x5f17b8,_0x510166){return request('UpdateSquareReport',{'body':{'leaveAt':moment()[_0x3f53('0x25')](_0x3f53('0x26'))},'options':{'where':{'uniqueid':_0x5f17b8,'project_name':_0x510166,'leaveAt':null}}});};exports['createSquareRecording']=function(_0x30e7a8){return request(_0x3f53('0x29'),{'body':_0x30e7a8});};exports[_0x3f53('0x2a')]=function(_0x59cc61){return request('ShowCmHopper',{'options':{'raw':![],'where':{'phone':_0x59cc61[_0x3f53('0x2b')],'ListId':_0x59cc61[_0x3f53('0x2c')]}}})[_0x3f53('0x6')](function(_0x21478b){if(_0x21478b){return _0x21478b;}return request(_0x3f53('0x2d'),{'body':_0x59cc61});});};exports[_0x3f53('0x2e')]=function(_0x2e573a){return request(_0x3f53('0x2f'),{'options':{'where':{'id':_0x2e573a},'attributes':[_0x3f53('0xf')]}});};exports[_0x3f53('0x30')]=function(_0x38e5a5,_0x53dd02){return request(_0x3f53('0x31'),{'body':{'interface':_0x53dd02},'options':{'where':_0x38e5a5}});};exports['agentPause']=function(_0x471055,_0x5cb946,_0x147af4){return request(_0x3f53('0x32'),{'body':{'type':_0x5cb946,'uniqueid':_0x147af4},'options':{'where':_0x471055}});};exports[_0x3f53('0x33')]=function(_0x5aeefc){return request(_0x3f53('0x34'),{'body':{},'options':{'where':_0x5aeefc}});};exports[_0x3f53('0x35')]=function(_0x26aef3){return request(_0x3f53('0x36'),{'body':{},'options':{'where':_0x26aef3}});};
\ No newline at end of file
+var _0xc381=['Intervals','ShowSmsAccount','createSmsMessage','createSquareDetailsReport','CreateSquareDetailsReport','CreateSquareReport','merge','format','YYYY-MM-DD\x20HH:mm:ss','arg_1','arg_2','UpdateSquareReport','createSquareRecording','CreateSquareRecording','createCmContact','ListId','getPauseById','ShowPause','agentPause','PauseUser','agentUnpause','UnpauseUser','agentLogout','LogoutUser','bluebird','moment','lodash','util','jayson/promise','client','http','request','then','error','message','catch','getSquareProject','production','getMailAccountById','ShowMailAccount','MailServerOut','name','getVoiceQueueById','ShowVoiceQueue','getVariableById','ShowVariable','getSquareOdbcById','getUserById','ShowUser','getTrunkById','ShowTrunk','getSoundById','save_name','getIntervalById','ShowInterval','Interval'];(function(_0xe9ce81,_0x4d48bb){var _0x27c089=function(_0x27a214){while(--_0x27a214){_0xe9ce81['push'](_0xe9ce81['shift']());}};_0x27c089(++_0x4d48bb);}(_0xc381,0x1a0));var _0x1c38=function(_0x1fd145,_0x26ec30){_0x1fd145=_0x1fd145-0x0;var _0x113b5e=_0xc381[_0x1fd145];return _0x113b5e;};'use strict';var BPromise=require(_0x1c38('0x0'));var moment=require(_0x1c38('0x1'));var _=require(_0x1c38('0x2'));var util=require(_0x1c38('0x3'));var jayson=require(_0x1c38('0x4'));var client=jayson[_0x1c38('0x5')][_0x1c38('0x6')]({'port':0x2329});function request(_0x59e7d4,_0x15f8fe){return new BPromise(function(_0x24cd6a,_0x3bfeb9){return client[_0x1c38('0x7')](_0x59e7d4,_0x15f8fe)[_0x1c38('0x8')](function(_0x530df7){if(_0x530df7[_0x1c38('0x9')]){return _0x3bfeb9(_0x530df7[_0x1c38('0x9')][_0x1c38('0xa')]);}else{return _0x24cd6a(_0x530df7['result']);}})[_0x1c38('0xb')](function(_0x15902f){return _0x3bfeb9(_0x15902f);});});}exports[_0x1c38('0xc')]=function(_0x12fcaf){return request('ShowSquareProject',{'options':{'raw':![],'where':{'name':_0x12fcaf},'attributes':[_0x1c38('0xd')]}});};exports[_0x1c38('0xe')]=function(_0x6f982f){return request(_0x1c38('0xf'),{'options':{'raw':![],'where':{'id':_0x6f982f},'include':[{'model':_0x1c38('0x10'),'as':'Smtp'}],'attributes':['id',_0x1c38('0x11'),'email']}});};exports['getSquareProjectById']=function(_0xdeaa7b){return request('ShowSquareProject',{'options':{'where':{'id':_0xdeaa7b},'attributes':['name']}});};exports[_0x1c38('0x12')]=function(_0x9bdd98){return request(_0x1c38('0x13'),{'options':{'where':{'id':_0x9bdd98},'attributes':[_0x1c38('0x11')]}});};exports[_0x1c38('0x14')]=function(_0x2f7793){return request(_0x1c38('0x15'),{'options':{'where':{'id':_0x2f7793},'attributes':['name']}});};exports[_0x1c38('0x16')]=function(_0x1b4950){return request('ShowSquareOdbc',{'options':{'where':{'id':_0x1b4950},'attributes':['dsn']}});};exports[_0x1c38('0x17')]=function(_0x21ce02){return request(_0x1c38('0x18'),{'options':{'where':{'id':_0x21ce02},'attributes':[_0x1c38('0x11')]}});};exports[_0x1c38('0x19')]=function(_0x3e3c85){return request(_0x1c38('0x1a'),{'options':{'where':{'id':_0x3e3c85},'attributes':[_0x1c38('0x11')]}});};exports[_0x1c38('0x1b')]=function(_0x210aee){return request('ShowSound',{'options':{'where':{'id':_0x210aee},'attributes':[_0x1c38('0x1c')]}});};exports[_0x1c38('0x1d')]=function(_0x38c3f5){return request(_0x1c38('0x1e'),{'options':{'raw':![],'where':{'id':_0x38c3f5},'include':[{'model':_0x1c38('0x1f'),'as':_0x1c38('0x20')}]}});};exports['getSmsAccountById']=function(_0x3af3ca){return request(_0x1c38('0x21'),{'options':{'where':{'id':_0x3af3ca},'attributes':['id','name']}});};exports[_0x1c38('0x22')]=function(_0x545f75){return request('CreateSmsMessage',{'body':_0x545f75});};exports[_0x1c38('0x23')]=function(_0x420ec9){return request(_0x1c38('0x24'),{'body':_0x420ec9});};exports['createSquareReport']=function(_0x35b30e){return request(_0x1c38('0x25'),{'body':_[_0x1c38('0x26')](_0x35b30e,{'joinAt':moment()[_0x1c38('0x27')](_0x1c38('0x28')),'project_name':_0x35b30e[_0x1c38('0x29')],'prev_project_name':_0x35b30e[_0x1c38('0x2a')]||'','is_subproject':_0x35b30e[_0x1c38('0x2a')]?!![]:![]})});};exports['updateSquareReport']=function(_0x4867c9,_0x45e919){return request(_0x1c38('0x2b'),{'body':{'leaveAt':moment()[_0x1c38('0x27')](_0x1c38('0x28'))},'options':{'where':{'uniqueid':_0x4867c9,'project_name':_0x45e919,'leaveAt':null}}});};exports[_0x1c38('0x2c')]=function(_0x53488f){return request(_0x1c38('0x2d'),{'body':_0x53488f});};exports[_0x1c38('0x2e')]=function(_0x499893){return request('ShowCmHopper',{'options':{'raw':![],'where':{'phone':_0x499893['phone'],'ListId':_0x499893[_0x1c38('0x2f')]}}})['then'](function(_0x468618){if(_0x468618){return _0x468618;}return request('CreateCmContact',{'body':_0x499893});});};exports[_0x1c38('0x30')]=function(_0x2aa87e){return request(_0x1c38('0x31'),{'options':{'where':{'id':_0x2aa87e},'attributes':[_0x1c38('0x11')]}});};exports['agentLogin']=function(_0x2f3360,_0x245082){return request('LoginUser',{'body':{'interface':_0x245082},'options':{'where':_0x2f3360}});};exports[_0x1c38('0x32')]=function(_0x44076a,_0x2aff29,_0xeb219d){return request(_0x1c38('0x33'),{'body':{'type':_0x2aff29,'uniqueid':_0xeb219d},'options':{'where':_0x44076a}});};exports[_0x1c38('0x34')]=function(_0x51dc57){return request(_0x1c38('0x35'),{'body':{},'options':{'where':_0x51dc57}});};exports[_0x1c38('0x36')]=function(_0x15946d){return request(_0x1c38('0x37'),{'body':{},'options':{'where':_0x15946d}});};
\ No newline at end of file
index 453b318..f77ba28 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd858=['exports'];(function(_0xb39d8b,_0x102525){var _0x1d1e99=function(_0x62dd79){while(--_0x62dd79){_0xb39d8b['push'](_0xb39d8b['shift']());}};_0x1d1e99(++_0x102525);}(_0xd858,0x1f2));var _0x8d85=function(_0x443e1a,_0x417412){_0x443e1a=_0x443e1a-0x0;var _0x1eb15b=_0xd858[_0x443e1a];return _0x1eb15b;};var polly=require('./polly');module[_0x8d85('0x0')]={'polly':polly};
\ No newline at end of file
+var _0x9329=['exports','./polly'];(function(_0x5f3f31,_0x53e8b7){var _0x3914ad=function(_0x1c1b2d){while(--_0x1c1b2d){_0x5f3f31['push'](_0x5f3f31['shift']());}};_0x3914ad(++_0x53e8b7);}(_0x9329,0x11d));var _0x9932=function(_0x510940,_0x3eacec){_0x510940=_0x510940-0x0;var _0x205cea=_0x9329[_0x510940];return _0x205cea;};var polly=require(_0x9932('0x0'));module[_0x9932('0x1')]={'polly':polly};
\ No newline at end of file
index 641065e..136640c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x004c=['./lib/api'];(function(_0xe8ec17,_0x45c3e6){var _0x1e3f1d=function(_0x4d06b1){while(--_0x4d06b1){_0xe8ec17['push'](_0xe8ec17['shift']());}};_0x1e3f1d(++_0x45c3e6);}(_0x004c,0x120));var _0xc004=function(_0x368fb9,_0x1a9895){_0x368fb9=_0x368fb9-0x0;var _0x4892fb=_0x004c[_0x368fb9];return _0x4892fb;};'use strict';var polly=require(_0xc004('0x0'));module['exports']=function(_0x1631fc,_0x10071e,_0x11c2ac,_0x397adf,_0x55322f,_0x35b290,_0x3821d4){return polly(_0x1631fc,_0x10071e,_0x11c2ac,_0x397adf,_0x55322f,_0x35b290,_0x3821d4);};
\ No newline at end of file
+var _0xee63=['./lib/api'];(function(_0x56bb7f,_0x7437f7){var _0x486d5c=function(_0x337bca){while(--_0x337bca){_0x56bb7f['push'](_0x56bb7f['shift']());}};_0x486d5c(++_0x7437f7);}(_0xee63,0x103));var _0x3ee6=function(_0x536256,_0x237fb5){_0x536256=_0x536256-0x0;var _0x1675f7=_0xee63[_0x536256];return _0x1675f7;};'use strict';var polly=require(_0x3ee6('0x0'));module['exports']=function(_0x310dd7,_0x3efe1d,_0x462167,_0x32de14,_0x15bb21,_0x54c1d0,_0x3d105c){return polly(_0x310dd7,_0x3efe1d,_0x462167,_0x32de14,_0x15bb21,_0x54c1d0,_0x3d105c);};
\ No newline at end of file
index 5d6aad8..649ec5e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfe14=['synthesizeSpeech','AudioStream','writeFile','No\x20data\x20response\x20from\x20aws\x20Polly!','exports','Polly','mp3','bluebird','aws-sdk'];(function(_0x5a2d3f,_0x27b04e){var _0x5c65d8=function(_0x2d1965){while(--_0x2d1965){_0x5a2d3f['push'](_0x5a2d3f['shift']());}};_0x5c65d8(++_0x27b04e);}(_0xfe14,0x130));var _0x4fe1=function(_0x4c1078,_0x279c61){_0x4c1078=_0x4c1078-0x0;var _0x164ffe=_0xfe14[_0x4c1078];return _0x164ffe;};'use strict';var fs=require('fs');var path=require('path');var BPromise=require(_0x4fe1('0x0'));var rs=require('randomstring');var AWS=require(_0x4fe1('0x1'));function pollyResult(_0x23ac8b,_0x914e47,_0x4e243a){return new BPromise(function(_0x279e88,_0x2cb420){_0x23ac8b[_0x4fe1('0x2')](_0x914e47,function(_0x1787fc,_0x2c10c9){if(_0x1787fc){_0x2cb420(_0x1787fc);}else if(_0x2c10c9){if(_0x2c10c9[_0x4fe1('0x3')]instanceof Buffer){fs[_0x4fe1('0x4')](_0x4e243a,_0x2c10c9[_0x4fe1('0x3')],function(_0x3b4e2d){if(_0x3b4e2d){_0x2cb420(_0x3b4e2d);}else{_0x279e88();}});}else{_0x2cb420(new Error('Invalid\x20data\x20response\x20from\x20aws\x20Polly!'));}}else{_0x2cb420(new Error(_0x4fe1('0x5')));}});});}module[_0x4fe1('0x6')]=function(_0x187a65,_0x33b9f6,_0x1c4e7c,_0x13671b,_0x118e39,_0x413d57,_0x4ca476){var _0x4ca3b2=new AWS[(_0x4fe1('0x7'))]({'accessKeyId':_0x187a65,'secretAccessKey':_0x33b9f6,'region':_0x1c4e7c});var _0x3fab7f={'Text':_0x118e39,'TextType':_0x413d57||'text','OutputFormat':_0x4fe1('0x8'),'VoiceId':_0x13671b};return pollyResult(_0x4ca3b2,_0x3fab7f,_0x4ca476);};
\ No newline at end of file
+var _0x152c=['Invalid\x20data\x20response\x20from\x20aws\x20Polly!','No\x20data\x20response\x20from\x20aws\x20Polly!','Polly','text','mp3','path','randomstring','aws-sdk','writeFile'];(function(_0xc1ede1,_0x27c567){var _0x36f293=function(_0x1fe28c){while(--_0x1fe28c){_0xc1ede1['push'](_0xc1ede1['shift']());}};_0x36f293(++_0x27c567);}(_0x152c,0x125));var _0xc152=function(_0x408ad4,_0x5a09c8){_0x408ad4=_0x408ad4-0x0;var _0xc3a45d=_0x152c[_0x408ad4];return _0xc3a45d;};'use strict';var fs=require('fs');var path=require(_0xc152('0x0'));var BPromise=require('bluebird');var rs=require(_0xc152('0x1'));var AWS=require(_0xc152('0x2'));function pollyResult(_0x220e35,_0x3a8c30,_0x209028){return new BPromise(function(_0x1dd8e2,_0x46a395){_0x220e35['synthesizeSpeech'](_0x3a8c30,function(_0xdfee7c,_0x422cfa){if(_0xdfee7c){_0x46a395(_0xdfee7c);}else if(_0x422cfa){if(_0x422cfa['AudioStream']instanceof Buffer){fs[_0xc152('0x3')](_0x209028,_0x422cfa['AudioStream'],function(_0x45c24a){if(_0x45c24a){_0x46a395(_0x45c24a);}else{_0x1dd8e2();}});}else{_0x46a395(new Error(_0xc152('0x4')));}}else{_0x46a395(new Error(_0xc152('0x5')));}});});}module['exports']=function(_0x195174,_0x1cfa58,_0x27bf2a,_0x45588f,_0x3b3807,_0x6eaae9,_0x482b99){var _0x632a43=new AWS[(_0xc152('0x6'))]({'accessKeyId':_0x195174,'secretAccessKey':_0x1cfa58,'region':_0x27bf2a});var _0x26264a={'Text':_0x3b3807,'TextType':_0x6eaae9||_0xc152('0x7'),'OutputFormat':_0xc152('0x8'),'VoiceId':_0x45588f};return pollyResult(_0x632a43,_0x26264a,_0x482b99);};
\ No newline at end of file
index 591b4d6..24d274f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8efc=['exports'];(function(_0x21f27d,_0x2305ba){var _0x504a7b=function(_0x1428f6){while(--_0x1428f6){_0x21f27d['push'](_0x21f27d['shift']());}};_0x504a7b(++_0x2305ba);}(_0x8efc,0xb3));var _0xc8ef=function(_0xaaf2e2,_0x19d28a){_0xaaf2e2=_0xaaf2e2-0x0;var _0x28bc36=_0x8efc[_0xaaf2e2];return _0x28bc36;};'use strict';var asr=require('./lib/api');module[_0xc8ef('0x0')]=function(_0x4fd42,_0x3cbff9,_0x1753d9,_0x517faf){return asr(_0x4fd42,_0x3cbff9,_0x1753d9);};
\ No newline at end of file
+var _0xce2e=['./lib/api','exports'];(function(_0x42ca15,_0x193ccb){var _0x1c6ded=function(_0x40989a){while(--_0x40989a){_0x42ca15['push'](_0x42ca15['shift']());}};_0x1c6ded(++_0x193ccb);}(_0xce2e,0x1d8));var _0xece2=function(_0x41e733,_0x3859e0){_0x41e733=_0x41e733-0x0;var _0x1a5a75=_0xce2e[_0x41e733];return _0x1a5a75;};'use strict';var asr=require(_0xece2('0x0'));module[_0xece2('0x1')]=function(_0x303c43,_0x4c7902,_0x262b20,_0x169ede){return asr(_0x303c43,_0x4c7902,_0x262b20);};
\ No newline at end of file
index 49c07b1..4fc5fa6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa409=['url','https://speech.googleapis.com','exports','string','filepath\x20should\x20be\x20a\x20string','length','key\x20should\x20be\x20a\x20string','undefined','readFileSync','toString','POST','/v1/speech:recognize?key=','LINEAR16','8000'];(function(_0x1857c6,_0x48840c){var _0x51011c=function(_0x3a4736){while(--_0x3a4736){_0x1857c6['push'](_0x1857c6['shift']());}};_0x51011c(++_0x48840c);}(_0xa409,0x16c));var _0x9a40=function(_0x4e1a27,_0x438018){_0x4e1a27=_0x4e1a27-0x0;var _0x49ae5f=_0xa409[_0x4e1a27];return _0x49ae5f;};'use strict';var url=require(_0x9a40('0x0'));var BPromise=require('bluebird');var fs=require('fs');var host=_0x9a40('0x1');module[_0x9a40('0x2')]=function(_0x3bcb80,_0x5a28a6,_0x2decb0){return new BPromise(function(_0xbbb764,_0x5a83a2){var _0x409e56;if(typeof _0x3bcb80!==_0x9a40('0x3')||_0x3bcb80['length']===0x0){return _0x5a83a2(_0x9a40('0x4'));}if(typeof _0x5a28a6!==_0x9a40('0x3')||_0x5a28a6[_0x9a40('0x5')]===0x0){return _0x5a83a2(_0x9a40('0x6'));}if(typeof _0x2decb0!==_0x9a40('0x7')&&(typeof _0x2decb0!==_0x9a40('0x3')||_0x2decb0[_0x9a40('0x5')]===0x0)){return _0x5a83a2('lang\x20should\x20be\x20a\x20string');}try{_0x409e56=fs[_0x9a40('0x8')](_0x3bcb80)[_0x9a40('0x9')]('base64');}catch(_0x4ed4db){return _0x5a83a2(_0x4ed4db);}return _0xbbb764({'method':_0x9a40('0xa'),'uri':host+_0x9a40('0xb')+_0x5a28a6,'body':{'config':{'encoding':_0x9a40('0xc'),'sampleRateHertz':_0x9a40('0xd'),'languageCode':_0x2decb0},'audio':{'content':_0x409e56}},'json':!![]});});};
\ No newline at end of file
+var _0x0538=['/v1/speech:recognize?key=','LINEAR16','8000','url','https://speech.googleapis.com','exports','string','length','toString','base64','POST'];(function(_0x39cf70,_0x3ec55b){var _0x580424=function(_0x580a4e){while(--_0x580a4e){_0x39cf70['push'](_0x39cf70['shift']());}};_0x580424(++_0x3ec55b);}(_0x0538,0x121));var _0x8053=function(_0x2d8f6c,_0x44db4c){_0x2d8f6c=_0x2d8f6c-0x0;var _0x3a00f6=_0x0538[_0x2d8f6c];return _0x3a00f6;};'use strict';var url=require(_0x8053('0x0'));var BPromise=require('bluebird');var fs=require('fs');var host=_0x8053('0x1');module[_0x8053('0x2')]=function(_0x10d791,_0x3e60e3,_0x419d05){return new BPromise(function(_0x3a1c5e,_0x5b5b34){var _0x32db96;if(typeof _0x10d791!==_0x8053('0x3')||_0x10d791[_0x8053('0x4')]===0x0){return _0x5b5b34('filepath\x20should\x20be\x20a\x20string');}if(typeof _0x3e60e3!==_0x8053('0x3')||_0x3e60e3[_0x8053('0x4')]===0x0){return _0x5b5b34('key\x20should\x20be\x20a\x20string');}if(typeof _0x419d05!=='undefined'&&(typeof _0x419d05!=='string'||_0x419d05[_0x8053('0x4')]===0x0)){return _0x5b5b34('lang\x20should\x20be\x20a\x20string');}try{_0x32db96=fs['readFileSync'](_0x10d791)[_0x8053('0x5')](_0x8053('0x6'));}catch(_0x310866){return _0x5b5b34(_0x310866);}return _0x3a1c5e({'method':_0x8053('0x7'),'uri':host+_0x8053('0x8')+_0x3e60e3,'body':{'config':{'encoding':_0x8053('0x9'),'sampleRateHertz':_0x8053('0xa'),'languageCode':_0x419d05},'audio':{'content':_0x32db96}},'json':!![]});});};
\ No newline at end of file
index bc24358..2877579 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6db=['util','moment','google-tts-api','apiai-promise','./google','./aws','./tilde','../../../config/logger','agi','https:','host','get','statusCode','error','request\x20to\x20','\x20failed,\x20status\x20code\x20=\x20','statusMessage','finish','info','finish\x20download\x20file','close','unlink','download\x20error','end','protocol','WHAT_EVER','data','transcode','wav','error\x20convert','start','readFileSync','toString','base64','googleTTS','then','resolve','tmp','generate','.mp3','777','split','googleASR','asr','uri','results','map','alternatives','transcript','join','confidence','googleASR\x20transcription','googleASR\x20confidence','catch','[%s]\x20%s:%s','message','googleDialogflow','textRequest','stringify','source','result','action','actionIncomplete','speech','score','code','Tilde\x20ASR\x20transcription','awsPolly','.wav','chmodSync','ispeechTTS','format','%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3','ispeechASR','model=%s','freeform=3','parse','dirName','path','http','https','url','randomstring','sox','request-promise'];(function(_0x149ee8,_0x96d093){var _0x2af3e5=function(_0x5756bd){while(--_0x5756bd){_0x149ee8['push'](_0x149ee8['shift']());}};_0x2af3e5(++_0x96d093);}(_0xa6db,0xa3));var _0xba6d=function(_0x4a1c63,_0x47ca29){_0x4a1c63=_0x4a1c63-0x0;var _0x46b72b=_0xa6db[_0x4a1c63];return _0x46b72b;};'use strict';var fs=require('fs');var path=require(_0xba6d('0x0'));var http=require(_0xba6d('0x1'));var https=require(_0xba6d('0x2'));var urlParse=require(_0xba6d('0x3'))['parse'];var BPromise=require('bluebird');var rs=require(_0xba6d('0x4'));var sox=require(_0xba6d('0x5'));var rp=require(_0xba6d('0x6'));var util=require(_0xba6d('0x7'));var querystring=require('querystring');var moment=require(_0xba6d('0x8'));var tts=require(_0xba6d('0x9'));var apiai=require(_0xba6d('0xa'));var google=require(_0xba6d('0xb'));var aws=require(_0xba6d('0xc'));var tilde=require(_0xba6d('0xd'));var logger=require(_0xba6d('0xe'))(_0xba6d('0xf'));var ISPEECH_API='https://api.ispeech.org/api/rest';function downloadFile(_0x3c33d5,_0x251e0f){return new BPromise(function(_0x15b534,_0x2bba8d){var _0x131303=urlParse(_0x3c33d5);var _0x569683=_0x131303['protocol']===_0xba6d('0x10')?https:http;var _0x2ec28b={'host':_0x131303[_0xba6d('0x11')],'path':_0x131303[_0xba6d('0x0')],'headers':{'user-agent':'WHAT_EVER'}};_0x569683[_0xba6d('0x12')](_0x2ec28b,function(_0xb31245){if(_0xb31245[_0xba6d('0x13')]!==0xc8){logger[_0xba6d('0x14')](_0xba6d('0x15')+_0x3c33d5+_0xba6d('0x16')+_0xb31245[_0xba6d('0x13')]+'\x20('+_0xb31245[_0xba6d('0x17')]+')');_0x2bba8d(new Error(_0xba6d('0x15')+_0x3c33d5+_0xba6d('0x16')+_0xb31245[_0xba6d('0x13')]+'\x20('+_0xb31245[_0xba6d('0x17')]+')'));return;}var _0x2bade8=fs['createWriteStream'](_0x251e0f);_0x2bade8['on'](_0xba6d('0x18'),function(){logger[_0xba6d('0x19')](_0xba6d('0x1a'));_0x2bade8[_0xba6d('0x1b')](_0x15b534);});_0x2bade8['on'](_0xba6d('0x14'),function(_0x357abc){fs[_0xba6d('0x1c')](_0x251e0f);logger[_0xba6d('0x14')](_0xba6d('0x1d'),_0x357abc);_0x2bba8d(_0x357abc);});_0xb31245['pipe'](_0x2bade8);})['on'](_0xba6d('0x14'),function(_0x2ad0d8){logger[_0xba6d('0x14')](_0x2ad0d8);_0x2bba8d(_0x2ad0d8);})[_0xba6d('0x1e')]();});}function uploadFile(_0x53176a){return new BPromise(function(_0xc42d45,_0x558ee8){var _0x16943f=urlParse(_0x53176a);var _0x579034=_0x16943f[_0xba6d('0x1f')]===_0xba6d('0x10')?https:http;var _0x55229a={'host':_0x16943f[_0xba6d('0x11')],'path':_0x16943f[_0xba6d('0x0')],'headers':{'user-agent':_0xba6d('0x20')}};_0x579034[_0xba6d('0x12')](_0x55229a,function(_0x3769e9){if(_0x3769e9['statusCode']!==0xc8){_0x558ee8(new Error(_0xba6d('0x15')+_0x53176a+'\x20failed,\x20status\x20code\x20=\x20'+_0x3769e9['statusCode']+'\x20('+_0x3769e9[_0xba6d('0x17')]+')'));return;}var _0x5060e9='';_0x3769e9['on'](_0xba6d('0x21'),function(_0x8effd7){_0x5060e9+=_0x8effd7;});_0x3769e9['on'](_0xba6d('0x1e'),function(){_0xc42d45(_0x5060e9);});})['on'](_0xba6d('0x14'),function(_0x59a175){_0x558ee8(_0x59a175);})[_0xba6d('0x1e')]();});}function convertFile(_0x15e6c7,_0x28f9b6){return new BPromise(function(_0x4295b5,_0x3bf56e){var _0x3996b0=sox[_0xba6d('0x22')](_0x15e6c7,_0x28f9b6,{'sampleRate':0x1f40,'format':_0xba6d('0x23'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x3996b0['on']('error',function(_0x5b20cc){logger[_0xba6d('0x14')](_0xba6d('0x24'),_0x5b20cc);_0x3bf56e(_0x5b20cc);});_0x3996b0['on'](_0xba6d('0x1e'),function(){logger['info']('finish\x20to\x20convert');_0x4295b5();});_0x3996b0[_0xba6d('0x25')]();});}function base64Encode(_0x3840ef){var _0x30a2f0=fs[_0xba6d('0x26')](_0x3840ef);return new Buffer(_0x30a2f0)[_0xba6d('0x27')](_0xba6d('0x28'));}exports[_0xba6d('0x29')]=function(_0x58b309,_0x2c136d){var _0xa57adc,_0x26d472;return tts(_0x58b309,_0x2c136d||'en',0x1)[_0xba6d('0x2a')](function(_0x174a65){logger[_0xba6d('0x19')](_0x174a65);_0xa57adc=path[_0xba6d('0x2b')](__dirname,_0xba6d('0x2c'),rs[_0xba6d('0x2d')](0x4)+_0xba6d('0x2e'));return downloadFile(_0x174a65,_0xa57adc);})['then'](function(){_0x26d472=path['resolve'](__dirname,_0xba6d('0x2c'),rs[_0xba6d('0x2d')](0x4)+'.wav');return convertFile(_0xa57adc,_0x26d472);})[_0xba6d('0x2a')](function(){try{fs[_0xba6d('0x1c')](_0xa57adc);fs['chmodSync'](_0x26d472,_0xba6d('0x2f'));}catch(_0x29051e){logger['error'](_0x29051e);}logger[_0xba6d('0x19')]('goggleTTS\x20path',_0x26d472[_0xba6d('0x30')]('.')[0x0]);return _0x26d472[_0xba6d('0x30')]('.')[0x0];});};exports[_0xba6d('0x31')]=function(_0x9a8598,_0x3e65e7,_0x36ca93){return google[_0xba6d('0x32')](_0x9a8598,_0x3e65e7,_0x36ca93)[_0xba6d('0x2a')](function(_0xdafd07){logger[_0xba6d('0x19')](_0xdafd07[_0xba6d('0x33')]);return rp(_0xdafd07);})['then'](function(_0x5e3eb1){var _0x1f2501='';var _0x5680b9=0x0;try{fs[_0xba6d('0x1c')](_0x9a8598);}catch(_0xd30e0a){logger[_0xba6d('0x14')](_0xd30e0a);}if(_0x5e3eb1&&_0x5e3eb1[_0xba6d('0x34')]){_0x1f2501=_0x5e3eb1[_0xba6d('0x34')][_0xba6d('0x35')](function(_0x33800f){return _0x33800f&&_0x33800f[_0xba6d('0x36')][0x0]&&_0x33800f[_0xba6d('0x36')][0x0][_0xba6d('0x37')]?_0x33800f[_0xba6d('0x36')][0x0][_0xba6d('0x37')]:'';})[_0xba6d('0x38')]('\x0a');_0x5680b9=_0x5e3eb1['results']['map'](function(_0x53099e){return _0x53099e&&_0x53099e[_0xba6d('0x36')][0x0]&&_0x53099e[_0xba6d('0x36')][0x0][_0xba6d('0x39')]?_0x53099e[_0xba6d('0x36')][0x0][_0xba6d('0x39')]:0x0;})['join']('\x0a');}logger[_0xba6d('0x19')](_0xba6d('0x3a'),_0x1f2501);logger[_0xba6d('0x19')](_0xba6d('0x3b'),_0x5680b9);return{'transcript':_0x1f2501,'confidence':_0x5680b9};})[_0xba6d('0x3c')](function(_0x131abc){logger[_0xba6d('0x14')](_0xba6d('0x3d'),_0x131abc[_0xba6d('0x13')],_0x131abc['name'],_0x131abc[_0xba6d('0x3e')]);});};exports[_0xba6d('0x3f')]=function(_0x870d07,_0x5821b7,_0x49382b,_0x12f4e4){var _0x562831=apiai(_0x5821b7,{'language':_0x12f4e4||'en'});return _0x562831[_0xba6d('0x40')](_0x49382b,{'sessionId':_0x870d07})[_0xba6d('0x2a')](function(_0x125604){logger['info'](JSON[_0xba6d('0x41')](_0x125604));return{'source':_0x125604['result'][_0xba6d('0x42')],'resolvedQuery':_0x125604[_0xba6d('0x43')]['resolvedQuery'],'action':_0x125604[_0xba6d('0x43')][_0xba6d('0x44')],'actionIncomplete':_0x125604['result'][_0xba6d('0x45')],'speech':_0x125604['result']['fulfillment'][_0xba6d('0x46')],'score':_0x125604['result'][_0xba6d('0x47')],'statusCode':_0x125604['status'][_0xba6d('0x48')]};});};exports['tildeASR']=function(_0x3a0da2,_0x4026c5,_0x1654fd,_0x467059){return tilde[_0xba6d('0x32')](_0x3a0da2,_0x4026c5,_0x1654fd,_0x467059)[_0xba6d('0x2a')](function(_0x485a72){try{fs[_0xba6d('0x1c')](_0x3a0da2);}catch(_0x4ac49f){logger[_0xba6d('0x14')](_0x4ac49f);}logger[_0xba6d('0x19')](_0xba6d('0x49'),_0x485a72['transcript']);logger[_0xba6d('0x19')]('Tilde\x20ASR\x20confidence',_0x485a72[_0xba6d('0x39')]);return _0x485a72;});};exports[_0xba6d('0x4a')]=function(_0x2b284e,_0x2d8ec7,_0x36001a,_0x1be152,_0x201eb2,_0x44576b){var _0x69c49b=path[_0xba6d('0x2b')](__dirname,_0xba6d('0x2c'),rs[_0xba6d('0x2d')](0x4)+'.mp3');var _0x2d1f2f;return aws['polly'](_0x2b284e,_0x2d8ec7,_0x36001a,_0x1be152,_0x201eb2,_0x44576b,_0x69c49b)[_0xba6d('0x2a')](function(){_0x2d1f2f=path[_0xba6d('0x2b')](__dirname,_0xba6d('0x2c'),rs[_0xba6d('0x2d')](0x4)+_0xba6d('0x4b'));return convertFile(_0x69c49b,_0x2d1f2f);})[_0xba6d('0x2a')](function(){try{fs[_0xba6d('0x1c')](_0x69c49b);fs[_0xba6d('0x4c')](_0x2d1f2f,_0xba6d('0x2f'));}catch(_0x57d42a){logger[_0xba6d('0x14')](_0x57d42a);}return _0x2d1f2f[_0xba6d('0x30')]('.')[0x0];});};exports[_0xba6d('0x4d')]=function(_0x2fff8f,_0x5db376,_0x49a88d,_0x1eb45a){var _0x320c1b=util[_0xba6d('0x4e')](_0xba6d('0x4f'),ISPEECH_API,_0x2fff8f,encodeURIComponent(_0x5db376),_0x49a88d,_0x1eb45a);var _0x10245d=path[_0xba6d('0x2b')](__dirname,_0xba6d('0x2c'),rs[_0xba6d('0x2d')](0x4)+'.mp3');var _0x60ff4f;return downloadFile(_0x320c1b,_0x10245d)[_0xba6d('0x2a')](function(){_0x60ff4f=path[_0xba6d('0x2b')](__dirname,_0xba6d('0x2c'),rs['generate'](0x4)+_0xba6d('0x4b'));return convertFile(_0x10245d,_0x60ff4f);})['then'](function(){try{fs[_0xba6d('0x1c')](_0x10245d);fs[_0xba6d('0x4c')](_0x60ff4f,'777');}catch(_0x23db3d){logger[_0xba6d('0x14')](_0x23db3d);}return _0x60ff4f[_0xba6d('0x30')]('.')[0x0];});};exports[_0xba6d('0x50')]=function(_0x1a7d20,_0x38c83a,_0x119be2,_0x2768a5){var _0x35ad42=util[_0xba6d('0x4e')]('%s?apikey=%s&action=recognize&locale=%s&content-type=audio/x-wav&audio=%s&%s',ISPEECH_API,_0x38c83a,_0x119be2,base64Encode(_0x1a7d20),_0x2768a5?util[_0xba6d('0x4e')](_0xba6d('0x51'),encodeURIComponent(_0x2768a5)):_0xba6d('0x52'));return uploadFile(_0x35ad42)[_0xba6d('0x2a')](function(_0x10215c){return querystring[_0xba6d('0x53')](_0x10215c);});};exports[_0xba6d('0x54')]=function(){return __dirname;};
\ No newline at end of file
+var _0x4210=['generate','tmp','.wav','777','goggleTTS\x20path','asr','uri','results','map','alternatives','transcript','join','confidence','googleASR\x20transcription','googleASR\x20confidence','catch','[%s]\x20%s:%s','name','message','googleDialogflow','textRequest','stringify','result','source','resolvedQuery','action','actionIncomplete','fulfillment','speech','score','status','code','tildeASR','Tilde\x20ASR\x20transcription','awsPolly','.mp3','polly','chmodSync','split','ispeechTTS','format','%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3','ispeechASR','%s?apikey=%s&action=recognize&locale=%s&content-type=audio/x-wav&audio=%s&%s','model=%s','freeform=3','dirName','path','http','https','url','parse','bluebird','randomstring','sox','request-promise','util','querystring','moment','google-tts-api','apiai-promise','./google','./aws','../../../config/logger','https://api.ispeech.org/api/rest','protocol','https:','host','WHAT_EVER','get','statusCode','error','statusMessage','\x20failed,\x20status\x20code\x20=\x20','createWriteStream','finish','unlink','download\x20error','pipe','end','request\x20to\x20','data','wav','error\x20convert','info','finish\x20to\x20convert','start','readFileSync','toString','base64','googleTTS','then','resolve'];(function(_0x3dc538,_0x4f7702){var _0x72c2fd=function(_0x5a7260){while(--_0x5a7260){_0x3dc538['push'](_0x3dc538['shift']());}};_0x72c2fd(++_0x4f7702);}(_0x4210,0xe9));var _0x0421=function(_0x32cfd2,_0x386dbf){_0x32cfd2=_0x32cfd2-0x0;var _0x57942b=_0x4210[_0x32cfd2];return _0x57942b;};'use strict';var fs=require('fs');var path=require(_0x0421('0x0'));var http=require(_0x0421('0x1'));var https=require(_0x0421('0x2'));var urlParse=require(_0x0421('0x3'))[_0x0421('0x4')];var BPromise=require(_0x0421('0x5'));var rs=require(_0x0421('0x6'));var sox=require(_0x0421('0x7'));var rp=require(_0x0421('0x8'));var util=require(_0x0421('0x9'));var querystring=require(_0x0421('0xa'));var moment=require(_0x0421('0xb'));var tts=require(_0x0421('0xc'));var apiai=require(_0x0421('0xd'));var google=require(_0x0421('0xe'));var aws=require(_0x0421('0xf'));var tilde=require('./tilde');var logger=require(_0x0421('0x10'))('agi');var ISPEECH_API=_0x0421('0x11');function downloadFile(_0x131269,_0x3bf669){return new BPromise(function(_0x1a12cf,_0x342ad3){var _0x4d1241=urlParse(_0x131269);var _0x221d49=_0x4d1241[_0x0421('0x12')]===_0x0421('0x13')?https:http;var _0x1154d0={'host':_0x4d1241[_0x0421('0x14')],'path':_0x4d1241[_0x0421('0x0')],'headers':{'user-agent':_0x0421('0x15')}};_0x221d49[_0x0421('0x16')](_0x1154d0,function(_0x388fd0){if(_0x388fd0[_0x0421('0x17')]!==0xc8){logger[_0x0421('0x18')]('request\x20to\x20'+_0x131269+'\x20failed,\x20status\x20code\x20=\x20'+_0x388fd0[_0x0421('0x17')]+'\x20('+_0x388fd0[_0x0421('0x19')]+')');_0x342ad3(new Error('request\x20to\x20'+_0x131269+_0x0421('0x1a')+_0x388fd0[_0x0421('0x17')]+'\x20('+_0x388fd0['statusMessage']+')'));return;}var _0x2f183=fs[_0x0421('0x1b')](_0x3bf669);_0x2f183['on'](_0x0421('0x1c'),function(){logger['info']('finish\x20download\x20file');_0x2f183['close'](_0x1a12cf);});_0x2f183['on'](_0x0421('0x18'),function(_0x4cfa14){fs[_0x0421('0x1d')](_0x3bf669);logger[_0x0421('0x18')](_0x0421('0x1e'),_0x4cfa14);_0x342ad3(_0x4cfa14);});_0x388fd0[_0x0421('0x1f')](_0x2f183);})['on']('error',function(_0x39f8ab){logger[_0x0421('0x18')](_0x39f8ab);_0x342ad3(_0x39f8ab);})[_0x0421('0x20')]();});}function uploadFile(_0xa39d38){return new BPromise(function(_0x312c73,_0x28442d){var _0x37ae0a=urlParse(_0xa39d38);var _0x215ab3=_0x37ae0a[_0x0421('0x12')]===_0x0421('0x13')?https:http;var _0x1daf37={'host':_0x37ae0a[_0x0421('0x14')],'path':_0x37ae0a[_0x0421('0x0')],'headers':{'user-agent':'WHAT_EVER'}};_0x215ab3[_0x0421('0x16')](_0x1daf37,function(_0x5c3aed){if(_0x5c3aed[_0x0421('0x17')]!==0xc8){_0x28442d(new Error(_0x0421('0x21')+_0xa39d38+_0x0421('0x1a')+_0x5c3aed[_0x0421('0x17')]+'\x20('+_0x5c3aed['statusMessage']+')'));return;}var _0x5a6d08='';_0x5c3aed['on'](_0x0421('0x22'),function(_0x1248d0){_0x5a6d08+=_0x1248d0;});_0x5c3aed['on'](_0x0421('0x20'),function(){_0x312c73(_0x5a6d08);});})['on'](_0x0421('0x18'),function(_0x797f70){_0x28442d(_0x797f70);})['end']();});}function convertFile(_0x283871,_0x485a91){return new BPromise(function(_0x29db8f,_0x103411){var _0x55c514=sox['transcode'](_0x283871,_0x485a91,{'sampleRate':0x1f40,'format':_0x0421('0x23'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x55c514['on'](_0x0421('0x18'),function(_0x2d6d5d){logger[_0x0421('0x18')](_0x0421('0x24'),_0x2d6d5d);_0x103411(_0x2d6d5d);});_0x55c514['on'](_0x0421('0x20'),function(){logger[_0x0421('0x25')](_0x0421('0x26'));_0x29db8f();});_0x55c514[_0x0421('0x27')]();});}function base64Encode(_0x767592){var _0x5bb360=fs[_0x0421('0x28')](_0x767592);return new Buffer(_0x5bb360)[_0x0421('0x29')](_0x0421('0x2a'));}exports[_0x0421('0x2b')]=function(_0x567a6a,_0x3fb413){var _0x3acdfe,_0xebd5cf;return tts(_0x567a6a,_0x3fb413||'en',0x1)[_0x0421('0x2c')](function(_0x15247c){logger[_0x0421('0x25')](_0x15247c);_0x3acdfe=path[_0x0421('0x2d')](__dirname,'tmp',rs[_0x0421('0x2e')](0x4)+'.mp3');return downloadFile(_0x15247c,_0x3acdfe);})[_0x0421('0x2c')](function(){_0xebd5cf=path[_0x0421('0x2d')](__dirname,_0x0421('0x2f'),rs[_0x0421('0x2e')](0x4)+_0x0421('0x30'));return convertFile(_0x3acdfe,_0xebd5cf);})['then'](function(){try{fs[_0x0421('0x1d')](_0x3acdfe);fs['chmodSync'](_0xebd5cf,_0x0421('0x31'));}catch(_0x37b462){logger[_0x0421('0x18')](_0x37b462);}logger[_0x0421('0x25')](_0x0421('0x32'),_0xebd5cf['split']('.')[0x0]);return _0xebd5cf['split']('.')[0x0];});};exports['googleASR']=function(_0x1e2594,_0x6b2aff,_0x358045){return google[_0x0421('0x33')](_0x1e2594,_0x6b2aff,_0x358045)['then'](function(_0x5612f0){logger[_0x0421('0x25')](_0x5612f0[_0x0421('0x34')]);return rp(_0x5612f0);})[_0x0421('0x2c')](function(_0x24a823){var _0x29f6ec='';var _0x55f6c6=0x0;try{fs[_0x0421('0x1d')](_0x1e2594);}catch(_0x5175c4){logger['error'](_0x5175c4);}if(_0x24a823&&_0x24a823[_0x0421('0x35')]){_0x29f6ec=_0x24a823[_0x0421('0x35')][_0x0421('0x36')](function(_0x24717c){return _0x24717c&&_0x24717c[_0x0421('0x37')][0x0]&&_0x24717c[_0x0421('0x37')][0x0]['transcript']?_0x24717c[_0x0421('0x37')][0x0][_0x0421('0x38')]:'';})[_0x0421('0x39')]('\x0a');_0x55f6c6=_0x24a823[_0x0421('0x35')][_0x0421('0x36')](function(_0x11cb00){return _0x11cb00&&_0x11cb00[_0x0421('0x37')][0x0]&&_0x11cb00[_0x0421('0x37')][0x0][_0x0421('0x3a')]?_0x11cb00[_0x0421('0x37')][0x0]['confidence']:0x0;})[_0x0421('0x39')]('\x0a');}logger[_0x0421('0x25')](_0x0421('0x3b'),_0x29f6ec);logger[_0x0421('0x25')](_0x0421('0x3c'),_0x55f6c6);return{'transcript':_0x29f6ec,'confidence':_0x55f6c6};})[_0x0421('0x3d')](function(_0x537f62){logger[_0x0421('0x18')](_0x0421('0x3e'),_0x537f62[_0x0421('0x17')],_0x537f62[_0x0421('0x3f')],_0x537f62[_0x0421('0x40')]);});};exports[_0x0421('0x41')]=function(_0x1083f9,_0x573d21,_0x52e385,_0x2debc2){var _0x4bf828=apiai(_0x573d21,{'language':_0x2debc2||'en'});return _0x4bf828[_0x0421('0x42')](_0x52e385,{'sessionId':_0x1083f9})['then'](function(_0x19a094){logger['info'](JSON[_0x0421('0x43')](_0x19a094));return{'source':_0x19a094[_0x0421('0x44')][_0x0421('0x45')],'resolvedQuery':_0x19a094[_0x0421('0x44')][_0x0421('0x46')],'action':_0x19a094[_0x0421('0x44')][_0x0421('0x47')],'actionIncomplete':_0x19a094[_0x0421('0x44')][_0x0421('0x48')],'speech':_0x19a094[_0x0421('0x44')][_0x0421('0x49')][_0x0421('0x4a')],'score':_0x19a094['result'][_0x0421('0x4b')],'statusCode':_0x19a094[_0x0421('0x4c')][_0x0421('0x4d')]};});};exports[_0x0421('0x4e')]=function(_0x5bc882,_0x44f983,_0x2e6845,_0x3edcb9){return tilde[_0x0421('0x33')](_0x5bc882,_0x44f983,_0x2e6845,_0x3edcb9)[_0x0421('0x2c')](function(_0x31240b){try{fs[_0x0421('0x1d')](_0x5bc882);}catch(_0x16332a){logger[_0x0421('0x18')](_0x16332a);}logger[_0x0421('0x25')](_0x0421('0x4f'),_0x31240b[_0x0421('0x38')]);logger['info']('Tilde\x20ASR\x20confidence',_0x31240b[_0x0421('0x3a')]);return _0x31240b;});};exports[_0x0421('0x50')]=function(_0x58c936,_0x174a41,_0x123dad,_0x5b395b,_0x9c26c7,_0x236c0e){var _0x506c79=path[_0x0421('0x2d')](__dirname,_0x0421('0x2f'),rs['generate'](0x4)+_0x0421('0x51'));var _0x2a2458;return aws[_0x0421('0x52')](_0x58c936,_0x174a41,_0x123dad,_0x5b395b,_0x9c26c7,_0x236c0e,_0x506c79)[_0x0421('0x2c')](function(){_0x2a2458=path[_0x0421('0x2d')](__dirname,_0x0421('0x2f'),rs['generate'](0x4)+_0x0421('0x30'));return convertFile(_0x506c79,_0x2a2458);})['then'](function(){try{fs['unlink'](_0x506c79);fs[_0x0421('0x53')](_0x2a2458,_0x0421('0x31'));}catch(_0x70d10f){logger['error'](_0x70d10f);}return _0x2a2458[_0x0421('0x54')]('.')[0x0];});};exports[_0x0421('0x55')]=function(_0x4c1a7a,_0x23218a,_0x4e03a9,_0x473734){var _0x2b7218=util[_0x0421('0x56')](_0x0421('0x57'),ISPEECH_API,_0x4c1a7a,encodeURIComponent(_0x23218a),_0x4e03a9,_0x473734);var _0x31a7b4=path['resolve'](__dirname,_0x0421('0x2f'),rs[_0x0421('0x2e')](0x4)+_0x0421('0x51'));var _0x2a773a;return downloadFile(_0x2b7218,_0x31a7b4)[_0x0421('0x2c')](function(){_0x2a773a=path['resolve'](__dirname,_0x0421('0x2f'),rs[_0x0421('0x2e')](0x4)+_0x0421('0x30'));return convertFile(_0x31a7b4,_0x2a773a);})[_0x0421('0x2c')](function(){try{fs['unlink'](_0x31a7b4);fs[_0x0421('0x53')](_0x2a773a,_0x0421('0x31'));}catch(_0x267342){logger['error'](_0x267342);}return _0x2a773a[_0x0421('0x54')]('.')[0x0];});};exports[_0x0421('0x58')]=function(_0x349c3f,_0x2daf38,_0x96b469,_0x20f9d8){var _0x2d2d7c=util[_0x0421('0x56')](_0x0421('0x59'),ISPEECH_API,_0x2daf38,_0x96b469,base64Encode(_0x349c3f),_0x20f9d8?util[_0x0421('0x56')](_0x0421('0x5a'),encodeURIComponent(_0x20f9d8)):_0x0421('0x5b'));return uploadFile(_0x2d2d7c)[_0x0421('0x2c')](function(_0xee9859){return querystring['parse'](_0xee9859);});};exports[_0x0421('0x5c')]=function(){return __dirname;};
\ No newline at end of file
index 0f844d9..b41c112 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9fc=['./lib/api'];(function(_0x4fa438,_0x1f15a7){var _0x4e3958=function(_0x28f510){while(--_0x28f510){_0x4fa438['push'](_0x4fa438['shift']());}};_0x4e3958(++_0x1f15a7);}(_0xe9fc,0x13b));var _0xce9f=function(_0x1c34e7,_0x33f9a8){_0x1c34e7=_0x1c34e7-0x0;var _0x378cb1=_0xe9fc[_0x1c34e7];return _0x378cb1;};'use strict';var asr=require(_0xce9f('0x0'));module['exports']=function(_0x1ac7c0,_0x24ab75,_0x26c812,_0x228760){return asr(_0x1ac7c0,_0x24ab75,_0x26c812,_0x228760);};
\ No newline at end of file
+var _0x97fb=['./lib/api'];(function(_0x19d920,_0x4300b4){var _0x7ad1d5=function(_0x2f8317){while(--_0x2f8317){_0x19d920['push'](_0x19d920['shift']());}};_0x7ad1d5(++_0x4300b4);}(_0x97fb,0xe2));var _0xb97f=function(_0x19f9e6,_0x4f59a6){_0x19f9e6=_0x19f9e6-0x0;var _0x45c862=_0x97fb[_0x19f9e6];return _0x45c862;};'use strict';var asr=require(_0xb97f('0x0'));module['exports']=function(_0x3cf7c4,_0x3b6171,_0x223536,_0x43fdcd){return asr(_0x3cf7c4,_0x3b6171,_0x223536,_0x43fdcd);};
\ No newline at end of file
index 7635da9..d12489b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x03a1=['Open\x20Tilde\x20ASR\x20socket','unix','send','stringify','createReadStream','data','EOS','error','Tilde\x20ASR\x20send\x20error','terminate','parse','status','result','final','Tilde\x20ASR\x20hypoteses','hypotheses','likelihood','Aborted.\x20Recognition\x20was\x20aborted\x20for\x20some\x20reason.','Not\x20available.\x20Max\x20load\x20limit\x20reached.','Authentication\x20failed.','All\x20recognition\x20workers\x20are\x20currently\x20in\x20use\x20and\x20real-time\x20recognition\x20is\x20not\x20possible.','Close\x20Tilde\x20ASR\x20socket','Error\x20Tilde\x20ASR\x20socket','isNil','open','message','close','bluebird','lodash','moment','crypto','../../../../../../config/logger','agi','exports','info','Tilde\x20URI','wss://runa.tilde.lv/client/ws/speech/LVASR-ONLINE','No\x20speech.\x20Sent\x20when\x20the\x20incoming\x20audio\x20contains\x20a\x20large\x20portion\x20of\x20silence\x20or\x20non-speech','createHash','update','digest'];(function(_0x810025,_0x34bb04){var _0x4dbc81=function(_0x2c3907){while(--_0x2c3907){_0x810025['push'](_0x810025['shift']());}};_0x4dbc81(++_0x34bb04);}(_0x03a1,0x18c));var _0x103a=function(_0x2c1580,_0x58569f){_0x2c1580=_0x2c1580-0x0;var _0x1dc04c=_0x03a1[_0x2c1580];return _0x1dc04c;};'use strict';var BPromise=require(_0x103a('0x0'));var _=require(_0x103a('0x1'));var fs=require('fs');var WebSocket=require('ws');var moment=require(_0x103a('0x2'));var crypto=require(_0x103a('0x3'));var logger=require(_0x103a('0x4'))(_0x103a('0x5'));module[_0x103a('0x6')]=function(_0x1ae090,_0x414838,_0x3acdb2,_0x330cf0){return new BPromise(function(_0x2e1098,_0x143507){logger[_0x103a('0x7')](_0x103a('0x8'),_0x330cf0||_0x103a('0x9'));var _0x29e644=new WebSocket(_0x330cf0||_0x103a('0x9'),{'perMessageDeflate':![]});var _0x35759f='';var _0x109e32='0';var _0x2d0476='1';var _0xd3efed=_0x103a('0xa');function _0x549f07(_0x38a392){var _0x2b0b62=crypto[_0x103a('0xb')]('sha1');_0x2b0b62[_0x103a('0xc')](_0x38a392);return _0x2b0b62[_0x103a('0xd')]('hex');}function _0x1aa968(){try{logger['info'](_0x103a('0xe'));var _0x23ac05=moment()[_0x103a('0xf')]();var _0x52d557=_0x549f07(_0x23ac05+_0x414838+_0x3acdb2);_0x29e644[_0x103a('0x10')](JSON[_0x103a('0x11')]({'appID':_0x414838,'timestamp':_0x23ac05,'appKey':_0x52d557}));var _0x1e2a9c=fs[_0x103a('0x12')](_0x1ae090);_0x1e2a9c['on'](_0x103a('0x13'),function(_0x48877f){_0x29e644['send'](_0x48877f);});_0x1e2a9c['on']('close',function(){_0x29e644['send'](_0x103a('0x14'));});}catch(_0x57c292){logger[_0x103a('0x15')](_0x103a('0x16'),JSON[_0x103a('0x11')](_0x57c292));_0x29e644[_0x103a('0x17')]();}}function _0x5c81e5(_0x428c42){try{if(_0x428c42){var _0x16c44c=JSON[_0x103a('0x18')](_0x428c42);switch(_0x16c44c[_0x103a('0x19')]){case 0x0:if(_0x16c44c[_0x103a('0x1a')]){if(_0x16c44c['result'][_0x103a('0x1b')]){logger['info'](_0x103a('0x1c'),JSON[_0x103a('0x11')](_0x16c44c[_0x103a('0x1a')]['hypotheses']));_0x35759f=_0x16c44c[_0x103a('0x1a')]['hypotheses'][0x0]['transcript'];_0x109e32=_0x16c44c['result'][_0x103a('0x1d')][0x0][_0x103a('0x1e')];_0x2d0476='0';_0xd3efed='Success.';_0x29e644[_0x103a('0x17')]();}}break;case 0x1:logger[_0x103a('0x7')](_0x103a('0xa'));_0x2d0476='1';_0xd3efed=_0x103a('0xa');break;case 0x2:logger['info'](_0x103a('0x1f'));_0x2d0476='2';_0xd3efed=_0x103a('0x1f');break;case 0x9:logger[_0x103a('0x7')](_0x103a('0x20'));_0x2d0476='9';_0xd3efed=_0x103a('0x20');break;case 0xa:logger[_0x103a('0x7')](_0x103a('0x21'));_0x2d0476='10';_0xd3efed=_0x103a('0x21');break;case 0xb:logger[_0x103a('0x7')](_0x103a('0x22'));_0x2d0476='11';_0xd3efed=_0x103a('0x22');}}}catch(_0x1190a9){logger['error']('Tilde\x20ASR\x20parse\x20error',JSON['stringify'](_0x1190a9));_0x29e644[_0x103a('0x17')]();}}function _0x1f70b7(){logger[_0x103a('0x7')](_0x103a('0x23'));_0x2e1098({'transcript':_0x35759f,'confidence':_0x109e32,'status':_0x2d0476,'status_message':_0xd3efed});}function _0x2768c4(_0x31966b){logger['error'](_0x103a('0x24'));if(!_[_0x103a('0x25')](_0x31966b)){logger[_0x103a('0x15')](_['isObject'](_0x31966b)?JSON[_0x103a('0x11')](_0x31966b):_0x31966b);}}_0x29e644['on'](_0x103a('0x26'),_0x1aa968);_0x29e644['on'](_0x103a('0x27'),_0x5c81e5);_0x29e644['on'](_0x103a('0x28'),_0x1f70b7);_0x29e644['on'](_0x103a('0x15'),_0x2768c4);});};
\ No newline at end of file
+var _0x0b98=['result','hypotheses','transcript','No\x20speech.\x20Sent\x20when\x20the\x20incoming\x20audio\x20contains\x20a\x20large\x20portion\x20of\x20silence\x20or\x20non-speech','Aborted.\x20Recognition\x20was\x20aborted\x20for\x20some\x20reason.','Authentication\x20failed.','All\x20recognition\x20workers\x20are\x20currently\x20in\x20use\x20and\x20real-time\x20recognition\x20is\x20not\x20possible.','Tilde\x20ASR\x20parse\x20error','Close\x20Tilde\x20ASR\x20socket','Error\x20Tilde\x20ASR\x20socket','open','bluebird','lodash','crypto','../../../../../../config/logger','agi','exports','Tilde\x20URI','wss://runa.tilde.lv/client/ws/speech/LVASR-ONLINE','sha1','update','hex','Open\x20Tilde\x20ASR\x20socket','unix','send','createReadStream','data','close','EOS','error','Tilde\x20ASR\x20send\x20error','stringify','terminate','parse','status','final','info','Tilde\x20ASR\x20hypoteses'];(function(_0x1df3bc,_0x1b2b2e){var _0x921870=function(_0x271961){while(--_0x271961){_0x1df3bc['push'](_0x1df3bc['shift']());}};_0x921870(++_0x1b2b2e);}(_0x0b98,0xef));var _0x80b9=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x0b98[_0x14add3];return _0x4a174f;};'use strict';var BPromise=require(_0x80b9('0x0'));var _=require(_0x80b9('0x1'));var fs=require('fs');var WebSocket=require('ws');var moment=require('moment');var crypto=require(_0x80b9('0x2'));var logger=require(_0x80b9('0x3'))(_0x80b9('0x4'));module[_0x80b9('0x5')]=function(_0x3ac3ff,_0x32b03c,_0x4279cf,_0x341678){return new BPromise(function(_0x3fc41d,_0xf668cd){logger['info'](_0x80b9('0x6'),_0x341678||_0x80b9('0x7'));var _0x566ab0=new WebSocket(_0x341678||_0x80b9('0x7'),{'perMessageDeflate':![]});var _0x41b84a='';var _0x172965='0';var _0x1e507d='1';var _0x4a3a7b='No\x20speech.\x20Sent\x20when\x20the\x20incoming\x20audio\x20contains\x20a\x20large\x20portion\x20of\x20silence\x20or\x20non-speech';function _0x5e319d(_0x435533){var _0xa71f79=crypto['createHash'](_0x80b9('0x8'));_0xa71f79[_0x80b9('0x9')](_0x435533);return _0xa71f79['digest'](_0x80b9('0xa'));}function _0x28a117(){try{logger['info'](_0x80b9('0xb'));var _0x21980e=moment()[_0x80b9('0xc')]();var _0x2ffac0=_0x5e319d(_0x21980e+_0x32b03c+_0x4279cf);_0x566ab0[_0x80b9('0xd')](JSON['stringify']({'appID':_0x32b03c,'timestamp':_0x21980e,'appKey':_0x2ffac0}));var _0x129e16=fs[_0x80b9('0xe')](_0x3ac3ff);_0x129e16['on'](_0x80b9('0xf'),function(_0x4a10bc){_0x566ab0[_0x80b9('0xd')](_0x4a10bc);});_0x129e16['on'](_0x80b9('0x10'),function(){_0x566ab0['send'](_0x80b9('0x11'));});}catch(_0x47b9a1){logger[_0x80b9('0x12')](_0x80b9('0x13'),JSON[_0x80b9('0x14')](_0x47b9a1));_0x566ab0[_0x80b9('0x15')]();}}function _0x1140f1(_0x2a933f){try{if(_0x2a933f){var _0x1870a7=JSON[_0x80b9('0x16')](_0x2a933f);switch(_0x1870a7[_0x80b9('0x17')]){case 0x0:if(_0x1870a7['result']){if(_0x1870a7['result'][_0x80b9('0x18')]){logger[_0x80b9('0x19')](_0x80b9('0x1a'),JSON[_0x80b9('0x14')](_0x1870a7[_0x80b9('0x1b')][_0x80b9('0x1c')]));_0x41b84a=_0x1870a7[_0x80b9('0x1b')][_0x80b9('0x1c')][0x0][_0x80b9('0x1d')];_0x172965=_0x1870a7['result'][_0x80b9('0x1c')][0x0]['likelihood'];_0x1e507d='0';_0x4a3a7b='Success.';_0x566ab0[_0x80b9('0x15')]();}}break;case 0x1:logger[_0x80b9('0x19')](_0x80b9('0x1e'));_0x1e507d='1';_0x4a3a7b='No\x20speech.\x20Sent\x20when\x20the\x20incoming\x20audio\x20contains\x20a\x20large\x20portion\x20of\x20silence\x20or\x20non-speech';break;case 0x2:logger[_0x80b9('0x19')](_0x80b9('0x1f'));_0x1e507d='2';_0x4a3a7b=_0x80b9('0x1f');break;case 0x9:logger[_0x80b9('0x19')]('Not\x20available.\x20Max\x20load\x20limit\x20reached.');_0x1e507d='9';_0x4a3a7b='Not\x20available.\x20Max\x20load\x20limit\x20reached.';break;case 0xa:logger['info']('Authentication\x20failed.');_0x1e507d='10';_0x4a3a7b=_0x80b9('0x20');break;case 0xb:logger[_0x80b9('0x19')](_0x80b9('0x21'));_0x1e507d='11';_0x4a3a7b=_0x80b9('0x21');}}}catch(_0xfa6209){logger['error'](_0x80b9('0x22'),JSON[_0x80b9('0x14')](_0xfa6209));_0x566ab0[_0x80b9('0x15')]();}}function _0x51f12d(){logger[_0x80b9('0x19')](_0x80b9('0x23'));_0x3fc41d({'transcript':_0x41b84a,'confidence':_0x172965,'status':_0x1e507d,'status_message':_0x4a3a7b});}function _0x139cb1(_0xbb5eed){logger[_0x80b9('0x12')](_0x80b9('0x24'));if(!_['isNil'](_0xbb5eed)){logger[_0x80b9('0x12')](_['isObject'](_0xbb5eed)?JSON[_0x80b9('0x14')](_0xbb5eed):_0xbb5eed);}}_0x566ab0['on'](_0x80b9('0x25'),_0x28a117);_0x566ab0['on']('message',_0x1140f1);_0x566ab0['on'](_0x80b9('0x10'),_0x51f12d);_0x566ab0['on'](_0x80b9('0x12'),_0x139cb1);});};
\ No newline at end of file
index bc76b92..10cb4be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['exports','./asr'];(function(_0x4351d7,_0x323cbe){var _0x37d884=function(_0x1029f5){while(--_0x1029f5){_0x4351d7['push'](_0x4351d7['shift']());}};_0x37d884(++_0x323cbe);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5b78e8,_0x55096b){_0x5b78e8=_0x5b78e8-0x0;var _0xf2c321=_0xa9e0[_0x5b78e8];return _0xf2c321;};var asr=require(_0x0a9e('0x0'));module[_0x0a9e('0x1')]={'asr':asr};
\ No newline at end of file
+var asr=require('./asr');module['exports']={'asr':asr};
\ No newline at end of file
index 181270f..cd9814a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x87ac=['inherits','util','events','EventEmitter','./channel','0.0.0.0','call','emit','error','E_AGI_ARGUMENT_PORT','listen','listening','connection','getConnections','E_AGI_SERVER_ERROR','E_AGI_SERVER_VOICE_DISABLED','destroy','E_AGI_SERVER_MAXCONNECTION','ready','code','close','E_AGI_SERVER_CLOSE','nextTick'];(function(_0x5a2bda,_0x59f6ea){var _0x5b49d2=function(_0x20f580){while(--_0x20f580){_0x5a2bda['push'](_0x5a2bda['shift']());}};_0x5b49d2(++_0x59f6ea);}(_0x87ac,0x74));var _0xc87a=function(_0x36909d,_0x2795f1){_0x36909d=_0x36909d-0x0;var _0x1fd29d=_0x87ac[_0x36909d];return _0x1fd29d;};'use strict';var util=require(_0xc87a('0x0'));var net=require('net');var EventEmitter=require(_0xc87a('0x1'))[_0xc87a('0x2')];var AGIError=require('./error');var AGIChannel=require(_0xc87a('0x3'));var AGIServer=function(_0x5e8961,_0x1bdac8,_0x5410be){var _0x503f98=this,_0x5e8961=_0x5e8961||0x11dd,_0x1bdac8=_0x1bdac8||_0xc87a('0x4'),_0x2f6f1b=null,_0x12051d=0x0;EventEmitter[_0xc87a('0x5')](_0x503f98);function _0x4d45aa(){if(!_0x5e8961){_0x503f98[_0xc87a('0x6')](_0xc87a('0x7'),new AGIError(_0xc87a('0x8')));return![];}_0x2f6f1b=net['createServer']();_0x2f6f1b[_0xc87a('0x9')](_0x5e8961,_0x1bdac8);_0x2f6f1b['on'](_0xc87a('0xa'),function(){_0x503f98[_0xc87a('0x6')](_0xc87a('0xa'));});_0x2f6f1b['on'](_0xc87a('0xb'),function(_0x2f0ce5){_0x2f6f1b[_0xc87a('0xc')](function(_0x10675d,_0x24e55b){if(_0x10675d){_0x503f98[_0xc87a('0x6')]('error',new AGIError(_0xc87a('0xd'),_0x10675d));}else if(_0x5410be&&_0x5410be<0x0){_0x503f98[_0xc87a('0x6')](_0xc87a('0x7'),new AGIError(_0xc87a('0xe')));_0x2f0ce5[_0xc87a('0xf')]();}else if(_0x5410be&&_0x5410be>0x0&&_0x5410be<_0x24e55b){_0x12051d+=0x1;_0x503f98[_0xc87a('0x6')]('error',new AGIError(_0xc87a('0x10'),_0x12051d));_0x2f0ce5[_0xc87a('0xf')]();}else{var _0x221175=new AGIChannel(_0x2f0ce5);_0x221175['on'](_0xc87a('0x11'),function(){_0x503f98[_0xc87a('0x6')]('connection',_0x221175);});}});});_0x2f6f1b['on']('error',function(_0x1ac05d){_0x503f98[_0xc87a('0x6')](_0xc87a('0x7'),new AGIError('E_AGI_SERVER_ERROR',_0x1ac05d[_0xc87a('0x12')]));});_0x2f6f1b['on'](_0xc87a('0x13'),function(){_0x503f98[_0xc87a('0x6')](_0xc87a('0x13'),new AGIError(_0xc87a('0x14')));});}process[_0xc87a('0x15')](function(){_0x4d45aa();});};util[_0xc87a('0x16')](AGIServer,EventEmitter);module['exports']=function(_0x220a02,_0x57e817,_0x3976b2){return new AGIServer(_0x220a02,_0x57e817,_0x3976b2);};
\ No newline at end of file
+var _0xc0d1=['inherits','exports','util','net','EventEmitter','./error','0.0.0.0','emit','error','createServer','listen','listening','getConnections','E_AGI_SERVER_ERROR','E_AGI_SERVER_MAXCONNECTION','destroy','ready','connection','code','close','E_AGI_SERVER_CLOSE'];(function(_0x4d6298,_0x502f6b){var _0x57ccf0=function(_0x3cef94){while(--_0x3cef94){_0x4d6298['push'](_0x4d6298['shift']());}};_0x57ccf0(++_0x502f6b);}(_0xc0d1,0xd4));var _0x1c0d=function(_0x59ee6f,_0x450239){_0x59ee6f=_0x59ee6f-0x0;var _0x4c0979=_0xc0d1[_0x59ee6f];return _0x4c0979;};'use strict';var util=require(_0x1c0d('0x0'));var net=require(_0x1c0d('0x1'));var EventEmitter=require('events')[_0x1c0d('0x2')];var AGIError=require(_0x1c0d('0x3'));var AGIChannel=require('./channel');var AGIServer=function(_0x3cdb5c,_0x31f44c,_0x1c9294){var _0x34293e=this,_0x3cdb5c=_0x3cdb5c||0x11dd,_0x31f44c=_0x31f44c||_0x1c0d('0x4'),_0x5a3564=null,_0x37e884=0x0;EventEmitter['call'](_0x34293e);function _0x1a7918(){if(!_0x3cdb5c){_0x34293e[_0x1c0d('0x5')](_0x1c0d('0x6'),new AGIError('E_AGI_ARGUMENT_PORT'));return![];}_0x5a3564=net[_0x1c0d('0x7')]();_0x5a3564[_0x1c0d('0x8')](_0x3cdb5c,_0x31f44c);_0x5a3564['on'](_0x1c0d('0x9'),function(){_0x34293e[_0x1c0d('0x5')](_0x1c0d('0x9'));});_0x5a3564['on']('connection',function(_0x200f68){_0x5a3564[_0x1c0d('0xa')](function(_0x1bd3e2,_0x4a56b0){if(_0x1bd3e2){_0x34293e[_0x1c0d('0x5')](_0x1c0d('0x6'),new AGIError(_0x1c0d('0xb'),_0x1bd3e2));}else if(_0x1c9294&&_0x1c9294<0x0){_0x34293e[_0x1c0d('0x5')](_0x1c0d('0x6'),new AGIError('E_AGI_SERVER_VOICE_DISABLED'));_0x200f68['destroy']();}else if(_0x1c9294&&_0x1c9294>0x0&&_0x1c9294<_0x4a56b0){_0x37e884+=0x1;_0x34293e['emit'](_0x1c0d('0x6'),new AGIError(_0x1c0d('0xc'),_0x37e884));_0x200f68[_0x1c0d('0xd')]();}else{var _0x3ae39f=new AGIChannel(_0x200f68);_0x3ae39f['on'](_0x1c0d('0xe'),function(){_0x34293e['emit'](_0x1c0d('0xf'),_0x3ae39f);});}});});_0x5a3564['on'](_0x1c0d('0x6'),function(_0x3502a3){_0x34293e[_0x1c0d('0x5')](_0x1c0d('0x6'),new AGIError('E_AGI_SERVER_ERROR',_0x3502a3[_0x1c0d('0x10')]));});_0x5a3564['on'](_0x1c0d('0x11'),function(){_0x34293e[_0x1c0d('0x5')]('close',new AGIError(_0x1c0d('0x12')));});}process['nextTick'](function(){_0x1a7918();});};util[_0x1c0d('0x13')](AGIServer,EventEmitter);module[_0x1c0d('0x14')]=function(_0x50d8b6,_0x58c027,_0xdc735b){return new AGIServer(_0x50d8b6,_0x58c027,_0xdc735b);};
\ No newline at end of file
index 7da4892..a61b17b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc12b=['getUserById','getTrunk','getTrunkById','getSound','getSoundById','getMailAccount','getMailAccountById','sendMailMessage','getIntervals','getIntervalById','map','interval','format','%s/sounds/converted/%s','getQueryOdbc','open','error','info','ODBC\x20connection\x20successfully','query','Query\x20executed\x20correctly\x20%s','close','Error\x20closing\x20connection\x20to\x20odbc\x20%s','getSmsAccount','getSmsAccountById','createSmsMessage','createSquareDetailsReport','uniqueid','channel','arg_1','createSquareRecording','callerid','extension','accountcode','dnid','createCmContact','isNil','callback_','random','isEmpty','lastName','list_id','scheduledAt','callback','toString','callback_priority','getPause','getPauseById','agentPause','agent','agentUnpause','agentLogout','internal','%s/%s@from-sip/n','LOCAL','agentLogin','exec','googleTTS','text','google_tts_language','googleDialogflow','key','ispeechTTS','speed','ispeechASR','ispeech_asr_language','en-US','isConfigured','model','awsPolly','aws_access_key_id','aws_secret_access_key','aws_polly_region','aws_polly_voice','Amy','aws_text_type','googleASR','google_asr_language','tildeASR','appid','uri','clear','includes','hasOwnProperty','isString','replaceAllVariables','split','length','replaceAll','extra','getAndSetVariable','result','The\x20\x22%s\x22\x20variable\x20value\x20is:\x20%s','setVariable','maxRetry','sync','retry','Enter\x20in\x20AGI\x20(%s)\x20block','label','agi','command','args','answer','Enter\x20in\x20ANSWER\x20(%s)\x20block','Wait\x20%s\x20seconds\x20before\x20answer','timeout','Enter\x20in\x20CALLBACK\x20(%s)\x20block','delay','add','noop','CALLBACK\x20added\x20phone:\x20%s\x20on\x20list:\x20%s\x20at\x20%s','phone','custom_app','Enter\x20in\x20CUSTOM\x20APP\x20(%s)\x20block','application','Executed\x20command\x20%s\x20%s','options','lumenvoxtts','Enter\x20in\x20LUMENVOXTTS\x20(%s)\x20block','MRCPSynth','Executed\x20command\x20MRCPSynth\x20%s','lumenvoxasr','grammar','no\x20grammar\x20configured','MRCPRecog','RECOG_CONFIDENCE()','LUMENVOX_ASR_CONFIDENCE','LUMENVOX_ASR_TRANSCRIPT','RECOG_INSTANCE()','LUMENVOX_ASR_INSTANCE','Executed\x20command\x20MRCPRecog\x20%s','database','odbc_id','no\x20database\x20selected','no\x20odbc\x20database\x20found','no\x20query\x20configured','replace','no\x20variable\x20selected\x20for\x20the\x20result','variable_id','no\x20variable\x20found','forEach','keys','%s[%s][%s]','%s_ROWS_COUNT','variable\x20%s\x20set','dial','debug','Enter\x20in\x20DIAL\x20(%s)\x20block','sip_id','no\x20user\x20selected','no\x20user\x20found','DIAL','SIP/%s','opts','url','Executed\x20command\x20%s','dialogflow','Enter\x20in\x20DIALOGFLOW\x20(%s)\x20block','no\x20key\x20configured','no\x20text\x20configured','Trying\x20Dialogflow:\x20%s','DIALOGFLOW_%s','speech','Google\x20TTS\x20is\x20unreachable','end','Enter\x20in\x20END\x20(%s)\x20block','ext_dial','Enter\x20in\x20EXTERNAL\x20DIAL\x20(%s)\x20block','trunk_id','no\x20trunk\x20selected','no\x20trunk\x20found','trunk_name','SIP/%s/%s','finally','Enter\x20in\x20FINALLY\x20(%s)\x20block','Enter\x20in\x20GETDIGITS\x20(%s)\x20block','no\x20file\x20audio\x20selected','file_id','no\x20file\x20audio\x20found','getData','response','maxdigit','test','stringify','mindigit','hiddendigitsnum','hiddendigitspos','substr','generate','Enter\x20in\x20GETSECRETDIGITS\x20(%s)\x20block','goalname','awspolly','[AGI]\x20Enter\x20in\x20AWSPOLLY\x20(%s)\x20block','Trying\x20aws\x20Polly\x20%s','aws\x20Polly\x20%s\x20file\x20created','streamFile','unlink','.wav','aws\x20Polly\x20is\x20unreachable','googleasr','wav','%s/recordings/%s','%s.%s','beep','recordFile','intKey','google\x20%s\x20file\x20created','GOOGLE_ASR_%s','toUpperCase','GoogleASR\x20Result\x20%s','tildeasr','no\x20appid\x20configured','no\x20appsecret\x20configured','NOBEEP','tilde\x20%s\x20file\x20created','TILDE_ASR_%s','TildeASR\x20Result\x20%s','gotoc','Enter\x20in\x20GOTO\x20(%s)\x20block','continueAt','priority','gotoif','Enter\x20in\x20GOTOIF\x20(%s)\x20block','condition','no\x20condition\x20configured','true','false','EVAL\x20CONDITION\x20%s\x20%s','gotoiftime','Enter\x20in\x20GOTOIFTIME\x20(%s)\x20block','interval_id','no\x20interval\x20configured','IFTIME\x20%s\x20%s','hangup','Enter\x20in\x20HANGUP\x20(%s)\x20block','Enter\x20in\x20ISPEECHASR\x20(%s)\x20block','ispeech\x20%s\x20file\x20created','ISPEECH_ASR_%s','IspeechASR\x20Result\x20%s','ispeechtts','Trying\x20ispeech\x20TTS\x20%s','ispeech\x20TTS\x20is\x20unreachable','findBy','no\x20find\x20by\x20configured','success','AGENT\x20%s\x20NOT\x20FOUND\x20BY','failure','logout','FIND\x20AGENT\x20%s\x20BY\x20%s','AGENT\x20%s\x20FOUND\x20BY','Enter\x20in\x20MATH\x20(%s)\x20block','no\x20operation\x20configured','operation','isArray','variable\x20%s[key]\x20set','Enter\x20in\x20MENU\x20(%s)\x20block','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','no\x20queue\x20selected','indexOf','XMCS-QUEUE','toLowerCase','QUEUE','gosub','position','record','Enter\x20in\x20RECORD\x20(%s)\x20block','%s_%s','%s/recordings/%s.%s','RECORDING_SAVENAME','escape_digits','saydigits','Enter\x20in\x20SAYDIGITS\x20(%s)\x20block','sayDigits','digits','saynumber','Enter\x20in\x20SAYNUMBER\x20(%s)\x20block','sayNumber','number','sayphonetic','Enter\x20in\x20SAYPHONETIC\x20(%s)\x20block','sayPhonetic','sendMail','account_id','Smtp','\x22%s\x22\x20<%s>','email','user','bcc','service','host','port','auth','template_id','sendMail\x20message','Mail\x20message\x20added\x20to\x20outgoing\x20process','sendFax','SENDFAX\x20block\x20not\x20implemented','sendSMS','Enter\x20in\x20SENDSMS\x20(%s)\x20block','sms_account_id','no\x20sms\x20account\x20configured','no\x20sms\x20account\x20found','sms_text','sendSMS\x20message','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','Answer','Skipped\x20Answer','subproject','Enter\x20in\x20SUBPROJECT\x20(%s)\x20block','project_id','no\x20subproject\x20found\x20with\x20id\x20%d','project\x20in\x20subproject\x20must\x20be\x20different\x20from\x20the\x20called\x20project','127.0.0.1','AGI','system','shellCommand','sh\x20command:\x20%s\x20result\x20no\x20stored','tts','Trying\x20Google\x20TTS\x20%s','Google\x20TTS\x20%s\x20file\x20created','voicemail','VOICEMAIL','mailbox','vswitch','Enter\x20in\x20SWITCH\x20(%s)\x20block','exports','util','lodash','shelljs','odbc','randomstring','moment','mustache','../../config/logger','../../config/environment','./scripts','/var/opt/motion2/server/files','menu','getdigits','getsecretdigits','getVariable','rpc','getVariableById','then','name','catch','prototype','getVoiceQueue','getVoiceQueueById','getSquareProject','getSquareProjectById','getSquareOdbc','getSquareOdbcById','getUser'];(function(_0xf33a,_0x1ed661){var _0x1b5797=function(_0x465198){while(--_0x465198){_0xf33a['push'](_0xf33a['shift']());}};_0x1b5797(++_0x1ed661);}(_0xc12b,0x156));var _0xbc12=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xc12b[_0x14add3];return _0x4a174f;};'use strict';var fs=require('fs');var path=require('path');var util=require(_0xbc12('0x0'));var _=require(_0xbc12('0x1'));var sh=require(_0xbc12('0x2'));var odbc=require(_0xbc12('0x3'))();var rs=require(_0xbc12('0x4'));var moment=require(_0xbc12('0x5'));var Mustache=require(_0xbc12('0x6'));var logger=require(_0xbc12('0x7'))('agi');var config=require(_0xbc12('0x8'));var scripts=require(_0xbc12('0x9'));var FILES_PATH=_0xbc12('0xa');var verticesWithRetry=[_0xbc12('0xb'),_0xbc12('0xc'),_0xbc12('0xd')];var AGIVertices=function(_0x4b8983,_0x51bc1f,_0x4367de){this['channel']=_0x4b8983;this['rpc']=_0x51bc1f;this['mailRpc']=_0x4367de;};AGIVertices['prototype'][_0xbc12('0xe')]=function(_0x361fe6,_0x26b305){this[_0xbc12('0xf')][_0xbc12('0x10')](_0x361fe6)[_0xbc12('0x11')](function(_0x116f9a){_0x26b305(null,_0x116f9a?_0x116f9a[_0xbc12('0x12')]:![]);})[_0xbc12('0x13')](function(_0xd8bc9b){_0x26b305(_0xd8bc9b);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x15')]=function(_0x11fbb2,_0x3e2014){this[_0xbc12('0xf')][_0xbc12('0x16')](_0x11fbb2)[_0xbc12('0x11')](function(_0x4fb43c){_0x3e2014(null,_0x4fb43c?_0x4fb43c[_0xbc12('0x12')]:![]);})[_0xbc12('0x13')](function(_0x17576e){_0x3e2014(_0x17576e);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x17')]=function(_0x340e79,_0x3e9eac){this[_0xbc12('0xf')][_0xbc12('0x18')](_0x340e79)['then'](function(_0x5c374a){_0x3e9eac(null,_0x5c374a?_0x5c374a[_0xbc12('0x12')]:![]);})['catch'](function(_0xd3fec7){_0x3e9eac(_0xd3fec7);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x19')]=function(_0x4be709,_0x36df9d){this[_0xbc12('0xf')][_0xbc12('0x1a')](_0x4be709)[_0xbc12('0x11')](function(_0x1bdc61){_0x36df9d(null,_0x1bdc61?_0x1bdc61['dsn']:![]);})['catch'](function(_0x3e9cda){_0x36df9d(_0x3e9cda);});};AGIVertices['prototype'][_0xbc12('0x1b')]=function(_0x261711,_0x431e8a){this['rpc'][_0xbc12('0x1c')](_0x261711)[_0xbc12('0x11')](function(_0x480252){_0x431e8a(null,_0x480252?_0x480252[_0xbc12('0x12')]:![]);})[_0xbc12('0x13')](function(_0x1d063b){_0x431e8a(_0x1d063b);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x1d')]=function(_0x2ed4ec,_0x5c8703){this[_0xbc12('0xf')][_0xbc12('0x1e')](_0x2ed4ec)[_0xbc12('0x11')](function(_0x22b80f){_0x5c8703(null,_0x22b80f?_0x22b80f[_0xbc12('0x12')]:![]);})[_0xbc12('0x13')](function(_0x1146e3){_0x5c8703(_0x1146e3);});};AGIVertices['prototype'][_0xbc12('0x1f')]=function(_0x3ac703,_0x3bc571){var _0x47f411=this;this[_0xbc12('0xf')][_0xbc12('0x20')](_0x3ac703)[_0xbc12('0x11')](function(_0x1fe7c6){_0x3bc571(null,_0x1fe7c6?_0x47f411['getSoundPath'](_0x1fe7c6['save_name']):![]);})[_0xbc12('0x13')](function(_0xebfa2d){_0x3bc571(_0xebfa2d);});};AGIVertices['prototype'][_0xbc12('0x21')]=function(_0xc975a0,_0x58f063){this[_0xbc12('0xf')][_0xbc12('0x22')](_0xc975a0)[_0xbc12('0x11')](function(_0x513434){_0x58f063(null,_0x513434?_0x513434:![]);})[_0xbc12('0x13')](function(_0xfeb574){_0x58f063(_0xfeb574);});};AGIVertices['prototype'][_0xbc12('0x23')]=function(_0x263378,_0x10edcd,_0x123dfd){this['mailRpc'][_0xbc12('0x23')](_0x263378,_0x10edcd)[_0xbc12('0x11')](function(){_0x123dfd(null);})[_0xbc12('0x13')](function(_0x39a8a5){_0x123dfd(_0x39a8a5);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x24')]=function(_0x566ce8,_0x336b93){this[_0xbc12('0xf')][_0xbc12('0x25')](_0x566ce8)[_0xbc12('0x11')](function(_0x1b5cd3){if(_0x1b5cd3){if(_0x1b5cd3['IntervalId']){_0x336b93(null,[_0x1b5cd3['interval']]);}else{_0x336b93(null,_[_0xbc12('0x26')](_0x1b5cd3['Intervals'],_0xbc12('0x27')));}}else{_0x336b93(null,![]);}})['catch'](function(_0x3f798c){_0x336b93(_0x3f798c);});};AGIVertices[_0xbc12('0x14')]['getSoundPath']=function(_0x489030){return util[_0xbc12('0x28')](_0xbc12('0x29'),FILES_PATH,_0x489030);};AGIVertices[_0xbc12('0x14')][_0xbc12('0x2a')]=function(_0x119125,_0xb444ab,_0x270059){odbc[_0xbc12('0x2b')](_0x119125,function(_0x519998){if(_0x519998){logger[_0xbc12('0x2c')]('Error\x20getting\x20ODBC\x20connection\x20%s',_0x519998);_0x270059(_0x519998);}else{logger[_0xbc12('0x2d')](_0xbc12('0x2e'));odbc[_0xbc12('0x2f')](_0xb444ab,function(_0x2c160d,_0x327102){if(_0x2c160d){logger['info']('Error\x20executing\x20query\x20%s',_0xb444ab);_0x270059(_0x2c160d);}else{logger[_0xbc12('0x2d')](_0xbc12('0x30'),_0xb444ab);odbc[_0xbc12('0x31')](function(_0x49624a){if(_0x49624a){logger['error'](_0xbc12('0x32'),_0x49624a);}_0x270059(null,_0x327102);});}});}});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x33')]=function(_0x50836a,_0x21fc8f){this[_0xbc12('0xf')][_0xbc12('0x34')](_0x50836a)['then'](function(_0x5416bc){_0x21fc8f(null,_0x5416bc?_0x5416bc:![]);})[_0xbc12('0x13')](function(_0x3460b5){_0x21fc8f(_0x3460b5);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x35')]=function(_0x1785ff,_0x416a1d){this[_0xbc12('0xf')][_0xbc12('0x35')](_0x1785ff)[_0xbc12('0x11')](function(_0x36e673){_0x416a1d(null,_0x36e673);})[_0xbc12('0x13')](function(_0x339fb1){_0x416a1d(_0x339fb1);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x36')]=function(_0x2db9d1,_0x4f76a3,_0x4ae207){this[_0xbc12('0xf')][_0xbc12('0x36')]({'uniqueid':this['channel'][_0xbc12('0x37')],'node':_0x2db9d1['label'],'application':_0x2db9d1['agicommand'],'data':_0x4f76a3||null,'project_name':this[_0xbc12('0x38')][_0xbc12('0x39')],'callerid':this[_0xbc12('0x38')]['callerid']})['then'](function(_0x5cb81d){_0x4ae207(null,_0x5cb81d);})[_0xbc12('0x13')](function(_0x4874bd){_0x4ae207(_0x4874bd);});};AGIVertices['prototype'][_0xbc12('0x3a')]=function(_0x461e94,_0x134cad,_0x424b0b,_0x501eed){this[_0xbc12('0xf')]['createSquareRecording']({'uniqueid':this[_0xbc12('0x38')][_0xbc12('0x37')],'callerid':this['channel'][_0xbc12('0x3b')],'calleridname':this[_0xbc12('0x38')]['calleridname'],'context':this[_0xbc12('0x38')]['context'],'extension':this[_0xbc12('0x38')][_0xbc12('0x3c')],'priority':this['channel']['priority'],'accountcode':this[_0xbc12('0x38')][_0xbc12('0x3d')],'dnid':this[_0xbc12('0x38')][_0xbc12('0x3e')],'projectName':this[_0xbc12('0x38')]['arg_1'],'saveName':_0x134cad,'filename':_0x461e94['file']||_0x134cad,'savePath':_0x424b0b})[_0xbc12('0x11')](function(_0x378feb){_0x501eed(null,_0x378feb);})['catch'](function(_0x54be7d){_0x501eed(_0x54be7d);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x3f')]=function(_0xbb59e8,_0x142c31){this['rpc'][_0xbc12('0x3f')]({'firstName':_['isEmpty'](_0xbb59e8[_0xbc12('0x12')])||_[_0xbc12('0x40')](_0xbb59e8['name'])?_0xbc12('0x41')+Math[_0xbc12('0x42')]():_0xbb59e8['name'],'lastName':_[_0xbc12('0x43')](_0xbb59e8['lastName'])||_['isNil'](_0xbb59e8[_0xbc12('0x44')])?null:_0xbb59e8[_0xbc12('0x44')],'phone':_0xbb59e8['phone'],'ListId':_0xbb59e8[_0xbc12('0x45')],'scheduledAt':_0xbb59e8[_0xbc12('0x46')],'callbackUniqueid':this[_0xbc12('0x38')]['uniqueid'],'tags':_0xbc12('0x47'),'description':'Callback\x20scheduled\x20at\x20'+_0xbb59e8[_0xbc12('0x46')][_0xbc12('0x48')](),'priority':_0xbb59e8[_0xbc12('0x49')]})[_0xbc12('0x11')](function(_0x5af058){_0x142c31(null,_0x5af058);})[_0xbc12('0x13')](function(_0x2263dc){_0x142c31(_0x2263dc);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x4a')]=function(_0x2900de,_0x2660b2){this[_0xbc12('0xf')][_0xbc12('0x4b')](_0x2900de)[_0xbc12('0x11')](function(_0x30d3ec){_0x2660b2(null,_0x30d3ec?_0x30d3ec[_0xbc12('0x12')]:![]);})['catch'](function(_0x59f20e){_0x2660b2(_0x59f20e);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x4c')]=function(_0x2ca12b,_0x644d7d,_0x58caf5){var _0x274203={'role':_0xbc12('0x4d')};_0x274203[_0x2ca12b]=this[_0xbc12('0x38')]['callerid'];this[_0xbc12('0xf')][_0xbc12('0x4c')](_0x274203,_0x644d7d,this[_0xbc12('0x38')][_0xbc12('0x37')])['then'](function(_0x759cac){_0x58caf5(null,_['isNil'](_0x759cac)?![]:!![]);})['catch'](function(_0x1c102e){logger[_0xbc12('0x2c')](_0x1c102e);_0x58caf5(null,![]);});};AGIVertices[_0xbc12('0x14')]['agentUnpause']=function(_0x44a8f7,_0x25399f){var _0x5c0b34={'role':'agent'};_0x5c0b34[_0x44a8f7]=this[_0xbc12('0x38')][_0xbc12('0x3b')];this['rpc'][_0xbc12('0x4e')](_0x5c0b34)['then'](function(_0x28eab6){_0x25399f(null,_['isNil'](_0x28eab6)?![]:!![]);})[_0xbc12('0x13')](function(_0x248933){logger['error'](_0x248933);_0x25399f(null,![]);});};AGIVertices[_0xbc12('0x14')]['agentLogout']=function(_0x5f1463,_0x144066){var _0x25a359={'role':_0xbc12('0x4d')};_0x25a359[_0x5f1463]=this[_0xbc12('0x38')][_0xbc12('0x3b')];this[_0xbc12('0xf')][_0xbc12('0x4f')](_0x25a359)[_0xbc12('0x11')](function(_0x113b7b){_0x144066(null,_[_0xbc12('0x40')](_0x113b7b)?![]:!![]);})[_0xbc12('0x13')](function(_0x59eed6){logger[_0xbc12('0x2c')](_0x59eed6);_0x144066(null,![]);});};AGIVertices[_0xbc12('0x14')]['agentLogin']=function(_0x33a9d3,_0x4ebea7){var _0x3a74e0={'role':_0xbc12('0x4d')};_0x3a74e0[_0x33a9d3]=this[_0xbc12('0x38')][_0xbc12('0x3b')];var _0x8d9dc1=_0x33a9d3!=_0xbc12('0x50')?util['format'](_0xbc12('0x51'),_0xbc12('0x52'),this[_0xbc12('0x38')][_0xbc12('0x3b')]):undefined;this['rpc'][_0xbc12('0x53')](_0x3a74e0,_0x8d9dc1)[_0xbc12('0x11')](function(_0x52bc48){_0x4ebea7(null,_['isNil'](_0x52bc48)?![]:!![]);})[_0xbc12('0x13')](function(_0x10d88d){logger['error'](_0x10d88d);_0x4ebea7(null,![]);});};AGIVertices['prototype']['shellCommand']=function(_0x1d4c7d,_0x4a06dd){sh[_0xbc12('0x54')](_['trim'](_0x1d4c7d),function(_0x2fe6da,_0x534397){var _0x563f8b=_0x534397['replace'](/(\r\n|\n|\r)/gm,'');_0x4a06dd(null,_0x563f8b);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x55')]=function(_0x548fe3,_0x2a6715){scripts['googleTTS'](_0x548fe3[_0xbc12('0x56')],_0x548fe3[_0xbc12('0x57')]||'en',0x1)[_0xbc12('0x11')](function(_0x4a43b4){_0x2a6715(null,_0x4a43b4);})[_0xbc12('0x13')](function(_0x21376d){_0x2a6715(_0x21376d);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x58')]=function(_0x29fd82,_0x2fde7e){scripts[_0xbc12('0x58')](this['channel'][_0xbc12('0x37')],_0x29fd82[_0xbc12('0x59')],_0x29fd82['text'],_0x29fd82['dialogflow_language']||'en')[_0xbc12('0x11')](function(_0x279a41){_0x2fde7e(null,_0x279a41);})[_0xbc12('0x13')](function(_0x2891d2){_0x2fde7e(_0x2891d2);});};AGIVertices['prototype'][_0xbc12('0x5a')]=function(_0x3a0fd6,_0x337c53){scripts[_0xbc12('0x5a')](_0x3a0fd6[_0xbc12('0x59')],_0x3a0fd6['text'],_0x3a0fd6['ispeech_tts_language']||'en-US',_0x3a0fd6[_0xbc12('0x5b')])[_0xbc12('0x11')](function(_0x169010){_0x337c53(null,_0x169010);})[_0xbc12('0x13')](function(_0x1c62af){_0x337c53(_0x1c62af);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x5c')]=function(_0x25c4de,_0x4d888e,_0x1e4c00){scripts[_0xbc12('0x5c')](_0x4d888e,_0x25c4de[_0xbc12('0x59')],_0x25c4de[_0xbc12('0x5d')]||_0xbc12('0x5e'),this[_0xbc12('0x5f')](_0x25c4de[_0xbc12('0x60')])?_0x25c4de['model']:undefined)['then'](function(_0x3f0a7e){_0x1e4c00(null,_0x3f0a7e);})[_0xbc12('0x13')](function(_0x293b2b){_0x1e4c00(_0x293b2b);});};AGIVertices['prototype'][_0xbc12('0x61')]=function(_0x58d91b,_0xc1583b){scripts[_0xbc12('0x61')](_0x58d91b[_0xbc12('0x62')],_0x58d91b[_0xbc12('0x63')],_0x58d91b[_0xbc12('0x64')],_0x58d91b[_0xbc12('0x65')]||_0xbc12('0x66'),_0x58d91b[_0xbc12('0x56')],_0x58d91b[_0xbc12('0x67')]||_0xbc12('0x56'))[_0xbc12('0x11')](function(_0x437bf9){_0xc1583b(null,_0x437bf9);})[_0xbc12('0x13')](function(_0x137398){_0xc1583b(_0x137398);});};AGIVertices[_0xbc12('0x14')]['googleASR']=function(_0x113c40,_0x4da3e5,_0x3c2e09){scripts[_0xbc12('0x68')](_0x4da3e5,_0x113c40['key'],_0x113c40[_0xbc12('0x69')]||_0xbc12('0x5e'))[_0xbc12('0x11')](function(_0x4cc714){_0x3c2e09(null,_0x4cc714);})[_0xbc12('0x13')](function(_0xb79e9){_0x3c2e09(_0xb79e9);});};AGIVertices[_0xbc12('0x14')][_0xbc12('0x6a')]=function(_0x3b0895,_0x10766b,_0x178421){scripts[_0xbc12('0x6a')](_0x10766b,_0x3b0895[_0xbc12('0x6b')],_0x3b0895['appsecret'],_0x3b0895[_0xbc12('0x6c')])[_0xbc12('0x11')](function(_0x57e81f){_0x178421(null,_0x57e81f);})[_0xbc12('0x13')](function(_0x483694){_0x178421(_0x483694);});};AGIVertices['prototype'][_0xbc12('0x6d')]=function(_0x8391b3){var _0x966fce=_[_0xbc12('0x6e')](verticesWithRetry,_0x8391b3['agicommand'])?_0x8391b3:_['clone'](_0x8391b3);for(var _0x5697a4 in _0x966fce){if(_0x966fce[_0xbc12('0x6f')](_0x5697a4)){if(_0x966fce[_0x5697a4]&&_[_0xbc12('0x70')](_0x966fce[_0x5697a4])){_0x966fce[_0x5697a4]=this[_0xbc12('0x71')](_0x966fce[_0x5697a4]);}}}return _0x966fce;};AGIVertices['prototype'][_0xbc12('0x71')]=function(_0x1442a1){var _0x229f1b=_0x1442a1[_0xbc12('0x72')]('{');for(var _0x2fb3c3=0x1;_0x2fb3c3<_0x229f1b[_0xbc12('0x73')];_0x2fb3c3+=0x1){var _0x141df0=_0x229f1b[_0x2fb3c3][_0xbc12('0x72')]('}');if(_0x141df0['length']>0x1){_0x1442a1=_0x1442a1[_0xbc12('0x74')]('{'+_0x141df0[0x0]+'}',this[_0xbc12('0x38')]['getVariable'](_0x141df0[0x0])[_0xbc12('0x75')]||_0x141df0[0x0]);}}if(_0x229f1b[_0xbc12('0x73')]===0x1){return _0x1442a1[_0xbc12('0x48')]();}return this[_0xbc12('0x71')](_0x1442a1);};AGIVertices[_0xbc12('0x14')][_0xbc12('0x76')]=function(_0x16106d,_0x34b2ea){var _0x5b4f5a=this[_0xbc12('0x38')][_0xbc12('0xe')](_0x16106d);if(_0x5b4f5a[_0xbc12('0x77')]===-0x1){return _0x5b4f5a;}logger[_0xbc12('0x2d')](util['format'](_0xbc12('0x78'),_0x34b2ea,_0x5b4f5a[_0xbc12('0x75')]));return this[_0xbc12('0x38')][_0xbc12('0x79')](_0x34b2ea,_0x5b4f5a['extra']);};AGIVertices[_0xbc12('0x14')]['isConfigured']=function(_0x4ce7ff){return _0x4ce7ff&&_0x4ce7ff!=='0'&&_0x4ce7ff!=='-1'&&_0x4ce7ff!=='';};AGIVertices[_0xbc12('0x14')][_0xbc12('0x7a')]=function(_0x156048){this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0x156048,'-');_0x156048[_0xbc12('0x7c')]=_0x156048[_0xbc12('0x7a')];return{'code':0xc8,'result':'-'};};AGIVertices[_0xbc12('0x14')]['agi']=function(_0x337e95){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x7d'),_0x337e95[_0xbc12('0x7e')]));return this[_0xbc12('0x38')][_0xbc12('0x7f')]([_0x337e95[_0xbc12('0x80')],_0x337e95[_0xbc12('0x81')]]);};AGIVertices['prototype'][_0xbc12('0x82')]=function(_0x19b5b5){logger[_0xbc12('0x2d')](util['format'](_0xbc12('0x83'),_0x19b5b5['label']));if(this['isConfigured'](_0x19b5b5['timeout'])){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x84'),_0x19b5b5['timeout']));var _0x178e3a=this['channel']['wait'](_0x19b5b5[_0xbc12('0x85')]);if(_0x178e3a[_0xbc12('0x77')]===-0x1){return _0x178e3a;}}return this['channel'][_0xbc12('0x82')]();};AGIVertices[_0xbc12('0x14')]['callback']=function(_0x26d3ec){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x86'),_0x26d3ec[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0x26d3ec[_0xbc12('0x45')])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x26d3ec,'no\x20list\x20selected');}_0x26d3ec[_0xbc12('0x46')]=moment();if(this[_0xbc12('0x5f')](_0x26d3ec[_0xbc12('0x87')])){_0x26d3ec[_0xbc12('0x46')]=moment()[_0xbc12('0x88')](_0x26d3ec[_0xbc12('0x87')],'minutes');}if(!this[_0xbc12('0x5f')](_0x26d3ec[_0xbc12('0x49')])){_0x26d3ec[_0xbc12('0x49')]=0x2;}this[_0xbc12('0x3f')][_0xbc12('0x7b')](this,_0x26d3ec);return this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x8a'),_0x26d3ec[_0xbc12('0x8b')],_0x26d3ec[_0xbc12('0x45')],_0x26d3ec[_0xbc12('0x46')]));};AGIVertices['prototype'][_0xbc12('0x8c')]=function(_0x3bd320){logger[_0xbc12('0x2d')](util['format'](_0xbc12('0x8d'),_0x3bd320[_0xbc12('0x7e')]));var _0x455bc6=this['channel'][_0xbc12('0x54')](_0x3bd320[_0xbc12('0x8e')],_0x3bd320['options']);if(_0x455bc6[_0xbc12('0x77')]===-0x1){return _0x455bc6;}return this[_0xbc12('0x38')][_0xbc12('0x89')](util['format'](_0xbc12('0x8f'),_0x3bd320[_0xbc12('0x8e')],_0x3bd320[_0xbc12('0x90')]));};AGIVertices['prototype'][_0xbc12('0x91')]=function(_0x596f37){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x92'),_0x596f37[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0x596f37[_0xbc12('0x56')])){return this[_0xbc12('0x38')][_0xbc12('0x89')]('no\x20text\x20configured');}var _0x5a7430='\x22'+_0x596f37['text']+'\x22';if(this['isConfigured'](_0x596f37['options'])){_0x5a7430+=','+_0x596f37[_0xbc12('0x90')];}var _0xd657ed=this[_0xbc12('0x38')]['exec'](_0xbc12('0x93'),_0x5a7430);if(_0xd657ed['result']===-0x1){return _0xd657ed;}return this[_0xbc12('0x38')]['noop'](util['format'](_0xbc12('0x94'),_0x5a7430));};AGIVertices['prototype'][_0xbc12('0x95')]=function(_0x15ccfb){logger['info'](util[_0xbc12('0x28')]('Enter\x20in\x20LUMENVOXASR\x20(%s)\x20block',_0x15ccfb[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0x15ccfb[_0xbc12('0x96')])){return this['channel'][_0xbc12('0x89')](_0xbc12('0x97'));}var _0x3a38cf=_0x15ccfb['grammar'];if(this[_0xbc12('0x5f')](_0x15ccfb[_0xbc12('0x90')])){_0x3a38cf+=','+_0x15ccfb['options'];}var _0x1b8fc6=this[_0xbc12('0x38')][_0xbc12('0x54')](_0xbc12('0x98'),_0x3a38cf);if(_0x1b8fc6[_0xbc12('0x77')]===-0x1){return _0x1b8fc6;}var _0x49616d=this[_0xbc12('0x76')](_0xbc12('0x99'),_0xbc12('0x9a'));if(_0x49616d['result']===-0x1){return _0x49616d;}var _0x21bbde=this[_0xbc12('0x76')]('RECOG_INPUT()',_0xbc12('0x9b'));if(_0x21bbde[_0xbc12('0x77')]===-0x1){return _0x21bbde;}var _0x535510=this['getAndSetVariable'](_0xbc12('0x9c'),_0xbc12('0x9d'));if(_0x535510[_0xbc12('0x77')]===-0x1){return _0x535510;}return this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x9e'),_0x3a38cf));};AGIVertices[_0xbc12('0x14')][_0xbc12('0x9f')]=function(_0x5625a1){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')]('Enter\x20in\x20DATABASE\x20(%s)\x20block',_0x5625a1[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0x5625a1[_0xbc12('0xa0')])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x5625a1,_0xbc12('0xa1'));}var _0x44b90c=this[_0xbc12('0x19')]['sync'](this,_0x5625a1[_0xbc12('0xa0')]);if(!_0x44b90c){return this['channel'][_0xbc12('0x2c')](_0x5625a1,_0xbc12('0xa2'));}if(!this['isConfigured'](_0x5625a1[_0xbc12('0x2f')])){return this['channel'][_0xbc12('0x2c')](_0x5625a1,_0xbc12('0xa3'));}var _0x409a7d=_0x5625a1[_0xbc12('0x2f')][_0xbc12('0xa4')](/(\r\n|\n|\r)/gm,'\x20');this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')]('query:\x20%s',_0x409a7d));var _0x352414=this['getQueryOdbc']['sync'](this,_0x44b90c,_0x409a7d);this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0x5625a1,_0x409a7d);if(!this['isConfigured'](_0x5625a1['variable_id'])){return this['channel']['noop'](_0xbc12('0xa5'));}var _0x1853fb=this[_0xbc12('0xe')][_0xbc12('0x7b')](this,_0x5625a1[_0xbc12('0xa6')]);if(!_0x1853fb){return this[_0xbc12('0x38')]['error'](_0x5625a1,_0xbc12('0xa7'));}var _0x1ae3b1=this;_0x352414[_0xbc12('0xa8')](function(_0x2ca510,_0x5a69ad){Object[_0xbc12('0xa9')](_0x2ca510)[_0xbc12('0xa8')](function(_0x4874c4){_0x1ae3b1['channel'][_0xbc12('0x79')](util[_0xbc12('0x28')](_0xbc12('0xaa'),_0x1853fb,_0x5a69ad,_0x4874c4),_0x2ca510[_0x4874c4]);});});this[_0xbc12('0x38')][_0xbc12('0x79')](util[_0xbc12('0x28')](_0xbc12('0xab'),_0x1853fb),_0x352414[_0xbc12('0x73')]);return this['channel'][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0xac'),_0x1853fb));};AGIVertices[_0xbc12('0x14')][_0xbc12('0xad')]=function(_0x4b0386){logger[_0xbc12('0xae')](util['format'](_0xbc12('0xaf'),_0x4b0386[_0xbc12('0x7e')]));if(!this['isConfigured'](_0x4b0386[_0xbc12('0xb0')])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x4b0386,_0xbc12('0xb1'));}var _0x39ec44=this[_0xbc12('0x1b')]['sync'](this,_0x4b0386[_0xbc12('0xb0')]);if(!_0x39ec44){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x4b0386,_0xbc12('0xb2'));}var _0x40ee81=this['channel'][_0xbc12('0x54')](_0xbc12('0xb3'),[util[_0xbc12('0x28')](_0xbc12('0xb4'),_0x39ec44),_0x4b0386[_0xbc12('0x85')],_0x4b0386[_0xbc12('0xb5')],_0x4b0386[_0xbc12('0xb6')]]);if(_0x40ee81[_0xbc12('0x77')]===-0x1){return _0x40ee81;}return this['channel'][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0xb7'),_0xbc12('0xb3')));};AGIVertices['prototype'][_0xbc12('0xb8')]=function(_0xe5b5d4){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0xb9'),_0xe5b5d4[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0xe5b5d4['key'])){return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0xba'));}if(!this[_0xbc12('0x5f')](_0xe5b5d4[_0xbc12('0x56')])){return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0xbb'));}this[_0xbc12('0x38')][_0xbc12('0x89')](util['format'](_0xbc12('0xbc'),_0xe5b5d4[_0xbc12('0x56')]));var _0x4672e2=this[_0xbc12('0x58')][_0xbc12('0x7b')](this,_0xe5b5d4);if(_0x4672e2){for(var _0x2d41e9 in _0x4672e2){if(_0x4672e2[_0xbc12('0x6f')](_0x2d41e9)){this[_0xbc12('0x38')][_0xbc12('0x79')](util[_0xbc12('0x28')](_0xbc12('0xbd'),_0x2d41e9['toUpperCase']()),_0x4672e2[_0x2d41e9]);}}return this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')]('Dialogflow\x20Result\x20%s',_0x4672e2[_0xbc12('0xbe')]));}return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0xe5b5d4,_0xbc12('0xbf'));};AGIVertices[_0xbc12('0x14')][_0xbc12('0xc0')]=function(_0x2f777d){logger['info'](util[_0xbc12('0x28')](_0xbc12('0xc1'),_0x2f777d['label']));return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0xc0'));};AGIVertices['prototype'][_0xbc12('0xc2')]=function(_0x5e677c){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0xc3'),_0x5e677c[_0xbc12('0x7e')]));var _0x694610='';if(_0x5e677c['trunk_id']){if(!this[_0xbc12('0x5f')](_0x5e677c[_0xbc12('0xc4')])){return this['channel'][_0xbc12('0x2c')](_0x5e677c,_0xbc12('0xc5'));}else{var _0x4ddded=parseInt(_0x5e677c[_0xbc12('0xc4')],0xa);if(isNaN(_0x4ddded)){_0x694610=_0x5e677c[_0xbc12('0xc4')];}else{_0x694610=this['getTrunk']['sync'](this,_0x5e677c[_0xbc12('0xc4')]);if(!_0x694610){return this['channel'][_0xbc12('0x2c')](_0x5e677c,_0xbc12('0xc6'));}}}}else if(_0x5e677c[_0xbc12('0xc7')]){_0x694610=_0x5e677c[_0xbc12('0xc7')];}else{return this['channel']['error'](_0x5e677c,_0xbc12('0xc5'));}var _0x178303=this[_0xbc12('0x38')][_0xbc12('0x54')](_0xbc12('0xb3'),[util[_0xbc12('0x28')](_0xbc12('0xc8'),_0x694610,_0x5e677c['phone']),_0x5e677c['timeout'],_0x5e677c[_0xbc12('0xb5')],_0x5e677c[_0xbc12('0xb6')]]);if(_0x178303[_0xbc12('0x77')]===-0x1){return _0x178303;}return this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0xb7'),_0xbc12('0xb3')));};AGIVertices['prototype'][_0xbc12('0xc9')]=function(_0x4b27e7){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0xca'),_0x4b27e7[_0xbc12('0x7e')]));return this[_0xbc12('0x38')][_0xbc12('0x89')]('finally');};AGIVertices[_0xbc12('0x14')][_0xbc12('0xc')]=function(_0xc06550){logger[_0xbc12('0x2d')](util['format'](_0xbc12('0xcb'),_0xc06550[_0xbc12('0x7e')]));if(_0xc06550[_0xbc12('0x7c')]===0x0){return this[_0xbc12('0x7a')](_0xc06550);}_0xc06550[_0xbc12('0x7c')]-=0x1;if(!this[_0xbc12('0x5f')](_0xc06550['file_id'])){return this['channel']['error'](_0xc06550,_0xbc12('0xcc'));}var _0xf353a8=this[_0xbc12('0x1f')][_0xbc12('0x7b')](this,_0xc06550[_0xbc12('0xcd')]);if(!_0xf353a8){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0xc06550,_0xbc12('0xce'));}if(!this[_0xbc12('0x5f')](_0xc06550[_0xbc12('0xa6')])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0xbc12('0xa5'));}var _0x299f5d=this[_0xbc12('0x38')][_0xbc12('0xcf')](_0xf353a8,_0xc06550[_0xbc12('0xd0')],_0xc06550[_0xbc12('0xd1')]);var _0x430051=_0x299f5d[_0xbc12('0x77')]?_0x299f5d['result'][_0xbc12('0x48')]():'';logger[_0xbc12('0x2d')](_0xbc12('0xd2'),JSON[_0xbc12('0xd3')](_0x299f5d));if(_0x299f5d['result']===-0x1){this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0xc06550,_0x430051);return _0x299f5d;}else if(_0x299f5d[_0xbc12('0x75')]===_0xbc12('0x85')){_0x299f5d[_0xbc12('0x77')]=_0x430051[_0xbc12('0x73')]>=parseInt(_0xc06550[_0xbc12('0xd4')])?'x':'i';}else{_0x299f5d[_0xbc12('0x77')]=_0x430051[_0xbc12('0x73')]>=parseInt(_0xc06550[_0xbc12('0xd4')])&&_0x430051['length']<=parseInt(_0xc06550[_0xbc12('0xd1')])?'x':'i';}var _0x81badd=this[_0xbc12('0xe')]['sync'](this,_0xc06550[_0xbc12('0xa6')]);if(!_0x81badd){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0xc06550,'no\x20variable\x20found');}this[_0xbc12('0x38')][_0xbc12('0x79')](_0x81badd,_0x430051);if(this['isConfigured'](_0xc06550[_0xbc12('0xd5')])){var _0x10da25=parseInt(_0xc06550['hiddendigitsnum'],0xa);var _0x9a7231=rs['generate']({'charset':'*','length':_0x10da25});var _0x45c68c=_0x430051['length'];if(_0x45c68c>0x0){if(_0x45c68c>_0x10da25){this[_0xbc12('0x36')]['sync'](this,_0xc06550,_0xc06550[_0xbc12('0xd6')]==='first'?_0x9a7231+_0x430051[_0xbc12('0xd7')](_0x10da25):_0x430051['substr'](0x0,_0x45c68c-_0x10da25)+_0x9a7231);}else{this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0xc06550,rs[_0xbc12('0xd8')]({'charset':'*','length':_0x45c68c}));}}else{this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0xc06550,'');}}else{this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0xc06550,_0x430051);}return _0x299f5d;};AGIVertices[_0xbc12('0x14')][_0xbc12('0xd')]=function(_0x43a364){logger['info'](util['format'](_0xbc12('0xd9'),_0x43a364[_0xbc12('0x7e')]));return this['getdigits'](_0x43a364);};AGIVertices[_0xbc12('0x14')]['goal']=function(_0x5c9357){logger['info'](util[_0xbc12('0x28')]('Enter\x20in\x20GOAL\x20(%s)\x20block',_0x5c9357[_0xbc12('0x7e')]));this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0x5c9357,_0x5c9357[_0xbc12('0xda')]);return this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')]('GOAL\x20%s',_0x5c9357[_0xbc12('0xda')]));};AGIVertices[_0xbc12('0x14')][_0xbc12('0xdb')]=function(_0xf7342e){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0xdc'),_0xf7342e[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0xf7342e[_0xbc12('0x62')])||!this['isConfigured'](_0xf7342e['aws_secret_access_key'])){return this[_0xbc12('0x38')]['noop']('no\x20valid\x20credentials\x20configured');}if(!this['isConfigured'](_0xf7342e[_0xbc12('0x56')])){return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0xbb'));}this[_0xbc12('0x38')][_0xbc12('0x89')](util['format'](_0xbc12('0xdd'),_0xf7342e['text']));var _0xda9544=this[_0xbc12('0x61')][_0xbc12('0x7b')](this,_0xf7342e);if(_0xda9544){this['channel'][_0xbc12('0x89')](util['format'](_0xbc12('0xde'),_0xda9544));var _0x28edd8=this[_0xbc12('0x38')][_0xbc12('0xdf')](_0xda9544);try{fs[_0xbc12('0xe0')](_0xda9544+_0xbc12('0xe1'));}catch(_0x2063dc){logger[_0xbc12('0x2c')](_0x2063dc);}return _0x28edd8;}return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0xf7342e,_0xbc12('0xe2'));};AGIVertices[_0xbc12('0x14')][_0xbc12('0xe3')]=function(_0x30fe97){logger['info'](util['format']('Enter\x20in\x20GOOGLEASR\x20(%s)\x20block\x20%s',_0x30fe97[_0xbc12('0x7e')],_0x30fe97[_0xbc12('0x85')]));if(!this[_0xbc12('0x5f')](_0x30fe97[_0xbc12('0x59')])){return this[_0xbc12('0x38')][_0xbc12('0x89')]('no\x20key\x20configured');}var _0x26dac2=_0xbc12('0xe4');var _0x34c6c2=util[_0xbc12('0x28')](_0xbc12('0xe5'),FILES_PATH,rs['generate'](0x4));var _0x59e209=util['format'](_0xbc12('0xe6'),_0x34c6c2,_0x26dac2);var _0xdbafba=!![];if(_0x30fe97[_0xbc12('0xe7')]==='NOBEEP'){_0xdbafba=![];}var _0x2da7d6=this[_0xbc12('0x38')][_0xbc12('0xe8')](_0x34c6c2,_0x26dac2,_0x30fe97[_0xbc12('0xe9')],_0x30fe97[_0xbc12('0x85')],undefined,_0xdbafba);if(_0x2da7d6['result']!==-0x1){this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0xea'),_0x59e209));var _0x46435b=this[_0xbc12('0x68')][_0xbc12('0x7b')](this,_0x30fe97,_0x59e209);if(_0x46435b){for(var _0x5a0581 in _0x46435b){if(_0x46435b[_0xbc12('0x6f')](_0x5a0581)){this['channel'][_0xbc12('0x79')](util['format'](_0xbc12('0xeb'),_0x5a0581[_0xbc12('0xec')]()),_0x46435b[_0x5a0581]);}}return this[_0xbc12('0x38')]['noop'](util[_0xbc12('0x28')](_0xbc12('0xed'),JSON[_0xbc12('0xd3')](_0x46435b)));}}return _0x2da7d6;};AGIVertices[_0xbc12('0x14')][_0xbc12('0xee')]=function(_0x4f09b1){logger['info'](util[_0xbc12('0x28')]('Enter\x20in\x20TILDEASR\x20(%s)\x20block',_0x4f09b1['label']));if(!this[_0xbc12('0x5f')](_0x4f09b1[_0xbc12('0x6b')])){return this['channel']['noop'](_0xbc12('0xef'));}if(!this[_0xbc12('0x5f')](_0x4f09b1['appsecret'])){return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0xf0'));}var _0x4ad11e=_0xbc12('0xe4');var _0x38b381=util[_0xbc12('0x28')](_0xbc12('0xe5'),FILES_PATH,rs[_0xbc12('0xd8')](0x4));var _0x2d6ce7=util['format'](_0xbc12('0xe6'),_0x38b381,_0x4ad11e);var _0x399eee=!![];if(_0x4f09b1[_0xbc12('0xe7')]===_0xbc12('0xf1')){_0x399eee=![];}var _0x18d010=this[_0xbc12('0x38')]['recordFile'](_0x38b381,_0x4ad11e,_0x4f09b1['intKey'],_0x4f09b1['timeout'],undefined,_0x399eee);if(_0x18d010[_0xbc12('0x77')]!==-0x1){this[_0xbc12('0x38')][_0xbc12('0x89')](util['format'](_0xbc12('0xf2'),_0x2d6ce7));var _0x14a2b7=this[_0xbc12('0x6a')]['sync'](this,_0x4f09b1,_0x2d6ce7);if(_0x14a2b7){for(var _0x3576e2 in _0x14a2b7){if(_0x14a2b7[_0xbc12('0x6f')](_0x3576e2)){this['channel'][_0xbc12('0x79')](util['format'](_0xbc12('0xf3'),_0x3576e2['toUpperCase']()),_0x14a2b7[_0x3576e2]);}}return this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0xf4'),JSON[_0xbc12('0xd3')](_0x14a2b7)));}}return _0x18d010;};AGIVertices[_0xbc12('0x14')][_0xbc12('0xf5')]=function(_0x462c07){logger[_0xbc12('0x2d')](util['format'](_0xbc12('0xf6'),_0x462c07[_0xbc12('0x7e')]));return this[_0xbc12('0x38')][_0xbc12('0xf7')](_0x462c07['context'],_0x462c07['extension'],_0x462c07[_0xbc12('0xf8')]);};AGIVertices[_0xbc12('0x14')][_0xbc12('0xf9')]=function(_0x291074){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0xfa'),_0x291074[_0xbc12('0x7e')]));if(!this['isConfigured'](_0x291074[_0xbc12('0xfb')])){return this['channel']['error'](_0x291074,_0xbc12('0xfc'));}try{var _0x531429=eval(_0x291074['condition'])?_0xbc12('0xfd'):_0xbc12('0xfe');this['channel'][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0xff'),_0x291074['condition'],_0x531429));return{'code':0xc8,'result':_0x531429};}catch(_0x44ddc){return{'code':0xc8,'result':'false'};}};AGIVertices[_0xbc12('0x14')][_0xbc12('0x100')]=function(_0x304e9b){logger['info'](util[_0xbc12('0x28')](_0xbc12('0x101'),_0x304e9b[_0xbc12('0x7e')]));if(!this['isConfigured'](_0x304e9b[_0xbc12('0x102')])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x304e9b,_0xbc12('0x103'));}var _0x55a987=this[_0xbc12('0x24')][_0xbc12('0x7b')](this,_0x304e9b[_0xbc12('0x102')]);if(!_0x55a987){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x304e9b,'no\x20intervals\x20found');}for(var _0x3f2057=0x0;_0x3f2057<_0x55a987[_0xbc12('0x73')];_0x3f2057+=0x1){var _0x211a9d=this[_0xbc12('0x38')][_0xbc12('0xe')](util[_0xbc12('0x28')]('IFTIME(%s?true:false)',_0x55a987[_0x3f2057]));if(_0x211a9d['result']===-0x1){return _0x211a9d;}logger['info'](util[_0xbc12('0x28')](_0xbc12('0x104'),_0x55a987[_0x3f2057],_0x211a9d[_0xbc12('0x75')]));if(_0x211a9d[_0xbc12('0x75')]===_0xbc12('0xfd')){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x104'),_0x55a987[_0x3f2057],_0xbc12('0xfd')));this['channel'][_0xbc12('0x89')](util[_0xbc12('0x28')]('IFTIME\x20%s\x20%s',_0x55a987[_0x3f2057],'true'));return{'code':0xc8,'result':'true'};}else{logger[_0xbc12('0x2d')](util['format']('IFTIME\x20%s\x20%s',_0x55a987[_0x3f2057],'false'));this[_0xbc12('0x38')][_0xbc12('0x89')](util['format'](_0xbc12('0x104'),_0x55a987[_0x3f2057],_0xbc12('0xfe')));}}return{'code':0xc8,'result':'false'};};AGIVertices[_0xbc12('0x14')][_0xbc12('0x105')]=function(_0x2d1473){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x106'),_0x2d1473['label']));return this[_0xbc12('0x38')][_0xbc12('0x105')]();};AGIVertices[_0xbc12('0x14')]['ispeechasr']=function(_0x153be6){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x107'),_0x153be6['label']));if(!this['isConfigured'](_0x153be6[_0xbc12('0x59')])){return this['channel'][_0xbc12('0x89')](_0xbc12('0xba'));}var _0x3386db=_0xbc12('0xe4');var _0x792e95=util[_0xbc12('0x28')]('%s/recordings/%s',FILES_PATH,rs[_0xbc12('0xd8')](0x4));var _0x10a313=util[_0xbc12('0x28')](_0xbc12('0xe6'),_0x792e95,_0x3386db);var _0x39fe81=!![];if(_0x153be6['beep']==='NOBEEP'){_0x39fe81=![];}var _0x3b7b4f=this[_0xbc12('0x38')][_0xbc12('0xe8')](_0x792e95,_0x3386db,_0x153be6[_0xbc12('0xe9')],_0x153be6[_0xbc12('0x85')],undefined,_0x39fe81);if(_0x3b7b4f['result']!==-0x1){this[_0xbc12('0x38')][_0xbc12('0x89')](util['format'](_0xbc12('0x108'),_0x10a313));var _0x4deb50=this['ispeechASR'][_0xbc12('0x7b')](this,_0x153be6,_0x10a313);if(_0x4deb50){for(var _0x212021 in _0x4deb50){if(_0x4deb50[_0xbc12('0x6f')](_0x212021)){this['channel'][_0xbc12('0x79')](util[_0xbc12('0x28')](_0xbc12('0x109'),_0x212021['toUpperCase']()),_0x4deb50[_0x212021]);}}return this['channel'][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x10a'),JSON[_0xbc12('0xd3')](_0x4deb50)));}}return _0x3b7b4f;};AGIVertices[_0xbc12('0x14')][_0xbc12('0x10b')]=function(_0x508db1){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')]('Enter\x20in\x20ISPEECHTTS\x20(%s)\x20block',_0x508db1['label']));if(!this[_0xbc12('0x5f')](_0x508db1[_0xbc12('0x59')])){return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0xba'));}if(!this[_0xbc12('0x5f')](_0x508db1[_0xbc12('0x56')])){return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0xbb'));}this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x10c'),_0x508db1['text']));var _0x24397a=this['ispeechTTS'][_0xbc12('0x7b')](this,_0x508db1);if(_0x24397a){this[_0xbc12('0x38')]['noop'](util[_0xbc12('0x28')]('ispeech\x20%s\x20file\x20created',_0x24397a));var _0x50a7c8=this[_0xbc12('0x38')][_0xbc12('0xdf')](_0x24397a,_0x508db1['intKey']);try{fs[_0xbc12('0xe0')](_0x24397a+_0xbc12('0xe1'));}catch(_0x1717b3){logger[_0xbc12('0x2c')](_0x1717b3);}return _0x50a7c8;}return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x508db1,_0xbc12('0x10d'));};AGIVertices[_0xbc12('0x14')]['login']=function(_0x14c866){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')]('Enter\x20in\x20LOGIN\x20(%s)\x20block',_0x14c866[_0xbc12('0x7e')]));if(!this['isConfigured'](_0x14c866[_0xbc12('0x10e')])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x14c866,_0xbc12('0x10f'));}logger[_0xbc12('0x2d')](util[_0xbc12('0x28')]('FIND\x20AGENT\x20%s\x20BY\x20%s',this[_0xbc12('0x38')]['callerid'],_0x14c866[_0xbc12('0x10e')]));var _0x4a693b=this['agentLogin']['sync'](this,_0x14c866['findBy']);if(_0x4a693b){logger['info'](util[_0xbc12('0x28')]('AGENT\x20%s\x20FOUND\x20BY',this[_0xbc12('0x38')]['callerid'],_0x14c866[_0xbc12('0x10e')]));this['channel'][_0xbc12('0x89')](util['format']('AGENT\x20%s\x20FOUND\x20BY',this[_0xbc12('0x38')][_0xbc12('0x3b')],_0x14c866[_0xbc12('0x10e')]));return{'code':0xc8,'result':_0xbc12('0x110')};}else{logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x111'),this[_0xbc12('0x38')]['callerid'],_0x14c866[_0xbc12('0x10e')]));this[_0xbc12('0x38')][_0xbc12('0x89')](util['format'](_0xbc12('0x111'),this['channel']['callerid'],_0x14c866['findBy']));return{'code':0xc8,'result':_0xbc12('0x112')};}};AGIVertices[_0xbc12('0x14')][_0xbc12('0x113')]=function(_0x1a9a19){logger['info'](util['format']('Enter\x20in\x20LOGOUT\x20(%s)\x20block',_0x1a9a19[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0x1a9a19[_0xbc12('0x10e')])){return this['channel'][_0xbc12('0x2c')](_0x1a9a19,'no\x20find\x20by\x20configured');}logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x114'),this[_0xbc12('0x38')]['callerid'],_0x1a9a19[_0xbc12('0x10e')]));var _0x4cfaf9=this[_0xbc12('0x4f')]['sync'](this,_0x1a9a19[_0xbc12('0x10e')]);if(_0x4cfaf9){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x115'),this[_0xbc12('0x38')]['callerid'],_0x1a9a19[_0xbc12('0x10e')]));this[_0xbc12('0x38')][_0xbc12('0x89')](util['format'](_0xbc12('0x115'),this[_0xbc12('0x38')][_0xbc12('0x3b')],_0x1a9a19['findBy']));return{'code':0xc8,'result':'success'};}else{logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x111'),this[_0xbc12('0x38')][_0xbc12('0x3b')],_0x1a9a19[_0xbc12('0x10e')]));this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')]('AGENT\x20%s\x20NOT\x20FOUND\x20BY',this[_0xbc12('0x38')][_0xbc12('0x3b')],_0x1a9a19[_0xbc12('0x10e')]));return{'code':0xc8,'result':_0xbc12('0x112')};}};AGIVertices[_0xbc12('0x14')]['math']=function(_0x49eeda){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x116'),_0x49eeda[_0xbc12('0x7e')]));if(!this['isConfigured'](_0x49eeda['operation'])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x49eeda,_0xbc12('0x117'));}this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')]('math\x20%s',_0x49eeda[_0xbc12('0x118')]));var _0xa5226c=eval(_0x49eeda['operation']);if(!this[_0xbc12('0x5f')](_0x49eeda['variable_id'])){return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0xa5'));}var _0x4ee287=this['getVariable'][_0xbc12('0x7b')](this,_0x49eeda[_0xbc12('0xa6')]);if(!_0x4ee287){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x49eeda,_0xbc12('0xa7'));}if(_[_0xbc12('0x119')](_0xa5226c)){var _0x1561a7=this;_0xa5226c[_0xbc12('0xa8')](function(_0x5b381d,_0xdd351){_0x1561a7[_0xbc12('0x38')][_0xbc12('0x79')](util[_0xbc12('0x28')]('%s[%s]',_0x4ee287,_0xdd351),_0x5b381d);});return this['channel']['noop'](util[_0xbc12('0x28')](_0xbc12('0x11a'),_0x4ee287));}else{return this[_0xbc12('0x38')][_0xbc12('0x79')](_0x4ee287,_0xa5226c);}};AGIVertices[_0xbc12('0x14')][_0xbc12('0xb')]=function(_0x4f0ca6){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x11b'),_0x4f0ca6[_0xbc12('0x7e')]));if(_0x4f0ca6['retry']===0x0){return this[_0xbc12('0x7a')](_0x4f0ca6);}_0x4f0ca6[_0xbc12('0x7c')]-=0x1;if(!this[_0xbc12('0x5f')](_0x4f0ca6[_0xbc12('0xcd')])){return this['channel']['error'](_0x4f0ca6,_0xbc12('0xcc'));}var _0x45ee2b=this[_0xbc12('0x1f')]['sync'](this,_0x4f0ca6[_0xbc12('0xcd')]);if(!_0x45ee2b){return this['channel'][_0xbc12('0x2c')](_0x4f0ca6,_0xbc12('0xce'));}var _0x3b1ed0=this['channel'][_0xbc12('0xcf')](_0x45ee2b,_0x4f0ca6['response'],_0x4f0ca6['digit']);var _0x23f655=_0x3b1ed0[_0xbc12('0x77')];if(_0x3b1ed0['result']===-0x1){this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0x4f0ca6,'-1');return _0x3b1ed0;}else if(_0x3b1ed0[_0xbc12('0x75')]===_0xbc12('0x85')){_0x3b1ed0[_0xbc12('0x77')]=_0x3b1ed0[_0xbc12('0x77')][_0xbc12('0x73')]>0x0?_0x3b1ed0[_0xbc12('0x77')]:'t';}else if(_[_0xbc12('0x43')](_0x3b1ed0['result'])){_0x3b1ed0[_0xbc12('0x77')]='#';_0x23f655='#';}if(!this['isConfigured'](_0x4f0ca6[_0xbc12('0xa6')])){this['channel'][_0xbc12('0x89')](_0xbc12('0xa5'));}else{var _0x1e56ef=this[_0xbc12('0xe')][_0xbc12('0x7b')](this,_0x4f0ca6[_0xbc12('0xa6')]);if(!_0x1e56ef){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x4f0ca6,_0xbc12('0xa7'));}this['channel'][_0xbc12('0x79')](_0x1e56ef,_0x23f655);}this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0x4f0ca6,_0x23f655);return _0x3b1ed0;};AGIVertices[_0xbc12('0x14')][_0xbc12('0x89')]=function(_0x5e67e6){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')]('Enter\x20in\x20NOOP\x20(%s)\x20block',_0x5e67e6[_0xbc12('0x7e')]));return this[_0xbc12('0x38')][_0xbc12('0x89')](_0x5e67e6[_0xbc12('0x11c')]||_0x5e67e6['label']);};AGIVertices['prototype'][_0xbc12('0x11d')]=function(_0xc62b0c){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x11e'),_0xc62b0c[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0xc62b0c[_0xbc12('0x10e')])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0xc62b0c,_0xbc12('0x10f'));}logger['info'](util['format']('FIND\x20AGENT\x20%s\x20BY\x20%s',this['channel'][_0xbc12('0x3b')],_0xc62b0c[_0xbc12('0x10e')]));var _0x544e47=this['getPause'][_0xbc12('0x7b')](this,_0xc62b0c[_0xbc12('0x11f')]);var _0x25722e=this[_0xbc12('0x4c')][_0xbc12('0x7b')](this,_0xc62b0c[_0xbc12('0x10e')],_0x544e47);if(_0x25722e){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')]('AGENT\x20%s\x20FOUND\x20BY',this['channel'][_0xbc12('0x3b')],_0xc62b0c[_0xbc12('0x10e')]));this['channel'][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x115'),this[_0xbc12('0x38')][_0xbc12('0x3b')],_0xc62b0c[_0xbc12('0x10e')]));return{'code':0xc8,'result':_0xbc12('0x110')};}else{logger['info'](util[_0xbc12('0x28')](_0xbc12('0x111'),this['channel']['callerid'],_0xc62b0c['findBy']));this[_0xbc12('0x38')][_0xbc12('0x89')](util['format'](_0xbc12('0x115'),this[_0xbc12('0x38')][_0xbc12('0x3b')],_0xc62b0c[_0xbc12('0x10e')]));return{'code':0xc8,'result':_0xbc12('0x112')};}};AGIVertices[_0xbc12('0x14')][_0xbc12('0x120')]=function(_0x6d6b6e){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x121'),_0x6d6b6e[_0xbc12('0x7e')]));if(!this['isConfigured'](_0x6d6b6e[_0xbc12('0xcd')])){return this[_0xbc12('0x38')]['error'](_0x6d6b6e,_0xbc12('0xcc'));}var _0x1e643b=this[_0xbc12('0x1f')][_0xbc12('0x7b')](this,_0x6d6b6e[_0xbc12('0xcd')]);if(!_0x1e643b){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x6d6b6e,'no\x20file\x20audio\x20found');}var _0x425b59=this[_0xbc12('0x38')][_0xbc12('0x54')](_0xbc12('0x122'),[_0x1e643b,_0x6d6b6e['opts']]);if(_0x425b59[_0xbc12('0x77')]===-0x1){return _0x425b59;}return this['channel'][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x8f'),_0xbc12('0x122'),_0x1e643b));};AGIVertices['prototype'][_0xbc12('0x123')]=function(_0x1dafb8){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x124'),_0x1dafb8[_0xbc12('0x7e')]));if(!this['isConfigured'](_0x1dafb8[_0xbc12('0x125')])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x1dafb8,_0xbc12('0x126'));}var _0xf93ccd='';var _0x4079b3=parseInt(_0x1dafb8['queue_id'],0xa);if(isNaN(_0x4079b3)){_0xf93ccd=_0x1dafb8[_0xbc12('0x125')];}else{_0xf93ccd=this[_0xbc12('0x15')][_0xbc12('0x7b')](this,_0x1dafb8['queue_id']);if(!_0xf93ccd){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x1dafb8,'no\x20queue\x20found');}}var _0x13231b='';if(this['isConfigured'](_0x1dafb8[_0xbc12('0xcd')])){var _0x596939=this['getSound'][_0xbc12('0x7b')](this,_0x1dafb8[_0xbc12('0xcd')]);if(_0x596939){_0x13231b=_0x596939;}}this[_0xbc12('0x36')]['sync'](this,_0x1dafb8,_0xf93ccd);if(_0x1dafb8[_0xbc12('0xb5')][_0xbc12('0x127')]('x')<0x0){_0x1dafb8[_0xbc12('0xb5')]+='x';}if(_0x1dafb8[_0xbc12('0xb5')]['indexOf']('X')<0x0){_0x1dafb8[_0xbc12('0xb5')]+='X';}this[_0xbc12('0x38')][_0xbc12('0x79')](_0xbc12('0x128'),_0xf93ccd?_0xf93ccd[_0xbc12('0x129')]():'');var _0x3fa2d1=this['channel'][_0xbc12('0x54')](_0xbc12('0x12a'),[_0xf93ccd,_0x1dafb8[_0xbc12('0xb5')],_0x1dafb8[_0xbc12('0xb6')],_0x13231b,_0x1dafb8[_0xbc12('0x85')],_0x1dafb8[_0xbc12('0x7f')],_0x1dafb8['macro'],_0x1dafb8[_0xbc12('0x12b')],'',_0x1dafb8[_0xbc12('0x12c')]]);if(_0x3fa2d1['result']===-0x1){return _0x3fa2d1;}return this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x8f'),_0xbc12('0x12a'),_0xf93ccd));};AGIVertices[_0xbc12('0x14')][_0xbc12('0x12d')]=function(_0x3f9262){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x12e'),_0x3f9262[_0xbc12('0x7e')]));var _0x6c0d0b=_0x3f9262['recordingFormat']||_0xbc12('0xe4');var _0x1feddb=util[_0xbc12('0x28')](_0xbc12('0x12f'),this[_0xbc12('0x38')][_0xbc12('0x37')],rs[_0xbc12('0xd8')](0x5));var _0x58ace1=util[_0xbc12('0x28')](_0xbc12('0x130'),FILES_PATH,_0x1feddb,_0x6c0d0b);var _0x3f7378=util[_0xbc12('0x28')](_0xbc12('0xe5'),FILES_PATH,_0x1feddb);this['createSquareRecording']['sync'](this,_0x3f9262,_0x1feddb,_0x58ace1);this[_0xbc12('0x38')][_0xbc12('0x79')](_0xbc12('0x131'),_0x1feddb);logger[_0xbc12('0x2d')]('Recording\x20%s\x20%s\x20%s\x20%s',_0x3f7378,_0x6c0d0b,_0x3f9262[_0xbc12('0x132')],_0x3f9262['timeout']);return this['channel']['recordFile'](_0x3f7378,_0x6c0d0b,_0x3f9262[_0xbc12('0x132')],_0x3f9262['timeout'],undefined,!![]);};AGIVertices[_0xbc12('0x14')][_0xbc12('0x133')]=function(_0x2037c8){logger[_0xbc12('0x2d')](util['format'](_0xbc12('0x134'),_0x2037c8[_0xbc12('0x7e')]));return this[_0xbc12('0x38')][_0xbc12('0x135')](_0x2037c8[_0xbc12('0x136')][_0xbc12('0xa4')](/\s+/g,''),_0x2037c8[_0xbc12('0x132')]);};AGIVertices[_0xbc12('0x14')][_0xbc12('0x137')]=function(_0x4be1c6){logger['info'](util[_0xbc12('0x28')](_0xbc12('0x138'),_0x4be1c6[_0xbc12('0x7e')]));return this['channel'][_0xbc12('0x139')](_0x4be1c6[_0xbc12('0x13a')][_0xbc12('0xa4')](/\s+/g,''),_0x4be1c6[_0xbc12('0x132')]);};AGIVertices[_0xbc12('0x14')][_0xbc12('0x13b')]=function(_0x37ace5){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x13c'),_0x37ace5[_0xbc12('0x7e')]));return this[_0xbc12('0x38')][_0xbc12('0x13d')](_0x37ace5[_0xbc12('0x56')],_0x37ace5[_0xbc12('0x132')]);};AGIVertices['prototype'][_0xbc12('0x13e')]=function(_0x51a446){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')]('Enter\x20in\x20SENDMAIL\x20(%s)\x20block',_0x51a446['label']));if(!this[_0xbc12('0x5f')](_0x51a446[_0xbc12('0x13f')])){return this[_0xbc12('0x38')][_0xbc12('0x89')]('no\x20mail\x20account\x20configured');}var _0x1d58fd=this[_0xbc12('0x21')][_0xbc12('0x7b')](this,_0x51a446[_0xbc12('0x13f')]);if(!_0x1d58fd||!_0x1d58fd[_0xbc12('0x140')]){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x51a446,'no\x20mail\x20account\x20found');}var _0xea1f9d={'from':util[_0xbc12('0x28')](_0xbc12('0x141'),_0x1d58fd[_0xbc12('0x12')],_0x1d58fd[_0xbc12('0x142')]||_0x1d58fd['Smtp'][_0xbc12('0x143')]),'to':_0x51a446['to']||'','cc':_0x51a446['cc']||'','bcc':_0x51a446[_0xbc12('0x144')]||'','subject':_0x51a446['subject'],'html':_0x51a446[_0xbc12('0x56')],'text':_0x51a446['text']};var _0x645714={'tls':{'rejectUnauthorized':![]}};if(_0x1d58fd[_0xbc12('0x140')][_0xbc12('0x145')]){_0x645714[_0xbc12('0x145')]=_0x1d58fd[_0xbc12('0x140')][_0xbc12('0x145')];}else{_0x645714['host']=_0x1d58fd[_0xbc12('0x140')][_0xbc12('0x146')];_0x645714[_0xbc12('0x147')]=_0x1d58fd[_0xbc12('0x140')][_0xbc12('0x147')];_0x645714['secure']=_0x1d58fd['Smtp']['secure'];}if(_0x1d58fd[_0xbc12('0x140')]['authentication']){_0x645714[_0xbc12('0x148')]={'user':_0x1d58fd['Smtp'][_0xbc12('0x143')],'pass':_0x1d58fd[_0xbc12('0x140')]['pass']};}if(this[_0xbc12('0x5f')](_0x51a446[_0xbc12('0x149')])){}logger['debug'](_0xbc12('0x14a'),JSON['stringify'](_0xea1f9d));this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0x51a446,_0x51a446[_0xbc12('0x13f')]);this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')]('Trying\x20SendMail\x20with\x20account\x20%s',_0x1d58fd['name']));this[_0xbc12('0x23')][_0xbc12('0x7b')](this,_0x645714,_0xea1f9d);return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0x14b'));};AGIVertices[_0xbc12('0x14')][_0xbc12('0x14c')]=function(_0x19868e){logger['info'](util[_0xbc12('0x28')]('Enter\x20in\x20SENDFAX\x20(%s)\x20block',_0x19868e[_0xbc12('0x7e')]));return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0x14d'));};AGIVertices[_0xbc12('0x14')][_0xbc12('0x14e')]=function(_0x6e10ff){logger['info'](util[_0xbc12('0x28')](_0xbc12('0x14f'),_0x6e10ff[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0x6e10ff[_0xbc12('0x150')])){return this[_0xbc12('0x38')]['noop'](_0xbc12('0x151'));}var _0x2dfd6c=this[_0xbc12('0x33')]['sync'](this,_0x6e10ff[_0xbc12('0x150')]);if(!_0x2dfd6c){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x6e10ff,_0xbc12('0x152'));}var _0x4ac5f7={'body':_0x6e10ff[_0xbc12('0x153')],'phone':_0x6e10ff['to']||'','SmsAccountId':_0x2dfd6c['id']};logger[_0xbc12('0xae')](_0xbc12('0x154'),JSON[_0xbc12('0xd3')](_0x4ac5f7));this['createSquareDetailsReport'][_0xbc12('0x7b')](this,_0x6e10ff,_0x6e10ff['sms_account_id']);this['channel']['noop'](util['format'](_0xbc12('0x155'),_0x2dfd6c[_0xbc12('0x12')]));this['createSmsMessage'][_0xbc12('0x7b')](this,_0x4ac5f7);return this['channel'][_0xbc12('0x89')]('Sms\x20message\x20added\x20to\x20outgoing\x20process');};AGIVertices['prototype'][_0xbc12('0x156')]=function(_0x247cf7){logger[_0xbc12('0x2d')](util['format'](_0xbc12('0x157'),_0x247cf7[_0xbc12('0x7e')]));if(!this['isConfigured'](_0x247cf7[_0xbc12('0xa6')])){return this['channel']['error'](_0x247cf7,_0xbc12('0x158'));}var _0x21054f=this['getVariable'][_0xbc12('0x7b')](this,_0x247cf7[_0xbc12('0xa6')]);if(!_0x21054f){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x247cf7,_0xbc12('0xa7'));}return this['channel'][_0xbc12('0x79')](_0x21054f,_0x247cf7[_0xbc12('0x159')]);};AGIVertices[_0xbc12('0x14')]['start']=function(_0x165d4e){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x15a'),_0x165d4e[_0xbc12('0x7e')]));this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0x15b'));if(_0x165d4e[_0xbc12('0x82')]===_0xbc12('0x15c')){this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0x15d'));return this[_0xbc12('0x38')][_0xbc12('0x82')]();}return this['channel'][_0xbc12('0x89')](_0xbc12('0x15e'));};AGIVertices[_0xbc12('0x14')][_0xbc12('0x15f')]=function(_0x781d82){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x160'),_0x781d82[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0x781d82[_0xbc12('0x161')])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x781d82,'no\x20subproject\x20selected');}var _0x204db1=this[_0xbc12('0x17')]['sync'](this,_0x781d82[_0xbc12('0x161')]);if(!this[_0xbc12('0x5f')](_0x204db1)){return this['channel'][_0xbc12('0x2c')](_0x781d82,util[_0xbc12('0x28')](_0xbc12('0x162'),_0x781d82['project_id']));}if(_0x204db1===this[_0xbc12('0x38')]['arg_1']){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x781d82,_0xbc12('0x163'));}this[_0xbc12('0x36')][_0xbc12('0x7b')](this,_0x781d82,_0x204db1);var _0x41a9aa=this[_0xbc12('0x38')][_0xbc12('0x54')]('AGI',util['format']('agi://%s/square,\x22%s\x22,\x22%s\x22',config['agi'][_0xbc12('0x146')]||_0xbc12('0x164'),_0x204db1,this[_0xbc12('0x38')][_0xbc12('0x39')]));if(_0x41a9aa[_0xbc12('0x77')]===-0x1){return _0x41a9aa;}return this[_0xbc12('0x38')][_0xbc12('0x89')](util['format'](_0xbc12('0x8f'),_0xbc12('0x165'),_0x204db1));};AGIVertices[_0xbc12('0x14')][_0xbc12('0x166')]=function(_0x36d96b){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')]('Enter\x20in\x20SYSTEM\x20(%s)\x20block',_0x36d96b['label']));var _0x3a7c80=this[_0xbc12('0x167')][_0xbc12('0x7b')](this,_0x36d96b[_0xbc12('0x80')]);this[_0xbc12('0x36')]['sync'](this,_0x36d96b,_0x36d96b[_0xbc12('0x80')]);if(this['isConfigured'](_0x36d96b[_0xbc12('0xa6')])){var _0x34b3fd=this['getVariable']['sync'](this,_0x36d96b['variable_id']);if(_0x34b3fd){this[_0xbc12('0x38')][_0xbc12('0x79')](_0x34b3fd,_0x3a7c80);return this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')]('sh\x20command:\x20%s\x20result\x20on\x20variable:\x20%s',_0x36d96b[_0xbc12('0x80')],_0x34b3fd));}}return this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x168'),_0x36d96b[_0xbc12('0x80')]));};AGIVertices[_0xbc12('0x14')][_0xbc12('0x169')]=function(_0x292cf2){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')]('Enter\x20in\x20GOOGLETTS\x20(%s)\x20block',_0x292cf2[_0xbc12('0x7e')]));if(!this['isConfigured'](_0x292cf2[_0xbc12('0x56')])){return this[_0xbc12('0x38')][_0xbc12('0x89')](_0xbc12('0xbb'));}this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x16a'),_0x292cf2[_0xbc12('0x56')]));var _0x58107b=this[_0xbc12('0x55')][_0xbc12('0x7b')](this,_0x292cf2);if(_0x58107b){this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x16b'),_0x58107b));var _0x424a72=this[_0xbc12('0x38')][_0xbc12('0xdf')](_0x58107b);try{fs['unlink'](_0x58107b+_0xbc12('0xe1'));}catch(_0x5c837d){logger['error'](_0x5c837d);}return _0x424a72;}return this['channel'][_0xbc12('0x2c')](_0x292cf2,_0xbc12('0xbf'));};AGIVertices[_0xbc12('0x14')]['unpause']=function(_0x424a4e){logger[_0xbc12('0x2d')](util['format']('Enter\x20in\x20UNPAUSE\x20(%s)\x20block',_0x424a4e[_0xbc12('0x7e')]));if(!this['isConfigured'](_0x424a4e['findBy'])){return this[_0xbc12('0x38')][_0xbc12('0x2c')](_0x424a4e,_0xbc12('0x10f'));}logger['info'](util['format'](_0xbc12('0x114'),this[_0xbc12('0x38')][_0xbc12('0x3b')],_0x424a4e['findBy']));var _0x3c6cac=this[_0xbc12('0x4e')][_0xbc12('0x7b')](this,_0x424a4e[_0xbc12('0x10e')]);if(_0x3c6cac){logger['info'](util['format'](_0xbc12('0x115'),this[_0xbc12('0x38')][_0xbc12('0x3b')],_0x424a4e[_0xbc12('0x10e')]));this[_0xbc12('0x38')][_0xbc12('0x89')](util[_0xbc12('0x28')](_0xbc12('0x115'),this[_0xbc12('0x38')][_0xbc12('0x3b')],_0x424a4e[_0xbc12('0x10e')]));return{'code':0xc8,'result':_0xbc12('0x110')};}else{logger[_0xbc12('0x2d')](util['format'](_0xbc12('0x111'),this[_0xbc12('0x38')][_0xbc12('0x3b')],_0x424a4e[_0xbc12('0x10e')]));this[_0xbc12('0x38')]['noop'](util[_0xbc12('0x28')](_0xbc12('0x111'),this[_0xbc12('0x38')][_0xbc12('0x3b')],_0x424a4e['findBy']));return{'code':0xc8,'result':_0xbc12('0x112')};}};AGIVertices['prototype'][_0xbc12('0x16c')]=function(_0x59ec54){logger[_0xbc12('0x2d')](util['format']('Enter\x20in\x20VOICEMAIL\x20(%s)\x20block',_0x59ec54[_0xbc12('0x7e')]));var _0x31060c=this[_0xbc12('0x38')][_0xbc12('0x54')](_0xbc12('0x16d'),[_0x59ec54[_0xbc12('0x16e')],_0x59ec54['options']]);if(_0x31060c['result']===-0x1){return _0x31060c;}return this[_0xbc12('0x38')]['noop'](util['format'](_0xbc12('0x8f'),_0xbc12('0x16d'),_0x59ec54[_0xbc12('0x16e')]));};AGIVertices[_0xbc12('0x14')][_0xbc12('0x16f')]=function(_0x5f3bff){logger[_0xbc12('0x2d')](util[_0xbc12('0x28')](_0xbc12('0x170'),_0x5f3bff[_0xbc12('0x7e')]));if(!this[_0xbc12('0x5f')](_0x5f3bff['variable_id'])){return this['channel'][_0xbc12('0x2c')](_0x5f3bff,_0xbc12('0x158'));}var _0x5c4b04=this[_0xbc12('0xe')][_0xbc12('0x7b')](this,_0x5f3bff['variable_id']);if(!_0x5c4b04){return this[_0xbc12('0x38')]['error'](_0x5f3bff,_0xbc12('0xa7'));}var _0xab6b66=this['channel'][_0xbc12('0xe')](_0x5c4b04);return{'code':0xc8,'result':_0xab6b66['extra']?_0xab6b66[_0xbc12('0x75')]:'-'};};String[_0xbc12('0x14')][_0xbc12('0x74')]=function(_0x1426b4,_0x5b0b72){return this[_0xbc12('0x72')](_0x1426b4)['join'](_0x5b0b72);};module[_0xbc12('0x171')]=AGIVertices;
\ No newline at end of file
+var _0x71d0=['Enter\x20in\x20GOOGLEASR\x20(%s)\x20block\x20%s','no\x20key\x20configured','wav','%s/recordings/%s','intKey','google\x20%s\x20file\x20created','GOOGLE_ASR_%s','GoogleASR\x20Result\x20%s','Enter\x20in\x20TILDEASR\x20(%s)\x20block','appid','no\x20appid\x20configured','appsecret','no\x20appsecret\x20configured','%s.%s','NOBEEP','tilde\x20%s\x20file\x20created','TILDE_ASR_%s','gotoc','Enter\x20in\x20GOTO\x20(%s)\x20block','gotoif','Enter\x20in\x20GOTOIF\x20(%s)\x20block','condition','no\x20condition\x20configured','true','false','EVAL\x20CONDITION\x20%s\x20%s','gotoiftime','interval_id','no\x20intervals\x20found','IFTIME(%s?true:false)','IFTIME\x20%s\x20%s','hangup','ispeechasr','Enter\x20in\x20ISPEECHASR\x20(%s)\x20block','recordFile','ispeech\x20%s\x20file\x20created','ispeechASR','ISPEECH_ASR_%s','ispeechtts','Enter\x20in\x20ISPEECHTTS\x20(%s)\x20block','Trying\x20ispeech\x20TTS\x20%s','Enter\x20in\x20LOGIN\x20(%s)\x20block','findBy','no\x20find\x20by\x20configured','FIND\x20AGENT\x20%s\x20BY\x20%s','agentLogin','AGENT\x20%s\x20FOUND\x20BY','success','AGENT\x20%s\x20NOT\x20FOUND\x20BY','failure','logout','math','operation','isArray','%s[%s]','variable\x20%s[key]\x20set','Enter\x20in\x20MENU\x20(%s)\x20block','Enter\x20in\x20NOOP\x20(%s)\x20block','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','no\x20queue\x20selected','no\x20queue\x20found','indexOf','XMCS-QUEUE','macro','gosub','position','QUEUE','record','Enter\x20in\x20RECORD\x20(%s)\x20block','%s_%s','%s/recordings/%s.%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','Enter\x20in\x20SENDMAIL\x20(%s)\x20block','account_id','Smtp','no\x20mail\x20account\x20found','email','user','bcc','subject','service','host','port','secure','authentication','auth','pass','template_id','sendMail\x20message','sendMailMessage','sendFax','Enter\x20in\x20SENDFAX\x20(%s)\x20block','SENDFAX\x20block\x20not\x20implemented','Enter\x20in\x20SENDSMS\x20(%s)\x20block','sms_account_id','getSmsAccount','no\x20sms\x20account\x20found','sms_text','sendSMS\x20message','set','Enter\x20in\x20SET\x20(%s)\x20block','start','Enter\x20in\x20START\x20(%s)\x20block','Skipped\x20Answer','subproject','Enter\x20in\x20SUBPROJECT\x20(%s)\x20block','project_id','no\x20subproject\x20found\x20with\x20id\x20%d','AGI','agi://%s/square,\x22%s\x22,\x22%s\x22','127.0.0.1','system','sh\x20command:\x20%s\x20result\x20on\x20variable:\x20%s','sh\x20command:\x20%s\x20result\x20no\x20stored','Enter\x20in\x20GOOGLETTS\x20(%s)\x20block','Trying\x20Google\x20TTS\x20%s','Google\x20TTS\x20%s\x20file\x20created','Enter\x20in\x20UNPAUSE\x20(%s)\x20block','voicemail','Enter\x20in\x20VOICEMAIL\x20(%s)\x20block','VOICEMAIL','mailbox','Enter\x20in\x20SWITCH\x20(%s)\x20block','no\x20variable\x20selected','exports','util','lodash','shelljs','randomstring','moment','mustache','agi','menu','getdigits','getsecretdigits','channel','rpc','mailRpc','getVariable','prototype','getVoiceQueue','getVoiceQueueById','then','name','getSquareProject','getSquareProjectById','catch','getSquareOdbc','getSquareOdbcById','dsn','getUser','getUserById','getSound','getSoundPath','save_name','getMailAccount','getIntervals','getIntervalById','IntervalId','map','interval','%s/sounds/converted/%s','open','error','Error\x20getting\x20ODBC\x20connection\x20%s','ODBC\x20connection\x20successfully','info','Error\x20executing\x20query\x20%s','Query\x20executed\x20correctly\x20%s','close','getSmsAccountById','createSmsMessage','createSquareDetailsReport','uniqueid','label','callerid','createSquareRecording','context','extension','priority','accountcode','dnid','arg_1','file','createCmContact','callback_','random','isEmpty','lastName','isNil','phone','Callback\x20scheduled\x20at\x20','scheduledAt','toString','callback_priority','getPause','getPauseById','agentPause','agent','agentUnpause','agentLogout','internal','format','%s/%s@from-sip/n','LOCAL','shellCommand','exec','trim','googleTTS','text','google_tts_language','googleDialogflow','key','ispeechTTS','en-US','speed','ispeech_asr_language','isConfigured','model','awsPolly','aws_access_key_id','aws_secret_access_key','aws_polly_region','Amy','aws_text_type','googleASR','tildeASR','clear','includes','clone','hasOwnProperty','isString','replaceAllVariables','split','length','replaceAll','extra','result','The\x20\x22%s\x22\x20variable\x20value\x20is:\x20%s','setVariable','maxRetry','sync','retry','Enter\x20in\x20AGI\x20(%s)\x20block','command','args','answer','Enter\x20in\x20ANSWER\x20(%s)\x20block','timeout','Wait\x20%s\x20seconds\x20before\x20answer','wait','callback','Enter\x20in\x20CALLBACK\x20(%s)\x20block','list_id','delay','minutes','CALLBACK\x20added\x20phone:\x20%s\x20on\x20list:\x20%s\x20at\x20%s','custom_app','Enter\x20in\x20CUSTOM\x20APP\x20(%s)\x20block','noop','Executed\x20command\x20%s\x20%s','application','options','lumenvoxtts','Enter\x20in\x20LUMENVOXTTS\x20(%s)\x20block','no\x20text\x20configured','Executed\x20command\x20MRCPSynth\x20%s','lumenvoxasr','Enter\x20in\x20LUMENVOXASR\x20(%s)\x20block','no\x20grammar\x20configured','grammar','MRCPRecog','getAndSetVariable','RECOG_CONFIDENCE()','LUMENVOX_ASR_CONFIDENCE','RECOG_INPUT()','LUMENVOX_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','query','replace','query:\x20%s','variable_id','no\x20variable\x20found','forEach','keys','%s_ROWS_COUNT','variable\x20%s\x20set','debug','no\x20user\x20selected','sip_id','SIP/%s','opts','url','Enter\x20in\x20DIALOGFLOW\x20(%s)\x20block','toUpperCase','Dialogflow\x20Result\x20%s','speech','Google\x20TTS\x20is\x20unreachable','end','Enter\x20in\x20END\x20(%s)\x20block','ext_dial','trunk_id','getTrunk','no\x20trunk\x20found','trunk_name','SIP/%s/%s','Executed\x20command\x20%s','DIAL','Enter\x20in\x20FINALLY\x20(%s)\x20block','finally','Enter\x20in\x20GETDIGITS\x20(%s)\x20block','file_id','no\x20file\x20audio\x20selected','no\x20file\x20audio\x20found','no\x20variable\x20selected\x20for\x20the\x20result','getData','response','test','stringify','mindigit','maxdigit','hiddendigitsnum','generate','hiddendigitspos','substr','Enter\x20in\x20GETSECRETDIGITS\x20(%s)\x20block','goal','Enter\x20in\x20GOAL\x20(%s)\x20block','goalname','GOAL\x20%s','awspolly','[AGI]\x20Enter\x20in\x20AWSPOLLY\x20(%s)\x20block','streamFile','unlink','.wav','aws\x20Polly\x20is\x20unreachable','googleasr'];(function(_0xdd0313,_0x251c2b){var _0x2bd7e8=function(_0x340f1f){while(--_0x340f1f){_0xdd0313['push'](_0xdd0313['shift']());}};_0x2bd7e8(++_0x251c2b);}(_0x71d0,0x8e));var _0x071d=function(_0x4529f6,_0x337c92){_0x4529f6=_0x4529f6-0x0;var _0x601c79=_0x71d0[_0x4529f6];return _0x601c79;};'use strict';var fs=require('fs');var path=require('path');var util=require(_0x071d('0x0'));var _=require(_0x071d('0x1'));var sh=require(_0x071d('0x2'));var odbc=require('odbc')();var rs=require(_0x071d('0x3'));var moment=require(_0x071d('0x4'));var Mustache=require(_0x071d('0x5'));var logger=require('../../config/logger')(_0x071d('0x6'));var config=require('../../config/environment');var scripts=require('./scripts');var FILES_PATH='/var/opt/motion2/server/files';var verticesWithRetry=[_0x071d('0x7'),_0x071d('0x8'),_0x071d('0x9')];var AGIVertices=function(_0x438b1b,_0x1e87eb,_0xc48345){this[_0x071d('0xa')]=_0x438b1b;this[_0x071d('0xb')]=_0x1e87eb;this[_0x071d('0xc')]=_0xc48345;};AGIVertices['prototype'][_0x071d('0xd')]=function(_0x5e8497,_0x423f99){this[_0x071d('0xb')]['getVariableById'](_0x5e8497)['then'](function(_0xf7b94d){_0x423f99(null,_0xf7b94d?_0xf7b94d['name']:![]);})['catch'](function(_0x2f9296){_0x423f99(_0x2f9296);});};AGIVertices[_0x071d('0xe')][_0x071d('0xf')]=function(_0x2db7b2,_0x4604f3){this[_0x071d('0xb')][_0x071d('0x10')](_0x2db7b2)[_0x071d('0x11')](function(_0xca4a97){_0x4604f3(null,_0xca4a97?_0xca4a97[_0x071d('0x12')]:![]);})['catch'](function(_0x4ee738){_0x4604f3(_0x4ee738);});};AGIVertices[_0x071d('0xe')][_0x071d('0x13')]=function(_0x559443,_0x2780c3){this[_0x071d('0xb')][_0x071d('0x14')](_0x559443)[_0x071d('0x11')](function(_0x5b7465){_0x2780c3(null,_0x5b7465?_0x5b7465[_0x071d('0x12')]:![]);})[_0x071d('0x15')](function(_0x1aece0){_0x2780c3(_0x1aece0);});};AGIVertices[_0x071d('0xe')][_0x071d('0x16')]=function(_0x219abd,_0x351d15){this[_0x071d('0xb')][_0x071d('0x17')](_0x219abd)['then'](function(_0x361b6f){_0x351d15(null,_0x361b6f?_0x361b6f[_0x071d('0x18')]:![]);})[_0x071d('0x15')](function(_0x11f9fc){_0x351d15(_0x11f9fc);});};AGIVertices[_0x071d('0xe')][_0x071d('0x19')]=function(_0x3d7857,_0x2d38cf){this[_0x071d('0xb')][_0x071d('0x1a')](_0x3d7857)['then'](function(_0x2c6d2b){_0x2d38cf(null,_0x2c6d2b?_0x2c6d2b[_0x071d('0x12')]:![]);})['catch'](function(_0x465b80){_0x2d38cf(_0x465b80);});};AGIVertices[_0x071d('0xe')]['getTrunk']=function(_0x3eb700,_0x140c5b){this['rpc']['getTrunkById'](_0x3eb700)[_0x071d('0x11')](function(_0x30ffa1){_0x140c5b(null,_0x30ffa1?_0x30ffa1[_0x071d('0x12')]:![]);})[_0x071d('0x15')](function(_0x490b30){_0x140c5b(_0x490b30);});};AGIVertices['prototype'][_0x071d('0x1b')]=function(_0xbd1026,_0x149c2b){var _0x29e0c2=this;this['rpc']['getSoundById'](_0xbd1026)['then'](function(_0x42714b){_0x149c2b(null,_0x42714b?_0x29e0c2[_0x071d('0x1c')](_0x42714b[_0x071d('0x1d')]):![]);})[_0x071d('0x15')](function(_0x4de88f){_0x149c2b(_0x4de88f);});};AGIVertices[_0x071d('0xe')][_0x071d('0x1e')]=function(_0x57b502,_0x2a2a31){this[_0x071d('0xb')]['getMailAccountById'](_0x57b502)[_0x071d('0x11')](function(_0x576aed){_0x2a2a31(null,_0x576aed?_0x576aed:![]);})[_0x071d('0x15')](function(_0x493e29){_0x2a2a31(_0x493e29);});};AGIVertices[_0x071d('0xe')]['sendMailMessage']=function(_0x3e2c44,_0x7fb2d0,_0x5748e6){this['mailRpc']['sendMailMessage'](_0x3e2c44,_0x7fb2d0)[_0x071d('0x11')](function(){_0x5748e6(null);})[_0x071d('0x15')](function(_0x56f0c5){_0x5748e6(_0x56f0c5);});};AGIVertices[_0x071d('0xe')][_0x071d('0x1f')]=function(_0x5cfa8f,_0x5ccecd){this['rpc'][_0x071d('0x20')](_0x5cfa8f)['then'](function(_0xb1dbc6){if(_0xb1dbc6){if(_0xb1dbc6[_0x071d('0x21')]){_0x5ccecd(null,[_0xb1dbc6['interval']]);}else{_0x5ccecd(null,_[_0x071d('0x22')](_0xb1dbc6['Intervals'],_0x071d('0x23')));}}else{_0x5ccecd(null,![]);}})[_0x071d('0x15')](function(_0x3b5ba1){_0x5ccecd(_0x3b5ba1);});};AGIVertices[_0x071d('0xe')]['getSoundPath']=function(_0x3121a1){return util['format'](_0x071d('0x24'),FILES_PATH,_0x3121a1);};AGIVertices[_0x071d('0xe')]['getQueryOdbc']=function(_0x3ee031,_0xf10791,_0x53a181){odbc[_0x071d('0x25')](_0x3ee031,function(_0x3b7d9d){if(_0x3b7d9d){logger[_0x071d('0x26')](_0x071d('0x27'),_0x3b7d9d);_0x53a181(_0x3b7d9d);}else{logger['info'](_0x071d('0x28'));odbc['query'](_0xf10791,function(_0x27eb8b,_0x3710b4){if(_0x27eb8b){logger[_0x071d('0x29')](_0x071d('0x2a'),_0xf10791);_0x53a181(_0x27eb8b);}else{logger[_0x071d('0x29')](_0x071d('0x2b'),_0xf10791);odbc[_0x071d('0x2c')](function(_0x36f382){if(_0x36f382){logger[_0x071d('0x26')]('Error\x20closing\x20connection\x20to\x20odbc\x20%s',_0x36f382);}_0x53a181(null,_0x3710b4);});}});}});};AGIVertices[_0x071d('0xe')]['getSmsAccount']=function(_0x50d484,_0xbc3ffd){this[_0x071d('0xb')][_0x071d('0x2d')](_0x50d484)[_0x071d('0x11')](function(_0xd6ca66){_0xbc3ffd(null,_0xd6ca66?_0xd6ca66:![]);})[_0x071d('0x15')](function(_0xdda81){_0xbc3ffd(_0xdda81);});};AGIVertices[_0x071d('0xe')]['createSmsMessage']=function(_0x455481,_0x39346c){this[_0x071d('0xb')][_0x071d('0x2e')](_0x455481)['then'](function(_0x1e2035){_0x39346c(null,_0x1e2035);})[_0x071d('0x15')](function(_0xccc5ab){_0x39346c(_0xccc5ab);});};AGIVertices[_0x071d('0xe')][_0x071d('0x2f')]=function(_0x4f36f9,_0x537043,_0x1f5a64){this[_0x071d('0xb')]['createSquareDetailsReport']({'uniqueid':this[_0x071d('0xa')][_0x071d('0x30')],'node':_0x4f36f9[_0x071d('0x31')],'application':_0x4f36f9['agicommand'],'data':_0x537043||null,'project_name':this[_0x071d('0xa')]['arg_1'],'callerid':this[_0x071d('0xa')][_0x071d('0x32')]})[_0x071d('0x11')](function(_0x14633e){_0x1f5a64(null,_0x14633e);})['catch'](function(_0x120aa6){_0x1f5a64(_0x120aa6);});};AGIVertices[_0x071d('0xe')][_0x071d('0x33')]=function(_0x1dddb6,_0x5660cb,_0x2b5052,_0x33a1bc){this[_0x071d('0xb')]['createSquareRecording']({'uniqueid':this[_0x071d('0xa')][_0x071d('0x30')],'callerid':this[_0x071d('0xa')][_0x071d('0x32')],'calleridname':this[_0x071d('0xa')]['calleridname'],'context':this[_0x071d('0xa')][_0x071d('0x34')],'extension':this[_0x071d('0xa')][_0x071d('0x35')],'priority':this['channel'][_0x071d('0x36')],'accountcode':this[_0x071d('0xa')][_0x071d('0x37')],'dnid':this[_0x071d('0xa')][_0x071d('0x38')],'projectName':this[_0x071d('0xa')][_0x071d('0x39')],'saveName':_0x5660cb,'filename':_0x1dddb6[_0x071d('0x3a')]||_0x5660cb,'savePath':_0x2b5052})[_0x071d('0x11')](function(_0x252dda){_0x33a1bc(null,_0x252dda);})[_0x071d('0x15')](function(_0x31bfd3){_0x33a1bc(_0x31bfd3);});};AGIVertices[_0x071d('0xe')]['createCmContact']=function(_0x595df0,_0x3045d1){this['rpc'][_0x071d('0x3b')]({'firstName':_['isEmpty'](_0x595df0[_0x071d('0x12')])||_['isNil'](_0x595df0['name'])?_0x071d('0x3c')+Math[_0x071d('0x3d')]():_0x595df0[_0x071d('0x12')],'lastName':_[_0x071d('0x3e')](_0x595df0[_0x071d('0x3f')])||_[_0x071d('0x40')](_0x595df0[_0x071d('0x3f')])?null:_0x595df0['lastName'],'phone':_0x595df0[_0x071d('0x41')],'ListId':_0x595df0['list_id'],'scheduledAt':_0x595df0['scheduledAt'],'callbackUniqueid':this[_0x071d('0xa')][_0x071d('0x30')],'tags':'callback','description':_0x071d('0x42')+_0x595df0[_0x071d('0x43')][_0x071d('0x44')](),'priority':_0x595df0[_0x071d('0x45')]})['then'](function(_0x437266){_0x3045d1(null,_0x437266);})[_0x071d('0x15')](function(_0x43d010){_0x3045d1(_0x43d010);});};AGIVertices['prototype'][_0x071d('0x46')]=function(_0x2dd0e2,_0x376883){this['rpc'][_0x071d('0x47')](_0x2dd0e2)[_0x071d('0x11')](function(_0x328cac){_0x376883(null,_0x328cac?_0x328cac[_0x071d('0x12')]:![]);})['catch'](function(_0x1ec698){_0x376883(_0x1ec698);});};AGIVertices[_0x071d('0xe')][_0x071d('0x48')]=function(_0x3710c0,_0x2bc023,_0x1841e9){var _0x33f54d={'role':_0x071d('0x49')};_0x33f54d[_0x3710c0]=this[_0x071d('0xa')][_0x071d('0x32')];this['rpc'][_0x071d('0x48')](_0x33f54d,_0x2bc023,this['channel'][_0x071d('0x30')])[_0x071d('0x11')](function(_0x21d433){_0x1841e9(null,_[_0x071d('0x40')](_0x21d433)?![]:!![]);})[_0x071d('0x15')](function(_0x3e57ca){logger[_0x071d('0x26')](_0x3e57ca);_0x1841e9(null,![]);});};AGIVertices['prototype'][_0x071d('0x4a')]=function(_0x34758c,_0x1a5f8e){var _0x2ce1ef={'role':_0x071d('0x49')};_0x2ce1ef[_0x34758c]=this[_0x071d('0xa')][_0x071d('0x32')];this[_0x071d('0xb')][_0x071d('0x4a')](_0x2ce1ef)[_0x071d('0x11')](function(_0x244bcc){_0x1a5f8e(null,_[_0x071d('0x40')](_0x244bcc)?![]:!![]);})[_0x071d('0x15')](function(_0x272ae2){logger[_0x071d('0x26')](_0x272ae2);_0x1a5f8e(null,![]);});};AGIVertices[_0x071d('0xe')][_0x071d('0x4b')]=function(_0x4770c0,_0x23f922){var _0xc35c24={'role':_0x071d('0x49')};_0xc35c24[_0x4770c0]=this[_0x071d('0xa')][_0x071d('0x32')];this[_0x071d('0xb')][_0x071d('0x4b')](_0xc35c24)[_0x071d('0x11')](function(_0x30e13){_0x23f922(null,_['isNil'](_0x30e13)?![]:!![]);})[_0x071d('0x15')](function(_0x468157){logger[_0x071d('0x26')](_0x468157);_0x23f922(null,![]);});};AGIVertices['prototype']['agentLogin']=function(_0x867f5,_0x4149cb){var _0x3270b5={'role':_0x071d('0x49')};_0x3270b5[_0x867f5]=this[_0x071d('0xa')][_0x071d('0x32')];var _0xc948d8=_0x867f5!=_0x071d('0x4c')?util[_0x071d('0x4d')](_0x071d('0x4e'),_0x071d('0x4f'),this[_0x071d('0xa')][_0x071d('0x32')]):undefined;this['rpc']['agentLogin'](_0x3270b5,_0xc948d8)[_0x071d('0x11')](function(_0x352e4e){_0x4149cb(null,_[_0x071d('0x40')](_0x352e4e)?![]:!![]);})[_0x071d('0x15')](function(_0x1d2c09){logger[_0x071d('0x26')](_0x1d2c09);_0x4149cb(null,![]);});};AGIVertices[_0x071d('0xe')][_0x071d('0x50')]=function(_0x5a04c4,_0xcc17f0){sh[_0x071d('0x51')](_[_0x071d('0x52')](_0x5a04c4),function(_0x31732a,_0x472692){var _0x548473=_0x472692['replace'](/(\r\n|\n|\r)/gm,'');_0xcc17f0(null,_0x548473);});};AGIVertices[_0x071d('0xe')]['googleTTS']=function(_0x1012f8,_0x5b6eac){scripts[_0x071d('0x53')](_0x1012f8[_0x071d('0x54')],_0x1012f8[_0x071d('0x55')]||'en',0x1)['then'](function(_0x29bdc6){_0x5b6eac(null,_0x29bdc6);})['catch'](function(_0x5ed9ee){_0x5b6eac(_0x5ed9ee);});};AGIVertices[_0x071d('0xe')]['googleDialogflow']=function(_0x399044,_0x511d48){scripts[_0x071d('0x56')](this['channel'][_0x071d('0x30')],_0x399044[_0x071d('0x57')],_0x399044[_0x071d('0x54')],_0x399044['dialogflow_language']||'en')[_0x071d('0x11')](function(_0x4769f5){_0x511d48(null,_0x4769f5);})[_0x071d('0x15')](function(_0x3609f2){_0x511d48(_0x3609f2);});};AGIVertices['prototype'][_0x071d('0x58')]=function(_0x26bf22,_0x3043df){scripts['ispeechTTS'](_0x26bf22[_0x071d('0x57')],_0x26bf22[_0x071d('0x54')],_0x26bf22['ispeech_tts_language']||_0x071d('0x59'),_0x26bf22[_0x071d('0x5a')])[_0x071d('0x11')](function(_0x34a045){_0x3043df(null,_0x34a045);})[_0x071d('0x15')](function(_0x53d543){_0x3043df(_0x53d543);});};AGIVertices[_0x071d('0xe')]['ispeechASR']=function(_0x239491,_0x190e02,_0x4d28e7){scripts['ispeechASR'](_0x190e02,_0x239491[_0x071d('0x57')],_0x239491[_0x071d('0x5b')]||'en-US',this[_0x071d('0x5c')](_0x239491[_0x071d('0x5d')])?_0x239491['model']:undefined)[_0x071d('0x11')](function(_0x1d606a){_0x4d28e7(null,_0x1d606a);})[_0x071d('0x15')](function(_0x4f9b6e){_0x4d28e7(_0x4f9b6e);});};AGIVertices['prototype'][_0x071d('0x5e')]=function(_0x17794b,_0x464c57){scripts[_0x071d('0x5e')](_0x17794b[_0x071d('0x5f')],_0x17794b[_0x071d('0x60')],_0x17794b[_0x071d('0x61')],_0x17794b['aws_polly_voice']||_0x071d('0x62'),_0x17794b[_0x071d('0x54')],_0x17794b[_0x071d('0x63')]||_0x071d('0x54'))[_0x071d('0x11')](function(_0x2403b1){_0x464c57(null,_0x2403b1);})[_0x071d('0x15')](function(_0x1126dd){_0x464c57(_0x1126dd);});};AGIVertices[_0x071d('0xe')]['googleASR']=function(_0x3a0e28,_0x5ac6b2,_0x27cc0e){scripts[_0x071d('0x64')](_0x5ac6b2,_0x3a0e28[_0x071d('0x57')],_0x3a0e28['google_asr_language']||_0x071d('0x59'))[_0x071d('0x11')](function(_0x4d542f){_0x27cc0e(null,_0x4d542f);})[_0x071d('0x15')](function(_0x2d3ce1){_0x27cc0e(_0x2d3ce1);});};AGIVertices['prototype'][_0x071d('0x65')]=function(_0x115663,_0x4b45af,_0x56b11b){scripts[_0x071d('0x65')](_0x4b45af,_0x115663['appid'],_0x115663['appsecret'],_0x115663['uri'])[_0x071d('0x11')](function(_0x4a9418){_0x56b11b(null,_0x4a9418);})[_0x071d('0x15')](function(_0x49845a){_0x56b11b(_0x49845a);});};AGIVertices[_0x071d('0xe')][_0x071d('0x66')]=function(_0x3f2d02){var _0x143f7a=_[_0x071d('0x67')](verticesWithRetry,_0x3f2d02['agicommand'])?_0x3f2d02:_[_0x071d('0x68')](_0x3f2d02);for(var _0x40e130 in _0x143f7a){if(_0x143f7a[_0x071d('0x69')](_0x40e130)){if(_0x143f7a[_0x40e130]&&_[_0x071d('0x6a')](_0x143f7a[_0x40e130])){_0x143f7a[_0x40e130]=this[_0x071d('0x6b')](_0x143f7a[_0x40e130]);}}}return _0x143f7a;};AGIVertices[_0x071d('0xe')]['replaceAllVariables']=function(_0x1ed3b4){var _0x5bb2d5=_0x1ed3b4[_0x071d('0x6c')]('{');for(var _0x47d293=0x1;_0x47d293<_0x5bb2d5[_0x071d('0x6d')];_0x47d293+=0x1){var _0x2065fd=_0x5bb2d5[_0x47d293][_0x071d('0x6c')]('}');if(_0x2065fd['length']>0x1){_0x1ed3b4=_0x1ed3b4[_0x071d('0x6e')]('{'+_0x2065fd[0x0]+'}',this[_0x071d('0xa')][_0x071d('0xd')](_0x2065fd[0x0])[_0x071d('0x6f')]||_0x2065fd[0x0]);}}if(_0x5bb2d5[_0x071d('0x6d')]===0x1){return _0x1ed3b4['toString']();}return this['replaceAllVariables'](_0x1ed3b4);};AGIVertices[_0x071d('0xe')]['getAndSetVariable']=function(_0x532721,_0x4478c2){var _0x3e5dc3=this['channel'][_0x071d('0xd')](_0x532721);if(_0x3e5dc3[_0x071d('0x70')]===-0x1){return _0x3e5dc3;}logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x71'),_0x4478c2,_0x3e5dc3[_0x071d('0x6f')]));return this[_0x071d('0xa')][_0x071d('0x72')](_0x4478c2,_0x3e5dc3[_0x071d('0x6f')]);};AGIVertices['prototype']['isConfigured']=function(_0x57a920){return _0x57a920&&_0x57a920!=='0'&&_0x57a920!=='-1'&&_0x57a920!=='';};AGIVertices['prototype'][_0x071d('0x73')]=function(_0x21e87f){this[_0x071d('0x2f')][_0x071d('0x74')](this,_0x21e87f,'-');_0x21e87f[_0x071d('0x75')]=_0x21e87f['maxRetry'];return{'code':0xc8,'result':'-'};};AGIVertices[_0x071d('0xe')][_0x071d('0x6')]=function(_0x4fcf6c){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x76'),_0x4fcf6c[_0x071d('0x31')]));return this[_0x071d('0xa')][_0x071d('0x6')]([_0x4fcf6c[_0x071d('0x77')],_0x4fcf6c[_0x071d('0x78')]]);};AGIVertices[_0x071d('0xe')][_0x071d('0x79')]=function(_0x3f70fb){logger['info'](util[_0x071d('0x4d')](_0x071d('0x7a'),_0x3f70fb[_0x071d('0x31')]));if(this[_0x071d('0x5c')](_0x3f70fb[_0x071d('0x7b')])){logger['info'](util[_0x071d('0x4d')](_0x071d('0x7c'),_0x3f70fb[_0x071d('0x7b')]));var _0x2035a3=this[_0x071d('0xa')][_0x071d('0x7d')](_0x3f70fb[_0x071d('0x7b')]);if(_0x2035a3[_0x071d('0x70')]===-0x1){return _0x2035a3;}}return this['channel'][_0x071d('0x79')]();};AGIVertices[_0x071d('0xe')][_0x071d('0x7e')]=function(_0x295760){logger['info'](util['format'](_0x071d('0x7f'),_0x295760[_0x071d('0x31')]));if(!this['isConfigured'](_0x295760[_0x071d('0x80')])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x295760,'no\x20list\x20selected');}_0x295760[_0x071d('0x43')]=moment();if(this['isConfigured'](_0x295760[_0x071d('0x81')])){_0x295760[_0x071d('0x43')]=moment()['add'](_0x295760[_0x071d('0x81')],_0x071d('0x82'));}if(!this[_0x071d('0x5c')](_0x295760['callback_priority'])){_0x295760[_0x071d('0x45')]=0x2;}this[_0x071d('0x3b')][_0x071d('0x74')](this,_0x295760);return this[_0x071d('0xa')]['noop'](util['format'](_0x071d('0x83'),_0x295760[_0x071d('0x41')],_0x295760[_0x071d('0x80')],_0x295760['scheduledAt']));};AGIVertices[_0x071d('0xe')][_0x071d('0x84')]=function(_0x2a1917){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x85'),_0x2a1917[_0x071d('0x31')]));var _0xc285e9=this['channel']['exec'](_0x2a1917['application'],_0x2a1917['options']);if(_0xc285e9[_0x071d('0x70')]===-0x1){return _0xc285e9;}return this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0x87'),_0x2a1917[_0x071d('0x88')],_0x2a1917[_0x071d('0x89')]));};AGIVertices[_0x071d('0xe')][_0x071d('0x8a')]=function(_0x530e25){logger['info'](util[_0x071d('0x4d')](_0x071d('0x8b'),_0x530e25[_0x071d('0x31')]));if(!this['isConfigured'](_0x530e25[_0x071d('0x54')])){return this['channel'][_0x071d('0x86')](_0x071d('0x8c'));}var _0x465fb5='\x22'+_0x530e25['text']+'\x22';if(this[_0x071d('0x5c')](_0x530e25[_0x071d('0x89')])){_0x465fb5+=','+_0x530e25[_0x071d('0x89')];}var _0x3b8426=this[_0x071d('0xa')][_0x071d('0x51')]('MRCPSynth',_0x465fb5);if(_0x3b8426[_0x071d('0x70')]===-0x1){return _0x3b8426;}return this[_0x071d('0xa')]['noop'](util[_0x071d('0x4d')](_0x071d('0x8d'),_0x465fb5));};AGIVertices[_0x071d('0xe')][_0x071d('0x8e')]=function(_0x59c5ed){logger['info'](util[_0x071d('0x4d')](_0x071d('0x8f'),_0x59c5ed[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x59c5ed['grammar'])){return this[_0x071d('0xa')]['noop'](_0x071d('0x90'));}var _0x590b3e=_0x59c5ed[_0x071d('0x91')];if(this[_0x071d('0x5c')](_0x59c5ed[_0x071d('0x89')])){_0x590b3e+=','+_0x59c5ed['options'];}var _0x1c38c7=this['channel'][_0x071d('0x51')](_0x071d('0x92'),_0x590b3e);if(_0x1c38c7[_0x071d('0x70')]===-0x1){return _0x1c38c7;}var _0x2038bf=this[_0x071d('0x93')](_0x071d('0x94'),_0x071d('0x95'));if(_0x2038bf[_0x071d('0x70')]===-0x1){return _0x2038bf;}var _0x238d05=this[_0x071d('0x93')](_0x071d('0x96'),'LUMENVOX_ASR_TRANSCRIPT');if(_0x238d05['result']===-0x1){return _0x238d05;}var _0x397aba=this[_0x071d('0x93')]('RECOG_INSTANCE()',_0x071d('0x97'));if(_0x397aba['result']===-0x1){return _0x397aba;}return this['channel'][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0x98'),_0x590b3e));};AGIVertices[_0x071d('0xe')][_0x071d('0x99')]=function(_0x4bb30f){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x9a'),_0x4bb30f[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x4bb30f[_0x071d('0x9b')])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x4bb30f,_0x071d('0x9c'));}var _0x3b6bb7=this[_0x071d('0x16')][_0x071d('0x74')](this,_0x4bb30f[_0x071d('0x9b')]);if(!_0x3b6bb7){return this[_0x071d('0xa')]['error'](_0x4bb30f,_0x071d('0x9d'));}if(!this['isConfigured'](_0x4bb30f['query'])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x4bb30f,_0x071d('0x9e'));}var _0x3a5a1f=_0x4bb30f[_0x071d('0x9f')][_0x071d('0xa0')](/(\r\n|\n|\r)/gm,'\x20');this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0xa1'),_0x3a5a1f));var _0x1bca67=this['getQueryOdbc']['sync'](this,_0x3b6bb7,_0x3a5a1f);this['createSquareDetailsReport'][_0x071d('0x74')](this,_0x4bb30f,_0x3a5a1f);if(!this[_0x071d('0x5c')](_0x4bb30f['variable_id'])){return this[_0x071d('0xa')][_0x071d('0x86')]('no\x20variable\x20selected\x20for\x20the\x20result');}var _0x7af642=this[_0x071d('0xd')][_0x071d('0x74')](this,_0x4bb30f[_0x071d('0xa2')]);if(!_0x7af642){return this['channel'][_0x071d('0x26')](_0x4bb30f,_0x071d('0xa3'));}var _0x196cd2=this;_0x1bca67[_0x071d('0xa4')](function(_0x52b507,_0x1c7359){Object[_0x071d('0xa5')](_0x52b507)[_0x071d('0xa4')](function(_0x520480){_0x196cd2['channel'][_0x071d('0x72')](util[_0x071d('0x4d')]('%s[%s][%s]',_0x7af642,_0x1c7359,_0x520480),_0x52b507[_0x520480]);});});this[_0x071d('0xa')][_0x071d('0x72')](util[_0x071d('0x4d')](_0x071d('0xa6'),_0x7af642),_0x1bca67[_0x071d('0x6d')]);return this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0xa7'),_0x7af642));};AGIVertices[_0x071d('0xe')]['dial']=function(_0x110183){logger[_0x071d('0xa8')](util[_0x071d('0x4d')]('Enter\x20in\x20DIAL\x20(%s)\x20block',_0x110183[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x110183['sip_id'])){return this['channel']['error'](_0x110183,_0x071d('0xa9'));}var _0x23d767=this[_0x071d('0x19')]['sync'](this,_0x110183[_0x071d('0xaa')]);if(!_0x23d767){return this['channel']['error'](_0x110183,'no\x20user\x20found');}var _0x1aef35=this[_0x071d('0xa')][_0x071d('0x51')]('DIAL',[util[_0x071d('0x4d')](_0x071d('0xab'),_0x23d767),_0x110183[_0x071d('0x7b')],_0x110183[_0x071d('0xac')],_0x110183[_0x071d('0xad')]]);if(_0x1aef35['result']===-0x1){return _0x1aef35;}return this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')]('Executed\x20command\x20%s','DIAL'));};AGIVertices[_0x071d('0xe')]['dialogflow']=function(_0x1ac038){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0xae'),_0x1ac038[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x1ac038['key'])){return this[_0x071d('0xa')]['noop']('no\x20key\x20configured');}if(!this[_0x071d('0x5c')](_0x1ac038[_0x071d('0x54')])){return this[_0x071d('0xa')][_0x071d('0x86')]('no\x20text\x20configured');}this['channel']['noop'](util[_0x071d('0x4d')]('Trying\x20Dialogflow:\x20%s',_0x1ac038['text']));var _0x48af0a=this[_0x071d('0x56')][_0x071d('0x74')](this,_0x1ac038);if(_0x48af0a){for(var _0x2aae31 in _0x48af0a){if(_0x48af0a[_0x071d('0x69')](_0x2aae31)){this[_0x071d('0xa')][_0x071d('0x72')](util[_0x071d('0x4d')]('DIALOGFLOW_%s',_0x2aae31[_0x071d('0xaf')]()),_0x48af0a[_0x2aae31]);}}return this['channel'][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0xb0'),_0x48af0a[_0x071d('0xb1')]));}return this[_0x071d('0xa')]['error'](_0x1ac038,_0x071d('0xb2'));};AGIVertices[_0x071d('0xe')][_0x071d('0xb3')]=function(_0x5d23ec){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0xb4'),_0x5d23ec[_0x071d('0x31')]));return this['channel'][_0x071d('0x86')]('end');};AGIVertices[_0x071d('0xe')][_0x071d('0xb5')]=function(_0x3a9534){logger[_0x071d('0x29')](util[_0x071d('0x4d')]('Enter\x20in\x20EXTERNAL\x20DIAL\x20(%s)\x20block',_0x3a9534[_0x071d('0x31')]));var _0xf15526='';if(_0x3a9534[_0x071d('0xb6')]){if(!this[_0x071d('0x5c')](_0x3a9534['trunk_id'])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x3a9534,'no\x20trunk\x20selected');}else{var _0x5e763f=parseInt(_0x3a9534[_0x071d('0xb6')],0xa);if(isNaN(_0x5e763f)){_0xf15526=_0x3a9534[_0x071d('0xb6')];}else{_0xf15526=this[_0x071d('0xb7')]['sync'](this,_0x3a9534['trunk_id']);if(!_0xf15526){return this[_0x071d('0xa')][_0x071d('0x26')](_0x3a9534,_0x071d('0xb8'));}}}}else if(_0x3a9534[_0x071d('0xb9')]){_0xf15526=_0x3a9534['trunk_name'];}else{return this['channel'][_0x071d('0x26')](_0x3a9534,'no\x20trunk\x20selected');}var _0x7e36a2=this['channel'][_0x071d('0x51')]('DIAL',[util[_0x071d('0x4d')](_0x071d('0xba'),_0xf15526,_0x3a9534['phone']),_0x3a9534['timeout'],_0x3a9534[_0x071d('0xac')],_0x3a9534[_0x071d('0xad')]]);if(_0x7e36a2[_0x071d('0x70')]===-0x1){return _0x7e36a2;}return this['channel'][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0xbb'),_0x071d('0xbc')));};AGIVertices[_0x071d('0xe')]['finally']=function(_0x3aac12){logger['info'](util[_0x071d('0x4d')](_0x071d('0xbd'),_0x3aac12['label']));return this[_0x071d('0xa')][_0x071d('0x86')](_0x071d('0xbe'));};AGIVertices[_0x071d('0xe')][_0x071d('0x8')]=function(_0x2b7e47){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0xbf'),_0x2b7e47[_0x071d('0x31')]));if(_0x2b7e47[_0x071d('0x75')]===0x0){return this[_0x071d('0x73')](_0x2b7e47);}_0x2b7e47['retry']-=0x1;if(!this[_0x071d('0x5c')](_0x2b7e47[_0x071d('0xc0')])){return this[_0x071d('0xa')]['error'](_0x2b7e47,_0x071d('0xc1'));}var _0x3362d4=this[_0x071d('0x1b')][_0x071d('0x74')](this,_0x2b7e47[_0x071d('0xc0')]);if(!_0x3362d4){return this[_0x071d('0xa')][_0x071d('0x26')](_0x2b7e47,_0x071d('0xc2'));}if(!this['isConfigured'](_0x2b7e47[_0x071d('0xa2')])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x071d('0xc3'));}var _0xc03c2c=this[_0x071d('0xa')][_0x071d('0xc4')](_0x3362d4,_0x2b7e47[_0x071d('0xc5')],_0x2b7e47['maxdigit']);var _0x1b3c98=_0xc03c2c['result']?_0xc03c2c['result'][_0x071d('0x44')]():'';logger[_0x071d('0x29')](_0x071d('0xc6'),JSON[_0x071d('0xc7')](_0xc03c2c));if(_0xc03c2c['result']===-0x1){this[_0x071d('0x2f')][_0x071d('0x74')](this,_0x2b7e47,_0x1b3c98);return _0xc03c2c;}else if(_0xc03c2c['extra']===_0x071d('0x7b')){_0xc03c2c[_0x071d('0x70')]=_0x1b3c98[_0x071d('0x6d')]>=parseInt(_0x2b7e47[_0x071d('0xc8')])?'x':'i';}else{_0xc03c2c[_0x071d('0x70')]=_0x1b3c98[_0x071d('0x6d')]>=parseInt(_0x2b7e47[_0x071d('0xc8')])&&_0x1b3c98[_0x071d('0x6d')]<=parseInt(_0x2b7e47[_0x071d('0xc9')])?'x':'i';}var _0x327e71=this['getVariable'][_0x071d('0x74')](this,_0x2b7e47[_0x071d('0xa2')]);if(!_0x327e71){return this[_0x071d('0xa')][_0x071d('0x26')](_0x2b7e47,_0x071d('0xa3'));}this[_0x071d('0xa')][_0x071d('0x72')](_0x327e71,_0x1b3c98);if(this[_0x071d('0x5c')](_0x2b7e47[_0x071d('0xca')])){var _0x139cca=parseInt(_0x2b7e47[_0x071d('0xca')],0xa);var _0x2864b1=rs[_0x071d('0xcb')]({'charset':'*','length':_0x139cca});var _0x254529=_0x1b3c98[_0x071d('0x6d')];if(_0x254529>0x0){if(_0x254529>_0x139cca){this[_0x071d('0x2f')][_0x071d('0x74')](this,_0x2b7e47,_0x2b7e47[_0x071d('0xcc')]==='first'?_0x2864b1+_0x1b3c98[_0x071d('0xcd')](_0x139cca):_0x1b3c98[_0x071d('0xcd')](0x0,_0x254529-_0x139cca)+_0x2864b1);}else{this['createSquareDetailsReport']['sync'](this,_0x2b7e47,rs[_0x071d('0xcb')]({'charset':'*','length':_0x254529}));}}else{this['createSquareDetailsReport'][_0x071d('0x74')](this,_0x2b7e47,'');}}else{this['createSquareDetailsReport'][_0x071d('0x74')](this,_0x2b7e47,_0x1b3c98);}return _0xc03c2c;};AGIVertices['prototype'][_0x071d('0x9')]=function(_0xdbe6e9){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0xce'),_0xdbe6e9[_0x071d('0x31')]));return this[_0x071d('0x8')](_0xdbe6e9);};AGIVertices[_0x071d('0xe')][_0x071d('0xcf')]=function(_0x55ad06){logger[_0x071d('0x29')](util['format'](_0x071d('0xd0'),_0x55ad06[_0x071d('0x31')]));this[_0x071d('0x2f')]['sync'](this,_0x55ad06,_0x55ad06[_0x071d('0xd1')]);return this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0xd2'),_0x55ad06[_0x071d('0xd1')]));};AGIVertices[_0x071d('0xe')][_0x071d('0xd3')]=function(_0x25a59c){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0xd4'),_0x25a59c[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x25a59c[_0x071d('0x5f')])||!this[_0x071d('0x5c')](_0x25a59c[_0x071d('0x60')])){return this['channel'][_0x071d('0x86')]('no\x20valid\x20credentials\x20configured');}if(!this[_0x071d('0x5c')](_0x25a59c[_0x071d('0x54')])){return this['channel'][_0x071d('0x86')]('no\x20text\x20configured');}this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')]('Trying\x20aws\x20Polly\x20%s',_0x25a59c[_0x071d('0x54')]));var _0x5a0c3d=this[_0x071d('0x5e')][_0x071d('0x74')](this,_0x25a59c);if(_0x5a0c3d){this['channel']['noop'](util[_0x071d('0x4d')]('aws\x20Polly\x20%s\x20file\x20created',_0x5a0c3d));var _0x5ded30=this[_0x071d('0xa')][_0x071d('0xd5')](_0x5a0c3d);try{fs[_0x071d('0xd6')](_0x5a0c3d+_0x071d('0xd7'));}catch(_0x4b5c0b){logger[_0x071d('0x26')](_0x4b5c0b);}return _0x5ded30;}return this[_0x071d('0xa')][_0x071d('0x26')](_0x25a59c,_0x071d('0xd8'));};AGIVertices[_0x071d('0xe')][_0x071d('0xd9')]=function(_0x546ce8){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0xda'),_0x546ce8[_0x071d('0x31')],_0x546ce8[_0x071d('0x7b')]));if(!this['isConfigured'](_0x546ce8[_0x071d('0x57')])){return this['channel'][_0x071d('0x86')](_0x071d('0xdb'));}var _0x1080a6=_0x071d('0xdc');var _0xa02eb0=util['format'](_0x071d('0xdd'),FILES_PATH,rs['generate'](0x4));var _0x4cf3a0=util[_0x071d('0x4d')]('%s.%s',_0xa02eb0,_0x1080a6);var _0x14620d=!![];if(_0x546ce8['beep']==='NOBEEP'){_0x14620d=![];}var _0x4f6995=this[_0x071d('0xa')]['recordFile'](_0xa02eb0,_0x1080a6,_0x546ce8[_0x071d('0xde')],_0x546ce8[_0x071d('0x7b')],undefined,_0x14620d);if(_0x4f6995[_0x071d('0x70')]!==-0x1){this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0xdf'),_0x4cf3a0));var _0x179ef1=this[_0x071d('0x64')][_0x071d('0x74')](this,_0x546ce8,_0x4cf3a0);if(_0x179ef1){for(var _0x1e9f2f in _0x179ef1){if(_0x179ef1[_0x071d('0x69')](_0x1e9f2f)){this[_0x071d('0xa')][_0x071d('0x72')](util[_0x071d('0x4d')](_0x071d('0xe0'),_0x1e9f2f[_0x071d('0xaf')]()),_0x179ef1[_0x1e9f2f]);}}return this[_0x071d('0xa')]['noop'](util['format'](_0x071d('0xe1'),JSON[_0x071d('0xc7')](_0x179ef1)));}}return _0x4f6995;};AGIVertices[_0x071d('0xe')]['tildeasr']=function(_0x2913f7){logger['info'](util[_0x071d('0x4d')](_0x071d('0xe2'),_0x2913f7[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x2913f7[_0x071d('0xe3')])){return this[_0x071d('0xa')][_0x071d('0x86')](_0x071d('0xe4'));}if(!this[_0x071d('0x5c')](_0x2913f7[_0x071d('0xe5')])){return this[_0x071d('0xa')][_0x071d('0x86')](_0x071d('0xe6'));}var _0x5f1f9d=_0x071d('0xdc');var _0xfa68f6=util[_0x071d('0x4d')]('%s/recordings/%s',FILES_PATH,rs[_0x071d('0xcb')](0x4));var _0x44ff2b=util[_0x071d('0x4d')](_0x071d('0xe7'),_0xfa68f6,_0x5f1f9d);var _0x5b71ea=!![];if(_0x2913f7['beep']===_0x071d('0xe8')){_0x5b71ea=![];}var _0x126f7f=this[_0x071d('0xa')]['recordFile'](_0xfa68f6,_0x5f1f9d,_0x2913f7[_0x071d('0xde')],_0x2913f7['timeout'],undefined,_0x5b71ea);if(_0x126f7f[_0x071d('0x70')]!==-0x1){this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0xe9'),_0x44ff2b));var _0x792d49=this[_0x071d('0x65')][_0x071d('0x74')](this,_0x2913f7,_0x44ff2b);if(_0x792d49){for(var _0x220421 in _0x792d49){if(_0x792d49[_0x071d('0x69')](_0x220421)){this['channel']['setVariable'](util[_0x071d('0x4d')](_0x071d('0xea'),_0x220421[_0x071d('0xaf')]()),_0x792d49[_0x220421]);}}return this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')]('TildeASR\x20Result\x20%s',JSON[_0x071d('0xc7')](_0x792d49)));}}return _0x126f7f;};AGIVertices[_0x071d('0xe')][_0x071d('0xeb')]=function(_0x7a7af3){logger['info'](util['format'](_0x071d('0xec'),_0x7a7af3[_0x071d('0x31')]));return this[_0x071d('0xa')]['continueAt'](_0x7a7af3[_0x071d('0x34')],_0x7a7af3[_0x071d('0x35')],_0x7a7af3[_0x071d('0x36')]);};AGIVertices[_0x071d('0xe')][_0x071d('0xed')]=function(_0x5e6a21){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0xee'),_0x5e6a21[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x5e6a21[_0x071d('0xef')])){return this['channel']['error'](_0x5e6a21,_0x071d('0xf0'));}try{var _0x56fe62=eval(_0x5e6a21[_0x071d('0xef')])?_0x071d('0xf1'):_0x071d('0xf2');this[_0x071d('0xa')][_0x071d('0x86')](util['format'](_0x071d('0xf3'),_0x5e6a21[_0x071d('0xef')],_0x56fe62));return{'code':0xc8,'result':_0x56fe62};}catch(_0x234481){return{'code':0xc8,'result':'false'};}};AGIVertices[_0x071d('0xe')][_0x071d('0xf4')]=function(_0x36dac8){logger[_0x071d('0x29')](util['format']('Enter\x20in\x20GOTOIFTIME\x20(%s)\x20block',_0x36dac8[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x36dac8[_0x071d('0xf5')])){return this[_0x071d('0xa')]['error'](_0x36dac8,'no\x20interval\x20configured');}var _0x1b08d2=this[_0x071d('0x1f')][_0x071d('0x74')](this,_0x36dac8[_0x071d('0xf5')]);if(!_0x1b08d2){return this[_0x071d('0xa')][_0x071d('0x26')](_0x36dac8,_0x071d('0xf6'));}for(var _0x42f94a=0x0;_0x42f94a<_0x1b08d2[_0x071d('0x6d')];_0x42f94a+=0x1){var _0x418f22=this['channel'][_0x071d('0xd')](util[_0x071d('0x4d')](_0x071d('0xf7'),_0x1b08d2[_0x42f94a]));if(_0x418f22['result']===-0x1){return _0x418f22;}logger['info'](util[_0x071d('0x4d')](_0x071d('0xf8'),_0x1b08d2[_0x42f94a],_0x418f22[_0x071d('0x6f')]));if(_0x418f22[_0x071d('0x6f')]===_0x071d('0xf1')){logger['info'](util['format'](_0x071d('0xf8'),_0x1b08d2[_0x42f94a],_0x071d('0xf1')));this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0xf8'),_0x1b08d2[_0x42f94a],_0x071d('0xf1')));return{'code':0xc8,'result':_0x071d('0xf1')};}else{logger['info'](util[_0x071d('0x4d')]('IFTIME\x20%s\x20%s',_0x1b08d2[_0x42f94a],_0x071d('0xf2')));this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')]('IFTIME\x20%s\x20%s',_0x1b08d2[_0x42f94a],_0x071d('0xf2')));}}return{'code':0xc8,'result':_0x071d('0xf2')};};AGIVertices[_0x071d('0xe')][_0x071d('0xf9')]=function(_0x3667d2){logger['info'](util['format']('Enter\x20in\x20HANGUP\x20(%s)\x20block',_0x3667d2[_0x071d('0x31')]));return this[_0x071d('0xa')][_0x071d('0xf9')]();};AGIVertices[_0x071d('0xe')][_0x071d('0xfa')]=function(_0x4d92c9){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0xfb'),_0x4d92c9[_0x071d('0x31')]));if(!this['isConfigured'](_0x4d92c9[_0x071d('0x57')])){return this[_0x071d('0xa')][_0x071d('0x86')](_0x071d('0xdb'));}var _0x5849e2='wav';var _0x47a8b4=util[_0x071d('0x4d')]('%s/recordings/%s',FILES_PATH,rs[_0x071d('0xcb')](0x4));var _0xd8ba71=util[_0x071d('0x4d')](_0x071d('0xe7'),_0x47a8b4,_0x5849e2);var _0x6f3534=!![];if(_0x4d92c9['beep']===_0x071d('0xe8')){_0x6f3534=![];}var _0x237a36=this['channel'][_0x071d('0xfc')](_0x47a8b4,_0x5849e2,_0x4d92c9['intKey'],_0x4d92c9['timeout'],undefined,_0x6f3534);if(_0x237a36['result']!==-0x1){this['channel'][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0xfd'),_0xd8ba71));var _0x1cc5a1=this[_0x071d('0xfe')][_0x071d('0x74')](this,_0x4d92c9,_0xd8ba71);if(_0x1cc5a1){for(var _0x28522e in _0x1cc5a1){if(_0x1cc5a1[_0x071d('0x69')](_0x28522e)){this[_0x071d('0xa')][_0x071d('0x72')](util['format'](_0x071d('0xff'),_0x28522e['toUpperCase']()),_0x1cc5a1[_0x28522e]);}}return this['channel']['noop'](util[_0x071d('0x4d')]('IspeechASR\x20Result\x20%s',JSON[_0x071d('0xc7')](_0x1cc5a1)));}}return _0x237a36;};AGIVertices[_0x071d('0xe')][_0x071d('0x100')]=function(_0x50bb26){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x101'),_0x50bb26[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x50bb26[_0x071d('0x57')])){return this[_0x071d('0xa')][_0x071d('0x86')](_0x071d('0xdb'));}if(!this[_0x071d('0x5c')](_0x50bb26[_0x071d('0x54')])){return this['channel']['noop'](_0x071d('0x8c'));}this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0x102'),_0x50bb26[_0x071d('0x54')]));var _0x12fe40=this[_0x071d('0x58')][_0x071d('0x74')](this,_0x50bb26);if(_0x12fe40){this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')]('ispeech\x20%s\x20file\x20created',_0x12fe40));var _0x66e7fc=this['channel'][_0x071d('0xd5')](_0x12fe40,_0x50bb26[_0x071d('0xde')]);try{fs[_0x071d('0xd6')](_0x12fe40+'.wav');}catch(_0x1db714){logger['error'](_0x1db714);}return _0x66e7fc;}return this[_0x071d('0xa')][_0x071d('0x26')](_0x50bb26,'ispeech\x20TTS\x20is\x20unreachable');};AGIVertices['prototype']['login']=function(_0x1fcbc6){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x103'),_0x1fcbc6[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x1fcbc6[_0x071d('0x104')])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x1fcbc6,_0x071d('0x105'));}logger[_0x071d('0x29')](util['format'](_0x071d('0x106'),this[_0x071d('0xa')][_0x071d('0x32')],_0x1fcbc6[_0x071d('0x104')]));var _0x117355=this[_0x071d('0x107')][_0x071d('0x74')](this,_0x1fcbc6[_0x071d('0x104')]);if(_0x117355){logger[_0x071d('0x29')](util['format'](_0x071d('0x108'),this[_0x071d('0xa')][_0x071d('0x32')],_0x1fcbc6[_0x071d('0x104')]));this[_0x071d('0xa')][_0x071d('0x86')](util['format'](_0x071d('0x108'),this[_0x071d('0xa')][_0x071d('0x32')],_0x1fcbc6['findBy']));return{'code':0xc8,'result':_0x071d('0x109')};}else{logger['info'](util[_0x071d('0x4d')](_0x071d('0x10a'),this[_0x071d('0xa')][_0x071d('0x32')],_0x1fcbc6[_0x071d('0x104')]));this[_0x071d('0xa')]['noop'](util[_0x071d('0x4d')](_0x071d('0x10a'),this[_0x071d('0xa')][_0x071d('0x32')],_0x1fcbc6[_0x071d('0x104')]));return{'code':0xc8,'result':_0x071d('0x10b')};}};AGIVertices[_0x071d('0xe')][_0x071d('0x10c')]=function(_0x289989){logger['info'](util[_0x071d('0x4d')]('Enter\x20in\x20LOGOUT\x20(%s)\x20block',_0x289989[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x289989[_0x071d('0x104')])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x289989,_0x071d('0x105'));}logger['info'](util[_0x071d('0x4d')](_0x071d('0x106'),this['channel'][_0x071d('0x32')],_0x289989[_0x071d('0x104')]));var _0x3544bf=this[_0x071d('0x4b')][_0x071d('0x74')](this,_0x289989[_0x071d('0x104')]);if(_0x3544bf){logger['info'](util[_0x071d('0x4d')](_0x071d('0x108'),this[_0x071d('0xa')]['callerid'],_0x289989['findBy']));this[_0x071d('0xa')]['noop'](util[_0x071d('0x4d')](_0x071d('0x108'),this[_0x071d('0xa')][_0x071d('0x32')],_0x289989[_0x071d('0x104')]));return{'code':0xc8,'result':_0x071d('0x109')};}else{logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x10a'),this[_0x071d('0xa')][_0x071d('0x32')],_0x289989[_0x071d('0x104')]));this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0x10a'),this[_0x071d('0xa')]['callerid'],_0x289989[_0x071d('0x104')]));return{'code':0xc8,'result':_0x071d('0x10b')};}};AGIVertices[_0x071d('0xe')][_0x071d('0x10d')]=function(_0x4e5329){logger['info'](util[_0x071d('0x4d')]('Enter\x20in\x20MATH\x20(%s)\x20block',_0x4e5329['label']));if(!this[_0x071d('0x5c')](_0x4e5329['operation'])){return this['channel'][_0x071d('0x26')](_0x4e5329,'no\x20operation\x20configured');}this[_0x071d('0xa')][_0x071d('0x86')](util['format']('math\x20%s',_0x4e5329[_0x071d('0x10e')]));var _0x333b18=eval(_0x4e5329[_0x071d('0x10e')]);if(!this[_0x071d('0x5c')](_0x4e5329['variable_id'])){return this[_0x071d('0xa')]['noop']('no\x20variable\x20selected\x20for\x20the\x20result');}var _0x14ebf9=this[_0x071d('0xd')]['sync'](this,_0x4e5329['variable_id']);if(!_0x14ebf9){return this[_0x071d('0xa')][_0x071d('0x26')](_0x4e5329,_0x071d('0xa3'));}if(_[_0x071d('0x10f')](_0x333b18)){var _0x11d3f7=this;_0x333b18['forEach'](function(_0x492669,_0x4e1179){_0x11d3f7['channel'][_0x071d('0x72')](util[_0x071d('0x4d')](_0x071d('0x110'),_0x14ebf9,_0x4e1179),_0x492669);});return this['channel']['noop'](util['format'](_0x071d('0x111'),_0x14ebf9));}else{return this[_0x071d('0xa')]['setVariable'](_0x14ebf9,_0x333b18);}};AGIVertices['prototype'][_0x071d('0x7')]=function(_0x3cce22){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x112'),_0x3cce22[_0x071d('0x31')]));if(_0x3cce22[_0x071d('0x75')]===0x0){return this['maxRetry'](_0x3cce22);}_0x3cce22[_0x071d('0x75')]-=0x1;if(!this['isConfigured'](_0x3cce22[_0x071d('0xc0')])){return this['channel'][_0x071d('0x26')](_0x3cce22,_0x071d('0xc1'));}var _0x513429=this['getSound']['sync'](this,_0x3cce22[_0x071d('0xc0')]);if(!_0x513429){return this[_0x071d('0xa')][_0x071d('0x26')](_0x3cce22,_0x071d('0xc2'));}var _0x5de9dc=this[_0x071d('0xa')][_0x071d('0xc4')](_0x513429,_0x3cce22['response'],_0x3cce22['digit']);var _0x33a032=_0x5de9dc[_0x071d('0x70')];if(_0x5de9dc[_0x071d('0x70')]===-0x1){this[_0x071d('0x2f')][_0x071d('0x74')](this,_0x3cce22,'-1');return _0x5de9dc;}else if(_0x5de9dc[_0x071d('0x6f')]==='timeout'){_0x5de9dc[_0x071d('0x70')]=_0x5de9dc['result']['length']>0x0?_0x5de9dc[_0x071d('0x70')]:'t';}else if(_['isEmpty'](_0x5de9dc['result'])){_0x5de9dc[_0x071d('0x70')]='#';_0x33a032='#';}if(!this[_0x071d('0x5c')](_0x3cce22[_0x071d('0xa2')])){this['channel'][_0x071d('0x86')](_0x071d('0xc3'));}else{var _0x8f22d=this[_0x071d('0xd')][_0x071d('0x74')](this,_0x3cce22[_0x071d('0xa2')]);if(!_0x8f22d){return this[_0x071d('0xa')][_0x071d('0x26')](_0x3cce22,_0x071d('0xa3'));}this['channel'][_0x071d('0x72')](_0x8f22d,_0x33a032);}this[_0x071d('0x2f')][_0x071d('0x74')](this,_0x3cce22,_0x33a032);return _0x5de9dc;};AGIVertices[_0x071d('0xe')]['noop']=function(_0x4ac93b){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x113'),_0x4ac93b[_0x071d('0x31')]));return this[_0x071d('0xa')]['noop'](_0x4ac93b[_0x071d('0x114')]||_0x4ac93b['label']);};AGIVertices[_0x071d('0xe')][_0x071d('0x115')]=function(_0x37d9b3){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x116'),_0x37d9b3[_0x071d('0x31')]));if(!this['isConfigured'](_0x37d9b3[_0x071d('0x104')])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x37d9b3,_0x071d('0x105'));}logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x106'),this[_0x071d('0xa')]['callerid'],_0x37d9b3[_0x071d('0x104')]));var _0x192347=this['getPause'][_0x071d('0x74')](this,_0x37d9b3[_0x071d('0x117')]);var _0x10cbb8=this['agentPause']['sync'](this,_0x37d9b3[_0x071d('0x104')],_0x192347);if(_0x10cbb8){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x108'),this[_0x071d('0xa')]['callerid'],_0x37d9b3[_0x071d('0x104')]));this[_0x071d('0xa')]['noop'](util['format'](_0x071d('0x108'),this[_0x071d('0xa')][_0x071d('0x32')],_0x37d9b3[_0x071d('0x104')]));return{'code':0xc8,'result':'success'};}else{logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x10a'),this[_0x071d('0xa')]['callerid'],_0x37d9b3[_0x071d('0x104')]));this[_0x071d('0xa')]['noop'](util[_0x071d('0x4d')](_0x071d('0x108'),this[_0x071d('0xa')]['callerid'],_0x37d9b3[_0x071d('0x104')]));return{'code':0xc8,'result':_0x071d('0x10b')};}};AGIVertices['prototype'][_0x071d('0x118')]=function(_0x33aa17){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x119'),_0x33aa17[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x33aa17[_0x071d('0xc0')])){return this['channel'][_0x071d('0x26')](_0x33aa17,_0x071d('0xc1'));}var _0x5b1600=this['getSound'][_0x071d('0x74')](this,_0x33aa17[_0x071d('0xc0')]);if(!_0x5b1600){return this[_0x071d('0xa')][_0x071d('0x26')](_0x33aa17,_0x071d('0xc2'));}var _0x45e8d1=this[_0x071d('0xa')][_0x071d('0x51')](_0x071d('0x11a'),[_0x5b1600,_0x33aa17[_0x071d('0xac')]]);if(_0x45e8d1[_0x071d('0x70')]===-0x1){return _0x45e8d1;}return this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')]('Executed\x20command\x20%s\x20%s',_0x071d('0x11a'),_0x5b1600));};AGIVertices[_0x071d('0xe')][_0x071d('0x11b')]=function(_0x5993ab){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x11c'),_0x5993ab[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x5993ab[_0x071d('0x11d')])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x5993ab,_0x071d('0x11e'));}var _0x534b01='';var _0x5557c=parseInt(_0x5993ab['queue_id'],0xa);if(isNaN(_0x5557c)){_0x534b01=_0x5993ab['queue_id'];}else{_0x534b01=this[_0x071d('0xf')][_0x071d('0x74')](this,_0x5993ab[_0x071d('0x11d')]);if(!_0x534b01){return this[_0x071d('0xa')][_0x071d('0x26')](_0x5993ab,_0x071d('0x11f'));}}var _0x4d0694='';if(this['isConfigured'](_0x5993ab['file_id'])){var _0x49fe61=this['getSound']['sync'](this,_0x5993ab[_0x071d('0xc0')]);if(_0x49fe61){_0x4d0694=_0x49fe61;}}this[_0x071d('0x2f')][_0x071d('0x74')](this,_0x5993ab,_0x534b01);if(_0x5993ab['opts'][_0x071d('0x120')]('x')<0x0){_0x5993ab[_0x071d('0xac')]+='x';}if(_0x5993ab[_0x071d('0xac')][_0x071d('0x120')]('X')<0x0){_0x5993ab[_0x071d('0xac')]+='X';}this[_0x071d('0xa')][_0x071d('0x72')](_0x071d('0x121'),_0x534b01?_0x534b01['toLowerCase']():'');var _0x38aa8d=this['channel']['exec']('QUEUE',[_0x534b01,_0x5993ab[_0x071d('0xac')],_0x5993ab[_0x071d('0xad')],_0x4d0694,_0x5993ab[_0x071d('0x7b')],_0x5993ab[_0x071d('0x6')],_0x5993ab[_0x071d('0x122')],_0x5993ab[_0x071d('0x123')],'',_0x5993ab[_0x071d('0x124')]]);if(_0x38aa8d[_0x071d('0x70')]===-0x1){return _0x38aa8d;}return this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0x87'),_0x071d('0x125'),_0x534b01));};AGIVertices[_0x071d('0xe')][_0x071d('0x126')]=function(_0x4eb5fd){logger['info'](util['format'](_0x071d('0x127'),_0x4eb5fd[_0x071d('0x31')]));var _0x2ec5d6=_0x4eb5fd['recordingFormat']||_0x071d('0xdc');var _0x206b85=util[_0x071d('0x4d')](_0x071d('0x128'),this[_0x071d('0xa')][_0x071d('0x30')],rs[_0x071d('0xcb')](0x5));var _0xbdd0f0=util['format'](_0x071d('0x129'),FILES_PATH,_0x206b85,_0x2ec5d6);var _0x53a595=util[_0x071d('0x4d')](_0x071d('0xdd'),FILES_PATH,_0x206b85);this['createSquareRecording'][_0x071d('0x74')](this,_0x4eb5fd,_0x206b85,_0xbdd0f0);this[_0x071d('0xa')][_0x071d('0x72')]('RECORDING_SAVENAME',_0x206b85);logger[_0x071d('0x29')]('Recording\x20%s\x20%s\x20%s\x20%s',_0x53a595,_0x2ec5d6,_0x4eb5fd['escape_digits'],_0x4eb5fd[_0x071d('0x7b')]);return this[_0x071d('0xa')][_0x071d('0xfc')](_0x53a595,_0x2ec5d6,_0x4eb5fd[_0x071d('0x12a')],_0x4eb5fd[_0x071d('0x7b')],undefined,!![]);};AGIVertices['prototype'][_0x071d('0x12b')]=function(_0x380060){logger['info'](util[_0x071d('0x4d')](_0x071d('0x12c'),_0x380060[_0x071d('0x31')]));return this[_0x071d('0xa')][_0x071d('0x12d')](_0x380060['digits'][_0x071d('0xa0')](/\s+/g,''),_0x380060[_0x071d('0x12a')]);};AGIVertices[_0x071d('0xe')][_0x071d('0x12e')]=function(_0x409f28){logger[_0x071d('0x29')](util['format'](_0x071d('0x12f'),_0x409f28['label']));return this[_0x071d('0xa')][_0x071d('0x130')](_0x409f28[_0x071d('0x131')][_0x071d('0xa0')](/\s+/g,''),_0x409f28[_0x071d('0x12a')]);};AGIVertices['prototype']['sayphonetic']=function(_0x4cf07c){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x132'),_0x4cf07c['label']));return this[_0x071d('0xa')]['sayPhonetic'](_0x4cf07c[_0x071d('0x54')],_0x4cf07c[_0x071d('0x12a')]);};AGIVertices[_0x071d('0xe')]['sendMail']=function(_0x231b92){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x133'),_0x231b92[_0x071d('0x31')]));if(!this['isConfigured'](_0x231b92[_0x071d('0x134')])){return this['channel'][_0x071d('0x86')]('no\x20mail\x20account\x20configured');}var _0xdc0f29=this[_0x071d('0x1e')][_0x071d('0x74')](this,_0x231b92[_0x071d('0x134')]);if(!_0xdc0f29||!_0xdc0f29[_0x071d('0x135')]){return this[_0x071d('0xa')][_0x071d('0x26')](_0x231b92,_0x071d('0x136'));}var _0x191a57={'from':util[_0x071d('0x4d')]('\x22%s\x22\x20<%s>',_0xdc0f29[_0x071d('0x12')],_0xdc0f29[_0x071d('0x137')]||_0xdc0f29[_0x071d('0x135')][_0x071d('0x138')]),'to':_0x231b92['to']||'','cc':_0x231b92['cc']||'','bcc':_0x231b92[_0x071d('0x139')]||'','subject':_0x231b92[_0x071d('0x13a')],'html':_0x231b92[_0x071d('0x54')],'text':_0x231b92[_0x071d('0x54')]};var _0x4ffb4f={'tls':{'rejectUnauthorized':![]}};if(_0xdc0f29[_0x071d('0x135')][_0x071d('0x13b')]){_0x4ffb4f['service']=_0xdc0f29['Smtp']['service'];}else{_0x4ffb4f[_0x071d('0x13c')]=_0xdc0f29[_0x071d('0x135')]['host'];_0x4ffb4f[_0x071d('0x13d')]=_0xdc0f29[_0x071d('0x135')][_0x071d('0x13d')];_0x4ffb4f[_0x071d('0x13e')]=_0xdc0f29[_0x071d('0x135')]['secure'];}if(_0xdc0f29[_0x071d('0x135')][_0x071d('0x13f')]){_0x4ffb4f[_0x071d('0x140')]={'user':_0xdc0f29[_0x071d('0x135')][_0x071d('0x138')],'pass':_0xdc0f29[_0x071d('0x135')][_0x071d('0x141')]};}if(this[_0x071d('0x5c')](_0x231b92[_0x071d('0x142')])){}logger['debug'](_0x071d('0x143'),JSON[_0x071d('0xc7')](_0x191a57));this[_0x071d('0x2f')][_0x071d('0x74')](this,_0x231b92,_0x231b92[_0x071d('0x134')]);this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')]('Trying\x20SendMail\x20with\x20account\x20%s',_0xdc0f29[_0x071d('0x12')]));this[_0x071d('0x144')][_0x071d('0x74')](this,_0x4ffb4f,_0x191a57);return this[_0x071d('0xa')][_0x071d('0x86')]('Mail\x20message\x20added\x20to\x20outgoing\x20process');};AGIVertices[_0x071d('0xe')][_0x071d('0x145')]=function(_0x24c5cc){logger['info'](util[_0x071d('0x4d')](_0x071d('0x146'),_0x24c5cc[_0x071d('0x31')]));return this[_0x071d('0xa')][_0x071d('0x86')](_0x071d('0x147'));};AGIVertices['prototype']['sendSMS']=function(_0x58e8c8){logger[_0x071d('0x29')](util['format'](_0x071d('0x148'),_0x58e8c8[_0x071d('0x31')]));if(!this['isConfigured'](_0x58e8c8[_0x071d('0x149')])){return this[_0x071d('0xa')][_0x071d('0x86')]('no\x20sms\x20account\x20configured');}var _0x634ed8=this[_0x071d('0x14a')][_0x071d('0x74')](this,_0x58e8c8[_0x071d('0x149')]);if(!_0x634ed8){return this[_0x071d('0xa')][_0x071d('0x26')](_0x58e8c8,_0x071d('0x14b'));}var _0x35583e={'body':_0x58e8c8[_0x071d('0x14c')],'phone':_0x58e8c8['to']||'','SmsAccountId':_0x634ed8['id']};logger[_0x071d('0xa8')](_0x071d('0x14d'),JSON[_0x071d('0xc7')](_0x35583e));this[_0x071d('0x2f')]['sync'](this,_0x58e8c8,_0x58e8c8[_0x071d('0x149')]);this[_0x071d('0xa')][_0x071d('0x86')](util['format']('Trying\x20SendSMS\x20with\x20account\x20%s',_0x634ed8[_0x071d('0x12')]));this[_0x071d('0x2e')][_0x071d('0x74')](this,_0x35583e);return this[_0x071d('0xa')][_0x071d('0x86')]('Sms\x20message\x20added\x20to\x20outgoing\x20process');};AGIVertices['prototype'][_0x071d('0x14e')]=function(_0x21af8c){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x14f'),_0x21af8c[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x21af8c[_0x071d('0xa2')])){return this['channel'][_0x071d('0x26')](_0x21af8c,'no\x20variable\x20selected');}var _0x1eef3b=this[_0x071d('0xd')][_0x071d('0x74')](this,_0x21af8c[_0x071d('0xa2')]);if(!_0x1eef3b){return this[_0x071d('0xa')][_0x071d('0x26')](_0x21af8c,_0x071d('0xa3'));}return this[_0x071d('0xa')][_0x071d('0x72')](_0x1eef3b,_0x21af8c['variable_value']);};AGIVertices[_0x071d('0xe')][_0x071d('0x150')]=function(_0x25e8d8){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x151'),_0x25e8d8[_0x071d('0x31')]));this['channel'][_0x071d('0x86')]('START\x20CALLY\x20SQUARE');if(_0x25e8d8[_0x071d('0x79')]==='yes'){this['channel'][_0x071d('0x86')]('Answer');return this[_0x071d('0xa')][_0x071d('0x79')]();}return this[_0x071d('0xa')][_0x071d('0x86')](_0x071d('0x152'));};AGIVertices['prototype'][_0x071d('0x153')]=function(_0x341721){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x154'),_0x341721['label']));if(!this[_0x071d('0x5c')](_0x341721[_0x071d('0x155')])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x341721,'no\x20subproject\x20selected');}var _0x5a608f=this[_0x071d('0x13')][_0x071d('0x74')](this,_0x341721['project_id']);if(!this['isConfigured'](_0x5a608f)){return this['channel']['error'](_0x341721,util[_0x071d('0x4d')](_0x071d('0x156'),_0x341721['project_id']));}if(_0x5a608f===this[_0x071d('0xa')][_0x071d('0x39')]){return this['channel'][_0x071d('0x26')](_0x341721,'project\x20in\x20subproject\x20must\x20be\x20different\x20from\x20the\x20called\x20project');}this[_0x071d('0x2f')][_0x071d('0x74')](this,_0x341721,_0x5a608f);var _0x402122=this[_0x071d('0xa')][_0x071d('0x51')](_0x071d('0x157'),util[_0x071d('0x4d')](_0x071d('0x158'),config[_0x071d('0x6')][_0x071d('0x13c')]||_0x071d('0x159'),_0x5a608f,this[_0x071d('0xa')][_0x071d('0x39')]));if(_0x402122['result']===-0x1){return _0x402122;}return this['channel'][_0x071d('0x86')](util[_0x071d('0x4d')]('Executed\x20command\x20%s\x20%s',_0x071d('0x157'),_0x5a608f));};AGIVertices[_0x071d('0xe')][_0x071d('0x15a')]=function(_0x2d2488){logger['info'](util['format']('Enter\x20in\x20SYSTEM\x20(%s)\x20block',_0x2d2488[_0x071d('0x31')]));var _0x2a7b2e=this[_0x071d('0x50')]['sync'](this,_0x2d2488['command']);this['createSquareDetailsReport'][_0x071d('0x74')](this,_0x2d2488,_0x2d2488[_0x071d('0x77')]);if(this[_0x071d('0x5c')](_0x2d2488[_0x071d('0xa2')])){var _0x292ed7=this[_0x071d('0xd')][_0x071d('0x74')](this,_0x2d2488[_0x071d('0xa2')]);if(_0x292ed7){this[_0x071d('0xa')][_0x071d('0x72')](_0x292ed7,_0x2a7b2e);return this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0x15b'),_0x2d2488[_0x071d('0x77')],_0x292ed7));}}return this['channel'][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0x15c'),_0x2d2488[_0x071d('0x77')]));};AGIVertices[_0x071d('0xe')]['tts']=function(_0x172ce4){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x15d'),_0x172ce4['label']));if(!this[_0x071d('0x5c')](_0x172ce4[_0x071d('0x54')])){return this[_0x071d('0xa')][_0x071d('0x86')]('no\x20text\x20configured');}this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0x15e'),_0x172ce4[_0x071d('0x54')]));var _0x5e3aab=this[_0x071d('0x53')][_0x071d('0x74')](this,_0x172ce4);if(_0x5e3aab){this['channel']['noop'](util[_0x071d('0x4d')](_0x071d('0x15f'),_0x5e3aab));var _0x405f67=this[_0x071d('0xa')][_0x071d('0xd5')](_0x5e3aab);try{fs[_0x071d('0xd6')](_0x5e3aab+_0x071d('0xd7'));}catch(_0x522501){logger[_0x071d('0x26')](_0x522501);}return _0x405f67;}return this[_0x071d('0xa')][_0x071d('0x26')](_0x172ce4,_0x071d('0xb2'));};AGIVertices['prototype']['unpause']=function(_0x5e44ba){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x160'),_0x5e44ba[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x5e44ba[_0x071d('0x104')])){return this[_0x071d('0xa')][_0x071d('0x26')](_0x5e44ba,'no\x20find\x20by\x20configured');}logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x106'),this[_0x071d('0xa')][_0x071d('0x32')],_0x5e44ba[_0x071d('0x104')]));var _0x352a68=this[_0x071d('0x4a')][_0x071d('0x74')](this,_0x5e44ba[_0x071d('0x104')]);if(_0x352a68){logger[_0x071d('0x29')](util['format'](_0x071d('0x108'),this[_0x071d('0xa')][_0x071d('0x32')],_0x5e44ba['findBy']));this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')]('AGENT\x20%s\x20FOUND\x20BY',this['channel'][_0x071d('0x32')],_0x5e44ba[_0x071d('0x104')]));return{'code':0xc8,'result':_0x071d('0x109')};}else{logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x10a'),this[_0x071d('0xa')][_0x071d('0x32')],_0x5e44ba[_0x071d('0x104')]));this[_0x071d('0xa')]['noop'](util[_0x071d('0x4d')](_0x071d('0x10a'),this['channel']['callerid'],_0x5e44ba[_0x071d('0x104')]));return{'code':0xc8,'result':_0x071d('0x10b')};}};AGIVertices[_0x071d('0xe')][_0x071d('0x161')]=function(_0x2c2a9f){logger['info'](util['format'](_0x071d('0x162'),_0x2c2a9f[_0x071d('0x31')]));var _0x5a9870=this[_0x071d('0xa')]['exec'](_0x071d('0x163'),[_0x2c2a9f[_0x071d('0x164')],_0x2c2a9f[_0x071d('0x89')]]);if(_0x5a9870[_0x071d('0x70')]===-0x1){return _0x5a9870;}return this[_0x071d('0xa')][_0x071d('0x86')](util[_0x071d('0x4d')](_0x071d('0x87'),'VOICEMAIL',_0x2c2a9f['mailbox']));};AGIVertices[_0x071d('0xe')]['vswitch']=function(_0x517c54){logger[_0x071d('0x29')](util[_0x071d('0x4d')](_0x071d('0x165'),_0x517c54[_0x071d('0x31')]));if(!this[_0x071d('0x5c')](_0x517c54[_0x071d('0xa2')])){return this['channel'][_0x071d('0x26')](_0x517c54,_0x071d('0x166'));}var _0x3dcc9d=this['getVariable'][_0x071d('0x74')](this,_0x517c54['variable_id']);if(!_0x3dcc9d){return this[_0x071d('0xa')][_0x071d('0x26')](_0x517c54,_0x071d('0xa3'));}var _0x2e68d2=this['channel'][_0x071d('0xd')](_0x3dcc9d);return{'code':0xc8,'result':_0x2e68d2[_0x071d('0x6f')]?_0x2e68d2[_0x071d('0x6f')]:'-'};};String[_0x071d('0xe')][_0x071d('0x6e')]=function(_0xe9ee7a,_0x4e1325){return this[_0x071d('0x6c')](_0xe9ee7a)['join'](_0x4e1325);};module[_0x071d('0x167')]=AGIVertices;
\ No newline at end of file
index 9bd0178..363dc9f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf1b1=['uniqueid','queue','updateAcw','[%s][UPDATE][ACWTIME:%s]','catch','error','[%s][UPDATE][ERRORS:%s]','[%s][INPAUSE][AGENT:%s][QUEUE:%s]','finally','[ACW][START]\x20%s','message','[TIMER][STOP][AGENT:%s]','saveUnpause','update','[ACW][STOP]\x20Interface\x20%s\x20doesn\x27t\x20have\x20timer','[ACW][TIMERS]','stringify','[ACW][STOP]\x20%s','syncAgentConnect','acw','[ACW][syncAgentConnectPreview]\x20%s','isUndefined','attended','[%s][HANGUP:UNIQUEID]','linkedid','[%s][HANGUP:LINKEDID]','[ACW][syncHangupRequest]\x20%s','[%s][HANGUPATTENDEDTRANSFER:UNIQUEID]','origtransfereruniqueid','[%s][ATTENDEDTRANSFER:UNIQUEID]','origtransfererlinkedid','[%s][ATTENDEDTRANSFER:TRANSFERTARGETUNIQUEID]','transfertargetuniqueid','SIP/%s','findKey','format','localtwoconnectedlinename','[ACW][syncAttendedTransfer]\x20%s','transfereruniqueid','transfererlinkedid','[%s][BLINDTRANSFER:LINKEDID]','[ACW][syncBlindTransfer]\x20%s','autopause','exports','lodash','../ami','../../../config/logger','../rpc/user','voiceQueues','agents','timers','agentconnect','bind','syncHangupRequest','syncHangup','agentringnoanswer','syncAgentRingNoAnswer','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','syncAgentConnectPreview','milliseconds','seconds','prototype','startAcw','channels','interface','QueuePause','getAgent','then','voicePause','info','[%s][START][AGENT:%s][QUEUE:%s]','savePause','ACW','[%s][TIMER:%s][AGENT:%s][QUEUE:%s]','timer','stopAcw','acwTimeout','lastPauseAt'];(function(_0x5d45b8,_0x4cfc77){var _0x16c900=function(_0x457cec){while(--_0x457cec){_0x5d45b8['push'](_0x5d45b8['shift']());}};_0x16c900(++_0x4cfc77);}(_0xf1b1,0x7d));var _0x1f1b=function(_0x19b84f,_0x48765e){_0x19b84f=_0x19b84f-0x0;var _0x18067b=_0xf1b1[_0x19b84f];return _0x18067b;};'use strict';var util=require('util');var _=require(_0x1f1b('0x0'));var moment=require('moment');var ami=require(_0x1f1b('0x1'));var logger=require(_0x1f1b('0x2'))('acw');var RpcUser=require(_0x1f1b('0x3'));var RpcVoiceAgentReport=require('../rpc/voiceAgentReport');var io=require('socket.io-emitter')({'host':'localhost','port':0x18eb});function Acw(_0x3c12ee){this[_0x1f1b('0x4')]=_0x3c12ee[_0x1f1b('0x4')];this[_0x1f1b('0x5')]=_0x3c12ee[_0x1f1b('0x5')];this[_0x1f1b('0x6')]=_0x3c12ee[_0x1f1b('0x6')];this['channels']={};ami['on'](_0x1f1b('0x7'),this['syncAgentConnect'][_0x1f1b('0x8')](this));ami['on']('hanguprequest',this[_0x1f1b('0x9')][_0x1f1b('0x8')](this));ami['on']('hangup',this[_0x1f1b('0xa')]['bind'](this));ami['on'](_0x1f1b('0xb'),this[_0x1f1b('0xc')]['bind'](this));ami['on'](_0x1f1b('0xd'),this[_0x1f1b('0xe')][_0x1f1b('0x8')](this));ami['on'](_0x1f1b('0xf'),this[_0x1f1b('0x10')][_0x1f1b('0x8')](this));ami['on']('custom:agentConnectPreview',this[_0x1f1b('0x11')][_0x1f1b('0x8')](this));}function getDiff(_0xecfebc){var _0x713cb3=moment()[_0x1f1b('0x12')](0x0);var _0x2b8d26=moment(_0xecfebc)[_0x1f1b('0x12')](0x0);return _0x713cb3['diff'](_0x2b8d26,_0x1f1b('0x13'));}Acw[_0x1f1b('0x14')][_0x1f1b('0x15')]=function(_0x4028f9){try{var _0x20a0b7=this;var _0x5f345c=this[_0x1f1b('0x16')][_0x4028f9][_0x1f1b('0x17')];var _0x4c85e0=this[_0x1f1b('0x16')][_0x4028f9]['queue'];ami['Action']({'action':_0x1f1b('0x18'),'interface':_0x5f345c,'paused':!![],'reason':'ACW'})['then'](function(_0x37e2b7){if(_0x20a0b7[_0x1f1b('0x5')][_0x5f345c]){return RpcUser[_0x1f1b('0x19')](_0x20a0b7['agents'][_0x5f345c]['id'])[_0x1f1b('0x1a')](function(_0x55bcd8){if(_0x55bcd8&&!_0x55bcd8[_0x1f1b('0x1b')]){logger[_0x1f1b('0x1c')](_0x1f1b('0x1d'),_0x4028f9,_0x5f345c,_0x4c85e0);return RpcUser[_0x1f1b('0x1e')](_0x20a0b7['agents'][_0x5f345c],_0x1f1b('0x1f'),_0x4028f9)[_0x1f1b('0x1a')](function(_0x1c159c){_0x20a0b7[_0x1f1b('0x6')][_0x5f345c]={};logger[_0x1f1b('0x1c')](_0x1f1b('0x20'),_0x4028f9,_0x20a0b7[_0x1f1b('0x4')][_0x4c85e0]['acwTimeout'],_0x5f345c,_0x4c85e0);_0x20a0b7[_0x1f1b('0x6')][_0x5f345c][_0x1f1b('0x21')]=setTimeout(_0x20a0b7[_0x1f1b('0x22')][_0x1f1b('0x8')](_0x20a0b7,_0x5f345c),_0x20a0b7[_0x1f1b('0x4')][_0x4c85e0][_0x1f1b('0x23')]*0x3e8);_0x20a0b7[_0x1f1b('0x6')][_0x5f345c][_0x1f1b('0x24')]=_0x1c159c[_0x1f1b('0x24')];_0x20a0b7[_0x1f1b('0x6')][_0x5f345c][_0x1f1b('0x25')]=_0x4028f9;_0x20a0b7[_0x1f1b('0x6')][_0x5f345c][_0x1f1b('0x26')]=_0x4c85e0;_0x20a0b7[_0x1f1b('0x6')][_0x5f345c][_0x1f1b('0x27')]=function(){var _0x45aa22=getDiff(_0x20a0b7[_0x1f1b('0x6')][_0x5f345c][_0x1f1b('0x24')]);clearTimeout(_0x20a0b7[_0x1f1b('0x6')][_0x5f345c]['timer']);RpcVoiceAgentReport['update']({'acwtime':_0x45aa22},_0x20a0b7['timers'][_0x5f345c][_0x1f1b('0x25')],_0x5f345c)[_0x1f1b('0x1a')](function(_0x13e437){logger[_0x1f1b('0x1c')](_0x1f1b('0x28'),_0x4028f9,_0x45aa22,_0x13e437);})[_0x1f1b('0x29')](function(_0x10530e){logger[_0x1f1b('0x2a')](_0x1f1b('0x2b'),_0x4028f9,_0x10530e);});delete _0x20a0b7[_0x1f1b('0x6')][_0x5f345c];};});}else{logger['info'](_0x1f1b('0x2c'),_0x4028f9,_0x5f345c,_0x4c85e0);}});}})[_0x1f1b('0x29')](function(_0x37a9c6){logger[_0x1f1b('0x2a')](_0x1f1b('0x20'),_0x4028f9,_0x20a0b7[_0x1f1b('0x4')][_0x4c85e0][_0x1f1b('0x23')],_0x5f345c,_0x4c85e0);})[_0x1f1b('0x2d')](function(){delete _0x20a0b7['channels'][_0x4028f9];});}catch(_0x559419){logger[_0x1f1b('0x2a')](_0x1f1b('0x2e'),_0x559419[_0x1f1b('0x2f')]);}};Acw[_0x1f1b('0x14')][_0x1f1b('0x22')]=function(_0x12070c){try{var _0x4abc48=this;if(_0x4abc48['timers'][_0x12070c]){var _0x1af9b3=_0x4abc48[_0x1f1b('0x6')][_0x12070c]['uniqueid'];var _0x531180=_0x4abc48[_0x1f1b('0x6')][_0x12070c][_0x1f1b('0x26')];var _0x1c0d15=_0x4abc48[_0x1f1b('0x4')][_0x531180][_0x1f1b('0x23')];logger[_0x1f1b('0x1c')](_0x1f1b('0x30'),_0x12070c);RpcUser[_0x1f1b('0x31')](this[_0x1f1b('0x5')][_0x12070c]);RpcVoiceAgentReport[_0x1f1b('0x32')]({'acwtime':_0x1c0d15,'agentacw':!![]},_0x1af9b3,_0x12070c)[_0x1f1b('0x1a')](function(_0x412498){logger[_0x1f1b('0x1c')](_0x1f1b('0x28'),_0x1af9b3,_0x1c0d15,_0x412498);})['catch'](function(_0x976dcc){logger['error']('[%s][UPDATE][ERRORS:%s]',_0x1af9b3,_0x976dcc);});}else{logger[_0x1f1b('0x2a')](_0x1f1b('0x33'),_0x12070c);if(_0x4abc48[_0x1f1b('0x6')]){logger[_0x1f1b('0x1c')](_0x1f1b('0x34'),JSON[_0x1f1b('0x35')](_0x4abc48['timers']));}}}catch(_0x14f47b){logger[_0x1f1b('0x2a')](_0x1f1b('0x36'),_0x14f47b[_0x1f1b('0x2f')]);}};Acw[_0x1f1b('0x14')][_0x1f1b('0x37')]=function(_0x157098){try{if(this[_0x1f1b('0x4')][_0x157098['queue']]&&this[_0x1f1b('0x4')][_0x157098[_0x1f1b('0x26')]][_0x1f1b('0x38')]){if(this[_0x1f1b('0x5')][_0x157098[_0x1f1b('0x17')]]){this[_0x1f1b('0x16')][_0x157098['uniqueid']]={'queue':_0x157098[_0x1f1b('0x26')],'interface':_0x157098[_0x1f1b('0x17')]};}}}catch(_0x2ede4a){logger[_0x1f1b('0x2a')]('[ACW][syncAgentConnect]\x20%s',_0x2ede4a['message']);}};Acw[_0x1f1b('0x14')]['syncAgentConnectPreview']=function(_0x3dcfa4){try{if(this[_0x1f1b('0x4')][_0x3dcfa4[_0x1f1b('0x26')]]&&this[_0x1f1b('0x4')][_0x3dcfa4[_0x1f1b('0x26')]][_0x1f1b('0x38')]){if(this[_0x1f1b('0x5')][_0x3dcfa4[_0x1f1b('0x17')]]){this[_0x1f1b('0x16')][_0x3dcfa4[_0x1f1b('0x25')]]={'queue':_0x3dcfa4[_0x1f1b('0x26')],'interface':_0x3dcfa4[_0x1f1b('0x17')]};}}}catch(_0x2bb457){logger[_0x1f1b('0x2a')](_0x1f1b('0x39'),_0x2bb457[_0x1f1b('0x2f')]);}};Acw[_0x1f1b('0x14')][_0x1f1b('0x9')]=function(_0x3eed0c){try{if(this[_0x1f1b('0x16')][_0x3eed0c[_0x1f1b('0x25')]]&&_[_0x1f1b('0x3a')](this[_0x1f1b('0x16')][_0x3eed0c[_0x1f1b('0x25')]][_0x1f1b('0x3b')])){logger['info'](_0x1f1b('0x3c'),_0x3eed0c[_0x1f1b('0x25')]);this['startAcw'](_0x3eed0c[_0x1f1b('0x25')]);}else if(this[_0x1f1b('0x16')][_0x3eed0c[_0x1f1b('0x3d')]]&&_[_0x1f1b('0x3a')](this[_0x1f1b('0x16')][_0x3eed0c[_0x1f1b('0x3d')]][_0x1f1b('0x3b')])){logger[_0x1f1b('0x1c')](_0x1f1b('0x3e'),_0x3eed0c[_0x1f1b('0x3d')]);this[_0x1f1b('0x15')](_0x3eed0c[_0x1f1b('0x3d')]);}}catch(_0x1f822a){logger['error'](_0x1f1b('0x3f'),_0x1f822a['message']);}};Acw[_0x1f1b('0x14')]['syncHangup']=function(_0x44fe27){try{if(this[_0x1f1b('0x16')][_0x44fe27['uniqueid']]&&this[_0x1f1b('0x16')][_0x44fe27[_0x1f1b('0x25')]][_0x1f1b('0x3b')]){logger['info'](_0x1f1b('0x40'),_0x44fe27[_0x1f1b('0x25')]);this[_0x1f1b('0x15')](_0x44fe27[_0x1f1b('0x25')]);}}catch(_0x2013ae){logger['error']('[ACW][syncHangup]\x20%s',_0x2013ae[_0x1f1b('0x2f')]);}};Acw[_0x1f1b('0x14')][_0x1f1b('0xe')]=function(_0x336c63){try{if(this[_0x1f1b('0x16')][_0x336c63[_0x1f1b('0x41')]]){logger[_0x1f1b('0x1c')](_0x1f1b('0x42'),_0x336c63['origtransfereruniqueid']);this[_0x1f1b('0x15')](_0x336c63['origtransfereruniqueid']);}else if(this[_0x1f1b('0x16')][_0x336c63['origtransfererlinkedid']]){logger[_0x1f1b('0x1c')]('[%s][ATTENDEDTRANSFER:LINKEDID]',_0x336c63[_0x1f1b('0x43')]);this[_0x1f1b('0x15')](_0x336c63[_0x1f1b('0x43')]);}logger[_0x1f1b('0x1c')](_0x1f1b('0x44'),_0x336c63['transfertargetuniqueid']);this['channels'][_0x336c63[_0x1f1b('0x45')]]=_['find'](this[_0x1f1b('0x16')],[_0x1f1b('0x17'),util['format'](_0x1f1b('0x46'),_0x336c63['localtwoconnectedlinename'])]);if(this[_0x1f1b('0x16')][_0x336c63[_0x1f1b('0x45')]]){this['channels'][_0x336c63['transfertargetuniqueid']]['attended']=!![];delete this[_0x1f1b('0x16')][_[_0x1f1b('0x47')](this['channels'],[_0x1f1b('0x17'),util[_0x1f1b('0x48')](_0x1f1b('0x46'),_0x336c63[_0x1f1b('0x49')])])];}}catch(_0x2af902){logger[_0x1f1b('0x2a')](_0x1f1b('0x4a'),_0x2af902[_0x1f1b('0x2f')]);}};Acw[_0x1f1b('0x14')]['syncBlindTransfer']=function(_0xf7bb3a){try{if(this[_0x1f1b('0x16')][_0xf7bb3a[_0x1f1b('0x4b')]]){logger[_0x1f1b('0x1c')]('[%s][BLINDTRANSFER:UNIQUEID]',JSON[_0x1f1b('0x35')](_0xf7bb3a[_0x1f1b('0x4b')]));this[_0x1f1b('0x15')](_0xf7bb3a[_0x1f1b('0x4b')]);}else if(this[_0x1f1b('0x16')][_0xf7bb3a[_0x1f1b('0x4c')]]){logger[_0x1f1b('0x1c')](_0x1f1b('0x4d'),JSON[_0x1f1b('0x35')](_0xf7bb3a[_0x1f1b('0x4c')]));this['startAcw'](_0xf7bb3a[_0x1f1b('0x4c')]);}}catch(_0x469456){logger[_0x1f1b('0x2a')](_0x1f1b('0x4e'),_0x469456[_0x1f1b('0x2f')]);}};Acw['prototype'][_0x1f1b('0xc')]=function(_0x4a9b28){try{if(this[_0x1f1b('0x4')][_0x4a9b28['queue']]&&this[_0x1f1b('0x4')][_0x4a9b28['queue']][_0x1f1b('0x4f')]==='all'){if(this['agents'][_0x4a9b28[_0x1f1b('0x17')]]){logger['info']('[%s][AUTOPAUSE][AGENT:%s][QUEUE:%]',_0x4a9b28[_0x1f1b('0x25')],_0x4a9b28[_0x1f1b('0x17')],_0x4a9b28[_0x1f1b('0x26')]);return RpcUser['savePause'](this[_0x1f1b('0x5')][_0x4a9b28['interface']],'Auto-Pause',_0x4a9b28[_0x1f1b('0x25')]);}}}catch(_0x4a72a6){logger[_0x1f1b('0x2a')]('[ACW][syncAgentRingNoAnswer]\x20%s',_0x4a72a6[_0x1f1b('0x2f')]);}};module[_0x1f1b('0x50')]=Acw;
\ No newline at end of file
+var _0x2660=['startAcw','queue','ACW','then','getAgent','voicePause','info','[%s][START][AGENT:%s][QUEUE:%s]','[%s][TIMER:%s][AGENT:%s][QUEUE:%s]','acwTimeout','lastPauseAt','uniqueid','timer','[%s][UPDATE][ACWTIME:%s]','error','[%s][UPDATE][ERRORS:%s]','[%s][INPAUSE][AGENT:%s][QUEUE:%s]','catch','[ACW][START]\x20%s','message','saveUnpause','update','[ACW][STOP]\x20Interface\x20%s\x20doesn\x27t\x20have\x20timer','[ACW][TIMERS]','interface','[ACW][syncAgentConnect]\x20%s','[ACW][syncAgentConnectPreview]\x20%s','isUndefined','attended','[%s][HANGUP:UNIQUEID]','linkedid','syncHangup','[%s][HANGUPATTENDEDTRANSFER:UNIQUEID]','[ACW][syncHangup]\x20%s','origtransfereruniqueid','[%s][ATTENDEDTRANSFER:UNIQUEID]','origtransfererlinkedid','[%s][ATTENDEDTRANSFER:LINKEDID]','transfertargetuniqueid','find','format','SIP/%s','localtwoconnectedlinename','findKey','[ACW][syncAttendedTransfer]\x20%s','transfereruniqueid','[%s][BLINDTRANSFER:UNIQUEID]','stringify','transfererlinkedid','[%s][BLINDTRANSFER:LINKEDID]','autopause','all','[%s][AUTOPAUSE][AGENT:%s][QUEUE:%]','Auto-Pause','[ACW][syncAgentRingNoAnswer]\x20%s','exports','lodash','moment','../ami','acw','../rpc/user','../rpc/voiceAgentReport','socket.io-emitter','localhost','voiceQueues','agents','timers','channels','agentconnect','syncAgentConnect','hanguprequest','syncHangupRequest','bind','hangup','agentringnoanswer','syncAgentRingNoAnswer','blindtransfer','syncBlindTransfer','syncAgentConnectPreview','milliseconds','prototype'];(function(_0x573a27,_0x26d295){var _0x49f7c0=function(_0x1a88ff){while(--_0x1a88ff){_0x573a27['push'](_0x573a27['shift']());}};_0x49f7c0(++_0x26d295);}(_0x2660,0xda));var _0x0266=function(_0xd8a8af,_0x1e93f0){_0xd8a8af=_0xd8a8af-0x0;var _0x5b7278=_0x2660[_0xd8a8af];return _0x5b7278;};'use strict';var util=require('util');var _=require(_0x0266('0x0'));var moment=require(_0x0266('0x1'));var ami=require(_0x0266('0x2'));var logger=require('../../../config/logger')(_0x0266('0x3'));var RpcUser=require(_0x0266('0x4'));var RpcVoiceAgentReport=require(_0x0266('0x5'));var io=require(_0x0266('0x6'))({'host':_0x0266('0x7'),'port':0x18eb});function Acw(_0x4d0d82){this[_0x0266('0x8')]=_0x4d0d82[_0x0266('0x8')];this[_0x0266('0x9')]=_0x4d0d82[_0x0266('0x9')];this[_0x0266('0xa')]=_0x4d0d82[_0x0266('0xa')];this[_0x0266('0xb')]={};ami['on'](_0x0266('0xc'),this[_0x0266('0xd')]['bind'](this));ami['on'](_0x0266('0xe'),this[_0x0266('0xf')][_0x0266('0x10')](this));ami['on'](_0x0266('0x11'),this['syncHangup'][_0x0266('0x10')](this));ami['on'](_0x0266('0x12'),this[_0x0266('0x13')][_0x0266('0x10')](this));ami['on']('attendedtransfer',this['syncAttendedTransfer']['bind'](this));ami['on'](_0x0266('0x14'),this[_0x0266('0x15')]['bind'](this));ami['on']('custom:agentConnectPreview',this[_0x0266('0x16')]['bind'](this));}function getDiff(_0x1f86f6){var _0x2c017b=moment()['milliseconds'](0x0);var _0x5637ad=moment(_0x1f86f6)[_0x0266('0x17')](0x0);return _0x2c017b['diff'](_0x5637ad,'seconds');}Acw[_0x0266('0x18')][_0x0266('0x19')]=function(_0x5880a3){try{var _0xadc727=this;var _0x257656=this[_0x0266('0xb')][_0x5880a3]['interface'];var _0xb9cfbf=this[_0x0266('0xb')][_0x5880a3][_0x0266('0x1a')];ami['Action']({'action':'QueuePause','interface':_0x257656,'paused':!![],'reason':_0x0266('0x1b')})[_0x0266('0x1c')](function(_0x3646bd){if(_0xadc727[_0x0266('0x9')][_0x257656]){return RpcUser[_0x0266('0x1d')](_0xadc727[_0x0266('0x9')][_0x257656]['id'])['then'](function(_0x52d13a){if(_0x52d13a&&!_0x52d13a[_0x0266('0x1e')]){logger[_0x0266('0x1f')](_0x0266('0x20'),_0x5880a3,_0x257656,_0xb9cfbf);return RpcUser['savePause'](_0xadc727['agents'][_0x257656],_0x0266('0x1b'),_0x5880a3)['then'](function(_0x386e9b){_0xadc727['timers'][_0x257656]={};logger[_0x0266('0x1f')](_0x0266('0x21'),_0x5880a3,_0xadc727[_0x0266('0x8')][_0xb9cfbf][_0x0266('0x22')],_0x257656,_0xb9cfbf);_0xadc727['timers'][_0x257656]['timer']=setTimeout(_0xadc727['stopAcw'][_0x0266('0x10')](_0xadc727,_0x257656),_0xadc727[_0x0266('0x8')][_0xb9cfbf][_0x0266('0x22')]*0x3e8);_0xadc727[_0x0266('0xa')][_0x257656][_0x0266('0x23')]=_0x386e9b[_0x0266('0x23')];_0xadc727[_0x0266('0xa')][_0x257656][_0x0266('0x24')]=_0x5880a3;_0xadc727[_0x0266('0xa')][_0x257656][_0x0266('0x1a')]=_0xb9cfbf;_0xadc727[_0x0266('0xa')][_0x257656]['updateAcw']=function(){var _0x430dd2=getDiff(_0xadc727[_0x0266('0xa')][_0x257656]['lastPauseAt']);clearTimeout(_0xadc727[_0x0266('0xa')][_0x257656][_0x0266('0x25')]);RpcVoiceAgentReport['update']({'acwtime':_0x430dd2},_0xadc727[_0x0266('0xa')][_0x257656]['uniqueid'],_0x257656)[_0x0266('0x1c')](function(_0x50d38a){logger[_0x0266('0x1f')](_0x0266('0x26'),_0x5880a3,_0x430dd2,_0x50d38a);})['catch'](function(_0x461f24){logger[_0x0266('0x27')](_0x0266('0x28'),_0x5880a3,_0x461f24);});delete _0xadc727[_0x0266('0xa')][_0x257656];};});}else{logger[_0x0266('0x1f')](_0x0266('0x29'),_0x5880a3,_0x257656,_0xb9cfbf);}});}})[_0x0266('0x2a')](function(_0x36b658){logger[_0x0266('0x27')](_0x0266('0x21'),_0x5880a3,_0xadc727[_0x0266('0x8')][_0xb9cfbf]['acwTimeout'],_0x257656,_0xb9cfbf);})['finally'](function(){delete _0xadc727[_0x0266('0xb')][_0x5880a3];});}catch(_0x131a57){logger[_0x0266('0x27')](_0x0266('0x2b'),_0x131a57[_0x0266('0x2c')]);}};Acw[_0x0266('0x18')]['stopAcw']=function(_0x523c28){try{var _0x536f19=this;if(_0x536f19['timers'][_0x523c28]){var _0x36cedf=_0x536f19['timers'][_0x523c28][_0x0266('0x24')];var _0x51bef1=_0x536f19[_0x0266('0xa')][_0x523c28]['queue'];var _0x447a66=_0x536f19[_0x0266('0x8')][_0x51bef1]['acwTimeout'];logger[_0x0266('0x1f')]('[TIMER][STOP][AGENT:%s]',_0x523c28);RpcUser[_0x0266('0x2d')](this['agents'][_0x523c28]);RpcVoiceAgentReport[_0x0266('0x2e')]({'acwtime':_0x447a66,'agentacw':!![]},_0x36cedf,_0x523c28)['then'](function(_0x54bbdd){logger[_0x0266('0x1f')]('[%s][UPDATE][ACWTIME:%s]',_0x36cedf,_0x447a66,_0x54bbdd);})['catch'](function(_0x5041d1){logger[_0x0266('0x27')](_0x0266('0x28'),_0x36cedf,_0x5041d1);});}else{logger[_0x0266('0x27')](_0x0266('0x2f'),_0x523c28);if(_0x536f19[_0x0266('0xa')]){logger[_0x0266('0x1f')](_0x0266('0x30'),JSON['stringify'](_0x536f19['timers']));}}}catch(_0x401807){logger['error']('[ACW][STOP]\x20%s',_0x401807[_0x0266('0x2c')]);}};Acw[_0x0266('0x18')][_0x0266('0xd')]=function(_0x305baf){try{if(this['voiceQueues'][_0x305baf[_0x0266('0x1a')]]&&this[_0x0266('0x8')][_0x305baf['queue']][_0x0266('0x3')]){if(this[_0x0266('0x9')][_0x305baf[_0x0266('0x31')]]){this['channels'][_0x305baf[_0x0266('0x24')]]={'queue':_0x305baf[_0x0266('0x1a')],'interface':_0x305baf[_0x0266('0x31')]};}}}catch(_0x8c2fd8){logger[_0x0266('0x27')](_0x0266('0x32'),_0x8c2fd8[_0x0266('0x2c')]);}};Acw[_0x0266('0x18')][_0x0266('0x16')]=function(_0xd48342){try{if(this[_0x0266('0x8')][_0xd48342[_0x0266('0x1a')]]&&this[_0x0266('0x8')][_0xd48342[_0x0266('0x1a')]][_0x0266('0x3')]){if(this[_0x0266('0x9')][_0xd48342[_0x0266('0x31')]]){this['channels'][_0xd48342[_0x0266('0x24')]]={'queue':_0xd48342[_0x0266('0x1a')],'interface':_0xd48342[_0x0266('0x31')]};}}}catch(_0x55e348){logger[_0x0266('0x27')](_0x0266('0x33'),_0x55e348[_0x0266('0x2c')]);}};Acw['prototype'][_0x0266('0xf')]=function(_0x5dcbd7){try{if(this[_0x0266('0xb')][_0x5dcbd7[_0x0266('0x24')]]&&_[_0x0266('0x34')](this[_0x0266('0xb')][_0x5dcbd7['uniqueid']][_0x0266('0x35')])){logger['info'](_0x0266('0x36'),_0x5dcbd7[_0x0266('0x24')]);this[_0x0266('0x19')](_0x5dcbd7[_0x0266('0x24')]);}else if(this[_0x0266('0xb')][_0x5dcbd7[_0x0266('0x37')]]&&_['isUndefined'](this[_0x0266('0xb')][_0x5dcbd7[_0x0266('0x37')]][_0x0266('0x35')])){logger[_0x0266('0x1f')]('[%s][HANGUP:LINKEDID]',_0x5dcbd7[_0x0266('0x37')]);this[_0x0266('0x19')](_0x5dcbd7[_0x0266('0x37')]);}}catch(_0x11f39c){logger[_0x0266('0x27')]('[ACW][syncHangupRequest]\x20%s',_0x11f39c[_0x0266('0x2c')]);}};Acw[_0x0266('0x18')][_0x0266('0x38')]=function(_0x487392){try{if(this['channels'][_0x487392[_0x0266('0x24')]]&&this[_0x0266('0xb')][_0x487392['uniqueid']][_0x0266('0x35')]){logger[_0x0266('0x1f')](_0x0266('0x39'),_0x487392[_0x0266('0x24')]);this[_0x0266('0x19')](_0x487392[_0x0266('0x24')]);}}catch(_0x49b5d3){logger[_0x0266('0x27')](_0x0266('0x3a'),_0x49b5d3[_0x0266('0x2c')]);}};Acw[_0x0266('0x18')]['syncAttendedTransfer']=function(_0x19447e){try{if(this[_0x0266('0xb')][_0x19447e[_0x0266('0x3b')]]){logger[_0x0266('0x1f')](_0x0266('0x3c'),_0x19447e[_0x0266('0x3b')]);this[_0x0266('0x19')](_0x19447e[_0x0266('0x3b')]);}else if(this[_0x0266('0xb')][_0x19447e[_0x0266('0x3d')]]){logger['info'](_0x0266('0x3e'),_0x19447e[_0x0266('0x3d')]);this[_0x0266('0x19')](_0x19447e[_0x0266('0x3d')]);}logger[_0x0266('0x1f')]('[%s][ATTENDEDTRANSFER:TRANSFERTARGETUNIQUEID]',_0x19447e[_0x0266('0x3f')]);this[_0x0266('0xb')][_0x19447e['transfertargetuniqueid']]=_[_0x0266('0x40')](this[_0x0266('0xb')],[_0x0266('0x31'),util[_0x0266('0x41')](_0x0266('0x42'),_0x19447e[_0x0266('0x43')])]);if(this[_0x0266('0xb')][_0x19447e[_0x0266('0x3f')]]){this[_0x0266('0xb')][_0x19447e[_0x0266('0x3f')]][_0x0266('0x35')]=!![];delete this[_0x0266('0xb')][_[_0x0266('0x44')](this[_0x0266('0xb')],[_0x0266('0x31'),util[_0x0266('0x41')](_0x0266('0x42'),_0x19447e['localtwoconnectedlinename'])])];}}catch(_0x2e83ce){logger[_0x0266('0x27')](_0x0266('0x45'),_0x2e83ce['message']);}};Acw[_0x0266('0x18')][_0x0266('0x15')]=function(_0xc1412e){try{if(this[_0x0266('0xb')][_0xc1412e[_0x0266('0x46')]]){logger[_0x0266('0x1f')](_0x0266('0x47'),JSON[_0x0266('0x48')](_0xc1412e[_0x0266('0x46')]));this[_0x0266('0x19')](_0xc1412e[_0x0266('0x46')]);}else if(this['channels'][_0xc1412e[_0x0266('0x49')]]){logger['info'](_0x0266('0x4a'),JSON[_0x0266('0x48')](_0xc1412e[_0x0266('0x49')]));this[_0x0266('0x19')](_0xc1412e[_0x0266('0x49')]);}}catch(_0x548314){logger[_0x0266('0x27')]('[ACW][syncBlindTransfer]\x20%s',_0x548314[_0x0266('0x2c')]);}};Acw['prototype'][_0x0266('0x13')]=function(_0x28accb){try{if(this[_0x0266('0x8')][_0x28accb[_0x0266('0x1a')]]&&this[_0x0266('0x8')][_0x28accb[_0x0266('0x1a')]][_0x0266('0x4b')]===_0x0266('0x4c')){if(this[_0x0266('0x9')][_0x28accb[_0x0266('0x31')]]){logger['info'](_0x0266('0x4d'),_0x28accb['uniqueid'],_0x28accb[_0x0266('0x31')],_0x28accb['queue']);return RpcUser['savePause'](this[_0x0266('0x9')][_0x28accb[_0x0266('0x31')]],_0x0266('0x4e'),_0x28accb[_0x0266('0x24')]);}}}catch(_0xc0210e){logger[_0x0266('0x27')](_0x0266('0x4f'),_0xc0210e[_0x0266('0x2c')]);}};module[_0x0266('0x50')]=Acw;
\ No newline at end of file
index 9ebdb4e..76cb6e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['Manager\x20\x22%s\x22\x20error\x20to\x20%s:%s\x20with:\x0a%s','inspect','error','format','Manager\x20\x22%s\x22\x20closed\x20to\x20%s:%s','username','actionSipShowRegistry','info','action:','SipShowRegistry','sipshowregistry','actionDeviceStateList','devicestatelist','actionSipPeerStatus','SipPeerStatus','actionQueueSummary','queuesummary','actionCoreShowChannels','coreshowchannels','once','close','connect','shutdown','resolve','then','catch','log','exports','asterisk-manager','bluebird','moment','lodash','../../config/logger','../../config/environment','asterisk','port','keepConnected','Action','action'];(function(_0x480e4d,_0x5901bf){var _0x168203=function(_0xef82cd){while(--_0xef82cd){_0x480e4d['push'](_0x480e4d['shift']());}};_0x168203(++_0x5901bf);}(_0x7a54,0x106));var _0x47a5=function(_0x2ce079,_0x4be45a){_0x2ce079=_0x2ce079-0x0;var _0x1292fe=_0x7a54[_0x2ce079];return _0x1292fe;};'use strict';var Manager=require(_0x47a5('0x0'));var BPromise=require(_0x47a5('0x1'));var moment=require(_0x47a5('0x2'));var util=require('util');var _=require(_0x47a5('0x3'));var logger=require(_0x47a5('0x4'))('ami');var config=require(_0x47a5('0x5'));var ami=new Manager(config[_0x47a5('0x6')][_0x47a5('0x7')],config[_0x47a5('0x6')]['ip'],config[_0x47a5('0x6')]['username'],config[_0x47a5('0x6')]['password'],!![]);ami[_0x47a5('0x8')]();ami[_0x47a5('0x9')]=BPromise['promisify'](ami[_0x47a5('0xa')]);function error(_0x5077f3){logger['error'](util['format'](_0x47a5('0xb'),config[_0x47a5('0x6')]['username'],config[_0x47a5('0x6')]['ip'],config['asterisk']['port'],util[_0x47a5('0xc')](_0x5077f3,![],null)));}function close(){logger[_0x47a5('0xd')](util[_0x47a5('0xe')](_0x47a5('0xf'),config[_0x47a5('0x6')][_0x47a5('0x10')],config[_0x47a5('0x6')]['ip'],config['asterisk'][_0x47a5('0x7')]));}ami[_0x47a5('0x11')]=function(){logger[_0x47a5('0x12')](_0x47a5('0x13'),_0x47a5('0x14'));return function(){return ami[_0x47a5('0x9')]({'action':_0x47a5('0x15')});};};ami[_0x47a5('0x16')]=function(){logger['info'](_0x47a5('0x13'),_0x47a5('0x14'));return function(){return ami[_0x47a5('0x9')]({'action':_0x47a5('0x17')});};};ami[_0x47a5('0x18')]=function(){logger['info']('action:',_0x47a5('0x19'));return function(){return ami['Action']({'action':'sippeerstatus'});};};ami[_0x47a5('0x1a')]=function(){return function(){return ami[_0x47a5('0x9')]({'action':_0x47a5('0x1b')});};};ami[_0x47a5('0x1c')]=function(){return function(){return ami[_0x47a5('0x9')]({'action':_0x47a5('0x1d')});};};function connect(_0x2763d6){logger[_0x47a5('0x12')](util[_0x47a5('0xe')]('Manager\x20\x22%s\x22\x20logged\x20on\x20to\x20%s:%s',config[_0x47a5('0x6')][_0x47a5('0x10')],config['asterisk']['ip'],config[_0x47a5('0x6')][_0x47a5('0x7')]));ami[_0x47a5('0x1e')]('error',error);ami[_0x47a5('0x1e')](_0x47a5('0x1f'),close);}ami['on'](_0x47a5('0x20'),connect);ami['on'](_0x47a5('0x21'),function(_0x5ef1b1){logger[_0x47a5('0x12')](util[_0x47a5('0xe')]('Shutdown\x20\x22%s\x22\x20to\x20%s:%s\x20with:\x0a%s',config[_0x47a5('0x6')][_0x47a5('0x10')],config[_0x47a5('0x6')]['ip'],config[_0x47a5('0x6')][_0x47a5('0x7')],util['inspect'](_0x5ef1b1,![],null)));});ami['on']('fullybooted',function(_0x136745){logger['info'](util[_0x47a5('0xe')]('Fullybooted\x20\x22%s\x22\x20to\x20%s:%s',config[_0x47a5('0x6')][_0x47a5('0x10')],config[_0x47a5('0x6')]['ip'],config[_0x47a5('0x6')][_0x47a5('0x7')]));return BPromise[_0x47a5('0x22')]()[_0x47a5('0x23')](ami[_0x47a5('0x11')]())[_0x47a5('0x23')](ami[_0x47a5('0x16')]())[_0x47a5('0x23')](ami[_0x47a5('0x18')]())[_0x47a5('0x23')](ami['actionQueueSummary']())[_0x47a5('0x23')](ami['actionCoreShowChannels']())[_0x47a5('0x24')](function(_0x9ac908){console[_0x47a5('0x25')](_0x9ac908);});});ami['once'](_0x47a5('0xd'),error);ami[_0x47a5('0x1e')](_0x47a5('0x1f'),close);module[_0x47a5('0x26')]=ami;
\ No newline at end of file
+var _0x7a54=['Manager\x20\x22%s\x22\x20error\x20to\x20%s:%s\x20with:\x0a%s','inspect','error','format','Manager\x20\x22%s\x22\x20closed\x20to\x20%s:%s','username','actionSipShowRegistry','info','action:','SipShowRegistry','sipshowregistry','actionDeviceStateList','devicestatelist','actionSipPeerStatus','SipPeerStatus','actionQueueSummary','queuesummary','actionCoreShowChannels','coreshowchannels','once','close','connect','shutdown','resolve','then','catch','log','exports','asterisk-manager','bluebird','moment','lodash','../../config/logger','../../config/environment','asterisk','port','keepConnected','Action','action'];(function(_0x3001ae,_0x3901b4){var _0x39025c=function(_0x327953){while(--_0x327953){_0x3001ae['push'](_0x3001ae['shift']());}};_0x39025c(++_0x3901b4);}(_0x7a54,0x106));var _0x47a5=function(_0x15900f,_0x2a5b05){_0x15900f=_0x15900f-0x0;var _0x9a9ac1=_0x7a54[_0x15900f];return _0x9a9ac1;};'use strict';var Manager=require(_0x47a5('0x0'));var BPromise=require(_0x47a5('0x1'));var moment=require(_0x47a5('0x2'));var util=require('util');var _=require(_0x47a5('0x3'));var logger=require(_0x47a5('0x4'))('ami');var config=require(_0x47a5('0x5'));var ami=new Manager(config[_0x47a5('0x6')][_0x47a5('0x7')],config[_0x47a5('0x6')]['ip'],config[_0x47a5('0x6')]['username'],config[_0x47a5('0x6')]['password'],!![]);ami[_0x47a5('0x8')]();ami[_0x47a5('0x9')]=BPromise['promisify'](ami[_0x47a5('0xa')]);function error(_0x5077f3){logger['error'](util['format'](_0x47a5('0xb'),config[_0x47a5('0x6')]['username'],config[_0x47a5('0x6')]['ip'],config['asterisk']['port'],util[_0x47a5('0xc')](_0x5077f3,![],null)));}function close(){logger[_0x47a5('0xd')](util[_0x47a5('0xe')](_0x47a5('0xf'),config[_0x47a5('0x6')][_0x47a5('0x10')],config[_0x47a5('0x6')]['ip'],config['asterisk'][_0x47a5('0x7')]));}ami[_0x47a5('0x11')]=function(){logger[_0x47a5('0x12')](_0x47a5('0x13'),_0x47a5('0x14'));return function(){return ami[_0x47a5('0x9')]({'action':_0x47a5('0x15')});};};ami[_0x47a5('0x16')]=function(){logger['info'](_0x47a5('0x13'),_0x47a5('0x14'));return function(){return ami[_0x47a5('0x9')]({'action':_0x47a5('0x17')});};};ami[_0x47a5('0x18')]=function(){logger['info']('action:',_0x47a5('0x19'));return function(){return ami['Action']({'action':'sippeerstatus'});};};ami[_0x47a5('0x1a')]=function(){return function(){return ami[_0x47a5('0x9')]({'action':_0x47a5('0x1b')});};};ami[_0x47a5('0x1c')]=function(){return function(){return ami[_0x47a5('0x9')]({'action':_0x47a5('0x1d')});};};function connect(_0x2763d6){logger[_0x47a5('0x12')](util[_0x47a5('0xe')]('Manager\x20\x22%s\x22\x20logged\x20on\x20to\x20%s:%s',config[_0x47a5('0x6')][_0x47a5('0x10')],config['asterisk']['ip'],config[_0x47a5('0x6')][_0x47a5('0x7')]));ami[_0x47a5('0x1e')]('error',error);ami[_0x47a5('0x1e')](_0x47a5('0x1f'),close);}ami['on'](_0x47a5('0x20'),connect);ami['on'](_0x47a5('0x21'),function(_0x5ef1b1){logger[_0x47a5('0x12')](util[_0x47a5('0xe')]('Shutdown\x20\x22%s\x22\x20to\x20%s:%s\x20with:\x0a%s',config[_0x47a5('0x6')][_0x47a5('0x10')],config[_0x47a5('0x6')]['ip'],config[_0x47a5('0x6')][_0x47a5('0x7')],util['inspect'](_0x5ef1b1,![],null)));});ami['on']('fullybooted',function(_0x136745){logger['info'](util[_0x47a5('0xe')]('Fullybooted\x20\x22%s\x22\x20to\x20%s:%s',config[_0x47a5('0x6')][_0x47a5('0x10')],config[_0x47a5('0x6')]['ip'],config[_0x47a5('0x6')][_0x47a5('0x7')]));return BPromise[_0x47a5('0x22')]()[_0x47a5('0x23')](ami[_0x47a5('0x11')]())[_0x47a5('0x23')](ami[_0x47a5('0x16')]())[_0x47a5('0x23')](ami[_0x47a5('0x18')]())[_0x47a5('0x23')](ami['actionQueueSummary']())[_0x47a5('0x23')](ami['actionCoreShowChannels']())[_0x47a5('0x24')](function(_0x9ac908){console[_0x47a5('0x25')](_0x9ac908);});});ami['once'](_0x47a5('0xd'),error);ami[_0x47a5('0x1e')](_0x47a5('0x1f'),close);module[_0x47a5('0x26')]=ami;
\ No newline at end of file
index 658faba..7c65340 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9219=['Request','request','then','rpc','error','memberReport','message','catch','exports','ami','client','http'];(function(_0x456a27,_0x5ac03a){var _0x24d33e=function(_0x27bdd7){while(--_0x27bdd7){_0x456a27['push'](_0x456a27['shift']());}};_0x24d33e(++_0x5ac03a);}(_0x9219,0x17d));var _0x9921=function(_0x2a8eef,_0x5ae23c){_0x2a8eef=_0x2a8eef-0x0;var _0x31eec5=_0x9219[_0x2a8eef];return _0x31eec5;};'use strict';var jayson=require('jayson/promise');var BPromise=require('bluebird');var logger=require('../../config/logger')(_0x9921('0x0'));var client=jayson[_0x9921('0x1')][_0x9921('0x2')]({'port':0x2329});client[_0x9921('0x3')]=function(_0x5dc9d0,_0x2c570b){return new BPromise(function(_0x5be009,_0x738417){return client[_0x9921('0x4')](_0x5dc9d0,_0x2c570b)[_0x9921('0x5')](function(_0x2fedbb){logger['debug'](_0x9921('0x6'),'memberReport',_0x5dc9d0,_0x2c570b,_0x2fedbb);if(_0x2fedbb[_0x9921('0x7')]){logger['error'](_0x9921('0x6'),_0x9921('0x8'),_0x5dc9d0,_0x2fedbb[_0x9921('0x7')]['message'],_0x2c570b);return _0x738417(_0x2fedbb[_0x9921('0x7')][_0x9921('0x9')]);}else{return _0x5be009(_0x2fedbb['result']);}})[_0x9921('0xa')](function(_0x50aba3){logger[_0x9921('0x7')](_0x9921('0x6'),_0x9921('0x8'),_0x5dc9d0,_0x50aba3,_0x2c570b);return _0x738417(_0x50aba3);});});};module[_0x9921('0xb')]=client;
\ No newline at end of file
+var _0xea20=['memberReport','error','message','catch','exports','jayson/promise','ami','client','http','Request','request','debug','rpc'];(function(_0x1cf847,_0x48030d){var _0x2f0207=function(_0x1a2bf9){while(--_0x1a2bf9){_0x1cf847['push'](_0x1cf847['shift']());}};_0x2f0207(++_0x48030d);}(_0xea20,0x130));var _0x0ea2=function(_0x503e93,_0x4727a6){_0x503e93=_0x503e93-0x0;var _0x2bac82=_0xea20[_0x503e93];return _0x2bac82;};'use strict';var jayson=require(_0x0ea2('0x0'));var BPromise=require('bluebird');var logger=require('../../config/logger')(_0x0ea2('0x1'));var client=jayson[_0x0ea2('0x2')][_0x0ea2('0x3')]({'port':0x2329});client[_0x0ea2('0x4')]=function(_0x26b318,_0x5c8850){return new BPromise(function(_0x17cb31,_0x333c8f){return client[_0x0ea2('0x5')](_0x26b318,_0x5c8850)['then'](function(_0x5e1b7b){logger[_0x0ea2('0x6')](_0x0ea2('0x7'),_0x0ea2('0x8'),_0x26b318,_0x5c8850,_0x5e1b7b);if(_0x5e1b7b[_0x0ea2('0x9')]){logger[_0x0ea2('0x9')]('rpc',_0x0ea2('0x8'),_0x26b318,_0x5e1b7b[_0x0ea2('0x9')][_0x0ea2('0xa')],_0x5c8850);return _0x333c8f(_0x5e1b7b['error'][_0x0ea2('0xa')]);}else{return _0x17cb31(_0x5e1b7b['result']);}})[_0x0ea2('0xb')](function(_0x5cf28d){logger[_0x0ea2('0x9')](_0x0ea2('0x7'),_0x0ea2('0x8'),_0x26b318,_0x5cf28d,_0x5c8850);return _0x333c8f(_0x5cf28d);});});};module[_0x0ea2('0xc')]=client;
\ No newline at end of file
index 8597b91..b374de0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f45=['phone','firstName','lastName','queue','active','type','dialQueueTimeout','scheduledat','countbusyretry','countcongestionretry','ContactId','VoiceQueueId','CampaignId','idHopper','ContactFirstName','starttime','format','YYYY-MM-DD\x20HH:mm:ss','callback','callbackuniqueid','callbackat','recallme','prototype','\x22%s\x22\x20<%s>','dialCutDigit','number','substring','getQueue','exports','lodash','moment','isNil','voiceQueue','uniqueid','name','Contact'];(function(_0x1fff51,_0x536c28){var _0x1fe15f=function(_0x52da2b){while(--_0x52da2b){_0x1fff51['push'](_0x1fff51['shift']());}};_0x1fe15f(++_0x536c28);}(_0x4f45,0x89));var _0x54f4=function(_0x10fe1d,_0x57c8cb){_0x10fe1d=_0x10fe1d-0x0;var _0x4e4a51=_0x4f45[_0x10fe1d];return _0x4e4a51;};'use strict';var util=require('util');var _=require(_0x54f4('0x0'));var moment=require(_0x54f4('0x1'));function checkNameSurname(_0x1d7e42,_0x49781a,_0x4182cf){var _0x2fd04e='';if(!_[_0x54f4('0x2')](_0x49781a)&&'string'===typeof _0x49781a){_0x2fd04e+=_0x49781a;}if(!_['isNil'](_0x4182cf)&&'string'===typeof _0x4182cf){_0x2fd04e+='\x20'+_0x4182cf;}if(_0x2fd04e!==''){return _0x2fd04e;}return _0x1d7e42;}function Action(_0x53b814,_0x19923f,_0x316c8d){this[_0x54f4('0x3')]=_0x53b814;this[_0x54f4('0x4')]=_0x316c8d||undefined;this[_0x54f4('0x5')]=checkNameSurname(_0x19923f[_0x54f4('0x6')][_0x54f4('0x7')],_0x19923f[_0x54f4('0x6')][_0x54f4('0x8')],_0x19923f['Contact'][_0x54f4('0x9')]);this['number']=_0x19923f['Contact'][_0x54f4('0x7')];this[_0x54f4('0xa')]=_0x53b814[_0x54f4('0x5')];this[_0x54f4('0xb')]=_0x19923f[_0x54f4('0xb')]||![];this['type']=_0x53b814[_0x54f4('0xc')];this[_0x54f4('0xd')]=_0x53b814[_0x54f4('0xd')]||0x3;this[_0x54f4('0xe')]=_0x19923f[_0x54f4('0xe')];this[_0x54f4('0xf')]=_0x19923f['countbusyretry'];this[_0x54f4('0x10')]=_0x19923f[_0x54f4('0x10')];this['countnoanswerretry']=_0x19923f['countnoanswerretry'];this['ContactId']=_0x19923f[_0x54f4('0x11')];this['ListId']=_0x19923f['ListId'];this['UserId']=_0x19923f['UserId'];this[_0x54f4('0x12')]=_0x19923f['VoiceQueueId'];this[_0x54f4('0x13')]=_0x19923f[_0x54f4('0x13')];this[_0x54f4('0x14')]=_0x19923f['id'];this[_0x54f4('0x15')]=_0x19923f[_0x54f4('0x6')]['firstName']||'';this[_0x54f4('0x16')]=moment()[_0x54f4('0x17')](_0x54f4('0x18'));this[_0x54f4('0x19')]=_0x19923f[_0x54f4('0x19')];this['callbackuniqueid']=_0x19923f[_0x54f4('0x1a')];this[_0x54f4('0x1b')]=_0x19923f[_0x54f4('0x1b')];this[_0x54f4('0x1c')]=_0x19923f[_0x54f4('0x1c')];}Action[_0x54f4('0x1d')]['getCaller']=function(){return util[_0x54f4('0x17')](_0x54f4('0x1e'),this['name'],this[_0x54f4('0x3')][_0x54f4('0x1f')]>0x0?this[_0x54f4('0x20')][_0x54f4('0x21')](this[_0x54f4('0x3')]['dialCutDigit']):this[_0x54f4('0x20')]);};Action['prototype'][_0x54f4('0x22')]=function(){return this[_0x54f4('0xa')];};module[_0x54f4('0x23')]=Action;
\ No newline at end of file
+var _0xe336=['type','dialQueueTimeout','scheduledat','countbusyretry','countcongestionretry','countnoanswerretry','ContactId','ListId','UserId','VoiceQueueId','CampaignId','idHopper','ContactFirstName','starttime','format','YYYY-MM-DD\x20HH:mm:ss','callback','callbackuniqueid','callbackat','recallme','prototype','\x22%s\x22\x20<%s>','dialCutDigit','substring','number','getQueue','exports','util','moment','isNil','string','voiceQueue','name','phone','firstName','Contact','lastName','queue','active'];(function(_0x5a8469,_0x4d842c){var _0x36f0f0=function(_0x29008c){while(--_0x29008c){_0x5a8469['push'](_0x5a8469['shift']());}};_0x36f0f0(++_0x4d842c);}(_0xe336,0x12c));var _0x6e33=function(_0x3f1b20,_0xf91ce3){_0x3f1b20=_0x3f1b20-0x0;var _0x3b7ef5=_0xe336[_0x3f1b20];return _0x3b7ef5;};'use strict';var util=require(_0x6e33('0x0'));var _=require('lodash');var moment=require(_0x6e33('0x1'));function checkNameSurname(_0x4b2f29,_0x30af01,_0x46f383){var _0x32ce69='';if(!_[_0x6e33('0x2')](_0x30af01)&&_0x6e33('0x3')===typeof _0x30af01){_0x32ce69+=_0x30af01;}if(!_['isNil'](_0x46f383)&&_0x6e33('0x3')===typeof _0x46f383){_0x32ce69+='\x20'+_0x46f383;}if(_0x32ce69!==''){return _0x32ce69;}return _0x4b2f29;}function Action(_0x58f324,_0x365746,_0x1c57ab){this[_0x6e33('0x4')]=_0x58f324;this['uniqueid']=_0x1c57ab||undefined;this[_0x6e33('0x5')]=checkNameSurname(_0x365746['Contact'][_0x6e33('0x6')],_0x365746['Contact'][_0x6e33('0x7')],_0x365746[_0x6e33('0x8')][_0x6e33('0x9')]);this['number']=_0x365746[_0x6e33('0x8')][_0x6e33('0x6')];this[_0x6e33('0xa')]=_0x58f324[_0x6e33('0x5')];this[_0x6e33('0xb')]=_0x365746['active']||![];this[_0x6e33('0xc')]=_0x58f324[_0x6e33('0xc')];this[_0x6e33('0xd')]=_0x58f324[_0x6e33('0xd')]||0x3;this[_0x6e33('0xe')]=_0x365746[_0x6e33('0xe')];this[_0x6e33('0xf')]=_0x365746[_0x6e33('0xf')];this[_0x6e33('0x10')]=_0x365746[_0x6e33('0x10')];this[_0x6e33('0x11')]=_0x365746[_0x6e33('0x11')];this[_0x6e33('0x12')]=_0x365746['ContactId'];this[_0x6e33('0x13')]=_0x365746[_0x6e33('0x13')];this['UserId']=_0x365746[_0x6e33('0x14')];this[_0x6e33('0x15')]=_0x365746['VoiceQueueId'];this[_0x6e33('0x16')]=_0x365746['CampaignId'];this[_0x6e33('0x17')]=_0x365746['id'];this[_0x6e33('0x18')]=_0x365746[_0x6e33('0x8')][_0x6e33('0x7')]||'';this[_0x6e33('0x19')]=moment()[_0x6e33('0x1a')](_0x6e33('0x1b'));this[_0x6e33('0x1c')]=_0x365746[_0x6e33('0x1c')];this[_0x6e33('0x1d')]=_0x365746['callbackuniqueid'];this[_0x6e33('0x1e')]=_0x365746[_0x6e33('0x1e')];this[_0x6e33('0x1f')]=_0x365746[_0x6e33('0x1f')];}Action[_0x6e33('0x20')]['getCaller']=function(){return util['format'](_0x6e33('0x21'),this[_0x6e33('0x5')],this['voiceQueue'][_0x6e33('0x22')]>0x0?this['number'][_0x6e33('0x23')](this[_0x6e33('0x4')][_0x6e33('0x22')]):this[_0x6e33('0x24')]);};Action[_0x6e33('0x20')][_0x6e33('0x25')]=function(){return this[_0x6e33('0xa')];};module[_0x6e33('0x26')]=Action;
\ No newline at end of file
index 7e64884..356d2ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3250=['uniqueid','name','number','starttime','responsetime','endtime','format','YYYY-MM-DD\x20HH:mm:ss','ringtime','holdtime','answertime','membername','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','util','lodash','moment','milliseconds','seconds','state','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal'];(function(_0x4de877,_0x340170){var _0xb2cfeb=function(_0x488634){while(--_0x488634){_0x4de877['push'](_0x4de877['shift']());}};_0xb2cfeb(++_0x340170);}(_0x3250,0x188));var _0x0325=function(_0xa1d197,_0x225576){_0xa1d197=_0xa1d197-0x0;var _0x3962f4=_0x3250[_0xa1d197];return _0x3962f4;};'use strict';var util=require(_0x0325('0x0'));var _=require(_0x0325('0x1'));var moment=require(_0x0325('0x2'));function getSeconds(_0xfff430,_0x40a573){var _0x244341=moment(_0xfff430)['milliseconds'](0x0);var _0x4a7534=moment(_0x40a573)[_0x0325('0x3')](0x0);return _0x244341['diff'](_0x4a7534,_0x0325('0x4'));}function AgentComplete(_0x47cac6,_0x2196fb){this[_0x0325('0x5')]=0x4;this['statedesc']='Answer';this[_0x0325('0x6')]=_0x47cac6[_0x0325('0x6')];this[_0x0325('0x7')]=_0x47cac6[_0x0325('0x7')];this[_0x0325('0x8')]=_0x47cac6[_0x0325('0x7')]===_0x0325('0x9')?_0x0325('0xa'):_0x47cac6['type'];this[_0x0325('0xb')]=_0x47cac6['countbusyretry'];this[_0x0325('0xc')]=_0x47cac6[_0x0325('0xc')];this[_0x0325('0xd')]=_0x47cac6[_0x0325('0xd')];this[_0x0325('0xe')]=_0x47cac6[_0x0325('0xb')]+_0x47cac6[_0x0325('0xc')]+_0x47cac6[_0x0325('0xd')];this[_0x0325('0xf')]=_0x2196fb['uniqueid'];this['calleridname']=_0x47cac6[_0x0325('0x10')];this['calleridnum']=_0x47cac6[_0x0325('0x11')];this[_0x0325('0x12')]=_0x47cac6[_0x0325('0x12')];this[_0x0325('0x13')]=_0x47cac6[_0x0325('0x13')];this['answertime']=_0x47cac6['answertime'];this[_0x0325('0x14')]=moment()[_0x0325('0x15')](_0x0325('0x16'));this[_0x0325('0x17')]=getSeconds(_0x47cac6['responsetime'],_0x47cac6[_0x0325('0x12')]);this[_0x0325('0x18')]=getSeconds(_0x47cac6['answertime'],_0x47cac6[_0x0325('0x13')]);this['talktime']=getSeconds(this[_0x0325('0x14')],_0x47cac6[_0x0325('0x19')]);this[_0x0325('0xa')]=_0x2196fb[_0x0325('0xa')];this['membername']=_0x2196fb[_0x0325('0x1a')];this[_0x0325('0x1b')]=_0x2196fb[_0x0325('0x1b')];this[_0x0325('0x1c')]=_0x47cac6[_0x0325('0x1c')];this[_0x0325('0x1d')]=_0x47cac6[_0x0325('0x1d')];this[_0x0325('0x1e')]=_0x47cac6[_0x0325('0x1e')];this[_0x0325('0x1f')]=_0x47cac6[_0x0325('0x1f')];this['ContactId']=_0x47cac6[_0x0325('0x20')];this[_0x0325('0x21')]=_0x47cac6[_0x0325('0x21')];this[_0x0325('0x22')]=_0x47cac6[_0x0325('0x22')];this[_0x0325('0x23')]=_0x47cac6['VoiceQueueId'];this[_0x0325('0x24')]=_0x47cac6[_0x0325('0x24')];}module['exports']=AgentComplete;
\ No newline at end of file
+var _0x0cbd=['Answer','scheduledat','type','queue','countcongestionretry','countnoanswerretry','countbusyretry','uniqueid','calleridname','name','calleridnum','number','starttime','responsetime','answertime','endtime','format','YYYY-MM-DD\x20HH:mm:ss','ringtime','membername','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','moment','milliseconds','diff','seconds','state','statedesc'];(function(_0xc7c532,_0x4323f8){var _0x18cb4a=function(_0x4cb8ae){while(--_0x4cb8ae){_0xc7c532['push'](_0xc7c532['shift']());}};_0x18cb4a(++_0x4323f8);}(_0x0cbd,0xbb));var _0xd0cb=function(_0x22aecd,_0xfe5ad3){_0x22aecd=_0x22aecd-0x0;var _0x1b22be=_0x0cbd[_0x22aecd];return _0x1b22be;};'use strict';var util=require(_0xd0cb('0x0'));var _=require(_0xd0cb('0x1'));var moment=require(_0xd0cb('0x2'));function getSeconds(_0x42bc2c,_0x27e1ad){var _0x5abb99=moment(_0x42bc2c)['milliseconds'](0x0);var _0x423280=moment(_0x27e1ad)[_0xd0cb('0x3')](0x0);return _0x5abb99[_0xd0cb('0x4')](_0x423280,_0xd0cb('0x5'));}function AgentComplete(_0x38a653,_0x1243f2){this[_0xd0cb('0x6')]=0x4;this[_0xd0cb('0x7')]=_0xd0cb('0x8');this[_0xd0cb('0x9')]=_0x38a653[_0xd0cb('0x9')];this[_0xd0cb('0xa')]=_0x38a653[_0xd0cb('0xa')];this['campaigntype']=_0x38a653[_0xd0cb('0xa')]==='outbound'?_0xd0cb('0xb'):_0x38a653[_0xd0cb('0xa')];this['countbusyretry']=_0x38a653['countbusyretry'];this[_0xd0cb('0xc')]=_0x38a653['countcongestionretry'];this[_0xd0cb('0xd')]=_0x38a653[_0xd0cb('0xd')];this['countglobal']=_0x38a653[_0xd0cb('0xe')]+_0x38a653[_0xd0cb('0xc')]+_0x38a653[_0xd0cb('0xd')];this[_0xd0cb('0xf')]=_0x1243f2[_0xd0cb('0xf')];this[_0xd0cb('0x10')]=_0x38a653[_0xd0cb('0x11')];this[_0xd0cb('0x12')]=_0x38a653[_0xd0cb('0x13')];this['starttime']=_0x38a653[_0xd0cb('0x14')];this[_0xd0cb('0x15')]=_0x38a653['responsetime'];this[_0xd0cb('0x16')]=_0x38a653[_0xd0cb('0x16')];this[_0xd0cb('0x17')]=moment()[_0xd0cb('0x18')](_0xd0cb('0x19'));this[_0xd0cb('0x1a')]=getSeconds(_0x38a653[_0xd0cb('0x15')],_0x38a653[_0xd0cb('0x14')]);this['holdtime']=getSeconds(_0x38a653[_0xd0cb('0x16')],_0x38a653['responsetime']);this['talktime']=getSeconds(this[_0xd0cb('0x17')],_0x38a653['answertime']);this[_0xd0cb('0xb')]=_0x1243f2[_0xd0cb('0xb')];this[_0xd0cb('0x1b')]=_0x1243f2[_0xd0cb('0x1b')];this['reason']=_0x1243f2[_0xd0cb('0x1c')];this[_0xd0cb('0x1d')]=_0x38a653[_0xd0cb('0x1d')];this[_0xd0cb('0x1e')]=_0x38a653['callbackuniqueid'];this[_0xd0cb('0x1f')]=_0x38a653[_0xd0cb('0x1f')];this[_0xd0cb('0x20')]=_0x38a653[_0xd0cb('0x20')];this['ContactId']=_0x38a653[_0xd0cb('0x21')];this[_0xd0cb('0x22')]=_0x38a653[_0xd0cb('0x22')];this['UserId']=_0x38a653[_0xd0cb('0x23')];this[_0xd0cb('0x24')]=_0x38a653[_0xd0cb('0x24')];this[_0xd0cb('0x25')]=_0x38a653[_0xd0cb('0x25')];}module[_0xd0cb('0x26')]=AgentComplete;
\ No newline at end of file
index f71bb1f..4822e60 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfd18=['milliseconds','diff','seconds','uniqueid','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','calleridname','calleridnum','starttime','responsetime','ringtime','holdtime','talktime','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','moment'];(function(_0x810e4d,_0x909ef4){var _0x13f01c=function(_0x12fd89){while(--_0x12fd89){_0x810e4d['push'](_0x810e4d['shift']());}};_0x13f01c(++_0x909ef4);}(_0xfd18,0x9d));var _0x8fd1=function(_0xf56b46,_0x4e32e8){_0xf56b46=_0xf56b46-0x0;var _0x583cea=_0xfd18[_0xf56b46];return _0x583cea;};'use strict';var util=require(_0x8fd1('0x0'));var _=require(_0x8fd1('0x1'));var moment=require(_0x8fd1('0x2'));function getSeconds(_0xe4a570,_0xdc955a){var _0x4e4e38=moment(_0xe4a570)[_0x8fd1('0x3')](0x0);var _0x28cd61=moment(_0xdc955a)[_0x8fd1('0x3')](0x0);return _0x4e4e38[_0x8fd1('0x4')](_0x28cd61,_0x8fd1('0x5'));}function Final(_0x5b67a2){this[_0x8fd1('0x6')]=_0x5b67a2[_0x8fd1('0x6')];this[_0x8fd1('0x7')]=_0x5b67a2[_0x8fd1('0x7')];this[_0x8fd1('0x8')]=_0x5b67a2[_0x8fd1('0x8')];this[_0x8fd1('0x9')]=_0x5b67a2[_0x8fd1('0x8')]===_0x8fd1('0xa')?_0x8fd1('0xb'):_0x5b67a2['type'];this[_0x8fd1('0xc')]=_0x5b67a2[_0x8fd1('0xc')];this[_0x8fd1('0xd')]=_0x5b67a2[_0x8fd1('0xd')];this[_0x8fd1('0xe')]=_0x5b67a2['countnoanswerretry'];this['countglobal']=_0x5b67a2[_0x8fd1('0xc')]+_0x5b67a2['countcongestionretry']+_0x5b67a2['countnoanswerretry'];this['queue']=_0x5b67a2['queue'];this[_0x8fd1('0xf')]=_0x5b67a2[_0x8fd1('0xf')];this[_0x8fd1('0x10')]=_0x5b67a2[_0x8fd1('0x10')];this[_0x8fd1('0x11')]=_0x5b67a2[_0x8fd1('0x11')];this[_0x8fd1('0x12')]=_0x5b67a2[_0x8fd1('0x12')];this['endtime']=_0x5b67a2[_0x8fd1('0x12')];this[_0x8fd1('0x13')]=_0x5b67a2[_0x8fd1('0x13')]||0x0;this[_0x8fd1('0x14')]=_0x5b67a2[_0x8fd1('0x14')]||0x0;this[_0x8fd1('0x15')]=_0x5b67a2[_0x8fd1('0x15')]||0x0;this[_0x8fd1('0x16')]=_0x5b67a2['callback'];this[_0x8fd1('0x17')]=_0x5b67a2[_0x8fd1('0x17')];this[_0x8fd1('0x18')]=_0x5b67a2['callbackat'];this[_0x8fd1('0x19')]=_0x5b67a2[_0x8fd1('0x19')];this[_0x8fd1('0x1a')]=_0x5b67a2['ContactId'];this['ListId']=_0x5b67a2[_0x8fd1('0x1b')];this['UserId']=_0x5b67a2[_0x8fd1('0x1c')];this['VoiceQueueId']=_0x5b67a2[_0x8fd1('0x1d')];this['CampaignId']=_0x5b67a2[_0x8fd1('0x1e')];}module[_0x8fd1('0x1f')]=Final;
\ No newline at end of file
+var _0x610e=['responsetime','endtime','ringtime','holdtime','talktime','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','milliseconds','diff','seconds','uniqueid','scheduledat','type','campaigntype','countbusyretry','countcongestionretry','countnoanswerretry','queue','calleridname','calleridnum','starttime'];(function(_0x31e723,_0x1b0c41){var _0x38552e=function(_0x36ec9a){while(--_0x36ec9a){_0x31e723['push'](_0x31e723['shift']());}};_0x38552e(++_0x1b0c41);}(_0x610e,0xaa));var _0xe610=function(_0x2f14bb,_0x9500f3){_0x2f14bb=_0x2f14bb-0x0;var _0x468a7e=_0x610e[_0x2f14bb];return _0x468a7e;};'use strict';var util=require(_0xe610('0x0'));var _=require(_0xe610('0x1'));var moment=require('moment');function getSeconds(_0x19b17d,_0x27d6ee){var _0x2a3bde=moment(_0x19b17d)[_0xe610('0x2')](0x0);var _0x34846c=moment(_0x27d6ee)[_0xe610('0x2')](0x0);return _0x2a3bde[_0xe610('0x3')](_0x34846c,_0xe610('0x4'));}function Final(_0x536224){this[_0xe610('0x5')]=_0x536224[_0xe610('0x5')];this[_0xe610('0x6')]=_0x536224[_0xe610('0x6')];this['type']=_0x536224[_0xe610('0x7')];this[_0xe610('0x8')]=_0x536224[_0xe610('0x7')]==='outbound'?'queue':_0x536224[_0xe610('0x7')];this['countbusyretry']=_0x536224[_0xe610('0x9')];this[_0xe610('0xa')]=_0x536224[_0xe610('0xa')];this[_0xe610('0xb')]=_0x536224[_0xe610('0xb')];this['countglobal']=_0x536224[_0xe610('0x9')]+_0x536224[_0xe610('0xa')]+_0x536224[_0xe610('0xb')];this[_0xe610('0xc')]=_0x536224[_0xe610('0xc')];this[_0xe610('0xd')]=_0x536224[_0xe610('0xd')];this[_0xe610('0xe')]=_0x536224['calleridnum'];this[_0xe610('0xf')]=_0x536224[_0xe610('0xf')];this[_0xe610('0x10')]=_0x536224[_0xe610('0x10')];this[_0xe610('0x11')]=_0x536224[_0xe610('0x10')];this[_0xe610('0x12')]=_0x536224[_0xe610('0x12')]||0x0;this[_0xe610('0x13')]=_0x536224[_0xe610('0x13')]||0x0;this[_0xe610('0x14')]=_0x536224['talktime']||0x0;this[_0xe610('0x15')]=_0x536224[_0xe610('0x15')];this[_0xe610('0x16')]=_0x536224[_0xe610('0x16')];this[_0xe610('0x17')]=_0x536224['callbackat'];this[_0xe610('0x18')]=_0x536224['recallme'];this['ContactId']=_0x536224[_0xe610('0x19')];this['ListId']=_0x536224[_0xe610('0x1a')];this[_0xe610('0x1b')]=_0x536224[_0xe610('0x1b')];this[_0xe610('0x1c')]=_0x536224[_0xe610('0x1c')];this['CampaignId']=_0x536224[_0xe610('0x1d')];}module[_0xe610('0x1e')]=Final;
\ No newline at end of file
index a44fa4b..321b695 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['countglobal','countcongestionretry','countnoanswerretry','uniqueid','name','calleridnum','number','starttime','responsetime','endtime','YYYY-MM-DD\x20HH:mm:ss','talktime','membername','IVR','reason','cause-txt','callback','callbackuniqueid','callbackat','recallme','ContactId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','moment','milliseconds','diff','seconds','state','statedesc','Answer','type','outbound','queue','countbusyretry'];(function(_0x27b3df,_0x34a01a){var _0x275390=function(_0x46e282){while(--_0x46e282){_0x27b3df['push'](_0x27b3df['shift']());}};_0x275390(++_0x34a01a);}(_0xa9e0,0x123));var _0x0a9e=function(_0x47a7d0,_0x4e182d){_0x47a7d0=_0x47a7d0-0x0;var _0xb9bd08=_0xa9e0[_0x47a7d0];return _0xb9bd08;};'use strict';var util=require(_0x0a9e('0x0'));var _=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));function getSeconds(_0x5dd881,_0x550fbc){var _0x18d5c9=moment(_0x5dd881)['milliseconds'](0x0);var _0x333808=moment(_0x550fbc)[_0x0a9e('0x3')](0x0);return _0x18d5c9[_0x0a9e('0x4')](_0x333808,_0x0a9e('0x5'));}function Hangup(_0x981158,_0x57b080){this[_0x0a9e('0x6')]=0x4;this[_0x0a9e('0x7')]=_0x0a9e('0x8');this['scheduledat']=_0x981158['scheduledat'];this[_0x0a9e('0x9')]=_0x981158['type'];this['campaigntype']=_0x981158[_0x0a9e('0x9')]===_0x0a9e('0xa')?_0x0a9e('0xb'):_0x981158[_0x0a9e('0x9')];this[_0x0a9e('0xc')]=_0x981158[_0x0a9e('0xc')];this['countcongestionretry']=_0x981158['countcongestionretry'];this['countnoanswerretry']=_0x981158['countnoanswerretry'];this[_0x0a9e('0xd')]=_0x981158[_0x0a9e('0xc')]+_0x981158[_0x0a9e('0xe')]+_0x981158[_0x0a9e('0xf')];this[_0x0a9e('0x10')]=_0x57b080[_0x0a9e('0x10')];this['calleridname']=_0x981158[_0x0a9e('0x11')];this[_0x0a9e('0x12')]=_0x981158[_0x0a9e('0x13')];this[_0x0a9e('0x14')]=_0x981158[_0x0a9e('0x14')];this[_0x0a9e('0x15')]=_0x981158['responsetime'];this[_0x0a9e('0x16')]=moment()['format'](_0x0a9e('0x17'));this['ringtime']=getSeconds(_0x981158[_0x0a9e('0x15')],_0x981158[_0x0a9e('0x14')]);this['holdtime']=0x0;this[_0x0a9e('0x18')]=getSeconds(this['endtime'],_0x981158[_0x0a9e('0x15')]);this[_0x0a9e('0xb')]=_0x981158[_0x0a9e('0xb')];this[_0x0a9e('0x19')]=_0x0a9e('0x1a');this[_0x0a9e('0x1b')]=_0x57b080[_0x0a9e('0x1c')];this[_0x0a9e('0x1d')]=_0x981158[_0x0a9e('0x1d')];this[_0x0a9e('0x1e')]=_0x981158[_0x0a9e('0x1e')];this[_0x0a9e('0x1f')]=_0x981158['callbackat'];this[_0x0a9e('0x20')]=_0x981158[_0x0a9e('0x20')];this['ContactId']=_0x981158[_0x0a9e('0x21')];this['ListId']=_0x981158['ListId'];this[_0x0a9e('0x22')]=_0x981158[_0x0a9e('0x22')];this[_0x0a9e('0x23')]=_0x981158[_0x0a9e('0x23')];this['CampaignId']=_0x981158[_0x0a9e('0x24')];}module[_0x0a9e('0x25')]=Hangup;
\ No newline at end of file
+var _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(_0xbf4691,_0x5bd6f1){var _0x43089a=function(_0x43ca86){while(--_0x43ca86){_0xbf4691['push'](_0xbf4691['shift']());}};_0x43089a(++_0x5bd6f1);}(_0x9957,0x93));var _0x7995=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x9957[_0x4cf98e];return _0x1623ac;};'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 e09252a..cfe824d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde3a=['util','lodash','milliseconds','diff','seconds','uniqueid','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','calleridname','name','number','starttime','responsetime','ringtime','holdtime','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','exports'];(function(_0x3bce4a,_0x1bb7e3){var _0x13cec7=function(_0xef906d){while(--_0xef906d){_0x3bce4a['push'](_0x3bce4a['shift']());}};_0x13cec7(++_0x1bb7e3);}(_0xde3a,0x140));var _0xade3=function(_0xc1f21,_0x35889d){_0xc1f21=_0xc1f21-0x0;var _0x6f7bd7=_0xde3a[_0xc1f21];return _0x6f7bd7;};'use strict';var util=require(_0xade3('0x0'));var _=require(_0xade3('0x1'));var moment=require('moment');function getSeconds(_0x5c69c4,_0x5a7855){var _0x435129=moment(_0x5c69c4)[_0xade3('0x2')](0x0);var _0x103750=moment(_0x5a7855)[_0xade3('0x2')](0x0);return _0x435129[_0xade3('0x3')](_0x103750,_0xade3('0x4'));}function History(_0x387872){this[_0xade3('0x5')]=_0x387872[_0xade3('0x5')];this['scheduledat']=_0x387872[_0xade3('0x6')]||undefined;this[_0xade3('0x7')]=_0x387872[_0xade3('0x7')];this[_0xade3('0x8')]=_0x387872[_0xade3('0x7')]===_0xade3('0x9')?_0xade3('0xa'):_0x387872['type'];this[_0xade3('0xb')]=_0x387872[_0xade3('0xb')];this[_0xade3('0xc')]=_0x387872[_0xade3('0xc')];this[_0xade3('0xd')]=_0x387872['countnoanswerretry'];this[_0xade3('0xe')]=_0x387872[_0xade3('0xb')]+_0x387872[_0xade3('0xc')]+_0x387872[_0xade3('0xd')];this[_0xade3('0xa')]=_0x387872[_0xade3('0xa')];this[_0xade3('0xf')]=_0x387872[_0xade3('0x10')];this['calleridnum']=_0x387872[_0xade3('0x11')];this['starttime']=_0x387872[_0xade3('0x12')];this[_0xade3('0x13')]=_0x387872[_0xade3('0x13')];this['endtime']=_0x387872['responsetime'];this[_0xade3('0x14')]=getSeconds(_0x387872[_0xade3('0x13')],_0x387872['starttime']);this[_0xade3('0x15')]=0x0;this['talktime']=0x0;this[_0xade3('0x16')]=_0x387872[_0xade3('0x16')];this['callbackuniqueid']=_0x387872[_0xade3('0x17')];this[_0xade3('0x18')]=_0x387872['callbackat'];this[_0xade3('0x19')]=_0x387872['recallme'];this['ContactId']=_0x387872[_0xade3('0x1a')];this[_0xade3('0x1b')]=_0x387872[_0xade3('0x1b')];this[_0xade3('0x1c')]=_0x387872[_0xade3('0x1c')];this[_0xade3('0x1d')]=_0x387872['VoiceQueueId'];this[_0xade3('0x1e')]=_0x387872[_0xade3('0x1e')];}module[_0xade3('0x1f')]=History;
\ No newline at end of file
+var _0x794b=['calleridnum','number','starttime','responsetime','endtime','ringtime','holdtime','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','util','lodash','milliseconds','uniqueid','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','calleridname','name'];(function(_0x30b048,_0x219e04){var _0x37e5b7=function(_0xa7196c){while(--_0xa7196c){_0x30b048['push'](_0x30b048['shift']());}};_0x37e5b7(++_0x219e04);}(_0x794b,0x1c2));var _0xb794=function(_0xa5ac86,_0x2abc17){_0xa5ac86=_0xa5ac86-0x0;var _0xd53a75=_0x794b[_0xa5ac86];return _0xd53a75;};'use strict';var util=require(_0xb794('0x0'));var _=require(_0xb794('0x1'));var moment=require('moment');function getSeconds(_0x1d254f,_0x134335){var _0x501220=moment(_0x1d254f)['milliseconds'](0x0);var _0xf9af2a=moment(_0x134335)[_0xb794('0x2')](0x0);return _0x501220['diff'](_0xf9af2a,'seconds');}function History(_0x323f52){this[_0xb794('0x3')]=_0x323f52[_0xb794('0x3')];this[_0xb794('0x4')]=_0x323f52[_0xb794('0x4')]||undefined;this[_0xb794('0x5')]=_0x323f52['type'];this[_0xb794('0x6')]=_0x323f52[_0xb794('0x5')]===_0xb794('0x7')?_0xb794('0x8'):_0x323f52[_0xb794('0x5')];this[_0xb794('0x9')]=_0x323f52[_0xb794('0x9')];this[_0xb794('0xa')]=_0x323f52[_0xb794('0xa')];this[_0xb794('0xb')]=_0x323f52[_0xb794('0xb')];this[_0xb794('0xc')]=_0x323f52[_0xb794('0x9')]+_0x323f52[_0xb794('0xa')]+_0x323f52[_0xb794('0xb')];this[_0xb794('0x8')]=_0x323f52[_0xb794('0x8')];this[_0xb794('0xd')]=_0x323f52[_0xb794('0xe')];this[_0xb794('0xf')]=_0x323f52[_0xb794('0x10')];this['starttime']=_0x323f52[_0xb794('0x11')];this[_0xb794('0x12')]=_0x323f52[_0xb794('0x12')];this[_0xb794('0x13')]=_0x323f52[_0xb794('0x12')];this[_0xb794('0x14')]=getSeconds(_0x323f52['responsetime'],_0x323f52[_0xb794('0x11')]);this[_0xb794('0x15')]=0x0;this['talktime']=0x0;this[_0xb794('0x16')]=_0x323f52[_0xb794('0x16')];this['callbackuniqueid']=_0x323f52[_0xb794('0x17')];this[_0xb794('0x18')]=_0x323f52[_0xb794('0x18')];this['recallme']=_0x323f52[_0xb794('0x19')];this[_0xb794('0x1a')]=_0x323f52['ContactId'];this[_0xb794('0x1b')]=_0x323f52[_0xb794('0x1b')];this[_0xb794('0x1c')]=_0x323f52[_0xb794('0x1c')];this[_0xb794('0x1d')]=_0x323f52['VoiceQueueId'];this[_0xb794('0x1e')]=_0x323f52[_0xb794('0x1e')];}module['exports']=History;
\ No newline at end of file
index fe4a176..d07f7c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1410=['[Dialer][checkChannel][ivr]','countReScheduled','resolve','then','[countReScheduled]\x20','checkIsBlackList','[checkIsBlackList]\x20','checkIsBlackListIvr','[checkIsBlackListIvr]\x20','averageHandleTime','[averageHandleTime]\x20','rescheduleContact','getContactDialer','[getContactDialer]\x20','getContactDialerIvr','getVoiceQueueRtPauses','[getVoiceQueueRtPauses]\x20','moveContactManagedDialer','[moveContactManagedDialer]\x20','createHistory','[createHistory]\x20','[updateOriginated]\x20object\x20originated\x20is\x20negative','[updateOriginated]\x20is\x20null\x20or\x20undefined','emptyContact','saveInDb','pick','ContactId','ListId','[emptyContact]','isSuccess','Success','isTrunkReachable','SIP/%s','status','unmonitored','syncVarSet','uniqueid','variable','amdstatus','exten','xcally-motion-dialer','dialAMDActive','value','HANGUP','state','statedesc','HangupInAMD','membername','AMD','[syncHangupInAMD][createHistory]','MACHINE','outboundAnswerCallsDay','Machine','amd','[syncMachine][createHistory]','[syncMachine]','[syncHangupInAMDIvr][createHistory]','[syncMachineIvr][createHistory]','[syncMachineIvr]','syncHangup','ivrAnswerCallsDay','[syncHangupIvr]','dialQueueProject','AnswerAGI','AGI','cause-txt','Unknow','[syncHangupIvr][createHistory]','dialQueueProject2','dialAgiAfterHangupAgent','[syncAgentComplete]','YYYY-MM-DD\x20HH:mm:ss','queueCallerAbandonCreateState','[syncAgentComplete][createHistory]','[syncQueueCallerAbandon]\x20[Drop]','droptime','dialQueueTimeout','outboundDropCallsDayTimeout','Drop','dropreason','outboundDropCallsDayCallersExit','Abandoned','CALLEREXIT','strategy','actionid','locked','agents','stateinterface','idHopper','[booked][unlockQueueStatus]','syncQueueStatusComplete','run','finally','VoiceQueueId','CampaignId','_rr','paused','unlockRR','[booked][RR]','contactAgent-idHopper:\x20','[Catch][Preview][syncQueueStatusComplete]','[booked][RR][finaly]','Agent:\x20','[booked][unlock]','[booked][unlock2]','[unlock2][syncQueueStatusComplete]','[booked][unlock3]','[unlock3][syncQueueStatusComplete]','syncCampaigns','checkIsTrunkReachable','TrunkBackup','TRUNK_IS_NOT_REACHABLE','checkIfTime','ifTime','checkIfTimeIntervals','INTERVAL_IS_EMPTY','Failure','\x20Intervals\x20is\x20empty\x20','timezones','TIMEZONE_UNKNOW','isArray','command','iftime\x20%s,%s','interval','content','indexOf','push','true','all','some','GLOBAL_INTERVAL_IS_OVERTIME','INTERVAL_IS_OVERTIME','Global:\x20','\x20Interval\x20is\x20overtime:\x20','Timezone:\x20','checkDialMethod','dialMethod','progressive','handlePower','power','dialPowerLevel','Queue','launchHandleIvr','handleIvr','dialTimezone','[syncQueueSummary]','dialGlobalInterval','[syncCampaigns]','\x5cw{0,','pow','replace','random','actionOriginate','object','voiceQueue\x20is\x20undefine','Contact','phone','originate','contact\x20is\x20undefine','getCaller','\x22agi://%s/square,%s\x22','NONE','\x22%s,%s%s,,,%s\x22','XMD-AMDINITIALSILENCE','dialAMDInitialSilence','dialAMDGreeting','XMD-AMDAFTERGREETINGSILENCE','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','XMD-AMDBETWEENWORDSSILENCE','dialAMDBetweenWordsSilence','XMD-AMDMAXIMUMNUMBEROFWORDS','XMD-AMDSILENCETHRESHOLD','XMD-AMDMAXIMUMWORDLENGTH','XMD-VOICEQUEUEID','tags','%s%s','XMD-','toUpper','SIP/%s/%s%s','trim','substring','dialCutDigit','dialRandomLastDigitCallerIdNumber','from-sip','[originateError]:\x20%s','[originate][error]','originate\x20action\x20Error','responsetime','getQueue','response','callProgressDetecting','[callProgressDetecting]\x20','checkRetriveMax','countbusyretry','countnoanswerretry','dialGlobalMaxRetry','dialNoAnswerMaxRetry','add','minutes','dialBusyMaxRetry','dialBusyRetryFrequency','[rescheduleContact]\x20[Busy]','countcongestionretry','dialCongestionMaxRetry','dialCongestionRetryFrequency','[rescheduleContact]\x20[Congestion]','[callProgressDetecting]','evt\x20is\x20undefine','reason','NoSuchNumber','[syncAgentComplete][createHistory][0]','reason\x200\x20no\x20such\x20number....','createStateFinal','NoAnswer','countglobal','reason\x203\x20ringing\x20no\x20answer','stateGlobal','Busy','[syncAgentComplete][createHistory][5]','reason\x205\x20busy','Congestion','reason\x208\x20congestion','[syncAgentComplete][createHistory][?]','Global','[moveContactManagedDialer][0]','dialPredictiveOptimizationPercentage','loggedIn','waiting','floor','erlangCalls','erlangAbandonmentRate','[startMethodPredictive][StartProgressive][First]','[startMethodPredictive][StartProgressive]','check\x20predictive\x20is\x20not\x20undefine','check\x20handlePredictive\x20is\x20not\x20undefine','[startMethodPredictive][StartProgressive][Date]','[startMethodPredictive][StartProgressive][Loop]','[stopMethodPredictive][ReStartProgressive][ExceededDropDay]','[stopMethodPredictive][ReStartProgressive][LowerLimitInterval]','Agent\x20free','[stopMethodPredictive][ReStartProgressive][ExceededDropInterval]','Max\x20Drop\x20','[startMethodPredictive][StartPredictive][First]','dialPredictiveInterval','startMethodPredictive','[averageHandleTime][ErlangB]\x20','getDataPredictive','dialPredictiveOptimization','dropRate','outboundQueuePauses','[CatchErlangB]','agentBusyFactor','check\x20failure','erlangCallToSecond','[startMethodPredictive]','[handlePredictive]','[startMethodPredictive][milliseconds]\x20','Failure\x20','queueStatusComplete','Queue:\x20','[unlockOriginate][syncQueueStatusComplete]','[booked][checkContactBlack][else]','dialRecallMeTimeout','dialRecallInQueue','[rescheduleContact][dialRecallInQueue]','RecallInQueue','[Originate][HistoryDialRecallInQueue][historyCatch]','BLACKLIST','[Originate][historyBlacklist]','[Originate][MoveBlacklist]','inBlackList','limitCalls','temp','dialOrderByScheduledAt','[getContactCampaign2][Empty]','RUNNING','ivrTotalCallsDays','[actionOriginate]\x20','Contact.phone','loggerHandler','dialLimitQueue','not_inuse','reachable','ACTIVE','checkContactBlack','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','[abandonmentRate]','p\x20=\x20','interval\x20=\x20','Amax\x20=\x20','busyFactor','[busyFactor]','\x20Umin\x20=\x20','util','lodash','bluebird','uuid','md5','dialer','booked','../../../config/logger','predictive','predictiveCalls','syncQueueSummary','../../../config/environment/','../ami','localhost','../rpc/cmHopper','../rpc/cmHopperFinal','../rpc/cmHopperHistory','../rpc/cmHopperBlack','../rpc/voiceQueueRt','./action','./history','./agentComplete','./queueCallerAbandon','./hangup','env','rrmemory','roundrobin','enqueue','tail','sequence','preview','voiceQueues','campaigns','trunks','maxNumberOriginate','channels','actions','contactsId','optionPredictive','startPredictive','ivrOriginated','queueBooked','queueBookedRR','agentconnect','syncAgentConnect','bind','syncQueueCallerAbandon','originateresponse','syncOriginateResponse','agentcomplete','syncAgentComplete','custom:queuesummary','hangup','newexten','syncNewExten','varset','queuemember','syncQueueMember','queuestatuscomplete','loopCampaigns','loopClearZombieChannels','isUndefined','message','AGENTS_NOT_LOGGED','name','\x20AGENTS\x20NOT\x20LOGGED','\x20NOT\x20Active','Interval','INTERVAL_IS_NULL','\x20INTERVAL_IS_NULL','Intervals','isEmpty','[ifTime][Action]','Error','milliseconds','diff','emit','type','outbound','answered','available','pTalking','sumBillable','sumDuration','sumHoldTime','talking','total','unmanaged','loggedInDb','dialActive','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundBlacklistCallsDay','outboundCongestionCallsDay','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalLowerLimit','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','originated','Trunk','active','callerid','stringify','format','voice:queue:%s','ivr','campaign:ivr:%s','campaign:save','predictiveIntervalTotalCalls','predictiveIntervalAvgTalktime','info','[checkGetDataPredictive][avgTalktime]','[checkGetDataPredictive][avgHoldtime]','[checkGetDataPredictive][totalCalls]','[checkGetDataPredictive][obj]','[ErlangB]','merge','seconds','startProgressive','[freeVariablesPredictive]','handlePredictive','string','\x22%s\x22\x20<%s>','error','inspect','length','hasOwnProperty','[decremetOriginate]\x20object\x20originated\x20is\x20negative','[decremetOriginate]\x20is\x20null\x20or\x20undefined','contactsRescheduled','RESCHEDULED_CONTACTS','[getContactDialer2][ReScheduled]','contacts','AVAILABLE_CONTACTS_FINISHED','[getContactDialer2][Empty]','sendMessageOneNotActive','[syncQueueSummary]\x20Campaign\x20Queue:\x20','IS_DISACTIVED','[syncQueueSummary]\x20Campaign\x20Ivr:\x20','is\x20not\x20active','is\x20disactive','endtime','starttime','prototype','clearZombieChannels','uniqueId','[uniqueid]','[actions]','isNil','Action','channel','catch','updateOriginated','queue','[Dialer][checkChannel]'];(function(_0x5783f4,_0x4a9e0a){var _0x28e380=function(_0x1ffc49){while(--_0x1ffc49){_0x5783f4['push'](_0x5783f4['shift']());}};_0x28e380(++_0x4a9e0a);}(_0x1410,0x130));var _0x0141=function(_0x15ada7,_0x1f3a57){_0x15ada7=_0x15ada7-0x0;var _0x26eef8=_0x1410[_0x15ada7];return _0x26eef8;};'use strict';var util=require(_0x0141('0x0'));var _=require(_0x0141('0x1'));var BPromise=require(_0x0141('0x2'));var uuid=require(_0x0141('0x3'));var moment=require('moment');var rr=require('rr');var md5=require(_0x0141('0x4'));var logger=require('../../../config/logger')(_0x0141('0x5'));var loggerBooked=require('../../../config/logger')(_0x0141('0x6'));var loggerPredictive=require(_0x0141('0x7'))(_0x0141('0x8'));var loggerPredictiveCalls=require(_0x0141('0x7'))(_0x0141('0x9'));var loggerSyncQueueSummary=require(_0x0141('0x7'))(_0x0141('0xa'));var config=require(_0x0141('0xb'));var ami=require(_0x0141('0xc'));var io=require('socket.io-emitter')({'host':_0x0141('0xd'),'port':0x18eb});var cmHopper=require(_0x0141('0xe'));var cmHopperFinal=require(_0x0141('0xf'));var cmHopperHistory=require(_0x0141('0x10'));var cmHopperBlack=require(_0x0141('0x11'));var voiceQueueRt=require(_0x0141('0x12'));var Action=require(_0x0141('0x13'));var History=require(_0x0141('0x14'));var Final=require('./final');var AgentComplete=require(_0x0141('0x15'));var QueueCallerAbandon=require(_0x0141('0x16'));var Hangup=require(_0x0141('0x17'));var ipAgi=process[_0x0141('0x18')]['XCALLY_IP_AGI']||'127.0.0.1';var strategy={'rrmemory':_0x0141('0x19'),'roundrobin':_0x0141('0x1a')};var Sequence=function(){};Sequence['prototype'][_0x0141('0x1b')]=function(_0x5d8795){this[_0x0141('0x1c')]=this[_0x0141('0x1c')]?this[_0x0141('0x1c')]['finally'](_0x5d8795):_0x5d8795();};function Dialer(_0x12f234,_0x5edd9f){this[_0x0141('0x1d')]=new Sequence();this[_0x0141('0x1e')]=_0x5edd9f;this[_0x0141('0x1f')]=_0x12f234[_0x0141('0x1f')];this[_0x0141('0x20')]=_0x12f234[_0x0141('0x20')];this['agents']=_0x12f234['agents'];this[_0x0141('0x21')]=_0x12f234[_0x0141('0x21')];this['maxNumberOriginate']=config[_0x0141('0x22')]||0x2;this[_0x0141('0x23')]={};this[_0x0141('0x24')]={};this[_0x0141('0x25')]={};this['uniqueId']={};this[_0x0141('0x26')]={};this[_0x0141('0x27')]={};this['startProgressive']={};this[_0x0141('0x28')]={};this[_0x0141('0x29')]={};this[_0x0141('0x2a')]={};ami['on'](_0x0141('0x2b'),this[_0x0141('0x2c')][_0x0141('0x2d')](this));ami['on']('queuecallerabandon',this[_0x0141('0x2e')][_0x0141('0x2d')](this));ami['on'](_0x0141('0x2f'),this[_0x0141('0x30')][_0x0141('0x2d')](this));ami['on'](_0x0141('0x31'),this[_0x0141('0x32')][_0x0141('0x2d')](this));ami['on'](_0x0141('0x33'),this[_0x0141('0xa')][_0x0141('0x2d')](this));ami['on'](_0x0141('0x34'),this['syncHangup'][_0x0141('0x2d')](this));ami['on'](_0x0141('0x35'),this[_0x0141('0x36')][_0x0141('0x2d')](this));ami['on'](_0x0141('0x37'),this['syncVarSet'][_0x0141('0x2d')](this));ami['on'](_0x0141('0x38'),this[_0x0141('0x39')]['bind'](this));ami['on'](_0x0141('0x3a'),this['syncQueueStatusComplete'][_0x0141('0x2d')](this));this[_0x0141('0x3b')]();this[_0x0141('0x3c')]();}function isNotNull(_0x378a87){return _0x378a87!==null&&!_[_0x0141('0x3d')](_0x378a87);}function checkIsLoggedIn(_0x29f463,_0x146daf){return function(){if(_0x146daf<=0x0){_0x29f463[_0x0141('0x3e')]=_0x0141('0x3f');throw _0x29f463[_0x0141('0x40')]+_0x0141('0x41');}};}function isActive(_0x36c409){return _0x36c409;}function checkIsActive(_0x19f25f,_0x48e025){return function(){if(!isActive(_0x48e025)){_0x19f25f[_0x0141('0x3e')]='NOT_ACTIVE';throw _0x19f25f[_0x0141('0x40')]+_0x0141('0x42');}};}function checkInterval(_0x481866){return function(){if(!isNotNull(_0x481866[_0x0141('0x43')])){_0x481866[_0x0141('0x3e')]=_0x0141('0x44');throw _0x481866['name']+_0x0141('0x45');}if(!isNotNull(_0x481866['Interval'][_0x0141('0x46')])){_0x481866[_0x0141('0x3e')]=_0x0141('0x44');throw _0x481866['name']+_0x0141('0x45');}if(!isNotNull(_[_0x0141('0x47')](_0x481866['Interval'][_0x0141('0x46')]))){_0x481866[_0x0141('0x3e')]=_0x0141('0x44');throw _0x481866[_0x0141('0x40')]+_0x0141('0x45');}};}function msgResponse(_0x4794f0,_0x192683,_0x40dfa1){return{'action':_0x4794f0,'response':_0x192683,'message':_0x40dfa1};}function myreject(_0x4245fb){return function(_0x286b9c){return _0x4245fb(msgResponse(_0x0141('0x48'),_0x0141('0x49'),JSON['stringify'](_0x286b9c)));};}function getSeconds(_0x52437d,_0x12ad43){var _0x2988a0=moment(_0x52437d)['milliseconds'](0x0);var _0xcb5460=moment(_0x12ad43)[_0x0141('0x4a')](0x0);return _0x2988a0[_0x0141('0x4b')](_0xcb5460,'seconds');}function emit(_0x5efb3f,_0x513799,_0x3f1d75){io['to'](_0x5efb3f)[_0x0141('0x4c')](_0x513799,_0x3f1d75);}function emitVoiceQueueSummary(_0x45dfb3){if(_0x45dfb3[_0x0141('0x4d')]===_0x0141('0x4e')){var _0x42852a={'id':_0x45dfb3['id'],'name':_0x45dfb3[_0x0141('0x40')],'strategy':_0x45dfb3['strategy'],'answered':_0x45dfb3[_0x0141('0x4f')],'available':_0x45dfb3[_0x0141('0x50')],'loggedIn':_0x45dfb3['loggedIn'],'pTalking':_0x45dfb3[_0x0141('0x51')],'sumBillable':_0x45dfb3[_0x0141('0x52')],'sumDuration':_0x45dfb3[_0x0141('0x53')],'sumHoldTime':_0x45dfb3[_0x0141('0x54')],'talking':_0x45dfb3[_0x0141('0x55')],'total':_0x45dfb3[_0x0141('0x56')],'type':_0x45dfb3[_0x0141('0x4d')],'unmanaged':_0x45dfb3[_0x0141('0x57')],'waiting':_0x45dfb3['waiting'],'loggedInDb':_0x45dfb3[_0x0141('0x58')],'dialActive':_0x45dfb3[_0x0141('0x59')],'dialMethod':_0x45dfb3['dialMethod'],'dialOriginateCallerIdName':_0x45dfb3[_0x0141('0x5a')],'dialOriginateCallerIdNumber':_0x45dfb3[_0x0141('0x5b')],'dialOriginateTimeout':_0x45dfb3[_0x0141('0x5c')],'dialPrefix':_0x45dfb3[_0x0141('0x5d')],'outboundAnswerAgiCallsDay':_0x45dfb3[_0x0141('0x5e')],'outboundAnswerCallsDay':_0x45dfb3['outboundAnswerCallsDay'],'outboundBlacklistCallsDay':_0x45dfb3[_0x0141('0x5f')],'outboundBusyCallsDay':_0x45dfb3['outboundBusyCallsDay'],'outboundCongestionCallsDay':_0x45dfb3[_0x0141('0x60')],'outboundDropCallsDayACS':_0x45dfb3['outboundDropCallsDayACS'],'outboundDropCallsDayCallersExit':_0x45dfb3['outboundDropCallsDayCallersExit'],'outboundDropCallsDayTimeout':_0x45dfb3['outboundDropCallsDayTimeout'],'outboundNoAnswerCallsDay':_0x45dfb3[_0x0141('0x61')],'outboundNoSuchCallsDay':_0x45dfb3[_0x0141('0x62')],'outboundOriginateFailureCallsDay':_0x45dfb3[_0x0141('0x63')],'outboundReCallsDay':_0x45dfb3['outboundReCallsDay'],'outboundRejectCallsDay':_0x45dfb3[_0x0141('0x64')],'outboundUnknownCallsDay':_0x45dfb3[_0x0141('0x65')],'predictiveIntervalAnsweredCalls':_0x45dfb3[_0x0141('0x66')],'predictiveIntervalAvgHoldtime':_0x45dfb3[_0x0141('0x67')],'predictiveIntervalAvgTalktime':_0x45dfb3['predictiveIntervalAvgTalktime'],'predictiveIntervalDroppedCallsCallersExit':_0x45dfb3[_0x0141('0x68')],'predictiveIntervalDroppedCallsTimeout':_0x45dfb3[_0x0141('0x69')],'predictiveIntervalErlangCalls':_0x45dfb3[_0x0141('0x6a')],'predictiveIntervalErlangCallsDroppedCalls':_0x45dfb3[_0x0141('0x6b')],'predictiveIntervalHitRate':_0x45dfb3[_0x0141('0x6c')],'predictiveIntervalLowerLimit':_0x45dfb3[_0x0141('0x6d')],'predictiveIntervalMultiplicativeFactor':_0x45dfb3[_0x0141('0x6e')],'predictiveIntervalPauses':_0x45dfb3[_0x0141('0x6f')],'predictiveIntervalTotalCalls':_0x45dfb3['predictiveIntervalTotalCalls'],'message':_0x45dfb3[_0x0141('0x3e')],'originated':_0x45dfb3[_0x0141('0x70')]};if(_0x45dfb3[_0x0141('0x71')]){_0x42852a['Trunk']={'id':_0x45dfb3[_0x0141('0x71')]['id'],'name':_0x45dfb3[_0x0141('0x71')][_0x0141('0x40')],'active':_0x45dfb3['Trunk'][_0x0141('0x72')],'callerid':_0x45dfb3['Trunk'][_0x0141('0x73')]};}if(_0x45dfb3['Interval']){_0x42852a[_0x0141('0x43')]={'id':_0x45dfb3['Interval']['id'],'name':_0x45dfb3[_0x0141('0x43')][_0x0141('0x40')]};}var _0x12943f=md5(JSON[_0x0141('0x74')](_0x42852a));if(_0x45dfb3[_0x0141('0x4')]!==_0x12943f){_0x45dfb3['md5']=_0x12943f;emit(util[_0x0141('0x75')](_0x0141('0x76'),_0x42852a[_0x0141('0x40')]),'voice_queue:save',_0x42852a);}}}function emitCampaignSummary(_0x364dc9){if(_0x364dc9[_0x0141('0x4d')]===_0x0141('0x77')){emit(util['format'](_0x0141('0x78'),_0x364dc9['name']),_0x0141('0x79'),_0x364dc9);}}function checkGetDataPredictive(_0x369d88){if(isNotNull(_0x369d88)){if(!_[_0x0141('0x47')](_0x369d88)){if(_0x369d88[_0x0141('0x7a')]>0x0){if(!_['isUndefined'](_0x369d88[_0x0141('0x7b')])&&_0x369d88[_0x0141('0x7b')]>0x0){return!![];}else{loggerPredictive[_0x0141('0x7c')](_0x0141('0x7d'),JSON[_0x0141('0x74')](_0x369d88));}if(!_[_0x0141('0x3d')](_0x369d88[_0x0141('0x67')])&&_0x369d88['predictiveIntervalAvgHoldtime']>0x0){return!![];}else{loggerPredictive[_0x0141('0x7c')](_0x0141('0x7e'),JSON[_0x0141('0x74')](_0x369d88));}}else{loggerPredictive['info'](_0x0141('0x7f'),JSON[_0x0141('0x74')](_0x369d88));}}else{loggerPredictive[_0x0141('0x7c')]('[checkGetDataPredictive][objIsEmpty]',JSON[_0x0141('0x74')](_0x369d88));}}else{loggerPredictive['info'](_0x0141('0x80'),JSON[_0x0141('0x74')](_0x369d88));}return![];}function mergeDataErlangB(_0xda4915){return function(_0x2a8c85){loggerPredictive[_0x0141('0x7c')](_0x0141('0x81'),JSON[_0x0141('0x74')](_0x2a8c85));_[_0x0141('0x82')](_0xda4915,_0x2a8c85);};}function getDiff(_0x3b125d){var _0x3d245a=moment()[_0x0141('0x4a')](0x0);var _0x53b31f=moment(_0x3b125d)[_0x0141('0x4a')](0x0);return _0x3d245a[_0x0141('0x4b')](_0x53b31f,_0x0141('0x83'));}function ifInterval(_0x2a2b59,_0x4dd0fe){if(_[_0x0141('0x3d')](_0x4dd0fe)){return![];}if(getDiff(_0x4dd0fe)<_0x2a2b59*0x3c){return!![];}else{return![];}}function freeVariablesPredictive(_0x3a7a2e){if(isNotNull(_0x3a7a2e)){if(!_[_0x0141('0x3d')](_0x3a7a2e[_0x0141('0x84')])){_0x3a7a2e[_0x0141('0x84')]=undefined;loggerPredictive[_0x0141('0x7c')]('[freeVariablesPredictive]',_0x0141('0x84'),_0x3a7a2e['name']);}if(!_[_0x0141('0x3d')](_0x3a7a2e[_0x0141('0x27')])){_0x3a7a2e[_0x0141('0x27')]=undefined;loggerPredictive[_0x0141('0x7c')](_0x0141('0x85'),_0x0141('0x27'),_0x3a7a2e[_0x0141('0x40')]);}if(!_['isUndefined'](_0x3a7a2e['handlePredictive'])){clearInterval(_0x3a7a2e[_0x0141('0x86')]);_0x3a7a2e['handlePredictive']=undefined;loggerPredictive['info'](_0x0141('0x85'),_0x0141('0x86'),_0x3a7a2e[_0x0141('0x40')]);}}}function erlangb(_0x3f2324,_0x4473b4){if(_0x4473b4===0x0){return 0x0;}var _0x113a2f=0x1;for(var _0x20d836=0x1;_0x20d836<=_0x4473b4;_0x20d836+=0x1){_0x113a2f=0x1+_0x113a2f*_0x20d836/_0x3f2324;}return 0x1/_0x113a2f;}function isVoiceQueueOutbound(_0x47803e){return _0x47803e===_0x0141('0x4e');}function isNotPreview(_0x1f3a12){return _0x1f3a12!=='preview';}function isCampaignIvr(_0x2ec121){return _0x2ec121===_0x0141('0x77');}function getCallerId(_0x418c0b,_0x19cfb9,_0x3d55f3){if(!_[_0x0141('0x3d')](_0x3d55f3)&&_0x0141('0x87')===typeof _0x3d55f3){if(!_[_0x0141('0x3d')](_0x19cfb9)&&'string'===typeof _0x19cfb9){return util[_0x0141('0x75')](_0x0141('0x88'),_0x19cfb9,_0x3d55f3);}return util[_0x0141('0x75')](_0x0141('0x88'),_0x3d55f3,_0x3d55f3);}if(!_[_0x0141('0x3d')](_0x418c0b)&&'string'===typeof _0x418c0b){return _0x418c0b;}return'\x22\x22\x20<>';}function loggerCatchQueueSummary(_0x3cd93c,_0x3aba2f){return function(_0x2629b9){freeVariablesPredictive(_0x3aba2f);emitVoiceQueueSummary(_0x3aba2f);emitCampaignSummary(_0x3aba2f);loggerSyncQueueSummary[_0x0141('0x89')](_0x3cd93c,util[_0x0141('0x8a')](_0x2629b9,{'showHidden':![],'depth':null}));};}function loggerCatchPredictive(_0x4e0d6e,_0x3ab2ea){return function(_0x13f7d3){loggerPredictive[_0x0141('0x89')](_0x4e0d6e,JSON[_0x0141('0x74')](_0x13f7d3));freeVariablesPredictive(_0x3ab2ea);};}function loggerCatch(_0x2a7557){return function(_0x4ead96){logger['error'](_0x2a7557,util[_0x0141('0x8a')](_0x4ead96,{'showHidden':![],'depth':null}));};}function checkContactEmpty(_0x39b263){return _0x39b263&&!_[_0x0141('0x3d')](_0x39b263)&&_0x39b263[_0x0141('0x8b')]>0x0;}function decremetOriginate(_0x5932b7){if(!_[_0x0141('0x3d')](_0x5932b7)&&_0x5932b7!==null){if(_0x5932b7[_0x0141('0x8c')](_0x0141('0x70'))){if(_0x5932b7[_0x0141('0x70')]>0x0){_0x5932b7[_0x0141('0x70')]-=0x1;}else{logger['error'](_0x0141('0x8d'));}}}else{logger[_0x0141('0x89')](_0x0141('0x8e'));}}function checkContactLowerLimitOriginate(_0x21241e,_0x3cd2ad,_0x523087){if(_0x3cd2ad>_0x523087){for(var _0x49d07e=0x0;_0x49d07e<_0x3cd2ad-_0x523087;_0x49d07e+=0x1){decremetOriginate(_0x21241e);}}}function loggerGetContactDialer(_0x54dfb0,_0x469027,_0x35c5d9){return function(_0x384586){checkContactLowerLimitOriginate(_0x469027,_0x35c5d9,0x0);logger['error'](_0x54dfb0,util[_0x0141('0x8a')](_0x384586,{'showHidden':![],'depth':null}));};}function sendMessageReschedule(_0x253e17){return function(_0x19132e){if(isNotNull(_0x19132e)&&isNotNull(_0x19132e[0x0])){if(_0x19132e[0x0][_0x0141('0x8f')]>0x0){_0x253e17[_0x0141('0x3e')]=_0x0141('0x90');logger['info'](_0x0141('0x91')+_0x253e17[_0x0141('0x40')],_0x19132e[0x0][_0x0141('0x8f')],_0x0141('0x92'));}else{_0x253e17[_0x0141('0x3e')]=_0x0141('0x93');logger[_0x0141('0x7c')](_0x0141('0x94')+_0x253e17['name']);}}};}function notSendMessagesQueue(_0x1e6523){if(_0x1e6523[_0x0141('0x95')]){freeVariablesPredictive(_0x1e6523);if(_0x1e6523[_0x0141('0x70')]===0x0&&_0x1e6523[_0x0141('0x55')]===0x0&&_0x1e6523['waiting']===0x0&&(_0x1e6523['pTalking']||0x0)===0x0){_0x1e6523[_0x0141('0x95')]=![];_0x1e6523['available']=0x0;_0x1e6523[_0x0141('0x3e')]='NOT_ACTIVE';loggerSyncQueueSummary[_0x0141('0x89')](_0x0141('0x96'),_0x1e6523[_0x0141('0x40')],'is\x20not\x20active');}else{_0x1e6523[_0x0141('0x3e')]=_0x0141('0x97');loggerSyncQueueSummary[_0x0141('0x89')]('[syncQueueSummary]\x20Campaign\x20Queue:\x20',_0x1e6523[_0x0141('0x40')],'is\x20disactive');}emitVoiceQueueSummary(_0x1e6523);}}function notSendMessagesCampaign(_0x458e6b){if(_0x458e6b['sendMessageOneNotActive']){if(_0x458e6b[_0x0141('0x70')]===0x0){_0x458e6b['sendMessageOneNotActive']=![];_0x458e6b[_0x0141('0x3e')]='NOT_ACTIVE';loggerSyncQueueSummary[_0x0141('0x89')](_0x0141('0x98'),_0x458e6b['name'],_0x0141('0x99'));}else{_0x458e6b['message']=_0x0141('0x97');loggerSyncQueueSummary[_0x0141('0x89')](_0x0141('0x98'),_0x458e6b[_0x0141('0x40')],_0x0141('0x9a'));}emitCampaignSummary(_0x458e6b);}}function createObjHistory(_0x2b7a84,_0x165116,_0x28c117,_0x53f510,_0x5ada40){_0x2b7a84[_0x0141('0x3e')]=_0x28c117;var _0x22c25c=new Action(_0x2b7a84,_0x165116);var _0x50abfa=new History(_0x22c25c);_0x50abfa['state']=_0x53f510;_0x50abfa['statedesc']=_0x5ada40;_0x50abfa[_0x0141('0x9b')]=_0x22c25c[_0x0141('0x9c')];return _0x50abfa;}Dialer[_0x0141('0x9d')][_0x0141('0x3c')]=function(){var _0x2a9284=this;setInterval(function(){_0x2a9284[_0x0141('0x9e')](_0x2a9284[_0x0141('0x9f')],_0x0141('0xa0'));_0x2a9284[_0x0141('0x9e')](_0x2a9284[_0x0141('0x24')],_0x0141('0xa1'));},0x32c8);};Dialer[_0x0141('0x9d')][_0x0141('0x9e')]=function(_0x3ddb3b,_0x32da1c){var _0x468bf3=this;for(var _0x472ded in _0x3ddb3b){if(_0x3ddb3b[_0x0141('0x8c')](_0x472ded)){this['sequence'][_0x0141('0x1b')](function(){if(!_[_0x0141('0xa2')](_0x3ddb3b[_0x472ded])){return ami[_0x0141('0xa3')]({'action':'status','channel':_0x3ddb3b[_0x472ded][_0x0141('0xa4')]})[_0x0141('0xa5')](function(_0x19a646){if(_0x19a646[_0x0141('0x3e')]==='No\x20such\x20channel'){setTimeout(function(){if(_0x3ddb3b[_0x472ded]&&_0x3ddb3b[_0x472ded]['type']!==_0x0141('0x77')){_0x468bf3[_0x0141('0xa6')](_0x468bf3[_0x0141('0x1f')][_0x3ddb3b[_0x472ded][_0x0141('0xa7')]]);logger['error'](_0x0141('0xa8'),_0x32da1c,_0x472ded,_0x3ddb3b[_0x472ded][_0x0141('0xa7')]);delete _0x3ddb3b[_0x472ded];}if(_0x3ddb3b[_0x472ded]&&_0x3ddb3b[_0x472ded][_0x0141('0x4d')]==='ivr'){_0x468bf3[_0x0141('0xa6')](_0x468bf3[_0x0141('0x20')][_0x3ddb3b[_0x472ded][_0x0141('0xa7')]]);logger['error'](_0x0141('0xa9'),_0x32da1c,_0x472ded,_0x3ddb3b[_0x472ded][_0x0141('0xa7')]);delete _0x3ddb3b[_0x472ded];}},0x2328);}});}});}}};Dialer[_0x0141('0x9d')][_0x0141('0xaa')]=function(_0x47fc5d){return BPromise[_0x0141('0xab')]()[_0x0141('0xac')](cmHopper[_0x0141('0xaa')](_0x47fc5d))[_0x0141('0xa5')](loggerCatch(_0x0141('0xad')));};Dialer[_0x0141('0x9d')][_0x0141('0xae')]=function(_0x101c32){return BPromise[_0x0141('0xab')]()['then'](cmHopperBlack[_0x0141('0xae')](_0x101c32))[_0x0141('0xa5')](loggerCatch(_0x0141('0xaf')));};Dialer[_0x0141('0x9d')][_0x0141('0xb0')]=function(_0x3d51ac){return BPromise[_0x0141('0xab')]()[_0x0141('0xac')](cmHopperBlack['checkIsBlackListIvr'](_0x3d51ac))[_0x0141('0xa5')](loggerCatch(_0x0141('0xb1')));};Dialer[_0x0141('0x9d')][_0x0141('0xb2')]=function(_0x23a17a){return BPromise[_0x0141('0xab')]()[_0x0141('0xac')](cmHopperHistory['avgHandleTime'](_0x23a17a))[_0x0141('0xa5')](loggerCatch(_0x0141('0xb3')));};Dialer[_0x0141('0x9d')][_0x0141('0xb4')]=function(_0xb6e9da){return BPromise[_0x0141('0xab')]()[_0x0141('0xac')](cmHopper['rescheduleContact'](_0xb6e9da))['catch'](loggerCatch('[rescheduleContact]\x20'));};Dialer['prototype'][_0x0141('0xb5')]=function(_0x21b1b5,_0x4706a1,_0x185f6f,_0x4fe4b9){return BPromise[_0x0141('0xab')]()['then'](cmHopper[_0x0141('0xb5')](_0x21b1b5,_0x4706a1,_0x185f6f,_0x4fe4b9))['catch'](loggerCatch(_0x0141('0xb6')));};Dialer[_0x0141('0x9d')][_0x0141('0xb7')]=function(_0x579684,_0x539510,_0x33d5db){return BPromise[_0x0141('0xab')]()['then'](cmHopper[_0x0141('0xb7')](_0x579684,_0x539510,_0x33d5db))[_0x0141('0xa5')](loggerCatch(_0x0141('0xb6')));};Dialer[_0x0141('0x9d')][_0x0141('0xb8')]=function(_0x1f20b8){return BPromise[_0x0141('0xab')]()['then'](voiceQueueRt[_0x0141('0xb8')](_0x1f20b8))[_0x0141('0xa5')](loggerCatch(_0x0141('0xb9')));};Dialer[_0x0141('0x9d')][_0x0141('0xba')]=function(_0x3749b6){return BPromise['resolve']()[_0x0141('0xac')](cmHopper[_0x0141('0xba')](_0x3749b6))[_0x0141('0xa5')](loggerCatch(_0x0141('0xbb')));};Dialer['prototype'][_0x0141('0xbc')]=function(_0x4cc6c2){return BPromise[_0x0141('0xab')]()[_0x0141('0xac')](cmHopperHistory['createHistory'](_0x4cc6c2))[_0x0141('0xa5')](loggerCatch(_0x0141('0xbd')));};Dialer[_0x0141('0x9d')][_0x0141('0xa6')]=function(_0xd65d46){if(!_[_0x0141('0x3d')](_0xd65d46)&&_0xd65d46!==null){if(_0xd65d46['hasOwnProperty']('originated')){if(_0xd65d46[_0x0141('0x70')]>0x0){_0xd65d46['originated']-=0x1;}else{logger[_0x0141('0x89')](_0x0141('0xbe'));}}}else{logger['error'](_0x0141('0xbf'));}};Dialer[_0x0141('0x9d')]['loggerHandler']=function(_0x131b67,_0x5558d4){var _0x2449c1=this;return function(_0x149326){_0x2449c1[_0x0141('0xa6')](_0x5558d4);logger[_0x0141('0x89')](_0x131b67,util[_0x0141('0x8a')](_0x149326,{'showHidden':![],'depth':null}));};};Dialer['prototype'][_0x0141('0xc0')]=function(_0x389f05,_0x3f19c9,_0x2ae8d1){var _0x152ed3={'state':0x19,'statedesc':'notFound'};this[_0x0141('0xa6')](_0x3f19c9);this[_0x0141('0xc1')](_[_0x0141('0x82')](_0x152ed3,_[_0x0141('0xc2')](_0x2ae8d1,[_0x0141('0xc3'),_0x0141('0xc4'),'UserId','VoiceQueueId','CampaignId'])),'[emptyContact][createHistory]',_0x0141('0xc5'));logger[_0x0141('0x89')](_0x389f05);};Dialer[_0x0141('0x9d')][_0x0141('0xc6')]=function(_0x4e4ac5){return _0x4e4ac5===_0x0141('0xc7');};Dialer[_0x0141('0x9d')][_0x0141('0xc8')]=function(_0x4dea54){return!_[_0x0141('0x3d')](_0x4dea54)&&_0x4dea54&&!_[_0x0141('0x3d')](_0x4dea54[_0x0141('0x40')])&&!_[_0x0141('0x3d')](_0x4dea54['active'])&&_0x4dea54['active']&&(this[_0x0141('0x21')][util[_0x0141('0x75')](_0x0141('0xc9'),_0x4dea54['name'])]['status']==='reachable'||this[_0x0141('0x21')][util[_0x0141('0x75')]('SIP/%s',_0x4dea54['name'])][_0x0141('0xca')]===_0x0141('0xcb'));};Dialer[_0x0141('0x9d')][_0x0141('0xc1')]=function(_0x5ed8ef,_0x5d68c4,_0x51e8fd){this['createHistory'](_0x5ed8ef)[_0x0141('0xa5')](loggerCatch(_0x5d68c4));this[_0x0141('0xba')](_0x5ed8ef)[_0x0141('0xa5')](loggerCatch(_0x51e8fd));};Dialer[_0x0141('0x9d')][_0x0141('0xcc')]=function(_0x3fcb8f){var _0x4d26eb=this[_0x0141('0x9f')][_0x3fcb8f[_0x0141('0xcd')]];var _0x5aa051;if(!_[_0x0141('0xa2')](_0x3fcb8f)&&!_[_0x0141('0xa2')](_0x3fcb8f[_0x0141('0xce')])&&!_[_0x0141('0xa2')](_0x3fcb8f[_0x0141('0xce')][_0x0141('0xcf')])&&_0x3fcb8f[_0x0141('0xd0')]===_0x0141('0xd1')&&_0x4d26eb){if(_0x4d26eb[_0x0141('0x4d')]!=='ivr'&&this['voiceQueues'][_0x4d26eb['queue']][_0x0141('0xd2')]&&_0x3fcb8f[_0x0141('0xd3')]===_0x0141('0xd4')){delete this[_0x0141('0x9f')][_0x3fcb8f[_0x0141('0xcd')]];this[_0x0141('0xa6')](this['voiceQueues'][_0x4d26eb[_0x0141('0xa7')]]);this[_0x0141('0x1f')][_0x4d26eb[_0x0141('0xa7')]]['outboundAnswerCallsDay']+=0x1;this[_0x0141('0x1f')][_0x4d26eb['queue']][_0x0141('0x5e')]+=0x1;_0x5aa051=new Hangup(_0x4d26eb,_0x3fcb8f);_0x5aa051[_0x0141('0xd5')]=0x12;_0x5aa051[_0x0141('0xd6')]=_0x0141('0xd7');_0x5aa051[_0x0141('0xd8')]=_0x0141('0xd9');this[_0x0141('0xc1')](_0x5aa051,_0x0141('0xda'),'[syncHangupInAMD]');}if(_0x4d26eb[_0x0141('0x4d')]!==_0x0141('0x77')&&this[_0x0141('0x1f')][_0x4d26eb[_0x0141('0xa7')]][_0x0141('0xd2')]&&_0x3fcb8f['value']===_0x0141('0xdb')){delete this['uniqueId'][_0x3fcb8f['uniqueid']];this[_0x0141('0xa6')](this[_0x0141('0x1f')][_0x4d26eb[_0x0141('0xa7')]]);this[_0x0141('0x1f')][_0x4d26eb[_0x0141('0xa7')]][_0x0141('0xdc')]+=0x1;this[_0x0141('0x1f')][_0x4d26eb[_0x0141('0xa7')]]['outboundAnswerAgiCallsDay']+=0x1;_0x5aa051=new Hangup(_0x4d26eb,_0x3fcb8f);_0x5aa051[_0x0141('0xd5')]=0x13;_0x5aa051[_0x0141('0xd6')]=_0x0141('0xdd');_0x5aa051[_0x0141('0xd8')]='AMD';_0x5aa051[_0x0141('0xde')]=!![];this['saveInDb'](_0x5aa051,_0x0141('0xdf'),_0x0141('0xe0'));}if(_0x4d26eb[_0x0141('0x4d')]==='ivr'&&this[_0x0141('0x20')][_0x4d26eb[_0x0141('0xa7')]]['dialAMDActive']&&_0x3fcb8f[_0x0141('0xd3')]==='HANGUP'){delete this['uniqueId'][_0x3fcb8f[_0x0141('0xcd')]];this['updateOriginated'](this[_0x0141('0x20')][_0x4d26eb[_0x0141('0xa7')]]);_0x5aa051=new Hangup(_0x4d26eb,_0x3fcb8f);_0x5aa051[_0x0141('0xd5')]=0x12;_0x5aa051[_0x0141('0xd6')]=_0x0141('0xd7');_0x5aa051[_0x0141('0xd8')]=_0x0141('0xd9');this[_0x0141('0xc1')](_0x5aa051,_0x0141('0xe1'),'[syncHangupInAMDIvr]');}if(_0x4d26eb[_0x0141('0x4d')]===_0x0141('0x77')&&this[_0x0141('0x20')][_0x4d26eb[_0x0141('0xa7')]][_0x0141('0xd2')]&&_0x3fcb8f['value']===_0x0141('0xdb')){delete this[_0x0141('0x9f')][_0x3fcb8f['uniqueid']];this[_0x0141('0xa6')](this['campaigns'][_0x4d26eb[_0x0141('0xa7')]]);_0x5aa051=new Hangup(_0x4d26eb,_0x3fcb8f);_0x5aa051['state']=0x13;_0x5aa051['statedesc']=_0x0141('0xdd');_0x5aa051[_0x0141('0xd8')]=_0x0141('0xd9');_0x5aa051[_0x0141('0xde')]=!![];this[_0x0141('0xc1')](_0x5aa051,_0x0141('0xe2'),_0x0141('0xe3'));}}};Dialer['prototype'][_0x0141('0xe4')]=function(_0x4416b1){var _0x3e611c=this[_0x0141('0x9f')][_0x4416b1[_0x0141('0xcd')]];var _0x2a6778=this;var _0x2e3e00;if(_0x3e611c&&_0x3e611c[_0x0141('0x4d')]==='ivr'){delete this[_0x0141('0x9f')][_0x4416b1[_0x0141('0xcd')]];this[_0x0141('0xa6')](this[_0x0141('0x20')][_0x3e611c[_0x0141('0xa7')]]);this[_0x0141('0x20')][_0x3e611c['queue']][_0x0141('0xe5')]+=0x1;_0x2e3e00=new Hangup(_0x3e611c,_0x4416b1);this[_0x0141('0xbc')](_0x2e3e00)['catch'](loggerCatch('[syncHangupIvr][createHistory]'));this['moveContactManagedDialer'](_0x2e3e00)['catch'](loggerCatch(_0x0141('0xe6')));}if(_0x3e611c&&_0x3e611c[_0x0141('0x4d')]!==_0x0141('0x77')&&isNotNull(this[_0x0141('0x1f')][_0x3e611c[_0x0141('0xa7')]][_0x0141('0xe7')])){delete this[_0x0141('0x9f')][_0x4416b1[_0x0141('0xcd')]];this[_0x0141('0xa6')](this['voiceQueues'][_0x3e611c[_0x0141('0xa7')]]);this['voiceQueues'][_0x3e611c[_0x0141('0xa7')]][_0x0141('0xdc')]+=0x1;this[_0x0141('0x1f')][_0x3e611c[_0x0141('0xa7')]][_0x0141('0x5e')]+=0x1;_0x2e3e00=new Hangup(_0x3e611c,_0x4416b1);_0x2e3e00[_0x0141('0xd5')]=0x10;_0x2e3e00[_0x0141('0xd6')]=_0x0141('0xe8');_0x2e3e00['membername']=_0x0141('0xe9');this[_0x0141('0xbc')](_0x2e3e00)[_0x0141('0xa5')](loggerCatch('[syncHangupIvr][createHistory]'));this[_0x0141('0xba')](_0x2e3e00)[_0x0141('0xa5')](loggerCatch(_0x0141('0xe6')));}if(_0x3e611c&&_0x3e611c[_0x0141('0x4d')]!==_0x0141('0x77')&&!isNotNull(this['voiceQueues'][_0x3e611c[_0x0141('0xa7')]][_0x0141('0xe7')])){delete this[_0x0141('0x9f')][_0x4416b1[_0x0141('0xcd')]];this[_0x0141('0xa6')](this[_0x0141('0x1f')][_0x3e611c['queue']]);this[_0x0141('0x1f')][_0x3e611c[_0x0141('0xa7')]][_0x0141('0x65')]+=0x1;_0x2e3e00=new Hangup(_0x3e611c,_0x4416b1);_0x2e3e00[_0x0141('0xd5')]=0xc;_0x2e3e00[_0x0141('0xd6')]=_0x4416b1[_0x0141('0xea')];_0x2e3e00[_0x0141('0xd8')]=_0x0141('0xeb');this[_0x0141('0xbc')](_0x2e3e00)['catch'](loggerCatch(_0x0141('0xec')));this[_0x0141('0xba')](_0x2e3e00)[_0x0141('0xa5')](loggerCatch(_0x0141('0xe6')));}};Dialer[_0x0141('0x9d')][_0x0141('0x32')]=function(_0xe08ff3){var _0x372514=this[_0x0141('0x9f')][_0xe08ff3[_0x0141('0xcd')]];var _0x509dfe=this;if(this[_0x0141('0x1f')][_0xe08ff3[_0x0141('0xa7')]]){if(_0x372514&&_0x372514[_0x0141('0x4d')]!==_0x0141('0x77')){delete this[_0x0141('0x9f')][_0xe08ff3['uniqueid']];this['voiceQueues'][_0xe08ff3[_0x0141('0xa7')]][_0x0141('0xdc')]+=0x1;var _0x55d594=new AgentComplete(_0x372514,_0xe08ff3);if(_0xe08ff3['reason']==='agent'){_0x55d594['agiafterat']=this[_0x0141('0x1f')][_0xe08ff3[_0x0141('0xa7')]][_0x0141('0xed')]&&this[_0x0141('0x1f')][_0xe08ff3[_0x0141('0xa7')]][_0x0141('0xee')]?moment()['format']('YYYY-MM-DD\x20HH:mm:ss'):undefined;}this[_0x0141('0xbc')](_0x55d594)['catch'](loggerCatch('[syncAgentComplete][createHistory]'));this[_0x0141('0xba')](_0x55d594)[_0x0141('0xa5')](loggerCatch(_0x0141('0xef')));}}};Dialer[_0x0141('0x9d')][_0x0141('0x2c')]=function(_0x2456ab){if(this['voiceQueues'][_0x2456ab[_0x0141('0xa7')]]){if(this[_0x0141('0x9f')][_0x2456ab[_0x0141('0xcd')]]&&this['uniqueId'][_0x2456ab[_0x0141('0xcd')]][_0x0141('0x4d')]!==_0x0141('0x77')){this[_0x0141('0xa6')](this['voiceQueues'][_0x2456ab['queue']]);this['uniqueId'][_0x2456ab['uniqueid']]['answertime']=moment()[_0x0141('0x75')](_0x0141('0xf0'));}}};Dialer[_0x0141('0x9d')][_0x0141('0xf1')]=function(_0x10100e){this[_0x0141('0xbc')](_0x10100e)[_0x0141('0xa5')](loggerCatch(_0x0141('0xf2')));this['moveContactManagedDialer'](_0x10100e)[_0x0141('0xa5')](loggerCatch(_0x0141('0xf3')));};Dialer['prototype']['syncQueueCallerAbandon']=function(_0x432ae0){var _0xd350ce=this[_0x0141('0x9f')][_0x432ae0[_0x0141('0xcd')]];var _0x9d37a8=this;if(this[_0x0141('0x1f')][_0x432ae0[_0x0141('0xa7')]]){if(_0xd350ce&&_0xd350ce[_0x0141('0x4d')]!=='ivr'){delete this[_0x0141('0x9f')][_0x432ae0[_0x0141('0xcd')]];this['updateOriginated'](this[_0x0141('0x1f')][_0x432ae0['queue']]);_0xd350ce['droptime']=moment()[_0x0141('0x75')](_0x0141('0xf0'));var _0x2c1135=new QueueCallerAbandon(_0xd350ce,_0x432ae0);if(getSeconds(_0xd350ce[_0x0141('0xf4')],_0xd350ce['responsetime'])>=_0xd350ce[_0x0141('0xf5')]){this[_0x0141('0x1f')][_0x432ae0[_0x0141('0xa7')]][_0x0141('0x69')]+=0x1;this['voiceQueues'][_0x432ae0['queue']][_0x0141('0xf6')]+=0x1;this[_0x0141('0x1f')][_0x432ae0[_0x0141('0xa7')]][_0x0141('0x6b')]+=0x1;_0x2c1135['state']=0xa;_0x2c1135['statedesc']=_0x0141('0xf7');_0x2c1135[_0x0141('0xf8')]='TIMEOUT';_0x2c1135['agiafterat']=this[_0x0141('0x1f')][_0x432ae0[_0x0141('0xa7')]][_0x0141('0xed')]?moment()[_0x0141('0x75')]('YYYY-MM-DD\x20HH:mm:ss'):undefined;this[_0x0141('0xf1')](_0x2c1135);}else{this['voiceQueues'][_0x432ae0['queue']]['predictiveIntervalDroppedCallsCallersExit']+=0x1;this[_0x0141('0x1f')][_0x432ae0['queue']][_0x0141('0xf9')]+=0x1;_0x2c1135['state']=0xb;_0x2c1135[_0x0141('0xd6')]=_0x0141('0xfa');_0x2c1135[_0x0141('0xf8')]=_0x0141('0xfb');this[_0x0141('0xf1')](_0x2c1135);}}}};Dialer[_0x0141('0x9d')][_0x0141('0x36')]=function(_0x5586a4){if(this[_0x0141('0x24')][_0x5586a4[_0x0141('0xcd')]]){this['actions'][_0x5586a4[_0x0141('0xcd')]][_0x0141('0xa4')]=_0x5586a4['channel'];}if(this[_0x0141('0x9f')][_0x5586a4[_0x0141('0xcd')]]){this[_0x0141('0x9f')][_0x5586a4[_0x0141('0xcd')]][_0x0141('0xa4')]=_0x5586a4[_0x0141('0xa4')];}};Dialer[_0x0141('0x9d')][_0x0141('0x39')]=function(_0x39e739){if(strategy[this['voiceQueues'][this['actions'][_0x39e739['actionid']][_0x0141('0xa7')]][_0x0141('0xfc')]]===_0x0141('0x1a')){if(this[_0x0141('0x24')][_0x39e739[_0x0141('0xfd')]]&&_[_0x0141('0xa2')](this[_0x0141('0x24')][_0x39e739[_0x0141('0xfd')]][_0x0141('0xfe')])&&_0x39e739[_0x0141('0xca')]==='1'&&_0x39e739['paused']==='0'){if(this[_0x0141('0xff')][_0x39e739[_0x0141('0x100')]]){if(!this[_0x0141('0xff')][_0x39e739[_0x0141('0x100')]][_0x0141('0xfe')]){this[_0x0141('0xff')][_0x39e739[_0x0141('0x100')]][_0x0141('0xfe')]=!![];this[_0x0141('0x24')][_0x39e739[_0x0141('0xfd')]][_0x0141('0xfe')]=!![];this[_0x0141('0x24')][_0x39e739[_0x0141('0xfd')]][_0x0141('0x100')]=_0x39e739['stateinterface'];}}}}else if((strategy[this['voiceQueues'][this['actions'][_0x39e739[_0x0141('0xfd')]][_0x0141('0xa7')]][_0x0141('0xfc')]]||_0x0141('0x19'))===_0x0141('0x19')){if(this[_0x0141('0x24')][_0x39e739[_0x0141('0xfd')]]){if(this['agents'][_0x39e739[_0x0141('0x100')]]){this[_0x0141('0x24')][_0x39e739[_0x0141('0xfd')]]['stateinterface']=_0x39e739[_0x0141('0x100')];if(_[_0x0141('0xa2')](this[_0x0141('0x29')][this[_0x0141('0x24')][_0x39e739[_0x0141('0xfd')]][_0x0141('0xa7')]])){this[_0x0141('0x29')][this[_0x0141('0x24')][_0x39e739[_0x0141('0xfd')]][_0x0141('0xa7')]]=[];}this[_0x0141('0x29')][this[_0x0141('0x24')][_0x39e739[_0x0141('0xfd')]][_0x0141('0xa7')]]['push'](_[_0x0141('0x82')](_[_0x0141('0xc2')](this[_0x0141('0x24')][_0x39e739[_0x0141('0xfd')]],[_0x0141('0x101'),_0x0141('0x100')]),{'status':_0x39e739[_0x0141('0xca')],'paused':_0x39e739['paused']}));}}}};function unlockQueueStatus(_0x2f62a9,_0x39216f){setTimeout(function(){if(_[_0x0141('0x3d')](_0x2f62a9['queueStatusComplete'])){loggerBooked[_0x0141('0x89')]('[unlockQueueStatus][undefined]',_0x39216f);}_0x2f62a9['queueStatusComplete']=!![];loggerBooked[_0x0141('0x7c')](_0x0141('0x102'),_0x39216f,JSON[_0x0141('0x74')](_['pick'](_0x2f62a9,[_0x0141('0x40'),'queueStatusComplete'])));},0x1f3);}Dialer[_0x0141('0x9d')][_0x0141('0x103')]=function(_0x4c268f){var _0x519d07=this;var _0x5e3b50=_0x519d07[_0x0141('0x1f')][_0x519d07[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xa7')]];if(strategy[this[_0x0141('0x1f')][this[_0x0141('0x24')][_0x4c268f['actionid']][_0x0141('0xa7')]][_0x0141('0xfc')]]===_0x0141('0x1a')){if(this[_0x0141('0x24')][_0x4c268f['actionid']]&&this['actions'][_0x4c268f[_0x0141('0xfd')]][_0x0141('0x100')]){this[_0x0141('0x1e')][_0x0141('0x104')](this[_0x0141('0x24')][_0x4c268f['actionid']]['idHopper'],this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0x100')])[_0x0141('0xa5')](function(_0x54c2e3){logger[_0x0141('0x89')]('[Catch][Preview][syncQueueStatusComplete]',util[_0x0141('0x8a')](_0x54c2e3,{'showHidden':![],'depth':null}));})[_0x0141('0x105')](function(){_0x519d07['updateOriginated'](_0x519d07[_0x0141('0x1f')][_0x519d07[_0x0141('0x24')][_0x4c268f['actionid']][_0x0141('0xa7')]]);_0x519d07['agents'][_0x519d07[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0x100')]]['locked']=![];delete _0x519d07[_0x0141('0x24')][_0x4c268f['actionid']];unlockQueueStatus(_0x5e3b50);});}else{this[_0x0141('0xa6')](this['voiceQueues'][this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xa7')]]);this[_0x0141('0xb4')]({'active':![],'ContactId':this['actions'][_0x4c268f[_0x0141('0xfd')]]['ContactId'],'ListId':this['actions'][_0x4c268f['actionid']]['ListId'],'VoiceQueueId':this[_0x0141('0x24')][_0x4c268f['actionid']][_0x0141('0x106')]||undefined,'CampaignId':this['actions'][_0x4c268f[_0x0141('0xfd')]][_0x0141('0x107')]||undefined})['catch'](loggerCatch('[unlock][syncQueueStatusComplete]'));delete this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]];unlockQueueStatus(_0x5e3b50);}}else if((strategy[this[_0x0141('0x1f')][this[_0x0141('0x24')][_0x4c268f['actionid']][_0x0141('0xa7')]][_0x0141('0xfc')]]||'rrmemory')===_0x0141('0x19')){var _0x547221;if(this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]]&&!_[_0x0141('0x47')](this[_0x0141('0x29')][this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]]['queue']])){if(this[_0x0141('0x2a')][_0x519d07[_0x0141('0x24')][_0x4c268f['actionid']][_0x0141('0xa7')]]){this['queueBookedRR'][_0x519d07['actions'][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xa7')]]=this['queueBookedRR'][this[_0x0141('0x24')][_0x4c268f['actionid']][_0x0141('0xa7')]]?this[_0x0141('0x2a')][this[_0x0141('0x24')][_0x4c268f['actionid']][_0x0141('0xa7')]]:this[_0x0141('0x29')][this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]]['queue']]?this[_0x0141('0x29')][this[_0x0141('0x24')][_0x4c268f['actionid']]['queue']][_0x0141('0x108')]||0x0:0x0;}this['queueBooked'][this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]]['queue']][_0x0141('0x108')]=this[_0x0141('0x2a')][this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xa7')]];for(var _0xe1b5b4=0x0;_0xe1b5b4<this[_0x0141('0x29')][this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]]['queue']][_0x0141('0x8b')];_0xe1b5b4+=0x1){_0x547221=rr(this['queueBooked'][this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xa7')]]);this['queueBookedRR'][_0x519d07[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xa7')]]=this[_0x0141('0x29')][this[_0x0141('0x24')][_0x4c268f['actionid']][_0x0141('0xa7')]][_0x0141('0x108')];if(_0x547221[_0x0141('0xca')]==='1'&&_0x547221[_0x0141('0x109')]==='0'){break;}}if(!_['isNil'](_0x547221)){this[_0x0141('0xff')][_0x547221[_0x0141('0x100')]][_0x0141('0x10a')]=_[_0x0141('0x3d')](this['agents'][_0x547221['stateinterface']]['unlockRR'])?!![]:this['agents'][_0x547221['stateinterface']][_0x0141('0x10a')];}loggerBooked[_0x0141('0x7c')](_0x0141('0x10b'),_0x4c268f[_0x0141('0xfd')],'Agent:\x20',JSON['stringify'](_[_0x0141('0xc2')](this[_0x0141('0xff')][_0x547221['stateinterface']],[_0x0141('0x40'),_0x0141('0x10a')])),_0x0141('0x10c'),JSON[_0x0141('0x74')](_0x547221[_0x0141('0x101')]));if(!_[_0x0141('0xa2')](_0x547221)&&_0x547221['status']==='1'&&_0x547221['paused']==='0'&&this['agents'][_0x547221['stateinterface']][_0x0141('0x10a')]){this[_0x0141('0xff')][_0x547221[_0x0141('0x100')]][_0x0141('0x10a')]=![];this['queueBooked'][_0x519d07[_0x0141('0x24')][_0x4c268f['actionid']][_0x0141('0xa7')]]=[];this[_0x0141('0x1e')][_0x0141('0x104')](_0x547221[_0x0141('0x101')],_0x547221[_0x0141('0x100')])[_0x0141('0xa5')](function(_0x274e2c){logger['error'](_0x0141('0x10d'),util['inspect'](_0x274e2c,{'showHidden':![],'depth':null}));})['finally'](function(){_0x519d07[_0x0141('0xa6')](_0x519d07['voiceQueues'][_0x519d07['actions'][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xa7')]]);setTimeout(function(){_0x519d07[_0x0141('0xff')][_0x547221['stateinterface']][_0x0141('0x10a')]=!![];loggerBooked[_0x0141('0x7c')](_0x0141('0x10e'),_0x4c268f[_0x0141('0xfd')],_0x0141('0x10f'),JSON[_0x0141('0x74')](_[_0x0141('0xc2')](_0x519d07[_0x0141('0xff')][_0x547221[_0x0141('0x100')]],['name',_0x0141('0x10a')])),'contactAgent-idHopper:\x20',JSON[_0x0141('0x74')](_0x547221['idHopper']));},0xc7);delete _0x519d07['actions'][_0x4c268f[_0x0141('0xfd')]];unlockQueueStatus(_0x5e3b50,_0x4c268f[_0x0141('0xfd')]);});}else{loggerBooked[_0x0141('0x7c')](_0x0141('0x110'));this['updateOriginated'](this[_0x0141('0x1f')][this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]]['queue']]);this[_0x0141('0xb4')]({'active':![],'ContactId':this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xc3')],'ListId':this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xc4')],'VoiceQueueId':this['actions'][_0x4c268f[_0x0141('0xfd')]][_0x0141('0x106')]||undefined,'CampaignId':this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0x107')]||undefined})['catch'](loggerCatch('[unlock][syncQueueStatusComplete]'));delete this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]];unlockQueueStatus(_0x5e3b50);}}else{loggerBooked['info'](_0x0141('0x111'));this['updateOriginated'](this[_0x0141('0x1f')][this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xa7')]]);this[_0x0141('0xb4')]({'active':![],'ContactId':this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xc3')],'ListId':this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xc4')],'VoiceQueueId':this[_0x0141('0x24')][_0x4c268f['actionid']][_0x0141('0x106')]||undefined,'CampaignId':this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0x107')]||undefined})[_0x0141('0xa5')](loggerCatch(_0x0141('0x112')));delete this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]];unlockQueueStatus(_0x5e3b50);}}else{loggerBooked[_0x0141('0x7c')](_0x0141('0x113'));this[_0x0141('0xa6')](this[_0x0141('0x1f')][this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xa7')]]);this['rescheduleContact']({'active':![],'ContactId':this['actions'][_0x4c268f[_0x0141('0xfd')]]['ContactId'],'ListId':this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0xc4')],'VoiceQueueId':this['actions'][_0x4c268f[_0x0141('0xfd')]][_0x0141('0x106')]||undefined,'CampaignId':this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]][_0x0141('0x107')]||undefined})[_0x0141('0xa5')](loggerCatch(_0x0141('0x114')));delete this[_0x0141('0x24')][_0x4c268f[_0x0141('0xfd')]];unlockQueueStatus(_0x5e3b50);}};Dialer[_0x0141('0x9d')][_0x0141('0x3b')]=function(){var _0x57c0d3=this;setInterval(function(){_0x57c0d3[_0x0141('0x115')]();},0x3e8);};Dialer[_0x0141('0x9d')][_0x0141('0x116')]=function(_0x43e863){var _0x4f2ff4=this;return function(){if(!_0x4f2ff4[_0x0141('0xc8')](_0x43e863[_0x0141('0x71')])){if(!_0x4f2ff4[_0x0141('0xc8')](_0x43e863[_0x0141('0x117')])){_0x43e863[_0x0141('0x3e')]=_0x0141('0x118');throw _0x43e863['name']+'\x20trunk\x20is\x20not\x20reachable';}}};};Dialer[_0x0141('0x9d')][_0x0141('0x119')]=function(_0x561937,_0xa83efe,_0x334a6e,_0x27f40a){var _0x592dcb=this;return function(){var _0x59f0ce=!![];return _0x592dcb[_0x0141('0x11a')](_0x561937,_0xa83efe,_0x334a6e,_0x27f40a,_0x59f0ce);};};Dialer[_0x0141('0x9d')][_0x0141('0x11b')]=function(_0x5c06fd,_0x3dff15,_0x3b5b1c,_0xf9ac71){var _0xd7f87d=this;return function(){var _0x5babc7=![];return _0xd7f87d[_0x0141('0x11a')](_0x5c06fd[_0x0141('0x46')],_0x3dff15,_0x3b5b1c,_0xf9ac71,_0x5babc7);};};Dialer[_0x0141('0x9d')][_0x0141('0x11a')]=function(_0x2242a5,_0x2eca0d,_0x42e5b4,_0x12ce59,_0x1a6896){var _0x5a7c55=[];return new BPromise(function(_0x450f64,_0x2763b4){if(!isNotNull(_0x2242a5)){_0x12ce59[_0x0141('0x3e')]=_0x0141('0x44');return _0x2763b4(msgResponse('ifTime','Failure',_0x42e5b4+'\x20Intervals\x20is\x20null\x20'));}if(_['isEmpty'](_0x2242a5)){_0x12ce59['message']=_0x0141('0x11c');return _0x2763b4(msgResponse(_0x0141('0x11a'),_0x0141('0x11d'),_0x42e5b4+_0x0141('0x11e')));}if(_0x2eca0d&&_['isUndefined'](config[_0x0141('0x11f')][_0x2eca0d])){_0x12ce59[_0x0141('0x3e')]=_0x0141('0x120');return _0x2763b4(msgResponse(_0x0141('0x11a'),_0x0141('0x11d'),_0x42e5b4+'\x20Timezone\x20unknow\x20'+_0x2eca0d));}if(_[_0x0141('0x121')](_0x2242a5)){for(var _0x48f8c2=0x0;_0x48f8c2<_0x2242a5[_0x0141('0x8b')];_0x48f8c2+=0x1){_0x5a7c55['push'](ami[_0x0141('0xa3')]({'action':_0x0141('0x122'),'command':util[_0x0141('0x75')](_0x0141('0x123'),_0x2242a5[_0x48f8c2][_0x0141('0x124')],!_[_0x0141('0x3d')](config[_0x0141('0x11f')][_0x2eca0d])?_0x2eca0d:'')})[_0x0141('0xac')](function(_0x1ae7d9){return _0x1ae7d9[_0x0141('0x125')][_0x0141('0x126')]('true')>=0x0?!![]:![];})[_0x0141('0xa5')](myreject(_0x2763b4)));}}else{_0x5a7c55[_0x0141('0x127')](ami[_0x0141('0xa3')]({'action':_0x0141('0x122'),'command':util[_0x0141('0x75')](_0x0141('0x123'),_0x2242a5,!_[_0x0141('0x3d')](config[_0x0141('0x11f')][_0x2eca0d])?_0x2eca0d:'')})['then'](function(_0x581600){return _0x581600[_0x0141('0x125')][_0x0141('0x126')](_0x0141('0x128'))>=0x0?!![]:![];})[_0x0141('0xa5')](myreject(_0x2763b4)));}BPromise[_0x0141('0x129')](_0x5a7c55)[_0x0141('0xac')](function(_0x16a851){var _0x3c9258=_[_0x0141('0x12a')](_0x16a851);if(_0x3c9258){return _0x450f64(_0x3c9258);}else{_0x12ce59[_0x0141('0x3e')]=_0x1a6896?_0x0141('0x12b'):_0x0141('0x12c');return _0x2763b4(msgResponse('[ifTime][promiseAll]','Failure',_0x0141('0x12d')+_0x1a6896+'\x20'+_0x42e5b4+_0x0141('0x12e')+util[_0x0141('0x8a')](_0x2242a5,{'showHidden':![],'depth':null})+_0x0141('0x12f')+_0x2eca0d));}})[_0x0141('0xa5')](function(_0x5c815d){return _0x2763b4(msgResponse(_0x0141('0x11a'),'Failure',JSON['stringify'](_0x5c815d)));});});};Dialer['prototype'][_0x0141('0x130')]=function(_0x4ab3ff){var _0x27090b=this;return function(){switch(_0x4ab3ff[_0x0141('0x131')]){case _0x0141('0x132'):freeVariablesPredictive(_0x4ab3ff);_0x27090b[_0x0141('0x133')](_0x4ab3ff,0x1);break;case _0x0141('0x134'):freeVariablesPredictive(_0x4ab3ff);_0x27090b[_0x0141('0x133')](_0x4ab3ff,_0x4ab3ff[_0x0141('0x135')]);break;case _0x0141('0x8'):_0x27090b[_0x0141('0x8')](_0x4ab3ff);break;case _0x0141('0x6'):freeVariablesPredictive(_0x4ab3ff);_0x27090b[_0x0141('0x133')](_0x4ab3ff,0x1);break;default:freeVariablesPredictive(_0x4ab3ff);logger[_0x0141('0x89')](_0x0141('0x136'),_0x4ab3ff[_0x0141('0x40')],'method\x20not\x20recognized');}};};Dialer[_0x0141('0x9d')][_0x0141('0x137')]=function(_0x3cf563){var _0x14373f=this;return function(){_0x14373f[_0x0141('0x138')](_0x3cf563);};};Dialer[_0x0141('0x9d')][_0x0141('0xa')]=function(_0x23b8a2){var _0x20c2e3=this;if(isNotPreview(_0x23b8a2[_0x0141('0x131')])){if(isVoiceQueueOutbound(_0x23b8a2[_0x0141('0x4d')])&&isActive(_0x23b8a2[_0x0141('0x59')])){_0x23b8a2[_0x0141('0x95')]=!![];BPromise[_0x0141('0xab')]()[_0x0141('0xac')](checkIsLoggedIn(_0x23b8a2,_0x23b8a2['loggedIn']))[_0x0141('0xac')](checkIsActive(_0x23b8a2,_0x23b8a2['dialActive']))['then'](checkInterval(_0x23b8a2))['then'](_0x20c2e3[_0x0141('0x116')](_0x23b8a2))[_0x0141('0xac')](_0x20c2e3['checkIfTime'](_0x23b8a2['dialGlobalInterval'],_0x23b8a2[_0x0141('0x139')],_0x23b8a2['name'],_0x23b8a2))[_0x0141('0xac')](_0x20c2e3[_0x0141('0x11b')](_0x23b8a2['Interval'],_0x23b8a2[_0x0141('0x139')],_0x23b8a2[_0x0141('0x40')],_0x23b8a2))[_0x0141('0xac')](_0x20c2e3[_0x0141('0x130')](_0x23b8a2))['catch'](loggerCatchQueueSummary(_0x0141('0x13a'),_0x23b8a2));}else{notSendMessagesQueue(_0x23b8a2);}}else{freeVariablesPredictive(_0x23b8a2);}};Dialer[_0x0141('0x9d')][_0x0141('0x115')]=function(){var _0xbc7aa1=this;var _0x4c0d1d;for(var _0x30acaa in this['campaigns']){if(this[_0x0141('0x20')][_0x0141('0x8c')](_0x30acaa)){_0x4c0d1d=this[_0x0141('0x20')][_0x30acaa];if(isCampaignIvr(_0x4c0d1d[_0x0141('0x4d')])&&isActive(_0x4c0d1d[_0x0141('0x72')])){_0x4c0d1d[_0x0141('0x95')]=!![];BPromise[_0x0141('0xab')]()['then'](checkIsActive(_0x4c0d1d,_0x4c0d1d['active']))['then'](checkInterval(_0x4c0d1d))[_0x0141('0xac')](_0xbc7aa1['checkIsTrunkReachable'](_0x4c0d1d))[_0x0141('0xac')](_0xbc7aa1[_0x0141('0x119')](_0x4c0d1d[_0x0141('0x13b')],_0x4c0d1d[_0x0141('0x139')],_0x4c0d1d[_0x0141('0x40')],_0x4c0d1d))[_0x0141('0xac')](_0xbc7aa1[_0x0141('0x11b')](_0x4c0d1d[_0x0141('0x43')],_0x4c0d1d[_0x0141('0x139')],_0x4c0d1d['name'],_0x4c0d1d))['then'](_0xbc7aa1[_0x0141('0x137')](_0x4c0d1d))[_0x0141('0xa5')](loggerCatchQueueSummary(_0x0141('0x13c'),_0x4c0d1d));}else{notSendMessagesCampaign(_0x4c0d1d);}}}};function getCallerIdRandom(_0x32136e,_0x282d6d){var _0x49e524,_0xe96b8c,_0x1e1399;if(_0x282d6d<=0x0){_0x282d6d=0x1;}_0x49e524=new RegExp(_0x0141('0x13d')+_0x282d6d+'}$');_0xe96b8c=Math[_0x0141('0x13e')](0xa,_0x282d6d-0x1);_0x1e1399=Math[_0x0141('0x13e')](0xa,_0x282d6d)-0x1;return util['format']('%s',_[_0x0141('0x13f')](_0x32136e,_0x49e524,_[_0x0141('0x140')](_0xe96b8c,_0x1e1399)));}Dialer[_0x0141('0x9d')][_0x0141('0x141')]=function(_0x19188a,_0xa7062a){var _0x2cf6ed=this;var _0x101aeb=uuid['v4']();this[_0x0141('0x24')][_0x101aeb]=new Action(_0x19188a,_0xa7062a,_0x101aeb);return new BPromise(function(_0x1252a4,_0x44c53f){if(_[_0x0141('0x3d')](_0x19188a)&&_0x0141('0x142')!==typeof _0x19188a){return _0x44c53f(msgResponse('originate',_0x0141('0x11d'),_0x0141('0x143')));}if(_[_0x0141('0x3d')](_0xa7062a[_0x0141('0x144')][_0x0141('0x145')])||_0xa7062a[_0x0141('0x144')][_0x0141('0x145')]===null){return _0x44c53f(msgResponse(_0x0141('0x146'),_0x0141('0x11d'),_0x0141('0x147')));}var _0x13adcb={'XMD-CALLERID':_0x2cf6ed[_0x0141('0x24')][_0x101aeb][_0x0141('0x148')](),'XMD-AGI':_0x19188a[_0x0141('0xe7')]?util['format'](_0x0141('0x149'),ipAgi,_0x19188a['dialQueueProject']):_0x0141('0x14a'),'XMD-AGIAFTER':_0x19188a[_0x0141('0xed')]?util[_0x0141('0x75')](_0x0141('0x149'),ipAgi,_0x19188a[_0x0141('0xed')]):_0x0141('0x14a'),'XMD-QUEUE':_0x19188a[_0x0141('0x4d')]===_0x0141('0x4e')?util[_0x0141('0x75')](_0x0141('0x14b'),_0x19188a[_0x0141('0x40')],_0x19188a['dialQueueOptions']||'',_0x19188a[_0x0141('0xee')]?'c':'',_0x19188a[_0x0141('0xf5')]||0x3):_0x0141('0x14a'),'XMD-CONTACTID':_0xa7062a[_0x0141('0xc3')],'XMD-CDRTYPE':'dialer','CALLERID(all)':_0x2cf6ed[_0x0141('0x24')][_0x101aeb][_0x0141('0x148')](),'XMD-AMD':_0x19188a['dialAMDActive']?'ACTIVE':_0x0141('0x14a')};if(_0x19188a['dialAMDActive']){_0x13adcb[_0x0141('0x14c')]=_0x19188a[_0x0141('0x14d')]||0x9c4;_0x13adcb['XMD-AMDGREETING']=_0x19188a[_0x0141('0x14e')]||0x5dc;_0x13adcb[_0x0141('0x14f')]=_0x19188a[_0x0141('0x150')]||0x320;_0x13adcb['XMD-AMDTOTALANALYSISTIME']=_0x19188a[_0x0141('0x151')]||0x1388;_0x13adcb['XMD-AMDMINWORDLENGTH']=_0x19188a['dialAMDMinWordLength']||0x64;_0x13adcb[_0x0141('0x152')]=_0x19188a[_0x0141('0x153')]||0x32;_0x13adcb[_0x0141('0x154')]=_0x19188a['dialAMDMaximumNumberOfWords']||0x3;_0x13adcb[_0x0141('0x155')]=_0x19188a['dialAMDSilenceThreshold']||0x100;_0x13adcb[_0x0141('0x156')]=_0x19188a['dialAMDMaximumWordLength']||0x1388;}if(_0x19188a['type']===_0x0141('0x4e')){_0x13adcb[_0x0141('0x157')]=_0xa7062a['VoiceQueueId'];}else{_0x13adcb['XMD-CAMPAIGNID']=_0xa7062a['CampaignId'];}for(var _0x5ac00e in _0xa7062a[_0x0141('0x144')]){if(_0xa7062a[_0x0141('0x144')][_0x0141('0x8c')](_0x5ac00e)){if(isNotNull(_0xa7062a[_0x0141('0x144')][_0x5ac00e])&&_0x5ac00e!=='id'&&_0x5ac00e!==_0x0141('0x158')&&_0x5ac00e!=='createdAt'&&_0x5ac00e!=='updatedAt'){_0x13adcb[util[_0x0141('0x75')](_0x0141('0x159'),_0x0141('0x15a'),_[_0x0141('0x15b')](_0x5ac00e))]=_0xa7062a[_0x0141('0x144')][_0x5ac00e];}}}return ami[_0x0141('0xa3')]({'actionid':_0x101aeb,'action':'originate','channel':_0x2cf6ed[_0x0141('0xc8')](_0x19188a[_0x0141('0x71')])?util[_0x0141('0x75')](_0x0141('0x15c'),_0x19188a[_0x0141('0x71')][_0x0141('0x40')],isNotNull(_0x19188a[_0x0141('0x5d')])?_0x19188a[_0x0141('0x5d')][_0x0141('0x15d')]()||'':'',_0x19188a['dialCutDigit']>0x0?_0xa7062a[_0x0141('0x144')][_0x0141('0x145')][_0x0141('0x15e')](_0x19188a['dialCutDigit']):_0xa7062a[_0x0141('0x144')][_0x0141('0x145')]):util['format'](_0x0141('0x15c'),_[_0x0141('0xa2')](_0x19188a[_0x0141('0x117')])?_0x19188a['Trunk'][_0x0141('0x40')]:_0x19188a[_0x0141('0x117')][_0x0141('0x40')],isNotNull(_0x19188a['dialPrefix'])?_0x19188a[_0x0141('0x5d')][_0x0141('0x15d')]()||'':'',_0x19188a[_0x0141('0x15f')]>0x0?_0xa7062a['Contact'][_0x0141('0x145')][_0x0141('0x15e')](_0x19188a[_0x0141('0x15f')]):_0xa7062a[_0x0141('0x144')]['phone']),'callerid':_0x2cf6ed[_0x0141('0xc8')](_0x19188a[_0x0141('0x71')])?getCallerId(_0x19188a[_0x0141('0x71')][_0x0141('0x73')],_0x19188a[_0x0141('0x5a')],_0x19188a['dialRandomLastDigitCallerIdNumber']>0x0?getCallerIdRandom(_0x19188a[_0x0141('0x5b')],_0x19188a[_0x0141('0x160')]):_0x19188a[_0x0141('0x5b')]):getCallerId(_['isNil'](_0x19188a[_0x0141('0x117')])?_0x19188a['Trunk'][_0x0141('0x73')]:_0x19188a['TrunkBackup'][_0x0141('0x73')],_0x19188a[_0x0141('0x5a')],_0x19188a['dialRandomLastDigitCallerIdNumber']>0x0?getCallerIdRandom(_0x19188a[_0x0141('0x5b')],_0x19188a[_0x0141('0x160')]):_0x19188a[_0x0141('0x5b')]),'Exten':_0x0141('0xd1'),'Context':_0x0141('0x161'),'Priority':'1','variable':_0x13adcb,'timeout':(_0x19188a['dialOriginateTimeout']||0x1e)*0x3e8,'async':!![],'channelid':_0x101aeb})[_0x0141('0xac')](function(_0x41b53e){return _0x1252a4(_0x41b53e);})['catch'](function(_0x585182){_0x19188a[_0x0141('0x63')]+=0x1;var _0x25c8c2=new History(_0x2cf6ed[_0x0141('0x24')][_0x101aeb]);logger['error'](util[_0x0141('0x75')](_0x0141('0x162'),JSON[_0x0141('0x74')](_0x585182)));_0x25c8c2[_0x0141('0xd5')]=0xe;_0x25c8c2[_0x0141('0xd6')]='OriginateError';_0x25c8c2[_0x0141('0x9c')]=moment()[_0x0141('0x75')](_0x0141('0xf0'));_0x25c8c2[_0x0141('0x9b')]=_0x25c8c2[_0x0141('0x9c')];_0x2cf6ed[_0x0141('0xbc')](_0x25c8c2)[_0x0141('0xa5')](loggerCatch(_0x0141('0x163')));_0x2cf6ed['moveContactManagedDialer'](_0x25c8c2)[_0x0141('0xa5')](loggerCatch(_0x0141('0x163')))[_0x0141('0x105')](function(){delete _0x2cf6ed[_0x0141('0x24')][_0x101aeb];return _0x44c53f(msgResponse(_0x0141('0x146'),'Error',_0x0141('0x164')));});});});};Dialer[_0x0141('0x9d')][_0x0141('0x30')]=function(_0x13aa37){var _0x18a750=this[_0x0141('0x24')][_0x13aa37[_0x0141('0xfd')]];var _0x10f28f=this;if(_0x18a750){delete this[_0x0141('0x24')][_0x13aa37[_0x0141('0xfd')]];_0x18a750[_0x0141('0x165')]=moment()[_0x0141('0x75')]('YYYY-MM-DD\x20HH:mm:ss');var _0x10e498=_0x18a750[_0x0141('0x4d')]==='ivr'?this['campaigns'][_0x18a750[_0x0141('0xa7')]]:this[_0x0141('0x1f')][_0x18a750[_0x0141('0x166')]()];if(!this[_0x0141('0xc6')](_0x13aa37[_0x0141('0x167')])){this[_0x0141('0xa6')](_0x10e498);return this[_0x0141('0x168')](_0x18a750,_0x10e498,_0x13aa37)['then'](function(_0x2e5c84){})[_0x0141('0xa5')](loggerCatch(_0x0141('0x169')));}else{this[_0x0141('0x9f')][_0x13aa37[_0x0141('0xcd')]]=_0x18a750;}}};Dialer[_0x0141('0x9d')][_0x0141('0x16a')]=function(_0x327108,_0x46f011,_0x2042be){var _0x26d02e=new History(_0x46f011);if(_0x26d02e[_0x0141('0x16b')]+_0x26d02e['countcongestionretry']+_0x26d02e[_0x0141('0x16c')]>=_0x2042be[_0x0141('0x16d')]-0x1){return!![];}switch(_0x327108){case 0x3:if(_0x26d02e[_0x0141('0x16c')]>=_0x2042be[_0x0141('0x16e')]-0x1){return!![];}else{this[_0x0141('0xb4')]({'active':![],'countnoanswerretry':_0x26d02e['countnoanswerretry']+=0x1,'scheduledat':moment()[_0x0141('0x16f')](_0x2042be['dialNoAnswerRetryFrequency'],_0x0141('0x170'))[_0x0141('0x75')](_0x0141('0xf0')),'ContactId':_0x26d02e['ContactId'],'ListId':_0x26d02e[_0x0141('0xc4')],'VoiceQueueId':_0x26d02e[_0x0141('0x106')]||undefined,'CampaignId':_0x26d02e[_0x0141('0x107')]||undefined})[_0x0141('0xa5')](loggerCatch('[rescheduleContact][NoAnswer]'));}break;case 0x5:if(_0x26d02e[_0x0141('0x16b')]>=_0x2042be[_0x0141('0x171')]-0x1){return!![];}else{this[_0x0141('0xb4')]({'active':![],'countbusyretry':_0x26d02e[_0x0141('0x16b')]+=0x1,'scheduledat':moment()[_0x0141('0x16f')](_0x2042be[_0x0141('0x172')],'minutes')[_0x0141('0x75')](_0x0141('0xf0')),'ContactId':_0x26d02e['ContactId'],'ListId':_0x26d02e[_0x0141('0xc4')],'VoiceQueueId':_0x26d02e[_0x0141('0x106')]||undefined,'CampaignId':_0x26d02e[_0x0141('0x107')]||undefined})['catch'](loggerCatch(_0x0141('0x173')));}break;case 0x8:if(_0x26d02e[_0x0141('0x174')]>=_0x2042be[_0x0141('0x175')]-0x1){return!![];}else{this[_0x0141('0xb4')]({'active':![],'countcongestionretry':_0x26d02e[_0x0141('0x174')]+=0x1,'scheduledat':moment()[_0x0141('0x16f')](_0x2042be[_0x0141('0x176')],_0x0141('0x170'))['format'](_0x0141('0xf0')),'ContactId':_0x26d02e[_0x0141('0xc3')],'ListId':_0x26d02e[_0x0141('0xc4')],'VoiceQueueId':_0x26d02e[_0x0141('0x106')]||undefined,'CampaignId':_0x26d02e[_0x0141('0x107')]||undefined})[_0x0141('0xa5')](loggerCatch(_0x0141('0x177')));}break;default:return!![];}};Dialer[_0x0141('0x9d')][_0x0141('0x168')]=function(_0x44a4bd,_0x329676,_0x63ce11){var _0x2e89dd=this;var _0x17ac6e=new History(_0x44a4bd);return new BPromise(function(_0x2af7bc,_0x8f23f3){if(_[_0x0141('0x3d')](_0x329676)&&_0x0141('0x142')!==typeof _0x329676){return _0x8f23f3(msgResponse('[callProgressDetecting]',_0x0141('0x11d'),'entity\x20is\x20undefine'));}if(_[_0x0141('0x3d')](_0x63ce11)&&_0x0141('0x142')!==typeof _0x63ce11){return _0x8f23f3(msgResponse(_0x0141('0x178'),_0x0141('0x11d'),_0x0141('0x179')));}switch(_0x63ce11[_0x0141('0x17a')]){case'0':_0x329676[_0x0141('0x62')]+=0x1;_0x17ac6e[_0x0141('0xd5')]=0x0;_0x17ac6e[_0x0141('0xd6')]=_0x0141('0x17b');_0x2e89dd['createHistory'](_0x17ac6e)['catch'](loggerCatch(_0x0141('0x17c')));if(_0x2e89dd[_0x0141('0x16a')](0x0,_0x44a4bd,_0x329676)){if(_0x17ac6e[_0x0141('0x16b')]+_0x17ac6e[_0x0141('0x174')]+_0x17ac6e[_0x0141('0x16c')]>=_0x329676[_0x0141('0x16d')]){_0x2e89dd['stateGlobal'](_0x17ac6e,_0x2af7bc,_0x8f23f3,_0x0141('0x17d'));}else{_0x2e89dd[_0x0141('0x17e')](_0x17ac6e,_0x2af7bc,_0x8f23f3,_0x0141('0x17d'));}}break;case'3':_0x329676[_0x0141('0x61')]+=0x1;_0x17ac6e[_0x0141('0xd5')]=0x3;_0x17ac6e[_0x0141('0xd6')]=_0x0141('0x17f');_0x17ac6e[_0x0141('0x16c')]+=0x1;_0x17ac6e[_0x0141('0x180')]+=0x1;_0x2e89dd[_0x0141('0xbc')](_0x17ac6e)['catch'](loggerCatch('[syncAgentComplete][createHistory][3]'));if(_0x2e89dd[_0x0141('0x16a')](0x3,_0x44a4bd,_0x329676)){if(_0x17ac6e[_0x0141('0x16c')]>=_0x329676[_0x0141('0x16e')]){_0x2e89dd['createStateFinal'](_0x17ac6e,_0x2af7bc,_0x8f23f3,_0x0141('0x181'));}else{_0x2e89dd[_0x0141('0x182')](_0x17ac6e,_0x2af7bc,_0x8f23f3,_0x0141('0x181'));}}break;case'5':_0x329676['outboundBusyCallsDay']+=0x1;_0x17ac6e[_0x0141('0xd5')]=0x5;_0x17ac6e[_0x0141('0xd6')]=_0x0141('0x183');_0x17ac6e[_0x0141('0x16b')]+=0x1;_0x17ac6e['countglobal']+=0x1;_0x2e89dd[_0x0141('0xbc')](_0x17ac6e)[_0x0141('0xa5')](loggerCatch(_0x0141('0x184')));if(_0x2e89dd['checkRetriveMax'](0x5,_0x44a4bd,_0x329676)){if(_0x17ac6e['countbusyretry']>=_0x329676[_0x0141('0x171')]){_0x2e89dd[_0x0141('0x17e')](_0x17ac6e,_0x2af7bc,_0x8f23f3,_0x0141('0x185'));}else{_0x2e89dd[_0x0141('0x182')](_0x17ac6e,_0x2af7bc,_0x8f23f3,_0x0141('0x185'));}}break;case'8':_0x329676['outboundCongestionCallsDay']+=0x1;_0x17ac6e[_0x0141('0xd5')]=0x8;_0x17ac6e['statedesc']=_0x0141('0x186');_0x17ac6e[_0x0141('0x174')]+=0x1;_0x17ac6e[_0x0141('0x180')]+=0x1;_0x2e89dd[_0x0141('0xbc')](_0x17ac6e)['catch'](loggerCatch('[syncAgentComplete][createHistory][8]'));if(_0x2e89dd[_0x0141('0x16a')](0x8,_0x44a4bd,_0x329676)){if(_0x17ac6e['countcongestionretry']>=_0x329676[_0x0141('0x175')]){_0x2e89dd[_0x0141('0x17e')](_0x17ac6e,_0x2af7bc,_0x8f23f3,_0x0141('0x187'));}else{_0x2e89dd[_0x0141('0x182')](_0x17ac6e,_0x2af7bc,_0x8f23f3,_0x0141('0x187'));}}break;default:_0x329676[_0x0141('0x65')]+=0x1;_0x17ac6e[_0x0141('0xd5')]=0xc;_0x17ac6e[_0x0141('0xd6')]=_0x63ce11[_0x0141('0x17a')];_0x2e89dd['createHistory'](_0x17ac6e)[_0x0141('0xa5')](loggerCatch(_0x0141('0x188')));if(_0x2e89dd[_0x0141('0x16a')](_0x63ce11[_0x0141('0x17a')],_0x44a4bd,_0x329676)){if(_0x17ac6e[_0x0141('0x16b')]+_0x17ac6e['countcongestionretry']+_0x17ac6e['countnoanswerretry']>=_0x329676[_0x0141('0x16d')]){_0x2e89dd['stateGlobal'](_0x17ac6e,_0x2af7bc,_0x8f23f3,_0x63ce11[_0x0141('0x17a')]);}else{_0x2e89dd[_0x0141('0x17e')](_0x17ac6e,_0x2af7bc,_0x8f23f3,_0x63ce11[_0x0141('0x17a')]);}}}});};Dialer['prototype'][_0x0141('0x182')]=function(_0x5ee696,_0x598e0c,_0x1b5c5a,_0x4c213f){var _0x150c5f=new Final(_0x5ee696);_0x150c5f[_0x0141('0xd5')]=0xf;_0x150c5f['statedesc']=_0x0141('0x189');this['createStateFinal'](_0x150c5f,_0x598e0c,_0x1b5c5a,_0x4c213f);};Dialer[_0x0141('0x9d')][_0x0141('0x17e')]=function(_0x145121,_0x55d2d1,_0x4281ba,_0x2d70ec){this['moveContactManagedDialer'](_0x145121)[_0x0141('0xac')](function(_0x3f9f57){return _0x55d2d1(msgResponse(_0x0141('0x178'),_0x0141('0xc7'),_0x2d70ec));})[_0x0141('0xa5')](function(_0x448e7f){return _0x4281ba(msgResponse(_0x0141('0x18a'),_0x0141('0x11d'),'contact\x20not\x20moved'));});};Dialer[_0x0141('0x9d')][_0x0141('0x8')]=function(_0x123dbc){var _0xe5c48=this;var _0x12d406=_0x123dbc[_0x0141('0x18b')]/0x64;var _0x2cf198=_0x123dbc[_0x0141('0xf6')]/(_0x123dbc[_0x0141('0xf6')]+_0x123dbc['outboundAnswerCallsDay']);var _0x37c8b8=_0x123dbc[_0x0141('0x18c')]-_0x123dbc[_0x0141('0x6f')]-_0x123dbc[_0x0141('0x18d')]-_0x123dbc[_0x0141('0x70')]-_0x123dbc[_0x0141('0x55')];var _0x4394ba=(_0x123dbc[_0x0141('0x18c')]-_0x123dbc[_0x0141('0x6f')])*_0x123dbc[_0x0141('0x6d')];var _0x25f67a=Math[_0x0141('0x18e')](_0x123dbc[_0x0141('0x18f')]*_0x123dbc[_0x0141('0x190')]*_0x123dbc[_0x0141('0x6c')]*_0x123dbc[_0x0141('0x6e')]);if(_[_0x0141('0x3d')](_0x123dbc[_0x0141('0x84')])){loggerPredictive['info'](_0x0141('0x191'));if(!_['isUndefined'](_0x123dbc['startPredictive'])){_0x123dbc['startPredictive']=undefined;loggerPredictive[_0x0141('0x89')](_0x0141('0x192'),_0x0141('0x193'));}if(!_[_0x0141('0x3d')](_0x123dbc['handlePredictive'])){loggerPredictive[_0x0141('0x89')](_0x0141('0x192'),_0x0141('0x194'));clearInterval(_0x123dbc[_0x0141('0x86')]);_0x123dbc[_0x0141('0x86')]=undefined;}_0x123dbc[_0x0141('0x84')]=moment()[_0x0141('0x75')](_0x0141('0xf0'));loggerPredictive[_0x0141('0x7c')](_0x0141('0x195'),_0x123dbc[_0x0141('0x84')],_0x123dbc[_0x0141('0x40')]);this['handlePower'](_0x123dbc,0x1);}else if(ifInterval(_0x123dbc['dialPredictiveInterval'],_0x123dbc['startProgressive'])){this[_0x0141('0x133')](_0x123dbc,0x1);loggerPredictiveCalls['info'](_0x0141('0x196'),_0x123dbc[_0x0141('0x84')],_0x123dbc[_0x0141('0x40')]);_0x123dbc['erlangCalls']=0x0;_0x123dbc[_0x0141('0x6b')]=0x0;}else if(_0x12d406<_0x2cf198&&_0x123dbc['dialPredictiveOptimization']==='dropRate'){freeVariablesPredictive(_0x123dbc);loggerPredictive[_0x0141('0x7c')](_0x0141('0x197'),'Dropped\x20calls\x20day',_0x2cf198,_0x0141('0x84'),_0x123dbc['name']);}else if(_0x37c8b8>_0x4394ba){freeVariablesPredictive(_0x123dbc);loggerPredictive['info'](_0x0141('0x198'),_0x0141('0x199'),_0x37c8b8,'agent\x20max\x20free\x20',_0x4394ba);}else if(_0x25f67a<_0x123dbc[_0x0141('0x6b')]&&_0x123dbc['dialPredictiveOptimization']==='dropRate'){freeVariablesPredictive(_0x123dbc);loggerPredictive['info'](_0x0141('0x19a'),_0x0141('0x19b'),_0x25f67a,'Drop\x20in\x20this\x20interval',_0x123dbc[_0x0141('0x6b')],_0x0141('0x84'),_0x123dbc['name']);}else if(!ifInterval(_0x123dbc['dialPredictiveInterval'],_0x123dbc[_0x0141('0x84')])&&_[_0x0141('0x3d')](_0x123dbc[_0x0141('0x27')])&&!_[_0x0141('0x3d')](_0x123dbc[_0x0141('0x84')])){_0x123dbc['startPredictive']=moment()[_0x0141('0x75')]('YYYY-MM-DD\x20HH:mm:ss');loggerPredictive['info'](_0x0141('0x19c'),_0x123dbc[_0x0141('0x27')],_0x123dbc[_0x0141('0x40')]);this['averageHandleTime'](_0x123dbc[_0x0141('0x19d')])[_0x0141('0xac')](this['getDataPredictive'](_0x123dbc))['then'](mergeDataErlangB(_0x123dbc))['then'](this[_0x0141('0x19e')](_0x123dbc))[_0x0141('0xa5')](loggerCatchPredictive(_0x0141('0x19f'),_0x123dbc));}else if(!ifInterval(_0x123dbc[_0x0141('0x19d')],_0x123dbc[_0x0141('0x27')])){_0x123dbc[_0x0141('0x6b')]=0x0;_0x123dbc[_0x0141('0x27')]=moment()['format'](_0x0141('0xf0'));loggerPredictive['info']('[startMethodPredictive][StartPredictive][Repeat]',_0x123dbc[_0x0141('0x27')],_0x123dbc[_0x0141('0x40')]);clearInterval(_0x123dbc[_0x0141('0x86')]);_0x123dbc['handlePredictive']=undefined;this[_0x0141('0xb2')](_0x123dbc[_0x0141('0x19d')])[_0x0141('0xac')](this[_0x0141('0x1a0')](_0x123dbc))[_0x0141('0xac')](mergeDataErlangB(_0x123dbc))[_0x0141('0xac')](this[_0x0141('0x19e')](_0x123dbc))['catch'](loggerCatchPredictive(_0x0141('0x19f'),_0x123dbc));}};Dialer[_0x0141('0x9d')][_0x0141('0x1a0')]=function(_0x25ce5b){var _0x43ea6e=this;return function(_0x51cc70){return new BPromise(function(_0x1e8ceb,_0x391f7e){_[_0x0141('0x82')](_0x25ce5b,_0x51cc70[0x0]);if(checkGetDataPredictive(_0x51cc70[0x0])){loggerPredictive[_0x0141('0x7c')](JSON[_0x0141('0x74')](_0x51cc70[0x0]));if(_0x25ce5b[_0x0141('0x1a1')]===_0x0141('0x1a2')){return _0x43ea6e[_0x0141('0xb8')](_0x25ce5b['id'])[_0x0141('0xac')](function(_0x3a2d2c){var _0x57eb82=_0x25ce5b[_0x0141('0x18c')]-_0x3a2d2c[0x0][_0x0141('0x1a3')];var _0xf60d7c=_0x25ce5b['dialPredictiveInterval']*0x3c;var _0x5634cc=_0x51cc70[0x0][_0x0141('0x7b')]+_0x51cc70[0x0][_0x0141('0x67')];var _0x5ca744=(_0x51cc70[0x0][_0x0141('0x66')]+_0x51cc70[0x0]['predictiveIntervalDroppedCallsTimeout']+_0x51cc70[0x0]['predictiveIntervalDroppedCallsCallersExit'])/_0x51cc70[0x0][_0x0141('0x7a')];var _0x55269a=_0x25ce5b[_0x0141('0x18b')]/0x64;_0x25ce5b[_0x0141('0x6f')]=_0x3a2d2c[0x0]['outboundQueuePauses']||0x0;_0x25ce5b[_0x0141('0x6c')]=_0x5ca744>0x0?_0x5ca744:0x1;return _0x43ea6e['abandonmentRate'](_0x57eb82,_0xf60d7c,_0x5634cc,_0x5ca744,_0x55269a);})['then'](function(_0x418e74){return _0x1e8ceb(_0x418e74);})[_0x0141('0xa5')](function(_0x1a3c40){return _0x391f7e(msgResponse(_0x0141('0x1a4'),'Failure',JSON[_0x0141('0x74')](_0x1a3c40)));});}if(_0x25ce5b['dialPredictiveOptimization']===_0x0141('0x1a5')){return _0x43ea6e['getVoiceQueueRtPauses'](_0x25ce5b['id'])[_0x0141('0xac')](function(_0x1f8c09){var _0x48a6bc=_0x25ce5b[_0x0141('0x18c')]-_0x1f8c09[0x0]['outboundQueuePauses'];var _0xcd0db9=_0x25ce5b[_0x0141('0x19d')]*0x3c;var _0x460b13=_0x51cc70[0x0][_0x0141('0x7b')]+_0x51cc70[0x0]['predictiveIntervalAvgHoldtime'];var _0x43e8bf=(_0x51cc70[0x0][_0x0141('0x66')]+_0x51cc70[0x0]['predictiveIntervalDroppedCallsTimeout']+_0x51cc70[0x0][_0x0141('0x68')])/_0x51cc70[0x0][_0x0141('0x7a')];var _0x45134a=_0x25ce5b['dialPredictiveOptimizationPercentage']/0x64;_0x25ce5b['predictiveIntervalPauses']=_0x1f8c09[0x0][_0x0141('0x1a3')]||0x0;_0x25ce5b['predictiveIntervalHitRate']=_0x43e8bf>0x0?_0x43e8bf:0x1;return _0x43ea6e['busyFactor'](_0x48a6bc,_0xcd0db9,_0x460b13,_0x43e8bf,_0x45134a);})[_0x0141('0xac')](function(_0x2af471){return _0x1e8ceb(_0x2af471);})['catch'](function(_0x22c88f){return _0x391f7e(msgResponse(_0x0141('0x1a4'),_0x0141('0x11d'),JSON[_0x0141('0x74')](_0x22c88f)));});}}else{return _0x391f7e(msgResponse('[getDataPredictive]',_0x0141('0x11d'),_0x0141('0x1a6')));}});};};Dialer[_0x0141('0x9d')][_0x0141('0x19e')]=function(_0x4a8d3c){var _0x34b340=this;return function(){var _0x3ecd1e=0x0;var _0x302a1f=Math[_0x0141('0x18e')](_0x4a8d3c[_0x0141('0x1a7')]*0x3e8);if(_0x302a1f>0x0){_0x302a1f=_0x302a1f<0x64?0x64:_0x302a1f;loggerPredictive[_0x0141('0x7c')](_0x0141('0x1a8'),_0x302a1f);_0x4a8d3c[_0x0141('0x86')]=setInterval(function(){_0x34b340[_0x0141('0x86')](_0x4a8d3c);loggerPredictiveCalls[_0x0141('0x7c')](_0x0141('0x1a9'),_0x3ecd1e+=0x1);},_0x302a1f);}else{loggerPredictive['info'](_0x0141('0x1aa'),_0x0141('0x1ab'),_0x302a1f);}};};Dialer[_0x0141('0x9d')]['checkContactBlack']=function(_0x1a5665,_0x348cc5){var _0x45a413=this;return function(_0x98b29a){if(_[_0x0141('0x47')](_0x98b29a)){if(_[_0x0141('0xa2')](_0x348cc5['UserId'])||!_0x348cc5['recallme']){if(_0x1a5665[_0x0141('0x131')]===_0x0141('0x6')){_0x1a5665[_0x0141('0x1ac')]=_[_0x0141('0x3d')](_0x1a5665[_0x0141('0x1ac')])?!![]:_0x1a5665[_0x0141('0x1ac')];var _0x28e6b0=uuid['v4']();_0x45a413[_0x0141('0x24')][_0x28e6b0]=new Action(_0x1a5665,_0x348cc5,_0x28e6b0);loggerBooked[_0x0141('0x7c')]('[booked][checkContactBlack]',_0x28e6b0,'queueStatusComplete:\x20',JSON[_0x0141('0x74')](_0x1a5665[_0x0141('0x1ac')]),_0x0141('0x1ad'),_0x1a5665['name']);if(_0x1a5665['queueStatusComplete']){_0x1a5665['queueStatusComplete']=![];_0x45a413[_0x0141('0x29')][_0x45a413[_0x0141('0x24')][_0x28e6b0][_0x0141('0xa7')]]=[];ami[_0x0141('0xa3')]({'actionid':_0x28e6b0,'action':'queuestatus','queue':_0x1a5665['name']})[_0x0141('0xa5')](function(_0x1030a3){_0x45a413['updateOriginated'](_0x1a5665);_0x45a413[_0x0141('0xb4')]({'active':![],'ContactId':_0x45a413['actions'][_0x28e6b0][_0x0141('0xc3')],'ListId':_0x45a413[_0x0141('0x24')][_0x28e6b0][_0x0141('0xc4')],'VoiceQueueId':_0x45a413[_0x0141('0x24')][_0x28e6b0][_0x0141('0x106')]||undefined,'CampaignId':_0x45a413['actions'][_0x28e6b0][_0x0141('0x107')]||undefined})[_0x0141('0xa5')](loggerCatch(_0x0141('0x1ae')));delete _0x45a413[_0x0141('0x24')][_0x28e6b0];});}else{loggerBooked[_0x0141('0x7c')](_0x0141('0x1af'),JSON['stringify'](_0x1a5665[_0x0141('0x1ac')]),_0x0141('0x1ad'),_0x1a5665[_0x0141('0x40')]);_0x45a413['updateOriginated'](_0x1a5665);_0x45a413[_0x0141('0xb4')]({'active':![],'ContactId':_0x45a413[_0x0141('0x24')][_0x28e6b0][_0x0141('0xc3')],'ListId':_0x45a413[_0x0141('0x24')][_0x28e6b0][_0x0141('0xc4')],'VoiceQueueId':_0x45a413[_0x0141('0x24')][_0x28e6b0][_0x0141('0x106')]||undefined,'CampaignId':_0x45a413[_0x0141('0x24')][_0x28e6b0][_0x0141('0x107')]||undefined})[_0x0141('0xa5')](loggerCatch(_0x0141('0x1ae')));delete _0x45a413[_0x0141('0x24')][_0x28e6b0];}}else{return _0x45a413[_0x0141('0x141')](_0x1a5665,_0x348cc5);}}else{if(getDiff(_0x348cc5['scheduledat'])<_0x1a5665[_0x0141('0x1b0')]*0x3c){_0x45a413[_0x0141('0x1e')][_0x0141('0x104')](_0x348cc5['id'])[_0x0141('0x105')](function(){_0x45a413['updateOriginated'](_0x1a5665);});}else{_0x1a5665['outboundReCallsDay']+=0x1;_0x45a413[_0x0141('0xa6')](_0x1a5665);if(_0x1a5665[_0x0141('0x1b1')]){_0x45a413['rescheduleContact']({'active':![],'recallme':![],'UserId':null,'ContactId':_0x348cc5[_0x0141('0xc3')],'ListId':_0x348cc5[_0x0141('0xc4')],'VoiceQueueId':_0x348cc5[_0x0141('0x106')]||undefined,'CampaignId':_0x348cc5[_0x0141('0x107')]||undefined})[_0x0141('0xa5')](loggerCatch(_0x0141('0x1b2')));_0x45a413['createHistory'](createObjHistory(_0x1a5665,_0x348cc5,'RECALLINQUEUE',0x17,_0x0141('0x1b3')))[_0x0141('0xa5')](loggerCatch(_0x0141('0x1b4')));}else{_0x45a413[_0x0141('0xc1')](createObjHistory(_0x1a5665,_0x348cc5,'RECALLFAILEDTIMEOUT',0x16,'RecallFailedTimeout'),'[Originate][HistoryRecallClose][historyCatch]','[Originate][HistoryRecallClose]');}}}}else{_0x1a5665[_0x0141('0x5f')]+=0x1;_0x45a413['saveInDb'](createObjHistory(_0x1a5665,_0x348cc5,_0x0141('0x1b5'),0xd,'Blacklist'),_0x0141('0x1b6'),_0x0141('0x1b7'));throw _0x0141('0x1b8');}};};Dialer['prototype'][_0x0141('0x138')]=function(_0x5ea065){var _0x3334ca=this;var _0x255f39=[];var _0x33130f=_0x5ea065[_0x0141('0x1b9')]-_0x5ea065[_0x0141('0x70')]-_0x5ea065['temp'];emitCampaignSummary(_0x5ea065);if(_0x33130f>0x0){if(_0x33130f>this[_0x0141('0x22')]){_0x33130f=this[_0x0141('0x22')];}_0x5ea065[_0x0141('0x1ba')]+=_0x33130f;this[_0x0141('0xb7')](_0x5ea065['id'],_0x33130f,_0x5ea065[_0x0141('0x1bb')])[_0x0141('0xac')](function(_0x12e6c2){_0x5ea065[_0x0141('0x1ba')]-=_0x33130f;_0x5ea065['temp']=_0x5ea065['temp']>0x0?_0x5ea065[_0x0141('0x1ba')]:0x0;if(!checkContactEmpty(_0x12e6c2)){_0x5ea065[_0x0141('0x3e')]=_0x0141('0x93');logger['info'](_0x0141('0x1bc')+_0x5ea065[_0x0141('0x40')]);}else{_0x5ea065[_0x0141('0x70')]+=_0x12e6c2[_0x0141('0x8b')];_0x5ea065[_0x0141('0x3e')]=_0x0141('0x1bd');for(var _0xba8bfd=0x0;_0xba8bfd<_0x12e6c2['length'];_0xba8bfd+=0x1){_0x5ea065[_0x0141('0x1be')]+=0x1;if(_[_0x0141('0xa2')](_0x12e6c2[_0xba8bfd])||_['isNil'](_0x12e6c2[_0xba8bfd]['Contact'])||_['isNil'](_0x12e6c2[_0xba8bfd][_0x0141('0x144')][_0x0141('0x145')])){_0x3334ca['emptyContact'](_0x0141('0x1bf'),_0x5ea065,_0x12e6c2[_0xba8bfd]);}else{_0x3334ca[_0x0141('0xb0')](_['pick'](_0x12e6c2[_0xba8bfd],[_0x0141('0x107'),_0x0141('0x1c0')]))['then'](_0x3334ca['checkContactBlack'](_0x5ea065,_0x12e6c2[_0xba8bfd]))[_0x0141('0xa5')](_0x3334ca[_0x0141('0x1c1')]('[actionOriginateIvr]\x20',_0x5ea065));}}}})['catch'](loggerGetContactDialer('[getContactCampaign2]',_0x5ea065,_0x33130f));}};Dialer[_0x0141('0x9d')][_0x0141('0x133')]=function(_0x10ea58,_0x171be3){var _0xd6d1a8=this;var _0x5f54a6=[];var _0x6c308e=_0x171be3>=0x1?_0x171be3:0x1;var _0x4b8ee9=[];if(_0x10ea58[_0x0141('0x131')]===_0x0141('0x6')){_0x6c308e=0x1;}var _0x25d0a2=Math['floor'](_0x10ea58[_0x0141('0x50')]*_0x6c308e)-_0x10ea58['originated']-_0x10ea58['temp'];emitVoiceQueueSummary(_0x10ea58);if(_0x10ea58[_0x0141('0x1c2')]>0x0){var _0x4b8913=_0x10ea58[_0x0141('0x1c2')]-_0x10ea58[_0x0141('0x70')]-_0x10ea58['talking']-_0x10ea58['temp']-_0x10ea58[_0x0141('0x51')];if(_0x25d0a2>_0x4b8913){_0x25d0a2=_0x4b8913;}}if(_0x25d0a2>0x0){if(_0x10ea58[_0x0141('0x131')]===_0x0141('0x6')){_0x25d0a2=0x1;}if(_0x25d0a2>this[_0x0141('0x22')]){_0x25d0a2=this[_0x0141('0x22')];}_0x10ea58['temp']+=_0x25d0a2;for(var _0x60e195 in this[_0x0141('0xff')]){if(this['agents'][_0x0141('0x8c')](_0x60e195)){if(this['agents'][_0x60e195][_0x0141('0xd5')]===_0x0141('0x1c3')&&this[_0x0141('0xff')][_0x60e195][_0x0141('0xca')]===_0x0141('0x1c4')){_0x5f54a6[_0x0141('0x127')](this[_0x0141('0xff')][_0x60e195]['id']);}}}this[_0x0141('0xb5')](_0x10ea58['id'],_0x5f54a6,_0x25d0a2,_0x10ea58[_0x0141('0x1bb')])[_0x0141('0xac')](function(_0x475909){_0x10ea58[_0x0141('0x1ba')]-=_0x25d0a2;_0x10ea58[_0x0141('0x1ba')]=_0x10ea58[_0x0141('0x1ba')]>0x0?_0x10ea58[_0x0141('0x1ba')]:0x0;if(!checkContactEmpty(_0x475909)){_0xd6d1a8[_0x0141('0xaa')](_0x10ea58)[_0x0141('0xac')](sendMessageReschedule(_0x10ea58))[_0x0141('0xa5')](loggerCatch(_0x0141('0xad')));}else{_0x10ea58['originated']+=_0x475909[_0x0141('0x8b')];_0x10ea58[_0x0141('0x3e')]=_0x10ea58[_0x0141('0x131')]===_0x0141('0x6')?_0x0141('0x1c5'):_0x0141('0x1bd');for(var _0x1b2291=0x0;_0x1b2291<_0x475909['length'];_0x1b2291+=0x1){if(_[_0x0141('0xa2')](_0x475909[_0x1b2291])||_['isNil'](_0x475909[_0x1b2291]['Contact'])||_['isNil'](_0x475909[_0x1b2291][_0x0141('0x144')]['phone'])){_0xd6d1a8[_0x0141('0xc0')]('[actionOriginate]\x20',_0x10ea58,_0x475909[_0x1b2291]);}else{_0xd6d1a8[_0x0141('0xae')](_['pick'](_0x475909[_0x1b2291],[_0x0141('0x106'),_0x0141('0x1c0')]))[_0x0141('0xac')](_0xd6d1a8[_0x0141('0x1c6')](_0x10ea58,_0x475909[_0x1b2291]))[_0x0141('0xa5')](_0xd6d1a8[_0x0141('0x1c1')](_0x0141('0x1bf'),_0x10ea58));}}}})[_0x0141('0xa5')](loggerGetContactDialer('[getContactDialer2]',_0x10ea58,_0x25d0a2));}};Dialer[_0x0141('0x9d')][_0x0141('0x86')]=function(_0x524765){var _0x37a5dd=this;if(_0x524765[_0x0141('0x1c2')]>0x0){var _0x11e099=_0x524765['dialLimitQueue']-_0x524765[_0x0141('0x70')]-_0x524765[_0x0141('0x55')];if(_0x11e099>0x0){this[_0x0141('0x1c7')](_0x524765);}else{loggerPredictiveCalls[_0x0141('0x7c')](_0x0141('0x1c8'));}}else{this[_0x0141('0x1c7')](_0x524765);}};Dialer[_0x0141('0x9d')][_0x0141('0x1c7')]=function(_0x2011ad){var _0x39fa72=this;var _0x3047f5=[];_0x2011ad[_0x0141('0x70')]+=0x1;for(var _0x2a0338 in this[_0x0141('0xff')]){if(this[_0x0141('0xff')][_0x0141('0x8c')](_0x2a0338)){if(this[_0x0141('0xff')][_0x2a0338][_0x0141('0xd5')]===_0x0141('0x1c3')&&this['agents'][_0x2a0338]['status']===_0x0141('0x1c4')){_0x3047f5[_0x0141('0x127')](this[_0x0141('0xff')][_0x2a0338]['id']);}}}this['getContactDialer'](_0x2011ad['id'],_0x3047f5,0x1,_0x2011ad[_0x0141('0x1bb')])['then'](function(_0x22e0ec){if(!checkContactEmpty(_0x22e0ec)){checkContactLowerLimitOriginate(_0x2011ad,0x1,0x0);_0x39fa72[_0x0141('0xaa')](_0x2011ad)[_0x0141('0xac')](sendMessageReschedule(_0x2011ad))[_0x0141('0xa5')](loggerCatch(_0x0141('0xad')));}else{_0x2011ad[_0x0141('0x3e')]='RUNNING';if(_[_0x0141('0xa2')](_0x22e0ec[0x0])||_['isNil'](_0x22e0ec[0x0][_0x0141('0x144')])||_[_0x0141('0xa2')](_0x22e0ec[0x0][_0x0141('0x144')][_0x0141('0x145')])){_0x39fa72[_0x0141('0xc0')](_0x0141('0x1bf'),_0x2011ad,_0x22e0ec[0x0]);}else{_0x39fa72[_0x0141('0xae')](_[_0x0141('0xc2')](_0x22e0ec[0x0],['VoiceQueueId',_0x0141('0x1c0')]))[_0x0141('0xac')](_0x39fa72['checkContactBlack'](_0x2011ad,_0x22e0ec[0x0]))['catch'](_0x39fa72[_0x0141('0x1c1')](_0x0141('0x1c9'),_0x2011ad));}}})[_0x0141('0xa5')](loggerGetContactDialer(_0x0141('0x1ca'),_0x2011ad,0x1));emitVoiceQueueSummary(_0x2011ad);};Dialer[_0x0141('0x9d')][_0x0141('0x1cb')]=function(_0x503ad5,_0x1db1a4,_0x1ba055,_0x3c11c6,_0xd8f837,_0xab6e07){loggerPredictive['info']('[abandonmentRate]',_0x0141('0x1cc'),_0x503ad5,_0x0141('0x1cd'),_0x1db1a4,_0x0141('0x1ce'),_0x1ba055,_0x0141('0x1cf'),_0x3c11c6,_0x0141('0x1d0'),_0xd8f837);return new BPromise(function(_0x11fb14,_0x598701){if(_0x503ad5<=0x0||isNaN(_0x503ad5)){return _0x598701(msgResponse('[abandonmentRate]','Error',_0x0141('0x1d1')+_0x503ad5));}if(_0x1ba055<=0x0||isNaN(_0x1ba055)){return _0x598701(msgResponse(_0x0141('0x1d2'),_0x0141('0x49'),'Ts\x20=\x20'+_0x1ba055));}if(_0x3c11c6<=0x0||isNaN(_0x3c11c6)){return _0x598701(msgResponse('[abandonmentRate]',_0x0141('0x49'),_0x0141('0x1d3')+_0x3c11c6));}if(_0x1db1a4<=0x0||isNaN(_0x1db1a4)){return _0x598701(msgResponse(_0x0141('0x1d2'),_0x0141('0x49'),_0x0141('0x1d4')+_0x1db1a4));}if(_0xd8f837<=0x0||isNaN(_0xd8f837)){return _0x598701(msgResponse(_0x0141('0x1d2'),_0x0141('0x49'),_0x0141('0x1d5')+_0xd8f837));}_0xab6e07=_0xab6e07||0x0;var _0x502915=0x1/_0x1ba055;var _0x50ad05=0x0;var _0x2e2022=0x0;var _0x253bf3=0x0;var _0x3d19e0=0x0;for(var _0x53f151=0x0;_0x253bf3<_0xd8f837;_0x53f151+=0x1){_0x2e2022=_0x53f151/_0x1db1a4;_0x50ad05=(_0x3c11c6*_0x2e2022+_0xab6e07)/_0x502915;_0x253bf3=erlangb(_0x50ad05,_0x503ad5);_0x3d19e0=_0x50ad05/_0x503ad5*(0x1-erlangb(_0x50ad05,_0x503ad5));}return _0x11fb14({'erlangCalls':_0x53f151,'erlangCallToSecond':_0x1db1a4/_0x53f151,'erlangAbandonmentRate':_0x253bf3,'erlangBusyFactor':_0x3d19e0});});};Dialer[_0x0141('0x9d')][_0x0141('0x1d6')]=function(_0x3aae61,_0x2d5118,_0x3c6e87,_0xcc59a,_0x316f2c,_0x400a48){loggerPredictive[_0x0141('0x7c')](_0x0141('0x1d7'),_0x0141('0x1cc'),_0x3aae61,_0x0141('0x1cd'),_0x2d5118,_0x0141('0x1ce'),_0x3c6e87,_0x0141('0x1cf'),_0xcc59a,_0x0141('0x1d8'),_0x316f2c);return new BPromise(function(_0x51ebde,_0x3e0c4e){if(_0x3aae61<=0x0||isNaN(_0x3aae61)){return _0x3e0c4e(msgResponse('[abandonmentRate]',_0x0141('0x49'),_0x0141('0x1d1')+_0x3aae61));}if(_0x3c6e87<=0x0||isNaN(_0x3c6e87)){return _0x3e0c4e(msgResponse(_0x0141('0x1d2'),'Error','Ts\x20=\x20'+_0x3c6e87));}if(_0xcc59a<=0x0||isNaN(_0xcc59a)){return _0x3e0c4e(msgResponse(_0x0141('0x1d2'),_0x0141('0x49'),'p\x20=\x20'+_0xcc59a));}if(_0x2d5118<=0x0||isNaN(_0x2d5118)){return _0x3e0c4e(msgResponse(_0x0141('0x1d2'),'Error','interval\x20=\x20'+_0x2d5118));}if(_0x316f2c<=0x0||isNaN(_0x316f2c)){return _0x3e0c4e(msgResponse(_0x0141('0x1d2'),_0x0141('0x49'),_0x0141('0x1d5')+_0x316f2c));}_0x400a48=_0x400a48||0x0;var _0xdd95f7=0x1/_0x3c6e87;var _0x5b23f1=0x0;var _0x5c01ad=0x0;var _0x3526d1=0x0;var _0x49cf21=0x0;for(var _0xb0ca24=0x0;_0x49cf21<_0x316f2c;_0xb0ca24+=0x1){_0x5c01ad=_0xb0ca24/_0x2d5118;_0x5b23f1=(_0xcc59a*_0x5c01ad+_0x400a48)/_0xdd95f7;_0x3526d1=erlangb(_0x5b23f1,_0x3aae61);_0x49cf21=_0x5b23f1/_0x3aae61*(0x1-erlangb(_0x5b23f1,_0x3aae61));}return _0x51ebde({'erlangCalls':_0xb0ca24,'erlangCallToSecond':_0x2d5118/_0xb0ca24,'erlangAbandonmentRate':_0x3526d1,'erlangBusyFactor':_0x49cf21});});};module['exports']=Dialer;
\ No newline at end of file
+var _0xefce=['[handlePredictive][limitChannel]','[actionOriginatePredictive]\x20','[getContactDialerPredictive]','abandonmentRate','[abandonmentRate]','\x20m\x20=\x20','\x20interval\x20=\x20','\x20Ts\x20=\x20','\x20p\x20=\x20','\x20Amax\x20=\x20','Ts\x20=\x20','p\x20=\x20','\x20Umin\x20=\x20','m\x20=\x20','interval\x20=\x20','Amax\x20=\x20','exports','lodash','moment','md5','../../../config/logger','dialer','booked','predictive','predictiveCalls','../../../config/environment/','../ami','socket.io-emitter','localhost','../rpc/cmHopperHistory','../rpc/cmHopperBlack','./action','./final','./agentComplete','./hangup','env','XCALLY_IP_AGI','rrmemory','roundrobin','prototype','enqueue','tail','finally','preview','voiceQueues','campaigns','agents','trunks','maxNumberOriginate','channels','actions','contactsId','optionPredictive','startPredictive','ivrOriginated','queueBookedRR','agentconnect','syncAgentConnect','bind','queuecallerabandon','syncQueueCallerAbandon','syncOriginateResponse','agentcomplete','syncAgentComplete','syncQueueSummary','hangup','syncHangup','newexten','syncNewExten','varset','queuemember','queuestatuscomplete','loopCampaigns','isUndefined','AGENTS_NOT_LOGGED','name','\x20AGENTS\x20NOT\x20LOGGED','message','NOT_ACTIVE','Interval','INTERVAL_IS_NULL','\x20INTERVAL_IS_NULL','Intervals','isEmpty','[ifTime][Action]','stringify','milliseconds','diff','seconds','emit','type','strategy','answered','available','loggedIn','sumBillable','sumDuration','sumHoldTime','talking','unmanaged','waiting','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalLowerLimit','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalTotalCalls','originated','Trunk','active','callerid','format','voice:queue:%s','voice_queue:save','ivr','campaign:ivr:%s','info','[checkGetDataPredictive][avgTalktime]','[checkGetDataPredictive][totalCalls]','[checkGetDataPredictive][objIsEmpty]','[checkGetDataPredictive][obj]','[ErlangB]','merge','[freeVariablesPredictive]','handlePredictive','outbound','string','\x22%s\x22\x20<%s>','\x22\x22\x20<>','inspect','error','length','hasOwnProperty','[decremetOriginate]\x20object\x20originated\x20is\x20negative','[decremetOriginate]\x20is\x20null\x20or\x20undefined','contactsRescheduled','RESCHEDULED_CONTACTS','[getContactDialer2][ReScheduled]','[getContactDialer2][Empty]','sendMessageOneNotActive','pTalking','is\x20not\x20active','IS_DISACTIVED','[syncQueueSummary]\x20Campaign\x20Queue:\x20','is\x20disactive','[syncQueueSummary]\x20Campaign\x20Ivr:\x20','statedesc','starttime','loopClearZombieChannels','clearZombieChannels','uniqueId','[uniqueid]','isNil','Action','status','channel','No\x20such\x20channel','updateOriginated','queue','[Dialer][checkChannel]','[Dialer][checkChannel][ivr]','countReScheduled','resolve','then','[countReScheduled]\x20','checkIsBlackList','catch','checkIsBlackListIvr','[checkIsBlackListIvr]\x20','avgHandleTime','[averageHandleTime]\x20','rescheduleContact','[rescheduleContact]\x20','getContactDialer','[getContactDialer]\x20','getContactDialerIvr','[getVoiceQueueRtPauses]\x20','moveContactManagedDialer','createHistory','[updateOriginated]\x20object\x20originated\x20is\x20negative','[updateOriginated]\x20is\x20null\x20or\x20undefined','loggerHandler','notFound','saveInDb','pick','ContactId','UserId','CampaignId','[emptyContact][createHistory]','[emptyContact]','SIP/%s','reachable','unmonitored','syncVarSet','uniqueid','variable','amdstatus','exten','dialAMDActive','value','state','HangupInAMD','membername','[syncHangupInAMD][createHistory]','[syncHangupInAMD]','outboundAnswerCallsDay','Machine','amd','HANGUP','AMD','[syncHangupInAMDIvr][createHistory]','MACHINE','[syncMachineIvr][createHistory]','[syncMachineIvr]','ivrAnswerCallsDay','[syncHangupIvr][createHistory]','[syncHangupIvr]','dialQueueProject','outboundAnswerAgiCallsDay','AnswerAGI','cause-txt','reason','agent','dialQueueProject2','YYYY-MM-DD\x20HH:mm:ss','[syncAgentComplete]','queueCallerAbandonCreateState','[syncAgentComplete][createHistory]','[syncQueueCallerAbandon]\x20[Drop]','droptime','responsetime','dialQueueTimeout','Drop','dropreason','agiafterat','Abandoned','actionid','locked','paused','stateinterface','queueBooked','push','idHopper','queueStatusComplete','[unlockQueueStatus][undefined]','[booked][unlockQueueStatus]','syncQueueStatusComplete','run','ListId','[unlock][syncQueueStatusComplete]','_rr','unlockRR','[booked][RR]','contactAgent-idHopper:\x20','[Catch][Preview][syncQueueStatusComplete]','Agent:\x20','[booked][unlock]','VoiceQueueId','[booked][unlock2]','[unlock2][syncQueueStatusComplete]','[booked][unlock3]','[unlock3][syncQueueStatusComplete]','checkIsTrunkReachable','isTrunkReachable','TrunkBackup','\x20trunk\x20is\x20not\x20reachable','checkIfTime','ifTime','Failure','\x20Intervals\x20is\x20null\x20','INTERVAL_IS_EMPTY','timezones','TIMEZONE_UNKNOW','\x20Timezone\x20unknow\x20','command','interval','content','indexOf','true','all','INTERVAL_IS_OVERTIME','[ifTime][promiseAll]','Timezone:\x20','progressive','power','handlePower','dialPowerLevel','Queue','method\x20not\x20recognized','handleIvr','dialGlobalInterval','dialTimezone','checkIfTimeIntervals','checkDialMethod','[syncQueueSummary]','launchHandleIvr','[syncCampaigns]','pow','replace','actionOriginate','object','Contact','getCaller','NONE','\x22agi://%s/square,%s\x22','\x22%s,%s%s,,,%s\x22','dialQueueOptions','ACTIVE','dialAMDInitialSilence','XMD-AMDGREETING','XMD-AMDAFTERGREETINGSILENCE','dialAMDAfterGreetingSilence','XMD-AMDTOTALANALYSISTIME','XMD-AMDMINWORDLENGTH','dialAMDMinWordLength','XMD-AMDBETWEENWORDSSILENCE','dialAMDBetweenWordsSilence','XMD-AMDMAXIMUMNUMBEROFWORDS','dialAMDMaximumNumberOfWords','XMD-AMDSILENCETHRESHOLD','dialAMDSilenceThreshold','XMD-AMDMAXIMUMWORDLENGTH','dialAMDMaximumWordLength','XMD-VOICEQUEUEID','XMD-CAMPAIGNID','tags','createdAt','updatedAt','%s%s','XMD-','toUpper','SIP/%s/%s%s','trim','dialCutDigit','substring','phone','dialRandomLastDigitCallerIdNumber','[originateError]:\x20%s','OriginateError','endtime','[originate][error]','originate','Error','originate\x20action\x20Error','getQueue','isSuccess','response','callProgressDetecting','[callProgressDetecting]\x20','countbusyretry','countcongestionretry','dialGlobalMaxRetry','countnoanswerretry','dialNoAnswerMaxRetry','add','minutes','[rescheduleContact][NoAnswer]','dialBusyMaxRetry','dialBusyRetryFrequency','[rescheduleContact]\x20[Busy]','dialCongestionMaxRetry','[rescheduleContact]\x20[Congestion]','[callProgressDetecting]','entity\x20is\x20undefine','evt\x20is\x20undefine','NoSuchNumber','[syncAgentComplete][createHistory][0]','stateGlobal','reason\x200\x20no\x20such\x20number....','createStateFinal','countglobal','[syncAgentComplete][createHistory][3]','checkRetriveMax','reason\x203\x20ringing\x20no\x20answer','Busy','[syncAgentComplete][createHistory][5]','reason\x205\x20busy','[syncAgentComplete][createHistory][8]','reason\x208\x20congestion','Global','Success','contact\x20not\x20moved','floor','erlangCalls','erlangAbandonmentRate','startProgressive','[startMethodPredictive][StartProgressive][First]','[startMethodPredictive][StartProgressive]','check\x20handlePredictive\x20is\x20not\x20undefine','[startMethodPredictive][StartProgressive][Date]','dialPredictiveInterval','[startMethodPredictive][StartProgressive][Loop]','dropRate','[stopMethodPredictive][ReStartProgressive][ExceededDropDay]','Dropped\x20calls\x20day','Agent\x20free','agent\x20max\x20free\x20','dialPredictiveOptimization','Max\x20Drop\x20','averageHandleTime','getDataPredictive','startMethodPredictive','[averageHandleTime][ErlangB]\x20','[startMethodPredictive][StartPredictive][Repeat]','getVoiceQueueRtPauses','outboundQueuePauses','dialPredictiveOptimizationPercentage','busyFactor','[CatchErlangB]','[getDataPredictive]','erlangCallToSecond','[startMethodPredictive]','[handlePredictive]','[startMethodPredictive][milliseconds]\x20','Failure\x20','checkContactBlack','recallme','[booked][checkContactBlack]','queueStatusComplete:\x20','queuestatus','[unlockOriginate][syncQueueStatusComplete]','[booked][checkContactBlack][else]','Queue:\x20','scheduledat','dialRecallMeTimeout','[rescheduleContact][dialRecallInQueue]','RECALLINQUEUE','RecallInQueue','RECALLFAILEDTIMEOUT','RecallFailedTimeout','[Originate][HistoryRecallClose][historyCatch]','[Originate][HistoryRecallClose]','BLACKLIST','Blacklist','[Originate][historyBlacklist]','inBlackList','limitCalls','temp','dialOrderByScheduledAt','AVAILABLE_CONTACTS_FINISHED','[getContactCampaign2][Empty]','RUNNING','emptyContact','[actionOriginate]\x20','Contact.phone','[actionOriginateIvr]\x20','dialLimitQueue','[getContactDialer2]','tryOriginatePredictive'];(function(_0x3f0c38,_0x1b6f0a){var _0x3e714e=function(_0x4965fa){while(--_0x4965fa){_0x3f0c38['push'](_0x3f0c38['shift']());}};_0x3e714e(++_0x1b6f0a);}(_0xefce,0x1e8));var _0xeefc=function(_0x27929e,_0x75968b){_0x27929e=_0x27929e-0x0;var _0x3125c0=_0xefce[_0x27929e];return _0x3125c0;};'use strict';var util=require('util');var _=require(_0xeefc('0x0'));var BPromise=require('bluebird');var uuid=require('uuid');var moment=require(_0xeefc('0x1'));var rr=require('rr');var md5=require(_0xeefc('0x2'));var logger=require(_0xeefc('0x3'))(_0xeefc('0x4'));var loggerBooked=require(_0xeefc('0x3'))(_0xeefc('0x5'));var loggerPredictive=require(_0xeefc('0x3'))(_0xeefc('0x6'));var loggerPredictiveCalls=require(_0xeefc('0x3'))(_0xeefc('0x7'));var loggerSyncQueueSummary=require('../../../config/logger')('syncQueueSummary');var config=require(_0xeefc('0x8'));var ami=require(_0xeefc('0x9'));var io=require(_0xeefc('0xa'))({'host':_0xeefc('0xb'),'port':0x18eb});var cmHopper=require('../rpc/cmHopper');var cmHopperFinal=require('../rpc/cmHopperFinal');var cmHopperHistory=require(_0xeefc('0xc'));var cmHopperBlack=require(_0xeefc('0xd'));var voiceQueueRt=require('../rpc/voiceQueueRt');var Action=require(_0xeefc('0xe'));var History=require('./history');var Final=require(_0xeefc('0xf'));var AgentComplete=require(_0xeefc('0x10'));var QueueCallerAbandon=require('./queueCallerAbandon');var Hangup=require(_0xeefc('0x11'));var ipAgi=process[_0xeefc('0x12')][_0xeefc('0x13')]||'127.0.0.1';var strategy={'rrmemory':_0xeefc('0x14'),'roundrobin':_0xeefc('0x15')};var Sequence=function(){};Sequence[_0xeefc('0x16')][_0xeefc('0x17')]=function(_0xaa2c88){this[_0xeefc('0x18')]=this[_0xeefc('0x18')]?this[_0xeefc('0x18')][_0xeefc('0x19')](_0xaa2c88):_0xaa2c88();};function Dialer(_0x3ac92a,_0x224d28){this['sequence']=new Sequence();this[_0xeefc('0x1a')]=_0x224d28;this['voiceQueues']=_0x3ac92a[_0xeefc('0x1b')];this[_0xeefc('0x1c')]=_0x3ac92a[_0xeefc('0x1c')];this[_0xeefc('0x1d')]=_0x3ac92a[_0xeefc('0x1d')];this['trunks']=_0x3ac92a[_0xeefc('0x1e')];this[_0xeefc('0x1f')]=config['maxNumberOriginate']||0x2;this[_0xeefc('0x20')]={};this[_0xeefc('0x21')]={};this[_0xeefc('0x22')]={};this['uniqueId']={};this[_0xeefc('0x23')]={};this[_0xeefc('0x24')]={};this['startProgressive']={};this[_0xeefc('0x25')]={};this['queueBooked']={};this[_0xeefc('0x26')]={};ami['on'](_0xeefc('0x27'),this[_0xeefc('0x28')][_0xeefc('0x29')](this));ami['on'](_0xeefc('0x2a'),this[_0xeefc('0x2b')][_0xeefc('0x29')](this));ami['on']('originateresponse',this[_0xeefc('0x2c')][_0xeefc('0x29')](this));ami['on'](_0xeefc('0x2d'),this[_0xeefc('0x2e')]['bind'](this));ami['on']('custom:queuesummary',this[_0xeefc('0x2f')][_0xeefc('0x29')](this));ami['on'](_0xeefc('0x30'),this[_0xeefc('0x31')]['bind'](this));ami['on'](_0xeefc('0x32'),this[_0xeefc('0x33')][_0xeefc('0x29')](this));ami['on'](_0xeefc('0x34'),this['syncVarSet']['bind'](this));ami['on'](_0xeefc('0x35'),this['syncQueueMember'][_0xeefc('0x29')](this));ami['on'](_0xeefc('0x36'),this['syncQueueStatusComplete']['bind'](this));this[_0xeefc('0x37')]();this['loopClearZombieChannels']();}function isNotNull(_0x56de5f){return _0x56de5f!==null&&!_[_0xeefc('0x38')](_0x56de5f);}function checkIsLoggedIn(_0x1079f2,_0x4d3aec){return function(){if(_0x4d3aec<=0x0){_0x1079f2['message']=_0xeefc('0x39');throw _0x1079f2[_0xeefc('0x3a')]+_0xeefc('0x3b');}};}function isActive(_0x13a33e){return _0x13a33e;}function checkIsActive(_0x29fc6b,_0x325578){return function(){if(!isActive(_0x325578)){_0x29fc6b[_0xeefc('0x3c')]=_0xeefc('0x3d');throw _0x29fc6b[_0xeefc('0x3a')]+'\x20NOT\x20Active';}};}function checkInterval(_0xf8b719){return function(){if(!isNotNull(_0xf8b719[_0xeefc('0x3e')])){_0xf8b719[_0xeefc('0x3c')]=_0xeefc('0x3f');throw _0xf8b719[_0xeefc('0x3a')]+_0xeefc('0x40');}if(!isNotNull(_0xf8b719[_0xeefc('0x3e')][_0xeefc('0x41')])){_0xf8b719[_0xeefc('0x3c')]=_0xeefc('0x3f');throw _0xf8b719[_0xeefc('0x3a')]+_0xeefc('0x40');}if(!isNotNull(_[_0xeefc('0x42')](_0xf8b719['Interval'][_0xeefc('0x41')]))){_0xf8b719[_0xeefc('0x3c')]='INTERVAL_IS_NULL';throw _0xf8b719[_0xeefc('0x3a')]+_0xeefc('0x40');}};}function msgResponse(_0x59b608,_0x4a9f8e,_0x45fa62){return{'action':_0x59b608,'response':_0x4a9f8e,'message':_0x45fa62};}function myreject(_0x2fcf80){return function(_0x4bb64e){return _0x2fcf80(msgResponse(_0xeefc('0x43'),'Error',JSON[_0xeefc('0x44')](_0x4bb64e)));};}function getSeconds(_0x48e433,_0xacb3d8){var _0x386d4f=moment(_0x48e433)['milliseconds'](0x0);var _0x38d4c2=moment(_0xacb3d8)[_0xeefc('0x45')](0x0);return _0x386d4f[_0xeefc('0x46')](_0x38d4c2,_0xeefc('0x47'));}function emit(_0x40a9b1,_0x3c91da,_0x1aadef){io['to'](_0x40a9b1)[_0xeefc('0x48')](_0x3c91da,_0x1aadef);}function emitVoiceQueueSummary(_0x3bd245){if(_0x3bd245[_0xeefc('0x49')]==='outbound'){var _0x48aaa7={'id':_0x3bd245['id'],'name':_0x3bd245['name'],'strategy':_0x3bd245[_0xeefc('0x4a')],'answered':_0x3bd245[_0xeefc('0x4b')],'available':_0x3bd245[_0xeefc('0x4c')],'loggedIn':_0x3bd245[_0xeefc('0x4d')],'pTalking':_0x3bd245['pTalking'],'sumBillable':_0x3bd245[_0xeefc('0x4e')],'sumDuration':_0x3bd245[_0xeefc('0x4f')],'sumHoldTime':_0x3bd245[_0xeefc('0x50')],'talking':_0x3bd245[_0xeefc('0x51')],'total':_0x3bd245['total'],'type':_0x3bd245[_0xeefc('0x49')],'unmanaged':_0x3bd245[_0xeefc('0x52')],'waiting':_0x3bd245[_0xeefc('0x53')],'loggedInDb':_0x3bd245[_0xeefc('0x54')],'dialActive':_0x3bd245[_0xeefc('0x55')],'dialMethod':_0x3bd245[_0xeefc('0x56')],'dialOriginateCallerIdName':_0x3bd245[_0xeefc('0x57')],'dialOriginateCallerIdNumber':_0x3bd245[_0xeefc('0x58')],'dialOriginateTimeout':_0x3bd245[_0xeefc('0x59')],'dialPrefix':_0x3bd245[_0xeefc('0x5a')],'outboundAnswerAgiCallsDay':_0x3bd245['outboundAnswerAgiCallsDay'],'outboundAnswerCallsDay':_0x3bd245['outboundAnswerCallsDay'],'outboundBlacklistCallsDay':_0x3bd245[_0xeefc('0x5b')],'outboundBusyCallsDay':_0x3bd245[_0xeefc('0x5c')],'outboundCongestionCallsDay':_0x3bd245[_0xeefc('0x5d')],'outboundDropCallsDayACS':_0x3bd245[_0xeefc('0x5e')],'outboundDropCallsDayCallersExit':_0x3bd245[_0xeefc('0x5f')],'outboundDropCallsDayTimeout':_0x3bd245[_0xeefc('0x60')],'outboundNoAnswerCallsDay':_0x3bd245['outboundNoAnswerCallsDay'],'outboundNoSuchCallsDay':_0x3bd245['outboundNoSuchCallsDay'],'outboundOriginateFailureCallsDay':_0x3bd245[_0xeefc('0x61')],'outboundReCallsDay':_0x3bd245[_0xeefc('0x62')],'outboundRejectCallsDay':_0x3bd245[_0xeefc('0x63')],'outboundUnknownCallsDay':_0x3bd245[_0xeefc('0x64')],'predictiveIntervalAnsweredCalls':_0x3bd245[_0xeefc('0x65')],'predictiveIntervalAvgHoldtime':_0x3bd245[_0xeefc('0x66')],'predictiveIntervalAvgTalktime':_0x3bd245[_0xeefc('0x67')],'predictiveIntervalDroppedCallsCallersExit':_0x3bd245[_0xeefc('0x68')],'predictiveIntervalDroppedCallsTimeout':_0x3bd245[_0xeefc('0x69')],'predictiveIntervalErlangCalls':_0x3bd245['predictiveIntervalErlangCalls'],'predictiveIntervalErlangCallsDroppedCalls':_0x3bd245[_0xeefc('0x6a')],'predictiveIntervalHitRate':_0x3bd245[_0xeefc('0x6b')],'predictiveIntervalLowerLimit':_0x3bd245[_0xeefc('0x6c')],'predictiveIntervalMultiplicativeFactor':_0x3bd245[_0xeefc('0x6d')],'predictiveIntervalPauses':_0x3bd245[_0xeefc('0x6e')],'predictiveIntervalTotalCalls':_0x3bd245[_0xeefc('0x6f')],'message':_0x3bd245[_0xeefc('0x3c')],'originated':_0x3bd245[_0xeefc('0x70')]};if(_0x3bd245[_0xeefc('0x71')]){_0x48aaa7[_0xeefc('0x71')]={'id':_0x3bd245[_0xeefc('0x71')]['id'],'name':_0x3bd245[_0xeefc('0x71')][_0xeefc('0x3a')],'active':_0x3bd245[_0xeefc('0x71')][_0xeefc('0x72')],'callerid':_0x3bd245['Trunk'][_0xeefc('0x73')]};}if(_0x3bd245[_0xeefc('0x3e')]){_0x48aaa7[_0xeefc('0x3e')]={'id':_0x3bd245[_0xeefc('0x3e')]['id'],'name':_0x3bd245[_0xeefc('0x3e')][_0xeefc('0x3a')]};}var _0x285d81=md5(JSON[_0xeefc('0x44')](_0x48aaa7));if(_0x3bd245[_0xeefc('0x2')]!==_0x285d81){_0x3bd245[_0xeefc('0x2')]=_0x285d81;emit(util[_0xeefc('0x74')](_0xeefc('0x75'),_0x48aaa7[_0xeefc('0x3a')]),_0xeefc('0x76'),_0x48aaa7);}}}function emitCampaignSummary(_0x519089){if(_0x519089[_0xeefc('0x49')]===_0xeefc('0x77')){emit(util[_0xeefc('0x74')](_0xeefc('0x78'),_0x519089['name']),'campaign:save',_0x519089);}}function checkGetDataPredictive(_0xa1f268){if(isNotNull(_0xa1f268)){if(!_[_0xeefc('0x42')](_0xa1f268)){if(_0xa1f268[_0xeefc('0x6f')]>0x0){if(!_[_0xeefc('0x38')](_0xa1f268[_0xeefc('0x67')])&&_0xa1f268[_0xeefc('0x67')]>0x0){return!![];}else{loggerPredictive[_0xeefc('0x79')](_0xeefc('0x7a'),JSON['stringify'](_0xa1f268));}if(!_['isUndefined'](_0xa1f268[_0xeefc('0x66')])&&_0xa1f268[_0xeefc('0x66')]>0x0){return!![];}else{loggerPredictive[_0xeefc('0x79')]('[checkGetDataPredictive][avgHoldtime]',JSON[_0xeefc('0x44')](_0xa1f268));}}else{loggerPredictive[_0xeefc('0x79')](_0xeefc('0x7b'),JSON['stringify'](_0xa1f268));}}else{loggerPredictive[_0xeefc('0x79')](_0xeefc('0x7c'),JSON[_0xeefc('0x44')](_0xa1f268));}}else{loggerPredictive[_0xeefc('0x79')](_0xeefc('0x7d'),JSON[_0xeefc('0x44')](_0xa1f268));}return![];}function mergeDataErlangB(_0x5066b7){return function(_0x518fa1){loggerPredictive[_0xeefc('0x79')](_0xeefc('0x7e'),JSON[_0xeefc('0x44')](_0x518fa1));_[_0xeefc('0x7f')](_0x5066b7,_0x518fa1);};}function getDiff(_0xd5108){var _0x547648=moment()[_0xeefc('0x45')](0x0);var _0x27aed7=moment(_0xd5108)[_0xeefc('0x45')](0x0);return _0x547648[_0xeefc('0x46')](_0x27aed7,_0xeefc('0x47'));}function ifInterval(_0x1545ee,_0x492bb3){if(_[_0xeefc('0x38')](_0x492bb3)){return![];}if(getDiff(_0x492bb3)<_0x1545ee*0x3c){return!![];}else{return![];}}function freeVariablesPredictive(_0x32cc84){if(isNotNull(_0x32cc84)){if(!_[_0xeefc('0x38')](_0x32cc84['startProgressive'])){_0x32cc84['startProgressive']=undefined;loggerPredictive[_0xeefc('0x79')](_0xeefc('0x80'),'startProgressive',_0x32cc84[_0xeefc('0x3a')]);}if(!_['isUndefined'](_0x32cc84[_0xeefc('0x24')])){_0x32cc84[_0xeefc('0x24')]=undefined;loggerPredictive[_0xeefc('0x79')](_0xeefc('0x80'),'startPredictive',_0x32cc84[_0xeefc('0x3a')]);}if(!_[_0xeefc('0x38')](_0x32cc84[_0xeefc('0x81')])){clearInterval(_0x32cc84[_0xeefc('0x81')]);_0x32cc84[_0xeefc('0x81')]=undefined;loggerPredictive[_0xeefc('0x79')](_0xeefc('0x80'),_0xeefc('0x81'),_0x32cc84[_0xeefc('0x3a')]);}}}function erlangb(_0x4bb112,_0x4dbabe){if(_0x4dbabe===0x0){return 0x0;}var _0x2faf64=0x1;for(var _0x1f1d6d=0x1;_0x1f1d6d<=_0x4dbabe;_0x1f1d6d+=0x1){_0x2faf64=0x1+_0x2faf64*_0x1f1d6d/_0x4bb112;}return 0x1/_0x2faf64;}function isVoiceQueueOutbound(_0x42eb44){return _0x42eb44===_0xeefc('0x82');}function isNotPreview(_0x269f44){return _0x269f44!==_0xeefc('0x1a');}function isCampaignIvr(_0x4e3264){return _0x4e3264===_0xeefc('0x77');}function getCallerId(_0x40cdb4,_0x5aae1e,_0x4fcbc7){if(!_['isUndefined'](_0x4fcbc7)&&_0xeefc('0x83')===typeof _0x4fcbc7){if(!_[_0xeefc('0x38')](_0x5aae1e)&&'string'===typeof _0x5aae1e){return util[_0xeefc('0x74')](_0xeefc('0x84'),_0x5aae1e,_0x4fcbc7);}return util[_0xeefc('0x74')](_0xeefc('0x84'),_0x4fcbc7,_0x4fcbc7);}if(!_[_0xeefc('0x38')](_0x40cdb4)&&_0xeefc('0x83')===typeof _0x40cdb4){return _0x40cdb4;}return _0xeefc('0x85');}function loggerCatchQueueSummary(_0x1dad14,_0x207173){return function(_0x4246db){freeVariablesPredictive(_0x207173);emitVoiceQueueSummary(_0x207173);emitCampaignSummary(_0x207173);loggerSyncQueueSummary['error'](_0x1dad14,util[_0xeefc('0x86')](_0x4246db,{'showHidden':![],'depth':null}));};}function loggerCatchPredictive(_0x507ee4,_0x4e7189){return function(_0x5c4b71){loggerPredictive[_0xeefc('0x87')](_0x507ee4,JSON['stringify'](_0x5c4b71));freeVariablesPredictive(_0x4e7189);};}function loggerCatch(_0x3259a3){return function(_0xf33d9e){logger['error'](_0x3259a3,util[_0xeefc('0x86')](_0xf33d9e,{'showHidden':![],'depth':null}));};}function checkContactEmpty(_0x1281a7){return _0x1281a7&&!_[_0xeefc('0x38')](_0x1281a7)&&_0x1281a7[_0xeefc('0x88')]>0x0;}function decremetOriginate(_0x3c9b5d){if(!_[_0xeefc('0x38')](_0x3c9b5d)&&_0x3c9b5d!==null){if(_0x3c9b5d[_0xeefc('0x89')](_0xeefc('0x70'))){if(_0x3c9b5d[_0xeefc('0x70')]>0x0){_0x3c9b5d['originated']-=0x1;}else{logger[_0xeefc('0x87')](_0xeefc('0x8a'));}}}else{logger['error'](_0xeefc('0x8b'));}}function checkContactLowerLimitOriginate(_0x3313fa,_0x475473,_0x5d3860){if(_0x475473>_0x5d3860){for(var _0x5c35ef=0x0;_0x5c35ef<_0x475473-_0x5d3860;_0x5c35ef+=0x1){decremetOriginate(_0x3313fa);}}}function loggerGetContactDialer(_0x286c62,_0x3d047b,_0x3842ee){return function(_0x15c728){checkContactLowerLimitOriginate(_0x3d047b,_0x3842ee,0x0);logger[_0xeefc('0x87')](_0x286c62,util[_0xeefc('0x86')](_0x15c728,{'showHidden':![],'depth':null}));};}function sendMessageReschedule(_0x1f5e28){return function(_0x4a5c0a){if(isNotNull(_0x4a5c0a)&&isNotNull(_0x4a5c0a[0x0])){if(_0x4a5c0a[0x0][_0xeefc('0x8c')]>0x0){_0x1f5e28['message']=_0xeefc('0x8d');logger[_0xeefc('0x79')](_0xeefc('0x8e')+_0x1f5e28['name'],_0x4a5c0a[0x0][_0xeefc('0x8c')],'contacts');}else{_0x1f5e28[_0xeefc('0x3c')]='AVAILABLE_CONTACTS_FINISHED';logger[_0xeefc('0x79')](_0xeefc('0x8f')+_0x1f5e28[_0xeefc('0x3a')]);}}};}function notSendMessagesQueue(_0x29ed27){if(_0x29ed27[_0xeefc('0x90')]){freeVariablesPredictive(_0x29ed27);if(_0x29ed27[_0xeefc('0x70')]===0x0&&_0x29ed27['talking']===0x0&&_0x29ed27['waiting']===0x0&&(_0x29ed27[_0xeefc('0x91')]||0x0)===0x0){_0x29ed27[_0xeefc('0x90')]=![];_0x29ed27['available']=0x0;_0x29ed27[_0xeefc('0x3c')]=_0xeefc('0x3d');loggerSyncQueueSummary['error']('[syncQueueSummary]\x20Campaign\x20Queue:\x20',_0x29ed27[_0xeefc('0x3a')],_0xeefc('0x92'));}else{_0x29ed27[_0xeefc('0x3c')]=_0xeefc('0x93');loggerSyncQueueSummary[_0xeefc('0x87')](_0xeefc('0x94'),_0x29ed27[_0xeefc('0x3a')],_0xeefc('0x95'));}emitVoiceQueueSummary(_0x29ed27);}}function notSendMessagesCampaign(_0x40a8be){if(_0x40a8be[_0xeefc('0x90')]){if(_0x40a8be['originated']===0x0){_0x40a8be[_0xeefc('0x90')]=![];_0x40a8be[_0xeefc('0x3c')]=_0xeefc('0x3d');loggerSyncQueueSummary['error'](_0xeefc('0x96'),_0x40a8be[_0xeefc('0x3a')],_0xeefc('0x92'));}else{_0x40a8be[_0xeefc('0x3c')]=_0xeefc('0x93');loggerSyncQueueSummary[_0xeefc('0x87')](_0xeefc('0x96'),_0x40a8be['name'],_0xeefc('0x95'));}emitCampaignSummary(_0x40a8be);}}function createObjHistory(_0x32d406,_0x46a276,_0x285fb4,_0x330002,_0xb61154){_0x32d406[_0xeefc('0x3c')]=_0x285fb4;var _0x2bd471=new Action(_0x32d406,_0x46a276);var _0xcbadd6=new History(_0x2bd471);_0xcbadd6['state']=_0x330002;_0xcbadd6[_0xeefc('0x97')]=_0xb61154;_0xcbadd6['endtime']=_0x2bd471[_0xeefc('0x98')];return _0xcbadd6;}Dialer[_0xeefc('0x16')][_0xeefc('0x99')]=function(){var _0x27539f=this;setInterval(function(){_0x27539f[_0xeefc('0x9a')](_0x27539f[_0xeefc('0x9b')],_0xeefc('0x9c'));_0x27539f['clearZombieChannels'](_0x27539f['actions'],'[actions]');},0x32c8);};Dialer['prototype']['clearZombieChannels']=function(_0x243832,_0x4f0d3d){var _0x28d2a3=this;for(var _0x2fc9bf in _0x243832){if(_0x243832[_0xeefc('0x89')](_0x2fc9bf)){this['sequence'][_0xeefc('0x17')](function(){if(!_[_0xeefc('0x9d')](_0x243832[_0x2fc9bf])){return ami[_0xeefc('0x9e')]({'action':_0xeefc('0x9f'),'channel':_0x243832[_0x2fc9bf][_0xeefc('0xa0')]})['catch'](function(_0x487268){if(_0x487268[_0xeefc('0x3c')]===_0xeefc('0xa1')){setTimeout(function(){if(_0x243832[_0x2fc9bf]&&_0x243832[_0x2fc9bf][_0xeefc('0x49')]!=='ivr'){_0x28d2a3[_0xeefc('0xa2')](_0x28d2a3[_0xeefc('0x1b')][_0x243832[_0x2fc9bf][_0xeefc('0xa3')]]);logger[_0xeefc('0x87')](_0xeefc('0xa4'),_0x4f0d3d,_0x2fc9bf,_0x243832[_0x2fc9bf][_0xeefc('0xa3')]);delete _0x243832[_0x2fc9bf];}if(_0x243832[_0x2fc9bf]&&_0x243832[_0x2fc9bf]['type']===_0xeefc('0x77')){_0x28d2a3[_0xeefc('0xa2')](_0x28d2a3[_0xeefc('0x1c')][_0x243832[_0x2fc9bf][_0xeefc('0xa3')]]);logger['error'](_0xeefc('0xa5'),_0x4f0d3d,_0x2fc9bf,_0x243832[_0x2fc9bf]['queue']);delete _0x243832[_0x2fc9bf];}},0x2328);}});}});}}};Dialer[_0xeefc('0x16')][_0xeefc('0xa6')]=function(_0x397e8f){return BPromise[_0xeefc('0xa7')]()[_0xeefc('0xa8')](cmHopper[_0xeefc('0xa6')](_0x397e8f))['catch'](loggerCatch(_0xeefc('0xa9')));};Dialer['prototype']['checkIsBlackList']=function(_0x141660){return BPromise[_0xeefc('0xa7')]()['then'](cmHopperBlack[_0xeefc('0xaa')](_0x141660))[_0xeefc('0xab')](loggerCatch('[checkIsBlackList]\x20'));};Dialer['prototype'][_0xeefc('0xac')]=function(_0x1d27d2){return BPromise['resolve']()['then'](cmHopperBlack['checkIsBlackListIvr'](_0x1d27d2))[_0xeefc('0xab')](loggerCatch(_0xeefc('0xad')));};Dialer[_0xeefc('0x16')]['averageHandleTime']=function(_0x38dcb1){return BPromise['resolve']()[_0xeefc('0xa8')](cmHopperHistory[_0xeefc('0xae')](_0x38dcb1))[_0xeefc('0xab')](loggerCatch(_0xeefc('0xaf')));};Dialer[_0xeefc('0x16')][_0xeefc('0xb0')]=function(_0x3f80be){return BPromise['resolve']()['then'](cmHopper[_0xeefc('0xb0')](_0x3f80be))[_0xeefc('0xab')](loggerCatch(_0xeefc('0xb1')));};Dialer[_0xeefc('0x16')][_0xeefc('0xb2')]=function(_0xe85a6a,_0xfa3b15,_0x439df4,_0x22ca30){return BPromise[_0xeefc('0xa7')]()['then'](cmHopper[_0xeefc('0xb2')](_0xe85a6a,_0xfa3b15,_0x439df4,_0x22ca30))[_0xeefc('0xab')](loggerCatch(_0xeefc('0xb3')));};Dialer[_0xeefc('0x16')][_0xeefc('0xb4')]=function(_0x3c94b1,_0x1165fd,_0x586ae2){return BPromise[_0xeefc('0xa7')]()[_0xeefc('0xa8')](cmHopper[_0xeefc('0xb4')](_0x3c94b1,_0x1165fd,_0x586ae2))[_0xeefc('0xab')](loggerCatch(_0xeefc('0xb3')));};Dialer[_0xeefc('0x16')]['getVoiceQueueRtPauses']=function(_0x3b6ada){return BPromise['resolve']()[_0xeefc('0xa8')](voiceQueueRt['getVoiceQueueRtPauses'](_0x3b6ada))[_0xeefc('0xab')](loggerCatch(_0xeefc('0xb5')));};Dialer[_0xeefc('0x16')]['moveContactManagedDialer']=function(_0xa53e38){return BPromise[_0xeefc('0xa7')]()['then'](cmHopper[_0xeefc('0xb6')](_0xa53e38))['catch'](loggerCatch('[moveContactManagedDialer]\x20'));};Dialer['prototype'][_0xeefc('0xb7')]=function(_0x5e85e7){return BPromise[_0xeefc('0xa7')]()['then'](cmHopperHistory[_0xeefc('0xb7')](_0x5e85e7))['catch'](loggerCatch('[createHistory]\x20'));};Dialer[_0xeefc('0x16')][_0xeefc('0xa2')]=function(_0x794487){if(!_[_0xeefc('0x38')](_0x794487)&&_0x794487!==null){if(_0x794487[_0xeefc('0x89')](_0xeefc('0x70'))){if(_0x794487['originated']>0x0){_0x794487[_0xeefc('0x70')]-=0x1;}else{logger[_0xeefc('0x87')](_0xeefc('0xb8'));}}}else{logger[_0xeefc('0x87')](_0xeefc('0xb9'));}};Dialer[_0xeefc('0x16')][_0xeefc('0xba')]=function(_0x293fee,_0x3e053a){var _0x296551=this;return function(_0x73766){_0x296551[_0xeefc('0xa2')](_0x3e053a);logger[_0xeefc('0x87')](_0x293fee,util[_0xeefc('0x86')](_0x73766,{'showHidden':![],'depth':null}));};};Dialer[_0xeefc('0x16')]['emptyContact']=function(_0x4e9801,_0x21c9a9,_0x4a6a5c){var _0x39d7c4={'state':0x19,'statedesc':_0xeefc('0xbb')};this[_0xeefc('0xa2')](_0x21c9a9);this[_0xeefc('0xbc')](_['merge'](_0x39d7c4,_[_0xeefc('0xbd')](_0x4a6a5c,[_0xeefc('0xbe'),'ListId',_0xeefc('0xbf'),'VoiceQueueId',_0xeefc('0xc0')])),_0xeefc('0xc1'),_0xeefc('0xc2'));logger['error'](_0x4e9801);};Dialer[_0xeefc('0x16')]['isSuccess']=function(_0x30b582){return _0x30b582==='Success';};Dialer[_0xeefc('0x16')]['isTrunkReachable']=function(_0x1eba78){return!_[_0xeefc('0x38')](_0x1eba78)&&_0x1eba78&&!_[_0xeefc('0x38')](_0x1eba78[_0xeefc('0x3a')])&&!_[_0xeefc('0x38')](_0x1eba78[_0xeefc('0x72')])&&_0x1eba78['active']&&(this[_0xeefc('0x1e')][util[_0xeefc('0x74')](_0xeefc('0xc3'),_0x1eba78[_0xeefc('0x3a')])]['status']===_0xeefc('0xc4')||this[_0xeefc('0x1e')][util['format'](_0xeefc('0xc3'),_0x1eba78['name'])]['status']===_0xeefc('0xc5'));};Dialer[_0xeefc('0x16')][_0xeefc('0xbc')]=function(_0x2b39d0,_0x5647c5,_0x1a763a){this[_0xeefc('0xb7')](_0x2b39d0)[_0xeefc('0xab')](loggerCatch(_0x5647c5));this[_0xeefc('0xb6')](_0x2b39d0)[_0xeefc('0xab')](loggerCatch(_0x1a763a));};Dialer[_0xeefc('0x16')][_0xeefc('0xc6')]=function(_0x18ec20){var _0x48901a=this[_0xeefc('0x9b')][_0x18ec20[_0xeefc('0xc7')]];var _0x41e20e;if(!_[_0xeefc('0x9d')](_0x18ec20)&&!_[_0xeefc('0x9d')](_0x18ec20[_0xeefc('0xc8')])&&!_[_0xeefc('0x9d')](_0x18ec20[_0xeefc('0xc8')][_0xeefc('0xc9')])&&_0x18ec20[_0xeefc('0xca')]==='xcally-motion-dialer'&&_0x48901a){if(_0x48901a['type']!=='ivr'&&this[_0xeefc('0x1b')][_0x48901a[_0xeefc('0xa3')]][_0xeefc('0xcb')]&&_0x18ec20[_0xeefc('0xcc')]==='HANGUP'){delete this[_0xeefc('0x9b')][_0x18ec20['uniqueid']];this[_0xeefc('0xa2')](this[_0xeefc('0x1b')][_0x48901a[_0xeefc('0xa3')]]);this['voiceQueues'][_0x48901a['queue']]['outboundAnswerCallsDay']+=0x1;this['voiceQueues'][_0x48901a[_0xeefc('0xa3')]]['outboundAnswerAgiCallsDay']+=0x1;_0x41e20e=new Hangup(_0x48901a,_0x18ec20);_0x41e20e[_0xeefc('0xcd')]=0x12;_0x41e20e[_0xeefc('0x97')]=_0xeefc('0xce');_0x41e20e[_0xeefc('0xcf')]='AMD';this[_0xeefc('0xbc')](_0x41e20e,_0xeefc('0xd0'),_0xeefc('0xd1'));}if(_0x48901a['type']!=='ivr'&&this[_0xeefc('0x1b')][_0x48901a['queue']][_0xeefc('0xcb')]&&_0x18ec20['value']==='MACHINE'){delete this['uniqueId'][_0x18ec20[_0xeefc('0xc7')]];this[_0xeefc('0xa2')](this[_0xeefc('0x1b')][_0x48901a['queue']]);this[_0xeefc('0x1b')][_0x48901a['queue']][_0xeefc('0xd2')]+=0x1;this[_0xeefc('0x1b')][_0x48901a[_0xeefc('0xa3')]]['outboundAnswerAgiCallsDay']+=0x1;_0x41e20e=new Hangup(_0x48901a,_0x18ec20);_0x41e20e[_0xeefc('0xcd')]=0x13;_0x41e20e[_0xeefc('0x97')]=_0xeefc('0xd3');_0x41e20e[_0xeefc('0xcf')]='AMD';_0x41e20e[_0xeefc('0xd4')]=!![];this['saveInDb'](_0x41e20e,'[syncMachine][createHistory]','[syncMachine]');}if(_0x48901a[_0xeefc('0x49')]==='ivr'&&this[_0xeefc('0x1c')][_0x48901a[_0xeefc('0xa3')]]['dialAMDActive']&&_0x18ec20['value']===_0xeefc('0xd5')){delete this['uniqueId'][_0x18ec20[_0xeefc('0xc7')]];this[_0xeefc('0xa2')](this['campaigns'][_0x48901a[_0xeefc('0xa3')]]);_0x41e20e=new Hangup(_0x48901a,_0x18ec20);_0x41e20e['state']=0x12;_0x41e20e[_0xeefc('0x97')]=_0xeefc('0xce');_0x41e20e[_0xeefc('0xcf')]=_0xeefc('0xd6');this[_0xeefc('0xbc')](_0x41e20e,_0xeefc('0xd7'),'[syncHangupInAMDIvr]');}if(_0x48901a[_0xeefc('0x49')]==='ivr'&&this[_0xeefc('0x1c')][_0x48901a[_0xeefc('0xa3')]][_0xeefc('0xcb')]&&_0x18ec20[_0xeefc('0xcc')]===_0xeefc('0xd8')){delete this['uniqueId'][_0x18ec20[_0xeefc('0xc7')]];this[_0xeefc('0xa2')](this[_0xeefc('0x1c')][_0x48901a[_0xeefc('0xa3')]]);_0x41e20e=new Hangup(_0x48901a,_0x18ec20);_0x41e20e[_0xeefc('0xcd')]=0x13;_0x41e20e['statedesc']=_0xeefc('0xd3');_0x41e20e[_0xeefc('0xcf')]='AMD';_0x41e20e[_0xeefc('0xd4')]=!![];this[_0xeefc('0xbc')](_0x41e20e,_0xeefc('0xd9'),_0xeefc('0xda'));}}};Dialer[_0xeefc('0x16')][_0xeefc('0x31')]=function(_0x257d61){var _0x3a4f1b=this['uniqueId'][_0x257d61[_0xeefc('0xc7')]];var _0x55cec5=this;var _0x510643;if(_0x3a4f1b&&_0x3a4f1b['type']===_0xeefc('0x77')){delete this[_0xeefc('0x9b')][_0x257d61[_0xeefc('0xc7')]];this[_0xeefc('0xa2')](this[_0xeefc('0x1c')][_0x3a4f1b[_0xeefc('0xa3')]]);this['campaigns'][_0x3a4f1b[_0xeefc('0xa3')]][_0xeefc('0xdb')]+=0x1;_0x510643=new Hangup(_0x3a4f1b,_0x257d61);this[_0xeefc('0xb7')](_0x510643)[_0xeefc('0xab')](loggerCatch(_0xeefc('0xdc')));this[_0xeefc('0xb6')](_0x510643)[_0xeefc('0xab')](loggerCatch(_0xeefc('0xdd')));}if(_0x3a4f1b&&_0x3a4f1b[_0xeefc('0x49')]!==_0xeefc('0x77')&&isNotNull(this[_0xeefc('0x1b')][_0x3a4f1b[_0xeefc('0xa3')]][_0xeefc('0xde')])){delete this[_0xeefc('0x9b')][_0x257d61['uniqueid']];this[_0xeefc('0xa2')](this[_0xeefc('0x1b')][_0x3a4f1b[_0xeefc('0xa3')]]);this[_0xeefc('0x1b')][_0x3a4f1b[_0xeefc('0xa3')]][_0xeefc('0xd2')]+=0x1;this[_0xeefc('0x1b')][_0x3a4f1b[_0xeefc('0xa3')]][_0xeefc('0xdf')]+=0x1;_0x510643=new Hangup(_0x3a4f1b,_0x257d61);_0x510643[_0xeefc('0xcd')]=0x10;_0x510643[_0xeefc('0x97')]=_0xeefc('0xe0');_0x510643[_0xeefc('0xcf')]='AGI';this['createHistory'](_0x510643)['catch'](loggerCatch(_0xeefc('0xdc')));this[_0xeefc('0xb6')](_0x510643)[_0xeefc('0xab')](loggerCatch(_0xeefc('0xdd')));}if(_0x3a4f1b&&_0x3a4f1b[_0xeefc('0x49')]!==_0xeefc('0x77')&&!isNotNull(this['voiceQueues'][_0x3a4f1b[_0xeefc('0xa3')]][_0xeefc('0xde')])){delete this[_0xeefc('0x9b')][_0x257d61[_0xeefc('0xc7')]];this[_0xeefc('0xa2')](this[_0xeefc('0x1b')][_0x3a4f1b[_0xeefc('0xa3')]]);this[_0xeefc('0x1b')][_0x3a4f1b[_0xeefc('0xa3')]][_0xeefc('0x64')]+=0x1;_0x510643=new Hangup(_0x3a4f1b,_0x257d61);_0x510643['state']=0xc;_0x510643[_0xeefc('0x97')]=_0x257d61[_0xeefc('0xe1')];_0x510643[_0xeefc('0xcf')]='Unknow';this['createHistory'](_0x510643)[_0xeefc('0xab')](loggerCatch(_0xeefc('0xdc')));this['moveContactManagedDialer'](_0x510643)[_0xeefc('0xab')](loggerCatch(_0xeefc('0xdd')));}};Dialer['prototype'][_0xeefc('0x2e')]=function(_0x487a36){var _0x571c48=this['uniqueId'][_0x487a36[_0xeefc('0xc7')]];var _0xe00ce7=this;if(this['voiceQueues'][_0x487a36['queue']]){if(_0x571c48&&_0x571c48[_0xeefc('0x49')]!==_0xeefc('0x77')){delete this[_0xeefc('0x9b')][_0x487a36[_0xeefc('0xc7')]];this[_0xeefc('0x1b')][_0x487a36['queue']]['outboundAnswerCallsDay']+=0x1;var _0xb1a289=new AgentComplete(_0x571c48,_0x487a36);if(_0x487a36[_0xeefc('0xe2')]===_0xeefc('0xe3')){_0xb1a289['agiafterat']=this[_0xeefc('0x1b')][_0x487a36[_0xeefc('0xa3')]][_0xeefc('0xe4')]&&this[_0xeefc('0x1b')][_0x487a36[_0xeefc('0xa3')]]['dialAgiAfterHangupAgent']?moment()[_0xeefc('0x74')](_0xeefc('0xe5')):undefined;}this['createHistory'](_0xb1a289)[_0xeefc('0xab')](loggerCatch('[syncAgentComplete][createHistory]'));this['moveContactManagedDialer'](_0xb1a289)[_0xeefc('0xab')](loggerCatch(_0xeefc('0xe6')));}}};Dialer[_0xeefc('0x16')]['syncAgentConnect']=function(_0x10af44){if(this['voiceQueues'][_0x10af44[_0xeefc('0xa3')]]){if(this['uniqueId'][_0x10af44['uniqueid']]&&this[_0xeefc('0x9b')][_0x10af44[_0xeefc('0xc7')]][_0xeefc('0x49')]!==_0xeefc('0x77')){this['updateOriginated'](this[_0xeefc('0x1b')][_0x10af44[_0xeefc('0xa3')]]);this[_0xeefc('0x9b')][_0x10af44[_0xeefc('0xc7')]]['answertime']=moment()[_0xeefc('0x74')]('YYYY-MM-DD\x20HH:mm:ss');}}};Dialer['prototype'][_0xeefc('0xe7')]=function(_0x3c4ac6){this['createHistory'](_0x3c4ac6)[_0xeefc('0xab')](loggerCatch(_0xeefc('0xe8')));this['moveContactManagedDialer'](_0x3c4ac6)[_0xeefc('0xab')](loggerCatch(_0xeefc('0xe9')));};Dialer[_0xeefc('0x16')][_0xeefc('0x2b')]=function(_0x2d6e78){var _0x4151df=this[_0xeefc('0x9b')][_0x2d6e78['uniqueid']];var _0x4aee05=this;if(this[_0xeefc('0x1b')][_0x2d6e78['queue']]){if(_0x4151df&&_0x4151df[_0xeefc('0x49')]!==_0xeefc('0x77')){delete this[_0xeefc('0x9b')][_0x2d6e78[_0xeefc('0xc7')]];this[_0xeefc('0xa2')](this[_0xeefc('0x1b')][_0x2d6e78[_0xeefc('0xa3')]]);_0x4151df[_0xeefc('0xea')]=moment()[_0xeefc('0x74')](_0xeefc('0xe5'));var _0x12f53a=new QueueCallerAbandon(_0x4151df,_0x2d6e78);if(getSeconds(_0x4151df[_0xeefc('0xea')],_0x4151df[_0xeefc('0xeb')])>=_0x4151df[_0xeefc('0xec')]){this[_0xeefc('0x1b')][_0x2d6e78[_0xeefc('0xa3')]][_0xeefc('0x69')]+=0x1;this[_0xeefc('0x1b')][_0x2d6e78['queue']][_0xeefc('0x60')]+=0x1;this[_0xeefc('0x1b')][_0x2d6e78['queue']][_0xeefc('0x6a')]+=0x1;_0x12f53a[_0xeefc('0xcd')]=0xa;_0x12f53a[_0xeefc('0x97')]=_0xeefc('0xed');_0x12f53a[_0xeefc('0xee')]='TIMEOUT';_0x12f53a[_0xeefc('0xef')]=this[_0xeefc('0x1b')][_0x2d6e78[_0xeefc('0xa3')]][_0xeefc('0xe4')]?moment()[_0xeefc('0x74')]('YYYY-MM-DD\x20HH:mm:ss'):undefined;this['queueCallerAbandonCreateState'](_0x12f53a);}else{this[_0xeefc('0x1b')][_0x2d6e78[_0xeefc('0xa3')]][_0xeefc('0x68')]+=0x1;this['voiceQueues'][_0x2d6e78['queue']]['outboundDropCallsDayCallersExit']+=0x1;_0x12f53a['state']=0xb;_0x12f53a[_0xeefc('0x97')]=_0xeefc('0xf0');_0x12f53a[_0xeefc('0xee')]='CALLEREXIT';this[_0xeefc('0xe7')](_0x12f53a);}}}};Dialer[_0xeefc('0x16')]['syncNewExten']=function(_0x14c825){if(this[_0xeefc('0x21')][_0x14c825[_0xeefc('0xc7')]]){this['actions'][_0x14c825[_0xeefc('0xc7')]][_0xeefc('0xa0')]=_0x14c825[_0xeefc('0xa0')];}if(this[_0xeefc('0x9b')][_0x14c825[_0xeefc('0xc7')]]){this[_0xeefc('0x9b')][_0x14c825[_0xeefc('0xc7')]][_0xeefc('0xa0')]=_0x14c825[_0xeefc('0xa0')];}};Dialer[_0xeefc('0x16')]['syncQueueMember']=function(_0x26b5aa){if(strategy[this[_0xeefc('0x1b')][this[_0xeefc('0x21')][_0x26b5aa[_0xeefc('0xf1')]][_0xeefc('0xa3')]][_0xeefc('0x4a')]]===_0xeefc('0x15')){if(this[_0xeefc('0x21')][_0x26b5aa[_0xeefc('0xf1')]]&&_['isNil'](this[_0xeefc('0x21')][_0x26b5aa[_0xeefc('0xf1')]][_0xeefc('0xf2')])&&_0x26b5aa[_0xeefc('0x9f')]==='1'&&_0x26b5aa[_0xeefc('0xf3')]==='0'){if(this[_0xeefc('0x1d')][_0x26b5aa[_0xeefc('0xf4')]]){if(!this[_0xeefc('0x1d')][_0x26b5aa['stateinterface']]['locked']){this[_0xeefc('0x1d')][_0x26b5aa[_0xeefc('0xf4')]]['locked']=!![];this[_0xeefc('0x21')][_0x26b5aa[_0xeefc('0xf1')]]['locked']=!![];this[_0xeefc('0x21')][_0x26b5aa[_0xeefc('0xf1')]][_0xeefc('0xf4')]=_0x26b5aa[_0xeefc('0xf4')];}}}}else if((strategy[this['voiceQueues'][this['actions'][_0x26b5aa['actionid']][_0xeefc('0xa3')]]['strategy']]||_0xeefc('0x14'))==='rrmemory'){if(this[_0xeefc('0x21')][_0x26b5aa[_0xeefc('0xf1')]]){if(this[_0xeefc('0x1d')][_0x26b5aa[_0xeefc('0xf4')]]){this[_0xeefc('0x21')][_0x26b5aa[_0xeefc('0xf1')]][_0xeefc('0xf4')]=_0x26b5aa[_0xeefc('0xf4')];if(_[_0xeefc('0x9d')](this['queueBooked'][this['actions'][_0x26b5aa[_0xeefc('0xf1')]][_0xeefc('0xa3')]])){this[_0xeefc('0xf5')][this[_0xeefc('0x21')][_0x26b5aa[_0xeefc('0xf1')]][_0xeefc('0xa3')]]=[];}this[_0xeefc('0xf5')][this[_0xeefc('0x21')][_0x26b5aa['actionid']][_0xeefc('0xa3')]][_0xeefc('0xf6')](_[_0xeefc('0x7f')](_[_0xeefc('0xbd')](this[_0xeefc('0x21')][_0x26b5aa['actionid']],[_0xeefc('0xf7'),_0xeefc('0xf4')]),{'status':_0x26b5aa[_0xeefc('0x9f')],'paused':_0x26b5aa[_0xeefc('0xf3')]}));}}}};function unlockQueueStatus(_0x5911d3,_0x4609c2){setTimeout(function(){if(_['isUndefined'](_0x5911d3[_0xeefc('0xf8')])){loggerBooked[_0xeefc('0x87')](_0xeefc('0xf9'),_0x4609c2);}_0x5911d3[_0xeefc('0xf8')]=!![];loggerBooked[_0xeefc('0x79')](_0xeefc('0xfa'),_0x4609c2,JSON[_0xeefc('0x44')](_['pick'](_0x5911d3,['name',_0xeefc('0xf8')])));},0x1f3);}Dialer[_0xeefc('0x16')][_0xeefc('0xfb')]=function(_0x3ba92e){var _0x3909b3=this;var _0x3b7bad=_0x3909b3[_0xeefc('0x1b')][_0x3909b3[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]];if(strategy[this['voiceQueues'][this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]][_0xeefc('0x4a')]]===_0xeefc('0x15')){if(this[_0xeefc('0x21')][_0x3ba92e['actionid']]&&this['actions'][_0x3ba92e[_0xeefc('0xf1')]]['stateinterface']){this[_0xeefc('0x1a')][_0xeefc('0xfc')](this['actions'][_0x3ba92e[_0xeefc('0xf1')]]['idHopper'],this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xf4')])['catch'](function(_0x403921){logger['error']('[Catch][Preview][syncQueueStatusComplete]',util['inspect'](_0x403921,{'showHidden':![],'depth':null}));})['finally'](function(){_0x3909b3[_0xeefc('0xa2')](_0x3909b3['voiceQueues'][_0x3909b3[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]]);_0x3909b3[_0xeefc('0x1d')][_0x3909b3[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]]['stateinterface']][_0xeefc('0xf2')]=![];delete _0x3909b3['actions'][_0x3ba92e[_0xeefc('0xf1')]];unlockQueueStatus(_0x3b7bad);});}else{this[_0xeefc('0xa2')](this['voiceQueues'][this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]]['queue']]);this[_0xeefc('0xb0')]({'active':![],'ContactId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]]['ContactId'],'ListId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xfd')],'VoiceQueueId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]]['VoiceQueueId']||undefined,'CampaignId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xc0')]||undefined})[_0xeefc('0xab')](loggerCatch(_0xeefc('0xfe')));delete this['actions'][_0x3ba92e[_0xeefc('0xf1')]];unlockQueueStatus(_0x3b7bad);}}else if((strategy[this['voiceQueues'][this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]]['strategy']]||_0xeefc('0x14'))==='rrmemory'){var _0x3c84ea;if(this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]]&&!_[_0xeefc('0x42')](this[_0xeefc('0xf5')][this['actions'][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]])){if(this[_0xeefc('0x26')][_0x3909b3[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]]){this['queueBookedRR'][_0x3909b3['actions'][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]]=this['queueBookedRR'][this[_0xeefc('0x21')][_0x3ba92e['actionid']][_0xeefc('0xa3')]]?this[_0xeefc('0x26')][this['actions'][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]]:this[_0xeefc('0xf5')][this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]]['queue']]?this[_0xeefc('0xf5')][this['actions'][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]][_0xeefc('0xff')]||0x0:0x0;}this[_0xeefc('0xf5')][this[_0xeefc('0x21')][_0x3ba92e['actionid']][_0xeefc('0xa3')]][_0xeefc('0xff')]=this[_0xeefc('0x26')][this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]];for(var _0x1ce250=0x0;_0x1ce250<this['queueBooked'][this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]][_0xeefc('0x88')];_0x1ce250+=0x1){_0x3c84ea=rr(this[_0xeefc('0xf5')][this[_0xeefc('0x21')][_0x3ba92e['actionid']]['queue']]);this['queueBookedRR'][_0x3909b3[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]]=this[_0xeefc('0xf5')][this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]][_0xeefc('0xff')];if(_0x3c84ea['status']==='1'&&_0x3c84ea[_0xeefc('0xf3')]==='0'){break;}}if(!_['isNil'](_0x3c84ea)){this[_0xeefc('0x1d')][_0x3c84ea[_0xeefc('0xf4')]][_0xeefc('0x100')]=_[_0xeefc('0x38')](this[_0xeefc('0x1d')][_0x3c84ea['stateinterface']][_0xeefc('0x100')])?!![]:this[_0xeefc('0x1d')][_0x3c84ea['stateinterface']]['unlockRR'];}loggerBooked['info'](_0xeefc('0x101'),_0x3ba92e[_0xeefc('0xf1')],'Agent:\x20',JSON[_0xeefc('0x44')](_[_0xeefc('0xbd')](this[_0xeefc('0x1d')][_0x3c84ea['stateinterface']],[_0xeefc('0x3a'),'unlockRR'])),_0xeefc('0x102'),JSON[_0xeefc('0x44')](_0x3c84ea['idHopper']));if(!_[_0xeefc('0x9d')](_0x3c84ea)&&_0x3c84ea['status']==='1'&&_0x3c84ea[_0xeefc('0xf3')]==='0'&&this[_0xeefc('0x1d')][_0x3c84ea[_0xeefc('0xf4')]]['unlockRR']){this[_0xeefc('0x1d')][_0x3c84ea[_0xeefc('0xf4')]][_0xeefc('0x100')]=![];this[_0xeefc('0xf5')][_0x3909b3[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]]['queue']]=[];this[_0xeefc('0x1a')][_0xeefc('0xfc')](_0x3c84ea[_0xeefc('0xf7')],_0x3c84ea[_0xeefc('0xf4')])[_0xeefc('0xab')](function(_0x5e9147){logger['error'](_0xeefc('0x103'),util[_0xeefc('0x86')](_0x5e9147,{'showHidden':![],'depth':null}));})[_0xeefc('0x19')](function(){_0x3909b3['updateOriginated'](_0x3909b3['voiceQueues'][_0x3909b3[_0xeefc('0x21')][_0x3ba92e['actionid']][_0xeefc('0xa3')]]);setTimeout(function(){_0x3909b3[_0xeefc('0x1d')][_0x3c84ea[_0xeefc('0xf4')]][_0xeefc('0x100')]=!![];loggerBooked[_0xeefc('0x79')]('[booked][RR][finaly]',_0x3ba92e[_0xeefc('0xf1')],_0xeefc('0x104'),JSON['stringify'](_[_0xeefc('0xbd')](_0x3909b3[_0xeefc('0x1d')][_0x3c84ea['stateinterface']],[_0xeefc('0x3a'),_0xeefc('0x100')])),_0xeefc('0x102'),JSON[_0xeefc('0x44')](_0x3c84ea[_0xeefc('0xf7')]));},0xc7);delete _0x3909b3[_0xeefc('0x21')][_0x3ba92e['actionid']];unlockQueueStatus(_0x3b7bad,_0x3ba92e[_0xeefc('0xf1')]);});}else{loggerBooked[_0xeefc('0x79')](_0xeefc('0x105'));this[_0xeefc('0xa2')](this['voiceQueues'][this['actions'][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]]);this[_0xeefc('0xb0')]({'active':![],'ContactId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xbe')],'ListId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xfd')],'VoiceQueueId':this['actions'][_0x3ba92e['actionid']][_0xeefc('0x106')]||undefined,'CampaignId':this[_0xeefc('0x21')][_0x3ba92e['actionid']][_0xeefc('0xc0')]||undefined})[_0xeefc('0xab')](loggerCatch(_0xeefc('0xfe')));delete this[_0xeefc('0x21')][_0x3ba92e['actionid']];unlockQueueStatus(_0x3b7bad);}}else{loggerBooked[_0xeefc('0x79')](_0xeefc('0x107'));this['updateOriginated'](this[_0xeefc('0x1b')][this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]]);this[_0xeefc('0xb0')]({'active':![],'ContactId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xbe')],'ListId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xfd')],'VoiceQueueId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0x106')]||undefined,'CampaignId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xc0')]||undefined})['catch'](loggerCatch(_0xeefc('0x108')));delete this['actions'][_0x3ba92e[_0xeefc('0xf1')]];unlockQueueStatus(_0x3b7bad);}}else{loggerBooked['info'](_0xeefc('0x109'));this['updateOriginated'](this['voiceQueues'][this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xa3')]]);this['rescheduleContact']({'active':![],'ContactId':this[_0xeefc('0x21')][_0x3ba92e['actionid']][_0xeefc('0xbe')],'ListId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]]['ListId'],'VoiceQueueId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0x106')]||undefined,'CampaignId':this[_0xeefc('0x21')][_0x3ba92e[_0xeefc('0xf1')]][_0xeefc('0xc0')]||undefined})[_0xeefc('0xab')](loggerCatch(_0xeefc('0x10a')));delete this['actions'][_0x3ba92e[_0xeefc('0xf1')]];unlockQueueStatus(_0x3b7bad);}};Dialer['prototype'][_0xeefc('0x37')]=function(){var _0x523c68=this;setInterval(function(){_0x523c68['syncCampaigns']();},0x3e8);};Dialer['prototype'][_0xeefc('0x10b')]=function(_0x1d6d8a){var _0x2e675d=this;return function(){if(!_0x2e675d[_0xeefc('0x10c')](_0x1d6d8a[_0xeefc('0x71')])){if(!_0x2e675d['isTrunkReachable'](_0x1d6d8a[_0xeefc('0x10d')])){_0x1d6d8a['message']='TRUNK_IS_NOT_REACHABLE';throw _0x1d6d8a['name']+_0xeefc('0x10e');}}};};Dialer[_0xeefc('0x16')][_0xeefc('0x10f')]=function(_0x4dc1b7,_0x4d9715,_0x4fff61,_0x2ec7a1){var _0x5f1fd6=this;return function(){var _0x5e8219=!![];return _0x5f1fd6[_0xeefc('0x110')](_0x4dc1b7,_0x4d9715,_0x4fff61,_0x2ec7a1,_0x5e8219);};};Dialer[_0xeefc('0x16')]['checkIfTimeIntervals']=function(_0x4d2ef6,_0x4abad9,_0x32dbb8,_0x15c744){var _0x549654=this;return function(){var _0x6caab0=![];return _0x549654['ifTime'](_0x4d2ef6[_0xeefc('0x41')],_0x4abad9,_0x32dbb8,_0x15c744,_0x6caab0);};};Dialer[_0xeefc('0x16')][_0xeefc('0x110')]=function(_0x1f21d1,_0x557a9d,_0x2a48c4,_0x193986,_0x4bab1d){var _0x94d693=[];return new BPromise(function(_0x23aa89,_0xae57c){if(!isNotNull(_0x1f21d1)){_0x193986['message']=_0xeefc('0x3f');return _0xae57c(msgResponse(_0xeefc('0x110'),_0xeefc('0x111'),_0x2a48c4+_0xeefc('0x112')));}if(_[_0xeefc('0x42')](_0x1f21d1)){_0x193986[_0xeefc('0x3c')]=_0xeefc('0x113');return _0xae57c(msgResponse(_0xeefc('0x110'),'Failure',_0x2a48c4+'\x20Intervals\x20is\x20empty\x20'));}if(_0x557a9d&&_['isUndefined'](config[_0xeefc('0x114')][_0x557a9d])){_0x193986[_0xeefc('0x3c')]=_0xeefc('0x115');return _0xae57c(msgResponse(_0xeefc('0x110'),_0xeefc('0x111'),_0x2a48c4+_0xeefc('0x116')+_0x557a9d));}if(_['isArray'](_0x1f21d1)){for(var _0x23857e=0x0;_0x23857e<_0x1f21d1[_0xeefc('0x88')];_0x23857e+=0x1){_0x94d693[_0xeefc('0xf6')](ami[_0xeefc('0x9e')]({'action':_0xeefc('0x117'),'command':util[_0xeefc('0x74')]('iftime\x20%s,%s',_0x1f21d1[_0x23857e][_0xeefc('0x118')],!_[_0xeefc('0x38')](config[_0xeefc('0x114')][_0x557a9d])?_0x557a9d:'')})[_0xeefc('0xa8')](function(_0xe738b1){return _0xe738b1[_0xeefc('0x119')][_0xeefc('0x11a')](_0xeefc('0x11b'))>=0x0?!![]:![];})[_0xeefc('0xab')](myreject(_0xae57c)));}}else{_0x94d693[_0xeefc('0xf6')](ami[_0xeefc('0x9e')]({'action':_0xeefc('0x117'),'command':util[_0xeefc('0x74')]('iftime\x20%s,%s',_0x1f21d1,!_[_0xeefc('0x38')](config[_0xeefc('0x114')][_0x557a9d])?_0x557a9d:'')})['then'](function(_0x1b5d28){return _0x1b5d28['content']['indexOf'](_0xeefc('0x11b'))>=0x0?!![]:![];})[_0xeefc('0xab')](myreject(_0xae57c)));}BPromise[_0xeefc('0x11c')](_0x94d693)[_0xeefc('0xa8')](function(_0x6aa9b6){var _0xb1c906=_['some'](_0x6aa9b6);if(_0xb1c906){return _0x23aa89(_0xb1c906);}else{_0x193986[_0xeefc('0x3c')]=_0x4bab1d?'GLOBAL_INTERVAL_IS_OVERTIME':_0xeefc('0x11d');return _0xae57c(msgResponse(_0xeefc('0x11e'),_0xeefc('0x111'),'Global:\x20'+_0x4bab1d+'\x20'+_0x2a48c4+'\x20Interval\x20is\x20overtime:\x20'+util[_0xeefc('0x86')](_0x1f21d1,{'showHidden':![],'depth':null})+_0xeefc('0x11f')+_0x557a9d));}})['catch'](function(_0x1ef779){return _0xae57c(msgResponse(_0xeefc('0x110'),'Failure',JSON[_0xeefc('0x44')](_0x1ef779)));});});};Dialer[_0xeefc('0x16')]['checkDialMethod']=function(_0x4d2583){var _0x799fa6=this;return function(){switch(_0x4d2583[_0xeefc('0x56')]){case _0xeefc('0x120'):freeVariablesPredictive(_0x4d2583);_0x799fa6['handlePower'](_0x4d2583,0x1);break;case _0xeefc('0x121'):freeVariablesPredictive(_0x4d2583);_0x799fa6[_0xeefc('0x122')](_0x4d2583,_0x4d2583[_0xeefc('0x123')]);break;case _0xeefc('0x6'):_0x799fa6[_0xeefc('0x6')](_0x4d2583);break;case _0xeefc('0x5'):freeVariablesPredictive(_0x4d2583);_0x799fa6['handlePower'](_0x4d2583,0x1);break;default:freeVariablesPredictive(_0x4d2583);logger[_0xeefc('0x87')](_0xeefc('0x124'),_0x4d2583[_0xeefc('0x3a')],_0xeefc('0x125'));}};};Dialer[_0xeefc('0x16')]['launchHandleIvr']=function(_0x4f6343){var _0x31a1f9=this;return function(){_0x31a1f9[_0xeefc('0x126')](_0x4f6343);};};Dialer[_0xeefc('0x16')]['syncQueueSummary']=function(_0x1ab3e2){var _0x319450=this;if(isNotPreview(_0x1ab3e2[_0xeefc('0x56')])){if(isVoiceQueueOutbound(_0x1ab3e2['type'])&&isActive(_0x1ab3e2['dialActive'])){_0x1ab3e2['sendMessageOneNotActive']=!![];BPromise[_0xeefc('0xa7')]()['then'](checkIsLoggedIn(_0x1ab3e2,_0x1ab3e2[_0xeefc('0x4d')]))[_0xeefc('0xa8')](checkIsActive(_0x1ab3e2,_0x1ab3e2[_0xeefc('0x55')]))[_0xeefc('0xa8')](checkInterval(_0x1ab3e2))[_0xeefc('0xa8')](_0x319450[_0xeefc('0x10b')](_0x1ab3e2))[_0xeefc('0xa8')](_0x319450[_0xeefc('0x10f')](_0x1ab3e2[_0xeefc('0x127')],_0x1ab3e2[_0xeefc('0x128')],_0x1ab3e2['name'],_0x1ab3e2))['then'](_0x319450[_0xeefc('0x129')](_0x1ab3e2[_0xeefc('0x3e')],_0x1ab3e2[_0xeefc('0x128')],_0x1ab3e2[_0xeefc('0x3a')],_0x1ab3e2))[_0xeefc('0xa8')](_0x319450[_0xeefc('0x12a')](_0x1ab3e2))[_0xeefc('0xab')](loggerCatchQueueSummary(_0xeefc('0x12b'),_0x1ab3e2));}else{notSendMessagesQueue(_0x1ab3e2);}}else{freeVariablesPredictive(_0x1ab3e2);}};Dialer['prototype']['syncCampaigns']=function(){var _0x4166f5=this;var _0x49d572;for(var _0x5aef2f in this[_0xeefc('0x1c')]){if(this['campaigns'][_0xeefc('0x89')](_0x5aef2f)){_0x49d572=this['campaigns'][_0x5aef2f];if(isCampaignIvr(_0x49d572[_0xeefc('0x49')])&&isActive(_0x49d572[_0xeefc('0x72')])){_0x49d572['sendMessageOneNotActive']=!![];BPromise[_0xeefc('0xa7')]()[_0xeefc('0xa8')](checkIsActive(_0x49d572,_0x49d572[_0xeefc('0x72')]))['then'](checkInterval(_0x49d572))['then'](_0x4166f5[_0xeefc('0x10b')](_0x49d572))['then'](_0x4166f5[_0xeefc('0x10f')](_0x49d572[_0xeefc('0x127')],_0x49d572[_0xeefc('0x128')],_0x49d572['name'],_0x49d572))[_0xeefc('0xa8')](_0x4166f5[_0xeefc('0x129')](_0x49d572[_0xeefc('0x3e')],_0x49d572[_0xeefc('0x128')],_0x49d572[_0xeefc('0x3a')],_0x49d572))[_0xeefc('0xa8')](_0x4166f5[_0xeefc('0x12c')](_0x49d572))[_0xeefc('0xab')](loggerCatchQueueSummary(_0xeefc('0x12d'),_0x49d572));}else{notSendMessagesCampaign(_0x49d572);}}}};function getCallerIdRandom(_0x18c897,_0x55488f){var _0xb3e3cc,_0x3a51d3,_0x38f29e;if(_0x55488f<=0x0){_0x55488f=0x1;}_0xb3e3cc=new RegExp('\x5cw{0,'+_0x55488f+'}$');_0x3a51d3=Math[_0xeefc('0x12e')](0xa,_0x55488f-0x1);_0x38f29e=Math['pow'](0xa,_0x55488f)-0x1;return util[_0xeefc('0x74')]('%s',_[_0xeefc('0x12f')](_0x18c897,_0xb3e3cc,_['random'](_0x3a51d3,_0x38f29e)));}Dialer[_0xeefc('0x16')][_0xeefc('0x130')]=function(_0x55262f,_0x9b830c){var _0x385bda=this;var _0x196da4=uuid['v4']();this[_0xeefc('0x21')][_0x196da4]=new Action(_0x55262f,_0x9b830c,_0x196da4);return new BPromise(function(_0xcb5cfc,_0x2aadeb){if(_[_0xeefc('0x38')](_0x55262f)&&_0xeefc('0x131')!==typeof _0x55262f){return _0x2aadeb(msgResponse('originate',_0xeefc('0x111'),'voiceQueue\x20is\x20undefine'));}if(_[_0xeefc('0x38')](_0x9b830c[_0xeefc('0x132')]['phone'])||_0x9b830c['Contact']['phone']===null){return _0x2aadeb(msgResponse('originate','Failure','contact\x20is\x20undefine'));}var _0x12d255={'XMD-CALLERID':_0x385bda['actions'][_0x196da4][_0xeefc('0x133')](),'XMD-AGI':_0x55262f[_0xeefc('0xde')]?util[_0xeefc('0x74')]('\x22agi://%s/square,%s\x22',ipAgi,_0x55262f[_0xeefc('0xde')]):_0xeefc('0x134'),'XMD-AGIAFTER':_0x55262f[_0xeefc('0xe4')]?util[_0xeefc('0x74')](_0xeefc('0x135'),ipAgi,_0x55262f['dialQueueProject2']):'NONE','XMD-QUEUE':_0x55262f[_0xeefc('0x49')]===_0xeefc('0x82')?util[_0xeefc('0x74')](_0xeefc('0x136'),_0x55262f[_0xeefc('0x3a')],_0x55262f[_0xeefc('0x137')]||'',_0x55262f['dialAgiAfterHangupAgent']?'c':'',_0x55262f[_0xeefc('0xec')]||0x3):'NONE','XMD-CONTACTID':_0x9b830c[_0xeefc('0xbe')],'XMD-CDRTYPE':'dialer','CALLERID(all)':_0x385bda[_0xeefc('0x21')][_0x196da4][_0xeefc('0x133')](),'XMD-AMD':_0x55262f[_0xeefc('0xcb')]?_0xeefc('0x138'):_0xeefc('0x134')};if(_0x55262f['dialAMDActive']){_0x12d255['XMD-AMDINITIALSILENCE']=_0x55262f[_0xeefc('0x139')]||0x9c4;_0x12d255[_0xeefc('0x13a')]=_0x55262f['dialAMDGreeting']||0x5dc;_0x12d255[_0xeefc('0x13b')]=_0x55262f[_0xeefc('0x13c')]||0x320;_0x12d255[_0xeefc('0x13d')]=_0x55262f['dialAMDTotalAnalysisTime']||0x1388;_0x12d255[_0xeefc('0x13e')]=_0x55262f[_0xeefc('0x13f')]||0x64;_0x12d255[_0xeefc('0x140')]=_0x55262f[_0xeefc('0x141')]||0x32;_0x12d255[_0xeefc('0x142')]=_0x55262f[_0xeefc('0x143')]||0x3;_0x12d255[_0xeefc('0x144')]=_0x55262f[_0xeefc('0x145')]||0x100;_0x12d255[_0xeefc('0x146')]=_0x55262f[_0xeefc('0x147')]||0x1388;}if(_0x55262f[_0xeefc('0x49')]===_0xeefc('0x82')){_0x12d255[_0xeefc('0x148')]=_0x9b830c['VoiceQueueId'];}else{_0x12d255[_0xeefc('0x149')]=_0x9b830c['CampaignId'];}for(var _0x544666 in _0x9b830c['Contact']){if(_0x9b830c[_0xeefc('0x132')]['hasOwnProperty'](_0x544666)){if(isNotNull(_0x9b830c[_0xeefc('0x132')][_0x544666])&&_0x544666!=='id'&&_0x544666!==_0xeefc('0x14a')&&_0x544666!==_0xeefc('0x14b')&&_0x544666!==_0xeefc('0x14c')){_0x12d255[util['format'](_0xeefc('0x14d'),_0xeefc('0x14e'),_[_0xeefc('0x14f')](_0x544666))]=_0x9b830c[_0xeefc('0x132')][_0x544666];}}}return ami[_0xeefc('0x9e')]({'actionid':_0x196da4,'action':'originate','channel':_0x385bda[_0xeefc('0x10c')](_0x55262f[_0xeefc('0x71')])?util['format'](_0xeefc('0x150'),_0x55262f[_0xeefc('0x71')][_0xeefc('0x3a')],isNotNull(_0x55262f[_0xeefc('0x5a')])?_0x55262f[_0xeefc('0x5a')][_0xeefc('0x151')]()||'':'',_0x55262f[_0xeefc('0x152')]>0x0?_0x9b830c[_0xeefc('0x132')]['phone'][_0xeefc('0x153')](_0x55262f[_0xeefc('0x152')]):_0x9b830c[_0xeefc('0x132')][_0xeefc('0x154')]):util[_0xeefc('0x74')](_0xeefc('0x150'),_['isNil'](_0x55262f[_0xeefc('0x10d')])?_0x55262f[_0xeefc('0x71')][_0xeefc('0x3a')]:_0x55262f[_0xeefc('0x10d')]['name'],isNotNull(_0x55262f[_0xeefc('0x5a')])?_0x55262f['dialPrefix'][_0xeefc('0x151')]()||'':'',_0x55262f[_0xeefc('0x152')]>0x0?_0x9b830c[_0xeefc('0x132')]['phone']['substring'](_0x55262f[_0xeefc('0x152')]):_0x9b830c['Contact'][_0xeefc('0x154')]),'callerid':_0x385bda[_0xeefc('0x10c')](_0x55262f[_0xeefc('0x71')])?getCallerId(_0x55262f[_0xeefc('0x71')][_0xeefc('0x73')],_0x55262f['dialOriginateCallerIdName'],_0x55262f[_0xeefc('0x155')]>0x0?getCallerIdRandom(_0x55262f[_0xeefc('0x58')],_0x55262f['dialRandomLastDigitCallerIdNumber']):_0x55262f[_0xeefc('0x58')]):getCallerId(_[_0xeefc('0x9d')](_0x55262f['TrunkBackup'])?_0x55262f[_0xeefc('0x71')]['callerid']:_0x55262f[_0xeefc('0x10d')][_0xeefc('0x73')],_0x55262f[_0xeefc('0x57')],_0x55262f[_0xeefc('0x155')]>0x0?getCallerIdRandom(_0x55262f['dialOriginateCallerIdNumber'],_0x55262f[_0xeefc('0x155')]):_0x55262f[_0xeefc('0x58')]),'Exten':'xcally-motion-dialer','Context':'from-sip','Priority':'1','variable':_0x12d255,'timeout':(_0x55262f[_0xeefc('0x59')]||0x1e)*0x3e8,'async':!![],'channelid':_0x196da4})[_0xeefc('0xa8')](function(_0xccc399){return _0xcb5cfc(_0xccc399);})[_0xeefc('0xab')](function(_0x1aef2a){_0x55262f[_0xeefc('0x61')]+=0x1;var _0x3287d4=new History(_0x385bda[_0xeefc('0x21')][_0x196da4]);logger[_0xeefc('0x87')](util[_0xeefc('0x74')](_0xeefc('0x156'),JSON['stringify'](_0x1aef2a)));_0x3287d4['state']=0xe;_0x3287d4['statedesc']=_0xeefc('0x157');_0x3287d4['starttime']=moment()[_0xeefc('0x74')](_0xeefc('0xe5'));_0x3287d4[_0xeefc('0x158')]=_0x3287d4[_0xeefc('0x98')];_0x385bda['createHistory'](_0x3287d4)[_0xeefc('0xab')](loggerCatch(_0xeefc('0x159')));_0x385bda[_0xeefc('0xb6')](_0x3287d4)[_0xeefc('0xab')](loggerCatch(_0xeefc('0x159')))[_0xeefc('0x19')](function(){delete _0x385bda[_0xeefc('0x21')][_0x196da4];return _0x2aadeb(msgResponse(_0xeefc('0x15a'),_0xeefc('0x15b'),_0xeefc('0x15c')));});});});};Dialer['prototype'][_0xeefc('0x2c')]=function(_0x6a48f1){var _0x10e155=this[_0xeefc('0x21')][_0x6a48f1[_0xeefc('0xf1')]];var _0x2f09f1=this;if(_0x10e155){delete this[_0xeefc('0x21')][_0x6a48f1['actionid']];_0x10e155['responsetime']=moment()[_0xeefc('0x74')](_0xeefc('0xe5'));var _0x5664da=_0x10e155['type']===_0xeefc('0x77')?this['campaigns'][_0x10e155[_0xeefc('0xa3')]]:this[_0xeefc('0x1b')][_0x10e155[_0xeefc('0x15d')]()];if(!this[_0xeefc('0x15e')](_0x6a48f1[_0xeefc('0x15f')])){this[_0xeefc('0xa2')](_0x5664da);return this[_0xeefc('0x160')](_0x10e155,_0x5664da,_0x6a48f1)[_0xeefc('0xa8')](function(_0xea72eb){})[_0xeefc('0xab')](loggerCatch(_0xeefc('0x161')));}else{this[_0xeefc('0x9b')][_0x6a48f1[_0xeefc('0xc7')]]=_0x10e155;}}};Dialer[_0xeefc('0x16')]['checkRetriveMax']=function(_0x599b64,_0x294db8,_0xe5ff0c){var _0x3f7a71=new History(_0x294db8);if(_0x3f7a71[_0xeefc('0x162')]+_0x3f7a71[_0xeefc('0x163')]+_0x3f7a71['countnoanswerretry']>=_0xe5ff0c[_0xeefc('0x164')]-0x1){return!![];}switch(_0x599b64){case 0x3:if(_0x3f7a71[_0xeefc('0x165')]>=_0xe5ff0c[_0xeefc('0x166')]-0x1){return!![];}else{this[_0xeefc('0xb0')]({'active':![],'countnoanswerretry':_0x3f7a71['countnoanswerretry']+=0x1,'scheduledat':moment()[_0xeefc('0x167')](_0xe5ff0c['dialNoAnswerRetryFrequency'],_0xeefc('0x168'))[_0xeefc('0x74')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x3f7a71['ContactId'],'ListId':_0x3f7a71['ListId'],'VoiceQueueId':_0x3f7a71[_0xeefc('0x106')]||undefined,'CampaignId':_0x3f7a71[_0xeefc('0xc0')]||undefined})[_0xeefc('0xab')](loggerCatch(_0xeefc('0x169')));}break;case 0x5:if(_0x3f7a71['countbusyretry']>=_0xe5ff0c[_0xeefc('0x16a')]-0x1){return!![];}else{this[_0xeefc('0xb0')]({'active':![],'countbusyretry':_0x3f7a71[_0xeefc('0x162')]+=0x1,'scheduledat':moment()[_0xeefc('0x167')](_0xe5ff0c[_0xeefc('0x16b')],_0xeefc('0x168'))[_0xeefc('0x74')](_0xeefc('0xe5')),'ContactId':_0x3f7a71['ContactId'],'ListId':_0x3f7a71[_0xeefc('0xfd')],'VoiceQueueId':_0x3f7a71[_0xeefc('0x106')]||undefined,'CampaignId':_0x3f7a71[_0xeefc('0xc0')]||undefined})[_0xeefc('0xab')](loggerCatch(_0xeefc('0x16c')));}break;case 0x8:if(_0x3f7a71[_0xeefc('0x163')]>=_0xe5ff0c[_0xeefc('0x16d')]-0x1){return!![];}else{this[_0xeefc('0xb0')]({'active':![],'countcongestionretry':_0x3f7a71[_0xeefc('0x163')]+=0x1,'scheduledat':moment()['add'](_0xe5ff0c['dialCongestionRetryFrequency'],'minutes')[_0xeefc('0x74')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x3f7a71[_0xeefc('0xbe')],'ListId':_0x3f7a71[_0xeefc('0xfd')],'VoiceQueueId':_0x3f7a71[_0xeefc('0x106')]||undefined,'CampaignId':_0x3f7a71[_0xeefc('0xc0')]||undefined})[_0xeefc('0xab')](loggerCatch(_0xeefc('0x16e')));}break;default:return!![];}};Dialer['prototype']['callProgressDetecting']=function(_0x7db14c,_0x10dd2c,_0x3bfa43){var _0xb6c24a=this;var _0x473d4b=new History(_0x7db14c);return new BPromise(function(_0x5a3a04,_0xe3d51d){if(_[_0xeefc('0x38')](_0x10dd2c)&&_0xeefc('0x131')!==typeof _0x10dd2c){return _0xe3d51d(msgResponse(_0xeefc('0x16f'),_0xeefc('0x111'),_0xeefc('0x170')));}if(_[_0xeefc('0x38')](_0x3bfa43)&&_0xeefc('0x131')!==typeof _0x3bfa43){return _0xe3d51d(msgResponse('[callProgressDetecting]','Failure',_0xeefc('0x171')));}switch(_0x3bfa43['reason']){case'0':_0x10dd2c['outboundNoSuchCallsDay']+=0x1;_0x473d4b[_0xeefc('0xcd')]=0x0;_0x473d4b['statedesc']=_0xeefc('0x172');_0xb6c24a[_0xeefc('0xb7')](_0x473d4b)[_0xeefc('0xab')](loggerCatch(_0xeefc('0x173')));if(_0xb6c24a['checkRetriveMax'](0x0,_0x7db14c,_0x10dd2c)){if(_0x473d4b[_0xeefc('0x162')]+_0x473d4b['countcongestionretry']+_0x473d4b[_0xeefc('0x165')]>=_0x10dd2c['dialGlobalMaxRetry']){_0xb6c24a[_0xeefc('0x174')](_0x473d4b,_0x5a3a04,_0xe3d51d,_0xeefc('0x175'));}else{_0xb6c24a[_0xeefc('0x176')](_0x473d4b,_0x5a3a04,_0xe3d51d,_0xeefc('0x175'));}}break;case'3':_0x10dd2c['outboundNoAnswerCallsDay']+=0x1;_0x473d4b[_0xeefc('0xcd')]=0x3;_0x473d4b[_0xeefc('0x97')]='NoAnswer';_0x473d4b[_0xeefc('0x165')]+=0x1;_0x473d4b[_0xeefc('0x177')]+=0x1;_0xb6c24a[_0xeefc('0xb7')](_0x473d4b)['catch'](loggerCatch(_0xeefc('0x178')));if(_0xb6c24a[_0xeefc('0x179')](0x3,_0x7db14c,_0x10dd2c)){if(_0x473d4b[_0xeefc('0x165')]>=_0x10dd2c[_0xeefc('0x166')]){_0xb6c24a['createStateFinal'](_0x473d4b,_0x5a3a04,_0xe3d51d,_0xeefc('0x17a'));}else{_0xb6c24a[_0xeefc('0x174')](_0x473d4b,_0x5a3a04,_0xe3d51d,_0xeefc('0x17a'));}}break;case'5':_0x10dd2c[_0xeefc('0x5c')]+=0x1;_0x473d4b[_0xeefc('0xcd')]=0x5;_0x473d4b[_0xeefc('0x97')]=_0xeefc('0x17b');_0x473d4b[_0xeefc('0x162')]+=0x1;_0x473d4b[_0xeefc('0x177')]+=0x1;_0xb6c24a[_0xeefc('0xb7')](_0x473d4b)['catch'](loggerCatch(_0xeefc('0x17c')));if(_0xb6c24a[_0xeefc('0x179')](0x5,_0x7db14c,_0x10dd2c)){if(_0x473d4b[_0xeefc('0x162')]>=_0x10dd2c[_0xeefc('0x16a')]){_0xb6c24a[_0xeefc('0x176')](_0x473d4b,_0x5a3a04,_0xe3d51d,_0xeefc('0x17d'));}else{_0xb6c24a[_0xeefc('0x174')](_0x473d4b,_0x5a3a04,_0xe3d51d,'reason\x205\x20busy');}}break;case'8':_0x10dd2c[_0xeefc('0x5d')]+=0x1;_0x473d4b[_0xeefc('0xcd')]=0x8;_0x473d4b['statedesc']='Congestion';_0x473d4b[_0xeefc('0x163')]+=0x1;_0x473d4b['countglobal']+=0x1;_0xb6c24a[_0xeefc('0xb7')](_0x473d4b)[_0xeefc('0xab')](loggerCatch(_0xeefc('0x17e')));if(_0xb6c24a[_0xeefc('0x179')](0x8,_0x7db14c,_0x10dd2c)){if(_0x473d4b[_0xeefc('0x163')]>=_0x10dd2c[_0xeefc('0x16d')]){_0xb6c24a['createStateFinal'](_0x473d4b,_0x5a3a04,_0xe3d51d,_0xeefc('0x17f'));}else{_0xb6c24a[_0xeefc('0x174')](_0x473d4b,_0x5a3a04,_0xe3d51d,_0xeefc('0x17f'));}}break;default:_0x10dd2c['outboundUnknownCallsDay']+=0x1;_0x473d4b[_0xeefc('0xcd')]=0xc;_0x473d4b['statedesc']=_0x3bfa43[_0xeefc('0xe2')];_0xb6c24a[_0xeefc('0xb7')](_0x473d4b)[_0xeefc('0xab')](loggerCatch('[syncAgentComplete][createHistory][?]'));if(_0xb6c24a[_0xeefc('0x179')](_0x3bfa43['reason'],_0x7db14c,_0x10dd2c)){if(_0x473d4b[_0xeefc('0x162')]+_0x473d4b[_0xeefc('0x163')]+_0x473d4b['countnoanswerretry']>=_0x10dd2c[_0xeefc('0x164')]){_0xb6c24a['stateGlobal'](_0x473d4b,_0x5a3a04,_0xe3d51d,_0x3bfa43[_0xeefc('0xe2')]);}else{_0xb6c24a[_0xeefc('0x176')](_0x473d4b,_0x5a3a04,_0xe3d51d,_0x3bfa43[_0xeefc('0xe2')]);}}}});};Dialer[_0xeefc('0x16')][_0xeefc('0x174')]=function(_0x57543f,_0x4e4ecb,_0x1eda40,_0x22c9e5){var _0x570463=new Final(_0x57543f);_0x570463[_0xeefc('0xcd')]=0xf;_0x570463[_0xeefc('0x97')]=_0xeefc('0x180');this[_0xeefc('0x176')](_0x570463,_0x4e4ecb,_0x1eda40,_0x22c9e5);};Dialer[_0xeefc('0x16')]['createStateFinal']=function(_0x4b8de5,_0x3b02ee,_0x4eaaf3,_0x5d27fb){this[_0xeefc('0xb6')](_0x4b8de5)[_0xeefc('0xa8')](function(_0x558390){return _0x3b02ee(msgResponse(_0xeefc('0x16f'),_0xeefc('0x181'),_0x5d27fb));})['catch'](function(_0x47d0d6){return _0x4eaaf3(msgResponse('[moveContactManagedDialer][0]',_0xeefc('0x111'),_0xeefc('0x182')));});};Dialer[_0xeefc('0x16')][_0xeefc('0x6')]=function(_0x55c3a5){var _0x566e8f=this;var _0x3c21ec=_0x55c3a5['dialPredictiveOptimizationPercentage']/0x64;var _0x39a2b4=_0x55c3a5[_0xeefc('0x60')]/(_0x55c3a5[_0xeefc('0x60')]+_0x55c3a5[_0xeefc('0xd2')]);var _0x4289f7=_0x55c3a5[_0xeefc('0x4d')]-_0x55c3a5[_0xeefc('0x6e')]-_0x55c3a5['waiting']-_0x55c3a5['originated']-_0x55c3a5[_0xeefc('0x51')];var _0x2ef131=(_0x55c3a5[_0xeefc('0x4d')]-_0x55c3a5['predictiveIntervalPauses'])*_0x55c3a5['predictiveIntervalLowerLimit'];var _0x4c51a2=Math[_0xeefc('0x183')](_0x55c3a5[_0xeefc('0x184')]*_0x55c3a5[_0xeefc('0x185')]*_0x55c3a5[_0xeefc('0x6b')]*_0x55c3a5['predictiveIntervalMultiplicativeFactor']);if(_[_0xeefc('0x38')](_0x55c3a5[_0xeefc('0x186')])){loggerPredictive[_0xeefc('0x79')](_0xeefc('0x187'));if(!_['isUndefined'](_0x55c3a5[_0xeefc('0x24')])){_0x55c3a5['startPredictive']=undefined;loggerPredictive[_0xeefc('0x87')]('[startMethodPredictive][StartProgressive]','check\x20predictive\x20is\x20not\x20undefine');}if(!_[_0xeefc('0x38')](_0x55c3a5[_0xeefc('0x81')])){loggerPredictive[_0xeefc('0x87')](_0xeefc('0x188'),_0xeefc('0x189'));clearInterval(_0x55c3a5[_0xeefc('0x81')]);_0x55c3a5[_0xeefc('0x81')]=undefined;}_0x55c3a5[_0xeefc('0x186')]=moment()[_0xeefc('0x74')](_0xeefc('0xe5'));loggerPredictive[_0xeefc('0x79')](_0xeefc('0x18a'),_0x55c3a5[_0xeefc('0x186')],_0x55c3a5[_0xeefc('0x3a')]);this[_0xeefc('0x122')](_0x55c3a5,0x1);}else if(ifInterval(_0x55c3a5[_0xeefc('0x18b')],_0x55c3a5[_0xeefc('0x186')])){this['handlePower'](_0x55c3a5,0x1);loggerPredictiveCalls[_0xeefc('0x79')](_0xeefc('0x18c'),_0x55c3a5[_0xeefc('0x186')],_0x55c3a5[_0xeefc('0x3a')]);_0x55c3a5[_0xeefc('0x184')]=0x0;_0x55c3a5[_0xeefc('0x6a')]=0x0;}else if(_0x3c21ec<_0x39a2b4&&_0x55c3a5['dialPredictiveOptimization']===_0xeefc('0x18d')){freeVariablesPredictive(_0x55c3a5);loggerPredictive[_0xeefc('0x79')](_0xeefc('0x18e'),_0xeefc('0x18f'),_0x39a2b4,_0xeefc('0x186'),_0x55c3a5['name']);}else if(_0x4289f7>_0x2ef131){freeVariablesPredictive(_0x55c3a5);loggerPredictive[_0xeefc('0x79')]('[stopMethodPredictive][ReStartProgressive][LowerLimitInterval]',_0xeefc('0x190'),_0x4289f7,_0xeefc('0x191'),_0x2ef131);}else if(_0x4c51a2<_0x55c3a5[_0xeefc('0x6a')]&&_0x55c3a5[_0xeefc('0x192')]===_0xeefc('0x18d')){freeVariablesPredictive(_0x55c3a5);loggerPredictive[_0xeefc('0x79')]('[stopMethodPredictive][ReStartProgressive][ExceededDropInterval]',_0xeefc('0x193'),_0x4c51a2,'Drop\x20in\x20this\x20interval',_0x55c3a5[_0xeefc('0x6a')],'startProgressive',_0x55c3a5[_0xeefc('0x3a')]);}else if(!ifInterval(_0x55c3a5[_0xeefc('0x18b')],_0x55c3a5[_0xeefc('0x186')])&&_[_0xeefc('0x38')](_0x55c3a5['startPredictive'])&&!_[_0xeefc('0x38')](_0x55c3a5['startProgressive'])){_0x55c3a5['startPredictive']=moment()['format'](_0xeefc('0xe5'));loggerPredictive[_0xeefc('0x79')]('[startMethodPredictive][StartPredictive][First]',_0x55c3a5[_0xeefc('0x24')],_0x55c3a5[_0xeefc('0x3a')]);this[_0xeefc('0x194')](_0x55c3a5[_0xeefc('0x18b')])[_0xeefc('0xa8')](this[_0xeefc('0x195')](_0x55c3a5))[_0xeefc('0xa8')](mergeDataErlangB(_0x55c3a5))[_0xeefc('0xa8')](this[_0xeefc('0x196')](_0x55c3a5))['catch'](loggerCatchPredictive(_0xeefc('0x197'),_0x55c3a5));}else if(!ifInterval(_0x55c3a5['dialPredictiveInterval'],_0x55c3a5[_0xeefc('0x24')])){_0x55c3a5[_0xeefc('0x6a')]=0x0;_0x55c3a5['startPredictive']=moment()['format'](_0xeefc('0xe5'));loggerPredictive[_0xeefc('0x79')](_0xeefc('0x198'),_0x55c3a5['startPredictive'],_0x55c3a5[_0xeefc('0x3a')]);clearInterval(_0x55c3a5[_0xeefc('0x81')]);_0x55c3a5['handlePredictive']=undefined;this[_0xeefc('0x194')](_0x55c3a5[_0xeefc('0x18b')])[_0xeefc('0xa8')](this[_0xeefc('0x195')](_0x55c3a5))['then'](mergeDataErlangB(_0x55c3a5))[_0xeefc('0xa8')](this[_0xeefc('0x196')](_0x55c3a5))[_0xeefc('0xab')](loggerCatchPredictive(_0xeefc('0x197'),_0x55c3a5));}};Dialer[_0xeefc('0x16')][_0xeefc('0x195')]=function(_0xe88d79){var _0x3d4fdf=this;return function(_0x463af7){return new BPromise(function(_0x2f3017,_0x4aaafd){_[_0xeefc('0x7f')](_0xe88d79,_0x463af7[0x0]);if(checkGetDataPredictive(_0x463af7[0x0])){loggerPredictive['info'](JSON[_0xeefc('0x44')](_0x463af7[0x0]));if(_0xe88d79[_0xeefc('0x192')]===_0xeefc('0x18d')){return _0x3d4fdf[_0xeefc('0x199')](_0xe88d79['id'])[_0xeefc('0xa8')](function(_0x173fdc){var _0x42cc71=_0xe88d79[_0xeefc('0x4d')]-_0x173fdc[0x0]['outboundQueuePauses'];var _0x2d5d67=_0xe88d79['dialPredictiveInterval']*0x3c;var _0x14aaa2=_0x463af7[0x0][_0xeefc('0x67')]+_0x463af7[0x0][_0xeefc('0x66')];var _0x3357d1=(_0x463af7[0x0][_0xeefc('0x65')]+_0x463af7[0x0][_0xeefc('0x69')]+_0x463af7[0x0]['predictiveIntervalDroppedCallsCallersExit'])/_0x463af7[0x0][_0xeefc('0x6f')];var _0x17d093=_0xe88d79['dialPredictiveOptimizationPercentage']/0x64;_0xe88d79['predictiveIntervalPauses']=_0x173fdc[0x0][_0xeefc('0x19a')]||0x0;_0xe88d79['predictiveIntervalHitRate']=_0x3357d1>0x0?_0x3357d1:0x1;return _0x3d4fdf['abandonmentRate'](_0x42cc71,_0x2d5d67,_0x14aaa2,_0x3357d1,_0x17d093);})[_0xeefc('0xa8')](function(_0x10071f){return _0x2f3017(_0x10071f);})[_0xeefc('0xab')](function(_0x12fd2e){return _0x4aaafd(msgResponse('[CatchErlangB]',_0xeefc('0x111'),JSON[_0xeefc('0x44')](_0x12fd2e)));});}if(_0xe88d79[_0xeefc('0x192')]==='agentBusyFactor'){return _0x3d4fdf[_0xeefc('0x199')](_0xe88d79['id'])[_0xeefc('0xa8')](function(_0x311587){var _0x46ca7a=_0xe88d79[_0xeefc('0x4d')]-_0x311587[0x0]['outboundQueuePauses'];var _0x8bedd=_0xe88d79['dialPredictiveInterval']*0x3c;var _0x471ae8=_0x463af7[0x0][_0xeefc('0x67')]+_0x463af7[0x0][_0xeefc('0x66')];var _0x4506c6=(_0x463af7[0x0][_0xeefc('0x65')]+_0x463af7[0x0][_0xeefc('0x69')]+_0x463af7[0x0]['predictiveIntervalDroppedCallsCallersExit'])/_0x463af7[0x0][_0xeefc('0x6f')];var _0x2a3d5c=_0xe88d79[_0xeefc('0x19b')]/0x64;_0xe88d79[_0xeefc('0x6e')]=_0x311587[0x0]['outboundQueuePauses']||0x0;_0xe88d79[_0xeefc('0x6b')]=_0x4506c6>0x0?_0x4506c6:0x1;return _0x3d4fdf[_0xeefc('0x19c')](_0x46ca7a,_0x8bedd,_0x471ae8,_0x4506c6,_0x2a3d5c);})[_0xeefc('0xa8')](function(_0x39aded){return _0x2f3017(_0x39aded);})[_0xeefc('0xab')](function(_0x3d8d59){return _0x4aaafd(msgResponse(_0xeefc('0x19d'),_0xeefc('0x111'),JSON['stringify'](_0x3d8d59)));});}}else{return _0x4aaafd(msgResponse(_0xeefc('0x19e'),_0xeefc('0x111'),'check\x20failure'));}});};};Dialer[_0xeefc('0x16')][_0xeefc('0x196')]=function(_0x1b8eff){var _0x1e5cfa=this;return function(){var _0xc2f35d=0x0;var _0x38d590=Math[_0xeefc('0x183')](_0x1b8eff[_0xeefc('0x19f')]*0x3e8);if(_0x38d590>0x0){_0x38d590=_0x38d590<0x64?0x64:_0x38d590;loggerPredictive['info'](_0xeefc('0x1a0'),_0x38d590);_0x1b8eff['handlePredictive']=setInterval(function(){_0x1e5cfa['handlePredictive'](_0x1b8eff);loggerPredictiveCalls[_0xeefc('0x79')](_0xeefc('0x1a1'),_0xc2f35d+=0x1);},_0x38d590);}else{loggerPredictive['info'](_0xeefc('0x1a2'),_0xeefc('0x1a3'),_0x38d590);}};};Dialer[_0xeefc('0x16')][_0xeefc('0x1a4')]=function(_0x46ab7c,_0x189f02){var _0x1e7ad4=this;return function(_0x18fe89){if(_[_0xeefc('0x42')](_0x18fe89)){if(_[_0xeefc('0x9d')](_0x189f02['UserId'])||!_0x189f02[_0xeefc('0x1a5')]){if(_0x46ab7c[_0xeefc('0x56')]===_0xeefc('0x5')){_0x46ab7c[_0xeefc('0xf8')]=_[_0xeefc('0x38')](_0x46ab7c[_0xeefc('0xf8')])?!![]:_0x46ab7c['queueStatusComplete'];var _0x4cfa54=uuid['v4']();_0x1e7ad4[_0xeefc('0x21')][_0x4cfa54]=new Action(_0x46ab7c,_0x189f02,_0x4cfa54);loggerBooked[_0xeefc('0x79')](_0xeefc('0x1a6'),_0x4cfa54,_0xeefc('0x1a7'),JSON[_0xeefc('0x44')](_0x46ab7c['queueStatusComplete']),'Queue:\x20',_0x46ab7c['name']);if(_0x46ab7c['queueStatusComplete']){_0x46ab7c[_0xeefc('0xf8')]=![];_0x1e7ad4[_0xeefc('0xf5')][_0x1e7ad4['actions'][_0x4cfa54][_0xeefc('0xa3')]]=[];ami[_0xeefc('0x9e')]({'actionid':_0x4cfa54,'action':_0xeefc('0x1a8'),'queue':_0x46ab7c[_0xeefc('0x3a')]})[_0xeefc('0xab')](function(_0x46915f){_0x1e7ad4['updateOriginated'](_0x46ab7c);_0x1e7ad4[_0xeefc('0xb0')]({'active':![],'ContactId':_0x1e7ad4[_0xeefc('0x21')][_0x4cfa54][_0xeefc('0xbe')],'ListId':_0x1e7ad4['actions'][_0x4cfa54]['ListId'],'VoiceQueueId':_0x1e7ad4[_0xeefc('0x21')][_0x4cfa54][_0xeefc('0x106')]||undefined,'CampaignId':_0x1e7ad4[_0xeefc('0x21')][_0x4cfa54][_0xeefc('0xc0')]||undefined})[_0xeefc('0xab')](loggerCatch(_0xeefc('0x1a9')));delete _0x1e7ad4[_0xeefc('0x21')][_0x4cfa54];});}else{loggerBooked['info'](_0xeefc('0x1aa'),JSON[_0xeefc('0x44')](_0x46ab7c['queueStatusComplete']),_0xeefc('0x1ab'),_0x46ab7c[_0xeefc('0x3a')]);_0x1e7ad4[_0xeefc('0xa2')](_0x46ab7c);_0x1e7ad4['rescheduleContact']({'active':![],'ContactId':_0x1e7ad4[_0xeefc('0x21')][_0x4cfa54][_0xeefc('0xbe')],'ListId':_0x1e7ad4['actions'][_0x4cfa54]['ListId'],'VoiceQueueId':_0x1e7ad4['actions'][_0x4cfa54]['VoiceQueueId']||undefined,'CampaignId':_0x1e7ad4['actions'][_0x4cfa54][_0xeefc('0xc0')]||undefined})[_0xeefc('0xab')](loggerCatch(_0xeefc('0x1a9')));delete _0x1e7ad4[_0xeefc('0x21')][_0x4cfa54];}}else{return _0x1e7ad4[_0xeefc('0x130')](_0x46ab7c,_0x189f02);}}else{if(getDiff(_0x189f02[_0xeefc('0x1ac')])<_0x46ab7c[_0xeefc('0x1ad')]*0x3c){_0x1e7ad4[_0xeefc('0x1a')][_0xeefc('0xfc')](_0x189f02['id'])[_0xeefc('0x19')](function(){_0x1e7ad4[_0xeefc('0xa2')](_0x46ab7c);});}else{_0x46ab7c['outboundReCallsDay']+=0x1;_0x1e7ad4['updateOriginated'](_0x46ab7c);if(_0x46ab7c['dialRecallInQueue']){_0x1e7ad4[_0xeefc('0xb0')]({'active':![],'recallme':![],'UserId':null,'ContactId':_0x189f02[_0xeefc('0xbe')],'ListId':_0x189f02[_0xeefc('0xfd')],'VoiceQueueId':_0x189f02[_0xeefc('0x106')]||undefined,'CampaignId':_0x189f02[_0xeefc('0xc0')]||undefined})[_0xeefc('0xab')](loggerCatch(_0xeefc('0x1ae')));_0x1e7ad4['createHistory'](createObjHistory(_0x46ab7c,_0x189f02,_0xeefc('0x1af'),0x17,_0xeefc('0x1b0')))['catch'](loggerCatch('[Originate][HistoryDialRecallInQueue][historyCatch]'));}else{_0x1e7ad4[_0xeefc('0xbc')](createObjHistory(_0x46ab7c,_0x189f02,_0xeefc('0x1b1'),0x16,_0xeefc('0x1b2')),_0xeefc('0x1b3'),_0xeefc('0x1b4'));}}}}else{_0x46ab7c[_0xeefc('0x5b')]+=0x1;_0x1e7ad4[_0xeefc('0xbc')](createObjHistory(_0x46ab7c,_0x189f02,_0xeefc('0x1b5'),0xd,_0xeefc('0x1b6')),_0xeefc('0x1b7'),'[Originate][MoveBlacklist]');throw _0xeefc('0x1b8');}};};Dialer[_0xeefc('0x16')][_0xeefc('0x126')]=function(_0x29d2fc){var _0x27f944=this;var _0x5074ce=[];var _0x97f268=_0x29d2fc[_0xeefc('0x1b9')]-_0x29d2fc[_0xeefc('0x70')]-_0x29d2fc[_0xeefc('0x1ba')];emitCampaignSummary(_0x29d2fc);if(_0x97f268>0x0){if(_0x97f268>this[_0xeefc('0x1f')]){_0x97f268=this[_0xeefc('0x1f')];}_0x29d2fc[_0xeefc('0x1ba')]+=_0x97f268;this[_0xeefc('0xb4')](_0x29d2fc['id'],_0x97f268,_0x29d2fc[_0xeefc('0x1bb')])['then'](function(_0x3d5583){_0x29d2fc[_0xeefc('0x1ba')]-=_0x97f268;_0x29d2fc[_0xeefc('0x1ba')]=_0x29d2fc[_0xeefc('0x1ba')]>0x0?_0x29d2fc[_0xeefc('0x1ba')]:0x0;if(!checkContactEmpty(_0x3d5583)){_0x29d2fc[_0xeefc('0x3c')]=_0xeefc('0x1bc');logger[_0xeefc('0x79')](_0xeefc('0x1bd')+_0x29d2fc[_0xeefc('0x3a')]);}else{_0x29d2fc[_0xeefc('0x70')]+=_0x3d5583['length'];_0x29d2fc[_0xeefc('0x3c')]=_0xeefc('0x1be');for(var _0x349d66=0x0;_0x349d66<_0x3d5583[_0xeefc('0x88')];_0x349d66+=0x1){_0x29d2fc['ivrTotalCallsDays']+=0x1;if(_[_0xeefc('0x9d')](_0x3d5583[_0x349d66])||_['isNil'](_0x3d5583[_0x349d66][_0xeefc('0x132')])||_[_0xeefc('0x9d')](_0x3d5583[_0x349d66][_0xeefc('0x132')][_0xeefc('0x154')])){_0x27f944[_0xeefc('0x1bf')](_0xeefc('0x1c0'),_0x29d2fc,_0x3d5583[_0x349d66]);}else{_0x27f944[_0xeefc('0xac')](_[_0xeefc('0xbd')](_0x3d5583[_0x349d66],[_0xeefc('0xc0'),_0xeefc('0x1c1')]))[_0xeefc('0xa8')](_0x27f944[_0xeefc('0x1a4')](_0x29d2fc,_0x3d5583[_0x349d66]))[_0xeefc('0xab')](_0x27f944[_0xeefc('0xba')](_0xeefc('0x1c2'),_0x29d2fc));}}}})[_0xeefc('0xab')](loggerGetContactDialer('[getContactCampaign2]',_0x29d2fc,_0x97f268));}};Dialer[_0xeefc('0x16')][_0xeefc('0x122')]=function(_0x2c3b99,_0x430615){var _0x1f2a27=this;var _0x4e7f2d=[];var _0x4a74fc=_0x430615>=0x1?_0x430615:0x1;var _0x9b54fd=[];if(_0x2c3b99['dialMethod']===_0xeefc('0x5')){_0x4a74fc=0x1;}var _0x369d8d=Math[_0xeefc('0x183')](_0x2c3b99[_0xeefc('0x4c')]*_0x4a74fc)-_0x2c3b99[_0xeefc('0x70')]-_0x2c3b99['temp'];emitVoiceQueueSummary(_0x2c3b99);if(_0x2c3b99[_0xeefc('0x1c3')]>0x0){var _0x104410=_0x2c3b99[_0xeefc('0x1c3')]-_0x2c3b99[_0xeefc('0x70')]-_0x2c3b99['talking']-_0x2c3b99[_0xeefc('0x1ba')]-_0x2c3b99['pTalking'];if(_0x369d8d>_0x104410){_0x369d8d=_0x104410;}}if(_0x369d8d>0x0){if(_0x2c3b99[_0xeefc('0x56')]===_0xeefc('0x5')){_0x369d8d=0x1;}if(_0x369d8d>this[_0xeefc('0x1f')]){_0x369d8d=this[_0xeefc('0x1f')];}_0x2c3b99['temp']+=_0x369d8d;for(var _0x32e96c in this[_0xeefc('0x1d')]){if(this['agents'][_0xeefc('0x89')](_0x32e96c)){if(this[_0xeefc('0x1d')][_0x32e96c][_0xeefc('0xcd')]==='not_inuse'&&this[_0xeefc('0x1d')][_0x32e96c][_0xeefc('0x9f')]===_0xeefc('0xc4')){_0x4e7f2d[_0xeefc('0xf6')](this['agents'][_0x32e96c]['id']);}}}this['getContactDialer'](_0x2c3b99['id'],_0x4e7f2d,_0x369d8d,_0x2c3b99[_0xeefc('0x1bb')])[_0xeefc('0xa8')](function(_0x5507b9){_0x2c3b99[_0xeefc('0x1ba')]-=_0x369d8d;_0x2c3b99[_0xeefc('0x1ba')]=_0x2c3b99[_0xeefc('0x1ba')]>0x0?_0x2c3b99[_0xeefc('0x1ba')]:0x0;if(!checkContactEmpty(_0x5507b9)){_0x1f2a27[_0xeefc('0xa6')](_0x2c3b99)[_0xeefc('0xa8')](sendMessageReschedule(_0x2c3b99))[_0xeefc('0xab')](loggerCatch(_0xeefc('0xa9')));}else{_0x2c3b99[_0xeefc('0x70')]+=_0x5507b9['length'];_0x2c3b99[_0xeefc('0x3c')]=_0x2c3b99[_0xeefc('0x56')]===_0xeefc('0x5')?_0xeefc('0x138'):_0xeefc('0x1be');for(var _0x4734c9=0x0;_0x4734c9<_0x5507b9['length'];_0x4734c9+=0x1){if(_[_0xeefc('0x9d')](_0x5507b9[_0x4734c9])||_['isNil'](_0x5507b9[_0x4734c9][_0xeefc('0x132')])||_[_0xeefc('0x9d')](_0x5507b9[_0x4734c9][_0xeefc('0x132')][_0xeefc('0x154')])){_0x1f2a27[_0xeefc('0x1bf')](_0xeefc('0x1c0'),_0x2c3b99,_0x5507b9[_0x4734c9]);}else{_0x1f2a27[_0xeefc('0xaa')](_[_0xeefc('0xbd')](_0x5507b9[_0x4734c9],['VoiceQueueId',_0xeefc('0x1c1')]))[_0xeefc('0xa8')](_0x1f2a27['checkContactBlack'](_0x2c3b99,_0x5507b9[_0x4734c9]))[_0xeefc('0xab')](_0x1f2a27[_0xeefc('0xba')](_0xeefc('0x1c0'),_0x2c3b99));}}}})[_0xeefc('0xab')](loggerGetContactDialer(_0xeefc('0x1c4'),_0x2c3b99,_0x369d8d));}};Dialer[_0xeefc('0x16')][_0xeefc('0x81')]=function(_0xde6a80){var _0x402f0e=this;if(_0xde6a80[_0xeefc('0x1c3')]>0x0){var _0x53939d=_0xde6a80[_0xeefc('0x1c3')]-_0xde6a80[_0xeefc('0x70')]-_0xde6a80[_0xeefc('0x51')];if(_0x53939d>0x0){this[_0xeefc('0x1c5')](_0xde6a80);}else{loggerPredictiveCalls[_0xeefc('0x79')](_0xeefc('0x1c6'));}}else{this[_0xeefc('0x1c5')](_0xde6a80);}};Dialer['prototype']['tryOriginatePredictive']=function(_0x692cb6){var _0x4eabe3=this;var _0x491a11=[];_0x692cb6[_0xeefc('0x70')]+=0x1;for(var _0x3b1b8e in this[_0xeefc('0x1d')]){if(this[_0xeefc('0x1d')][_0xeefc('0x89')](_0x3b1b8e)){if(this[_0xeefc('0x1d')][_0x3b1b8e][_0xeefc('0xcd')]==='not_inuse'&&this[_0xeefc('0x1d')][_0x3b1b8e][_0xeefc('0x9f')]===_0xeefc('0xc4')){_0x491a11[_0xeefc('0xf6')](this['agents'][_0x3b1b8e]['id']);}}}this['getContactDialer'](_0x692cb6['id'],_0x491a11,0x1,_0x692cb6[_0xeefc('0x1bb')])[_0xeefc('0xa8')](function(_0x9a9eb0){if(!checkContactEmpty(_0x9a9eb0)){checkContactLowerLimitOriginate(_0x692cb6,0x1,0x0);_0x4eabe3['countReScheduled'](_0x692cb6)['then'](sendMessageReschedule(_0x692cb6))[_0xeefc('0xab')](loggerCatch('[countReScheduled]\x20'));}else{_0x692cb6[_0xeefc('0x3c')]=_0xeefc('0x1be');if(_[_0xeefc('0x9d')](_0x9a9eb0[0x0])||_[_0xeefc('0x9d')](_0x9a9eb0[0x0][_0xeefc('0x132')])||_[_0xeefc('0x9d')](_0x9a9eb0[0x0][_0xeefc('0x132')][_0xeefc('0x154')])){_0x4eabe3[_0xeefc('0x1bf')]('[actionOriginate]\x20',_0x692cb6,_0x9a9eb0[0x0]);}else{_0x4eabe3[_0xeefc('0xaa')](_['pick'](_0x9a9eb0[0x0],[_0xeefc('0x106'),_0xeefc('0x1c1')]))['then'](_0x4eabe3[_0xeefc('0x1a4')](_0x692cb6,_0x9a9eb0[0x0]))[_0xeefc('0xab')](_0x4eabe3[_0xeefc('0xba')](_0xeefc('0x1c7'),_0x692cb6));}}})[_0xeefc('0xab')](loggerGetContactDialer(_0xeefc('0x1c8'),_0x692cb6,0x1));emitVoiceQueueSummary(_0x692cb6);};Dialer[_0xeefc('0x16')][_0xeefc('0x1c9')]=function(_0x2aaa90,_0x2deb08,_0x303e05,_0x2205c3,_0x3234b1,_0x3a1311){loggerPredictive[_0xeefc('0x79')](_0xeefc('0x1ca'),_0xeefc('0x1cb'),_0x2aaa90,_0xeefc('0x1cc'),_0x2deb08,_0xeefc('0x1cd'),_0x303e05,_0xeefc('0x1ce'),_0x2205c3,_0xeefc('0x1cf'),_0x3234b1);return new BPromise(function(_0x74177f,_0x16c8b2){if(_0x2aaa90<=0x0||isNaN(_0x2aaa90)){return _0x16c8b2(msgResponse('[abandonmentRate]',_0xeefc('0x15b'),'m\x20=\x20'+_0x2aaa90));}if(_0x303e05<=0x0||isNaN(_0x303e05)){return _0x16c8b2(msgResponse(_0xeefc('0x1ca'),_0xeefc('0x15b'),_0xeefc('0x1d0')+_0x303e05));}if(_0x2205c3<=0x0||isNaN(_0x2205c3)){return _0x16c8b2(msgResponse(_0xeefc('0x1ca'),_0xeefc('0x15b'),_0xeefc('0x1d1')+_0x2205c3));}if(_0x2deb08<=0x0||isNaN(_0x2deb08)){return _0x16c8b2(msgResponse(_0xeefc('0x1ca'),_0xeefc('0x15b'),'interval\x20=\x20'+_0x2deb08));}if(_0x3234b1<=0x0||isNaN(_0x3234b1)){return _0x16c8b2(msgResponse(_0xeefc('0x1ca'),_0xeefc('0x15b'),'Amax\x20=\x20'+_0x3234b1));}_0x3a1311=_0x3a1311||0x0;var _0x1a90ed=0x1/_0x303e05;var _0x2dc373=0x0;var _0x27f781=0x0;var _0x28544f=0x0;var _0x19eaff=0x0;for(var _0x248da4=0x0;_0x28544f<_0x3234b1;_0x248da4+=0x1){_0x27f781=_0x248da4/_0x2deb08;_0x2dc373=(_0x2205c3*_0x27f781+_0x3a1311)/_0x1a90ed;_0x28544f=erlangb(_0x2dc373,_0x2aaa90);_0x19eaff=_0x2dc373/_0x2aaa90*(0x1-erlangb(_0x2dc373,_0x2aaa90));}return _0x74177f({'erlangCalls':_0x248da4,'erlangCallToSecond':_0x2deb08/_0x248da4,'erlangAbandonmentRate':_0x28544f,'erlangBusyFactor':_0x19eaff});});};Dialer[_0xeefc('0x16')]['busyFactor']=function(_0x34b5c4,_0x4b1366,_0x416045,_0x3649c5,_0x113279,_0x239a9b){loggerPredictive[_0xeefc('0x79')]('[busyFactor]',_0xeefc('0x1cb'),_0x34b5c4,_0xeefc('0x1cc'),_0x4b1366,'\x20Ts\x20=\x20',_0x416045,_0xeefc('0x1ce'),_0x3649c5,_0xeefc('0x1d2'),_0x113279);return new BPromise(function(_0x4afeeb,_0x4d9574){if(_0x34b5c4<=0x0||isNaN(_0x34b5c4)){return _0x4d9574(msgResponse(_0xeefc('0x1ca'),'Error',_0xeefc('0x1d3')+_0x34b5c4));}if(_0x416045<=0x0||isNaN(_0x416045)){return _0x4d9574(msgResponse(_0xeefc('0x1ca'),'Error','Ts\x20=\x20'+_0x416045));}if(_0x3649c5<=0x0||isNaN(_0x3649c5)){return _0x4d9574(msgResponse(_0xeefc('0x1ca'),_0xeefc('0x15b'),'p\x20=\x20'+_0x3649c5));}if(_0x4b1366<=0x0||isNaN(_0x4b1366)){return _0x4d9574(msgResponse('[abandonmentRate]','Error',_0xeefc('0x1d4')+_0x4b1366));}if(_0x113279<=0x0||isNaN(_0x113279)){return _0x4d9574(msgResponse(_0xeefc('0x1ca'),_0xeefc('0x15b'),_0xeefc('0x1d5')+_0x113279));}_0x239a9b=_0x239a9b||0x0;var _0x16ee09=0x1/_0x416045;var _0x4895b7=0x0;var _0x9bfbdb=0x0;var _0x223679=0x0;var _0xc9af99=0x0;for(var _0x4a5b9b=0x0;_0xc9af99<_0x113279;_0x4a5b9b+=0x1){_0x9bfbdb=_0x4a5b9b/_0x4b1366;_0x4895b7=(_0x3649c5*_0x9bfbdb+_0x239a9b)/_0x16ee09;_0x223679=erlangb(_0x4895b7,_0x34b5c4);_0xc9af99=_0x4895b7/_0x34b5c4*(0x1-erlangb(_0x4895b7,_0x34b5c4));}return _0x4afeeb({'erlangCalls':_0x4a5b9b,'erlangCallToSecond':_0x4b1366/_0x4a5b9b,'erlangAbandonmentRate':_0x223679,'erlangBusyFactor':_0xc9af99});});};module[_0xeefc('0x1d6')]=Dialer;
\ No newline at end of file
index 739f160..1afa416 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe605=['talktime','membername','connectedlinename','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','milliseconds','diff','seconds','scheduledat','type','queue','countbusyretry','countcongestionretry','countnoanswerretry','uniqueid','calleridname','name','calleridnum','number','starttime','responsetime','droptime'];(function(_0x1f7fd4,_0x3a9f77){var _0x54acfc=function(_0xf43b7b){while(--_0xf43b7b){_0x1f7fd4['push'](_0x1f7fd4['shift']());}};_0x54acfc(++_0x3a9f77);}(_0xe605,0x92));var _0x5e60=function(_0x46ff06,_0x382e58){_0x46ff06=_0x46ff06-0x0;var _0x3e4ad7=_0xe605[_0x46ff06];return _0x3e4ad7;};'use strict';var util=require(_0x5e60('0x0'));var _=require(_0x5e60('0x1'));var moment=require('moment');function getSeconds(_0x36add0,_0x455efd){var _0x342132=moment(_0x36add0)[_0x5e60('0x2')](0x0);var _0x4007b3=moment(_0x455efd)[_0x5e60('0x2')](0x0);return _0x342132[_0x5e60('0x3')](_0x4007b3,_0x5e60('0x4'));}function QueueCallerAbandon(_0x297ab2,_0xc41535){this[_0x5e60('0x5')]=_0x297ab2[_0x5e60('0x5')];this['type']=_0x297ab2[_0x5e60('0x6')];this['campaigntype']=_0x297ab2['type']==='outbound'?_0x5e60('0x7'):_0x297ab2[_0x5e60('0x6')];this[_0x5e60('0x8')]=_0x297ab2[_0x5e60('0x8')];this[_0x5e60('0x9')]=_0x297ab2[_0x5e60('0x9')];this['countnoanswerretry']=_0x297ab2[_0x5e60('0xa')];this['countglobal']=_0x297ab2[_0x5e60('0x8')]+_0x297ab2[_0x5e60('0x9')]+_0x297ab2[_0x5e60('0xa')];this['uniqueid']=_0xc41535[_0x5e60('0xb')];this[_0x5e60('0xc')]=_0x297ab2[_0x5e60('0xd')];this[_0x5e60('0xe')]=_0x297ab2[_0x5e60('0xf')];this[_0x5e60('0x10')]=_0x297ab2['starttime'];this[_0x5e60('0x11')]=_0x297ab2[_0x5e60('0x11')];this[_0x5e60('0x12')]=_0x297ab2[_0x5e60('0x12')];this['endtime']=this[_0x5e60('0x12')];this['ringtime']=getSeconds(_0x297ab2[_0x5e60('0x11')],_0x297ab2[_0x5e60('0x10')]);this['holdtime']=getSeconds(this[_0x5e60('0x12')],_0x297ab2[_0x5e60('0x11')]);this[_0x5e60('0x13')]=0x0;this[_0x5e60('0x7')]=_0xc41535['queue'];this[_0x5e60('0x14')]=_0xc41535[_0x5e60('0x15')];this['reason']=_0xc41535[_0x5e60('0x16')];this[_0x5e60('0x17')]=_0x297ab2[_0x5e60('0x17')];this[_0x5e60('0x18')]=_0x297ab2[_0x5e60('0x18')];this[_0x5e60('0x19')]=_0x297ab2[_0x5e60('0x19')];this[_0x5e60('0x1a')]=_0x297ab2[_0x5e60('0x1a')];this[_0x5e60('0x1b')]=_0x297ab2[_0x5e60('0x1b')];this['ListId']=_0x297ab2[_0x5e60('0x1c')];this['UserId']=_0x297ab2[_0x5e60('0x1d')];this[_0x5e60('0x1e')]=_0x297ab2[_0x5e60('0x1e')];this[_0x5e60('0x1f')]=_0x297ab2[_0x5e60('0x1f')];}module[_0x5e60('0x20')]=QueueCallerAbandon;
\ No newline at end of file
+var _0x5b02=['ListId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','moment','milliseconds','diff','seconds','scheduledat','type','campaigntype','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','name','calleridnum','number','starttime','responsetime','droptime','endtime','holdtime','talktime','membername','connectedlinename','reason','callback','callbackuniqueid','callbackat','recallme','ContactId'];(function(_0x5e5000,_0x3332ab){var _0x5d3d8e=function(_0x21b9f7){while(--_0x21b9f7){_0x5e5000['push'](_0x5e5000['shift']());}};_0x5d3d8e(++_0x3332ab);}(_0x5b02,0xe9));var _0x25b0=function(_0x16b4e4,_0x27d4ac){_0x16b4e4=_0x16b4e4-0x0;var _0x18274b=_0x5b02[_0x16b4e4];return _0x18274b;};'use strict';var util=require(_0x25b0('0x0'));var _=require(_0x25b0('0x1'));var moment=require(_0x25b0('0x2'));function getSeconds(_0x1c3295,_0x4ef71c){var _0x4cb227=moment(_0x1c3295)[_0x25b0('0x3')](0x0);var _0x53493e=moment(_0x4ef71c)[_0x25b0('0x3')](0x0);return _0x4cb227[_0x25b0('0x4')](_0x53493e,_0x25b0('0x5'));}function QueueCallerAbandon(_0x1928e8,_0x2d84a9){this['scheduledat']=_0x1928e8[_0x25b0('0x6')];this[_0x25b0('0x7')]=_0x1928e8['type'];this[_0x25b0('0x8')]=_0x1928e8['type']==='outbound'?_0x25b0('0x9'):_0x1928e8[_0x25b0('0x7')];this[_0x25b0('0xa')]=_0x1928e8['countbusyretry'];this[_0x25b0('0xb')]=_0x1928e8[_0x25b0('0xb')];this[_0x25b0('0xc')]=_0x1928e8[_0x25b0('0xc')];this[_0x25b0('0xd')]=_0x1928e8[_0x25b0('0xa')]+_0x1928e8[_0x25b0('0xb')]+_0x1928e8[_0x25b0('0xc')];this[_0x25b0('0xe')]=_0x2d84a9[_0x25b0('0xe')];this[_0x25b0('0xf')]=_0x1928e8[_0x25b0('0x10')];this[_0x25b0('0x11')]=_0x1928e8[_0x25b0('0x12')];this[_0x25b0('0x13')]=_0x1928e8[_0x25b0('0x13')];this[_0x25b0('0x14')]=_0x1928e8[_0x25b0('0x14')];this[_0x25b0('0x15')]=_0x1928e8[_0x25b0('0x15')];this[_0x25b0('0x16')]=this['droptime'];this['ringtime']=getSeconds(_0x1928e8[_0x25b0('0x14')],_0x1928e8['starttime']);this[_0x25b0('0x17')]=getSeconds(this[_0x25b0('0x15')],_0x1928e8[_0x25b0('0x14')]);this[_0x25b0('0x18')]=0x0;this['queue']=_0x2d84a9[_0x25b0('0x9')];this[_0x25b0('0x19')]=_0x2d84a9[_0x25b0('0x1a')];this[_0x25b0('0x1b')]=_0x2d84a9[_0x25b0('0x1b')];this[_0x25b0('0x1c')]=_0x1928e8['callback'];this[_0x25b0('0x1d')]=_0x1928e8[_0x25b0('0x1d')];this[_0x25b0('0x1e')]=_0x1928e8[_0x25b0('0x1e')];this[_0x25b0('0x1f')]=_0x1928e8[_0x25b0('0x1f')];this[_0x25b0('0x20')]=_0x1928e8[_0x25b0('0x20')];this[_0x25b0('0x21')]=_0x1928e8[_0x25b0('0x21')];this[_0x25b0('0x22')]=_0x1928e8[_0x25b0('0x22')];this['VoiceQueueId']=_0x1928e8[_0x25b0('0x23')];this[_0x25b0('0x24')]=_0x1928e8['CampaignId'];}module[_0x25b0('0x25')]=QueueCallerAbandon;
\ No newline at end of file
index 45f39a6..eaaf958 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xefb8=['exports','moment','uniqueid','channel','format','%s/%s/%s','tech','Trunk','name','localstationid','path','AttachmentId'];(function(_0x246890,_0x46b964){var _0x2b2a5a=function(_0x4f1232){while(--_0x4f1232){_0x246890['push'](_0x246890['shift']());}};_0x2b2a5a(++_0x46b964);}(_0xefb8,0xcd));var _0x8efb=function(_0x2203be,_0x4542b3){_0x2203be=_0x2203be-0x0;var _0x382b2d=_0xefb8[_0x2203be];return _0x382b2d;};'use strict';var util=require('util');var _=require('lodash');var moment=require(_0x8efb('0x0'));function Action(_0x242e72,_0x17d17c,_0x3570ac){this[_0x8efb('0x1')]=_0x242e72||undefined;this[_0x8efb('0x2')]=util[_0x8efb('0x3')](_0x8efb('0x4'),_0x17d17c[_0x8efb('0x5')],_0x17d17c[_0x8efb('0x6')][_0x8efb('0x7')],_0x3570ac['fax']);this[_0x8efb('0x8')]=_0x17d17c['localstationid'];this['headerinfo']=_0x17d17c['headerinfo'];this[_0x8efb('0x9')]=_0x3570ac[_0x8efb('0x9')];this[_0x8efb('0xa')]=_0x3570ac[_0x8efb('0xa')];}module[_0x8efb('0xb')]=Action;
\ No newline at end of file
+var _0xe63a=['util','lodash','moment','uniqueid','channel','format','Trunk','name','fax','localstationid','headerinfo','path','AttachmentId','exports'];(function(_0x4df6ba,_0x477c3e){var _0x472acf=function(_0x248987){while(--_0x248987){_0x4df6ba['push'](_0x4df6ba['shift']());}};_0x472acf(++_0x477c3e);}(_0xe63a,0x1ce));var _0xae63=function(_0x3484c2,_0xf2bae){_0x3484c2=_0x3484c2-0x0;var _0x492c7c=_0xe63a[_0x3484c2];return _0x492c7c;};'use strict';var util=require(_0xae63('0x0'));var _=require(_0xae63('0x1'));var moment=require(_0xae63('0x2'));function Action(_0x375aa0,_0x4b7874,_0x4d284f){this[_0xae63('0x3')]=_0x375aa0||undefined;this[_0xae63('0x4')]=util[_0xae63('0x5')]('%s/%s/%s',_0x4b7874['tech'],_0x4b7874[_0xae63('0x6')][_0xae63('0x7')],_0x4d284f[_0xae63('0x8')]);this[_0xae63('0x9')]=_0x4b7874['localstationid'];this['headerinfo']=_0x4b7874[_0xae63('0xa')];this[_0xae63('0xb')]=_0x4d284f[_0xae63('0xb')];this['AttachmentId']=_0x4d284f[_0xae63('0xc')];}module[_0xae63('0xd')]=Action;
\ No newline at end of file
index 97ac888..ec788a2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2089=['resolution','transferrate','calleridnum','/var/opt/motion2/server/files/attachments/','message','create','parse','.pdf','then','error','\x20notify\x20','stringify','catch','\x20receiveFax\x20','pick','response','reason','update','AttachmentId','SENDING\x20FAILED\x20','logger','[Fax][Message][Error][Updated]','[Fax][Message][Error][NoUpdate1]','[Fax][Message][Error][NoUpdate2]','updateStatus','[Fax][Message][Updated]','[Fax][Message][NoUpdate1]','finally','[Fax][Message][NoUpdate2]','\x20hangup\x20sendFile\x20','\x20hangup\x20faxRiceive\x20','faxpages','SUCCESS','faxstatusstring','SENDING\x20FAILED:\x20','SENDING\x20FAILED','send','execOriginate','FaxAccountId','[Fax][execOriginate][success]','Fax\x20received','[Fax][execOriginate][failure]','Fax\x20failed','isValid','gs\x20-q\x20-dNOPAUSE\x20-dBATCH\x20-sDEVICE=tiffg4\x20-sPAPERSIZE=letter\x20-sOutputFile=/var/opt/motion2/server/files/attachments/%s.tif\x20\x20%s\x20-c\x20quit','execute','format','%s/%s.tif','dir','Convert\x20pdf\x20to\x20tif','Action','variablesAction','addVariables','ext','isTrunkReachable','isNil','SIP/%s','reachable','unmonitored','checkTrunk','[Fax][checkTrunk][Trunk\x20not\x20work]','\x20Trunk\x20is\x20not\x20active','Trunk\x20not\x20working','Empty\x20Fax','Empty\x20path','Is\x20Valid','util','lodash','uuid','moment','path','./util/gs','fax','../ami','./rpcDb','./channel','./util/util','./action','../rpc/faxAccount','../rpc/attachment','../rpc/faxMessage','channels','faxAccounts','trunks','actions','newchannel','syncNewchannel','bind','varset','syncVarSet','newstate','syncNewState','newexten','syncNewExten','faxstatus','syncFaxStatus','receivefax','hangup','syncHangup','originateresponse','syncOriginateResponse','prototype','context','from-voip-provider','hasOwnProperty','exten','localstationid','uniqueid','channel','name','info','\x20syncNewchannel\x20','variable','value','channelstate','channelstatedesc','operation','status','filename','\x20syncFaxStatus\x20','syncReceiveFax','remotestationid','pagestransferred'];(function(_0x4d7df6,_0x3f6139){var _0x4c0d29=function(_0x12ae02){while(--_0x12ae02){_0x4d7df6['push'](_0x4d7df6['shift']());}};_0x4c0d29(++_0x3f6139);}(_0x2089,0xbd));var _0x9208=function(_0x30b1b7,_0x3dbeff){_0x30b1b7=_0x30b1b7-0x0;var _0x17ee7c=_0x2089[_0x30b1b7];return _0x17ee7c;};'use strict';var util=require(_0x9208('0x0'));var _=require(_0x9208('0x1'));var BPromise=require('bluebird');var uuid=require(_0x9208('0x2'));var moment=require(_0x9208('0x3'));var path=require(_0x9208('0x4'));var tiff2pdf=require('tiff2pdf');var gs=require(_0x9208('0x5'));var logger=require('../../../config/logger')(_0x9208('0x6'));var ami=require(_0x9208('0x7'));var rpcDb=require(_0x9208('0x8'));var Channel=require(_0x9208('0x9'));var ut=require(_0x9208('0xa'));var Action=require(_0x9208('0xb'));var faxAccount=require(_0x9208('0xc'));var attachment=require(_0x9208('0xd'));var faxMessage=require(_0x9208('0xe'));function Fax(_0x3f9bb6){this[_0x9208('0xf')]={};this[_0x9208('0x10')]=_0x3f9bb6[_0x9208('0x10')];this[_0x9208('0x11')]=_0x3f9bb6['trunks'];this[_0x9208('0x12')]={};ami['on'](_0x9208('0x13'),this[_0x9208('0x14')][_0x9208('0x15')](this));ami['on'](_0x9208('0x16'),this[_0x9208('0x17')]['bind'](this));ami['on'](_0x9208('0x18'),this[_0x9208('0x19')]['bind'](this));ami['on'](_0x9208('0x1a'),this[_0x9208('0x1b')][_0x9208('0x15')](this));ami['on'](_0x9208('0x1c'),this[_0x9208('0x1d')]['bind'](this));ami['on'](_0x9208('0x1e'),this['syncReceiveFax']['bind'](this));ami['on'](_0x9208('0x1f'),this[_0x9208('0x20')]['bind'](this));ami['on'](_0x9208('0x21'),this[_0x9208('0x22')][_0x9208('0x15')](this));}Fax[_0x9208('0x23')]['syncNewchannel']=function(_0x13355f){if(_0x13355f[_0x9208('0x24')]===_0x9208('0x25')){for(var _0x30a388 in this['faxAccounts']){if(this[_0x9208('0x10')][_0x9208('0x26')](_0x30a388)){if(_0x13355f[_0x9208('0x27')]===this[_0x9208('0x10')][_0x30a388][_0x9208('0x28')]){this[_0x9208('0xf')][_0x13355f[_0x9208('0x29')]]={};this['channels'][_0x13355f[_0x9208('0x29')]][_0x9208('0x2a')]=_0x13355f[_0x9208('0x2a')];this[_0x9208('0xf')][_0x13355f[_0x9208('0x29')]]['id']=this[_0x9208('0x10')][_0x30a388]['id'];this[_0x9208('0xf')][_0x13355f[_0x9208('0x29')]]['name']=this['faxAccounts'][_0x30a388][_0x9208('0x2b')];logger[_0x9208('0x2c')](_0x13355f['uniqueid'],_0x9208('0x2d'));}}}}if(this['actions'][_0x13355f[_0x9208('0x29')]]){this['channels'][_0x13355f[_0x9208('0x29')]]={};this[_0x9208('0xf')][_0x13355f[_0x9208('0x29')]][_0x9208('0x2a')]=_0x13355f['channel'];logger[_0x9208('0x2c')](_0x13355f[_0x9208('0x29')],_0x9208('0x2d'));}};Fax[_0x9208('0x23')][_0x9208('0x17')]=function(_0x50ee3a){if(this['channels'][_0x50ee3a[_0x9208('0x29')]]){for(var _0x25948a in _0x50ee3a[_0x9208('0x2e')]){if(_0x50ee3a[_0x9208('0x2e')][_0x9208('0x26')](_0x25948a)){this[_0x9208('0xf')][_0x50ee3a[_0x9208('0x29')]][_0x25948a]=_0x50ee3a[_0x9208('0x2f')];}}}};Fax[_0x9208('0x23')][_0x9208('0x19')]=function(_0x3cd77d){if(this[_0x9208('0xf')][_0x3cd77d[_0x9208('0x29')]]){this[_0x9208('0xf')][_0x3cd77d[_0x9208('0x29')]][_0x9208('0x30')]=_0x3cd77d[_0x9208('0x30')];this[_0x9208('0xf')][_0x3cd77d[_0x9208('0x29')]][_0x9208('0x31')]=_0x3cd77d[_0x9208('0x31')];}};Fax[_0x9208('0x23')][_0x9208('0x1b')]=function(_0x230f87){if(this[_0x9208('0xf')][_0x230f87[_0x9208('0x29')]]){for(var _0x11f15e in _0x230f87[_0x9208('0x2e')]){if(_0x230f87['variable'][_0x9208('0x26')](_0x11f15e)){this[_0x9208('0xf')][_0x230f87['uniqueid']][_0x11f15e]=_0x230f87[_0x9208('0x2f')];}}}};Fax['prototype']['syncFaxStatus']=function(_0x177f82){if(this[_0x9208('0xf')][_0x177f82[_0x9208('0x29')]]){this[_0x9208('0xf')][_0x177f82['uniqueid']][_0x9208('0x32')]=_0x177f82['operation'];this[_0x9208('0xf')][_0x177f82[_0x9208('0x29')]]['status']=_0x177f82[_0x9208('0x33')];this['channels'][_0x177f82['uniqueid']][_0x9208('0x28')]=_0x177f82[_0x9208('0x28')];this['channels'][_0x177f82[_0x9208('0x29')]][_0x9208('0x34')]=_0x177f82[_0x9208('0x34')];logger[_0x9208('0x2c')](_0x177f82[_0x9208('0x29')],_0x9208('0x35'));}};Fax[_0x9208('0x23')][_0x9208('0x36')]=function(_0x471c6c){var _0xe4ff9c=this;if(this[_0x9208('0xf')][_0x471c6c[_0x9208('0x29')]]){var _0x4012c5=this[_0x9208('0xf')][_0x471c6c[_0x9208('0x29')]]['id'];this[_0x9208('0xf')][_0x471c6c['uniqueid']][_0x9208('0x37')]=_0x471c6c[_0x9208('0x37')];this[_0x9208('0xf')][_0x471c6c['uniqueid']][_0x9208('0x38')]=_0x471c6c[_0x9208('0x38')];this[_0x9208('0xf')][_0x471c6c['uniqueid']][_0x9208('0x28')]=_0x471c6c[_0x9208('0x28')];this['channels'][_0x471c6c[_0x9208('0x29')]]['resolution']=_0x471c6c[_0x9208('0x39')];this[_0x9208('0xf')][_0x471c6c['uniqueid']]['transferrate']=_0x471c6c[_0x9208('0x3a')];this[_0x9208('0xf')][_0x471c6c[_0x9208('0x29')]][_0x9208('0x34')]=_0x471c6c[_0x9208('0x34')];this[_0x9208('0xf')][_0x471c6c[_0x9208('0x29')]]['calleridnum']=_0x471c6c[_0x9208('0x3b')];if(this[_0x9208('0xf')][_0x471c6c[_0x9208('0x29')]][_0x9208('0x38')]>0x0){tiff2pdf(_0x471c6c[_0x9208('0x34')],_0x9208('0x3c'),function(_0x587079){logger[_0x9208('0x2c')](_0x471c6c['uniqueid'],'\x20result\x20conversion\x20file\x20',_0x587079[_0x9208('0x3d')]);attachment[_0x9208('0x3e')]({'name':path[_0x9208('0x3f')](_0x471c6c[_0x9208('0x34')])['name'],'basename':path[_0x9208('0x3f')](_0x471c6c[_0x9208('0x34')])[_0x9208('0x2b')]+_0x9208('0x40'),'type':'application/pdf'})[_0x9208('0x41')](function(_0x4d087a){faxAccount['notify'](_0x4012c5,{'from':_0x471c6c[_0x9208('0x3b')],'mapKey':_0x9208('0x6'),'body':path['parse'](_0x471c6c['filename'])[_0x9208('0x2b')]+'.pdf','AttachmentId':_0x4d087a['id']})['catch'](function(_0x189555){logger[_0x9208('0x42')](_0x471c6c[_0x9208('0x29')],_0x9208('0x43'),JSON[_0x9208('0x44')](_0x189555));});})[_0x9208('0x45')](function(_0x224f09){logger[_0x9208('0x42')](_0x471c6c[_0x9208('0x29')],'\x20receiveFax\x20',JSON['stringify'](_0x224f09));});});}logger[_0x9208('0x2c')](_0x471c6c[_0x9208('0x29')],_0x9208('0x46'));}};Fax[_0x9208('0x23')][_0x9208('0x22')]=function(_0x2e495a){if(this[_0x9208('0x12')][_0x2e495a[_0x9208('0x29')]]){_['merge'](this[_0x9208('0xf')][_0x2e495a[_0x9208('0x29')]],_[_0x9208('0x47')](_0x2e495a,[_0x9208('0x48'),_0x9208('0x49')]));}};function updateStatus(_0x6dc2e0){if(_0x6dc2e0['AttachmentId']){faxMessage[_0x9208('0x4a')](_0x6dc2e0[_0x9208('0x4b')],{'failMessage':_0x9208('0x4c')})[_0x9208('0x41')](function(_0x19e328){ut[_0x9208('0x4d')](_0x9208('0x4e'),_0x19e328);})[_0x9208('0x45')](function(_0x3d60be){ut[_0x9208('0x4d')](_0x9208('0x4f'),_0x3d60be);});}else{ut[_0x9208('0x4d')](_0x9208('0x50'));}}Fax[_0x9208('0x23')][_0x9208('0x51')]=function(_0x140886,_0x2afc61,_0xff5916){var _0x129adb=this;var _0x2cd3e6={};if(_0x2afc61){_0x2cd3e6={'read':_0x2afc61};}else{_0x2cd3e6={'failMessage':_0xff5916};}if(this['actions'][_0x140886][_0x9208('0x4b')]){faxMessage[_0x9208('0x4a')](this[_0x9208('0x12')][_0x140886][_0x9208('0x4b')],_0x2cd3e6)[_0x9208('0x41')](function(_0x4c8a70){ut['logger'](_0x9208('0x52'),_0x4c8a70);})['catch'](function(_0x18c77d){ut['logger'](_0x9208('0x53'),_0x18c77d);})[_0x9208('0x54')](function(){delete _0x129adb['channels'][_0x140886];delete _0x129adb[_0x9208('0x12')][_0x140886];});}else{ut[_0x9208('0x4d')](_0x9208('0x55'));delete this['channels'][_0x140886];delete this['actions'][_0x140886];}};Fax[_0x9208('0x23')][_0x9208('0x20')]=function(_0x4d3af0){var _0x344f46=this;if(this[_0x9208('0xf')][_0x4d3af0[_0x9208('0x29')]]){if(this[_0x9208('0x12')][_0x4d3af0[_0x9208('0x29')]]){this[_0x9208('0xf')][_0x4d3af0[_0x9208('0x29')]]['id']=this['actions'][_0x4d3af0[_0x9208('0x29')]]['id'];this['channels'][_0x4d3af0[_0x9208('0x29')]][_0x9208('0x2b')]=this[_0x9208('0x12')][_0x4d3af0[_0x9208('0x29')]]['name'];}logger[_0x9208('0x2c')](_0x4d3af0['uniqueid'],this[_0x9208('0x12')][_0x4d3af0['uniqueid']]?_0x9208('0x56'):_0x9208('0x57'),JSON['stringify'](this[_0x9208('0xf')][_0x4d3af0[_0x9208('0x29')]]));if(this[_0x9208('0x12')][_0x4d3af0[_0x9208('0x29')]]){if(this[_0x9208('0xf')][_0x4d3af0['uniqueid']][_0x9208('0x58')]>0x0&&this[_0x9208('0xf')][_0x4d3af0[_0x9208('0x29')]]['faxstatus']===_0x9208('0x59')){this['updateStatus'](_0x4d3af0[_0x9208('0x29')],!![]);}else{this[_0x9208('0x51')](_0x4d3af0[_0x9208('0x29')],![],this[_0x9208('0xf')][_0x4d3af0[_0x9208('0x29')]][_0x9208('0x5a')]?_0x9208('0x5b')+this[_0x9208('0xf')][_0x4d3af0[_0x9208('0x29')]][_0x9208('0x5a')]:_0x9208('0x5c'));}}}};Fax['prototype'][_0x9208('0x5d')]=function(_0x4fd4e3){var _0x3f261e=this;return new BPromise(function(_0x53a886,_0x3e81ee){_0x3f261e[_0x9208('0x5e')](_0x4fd4e3,_0x3f261e[_0x9208('0x10')][_0x4fd4e3[_0x9208('0x5f')]])[_0x9208('0x41')](function(_0x496b73){ut['logger'](_0x9208('0x60'),_0x496b73);_0x53a886(ut[_0x9208('0x3d')](_0x9208('0x61')));})[_0x9208('0x45')](function(_0x342d3e){ut[_0x9208('0x4d')](_0x9208('0x62'),_0x342d3e);updateStatus(_0x4fd4e3);_0x3e81ee(ut[_0x9208('0x3d')](_0x9208('0x63')));});});};Fax[_0x9208('0x23')]['checkAfterSend']=function(_0x40562f){var _0x356836=this;return new BPromise(function(_0x1e60ea,_0x48194a){var _0x35c98e=_0x356836['checkTrunk'](_0x356836[_0x9208('0x10')][_0x40562f[_0x9208('0x5f')]]['Trunk'],_0x40562f);if(_0x35c98e[_0x9208('0x64')]){_0x1e60ea(ut[_0x9208('0x3d')]('Trunk\x20Reachable'));}else{_0x48194a(ut[_0x9208('0x3d')](_0x35c98e[_0x9208('0x3d')]));}});};function originate(_0x466ce5,_0x42134a,_0x45035f){return new BPromise(function(_0x21a931,_0x11ac2c){if(_0x45035f){var _0x5460ae=util['format'](_0x9208('0x65'),path['parse'](_0x466ce5[_0x9208('0x4')])[_0x9208('0x2b')],_0x466ce5['path']);gs[_0x9208('0x66')](_0x5460ae)[_0x9208('0x41')](function(){_0x466ce5[_0x9208('0x4')]=util[_0x9208('0x67')](_0x9208('0x68'),path['parse'](_0x466ce5[_0x9208('0x4')])[_0x9208('0x69')],path[_0x9208('0x3f')](_0x466ce5[_0x9208('0x4')])[_0x9208('0x2b')]);_0x42134a['XMF-PATH']=_0x466ce5[_0x9208('0x4')];ut[_0x9208('0x4d')](_0x9208('0x6a'),'');ami[_0x9208('0x6b')](ut[_0x9208('0x6c')](_0x466ce5,_0x42134a))['then'](function(_0x456f23){_0x21a931(_0x456f23);})['catch'](function(_0x3e5192){_0x11ac2c(_0x3e5192);});})[_0x9208('0x45')](function(_0x591302){_0x11ac2c(_0x591302);});}else{ami['Action'](ut[_0x9208('0x6c')](_0x466ce5,_0x42134a))[_0x9208('0x41')](function(_0x53720e){_0x21a931(_0x53720e);})[_0x9208('0x45')](function(_0x1c997e){_0x11ac2c(_0x1c997e);});}});}Fax[_0x9208('0x23')][_0x9208('0x5e')]=function(_0x5afc4b,_0x49d6cc){var _0x182840=this;return new BPromise(function(_0x3429fe,_0x34a92d){var _0x228d10=uuid['v4']();var _0x5e2f14=ut[_0x9208('0x6d')](_0x5afc4b,_0x49d6cc);_0x182840[_0x9208('0x12')][_0x228d10]=new Action(_0x228d10,_0x49d6cc,_0x5afc4b);var _0x59fbf1=_0x182840[_0x9208('0x12')][_0x228d10];if(path[_0x9208('0x3f')](_0x5afc4b[_0x9208('0x4')])[_0x9208('0x6e')]==='.pdf'){originate(_0x59fbf1,_0x5e2f14,!![])[_0x9208('0x41')](function(_0x1d681a){_0x3429fe(_0x1d681a);})[_0x9208('0x45')](function(_0x55e56c){_0x34a92d(_0x55e56c);});}else{originate(_0x59fbf1,_0x5e2f14,![])[_0x9208('0x41')](function(_0x427953){_0x3429fe(_0x427953);})[_0x9208('0x45')](function(_0x2f293a){_0x34a92d(_0x2f293a);});}});};Fax['prototype'][_0x9208('0x6f')]=function(_0x21b360){return!_['isNil'](_0x21b360)&&!_[_0x9208('0x70')](_0x21b360[_0x9208('0x2b')])&&!_[_0x9208('0x70')](_0x21b360['active'])&&_0x21b360['active']&&!_[_0x9208('0x70')](this[_0x9208('0x11')][util[_0x9208('0x67')]('SIP/%s',_0x21b360[_0x9208('0x2b')])])&&!_[_0x9208('0x70')](this[_0x9208('0x11')][util['format'](_0x9208('0x71'),_0x21b360[_0x9208('0x2b')])][_0x9208('0x33')])&&(this[_0x9208('0x11')][util['format'](_0x9208('0x71'),_0x21b360[_0x9208('0x2b')])][_0x9208('0x33')]===_0x9208('0x72')||this[_0x9208('0x11')][util['format'](_0x9208('0x71'),_0x21b360[_0x9208('0x2b')])][_0x9208('0x33')]===_0x9208('0x73'));};Fax[_0x9208('0x23')][_0x9208('0x74')]=function(_0x17b6a9,_0x5ebdc4){if(!this[_0x9208('0x6f')](_0x17b6a9)){ut[_0x9208('0x4d')](_0x9208('0x75'),_['isNil'](_0x17b6a9)?'':_0x17b6a9[_0x9208('0x2b')]+_0x9208('0x76'));return{'isValid':![],'message':_0x9208('0x77')};}if(_[_0x9208('0x70')](_0x5ebdc4['fax'])){ut[_0x9208('0x4d')]('[Fax][checkTrunk][Empty\x20Fax]',JSON['stringify'](_0x5ebdc4));return{'isValid':![],'message':_0x9208('0x78')};}if(_[_0x9208('0x70')](_0x5ebdc4['path'])){ut[_0x9208('0x4d')]('[Fax][checkTrunk][Empty\x20path]',JSON[_0x9208('0x44')](_0x5ebdc4));return{'isValid':![],'message':_0x9208('0x79')};}return{'isValid':!![],'message':_0x9208('0x7a')};};module['exports']=Fax;
\ No newline at end of file
+var _0x7a3b=['variablesAction','addVariables','ext','isTrunkReachable','active','isNil','SIP/%s','reachable','unmonitored','[Fax][checkTrunk][Trunk\x20not\x20work]','\x20Trunk\x20is\x20not\x20active','Trunk\x20not\x20working','[Fax][checkTrunk][Empty\x20Fax]','Empty\x20Fax','[Fax][checkTrunk][Empty\x20path]','Empty\x20path','Is\x20Valid','exports','util','lodash','bluebird','uuid','path','tiff2pdf','./util/gs','../../../config/logger','fax','./channel','./util/util','./action','../rpc/faxAccount','../rpc/attachment','faxAccounts','trunks','actions','newchannel','varset','syncVarSet','bind','newexten','faxstatus','syncFaxStatus','syncReceiveFax','hangup','originateresponse','syncOriginateResponse','syncNewchannel','hasOwnProperty','localstationid','uniqueid','channel','channels','name','info','\x20syncNewchannel\x20','prototype','variable','value','syncNewState','channelstate','channelstatedesc','syncNewExten','operation','status','\x20syncFaxStatus\x20','remotestationid','pagestransferred','resolution','transferrate','calleridnum','filename','/var/opt/motion2/server/files/attachments/','message','create','parse','then','notify','catch','error','\x20receiveFax\x20','stringify','merge','response','reason','AttachmentId','SENDING\x20FAILED\x20','logger','[Fax][Message][Error][NoUpdate1]','[Fax][Message][Error][NoUpdate2]','update','[Fax][Message][Updated]','[Fax][Message][NoUpdate1]','finally','syncHangup','\x20hangup\x20sendFile\x20','faxpages','updateStatus','faxstatusstring','SENDING\x20FAILED:\x20','SENDING\x20FAILED','execOriginate','FaxAccountId','[Fax][execOriginate][success]','Fax\x20received','[Fax][execOriginate][failure]','checkAfterSend','checkTrunk','Trunk','isValid','Trunk\x20Reachable','execute','format','dir','XMF-PATH','Convert\x20pdf\x20to\x20tif','Action'];(function(_0x6c993a,_0x5ea3ab){var _0x27f547=function(_0x22df20){while(--_0x22df20){_0x6c993a['push'](_0x6c993a['shift']());}};_0x27f547(++_0x5ea3ab);}(_0x7a3b,0xfa));var _0xb7a3=function(_0x7e029e,_0x225388){_0x7e029e=_0x7e029e-0x0;var _0x59b734=_0x7a3b[_0x7e029e];return _0x59b734;};'use strict';var util=require(_0xb7a3('0x0'));var _=require(_0xb7a3('0x1'));var BPromise=require(_0xb7a3('0x2'));var uuid=require(_0xb7a3('0x3'));var moment=require('moment');var path=require(_0xb7a3('0x4'));var tiff2pdf=require(_0xb7a3('0x5'));var gs=require(_0xb7a3('0x6'));var logger=require(_0xb7a3('0x7'))(_0xb7a3('0x8'));var ami=require('../ami');var rpcDb=require('./rpcDb');var Channel=require(_0xb7a3('0x9'));var ut=require(_0xb7a3('0xa'));var Action=require(_0xb7a3('0xb'));var faxAccount=require(_0xb7a3('0xc'));var attachment=require(_0xb7a3('0xd'));var faxMessage=require('../rpc/faxMessage');function Fax(_0x2f700d){this['channels']={};this[_0xb7a3('0xe')]=_0x2f700d[_0xb7a3('0xe')];this[_0xb7a3('0xf')]=_0x2f700d[_0xb7a3('0xf')];this[_0xb7a3('0x10')]={};ami['on'](_0xb7a3('0x11'),this['syncNewchannel']['bind'](this));ami['on'](_0xb7a3('0x12'),this[_0xb7a3('0x13')][_0xb7a3('0x14')](this));ami['on']('newstate',this['syncNewState'][_0xb7a3('0x14')](this));ami['on'](_0xb7a3('0x15'),this['syncNewExten']['bind'](this));ami['on'](_0xb7a3('0x16'),this[_0xb7a3('0x17')][_0xb7a3('0x14')](this));ami['on']('receivefax',this[_0xb7a3('0x18')]['bind'](this));ami['on'](_0xb7a3('0x19'),this['syncHangup'][_0xb7a3('0x14')](this));ami['on'](_0xb7a3('0x1a'),this[_0xb7a3('0x1b')][_0xb7a3('0x14')](this));}Fax['prototype'][_0xb7a3('0x1c')]=function(_0x5de67e){if(_0x5de67e['context']==='from-voip-provider'){for(var _0x48fa60 in this[_0xb7a3('0xe')]){if(this[_0xb7a3('0xe')][_0xb7a3('0x1d')](_0x48fa60)){if(_0x5de67e['exten']===this[_0xb7a3('0xe')][_0x48fa60][_0xb7a3('0x1e')]){this['channels'][_0x5de67e[_0xb7a3('0x1f')]]={};this['channels'][_0x5de67e['uniqueid']][_0xb7a3('0x20')]=_0x5de67e[_0xb7a3('0x20')];this[_0xb7a3('0x21')][_0x5de67e[_0xb7a3('0x1f')]]['id']=this[_0xb7a3('0xe')][_0x48fa60]['id'];this[_0xb7a3('0x21')][_0x5de67e[_0xb7a3('0x1f')]][_0xb7a3('0x22')]=this[_0xb7a3('0xe')][_0x48fa60][_0xb7a3('0x22')];logger[_0xb7a3('0x23')](_0x5de67e[_0xb7a3('0x1f')],'\x20syncNewchannel\x20');}}}}if(this['actions'][_0x5de67e[_0xb7a3('0x1f')]]){this[_0xb7a3('0x21')][_0x5de67e['uniqueid']]={};this[_0xb7a3('0x21')][_0x5de67e[_0xb7a3('0x1f')]]['channel']=_0x5de67e[_0xb7a3('0x20')];logger[_0xb7a3('0x23')](_0x5de67e[_0xb7a3('0x1f')],_0xb7a3('0x24'));}};Fax[_0xb7a3('0x25')][_0xb7a3('0x13')]=function(_0x2ec7d0){if(this[_0xb7a3('0x21')][_0x2ec7d0[_0xb7a3('0x1f')]]){for(var _0x1fd989 in _0x2ec7d0[_0xb7a3('0x26')]){if(_0x2ec7d0[_0xb7a3('0x26')][_0xb7a3('0x1d')](_0x1fd989)){this[_0xb7a3('0x21')][_0x2ec7d0[_0xb7a3('0x1f')]][_0x1fd989]=_0x2ec7d0[_0xb7a3('0x27')];}}}};Fax[_0xb7a3('0x25')][_0xb7a3('0x28')]=function(_0x3bbe1f){if(this[_0xb7a3('0x21')][_0x3bbe1f[_0xb7a3('0x1f')]]){this[_0xb7a3('0x21')][_0x3bbe1f[_0xb7a3('0x1f')]][_0xb7a3('0x29')]=_0x3bbe1f['channelstate'];this[_0xb7a3('0x21')][_0x3bbe1f[_0xb7a3('0x1f')]][_0xb7a3('0x2a')]=_0x3bbe1f[_0xb7a3('0x2a')];}};Fax[_0xb7a3('0x25')][_0xb7a3('0x2b')]=function(_0x448016){if(this[_0xb7a3('0x21')][_0x448016[_0xb7a3('0x1f')]]){for(var _0x317ba2 in _0x448016[_0xb7a3('0x26')]){if(_0x448016[_0xb7a3('0x26')][_0xb7a3('0x1d')](_0x317ba2)){this[_0xb7a3('0x21')][_0x448016[_0xb7a3('0x1f')]][_0x317ba2]=_0x448016[_0xb7a3('0x27')];}}}};Fax['prototype'][_0xb7a3('0x17')]=function(_0x343a66){if(this[_0xb7a3('0x21')][_0x343a66[_0xb7a3('0x1f')]]){this['channels'][_0x343a66[_0xb7a3('0x1f')]][_0xb7a3('0x2c')]=_0x343a66['operation'];this[_0xb7a3('0x21')][_0x343a66[_0xb7a3('0x1f')]]['status']=_0x343a66[_0xb7a3('0x2d')];this['channels'][_0x343a66[_0xb7a3('0x1f')]]['localstationid']=_0x343a66[_0xb7a3('0x1e')];this[_0xb7a3('0x21')][_0x343a66[_0xb7a3('0x1f')]]['filename']=_0x343a66['filename'];logger[_0xb7a3('0x23')](_0x343a66['uniqueid'],_0xb7a3('0x2e'));}};Fax[_0xb7a3('0x25')][_0xb7a3('0x18')]=function(_0x3012f2){var _0x39240b=this;if(this[_0xb7a3('0x21')][_0x3012f2['uniqueid']]){var _0x2d87d9=this[_0xb7a3('0x21')][_0x3012f2[_0xb7a3('0x1f')]]['id'];this[_0xb7a3('0x21')][_0x3012f2[_0xb7a3('0x1f')]][_0xb7a3('0x2f')]=_0x3012f2[_0xb7a3('0x2f')];this[_0xb7a3('0x21')][_0x3012f2[_0xb7a3('0x1f')]][_0xb7a3('0x30')]=_0x3012f2[_0xb7a3('0x30')];this['channels'][_0x3012f2[_0xb7a3('0x1f')]][_0xb7a3('0x1e')]=_0x3012f2[_0xb7a3('0x1e')];this['channels'][_0x3012f2[_0xb7a3('0x1f')]][_0xb7a3('0x31')]=_0x3012f2['resolution'];this[_0xb7a3('0x21')][_0x3012f2[_0xb7a3('0x1f')]][_0xb7a3('0x32')]=_0x3012f2[_0xb7a3('0x32')];this[_0xb7a3('0x21')][_0x3012f2[_0xb7a3('0x1f')]]['filename']=_0x3012f2['filename'];this[_0xb7a3('0x21')][_0x3012f2['uniqueid']]['calleridnum']=_0x3012f2[_0xb7a3('0x33')];if(this[_0xb7a3('0x21')][_0x3012f2[_0xb7a3('0x1f')]][_0xb7a3('0x30')]>0x0){tiff2pdf(_0x3012f2[_0xb7a3('0x34')],_0xb7a3('0x35'),function(_0x5deca8){logger[_0xb7a3('0x23')](_0x3012f2[_0xb7a3('0x1f')],'\x20result\x20conversion\x20file\x20',_0x5deca8[_0xb7a3('0x36')]);attachment[_0xb7a3('0x37')]({'name':path['parse'](_0x3012f2[_0xb7a3('0x34')])[_0xb7a3('0x22')],'basename':path[_0xb7a3('0x38')](_0x3012f2[_0xb7a3('0x34')])[_0xb7a3('0x22')]+'.pdf','type':'application/pdf'})[_0xb7a3('0x39')](function(_0x371901){faxAccount[_0xb7a3('0x3a')](_0x2d87d9,{'from':_0x3012f2[_0xb7a3('0x33')],'mapKey':_0xb7a3('0x8'),'body':path[_0xb7a3('0x38')](_0x3012f2[_0xb7a3('0x34')])['name']+'.pdf','AttachmentId':_0x371901['id']})[_0xb7a3('0x3b')](function(_0x558f86){logger['error'](_0x3012f2[_0xb7a3('0x1f')],'\x20notify\x20',JSON['stringify'](_0x558f86));});})['catch'](function(_0x5222a0){logger[_0xb7a3('0x3c')](_0x3012f2[_0xb7a3('0x1f')],_0xb7a3('0x3d'),JSON[_0xb7a3('0x3e')](_0x5222a0));});});}logger[_0xb7a3('0x23')](_0x3012f2[_0xb7a3('0x1f')],_0xb7a3('0x3d'));}};Fax[_0xb7a3('0x25')][_0xb7a3('0x1b')]=function(_0x1b15ed){if(this[_0xb7a3('0x10')][_0x1b15ed[_0xb7a3('0x1f')]]){_[_0xb7a3('0x3f')](this[_0xb7a3('0x21')][_0x1b15ed[_0xb7a3('0x1f')]],_['pick'](_0x1b15ed,[_0xb7a3('0x40'),_0xb7a3('0x41')]));}};function updateStatus(_0x38170b){if(_0x38170b[_0xb7a3('0x42')]){faxMessage['update'](_0x38170b[_0xb7a3('0x42')],{'failMessage':_0xb7a3('0x43')})['then'](function(_0xc3f7b0){ut[_0xb7a3('0x44')]('[Fax][Message][Error][Updated]',_0xc3f7b0);})['catch'](function(_0x43edf6){ut[_0xb7a3('0x44')](_0xb7a3('0x45'),_0x43edf6);});}else{ut['logger'](_0xb7a3('0x46'));}}Fax[_0xb7a3('0x25')]['updateStatus']=function(_0x322df7,_0x400ae4,_0x3d94cc){var _0xf9697c=this;var _0xd84e7e={};if(_0x400ae4){_0xd84e7e={'read':_0x400ae4};}else{_0xd84e7e={'failMessage':_0x3d94cc};}if(this[_0xb7a3('0x10')][_0x322df7][_0xb7a3('0x42')]){faxMessage[_0xb7a3('0x47')](this[_0xb7a3('0x10')][_0x322df7][_0xb7a3('0x42')],_0xd84e7e)[_0xb7a3('0x39')](function(_0x30c7a5){ut['logger'](_0xb7a3('0x48'),_0x30c7a5);})['catch'](function(_0x36cf8d){ut[_0xb7a3('0x44')](_0xb7a3('0x49'),_0x36cf8d);})[_0xb7a3('0x4a')](function(){delete _0xf9697c[_0xb7a3('0x21')][_0x322df7];delete _0xf9697c['actions'][_0x322df7];});}else{ut[_0xb7a3('0x44')]('[Fax][Message][NoUpdate2]');delete this[_0xb7a3('0x21')][_0x322df7];delete this['actions'][_0x322df7];}};Fax['prototype'][_0xb7a3('0x4b')]=function(_0x2286d4){var _0x248840=this;if(this[_0xb7a3('0x21')][_0x2286d4[_0xb7a3('0x1f')]]){if(this[_0xb7a3('0x10')][_0x2286d4[_0xb7a3('0x1f')]]){this[_0xb7a3('0x21')][_0x2286d4[_0xb7a3('0x1f')]]['id']=this['actions'][_0x2286d4[_0xb7a3('0x1f')]]['id'];this[_0xb7a3('0x21')][_0x2286d4[_0xb7a3('0x1f')]][_0xb7a3('0x22')]=this['actions'][_0x2286d4[_0xb7a3('0x1f')]]['name'];}logger[_0xb7a3('0x23')](_0x2286d4[_0xb7a3('0x1f')],this['actions'][_0x2286d4[_0xb7a3('0x1f')]]?_0xb7a3('0x4c'):'\x20hangup\x20faxRiceive\x20',JSON[_0xb7a3('0x3e')](this[_0xb7a3('0x21')][_0x2286d4[_0xb7a3('0x1f')]]));if(this[_0xb7a3('0x10')][_0x2286d4[_0xb7a3('0x1f')]]){if(this[_0xb7a3('0x21')][_0x2286d4[_0xb7a3('0x1f')]][_0xb7a3('0x4d')]>0x0&&this[_0xb7a3('0x21')][_0x2286d4['uniqueid']][_0xb7a3('0x16')]==='SUCCESS'){this['updateStatus'](_0x2286d4[_0xb7a3('0x1f')],!![]);}else{this[_0xb7a3('0x4e')](_0x2286d4[_0xb7a3('0x1f')],![],this['channels'][_0x2286d4[_0xb7a3('0x1f')]][_0xb7a3('0x4f')]?_0xb7a3('0x50')+this[_0xb7a3('0x21')][_0x2286d4[_0xb7a3('0x1f')]]['faxstatusstring']:_0xb7a3('0x51'));}}}};Fax[_0xb7a3('0x25')]['send']=function(_0x208e52){var _0x38a63f=this;return new BPromise(function(_0x3628d9,_0x4e431c){_0x38a63f[_0xb7a3('0x52')](_0x208e52,_0x38a63f['faxAccounts'][_0x208e52[_0xb7a3('0x53')]])[_0xb7a3('0x39')](function(_0x308387){ut[_0xb7a3('0x44')](_0xb7a3('0x54'),_0x308387);_0x3628d9(ut[_0xb7a3('0x36')](_0xb7a3('0x55')));})[_0xb7a3('0x3b')](function(_0x11ae06){ut[_0xb7a3('0x44')](_0xb7a3('0x56'),_0x11ae06);updateStatus(_0x208e52);_0x4e431c(ut['message']('Fax\x20failed'));});});};Fax[_0xb7a3('0x25')][_0xb7a3('0x57')]=function(_0x17608e){var _0x24c846=this;return new BPromise(function(_0x3c5c23,_0x29cda6){var _0x5450e0=_0x24c846[_0xb7a3('0x58')](_0x24c846[_0xb7a3('0xe')][_0x17608e['FaxAccountId']][_0xb7a3('0x59')],_0x17608e);if(_0x5450e0[_0xb7a3('0x5a')]){_0x3c5c23(ut[_0xb7a3('0x36')](_0xb7a3('0x5b')));}else{_0x29cda6(ut[_0xb7a3('0x36')](_0x5450e0[_0xb7a3('0x36')]));}});};function originate(_0x11413e,_0x16efab,_0xb4e16a){return new BPromise(function(_0x5080c6,_0x45900e){if(_0xb4e16a){var _0x1a43b8=util['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',path[_0xb7a3('0x38')](_0x11413e[_0xb7a3('0x4')])['name'],_0x11413e['path']);gs[_0xb7a3('0x5c')](_0x1a43b8)[_0xb7a3('0x39')](function(){_0x11413e['path']=util[_0xb7a3('0x5d')]('%s/%s.tif',path[_0xb7a3('0x38')](_0x11413e['path'])[_0xb7a3('0x5e')],path[_0xb7a3('0x38')](_0x11413e['path'])[_0xb7a3('0x22')]);_0x16efab[_0xb7a3('0x5f')]=_0x11413e[_0xb7a3('0x4')];ut[_0xb7a3('0x44')](_0xb7a3('0x60'),'');ami[_0xb7a3('0x61')](ut[_0xb7a3('0x62')](_0x11413e,_0x16efab))['then'](function(_0x575e59){_0x5080c6(_0x575e59);})[_0xb7a3('0x3b')](function(_0x2d4e69){_0x45900e(_0x2d4e69);});})['catch'](function(_0x4cab4d){_0x45900e(_0x4cab4d);});}else{ami[_0xb7a3('0x61')](ut[_0xb7a3('0x62')](_0x11413e,_0x16efab))['then'](function(_0x416cdf){_0x5080c6(_0x416cdf);})[_0xb7a3('0x3b')](function(_0x524e7c){_0x45900e(_0x524e7c);});}});}Fax[_0xb7a3('0x25')][_0xb7a3('0x52')]=function(_0x523866,_0x394518){var _0x8df03e=this;return new BPromise(function(_0x3d9d24,_0x148ac4){var _0x3768e0=uuid['v4']();var _0x3fa961=ut[_0xb7a3('0x63')](_0x523866,_0x394518);_0x8df03e[_0xb7a3('0x10')][_0x3768e0]=new Action(_0x3768e0,_0x394518,_0x523866);var _0x2ec427=_0x8df03e[_0xb7a3('0x10')][_0x3768e0];if(path[_0xb7a3('0x38')](_0x523866[_0xb7a3('0x4')])[_0xb7a3('0x64')]==='.pdf'){originate(_0x2ec427,_0x3fa961,!![])[_0xb7a3('0x39')](function(_0x183ae3){_0x3d9d24(_0x183ae3);})[_0xb7a3('0x3b')](function(_0x2539bc){_0x148ac4(_0x2539bc);});}else{originate(_0x2ec427,_0x3fa961,![])[_0xb7a3('0x39')](function(_0x51f061){_0x3d9d24(_0x51f061);})[_0xb7a3('0x3b')](function(_0x3e7d35){_0x148ac4(_0x3e7d35);});}});};Fax['prototype'][_0xb7a3('0x65')]=function(_0xea5ce8){return!_['isNil'](_0xea5ce8)&&!_['isNil'](_0xea5ce8[_0xb7a3('0x22')])&&!_['isNil'](_0xea5ce8[_0xb7a3('0x66')])&&_0xea5ce8[_0xb7a3('0x66')]&&!_[_0xb7a3('0x67')](this[_0xb7a3('0xf')][util[_0xb7a3('0x5d')](_0xb7a3('0x68'),_0xea5ce8['name'])])&&!_[_0xb7a3('0x67')](this[_0xb7a3('0xf')][util['format'](_0xb7a3('0x68'),_0xea5ce8[_0xb7a3('0x22')])]['status'])&&(this[_0xb7a3('0xf')][util[_0xb7a3('0x5d')]('SIP/%s',_0xea5ce8[_0xb7a3('0x22')])]['status']===_0xb7a3('0x69')||this[_0xb7a3('0xf')][util['format'](_0xb7a3('0x68'),_0xea5ce8[_0xb7a3('0x22')])]['status']===_0xb7a3('0x6a'));};Fax[_0xb7a3('0x25')][_0xb7a3('0x58')]=function(_0x4a2159,_0x584d23){if(!this[_0xb7a3('0x65')](_0x4a2159)){ut['logger'](_0xb7a3('0x6b'),_[_0xb7a3('0x67')](_0x4a2159)?'':_0x4a2159[_0xb7a3('0x22')]+_0xb7a3('0x6c'));return{'isValid':![],'message':_0xb7a3('0x6d')};}if(_[_0xb7a3('0x67')](_0x584d23['fax'])){ut['logger'](_0xb7a3('0x6e'),JSON[_0xb7a3('0x3e')](_0x584d23));return{'isValid':![],'message':_0xb7a3('0x6f')};}if(_[_0xb7a3('0x67')](_0x584d23[_0xb7a3('0x4')])){ut[_0xb7a3('0x44')](_0xb7a3('0x70'),JSON[_0xb7a3('0x3e')](_0x584d23));return{'isValid':![],'message':_0xb7a3('0x71')};}return{'isValid':!![],'message':_0xb7a3('0x72')};};module[_0xb7a3('0x73')]=Fax;
\ No newline at end of file
index ccbdc0a..61c1afc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x99d2=['then','catch','[Notify]\x20','util','../../../config/logger','lodash','../rpc/faxAccount','error','inspect','notify','resolve'];(function(_0x330177,_0x154271){var _0x454f44=function(_0x27ee3c){while(--_0x27ee3c){_0x330177['push'](_0x330177['shift']());}};_0x454f44(++_0x154271);}(_0x99d2,0x19a));var _0x299d=function(_0xe0055c,_0x5b0dda){_0xe0055c=_0xe0055c-0x0;var _0x2c54c5=_0x99d2[_0xe0055c];return _0x2c54c5;};'use strict';var util=require(_0x299d('0x0'));var BPromise=require('bluebird');var logger=require(_0x299d('0x1'))('preview');var _=require(_0x299d('0x2'));var faxAccount=require(_0x299d('0x3'));function loggerCatch(_0x5e1bad){return function(_0x5d0259){logger[_0x299d('0x4')](_0x5e1bad,util[_0x299d('0x5')](_0x5d0259,{'showHidden':![],'depth':null}));};}exports[_0x299d('0x6')]=function(_0x1db471,_0x267f92){return BPromise[_0x299d('0x7')]()[_0x299d('0x8')](faxAccount[_0x299d('0x6')](_0x1db471,_0x267f92))[_0x299d('0x9')](loggerCatch(_0x299d('0xa')));};
\ No newline at end of file
+var _0x1597=['../rpc/faxAccount','error','inspect','notify','resolve','catch','[Notify]\x20','util','bluebird','preview','lodash'];(function(_0x2f3be2,_0x224419){var _0x4cf7b0=function(_0xa03718){while(--_0xa03718){_0x2f3be2['push'](_0x2f3be2['shift']());}};_0x4cf7b0(++_0x224419);}(_0x1597,0x151));var _0x7159=function(_0x35c2fc,_0xabea37){_0x35c2fc=_0x35c2fc-0x0;var _0x4727fd=_0x1597[_0x35c2fc];return _0x4727fd;};'use strict';var util=require(_0x7159('0x0'));var BPromise=require(_0x7159('0x1'));var logger=require('../../../config/logger')(_0x7159('0x2'));var _=require(_0x7159('0x3'));var faxAccount=require(_0x7159('0x4'));function loggerCatch(_0x40886a){return function(_0x536918){logger[_0x7159('0x5')](_0x40886a,util[_0x7159('0x6')](_0x536918,{'showHidden':![],'depth':null}));};}exports[_0x7159('0x7')]=function(_0x9cebe4,_0x379b3f){return BPromise[_0x7159('0x8')]()['then'](faxAccount[_0x7159('0x7')](_0x9cebe4,_0x379b3f))[_0x7159('0x9')](loggerCatch(_0x7159('0xa')));};
\ No newline at end of file
index 4ad3d4b..a1862f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb098=['Exec\x20gs','info','inspect','util','../../../../config/logger','fax','child_process','exec'];(function(_0x3d3597,_0x242aed){var _0x366222=function(_0x21e1d8){while(--_0x21e1d8){_0x3d3597['push'](_0x3d3597['shift']());}};_0x366222(++_0x242aed);}(_0xb098,0x13b));var _0x8b09=function(_0x1cc355,_0x19e1a8){_0x1cc355=_0x1cc355-0x0;var _0x484172=_0xb098[_0x1cc355];return _0x484172;};'use strict';var util=require(_0x8b09('0x0'));var logger=require(_0x8b09('0x1'))(_0x8b09('0x2'));var BPromise=require('bluebird');var exec=require(_0x8b09('0x3'))[_0x8b09('0x4')];exports['execute']=function(_0x436b70){return new BPromise(function(_0x36ae39,_0x32c320){exec(_0x436b70,function(_0x440f7e,_0x261a67,_0x10954a){logger['info'](_0x8b09('0x5'),_0x261a67);if(_0x440f7e){logger[_0x8b09('0x6')](_0x8b09('0x5'),'\x20Error\x20:',util[_0x8b09('0x7')](_0x440f7e,{'showHidden':![],'depth':null}),_0x261a67,_0x10954a);_0x32c320(_0x440f7e);}_0x36ae39(_0x261a67);});});};
\ No newline at end of file
+var _0xe9a4=['bluebird','child_process','exec','execute','info','Exec\x20gs','inspect','util','../../../../config/logger','fax'];(function(_0x184416,_0x3342dd){var _0x381a3a=function(_0x202d41){while(--_0x202d41){_0x184416['push'](_0x184416['shift']());}};_0x381a3a(++_0x3342dd);}(_0xe9a4,0x15b));var _0x4e9a=function(_0x4e7d25,_0x58285f){_0x4e7d25=_0x4e7d25-0x0;var _0x526fe6=_0xe9a4[_0x4e7d25];return _0x526fe6;};'use strict';var util=require(_0x4e9a('0x0'));var logger=require(_0x4e9a('0x1'))(_0x4e9a('0x2'));var BPromise=require(_0x4e9a('0x3'));var exec=require(_0x4e9a('0x4'))[_0x4e9a('0x5')];exports[_0x4e9a('0x6')]=function(_0x170351){return new BPromise(function(_0xdd7431,_0x6bccea){exec(_0x170351,function(_0x398c46,_0x4b5143,_0x2e2c20){logger[_0x4e9a('0x7')]('Exec\x20gs',_0x4b5143);if(_0x398c46){logger[_0x4e9a('0x7')](_0x4e9a('0x8'),'\x20Error\x20:',util[_0x4e9a('0x9')](_0x398c46,{'showHidden':![],'depth':null}),_0x4b5143,_0x2e2c20);_0x6bccea(_0x398c46);}_0xdd7431(_0x4b5143);});});};
\ No newline at end of file
index d367e8b..088506b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xea9b=['from-sip','format','\x22%s\x22\x20<%s>','util','lodash','moment','../../../../config/logger','fax','message','logger','inspect','ecm','headerinfo','minrate','maxrate','gateway','faxdetect','t38timeout','localstationid','uniqueid','originate','xcally-motion-fax'];(function(_0x77fd25,_0x226ea2){var _0xe14528=function(_0x1551d5){while(--_0x1551d5){_0x77fd25['push'](_0x77fd25['shift']());}};_0xe14528(++_0x226ea2);}(_0xea9b,0x71));var _0xbea9=function(_0x268916,_0x1c27e1){_0x268916=_0x268916-0x0;var _0x38f8a4=_0xea9b[_0x268916];return _0x38f8a4;};'use strict';var util=require(_0xbea9('0x0'));var _=require(_0xbea9('0x1'));var moment=require(_0xbea9('0x2'));var logger=require(_0xbea9('0x3'))(_0xbea9('0x4'));exports[_0xbea9('0x5')]=function(_0x12c91b){return{'message':_0x12c91b};};exports[_0xbea9('0x6')]=function(_0x42955f,_0x34a55f){logger['info'](_0x42955f,util[_0xbea9('0x7')](_0x34a55f,{'showHidden':![],'depth':null}));};exports['addVariables']=function(_0xb87326,_0x33575e){var _0x11c9f6={'XMF-ECM':_0x33575e[_0xbea9('0x8')],'XMF-HEADERINFO':_0x33575e[_0xbea9('0x9')],'XMF-MINRATE':_0x33575e[_0xbea9('0xa')],'XMF-MAXRATE':_0x33575e[_0xbea9('0xb')],'XMF-MODEM':util['format']('\x22%s\x22',_0x33575e['modem']),'XMF-GATEWAY':_0x33575e[_0xbea9('0xc')],'XMF-FAXDETECT':_0x33575e[_0xbea9('0xd')],'XMF-T38TIMEOUT':_0x33575e[_0xbea9('0xe')],'XMF-LOCALSTATIONID':_0x33575e[_0xbea9('0xf')],'XMF-PATH':_0xb87326['path']};return _0x11c9f6;};exports['variablesAction']=function(_0x47de65,_0x3abbf8){return{'actionid':_0x47de65[_0xbea9('0x10')],'action':_0xbea9('0x11'),'channel':_0x47de65['channel'],'Exten':_0xbea9('0x12'),'Context':_0xbea9('0x13'),'Priority':'1','callerid':util[_0xbea9('0x14')](_0xbea9('0x15'),_0x47de65[_0xbea9('0x9')]?_0x47de65[_0xbea9('0x9')]:'',_0x47de65[_0xbea9('0xf')]),'variable':_0x3abbf8,'timeout':0x1e*0x3e8,'async':!![],'channelid':_0x47de65[_0xbea9('0x10')]};};
\ No newline at end of file
+var _0x8bb0=['uniqueid','lodash','fax','message','info','addVariables','headerinfo','minrate','maxrate','format','\x22%s\x22','modem','gateway','faxdetect','t38timeout','localstationid','path','originate','channel','xcally-motion-fax','from-sip','\x22%s\x22\x20<%s>'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x8bb0,0xf3));var _0x08bb=function(_0x3f3056,_0x3a1c5f){_0x3f3056=_0x3f3056-0x0;var _0x40c29e=_0x8bb0[_0x3f3056];return _0x40c29e;};'use strict';var util=require('util');var _=require(_0x08bb('0x0'));var moment=require('moment');var logger=require('../../../../config/logger')(_0x08bb('0x1'));exports[_0x08bb('0x2')]=function(_0x47cb8b){return{'message':_0x47cb8b};};exports['logger']=function(_0x2eafcc,_0xb9b68a){logger[_0x08bb('0x3')](_0x2eafcc,util['inspect'](_0xb9b68a,{'showHidden':![],'depth':null}));};exports[_0x08bb('0x4')]=function(_0x3b6a40,_0x416a29){var _0x16e404={'XMF-ECM':_0x416a29['ecm'],'XMF-HEADERINFO':_0x416a29[_0x08bb('0x5')],'XMF-MINRATE':_0x416a29[_0x08bb('0x6')],'XMF-MAXRATE':_0x416a29[_0x08bb('0x7')],'XMF-MODEM':util[_0x08bb('0x8')](_0x08bb('0x9'),_0x416a29[_0x08bb('0xa')]),'XMF-GATEWAY':_0x416a29[_0x08bb('0xb')],'XMF-FAXDETECT':_0x416a29[_0x08bb('0xc')],'XMF-T38TIMEOUT':_0x416a29[_0x08bb('0xd')],'XMF-LOCALSTATIONID':_0x416a29[_0x08bb('0xe')],'XMF-PATH':_0x3b6a40[_0x08bb('0xf')]};return _0x16e404;};exports['variablesAction']=function(_0x5ad87b,_0x5ba5f7){return{'actionid':_0x5ad87b['uniqueid'],'action':_0x08bb('0x10'),'channel':_0x5ad87b[_0x08bb('0x11')],'Exten':_0x08bb('0x12'),'Context':_0x08bb('0x13'),'Priority':'1','callerid':util[_0x08bb('0x8')](_0x08bb('0x14'),_0x5ad87b['headerinfo']?_0x5ad87b['headerinfo']:'',_0x5ad87b[_0x08bb('0xe')]),'variable':_0x5ba5f7,'timeout':0x1e*0x3e8,'async':!![],'channelid':_0x5ad87b[_0x08bb('0x15')]};};
\ No newline at end of file
index a12b5d0..35655f5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5043=['getFreshdeskAccounts','initFreshdeskAccounts','getZohoAccounts','initZohoAccounts','getVtigerAccounts','initVtigerAccounts','initVoiceExtensions','getFaxAccounts','initFaxAccounts','resolve','getVoiceQueueReports','initVoiceQueueReports','getVoiceQueueHopperHistory','initVoiceQueueHopperHistory','getCampaignHopperHistory','initCampaignHopperHistory','initVoiceCallReports','catch','log','listen','sync','bluebird','util','moment','./server','./realtime','./report','./acw','./trigger','./dialer','./preview','./fax','./rpc/user','./rpc/voiceQueue','./rpc/voiceQueueReport','./rpc/trigger','./rpc/cmHopperHistory','./rpc/campaign','./rpc/faxAccount','./rpc/integrations/zendesk','./rpc/integrations/sugarcrm','./rpc/integrations/freshdesk','./rpc/integrations/desk','./rpc/integrations/vtiger','get','hour','then','getTelephones','initTelephones','getTrunks','getTriggers','initTriggers','getTemplates','initZendeskAccounts','getSalesforceAccounts','initSalesforceAccounts','getSugarcrmAccounts','initSugarcrmAccounts'];(function(_0x43cce0,_0x5b432b){var _0x663f7e=function(_0x59c38c){while(--_0x59c38c){_0x43cce0['push'](_0x43cce0['shift']());}};_0x663f7e(++_0x5b432b);}(_0x5043,0x89));var _0x3504=function(_0x3b7ccc,_0x365219){_0x3b7ccc=_0x3b7ccc-0x0;var _0x37f418=_0x5043[_0x3b7ccc];return _0x37f418;};'use strict';var BPromise=require(_0x3504('0x0'));var util=require(_0x3504('0x1'));var moment=require(_0x3504('0x2'));var server=require(_0x3504('0x3'));var Realtime=require(_0x3504('0x4'));var Report=require(_0x3504('0x5'));var Acw=require(_0x3504('0x6'));var Trigger=require(_0x3504('0x7'));var Dialer=require(_0x3504('0x8'));var Preview=require(_0x3504('0x9'));var Fax=require(_0x3504('0xa'));var user=require(_0x3504('0xb'));var voiceQueue=require(_0x3504('0xc'));var voiceQueueReport=require(_0x3504('0xd'));var voiceCallReport=require('./rpc/voiceCallReport');var trunk=require('./rpc/trunk');var trigger=require(_0x3504('0xe'));var template=require('./rpc/template');var cmHopperHistory=require(_0x3504('0xf'));var campaign=require(_0x3504('0x10'));var voiceExtension=require('./rpc/voiceExtension');var faxAccount=require(_0x3504('0x11'));var zendesk=require(_0x3504('0x12'));var salesforce=require('./rpc/integrations/salesforce');var sugarcrm=require(_0x3504('0x13'));var freshdesk=require(_0x3504('0x14'));var desk=require(_0x3504('0x15'));var zoho=require('./rpc/integrations/zoho');var vtiger=require(_0x3504('0x16'));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()[_0x3504('0x17')](_0x3504('0x18'))===0x0&&initP){initP=![];isTrue=!![];initParams();}if(moment()[_0x3504('0x17')](_0x3504('0x18'))===0x1&&isTrue){isTrue=![];initP=!![];}}function initRealtime(){ifMidnight();return BPromise['resolve']()[_0x3504('0x19')](user['getAgents']())['then'](realtime['initAgents']())[_0x3504('0x19')](user[_0x3504('0x1a')]())[_0x3504('0x19')](realtime[_0x3504('0x1b')]())['then'](trunk[_0x3504('0x1c')]())[_0x3504('0x19')](realtime['initTrunks']())[_0x3504('0x19')](voiceQueue['getVoiceQueues']())[_0x3504('0x19')](realtime['initVoiceQueues']())[_0x3504('0x19')](trigger[_0x3504('0x1d')]())[_0x3504('0x19')](realtime[_0x3504('0x1e')]())[_0x3504('0x19')](template[_0x3504('0x1f')]())[_0x3504('0x19')](realtime['initTemplates']())[_0x3504('0x19')](zendesk['getZendeskAccounts']())[_0x3504('0x19')](realtime[_0x3504('0x20')]())['then'](salesforce[_0x3504('0x21')]())[_0x3504('0x19')](realtime[_0x3504('0x22')]())[_0x3504('0x19')](sugarcrm[_0x3504('0x23')]())[_0x3504('0x19')](realtime[_0x3504('0x24')]())[_0x3504('0x19')](freshdesk[_0x3504('0x25')]())[_0x3504('0x19')](realtime[_0x3504('0x26')]())['then'](desk['getDeskAccounts']())[_0x3504('0x19')](realtime['initDeskAccounts']())[_0x3504('0x19')](zoho[_0x3504('0x27')]())[_0x3504('0x19')](realtime[_0x3504('0x28')]())['then'](vtiger[_0x3504('0x29')]())[_0x3504('0x19')](realtime[_0x3504('0x2a')]())['then'](campaign['getCampaigns']())[_0x3504('0x19')](realtime['initCampaigns']())['then'](voiceExtension['getVoiceExtensions']())[_0x3504('0x19')](realtime[_0x3504('0x2b')]())[_0x3504('0x19')](faxAccount[_0x3504('0x2c')]())[_0x3504('0x19')](realtime[_0x3504('0x2d')]())[_0x3504('0x19')](function(){return realtime;});}function initParams(){return BPromise[_0x3504('0x2e')]()[_0x3504('0x19')](voiceQueueReport[_0x3504('0x2f')]())[_0x3504('0x19')](realtime[_0x3504('0x30')]())[_0x3504('0x19')](cmHopperHistory[_0x3504('0x31')]())['then'](realtime[_0x3504('0x32')]())[_0x3504('0x19')](cmHopperHistory[_0x3504('0x33')]())[_0x3504('0x19')](realtime[_0x3504('0x34')]())[_0x3504('0x19')](voiceCallReport['getVoiceCallReports']())['then'](realtime[_0x3504('0x35')]())[_0x3504('0x19')](function(_0x339992){})[_0x3504('0x36')](function(_0x366db6){console[_0x3504('0x37')](_0x366db6);});}function main(){return server[_0x3504('0x38')](realtime,preview,fax)['then'](function(_0x35b89b){return initRealtime();})['then'](function(){return initParams();})[_0x3504('0x19')](function(){report[_0x3504('0x39')]();setInterval(initRealtime,0x1388);})['catch'](function(_0x349e8b){console[_0x3504('0x37')](_0x349e8b);});}main();
\ No newline at end of file
+var _0xbc76=['getSalesforceAccounts','initSalesforceAccounts','getSugarcrmAccounts','initSugarcrmAccounts','getFreshdeskAccounts','initFreshdeskAccounts','getDeskAccounts','getZohoAccounts','initZohoAccounts','getVtigerAccounts','initVtigerAccounts','getCampaigns','initCampaigns','getVoiceExtensions','initVoiceExtensions','getFaxAccounts','initFaxAccounts','getVoiceQueueReports','initVoiceQueueReports','initVoiceQueueHopperHistory','getCampaignHopperHistory','initCampaignHopperHistory','initVoiceCallReports','catch','listen','bluebird','util','moment','./server','./realtime','./report','./trigger','./dialer','./preview','./rpc/user','./rpc/voiceQueue','./rpc/voiceQueueReport','./rpc/voiceCallReport','./rpc/cmHopperHistory','./rpc/voiceExtension','./rpc/integrations/zendesk','./rpc/integrations/salesforce','./rpc/integrations/freshdesk','./rpc/integrations/desk','./rpc/integrations/vtiger','hour','resolve','then','getAgents','initAgents','getTelephones','initTelephones','initTrunks','getVoiceQueues','getTriggers','initTriggers','getZendeskAccounts','initZendeskAccounts'];(function(_0x4bdf64,_0x3022b2){var _0x9a1a19=function(_0x4e551b){while(--_0x4e551b){_0x4bdf64['push'](_0x4bdf64['shift']());}};_0x9a1a19(++_0x3022b2);}(_0xbc76,0x101));var _0x6bc7=function(_0x4ba5de,_0x5e8461){_0x4ba5de=_0x4ba5de-0x0;var _0x387921=_0xbc76[_0x4ba5de];return _0x387921;};'use strict';var BPromise=require(_0x6bc7('0x0'));var util=require(_0x6bc7('0x1'));var moment=require(_0x6bc7('0x2'));var server=require(_0x6bc7('0x3'));var Realtime=require(_0x6bc7('0x4'));var Report=require(_0x6bc7('0x5'));var Acw=require('./acw');var Trigger=require(_0x6bc7('0x6'));var Dialer=require(_0x6bc7('0x7'));var Preview=require(_0x6bc7('0x8'));var Fax=require('./fax');var user=require(_0x6bc7('0x9'));var voiceQueue=require(_0x6bc7('0xa'));var voiceQueueReport=require(_0x6bc7('0xb'));var voiceCallReport=require(_0x6bc7('0xc'));var trunk=require('./rpc/trunk');var trigger=require('./rpc/trigger');var template=require('./rpc/template');var cmHopperHistory=require(_0x6bc7('0xd'));var campaign=require('./rpc/campaign');var voiceExtension=require(_0x6bc7('0xe'));var faxAccount=require('./rpc/faxAccount');var zendesk=require(_0x6bc7('0xf'));var salesforce=require(_0x6bc7('0x10'));var sugarcrm=require('./rpc/integrations/sugarcrm');var freshdesk=require(_0x6bc7('0x11'));var desk=require(_0x6bc7('0x12'));var zoho=require('./rpc/integrations/zoho');var vtiger=require(_0x6bc7('0x13'));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'](_0x6bc7('0x14'))===0x0&&initP){initP=![];isTrue=!![];initParams();}if(moment()['get'](_0x6bc7('0x14'))===0x1&&isTrue){isTrue=![];initP=!![];}}function initRealtime(){ifMidnight();return BPromise[_0x6bc7('0x15')]()[_0x6bc7('0x16')](user[_0x6bc7('0x17')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x18')]())[_0x6bc7('0x16')](user[_0x6bc7('0x19')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x1a')]())[_0x6bc7('0x16')](trunk['getTrunks']())[_0x6bc7('0x16')](realtime[_0x6bc7('0x1b')]())[_0x6bc7('0x16')](voiceQueue[_0x6bc7('0x1c')]())['then'](realtime['initVoiceQueues']())[_0x6bc7('0x16')](trigger[_0x6bc7('0x1d')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x1e')]())[_0x6bc7('0x16')](template['getTemplates']())[_0x6bc7('0x16')](realtime['initTemplates']())[_0x6bc7('0x16')](zendesk[_0x6bc7('0x1f')]())['then'](realtime[_0x6bc7('0x20')]())[_0x6bc7('0x16')](salesforce[_0x6bc7('0x21')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x22')]())[_0x6bc7('0x16')](sugarcrm[_0x6bc7('0x23')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x24')]())[_0x6bc7('0x16')](freshdesk[_0x6bc7('0x25')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x26')]())['then'](desk[_0x6bc7('0x27')]())[_0x6bc7('0x16')](realtime['initDeskAccounts']())[_0x6bc7('0x16')](zoho[_0x6bc7('0x28')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x29')]())[_0x6bc7('0x16')](vtiger[_0x6bc7('0x2a')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x2b')]())[_0x6bc7('0x16')](campaign[_0x6bc7('0x2c')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x2d')]())[_0x6bc7('0x16')](voiceExtension[_0x6bc7('0x2e')]())['then'](realtime[_0x6bc7('0x2f')]())[_0x6bc7('0x16')](faxAccount[_0x6bc7('0x30')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x31')]())[_0x6bc7('0x16')](function(){return realtime;});}function initParams(){return BPromise[_0x6bc7('0x15')]()[_0x6bc7('0x16')](voiceQueueReport[_0x6bc7('0x32')]())['then'](realtime[_0x6bc7('0x33')]())[_0x6bc7('0x16')](cmHopperHistory['getVoiceQueueHopperHistory']())[_0x6bc7('0x16')](realtime[_0x6bc7('0x34')]())[_0x6bc7('0x16')](cmHopperHistory[_0x6bc7('0x35')]())[_0x6bc7('0x16')](realtime[_0x6bc7('0x36')]())['then'](voiceCallReport['getVoiceCallReports']())[_0x6bc7('0x16')](realtime[_0x6bc7('0x37')]())[_0x6bc7('0x16')](function(_0x12a53e){})[_0x6bc7('0x38')](function(_0x21479a){console['log'](_0x21479a);});}function main(){return server[_0x6bc7('0x39')](realtime,preview,fax)['then'](function(_0xb996ba){return initRealtime();})[_0x6bc7('0x16')](function(){return initParams();})[_0x6bc7('0x16')](function(){report['sync']();setInterval(initRealtime,0x1388);})[_0x6bc7('0x38')](function(_0x2cce4f){console['log'](_0x2cce4f);});}main();
\ No newline at end of file
index 7aba38f..a7be2fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe6cd=['online','voiceStatus','voiceStatusTime','voiceStatusCallerIdNumber','prototype','updateStatusRealtime','toLowerCase','idle','inuse','statePause','toNumber','stringify','format','user:%s','emit','user:save','exports','util','md5','socket.io-emitter','localhost','name','email','accountcode','fullname','state','unknown','status','address','phone','mobile'];(function(_0x9eb866,_0x182140){var _0x5082f9=function(_0x414911){while(--_0x414911){_0x9eb866['push'](_0x9eb866['shift']());}};_0x5082f9(++_0x182140);}(_0xe6cd,0x109));var _0xde6c=function(_0x2ceb8e,_0x19ba8e){_0x2ceb8e=_0x2ceb8e-0x0;var _0xe283bb=_0xe6cd[_0x2ceb8e];return _0xe283bb;};'use strict';var _=require('lodash');var util=require(_0xde6c('0x0'));var moment=require('moment');var md5=require(_0xde6c('0x1'));var io=require(_0xde6c('0x2'))({'host':_0xde6c('0x3'),'port':0x18eb});function Agent(_0x518c47){this['id']=_0x518c47['id']||0x0;this[_0xde6c('0x4')]=_0x518c47[_0xde6c('0x4')]||'';this[_0xde6c('0x5')]=_0x518c47['email']||'';this[_0xde6c('0x6')]=_0x518c47[_0xde6c('0x6')]||'';this[_0xde6c('0x7')]=_0x518c47[_0xde6c('0x7')]||'';this[_0xde6c('0x8')]=_0xde6c('0x9');this['stateTime']=0x0;this[_0xde6c('0xa')]='unknown';this[_0xde6c('0xb')]='';this[_0xde6c('0xc')]='';this[_0xde6c('0xd')]='';this[_0xde6c('0xe')]=_0x518c47[_0xde6c('0xe')]||![];this[_0xde6c('0xf')]=_0xde6c('0x9');this[_0xde6c('0x10')]=0x0;this[_0xde6c('0x11')]='';this['voiceStatusQueue']='';this[_0xde6c('0x1')]='';}Agent[_0xde6c('0x12')][_0xde6c('0x13')]=function(_0x51d186){var _0x46b42c;if(_0x51d186&&_0x51d186[_0xde6c('0x8')]){_0x46b42c=_0x51d186[_0xde6c('0x8')][_0xde6c('0x14')]();switch(_0x46b42c){case'not_inuse':_0x46b42c=_0xde6c('0x15');break;case _0xde6c('0x16'):_0x46b42c='talking';break;}}if(_0x46b42c&&this[_0xde6c('0xf')]!==_0x46b42c||_0x51d186[_0xde6c('0x17')]){this[_0xde6c('0x10')]=_[_0xde6c('0x18')](moment()['format']('x'));}if(_0x46b42c){this[_0xde6c('0xf')]=_0x46b42c;}var _0x4bfa84={'id':this['id'],'name':this[_0xde6c('0x4')],'email':this['email'],'accountcode':this[_0xde6c('0x6')],'fullname':this['fullname'],'state':this[_0xde6c('0x8')],'stateTime':this['stateTime'],'status':this[_0xde6c('0xa')],'address':this[_0xde6c('0xb')],'online':this[_0xde6c('0xe')],'voiceStatus':this[_0xde6c('0xf')],'voiceStatusTime':this[_0xde6c('0x10')],'voiceStatusCallerIdNumber':this[_0xde6c('0x11')],'voiceStatusQueue':this['voiceStatusQueue']};var _0x51b4dc=md5(JSON[_0xde6c('0x19')](_0x4bfa84));if(this['md5']!==_0x51b4dc){this['md5']=_0x51b4dc;io['to'](util[_0xde6c('0x1a')](_0xde6c('0x1b'),_0x4bfa84['name']))[_0xde6c('0x1c')](_0xde6c('0x1d'),_0x4bfa84);}};module[_0xde6c('0x1e')]=Agent;
\ No newline at end of file
+var _0x9871=['emit','user:save','util','moment','md5','localhost','name','email','accountcode','fullname','state','address','phone','online','voiceStatus','voiceStatusTime','voiceStatusCallerIdNumber','voiceStatusQueue','prototype','updateStatusRealtime','toLowerCase','idle','inuse','talking','format','status'];(function(_0x45dcdb,_0x3075d3){var _0x545ce8=function(_0x1a9bde){while(--_0x1a9bde){_0x45dcdb['push'](_0x45dcdb['shift']());}};_0x545ce8(++_0x3075d3);}(_0x9871,0xd2));var _0x1987=function(_0x59ee6f,_0x450239){_0x59ee6f=_0x59ee6f-0x0;var _0x4c0979=_0x9871[_0x59ee6f];return _0x4c0979;};'use strict';var _=require('lodash');var util=require(_0x1987('0x0'));var moment=require(_0x1987('0x1'));var md5=require(_0x1987('0x2'));var io=require('socket.io-emitter')({'host':_0x1987('0x3'),'port':0x18eb});function Agent(_0x1f9d81){this['id']=_0x1f9d81['id']||0x0;this['name']=_0x1f9d81[_0x1987('0x4')]||'';this[_0x1987('0x5')]=_0x1f9d81[_0x1987('0x5')]||'';this[_0x1987('0x6')]=_0x1f9d81[_0x1987('0x6')]||'';this[_0x1987('0x7')]=_0x1f9d81[_0x1987('0x7')]||'';this[_0x1987('0x8')]='unknown';this['stateTime']=0x0;this['status']='unknown';this[_0x1987('0x9')]='';this[_0x1987('0xa')]='';this['mobile']='';this[_0x1987('0xb')]=_0x1f9d81['online']||![];this[_0x1987('0xc')]='unknown';this[_0x1987('0xd')]=0x0;this[_0x1987('0xe')]='';this[_0x1987('0xf')]='';this[_0x1987('0x2')]='';}Agent[_0x1987('0x10')][_0x1987('0x11')]=function(_0x561ae8){var _0x2d30c4;if(_0x561ae8&&_0x561ae8['state']){_0x2d30c4=_0x561ae8[_0x1987('0x8')][_0x1987('0x12')]();switch(_0x2d30c4){case'not_inuse':_0x2d30c4=_0x1987('0x13');break;case _0x1987('0x14'):_0x2d30c4=_0x1987('0x15');break;}}if(_0x2d30c4&&this[_0x1987('0xc')]!==_0x2d30c4||_0x561ae8['statePause']){this['voiceStatusTime']=_['toNumber'](moment()[_0x1987('0x16')]('x'));}if(_0x2d30c4){this['voiceStatus']=_0x2d30c4;}var _0x10f684={'id':this['id'],'name':this[_0x1987('0x4')],'email':this[_0x1987('0x5')],'accountcode':this[_0x1987('0x6')],'fullname':this['fullname'],'state':this[_0x1987('0x8')],'stateTime':this['stateTime'],'status':this[_0x1987('0x17')],'address':this[_0x1987('0x9')],'online':this[_0x1987('0xb')],'voiceStatus':this['voiceStatus'],'voiceStatusTime':this[_0x1987('0xd')],'voiceStatusCallerIdNumber':this[_0x1987('0xe')],'voiceStatusQueue':this[_0x1987('0xf')]};var _0x41e93b=md5(JSON['stringify'](_0x10f684));if(this['md5']!==_0x41e93b){this[_0x1987('0x2')]=_0x41e93b;io['to'](util[_0x1987('0x16')]('user:%s',_0x10f684[_0x1987('0x4')]))[_0x1987('0x18')](_0x1987('0x19'),_0x10f684);}};module['exports']=Agent;
\ No newline at end of file
index 0fb6687..cfdaa56 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb74d=['TrunkBackup','Trunk','Interval','SquareProject','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','exports','name','type','originated','temp','ivrAnswerCallsDay','message','sendMessageOneNotActive','active','limitCalls','dialTimezone','dialGlobalInterval','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialOrderByScheduledAt','dialPrefix','dialRandomLastDigitCallerIdNumber'];(function(_0x18be78,_0x540caa){var _0x1e2cde=function(_0x40143c){while(--_0x40143c){_0x18be78['push'](_0x18be78['shift']());}};_0x1e2cde(++_0x540caa);}(_0xb74d,0x16e));var _0xdb74=function(_0x3f6b1b,_0x58d3d6){_0x3f6b1b=_0x3f6b1b-0x0;var _0x4a3d2b=_0xb74d[_0x3f6b1b];return _0x4a3d2b;};'use strict';function Campaign(_0x419253){this['id']=_0x419253['id']||0x0;this['name']=_0x419253[_0xdb74('0x0')]||'';this['type']=_0x419253[_0xdb74('0x1')]||'campaign';this[_0xdb74('0x2')]=0x0;this[_0xdb74('0x3')]=0x0;this[_0xdb74('0x4')]=0x0;this['ivrTotalCallsDays']=0x0;this[_0xdb74('0x5')]='';this[_0xdb74('0x6')]=!![];this[_0xdb74('0x7')]=_0x419253['active'];this['limitCalls']=_0x419253[_0xdb74('0x8')];this['dialTimezone']=_0x419253[_0xdb74('0x9')]||null;this[_0xdb74('0xa')]=_0x419253['dialGlobalInterval']?_0x419253[_0xdb74('0xa')]:null;this['dialOriginateCallerIdName']=_0x419253[_0xdb74('0xb')];this[_0xdb74('0xc')]=_0x419253['dialOriginateCallerIdNumber'];this[_0xdb74('0xd')]=_0x419253[_0xdb74('0xd')]||0x1e;this[_0xdb74('0xe')]=_0x419253['dialCongestionMaxRetry'];this['dialCongestionRetryFrequency']=_0x419253[_0xdb74('0xf')];this[_0xdb74('0x10')]=_0x419253[_0xdb74('0x10')];this[_0xdb74('0x11')]=_0x419253[_0xdb74('0x11')];this[_0xdb74('0x12')]=_0x419253[_0xdb74('0x12')];this[_0xdb74('0x13')]=_0x419253[_0xdb74('0x13')];this[_0xdb74('0x14')]=_0x419253[_0xdb74('0x14')];this[_0xdb74('0x15')]=_0x419253[_0xdb74('0x15')]||'DESC';this[_0xdb74('0x16')]=_0x419253[_0xdb74('0x16')]||undefined;this[_0xdb74('0x17')]=_0x419253[_0xdb74('0x17')]||undefined;this['dialCutDigit']=_0x419253['dialCutDigit']||undefined;this[_0xdb74('0x18')]=_0x419253[_0xdb74('0x18')]?_0x419253['TrunkBackup']:undefined;this[_0xdb74('0x19')]=_0x419253[_0xdb74('0x19')]?_0x419253[_0xdb74('0x19')]:undefined;this[_0xdb74('0x1a')]=_0x419253['Interval']?_0x419253[_0xdb74('0x1a')]:undefined;this[_0xdb74('0x1b')]=_0x419253[_0xdb74('0x1b')]?_0x419253['SquareProject']:undefined;this['dialQueueProject']=_0x419253[_0xdb74('0x1b')]?_0x419253['SquareProject'][_0xdb74('0x0')]:undefined;this[_0xdb74('0x1c')]=_0x419253[_0xdb74('0x1c')]||![];this[_0xdb74('0x1d')]=_0x419253['dialAMDInitialSilence'];this[_0xdb74('0x1e')]=_0x419253[_0xdb74('0x1e')];this[_0xdb74('0x1f')]=_0x419253[_0xdb74('0x1f')];this[_0xdb74('0x20')]=_0x419253['dialAMDTotalAnalysisTime'];this[_0xdb74('0x21')]=_0x419253['dialAMDMinWordLength'];this[_0xdb74('0x22')]=_0x419253[_0xdb74('0x22')];this[_0xdb74('0x23')]=_0x419253['dialAMDMaximumNumberOfWords'];this[_0xdb74('0x24')]=_0x419253[_0xdb74('0x24')];this[_0xdb74('0x25')]=_0x419253[_0xdb74('0x25')];}module[_0xdb74('0x26')]=Campaign;
\ No newline at end of file
+var _0xee5b=['dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialOrderByScheduledAt','dialPrefix','dialRandomLastDigitCallerIdNumber','dialCutDigit','TrunkBackup','Trunk','Interval','SquareProject','dialQueueProject','dialAMDActive','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','exports','name','type','campaign','originated','temp','ivrAnswerCallsDay','sendMessageOneNotActive','active','limitCalls','dialGlobalInterval','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry'];(function(_0xcadac7,_0x2549a0){var _0x59c6d4=function(_0x2ace04){while(--_0x2ace04){_0xcadac7['push'](_0xcadac7['shift']());}};_0x59c6d4(++_0x2549a0);}(_0xee5b,0x1f4));var _0xbee5=function(_0x38bd88,_0x4ad0b8){_0x38bd88=_0x38bd88-0x0;var _0x17e769=_0xee5b[_0x38bd88];return _0x17e769;};'use strict';function Campaign(_0x5384bd){this['id']=_0x5384bd['id']||0x0;this['name']=_0x5384bd[_0xbee5('0x0')]||'';this[_0xbee5('0x1')]=_0x5384bd['type']||_0xbee5('0x2');this[_0xbee5('0x3')]=0x0;this[_0xbee5('0x4')]=0x0;this[_0xbee5('0x5')]=0x0;this['ivrTotalCallsDays']=0x0;this['message']='';this[_0xbee5('0x6')]=!![];this[_0xbee5('0x7')]=_0x5384bd[_0xbee5('0x7')];this[_0xbee5('0x8')]=_0x5384bd['limitCalls'];this['dialTimezone']=_0x5384bd['dialTimezone']||null;this['dialGlobalInterval']=_0x5384bd['dialGlobalInterval']?_0x5384bd[_0xbee5('0x9')]:null;this[_0xbee5('0xa')]=_0x5384bd[_0xbee5('0xa')];this[_0xbee5('0xb')]=_0x5384bd['dialOriginateCallerIdNumber'];this[_0xbee5('0xc')]=_0x5384bd[_0xbee5('0xc')]||0x1e;this[_0xbee5('0xd')]=_0x5384bd[_0xbee5('0xd')];this[_0xbee5('0xe')]=_0x5384bd[_0xbee5('0xe')];this[_0xbee5('0xf')]=_0x5384bd[_0xbee5('0xf')];this[_0xbee5('0x10')]=_0x5384bd['dialBusyRetryFrequency'];this[_0xbee5('0x11')]=_0x5384bd['dialNoAnswerMaxRetry'];this[_0xbee5('0x12')]=_0x5384bd[_0xbee5('0x12')];this[_0xbee5('0x13')]=_0x5384bd['dialGlobalMaxRetry'];this['dialOrderByScheduledAt']=_0x5384bd[_0xbee5('0x14')]||'DESC';this[_0xbee5('0x15')]=_0x5384bd['dialPrefix']||undefined;this[_0xbee5('0x16')]=_0x5384bd[_0xbee5('0x16')]||undefined;this[_0xbee5('0x17')]=_0x5384bd['dialCutDigit']||undefined;this[_0xbee5('0x18')]=_0x5384bd[_0xbee5('0x18')]?_0x5384bd['TrunkBackup']:undefined;this[_0xbee5('0x19')]=_0x5384bd[_0xbee5('0x19')]?_0x5384bd[_0xbee5('0x19')]:undefined;this[_0xbee5('0x1a')]=_0x5384bd[_0xbee5('0x1a')]?_0x5384bd[_0xbee5('0x1a')]:undefined;this[_0xbee5('0x1b')]=_0x5384bd[_0xbee5('0x1b')]?_0x5384bd[_0xbee5('0x1b')]:undefined;this[_0xbee5('0x1c')]=_0x5384bd[_0xbee5('0x1b')]?_0x5384bd[_0xbee5('0x1b')][_0xbee5('0x0')]:undefined;this[_0xbee5('0x1d')]=_0x5384bd[_0xbee5('0x1d')]||![];this['dialAMDInitialSilence']=_0x5384bd['dialAMDInitialSilence'];this[_0xbee5('0x1e')]=_0x5384bd['dialAMDGreeting'];this[_0xbee5('0x1f')]=_0x5384bd[_0xbee5('0x1f')];this[_0xbee5('0x20')]=_0x5384bd[_0xbee5('0x20')];this[_0xbee5('0x21')]=_0x5384bd[_0xbee5('0x21')];this[_0xbee5('0x22')]=_0x5384bd[_0xbee5('0x22')];this[_0xbee5('0x23')]=_0x5384bd['dialAMDMaximumNumberOfWords'];this['dialAMDSilenceThreshold']=_0x5384bd['dialAMDSilenceThreshold'];this['dialAMDMaximumWordLength']=_0x5384bd['dialAMDMaximumWordLength'];}module[_0xbee5('0x24')]=Campaign;
\ No newline at end of file
index 34f3160..e0d6ce4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf1e7=['monitor','monitorFilename','monitors','transferconnectedlinenum','mohtime','starttime','channel','calleridnum','connectedlinename','accountcode','uniqueid','answered','answertime','endtime','unmanaged','lastapplication','lastdata','duration','holdtime','type','tag','disposition'];(function(_0x1a5038,_0x178cfc){var _0x737034=function(_0x35695e){while(--_0x35695e){_0x1a5038['push'](_0x1a5038['shift']());}};_0x737034(++_0x178cfc);}(_0xf1e7,0x139));var _0x7f1e=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xf1e7[_0x20a584];return _0x4b41a8;};'use strict';function Channel(){this[_0x7f1e('0x0')]=null;this[_0x7f1e('0x1')]='';this['destinationchannel']='';this[_0x7f1e('0x2')]=0x0;this['calleridname']='';this['connectedlinenum']=undefined;this[_0x7f1e('0x3')]=undefined;this[_0x7f1e('0x4')]=0x0;this['context']='';this[_0x7f1e('0x5')]=0x0;this['linkedid']=0x0;this['exten']=0x0;this[_0x7f1e('0x6')]=![];this[_0x7f1e('0x7')]=null;this[_0x7f1e('0x8')]=null;this[_0x7f1e('0x9')]=![];this[_0x7f1e('0xa')]='';this[_0x7f1e('0xb')]='';this[_0x7f1e('0xc')]=0x0;this['billableseconds']=0x0;this[_0x7f1e('0xd')]=0x0;this[_0x7f1e('0xe')]=null;this[_0x7f1e('0xf')]=null;this[_0x7f1e('0x10')]=null;this[_0x7f1e('0x11')]=![];this[_0x7f1e('0x12')]=null;this['queue']=null;this[_0x7f1e('0x13')]=[];this['transfercalleridnum']=undefined;this[_0x7f1e('0x14')]=undefined;this[_0x7f1e('0x15')]=0x0;}module['exports']=Channel;
\ No newline at end of file
+var _0xa105=['exten','answered','answertime','endtime','unmanaged','lastapplication','lastdata','duration','billableseconds','holdtime','type','tag','disposition','monitor','monitorFilename','queue','monitors','transferconnectedlinenum','mohtime','exports','starttime','destinationchannel','calleridnum','calleridname','connectedlinename','accountcode','context','uniqueid'];(function(_0xe2c95e,_0x3e6545){var _0x42ce6f=function(_0x218482){while(--_0x218482){_0xe2c95e['push'](_0xe2c95e['shift']());}};_0x42ce6f(++_0x3e6545);}(_0xa105,0xd8));var _0x5a10=function(_0x5ef4fc,_0x43f1c2){_0x5ef4fc=_0x5ef4fc-0x0;var _0x5889e2=_0xa105[_0x5ef4fc];return _0x5889e2;};'use strict';function Channel(){this[_0x5a10('0x0')]=null;this['channel']='';this[_0x5a10('0x1')]='';this[_0x5a10('0x2')]=0x0;this[_0x5a10('0x3')]='';this['connectedlinenum']=undefined;this[_0x5a10('0x4')]=undefined;this[_0x5a10('0x5')]=0x0;this[_0x5a10('0x6')]='';this[_0x5a10('0x7')]=0x0;this['linkedid']=0x0;this[_0x5a10('0x8')]=0x0;this[_0x5a10('0x9')]=![];this[_0x5a10('0xa')]=null;this[_0x5a10('0xb')]=null;this[_0x5a10('0xc')]=![];this[_0x5a10('0xd')]='';this[_0x5a10('0xe')]='';this[_0x5a10('0xf')]=0x0;this[_0x5a10('0x10')]=0x0;this[_0x5a10('0x11')]=0x0;this[_0x5a10('0x12')]=null;this[_0x5a10('0x13')]=null;this[_0x5a10('0x14')]=null;this[_0x5a10('0x15')]=![];this[_0x5a10('0x16')]=null;this[_0x5a10('0x17')]=null;this[_0x5a10('0x18')]=[];this['transfercalleridnum']=undefined;this[_0x5a10('0x19')]=undefined;this[_0x5a10('0x1a')]=0x0;}module[_0x5a10('0x1b')]=Channel;
\ No newline at end of file
index d9ea1bb..e627c88 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9295=['password','consumerKey','consumerSecret','token','tokenSecret','type','Configurations','name','username','remoteUri','authType'];(function(_0x2976a1,_0x5c3dff){var _0x36f393=function(_0x5499de){while(--_0x5499de){_0x2976a1['push'](_0x2976a1['shift']());}};_0x36f393(++_0x5c3dff);}(_0x9295,0xa1));var _0x5929=function(_0x294b34,_0x554d29){_0x294b34=_0x294b34-0x0;var _0x2540a6=_0x9295[_0x294b34];return _0x2540a6;};'use strict';function DeskAccount(_0xaa2307){this['id']=_0xaa2307['id']||0x0;this[_0x5929('0x0')]=_0xaa2307[_0x5929('0x0')]||'';this[_0x5929('0x1')]=_0xaa2307['username']||'';this[_0x5929('0x2')]=_0xaa2307[_0x5929('0x2')]||'';this[_0x5929('0x3')]=_0xaa2307[_0x5929('0x3')]||'';this[_0x5929('0x4')]=_0xaa2307[_0x5929('0x4')]||'';this[_0x5929('0x5')]=_0xaa2307[_0x5929('0x5')]||'';this[_0x5929('0x6')]=_0xaa2307['consumerSecret']||'';this[_0x5929('0x7')]=_0xaa2307[_0x5929('0x7')]||'';this[_0x5929('0x8')]=_0xaa2307['tokenSecret']||'';this['type']=_0xaa2307[_0x5929('0x9')]||'';this['serverUrl']=_0xaa2307['serverUrl']||'';this[_0x5929('0xa')]=_0xaa2307[_0x5929('0xa')]||{};}module['exports']=DeskAccount;
\ No newline at end of file
+var _0xfbdf=['authType','password','consumerKey','consumerSecret','tokenSecret','type','serverUrl','Configurations','exports','name','username','remoteUri'];(function(_0x58efa6,_0x2c00bd){var _0x5d643c=function(_0x1d1ef2){while(--_0x1d1ef2){_0x58efa6['push'](_0x58efa6['shift']());}};_0x5d643c(++_0x2c00bd);}(_0xfbdf,0x17d));var _0xffbd=function(_0x24a2cc,_0x455e1f){_0x24a2cc=_0x24a2cc-0x0;var _0x1cf0ad=_0xfbdf[_0x24a2cc];return _0x1cf0ad;};'use strict';function DeskAccount(_0x36ef2f){this['id']=_0x36ef2f['id']||0x0;this[_0xffbd('0x0')]=_0x36ef2f[_0xffbd('0x0')]||'';this[_0xffbd('0x1')]=_0x36ef2f[_0xffbd('0x1')]||'';this[_0xffbd('0x2')]=_0x36ef2f[_0xffbd('0x2')]||'';this[_0xffbd('0x3')]=_0x36ef2f[_0xffbd('0x3')]||'';this['password']=_0x36ef2f[_0xffbd('0x4')]||'';this['consumerKey']=_0x36ef2f[_0xffbd('0x5')]||'';this[_0xffbd('0x6')]=_0x36ef2f[_0xffbd('0x6')]||'';this['token']=_0x36ef2f['token']||'';this[_0xffbd('0x7')]=_0x36ef2f[_0xffbd('0x7')]||'';this['type']=_0x36ef2f[_0xffbd('0x8')]||'';this['serverUrl']=_0x36ef2f[_0xffbd('0x9')]||'';this[_0xffbd('0xa')]=_0x36ef2f['Configurations']||{};}module[_0xffbd('0xb')]=DeskAccount;
\ No newline at end of file
index 1ed84c1..274df88 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb469=['name','description','ecm','headerinfo','localstationid','minrate','maxrate','v17,v27,v29','gateway','faxdetect','t38timeout','tech','Trunk','ListId','key'];(function(_0x1f4d4f,_0x464f09){var _0x1f2596=function(_0x2fa435){while(--_0x2fa435){_0x1f4d4f['push'](_0x1f4d4f['shift']());}};_0x1f2596(++_0x464f09);}(_0xb469,0x13b));var _0x9b46=function(_0x135d06,_0x3ae19e){_0x135d06=_0x135d06-0x0;var _0x16572a=_0xb469[_0x135d06];return _0x16572a;};'use strict';function FaxAccount(_0x41925f){this['id']=_0x41925f['id']||0x0;this[_0x9b46('0x0')]=_0x41925f[_0x9b46('0x0')]||'';this[_0x9b46('0x1')]=_0x41925f[_0x9b46('0x1')];this[_0x9b46('0x2')]=_0x41925f[_0x9b46('0x2')];this['headerinfo']=_0x41925f[_0x9b46('0x3')];this[_0x9b46('0x4')]=_0x41925f['localstationid'];this[_0x9b46('0x5')]=_0x41925f[_0x9b46('0x5')]||0x960;this['maxrate']=_0x41925f[_0x9b46('0x6')]||0x3840;this['modem']=_0x41925f['modem']||_0x9b46('0x7');this['gateway']=_0x41925f[_0x9b46('0x8')]||'no';this[_0x9b46('0x9')]=_0x41925f[_0x9b46('0x9')]||'no';this['t38timeout']=_0x41925f[_0x9b46('0xa')]||0x1388;this['tech']=_0x41925f[_0x9b46('0xb')]||'SIP';this[_0x9b46('0xc')]=_0x41925f['Trunk']?_0x41925f[_0x9b46('0xc')]:undefined;this[_0x9b46('0xd')]=_0x41925f['ListId'];this[_0x9b46('0xe')]=_0x41925f[_0x9b46('0xe')];}module['exports']=FaxAccount;
\ No newline at end of file
+var _0xdace=['tech','Trunk','ListId','key','exports','name','description','ecm','headerinfo','localstationid','minrate','maxrate','modem','v17,v27,v29','gateway','faxdetect'];(function(_0x529787,_0x207922){var _0x1fc28f=function(_0x53ddf7){while(--_0x53ddf7){_0x529787['push'](_0x529787['shift']());}};_0x1fc28f(++_0x207922);}(_0xdace,0xc5));var _0xedac=function(_0x8dc04d,_0xaa7559){_0x8dc04d=_0x8dc04d-0x0;var _0x2f5f28=_0xdace[_0x8dc04d];return _0x2f5f28;};'use strict';function FaxAccount(_0x552987){this['id']=_0x552987['id']||0x0;this['name']=_0x552987[_0xedac('0x0')]||'';this[_0xedac('0x1')]=_0x552987[_0xedac('0x1')];this['ecm']=_0x552987[_0xedac('0x2')];this[_0xedac('0x3')]=_0x552987[_0xedac('0x3')];this[_0xedac('0x4')]=_0x552987['localstationid'];this[_0xedac('0x5')]=_0x552987[_0xedac('0x5')]||0x960;this[_0xedac('0x6')]=_0x552987['maxrate']||0x3840;this[_0xedac('0x7')]=_0x552987[_0xedac('0x7')]||_0xedac('0x8');this['gateway']=_0x552987[_0xedac('0x9')]||'no';this[_0xedac('0xa')]=_0x552987[_0xedac('0xa')]||'no';this['t38timeout']=_0x552987['t38timeout']||0x1388;this[_0xedac('0xb')]=_0x552987[_0xedac('0xb')]||'SIP';this['Trunk']=_0x552987[_0xedac('0xc')]?_0x552987[_0xedac('0xc')]:undefined;this['ListId']=_0x552987[_0xedac('0xd')];this['key']=_0x552987[_0xedac('0xe')];}module[_0xedac('0xf')]=FaxAccount;
\ No newline at end of file
index 6eb80bb..0a8a34d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeeed=['Configurations','exports','name','username','token','remoteUri','serverUrl'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xeeed,0x19f));var _0xdeee=function(_0x5cf19c,_0x1a5804){_0x5cf19c=_0x5cf19c-0x0;var _0x30d75b=_0xeeed[_0x5cf19c];return _0x30d75b;};'use strict';function FreshdeskAccount(_0x3f1fc9){this['id']=_0x3f1fc9['id']||0x0;this[_0xdeee('0x0')]=_0x3f1fc9[_0xdeee('0x0')]||'';this[_0xdeee('0x1')]=_0x3f1fc9[_0xdeee('0x1')]||'';this['apiKey']=_0x3f1fc9[_0xdeee('0x2')]||'';this[_0xdeee('0x3')]=_0x3f1fc9[_0xdeee('0x3')]||'';this[_0xdeee('0x4')]=_0x3f1fc9[_0xdeee('0x4')]||'';this[_0xdeee('0x5')]=_0x3f1fc9['Configurations']||{};}module[_0xdeee('0x6')]=FreshdeskAccount;
\ No newline at end of file
+var _0xcf84=['Configurations','exports','name','username','apiKey','token','remoteUri','serverUrl'];(function(_0xf4e956,_0x248d78){var _0x1e7959=function(_0x2ec616){while(--_0x2ec616){_0xf4e956['push'](_0xf4e956['shift']());}};_0x1e7959(++_0x248d78);}(_0xcf84,0x72));var _0x4cf8=function(_0xb983c4,_0x679e53){_0xb983c4=_0xb983c4-0x0;var _0x4d4570=_0xcf84[_0xb983c4];return _0x4d4570;};'use strict';function FreshdeskAccount(_0x2a7a3f){this['id']=_0x2a7a3f['id']||0x0;this[_0x4cf8('0x0')]=_0x2a7a3f[_0x4cf8('0x0')]||'';this[_0x4cf8('0x1')]=_0x2a7a3f[_0x4cf8('0x1')]||'';this[_0x4cf8('0x2')]=_0x2a7a3f[_0x4cf8('0x3')]||'';this[_0x4cf8('0x4')]=_0x2a7a3f['remoteUri']||'';this['serverUrl']=_0x2a7a3f[_0x4cf8('0x5')]||'';this[_0x4cf8('0x6')]=_0x2a7a3f[_0x4cf8('0x6')]||{};}module[_0x4cf8('0x7')]=FreshdeskAccount;
\ No newline at end of file
index 663dd09..f3466d3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x89ca=['assigned','lastAssignedTo','mohtime','variables','exports','type','inbound','uniqueid','calleridnum','calleridname','queuecallerjoinAt','queuecallerleaveAt','count','queuecallerabandon','queuecallercomplete','queuecallerexit','originalposition','channel','connectedlinename','accountcode','context','exten'];(function(_0x50228c,_0x167aa8){var _0x3c9435=function(_0x5ed858){while(--_0x5ed858){_0x50228c['push'](_0x50228c['shift']());}};_0x3c9435(++_0x167aa8);}(_0x89ca,0xe1));var _0xa89c=function(_0x18d8a9,_0x19b534){_0x18d8a9=_0x18d8a9-0x0;var _0x2482a9=_0x89ca[_0x18d8a9];return _0x2482a9;};'use strict';function QueueReport(){this[_0xa89c('0x0')]=_0xa89c('0x1');this[_0xa89c('0x2')]='';this[_0xa89c('0x3')]='';this[_0xa89c('0x4')]='';this['queue']='';this[_0xa89c('0x5')]=null;this[_0xa89c('0x6')]=null;this['position']=0x1;this[_0xa89c('0x7')]=0x1;this[_0xa89c('0x8')]=![];this['queuecallerabandonAt']=null;this[_0xa89c('0x9')]=![];this['queuecallercompleteAt']=null;this[_0xa89c('0xa')]=![];this['queuecallerexitAt']=null;this[_0xa89c('0xb')]=0x1;this[_0xa89c('0xc')]='';this['connectedlinenum']='';this[_0xa89c('0xd')]='';this[_0xa89c('0xe')]='';this[_0xa89c('0xf')]='';this[_0xa89c('0x10')]='';this['priority']='';this['holdtime']=0x0;this[_0xa89c('0x11')]=![];this[_0xa89c('0x12')]='';this[_0xa89c('0x13')]=0x0;this[_0xa89c('0x14')]={};}module[_0xa89c('0x15')]=QueueReport;
\ No newline at end of file
+var _0xa612=['priority','assigned','lastAssignedTo','mohtime','variables','inbound','uniqueid','calleridnum','calleridname','queue','queuecallerleaveAt','position','count','queuecallerabandon','queuecallerabandonAt','queuecallerexit','queuecallerexitAt','channel','connectedlinenum','connectedlinename','accountcode','exten'];(function(_0x16b9ed,_0x56517a){var _0x66b1f8=function(_0x1c883){while(--_0x1c883){_0x16b9ed['push'](_0x16b9ed['shift']());}};_0x66b1f8(++_0x56517a);}(_0xa612,0x10d));var _0x2a61=function(_0x2075c3,_0x496b73){_0x2075c3=_0x2075c3-0x0;var _0x26b7ad=_0xa612[_0x2075c3];return _0x26b7ad;};'use strict';function QueueReport(){this['type']=_0x2a61('0x0');this[_0x2a61('0x1')]='';this[_0x2a61('0x2')]='';this[_0x2a61('0x3')]='';this[_0x2a61('0x4')]='';this['queuecallerjoinAt']=null;this[_0x2a61('0x5')]=null;this[_0x2a61('0x6')]=0x1;this[_0x2a61('0x7')]=0x1;this[_0x2a61('0x8')]=![];this[_0x2a61('0x9')]=null;this['queuecallercomplete']=![];this['queuecallercompleteAt']=null;this[_0x2a61('0xa')]=![];this[_0x2a61('0xb')]=null;this['originalposition']=0x1;this[_0x2a61('0xc')]='';this[_0x2a61('0xd')]='';this[_0x2a61('0xe')]='';this[_0x2a61('0xf')]='';this['context']='';this[_0x2a61('0x10')]='';this[_0x2a61('0x11')]='';this['holdtime']=0x0;this[_0x2a61('0x12')]=![];this[_0x2a61('0x13')]='';this[_0x2a61('0x14')]=0x0;this[_0x2a61('0x15')]={};}module['exports']=QueueReport;
\ No newline at end of file
index edee2f3..31b4834 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbab5=['securityToken','type','integrationTab','serverUrl','Configurations','exports','name','username','clientId'];(function(_0x2a240c,_0x3eeb7b){var _0x550157=function(_0x7460fc){while(--_0x7460fc){_0x2a240c['push'](_0x2a240c['shift']());}};_0x550157(++_0x3eeb7b);}(_0xbab5,0xe7));var _0x5bab=function(_0x44af2d,_0x232370){_0x44af2d=_0x44af2d-0x0;var _0x400792=_0xbab5[_0x44af2d];return _0x400792;};'use strict';function SalesforceAccount(_0x59c374){this['id']=_0x59c374['id']||0x0;this[_0x5bab('0x0')]=_0x59c374[_0x5bab('0x0')]||'';this[_0x5bab('0x1')]=_0x59c374[_0x5bab('0x1')]||'';this['remoteUri']=_0x59c374['remoteUri']||'';this['password']=_0x59c374['password']||'';this[_0x5bab('0x2')]=_0x59c374[_0x5bab('0x2')]||'';this['clientSecret']=_0x59c374['clientSecret']||'';this[_0x5bab('0x3')]=_0x59c374['securityToken']||'';this[_0x5bab('0x4')]=_0x59c374[_0x5bab('0x4')]||_0x5bab('0x5');this['serverUrl']=_0x59c374[_0x5bab('0x6')]||'';this['Configurations']=_0x59c374[_0x5bab('0x7')]||{};}module[_0x5bab('0x8')]=SalesforceAccount;
\ No newline at end of file
+var _0x3011=['Configurations','exports','name','username','remoteUri','clientId','clientSecret','securityToken','type','integrationTab','serverUrl'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x3011,0x16d));var _0x1301=function(_0x42df1c,_0x4c52a5){_0x42df1c=_0x42df1c-0x0;var _0x169ce7=_0x3011[_0x42df1c];return _0x169ce7;};'use strict';function SalesforceAccount(_0x315e80){this['id']=_0x315e80['id']||0x0;this[_0x1301('0x0')]=_0x315e80[_0x1301('0x0')]||'';this[_0x1301('0x1')]=_0x315e80[_0x1301('0x1')]||'';this[_0x1301('0x2')]=_0x315e80['remoteUri']||'';this['password']=_0x315e80['password']||'';this[_0x1301('0x3')]=_0x315e80[_0x1301('0x3')]||'';this[_0x1301('0x4')]=_0x315e80[_0x1301('0x4')]||'';this[_0x1301('0x5')]=_0x315e80[_0x1301('0x5')]||'';this[_0x1301('0x6')]=_0x315e80[_0x1301('0x6')]||_0x1301('0x7');this[_0x1301('0x8')]=_0x315e80[_0x1301('0x8')]||'';this[_0x1301('0x9')]=_0x315e80[_0x1301('0x9')]||{};}module[_0x1301('0xa')]=SalesforceAccount;
\ No newline at end of file
index e72919a..30a562d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b40=['name','username','password','remoteUri','serverUrl','Configurations','exports'];(function(_0x2fb87c,_0x2dee49){var _0x43038b=function(_0x7e5396){while(--_0x7e5396){_0x2fb87c['push'](_0x2fb87c['shift']());}};_0x43038b(++_0x2dee49);}(_0x6b40,0x196));var _0x06b4=function(_0x199572,_0x33e667){_0x199572=_0x199572-0x0;var _0x13cfa3=_0x6b40[_0x199572];return _0x13cfa3;};'use strict';function SugarcrmAccount(_0x163203){this['id']=_0x163203['id']||0x0;this[_0x06b4('0x0')]=_0x163203[_0x06b4('0x0')]||'';this[_0x06b4('0x1')]=_0x163203[_0x06b4('0x1')]||'';this[_0x06b4('0x2')]=_0x163203[_0x06b4('0x2')]||'';this[_0x06b4('0x3')]=_0x163203['remoteUri']||'';this[_0x06b4('0x4')]=_0x163203[_0x06b4('0x4')]||'';this[_0x06b4('0x5')]=_0x163203['Configurations']||{};}module[_0x06b4('0x6')]=SugarcrmAccount;
\ No newline at end of file
+var _0xcce2=['exports','name','username','serverUrl','Configurations'];(function(_0x29741f,_0x145a76){var _0x34e85b=function(_0x51fd20){while(--_0x51fd20){_0x29741f['push'](_0x29741f['shift']());}};_0x34e85b(++_0x145a76);}(_0xcce2,0x15a));var _0x2cce=function(_0x25f67c,_0x45c809){_0x25f67c=_0x25f67c-0x0;var _0x9e68f7=_0xcce2[_0x25f67c];return _0x9e68f7;};'use strict';function SugarcrmAccount(_0x20aff0){this['id']=_0x20aff0['id']||0x0;this[_0x2cce('0x0')]=_0x20aff0[_0x2cce('0x0')]||'';this[_0x2cce('0x1')]=_0x20aff0[_0x2cce('0x1')]||'';this['password']=_0x20aff0['password']||'';this['remoteUri']=_0x20aff0['remoteUri']||'';this[_0x2cce('0x2')]=_0x20aff0['serverUrl']||'';this[_0x2cce('0x3')]=_0x20aff0[_0x2cce('0x3')]||{};}module[_0x2cce('0x4')]=SugarcrmAccount;
\ No newline at end of file
index ed65d36..cdcd6b9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf20a=['unknown','address','exports','name','state','stateTime'];(function(_0x48eb11,_0x2a697c){var _0x2b1a9c=function(_0x10da82){while(--_0x10da82){_0x48eb11['push'](_0x48eb11['shift']());}};_0x2b1a9c(++_0x2a697c);}(_0xf20a,0x19b));var _0xaf20=function(_0x1f8896,_0x12d750){_0x1f8896=_0x1f8896-0x0;var _0x4b80bc=_0xf20a[_0x1f8896];return _0x4b80bc;};'use strict';function Telephone(_0x25d264){this['id']=_0x25d264['id']||0x0;this[_0xaf20('0x0')]=_0x25d264[_0xaf20('0x0')]||'';this[_0xaf20('0x1')]='unknown';this[_0xaf20('0x2')]=0x0;this['status']=_0xaf20('0x3');this[_0xaf20('0x4')]='';}module[_0xaf20('0x5')]=Telephone;
\ No newline at end of file
+var _0x1e5c=['state','status','unknown','exports','name'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x1e5c,0x1ad));var _0xc1e5=function(_0x243c29,_0x2a6147){_0x243c29=_0x243c29-0x0;var _0x248b2b=_0x1e5c[_0x243c29];return _0x248b2b;};'use strict';function Telephone(_0x501578){this['id']=_0x501578['id']||0x0;this[_0xc1e5('0x0')]=_0x501578[_0xc1e5('0x0')]||'';this[_0xc1e5('0x1')]='unknown';this['stateTime']=0x0;this[_0xc1e5('0x2')]=_0xc1e5('0x3');this['address']='';}module[_0xc1e5('0x4')]=Telephone;
\ No newline at end of file
index 01bf7ad..540e583 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf021=['html','name'];(function(_0x74118b,_0x239694){var _0x257525=function(_0x531db8){while(--_0x531db8){_0x74118b['push'](_0x74118b['shift']());}};_0x257525(++_0x239694);}(_0xf021,0x18f));var _0x1f02=function(_0x1f0679,_0x53d43c){_0x1f0679=_0x1f0679-0x0;var _0x3dc3a4=_0xf021[_0x1f0679];return _0x3dc3a4;};'use strict';function template(_0x8af718){this['id']=_0x8af718['id']||0x0;this[_0x1f02('0x0')]=_0x8af718[_0x1f02('0x0')]||'';this[_0x1f02('0x1')]=_0x8af718[_0x1f02('0x1')]||'';}module['exports']=template;
\ No newline at end of file
+var _0xc6d8=['html','name'];(function(_0xc8f3,_0x47c65e){var _0x4dca4f=function(_0x1486ed){while(--_0x1486ed){_0xc8f3['push'](_0xc8f3['shift']());}};_0x4dca4f(++_0x47c65e);}(_0xc6d8,0xd7));var _0x8c6d=function(_0x1186ba,_0x421a86){_0x1186ba=_0x1186ba-0x0;var _0x13a347=_0xc6d8[_0x1186ba];return _0x13a347;};'use strict';function template(_0x55520c){this['id']=_0x55520c['id']||0x0;this['name']=_0x55520c[_0x8c6d('0x0')]||'';this['html']=_0x55520c[_0x8c6d('0x1')]||'';}module['exports']=template;
\ No newline at end of file
index bf0a65d..6ace3f1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x017a=['AllConditions','AnyConditions','Actions','exports','name','channel','voice','status'];(function(_0x436c5f,_0x59ffce){var _0x51de49=function(_0x864211){while(--_0x864211){_0x436c5f['push'](_0x436c5f['shift']());}};_0x51de49(++_0x59ffce);}(_0x017a,0x134));var _0xa017=function(_0x2ab706,_0x196099){_0x2ab706=_0x2ab706-0x0;var _0x383dd5=_0x017a[_0x2ab706];return _0x383dd5;};'use strict';function Trigger(_0x47e88b){this['id']=_0x47e88b['id']||0x0;this[_0xa017('0x0')]=_0x47e88b[_0xa017('0x0')]||'';this[_0xa017('0x1')]=_0x47e88b[_0xa017('0x1')]||_0xa017('0x2');this['status']=_0x47e88b[_0xa017('0x3')]||![];this[_0xa017('0x4')]=_0x47e88b[_0xa017('0x4')]||[];this[_0xa017('0x5')]=_0x47e88b[_0xa017('0x5')]||[];this['Actions']=_0x47e88b[_0xa017('0x6')]||[];}module[_0xa017('0x7')]=Trigger;
\ No newline at end of file
+var _0x152e=['AllConditions','AnyConditions','Actions','exports','name','channel','status'];(function(_0x329664,_0x130748){var _0x4e346e=function(_0x172b0d){while(--_0x172b0d){_0x329664['push'](_0x329664['shift']());}};_0x4e346e(++_0x130748);}(_0x152e,0x162));var _0xe152=function(_0x1f6f97,_0x231d6e){_0x1f6f97=_0x1f6f97-0x0;var _0x49d0fd=_0x152e[_0x1f6f97];return _0x49d0fd;};'use strict';function Trigger(_0x3d7c43){this['id']=_0x3d7c43['id']||0x0;this[_0xe152('0x0')]=_0x3d7c43[_0xe152('0x0')]||'';this['channel']=_0x3d7c43[_0xe152('0x1')]||'voice';this['status']=_0x3d7c43[_0xe152('0x2')]||![];this[_0xe152('0x3')]=_0x3d7c43[_0xe152('0x3')]||[];this[_0xe152('0x4')]=_0x3d7c43['AnyConditions']||[];this[_0xe152('0x5')]=_0x3d7c43['Actions']||[];}module[_0xe152('0x6')]=Trigger;
\ No newline at end of file
index 41f5343..9d85a17 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2e64=['domainport','refresh','registrationtime','address','exports','active','unknown','stateTime','status','registry','indexOf','host','port','domain'];(function(_0x317545,_0xa4ba7f){var _0xb891d9=function(_0x4f987d){while(--_0x4f987d){_0x317545['push'](_0x317545['shift']());}};_0xb891d9(++_0xa4ba7f);}(_0x2e64,0x1ef));var _0x42e6=function(_0x3dd004,_0x3acf09){_0x3dd004=_0x3dd004-0x0;var _0x5a6b66=_0x2e64[_0x3dd004];return _0x5a6b66;};'use strict';function Trunk(_0x429acc){this['id']=_0x429acc['id']||0x0;this[_0x42e6('0x0')]=_0x429acc[_0x42e6('0x0')]||![];this['name']=_0x429acc['name']||'';this['state']=_0x42e6('0x1');this[_0x42e6('0x2')]=0x0;this[_0x42e6('0x3')]=_0x42e6('0x1');this[_0x42e6('0x4')]=_0x429acc['registry']&&_0x429acc[_0x42e6('0x4')][_0x42e6('0x5')](':')?_0x429acc[_0x42e6('0x4')]['split'](':')[0x0]:'';this[_0x42e6('0x6')]='';this[_0x42e6('0x7')]='';this[_0x42e6('0x8')]='';this[_0x42e6('0x9')]='';this[_0x42e6('0xa')]='';this['stateRegistry']=_0x42e6('0x1');this[_0x42e6('0xb')]='';this[_0x42e6('0xc')]='';}module[_0x42e6('0xd')]=Trunk;
\ No newline at end of file
+var _0x0660=['exports','active','state','unknown','status','registry','indexOf','host','domain','domainport','refresh','registrationtime','address'];(function(_0x3f37f1,_0x199544){var _0x216258=function(_0xeb377b){while(--_0xeb377b){_0x3f37f1['push'](_0x3f37f1['shift']());}};_0x216258(++_0x199544);}(_0x0660,0x9d));var _0x0066=function(_0x6390c9,_0x27e2b6){_0x6390c9=_0x6390c9-0x0;var _0x5d98d7=_0x0660[_0x6390c9];return _0x5d98d7;};'use strict';function Trunk(_0x3be833){this['id']=_0x3be833['id']||0x0;this[_0x0066('0x0')]=_0x3be833[_0x0066('0x0')]||![];this['name']=_0x3be833['name']||'';this[_0x0066('0x1')]=_0x0066('0x2');this['stateTime']=0x0;this[_0x0066('0x3')]=_0x0066('0x2');this['registry']=_0x3be833[_0x0066('0x4')]&&_0x3be833[_0x0066('0x4')][_0x0066('0x5')](':')?_0x3be833[_0x0066('0x4')]['split'](':')[0x0]:'';this[_0x0066('0x6')]='';this['port']='';this[_0x0066('0x7')]='';this[_0x0066('0x8')]='';this[_0x0066('0x9')]='';this['stateRegistry']=_0x0066('0x2');this[_0x0066('0xa')]='';this[_0x0066('0xb')]='';}module[_0x0066('0xc')]=Trunk;
\ No newline at end of file
index e6e0f1b..8330dad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ea3=['none','exten','recordingFormat'];(function(_0x202026,_0x5e8d4d){var _0x40a4ac=function(_0x13d660){while(--_0x13d660){_0x202026['push'](_0x202026['shift']());}};_0x40a4ac(++_0x5e8d4d);}(_0x4ea3,0x70));var _0x34ea=function(_0xbca1b1,_0x33f0ce){_0xbca1b1=_0xbca1b1-0x0;var _0x4e1686=_0x4ea3[_0xbca1b1];return _0x4e1686;};'use strict';function voiceExtension(_0x26a5bf){this['id']=_0x26a5bf['id']||0x0;this[_0x34ea('0x0')]=_0x26a5bf[_0x34ea('0x0')]||'';this[_0x34ea('0x1')]=_0x26a5bf['recordingFormat']||_0x34ea('0x2');}module['exports']=voiceExtension;
\ No newline at end of file
+var _0xee5b=['exten','recordingFormat','none','exports'];(function(_0x253141,_0x396c1e){var _0x4472f3=function(_0x28b591){while(--_0x28b591){_0x253141['push'](_0x253141['shift']());}};_0x4472f3(++_0x396c1e);}(_0xee5b,0x1f4));var _0xbee5=function(_0x4d3f60,_0x4e9ba4){_0x4d3f60=_0x4d3f60-0x0;var _0x2e70b3=_0xee5b[_0x4d3f60];return _0x2e70b3;};'use strict';function voiceExtension(_0x5384bd){this['id']=_0x5384bd['id']||0x0;this['exten']=_0x5384bd[_0xbee5('0x0')]||'';this[_0xbee5('0x1')]=_0x5384bd['recordingFormat']||_0xbee5('0x2');}module[_0xbee5('0x3')]=voiceExtension;
\ No newline at end of file
index 3561210..2b9836c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c6d=['roundrobin','name','monitor_format','type','inbound','waiting','total','sumDuration','unmanaged','loggedIn','available','acw','acwTimeout','autopause','sendMessageOneNotActive','message','temp','dialTimezone','dialGlobalInterval','dialActive','dialMethod','progressive','dialLimitChannel','dialLimitQueue','dialPredictiveOptimization','dialPredictiveOptimizationPercentage','dialPredictiveInterval','dialOriginateCallerIdName','anonymous','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueOptions','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','Trunk','TrunkBackup','dialPrefix','Interval','dialOrderByScheduledAt','DESC','dialRandomLastDigitCallerIdNumber','dialCutDigit','strategy','queueStatusComplete','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','outboundRejectCallsDay','pTalking','timeout','outboundAnswerCallsDay','outboundNoAnswerCallsDay','outboundBusyCallsDay','outboundNoSuchCallsDay','outboundBlacklistCallsDay','outboundDropCallsDayCallersExit','outboundDropCallsDayACS','outboundReCallsDay','startProgressive','startPredictive','handlePredictive','predictiveIntervalMultiplicativeFactor','predictiveIntervalTotalCalls','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsTimeout','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalPauses','predictiveIntervalLowerLimit','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','erlangCalls','erlangCallToSecond','dialRecallMeTimeout','dialRecallInQueue','dialQueueProject2','dialAgiAfterHangupClient','dialAgiAfterHangupAgent','exports','unknown','not_inuse','inuse','busy','unavailable','ringing','ringinuse','onhold','wav','wav49','rrmemory'];(function(_0x41d862,_0x6c9e78){var _0x51bef4=function(_0x965d00){while(--_0x965d00){_0x41d862['push'](_0x41d862['shift']());}};_0x51bef4(++_0x6c9e78);}(_0x3c6d,0x199));var _0xd3c6=function(_0x3d42bf,_0xac8bfd){_0x3d42bf=_0x3d42bf-0x0;var _0x4c9740=_0x3c6d[_0x3d42bf];return _0x4c9740;};'use strict';var statusDesc=[_0xd3c6('0x0'),_0xd3c6('0x1'),_0xd3c6('0x2'),_0xd3c6('0x3'),'invalid',_0xd3c6('0x4'),_0xd3c6('0x5'),_0xd3c6('0x6'),_0xd3c6('0x7')];var monitorFormat={'wav':_0xd3c6('0x8'),'wav49':_0xd3c6('0x9'),'gsm':'gsm'};var strategy={'rrmemory':_0xd3c6('0xa'),'roundrobin':_0xd3c6('0xb')};function VoiceQueue(_0x438b25){this['id']=_0x438b25['id']||0x0;this[_0xd3c6('0xc')]=_0x438b25[_0xd3c6('0xc')]||'';this[_0xd3c6('0xd')]=_0x438b25['monitor_format']||'';this['type']=_0x438b25[_0xd3c6('0xe')]||_0xd3c6('0xf');this[_0xd3c6('0x10')]=0x0;this['talking']=0x0;this[_0xd3c6('0x11')]=0x0;this['answered']=0x0;this[_0xd3c6('0x12')]=0x0;this['sumHoldTime']=0x0;this['sumBillable']=0x0;this[_0xd3c6('0x13')]=0x0;this[_0xd3c6('0x14')]=0x0;this[_0xd3c6('0x15')]=0x0;this[_0xd3c6('0x16')]=_0x438b25[_0xd3c6('0x16')]||![];this[_0xd3c6('0x17')]=_0x438b25[_0xd3c6('0x17')]||0xa;this[_0xd3c6('0x18')]=_0x438b25[_0xd3c6('0x18')]||'no';this[_0xd3c6('0x19')]=!![];this[_0xd3c6('0x1a')]='';this['originated']=0x0;this[_0xd3c6('0x1b')]=0x0;this[_0xd3c6('0x1c')]=_0x438b25[_0xd3c6('0x1c')]||null;this[_0xd3c6('0x1d')]=_0x438b25[_0xd3c6('0x1d')]?_0x438b25[_0xd3c6('0x1d')]:null;this[_0xd3c6('0x1e')]=_0x438b25[_0xd3c6('0x1e')];this[_0xd3c6('0x1f')]=_0x438b25[_0xd3c6('0x1f')]||_0xd3c6('0x20');this[_0xd3c6('0x21')]=_0x438b25[_0xd3c6('0x21')]||0x0;this[_0xd3c6('0x22')]=_0x438b25[_0xd3c6('0x22')]||0x0;this['dialPowerLevel']=_0x438b25['dialPowerLevel']||0x1;this[_0xd3c6('0x23')]=_0x438b25['dialPredictiveOptimization']||'dropRate';this[_0xd3c6('0x24')]=_0x438b25[_0xd3c6('0x24')]||0.03;this[_0xd3c6('0x25')]=_0x438b25[_0xd3c6('0x25')]||0x258;this[_0xd3c6('0x26')]=_0x438b25[_0xd3c6('0x26')]||_0xd3c6('0x27');this['dialOriginateCallerIdNumber']=_0x438b25[_0xd3c6('0x28')]||_0xd3c6('0x27');this['dialOriginateTimeout']=_0x438b25[_0xd3c6('0x29')]||0x1e;this[_0xd3c6('0x2a')]=_0x438b25['dialQueueOptions']||'tTxX';this[_0xd3c6('0x2b')]=_0x438b25['dialQueueTimeout']||0x3;this[_0xd3c6('0x2c')]=_0x438b25[_0xd3c6('0x2c')]||undefined;this[_0xd3c6('0x2d')]=_0x438b25[_0xd3c6('0x2d')]||0x3;this[_0xd3c6('0x2e')]=_0x438b25[_0xd3c6('0x2e')]||0x96;this[_0xd3c6('0x2f')]=_0x438b25[_0xd3c6('0x2f')]||0x3;this['dialBusyRetryFrequency']=_0x438b25[_0xd3c6('0x30')]||0x96;this['dialNoAnswerMaxRetry']=_0x438b25[_0xd3c6('0x31')]||0x3;this[_0xd3c6('0x32')]=_0x438b25[_0xd3c6('0x32')]||0x96;this['dialGlobalMaxRetry']=_0x438b25[_0xd3c6('0x33')]||0x4;this[_0xd3c6('0x34')]=_0x438b25[_0xd3c6('0x34')]?_0x438b25[_0xd3c6('0x34')]:undefined;this[_0xd3c6('0x35')]=_0x438b25[_0xd3c6('0x35')]?_0x438b25[_0xd3c6('0x35')]:undefined;this[_0xd3c6('0x36')]=_0x438b25['dialPrefix']||undefined;this['Interval']=_0x438b25['Interval']?_0x438b25[_0xd3c6('0x37')]:undefined;this[_0xd3c6('0x38')]=_0x438b25[_0xd3c6('0x38')]||_0xd3c6('0x39');this[_0xd3c6('0x3a')]=_0x438b25[_0xd3c6('0x3a')]||undefined;this[_0xd3c6('0x3b')]=_0x438b25[_0xd3c6('0x3b')]||undefined;this[_0xd3c6('0x3c')]=strategy[_0x438b25[_0xd3c6('0x3c')]]||_0xd3c6('0xa');this[_0xd3c6('0x3d')]=!![];this['dialAMDActive']=_0x438b25[_0xd3c6('0x3e')]||![];this[_0xd3c6('0x3f')]=_0x438b25[_0xd3c6('0x3f')];this[_0xd3c6('0x40')]=_0x438b25[_0xd3c6('0x40')];this['dialAMDAfterGreetingSilence']=_0x438b25[_0xd3c6('0x41')];this[_0xd3c6('0x42')]=_0x438b25[_0xd3c6('0x42')];this[_0xd3c6('0x43')]=_0x438b25['dialAMDMinWordLength'];this[_0xd3c6('0x44')]=_0x438b25[_0xd3c6('0x44')];this['dialAMDMaximumNumberOfWords']=_0x438b25[_0xd3c6('0x45')];this[_0xd3c6('0x46')]=_0x438b25[_0xd3c6('0x46')];this[_0xd3c6('0x47')]=_0x438b25['dialAMDMaximumWordLength'];this[_0xd3c6('0x48')]=0x0;this[_0xd3c6('0x49')]=0x0;this[_0xd3c6('0x4a')]=_0x438b25[_0xd3c6('0x4a')];this[_0xd3c6('0x4b')]=0x0;this['outboundAnswerAgiCallsDay']=0x0;this[_0xd3c6('0x4c')]=0x0;this[_0xd3c6('0x4d')]=0x0;this['outboundCongestionCallsDay']=0x0;this[_0xd3c6('0x4e')]=0x0;this['outboundUnknownCallsDay']=0x0;this[_0xd3c6('0x4f')]=0x0;this['outboundOriginateFailureCallsDay']=0x0;this[_0xd3c6('0x50')]=0x0;this['outboundDropCallsDayTimeout']=0x0;this[_0xd3c6('0x51')]=0x0;this[_0xd3c6('0x52')]=0x0;this[_0xd3c6('0x53')]=undefined;this[_0xd3c6('0x54')]=undefined;this[_0xd3c6('0x55')]=undefined;this[_0xd3c6('0x56')]=1.05;this[_0xd3c6('0x57')]=0x0;this[_0xd3c6('0x58')]=0x0;this['predictiveIntervalDroppedCallsCallersExit']=0x0;this[_0xd3c6('0x59')]=0x0;this[_0xd3c6('0x5a')]=0x0;this[_0xd3c6('0x5b')]=0x0;this[_0xd3c6('0x5c')]=0x0;this[_0xd3c6('0x5d')]=0.4;this[_0xd3c6('0x5e')]=0x0;this[_0xd3c6('0x5f')]=0x0;this[_0xd3c6('0x60')]=0x1;this[_0xd3c6('0x61')]=0x0;this[_0xd3c6('0x62')]=0x0;this['erlangAbandonmentRate']=0x0;this['erlangBusyFactor']=0x0;this['dialRecallMeTimeout']=_0x438b25[_0xd3c6('0x63')]||0x1e;this[_0xd3c6('0x64')]=_0x438b25[_0xd3c6('0x64')]||![];this[_0xd3c6('0x65')]=_0x438b25[_0xd3c6('0x65')]||undefined;this[_0xd3c6('0x66')]=_0x438b25[_0xd3c6('0x66')]||![];this[_0xd3c6('0x67')]=_0x438b25[_0xd3c6('0x67')]||![];this[_0xd3c6('0xd')]=monitorFormat[_0x438b25[_0xd3c6('0xd')]]?monitorFormat[_0x438b25['monitor_format']]:undefined;}module[_0xd3c6('0x68')]=VoiceQueue;
\ No newline at end of file
+var _0xd1a6=['Interval','dialOrderByScheduledAt','DESC','dialRandomLastDigitCallerIdNumber','dialCutDigit','strategy','queueStatusComplete','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','outboundRejectCallsDay','pTalking','timeout','outboundAnswerCallsDay','outboundAnswerAgiCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundNoSuchCallsDay','outboundUnknownCallsDay','outboundBlacklistCallsDay','outboundOriginateFailureCallsDay','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundDropCallsDayACS','handlePredictive','predictiveIntervalMultiplicativeFactor','predictiveIntervalTotalCalls','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalPauses','predictiveIntervalLowerLimit','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','dialRecallMeTimeout','dialRecallInQueue','dialQueueProject2','dialAgiAfterHangupClient','dialAgiAfterHangupAgent','exports','not_inuse','inuse','invalid','unavailable','ringing','ringinuse','onhold','wav','wav49','gsm','rrmemory','roundrobin','name','monitor_format','type','inbound','talking','total','sumDuration','sumHoldTime','unmanaged','available','acw','acwTimeout','autopause','message','originated','dialGlobalInterval','dialActive','dialMethod','dialLimitChannel','dialLimitQueue','dialPowerLevel','dialPredictiveOptimization','dropRate','dialPredictiveOptimizationPercentage','dialPredictiveInterval','anonymous','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueOptions','tTxX','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','Trunk','TrunkBackup','dialPrefix'];(function(_0x5c477b,_0x8a2508){var _0x2ac80a=function(_0x2f1a25){while(--_0x2f1a25){_0x5c477b['push'](_0x5c477b['shift']());}};_0x2ac80a(++_0x8a2508);}(_0xd1a6,0x176));var _0x6d1a=function(_0x530e0e,_0x54d536){_0x530e0e=_0x530e0e-0x0;var _0x2742fb=_0xd1a6[_0x530e0e];return _0x2742fb;};'use strict';var statusDesc=['unknown',_0x6d1a('0x0'),_0x6d1a('0x1'),'busy',_0x6d1a('0x2'),_0x6d1a('0x3'),_0x6d1a('0x4'),_0x6d1a('0x5'),_0x6d1a('0x6')];var monitorFormat={'wav':_0x6d1a('0x7'),'wav49':_0x6d1a('0x8'),'gsm':_0x6d1a('0x9')};var strategy={'rrmemory':_0x6d1a('0xa'),'roundrobin':_0x6d1a('0xb')};function VoiceQueue(_0x2a0c3d){this['id']=_0x2a0c3d['id']||0x0;this[_0x6d1a('0xc')]=_0x2a0c3d[_0x6d1a('0xc')]||'';this[_0x6d1a('0xd')]=_0x2a0c3d[_0x6d1a('0xd')]||'';this[_0x6d1a('0xe')]=_0x2a0c3d[_0x6d1a('0xe')]||_0x6d1a('0xf');this['waiting']=0x0;this[_0x6d1a('0x10')]=0x0;this[_0x6d1a('0x11')]=0x0;this['answered']=0x0;this[_0x6d1a('0x12')]=0x0;this[_0x6d1a('0x13')]=0x0;this['sumBillable']=0x0;this[_0x6d1a('0x14')]=0x0;this['loggedIn']=0x0;this[_0x6d1a('0x15')]=0x0;this[_0x6d1a('0x16')]=_0x2a0c3d[_0x6d1a('0x16')]||![];this['acwTimeout']=_0x2a0c3d[_0x6d1a('0x17')]||0xa;this[_0x6d1a('0x18')]=_0x2a0c3d[_0x6d1a('0x18')]||'no';this['sendMessageOneNotActive']=!![];this[_0x6d1a('0x19')]='';this[_0x6d1a('0x1a')]=0x0;this['temp']=0x0;this['dialTimezone']=_0x2a0c3d['dialTimezone']||null;this[_0x6d1a('0x1b')]=_0x2a0c3d[_0x6d1a('0x1b')]?_0x2a0c3d[_0x6d1a('0x1b')]:null;this['dialActive']=_0x2a0c3d[_0x6d1a('0x1c')];this[_0x6d1a('0x1d')]=_0x2a0c3d[_0x6d1a('0x1d')]||'progressive';this[_0x6d1a('0x1e')]=_0x2a0c3d[_0x6d1a('0x1e')]||0x0;this[_0x6d1a('0x1f')]=_0x2a0c3d[_0x6d1a('0x1f')]||0x0;this[_0x6d1a('0x20')]=_0x2a0c3d[_0x6d1a('0x20')]||0x1;this[_0x6d1a('0x21')]=_0x2a0c3d[_0x6d1a('0x21')]||_0x6d1a('0x22');this[_0x6d1a('0x23')]=_0x2a0c3d[_0x6d1a('0x23')]||0.03;this[_0x6d1a('0x24')]=_0x2a0c3d[_0x6d1a('0x24')]||0x258;this['dialOriginateCallerIdName']=_0x2a0c3d['dialOriginateCallerIdName']||_0x6d1a('0x25');this['dialOriginateCallerIdNumber']=_0x2a0c3d[_0x6d1a('0x26')]||_0x6d1a('0x25');this[_0x6d1a('0x27')]=_0x2a0c3d['dialOriginateTimeout']||0x1e;this[_0x6d1a('0x28')]=_0x2a0c3d['dialQueueOptions']||_0x6d1a('0x29');this[_0x6d1a('0x2a')]=_0x2a0c3d[_0x6d1a('0x2a')]||0x3;this[_0x6d1a('0x2b')]=_0x2a0c3d['dialQueueProject']||undefined;this['dialCongestionMaxRetry']=_0x2a0c3d[_0x6d1a('0x2c')]||0x3;this['dialCongestionRetryFrequency']=_0x2a0c3d[_0x6d1a('0x2d')]||0x96;this[_0x6d1a('0x2e')]=_0x2a0c3d[_0x6d1a('0x2e')]||0x3;this[_0x6d1a('0x2f')]=_0x2a0c3d[_0x6d1a('0x2f')]||0x96;this[_0x6d1a('0x30')]=_0x2a0c3d['dialNoAnswerMaxRetry']||0x3;this[_0x6d1a('0x31')]=_0x2a0c3d['dialNoAnswerRetryFrequency']||0x96;this['dialGlobalMaxRetry']=_0x2a0c3d[_0x6d1a('0x32')]||0x4;this[_0x6d1a('0x33')]=_0x2a0c3d['Trunk']?_0x2a0c3d[_0x6d1a('0x33')]:undefined;this[_0x6d1a('0x34')]=_0x2a0c3d[_0x6d1a('0x34')]?_0x2a0c3d[_0x6d1a('0x34')]:undefined;this[_0x6d1a('0x35')]=_0x2a0c3d[_0x6d1a('0x35')]||undefined;this[_0x6d1a('0x36')]=_0x2a0c3d[_0x6d1a('0x36')]?_0x2a0c3d['Interval']:undefined;this[_0x6d1a('0x37')]=_0x2a0c3d[_0x6d1a('0x37')]||_0x6d1a('0x38');this[_0x6d1a('0x39')]=_0x2a0c3d['dialRandomLastDigitCallerIdNumber']||undefined;this[_0x6d1a('0x3a')]=_0x2a0c3d[_0x6d1a('0x3a')]||undefined;this[_0x6d1a('0x3b')]=strategy[_0x2a0c3d['strategy']]||_0x6d1a('0xa');this[_0x6d1a('0x3c')]=!![];this[_0x6d1a('0x3d')]=_0x2a0c3d[_0x6d1a('0x3d')]||![];this[_0x6d1a('0x3e')]=_0x2a0c3d[_0x6d1a('0x3e')];this[_0x6d1a('0x3f')]=_0x2a0c3d[_0x6d1a('0x3f')];this['dialAMDAfterGreetingSilence']=_0x2a0c3d[_0x6d1a('0x40')];this[_0x6d1a('0x41')]=_0x2a0c3d[_0x6d1a('0x41')];this[_0x6d1a('0x42')]=_0x2a0c3d[_0x6d1a('0x42')];this[_0x6d1a('0x43')]=_0x2a0c3d['dialAMDBetweenWordsSilence'];this['dialAMDMaximumNumberOfWords']=_0x2a0c3d[_0x6d1a('0x44')];this[_0x6d1a('0x45')]=_0x2a0c3d[_0x6d1a('0x45')];this[_0x6d1a('0x46')]=_0x2a0c3d[_0x6d1a('0x46')];this[_0x6d1a('0x47')]=0x0;this[_0x6d1a('0x48')]=0x0;this[_0x6d1a('0x49')]=_0x2a0c3d[_0x6d1a('0x49')];this[_0x6d1a('0x4a')]=0x0;this[_0x6d1a('0x4b')]=0x0;this['outboundNoAnswerCallsDay']=0x0;this[_0x6d1a('0x4c')]=0x0;this[_0x6d1a('0x4d')]=0x0;this[_0x6d1a('0x4e')]=0x0;this[_0x6d1a('0x4f')]=0x0;this[_0x6d1a('0x50')]=0x0;this[_0x6d1a('0x51')]=0x0;this[_0x6d1a('0x52')]=0x0;this[_0x6d1a('0x53')]=0x0;this[_0x6d1a('0x54')]=0x0;this['outboundReCallsDay']=0x0;this['startProgressive']=undefined;this['startPredictive']=undefined;this[_0x6d1a('0x55')]=undefined;this[_0x6d1a('0x56')]=1.05;this[_0x6d1a('0x57')]=0x0;this[_0x6d1a('0x58')]=0x0;this[_0x6d1a('0x59')]=0x0;this[_0x6d1a('0x5a')]=0x0;this[_0x6d1a('0x5b')]=0x0;this[_0x6d1a('0x5c')]=0x0;this[_0x6d1a('0x5d')]=0x0;this[_0x6d1a('0x5e')]=0.4;this[_0x6d1a('0x5f')]=0x0;this[_0x6d1a('0x60')]=0x0;this[_0x6d1a('0x61')]=0x1;this[_0x6d1a('0x62')]=0x0;this[_0x6d1a('0x63')]=0x0;this[_0x6d1a('0x64')]=0x0;this['erlangBusyFactor']=0x0;this['dialRecallMeTimeout']=_0x2a0c3d[_0x6d1a('0x65')]||0x1e;this[_0x6d1a('0x66')]=_0x2a0c3d['dialRecallInQueue']||![];this[_0x6d1a('0x67')]=_0x2a0c3d[_0x6d1a('0x67')]||undefined;this[_0x6d1a('0x68')]=_0x2a0c3d[_0x6d1a('0x68')]||![];this['dialAgiAfterHangupAgent']=_0x2a0c3d[_0x6d1a('0x69')]||![];this['monitor_format']=monitorFormat[_0x2a0c3d[_0x6d1a('0xd')]]?monitorFormat[_0x2a0c3d[_0x6d1a('0xd')]]:undefined;}module[_0x6d1a('0x6a')]=VoiceQueue;
\ No newline at end of file
index 2ed006b..63d11bb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0445=['name','accessKey','remoteUri','serverUrl','Configurations','exports'];(function(_0x38ced4,_0x24263f){var _0x547c07=function(_0x279fc4){while(--_0x279fc4){_0x38ced4['push'](_0x38ced4['shift']());}};_0x547c07(++_0x24263f);}(_0x0445,0x120));var _0x5044=function(_0x6287b6,_0x5682e7){_0x6287b6=_0x6287b6-0x0;var _0x5d6be4=_0x0445[_0x6287b6];return _0x5d6be4;};'use strict';function VtigerAccount(_0x26399c){this['id']=_0x26399c['id']||0x0;this[_0x5044('0x0')]=_0x26399c[_0x5044('0x0')]||'';this['username']=_0x26399c['username']||'';this['accessKey']=_0x26399c[_0x5044('0x1')]||'';this[_0x5044('0x2')]=_0x26399c[_0x5044('0x2')]||'';this[_0x5044('0x3')]=_0x26399c['serverUrl']||'';this[_0x5044('0x4')]=_0x26399c[_0x5044('0x4')]||{};}module[_0x5044('0x5')]=VtigerAccount;
\ No newline at end of file
+var _0x654c=['username','serverUrl','Configurations','exports','name'];(function(_0x166d93,_0x301f09){var _0xba708=function(_0x349bf7){while(--_0x349bf7){_0x166d93['push'](_0x166d93['shift']());}};_0xba708(++_0x301f09);}(_0x654c,0x194));var _0xc654=function(_0xd4a6b0,_0x35e2e7){_0xd4a6b0=_0xd4a6b0-0x0;var _0x31b381=_0x654c[_0xd4a6b0];return _0x31b381;};'use strict';function VtigerAccount(_0x28fcd3){this['id']=_0x28fcd3['id']||0x0;this['name']=_0x28fcd3[_0xc654('0x0')]||'';this['username']=_0x28fcd3[_0xc654('0x1')]||'';this['accessKey']=_0x28fcd3['accessKey']||'';this['remoteUri']=_0x28fcd3['remoteUri']||'';this[_0xc654('0x2')]=_0x28fcd3[_0xc654('0x2')]||'';this[_0xc654('0x3')]=_0x28fcd3[_0xc654('0x3')]||{};}module[_0xc654('0x4')]=VtigerAccount;
\ No newline at end of file
index bedcd17..2cb83dd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf5d=['integrationTab','serverUrl','Configurations','exports','name','username','password','token','authType','type'];(function(_0x1dabf0,_0xd6ec46){var _0x197431=function(_0x5f3291){while(--_0x5f3291){_0x1dabf0['push'](_0x1dabf0['shift']());}};_0x197431(++_0xd6ec46);}(_0xcf5d,0x86));var _0xdcf5=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xcf5d[_0x3dd15e];return _0x231fd0;};'use strict';function ZendeskAccount(_0x396b76){this['id']=_0x396b76['id']||0x0;this[_0xdcf5('0x0')]=_0x396b76['name']||'';this['username']=_0x396b76[_0xdcf5('0x1')]||'';this['password']=_0x396b76[_0xdcf5('0x2')]||'';this[_0xdcf5('0x3')]=_0x396b76[_0xdcf5('0x3')]||'';this['remoteUri']=_0x396b76['remoteUri']||'';this[_0xdcf5('0x4')]=_0x396b76['authType']||'';this[_0xdcf5('0x5')]=_0x396b76[_0xdcf5('0x5')]||_0xdcf5('0x6');this[_0xdcf5('0x7')]=_0x396b76['serverUrl']||'';this['Configurations']=_0x396b76[_0xdcf5('0x8')]||{};}module[_0xdcf5('0x9')]=ZendeskAccount;
\ No newline at end of file
+var _0xe277=['username','password','token','remoteUri','authType','type','integrationTab','serverUrl','Configurations','exports','name'];(function(_0x34843e,_0x4c4224){var _0x598f7f=function(_0x12a44c){while(--_0x12a44c){_0x34843e['push'](_0x34843e['shift']());}};_0x598f7f(++_0x4c4224);}(_0xe277,0xe6));var _0x7e27=function(_0x5d8a0c,_0x2a19ab){_0x5d8a0c=_0x5d8a0c-0x0;var _0x1ca927=_0xe277[_0x5d8a0c];return _0x1ca927;};'use strict';function ZendeskAccount(_0x4dcec1){this['id']=_0x4dcec1['id']||0x0;this[_0x7e27('0x0')]=_0x4dcec1['name']||'';this[_0x7e27('0x1')]=_0x4dcec1[_0x7e27('0x1')]||'';this['password']=_0x4dcec1[_0x7e27('0x2')]||'';this['token']=_0x4dcec1[_0x7e27('0x3')]||'';this[_0x7e27('0x4')]=_0x4dcec1['remoteUri']||'';this[_0x7e27('0x5')]=_0x4dcec1[_0x7e27('0x5')]||'';this[_0x7e27('0x6')]=_0x4dcec1[_0x7e27('0x6')]||_0x7e27('0x7');this[_0x7e27('0x8')]=_0x4dcec1[_0x7e27('0x8')]||'';this['Configurations']=_0x4dcec1[_0x7e27('0x9')]||{};}module[_0x7e27('0xa')]=ZendeskAccount;
\ No newline at end of file
index 217cbdc..1e06994 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d17=['name','authToken','host','Configurations','serverUrl','exports'];(function(_0x604838,_0x10fc89){var _0xfd5fec=function(_0x273077){while(--_0x273077){_0x604838['push'](_0x604838['shift']());}};_0xfd5fec(++_0x10fc89);}(_0x5d17,0x114));var _0x75d1=function(_0xd39959,_0x302d09){_0xd39959=_0xd39959-0x0;var _0x1ff69c=_0x5d17[_0xd39959];return _0x1ff69c;};'use strict';function ZohoAccount(_0x2dc953){this['id']=_0x2dc953['id']||0x0;this[_0x75d1('0x0')]=_0x2dc953['name']||'';this['authToken']=_0x2dc953[_0x75d1('0x1')]||'';this[_0x75d1('0x2')]=_0x2dc953[_0x75d1('0x2')]||'';this['Configurations']=_0x2dc953[_0x75d1('0x3')]||{};this[_0x75d1('0x4')]=_0x2dc953[_0x75d1('0x4')]||'';}module[_0x75d1('0x5')]=ZohoAccount;
\ No newline at end of file
+var _0x5fab=['Configurations','serverUrl','exports','name','authToken','host'];(function(_0x5101de,_0x1c5a49){var _0x29fb78=function(_0x13f206){while(--_0x13f206){_0x5101de['push'](_0x5101de['shift']());}};_0x29fb78(++_0x1c5a49);}(_0x5fab,0x177));var _0xb5fa=function(_0xf1f37e,_0x159a20){_0xf1f37e=_0xf1f37e-0x0;var _0x2e3a6d=_0x5fab[_0xf1f37e];return _0x2e3a6d;};'use strict';function ZohoAccount(_0x1b57aa){this['id']=_0x1b57aa['id']||0x0;this[_0xb5fa('0x0')]=_0x1b57aa['name']||'';this[_0xb5fa('0x1')]=_0x1b57aa[_0xb5fa('0x1')]||'';this[_0xb5fa('0x2')]=_0x1b57aa[_0xb5fa('0x2')]||'';this[_0xb5fa('0x3')]=_0x1b57aa[_0xb5fa('0x3')]||{};this[_0xb5fa('0x4')]=_0x1b57aa[_0xb5fa('0x4')]||'';}module[_0xb5fa('0x5')]=ZohoAccount;
\ No newline at end of file
index 7a20d5e..2a0ad51 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b25=['callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','getCaller','\x22%s\x22\x20<%s>','number','util','lodash','isNil','string','uniqueid','idContact','queue','name','type','campaigntype','membername','Agent','channelAgent','format','SIP/%s','calleridname','Contact','phone','firstName','lastName','active','calleridnum','scheduledat','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','callback'];(function(_0xf43011,_0x37ddfb){var _0x4e78b8=function(_0x2bb7e0){while(--_0x2bb7e0){_0xf43011['push'](_0xf43011['shift']());}};_0x4e78b8(++_0x37ddfb);}(_0x6b25,0x186));var _0x56b2=function(_0x41566f,_0x4fc35f){_0x41566f=_0x41566f-0x0;var _0x19d712=_0x6b25[_0x41566f];return _0x19d712;};'use strict';var util=require(_0x56b2('0x0'));var _=require(_0x56b2('0x1'));var moment=require('moment');function checkNameSurname(_0x264e38,_0x263402,_0xd3ad33){var _0x1ba8f3='';if(!_['isNil'](_0x263402)&&'string'===typeof _0x263402){_0x1ba8f3+=_0x263402;}if(!_[_0x56b2('0x2')](_0xd3ad33)&&_0x56b2('0x3')===typeof _0xd3ad33){_0x1ba8f3+='\x20'+_0xd3ad33;}if(_0x1ba8f3!==''){return _0x1ba8f3;}return _0x264e38;}function Action(_0x14e746,_0x5ba51f,_0x493594,_0x3c07d8,_0x3dcf48){this[_0x56b2('0x4')]=_0x493594||undefined;this[_0x56b2('0x5')]=_0x14e746['id'];this[_0x56b2('0x6')]=_0x5ba51f[_0x56b2('0x7')];this[_0x56b2('0x8')]=_0x5ba51f[_0x56b2('0x8')];this[_0x56b2('0x9')]=_0x56b2('0x6');this['dialAnswer']=![];this[_0x56b2('0xa')]=_[_0x56b2('0x2')](_0x14e746['Agent'])?undefined:_0x14e746[_0x56b2('0xb')][_0x56b2('0x7')];this[_0x56b2('0xc')]=this[_0x56b2('0xa')]?util[_0x56b2('0xd')](_0x56b2('0xe'),this['membername']):_0x3c07d8||undefined;this[_0x56b2('0xf')]=checkNameSurname(_0x14e746[_0x56b2('0x10')][_0x56b2('0x11')],_0x14e746['Contact'][_0x56b2('0x12')],_0x14e746['Contact'][_0x56b2('0x13')]);this[_0x56b2('0x14')]=_0x14e746[_0x56b2('0x14')]||![];this[_0x56b2('0x15')]=_0x14e746['Contact'][_0x56b2('0x11')];this[_0x56b2('0x16')]=_0x14e746[_0x56b2('0x16')];this[_0x56b2('0x17')]=_0x14e746[_0x56b2('0x17')]||0x0;this[_0x56b2('0x18')]=_0x14e746['countcongestionretry']||0x0;this[_0x56b2('0x19')]=_0x14e746[_0x56b2('0x19')]||0x0;this[_0x56b2('0x1a')]=(_0x14e746[_0x56b2('0x17')]||0x0)+(_0x14e746[_0x56b2('0x18')]||0x0)+(_0x14e746[_0x56b2('0x19')]||0x0);this[_0x56b2('0x1b')]=_0x14e746[_0x56b2('0x1b')];this[_0x56b2('0x1c')]=_0x14e746[_0x56b2('0x1c')];this[_0x56b2('0x1d')]=_0x14e746[_0x56b2('0x1d')];this[_0x56b2('0x1e')]=_0x14e746[_0x56b2('0x1e')];this[_0x56b2('0x1f')]=_0x14e746['ContactId'];this[_0x56b2('0x20')]=_0x14e746[_0x56b2('0x20')];this[_0x56b2('0x21')]=_[_0x56b2('0x2')](_0x14e746['Agent'])?_0x14e746[_0x56b2('0x21')]:_0x14e746[_0x56b2('0xb')]['id'];this[_0x56b2('0x22')]=_0x14e746[_0x56b2('0x22')];}Action['prototype'][_0x56b2('0x23')]=function(){return util[_0x56b2('0xd')](_0x56b2('0x24'),this[_0x56b2('0xf')],this[_0x56b2('0x25')]);};module['exports']=Action;
\ No newline at end of file
+var _0xdcfa=['calleridnum','scheduledat','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','prototype','getCaller','\x22%s\x22\x20<%s>','number','exports','isNil','string','uniqueid','queue','name','type','membername','Agent','channelAgent','format','calleridname','Contact','phone','firstName','active'];(function(_0x4ef724,_0x2eaa8f){var _0x16b426=function(_0x2c336b){while(--_0x2c336b){_0x4ef724['push'](_0x4ef724['shift']());}};_0x16b426(++_0x2eaa8f);}(_0xdcfa,0x1cd));var _0xadcf=function(_0x35a384,_0x1e102e){_0x35a384=_0x35a384-0x0;var _0x3d6e8e=_0xdcfa[_0x35a384];return _0x3d6e8e;};'use strict';var util=require('util');var _=require('lodash');var moment=require('moment');function checkNameSurname(_0x5de2a6,_0x1e1c58,_0x21ee2a){var _0x5a796a='';if(!_[_0xadcf('0x0')](_0x1e1c58)&&_0xadcf('0x1')===typeof _0x1e1c58){_0x5a796a+=_0x1e1c58;}if(!_['isNil'](_0x21ee2a)&&'string'===typeof _0x21ee2a){_0x5a796a+='\x20'+_0x21ee2a;}if(_0x5a796a!==''){return _0x5a796a;}return _0x5de2a6;}function Action(_0x343b4,_0x3a565d,_0x4ce833,_0x5c815c,_0x3d87a4){this[_0xadcf('0x2')]=_0x4ce833||undefined;this['idContact']=_0x343b4['id'];this[_0xadcf('0x3')]=_0x3a565d[_0xadcf('0x4')];this[_0xadcf('0x5')]=_0x3a565d[_0xadcf('0x5')];this['campaigntype']=_0xadcf('0x3');this['dialAnswer']=![];this[_0xadcf('0x6')]=_[_0xadcf('0x0')](_0x343b4['Agent'])?undefined:_0x343b4[_0xadcf('0x7')]['name'];this[_0xadcf('0x8')]=this[_0xadcf('0x6')]?util[_0xadcf('0x9')]('SIP/%s',this[_0xadcf('0x6')]):_0x5c815c||undefined;this[_0xadcf('0xa')]=checkNameSurname(_0x343b4[_0xadcf('0xb')][_0xadcf('0xc')],_0x343b4[_0xadcf('0xb')][_0xadcf('0xd')],_0x343b4[_0xadcf('0xb')]['lastName']);this[_0xadcf('0xe')]=_0x343b4[_0xadcf('0xe')]||![];this[_0xadcf('0xf')]=_0x343b4[_0xadcf('0xb')][_0xadcf('0xc')];this[_0xadcf('0x10')]=_0x343b4[_0xadcf('0x10')];this[_0xadcf('0x11')]=_0x343b4[_0xadcf('0x11')]||0x0;this[_0xadcf('0x12')]=_0x343b4[_0xadcf('0x12')]||0x0;this[_0xadcf('0x13')]=_0x343b4[_0xadcf('0x13')]||0x0;this[_0xadcf('0x14')]=(_0x343b4[_0xadcf('0x11')]||0x0)+(_0x343b4[_0xadcf('0x12')]||0x0)+(_0x343b4[_0xadcf('0x13')]||0x0);this['callback']=_0x343b4[_0xadcf('0x15')];this[_0xadcf('0x16')]=_0x343b4['callbackuniqueid'];this[_0xadcf('0x17')]=_0x343b4[_0xadcf('0x17')];this[_0xadcf('0x18')]=_0x343b4[_0xadcf('0x18')];this[_0xadcf('0x19')]=_0x343b4['ContactId'];this['ListId']=_0x343b4[_0xadcf('0x1a')];this[_0xadcf('0x1b')]=_[_0xadcf('0x0')](_0x343b4[_0xadcf('0x7')])?_0x343b4[_0xadcf('0x1b')]:_0x343b4['Agent']['id'];this['VoiceQueueId']=_0x343b4[_0xadcf('0x1c')];}Action[_0xadcf('0x1d')][_0xadcf('0x1e')]=function(){return util[_0xadcf('0x9')](_0xadcf('0x1f'),this[_0xadcf('0xa')],this[_0xadcf('0x20')]);};module[_0xadcf('0x21')]=Action;
\ No newline at end of file
index 1cb62ec..acad71b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1261=['isFailure','response','custom:agentringnoanswer','rejected','callProgressDetectingAgent','[callProgressDetectingAgent][logAnswer]','[syncHangup][talking]','cause','callProgressDetectingCustomer','[syncHangup][talking][cause]','statedesc','dialQueueProject','channelstate','transfer','[syncHangup][talking][transfer]','destlinkedid','dialstatus','syncHangupRequest','addVariable','variables','filterKey','keys','variable','value','error','inspect','transfertargetlinkedid','syncBlindTransfer','transfererlinkedid','exports','lodash','bluebird','uuid','moment','md5','../../../config/logger','preview','actionPreview','../ami','./util/util','socket.io-emitter','prototype','enqueue','tail','finally','sequence','voiceQueues','actions','agents','clockClearZombieChannels','originateresponse','syncOriginateResponse','bind','hangup','syncHangup','hanguprequest','dialend','syncDialEnd','syncNewExten','varset','syncVarSet','syncAttendedTransfer','loopCampaigns','emit','type','answered','available','loggedIn','pTalking','sumDuration','sumHoldTime','total','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundUnknownCallsDay','predictiveIntervalAvgHoldtime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalErlangCalls','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalTotalCalls','originated','Trunk','name','callerid','Interval','stringify','voice:queue:%s','voice_queue:save','voice_queue_channel:remove','sendMessageOneNotActive','paused','message','NOT_ACTIVE','logger','IS_DISACTIVED','[CampaignPreview]\x20Campaign\x20Queue:\x20','syncCampaigns','hasOwnProperty','outbound','clearZombieChannels','setMessage','recallMe','clearZombieChannel','isNil','info','Queue','queue','originated:\x20','dialAnswer','pick','UserId','VoiceQueueId','Action','status','channel','catch','No\x20such\x20channel','campaignsPreview','[clearZombieChannel]','decrementTalkink','loggerError','[Dialer][checkChannel][pTalking][Preview]','[Dialer][checkChannel][Preview]','[action]','size','getContactRecallMe','agentReadyId','then','length','getDiff','scheduledat','dialRecallMeTimeout','[RecallMe]','logger2','starttime','YYYY-MM-DD\x20HH:mm:ss','logCustomer','dialRecallInQueue','rescheduleContactInQueue','createBody','createCustomerHistory','[HistoryDialRecallInQueue][historyCatch]','RecallFailedTimeout','createCustomerFinal','[HistoryRecallClose]','[getContactRecallMe]','IsNotLoggedIn','AGENTS_NOT_LOGGED','TRUNK_IS_NOT_REACHABLE','ACTIVE','NoSuchNumber','[callProgressDetectingCustomer][logNoSuch]','dialGlobalMaxRetry','cloneAction','Global','[callProgressDetectingCustomer][logNoSuchGlobal]','linkedid','ANSWER','format','[syncHangup][talking][increment]','uniqueid','\x20Queue','pTalking:\x20','custom:agentconnect','buildObj','connect','acw','custom:agentConnectPreview','custom:agentcomplete','complete','outboundAnswerCallsDay','totalGlobal','Answer','crateCustomerReportQueue','talktime','sumBillable','[syncHangup][talking][decrement]','BUSY','countbusyretry','countglobal','Busy','[callProgressDetectingCustomer][logBusy]','scheduledAt','dialBusyRetryFrequency','unlockAgent','activeContact','countnoanswerretry','NoAnswer','[callProgressDetectingCustomer][logNoAnswer]','[callProgressDetectingCustomer][logNoAnswerGlobal]','dialNoAnswerMaxRetry','rescheduleContact','dialNoAnswerRetryFrequency','CONGESTION','countcongestionretry','Congestion','[callProgressDetectingCustomer][logCongestionGlobal]','dialCongestionMaxRetry','outboundRejectCallsDay','AgentReject','[syncHangupRequest][logAgentReject]','unlockContact','idContact','cause-txt','[callProgressDetectingCustomer][logUnknown]','[callProgressDetectingCustomer][logUnknownGlobal]','[originated][decrement][callProgressDetectingCustomer]','isUndefined','object','reason','logAgent','[callProgressDetectingAgent][logNoSuch]','[callProgressDetectingAgent][logNoAnswer]','createAgentHistory','[callProgressDetectingAgent][logCongestion]','[callProgressDetectingAgent][logAnswerAGI]','updateOriginated','[callProgressDetectingAgent]','[originated][decrement][callProgressDetectingAgent]','checkInBlack','Contact','phone','Contact\x20is\x20undefined','lookAgent','isEmpty','Queue:\x20','custom:agentcalled','Calling','[Preview][execCall][failure]','Call\x20failed','logBlacklist','createHistory','[Blacklist][error]','Contact\x20in\x20black\x20List','isTrunkReachable','active','trunks','SIP/%s','reachable','unmonitored','execRun','unlock','disableContact','recallme','validateContact','isValid','checkIsBlackList','Contact.phone','Call\x20unsuccessful','[Preview][getContactPreview]','Agent','Empty\x20Contact','[Preview][validateContact][Empty\x20Campaign]','Empty\x20Campaign','[Preview][validateContact][Trunk\x20not\x20work]','campaign\x20Name:\x20','\x20Trunk\x20is\x20not\x20active','\x20Trunk\x20Backup\x20is\x20not\x20active','Trunk\x20not\x20work','isActive','[Preview][validateContact][Campaign\x20Active]','Is\x20Valid','execCall','SIP/%s/%s%s','trim','dialCutDigit','substring','TrunkBackup','getCallerId','dialRandomLastDigitCallerIdNumber','getCallerIdRandom','addVariables','toLowerVariables','variablesAction','[originated][increment]','[originateFailure][logOriginateFailure]','actionid','logLookAgent','clone','responsetime'];(function(_0x3440e7,_0x144016){var _0x2a4e06=function(_0x186c8c){while(--_0x186c8c){_0x3440e7['push'](_0x3440e7['shift']());}};_0x2a4e06(++_0x144016);}(_0x1261,0x144));var _0x1126=function(_0x455afa,_0x235bfc){_0x455afa=_0x455afa-0x0;var _0x46ee43=_0x1261[_0x455afa];return _0x46ee43;};'use strict';var util=require('util');var _=require(_0x1126('0x0'));var BPromise=require(_0x1126('0x1'));var uuid=require(_0x1126('0x2'));var moment=require(_0x1126('0x3'));var md5=require(_0x1126('0x4'));var logger=require(_0x1126('0x5'))(_0x1126('0x6'));var loggerAction=require(_0x1126('0x5'))(_0x1126('0x7'));var ami=require(_0x1126('0x8'));var rpcDb=require('./rpcDb');var Action=require('./action');var ut=require(_0x1126('0x9'));var io=require(_0x1126('0xa'))({'host':'localhost','port':0x18eb});var Sequence=function(){};Sequence[_0x1126('0xb')][_0x1126('0xc')]=function(_0x245be9){this[_0x1126('0xd')]=this[_0x1126('0xd')]?this['tail'][_0x1126('0xe')](_0x245be9):_0x245be9();};function Preview(_0x18dbe6){this[_0x1126('0xf')]=new Sequence();this['campaignsPreview']=_0x18dbe6[_0x1126('0x10')];this['trunks']=_0x18dbe6['trunks'];this[_0x1126('0x11')]={};this['agents']=_0x18dbe6[_0x1126('0x12')];this[_0x1126('0x13')]=0x0;ami['on'](_0x1126('0x14'),this[_0x1126('0x15')][_0x1126('0x16')](this));ami['on'](_0x1126('0x17'),this[_0x1126('0x18')][_0x1126('0x16')](this));ami['on'](_0x1126('0x19'),this['syncHangupRequest']['bind'](this));ami['on'](_0x1126('0x1a'),this[_0x1126('0x1b')][_0x1126('0x16')](this));ami['on']('newexten',this[_0x1126('0x1c')]['bind'](this));ami['on'](_0x1126('0x1d'),this[_0x1126('0x1e')][_0x1126('0x16')](this));ami['on']('attendedtransfer',this[_0x1126('0x1f')][_0x1126('0x16')](this));ami['on']('blindtransfer',this['syncBlindTransfer'][_0x1126('0x16')](this));this[_0x1126('0x20')](this['campaignsPreview']);}function emit(_0x548359,_0x4564c0,_0x58b109){io['to'](_0x548359)[_0x1126('0x21')](_0x4564c0,_0x58b109);}function emitCampaignPreview(_0x1d6d19){if(_0x1d6d19[_0x1126('0x22')]==='outbound'){var _0x2a08ba={'id':_0x1d6d19['id'],'name':_0x1d6d19['name'],'strategy':_0x1d6d19['strategy'],'answered':_0x1d6d19[_0x1126('0x23')],'available':_0x1d6d19[_0x1126('0x24')],'loggedIn':_0x1d6d19[_0x1126('0x25')],'pTalking':_0x1d6d19[_0x1126('0x26')],'sumBillable':_0x1d6d19['sumBillable'],'sumDuration':_0x1d6d19[_0x1126('0x27')],'sumHoldTime':_0x1d6d19[_0x1126('0x28')],'talking':_0x1d6d19['talking'],'total':_0x1d6d19[_0x1126('0x29')],'type':_0x1d6d19['type'],'unmanaged':_0x1d6d19['unmanaged'],'waiting':_0x1d6d19['waiting'],'loggedInDb':_0x1d6d19[_0x1126('0x2a')],'dialActive':_0x1d6d19[_0x1126('0x2b')],'dialMethod':_0x1d6d19[_0x1126('0x2c')],'dialOriginateCallerIdName':_0x1d6d19[_0x1126('0x2d')],'dialOriginateCallerIdNumber':_0x1d6d19[_0x1126('0x2e')],'dialOriginateTimeout':_0x1d6d19[_0x1126('0x2f')],'dialPrefix':_0x1d6d19[_0x1126('0x30')],'outboundAnswerAgiCallsDay':_0x1d6d19[_0x1126('0x31')],'outboundAnswerCallsDay':_0x1d6d19['outboundAnswerCallsDay'],'outboundBlacklistCallsDay':_0x1d6d19[_0x1126('0x32')],'outboundBusyCallsDay':_0x1d6d19[_0x1126('0x33')],'outboundCongestionCallsDay':_0x1d6d19[_0x1126('0x34')],'outboundDropCallsDayACS':_0x1d6d19['outboundDropCallsDayACS'],'outboundDropCallsDayCallersExit':_0x1d6d19['outboundDropCallsDayCallersExit'],'outboundDropCallsDayTimeout':_0x1d6d19[_0x1126('0x35')],'outboundNoAnswerCallsDay':_0x1d6d19[_0x1126('0x36')],'outboundNoSuchCallsDay':_0x1d6d19['outboundNoSuchCallsDay'],'outboundOriginateFailureCallsDay':_0x1d6d19[_0x1126('0x37')],'outboundReCallsDay':_0x1d6d19[_0x1126('0x38')],'outboundRejectCallsDay':_0x1d6d19['outboundRejectCallsDay'],'outboundUnknownCallsDay':_0x1d6d19[_0x1126('0x39')],'predictiveIntervalAnsweredCalls':_0x1d6d19['predictiveIntervalAnsweredCalls'],'predictiveIntervalAvgHoldtime':_0x1d6d19[_0x1126('0x3a')],'predictiveIntervalAvgTalktime':_0x1d6d19['predictiveIntervalAvgTalktime'],'predictiveIntervalDroppedCallsCallersExit':_0x1d6d19[_0x1126('0x3b')],'predictiveIntervalDroppedCallsTimeout':_0x1d6d19['predictiveIntervalDroppedCallsTimeout'],'predictiveIntervalErlangCalls':_0x1d6d19[_0x1126('0x3c')],'predictiveIntervalErlangCallsDroppedCalls':_0x1d6d19['predictiveIntervalErlangCallsDroppedCalls'],'predictiveIntervalHitRate':_0x1d6d19['predictiveIntervalHitRate'],'predictiveIntervalLowerLimit':_0x1d6d19['predictiveIntervalLowerLimit'],'predictiveIntervalMultiplicativeFactor':_0x1d6d19[_0x1126('0x3d')],'predictiveIntervalPauses':_0x1d6d19[_0x1126('0x3e')],'predictiveIntervalTotalCalls':_0x1d6d19[_0x1126('0x3f')],'message':_0x1d6d19['message'],'originated':_0x1d6d19[_0x1126('0x40')]};if(_0x1d6d19[_0x1126('0x41')]){_0x2a08ba['Trunk']={'id':_0x1d6d19[_0x1126('0x41')]['id'],'name':_0x1d6d19[_0x1126('0x41')][_0x1126('0x42')],'active':_0x1d6d19[_0x1126('0x41')]['active'],'callerid':_0x1d6d19['Trunk'][_0x1126('0x43')]};}if(_0x1d6d19[_0x1126('0x44')]){_0x2a08ba[_0x1126('0x44')]={'id':_0x1d6d19[_0x1126('0x44')]['id'],'name':_0x1d6d19['Interval'][_0x1126('0x42')]};}var _0x6f4312=md5(JSON[_0x1126('0x45')](_0x2a08ba));if(_0x1d6d19[_0x1126('0x4')]!==_0x6f4312){_0x1d6d19[_0x1126('0x4')]=_0x6f4312;emit(util['format'](_0x1126('0x46'),_0x2a08ba[_0x1126('0x42')]),_0x1126('0x47'),_0x2a08ba);}}}function emitVoiceQueueChannelRemove(_0x42e773){emit(util['format']('voice:queue:%s',_0x42e773[_0x1126('0x42')]),_0x1126('0x48'),_0x42e773);}function notSendMessagesQueue(_0x511e6b){if(_0x511e6b[_0x1126('0x49')]){if(_0x511e6b[_0x1126('0x40')]===0x0&&_0x511e6b[_0x1126('0x26')]===0x0){_0x511e6b['sendMessageOneNotActive']=![];_0x511e6b['available']=0x0;_0x511e6b[_0x1126('0x4a')]=0x0;_0x511e6b[_0x1126('0x4b')]=_0x1126('0x4c');ut[_0x1126('0x4d')]('[CampaignPreview]\x20Campaign\x20Queue:\x20',_0x511e6b[_0x1126('0x42')]+'\x20is\x20not\x20active');}else{_0x511e6b[_0x1126('0x4b')]=_0x1126('0x4e');ut[_0x1126('0x4d')](_0x1126('0x4f'),_0x511e6b[_0x1126('0x42')]+'\x20is\x20disactive');}emitCampaignPreview(_0x511e6b);}}Preview[_0x1126('0xb')][_0x1126('0x20')]=function(){var _0x2939a9=this;setInterval(function(){_0x2939a9[_0x1126('0x50')]();},0x7cf);};Preview[_0x1126('0xb')][_0x1126('0x50')]=function(){var _0x3052f9=this['campaignsPreview'];this[_0x1126('0x13')]+=0x1;for(var _0x154c28 in _0x3052f9){if(_0x3052f9[_0x1126('0x51')](_0x154c28)&&(_0x3052f9[_0x154c28][_0x1126('0x2c')]===_0x1126('0x6')||_0x3052f9[_0x154c28]['dialMethod']==='booked')&&_0x3052f9[_0x154c28][_0x1126('0x22')]===_0x1126('0x52')){if(this[_0x1126('0x13')]>0x7){this[_0x1126('0x13')]=0x0;this[_0x1126('0x53')]();}}if(_0x3052f9[_0x1126('0x51')](_0x154c28)&&_0x3052f9[_0x154c28]['dialMethod']==='preview'&&_0x3052f9[_0x154c28]['type']===_0x1126('0x52')){if(_0x3052f9[_0x154c28]['dialActive']){this[_0x1126('0x54')](_0x3052f9[_0x154c28]);this[_0x1126('0x55')](_0x3052f9[_0x154c28]);}else{notSendMessagesQueue(_0x3052f9[_0x154c28]);}}}};Preview[_0x1126('0xb')][_0x1126('0x56')]=function(_0x585fad){var _0x4c94bb=this;this[_0x1126('0xf')][_0x1126('0xc')](function(){if(!_[_0x1126('0x57')](_0x4c94bb['actions'][_0x585fad])){loggerAction[_0x1126('0x58')]('[clearZombieChannels][talking]',_0x585fad,_0x1126('0x59'),_0x4c94bb['actions'][_0x585fad][_0x1126('0x5a')],_0x1126('0x5b'),JSON[_0x1126('0x45')](_0x4c94bb['campaignsPreview'][_0x4c94bb[_0x1126('0x11')][_0x585fad][_0x1126('0x5a')]][_0x1126('0x40')]),'pTalking:\x20',JSON['stringify'](_0x4c94bb['campaignsPreview'][_0x4c94bb[_0x1126('0x11')][_0x585fad]['queue']][_0x1126('0x26')]),JSON['stringify'](_0x4c94bb[_0x1126('0x11')][_0x585fad][_0x1126('0x5c')]),JSON[_0x1126('0x45')](_[_0x1126('0x5d')](_0x4c94bb[_0x1126('0x11')][_0x585fad],['contactId',_0x1126('0x5e'),_0x1126('0x5f'),'ListId'])));return ami[_0x1126('0x60')]({'action':_0x1126('0x61'),'channel':_0x4c94bb['actions'][_0x585fad][_0x1126('0x62')]})[_0x1126('0x63')](function(_0x518e0a){if(_0x518e0a[_0x1126('0x4b')]===_0x1126('0x64')){setTimeout(function(){if(_0x4c94bb[_0x1126('0x11')][_0x585fad]){ut['updateOriginated'](_0x4c94bb[_0x1126('0x65')][_0x4c94bb[_0x1126('0x11')][_0x585fad][_0x1126('0x5a')]],_0x1126('0x66'));if(_0x4c94bb[_0x1126('0x11')][_0x585fad][_0x1126('0x5c')]===!![]){ut[_0x1126('0x67')](_0x4c94bb[_0x1126('0x65')][_0x4c94bb['actions'][_0x585fad][_0x1126('0x5a')]],'[clearZombieChannel]');ut[_0x1126('0x68')](_0x1126('0x69')+_0x585fad,_0x4c94bb['actions'][_0x585fad]['queue']);}ut[_0x1126('0x68')](_0x1126('0x6a')+_0x585fad,_0x4c94bb[_0x1126('0x11')][_0x585fad]['queue']);delete _0x4c94bb[_0x1126('0x11')][_0x585fad];}},0x2328);}});}});};Preview[_0x1126('0xb')][_0x1126('0x53')]=function(){var _0x615936=this;loggerAction['info'](_0x1126('0x6b'),_[_0x1126('0x6c')](this['actions']));for(var _0x4bcc08 in this['actions']){if(_0x615936['actions'][_0x1126('0x51')](_0x4bcc08)){_0x615936[_0x1126('0x56')](_0x4bcc08);}}};Preview['prototype'][_0x1126('0x55')]=function(_0x1c7a2b){var _0x38093e=this;rpcDb[_0x1126('0x6d')](_0x1c7a2b['id'],ut[_0x1126('0x6e')](this['agents']))[_0x1126('0x6f')](function(_0x267592){if(!_['isNil'](_0x267592)){for(var _0x322016=0x0;_0x322016<_0x267592[_0x1126('0x70')];_0x322016+=0x1){if(ut[_0x1126('0x71')](_0x267592[_0x322016][_0x1126('0x72')])<_0x1c7a2b[_0x1126('0x73')]*0x3c){_0x38093e['run'](_0x267592[_0x322016]['id'])[_0x1126('0x6f')](ut['logger2'](_0x1126('0x74')))[_0x1126('0x63')](ut[_0x1126('0x75')]('[RecallMe]'));}else{var _0x427add=new Action(_0x267592[_0x322016],_0x1c7a2b);_0x427add[_0x1126('0x76')]=moment()['format'](_0x1126('0x77'));_0x1c7a2b[_0x1126('0x38')]+=0x1;ut[_0x1126('0x78')](_0x427add,0x17,'RecallInQueue');if(_0x1c7a2b[_0x1126('0x79')]){rpcDb[_0x1126('0x7a')](ut[_0x1126('0x7b')](_0x267592[_0x322016]));rpcDb[_0x1126('0x7c')](_0x427add,_0x1126('0x7d'));}else{ut[_0x1126('0x78')](_0x427add,0x16,_0x1126('0x7e'));rpcDb[_0x1126('0x7c')](_0x427add,'[HistoryRecallClose]');rpcDb[_0x1126('0x7f')](_0x427add,_0x1126('0x80'));}}}}})[_0x1126('0x63')](ut[_0x1126('0x75')](_0x1126('0x81')));};Preview['prototype'][_0x1126('0x54')]=function(_0x315386){_0x315386['sendMessageOneNotActive']=!![];if(ut[_0x1126('0x82')](_0x315386['loggedIn'])){_0x315386[_0x1126('0x4b')]=_0x1126('0x83');}else if(!ut['isActive'](_0x315386[_0x1126('0x2b')])){_0x315386[_0x1126('0x4b')]=_0x1126('0x4c');}else if(!this['isTrunkReachable'](_0x315386[_0x1126('0x41')])){if(!this['isTrunkReachable'](_0x315386['TrunkBackup'])){_0x315386[_0x1126('0x4b')]=_0x1126('0x84');}else{_0x315386[_0x1126('0x4b')]=_0x1126('0x85');}}else{_0x315386[_0x1126('0x4b')]=_0x1126('0x85');}emitCampaignPreview(_0x315386);};Preview[_0x1126('0xb')]['callProgressDetectingCustomer']=function(_0x191307,_0x43ec00,_0x116867){var _0xc39c36=this;var _0x3f87aa=this[_0x1126('0x11')][_0x43ec00];var _0x5a0804=this['campaignsPreview'][_0x3f87aa[_0x1126('0x5a')]];var _0x3921c2;if(_0x5a0804){switch(_0x116867){case'1':_0x5a0804['outboundNoSuchCallsDay']+=0x1;_0x3f87aa['countglobal']=ut['totalGlobal'](_0x3f87aa);ut['logCustomer'](_0x3f87aa,0x0,_0x1126('0x86'));rpcDb[_0x1126('0x7c')](_0x3f87aa,_0x1126('0x87'));if(ut['totalGlobal'](_0x3f87aa)>=_0x5a0804[_0x1126('0x88')]){_0x3921c2=ut[_0x1126('0x89')](_0x3f87aa,0xf,_0x1126('0x8a'));rpcDb[_0x1126('0x7f')](_0x3921c2,_0x1126('0x8b'));}else{rpcDb[_0x1126('0x7f')](_0x3f87aa,_0x1126('0x8b'));}delete this['actions'][_0x191307[_0x1126('0x8c')]];break;case _0x1126('0x8d'):var _0x43bd70=moment()[_0x1126('0x8e')](_0x1126('0x77'));_0x3f87aa['responsetime']=_0x43bd70;_0x3f87aa['answertime']=_0x43bd70;_0x3f87aa[_0x1126('0x5c')]=!![];_0x5a0804[_0x1126('0x26')]+=0x1;logger['info'](_0x1126('0x8f'),_0x3f87aa[_0x1126('0x90')],_0x1126('0x91'),_0x5a0804[_0x1126('0x42')],_0x1126('0x92'),_0x5a0804[_0x1126('0x26')]);ami[_0x1126('0x21')](_0x1126('0x93'),ut[_0x1126('0x94')](_0x3f87aa,_0x1126('0x95')));if(_0x5a0804[_0x1126('0x96')]){ami[_0x1126('0x21')](_0x1126('0x97'),ut['buildAcw'](_0x3f87aa));}break;case'16':ami[_0x1126('0x21')](_0x1126('0x98'),ut[_0x1126('0x94')](_0x3f87aa,'complete'));emitVoiceQueueChannelRemove(ut['buildObj'](_0x3f87aa,_0x1126('0x99')));_0x5a0804[_0x1126('0x9a')]+=0x1;_0x5a0804[_0x1126('0x29')]+=0x1;_0x5a0804[_0x1126('0x23')]+=0x1;ut['decrementTalkink'](_0x5a0804,'[16]');_0x3f87aa['countglobal']=ut[_0x1126('0x9b')](_0x3f87aa);ut[_0x1126('0x78')](_0x3f87aa,0x4,_0x1126('0x9c'));rpcDb[_0x1126('0x7c')](_0x3f87aa,'[callProgressDetectingCustomer][logAnswer]');rpcDb[_0x1126('0x7f')](_0x3f87aa,'[callProgressDetectingCustomer][logAnswerGlobal]');rpcDb[_0x1126('0x9d')](_0x3f87aa);_0x5a0804[_0x1126('0x27')]+=_0x3f87aa[_0x1126('0x9e')];_0x5a0804[_0x1126('0x9f')]+=_0x3f87aa[_0x1126('0x9e')];logger[_0x1126('0x58')](_0x1126('0xa0'),_0x3f87aa['uniqueid'],_0x1126('0x91'),_0x5a0804['name'],_0x1126('0x92'),_0x5a0804[_0x1126('0x26')]);delete this['actions'][_0x191307[_0x1126('0x8c')]];break;case _0x1126('0xa1'):_0x5a0804['outboundBusyCallsDay']+=0x1;_0x3f87aa[_0x1126('0xa2')]+=0x1;_0x3f87aa[_0x1126('0xa3')]=ut['totalGlobal'](_0x3f87aa);ut['logCustomer'](_0x3f87aa,0x5,_0x1126('0xa4'));rpcDb[_0x1126('0x7c')](_0x3f87aa,_0x1126('0xa5'));if(ut['totalGlobal'](_0x3f87aa)>=_0x5a0804['dialGlobalMaxRetry']){_0x3921c2=ut['cloneAction'](_0x3f87aa,0xf,_0x1126('0x8a'));rpcDb['createCustomerFinal'](_0x3921c2,'[callProgressDetectingCustomer][logBusyGlobal]');}else{if(_0x3f87aa[_0x1126('0xa2')]>=_0x5a0804['dialBusyMaxRetry']){rpcDb[_0x1126('0x7f')](_0x3f87aa,_0x1126('0xa5'));}else{rpcDb['rescheduleContact'](ut[_0x1126('0xa6')](_0x3f87aa,_0x1126('0xa2'),_0x5a0804[_0x1126('0xa7')]),_0x3f87aa[_0x1126('0xa8')],_0x3f87aa[_0x1126('0xa9')]);}}break;case'NOANSWER':_0x5a0804[_0x1126('0x36')]+=0x1;_0x3f87aa[_0x1126('0xaa')]+=0x1;_0x3f87aa['countglobal']=ut[_0x1126('0x9b')](_0x3f87aa);ut[_0x1126('0x78')](_0x3f87aa,0x3,_0x1126('0xab'));rpcDb[_0x1126('0x7c')](_0x3f87aa,_0x1126('0xac'));if(ut[_0x1126('0x9b')](_0x3f87aa)>=_0x5a0804[_0x1126('0x88')]){_0x3921c2=ut[_0x1126('0x89')](_0x3f87aa,0xf,_0x1126('0x8a'));rpcDb[_0x1126('0x7f')](_0x3921c2,_0x1126('0xad'));}else{if(_0x3f87aa[_0x1126('0xaa')]>=_0x5a0804[_0x1126('0xae')]){rpcDb[_0x1126('0x7f')](_0x3f87aa,_0x1126('0xac'));}else{rpcDb[_0x1126('0xaf')](ut['scheduledAt'](_0x3f87aa,_0x1126('0xaa'),_0x5a0804[_0x1126('0xb0')]),_0x3f87aa[_0x1126('0xa8')],_0x3f87aa[_0x1126('0xa9')]);}}break;case _0x1126('0xb1'):_0x5a0804['outboundCongestionCallsDay']+=0x1;_0x3f87aa[_0x1126('0xb2')]+=0x1;_0x3f87aa['countglobal']=ut['totalGlobal'](_0x3f87aa);ut[_0x1126('0x78')](_0x3f87aa,0x8,_0x1126('0xb3'));rpcDb['createCustomerHistory'](_0x3f87aa,'[callProgressDetectingCustomer][logCongestion]');if(ut[_0x1126('0x9b')](_0x3f87aa)>=_0x5a0804[_0x1126('0x88')]){_0x3921c2=ut[_0x1126('0x89')](_0x3f87aa,0xf,_0x1126('0x8a'));rpcDb[_0x1126('0x7f')](_0x3921c2,_0x1126('0xb4'));}else{if(_0x3f87aa[_0x1126('0xb2')]>=_0x5a0804[_0x1126('0xb5')]){rpcDb[_0x1126('0x7f')](_0x3f87aa,'[callProgressDetectingCustomer][logCongestion]');}else{rpcDb[_0x1126('0xaf')](ut[_0x1126('0xa6')](_0x3f87aa,_0x1126('0xb2'),_0x5a0804[_0x1126('0xa7')]),_0x3f87aa[_0x1126('0xa8')],_0x3f87aa[_0x1126('0xa9')]);}}break;case'CANCEL':_0x5a0804[_0x1126('0xb6')]+=0x1;_0x3f87aa[_0x1126('0xa3')]=ut[_0x1126('0x9b')](_0x3f87aa);ut[_0x1126('0x78')](_0x3f87aa,0x14,_0x1126('0xb7'));rpcDb[_0x1126('0x7c')](_0x3f87aa,_0x1126('0xb8'));if(_0x3f87aa[_0x1126('0xa8')]){rpcDb[_0x1126('0xb9')](_0x3f87aa[_0x1126('0xba')]);}if(_0x3f87aa['activeContact']){rpcDb['disableContact'](_0x3f87aa[_0x1126('0xba')]);}break;default:if(_0x3f87aa['dialAnswer']){ut[_0x1126('0x67')](_0x5a0804,'[default]');ut[_0x1126('0x68')]('[Dialer][decrementTalkink][no\x20Hangup][Preview]'+_0x5a0804[_0x1126('0x42')],_0x191307);}_0x5a0804['outboundUnknownCallsDay']+=0x1;_0x3f87aa['countglobal']=ut['totalGlobal'](_0x3f87aa);ut[_0x1126('0x78')](_0x3f87aa,0xc,_0x191307[_0x1126('0xbb')]||_0x191307['dialstatus']);rpcDb['createCustomerHistory'](_0x3f87aa,_0x1126('0xbc'));if(ut[_0x1126('0x9b')](_0x3f87aa)>=_0x5a0804[_0x1126('0x88')]){_0x3921c2=ut['cloneAction'](_0x3f87aa,0xf,'Global');rpcDb[_0x1126('0x7f')](_0x3921c2,'[callProgressDetectingCustomer][logUnknownGlobal]');}else{rpcDb[_0x1126('0x7f')](_0x3f87aa,_0x1126('0xbd'));}delete this[_0x1126('0x11')][_0x191307[_0x1126('0x8c')]];}if(!(_0x3f87aa[_0x1126('0x5c')]&&_0x116867==='16')){ut['updateOriginated'](_0x5a0804,'[callProgressDetectingCustomer]');logger[_0x1126('0x58')](_0x1126('0xbe'),_0x3f87aa[_0x1126('0x90')],_0x1126('0x91'),_0x5a0804[_0x1126('0x42')],_0x1126('0x5b'),_0x5a0804[_0x1126('0x40')]);}if(_0x116867!==_0x1126('0x8d')){delete this[_0x1126('0x11')][_0x191307[_0x1126('0x8c')]];delete this[_0x1126('0x11')][_0x191307['destlinkedid']];}}};Preview[_0x1126('0xb')]['callProgressDetectingAgent']=function(_0x99eb4e,_0x4ec8b9,_0x4256e6){if(_[_0x1126('0xbf')](_0x4ec8b9)&&_0x1126('0xc0')!==typeof _0x4ec8b9){return;}if(_[_0x1126('0xbf')](_0x4256e6)&&'object'!==typeof _0x4256e6){return;}switch(_0x4256e6[_0x1126('0xc1')]){case'0':ut[_0x1126('0xc2')](_0x99eb4e,0x0,'NoSuchNumber');rpcDb['createAgentHistory'](_0x99eb4e,_0x1126('0xc3'));break;case'3':ut[_0x1126('0xc2')](_0x99eb4e,0x3,_0x1126('0xab'));rpcDb['createAgentHistory'](_0x99eb4e,_0x1126('0xc4'));break;case'5':ut['logAgent'](_0x99eb4e,0x5,_0x1126('0xa4'));rpcDb[_0x1126('0xc5')](_0x99eb4e,'[callProgressDetectingAgent][logBusy]');break;case'8':ut[_0x1126('0xc2')](_0x99eb4e,0x8,_0x1126('0xb3'));rpcDb[_0x1126('0xc5')](_0x99eb4e,_0x1126('0xc6'));break;case'22':ut[_0x1126('0xc2')](_0x99eb4e,0x16,'AnswerAGI');rpcDb[_0x1126('0xc5')](_0x99eb4e,_0x1126('0xc7'));break;default:ut[_0x1126('0xc2')](_0x99eb4e,0xc,_0x4256e6['reason']);rpcDb['createAgentHistory'](_0x99eb4e,'[callProgressDetectingAgent][logCongestion]');}ut[_0x1126('0xc8')](_0x4ec8b9,_0x1126('0xc9'));logger[_0x1126('0x58')](_0x1126('0xca'),_0x99eb4e['uniqueid'],_0x1126('0x91'),_0x4ec8b9[_0x1126('0x42')],_0x1126('0x5b'),_0x4ec8b9[_0x1126('0x40')]);delete this[_0x1126('0x11')][_0x99eb4e['uniqueid']];};Preview[_0x1126('0xb')][_0x1126('0xcb')]=function(_0x51871c,_0x1eaf17,_0x59a877,_0x4787c7,_0x11d27e){var _0x5e106e=this;return new BPromise(function(_0x1e763,_0x3a84a7){if(_[_0x1126('0x57')](_0x1eaf17)||_[_0x1126('0x57')](_0x1eaf17[_0x1126('0xcc')])||_[_0x1126('0x57')](_0x1eaf17[_0x1126('0xcc')][_0x1126('0xcd')])||_[_0x1126('0x57')](_0x1eaf17['VoiceQueueId'])){_0x3a84a7(ut[_0x1126('0x4b')](_0x1126('0xce'),_0x4787c7,_0x11d27e));return;}var _0x1cda9d=uuid['v4']();var _0x369447=_0x5e106e['campaignsPreview'][_0x1eaf17[_0x1126('0x59')][_0x1126('0x42')]];var _0x19500e=_0x59a877?_0x5e106e[_0x1126('0x12')][_0x59a877]['id']:undefined;_0x5e106e['actions'][_0x1cda9d]=new Action(_0x1eaf17,_0x369447,_0x1cda9d,_0x59a877,_0x19500e);var _0x574304=_0x5e106e['actions'][_0x1cda9d];_0x574304[_0x1126('0xa8')]=_0x4787c7;_0x574304['activeContact']=_0x11d27e;_0x574304[_0x1126('0xcf')]=_0x59a877;if(_[_0x1126('0xd0')](_0x51871c)){_0x5e106e['execCall'](_0x574304,_0x369447,_0x1eaf17,_0x59a877)['then'](function(_0x3206c7){logger[_0x1126('0x58')]('[Preview][execCall][success]',_0x1126('0xd1')+_0x574304[_0x1126('0x5a')]+'\x20IdHopper:\x20'+_0x574304[_0x1126('0xba')],JSON['stringify'](_0x3206c7));ami[_0x1126('0x21')](_0x1126('0xd2'),ut[_0x1126('0x94')](_0x574304,'called'));_0x1e763(ut[_0x1126('0x4b')](_0x1126('0xd3')));})[_0x1126('0x63')](function(_0x408986){ut[_0x1126('0x4d')](_0x1126('0xd4'),_0x408986);_0x3a84a7(ut[_0x1126('0x4b')](_0x1126('0xd5'),_0x4787c7,_0x11d27e));});}else{_0x369447[_0x1126('0x32')]+=0x1;ut[_0x1126('0xd6')](_0x574304);rpcDb[_0x1126('0xd7')](_0x574304,_0x1126('0xd8'));delete _0x5e106e[_0x1126('0x11')][_0x1cda9d];_0x3a84a7(ut[_0x1126('0x4b')](_0x1126('0xd9'),_0x4787c7,_0x11d27e));}});};Preview[_0x1126('0xb')][_0x1126('0xda')]=function(_0x5f3898){return!_[_0x1126('0x57')](_0x5f3898)&&!_[_0x1126('0x57')](_0x5f3898['name'])&&!_['isNil'](_0x5f3898[_0x1126('0xdb')])&&_0x5f3898[_0x1126('0xdb')]&&!_[_0x1126('0x57')](this[_0x1126('0xdc')][util['format'](_0x1126('0xdd'),_0x5f3898[_0x1126('0x42')])])&&!_['isNil'](this[_0x1126('0xdc')][util['format'](_0x1126('0xdd'),_0x5f3898[_0x1126('0x42')])]['status'])&&(this['trunks'][util[_0x1126('0x8e')]('SIP/%s',_0x5f3898['name'])][_0x1126('0x61')]===_0x1126('0xde')||this[_0x1126('0xdc')][util[_0x1126('0x8e')]('SIP/%s',_0x5f3898['name'])]['status']===_0x1126('0xdf'));};Preview[_0x1126('0xb')]['run']=function(_0xa80a54,_0x3b10e9){var _0x396cef=this;return new BPromise(function(_0x2f049a,_0x17b25d){_0x396cef[_0x1126('0xe0')](_0xa80a54,_0x3b10e9)[_0x1126('0x6f')](function(_0x18238b){_0x2f049a(_[_0x1126('0x5d')](_0x18238b,[_0x1126('0x4b')]));})[_0x1126('0x63')](function(_0x55145f){if(_0x55145f[_0x1126('0xe1')]){rpcDb['unlockContact'](_0xa80a54);}if(_0x55145f[_0x1126('0xdb')]){rpcDb[_0x1126('0xe2')](_0xa80a54);}_0x17b25d(_[_0x1126('0x5d')](_0x55145f,['message']));});});};Preview[_0x1126('0xb')][_0x1126('0xe0')]=function(_0x3d77fe,_0x578c1b){var _0x1562b2=this;return new BPromise(function(_0x206a50,_0x4164a5){var _0xa52533,_0x3dc808;rpcDb['getContactPreview'](_0x3d77fe)['then'](function(_0x31d9e1){if(!_[_0x1126('0x57')](_0x31d9e1[0x0])){_0x3dc808=_0x31d9e1[0x0][_0x1126('0xe3')]?![]:!![];_0xa52533=_0x31d9e1[0x0][_0x1126('0xe3')]?!![]:![];_0xa52533=_0x578c1b?!![]:_0xa52533;}var _0x2cfdd0=_0x1562b2[_0x1126('0xe4')](_0x31d9e1);if(_0x2cfdd0[_0x1126('0xe5')]){rpcDb[_0x1126('0xe6')](_[_0x1126('0x5d')](_0x31d9e1[0x0],[_0x1126('0x5f'),_0x1126('0xe7')]))['then'](function(_0x588f4f){_0x1562b2[_0x1126('0xcb')](_0x588f4f,_0x31d9e1[0x0],_0x578c1b,_0x3dc808,_0xa52533)[_0x1126('0x6f')](function(_0x23313d){_0x206a50(_0x23313d);})['catch'](function(_0x4d29a5){_0x4164a5(_0x4d29a5);});})[_0x1126('0x63')](function(_0x372563){ut[_0x1126('0x4d')]('[Preview][checkIsBlackList]',_0x372563);_0x4164a5(ut[_0x1126('0x4b')](_0x1126('0xe8'),_0x3dc808,_0xa52533));});}else{_0x4164a5(ut['message'](_0x2cfdd0[_0x1126('0x4b')],_0x3dc808,_0xa52533));}})[_0x1126('0x63')](function(_0x32e5d7){ut[_0x1126('0x4d')](_0x1126('0xe9'),_0x32e5d7);_0x4164a5(ut['message'](_0x1126('0xe8'),![],!![]));});});};Preview[_0x1126('0xb')]['validateContact']=function(_0x578f5c){if(_['isNil'](_0x578f5c)||_[_0x1126('0xd0')](_0x578f5c)||!_[_0x1126('0x57')](_0x578f5c[0x0][_0x1126('0xea')])&&_[_0x1126('0x57')](_0x578f5c[0x0][_0x1126('0xea')]['name'])){ut[_0x1126('0x4d')]('[Preview][validateContact][Empty\x20Contact]',_0x578f5c);return{'isValid':![],'message':_0x1126('0xeb')};}var _0x3cb38f=this['campaignsPreview'][_0x578f5c[0x0]['Queue'][_0x1126('0x42')]];_0x3cb38f[_0x1126('0x4b')]='ACTIVE';if(_['isNil'](_0x3cb38f)){ut[_0x1126('0x4d')](_0x1126('0xec'),_0x3cb38f);return{'isValid':![],'message':_0x1126('0xed')};}if(!this[_0x1126('0xda')](_0x3cb38f[_0x1126('0x41')])){ut[_0x1126('0x4d')](_0x1126('0xee'),_0x1126('0xef')+_0x3cb38f[_0x1126('0x42')]+_0x1126('0xf0'));if(!this['isTrunkReachable'](_0x3cb38f['TrunkBackup'])){ut[_0x1126('0x4d')](_0x1126('0xee'),_0x3cb38f[_0x1126('0x42')]+_0x1126('0xf1'));return{'isValid':![],'message':_0x1126('0xf2')};}}if(!ut[_0x1126('0xf3')](_0x3cb38f['dialActive'])){ut['logger'](_0x1126('0xf4'),_0x3cb38f['name']+'\x20Not\x20Active');return{'isValid':![],'message':_0x1126('0xef')+_0x3cb38f[_0x1126('0x42')]+'\x20Not\x20Active'};}return{'isValid':!![],'message':_0x1126('0xf5')};};Preview[_0x1126('0xb')][_0x1126('0xf6')]=function(_0x68d7a0,_0x56b591,_0x2a969c,_0x2ea320){var _0xbe98ae=this;return new BPromise(function(_0x1a5d09,_0x45369f){var _0x287bef=_0x68d7a0[_0x1126('0x90')];var _0x5725ed=_0xbe98ae[_0x1126('0xda')](_0x56b591[_0x1126('0x41')])?util[_0x1126('0x8e')](_0x1126('0xf7'),_0x56b591['Trunk'][_0x1126('0x42')],_[_0x1126('0x57')](_0x56b591['dialPrefix'])?'':_0x56b591[_0x1126('0x30')][_0x1126('0xf8')]()||'',_0x56b591[_0x1126('0xf9')]>0x0?_0x2a969c['Contact'][_0x1126('0xcd')][_0x1126('0xfa')](_0x56b591[_0x1126('0xf9')]):_0x2a969c[_0x1126('0xcc')][_0x1126('0xcd')]):util[_0x1126('0x8e')]('SIP/%s/%s%s',_[_0x1126('0x57')](_0x56b591[_0x1126('0xfb')])?_0x56b591['Trunk'][_0x1126('0x42')]:_0x56b591[_0x1126('0xfb')][_0x1126('0x42')],_[_0x1126('0x57')](_0x56b591[_0x1126('0x30')])?'':_0x56b591[_0x1126('0x30')]['trim']()||'',_0x56b591['dialCutDigit']>0x0?_0x2a969c[_0x1126('0xcc')][_0x1126('0xcd')][_0x1126('0xfa')](_0x56b591[_0x1126('0xf9')]):_0x2a969c[_0x1126('0xcc')][_0x1126('0xcd')]);var _0xbaac37=_0xbe98ae[_0x1126('0xda')](_0x56b591[_0x1126('0x41')])?ut[_0x1126('0xfc')](_0x56b591[_0x1126('0x41')][_0x1126('0x43')],_0x56b591[_0x1126('0x2d')],_0x56b591[_0x1126('0xfd')]>0x0?ut[_0x1126('0xfe')](_0x56b591[_0x1126('0x2e')],_0x56b591[_0x1126('0xfd')]):_0x56b591[_0x1126('0x2e')]):ut[_0x1126('0xfc')](_[_0x1126('0x57')](_0x56b591[_0x1126('0xfb')])?_0x56b591[_0x1126('0x41')][_0x1126('0x43')]:_0x56b591[_0x1126('0xfb')][_0x1126('0x43')],_0x56b591['dialOriginateCallerIdName'],_0x56b591[_0x1126('0xfd')]>0x0?ut['getCallerIdRandom'](_0x56b591[_0x1126('0x2e')],_0x56b591[_0x1126('0xfd')]):_0x56b591[_0x1126('0x2e')]);var _0x4d3695=ut[_0x1126('0xff')](_0x56b591,_0x2a969c,_0x5725ed,_0xbaac37,_0x287bef);_['merge'](_0x68d7a0,ut[_0x1126('0x100')](_0x4d3695));_0x68d7a0[_0x1126('0x76')]=moment()['format'](_0x1126('0x77'));ami[_0x1126('0x60')](ut[_0x1126('0x101')](_0x68d7a0,_0x56b591,_0x4d3695,_0x68d7a0[_0x1126('0xa9')],_0x2ea320))[_0x1126('0x6f')](function(_0x2ca17d){_0x56b591[_0x1126('0x40')]+=0x1;logger[_0x1126('0x58')](_0x1126('0x102'),_0x287bef,'\x20Queue',_0x56b591[_0x1126('0x42')],_0x1126('0x5b'),_0x56b591[_0x1126('0x40')]);_0x1a5d09(_0x2ca17d);})[_0x1126('0x63')](function(_0x4d1c7f){ut['logAgent'](_0x68d7a0,0xe,'OriginateError');rpcDb['createAgentHistory'](_0x68d7a0,_0x1126('0x103'));_0x45369f(_0x4d1c7f);});});};Preview['prototype'][_0x1126('0x1c')]=function(_0x17f74b){if(this[_0x1126('0x11')][_0x17f74b[_0x1126('0x8c')]]){this[_0x1126('0x11')][_0x17f74b[_0x1126('0x8c')]]['channel']=_0x17f74b[_0x1126('0x62')];}};Preview['prototype'][_0x1126('0x15')]=function(_0x2759f2){var _0x176d75=this;var _0x3be51d=this[_0x1126('0x11')][_0x2759f2[_0x1126('0x104')]];if(_0x3be51d){if(_0x3be51d[_0x1126('0xcf')]&&this[_0x1126('0x12')][_0x3be51d[_0x1126('0xcf')]]){ut[_0x1126('0x105')](_0x3be51d,this[_0x1126('0x12')][_0x3be51d['lookAgent']][_0x1126('0x42')],this[_0x1126('0x12')][_0x3be51d[_0x1126('0xcf')]]['id']);}var _0x103101=_[_0x1126('0x106')](_0x3be51d);_0x103101[_0x1126('0x107')]=moment()[_0x1126('0x8e')]('YYYY-MM-DD\x20HH:mm:ss');var _0x54a11c=_0x176d75['campaignsPreview'][_0x3be51d[_0x1126('0x5a')]];if(ut[_0x1126('0x108')](_0x2759f2[_0x1126('0x109')])){if(_0x3be51d['unlockAgent']){rpcDb[_0x1126('0xb9')](_0x3be51d[_0x1126('0xba')]);}if(_0x3be51d['activeContact']){rpcDb['disableContact'](_0x3be51d[_0x1126('0xba')]);}ami[_0x1126('0x21')](_0x1126('0x10a'),ut[_0x1126('0x94')](_0x3be51d,_0x1126('0x10b')));this[_0x1126('0x10c')](_0x103101,_0x54a11c,_0x2759f2);}else{_0x3be51d['starttime']=moment()[_0x1126('0x8e')](_0x1126('0x77'));ut[_0x1126('0xc2')](_0x103101,0x4,_0x1126('0x9c'));rpcDb[_0x1126('0xc5')](_0x103101,_0x1126('0x10d'));}}};Preview[_0x1126('0xb')][_0x1126('0x18')]=function(_0x482dde){var _0x13f600=this;var _0x4215a8=this['actions'][_0x482dde[_0x1126('0x8c')]];var _0x114be3;if(_0x4215a8){_0x114be3=this['campaignsPreview'][_0x4215a8[_0x1126('0x5a')]];logger[_0x1126('0x58')](_0x1126('0x10e'),_0x482dde['linkedid'],_0x1126('0x91'),_0x114be3[_0x1126('0x42')],_0x1126('0x92'),_0x114be3[_0x1126('0x26')]);}if(this[_0x1126('0x11')][_0x482dde[_0x1126('0x8c')]]&&_0x482dde[_0x1126('0x8c')]!==_0x482dde[_0x1126('0x90')]){if(_0x482dde[_0x1126('0x10f')]==='16'&&this[_0x1126('0x11')][_0x482dde[_0x1126('0x8c')]][_0x1126('0x5c')]){this[_0x1126('0x110')](_0x482dde,_0x482dde['linkedid'],_0x482dde[_0x1126('0x10f')]);}else if(this[_0x1126('0x11')][_0x482dde[_0x1126('0x8c')]][_0x1126('0x5c')]){logger['info'](_0x1126('0x111'),_0x482dde[_0x1126('0x8c')],_0x482dde['cause'],_0x1126('0x91'),_0x114be3[_0x1126('0x42')],'pTalking:\x20',_0x114be3[_0x1126('0x26')]);this['callProgressDetectingCustomer'](_0x482dde,_0x482dde[_0x1126('0x8c')],_0x482dde[_0x1126('0x10f')]);}}else if(_0x4215a8&&_['isNil'](_0x4215a8[_0x1126('0x112')])&&_0x114be3[_0x1126('0x113')]&&_0x482dde['linkedid']===_0x482dde['uniqueid']&&_[_0x1126('0x57')](_0x482dde[_0x1126('0xc1')])&&_0x482dde[_0x1126('0x10f')]==='16'&&_0x482dde[_0x1126('0x114')]==='6'&&_[_0x1126('0xbf')](_0x4215a8[_0x1126('0x115')])){if(_0x4215a8[_0x1126('0xa8')]){rpcDb['unlockContact'](_0x4215a8[_0x1126('0xba')]);}if(_0x4215a8[_0x1126('0xa9')]){rpcDb[_0x1126('0xe2')](_0x4215a8[_0x1126('0xba')]);}_0x482dde['reason']='22';this[_0x1126('0x10c')](_0x4215a8,_0x114be3,_0x482dde);}else if(_0x4215a8&&_0x4215a8['transfer']){if(_0x482dde[_0x1126('0x10f')]==='16'&&this['actions'][_0x482dde[_0x1126('0x8c')]][_0x1126('0x5c')]){logger[_0x1126('0x58')](_0x1126('0x116'),_0x482dde[_0x1126('0x8c')],_0x482dde[_0x1126('0x10f')],_0x1126('0x91'),_0x114be3['name'],_0x1126('0x92'),_0x114be3[_0x1126('0x26')]);this[_0x1126('0x110')](_0x482dde,_0x482dde[_0x1126('0x8c')],_0x482dde[_0x1126('0x10f')]);}else if(this['actions'][_0x482dde[_0x1126('0x8c')]][_0x1126('0x5c')]){logger[_0x1126('0x58')]('[syncHangup][talking][cause]',_0x482dde[_0x1126('0x8c')],_0x482dde['cause'],_0x1126('0x91'),_0x114be3['name'],'pTalking:\x20',_0x114be3['pTalking']);this[_0x1126('0x110')](_0x482dde,_0x482dde[_0x1126('0x8c')],_0x482dde[_0x1126('0x10f')]);}}};Preview[_0x1126('0xb')][_0x1126('0x1b')]=function(_0x26e7e5){if(this[_0x1126('0x11')][_0x26e7e5[_0x1126('0x117')]]&&_0x26e7e5['destlinkedid']!==_0x26e7e5['destuniqueid']){this[_0x1126('0x110')](_0x26e7e5,_0x26e7e5[_0x1126('0x117')],_0x26e7e5[_0x1126('0x118')]);}};Preview[_0x1126('0xb')][_0x1126('0x119')]=function(_0x2ccbd0){if(this[_0x1126('0x11')][_0x2ccbd0[_0x1126('0x8c')]]&&_0x2ccbd0['linkedid']!==_0x2ccbd0['uniqueid']&&!this[_0x1126('0x11')][_0x2ccbd0[_0x1126('0x8c')]][_0x1126('0x5c')]){if(_0x2ccbd0[_0x1126('0x10f')]==='1'){this[_0x1126('0x110')](_0x2ccbd0,_0x2ccbd0['linkedid'],_0x2ccbd0[_0x1126('0x10f')]);}}};Preview['prototype'][_0x1126('0x11a')]=function(_0x56d4f4,_0x3cd614,_0x1c8928){if(this[_0x1126('0x11')][_0x56d4f4]){if(_[_0x1126('0x57')](this['actions'][_0x56d4f4]['variables'])){this[_0x1126('0x11')][_0x56d4f4][_0x1126('0x11b')]={};}this[_0x1126('0x11')][_0x56d4f4]['variables'][_0x3cd614]=_0x1c8928;}};Preview[_0x1126('0xb')][_0x1126('0x1e')]=function(_0x5f567f){try{if(!_['isNil'](_0x5f567f)){if(ut[_0x1126('0x11c')](_[_0x1126('0x11d')](_0x5f567f[_0x1126('0x11e')])[0x0])){this[_0x1126('0x11a')](_0x5f567f[_0x1126('0x90')],_[_0x1126('0x11d')](_0x5f567f['variable'])[0x0],_0x5f567f[_0x1126('0x11f')]);}}}catch(_0x89dfab){logger[_0x1126('0x120')]('[syncVarSet][Preview]',util[_0x1126('0x121')](_0x89dfab,{'showHidden':![],'depth':null}));}};Preview[_0x1126('0xb')][_0x1126('0x1f')]=function(_0x4d01f7){if(_0x4d01f7){if(this[_0x1126('0x11')][_0x4d01f7[_0x1126('0x122')]]){this[_0x1126('0x11')][_0x4d01f7['transfertargetlinkedid']]['transfer']=!![];}}};Preview[_0x1126('0xb')][_0x1126('0x123')]=function(_0x299c35){if(_0x299c35){if(this[_0x1126('0x11')][_0x299c35[_0x1126('0x124')]]){this[_0x1126('0x11')][_0x299c35[_0x1126('0x124')]][_0x1126('0x115')]=!![];}}};module[_0x1126('0x125')]=Preview;
\ No newline at end of file
+var _0x326f=['[clearZombieChannels][talking]','Queue','queue','originated:\x20','pTalking:\x20','pTalking','dialAnswer','pick','contactId','UserId','VoiceQueueId','ListId','Action','status','channel','catch','updateOriginated','[clearZombieChannel]','decrementTalkink','loggerError','[Dialer][checkChannel][pTalking][Preview]','[Dialer][checkChannel][Preview]','[action]','clearZombieChannel','getContactRecallMe','agentReadyId','length','getDiff','dialRecallMeTimeout','run','then','logger2','[RecallMe]','YYYY-MM-DD\x20HH:mm:ss','RecallInQueue','dialRecallInQueue','rescheduleContactInQueue','createBody','[HistoryDialRecallInQueue][historyCatch]','createCustomerHistory','createCustomerFinal','[HistoryRecallClose]','IsNotLoggedIn','AGENTS_NOT_LOGGED','isActive','isTrunkReachable','TrunkBackup','TRUNK_IS_NOT_REACHABLE','callProgressDetectingCustomer','outboundNoSuchCallsDay','countglobal','totalGlobal','logCustomer','NoSuchNumber','[callProgressDetectingCustomer][logNoSuch]','[callProgressDetectingCustomer][logNoSuchGlobal]','linkedid','ANSWER','format','responsetime','answertime','uniqueid','custom:agentconnect','custom:agentConnectPreview','buildAcw','custom:agentcomplete','complete','buildObj','Answer','[callProgressDetectingCustomer][logAnswerGlobal]','crateCustomerReportQueue','talktime','info','[syncHangup][talking][decrement]','\x20Queue','outboundBusyCallsDay','countbusyretry','Busy','dialGlobalMaxRetry','cloneAction','Global','[callProgressDetectingCustomer][logBusyGlobal]','[callProgressDetectingCustomer][logBusy]','dialBusyRetryFrequency','activeContact','NOANSWER','countnoanswerretry','NoAnswer','[callProgressDetectingCustomer][logNoAnswerGlobal]','dialNoAnswerMaxRetry','[callProgressDetectingCustomer][logNoAnswer]','rescheduleContact','scheduledAt','dialNoAnswerRetryFrequency','unlockAgent','CONGESTION','countcongestionretry','Congestion','[callProgressDetectingCustomer][logCongestion]','[callProgressDetectingCustomer][logCongestionGlobal]','dialCongestionMaxRetry','CANCEL','AgentReject','[syncHangupRequest][logAgentReject]','unlockContact','disableContact','idContact','[default]','[Dialer][decrementTalkink][no\x20Hangup][Preview]','dialstatus','[callProgressDetectingCustomer][logUnknown]','[callProgressDetectingCustomer][logUnknownGlobal]','[callProgressDetectingCustomer]','[originated][decrement][callProgressDetectingCustomer]','isUndefined','object','reason','logAgent','[callProgressDetectingAgent][logNoSuch]','createAgentHistory','[callProgressDetectingAgent][logBusy]','[callProgressDetectingAgent][logCongestion]','[callProgressDetectingAgent][logAnswerAGI]','[originated][decrement][callProgressDetectingAgent]','Contact','phone','lookAgent','execCall','[Preview][execCall][success]','Queue:\x20','\x20IdHopper:\x20','custom:agentcalled','called','Calling','[Preview][execCall][failure]','[Blacklist][error]','Contact\x20in\x20black\x20List','SIP/%s','reachable','unmonitored','execRun','unlock','getContactPreview','recallme','validateContact','checkIsBlackList','Contact.phone','checkInBlack','[Preview][checkIsBlackList]','Call\x20unsuccessful','[Preview][getContactPreview]','isEmpty','Agent','[Preview][validateContact][Empty\x20Contact]','Empty\x20Contact','ACTIVE','Empty\x20Campaign','campaign\x20Name:\x20','\x20Trunk\x20is\x20not\x20active','[Preview][validateContact][Trunk\x20not\x20work]','[Preview][validateContact][Campaign\x20Active]','\x20Not\x20Active','Is\x20Valid','SIP/%s/%s%s','trim','dialCutDigit','substring','getCallerId','dialOriginateCallerIdName','dialRandomLastDigitCallerIdNumber','callerid','addVariables','merge','toLowerVariables','starttime','variablesAction','OriginateError','[originateFailure][logOriginateFailure]','actionid','logLookAgent','isFailure','response','custom:agentringnoanswer','rejected','callProgressDetectingAgent','[callProgressDetectingAgent][logAnswer]','[syncHangup][talking]','cause','[syncHangup][talking][cause]','statedesc','dialQueueProject','channelstate','transfer','syncDialEnd','destlinkedid','destuniqueid','addVariable','variables','filterKey','keys','variable','value','error','[syncVarSet][Preview]','inspect','syncAttendedTransfer','transfertargetlinkedid','transfererlinkedid','exports','util','uuid','moment','md5','../../../config/logger','preview','actionPreview','../ami','./rpcDb','./action','socket.io-emitter','localhost','prototype','enqueue','tail','finally','sequence','campaignsPreview','trunks','actions','agents','originateresponse','syncOriginateResponse','hangup','syncHangup','bind','hanguprequest','newexten','syncNewExten','varset','syncVarSet','attendedtransfer','blindtransfer','syncBlindTransfer','loopCampaigns','emit','answered','available','sumBillable','sumDuration','talking','total','type','unmanaged','waiting','loggedInDb','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundNoAnswerCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalLowerLimit','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalTotalCalls','message','originated','Trunk','active','Interval','name','stringify','voice:queue:%s','sendMessageOneNotActive','paused','NOT_ACTIVE','logger','\x20is\x20not\x20active','IS_DISACTIVED','[CampaignPreview]\x20Campaign\x20Queue:\x20','\x20is\x20disactive','syncCampaigns','hasOwnProperty','dialMethod','booked','clockClearZombieChannels','clearZombieChannels','outbound','dialActive','setMessage','recallMe','isNil'];(function(_0xbaf307,_0x18a4cc){var _0x834d3b=function(_0x3c88e4){while(--_0x3c88e4){_0xbaf307['push'](_0xbaf307['shift']());}};_0x834d3b(++_0x18a4cc);}(_0x326f,0xd1));var _0xf326=function(_0x4c0494,_0x3bf397){_0x4c0494=_0x4c0494-0x0;var _0x1a0aec=_0x326f[_0x4c0494];return _0x1a0aec;};'use strict';var util=require(_0xf326('0x0'));var _=require('lodash');var BPromise=require('bluebird');var uuid=require(_0xf326('0x1'));var moment=require(_0xf326('0x2'));var md5=require(_0xf326('0x3'));var logger=require(_0xf326('0x4'))(_0xf326('0x5'));var loggerAction=require(_0xf326('0x4'))(_0xf326('0x6'));var ami=require(_0xf326('0x7'));var rpcDb=require(_0xf326('0x8'));var Action=require(_0xf326('0x9'));var ut=require('./util/util');var io=require(_0xf326('0xa'))({'host':_0xf326('0xb'),'port':0x18eb});var Sequence=function(){};Sequence[_0xf326('0xc')][_0xf326('0xd')]=function(_0x515bfa){this['tail']=this['tail']?this[_0xf326('0xe')][_0xf326('0xf')](_0x515bfa):_0x515bfa();};function Preview(_0x163416){this[_0xf326('0x10')]=new Sequence();this[_0xf326('0x11')]=_0x163416['voiceQueues'];this[_0xf326('0x12')]=_0x163416['trunks'];this[_0xf326('0x13')]={};this['agents']=_0x163416[_0xf326('0x14')];this['clockClearZombieChannels']=0x0;ami['on'](_0xf326('0x15'),this[_0xf326('0x16')]['bind'](this));ami['on'](_0xf326('0x17'),this[_0xf326('0x18')][_0xf326('0x19')](this));ami['on'](_0xf326('0x1a'),this['syncHangupRequest'][_0xf326('0x19')](this));ami['on']('dialend',this['syncDialEnd'][_0xf326('0x19')](this));ami['on'](_0xf326('0x1b'),this[_0xf326('0x1c')][_0xf326('0x19')](this));ami['on'](_0xf326('0x1d'),this[_0xf326('0x1e')][_0xf326('0x19')](this));ami['on'](_0xf326('0x1f'),this['syncAttendedTransfer'][_0xf326('0x19')](this));ami['on'](_0xf326('0x20'),this[_0xf326('0x21')][_0xf326('0x19')](this));this[_0xf326('0x22')](this[_0xf326('0x11')]);}function emit(_0x4d3d41,_0x4a5b6c,_0x56ad41){io['to'](_0x4d3d41)[_0xf326('0x23')](_0x4a5b6c,_0x56ad41);}function emitCampaignPreview(_0x289f4b){if(_0x289f4b['type']==='outbound'){var _0x128c68={'id':_0x289f4b['id'],'name':_0x289f4b['name'],'strategy':_0x289f4b['strategy'],'answered':_0x289f4b[_0xf326('0x24')],'available':_0x289f4b[_0xf326('0x25')],'loggedIn':_0x289f4b['loggedIn'],'pTalking':_0x289f4b['pTalking'],'sumBillable':_0x289f4b[_0xf326('0x26')],'sumDuration':_0x289f4b[_0xf326('0x27')],'sumHoldTime':_0x289f4b['sumHoldTime'],'talking':_0x289f4b[_0xf326('0x28')],'total':_0x289f4b[_0xf326('0x29')],'type':_0x289f4b[_0xf326('0x2a')],'unmanaged':_0x289f4b[_0xf326('0x2b')],'waiting':_0x289f4b[_0xf326('0x2c')],'loggedInDb':_0x289f4b[_0xf326('0x2d')],'dialActive':_0x289f4b['dialActive'],'dialMethod':_0x289f4b['dialMethod'],'dialOriginateCallerIdName':_0x289f4b['dialOriginateCallerIdName'],'dialOriginateCallerIdNumber':_0x289f4b[_0xf326('0x2e')],'dialOriginateTimeout':_0x289f4b[_0xf326('0x2f')],'dialPrefix':_0x289f4b[_0xf326('0x30')],'outboundAnswerAgiCallsDay':_0x289f4b[_0xf326('0x31')],'outboundAnswerCallsDay':_0x289f4b[_0xf326('0x32')],'outboundBlacklistCallsDay':_0x289f4b[_0xf326('0x33')],'outboundBusyCallsDay':_0x289f4b['outboundBusyCallsDay'],'outboundCongestionCallsDay':_0x289f4b[_0xf326('0x34')],'outboundDropCallsDayACS':_0x289f4b[_0xf326('0x35')],'outboundDropCallsDayCallersExit':_0x289f4b[_0xf326('0x36')],'outboundDropCallsDayTimeout':_0x289f4b['outboundDropCallsDayTimeout'],'outboundNoAnswerCallsDay':_0x289f4b[_0xf326('0x37')],'outboundNoSuchCallsDay':_0x289f4b['outboundNoSuchCallsDay'],'outboundOriginateFailureCallsDay':_0x289f4b['outboundOriginateFailureCallsDay'],'outboundReCallsDay':_0x289f4b[_0xf326('0x38')],'outboundRejectCallsDay':_0x289f4b[_0xf326('0x39')],'outboundUnknownCallsDay':_0x289f4b[_0xf326('0x3a')],'predictiveIntervalAnsweredCalls':_0x289f4b['predictiveIntervalAnsweredCalls'],'predictiveIntervalAvgHoldtime':_0x289f4b[_0xf326('0x3b')],'predictiveIntervalAvgTalktime':_0x289f4b[_0xf326('0x3c')],'predictiveIntervalDroppedCallsCallersExit':_0x289f4b['predictiveIntervalDroppedCallsCallersExit'],'predictiveIntervalDroppedCallsTimeout':_0x289f4b[_0xf326('0x3d')],'predictiveIntervalErlangCalls':_0x289f4b[_0xf326('0x3e')],'predictiveIntervalErlangCallsDroppedCalls':_0x289f4b[_0xf326('0x3f')],'predictiveIntervalHitRate':_0x289f4b[_0xf326('0x40')],'predictiveIntervalLowerLimit':_0x289f4b[_0xf326('0x41')],'predictiveIntervalMultiplicativeFactor':_0x289f4b[_0xf326('0x42')],'predictiveIntervalPauses':_0x289f4b[_0xf326('0x43')],'predictiveIntervalTotalCalls':_0x289f4b[_0xf326('0x44')],'message':_0x289f4b[_0xf326('0x45')],'originated':_0x289f4b[_0xf326('0x46')]};if(_0x289f4b['Trunk']){_0x128c68[_0xf326('0x47')]={'id':_0x289f4b[_0xf326('0x47')]['id'],'name':_0x289f4b[_0xf326('0x47')]['name'],'active':_0x289f4b[_0xf326('0x47')][_0xf326('0x48')],'callerid':_0x289f4b[_0xf326('0x47')]['callerid']};}if(_0x289f4b['Interval']){_0x128c68[_0xf326('0x49')]={'id':_0x289f4b[_0xf326('0x49')]['id'],'name':_0x289f4b[_0xf326('0x49')][_0xf326('0x4a')]};}var _0x30694f=md5(JSON[_0xf326('0x4b')](_0x128c68));if(_0x289f4b[_0xf326('0x3')]!==_0x30694f){_0x289f4b[_0xf326('0x3')]=_0x30694f;emit(util['format'](_0xf326('0x4c'),_0x128c68[_0xf326('0x4a')]),'voice_queue:save',_0x128c68);}}}function emitVoiceQueueChannelRemove(_0x4083a2){emit(util['format'](_0xf326('0x4c'),_0x4083a2['name']),'voice_queue_channel:remove',_0x4083a2);}function notSendMessagesQueue(_0xadb020){if(_0xadb020['sendMessageOneNotActive']){if(_0xadb020[_0xf326('0x46')]===0x0&&_0xadb020['pTalking']===0x0){_0xadb020[_0xf326('0x4d')]=![];_0xadb020[_0xf326('0x25')]=0x0;_0xadb020[_0xf326('0x4e')]=0x0;_0xadb020['message']=_0xf326('0x4f');ut[_0xf326('0x50')]('[CampaignPreview]\x20Campaign\x20Queue:\x20',_0xadb020[_0xf326('0x4a')]+_0xf326('0x51'));}else{_0xadb020[_0xf326('0x45')]=_0xf326('0x52');ut['logger'](_0xf326('0x53'),_0xadb020[_0xf326('0x4a')]+_0xf326('0x54'));}emitCampaignPreview(_0xadb020);}}Preview[_0xf326('0xc')][_0xf326('0x22')]=function(){var _0x5f02b5=this;setInterval(function(){_0x5f02b5[_0xf326('0x55')]();},0x7cf);};Preview[_0xf326('0xc')]['syncCampaigns']=function(){var _0x4dd361=this[_0xf326('0x11')];this['clockClearZombieChannels']+=0x1;for(var _0x55dfa8 in _0x4dd361){if(_0x4dd361[_0xf326('0x56')](_0x55dfa8)&&(_0x4dd361[_0x55dfa8]['dialMethod']===_0xf326('0x5')||_0x4dd361[_0x55dfa8][_0xf326('0x57')]===_0xf326('0x58'))&&_0x4dd361[_0x55dfa8][_0xf326('0x2a')]==='outbound'){if(this[_0xf326('0x59')]>0x7){this[_0xf326('0x59')]=0x0;this[_0xf326('0x5a')]();}}if(_0x4dd361[_0xf326('0x56')](_0x55dfa8)&&_0x4dd361[_0x55dfa8][_0xf326('0x57')]===_0xf326('0x5')&&_0x4dd361[_0x55dfa8][_0xf326('0x2a')]===_0xf326('0x5b')){if(_0x4dd361[_0x55dfa8][_0xf326('0x5c')]){this[_0xf326('0x5d')](_0x4dd361[_0x55dfa8]);this[_0xf326('0x5e')](_0x4dd361[_0x55dfa8]);}else{notSendMessagesQueue(_0x4dd361[_0x55dfa8]);}}}};Preview[_0xf326('0xc')]['clearZombieChannel']=function(_0x1b6126){var _0x1637dc=this;this[_0xf326('0x10')][_0xf326('0xd')](function(){if(!_[_0xf326('0x5f')](_0x1637dc[_0xf326('0x13')][_0x1b6126])){loggerAction['info'](_0xf326('0x60'),_0x1b6126,_0xf326('0x61'),_0x1637dc['actions'][_0x1b6126][_0xf326('0x62')],_0xf326('0x63'),JSON[_0xf326('0x4b')](_0x1637dc[_0xf326('0x11')][_0x1637dc[_0xf326('0x13')][_0x1b6126]['queue']]['originated']),_0xf326('0x64'),JSON[_0xf326('0x4b')](_0x1637dc['campaignsPreview'][_0x1637dc['actions'][_0x1b6126][_0xf326('0x62')]][_0xf326('0x65')]),JSON[_0xf326('0x4b')](_0x1637dc['actions'][_0x1b6126][_0xf326('0x66')]),JSON[_0xf326('0x4b')](_[_0xf326('0x67')](_0x1637dc[_0xf326('0x13')][_0x1b6126],[_0xf326('0x68'),_0xf326('0x69'),_0xf326('0x6a'),_0xf326('0x6b')])));return ami[_0xf326('0x6c')]({'action':_0xf326('0x6d'),'channel':_0x1637dc[_0xf326('0x13')][_0x1b6126][_0xf326('0x6e')]})[_0xf326('0x6f')](function(_0x395b1e){if(_0x395b1e[_0xf326('0x45')]==='No\x20such\x20channel'){setTimeout(function(){if(_0x1637dc[_0xf326('0x13')][_0x1b6126]){ut[_0xf326('0x70')](_0x1637dc[_0xf326('0x11')][_0x1637dc[_0xf326('0x13')][_0x1b6126]['queue']],_0xf326('0x71'));if(_0x1637dc[_0xf326('0x13')][_0x1b6126][_0xf326('0x66')]===!![]){ut[_0xf326('0x72')](_0x1637dc['campaignsPreview'][_0x1637dc[_0xf326('0x13')][_0x1b6126][_0xf326('0x62')]],_0xf326('0x71'));ut[_0xf326('0x73')](_0xf326('0x74')+_0x1b6126,_0x1637dc['actions'][_0x1b6126]['queue']);}ut[_0xf326('0x73')](_0xf326('0x75')+_0x1b6126,_0x1637dc[_0xf326('0x13')][_0x1b6126]['queue']);delete _0x1637dc[_0xf326('0x13')][_0x1b6126];}},0x2328);}});}});};Preview[_0xf326('0xc')][_0xf326('0x5a')]=function(){var _0x5e3532=this;loggerAction['info'](_0xf326('0x76'),_['size'](this[_0xf326('0x13')]));for(var _0x554277 in this[_0xf326('0x13')]){if(_0x5e3532[_0xf326('0x13')][_0xf326('0x56')](_0x554277)){_0x5e3532[_0xf326('0x77')](_0x554277);}}};Preview[_0xf326('0xc')][_0xf326('0x5e')]=function(_0x7f7ece){var _0x495a16=this;rpcDb[_0xf326('0x78')](_0x7f7ece['id'],ut[_0xf326('0x79')](this[_0xf326('0x14')]))['then'](function(_0x208ba4){if(!_[_0xf326('0x5f')](_0x208ba4)){for(var _0x3b8635=0x0;_0x3b8635<_0x208ba4[_0xf326('0x7a')];_0x3b8635+=0x1){if(ut[_0xf326('0x7b')](_0x208ba4[_0x3b8635]['scheduledat'])<_0x7f7ece[_0xf326('0x7c')]*0x3c){_0x495a16[_0xf326('0x7d')](_0x208ba4[_0x3b8635]['id'])[_0xf326('0x7e')](ut[_0xf326('0x7f')]('[RecallMe]'))[_0xf326('0x6f')](ut[_0xf326('0x7f')](_0xf326('0x80')));}else{var _0x29e52e=new Action(_0x208ba4[_0x3b8635],_0x7f7ece);_0x29e52e['starttime']=moment()['format'](_0xf326('0x81'));_0x7f7ece[_0xf326('0x38')]+=0x1;ut['logCustomer'](_0x29e52e,0x17,_0xf326('0x82'));if(_0x7f7ece[_0xf326('0x83')]){rpcDb[_0xf326('0x84')](ut[_0xf326('0x85')](_0x208ba4[_0x3b8635]));rpcDb['createCustomerHistory'](_0x29e52e,_0xf326('0x86'));}else{ut['logCustomer'](_0x29e52e,0x16,'RecallFailedTimeout');rpcDb[_0xf326('0x87')](_0x29e52e,'[HistoryRecallClose]');rpcDb[_0xf326('0x88')](_0x29e52e,_0xf326('0x89'));}}}}})[_0xf326('0x6f')](ut['logger2']('[getContactRecallMe]'));};Preview[_0xf326('0xc')][_0xf326('0x5d')]=function(_0x33b259){_0x33b259['sendMessageOneNotActive']=!![];if(ut[_0xf326('0x8a')](_0x33b259['loggedIn'])){_0x33b259[_0xf326('0x45')]=_0xf326('0x8b');}else if(!ut[_0xf326('0x8c')](_0x33b259[_0xf326('0x5c')])){_0x33b259[_0xf326('0x45')]=_0xf326('0x4f');}else if(!this[_0xf326('0x8d')](_0x33b259[_0xf326('0x47')])){if(!this[_0xf326('0x8d')](_0x33b259[_0xf326('0x8e')])){_0x33b259[_0xf326('0x45')]=_0xf326('0x8f');}else{_0x33b259[_0xf326('0x45')]='ACTIVE';}}else{_0x33b259[_0xf326('0x45')]='ACTIVE';}emitCampaignPreview(_0x33b259);};Preview[_0xf326('0xc')][_0xf326('0x90')]=function(_0x5e858d,_0x2b770c,_0x5283da){var _0x3255b2=this;var _0xd55246=this[_0xf326('0x13')][_0x2b770c];var _0x2d45c9=this[_0xf326('0x11')][_0xd55246['queue']];var _0x4ec099;if(_0x2d45c9){switch(_0x5283da){case'1':_0x2d45c9[_0xf326('0x91')]+=0x1;_0xd55246[_0xf326('0x92')]=ut[_0xf326('0x93')](_0xd55246);ut[_0xf326('0x94')](_0xd55246,0x0,_0xf326('0x95'));rpcDb['createCustomerHistory'](_0xd55246,_0xf326('0x96'));if(ut[_0xf326('0x93')](_0xd55246)>=_0x2d45c9['dialGlobalMaxRetry']){_0x4ec099=ut['cloneAction'](_0xd55246,0xf,'Global');rpcDb[_0xf326('0x88')](_0x4ec099,_0xf326('0x97'));}else{rpcDb[_0xf326('0x88')](_0xd55246,_0xf326('0x97'));}delete this[_0xf326('0x13')][_0x5e858d[_0xf326('0x98')]];break;case _0xf326('0x99'):var _0x4b9013=moment()[_0xf326('0x9a')](_0xf326('0x81'));_0xd55246[_0xf326('0x9b')]=_0x4b9013;_0xd55246[_0xf326('0x9c')]=_0x4b9013;_0xd55246['dialAnswer']=!![];_0x2d45c9[_0xf326('0x65')]+=0x1;logger['info']('[syncHangup][talking][increment]',_0xd55246[_0xf326('0x9d')],'\x20Queue',_0x2d45c9[_0xf326('0x4a')],_0xf326('0x64'),_0x2d45c9[_0xf326('0x65')]);ami[_0xf326('0x23')](_0xf326('0x9e'),ut['buildObj'](_0xd55246,'connect'));if(_0x2d45c9['acw']){ami[_0xf326('0x23')](_0xf326('0x9f'),ut[_0xf326('0xa0')](_0xd55246));}break;case'16':ami[_0xf326('0x23')](_0xf326('0xa1'),ut['buildObj'](_0xd55246,_0xf326('0xa2')));emitVoiceQueueChannelRemove(ut[_0xf326('0xa3')](_0xd55246,_0xf326('0xa2')));_0x2d45c9['outboundAnswerCallsDay']+=0x1;_0x2d45c9['total']+=0x1;_0x2d45c9[_0xf326('0x24')]+=0x1;ut[_0xf326('0x72')](_0x2d45c9,'[16]');_0xd55246['countglobal']=ut[_0xf326('0x93')](_0xd55246);ut['logCustomer'](_0xd55246,0x4,_0xf326('0xa4'));rpcDb['createCustomerHistory'](_0xd55246,'[callProgressDetectingCustomer][logAnswer]');rpcDb['createCustomerFinal'](_0xd55246,_0xf326('0xa5'));rpcDb[_0xf326('0xa6')](_0xd55246);_0x2d45c9[_0xf326('0x27')]+=_0xd55246['talktime'];_0x2d45c9[_0xf326('0x26')]+=_0xd55246[_0xf326('0xa7')];logger[_0xf326('0xa8')](_0xf326('0xa9'),_0xd55246[_0xf326('0x9d')],_0xf326('0xaa'),_0x2d45c9[_0xf326('0x4a')],_0xf326('0x64'),_0x2d45c9[_0xf326('0x65')]);delete this['actions'][_0x5e858d[_0xf326('0x98')]];break;case'BUSY':_0x2d45c9[_0xf326('0xab')]+=0x1;_0xd55246[_0xf326('0xac')]+=0x1;_0xd55246[_0xf326('0x92')]=ut['totalGlobal'](_0xd55246);ut[_0xf326('0x94')](_0xd55246,0x5,_0xf326('0xad'));rpcDb[_0xf326('0x87')](_0xd55246,'[callProgressDetectingCustomer][logBusy]');if(ut[_0xf326('0x93')](_0xd55246)>=_0x2d45c9[_0xf326('0xae')]){_0x4ec099=ut[_0xf326('0xaf')](_0xd55246,0xf,_0xf326('0xb0'));rpcDb['createCustomerFinal'](_0x4ec099,_0xf326('0xb1'));}else{if(_0xd55246['countbusyretry']>=_0x2d45c9['dialBusyMaxRetry']){rpcDb[_0xf326('0x88')](_0xd55246,_0xf326('0xb2'));}else{rpcDb['rescheduleContact'](ut['scheduledAt'](_0xd55246,'countbusyretry',_0x2d45c9[_0xf326('0xb3')]),_0xd55246['unlockAgent'],_0xd55246[_0xf326('0xb4')]);}}break;case _0xf326('0xb5'):_0x2d45c9[_0xf326('0x37')]+=0x1;_0xd55246[_0xf326('0xb6')]+=0x1;_0xd55246[_0xf326('0x92')]=ut[_0xf326('0x93')](_0xd55246);ut['logCustomer'](_0xd55246,0x3,_0xf326('0xb7'));rpcDb[_0xf326('0x87')](_0xd55246,'[callProgressDetectingCustomer][logNoAnswer]');if(ut['totalGlobal'](_0xd55246)>=_0x2d45c9[_0xf326('0xae')]){_0x4ec099=ut['cloneAction'](_0xd55246,0xf,_0xf326('0xb0'));rpcDb[_0xf326('0x88')](_0x4ec099,_0xf326('0xb8'));}else{if(_0xd55246[_0xf326('0xb6')]>=_0x2d45c9[_0xf326('0xb9')]){rpcDb[_0xf326('0x88')](_0xd55246,_0xf326('0xba'));}else{rpcDb[_0xf326('0xbb')](ut[_0xf326('0xbc')](_0xd55246,'countnoanswerretry',_0x2d45c9[_0xf326('0xbd')]),_0xd55246[_0xf326('0xbe')],_0xd55246['activeContact']);}}break;case _0xf326('0xbf'):_0x2d45c9['outboundCongestionCallsDay']+=0x1;_0xd55246[_0xf326('0xc0')]+=0x1;_0xd55246[_0xf326('0x92')]=ut[_0xf326('0x93')](_0xd55246);ut['logCustomer'](_0xd55246,0x8,_0xf326('0xc1'));rpcDb[_0xf326('0x87')](_0xd55246,_0xf326('0xc2'));if(ut[_0xf326('0x93')](_0xd55246)>=_0x2d45c9[_0xf326('0xae')]){_0x4ec099=ut[_0xf326('0xaf')](_0xd55246,0xf,_0xf326('0xb0'));rpcDb[_0xf326('0x88')](_0x4ec099,_0xf326('0xc3'));}else{if(_0xd55246[_0xf326('0xc0')]>=_0x2d45c9[_0xf326('0xc4')]){rpcDb[_0xf326('0x88')](_0xd55246,_0xf326('0xc2'));}else{rpcDb[_0xf326('0xbb')](ut[_0xf326('0xbc')](_0xd55246,'countcongestionretry',_0x2d45c9[_0xf326('0xb3')]),_0xd55246[_0xf326('0xbe')],_0xd55246['activeContact']);}}break;case _0xf326('0xc5'):_0x2d45c9[_0xf326('0x39')]+=0x1;_0xd55246['countglobal']=ut[_0xf326('0x93')](_0xd55246);ut[_0xf326('0x94')](_0xd55246,0x14,_0xf326('0xc6'));rpcDb[_0xf326('0x87')](_0xd55246,_0xf326('0xc7'));if(_0xd55246[_0xf326('0xbe')]){rpcDb[_0xf326('0xc8')](_0xd55246['idContact']);}if(_0xd55246[_0xf326('0xb4')]){rpcDb[_0xf326('0xc9')](_0xd55246[_0xf326('0xca')]);}break;default:if(_0xd55246[_0xf326('0x66')]){ut[_0xf326('0x72')](_0x2d45c9,_0xf326('0xcb'));ut[_0xf326('0x73')](_0xf326('0xcc')+_0x2d45c9['name'],_0x5e858d);}_0x2d45c9[_0xf326('0x3a')]+=0x1;_0xd55246[_0xf326('0x92')]=ut['totalGlobal'](_0xd55246);ut[_0xf326('0x94')](_0xd55246,0xc,_0x5e858d['cause-txt']||_0x5e858d[_0xf326('0xcd')]);rpcDb[_0xf326('0x87')](_0xd55246,_0xf326('0xce'));if(ut[_0xf326('0x93')](_0xd55246)>=_0x2d45c9[_0xf326('0xae')]){_0x4ec099=ut[_0xf326('0xaf')](_0xd55246,0xf,_0xf326('0xb0'));rpcDb[_0xf326('0x88')](_0x4ec099,_0xf326('0xcf'));}else{rpcDb[_0xf326('0x88')](_0xd55246,_0xf326('0xcf'));}delete this[_0xf326('0x13')][_0x5e858d[_0xf326('0x98')]];}if(!(_0xd55246[_0xf326('0x66')]&&_0x5283da==='16')){ut['updateOriginated'](_0x2d45c9,_0xf326('0xd0'));logger[_0xf326('0xa8')](_0xf326('0xd1'),_0xd55246[_0xf326('0x9d')],_0xf326('0xaa'),_0x2d45c9['name'],_0xf326('0x63'),_0x2d45c9[_0xf326('0x46')]);}if(_0x5283da!==_0xf326('0x99')){delete this[_0xf326('0x13')][_0x5e858d[_0xf326('0x98')]];delete this['actions'][_0x5e858d['destlinkedid']];}}};Preview[_0xf326('0xc')]['callProgressDetectingAgent']=function(_0xedbcf2,_0x143965,_0x29610a){if(_['isUndefined'](_0x143965)&&'object'!==typeof _0x143965){return;}if(_[_0xf326('0xd2')](_0x29610a)&&_0xf326('0xd3')!==typeof _0x29610a){return;}switch(_0x29610a[_0xf326('0xd4')]){case'0':ut[_0xf326('0xd5')](_0xedbcf2,0x0,_0xf326('0x95'));rpcDb['createAgentHistory'](_0xedbcf2,_0xf326('0xd6'));break;case'3':ut[_0xf326('0xd5')](_0xedbcf2,0x3,_0xf326('0xb7'));rpcDb['createAgentHistory'](_0xedbcf2,'[callProgressDetectingAgent][logNoAnswer]');break;case'5':ut['logAgent'](_0xedbcf2,0x5,_0xf326('0xad'));rpcDb[_0xf326('0xd7')](_0xedbcf2,_0xf326('0xd8'));break;case'8':ut[_0xf326('0xd5')](_0xedbcf2,0x8,_0xf326('0xc1'));rpcDb[_0xf326('0xd7')](_0xedbcf2,_0xf326('0xd9'));break;case'22':ut['logAgent'](_0xedbcf2,0x16,'AnswerAGI');rpcDb[_0xf326('0xd7')](_0xedbcf2,_0xf326('0xda'));break;default:ut[_0xf326('0xd5')](_0xedbcf2,0xc,_0x29610a['reason']);rpcDb[_0xf326('0xd7')](_0xedbcf2,_0xf326('0xd9'));}ut[_0xf326('0x70')](_0x143965,'[callProgressDetectingAgent]');logger[_0xf326('0xa8')](_0xf326('0xdb'),_0xedbcf2[_0xf326('0x9d')],_0xf326('0xaa'),_0x143965['name'],'originated:\x20',_0x143965['originated']);delete this[_0xf326('0x13')][_0xedbcf2[_0xf326('0x9d')]];};Preview[_0xf326('0xc')]['checkInBlack']=function(_0xb64659,_0x451769,_0x3fd475,_0x568015,_0x2ce36b){var _0x2c12bb=this;return new BPromise(function(_0xbec94,_0x218553){if(_['isNil'](_0x451769)||_[_0xf326('0x5f')](_0x451769['Contact'])||_[_0xf326('0x5f')](_0x451769[_0xf326('0xdc')][_0xf326('0xdd')])||_[_0xf326('0x5f')](_0x451769['VoiceQueueId'])){_0x218553(ut[_0xf326('0x45')]('Contact\x20is\x20undefined',_0x568015,_0x2ce36b));return;}var _0x499316=uuid['v4']();var _0x1ec34d=_0x2c12bb[_0xf326('0x11')][_0x451769[_0xf326('0x61')][_0xf326('0x4a')]];var _0x5d7e1c=_0x3fd475?_0x2c12bb['agents'][_0x3fd475]['id']:undefined;_0x2c12bb[_0xf326('0x13')][_0x499316]=new Action(_0x451769,_0x1ec34d,_0x499316,_0x3fd475,_0x5d7e1c);var _0x22f894=_0x2c12bb[_0xf326('0x13')][_0x499316];_0x22f894[_0xf326('0xbe')]=_0x568015;_0x22f894['activeContact']=_0x2ce36b;_0x22f894[_0xf326('0xde')]=_0x3fd475;if(_['isEmpty'](_0xb64659)){_0x2c12bb[_0xf326('0xdf')](_0x22f894,_0x1ec34d,_0x451769,_0x3fd475)[_0xf326('0x7e')](function(_0xb072ab){logger['info'](_0xf326('0xe0'),_0xf326('0xe1')+_0x22f894[_0xf326('0x62')]+_0xf326('0xe2')+_0x22f894[_0xf326('0xca')],JSON['stringify'](_0xb072ab));ami[_0xf326('0x23')](_0xf326('0xe3'),ut['buildObj'](_0x22f894,_0xf326('0xe4')));_0xbec94(ut[_0xf326('0x45')](_0xf326('0xe5')));})[_0xf326('0x6f')](function(_0x4e1758){ut['logger'](_0xf326('0xe6'),_0x4e1758);_0x218553(ut[_0xf326('0x45')]('Call\x20failed',_0x568015,_0x2ce36b));});}else{_0x1ec34d[_0xf326('0x33')]+=0x1;ut['logBlacklist'](_0x22f894);rpcDb['createHistory'](_0x22f894,_0xf326('0xe7'));delete _0x2c12bb[_0xf326('0x13')][_0x499316];_0x218553(ut[_0xf326('0x45')](_0xf326('0xe8'),_0x568015,_0x2ce36b));}});};Preview[_0xf326('0xc')][_0xf326('0x8d')]=function(_0xf5440){return!_[_0xf326('0x5f')](_0xf5440)&&!_[_0xf326('0x5f')](_0xf5440['name'])&&!_[_0xf326('0x5f')](_0xf5440[_0xf326('0x48')])&&_0xf5440[_0xf326('0x48')]&&!_[_0xf326('0x5f')](this['trunks'][util[_0xf326('0x9a')](_0xf326('0xe9'),_0xf5440[_0xf326('0x4a')])])&&!_[_0xf326('0x5f')](this[_0xf326('0x12')][util['format'](_0xf326('0xe9'),_0xf5440['name'])][_0xf326('0x6d')])&&(this[_0xf326('0x12')][util[_0xf326('0x9a')](_0xf326('0xe9'),_0xf5440['name'])][_0xf326('0x6d')]===_0xf326('0xea')||this[_0xf326('0x12')][util['format'](_0xf326('0xe9'),_0xf5440[_0xf326('0x4a')])][_0xf326('0x6d')]===_0xf326('0xeb'));};Preview['prototype'][_0xf326('0x7d')]=function(_0x1ee591,_0xbcac19){var _0x455128=this;return new BPromise(function(_0x4ecbcf,_0x310223){_0x455128[_0xf326('0xec')](_0x1ee591,_0xbcac19)[_0xf326('0x7e')](function(_0x48e7ab){_0x4ecbcf(_[_0xf326('0x67')](_0x48e7ab,[_0xf326('0x45')]));})['catch'](function(_0x171c53){if(_0x171c53[_0xf326('0xed')]){rpcDb[_0xf326('0xc8')](_0x1ee591);}if(_0x171c53[_0xf326('0x48')]){rpcDb[_0xf326('0xc9')](_0x1ee591);}_0x310223(_[_0xf326('0x67')](_0x171c53,['message']));});});};Preview['prototype'][_0xf326('0xec')]=function(_0x21ec87,_0x4307d9){var _0x2fa05b=this;return new BPromise(function(_0x2e31b1,_0x287d55){var _0x487230,_0x1cab82;rpcDb[_0xf326('0xee')](_0x21ec87)[_0xf326('0x7e')](function(_0x319483){if(!_[_0xf326('0x5f')](_0x319483[0x0])){_0x1cab82=_0x319483[0x0][_0xf326('0xef')]?![]:!![];_0x487230=_0x319483[0x0][_0xf326('0xef')]?!![]:![];_0x487230=_0x4307d9?!![]:_0x487230;}var _0x478395=_0x2fa05b[_0xf326('0xf0')](_0x319483);if(_0x478395['isValid']){rpcDb[_0xf326('0xf1')](_['pick'](_0x319483[0x0],['VoiceQueueId',_0xf326('0xf2')]))['then'](function(_0x1f37f9){_0x2fa05b[_0xf326('0xf3')](_0x1f37f9,_0x319483[0x0],_0x4307d9,_0x1cab82,_0x487230)[_0xf326('0x7e')](function(_0x7ea54d){_0x2e31b1(_0x7ea54d);})[_0xf326('0x6f')](function(_0x84f9ad){_0x287d55(_0x84f9ad);});})[_0xf326('0x6f')](function(_0x18b3cc){ut[_0xf326('0x50')](_0xf326('0xf4'),_0x18b3cc);_0x287d55(ut[_0xf326('0x45')](_0xf326('0xf5'),_0x1cab82,_0x487230));});}else{_0x287d55(ut['message'](_0x478395[_0xf326('0x45')],_0x1cab82,_0x487230));}})[_0xf326('0x6f')](function(_0x5657){ut[_0xf326('0x50')](_0xf326('0xf6'),_0x5657);_0x287d55(ut[_0xf326('0x45')](_0xf326('0xf5'),![],!![]));});});};Preview['prototype'][_0xf326('0xf0')]=function(_0x15f799){if(_[_0xf326('0x5f')](_0x15f799)||_[_0xf326('0xf7')](_0x15f799)||!_[_0xf326('0x5f')](_0x15f799[0x0][_0xf326('0xf8')])&&_[_0xf326('0x5f')](_0x15f799[0x0]['Agent'][_0xf326('0x4a')])){ut[_0xf326('0x50')](_0xf326('0xf9'),_0x15f799);return{'isValid':![],'message':_0xf326('0xfa')};}var _0x62e352=this[_0xf326('0x11')][_0x15f799[0x0][_0xf326('0x61')][_0xf326('0x4a')]];_0x62e352[_0xf326('0x45')]=_0xf326('0xfb');if(_[_0xf326('0x5f')](_0x62e352)){ut[_0xf326('0x50')]('[Preview][validateContact][Empty\x20Campaign]',_0x62e352);return{'isValid':![],'message':_0xf326('0xfc')};}if(!this[_0xf326('0x8d')](_0x62e352[_0xf326('0x47')])){ut['logger']('[Preview][validateContact][Trunk\x20not\x20work]',_0xf326('0xfd')+_0x62e352[_0xf326('0x4a')]+_0xf326('0xfe'));if(!this[_0xf326('0x8d')](_0x62e352['TrunkBackup'])){ut[_0xf326('0x50')](_0xf326('0xff'),_0x62e352[_0xf326('0x4a')]+'\x20Trunk\x20Backup\x20is\x20not\x20active');return{'isValid':![],'message':'Trunk\x20not\x20work'};}}if(!ut['isActive'](_0x62e352[_0xf326('0x5c')])){ut[_0xf326('0x50')](_0xf326('0x100'),_0x62e352['name']+_0xf326('0x101'));return{'isValid':![],'message':'campaign\x20Name:\x20'+_0x62e352[_0xf326('0x4a')]+'\x20Not\x20Active'};}return{'isValid':!![],'message':_0xf326('0x102')};};Preview[_0xf326('0xc')][_0xf326('0xdf')]=function(_0x178d0c,_0x435692,_0x3dcaf9,_0x1f05a2){var _0x4765ca=this;return new BPromise(function(_0x43971c,_0x21c576){var _0x2714d4=_0x178d0c[_0xf326('0x9d')];var _0x8aea8e=_0x4765ca[_0xf326('0x8d')](_0x435692['Trunk'])?util[_0xf326('0x9a')](_0xf326('0x103'),_0x435692[_0xf326('0x47')]['name'],_['isNil'](_0x435692['dialPrefix'])?'':_0x435692[_0xf326('0x30')][_0xf326('0x104')]()||'',_0x435692[_0xf326('0x105')]>0x0?_0x3dcaf9[_0xf326('0xdc')][_0xf326('0xdd')][_0xf326('0x106')](_0x435692['dialCutDigit']):_0x3dcaf9[_0xf326('0xdc')][_0xf326('0xdd')]):util[_0xf326('0x9a')](_0xf326('0x103'),_[_0xf326('0x5f')](_0x435692['TrunkBackup'])?_0x435692[_0xf326('0x47')][_0xf326('0x4a')]:_0x435692[_0xf326('0x8e')][_0xf326('0x4a')],_[_0xf326('0x5f')](_0x435692['dialPrefix'])?'':_0x435692['dialPrefix'][_0xf326('0x104')]()||'',_0x435692['dialCutDigit']>0x0?_0x3dcaf9['Contact'][_0xf326('0xdd')][_0xf326('0x106')](_0x435692[_0xf326('0x105')]):_0x3dcaf9[_0xf326('0xdc')][_0xf326('0xdd')]);var _0x5aa1ca=_0x4765ca[_0xf326('0x8d')](_0x435692[_0xf326('0x47')])?ut[_0xf326('0x107')](_0x435692[_0xf326('0x47')]['callerid'],_0x435692[_0xf326('0x108')],_0x435692['dialRandomLastDigitCallerIdNumber']>0x0?ut['getCallerIdRandom'](_0x435692['dialOriginateCallerIdNumber'],_0x435692[_0xf326('0x109')]):_0x435692[_0xf326('0x2e')]):ut[_0xf326('0x107')](_[_0xf326('0x5f')](_0x435692[_0xf326('0x8e')])?_0x435692[_0xf326('0x47')][_0xf326('0x10a')]:_0x435692[_0xf326('0x8e')][_0xf326('0x10a')],_0x435692[_0xf326('0x108')],_0x435692[_0xf326('0x109')]>0x0?ut['getCallerIdRandom'](_0x435692[_0xf326('0x2e')],_0x435692[_0xf326('0x109')]):_0x435692[_0xf326('0x2e')]);var _0x6ebef5=ut[_0xf326('0x10b')](_0x435692,_0x3dcaf9,_0x8aea8e,_0x5aa1ca,_0x2714d4);_[_0xf326('0x10c')](_0x178d0c,ut[_0xf326('0x10d')](_0x6ebef5));_0x178d0c[_0xf326('0x10e')]=moment()[_0xf326('0x9a')]('YYYY-MM-DD\x20HH:mm:ss');ami[_0xf326('0x6c')](ut[_0xf326('0x10f')](_0x178d0c,_0x435692,_0x6ebef5,_0x178d0c[_0xf326('0xb4')],_0x1f05a2))['then'](function(_0x4d024a){_0x435692[_0xf326('0x46')]+=0x1;logger[_0xf326('0xa8')]('[originated][increment]',_0x2714d4,'\x20Queue',_0x435692[_0xf326('0x4a')],'originated:\x20',_0x435692[_0xf326('0x46')]);_0x43971c(_0x4d024a);})['catch'](function(_0x18b78e){ut[_0xf326('0xd5')](_0x178d0c,0xe,_0xf326('0x110'));rpcDb[_0xf326('0xd7')](_0x178d0c,_0xf326('0x111'));_0x21c576(_0x18b78e);});});};Preview['prototype'][_0xf326('0x1c')]=function(_0x5331ef){if(this[_0xf326('0x13')][_0x5331ef[_0xf326('0x98')]]){this[_0xf326('0x13')][_0x5331ef[_0xf326('0x98')]][_0xf326('0x6e')]=_0x5331ef['channel'];}};Preview['prototype'][_0xf326('0x16')]=function(_0x5c913c){var _0x53421f=this;var _0x5b97bb=this['actions'][_0x5c913c[_0xf326('0x112')]];if(_0x5b97bb){if(_0x5b97bb[_0xf326('0xde')]&&this[_0xf326('0x14')][_0x5b97bb[_0xf326('0xde')]]){ut[_0xf326('0x113')](_0x5b97bb,this[_0xf326('0x14')][_0x5b97bb[_0xf326('0xde')]][_0xf326('0x4a')],this[_0xf326('0x14')][_0x5b97bb[_0xf326('0xde')]]['id']);}var _0x72c3ed=_['clone'](_0x5b97bb);_0x72c3ed[_0xf326('0x9b')]=moment()[_0xf326('0x9a')](_0xf326('0x81'));var _0x3443e5=_0x53421f[_0xf326('0x11')][_0x5b97bb[_0xf326('0x62')]];if(ut[_0xf326('0x114')](_0x5c913c[_0xf326('0x115')])){if(_0x5b97bb[_0xf326('0xbe')]){rpcDb['unlockContact'](_0x5b97bb[_0xf326('0xca')]);}if(_0x5b97bb['activeContact']){rpcDb[_0xf326('0xc9')](_0x5b97bb['idContact']);}ami['emit'](_0xf326('0x116'),ut['buildObj'](_0x5b97bb,_0xf326('0x117')));this[_0xf326('0x118')](_0x72c3ed,_0x3443e5,_0x5c913c);}else{_0x5b97bb[_0xf326('0x10e')]=moment()[_0xf326('0x9a')]('YYYY-MM-DD\x20HH:mm:ss');ut[_0xf326('0xd5')](_0x72c3ed,0x4,_0xf326('0xa4'));rpcDb[_0xf326('0xd7')](_0x72c3ed,_0xf326('0x119'));}}};Preview['prototype']['syncHangup']=function(_0x24bef0){var _0x42ffcb=this;var _0x2de8bd=this[_0xf326('0x13')][_0x24bef0[_0xf326('0x98')]];var _0x1acd3b;if(_0x2de8bd){_0x1acd3b=this[_0xf326('0x11')][_0x2de8bd[_0xf326('0x62')]];logger[_0xf326('0xa8')](_0xf326('0x11a'),_0x24bef0[_0xf326('0x98')],'\x20Queue',_0x1acd3b[_0xf326('0x4a')],_0xf326('0x64'),_0x1acd3b[_0xf326('0x65')]);}if(this['actions'][_0x24bef0[_0xf326('0x98')]]&&_0x24bef0['linkedid']!==_0x24bef0[_0xf326('0x9d')]){if(_0x24bef0[_0xf326('0x11b')]==='16'&&this['actions'][_0x24bef0[_0xf326('0x98')]][_0xf326('0x66')]){this[_0xf326('0x90')](_0x24bef0,_0x24bef0[_0xf326('0x98')],_0x24bef0['cause']);}else if(this[_0xf326('0x13')][_0x24bef0[_0xf326('0x98')]][_0xf326('0x66')]){logger[_0xf326('0xa8')](_0xf326('0x11c'),_0x24bef0['linkedid'],_0x24bef0['cause'],_0xf326('0xaa'),_0x1acd3b[_0xf326('0x4a')],_0xf326('0x64'),_0x1acd3b[_0xf326('0x65')]);this[_0xf326('0x90')](_0x24bef0,_0x24bef0[_0xf326('0x98')],_0x24bef0[_0xf326('0x11b')]);}}else if(_0x2de8bd&&_[_0xf326('0x5f')](_0x2de8bd[_0xf326('0x11d')])&&_0x1acd3b[_0xf326('0x11e')]&&_0x24bef0['linkedid']===_0x24bef0['uniqueid']&&_[_0xf326('0x5f')](_0x24bef0[_0xf326('0xd4')])&&_0x24bef0[_0xf326('0x11b')]==='16'&&_0x24bef0[_0xf326('0x11f')]==='6'&&_['isUndefined'](_0x2de8bd[_0xf326('0x120')])){if(_0x2de8bd[_0xf326('0xbe')]){rpcDb[_0xf326('0xc8')](_0x2de8bd[_0xf326('0xca')]);}if(_0x2de8bd[_0xf326('0xb4')]){rpcDb[_0xf326('0xc9')](_0x2de8bd['idContact']);}_0x24bef0[_0xf326('0xd4')]='22';this['callProgressDetectingAgent'](_0x2de8bd,_0x1acd3b,_0x24bef0);}else if(_0x2de8bd&&_0x2de8bd['transfer']){if(_0x24bef0[_0xf326('0x11b')]==='16'&&this[_0xf326('0x13')][_0x24bef0[_0xf326('0x98')]][_0xf326('0x66')]){logger[_0xf326('0xa8')]('[syncHangup][talking][transfer]',_0x24bef0[_0xf326('0x98')],_0x24bef0[_0xf326('0x11b')],_0xf326('0xaa'),_0x1acd3b['name'],_0xf326('0x64'),_0x1acd3b[_0xf326('0x65')]);this[_0xf326('0x90')](_0x24bef0,_0x24bef0[_0xf326('0x98')],_0x24bef0['cause']);}else if(this[_0xf326('0x13')][_0x24bef0['linkedid']]['dialAnswer']){logger[_0xf326('0xa8')]('[syncHangup][talking][cause]',_0x24bef0['linkedid'],_0x24bef0[_0xf326('0x11b')],_0xf326('0xaa'),_0x1acd3b[_0xf326('0x4a')],_0xf326('0x64'),_0x1acd3b['pTalking']);this['callProgressDetectingCustomer'](_0x24bef0,_0x24bef0[_0xf326('0x98')],_0x24bef0[_0xf326('0x11b')]);}}};Preview[_0xf326('0xc')][_0xf326('0x121')]=function(_0xb4b8ba){if(this[_0xf326('0x13')][_0xb4b8ba[_0xf326('0x122')]]&&_0xb4b8ba[_0xf326('0x122')]!==_0xb4b8ba[_0xf326('0x123')]){this['callProgressDetectingCustomer'](_0xb4b8ba,_0xb4b8ba[_0xf326('0x122')],_0xb4b8ba[_0xf326('0xcd')]);}};Preview[_0xf326('0xc')]['syncHangupRequest']=function(_0x4fe207){if(this[_0xf326('0x13')][_0x4fe207[_0xf326('0x98')]]&&_0x4fe207[_0xf326('0x98')]!==_0x4fe207[_0xf326('0x9d')]&&!this['actions'][_0x4fe207['linkedid']]['dialAnswer']){if(_0x4fe207[_0xf326('0x11b')]==='1'){this[_0xf326('0x90')](_0x4fe207,_0x4fe207[_0xf326('0x98')],_0x4fe207['cause']);}}};Preview['prototype'][_0xf326('0x124')]=function(_0x15c66f,_0x3b55c9,_0x54f55a){if(this['actions'][_0x15c66f]){if(_['isNil'](this[_0xf326('0x13')][_0x15c66f][_0xf326('0x125')])){this[_0xf326('0x13')][_0x15c66f][_0xf326('0x125')]={};}this[_0xf326('0x13')][_0x15c66f][_0xf326('0x125')][_0x3b55c9]=_0x54f55a;}};Preview[_0xf326('0xc')][_0xf326('0x1e')]=function(_0x479ae6){try{if(!_['isNil'](_0x479ae6)){if(ut[_0xf326('0x126')](_['keys'](_0x479ae6['variable'])[0x0])){this[_0xf326('0x124')](_0x479ae6[_0xf326('0x9d')],_[_0xf326('0x127')](_0x479ae6[_0xf326('0x128')])[0x0],_0x479ae6[_0xf326('0x129')]);}}}catch(_0x1307a4){logger[_0xf326('0x12a')](_0xf326('0x12b'),util[_0xf326('0x12c')](_0x1307a4,{'showHidden':![],'depth':null}));}};Preview[_0xf326('0xc')][_0xf326('0x12d')]=function(_0x12fc15){if(_0x12fc15){if(this['actions'][_0x12fc15[_0xf326('0x12e')]]){this[_0xf326('0x13')][_0x12fc15[_0xf326('0x12e')]][_0xf326('0x120')]=!![];}}};Preview['prototype'][_0xf326('0x21')]=function(_0x27074a){if(_0x27074a){if(this[_0xf326('0x13')][_0x27074a[_0xf326('0x12f')]]){this[_0xf326('0x13')][_0x27074a['transfererlinkedid']][_0xf326('0x120')]=!![];}}};module[_0xf326('0x130')]=Preview;
\ No newline at end of file
index 0e5fa36..ade7fa6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x13c1=['getContactRecallMe','[GetContactRecallMe]\x20','rescheduleContactInQueue','[rescheduleContactInQueue]\x20','util','bluebird','../../../config/logger','lodash','../rpc/cmHopperHistory','../rpc/cmHopperBlack','../rpc/voiceQueueRt','../rpc/voiceQueueReport','createHistory','[createHistory]\x20','resolve','then','moveContactManagedDialer','catch','[moveContactManagedDialer]\x20','checkIsBlackList','getContactPreview','createAgentHistory','createCustomerHistory','createCustomerFinal','rescheduleContact','UserId','active','[countReScheduled]\x20','unlockContact','[unlockContact]\x20','crateCustomerReportQueue','type','uniqueid','calleridnum','queue','queuecallerjoinAt','answertime','queuecallerleaveAt','queuecallercomplete','endtime','connectedlinename','membername','context','from-sip','exten','xcally-motion-preview','holdtime','assigned','lastAssignedTo','queuecallerexitreason','COMPLETED','create','[voiceQueueReport]\x20'];(function(_0x62b5f1,_0x43e8d6){var _0x565c8b=function(_0x5d8fb1){while(--_0x5d8fb1){_0x62b5f1['push'](_0x62b5f1['shift']());}};_0x565c8b(++_0x43e8d6);}(_0x13c1,0x1ac));var _0x113c=function(_0x1f1576,_0x2118b2){_0x1f1576=_0x1f1576-0x0;var _0x5e16b3=_0x13c1[_0x1f1576];return _0x5e16b3;};'use strict';var util=require(_0x113c('0x0'));var BPromise=require(_0x113c('0x1'));var logger=require(_0x113c('0x2'))('preview');var _=require(_0x113c('0x3'));var cmHopper=require('../rpc/cmHopper');var cmHopperFinal=require('../rpc/cmHopperFinal');var cmHopperHistory=require(_0x113c('0x4'));var cmHopperBlack=require(_0x113c('0x5'));var voiceQueueRt=require(_0x113c('0x6'));var agentReportPreview=require('../rpc/agentReportPreview');var voiceQueueReport=require(_0x113c('0x7'));function loggerCatch(_0x92a089){return function(_0x493fde){logger['error'](_0x92a089,util['inspect'](_0x493fde,{'showHidden':![],'depth':null}));};}function create(_0x3efd91){return BPromise['resolve']()['then'](cmHopperHistory[_0x113c('0x8')](_0x3efd91))['catch'](loggerCatch(_0x113c('0x9')));}function createAgent(_0x7c1cdf){return BPromise[_0x113c('0xa')]()[_0x113c('0xb')](agentReportPreview[_0x113c('0x8')](_0x7c1cdf))['catch'](loggerCatch(_0x113c('0x9')));}function moveContact(_0x4cddb9){return BPromise['resolve']()[_0x113c('0xb')](cmHopper[_0x113c('0xc')](_0x4cddb9,!![]))[_0x113c('0xd')](loggerCatch(_0x113c('0xe')));}exports[_0x113c('0xf')]=function(_0x58e0cb){return BPromise[_0x113c('0xa')]()['then'](cmHopperBlack[_0x113c('0xf')](_0x58e0cb))['catch'](loggerCatch('[checkIsBlackList]\x20'));};exports[_0x113c('0x10')]=function(_0x496be2){return BPromise['resolve']()[_0x113c('0xb')](cmHopper[_0x113c('0x10')](_0x496be2))[_0x113c('0xd')](loggerCatch('[getContactPreview]\x20'));};exports[_0x113c('0x8')]=function(_0x5c470c,_0xf8acda){create(_0x5c470c)[_0x113c('0xd')](loggerCatch(_0xf8acda));moveContact(_0x5c470c)[_0x113c('0xd')](loggerCatch(_0xf8acda));};exports[_0x113c('0x11')]=function(_0x52051d,_0x52f08b){createAgent(_0x52051d)[_0x113c('0xd')](loggerCatch(_0x52f08b));};exports[_0x113c('0x12')]=function(_0x52db9a,_0x53f7e5){create(_0x52db9a)[_0x113c('0xd')](loggerCatch(_0x53f7e5));};exports[_0x113c('0x13')]=function(_0x45b979,_0x168a98){moveContact(_0x45b979)['catch'](loggerCatch(_0x168a98));};exports[_0x113c('0x14')]=function(_0x1abdda,_0x7d47d8,_0x52f8af){if(_0x7d47d8){_0x1abdda[_0x113c('0x15')]=null;}if(_0x52f8af){_0x1abdda[_0x113c('0x16')]=![];}return BPromise[_0x113c('0xa')]()['then'](cmHopper[_0x113c('0x14')](_0x1abdda))[_0x113c('0xd')](loggerCatch('[rescheduleContact]\x20'));};exports['countReScheduled']=function(_0x16995b){return BPromise[_0x113c('0xa')]()[_0x113c('0xb')](cmHopper['countReScheduled'](_0x16995b))[_0x113c('0xd')](loggerCatch(_0x113c('0x17')));};exports[_0x113c('0x18')]=function(_0x21ab31){return BPromise['resolve']()[_0x113c('0xb')](cmHopper[_0x113c('0x18')]({'UserId':null},_0x21ab31,0x1))[_0x113c('0xd')](loggerCatch(_0x113c('0x19')));};exports['disableContact']=function(_0x88ac99){return BPromise[_0x113c('0xa')]()['then'](cmHopper[_0x113c('0x18')]({'active':![]},_0x88ac99,0x1))['catch'](loggerCatch('[activeContact]\x20'));};exports[_0x113c('0x1a')]=function(_0xb34557){var _0x13ade2={};_0x13ade2[_0x113c('0x1b')]=_0xb34557['type'];_0x13ade2[_0x113c('0x1c')]=_0xb34557['uniqueid'];_0x13ade2[_0x113c('0x1d')]=_0xb34557[_0x113c('0x1d')];_0x13ade2['calleridname']=_0xb34557['calleridname'];_0x13ade2[_0x113c('0x1e')]=_0xb34557[_0x113c('0x1e')];_0x13ade2[_0x113c('0x1f')]=_0xb34557[_0x113c('0x20')];_0x13ade2[_0x113c('0x21')]=_0xb34557[_0x113c('0x20')];_0x13ade2[_0x113c('0x22')]=0x1;_0x13ade2['queuecallercompleteAt']=_0xb34557[_0x113c('0x23')];_0x13ade2[_0x113c('0x24')]=_0xb34557[_0x113c('0x25')];_0x13ade2[_0x113c('0x26')]=_0x113c('0x27');_0x13ade2[_0x113c('0x28')]=_0x113c('0x29');_0x13ade2[_0x113c('0x2a')]=0x0;_0x13ade2[_0x113c('0x2b')]=0x1;_0x13ade2[_0x113c('0x2c')]=_0xb34557[_0x113c('0x25')];_0x13ade2[_0x113c('0x2d')]=_0x113c('0x2e');return BPromise[_0x113c('0xa')]()[_0x113c('0xb')](voiceQueueReport[_0x113c('0x2f')](_0x13ade2))[_0x113c('0xd')](loggerCatch(_0x113c('0x30')));};exports[_0x113c('0x31')]=function(_0x45112d,_0x28ed21){return BPromise['resolve']()[_0x113c('0xb')](cmHopper['getContactRecallMe'](_0x45112d,_0x28ed21))[_0x113c('0xd')](loggerCatch(_0x113c('0x32')));};exports[_0x113c('0x33')]=function(_0x25398f){return BPromise[_0x113c('0xa')]()['then'](cmHopper['rescheduleContact'](_0x25398f,!![],!![]))[_0x113c('0xd')](loggerCatch(_0x113c('0x34')));};
\ No newline at end of file
+var _0xfd81=['[rescheduleContact]\x20','countReScheduled','unlockContact','[unlockContact]\x20','crateCustomerReportQueue','type','uniqueid','calleridnum','calleridname','queue','answertime','queuecallerleaveAt','endtime','membername','context','exten','xcally-motion-preview','holdtime','assigned','lastAssignedTo','queuecallerexitreason','COMPLETED','create','getContactRecallMe','[GetContactRecallMe]\x20','rescheduleContactInQueue','[rescheduleContactInQueue]\x20','util','bluebird','../../../config/logger','preview','../rpc/cmHopper','../rpc/cmHopperFinal','../rpc/cmHopperHistory','../rpc/voiceQueueRt','../rpc/agentReportPreview','error','createHistory','catch','resolve','[createHistory]\x20','then','moveContactManagedDialer','[moveContactManagedDialer]\x20','checkIsBlackList','createAgentHistory','rescheduleContact','UserId'];(function(_0x1be827,_0x45544a){var _0x2f2a44=function(_0x1a39b8){while(--_0x1a39b8){_0x1be827['push'](_0x1be827['shift']());}};_0x2f2a44(++_0x45544a);}(_0xfd81,0x19b));var _0x1fd8=function(_0x35e4fa,_0x50617c){_0x35e4fa=_0x35e4fa-0x0;var _0x3019fd=_0xfd81[_0x35e4fa];return _0x3019fd;};'use strict';var util=require(_0x1fd8('0x0'));var BPromise=require(_0x1fd8('0x1'));var logger=require(_0x1fd8('0x2'))(_0x1fd8('0x3'));var _=require('lodash');var cmHopper=require(_0x1fd8('0x4'));var cmHopperFinal=require(_0x1fd8('0x5'));var cmHopperHistory=require(_0x1fd8('0x6'));var cmHopperBlack=require('../rpc/cmHopperBlack');var voiceQueueRt=require(_0x1fd8('0x7'));var agentReportPreview=require(_0x1fd8('0x8'));var voiceQueueReport=require('../rpc/voiceQueueReport');function loggerCatch(_0x1537ee){return function(_0x9dae0a){logger[_0x1fd8('0x9')](_0x1537ee,util['inspect'](_0x9dae0a,{'showHidden':![],'depth':null}));};}function create(_0x154806){return BPromise['resolve']()['then'](cmHopperHistory[_0x1fd8('0xa')](_0x154806))[_0x1fd8('0xb')](loggerCatch('[createHistory]\x20'));}function createAgent(_0x4073ac){return BPromise[_0x1fd8('0xc')]()['then'](agentReportPreview[_0x1fd8('0xa')](_0x4073ac))[_0x1fd8('0xb')](loggerCatch(_0x1fd8('0xd')));}function moveContact(_0x56b890){return BPromise['resolve']()[_0x1fd8('0xe')](cmHopper[_0x1fd8('0xf')](_0x56b890,!![]))[_0x1fd8('0xb')](loggerCatch(_0x1fd8('0x10')));}exports[_0x1fd8('0x11')]=function(_0x419213){return BPromise[_0x1fd8('0xc')]()[_0x1fd8('0xe')](cmHopperBlack['checkIsBlackList'](_0x419213))[_0x1fd8('0xb')](loggerCatch('[checkIsBlackList]\x20'));};exports['getContactPreview']=function(_0x544565){return BPromise['resolve']()[_0x1fd8('0xe')](cmHopper['getContactPreview'](_0x544565))['catch'](loggerCatch('[getContactPreview]\x20'));};exports[_0x1fd8('0xa')]=function(_0x25727b,_0x52e6dd){create(_0x25727b)['catch'](loggerCatch(_0x52e6dd));moveContact(_0x25727b)[_0x1fd8('0xb')](loggerCatch(_0x52e6dd));};exports[_0x1fd8('0x12')]=function(_0x36b5ef,_0x24669b){createAgent(_0x36b5ef)[_0x1fd8('0xb')](loggerCatch(_0x24669b));};exports['createCustomerHistory']=function(_0x25e468,_0x5324d3){create(_0x25e468)[_0x1fd8('0xb')](loggerCatch(_0x5324d3));};exports['createCustomerFinal']=function(_0x2d3050,_0x237603){moveContact(_0x2d3050)['catch'](loggerCatch(_0x237603));};exports[_0x1fd8('0x13')]=function(_0x6c5d84,_0x524e4c,_0x1b625c){if(_0x524e4c){_0x6c5d84[_0x1fd8('0x14')]=null;}if(_0x1b625c){_0x6c5d84['active']=![];}return BPromise[_0x1fd8('0xc')]()[_0x1fd8('0xe')](cmHopper[_0x1fd8('0x13')](_0x6c5d84))[_0x1fd8('0xb')](loggerCatch(_0x1fd8('0x15')));};exports[_0x1fd8('0x16')]=function(_0x48f532){return BPromise[_0x1fd8('0xc')]()[_0x1fd8('0xe')](cmHopper[_0x1fd8('0x16')](_0x48f532))[_0x1fd8('0xb')](loggerCatch('[countReScheduled]\x20'));};exports[_0x1fd8('0x17')]=function(_0x55e0d6){return BPromise['resolve']()[_0x1fd8('0xe')](cmHopper[_0x1fd8('0x17')]({'UserId':null},_0x55e0d6,0x1))[_0x1fd8('0xb')](loggerCatch(_0x1fd8('0x18')));};exports['disableContact']=function(_0x38565e){return BPromise[_0x1fd8('0xc')]()[_0x1fd8('0xe')](cmHopper[_0x1fd8('0x17')]({'active':![]},_0x38565e,0x1))[_0x1fd8('0xb')](loggerCatch('[activeContact]\x20'));};exports[_0x1fd8('0x19')]=function(_0x20d913){var _0xa7f917={};_0xa7f917['type']=_0x20d913[_0x1fd8('0x1a')];_0xa7f917[_0x1fd8('0x1b')]=_0x20d913[_0x1fd8('0x1b')];_0xa7f917[_0x1fd8('0x1c')]=_0x20d913[_0x1fd8('0x1c')];_0xa7f917[_0x1fd8('0x1d')]=_0x20d913[_0x1fd8('0x1d')];_0xa7f917[_0x1fd8('0x1e')]=_0x20d913[_0x1fd8('0x1e')];_0xa7f917['queuecallerjoinAt']=_0x20d913[_0x1fd8('0x1f')];_0xa7f917[_0x1fd8('0x20')]=_0x20d913['answertime'];_0xa7f917['queuecallercomplete']=0x1;_0xa7f917['queuecallercompleteAt']=_0x20d913[_0x1fd8('0x21')];_0xa7f917['connectedlinename']=_0x20d913[_0x1fd8('0x22')];_0xa7f917[_0x1fd8('0x23')]='from-sip';_0xa7f917[_0x1fd8('0x24')]=_0x1fd8('0x25');_0xa7f917[_0x1fd8('0x26')]=0x0;_0xa7f917[_0x1fd8('0x27')]=0x1;_0xa7f917[_0x1fd8('0x28')]=_0x20d913[_0x1fd8('0x22')];_0xa7f917[_0x1fd8('0x29')]=_0x1fd8('0x2a');return BPromise[_0x1fd8('0xc')]()[_0x1fd8('0xe')](voiceQueueReport[_0x1fd8('0x2b')](_0xa7f917))[_0x1fd8('0xb')](loggerCatch('[voiceQueueReport]\x20'));};exports[_0x1fd8('0x2c')]=function(_0xd17683,_0x221e81){return BPromise[_0x1fd8('0xc')]()[_0x1fd8('0xe')](cmHopper['getContactRecallMe'](_0xd17683,_0x221e81))[_0x1fd8('0xb')](loggerCatch(_0x1fd8('0x2d')));};exports[_0x1fd8('0x2e')]=function(_0x32d24e){return BPromise[_0x1fd8('0xc')]()[_0x1fd8('0xe')](cmHopper[_0x1fd8('0x13')](_0x32d24e,!![],!![]))[_0x1fd8('0xb')](loggerCatch(_0x1fd8('0x2f')));};
\ No newline at end of file
index af2d02c..26f2e1a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4bd8=['format','\x22\x22\x20<>','isActive','isNil','Queue','name','ContactId','dialer','VoiceQueueId','dialOriginateTimeout','\x22rtTxX%s%s\x22','isEmpty','U(xcally-mixmonitor-context)','dialPreviewUrl','dialQueueProject','\x22agi://%s/square,%s\x22','NONE','dialQueueProject2','monitor_format','_XCALLY_MIXMONITOR_FORMAT','_XCALLY_MIXMONITOR_UNIQUEID','Contact','tags','createdAt','updatedAt','%s%s','XMD-','hasOwnProperty','toLower','updateOriginated','originated','[updateOriginated]\x20object\x20originated\x20is\x20negative','[updateOriginated]\x20is\x20null\x20or\x20undefined','logBlacklist','YYYY-MM-DD\x20HH:mm:ss','state','statedesc','starttime','responsetime','endtime','logAgent','ringtime','logLookAgent','UserId','logCustomer','talktime','answertime','isFailure','Failure','RECALL','calleridname','originate','channelAgent','calleridnum','timeout','countbusyretry','countcongestionretry','countnoanswerretry','cloneAction','Global','scheduledAt','active','scheduledat','minutes','ListId','pTalking','[decrementTalkink]\x20object\x20talking\x20is\x20negative','[decrementTalkink]\x20is\x20null\x20or\x20undefined','buildObj','buildAcw','queue','interface','uniqueid','agentReadyId','not_inuse','status','push','diff','createBody','CampaignId','filterKey','idContact','type','dialAnswer','membername','callback','callbackuniqueid','callbackat','sipcallid','xmd-voicequeueid','xmd-phone','xmd-listid','xmd-dialurl','xmd-dialtimeout','xmd-dialoptions','xmd-dialid','xmd-dialchannel','xmd-contactid','xmd-callerid','xmd-agiafter','xmd-agi','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqosrtt','rtpaudioqosrttbridged','rtpaudioqosjitter','rtpaudioqoslossbridged','bridgepvtcallid','getCallerIdRandom','pow','replace','random','util','lodash','moment','preview','env','127.0.0.1','milliseconds','seconds','loggerCatch','error','inspect','logger2','isUndefined','string','\x22%s\x22\x20<%s>'];(function(_0x6131cd,_0x4c26a1){var _0x47e916=function(_0x1f2bce){while(--_0x1f2bce){_0x6131cd['push'](_0x6131cd['shift']());}};_0x47e916(++_0x4c26a1);}(_0x4bd8,0xf3));var _0x84bd=function(_0x24458f,_0x355c92){_0x24458f=_0x24458f-0x0;var _0x464405=_0x4bd8[_0x24458f];return _0x464405;};'use strict';var util=require(_0x84bd('0x0'));var _=require(_0x84bd('0x1'));var moment=require(_0x84bd('0x2'));var logger=require('../../../../config/logger')(_0x84bd('0x3'));var ipAgi=process[_0x84bd('0x4')]['XCALLY_IP_AGI']||_0x84bd('0x5');function getSeconds(_0x48b8e7,_0x1c8b76){var _0x266357=moment(_0x48b8e7)[_0x84bd('0x6')](0x0);var _0x5e6916=moment(_0x1c8b76)['milliseconds'](0x0);return _0x266357['diff'](_0x5e6916,_0x84bd('0x7'));}exports[_0x84bd('0x8')]=function(_0x5d7368){return function(_0x1f2988){logger[_0x84bd('0x9')](_0x5d7368,util[_0x84bd('0xa')](_0x1f2988,{'showHidden':![],'depth':null}));};};exports['logger']=function(_0x2fd44b,_0x181283){logger['info'](_0x2fd44b,util[_0x84bd('0xa')](_0x181283,{'showHidden':![],'depth':null}));};exports['loggerError']=function(_0x2a7aa6,_0x2628d0){logger[_0x84bd('0x9')](_0x2a7aa6,util[_0x84bd('0xa')](_0x2628d0,{'showHidden':![],'depth':null}));};exports[_0x84bd('0xb')]=function(_0x5aa20b){return function(_0x465902){logger['info'](_0x5aa20b,util[_0x84bd('0xa')](_0x465902,{'showHidden':![],'depth':null}));};};exports['message']=function(_0x27e590,_0x3a916f,_0x4b9245){return{'message':_0x27e590,'unlock':_0x3a916f,'active':_0x4b9245};};exports['getCallerId']=function(_0x5238b1,_0x22f22f,_0x2fc598){if(!_[_0x84bd('0xc')](_0x2fc598)&&_0x84bd('0xd')===typeof _0x2fc598){if(!_[_0x84bd('0xc')](_0x22f22f)&&_0x84bd('0xd')===typeof _0x22f22f){return util['format'](_0x84bd('0xe'),_0x22f22f,_0x2fc598);}return util[_0x84bd('0xf')]('\x22%s\x22\x20<%s>',_0x2fc598,_0x2fc598);}if(!_[_0x84bd('0xc')](_0x5238b1)&&_0x84bd('0xd')===typeof _0x5238b1){return _0x5238b1;}return _0x84bd('0x10');};exports[_0x84bd('0x11')]=function(_0x515f4){if(_[_0x84bd('0x12')](_0x515f4)){return![];}return _0x515f4;};exports['addVariables']=function(_0x325368,_0x3f6702,_0x354273,_0x1cffe3,_0x4d047e){var _0x96111b={'XMD-QUEUE':_0x3f6702['Queue']?_0x3f6702[_0x84bd('0x13')][_0x84bd('0x14')]:'','XMD-CALLERID':_0x1cffe3,'XMD-DIALID':_0x4d047e,'XMD-CONTACTID':_0x3f6702[_0x84bd('0x15')],'XMD-CDRTYPE':_0x84bd('0x16'),'CALLERID(all)':_0x1cffe3,'XMD-VOICEQUEUEID':_0x3f6702[_0x84bd('0x17')],'XMD-DIALCHANNEL':_0x354273,'XMD-DIALTIMEOUT':_0x325368[_0x84bd('0x18')]||0x1e,'XMD-DIALOPTIONS':util['format'](_0x84bd('0x19'),_0x325368['dialQueueProject2']?'g':'',_[_0x84bd('0x1a')](_0x325368['monitor_format'])?'':_0x84bd('0x1b')),'XMD-DIALURL':_0x325368[_0x84bd('0x1c')]||'','XMD-AGI':_0x325368[_0x84bd('0x1d')]?util['format'](_0x84bd('0x1e'),ipAgi,_0x325368[_0x84bd('0x1d')]):_0x84bd('0x1f'),'XMD-AGIAFTER':_0x325368[_0x84bd('0x20')]?util['format'](_0x84bd('0x1e'),ipAgi,_0x325368['dialQueueProject2']):_0x84bd('0x1f')};if(!_[_0x84bd('0x1a')](_0x325368[_0x84bd('0x21')])){_0x96111b[util['format']('%s',_0x84bd('0x22'))]=_0x325368[_0x84bd('0x21')];_0x96111b[util['format']('%s',_0x84bd('0x23'))]=_0x4d047e;}if(_0x3f6702&&_0x3f6702[_0x84bd('0x24')]){for(var _0x1b288f in _0x3f6702[_0x84bd('0x24')]){if(_0x3f6702[_0x84bd('0x24')]['hasOwnProperty'](_0x1b288f)){if(!_[_0x84bd('0x12')](_0x3f6702['Contact'][_0x1b288f])&&_0x1b288f!=='id'&&_0x1b288f!==_0x84bd('0x25')&&_0x1b288f!==_0x84bd('0x26')&&_0x1b288f!==_0x84bd('0x27')){_0x96111b[util[_0x84bd('0xf')](_0x84bd('0x28'),_0x84bd('0x29'),_['toUpper'](_0x1b288f))]=_0x3f6702[_0x84bd('0x24')][_0x1b288f];}}}}return _0x96111b;};exports['toLowerVariables']=function(_0x355734){var _0xd4571={};for(var _0x333bd9 in _0x355734){if(_0x355734[_0x84bd('0x2a')](_0x333bd9)){_0xd4571[util['format']('%s',_[_0x84bd('0x2b')](_0x333bd9))]=_0x355734[_0x333bd9];}}return{'variables':_0xd4571};};exports[_0x84bd('0x2c')]=function(_0x4fc991,_0x599045){if(!_[_0x84bd('0x12')](_0x4fc991)){if(_0x4fc991[_0x84bd('0x2a')](_0x84bd('0x2d'))){if(_0x4fc991[_0x84bd('0x2d')]>0x0){_0x4fc991['originated']-=0x1;}else{logger['error'](_0x84bd('0x2e'),_0x599045);}}}else{logger[_0x84bd('0x9')](_0x84bd('0x2f'),_0x599045);}};exports[_0x84bd('0x30')]=function(_0x16f06b){var _0xab5e2c=moment()[_0x84bd('0xf')](_0x84bd('0x31'));_0x16f06b[_0x84bd('0x32')]=0xd;_0x16f06b[_0x84bd('0x33')]='Blacklist';_0x16f06b[_0x84bd('0x34')]=_0xab5e2c;_0x16f06b[_0x84bd('0x35')]=_0xab5e2c;_0x16f06b[_0x84bd('0x36')]=_0xab5e2c;};exports[_0x84bd('0x37')]=function(_0x50563c,_0x51d0fa,_0x586a28){var _0x17f759=moment()[_0x84bd('0xf')](_0x84bd('0x31'));_0x50563c[_0x84bd('0x32')]=_0x51d0fa;_0x50563c['statedesc']=_0x586a28;_0x50563c['responsetime']=_0x17f759;_0x50563c[_0x84bd('0x38')]=getSeconds(_0x50563c['responsetime'],_0x50563c[_0x84bd('0x34')]);};exports[_0x84bd('0x39')]=function(_0x522cfa,_0x4fe786,_0x45b361){_0x522cfa['membername']=_0x4fe786;_0x522cfa[_0x84bd('0x3a')]=_0x45b361;};exports[_0x84bd('0x3b')]=function(_0x630f6d,_0x354066,_0x52fcf7){var _0x540f4d=moment()[_0x84bd('0xf')](_0x84bd('0x31'));_0x630f6d['state']=_0x354066;_0x630f6d[_0x84bd('0x33')]=_0x52fcf7;_0x630f6d[_0x84bd('0x35')]=_0x630f6d[_0x84bd('0x35')]?_0x630f6d[_0x84bd('0x35')]:_0x540f4d;_0x630f6d[_0x84bd('0x36')]=_0x630f6d[_0x84bd('0x36')]?_0x630f6d[_0x84bd('0x36')]:_0x540f4d;_0x630f6d[_0x84bd('0x38')]=getSeconds(_0x630f6d['responsetime']||0x0,_0x630f6d[_0x84bd('0x34')]||0x0);_0x630f6d[_0x84bd('0x3c')]=_0x630f6d[_0x84bd('0x3d')]?getSeconds(_0x630f6d['endtime'],_0x630f6d['answertime']):0x0;};exports[_0x84bd('0x3e')]=function(_0x5c3fcf){return _0x5c3fcf===_0x84bd('0x3f');};exports['variablesAction']=function(_0x356089,_0x2f3a82,_0x4992d2,_0x4e30f8,_0x7d24dc){var _0xe89f4e=_0x4e30f8?_0x84bd('0x40'):_0x356089[_0x84bd('0x41')];_0xe89f4e=_0x7d24dc?'BOOKED':_0xe89f4e;return{'actionid':_0x356089['uniqueid'],'action':_0x84bd('0x42'),'channel':_0x356089[_0x84bd('0x43')],'callerid':util[_0x84bd('0xf')](_0x84bd('0xe'),_0xe89f4e,_0x356089[_0x84bd('0x44')]),'Exten':'xcally-motion-preview','Context':'from-sip','Priority':'1','variable':_0x4992d2,'timeout':(_0x2f3a82[_0x84bd('0x45')]||0x1e)*0x3e8,'async':!![],'channelid':_0x356089['uniqueid']};};exports['totalGlobal']=function(_0x535bf2){return _0x535bf2[_0x84bd('0x46')]+_0x535bf2[_0x84bd('0x47')]+_0x535bf2[_0x84bd('0x48')];};exports[_0x84bd('0x49')]=function(_0x31a413){var _0x53d0ac=_['clone'](_0x31a413);_0x53d0ac[_0x84bd('0x32')]=0xf;_0x53d0ac[_0x84bd('0x33')]=_0x84bd('0x4a');return _0x53d0ac;};exports[_0x84bd('0x4b')]=function(_0x25ed82,_0x20cbb8,_0x14dc8f){var _0x2c00a9={};_0x2c00a9[_0x20cbb8]=_0x25ed82[_0x20cbb8];_0x2c00a9[_0x84bd('0x4c')]=![];_0x2c00a9[_0x84bd('0x4d')]=moment()['add'](_0x14dc8f,_0x84bd('0x4e'))[_0x84bd('0xf')](_0x84bd('0x31'));_0x2c00a9[_0x84bd('0x15')]=_0x25ed82['ContactId'];_0x2c00a9[_0x84bd('0x4f')]=_0x25ed82[_0x84bd('0x4f')];_0x2c00a9[_0x84bd('0x17')]=_0x25ed82[_0x84bd('0x17')]||undefined;return _0x2c00a9;};exports['decrementTalkink']=function(_0x339b02,_0x51e358){if(!_[_0x84bd('0x12')](_0x339b02)){if(_0x339b02['pTalking']>0x0){_0x339b02[_0x84bd('0x50')]-=0x1;}else{logger[_0x84bd('0x9')](_0x51e358,_0x84bd('0x51'));}}else{logger[_0x84bd('0x9')](_0x51e358,_0x84bd('0x52'));}};exports['IsNotLoggedIn']=function(_0xbdda4b){if(_0xbdda4b<=0x0){return!![];}return![];};exports[_0x84bd('0x53')]=function(_0xda7e04,_0x246e50){_0xda7e04['lastevent']=_0x246e50;_0xda7e04['name']=_0xda7e04['queue'];_0xda7e04['interface']=_0xda7e04[_0x84bd('0x43')];return _0xda7e04;};exports[_0x84bd('0x54')]=function(_0x4f3df0){var _0x4ac451={};_0x4ac451['queue']=_0x4f3df0[_0x84bd('0x55')];_0x4ac451[_0x84bd('0x56')]=_0x4f3df0[_0x84bd('0x43')];_0x4ac451[_0x84bd('0x57')]=_0x4f3df0[_0x84bd('0x57')];return _0x4ac451;};exports[_0x84bd('0x58')]=function(_0x42464f){var _0xff799e=[];for(var _0x11092f in _0x42464f){if(_0x42464f[_0x84bd('0x2a')](_0x11092f)){if(!_[_0x84bd('0x12')](_0x42464f[_0x11092f])&&_0x42464f[_0x11092f][_0x84bd('0x32')]===_0x84bd('0x59')&&_0x42464f[_0x11092f][_0x84bd('0x5a')]==='reachable'){_0xff799e[_0x84bd('0x5b')](_0x42464f[_0x11092f]['id']);}}}return _0xff799e;};exports['getDiff']=function(_0x5ff555){var _0x5dc053=moment()[_0x84bd('0x6')](0x0);var _0x1b9244=moment(_0x5ff555)[_0x84bd('0x6')](0x0);return _0x5dc053[_0x84bd('0x5c')](_0x1b9244,_0x84bd('0x7'));};exports[_0x84bd('0x5d')]=function(_0x1697ce){return{'active':![],'recallme':![],'UserId':null,'ContactId':_0x1697ce['ContactId'],'ListId':_0x1697ce[_0x84bd('0x4f')],'VoiceQueueId':_0x1697ce[_0x84bd('0x17')]||undefined,'CampaignId':_0x1697ce[_0x84bd('0x5e')]||undefined};};exports[_0x84bd('0x5f')]=function(_0xcf2c36){if(_0xcf2c36===_0x84bd('0x57')||_0xcf2c36===_0x84bd('0x60')||_0xcf2c36==='queue'||_0xcf2c36===_0x84bd('0x61')||_0xcf2c36==='campaigntype'||_0xcf2c36===_0x84bd('0x62')||_0xcf2c36===_0x84bd('0x63')||_0xcf2c36===_0x84bd('0x43')||_0xcf2c36===_0x84bd('0x41')||_0xcf2c36==='active'||_0xcf2c36===_0x84bd('0x44')||_0xcf2c36===_0x84bd('0x4d')||_0xcf2c36===_0x84bd('0x46')||_0xcf2c36===_0x84bd('0x47')||_0xcf2c36===_0x84bd('0x48')||_0xcf2c36==='countglobal'||_0xcf2c36===_0x84bd('0x64')||_0xcf2c36===_0x84bd('0x65')||_0xcf2c36===_0x84bd('0x66')||_0xcf2c36==='recallme'||_0xcf2c36==='ContactId'||_0xcf2c36===_0x84bd('0x4f')||_0xcf2c36==='UserId'||_0xcf2c36==='VoiceQueueId'||_0xcf2c36===_0x84bd('0x67')||_0xcf2c36===_0x84bd('0x68')||_0xcf2c36==='xmd-queue'||_0xcf2c36===_0x84bd('0x69')||_0xcf2c36===_0x84bd('0x6a')||_0xcf2c36===_0x84bd('0x6b')||_0xcf2c36===_0x84bd('0x6c')||_0xcf2c36===_0x84bd('0x6d')||_0xcf2c36===_0x84bd('0x6e')||_0xcf2c36===_0x84bd('0x6f')||_0xcf2c36===_0x84bd('0x70')||_0xcf2c36==='xmd-cdrtype'||_0xcf2c36===_0x84bd('0x71')||_0xcf2c36===_0x84bd('0x72')||_0xcf2c36===_0x84bd('0x73')||_0xcf2c36===_0x84bd('0x74')||_0xcf2c36===_0x84bd('0x75')||_0xcf2c36==='rtpaudioqosjitter'||_0xcf2c36===_0x84bd('0x76')||_0xcf2c36===_0x84bd('0x77')||_0xcf2c36==='rtpaudioqoslossbridged'||_0xcf2c36===_0x84bd('0x78')||_0xcf2c36===_0x84bd('0x79')||_0xcf2c36===_0x84bd('0x74')||_0xcf2c36===_0x84bd('0x75')||_0xcf2c36===_0x84bd('0x7a')||_0xcf2c36===_0x84bd('0x76')||_0xcf2c36==='rtpaudioqosloss'||_0xcf2c36===_0x84bd('0x7b')||_0xcf2c36==='rtpaudioqosrtt'||_0xcf2c36===_0x84bd('0x79')||_0xcf2c36==='bridgepeer'||_0xcf2c36===_0x84bd('0x7c')||_0xcf2c36==='state'||_0xcf2c36===_0x84bd('0x33')){return![];}return!![];};exports[_0x84bd('0x7d')]=function(_0x196749,_0x116775){var _0x2ff1a2,_0x2086ed,_0x1ceb3a;if(_0x116775<=0x0){_0x116775=0x1;}_0x2ff1a2=new RegExp('\x5cw{0,'+_0x116775+'}$');_0x2086ed=Math[_0x84bd('0x7e')](0xa,_0x116775-0x1);_0x1ceb3a=Math[_0x84bd('0x7e')](0xa,_0x116775)-0x1;return util[_0x84bd('0xf')]('%s',_[_0x84bd('0x7f')](_0x196749,_0x2ff1a2,_[_0x84bd('0x80')](_0x2086ed,_0x1ceb3a)));};
\ No newline at end of file
+var _0x0242=['xmd-phone','xmd-listid','xmd-dialurl','xmd-dialtimeout','xmd-dialoptions','xmd-contactid','xmd-cdrtype','xmd-callerid','xmd-agiafter','xmd-agi','rtpaudioqos','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','bridgepeer','bridgepvtcallid','getCallerIdRandom','\x5cw{0,','replace','random','util','lodash','moment','../../../../config/logger','preview','env','XCALLY_IP_AGI','milliseconds','diff','loggerCatch','error','info','inspect','message','isUndefined','string','format','\x22%s\x22\x20<%s>','\x22\x22\x20<>','isNil','addVariables','Queue','name','dialer','dialOriginateTimeout','\x22rtTxX%s%s\x22','monitor_format','U(xcally-mixmonitor-context)','dialPreviewUrl','\x22agi://%s/square,%s\x22','dialQueueProject','dialQueueProject2','isEmpty','_XCALLY_MIXMONITOR_FORMAT','_XCALLY_MIXMONITOR_UNIQUEID','Contact','tags','createdAt','updatedAt','%s%s','XMD-','toUpper','hasOwnProperty','toLower','updateOriginated','originated','[updateOriginated]\x20is\x20null\x20or\x20undefined','YYYY-MM-DD\x20HH:mm:ss','state','statedesc','starttime','responsetime','endtime','logLookAgent','membername','logCustomer','ringtime','answertime','isFailure','variablesAction','RECALL','uniqueid','originate','channelAgent','from-sip','timeout','totalGlobal','countbusyretry','countcongestionretry','countnoanswerretry','cloneAction','clone','active','scheduledat','add','minutes','ContactId','ListId','VoiceQueueId','pTalking','[decrementTalkink]\x20object\x20talking\x20is\x20negative','[decrementTalkink]\x20is\x20null\x20or\x20undefined','IsNotLoggedIn','buildObj','lastevent','queue','interface','buildAcw','agentReadyId','status','reachable','getDiff','seconds','createBody','CampaignId','filterKey','campaigntype','dialAnswer','countglobal','callback','callbackat','recallme','UserId','sipcallid','xmd-voicequeueid','xmd-queue'];(function(_0x4e9d3c,_0x1f4b98){var _0x2d0825=function(_0x384676){while(--_0x384676){_0x4e9d3c['push'](_0x4e9d3c['shift']());}};_0x2d0825(++_0x1f4b98);}(_0x0242,0x19e));var _0x2024=function(_0x2ef608,_0x53a7b1){_0x2ef608=_0x2ef608-0x0;var _0x56aa07=_0x0242[_0x2ef608];return _0x56aa07;};'use strict';var util=require(_0x2024('0x0'));var _=require(_0x2024('0x1'));var moment=require(_0x2024('0x2'));var logger=require(_0x2024('0x3'))(_0x2024('0x4'));var ipAgi=process[_0x2024('0x5')][_0x2024('0x6')]||'127.0.0.1';function getSeconds(_0x3d2ebd,_0x1bb7be){var _0x1b49b4=moment(_0x3d2ebd)[_0x2024('0x7')](0x0);var _0x169fdc=moment(_0x1bb7be)['milliseconds'](0x0);return _0x1b49b4[_0x2024('0x8')](_0x169fdc,'seconds');}exports[_0x2024('0x9')]=function(_0x43c1a3){return function(_0x279414){logger[_0x2024('0xa')](_0x43c1a3,util['inspect'](_0x279414,{'showHidden':![],'depth':null}));};};exports['logger']=function(_0x139652,_0x4459d6){logger[_0x2024('0xb')](_0x139652,util[_0x2024('0xc')](_0x4459d6,{'showHidden':![],'depth':null}));};exports['loggerError']=function(_0x4fca13,_0x2e2f75){logger[_0x2024('0xa')](_0x4fca13,util['inspect'](_0x2e2f75,{'showHidden':![],'depth':null}));};exports['logger2']=function(_0x462b28){return function(_0x55663c){logger[_0x2024('0xb')](_0x462b28,util[_0x2024('0xc')](_0x55663c,{'showHidden':![],'depth':null}));};};exports[_0x2024('0xd')]=function(_0x11ba77,_0x1d84f6,_0xeb778d){return{'message':_0x11ba77,'unlock':_0x1d84f6,'active':_0xeb778d};};exports['getCallerId']=function(_0x2ab0ce,_0x5f5c3a,_0x46b2fe){if(!_[_0x2024('0xe')](_0x46b2fe)&&_0x2024('0xf')===typeof _0x46b2fe){if(!_['isUndefined'](_0x5f5c3a)&&_0x2024('0xf')===typeof _0x5f5c3a){return util[_0x2024('0x10')]('\x22%s\x22\x20<%s>',_0x5f5c3a,_0x46b2fe);}return util[_0x2024('0x10')](_0x2024('0x11'),_0x46b2fe,_0x46b2fe);}if(!_[_0x2024('0xe')](_0x2ab0ce)&&_0x2024('0xf')===typeof _0x2ab0ce){return _0x2ab0ce;}return _0x2024('0x12');};exports['isActive']=function(_0x1c374a){if(_[_0x2024('0x13')](_0x1c374a)){return![];}return _0x1c374a;};exports[_0x2024('0x14')]=function(_0x23155f,_0xba9602,_0x22784c,_0x577f3e,_0x186a9e){var _0xd65c88={'XMD-QUEUE':_0xba9602[_0x2024('0x15')]?_0xba9602['Queue'][_0x2024('0x16')]:'','XMD-CALLERID':_0x577f3e,'XMD-DIALID':_0x186a9e,'XMD-CONTACTID':_0xba9602['ContactId'],'XMD-CDRTYPE':_0x2024('0x17'),'CALLERID(all)':_0x577f3e,'XMD-VOICEQUEUEID':_0xba9602['VoiceQueueId'],'XMD-DIALCHANNEL':_0x22784c,'XMD-DIALTIMEOUT':_0x23155f[_0x2024('0x18')]||0x1e,'XMD-DIALOPTIONS':util[_0x2024('0x10')](_0x2024('0x19'),_0x23155f['dialQueueProject2']?'g':'',_['isEmpty'](_0x23155f[_0x2024('0x1a')])?'':_0x2024('0x1b')),'XMD-DIALURL':_0x23155f[_0x2024('0x1c')]||'','XMD-AGI':_0x23155f['dialQueueProject']?util['format'](_0x2024('0x1d'),ipAgi,_0x23155f[_0x2024('0x1e')]):'NONE','XMD-AGIAFTER':_0x23155f[_0x2024('0x1f')]?util[_0x2024('0x10')](_0x2024('0x1d'),ipAgi,_0x23155f[_0x2024('0x1f')]):'NONE'};if(!_[_0x2024('0x20')](_0x23155f[_0x2024('0x1a')])){_0xd65c88[util['format']('%s',_0x2024('0x21'))]=_0x23155f[_0x2024('0x1a')];_0xd65c88[util[_0x2024('0x10')]('%s',_0x2024('0x22'))]=_0x186a9e;}if(_0xba9602&&_0xba9602[_0x2024('0x23')]){for(var _0x50ee71 in _0xba9602[_0x2024('0x23')]){if(_0xba9602[_0x2024('0x23')]['hasOwnProperty'](_0x50ee71)){if(!_[_0x2024('0x13')](_0xba9602[_0x2024('0x23')][_0x50ee71])&&_0x50ee71!=='id'&&_0x50ee71!==_0x2024('0x24')&&_0x50ee71!==_0x2024('0x25')&&_0x50ee71!==_0x2024('0x26')){_0xd65c88[util[_0x2024('0x10')](_0x2024('0x27'),_0x2024('0x28'),_[_0x2024('0x29')](_0x50ee71))]=_0xba9602['Contact'][_0x50ee71];}}}}return _0xd65c88;};exports['toLowerVariables']=function(_0x144910){var _0x1468a1={};for(var _0x10ad7a in _0x144910){if(_0x144910[_0x2024('0x2a')](_0x10ad7a)){_0x1468a1[util[_0x2024('0x10')]('%s',_[_0x2024('0x2b')](_0x10ad7a))]=_0x144910[_0x10ad7a];}}return{'variables':_0x1468a1};};exports[_0x2024('0x2c')]=function(_0x5a0734,_0x3c8356){if(!_[_0x2024('0x13')](_0x5a0734)){if(_0x5a0734[_0x2024('0x2a')](_0x2024('0x2d'))){if(_0x5a0734['originated']>0x0){_0x5a0734[_0x2024('0x2d')]-=0x1;}else{logger[_0x2024('0xa')]('[updateOriginated]\x20object\x20originated\x20is\x20negative',_0x3c8356);}}}else{logger[_0x2024('0xa')](_0x2024('0x2e'),_0x3c8356);}};exports['logBlacklist']=function(_0x3363c9){var _0x4f3635=moment()[_0x2024('0x10')](_0x2024('0x2f'));_0x3363c9[_0x2024('0x30')]=0xd;_0x3363c9[_0x2024('0x31')]='Blacklist';_0x3363c9[_0x2024('0x32')]=_0x4f3635;_0x3363c9[_0x2024('0x33')]=_0x4f3635;_0x3363c9[_0x2024('0x34')]=_0x4f3635;};exports['logAgent']=function(_0x4565e9,_0x1157cb,_0x518a3d){var _0x378f27=moment()['format'](_0x2024('0x2f'));_0x4565e9['state']=_0x1157cb;_0x4565e9[_0x2024('0x31')]=_0x518a3d;_0x4565e9['responsetime']=_0x378f27;_0x4565e9['ringtime']=getSeconds(_0x4565e9[_0x2024('0x33')],_0x4565e9[_0x2024('0x32')]);};exports[_0x2024('0x35')]=function(_0x298ee7,_0x43a1b4,_0x265099){_0x298ee7[_0x2024('0x36')]=_0x43a1b4;_0x298ee7['UserId']=_0x265099;};exports[_0x2024('0x37')]=function(_0x416f62,_0x3835b6,_0x1e9efe){var _0x576b0f=moment()['format'](_0x2024('0x2f'));_0x416f62[_0x2024('0x30')]=_0x3835b6;_0x416f62[_0x2024('0x31')]=_0x1e9efe;_0x416f62['responsetime']=_0x416f62[_0x2024('0x33')]?_0x416f62['responsetime']:_0x576b0f;_0x416f62[_0x2024('0x34')]=_0x416f62['endtime']?_0x416f62['endtime']:_0x576b0f;_0x416f62[_0x2024('0x38')]=getSeconds(_0x416f62['responsetime']||0x0,_0x416f62[_0x2024('0x32')]||0x0);_0x416f62['talktime']=_0x416f62['answertime']?getSeconds(_0x416f62[_0x2024('0x34')],_0x416f62[_0x2024('0x39')]):0x0;};exports[_0x2024('0x3a')]=function(_0x55bc01){return _0x55bc01==='Failure';};exports[_0x2024('0x3b')]=function(_0xf2e27,_0x5e8d85,_0x453f13,_0x5b1abc,_0x143518){var _0x658a53=_0x5b1abc?_0x2024('0x3c'):_0xf2e27['calleridname'];_0x658a53=_0x143518?'BOOKED':_0x658a53;return{'actionid':_0xf2e27[_0x2024('0x3d')],'action':_0x2024('0x3e'),'channel':_0xf2e27[_0x2024('0x3f')],'callerid':util[_0x2024('0x10')](_0x2024('0x11'),_0x658a53,_0xf2e27['calleridnum']),'Exten':'xcally-motion-preview','Context':_0x2024('0x40'),'Priority':'1','variable':_0x453f13,'timeout':(_0x5e8d85[_0x2024('0x41')]||0x1e)*0x3e8,'async':!![],'channelid':_0xf2e27[_0x2024('0x3d')]};};exports[_0x2024('0x42')]=function(_0x318cc9){return _0x318cc9[_0x2024('0x43')]+_0x318cc9[_0x2024('0x44')]+_0x318cc9[_0x2024('0x45')];};exports[_0x2024('0x46')]=function(_0x1908b5){var _0x4629a9=_[_0x2024('0x47')](_0x1908b5);_0x4629a9['state']=0xf;_0x4629a9[_0x2024('0x31')]='Global';return _0x4629a9;};exports['scheduledAt']=function(_0x4a39c1,_0x28781a,_0x1e0a2d){var _0xc1b650={};_0xc1b650[_0x28781a]=_0x4a39c1[_0x28781a];_0xc1b650[_0x2024('0x48')]=![];_0xc1b650[_0x2024('0x49')]=moment()[_0x2024('0x4a')](_0x1e0a2d,_0x2024('0x4b'))[_0x2024('0x10')](_0x2024('0x2f'));_0xc1b650[_0x2024('0x4c')]=_0x4a39c1[_0x2024('0x4c')];_0xc1b650[_0x2024('0x4d')]=_0x4a39c1[_0x2024('0x4d')];_0xc1b650[_0x2024('0x4e')]=_0x4a39c1['VoiceQueueId']||undefined;return _0xc1b650;};exports['decrementTalkink']=function(_0x74c08c,_0xbc8fb4){if(!_[_0x2024('0x13')](_0x74c08c)){if(_0x74c08c[_0x2024('0x4f')]>0x0){_0x74c08c[_0x2024('0x4f')]-=0x1;}else{logger[_0x2024('0xa')](_0xbc8fb4,_0x2024('0x50'));}}else{logger[_0x2024('0xa')](_0xbc8fb4,_0x2024('0x51'));}};exports[_0x2024('0x52')]=function(_0x216aca){if(_0x216aca<=0x0){return!![];}return![];};exports[_0x2024('0x53')]=function(_0x1f420a,_0x561d12){_0x1f420a[_0x2024('0x54')]=_0x561d12;_0x1f420a[_0x2024('0x16')]=_0x1f420a[_0x2024('0x55')];_0x1f420a[_0x2024('0x56')]=_0x1f420a[_0x2024('0x3f')];return _0x1f420a;};exports[_0x2024('0x57')]=function(_0x557bcd){var _0x126f6e={};_0x126f6e[_0x2024('0x55')]=_0x557bcd[_0x2024('0x55')];_0x126f6e[_0x2024('0x56')]=_0x557bcd[_0x2024('0x3f')];_0x126f6e[_0x2024('0x3d')]=_0x557bcd[_0x2024('0x3d')];return _0x126f6e;};exports[_0x2024('0x58')]=function(_0x51835d){var _0x43bce1=[];for(var _0x2948e8 in _0x51835d){if(_0x51835d[_0x2024('0x2a')](_0x2948e8)){if(!_['isNil'](_0x51835d[_0x2948e8])&&_0x51835d[_0x2948e8]['state']==='not_inuse'&&_0x51835d[_0x2948e8][_0x2024('0x59')]===_0x2024('0x5a')){_0x43bce1['push'](_0x51835d[_0x2948e8]['id']);}}}return _0x43bce1;};exports[_0x2024('0x5b')]=function(_0x48f0d6){var _0x408902=moment()['milliseconds'](0x0);var _0x13c5d5=moment(_0x48f0d6)[_0x2024('0x7')](0x0);return _0x408902[_0x2024('0x8')](_0x13c5d5,_0x2024('0x5c'));};exports[_0x2024('0x5d')]=function(_0x4ae670){return{'active':![],'recallme':![],'UserId':null,'ContactId':_0x4ae670[_0x2024('0x4c')],'ListId':_0x4ae670['ListId'],'VoiceQueueId':_0x4ae670[_0x2024('0x4e')]||undefined,'CampaignId':_0x4ae670[_0x2024('0x5e')]||undefined};};exports[_0x2024('0x5f')]=function(_0x528283){if(_0x528283===_0x2024('0x3d')||_0x528283==='idContact'||_0x528283===_0x2024('0x55')||_0x528283==='type'||_0x528283===_0x2024('0x60')||_0x528283===_0x2024('0x61')||_0x528283===_0x2024('0x36')||_0x528283===_0x2024('0x3f')||_0x528283==='calleridname'||_0x528283===_0x2024('0x48')||_0x528283==='calleridnum'||_0x528283===_0x2024('0x49')||_0x528283===_0x2024('0x43')||_0x528283===_0x2024('0x44')||_0x528283===_0x2024('0x45')||_0x528283===_0x2024('0x62')||_0x528283===_0x2024('0x63')||_0x528283==='callbackuniqueid'||_0x528283===_0x2024('0x64')||_0x528283===_0x2024('0x65')||_0x528283===_0x2024('0x4c')||_0x528283===_0x2024('0x4d')||_0x528283===_0x2024('0x66')||_0x528283==='VoiceQueueId'||_0x528283===_0x2024('0x67')||_0x528283===_0x2024('0x68')||_0x528283===_0x2024('0x69')||_0x528283===_0x2024('0x6a')||_0x528283===_0x2024('0x6b')||_0x528283===_0x2024('0x6c')||_0x528283===_0x2024('0x6d')||_0x528283===_0x2024('0x6e')||_0x528283==='xmd-dialid'||_0x528283==='xmd-dialchannel'||_0x528283===_0x2024('0x6f')||_0x528283===_0x2024('0x70')||_0x528283===_0x2024('0x71')||_0x528283===_0x2024('0x72')||_0x528283===_0x2024('0x73')||_0x528283===_0x2024('0x74')||_0x528283==='rtpaudioqosbridged'||_0x528283==='rtpaudioqosjitter'||_0x528283==='rtpaudioqosjitterbridged'||_0x528283===_0x2024('0x75')||_0x528283===_0x2024('0x76')||_0x528283===_0x2024('0x77')||_0x528283===_0x2024('0x78')||_0x528283==='rtpaudioqos'||_0x528283===_0x2024('0x79')||_0x528283===_0x2024('0x7a')||_0x528283===_0x2024('0x7b')||_0x528283===_0x2024('0x75')||_0x528283===_0x2024('0x76')||_0x528283===_0x2024('0x77')||_0x528283===_0x2024('0x78')||_0x528283===_0x2024('0x7c')||_0x528283===_0x2024('0x7d')||_0x528283===_0x2024('0x30')||_0x528283===_0x2024('0x31')){return![];}return!![];};exports[_0x2024('0x7e')]=function(_0x5a7de2,_0x565d7f){var _0x65ce69,_0x22864a,_0x1ca0be;if(_0x565d7f<=0x0){_0x565d7f=0x1;}_0x65ce69=new RegExp(_0x2024('0x7f')+_0x565d7f+'}$');_0x22864a=Math['pow'](0xa,_0x565d7f-0x1);_0x1ca0be=Math['pow'](0xa,_0x565d7f)-0x1;return util[_0x2024('0x10')]('%s',_[_0x2024('0x80')](_0x5a7de2,_0x65ce69,_[_0x2024('0x81')](_0x22864a,_0x1ca0be)));};
\ No newline at end of file
index c563262..abe0cc9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x56e6=['boolean','queuepause','reload','voicequeuechannel','voicechannel','voicequeuechannelhangup','voicequeuechannelredirect','queueadd','string','number'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x56e6,0x6b));var _0x656e=function(_0x24a972,_0x6a481){_0x24a972=_0x24a972-0x0;var _0x4acacc=_0x56e6[_0x24a972];return _0x4acacc;};'use strict';exports[_0x656e('0x0')]={'queue':{'type':_0x656e('0x1'),'required':!![]},'interface':{'type':_0x656e('0x1'),'required':!![]},'membername':{'type':_0x656e('0x1'),'required':!![]},'penalty':{'type':_0x656e('0x2'),'required':![]},'paused':{'type':_0x656e('0x3'),'required':![]}};exports['queueremove']={'queue':{'type':_0x656e('0x1'),'required':!![]},'interface':{'type':_0x656e('0x1'),'required':!![]}};exports[_0x656e('0x4')]={'interface':{'type':_0x656e('0x1'),'required':!![]},'paused':{'type':_0x656e('0x3')},'reason':{'type':_0x656e('0x1'),'required':![]}};exports[_0x656e('0x5')]={'module':{'type':'string','required':![]}};exports[_0x656e('0x6')]={'uniqueid':{'type':_0x656e('0x1'),'required':!![]}};exports[_0x656e('0x7')]={'uniqueid':{'type':_0x656e('0x1'),'required':!![]},'filename':{'type':_0x656e('0x1')},'format':{'type':_0x656e('0x1')},'mixmonitorid':{'type':_0x656e('0x1')}};exports[_0x656e('0x8')]={'uniqueid':{'type':_0x656e('0x1'),'required':!![]}};exports[_0x656e('0x9')]={'uniqueid':{'type':_0x656e('0x1'),'required':!![]},'exten':{'type':_0x656e('0x1'),'required':!![]},'context':{'type':_0x656e('0x1')}};
\ No newline at end of file
+var _0x8a8b=['string','number','queueremove','boolean','voicequeuechannelhangup','voicequeuechannelredirect','queueadd'];(function(_0xde1700,_0x1cf69e){var _0x463a00=function(_0x1e8ff2){while(--_0x1e8ff2){_0xde1700['push'](_0xde1700['shift']());}};_0x463a00(++_0x1cf69e);}(_0x8a8b,0xae));var _0xb8a8=function(_0x5301d4,_0x434bd0){_0x5301d4=_0x5301d4-0x0;var _0x4e7218=_0x8a8b[_0x5301d4];return _0x4e7218;};'use strict';exports[_0xb8a8('0x0')]={'queue':{'type':'string','required':!![]},'interface':{'type':'string','required':!![]},'membername':{'type':_0xb8a8('0x1'),'required':!![]},'penalty':{'type':_0xb8a8('0x2'),'required':![]},'paused':{'type':'boolean','required':![]}};exports[_0xb8a8('0x3')]={'queue':{'type':'string','required':!![]},'interface':{'type':_0xb8a8('0x1'),'required':!![]}};exports['queuepause']={'interface':{'type':_0xb8a8('0x1'),'required':!![]},'paused':{'type':_0xb8a8('0x4')},'reason':{'type':_0xb8a8('0x1'),'required':![]}};exports['reload']={'module':{'type':_0xb8a8('0x1'),'required':![]}};exports['voicequeuechannel']={'uniqueid':{'type':_0xb8a8('0x1'),'required':!![]}};exports['voicechannel']={'uniqueid':{'type':_0xb8a8('0x1'),'required':!![]},'filename':{'type':_0xb8a8('0x1')},'format':{'type':_0xb8a8('0x1')},'mixmonitorid':{'type':'string'}};exports[_0xb8a8('0x5')]={'uniqueid':{'type':_0xb8a8('0x1'),'required':!![]}};exports[_0xb8a8('0x6')]={'uniqueid':{'type':_0xb8a8('0x1'),'required':!![]},'exten':{'type':_0xb8a8('0x1'),'required':!![]},'context':{'type':_0xb8a8('0x1')}};
\ No newline at end of file
index 4ca9d57..80a7f79 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe81c=['zendeskAccounts','initSalesforceAccounts','initFreshdeskAccounts','initZohoAccounts','deskAccounts','initSugarcrmAccounts','initVtigerAccounts','initVoiceQueueHopperHistory','merge','initVoiceQueueReports','groupBy','uniqueid','queue','queuecallerexit','unmanaged','diff','queuecallercompleteAt','queuecallerabandonAt','queuecallerexitAt','queuecallerjoinAt','queuecallercomplete','queuecallerleaveAt','seconds','outbound','duration','disposition','ANSWERED','billableseconds','campaigns','initVoiceExtensions','initCampaignHopperHistory','initFaxAccounts','exports','bluebird','lodash','../model/agent','../model/telephone','../model/voiceQueue','../model/trigger','../model/template','../model/campaign','../model/voiceExtension','../model/zendeskAccount','../model/salesforceAccount','../model/freshdeskAccount','../model/sugarcrmAccount','../model/zohoAccount','../model/deskAccount','../model/faxAccount','agents','telephones','trunks','voiceQueues','voiceExtensions','channels','outboundChannels','timers','salesforceAccounts','sugarcrmAccounts','freshdeskAccounts','zohoAccounts','vtigerAccounts','faxAccounts','hasOwnProperty','format','SIP/%s','name','total','answered','sumHoldTime','sumDuration','sumBillable','isEmpty','ivrTotalCallsDays','ivrAnswerCallsDay','outboundAnswerAgiCallsDay','outboundNoAnswerCallsDay','outboundCongestionCallsDay','outboundNoSuchCallsDay','outboundDropCallsDayTimeout','outboundOriginateFailureCallsDay','outboundRejectCallsDay','outboundAnswerCallsDay','queueStatusComplete','prototype','initAgents','length','isUndefined','mergeFromDatabase','initTelephones','initTrunks','initVoiceQueues','initTriggers','triggers','initTemplates','templates'];(function(_0x270b02,_0x14282f){var _0x196c9a=function(_0x50cfde){while(--_0x50cfde){_0x270b02['push'](_0x270b02['shift']());}};_0x196c9a(++_0x14282f);}(_0xe81c,0x141));var _0xce81=function(_0x173113,_0x316a7c){_0x173113=_0x173113-0x0;var _0x3bea89=_0xe81c[_0x173113];return _0x3bea89;};'use strict';var BPromise=require(_0xce81('0x0'));var util=require('util');var _=require(_0xce81('0x1'));var moment=require('moment');var Agent=require(_0xce81('0x2'));var Telephone=require(_0xce81('0x3'));var Trunk=require('../model/trunk');var VoiceQueue=require(_0xce81('0x4'));var Trigger=require(_0xce81('0x5'));var Template=require(_0xce81('0x6'));var Campaign=require(_0xce81('0x7'));var VoiceExtension=require(_0xce81('0x8'));var ZendeskAccount=require(_0xce81('0x9'));var SalesforceAccount=require(_0xce81('0xa'));var FreshdeskAccount=require(_0xce81('0xb'));var SugarcrmAccount=require(_0xce81('0xc'));var ZohoAccount=require(_0xce81('0xd'));var DeskAccount=require(_0xce81('0xe'));var VtigerAccount=require('../model/vtigerAccount');var FaxAccount=require(_0xce81('0xf'));var Realtime=function(){this[_0xce81('0x10')]={};this[_0xce81('0x11')]={};this[_0xce81('0x12')]={};this[_0xce81('0x13')]={};this['triggers']={};this['campaigns']={};this['templates']={};this['outbound']={'total':0x0,'answered':0x0,'sumHoldTime':0x0,'sumDuration':0x0,'sumBillable':0x0};this[_0xce81('0x14')]={};this[_0xce81('0x15')]={};this['queueChannels']={};this[_0xce81('0x16')]={};this[_0xce81('0x17')]={};this['zendeskAccounts']={};this[_0xce81('0x18')]={};this[_0xce81('0x19')]={};this[_0xce81('0x1a')]={};this[_0xce81('0x1b')]={};this['deskAccounts']={};this[_0xce81('0x1c')]={};this[_0xce81('0x1d')]={};};function freeIsNotKey(_0x1ea51f,_0x29cf95,_0x24faec){var _0x377314=_['mapKeys'](_0x1ea51f,function(_0xeeb770,_0x393c47){return _0xeeb770[_0x24faec];});for(var _0x3d1ed9 in _0x29cf95){if(_0x29cf95[_0xce81('0x1e')](_0x3d1ed9)){if(!_0x377314[_0x3d1ed9]){delete _0x29cf95[_0x3d1ed9];}}}}function freeIsNotKeySip(_0x63ea0d,_0x4e7df1){var _0x74723e=_['mapKeys'](_0x63ea0d,function(_0x573706,_0x3d9dec){return util[_0xce81('0x1f')](_0xce81('0x20'),_0x573706[_0xce81('0x21')]);});for(var _0x442409 in _0x4e7df1){if(_0x4e7df1[_0xce81('0x1e')](_0x442409)){if(!_0x74723e[_0x442409]){delete _0x4e7df1[_0x442409];}}}}function clearVoiceCallReports(_0x327098){_0x327098[_0xce81('0x22')]=0x0;_0x327098[_0xce81('0x23')]=0x0;_0x327098[_0xce81('0x24')]=0x0;_0x327098[_0xce81('0x25')]=0x0;_0x327098[_0xce81('0x26')]=0x0;}function clearCampaigns(_0x94b882){if(!_[_0xce81('0x27')](_0x94b882)){for(var _0x465392 in _0x94b882){if(_0x94b882[_0xce81('0x1e')](_0x465392)){_0x94b882[_0x465392][_0xce81('0x28')]=0x0;_0x94b882[_0x465392][_0xce81('0x29')]=0x0;}}}}function clearVoiceQueues(_0x1f134d){if(!_[_0xce81('0x27')](_0x1f134d)){for(var _0x393dff in _0x1f134d){if(_0x1f134d['hasOwnProperty'](_0x393dff)){_0x1f134d[_0x393dff]['total']=0x0;_0x1f134d[_0x393dff][_0xce81('0x23')]=0x0;_0x1f134d[_0x393dff]['unmanaged']=0x0;_0x1f134d[_0x393dff][_0xce81('0x24')]=0x0;_0x1f134d[_0x393dff][_0xce81('0x25')]=0x0;_0x1f134d[_0x393dff][_0xce81('0x26')]=0x0;_0x1f134d[_0x393dff][_0xce81('0x2a')]=0x0;_0x1f134d[_0x393dff][_0xce81('0x2b')]=0x0;_0x1f134d[_0x393dff]['outboundBusyCallsDay']=0x0;_0x1f134d[_0x393dff][_0xce81('0x2c')]=0x0;_0x1f134d[_0x393dff][_0xce81('0x2d')]=0x0;_0x1f134d[_0x393dff]['outboundUnknownCallsDay']=0x0;_0x1f134d[_0x393dff][_0xce81('0x2e')]=0x0;_0x1f134d[_0x393dff]['outboundDropCallsDayCallersExit']=0x0;_0x1f134d[_0x393dff]['outboundBlacklistCallsDay']=0x0;_0x1f134d[_0x393dff][_0xce81('0x2f')]=0x0;_0x1f134d[_0x393dff][_0xce81('0x30')]=0x0;_0x1f134d[_0x393dff]['outboundReCallsDay']=0x0;_0x1f134d[_0x393dff]['outboundAnswerAgiCallsDay']=0x0;_0x1f134d[_0x393dff][_0xce81('0x31')]=0x0;_0x1f134d[_0x393dff][_0xce81('0x32')]=!![];}}}}Realtime[_0xce81('0x33')]['mergeFromDatabase']=function(_0x5c76d6,_0x44cd7f){for(var _0x45593f in _0x44cd7f){if(_0x5c76d6[_0xce81('0x1e')](_0x45593f)){_0x5c76d6[_0x45593f]=_0x44cd7f[_0x45593f];}}};Realtime[_0xce81('0x33')][_0xce81('0x34')]=function(){var _0x4bdf88=this;return function(_0x5e082a){if(_0x5e082a){freeIsNotKeySip(_0x5e082a,_0x4bdf88[_0xce81('0x10')]);for(var _0x3d42e9=0x0,_0x3d9c41={},_0x346c45={};_0x3d42e9<_0x5e082a[_0xce81('0x35')];_0x3d42e9+=0x1){_0x3d9c41=_0x5e082a[_0x3d42e9];if(_[_0xce81('0x36')](_0x4bdf88['agents'][util[_0xce81('0x1f')](_0xce81('0x20'),_0x3d9c41[_0xce81('0x21')])])){_0x4bdf88[_0xce81('0x10')][util[_0xce81('0x1f')]('SIP/%s',_0x3d9c41[_0xce81('0x21')])]=new Agent(_0x3d9c41);}else{_0x4bdf88[_0xce81('0x37')](_0x4bdf88[_0xce81('0x10')][util[_0xce81('0x1f')]('SIP/%s',_0x3d9c41[_0xce81('0x21')])],_0x3d9c41);}}}return _0x4bdf88[_0xce81('0x10')];};};Realtime[_0xce81('0x33')][_0xce81('0x38')]=function(){var _0x235ed1=this;return function(_0x54e82f){if(_0x54e82f){freeIsNotKeySip(_0x54e82f,_0x235ed1['telephones']);for(var _0x363ac6=0x0,_0x5f20d3={},_0x42f138={};_0x363ac6<_0x54e82f[_0xce81('0x35')];_0x363ac6+=0x1){_0x5f20d3=_0x54e82f[_0x363ac6];if(_[_0xce81('0x36')](_0x235ed1[_0xce81('0x11')][util['format'](_0xce81('0x20'),_0x5f20d3[_0xce81('0x21')])])){_0x235ed1[_0xce81('0x11')][util[_0xce81('0x1f')]('SIP/%s',_0x5f20d3['name'])]=new Telephone(_0x5f20d3);}else{_0x235ed1[_0xce81('0x37')](_0x235ed1[_0xce81('0x11')][util[_0xce81('0x1f')](_0xce81('0x20'),_0x5f20d3[_0xce81('0x21')])],_0x5f20d3);}}}return _0x235ed1[_0xce81('0x11')];};};Realtime[_0xce81('0x33')][_0xce81('0x39')]=function(){var _0x26a21a=this;return function(_0x24d683){if(_0x24d683){freeIsNotKeySip(_0x24d683,_0x26a21a[_0xce81('0x12')]);for(var _0x5da89c=0x0,_0x229ad2={},_0xfb2c55={};_0x5da89c<_0x24d683[_0xce81('0x35')];_0x5da89c+=0x1){_0x229ad2=_0x24d683[_0x5da89c];if(_[_0xce81('0x36')](_0x26a21a[_0xce81('0x12')][util[_0xce81('0x1f')](_0xce81('0x20'),_0x229ad2[_0xce81('0x21')])])){_0x26a21a[_0xce81('0x12')][util[_0xce81('0x1f')](_0xce81('0x20'),_0x229ad2[_0xce81('0x21')])]=new Trunk(_0x229ad2);}else{_0x26a21a['mergeFromDatabase'](_0x26a21a[_0xce81('0x12')][util[_0xce81('0x1f')](_0xce81('0x20'),_0x229ad2[_0xce81('0x21')])],_0x229ad2);}}}return _0x26a21a[_0xce81('0x12')];};};Realtime['prototype'][_0xce81('0x3a')]=function(){var _0x477b82=this;return function(_0x50750a){if(_0x50750a){freeIsNotKey(_0x50750a,_0x477b82[_0xce81('0x13')],_0xce81('0x21'));for(var _0x57bb9d=0x0,_0x369b34={},_0x5b56ba={};_0x57bb9d<_0x50750a['length'];_0x57bb9d+=0x1){_0x369b34=_0x50750a[_0x57bb9d];if(_[_0xce81('0x36')](_0x477b82[_0xce81('0x13')][_0x369b34['name']])){_0x477b82[_0xce81('0x13')][_0x369b34[_0xce81('0x21')]]=new VoiceQueue(_0x369b34);}else{_0x477b82[_0xce81('0x37')](_0x477b82['voiceQueues'][_0x369b34[_0xce81('0x21')]],_0x369b34);}}}return _0x477b82[_0xce81('0x13')];};};Realtime[_0xce81('0x33')][_0xce81('0x3b')]=function(){var _0x584926=this;return function(_0x13a160){if(_0x13a160){freeIsNotKey(_0x13a160,_0x584926[_0xce81('0x3c')],'id');for(var _0x2259eb=0x0,_0x3d276e={},_0x3f7bb6={};_0x2259eb<_0x13a160[_0xce81('0x35')];_0x2259eb+=0x1){_0x3d276e=_0x13a160[_0x2259eb];if(_[_0xce81('0x36')](_0x584926[_0xce81('0x3c')][_0x3d276e['id']])){_0x584926['triggers'][_0x3d276e['id']]=new Trigger(_0x3d276e);}else{_0x584926[_0xce81('0x37')](_0x584926[_0xce81('0x3c')][_0x3d276e['id']],_0x3d276e);}}}return _0x584926[_0xce81('0x3c')];};};Realtime[_0xce81('0x33')][_0xce81('0x3d')]=function(){var _0x51aa4f=this;return function(_0x1f890c){if(_0x1f890c){freeIsNotKey(_0x1f890c,_0x51aa4f['templates'],'id');for(var _0x58ccb7=0x0,_0x521c24={},_0x17ff77={};_0x58ccb7<_0x1f890c[_0xce81('0x35')];_0x58ccb7+=0x1){_0x521c24=_0x1f890c[_0x58ccb7];if(_[_0xce81('0x36')](_0x51aa4f['templates'][_0x521c24['id']])){_0x51aa4f[_0xce81('0x3e')][_0x521c24['id']]=new Template(_0x521c24);}else{_0x51aa4f['mergeFromDatabase'](_0x51aa4f[_0xce81('0x3e')][_0x521c24['id']],_0x521c24);}}}return _0x51aa4f[_0xce81('0x3e')];};};Realtime[_0xce81('0x33')]['initZendeskAccounts']=function(){var _0x5ceaca=this;return function(_0x77954e){if(_0x77954e){freeIsNotKey(_0x77954e,_0x5ceaca[_0xce81('0x3f')],'id');for(var _0x21b6f4=0x0,_0x556c6f={},_0x779be6={};_0x21b6f4<_0x77954e[_0xce81('0x35')];_0x21b6f4+=0x1){_0x556c6f=_0x77954e[_0x21b6f4];if(_[_0xce81('0x36')](_0x5ceaca['zendeskAccounts'][_0x556c6f['id']])){_0x5ceaca[_0xce81('0x3f')][_0x556c6f['id']]=new ZendeskAccount(_0x556c6f);}else{_0x5ceaca[_0xce81('0x37')](_0x5ceaca[_0xce81('0x3f')][_0x556c6f['id']],_0x556c6f);}}}return _0x5ceaca['zendeskAccounts'];};};Realtime[_0xce81('0x33')][_0xce81('0x40')]=function(){var _0x1b9d14=this;return function(_0x34f1ad){if(_0x34f1ad){freeIsNotKey(_0x34f1ad,_0x1b9d14[_0xce81('0x18')],'id');for(var _0x1a2f5c=0x0,_0x29d78b={},_0x30c515={};_0x1a2f5c<_0x34f1ad[_0xce81('0x35')];_0x1a2f5c+=0x1){_0x29d78b=_0x34f1ad[_0x1a2f5c];if(_['isUndefined'](_0x1b9d14[_0xce81('0x18')][_0x29d78b['id']])){_0x1b9d14['salesforceAccounts'][_0x29d78b['id']]=new SalesforceAccount(_0x29d78b);}else{_0x1b9d14['mergeFromDatabase'](_0x1b9d14[_0xce81('0x18')][_0x29d78b['id']],_0x29d78b);}}}return _0x1b9d14['salesforceAccounts'];};};Realtime['prototype'][_0xce81('0x41')]=function(){var _0x4763c3=this;return function(_0xde29db){if(_0xde29db){freeIsNotKey(_0xde29db,_0x4763c3['freshdeskAccounts'],'id');for(var _0x2ef9ba=0x0,_0x287ac1={},_0x4f6efe={};_0x2ef9ba<_0xde29db[_0xce81('0x35')];_0x2ef9ba+=0x1){_0x287ac1=_0xde29db[_0x2ef9ba];if(_['isUndefined'](_0x4763c3['freshdeskAccounts'][_0x287ac1['id']])){_0x4763c3[_0xce81('0x1a')][_0x287ac1['id']]=new FreshdeskAccount(_0x287ac1);}else{_0x4763c3[_0xce81('0x37')](_0x4763c3[_0xce81('0x1a')][_0x287ac1['id']],_0x287ac1);}}}return _0x4763c3['freshdeskAccounts'];};};Realtime[_0xce81('0x33')][_0xce81('0x42')]=function(){var _0x95ee74=this;return function(_0xd08db0){if(_0xd08db0){freeIsNotKey(_0xd08db0,_0x95ee74[_0xce81('0x1b')],'id');for(var _0x4a83b7=0x0,_0x20908e={},_0x4720be={};_0x4a83b7<_0xd08db0['length'];_0x4a83b7+=0x1){_0x20908e=_0xd08db0[_0x4a83b7];if(_[_0xce81('0x36')](_0x95ee74['zohoAccounts'][_0x20908e['id']])){_0x95ee74[_0xce81('0x1b')][_0x20908e['id']]=new ZohoAccount(_0x20908e);}else{_0x95ee74[_0xce81('0x37')](_0x95ee74[_0xce81('0x1b')][_0x20908e['id']],_0x20908e);}}}return _0x95ee74[_0xce81('0x1b')];};};Realtime[_0xce81('0x33')]['initDeskAccounts']=function(){var _0x136045=this;return function(_0x45e064){if(_0x45e064){freeIsNotKey(_0x45e064,_0x136045['deskAccounts'],'id');for(var _0x1bee66=0x0,_0x192ced={},_0x234ed8={};_0x1bee66<_0x45e064[_0xce81('0x35')];_0x1bee66+=0x1){_0x192ced=_0x45e064[_0x1bee66];if(_['isUndefined'](_0x136045[_0xce81('0x43')][_0x192ced['id']])){_0x136045['deskAccounts'][_0x192ced['id']]=new DeskAccount(_0x192ced);}else{_0x136045[_0xce81('0x37')](_0x136045[_0xce81('0x43')][_0x192ced['id']],_0x192ced);}}}return _0x136045['deskAccounts'];};};Realtime[_0xce81('0x33')][_0xce81('0x44')]=function(){var _0x191800=this;return function(_0x33df02){if(_0x33df02){freeIsNotKey(_0x33df02,_0x191800[_0xce81('0x19')],'id');for(var _0x3ab5bf=0x0,_0x3247a5={},_0x2828b0={};_0x3ab5bf<_0x33df02['length'];_0x3ab5bf+=0x1){_0x3247a5=_0x33df02[_0x3ab5bf];if(_[_0xce81('0x36')](_0x191800[_0xce81('0x19')][_0x3247a5['id']])){_0x191800['sugarcrmAccounts'][_0x3247a5['id']]=new SugarcrmAccount(_0x3247a5);}else{_0x191800['mergeFromDatabase'](_0x191800['sugarcrmAccounts'][_0x3247a5['id']],_0x3247a5);}}}return _0x191800['sugarcrmAccounts'];};};Realtime['prototype'][_0xce81('0x45')]=function(){var _0x82fe3b=this;return function(_0x512511){if(_0x512511){freeIsNotKey(_0x512511,_0x82fe3b[_0xce81('0x1c')],'id');for(var _0x3ed524=0x0,_0x427a77={},_0x2a16cc={};_0x3ed524<_0x512511[_0xce81('0x35')];_0x3ed524+=0x1){_0x427a77=_0x512511[_0x3ed524];if(_[_0xce81('0x36')](_0x82fe3b[_0xce81('0x1c')][_0x427a77['id']])){_0x82fe3b[_0xce81('0x1c')][_0x427a77['id']]=new VtigerAccount(_0x427a77);}else{_0x82fe3b[_0xce81('0x37')](_0x82fe3b[_0xce81('0x1c')][_0x427a77['id']],_0x427a77);}}}return _0x82fe3b[_0xce81('0x1c')];};};Realtime[_0xce81('0x33')][_0xce81('0x46')]=function(){var _0x243ece=this;return function(_0x2b2cc3){for(var _0x61c9c=0x0;_0x61c9c<_0x2b2cc3[_0xce81('0x35')];_0x61c9c+=0x1){_[_0xce81('0x47')](_0x243ece[_0xce81('0x13')][_0x2b2cc3[_0x61c9c][_0xce81('0x21')]],_0x2b2cc3[_0x61c9c]);}return _0x243ece[_0xce81('0x13')];};};Realtime[_0xce81('0x33')][_0xce81('0x48')]=function(){var _0x378dfa=this;return function(_0x52847d){clearVoiceQueues(_0x378dfa[_0xce81('0x13')]);if(_0x52847d){_0x52847d=_[_0xce81('0x49')](_0x52847d,_0xce81('0x4a'));for(var _0x40e4ec in _0x52847d){if(_0x52847d[_0xce81('0x1e')](_0x40e4ec)){var _0x10752={};for(var _0x2aa70d=0x0;_0x2aa70d<_0x52847d[_0x40e4ec][_0xce81('0x35')];_0x2aa70d+=0x1){var _0xa73d9e=_0x52847d[_0x40e4ec][_0x2aa70d][_0xce81('0x4b')];if(_0x378dfa[_0xce81('0x13')][_0xa73d9e]){if(_0x52847d[_0x40e4ec][_0x2aa70d][_0xce81('0x4c')]){_0x378dfa[_0xce81('0x13')][_0xa73d9e][_0xce81('0x4d')]+=0x1;}_0x378dfa['voiceQueues'][_0xa73d9e][_0xce81('0x24')]+=moment(_0x52847d[_0x40e4ec][_0x2aa70d]['queuecallerleaveAt'])[_0xce81('0x4e')](moment(_0x52847d[_0x40e4ec][_0x2aa70d]['queuecallerjoinAt']),'seconds')||0x0;if(_0x2aa70d===_0x52847d[_0x40e4ec]['length']-0x1){_0x378dfa['voiceQueues'][_0xa73d9e][_0xce81('0x25')]+=moment(_0x52847d[_0x40e4ec][_0x2aa70d][_0xce81('0x4f')]||_0x52847d[_0x40e4ec][_0x2aa70d][_0xce81('0x50')]||_0x52847d[_0x40e4ec][_0x2aa70d][_0xce81('0x51')])['diff'](moment(_0x52847d[_0x40e4ec][_0x2aa70d][_0xce81('0x52')]),'seconds')||0x0;_0x378dfa[_0xce81('0x13')][_0xa73d9e][_0xce81('0x22')]+=0x1;if(_0x52847d[_0x40e4ec][_0x2aa70d][_0xce81('0x53')]){_0x378dfa['voiceQueues'][_0xa73d9e]['answered']+=0x1;_0x378dfa[_0xce81('0x13')][_0xa73d9e][_0xce81('0x26')]+=moment(_0x52847d[_0x40e4ec][_0x2aa70d][_0xce81('0x4f')])[_0xce81('0x4e')](moment(_0x52847d[_0x40e4ec][_0x2aa70d][_0xce81('0x54')]),_0xce81('0x55'))||0x0;}}else{_0x378dfa[_0xce81('0x13')][_0xa73d9e][_0xce81('0x25')]+=_0x378dfa['voiceQueues'][_0xa73d9e]['sumHoldTime'];}}}}}}return _0x378dfa[_0xce81('0x13')];};};Realtime['prototype']['initVoiceCallReports']=function(){var _0x26d8b5=this;return function(_0x1ec79a){clearVoiceCallReports(_0x26d8b5[_0xce81('0x56')]);if(_0x1ec79a){for(var _0x3d976a=0x0;_0x3d976a<_0x1ec79a[_0xce81('0x35')];_0x3d976a+=0x1){_0x26d8b5[_0xce81('0x56')]['total']+=0x1;_0x26d8b5[_0xce81('0x56')]['sumDuration']+=_0x1ec79a[_0x3d976a][_0xce81('0x57')];if(_0x1ec79a[_0x3d976a][_0xce81('0x58')]===_0xce81('0x59')){_0x26d8b5['outbound'][_0xce81('0x23')]+=0x1;_0x26d8b5[_0xce81('0x56')]['sumHoldTime']+=_0x1ec79a[_0x3d976a]['duration']-_0x1ec79a[_0x3d976a]['billableseconds'];_0x26d8b5[_0xce81('0x56')]['sumBillable']+=_0x1ec79a[_0x3d976a][_0xce81('0x5a')];}}}return _0x26d8b5[_0xce81('0x56')];};};Realtime[_0xce81('0x33')]['initCampaigns']=function(){var _0x258857=this;return function(_0x9c17e){if(_0x9c17e){freeIsNotKey(_0x9c17e,_0x258857[_0xce81('0x5b')],_0xce81('0x21'));for(var _0x4a06fe=0x0,_0x120d20={};_0x4a06fe<_0x9c17e[_0xce81('0x35')];_0x4a06fe+=0x1){_0x120d20=_0x9c17e[_0x4a06fe];if(_[_0xce81('0x36')](_0x258857['campaigns'][_0x120d20[_0xce81('0x21')]])){_0x258857['campaigns'][_0x120d20[_0xce81('0x21')]]=new Campaign(_0x120d20);}else{_0x258857[_0xce81('0x37')](_0x258857[_0xce81('0x5b')][_0x120d20[_0xce81('0x21')]],_0x120d20);}}}return _0x258857[_0xce81('0x5b')];};};Realtime[_0xce81('0x33')][_0xce81('0x5c')]=function(){var _0x3d539b=this;return function(_0x5e47f0){if(_0x5e47f0){freeIsNotKey(_0x5e47f0,_0x3d539b[_0xce81('0x14')],'id');for(var _0xc02a51=0x0,_0x123d1a={};_0xc02a51<_0x5e47f0[_0xce81('0x35')];_0xc02a51+=0x1){_0x123d1a=_0x5e47f0[_0xc02a51];if(_[_0xce81('0x36')](_0x3d539b[_0xce81('0x14')][_0x123d1a['id']])){_0x3d539b['voiceExtensions'][_0x123d1a['id']]=new VoiceExtension(_0x123d1a);}else{_0x3d539b[_0xce81('0x37')](_0x3d539b[_0xce81('0x14')][_0x123d1a['id']],_0x123d1a);}}}return _0x3d539b[_0xce81('0x14')];};};Realtime[_0xce81('0x33')][_0xce81('0x5d')]=function(){var _0x1829b1=this;return function(_0x4cba91){clearCampaigns(_0x1829b1[_0xce81('0x5b')]);for(var _0x594bce=0x0;_0x594bce<_0x4cba91['length'];_0x594bce+=0x1){_['merge'](_0x1829b1[_0xce81('0x5b')][_0x4cba91[_0x594bce][_0xce81('0x21')]],_0x4cba91[_0x594bce]);}return _0x1829b1[_0xce81('0x5b')];};};Realtime['prototype'][_0xce81('0x5e')]=function(){var _0x52d8fe=this;return function(_0x7ca8a2){if(_0x7ca8a2){freeIsNotKey(_0x7ca8a2,_0x52d8fe[_0xce81('0x1d')],'id');for(var _0x5b8ca1=0x0,_0x4f6694={},_0x42695a={};_0x5b8ca1<_0x7ca8a2[_0xce81('0x35')];_0x5b8ca1+=0x1){_0x4f6694=_0x7ca8a2[_0x5b8ca1];if(_[_0xce81('0x36')](_0x52d8fe[_0xce81('0x1d')][_0x4f6694['id']])){_0x52d8fe['faxAccounts'][_0x4f6694['id']]=new FaxAccount(_0x4f6694);}else{_0x52d8fe[_0xce81('0x37')](_0x52d8fe[_0xce81('0x1d')][_0x4f6694['id']],_0x4f6694);}}}return _0x52d8fe[_0xce81('0x1d')];};};module[_0xce81('0x5f')]=Realtime;
\ No newline at end of file
+var _0x9e7c=['trunks','initZendeskAccounts','zendeskAccounts','initSalesforceAccounts','initDeskAccounts','deskAccounts','initSugarcrmAccounts','initVtigerAccounts','vtigerAccounts','initVoiceQueueHopperHistory','merge','initVoiceQueueReports','uniqueid','queue','unmanaged','queuecallerleaveAt','diff','queuecallerjoinAt','seconds','queuecallerexitAt','queuecallercomplete','queuecallercompleteAt','initVoiceCallReports','outbound','duration','disposition','billableseconds','initCampaigns','initVoiceExtensions','initCampaignHopperHistory','bluebird','util','lodash','moment','../model/agent','../model/trunk','../model/voiceQueue','../model/trigger','../model/voiceExtension','../model/zendeskAccount','../model/freshdeskAccount','../model/sugarcrmAccount','../model/deskAccount','../model/vtigerAccount','../model/faxAccount','agents','telephones','voiceQueues','triggers','campaigns','templates','voiceExtensions','channels','queueChannels','salesforceAccounts','sugarcrmAccounts','freshdeskAccounts','zohoAccounts','faxAccounts','mapKeys','format','name','hasOwnProperty','total','answered','sumHoldTime','sumDuration','sumBillable','isEmpty','ivrTotalCallsDays','ivrAnswerCallsDay','outboundAnswerAgiCallsDay','outboundNoAnswerCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundNoSuchCallsDay','outboundUnknownCallsDay','outboundDropCallsDayTimeout','outboundBlacklistCallsDay','outboundOriginateFailureCallsDay','outboundRejectCallsDay','mergeFromDatabase','prototype','initAgents','isUndefined','SIP/%s','initTelephones','length','initTrunks'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x9e7c,0x182));var _0xc9e7=function(_0x21ecea,_0xa80966){_0x21ecea=_0x21ecea-0x0;var _0x5b7e88=_0x9e7c[_0x21ecea];return _0x5b7e88;};'use strict';var BPromise=require(_0xc9e7('0x0'));var util=require(_0xc9e7('0x1'));var _=require(_0xc9e7('0x2'));var moment=require(_0xc9e7('0x3'));var Agent=require(_0xc9e7('0x4'));var Telephone=require('../model/telephone');var Trunk=require(_0xc9e7('0x5'));var VoiceQueue=require(_0xc9e7('0x6'));var Trigger=require(_0xc9e7('0x7'));var Template=require('../model/template');var Campaign=require('../model/campaign');var VoiceExtension=require(_0xc9e7('0x8'));var ZendeskAccount=require(_0xc9e7('0x9'));var SalesforceAccount=require('../model/salesforceAccount');var FreshdeskAccount=require(_0xc9e7('0xa'));var SugarcrmAccount=require(_0xc9e7('0xb'));var ZohoAccount=require('../model/zohoAccount');var DeskAccount=require(_0xc9e7('0xc'));var VtigerAccount=require(_0xc9e7('0xd'));var FaxAccount=require(_0xc9e7('0xe'));var Realtime=function(){this[_0xc9e7('0xf')]={};this[_0xc9e7('0x10')]={};this['trunks']={};this[_0xc9e7('0x11')]={};this[_0xc9e7('0x12')]={};this[_0xc9e7('0x13')]={};this[_0xc9e7('0x14')]={};this['outbound']={'total':0x0,'answered':0x0,'sumHoldTime':0x0,'sumDuration':0x0,'sumBillable':0x0};this[_0xc9e7('0x15')]={};this[_0xc9e7('0x16')]={};this[_0xc9e7('0x17')]={};this['outboundChannels']={};this['timers']={};this['zendeskAccounts']={};this[_0xc9e7('0x18')]={};this[_0xc9e7('0x19')]={};this[_0xc9e7('0x1a')]={};this[_0xc9e7('0x1b')]={};this['deskAccounts']={};this['vtigerAccounts']={};this[_0xc9e7('0x1c')]={};};function freeIsNotKey(_0x2d1494,_0x4851a6,_0x113df1){var _0xaf8632=_[_0xc9e7('0x1d')](_0x2d1494,function(_0x434c07,_0x32b6f9){return _0x434c07[_0x113df1];});for(var _0x2c31b6 in _0x4851a6){if(_0x4851a6['hasOwnProperty'](_0x2c31b6)){if(!_0xaf8632[_0x2c31b6]){delete _0x4851a6[_0x2c31b6];}}}}function freeIsNotKeySip(_0x3247d0,_0x23c52b){var _0x1cea3e=_[_0xc9e7('0x1d')](_0x3247d0,function(_0x1962e2,_0x283bd6){return util[_0xc9e7('0x1e')]('SIP/%s',_0x1962e2[_0xc9e7('0x1f')]);});for(var _0x525321 in _0x23c52b){if(_0x23c52b[_0xc9e7('0x20')](_0x525321)){if(!_0x1cea3e[_0x525321]){delete _0x23c52b[_0x525321];}}}}function clearVoiceCallReports(_0x6795ba){_0x6795ba[_0xc9e7('0x21')]=0x0;_0x6795ba[_0xc9e7('0x22')]=0x0;_0x6795ba[_0xc9e7('0x23')]=0x0;_0x6795ba[_0xc9e7('0x24')]=0x0;_0x6795ba[_0xc9e7('0x25')]=0x0;}function clearCampaigns(_0x1dca76){if(!_[_0xc9e7('0x26')](_0x1dca76)){for(var _0x5f1af1 in _0x1dca76){if(_0x1dca76['hasOwnProperty'](_0x5f1af1)){_0x1dca76[_0x5f1af1][_0xc9e7('0x27')]=0x0;_0x1dca76[_0x5f1af1][_0xc9e7('0x28')]=0x0;}}}}function clearVoiceQueues(_0x17dabd){if(!_[_0xc9e7('0x26')](_0x17dabd)){for(var _0x12635c in _0x17dabd){if(_0x17dabd[_0xc9e7('0x20')](_0x12635c)){_0x17dabd[_0x12635c]['total']=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x22')]=0x0;_0x17dabd[_0x12635c]['unmanaged']=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x23')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x24')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x25')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x29')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x2a')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x2b')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x2c')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x2d')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x2e')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x2f')]=0x0;_0x17dabd[_0x12635c]['outboundDropCallsDayCallersExit']=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x30')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x31')]=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x32')]=0x0;_0x17dabd[_0x12635c]['outboundReCallsDay']=0x0;_0x17dabd[_0x12635c][_0xc9e7('0x29')]=0x0;_0x17dabd[_0x12635c]['outboundAnswerCallsDay']=0x0;_0x17dabd[_0x12635c]['queueStatusComplete']=!![];}}}}Realtime['prototype'][_0xc9e7('0x33')]=function(_0x59fc8e,_0x2b5922){for(var _0x2cc9e9 in _0x2b5922){if(_0x59fc8e['hasOwnProperty'](_0x2cc9e9)){_0x59fc8e[_0x2cc9e9]=_0x2b5922[_0x2cc9e9];}}};Realtime[_0xc9e7('0x34')][_0xc9e7('0x35')]=function(){var _0x5670e6=this;return function(_0x2c7b46){if(_0x2c7b46){freeIsNotKeySip(_0x2c7b46,_0x5670e6[_0xc9e7('0xf')]);for(var _0x4d3efc=0x0,_0x27c762={},_0x1bf2b5={};_0x4d3efc<_0x2c7b46['length'];_0x4d3efc+=0x1){_0x27c762=_0x2c7b46[_0x4d3efc];if(_[_0xc9e7('0x36')](_0x5670e6[_0xc9e7('0xf')][util[_0xc9e7('0x1e')](_0xc9e7('0x37'),_0x27c762[_0xc9e7('0x1f')])])){_0x5670e6['agents'][util['format']('SIP/%s',_0x27c762[_0xc9e7('0x1f')])]=new Agent(_0x27c762);}else{_0x5670e6[_0xc9e7('0x33')](_0x5670e6['agents'][util[_0xc9e7('0x1e')]('SIP/%s',_0x27c762[_0xc9e7('0x1f')])],_0x27c762);}}}return _0x5670e6[_0xc9e7('0xf')];};};Realtime[_0xc9e7('0x34')][_0xc9e7('0x38')]=function(){var _0x118e6c=this;return function(_0x40f772){if(_0x40f772){freeIsNotKeySip(_0x40f772,_0x118e6c[_0xc9e7('0x10')]);for(var _0x4a67f8=0x0,_0x1c5723={},_0x3ce8eb={};_0x4a67f8<_0x40f772[_0xc9e7('0x39')];_0x4a67f8+=0x1){_0x1c5723=_0x40f772[_0x4a67f8];if(_[_0xc9e7('0x36')](_0x118e6c[_0xc9e7('0x10')][util[_0xc9e7('0x1e')]('SIP/%s',_0x1c5723['name'])])){_0x118e6c[_0xc9e7('0x10')][util['format'](_0xc9e7('0x37'),_0x1c5723[_0xc9e7('0x1f')])]=new Telephone(_0x1c5723);}else{_0x118e6c[_0xc9e7('0x33')](_0x118e6c[_0xc9e7('0x10')][util[_0xc9e7('0x1e')](_0xc9e7('0x37'),_0x1c5723[_0xc9e7('0x1f')])],_0x1c5723);}}}return _0x118e6c[_0xc9e7('0x10')];};};Realtime[_0xc9e7('0x34')][_0xc9e7('0x3a')]=function(){var _0x4a16b4=this;return function(_0x5057bb){if(_0x5057bb){freeIsNotKeySip(_0x5057bb,_0x4a16b4[_0xc9e7('0x3b')]);for(var _0x28ed5c=0x0,_0x147c4d={},_0x3726b1={};_0x28ed5c<_0x5057bb['length'];_0x28ed5c+=0x1){_0x147c4d=_0x5057bb[_0x28ed5c];if(_[_0xc9e7('0x36')](_0x4a16b4[_0xc9e7('0x3b')][util[_0xc9e7('0x1e')](_0xc9e7('0x37'),_0x147c4d[_0xc9e7('0x1f')])])){_0x4a16b4[_0xc9e7('0x3b')][util['format'](_0xc9e7('0x37'),_0x147c4d[_0xc9e7('0x1f')])]=new Trunk(_0x147c4d);}else{_0x4a16b4[_0xc9e7('0x33')](_0x4a16b4[_0xc9e7('0x3b')][util['format'](_0xc9e7('0x37'),_0x147c4d['name'])],_0x147c4d);}}}return _0x4a16b4[_0xc9e7('0x3b')];};};Realtime[_0xc9e7('0x34')]['initVoiceQueues']=function(){var _0x46ed6c=this;return function(_0x2c01b2){if(_0x2c01b2){freeIsNotKey(_0x2c01b2,_0x46ed6c['voiceQueues'],_0xc9e7('0x1f'));for(var _0x210b2d=0x0,_0x3b9d40={},_0x51b632={};_0x210b2d<_0x2c01b2[_0xc9e7('0x39')];_0x210b2d+=0x1){_0x3b9d40=_0x2c01b2[_0x210b2d];if(_[_0xc9e7('0x36')](_0x46ed6c[_0xc9e7('0x11')][_0x3b9d40[_0xc9e7('0x1f')]])){_0x46ed6c[_0xc9e7('0x11')][_0x3b9d40[_0xc9e7('0x1f')]]=new VoiceQueue(_0x3b9d40);}else{_0x46ed6c[_0xc9e7('0x33')](_0x46ed6c[_0xc9e7('0x11')][_0x3b9d40[_0xc9e7('0x1f')]],_0x3b9d40);}}}return _0x46ed6c[_0xc9e7('0x11')];};};Realtime[_0xc9e7('0x34')]['initTriggers']=function(){var _0x1e120d=this;return function(_0x581ac3){if(_0x581ac3){freeIsNotKey(_0x581ac3,_0x1e120d[_0xc9e7('0x12')],'id');for(var _0x55fd28=0x0,_0x42f43e={},_0xbc35f={};_0x55fd28<_0x581ac3[_0xc9e7('0x39')];_0x55fd28+=0x1){_0x42f43e=_0x581ac3[_0x55fd28];if(_[_0xc9e7('0x36')](_0x1e120d[_0xc9e7('0x12')][_0x42f43e['id']])){_0x1e120d[_0xc9e7('0x12')][_0x42f43e['id']]=new Trigger(_0x42f43e);}else{_0x1e120d[_0xc9e7('0x33')](_0x1e120d[_0xc9e7('0x12')][_0x42f43e['id']],_0x42f43e);}}}return _0x1e120d[_0xc9e7('0x12')];};};Realtime[_0xc9e7('0x34')]['initTemplates']=function(){var _0x226d36=this;return function(_0x4e7562){if(_0x4e7562){freeIsNotKey(_0x4e7562,_0x226d36['templates'],'id');for(var _0x36c087=0x0,_0x1a6511={},_0x21e41d={};_0x36c087<_0x4e7562[_0xc9e7('0x39')];_0x36c087+=0x1){_0x1a6511=_0x4e7562[_0x36c087];if(_['isUndefined'](_0x226d36[_0xc9e7('0x14')][_0x1a6511['id']])){_0x226d36[_0xc9e7('0x14')][_0x1a6511['id']]=new Template(_0x1a6511);}else{_0x226d36[_0xc9e7('0x33')](_0x226d36['templates'][_0x1a6511['id']],_0x1a6511);}}}return _0x226d36[_0xc9e7('0x14')];};};Realtime['prototype'][_0xc9e7('0x3c')]=function(){var _0x238786=this;return function(_0x2b4fb8){if(_0x2b4fb8){freeIsNotKey(_0x2b4fb8,_0x238786[_0xc9e7('0x3d')],'id');for(var _0x4b480b=0x0,_0x706f7d={},_0x13a4e7={};_0x4b480b<_0x2b4fb8[_0xc9e7('0x39')];_0x4b480b+=0x1){_0x706f7d=_0x2b4fb8[_0x4b480b];if(_[_0xc9e7('0x36')](_0x238786[_0xc9e7('0x3d')][_0x706f7d['id']])){_0x238786['zendeskAccounts'][_0x706f7d['id']]=new ZendeskAccount(_0x706f7d);}else{_0x238786['mergeFromDatabase'](_0x238786[_0xc9e7('0x3d')][_0x706f7d['id']],_0x706f7d);}}}return _0x238786[_0xc9e7('0x3d')];};};Realtime[_0xc9e7('0x34')][_0xc9e7('0x3e')]=function(){var _0x260008=this;return function(_0x113fb8){if(_0x113fb8){freeIsNotKey(_0x113fb8,_0x260008[_0xc9e7('0x18')],'id');for(var _0x45c194=0x0,_0x1a2fb6={},_0x49b18b={};_0x45c194<_0x113fb8[_0xc9e7('0x39')];_0x45c194+=0x1){_0x1a2fb6=_0x113fb8[_0x45c194];if(_[_0xc9e7('0x36')](_0x260008[_0xc9e7('0x18')][_0x1a2fb6['id']])){_0x260008[_0xc9e7('0x18')][_0x1a2fb6['id']]=new SalesforceAccount(_0x1a2fb6);}else{_0x260008['mergeFromDatabase'](_0x260008[_0xc9e7('0x18')][_0x1a2fb6['id']],_0x1a2fb6);}}}return _0x260008[_0xc9e7('0x18')];};};Realtime[_0xc9e7('0x34')]['initFreshdeskAccounts']=function(){var _0x14fd36=this;return function(_0x4dd8eb){if(_0x4dd8eb){freeIsNotKey(_0x4dd8eb,_0x14fd36[_0xc9e7('0x1a')],'id');for(var _0x3861b4=0x0,_0x12f35e={},_0x3dd606={};_0x3861b4<_0x4dd8eb[_0xc9e7('0x39')];_0x3861b4+=0x1){_0x12f35e=_0x4dd8eb[_0x3861b4];if(_[_0xc9e7('0x36')](_0x14fd36[_0xc9e7('0x1a')][_0x12f35e['id']])){_0x14fd36[_0xc9e7('0x1a')][_0x12f35e['id']]=new FreshdeskAccount(_0x12f35e);}else{_0x14fd36[_0xc9e7('0x33')](_0x14fd36[_0xc9e7('0x1a')][_0x12f35e['id']],_0x12f35e);}}}return _0x14fd36[_0xc9e7('0x1a')];};};Realtime[_0xc9e7('0x34')]['initZohoAccounts']=function(){var _0xae650=this;return function(_0x54dfb0){if(_0x54dfb0){freeIsNotKey(_0x54dfb0,_0xae650[_0xc9e7('0x1b')],'id');for(var _0x6f2332=0x0,_0xdb050d={},_0x47d939={};_0x6f2332<_0x54dfb0[_0xc9e7('0x39')];_0x6f2332+=0x1){_0xdb050d=_0x54dfb0[_0x6f2332];if(_[_0xc9e7('0x36')](_0xae650[_0xc9e7('0x1b')][_0xdb050d['id']])){_0xae650[_0xc9e7('0x1b')][_0xdb050d['id']]=new ZohoAccount(_0xdb050d);}else{_0xae650[_0xc9e7('0x33')](_0xae650[_0xc9e7('0x1b')][_0xdb050d['id']],_0xdb050d);}}}return _0xae650[_0xc9e7('0x1b')];};};Realtime['prototype'][_0xc9e7('0x3f')]=function(){var _0x2b25cd=this;return function(_0x40902a){if(_0x40902a){freeIsNotKey(_0x40902a,_0x2b25cd[_0xc9e7('0x40')],'id');for(var _0x593d09=0x0,_0x1ef22f={},_0x4bcd02={};_0x593d09<_0x40902a[_0xc9e7('0x39')];_0x593d09+=0x1){_0x1ef22f=_0x40902a[_0x593d09];if(_[_0xc9e7('0x36')](_0x2b25cd[_0xc9e7('0x40')][_0x1ef22f['id']])){_0x2b25cd[_0xc9e7('0x40')][_0x1ef22f['id']]=new DeskAccount(_0x1ef22f);}else{_0x2b25cd[_0xc9e7('0x33')](_0x2b25cd[_0xc9e7('0x40')][_0x1ef22f['id']],_0x1ef22f);}}}return _0x2b25cd[_0xc9e7('0x40')];};};Realtime[_0xc9e7('0x34')][_0xc9e7('0x41')]=function(){var _0x4d130e=this;return function(_0x2d6334){if(_0x2d6334){freeIsNotKey(_0x2d6334,_0x4d130e['sugarcrmAccounts'],'id');for(var _0x31222c=0x0,_0x283b8f={},_0x335df8={};_0x31222c<_0x2d6334['length'];_0x31222c+=0x1){_0x283b8f=_0x2d6334[_0x31222c];if(_[_0xc9e7('0x36')](_0x4d130e[_0xc9e7('0x19')][_0x283b8f['id']])){_0x4d130e['sugarcrmAccounts'][_0x283b8f['id']]=new SugarcrmAccount(_0x283b8f);}else{_0x4d130e[_0xc9e7('0x33')](_0x4d130e[_0xc9e7('0x19')][_0x283b8f['id']],_0x283b8f);}}}return _0x4d130e[_0xc9e7('0x19')];};};Realtime[_0xc9e7('0x34')][_0xc9e7('0x42')]=function(){var _0x1686b7=this;return function(_0x418807){if(_0x418807){freeIsNotKey(_0x418807,_0x1686b7['vtigerAccounts'],'id');for(var _0x4e1ca2=0x0,_0x137b13={},_0x4cfc49={};_0x4e1ca2<_0x418807['length'];_0x4e1ca2+=0x1){_0x137b13=_0x418807[_0x4e1ca2];if(_[_0xc9e7('0x36')](_0x1686b7['vtigerAccounts'][_0x137b13['id']])){_0x1686b7[_0xc9e7('0x43')][_0x137b13['id']]=new VtigerAccount(_0x137b13);}else{_0x1686b7[_0xc9e7('0x33')](_0x1686b7['vtigerAccounts'][_0x137b13['id']],_0x137b13);}}}return _0x1686b7['vtigerAccounts'];};};Realtime['prototype'][_0xc9e7('0x44')]=function(){var _0x159a35=this;return function(_0x246e92){for(var _0x4bad81=0x0;_0x4bad81<_0x246e92[_0xc9e7('0x39')];_0x4bad81+=0x1){_[_0xc9e7('0x45')](_0x159a35['voiceQueues'][_0x246e92[_0x4bad81][_0xc9e7('0x1f')]],_0x246e92[_0x4bad81]);}return _0x159a35['voiceQueues'];};};Realtime['prototype'][_0xc9e7('0x46')]=function(){var _0x392eba=this;return function(_0x4e671d){clearVoiceQueues(_0x392eba[_0xc9e7('0x11')]);if(_0x4e671d){_0x4e671d=_['groupBy'](_0x4e671d,_0xc9e7('0x47'));for(var _0xa41887 in _0x4e671d){if(_0x4e671d[_0xc9e7('0x20')](_0xa41887)){var _0x297a5d={};for(var _0x297a2a=0x0;_0x297a2a<_0x4e671d[_0xa41887][_0xc9e7('0x39')];_0x297a2a+=0x1){var _0x136fa1=_0x4e671d[_0xa41887][_0x297a2a][_0xc9e7('0x48')];if(_0x392eba['voiceQueues'][_0x136fa1]){if(_0x4e671d[_0xa41887][_0x297a2a]['queuecallerexit']){_0x392eba[_0xc9e7('0x11')][_0x136fa1][_0xc9e7('0x49')]+=0x1;}_0x392eba['voiceQueues'][_0x136fa1]['sumHoldTime']+=moment(_0x4e671d[_0xa41887][_0x297a2a][_0xc9e7('0x4a')])[_0xc9e7('0x4b')](moment(_0x4e671d[_0xa41887][_0x297a2a][_0xc9e7('0x4c')]),_0xc9e7('0x4d'))||0x0;if(_0x297a2a===_0x4e671d[_0xa41887]['length']-0x1){_0x392eba[_0xc9e7('0x11')][_0x136fa1][_0xc9e7('0x24')]+=moment(_0x4e671d[_0xa41887][_0x297a2a]['queuecallercompleteAt']||_0x4e671d[_0xa41887][_0x297a2a]['queuecallerabandonAt']||_0x4e671d[_0xa41887][_0x297a2a][_0xc9e7('0x4e')])[_0xc9e7('0x4b')](moment(_0x4e671d[_0xa41887][_0x297a2a][_0xc9e7('0x4c')]),_0xc9e7('0x4d'))||0x0;_0x392eba[_0xc9e7('0x11')][_0x136fa1]['total']+=0x1;if(_0x4e671d[_0xa41887][_0x297a2a][_0xc9e7('0x4f')]){_0x392eba[_0xc9e7('0x11')][_0x136fa1][_0xc9e7('0x22')]+=0x1;_0x392eba[_0xc9e7('0x11')][_0x136fa1][_0xc9e7('0x25')]+=moment(_0x4e671d[_0xa41887][_0x297a2a][_0xc9e7('0x50')])[_0xc9e7('0x4b')](moment(_0x4e671d[_0xa41887][_0x297a2a][_0xc9e7('0x4a')]),_0xc9e7('0x4d'))||0x0;}}else{_0x392eba['voiceQueues'][_0x136fa1][_0xc9e7('0x24')]+=_0x392eba[_0xc9e7('0x11')][_0x136fa1][_0xc9e7('0x23')];}}}}}}return _0x392eba[_0xc9e7('0x11')];};};Realtime[_0xc9e7('0x34')][_0xc9e7('0x51')]=function(){var _0x2bea04=this;return function(_0xdf9678){clearVoiceCallReports(_0x2bea04[_0xc9e7('0x52')]);if(_0xdf9678){for(var _0xf20647=0x0;_0xf20647<_0xdf9678['length'];_0xf20647+=0x1){_0x2bea04['outbound']['total']+=0x1;_0x2bea04['outbound']['sumDuration']+=_0xdf9678[_0xf20647][_0xc9e7('0x53')];if(_0xdf9678[_0xf20647][_0xc9e7('0x54')]==='ANSWERED'){_0x2bea04['outbound'][_0xc9e7('0x22')]+=0x1;_0x2bea04[_0xc9e7('0x52')][_0xc9e7('0x23')]+=_0xdf9678[_0xf20647][_0xc9e7('0x53')]-_0xdf9678[_0xf20647]['billableseconds'];_0x2bea04[_0xc9e7('0x52')][_0xc9e7('0x25')]+=_0xdf9678[_0xf20647][_0xc9e7('0x55')];}}}return _0x2bea04['outbound'];};};Realtime[_0xc9e7('0x34')][_0xc9e7('0x56')]=function(){var _0x17da1c=this;return function(_0x3d4cbb){if(_0x3d4cbb){freeIsNotKey(_0x3d4cbb,_0x17da1c[_0xc9e7('0x13')],_0xc9e7('0x1f'));for(var _0x3cf7cc=0x0,_0xd743c9={};_0x3cf7cc<_0x3d4cbb['length'];_0x3cf7cc+=0x1){_0xd743c9=_0x3d4cbb[_0x3cf7cc];if(_[_0xc9e7('0x36')](_0x17da1c[_0xc9e7('0x13')][_0xd743c9[_0xc9e7('0x1f')]])){_0x17da1c['campaigns'][_0xd743c9[_0xc9e7('0x1f')]]=new Campaign(_0xd743c9);}else{_0x17da1c['mergeFromDatabase'](_0x17da1c[_0xc9e7('0x13')][_0xd743c9['name']],_0xd743c9);}}}return _0x17da1c['campaigns'];};};Realtime[_0xc9e7('0x34')][_0xc9e7('0x57')]=function(){var _0x5b14a5=this;return function(_0x507bb3){if(_0x507bb3){freeIsNotKey(_0x507bb3,_0x5b14a5['voiceExtensions'],'id');for(var _0x559a6a=0x0,_0x1d2379={};_0x559a6a<_0x507bb3['length'];_0x559a6a+=0x1){_0x1d2379=_0x507bb3[_0x559a6a];if(_[_0xc9e7('0x36')](_0x5b14a5[_0xc9e7('0x15')][_0x1d2379['id']])){_0x5b14a5[_0xc9e7('0x15')][_0x1d2379['id']]=new VoiceExtension(_0x1d2379);}else{_0x5b14a5[_0xc9e7('0x33')](_0x5b14a5[_0xc9e7('0x15')][_0x1d2379['id']],_0x1d2379);}}}return _0x5b14a5[_0xc9e7('0x15')];};};Realtime[_0xc9e7('0x34')][_0xc9e7('0x58')]=function(){var _0x3575e9=this;return function(_0x49db18){clearCampaigns(_0x3575e9[_0xc9e7('0x13')]);for(var _0x23a783=0x0;_0x23a783<_0x49db18[_0xc9e7('0x39')];_0x23a783+=0x1){_['merge'](_0x3575e9['campaigns'][_0x49db18[_0x23a783][_0xc9e7('0x1f')]],_0x49db18[_0x23a783]);}return _0x3575e9[_0xc9e7('0x13')];};};Realtime[_0xc9e7('0x34')]['initFaxAccounts']=function(){var _0x558868=this;return function(_0x10ab5e){if(_0x10ab5e){freeIsNotKey(_0x10ab5e,_0x558868[_0xc9e7('0x1c')],'id');for(var _0x23189a=0x0,_0x2d13ef={},_0x530425={};_0x23189a<_0x10ab5e[_0xc9e7('0x39')];_0x23189a+=0x1){_0x2d13ef=_0x10ab5e[_0x23189a];if(_[_0xc9e7('0x36')](_0x558868[_0xc9e7('0x1c')][_0x2d13ef['id']])){_0x558868[_0xc9e7('0x1c')][_0x2d13ef['id']]=new FaxAccount(_0x2d13ef);}else{_0x558868[_0xc9e7('0x33')](_0x558868[_0xc9e7('0x1c')][_0x2d13ef['id']],_0x2d13ef);}}}return _0x558868[_0xc9e7('0x1c')];};};module['exports']=Realtime;
\ No newline at end of file
index c553b3e..a336125 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9571=['monitors','filename','createdAt','exports','bluebird','lodash','moment','ami','../rpc/voiceAgentReport','../rpc/voiceCallReport','../rpc/voiceDialReport','../rpc/voiceQueueReport','../rpc/voiceTransferReport','./voiceQueueReport','./voiceCallReport','./voiceAgentReport','prototype','sync','realtime','custom:voiceQueueReport','voiceQueueReport','custom:voiceCallReport','custom:voiceAgentReport','voiceAgentReport','bind','custom:voiceDialReport','voiceDialReport','blindtransfer','blindTransfer','attendedTransfer','length','create','voiceCallReport'];(function(_0x1383af,_0x29d2c3){var _0xbc03df=function(_0x2cf5cf){while(--_0x2cf5cf){_0x1383af['push'](_0x1383af['shift']());}};_0xbc03df(++_0x29d2c3);}(_0x9571,0xeb));var _0x1957=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0x9571[_0x57b54c];return _0x59cc19;};'use strict';var BPromise=require(_0x1957('0x0'));var _=require(_0x1957('0x1'));var moment=require(_0x1957('0x2'));var util=require('util');var logger=require('../../../config/logger')(_0x1957('0x3'));var ami=require('../ami');var RpcVoiceAgentReport=require(_0x1957('0x4'));var RpcVoiceCallReport=require(_0x1957('0x5'));var RpcVoiceDialReport=require(_0x1957('0x6'));var RpcMemberReport=require('../rpc/memberReport');var RpcVoiceQueueReport=require(_0x1957('0x7'));var RpcVoiceRecording=require('../rpc/voiceRecording');var RpcVoiceTransferReport=require(_0x1957('0x8'));var VoiceQueueReport=require(_0x1957('0x9'));var VoiceCallReport=require(_0x1957('0xa'));var VoiceAgentReport=require(_0x1957('0xb'));var VoiceDialReport=require('./voiceDialReport');var UserReport=require('./userReport');function Report(_0x5be56f){this['realtime']=_0x5be56f;}Report[_0x1957('0xc')][_0x1957('0xd')]=function(_0xe42665){var _0x27fd06=new VoiceQueueReport(this[_0x1957('0xe')]);var _0x4f350b=new VoiceAgentReport(this[_0x1957('0xe')]);var _0x2e0b03=new VoiceDialReport(this[_0x1957('0xe')]);var _0x1aa9eb=new VoiceCallReport(this[_0x1957('0xe')]);var _0x3ef7ee=new UserReport(this['realtime']);ami['on'](_0x1957('0xf'),this[_0x1957('0x10')]['bind'](this));ami['on'](_0x1957('0x11'),this['voiceCallReport']['bind'](this));ami['on'](_0x1957('0x12'),this[_0x1957('0x13')][_0x1957('0x14')](this));ami['on'](_0x1957('0x15'),this[_0x1957('0x16')][_0x1957('0x14')](this));ami['on'](_0x1957('0x17'),this[_0x1957('0x18')][_0x1957('0x14')](this));ami['on']('attendedtransfer',this[_0x1957('0x19')][_0x1957('0x14')](this));};Report[_0x1957('0xc')][_0x1957('0x10')]=function(_0x33152b){for(var _0x30a1f0=0x0;_0x30a1f0<_0x33152b[_0x1957('0x1a')];_0x30a1f0+=0x1){if(_0x33152b[_0x30a1f0]['queuecallercomplete']){RpcMemberReport['voiceQueueReport'](_0x33152b[_0x30a1f0]);}RpcVoiceQueueReport[_0x1957('0x1b')](_0x33152b[_0x30a1f0]);}};Report[_0x1957('0xc')][_0x1957('0x1c')]=function(_0x5b825c){if(_0x5b825c['monitor']){for(var _0x4980e2=0x0;_0x4980e2<_0x5b825c['monitors']['length'];_0x4980e2+=0x1){_0x5b825c['monitorFilename']=_0x5b825c[_0x1957('0x1d')][_0x4980e2][_0x1957('0x1e')];_0x5b825c[_0x1957('0x1f')]=_0x5b825c[_0x1957('0x1d')][_0x4980e2][_0x1957('0x1f')];RpcVoiceRecording[_0x1957('0x1b')](_0x5b825c);}}RpcVoiceCallReport[_0x1957('0x1b')](_0x5b825c);};Report[_0x1957('0xc')]['voiceAgentReport']=function(_0x1dfb66){for(var _0x443270=0x0;_0x443270<_0x1dfb66['length'];_0x443270+=0x1){RpcVoiceAgentReport[_0x1957('0x1b')](_0x1dfb66[_0x443270]);}};Report['prototype'][_0x1957('0x16')]=function(_0x517718){RpcVoiceDialReport['create'](_0x517718);RpcMemberReport[_0x1957('0x16')](_0x517718);};Report[_0x1957('0xc')][_0x1957('0x18')]=function(_0xc48abe){RpcVoiceTransferReport[_0x1957('0x18')](_0xc48abe);};Report[_0x1957('0xc')]['attendedTransfer']=function(_0x27d80e){RpcVoiceTransferReport['attendedTransfer'](_0x27d80e);};module[_0x1957('0x20')]=Report;
\ No newline at end of file
+var _0xb85a=['length','monitorFilename','monitors','filename','createdAt','voiceAgentReport','lodash','moment','util','../../../config/logger','ami','../rpc/voiceCallReport','../rpc/voiceDialReport','../rpc/memberReport','../rpc/voiceQueueReport','../rpc/voiceRecording','./voiceAgentReport','./voiceDialReport','./userReport','realtime','prototype','sync','voiceQueueReport','bind','custom:voiceCallReport','custom:voiceDialReport','voiceDialReport','blindTransfer','attendedtransfer','attendedTransfer','queuecallercomplete','create','voiceCallReport','monitor'];(function(_0x55adba,_0x3d89c7){var _0x22924c=function(_0x35cbdd){while(--_0x35cbdd){_0x55adba['push'](_0x55adba['shift']());}};_0x22924c(++_0x3d89c7);}(_0xb85a,0xb0));var _0xab85=function(_0x499227,_0x3a8c2c){_0x499227=_0x499227-0x0;var _0xec1c0a=_0xb85a[_0x499227];return _0xec1c0a;};'use strict';var BPromise=require('bluebird');var _=require(_0xab85('0x0'));var moment=require(_0xab85('0x1'));var util=require(_0xab85('0x2'));var logger=require(_0xab85('0x3'))(_0xab85('0x4'));var ami=require('../ami');var RpcVoiceAgentReport=require('../rpc/voiceAgentReport');var RpcVoiceCallReport=require(_0xab85('0x5'));var RpcVoiceDialReport=require(_0xab85('0x6'));var RpcMemberReport=require(_0xab85('0x7'));var RpcVoiceQueueReport=require(_0xab85('0x8'));var RpcVoiceRecording=require(_0xab85('0x9'));var RpcVoiceTransferReport=require('../rpc/voiceTransferReport');var VoiceQueueReport=require('./voiceQueueReport');var VoiceCallReport=require('./voiceCallReport');var VoiceAgentReport=require(_0xab85('0xa'));var VoiceDialReport=require(_0xab85('0xb'));var UserReport=require(_0xab85('0xc'));function Report(_0x24dcad){this[_0xab85('0xd')]=_0x24dcad;}Report[_0xab85('0xe')][_0xab85('0xf')]=function(_0x4bdaf1){var _0x499712=new VoiceQueueReport(this[_0xab85('0xd')]);var _0x40bd96=new VoiceAgentReport(this['realtime']);var _0x39c26a=new VoiceDialReport(this[_0xab85('0xd')]);var _0x24f201=new VoiceCallReport(this[_0xab85('0xd')]);var _0x20cf86=new UserReport(this[_0xab85('0xd')]);ami['on']('custom:voiceQueueReport',this[_0xab85('0x10')][_0xab85('0x11')](this));ami['on'](_0xab85('0x12'),this['voiceCallReport'][_0xab85('0x11')](this));ami['on']('custom:voiceAgentReport',this['voiceAgentReport'][_0xab85('0x11')](this));ami['on'](_0xab85('0x13'),this[_0xab85('0x14')][_0xab85('0x11')](this));ami['on']('blindtransfer',this[_0xab85('0x15')][_0xab85('0x11')](this));ami['on'](_0xab85('0x16'),this[_0xab85('0x17')]['bind'](this));};Report[_0xab85('0xe')][_0xab85('0x10')]=function(_0x4050b8){for(var _0x3416b7=0x0;_0x3416b7<_0x4050b8['length'];_0x3416b7+=0x1){if(_0x4050b8[_0x3416b7][_0xab85('0x18')]){RpcMemberReport[_0xab85('0x10')](_0x4050b8[_0x3416b7]);}RpcVoiceQueueReport[_0xab85('0x19')](_0x4050b8[_0x3416b7]);}};Report[_0xab85('0xe')][_0xab85('0x1a')]=function(_0x4f2fa1){if(_0x4f2fa1[_0xab85('0x1b')]){for(var _0x1fe940=0x0;_0x1fe940<_0x4f2fa1['monitors'][_0xab85('0x1c')];_0x1fe940+=0x1){_0x4f2fa1[_0xab85('0x1d')]=_0x4f2fa1[_0xab85('0x1e')][_0x1fe940][_0xab85('0x1f')];_0x4f2fa1[_0xab85('0x20')]=_0x4f2fa1[_0xab85('0x1e')][_0x1fe940][_0xab85('0x20')];RpcVoiceRecording[_0xab85('0x19')](_0x4f2fa1);}}RpcVoiceCallReport[_0xab85('0x19')](_0x4f2fa1);};Report[_0xab85('0xe')][_0xab85('0x21')]=function(_0xdbbf7b){for(var _0x3a4897=0x0;_0x3a4897<_0xdbbf7b[_0xab85('0x1c')];_0x3a4897+=0x1){RpcVoiceAgentReport[_0xab85('0x19')](_0xdbbf7b[_0x3a4897]);}};Report['prototype'][_0xab85('0x14')]=function(_0xd6637c){RpcVoiceDialReport[_0xab85('0x19')](_0xd6637c);RpcMemberReport[_0xab85('0x14')](_0xd6637c);};Report['prototype'][_0xab85('0x15')]=function(_0x40dfde){RpcVoiceTransferReport['blindTransfer'](_0x40dfde);};Report[_0xab85('0xe')][_0xab85('0x17')]=function(_0x384835){RpcVoiceTransferReport[_0xab85('0x17')](_0x384835);};module['exports']=Report;
\ No newline at end of file
index 556a703..c74569c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9ca1=['merge','trunk:%s','trunk:save','[syncRegistry][UserReport]','device','toLowerCase','stateTime','toNumber','format','updateStatusRealtime','telephone:%s','name','telephone:save','startsWith','Local','substring','indexOf','find','mobile','accountcode','[syncDeviceState][UserReport]','peer','status','address','[syncPeerStatus][UserReport]','exports','lodash','moment','bluebird','util','../../../config/logger','ami','../ami','socket.io-emitter','localhost','trunks','agents','telephones','registryentry','syncRegistry','registry','devicestatechange','syncDeviceState','bind','peerstatus','syncPeerStatus','loopSyncRealTimeShow','resolve','then','actionSipShowRegistry','actionDeviceStateList','actionSipPeerStatus','error','inspect','prototype','catch','[loopSyncRealTimeShow]','isUndefined','emit','isNotNull','username','state'];(function(_0x4db1a3,_0x4432a5){var _0x19ac0d=function(_0x166dd9){while(--_0x166dd9){_0x4db1a3['push'](_0x4db1a3['shift']());}};_0x19ac0d(++_0x4432a5);}(_0x9ca1,0x1cc));var _0x19ca=function(_0x1f68b2,_0x4db5d0){_0x1f68b2=_0x1f68b2-0x0;var _0x2036c6=_0x9ca1[_0x1f68b2];return _0x2036c6;};'use strict';var _=require(_0x19ca('0x0'));var moment=require(_0x19ca('0x1'));var BPromise=require(_0x19ca('0x2'));var util=require(_0x19ca('0x3'));var logger=require(_0x19ca('0x4'))(_0x19ca('0x5'));var ami=require(_0x19ca('0x6'));var io=require(_0x19ca('0x7'))({'host':_0x19ca('0x8'),'port':0x18eb});function UserReport(_0xca10f3){this[_0x19ca('0x9')]=_0xca10f3['trunks'];this[_0x19ca('0xa')]=_0xca10f3[_0x19ca('0xa')];this[_0x19ca('0xb')]=_0xca10f3['telephones'];ami['on'](_0x19ca('0xc'),this[_0x19ca('0xd')]['bind'](this));ami['on'](_0x19ca('0xe'),this[_0x19ca('0xd')]['bind'](this));ami['on'](_0x19ca('0xf'),this[_0x19ca('0x10')][_0x19ca('0x11')](this));ami['on'](_0x19ca('0x12'),this[_0x19ca('0x13')][_0x19ca('0x11')](this));this[_0x19ca('0x14')]();return BPromise[_0x19ca('0x15')]()[_0x19ca('0x16')](ami[_0x19ca('0x17')]())['then'](ami[_0x19ca('0x18')]())['then'](ami[_0x19ca('0x19')]())['catch'](loggerCatch('[loopSyncRealTimeShow]'));}function loggerCatch(_0x51f205){return function(_0x1140fe){logger[_0x19ca('0x1a')](_0x51f205,util[_0x19ca('0x1b')](_0x1140fe,{'showHidden':![],'depth':null}));};}UserReport[_0x19ca('0x1c')][_0x19ca('0x14')]=function(){setInterval(function(){BPromise[_0x19ca('0x15')]()['then'](ami['actionSipShowRegistry']())[_0x19ca('0x16')](ami['actionDeviceStateList']())[_0x19ca('0x16')](ami[_0x19ca('0x19')]())[_0x19ca('0x1d')](loggerCatch(_0x19ca('0x1e')));},0x32c8);};UserReport[_0x19ca('0x1c')]['isNotNull']=function(_0x5b1d46){return _0x5b1d46!==null&&!_[_0x19ca('0x1f')](_0x5b1d46);};UserReport[_0x19ca('0x1c')][_0x19ca('0x20')]=function(_0x53bfe6,_0x18b386,_0x570504){io['to'](_0x53bfe6)[_0x19ca('0x20')](_0x18b386,_0x570504);};UserReport[_0x19ca('0x1c')]['syncRegistry']=function(_0x11da7e){try{if(this[_0x19ca('0x21')](_0x11da7e)){var _0x117ce1=_['find'](this[_0x19ca('0x9')],{'registry':_0x11da7e[_0x19ca('0x22')]});if(_0x117ce1){_0x11da7e['stateRegistry']=_0x11da7e[_0x19ca('0x23')];_[_0x19ca('0x24')](_0x117ce1,_['omit'](_0x11da7e,['event','actionid',_0x19ca('0x22'),'state']));this[_0x19ca('0x20')](util['format'](_0x19ca('0x25'),_0x117ce1['name']),_0x19ca('0x26'),_0x117ce1);}}}catch(_0x3cfe4c){logger[_0x19ca('0x1a')](_0x19ca('0x27'),util[_0x19ca('0x1b')](_0x3cfe4c,{'showHidden':![],'depth':null}));}};UserReport[_0x19ca('0x1c')][_0x19ca('0x10')]=function(_0x382fa3){try{if(this[_0x19ca('0x21')](_0x382fa3)){if(this[_0x19ca('0xa')][_0x382fa3[_0x19ca('0x28')]]){if(this[_0x19ca('0xa')][_0x382fa3[_0x19ca('0x28')]][_0x19ca('0x23')]!==_0x382fa3[_0x19ca('0x23')][_0x19ca('0x29')]()){this[_0x19ca('0xa')][_0x382fa3[_0x19ca('0x28')]][_0x19ca('0x2a')]=_[_0x19ca('0x2b')](moment()[_0x19ca('0x2c')]('x'));}this['agents'][_0x382fa3['device']]['state']=_0x382fa3[_0x19ca('0x23')][_0x19ca('0x29')]();this[_0x19ca('0xa')][_0x382fa3[_0x19ca('0x28')]][_0x19ca('0x2d')](_0x382fa3);}else if(this[_0x19ca('0xb')][_0x382fa3[_0x19ca('0x28')]]){if(this[_0x19ca('0xb')][_0x382fa3[_0x19ca('0x28')]][_0x19ca('0x23')]!==_0x382fa3[_0x19ca('0x23')][_0x19ca('0x29')]()){this[_0x19ca('0xb')][_0x382fa3['device']][_0x19ca('0x2a')]=_[_0x19ca('0x2b')](moment()[_0x19ca('0x2c')]('x'));}this['telephones'][_0x382fa3[_0x19ca('0x28')]][_0x19ca('0x23')]=_0x382fa3[_0x19ca('0x23')]['toLowerCase']();this[_0x19ca('0x20')](util[_0x19ca('0x2c')](_0x19ca('0x2e'),this['telephones'][_0x382fa3['device']][_0x19ca('0x2f')]),_0x19ca('0x30'),this[_0x19ca('0xb')][_0x382fa3[_0x19ca('0x28')]]);}else if(this[_0x19ca('0x9')][_0x382fa3['device']]){if(this['trunks'][_0x382fa3[_0x19ca('0x28')]]['state']!==_0x382fa3[_0x19ca('0x23')][_0x19ca('0x29')]()){this[_0x19ca('0x9')][_0x382fa3['device']][_0x19ca('0x2a')]=_[_0x19ca('0x2b')](moment()[_0x19ca('0x2c')]('x'));}this[_0x19ca('0x9')][_0x382fa3[_0x19ca('0x28')]][_0x19ca('0x23')]=_0x382fa3[_0x19ca('0x23')][_0x19ca('0x29')]();this[_0x19ca('0x20')](util[_0x19ca('0x2c')](_0x19ca('0x25'),this['trunks'][_0x382fa3[_0x19ca('0x28')]][_0x19ca('0x2f')]),_0x19ca('0x26'),this[_0x19ca('0x9')][_0x382fa3[_0x19ca('0x28')]]);}else if(_[_0x19ca('0x31')](_0x382fa3[_0x19ca('0x28')],'Queue')){}else if(_['startsWith'](_0x382fa3[_0x19ca('0x28')],_0x19ca('0x32'))){var _0x446b79=_0x382fa3[_0x19ca('0x28')];var _0x167b9f=_0x446b79[_0x19ca('0x33')](_0x446b79[_0x19ca('0x34')]('/')+0x1,_0x446b79[_0x19ca('0x34')]('@'));var _0x1f9d7a=_[_0x19ca('0x35')](this['agents'],function(_0x5a7588){return _0x5a7588[_0x19ca('0x36')]==_0x167b9f||_0x5a7588['phone']==_0x167b9f||_0x5a7588[_0x19ca('0x37')]==_0x167b9f;});if(_0x1f9d7a){if(_0x1f9d7a[_0x19ca('0x23')]!==_0x382fa3[_0x19ca('0x23')][_0x19ca('0x29')]()){_0x1f9d7a[_0x19ca('0x2a')]=_['toNumber'](moment()['format']('x'));}_0x1f9d7a[_0x19ca('0x23')]=_0x382fa3[_0x19ca('0x23')][_0x19ca('0x29')]();_0x1f9d7a[_0x19ca('0x2d')](_0x382fa3);}}else{}}}catch(_0x2061b3){logger[_0x19ca('0x1a')](_0x19ca('0x38'),util['inspect'](_0x2061b3,{'showHidden':![],'depth':null}));}};UserReport[_0x19ca('0x1c')][_0x19ca('0x13')]=function(_0x417ca3){try{if(this[_0x19ca('0x21')](_0x417ca3)&&this['isNotNull'](_0x417ca3['peerstatus'])){if(this[_0x19ca('0xa')][_0x417ca3[_0x19ca('0x39')]]){this[_0x19ca('0xa')][_0x417ca3[_0x19ca('0x39')]][_0x19ca('0x3a')]=_0x417ca3[_0x19ca('0x12')][_0x19ca('0x29')]();this['agents'][_0x417ca3[_0x19ca('0x39')]]['address']=_0x417ca3[_0x19ca('0x3b')];this[_0x19ca('0xa')][_0x417ca3[_0x19ca('0x39')]][_0x19ca('0x2d')](_0x417ca3);}else if(this['telephones'][_0x417ca3[_0x19ca('0x39')]]){this['telephones'][_0x417ca3[_0x19ca('0x39')]]['status']=_0x417ca3[_0x19ca('0x12')]['toLowerCase']();this[_0x19ca('0xb')][_0x417ca3[_0x19ca('0x39')]][_0x19ca('0x3b')]=_0x417ca3[_0x19ca('0x3b')];this[_0x19ca('0x20')](util[_0x19ca('0x2c')](_0x19ca('0x2e'),this['telephones'][_0x417ca3[_0x19ca('0x39')]][_0x19ca('0x2f')]),_0x19ca('0x30'),this[_0x19ca('0xb')][_0x417ca3['peer']]);}else if(this[_0x19ca('0x9')][_0x417ca3[_0x19ca('0x39')]]){this['trunks'][_0x417ca3[_0x19ca('0x39')]]['status']=_0x417ca3[_0x19ca('0x12')][_0x19ca('0x29')]();this[_0x19ca('0x9')][_0x417ca3[_0x19ca('0x39')]]['address']=_0x417ca3[_0x19ca('0x3b')];this[_0x19ca('0x20')](util[_0x19ca('0x2c')](_0x19ca('0x25'),this[_0x19ca('0x9')][_0x417ca3[_0x19ca('0x39')]]['name']),_0x19ca('0x26'),this['trunks'][_0x417ca3[_0x19ca('0x39')]]);}else{}}}catch(_0x2c61cf){logger['error'](_0x19ca('0x3c'),util[_0x19ca('0x1b')](_0x2c61cf,{'showHidden':![],'depth':null}));}};module[_0x19ca('0x3d')]=UserReport;
\ No newline at end of file
+var _0x2ee5=['../ami','socket.io-emitter','trunks','agents','telephones','registryentry','syncRegistry','registry','syncDeviceState','syncPeerStatus','bind','loopSyncRealTimeShow','then','actionDeviceStateList','actionSipPeerStatus','catch','error','inspect','prototype','resolve','actionSipShowRegistry','isNotNull','emit','find','username','state','merge','omit','event','actionid','format','trunk:%s','trunk:save','[syncRegistry][UserReport]','device','toLowerCase','stateTime','updateStatusRealtime','toNumber','name','telephone:save','startsWith','Queue','substring','indexOf','mobile','phone','peerstatus','status','peer','address','lodash','moment','util','../../../config/logger','ami'];(function(_0x19b7e0,_0x547d40){var _0x3fcc1c=function(_0x184995){while(--_0x184995){_0x19b7e0['push'](_0x19b7e0['shift']());}};_0x3fcc1c(++_0x547d40);}(_0x2ee5,0x14b));var _0x52ee=function(_0x200fcb,_0x4cacfd){_0x200fcb=_0x200fcb-0x0;var _0x466b22=_0x2ee5[_0x200fcb];return _0x466b22;};'use strict';var _=require(_0x52ee('0x0'));var moment=require(_0x52ee('0x1'));var BPromise=require('bluebird');var util=require(_0x52ee('0x2'));var logger=require(_0x52ee('0x3'))(_0x52ee('0x4'));var ami=require(_0x52ee('0x5'));var io=require(_0x52ee('0x6'))({'host':'localhost','port':0x18eb});function UserReport(_0x4556e7){this[_0x52ee('0x7')]=_0x4556e7['trunks'];this[_0x52ee('0x8')]=_0x4556e7[_0x52ee('0x8')];this['telephones']=_0x4556e7[_0x52ee('0x9')];ami['on'](_0x52ee('0xa'),this[_0x52ee('0xb')]['bind'](this));ami['on'](_0x52ee('0xc'),this['syncRegistry']['bind'](this));ami['on']('devicestatechange',this[_0x52ee('0xd')]['bind'](this));ami['on']('peerstatus',this[_0x52ee('0xe')][_0x52ee('0xf')](this));this[_0x52ee('0x10')]();return BPromise['resolve']()['then'](ami['actionSipShowRegistry']())[_0x52ee('0x11')](ami[_0x52ee('0x12')]())[_0x52ee('0x11')](ami[_0x52ee('0x13')]())[_0x52ee('0x14')](loggerCatch('[loopSyncRealTimeShow]'));}function loggerCatch(_0x49e84e){return function(_0x10281a){logger[_0x52ee('0x15')](_0x49e84e,util[_0x52ee('0x16')](_0x10281a,{'showHidden':![],'depth':null}));};}UserReport[_0x52ee('0x17')]['loopSyncRealTimeShow']=function(){setInterval(function(){BPromise[_0x52ee('0x18')]()[_0x52ee('0x11')](ami[_0x52ee('0x19')]())[_0x52ee('0x11')](ami[_0x52ee('0x12')]())[_0x52ee('0x11')](ami[_0x52ee('0x13')]())['catch'](loggerCatch('[loopSyncRealTimeShow]'));},0x32c8);};UserReport[_0x52ee('0x17')][_0x52ee('0x1a')]=function(_0x4dadab){return _0x4dadab!==null&&!_['isUndefined'](_0x4dadab);};UserReport['prototype'][_0x52ee('0x1b')]=function(_0x345286,_0x5ee2a1,_0xb7067){io['to'](_0x345286)[_0x52ee('0x1b')](_0x5ee2a1,_0xb7067);};UserReport[_0x52ee('0x17')]['syncRegistry']=function(_0x3ac889){try{if(this[_0x52ee('0x1a')](_0x3ac889)){var _0xdec06d=_[_0x52ee('0x1c')](this[_0x52ee('0x7')],{'registry':_0x3ac889[_0x52ee('0x1d')]});if(_0xdec06d){_0x3ac889['stateRegistry']=_0x3ac889[_0x52ee('0x1e')];_[_0x52ee('0x1f')](_0xdec06d,_[_0x52ee('0x20')](_0x3ac889,[_0x52ee('0x21'),_0x52ee('0x22'),_0x52ee('0x1d'),_0x52ee('0x1e')]));this[_0x52ee('0x1b')](util[_0x52ee('0x23')](_0x52ee('0x24'),_0xdec06d['name']),_0x52ee('0x25'),_0xdec06d);}}}catch(_0x1ad8e3){logger[_0x52ee('0x15')](_0x52ee('0x26'),util[_0x52ee('0x16')](_0x1ad8e3,{'showHidden':![],'depth':null}));}};UserReport['prototype'][_0x52ee('0xd')]=function(_0x2565b7){try{if(this[_0x52ee('0x1a')](_0x2565b7)){if(this['agents'][_0x2565b7[_0x52ee('0x27')]]){if(this['agents'][_0x2565b7[_0x52ee('0x27')]]['state']!==_0x2565b7['state'][_0x52ee('0x28')]()){this[_0x52ee('0x8')][_0x2565b7['device']][_0x52ee('0x29')]=_['toNumber'](moment()[_0x52ee('0x23')]('x'));}this[_0x52ee('0x8')][_0x2565b7[_0x52ee('0x27')]][_0x52ee('0x1e')]=_0x2565b7[_0x52ee('0x1e')]['toLowerCase']();this['agents'][_0x2565b7[_0x52ee('0x27')]][_0x52ee('0x2a')](_0x2565b7);}else if(this[_0x52ee('0x9')][_0x2565b7['device']]){if(this[_0x52ee('0x9')][_0x2565b7[_0x52ee('0x27')]][_0x52ee('0x1e')]!==_0x2565b7[_0x52ee('0x1e')][_0x52ee('0x28')]()){this['telephones'][_0x2565b7['device']][_0x52ee('0x29')]=_[_0x52ee('0x2b')](moment()[_0x52ee('0x23')]('x'));}this[_0x52ee('0x9')][_0x2565b7[_0x52ee('0x27')]][_0x52ee('0x1e')]=_0x2565b7[_0x52ee('0x1e')]['toLowerCase']();this['emit'](util['format']('telephone:%s',this[_0x52ee('0x9')][_0x2565b7[_0x52ee('0x27')]][_0x52ee('0x2c')]),_0x52ee('0x2d'),this[_0x52ee('0x9')][_0x2565b7['device']]);}else if(this['trunks'][_0x2565b7[_0x52ee('0x27')]]){if(this[_0x52ee('0x7')][_0x2565b7[_0x52ee('0x27')]][_0x52ee('0x1e')]!==_0x2565b7[_0x52ee('0x1e')][_0x52ee('0x28')]()){this['trunks'][_0x2565b7['device']][_0x52ee('0x29')]=_[_0x52ee('0x2b')](moment()['format']('x'));}this[_0x52ee('0x7')][_0x2565b7[_0x52ee('0x27')]][_0x52ee('0x1e')]=_0x2565b7[_0x52ee('0x1e')][_0x52ee('0x28')]();this[_0x52ee('0x1b')](util[_0x52ee('0x23')](_0x52ee('0x24'),this[_0x52ee('0x7')][_0x2565b7[_0x52ee('0x27')]]['name']),_0x52ee('0x25'),this[_0x52ee('0x7')][_0x2565b7[_0x52ee('0x27')]]);}else if(_[_0x52ee('0x2e')](_0x2565b7[_0x52ee('0x27')],_0x52ee('0x2f'))){}else if(_['startsWith'](_0x2565b7[_0x52ee('0x27')],'Local')){var _0xbdc459=_0x2565b7[_0x52ee('0x27')];var _0x427eb8=_0xbdc459[_0x52ee('0x30')](_0xbdc459[_0x52ee('0x31')]('/')+0x1,_0xbdc459['indexOf']('@'));var _0x1ba455=_[_0x52ee('0x1c')](this[_0x52ee('0x8')],function(_0x3692fe){return _0x3692fe[_0x52ee('0x32')]==_0x427eb8||_0x3692fe[_0x52ee('0x33')]==_0x427eb8||_0x3692fe['accountcode']==_0x427eb8;});if(_0x1ba455){if(_0x1ba455[_0x52ee('0x1e')]!==_0x2565b7[_0x52ee('0x1e')][_0x52ee('0x28')]()){_0x1ba455['stateTime']=_[_0x52ee('0x2b')](moment()[_0x52ee('0x23')]('x'));}_0x1ba455[_0x52ee('0x1e')]=_0x2565b7['state'][_0x52ee('0x28')]();_0x1ba455[_0x52ee('0x2a')](_0x2565b7);}}else{}}}catch(_0x295e6c){logger[_0x52ee('0x15')]('[syncDeviceState][UserReport]',util[_0x52ee('0x16')](_0x295e6c,{'showHidden':![],'depth':null}));}};UserReport[_0x52ee('0x17')][_0x52ee('0xe')]=function(_0x2e9a92){try{if(this[_0x52ee('0x1a')](_0x2e9a92)&&this[_0x52ee('0x1a')](_0x2e9a92[_0x52ee('0x34')])){if(this[_0x52ee('0x8')][_0x2e9a92['peer']]){this['agents'][_0x2e9a92['peer']][_0x52ee('0x35')]=_0x2e9a92[_0x52ee('0x34')][_0x52ee('0x28')]();this[_0x52ee('0x8')][_0x2e9a92[_0x52ee('0x36')]][_0x52ee('0x37')]=_0x2e9a92[_0x52ee('0x37')];this[_0x52ee('0x8')][_0x2e9a92[_0x52ee('0x36')]][_0x52ee('0x2a')](_0x2e9a92);}else if(this[_0x52ee('0x9')][_0x2e9a92['peer']]){this[_0x52ee('0x9')][_0x2e9a92[_0x52ee('0x36')]]['status']=_0x2e9a92[_0x52ee('0x34')]['toLowerCase']();this[_0x52ee('0x9')][_0x2e9a92[_0x52ee('0x36')]][_0x52ee('0x37')]=_0x2e9a92[_0x52ee('0x37')];this[_0x52ee('0x1b')](util[_0x52ee('0x23')]('telephone:%s',this[_0x52ee('0x9')][_0x2e9a92[_0x52ee('0x36')]][_0x52ee('0x2c')]),_0x52ee('0x2d'),this[_0x52ee('0x9')][_0x2e9a92[_0x52ee('0x36')]]);}else if(this[_0x52ee('0x7')][_0x2e9a92[_0x52ee('0x36')]]){this[_0x52ee('0x7')][_0x2e9a92[_0x52ee('0x36')]][_0x52ee('0x35')]=_0x2e9a92['peerstatus'][_0x52ee('0x28')]();this[_0x52ee('0x7')][_0x2e9a92[_0x52ee('0x36')]][_0x52ee('0x37')]=_0x2e9a92['address'];this['emit'](util[_0x52ee('0x23')](_0x52ee('0x24'),this[_0x52ee('0x7')][_0x2e9a92[_0x52ee('0x36')]][_0x52ee('0x2c')]),_0x52ee('0x25'),this[_0x52ee('0x7')][_0x2e9a92[_0x52ee('0x36')]]);}else{}}}catch(_0x21231d){logger['error']('[syncPeerStatus][UserReport]',util[_0x52ee('0x16')](_0x21231d,{'showHidden':![],'depth':null}));}};module['exports']=UserReport;
\ No newline at end of file
index fc010b2..f4200ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf83=['[syncMusicOnHoldStop][VoiceAgentReport]','exports','lodash','../../../config/logger','ami','socket.io-emitter','localhost','voiceQueues','agents','variables','agentcalled','bind','agentconnect','syncAgentConnect','queuecallerabandon','syncQueueCallerAbandon','agentcomplete','syncAgentComplete','syncVarSet','syncHangup','musiconholdstart','syncMusicOnHoldStart','syncMusicOnHoldStop','prototype','emit','isNotNull','isUndefined','syncAgentCalled','channels','uniqueid','destuniqueid','format','YYYY-MM-DD\x20HH:mm:ss','called','queue','type','inbound','omit','event','privilege','custom:agentcalled','membername','[syncAgentCalled][VoiceAgentReport]','inspect','hasOwnProperty','agentconnectAt','connect','holdtime','connectedlinenum','connectedlinename','destchannelstate','destchannelstatedesc','merge','interface','pick','destconnectedlinenum','user:%s','user:agentconnect','custom:agentconnect','agentringnoanswer','answered_elsewhere','answeredelsewheremembername','custom:agentansweredelsewhere','[syncAgentConnect][VoiceAgentReport]','syncAgentRingNoAnswer','agentringnoanswerAt','reason','lastevent','rejected','custom:agentringnoanswer','error','[syncAgentRingNoAnswer][VoiceAgentReport]','abandoned','custom:agentqueuecallerabandon','[syncQueueCallerAbandon][VoiceAgentReport]','agentcompleteAt','complete','agentacw','acwtime','acwTimeout','user:agentcomplete','addVariable','variable','[syncVarSet][VoiceAgentReport]','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosloss','rtpaudioqosrtt','rtpaudioqosrttbridged','sipuri','bridgepeer','bridgepvtcallid','membercalls','memberdynamic','memberinterface','memberlastcall','memberpenalty','memberrealtime','isNil','includes','custom:voiceAgentReport','values','[syncHangup][VoiceAgentReport]','[syncMusicOnHoldStart][VoiceAgentReport]'];(function(_0x2e6b08,_0x3dfb00){var _0x510d96=function(_0x484ffa){while(--_0x484ffa){_0x2e6b08['push'](_0x2e6b08['shift']());}};_0x510d96(++_0x3dfb00);}(_0xdf83,0xd4));var _0x3df8=function(_0x1eca06,_0x2eebe7){_0x1eca06=_0x1eca06-0x0;var _0x2b95d6=_0xdf83[_0x1eca06];return _0x2b95d6;};'use strict';var _=require(_0x3df8('0x0'));var moment=require('moment');var util=require('util');var logger=require(_0x3df8('0x1'))(_0x3df8('0x2'));var ami=require('../ami');var io=require(_0x3df8('0x3'))({'host':_0x3df8('0x4'),'port':0x18eb});function VoiceAgentReport(_0xf32bfc){this['channels']={};this[_0x3df8('0x5')]=_0xf32bfc[_0x3df8('0x5')];this[_0x3df8('0x6')]=_0xf32bfc[_0x3df8('0x6')];this[_0x3df8('0x7')]={};ami['on'](_0x3df8('0x8'),this['syncAgentCalled'][_0x3df8('0x9')](this));ami['on'](_0x3df8('0xa'),this[_0x3df8('0xb')][_0x3df8('0x9')](this));ami['on']('agentringnoanswer',this['syncAgentRingNoAnswer'][_0x3df8('0x9')](this));ami['on'](_0x3df8('0xc'),this[_0x3df8('0xd')][_0x3df8('0x9')](this));ami['on'](_0x3df8('0xe'),this[_0x3df8('0xf')][_0x3df8('0x9')](this));ami['on']('varset',this[_0x3df8('0x10')]['bind'](this));ami['on']('hangup',this[_0x3df8('0x11')][_0x3df8('0x9')](this));ami['on'](_0x3df8('0x12'),this[_0x3df8('0x13')][_0x3df8('0x9')](this));ami['on']('musiconholdstop',this[_0x3df8('0x14')][_0x3df8('0x9')](this));}VoiceAgentReport[_0x3df8('0x15')][_0x3df8('0x16')]=function(_0x151d30,_0x576e10,_0xc36dd){io['to'](_0x151d30)[_0x3df8('0x16')](_0x576e10,_0xc36dd);};VoiceAgentReport[_0x3df8('0x15')][_0x3df8('0x17')]=function(_0x266076){return _0x266076!==null&&!_[_0x3df8('0x18')](_0x266076);};VoiceAgentReport['prototype'][_0x3df8('0x19')]=function(_0x246a3c){try{if(this[_0x3df8('0x17')](_0x246a3c)){if(_[_0x3df8('0x18')](this[_0x3df8('0x1a')][_0x246a3c[_0x3df8('0x1b')]])){this['channels'][_0x246a3c[_0x3df8('0x1b')]]={};}if(_[_0x3df8('0x18')](this[_0x3df8('0x1a')][_0x246a3c[_0x3df8('0x1b')]][_0x246a3c[_0x3df8('0x1c')]])){this[_0x3df8('0x1a')][_0x246a3c[_0x3df8('0x1b')]][_0x246a3c[_0x3df8('0x1c')]]={'agentcalledAt':moment()[_0x3df8('0x1d')](_0x3df8('0x1e')),'lastevent':_0x3df8('0x1f'),'variables':this[_0x3df8('0x7')][_0x246a3c['uniqueid']],'type':this[_0x3df8('0x5')][_0x246a3c['queue']]?this[_0x3df8('0x5')][_0x246a3c[_0x3df8('0x20')]][_0x3df8('0x21')]||'inbound':_0x3df8('0x22')};}_['merge'](this[_0x3df8('0x1a')][_0x246a3c[_0x3df8('0x1b')]][_0x246a3c['destuniqueid']],_[_0x3df8('0x23')](_0x246a3c,[_0x3df8('0x24'),_0x3df8('0x25')]));ami[_0x3df8('0x16')](_0x3df8('0x26'),this[_0x3df8('0x1a')][_0x246a3c[_0x3df8('0x1b')]][_0x246a3c['destuniqueid']]);this['emit'](util['format']('user:%s',_0x246a3c[_0x3df8('0x27')]),'user:called',this[_0x3df8('0x1a')][_0x246a3c[_0x3df8('0x1b')]][_0x246a3c[_0x3df8('0x1c')]]);}}catch(_0x2d2c38){logger['error'](_0x3df8('0x28'),util[_0x3df8('0x29')](_0x2d2c38,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0x3df8('0xb')]=function(_0x15996b){try{if(this[_0x3df8('0x17')](_0x15996b)){if(this[_0x3df8('0x1a')][_0x15996b[_0x3df8('0x1b')]]){for(var _0x17bc4f in this['channels'][_0x15996b[_0x3df8('0x1b')]]){if(this['channels'][_0x15996b[_0x3df8('0x1b')]][_0x3df8('0x2a')](_0x17bc4f)){if(_0x15996b[_0x3df8('0x1c')]===_0x17bc4f){this['channels'][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f][_0x3df8('0x2b')]=moment()[_0x3df8('0x1d')](_0x3df8('0x1e'));this[_0x3df8('0x1a')][_0x15996b['uniqueid']][_0x17bc4f]['lastevent']=_0x3df8('0x2c');this[_0x3df8('0x1a')][_0x15996b['uniqueid']][_0x17bc4f]['holdtime']=_0x15996b[_0x3df8('0x2d')];this[_0x3df8('0x1a')][_0x15996b['uniqueid']][_0x17bc4f][_0x3df8('0x2e')]=_0x15996b[_0x3df8('0x2e')];this[_0x3df8('0x1a')][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f][_0x3df8('0x2f')]=_0x15996b[_0x3df8('0x2f')];this[_0x3df8('0x1a')][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f][_0x3df8('0x30')]=_0x15996b[_0x3df8('0x30')];this[_0x3df8('0x1a')][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f]['destchannelstatedesc']=_0x15996b[_0x3df8('0x31')];_[_0x3df8('0x32')](this[_0x3df8('0x6')][_0x15996b[_0x3df8('0x33')]],_[_0x3df8('0x34')](_0x15996b,[_0x3df8('0x20'),_0x3df8('0x35')]));this[_0x3df8('0x16')](util[_0x3df8('0x1d')](_0x3df8('0x36'),_0x15996b[_0x3df8('0x27')]),_0x3df8('0x37'),this[_0x3df8('0x1a')][_0x15996b['uniqueid']][_0x15996b[_0x3df8('0x1c')]]);ami[_0x3df8('0x16')](_0x3df8('0x38'),this['channels'][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f]);}else if(this[_0x3df8('0x17')](this[_0x3df8('0x1a')][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f][_0x3df8('0x39')])){this['channels'][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f]['agentringnoanswer']=!![];this[_0x3df8('0x1a')][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f]['agentringnoanswerAt']=moment()[_0x3df8('0x1d')](_0x3df8('0x1e'));this[_0x3df8('0x1a')][_0x15996b['uniqueid']][_0x17bc4f]['reason']=_0x3df8('0x3a');this[_0x3df8('0x1a')][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f]['lastevent']=_0x3df8('0x3a');this[_0x3df8('0x1a')][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f]['answeredelsewheredestinationuniqueid']=_0x15996b[_0x3df8('0x1c')];this[_0x3df8('0x1a')][_0x15996b['uniqueid']][_0x17bc4f][_0x3df8('0x3b')]=_0x15996b[_0x3df8('0x27')];ami['emit'](_0x3df8('0x3c'),this[_0x3df8('0x1a')][_0x15996b[_0x3df8('0x1b')]][_0x17bc4f]);}}}}}}catch(_0x228a8d){logger['error'](_0x3df8('0x3d'),util[_0x3df8('0x29')](_0x228a8d,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3df8('0x15')][_0x3df8('0x3e')]=function(_0x3a33fc){try{if(this[_0x3df8('0x17')](_0x3a33fc)){if(this['channels'][_0x3a33fc['uniqueid']]&&this['channels'][_0x3a33fc[_0x3df8('0x1b')]][_0x3a33fc[_0x3df8('0x1c')]]&&_[_0x3df8('0x18')](this['channels'][_0x3a33fc['uniqueid']][_0x3a33fc[_0x3df8('0x1c')]][_0x3df8('0x39')])){this['channels'][_0x3a33fc['uniqueid']][_0x3a33fc[_0x3df8('0x1c')]][_0x3df8('0x39')]=!![];this[_0x3df8('0x1a')][_0x3a33fc[_0x3df8('0x1b')]][_0x3a33fc[_0x3df8('0x1c')]][_0x3df8('0x3f')]=moment()[_0x3df8('0x1d')](_0x3df8('0x1e'));this[_0x3df8('0x1a')][_0x3a33fc[_0x3df8('0x1b')]][_0x3a33fc[_0x3df8('0x1c')]][_0x3df8('0x40')]='rejected';this['channels'][_0x3a33fc[_0x3df8('0x1b')]][_0x3a33fc[_0x3df8('0x1c')]][_0x3df8('0x41')]=_0x3df8('0x42');ami[_0x3df8('0x16')](_0x3df8('0x43'),this[_0x3df8('0x1a')][_0x3a33fc[_0x3df8('0x1b')]][_0x3a33fc[_0x3df8('0x1c')]]);}}}catch(_0xfb2ebe){logger[_0x3df8('0x44')](_0x3df8('0x45'),util[_0x3df8('0x29')](_0xfb2ebe,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3df8('0x15')]['syncQueueCallerAbandon']=function(_0x1cadea){try{if(this['isNotNull'](_0x1cadea)){if(this[_0x3df8('0x1a')][_0x1cadea[_0x3df8('0x1b')]]){for(var _0x2f36c6 in this['channels'][_0x1cadea[_0x3df8('0x1b')]]){if(this['channels'][_0x1cadea['uniqueid']][_0x3df8('0x2a')](_0x2f36c6)&&_[_0x3df8('0x18')](this[_0x3df8('0x1a')][_0x1cadea[_0x3df8('0x1b')]][_0x2f36c6][_0x3df8('0x39')])){this['channels'][_0x1cadea['uniqueid']][_0x2f36c6][_0x3df8('0x39')]=!![];this[_0x3df8('0x1a')][_0x1cadea[_0x3df8('0x1b')]][_0x2f36c6][_0x3df8('0x3f')]=moment()[_0x3df8('0x1d')]('YYYY-MM-DD\x20HH:mm:ss');this[_0x3df8('0x1a')][_0x1cadea[_0x3df8('0x1b')]][_0x2f36c6]['reason']=_0x3df8('0x46');this['channels'][_0x1cadea['uniqueid']][_0x2f36c6]['lastevent']='abandoned';ami[_0x3df8('0x16')](_0x3df8('0x47'),this[_0x3df8('0x1a')][_0x1cadea['uniqueid']][_0x2f36c6]);}}}}}catch(_0x8f2350){logger[_0x3df8('0x44')](_0x3df8('0x48'),util['inspect'](_0x8f2350,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0x3df8('0xf')]=function(_0x207d82){try{if(this[_0x3df8('0x17')](_0x207d82)){if(this['channels'][_0x207d82[_0x3df8('0x1b')]]&&this[_0x3df8('0x1a')][_0x207d82[_0x3df8('0x1b')]][_0x207d82[_0x3df8('0x1c')]]&&_[_0x3df8('0x18')](this[_0x3df8('0x1a')][_0x207d82[_0x3df8('0x1b')]][_0x207d82[_0x3df8('0x1c')]][_0x3df8('0xe')])){this['channels'][_0x207d82[_0x3df8('0x1b')]][_0x207d82[_0x3df8('0x1c')]][_0x3df8('0xe')]=!![];this[_0x3df8('0x1a')][_0x207d82[_0x3df8('0x1b')]][_0x207d82['destuniqueid']][_0x3df8('0x49')]=moment()[_0x3df8('0x1d')]('YYYY-MM-DD\x20HH:mm:ss');this[_0x3df8('0x1a')][_0x207d82[_0x3df8('0x1b')]][_0x207d82[_0x3df8('0x1c')]]['lastevent']=_0x3df8('0x4a');this['channels'][_0x207d82[_0x3df8('0x1b')]][_0x207d82[_0x3df8('0x1c')]]['talktime']=_0x207d82['talktime'];this[_0x3df8('0x1a')][_0x207d82[_0x3df8('0x1b')]][_0x207d82['destuniqueid']][_0x3df8('0x40')]=_0x207d82['reason'];if(this[_0x3df8('0x5')][_0x207d82[_0x3df8('0x20')]]&&this[_0x3df8('0x5')][_0x207d82[_0x3df8('0x20')]]['acw']){this[_0x3df8('0x1a')][_0x207d82[_0x3df8('0x1b')]][_0x207d82['destuniqueid']][_0x3df8('0x4b')]=!![];this[_0x3df8('0x1a')][_0x207d82['uniqueid']][_0x207d82[_0x3df8('0x1c')]][_0x3df8('0x4c')]=this[_0x3df8('0x5')][_0x207d82[_0x3df8('0x20')]][_0x3df8('0x4d')];}this[_0x3df8('0x6')][_0x207d82[_0x3df8('0x33')]]=_[_0x3df8('0x23')](this[_0x3df8('0x6')][_0x207d82[_0x3df8('0x33')]],[_0x3df8('0x20'),_0x3df8('0x35')]);this[_0x3df8('0x16')](util['format']('user:%s',_0x207d82[_0x3df8('0x27')]),_0x3df8('0x4e'),this[_0x3df8('0x1a')][_0x207d82[_0x3df8('0x1b')]][_0x207d82[_0x3df8('0x1c')]]);ami[_0x3df8('0x16')]('custom:agentcomplete',this[_0x3df8('0x1a')][_0x207d82['uniqueid']][_0x207d82[_0x3df8('0x1c')]]);}}}catch(_0x488349){logger[_0x3df8('0x44')]('[syncAgentComplete][VoiceAgentReport]',util['inspect'](_0x488349,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3df8('0x15')]['syncVarSet']=function(_0x31db40){try{if(this[_0x3df8('0x17')](_0x31db40)){this[_0x3df8('0x4f')](_0x31db40[_0x3df8('0x1b')],_['keys'](_0x31db40[_0x3df8('0x50')])[0x0],_0x31db40['value']);if(this[_0x3df8('0x1a')][_0x31db40[_0x3df8('0x1b')]]){for(var _0x1457de in this[_0x3df8('0x1a')][_0x31db40[_0x3df8('0x1b')]]){if(this[_0x3df8('0x1a')][_0x31db40[_0x3df8('0x1b')]][_0x3df8('0x2a')](_0x1457de)){if(_[_0x3df8('0x18')](this[_0x3df8('0x1a')][_0x31db40['uniqueid']][_0x1457de][_0x3df8('0x7')])){this[_0x3df8('0x1a')][_0x31db40[_0x3df8('0x1b')]][_0x1457de][_0x3df8('0x7')]={};}this['channels'][_0x31db40['uniqueid']][_0x1457de][_0x3df8('0x7')]=this['variables'][_0x31db40[_0x3df8('0x1b')]];}}}}}catch(_0x10f909){logger['error'](_0x3df8('0x51'),util[_0x3df8('0x29')](_0x10f909,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3df8('0x15')]['addVariable']=function(_0x606bb2,_0x10c74e,_0x32ce71){var _0x360223=[_0x3df8('0x52'),_0x3df8('0x53'),_0x3df8('0x54'),'rtpaudioqosjitterbridged',_0x3df8('0x55'),'rtpaudioqoslossbridged',_0x3df8('0x56'),_0x3df8('0x57'),'sipcallid',_0x3df8('0x58'),_0x3df8('0x59'),_0x3df8('0x5a'),_0x3df8('0x5b'),_0x3df8('0x5c'),_0x3df8('0x5d'),_0x3df8('0x5e'),'membername',_0x3df8('0x5f'),_0x3df8('0x60')];if(!_[_0x3df8('0x61')](_0x10c74e)&&!_[_0x3df8('0x62')](_0x360223,_0x10c74e)){if(_[_0x3df8('0x18')](this[_0x3df8('0x7')][_0x606bb2])){this[_0x3df8('0x7')][_0x606bb2]={};}this[_0x3df8('0x7')][_0x606bb2][_0x10c74e]=_0x32ce71;}};VoiceAgentReport[_0x3df8('0x15')]['syncHangup']=function(_0x2e2420){try{if(this['isNotNull'](_0x2e2420)){if(this[_0x3df8('0x1a')][_0x2e2420['uniqueid']]){ami['emit'](_0x3df8('0x63'),_[_0x3df8('0x64')](this[_0x3df8('0x1a')][_0x2e2420[_0x3df8('0x1b')]]));delete this[_0x3df8('0x1a')][_0x2e2420[_0x3df8('0x1b')]];}if(this[_0x3df8('0x7')][_0x2e2420[_0x3df8('0x1b')]]){delete this[_0x3df8('0x7')][_0x2e2420['uniqueid']];}}}catch(_0x5b9d72){logger[_0x3df8('0x44')](_0x3df8('0x65'),util['inspect'](_0x5b9d72,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0x3df8('0x13')]=function(_0x19d155){try{if(this['isNotNull'](_0x19d155)){if(this[_0x3df8('0x1a')][_0x19d155['uniqueid']]){}}}catch(_0x1a5670){logger[_0x3df8('0x44')](_0x3df8('0x66'),util[_0x3df8('0x29')](_0x1a5670,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0x3df8('0x14')]=function(_0x15bb3c){try{if(this[_0x3df8('0x17')](_0x15bb3c)){if(this[_0x3df8('0x1a')][_0x15bb3c[_0x3df8('0x1b')]]){}}}catch(_0x1f1eb4){logger[_0x3df8('0x44')](_0x3df8('0x67'),util['inspect'](_0x1f1eb4,{'showHidden':![],'depth':null}));}};module[_0x3df8('0x68')]=VoiceAgentReport;
\ No newline at end of file
+var _0xab1f=['acwtime','acwTimeout','user:agentcomplete','custom:agentcomplete','[syncAgentComplete][VoiceAgentReport]','addVariable','keys','variable','value','[syncVarSet][VoiceAgentReport]','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','memberdynamic','memberlastcall','memberpenalty','memberrealtime','isNil','includes','custom:voiceAgentReport','values','[syncHangup][VoiceAgentReport]','syncMusicOnHoldStart','[syncMusicOnHoldStart][VoiceAgentReport]','[syncMusicOnHoldStop][VoiceAgentReport]','exports','lodash','util','../../../config/logger','ami','localhost','channels','voiceQueues','agents','variables','agentcalled','bind','agentconnect','syncAgentConnect','syncAgentRingNoAnswer','queuecallerabandon','syncQueueCallerAbandon','syncAgentComplete','varset','syncVarSet','hangup','syncHangup','musiconholdstart','musiconholdstop','syncMusicOnHoldStop','prototype','emit','isNotNull','isUndefined','syncAgentCalled','uniqueid','destuniqueid','format','YYYY-MM-DD\x20HH:mm:ss','called','queue','type','inbound','merge','omit','event','privilege','user:%s','membername','user:called','error','[syncAgentCalled][VoiceAgentReport]','inspect','hasOwnProperty','agentconnectAt','connect','holdtime','connectedlinenum','connectedlinename','destchannelstate','destchannelstatedesc','interface','destconnectedlinenum','user:agentconnect','custom:agentconnect','agentringnoanswer','agentringnoanswerAt','reason','answered_elsewhere','lastevent','answeredelsewheredestinationuniqueid','answeredelsewheremembername','[syncAgentConnect][VoiceAgentReport]','rejected','custom:agentqueuecallerabandon','agentcomplete','agentcompleteAt','complete','talktime','agentacw'];(function(_0x4a656b,_0x20d31a){var _0x334c62=function(_0x945dc){while(--_0x945dc){_0x4a656b['push'](_0x4a656b['shift']());}};_0x334c62(++_0x20d31a);}(_0xab1f,0x166));var _0xfab1=function(_0x3676a5,_0x4103fe){_0x3676a5=_0x3676a5-0x0;var _0x208272=_0xab1f[_0x3676a5];return _0x208272;};'use strict';var _=require(_0xfab1('0x0'));var moment=require('moment');var util=require(_0xfab1('0x1'));var logger=require(_0xfab1('0x2'))(_0xfab1('0x3'));var ami=require('../ami');var io=require('socket.io-emitter')({'host':_0xfab1('0x4'),'port':0x18eb});function VoiceAgentReport(_0x5de42d){this[_0xfab1('0x5')]={};this[_0xfab1('0x6')]=_0x5de42d['voiceQueues'];this['agents']=_0x5de42d[_0xfab1('0x7')];this[_0xfab1('0x8')]={};ami['on'](_0xfab1('0x9'),this['syncAgentCalled'][_0xfab1('0xa')](this));ami['on'](_0xfab1('0xb'),this[_0xfab1('0xc')][_0xfab1('0xa')](this));ami['on']('agentringnoanswer',this[_0xfab1('0xd')][_0xfab1('0xa')](this));ami['on'](_0xfab1('0xe'),this[_0xfab1('0xf')]['bind'](this));ami['on']('agentcomplete',this[_0xfab1('0x10')][_0xfab1('0xa')](this));ami['on'](_0xfab1('0x11'),this[_0xfab1('0x12')][_0xfab1('0xa')](this));ami['on'](_0xfab1('0x13'),this[_0xfab1('0x14')][_0xfab1('0xa')](this));ami['on'](_0xfab1('0x15'),this['syncMusicOnHoldStart'][_0xfab1('0xa')](this));ami['on'](_0xfab1('0x16'),this[_0xfab1('0x17')][_0xfab1('0xa')](this));}VoiceAgentReport[_0xfab1('0x18')][_0xfab1('0x19')]=function(_0x1b3266,_0x253c06,_0x2162d9){io['to'](_0x1b3266)[_0xfab1('0x19')](_0x253c06,_0x2162d9);};VoiceAgentReport[_0xfab1('0x18')][_0xfab1('0x1a')]=function(_0x1e1682){return _0x1e1682!==null&&!_[_0xfab1('0x1b')](_0x1e1682);};VoiceAgentReport[_0xfab1('0x18')][_0xfab1('0x1c')]=function(_0x369679){try{if(this['isNotNull'](_0x369679)){if(_['isUndefined'](this[_0xfab1('0x5')][_0x369679[_0xfab1('0x1d')]])){this[_0xfab1('0x5')][_0x369679['uniqueid']]={};}if(_['isUndefined'](this[_0xfab1('0x5')][_0x369679[_0xfab1('0x1d')]][_0x369679[_0xfab1('0x1e')]])){this['channels'][_0x369679[_0xfab1('0x1d')]][_0x369679['destuniqueid']]={'agentcalledAt':moment()[_0xfab1('0x1f')](_0xfab1('0x20')),'lastevent':_0xfab1('0x21'),'variables':this[_0xfab1('0x8')][_0x369679[_0xfab1('0x1d')]],'type':this['voiceQueues'][_0x369679[_0xfab1('0x22')]]?this[_0xfab1('0x6')][_0x369679[_0xfab1('0x22')]][_0xfab1('0x23')]||_0xfab1('0x24'):_0xfab1('0x24')};}_[_0xfab1('0x25')](this[_0xfab1('0x5')][_0x369679[_0xfab1('0x1d')]][_0x369679['destuniqueid']],_[_0xfab1('0x26')](_0x369679,[_0xfab1('0x27'),_0xfab1('0x28')]));ami[_0xfab1('0x19')]('custom:agentcalled',this[_0xfab1('0x5')][_0x369679[_0xfab1('0x1d')]][_0x369679[_0xfab1('0x1e')]]);this[_0xfab1('0x19')](util['format'](_0xfab1('0x29'),_0x369679[_0xfab1('0x2a')]),_0xfab1('0x2b'),this['channels'][_0x369679['uniqueid']][_0x369679[_0xfab1('0x1e')]]);}}catch(_0x44e802){logger[_0xfab1('0x2c')](_0xfab1('0x2d'),util[_0xfab1('0x2e')](_0x44e802,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xfab1('0x18')][_0xfab1('0xc')]=function(_0x150f20){try{if(this[_0xfab1('0x1a')](_0x150f20)){if(this['channels'][_0x150f20[_0xfab1('0x1d')]]){for(var _0x1b983f in this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]]){if(this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0xfab1('0x2f')](_0x1b983f)){if(_0x150f20['destuniqueid']===_0x1b983f){this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x1b983f][_0xfab1('0x30')]=moment()[_0xfab1('0x1f')](_0xfab1('0x20'));this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x1b983f]['lastevent']=_0xfab1('0x31');this['channels'][_0x150f20[_0xfab1('0x1d')]][_0x1b983f][_0xfab1('0x32')]=_0x150f20[_0xfab1('0x32')];this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x1b983f][_0xfab1('0x33')]=_0x150f20[_0xfab1('0x33')];this['channels'][_0x150f20[_0xfab1('0x1d')]][_0x1b983f][_0xfab1('0x34')]=_0x150f20[_0xfab1('0x34')];this['channels'][_0x150f20[_0xfab1('0x1d')]][_0x1b983f][_0xfab1('0x35')]=_0x150f20['destchannelstate'];this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x1b983f][_0xfab1('0x36')]=_0x150f20[_0xfab1('0x36')];_[_0xfab1('0x25')](this['agents'][_0x150f20[_0xfab1('0x37')]],_['pick'](_0x150f20,[_0xfab1('0x22'),_0xfab1('0x38')]));this['emit'](util['format'](_0xfab1('0x29'),_0x150f20[_0xfab1('0x2a')]),_0xfab1('0x39'),this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x150f20[_0xfab1('0x1e')]]);ami['emit'](_0xfab1('0x3a'),this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x1b983f]);}else if(this[_0xfab1('0x1a')](this['channels'][_0x150f20['uniqueid']][_0x1b983f]['agentringnoanswer'])){this[_0xfab1('0x5')][_0x150f20['uniqueid']][_0x1b983f][_0xfab1('0x3b')]=!![];this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x1b983f][_0xfab1('0x3c')]=moment()['format'](_0xfab1('0x20'));this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x1b983f][_0xfab1('0x3d')]=_0xfab1('0x3e');this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x1b983f][_0xfab1('0x3f')]='answered_elsewhere';this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x1b983f][_0xfab1('0x40')]=_0x150f20[_0xfab1('0x1e')];this['channels'][_0x150f20['uniqueid']][_0x1b983f][_0xfab1('0x41')]=_0x150f20['membername'];ami['emit']('custom:agentansweredelsewhere',this[_0xfab1('0x5')][_0x150f20[_0xfab1('0x1d')]][_0x1b983f]);}}}}}}catch(_0x371e2a){logger[_0xfab1('0x2c')](_0xfab1('0x42'),util['inspect'](_0x371e2a,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xfab1('0x18')]['syncAgentRingNoAnswer']=function(_0x2d727c){try{if(this[_0xfab1('0x1a')](_0x2d727c)){if(this[_0xfab1('0x5')][_0x2d727c[_0xfab1('0x1d')]]&&this[_0xfab1('0x5')][_0x2d727c[_0xfab1('0x1d')]][_0x2d727c[_0xfab1('0x1e')]]&&_[_0xfab1('0x1b')](this[_0xfab1('0x5')][_0x2d727c[_0xfab1('0x1d')]][_0x2d727c[_0xfab1('0x1e')]]['agentringnoanswer'])){this[_0xfab1('0x5')][_0x2d727c[_0xfab1('0x1d')]][_0x2d727c[_0xfab1('0x1e')]][_0xfab1('0x3b')]=!![];this[_0xfab1('0x5')][_0x2d727c[_0xfab1('0x1d')]][_0x2d727c[_0xfab1('0x1e')]][_0xfab1('0x3c')]=moment()[_0xfab1('0x1f')](_0xfab1('0x20'));this['channels'][_0x2d727c[_0xfab1('0x1d')]][_0x2d727c['destuniqueid']][_0xfab1('0x3d')]=_0xfab1('0x43');this[_0xfab1('0x5')][_0x2d727c['uniqueid']][_0x2d727c['destuniqueid']]['lastevent']=_0xfab1('0x43');ami['emit']('custom:agentringnoanswer',this[_0xfab1('0x5')][_0x2d727c[_0xfab1('0x1d')]][_0x2d727c[_0xfab1('0x1e')]]);}}}catch(_0x53bb87){logger[_0xfab1('0x2c')]('[syncAgentRingNoAnswer][VoiceAgentReport]',util[_0xfab1('0x2e')](_0x53bb87,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xfab1('0x18')][_0xfab1('0xf')]=function(_0x2085f2){try{if(this[_0xfab1('0x1a')](_0x2085f2)){if(this['channels'][_0x2085f2[_0xfab1('0x1d')]]){for(var _0x470ba8 in this[_0xfab1('0x5')][_0x2085f2[_0xfab1('0x1d')]]){if(this[_0xfab1('0x5')][_0x2085f2[_0xfab1('0x1d')]][_0xfab1('0x2f')](_0x470ba8)&&_['isUndefined'](this[_0xfab1('0x5')][_0x2085f2[_0xfab1('0x1d')]][_0x470ba8][_0xfab1('0x3b')])){this[_0xfab1('0x5')][_0x2085f2[_0xfab1('0x1d')]][_0x470ba8][_0xfab1('0x3b')]=!![];this[_0xfab1('0x5')][_0x2085f2[_0xfab1('0x1d')]][_0x470ba8][_0xfab1('0x3c')]=moment()['format'](_0xfab1('0x20'));this['channels'][_0x2085f2[_0xfab1('0x1d')]][_0x470ba8]['reason']='abandoned';this[_0xfab1('0x5')][_0x2085f2['uniqueid']][_0x470ba8][_0xfab1('0x3f')]='abandoned';ami[_0xfab1('0x19')](_0xfab1('0x44'),this['channels'][_0x2085f2['uniqueid']][_0x470ba8]);}}}}}catch(_0x296ab3){logger[_0xfab1('0x2c')]('[syncQueueCallerAbandon][VoiceAgentReport]',util[_0xfab1('0x2e')](_0x296ab3,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xfab1('0x18')][_0xfab1('0x10')]=function(_0x3cf8ce){try{if(this[_0xfab1('0x1a')](_0x3cf8ce)){if(this[_0xfab1('0x5')][_0x3cf8ce[_0xfab1('0x1d')]]&&this[_0xfab1('0x5')][_0x3cf8ce[_0xfab1('0x1d')]][_0x3cf8ce[_0xfab1('0x1e')]]&&_[_0xfab1('0x1b')](this[_0xfab1('0x5')][_0x3cf8ce['uniqueid']][_0x3cf8ce[_0xfab1('0x1e')]][_0xfab1('0x45')])){this['channels'][_0x3cf8ce[_0xfab1('0x1d')]][_0x3cf8ce[_0xfab1('0x1e')]][_0xfab1('0x45')]=!![];this[_0xfab1('0x5')][_0x3cf8ce[_0xfab1('0x1d')]][_0x3cf8ce[_0xfab1('0x1e')]][_0xfab1('0x46')]=moment()[_0xfab1('0x1f')](_0xfab1('0x20'));this[_0xfab1('0x5')][_0x3cf8ce[_0xfab1('0x1d')]][_0x3cf8ce[_0xfab1('0x1e')]][_0xfab1('0x3f')]=_0xfab1('0x47');this[_0xfab1('0x5')][_0x3cf8ce[_0xfab1('0x1d')]][_0x3cf8ce[_0xfab1('0x1e')]][_0xfab1('0x48')]=_0x3cf8ce[_0xfab1('0x48')];this[_0xfab1('0x5')][_0x3cf8ce[_0xfab1('0x1d')]][_0x3cf8ce[_0xfab1('0x1e')]][_0xfab1('0x3d')]=_0x3cf8ce['reason'];if(this['voiceQueues'][_0x3cf8ce[_0xfab1('0x22')]]&&this[_0xfab1('0x6')][_0x3cf8ce[_0xfab1('0x22')]]['acw']){this[_0xfab1('0x5')][_0x3cf8ce[_0xfab1('0x1d')]][_0x3cf8ce['destuniqueid']][_0xfab1('0x49')]=!![];this[_0xfab1('0x5')][_0x3cf8ce[_0xfab1('0x1d')]][_0x3cf8ce[_0xfab1('0x1e')]][_0xfab1('0x4a')]=this[_0xfab1('0x6')][_0x3cf8ce[_0xfab1('0x22')]][_0xfab1('0x4b')];}this[_0xfab1('0x7')][_0x3cf8ce[_0xfab1('0x37')]]=_[_0xfab1('0x26')](this['agents'][_0x3cf8ce['interface']],['queue','destconnectedlinenum']);this[_0xfab1('0x19')](util[_0xfab1('0x1f')](_0xfab1('0x29'),_0x3cf8ce[_0xfab1('0x2a')]),_0xfab1('0x4c'),this['channels'][_0x3cf8ce[_0xfab1('0x1d')]][_0x3cf8ce['destuniqueid']]);ami['emit'](_0xfab1('0x4d'),this[_0xfab1('0x5')][_0x3cf8ce[_0xfab1('0x1d')]][_0x3cf8ce[_0xfab1('0x1e')]]);}}}catch(_0x37b472){logger[_0xfab1('0x2c')](_0xfab1('0x4e'),util[_0xfab1('0x2e')](_0x37b472,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xfab1('0x18')][_0xfab1('0x12')]=function(_0x61b448){try{if(this[_0xfab1('0x1a')](_0x61b448)){this[_0xfab1('0x4f')](_0x61b448[_0xfab1('0x1d')],_[_0xfab1('0x50')](_0x61b448[_0xfab1('0x51')])[0x0],_0x61b448[_0xfab1('0x52')]);if(this[_0xfab1('0x5')][_0x61b448[_0xfab1('0x1d')]]){for(var _0x41ec52 in this[_0xfab1('0x5')][_0x61b448['uniqueid']]){if(this[_0xfab1('0x5')][_0x61b448[_0xfab1('0x1d')]][_0xfab1('0x2f')](_0x41ec52)){if(_[_0xfab1('0x1b')](this[_0xfab1('0x5')][_0x61b448[_0xfab1('0x1d')]][_0x41ec52][_0xfab1('0x8')])){this['channels'][_0x61b448[_0xfab1('0x1d')]][_0x41ec52][_0xfab1('0x8')]={};}this[_0xfab1('0x5')][_0x61b448[_0xfab1('0x1d')]][_0x41ec52][_0xfab1('0x8')]=this['variables'][_0x61b448[_0xfab1('0x1d')]];}}}}}catch(_0x41b202){logger['error'](_0xfab1('0x53'),util[_0xfab1('0x2e')](_0x41b202,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype']['addVariable']=function(_0x72367c,_0x1953c3,_0x5e011a){var _0x5a3af5=[_0xfab1('0x54'),_0xfab1('0x55'),_0xfab1('0x56'),_0xfab1('0x57'),_0xfab1('0x58'),_0xfab1('0x59'),_0xfab1('0x5a'),_0xfab1('0x5b'),_0xfab1('0x5c'),_0xfab1('0x5d'),_0xfab1('0x5e'),'bridgepvtcallid','membercalls',_0xfab1('0x5f'),'memberinterface',_0xfab1('0x60'),_0xfab1('0x2a'),_0xfab1('0x61'),_0xfab1('0x62')];if(!_[_0xfab1('0x63')](_0x1953c3)&&!_[_0xfab1('0x64')](_0x5a3af5,_0x1953c3)){if(_[_0xfab1('0x1b')](this[_0xfab1('0x8')][_0x72367c])){this['variables'][_0x72367c]={};}this[_0xfab1('0x8')][_0x72367c][_0x1953c3]=_0x5e011a;}};VoiceAgentReport[_0xfab1('0x18')][_0xfab1('0x14')]=function(_0x5c40b0){try{if(this[_0xfab1('0x1a')](_0x5c40b0)){if(this['channels'][_0x5c40b0[_0xfab1('0x1d')]]){ami[_0xfab1('0x19')](_0xfab1('0x65'),_[_0xfab1('0x66')](this[_0xfab1('0x5')][_0x5c40b0[_0xfab1('0x1d')]]));delete this[_0xfab1('0x5')][_0x5c40b0['uniqueid']];}if(this[_0xfab1('0x8')][_0x5c40b0[_0xfab1('0x1d')]]){delete this[_0xfab1('0x8')][_0x5c40b0[_0xfab1('0x1d')]];}}}catch(_0x19829b){logger['error'](_0xfab1('0x67'),util['inspect'](_0x19829b,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0xfab1('0x68')]=function(_0x3479fb){try{if(this['isNotNull'](_0x3479fb)){if(this[_0xfab1('0x5')][_0x3479fb['uniqueid']]){}}}catch(_0x10798a){logger[_0xfab1('0x2c')](_0xfab1('0x69'),util[_0xfab1('0x2e')](_0x10798a,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xfab1('0x18')][_0xfab1('0x17')]=function(_0x8805fb){try{if(this['isNotNull'](_0x8805fb)){if(this[_0xfab1('0x5')][_0x8805fb[_0xfab1('0x1d')]]){}}}catch(_0x264c0c){logger[_0xfab1('0x2c')](_0xfab1('0x6a'),util[_0xfab1('0x2e')](_0x264c0c,{'showHidden':![],'depth':null}));}};module[_0xfab1('0x6b')]=VoiceAgentReport;
\ No newline at end of file
index c27fb62..ac11e95 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6d8b=['application','applicationdata','appdata','toLowerCase','duration','seconds','disposition','lastapplication','lastdata','startsWith','cdr(','answered','answertime','calleridnum','connectedlinenum','connectedlinename','calleridname','destinationchannel','UserId','membername','[syncNewState][VoiceCallReport]','syncMixMonitorFilename','monitor','endsWith','.wav49','replace','.WAV','monitorFilename','isNil','monitors','rec','syncVarSet','variable','mixmonitor_filename','value','xmd-phone','xmd-callerid','callerid','type','xmd-queue','xmcs-queue','sipcallid','parse','[syncVarSet][VoiceCallReport]','endtime','diff','holdtime','billableseconds','omit','destconnectedlinenum','custom:voiceCallReport','[syncHangup][VoiceCallReport]','syncAttendedTransfer','transfereeuniqueid','transfercalleridnum','origtransferercalleridnum','transferconnectedlinenum','transfertargetcalleridnum','origtransfererchannel','[syncAttendedTransfer][VoiceCallReport]','transfereecalleridnum','extension','transfererchannel','[syncBlindTransfer][VoiceCallReport]','mohstarttime','[syncMusicOnHoldStart][VoiceCallReport]','mohtime','milliseconds','[syncMusicOnHoldStop][VoiceCallReport]','exports','lodash','moment','util','../../../config/logger','ami','../model/channel','unknown','busy','invalid','unavailable','ringing','ringinuse','onhold','set','queue','agi','dial','voicemail','NO\x20ANSWER','FAILED','BUSY','socket.io-emitter','channels','agents','coreshowchannel','syncNewExten','newexten','bind','newchannel','syncNewChannel','newstate','syncNewState','varset','syncHangup','newcallerid','syncNewCallerId','attendedtransfer','blindtransfer','syncBlindTransfer','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','actionCoreShowChannels','catch','log','prototype','isNotNull','emit','uniqueid','linkedid','isUndefined','merge','pick','keys','error','[syncNewCallerId][VoiceCallReport]','inspect','channel','OutgoingSpoolFailed','starttime','YYYY-MM-DD\x20HH:mm:ss','toNumber','channelstate','context','from-sip','split','exten','format','user:%s','name','user:agentconnect','accountcode','[syncNewChannel][VoiceCallReport]'];(function(_0x4258c0,_0x1c90f3){var _0x2b860b=function(_0x30bb40){while(--_0x30bb40){_0x4258c0['push'](_0x4258c0['shift']());}};_0x2b860b(++_0x1c90f3);}(_0x6d8b,0x166));var _0xb6d8=function(_0x149b26,_0x35332e){_0x149b26=_0x149b26-0x0;var _0x2b2688=_0x6d8b[_0x149b26];return _0x2b2688;};'use strict';var BPromise=require('bluebird');var _=require(_0xb6d8('0x0'));var moment=require(_0xb6d8('0x1'));var util=require(_0xb6d8('0x2'));var path=require('path');var logger=require(_0xb6d8('0x3'))(_0xb6d8('0x4'));var ami=require('../ami');var Channel=require(_0xb6d8('0x5'));var statusDesc=[_0xb6d8('0x6'),'not_inuse','inuse',_0xb6d8('0x7'),_0xb6d8('0x8'),_0xb6d8('0x9'),_0xb6d8('0xa'),_0xb6d8('0xb'),_0xb6d8('0xc')];var applications=[_0xb6d8('0xd'),_0xb6d8('0xe'),_0xb6d8('0xf'),_0xb6d8('0x10'),'playback',_0xb6d8('0x11')];var dispositions=[_0xb6d8('0x12'),_0xb6d8('0x13'),_0xb6d8('0x13'),_0xb6d8('0x12'),_0xb6d8('0x12'),_0xb6d8('0x12'),'ANSWERED',_0xb6d8('0x14'),_0xb6d8('0x13'),_0xb6d8('0x13'),_0xb6d8('0x13')];var actions={};var io=require(_0xb6d8('0x15'))({'host':'localhost','port':0x18eb});function VoiceCallReport(_0x307c31){this[_0xb6d8('0x16')]=_0x307c31['channels'];this[_0xb6d8('0x17')]=_0x307c31[_0xb6d8('0x17')];ami['on'](_0xb6d8('0x18'),this[_0xb6d8('0x19')]['bind'](this));ami['on'](_0xb6d8('0x1a'),this[_0xb6d8('0x19')][_0xb6d8('0x1b')](this));ami['on'](_0xb6d8('0x1c'),this[_0xb6d8('0x1d')][_0xb6d8('0x1b')](this));ami['on'](_0xb6d8('0x1e'),this[_0xb6d8('0x1f')][_0xb6d8('0x1b')](this));ami['on'](_0xb6d8('0x20'),this['syncVarSet'][_0xb6d8('0x1b')](this));ami['on']('hangup',this[_0xb6d8('0x21')][_0xb6d8('0x1b')](this));ami['on'](_0xb6d8('0x22'),this[_0xb6d8('0x23')]['bind'](this));ami['on'](_0xb6d8('0x24'),this['syncAttendedTransfer'][_0xb6d8('0x1b')](this));ami['on'](_0xb6d8('0x25'),this[_0xb6d8('0x26')][_0xb6d8('0x1b')](this));ami['on'](_0xb6d8('0x27'),this[_0xb6d8('0x28')][_0xb6d8('0x1b')](this));ami['on'](_0xb6d8('0x29'),this[_0xb6d8('0x2a')][_0xb6d8('0x1b')](this));return BPromise['resolve']()['then'](ami[_0xb6d8('0x2b')]())[_0xb6d8('0x2c')](function(_0x2b2ea3){console[_0xb6d8('0x2d')](_0x2b2ea3);});}VoiceCallReport[_0xb6d8('0x2e')][_0xb6d8('0x2f')]=function(_0x471d68){return _0x471d68!==null&&!_['isUndefined'](_0x471d68);};VoiceCallReport[_0xb6d8('0x2e')][_0xb6d8('0x30')]=function(_0x531d9b,_0x7a0af7,_0x3f16ed){io['to'](_0x531d9b)[_0xb6d8('0x30')](_0x7a0af7,_0x3f16ed);};VoiceCallReport[_0xb6d8('0x2e')][_0xb6d8('0x23')]=function(_0x5e56e2){try{if(this[_0xb6d8('0x2f')](_0x5e56e2)){if(_0x5e56e2[_0xb6d8('0x31')]===_0x5e56e2[_0xb6d8('0x32')]){if(!_[_0xb6d8('0x33')](this[_0xb6d8('0x16')][_0x5e56e2[_0xb6d8('0x31')]])){_[_0xb6d8('0x34')](this[_0xb6d8('0x16')][_0x5e56e2[_0xb6d8('0x31')]],_[_0xb6d8('0x35')](_0x5e56e2,_[_0xb6d8('0x36')](this[_0xb6d8('0x16')][_0x5e56e2['uniqueid']])));}}}}catch(_0x56a10f){logger[_0xb6d8('0x37')](_0xb6d8('0x38'),util[_0xb6d8('0x39')](_0x56a10f,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xb6d8('0x2e')]['syncNewChannel']=function(_0x455412){try{if(this[_0xb6d8('0x2f')](_0x455412)){if(_0x455412[_0xb6d8('0x31')]===_0x455412['linkedid']&&_0x455412[_0xb6d8('0x3a')]!=_0xb6d8('0x3b')){if(_[_0xb6d8('0x33')](this[_0xb6d8('0x16')][_0x455412[_0xb6d8('0x31')]])){this[_0xb6d8('0x16')][_0x455412[_0xb6d8('0x31')]]=new Channel();this[_0xb6d8('0x16')][_0x455412['uniqueid']][_0xb6d8('0x3c')]=moment()['format'](_0xb6d8('0x3d'));this[_0xb6d8('0x16')][_0x455412[_0xb6d8('0x31')]]['disposition']=dispositions[_[_0xb6d8('0x3e')](_0x455412[_0xb6d8('0x3f')])];_['merge'](this[_0xb6d8('0x16')][_0x455412[_0xb6d8('0x31')]],_[_0xb6d8('0x35')](_0x455412,_[_0xb6d8('0x36')](this[_0xb6d8('0x16')][_0x455412['uniqueid']])));if(_0x455412[_0xb6d8('0x40')]===_0xb6d8('0x41')){if(this['agents'][_0x455412[_0xb6d8('0x3a')]['split']('-')[0x0]]){this[_0xb6d8('0x17')][_0x455412[_0xb6d8('0x3a')][_0xb6d8('0x42')]('-')[0x0]]['destconnectedlinenum']=_0x455412[_0xb6d8('0x43')];this[_0xb6d8('0x30')](util[_0xb6d8('0x44')](_0xb6d8('0x45'),this['agents'][_0x455412['channel'][_0xb6d8('0x42')]('-')[0x0]][_0xb6d8('0x46')]),_0xb6d8('0x47'),{'destaccountcode':this[_0xb6d8('0x17')][_0x455412[_0xb6d8('0x3a')][_0xb6d8('0x42')]('-')[0x0]][_0xb6d8('0x48')],'destconnectedlinenum':_0x455412[_0xb6d8('0x43')]});}}}}}}catch(_0x48ef8a){logger['error'](_0xb6d8('0x49'),util[_0xb6d8('0x39')](_0x48ef8a,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xb6d8('0x2e')][_0xb6d8('0x19')]=function(_0x381316){try{if(this[_0xb6d8('0x2f')](_0x381316)){if(_0x381316[_0xb6d8('0x31')]===_0x381316[_0xb6d8('0x32')]&&_0x381316[_0xb6d8('0x43')]!='h'&&_0x381316[_0xb6d8('0x3a')]!=_0xb6d8('0x3b')){_0x381316[_0xb6d8('0x4a')]=_0x381316[_0xb6d8('0x4a')]['toLowerCase']();_0x381316[_0xb6d8('0x4b')]=(_0x381316[_0xb6d8('0x4c')]||_0x381316[_0xb6d8('0x4b')])[_0xb6d8('0x4d')]();if(_['isUndefined'](this[_0xb6d8('0x16')][_0x381316[_0xb6d8('0x31')]])){this['channels'][_0x381316[_0xb6d8('0x31')]]=new Channel();this[_0xb6d8('0x16')][_0x381316['uniqueid']]['starttime']=_0x381316[_0xb6d8('0x4e')]?moment()['subtract'](moment[_0xb6d8('0x4e')](_0x381316[_0xb6d8('0x4e')])[_0xb6d8('0x4f')](),_0xb6d8('0x4f'))[_0xb6d8('0x44')](_0xb6d8('0x3d')):moment()[_0xb6d8('0x44')](_0xb6d8('0x3d'));this[_0xb6d8('0x16')][_0x381316[_0xb6d8('0x31')]][_0xb6d8('0x50')]=_0xb6d8('0x12');}_[_0xb6d8('0x34')](this['channels'][_0x381316[_0xb6d8('0x31')]],_[_0xb6d8('0x35')](_0x381316,_[_0xb6d8('0x36')](this[_0xb6d8('0x16')][_0x381316[_0xb6d8('0x31')]])));if(_['includes'](applications,_0x381316['application'])){this['channels'][_0x381316[_0xb6d8('0x31')]][_0xb6d8('0x51')]=_0x381316[_0xb6d8('0x4a')];this['channels'][_0x381316[_0xb6d8('0x31')]][_0xb6d8('0x52')]=_0x381316['applicationdata'];if(_0x381316['application']===_0xb6d8('0xd')&&_[_0xb6d8('0x53')](_0x381316[_0xb6d8('0x4b')],_0xb6d8('0x54'))){var _0x3eddf5=_0x381316[_0xb6d8('0x4b')]['split']('=');var _0xce9ad2=_0x3eddf5[0x0]['match'](/cdr\((.*)\)/);if(_0xce9ad2){this[_0xb6d8('0x16')][_0x381316['uniqueid']][_0xce9ad2[0x1]]=_0x3eddf5[0x1];}}else if(_0x381316['application']===_0xb6d8('0xe')){this[_0xb6d8('0x16')][_0x381316[_0xb6d8('0x31')]][_0xb6d8('0xe')]=_0x381316['applicationdata']['split'](',')[0x0];}}}}}catch(_0x163c28){logger[_0xb6d8('0x37')]('[syncNewExten][VoiceCallReport]',util[_0xb6d8('0x39')](_0x163c28,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xb6d8('0x2e')][_0xb6d8('0x1f')]=function(_0x48f805){try{if(this['isNotNull'](_0x48f805)){if(_0x48f805[_0xb6d8('0x31')]!==_0x48f805[_0xb6d8('0x32')]){if(this['channels'][_0x48f805[_0xb6d8('0x32')]]){if(_0x48f805[_0xb6d8('0x3f')]==='6'){this[_0xb6d8('0x16')][_0x48f805[_0xb6d8('0x32')]][_0xb6d8('0x55')]=!![];this[_0xb6d8('0x16')][_0x48f805['linkedid']][_0xb6d8('0x56')]=moment()[_0xb6d8('0x44')]('YYYY-MM-DD\x20HH:mm:ss');this[_0xb6d8('0x16')][_0x48f805[_0xb6d8('0x32')]][_0xb6d8('0x32')]=_0x48f805[_0xb6d8('0x31')];if(_0x48f805[_0xb6d8('0x57')]!=='xcally-motion-preview'){this['channels'][_0x48f805[_0xb6d8('0x32')]][_0xb6d8('0x58')]=_0x48f805[_0xb6d8('0x57')];}this['channels'][_0x48f805[_0xb6d8('0x32')]][_0xb6d8('0x59')]=_0x48f805[_0xb6d8('0x5a')];this[_0xb6d8('0x16')][_0x48f805[_0xb6d8('0x32')]][_0xb6d8('0x5b')]=_0x48f805[_0xb6d8('0x3a')];this[_0xb6d8('0x16')][_0x48f805[_0xb6d8('0x32')]][_0xb6d8('0x50')]=dispositions[_[_0xb6d8('0x3e')](_0x48f805['channelstate'])];if(this[_0xb6d8('0x17')][_0x48f805[_0xb6d8('0x3a')]['split']('-')[0x0]]){this[_0xb6d8('0x16')][_0x48f805['linkedid']][_0xb6d8('0x5c')]=this[_0xb6d8('0x17')][_0x48f805[_0xb6d8('0x3a')][_0xb6d8('0x42')]('-')[0x0]]['id'];this[_0xb6d8('0x16')][_0x48f805[_0xb6d8('0x32')]][_0xb6d8('0x5d')]=this[_0xb6d8('0x17')][_0x48f805[_0xb6d8('0x3a')]['split']('-')[0x0]]['name'];}}}}else{if(this[_0xb6d8('0x16')][_0x48f805[_0xb6d8('0x31')]]){if(_0x48f805['channelstate']==='6'){if(this[_0xb6d8('0x17')][_0x48f805[_0xb6d8('0x3a')][_0xb6d8('0x42')]('-')[0x0]]){this[_0xb6d8('0x16')][_0x48f805['uniqueid']]['UserId']=this[_0xb6d8('0x17')][_0x48f805[_0xb6d8('0x3a')]['split']('-')[0x0]]['id'];this[_0xb6d8('0x16')][_0x48f805[_0xb6d8('0x31')]][_0xb6d8('0x5d')]=this[_0xb6d8('0x17')][_0x48f805[_0xb6d8('0x3a')][_0xb6d8('0x42')]('-')[0x0]]['name'];}}}}}}catch(_0x211610){logger[_0xb6d8('0x37')](_0xb6d8('0x5e'),util['inspect'](_0x211610,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xb6d8('0x2e')][_0xb6d8('0x5f')]=function(_0x1e3da8,_0x166564){if(this[_0xb6d8('0x16')][_0x1e3da8]){this['channels'][_0x1e3da8][_0xb6d8('0x60')]=!![];if(_[_0xb6d8('0x61')](_0x166564,_0xb6d8('0x62'))){_0x166564=_0x166564[_0xb6d8('0x63')](_0xb6d8('0x62'),_0xb6d8('0x64'));}this[_0xb6d8('0x16')][_0x1e3da8][_0xb6d8('0x65')]=_0x166564;var _0x41e9d6=_['find'](this['channels'][_0x1e3da8]['monitors'],{'filename':_0x166564});if(_[_0xb6d8('0x66')](_0x41e9d6)){this[_0xb6d8('0x16')][_0x1e3da8][_0xb6d8('0x67')]['push']({'filename':_0x166564,'createdAt':moment()[_0xb6d8('0x44')](_0xb6d8('0x3d')),'mixmonitorid':'','status':_0xb6d8('0x68')});}}};VoiceCallReport[_0xb6d8('0x2e')][_0xb6d8('0x69')]=function(_0x2da1a4){try{if(this[_0xb6d8('0x2f')](_0x2da1a4)){if(this[_0xb6d8('0x16')][_0x2da1a4['uniqueid']]&&_0x2da1a4[_0xb6d8('0x3a')]!=_0xb6d8('0x3b')){if(this[_0xb6d8('0x2f')](_0x2da1a4[_0xb6d8('0x6a')])){if(this[_0xb6d8('0x2f')](_0x2da1a4[_0xb6d8('0x6a')][_0xb6d8('0x6b')])){this[_0xb6d8('0x5f')](_0x2da1a4[_0xb6d8('0x31')],_0x2da1a4[_0xb6d8('0x6c')]);}else if(this['isNotNull'](_0x2da1a4[_0xb6d8('0x6a')]['xmd-phone'])){this['channels'][_0x2da1a4[_0xb6d8('0x31')]][_0xb6d8('0x57')]=_0x2da1a4[_0xb6d8('0x6a')][_0xb6d8('0x6d')];}else if(this[_0xb6d8('0x2f')](_0x2da1a4['variable'][_0xb6d8('0x6e')])){this[_0xb6d8('0x16')][_0x2da1a4[_0xb6d8('0x31')]][_0xb6d8('0x6f')]=_0x2da1a4['variable']['xmd-callerid'];}else if(this[_0xb6d8('0x2f')](_0x2da1a4[_0xb6d8('0x6a')]['xmd-cdrtype'])){this['channels'][_0x2da1a4['uniqueid']][_0xb6d8('0x70')]=_0x2da1a4[_0xb6d8('0x6c')];}else if(this['isNotNull'](_0x2da1a4[_0xb6d8('0x6a')][_0xb6d8('0x71')])){this[_0xb6d8('0x16')][_0x2da1a4['uniqueid']]['queue']=_0x2da1a4[_0xb6d8('0x6c')][_0xb6d8('0x42')](',')[0x0];}else if(this['isNotNull'](_0x2da1a4[_0xb6d8('0x6a')][_0xb6d8('0x72')])){this[_0xb6d8('0x16')][_0x2da1a4[_0xb6d8('0x31')]][_0xb6d8('0xe')]=_0x2da1a4[_0xb6d8('0x6c')];}else if(this[_0xb6d8('0x2f')](_0x2da1a4[_0xb6d8('0x6a')][_0xb6d8('0x73')])){this[_0xb6d8('0x16')][_0x2da1a4['uniqueid']]['sipcalluniqueid']=_0x2da1a4[_0xb6d8('0x6c')];}}}else if(this[_0xb6d8('0x2f')](_0x2da1a4['variable']['mixmonitor_filename'])){if(_0x2da1a4[_0xb6d8('0x6c')]){var _0x15d3fe=path[_0xb6d8('0x74')](_0x2da1a4[_0xb6d8('0x6c')])['name'];this[_0xb6d8('0x5f')](_0x15d3fe,_0x2da1a4[_0xb6d8('0x6c')]);}}else if(this[_0xb6d8('0x16')][_0x2da1a4[_0xb6d8('0x32')]]){if(this['isNotNull'](_0x2da1a4[_0xb6d8('0x6a')])){if(this[_0xb6d8('0x2f')](_0x2da1a4[_0xb6d8('0x6a')][_0xb6d8('0x73')])){this[_0xb6d8('0x16')][_0x2da1a4[_0xb6d8('0x32')]]['sipcalllinkedid']=_0x2da1a4['value'];}}}}}catch(_0x4de64e){logger[_0xb6d8('0x37')](_0xb6d8('0x75'),util[_0xb6d8('0x39')](_0x4de64e,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype']['syncHangup']=function(_0xd0a243){try{if(this['isNotNull'](_0xd0a243)){if(this[_0xb6d8('0x16')][_0xd0a243['uniqueid']]){var _0x42dcb9=moment();this[_0xb6d8('0x16')][_0xd0a243['uniqueid']][_0xb6d8('0x76')]=_0x42dcb9['format'](_0xb6d8('0x3d'));this[_0xb6d8('0x16')][_0xd0a243[_0xb6d8('0x31')]][_0xb6d8('0x4e')]=_0x42dcb9[_0xb6d8('0x77')](this[_0xb6d8('0x16')][_0xd0a243[_0xb6d8('0x31')]]['starttime'],'seconds');if(this['channels'][_0xd0a243[_0xb6d8('0x31')]][_0xb6d8('0x55')]){this[_0xb6d8('0x16')][_0xd0a243['uniqueid']]['billableseconds']=_0x42dcb9[_0xb6d8('0x77')](this['channels'][_0xd0a243[_0xb6d8('0x31')]]['answertime'],'seconds');this[_0xb6d8('0x16')][_0xd0a243[_0xb6d8('0x31')]][_0xb6d8('0x78')]=this[_0xb6d8('0x16')][_0xd0a243['uniqueid']][_0xb6d8('0x4e')]-this[_0xb6d8('0x16')][_0xd0a243[_0xb6d8('0x31')]][_0xb6d8('0x79')];}if(_0xd0a243['context']===_0xb6d8('0x41')){if(this['agents'][_0xd0a243[_0xb6d8('0x3a')][_0xb6d8('0x42')]('-')[0x0]]){this['agents'][_0xd0a243['channel'][_0xb6d8('0x42')]('-')[0x0]]=_[_0xb6d8('0x7a')](this[_0xb6d8('0x17')][_0xd0a243['channel'][_0xb6d8('0x42')]('-')[0x0]],[_0xb6d8('0x7b')]);this['emit'](util['format'](_0xb6d8('0x45'),this[_0xb6d8('0x17')][_0xd0a243[_0xb6d8('0x3a')]['split']('-')[0x0]][_0xb6d8('0x46')]),'user:agentcomplete',{'destaccountcode':this[_0xb6d8('0x17')][_0xd0a243[_0xb6d8('0x3a')][_0xb6d8('0x42')]('-')[0x0]]['accountcode']});}}ami[_0xb6d8('0x30')](_0xb6d8('0x7c'),this[_0xb6d8('0x16')][_0xd0a243[_0xb6d8('0x31')]]);delete this[_0xb6d8('0x16')][_0xd0a243[_0xb6d8('0x31')]];}}}catch(_0x27ebdc){logger[_0xb6d8('0x37')](_0xb6d8('0x7d'),util[_0xb6d8('0x39')](_0x27ebdc,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xb6d8('0x2e')][_0xb6d8('0x7e')]=function(_0x119da8){try{if(this[_0xb6d8('0x2f')](_0x119da8)){if(this[_0xb6d8('0x16')][_0x119da8['transfereeuniqueid']]){this['channels'][_0x119da8[_0xb6d8('0x7f')]][_0xb6d8('0x80')]=_0x119da8[_0xb6d8('0x81')];this[_0xb6d8('0x16')][_0x119da8[_0xb6d8('0x7f')]][_0xb6d8('0x82')]=_0x119da8[_0xb6d8('0x83')];this['syncHangup']({'uniqueid':_0x119da8[_0xb6d8('0x7f')],'context':_0x119da8[_0xb6d8('0x40')],'channel':_0x119da8[_0xb6d8('0x84')]});}}}catch(_0x1f0030){logger[_0xb6d8('0x37')](_0xb6d8('0x85'),util[_0xb6d8('0x39')](_0x1f0030,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype'][_0xb6d8('0x26')]=function(_0x284e1f){try{if(this[_0xb6d8('0x2f')](_0x284e1f)){if(this['channels'][_0x284e1f[_0xb6d8('0x7f')]]){this[_0xb6d8('0x16')][_0x284e1f['transfereeuniqueid']][_0xb6d8('0x80')]=_0x284e1f[_0xb6d8('0x86')];this[_0xb6d8('0x16')][_0x284e1f['transfereeuniqueid']][_0xb6d8('0x82')]=_0x284e1f[_0xb6d8('0x87')];this[_0xb6d8('0x21')]({'uniqueid':_0x284e1f[_0xb6d8('0x7f')],'context':_0x284e1f['context'],'channel':_0x284e1f[_0xb6d8('0x88')]});}}}catch(_0x281730){logger['error'](_0xb6d8('0x89'),util[_0xb6d8('0x39')](_0x281730,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xb6d8('0x2e')][_0xb6d8('0x28')]=function(_0x3af5f9){try{if(this[_0xb6d8('0x2f')](_0x3af5f9)){if(this[_0xb6d8('0x16')][_0x3af5f9[_0xb6d8('0x31')]]){if(!_['isNil'](this[_0xb6d8('0x16')][_0x3af5f9[_0xb6d8('0x31')]][_0xb6d8('0x56')])){this['channels'][_0x3af5f9[_0xb6d8('0x31')]][_0xb6d8('0x8a')]=moment()[_0xb6d8('0x44')](_0xb6d8('0x3d'));}}}}catch(_0x2d03a0){logger[_0xb6d8('0x37')](_0xb6d8('0x8b'),util[_0xb6d8('0x39')](_0x2d03a0,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xb6d8('0x2e')][_0xb6d8('0x2a')]=function(_0x30c5ee){try{if(this[_0xb6d8('0x2f')](_0x30c5ee)){if(this[_0xb6d8('0x16')][_0x30c5ee[_0xb6d8('0x31')]]){if(!_[_0xb6d8('0x66')](this[_0xb6d8('0x16')][_0x30c5ee[_0xb6d8('0x31')]][_0xb6d8('0x8a')])){this['channels'][_0x30c5ee['uniqueid']][_0xb6d8('0x8c')]+=moment()[_0xb6d8('0x8d')](0x0)[_0xb6d8('0x77')](this[_0xb6d8('0x16')][_0x30c5ee['uniqueid']]['mohstarttime'],_0xb6d8('0x4f'));delete this[_0xb6d8('0x16')][_0x30c5ee[_0xb6d8('0x31')]][_0xb6d8('0x8a')];}}}}catch(_0x4e8238){logger[_0xb6d8('0x37')](_0xb6d8('0x8e'),util['inspect'](_0x4e8238,{'showHidden':![],'depth':null}));}};module[_0xb6d8('0x8f')]=VoiceCallReport;
\ No newline at end of file
+var _0x1b70=['isUndefined','merge','keys','error','OutgoingSpoolFailed','format','YYYY-MM-DD\x20HH:mm:ss','disposition','toNumber','channelstate','pick','context','from-sip','channel','split','destconnectedlinenum','exten','name','user:agentconnect','accountcode','inspect','application','toLowerCase','applicationdata','appdata','starttime','duration','seconds','lastapplication','lastdata','startsWith','match','[syncNewExten][VoiceCallReport]','answered','answertime','calleridnum','xcally-motion-preview','calleridname','UserId','membername','syncMixMonitorFilename','endsWith','.wav49','replace','.WAV','monitorFilename','find','monitors','isNil','push','variable','xmd-phone','xmd-callerid','xmd-cdrtype','type','value','xmd-queue','xmcs-queue','sipcallid','mixmonitor_filename','parse','sipcalllinkedid','[syncVarSet][VoiceCallReport]','endtime','billableseconds','holdtime','user:%s','user:agentcomplete','custom:voiceCallReport','[syncHangup][VoiceCallReport]','transfereeuniqueid','transfercalleridnum','origtransferercalleridnum','transfertargetcalleridnum','origtransfererchannel','transfereecalleridnum','transferconnectedlinenum','extension','transfererchannel','mohstarttime','[syncMusicOnHoldStart][VoiceCallReport]','mohtime','milliseconds','diff','exports','bluebird','moment','path','../../../config/logger','ami','../ami','../model/channel','inuse','unavailable','ringing','ringinuse','onhold','set','queue','agi','dial','voicemail','NO\x20ANSWER','FAILED','ANSWERED','BUSY','localhost','channels','agents','coreshowchannel','syncNewExten','bind','newexten','newchannel','syncNewChannel','newstate','syncNewState','varset','syncVarSet','hangup','syncHangup','newcallerid','syncNewCallerId','syncBlindTransfer','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','then','actionCoreShowChannels','catch','log','prototype','emit','isNotNull','uniqueid','linkedid'];(function(_0x1facfa,_0x1acf7d){var _0x9ec701=function(_0x115e37){while(--_0x115e37){_0x1facfa['push'](_0x1facfa['shift']());}};_0x9ec701(++_0x1acf7d);}(_0x1b70,0x1ed));var _0x01b7=function(_0x1af98d,_0x3c608e){_0x1af98d=_0x1af98d-0x0;var _0x3553ea=_0x1b70[_0x1af98d];return _0x3553ea;};'use strict';var BPromise=require(_0x01b7('0x0'));var _=require('lodash');var moment=require(_0x01b7('0x1'));var util=require('util');var path=require(_0x01b7('0x2'));var logger=require(_0x01b7('0x3'))(_0x01b7('0x4'));var ami=require(_0x01b7('0x5'));var Channel=require(_0x01b7('0x6'));var statusDesc=['unknown','not_inuse',_0x01b7('0x7'),'busy','invalid',_0x01b7('0x8'),_0x01b7('0x9'),_0x01b7('0xa'),_0x01b7('0xb')];var applications=[_0x01b7('0xc'),_0x01b7('0xd'),_0x01b7('0xe'),_0x01b7('0xf'),'playback',_0x01b7('0x10')];var dispositions=[_0x01b7('0x11'),_0x01b7('0x12'),_0x01b7('0x12'),_0x01b7('0x11'),_0x01b7('0x11'),_0x01b7('0x11'),_0x01b7('0x13'),_0x01b7('0x14'),_0x01b7('0x12'),_0x01b7('0x12'),'FAILED'];var actions={};var io=require('socket.io-emitter')({'host':_0x01b7('0x15'),'port':0x18eb});function VoiceCallReport(_0x3ed055){this[_0x01b7('0x16')]=_0x3ed055[_0x01b7('0x16')];this[_0x01b7('0x17')]=_0x3ed055[_0x01b7('0x17')];ami['on'](_0x01b7('0x18'),this[_0x01b7('0x19')][_0x01b7('0x1a')](this));ami['on'](_0x01b7('0x1b'),this[_0x01b7('0x19')][_0x01b7('0x1a')](this));ami['on'](_0x01b7('0x1c'),this[_0x01b7('0x1d')][_0x01b7('0x1a')](this));ami['on'](_0x01b7('0x1e'),this[_0x01b7('0x1f')]['bind'](this));ami['on'](_0x01b7('0x20'),this[_0x01b7('0x21')][_0x01b7('0x1a')](this));ami['on'](_0x01b7('0x22'),this[_0x01b7('0x23')][_0x01b7('0x1a')](this));ami['on'](_0x01b7('0x24'),this[_0x01b7('0x25')][_0x01b7('0x1a')](this));ami['on']('attendedtransfer',this['syncAttendedTransfer'][_0x01b7('0x1a')](this));ami['on']('blindtransfer',this[_0x01b7('0x26')][_0x01b7('0x1a')](this));ami['on']('musiconholdstart',this[_0x01b7('0x27')][_0x01b7('0x1a')](this));ami['on'](_0x01b7('0x28'),this[_0x01b7('0x29')]['bind'](this));return BPromise['resolve']()[_0x01b7('0x2a')](ami[_0x01b7('0x2b')]())[_0x01b7('0x2c')](function(_0x533691){console[_0x01b7('0x2d')](_0x533691);});}VoiceCallReport[_0x01b7('0x2e')]['isNotNull']=function(_0x38a5b0){return _0x38a5b0!==null&&!_['isUndefined'](_0x38a5b0);};VoiceCallReport['prototype'][_0x01b7('0x2f')]=function(_0x3385ca,_0x4c22b7,_0x4374e7){io['to'](_0x3385ca)[_0x01b7('0x2f')](_0x4c22b7,_0x4374e7);};VoiceCallReport[_0x01b7('0x2e')][_0x01b7('0x25')]=function(_0x19e876){try{if(this[_0x01b7('0x30')](_0x19e876)){if(_0x19e876[_0x01b7('0x31')]===_0x19e876[_0x01b7('0x32')]){if(!_[_0x01b7('0x33')](this[_0x01b7('0x16')][_0x19e876[_0x01b7('0x31')]])){_[_0x01b7('0x34')](this[_0x01b7('0x16')][_0x19e876[_0x01b7('0x31')]],_['pick'](_0x19e876,_[_0x01b7('0x35')](this['channels'][_0x19e876[_0x01b7('0x31')]])));}}}}catch(_0x10031b){logger[_0x01b7('0x36')]('[syncNewCallerId][VoiceCallReport]',util['inspect'](_0x10031b,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x01b7('0x2e')][_0x01b7('0x1d')]=function(_0xfd500){try{if(this['isNotNull'](_0xfd500)){if(_0xfd500[_0x01b7('0x31')]===_0xfd500[_0x01b7('0x32')]&&_0xfd500['channel']!=_0x01b7('0x37')){if(_[_0x01b7('0x33')](this['channels'][_0xfd500['uniqueid']])){this[_0x01b7('0x16')][_0xfd500[_0x01b7('0x31')]]=new Channel();this[_0x01b7('0x16')][_0xfd500[_0x01b7('0x31')]]['starttime']=moment()[_0x01b7('0x38')](_0x01b7('0x39'));this['channels'][_0xfd500[_0x01b7('0x31')]][_0x01b7('0x3a')]=dispositions[_[_0x01b7('0x3b')](_0xfd500[_0x01b7('0x3c')])];_[_0x01b7('0x34')](this[_0x01b7('0x16')][_0xfd500[_0x01b7('0x31')]],_[_0x01b7('0x3d')](_0xfd500,_[_0x01b7('0x35')](this[_0x01b7('0x16')][_0xfd500[_0x01b7('0x31')]])));if(_0xfd500[_0x01b7('0x3e')]===_0x01b7('0x3f')){if(this['agents'][_0xfd500[_0x01b7('0x40')][_0x01b7('0x41')]('-')[0x0]]){this['agents'][_0xfd500[_0x01b7('0x40')][_0x01b7('0x41')]('-')[0x0]][_0x01b7('0x42')]=_0xfd500[_0x01b7('0x43')];this[_0x01b7('0x2f')](util[_0x01b7('0x38')]('user:%s',this[_0x01b7('0x17')][_0xfd500[_0x01b7('0x40')][_0x01b7('0x41')]('-')[0x0]][_0x01b7('0x44')]),_0x01b7('0x45'),{'destaccountcode':this[_0x01b7('0x17')][_0xfd500[_0x01b7('0x40')][_0x01b7('0x41')]('-')[0x0]][_0x01b7('0x46')],'destconnectedlinenum':_0xfd500[_0x01b7('0x43')]});}}}}}}catch(_0x3b71a2){logger[_0x01b7('0x36')]('[syncNewChannel][VoiceCallReport]',util[_0x01b7('0x47')](_0x3b71a2,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype'][_0x01b7('0x19')]=function(_0xae71fb){try{if(this[_0x01b7('0x30')](_0xae71fb)){if(_0xae71fb[_0x01b7('0x31')]===_0xae71fb[_0x01b7('0x32')]&&_0xae71fb[_0x01b7('0x43')]!='h'&&_0xae71fb[_0x01b7('0x40')]!=_0x01b7('0x37')){_0xae71fb[_0x01b7('0x48')]=_0xae71fb[_0x01b7('0x48')][_0x01b7('0x49')]();_0xae71fb[_0x01b7('0x4a')]=(_0xae71fb[_0x01b7('0x4b')]||_0xae71fb[_0x01b7('0x4a')])[_0x01b7('0x49')]();if(_[_0x01b7('0x33')](this[_0x01b7('0x16')][_0xae71fb[_0x01b7('0x31')]])){this[_0x01b7('0x16')][_0xae71fb[_0x01b7('0x31')]]=new Channel();this[_0x01b7('0x16')][_0xae71fb[_0x01b7('0x31')]][_0x01b7('0x4c')]=_0xae71fb['duration']?moment()['subtract'](moment[_0x01b7('0x4d')](_0xae71fb['duration'])[_0x01b7('0x4e')](),_0x01b7('0x4e'))['format'](_0x01b7('0x39')):moment()['format'](_0x01b7('0x39'));this[_0x01b7('0x16')][_0xae71fb['uniqueid']][_0x01b7('0x3a')]=_0x01b7('0x11');}_[_0x01b7('0x34')](this[_0x01b7('0x16')][_0xae71fb['uniqueid']],_[_0x01b7('0x3d')](_0xae71fb,_[_0x01b7('0x35')](this[_0x01b7('0x16')][_0xae71fb['uniqueid']])));if(_['includes'](applications,_0xae71fb[_0x01b7('0x48')])){this['channels'][_0xae71fb[_0x01b7('0x31')]][_0x01b7('0x4f')]=_0xae71fb[_0x01b7('0x48')];this[_0x01b7('0x16')][_0xae71fb[_0x01b7('0x31')]][_0x01b7('0x50')]=_0xae71fb[_0x01b7('0x4a')];if(_0xae71fb[_0x01b7('0x48')]===_0x01b7('0xc')&&_[_0x01b7('0x51')](_0xae71fb[_0x01b7('0x4a')],'cdr(')){var _0x46a461=_0xae71fb[_0x01b7('0x4a')][_0x01b7('0x41')]('=');var _0x28a52b=_0x46a461[0x0][_0x01b7('0x52')](/cdr\((.*)\)/);if(_0x28a52b){this[_0x01b7('0x16')][_0xae71fb[_0x01b7('0x31')]][_0x28a52b[0x1]]=_0x46a461[0x1];}}else if(_0xae71fb[_0x01b7('0x48')]===_0x01b7('0xd')){this[_0x01b7('0x16')][_0xae71fb[_0x01b7('0x31')]][_0x01b7('0xd')]=_0xae71fb['applicationdata'][_0x01b7('0x41')](',')[0x0];}}}}}catch(_0x5462b8){logger[_0x01b7('0x36')](_0x01b7('0x53'),util[_0x01b7('0x47')](_0x5462b8,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x01b7('0x2e')][_0x01b7('0x1f')]=function(_0x1e8bc4){try{if(this[_0x01b7('0x30')](_0x1e8bc4)){if(_0x1e8bc4[_0x01b7('0x31')]!==_0x1e8bc4[_0x01b7('0x32')]){if(this['channels'][_0x1e8bc4['linkedid']]){if(_0x1e8bc4['channelstate']==='6'){this[_0x01b7('0x16')][_0x1e8bc4[_0x01b7('0x32')]][_0x01b7('0x54')]=!![];this[_0x01b7('0x16')][_0x1e8bc4[_0x01b7('0x32')]][_0x01b7('0x55')]=moment()[_0x01b7('0x38')](_0x01b7('0x39'));this[_0x01b7('0x16')][_0x1e8bc4[_0x01b7('0x32')]][_0x01b7('0x32')]=_0x1e8bc4[_0x01b7('0x31')];if(_0x1e8bc4[_0x01b7('0x56')]!==_0x01b7('0x57')){this[_0x01b7('0x16')][_0x1e8bc4[_0x01b7('0x32')]]['connectedlinenum']=_0x1e8bc4[_0x01b7('0x56')];}this['channels'][_0x1e8bc4[_0x01b7('0x32')]]['connectedlinename']=_0x1e8bc4[_0x01b7('0x58')];this[_0x01b7('0x16')][_0x1e8bc4['linkedid']]['destinationchannel']=_0x1e8bc4[_0x01b7('0x40')];this['channels'][_0x1e8bc4[_0x01b7('0x32')]]['disposition']=dispositions[_['toNumber'](_0x1e8bc4[_0x01b7('0x3c')])];if(this['agents'][_0x1e8bc4[_0x01b7('0x40')][_0x01b7('0x41')]('-')[0x0]]){this[_0x01b7('0x16')][_0x1e8bc4['linkedid']][_0x01b7('0x59')]=this[_0x01b7('0x17')][_0x1e8bc4['channel'][_0x01b7('0x41')]('-')[0x0]]['id'];this['channels'][_0x1e8bc4[_0x01b7('0x32')]][_0x01b7('0x5a')]=this['agents'][_0x1e8bc4['channel'][_0x01b7('0x41')]('-')[0x0]][_0x01b7('0x44')];}}}}else{if(this[_0x01b7('0x16')][_0x1e8bc4[_0x01b7('0x31')]]){if(_0x1e8bc4[_0x01b7('0x3c')]==='6'){if(this[_0x01b7('0x17')][_0x1e8bc4[_0x01b7('0x40')][_0x01b7('0x41')]('-')[0x0]]){this[_0x01b7('0x16')][_0x1e8bc4[_0x01b7('0x31')]][_0x01b7('0x59')]=this[_0x01b7('0x17')][_0x1e8bc4['channel']['split']('-')[0x0]]['id'];this[_0x01b7('0x16')][_0x1e8bc4[_0x01b7('0x31')]][_0x01b7('0x5a')]=this[_0x01b7('0x17')][_0x1e8bc4['channel'][_0x01b7('0x41')]('-')[0x0]]['name'];}}}}}}catch(_0x19a0d5){logger[_0x01b7('0x36')]('[syncNewState][VoiceCallReport]',util[_0x01b7('0x47')](_0x19a0d5,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x01b7('0x2e')][_0x01b7('0x5b')]=function(_0x58cb34,_0x2a94aa){if(this[_0x01b7('0x16')][_0x58cb34]){this[_0x01b7('0x16')][_0x58cb34]['monitor']=!![];if(_[_0x01b7('0x5c')](_0x2a94aa,_0x01b7('0x5d'))){_0x2a94aa=_0x2a94aa[_0x01b7('0x5e')](_0x01b7('0x5d'),_0x01b7('0x5f'));}this[_0x01b7('0x16')][_0x58cb34][_0x01b7('0x60')]=_0x2a94aa;var _0x48a5c6=_[_0x01b7('0x61')](this[_0x01b7('0x16')][_0x58cb34][_0x01b7('0x62')],{'filename':_0x2a94aa});if(_[_0x01b7('0x63')](_0x48a5c6)){this[_0x01b7('0x16')][_0x58cb34][_0x01b7('0x62')][_0x01b7('0x64')]({'filename':_0x2a94aa,'createdAt':moment()[_0x01b7('0x38')](_0x01b7('0x39')),'mixmonitorid':'','status':'rec'});}}};VoiceCallReport[_0x01b7('0x2e')][_0x01b7('0x21')]=function(_0x57c88f){try{if(this[_0x01b7('0x30')](_0x57c88f)){if(this[_0x01b7('0x16')][_0x57c88f[_0x01b7('0x31')]]&&_0x57c88f[_0x01b7('0x40')]!=_0x01b7('0x37')){if(this['isNotNull'](_0x57c88f[_0x01b7('0x65')])){if(this[_0x01b7('0x30')](_0x57c88f['variable']['mixmonitor_filename'])){this[_0x01b7('0x5b')](_0x57c88f[_0x01b7('0x31')],_0x57c88f['value']);}else if(this[_0x01b7('0x30')](_0x57c88f[_0x01b7('0x65')][_0x01b7('0x66')])){this['channels'][_0x57c88f[_0x01b7('0x31')]][_0x01b7('0x56')]=_0x57c88f['variable'][_0x01b7('0x66')];}else if(this[_0x01b7('0x30')](_0x57c88f[_0x01b7('0x65')]['xmd-callerid'])){this[_0x01b7('0x16')][_0x57c88f[_0x01b7('0x31')]]['callerid']=_0x57c88f[_0x01b7('0x65')][_0x01b7('0x67')];}else if(this['isNotNull'](_0x57c88f[_0x01b7('0x65')][_0x01b7('0x68')])){this[_0x01b7('0x16')][_0x57c88f['uniqueid']][_0x01b7('0x69')]=_0x57c88f[_0x01b7('0x6a')];}else if(this[_0x01b7('0x30')](_0x57c88f[_0x01b7('0x65')][_0x01b7('0x6b')])){this[_0x01b7('0x16')][_0x57c88f[_0x01b7('0x31')]][_0x01b7('0xd')]=_0x57c88f[_0x01b7('0x6a')][_0x01b7('0x41')](',')[0x0];}else if(this['isNotNull'](_0x57c88f[_0x01b7('0x65')][_0x01b7('0x6c')])){this['channels'][_0x57c88f['uniqueid']][_0x01b7('0xd')]=_0x57c88f[_0x01b7('0x6a')];}else if(this[_0x01b7('0x30')](_0x57c88f[_0x01b7('0x65')][_0x01b7('0x6d')])){this[_0x01b7('0x16')][_0x57c88f[_0x01b7('0x31')]]['sipcalluniqueid']=_0x57c88f[_0x01b7('0x6a')];}}}else if(this[_0x01b7('0x30')](_0x57c88f[_0x01b7('0x65')][_0x01b7('0x6e')])){if(_0x57c88f[_0x01b7('0x6a')]){var _0x35d8e0=path[_0x01b7('0x6f')](_0x57c88f[_0x01b7('0x6a')])[_0x01b7('0x44')];this['syncMixMonitorFilename'](_0x35d8e0,_0x57c88f[_0x01b7('0x6a')]);}}else if(this['channels'][_0x57c88f['linkedid']]){if(this[_0x01b7('0x30')](_0x57c88f['variable'])){if(this[_0x01b7('0x30')](_0x57c88f[_0x01b7('0x65')]['sipcallid'])){this[_0x01b7('0x16')][_0x57c88f['linkedid']][_0x01b7('0x70')]=_0x57c88f[_0x01b7('0x6a')];}}}}}catch(_0xdece4e){logger[_0x01b7('0x36')](_0x01b7('0x71'),util[_0x01b7('0x47')](_0xdece4e,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x01b7('0x2e')][_0x01b7('0x23')]=function(_0x3e0bb4){try{if(this[_0x01b7('0x30')](_0x3e0bb4)){if(this[_0x01b7('0x16')][_0x3e0bb4[_0x01b7('0x31')]]){var _0x20ab4a=moment();this[_0x01b7('0x16')][_0x3e0bb4[_0x01b7('0x31')]][_0x01b7('0x72')]=_0x20ab4a[_0x01b7('0x38')](_0x01b7('0x39'));this[_0x01b7('0x16')][_0x3e0bb4['uniqueid']][_0x01b7('0x4d')]=_0x20ab4a['diff'](this[_0x01b7('0x16')][_0x3e0bb4[_0x01b7('0x31')]]['starttime'],_0x01b7('0x4e'));if(this[_0x01b7('0x16')][_0x3e0bb4[_0x01b7('0x31')]]['answered']){this[_0x01b7('0x16')][_0x3e0bb4[_0x01b7('0x31')]][_0x01b7('0x73')]=_0x20ab4a['diff'](this[_0x01b7('0x16')][_0x3e0bb4[_0x01b7('0x31')]][_0x01b7('0x55')],_0x01b7('0x4e'));this['channels'][_0x3e0bb4[_0x01b7('0x31')]][_0x01b7('0x74')]=this[_0x01b7('0x16')][_0x3e0bb4[_0x01b7('0x31')]][_0x01b7('0x4d')]-this[_0x01b7('0x16')][_0x3e0bb4[_0x01b7('0x31')]][_0x01b7('0x73')];}if(_0x3e0bb4['context']==='from-sip'){if(this[_0x01b7('0x17')][_0x3e0bb4['channel'][_0x01b7('0x41')]('-')[0x0]]){this[_0x01b7('0x17')][_0x3e0bb4[_0x01b7('0x40')][_0x01b7('0x41')]('-')[0x0]]=_['omit'](this[_0x01b7('0x17')][_0x3e0bb4[_0x01b7('0x40')][_0x01b7('0x41')]('-')[0x0]],['destconnectedlinenum']);this[_0x01b7('0x2f')](util[_0x01b7('0x38')](_0x01b7('0x75'),this[_0x01b7('0x17')][_0x3e0bb4[_0x01b7('0x40')][_0x01b7('0x41')]('-')[0x0]][_0x01b7('0x44')]),_0x01b7('0x76'),{'destaccountcode':this[_0x01b7('0x17')][_0x3e0bb4[_0x01b7('0x40')][_0x01b7('0x41')]('-')[0x0]]['accountcode']});}}ami['emit'](_0x01b7('0x77'),this['channels'][_0x3e0bb4[_0x01b7('0x31')]]);delete this[_0x01b7('0x16')][_0x3e0bb4[_0x01b7('0x31')]];}}}catch(_0x311dca){logger['error'](_0x01b7('0x78'),util['inspect'](_0x311dca,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x01b7('0x2e')]['syncAttendedTransfer']=function(_0x33172d){try{if(this[_0x01b7('0x30')](_0x33172d)){if(this[_0x01b7('0x16')][_0x33172d[_0x01b7('0x79')]]){this[_0x01b7('0x16')][_0x33172d[_0x01b7('0x79')]][_0x01b7('0x7a')]=_0x33172d[_0x01b7('0x7b')];this[_0x01b7('0x16')][_0x33172d[_0x01b7('0x79')]]['transferconnectedlinenum']=_0x33172d[_0x01b7('0x7c')];this[_0x01b7('0x23')]({'uniqueid':_0x33172d[_0x01b7('0x79')],'context':_0x33172d[_0x01b7('0x3e')],'channel':_0x33172d[_0x01b7('0x7d')]});}}}catch(_0xa50a97){logger[_0x01b7('0x36')]('[syncAttendedTransfer][VoiceCallReport]',util['inspect'](_0xa50a97,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype'][_0x01b7('0x26')]=function(_0x1043b8){try{if(this[_0x01b7('0x30')](_0x1043b8)){if(this[_0x01b7('0x16')][_0x1043b8['transfereeuniqueid']]){this[_0x01b7('0x16')][_0x1043b8[_0x01b7('0x79')]][_0x01b7('0x7a')]=_0x1043b8[_0x01b7('0x7e')];this[_0x01b7('0x16')][_0x1043b8[_0x01b7('0x79')]][_0x01b7('0x7f')]=_0x1043b8[_0x01b7('0x80')];this[_0x01b7('0x23')]({'uniqueid':_0x1043b8['transfereeuniqueid'],'context':_0x1043b8[_0x01b7('0x3e')],'channel':_0x1043b8[_0x01b7('0x81')]});}}}catch(_0x192dd6){logger['error']('[syncBlindTransfer][VoiceCallReport]',util['inspect'](_0x192dd6,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x01b7('0x2e')]['syncMusicOnHoldStart']=function(_0x1b1415){try{if(this[_0x01b7('0x30')](_0x1b1415)){if(this['channels'][_0x1b1415[_0x01b7('0x31')]]){if(!_[_0x01b7('0x63')](this['channels'][_0x1b1415[_0x01b7('0x31')]][_0x01b7('0x55')])){this['channels'][_0x1b1415[_0x01b7('0x31')]][_0x01b7('0x82')]=moment()[_0x01b7('0x38')]('YYYY-MM-DD\x20HH:mm:ss');}}}}catch(_0x44bad1){logger[_0x01b7('0x36')](_0x01b7('0x83'),util[_0x01b7('0x47')](_0x44bad1,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x01b7('0x2e')][_0x01b7('0x29')]=function(_0x58eae6){try{if(this[_0x01b7('0x30')](_0x58eae6)){if(this[_0x01b7('0x16')][_0x58eae6['uniqueid']]){if(!_[_0x01b7('0x63')](this['channels'][_0x58eae6['uniqueid']]['mohstarttime'])){this['channels'][_0x58eae6[_0x01b7('0x31')]][_0x01b7('0x84')]+=moment()[_0x01b7('0x85')](0x0)[_0x01b7('0x86')](this[_0x01b7('0x16')][_0x58eae6[_0x01b7('0x31')]][_0x01b7('0x82')],'seconds');delete this[_0x01b7('0x16')][_0x58eae6['uniqueid']][_0x01b7('0x82')];}}}}catch(_0x1b36d3){logger[_0x01b7('0x36')]('[syncMusicOnHoldStop][VoiceCallReport]',util[_0x01b7('0x47')](_0x1b36d3,{'showHidden':![],'depth':null}));}};module[_0x01b7('0x87')]=VoiceCallReport;
\ No newline at end of file
index 2a8ba23..bfc9b25 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc577=['isUndefined','emit','syncDialBegin','channels','uniqueid','merge','format','YYYY-MM-DD\x20HH:mm:ss','channel','lastIndexOf','omit','event','privilege','voice:outbound','voice_outbound_channel:save','error','[syncDialBegin][VoiceDialReport]','inspect','dialstatus','connectedlinenum','connectedlinename','lastevent','connect','custom:dialconnect','[syncDialEnd][VoiceDialReport]','keys','variable','outboundrouteid','value','addVariable','rtpaudioqos','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','bridgepeer','bridgepvtcallid','membercalls','memberdynamic','memberinterface','memberlastcall','membername','memberpenalty','memberrealtime','isNil','endtime','duration','diff','starttime','seconds','total','answered','holdtime','answertime','sumHoldTime','billableseconds','sumDuration','custom:voiceDialReport','custom:dialend','voice_outbound:save','voice_outbound_channel:remove','[syncHangup][VoiceDialReport]','exports','lodash','moment','util','ami','../ami','socket.io-emitter','outboundChannels','outbound','variables','dialbegin','bind','syncDialEnd','syncVarSet','syncHangup','prototype','isNotNull'];(function(_0x5af2a3,_0x36866c){var _0x213256=function(_0x10fd28){while(--_0x10fd28){_0x5af2a3['push'](_0x5af2a3['shift']());}};_0x213256(++_0x36866c);}(_0xc577,0x180));var _0x7c57=function(_0x5463c2,_0x22c4cc){_0x5463c2=_0x5463c2-0x0;var _0x5a7da7=_0xc577[_0x5463c2];return _0x5a7da7;};'use strict';var _=require(_0x7c57('0x0'));var moment=require(_0x7c57('0x1'));var util=require(_0x7c57('0x2'));var logger=require('../../../config/logger')(_0x7c57('0x3'));var ami=require(_0x7c57('0x4'));var io=require(_0x7c57('0x5'))({'host':'localhost','port':0x18eb});function VoiceDialReport(_0x9c8645){this['channels']=_0x9c8645[_0x7c57('0x6')];this['outbound']=_0x9c8645[_0x7c57('0x7')];this[_0x7c57('0x8')]={};ami['on'](_0x7c57('0x9'),this['syncDialBegin'][_0x7c57('0xa')](this));ami['on']('dialend',this[_0x7c57('0xb')][_0x7c57('0xa')](this));ami['on']('varset',this[_0x7c57('0xc')][_0x7c57('0xa')](this));ami['on']('hangup',this[_0x7c57('0xd')][_0x7c57('0xa')](this));}VoiceDialReport[_0x7c57('0xe')][_0x7c57('0xf')]=function(_0x45d23d){return _0x45d23d!==null&&!_[_0x7c57('0x10')](_0x45d23d);};VoiceDialReport['prototype'][_0x7c57('0x11')]=function(_0x1f2aec,_0x4af3fe,_0x50ef8e){io['to'](_0x1f2aec)[_0x7c57('0x11')](_0x4af3fe,_0x50ef8e);};VoiceDialReport[_0x7c57('0xe')][_0x7c57('0x12')]=function(_0x1c290f){try{if(this[_0x7c57('0xf')](_0x1c290f)){if(this[_0x7c57('0x13')][_0x1c290f[_0x7c57('0x14')]]){_[_0x7c57('0x15')](this[_0x7c57('0x13')][_0x1c290f[_0x7c57('0x14')]],{'starttime':moment()[_0x7c57('0x16')](_0x7c57('0x17')),'lastevent':'called','interface':_0x1c290f[_0x7c57('0x18')]['substring'](0x0,_0x1c290f[_0x7c57('0x18')][_0x7c57('0x19')]('-')),'membername':_0x1c290f[_0x7c57('0x18')]['substring'](_0x1c290f[_0x7c57('0x18')][_0x7c57('0x19')]('/')+0x1,_0x1c290f['channel'][_0x7c57('0x19')]('-'))},_[_0x7c57('0x1a')](_0x1c290f,[_0x7c57('0x1b'),_0x7c57('0x1c')]));this[_0x7c57('0x11')](_0x7c57('0x1d'),_0x7c57('0x1e'),this[_0x7c57('0x13')][_0x1c290f[_0x7c57('0x14')]]);ami[_0x7c57('0x11')]('custom:dialbegin',this[_0x7c57('0x13')][_0x1c290f[_0x7c57('0x14')]]);}}}catch(_0x35fbe1){logger[_0x7c57('0x1f')](_0x7c57('0x20'),util[_0x7c57('0x21')](_0x35fbe1,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x7c57('0xe')]['syncDialEnd']=function(_0x4bda4d){try{if(this[_0x7c57('0xf')](_0x4bda4d)){if(this[_0x7c57('0x13')][_0x4bda4d[_0x7c57('0x14')]]){this[_0x7c57('0x13')][_0x4bda4d[_0x7c57('0x14')]][_0x7c57('0x22')]=_0x4bda4d[_0x7c57('0x22')];if(_0x4bda4d['dialstatus']==='ANSWER'){this[_0x7c57('0x13')][_0x4bda4d['uniqueid']][_0x7c57('0x23')]=_0x4bda4d['connectedlinenum'];this[_0x7c57('0x13')][_0x4bda4d[_0x7c57('0x14')]][_0x7c57('0x24')]=_0x4bda4d['connectedlinename'];this[_0x7c57('0x13')][_0x4bda4d[_0x7c57('0x14')]]['answertime']=moment()[_0x7c57('0x16')]('YYYY-MM-DD\x20HH:mm:ss');this['channels'][_0x4bda4d[_0x7c57('0x14')]][_0x7c57('0x25')]=_0x7c57('0x26');ami['emit'](_0x7c57('0x27'),this[_0x7c57('0x13')][_0x4bda4d['uniqueid']]);}this[_0x7c57('0x11')](_0x7c57('0x1d'),'voice_outbound_channel:save',this[_0x7c57('0x13')][_0x4bda4d[_0x7c57('0x14')]]);}}}catch(_0x2bb959){logger[_0x7c57('0x1f')](_0x7c57('0x28'),util[_0x7c57('0x21')](_0x2bb959,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x7c57('0xe')][_0x7c57('0xc')]=function(_0x5215e0){try{if(this[_0x7c57('0xf')](_0x5215e0)){this['addVariable'](_0x5215e0['uniqueid'],_[_0x7c57('0x29')](_0x5215e0[_0x7c57('0x2a')])[0x0],_0x5215e0['value']);if(this[_0x7c57('0xf')](_0x5215e0[_0x7c57('0x2a')])&&this[_0x7c57('0xf')](_0x5215e0[_0x7c57('0x2a')][_0x7c57('0x2b')])){if(_[_0x7c57('0x10')](this[_0x7c57('0x13')][_0x5215e0[_0x7c57('0x14')]])){this[_0x7c57('0x13')][_0x5215e0[_0x7c57('0x14')]]={'routeId':_0x5215e0[_0x7c57('0x2c')],'variables':this[_0x7c57('0x8')][_0x5215e0['uniqueid']]};this[_0x7c57('0x11')]('voice:outbound',_0x7c57('0x1e'),this['channels'][_0x5215e0['uniqueid']]);}}}}catch(_0xb9be3f){logger[_0x7c57('0x1f')]('[syncVarSet][VoiceDialReport]',util[_0x7c57('0x21')](_0xb9be3f,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x7c57('0xe')][_0x7c57('0x2d')]=function(_0xe98561,_0x3736f9,_0x1582bf){var _0x12f1c8=[_0x7c57('0x2e'),'rtpaudioqosbridged',_0x7c57('0x2f'),_0x7c57('0x30'),'rtpaudioqosloss','rtpaudioqoslossbridged',_0x7c57('0x31'),_0x7c57('0x32'),_0x7c57('0x33'),'sipuri',_0x7c57('0x34'),_0x7c57('0x35'),_0x7c57('0x36'),_0x7c57('0x37'),_0x7c57('0x38'),_0x7c57('0x39'),_0x7c57('0x3a'),_0x7c57('0x3b'),_0x7c57('0x3c')];if(!_[_0x7c57('0x3d')](_0x3736f9)&&!_['includes'](_0x12f1c8,_0x3736f9)){if(_[_0x7c57('0x10')](this[_0x7c57('0x8')][_0xe98561])){this[_0x7c57('0x8')][_0xe98561]={};}this['variables'][_0xe98561][_0x3736f9]=_0x1582bf;}};VoiceDialReport['prototype']['syncHangup']=function(_0x190ccb){try{if(this[_0x7c57('0xf')](_0x190ccb)){if(this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]]){this['channels'][_0x190ccb[_0x7c57('0x14')]][_0x7c57('0x3e')]=moment()[_0x7c57('0x16')]('YYYY-MM-DD\x20HH:mm:ss');this['channels'][_0x190ccb[_0x7c57('0x14')]][_0x7c57('0x3f')]=moment(this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]][_0x7c57('0x3e')])[_0x7c57('0x40')](this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]][_0x7c57('0x41')],_0x7c57('0x42'));this['channels'][_0x190ccb[_0x7c57('0x14')]][_0x7c57('0x25')]='complete';this[_0x7c57('0x7')][_0x7c57('0x43')]+=0x1;if(this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]]['answertime']){this[_0x7c57('0x7')][_0x7c57('0x44')]+=0x1;this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]][_0x7c57('0x45')]=moment(this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]][_0x7c57('0x46')])['diff'](this['channels'][_0x190ccb[_0x7c57('0x14')]][_0x7c57('0x41')],_0x7c57('0x42'));this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]]['billableseconds']=moment(this[_0x7c57('0x13')][_0x190ccb['uniqueid']][_0x7c57('0x3e')])['diff'](this['channels'][_0x190ccb['uniqueid']][_0x7c57('0x46')],'seconds');this[_0x7c57('0x7')][_0x7c57('0x47')]+=this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]][_0x7c57('0x45')];this[_0x7c57('0x7')]['sumBillable']+=this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]][_0x7c57('0x48')];}this['outbound'][_0x7c57('0x49')]+=this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]]['duration'];ami[_0x7c57('0x11')](_0x7c57('0x4a'),this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]]);ami[_0x7c57('0x11')](_0x7c57('0x4b'),this['channels'][_0x190ccb[_0x7c57('0x14')]]);this['emit'](_0x7c57('0x1d'),_0x7c57('0x4c'),this[_0x7c57('0x7')]);this[_0x7c57('0x11')](_0x7c57('0x1d'),_0x7c57('0x4d'),this[_0x7c57('0x13')][_0x190ccb['uniqueid']]);delete this[_0x7c57('0x13')][_0x190ccb[_0x7c57('0x14')]];}if(this[_0x7c57('0x8')][_0x190ccb[_0x7c57('0x14')]]){delete this[_0x7c57('0x8')][_0x190ccb[_0x7c57('0x14')]];}}}catch(_0x37ebfc){logger[_0x7c57('0x1f')](_0x7c57('0x4e'),util[_0x7c57('0x21')](_0x37ebfc,{'showHidden':![],'depth':null}));}};module[_0x7c57('0x4f')]=VoiceDialReport;
\ No newline at end of file
+var _0x620a=['bridgepvtcallid','membercalls','memberdynamic','memberinterface','memberlastcall','membername','memberpenalty','memberrealtime','isNil','includes','prototype','endtime','duration','starttime','lastevent','complete','total','answered','holdtime','diff','seconds','billableseconds','sumHoldTime','sumBillable','custom:voiceDialReport','custom:dialend','voice_outbound:save','voice_outbound_channel:remove','exports','lodash','moment','util','../../../config/logger','socket.io-emitter','localhost','outbound','variables','dialbegin','syncDialBegin','bind','dialend','syncDialEnd','varset','syncVarSet','hangup','syncHangup','isNotNull','isUndefined','emit','channels','uniqueid','format','YYYY-MM-DD\x20HH:mm:ss','substring','channel','lastIndexOf','omit','event','voice:outbound','voice_outbound_channel:save','custom:dialbegin','[syncDialBegin][VoiceDialReport]','dialstatus','ANSWER','connectedlinenum','connectedlinename','answertime','connect','custom:dialconnect','error','inspect','keys','variable','value','outboundrouteid','[syncVarSet][VoiceDialReport]','addVariable','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer'];(function(_0x1b1ccd,_0x51f7f6){var _0x232ee0=function(_0xd9a17d){while(--_0xd9a17d){_0x1b1ccd['push'](_0x1b1ccd['shift']());}};_0x232ee0(++_0x51f7f6);}(_0x620a,0x122));var _0xa620=function(_0x411017,_0x4a8117){_0x411017=_0x411017-0x0;var _0x2adeea=_0x620a[_0x411017];return _0x2adeea;};'use strict';var _=require(_0xa620('0x0'));var moment=require(_0xa620('0x1'));var util=require(_0xa620('0x2'));var logger=require(_0xa620('0x3'))('ami');var ami=require('../ami');var io=require(_0xa620('0x4'))({'host':_0xa620('0x5'),'port':0x18eb});function VoiceDialReport(_0x552ff1){this['channels']=_0x552ff1['outboundChannels'];this['outbound']=_0x552ff1[_0xa620('0x6')];this[_0xa620('0x7')]={};ami['on'](_0xa620('0x8'),this[_0xa620('0x9')][_0xa620('0xa')](this));ami['on'](_0xa620('0xb'),this[_0xa620('0xc')][_0xa620('0xa')](this));ami['on'](_0xa620('0xd'),this[_0xa620('0xe')][_0xa620('0xa')](this));ami['on'](_0xa620('0xf'),this[_0xa620('0x10')][_0xa620('0xa')](this));}VoiceDialReport['prototype'][_0xa620('0x11')]=function(_0x2bef1){return _0x2bef1!==null&&!_[_0xa620('0x12')](_0x2bef1);};VoiceDialReport['prototype'][_0xa620('0x13')]=function(_0x4af0c0,_0x2abb1b,_0x2850c0){io['to'](_0x4af0c0)[_0xa620('0x13')](_0x2abb1b,_0x2850c0);};VoiceDialReport['prototype'][_0xa620('0x9')]=function(_0x497b80){try{if(this[_0xa620('0x11')](_0x497b80)){if(this[_0xa620('0x14')][_0x497b80[_0xa620('0x15')]]){_['merge'](this[_0xa620('0x14')][_0x497b80[_0xa620('0x15')]],{'starttime':moment()[_0xa620('0x16')](_0xa620('0x17')),'lastevent':'called','interface':_0x497b80['channel'][_0xa620('0x18')](0x0,_0x497b80[_0xa620('0x19')][_0xa620('0x1a')]('-')),'membername':_0x497b80['channel'][_0xa620('0x18')](_0x497b80[_0xa620('0x19')][_0xa620('0x1a')]('/')+0x1,_0x497b80[_0xa620('0x19')]['lastIndexOf']('-'))},_[_0xa620('0x1b')](_0x497b80,[_0xa620('0x1c'),'privilege']));this[_0xa620('0x13')](_0xa620('0x1d'),_0xa620('0x1e'),this[_0xa620('0x14')][_0x497b80['uniqueid']]);ami[_0xa620('0x13')](_0xa620('0x1f'),this[_0xa620('0x14')][_0x497b80[_0xa620('0x15')]]);}}}catch(_0x163acb){logger['error'](_0xa620('0x20'),util['inspect'](_0x163acb,{'showHidden':![],'depth':null}));}};VoiceDialReport['prototype'][_0xa620('0xc')]=function(_0x5815f3){try{if(this['isNotNull'](_0x5815f3)){if(this[_0xa620('0x14')][_0x5815f3[_0xa620('0x15')]]){this[_0xa620('0x14')][_0x5815f3[_0xa620('0x15')]]['dialstatus']=_0x5815f3[_0xa620('0x21')];if(_0x5815f3[_0xa620('0x21')]===_0xa620('0x22')){this[_0xa620('0x14')][_0x5815f3[_0xa620('0x15')]][_0xa620('0x23')]=_0x5815f3[_0xa620('0x23')];this[_0xa620('0x14')][_0x5815f3['uniqueid']][_0xa620('0x24')]=_0x5815f3['connectedlinename'];this[_0xa620('0x14')][_0x5815f3[_0xa620('0x15')]][_0xa620('0x25')]=moment()[_0xa620('0x16')](_0xa620('0x17'));this[_0xa620('0x14')][_0x5815f3[_0xa620('0x15')]]['lastevent']=_0xa620('0x26');ami[_0xa620('0x13')](_0xa620('0x27'),this[_0xa620('0x14')][_0x5815f3['uniqueid']]);}this[_0xa620('0x13')]('voice:outbound',_0xa620('0x1e'),this[_0xa620('0x14')][_0x5815f3[_0xa620('0x15')]]);}}}catch(_0x24ebc5){logger[_0xa620('0x28')]('[syncDialEnd][VoiceDialReport]',util[_0xa620('0x29')](_0x24ebc5,{'showHidden':![],'depth':null}));}};VoiceDialReport['prototype']['syncVarSet']=function(_0x43e8ef){try{if(this[_0xa620('0x11')](_0x43e8ef)){this['addVariable'](_0x43e8ef[_0xa620('0x15')],_[_0xa620('0x2a')](_0x43e8ef[_0xa620('0x2b')])[0x0],_0x43e8ef[_0xa620('0x2c')]);if(this['isNotNull'](_0x43e8ef['variable'])&&this[_0xa620('0x11')](_0x43e8ef[_0xa620('0x2b')][_0xa620('0x2d')])){if(_[_0xa620('0x12')](this[_0xa620('0x14')][_0x43e8ef[_0xa620('0x15')]])){this[_0xa620('0x14')][_0x43e8ef['uniqueid']]={'routeId':_0x43e8ef['value'],'variables':this['variables'][_0x43e8ef['uniqueid']]};this[_0xa620('0x13')](_0xa620('0x1d'),_0xa620('0x1e'),this[_0xa620('0x14')][_0x43e8ef['uniqueid']]);}}}}catch(_0x55064b){logger['error'](_0xa620('0x2e'),util[_0xa620('0x29')](_0x55064b,{'showHidden':![],'depth':null}));}};VoiceDialReport['prototype'][_0xa620('0x2f')]=function(_0x59f98e,_0x32cdb1,_0xed34b9){var _0x1ad4ce=[_0xa620('0x30'),_0xa620('0x31'),_0xa620('0x32'),_0xa620('0x33'),_0xa620('0x34'),_0xa620('0x35'),'rtpaudioqosrtt',_0xa620('0x36'),_0xa620('0x37'),_0xa620('0x38'),_0xa620('0x39'),_0xa620('0x3a'),_0xa620('0x3b'),_0xa620('0x3c'),_0xa620('0x3d'),_0xa620('0x3e'),_0xa620('0x3f'),_0xa620('0x40'),_0xa620('0x41')];if(!_[_0xa620('0x42')](_0x32cdb1)&&!_[_0xa620('0x43')](_0x1ad4ce,_0x32cdb1)){if(_[_0xa620('0x12')](this[_0xa620('0x7')][_0x59f98e])){this[_0xa620('0x7')][_0x59f98e]={};}this['variables'][_0x59f98e][_0x32cdb1]=_0xed34b9;}};VoiceDialReport[_0xa620('0x44')][_0xa620('0x10')]=function(_0x3a19c1){try{if(this['isNotNull'](_0x3a19c1)){if(this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]]){this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x45')]=moment()[_0xa620('0x16')](_0xa620('0x17'));this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x46')]=moment(this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x45')])['diff'](this[_0xa620('0x14')][_0x3a19c1['uniqueid']][_0xa620('0x47')],'seconds');this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x48')]=_0xa620('0x49');this[_0xa620('0x6')][_0xa620('0x4a')]+=0x1;if(this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x25')]){this[_0xa620('0x6')][_0xa620('0x4b')]+=0x1;this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x4c')]=moment(this[_0xa620('0x14')][_0x3a19c1['uniqueid']][_0xa620('0x25')])[_0xa620('0x4d')](this['channels'][_0x3a19c1['uniqueid']][_0xa620('0x47')],_0xa620('0x4e'));this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x4f')]=moment(this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x45')])[_0xa620('0x4d')](this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x25')],_0xa620('0x4e'));this[_0xa620('0x6')][_0xa620('0x50')]+=this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]]['holdtime'];this[_0xa620('0x6')][_0xa620('0x51')]+=this['channels'][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x4f')];}this[_0xa620('0x6')]['sumDuration']+=this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]][_0xa620('0x46')];ami['emit'](_0xa620('0x52'),this[_0xa620('0x14')][_0x3a19c1[_0xa620('0x15')]]);ami[_0xa620('0x13')](_0xa620('0x53'),this['channels'][_0x3a19c1[_0xa620('0x15')]]);this[_0xa620('0x13')](_0xa620('0x1d'),_0xa620('0x54'),this[_0xa620('0x6')]);this[_0xa620('0x13')](_0xa620('0x1d'),_0xa620('0x55'),this['channels'][_0x3a19c1[_0xa620('0x15')]]);delete this['channels'][_0x3a19c1[_0xa620('0x15')]];}if(this[_0xa620('0x7')][_0x3a19c1[_0xa620('0x15')]]){delete this[_0xa620('0x7')][_0x3a19c1[_0xa620('0x15')]];}}}catch(_0x33335e){logger[_0xa620('0x28')]('[syncHangup][VoiceDialReport]',util[_0xa620('0x29')](_0x33335e,{'showHidden':![],'depth':null}));}};module[_0xa620('0x56')]=VoiceDialReport;
\ No newline at end of file
index 7d023f2..34262e6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1add=['fullname','destcalleridnum','destcalleridname','queuecallercomplete','queuecallercompleteAt','queuecallerexitAt','reason','toUpperCase','[syncAgentComplete][VoiceQueueReport]','variable','value','CONTINUE','queueposition','EXITWITHKEY','addVariable','rtpaudioqos','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','bridgepvtcallid','membercalls','memberinterface','memberlastcall','includes','syncHangup','length','sumHoldTime','diff','milliseconds','lastevent','abandoned','custom:queuecallerunmanaged','custom:voiceQueueReport','[syncHangup][VoiceQueueReport]','transfereeuniqueid','secondtransfererexten','secondtransfereruniqueid','origtransfererexten','ATTENDEDTRANSFER','transfertype','ATTENDED','[syncAttendedTransfer][VoiceQueueReport]','BLINDTRANSFER','BLIND','[syncBlindTransfer][VoiceQueueReport]','mohstarttime','mohtime','[syncMusicOnHoldStop][VoiceQueueReport]','moment','bluebird','util','md5','../../../config/logger','../model/queueReport','socket.io-emitter','prototype','enqueue','tail','finally','sequence','queueReports','channels','queueChannels','flagQueueSummary','campaigns','variables','syncQueueSummary','bind','syncQueueSummaryComplete','queuecallerjoin','queuecallerabandon','syncQueueCallerAbandon','queuecallerleave','syncQueueCallerLeave','agentcomplete','syncAgentComplete','varset','syncVarSet','fullybooted','syncFullyBooted','musiconholdstart','syncMusicOnHoldStart','syncMusicOnHoldStop','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','loopQueueSummary','loopQueueShow','isUndefined','hasOwnProperty','isEmpty','originated','pTalking','clearZombieChannels','isNil','Action','catch','message','No\x20such\x20channel','error','[FullyBooted]\x20clear\x20realtime','clearQueueReport','agents','emitVoiceQueueChannelRemove','inspect','emit','emitVoiceQueueChannelSave','voice:queue:%s','name','voice_queue_channel:save','format','voice_queue_channel:remove','emitVoiceQueueSummary','type','inbound','strategy','answered','available','loggedIn','sumBillable','sumDuration','talking','total','unmanaged','waiting','Trunk','active','Interval','stringify','voice_queue:save','isNotNull','queues','[queues]','queuesummary','then','voiceQueues','queue','countBy','callers','toNumber','loggedin','custom:queuesummary','syncNewExten','syncQueueCallerJoin','uniqueid','queuecallerjoinAt','YYYY-MM-DD\x20HH:mm:ss','count','merge','pick','keys','push','[syncQueueCallerJoin][VoiceQueueReport]','last','holdtime','originalposition','queuecallerexitreason','ABANDONED','lastAssignedTo','[syncQueueCallerAbandon][VoiceQueueReport]','queuecallerleaveAt','connectedlinenum','connectedlinename','[syncQueueCallerLeave][VoiceQueueReport]','queuecallerabandonAt','assigned','membername','startsWith','interface','toLowerCase','queuecallerexit','add','seconds','FORWARDTRANSFER','transfer','transferexten','destexten','transferuniqueid','accountcode'];(function(_0x28cda9,_0x52e9d1){var _0x5019fb=function(_0x10ab27){while(--_0x10ab27){_0x28cda9['push'](_0x28cda9['shift']());}};_0x5019fb(++_0x52e9d1);}(_0x1add,0x1a7));var _0xd1ad=function(_0x59a946,_0x392154){_0x59a946=_0x59a946-0x0;var _0xb2b349=_0x1add[_0x59a946];return _0xb2b349;};'use strict';var _=require('lodash');var moment=require(_0xd1ad('0x0'));var BPromise=require(_0xd1ad('0x1'));var util=require(_0xd1ad('0x2'));var md5=require(_0xd1ad('0x3'));var logger=require(_0xd1ad('0x4'))('ami');var ami=require('../ami');var QueueReport=require(_0xd1ad('0x5'));var io=require(_0xd1ad('0x6'))({'host':'localhost','port':0x18eb});var Sequence=function(){};Sequence[_0xd1ad('0x7')][_0xd1ad('0x8')]=function(_0x3f561f){this['tail']=this[_0xd1ad('0x9')]?this[_0xd1ad('0x9')][_0xd1ad('0xa')](_0x3f561f):_0x3f561f();};function VoiceQueueReport(_0x416bca){this[_0xd1ad('0xb')]=new Sequence();this[_0xd1ad('0xc')]={};this['agents']=_0x416bca['agents'];this[_0xd1ad('0xd')]=_0x416bca[_0xd1ad('0xe')];this['voiceQueues']=_0x416bca['voiceQueues'];this[_0xd1ad('0xf')]=!![];this[_0xd1ad('0x10')]=_0x416bca[_0xd1ad('0x10')];this[_0xd1ad('0x11')]={};ami['on']('queuesummary',this[_0xd1ad('0x12')][_0xd1ad('0x13')](this));ami['on']('queuesummarycomplete',this[_0xd1ad('0x14')][_0xd1ad('0x13')](this));ami['on'](_0xd1ad('0x15'),this['syncQueueCallerJoin'][_0xd1ad('0x13')](this));ami['on'](_0xd1ad('0x16'),this[_0xd1ad('0x17')][_0xd1ad('0x13')](this));ami['on'](_0xd1ad('0x18'),this[_0xd1ad('0x19')]['bind'](this));ami['on'](_0xd1ad('0x1a'),this[_0xd1ad('0x1b')][_0xd1ad('0x13')](this));ami['on'](_0xd1ad('0x1c'),this[_0xd1ad('0x1d')]['bind'](this));ami['on']('hangup',this['syncHangup'][_0xd1ad('0x13')](this));ami['on'](_0xd1ad('0x1e'),this[_0xd1ad('0x1f')]['bind'](this));ami['on'](_0xd1ad('0x20'),this[_0xd1ad('0x21')]['bind'](this));ami['on']('musiconholdstop',this[_0xd1ad('0x22')][_0xd1ad('0x13')](this));ami['on'](_0xd1ad('0x23'),this[_0xd1ad('0x24')][_0xd1ad('0x13')](this));ami['on'](_0xd1ad('0x25'),this[_0xd1ad('0x26')]['bind'](this));this[_0xd1ad('0x27')]();this[_0xd1ad('0x28')]();}function isNotNull(_0x36638d){return _0x36638d!==null&&!_[_0xd1ad('0x29')](_0x36638d);}function clearChannels(_0x45a6b4){if(!_['isEmpty'](_0x45a6b4)){for(var _0x56f18d in _0x45a6b4){if(_0x45a6b4[_0xd1ad('0x2a')](_0x56f18d)){delete _0x45a6b4[_0x56f18d];}}}}function clearCampaigns(_0x146663){if(!_[_0xd1ad('0x2b')](_0x146663)){for(var _0x17a422 in _0x146663){if(_0x146663[_0xd1ad('0x2a')](_0x17a422)){_0x146663[_0x17a422][_0xd1ad('0x2c')]=0x0;}}}}function clearVoiceQueues(_0x12d468){if(!_['isEmpty'](_0x12d468)){for(var _0x5eb8e0 in _0x12d468){if(_0x12d468[_0xd1ad('0x2a')](_0x5eb8e0)){_0x12d468[_0x5eb8e0]['originated']=0x0;_0x12d468[_0x5eb8e0]['talking']=0x0;_0x12d468[_0x5eb8e0][_0xd1ad('0x2d')]=0x0;_0x12d468[_0x5eb8e0]['waiting']=0x0;_0x12d468[_0x5eb8e0]['queueStatusComplete']=!![];}}}}function clearAgentBooked(_0x4f36a3){if(!_[_0xd1ad('0x2b')](_0x4f36a3)){for(var _0x49e6bb in _0x4f36a3){if(_0x4f36a3[_0xd1ad('0x2a')](_0x49e6bb)){_0x4f36a3[_0x49e6bb]['unlockRR']=!![];}}}}VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x2e')]=function(){var _0x39c6fc=this;for(var _0x2a9af3 in this[_0xd1ad('0xd')]){if(this[_0xd1ad('0xd')][_0xd1ad('0x2a')](_0x2a9af3)){this[_0xd1ad('0xb')][_0xd1ad('0x8')](function(){if(!_[_0xd1ad('0x2f')](_0x39c6fc['channels'][_0x2a9af3])){return ami[_0xd1ad('0x30')]({'action':'status','channel':_0x39c6fc['channels'][_0x2a9af3]['channel']})[_0xd1ad('0x31')](function(_0x12f980){if(_0x12f980[_0xd1ad('0x32')]===_0xd1ad('0x33')){setTimeout(function(){if(_0x39c6fc[_0xd1ad('0xd')][_0x2a9af3]){delete _0x39c6fc['channels'][_0x2a9af3];logger[_0xd1ad('0x34')]('[voiceQueueReport][checkChannel]',_0x2a9af3);}if(_0x39c6fc[_0xd1ad('0xc')][_0x2a9af3]){delete _0x39c6fc[_0xd1ad('0xc')][_0x2a9af3];logger[_0xd1ad('0x34')]('[voiceQueueReport][checkQueueReport]',_0x2a9af3);}if(_0x39c6fc['variables'][_0x2a9af3]){delete _0x39c6fc['variables'][_0x2a9af3];logger[_0xd1ad('0x34')]('[voiceQueueReport][checkVariables]',_0x2a9af3);}},0x1f40);}});}});}}};VoiceQueueReport[_0xd1ad('0x7')]['syncFullyBooted']=function(){logger[_0xd1ad('0x34')](_0xd1ad('0x35'));clearChannels(this[_0xd1ad('0xd')]);this[_0xd1ad('0x36')](this[_0xd1ad('0xc')]);clearAgentBooked(this[_0xd1ad('0x37')]);clearVoiceQueues(this['voiceQueues']);clearCampaigns(this[_0xd1ad('0x10')]);};VoiceQueueReport['prototype'][_0xd1ad('0x36')]=function(_0x3ead41){var _0x16be66=this;if(!_[_0xd1ad('0x2b')](_0x3ead41)){for(var _0x17be66 in _0x3ead41){if(_0x3ead41[_0xd1ad('0x2a')](_0x17be66)){_0x16be66[_0xd1ad('0x38')](_0x3ead41[_0x17be66]);delete _0x3ead41[_0x17be66];}}}};function loggerCatch(_0x495fcb){return function(_0x534769){logger[_0xd1ad('0x34')](_0x495fcb,util[_0xd1ad('0x39')](_0x534769,{'showHidden':![],'depth':null}));};}VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x3a')]=function(_0x42d805,_0x37d1bc,_0x2d79ef){io['to'](_0x42d805)[_0xd1ad('0x3a')](_0x37d1bc,_0x2d79ef);};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x3b')]=function(_0x3fdf31){this[_0xd1ad('0x3a')](util['format'](_0xd1ad('0x3c'),_0x3fdf31[_0xd1ad('0x3d')]),_0xd1ad('0x3e'),_0x3fdf31);};VoiceQueueReport[_0xd1ad('0x7')]['emitVoiceQueueChannelRemove']=function(_0x3b961d){this[_0xd1ad('0x3a')](util[_0xd1ad('0x3f')]('voice:queue:%s',_0x3b961d[_0xd1ad('0x3d')]),_0xd1ad('0x40'),_0x3b961d);};VoiceQueueReport['prototype'][_0xd1ad('0x41')]=function(_0x44d7df){if(_0x44d7df[_0xd1ad('0x42')]===_0xd1ad('0x43')){var _0x1343e1={'id':_0x44d7df['id'],'name':_0x44d7df[_0xd1ad('0x3d')],'strategy':_0x44d7df[_0xd1ad('0x44')],'answered':_0x44d7df[_0xd1ad('0x45')],'available':_0x44d7df[_0xd1ad('0x46')],'loggedIn':_0x44d7df[_0xd1ad('0x47')],'pTalking':_0x44d7df['pTalking'],'sumBillable':_0x44d7df[_0xd1ad('0x48')],'sumDuration':_0x44d7df[_0xd1ad('0x49')],'sumHoldTime':_0x44d7df['sumHoldTime'],'talking':_0x44d7df[_0xd1ad('0x4a')],'total':_0x44d7df[_0xd1ad('0x4b')],'type':_0x44d7df[_0xd1ad('0x42')],'unmanaged':_0x44d7df[_0xd1ad('0x4c')],'waiting':_0x44d7df[_0xd1ad('0x4d')]};if(_0x44d7df['Trunk']){_0x1343e1[_0xd1ad('0x4e')]={'id':_0x44d7df[_0xd1ad('0x4e')]['id'],'name':_0x44d7df[_0xd1ad('0x4e')][_0xd1ad('0x3d')],'active':_0x44d7df[_0xd1ad('0x4e')][_0xd1ad('0x4f')],'callerid':_0x44d7df[_0xd1ad('0x4e')]['callerid']};}if(_0x44d7df['Interval']){_0x1343e1['Interval']={'id':_0x44d7df[_0xd1ad('0x50')]['id'],'name':_0x44d7df[_0xd1ad('0x50')][_0xd1ad('0x3d')]};}var _0x19514f=md5(JSON[_0xd1ad('0x51')](_0x1343e1));if(_0x44d7df[_0xd1ad('0x3')]!==_0x19514f){_0x44d7df[_0xd1ad('0x3')]=_0x19514f;this[_0xd1ad('0x3a')](util[_0xd1ad('0x3f')](_0xd1ad('0x3c'),_0x1343e1['name']),_0xd1ad('0x52'),_0x1343e1);}}};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x53')]=function(_0x6a8e20){return _0x6a8e20!==null&&!_[_0xd1ad('0x29')](_0x6a8e20);};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x28')]=function(){var _0x6ba48c=this;setInterval(function(){_0x6ba48c[_0xd1ad('0x2e')]();ami['Action']({'action':_0xd1ad('0x54')})[_0xd1ad('0x31')](loggerCatch(_0xd1ad('0x55')));},0x2710);};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x27')]=function(){var _0x29255e=this;setInterval(function(){if(_0x29255e['flagQueueSummary']){return ami[_0xd1ad('0x30')]({'action':_0xd1ad('0x56')})[_0xd1ad('0x57')](function(_0xd1a209){_0x29255e[_0xd1ad('0xf')]=![];})[_0xd1ad('0x31')](loggerCatch('[queuesummary]'));}},0x3e8);};VoiceQueueReport[_0xd1ad('0x7')]['syncQueueSummary']=function(_0x1e96bf){try{if(this[_0xd1ad('0x53')](_0x1e96bf)&&this[_0xd1ad('0x53')](_0x1e96bf['queue'])){if(this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]]){var _0x5e175e=_[_0xd1ad('0x5a')](this[_0xd1ad('0xd')],_0xd1ad('0x59'))[_0x1e96bf[_0xd1ad('0x59')]]||0x0;var _0x5ed152=_0x5e175e-_0x1e96bf[_0xd1ad('0x5b')];if(this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]][_0xd1ad('0x4d')]!==_[_0xd1ad('0x5c')](_0x1e96bf[_0xd1ad('0x5b')])||this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]][_0xd1ad('0x47')]!==_[_0xd1ad('0x5c')](_0x1e96bf[_0xd1ad('0x5d')])||this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]]['available']!==_[_0xd1ad('0x5c')](_0x1e96bf['available'])||this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]][_0xd1ad('0x4a')]!==_0x5ed152){this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]]['waiting']=_[_0xd1ad('0x5c')](_0x1e96bf['callers']);this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]][_0xd1ad('0x47')]=_['toNumber'](_0x1e96bf[_0xd1ad('0x5d')]);this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]][_0xd1ad('0x46')]=_[_0xd1ad('0x5c')](_0x1e96bf[_0xd1ad('0x46')]);this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]][_0xd1ad('0x4a')]=_0x5ed152>0x0?_0x5ed152:0x0;this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]][_0xd1ad('0x4a')]=this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]][_0xd1ad('0x4a')]>_[_0xd1ad('0x5c')](_0x1e96bf['loggedin'])?_['toNumber'](_0x1e96bf['loggedin']):this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]][_0xd1ad('0x4a')];this[_0xd1ad('0x41')](this[_0xd1ad('0x58')][_0x1e96bf[_0xd1ad('0x59')]]);}ami[_0xd1ad('0x3a')](_0xd1ad('0x5e'),this[_0xd1ad('0x58')][_0x1e96bf['queue']]);}}}catch(_0x5727dd){logger[_0xd1ad('0x34')]('[syncQueueSummary][VoiceQueueReport]',util[_0xd1ad('0x39')](_0x5727dd,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xd1ad('0x7')]['syncQueueSummaryComplete']=function(_0x517611){this[_0xd1ad('0xf')]=!![];};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x5f')]=function(_0xe3972c){};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x60')]=function(_0x4d93ce){try{if(this[_0xd1ad('0x53')](_0x4d93ce)){if(_['isUndefined'](this['queueReports'][_0x4d93ce['uniqueid']])){this['queueReports'][_0x4d93ce[_0xd1ad('0x61')]]=[];this[_0xd1ad('0xd')][_0x4d93ce[_0xd1ad('0x61')]]={};}var _0x3f4f69=new QueueReport();_0x3f4f69[_0xd1ad('0x3d')]=_0x4d93ce[_0xd1ad('0x59')];_0x3f4f69['type']=this[_0xd1ad('0x58')][_0x3f4f69[_0xd1ad('0x3d')]]&&this[_0xd1ad('0x58')][_0x3f4f69['name']]['type']?this['voiceQueues'][_0x3f4f69['name']][_0xd1ad('0x42')]||_0xd1ad('0x43'):_0xd1ad('0x43');_0x3f4f69[_0xd1ad('0x59')]=_0x4d93ce['queue'];_0x3f4f69[_0xd1ad('0x62')]=moment()[_0xd1ad('0x3f')](_0xd1ad('0x63'));_0x3f4f69['position']=_0x4d93ce['position'];_0x3f4f69[_0xd1ad('0x64')]=_0x4d93ce['count'];_[_0xd1ad('0x65')](_0x3f4f69,_[_0xd1ad('0x66')](_0x4d93ce,_[_0xd1ad('0x67')](_0x3f4f69)));this[_0xd1ad('0xc')][_0x4d93ce[_0xd1ad('0x61')]][_0xd1ad('0x68')](_0x3f4f69);this[_0xd1ad('0xd')][_0x4d93ce[_0xd1ad('0x61')]]=_0x3f4f69;this['emitVoiceQueueChannelSave'](_0x3f4f69);}}catch(_0x2f8ab9){logger[_0xd1ad('0x34')](_0xd1ad('0x69'),util[_0xd1ad('0x39')](_0x2f8ab9,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x17')]=function(_0x54a43e){try{if(this[_0xd1ad('0x53')](_0x54a43e)){if(this[_0xd1ad('0xc')][_0x54a43e['uniqueid']]){var _0x5644f9=_[_0xd1ad('0x6a')](this[_0xd1ad('0xc')][_0x54a43e[_0xd1ad('0x61')]]);_0x5644f9[_0xd1ad('0x6b')]=_0x54a43e[_0xd1ad('0x6b')];_0x5644f9[_0xd1ad('0x6c')]=_0x54a43e['originalposition'];_0x5644f9[_0xd1ad('0x16')]=!![];_0x5644f9['queuecallerabandonAt']=moment()['format'](_0xd1ad('0x63'));_0x5644f9[_0xd1ad('0x6d')]=_0xd1ad('0x6e');_0x5644f9[_0xd1ad('0x6f')]=null;this[_0xd1ad('0xd')][_0x54a43e[_0xd1ad('0x61')]]=_0x5644f9;this[_0xd1ad('0x38')](_0x5644f9);}}}catch(_0xa82e8e){logger['error'](_0xd1ad('0x70'),util[_0xd1ad('0x39')](_0xa82e8e,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xd1ad('0x7')]['syncQueueCallerLeave']=function(_0x7201d7){try{if(this[_0xd1ad('0x53')](_0x7201d7)){if(this[_0xd1ad('0xc')][_0x7201d7[_0xd1ad('0x61')]]){var _0x3b0339=_[_0xd1ad('0x6a')](this[_0xd1ad('0xc')][_0x7201d7[_0xd1ad('0x61')]]);_0x3b0339[_0xd1ad('0x71')]=moment()[_0xd1ad('0x3f')](_0xd1ad('0x63'));_0x3b0339[_0xd1ad('0x72')]=_0x7201d7[_0xd1ad('0x72')];_0x3b0339['connectedlinename']=_0x7201d7[_0xd1ad('0x73')];this[_0xd1ad('0xd')][_0x7201d7[_0xd1ad('0x61')]]=_0x3b0339;this['emitVoiceQueueChannelSave'](_0x3b0339);}}}catch(_0x53a5fe){logger[_0xd1ad('0x34')](_0xd1ad('0x74'),util[_0xd1ad('0x39')](_0x53a5fe,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x1b')]=function(_0x4d89d0){try{if(this[_0xd1ad('0x53')](_0x4d89d0)){if(this[_0xd1ad('0xc')][_0x4d89d0[_0xd1ad('0x61')]]){var _0x30c383=_['last'](this[_0xd1ad('0xc')][_0x4d89d0[_0xd1ad('0x61')]]);_0x30c383[_0xd1ad('0x16')]=![];_0x30c383[_0xd1ad('0x75')]=null;_0x30c383[_0xd1ad('0x76')]=!![];_0x30c383[_0xd1ad('0x6f')]=_0x4d89d0[_0xd1ad('0x77')];_0x30c383[_0xd1ad('0x6b')]=_0x4d89d0['holdtime'];if(_0x4d89d0[_0xd1ad('0x72')]==='<unknown>'&&_[_0xd1ad('0x78')](_0x4d89d0[_0xd1ad('0x79')][_0xd1ad('0x7a')](),'sip/')){if(!_0x30c383['transfer']){_0x30c383[_0xd1ad('0x7b')]=!![];_0x30c383['queuecallerexitAt']=moment(_0x30c383[_0xd1ad('0x62')])[_0xd1ad('0x7c')](_0x4d89d0['holdtime'],_0xd1ad('0x7d'))[_0xd1ad('0x3f')](_0xd1ad('0x63'));_0x30c383[_0xd1ad('0x6d')]=_0xd1ad('0x7e');_0x30c383[_0xd1ad('0x7f')]=!![];_0x30c383['transfertype']='FORWARD';_0x30c383[_0xd1ad('0x80')]=_0x4d89d0[_0xd1ad('0x81')];_0x30c383[_0xd1ad('0x82')]=_0x4d89d0[_0xd1ad('0x61')];}if(this[_0xd1ad('0x37')][_0x4d89d0[_0xd1ad('0x79')]]){_0x30c383[_0xd1ad('0x72')]=this['agents'][_0x4d89d0['interface']][_0xd1ad('0x83')];_0x30c383[_0xd1ad('0x73')]=this[_0xd1ad('0x37')][_0x4d89d0[_0xd1ad('0x79')]][_0xd1ad('0x84')];_0x30c383[_0xd1ad('0x85')]=this[_0xd1ad('0x37')][_0x4d89d0[_0xd1ad('0x79')]][_0xd1ad('0x83')];_0x30c383[_0xd1ad('0x86')]=this[_0xd1ad('0x37')][_0x4d89d0['interface']]['fullname'];}}else{_0x30c383[_0xd1ad('0x87')]=!![];_0x30c383[_0xd1ad('0x88')]=moment()['format'](_0xd1ad('0x63'));_0x30c383[_0xd1ad('0x7b')]=![];_0x30c383[_0xd1ad('0x89')]=null;if(_0x4d89d0[_0xd1ad('0x8a')]!==_0xd1ad('0x7f')){_0x30c383[_0xd1ad('0x6d')]='COMPLETEDBY'+_0x4d89d0[_0xd1ad('0x8a')][_0xd1ad('0x8b')]();}}this[_0xd1ad('0xd')][_0x4d89d0[_0xd1ad('0x61')]]=_0x30c383;this[_0xd1ad('0x38')](_0x30c383);}}}catch(_0x21a3f4){logger[_0xd1ad('0x34')](_0xd1ad('0x8c'),util[_0xd1ad('0x39')](_0x21a3f4,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x1d')]=function(_0x33500d){try{if(this[_0xd1ad('0x53')](_0x33500d)){this['addVariable'](_0x33500d[_0xd1ad('0x61')],_[_0xd1ad('0x67')](_0x33500d[_0xd1ad('0x8d')])[0x0],_0x33500d[_0xd1ad('0x8e')]);if(this['queueReports'][_0x33500d[_0xd1ad('0x61')]]){var _0x1d50a8=_[_0xd1ad('0x6a')](this[_0xd1ad('0xc')][_0x33500d[_0xd1ad('0x61')]]);if(_0x1d50a8){if(this['isNotNull'](_0x33500d['variable'])&&this['isNotNull'](_0x33500d[_0xd1ad('0x8d')]['queuestatus'])){switch(_0x33500d[_0xd1ad('0x8e')]){case _0xd1ad('0x8f'):_0x1d50a8[_0xd1ad('0x7b')]=![];_0x1d50a8[_0xd1ad('0x89')]=null;break;default:_0x1d50a8[_0xd1ad('0x7b')]=!![];_0x1d50a8[_0xd1ad('0x89')]=moment()[_0xd1ad('0x3f')]('YYYY-MM-DD\x20HH:mm:ss');_0x1d50a8[_0xd1ad('0x71')]=moment()['format'](_0xd1ad('0x63'));}_0x1d50a8[_0xd1ad('0x16')]=![];_0x1d50a8[_0xd1ad('0x75')]=null;_0x1d50a8[_0xd1ad('0x6d')]=_0x33500d[_0xd1ad('0x8e')];this[_0xd1ad('0xd')][_0x33500d[_0xd1ad('0x61')]]=_0x1d50a8;this[_0xd1ad('0x38')](_0x1d50a8);}else if(this['isNotNull'](_0x33500d[_0xd1ad('0x8d')])&&this[_0xd1ad('0x53')](_0x33500d[_0xd1ad('0x8d')][_0xd1ad('0x90')])){if(!_0x1d50a8[_0xd1ad('0x16')]){_0x1d50a8[_0xd1ad('0x7b')]=!![];_0x1d50a8['queuecallerexitAt']=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');_0x1d50a8[_0xd1ad('0x6d')]=_0xd1ad('0x91');_0x1d50a8[_0xd1ad('0x71')]=moment()[_0xd1ad('0x3f')](_0xd1ad('0x63'));this[_0xd1ad('0xd')][_0x33500d[_0xd1ad('0x61')]]=_0x1d50a8;}}_0x1d50a8[_0xd1ad('0x11')]=this['variables'][_0x33500d[_0xd1ad('0x61')]];}}}}catch(_0x1b16f1){logger[_0xd1ad('0x34')]('[syncVarSet][VoiceQueueReport]',util[_0xd1ad('0x39')](_0x1b16f1,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0xd1ad('0x92')]=function(_0x87e9e1,_0x4ec834,_0x1ef9da){var _0x37a2b6=[_0xd1ad('0x93'),'rtpaudioqosbridged',_0xd1ad('0x94'),_0xd1ad('0x95'),'rtpaudioqosloss',_0xd1ad('0x96'),_0xd1ad('0x97'),_0xd1ad('0x98'),_0xd1ad('0x99'),_0xd1ad('0x9a'),_0xd1ad('0x9b'),_0xd1ad('0x9c'),_0xd1ad('0x9d'),'memberdynamic',_0xd1ad('0x9e'),_0xd1ad('0x9f'),'membername','memberpenalty','memberrealtime'];if(!_[_0xd1ad('0x2f')](_0x4ec834)&&!_[_0xd1ad('0xa0')](_0x37a2b6,_0x4ec834)){if(_['isUndefined'](this[_0xd1ad('0x11')][_0x87e9e1])){this[_0xd1ad('0x11')][_0x87e9e1]={};}this[_0xd1ad('0x11')][_0x87e9e1][_0x4ec834]=_0x1ef9da;}};VoiceQueueReport['prototype'][_0xd1ad('0xa1')]=function(_0x10586f){try{if(this[_0xd1ad('0x53')](_0x10586f)){if(this[_0xd1ad('0xc')][_0x10586f[_0xd1ad('0x61')]]){for(var _0x327384=0x0,_0x23f52c={};_0x327384<this[_0xd1ad('0xc')][_0x10586f[_0xd1ad('0x61')]][_0xd1ad('0xa2')];_0x327384+=0x1){_0x23f52c=this[_0xd1ad('0xc')][_0x10586f['uniqueid']][_0x327384];if(this['voiceQueues'][_0x23f52c[_0xd1ad('0x59')]]){if(_0x23f52c[_0xd1ad('0x7b')]){this[_0xd1ad('0x58')][_0x23f52c['queue']][_0xd1ad('0x4c')]+=0x1;}this['voiceQueues'][_0x23f52c[_0xd1ad('0x59')]][_0xd1ad('0xa3')]+=moment(_0x23f52c[_0xd1ad('0x71')])[_0xd1ad('0xa4')](_0x23f52c[_0xd1ad('0x62')],'seconds');if(_0x327384===this[_0xd1ad('0xc')][_0x10586f[_0xd1ad('0x61')]]['length']-0x1){this[_0xd1ad('0x58')][_0x23f52c[_0xd1ad('0x59')]][_0xd1ad('0x49')]+=moment()[_0xd1ad('0xa5')](0x0)[_0xd1ad('0xa4')](_0x23f52c[_0xd1ad('0x62')],_0xd1ad('0x7d'));this['voiceQueues'][_0x23f52c['queue']]['total']+=0x1;if(_0x23f52c['queuecallercomplete']){this[_0xd1ad('0x58')][_0x23f52c[_0xd1ad('0x59')]][_0xd1ad('0x45')]+=0x1;this['voiceQueues'][_0x23f52c[_0xd1ad('0x59')]][_0xd1ad('0x48')]+=moment()[_0xd1ad('0xa5')](0x0)[_0xd1ad('0xa4')](_0x23f52c[_0xd1ad('0x71')],_0xd1ad('0x7d'));}if(_0x23f52c[_0xd1ad('0x16')]){_0x23f52c[_0xd1ad('0xa6')]=_0xd1ad('0xa7');ami[_0xd1ad('0x3a')]('custom:queuecallerabandon',_0x23f52c);}if(_0x23f52c['queuecallerexit']){_0x23f52c[_0xd1ad('0xa6')]=_0xd1ad('0x4c');ami[_0xd1ad('0x3a')](_0xd1ad('0xa8'),_0x23f52c);}}else{this[_0xd1ad('0x58')][_0x23f52c[_0xd1ad('0x59')]]['sumDuration']+=this[_0xd1ad('0x58')][_0x23f52c['queue']]['sumHoldTime'];}this[_0xd1ad('0xd')][_0x10586f['uniqueid']]=_0x23f52c;this['emitVoiceQueueChannelRemove'](_0x23f52c);}}ami['emit'](_0xd1ad('0xa9'),this['queueReports'][_0x10586f[_0xd1ad('0x61')]]);delete this[_0xd1ad('0xc')][_0x10586f[_0xd1ad('0x61')]];delete this['channels'][_0x10586f[_0xd1ad('0x61')]];}if(this[_0xd1ad('0x11')][_0x10586f[_0xd1ad('0x61')]]){delete this[_0xd1ad('0x11')][_0x10586f[_0xd1ad('0x61')]];}}}catch(_0x245618){logger[_0xd1ad('0x34')](_0xd1ad('0xaa'),util[_0xd1ad('0x39')](_0x245618,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xd1ad('0x7')]['syncAttendedTransfer']=function(_0x4ca47a){try{if(this['isNotNull'](_0x4ca47a)){var _0x2774d2;if(this[_0xd1ad('0xc')][_0x4ca47a[_0xd1ad('0xab')]]){_0x2774d2=_[_0xd1ad('0x6a')](this[_0xd1ad('0xc')][_0x4ca47a['transfereeuniqueid']]);_0x2774d2['transferexten']=_0x4ca47a[_0xd1ad('0xac')];_0x2774d2[_0xd1ad('0x82')]=_0x4ca47a[_0xd1ad('0xad')];}else if(this[_0xd1ad('0xc')][_0x4ca47a['transfertargetuniqueid']]){_0x2774d2=_[_0xd1ad('0x6a')](this['queueReports'][_0x4ca47a['transfertargetuniqueid']]);_0x2774d2[_0xd1ad('0x80')]=_0x4ca47a[_0xd1ad('0xae')];_0x2774d2['transferuniqueid']=_0x4ca47a['origtransfereruniqueid'];}if(_0x2774d2){_0x2774d2[_0xd1ad('0x6d')]=_0xd1ad('0xaf');_0x2774d2['transfer']=!![];_0x2774d2[_0xd1ad('0xb0')]=_0xd1ad('0xb1');_0x2774d2['queuecallercompleteAt']=moment()[_0xd1ad('0x3f')](_0xd1ad('0x63'));}}}catch(_0x3e5aee){logger['error'](_0xd1ad('0xb2'),util['inspect'](_0x3e5aee,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0xd1ad('0x26')]=function(_0x2447d1){try{if(this[_0xd1ad('0x53')](_0x2447d1)){if(this[_0xd1ad('0xc')][_0x2447d1[_0xd1ad('0xab')]]){var _0x2b8d0b=_[_0xd1ad('0x6a')](this[_0xd1ad('0xc')][_0x2447d1[_0xd1ad('0xab')]]);_0x2b8d0b['queuecallerexitreason']=_0xd1ad('0xb3');_0x2b8d0b[_0xd1ad('0x7f')]=!![];_0x2b8d0b[_0xd1ad('0xb0')]=_0xd1ad('0xb4');_0x2b8d0b['transferexten']=_0x2447d1['extension'];_0x2b8d0b[_0xd1ad('0x82')]=_0x2447d1[_0xd1ad('0xab')];}}}catch(_0xe68b25){logger[_0xd1ad('0x34')](_0xd1ad('0xb5'),util['inspect'](_0xe68b25,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x21')]=function(_0xcef6b3){try{if(this[_0xd1ad('0x53')](_0xcef6b3)){if(this[_0xd1ad('0xc')][_0xcef6b3['uniqueid']]){var _0x1788b0=_['last'](this['queueReports'][_0xcef6b3[_0xd1ad('0x61')]]);if(!_[_0xd1ad('0x2f')](_0x1788b0[_0xd1ad('0x71')])){_0x1788b0[_0xd1ad('0xb6')]=moment()[_0xd1ad('0x3f')](_0xd1ad('0x63'));}}}}catch(_0x1f1826){logger['error']('[syncMusicOnHoldStart][VoiceQueueReport]',util['inspect'](_0x1f1826,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xd1ad('0x7')][_0xd1ad('0x22')]=function(_0x5272dc){try{if(this[_0xd1ad('0x53')](_0x5272dc)){if(this['queueReports'][_0x5272dc[_0xd1ad('0x61')]]){var _0x353ec2=_[_0xd1ad('0x6a')](this['queueReports'][_0x5272dc[_0xd1ad('0x61')]]);if(!_['isNil'](_0x353ec2[_0xd1ad('0xb6')])){_0x353ec2[_0xd1ad('0xb7')]+=moment()[_0xd1ad('0xa5')](0x0)[_0xd1ad('0xa4')](_0x353ec2[_0xd1ad('0xb6')],_0xd1ad('0x7d'));delete _0x353ec2['mohstarttime'];}}}}catch(_0x47632e){logger['error'](_0xd1ad('0xb8'),util[_0xd1ad('0x39')](_0x47632e,{'showHidden':![],'depth':null}));}};module['exports']=VoiceQueueReport;
\ No newline at end of file
+var _0x7c2a=['BLIND','[syncBlindTransfer][VoiceQueueReport]','mohstarttime','diff','[syncMusicOnHoldStop][VoiceQueueReport]','lodash','bluebird','util','../model/queueReport','localhost','prototype','enqueue','tail','sequence','queueReports','agents','channels','queueChannels','voiceQueues','flagQueueSummary','campaigns','variables','syncQueueSummary','bind','queuesummarycomplete','syncQueueSummaryComplete','syncQueueCallerJoin','queuecallerabandon','syncQueueCallerAbandon','syncQueueCallerLeave','agentcomplete','varset','hangup','syncHangup','fullybooted','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','attendedtransfer','blindtransfer','loopQueueSummary','loopQueueShow','isUndefined','isEmpty','hasOwnProperty','originated','talking','waiting','unlockRR','isNil','status','channel','catch','message','No\x20such\x20channel','error','[voiceQueueReport][checkQueueReport]','[voiceQueueReport][checkVariables]','[FullyBooted]\x20clear\x20realtime','clearQueueReport','emitVoiceQueueChannelRemove','inspect','emit','emitVoiceQueueChannelSave','format','name','voice_queue_channel:save','voice:queue:%s','voice_queue_channel:remove','type','inbound','strategy','answered','available','loggedIn','sumDuration','total','unmanaged','Trunk','callerid','Interval','stringify','md5','voice_queue:save','isNotNull','Action','queues','[queues]','[queuesummary]','queue','countBy','callers','toNumber','loggedin','emitVoiceQueueSummary','custom:queuesummary','uniqueid','queuecallerjoinAt','YYYY-MM-DD\x20HH:mm:ss','position','count','keys','push','last','holdtime','originalposition','queuecallerexitreason','ABANDONED','[syncQueueCallerAbandon][VoiceQueueReport]','queuecallerleaveAt','connectedlinenum','connectedlinename','[syncQueueCallerLeave][VoiceQueueReport]','syncAgentComplete','queuecallerabandonAt','assigned','lastAssignedTo','membername','<unknown>','startsWith','interface','toLowerCase','sip/','queuecallerexitAt','add','seconds','transferexten','destexten','transferuniqueid','fullname','destcalleridname','queuecallercomplete','queuecallerexit','transfer','COMPLETEDBY','reason','toUpperCase','[syncAgentComplete][VoiceQueueReport]','syncVarSet','addVariable','variable','value','queuestatus','CONTINUE','EXITWITHKEY','[syncVarSet][VoiceQueueReport]','rtpaudioqos','rtpaudioqosjitter','rtpaudioqoslossbridged','rtpaudioqosrtt','sipuri','bridgepvtcallid','membercalls','memberdynamic','memberinterface','memberlastcall','memberrealtime','length','sumHoldTime','milliseconds','sumBillable','lastevent','abandoned','[syncHangup][VoiceQueueReport]','syncAttendedTransfer','secondtransfererexten','secondtransfereruniqueid','origtransfererexten','origtransfereruniqueid','ATTENDEDTRANSFER','transfertype','ATTENDED','queuecallercompleteAt','[syncAttendedTransfer][VoiceQueueReport]','syncBlindTransfer','transfereeuniqueid','BLINDTRANSFER'];(function(_0x23d2a0,_0x516174){var _0x409e80=function(_0x432940){while(--_0x432940){_0x23d2a0['push'](_0x23d2a0['shift']());}};_0x409e80(++_0x516174);}(_0x7c2a,0x169));var _0xa7c2=function(_0x35e5fd,_0x3aee8a){_0x35e5fd=_0x35e5fd-0x0;var _0xea0e07=_0x7c2a[_0x35e5fd];return _0xea0e07;};'use strict';var _=require(_0xa7c2('0x0'));var moment=require('moment');var BPromise=require(_0xa7c2('0x1'));var util=require(_0xa7c2('0x2'));var md5=require('md5');var logger=require('../../../config/logger')('ami');var ami=require('../ami');var QueueReport=require(_0xa7c2('0x3'));var io=require('socket.io-emitter')({'host':_0xa7c2('0x4'),'port':0x18eb});var Sequence=function(){};Sequence[_0xa7c2('0x5')][_0xa7c2('0x6')]=function(_0x4442f9){this['tail']=this[_0xa7c2('0x7')]?this[_0xa7c2('0x7')]['finally'](_0x4442f9):_0x4442f9();};function VoiceQueueReport(_0x56234f){this[_0xa7c2('0x8')]=new Sequence();this[_0xa7c2('0x9')]={};this[_0xa7c2('0xa')]=_0x56234f['agents'];this[_0xa7c2('0xb')]=_0x56234f[_0xa7c2('0xc')];this['voiceQueues']=_0x56234f[_0xa7c2('0xd')];this[_0xa7c2('0xe')]=!![];this[_0xa7c2('0xf')]=_0x56234f['campaigns'];this[_0xa7c2('0x10')]={};ami['on']('queuesummary',this[_0xa7c2('0x11')][_0xa7c2('0x12')](this));ami['on'](_0xa7c2('0x13'),this[_0xa7c2('0x14')][_0xa7c2('0x12')](this));ami['on']('queuecallerjoin',this[_0xa7c2('0x15')][_0xa7c2('0x12')](this));ami['on'](_0xa7c2('0x16'),this[_0xa7c2('0x17')][_0xa7c2('0x12')](this));ami['on']('queuecallerleave',this[_0xa7c2('0x18')]['bind'](this));ami['on'](_0xa7c2('0x19'),this['syncAgentComplete'][_0xa7c2('0x12')](this));ami['on'](_0xa7c2('0x1a'),this['syncVarSet'][_0xa7c2('0x12')](this));ami['on'](_0xa7c2('0x1b'),this[_0xa7c2('0x1c')][_0xa7c2('0x12')](this));ami['on'](_0xa7c2('0x1d'),this['syncFullyBooted']['bind'](this));ami['on'](_0xa7c2('0x1e'),this[_0xa7c2('0x1f')]['bind'](this));ami['on'](_0xa7c2('0x20'),this[_0xa7c2('0x21')]['bind'](this));ami['on'](_0xa7c2('0x22'),this['syncAttendedTransfer'][_0xa7c2('0x12')](this));ami['on'](_0xa7c2('0x23'),this['syncBlindTransfer'][_0xa7c2('0x12')](this));this[_0xa7c2('0x24')]();this[_0xa7c2('0x25')]();}function isNotNull(_0x5dbdf8){return _0x5dbdf8!==null&&!_[_0xa7c2('0x26')](_0x5dbdf8);}function clearChannels(_0x4c800e){if(!_[_0xa7c2('0x27')](_0x4c800e)){for(var _0x23b171 in _0x4c800e){if(_0x4c800e[_0xa7c2('0x28')](_0x23b171)){delete _0x4c800e[_0x23b171];}}}}function clearCampaigns(_0x58fcb3){if(!_[_0xa7c2('0x27')](_0x58fcb3)){for(var _0x562e8a in _0x58fcb3){if(_0x58fcb3[_0xa7c2('0x28')](_0x562e8a)){_0x58fcb3[_0x562e8a][_0xa7c2('0x29')]=0x0;}}}}function clearVoiceQueues(_0x588a6d){if(!_['isEmpty'](_0x588a6d)){for(var _0x2a2a2c in _0x588a6d){if(_0x588a6d[_0xa7c2('0x28')](_0x2a2a2c)){_0x588a6d[_0x2a2a2c][_0xa7c2('0x29')]=0x0;_0x588a6d[_0x2a2a2c][_0xa7c2('0x2a')]=0x0;_0x588a6d[_0x2a2a2c]['pTalking']=0x0;_0x588a6d[_0x2a2a2c][_0xa7c2('0x2b')]=0x0;_0x588a6d[_0x2a2a2c]['queueStatusComplete']=!![];}}}}function clearAgentBooked(_0x26749f){if(!_[_0xa7c2('0x27')](_0x26749f)){for(var _0x4f38c6 in _0x26749f){if(_0x26749f[_0xa7c2('0x28')](_0x4f38c6)){_0x26749f[_0x4f38c6][_0xa7c2('0x2c')]=!![];}}}}VoiceQueueReport[_0xa7c2('0x5')]['clearZombieChannels']=function(){var _0x4a0c7b=this;for(var _0x5dd9ca in this[_0xa7c2('0xb')]){if(this[_0xa7c2('0xb')][_0xa7c2('0x28')](_0x5dd9ca)){this['sequence'][_0xa7c2('0x6')](function(){if(!_[_0xa7c2('0x2d')](_0x4a0c7b[_0xa7c2('0xb')][_0x5dd9ca])){return ami['Action']({'action':_0xa7c2('0x2e'),'channel':_0x4a0c7b[_0xa7c2('0xb')][_0x5dd9ca][_0xa7c2('0x2f')]})[_0xa7c2('0x30')](function(_0x530a28){if(_0x530a28[_0xa7c2('0x31')]===_0xa7c2('0x32')){setTimeout(function(){if(_0x4a0c7b[_0xa7c2('0xb')][_0x5dd9ca]){delete _0x4a0c7b[_0xa7c2('0xb')][_0x5dd9ca];logger[_0xa7c2('0x33')]('[voiceQueueReport][checkChannel]',_0x5dd9ca);}if(_0x4a0c7b[_0xa7c2('0x9')][_0x5dd9ca]){delete _0x4a0c7b[_0xa7c2('0x9')][_0x5dd9ca];logger[_0xa7c2('0x33')](_0xa7c2('0x34'),_0x5dd9ca);}if(_0x4a0c7b['variables'][_0x5dd9ca]){delete _0x4a0c7b['variables'][_0x5dd9ca];logger[_0xa7c2('0x33')](_0xa7c2('0x35'),_0x5dd9ca);}},0x1f40);}});}});}}};VoiceQueueReport['prototype']['syncFullyBooted']=function(){logger['error'](_0xa7c2('0x36'));clearChannels(this[_0xa7c2('0xb')]);this[_0xa7c2('0x37')](this[_0xa7c2('0x9')]);clearAgentBooked(this['agents']);clearVoiceQueues(this['voiceQueues']);clearCampaigns(this[_0xa7c2('0xf')]);};VoiceQueueReport['prototype'][_0xa7c2('0x37')]=function(_0x185117){var _0x52fec3=this;if(!_[_0xa7c2('0x27')](_0x185117)){for(var _0xaf9fc1 in _0x185117){if(_0x185117['hasOwnProperty'](_0xaf9fc1)){_0x52fec3[_0xa7c2('0x38')](_0x185117[_0xaf9fc1]);delete _0x185117[_0xaf9fc1];}}}};function loggerCatch(_0x143aff){return function(_0x55dfbc){logger[_0xa7c2('0x33')](_0x143aff,util[_0xa7c2('0x39')](_0x55dfbc,{'showHidden':![],'depth':null}));};}VoiceQueueReport[_0xa7c2('0x5')]['emit']=function(_0x588275,_0x308600,_0x2d776d){io['to'](_0x588275)[_0xa7c2('0x3a')](_0x308600,_0x2d776d);};VoiceQueueReport[_0xa7c2('0x5')][_0xa7c2('0x3b')]=function(_0x1501ec){this[_0xa7c2('0x3a')](util[_0xa7c2('0x3c')]('voice:queue:%s',_0x1501ec[_0xa7c2('0x3d')]),_0xa7c2('0x3e'),_0x1501ec);};VoiceQueueReport[_0xa7c2('0x5')][_0xa7c2('0x38')]=function(_0x282485){this[_0xa7c2('0x3a')](util[_0xa7c2('0x3c')](_0xa7c2('0x3f'),_0x282485[_0xa7c2('0x3d')]),_0xa7c2('0x40'),_0x282485);};VoiceQueueReport[_0xa7c2('0x5')]['emitVoiceQueueSummary']=function(_0x6d112e){if(_0x6d112e[_0xa7c2('0x41')]===_0xa7c2('0x42')){var _0x5627b2={'id':_0x6d112e['id'],'name':_0x6d112e[_0xa7c2('0x3d')],'strategy':_0x6d112e[_0xa7c2('0x43')],'answered':_0x6d112e[_0xa7c2('0x44')],'available':_0x6d112e[_0xa7c2('0x45')],'loggedIn':_0x6d112e[_0xa7c2('0x46')],'pTalking':_0x6d112e['pTalking'],'sumBillable':_0x6d112e['sumBillable'],'sumDuration':_0x6d112e[_0xa7c2('0x47')],'sumHoldTime':_0x6d112e['sumHoldTime'],'talking':_0x6d112e[_0xa7c2('0x2a')],'total':_0x6d112e[_0xa7c2('0x48')],'type':_0x6d112e[_0xa7c2('0x41')],'unmanaged':_0x6d112e[_0xa7c2('0x49')],'waiting':_0x6d112e[_0xa7c2('0x2b')]};if(_0x6d112e[_0xa7c2('0x4a')]){_0x5627b2[_0xa7c2('0x4a')]={'id':_0x6d112e[_0xa7c2('0x4a')]['id'],'name':_0x6d112e[_0xa7c2('0x4a')]['name'],'active':_0x6d112e[_0xa7c2('0x4a')]['active'],'callerid':_0x6d112e['Trunk'][_0xa7c2('0x4b')]};}if(_0x6d112e[_0xa7c2('0x4c')]){_0x5627b2[_0xa7c2('0x4c')]={'id':_0x6d112e[_0xa7c2('0x4c')]['id'],'name':_0x6d112e[_0xa7c2('0x4c')][_0xa7c2('0x3d')]};}var _0x1f4451=md5(JSON[_0xa7c2('0x4d')](_0x5627b2));if(_0x6d112e[_0xa7c2('0x4e')]!==_0x1f4451){_0x6d112e[_0xa7c2('0x4e')]=_0x1f4451;this[_0xa7c2('0x3a')](util[_0xa7c2('0x3c')](_0xa7c2('0x3f'),_0x5627b2[_0xa7c2('0x3d')]),_0xa7c2('0x4f'),_0x5627b2);}}};VoiceQueueReport[_0xa7c2('0x5')][_0xa7c2('0x50')]=function(_0x1fe269){return _0x1fe269!==null&&!_[_0xa7c2('0x26')](_0x1fe269);};VoiceQueueReport[_0xa7c2('0x5')]['loopQueueShow']=function(){var _0x5c4ac4=this;setInterval(function(){_0x5c4ac4['clearZombieChannels']();ami[_0xa7c2('0x51')]({'action':_0xa7c2('0x52')})[_0xa7c2('0x30')](loggerCatch(_0xa7c2('0x53')));},0x2710);};VoiceQueueReport[_0xa7c2('0x5')]['loopQueueSummary']=function(){var _0x27c41a=this;setInterval(function(){if(_0x27c41a[_0xa7c2('0xe')]){return ami[_0xa7c2('0x51')]({'action':'queuesummary'})['then'](function(_0x1d5618){_0x27c41a[_0xa7c2('0xe')]=![];})['catch'](loggerCatch(_0xa7c2('0x54')));}},0x3e8);};VoiceQueueReport[_0xa7c2('0x5')]['syncQueueSummary']=function(_0xf5c8a1){try{if(this['isNotNull'](_0xf5c8a1)&&this['isNotNull'](_0xf5c8a1[_0xa7c2('0x55')])){if(this[_0xa7c2('0xd')][_0xf5c8a1['queue']]){var _0x10fa9a=_[_0xa7c2('0x56')](this['channels'],'queue')[_0xf5c8a1[_0xa7c2('0x55')]]||0x0;var _0x24f630=_0x10fa9a-_0xf5c8a1[_0xa7c2('0x57')];if(this[_0xa7c2('0xd')][_0xf5c8a1[_0xa7c2('0x55')]][_0xa7c2('0x2b')]!==_[_0xa7c2('0x58')](_0xf5c8a1[_0xa7c2('0x57')])||this[_0xa7c2('0xd')][_0xf5c8a1[_0xa7c2('0x55')]][_0xa7c2('0x46')]!==_[_0xa7c2('0x58')](_0xf5c8a1[_0xa7c2('0x59')])||this[_0xa7c2('0xd')][_0xf5c8a1['queue']]['available']!==_[_0xa7c2('0x58')](_0xf5c8a1[_0xa7c2('0x45')])||this[_0xa7c2('0xd')][_0xf5c8a1[_0xa7c2('0x55')]]['talking']!==_0x24f630){this[_0xa7c2('0xd')][_0xf5c8a1[_0xa7c2('0x55')]][_0xa7c2('0x2b')]=_[_0xa7c2('0x58')](_0xf5c8a1['callers']);this[_0xa7c2('0xd')][_0xf5c8a1[_0xa7c2('0x55')]][_0xa7c2('0x46')]=_[_0xa7c2('0x58')](_0xf5c8a1[_0xa7c2('0x59')]);this[_0xa7c2('0xd')][_0xf5c8a1['queue']][_0xa7c2('0x45')]=_[_0xa7c2('0x58')](_0xf5c8a1[_0xa7c2('0x45')]);this['voiceQueues'][_0xf5c8a1[_0xa7c2('0x55')]][_0xa7c2('0x2a')]=_0x24f630>0x0?_0x24f630:0x0;this[_0xa7c2('0xd')][_0xf5c8a1[_0xa7c2('0x55')]][_0xa7c2('0x2a')]=this[_0xa7c2('0xd')][_0xf5c8a1['queue']][_0xa7c2('0x2a')]>_[_0xa7c2('0x58')](_0xf5c8a1['loggedin'])?_[_0xa7c2('0x58')](_0xf5c8a1[_0xa7c2('0x59')]):this[_0xa7c2('0xd')][_0xf5c8a1[_0xa7c2('0x55')]][_0xa7c2('0x2a')];this[_0xa7c2('0x5a')](this[_0xa7c2('0xd')][_0xf5c8a1[_0xa7c2('0x55')]]);}ami['emit'](_0xa7c2('0x5b'),this[_0xa7c2('0xd')][_0xf5c8a1[_0xa7c2('0x55')]]);}}}catch(_0x3a926d){logger[_0xa7c2('0x33')]('[syncQueueSummary][VoiceQueueReport]',util['inspect'](_0x3a926d,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xa7c2('0x5')]['syncQueueSummaryComplete']=function(_0x557b3d){this[_0xa7c2('0xe')]=!![];};VoiceQueueReport[_0xa7c2('0x5')]['syncNewExten']=function(_0x3976d2){};VoiceQueueReport[_0xa7c2('0x5')]['syncQueueCallerJoin']=function(_0x37b11c){try{if(this[_0xa7c2('0x50')](_0x37b11c)){if(_[_0xa7c2('0x26')](this[_0xa7c2('0x9')][_0x37b11c[_0xa7c2('0x5c')]])){this[_0xa7c2('0x9')][_0x37b11c[_0xa7c2('0x5c')]]=[];this[_0xa7c2('0xb')][_0x37b11c[_0xa7c2('0x5c')]]={};}var _0x39dea1=new QueueReport();_0x39dea1[_0xa7c2('0x3d')]=_0x37b11c[_0xa7c2('0x55')];_0x39dea1[_0xa7c2('0x41')]=this[_0xa7c2('0xd')][_0x39dea1[_0xa7c2('0x3d')]]&&this[_0xa7c2('0xd')][_0x39dea1[_0xa7c2('0x3d')]][_0xa7c2('0x41')]?this[_0xa7c2('0xd')][_0x39dea1[_0xa7c2('0x3d')]][_0xa7c2('0x41')]||_0xa7c2('0x42'):_0xa7c2('0x42');_0x39dea1['queue']=_0x37b11c[_0xa7c2('0x55')];_0x39dea1[_0xa7c2('0x5d')]=moment()['format'](_0xa7c2('0x5e'));_0x39dea1[_0xa7c2('0x5f')]=_0x37b11c[_0xa7c2('0x5f')];_0x39dea1[_0xa7c2('0x60')]=_0x37b11c[_0xa7c2('0x60')];_['merge'](_0x39dea1,_['pick'](_0x37b11c,_[_0xa7c2('0x61')](_0x39dea1)));this['queueReports'][_0x37b11c[_0xa7c2('0x5c')]][_0xa7c2('0x62')](_0x39dea1);this['channels'][_0x37b11c['uniqueid']]=_0x39dea1;this['emitVoiceQueueChannelSave'](_0x39dea1);}}catch(_0x411a2a){logger[_0xa7c2('0x33')]('[syncQueueCallerJoin][VoiceQueueReport]',util['inspect'](_0x411a2a,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xa7c2('0x5')][_0xa7c2('0x17')]=function(_0x18275d){try{if(this['isNotNull'](_0x18275d)){if(this[_0xa7c2('0x9')][_0x18275d[_0xa7c2('0x5c')]]){var _0x901942=_[_0xa7c2('0x63')](this[_0xa7c2('0x9')][_0x18275d[_0xa7c2('0x5c')]]);_0x901942[_0xa7c2('0x64')]=_0x18275d[_0xa7c2('0x64')];_0x901942[_0xa7c2('0x65')]=_0x18275d[_0xa7c2('0x65')];_0x901942[_0xa7c2('0x16')]=!![];_0x901942['queuecallerabandonAt']=moment()[_0xa7c2('0x3c')](_0xa7c2('0x5e'));_0x901942[_0xa7c2('0x66')]=_0xa7c2('0x67');_0x901942['lastAssignedTo']=null;this['channels'][_0x18275d[_0xa7c2('0x5c')]]=_0x901942;this[_0xa7c2('0x38')](_0x901942);}}}catch(_0x3557b3){logger[_0xa7c2('0x33')](_0xa7c2('0x68'),util[_0xa7c2('0x39')](_0x3557b3,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xa7c2('0x5')][_0xa7c2('0x18')]=function(_0x273719){try{if(this[_0xa7c2('0x50')](_0x273719)){if(this[_0xa7c2('0x9')][_0x273719['uniqueid']]){var _0x1cafb1=_[_0xa7c2('0x63')](this[_0xa7c2('0x9')][_0x273719[_0xa7c2('0x5c')]]);_0x1cafb1[_0xa7c2('0x69')]=moment()[_0xa7c2('0x3c')](_0xa7c2('0x5e'));_0x1cafb1[_0xa7c2('0x6a')]=_0x273719[_0xa7c2('0x6a')];_0x1cafb1[_0xa7c2('0x6b')]=_0x273719[_0xa7c2('0x6b')];this['channels'][_0x273719[_0xa7c2('0x5c')]]=_0x1cafb1;this[_0xa7c2('0x3b')](_0x1cafb1);}}}catch(_0x1dcd7f){logger[_0xa7c2('0x33')](_0xa7c2('0x6c'),util['inspect'](_0x1dcd7f,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xa7c2('0x5')][_0xa7c2('0x6d')]=function(_0x1c49aa){try{if(this[_0xa7c2('0x50')](_0x1c49aa)){if(this[_0xa7c2('0x9')][_0x1c49aa[_0xa7c2('0x5c')]]){var _0x548dd1=_[_0xa7c2('0x63')](this[_0xa7c2('0x9')][_0x1c49aa[_0xa7c2('0x5c')]]);_0x548dd1[_0xa7c2('0x16')]=![];_0x548dd1[_0xa7c2('0x6e')]=null;_0x548dd1[_0xa7c2('0x6f')]=!![];_0x548dd1[_0xa7c2('0x70')]=_0x1c49aa[_0xa7c2('0x71')];_0x548dd1[_0xa7c2('0x64')]=_0x1c49aa[_0xa7c2('0x64')];if(_0x1c49aa['connectedlinenum']===_0xa7c2('0x72')&&_[_0xa7c2('0x73')](_0x1c49aa[_0xa7c2('0x74')][_0xa7c2('0x75')](),_0xa7c2('0x76'))){if(!_0x548dd1['transfer']){_0x548dd1['queuecallerexit']=!![];_0x548dd1[_0xa7c2('0x77')]=moment(_0x548dd1[_0xa7c2('0x5d')])[_0xa7c2('0x78')](_0x1c49aa[_0xa7c2('0x64')],_0xa7c2('0x79'))[_0xa7c2('0x3c')](_0xa7c2('0x5e'));_0x548dd1[_0xa7c2('0x66')]='FORWARDTRANSFER';_0x548dd1['transfer']=!![];_0x548dd1['transfertype']='FORWARD';_0x548dd1[_0xa7c2('0x7a')]=_0x1c49aa[_0xa7c2('0x7b')];_0x548dd1[_0xa7c2('0x7c')]=_0x1c49aa['uniqueid'];}if(this[_0xa7c2('0xa')][_0x1c49aa[_0xa7c2('0x74')]]){_0x548dd1[_0xa7c2('0x6a')]=this[_0xa7c2('0xa')][_0x1c49aa[_0xa7c2('0x74')]]['accountcode'];_0x548dd1['connectedlinename']=this[_0xa7c2('0xa')][_0x1c49aa[_0xa7c2('0x74')]][_0xa7c2('0x7d')];_0x548dd1['destcalleridnum']=this[_0xa7c2('0xa')][_0x1c49aa[_0xa7c2('0x74')]]['accountcode'];_0x548dd1[_0xa7c2('0x7e')]=this['agents'][_0x1c49aa[_0xa7c2('0x74')]][_0xa7c2('0x7d')];}}else{_0x548dd1[_0xa7c2('0x7f')]=!![];_0x548dd1['queuecallercompleteAt']=moment()[_0xa7c2('0x3c')](_0xa7c2('0x5e'));_0x548dd1[_0xa7c2('0x80')]=![];_0x548dd1[_0xa7c2('0x77')]=null;if(_0x1c49aa['reason']!==_0xa7c2('0x81')){_0x548dd1['queuecallerexitreason']=_0xa7c2('0x82')+_0x1c49aa[_0xa7c2('0x83')][_0xa7c2('0x84')]();}}this[_0xa7c2('0xb')][_0x1c49aa[_0xa7c2('0x5c')]]=_0x548dd1;this[_0xa7c2('0x38')](_0x548dd1);}}}catch(_0x37eed2){logger['error'](_0xa7c2('0x85'),util[_0xa7c2('0x39')](_0x37eed2,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xa7c2('0x5')][_0xa7c2('0x86')]=function(_0xc55bd3){try{if(this[_0xa7c2('0x50')](_0xc55bd3)){this[_0xa7c2('0x87')](_0xc55bd3[_0xa7c2('0x5c')],_['keys'](_0xc55bd3[_0xa7c2('0x88')])[0x0],_0xc55bd3[_0xa7c2('0x89')]);if(this[_0xa7c2('0x9')][_0xc55bd3[_0xa7c2('0x5c')]]){var _0x3ee348=_['last'](this['queueReports'][_0xc55bd3[_0xa7c2('0x5c')]]);if(_0x3ee348){if(this[_0xa7c2('0x50')](_0xc55bd3[_0xa7c2('0x88')])&&this[_0xa7c2('0x50')](_0xc55bd3[_0xa7c2('0x88')][_0xa7c2('0x8a')])){switch(_0xc55bd3[_0xa7c2('0x89')]){case _0xa7c2('0x8b'):_0x3ee348['queuecallerexit']=![];_0x3ee348[_0xa7c2('0x77')]=null;break;default:_0x3ee348[_0xa7c2('0x80')]=!![];_0x3ee348['queuecallerexitAt']=moment()[_0xa7c2('0x3c')](_0xa7c2('0x5e'));_0x3ee348[_0xa7c2('0x69')]=moment()[_0xa7c2('0x3c')](_0xa7c2('0x5e'));}_0x3ee348[_0xa7c2('0x16')]=![];_0x3ee348[_0xa7c2('0x6e')]=null;_0x3ee348[_0xa7c2('0x66')]=_0xc55bd3[_0xa7c2('0x89')];this[_0xa7c2('0xb')][_0xc55bd3[_0xa7c2('0x5c')]]=_0x3ee348;this['emitVoiceQueueChannelRemove'](_0x3ee348);}else if(this['isNotNull'](_0xc55bd3[_0xa7c2('0x88')])&&this[_0xa7c2('0x50')](_0xc55bd3[_0xa7c2('0x88')]['queueposition'])){if(!_0x3ee348[_0xa7c2('0x16')]){_0x3ee348[_0xa7c2('0x80')]=!![];_0x3ee348['queuecallerexitAt']=moment()[_0xa7c2('0x3c')]('YYYY-MM-DD\x20HH:mm:ss');_0x3ee348['queuecallerexitreason']=_0xa7c2('0x8c');_0x3ee348['queuecallerleaveAt']=moment()[_0xa7c2('0x3c')](_0xa7c2('0x5e'));this['channels'][_0xc55bd3['uniqueid']]=_0x3ee348;}}_0x3ee348[_0xa7c2('0x10')]=this['variables'][_0xc55bd3[_0xa7c2('0x5c')]];}}}}catch(_0x2f40c2){logger['error'](_0xa7c2('0x8d'),util[_0xa7c2('0x39')](_0x2f40c2,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0xa7c2('0x87')]=function(_0x3f37ab,_0xe41cc8,_0x26f9c5){var _0x4657ae=[_0xa7c2('0x8e'),'rtpaudioqosbridged',_0xa7c2('0x8f'),'rtpaudioqosjitterbridged','rtpaudioqosloss',_0xa7c2('0x90'),_0xa7c2('0x91'),'rtpaudioqosrttbridged','sipcallid',_0xa7c2('0x92'),'bridgepeer',_0xa7c2('0x93'),_0xa7c2('0x94'),_0xa7c2('0x95'),_0xa7c2('0x96'),_0xa7c2('0x97'),_0xa7c2('0x71'),'memberpenalty',_0xa7c2('0x98')];if(!_[_0xa7c2('0x2d')](_0xe41cc8)&&!_['includes'](_0x4657ae,_0xe41cc8)){if(_[_0xa7c2('0x26')](this[_0xa7c2('0x10')][_0x3f37ab])){this[_0xa7c2('0x10')][_0x3f37ab]={};}this[_0xa7c2('0x10')][_0x3f37ab][_0xe41cc8]=_0x26f9c5;}};VoiceQueueReport[_0xa7c2('0x5')]['syncHangup']=function(_0x2d14c5){try{if(this[_0xa7c2('0x50')](_0x2d14c5)){if(this[_0xa7c2('0x9')][_0x2d14c5[_0xa7c2('0x5c')]]){for(var _0x2f2474=0x0,_0x552791={};_0x2f2474<this['queueReports'][_0x2d14c5[_0xa7c2('0x5c')]][_0xa7c2('0x99')];_0x2f2474+=0x1){_0x552791=this['queueReports'][_0x2d14c5[_0xa7c2('0x5c')]][_0x2f2474];if(this['voiceQueues'][_0x552791['queue']]){if(_0x552791['queuecallerexit']){this[_0xa7c2('0xd')][_0x552791['queue']][_0xa7c2('0x49')]+=0x1;}this[_0xa7c2('0xd')][_0x552791[_0xa7c2('0x55')]][_0xa7c2('0x9a')]+=moment(_0x552791[_0xa7c2('0x69')])['diff'](_0x552791[_0xa7c2('0x5d')],_0xa7c2('0x79'));if(_0x2f2474===this[_0xa7c2('0x9')][_0x2d14c5[_0xa7c2('0x5c')]]['length']-0x1){this[_0xa7c2('0xd')][_0x552791['queue']][_0xa7c2('0x47')]+=moment()[_0xa7c2('0x9b')](0x0)['diff'](_0x552791[_0xa7c2('0x5d')],_0xa7c2('0x79'));this[_0xa7c2('0xd')][_0x552791['queue']]['total']+=0x1;if(_0x552791[_0xa7c2('0x7f')]){this['voiceQueues'][_0x552791['queue']]['answered']+=0x1;this[_0xa7c2('0xd')][_0x552791[_0xa7c2('0x55')]][_0xa7c2('0x9c')]+=moment()[_0xa7c2('0x9b')](0x0)['diff'](_0x552791[_0xa7c2('0x69')],_0xa7c2('0x79'));}if(_0x552791[_0xa7c2('0x16')]){_0x552791[_0xa7c2('0x9d')]=_0xa7c2('0x9e');ami[_0xa7c2('0x3a')]('custom:queuecallerabandon',_0x552791);}if(_0x552791['queuecallerexit']){_0x552791['lastevent']=_0xa7c2('0x49');ami[_0xa7c2('0x3a')]('custom:queuecallerunmanaged',_0x552791);}}else{this[_0xa7c2('0xd')][_0x552791['queue']][_0xa7c2('0x47')]+=this['voiceQueues'][_0x552791[_0xa7c2('0x55')]][_0xa7c2('0x9a')];}this[_0xa7c2('0xb')][_0x2d14c5[_0xa7c2('0x5c')]]=_0x552791;this[_0xa7c2('0x38')](_0x552791);}}ami[_0xa7c2('0x3a')]('custom:voiceQueueReport',this['queueReports'][_0x2d14c5[_0xa7c2('0x5c')]]);delete this['queueReports'][_0x2d14c5[_0xa7c2('0x5c')]];delete this['channels'][_0x2d14c5['uniqueid']];}if(this[_0xa7c2('0x10')][_0x2d14c5['uniqueid']]){delete this[_0xa7c2('0x10')][_0x2d14c5[_0xa7c2('0x5c')]];}}}catch(_0x16e2e5){logger[_0xa7c2('0x33')](_0xa7c2('0x9f'),util['inspect'](_0x16e2e5,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xa7c2('0x5')][_0xa7c2('0xa0')]=function(_0x500262){try{if(this['isNotNull'](_0x500262)){var _0xb6c08d;if(this[_0xa7c2('0x9')][_0x500262['transfereeuniqueid']]){_0xb6c08d=_[_0xa7c2('0x63')](this[_0xa7c2('0x9')][_0x500262['transfereeuniqueid']]);_0xb6c08d[_0xa7c2('0x7a')]=_0x500262[_0xa7c2('0xa1')];_0xb6c08d[_0xa7c2('0x7c')]=_0x500262[_0xa7c2('0xa2')];}else if(this[_0xa7c2('0x9')][_0x500262['transfertargetuniqueid']]){_0xb6c08d=_['last'](this[_0xa7c2('0x9')][_0x500262['transfertargetuniqueid']]);_0xb6c08d[_0xa7c2('0x7a')]=_0x500262[_0xa7c2('0xa3')];_0xb6c08d['transferuniqueid']=_0x500262[_0xa7c2('0xa4')];}if(_0xb6c08d){_0xb6c08d[_0xa7c2('0x66')]=_0xa7c2('0xa5');_0xb6c08d[_0xa7c2('0x81')]=!![];_0xb6c08d[_0xa7c2('0xa6')]=_0xa7c2('0xa7');_0xb6c08d[_0xa7c2('0xa8')]=moment()[_0xa7c2('0x3c')](_0xa7c2('0x5e'));}}}catch(_0x542ff7){logger[_0xa7c2('0x33')](_0xa7c2('0xa9'),util[_0xa7c2('0x39')](_0x542ff7,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xa7c2('0x5')][_0xa7c2('0xaa')]=function(_0x52a4d3){try{if(this[_0xa7c2('0x50')](_0x52a4d3)){if(this[_0xa7c2('0x9')][_0x52a4d3[_0xa7c2('0xab')]]){var _0x4eb958=_[_0xa7c2('0x63')](this[_0xa7c2('0x9')][_0x52a4d3[_0xa7c2('0xab')]]);_0x4eb958[_0xa7c2('0x66')]=_0xa7c2('0xac');_0x4eb958['transfer']=!![];_0x4eb958['transfertype']=_0xa7c2('0xad');_0x4eb958['transferexten']=_0x52a4d3['extension'];_0x4eb958[_0xa7c2('0x7c')]=_0x52a4d3[_0xa7c2('0xab')];}}}catch(_0x2c49be){logger[_0xa7c2('0x33')](_0xa7c2('0xae'),util['inspect'](_0x2c49be,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype']['syncMusicOnHoldStart']=function(_0x13a7e5){try{if(this[_0xa7c2('0x50')](_0x13a7e5)){if(this['queueReports'][_0x13a7e5['uniqueid']]){var _0x3e88f2=_[_0xa7c2('0x63')](this[_0xa7c2('0x9')][_0x13a7e5['uniqueid']]);if(!_[_0xa7c2('0x2d')](_0x3e88f2[_0xa7c2('0x69')])){_0x3e88f2['mohstarttime']=moment()[_0xa7c2('0x3c')](_0xa7c2('0x5e'));}}}}catch(_0x17c192){logger[_0xa7c2('0x33')]('[syncMusicOnHoldStart][VoiceQueueReport]',util[_0xa7c2('0x39')](_0x17c192,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xa7c2('0x5')][_0xa7c2('0x21')]=function(_0xbbd85f){try{if(this[_0xa7c2('0x50')](_0xbbd85f)){if(this[_0xa7c2('0x9')][_0xbbd85f[_0xa7c2('0x5c')]]){var _0x368913=_[_0xa7c2('0x63')](this[_0xa7c2('0x9')][_0xbbd85f[_0xa7c2('0x5c')]]);if(!_[_0xa7c2('0x2d')](_0x368913[_0xa7c2('0xaf')])){_0x368913['mohtime']+=moment()['milliseconds'](0x0)[_0xa7c2('0xb0')](_0x368913[_0xa7c2('0xaf')],'seconds');delete _0x368913[_0xa7c2('0xaf')];}}}}catch(_0x1942e2){logger['error'](_0xa7c2('0xb1'),util['inspect'](_0x1942e2,{'showHidden':![],'depth':null}));}};module['exports']=VoiceQueueReport;
\ No newline at end of file
index 45ac573..b59a507 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xac31=['campaign','queue','Request','CreateReportAgentPreview','../client','createHistory'];(function(_0xe5fcd3,_0x5b7146){var _0x240b76=function(_0xcf7409){while(--_0xcf7409){_0xe5fcd3['push'](_0xe5fcd3['shift']());}};_0x240b76(++_0x5b7146);}(_0xac31,0xca));var _0x1ac3=function(_0x7cf2ca,_0x56960c){_0x7cf2ca=_0x7cf2ca-0x0;var _0x472fe4=_0xac31[_0x7cf2ca];return _0x472fe4;};'use strict';var client=require(_0x1ac3('0x0'));exports[_0x1ac3('0x1')]=function(_0x1cd966){return function(){_0x1cd966[_0x1ac3('0x2')]=_0x1cd966[_0x1ac3('0x3')];return client[_0x1ac3('0x4')](_0x1ac3('0x5'),{'body':_0x1cd966,'log':'CreateReportAgentPreview'});};};
\ No newline at end of file
+var _0xed1f=['campaign','queue','Request','CreateReportAgentPreview','../client','createHistory'];(function(_0x278e3c,_0x1c9cfd){var _0x3e2d9b=function(_0x34d928){while(--_0x34d928){_0x278e3c['push'](_0x278e3c['shift']());}};_0x3e2d9b(++_0x1c9cfd);}(_0xed1f,0x6a));var _0xfed1=function(_0x31a371,_0x50828e){_0x31a371=_0x31a371-0x0;var _0x2a5bd6=_0xed1f[_0x31a371];return _0x2a5bd6;};'use strict';var client=require(_0xfed1('0x0'));exports[_0xfed1('0x1')]=function(_0x21e140){return function(){_0x21e140[_0xfed1('0x2')]=_0x21e140[_0xfed1('0x3')];return client[_0xfed1('0x4')](_0xfed1('0x5'),{'body':_0x21e140,'log':_0xfed1('0x5')});};};
\ No newline at end of file
index 2bf34b5..401dc8b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe6b4=['Request','CreateAttachment','../client','create'];(function(_0x4b747e,_0x127cbb){var _0x13627f=function(_0x16fe19){while(--_0x16fe19){_0x4b747e['push'](_0x4b747e['shift']());}};_0x13627f(++_0x127cbb);}(_0xe6b4,0x1b6));var _0x4e6b=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0xe6b4[_0x3ab51d];return _0x29a04e;};'use strict';var client=require(_0x4e6b('0x0'));exports[_0x4e6b('0x1')]=function(_0x1ba6c5){return client[_0x4e6b('0x2')](_0x4e6b('0x3'),{'body':_0x1ba6c5,'log':_0x4e6b('0x3')});};
\ No newline at end of file
+var _0x4538=['create','CreateAttachment','../client'];(function(_0x7e2eb0,_0x17cd58){var _0xd92de4=function(_0x5d005b){while(--_0x5d005b){_0x7e2eb0['push'](_0x7e2eb0['shift']());}};_0xd92de4(++_0x17cd58);}(_0x4538,0x1d9));var _0x8453=function(_0x1611b3,_0x44b4a4){_0x1611b3=_0x1611b3-0x0;var _0x16ece2=_0x4538[_0x1611b3];return _0x16ece2;};'use strict';var client=require(_0x8453('0x0'));exports[_0x8453('0x1')]=function(_0x525b50){return client['Request'](_0x8453('0x2'),{'body':_0x525b50,'log':_0x8453('0x2')});};
\ No newline at end of file
index 9d730d1..8e5cb84 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3de5=['dialAMDSilenceThreshold','dialAMDMaximumWordLength','dialOrderByScheduledAt','dialPrefix','Trunk','callerid','TrunkBackup','Interval','Intervals','SquareProject','getCampaign','../client','getCampaigns','GetCampaign','name','active','limitCalls','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialCongestionRetryFrequency','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialGlobalInterval','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords'];(function(_0x4efea0,_0x292327){var _0x3f0254=function(_0x25cf93){while(--_0x25cf93){_0x4efea0['push'](_0x4efea0['shift']());}};_0x3f0254(++_0x292327);}(_0x3de5,0x1a1));var _0x53de=function(_0x5aea4c,_0x51a4ce){_0x5aea4c=_0x5aea4c-0x0;var _0x5ee4b2=_0x3de5[_0x5aea4c];return _0x5ee4b2;};'use strict';var client=require(_0x53de('0x0'));exports[_0x53de('0x1')]=function(){return function(){return client['Request'](_0x53de('0x2'),{'options':{'raw':![],'attributes':['id',_0x53de('0x3'),'type',_0x53de('0x4'),_0x53de('0x5'),_0x53de('0x6'),_0x53de('0x7'),'dialOriginateTimeout','dialCongestionMaxRetry',_0x53de('0x8'),'dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry',_0x53de('0x9'),_0x53de('0xa'),_0x53de('0xb'),_0x53de('0xc'),'dialAMDActive','dialAMDInitialSilence','dialAMDGreeting',_0x53de('0xd'),_0x53de('0xe'),_0x53de('0xf'),_0x53de('0x10'),_0x53de('0x11'),_0x53de('0x12'),_0x53de('0x13'),_0x53de('0x14'),_0x53de('0x15'),'dialRandomLastDigitCallerIdNumber','dialCutDigit'],'include':[{'model':_0x53de('0x16'),'as':_0x53de('0x16'),'attributes':['id',_0x53de('0x3'),_0x53de('0x17'),'active']},{'model':_0x53de('0x16'),'as':_0x53de('0x18'),'attributes':['id',_0x53de('0x3'),_0x53de('0x17'),_0x53de('0x4')]},{'model':_0x53de('0x19'),'as':_0x53de('0x19'),'attributes':['id','name'],'include':[{'model':_0x53de('0x19'),'as':_0x53de('0x1a'),'attributes':['id',_0x53de('0x3'),'interval']}]},{'model':_0x53de('0x1b'),'as':_0x53de('0x1b'),'attributes':['id',_0x53de('0x3')]}]},'log':_0x53de('0x1c')});};};
\ No newline at end of file
+var _0xe13b=['SquareProject','../client','getCampaigns','Request','name','type','active','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialGlobalInterval','dialAMDInitialSilence','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','dialOrderByScheduledAt','dialPrefix','dialRandomLastDigitCallerIdNumber','Trunk','callerid','Interval','Intervals','interval'];(function(_0xd4bee6,_0x5b8e9f){var _0x59082f=function(_0x4d4033){while(--_0x4d4033){_0xd4bee6['push'](_0xd4bee6['shift']());}};_0x59082f(++_0x5b8e9f);}(_0xe13b,0x111));var _0xbe13=function(_0x5042b5,_0x50a597){_0x5042b5=_0x5042b5-0x0;var _0x68c80e=_0xe13b[_0x5042b5];return _0x68c80e;};'use strict';var client=require(_0xbe13('0x0'));exports[_0xbe13('0x1')]=function(){return function(){return client[_0xbe13('0x2')]('GetCampaign',{'options':{'raw':![],'attributes':['id',_0xbe13('0x3'),_0xbe13('0x4'),_0xbe13('0x5'),'limitCalls',_0xbe13('0x6'),_0xbe13('0x7'),_0xbe13('0x8'),_0xbe13('0x9'),_0xbe13('0xa'),'dialBusyMaxRetry',_0xbe13('0xb'),_0xbe13('0xc'),_0xbe13('0xd'),_0xbe13('0xe'),_0xbe13('0xf'),_0xbe13('0x10'),'dialAMDActive',_0xbe13('0x11'),'dialAMDGreeting',_0xbe13('0x12'),_0xbe13('0x13'),_0xbe13('0x14'),_0xbe13('0x15'),_0xbe13('0x16'),_0xbe13('0x17'),_0xbe13('0x18'),_0xbe13('0x19'),_0xbe13('0x1a'),_0xbe13('0x1b'),'dialCutDigit'],'include':[{'model':'Trunk','as':_0xbe13('0x1c'),'attributes':['id','name','callerid',_0xbe13('0x5')]},{'model':'Trunk','as':'TrunkBackup','attributes':['id','name',_0xbe13('0x1d'),_0xbe13('0x5')]},{'model':_0xbe13('0x1e'),'as':_0xbe13('0x1e'),'attributes':['id',_0xbe13('0x3')],'include':[{'model':_0xbe13('0x1e'),'as':_0xbe13('0x1f'),'attributes':['id',_0xbe13('0x3'),_0xbe13('0x20')]}]},{'model':_0xbe13('0x21'),'as':_0xbe13('0x21'),'attributes':['id',_0xbe13('0x3')]}]},'log':'getCampaign'});};};
\ No newline at end of file
index 5828e7d..901e79f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6428=['createContact','Request','CreateCmContact','showContact','ShowCmContact','../client'];(function(_0x3e705e,_0x34a449){var _0x506d74=function(_0x43e97b){while(--_0x43e97b){_0x3e705e['push'](_0x3e705e['shift']());}};_0x506d74(++_0x34a449);}(_0x6428,0x13d));var _0x8642=function(_0x2053ea,_0x1ab2d4){_0x2053ea=_0x2053ea-0x0;var _0x2232c4=_0x6428[_0x2053ea];return _0x2232c4;};'use strict';var client=require(_0x8642('0x0'));exports[_0x8642('0x1')]=function(_0x7d8c83){return function(){return client[_0x8642('0x2')](_0x8642('0x3'),{'body':_0x7d8c83,'log':_0x8642('0x3')});};};exports[_0x8642('0x4')]=function(_0x1209d9){return function(){return client['Request'](_0x8642('0x5'),{'options':_0x1209d9,'log':_0x8642('0x5')});};};
\ No newline at end of file
+var _0xfa3f=['ShowCmContact','../client','Request','CreateCmContact','showContact'];(function(_0x19ca3f,_0x2e7202){var _0x376da3=function(_0x4a022e){while(--_0x4a022e){_0x19ca3f['push'](_0x19ca3f['shift']());}};_0x376da3(++_0x2e7202);}(_0xfa3f,0x8d));var _0xffa3=function(_0x5a1100,_0x304044){_0x5a1100=_0x5a1100-0x0;var _0x5c0dbe=_0xfa3f[_0x5a1100];return _0x5c0dbe;};'use strict';var client=require(_0xffa3('0x0'));exports['createContact']=function(_0x3499ba){return function(){return client[_0xffa3('0x1')](_0xffa3('0x2'),{'body':_0x3499ba,'log':'CreateCmContact'});};};exports[_0xffa3('0x3')]=function(_0x54388d){return function(){return client[_0xffa3('0x1')](_0xffa3('0x4'),{'options':_0x54388d,'log':_0xffa3('0x4')});};};
\ No newline at end of file
index 67e6a10..f10785f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdbf5=['DestroyCmHopper','getContactDialer','format','priority','DESC','scheduledat','getContactDialerIvr','ASC','GetContactDialerIvr','campaign','queue','MoveContactManagedDialer','ContactId','CampaignId','countReScheduled','CountReScheduled','getContactPreview','User','Agent','name','VoiceQueue','Queue','unlockContact','getContactRecallMe','GetContactRecallMe','db.CmHopper.UserId','moment','Request','GetCmHopper','CmContact','Contact','getCmHopper','updateContacts','UpdateCmHopper','YYYY-MM-DD\x20HH:mm:ss','rescheduleContact','ListId'];(function(_0x2bb74d,_0x4b2e9c){var _0x584cc4=function(_0x2a0c68){while(--_0x2a0c68){_0x2bb74d['push'](_0x2bb74d['shift']());}};_0x584cc4(++_0x4b2e9c);}(_0xdbf5,0x18c));var _0x5dbf=function(_0x36895d,_0x3dfa64){_0x36895d=_0x36895d-0x0;var _0x485ea6=_0xdbf5[_0x36895d];return _0x485ea6;};'use strict';var client=require('../client');var moment=require(_0x5dbf('0x0'));var _=require('lodash');exports['getContacts']=function(_0x19d2b4,_0xfd972b){return function(){return client[_0x5dbf('0x1')](_0x5dbf('0x2'),{'options':{'where':{'VoiceQueueId':_0x19d2b4},'include':[{'model':_0x5dbf('0x3'),'as':_0x5dbf('0x4')}],'limit':_0xfd972b,'raw':![]},'log':_0x5dbf('0x5')});};};exports[_0x5dbf('0x6')]=function(_0x3f8628,_0x3f8222,_0x209b7d){return function(){return client[_0x5dbf('0x1')](_0x5dbf('0x7'),{'body':_0x3f8628,'options':{'where':{'VoiceQueueId':_0x3f8222,'scheduledat':{'$lte':moment()['format'](_0x5dbf('0x8'))}},'limit':_0x209b7d},'log':'UpdateCmHopper'});};};exports[_0x5dbf('0x9')]=function(_0x3bec50){return function(){return client[_0x5dbf('0x1')](_0x5dbf('0x7'),{'body':_0x3bec50,'options':{'where':{'ContactId':_0x3bec50['ContactId'],'ListId':_0x3bec50[_0x5dbf('0xa')],'VoiceQueueId':_0x3bec50['VoiceQueueId'],'CampaignId':_0x3bec50['CampaignId']}},'log':_0x5dbf('0x9')});};};exports['destroyContact']=function(_0x493dc8,_0x466471,_0x490b38){return function(){return client[_0x5dbf('0x1')](_0x5dbf('0xb'),{'options':{'where':{'VoiceQueueId':_0x493dc8,'ListId':_0x466471,'ContactId':_0x490b38}},'log':_0x5dbf('0xb')});};};exports[_0x5dbf('0xc')]=function(_0x14493a,_0x587e58,_0x4803ca,_0x2b4e1c){return function(){return client[_0x5dbf('0x1')]('GetContactDialer',{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x14493a,'active':![],'scheduledat':{'$lte':moment()[_0x5dbf('0xd')](_0x5dbf('0x8'))},'$or':[{'UserId':null},{'UserId':{'$in':_0x587e58}}]},'include':[{'model':_0x5dbf('0x3'),'as':_0x5dbf('0x4')}],'order':[[_0x5dbf('0xe'),_0x5dbf('0xf')],[_0x5dbf('0x10'),_0x2b4e1c],['id','ASC']],'raw':!![],'limit':_0x4803ca},'log':'GetContactDialer'});};};exports[_0x5dbf('0x11')]=function(_0xc4cb1c,_0x39c7aa,_0x14abf7){return function(){return client[_0x5dbf('0x1')]('GetContactDialer',{'body':{'active':!![]},'options':{'where':{'CampaignId':_0xc4cb1c,'active':![],'scheduledat':{'$lte':moment()[_0x5dbf('0xd')]('YYYY-MM-DD\x20HH:mm:ss')}},'include':[{'model':'CmContact','as':'Contact'}],'order':[[_0x5dbf('0xe'),_0x5dbf('0xf')],[_0x5dbf('0x10'),_0x14abf7],['id',_0x5dbf('0x12')]],'raw':!![],'limit':_0x39c7aa},'log':_0x5dbf('0x13')});};};exports['moveContactManagedDialer']=function(_0x2764ea,_0x58e9ac){return function(){_0x2764ea[_0x5dbf('0x14')]=_0x2764ea[_0x5dbf('0x15')];return client[_0x5dbf('0x1')](_0x5dbf('0x16'),{'body':_0x2764ea,'options':{'where':{'ContactId':_0x2764ea[_0x5dbf('0x17')],'ListId':_0x2764ea[_0x5dbf('0xa')],'VoiceQueueId':_0x2764ea['VoiceQueueId'],'CampaignId':_0x2764ea[_0x5dbf('0x18')],'active':_0x58e9ac?undefined:!![]}},'log':_0x5dbf('0x16')});};};exports[_0x5dbf('0x19')]=function(_0x2079fc){return function(){return client[_0x5dbf('0x1')](_0x5dbf('0x1a'),{'options':{'where':{'VoiceQueueId':_0x2079fc['id']?_0x2079fc['id']||null:null}},'log':_0x5dbf('0x19')});};};exports[_0x5dbf('0x1b')]=function(_0x42f13b){return function(){return client[_0x5dbf('0x1')](_0x5dbf('0x2'),{'options':{'where':{'id':_0x42f13b},'include':[{'model':_0x5dbf('0x3'),'as':_0x5dbf('0x4')},{'model':_0x5dbf('0x1c'),'as':_0x5dbf('0x1d'),'attributes':['id',_0x5dbf('0x1e')]},{'model':_0x5dbf('0x1f'),'as':_0x5dbf('0x20'),'attributes':['id',_0x5dbf('0x1e')]}],'raw':!![]},'log':_0x5dbf('0x5')});};};exports[_0x5dbf('0x21')]=function(_0x471027,_0x21cd00,_0x5768b7){return function(){return client[_0x5dbf('0x1')](_0x5dbf('0x7'),{'body':_0x471027,'options':{'where':{'id':_0x21cd00},'limit':_0x5768b7},'log':_0x5dbf('0x7')});};};exports[_0x5dbf('0x22')]=function(_0x38825a,_0x6a276d){return function(){return client[_0x5dbf('0x1')](_0x5dbf('0x23'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x38825a,'active':![],'recallme':!![],'scheduledat':{'$lte':moment()[_0x5dbf('0xd')](_0x5dbf('0x8'))},'UserId':{'$in':_0x6a276d}},'order':[[_0x5dbf('0xe'),'DESC'],['scheduledat',_0x5dbf('0xf')],['id',_0x5dbf('0x12')]],'include':[{'model':_0x5dbf('0x3'),'as':_0x5dbf('0x4')}],'group':_0x5dbf('0x24'),'raw':!![]},'log':'GetContactDialer'});};};
\ No newline at end of file
+var _0x46ed=['../client','moment','getContacts','GetCmHopper','CmContact','getCmHopper','updateContacts','Request','UpdateCmHopper','format','YYYY-MM-DD\x20HH:mm:ss','rescheduleContact','ListId','VoiceQueueId','CampaignId','destroyContact','DestroyCmHopper','getContactDialer','GetContactDialer','Contact','priority','DESC','ASC','getContactDialerIvr','scheduledat','GetContactDialerIvr','moveContactManagedDialer','queue','MoveContactManagedDialer','ContactId','countReScheduled','getContactPreview','User','name','VoiceQueue','Queue','unlockContact','getContactRecallMe','GetContactRecallMe','db.CmHopper.UserId'];(function(_0x1589dd,_0x2b9d22){var _0x1bddd1=function(_0x3687f8){while(--_0x3687f8){_0x1589dd['push'](_0x1589dd['shift']());}};_0x1bddd1(++_0x2b9d22);}(_0x46ed,0x168));var _0xd46e=function(_0x46698a,_0x8de1e4){_0x46698a=_0x46698a-0x0;var _0x356db0=_0x46ed[_0x46698a];return _0x356db0;};'use strict';var client=require(_0xd46e('0x0'));var moment=require(_0xd46e('0x1'));var _=require('lodash');exports[_0xd46e('0x2')]=function(_0x1df30e,_0x1f15e7){return function(){return client['Request'](_0xd46e('0x3'),{'options':{'where':{'VoiceQueueId':_0x1df30e},'include':[{'model':_0xd46e('0x4'),'as':'Contact'}],'limit':_0x1f15e7,'raw':![]},'log':_0xd46e('0x5')});};};exports[_0xd46e('0x6')]=function(_0x160bcf,_0x25cf78,_0x45e680){return function(){return client[_0xd46e('0x7')](_0xd46e('0x8'),{'body':_0x160bcf,'options':{'where':{'VoiceQueueId':_0x25cf78,'scheduledat':{'$lte':moment()[_0xd46e('0x9')](_0xd46e('0xa'))}},'limit':_0x45e680},'log':_0xd46e('0x8')});};};exports[_0xd46e('0xb')]=function(_0x59c88d){return function(){return client[_0xd46e('0x7')](_0xd46e('0x8'),{'body':_0x59c88d,'options':{'where':{'ContactId':_0x59c88d['ContactId'],'ListId':_0x59c88d[_0xd46e('0xc')],'VoiceQueueId':_0x59c88d[_0xd46e('0xd')],'CampaignId':_0x59c88d[_0xd46e('0xe')]}},'log':_0xd46e('0xb')});};};exports[_0xd46e('0xf')]=function(_0x2d95a9,_0x4920b6,_0x24c54b){return function(){return client['Request']('DestroyCmHopper',{'options':{'where':{'VoiceQueueId':_0x2d95a9,'ListId':_0x4920b6,'ContactId':_0x24c54b}},'log':_0xd46e('0x10')});};};exports[_0xd46e('0x11')]=function(_0x53b309,_0x5a3076,_0xacd799,_0x4688ae){return function(){return client[_0xd46e('0x7')](_0xd46e('0x12'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x53b309,'active':![],'scheduledat':{'$lte':moment()['format'](_0xd46e('0xa'))},'$or':[{'UserId':null},{'UserId':{'$in':_0x5a3076}}]},'include':[{'model':_0xd46e('0x4'),'as':_0xd46e('0x13')}],'order':[[_0xd46e('0x14'),_0xd46e('0x15')],['scheduledat',_0x4688ae],['id',_0xd46e('0x16')]],'raw':!![],'limit':_0xacd799},'log':_0xd46e('0x12')});};};exports[_0xd46e('0x17')]=function(_0x551358,_0x5ddd04,_0x2e8f6d){return function(){return client[_0xd46e('0x7')]('GetContactDialer',{'body':{'active':!![]},'options':{'where':{'CampaignId':_0x551358,'active':![],'scheduledat':{'$lte':moment()['format'](_0xd46e('0xa'))}},'include':[{'model':_0xd46e('0x4'),'as':_0xd46e('0x13')}],'order':[[_0xd46e('0x14'),_0xd46e('0x15')],[_0xd46e('0x18'),_0x2e8f6d],['id',_0xd46e('0x16')]],'raw':!![],'limit':_0x5ddd04},'log':_0xd46e('0x19')});};};exports[_0xd46e('0x1a')]=function(_0x3c7e91,_0x468aba){return function(){_0x3c7e91['campaign']=_0x3c7e91[_0xd46e('0x1b')];return client[_0xd46e('0x7')](_0xd46e('0x1c'),{'body':_0x3c7e91,'options':{'where':{'ContactId':_0x3c7e91[_0xd46e('0x1d')],'ListId':_0x3c7e91[_0xd46e('0xc')],'VoiceQueueId':_0x3c7e91[_0xd46e('0xd')],'CampaignId':_0x3c7e91[_0xd46e('0xe')],'active':_0x468aba?undefined:!![]}},'log':_0xd46e('0x1c')});};};exports[_0xd46e('0x1e')]=function(_0x4cf899){return function(){return client[_0xd46e('0x7')]('CountReScheduled',{'options':{'where':{'VoiceQueueId':_0x4cf899['id']?_0x4cf899['id']||null:null}},'log':'countReScheduled'});};};exports[_0xd46e('0x1f')]=function(_0x2a5271){return function(){return client[_0xd46e('0x7')](_0xd46e('0x3'),{'options':{'where':{'id':_0x2a5271},'include':[{'model':_0xd46e('0x4'),'as':_0xd46e('0x13')},{'model':_0xd46e('0x20'),'as':'Agent','attributes':['id',_0xd46e('0x21')]},{'model':_0xd46e('0x22'),'as':_0xd46e('0x23'),'attributes':['id',_0xd46e('0x21')]}],'raw':!![]},'log':_0xd46e('0x5')});};};exports[_0xd46e('0x24')]=function(_0x58aeef,_0x465d54,_0x3a1ced){return function(){return client[_0xd46e('0x7')](_0xd46e('0x8'),{'body':_0x58aeef,'options':{'where':{'id':_0x465d54},'limit':_0x3a1ced},'log':_0xd46e('0x8')});};};exports[_0xd46e('0x25')]=function(_0x147da3,_0x2c5ec7){return function(){return client[_0xd46e('0x7')](_0xd46e('0x26'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x147da3,'active':![],'recallme':!![],'scheduledat':{'$lte':moment()[_0xd46e('0x9')](_0xd46e('0xa'))},'UserId':{'$in':_0x2c5ec7}},'order':[[_0xd46e('0x14'),'DESC'],[_0xd46e('0x18'),_0xd46e('0x15')],['id',_0xd46e('0x16')]],'include':[{'model':_0xd46e('0x4'),'as':'Contact'}],'group':_0xd46e('0x27'),'raw':!![]},'log':_0xd46e('0x12')});};};
\ No newline at end of file
index 8f3fe8e..0c5db52 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x652b=['VoiceQueueId','Contact','phone','checkIsBlackListIvr','CampaignId','GetCmHopperBlackIvr','checkIsBlackList','Request','GetCmHopperBlack'];(function(_0x1c78dd,_0x117d6e){var _0x927903=function(_0x464012){while(--_0x464012){_0x1c78dd['push'](_0x1c78dd['shift']());}};_0x927903(++_0x117d6e);}(_0x652b,0xba));var _0xb652=function(_0x39d544,_0x35c14f){_0x39d544=_0x39d544-0x0;var _0x5a5ff2=_0x652b[_0x39d544];return _0x5a5ff2;};'use strict';var client=require('../client');exports[_0xb652('0x0')]=function(_0x23d534){return function(){return client[_0xb652('0x1')](_0xb652('0x2'),{'options':{'where':{'VoiceQueueId':_0x23d534[_0xb652('0x3')],'phone':_0x23d534[_0xb652('0x4')][_0xb652('0x5')]},'raw':![]},'log':_0xb652('0x2')});};};exports[_0xb652('0x6')]=function(_0x595822){return function(){return client['Request']('GetCmHopperBlack',{'options':{'where':{'CampaignId':_0x595822[_0xb652('0x7')],'phone':_0x595822[_0xb652('0x4')][_0xb652('0x5')]},'raw':![]},'log':_0xb652('0x8')});};};
\ No newline at end of file
+var _0x46fd=['checkIsBlackList','Request','GetCmHopperBlack','VoiceQueueId','Contact','phone','checkIsBlackListIvr','CampaignId','GetCmHopperBlackIvr','../client'];(function(_0x187842,_0x58331c){var _0x5dbcf3=function(_0x55faef){while(--_0x55faef){_0x187842['push'](_0x187842['shift']());}};_0x5dbcf3(++_0x58331c);}(_0x46fd,0x1c1));var _0xd46f=function(_0x2c7618,_0x26be9c){_0x2c7618=_0x2c7618-0x0;var _0x5ce3f0=_0x46fd[_0x2c7618];return _0x5ce3f0;};'use strict';var client=require(_0xd46f('0x0'));exports[_0xd46f('0x1')]=function(_0x1e5c0d){return function(){return client[_0xd46f('0x2')](_0xd46f('0x3'),{'options':{'where':{'VoiceQueueId':_0x1e5c0d[_0xd46f('0x4')],'phone':_0x1e5c0d[_0xd46f('0x5')][_0xd46f('0x6')]},'raw':![]},'log':_0xd46f('0x3')});};};exports[_0xd46f('0x7')]=function(_0x1ac893){return function(){return client[_0xd46f('0x2')]('GetCmHopperBlack',{'options':{'where':{'CampaignId':_0x1ac893[_0xd46f('0x8')],'phone':_0x1ac893['Contact'][_0xd46f('0x6')]},'raw':![]},'log':_0xd46f('0x9')});};};
\ No newline at end of file
index 6c74dd2..031dc78 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4717=['campaign','queue','Request','CreateCmHopperFinal','createContact'];(function(_0x3bef15,_0x248e6b){var _0x4b649e=function(_0xb6b3ca){while(--_0xb6b3ca){_0x3bef15['push'](_0x3bef15['shift']());}};_0x4b649e(++_0x248e6b);}(_0x4717,0x6d));var _0x7471=function(_0x21549c,_0x6d64d1){_0x21549c=_0x21549c-0x0;var _0x426cbd=_0x4717[_0x21549c];return _0x426cbd;};'use strict';var client=require('../client');exports[_0x7471('0x0')]=function(_0x3ff933){return function(){_0x3ff933[_0x7471('0x1')]=_0x3ff933[_0x7471('0x2')];return client[_0x7471('0x3')](_0x7471('0x4'),{'body':_0x3ff933,'log':_0x7471('0x4')});};};
\ No newline at end of file
+var _0xb2e1=['queue','CreateCmHopperFinal','../client'];(function(_0x2f45ea,_0x15c656){var _0x485a84=function(_0x4a1fe3){while(--_0x4a1fe3){_0x2f45ea['push'](_0x2f45ea['shift']());}};_0x485a84(++_0x15c656);}(_0xb2e1,0x146));var _0x1b2e=function(_0x308a9a,_0xd452bb){_0x308a9a=_0x308a9a-0x0;var _0xf317d1=_0xb2e1[_0x308a9a];return _0xf317d1;};'use strict';var client=require(_0x1b2e('0x0'));exports['createContact']=function(_0x2567ea){return function(){_0x2567ea['campaign']=_0x2567ea[_0x1b2e('0x1')];return client['Request'](_0x1b2e('0x2'),{'body':_0x2567ea,'log':'CreateCmHopperFinal'});};};
\ No newline at end of file
index 869babb..8fc089e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x349f=['../client','moment','createHistory','campaign','queue','Request','CreateCmHopperHistory','avgHandleTime','AvgHandleTime','subtract','format','YYYY-MM-DD\x20HH:mm:ss','GetCmHopperHistory','getVoiceQueueHopperHistory','startOf','day','endOf','GetVoiceQueueHopperHistory','getCampaignHopperHistory','ivr','GetCampaignHopperHistory'];(function(_0x13594e,_0x6f0ed0){var _0x1a4f42=function(_0x30b064){while(--_0x30b064){_0x13594e['push'](_0x13594e['shift']());}};_0x1a4f42(++_0x6f0ed0);}(_0x349f,0xa8));var _0xf349=function(_0x48ac8d,_0x596bd2){_0x48ac8d=_0x48ac8d-0x0;var _0x2a8c82=_0x349f[_0x48ac8d];return _0x2a8c82;};'use strict';var client=require(_0xf349('0x0'));var moment=require(_0xf349('0x1'));exports[_0xf349('0x2')]=function(_0x523b4f){return function(){_0x523b4f[_0xf349('0x3')]=_0x523b4f[_0xf349('0x4')];return client[_0xf349('0x5')](_0xf349('0x6'),{'body':_0x523b4f,'log':_0xf349('0x6')});};};exports[_0xf349('0x7')]=function(_0x27de91){return function(){return client[_0xf349('0x5')](_0xf349('0x8'),{'options':{'where':{'endtime':{'$between':[moment()[_0xf349('0x9')](_0x27de91,'minutes')[_0xf349('0xa')](_0xf349('0xb')),moment()[_0xf349('0xa')](_0xf349('0xb'))]}},'raw':![]},'log':_0xf349('0xc')});};};exports[_0xf349('0xd')]=function(_0x3e2147){return function(){return client['Request']('GetVoiceQueueHopperHistory',{'options':{'where':{'createdAt':{'$between':[moment()[_0xf349('0xe')](_0xf349('0xf'))[_0xf349('0xa')](_0xf349('0xb')),moment()[_0xf349('0x10')]('day')['format']('YYYY-MM-DD\x20HH:mm:ss')]},'campaigntype':_0xf349('0x4')},'raw':![]},'log':_0xf349('0x11')});};};exports[_0xf349('0x12')]=function(_0x29d527){return function(){return client[_0xf349('0x5')]('GetCampaignHopperHistory',{'options':{'where':{'createdAt':{'$between':[moment()[_0xf349('0xe')](_0xf349('0xf'))['format'](_0xf349('0xb')),moment()[_0xf349('0x10')]('day')[_0xf349('0xa')]('YYYY-MM-DD\x20HH:mm:ss')]},'campaigntype':_0xf349('0x13')},'raw':![]},'log':_0xf349('0x14')});};};
\ No newline at end of file
+var _0xce68=['GetCampaignHopperHistory','ivr','../client','createHistory','campaign','queue','Request','CreateCmHopperHistory','avgHandleTime','AvgHandleTime','subtract','YYYY-MM-DD\x20HH:mm:ss','format','GetCmHopperHistory','GetVoiceQueueHopperHistory','startOf','day','endOf','getCampaignHopperHistory'];(function(_0xc06b19,_0x4a4230){var _0x3f0a2f=function(_0x1a1e85){while(--_0x1a1e85){_0xc06b19['push'](_0xc06b19['shift']());}};_0x3f0a2f(++_0x4a4230);}(_0xce68,0x10c));var _0x8ce6=function(_0x479988,_0xe6190d){_0x479988=_0x479988-0x0;var _0x332c92=_0xce68[_0x479988];return _0x332c92;};'use strict';var client=require(_0x8ce6('0x0'));var moment=require('moment');exports[_0x8ce6('0x1')]=function(_0x127429){return function(){_0x127429[_0x8ce6('0x2')]=_0x127429[_0x8ce6('0x3')];return client[_0x8ce6('0x4')]('CreateCmHopperHistory',{'body':_0x127429,'log':_0x8ce6('0x5')});};};exports[_0x8ce6('0x6')]=function(_0x39301d){return function(){return client['Request'](_0x8ce6('0x7'),{'options':{'where':{'endtime':{'$between':[moment()[_0x8ce6('0x8')](_0x39301d,'minutes')['format'](_0x8ce6('0x9')),moment()[_0x8ce6('0xa')](_0x8ce6('0x9'))]}},'raw':![]},'log':_0x8ce6('0xb')});};};exports['getVoiceQueueHopperHistory']=function(_0x417bcf){return function(){return client[_0x8ce6('0x4')](_0x8ce6('0xc'),{'options':{'where':{'createdAt':{'$between':[moment()[_0x8ce6('0xd')](_0x8ce6('0xe'))[_0x8ce6('0xa')](_0x8ce6('0x9')),moment()[_0x8ce6('0xf')](_0x8ce6('0xe'))[_0x8ce6('0xa')](_0x8ce6('0x9'))]},'campaigntype':_0x8ce6('0x3')},'raw':![]},'log':_0x8ce6('0xc')});};};exports[_0x8ce6('0x10')]=function(_0x1e8b85){return function(){return client[_0x8ce6('0x4')](_0x8ce6('0x11'),{'options':{'where':{'createdAt':{'$between':[moment()[_0x8ce6('0xd')]('day')[_0x8ce6('0xa')]('YYYY-MM-DD\x20HH:mm:ss'),moment()[_0x8ce6('0xf')](_0x8ce6('0xe'))[_0x8ce6('0xa')](_0x8ce6('0x9'))]},'campaigntype':_0x8ce6('0x12')},'raw':![]},'log':_0x8ce6('0x11')});};};
\ No newline at end of file
index 697022d..0438236 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ef3=['name','description','headerinfo','localstationid','maxrate','modem','t38timeout','tech','TrunkId','ListId','key','Trunk','callerid','active','NotifyFaxAccount','../client','getFaxAccounts','Request','GetFaxAccount'];(function(_0x4e2822,_0x450c4b){var _0x315d45=function(_0x4878ef){while(--_0x4878ef){_0x4e2822['push'](_0x4e2822['shift']());}};_0x315d45(++_0x450c4b);}(_0x2ef3,0xba));var _0x32ef=function(_0x2a7358,_0x344903){_0x2a7358=_0x2a7358-0x0;var _0x1c607e=_0x2ef3[_0x2a7358];return _0x1c607e;};'use strict';var client=require(_0x32ef('0x0'));exports[_0x32ef('0x1')]=function(){return function(){return client[_0x32ef('0x2')](_0x32ef('0x3'),{'options':{'raw':![],'attributes':['id',_0x32ef('0x4'),_0x32ef('0x5'),'ecm',_0x32ef('0x6'),_0x32ef('0x7'),'minrate',_0x32ef('0x8'),_0x32ef('0x9'),'gateway','faxdetect',_0x32ef('0xa'),_0x32ef('0xb'),_0x32ef('0xc'),_0x32ef('0xd'),_0x32ef('0xe')],'include':[{'model':_0x32ef('0xf'),'as':_0x32ef('0xf'),'attributes':['id',_0x32ef('0x4'),_0x32ef('0x10'),_0x32ef('0x11')]}]},'log':'getFaxAccount'});};};exports['notify']=function(_0x401d0b,_0x33281d){return client[_0x32ef('0x2')](_0x32ef('0x12'),{'account':{'id':_0x401d0b},'body':_0x33281d,'log':'NotifyFaxAccount'});};
\ No newline at end of file
+var _0x7a54=['maxrate','modem','faxdetect','tech','TrunkId','key','callerid','active','notify','NotifyFaxAccount','../client','getFaxAccounts','Request','name','description','headerinfo','localstationid','minrate'];(function(_0xfb7ec2,_0xa613f3){var _0x410f70=function(_0x467322){while(--_0x467322){_0xfb7ec2['push'](_0xfb7ec2['shift']());}};_0x410f70(++_0xa613f3);}(_0x7a54,0x106));var _0x47a5=function(_0x72a5b8,_0x5e1bdd){_0x72a5b8=_0x72a5b8-0x0;var _0x23aedb=_0x7a54[_0x72a5b8];return _0x23aedb;};'use strict';var client=require(_0x47a5('0x0'));exports[_0x47a5('0x1')]=function(){return function(){return client[_0x47a5('0x2')]('GetFaxAccount',{'options':{'raw':![],'attributes':['id',_0x47a5('0x3'),_0x47a5('0x4'),'ecm',_0x47a5('0x5'),_0x47a5('0x6'),_0x47a5('0x7'),_0x47a5('0x8'),_0x47a5('0x9'),'gateway',_0x47a5('0xa'),'t38timeout',_0x47a5('0xb'),_0x47a5('0xc'),'ListId',_0x47a5('0xd')],'include':[{'model':'Trunk','as':'Trunk','attributes':['id','name',_0x47a5('0xe'),_0x47a5('0xf')]}]},'log':'getFaxAccount'});};};exports[_0x47a5('0x10')]=function(_0x49e844,_0x5de6d7){return client[_0x47a5('0x2')](_0x47a5('0x11'),{'account':{'id':_0x49e844},'body':_0x5de6d7,'log':_0x47a5('0x11')});};
\ No newline at end of file
index 90efc38..13d5e29 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd101=['UpdateFaxMessage','../client','Request'];(function(_0x20a558,_0x160e0e){var _0x53d3f7=function(_0x259bd8){while(--_0x259bd8){_0x20a558['push'](_0x20a558['shift']());}};_0x53d3f7(++_0x160e0e);}(_0xd101,0xc1));var _0x1d10=function(_0x3c99d9,_0x234aba){_0x3c99d9=_0x3c99d9-0x0;var _0x4424a=_0xd101[_0x3c99d9];return _0x4424a;};'use strict';var client=require(_0x1d10('0x0'));exports['update']=function(_0x2ced74,_0x15b33f){return client[_0x1d10('0x1')](_0x1d10('0x2'),{'body':_0x15b33f,'options':{'where':{'AttachmentId':_0x2ced74}},'log':_0x1d10('0x2')});};
\ No newline at end of file
+var _0xaf1b=['Request','UpdateFaxMessage','../client','update'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0xaf1b,0x11a));var _0xbaf1=function(_0xadd111,_0x33cde7){_0xadd111=_0xadd111-0x0;var _0x27923d=_0xaf1b[_0xadd111];return _0x27923d;};'use strict';var client=require(_0xbaf1('0x0'));exports[_0xbaf1('0x1')]=function(_0x3133fd,_0x3b96a7){return client[_0xbaf1('0x2')](_0xbaf1('0x3'),{'body':_0x3b96a7,'options':{'where':{'AttachmentId':_0x3133fd}},'log':_0xbaf1('0x3')});};
\ No newline at end of file
index 11b837e..6edca56 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8498=['idField','Tag','../../client','Request','GetDeskAccount','name','username','password','remoteUri','authType','type','serverUrl','DeskConfiguration','Configurations','DeskField','Subjects','content','variableName','Variable','Descriptions','key','keyType','keyContent','Fields'];(function(_0x5162ed,_0x386cb7){var _0x4c579b=function(_0x189260){while(--_0x189260){_0x5162ed['push'](_0x5162ed['shift']());}};_0x4c579b(++_0x386cb7);}(_0x8498,0xf2));var _0x8849=function(_0x40cc7a,_0x31a556){_0x40cc7a=_0x40cc7a-0x0;var _0xb5d7cc=_0x8498[_0x40cc7a];return _0xb5d7cc;};'use strict';var client=require(_0x8849('0x0'));exports['getDeskAccounts']=function(){return function(_0x37bd58){return client[_0x8849('0x1')](_0x8849('0x2'),{'options':{'raw':![],'attributes':['id',_0x8849('0x3'),'description',_0x8849('0x4'),_0x8849('0x5'),_0x8849('0x6'),_0x8849('0x7'),_0x8849('0x8'),_0x8849('0x9')],'include':[{'model':_0x8849('0xa'),'as':_0x8849('0xb'),'attributes':['id',_0x8849('0x3')],'include':[{'model':_0x8849('0xc'),'as':_0x8849('0xd'),'attributes':['id','type',_0x8849('0xe'),_0x8849('0xf')],'include':[{'model':_0x8849('0x10'),'as':'Variable','attributes':['id','name']}]},{'model':_0x8849('0xc'),'as':_0x8849('0x11'),'attributes':['id',_0x8849('0x8'),'content',_0x8849('0x12'),_0x8849('0x13'),_0x8849('0x14'),'variableName'],'include':[{'model':_0x8849('0x10'),'as':'Variable','attributes':['id','name']}]},{'model':_0x8849('0xc'),'as':_0x8849('0x15'),'attributes':['id','type',_0x8849('0xe'),_0x8849('0x16'),'nameField','customField','variableName'],'include':[{'model':'Variable','as':_0x8849('0x10'),'attributes':['id','name']}]},{'model':_0x8849('0x17'),'as':'Tags','attributes':['id',_0x8849('0x3')]}]}]},'log':'GetDeskAccount'});};};
\ No newline at end of file
+var _0xa23d=['idField','nameField','customField','Tag','Tags','../../client','getDeskAccounts','Request','GetDeskAccount','description','username','remoteUri','authType','type','serverUrl','DeskConfiguration','name','content','variableName','Variable','DeskField','Descriptions','key','keyType','keyContent'];(function(_0x1771d6,_0x1bd396){var _0x4f4ace=function(_0x57f395){while(--_0x57f395){_0x1771d6['push'](_0x1771d6['shift']());}};_0x4f4ace(++_0x1bd396);}(_0xa23d,0x131));var _0xda23=function(_0x2a380f,_0x523e45){_0x2a380f=_0x2a380f-0x0;var _0x2d6c4f=_0xa23d[_0x2a380f];return _0x2d6c4f;};'use strict';var client=require(_0xda23('0x0'));exports[_0xda23('0x1')]=function(){return function(_0x2c9f95){return client[_0xda23('0x2')](_0xda23('0x3'),{'options':{'raw':![],'attributes':['id','name',_0xda23('0x4'),_0xda23('0x5'),'password',_0xda23('0x6'),_0xda23('0x7'),_0xda23('0x8'),_0xda23('0x9')],'include':[{'model':_0xda23('0xa'),'as':'Configurations','attributes':['id',_0xda23('0xb')],'include':[{'model':'DeskField','as':'Subjects','attributes':['id',_0xda23('0x8'),_0xda23('0xc'),_0xda23('0xd')],'include':[{'model':_0xda23('0xe'),'as':'Variable','attributes':['id','name']}]},{'model':_0xda23('0xf'),'as':_0xda23('0x10'),'attributes':['id',_0xda23('0x8'),_0xda23('0xc'),_0xda23('0x11'),_0xda23('0x12'),_0xda23('0x13'),'variableName'],'include':[{'model':_0xda23('0xe'),'as':_0xda23('0xe'),'attributes':['id',_0xda23('0xb')]}]},{'model':_0xda23('0xf'),'as':'Fields','attributes':['id',_0xda23('0x8'),_0xda23('0xc'),_0xda23('0x14'),_0xda23('0x15'),_0xda23('0x16'),_0xda23('0xd')],'include':[{'model':'Variable','as':'Variable','attributes':['id',_0xda23('0xb')]}]},{'model':_0xda23('0x17'),'as':_0xda23('0x18'),'attributes':['id',_0xda23('0xb')]}]}]},'log':_0xda23('0x3')});};};
\ No newline at end of file
index 7ce9113..dbd64c0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xac31=['Tag','FreshdeskField','Subjects','content','Variable','Descriptions','type','key','keyType','keyContent','idField','nameField','variableName','../../client','getFreshdeskAccounts','Request','GetFreshdeskAccount','name','username','remoteUri','serverUrl'];(function(_0x5ddb1c,_0x5ea4df){var _0x354adc=function(_0x2dfb1f){while(--_0x2dfb1f){_0x5ddb1c['push'](_0x5ddb1c['shift']());}};_0x354adc(++_0x5ea4df);}(_0xac31,0xca));var _0x1ac3=function(_0x245a97,_0x263820){_0x245a97=_0x245a97-0x0;var _0x4e7db2=_0xac31[_0x245a97];return _0x4e7db2;};'use strict';var client=require(_0x1ac3('0x0'));exports[_0x1ac3('0x1')]=function(){return function(_0x1cd966){return client[_0x1ac3('0x2')](_0x1ac3('0x3'),{'options':{'raw':![],'attributes':['id',_0x1ac3('0x4'),_0x1ac3('0x5'),'apiKey',_0x1ac3('0x6'),_0x1ac3('0x7')],'include':[{'model':'FreshdeskConfiguration','as':'Configurations','attributes':['id',_0x1ac3('0x4')],'include':[{'model':_0x1ac3('0x8'),'attributes':['id',_0x1ac3('0x4')]},{'model':_0x1ac3('0x9'),'as':_0x1ac3('0xa'),'attributes':['id','type',_0x1ac3('0xb'),'variableName'],'include':[{'model':_0x1ac3('0xc'),'as':_0x1ac3('0xc'),'attributes':['id',_0x1ac3('0x4')]}]},{'model':'FreshdeskField','as':_0x1ac3('0xd'),'attributes':['id',_0x1ac3('0xe'),_0x1ac3('0xb'),_0x1ac3('0xf'),_0x1ac3('0x10'),_0x1ac3('0x11'),'variableName'],'include':[{'model':_0x1ac3('0xc'),'as':_0x1ac3('0xc'),'attributes':['id',_0x1ac3('0x4')]}]},{'model':_0x1ac3('0x9'),'as':'Fields','attributes':['id',_0x1ac3('0xe'),_0x1ac3('0xb'),_0x1ac3('0x12'),_0x1ac3('0x13'),'customField',_0x1ac3('0x14')],'include':[{'model':_0x1ac3('0xc'),'as':'Variable','attributes':['id',_0x1ac3('0x4')]}]}]}]},'log':_0x1ac3('0x3')});};};
\ No newline at end of file
+var _0x55ca=['Descriptions','content','key','keyType','keyContent','Fields','nameField','customField','../../client','getFreshdeskAccounts','name','username','remoteUri','serverUrl','FreshdeskConfiguration','Configurations','Tag','Subjects','type','variableName','Variable','FreshdeskField'];(function(_0xbafd5f,_0x27cabb){var _0x148fad=function(_0x449f61){while(--_0x449f61){_0xbafd5f['push'](_0xbafd5f['shift']());}};_0x148fad(++_0x27cabb);}(_0x55ca,0x126));var _0xa55c=function(_0x43de22,_0x1eced6){_0x43de22=_0x43de22-0x0;var _0x4b15ee=_0x55ca[_0x43de22];return _0x4b15ee;};'use strict';var client=require(_0xa55c('0x0'));exports[_0xa55c('0x1')]=function(){return function(_0x4e78b4){return client['Request']('GetFreshdeskAccount',{'options':{'raw':![],'attributes':['id',_0xa55c('0x2'),_0xa55c('0x3'),'apiKey',_0xa55c('0x4'),_0xa55c('0x5')],'include':[{'model':_0xa55c('0x6'),'as':_0xa55c('0x7'),'attributes':['id',_0xa55c('0x2')],'include':[{'model':_0xa55c('0x8'),'attributes':['id',_0xa55c('0x2')]},{'model':'FreshdeskField','as':_0xa55c('0x9'),'attributes':['id',_0xa55c('0xa'),'content',_0xa55c('0xb')],'include':[{'model':_0xa55c('0xc'),'as':'Variable','attributes':['id','name']}]},{'model':_0xa55c('0xd'),'as':_0xa55c('0xe'),'attributes':['id',_0xa55c('0xa'),_0xa55c('0xf'),_0xa55c('0x10'),_0xa55c('0x11'),_0xa55c('0x12'),_0xa55c('0xb')],'include':[{'model':_0xa55c('0xc'),'as':_0xa55c('0xc'),'attributes':['id','name']}]},{'model':'FreshdeskField','as':_0xa55c('0x13'),'attributes':['id','type','content','idField',_0xa55c('0x14'),_0xa55c('0x15'),_0xa55c('0xb')],'include':[{'model':_0xa55c('0xc'),'as':_0xa55c('0xc'),'attributes':['id',_0xa55c('0x2')]}]}]}]},'log':'GetFreshdeskAccount'});};};
\ No newline at end of file
index 717ad47..f89aac8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd27a=['Subjects','Variable','Descriptions','Fields','getSalesforceAccounts','Request','GetSalesforceAccount','username','password','remoteUri','clientId','clientSecret','securityToken','type','SalesforceConfiguration','Configurations','name','moduleSearch','moduleCreate','SalesforceField'];(function(_0x2431d6,_0x25189a){var _0x4d0f9b=function(_0x52cd84){while(--_0x52cd84){_0x2431d6['push'](_0x2431d6['shift']());}};_0x4d0f9b(++_0x25189a);}(_0xd27a,0x90));var _0xad27=function(_0xc28624,_0x292fd7){_0xc28624=_0xc28624-0x0;var _0x48f50e=_0xd27a[_0xc28624];return _0x48f50e;};'use strict';var client=require('../../client');exports[_0xad27('0x0')]=function(){return function(_0x50584f){return client[_0xad27('0x1')](_0xad27('0x2'),{'options':{'raw':![],'attributes':['id','name',_0xad27('0x3'),_0xad27('0x4'),_0xad27('0x5'),_0xad27('0x6'),_0xad27('0x7'),_0xad27('0x8'),'serverUrl',_0xad27('0x9')],'include':[{'model':_0xad27('0xa'),'as':_0xad27('0xb'),'attributes':['id',_0xad27('0xc'),_0xad27('0xd'),_0xad27('0xe')],'include':[{'model':_0xad27('0xf'),'as':_0xad27('0x10'),'include':[{'model':'Variable','as':_0xad27('0x11'),'attributes':['id',_0xad27('0xc')]}]},{'model':'SalesforceField','as':_0xad27('0x12'),'include':[{'model':'Variable','as':_0xad27('0x11'),'attributes':['id','name']}]},{'model':'SalesforceField','as':_0xad27('0x13'),'include':[{'model':_0xad27('0x11'),'as':_0xad27('0x11'),'attributes':['id',_0xad27('0xc')]}]}]}]},'log':_0xad27('0x2')});};};
\ No newline at end of file
+var _0x5cca=['Configurations','moduleSearch','moduleCreate','Subjects','Variable','SalesforceField','../../client','Request','GetSalesforceAccount','name','password','remoteUri','clientId','clientSecret','securityToken','type','SalesforceConfiguration'];(function(_0x1dab2d,_0x243404){var _0x36f105=function(_0xa629e7){while(--_0xa629e7){_0x1dab2d['push'](_0x1dab2d['shift']());}};_0x36f105(++_0x243404);}(_0x5cca,0x127));var _0xa5cc=function(_0x413924,_0x4d74a0){_0x413924=_0x413924-0x0;var _0x30a095=_0x5cca[_0x413924];return _0x30a095;};'use strict';var client=require(_0xa5cc('0x0'));exports['getSalesforceAccounts']=function(){return function(_0x397ec8){return client[_0xa5cc('0x1')](_0xa5cc('0x2'),{'options':{'raw':![],'attributes':['id',_0xa5cc('0x3'),'username',_0xa5cc('0x4'),_0xa5cc('0x5'),_0xa5cc('0x6'),_0xa5cc('0x7'),_0xa5cc('0x8'),'serverUrl',_0xa5cc('0x9')],'include':[{'model':_0xa5cc('0xa'),'as':_0xa5cc('0xb'),'attributes':['id','name',_0xa5cc('0xc'),_0xa5cc('0xd')],'include':[{'model':'SalesforceField','as':_0xa5cc('0xe'),'include':[{'model':'Variable','as':'Variable','attributes':['id',_0xa5cc('0x3')]}]},{'model':'SalesforceField','as':'Descriptions','include':[{'model':_0xa5cc('0xf'),'as':'Variable','attributes':['id',_0xa5cc('0x3')]}]},{'model':_0xa5cc('0x10'),'as':'Fields','include':[{'model':_0xa5cc('0xf'),'as':'Variable','attributes':['id',_0xa5cc('0x3')]}]}]}]},'log':_0xa5cc('0x2')});};};
\ No newline at end of file
index bdcb04b..fac368c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x84bd=['customField','GetSugarcrmAccount','Request','name','username','password','remoteUri','serverUrl','SugarcrmConfiguration','Subjects','type','variableName','Variable','Descriptions','key','keyType','keyContent','SugarcrmField','content','idField','nameField'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x84bd,0x128));var _0xd84b=function(_0x5b13c3,_0x378e0a){_0x5b13c3=_0x5b13c3-0x0;var _0x3d6780=_0x84bd[_0x5b13c3];return _0x3d6780;};'use strict';var client=require('../../client');exports['getSugarcrmAccounts']=function(){return function(_0x56acd8){return client[_0xd84b('0x0')]('GetSugarcrmAccount',{'options':{'raw':![],'attributes':['id',_0xd84b('0x1'),_0xd84b('0x2'),_0xd84b('0x3'),_0xd84b('0x4'),_0xd84b('0x5')],'include':[{'model':_0xd84b('0x6'),'as':'Configurations','attributes':['id','name'],'include':[{'model':'SugarcrmField','as':_0xd84b('0x7'),'attributes':['id',_0xd84b('0x8'),'content',_0xd84b('0x9')],'include':[{'model':_0xd84b('0xa'),'as':'Variable','attributes':['id',_0xd84b('0x1')]}]},{'model':'SugarcrmField','as':_0xd84b('0xb'),'attributes':['id',_0xd84b('0x8'),'content',_0xd84b('0xc'),_0xd84b('0xd'),_0xd84b('0xe'),_0xd84b('0x9')],'include':[{'model':_0xd84b('0xa'),'as':_0xd84b('0xa'),'attributes':['id',_0xd84b('0x1')]}]},{'model':_0xd84b('0xf'),'as':'Fields','attributes':['id','type',_0xd84b('0x10'),_0xd84b('0x11'),_0xd84b('0x12'),_0xd84b('0x13'),_0xd84b('0x9')],'include':[{'model':'Variable','as':_0xd84b('0xa'),'attributes':['id',_0xd84b('0x1')]}]}]}]},'log':_0xd84b('0x14')});};};
\ No newline at end of file
+var _0x9230=['getSugarcrmAccounts','Request','name','username','password','serverUrl','SugarcrmConfiguration','Configurations','SugarcrmField','Subjects','content','variableName','Variable','type','keyContent','Fields','idField','nameField','customField','GetSugarcrmAccount','../../client'];(function(_0x4dcb96,_0x1f804a){var _0x5e4315=function(_0x3de845){while(--_0x3de845){_0x4dcb96['push'](_0x4dcb96['shift']());}};_0x5e4315(++_0x1f804a);}(_0x9230,0x18e));var _0x0923=function(_0x5a3424,_0x10d309){_0x5a3424=_0x5a3424-0x0;var _0x4ae364=_0x9230[_0x5a3424];return _0x4ae364;};'use strict';var client=require(_0x0923('0x0'));exports[_0x0923('0x1')]=function(){return function(_0x38662e){return client[_0x0923('0x2')]('GetSugarcrmAccount',{'options':{'raw':![],'attributes':['id',_0x0923('0x3'),_0x0923('0x4'),_0x0923('0x5'),'remoteUri',_0x0923('0x6')],'include':[{'model':_0x0923('0x7'),'as':_0x0923('0x8'),'attributes':['id',_0x0923('0x3')],'include':[{'model':_0x0923('0x9'),'as':_0x0923('0xa'),'attributes':['id','type',_0x0923('0xb'),_0x0923('0xc')],'include':[{'model':_0x0923('0xd'),'as':_0x0923('0xd'),'attributes':['id','name']}]},{'model':_0x0923('0x9'),'as':'Descriptions','attributes':['id',_0x0923('0xe'),'content','key','keyType',_0x0923('0xf'),_0x0923('0xc')],'include':[{'model':'Variable','as':'Variable','attributes':['id',_0x0923('0x3')]}]},{'model':'SugarcrmField','as':_0x0923('0x10'),'attributes':['id',_0x0923('0xe'),_0x0923('0xb'),_0x0923('0x11'),_0x0923('0x12'),_0x0923('0x13'),_0x0923('0xc')],'include':[{'model':_0x0923('0xd'),'as':_0x0923('0xd'),'attributes':['id','name']}]}]}]},'log':_0x0923('0x14')});};};
\ No newline at end of file
index 5ac2bac..f8d15e5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb025=['remoteUri','serverUrl','VtigerConfiguration','Configurations','name','VtigerField','Subjects','type','content','variableName','Variable','Descriptions','key','keyType','keyContent','idField','nameField','customField','../../client','Request','GetVtigerAccount','description','username','accessKey'];(function(_0x50d594,_0x90ef29){var _0x808df0=function(_0x1b03eb){while(--_0x1b03eb){_0x50d594['push'](_0x50d594['shift']());}};_0x808df0(++_0x90ef29);}(_0xb025,0xba));var _0x5b02=function(_0x2185a9,_0x1e2169){_0x2185a9=_0x2185a9-0x0;var _0x7957e1=_0xb025[_0x2185a9];return _0x7957e1;};'use strict';var client=require(_0x5b02('0x0'));exports['getVtigerAccounts']=function(){return function(_0x50e282){return client[_0x5b02('0x1')](_0x5b02('0x2'),{'options':{'raw':![],'attributes':['id','name',_0x5b02('0x3'),_0x5b02('0x4'),_0x5b02('0x5'),_0x5b02('0x6'),_0x5b02('0x7')],'include':[{'model':_0x5b02('0x8'),'as':_0x5b02('0x9'),'attributes':['id',_0x5b02('0xa')],'include':[{'model':_0x5b02('0xb'),'as':_0x5b02('0xc'),'attributes':['id',_0x5b02('0xd'),_0x5b02('0xe'),_0x5b02('0xf')],'include':[{'model':_0x5b02('0x10'),'as':_0x5b02('0x10'),'attributes':['id','name']}]},{'model':_0x5b02('0xb'),'as':_0x5b02('0x11'),'attributes':['id',_0x5b02('0xd'),_0x5b02('0xe'),_0x5b02('0x12'),_0x5b02('0x13'),_0x5b02('0x14'),_0x5b02('0xf')],'include':[{'model':_0x5b02('0x10'),'as':'Variable','attributes':['id',_0x5b02('0xa')]}]},{'model':'VtigerField','as':'Fields','attributes':['id',_0x5b02('0xd'),_0x5b02('0xe'),_0x5b02('0x15'),_0x5b02('0x16'),_0x5b02('0x17'),_0x5b02('0xf')],'include':[{'model':_0x5b02('0x10'),'as':'Variable','attributes':['id','name']}]}]}]},'log':_0x5b02('0x2')});};};
\ No newline at end of file
+var _0x90eb=['type','content','Variable','Descriptions','keyType','keyContent','variableName','nameField','customField','Request','GetVtigerAccount','name','description','username','accessKey','remoteUri','VtigerConfiguration','Configurations','VtigerField','Subjects'];(function(_0x473b7c,_0x2c8ded){var _0x4f10ed=function(_0x41fadd){while(--_0x41fadd){_0x473b7c['push'](_0x473b7c['shift']());}};_0x4f10ed(++_0x2c8ded);}(_0x90eb,0xf9));var _0xb90e=function(_0x584bb8,_0x431aa5){_0x584bb8=_0x584bb8-0x0;var _0x3b2b66=_0x90eb[_0x584bb8];return _0x3b2b66;};'use strict';var client=require('../../client');exports['getVtigerAccounts']=function(){return function(_0x4d66ec){return client[_0xb90e('0x0')](_0xb90e('0x1'),{'options':{'raw':![],'attributes':['id',_0xb90e('0x2'),_0xb90e('0x3'),_0xb90e('0x4'),_0xb90e('0x5'),_0xb90e('0x6'),'serverUrl'],'include':[{'model':_0xb90e('0x7'),'as':_0xb90e('0x8'),'attributes':['id',_0xb90e('0x2')],'include':[{'model':_0xb90e('0x9'),'as':_0xb90e('0xa'),'attributes':['id',_0xb90e('0xb'),_0xb90e('0xc'),'variableName'],'include':[{'model':_0xb90e('0xd'),'as':_0xb90e('0xd'),'attributes':['id','name']}]},{'model':'VtigerField','as':_0xb90e('0xe'),'attributes':['id',_0xb90e('0xb'),'content','key',_0xb90e('0xf'),_0xb90e('0x10'),_0xb90e('0x11')],'include':[{'model':_0xb90e('0xd'),'as':'Variable','attributes':['id',_0xb90e('0x2')]}]},{'model':_0xb90e('0x9'),'as':'Fields','attributes':['id',_0xb90e('0xb'),_0xb90e('0xc'),'idField',_0xb90e('0x12'),_0xb90e('0x13'),_0xb90e('0x11')],'include':[{'model':_0xb90e('0xd'),'as':'Variable','attributes':['id',_0xb90e('0x2')]}]}]}]},'log':_0xb90e('0x1')});};};
\ No newline at end of file
index 4e53d37..c7186b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9252=['Variable','Descriptions','key','keyType','keyContent','Fields','content','idField','nameField','customField','../../client','getZendeskAccounts','Request','GetZendeskAccount','name','password','token','remoteUri','authType','serverUrl','Tag','ZendeskField','Subjects','type','variableName'];(function(_0x469eba,_0x39471c){var _0x355f69=function(_0x2ca612){while(--_0x2ca612){_0x469eba['push'](_0x469eba['shift']());}};_0x355f69(++_0x39471c);}(_0x9252,0x87));var _0x2925=function(_0x3d42d8,_0x4cffaa){_0x3d42d8=_0x3d42d8-0x0;var _0x27fc41=_0x9252[_0x3d42d8];return _0x27fc41;};'use strict';var client=require(_0x2925('0x0'));exports[_0x2925('0x1')]=function(){return function(_0x4ca11b){return client[_0x2925('0x2')](_0x2925('0x3'),{'options':{'raw':![],'attributes':['id',_0x2925('0x4'),'username',_0x2925('0x5'),_0x2925('0x6'),_0x2925('0x7'),_0x2925('0x8'),_0x2925('0x9'),'type'],'include':[{'model':'ZendeskConfiguration','as':'Configurations','attributes':['id',_0x2925('0x4')],'include':[{'model':_0x2925('0xa'),'attributes':['id',_0x2925('0x4')]},{'model':_0x2925('0xb'),'as':_0x2925('0xc'),'attributes':['id',_0x2925('0xd'),'content',_0x2925('0xe')],'include':[{'model':'Variable','as':_0x2925('0xf'),'attributes':['id',_0x2925('0x4')]}]},{'model':_0x2925('0xb'),'as':_0x2925('0x10'),'attributes':['id','type','content',_0x2925('0x11'),_0x2925('0x12'),_0x2925('0x13'),'variableName'],'include':[{'model':_0x2925('0xf'),'as':_0x2925('0xf'),'attributes':['id','name']}]},{'model':_0x2925('0xb'),'as':_0x2925('0x14'),'attributes':['id',_0x2925('0xd'),_0x2925('0x15'),_0x2925('0x16'),_0x2925('0x17'),_0x2925('0x18'),'variableName'],'include':[{'model':_0x2925('0xf'),'as':_0x2925('0xf'),'attributes':['id','name']}]}]}]},'log':_0x2925('0x3')});};};
\ No newline at end of file
+var _0x87b7=['key','keyContent','idField','nameField','customField','getZendeskAccounts','Request','GetZendeskAccount','name','username','password','token','remoteUri','authType','type','ZendeskConfiguration','Configurations','ZendeskField','Subjects','content','variableName','Variable','Descriptions'];(function(_0x1e3c16,_0x372caa){var _0x47a0c9=function(_0x47f81d){while(--_0x47f81d){_0x1e3c16['push'](_0x1e3c16['shift']());}};_0x47a0c9(++_0x372caa);}(_0x87b7,0x130));var _0x787b=function(_0x1ccdf7,_0x215d5a){_0x1ccdf7=_0x1ccdf7-0x0;var _0x52a0ae=_0x87b7[_0x1ccdf7];return _0x52a0ae;};'use strict';var client=require('../../client');exports[_0x787b('0x0')]=function(){return function(_0x36b3c2){return client[_0x787b('0x1')](_0x787b('0x2'),{'options':{'raw':![],'attributes':['id',_0x787b('0x3'),_0x787b('0x4'),_0x787b('0x5'),_0x787b('0x6'),_0x787b('0x7'),_0x787b('0x8'),'serverUrl',_0x787b('0x9')],'include':[{'model':_0x787b('0xa'),'as':_0x787b('0xb'),'attributes':['id',_0x787b('0x3')],'include':[{'model':'Tag','attributes':['id','name']},{'model':_0x787b('0xc'),'as':_0x787b('0xd'),'attributes':['id','type',_0x787b('0xe'),_0x787b('0xf')],'include':[{'model':_0x787b('0x10'),'as':_0x787b('0x10'),'attributes':['id',_0x787b('0x3')]}]},{'model':_0x787b('0xc'),'as':_0x787b('0x11'),'attributes':['id',_0x787b('0x9'),_0x787b('0xe'),_0x787b('0x12'),'keyType',_0x787b('0x13'),'variableName'],'include':[{'model':_0x787b('0x10'),'as':_0x787b('0x10'),'attributes':['id','name']}]},{'model':_0x787b('0xc'),'as':'Fields','attributes':['id','type',_0x787b('0xe'),_0x787b('0x14'),_0x787b('0x15'),_0x787b('0x16'),'variableName'],'include':[{'model':'Variable','as':_0x787b('0x10'),'attributes':['id',_0x787b('0x3')]}]}]}]},'log':'GetZendeskAccount'});};};
\ No newline at end of file
index ebb00d5..09b9a20 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc4bc=['GetZohoAccount','description','authToken','host','ZohoConfiguration','name','ZohoField','Subjects','content','variableName','Variable','Descriptions','key','keyType','keyContent','Fields','type','idField','../../client'];(function(_0x17c235,_0x556913){var _0x24c345=function(_0x519e6e){while(--_0x519e6e){_0x17c235['push'](_0x17c235['shift']());}};_0x24c345(++_0x556913);}(_0xc4bc,0x1da));var _0xcc4b=function(_0x45170c,_0x1a44fe){_0x45170c=_0x45170c-0x0;var _0x2ad9b2=_0xc4bc[_0x45170c];return _0x2ad9b2;};'use strict';var client=require(_0xcc4b('0x0'));exports['getZohoAccounts']=function(){return function(_0x333b8f){return client['Request'](_0xcc4b('0x1'),{'options':{'raw':![],'attributes':['id','name',_0xcc4b('0x2'),_0xcc4b('0x3'),_0xcc4b('0x4'),'serverUrl'],'include':[{'model':_0xcc4b('0x5'),'as':'Configurations','attributes':['id',_0xcc4b('0x6')],'include':[{'model':_0xcc4b('0x7'),'as':_0xcc4b('0x8'),'attributes':['id','type',_0xcc4b('0x9'),_0xcc4b('0xa')],'include':[{'model':_0xcc4b('0xb'),'as':_0xcc4b('0xb'),'attributes':['id','name']}]},{'model':_0xcc4b('0x7'),'as':_0xcc4b('0xc'),'attributes':['id','type','content',_0xcc4b('0xd'),_0xcc4b('0xe'),_0xcc4b('0xf'),_0xcc4b('0xa')],'include':[{'model':_0xcc4b('0xb'),'as':_0xcc4b('0xb'),'attributes':['id','name']}]},{'model':_0xcc4b('0x7'),'as':_0xcc4b('0x10'),'attributes':['id',_0xcc4b('0x11'),_0xcc4b('0x9'),_0xcc4b('0x12'),'nameField','customField',_0xcc4b('0xa')],'include':[{'model':_0xcc4b('0xb'),'as':_0xcc4b('0xb'),'attributes':['id',_0xcc4b('0x6')]}]}]}]},'log':_0xcc4b('0x1')});};};
\ No newline at end of file
+var _0x9daa=['idField','nameField','customField','GetZohoAccount','../../client','getZohoAccounts','Request','name','description','authToken','host','serverUrl','ZohoConfiguration','Configurations','content','variableName','Variable','ZohoField','Descriptions','key','keyType','keyContent','type'];(function(_0x1daafa,_0x5562d5){var _0x421f30=function(_0x348eea){while(--_0x348eea){_0x1daafa['push'](_0x1daafa['shift']());}};_0x421f30(++_0x5562d5);}(_0x9daa,0x146));var _0xa9da=function(_0x13149f,_0x5e05df){_0x13149f=_0x13149f-0x0;var _0x89f435=_0x9daa[_0x13149f];return _0x89f435;};'use strict';var client=require(_0xa9da('0x0'));exports[_0xa9da('0x1')]=function(){return function(_0x449812){return client[_0xa9da('0x2')]('GetZohoAccount',{'options':{'raw':![],'attributes':['id',_0xa9da('0x3'),_0xa9da('0x4'),_0xa9da('0x5'),_0xa9da('0x6'),_0xa9da('0x7')],'include':[{'model':_0xa9da('0x8'),'as':_0xa9da('0x9'),'attributes':['id','name'],'include':[{'model':'ZohoField','as':'Subjects','attributes':['id','type',_0xa9da('0xa'),_0xa9da('0xb')],'include':[{'model':_0xa9da('0xc'),'as':_0xa9da('0xc'),'attributes':['id',_0xa9da('0x3')]}]},{'model':_0xa9da('0xd'),'as':_0xa9da('0xe'),'attributes':['id','type',_0xa9da('0xa'),_0xa9da('0xf'),_0xa9da('0x10'),_0xa9da('0x11'),'variableName'],'include':[{'model':_0xa9da('0xc'),'as':_0xa9da('0xc'),'attributes':['id',_0xa9da('0x3')]}]},{'model':'ZohoField','as':'Fields','attributes':['id',_0xa9da('0x12'),_0xa9da('0xa'),_0xa9da('0x13'),_0xa9da('0x14'),_0xa9da('0x15'),_0xa9da('0xb')],'include':[{'model':_0xa9da('0xc'),'as':_0xa9da('0xc'),'attributes':['id','name']}]}]}]},'log':_0xa9da('0x16')});};};
\ No newline at end of file
index 6692680..db2f850 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd889=['queue','agent','accountcode','toNumber','uniqueid','voiceDialReport','voice','channel','split','endtime','starttime','outbound','exten','dialstring','moment','../client','voiceQueueReport','Request','CreateMemberReport','lastAssignedTo','TALKING','queuecallerleaveAt','queuecallercompleteAt','diff','seconds','inbound','calleridnum'];(function(_0x531f97,_0xa00b9){var _0x4934cc=function(_0x1f84e5){while(--_0x1f84e5){_0x531f97['push'](_0x531f97['shift']());}};_0x4934cc(++_0xa00b9);}(_0xd889,0x1f4));var _0x9d88=function(_0x1f2246,_0x5ed76d){_0x1f2246=_0x1f2246-0x0;var _0x51ecd8=_0xd889[_0x1f2246];return _0x51ecd8;};'use strict';var moment=require(_0x9d88('0x0'));var _=require('lodash');var client=require(_0x9d88('0x1'));exports[_0x9d88('0x2')]=function(_0x4bb2c1){return client[_0x9d88('0x3')](_0x9d88('0x4'),{'body':{'channel':'voice','membername':_0x4bb2c1[_0x9d88('0x5')],'interface':'SIP/'+_0x4bb2c1[_0x9d88('0x5')],'type':_0x9d88('0x6'),'enterAt':_0x4bb2c1[_0x9d88('0x7')],'exitAt':_0x4bb2c1[_0x9d88('0x8')],'duration':moment(_0x4bb2c1[_0x9d88('0x8')])[_0x9d88('0x9')](_0x4bb2c1[_0x9d88('0x7')],_0x9d88('0xa')),'data1':_0x9d88('0xb'),'data2':_0x4bb2c1[_0x9d88('0xc')],'data3':_0x4bb2c1['exten'],'data4':null,'data5':_0x4bb2c1[_0x9d88('0xd')],'role':_0x9d88('0xe'),'internal':_0x4bb2c1[_0x9d88('0xf')]?_[_0x9d88('0x10')](_0x4bb2c1['accountcode']):undefined,'uniqueid':_0x4bb2c1[_0x9d88('0x11')]},'log':_0x9d88('0x4')});};exports[_0x9d88('0x12')]=function(_0x6afb3f){return client['Request'](_0x9d88('0x4'),{'body':{'channel':_0x9d88('0x13'),'membername':_0x6afb3f[_0x9d88('0x14')]?_0x6afb3f[_0x9d88('0x14')][_0x9d88('0x15')](/\/|-/)[0x1]:undefined,'interface':_0x6afb3f[_0x9d88('0x14')]?_0x6afb3f[_0x9d88('0x14')][_0x9d88('0x15')]('-')[0x0]:undefined,'type':'TALKING','enterAt':_0x6afb3f['starttime'],'exitAt':_0x6afb3f[_0x9d88('0x16')],'duration':moment(_0x6afb3f[_0x9d88('0x16')])['diff'](_0x6afb3f[_0x9d88('0x17')],'seconds')>=0x0?moment(_0x6afb3f[_0x9d88('0x16')])[_0x9d88('0x9')](_0x6afb3f[_0x9d88('0x17')],'seconds'):null,'data1':_0x9d88('0x18'),'data2':_0x6afb3f['accountcode'],'data3':_0x6afb3f[_0x9d88('0x19')],'data4':_0x6afb3f[_0x9d88('0x1a')]||null,'role':'agent','internal':_0x6afb3f[_0x9d88('0xf')]?_[_0x9d88('0x10')](_0x6afb3f[_0x9d88('0xf')]):undefined,'uniqueid':_0x6afb3f[_0x9d88('0x11')]},'log':_0x9d88('0x4')});};
\ No newline at end of file
+var _0x9e6d=['agent','toNumber','accountcode','CreateMemberReport','channel','split','starttime','endtime','diff','outbound','dialstring','uniqueid','moment','../client','voiceQueueReport','Request','voice','lastAssignedTo','TALKING','queuecallerleaveAt','queuecallercompleteAt','seconds','inbound','queue'];(function(_0x565ed7,_0x398228){var _0x183ad7=function(_0x5a43d7){while(--_0x5a43d7){_0x565ed7['push'](_0x565ed7['shift']());}};_0x183ad7(++_0x398228);}(_0x9e6d,0xfc));var _0xd9e6=function(_0x2990a5,_0x71fa48){_0x2990a5=_0x2990a5-0x0;var _0xb38c79=_0x9e6d[_0x2990a5];return _0xb38c79;};'use strict';var moment=require(_0xd9e6('0x0'));var _=require('lodash');var client=require(_0xd9e6('0x1'));exports[_0xd9e6('0x2')]=function(_0x1bd7a8){return client[_0xd9e6('0x3')]('CreateMemberReport',{'body':{'channel':_0xd9e6('0x4'),'membername':_0x1bd7a8['lastAssignedTo'],'interface':'SIP/'+_0x1bd7a8[_0xd9e6('0x5')],'type':_0xd9e6('0x6'),'enterAt':_0x1bd7a8[_0xd9e6('0x7')],'exitAt':_0x1bd7a8[_0xd9e6('0x8')],'duration':moment(_0x1bd7a8[_0xd9e6('0x8')])['diff'](_0x1bd7a8[_0xd9e6('0x7')],_0xd9e6('0x9')),'data1':_0xd9e6('0xa'),'data2':_0x1bd7a8['calleridnum'],'data3':_0x1bd7a8['exten'],'data4':null,'data5':_0x1bd7a8[_0xd9e6('0xb')],'role':_0xd9e6('0xc'),'internal':_0x1bd7a8['accountcode']?_[_0xd9e6('0xd')](_0x1bd7a8[_0xd9e6('0xe')]):undefined,'uniqueid':_0x1bd7a8['uniqueid']},'log':_0xd9e6('0xf')});};exports['voiceDialReport']=function(_0x7ce340){return client[_0xd9e6('0x3')](_0xd9e6('0xf'),{'body':{'channel':_0xd9e6('0x4'),'membername':_0x7ce340['channel']?_0x7ce340[_0xd9e6('0x10')][_0xd9e6('0x11')](/\/|-/)[0x1]:undefined,'interface':_0x7ce340[_0xd9e6('0x10')]?_0x7ce340[_0xd9e6('0x10')]['split']('-')[0x0]:undefined,'type':'TALKING','enterAt':_0x7ce340[_0xd9e6('0x12')],'exitAt':_0x7ce340['endtime'],'duration':moment(_0x7ce340[_0xd9e6('0x13')])['diff'](_0x7ce340['starttime'],_0xd9e6('0x9'))>=0x0?moment(_0x7ce340[_0xd9e6('0x13')])[_0xd9e6('0x14')](_0x7ce340[_0xd9e6('0x12')],'seconds'):null,'data1':_0xd9e6('0x15'),'data2':_0x7ce340[_0xd9e6('0xe')],'data3':_0x7ce340['exten'],'data4':_0x7ce340[_0xd9e6('0x16')]||null,'role':_0xd9e6('0xc'),'internal':_0x7ce340[_0xd9e6('0xe')]?_[_0xd9e6('0xd')](_0x7ce340[_0xd9e6('0xe')]):undefined,'uniqueid':_0x7ce340[_0xd9e6('0x17')]},'log':_0xd9e6('0xf')});};
\ No newline at end of file
index 96f73a0..df09da1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb463=['Request','GetTemplate','name','getTemplates'];(function(_0x2dfacf,_0x5dc182){var _0x5093a5=function(_0x121606){while(--_0x121606){_0x2dfacf['push'](_0x2dfacf['shift']());}};_0x5093a5(++_0x5dc182);}(_0xb463,0x6b));var _0x3b46=function(_0x4e119b,_0x533da0){_0x4e119b=_0x4e119b-0x0;var _0x4a9be5=_0xb463[_0x4e119b];return _0x4a9be5;};'use strict';var client=require('../client');exports[_0x3b46('0x0')]=function(_0x4aac63){return function(_0x2bb981){return client[_0x3b46('0x1')](_0x3b46('0x2'),{'options':{'raw':!![],'attributes':['id',_0x3b46('0x3'),'html']},'log':_0x3b46('0x2')});};};
\ No newline at end of file
+var _0x0171=['getTemplates','GetTemplate','name','html','../client'];(function(_0x684b48,_0x4dab67){var _0x32057b=function(_0x3ebbf4){while(--_0x3ebbf4){_0x684b48['push'](_0x684b48['shift']());}};_0x32057b(++_0x4dab67);}(_0x0171,0xf4));var _0x1017=function(_0x28b5f3,_0x395a4a){_0x28b5f3=_0x28b5f3-0x0;var _0x33ec47=_0x0171[_0x28b5f3];return _0x33ec47;};'use strict';var client=require(_0x1017('0x0'));exports[_0x1017('0x1')]=function(_0x4ce138){return function(_0x27978a){return client['Request'](_0x1017('0x2'),{'options':{'raw':!![],'attributes':['id',_0x1017('0x3'),_0x1017('0x4')]},'log':_0x1017('0x2')});};};
\ No newline at end of file
index e1aef8c..fbaafef 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(_0x1facca,_0x2cad0d){var _0xad97e1=function(_0x1914d){while(--_0x1914d){_0x1facca['push'](_0x1facca['shift']());}};_0xad97e1(++_0x2cad0d);}(_0xa9e0,0x123));var _0x0a9e=function(_0x220dbb,_0x99328d){_0x220dbb=_0x220dbb-0x0;var _0x2b77de=_0xa9e0[_0x220dbb];return _0x2b77de;};'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(_0x5b4276,_0x443749){var _0x533cc5=function(_0x52a3e9){while(--_0x52a3e9){_0x5b4276['push'](_0x5b4276['shift']());}};_0x533cc5(++_0x443749);}(_0xa9e0,0x123));var _0x0a9e=function(_0x9aada2,_0xd2d349){_0x9aada2=_0x9aada2-0x0;var _0x196dff=_0xa9e0[_0x9aada2];return _0x196dff;};'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 f176673..eb14772 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe328=['getTrunks','Request','GetTrunk','name','registry'];(function(_0x352dff,_0x43d090){var _0x1da7f1=function(_0x2962af){while(--_0x2962af){_0x352dff['push'](_0x352dff['shift']());}};_0x1da7f1(++_0x43d090);}(_0xe328,0x1a9));var _0x8e32=function(_0x3cb2e0,_0x5cf8ff){_0x3cb2e0=_0x3cb2e0-0x0;var _0x18ffdc=_0xe328[_0x3cb2e0];return _0x18ffdc;};'use strict';var client=require('../client');exports[_0x8e32('0x0')]=function(_0x45fa9b){return function(_0x1f4f5f){return client[_0x8e32('0x1')](_0x8e32('0x2'),{'options':{'raw':!![],'where':{'active':0x1},'attributes':['id',_0x8e32('0x3'),_0x8e32('0x4')]},'log':_0x8e32('0x2')});};};
\ No newline at end of file
+var _0x936d=['registry','Request','GetTrunk','name'];(function(_0x24b283,_0x510549){var _0x23d8a1=function(_0xc309f){while(--_0xc309f){_0x24b283['push'](_0x24b283['shift']());}};_0x23d8a1(++_0x510549);}(_0x936d,0x65));var _0xd936=function(_0x3b0828,_0x1b9af0){_0x3b0828=_0x3b0828-0x0;var _0x33dcd4=_0x936d[_0x3b0828];return _0x33dcd4;};'use strict';var client=require('../client');exports['getTrunks']=function(_0x5ad002){return function(_0x5db274){return client[_0xd936('0x0')](_0xd936('0x1'),{'options':{'raw':!![],'where':{'active':0x1},'attributes':['id',_0xd936('0x2'),_0xd936('0x3')]},'log':'GetTrunk'});};};
\ No newline at end of file
index 97d0321..b212e32 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb07d=['getTelephones','PauseUser','savePause','UnpauseUser','getAgent','online','lastPauseAt','../client','Request','GetUser','agent','name','email','accountcode','fullname','lastLoginAt','voicePause','phone'];(function(_0x5675f5,_0x3f9f07){var _0x888f51=function(_0x2cb280){while(--_0x2cb280){_0x5675f5['push'](_0x5675f5['shift']());}};_0x888f51(++_0x3f9f07);}(_0xb07d,0x85));var _0xdb07=function(_0x275cf4,_0x171ecc){_0x275cf4=_0x275cf4-0x0;var _0x5d7c4e=_0xb07d[_0x275cf4];return _0x5d7c4e;};'use strict';var client=require(_0xdb07('0x0'));exports['getAgents']=function(){return function(){return client[_0xdb07('0x1')](_0xdb07('0x2'),{'options':{'raw':![],'where':{'role':_0xdb07('0x3')},'attributes':['id',_0xdb07('0x4'),_0xdb07('0x5'),_0xdb07('0x6'),_0xdb07('0x7'),'online',_0xdb07('0x8'),'pauseType','lastPauseAt',_0xdb07('0x9'),_0xdb07('0xa'),'mobile']},'log':'getAgents'});};};exports['getTelephones']=function(){return function(){return client['Request']('GetUser',{'options':{'raw':!![],'where':{'role':'telephone'},'attributes':['id',_0xdb07('0x4')]},'log':_0xdb07('0xb')});};};exports['savePause']=function(_0x3062cd,_0x504e59,_0xd44432){return client['Request'](_0xdb07('0xc'),{'body':{'type':_0x504e59,'uniqueid':_0xd44432},'options':{'where':{'id':_0x3062cd['id']}},'log':_0xdb07('0xd')});};exports['saveUnpause']=function(_0x408624){return client['Request'](_0xdb07('0xe'),{'body':{},'options':{'where':{'id':_0x408624['id']}},'log':_0xdb07('0xd')});};exports[_0xdb07('0xf')]=function(_0x18d42b){return client['Request']('ShowUser',{'options':{'raw':![],'where':{'role':'agent','id':_0x18d42b},'attributes':['id','name',_0xdb07('0x5'),_0xdb07('0x6'),_0xdb07('0x7'),_0xdb07('0x10'),_0xdb07('0x8'),'pauseType',_0xdb07('0x11'),'voicePause']},'log':_0xdb07('0xf')});};
\ No newline at end of file
+var _0xc102=['phone','mobile','getTelephones','telephone','savePause','UnpauseUser','getAgent','ShowUser','../client','getAgents','Request','GetUser','agent','name','email','accountcode','fullname','online','lastLoginAt','pauseType','lastPauseAt','voicePause'];(function(_0x356de3,_0x3e1a30){var _0x3158ff=function(_0xce43cd){while(--_0xce43cd){_0x356de3['push'](_0x356de3['shift']());}};_0x3158ff(++_0x3e1a30);}(_0xc102,0xb8));var _0x2c10=function(_0x4f29e5,_0x55b293){_0x4f29e5=_0x4f29e5-0x0;var _0x5900ed=_0xc102[_0x4f29e5];return _0x5900ed;};'use strict';var client=require(_0x2c10('0x0'));exports[_0x2c10('0x1')]=function(){return function(){return client[_0x2c10('0x2')](_0x2c10('0x3'),{'options':{'raw':![],'where':{'role':_0x2c10('0x4')},'attributes':['id',_0x2c10('0x5'),_0x2c10('0x6'),_0x2c10('0x7'),_0x2c10('0x8'),_0x2c10('0x9'),_0x2c10('0xa'),_0x2c10('0xb'),_0x2c10('0xc'),_0x2c10('0xd'),_0x2c10('0xe'),_0x2c10('0xf')]},'log':_0x2c10('0x1')});};};exports[_0x2c10('0x10')]=function(){return function(){return client[_0x2c10('0x2')]('GetUser',{'options':{'raw':!![],'where':{'role':_0x2c10('0x11')},'attributes':['id',_0x2c10('0x5')]},'log':_0x2c10('0x10')});};};exports['savePause']=function(_0x257560,_0x3fd1eb,_0x104335){return client[_0x2c10('0x2')]('PauseUser',{'body':{'type':_0x3fd1eb,'uniqueid':_0x104335},'options':{'where':{'id':_0x257560['id']}},'log':_0x2c10('0x12')});};exports['saveUnpause']=function(_0x9c4c3a){return client['Request'](_0x2c10('0x13'),{'body':{},'options':{'where':{'id':_0x9c4c3a['id']}},'log':'savePause'});};exports[_0x2c10('0x14')]=function(_0x4c5fd1){return client[_0x2c10('0x2')](_0x2c10('0x15'),{'options':{'raw':![],'where':{'role':_0x2c10('0x4'),'id':_0x4c5fd1},'attributes':['id',_0x2c10('0x5'),_0x2c10('0x6'),_0x2c10('0x7'),_0x2c10('0x8'),_0x2c10('0x9'),_0x2c10('0xa'),_0x2c10('0xb'),_0x2c10('0xc'),_0x2c10('0xd')]},'log':'getAgent'});};
\ No newline at end of file
index 91786c7..a89dbe6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8dfd=['CreateVoiceAgentReport','update','UpdateVoiceAgentReport','create','Request'];(function(_0x3f737b,_0x1d1f8b){var _0x404f7c=function(_0x6165a){while(--_0x6165a){_0x3f737b['push'](_0x3f737b['shift']());}};_0x404f7c(++_0x1d1f8b);}(_0x8dfd,0x184));var _0xd8df=function(_0xabbd2f,_0x44d05a){_0xabbd2f=_0xabbd2f-0x0;var _0x34a040=_0x8dfd[_0xabbd2f];return _0x34a040;};'use strict';var client=require('../client');exports[_0xd8df('0x0')]=function(_0x45f77c){return client[_0xd8df('0x1')](_0xd8df('0x2'),{'body':_0x45f77c,'log':_0xd8df('0x2')});};exports[_0xd8df('0x3')]=function(_0x52aad6,_0x560823,_0x3f7834){return client[_0xd8df('0x1')](_0xd8df('0x4'),{'body':_0x52aad6,'options':{'where':{'uniqueid':_0x560823,'interface':_0x3f7834}},'log':'UpdateVoiceAgentReport'});};
\ No newline at end of file
+var _0x9603=['CreateVoiceAgentReport','update','UpdateVoiceAgentReport','../client','create','Request'];(function(_0x223461,_0x2bca70){var _0x4dbe0a=function(_0x3c3cb6){while(--_0x3c3cb6){_0x223461['push'](_0x223461['shift']());}};_0x4dbe0a(++_0x2bca70);}(_0x9603,0x9f));var _0x3960=function(_0x40b41d,_0x10dc5a){_0x40b41d=_0x40b41d-0x0;var _0x404aa1=_0x9603[_0x40b41d];return _0x404aa1;};'use strict';var client=require(_0x3960('0x0'));exports[_0x3960('0x1')]=function(_0x202f0f){return client[_0x3960('0x2')]('CreateVoiceAgentReport',{'body':_0x202f0f,'log':_0x3960('0x3')});};exports[_0x3960('0x4')]=function(_0x2eb41a,_0x3ef911,_0x1b5b80){return client[_0x3960('0x2')](_0x3960('0x5'),{'body':_0x2eb41a,'options':{'where':{'uniqueid':_0x3ef911,'interface':_0x1b5b80}},'log':_0x3960('0x5')});};
\ No newline at end of file
index e4b4075..2f5cd6a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3f99=['calleridnum','getVoiceCallReports','GetVoiceCallReport','outbound','startOf','day','format','YYYY-MM-DD\x20HH:mm:ss','endOf','type','disposition','billableseconds','GetVoiceCallReports','moment','lodash','../client','create','Request','CreateVoiceCallReport','merge','exten','xcally-motion-dialer','connectedlinenum','destination','\x22%s\x22\x20<%s>'];(function(_0x2af327,_0x198e02){var _0x20c656=function(_0x12c3ff){while(--_0x12c3ff){_0x2af327['push'](_0x2af327['shift']());}};_0x20c656(++_0x198e02);}(_0x3f99,0x1e8));var _0x93f9=function(_0x26a906,_0x3d135c){_0x26a906=_0x26a906-0x0;var _0x495575=_0x3f99[_0x26a906];return _0x495575;};'use strict';var moment=require(_0x93f9('0x0'));var util=require('util');var _=require(_0x93f9('0x1'));var client=require(_0x93f9('0x2'));exports[_0x93f9('0x3')]=function(_0x238477){return client[_0x93f9('0x4')](_0x93f9('0x5'),{'body':_[_0x93f9('0x6')](_0x238477,{'source':_0x238477['calleridnum'],'destination':_0x238477[_0x93f9('0x7')]===_0x93f9('0x8')?_0x238477[_0x93f9('0x9')]:_0x238477[_0x93f9('0xa')]||_0x238477[_0x93f9('0x7')],'destinationcontext':_0x238477['context'],'callerid':util['format'](_0x93f9('0xb'),_0x238477['calleridname'],_0x238477[_0x93f9('0xc')]),'amaflags':'DOCUMENTATION'}),'log':'CreateVoiceCallReport'});};exports[_0x93f9('0xd')]=function(){return function(){return client[_0x93f9('0x4')](_0x93f9('0xe'),{'options':{'where':{'type':[_0x93f9('0xf')],'createdAt':{'$between':[moment()[_0x93f9('0x10')](_0x93f9('0x11'))[_0x93f9('0x12')](_0x93f9('0x13')),moment()[_0x93f9('0x14')](_0x93f9('0x11'))[_0x93f9('0x12')](_0x93f9('0x13'))]}},'attributes':[_0x93f9('0x15'),_0x93f9('0x16'),'duration',_0x93f9('0x17')]},'log':_0x93f9('0x18')});};};
\ No newline at end of file
+var _0x32a9=['GetVoiceCallReports','util','lodash','../client','create','CreateVoiceCallReport','merge','calleridnum','exten','xcally-motion-dialer','connectedlinenum','destination','context','format','\x22%s\x22\x20<%s>','calleridname','Request','GetVoiceCallReport','outbound','day','YYYY-MM-DD\x20HH:mm:ss','endOf','type','duration','billableseconds'];(function(_0x155c64,_0x26ff95){var _0x1f154a=function(_0xbc46e4){while(--_0xbc46e4){_0x155c64['push'](_0x155c64['shift']());}};_0x1f154a(++_0x26ff95);}(_0x32a9,0x178));var _0x932a=function(_0x239bb8,_0x3f02af){_0x239bb8=_0x239bb8-0x0;var _0x3a895c=_0x32a9[_0x239bb8];return _0x3a895c;};'use strict';var moment=require('moment');var util=require(_0x932a('0x0'));var _=require(_0x932a('0x1'));var client=require(_0x932a('0x2'));exports[_0x932a('0x3')]=function(_0x55696a){return client['Request'](_0x932a('0x4'),{'body':_[_0x932a('0x5')](_0x55696a,{'source':_0x55696a[_0x932a('0x6')],'destination':_0x55696a[_0x932a('0x7')]===_0x932a('0x8')?_0x55696a[_0x932a('0x9')]:_0x55696a[_0x932a('0xa')]||_0x55696a['exten'],'destinationcontext':_0x55696a[_0x932a('0xb')],'callerid':util[_0x932a('0xc')](_0x932a('0xd'),_0x55696a[_0x932a('0xe')],_0x55696a['calleridnum']),'amaflags':'DOCUMENTATION'}),'log':_0x932a('0x4')});};exports['getVoiceCallReports']=function(){return function(){return client[_0x932a('0xf')](_0x932a('0x10'),{'options':{'where':{'type':[_0x932a('0x11')],'createdAt':{'$between':[moment()['startOf'](_0x932a('0x12'))[_0x932a('0xc')](_0x932a('0x13')),moment()[_0x932a('0x14')]('day')[_0x932a('0xc')](_0x932a('0x13'))]}},'attributes':[_0x932a('0x15'),'disposition',_0x932a('0x16'),_0x932a('0x17')]},'log':_0x932a('0x18')});};};
\ No newline at end of file
index 50f9b15..4ef4d3e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x92c5=['../client','create','Request','CreateVoiceDialReport'];(function(_0x5d5fb9,_0x459847){var _0x28dc97=function(_0x5a42f9){while(--_0x5a42f9){_0x5d5fb9['push'](_0x5d5fb9['shift']());}};_0x28dc97(++_0x459847);}(_0x92c5,0x64));var _0x592c=function(_0x535e26,_0x508ae0){_0x535e26=_0x535e26-0x0;var _0x2d526b=_0x92c5[_0x535e26];return _0x2d526b;};'use strict';var client=require(_0x592c('0x0'));exports[_0x592c('0x1')]=function(_0x3a9c4e){return client[_0x592c('0x2')](_0x592c('0x3'),{'body':_0x3a9c4e,'log':'CreateVoiceDialReport'});};
\ No newline at end of file
+var _0x6ba9=['CreateVoiceDialReport','../client','create','Request'];(function(_0x266618,_0x18f637){var _0x54dbf5=function(_0x1f7985){while(--_0x1f7985){_0x266618['push'](_0x266618['shift']());}};_0x54dbf5(++_0x18f637);}(_0x6ba9,0xa5));var _0x96ba=function(_0x5a15a6,_0x4446b2){_0x5a15a6=_0x5a15a6-0x0;var _0x2b6bb5=_0x6ba9[_0x5a15a6];return _0x2b6bb5;};'use strict';var client=require(_0x96ba('0x0'));exports[_0x96ba('0x1')]=function(_0x38bfef){return client[_0x96ba('0x2')](_0x96ba('0x3'),{'body':_0x38bfef,'log':_0x96ba('0x3')});};
\ No newline at end of file
index 7a12902..3826451 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc435=['exten','recordingFormat','getVoiceExtensions','Request','GetVoiceExtension'];(function(_0x419e17,_0x7fe78c){var _0x1f2044=function(_0x3723e6){while(--_0x3723e6){_0x419e17['push'](_0x419e17['shift']());}};_0x1f2044(++_0x7fe78c);}(_0xc435,0xf2));var _0x5c43=function(_0xe84ae1,_0x4b0826){_0xe84ae1=_0xe84ae1-0x0;var _0xf2a42b=_0xc435[_0xe84ae1];return _0xf2a42b;};'use strict';var client=require('../client');exports[_0x5c43('0x0')]=function(){return function(){return client[_0x5c43('0x1')](_0x5c43('0x2'),{'options':{'raw':!![],'attributes':['id',_0x5c43('0x3'),_0x5c43('0x4')],'where':{'VoiceExtensionId':null}},'log':_0x5c43('0x0')});};};
\ No newline at end of file
+var _0xfa64=['../client','getVoiceExtensions','Request','GetVoiceExtension','exten','recordingFormat'];(function(_0x47a7d0,_0x4e182d){var _0xb9bd08=function(_0x588ee2){while(--_0x588ee2){_0x47a7d0['push'](_0x47a7d0['shift']());}};_0xb9bd08(++_0x4e182d);}(_0xfa64,0x9c));var _0x4fa6=function(_0xa102e7,_0x550d2b){_0xa102e7=_0xa102e7-0x0;var _0x2a1de6=_0xfa64[_0xa102e7];return _0x2a1de6;};'use strict';var client=require(_0x4fa6('0x0'));exports[_0x4fa6('0x1')]=function(){return function(){return client[_0x4fa6('0x2')](_0x4fa6('0x3'),{'options':{'raw':!![],'attributes':['id',_0x4fa6('0x4'),_0x4fa6('0x5')],'where':{'VoiceExtensionId':null}},'log':_0x4fa6('0x1')});};};
\ No newline at end of file
index 5bd4d0d..29821c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcae2=['dialPredictiveOptimization','dialPredictiveOptimizationPercentage','dialPredictiveInterval','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerRetryFrequency','dialTimezone','dialGlobalInterval','dialPrefix','dialCheckDuplicateType','dialAMDActive','dialAMDInitialSilence','dialAMDAfterGreetingSilence','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDSilenceThreshold','dialAMDMaximumWordLength','timeout','dialRecallMeTimeout','dialOrderByScheduledAt','dialAgiAfterHangupAgent','dialQueueProject2','strategy','dialRandomLastDigitCallerIdNumber','dialCutDigit','Trunk','TrunkBackup','callerid','active','Interval','Intervals','../client','getVoiceQueues','Request','GetVoiceQueue','name','acw','acwTimeout','monitor_format','type','dialActive','dialMethod','dialLimitQueue','dialPowerLevel'];(function(_0x2c0300,_0x150787){var _0x146fe6=function(_0x2d76c0){while(--_0x2d76c0){_0x2c0300['push'](_0x2c0300['shift']());}};_0x146fe6(++_0x150787);}(_0xcae2,0x143));var _0x2cae=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xcae2[_0x3dd15e];return _0x231fd0;};'use strict';var client=require(_0x2cae('0x0'));exports[_0x2cae('0x1')]=function(){return function(){return client[_0x2cae('0x2')](_0x2cae('0x3'),{'options':{'raw':![],'attributes':['id',_0x2cae('0x4'),_0x2cae('0x5'),_0x2cae('0x6'),'autopause',_0x2cae('0x7'),_0x2cae('0x8'),_0x2cae('0x9'),_0x2cae('0xa'),'dialLimitChannel',_0x2cae('0xb'),_0x2cae('0xc'),_0x2cae('0xd'),_0x2cae('0xe'),_0x2cae('0xf'),'dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueOptions',_0x2cae('0x10'),_0x2cae('0x11'),_0x2cae('0x12'),_0x2cae('0x13'),_0x2cae('0x14'),_0x2cae('0x15'),'dialNoAnswerMaxRetry',_0x2cae('0x16'),'dialGlobalMaxRetry',_0x2cae('0x17'),_0x2cae('0x18'),_0x2cae('0x19'),_0x2cae('0x1a'),_0x2cae('0x1b'),_0x2cae('0x1c'),'dialAMDGreeting',_0x2cae('0x1d'),'dialAMDTotalAnalysisTime',_0x2cae('0x1e'),_0x2cae('0x1f'),'dialAMDMaximumNumberOfWords',_0x2cae('0x20'),_0x2cae('0x21'),_0x2cae('0x22'),_0x2cae('0x23'),'dialRecallInQueue',_0x2cae('0x24'),_0x2cae('0x25'),'dialAgiAfterHangupClient',_0x2cae('0x26'),_0x2cae('0x7'),_0x2cae('0x27'),_0x2cae('0x28'),_0x2cae('0x29')],'include':[{'model':_0x2cae('0x2a'),'as':_0x2cae('0x2a'),'attributes':['id',_0x2cae('0x4'),'callerid','active']},{'model':_0x2cae('0x2a'),'as':_0x2cae('0x2b'),'attributes':['id',_0x2cae('0x4'),_0x2cae('0x2c'),_0x2cae('0x2d')]},{'model':_0x2cae('0x2e'),'as':_0x2cae('0x2e'),'attributes':['id','name'],'include':[{'model':'Interval','as':_0x2cae('0x2f'),'attributes':['id',_0x2cae('0x4'),'interval']}]}]},'log':'getVoiceQueues'});};};
\ No newline at end of file
+var _0xe027=['dialOriginateTimeout','dialQueueOptions','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyRetryFrequency','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialGlobalInterval','dialPrefix','dialCheckDuplicateType','dialAMDActive','dialAMDGreeting','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','dialOrderByScheduledAt','dialAgiAfterHangupClient','dialQueueProject2','strategy','dialCutDigit','Trunk','callerid','active','TrunkBackup','Interval','interval','../client','getVoiceQueues','Request','GetVoiceQueue','name','acw','acwTimeout','autopause','monitor_format','type','dialActive','dialLimitQueue','dialPredictiveOptimization','dialOriginateCallerIdName'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xe027,0x106));var _0x7e02=function(_0x2a3fba,_0x20b39a){_0x2a3fba=_0x2a3fba-0x0;var _0x5e1507=_0xe027[_0x2a3fba];return _0x5e1507;};'use strict';var client=require(_0x7e02('0x0'));exports[_0x7e02('0x1')]=function(){return function(){return client[_0x7e02('0x2')](_0x7e02('0x3'),{'options':{'raw':![],'attributes':['id',_0x7e02('0x4'),_0x7e02('0x5'),_0x7e02('0x6'),_0x7e02('0x7'),_0x7e02('0x8'),_0x7e02('0x9'),_0x7e02('0xa'),'dialMethod','dialLimitChannel',_0x7e02('0xb'),'dialPowerLevel',_0x7e02('0xc'),'dialPredictiveOptimizationPercentage','dialPredictiveInterval',_0x7e02('0xd'),'dialOriginateCallerIdNumber',_0x7e02('0xe'),_0x7e02('0xf'),_0x7e02('0x10'),_0x7e02('0x11'),_0x7e02('0x12'),_0x7e02('0x13'),'dialBusyMaxRetry',_0x7e02('0x14'),'dialNoAnswerMaxRetry',_0x7e02('0x15'),_0x7e02('0x16'),_0x7e02('0x17'),_0x7e02('0x18'),_0x7e02('0x19'),_0x7e02('0x1a'),_0x7e02('0x1b'),'dialAMDInitialSilence',_0x7e02('0x1c'),'dialAMDAfterGreetingSilence',_0x7e02('0x1d'),_0x7e02('0x1e'),_0x7e02('0x1f'),_0x7e02('0x20'),_0x7e02('0x21'),_0x7e02('0x22'),'timeout','dialRecallMeTimeout','dialRecallInQueue',_0x7e02('0x23'),'dialAgiAfterHangupAgent',_0x7e02('0x24'),_0x7e02('0x25'),_0x7e02('0x8'),_0x7e02('0x26'),'dialRandomLastDigitCallerIdNumber',_0x7e02('0x27')],'include':[{'model':_0x7e02('0x28'),'as':'Trunk','attributes':['id',_0x7e02('0x4'),_0x7e02('0x29'),_0x7e02('0x2a')]},{'model':_0x7e02('0x28'),'as':_0x7e02('0x2b'),'attributes':['id',_0x7e02('0x4'),'callerid',_0x7e02('0x2a')]},{'model':_0x7e02('0x2c'),'as':'Interval','attributes':['id',_0x7e02('0x4')],'include':[{'model':_0x7e02('0x2c'),'as':'Intervals','attributes':['id',_0x7e02('0x4'),_0x7e02('0x2d')]}]}]},'log':'getVoiceQueues'});};};
\ No newline at end of file
index e122f0f..3bd1478 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb237=['create','Request','CreateVoiceQueueReport','startOf','day','endOf','format','YYYY-MM-DD\x20HH:mm:ss','queue','queuecallerjoinAt','queuecallerleaveAt','queuecallercompleteAt','queuecallerexit','queuecallerexitAt','queuecallerabandon','queuecallerabandonAt','GetVoiceQueueReports','moment','../client'];(function(_0x6f6ccc,_0x3406f8){var _0x5a8c6d=function(_0x200569){while(--_0x200569){_0x6f6ccc['push'](_0x6f6ccc['shift']());}};_0x5a8c6d(++_0x3406f8);}(_0xb237,0xa9));var _0x7b23=function(_0x363cd3,_0x2917c4){_0x363cd3=_0x363cd3-0x0;var _0x4cf7d1=_0xb237[_0x363cd3];return _0x4cf7d1;};'use strict';var moment=require(_0x7b23('0x0'));var _=require('lodash');var client=require(_0x7b23('0x1'));exports[_0x7b23('0x2')]=function(_0x3fe274){return client[_0x7b23('0x3')](_0x7b23('0x4'),{'body':_0x3fe274,'log':'CreateVoiceQueueReport'});};exports['getVoiceQueueReports']=function(){return function(){return client[_0x7b23('0x3')]('GetVoiceQueueReport',{'options':{'where':{'createdAt':{'$between':[moment()[_0x7b23('0x5')](_0x7b23('0x6'))['format']('YYYY-MM-DD\x20HH:mm:ss'),moment()[_0x7b23('0x7')](_0x7b23('0x6'))[_0x7b23('0x8')](_0x7b23('0x9'))]}},'attributes':['uniqueid',_0x7b23('0xa'),_0x7b23('0xb'),_0x7b23('0xc'),'queuecallercomplete',_0x7b23('0xd'),_0x7b23('0xe'),_0x7b23('0xf'),_0x7b23('0x10'),_0x7b23('0x11')]},'log':_0x7b23('0x12')});};};
\ No newline at end of file
+var _0x76d0=['queue','queuecallerjoinAt','queuecallerleaveAt','queuecallercomplete','queuecallercompleteAt','queuecallerexitAt','queuecallerabandon','queuecallerabandonAt','GetVoiceQueueReports','../client','create','Request','CreateVoiceQueueReport','getVoiceQueueReports','GetVoiceQueueReport','day','format','YYYY-MM-DD\x20HH:mm:ss','endOf','uniqueid'];(function(_0x609988,_0x507944){var _0x159984=function(_0x39d9ce){while(--_0x39d9ce){_0x609988['push'](_0x609988['shift']());}};_0x159984(++_0x507944);}(_0x76d0,0x135));var _0x076d=function(_0x1859a9,_0x37f1d0){_0x1859a9=_0x1859a9-0x0;var _0xb0c4c=_0x76d0[_0x1859a9];return _0xb0c4c;};'use strict';var moment=require('moment');var _=require('lodash');var client=require(_0x076d('0x0'));exports[_0x076d('0x1')]=function(_0x1670eb){return client[_0x076d('0x2')](_0x076d('0x3'),{'body':_0x1670eb,'log':_0x076d('0x3')});};exports[_0x076d('0x4')]=function(){return function(){return client[_0x076d('0x2')](_0x076d('0x5'),{'options':{'where':{'createdAt':{'$between':[moment()['startOf'](_0x076d('0x6'))[_0x076d('0x7')](_0x076d('0x8')),moment()[_0x076d('0x9')](_0x076d('0x6'))['format']('YYYY-MM-DD\x20HH:mm:ss')]}},'attributes':[_0x076d('0xa'),_0x076d('0xb'),_0x076d('0xc'),_0x076d('0xd'),_0x076d('0xe'),_0x076d('0xf'),'queuecallerexit',_0x076d('0x10'),_0x076d('0x11'),_0x076d('0x12')]},'log':_0x076d('0x13')});};};
\ No newline at end of file
index b4e8b32..4cd1e97 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5bd0=['Request','../client','getVoiceQueueRtPauses'];(function(_0x45081a,_0x3ae384){var _0x55bfe2=function(_0xdb8714){while(--_0xdb8714){_0x45081a['push'](_0x45081a['shift']());}};_0x55bfe2(++_0x3ae384);}(_0x5bd0,0x175));var _0x05bd=function(_0x44bcb0,_0x235aa9){_0x44bcb0=_0x44bcb0-0x0;var _0xfaf881=_0x5bd0[_0x44bcb0];return _0xfaf881;};'use strict';var client=require(_0x05bd('0x0'));exports[_0x05bd('0x1')]=function(_0x1ec1c7){return function(){return client[_0x05bd('0x2')]('GetVoiceQueueRtPauses',{'options':{'where':{'VoiceQueueId':_0x1ec1c7,'paused':!![]},'raw':!![]},'log':_0x05bd('0x1')});};};
\ No newline at end of file
+var _0xb2de=['../client','getVoiceQueueRtPauses','Request','GetVoiceQueueRtPauses'];(function(_0x21205e,_0x7eb8e7){var _0x136ebb=function(_0x54aac2){while(--_0x54aac2){_0x21205e['push'](_0x21205e['shift']());}};_0x136ebb(++_0x7eb8e7);}(_0xb2de,0xc8));var _0xeb2d=function(_0x127cad,_0x157b80){_0x127cad=_0x127cad-0x0;var _0x53ad3f=_0xb2de[_0x127cad];return _0x53ad3f;};'use strict';var client=require(_0xeb2d('0x0'));exports[_0xeb2d('0x1')]=function(_0x254ade){return function(){return client[_0xeb2d('0x2')](_0xeb2d('0x3'),{'options':{'where':{'VoiceQueueId':_0x254ade,'paused':!![]},'raw':!![]},'log':_0xeb2d('0x1')});};};
\ No newline at end of file
index 4511c78..b91037f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa034=['Request','CreateVoiceRecording','../client'];(function(_0x128f96,_0x54a8d5){var _0x5f349e=function(_0x28ee56){while(--_0x28ee56){_0x128f96['push'](_0x128f96['shift']());}};_0x5f349e(++_0x54a8d5);}(_0xa034,0x89));var _0x4a03=function(_0x7a567f,_0x3dbcdd){_0x7a567f=_0x7a567f-0x0;var _0x281342=_0xa034[_0x7a567f];return _0x281342;};'use strict';var _=require('lodash');var client=require(_0x4a03('0x0'));exports['create']=function(_0x308c58){return client[_0x4a03('0x1')](_0x4a03('0x2'),{'body':_['merge'](_0x308c58,{'value':_0x308c58['monitorFilename']}),'log':_0x4a03('0x2')});};
\ No newline at end of file
+var _0xb52f=['Request','CreateVoiceRecording','merge','monitorFilename','lodash','../client','create'];(function(_0x29b174,_0x59c1a2){var _0x1e171f=function(_0x56e286){while(--_0x56e286){_0x29b174['push'](_0x29b174['shift']());}};_0x1e171f(++_0x59c1a2);}(_0xb52f,0xc1));var _0xfb52=function(_0x203293,_0x4ef7ca){_0x203293=_0x203293-0x0;var _0x16cde6=_0xb52f[_0x203293];return _0x16cde6;};'use strict';var _=require(_0xfb52('0x0'));var client=require(_0xfb52('0x1'));exports[_0xfb52('0x2')]=function(_0x180f73){return client[_0xfb52('0x3')](_0xfb52('0x4'),{'body':_[_0xfb52('0x5')](_0x180f73,{'value':_0x180f73[_0xfb52('0x6')]}),'log':'CreateVoiceRecording'});};
\ No newline at end of file
index c3553e8..178bb9c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6442=['transfertargetconnectedlinenum','transfertargetconnectedlinename','transfertargetaccountcode','transfertargetcontext','transfertargetexten','transfertargetlinkedid','origtransferercontext','attended','../client','Request','CreateVoiceTransferReport','transfererchannel','transferercalleridnum','transferercalleridname','transfererconnectedlinenum','transfereraccountcode','transferercontext','transfererexten','transfereechannel','transfereecalleridnum','transfereecalleridname','transfereeconnectedlinenum','transfereeconnectedlinename','transfereecontext','isexternal','extension','result','origtransfererchannel','origtransferercalleridnum','origtransferercalleridname','secondtransfererconnectedlinenum','origtransfereraccountcode','secondtransferercontext','secondtransfererexten','origtransfererlinkedid','transfertargetchannel','transfertargetcalleridnum','transfertargetcalleridname'];(function(_0x3a3b19,_0x3f3b87){var _0x4ba1c2=function(_0x22a255){while(--_0x22a255){_0x3a3b19['push'](_0x3a3b19['shift']());}};_0x4ba1c2(++_0x3f3b87);}(_0x6442,0x7a));var _0x2644=function(_0x62c286,_0x8afc5f){_0x62c286=_0x62c286-0x0;var _0x446c09=_0x6442[_0x62c286];return _0x446c09;};'use strict';var client=require(_0x2644('0x0'));exports['blindTransfer']=function(_0x233a53){return client[_0x2644('0x1')](_0x2644('0x2'),{'body':{'result':_0x233a53['result'],'transfererchannel':_0x233a53[_0x2644('0x3')],'transferercalleridnum':_0x233a53[_0x2644('0x4')],'transferercalleridname':_0x233a53[_0x2644('0x5')],'transfererconnectedlinenum':_0x233a53[_0x2644('0x6')],'transfererconnectedlinename':_0x233a53['transfererconnectedlinename'],'transfereraccountcode':_0x233a53[_0x2644('0x7')],'transferercontext':_0x233a53[_0x2644('0x8')],'transfererexten':_0x233a53[_0x2644('0x9')],'transfererlinkedid':_0x233a53['transfererlinkedid'],'transfereechannel':_0x233a53[_0x2644('0xa')],'transfereecalleridnum':_0x233a53[_0x2644('0xb')],'transfereecalleridname':_0x233a53[_0x2644('0xc')],'transfereeconnectedlinenum':_0x233a53[_0x2644('0xd')],'transfereeconnectedlinename':_0x233a53[_0x2644('0xe')],'transfereeaccountcode':_0x233a53['transfereeaccountcode'],'transfereecontext':_0x233a53[_0x2644('0xf')],'transfereeexten':_0x233a53['transfereeexten'],'transfereelinkedid':_0x233a53['transfereelinkedid'],'isexternal':_0x233a53[_0x2644('0x10')],'context':_0x233a53['context'],'extension':_0x233a53[_0x2644('0x11')],'type':'blind'},'log':'CreateVoiceTransferReport'});};exports['attendedTransfer']=function(_0x48063c){return client['Request']('CreateVoiceTransferReport',{'body':{'result':_0x48063c[_0x2644('0x12')],'transfererchannel':_0x48063c[_0x2644('0x13')],'transferercalleridnum':_0x48063c[_0x2644('0x14')],'transferercalleridname':_0x48063c[_0x2644('0x15')],'transfererconnectedlinenum':_0x48063c[_0x2644('0x16')],'transfererconnectedlinename':_0x48063c['secondtransfererconnectedlinename'],'transfereraccountcode':_0x48063c[_0x2644('0x17')],'transferercontext':_0x48063c[_0x2644('0x18')],'transfererexten':_0x48063c[_0x2644('0x19')],'transfererlinkedid':_0x48063c[_0x2644('0x1a')],'transfereechannel':_0x48063c[_0x2644('0x1b')],'transfereecalleridnum':_0x48063c[_0x2644('0x1c')],'transfereecalleridname':_0x48063c[_0x2644('0x1d')],'transfereeconnectedlinenum':_0x48063c[_0x2644('0x1e')],'transfereeconnectedlinename':_0x48063c[_0x2644('0x1f')],'transfereeaccountcode':_0x48063c[_0x2644('0x20')],'transfereecontext':_0x48063c[_0x2644('0x21')],'transfereeexten':_0x48063c[_0x2644('0x22')],'transfereelinkedid':_0x48063c[_0x2644('0x23')],'isexternal':_0x48063c[_0x2644('0x10')],'context':_0x48063c[_0x2644('0x24')],'extension':_0x48063c['origtransfererexten'],'type':_0x2644('0x25')},'log':_0x2644('0x2')});};
\ No newline at end of file
+var _0x0c54=['transfereeconnectedlinename','transfereeaccountcode','transfereecontext','transfereeexten','transfereelinkedid','isexternal','context','blind','origtransfererchannel','origtransferercalleridnum','origtransferercalleridname','secondtransfererconnectedlinename','origtransfereraccountcode','secondtransfererexten','origtransfererlinkedid','transfertargetchannel','transfertargetcalleridnum','transfertargetcalleridname','transfertargetconnectedlinename','transfertargetaccountcode','transfertargetcontext','transfertargetexten','transfertargetlinkedid','origtransferercontext','../client','blindTransfer','Request','CreateVoiceTransferReport','result','transferercalleridnum','transferercalleridname','transfererconnectedlinenum','transfererconnectedlinename','transferercontext','transfererexten','transfereechannel','transfereecalleridnum','transfereecalleridname','transfereeconnectedlinenum'];(function(_0x2e4e19,_0x493b50){var _0x9ba20b=function(_0x2f6456){while(--_0x2f6456){_0x2e4e19['push'](_0x2e4e19['shift']());}};_0x9ba20b(++_0x493b50);}(_0x0c54,0xb4));var _0x40c5=function(_0x3a8dc1,_0x2f03b8){_0x3a8dc1=_0x3a8dc1-0x0;var _0x4b3595=_0x0c54[_0x3a8dc1];return _0x4b3595;};'use strict';var client=require(_0x40c5('0x0'));exports[_0x40c5('0x1')]=function(_0x14565b){return client[_0x40c5('0x2')](_0x40c5('0x3'),{'body':{'result':_0x14565b[_0x40c5('0x4')],'transfererchannel':_0x14565b['transfererchannel'],'transferercalleridnum':_0x14565b[_0x40c5('0x5')],'transferercalleridname':_0x14565b[_0x40c5('0x6')],'transfererconnectedlinenum':_0x14565b[_0x40c5('0x7')],'transfererconnectedlinename':_0x14565b[_0x40c5('0x8')],'transfereraccountcode':_0x14565b['transfereraccountcode'],'transferercontext':_0x14565b[_0x40c5('0x9')],'transfererexten':_0x14565b[_0x40c5('0xa')],'transfererlinkedid':_0x14565b['transfererlinkedid'],'transfereechannel':_0x14565b[_0x40c5('0xb')],'transfereecalleridnum':_0x14565b[_0x40c5('0xc')],'transfereecalleridname':_0x14565b[_0x40c5('0xd')],'transfereeconnectedlinenum':_0x14565b[_0x40c5('0xe')],'transfereeconnectedlinename':_0x14565b[_0x40c5('0xf')],'transfereeaccountcode':_0x14565b[_0x40c5('0x10')],'transfereecontext':_0x14565b[_0x40c5('0x11')],'transfereeexten':_0x14565b[_0x40c5('0x12')],'transfereelinkedid':_0x14565b[_0x40c5('0x13')],'isexternal':_0x14565b[_0x40c5('0x14')],'context':_0x14565b[_0x40c5('0x15')],'extension':_0x14565b['extension'],'type':_0x40c5('0x16')},'log':_0x40c5('0x3')});};exports['attendedTransfer']=function(_0x3ff53f){return client['Request'](_0x40c5('0x3'),{'body':{'result':_0x3ff53f[_0x40c5('0x4')],'transfererchannel':_0x3ff53f[_0x40c5('0x17')],'transferercalleridnum':_0x3ff53f[_0x40c5('0x18')],'transferercalleridname':_0x3ff53f[_0x40c5('0x19')],'transfererconnectedlinenum':_0x3ff53f['secondtransfererconnectedlinenum'],'transfererconnectedlinename':_0x3ff53f[_0x40c5('0x1a')],'transfereraccountcode':_0x3ff53f[_0x40c5('0x1b')],'transferercontext':_0x3ff53f['secondtransferercontext'],'transfererexten':_0x3ff53f[_0x40c5('0x1c')],'transfererlinkedid':_0x3ff53f[_0x40c5('0x1d')],'transfereechannel':_0x3ff53f[_0x40c5('0x1e')],'transfereecalleridnum':_0x3ff53f[_0x40c5('0x1f')],'transfereecalleridname':_0x3ff53f[_0x40c5('0x20')],'transfereeconnectedlinenum':_0x3ff53f['transfertargetconnectedlinenum'],'transfereeconnectedlinename':_0x3ff53f[_0x40c5('0x21')],'transfereeaccountcode':_0x3ff53f[_0x40c5('0x22')],'transfereecontext':_0x3ff53f[_0x40c5('0x23')],'transfereeexten':_0x3ff53f[_0x40c5('0x24')],'transfereelinkedid':_0x3ff53f[_0x40c5('0x25')],'isexternal':_0x3ff53f['isexternal'],'context':_0x3ff53f[_0x40c5('0x26')],'extension':_0x3ff53f['origtransfererexten'],'type':'attended'},'log':_0x40c5('0x3')});};
\ No newline at end of file
index c7f7a8b..5ac7138 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x814b=['MixMonitor\x20Success','Channel\x20doesn\x27t\x20exist','StopMixMonitor','destinationchannel','stop','StopMixMonitor\x20Success','values','voicequeuechannel','queueChannels','Hangup','voicequeuechannelredirect','Redirect','exten','context','telephones','trunks','outboundChannels','run','event','emit','faxAccounts','send','checkAfterSend','server','http','127.0.0.1','AMI\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','lodash','util','jayson/promise','validate','bluebird','moment','../properties','../ami','listen','format','%s/%s','SIP','name','timers','timer','updateAcw','agents','updateStatusRealtime','pause','QueuePause','isConnected','error','asterisk','username','ami\x20disconnected','join','pick','keys','module','action','Reload','Action','catch','command','Command','then','content','message','voiceQueues','hasOwnProperty','strategy','available','loggedIn','sumBillable','sumDuration','sumHoldTime','total','type','waiting','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalLowerLimit','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalTotalCalls','originated','Trunk','Interval','push','length','channels','voicechannel','map','find','uniqueid','%s.%s','filename','wav','MixMonitor','channel','monitors','/var/spool/asterisk/monitor/','toLowerCase','isNil','YYYY-MM-DD\x20HH:mm:ss','rec','mixmonitorid','status'];(function(_0x164028,_0x296c48){var _0xbd8728=function(_0x7d9d98){while(--_0x7d9d98){_0x164028['push'](_0x164028['shift']());}};_0xbd8728(++_0x296c48);}(_0x814b,0x1a2));var _0xb814=function(_0x55cdc5,_0x2b2297){_0x55cdc5=_0x55cdc5-0x0;var _0x29acd5=_0x814b[_0x55cdc5];return _0x29acd5;};'use strict';var _=require(_0xb814('0x0'));var util=require(_0xb814('0x1'));var jayson=require(_0xb814('0x2'));var schema=require(_0xb814('0x3'));var BPromise=require(_0xb814('0x4'));var moment=require(_0xb814('0x5'));var config=require('../../../config/environment');var properties=require(_0xb814('0x6'));var ami=require(_0xb814('0x7'));exports[_0xb814('0x8')]=function(_0x4237bc,_0x44931c,_0x322a70){return new BPromise(function(_0x53e507,_0x3b0829){var _0x2e6272={'QueuePause':function(_0x5c8539){return new Promise(function(_0x271af9,_0x2913a6){var _0x186d5a=util[_0xb814('0x9')](_0xb814('0xa'),_0xb814('0xb'),_0x5c8539[_0xb814('0xc')]);if(_0x4237bc[_0xb814('0xd')]&&_0x4237bc[_0xb814('0xd')][_0x186d5a]&&_0x4237bc[_0xb814('0xd')][_0x186d5a][_0xb814('0xe')]){_0x4237bc['timers'][_0x186d5a][_0xb814('0xf')]();}if(_0x4237bc['agents'][_0x186d5a]){_0x4237bc[_0xb814('0x10')][_0x186d5a][_0xb814('0x11')]({'statePause':_0x5c8539[_0xb814('0x12')]?!![]:![]});}_0x271af9({'code':0xc8,'message':_0xb814('0x13')});});},'Reload':function(_0x2ce718){var _0x3bde14=this;return new Promise(function(_0x1438e7,_0x41ed7b){if(ami[_0xb814('0x14')]()==![]){return _0x41ed7b(_0x3bde14[_0xb814('0x15')](0x1f4,[config[_0xb814('0x16')]['ip'],config[_0xb814('0x16')][_0xb814('0x17')],_0xb814('0x18')][_0xb814('0x19')]('\x20')));}_0x2ce718=_[_0xb814('0x1a')](_0x2ce718,_[_0xb814('0x1b')](properties[_0xb814('0x1c')]));_0x2ce718[_0xb814('0x1d')]=_0xb814('0x1e');return ami[_0xb814('0x1f')](_0x2ce718)['then'](function(_0x168a48){_0x1438e7({'code':0xc8,'message':_0x168a48['message']});})[_0xb814('0x20')](function(_0xfac75b){_0x41ed7b(_0x3bde14['error'](0x1f5,_0xfac75b['message']));});});},'Command':function(_0x55d63c){var _0x399b43=this;return new Promise(function(_0x4d5276,_0x57c128){if(ami[_0xb814('0x14')]()==![]){return _0x57c128(_0x399b43[_0xb814('0x15')](0x1f4,[config[_0xb814('0x16')]['ip'],config['asterisk'][_0xb814('0x17')],'ami\x20disconnected'][_0xb814('0x19')]('\x20')));}_0x55d63c=_[_0xb814('0x1a')](_0x55d63c,_0xb814('0x21'));_0x55d63c[_0xb814('0x1d')]=_0xb814('0x22');return ami[_0xb814('0x1f')](_0x55d63c)[_0xb814('0x23')](function(_0x594470){_0x4d5276({'code':0xc8,'message':_0x594470[_0xb814('0x24')]});})['catch'](function(_0x3f81d0){_0x57c128(_0x399b43[_0xb814('0x15')](0x1f5,_0x3f81d0[_0xb814('0x25')]));});});},'VoiceQueues':function(_0x208927){return new Promise(function(_0x1c8a2e,_0xb9e57d){var _0x3d836c=[];for(var _0x5755ea in _0x4237bc[_0xb814('0x26')]){if(_0x4237bc[_0xb814('0x26')][_0xb814('0x27')](_0x5755ea)){var _0x349394=_0x4237bc[_0xb814('0x26')][_0x5755ea];var _0x1d5965={'id':_0x349394['id'],'name':_0x349394[_0xb814('0xc')],'strategy':_0x349394[_0xb814('0x28')],'answered':_0x349394['answered'],'available':_0x349394[_0xb814('0x29')],'loggedIn':_0x349394[_0xb814('0x2a')],'pTalking':_0x349394['pTalking'],'sumBillable':_0x349394[_0xb814('0x2b')],'sumDuration':_0x349394[_0xb814('0x2c')],'sumHoldTime':_0x349394[_0xb814('0x2d')],'talking':_0x349394['talking'],'total':_0x349394[_0xb814('0x2e')],'type':_0x349394[_0xb814('0x2f')],'unmanaged':_0x349394['unmanaged'],'waiting':_0x349394[_0xb814('0x30')],'loggedInDb':_0x349394['loggedInDb']};if(_0x349394[_0xb814('0x2f')]==='outbound'){_0x1d5965['dialActive']=_0x349394[_0xb814('0x31')];_0x1d5965['dialMethod']=_0x349394[_0xb814('0x32')];_0x1d5965[_0xb814('0x33')]=_0x349394[_0xb814('0x33')];_0x1d5965['dialOriginateCallerIdNumber']=_0x349394['dialOriginateCallerIdNumber'];_0x1d5965[_0xb814('0x34')]=_0x349394[_0xb814('0x34')];_0x1d5965['dialPrefix']=_0x349394[_0xb814('0x35')];_0x1d5965[_0xb814('0x36')]=_0x349394[_0xb814('0x36')];_0x1d5965[_0xb814('0x37')]=_0x349394[_0xb814('0x37')];_0x1d5965[_0xb814('0x38')]=_0x349394[_0xb814('0x38')];_0x1d5965['outboundBusyCallsDay']=_0x349394[_0xb814('0x39')];_0x1d5965[_0xb814('0x3a')]=_0x349394[_0xb814('0x3a')];_0x1d5965[_0xb814('0x3b')]=_0x349394[_0xb814('0x3b')];_0x1d5965['outboundDropCallsDayCallersExit']=_0x349394[_0xb814('0x3c')];_0x1d5965['outboundDropCallsDayTimeout']=_0x349394[_0xb814('0x3d')];_0x1d5965[_0xb814('0x3e')]=_0x349394[_0xb814('0x3e')];_0x1d5965['outboundNoSuchCallsDay']=_0x349394[_0xb814('0x3f')];_0x1d5965[_0xb814('0x40')]=_0x349394['outboundOriginateFailureCallsDay'];_0x1d5965[_0xb814('0x41')]=_0x349394[_0xb814('0x41')];_0x1d5965[_0xb814('0x42')]=_0x349394[_0xb814('0x42')];_0x1d5965[_0xb814('0x43')]=_0x349394[_0xb814('0x43')];_0x1d5965['predictiveIntervalAnsweredCalls']=_0x349394[_0xb814('0x44')];_0x1d5965['predictiveIntervalAvgHoldtime']=_0x349394[_0xb814('0x45')];_0x1d5965['predictiveIntervalAvgTalktime']=_0x349394[_0xb814('0x46')];_0x1d5965['predictiveIntervalDroppedCallsCallersExit']=_0x349394[_0xb814('0x47')];_0x1d5965[_0xb814('0x48')]=_0x349394['predictiveIntervalDroppedCallsTimeout'];_0x1d5965['predictiveIntervalErlangCalls']=_0x349394['predictiveIntervalErlangCalls'];_0x1d5965['predictiveIntervalErlangCallsDroppedCalls']=_0x349394[_0xb814('0x49')];_0x1d5965[_0xb814('0x4a')]=_0x349394[_0xb814('0x4a')];_0x1d5965[_0xb814('0x4b')]=_0x349394['predictiveIntervalLowerLimit'];_0x1d5965['predictiveIntervalMultiplicativeFactor']=_0x349394[_0xb814('0x4c')];_0x1d5965['predictiveIntervalPauses']=_0x349394[_0xb814('0x4d')];_0x1d5965[_0xb814('0x4e')]=_0x349394[_0xb814('0x4e')];_0x1d5965[_0xb814('0x25')]=_0x349394[_0xb814('0x25')];_0x1d5965[_0xb814('0x4f')]=_0x349394[_0xb814('0x4f')];}if(_0x349394[_0xb814('0x50')]){_0x1d5965[_0xb814('0x50')]={'id':_0x349394['Trunk']['id'],'name':_0x349394['Trunk']['name'],'active':_0x349394[_0xb814('0x50')]['active'],'callerid':_0x349394[_0xb814('0x50')]['callerid']};}if(_0x349394[_0xb814('0x51')]){_0x1d5965[_0xb814('0x51')]={'id':_0x349394[_0xb814('0x51')]['id'],'name':_0x349394[_0xb814('0x51')]['name']};}_0x3d836c[_0xb814('0x52')](_0x1d5965);}}_0x1c8a2e({'count':_0x3d836c[_0xb814('0x53')],'rows':_0x3d836c});});},'VoiceChannels':function(_0x2b23c7){return new Promise(function(_0x22cf27,_0x7d92aa){var _0x450a08=_['values'](_0x4237bc[_0xb814('0x54')]);_0x22cf27({'count':_0x450a08[_0xb814('0x53')],'rows':_0x450a08});});},'VoiceChannelMixMonitor':function(_0x9ffd73){var _0x365f9e=this;return new Promise(function(_0x46408b,_0x144d37){if(ami[_0xb814('0x14')]()==![]){return _0x144d37(_0x365f9e['error'](0x1f4,[config['asterisk']['ip'],config[_0xb814('0x16')][_0xb814('0x17')],_0xb814('0x18')][_0xb814('0x19')]('\x20')));}var _0x43f1b=schema(properties[_0xb814('0x55')])[_0xb814('0x3')](_0x9ffd73);if(_0x43f1b[_0xb814('0x53')]>0x0){return _0x144d37(_0x365f9e[_0xb814('0x15')](0x1f4,_[_0xb814('0x56')](_0x43f1b,_0xb814('0x25'))['join'](',\x20')));}var _0x37800a=_[_0xb814('0x57')](_0x4237bc['channels'],{'uniqueid':_0x9ffd73[_0xb814('0x58')]});if(_0x37800a&&_0x37800a['channel']){var _0x2fb0f7=util[_0xb814('0x9')](_0xb814('0x59'),_0x9ffd73[_0xb814('0x5a')]||_0x9ffd73[_0xb814('0x58')],_0x9ffd73[_0xb814('0x9')]||_0xb814('0x5b'));return ami[_0xb814('0x1f')]({'action':_0xb814('0x5c'),'channel':_0x37800a[_0xb814('0x5d')],'file':_0x2fb0f7,'options':'ai(mixmonitorid)'})['then'](function(_0x32eca6){var _0x30f07b=_[_0xb814('0x57')](_0x37800a[_0xb814('0x5e')],{'filename':_0xb814('0x5f')+_0x2fb0f7[_0xb814('0x60')]()});if(_[_0xb814('0x61')](_0x30f07b)){_0x37800a['monitors'][_0xb814('0x52')]({'filename':_0xb814('0x5f')+_0x2fb0f7[_0xb814('0x60')](),'createdAt':moment()['format'](_0xb814('0x62')),'mixmonitorid':_0x32eca6['mixmonitorid'],'status':_0xb814('0x63')});}else{_0x30f07b['mixmonitorid']=_0x32eca6[_0xb814('0x64')];_0x30f07b[_0xb814('0x65')]='rec';}_0x46408b({'code':0xc8,'message':[_0x9ffd73[_0xb814('0x58')],_0xb814('0x66'),_0x32eca6[_0xb814('0x64')]]['join']('\x20'),'mixmonitorid':_0x32eca6[_0xb814('0x64')]});})['catch'](function(_0x13bdcf){_0x144d37(_0x365f9e[_0xb814('0x15')](0x1f5,[_0x9ffd73['uniqueid'],_0x13bdcf[_0xb814('0x25')]['toLowerCase']()]['join']('\x20')));});}else{return _0x144d37(_0x365f9e[_0xb814('0x15')](0x1f5,_0xb814('0x67')));}});},'VoiceChannelStopMixMonitor':function(_0x34935b){var _0x47a814=this;return new Promise(function(_0x28bbab,_0x538b0f){if(ami[_0xb814('0x14')]()==![]){return _0x538b0f(_0x47a814[_0xb814('0x15')](0x1f4,[config['asterisk']['ip'],config[_0xb814('0x16')]['username'],_0xb814('0x18')][_0xb814('0x19')]('\x20')));}var _0xb2bd82=schema(properties[_0xb814('0x55')])[_0xb814('0x3')](_0x34935b);if(_0xb2bd82[_0xb814('0x53')]>0x0){return _0x538b0f(_0x47a814[_0xb814('0x15')](0x1f4,_[_0xb814('0x56')](_0xb2bd82,'message')[_0xb814('0x19')](',\x20')));}var _0x5441c5=_['find'](_0x4237bc[_0xb814('0x54')],{'uniqueid':_0x34935b[_0xb814('0x58')]});if(_0x5441c5){return BPromise['resolve']()[_0xb814('0x23')](function(){if(_0x5441c5['channel']){return ami['Action']({'action':_0xb814('0x68'),'channel':_0x5441c5['channel'],'mixmonitorid':_0x34935b[_0xb814('0x64')]})[_0xb814('0x20')](function(_0x2dec52){});}})['then'](function(){if(_0x5441c5[_0xb814('0x69')]){return ami['Action']({'action':_0xb814('0x68'),'channel':_0x5441c5[_0xb814('0x69')],'mixmonitorid':_0x34935b[_0xb814('0x64')]})[_0xb814('0x20')](function(_0x19db3e){});}})[_0xb814('0x23')](function(_0x2e5f99){var _0x113350=_[_0xb814('0x57')](_0x5441c5['monitors'],{'mixmonitorid':_0x34935b[_0xb814('0x64')]});if(_0x113350){_0x113350[_0xb814('0x65')]=_0xb814('0x6a');}})[_0xb814('0x23')](function(){var _0x3b35a8=util[_0xb814('0x9')]('%s.%s',_0x34935b[_0xb814('0x5a')]||_0x34935b['uniqueid'],_0x34935b[_0xb814('0x9')]||_0xb814('0x5b'));var _0xac95cf=_['find'](_0x5441c5[_0xb814('0x5e')],{'filename':'/var/spool/asterisk/monitor/'+_0x3b35a8[_0xb814('0x60')]()});if(_0xac95cf){_0xac95cf['status']=_0xb814('0x6a');}})[_0xb814('0x23')](function(){_0x28bbab({'code':0xc8,'message':[_0x34935b[_0xb814('0x58')],_0xb814('0x6b')][_0xb814('0x19')]('\x20')});})[_0xb814('0x20')](function(_0x143518){_0x538b0f(_0x47a814['error'](0x1f5,[_0x34935b[_0xb814('0x58')],_0x143518['message'][_0xb814('0x60')]()][_0xb814('0x19')]('\x20')));});}else{return _0x538b0f(_0x47a814[_0xb814('0x15')](0x1f5,_0xb814('0x67')));}});},'VoiceQueuesChannels':function(_0x19fa45){return new Promise(function(_0x139531,_0x514dab){var _0x12882a=_[_0xb814('0x6c')](_0x4237bc['queueChannels']);_0x139531({'count':_0x12882a[_0xb814('0x53')],'rows':_0x12882a});});},'VoiceQueuesChannel':function(_0x32a37a){var _0x263699=this;return new Promise(function(_0x130033,_0x2161eb){var _0x51d834=schema(properties[_0xb814('0x6d')])['validate'](_0x32a37a);if(_0x51d834[_0xb814('0x53')]>0x0){return _0x2161eb(_0x263699[_0xb814('0x15')](0x1f4,_[_0xb814('0x56')](_0x51d834,_0xb814('0x25'))[_0xb814('0x19')](',\x20')));}var _0x41bcaf=_['find'](_0x4237bc['queueChannels'],{'uniqueid':_0x32a37a['uniqueid']});if(_0x41bcaf){_0x130033(_0x41bcaf);}else{return _0x2161eb(_0x263699[_0xb814('0x15')](0x1f5,'Channel\x20doesn\x27t\x20exist'));}});},'VoiceQueuesChannelHangup':function(_0x45a8b9){var _0x1d3954=this;return new Promise(function(_0x25db89,_0x5e966c){if(ami[_0xb814('0x14')]()==![]){return _0x5e966c(_0x1d3954[_0xb814('0x15')](0x1f4,[config[_0xb814('0x16')]['ip'],config['asterisk'][_0xb814('0x17')],_0xb814('0x18')][_0xb814('0x19')]('\x20')));}var _0x3564e0=schema(properties['voicequeuechannelhangup'])['validate'](_0x45a8b9);if(_0x3564e0[_0xb814('0x53')]>0x0){return _0x5e966c(_0x1d3954[_0xb814('0x15')](0x1f4,_[_0xb814('0x56')](_0x3564e0,_0xb814('0x25'))[_0xb814('0x19')](',\x20')));}var _0xe5fc12=_[_0xb814('0x57')](_0x4237bc[_0xb814('0x6e')],{'uniqueid':_0x45a8b9[_0xb814('0x58')]});if(_0xe5fc12&&_0xe5fc12[_0xb814('0x5d')]){return ami[_0xb814('0x1f')]({'action':_0xb814('0x6f'),'channel':_0xe5fc12[_0xb814('0x5d')]})[_0xb814('0x23')](function(_0xc94e99){_0x25db89({'code':0xc8,'message':[_0x45a8b9['uniqueid'],_0xc94e99[_0xb814('0x25')][_0xb814('0x60')]()][_0xb814('0x19')]('\x20')});})[_0xb814('0x20')](function(_0xec821a){_0x5e966c(_0x1d3954[_0xb814('0x15')](0x1f5,[_0x45a8b9['uniqueid'],_0xec821a[_0xb814('0x25')]['toLowerCase']()][_0xb814('0x19')]('\x20')));});}else{return _0x5e966c(_0x1d3954[_0xb814('0x15')](0x1f5,_0xb814('0x67')));}});},'VoiceQueuesChannelRedirect':function(_0x2292e6){var _0x265a25=this;return new Promise(function(_0x5ce177,_0x4c44ee){if(ami[_0xb814('0x14')]()==![]){return _0x4c44ee(_0x265a25[_0xb814('0x15')](0x1f4,[config[_0xb814('0x16')]['ip'],config[_0xb814('0x16')]['username'],_0xb814('0x18')]['join']('\x20')));}var _0x39073c=schema(properties[_0xb814('0x70')])['validate'](_0x2292e6);if(_0x39073c['length']>0x0){return _0x4c44ee(_0x265a25[_0xb814('0x15')](0x1f4,_['map'](_0x39073c,_0xb814('0x25'))[_0xb814('0x19')](',\x20')));}var _0x3c770d=_[_0xb814('0x57')](_0x4237bc[_0xb814('0x6e')],{'uniqueid':_0x2292e6[_0xb814('0x58')]});if(_0x3c770d&&_0x3c770d[_0xb814('0x5d')]){return ami['Action']({'action':_0xb814('0x71'),'channel':_0x3c770d['channel'],'exten':_0x2292e6[_0xb814('0x72')],'context':_0x2292e6['context']||_0x3c770d[_0xb814('0x73')],'priority':0x1})[_0xb814('0x23')](function(_0x58d56c){_0x5ce177({'code':0xc8,'message':[_0x2292e6[_0xb814('0x58')],_0x58d56c['message'][_0xb814('0x60')]()][_0xb814('0x19')]('\x20')});})['catch'](function(_0x5a0c4a){_0x4c44ee(_0x265a25[_0xb814('0x15')](0x1f5,[_0x2292e6[_0xb814('0x58')],_0x5a0c4a[_0xb814('0x25')][_0xb814('0x60')]()][_0xb814('0x19')]('\x20')));});}else{return _0x4c44ee(_0x265a25[_0xb814('0x15')](0x1f5,_0xb814('0x67')));}});},'Agents':function(_0x314600){return new Promise(function(_0x8cb107,_0x34f49c){var _0x53e705=_['values'](_0x4237bc['agents']);_0x8cb107({'count':_0x53e705['length'],'rows':_0x53e705});});},'Telephones':function(_0x52b6da){return new Promise(function(_0x45a202,_0x75a33){var _0x3d87d2=_['values'](_0x4237bc[_0xb814('0x74')]);_0x45a202({'count':_0x3d87d2[_0xb814('0x53')],'rows':_0x3d87d2});});},'Trunks':function(_0x31c072){return new Promise(function(_0x26ce5b,_0x161658){var _0x35c18e=_[_0xb814('0x6c')](_0x4237bc[_0xb814('0x75')]);_0x26ce5b({'count':_0x35c18e['length'],'rows':_0x35c18e});});},'OutboundChannels':function(_0x20efc3){return new Promise(function(_0x43ec3c,_0x3ef1b5){var _0x30faa0=_['values'](_0x4237bc[_0xb814('0x76')]);_0x43ec3c({'count':_0x30faa0[_0xb814('0x53')],'rows':_0x30faa0});});},'Outbound':function(_0x3f4b23){return new Promise(function(_0x3037f2,_0x2800a1){_0x3037f2(_0x4237bc['outbound']);});},'Campaigns':function(_0x4db6e2){return new Promise(function(_0x252f9c,_0x57b3f2){var _0x15bf14=_[_0xb814('0x6c')](_0x4237bc['campaigns']);_0x252f9c({'count':_0x15bf14[_0xb814('0x53')],'rows':_0x15bf14});});},'VoiceQueuesPreview':function(_0x486495){var _0xe17e86=this;return new Promise(function(_0x520d0f,_0x44e668){_0x44931c[_0xb814('0x77')](_0x486495['id'])[_0xb814('0x23')](function(_0x2c3948){_0x520d0f({'code':0xc8,'message':_0x2c3948[_0xb814('0x25')]});})[_0xb814('0x20')](function(_0x455b22){_0x44e668(_0xe17e86['error'](0x1f4,_0x455b22['message']));});});},'EventManager':function(_0x21aa36){var _0x50ed93=this;return new Promise(function(_0x511e03,_0x2d0061){if(!_0x21aa36[_0xb814('0x78')]){return _0x2d0061(_0x50ed93[_0xb814('0x15')](0x1f4,'Event\x20name\x20mandatory'));}ami[_0xb814('0x79')]('custom:'+_0x21aa36[_0xb814('0x78')],_0x21aa36[_0xb814('0x25')]);_0x511e03({'code':0xc8,'message':_0x21aa36});});},'FaxAccounts':function(_0x14ec54){return new Promise(function(_0x2d2b6c,_0x4c8a00){var _0x1454b3=_[_0xb814('0x6c')](_0x4237bc[_0xb814('0x7a')]);_0x2d2b6c({'count':_0x1454b3['length'],'rows':_0x1454b3});});},'SendFax':function(_0x1ebbf6){var _0x3fc77d=this;return new Promise(function(_0x183b59,_0x56c024){_0x322a70[_0xb814('0x7b')](_0x1ebbf6)[_0xb814('0x23')](function(_0x9dc06b){_0x183b59({'code':0xc8,'message':_0x9dc06b[_0xb814('0x25')]});})[_0xb814('0x20')](function(_0x1ae8e8){_0x56c024(_0x3fc77d[_0xb814('0x15')](0x1f4,_0x1ae8e8[_0xb814('0x25')]));});});},'CheckAfterSend':function(_0x37a8b1){var _0x31d300=this;return new Promise(function(_0x52a6e3,_0x2569a5){_0x322a70[_0xb814('0x7c')](_0x37a8b1)['then'](function(_0x5416dc){_0x52a6e3({'code':0xc8,'message':_0x5416dc[_0xb814('0x25')]});})['catch'](function(_0x320296){_0x2569a5(_0x31d300[_0xb814('0x15')](0x1f4,_0x320296[_0xb814('0x25')]));});});}};var _0x2bc95b=jayson[_0xb814('0x7d')](_0x2e6272)[_0xb814('0x7e')]();_0x2bc95b['on'](_0xb814('0x15'),function(_0x5db5d0){return _0x3b0829(_0x5db5d0);});_0x2bc95b['listen'](0x232a,_0xb814('0x7f'),function(){console['log'](_0xb814('0x80'),0x232a);return _0x53e507(_0xb814('0x81')+0x232a);});});};
\ No newline at end of file
+var _0xc4aa=['Interval','push','length','values','voicechannel','map','channels','channel','uniqueid','wav','MixMonitor','ai(mixmonitorid)','monitors','/var/spool/asterisk/monitor/','toLowerCase','isNil','YYYY-MM-DD\x20HH:mm:ss','rec','mixmonitorid','status','MixMonitor\x20Success','Channel\x20doesn\x27t\x20exist','find','resolve','StopMixMonitor','destinationchannel','stop','%s.%s','filename','StopMixMonitor\x20Success','queueChannels','voicequeuechannel','voicequeuechannelhangup','voicequeuechannelredirect','Redirect','exten','context','telephones','trunks','outboundChannels','campaigns','event','Event\x20name\x20mandatory','emit','custom:','faxAccounts','send','server','http','127.0.0.1','AMI\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','lodash','util','jayson/promise','validate','bluebird','moment','listen','format','%s/%s','name','timers','timer','updateAcw','agents','updateStatusRealtime','pause','isConnected','error','asterisk','username','ami\x20disconnected','join','pick','module','action','Reload','Action','then','message','catch','command','content','voiceQueues','hasOwnProperty','strategy','available','loggedIn','pTalking','sumBillable','sumDuration','total','type','unmanaged','outbound','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalErlangCalls','predictiveIntervalHitRate','predictiveIntervalLowerLimit','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalTotalCalls','originated','Trunk','active','callerid'];(function(_0x117f18,_0x43cb2b){var _0x2d04e6=function(_0x15f1f7){while(--_0x15f1f7){_0x117f18['push'](_0x117f18['shift']());}};_0x2d04e6(++_0x43cb2b);}(_0xc4aa,0x1b7));var _0xac4a=function(_0x17b6e3,_0x4522ed){_0x17b6e3=_0x17b6e3-0x0;var _0x3906f3=_0xc4aa[_0x17b6e3];return _0x3906f3;};'use strict';var _=require(_0xac4a('0x0'));var util=require(_0xac4a('0x1'));var jayson=require(_0xac4a('0x2'));var schema=require(_0xac4a('0x3'));var BPromise=require(_0xac4a('0x4'));var moment=require(_0xac4a('0x5'));var config=require('../../../config/environment');var properties=require('../properties');var ami=require('../ami');exports[_0xac4a('0x6')]=function(_0x15b967,_0x730a38,_0x215f39){return new BPromise(function(_0x96be2b,_0x15cd34){var _0x3ef77c={'QueuePause':function(_0x10525b){return new Promise(function(_0x5c6179,_0x5b8339){var _0x1aba6d=util[_0xac4a('0x7')](_0xac4a('0x8'),'SIP',_0x10525b[_0xac4a('0x9')]);if(_0x15b967[_0xac4a('0xa')]&&_0x15b967[_0xac4a('0xa')][_0x1aba6d]&&_0x15b967['timers'][_0x1aba6d][_0xac4a('0xb')]){_0x15b967['timers'][_0x1aba6d][_0xac4a('0xc')]();}if(_0x15b967['agents'][_0x1aba6d]){_0x15b967[_0xac4a('0xd')][_0x1aba6d][_0xac4a('0xe')]({'statePause':_0x10525b[_0xac4a('0xf')]?!![]:![]});}_0x5c6179({'code':0xc8,'message':'QueuePause'});});},'Reload':function(_0x21a79){var _0x68424a=this;return new Promise(function(_0x247b78,_0x6e00d4){if(ami[_0xac4a('0x10')]()==![]){return _0x6e00d4(_0x68424a[_0xac4a('0x11')](0x1f4,[config[_0xac4a('0x12')]['ip'],config[_0xac4a('0x12')][_0xac4a('0x13')],_0xac4a('0x14')][_0xac4a('0x15')]('\x20')));}_0x21a79=_[_0xac4a('0x16')](_0x21a79,_['keys'](properties[_0xac4a('0x17')]));_0x21a79[_0xac4a('0x18')]=_0xac4a('0x19');return ami[_0xac4a('0x1a')](_0x21a79)[_0xac4a('0x1b')](function(_0x387a54){_0x247b78({'code':0xc8,'message':_0x387a54[_0xac4a('0x1c')]});})[_0xac4a('0x1d')](function(_0x546c5d){_0x6e00d4(_0x68424a['error'](0x1f5,_0x546c5d[_0xac4a('0x1c')]));});});},'Command':function(_0x13c8eb){var _0x39b691=this;return new Promise(function(_0x4d837c,_0x39e83e){if(ami[_0xac4a('0x10')]()==![]){return _0x39e83e(_0x39b691[_0xac4a('0x11')](0x1f4,[config[_0xac4a('0x12')]['ip'],config[_0xac4a('0x12')][_0xac4a('0x13')],_0xac4a('0x14')][_0xac4a('0x15')]('\x20')));}_0x13c8eb=_['pick'](_0x13c8eb,_0xac4a('0x1e'));_0x13c8eb[_0xac4a('0x18')]='Command';return ami[_0xac4a('0x1a')](_0x13c8eb)[_0xac4a('0x1b')](function(_0x3eacd3){_0x4d837c({'code':0xc8,'message':_0x3eacd3[_0xac4a('0x1f')]});})['catch'](function(_0x1b7998){_0x39e83e(_0x39b691[_0xac4a('0x11')](0x1f5,_0x1b7998[_0xac4a('0x1c')]));});});},'VoiceQueues':function(_0x412494){return new Promise(function(_0x594f36,_0x2b0dc2){var _0x222507=[];for(var _0x36054a in _0x15b967[_0xac4a('0x20')]){if(_0x15b967[_0xac4a('0x20')][_0xac4a('0x21')](_0x36054a)){var _0x215a31=_0x15b967[_0xac4a('0x20')][_0x36054a];var _0x472c57={'id':_0x215a31['id'],'name':_0x215a31[_0xac4a('0x9')],'strategy':_0x215a31[_0xac4a('0x22')],'answered':_0x215a31['answered'],'available':_0x215a31[_0xac4a('0x23')],'loggedIn':_0x215a31[_0xac4a('0x24')],'pTalking':_0x215a31[_0xac4a('0x25')],'sumBillable':_0x215a31[_0xac4a('0x26')],'sumDuration':_0x215a31[_0xac4a('0x27')],'sumHoldTime':_0x215a31['sumHoldTime'],'talking':_0x215a31['talking'],'total':_0x215a31[_0xac4a('0x28')],'type':_0x215a31[_0xac4a('0x29')],'unmanaged':_0x215a31[_0xac4a('0x2a')],'waiting':_0x215a31['waiting'],'loggedInDb':_0x215a31['loggedInDb']};if(_0x215a31[_0xac4a('0x29')]===_0xac4a('0x2b')){_0x472c57[_0xac4a('0x2c')]=_0x215a31[_0xac4a('0x2c')];_0x472c57[_0xac4a('0x2d')]=_0x215a31['dialMethod'];_0x472c57[_0xac4a('0x2e')]=_0x215a31['dialOriginateCallerIdName'];_0x472c57[_0xac4a('0x2f')]=_0x215a31['dialOriginateCallerIdNumber'];_0x472c57[_0xac4a('0x30')]=_0x215a31[_0xac4a('0x30')];_0x472c57[_0xac4a('0x31')]=_0x215a31[_0xac4a('0x31')];_0x472c57[_0xac4a('0x32')]=_0x215a31[_0xac4a('0x32')];_0x472c57[_0xac4a('0x33')]=_0x215a31[_0xac4a('0x33')];_0x472c57[_0xac4a('0x34')]=_0x215a31[_0xac4a('0x34')];_0x472c57[_0xac4a('0x35')]=_0x215a31[_0xac4a('0x35')];_0x472c57[_0xac4a('0x36')]=_0x215a31[_0xac4a('0x36')];_0x472c57['outboundDropCallsDayACS']=_0x215a31[_0xac4a('0x37')];_0x472c57[_0xac4a('0x38')]=_0x215a31['outboundDropCallsDayCallersExit'];_0x472c57[_0xac4a('0x39')]=_0x215a31[_0xac4a('0x39')];_0x472c57['outboundNoAnswerCallsDay']=_0x215a31['outboundNoAnswerCallsDay'];_0x472c57[_0xac4a('0x3a')]=_0x215a31[_0xac4a('0x3a')];_0x472c57[_0xac4a('0x3b')]=_0x215a31[_0xac4a('0x3b')];_0x472c57['outboundReCallsDay']=_0x215a31[_0xac4a('0x3c')];_0x472c57[_0xac4a('0x3d')]=_0x215a31['outboundRejectCallsDay'];_0x472c57[_0xac4a('0x3e')]=_0x215a31[_0xac4a('0x3e')];_0x472c57[_0xac4a('0x3f')]=_0x215a31['predictiveIntervalAnsweredCalls'];_0x472c57[_0xac4a('0x40')]=_0x215a31[_0xac4a('0x40')];_0x472c57[_0xac4a('0x41')]=_0x215a31['predictiveIntervalAvgTalktime'];_0x472c57[_0xac4a('0x42')]=_0x215a31[_0xac4a('0x42')];_0x472c57['predictiveIntervalDroppedCallsTimeout']=_0x215a31['predictiveIntervalDroppedCallsTimeout'];_0x472c57[_0xac4a('0x43')]=_0x215a31['predictiveIntervalErlangCalls'];_0x472c57['predictiveIntervalErlangCallsDroppedCalls']=_0x215a31['predictiveIntervalErlangCallsDroppedCalls'];_0x472c57['predictiveIntervalHitRate']=_0x215a31[_0xac4a('0x44')];_0x472c57[_0xac4a('0x45')]=_0x215a31[_0xac4a('0x45')];_0x472c57[_0xac4a('0x46')]=_0x215a31[_0xac4a('0x46')];_0x472c57[_0xac4a('0x47')]=_0x215a31[_0xac4a('0x47')];_0x472c57[_0xac4a('0x48')]=_0x215a31[_0xac4a('0x48')];_0x472c57[_0xac4a('0x1c')]=_0x215a31[_0xac4a('0x1c')];_0x472c57[_0xac4a('0x49')]=_0x215a31['originated'];}if(_0x215a31['Trunk']){_0x472c57['Trunk']={'id':_0x215a31[_0xac4a('0x4a')]['id'],'name':_0x215a31[_0xac4a('0x4a')][_0xac4a('0x9')],'active':_0x215a31[_0xac4a('0x4a')][_0xac4a('0x4b')],'callerid':_0x215a31[_0xac4a('0x4a')][_0xac4a('0x4c')]};}if(_0x215a31[_0xac4a('0x4d')]){_0x472c57[_0xac4a('0x4d')]={'id':_0x215a31[_0xac4a('0x4d')]['id'],'name':_0x215a31['Interval'][_0xac4a('0x9')]};}_0x222507[_0xac4a('0x4e')](_0x472c57);}}_0x594f36({'count':_0x222507[_0xac4a('0x4f')],'rows':_0x222507});});},'VoiceChannels':function(_0x3f24a1){return new Promise(function(_0x1a96cf,_0x57b879){var _0x8700b4=_[_0xac4a('0x50')](_0x15b967['channels']);_0x1a96cf({'count':_0x8700b4[_0xac4a('0x4f')],'rows':_0x8700b4});});},'VoiceChannelMixMonitor':function(_0x5b1734){var _0x3dd0f8=this;return new Promise(function(_0x65494e,_0xe5ee0f){if(ami[_0xac4a('0x10')]()==![]){return _0xe5ee0f(_0x3dd0f8[_0xac4a('0x11')](0x1f4,[config[_0xac4a('0x12')]['ip'],config[_0xac4a('0x12')][_0xac4a('0x13')],_0xac4a('0x14')][_0xac4a('0x15')]('\x20')));}var _0x4fa9eb=schema(properties[_0xac4a('0x51')])['validate'](_0x5b1734);if(_0x4fa9eb[_0xac4a('0x4f')]>0x0){return _0xe5ee0f(_0x3dd0f8[_0xac4a('0x11')](0x1f4,_[_0xac4a('0x52')](_0x4fa9eb,'message')[_0xac4a('0x15')](',\x20')));}var _0x19276e=_['find'](_0x15b967[_0xac4a('0x53')],{'uniqueid':_0x5b1734['uniqueid']});if(_0x19276e&&_0x19276e[_0xac4a('0x54')]){var _0xe620f6=util[_0xac4a('0x7')]('%s.%s',_0x5b1734['filename']||_0x5b1734[_0xac4a('0x55')],_0x5b1734['format']||_0xac4a('0x56'));return ami['Action']({'action':_0xac4a('0x57'),'channel':_0x19276e['channel'],'file':_0xe620f6,'options':_0xac4a('0x58')})[_0xac4a('0x1b')](function(_0x424f9b){var _0x1c8c39=_['find'](_0x19276e[_0xac4a('0x59')],{'filename':_0xac4a('0x5a')+_0xe620f6[_0xac4a('0x5b')]()});if(_[_0xac4a('0x5c')](_0x1c8c39)){_0x19276e[_0xac4a('0x59')][_0xac4a('0x4e')]({'filename':_0xac4a('0x5a')+_0xe620f6['toLowerCase'](),'createdAt':moment()[_0xac4a('0x7')](_0xac4a('0x5d')),'mixmonitorid':_0x424f9b['mixmonitorid'],'status':_0xac4a('0x5e')});}else{_0x1c8c39[_0xac4a('0x5f')]=_0x424f9b[_0xac4a('0x5f')];_0x1c8c39[_0xac4a('0x60')]='rec';}_0x65494e({'code':0xc8,'message':[_0x5b1734[_0xac4a('0x55')],_0xac4a('0x61'),_0x424f9b[_0xac4a('0x5f')]][_0xac4a('0x15')]('\x20'),'mixmonitorid':_0x424f9b[_0xac4a('0x5f')]});})['catch'](function(_0x179373){_0xe5ee0f(_0x3dd0f8['error'](0x1f5,[_0x5b1734[_0xac4a('0x55')],_0x179373[_0xac4a('0x1c')]['toLowerCase']()]['join']('\x20')));});}else{return _0xe5ee0f(_0x3dd0f8[_0xac4a('0x11')](0x1f5,_0xac4a('0x62')));}});},'VoiceChannelStopMixMonitor':function(_0x4d448f){var _0x18d29c=this;return new Promise(function(_0x31a4bf,_0x26b582){if(ami[_0xac4a('0x10')]()==![]){return _0x26b582(_0x18d29c['error'](0x1f4,[config[_0xac4a('0x12')]['ip'],config[_0xac4a('0x12')][_0xac4a('0x13')],_0xac4a('0x14')][_0xac4a('0x15')]('\x20')));}var _0x411547=schema(properties[_0xac4a('0x51')])['validate'](_0x4d448f);if(_0x411547[_0xac4a('0x4f')]>0x0){return _0x26b582(_0x18d29c[_0xac4a('0x11')](0x1f4,_[_0xac4a('0x52')](_0x411547,_0xac4a('0x1c'))[_0xac4a('0x15')](',\x20')));}var _0x2ac1e9=_[_0xac4a('0x63')](_0x15b967[_0xac4a('0x53')],{'uniqueid':_0x4d448f[_0xac4a('0x55')]});if(_0x2ac1e9){return BPromise[_0xac4a('0x64')]()[_0xac4a('0x1b')](function(){if(_0x2ac1e9[_0xac4a('0x54')]){return ami[_0xac4a('0x1a')]({'action':_0xac4a('0x65'),'channel':_0x2ac1e9[_0xac4a('0x54')],'mixmonitorid':_0x4d448f[_0xac4a('0x5f')]})['catch'](function(_0x13a577){});}})['then'](function(){if(_0x2ac1e9[_0xac4a('0x66')]){return ami['Action']({'action':_0xac4a('0x65'),'channel':_0x2ac1e9['destinationchannel'],'mixmonitorid':_0x4d448f[_0xac4a('0x5f')]})['catch'](function(_0x4d1b39){});}})[_0xac4a('0x1b')](function(_0x568ffb){var _0x3bcae2=_[_0xac4a('0x63')](_0x2ac1e9[_0xac4a('0x59')],{'mixmonitorid':_0x4d448f[_0xac4a('0x5f')]});if(_0x3bcae2){_0x3bcae2['status']=_0xac4a('0x67');}})['then'](function(){var _0x34215e=util['format'](_0xac4a('0x68'),_0x4d448f[_0xac4a('0x69')]||_0x4d448f[_0xac4a('0x55')],_0x4d448f[_0xac4a('0x7')]||_0xac4a('0x56'));var _0x2bc39a=_[_0xac4a('0x63')](_0x2ac1e9[_0xac4a('0x59')],{'filename':_0xac4a('0x5a')+_0x34215e[_0xac4a('0x5b')]()});if(_0x2bc39a){_0x2bc39a[_0xac4a('0x60')]=_0xac4a('0x67');}})[_0xac4a('0x1b')](function(){_0x31a4bf({'code':0xc8,'message':[_0x4d448f[_0xac4a('0x55')],_0xac4a('0x6a')][_0xac4a('0x15')]('\x20')});})[_0xac4a('0x1d')](function(_0x4a0156){_0x26b582(_0x18d29c[_0xac4a('0x11')](0x1f5,[_0x4d448f[_0xac4a('0x55')],_0x4a0156['message'][_0xac4a('0x5b')]()][_0xac4a('0x15')]('\x20')));});}else{return _0x26b582(_0x18d29c[_0xac4a('0x11')](0x1f5,_0xac4a('0x62')));}});},'VoiceQueuesChannels':function(_0x357cac){return new Promise(function(_0x4d1440,_0x47c6d8){var _0x45f3c3=_[_0xac4a('0x50')](_0x15b967[_0xac4a('0x6b')]);_0x4d1440({'count':_0x45f3c3[_0xac4a('0x4f')],'rows':_0x45f3c3});});},'VoiceQueuesChannel':function(_0x1db1be){var _0x21ef8b=this;return new Promise(function(_0x24b059,_0x2988d7){var _0x44c60b=schema(properties[_0xac4a('0x6c')])[_0xac4a('0x3')](_0x1db1be);if(_0x44c60b['length']>0x0){return _0x2988d7(_0x21ef8b['error'](0x1f4,_[_0xac4a('0x52')](_0x44c60b,_0xac4a('0x1c'))[_0xac4a('0x15')](',\x20')));}var _0x423f70=_[_0xac4a('0x63')](_0x15b967[_0xac4a('0x6b')],{'uniqueid':_0x1db1be[_0xac4a('0x55')]});if(_0x423f70){_0x24b059(_0x423f70);}else{return _0x2988d7(_0x21ef8b[_0xac4a('0x11')](0x1f5,_0xac4a('0x62')));}});},'VoiceQueuesChannelHangup':function(_0x2a5acc){var _0xb09b89=this;return new Promise(function(_0xb12cc5,_0x5f0173){if(ami[_0xac4a('0x10')]()==![]){return _0x5f0173(_0xb09b89[_0xac4a('0x11')](0x1f4,[config[_0xac4a('0x12')]['ip'],config[_0xac4a('0x12')]['username'],_0xac4a('0x14')]['join']('\x20')));}var _0xab4305=schema(properties[_0xac4a('0x6d')])['validate'](_0x2a5acc);if(_0xab4305['length']>0x0){return _0x5f0173(_0xb09b89[_0xac4a('0x11')](0x1f4,_[_0xac4a('0x52')](_0xab4305,_0xac4a('0x1c'))['join'](',\x20')));}var _0x3a0cf8=_['find'](_0x15b967[_0xac4a('0x6b')],{'uniqueid':_0x2a5acc['uniqueid']});if(_0x3a0cf8&&_0x3a0cf8['channel']){return ami[_0xac4a('0x1a')]({'action':'Hangup','channel':_0x3a0cf8[_0xac4a('0x54')]})['then'](function(_0x3cbacc){_0xb12cc5({'code':0xc8,'message':[_0x2a5acc[_0xac4a('0x55')],_0x3cbacc['message'][_0xac4a('0x5b')]()]['join']('\x20')});})[_0xac4a('0x1d')](function(_0x443a56){_0x5f0173(_0xb09b89['error'](0x1f5,[_0x2a5acc[_0xac4a('0x55')],_0x443a56['message']['toLowerCase']()][_0xac4a('0x15')]('\x20')));});}else{return _0x5f0173(_0xb09b89['error'](0x1f5,_0xac4a('0x62')));}});},'VoiceQueuesChannelRedirect':function(_0x558c43){var _0x4ccd67=this;return new Promise(function(_0x1588e2,_0x4065c0){if(ami[_0xac4a('0x10')]()==![]){return _0x4065c0(_0x4ccd67['error'](0x1f4,[config['asterisk']['ip'],config[_0xac4a('0x12')][_0xac4a('0x13')],'ami\x20disconnected']['join']('\x20')));}var _0x3824a2=schema(properties[_0xac4a('0x6e')])[_0xac4a('0x3')](_0x558c43);if(_0x3824a2[_0xac4a('0x4f')]>0x0){return _0x4065c0(_0x4ccd67[_0xac4a('0x11')](0x1f4,_[_0xac4a('0x52')](_0x3824a2,_0xac4a('0x1c'))[_0xac4a('0x15')](',\x20')));}var _0x26bf73=_['find'](_0x15b967[_0xac4a('0x6b')],{'uniqueid':_0x558c43[_0xac4a('0x55')]});if(_0x26bf73&&_0x26bf73[_0xac4a('0x54')]){return ami['Action']({'action':_0xac4a('0x6f'),'channel':_0x26bf73[_0xac4a('0x54')],'exten':_0x558c43[_0xac4a('0x70')],'context':_0x558c43[_0xac4a('0x71')]||_0x26bf73[_0xac4a('0x71')],'priority':0x1})['then'](function(_0x290a73){_0x1588e2({'code':0xc8,'message':[_0x558c43[_0xac4a('0x55')],_0x290a73[_0xac4a('0x1c')][_0xac4a('0x5b')]()][_0xac4a('0x15')]('\x20')});})[_0xac4a('0x1d')](function(_0xd7bdd6){_0x4065c0(_0x4ccd67['error'](0x1f5,[_0x558c43[_0xac4a('0x55')],_0xd7bdd6[_0xac4a('0x1c')][_0xac4a('0x5b')]()][_0xac4a('0x15')]('\x20')));});}else{return _0x4065c0(_0x4ccd67[_0xac4a('0x11')](0x1f5,_0xac4a('0x62')));}});},'Agents':function(_0x547eec){return new Promise(function(_0x318bee,_0x29c772){var _0x1b9a33=_[_0xac4a('0x50')](_0x15b967['agents']);_0x318bee({'count':_0x1b9a33[_0xac4a('0x4f')],'rows':_0x1b9a33});});},'Telephones':function(_0x56a934){return new Promise(function(_0x4447b5,_0x22b718){var _0x53a371=_['values'](_0x15b967[_0xac4a('0x72')]);_0x4447b5({'count':_0x53a371[_0xac4a('0x4f')],'rows':_0x53a371});});},'Trunks':function(_0x1fe86a){return new Promise(function(_0x4bb03d,_0x1f3f1c){var _0x4814a3=_[_0xac4a('0x50')](_0x15b967[_0xac4a('0x73')]);_0x4bb03d({'count':_0x4814a3[_0xac4a('0x4f')],'rows':_0x4814a3});});},'OutboundChannels':function(_0x35328e){return new Promise(function(_0x2e2c92,_0x4c2ac5){var _0x50f471=_[_0xac4a('0x50')](_0x15b967[_0xac4a('0x74')]);_0x2e2c92({'count':_0x50f471[_0xac4a('0x4f')],'rows':_0x50f471});});},'Outbound':function(_0x8b5a90){return new Promise(function(_0x3afcf6,_0x3c5bbc){_0x3afcf6(_0x15b967[_0xac4a('0x2b')]);});},'Campaigns':function(_0x186410){return new Promise(function(_0x49ac09,_0x52b3e6){var _0x446d99=_[_0xac4a('0x50')](_0x15b967[_0xac4a('0x75')]);_0x49ac09({'count':_0x446d99[_0xac4a('0x4f')],'rows':_0x446d99});});},'VoiceQueuesPreview':function(_0x1353af){var _0x2ea4a4=this;return new Promise(function(_0xdaa2ef,_0x2e704b){_0x730a38['run'](_0x1353af['id'])['then'](function(_0x32fd0c){_0xdaa2ef({'code':0xc8,'message':_0x32fd0c[_0xac4a('0x1c')]});})[_0xac4a('0x1d')](function(_0x371e06){_0x2e704b(_0x2ea4a4[_0xac4a('0x11')](0x1f4,_0x371e06[_0xac4a('0x1c')]));});});},'EventManager':function(_0x338af3){var _0x51c3ef=this;return new Promise(function(_0x38aeeb,_0x1bacf2){if(!_0x338af3[_0xac4a('0x76')]){return _0x1bacf2(_0x51c3ef['error'](0x1f4,_0xac4a('0x77')));}ami[_0xac4a('0x78')](_0xac4a('0x79')+_0x338af3[_0xac4a('0x76')],_0x338af3[_0xac4a('0x1c')]);_0x38aeeb({'code':0xc8,'message':_0x338af3});});},'FaxAccounts':function(_0x27d023){return new Promise(function(_0x4445c6,_0x2ef42a){var _0x322465=_['values'](_0x15b967[_0xac4a('0x7a')]);_0x4445c6({'count':_0x322465['length'],'rows':_0x322465});});},'SendFax':function(_0x203321){var _0x1199f6=this;return new Promise(function(_0x3184b3,_0x166cd9){_0x215f39[_0xac4a('0x7b')](_0x203321)[_0xac4a('0x1b')](function(_0x19766a){_0x3184b3({'code':0xc8,'message':_0x19766a['message']});})[_0xac4a('0x1d')](function(_0x42b3f7){_0x166cd9(_0x1199f6[_0xac4a('0x11')](0x1f4,_0x42b3f7[_0xac4a('0x1c')]));});});},'CheckAfterSend':function(_0x15f706){var _0x54a172=this;return new Promise(function(_0x1b37d9,_0x360d4f){_0x215f39['checkAfterSend'](_0x15f706)['then'](function(_0x386d6d){_0x1b37d9({'code':0xc8,'message':_0x386d6d[_0xac4a('0x1c')]});})['catch'](function(_0x24d36d){_0x360d4f(_0x54a172[_0xac4a('0x11')](0x1f4,_0x24d36d[_0xac4a('0x1c')]));});});}};var _0x37657e=jayson[_0xac4a('0x7c')](_0x3ef77c)[_0xac4a('0x7d')]();_0x37657e['on']('error',function(_0xbdff4b){return _0x15cd34(_0xbdff4b);});_0x37657e[_0xac4a('0x6')](0x232a,_0xac4a('0x7e'),function(){console['log'](_0xac4a('0x7f'),0x232a);return _0x96be2b(_0xac4a('0x80')+0x232a);});});};
\ No newline at end of file
index a5e41f5..bd5f5e5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9821=['emit','autoCreate','data2','isNil','routeId','firstName','calleridname','<unknown>','calleridnum','uniqueid','destcalleridname','destcalleridnum','resolve','then','omit','format','trigger:%s','toLowerCase','merge','data1','createContact','user:%s','name','action','bluebird','../../../../config/logger','trigger','../../rpc/cmContact','socket.io-emitter','localhost','info','stringify'];(function(_0x171ddc,_0x53fdd6){var _0x2c8866=function(_0x4388a1){while(--_0x4388a1){_0x171ddc['push'](_0x171ddc['shift']());}};_0x2c8866(++_0x53fdd6);}(_0x9821,0x1b8));var _0x1982=function(_0x119d5a,_0x19b457){_0x119d5a=_0x119d5a-0x0;var _0x15bff4=_0x9821[_0x119d5a];return _0x15bff4;};'use strict';var BPromise=require(_0x1982('0x0'));var util=require('util');var _=require('lodash');var logger=require(_0x1982('0x1'))(_0x1982('0x2'));var cmContactRpc=require(_0x1982('0x3'));var io=require(_0x1982('0x4'))({'host':_0x1982('0x5'),'port':0x18eb});function emit(_0x134379,_0x58eb05,_0x38fff3){logger[_0x1982('0x6')](_0x134379,_0x58eb05,JSON[_0x1982('0x7')](_0x38fff3));io['to'](_0x134379)[_0x1982('0x8')](_0x58eb05,_0x38fff3);}exports['exec']=function(_0x46329d,_0x4b9077,_0x2f8333){_0x2f8333[_0x1982('0x9')]=0x0;if(_0x4b9077[_0x1982('0xa')]&&parseInt(_0x4b9077[_0x1982('0xa')],0xa)){var _0x389063={'ListId':parseInt(_0x4b9077['data1'],0xa),'phone':_0x2f8333['calleridnum']};if(_[_0x1982('0xb')](_0x2f8333[_0x1982('0xc')])){_0x389063[_0x1982('0xd')]=_0x2f8333[_0x1982('0xe')]&&_0x2f8333[_0x1982('0xe')]!==_0x1982('0xf')?_0x2f8333[_0x1982('0xe')]:_0x2f8333[_0x1982('0x10')]||_0x2f8333[_0x1982('0x11')];}else{_0x389063[_0x1982('0xd')]=_0x2f8333[_0x1982('0x12')]&&_0x2f8333['destcalleridname']!==_0x1982('0xf')?_0x2f8333[_0x1982('0x12')]:_0x2f8333[_0x1982('0x13')]||_0x2f8333['uniqueid'];_0x389063['phone']=_0x2f8333['destcalleridname']&&_0x2f8333[_0x1982('0x12')]!==_0x1982('0xf')?_0x2f8333[_0x1982('0x12')]:_0x2f8333[_0x1982('0x13')]||_0x2f8333[_0x1982('0x11')];}BPromise[_0x1982('0x14')]()[_0x1982('0x15')](cmContactRpc['showContact']({'where':_[_0x1982('0x16')](_0x389063,['firstName'])}))[_0x1982('0x15')](function(_0x50dab8){if(_0x50dab8){_0x2f8333['xmd-contactid2']=_0x50dab8['id'];emit(util[_0x1982('0x17')]('user:%s',_0x46329d['name']),util[_0x1982('0x17')](_0x1982('0x18'),_0x4b9077['action'][_0x1982('0x19')]()),_[_0x1982('0x1a')](_0x2f8333,{'ListId':parseInt(_0x4b9077[_0x1982('0x1b')],0xa)}));return;}else{return BPromise['resolve']()[_0x1982('0x15')](cmContactRpc[_0x1982('0x1c')](_0x389063));}})[_0x1982('0x15')](function(_0x383c89){if(_0x383c89){_0x2f8333['xmd-contactid2']=_0x383c89['id'];emit(util['format'](_0x1982('0x1d'),_0x46329d[_0x1982('0x1e')]),util[_0x1982('0x17')](_0x1982('0x18'),_0x4b9077[_0x1982('0x1f')][_0x1982('0x19')]()),_[_0x1982('0x1a')](_0x2f8333,{'ListId':parseInt(_0x4b9077[_0x1982('0x1b')],0xa)}));}})['catch'](function(_0xee51bc){logger['error']('Error\x20creating\x20contact',JSON[_0x1982('0x7')](_0xee51bc));});}else{if(_0x46329d){emit(util[_0x1982('0x17')](_0x1982('0x1d'),_0x46329d['name']),util['format'](_0x1982('0x18'),_0x4b9077[_0x1982('0x1f')][_0x1982('0x19')]()),_[_0x1982('0x1a')]({'ListId':parseInt(_0x4b9077[_0x1982('0x1b')],0xa)},_0x2f8333));}}};
\ No newline at end of file
+var _0x562a=['calleridname','<unknown>','firstName','destcalleridname','destcalleridnum','uniqueid','phone','resolve','then','showContact','xmd-contactid2','format','user:%s','trigger:%s','toLowerCase','merge','name','action','error','Error\x20creating\x20contact','bluebird','util','../../../../config/logger','trigger','../../rpc/cmContact','socket.io-emitter','localhost','info','stringify','emit','exec','autoCreate','data2','data1','calleridnum','isNil','routeId'];(function(_0x4d0662,_0x145963){var _0x6eea6d=function(_0x2def06){while(--_0x2def06){_0x4d0662['push'](_0x4d0662['shift']());}};_0x6eea6d(++_0x145963);}(_0x562a,0xf2));var _0xa562=function(_0x44cc81,_0x3654f8){_0x44cc81=_0x44cc81-0x0;var _0x17024c=_0x562a[_0x44cc81];return _0x17024c;};'use strict';var BPromise=require(_0xa562('0x0'));var util=require(_0xa562('0x1'));var _=require('lodash');var logger=require(_0xa562('0x2'))(_0xa562('0x3'));var cmContactRpc=require(_0xa562('0x4'));var io=require(_0xa562('0x5'))({'host':_0xa562('0x6'),'port':0x18eb});function emit(_0x3bd4fd,_0x2614ba,_0x3eb066){logger[_0xa562('0x7')](_0x3bd4fd,_0x2614ba,JSON[_0xa562('0x8')](_0x3eb066));io['to'](_0x3bd4fd)[_0xa562('0x9')](_0x2614ba,_0x3eb066);}exports[_0xa562('0xa')]=function(_0x2f55d4,_0x5aca2e,_0x44a89c){_0x44a89c[_0xa562('0xb')]=0x0;if(_0x5aca2e[_0xa562('0xc')]&&parseInt(_0x5aca2e[_0xa562('0xc')],0xa)){var _0xb3b521={'ListId':parseInt(_0x5aca2e[_0xa562('0xd')],0xa),'phone':_0x44a89c[_0xa562('0xe')]};if(_[_0xa562('0xf')](_0x44a89c[_0xa562('0x10')])){_0xb3b521['firstName']=_0x44a89c['calleridname']&&_0x44a89c[_0xa562('0x11')]!==_0xa562('0x12')?_0x44a89c[_0xa562('0x11')]:_0x44a89c['calleridnum']||_0x44a89c['uniqueid'];}else{_0xb3b521[_0xa562('0x13')]=_0x44a89c[_0xa562('0x14')]&&_0x44a89c[_0xa562('0x14')]!==_0xa562('0x12')?_0x44a89c['destcalleridname']:_0x44a89c[_0xa562('0x15')]||_0x44a89c[_0xa562('0x16')];_0xb3b521[_0xa562('0x17')]=_0x44a89c['destcalleridname']&&_0x44a89c[_0xa562('0x14')]!=='<unknown>'?_0x44a89c[_0xa562('0x14')]:_0x44a89c[_0xa562('0x15')]||_0x44a89c[_0xa562('0x16')];}BPromise[_0xa562('0x18')]()[_0xa562('0x19')](cmContactRpc[_0xa562('0x1a')]({'where':_['omit'](_0xb3b521,['firstName'])}))[_0xa562('0x19')](function(_0x2333a6){if(_0x2333a6){_0x44a89c[_0xa562('0x1b')]=_0x2333a6['id'];emit(util[_0xa562('0x1c')](_0xa562('0x1d'),_0x2f55d4['name']),util[_0xa562('0x1c')](_0xa562('0x1e'),_0x5aca2e['action'][_0xa562('0x1f')]()),_[_0xa562('0x20')](_0x44a89c,{'ListId':parseInt(_0x5aca2e[_0xa562('0xd')],0xa)}));return;}else{return BPromise['resolve']()[_0xa562('0x19')](cmContactRpc['createContact'](_0xb3b521));}})[_0xa562('0x19')](function(_0x25cc14){if(_0x25cc14){_0x44a89c[_0xa562('0x1b')]=_0x25cc14['id'];emit(util[_0xa562('0x1c')](_0xa562('0x1d'),_0x2f55d4[_0xa562('0x21')]),util[_0xa562('0x1c')]('trigger:%s',_0x5aca2e[_0xa562('0x22')][_0xa562('0x1f')]()),_[_0xa562('0x20')](_0x44a89c,{'ListId':parseInt(_0x5aca2e[_0xa562('0xd')],0xa)}));}})['catch'](function(_0xfdb3a5){logger[_0xa562('0x23')](_0xa562('0x24'),JSON['stringify'](_0xfdb3a5));});}else{if(_0x2f55d4){emit(util[_0xa562('0x1c')](_0xa562('0x1d'),_0x2f55d4[_0xa562('0x21')]),util[_0xa562('0x1c')](_0xa562('0x1e'),_0x5aca2e[_0xa562('0x22')][_0xa562('0x1f')]()),_[_0xa562('0x20')]({'ListId':parseInt(_0x5aca2e[_0xa562('0xd')],0xa)},_0x44a89c));}}};
\ No newline at end of file
index 32d9eaa..d85296b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x16fc=['./integration','./cmContact','trigger','../ami','popup','winapp','triggers','agents','voiceQueues','voiceExtensions','zendeskAccounts','freshdeskAccounts','salesforceAccounts','sugarcrmAccounts','deskAccounts','vtigerAccounts','accounts','zohoAccounts','custom:agentcalled','syncCustomEvent','custom:agentconnect','bind','custom:agentcomplete','custom:queuecallerabandon','custom:dialbegin','custom:dialconnect','custom:dialend','custom:newinteraction','custom:closedinteraction','custom:incomingmessage','custom:outgoingmessage','custom:rejectmessage','prototype','emit','checkTriggers','hasOwnProperty','status','checkTrigger','merge','variables','Actions','interface','action','contactmanager','motionbar','browser','data1','TemplateId','html','templates','data2','render','url','uri','buildUri','isNil','data3','location','data4','data5','800','data6','600','winApplication','winArguments','format','user:%s','name','trigger:%s:%s','toLowerCase','jscripty','trigger:%s','exec','integration','routeId','urlforward','parse','query','search','AllConditions','every','checkConditions','AnyConditions','length','some','channel','field','account','chat','ChatWebsiteId','AccountId','operator','upperFirst','interaction','event','value','queue','lastevent','exports','mustache','bluebird'];(function(_0x5953fd,_0x5c8121){var _0x5078f4=function(_0x21ba78){while(--_0x21ba78){_0x5953fd['push'](_0x5953fd['shift']());}};_0x5078f4(++_0x5c8121);}(_0x16fc,0xc8));var _0xc16f=function(_0xbac397,_0x34f39d){_0xbac397=_0xbac397-0x0;var _0x4cb0a0=_0x16fc[_0xbac397];return _0x4cb0a0;};'use strict';var util=require('util');var _=require('lodash');var url=require('url');var Mustache=require(_0xc16f('0x0'));var BPromise=require(_0xc16f('0x1'));var urlforward=require('./urlforward');var integration=require(_0xc16f('0x2'));var cmContact=require(_0xc16f('0x3'));var cmContactRpc=require('../rpc/cmContact');var logger=require('../../../config/logger')(_0xc16f('0x4'));var ami=require(_0xc16f('0x5'));var io=require('socket.io-emitter')({'host':'localhost','port':0x18eb});var operators={'equals':function(_0x495138,_0xc0732a){return _0x495138==_0xc0732a;},'not_equals':function(_0x51bb26,_0x1170bf){return _0x51bb26!=_0x1170bf;}};var serverActions=['integration','urlforward'];var barAndWebActions=[_0xc16f('0x6'),'url',_0xc16f('0x7')];function Trigger(_0x156bc3){this[_0xc16f('0x8')]=_0x156bc3[_0xc16f('0x8')];this[_0xc16f('0x9')]=_0x156bc3[_0xc16f('0x9')];this[_0xc16f('0xa')]=_0x156bc3[_0xc16f('0xa')];this['templates']=_0x156bc3['templates'];this[_0xc16f('0xb')]=_0x156bc3[_0xc16f('0xb')];this['zendeskAccounts']=_0x156bc3[_0xc16f('0xc')];this[_0xc16f('0xd')]=_0x156bc3['freshdeskAccounts'];this[_0xc16f('0xe')]=_0x156bc3['salesforceAccounts'];this[_0xc16f('0xf')]=_0x156bc3['sugarcrmAccounts'];this['zohoAccounts']=_0x156bc3['zohoAccounts'];this['deskAccounts']=_0x156bc3[_0xc16f('0x10')];this[_0xc16f('0x11')]=_0x156bc3[_0xc16f('0x11')];this[_0xc16f('0x12')]={'zendesk':this[_0xc16f('0xc')],'salesforce':this[_0xc16f('0xe')],'freshdesk':this['freshdeskAccounts'],'sugarcrm':this[_0xc16f('0xf')],'zoho':this[_0xc16f('0x13')],'desk':this[_0xc16f('0x10')],'vtiger':this[_0xc16f('0x11')]};ami['on'](_0xc16f('0x14'),this[_0xc16f('0x15')]['bind'](this));ami['on'](_0xc16f('0x16'),this['syncCustomEvent'][_0xc16f('0x17')](this));ami['on']('custom:agentringnoanswer',this[_0xc16f('0x15')][_0xc16f('0x17')](this));ami['on'](_0xc16f('0x18'),this['syncCustomEvent']['bind'](this));ami['on'](_0xc16f('0x19'),this[_0xc16f('0x15')][_0xc16f('0x17')](this));ami['on'](_0xc16f('0x1a'),this['syncCustomEvent'][_0xc16f('0x17')](this));ami['on'](_0xc16f('0x1b'),this['syncCustomEvent'][_0xc16f('0x17')](this));ami['on'](_0xc16f('0x1c'),this['syncCustomEvent'][_0xc16f('0x17')](this));ami['on'](_0xc16f('0x1d'),this[_0xc16f('0x15')][_0xc16f('0x17')](this));ami['on'](_0xc16f('0x1e'),this[_0xc16f('0x15')][_0xc16f('0x17')](this));ami['on'](_0xc16f('0x1f'),this[_0xc16f('0x15')][_0xc16f('0x17')](this));ami['on'](_0xc16f('0x20'),this['syncCustomEvent'][_0xc16f('0x17')](this));ami['on']('custom:acceptmessage',this[_0xc16f('0x15')][_0xc16f('0x17')](this));ami['on'](_0xc16f('0x21'),this[_0xc16f('0x15')]['bind'](this));}Trigger[_0xc16f('0x22')][_0xc16f('0x23')]=function(_0x1e9520,_0x223fc8,_0x553e85){logger['info'](_0x1e9520,_0x223fc8,JSON['stringify'](_0x553e85));io['to'](_0x1e9520)[_0xc16f('0x23')](_0x223fc8,_0x553e85);};Trigger[_0xc16f('0x22')]['syncCustomEvent']=function(_0x43ea06){this[_0xc16f('0x24')](_0x43ea06);};Trigger[_0xc16f('0x22')]['checkTriggers']=function(_0x2cd9d0){var _0x12198c;for(var _0x269f0b in this['triggers']){if(this[_0xc16f('0x8')][_0xc16f('0x25')](_0x269f0b)){if(this['triggers'][_0x269f0b][_0xc16f('0x26')]){_0x12198c=this[_0xc16f('0x27')](this[_0xc16f('0x8')][_0x269f0b],_0x2cd9d0);if(_0x12198c){_[_0xc16f('0x28')](_0x2cd9d0,_0x2cd9d0[_0xc16f('0x29')]);for(var _0x425dee=0x0,_0x2c16ac,_0x5b591a,_0x12616;_0x425dee<this[_0xc16f('0x8')][_0x269f0b][_0xc16f('0x2a')]['length'];_0x425dee+=0x1){_0x2c16ac=this[_0xc16f('0x8')][_0x269f0b][_0xc16f('0x2a')][_0x425dee];if(this['agents'][_0x2cd9d0[_0xc16f('0x2b')]]){switch(_0x2c16ac[_0xc16f('0x2c')]['toLowerCase']()){case _0xc16f('0x2d'):break;case _0xc16f('0x2e'):case _0xc16f('0x2f'):var _0x23d4f5={};switch(barAndWebActions[_0x2c16ac[_0xc16f('0x30')]]){case'popup':_0x23d4f5[_0xc16f('0x31')]=_0x2c16ac['data2'];_0x23d4f5[_0xc16f('0x32')]=this[_0xc16f('0x33')][_0x2c16ac[_0xc16f('0x34')]]?Mustache[_0xc16f('0x35')](this['templates'][_0x2c16ac[_0xc16f('0x34')]][_0xc16f('0x32')],_0x2cd9d0):'template\x20not\x20found';break;case _0xc16f('0x36'):_0x23d4f5[_0xc16f('0x37')]=this[_0xc16f('0x38')](_0x2c16ac[_0xc16f('0x34')],_0x2cd9d0,_[_0xc16f('0x39')](_0x2c16ac[_0xc16f('0x3a')])?!![]:parseInt(_0x2c16ac['data3'],0xa));if(_[_0xc16f('0x39')](_0x2c16ac['data4'])){_0x23d4f5[_0xc16f('0x3b')]='0';}else{_0x23d4f5['uriLocation']=_0x2c16ac[_0xc16f('0x3c')];_0x23d4f5['windowWidth']=_[_0xc16f('0x39')](_0x2c16ac[_0xc16f('0x3d')])?_0xc16f('0x3e'):_0x2c16ac[_0xc16f('0x3d')];_0x23d4f5['windowHeight']=_[_0xc16f('0x39')](_0x2c16ac[_0xc16f('0x3f')])?_0xc16f('0x40'):_0x2c16ac[_0xc16f('0x3f')];}break;case _0xc16f('0x7'):_0x23d4f5[_0xc16f('0x41')]=_0x2c16ac[_0xc16f('0x34')]?Mustache['render'](_0x2c16ac[_0xc16f('0x34')],_0x2cd9d0):'';_0x23d4f5[_0xc16f('0x42')]=_0x2c16ac[_0xc16f('0x3a')]?Mustache['render'](_0x2c16ac[_0xc16f('0x3a')],_0x2cd9d0):'';break;}this[_0xc16f('0x23')](util[_0xc16f('0x43')](_0xc16f('0x44'),this[_0xc16f('0x9')][_0x2cd9d0[_0xc16f('0x2b')]][_0xc16f('0x45')]),util[_0xc16f('0x43')](_0xc16f('0x46'),_0x2c16ac['action'][_0xc16f('0x47')](),barAndWebActions[_0x2c16ac[_0xc16f('0x30')]]),_[_0xc16f('0x28')](_0x23d4f5,_0x2cd9d0));break;case _0xc16f('0x48'):this[_0xc16f('0x23')](util['format'](_0xc16f('0x44'),this[_0xc16f('0x9')][_0x2cd9d0['interface']][_0xc16f('0x45')]),util['format'](_0xc16f('0x49'),_0x2c16ac['action'][_0xc16f('0x47')]()),_[_0xc16f('0x28')]({'ProjectId':parseInt(_0x2c16ac[_0xc16f('0x30')],0xa)},_0x2cd9d0));break;default:this[_0xc16f('0x23')](util[_0xc16f('0x43')](_0xc16f('0x44'),this['agents'][_0x2cd9d0['interface']]['name']),util[_0xc16f('0x43')](_0xc16f('0x49'),_0x2c16ac[_0xc16f('0x2c')][_0xc16f('0x47')]()),_['merge']({},_0x2c16ac,_0x2cd9d0));}}switch(_0x2c16ac[_0xc16f('0x2c')][_0xc16f('0x47')]()){case'contactmanager':cmContact[_0xc16f('0x4a')](this['agents'][_0x2cd9d0[_0xc16f('0x2b')]],_0x2c16ac,_0x2cd9d0,cmContactRpc);break;case _0xc16f('0x4b'):integration[_0xc16f('0x4a')](_0x2c16ac,_0x2cd9d0,this[_0xc16f('0x12')],this['agents'][_0x2cd9d0[_0xc16f('0x2b')]],this[_0xc16f('0xa')][_0x2cd9d0['queue']],this[_0xc16f('0xb')][_0x2cd9d0[_0xc16f('0x4c')]]);break;case _0xc16f('0x4d'):urlforward[_0xc16f('0x4a')](_0x2c16ac,_0x2cd9d0);break;}}}}}}};Trigger[_0xc16f('0x22')][_0xc16f('0x38')]=function(_0x1f5b09,_0xd20da2,_0x307943){var _0x26a33f=url[_0xc16f('0x4e')](Mustache['render'](_0x1f5b09,_0xd20da2),!![]);if(_0x307943){_[_0xc16f('0x28')](_0x26a33f[_0xc16f('0x4f')],_0xd20da2);}delete _0x26a33f[_0xc16f('0x50')];return url[_0xc16f('0x43')](_0x26a33f);};Trigger[_0xc16f('0x22')]['checkTrigger']=function(_0x113be1,_0x5cd854){var _0x1a803e=!![],_0x3ded16=!![];if(_0x113be1[_0xc16f('0x51')]['length']){_0x1a803e=_[_0xc16f('0x52')](_0x113be1[_0xc16f('0x51')],this[_0xc16f('0x53')](_0x5cd854,_0x113be1['channel']));}if(_0x113be1[_0xc16f('0x54')][_0xc16f('0x55')]){_0x3ded16=_[_0xc16f('0x56')](_0x113be1[_0xc16f('0x54')],this[_0xc16f('0x53')](_0x5cd854,_0x113be1[_0xc16f('0x57')]));}return _0x1a803e&&_0x3ded16;};Trigger[_0xc16f('0x22')][_0xc16f('0x53')]=function(_0x3e7a27,_0x3002de){return function(_0x528508){switch(_0x528508[_0xc16f('0x58')]){case _0xc16f('0x59'):if(_0x3e7a27['channel']===_0x3002de){if(_0x3002de===_0xc16f('0x5a')){return _0x3e7a27[_0xc16f('0x5b')]?operators[_0x528508['operator']](Number(_0x528508['value']),_0x3e7a27[_0xc16f('0x5b')]):![];}else{return _0x3e7a27[_['upperFirst'](_0x3002de)+_0xc16f('0x5c')]?operators[_0x528508[_0xc16f('0x5d')]](Number(_0x528508['value']),_0x3e7a27[_[_0xc16f('0x5e')](_0x3002de)+_0xc16f('0x5c')]):![];}}break;case _0xc16f('0x5f'):case'message':if(_0x3e7a27['channel']===_0x3002de){return _0x3e7a27[_0xc16f('0x60')]?operators[_0x528508[_0xc16f('0x5d')]](_0x528508[_0xc16f('0x61')],_0x3e7a27[_0xc16f('0x60')]):![];}break;case'queue':return _0x3e7a27[_0xc16f('0x62')]?operators[_0x528508[_0xc16f('0x5d')]](_0x528508[_0xc16f('0x61')],_0x3e7a27['queue']):![];case _0xc16f('0x63'):return _0x3e7a27[_0xc16f('0x63')]?operators[_0x528508['operator']](_0x528508['value'],_0x3e7a27[_0xc16f('0x63')]):![];case _0xc16f('0x4c'):return _0x3e7a27[_0xc16f('0x4c')]?operators[_0x528508[_0xc16f('0x5d')]](_0x528508[_0xc16f('0x61')],_0x3e7a27['routeId']):![];}return![];};};module[_0xc16f('0x64')]=Trigger;
\ No newline at end of file
+var _0xdcbd=['isNil','data4','location','uriLocation','windowWidth','800','data5','windowHeight','data6','winapp','winArguments','format','name','trigger:%s:%s','data1','jscripty','user:%s','trigger:%s','contactmanager','exec','voiceQueues','queue','routeId','buildUri','query','search','AllConditions','checkConditions','channel','AnyConditions','some','account','chat','ChatWebsiteId','value','upperFirst','AccountId','operator','interaction','message','event','lastevent','exports','util','lodash','url','mustache','bluebird','./urlforward','../rpc/cmContact','../../../config/logger','trigger','../ami','localhost','integration','urlforward','triggers','agents','voiceExtensions','zendeskAccounts','freshdeskAccounts','salesforceAccounts','sugarcrmAccounts','zohoAccounts','deskAccounts','vtigerAccounts','accounts','syncCustomEvent','bind','custom:agentringnoanswer','custom:agentcomplete','custom:dialbegin','custom:dialconnect','custom:newinteraction','custom:incomingmessage','custom:outgoingmessage','custom:acceptmessage','custom:rejectmessage','prototype','emit','stringify','checkTriggers','hasOwnProperty','status','checkTrigger','merge','variables','Actions','length','interface','action','toLowerCase','motionbar','browser','popup','TemplateId','data2','render','templates','template\x20not\x20found','data3'];(function(_0x329f7d,_0x2f83ae){var _0x450f90=function(_0x50a248){while(--_0x50a248){_0x329f7d['push'](_0x329f7d['shift']());}};_0x450f90(++_0x2f83ae);}(_0xdcbd,0x90));var _0xddcb=function(_0x1bafba,_0x34053f){_0x1bafba=_0x1bafba-0x0;var _0xe88b90=_0xdcbd[_0x1bafba];return _0xe88b90;};'use strict';var util=require(_0xddcb('0x0'));var _=require(_0xddcb('0x1'));var url=require(_0xddcb('0x2'));var Mustache=require(_0xddcb('0x3'));var BPromise=require(_0xddcb('0x4'));var urlforward=require(_0xddcb('0x5'));var integration=require('./integration');var cmContact=require('./cmContact');var cmContactRpc=require(_0xddcb('0x6'));var logger=require(_0xddcb('0x7'))(_0xddcb('0x8'));var ami=require(_0xddcb('0x9'));var io=require('socket.io-emitter')({'host':_0xddcb('0xa'),'port':0x18eb});var operators={'equals':function(_0x173336,_0x4300cc){return _0x173336==_0x4300cc;},'not_equals':function(_0x5c9f23,_0x58f764){return _0x5c9f23!=_0x58f764;}};var serverActions=[_0xddcb('0xb'),_0xddcb('0xc')];var barAndWebActions=['popup',_0xddcb('0x2'),'winapp'];function Trigger(_0x1bc28d){this[_0xddcb('0xd')]=_0x1bc28d[_0xddcb('0xd')];this[_0xddcb('0xe')]=_0x1bc28d['agents'];this['voiceQueues']=_0x1bc28d['voiceQueues'];this['templates']=_0x1bc28d['templates'];this[_0xddcb('0xf')]=_0x1bc28d[_0xddcb('0xf')];this['zendeskAccounts']=_0x1bc28d[_0xddcb('0x10')];this[_0xddcb('0x11')]=_0x1bc28d['freshdeskAccounts'];this[_0xddcb('0x12')]=_0x1bc28d['salesforceAccounts'];this['sugarcrmAccounts']=_0x1bc28d[_0xddcb('0x13')];this[_0xddcb('0x14')]=_0x1bc28d[_0xddcb('0x14')];this[_0xddcb('0x15')]=_0x1bc28d[_0xddcb('0x15')];this[_0xddcb('0x16')]=_0x1bc28d[_0xddcb('0x16')];this[_0xddcb('0x17')]={'zendesk':this[_0xddcb('0x10')],'salesforce':this[_0xddcb('0x12')],'freshdesk':this[_0xddcb('0x11')],'sugarcrm':this[_0xddcb('0x13')],'zoho':this[_0xddcb('0x14')],'desk':this[_0xddcb('0x15')],'vtiger':this[_0xddcb('0x16')]};ami['on']('custom:agentcalled',this[_0xddcb('0x18')][_0xddcb('0x19')](this));ami['on']('custom:agentconnect',this[_0xddcb('0x18')]['bind'](this));ami['on'](_0xddcb('0x1a'),this[_0xddcb('0x18')][_0xddcb('0x19')](this));ami['on'](_0xddcb('0x1b'),this[_0xddcb('0x18')]['bind'](this));ami['on']('custom:queuecallerabandon',this['syncCustomEvent'][_0xddcb('0x19')](this));ami['on'](_0xddcb('0x1c'),this['syncCustomEvent'][_0xddcb('0x19')](this));ami['on'](_0xddcb('0x1d'),this[_0xddcb('0x18')][_0xddcb('0x19')](this));ami['on']('custom:dialend',this[_0xddcb('0x18')][_0xddcb('0x19')](this));ami['on'](_0xddcb('0x1e'),this['syncCustomEvent']['bind'](this));ami['on']('custom:closedinteraction',this[_0xddcb('0x18')]['bind'](this));ami['on'](_0xddcb('0x1f'),this['syncCustomEvent'][_0xddcb('0x19')](this));ami['on'](_0xddcb('0x20'),this[_0xddcb('0x18')]['bind'](this));ami['on'](_0xddcb('0x21'),this[_0xddcb('0x18')][_0xddcb('0x19')](this));ami['on'](_0xddcb('0x22'),this[_0xddcb('0x18')]['bind'](this));}Trigger[_0xddcb('0x23')][_0xddcb('0x24')]=function(_0x4ecc2f,_0x3e7ed4,_0x1613bc){logger['info'](_0x4ecc2f,_0x3e7ed4,JSON[_0xddcb('0x25')](_0x1613bc));io['to'](_0x4ecc2f)['emit'](_0x3e7ed4,_0x1613bc);};Trigger[_0xddcb('0x23')][_0xddcb('0x18')]=function(_0x522eaa){this[_0xddcb('0x26')](_0x522eaa);};Trigger[_0xddcb('0x23')]['checkTriggers']=function(_0x5bd9d3){var _0x4618da;for(var _0x5e2cc9 in this[_0xddcb('0xd')]){if(this['triggers'][_0xddcb('0x27')](_0x5e2cc9)){if(this['triggers'][_0x5e2cc9][_0xddcb('0x28')]){_0x4618da=this[_0xddcb('0x29')](this['triggers'][_0x5e2cc9],_0x5bd9d3);if(_0x4618da){_[_0xddcb('0x2a')](_0x5bd9d3,_0x5bd9d3[_0xddcb('0x2b')]);for(var _0x230ae0=0x0,_0x1ac65a,_0x4864bb,_0x1ab182;_0x230ae0<this[_0xddcb('0xd')][_0x5e2cc9][_0xddcb('0x2c')][_0xddcb('0x2d')];_0x230ae0+=0x1){_0x1ac65a=this[_0xddcb('0xd')][_0x5e2cc9][_0xddcb('0x2c')][_0x230ae0];if(this[_0xddcb('0xe')][_0x5bd9d3[_0xddcb('0x2e')]]){switch(_0x1ac65a[_0xddcb('0x2f')][_0xddcb('0x30')]()){case'contactmanager':break;case _0xddcb('0x31'):case _0xddcb('0x32'):var _0x4be565={};switch(barAndWebActions[_0x1ac65a['data1']]){case _0xddcb('0x33'):_0x4be565[_0xddcb('0x34')]=_0x1ac65a[_0xddcb('0x35')];_0x4be565['html']=this['templates'][_0x1ac65a['data2']]?Mustache[_0xddcb('0x36')](this[_0xddcb('0x37')][_0x1ac65a['data2']]['html'],_0x5bd9d3):_0xddcb('0x38');break;case _0xddcb('0x2'):_0x4be565['uri']=this['buildUri'](_0x1ac65a['data2'],_0x5bd9d3,_['isNil'](_0x1ac65a['data3'])?!![]:parseInt(_0x1ac65a[_0xddcb('0x39')],0xa));if(_[_0xddcb('0x3a')](_0x1ac65a[_0xddcb('0x3b')])){_0x4be565[_0xddcb('0x3c')]='0';}else{_0x4be565[_0xddcb('0x3d')]=_0x1ac65a['data4'];_0x4be565[_0xddcb('0x3e')]=_[_0xddcb('0x3a')](_0x1ac65a['data5'])?_0xddcb('0x3f'):_0x1ac65a[_0xddcb('0x40')];_0x4be565[_0xddcb('0x41')]=_[_0xddcb('0x3a')](_0x1ac65a['data6'])?'600':_0x1ac65a[_0xddcb('0x42')];}break;case _0xddcb('0x43'):_0x4be565['winApplication']=_0x1ac65a[_0xddcb('0x35')]?Mustache[_0xddcb('0x36')](_0x1ac65a[_0xddcb('0x35')],_0x5bd9d3):'';_0x4be565[_0xddcb('0x44')]=_0x1ac65a[_0xddcb('0x39')]?Mustache['render'](_0x1ac65a[_0xddcb('0x39')],_0x5bd9d3):'';break;}this['emit'](util[_0xddcb('0x45')]('user:%s',this[_0xddcb('0xe')][_0x5bd9d3['interface']][_0xddcb('0x46')]),util[_0xddcb('0x45')](_0xddcb('0x47'),_0x1ac65a[_0xddcb('0x2f')]['toLowerCase'](),barAndWebActions[_0x1ac65a[_0xddcb('0x48')]]),_[_0xddcb('0x2a')](_0x4be565,_0x5bd9d3));break;case _0xddcb('0x49'):this[_0xddcb('0x24')](util[_0xddcb('0x45')](_0xddcb('0x4a'),this[_0xddcb('0xe')][_0x5bd9d3['interface']][_0xddcb('0x46')]),util['format'](_0xddcb('0x4b'),_0x1ac65a[_0xddcb('0x2f')][_0xddcb('0x30')]()),_['merge']({'ProjectId':parseInt(_0x1ac65a[_0xddcb('0x48')],0xa)},_0x5bd9d3));break;default:this[_0xddcb('0x24')](util[_0xddcb('0x45')](_0xddcb('0x4a'),this['agents'][_0x5bd9d3['interface']]['name']),util[_0xddcb('0x45')](_0xddcb('0x4b'),_0x1ac65a['action'][_0xddcb('0x30')]()),_['merge']({},_0x1ac65a,_0x5bd9d3));}}switch(_0x1ac65a[_0xddcb('0x2f')][_0xddcb('0x30')]()){case _0xddcb('0x4c'):cmContact[_0xddcb('0x4d')](this[_0xddcb('0xe')][_0x5bd9d3[_0xddcb('0x2e')]],_0x1ac65a,_0x5bd9d3,cmContactRpc);break;case'integration':integration['exec'](_0x1ac65a,_0x5bd9d3,this['accounts'],this[_0xddcb('0xe')][_0x5bd9d3['interface']],this[_0xddcb('0x4e')][_0x5bd9d3[_0xddcb('0x4f')]],this[_0xddcb('0xf')][_0x5bd9d3[_0xddcb('0x50')]]);break;case _0xddcb('0xc'):urlforward[_0xddcb('0x4d')](_0x1ac65a,_0x5bd9d3);break;}}}}}}};Trigger[_0xddcb('0x23')][_0xddcb('0x51')]=function(_0x3da92d,_0x329028,_0x296f79){var _0x26e747=url['parse'](Mustache[_0xddcb('0x36')](_0x3da92d,_0x329028),!![]);if(_0x296f79){_[_0xddcb('0x2a')](_0x26e747[_0xddcb('0x52')],_0x329028);}delete _0x26e747[_0xddcb('0x53')];return url['format'](_0x26e747);};Trigger[_0xddcb('0x23')][_0xddcb('0x29')]=function(_0x583794,_0x2f4f60){var _0x43acb2=!![],_0x5bf9d1=!![];if(_0x583794[_0xddcb('0x54')][_0xddcb('0x2d')]){_0x43acb2=_['every'](_0x583794[_0xddcb('0x54')],this[_0xddcb('0x55')](_0x2f4f60,_0x583794[_0xddcb('0x56')]));}if(_0x583794[_0xddcb('0x57')][_0xddcb('0x2d')]){_0x5bf9d1=_[_0xddcb('0x58')](_0x583794[_0xddcb('0x57')],this[_0xddcb('0x55')](_0x2f4f60,_0x583794[_0xddcb('0x56')]));}return _0x43acb2&&_0x5bf9d1;};Trigger[_0xddcb('0x23')][_0xddcb('0x55')]=function(_0x55a7e9,_0x1cceee){return function(_0x269316){switch(_0x269316['field']){case _0xddcb('0x59'):if(_0x55a7e9['channel']===_0x1cceee){if(_0x1cceee===_0xddcb('0x5a')){return _0x55a7e9[_0xddcb('0x5b')]?operators[_0x269316['operator']](Number(_0x269316[_0xddcb('0x5c')]),_0x55a7e9[_0xddcb('0x5b')]):![];}else{return _0x55a7e9[_[_0xddcb('0x5d')](_0x1cceee)+_0xddcb('0x5e')]?operators[_0x269316[_0xddcb('0x5f')]](Number(_0x269316['value']),_0x55a7e9[_[_0xddcb('0x5d')](_0x1cceee)+'AccountId']):![];}}break;case _0xddcb('0x60'):case _0xddcb('0x61'):if(_0x55a7e9['channel']===_0x1cceee){return _0x55a7e9[_0xddcb('0x62')]?operators[_0x269316['operator']](_0x269316[_0xddcb('0x5c')],_0x55a7e9[_0xddcb('0x62')]):![];}break;case _0xddcb('0x4f'):return _0x55a7e9[_0xddcb('0x4f')]?operators[_0x269316[_0xddcb('0x5f')]](_0x269316[_0xddcb('0x5c')],_0x55a7e9[_0xddcb('0x4f')]):![];case _0xddcb('0x63'):return _0x55a7e9['lastevent']?operators[_0x269316[_0xddcb('0x5f')]](_0x269316[_0xddcb('0x5c')],_0x55a7e9[_0xddcb('0x63')]):![];case _0xddcb('0x50'):return _0x55a7e9[_0xddcb('0x50')]?operators[_0x269316[_0xddcb('0x5f')]](_0x269316[_0xddcb('0x5c')],_0x55a7e9['routeId']):![];}return![];};};module[_0xddcb('0x64')]=Trigger;
\ No newline at end of file
index 2c9dea0..7a3bebe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fcc=['toString','base64','Searching\x20enduser\x20with\x20phone','info','entries','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/customers','POST','length','forEach','type','string','nameField','customField','toLowerCase','idField','content','variable','variableName','custom_fields','customVariable','Variable','name','priority','Creating\x20new\x20ticket...','merge','Subjects','phone','new','Motion','CTI','concat','getString','user','Fields','%s/customers/%d/cases','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','recordingURL','uniqueid','Authorization','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Ticket\x20ID\x20is:','integrationTab','user:%s','trigger:desk:display','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','error','recordingFormat','none','[OUTBOUND]','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','destcalleridname','destcalleridnum','The\x20Enduser\x20ID\x20is:','Ticket\x20created!','Displaying\x20ticket\x20to\x20agent...','newTab','%s/agent/tickets/%s','Desk\x20account\x20type\x20not\x20recognized','catch','[ABANDONED]','Recording\x20is\x20enabled!','request-promise','md5','util','desk','socket.io-emitter','localhost','emit','application/json','Getting\x20agent\x20with\x20email','format','%s/users','remoteUri','total_entries','find','_embedded','then','Agent\x20found!','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me','debug','stringify','defaults','GET','basic','%s:%s','username','token','%s/token:%s','Basic\x20%s'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x5fcc,0x1d2));var _0xc5fc=function(_0x1ae7b0,_0x2301a2){_0x1ae7b0=_0x1ae7b0-0x0;var _0x2d83dc=_0x5fcc[_0x1ae7b0];return _0x2d83dc;};'use strict';var _=require('lodash');var rp=require(_0xc5fc('0x0'));var md5=require(_0xc5fc('0x1'));var util=require(_0xc5fc('0x2'));var intUtil=require('./util');var logger=require('../../../../config/logger')(_0xc5fc('0x3'));var io=require(_0xc5fc('0x4'))({'host':_0xc5fc('0x5'),'port':0x18eb});function emit(_0x382db7,_0x3f3213,_0x2ce6b3){io['to'](_0x382db7)[_0xc5fc('0x6')](_0x3f3213,_0x2ce6b3);}var headers={'Content-Type':_0xc5fc('0x7'),'Accept':_0xc5fc('0x7')};function getUser(_0x217402,_0x285a62){logger['info'](_0xc5fc('0x8'),_0x285a62);return request({'uri':util[_0xc5fc('0x9')](_0xc5fc('0xa'),_0x217402[_0xc5fc('0xb')])})['then'](function(_0x1be6b6){if(_0x1be6b6[_0xc5fc('0xc')]){return _[_0xc5fc('0xd')](_0x1be6b6[_0xc5fc('0xe')]['entries'],{'email':_0x285a62});}})[_0xc5fc('0xf')](function(_0x187de8){if(_0x187de8){logger['info'](_0xc5fc('0x10'));return _0x187de8;}else{logger['info'](_0xc5fc('0x11'));return request({'uri':util[_0xc5fc('0x9')](_0xc5fc('0x12'),_0x217402[_0xc5fc('0xb')])});}});}function request(_0x4a1747){logger[_0xc5fc('0x13')]('[HTTP]',JSON[_0xc5fc('0x14')](_0x4a1747));return rp(_[_0xc5fc('0x15')](_0x4a1747,{'method':_0xc5fc('0x16'),'headers':headers,'json':!![]}));}function getAuth(_0x19030b){var _0x590454;if(_0x19030b['authType']===_0xc5fc('0x17')){_0x590454=util[_0xc5fc('0x9')](_0xc5fc('0x18'),_0x19030b[_0xc5fc('0x19')],_0x19030b['password']);}else if(_0x19030b['authType']===_0xc5fc('0x1a')){_0x590454=util['format'](_0xc5fc('0x1b'),_0x19030b[_0xc5fc('0x19')],_0x19030b[_0xc5fc('0x1a')]);}return util[_0xc5fc('0x9')](_0xc5fc('0x1c'),new Buffer(_0x590454)[_0xc5fc('0x1d')](_0xc5fc('0x1e')));}function getEndUser(_0x2ee5b9,_0x4a9c8b,_0x1c9834){logger['info'](_0xc5fc('0x1f'),_0x1c9834);return request({'uri':util[_0xc5fc('0x9')]('%s/customers/search',_0x2ee5b9['remoteUri']),'qs':{'phone':_0x1c9834}})['then'](function(_0x3ccff3){if(_0x3ccff3[_0xc5fc('0xc')]){logger[_0xc5fc('0x20')]('Enduser\x20found!');return _0x3ccff3[_0xc5fc('0xe')][_0xc5fc('0x21')][0x0];}else{logger['info'](_0xc5fc('0x22'));return request({'uri':util[_0xc5fc('0x9')](_0xc5fc('0x23'),_0x2ee5b9[_0xc5fc('0xb')]),'method':_0xc5fc('0x24'),'body':{'first_name':_0x4a9c8b,'title':_0x4a9c8b,'phone_numbers':[{'type':'work','value':_0x1c9834}]}});}});}function getTags(_0x27f782,_0x2f2606){var _0x7188c6=[];if(_0x27f782&&_0x27f782[_0xc5fc('0x25')]>0x0){_0x7188c6=_['map'](_0x27f782,_0x2f2606);}return _0x7188c6;}function getCustomFields(_0x1fa38b,_0x194488){var _0xe1f4c1=[];var _0xdabc5d={'custom_fields':{}};if(_0x1fa38b[_0xc5fc('0x25')]>0x0){_[_0xc5fc('0x26')](_0x1fa38b,function(_0x5f278b){if(_0x5f278b[_0xc5fc('0x27')]===_0xc5fc('0x28')&&_0x5f278b[_0xc5fc('0x29')]&&!_0x5f278b[_0xc5fc('0x2a')]){_0xdabc5d[_0x5f278b[_0xc5fc('0x29')][_0xc5fc('0x2b')]()]=_0x5f278b['content'][_0xc5fc('0x1d')]();}else if(_0x5f278b['type']===_0xc5fc('0x28')&&_0x5f278b[_0xc5fc('0x2c')]&&_0x5f278b[_0xc5fc('0x2a')]){_0xdabc5d['custom_fields'][_0x5f278b[_0xc5fc('0x2c')]]=_0x5f278b[_0xc5fc('0x2d')][_0xc5fc('0x1d')]();}else if(_0x5f278b[_0xc5fc('0x27')]===_0xc5fc('0x2e')&&_0x5f278b['variableName']&&_0x5f278b[_0xc5fc('0x2c')]&&_0x5f278b['customField']){_0x194488[_0x5f278b[_0xc5fc('0x2f')]]&&(_0xdabc5d[_0xc5fc('0x30')][_0x5f278b['idField']]=_0x194488[_0x5f278b[_0xc5fc('0x2f')]][_0xc5fc('0x1d')]());}else if(_0x5f278b[_0xc5fc('0x27')]===_0xc5fc('0x31')&&_0x5f278b['Variable']&&_0x5f278b[_0xc5fc('0x32')][_0xc5fc('0x33')]&&_0x5f278b[_0xc5fc('0x2c')]&&_0x5f278b[_0xc5fc('0x2a')]){_0x194488[_0x5f278b[_0xc5fc('0x32')][_0xc5fc('0x33')][_0xc5fc('0x2b')]()]&&(_0xdabc5d[_0xc5fc('0x30')][_0x5f278b[_0xc5fc('0x2c')]]=_0x194488[_0x5f278b[_0xc5fc('0x32')][_0xc5fc('0x33')][_0xc5fc('0x2b')]()][_0xc5fc('0x1d')]());}});}if(_0xdabc5d[_0xc5fc('0x34')]){_0xdabc5d[_0xc5fc('0x34')]=Number(_0xdabc5d['priority']);}return _0xdabc5d;}function getTicket(_0x183228,_0xd219b3,_0x2f181e,_0x1a842d,_0x3d795b){logger[_0xc5fc('0x20')](_0xc5fc('0x35'));var _0x9dde6e=_[_0xc5fc('0x36')]({'subject':intUtil['getString'](_0x1a842d[_0xc5fc('0x37')],_0x3d795b,'\x20'),'type':_0xc5fc('0x38'),'status':_0xc5fc('0x39'),'labels':['xCALLY',_0xc5fc('0x3a'),_0xc5fc('0x3b')][_0xc5fc('0x3c')](getTags(_0x1a842d['Tags'],_0xc5fc('0x33'))),'description':intUtil[_0xc5fc('0x3d')](_0x1a842d['Descriptions'],_0x3d795b,'\x0a'),'_links':{'assigned_user':{'href':util[_0xc5fc('0x9')]('/api/v2/users/%d',_0xd219b3['id']),'class':_0xc5fc('0x3e')}},'message':{'direction':'in','body':intUtil[_0xc5fc('0x3d')](_0x1a842d['Descriptions'],_0x3d795b,'\x0a')}},getCustomFields(_0x1a842d[_0xc5fc('0x3f')],_0x3d795b));return request({'uri':util[_0xc5fc('0x9')](_0xc5fc('0x40'),_0x183228[_0xc5fc('0xb')],_0x2f181e['id']),'method':'POST','body':_0x9dde6e});}exports[_0xc5fc('0x41')]=function(_0xfb869f,_0x2f4599,_0x5b12f2,_0x27fbd4,_0x3d5c76,_0x25d08f){var _0xcf9240,_0x47791b;_0x25d08f[_0xc5fc('0xb')]=intUtil[_0xc5fc('0x42')](_0x25d08f[_0xc5fc('0xb')]);_0x25d08f[_0xc5fc('0x43')]=intUtil['stripTrailingSlash'](_0x25d08f[_0xc5fc('0x43')]);if(_0x3d5c76&&_0x3d5c76[_0xc5fc('0x44')]){logger['info'](_0xc5fc('0x45'),'Recording\x20is\x20enabled!');_0x2f4599[_0xc5fc('0x46')]=util[_0xc5fc('0x9')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x25d08f[_0xc5fc('0x43')],_0x2f4599[_0xc5fc('0x47')],md5(_0x2f4599['uniqueid']));}else{_0x2f4599[_0xc5fc('0x46')]='';}headers[_0xc5fc('0x48')]=getAuth(_0x25d08f);return getUser(_0x25d08f,_0x27fbd4[_0xc5fc('0x49')])['then'](function(_0x38ab9b){_0xcf9240=_0x38ab9b;logger[_0xc5fc('0x20')](_0xc5fc('0x4a'),_0xcf9240['id']);return getEndUser(_0x25d08f,_0x2f4599[_0xc5fc('0x4b')],_0x2f4599[_0xc5fc('0x4c')]);})[_0xc5fc('0xf')](function(_0x458ed1){_0x47791b=_0x458ed1;logger[_0xc5fc('0x20')]('The\x20Enduser\x20ID\x20is:',_0x47791b['id']);return getTicket(_0x25d08f,_0xcf9240,_0x47791b,_0x5b12f2,_0x2f4599);})[_0xc5fc('0xf')](function(_0x3f37ce){if(_0x3f37ce){logger['info']('Ticket\x20created!');logger[_0xc5fc('0x20')](_0xc5fc('0x4d'),_0x3f37ce['id']);switch(_0x25d08f[_0xc5fc('0x27')]){case _0xc5fc('0x4e'):logger[_0xc5fc('0x20')](_0xc5fc('0x45'),'Displaying\x20ticket\x20to\x20agent...');emit(util[_0xc5fc('0x9')](_0xc5fc('0x4f'),_0x27fbd4[_0xc5fc('0x33')]),_0xc5fc('0x50'),{'recordId':_0x3f37ce['id']});break;case'newTab':logger[_0xc5fc('0x20')](_0xc5fc('0x45'),_0xc5fc('0x51'));emit(util['format'](_0xc5fc('0x4f'),_0x27fbd4[_0xc5fc('0x33')]),_0xc5fc('0x52'),{'uri':util['format']('https://xcally.desk.com/web/agent/case/%d',_0x3f37ce['id'])});break;default:logger[_0xc5fc('0x53')]('[QUEUE]','Desk\x20account\x20type\x20not\x20recognized');}}})['catch'](function(_0x49cd56){console[_0xc5fc('0x53')](_0x49cd56);logger[_0xc5fc('0x53')](_0xc5fc('0x45'),JSON[_0xc5fc('0x14')](_0x49cd56));});};exports['outbound']=function(_0x5b2f63,_0xd18e31,_0x1f5d84,_0x1d0095,_0x13c74d,_0x4a99d6,_0x5debba){var _0xf0611c,_0x51718c;_0x4a99d6[_0xc5fc('0xb')]=intUtil[_0xc5fc('0x42')](_0x4a99d6[_0xc5fc('0xb')]);_0x4a99d6[_0xc5fc('0x43')]=intUtil['stripTrailingSlash'](_0x4a99d6[_0xc5fc('0x43')]);if(_0x5debba&&_0x5debba[_0xc5fc('0x54')]&&_0x5debba[_0xc5fc('0x54')]!==_0xc5fc('0x55')){logger['info'](_0xc5fc('0x56'),'Recording\x20is\x20enabled!');_0xd18e31['recordingURL']=util[_0xc5fc('0x9')](_0xc5fc('0x57'),_0x4a99d6[_0xc5fc('0x43')],_0xd18e31[_0xc5fc('0x47')],md5(_0xd18e31['uniqueid']));}headers['Authorization']=getAuth(_0x4a99d6);return getUser(_0x4a99d6,_0x1d0095[_0xc5fc('0x49')])[_0xc5fc('0xf')](function(_0x5681cd){_0xf0611c=_0x5681cd;logger['info'](_0xc5fc('0x4a'),_0xf0611c['id']);return getEndUser(_0x4a99d6,_0xd18e31[_0xc5fc('0x58')],_0xd18e31[_0xc5fc('0x59')]);})[_0xc5fc('0xf')](function(_0x437091){_0x51718c=_0x437091;logger[_0xc5fc('0x20')](_0xc5fc('0x5a'),_0x51718c['id']);return getTicket(_0x4a99d6,_0xf0611c,_0x51718c,_0x1f5d84,_0xd18e31);})[_0xc5fc('0xf')](function(_0x199209){if(_0x199209){logger[_0xc5fc('0x20')](_0xc5fc('0x5b'));logger[_0xc5fc('0x20')](_0xc5fc('0x4d'),_0x199209['id']);switch(_0x4a99d6[_0xc5fc('0x27')]){case _0xc5fc('0x4e'):logger[_0xc5fc('0x20')](_0xc5fc('0x45'),_0xc5fc('0x5c'));emit(util[_0xc5fc('0x9')](_0xc5fc('0x4f'),_0x1d0095[_0xc5fc('0x33')]),_0xc5fc('0x50'),{'recordId':_0x199209['id']});break;case _0xc5fc('0x5d'):logger[_0xc5fc('0x20')]('[QUEUE]',_0xc5fc('0x51'));emit(util[_0xc5fc('0x9')](_0xc5fc('0x4f'),_0x1d0095[_0xc5fc('0x33')]),_0xc5fc('0x52'),{'uri':util['format'](_0xc5fc('0x5e'),_0x4a99d6['remoteUri'],_0x199209['id'])});break;default:logger[_0xc5fc('0x53')](_0xc5fc('0x56'),_0xc5fc('0x5f'));}}})[_0xc5fc('0x60')](function(_0xf0e85b){logger[_0xc5fc('0x53')]('[OUTBOUND]',JSON[_0xc5fc('0x14')](_0xf0e85b));});};exports['abandoned']=function(_0xc6c3d8,_0x39a469,_0x448d0d,_0x505906,_0x404162,_0x55bccf){var _0x5c387a,_0x49313d;_0x55bccf[_0xc5fc('0xb')]=intUtil[_0xc5fc('0x42')](_0x55bccf[_0xc5fc('0xb')]);_0x55bccf['serverUrl']=intUtil[_0xc5fc('0x42')](_0x55bccf[_0xc5fc('0x43')]);if(_0x404162&&_0x404162[_0xc5fc('0x44')]){logger[_0xc5fc('0x20')](_0xc5fc('0x61'),_0xc5fc('0x62'));_0x39a469['recordingURL']=util['format'](_0xc5fc('0x57'),_0x55bccf['serverUrl'],_0x39a469['uniqueid'],md5(_0x39a469[_0xc5fc('0x47')]));}else{_0x39a469[_0xc5fc('0x46')]='';}headers[_0xc5fc('0x48')]=getAuth(_0x55bccf);return getUser(_0x55bccf)['then'](function(_0x34c5d2){_0x5c387a=_0x34c5d2;logger[_0xc5fc('0x20')](_0xc5fc('0x4a'),_0x5c387a['id']);return getEndUser(_0x55bccf,_0x39a469['calleridname'],_0x39a469['calleridnum']);})[_0xc5fc('0xf')](function(_0x49c33b){_0x49313d=_0x49c33b;logger['info'](_0xc5fc('0x5a'),_0x49313d['id']);return getTicket(_0x55bccf,_0x5c387a,_0x49313d,_0x448d0d,_0x39a469);})[_0xc5fc('0xf')](function(_0x4f7631){if(_0x4f7631){logger[_0xc5fc('0x20')](_0xc5fc('0x5b'));logger[_0xc5fc('0x20')](_0xc5fc('0x4d'),_0x4f7631['id']);}})[_0xc5fc('0x60')](function(_0x4f2399){logger[_0xc5fc('0x53')](_0xc5fc('0x61'),JSON[_0xc5fc('0x14')](_0x4f2399));});};
\ No newline at end of file
+var _0x9fdf=['Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent...','user:%s','trigger:desk:display','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','https://xcally.desk.com/web/agent/case/%d','catch','error','stringify','recordingFormat','none','[OUTBOUND]','destcalleridnum','newTab','%s/agent/tickets/%s','Desk\x20account\x20type\x20not\x20recognized','abandoned','util','./util','desk','localhost','emit','application/json','info','Getting\x20agent\x20with\x20email','format','%s/users','remoteUri','then','total_entries','entries','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me','debug','defaults','GET','%s:%s','password','authType','token','%s/token:%s','username','toString','Searching\x20enduser\x20with\x20phone','%s/customers/search','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/customers','POST','length','type','string','nameField','toLowerCase','customField','custom_fields','idField','content','variable','variableName','customVariable','Variable','name','priority','Creating\x20new\x20ticket...','merge','getString','Subjects','phone','xCALLY','CTI','concat','/api/v2/users/%d','user','Fields','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]'];(function(_0x577f89,_0x1ee711){var _0x8aa65=function(_0x149269){while(--_0x149269){_0x577f89['push'](_0x577f89['shift']());}};_0x8aa65(++_0x1ee711);}(_0x9fdf,0x78));var _0xf9fd=function(_0x131c15,_0x1c1732){_0x131c15=_0x131c15-0x0;var _0x15e7ae=_0x9fdf[_0x131c15];return _0x15e7ae;};'use strict';var _=require('lodash');var rp=require('request-promise');var md5=require('md5');var util=require(_0xf9fd('0x0'));var intUtil=require(_0xf9fd('0x1'));var logger=require('../../../../config/logger')(_0xf9fd('0x2'));var io=require('socket.io-emitter')({'host':_0xf9fd('0x3'),'port':0x18eb});function emit(_0x4b2c78,_0x5e66ac,_0x98e317){io['to'](_0x4b2c78)[_0xf9fd('0x4')](_0x5e66ac,_0x98e317);}var headers={'Content-Type':_0xf9fd('0x5'),'Accept':_0xf9fd('0x5')};function getUser(_0x104575,_0x3e42cc){logger[_0xf9fd('0x6')](_0xf9fd('0x7'),_0x3e42cc);return request({'uri':util[_0xf9fd('0x8')](_0xf9fd('0x9'),_0x104575[_0xf9fd('0xa')])})[_0xf9fd('0xb')](function(_0x48b940){if(_0x48b940[_0xf9fd('0xc')]){return _['find'](_0x48b940['_embedded'][_0xf9fd('0xd')],{'email':_0x3e42cc});}})[_0xf9fd('0xb')](function(_0x177cb7){if(_0x177cb7){logger[_0xf9fd('0x6')]('Agent\x20found!');return _0x177cb7;}else{logger[_0xf9fd('0x6')](_0xf9fd('0xe'));return request({'uri':util[_0xf9fd('0x8')](_0xf9fd('0xf'),_0x104575[_0xf9fd('0xa')])});}});}function request(_0x5219e0){logger[_0xf9fd('0x10')]('[HTTP]',JSON['stringify'](_0x5219e0));return rp(_[_0xf9fd('0x11')](_0x5219e0,{'method':_0xf9fd('0x12'),'headers':headers,'json':!![]}));}function getAuth(_0x4aeea2){var _0x31033a;if(_0x4aeea2['authType']==='basic'){_0x31033a=util[_0xf9fd('0x8')](_0xf9fd('0x13'),_0x4aeea2['username'],_0x4aeea2[_0xf9fd('0x14')]);}else if(_0x4aeea2[_0xf9fd('0x15')]===_0xf9fd('0x16')){_0x31033a=util[_0xf9fd('0x8')](_0xf9fd('0x17'),_0x4aeea2[_0xf9fd('0x18')],_0x4aeea2[_0xf9fd('0x16')]);}return util[_0xf9fd('0x8')]('Basic\x20%s',new Buffer(_0x31033a)[_0xf9fd('0x19')]('base64'));}function getEndUser(_0x2bf687,_0x21cfde,_0x3770e5){logger['info'](_0xf9fd('0x1a'),_0x3770e5);return request({'uri':util['format'](_0xf9fd('0x1b'),_0x2bf687['remoteUri']),'qs':{'phone':_0x3770e5}})['then'](function(_0x318e9a){if(_0x318e9a[_0xf9fd('0xc')]){logger[_0xf9fd('0x6')]('Enduser\x20found!');return _0x318e9a['_embedded'][_0xf9fd('0xd')][0x0];}else{logger['info'](_0xf9fd('0x1c'));return request({'uri':util['format'](_0xf9fd('0x1d'),_0x2bf687[_0xf9fd('0xa')]),'method':_0xf9fd('0x1e'),'body':{'first_name':_0x21cfde,'title':_0x21cfde,'phone_numbers':[{'type':'work','value':_0x3770e5}]}});}});}function getTags(_0x56a647,_0x3b9d80){var _0x14b19c=[];if(_0x56a647&&_0x56a647[_0xf9fd('0x1f')]>0x0){_0x14b19c=_['map'](_0x56a647,_0x3b9d80);}return _0x14b19c;}function getCustomFields(_0xcf456c,_0x5041f3){var _0x1da995=[];var _0x3fd3cd={'custom_fields':{}};if(_0xcf456c[_0xf9fd('0x1f')]>0x0){_['forEach'](_0xcf456c,function(_0x376945){if(_0x376945[_0xf9fd('0x20')]===_0xf9fd('0x21')&&_0x376945[_0xf9fd('0x22')]&&!_0x376945['customField']){_0x3fd3cd[_0x376945['nameField'][_0xf9fd('0x23')]()]=_0x376945['content'][_0xf9fd('0x19')]();}else if(_0x376945[_0xf9fd('0x20')]===_0xf9fd('0x21')&&_0x376945['idField']&&_0x376945[_0xf9fd('0x24')]){_0x3fd3cd[_0xf9fd('0x25')][_0x376945[_0xf9fd('0x26')]]=_0x376945[_0xf9fd('0x27')][_0xf9fd('0x19')]();}else if(_0x376945[_0xf9fd('0x20')]===_0xf9fd('0x28')&&_0x376945['variableName']&&_0x376945[_0xf9fd('0x26')]&&_0x376945[_0xf9fd('0x24')]){_0x5041f3[_0x376945[_0xf9fd('0x29')]]&&(_0x3fd3cd[_0xf9fd('0x25')][_0x376945[_0xf9fd('0x26')]]=_0x5041f3[_0x376945[_0xf9fd('0x29')]]['toString']());}else if(_0x376945[_0xf9fd('0x20')]===_0xf9fd('0x2a')&&_0x376945['Variable']&&_0x376945[_0xf9fd('0x2b')][_0xf9fd('0x2c')]&&_0x376945[_0xf9fd('0x26')]&&_0x376945['customField']){_0x5041f3[_0x376945[_0xf9fd('0x2b')][_0xf9fd('0x2c')]['toLowerCase']()]&&(_0x3fd3cd[_0xf9fd('0x25')][_0x376945[_0xf9fd('0x26')]]=_0x5041f3[_0x376945['Variable'][_0xf9fd('0x2c')][_0xf9fd('0x23')]()][_0xf9fd('0x19')]());}});}if(_0x3fd3cd['priority']){_0x3fd3cd[_0xf9fd('0x2d')]=Number(_0x3fd3cd['priority']);}return _0x3fd3cd;}function getTicket(_0x9e4271,_0x2f2c67,_0x33ce5f,_0x2ddc27,_0x322165){logger[_0xf9fd('0x6')](_0xf9fd('0x2e'));var _0x597f09=_[_0xf9fd('0x2f')]({'subject':intUtil[_0xf9fd('0x30')](_0x2ddc27[_0xf9fd('0x31')],_0x322165,'\x20'),'type':_0xf9fd('0x32'),'status':'new','labels':[_0xf9fd('0x33'),'Motion',_0xf9fd('0x34')][_0xf9fd('0x35')](getTags(_0x2ddc27['Tags'],_0xf9fd('0x2c'))),'description':intUtil[_0xf9fd('0x30')](_0x2ddc27['Descriptions'],_0x322165,'\x0a'),'_links':{'assigned_user':{'href':util[_0xf9fd('0x8')](_0xf9fd('0x36'),_0x2f2c67['id']),'class':_0xf9fd('0x37')}},'message':{'direction':'in','body':intUtil[_0xf9fd('0x30')](_0x2ddc27['Descriptions'],_0x322165,'\x0a')}},getCustomFields(_0x2ddc27[_0xf9fd('0x38')],_0x322165));return request({'uri':util[_0xf9fd('0x8')]('%s/customers/%d/cases',_0x9e4271[_0xf9fd('0xa')],_0x33ce5f['id']),'method':_0xf9fd('0x1e'),'body':_0x597f09});}exports[_0xf9fd('0x39')]=function(_0x4db2ec,_0x843323,_0x29c519,_0x37be11,_0x2831d3,_0x164f7d){var _0x582c26,_0x54a165;_0x164f7d['remoteUri']=intUtil[_0xf9fd('0x3a')](_0x164f7d['remoteUri']);_0x164f7d[_0xf9fd('0x3b')]=intUtil['stripTrailingSlash'](_0x164f7d[_0xf9fd('0x3b')]);if(_0x2831d3&&_0x2831d3[_0xf9fd('0x3c')]){logger[_0xf9fd('0x6')](_0xf9fd('0x3d'),_0xf9fd('0x3e'));_0x843323[_0xf9fd('0x3f')]=util[_0xf9fd('0x8')](_0xf9fd('0x40'),_0x164f7d['serverUrl'],_0x843323['uniqueid'],md5(_0x843323[_0xf9fd('0x41')]));}else{_0x843323[_0xf9fd('0x3f')]='';}headers[_0xf9fd('0x42')]=getAuth(_0x164f7d);return getUser(_0x164f7d,_0x37be11[_0xf9fd('0x43')])[_0xf9fd('0xb')](function(_0x23f112){_0x582c26=_0x23f112;logger[_0xf9fd('0x6')](_0xf9fd('0x44'),_0x582c26['id']);return getEndUser(_0x164f7d,_0x843323[_0xf9fd('0x45')],_0x843323[_0xf9fd('0x46')]);})[_0xf9fd('0xb')](function(_0x3f3c6e){_0x54a165=_0x3f3c6e;logger[_0xf9fd('0x6')](_0xf9fd('0x47'),_0x54a165['id']);return getTicket(_0x164f7d,_0x582c26,_0x54a165,_0x29c519,_0x843323);})[_0xf9fd('0xb')](function(_0x173417){if(_0x173417){logger[_0xf9fd('0x6')](_0xf9fd('0x48'));logger['info'](_0xf9fd('0x49'),_0x173417['id']);switch(_0x164f7d[_0xf9fd('0x20')]){case'integrationTab':logger[_0xf9fd('0x6')]('[QUEUE]',_0xf9fd('0x4a'));emit(util[_0xf9fd('0x8')](_0xf9fd('0x4b'),_0x37be11[_0xf9fd('0x2c')]),_0xf9fd('0x4c'),{'recordId':_0x173417['id']});break;case'newTab':logger['info'](_0xf9fd('0x3d'),_0xf9fd('0x4d'));emit(util[_0xf9fd('0x8')](_0xf9fd('0x4b'),_0x37be11[_0xf9fd('0x2c')]),_0xf9fd('0x4e'),{'uri':util[_0xf9fd('0x8')](_0xf9fd('0x4f'),_0x173417['id'])});break;default:logger['error'](_0xf9fd('0x3d'),'Desk\x20account\x20type\x20not\x20recognized');}}})[_0xf9fd('0x50')](function(_0x24740d){console[_0xf9fd('0x51')](_0x24740d);logger[_0xf9fd('0x51')]('[QUEUE]',JSON[_0xf9fd('0x52')](_0x24740d));});};exports['outbound']=function(_0x2d3a9d,_0x22e35c,_0x472b85,_0x3d76af,_0x1133e7,_0x46262e,_0x227556){var _0x29d5d9,_0x37a684;_0x46262e[_0xf9fd('0xa')]=intUtil[_0xf9fd('0x3a')](_0x46262e[_0xf9fd('0xa')]);_0x46262e['serverUrl']=intUtil[_0xf9fd('0x3a')](_0x46262e[_0xf9fd('0x3b')]);if(_0x227556&&_0x227556[_0xf9fd('0x53')]&&_0x227556[_0xf9fd('0x53')]!==_0xf9fd('0x54')){logger['info'](_0xf9fd('0x55'),'Recording\x20is\x20enabled!');_0x22e35c['recordingURL']=util['format'](_0xf9fd('0x40'),_0x46262e[_0xf9fd('0x3b')],_0x22e35c[_0xf9fd('0x41')],md5(_0x22e35c[_0xf9fd('0x41')]));}headers['Authorization']=getAuth(_0x46262e);return getUser(_0x46262e,_0x3d76af[_0xf9fd('0x43')])[_0xf9fd('0xb')](function(_0x13f0ab){_0x29d5d9=_0x13f0ab;logger[_0xf9fd('0x6')]('The\x20User\x20ID\x20is:',_0x29d5d9['id']);return getEndUser(_0x46262e,_0x22e35c['destcalleridname'],_0x22e35c[_0xf9fd('0x56')]);})['then'](function(_0x1addb8){_0x37a684=_0x1addb8;logger['info']('The\x20Enduser\x20ID\x20is:',_0x37a684['id']);return getTicket(_0x46262e,_0x29d5d9,_0x37a684,_0x472b85,_0x22e35c);})[_0xf9fd('0xb')](function(_0x56b8d1){if(_0x56b8d1){logger[_0xf9fd('0x6')]('Ticket\x20created!');logger[_0xf9fd('0x6')](_0xf9fd('0x49'),_0x56b8d1['id']);switch(_0x46262e[_0xf9fd('0x20')]){case'integrationTab':logger[_0xf9fd('0x6')](_0xf9fd('0x3d'),_0xf9fd('0x4a'));emit(util['format'](_0xf9fd('0x4b'),_0x3d76af[_0xf9fd('0x2c')]),'trigger:desk:display',{'recordId':_0x56b8d1['id']});break;case _0xf9fd('0x57'):logger[_0xf9fd('0x6')](_0xf9fd('0x3d'),_0xf9fd('0x4d'));emit(util[_0xf9fd('0x8')](_0xf9fd('0x4b'),_0x3d76af[_0xf9fd('0x2c')]),_0xf9fd('0x4e'),{'uri':util['format'](_0xf9fd('0x58'),_0x46262e['remoteUri'],_0x56b8d1['id'])});break;default:logger['error'](_0xf9fd('0x55'),_0xf9fd('0x59'));}}})['catch'](function(_0x249fd3){logger['error']('[OUTBOUND]',JSON[_0xf9fd('0x52')](_0x249fd3));});};exports[_0xf9fd('0x5a')]=function(_0x45e159,_0x507ea5,_0x42911c,_0x48ac24,_0x2b4d58,_0x169c95){var _0x430f6b,_0xb1b347;_0x169c95['remoteUri']=intUtil[_0xf9fd('0x3a')](_0x169c95[_0xf9fd('0xa')]);_0x169c95[_0xf9fd('0x3b')]=intUtil[_0xf9fd('0x3a')](_0x169c95['serverUrl']);if(_0x2b4d58&&_0x2b4d58['monitor_format']){logger[_0xf9fd('0x6')]('[ABANDONED]',_0xf9fd('0x3e'));_0x507ea5[_0xf9fd('0x3f')]=util[_0xf9fd('0x8')](_0xf9fd('0x40'),_0x169c95[_0xf9fd('0x3b')],_0x507ea5['uniqueid'],md5(_0x507ea5[_0xf9fd('0x41')]));}else{_0x507ea5[_0xf9fd('0x3f')]='';}headers[_0xf9fd('0x42')]=getAuth(_0x169c95);return getUser(_0x169c95)['then'](function(_0x46d54a){_0x430f6b=_0x46d54a;logger['info'](_0xf9fd('0x44'),_0x430f6b['id']);return getEndUser(_0x169c95,_0x507ea5[_0xf9fd('0x45')],_0x507ea5['calleridnum']);})[_0xf9fd('0xb')](function(_0x2a6744){_0xb1b347=_0x2a6744;logger[_0xf9fd('0x6')](_0xf9fd('0x47'),_0xb1b347['id']);return getTicket(_0x169c95,_0x430f6b,_0xb1b347,_0x42911c,_0x507ea5);})[_0xf9fd('0xb')](function(_0x5e48aa){if(_0x5e48aa){logger[_0xf9fd('0x6')]('Ticket\x20created!');logger[_0xf9fd('0x6')](_0xf9fd('0x49'),_0x5e48aa['id']);}})['catch'](function(_0x2fba4e){logger[_0xf9fd('0x51')]('[ABANDONED]',JSON['stringify'](_0x2fba4e));});};
\ No newline at end of file
index 3ea13af..0335aee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf4eb=['calleridname','calleridnum','lodash','../../../../config/logger','localhost','application/json','emit','info','Creating\x20new\x20ticket...','merge','format','Caller\x20-\x20%s','getString','Descriptions','Tags','custom_fields','mapValues','keyBy','value','POST','then','Ticket\x20created!','length','Agent\x20found!','contact','email','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/api/v2/agents/me','remoteUri','Admin\x20account\x20selected.','Searching\x20enduser\x20with\x20phone','%s/api/v2/contacts','Enduser\x20found!','Basic\x20%s','toString','debug','[HTTP]','defaults','GET','string','customField','nameField','toLowerCase','type','idField','content','variable','push','variableName','customVariable','Variable','name','queue','stripTrailingSlash','serverUrl','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','Authorization','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','error','stringify','outbound','recordingFormat','none','The\x20User\x20ID\x20is:','destcalleridname','catch','abandoned','monitor_format','[ABANDONED]'];(function(_0x3998f5,_0x28f180){var _0x8382e4=function(_0x3f9661){while(--_0x3f9661){_0x3998f5['push'](_0x3998f5['shift']());}};_0x8382e4(++_0x28f180);}(_0xf4eb,0xec));var _0xbf4e=function(_0xd68539,_0x59e2da){_0xd68539=_0xd68539-0x0;var _0x65d7c0=_0xf4eb[_0xd68539];return _0x65d7c0;};'use strict';var _=require(_0xbf4e('0x0'));var rp=require('request-promise');var md5=require('md5');var util=require('util');var intUtil=require('./util');var logger=require(_0xbf4e('0x1'))('freshdesk');var io=require('socket.io-emitter')({'host':_0xbf4e('0x2'),'port':0x18eb});var headers={'Content-Type':_0xbf4e('0x3'),'Accept':_0xbf4e('0x3')};function emit(_0x18c665,_0xa4dcf5,_0x2fcfed){io['to'](_0x18c665)[_0xbf4e('0x4')](_0xa4dcf5,_0x2fcfed);}function getTicket(_0x540736,_0x449d55,_0x5013c2,_0x5e23d4,_0xa4280c){logger[_0xbf4e('0x5')](_0xbf4e('0x6'));var _0xc86f04=_[_0xbf4e('0x7')]({'responder_id':_0x449d55['id'],'requester_id':_0x5013c2['id'],'name':util[_0xbf4e('0x8')](_0xbf4e('0x9'),_0xa4280c['calleridname']),'phone':_0xa4280c['calleridnum'],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil[_0xbf4e('0xa')](_0x5e23d4['Subjects'],_0xa4280c,'\x20'),'description':intUtil[_0xbf4e('0xa')](_0x5e23d4[_0xbf4e('0xb')],_0xa4280c,'<br>'),'tags':getTags(_0x5e23d4[_0xbf4e('0xc')],'name')},getCustomFields(_0x5e23d4['Fields'],_0xa4280c));_0xc86f04[_0xbf4e('0xd')]=_[_0xbf4e('0xe')](_[_0xbf4e('0xf')](_0xc86f04[_0xbf4e('0xd')],'id'),_0xbf4e('0x10'));return request({'uri':util[_0xbf4e('0x8')]('%s/api/v2/tickets',_0x540736['remoteUri']),'method':_0xbf4e('0x11'),'body':_0xc86f04})[_0xbf4e('0x12')](function(_0x28fc6b){logger['info'](_0xbf4e('0x13'));return _0x28fc6b;});}function getUser(_0x2c292c,_0x912fc0){logger[_0xbf4e('0x5')]('Getting\x20agent\x20with\x20email',_0x912fc0);return request({'uri':util[_0xbf4e('0x8')]('%s/api/v2/agents',_0x2c292c['remoteUri']),'qs':{'email':_0x912fc0}})['then'](function(_0x4f8762){if(_0x4f8762[_0xbf4e('0x14')]){logger[_0xbf4e('0x5')](_0xbf4e('0x15'));return _['find'](_0x4f8762,function(_0x5e343c){return _0x5e343c[_0xbf4e('0x16')][_0xbf4e('0x17')]===_0x912fc0;});}else{logger[_0xbf4e('0x5')](_0xbf4e('0x18'));return request({'uri':util[_0xbf4e('0x8')](_0xbf4e('0x19'),_0x2c292c[_0xbf4e('0x1a')])})[_0xbf4e('0x12')](function(_0xd09e12){logger[_0xbf4e('0x5')](_0xbf4e('0x1b'));return _0xd09e12;});}});}function getEndUser(_0x59bd84,_0x1ff2ec,_0x2e7673){logger['info'](_0xbf4e('0x1c'),_0x2e7673);return request({'uri':util[_0xbf4e('0x8')](_0xbf4e('0x1d'),_0x59bd84[_0xbf4e('0x1a')]),'qs':{'phone':_0x2e7673}})[_0xbf4e('0x12')](function(_0x4a0243){if(_0x4a0243[_0xbf4e('0x14')]){logger[_0xbf4e('0x5')](_0xbf4e('0x1e'));return _['find'](_0x4a0243,{'phone':_0x2e7673});}else{logger[_0xbf4e('0x5')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util['format'](_0xbf4e('0x1d'),_0x59bd84['remoteUri']),'method':_0xbf4e('0x11'),'body':{'name':_0x1ff2ec,'phone':_0x2e7673}})[_0xbf4e('0x12')](function(_0x4021a9){logger[_0xbf4e('0x5')]('Enduser\x20created.');return _0x4021a9;});}});}function getAuth(_0x2d4686){return util[_0xbf4e('0x8')](_0xbf4e('0x1f'),new Buffer(_0x2d4686['apiKey']+':X')[_0xbf4e('0x20')]('base64'));}function request(_0x1dfa81){logger[_0xbf4e('0x21')](_0xbf4e('0x22'),JSON['stringify'](_0x1dfa81));return rp(_[_0xbf4e('0x23')](_0x1dfa81,{'method':_0xbf4e('0x24'),'headers':headers,'json':!![]}));}function getTags(_0x2f3cf8,_0xc7ca87){var _0x2343dd=[];if(_0x2f3cf8&&_0x2f3cf8[_0xbf4e('0x14')]>0x0){_0x2343dd=_['map'](_0x2f3cf8,_0xc7ca87);}return _0x2343dd;}function getCustomFields(_0x35c82d,_0x154576){var _0x5e32c0=[];var _0x3d8959={'custom_fields':[]};if(_0x35c82d[_0xbf4e('0x14')]>0x0){_['forEach'](_0x35c82d,function(_0x23d769){if(_0x23d769['type']===_0xbf4e('0x25')&&_0x23d769['nameField']&&!_0x23d769[_0xbf4e('0x26')]){_0x3d8959[_0x23d769[_0xbf4e('0x27')][_0xbf4e('0x28')]()]=_0x23d769['content'][_0xbf4e('0x20')]();}else if(_0x23d769[_0xbf4e('0x29')]===_0xbf4e('0x25')&&_0x23d769[_0xbf4e('0x2a')]&&_0x23d769[_0xbf4e('0x26')]){_0x3d8959[_0xbf4e('0xd')]['push']({'id':_0x23d769[_0xbf4e('0x2a')],'value':_0x23d769[_0xbf4e('0x2b')][_0xbf4e('0x20')]()});}else if(_0x23d769[_0xbf4e('0x29')]===_0xbf4e('0x2c')&&_0x23d769['variableName']&&_0x23d769['idField']&&_0x23d769['customField']){_0x154576[_0x23d769['variableName']]&&_0x3d8959[_0xbf4e('0xd')][_0xbf4e('0x2d')]({'id':_0x23d769[_0xbf4e('0x2a')],'value':_0x154576[_0x23d769[_0xbf4e('0x2e')]][_0xbf4e('0x20')]()});}else if(_0x23d769[_0xbf4e('0x29')]===_0xbf4e('0x2f')&&_0x23d769[_0xbf4e('0x30')]&&_0x23d769[_0xbf4e('0x30')]['name']&&_0x23d769['idField']&&_0x23d769[_0xbf4e('0x26')]){_0x154576[_0x23d769[_0xbf4e('0x30')][_0xbf4e('0x31')]['toLowerCase']()]&&_0x3d8959[_0xbf4e('0xd')]['push']({'id':_0x23d769[_0xbf4e('0x2a')],'value':_0x154576[_0x23d769[_0xbf4e('0x30')][_0xbf4e('0x31')][_0xbf4e('0x28')]()]['toString']()});}});}return _0x3d8959;}exports[_0xbf4e('0x32')]=function(_0x78ab2d,_0x3aa308,_0x3d5123,_0x5dec7d,_0x3d08d5,_0x44e96b){var _0x148d94,_0x29fe9d;_0x44e96b[_0xbf4e('0x1a')]=intUtil[_0xbf4e('0x33')](_0x44e96b[_0xbf4e('0x1a')]);_0x44e96b['serverUrl']=intUtil[_0xbf4e('0x33')](_0x44e96b[_0xbf4e('0x34')]);if(_0x3d08d5&&_0x3d08d5['monitor_format']){logger['info'](_0xbf4e('0x35'),_0xbf4e('0x36'));_0x3aa308['recordingURL']=util['format'](_0xbf4e('0x37'),_0x44e96b[_0xbf4e('0x34')],_0x3aa308[_0xbf4e('0x38')],md5(_0x3aa308[_0xbf4e('0x38')]));}else{_0x3aa308[_0xbf4e('0x39')]='';}headers[_0xbf4e('0x3a')]=getAuth(_0x44e96b);return getUser(_0x44e96b,_0x5dec7d['email'])[_0xbf4e('0x12')](function(_0x7bd91){_0x148d94=_0x7bd91;logger['info']('The\x20User\x20ID\x20is:',_0x148d94['id']);return getEndUser(_0x44e96b,_0x3aa308['calleridname'],_0x3aa308['calleridnum']);})[_0xbf4e('0x12')](function(_0x5db984){_0x29fe9d=_0x5db984;logger[_0xbf4e('0x5')](_0xbf4e('0x3b'),_0x29fe9d['id']);return getTicket(_0x44e96b,_0x148d94,_0x29fe9d,_0x3d5123,_0x3aa308);})['then'](function(_0x5cd134){if(_0x5cd134&&_0x5cd134['id']){logger[_0xbf4e('0x5')](_0xbf4e('0x13'));logger[_0xbf4e('0x5')](_0xbf4e('0x3c'),_0x5cd134['id']);logger[_0xbf4e('0x5')]('[QUEUE]',_0xbf4e('0x3d'));emit(util[_0xbf4e('0x8')](_0xbf4e('0x3e'),_0x5dec7d[_0xbf4e('0x31')]),_0xbf4e('0x3f'),{'uri':util[_0xbf4e('0x8')](_0xbf4e('0x40'),_0x44e96b[_0xbf4e('0x1a')],_0x5cd134['id'])});}})['catch'](function(_0x43ebde){logger[_0xbf4e('0x41')](_0xbf4e('0x35'),JSON[_0xbf4e('0x42')](_0x43ebde));});};exports[_0xbf4e('0x43')]=function(_0x1198e8,_0x1fce91,_0x17e835,_0xeca51,_0x3447ab,_0x2fdba9,_0x6fd78d){var _0x370d4c,_0x2ea101;_0x2fdba9[_0xbf4e('0x1a')]=intUtil[_0xbf4e('0x33')](_0x2fdba9[_0xbf4e('0x1a')]);_0x2fdba9['serverUrl']=intUtil[_0xbf4e('0x33')](_0x2fdba9[_0xbf4e('0x34')]);if(_0x6fd78d&&_0x6fd78d[_0xbf4e('0x44')]&&_0x6fd78d['recordingFormat']!==_0xbf4e('0x45')){logger['info']('[OUTBOUND]',_0xbf4e('0x36'));_0x1fce91[_0xbf4e('0x39')]=util['format'](_0xbf4e('0x37'),_0x2fdba9[_0xbf4e('0x34')],_0x1fce91[_0xbf4e('0x38')],md5(_0x1fce91[_0xbf4e('0x38')]));}headers[_0xbf4e('0x3a')]=getAuth(_0x2fdba9);return getUser(_0x2fdba9,_0xeca51[_0xbf4e('0x17')])[_0xbf4e('0x12')](function(_0x1cdd8c){_0x370d4c=_0x1cdd8c;logger[_0xbf4e('0x5')](_0xbf4e('0x46'),_0x370d4c['id']);return getEndUser(_0x2fdba9,_0x1fce91[_0xbf4e('0x47')],_0x1fce91['destcalleridnum']);})['then'](function(_0xad8934){_0x2ea101=_0xad8934;logger[_0xbf4e('0x5')](_0xbf4e('0x3b'),_0x2ea101['id']);return getTicket(_0x2fdba9,_0x370d4c,_0x2ea101,_0x17e835,_0x1fce91);})['then'](function(_0x339ce6){if(_0x339ce6&&_0x339ce6['id']){logger[_0xbf4e('0x5')]('Ticket\x20created!');logger['info'](_0xbf4e('0x3c'),_0x339ce6['id']);logger['info']('[OUTBOUND]',_0xbf4e('0x3d'));emit(util[_0xbf4e('0x8')](_0xbf4e('0x3e'),_0xeca51[_0xbf4e('0x31')]),_0xbf4e('0x3f'),{'uri':util['format'](_0xbf4e('0x40'),_0x2fdba9['remoteUri'],_0x339ce6['id'])});}})[_0xbf4e('0x48')](function(_0x53875e){logger[_0xbf4e('0x41')]('[OUTBOUND]',JSON[_0xbf4e('0x42')](_0x53875e));});};exports[_0xbf4e('0x49')]=function(_0x3e60e7,_0x16592f,_0xfd54c,_0x52dfc4,_0x55a17d,_0x5a0f4a){var _0x52ea6e,_0x419a69;_0x5a0f4a[_0xbf4e('0x1a')]=intUtil['stripTrailingSlash'](_0x5a0f4a[_0xbf4e('0x1a')]);_0x5a0f4a[_0xbf4e('0x34')]=intUtil[_0xbf4e('0x33')](_0x5a0f4a[_0xbf4e('0x34')]);if(_0x55a17d&&_0x55a17d[_0xbf4e('0x4a')]){logger[_0xbf4e('0x5')](_0xbf4e('0x4b'),'Recording\x20is\x20enabled!');_0x16592f[_0xbf4e('0x39')]=util[_0xbf4e('0x8')](_0xbf4e('0x37'),_0x5a0f4a['serverUrl'],_0x16592f['uniqueid'],md5(_0x16592f[_0xbf4e('0x38')]));}else{_0x16592f[_0xbf4e('0x39')]='';}headers[_0xbf4e('0x3a')]=getAuth(_0x5a0f4a);return getUser(_0x5a0f4a,_0x52dfc4['email'])[_0xbf4e('0x12')](function(_0x3d0f2c){_0x52ea6e=_0x3d0f2c;logger[_0xbf4e('0x5')](_0xbf4e('0x46'),_0x52ea6e['id']);return getEndUser(_0x5a0f4a,_0x16592f[_0xbf4e('0x4c')],_0x16592f[_0xbf4e('0x4d')]);})[_0xbf4e('0x12')](function(_0x3ee848){_0x419a69=_0x3ee848;logger[_0xbf4e('0x5')](_0xbf4e('0x3b'),_0x419a69['id']);return getTicket(_0x5a0f4a,_0x52ea6e,_0x419a69,_0xfd54c,_0x16592f);})[_0xbf4e('0x12')](function(_0x17bf52){if(_0x17bf52){logger['info'](_0xbf4e('0x13'));logger['info'](_0xbf4e('0x3c'),_0x17bf52['id']);}})[_0xbf4e('0x48')](function(_0x400fa5){logger[_0xbf4e('0x41')](_0xbf4e('0x4b'),JSON[_0xbf4e('0x42')](_0x400fa5));});};
\ No newline at end of file
+var _0xa9e0=['base64','debug','[HTTP]','stringify','defaults','map','forEach','type','string','nameField','customField','content','idField','push','variable','variableName','Variable','toLowerCase','queue','serverUrl','stripTrailingSlash','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','calleridnum','The\x20Enduser\x20ID\x20is:','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/helpdesk/tickets/%d','catch','error','recordingFormat','[OUTBOUND]','destcalleridnum','[ABANDONED]','lodash','request-promise','md5','../../../../config/logger','socket.io-emitter','localhost','application/json','emit','Creating\x20new\x20ticket...','merge','format','Caller\x20-\x20%s','calleridname','Descriptions','<br>','Tags','name','Fields','custom_fields','keyBy','value','%s/api/v2/tickets','remoteUri','then','info','Getting\x20agent\x20with\x20email','%s/api/v2/agents','length','Agent\x20found!','find','contact','email','%s/api/v2/agents/me','Admin\x20account\x20selected.','Searching\x20enduser\x20with\x20phone','%s/api/v2/contacts','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Enduser\x20created.','Basic\x20%s','apiKey','toString'];(function(_0x15394b,_0x52c66c){var _0x210c3d=function(_0x3c1231){while(--_0x3c1231){_0x15394b['push'](_0x15394b['shift']());}};_0x210c3d(++_0x52c66c);}(_0xa9e0,0x123));var _0x0a9e=function(_0x12d033,_0x25fa2f){_0x12d033=_0x12d033-0x0;var _0x3b4e80=_0xa9e0[_0x12d033];return _0x3b4e80;};'use strict';var _=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var md5=require(_0x0a9e('0x2'));var util=require('util');var intUtil=require('./util');var logger=require(_0x0a9e('0x3'))('freshdesk');var io=require(_0x0a9e('0x4'))({'host':_0x0a9e('0x5'),'port':0x18eb});var headers={'Content-Type':_0x0a9e('0x6'),'Accept':_0x0a9e('0x6')};function emit(_0x981158,_0x57b080,_0x219af0){io['to'](_0x981158)[_0x0a9e('0x7')](_0x57b080,_0x219af0);}function getTicket(_0x2cc193,_0x5f41ea,_0x503809,_0xe42b77,_0x56465b){logger['info'](_0x0a9e('0x8'));var _0xf81284=_[_0x0a9e('0x9')]({'responder_id':_0x5f41ea['id'],'requester_id':_0x503809['id'],'name':util[_0x0a9e('0xa')](_0x0a9e('0xb'),_0x56465b[_0x0a9e('0xc')]),'phone':_0x56465b['calleridnum'],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil['getString'](_0xe42b77['Subjects'],_0x56465b,'\x20'),'description':intUtil['getString'](_0xe42b77[_0x0a9e('0xd')],_0x56465b,_0x0a9e('0xe')),'tags':getTags(_0xe42b77[_0x0a9e('0xf')],_0x0a9e('0x10'))},getCustomFields(_0xe42b77[_0x0a9e('0x11')],_0x56465b));_0xf81284[_0x0a9e('0x12')]=_['mapValues'](_[_0x0a9e('0x13')](_0xf81284[_0x0a9e('0x12')],'id'),_0x0a9e('0x14'));return request({'uri':util[_0x0a9e('0xa')](_0x0a9e('0x15'),_0x2cc193[_0x0a9e('0x16')]),'method':'POST','body':_0xf81284})[_0x0a9e('0x17')](function(_0x5d0880){logger[_0x0a9e('0x18')]('Ticket\x20created!');return _0x5d0880;});}function getUser(_0x16033c,_0x12066b){logger['info'](_0x0a9e('0x19'),_0x12066b);return request({'uri':util['format'](_0x0a9e('0x1a'),_0x16033c[_0x0a9e('0x16')]),'qs':{'email':_0x12066b}})[_0x0a9e('0x17')](function(_0x205fd6){if(_0x205fd6[_0x0a9e('0x1b')]){logger[_0x0a9e('0x18')](_0x0a9e('0x1c'));return _[_0x0a9e('0x1d')](_0x205fd6,function(_0x1314ae){return _0x1314ae[_0x0a9e('0x1e')][_0x0a9e('0x1f')]===_0x12066b;});}else{logger[_0x0a9e('0x18')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x0a9e('0xa')](_0x0a9e('0x20'),_0x16033c['remoteUri'])})[_0x0a9e('0x17')](function(_0x5a09ef){logger['info'](_0x0a9e('0x21'));return _0x5a09ef;});}});}function getEndUser(_0x432e56,_0x38e7c4,_0x30bae6){logger['info'](_0x0a9e('0x22'),_0x30bae6);return request({'uri':util[_0x0a9e('0xa')](_0x0a9e('0x23'),_0x432e56[_0x0a9e('0x16')]),'qs':{'phone':_0x30bae6}})[_0x0a9e('0x17')](function(_0x42ac8f){if(_0x42ac8f[_0x0a9e('0x1b')]){logger['info']('Enduser\x20found!');return _[_0x0a9e('0x1d')](_0x42ac8f,{'phone':_0x30bae6});}else{logger[_0x0a9e('0x18')](_0x0a9e('0x24'));return request({'uri':util[_0x0a9e('0xa')]('%s/api/v2/contacts',_0x432e56[_0x0a9e('0x16')]),'method':'POST','body':{'name':_0x38e7c4,'phone':_0x30bae6}})[_0x0a9e('0x17')](function(_0x5bfb33){logger[_0x0a9e('0x18')](_0x0a9e('0x25'));return _0x5bfb33;});}});}function getAuth(_0x25fba9){return util[_0x0a9e('0xa')](_0x0a9e('0x26'),new Buffer(_0x25fba9[_0x0a9e('0x27')]+':X')[_0x0a9e('0x28')](_0x0a9e('0x29')));}function request(_0x5a101a){logger[_0x0a9e('0x2a')](_0x0a9e('0x2b'),JSON[_0x0a9e('0x2c')](_0x5a101a));return rp(_[_0x0a9e('0x2d')](_0x5a101a,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x15b200,_0x40e7a3){var _0x1843b2=[];if(_0x15b200&&_0x15b200[_0x0a9e('0x1b')]>0x0){_0x1843b2=_[_0x0a9e('0x2e')](_0x15b200,_0x40e7a3);}return _0x1843b2;}function getCustomFields(_0x563b45,_0x296f41){var _0x2e8759=[];var _0x1dbde2={'custom_fields':[]};if(_0x563b45['length']>0x0){_[_0x0a9e('0x2f')](_0x563b45,function(_0x5d1e0e){if(_0x5d1e0e[_0x0a9e('0x30')]===_0x0a9e('0x31')&&_0x5d1e0e[_0x0a9e('0x32')]&&!_0x5d1e0e[_0x0a9e('0x33')]){_0x1dbde2[_0x5d1e0e[_0x0a9e('0x32')]['toLowerCase']()]=_0x5d1e0e[_0x0a9e('0x34')][_0x0a9e('0x28')]();}else if(_0x5d1e0e[_0x0a9e('0x30')]===_0x0a9e('0x31')&&_0x5d1e0e[_0x0a9e('0x35')]&&_0x5d1e0e[_0x0a9e('0x33')]){_0x1dbde2[_0x0a9e('0x12')][_0x0a9e('0x36')]({'id':_0x5d1e0e['idField'],'value':_0x5d1e0e[_0x0a9e('0x34')]['toString']()});}else if(_0x5d1e0e[_0x0a9e('0x30')]===_0x0a9e('0x37')&&_0x5d1e0e[_0x0a9e('0x38')]&&_0x5d1e0e[_0x0a9e('0x35')]&&_0x5d1e0e['customField']){_0x296f41[_0x5d1e0e[_0x0a9e('0x38')]]&&_0x1dbde2[_0x0a9e('0x12')][_0x0a9e('0x36')]({'id':_0x5d1e0e[_0x0a9e('0x35')],'value':_0x296f41[_0x5d1e0e['variableName']]['toString']()});}else if(_0x5d1e0e[_0x0a9e('0x30')]==='customVariable'&&_0x5d1e0e[_0x0a9e('0x39')]&&_0x5d1e0e[_0x0a9e('0x39')][_0x0a9e('0x10')]&&_0x5d1e0e[_0x0a9e('0x35')]&&_0x5d1e0e['customField']){_0x296f41[_0x5d1e0e[_0x0a9e('0x39')][_0x0a9e('0x10')][_0x0a9e('0x3a')]()]&&_0x1dbde2['custom_fields'][_0x0a9e('0x36')]({'id':_0x5d1e0e[_0x0a9e('0x35')],'value':_0x296f41[_0x5d1e0e[_0x0a9e('0x39')]['name']['toLowerCase']()][_0x0a9e('0x28')]()});}});}return _0x1dbde2;}exports[_0x0a9e('0x3b')]=function(_0x5adda1,_0x2b814e,_0x419125,_0x2e1b3a,_0x148f55,_0x4b38d9){var _0x5a594b,_0x15e37d;_0x4b38d9[_0x0a9e('0x16')]=intUtil['stripTrailingSlash'](_0x4b38d9[_0x0a9e('0x16')]);_0x4b38d9[_0x0a9e('0x3c')]=intUtil[_0x0a9e('0x3d')](_0x4b38d9['serverUrl']);if(_0x148f55&&_0x148f55[_0x0a9e('0x3e')]){logger[_0x0a9e('0x18')](_0x0a9e('0x3f'),_0x0a9e('0x40'));_0x2b814e[_0x0a9e('0x41')]=util[_0x0a9e('0xa')](_0x0a9e('0x42'),_0x4b38d9[_0x0a9e('0x3c')],_0x2b814e[_0x0a9e('0x43')],md5(_0x2b814e[_0x0a9e('0x43')]));}else{_0x2b814e[_0x0a9e('0x41')]='';}headers[_0x0a9e('0x44')]=getAuth(_0x4b38d9);return getUser(_0x4b38d9,_0x2e1b3a[_0x0a9e('0x1f')])[_0x0a9e('0x17')](function(_0x37f6cc){_0x5a594b=_0x37f6cc;logger['info']('The\x20User\x20ID\x20is:',_0x5a594b['id']);return getEndUser(_0x4b38d9,_0x2b814e[_0x0a9e('0xc')],_0x2b814e[_0x0a9e('0x45')]);})[_0x0a9e('0x17')](function(_0x315881){_0x15e37d=_0x315881;logger[_0x0a9e('0x18')](_0x0a9e('0x46'),_0x15e37d['id']);return getTicket(_0x4b38d9,_0x5a594b,_0x15e37d,_0x419125,_0x2b814e);})[_0x0a9e('0x17')](function(_0x445e25){if(_0x445e25&&_0x445e25['id']){logger[_0x0a9e('0x18')](_0x0a9e('0x47'));logger[_0x0a9e('0x18')](_0x0a9e('0x48'),_0x445e25['id']);logger['info'](_0x0a9e('0x3f'),_0x0a9e('0x49'));emit(util[_0x0a9e('0xa')](_0x0a9e('0x4a'),_0x2e1b3a[_0x0a9e('0x10')]),_0x0a9e('0x4b'),{'uri':util[_0x0a9e('0xa')](_0x0a9e('0x4c'),_0x4b38d9['remoteUri'],_0x445e25['id'])});}})[_0x0a9e('0x4d')](function(_0x48fd45){logger[_0x0a9e('0x4e')](_0x0a9e('0x3f'),JSON[_0x0a9e('0x2c')](_0x48fd45));});};exports['outbound']=function(_0x14bec2,_0x7f6eb1,_0x4774f4,_0x34aa5a,_0x45c845,_0x37be73,_0x45bf7f){var _0x5bbcde,_0x13f44d;_0x37be73[_0x0a9e('0x16')]=intUtil[_0x0a9e('0x3d')](_0x37be73[_0x0a9e('0x16')]);_0x37be73[_0x0a9e('0x3c')]=intUtil[_0x0a9e('0x3d')](_0x37be73[_0x0a9e('0x3c')]);if(_0x45bf7f&&_0x45bf7f[_0x0a9e('0x4f')]&&_0x45bf7f[_0x0a9e('0x4f')]!=='none'){logger[_0x0a9e('0x18')](_0x0a9e('0x50'),'Recording\x20is\x20enabled!');_0x7f6eb1['recordingURL']=util['format'](_0x0a9e('0x42'),_0x37be73[_0x0a9e('0x3c')],_0x7f6eb1[_0x0a9e('0x43')],md5(_0x7f6eb1[_0x0a9e('0x43')]));}headers[_0x0a9e('0x44')]=getAuth(_0x37be73);return getUser(_0x37be73,_0x34aa5a[_0x0a9e('0x1f')])[_0x0a9e('0x17')](function(_0x375c18){_0x5bbcde=_0x375c18;logger['info']('The\x20User\x20ID\x20is:',_0x5bbcde['id']);return getEndUser(_0x37be73,_0x7f6eb1['destcalleridname'],_0x7f6eb1[_0x0a9e('0x51')]);})[_0x0a9e('0x17')](function(_0x14d602){_0x13f44d=_0x14d602;logger['info'](_0x0a9e('0x46'),_0x13f44d['id']);return getTicket(_0x37be73,_0x5bbcde,_0x13f44d,_0x4774f4,_0x7f6eb1);})[_0x0a9e('0x17')](function(_0x53d113){if(_0x53d113&&_0x53d113['id']){logger['info'](_0x0a9e('0x47'));logger['info'](_0x0a9e('0x48'),_0x53d113['id']);logger['info'](_0x0a9e('0x50'),_0x0a9e('0x49'));emit(util[_0x0a9e('0xa')]('user:%s',_0x34aa5a[_0x0a9e('0x10')]),_0x0a9e('0x4b'),{'uri':util['format']('%s/helpdesk/tickets/%d',_0x37be73[_0x0a9e('0x16')],_0x53d113['id'])});}})[_0x0a9e('0x4d')](function(_0x49c095){logger[_0x0a9e('0x4e')]('[OUTBOUND]',JSON[_0x0a9e('0x2c')](_0x49c095));});};exports['abandoned']=function(_0xe22ccc,_0x4a6deb,_0x5da27d,_0x5df0ad,_0x2da03c,_0x47de4c){var _0x2f7092,_0x65432;_0x47de4c[_0x0a9e('0x16')]=intUtil[_0x0a9e('0x3d')](_0x47de4c[_0x0a9e('0x16')]);_0x47de4c[_0x0a9e('0x3c')]=intUtil[_0x0a9e('0x3d')](_0x47de4c[_0x0a9e('0x3c')]);if(_0x2da03c&&_0x2da03c['monitor_format']){logger[_0x0a9e('0x18')](_0x0a9e('0x52'),_0x0a9e('0x40'));_0x4a6deb[_0x0a9e('0x41')]=util[_0x0a9e('0xa')](_0x0a9e('0x42'),_0x47de4c['serverUrl'],_0x4a6deb[_0x0a9e('0x43')],md5(_0x4a6deb[_0x0a9e('0x43')]));}else{_0x4a6deb['recordingURL']='';}headers[_0x0a9e('0x44')]=getAuth(_0x47de4c);return getUser(_0x47de4c,_0x5df0ad['email'])[_0x0a9e('0x17')](function(_0x5ba1f9){_0x2f7092=_0x5ba1f9;logger['info']('The\x20User\x20ID\x20is:',_0x2f7092['id']);return getEndUser(_0x47de4c,_0x4a6deb[_0x0a9e('0xc')],_0x4a6deb['calleridnum']);})[_0x0a9e('0x17')](function(_0x1fc70e){_0x65432=_0x1fc70e;logger[_0x0a9e('0x18')](_0x0a9e('0x46'),_0x65432['id']);return getTicket(_0x47de4c,_0x2f7092,_0x65432,_0x5da27d,_0x4a6deb);})[_0x0a9e('0x17')](function(_0x26d7db){if(_0x26d7db){logger['info'](_0x0a9e('0x47'));logger['info'](_0x0a9e('0x48'),_0x26d7db['id']);}})[_0x0a9e('0x4d')](function(_0x51aaf7){logger['error'](_0x0a9e('0x52'),JSON[_0x0a9e('0x2c')](_0x51aaf7));});};
\ No newline at end of file
index d042688..aadc0c9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc768=['../../../../config/logger','error','[EXEC]','%s\x20configuration\x20#%s\x20not\x20found','data3','format','%s\x20account\x20#%s\x20not\x20found','lodash','util','./salesforce','./freshdesk','./desk','zendesk','salesforce','sugarcrm','freshdesk','zoho','vtiger','exec','includes','data1','toLowerCase','data2','Configurations','queue','log','unknown\x20integration'];(function(_0x4bc17e,_0xf29904){var _0x23fa44=function(_0xde1143){while(--_0xde1143){_0x4bc17e['push'](_0x4bc17e['shift']());}};_0x23fa44(++_0xf29904);}(_0xc768,0x14b));var _0x8c76=function(_0x393dcf,_0x35c0a9){_0x393dcf=_0x393dcf-0x0;var _0x2b238b=_0xc768[_0x393dcf];return _0x2b238b;};'use strict';var _=require(_0x8c76('0x0'));var util=require(_0x8c76('0x1'));var zendesk=require('./zendesk');var salesforce=require(_0x8c76('0x2'));var sugarcrm=require('./sugarcrm');var freshdesk=require(_0x8c76('0x3'));var zoho=require('./zoho');var desk=require(_0x8c76('0x4'));var vtiger=require('./vtiger');var integrations=[_0x8c76('0x5'),_0x8c76('0x6'),_0x8c76('0x7'),_0x8c76('0x8'),_0x8c76('0x9'),'desk',_0x8c76('0xa')];exports[_0x8c76('0xb')]=function(_0x1f712f,_0x294122,_0x4470f0,_0x56ac40,_0x39e2b7,_0x4a60d6){if(_0x4470f0){if(_[_0x8c76('0xc')](integrations,_0x1f712f['data1']['toLowerCase']())){try{var _0x459bd3=null;var _0x377aa7='';var _0x100926=_0x4470f0[_0x1f712f[_0x8c76('0xd')][_0x8c76('0xe')]()];if(_0x100926){var _0x5a8a9e=_0x100926[_0x1f712f[_0x8c76('0xf')]];if(_0x5a8a9e){var _0x3046fb=_['find'](_0x5a8a9e[_0x8c76('0x10')],{'id':parseInt(_0x1f712f['data3'],0xa)});if(_0x3046fb){if(_0x56ac40){if(_0x39e2b7&&_0x294122[_0x8c76('0x11')]){_0x377aa7='queue';}else if(_0x294122['routeId']){_0x377aa7='outbound';}else{console['log']('EVENT\x20UNKNOWN',_0x294122);}}else{_0x377aa7='abandoned';}switch(_0x1f712f[_0x8c76('0xd')][_0x8c76('0xe')]()){case _0x8c76('0x5'):zendesk[_0x377aa7](_0x1f712f,_0x294122,_0x3046fb,_0x56ac40,_0x39e2b7,_0x5a8a9e,_0x4a60d6);break;case _0x8c76('0x6'):salesforce[_0x377aa7](_0x1f712f,_0x294122,_0x3046fb,_0x56ac40,_0x39e2b7,_0x5a8a9e,_0x4a60d6);break;case _0x8c76('0x7'):sugarcrm[_0x377aa7](_0x1f712f,_0x294122,_0x3046fb,_0x56ac40,_0x39e2b7,_0x5a8a9e,_0x4a60d6);break;case _0x8c76('0x8'):freshdesk[_0x377aa7](_0x1f712f,_0x294122,_0x3046fb,_0x56ac40,_0x39e2b7,_0x5a8a9e,_0x4a60d6);break;case _0x8c76('0x9'):zoho[_0x377aa7](_0x1f712f,_0x294122,_0x3046fb,_0x56ac40,_0x39e2b7,_0x5a8a9e,_0x4a60d6);break;case'desk':desk[_0x377aa7](_0x1f712f,_0x294122,_0x3046fb,_0x56ac40,_0x39e2b7,_0x5a8a9e,_0x4a60d6);break;case _0x8c76('0xa'):vtiger[_0x377aa7](_0x1f712f,_0x294122,_0x3046fb,_0x56ac40,_0x39e2b7,_0x5a8a9e,_0x4a60d6);break;default:console[_0x8c76('0x12')](_0x8c76('0x13'));}}else{_0x459bd3=require(_0x8c76('0x14'))(_0x1f712f['data1'][_0x8c76('0xe')]());_0x459bd3[_0x8c76('0x15')](_0x8c76('0x16'),util['format'](_0x8c76('0x17'),_0x1f712f[_0x8c76('0xd')][_0x8c76('0xe')](),_0x1f712f[_0x8c76('0x18')]));}}else{_0x459bd3=require(_0x8c76('0x14'))(_0x1f712f['data1'][_0x8c76('0xe')]());_0x459bd3[_0x8c76('0x15')](_0x8c76('0x16'),util[_0x8c76('0x19')](_0x8c76('0x1a'),_0x1f712f['data1'][_0x8c76('0xe')](),_0x1f712f[_0x8c76('0xf')]));}}else{}}catch(_0x17815c){console[_0x8c76('0x15')](_0x17815c);}}}};
\ No newline at end of file
+var _0xb02c=['data2','./salesforce','./sugarcrm','./freshdesk','./zoho','./desk','zendesk','salesforce','sugarcrm','freshdesk','zoho','desk','vtiger','exec','includes','data1','toLowerCase','find','data3','queue','routeId','log','EVENT\x20UNKNOWN','abandoned','unknown\x20integration','../../../../config/logger','error','[EXEC]','format','%s\x20account\x20#%s\x20not\x20found'];(function(_0x20ef64,_0x4a8fe9){var _0x3707d8=function(_0x5b9a88){while(--_0x5b9a88){_0x20ef64['push'](_0x20ef64['shift']());}};_0x3707d8(++_0x4a8fe9);}(_0xb02c,0x169));var _0xcb02=function(_0x789066,_0x7d0a07){_0x789066=_0x789066-0x0;var _0x529361=_0xb02c[_0x789066];return _0x529361;};'use strict';var _=require('lodash');var util=require('util');var zendesk=require('./zendesk');var salesforce=require(_0xcb02('0x0'));var sugarcrm=require(_0xcb02('0x1'));var freshdesk=require(_0xcb02('0x2'));var zoho=require(_0xcb02('0x3'));var desk=require(_0xcb02('0x4'));var vtiger=require('./vtiger');var integrations=[_0xcb02('0x5'),_0xcb02('0x6'),_0xcb02('0x7'),_0xcb02('0x8'),_0xcb02('0x9'),_0xcb02('0xa'),_0xcb02('0xb')];exports[_0xcb02('0xc')]=function(_0x513c47,_0x585e14,_0x2a5bfd,_0x550f19,_0x4ff9ea,_0x142aa4){if(_0x2a5bfd){if(_[_0xcb02('0xd')](integrations,_0x513c47['data1']['toLowerCase']())){try{var _0xbdcbf6=null;var _0x1eaa04='';var _0x295e4f=_0x2a5bfd[_0x513c47[_0xcb02('0xe')][_0xcb02('0xf')]()];if(_0x295e4f){var _0x262073=_0x295e4f[_0x513c47['data2']];if(_0x262073){var _0x14d93a=_[_0xcb02('0x10')](_0x262073['Configurations'],{'id':parseInt(_0x513c47[_0xcb02('0x11')],0xa)});if(_0x14d93a){if(_0x550f19){if(_0x4ff9ea&&_0x585e14[_0xcb02('0x12')]){_0x1eaa04='queue';}else if(_0x585e14[_0xcb02('0x13')]){_0x1eaa04='outbound';}else{console[_0xcb02('0x14')](_0xcb02('0x15'),_0x585e14);}}else{_0x1eaa04=_0xcb02('0x16');}switch(_0x513c47[_0xcb02('0xe')][_0xcb02('0xf')]()){case'zendesk':zendesk[_0x1eaa04](_0x513c47,_0x585e14,_0x14d93a,_0x550f19,_0x4ff9ea,_0x262073,_0x142aa4);break;case _0xcb02('0x6'):salesforce[_0x1eaa04](_0x513c47,_0x585e14,_0x14d93a,_0x550f19,_0x4ff9ea,_0x262073,_0x142aa4);break;case _0xcb02('0x7'):sugarcrm[_0x1eaa04](_0x513c47,_0x585e14,_0x14d93a,_0x550f19,_0x4ff9ea,_0x262073,_0x142aa4);break;case _0xcb02('0x8'):freshdesk[_0x1eaa04](_0x513c47,_0x585e14,_0x14d93a,_0x550f19,_0x4ff9ea,_0x262073,_0x142aa4);break;case _0xcb02('0x9'):zoho[_0x1eaa04](_0x513c47,_0x585e14,_0x14d93a,_0x550f19,_0x4ff9ea,_0x262073,_0x142aa4);break;case'desk':desk[_0x1eaa04](_0x513c47,_0x585e14,_0x14d93a,_0x550f19,_0x4ff9ea,_0x262073,_0x142aa4);break;case'vtiger':vtiger[_0x1eaa04](_0x513c47,_0x585e14,_0x14d93a,_0x550f19,_0x4ff9ea,_0x262073,_0x142aa4);break;default:console[_0xcb02('0x14')](_0xcb02('0x17'));}}else{_0xbdcbf6=require(_0xcb02('0x18'))(_0x513c47[_0xcb02('0xe')]['toLowerCase']());_0xbdcbf6[_0xcb02('0x19')](_0xcb02('0x1a'),util[_0xcb02('0x1b')]('%s\x20configuration\x20#%s\x20not\x20found',_0x513c47[_0xcb02('0xe')][_0xcb02('0xf')](),_0x513c47[_0xcb02('0x11')]));}}else{_0xbdcbf6=require('../../../../config/logger')(_0x513c47[_0xcb02('0xe')]['toLowerCase']());_0xbdcbf6[_0xcb02('0x19')](_0xcb02('0x1a'),util['format'](_0xcb02('0x1c'),_0x513c47['data1'][_0xcb02('0xf')](),_0x513c47[_0xcb02('0x1d')]));}}else{}}catch(_0xaf15b0){console[_0xcb02('0x19')](_0xaf15b0);}}}};
\ No newline at end of file
index 580e602..877e157 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4038=['[OUTBOUND]','[OUTBOUND]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','trigger:salesforce:display','Salesforce\x20account\x20type\x20not\x20recognized','catch','abandoned','[ABANDONED]','[ABANDONED]\x20Ticket\x20%s\x20created.','[ABANDONED]\x20Integration\x20account\x20type\x20%s.','request-promise','moment','md5','./util','salesforce','socket.io-emitter','emit','merge','getString','Subjects','Descriptions','WhoId','sobject','Task','create','User','execute','then','length','find','Email','info','Agent\x20%s\x20found.','resolve','Agent\x20%s\x20not\x20found.\x20Switch\x20to\x20the\x20admin\x20account.','identity','user_id','display_name','Searching\x20enduser\x20with\x20phone\x20%s.\x20Serching\x20method\x20used\x20%s.','moduleSearch','contact_lead','Contact','contact','lead','Lead','Phone','Name','Enduser\x20with\x20phone\x20%s\x20found.','Enduser\x20with\x20phone\x20%s\x20not\x20found.','<unknown>','Caller\x20-\x20%s','moduleCreate','Enduser\x20with\x20phone\x20%s.\x20Creating\x20method\x20used\x20%s.','Company','No\x20Company','upperFirst','forEach','string','idField','content','toString','type','variableName','Variable','name','toLowerCase','concat','securityToken','Connection','remoteUri','https://login.salesforce.com','clientId','clientSecret','username','Connection\x20established.','queue','serverUrl','stripTrailingSlash','monitor_format','Recording\x20is\x20enabled!','recordingURL','format','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','email','calleridname','calleridnum','Fields','[QUEUE]\x20Ticket\x20%s\x20created','[QUEUE]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','integrationTab','newTab','trigger:browser:url','%s/%s/e','instanceUrl','error','[QUEUE]\x20Salesforce\x20account\x20type\x20not\x20recognized.','stringify','outbound','recordingFormat'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x4038,0x132));var _0x8403=function(_0x25bea7,_0x49ab45){_0x25bea7=_0x25bea7-0x0;var _0x175952=_0x4038[_0x25bea7];return _0x175952;};'use strict';var _=require('lodash');var rp=require(_0x8403('0x0'));var moment=require(_0x8403('0x1'));var BPromise=require('bluebird');var md5=require(_0x8403('0x2'));var jsforce=require('jsforce');var util=require('util');var intUtil=require(_0x8403('0x3'));var logger=require('../../../../config/logger')(_0x8403('0x4'));var io=require(_0x8403('0x5'))({'host':'localhost','port':0x18eb});function emit(_0x3b76e1,_0x3ea1d6,_0xf729f3){io['to'](_0x3b76e1)[_0x8403('0x6')](_0x3ea1d6,_0xf729f3);}function getTicket(_0x3a184f,_0x10a319,_0x196d6d,_0x4f3b28,_0x2c4d69,_0xfa06da,_0x8c12f6){var _0x2e62f4=_[_0x8403('0x7')]({'OwnerId':_0x10a319['id'],'ActivityDate':moment['utc'](),'IsReminderSet':![],'IsRecurrence':![],'Subject':intUtil[_0x8403('0x8')](_0x4f3b28[_0x8403('0x9')],_0x2c4d69,'\x20'),'Description':intUtil[_0x8403('0x8')](_0x4f3b28[_0x8403('0xa')],_0x2c4d69,'\x0a')},getCustomFields(_0xfa06da,_0x2c4d69));if(_0x196d6d){_0x2e62f4[_0x8403('0xb')]=_0x196d6d['id'];}return _0x8c12f6[_0x8403('0xc')](_0x8403('0xd'))[_0x8403('0xe')](_0x2e62f4);}function getUser(_0x144646,_0x5352be,_0x2c9275){var _0x32e06e={'Email':_0x5352be};var _0x21b0f7={'Id':!![],'Username':!![],'Name':!![],'Email':!![]};return _0x2c9275[_0x8403('0xc')](_0x8403('0xf'))['find'](_0x32e06e,_0x21b0f7)[_0x8403('0x10')]()[_0x8403('0x11')](function(_0x3d27f5){if(_0x3d27f5[_0x8403('0x12')]){var _0x55ac39=_[_0x8403('0x13')](_0x3d27f5,function(_0x53835b){return _0x53835b[_0x8403('0x14')]===_0x5352be;});if(_0x55ac39){logger[_0x8403('0x15')](_0x8403('0x16'),_0x5352be);return BPromise[_0x8403('0x17')]({'id':_0x55ac39['Id'],'name':_0x55ac39['Name']});}}else{logger[_0x8403('0x15')](_0x8403('0x18'),_0x5352be);return _0x2c9275[_0x8403('0x19')]()['then'](function(_0x1d26bf){return BPromise[_0x8403('0x17')]({'id':_0x1d26bf[_0x8403('0x1a')],'name':_0x1d26bf[_0x8403('0x1b')]});});}});}function getEndUser(_0x5cbadc,_0x1ae616,_0x191c06,_0x54c03a,_0x1e9ad1){var _0x157054={'Phone':_0x54c03a};var _0x136dc1={'Id':!![],'Name':!![],'Phone':!![]};return BPromise[_0x8403('0x17')]()[_0x8403('0x11')](function(){logger[_0x8403('0x15')](_0x8403('0x1c'),_0x54c03a,_0x1ae616[_0x8403('0x1d')]);switch(_0x1ae616[_0x8403('0x1d')]){case _0x8403('0x1e'):return _0x1e9ad1[_0x8403('0xc')](_0x8403('0x1f'))[_0x8403('0x13')](_0x157054,_0x136dc1)['execute']()[_0x8403('0x11')](function(_0x2d0fda){if(_0x2d0fda&&_0x2d0fda[_0x8403('0x12')]){return _0x2d0fda;}else{return _0x1e9ad1[_0x8403('0xc')]('Lead')[_0x8403('0x13')](_0x157054,_0x136dc1);}});case _0x8403('0x20'):return _0x1e9ad1[_0x8403('0xc')](_0x8403('0x1f'))[_0x8403('0x13')](_0x157054,_0x136dc1)[_0x8403('0x10')]();case _0x8403('0x21'):return _0x1e9ad1[_0x8403('0xc')](_0x8403('0x22'))[_0x8403('0x13')](_0x157054,_0x136dc1);default:return null;}})[_0x8403('0x11')](function(_0x11a151){if(_0x11a151&&_0x11a151['length']){var _0x323565=_[_0x8403('0x13')](_0x11a151,function(_0x2908b2){return _0x2908b2[_0x8403('0x23')]===_0x54c03a;});if(_0x323565){return BPromise['resolve']({'id':_0x323565['Id'],'name':_0x323565[_0x8403('0x24')],'phone':_0x323565['Phone']});}}})['then'](function(_0x490f30){if(_0x490f30){logger[_0x8403('0x15')](_0x8403('0x25'),_0x54c03a);return BPromise[_0x8403('0x17')](_0x490f30);}else{logger[_0x8403('0x15')](_0x8403('0x26'),_0x54c03a);var _0x5bff47={'LastName':_0x191c06!==_0x8403('0x27')?_0x191c06:util['format'](_0x8403('0x28'),_0x54c03a),'Phone':_0x54c03a};if(_0x1ae616['moduleCreate']){switch(_0x1ae616[_0x8403('0x29')]){case _0x8403('0x20'):logger['info'](_0x8403('0x2a'),_0x54c03a,_0x1ae616[_0x8403('0x29')]);break;case _0x8403('0x21'):logger['info'](_0x8403('0x2a'),_0x54c03a,_0x1ae616[_0x8403('0x29')]);_0x5bff47[_0x8403('0x2b')]=_0x8403('0x2c');break;default:return null;}}return _0x1e9ad1[_0x8403('0xc')](_[_0x8403('0x2d')](_0x1ae616[_0x8403('0x29')]))[_0x8403('0xe')](_0x5bff47);}});}function getCustomFields(_0x5818f9,_0x461328){var _0x4c7c00={};if(_0x5818f9[_0x8403('0x12')]>0x0){_[_0x8403('0x2e')](_0x5818f9,function(_0x22c3d1){if(_0x22c3d1['type']===_0x8403('0x2f')&&_0x22c3d1[_0x8403('0x30')]){_0x4c7c00[_0x22c3d1[_0x8403('0x30')]]=_0x22c3d1[_0x8403('0x31')][_0x8403('0x32')]();}else if(_0x22c3d1[_0x8403('0x33')]==='variable'&&_0x22c3d1['variableName']&&_0x22c3d1[_0x8403('0x30')]){_0x461328[_0x22c3d1[_0x8403('0x34')]]&&(_0x4c7c00[_0x22c3d1[_0x8403('0x30')]]=_0x461328[_0x22c3d1['variableName']][_0x8403('0x32')]());}else if(_0x22c3d1[_0x8403('0x33')]==='customVariable'&&_0x22c3d1[_0x8403('0x35')]&&_0x22c3d1['Variable'][_0x8403('0x36')]&&_0x22c3d1[_0x8403('0x30')]){_0x461328[_0x22c3d1['Variable'][_0x8403('0x36')][_0x8403('0x37')]()]&&(_0x4c7c00[_0x22c3d1[_0x8403('0x30')]]=_0x461328[_0x22c3d1['Variable']['name'][_0x8403('0x37')]()][_0x8403('0x32')]());}});}return _0x4c7c00;}function getConnection(_0x5858d7){var _0x10e66d=_0x5858d7['password'][_0x8403('0x38')](_0x5858d7[_0x8403('0x39')]);var _0x456b64=new jsforce[(_0x8403('0x3a'))]({'oauth2':{'loginUrl':_0x5858d7[_0x8403('0x3b')]||_0x8403('0x3c'),'clientId':_0x5858d7[_0x8403('0x3d')],'clientSecret':_0x5858d7[_0x8403('0x3e')]}});return _0x456b64['login'](_0x5858d7[_0x8403('0x3f')],_0x10e66d)[_0x8403('0x11')](function(){logger['info'](_0x8403('0x40'));return _0x456b64;});}exports[_0x8403('0x41')]=function(_0x3543a1,_0x3a90a8,_0x57be7e,_0x2dc9a7,_0x361d07,_0x2840ce){var _0x3c1081,_0x462af9,_0x3437be,_0x46e4f9;_0x2840ce[_0x8403('0x42')]=intUtil[_0x8403('0x43')](_0x2840ce[_0x8403('0x42')]);if(_0x361d07&&_0x361d07[_0x8403('0x44')]){logger[_0x8403('0x15')]('[QUEUE]',_0x8403('0x45'));_0x3a90a8[_0x8403('0x46')]=util[_0x8403('0x47')](_0x8403('0x48'),_0x2840ce[_0x8403('0x42')],_0x3a90a8[_0x8403('0x49')],md5(_0x3a90a8[_0x8403('0x49')]));}else{_0x3a90a8[_0x8403('0x46')]='';}return getConnection(_0x2840ce)[_0x8403('0x11')](function(_0x5127ac){_0x46e4f9=_0x5127ac;return getUser(_0x2840ce,_0x2dc9a7[_0x8403('0x4a')],_0x46e4f9);})[_0x8403('0x11')](function(_0x1d75d5){_0x3c1081=_0x1d75d5;return getEndUser(_0x2840ce,_0x57be7e,_0x3a90a8[_0x8403('0x4b')],_0x3a90a8[_0x8403('0x4c')],_0x46e4f9);})['then'](function(_0x330f24){_0x462af9=_0x330f24;return getTicket(_0x2840ce,_0x3c1081,_0x462af9,_0x57be7e,_0x3a90a8,_0x57be7e[_0x8403('0x4d')],_0x46e4f9);})['then'](function(_0x586d48){_0x3437be=_0x586d48;logger[_0x8403('0x15')](_0x8403('0x4e'),_0x3437be['id']);logger[_0x8403('0x15')](_0x8403('0x4f'),_0x3437be['id'],_0x2dc9a7[_0x8403('0x36')],_0x2840ce['type']);switch(_0x2840ce['type']){case _0x8403('0x50'):emit(util[_0x8403('0x47')]('user:%s',_0x2dc9a7['name']),'trigger:salesforce:display',{'recordId':_0x3437be['id']});break;case _0x8403('0x51'):emit(util[_0x8403('0x47')]('user:%s',_0x2dc9a7[_0x8403('0x36')]),_0x8403('0x52'),{'uri':util['format'](_0x8403('0x53'),_0x46e4f9[_0x8403('0x54')],_0x3437be['id'])});break;default:logger[_0x8403('0x55')](_0x8403('0x56'));}})['catch'](function(_0x520fbf){logger[_0x8403('0x55')]('[QUEUE]',JSON[_0x8403('0x57')](_0x520fbf));});};exports[_0x8403('0x58')]=function(_0x1b4618,_0x21f368,_0x576fad,_0x2c3063,_0x25a47d,_0x3db015,_0x40b720){var _0x4fbb12,_0x49a380,_0xd28fbf,_0x4015ff;_0x3db015[_0x8403('0x42')]=intUtil['stripTrailingSlash'](_0x3db015[_0x8403('0x42')]);if(_0x40b720&&_0x40b720[_0x8403('0x59')]&&_0x40b720[_0x8403('0x59')]!=='none'){logger['info'](_0x8403('0x5a'),_0x8403('0x45'));_0x21f368[_0x8403('0x46')]=util[_0x8403('0x47')](_0x8403('0x48'),_0x3db015['serverUrl'],_0x21f368['uniqueid'],md5(_0x21f368['uniqueid']));}return getConnection(_0x3db015)[_0x8403('0x11')](function(_0xa8b4f2){_0x4015ff=_0xa8b4f2;return getUser(_0x3db015,_0x2c3063[_0x8403('0x4a')],_0x4015ff);})[_0x8403('0x11')](function(_0x16262e){_0x4fbb12=_0x16262e;return getEndUser(_0x3db015,_0x576fad,_0x21f368['destcalleridname'],_0x21f368['destcalleridnum'],_0x4015ff);})[_0x8403('0x11')](function(_0x5e3b22){_0x49a380=_0x5e3b22;return getTicket(_0x3db015,_0x4fbb12,_0x49a380,_0x576fad,_0x21f368,_0x576fad[_0x8403('0x4d')],_0x4015ff);})[_0x8403('0x11')](function(_0x5f4057){_0xd28fbf=_0x5f4057;logger['info']('[OUTBOUND]\x20Ticket\x20%s\x20created.',_0xd28fbf['id']);logger['info'](_0x8403('0x5b'),_0xd28fbf['id'],_0x2c3063['name'],_0x3db015['type']);switch(_0x3db015[_0x8403('0x33')]){case _0x8403('0x50'):emit(util['format']('user:%s',_0x2c3063[_0x8403('0x36')]),_0x8403('0x5c'),{'recordId':_0xd28fbf['id']});break;case _0x8403('0x51'):emit(util[_0x8403('0x47')]('user:%s',_0x2c3063[_0x8403('0x36')]),'trigger:browser:url',{'uri':util[_0x8403('0x47')](_0x8403('0x53'),_0x4015ff['instanceUrl'],_0xd28fbf['id'])});break;default:logger[_0x8403('0x55')](_0x8403('0x5a'),_0x8403('0x5d'));}})[_0x8403('0x5e')](function(_0x1582b0){logger[_0x8403('0x55')]('[OUTBOUND]',JSON[_0x8403('0x57')](_0x1582b0));});};exports[_0x8403('0x5f')]=function(_0xf6eb09,_0x4cdd5b,_0x38e76b,_0x968d46,_0x1d749d,_0xe1b59){var _0x55b77a,_0xa89f32,_0x5f0901,_0x105c92;_0xe1b59['serverUrl']=intUtil[_0x8403('0x43')](_0xe1b59['serverUrl']);if(_0x1d749d&&_0x1d749d[_0x8403('0x44')]){logger['info'](_0x8403('0x60'),'Recording\x20is\x20enabled!');_0x4cdd5b[_0x8403('0x46')]=util[_0x8403('0x47')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0xe1b59['serverUrl'],_0x4cdd5b[_0x8403('0x49')],md5(_0x4cdd5b[_0x8403('0x49')]));}else{_0x4cdd5b['recordingURL']='';}return getConnection(_0xe1b59)[_0x8403('0x11')](function(_0x1d9ed6){_0x105c92=_0x1d9ed6;return getUser(_0xe1b59,_0x968d46[_0x8403('0x4a')],_0x105c92);})[_0x8403('0x11')](function(_0x295456){_0x55b77a=_0x295456;return getEndUser(_0xe1b59,_0x38e76b,_0x4cdd5b[_0x8403('0x4b')],_0x4cdd5b[_0x8403('0x4c')],_0x105c92);})['then'](function(_0x55c622){_0xa89f32=_0x55c622;return getTicket(_0xe1b59,_0x55b77a,_0xa89f32,_0x38e76b,_0x4cdd5b,_0x38e76b[_0x8403('0x4d')],_0x105c92);})[_0x8403('0x11')](function(_0x38acc9){_0x5f0901=_0x38acc9;logger[_0x8403('0x15')](_0x8403('0x61'),_0x5f0901['id']);logger[_0x8403('0x15')](_0x8403('0x62'),_0xe1b59[_0x8403('0x33')]);})[_0x8403('0x5e')](function(_0x405022){logger[_0x8403('0x55')]('[ABANDONED]',JSON[_0x8403('0x57')](_0x405022));});};
\ No newline at end of file
+var _0x3dc5=['recordingFormat','none','[OUTBOUND]','destcalleridname','[OUTBOUND]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','%s/%s/e','Salesforce\x20account\x20type\x20not\x20recognized','abandoned','[ABANDONED]','[ABANDONED]\x20Ticket\x20%s\x20created.','[ABANDONED]\x20Integration\x20account\x20type\x20%s.','catch','lodash','request-promise','bluebird','md5','./util','salesforce','socket.io-emitter','localhost','merge','utc','getString','Subjects','Descriptions','WhoId','sobject','Task','User','execute','then','length','find','Email','info','Agent\x20%s\x20found.','resolve','Agent\x20%s\x20not\x20found.\x20Switch\x20to\x20the\x20admin\x20account.','identity','display_name','Searching\x20enduser\x20with\x20phone\x20%s.\x20Serching\x20method\x20used\x20%s.','moduleSearch','Lead','contact','lead','Phone','Name','Enduser\x20with\x20phone\x20%s\x20found.','Enduser\x20with\x20phone\x20%s\x20not\x20found.','<unknown>','format','Caller\x20-\x20%s','moduleCreate','Enduser\x20with\x20phone\x20%s.\x20Creating\x20method\x20used\x20%s.','Company','No\x20Company','upperFirst','forEach','type','string','idField','content','variable','variableName','toString','customVariable','Variable','name','toLowerCase','password','securityToken','Connection','remoteUri','https://login.salesforce.com','clientId','login','username','Connection\x20established.','serverUrl','stripTrailingSlash','monitor_format','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','email','calleridname','calleridnum','Fields','[QUEUE]\x20Ticket\x20%s\x20created','[QUEUE]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','integrationTab','trigger:salesforce:display','newTab','user:%s','trigger:browser:url','instanceUrl','error','[QUEUE]','stringify','outbound'];(function(_0x5b0ca8,_0x4ce171){var _0x4d20c6=function(_0x59bb03){while(--_0x59bb03){_0x5b0ca8['push'](_0x5b0ca8['shift']());}};_0x4d20c6(++_0x4ce171);}(_0x3dc5,0x13b));var _0x53dc=function(_0x3ba3e6,_0x3114a3){_0x3ba3e6=_0x3ba3e6-0x0;var _0x11eeb6=_0x3dc5[_0x3ba3e6];return _0x11eeb6;};'use strict';var _=require(_0x53dc('0x0'));var rp=require(_0x53dc('0x1'));var moment=require('moment');var BPromise=require(_0x53dc('0x2'));var md5=require(_0x53dc('0x3'));var jsforce=require('jsforce');var util=require('util');var intUtil=require(_0x53dc('0x4'));var logger=require('../../../../config/logger')(_0x53dc('0x5'));var io=require(_0x53dc('0x6'))({'host':_0x53dc('0x7'),'port':0x18eb});function emit(_0x3a1c83,_0x1d2b2b,_0x2ec09c){io['to'](_0x3a1c83)['emit'](_0x1d2b2b,_0x2ec09c);}function getTicket(_0x25744f,_0x3a7832,_0x25ed60,_0x175960,_0x1f184b,_0x2b7a6c,_0x595bef){var _0x11cf6c=_[_0x53dc('0x8')]({'OwnerId':_0x3a7832['id'],'ActivityDate':moment[_0x53dc('0x9')](),'IsReminderSet':![],'IsRecurrence':![],'Subject':intUtil[_0x53dc('0xa')](_0x175960[_0x53dc('0xb')],_0x1f184b,'\x20'),'Description':intUtil[_0x53dc('0xa')](_0x175960[_0x53dc('0xc')],_0x1f184b,'\x0a')},getCustomFields(_0x2b7a6c,_0x1f184b));if(_0x25ed60){_0x11cf6c[_0x53dc('0xd')]=_0x25ed60['id'];}return _0x595bef[_0x53dc('0xe')](_0x53dc('0xf'))['create'](_0x11cf6c);}function getUser(_0x2a2c17,_0x3fffcd,_0x312c08){var _0x555535={'Email':_0x3fffcd};var _0x5486c3={'Id':!![],'Username':!![],'Name':!![],'Email':!![]};return _0x312c08[_0x53dc('0xe')](_0x53dc('0x10'))['find'](_0x555535,_0x5486c3)[_0x53dc('0x11')]()[_0x53dc('0x12')](function(_0xc7d28d){if(_0xc7d28d[_0x53dc('0x13')]){var _0x40a615=_[_0x53dc('0x14')](_0xc7d28d,function(_0xa77c76){return _0xa77c76[_0x53dc('0x15')]===_0x3fffcd;});if(_0x40a615){logger[_0x53dc('0x16')](_0x53dc('0x17'),_0x3fffcd);return BPromise[_0x53dc('0x18')]({'id':_0x40a615['Id'],'name':_0x40a615['Name']});}}else{logger[_0x53dc('0x16')](_0x53dc('0x19'),_0x3fffcd);return _0x312c08[_0x53dc('0x1a')]()[_0x53dc('0x12')](function(_0x4267bc){return BPromise[_0x53dc('0x18')]({'id':_0x4267bc['user_id'],'name':_0x4267bc[_0x53dc('0x1b')]});});}});}function getEndUser(_0x1cd02e,_0x2cf3df,_0x31728f,_0x219516,_0x19ea1e){var _0x3b6b25={'Phone':_0x219516};var _0x5379c7={'Id':!![],'Name':!![],'Phone':!![]};return BPromise['resolve']()['then'](function(){logger[_0x53dc('0x16')](_0x53dc('0x1c'),_0x219516,_0x2cf3df[_0x53dc('0x1d')]);switch(_0x2cf3df['moduleSearch']){case'contact_lead':return _0x19ea1e['sobject']('Contact')[_0x53dc('0x14')](_0x3b6b25,_0x5379c7)[_0x53dc('0x11')]()[_0x53dc('0x12')](function(_0xcd96bc){if(_0xcd96bc&&_0xcd96bc['length']){return _0xcd96bc;}else{return _0x19ea1e[_0x53dc('0xe')](_0x53dc('0x1e'))[_0x53dc('0x14')](_0x3b6b25,_0x5379c7);}});case _0x53dc('0x1f'):return _0x19ea1e[_0x53dc('0xe')]('Contact')['find'](_0x3b6b25,_0x5379c7)['execute']();case _0x53dc('0x20'):return _0x19ea1e[_0x53dc('0xe')]('Lead')[_0x53dc('0x14')](_0x3b6b25,_0x5379c7);default:return null;}})[_0x53dc('0x12')](function(_0x457eb5){if(_0x457eb5&&_0x457eb5[_0x53dc('0x13')]){var _0x108fbb=_[_0x53dc('0x14')](_0x457eb5,function(_0x10e83b){return _0x10e83b[_0x53dc('0x21')]===_0x219516;});if(_0x108fbb){return BPromise[_0x53dc('0x18')]({'id':_0x108fbb['Id'],'name':_0x108fbb[_0x53dc('0x22')],'phone':_0x108fbb[_0x53dc('0x21')]});}}})[_0x53dc('0x12')](function(_0x516150){if(_0x516150){logger[_0x53dc('0x16')](_0x53dc('0x23'),_0x219516);return BPromise[_0x53dc('0x18')](_0x516150);}else{logger[_0x53dc('0x16')](_0x53dc('0x24'),_0x219516);var _0x538e5f={'LastName':_0x31728f!==_0x53dc('0x25')?_0x31728f:util[_0x53dc('0x26')](_0x53dc('0x27'),_0x219516),'Phone':_0x219516};if(_0x2cf3df[_0x53dc('0x28')]){switch(_0x2cf3df[_0x53dc('0x28')]){case'contact':logger[_0x53dc('0x16')](_0x53dc('0x29'),_0x219516,_0x2cf3df[_0x53dc('0x28')]);break;case _0x53dc('0x20'):logger['info'](_0x53dc('0x29'),_0x219516,_0x2cf3df['moduleCreate']);_0x538e5f[_0x53dc('0x2a')]=_0x53dc('0x2b');break;default:return null;}}return _0x19ea1e['sobject'](_[_0x53dc('0x2c')](_0x2cf3df[_0x53dc('0x28')]))['create'](_0x538e5f);}});}function getCustomFields(_0x5f2b07,_0x52615c){var _0x2e0572={};if(_0x5f2b07[_0x53dc('0x13')]>0x0){_[_0x53dc('0x2d')](_0x5f2b07,function(_0x1ea35e){if(_0x1ea35e[_0x53dc('0x2e')]===_0x53dc('0x2f')&&_0x1ea35e[_0x53dc('0x30')]){_0x2e0572[_0x1ea35e[_0x53dc('0x30')]]=_0x1ea35e[_0x53dc('0x31')]['toString']();}else if(_0x1ea35e['type']===_0x53dc('0x32')&&_0x1ea35e['variableName']&&_0x1ea35e[_0x53dc('0x30')]){_0x52615c[_0x1ea35e[_0x53dc('0x33')]]&&(_0x2e0572[_0x1ea35e[_0x53dc('0x30')]]=_0x52615c[_0x1ea35e['variableName']][_0x53dc('0x34')]());}else if(_0x1ea35e[_0x53dc('0x2e')]===_0x53dc('0x35')&&_0x1ea35e[_0x53dc('0x36')]&&_0x1ea35e['Variable']['name']&&_0x1ea35e['idField']){_0x52615c[_0x1ea35e['Variable'][_0x53dc('0x37')][_0x53dc('0x38')]()]&&(_0x2e0572[_0x1ea35e[_0x53dc('0x30')]]=_0x52615c[_0x1ea35e[_0x53dc('0x36')][_0x53dc('0x37')][_0x53dc('0x38')]()][_0x53dc('0x34')]());}});}return _0x2e0572;}function getConnection(_0x57173c){var _0x281d1b=_0x57173c[_0x53dc('0x39')]['concat'](_0x57173c[_0x53dc('0x3a')]);var _0x53b8c2=new jsforce[(_0x53dc('0x3b'))]({'oauth2':{'loginUrl':_0x57173c[_0x53dc('0x3c')]||_0x53dc('0x3d'),'clientId':_0x57173c[_0x53dc('0x3e')],'clientSecret':_0x57173c['clientSecret']}});return _0x53b8c2[_0x53dc('0x3f')](_0x57173c[_0x53dc('0x40')],_0x281d1b)[_0x53dc('0x12')](function(){logger[_0x53dc('0x16')](_0x53dc('0x41'));return _0x53b8c2;});}exports['queue']=function(_0x230bdf,_0x5324cf,_0x4db07c,_0x5dc020,_0x175306,_0x40fce0){var _0x5b86ca,_0x3eef50,_0x37f9a3,_0x264d11;_0x40fce0[_0x53dc('0x42')]=intUtil[_0x53dc('0x43')](_0x40fce0[_0x53dc('0x42')]);if(_0x175306&&_0x175306[_0x53dc('0x44')]){logger[_0x53dc('0x16')]('[QUEUE]',_0x53dc('0x45'));_0x5324cf[_0x53dc('0x46')]=util[_0x53dc('0x26')](_0x53dc('0x47'),_0x40fce0[_0x53dc('0x42')],_0x5324cf[_0x53dc('0x48')],md5(_0x5324cf[_0x53dc('0x48')]));}else{_0x5324cf[_0x53dc('0x46')]='';}return getConnection(_0x40fce0)['then'](function(_0x3c0fbb){_0x264d11=_0x3c0fbb;return getUser(_0x40fce0,_0x5dc020[_0x53dc('0x49')],_0x264d11);})[_0x53dc('0x12')](function(_0x85c35b){_0x5b86ca=_0x85c35b;return getEndUser(_0x40fce0,_0x4db07c,_0x5324cf[_0x53dc('0x4a')],_0x5324cf[_0x53dc('0x4b')],_0x264d11);})[_0x53dc('0x12')](function(_0x334a5f){_0x3eef50=_0x334a5f;return getTicket(_0x40fce0,_0x5b86ca,_0x3eef50,_0x4db07c,_0x5324cf,_0x4db07c[_0x53dc('0x4c')],_0x264d11);})[_0x53dc('0x12')](function(_0x49d9cc){_0x37f9a3=_0x49d9cc;logger[_0x53dc('0x16')](_0x53dc('0x4d'),_0x37f9a3['id']);logger[_0x53dc('0x16')](_0x53dc('0x4e'),_0x37f9a3['id'],_0x5dc020['name'],_0x40fce0[_0x53dc('0x2e')]);switch(_0x40fce0[_0x53dc('0x2e')]){case _0x53dc('0x4f'):emit(util[_0x53dc('0x26')]('user:%s',_0x5dc020[_0x53dc('0x37')]),_0x53dc('0x50'),{'recordId':_0x37f9a3['id']});break;case _0x53dc('0x51'):emit(util[_0x53dc('0x26')](_0x53dc('0x52'),_0x5dc020['name']),_0x53dc('0x53'),{'uri':util[_0x53dc('0x26')]('%s/%s/e',_0x264d11[_0x53dc('0x54')],_0x37f9a3['id'])});break;default:logger[_0x53dc('0x55')]('[QUEUE]\x20Salesforce\x20account\x20type\x20not\x20recognized.');}})['catch'](function(_0x14d279){logger[_0x53dc('0x55')](_0x53dc('0x56'),JSON[_0x53dc('0x57')](_0x14d279));});};exports[_0x53dc('0x58')]=function(_0x227ce6,_0x37dd9f,_0x7ec2c9,_0x5634be,_0x18f322,_0x18a005,_0x5001d5){var _0x3a2da6,_0x31a7f5,_0x4fe273,_0x54b5ce;_0x18a005[_0x53dc('0x42')]=intUtil[_0x53dc('0x43')](_0x18a005['serverUrl']);if(_0x5001d5&&_0x5001d5[_0x53dc('0x59')]&&_0x5001d5[_0x53dc('0x59')]!==_0x53dc('0x5a')){logger[_0x53dc('0x16')](_0x53dc('0x5b'),_0x53dc('0x45'));_0x37dd9f['recordingURL']=util[_0x53dc('0x26')](_0x53dc('0x47'),_0x18a005['serverUrl'],_0x37dd9f[_0x53dc('0x48')],md5(_0x37dd9f[_0x53dc('0x48')]));}return getConnection(_0x18a005)[_0x53dc('0x12')](function(_0x2ce640){_0x54b5ce=_0x2ce640;return getUser(_0x18a005,_0x5634be['email'],_0x54b5ce);})[_0x53dc('0x12')](function(_0x32562f){_0x3a2da6=_0x32562f;return getEndUser(_0x18a005,_0x7ec2c9,_0x37dd9f[_0x53dc('0x5c')],_0x37dd9f['destcalleridnum'],_0x54b5ce);})[_0x53dc('0x12')](function(_0xf98071){_0x31a7f5=_0xf98071;return getTicket(_0x18a005,_0x3a2da6,_0x31a7f5,_0x7ec2c9,_0x37dd9f,_0x7ec2c9[_0x53dc('0x4c')],_0x54b5ce);})[_0x53dc('0x12')](function(_0x1bcf11){_0x4fe273=_0x1bcf11;logger['info']('[OUTBOUND]\x20Ticket\x20%s\x20created.',_0x4fe273['id']);logger[_0x53dc('0x16')](_0x53dc('0x5d'),_0x4fe273['id'],_0x5634be[_0x53dc('0x37')],_0x18a005[_0x53dc('0x2e')]);switch(_0x18a005[_0x53dc('0x2e')]){case _0x53dc('0x4f'):emit(util[_0x53dc('0x26')](_0x53dc('0x52'),_0x5634be['name']),'trigger:salesforce:display',{'recordId':_0x4fe273['id']});break;case _0x53dc('0x51'):emit(util['format'](_0x53dc('0x52'),_0x5634be[_0x53dc('0x37')]),_0x53dc('0x53'),{'uri':util[_0x53dc('0x26')](_0x53dc('0x5e'),_0x54b5ce[_0x53dc('0x54')],_0x4fe273['id'])});break;default:logger[_0x53dc('0x55')]('[OUTBOUND]',_0x53dc('0x5f'));}})['catch'](function(_0x25e431){logger['error']('[OUTBOUND]',JSON[_0x53dc('0x57')](_0x25e431));});};exports[_0x53dc('0x60')]=function(_0x83511b,_0x2c1b45,_0xc78fd3,_0x58bc22,_0x4e2eea,_0xa35590){var _0x3983c5,_0xb3efd8,_0x4f39bd,_0x1c9e00;_0xa35590[_0x53dc('0x42')]=intUtil[_0x53dc('0x43')](_0xa35590['serverUrl']);if(_0x4e2eea&&_0x4e2eea[_0x53dc('0x44')]){logger[_0x53dc('0x16')](_0x53dc('0x61'),_0x53dc('0x45'));_0x2c1b45['recordingURL']=util[_0x53dc('0x26')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0xa35590[_0x53dc('0x42')],_0x2c1b45['uniqueid'],md5(_0x2c1b45[_0x53dc('0x48')]));}else{_0x2c1b45[_0x53dc('0x46')]='';}return getConnection(_0xa35590)[_0x53dc('0x12')](function(_0x4e6fd2){_0x1c9e00=_0x4e6fd2;return getUser(_0xa35590,_0x58bc22[_0x53dc('0x49')],_0x1c9e00);})[_0x53dc('0x12')](function(_0x185154){_0x3983c5=_0x185154;return getEndUser(_0xa35590,_0xc78fd3,_0x2c1b45['calleridname'],_0x2c1b45['calleridnum'],_0x1c9e00);})['then'](function(_0x74895f){_0xb3efd8=_0x74895f;return getTicket(_0xa35590,_0x3983c5,_0xb3efd8,_0xc78fd3,_0x2c1b45,_0xc78fd3[_0x53dc('0x4c')],_0x1c9e00);})[_0x53dc('0x12')](function(_0x4e5f74){_0x4f39bd=_0x4e5f74;logger[_0x53dc('0x16')](_0x53dc('0x62'),_0x4f39bd['id']);logger['info'](_0x53dc('0x63'),_0xa35590[_0x53dc('0x2e')]);})[_0x53dc('0x64')](function(_0x4f28fb){logger[_0x53dc('0x55')](_0x53dc('0x61'),JSON[_0x53dc('0x57')](_0x4f28fb));});};
\ No newline at end of file
index 5f5bc09..96ca602 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0ab1=['Ticket\x20created!','users','abandoned','[ABANDONED]','The\x20Ticket\x20ID\x20is:','lodash','request-promise','bluebird','util','./util','../../../../config/logger','sugarcrm','socket.io-emitter','localhost','POST','emit','info','Creating\x20new\x20ticket...','name','Subjects','assigned_user_id','description','getString','Descriptions','date_start','toISOString','slice','replace','duration_hours','duration_minutes','parent_id','parent_type','Contacts','length','forEach','variableName','idField','set_entry','JSON','Calls','format','Basic\x20%s','toString','base64','get_server_info','stringify','get_entry_list','Employees','INSTR\x20(\x20users.user_name,\x20\x22%s\x22)\x20>\x200','find','entry_list','name_value_list','value','Agent\x20found!','resolve','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','user_name','Searching\x20enduser\x20with\x20phone','phone_home','then','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','first_name','Caller\x20-\x20%s','Enduser\x20created.','debug','[HTTP]','merge','map','type','string','nameField','customField','custom_fields','content','variable','customVariable','Variable','push','toLowerCase','login','username','PLAIN','xCALLY\x20Motion\x20integration','sessionID','Account\x20%d\x20is\x20not\x20valid','queue','remoteUri','serverUrl','stripTrailingSlash','%s/service/v4_1/rest.php','monitor_format','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','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','[QUEUE]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','catch','error','outbound','uri','recordingFormat','none','[OUTBOUND]','destcalleridname','destcalleridnum'];(function(_0x4671d3,_0x5dc32d){var _0x283af6=function(_0x535f6a){while(--_0x535f6a){_0x4671d3['push'](_0x4671d3['shift']());}};_0x283af6(++_0x5dc32d);}(_0x0ab1,0x1dd));var _0x10ab=function(_0x3dcf58,_0x385812){_0x3dcf58=_0x3dcf58-0x0;var _0x3efa96=_0x0ab1[_0x3dcf58];return _0x3efa96;};'use strict';var _=require(_0x10ab('0x0'));var rp=require(_0x10ab('0x1'));var BPromise=require(_0x10ab('0x2'));var md5=require('md5');var util=require(_0x10ab('0x3'));var intUtil=require(_0x10ab('0x4'));var logger=require(_0x10ab('0x5'))(_0x10ab('0x6'));var io=require(_0x10ab('0x7'))({'host':_0x10ab('0x8'),'port':0x18eb});var def={'method':_0x10ab('0x9'),'json':!![]};function emit(_0x2f17de,_0x29656,_0x349fab){io['to'](_0x2f17de)[_0x10ab('0xa')](_0x29656,_0x349fab);}function getTicket(_0x4b3dd3,_0x29368a,_0x5a5929,_0x362668,_0x2d0b66,_0x1f65d6,_0x5f206a){logger[_0x10ab('0xb')](_0x10ab('0xc'));var _0x3a4896=new Date();var _0x5cb257=[{'name':_0x10ab('0xd'),'value':intUtil['getString'](_0x362668[_0x10ab('0xe')],_0x2d0b66,'\x20')},{'name':_0x10ab('0xf'),'value':_0x29368a['id']},{'name':'created_by','value':_0x29368a['id']},{'name':_0x10ab('0x10'),'value':intUtil[_0x10ab('0x11')](_0x362668[_0x10ab('0x12')],_0x2d0b66,'\x0a')},{'name':_0x10ab('0x13'),'value':_0x3a4896[_0x10ab('0x14')]()[_0x10ab('0x15')](0x0,0x13)[_0x10ab('0x16')]('T','\x20')},{'name':_0x10ab('0x17'),'value':'0'},{'name':_0x10ab('0x18'),'value':'15'},{'name':_0x10ab('0x19'),'value':_0x5a5929['id']},{'name':_0x10ab('0x1a'),'value':_0x10ab('0x1b')},{'name':'parent_name','value':_0x5a5929[_0x10ab('0xd')]}];if(_0x1f65d6[_0x10ab('0x1c')]){_[_0x10ab('0x1d')](_0x1f65d6,function(_0x4e9c50){if(_0x2d0b66[_0x4e9c50[_0x10ab('0x1e')]]){_0x5cb257['push']({'name':_0x4e9c50[_0x10ab('0x1f')],'value':_0x2d0b66[_0x4e9c50['variableName']]});}});}return request({'form':{'method':_0x10ab('0x20'),'input_type':_0x10ab('0x21'),'response_type':_0x10ab('0x21'),'rest_data':JSON['stringify']({'session':_0x5f206a['id'],'module_name':_0x10ab('0x22'),'name_value_list':_0x5cb257})}});}function getAuth(_0x26de42){return util[_0x10ab('0x23')](_0x10ab('0x24'),new Buffer(_0x26de42['apiKey']+':X')[_0x10ab('0x25')](_0x10ab('0x26')));}function getServerInfo(_0x29793a){return request({'form':{'method':_0x10ab('0x27'),'input_type':'JSON','response_type':_0x10ab('0x21'),'rest_data':JSON[_0x10ab('0x28')]({'session':_0x29793a['id']})}});}function getUser(_0x537f4c,_0x5cf49d,_0x3d4fe0){logger[_0x10ab('0xb')]('Getting\x20agent\x20with\x20name',_0x5cf49d);return request({'form':{'method':_0x10ab('0x29'),'input_type':_0x10ab('0x21'),'response_type':_0x10ab('0x21'),'rest_data':JSON[_0x10ab('0x28')]({'session':_0x3d4fe0['id'],'module_name':_0x10ab('0x2a'),'query':util[_0x10ab('0x23')](_0x10ab('0x2b'),_0x5cf49d),'order_by':'','offset':'0','select_fields':['id',_0x10ab('0xd'),'user_name'],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})['then'](function(_0x1e7ea5){if(_0x1e7ea5['entry_list'][_0x10ab('0x1c')]){var _0x5ccb4d=_[_0x10ab('0x2c')](_0x1e7ea5[_0x10ab('0x2d')],function(_0x667a7a){return _0x667a7a[_0x10ab('0x2e')]['user_name'][_0x10ab('0x2f')]===_0x5cf49d;});if(_0x5ccb4d){logger[_0x10ab('0xb')](_0x10ab('0x30'));return BPromise[_0x10ab('0x31')]({'id':_0x5ccb4d[_0x10ab('0x2e')]['id'][_0x10ab('0x2f')],'name':_0x5ccb4d[_0x10ab('0x2e')][_0x10ab('0xd')]['value']});}}else{logger[_0x10ab('0xb')](_0x10ab('0x32'));return BPromise[_0x10ab('0x31')]({'id':_0x3d4fe0[_0x10ab('0x2e')]['user_id']['id'],'name':_0x3d4fe0['name_value_list'][_0x10ab('0x33')]['id']});}});}function getEndUser(_0x4b3b7b,_0xb32029,_0x15eb41,_0x2f18ab){logger[_0x10ab('0xb')](_0x10ab('0x34'),_0x15eb41);return request({'form':{'method':_0x10ab('0x29'),'input_type':'JSON','response_type':_0x10ab('0x21'),'rest_data':JSON[_0x10ab('0x28')]({'session':_0x2f18ab['id'],'module_name':_0x10ab('0x1b'),'query':util[_0x10ab('0x23')]('contacts.phone_home\x20=\x20\x22%s\x22',_0x15eb41),'order_by':'','offset':'0','select_fields':['id',_0x10ab('0xd'),_0x10ab('0x35')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})[_0x10ab('0x36')](function(_0x1de652){if(_0x1de652[_0x10ab('0x2d')][_0x10ab('0x1c')]){var _0x5ebecc=_['find'](_0x1de652['entry_list'],function(_0x44474c){return _0x44474c[_0x10ab('0x2e')][_0x10ab('0x35')][_0x10ab('0x2f')]===_0x15eb41;});if(_0x5ebecc){logger['info'](_0x10ab('0x37'));return BPromise[_0x10ab('0x31')]({'id':_0x5ebecc[_0x10ab('0x2e')]['id'][_0x10ab('0x2f')],'name':_0x5ebecc['name_value_list']['name'][_0x10ab('0x2f')],'phone':_0x5ebecc[_0x10ab('0x2e')][_0x10ab('0x35')]['value']});}}else{logger[_0x10ab('0xb')](_0x10ab('0x38'));return request({'form':{'method':_0x10ab('0x20'),'input_type':_0x10ab('0x21'),'response_type':_0x10ab('0x21'),'rest_data':JSON['stringify']({'session':_0x2f18ab['id'],'module_name':_0x10ab('0x1b'),'name_value_list':[{'name':_0x10ab('0x39'),'value':_0xb32029!=='<unknown>'?_0xb32029:util[_0x10ab('0x23')](_0x10ab('0x3a'),_0x15eb41)},{'name':'phone_home','value':_0x15eb41}]})}})[_0x10ab('0x36')](function(_0x2f317d){logger['info'](_0x10ab('0x3b'));return BPromise[_0x10ab('0x31')]({'id':_0x2f317d['id'],'name':_0x2f317d[_0x10ab('0x2d')][_0x10ab('0x39')][_0x10ab('0x2f')],'phone':_0x2f317d[_0x10ab('0x2d')][_0x10ab('0x35')][_0x10ab('0x2f')]});});}});}function request(_0x2decc6){logger[_0x10ab('0x3c')](_0x10ab('0x3d'),JSON['stringify'](_0x2decc6));return rp(_[_0x10ab('0x3e')](def,_0x2decc6));}function getTags(_0x50036d,_0x245a9a){var _0x300c6b=[];if(_0x50036d&&_0x50036d[_0x10ab('0x1c')]>0x0){_0x300c6b=_[_0x10ab('0x3f')](_0x50036d,_0x245a9a);}return _0x300c6b;}function getCustomFields(_0x25fc17,_0x2b9507){var _0x30e036=[];var _0xa019ca={'custom_fields':[]};if(_0x25fc17[_0x10ab('0x1c')]>0x0){_[_0x10ab('0x1d')](_0x25fc17,function(_0x1d973c){if(_0x1d973c[_0x10ab('0x40')]===_0x10ab('0x41')&&_0x1d973c[_0x10ab('0x42')]&&!_0x1d973c[_0x10ab('0x43')]){_0xa019ca[_0x1d973c[_0x10ab('0x42')]['toLowerCase']()]=_0x1d973c['content'][_0x10ab('0x25')]();}else if(_0x1d973c[_0x10ab('0x40')]===_0x10ab('0x41')&&_0x1d973c[_0x10ab('0x1f')]&&_0x1d973c['customField']){_0xa019ca[_0x10ab('0x44')]['push']({'id':_0x1d973c[_0x10ab('0x1f')],'value':_0x1d973c[_0x10ab('0x45')][_0x10ab('0x25')]()});}else if(_0x1d973c[_0x10ab('0x40')]===_0x10ab('0x46')&&_0x1d973c[_0x10ab('0x1e')]&&_0x1d973c[_0x10ab('0x1f')]&&_0x1d973c[_0x10ab('0x43')]){_0x2b9507[_0x1d973c[_0x10ab('0x1e')]]&&_0xa019ca['custom_fields']['push']({'id':_0x1d973c[_0x10ab('0x1f')],'value':_0x2b9507[_0x1d973c['variableName']][_0x10ab('0x25')]()});}else if(_0x1d973c['type']===_0x10ab('0x47')&&_0x1d973c[_0x10ab('0x48')]&&_0x1d973c[_0x10ab('0x48')][_0x10ab('0xd')]&&_0x1d973c[_0x10ab('0x1f')]&&_0x1d973c[_0x10ab('0x43')]){_0x2b9507[_0x1d973c['Variable'][_0x10ab('0xd')]['toLowerCase']()]&&_0xa019ca[_0x10ab('0x44')][_0x10ab('0x49')]({'id':_0x1d973c[_0x10ab('0x1f')],'value':_0x2b9507[_0x1d973c[_0x10ab('0x48')][_0x10ab('0xd')][_0x10ab('0x4a')]()][_0x10ab('0x25')]()});}});}return _0xa019ca;}function getConnection(_0x1bbd60){return request({'method':_0x10ab('0x9'),'form':{'method':_0x10ab('0x4b'),'input_type':_0x10ab('0x21'),'response_type':_0x10ab('0x21'),'rest_data':JSON[_0x10ab('0x28')]({'user_auth':{'user_name':_0x1bbd60[_0x10ab('0x4c')],'password':_0x1bbd60['password'],'encryption':_0x10ab('0x4d')},'application':_0x10ab('0x4e')})}})['then'](function(_0x669322){var _0xbc8c9d=_0x669322;if(_0xbc8c9d['id']){def[_0x10ab('0x4f')]=_0xbc8c9d['id'];return BPromise[_0x10ab('0x31')](_0xbc8c9d);}else{throw new Error(util[_0x10ab('0x23')](_0x10ab('0x50'),_0x1bbd60['id']));}});}function setRelationship(_0xe2746c,_0x16daf1,_0x37b118,_0x51c8fa){return request({'form':{'method':'set_relationship','input_type':_0x10ab('0x21'),'response_type':_0x10ab('0x21'),'rest_data':JSON['stringify']({'session':_0xe2746c['id'],'module_name':'Calls','module_id':_0x37b118['id'],'link_field_name':_0x51c8fa,'related_ids':[_0x16daf1['id']]})}});}exports[_0x10ab('0x51')]=function(_0x366306,_0x8ff61c,_0x515a86,_0x531147,_0x420dff,_0x2bcfac){var _0x28fe61,_0xc75661,_0x5bb416,_0x3c3394;_0x2bcfac[_0x10ab('0x52')]=intUtil['stripTrailingSlash'](_0x2bcfac[_0x10ab('0x52')]);_0x2bcfac[_0x10ab('0x53')]=intUtil[_0x10ab('0x54')](_0x2bcfac['serverUrl']);def['uri']=util[_0x10ab('0x23')](_0x10ab('0x55'),_0x2bcfac[_0x10ab('0x52')]);if(_0x420dff&&_0x420dff[_0x10ab('0x56')]){logger[_0x10ab('0xb')]('[QUEUE]',_0x10ab('0x57'));_0x8ff61c[_0x10ab('0x58')]=util[_0x10ab('0x23')](_0x10ab('0x59'),_0x2bcfac['serverUrl'],_0x8ff61c[_0x10ab('0x5a')],md5(_0x8ff61c[_0x10ab('0x5a')]));}else{_0x8ff61c[_0x10ab('0x58')]='';}return getConnection(_0x2bcfac)['then'](function(_0x52230c){_0x3c3394=_0x52230c;return getUser(_0x2bcfac,_0x531147[_0x10ab('0xd')],_0x3c3394);})[_0x10ab('0x36')](function(_0x3c1674){_0x28fe61=_0x3c1674;logger['info'](_0x10ab('0x5b'),_0x28fe61['id']);return getEndUser(_0x2bcfac,_0x8ff61c[_0x10ab('0x5c')],_0x8ff61c[_0x10ab('0x5d')],_0x3c3394);})[_0x10ab('0x36')](function(_0xc91437){_0xc75661=_0xc91437;logger[_0x10ab('0xb')](_0x10ab('0x5e'),_0xc75661['id']);return getTicket(_0x2bcfac,_0x28fe61,_0xc75661,_0x515a86,_0x8ff61c,_0x515a86['Fields'],_0x3c3394);})[_0x10ab('0x36')](function(_0x14124f){_0x5bb416=_0x14124f;logger[_0x10ab('0xb')]('Ticket\x20created!');logger[_0x10ab('0xb')]('The\x20Ticket\x20ID\x20is:',_0x5bb416['id']);return setRelationship(_0x3c3394,_0x28fe61,_0x5bb416,'users');})[_0x10ab('0x36')](function(){return setRelationship(_0x3c3394,_0xc75661,_0x5bb416,_0x10ab('0x5f'));})[_0x10ab('0x36')](function(){return getServerInfo(_0x3c3394);})[_0x10ab('0x36')](function(_0x4de1b2){var _0x4c0795=parseInt(_0x4de1b2[_0x10ab('0x60')][_0x10ab('0x61')](0x0));var _0x4f9e38=util['format'](_0x10ab('0x62'),_0x2bcfac[_0x10ab('0x52')],_0x5bb416['id']);if(_0x4c0795>0x6){_0x4f9e38=util[_0x10ab('0x23')](_0x10ab('0x63'),_0x2bcfac[_0x10ab('0x52')],_0x5bb416['id']);}logger[_0x10ab('0xb')](_0x10ab('0x64'),_0x10ab('0x65'));emit(util['format'](_0x10ab('0x66'),_0x531147[_0x10ab('0xd')]),_0x10ab('0x67'),{'uri':_0x4f9e38});})[_0x10ab('0x68')](function(_0xa7caaf){logger[_0x10ab('0x69')]('[QUEUE]',JSON[_0x10ab('0x28')](_0xa7caaf));});};exports[_0x10ab('0x6a')]=function(_0x363793,_0x43457f,_0x5c5f81,_0x3ad5e9,_0x3f48dd,_0x4eb974,_0x47b741){var _0xd5b4d3,_0x5977e3,_0x19640d,_0x4e9c3a;_0x4eb974[_0x10ab('0x52')]=intUtil['stripTrailingSlash'](_0x4eb974['remoteUri']);_0x4eb974[_0x10ab('0x53')]=intUtil['stripTrailingSlash'](_0x4eb974[_0x10ab('0x53')]);def[_0x10ab('0x6b')]=util[_0x10ab('0x23')](_0x10ab('0x55'),_0x4eb974[_0x10ab('0x52')]);if(_0x47b741&&_0x47b741['recordingFormat']&&_0x47b741[_0x10ab('0x6c')]!==_0x10ab('0x6d')){logger[_0x10ab('0xb')](_0x10ab('0x6e'),'Recording\x20is\x20enabled!');_0x43457f[_0x10ab('0x58')]=util[_0x10ab('0x23')](_0x10ab('0x59'),_0x4eb974['serverUrl'],_0x43457f[_0x10ab('0x5a')],md5(_0x43457f[_0x10ab('0x5a')]));}return getConnection(_0x4eb974)['then'](function(_0x226537){_0x4e9c3a=_0x226537;return getUser(_0x4eb974,_0x3ad5e9['name'],_0x4e9c3a);})[_0x10ab('0x36')](function(_0x5b12d9){_0xd5b4d3=_0x5b12d9;logger[_0x10ab('0xb')](_0x10ab('0x5b'),_0xd5b4d3['id']);return getEndUser(_0x4eb974,_0x43457f[_0x10ab('0x6f')],_0x43457f[_0x10ab('0x70')],_0x4e9c3a);})[_0x10ab('0x36')](function(_0x59fc96){_0x5977e3=_0x59fc96;logger[_0x10ab('0xb')](_0x10ab('0x5e'),_0x5977e3['id']);return getTicket(_0x4eb974,_0xd5b4d3,_0x5977e3,_0x5c5f81,_0x43457f,_0x5c5f81['Fields'],_0x4e9c3a);})[_0x10ab('0x36')](function(_0x8516f7){_0x19640d=_0x8516f7;logger[_0x10ab('0xb')](_0x10ab('0x71'));logger['info']('The\x20Ticket\x20ID\x20is:',_0x19640d['id']);return setRelationship(_0x4e9c3a,_0xd5b4d3,_0x19640d,_0x10ab('0x72'));})[_0x10ab('0x36')](function(){return setRelationship(_0x4e9c3a,_0x5977e3,_0x19640d,_0x10ab('0x5f'));})['then'](function(){return getServerInfo(_0x4e9c3a);})[_0x10ab('0x36')](function(_0x7ea799){var _0x4e12ac=parseInt(_0x7ea799[_0x10ab('0x60')][_0x10ab('0x61')](0x0));var _0x4b610b=util[_0x10ab('0x23')](_0x10ab('0x62'),_0x4eb974['remoteUri'],_0x19640d['id']);if(_0x4e12ac>0x6){_0x4b610b=util[_0x10ab('0x23')](_0x10ab('0x63'),_0x4eb974[_0x10ab('0x52')],_0x19640d['id']);}logger[_0x10ab('0xb')]('[OUTBOUND]',_0x10ab('0x65'));emit(util[_0x10ab('0x23')](_0x10ab('0x66'),_0x3ad5e9[_0x10ab('0xd')]),_0x10ab('0x67'),{'uri':_0x4b610b});})[_0x10ab('0x68')](function(_0x2306d6){logger[_0x10ab('0x69')](_0x10ab('0x6e'),JSON[_0x10ab('0x28')](_0x2306d6));});};exports[_0x10ab('0x73')]=function(_0x417af6,_0x33f5f0,_0x247125,_0x42c9df,_0x46c309,_0x110ab5){var _0x7452,_0x54b45a,_0x423a1c,_0x4e1e01;_0x110ab5[_0x10ab('0x52')]=intUtil[_0x10ab('0x54')](_0x110ab5[_0x10ab('0x52')]);_0x110ab5[_0x10ab('0x53')]=intUtil[_0x10ab('0x54')](_0x110ab5['serverUrl']);def[_0x10ab('0x6b')]=util[_0x10ab('0x23')]('%s/service/v4_1/rest.php',_0x110ab5[_0x10ab('0x52')]);if(_0x46c309&&_0x46c309[_0x10ab('0x56')]){logger[_0x10ab('0xb')](_0x10ab('0x74'),_0x10ab('0x57'));_0x33f5f0[_0x10ab('0x58')]=util[_0x10ab('0x23')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x110ab5[_0x10ab('0x53')],_0x33f5f0[_0x10ab('0x5a')],md5(_0x33f5f0[_0x10ab('0x5a')]));}else{_0x33f5f0['recordingURL']='';}return getConnection(_0x110ab5)[_0x10ab('0x36')](function(_0x1458c6){_0x4e1e01=_0x1458c6;return getUser(_0x110ab5,_0x42c9df[_0x10ab('0xd')],_0x4e1e01);})[_0x10ab('0x36')](function(_0x50e7de){_0x7452=_0x50e7de;logger[_0x10ab('0xb')](_0x10ab('0x5b'),_0x7452['id']);return getEndUser(_0x110ab5,_0x33f5f0[_0x10ab('0x5c')],_0x33f5f0[_0x10ab('0x5d')],_0x4e1e01);})[_0x10ab('0x36')](function(_0x431474){_0x54b45a=_0x431474;logger['info'](_0x10ab('0x5e'),_0x54b45a['id']);return getTicket(_0x110ab5,_0x7452,_0x54b45a,_0x247125,_0x33f5f0,_0x247125['Fields'],_0x4e1e01);})[_0x10ab('0x36')](function(_0x96beaf){_0x423a1c=_0x96beaf;logger[_0x10ab('0xb')]('Ticket\x20created!');logger[_0x10ab('0xb')](_0x10ab('0x75'),_0x423a1c['id']);return setRelationship(_0x4e1e01,_0x7452,_0x423a1c,_0x10ab('0x72'));})[_0x10ab('0x36')](function(){return setRelationship(_0x4e1e01,_0x54b45a,_0x423a1c,_0x10ab('0x5f'));})[_0x10ab('0x36')](function(){return getServerInfo(_0x4e1e01);})[_0x10ab('0x68')](function(_0xf7e026){logger['error'](_0x10ab('0x74'),JSON[_0x10ab('0x28')](_0xf7e026));});};
\ No newline at end of file
+var _0x2f9a=['string','nameField','customField','content','type','custom_fields','customVariable','Variable','toLowerCase','username','PLAIN','sessionID','Account\x20%d\x20is\x20not\x20valid','set_relationship','queue','remoteUri','stripTrailingSlash','serverUrl','uri','%s/service/v4_1/rest.php','monitor_format','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','The\x20User\x20ID\x20is:','The\x20Enduser\x20ID\x20is:','Fields','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','users','contacts','version','%s/index.php?action=ajaxui#ajaxUILoc=index.php%3Fmodule%3DCalls%26action%3DEditView%26record%3D%s','[QUEUE]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','catch','error','outbound','recordingFormat','none','destcalleridnum','%s/#bwc/index.php?module=Calls&action=EditView&record=%s','[OUTBOUND]','trigger:browser:url','abandoned','[ABANDONED]','calleridname','calleridnum','lodash','request-promise','bluebird','md5','util','./util','../../../../config/logger','sugarcrm','localhost','POST','emit','info','Creating\x20new\x20ticket...','name','getString','assigned_user_id','created_by','description','toISOString','replace','duration_hours','duration_minutes','parent_id','Contacts','parent_name','length','forEach','variableName','push','idField','set_entry','JSON','stringify','Calls','format','Basic\x20%s','apiKey','toString','base64','get_server_info','Getting\x20agent\x20with\x20name','Employees','user_name','entry_list','find','value','Agent\x20found!','resolve','name_value_list','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','Searching\x20enduser\x20with\x20phone','get_entry_list','contacts.phone_home\x20=\x20\x22%s\x22','phone_home','then','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','first_name','<unknown>','Caller\x20-\x20%s','Enduser\x20created.','debug','merge','map'];(function(_0x4c6ac7,_0x5da34d){var _0x4837c4=function(_0x182dc7){while(--_0x182dc7){_0x4c6ac7['push'](_0x4c6ac7['shift']());}};_0x4837c4(++_0x5da34d);}(_0x2f9a,0x116));var _0xa2f9=function(_0x5da0d9,_0x49ee54){_0x5da0d9=_0x5da0d9-0x0;var _0x4b6d2f=_0x2f9a[_0x5da0d9];return _0x4b6d2f;};'use strict';var _=require(_0xa2f9('0x0'));var rp=require(_0xa2f9('0x1'));var BPromise=require(_0xa2f9('0x2'));var md5=require(_0xa2f9('0x3'));var util=require(_0xa2f9('0x4'));var intUtil=require(_0xa2f9('0x5'));var logger=require(_0xa2f9('0x6'))(_0xa2f9('0x7'));var io=require('socket.io-emitter')({'host':_0xa2f9('0x8'),'port':0x18eb});var def={'method':_0xa2f9('0x9'),'json':!![]};function emit(_0x5b220d,_0xe277dd,_0x6824e8){io['to'](_0x5b220d)[_0xa2f9('0xa')](_0xe277dd,_0x6824e8);}function getTicket(_0x4b431c,_0x3d6544,_0xf1ac72,_0x384b44,_0x4de646,_0x762cdb,_0x44c145){logger[_0xa2f9('0xb')](_0xa2f9('0xc'));var _0x35b979=new Date();var _0x7eefc3=[{'name':_0xa2f9('0xd'),'value':intUtil[_0xa2f9('0xe')](_0x384b44['Subjects'],_0x4de646,'\x20')},{'name':_0xa2f9('0xf'),'value':_0x3d6544['id']},{'name':_0xa2f9('0x10'),'value':_0x3d6544['id']},{'name':_0xa2f9('0x11'),'value':intUtil[_0xa2f9('0xe')](_0x384b44['Descriptions'],_0x4de646,'\x0a')},{'name':'date_start','value':_0x35b979[_0xa2f9('0x12')]()['slice'](0x0,0x13)[_0xa2f9('0x13')]('T','\x20')},{'name':_0xa2f9('0x14'),'value':'0'},{'name':_0xa2f9('0x15'),'value':'15'},{'name':_0xa2f9('0x16'),'value':_0xf1ac72['id']},{'name':'parent_type','value':_0xa2f9('0x17')},{'name':_0xa2f9('0x18'),'value':_0xf1ac72[_0xa2f9('0xd')]}];if(_0x762cdb[_0xa2f9('0x19')]){_[_0xa2f9('0x1a')](_0x762cdb,function(_0x2bac6b){if(_0x4de646[_0x2bac6b[_0xa2f9('0x1b')]]){_0x7eefc3[_0xa2f9('0x1c')]({'name':_0x2bac6b[_0xa2f9('0x1d')],'value':_0x4de646[_0x2bac6b[_0xa2f9('0x1b')]]});}});}return request({'form':{'method':_0xa2f9('0x1e'),'input_type':_0xa2f9('0x1f'),'response_type':'JSON','rest_data':JSON[_0xa2f9('0x20')]({'session':_0x44c145['id'],'module_name':_0xa2f9('0x21'),'name_value_list':_0x7eefc3})}});}function getAuth(_0xc5e46d){return util[_0xa2f9('0x22')](_0xa2f9('0x23'),new Buffer(_0xc5e46d[_0xa2f9('0x24')]+':X')[_0xa2f9('0x25')](_0xa2f9('0x26')));}function getServerInfo(_0x2d6637){return request({'form':{'method':_0xa2f9('0x27'),'input_type':'JSON','response_type':_0xa2f9('0x1f'),'rest_data':JSON['stringify']({'session':_0x2d6637['id']})}});}function getUser(_0x26eeeb,_0x5b2e4c,_0x3083c6){logger[_0xa2f9('0xb')](_0xa2f9('0x28'),_0x5b2e4c);return request({'form':{'method':'get_entry_list','input_type':'JSON','response_type':_0xa2f9('0x1f'),'rest_data':JSON['stringify']({'session':_0x3083c6['id'],'module_name':_0xa2f9('0x29'),'query':util[_0xa2f9('0x22')]('INSTR\x20(\x20users.user_name,\x20\x22%s\x22)\x20>\x200',_0x5b2e4c),'order_by':'','offset':'0','select_fields':['id',_0xa2f9('0xd'),_0xa2f9('0x2a')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})['then'](function(_0x45f7cd){if(_0x45f7cd[_0xa2f9('0x2b')][_0xa2f9('0x19')]){var _0x359093=_[_0xa2f9('0x2c')](_0x45f7cd['entry_list'],function(_0x4fa7d0){return _0x4fa7d0['name_value_list']['user_name'][_0xa2f9('0x2d')]===_0x5b2e4c;});if(_0x359093){logger[_0xa2f9('0xb')](_0xa2f9('0x2e'));return BPromise[_0xa2f9('0x2f')]({'id':_0x359093['name_value_list']['id']['value'],'name':_0x359093[_0xa2f9('0x30')][_0xa2f9('0xd')][_0xa2f9('0x2d')]});}}else{logger[_0xa2f9('0xb')](_0xa2f9('0x31'));return BPromise[_0xa2f9('0x2f')]({'id':_0x3083c6[_0xa2f9('0x30')]['user_id']['id'],'name':_0x3083c6[_0xa2f9('0x30')][_0xa2f9('0x2a')]['id']});}});}function getEndUser(_0x321fcb,_0x50af5b,_0x46105e,_0x284c30){logger[_0xa2f9('0xb')](_0xa2f9('0x32'),_0x46105e);return request({'form':{'method':_0xa2f9('0x33'),'input_type':_0xa2f9('0x1f'),'response_type':_0xa2f9('0x1f'),'rest_data':JSON[_0xa2f9('0x20')]({'session':_0x284c30['id'],'module_name':'Contacts','query':util['format'](_0xa2f9('0x34'),_0x46105e),'order_by':'','offset':'0','select_fields':['id',_0xa2f9('0xd'),_0xa2f9('0x35')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})[_0xa2f9('0x36')](function(_0x379096){if(_0x379096['entry_list'][_0xa2f9('0x19')]){var _0x2d6d95=_[_0xa2f9('0x2c')](_0x379096['entry_list'],function(_0x24db06){return _0x24db06[_0xa2f9('0x30')]['phone_home'][_0xa2f9('0x2d')]===_0x46105e;});if(_0x2d6d95){logger['info'](_0xa2f9('0x37'));return BPromise[_0xa2f9('0x2f')]({'id':_0x2d6d95[_0xa2f9('0x30')]['id'][_0xa2f9('0x2d')],'name':_0x2d6d95[_0xa2f9('0x30')][_0xa2f9('0xd')]['value'],'phone':_0x2d6d95[_0xa2f9('0x30')][_0xa2f9('0x35')][_0xa2f9('0x2d')]});}}else{logger['info'](_0xa2f9('0x38'));return request({'form':{'method':_0xa2f9('0x1e'),'input_type':_0xa2f9('0x1f'),'response_type':'JSON','rest_data':JSON[_0xa2f9('0x20')]({'session':_0x284c30['id'],'module_name':_0xa2f9('0x17'),'name_value_list':[{'name':_0xa2f9('0x39'),'value':_0x50af5b!==_0xa2f9('0x3a')?_0x50af5b:util[_0xa2f9('0x22')](_0xa2f9('0x3b'),_0x46105e)},{'name':_0xa2f9('0x35'),'value':_0x46105e}]})}})[_0xa2f9('0x36')](function(_0x490c81){logger[_0xa2f9('0xb')](_0xa2f9('0x3c'));return BPromise[_0xa2f9('0x2f')]({'id':_0x490c81['id'],'name':_0x490c81['entry_list']['first_name'][_0xa2f9('0x2d')],'phone':_0x490c81[_0xa2f9('0x2b')][_0xa2f9('0x35')][_0xa2f9('0x2d')]});});}});}function request(_0xda4f7f){logger[_0xa2f9('0x3d')]('[HTTP]',JSON['stringify'](_0xda4f7f));return rp(_[_0xa2f9('0x3e')](def,_0xda4f7f));}function getTags(_0x37a139,_0x40c2a2){var _0x39c935=[];if(_0x37a139&&_0x37a139['length']>0x0){_0x39c935=_[_0xa2f9('0x3f')](_0x37a139,_0x40c2a2);}return _0x39c935;}function getCustomFields(_0x221d01,_0xf24c49){var _0x229240=[];var _0x4840c4={'custom_fields':[]};if(_0x221d01[_0xa2f9('0x19')]>0x0){_[_0xa2f9('0x1a')](_0x221d01,function(_0xd6db66){if(_0xd6db66['type']===_0xa2f9('0x40')&&_0xd6db66[_0xa2f9('0x41')]&&!_0xd6db66[_0xa2f9('0x42')]){_0x4840c4[_0xd6db66[_0xa2f9('0x41')]['toLowerCase']()]=_0xd6db66[_0xa2f9('0x43')][_0xa2f9('0x25')]();}else if(_0xd6db66[_0xa2f9('0x44')]===_0xa2f9('0x40')&&_0xd6db66[_0xa2f9('0x1d')]&&_0xd6db66[_0xa2f9('0x42')]){_0x4840c4[_0xa2f9('0x45')][_0xa2f9('0x1c')]({'id':_0xd6db66[_0xa2f9('0x1d')],'value':_0xd6db66[_0xa2f9('0x43')][_0xa2f9('0x25')]()});}else if(_0xd6db66[_0xa2f9('0x44')]==='variable'&&_0xd6db66[_0xa2f9('0x1b')]&&_0xd6db66[_0xa2f9('0x1d')]&&_0xd6db66[_0xa2f9('0x42')]){_0xf24c49[_0xd6db66[_0xa2f9('0x1b')]]&&_0x4840c4[_0xa2f9('0x45')][_0xa2f9('0x1c')]({'id':_0xd6db66[_0xa2f9('0x1d')],'value':_0xf24c49[_0xd6db66[_0xa2f9('0x1b')]]['toString']()});}else if(_0xd6db66[_0xa2f9('0x44')]===_0xa2f9('0x46')&&_0xd6db66[_0xa2f9('0x47')]&&_0xd6db66[_0xa2f9('0x47')][_0xa2f9('0xd')]&&_0xd6db66[_0xa2f9('0x1d')]&&_0xd6db66[_0xa2f9('0x42')]){_0xf24c49[_0xd6db66[_0xa2f9('0x47')][_0xa2f9('0xd')][_0xa2f9('0x48')]()]&&_0x4840c4['custom_fields'][_0xa2f9('0x1c')]({'id':_0xd6db66[_0xa2f9('0x1d')],'value':_0xf24c49[_0xd6db66['Variable'][_0xa2f9('0xd')][_0xa2f9('0x48')]()][_0xa2f9('0x25')]()});}});}return _0x4840c4;}function getConnection(_0x3b0efe){return request({'method':_0xa2f9('0x9'),'form':{'method':'login','input_type':_0xa2f9('0x1f'),'response_type':_0xa2f9('0x1f'),'rest_data':JSON['stringify']({'user_auth':{'user_name':_0x3b0efe[_0xa2f9('0x49')],'password':_0x3b0efe['password'],'encryption':_0xa2f9('0x4a')},'application':'xCALLY\x20Motion\x20integration'})}})['then'](function(_0x4592dc){var _0x18f6c9=_0x4592dc;if(_0x18f6c9['id']){def[_0xa2f9('0x4b')]=_0x18f6c9['id'];return BPromise[_0xa2f9('0x2f')](_0x18f6c9);}else{throw new Error(util[_0xa2f9('0x22')](_0xa2f9('0x4c'),_0x3b0efe['id']));}});}function setRelationship(_0xee9f63,_0x268c17,_0x736330,_0x5734c7){return request({'form':{'method':_0xa2f9('0x4d'),'input_type':'JSON','response_type':_0xa2f9('0x1f'),'rest_data':JSON[_0xa2f9('0x20')]({'session':_0xee9f63['id'],'module_name':'Calls','module_id':_0x736330['id'],'link_field_name':_0x5734c7,'related_ids':[_0x268c17['id']]})}});}exports[_0xa2f9('0x4e')]=function(_0x52072e,_0x57753d,_0x8107e2,_0x2815c1,_0x9affd9,_0x344e21){var _0x57c7aa,_0x84061,_0x43e3b8,_0x5344eb;_0x344e21[_0xa2f9('0x4f')]=intUtil[_0xa2f9('0x50')](_0x344e21[_0xa2f9('0x4f')]);_0x344e21[_0xa2f9('0x51')]=intUtil[_0xa2f9('0x50')](_0x344e21['serverUrl']);def[_0xa2f9('0x52')]=util['format'](_0xa2f9('0x53'),_0x344e21[_0xa2f9('0x4f')]);if(_0x9affd9&&_0x9affd9[_0xa2f9('0x54')]){logger[_0xa2f9('0xb')]('[QUEUE]',_0xa2f9('0x55'));_0x57753d[_0xa2f9('0x56')]=util[_0xa2f9('0x22')](_0xa2f9('0x57'),_0x344e21[_0xa2f9('0x51')],_0x57753d[_0xa2f9('0x58')],md5(_0x57753d[_0xa2f9('0x58')]));}else{_0x57753d[_0xa2f9('0x56')]='';}return getConnection(_0x344e21)[_0xa2f9('0x36')](function(_0x3a2673){_0x5344eb=_0x3a2673;return getUser(_0x344e21,_0x2815c1['name'],_0x5344eb);})[_0xa2f9('0x36')](function(_0x2e4e90){_0x57c7aa=_0x2e4e90;logger['info'](_0xa2f9('0x59'),_0x57c7aa['id']);return getEndUser(_0x344e21,_0x57753d['calleridname'],_0x57753d['calleridnum'],_0x5344eb);})[_0xa2f9('0x36')](function(_0x278d77){_0x84061=_0x278d77;logger[_0xa2f9('0xb')](_0xa2f9('0x5a'),_0x84061['id']);return getTicket(_0x344e21,_0x57c7aa,_0x84061,_0x8107e2,_0x57753d,_0x8107e2[_0xa2f9('0x5b')],_0x5344eb);})[_0xa2f9('0x36')](function(_0x4333a5){_0x43e3b8=_0x4333a5;logger[_0xa2f9('0xb')](_0xa2f9('0x5c'));logger[_0xa2f9('0xb')](_0xa2f9('0x5d'),_0x43e3b8['id']);return setRelationship(_0x5344eb,_0x57c7aa,_0x43e3b8,_0xa2f9('0x5e'));})[_0xa2f9('0x36')](function(){return setRelationship(_0x5344eb,_0x84061,_0x43e3b8,_0xa2f9('0x5f'));})['then'](function(){return getServerInfo(_0x5344eb);})[_0xa2f9('0x36')](function(_0x31cf2d){var _0x392e0b=parseInt(_0x31cf2d[_0xa2f9('0x60')]['charAt'](0x0));var _0x2d1d37=util[_0xa2f9('0x22')](_0xa2f9('0x61'),_0x344e21[_0xa2f9('0x4f')],_0x43e3b8['id']);if(_0x392e0b>0x6){_0x2d1d37=util[_0xa2f9('0x22')]('%s/#bwc/index.php?module=Calls&action=EditView&record=%s',_0x344e21[_0xa2f9('0x4f')],_0x43e3b8['id']);}logger['info'](_0xa2f9('0x62'),_0xa2f9('0x63'));emit(util['format'](_0xa2f9('0x64'),_0x2815c1[_0xa2f9('0xd')]),'trigger:browser:url',{'uri':_0x2d1d37});})[_0xa2f9('0x65')](function(_0x451da3){logger[_0xa2f9('0x66')]('[QUEUE]',JSON[_0xa2f9('0x20')](_0x451da3));});};exports[_0xa2f9('0x67')]=function(_0x55ac5a,_0xe774eb,_0x354075,_0x215716,_0x5d4986,_0x83abfa,_0x30fb88){var _0x1ff308,_0x5e5911,_0x1a0ae2,_0x26f54e;_0x83abfa[_0xa2f9('0x4f')]=intUtil[_0xa2f9('0x50')](_0x83abfa[_0xa2f9('0x4f')]);_0x83abfa['serverUrl']=intUtil[_0xa2f9('0x50')](_0x83abfa[_0xa2f9('0x51')]);def['uri']=util[_0xa2f9('0x22')](_0xa2f9('0x53'),_0x83abfa[_0xa2f9('0x4f')]);if(_0x30fb88&&_0x30fb88[_0xa2f9('0x68')]&&_0x30fb88[_0xa2f9('0x68')]!==_0xa2f9('0x69')){logger[_0xa2f9('0xb')]('[OUTBOUND]',_0xa2f9('0x55'));_0xe774eb[_0xa2f9('0x56')]=util[_0xa2f9('0x22')](_0xa2f9('0x57'),_0x83abfa['serverUrl'],_0xe774eb[_0xa2f9('0x58')],md5(_0xe774eb['uniqueid']));}return getConnection(_0x83abfa)[_0xa2f9('0x36')](function(_0x1120ea){_0x26f54e=_0x1120ea;return getUser(_0x83abfa,_0x215716['name'],_0x26f54e);})[_0xa2f9('0x36')](function(_0x1b6a26){_0x1ff308=_0x1b6a26;logger[_0xa2f9('0xb')](_0xa2f9('0x59'),_0x1ff308['id']);return getEndUser(_0x83abfa,_0xe774eb['destcalleridname'],_0xe774eb[_0xa2f9('0x6a')],_0x26f54e);})[_0xa2f9('0x36')](function(_0x2b2cc3){_0x5e5911=_0x2b2cc3;logger[_0xa2f9('0xb')](_0xa2f9('0x5a'),_0x5e5911['id']);return getTicket(_0x83abfa,_0x1ff308,_0x5e5911,_0x354075,_0xe774eb,_0x354075['Fields'],_0x26f54e);})[_0xa2f9('0x36')](function(_0xfc7e3b){_0x1a0ae2=_0xfc7e3b;logger[_0xa2f9('0xb')](_0xa2f9('0x5c'));logger[_0xa2f9('0xb')](_0xa2f9('0x5d'),_0x1a0ae2['id']);return setRelationship(_0x26f54e,_0x1ff308,_0x1a0ae2,_0xa2f9('0x5e'));})['then'](function(){return setRelationship(_0x26f54e,_0x5e5911,_0x1a0ae2,_0xa2f9('0x5f'));})[_0xa2f9('0x36')](function(){return getServerInfo(_0x26f54e);})['then'](function(_0x201bb8){var _0x423455=parseInt(_0x201bb8[_0xa2f9('0x60')]['charAt'](0x0));var _0x48131b=util[_0xa2f9('0x22')](_0xa2f9('0x61'),_0x83abfa[_0xa2f9('0x4f')],_0x1a0ae2['id']);if(_0x423455>0x6){_0x48131b=util[_0xa2f9('0x22')](_0xa2f9('0x6b'),_0x83abfa[_0xa2f9('0x4f')],_0x1a0ae2['id']);}logger[_0xa2f9('0xb')](_0xa2f9('0x6c'),_0xa2f9('0x63'));emit(util[_0xa2f9('0x22')](_0xa2f9('0x64'),_0x215716['name']),_0xa2f9('0x6d'),{'uri':_0x48131b});})[_0xa2f9('0x65')](function(_0x3ae93b){logger['error'](_0xa2f9('0x6c'),JSON[_0xa2f9('0x20')](_0x3ae93b));});};exports[_0xa2f9('0x6e')]=function(_0x5bd535,_0x58eb4b,_0x20a21a,_0x4aa70,_0x38d8f4,_0x4036c9){var _0x3ddb05,_0x14a16f,_0x298c6b,_0x2de277;_0x4036c9['remoteUri']=intUtil['stripTrailingSlash'](_0x4036c9[_0xa2f9('0x4f')]);_0x4036c9[_0xa2f9('0x51')]=intUtil[_0xa2f9('0x50')](_0x4036c9[_0xa2f9('0x51')]);def[_0xa2f9('0x52')]=util[_0xa2f9('0x22')]('%s/service/v4_1/rest.php',_0x4036c9[_0xa2f9('0x4f')]);if(_0x38d8f4&&_0x38d8f4[_0xa2f9('0x54')]){logger[_0xa2f9('0xb')](_0xa2f9('0x6f'),'Recording\x20is\x20enabled!');_0x58eb4b[_0xa2f9('0x56')]=util['format'](_0xa2f9('0x57'),_0x4036c9['serverUrl'],_0x58eb4b[_0xa2f9('0x58')],md5(_0x58eb4b[_0xa2f9('0x58')]));}else{_0x58eb4b['recordingURL']='';}return getConnection(_0x4036c9)[_0xa2f9('0x36')](function(_0x54a011){_0x2de277=_0x54a011;return getUser(_0x4036c9,_0x4aa70[_0xa2f9('0xd')],_0x2de277);})['then'](function(_0x3aca76){_0x3ddb05=_0x3aca76;logger['info'](_0xa2f9('0x59'),_0x3ddb05['id']);return getEndUser(_0x4036c9,_0x58eb4b[_0xa2f9('0x70')],_0x58eb4b[_0xa2f9('0x71')],_0x2de277);})['then'](function(_0x3db331){_0x14a16f=_0x3db331;logger[_0xa2f9('0xb')](_0xa2f9('0x5a'),_0x14a16f['id']);return getTicket(_0x4036c9,_0x3ddb05,_0x14a16f,_0x20a21a,_0x58eb4b,_0x20a21a['Fields'],_0x2de277);})[_0xa2f9('0x36')](function(_0x48e83b){_0x298c6b=_0x48e83b;logger['info'](_0xa2f9('0x5c'));logger[_0xa2f9('0xb')](_0xa2f9('0x5d'),_0x298c6b['id']);return setRelationship(_0x2de277,_0x3ddb05,_0x298c6b,_0xa2f9('0x5e'));})[_0xa2f9('0x36')](function(){return setRelationship(_0x2de277,_0x14a16f,_0x298c6b,_0xa2f9('0x5f'));})[_0xa2f9('0x36')](function(){return getServerInfo(_0x2de277);})[_0xa2f9('0x65')](function(_0x319f6c){logger[_0xa2f9('0x66')]('[ABANDONED]',JSON[_0xa2f9('0x20')](_0x319f6c));});};
\ No newline at end of file
index 34d96b6..a0c5f35 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2a12=['Variable','name','toLowerCase','keyType','push','format','%s:\x20%s','keyContent','key','join','stripTrailingSlash','substr','lodash','getString','length','sortBy','type','content','variable','variableName','toString','customVariable'];(function(_0x104f08,_0x4e9737){var _0x2bb004=function(_0x38b5ad){while(--_0x38b5ad){_0x104f08['push'](_0x104f08['shift']());}};_0x2bb004(++_0x4e9737);}(_0x2a12,0xd2));var _0x22a1=function(_0x59b0a3,_0x2780a4){_0x59b0a3=_0x59b0a3-0x0;var _0x4b7e2b=_0x2a12[_0x59b0a3];return _0x4b7e2b;};'use strict';var _=require(_0x22a1('0x0'));var util=require('util');exports[_0x22a1('0x1')]=function(_0x5061ba,_0x119680,_0x9c1d2f){var _0x7fdf7f=[];if(_0x5061ba[_0x22a1('0x2')]>0x0){var _0x36a2ee=_[_0x22a1('0x3')](_0x5061ba,['id']);for(var _0x495fc2=0x0;_0x495fc2<_0x36a2ee[_0x22a1('0x2')];_0x495fc2++){var _0x145a0d=_0x36a2ee[_0x495fc2];if(_0x145a0d[_0x22a1('0x4')]==='string'){_0x7fdf7f['push'](_0x145a0d[_0x22a1('0x5')]);}else if(_0x145a0d[_0x22a1('0x4')]===_0x22a1('0x6')&&_0x145a0d['variableName']){_0x119680[_0x145a0d[_0x22a1('0x7')]]&&_0x7fdf7f['push'](_0x119680[_0x145a0d[_0x22a1('0x7')]][_0x22a1('0x8')]());}else if(_0x145a0d['type']===_0x22a1('0x9')&&_0x145a0d[_0x22a1('0xa')]&&_0x145a0d[_0x22a1('0xa')][_0x22a1('0xb')]){_0x119680[_0x145a0d['Variable'][_0x22a1('0xb')][_0x22a1('0xc')]()]&&_0x7fdf7f['push'](_0x119680[_0x145a0d['Variable'][_0x22a1('0xb')][_0x22a1('0xc')]()][_0x22a1('0x8')]());}else if(_0x145a0d[_0x22a1('0x4')]==='keyValue'){if(_0x145a0d[_0x22a1('0xd')]==='string'&&_0x145a0d['key']){_0x7fdf7f[_0x22a1('0xe')](util[_0x22a1('0xf')](_0x22a1('0x10'),_0x145a0d['key'],_0x145a0d[_0x22a1('0x11')]));}else if(_0x145a0d[_0x22a1('0xd')]===_0x22a1('0x6')&&_0x145a0d[_0x22a1('0x7')]&&_0x145a0d['key']){_0x119680[_0x145a0d[_0x22a1('0x7')]]&&_0x7fdf7f[_0x22a1('0xe')](util[_0x22a1('0xf')]('%s:\x20%s',_0x145a0d[_0x22a1('0x12')],_0x119680[_0x145a0d[_0x22a1('0x7')]]));}else if(_0x145a0d[_0x22a1('0xd')]===_0x22a1('0x9')&&_0x145a0d['Variable']&&_0x145a0d[_0x22a1('0xa')]['name']&&_0x145a0d[_0x22a1('0x12')]){_0x119680[_0x145a0d[_0x22a1('0xa')][_0x22a1('0xb')]['toLowerCase']()]&&_0x7fdf7f[_0x22a1('0xe')](util['format'](_0x22a1('0x10'),_0x145a0d[_0x22a1('0x12')],_0x119680[_0x145a0d[_0x22a1('0xa')][_0x22a1('0xb')][_0x22a1('0xc')]()]));}}}}return _0x7fdf7f[_0x22a1('0x13')](_0x9c1d2f);};exports[_0x22a1('0x14')]=function(_0x4feae7){if(_0x4feae7&&_0x4feae7[_0x22a1('0x15')](-0x1)==='/'){return _0x4feae7[_0x22a1('0x15')](0x0,_0x4feae7[_0x22a1('0x2')]-0x1);}return _0x4feae7;};
\ No newline at end of file
+var _0xbabf=['customVariable','Variable','name','toLowerCase','toString','keyValue','keyType','key','format','%s:\x20%s','keyContent','join','stripTrailingSlash','substr','lodash','util','getString','length','sortBy','type','string','content','variable','variableName','push'];(function(_0x4f0b76,_0x200411){var _0x4f8016=function(_0x2691fb){while(--_0x2691fb){_0x4f0b76['push'](_0x4f0b76['shift']());}};_0x4f8016(++_0x200411);}(_0xbabf,0xbd));var _0xfbab=function(_0x342700,_0x569f75){_0x342700=_0x342700-0x0;var _0x53406f=_0xbabf[_0x342700];return _0x53406f;};'use strict';var _=require(_0xfbab('0x0'));var util=require(_0xfbab('0x1'));exports[_0xfbab('0x2')]=function(_0x4fa1ee,_0x585524,_0x40bc01){var _0x42a90b=[];if(_0x4fa1ee[_0xfbab('0x3')]>0x0){var _0x15d2a9=_[_0xfbab('0x4')](_0x4fa1ee,['id']);for(var _0x5b55ae=0x0;_0x5b55ae<_0x15d2a9[_0xfbab('0x3')];_0x5b55ae++){var _0x4dbdef=_0x15d2a9[_0x5b55ae];if(_0x4dbdef[_0xfbab('0x5')]===_0xfbab('0x6')){_0x42a90b['push'](_0x4dbdef[_0xfbab('0x7')]);}else if(_0x4dbdef['type']===_0xfbab('0x8')&&_0x4dbdef[_0xfbab('0x9')]){_0x585524[_0x4dbdef['variableName']]&&_0x42a90b[_0xfbab('0xa')](_0x585524[_0x4dbdef[_0xfbab('0x9')]]['toString']());}else if(_0x4dbdef[_0xfbab('0x5')]===_0xfbab('0xb')&&_0x4dbdef[_0xfbab('0xc')]&&_0x4dbdef[_0xfbab('0xc')][_0xfbab('0xd')]){_0x585524[_0x4dbdef[_0xfbab('0xc')][_0xfbab('0xd')]['toLowerCase']()]&&_0x42a90b['push'](_0x585524[_0x4dbdef[_0xfbab('0xc')][_0xfbab('0xd')][_0xfbab('0xe')]()][_0xfbab('0xf')]());}else if(_0x4dbdef[_0xfbab('0x5')]===_0xfbab('0x10')){if(_0x4dbdef[_0xfbab('0x11')]===_0xfbab('0x6')&&_0x4dbdef[_0xfbab('0x12')]){_0x42a90b['push'](util[_0xfbab('0x13')](_0xfbab('0x14'),_0x4dbdef[_0xfbab('0x12')],_0x4dbdef[_0xfbab('0x15')]));}else if(_0x4dbdef[_0xfbab('0x11')]===_0xfbab('0x8')&&_0x4dbdef[_0xfbab('0x9')]&&_0x4dbdef[_0xfbab('0x12')]){_0x585524[_0x4dbdef[_0xfbab('0x9')]]&&_0x42a90b[_0xfbab('0xa')](util[_0xfbab('0x13')](_0xfbab('0x14'),_0x4dbdef['key'],_0x585524[_0x4dbdef[_0xfbab('0x9')]]));}else if(_0x4dbdef[_0xfbab('0x11')]===_0xfbab('0xb')&&_0x4dbdef[_0xfbab('0xc')]&&_0x4dbdef['Variable'][_0xfbab('0xd')]&&_0x4dbdef[_0xfbab('0x12')]){_0x585524[_0x4dbdef[_0xfbab('0xc')][_0xfbab('0xd')][_0xfbab('0xe')]()]&&_0x42a90b[_0xfbab('0xa')](util[_0xfbab('0x13')]('%s:\x20%s',_0x4dbdef['key'],_0x585524[_0x4dbdef[_0xfbab('0xc')][_0xfbab('0xd')]['toLowerCase']()]));}}}}return _0x42a90b[_0xfbab('0x16')](_0x40bc01);};exports[_0xfbab('0x17')]=function(_0x1d8270){if(_0x1d8270&&_0x1d8270[_0xfbab('0x18')](-0x1)==='/'){return _0x1d8270['substr'](0x0,_0x1d8270[_0xfbab('0x3')]-0x1);}return _0x1d8270;};
\ No newline at end of file
index f7fb34f..90c0d02 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa7d5=['util','./util','vTiger','socket.io-emitter','localhost','emit','length','string','idField','toString','type','variable','variableName','customVariable','Variable','name','toLowerCase','merge','Normal','Open','getString','Subjects','Descriptions','POST','format','%s/webservice.php','remoteUri','HelpDesk','then','success','resolve','result','Ticket\x20could\x20not\x20be\x20created\x20due\x20to:\x20%s','error','catch','query','statusCode','[vTiger],\x20%s,\x20%s,\x20%s','createTicket','stringify','info','GET','admin','sessionName','Agent\x20found!','email1','first_name','userId','test','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','create','Contacts','Enduser\x20created.','lastname','getEndUser','username','accessKey','getchallenge','login','token','getConnection','[HTTP]','stripTrailingSlash','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','serverUrl','uniqueid','recordingURL','The\x20User\x20ID\x20is:','The\x20Enduser\x20ID\x20is:','Fields','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','%s/index.php?module=HelpDesk&view=Detail&record=%s&app=SUPPORT','split','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','recordingFormat','none','[OUTBOUND]','email','destcalleridname','destcalleridnum','trigger:browser:url','abandoned','[ABANDONED]','calleridnum','lodash','request-promise','bluebird','md5'];(function(_0x968259,_0x454b97){var _0x4ab85b=function(_0x537776){while(--_0x537776){_0x968259['push'](_0x968259['shift']());}};_0x4ab85b(++_0x454b97);}(_0xa7d5,0xba));var _0x5a7d=function(_0x28a32e,_0x47cafb){_0x28a32e=_0x28a32e-0x0;var _0x2665e2=_0xa7d5[_0x28a32e];return _0x2665e2;};'use strict';var _=require(_0x5a7d('0x0'));var rp=require(_0x5a7d('0x1'));var BPromise=require(_0x5a7d('0x2'));var md5=require(_0x5a7d('0x3'));var util=require(_0x5a7d('0x4'));var intUtil=require(_0x5a7d('0x5'));var logger=require('../../../../config/logger')(_0x5a7d('0x6'));var io=require(_0x5a7d('0x7'))({'host':_0x5a7d('0x8'),'port':0x18eb});function emit(_0x1b74eb,_0x47ebbe,_0x44468d){io['to'](_0x1b74eb)[_0x5a7d('0x9')](_0x47ebbe,_0x44468d);}function getCustomFields(_0x221f85,_0x3f956d){var _0x4ea152={};if(_0x221f85[_0x5a7d('0xa')]>0x0){_['forEach'](_0x221f85,function(_0x40ce62){if(_0x40ce62['type']===_0x5a7d('0xb')&&_0x40ce62[_0x5a7d('0xc')]){_0x4ea152[_0x40ce62[_0x5a7d('0xc')]]=_0x40ce62['content'][_0x5a7d('0xd')]();}else if(_0x40ce62[_0x5a7d('0xe')]===_0x5a7d('0xf')&&_0x40ce62[_0x5a7d('0x10')]&&_0x40ce62['idField']&&_0x3f956d[_0x40ce62['variableName']]){_0x4ea152[_0x40ce62[_0x5a7d('0xc')]]=_0x3f956d[_0x40ce62['variableName']][_0x5a7d('0xd')]();}else if(_0x40ce62[_0x5a7d('0xe')]===_0x5a7d('0x11')&&_0x40ce62[_0x5a7d('0x12')]&&_0x40ce62[_0x5a7d('0x12')][_0x5a7d('0x13')]&&_0x40ce62[_0x5a7d('0xc')]&&_0x3f956d[_0x40ce62[_0x5a7d('0x12')][_0x5a7d('0x13')]['toLowerCase']()]){_0x4ea152[_0x40ce62[_0x5a7d('0xc')]]=_0x3f956d[_0x40ce62['Variable'][_0x5a7d('0x13')][_0x5a7d('0x14')]()][_0x5a7d('0xd')]();}});}return _0x4ea152;}function createTicket(_0xef56a2,_0x5e5633,_0x1acba2,_0x2003d1,_0x54eb14,_0x532d4f,_0x2cb98c){logger['info']('Creating\x20new\x20ticket...');var _0x3eb671=_[_0x5a7d('0x15')]({'parent_id':'','assigned_user_id':_0x5e5633['id'],'ticketpriorities':_0x5a7d('0x16'),'ticketstatus':_0x5a7d('0x17'),'ticket_title':intUtil[_0x5a7d('0x18')](_0x2003d1[_0x5a7d('0x19')],_0x54eb14,'\x20'),'description':intUtil[_0x5a7d('0x18')](_0x2003d1[_0x5a7d('0x1a')],_0x54eb14,'\x0a'),'contact_id':_0x1acba2['id']},getCustomFields(_0x532d4f,_0x54eb14));var _0x36adec={'method':_0x5a7d('0x1b'),'uri':util[_0x5a7d('0x1c')](_0x5a7d('0x1d'),_0xef56a2[_0x5a7d('0x1e')]),'form':{'operation':'create','username':'admin','sessionName':_0x2cb98c['sessionName'],'elementType':_0x5a7d('0x1f'),'element':JSON['stringify'](_0x3eb671)},'json':!![]};return request(_0x36adec)[_0x5a7d('0x20')](function(_0x54bb1e){if(_0x54bb1e[_0x5a7d('0x21')]){return BPromise[_0x5a7d('0x22')]({'id':_0x54bb1e[_0x5a7d('0x23')]['id']});}else{throw new Error(util['format'](_0x5a7d('0x24'),JSON['stringify'](_0x54bb1e[_0x5a7d('0x25')])));}})[_0x5a7d('0x26')](function(_0x47b25c){var _0x1714eb=req[_0x5a7d('0x27')]['test']?0x1f4:_0x47b25c[_0x5a7d('0x28')]||0x1f4;logger['error'](_0x5a7d('0x29'),_0x5a7d('0x2a'),_0x1714eb,JSON[_0x5a7d('0x2b')](_0x47b25c));});}function getUser(_0xc9c617,_0xb4a13a,_0x2186ec){logger[_0x5a7d('0x2c')]('Getting\x20agent\x20with\x20email',_0xb4a13a);return request({'method':_0x5a7d('0x2d'),'uri':util[_0x5a7d('0x1c')]('%s/webservice.php',_0xc9c617[_0x5a7d('0x1e')]),'qs':{'operation':_0x5a7d('0x27'),'username':_0x5a7d('0x2e'),'sessionName':_0x2186ec[_0x5a7d('0x2f')],'query':util[_0x5a7d('0x1c')]('SELECT\x20first_name,\x20last_name,\x20email1\x20FROM\x20Users\x20WHERE\x20email1=\x27%s\x27;',_0xb4a13a)},'json':!![]})[_0x5a7d('0x20')](function(_0x4d0f28){if(_0x4d0f28['success']&&_0x4d0f28[_0x5a7d('0x23')][_0x5a7d('0xa')]){logger[_0x5a7d('0x2c')](_0x5a7d('0x30'));return BPromise[_0x5a7d('0x22')]({'id':_0x4d0f28[_0x5a7d('0x23')][0x0]['id'],'email':_0x4d0f28[_0x5a7d('0x23')][0x0][_0x5a7d('0x31')],'name':_0x4d0f28[_0x5a7d('0x23')][0x0][_0x5a7d('0x32')]+'\x20'+_0x4d0f28[_0x5a7d('0x23')]['last_name']});}else{logger[_0x5a7d('0x2c')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return BPromise[_0x5a7d('0x22')]({'id':_0x2186ec[_0x5a7d('0x33')],'email':_0xc9c617['username'],'name':_0x5a7d('0x2e')});}})[_0x5a7d('0x26')](function(_0x53356e){var _0x19bbc6=req['query'][_0x5a7d('0x34')]?0x1f4:_0x53356e[_0x5a7d('0x28')]||0x1f4;logger[_0x5a7d('0x25')](_0x5a7d('0x29'),'getUser',_0x19bbc6,JSON[_0x5a7d('0x2b')](_0x53356e));});}function getEndUser(_0x10e481,_0x11bca4,_0x5608e5,_0x4bf2e2){logger['info'](_0x5a7d('0x35'),_0x5608e5);return request({'method':'GET','uri':util[_0x5a7d('0x1c')](_0x5a7d('0x1d'),_0x10e481[_0x5a7d('0x1e')]),'qs':{'operation':_0x5a7d('0x27'),'username':_0x5a7d('0x2e'),'sessionName':_0x4bf2e2['sessionName'],'query':util[_0x5a7d('0x1c')](_0x5a7d('0x36'),_0x5608e5,_0x5608e5,_0x5608e5,_0x5608e5,_0x5608e5)},'json':!![]})[_0x5a7d('0x20')](function(_0x6fa7f5){if(_0x6fa7f5[_0x5a7d('0x21')]&&_0x6fa7f5[_0x5a7d('0x23')][_0x5a7d('0xa')]){logger[_0x5a7d('0x2c')](_0x5a7d('0x37'));return BPromise['resolve']({'id':_0x6fa7f5[_0x5a7d('0x23')][0x0]['id'],'name':_0x6fa7f5[_0x5a7d('0x23')][0x0][_0x5a7d('0x38')]+'\x20'+_0x6fa7f5[_0x5a7d('0x23')][0x0]['lastname'],'phone':_0x5608e5});}else{logger[_0x5a7d('0x2c')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'method':'POST','uri':util['format']('%s/webservice.php',_0x10e481[_0x5a7d('0x1e')]),'form':{'operation':_0x5a7d('0x39'),'sessionName':_0x4bf2e2[_0x5a7d('0x2f')],'elementType':_0x5a7d('0x3a'),'element':JSON[_0x5a7d('0x2b')]({'lastname':_0x11bca4,'phone':_0x5608e5,'assigned_user_id':'\x20'})},'json':!![]})['then'](function(_0x232e06){logger[_0x5a7d('0x2c')](_0x5a7d('0x3b'));return BPromise[_0x5a7d('0x22')]({'id':_0x232e06[_0x5a7d('0x23')]['id'],'name':_0x232e06[_0x5a7d('0x23')][_0x5a7d('0x3c')],'phone':_0x232e06[_0x5a7d('0x23')]['phone']});})[_0x5a7d('0x26')](function(_0x5a73e3){var _0x113e6c=req['query'][_0x5a7d('0x34')]?0x1f4:_0x5a73e3[_0x5a7d('0x28')]||0x1f4;logger[_0x5a7d('0x25')]('[vTiger],\x20%s,\x20%s,\x20%s',_0x5a7d('0x3d'),_0x113e6c,JSON['stringify'](_0x5a73e3));});}});}function getConnection(_0x22ac65){var _0x8def32=_0x22ac65[_0x5a7d('0x3e')];var _0x4f843b=_0x22ac65[_0x5a7d('0x3f')];return request({'method':_0x5a7d('0x2d'),'uri':util[_0x5a7d('0x1c')](_0x5a7d('0x1d'),_0x22ac65[_0x5a7d('0x1e')]),'qs':{'operation':_0x5a7d('0x40'),'username':_0x8def32},'json':!![]})[_0x5a7d('0x20')](function(_0x14314b){if(_0x14314b[_0x5a7d('0x21')]){return request({'method':_0x5a7d('0x1b'),'uri':util[_0x5a7d('0x1c')]('%s/webservice.php',_0x22ac65[_0x5a7d('0x1e')]),'form':{'operation':_0x5a7d('0x41'),'username':_0x5a7d('0x2e'),'accessKey':md5(_0x14314b[_0x5a7d('0x23')][_0x5a7d('0x42')]+_0x4f843b)},'json':!![]});}})[_0x5a7d('0x20')](function(_0x3ab836){if(_0x3ab836[_0x5a7d('0x21')]){return BPromise[_0x5a7d('0x22')](_0x3ab836['result']);}else{throw new Error(util[_0x5a7d('0x1c')]('Account\x20%d\x20is\x20not\x20valid',_0x22ac65['id']));}})[_0x5a7d('0x26')](function(_0x3d62ef){var _0x1b0955=req['query'][_0x5a7d('0x34')]?0x1f4:_0x3d62ef[_0x5a7d('0x28')]||0x1f4;logger['error']('[vTiger],\x20%s,\x20%s,\x20%s',_0x5a7d('0x43'),_0x1b0955,JSON[_0x5a7d('0x2b')](_0x3d62ef));});}function request(_0x16bcbb){logger['info'](_0x5a7d('0x44'),JSON[_0x5a7d('0x2b')](_0x16bcbb));return rp(_0x16bcbb);}exports['queue']=function(_0x5ab49b,_0x29771d,_0x16878e,_0x45d4c2,_0x59662c,_0x2fa6df){var _0x3f7dbe,_0x75e9e0,_0xbed5cb,_0x2a4c9a;_0x2fa6df[_0x5a7d('0x1e')]=intUtil[_0x5a7d('0x45')](_0x2fa6df[_0x5a7d('0x1e')]);if(_0x59662c&&_0x59662c['monitor_format']){logger[_0x5a7d('0x2c')](_0x5a7d('0x46'),_0x5a7d('0x47'));_0x29771d['recordingURL']=util[_0x5a7d('0x1c')](_0x5a7d('0x48'),_0x2fa6df[_0x5a7d('0x49')],_0x29771d[_0x5a7d('0x4a')],md5(_0x29771d[_0x5a7d('0x4a')]));}else{_0x29771d[_0x5a7d('0x4b')]='';}return getConnection(_0x2fa6df)[_0x5a7d('0x20')](function(_0x2ae22e){_0x2a4c9a=_0x2ae22e;return getUser(_0x2fa6df,_0x45d4c2?_0x45d4c2['email']:'',_0x2a4c9a);})['then'](function(_0x4f6c7c){_0x3f7dbe=_0x4f6c7c;logger[_0x5a7d('0x2c')](_0x5a7d('0x4c'),_0x3f7dbe['id']);return getEndUser(_0x2fa6df,_0x29771d['calleridname'],_0x29771d['calleridnum'],_0x2a4c9a);})[_0x5a7d('0x20')](function(_0x1ba5c1){_0x75e9e0=_0x1ba5c1;logger[_0x5a7d('0x2c')](_0x5a7d('0x4d'),_0x75e9e0['id']);return createTicket(_0x2fa6df,_0x3f7dbe,_0x75e9e0,_0x16878e,_0x29771d,_0x16878e[_0x5a7d('0x4e')],_0x2a4c9a);})[_0x5a7d('0x20')](function(_0x3c00e1){_0xbed5cb=_0x3c00e1;logger[_0x5a7d('0x2c')](_0x5a7d('0x4f'));logger[_0x5a7d('0x2c')](_0x5a7d('0x50'),_0xbed5cb['id']);var _0x149027=util[_0x5a7d('0x1c')](_0x5a7d('0x51'),_0x2fa6df[_0x5a7d('0x1e')],_[_0x5a7d('0x52')](_0xbed5cb['id'],'x')[0x1]);logger[_0x5a7d('0x2c')]('[QUEUE]',_0x5a7d('0x53'));emit(util[_0x5a7d('0x1c')](_0x5a7d('0x54'),_0x45d4c2[_0x5a7d('0x13')]),'trigger:browser:url',{'uri':_0x149027});})['catch'](function(_0x26ad71){logger[_0x5a7d('0x25')](_0x5a7d('0x46'),JSON[_0x5a7d('0x2b')](_0x26ad71));});};exports['outbound']=function(_0x582a74,_0x77632a,_0x17a149,_0x466d7f,_0x3b6b35,_0x6f29b3,_0x1f75e5){var _0x3b0226,_0x47e03a,_0x5515ed,_0x9197f0;_0x6f29b3[_0x5a7d('0x1e')]=intUtil[_0x5a7d('0x45')](_0x6f29b3[_0x5a7d('0x1e')]);_0x6f29b3[_0x5a7d('0x49')]=intUtil[_0x5a7d('0x45')](_0x6f29b3[_0x5a7d('0x49')]);if(_0x1f75e5&&_0x1f75e5[_0x5a7d('0x55')]&&_0x1f75e5[_0x5a7d('0x55')]!==_0x5a7d('0x56')){logger[_0x5a7d('0x2c')](_0x5a7d('0x57'),_0x5a7d('0x47'));_0x77632a[_0x5a7d('0x4b')]=util[_0x5a7d('0x1c')](_0x5a7d('0x48'),_0x6f29b3['serverUrl'],_0x77632a[_0x5a7d('0x4a')],md5(_0x77632a[_0x5a7d('0x4a')]));}return getConnection(_0x6f29b3)['then'](function(_0x282569){_0x9197f0=_0x282569;return getUser(_0x6f29b3,_0x466d7f?_0x466d7f[_0x5a7d('0x58')]:'',_0x9197f0);})[_0x5a7d('0x20')](function(_0x31e068){_0x3b0226=_0x31e068;logger[_0x5a7d('0x2c')](_0x5a7d('0x4c'),_0x3b0226['id']);return getEndUser(_0x6f29b3,_0x77632a[_0x5a7d('0x59')],_0x77632a[_0x5a7d('0x5a')],_0x9197f0);})['then'](function(_0x43ad2f){_0x47e03a=_0x43ad2f;logger[_0x5a7d('0x2c')](_0x5a7d('0x4d'),_0x47e03a['id']);return createTicket(_0x6f29b3,_0x3b0226,_0x47e03a,_0x17a149,_0x77632a,_0x17a149['Fields'],_0x9197f0);})[_0x5a7d('0x20')](function(_0x5dfce1){_0x5515ed=_0x5dfce1;logger['info']('Ticket\x20created!');logger[_0x5a7d('0x2c')](_0x5a7d('0x50'),_0x5515ed['id']);var _0x4e8bfd=util[_0x5a7d('0x1c')](_0x5a7d('0x51'),_0x6f29b3['remoteUri'],_[_0x5a7d('0x52')](_0x5515ed['id'],'x')[0x1]);logger[_0x5a7d('0x2c')](_0x5a7d('0x57'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x5a7d('0x1c')](_0x5a7d('0x54'),_0x466d7f[_0x5a7d('0x13')]),_0x5a7d('0x5b'),{'uri':_0x4e8bfd});})[_0x5a7d('0x26')](function(_0x36dbf5){logger[_0x5a7d('0x25')](_0x5a7d('0x57'),JSON[_0x5a7d('0x2b')](_0x36dbf5));});};exports[_0x5a7d('0x5c')]=function(_0x2c6c6b,_0x1b73ce,_0x3af8ec,_0x10359d,_0x46de3a,_0x206f78){var _0x257d81,_0x5ac07c,_0x13caeb,_0x35765d;_0x206f78[_0x5a7d('0x1e')]=intUtil['stripTrailingSlash'](_0x206f78[_0x5a7d('0x1e')]);_0x206f78[_0x5a7d('0x49')]=intUtil['stripTrailingSlash'](_0x206f78[_0x5a7d('0x49')]);if(_0x46de3a&&_0x46de3a['monitor_format']){logger['info'](_0x5a7d('0x5d'),_0x5a7d('0x47'));_0x1b73ce[_0x5a7d('0x4b')]=util[_0x5a7d('0x1c')](_0x5a7d('0x48'),_0x206f78['serverUrl'],_0x1b73ce[_0x5a7d('0x4a')],md5(_0x1b73ce[_0x5a7d('0x4a')]));}else{_0x1b73ce['recordingURL']='';}return getConnection(_0x206f78)[_0x5a7d('0x20')](function(_0x61ba27){_0x35765d=_0x61ba27;return getUser(_0x206f78,_0x10359d?_0x10359d[_0x5a7d('0x58')]:'',_0x35765d);})[_0x5a7d('0x20')](function(_0xf6691a){_0x257d81=_0xf6691a;logger[_0x5a7d('0x2c')](_0x5a7d('0x4c'),_0x257d81['id']);return getEndUser(_0x206f78,_0x1b73ce['calleridname'],_0x1b73ce[_0x5a7d('0x5e')],_0x35765d);})[_0x5a7d('0x20')](function(_0x5601ed){_0x5ac07c=_0x5601ed;logger[_0x5a7d('0x2c')]('The\x20Enduser\x20ID\x20is:',_0x5ac07c['id']);return createTicket(_0x206f78,_0x257d81,_0x5ac07c,_0x3af8ec,_0x1b73ce,_0x3af8ec[_0x5a7d('0x4e')],_0x35765d);})[_0x5a7d('0x20')](function(_0x162ea4){_0x13caeb=_0x162ea4;logger[_0x5a7d('0x2c')](_0x5a7d('0x4f'));logger[_0x5a7d('0x2c')]('The\x20Ticket\x20ID\x20is:',_0x13caeb['id']);})[_0x5a7d('0x26')](function(_0x2cdf60){logger[_0x5a7d('0x25')](_0x5a7d('0x5d'),JSON[_0x5a7d('0x2b')](_0x2cdf60));});};
\ No newline at end of file
+var _0x4e16=['bluebird','md5','util','./util','vTiger','localhost','emit','forEach','idField','content','toString','type','variableName','customVariable','Variable','name','toLowerCase','info','Creating\x20new\x20ticket...','Normal','Open','Subjects','getString','Descriptions','POST','format','%s/webservice.php','remoteUri','create','admin','sessionName','stringify','then','success','resolve','Ticket\x20could\x20not\x20be\x20created\x20due\x20to:\x20%s','error','statusCode','[vTiger],\x20%s,\x20%s,\x20%s','createTicket','Getting\x20agent\x20with\x20email','GET','query','SELECT\x20first_name,\x20last_name,\x20email1\x20FROM\x20Users\x20WHERE\x20email1=\x27%s\x27;','result','length','Agent\x20found!','email1','last_name','username','catch','test','getUser','Enduser\x20found!','lastname','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Contacts','Enduser\x20created.','phone','accessKey','getchallenge','login','token','Account\x20%d\x20is\x20not\x20valid','getConnection','[HTTP]','queue','stripTrailingSlash','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','email','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Fields','Ticket\x20created!','%s/index.php?module=HelpDesk&view=Detail&record=%s&app=SUPPORT','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','serverUrl','recordingFormat','none','[OUTBOUND]','The\x20User\x20ID\x20is:','destcalleridnum','The\x20Ticket\x20ID\x20is:','split','[ABANDONED]','lodash','request-promise'];(function(_0x5d2803,_0xf375bd){var _0xdcad2c=function(_0x3c3a98){while(--_0x3c3a98){_0x5d2803['push'](_0x5d2803['shift']());}};_0xdcad2c(++_0xf375bd);}(_0x4e16,0xba));var _0x64e1=function(_0x1db184,_0xdfe3db){_0x1db184=_0x1db184-0x0;var _0x3df190=_0x4e16[_0x1db184];return _0x3df190;};'use strict';var _=require(_0x64e1('0x0'));var rp=require(_0x64e1('0x1'));var BPromise=require(_0x64e1('0x2'));var md5=require(_0x64e1('0x3'));var util=require(_0x64e1('0x4'));var intUtil=require(_0x64e1('0x5'));var logger=require('../../../../config/logger')(_0x64e1('0x6'));var io=require('socket.io-emitter')({'host':_0x64e1('0x7'),'port':0x18eb});function emit(_0x501552,_0x368a51,_0x3cb996){io['to'](_0x501552)[_0x64e1('0x8')](_0x368a51,_0x3cb996);}function getCustomFields(_0x336bac,_0x519ffd){var _0x30db71={};if(_0x336bac['length']>0x0){_[_0x64e1('0x9')](_0x336bac,function(_0x1cd037){if(_0x1cd037['type']==='string'&&_0x1cd037[_0x64e1('0xa')]){_0x30db71[_0x1cd037[_0x64e1('0xa')]]=_0x1cd037[_0x64e1('0xb')][_0x64e1('0xc')]();}else if(_0x1cd037[_0x64e1('0xd')]==='variable'&&_0x1cd037[_0x64e1('0xe')]&&_0x1cd037[_0x64e1('0xa')]&&_0x519ffd[_0x1cd037[_0x64e1('0xe')]]){_0x30db71[_0x1cd037['idField']]=_0x519ffd[_0x1cd037[_0x64e1('0xe')]][_0x64e1('0xc')]();}else if(_0x1cd037['type']===_0x64e1('0xf')&&_0x1cd037['Variable']&&_0x1cd037[_0x64e1('0x10')][_0x64e1('0x11')]&&_0x1cd037['idField']&&_0x519ffd[_0x1cd037[_0x64e1('0x10')][_0x64e1('0x11')][_0x64e1('0x12')]()]){_0x30db71[_0x1cd037[_0x64e1('0xa')]]=_0x519ffd[_0x1cd037[_0x64e1('0x10')]['name'][_0x64e1('0x12')]()]['toString']();}});}return _0x30db71;}function createTicket(_0x8d4ca2,_0x1056e5,_0x533892,_0x14d173,_0xe1a2fa,_0x2ad649,_0x25f52b){logger[_0x64e1('0x13')](_0x64e1('0x14'));var _0x4da39d=_['merge']({'parent_id':'','assigned_user_id':_0x1056e5['id'],'ticketpriorities':_0x64e1('0x15'),'ticketstatus':_0x64e1('0x16'),'ticket_title':intUtil['getString'](_0x14d173[_0x64e1('0x17')],_0xe1a2fa,'\x20'),'description':intUtil[_0x64e1('0x18')](_0x14d173[_0x64e1('0x19')],_0xe1a2fa,'\x0a'),'contact_id':_0x533892['id']},getCustomFields(_0x2ad649,_0xe1a2fa));var _0x3ab48a={'method':_0x64e1('0x1a'),'uri':util[_0x64e1('0x1b')](_0x64e1('0x1c'),_0x8d4ca2[_0x64e1('0x1d')]),'form':{'operation':_0x64e1('0x1e'),'username':_0x64e1('0x1f'),'sessionName':_0x25f52b[_0x64e1('0x20')],'elementType':'HelpDesk','element':JSON[_0x64e1('0x21')](_0x4da39d)},'json':!![]};return request(_0x3ab48a)[_0x64e1('0x22')](function(_0x538862){if(_0x538862[_0x64e1('0x23')]){return BPromise[_0x64e1('0x24')]({'id':_0x538862['result']['id']});}else{throw new Error(util[_0x64e1('0x1b')](_0x64e1('0x25'),JSON[_0x64e1('0x21')](_0x538862[_0x64e1('0x26')])));}})['catch'](function(_0x1cac96){var _0x445ddb=req['query']['test']?0x1f4:_0x1cac96[_0x64e1('0x27')]||0x1f4;logger[_0x64e1('0x26')](_0x64e1('0x28'),_0x64e1('0x29'),_0x445ddb,JSON['stringify'](_0x1cac96));});}function getUser(_0x52649f,_0x3a9ad8,_0x1c0ad9){logger[_0x64e1('0x13')](_0x64e1('0x2a'),_0x3a9ad8);return request({'method':_0x64e1('0x2b'),'uri':util['format'](_0x64e1('0x1c'),_0x52649f[_0x64e1('0x1d')]),'qs':{'operation':_0x64e1('0x2c'),'username':'admin','sessionName':_0x1c0ad9[_0x64e1('0x20')],'query':util['format'](_0x64e1('0x2d'),_0x3a9ad8)},'json':!![]})[_0x64e1('0x22')](function(_0x3637c3){if(_0x3637c3[_0x64e1('0x23')]&&_0x3637c3[_0x64e1('0x2e')][_0x64e1('0x2f')]){logger['info'](_0x64e1('0x30'));return BPromise[_0x64e1('0x24')]({'id':_0x3637c3[_0x64e1('0x2e')][0x0]['id'],'email':_0x3637c3[_0x64e1('0x2e')][0x0][_0x64e1('0x31')],'name':_0x3637c3[_0x64e1('0x2e')][0x0]['first_name']+'\x20'+_0x3637c3['result'][_0x64e1('0x32')]});}else{logger[_0x64e1('0x13')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return BPromise[_0x64e1('0x24')]({'id':_0x1c0ad9['userId'],'email':_0x52649f[_0x64e1('0x33')],'name':'admin'});}})[_0x64e1('0x34')](function(_0x5089d5){var _0x1b0c65=req[_0x64e1('0x2c')][_0x64e1('0x35')]?0x1f4:_0x5089d5[_0x64e1('0x27')]||0x1f4;logger['error'](_0x64e1('0x28'),_0x64e1('0x36'),_0x1b0c65,JSON[_0x64e1('0x21')](_0x5089d5));});}function getEndUser(_0x16041b,_0x3b81e5,_0x197d27,_0x19eac7){logger[_0x64e1('0x13')]('Searching\x20end\x20user\x20with\x20phone',_0x197d27);return request({'method':'GET','uri':util[_0x64e1('0x1b')](_0x64e1('0x1c'),_0x16041b[_0x64e1('0x1d')]),'qs':{'operation':_0x64e1('0x2c'),'username':'admin','sessionName':_0x19eac7[_0x64e1('0x20')],'query':util['format']('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;',_0x197d27,_0x197d27,_0x197d27,_0x197d27,_0x197d27)},'json':!![]})['then'](function(_0x38bc33){if(_0x38bc33[_0x64e1('0x23')]&&_0x38bc33[_0x64e1('0x2e')][_0x64e1('0x2f')]){logger[_0x64e1('0x13')](_0x64e1('0x37'));return BPromise['resolve']({'id':_0x38bc33[_0x64e1('0x2e')][0x0]['id'],'name':_0x38bc33[_0x64e1('0x2e')][0x0]['firstname']+'\x20'+_0x38bc33[_0x64e1('0x2e')][0x0][_0x64e1('0x38')],'phone':_0x197d27});}else{logger[_0x64e1('0x13')](_0x64e1('0x39'));return request({'method':'POST','uri':util['format']('%s/webservice.php',_0x16041b['remoteUri']),'form':{'operation':_0x64e1('0x1e'),'sessionName':_0x19eac7[_0x64e1('0x20')],'elementType':_0x64e1('0x3a'),'element':JSON['stringify']({'lastname':_0x3b81e5,'phone':_0x197d27,'assigned_user_id':'\x20'})},'json':!![]})[_0x64e1('0x22')](function(_0x130317){logger['info'](_0x64e1('0x3b'));return BPromise[_0x64e1('0x24')]({'id':_0x130317[_0x64e1('0x2e')]['id'],'name':_0x130317[_0x64e1('0x2e')][_0x64e1('0x38')],'phone':_0x130317[_0x64e1('0x2e')][_0x64e1('0x3c')]});})[_0x64e1('0x34')](function(_0x8d09c0){var _0x336879=req[_0x64e1('0x2c')][_0x64e1('0x35')]?0x1f4:_0x8d09c0[_0x64e1('0x27')]||0x1f4;logger[_0x64e1('0x26')](_0x64e1('0x28'),'getEndUser',_0x336879,JSON[_0x64e1('0x21')](_0x8d09c0));});}});}function getConnection(_0x13ec09){var _0x3524ff=_0x13ec09['username'];var _0xe9cf71=_0x13ec09[_0x64e1('0x3d')];return request({'method':_0x64e1('0x2b'),'uri':util['format'](_0x64e1('0x1c'),_0x13ec09[_0x64e1('0x1d')]),'qs':{'operation':_0x64e1('0x3e'),'username':_0x3524ff},'json':!![]})[_0x64e1('0x22')](function(_0x266f2c){if(_0x266f2c['success']){return request({'method':_0x64e1('0x1a'),'uri':util[_0x64e1('0x1b')](_0x64e1('0x1c'),_0x13ec09[_0x64e1('0x1d')]),'form':{'operation':_0x64e1('0x3f'),'username':_0x64e1('0x1f'),'accessKey':md5(_0x266f2c[_0x64e1('0x2e')][_0x64e1('0x40')]+_0xe9cf71)},'json':!![]});}})[_0x64e1('0x22')](function(_0x4da689){if(_0x4da689[_0x64e1('0x23')]){return BPromise[_0x64e1('0x24')](_0x4da689[_0x64e1('0x2e')]);}else{throw new Error(util[_0x64e1('0x1b')](_0x64e1('0x41'),_0x13ec09['id']));}})[_0x64e1('0x34')](function(_0x27c312){var _0x5d2822=req[_0x64e1('0x2c')][_0x64e1('0x35')]?0x1f4:_0x27c312['statusCode']||0x1f4;logger[_0x64e1('0x26')](_0x64e1('0x28'),_0x64e1('0x42'),_0x5d2822,JSON[_0x64e1('0x21')](_0x27c312));});}function request(_0x2e0be8){logger[_0x64e1('0x13')](_0x64e1('0x43'),JSON['stringify'](_0x2e0be8));return rp(_0x2e0be8);}exports[_0x64e1('0x44')]=function(_0x3af3ac,_0x487e18,_0x5043ed,_0x3e120e,_0x5f5bfc,_0x15f495){var _0x26c4a4,_0x46401b,_0x5b38df,_0xeda8dc;_0x15f495[_0x64e1('0x1d')]=intUtil[_0x64e1('0x45')](_0x15f495['remoteUri']);if(_0x5f5bfc&&_0x5f5bfc[_0x64e1('0x46')]){logger['info'](_0x64e1('0x47'),_0x64e1('0x48'));_0x487e18[_0x64e1('0x49')]=util['format'](_0x64e1('0x4a'),_0x15f495['serverUrl'],_0x487e18[_0x64e1('0x4b')],md5(_0x487e18[_0x64e1('0x4b')]));}else{_0x487e18[_0x64e1('0x49')]='';}return getConnection(_0x15f495)['then'](function(_0x4f886b){_0xeda8dc=_0x4f886b;return getUser(_0x15f495,_0x3e120e?_0x3e120e[_0x64e1('0x4c')]:'',_0xeda8dc);})[_0x64e1('0x22')](function(_0x28c0d0){_0x26c4a4=_0x28c0d0;logger[_0x64e1('0x13')]('The\x20User\x20ID\x20is:',_0x26c4a4['id']);return getEndUser(_0x15f495,_0x487e18[_0x64e1('0x4d')],_0x487e18[_0x64e1('0x4e')],_0xeda8dc);})[_0x64e1('0x22')](function(_0x5ea987){_0x46401b=_0x5ea987;logger[_0x64e1('0x13')](_0x64e1('0x4f'),_0x46401b['id']);return createTicket(_0x15f495,_0x26c4a4,_0x46401b,_0x5043ed,_0x487e18,_0x5043ed[_0x64e1('0x50')],_0xeda8dc);})['then'](function(_0x13fda0){_0x5b38df=_0x13fda0;logger[_0x64e1('0x13')](_0x64e1('0x51'));logger[_0x64e1('0x13')]('The\x20Ticket\x20ID\x20is:',_0x5b38df['id']);var _0x37fe36=util[_0x64e1('0x1b')](_0x64e1('0x52'),_0x15f495[_0x64e1('0x1d')],_['split'](_0x5b38df['id'],'x')[0x1]);logger[_0x64e1('0x13')]('[QUEUE]',_0x64e1('0x53'));emit(util[_0x64e1('0x1b')]('user:%s',_0x3e120e['name']),_0x64e1('0x54'),{'uri':_0x37fe36});})[_0x64e1('0x34')](function(_0x1b58f7){logger['error'](_0x64e1('0x47'),JSON[_0x64e1('0x21')](_0x1b58f7));});};exports['outbound']=function(_0x3de24f,_0x134c5f,_0x556d56,_0x1f9ba3,_0x4f0a5c,_0x287059,_0x1397f7){var _0x4feaa6,_0x2001b6,_0x5c213b,_0x2daf0b;_0x287059[_0x64e1('0x1d')]=intUtil[_0x64e1('0x45')](_0x287059[_0x64e1('0x1d')]);_0x287059[_0x64e1('0x55')]=intUtil[_0x64e1('0x45')](_0x287059[_0x64e1('0x55')]);if(_0x1397f7&&_0x1397f7[_0x64e1('0x56')]&&_0x1397f7['recordingFormat']!==_0x64e1('0x57')){logger['info'](_0x64e1('0x58'),_0x64e1('0x48'));_0x134c5f[_0x64e1('0x49')]=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x287059[_0x64e1('0x55')],_0x134c5f[_0x64e1('0x4b')],md5(_0x134c5f[_0x64e1('0x4b')]));}return getConnection(_0x287059)[_0x64e1('0x22')](function(_0x5c884b){_0x2daf0b=_0x5c884b;return getUser(_0x287059,_0x1f9ba3?_0x1f9ba3['email']:'',_0x2daf0b);})[_0x64e1('0x22')](function(_0x5927be){_0x4feaa6=_0x5927be;logger[_0x64e1('0x13')](_0x64e1('0x59'),_0x4feaa6['id']);return getEndUser(_0x287059,_0x134c5f['destcalleridname'],_0x134c5f[_0x64e1('0x5a')],_0x2daf0b);})[_0x64e1('0x22')](function(_0x1afa07){_0x2001b6=_0x1afa07;logger[_0x64e1('0x13')](_0x64e1('0x4f'),_0x2001b6['id']);return createTicket(_0x287059,_0x4feaa6,_0x2001b6,_0x556d56,_0x134c5f,_0x556d56['Fields'],_0x2daf0b);})['then'](function(_0x5c537a){_0x5c213b=_0x5c537a;logger[_0x64e1('0x13')](_0x64e1('0x51'));logger[_0x64e1('0x13')](_0x64e1('0x5b'),_0x5c213b['id']);var _0x16fe90=util[_0x64e1('0x1b')](_0x64e1('0x52'),_0x287059[_0x64e1('0x1d')],_[_0x64e1('0x5c')](_0x5c213b['id'],'x')[0x1]);logger['info']('[OUTBOUND]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x64e1('0x1b')]('user:%s',_0x1f9ba3[_0x64e1('0x11')]),_0x64e1('0x54'),{'uri':_0x16fe90});})['catch'](function(_0x5e7509){logger[_0x64e1('0x26')](_0x64e1('0x58'),JSON[_0x64e1('0x21')](_0x5e7509));});};exports['abandoned']=function(_0x2c5708,_0x4e5911,_0x2b3ac3,_0x56269d,_0x146486,_0x21ae74){var _0x1bda99,_0x354cc2,_0x2e3a40,_0x3a8762;_0x21ae74[_0x64e1('0x1d')]=intUtil[_0x64e1('0x45')](_0x21ae74[_0x64e1('0x1d')]);_0x21ae74['serverUrl']=intUtil['stripTrailingSlash'](_0x21ae74[_0x64e1('0x55')]);if(_0x146486&&_0x146486['monitor_format']){logger[_0x64e1('0x13')](_0x64e1('0x5d'),_0x64e1('0x48'));_0x4e5911['recordingURL']=util[_0x64e1('0x1b')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x21ae74[_0x64e1('0x55')],_0x4e5911[_0x64e1('0x4b')],md5(_0x4e5911[_0x64e1('0x4b')]));}else{_0x4e5911[_0x64e1('0x49')]='';}return getConnection(_0x21ae74)[_0x64e1('0x22')](function(_0x57b343){_0x3a8762=_0x57b343;return getUser(_0x21ae74,_0x56269d?_0x56269d[_0x64e1('0x4c')]:'',_0x3a8762);})[_0x64e1('0x22')](function(_0x525cc3){_0x1bda99=_0x525cc3;logger['info'](_0x64e1('0x59'),_0x1bda99['id']);return getEndUser(_0x21ae74,_0x4e5911['calleridname'],_0x4e5911[_0x64e1('0x4e')],_0x3a8762);})[_0x64e1('0x22')](function(_0x53574a){_0x354cc2=_0x53574a;logger[_0x64e1('0x13')](_0x64e1('0x4f'),_0x354cc2['id']);return createTicket(_0x21ae74,_0x1bda99,_0x354cc2,_0x2b3ac3,_0x4e5911,_0x2b3ac3['Fields'],_0x3a8762);})['then'](function(_0x5aa4b8){_0x2e3a40=_0x5aa4b8;logger['info']('Ticket\x20created!');logger[_0x64e1('0x13')](_0x64e1('0x5b'),_0x2e3a40['id']);})['catch'](function(_0x782d0a){logger[_0x64e1('0x26')](_0x64e1('0x5d'),JSON['stringify'](_0x782d0a));});};
\ No newline at end of file
index f2fe192..99bc30f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xae73=['toLowerCase','type','idField','content','variable','variableName','custom_fields','push','customVariable','name','Variable','queue','stripTrailingSlash','serverUrl','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','Authorization','email','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/agent/tickets/%s','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','stringify','recordingFormat','none','destcalleridname','destcalleridnum','newTab','[OUTBOUND]','abandoned','monitor_format','[ABANDONED]','The\x20User\x20ID\x20is:','lodash','request-promise','util','./util','../../../../config/logger','zendesk','socket.io-emitter','localhost','emit','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','merge','Tags','getString','Descriptions','Fields','then','ticket','count','find','results','agent','%s/users/me.json','Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','%s/search.json','type:user\x20role:end-user\x20phone:%s','Enduser\x20found!','end-user','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Caller\x20-\x20%s','Enduser\x20created.','authType','password','%s:%s','username','token','%s/token:%s','toString','[HTTP]','defaults','GET','map','length','forEach','customField','nameField'];(function(_0x48c165,_0x2e5860){var _0x553593=function(_0x1033d8){while(--_0x1033d8){_0x48c165['push'](_0x48c165['shift']());}};_0x553593(++_0x2e5860);}(_0xae73,0x1ba));var _0x3ae7=function(_0x3780bd,_0x81b109){_0x3780bd=_0x3780bd-0x0;var _0x2a7b7f=_0xae73[_0x3780bd];return _0x2a7b7f;};'use strict';var _=require(_0x3ae7('0x0'));var rp=require(_0x3ae7('0x1'));var md5=require('md5');var util=require(_0x3ae7('0x2'));var intUtil=require(_0x3ae7('0x3'));var logger=require(_0x3ae7('0x4'))(_0x3ae7('0x5'));var io=require(_0x3ae7('0x6'))({'host':_0x3ae7('0x7'),'port':0x18eb});function emit(_0x323f2b,_0x58b3b4,_0xe8db21){io['to'](_0x323f2b)[_0x3ae7('0x8')](_0x58b3b4,_0xe8db21);}var headers={'Content-Type':_0x3ae7('0x9'),'Accept':'application/json'};function getTicket(_0x475d56,_0x355cdc,_0x46bd69,_0x447300,_0x55323a){logger[_0x3ae7('0xa')](_0x3ae7('0xb'));return request({'uri':util[_0x3ae7('0xc')](_0x3ae7('0xd'),_0x475d56[_0x3ae7('0xe')]),'method':_0x3ae7('0xf'),'body':{'ticket':_[_0x3ae7('0x10')]({'requester_id':_0x46bd69['id'],'submitter_id':_0x355cdc?_0x355cdc['id']:undefined,'assignee_id':_0x355cdc?_0x355cdc['id']:undefined,'tags':getTags(_0x447300[_0x3ae7('0x11')],'name'),'subject':intUtil[_0x3ae7('0x12')](_0x447300['Subjects'],_0x55323a,'\x20'),'description':intUtil[_0x3ae7('0x12')](_0x447300[_0x3ae7('0x13')],_0x55323a,'\x0a'),'comment':{'public':![],'body':intUtil[_0x3ae7('0x12')](_0x447300[_0x3ae7('0x13')],_0x55323a,'\x0a')}},getCustomFields(_0x447300[_0x3ae7('0x14')],_0x55323a))}})[_0x3ae7('0x15')](function(_0x280c17){logger[_0x3ae7('0xa')]('Ticket\x20created!');return _0x280c17[_0x3ae7('0x16')];});}function getUser(_0x5dd568,_0x561077){logger[_0x3ae7('0xa')]('Getting\x20agent\x20with\x20email',_0x561077);return request({'uri':util[_0x3ae7('0xc')]('%s/search.json',_0x5dd568['remoteUri']),'qs':{'query':util[_0x3ae7('0xc')]('type:user\x20role:agent\x20email:%s',_0x561077)}})[_0x3ae7('0x15')](function(_0x5874c2){if(_0x5874c2[_0x3ae7('0x17')]){logger[_0x3ae7('0xa')]('Agent\x20found!');return _[_0x3ae7('0x18')](_0x5874c2[_0x3ae7('0x19')],{'email':_0x561077,'role':_0x3ae7('0x1a')});}else{logger['info']('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x3ae7('0xc')](_0x3ae7('0x1b'),_0x5dd568[_0x3ae7('0xe')])})[_0x3ae7('0x15')](function(_0x32bf86){logger[_0x3ae7('0xa')](_0x3ae7('0x1c'));return _0x32bf86[_0x3ae7('0x1d')];});}});}function getEndUser(_0x1579ee,_0x49740d,_0x48b0d1){logger['info'](_0x3ae7('0x1e'),_0x48b0d1);return request({'uri':util[_0x3ae7('0xc')](_0x3ae7('0x1f'),_0x1579ee['remoteUri']),'qs':{'query':util[_0x3ae7('0xc')](_0x3ae7('0x20'),_0x48b0d1)}})['then'](function(_0x29205d){if(_0x29205d[_0x3ae7('0x17')]){logger[_0x3ae7('0xa')](_0x3ae7('0x21'));return _[_0x3ae7('0x18')](_0x29205d[_0x3ae7('0x19')],{'phone':_0x48b0d1,'role':_0x3ae7('0x22')});}else{logger['info'](_0x3ae7('0x23'));return request({'uri':util[_0x3ae7('0xc')]('%s/users.json',_0x1579ee[_0x3ae7('0xe')]),'method':_0x3ae7('0xf'),'body':{'user':{'role':_0x3ae7('0x22'),'name':util['format'](_0x3ae7('0x24'),_0x49740d||_0x48b0d1),'phone':_0x48b0d1}}})[_0x3ae7('0x15')](function(_0x14a2f4){logger[_0x3ae7('0xa')](_0x3ae7('0x25'));return _0x14a2f4[_0x3ae7('0x1d')];});}});}function getAuth(_0x481699){var _0x4001e3;if(_0x481699[_0x3ae7('0x26')]===_0x3ae7('0x27')){_0x4001e3=util['format'](_0x3ae7('0x28'),_0x481699[_0x3ae7('0x29')],_0x481699[_0x3ae7('0x27')]);}else if(_0x481699[_0x3ae7('0x26')]===_0x3ae7('0x2a')){_0x4001e3=util['format'](_0x3ae7('0x2b'),_0x481699['username'],_0x481699[_0x3ae7('0x2a')]);}return util[_0x3ae7('0xc')]('Basic\x20%s',new Buffer(_0x4001e3)[_0x3ae7('0x2c')]('base64'));}function request(_0x1edeb1){logger['debug'](_0x3ae7('0x2d'),JSON['stringify'](_0x1edeb1));return rp(_[_0x3ae7('0x2e')](_0x1edeb1,{'method':_0x3ae7('0x2f'),'headers':headers,'json':!![]}));}function getTags(_0x2c8e6b,_0x1b0450){var _0x19765a=[];if(_0x2c8e6b&&_0x2c8e6b['length']>0x0){_0x19765a=_[_0x3ae7('0x30')](_0x2c8e6b,_0x1b0450);}return _0x19765a;}function getCustomFields(_0x45fc3a,_0x988c2c){var _0x3034b8=[];var _0x537a66={'custom_fields':[]};if(_0x45fc3a[_0x3ae7('0x31')]>0x0){_[_0x3ae7('0x32')](_0x45fc3a,function(_0x1ab3c2){if(_0x1ab3c2['type']==='string'&&_0x1ab3c2['nameField']&&!_0x1ab3c2[_0x3ae7('0x33')]){_0x537a66[_0x1ab3c2[_0x3ae7('0x34')][_0x3ae7('0x35')]()]=_0x1ab3c2['content'][_0x3ae7('0x2c')]();}else if(_0x1ab3c2[_0x3ae7('0x36')]==='string'&&_0x1ab3c2[_0x3ae7('0x37')]&&_0x1ab3c2[_0x3ae7('0x33')]){_0x537a66['custom_fields']['push']({'id':_0x1ab3c2[_0x3ae7('0x37')],'value':_0x1ab3c2[_0x3ae7('0x38')][_0x3ae7('0x2c')]()});}else if(_0x1ab3c2[_0x3ae7('0x36')]===_0x3ae7('0x39')&&_0x1ab3c2[_0x3ae7('0x3a')]&&_0x1ab3c2[_0x3ae7('0x37')]&&_0x1ab3c2[_0x3ae7('0x33')]){_0x988c2c[_0x1ab3c2[_0x3ae7('0x3a')]]&&_0x537a66[_0x3ae7('0x3b')][_0x3ae7('0x3c')]({'id':_0x1ab3c2[_0x3ae7('0x37')],'value':_0x988c2c[_0x1ab3c2['variableName']]['toString']()});}else if(_0x1ab3c2[_0x3ae7('0x36')]===_0x3ae7('0x3d')&&_0x1ab3c2['Variable']&&_0x1ab3c2['Variable'][_0x3ae7('0x3e')]&&_0x1ab3c2[_0x3ae7('0x37')]&&_0x1ab3c2[_0x3ae7('0x33')]){_0x988c2c[_0x1ab3c2[_0x3ae7('0x3f')][_0x3ae7('0x3e')][_0x3ae7('0x35')]()]&&_0x537a66[_0x3ae7('0x3b')]['push']({'id':_0x1ab3c2[_0x3ae7('0x37')],'value':_0x988c2c[_0x1ab3c2[_0x3ae7('0x3f')][_0x3ae7('0x3e')]['toLowerCase']()]['toString']()});}});}return _0x537a66;}exports[_0x3ae7('0x40')]=function(_0x46408c,_0x304a74,_0x1c9330,_0x5a8a2e,_0x386d7a,_0x3e9f62){var _0x52120b,_0x295558;_0x3e9f62['remoteUri']=intUtil[_0x3ae7('0x41')](_0x3e9f62[_0x3ae7('0xe')]);_0x3e9f62['serverUrl']=intUtil[_0x3ae7('0x41')](_0x3e9f62[_0x3ae7('0x42')]);if(_0x386d7a&&_0x386d7a['monitor_format']){logger['info'](_0x3ae7('0x43'),_0x3ae7('0x44'));_0x304a74['recordingURL']=util[_0x3ae7('0xc')](_0x3ae7('0x45'),_0x3e9f62[_0x3ae7('0x42')],_0x304a74[_0x3ae7('0x46')],md5(_0x304a74['uniqueid']));}else{_0x304a74[_0x3ae7('0x47')]='';}headers[_0x3ae7('0x48')]=getAuth(_0x3e9f62);return getUser(_0x3e9f62,_0x5a8a2e[_0x3ae7('0x49')])[_0x3ae7('0x15')](function(_0x3d6d62){_0x52120b=_0x3d6d62;logger['info']('The\x20User\x20ID\x20is:',_0x52120b['id']);return getEndUser(_0x3e9f62,_0x304a74[_0x3ae7('0x4a')],_0x304a74[_0x3ae7('0x4b')]);})[_0x3ae7('0x15')](function(_0x162a72){_0x295558=_0x162a72;logger[_0x3ae7('0xa')](_0x3ae7('0x4c'),_0x295558['id']);return getTicket(_0x3e9f62,_0x52120b,_0x295558,_0x1c9330,_0x304a74);})[_0x3ae7('0x15')](function(_0x2fb907){if(_0x2fb907){logger[_0x3ae7('0xa')](_0x3ae7('0x4d'),_0x2fb907['id']);switch(_0x3e9f62[_0x3ae7('0x36')]){case _0x3ae7('0x4e'):logger['info'](_0x3ae7('0x43'),_0x3ae7('0x4f'));return request({'uri':util['format'](_0x3ae7('0x50'),_0x3e9f62['remoteUri'],_0x52120b['id'],_0x2fb907['id']),'method':_0x3ae7('0xf')});case'newTab':logger[_0x3ae7('0xa')](_0x3ae7('0x43'),_0x3ae7('0x51'));emit(util['format'](_0x3ae7('0x52'),_0x5a8a2e[_0x3ae7('0x3e')]),_0x3ae7('0x53'),{'uri':util[_0x3ae7('0xc')](_0x3ae7('0x54'),_0x3e9f62[_0x3ae7('0xe')],_0x2fb907['id'])});break;default:logger[_0x3ae7('0x55')]('[QUEUE]',_0x3ae7('0x56'));}}})[_0x3ae7('0x57')](function(_0x2d938d){logger['error']('[QUEUE]',JSON[_0x3ae7('0x58')](_0x2d938d));});};exports['outbound']=function(_0x261b22,_0x56daba,_0x4eb971,_0x2cd134,_0x5659d3,_0x22a5ae,_0x57388f){var _0x112100,_0xc06093;_0x22a5ae['remoteUri']=intUtil[_0x3ae7('0x41')](_0x22a5ae[_0x3ae7('0xe')]);_0x22a5ae[_0x3ae7('0x42')]=intUtil[_0x3ae7('0x41')](_0x22a5ae[_0x3ae7('0x42')]);if(_0x57388f&&_0x57388f['recordingFormat']&&_0x57388f[_0x3ae7('0x59')]!==_0x3ae7('0x5a')){logger[_0x3ae7('0xa')]('[OUTBOUND]','Recording\x20is\x20enabled!');_0x56daba[_0x3ae7('0x47')]=util['format'](_0x3ae7('0x45'),_0x22a5ae[_0x3ae7('0x42')],_0x56daba['uniqueid'],md5(_0x56daba[_0x3ae7('0x46')]));}headers[_0x3ae7('0x48')]=getAuth(_0x22a5ae);return getUser(_0x22a5ae,_0x2cd134[_0x3ae7('0x49')])[_0x3ae7('0x15')](function(_0x4c9b03){_0x112100=_0x4c9b03;logger[_0x3ae7('0xa')]('The\x20User\x20ID\x20is:',_0x112100['id']);return getEndUser(_0x22a5ae,_0x56daba[_0x3ae7('0x5b')],_0x56daba[_0x3ae7('0x5c')]);})[_0x3ae7('0x15')](function(_0x476ee1){_0xc06093=_0x476ee1;logger[_0x3ae7('0xa')]('The\x20Enduser\x20ID\x20is:',_0xc06093['id']);return getTicket(_0x22a5ae,_0x112100,_0xc06093,_0x4eb971,_0x56daba);})[_0x3ae7('0x15')](function(_0x5e008c){if(_0x5e008c){logger[_0x3ae7('0xa')](_0x3ae7('0x4d'),_0x5e008c['id']);switch(_0x22a5ae[_0x3ae7('0x36')]){case _0x3ae7('0x4e'):logger[_0x3ae7('0xa')]('[OUTBOUND]',_0x3ae7('0x4f'));return request({'uri':util['format'](_0x3ae7('0x50'),_0x22a5ae['remoteUri'],_0x112100['id'],_0x5e008c['id']),'method':_0x3ae7('0xf')});case _0x3ae7('0x5d'):logger[_0x3ae7('0xa')](_0x3ae7('0x5e'),_0x3ae7('0x51'));emit(util[_0x3ae7('0xc')](_0x3ae7('0x52'),_0x2cd134[_0x3ae7('0x3e')]),_0x3ae7('0x53'),{'uri':util[_0x3ae7('0xc')](_0x3ae7('0x54'),_0x22a5ae[_0x3ae7('0xe')],_0x5e008c['id'])});break;default:logger[_0x3ae7('0x55')](_0x3ae7('0x5e'),'Zendesk\x20account\x20type\x20not\x20recognized');}}})['catch'](function(_0x486b3d){logger[_0x3ae7('0x55')](_0x3ae7('0x5e'),JSON['stringify'](_0x486b3d));});};exports[_0x3ae7('0x5f')]=function(_0x18555c,_0xe5a502,_0x4caf81,_0x24c4ec,_0x3a064f,_0x19af0b){var _0x44de89,_0x301d66;_0x19af0b[_0x3ae7('0xe')]=intUtil[_0x3ae7('0x41')](_0x19af0b[_0x3ae7('0xe')]);_0x19af0b[_0x3ae7('0x42')]=intUtil[_0x3ae7('0x41')](_0x19af0b['serverUrl']);if(_0x3a064f&&_0x3a064f[_0x3ae7('0x60')]){logger[_0x3ae7('0xa')](_0x3ae7('0x61'),_0x3ae7('0x44'));_0xe5a502[_0x3ae7('0x47')]=util[_0x3ae7('0xc')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x19af0b[_0x3ae7('0x42')],_0xe5a502[_0x3ae7('0x46')],md5(_0xe5a502[_0x3ae7('0x46')]));}else{_0xe5a502[_0x3ae7('0x47')]='';}headers[_0x3ae7('0x48')]=getAuth(_0x19af0b);return getUser(_0x19af0b)['then'](function(_0x123c27){_0x44de89=_0x123c27;logger[_0x3ae7('0xa')](_0x3ae7('0x62'),_0x44de89['id']);return getEndUser(_0x19af0b,_0xe5a502[_0x3ae7('0x4a')],_0xe5a502[_0x3ae7('0x4b')]);})[_0x3ae7('0x15')](function(_0x590cce){_0x301d66=_0x590cce;logger[_0x3ae7('0xa')](_0x3ae7('0x4c'),_0x301d66['id']);return getTicket(_0x19af0b,_0x44de89,_0x301d66,_0x4caf81,_0xe5a502);})['then'](function(_0x4fbdea){if(_0x4fbdea){logger[_0x3ae7('0xa')](_0x3ae7('0x4d'),_0x4fbdea['id']);}})[_0x3ae7('0x57')](function(_0x1529b4){logger[_0x3ae7('0x55')](_0x3ae7('0x61'),JSON[_0x3ae7('0x58')](_0x1529b4));});};
\ No newline at end of file
+var _0x3687=['POST','getString','Subjects','Descriptions','Fields','info','Ticket\x20created!','ticket','Getting\x20agent\x20with\x20email','type:user\x20role:agent\x20email:%s','then','count','find','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','%s/search.json','type:user\x20role:end-user\x20phone:%s','Enduser\x20found!','end-user','%s/users.json','Caller\x20-\x20%s','Enduser\x20created.','authType','password','%s:%s','username','token','%s/token:%s','Basic\x20%s','[HTTP]','stringify','defaults','GET','length','map','forEach','type','customField','toLowerCase','content','toString','string','idField','custom_fields','variable','variableName','customVariable','Variable','name','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','uniqueid','recordingURL','Authorization','email','The\x20User\x20ID\x20is:','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/agent/tickets/%s','error','Zendesk\x20account\x20type\x20not\x20recognized','outbound','recordingFormat','none','[OUTBOUND]','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','destcalleridnum','integrationTab','catch','abandoned','[ABANDONED]','Recording\x20is\x20enabled!','calleridname','request-promise','md5','./util','../../../../config/logger','socket.io-emitter','localhost','emit','application/json','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri'];(function(_0x1bd224,_0x4ff3cd){var _0x12f4e6=function(_0x3bb33b){while(--_0x3bb33b){_0x1bd224['push'](_0x1bd224['shift']());}};_0x12f4e6(++_0x4ff3cd);}(_0x3687,0xbc));var _0x7368=function(_0x273183,_0x1f65ee){_0x273183=_0x273183-0x0;var _0x36c481=_0x3687[_0x273183];return _0x36c481;};'use strict';var _=require('lodash');var rp=require(_0x7368('0x0'));var md5=require(_0x7368('0x1'));var util=require('util');var intUtil=require(_0x7368('0x2'));var logger=require(_0x7368('0x3'))('zendesk');var io=require(_0x7368('0x4'))({'host':_0x7368('0x5'),'port':0x18eb});function emit(_0x10aefb,_0x1cd7f7,_0x1534da){io['to'](_0x10aefb)[_0x7368('0x6')](_0x1cd7f7,_0x1534da);}var headers={'Content-Type':_0x7368('0x7'),'Accept':_0x7368('0x7')};function getTicket(_0x47ff35,_0x20fc8e,_0x447576,_0xab9de8,_0x2934fe){logger['info'](_0x7368('0x8'));return request({'uri':util[_0x7368('0x9')](_0x7368('0xa'),_0x47ff35[_0x7368('0xb')]),'method':_0x7368('0xc'),'body':{'ticket':_['merge']({'requester_id':_0x447576['id'],'submitter_id':_0x20fc8e?_0x20fc8e['id']:undefined,'assignee_id':_0x20fc8e?_0x20fc8e['id']:undefined,'tags':getTags(_0xab9de8['Tags'],'name'),'subject':intUtil[_0x7368('0xd')](_0xab9de8[_0x7368('0xe')],_0x2934fe,'\x20'),'description':intUtil[_0x7368('0xd')](_0xab9de8[_0x7368('0xf')],_0x2934fe,'\x0a'),'comment':{'public':![],'body':intUtil['getString'](_0xab9de8[_0x7368('0xf')],_0x2934fe,'\x0a')}},getCustomFields(_0xab9de8[_0x7368('0x10')],_0x2934fe))}})['then'](function(_0x56162c){logger[_0x7368('0x11')](_0x7368('0x12'));return _0x56162c[_0x7368('0x13')];});}function getUser(_0x571ccb,_0x1e8c4a){logger[_0x7368('0x11')](_0x7368('0x14'),_0x1e8c4a);return request({'uri':util[_0x7368('0x9')]('%s/search.json',_0x571ccb[_0x7368('0xb')]),'qs':{'query':util['format'](_0x7368('0x15'),_0x1e8c4a)}})[_0x7368('0x16')](function(_0x1c26db){if(_0x1c26db[_0x7368('0x17')]){logger[_0x7368('0x11')]('Agent\x20found!');return _[_0x7368('0x18')](_0x1c26db[_0x7368('0x19')],{'email':_0x1e8c4a,'role':_0x7368('0x1a')});}else{logger[_0x7368('0x11')](_0x7368('0x1b'));return request({'uri':util[_0x7368('0x9')](_0x7368('0x1c'),_0x571ccb[_0x7368('0xb')])})[_0x7368('0x16')](function(_0x4ec43f){logger[_0x7368('0x11')](_0x7368('0x1d'));return _0x4ec43f[_0x7368('0x1e')];});}});}function getEndUser(_0x73e84c,_0x5c17,_0x190b7c){logger[_0x7368('0x11')](_0x7368('0x1f'),_0x190b7c);return request({'uri':util[_0x7368('0x9')](_0x7368('0x20'),_0x73e84c[_0x7368('0xb')]),'qs':{'query':util[_0x7368('0x9')](_0x7368('0x21'),_0x190b7c)}})['then'](function(_0x41003b){if(_0x41003b['count']){logger['info'](_0x7368('0x22'));return _[_0x7368('0x18')](_0x41003b[_0x7368('0x19')],{'phone':_0x190b7c,'role':_0x7368('0x23')});}else{logger[_0x7368('0x11')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x7368('0x9')](_0x7368('0x24'),_0x73e84c['remoteUri']),'method':_0x7368('0xc'),'body':{'user':{'role':_0x7368('0x23'),'name':util[_0x7368('0x9')](_0x7368('0x25'),_0x5c17||_0x190b7c),'phone':_0x190b7c}}})['then'](function(_0x1e1201){logger[_0x7368('0x11')](_0x7368('0x26'));return _0x1e1201['user'];});}});}function getAuth(_0x4c0195){var _0x106046;if(_0x4c0195[_0x7368('0x27')]===_0x7368('0x28')){_0x106046=util['format'](_0x7368('0x29'),_0x4c0195[_0x7368('0x2a')],_0x4c0195[_0x7368('0x28')]);}else if(_0x4c0195[_0x7368('0x27')]===_0x7368('0x2b')){_0x106046=util[_0x7368('0x9')](_0x7368('0x2c'),_0x4c0195[_0x7368('0x2a')],_0x4c0195[_0x7368('0x2b')]);}return util['format'](_0x7368('0x2d'),new Buffer(_0x106046)['toString']('base64'));}function request(_0x45fa0a){logger['debug'](_0x7368('0x2e'),JSON[_0x7368('0x2f')](_0x45fa0a));return rp(_[_0x7368('0x30')](_0x45fa0a,{'method':_0x7368('0x31'),'headers':headers,'json':!![]}));}function getTags(_0x3de326,_0x5036f9){var _0x32fd10=[];if(_0x3de326&&_0x3de326[_0x7368('0x32')]>0x0){_0x32fd10=_[_0x7368('0x33')](_0x3de326,_0x5036f9);}return _0x32fd10;}function getCustomFields(_0x46d413,_0x29fd70){var _0x4b1857=[];var _0x5f0000={'custom_fields':[]};if(_0x46d413[_0x7368('0x32')]>0x0){_[_0x7368('0x34')](_0x46d413,function(_0x561ac2){if(_0x561ac2[_0x7368('0x35')]==='string'&&_0x561ac2['nameField']&&!_0x561ac2[_0x7368('0x36')]){_0x5f0000[_0x561ac2['nameField'][_0x7368('0x37')]()]=_0x561ac2[_0x7368('0x38')][_0x7368('0x39')]();}else if(_0x561ac2[_0x7368('0x35')]===_0x7368('0x3a')&&_0x561ac2[_0x7368('0x3b')]&&_0x561ac2[_0x7368('0x36')]){_0x5f0000[_0x7368('0x3c')]['push']({'id':_0x561ac2[_0x7368('0x3b')],'value':_0x561ac2[_0x7368('0x38')][_0x7368('0x39')]()});}else if(_0x561ac2['type']===_0x7368('0x3d')&&_0x561ac2[_0x7368('0x3e')]&&_0x561ac2[_0x7368('0x3b')]&&_0x561ac2['customField']){_0x29fd70[_0x561ac2['variableName']]&&_0x5f0000[_0x7368('0x3c')]['push']({'id':_0x561ac2[_0x7368('0x3b')],'value':_0x29fd70[_0x561ac2[_0x7368('0x3e')]]['toString']()});}else if(_0x561ac2[_0x7368('0x35')]===_0x7368('0x3f')&&_0x561ac2['Variable']&&_0x561ac2[_0x7368('0x40')][_0x7368('0x41')]&&_0x561ac2['idField']&&_0x561ac2['customField']){_0x29fd70[_0x561ac2['Variable'][_0x7368('0x41')][_0x7368('0x37')]()]&&_0x5f0000[_0x7368('0x3c')]['push']({'id':_0x561ac2['idField'],'value':_0x29fd70[_0x561ac2[_0x7368('0x40')][_0x7368('0x41')][_0x7368('0x37')]()][_0x7368('0x39')]()});}});}return _0x5f0000;}exports[_0x7368('0x42')]=function(_0x70c3ce,_0x11b9be,_0x460ceb,_0x28ff04,_0x4e818c,_0x1d81ea){var _0x11c872,_0x6b0be6;_0x1d81ea['remoteUri']=intUtil[_0x7368('0x43')](_0x1d81ea['remoteUri']);_0x1d81ea['serverUrl']=intUtil['stripTrailingSlash'](_0x1d81ea[_0x7368('0x44')]);if(_0x4e818c&&_0x4e818c[_0x7368('0x45')]){logger[_0x7368('0x11')](_0x7368('0x46'),'Recording\x20is\x20enabled!');_0x11b9be['recordingURL']=util[_0x7368('0x9')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x1d81ea['serverUrl'],_0x11b9be[_0x7368('0x47')],md5(_0x11b9be[_0x7368('0x47')]));}else{_0x11b9be[_0x7368('0x48')]='';}headers[_0x7368('0x49')]=getAuth(_0x1d81ea);return getUser(_0x1d81ea,_0x28ff04[_0x7368('0x4a')])[_0x7368('0x16')](function(_0x23e346){_0x11c872=_0x23e346;logger[_0x7368('0x11')](_0x7368('0x4b'),_0x11c872['id']);return getEndUser(_0x1d81ea,_0x11b9be['calleridname'],_0x11b9be[_0x7368('0x4c')]);})[_0x7368('0x16')](function(_0x561386){_0x6b0be6=_0x561386;logger[_0x7368('0x11')](_0x7368('0x4d'),_0x6b0be6['id']);return getTicket(_0x1d81ea,_0x11c872,_0x6b0be6,_0x460ceb,_0x11b9be);})[_0x7368('0x16')](function(_0x4b2354){if(_0x4b2354){logger[_0x7368('0x11')](_0x7368('0x4e'),_0x4b2354['id']);switch(_0x1d81ea[_0x7368('0x35')]){case'integrationTab':logger[_0x7368('0x11')](_0x7368('0x46'),_0x7368('0x4f'));return request({'uri':util[_0x7368('0x9')](_0x7368('0x50'),_0x1d81ea[_0x7368('0xb')],_0x11c872['id'],_0x4b2354['id']),'method':_0x7368('0xc')});case _0x7368('0x51'):logger[_0x7368('0x11')](_0x7368('0x46'),_0x7368('0x52'));emit(util[_0x7368('0x9')](_0x7368('0x53'),_0x28ff04[_0x7368('0x41')]),_0x7368('0x54'),{'uri':util[_0x7368('0x9')](_0x7368('0x55'),_0x1d81ea['remoteUri'],_0x4b2354['id'])});break;default:logger[_0x7368('0x56')](_0x7368('0x46'),_0x7368('0x57'));}}})['catch'](function(_0x1e5c45){logger['error'](_0x7368('0x46'),JSON[_0x7368('0x2f')](_0x1e5c45));});};exports[_0x7368('0x58')]=function(_0x329e55,_0x98922b,_0x4c97e9,_0x55a80d,_0x43f4ea,_0x33f9af,_0x2dcdfb){var _0x179cd2,_0x10ae4c;_0x33f9af['remoteUri']=intUtil['stripTrailingSlash'](_0x33f9af[_0x7368('0xb')]);_0x33f9af[_0x7368('0x44')]=intUtil[_0x7368('0x43')](_0x33f9af['serverUrl']);if(_0x2dcdfb&&_0x2dcdfb['recordingFormat']&&_0x2dcdfb[_0x7368('0x59')]!==_0x7368('0x5a')){logger['info'](_0x7368('0x5b'),'Recording\x20is\x20enabled!');_0x98922b['recordingURL']=util['format'](_0x7368('0x5c'),_0x33f9af['serverUrl'],_0x98922b[_0x7368('0x47')],md5(_0x98922b[_0x7368('0x47')]));}headers[_0x7368('0x49')]=getAuth(_0x33f9af);return getUser(_0x33f9af,_0x55a80d[_0x7368('0x4a')])[_0x7368('0x16')](function(_0x43c7bd){_0x179cd2=_0x43c7bd;logger[_0x7368('0x11')](_0x7368('0x4b'),_0x179cd2['id']);return getEndUser(_0x33f9af,_0x98922b['destcalleridname'],_0x98922b[_0x7368('0x5d')]);})[_0x7368('0x16')](function(_0x3ab9fe){_0x10ae4c=_0x3ab9fe;logger[_0x7368('0x11')](_0x7368('0x4d'),_0x10ae4c['id']);return getTicket(_0x33f9af,_0x179cd2,_0x10ae4c,_0x4c97e9,_0x98922b);})[_0x7368('0x16')](function(_0xb3f1fe){if(_0xb3f1fe){logger[_0x7368('0x11')](_0x7368('0x4e'),_0xb3f1fe['id']);switch(_0x33f9af[_0x7368('0x35')]){case _0x7368('0x5e'):logger[_0x7368('0x11')](_0x7368('0x5b'),_0x7368('0x4f'));return request({'uri':util['format'](_0x7368('0x50'),_0x33f9af[_0x7368('0xb')],_0x179cd2['id'],_0xb3f1fe['id']),'method':_0x7368('0xc')});case _0x7368('0x51'):logger['info'](_0x7368('0x5b'),_0x7368('0x52'));emit(util[_0x7368('0x9')](_0x7368('0x53'),_0x55a80d[_0x7368('0x41')]),_0x7368('0x54'),{'uri':util[_0x7368('0x9')](_0x7368('0x55'),_0x33f9af[_0x7368('0xb')],_0xb3f1fe['id'])});break;default:logger[_0x7368('0x56')]('[OUTBOUND]',_0x7368('0x57'));}}})[_0x7368('0x5f')](function(_0x5b0e66){logger[_0x7368('0x56')](_0x7368('0x5b'),JSON[_0x7368('0x2f')](_0x5b0e66));});};exports[_0x7368('0x60')]=function(_0x317489,_0x943e1a,_0xc2755b,_0x3ea132,_0x4c144a,_0x17302a){var _0x574b9b,_0x1f6b0a;_0x17302a[_0x7368('0xb')]=intUtil[_0x7368('0x43')](_0x17302a[_0x7368('0xb')]);_0x17302a[_0x7368('0x44')]=intUtil[_0x7368('0x43')](_0x17302a['serverUrl']);if(_0x4c144a&&_0x4c144a[_0x7368('0x45')]){logger[_0x7368('0x11')](_0x7368('0x61'),_0x7368('0x62'));_0x943e1a[_0x7368('0x48')]=util['format'](_0x7368('0x5c'),_0x17302a['serverUrl'],_0x943e1a[_0x7368('0x47')],md5(_0x943e1a[_0x7368('0x47')]));}else{_0x943e1a[_0x7368('0x48')]='';}headers[_0x7368('0x49')]=getAuth(_0x17302a);return getUser(_0x17302a)[_0x7368('0x16')](function(_0x3e449d){_0x574b9b=_0x3e449d;logger['info'](_0x7368('0x4b'),_0x574b9b['id']);return getEndUser(_0x17302a,_0x943e1a[_0x7368('0x63')],_0x943e1a[_0x7368('0x4c')]);})['then'](function(_0x40f863){_0x1f6b0a=_0x40f863;logger[_0x7368('0x11')](_0x7368('0x4d'),_0x1f6b0a['id']);return getTicket(_0x17302a,_0x574b9b,_0x1f6b0a,_0xc2755b,_0x943e1a);})[_0x7368('0x16')](function(_0x548b7f){if(_0x548b7f){logger['info']('The\x20Ticket\x20ID\x20is:',_0x548b7f['id']);}})[_0x7368('0x5f')](function(_0x411b1f){logger[_0x7368('0x56')](_0x7368('0x61'),JSON['stringify'](_0x411b1f));});};
\ No newline at end of file
index b26064f..99ba253 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe193=['Error\x20on\x20Lead\x20creation:\x20','Error\x20on\x20Lead\x20retrieve:\x20','debug','[HTTP]','forEach','idField','toString','variable','variableName','type','customVariable','Variable','name','toLowerCase','split','queue','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','serverUrl','uniqueid','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Inbound','The\x20Call\x20ID\x20is:','trigger:browser:url','https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s','catch','error','outbound','recordingFormat','[OUTBOUND]','destcalleridnum','Outbound','Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','[ABANDONED]','lodash','md5','entities','moment','zoho','localhost','emit','application/json','info','merge','inbound','starttime','agentcalledAt','format','Subjects','getString','lastevent','called','Called','connect','Call\x20Result','Answered','Rejected','abandoned','talktime','utc','answertime','endtime','Call\x20Duration','YYYY-MM-DD\x20HH:mm:ss','diff','mm:ss','CONTACTID','LEADID','Leads','SEID','hasOwnProperty','<FL\x20val=\x22%s\x22>%s</FL>','encodeXML','</row></Calls>','POST','https://crm.%s/crm/private/xml/Calls/insertRecords','host','authToken','crmapi','then','parse','toJson','response','result','recorddetail','Call\x20created!','Error\x20on\x20call\x20creation:\x20','stringify','Getting\x20agent\x20with\x20email','https://crm.%s/crm/private/json/Users/getUsers','users','user','find','Standard','Agent\x20found!','Using\x20the\x20admin\x20account!','The\x20failing\x20result\x20is','Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20','Searching\x20enduser\x20with\x20phone','GET','https://crm.%s/crm/private/json/Contacts/searchRecords','((Phone:%s))','Contacts','row','length','val','content','Enduser\x20found\x20in\x20Leads!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','<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'];(function(_0x4b07ac,_0x4d3e0c){var _0x6fde54=function(_0x3e08d3){while(--_0x3e08d3){_0x4b07ac['push'](_0x4b07ac['shift']());}};_0x6fde54(++_0x4d3e0c);}(_0xe193,0x11a));var _0x3e19=function(_0x1a70e5,_0x186038){_0x1a70e5=_0x1a70e5-0x0;var _0x380f84=_0xe193[_0x1a70e5];return _0x380f84;};'use strict';var _=require(_0x3e19('0x0'));var rp=require('request-promise');var md5=require(_0x3e19('0x1'));var util=require('util');var intUtil=require('./util');var parser=require('xml2json');var entities=require(_0x3e19('0x2'));var moment=require(_0x3e19('0x3'));var logger=require('../../../../config/logger')(_0x3e19('0x4'));var io=require('socket.io-emitter')({'host':_0x3e19('0x5'),'port':0x18eb});function emit(_0xec4f04,_0x49ffd5,_0x32c1d3){io['to'](_0xec4f04)[_0x3e19('0x6')](_0x49ffd5,_0x32c1d3);}var headers={'Content-Type':_0x3e19('0x7'),'Accept':_0x3e19('0x7')};function getCall(_0x35cf5a,_0x379d56,_0x34dfa7,_0x52aff6,_0x3a6a0c,_0x4b4b83){logger[_0x3e19('0x8')]('Creating\x20new\x20call...');var _0x533070=_[_0x3e19('0x9')]({'SMOWNERID':_0x379d56['id'],'Call Type':_0x4b4b83||_0x3e19('0xa'),'Call Start Time':(_0x4b4b83==='outbound'?_0x3a6a0c[_0x3e19('0xb')]:_0x3a6a0c[_0x3e19('0xc')])||moment()[_0x3e19('0xd')]('YYYY-MM-DD\x20HH:mm:ss'),'Subject':intUtil['getString'](_0x52aff6[_0x3e19('0xe')],_0x3a6a0c,'\x20'),'Description':intUtil[_0x3e19('0xf')](_0x52aff6['Descriptions'],_0x3a6a0c,'\x0a')},getCustomFields(_0x52aff6['Fields'],_0x3a6a0c));switch(_0x3a6a0c[_0x3e19('0x10')]){case _0x3e19('0x11'):_0x533070['Call\x20Result']=_0x3e19('0x12');break;case'complete':case _0x3e19('0x13'):_0x533070[_0x3e19('0x14')]=_0x3e19('0x15');break;case'rejected':_0x533070[_0x3e19('0x14')]=_0x3e19('0x16');break;case _0x3e19('0x17'):_0x533070[_0x3e19('0x14')]='Abandoned';break;default:}if(_0x3a6a0c[_0x3e19('0x18')]){_0x533070['Call\x20Duration']=moment[_0x3e19('0x19')](parseInt(_0x3a6a0c[_0x3e19('0x18')])*0x3e8)[_0x3e19('0xd')]('mm:ss');}else if(_0x3a6a0c[_0x3e19('0x1a')]&&_0x3a6a0c[_0x3e19('0x1b')]){_0x533070[_0x3e19('0x1c')]=moment[_0x3e19('0x19')](moment(_0x3a6a0c[_0x3e19('0x1b')],_0x3e19('0x1d'))[_0x3e19('0x1e')](moment(_0x3a6a0c[_0x3e19('0xb')],_0x3e19('0x1d'))))[_0x3e19('0xd')](_0x3e19('0x1f'));}if(_0x34dfa7[_0x3e19('0x20')]){_0x533070[_0x3e19('0x20')]=_0x34dfa7[_0x3e19('0x20')];}else if(_0x34dfa7[_0x3e19('0x21')]){_0x533070['SEMODULE']=_0x3e19('0x22');_0x533070[_0x3e19('0x23')]=_0x34dfa7[_0x3e19('0x21')];}var _0x57b659='<Calls><row\x20no=\x221\x22>';for(var _0x2669cc in _0x533070){if(_0x533070[_0x3e19('0x24')](_0x2669cc)){_0x57b659+=util[_0x3e19('0xd')](_0x3e19('0x25'),entities[_0x3e19('0x26')](_0x2669cc),entities[_0x3e19('0x26')](_0x533070[_0x2669cc]));}}_0x57b659+=_0x3e19('0x27');return request({'method':_0x3e19('0x28'),'uri':util['format'](_0x3e19('0x29'),_0x35cf5a[_0x3e19('0x2a')]),'qs':{'authtoken':_0x35cf5a[_0x3e19('0x2b')],'scope':_0x3e19('0x2c'),'xmlData':_0x57b659},'json':!![]})[_0x3e19('0x2d')](function(_0x5e43d7){_0x5e43d7=JSON[_0x3e19('0x2e')](parser[_0x3e19('0x2f')](_0x5e43d7));if(_0x5e43d7[_0x3e19('0x30')]){if(_0x5e43d7['response'][_0x3e19('0x31')]&&_0x5e43d7[_0x3e19('0x30')]['result'][_0x3e19('0x32')]){logger['info'](_0x3e19('0x33'));return{'id':_0x5e43d7['response']['result'][_0x3e19('0x32')]['FL'][0x0]['$t']};}}throw new Error(_0x3e19('0x34')+JSON[_0x3e19('0x35')](_0x5e43d7));});}function getUser(_0x3a4bd8,_0x4810f3){_0x4810f3&&logger[_0x3e19('0x8')](_0x3e19('0x36'),_0x4810f3);return request({'method':'GET','uri':util[_0x3e19('0xd')](_0x3e19('0x37'),_0x3a4bd8[_0x3e19('0x2a')]),'qs':{'type':'AllUsers','authtoken':_0x3a4bd8['authToken'],'scope':_0x3e19('0x2c')},'json':!![]})[_0x3e19('0x2d')](function(_0x1bbbbf){if(_0x1bbbbf[_0x3e19('0x38')]&&_0x1bbbbf[_0x3e19('0x38')][_0x3e19('0x39')]){var _0x582c60;if(_0x4810f3){_0x582c60=_[_0x3e19('0x3a')](_0x1bbbbf[_0x3e19('0x38')][_0x3e19('0x39')],{'email':_0x4810f3,'profile':_0x3e19('0x3b')});}if(_0x582c60){logger[_0x3e19('0x8')](_0x3e19('0x3c'));}else{logger[_0x3e19('0x8')](_0x3e19('0x3d'));_0x582c60=_[_0x3e19('0x3a')](_0x1bbbbf[_0x3e19('0x38')][_0x3e19('0x39')],{'profile':'Administrator'});}return _0x582c60;}else{logger['error'](_0x3e19('0x3e'),JSON[_0x3e19('0x35')](_0x1bbbbf));throw new Error(_0x3e19('0x3f')+JSON[_0x3e19('0x35')](_0x1bbbbf));}});}function getEndUser(_0x22ac9f,_0x1c43de,_0x5201b9){logger[_0x3e19('0x8')](_0x3e19('0x40'),_0x5201b9);return request({'method':_0x3e19('0x41'),'uri':util['format'](_0x3e19('0x42'),_0x22ac9f[_0x3e19('0x2a')]),'qs':{'authtoken':_0x22ac9f[_0x3e19('0x2b')],'scope':_0x3e19('0x2c'),'criteria':util[_0x3e19('0xd')](_0x3e19('0x43'),_0x5201b9)},'json':!![]})[_0x3e19('0x2d')](function(_0x1195e3){if(_0x1195e3[_0x3e19('0x30')]&&_0x1195e3[_0x3e19('0x30')][_0x3e19('0x31')]){logger[_0x3e19('0x8')]('Enduser\x20found\x20in\x20Contacts!');var _0x3a454a={};var _0x424419=_0x1195e3[_0x3e19('0x30')]['result'][_0x3e19('0x44')][_0x3e19('0x45')]['no']?_0x1195e3[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x44')][_0x3e19('0x45')]['FL']:_0x1195e3[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x44')][_0x3e19('0x45')][0x0]['FL'];for(var _0x4e62ff=0x0,_0x147085=_0x424419[_0x3e19('0x46')];_0x4e62ff<_0x147085;_0x4e62ff++){_0x3a454a[_0x424419[_0x4e62ff][_0x3e19('0x47')]]=_0x424419[_0x4e62ff][_0x3e19('0x48')];}return _0x3a454a;}else{return request({'method':_0x3e19('0x41'),'uri':util[_0x3e19('0xd')]('https://crm.%s/crm/private/json/Leads/searchRecords',_0x22ac9f['host']),'qs':{'authtoken':_0x22ac9f[_0x3e19('0x2b')],'scope':_0x3e19('0x2c'),'criteria':util[_0x3e19('0xd')](_0x3e19('0x43'),_0x5201b9)},'json':!![]})[_0x3e19('0x2d')](function(_0x5288f7){if(_0x5288f7[_0x3e19('0x30')]&&_0x5288f7['response'][_0x3e19('0x31')]){logger['info'](_0x3e19('0x49'));var _0x3502c7={};var _0x4f0137=_0x5288f7[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x22')]['row']['no']?_0x5288f7['response']['result'][_0x3e19('0x22')]['row']['FL']:_0x5288f7[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x22')][_0x3e19('0x45')][0x0]['FL'];for(var _0x135930=0x0,_0x31de69=_0x4f0137['length'];_0x135930<_0x31de69;_0x135930++){_0x3502c7[_0x4f0137[_0x135930][_0x3e19('0x47')]]=_0x4f0137[_0x135930]['content'];}return _0x3502c7;}else{logger[_0x3e19('0x8')](_0x3e19('0x4a'));_0x1c43de=getName(_0x1c43de);return request({'method':'POST','uri':util['format']('https://crm.%s/crm/private/xml/Leads/insertRecords',_0x22ac9f[_0x3e19('0x2a')]),'qs':{'authtoken':_0x22ac9f[_0x3e19('0x2b')],'scope':_0x3e19('0x2c'),'xmlData':util[_0x3e19('0xd')](_0x3e19('0x4b'),entities[_0x3e19('0x26')](_0x1c43de[0x0]),entities[_0x3e19('0x26')](_0x1c43de[0x1]),_0x5201b9)},'json':!![]})['then'](function(_0x3106a6){_0x3106a6=JSON['parse'](parser[_0x3e19('0x2f')](_0x3106a6));if(_0x3106a6['response']){if(_0x3106a6[_0x3e19('0x30')][_0x3e19('0x31')]&&_0x3106a6[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x32')]){logger[_0x3e19('0x8')](_0x3e19('0x4c'));return request({'method':_0x3e19('0x41'),'uri':util['format'](_0x3e19('0x4d'),_0x22ac9f['host']),'qs':{'authtoken':_0x22ac9f[_0x3e19('0x2b')],'scope':_0x3e19('0x2c'),'id':_0x3106a6[_0x3e19('0x30')][_0x3e19('0x31')]['recorddetail']['FL'][0x0]['$t']},'json':!![]});}}throw new Error(_0x3e19('0x4e')+JSON[_0x3e19('0x35')](_0x3106a6));})[_0x3e19('0x2d')](function(_0x51b2b0){if(_0x51b2b0[_0x3e19('0x30')]){if(_0x51b2b0[_0x3e19('0x30')][_0x3e19('0x31')]){var _0x667cf7={};for(var _0x56b6db=0x0,_0x3c0b4b=_0x51b2b0[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x22')][_0x3e19('0x45')]['FL'][_0x3e19('0x46')];_0x56b6db<_0x3c0b4b;_0x56b6db++){_0x667cf7[_0x51b2b0[_0x3e19('0x30')]['result'][_0x3e19('0x22')][_0x3e19('0x45')]['FL'][_0x56b6db][_0x3e19('0x47')]]=_0x51b2b0[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x22')][_0x3e19('0x45')]['FL'][_0x56b6db][_0x3e19('0x48')];}return _0x667cf7;}}throw new Error(_0x3e19('0x4f')+JSON[_0x3e19('0x35')](_0x51b2b0));});}});}});}function request(_0x5ccd93){logger[_0x3e19('0x50')](_0x3e19('0x51'),JSON['stringify'](_0x5ccd93));return rp(_0x5ccd93);}function getCustomFields(_0x5f2bf7,_0x33ac94){var _0x1d4fe7={};if(_0x5f2bf7['length']>0x0){_[_0x3e19('0x52')](_0x5f2bf7,function(_0x30daa2){if(_0x30daa2['type']==='string'&&_0x30daa2[_0x3e19('0x53')]){_0x1d4fe7[_0x30daa2[_0x3e19('0x53')]]=_0x30daa2[_0x3e19('0x48')][_0x3e19('0x54')]();}else if(_0x30daa2['type']===_0x3e19('0x55')&&_0x30daa2[_0x3e19('0x56')]&&_0x30daa2[_0x3e19('0x53')]&&_0x33ac94[_0x30daa2['variableName']]){_0x1d4fe7[_0x30daa2['idField']]=_0x33ac94[_0x30daa2['variableName']][_0x3e19('0x54')]();}else if(_0x30daa2[_0x3e19('0x57')]===_0x3e19('0x58')&&_0x30daa2[_0x3e19('0x59')]&&_0x30daa2[_0x3e19('0x59')][_0x3e19('0x5a')]&&_0x30daa2['idField']&&_0x33ac94[_0x30daa2['Variable'][_0x3e19('0x5a')][_0x3e19('0x5b')]()]){_0x1d4fe7[_0x30daa2[_0x3e19('0x53')]]=_0x33ac94[_0x30daa2[_0x3e19('0x59')]['name'][_0x3e19('0x5b')]()][_0x3e19('0x54')]();}});}return _0x1d4fe7;}function getName(_0xf6af65){if(_0xf6af65['indexOf']('\x20')>0x0){var _0x4efa74=_0xf6af65[_0x3e19('0x5c')](/ (.+)/);if(_0x4efa74[0x1]){return _0x4efa74;}}return[_0xf6af65,_0xf6af65];}exports[_0x3e19('0x5d')]=function(_0xa95757,_0x708409,_0x285071,_0x180cbe,_0x522dd2,_0xaaf1c7){var _0x189ae9,_0x5845b0;if(_0x522dd2&&_0x522dd2[_0x3e19('0x5e')]){logger[_0x3e19('0x8')](_0x3e19('0x5f'),_0x3e19('0x60'));_0x708409[_0x3e19('0x61')]=util['format'](_0x3e19('0x62'),_0xaaf1c7[_0x3e19('0x63')],_0x708409[_0x3e19('0x64')],md5(_0x708409[_0x3e19('0x64')]));}else{_0x708409[_0x3e19('0x61')]='';}return getUser(_0xaaf1c7,_0x180cbe[_0x3e19('0x65')])[_0x3e19('0x2d')](function(_0x2c8885){_0x189ae9=_0x2c8885;logger[_0x3e19('0x8')](_0x3e19('0x66'),_0x189ae9['id']);return getEndUser(_0xaaf1c7,_0x708409[_0x3e19('0x67')],_0x708409[_0x3e19('0x68')]);})[_0x3e19('0x2d')](function(_0xb7718){_0x5845b0=_0xb7718;logger[_0x3e19('0x8')](_0x3e19('0x69'),_0x5845b0[_0x3e19('0x20')]||_0x5845b0[_0x3e19('0x21')]);return getCall(_0xaaf1c7,_0x189ae9,_0x5845b0,_0x285071,_0x708409,_0x3e19('0x6a'));})['then'](function(_0x56dfc3){if(_0x56dfc3){logger[_0x3e19('0x8')](_0x3e19('0x6b'),_0x56dfc3['id']);logger['info'](_0x3e19('0x5f'),'Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x3e19('0xd')]('user:%s',_0x180cbe[_0x3e19('0x5a')]),_0x3e19('0x6c'),{'uri':util['format'](_0x3e19('0x6d'),_0xaaf1c7[_0x3e19('0x2a')],_0x56dfc3['id'])});}})[_0x3e19('0x6e')](function(_0x4a5a0a){logger[_0x3e19('0x6f')](_0x3e19('0x5f'),JSON[_0x3e19('0x35')](_0x4a5a0a));});};exports[_0x3e19('0x70')]=function(_0x4dd0db,_0x5ac81d,_0x2c54d5,_0x50d0dd,_0x5c0ced,_0x4cf981,_0x115967){var _0x1a9904,_0x508133;if(_0x115967&&_0x115967['recordingFormat']&&_0x115967[_0x3e19('0x71')]!=='none'){logger['info'](_0x3e19('0x72'),'Recording\x20is\x20enabled!');_0x5ac81d[_0x3e19('0x61')]=util[_0x3e19('0xd')](_0x3e19('0x62'),_0x4cf981[_0x3e19('0x63')],_0x5ac81d[_0x3e19('0x64')],md5(_0x5ac81d[_0x3e19('0x64')]));}return getUser(_0x4cf981,_0x50d0dd['email'])['then'](function(_0x4af1fb){_0x1a9904=_0x4af1fb;logger[_0x3e19('0x8')]('The\x20User\x20ID\x20is:',_0x1a9904['id']);return getEndUser(_0x4cf981,_0x5ac81d['destcalleridname'],_0x5ac81d[_0x3e19('0x73')]);})[_0x3e19('0x2d')](function(_0x24761b){_0x508133=_0x24761b;logger[_0x3e19('0x8')](_0x3e19('0x69'),_0x508133[_0x3e19('0x20')]||_0x508133['LEADID']);return getCall(_0x4cf981,_0x1a9904,_0x508133,_0x2c54d5,_0x5ac81d,_0x3e19('0x74'));})[_0x3e19('0x2d')](function(_0x41c51c){if(_0x41c51c){logger[_0x3e19('0x8')](_0x3e19('0x6b'),_0x41c51c['id']);logger[_0x3e19('0x8')](_0x3e19('0x72'),_0x3e19('0x75'));emit(util[_0x3e19('0xd')](_0x3e19('0x76'),_0x50d0dd['name']),_0x3e19('0x6c'),{'uri':util[_0x3e19('0xd')]('https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s',_0x4cf981[_0x3e19('0x2a')],_0x41c51c['id'])});}})[_0x3e19('0x6e')](function(_0xd06ae6){logger[_0x3e19('0x6f')](_0x3e19('0x72'),JSON[_0x3e19('0x35')](_0xd06ae6));});};exports[_0x3e19('0x17')]=function(_0x4dd34b,_0x1374c3,_0x13486b,_0xbeea52,_0xbef71a,_0x4a2890){var _0x35af8a,_0x3f58c5;if(_0xbef71a&&_0xbef71a[_0x3e19('0x5e')]){logger[_0x3e19('0x8')](_0x3e19('0x77'),_0x3e19('0x60'));_0x1374c3[_0x3e19('0x61')]=util['format'](_0x3e19('0x62'),_0x4a2890[_0x3e19('0x63')],_0x1374c3[_0x3e19('0x64')],md5(_0x1374c3['uniqueid']));}else{_0x1374c3[_0x3e19('0x61')]='';}return getUser(_0x4a2890)['then'](function(_0x563bd7){_0x35af8a=_0x563bd7;logger[_0x3e19('0x8')](_0x3e19('0x66'),_0x35af8a['id']);return getEndUser(_0x4a2890,_0x1374c3[_0x3e19('0x67')],_0x1374c3[_0x3e19('0x68')]);})[_0x3e19('0x2d')](function(_0x5b88aa){_0x3f58c5=_0x5b88aa;logger[_0x3e19('0x8')](_0x3e19('0x69'),_0x3f58c5[_0x3e19('0x20')]||_0x3f58c5[_0x3e19('0x21')]);return getCall(_0x4a2890,_0x35af8a,_0x3f58c5,_0x13486b,_0x1374c3,_0x3e19('0x6a'));})[_0x3e19('0x2d')](function(_0x2b22ca){if(_0x2b22ca){logger[_0x3e19('0x8')](_0x3e19('0x6b'),_0x2b22ca['id']);}})[_0x3e19('0x6e')](function(_0x3f7bd5){logger[_0x3e19('0x6f')]('[ABANDONED]',JSON[_0x3e19('0x35')](_0x3f7bd5));});};
\ No newline at end of file
+var _0x76e9=['toString','variable','variableName','customVariable','Variable','name','toLowerCase','indexOf','split','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','serverUrl','uniqueid','email','The\x20User\x20ID\x20is:','calleridname','The\x20Enduser\x20ID\x20is:','Inbound','Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s','outbound','recordingFormat','destcalleridname','destcalleridnum','Outbound','The\x20Call\x20ID\x20is:','[OUTBOUND]','trigger:browser:url','catch','calleridnum','[ABANDONED]','lodash','request-promise','md5','./util','xml2json','zoho','socket.io-emitter','localhost','emit','application/json','info','Creating\x20new\x20call...','starttime','agentcalledAt','format','Subjects','getString','Fields','lastevent','called','Call\x20Result','Called','complete','connect','Answered','rejected','Rejected','abandoned','talktime','Call\x20Duration','utc','mm:ss','answertime','endtime','YYYY-MM-DD\x20HH:mm:ss','CONTACTID','LEADID','SEMODULE','Leads','<Calls><row\x20no=\x221\x22>','POST','https://crm.%s/crm/private/xml/Calls/insertRecords','host','authToken','crmapi','then','parse','toJson','response','result','Call\x20created!','recorddetail','Error\x20on\x20call\x20creation:\x20','https://crm.%s/crm/private/json/Users/getUsers','AllUsers','users','user','find','Standard','Agent\x20found!','error','The\x20failing\x20result\x20is','stringify','Searching\x20enduser\x20with\x20phone','https://crm.%s/crm/private/json/Contacts/searchRecords','((Phone:%s))','Enduser\x20found\x20in\x20Contacts!','Contacts','row','length','content','GET','https://crm.%s/crm/private/json/Leads/searchRecords','Enduser\x20found\x20in\x20Leads!','val','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','encodeXML','Enduser\x20created.','https://crm.%s/crm/private/json/Leads/getRecordById','Error\x20on\x20Lead\x20retrieve:\x20','debug','forEach','type','idField'];(function(_0x43700a,_0x33b280){var _0x3c388c=function(_0x3152c5){while(--_0x3152c5){_0x43700a['push'](_0x43700a['shift']());}};_0x3c388c(++_0x33b280);}(_0x76e9,0x9a));var _0x976e=function(_0x2e5065,_0x3990ef){_0x2e5065=_0x2e5065-0x0;var _0x232e91=_0x76e9[_0x2e5065];return _0x232e91;};'use strict';var _=require(_0x976e('0x0'));var rp=require(_0x976e('0x1'));var md5=require(_0x976e('0x2'));var util=require('util');var intUtil=require(_0x976e('0x3'));var parser=require(_0x976e('0x4'));var entities=require('entities');var moment=require('moment');var logger=require('../../../../config/logger')(_0x976e('0x5'));var io=require(_0x976e('0x6'))({'host':_0x976e('0x7'),'port':0x18eb});function emit(_0x9ed9df,_0x1c3264,_0x3fb85c){io['to'](_0x9ed9df)[_0x976e('0x8')](_0x1c3264,_0x3fb85c);}var headers={'Content-Type':_0x976e('0x9'),'Accept':'application/json'};function getCall(_0x200508,_0x31b483,_0x4a97a4,_0x34585a,_0x48f930,_0x281923){logger[_0x976e('0xa')](_0x976e('0xb'));var _0x180316=_['merge']({'SMOWNERID':_0x31b483['id'],'Call Type':_0x281923||'inbound','Call Start Time':(_0x281923==='outbound'?_0x48f930[_0x976e('0xc')]:_0x48f930[_0x976e('0xd')])||moment()[_0x976e('0xe')]('YYYY-MM-DD\x20HH:mm:ss'),'Subject':intUtil['getString'](_0x34585a[_0x976e('0xf')],_0x48f930,'\x20'),'Description':intUtil[_0x976e('0x10')](_0x34585a['Descriptions'],_0x48f930,'\x0a')},getCustomFields(_0x34585a[_0x976e('0x11')],_0x48f930));switch(_0x48f930[_0x976e('0x12')]){case _0x976e('0x13'):_0x180316[_0x976e('0x14')]=_0x976e('0x15');break;case _0x976e('0x16'):case _0x976e('0x17'):_0x180316[_0x976e('0x14')]=_0x976e('0x18');break;case _0x976e('0x19'):_0x180316[_0x976e('0x14')]=_0x976e('0x1a');break;case _0x976e('0x1b'):_0x180316[_0x976e('0x14')]='Abandoned';break;default:}if(_0x48f930[_0x976e('0x1c')]){_0x180316[_0x976e('0x1d')]=moment[_0x976e('0x1e')](parseInt(_0x48f930['talktime'])*0x3e8)['format'](_0x976e('0x1f'));}else if(_0x48f930[_0x976e('0x20')]&&_0x48f930[_0x976e('0x21')]){_0x180316[_0x976e('0x1d')]=moment[_0x976e('0x1e')](moment(_0x48f930[_0x976e('0x21')],_0x976e('0x22'))['diff'](moment(_0x48f930[_0x976e('0xc')],_0x976e('0x22'))))[_0x976e('0xe')](_0x976e('0x1f'));}if(_0x4a97a4[_0x976e('0x23')]){_0x180316[_0x976e('0x23')]=_0x4a97a4[_0x976e('0x23')];}else if(_0x4a97a4[_0x976e('0x24')]){_0x180316[_0x976e('0x25')]=_0x976e('0x26');_0x180316['SEID']=_0x4a97a4[_0x976e('0x24')];}var _0x4a91bc=_0x976e('0x27');for(var _0x58d483 in _0x180316){if(_0x180316['hasOwnProperty'](_0x58d483)){_0x4a91bc+=util[_0x976e('0xe')]('<FL\x20val=\x22%s\x22>%s</FL>',entities['encodeXML'](_0x58d483),entities['encodeXML'](_0x180316[_0x58d483]));}}_0x4a91bc+='</row></Calls>';return request({'method':_0x976e('0x28'),'uri':util[_0x976e('0xe')](_0x976e('0x29'),_0x200508[_0x976e('0x2a')]),'qs':{'authtoken':_0x200508[_0x976e('0x2b')],'scope':_0x976e('0x2c'),'xmlData':_0x4a91bc},'json':!![]})[_0x976e('0x2d')](function(_0x2c3808){_0x2c3808=JSON[_0x976e('0x2e')](parser[_0x976e('0x2f')](_0x2c3808));if(_0x2c3808[_0x976e('0x30')]){if(_0x2c3808['response'][_0x976e('0x31')]&&_0x2c3808[_0x976e('0x30')][_0x976e('0x31')]['recorddetail']){logger['info'](_0x976e('0x32'));return{'id':_0x2c3808[_0x976e('0x30')][_0x976e('0x31')][_0x976e('0x33')]['FL'][0x0]['$t']};}}throw new Error(_0x976e('0x34')+JSON['stringify'](_0x2c3808));});}function getUser(_0x8be7e7,_0x5ea24d){_0x5ea24d&&logger['info']('Getting\x20agent\x20with\x20email',_0x5ea24d);return request({'method':'GET','uri':util[_0x976e('0xe')](_0x976e('0x35'),_0x8be7e7[_0x976e('0x2a')]),'qs':{'type':_0x976e('0x36'),'authtoken':_0x8be7e7['authToken'],'scope':_0x976e('0x2c')},'json':!![]})[_0x976e('0x2d')](function(_0x2d748f){if(_0x2d748f[_0x976e('0x37')]&&_0x2d748f[_0x976e('0x37')][_0x976e('0x38')]){var _0x57b6ca;if(_0x5ea24d){_0x57b6ca=_[_0x976e('0x39')](_0x2d748f[_0x976e('0x37')][_0x976e('0x38')],{'email':_0x5ea24d,'profile':_0x976e('0x3a')});}if(_0x57b6ca){logger['info'](_0x976e('0x3b'));}else{logger[_0x976e('0xa')]('Using\x20the\x20admin\x20account!');_0x57b6ca=_[_0x976e('0x39')](_0x2d748f[_0x976e('0x37')][_0x976e('0x38')],{'profile':'Administrator'});}return _0x57b6ca;}else{logger[_0x976e('0x3c')](_0x976e('0x3d'),JSON[_0x976e('0x3e')](_0x2d748f));throw new Error('Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20'+JSON[_0x976e('0x3e')](_0x2d748f));}});}function getEndUser(_0x390305,_0xedf78,_0x59da56){logger[_0x976e('0xa')](_0x976e('0x3f'),_0x59da56);return request({'method':'GET','uri':util[_0x976e('0xe')](_0x976e('0x40'),_0x390305['host']),'qs':{'authtoken':_0x390305[_0x976e('0x2b')],'scope':_0x976e('0x2c'),'criteria':util[_0x976e('0xe')](_0x976e('0x41'),_0x59da56)},'json':!![]})[_0x976e('0x2d')](function(_0x25cfa6){if(_0x25cfa6[_0x976e('0x30')]&&_0x25cfa6[_0x976e('0x30')][_0x976e('0x31')]){logger[_0x976e('0xa')](_0x976e('0x42'));var _0x34337b={};var _0x12ea7e=_0x25cfa6[_0x976e('0x30')]['result'][_0x976e('0x43')][_0x976e('0x44')]['no']?_0x25cfa6[_0x976e('0x30')]['result'][_0x976e('0x43')][_0x976e('0x44')]['FL']:_0x25cfa6[_0x976e('0x30')][_0x976e('0x31')][_0x976e('0x43')][_0x976e('0x44')][0x0]['FL'];for(var _0x2c02e0=0x0,_0x25c79d=_0x12ea7e[_0x976e('0x45')];_0x2c02e0<_0x25c79d;_0x2c02e0++){_0x34337b[_0x12ea7e[_0x2c02e0]['val']]=_0x12ea7e[_0x2c02e0][_0x976e('0x46')];}return _0x34337b;}else{return request({'method':_0x976e('0x47'),'uri':util['format'](_0x976e('0x48'),_0x390305[_0x976e('0x2a')]),'qs':{'authtoken':_0x390305[_0x976e('0x2b')],'scope':'crmapi','criteria':util[_0x976e('0xe')]('((Phone:%s))',_0x59da56)},'json':!![]})['then'](function(_0x3d68f7){if(_0x3d68f7[_0x976e('0x30')]&&_0x3d68f7[_0x976e('0x30')][_0x976e('0x31')]){logger['info'](_0x976e('0x49'));var _0x4f5d31={};var _0x17f247=_0x3d68f7[_0x976e('0x30')][_0x976e('0x31')][_0x976e('0x26')][_0x976e('0x44')]['no']?_0x3d68f7[_0x976e('0x30')][_0x976e('0x31')][_0x976e('0x26')][_0x976e('0x44')]['FL']:_0x3d68f7['response']['result'][_0x976e('0x26')][_0x976e('0x44')][0x0]['FL'];for(var _0x4207ae=0x0,_0xca56cd=_0x17f247[_0x976e('0x45')];_0x4207ae<_0xca56cd;_0x4207ae++){_0x4f5d31[_0x17f247[_0x4207ae][_0x976e('0x4a')]]=_0x17f247[_0x4207ae]['content'];}return _0x4f5d31;}else{logger[_0x976e('0xa')](_0x976e('0x4b'));_0xedf78=getName(_0xedf78);return request({'method':_0x976e('0x28'),'uri':util[_0x976e('0xe')]('https://crm.%s/crm/private/xml/Leads/insertRecords',_0x390305[_0x976e('0x2a')]),'qs':{'authtoken':_0x390305[_0x976e('0x2b')],'scope':_0x976e('0x2c'),'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[_0x976e('0x4c')](_0xedf78[0x0]),entities[_0x976e('0x4c')](_0xedf78[0x1]),_0x59da56)},'json':!![]})['then'](function(_0x2c7806){_0x2c7806=JSON[_0x976e('0x2e')](parser[_0x976e('0x2f')](_0x2c7806));if(_0x2c7806[_0x976e('0x30')]){if(_0x2c7806[_0x976e('0x30')][_0x976e('0x31')]&&_0x2c7806['response']['result'][_0x976e('0x33')]){logger[_0x976e('0xa')](_0x976e('0x4d'));return request({'method':_0x976e('0x47'),'uri':util['format'](_0x976e('0x4e'),_0x390305[_0x976e('0x2a')]),'qs':{'authtoken':_0x390305[_0x976e('0x2b')],'scope':'crmapi','id':_0x2c7806[_0x976e('0x30')]['result'][_0x976e('0x33')]['FL'][0x0]['$t']},'json':!![]});}}throw new Error('Error\x20on\x20Lead\x20creation:\x20'+JSON[_0x976e('0x3e')](_0x2c7806));})['then'](function(_0x55dcad){if(_0x55dcad[_0x976e('0x30')]){if(_0x55dcad[_0x976e('0x30')][_0x976e('0x31')]){var _0x282ba4={};for(var _0x59801e=0x0,_0x1cb167=_0x55dcad[_0x976e('0x30')]['result'][_0x976e('0x26')]['row']['FL'][_0x976e('0x45')];_0x59801e<_0x1cb167;_0x59801e++){_0x282ba4[_0x55dcad[_0x976e('0x30')][_0x976e('0x31')][_0x976e('0x26')][_0x976e('0x44')]['FL'][_0x59801e][_0x976e('0x4a')]]=_0x55dcad[_0x976e('0x30')][_0x976e('0x31')][_0x976e('0x26')][_0x976e('0x44')]['FL'][_0x59801e][_0x976e('0x46')];}return _0x282ba4;}}throw new Error(_0x976e('0x4f')+JSON[_0x976e('0x3e')](_0x55dcad));});}});}});}function request(_0x5c61f3){logger[_0x976e('0x50')]('[HTTP]',JSON[_0x976e('0x3e')](_0x5c61f3));return rp(_0x5c61f3);}function getCustomFields(_0x4f51a7,_0x2a4c7e){var _0x44d5c0={};if(_0x4f51a7['length']>0x0){_[_0x976e('0x51')](_0x4f51a7,function(_0xf433bd){if(_0xf433bd[_0x976e('0x52')]==='string'&&_0xf433bd[_0x976e('0x53')]){_0x44d5c0[_0xf433bd[_0x976e('0x53')]]=_0xf433bd[_0x976e('0x46')][_0x976e('0x54')]();}else if(_0xf433bd[_0x976e('0x52')]===_0x976e('0x55')&&_0xf433bd['variableName']&&_0xf433bd[_0x976e('0x53')]&&_0x2a4c7e[_0xf433bd[_0x976e('0x56')]]){_0x44d5c0[_0xf433bd[_0x976e('0x53')]]=_0x2a4c7e[_0xf433bd['variableName']][_0x976e('0x54')]();}else if(_0xf433bd[_0x976e('0x52')]===_0x976e('0x57')&&_0xf433bd[_0x976e('0x58')]&&_0xf433bd[_0x976e('0x58')][_0x976e('0x59')]&&_0xf433bd[_0x976e('0x53')]&&_0x2a4c7e[_0xf433bd[_0x976e('0x58')]['name'][_0x976e('0x5a')]()]){_0x44d5c0[_0xf433bd['idField']]=_0x2a4c7e[_0xf433bd[_0x976e('0x58')][_0x976e('0x59')][_0x976e('0x5a')]()][_0x976e('0x54')]();}});}return _0x44d5c0;}function getName(_0x4b7a2d){if(_0x4b7a2d[_0x976e('0x5b')]('\x20')>0x0){var _0x3c59a9=_0x4b7a2d[_0x976e('0x5c')](/ (.+)/);if(_0x3c59a9[0x1]){return _0x3c59a9;}}return[_0x4b7a2d,_0x4b7a2d];}exports['queue']=function(_0x3c6d57,_0x573beb,_0x15c0a8,_0x78b096,_0x794370,_0x2ed163){var _0x380f45,_0x26ede3;if(_0x794370&&_0x794370[_0x976e('0x5d')]){logger[_0x976e('0xa')](_0x976e('0x5e'),_0x976e('0x5f'));_0x573beb[_0x976e('0x60')]=util[_0x976e('0xe')](_0x976e('0x61'),_0x2ed163[_0x976e('0x62')],_0x573beb[_0x976e('0x63')],md5(_0x573beb[_0x976e('0x63')]));}else{_0x573beb[_0x976e('0x60')]='';}return getUser(_0x2ed163,_0x78b096[_0x976e('0x64')])['then'](function(_0x300755){_0x380f45=_0x300755;logger['info'](_0x976e('0x65'),_0x380f45['id']);return getEndUser(_0x2ed163,_0x573beb[_0x976e('0x66')],_0x573beb['calleridnum']);})[_0x976e('0x2d')](function(_0x295f56){_0x26ede3=_0x295f56;logger[_0x976e('0xa')](_0x976e('0x67'),_0x26ede3[_0x976e('0x23')]||_0x26ede3[_0x976e('0x24')]);return getCall(_0x2ed163,_0x380f45,_0x26ede3,_0x15c0a8,_0x573beb,_0x976e('0x68'));})[_0x976e('0x2d')](function(_0x521e69){if(_0x521e69){logger[_0x976e('0xa')]('The\x20Call\x20ID\x20is:',_0x521e69['id']);logger[_0x976e('0xa')](_0x976e('0x5e'),_0x976e('0x69'));emit(util[_0x976e('0xe')](_0x976e('0x6a'),_0x78b096[_0x976e('0x59')]),'trigger:browser:url',{'uri':util[_0x976e('0xe')](_0x976e('0x6b'),_0x2ed163[_0x976e('0x2a')],_0x521e69['id'])});}})['catch'](function(_0x37409e){logger[_0x976e('0x3c')](_0x976e('0x5e'),JSON[_0x976e('0x3e')](_0x37409e));});};exports[_0x976e('0x6c')]=function(_0x2ae2e9,_0x234267,_0x80b1c9,_0x5e43f9,_0x66c3c,_0xaafaf8,_0xbfa46c){var _0x4c4f06,_0x593bd7;if(_0xbfa46c&&_0xbfa46c[_0x976e('0x6d')]&&_0xbfa46c[_0x976e('0x6d')]!=='none'){logger[_0x976e('0xa')]('[OUTBOUND]','Recording\x20is\x20enabled!');_0x234267[_0x976e('0x60')]=util[_0x976e('0xe')](_0x976e('0x61'),_0xaafaf8['serverUrl'],_0x234267[_0x976e('0x63')],md5(_0x234267[_0x976e('0x63')]));}return getUser(_0xaafaf8,_0x5e43f9[_0x976e('0x64')])[_0x976e('0x2d')](function(_0x1c09cc){_0x4c4f06=_0x1c09cc;logger['info'](_0x976e('0x65'),_0x4c4f06['id']);return getEndUser(_0xaafaf8,_0x234267[_0x976e('0x6e')],_0x234267[_0x976e('0x6f')]);})[_0x976e('0x2d')](function(_0x11a1a4){_0x593bd7=_0x11a1a4;logger[_0x976e('0xa')](_0x976e('0x67'),_0x593bd7[_0x976e('0x23')]||_0x593bd7['LEADID']);return getCall(_0xaafaf8,_0x4c4f06,_0x593bd7,_0x80b1c9,_0x234267,_0x976e('0x70'));})[_0x976e('0x2d')](function(_0x2aaaf9){if(_0x2aaaf9){logger[_0x976e('0xa')](_0x976e('0x71'),_0x2aaaf9['id']);logger[_0x976e('0xa')](_0x976e('0x72'),_0x976e('0x69'));emit(util[_0x976e('0xe')]('user:%s',_0x5e43f9[_0x976e('0x59')]),_0x976e('0x73'),{'uri':util[_0x976e('0xe')](_0x976e('0x6b'),_0xaafaf8[_0x976e('0x2a')],_0x2aaaf9['id'])});}})[_0x976e('0x74')](function(_0x513399){logger[_0x976e('0x3c')](_0x976e('0x72'),JSON['stringify'](_0x513399));});};exports[_0x976e('0x1b')]=function(_0x22b5ab,_0x1f4636,_0xd65875,_0x389f78,_0x3cea7c,_0x906095){var _0x8bf3d7,_0x26e633;if(_0x3cea7c&&_0x3cea7c[_0x976e('0x5d')]){logger[_0x976e('0xa')]('[ABANDONED]',_0x976e('0x5f'));_0x1f4636['recordingURL']=util[_0x976e('0xe')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x906095[_0x976e('0x62')],_0x1f4636['uniqueid'],md5(_0x1f4636['uniqueid']));}else{_0x1f4636[_0x976e('0x60')]='';}return getUser(_0x906095)[_0x976e('0x2d')](function(_0x3a672b){_0x8bf3d7=_0x3a672b;logger[_0x976e('0xa')](_0x976e('0x65'),_0x8bf3d7['id']);return getEndUser(_0x906095,_0x1f4636[_0x976e('0x66')],_0x1f4636[_0x976e('0x75')]);})[_0x976e('0x2d')](function(_0x1b97a1){_0x26e633=_0x1b97a1;logger[_0x976e('0xa')](_0x976e('0x67'),_0x26e633['CONTACTID']||_0x26e633[_0x976e('0x24')]);return getCall(_0x906095,_0x8bf3d7,_0x26e633,_0xd65875,_0x1f4636,_0x976e('0x68'));})['then'](function(_0x3855cc){if(_0x3855cc){logger[_0x976e('0xa')](_0x976e('0x71'),_0x3855cc['id']);}})[_0x976e('0x74')](function(_0x374082){logger[_0x976e('0x3c')](_0x976e('0x76'),JSON[_0x976e('0x3e')](_0x374082));});};
\ No newline at end of file
index 730cda9..f2b14e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0976=['body','data7','%s\x20%s\x20succeeded\x20with\x20status:\x20%d\x20and\x20body:\x20%s','statusCode','error','format','name','message','request-promise','mustache','../../../../config/logger','trigger','exec','data1','render','data2','toUpperCase','POST'];(function(_0x56916d,_0x37b935){var _0x2b7f1f=function(_0x206eb1){while(--_0x206eb1){_0x56916d['push'](_0x56916d['shift']());}};_0x2b7f1f(++_0x37b935);}(_0x0976,0x1a6));var _0x6097=function(_0x84d74b,_0x38cdb7){_0x84d74b=_0x84d74b-0x0;var _0x58577d=_0x0976[_0x84d74b];return _0x58577d;};'use strict';var rp=require(_0x6097('0x0'));var util=require('util');var Mustache=require(_0x6097('0x1'));var logger=require(_0x6097('0x2'))(_0x6097('0x3'));exports[_0x6097('0x4')]=function(_0x13dfb7,_0x4e9576){var _0x3f8322={'method':_0x13dfb7[_0x6097('0x5')]['toUpperCase'](),'uri':encodeURI(Mustache[_0x6097('0x6')](_0x13dfb7[_0x6097('0x7')],_0x4e9576)),'json':!![],'resolveWithFullResponse':!![]};switch(_0x13dfb7[_0x6097('0x5')][_0x6097('0x8')]()){case'GET':_0x3f8322['qs']=_0x4e9576;break;case _0x6097('0x9'):_0x3f8322[_0x6097('0xa')]=_0x13dfb7['data7']?Mustache['render'](_0x13dfb7[_0x6097('0xb')],_0x4e9576):_0x4e9576;break;}rp(_0x3f8322)['then'](function(_0x78ecc1){logger['info'](util['format'](_0x6097('0xc'),_0x13dfb7[_0x6097('0x5')],_0x13dfb7['data2'],_0x78ecc1[_0x6097('0xd')],_0x78ecc1['body']));})['catch'](function(_0xc0b620){logger[_0x6097('0xe')](util[_0x6097('0xf')]('%s\x20%s\x20%s\x20[%s]:%s',_0x13dfb7[_0x6097('0x5')],_0x13dfb7['data2'],_0xc0b620[_0x6097('0xd')],_0xc0b620[_0x6097('0x10')],_0xc0b620[_0x6097('0x11')]));});};
\ No newline at end of file
+var _0xbdbb=['toUpperCase','render','data2','GET','data7','then','format','%s\x20%s\x20succeeded\x20with\x20status:\x20%d\x20and\x20body:\x20%s','body','catch','message','request-promise','util','mustache','../../../../config/logger','exec','data1'];(function(_0x4fc784,_0x2848c9){var _0x62dec8=function(_0x2b6e5f){while(--_0x2b6e5f){_0x4fc784['push'](_0x4fc784['shift']());}};_0x62dec8(++_0x2848c9);}(_0xbdbb,0x1a3));var _0xbbdb=function(_0x355535,_0x1e2607){_0x355535=_0x355535-0x0;var _0x2a4242=_0xbdbb[_0x355535];return _0x2a4242;};'use strict';var rp=require(_0xbbdb('0x0'));var util=require(_0xbbdb('0x1'));var Mustache=require(_0xbbdb('0x2'));var logger=require(_0xbbdb('0x3'))('trigger');exports[_0xbbdb('0x4')]=function(_0x1d4102,_0x169a09){var _0x3904a0={'method':_0x1d4102[_0xbbdb('0x5')][_0xbbdb('0x6')](),'uri':encodeURI(Mustache[_0xbbdb('0x7')](_0x1d4102[_0xbbdb('0x8')],_0x169a09)),'json':!![],'resolveWithFullResponse':!![]};switch(_0x1d4102[_0xbbdb('0x5')]['toUpperCase']()){case _0xbbdb('0x9'):_0x3904a0['qs']=_0x169a09;break;case'POST':_0x3904a0['body']=_0x1d4102['data7']?Mustache[_0xbbdb('0x7')](_0x1d4102[_0xbbdb('0xa')],_0x169a09):_0x169a09;break;}rp(_0x3904a0)[_0xbbdb('0xb')](function(_0x3c1357){logger['info'](util[_0xbbdb('0xc')](_0xbbdb('0xd'),_0x1d4102['data1'],_0x1d4102[_0xbbdb('0x8')],_0x3c1357['statusCode'],_0x3c1357[_0xbbdb('0xe')]));})[_0xbbdb('0xf')](function(_0x12a5aa){logger['error'](util[_0xbbdb('0xc')]('%s\x20%s\x20%s\x20[%s]:%s',_0x1d4102[_0xbbdb('0x5')],_0x1d4102[_0xbbdb('0x8')],_0x12a5aa['statusCode'],_0x12a5aa['name'],_0x12a5aa[_0xbbdb('0x10')]));});};
\ No newline at end of file
index d02e505..f71fd80 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf3ff=['error','result','catch','rpc','exports','jayson/promise','../../config/logger','routing','client','http','Request','request','debug'];(function(_0x2b0acc,_0x4ae9d9){var _0x4d2cfb=function(_0x45a5c8){while(--_0x45a5c8){_0x2b0acc['push'](_0x2b0acc['shift']());}};_0x4d2cfb(++_0x4ae9d9);}(_0xf3ff,0xae));var _0xff3f=function(_0x48be4e,_0x1d0c3a){_0x48be4e=_0x48be4e-0x0;var _0x4df953=_0xf3ff[_0x48be4e];return _0x4df953;};'use strict';var jayson=require(_0xff3f('0x0'));var BPromise=require('bluebird');var logger=require(_0xff3f('0x1'))(_0xff3f('0x2'));var client=jayson[_0xff3f('0x3')][_0xff3f('0x4')]({'port':0x2329});client[_0xff3f('0x5')]=function(_0x262446,_0x4aa1dc){return new BPromise(function(_0x2c62cc,_0x30f58e){return client[_0xff3f('0x6')](_0x262446,_0x4aa1dc)['then'](function(_0x3591f9){logger[_0xff3f('0x7')]('rpc',_0xff3f('0x2'),_0x262446,_0x4aa1dc,_0x3591f9);if(_0x3591f9[_0xff3f('0x8')]){logger['error']('rpc','routing',_0x262446,_0x3591f9[_0xff3f('0x8')]['message'],_0x4aa1dc);return _0x30f58e(_0x3591f9[_0xff3f('0x8')]['message']);}else{return _0x2c62cc(_0x3591f9[_0xff3f('0x9')]);}})[_0xff3f('0xa')](function(_0x2a76e0){logger[_0xff3f('0x8')](_0xff3f('0xb'),_0xff3f('0x2'),_0x262446,_0x2a76e0,_0x4aa1dc);return _0x30f58e(_0x2a76e0);});});};module[_0xff3f('0xc')]=client;
\ No newline at end of file
+var _0xfafd=['http','Request','request','then','debug','rpc','error','message','catch','bluebird','../../config/logger','routing','client'];(function(_0x16da8f,_0x4ddb80){var _0xd5dca8=function(_0x3b7cb6){while(--_0x3b7cb6){_0x16da8f['push'](_0x16da8f['shift']());}};_0xd5dca8(++_0x4ddb80);}(_0xfafd,0xcc));var _0xdfaf=function(_0xed4789,_0x1910f3){_0xed4789=_0xed4789-0x0;var _0x32cccd=_0xfafd[_0xed4789];return _0x32cccd;};'use strict';var jayson=require('jayson/promise');var BPromise=require(_0xdfaf('0x0'));var logger=require(_0xdfaf('0x1'))(_0xdfaf('0x2'));var client=jayson[_0xdfaf('0x3')][_0xdfaf('0x4')]({'port':0x2329});client[_0xdfaf('0x5')]=function(_0x2fd070,_0x2ca36c){return new BPromise(function(_0x7e3bc7,_0x2a28e9){return client[_0xdfaf('0x6')](_0x2fd070,_0x2ca36c)[_0xdfaf('0x7')](function(_0x3b455a){logger[_0xdfaf('0x8')](_0xdfaf('0x9'),'routing',_0x2fd070,_0x2ca36c,_0x3b455a);if(_0x3b455a[_0xdfaf('0xa')]){logger[_0xdfaf('0xa')](_0xdfaf('0x9'),_0xdfaf('0x2'),_0x2fd070,_0x3b455a[_0xdfaf('0xa')][_0xdfaf('0xb')],_0x2ca36c);return _0x2a28e9(_0x3b455a[_0xdfaf('0xa')][_0xdfaf('0xb')]);}else{return _0x7e3bc7(_0x3b455a['result']);}})[_0xdfaf('0xc')](function(_0x447315){logger[_0xdfaf('0xa')](_0xdfaf('0x9'),_0xdfaf('0x2'),_0x2fd070,_0x447315,_0x2ca36c);return _0x2a28e9(_0x447315);});});};module['exports']=client;
\ No newline at end of file
index 1007f8d..d5e912a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1425=['getMailAccounts','initMailAccounts','refresh','listen','catch','log','bluebird','./realtime','./rpc/mailAccount','resolve','then'];(function(_0x1f7fb2,_0x116309){var _0x61fc27=function(_0x4b981c){while(--_0x4b981c){_0x1f7fb2['push'](_0x1f7fb2['shift']());}};_0x61fc27(++_0x116309);}(_0x1425,0x8a));var _0x5142=function(_0x3567b3,_0x390d92){_0x3567b3=_0x3567b3-0x0;var _0x5a8637=_0x1425[_0x3567b3];return _0x5a8637;};'use strict';var BPromise=require(_0x5142('0x0'));var server=require('./server');var Realtime=require(_0x5142('0x1'));var EmailChannel=require('./lib/email');var mailAccount=require(_0x5142('0x2'));var realtime=new Realtime();var email=new EmailChannel(realtime);function initRealtime(){return BPromise[_0x5142('0x3')]()[_0x5142('0x4')](mailAccount[_0x5142('0x5')]())[_0x5142('0x4')](realtime[_0x5142('0x6')]())[_0x5142('0x4')](function(){email[_0x5142('0x7')](realtime['mailAccounts']);return realtime;});}function main(){return server[_0x5142('0x8')](realtime,email)[_0x5142('0x4')](function(_0x24abd6){return initRealtime();})[_0x5142('0x4')](function(_0x3a3e2e){return setInterval(initRealtime,0x2710);})[_0x5142('0x9')](function(_0x12d65a){console[_0x5142('0xa')](_0x12d65a);});}main();
\ No newline at end of file
+var _0x0493=['bluebird','./server','./realtime','resolve','then','getMailAccounts','refresh','listen','catch','log'];(function(_0x190725,_0x4c879f){var _0x4fe2de=function(_0x1d7d72){while(--_0x1d7d72){_0x190725['push'](_0x190725['shift']());}};_0x4fe2de(++_0x4c879f);}(_0x0493,0xb4));var _0x3049=function(_0x1bac8f,_0x30f0ba){_0x1bac8f=_0x1bac8f-0x0;var _0x1ead75=_0x0493[_0x1bac8f];return _0x1ead75;};'use strict';var BPromise=require(_0x3049('0x0'));var server=require(_0x3049('0x1'));var Realtime=require(_0x3049('0x2'));var EmailChannel=require('./lib/email');var mailAccount=require('./rpc/mailAccount');var realtime=new Realtime();var email=new EmailChannel(realtime);function initRealtime(){return BPromise[_0x3049('0x3')]()[_0x3049('0x4')](mailAccount[_0x3049('0x5')]())['then'](realtime['initMailAccounts']())['then'](function(){email[_0x3049('0x6')](realtime['mailAccounts']);return realtime;});}function main(){return server[_0x3049('0x7')](realtime,email)[_0x3049('0x4')](function(_0x8e6ed1){return initRealtime();})[_0x3049('0x4')](function(_0x211b5f){return setInterval(initRealtime,0x2710);})[_0x3049('0x8')](function(_0x3531f4){console[_0x3049('0x9')](_0x3531f4);});}main();
\ No newline at end of file
index 5b5f55b..627f863 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa611=['then','Mail\x20accepted\x20from\x20routing','catch','Mail\x20not\x20accepted\x20from\x20routing\x20%s','stringify','lastSync','smtp','send','verifySmtp','Smtp','verify','verified','lodash','bluebird','md5','socket.io-emitter','localhost','./imap','../../../config/logger','email','../rpc/mailAccount','mailAccounts','imapAccounts','emit','name','Imap','status','messageStatus','total','isNil','mailAccount:update','refresh','active','hasOwnProperty','box','handleImapBox','handleImapEmail','bind','handleImapEnd','error','handleImapError','prototype','connected','messages','info','New\x20email\x20from\x20%s\x20%s\x20%s\x20to\x20%s','lastName','from','notify'];(function(_0x3634d8,_0xbfa70b){var _0x2c1369=function(_0x27b79a){while(--_0x27b79a){_0x3634d8['push'](_0x3634d8['shift']());}};_0x2c1369(++_0xbfa70b);}(_0xa611,0x6e));var _0x1a61=function(_0x311c35,_0x534915){_0x311c35=_0x311c35-0x0;var _0x5cc50c=_0xa611[_0x311c35];return _0x5cc50c;};'use strict';var _=require(_0x1a61('0x0'));var moment=require('moment');var BPromise=require(_0x1a61('0x1'));var md5=require(_0x1a61('0x2'));var io=require(_0x1a61('0x3'))({'host':_0x1a61('0x4'),'port':0x18eb});var EmailImap=require(_0x1a61('0x5'));var EmailSmtp=require('./smtp');var logger=require(_0x1a61('0x6'))(_0x1a61('0x7'));var mailAccount=require(_0x1a61('0x8'));var md5Accounts={};function EmailChannel(_0x121777){logger['info']('start\x20email\x20channel');this[_0x1a61('0x9')]=_0x121777['mailAccounts'];this[_0x1a61('0xa')]={};this['smtp']=new EmailSmtp();}EmailChannel['prototype'][_0x1a61('0xb')]=function(_0x506bc7){var _0x1c5f5e=this[_0x1a61('0x9')][_0x506bc7];var _0x549b5e={'id':_0x1c5f5e['id'],'name':_0x1c5f5e[_0x1a61('0xc')],'key':_0x1c5f5e['key'],'active':_0x1c5f5e['active'],'Imap':{'status':_0x1c5f5e[_0x1a61('0xd')][_0x1a61('0xe')],'messageStatus':_0x1c5f5e['Imap'][_0x1a61('0xf')],'total':_0x1c5f5e[_0x1a61('0xd')][_0x1a61('0x10')]}};if(_[_0x1a61('0x11')](md5Accounts[_0x506bc7])){md5Accounts[_0x506bc7]={};}var _0x1e8632=md5(JSON['stringify'](_0x549b5e));if(md5Accounts[_0x506bc7][_0x1a61('0x2')]!==_0x1e8632){md5Accounts[_0x506bc7][_0x1a61('0x2')]=_0x1e8632;io[_0x1a61('0xb')](_0x1a61('0x12'),_0x549b5e);}};EmailChannel['prototype'][_0x1a61('0x13')]=function(_0x1d3f05){for(var _0x1a4e93 in _0x1d3f05){if(_0x1d3f05['hasOwnProperty'](_0x1a4e93)){if(_0x1d3f05[_0x1a4e93][_0x1a61('0xd')]&&_0x1d3f05[_0x1a4e93][_0x1a61('0x14')]){var _0x36c23f=_0x1d3f05[_0x1a4e93][_0x1a61('0xd')];if(!this['imapAccounts'][_0x1a61('0x15')](_0x36c23f['id'])){this['imapAccounts'][_0x36c23f['id']]=new EmailImap(_0x36c23f,_0x1d3f05[_0x1a4e93][_0x1a61('0x7')]);this[_0x1a61('0xa')][_0x36c23f['id']]['on'](_0x1a61('0x16'),this[_0x1a61('0x17')]['bind'](this,_0x1a4e93));this['imapAccounts'][_0x36c23f['id']]['on'](_0x1a61('0x7'),this[_0x1a61('0x18')][_0x1a61('0x19')](this,_0x1a4e93));this[_0x1a61('0xa')][_0x36c23f['id']]['on']('end',this[_0x1a61('0x1a')][_0x1a61('0x19')](this,_0x1a4e93));this[_0x1a61('0xa')][_0x36c23f['id']]['on'](_0x1a61('0x1b'),this[_0x1a61('0x1c')][_0x1a61('0x19')](this,_0x1a4e93));}}else{if(_[_0x1a61('0x11')](this[_0x1a61('0x9')][_0x1a4e93][_0x1a61('0xd')])){this[_0x1a61('0x9')][_0x1a4e93][_0x1a61('0xd')]={};}this[_0x1a61('0x9')][_0x1a4e93][_0x1a61('0xd')][_0x1a61('0xe')]='disabled';this['mailAccounts'][_0x1a4e93][_0x1a61('0xd')][_0x1a61('0xf')]='';this[_0x1a61('0xb')](_0x1a4e93);}}}};EmailChannel[_0x1a61('0x1d')][_0x1a61('0x17')]=function(_0x202eca,_0x7dad20){if(this[_0x1a61('0x9')][_0x202eca]){this[_0x1a61('0x9')][_0x202eca][_0x1a61('0xd')][_0x1a61('0xe')]=_0x1a61('0x1e');this[_0x1a61('0x9')][_0x202eca][_0x1a61('0xd')][_0x1a61('0xf')]=_0x7dad20[_0x1a61('0xc')];if(_0x7dad20['messages']){this[_0x1a61('0x9')][_0x202eca][_0x1a61('0xd')][_0x1a61('0x10')]=_0x7dad20[_0x1a61('0x1f')]['total'];}return this[_0x1a61('0xb')](_0x202eca);}};EmailChannel['prototype'][_0x1a61('0x18')]=function(_0xaf14fb,_0x344399){logger[_0x1a61('0x20')](_0x1a61('0x21'),_0x344399['firstName'],_0x344399[_0x1a61('0x22')],_0x344399[_0x1a61('0x23')],_0xaf14fb);if(this['mailAccounts'][_0xaf14fb]){return mailAccount[_0x1a61('0x24')](_0xaf14fb,_0x344399)[_0x1a61('0x25')](function(_0x279569){if(_0x279569){logger[_0x1a61('0x20')](_0x1a61('0x26'));}})[_0x1a61('0x27')](function(_0xe6bae2){logger['error'](_0x1a61('0x28'),JSON[_0x1a61('0x29')](_0xe6bae2));});}};EmailChannel['prototype'][_0x1a61('0x1a')]=function(_0x381830){if(this[_0x1a61('0x9')][_0x381830]&&this[_0x1a61('0x9')][_0x381830][_0x1a61('0xd')]){if(this[_0x1a61('0xa')][this[_0x1a61('0x9')][_0x381830]['Imap']['id']]){delete this[_0x1a61('0xa')][this[_0x1a61('0x9')][_0x381830]['Imap']['id']];}this[_0x1a61('0x9')][_0x381830]['Imap'][_0x1a61('0x2a')]=moment();this[_0x1a61('0xb')](_0x381830);}};EmailChannel[_0x1a61('0x1d')]['handleImapError']=function(_0x54aa74,_0x4cbabf){if(this[_0x1a61('0x9')][_0x54aa74]){this['mailAccounts'][_0x54aa74][_0x1a61('0xd')][_0x1a61('0xe')]=_0x1a61('0x1b');this[_0x1a61('0x9')][_0x54aa74][_0x1a61('0xd')]['messageStatus']=_0x4cbabf;return this[_0x1a61('0xb')](_0x54aa74);}};EmailChannel[_0x1a61('0x1d')]['sendMail']=function(_0x5d6c78,_0xfdb6da){return this[_0x1a61('0x2b')][_0x1a61('0x2c')](_0x5d6c78,_0xfdb6da);};EmailChannel['prototype'][_0x1a61('0x2d')]=function(_0x14c7a2){var _0x479130=this;if(this[_0x1a61('0x9')][_0x14c7a2['id']]){if(_[_0x1a61('0x11')](this['mailAccounts'][_0x14c7a2['id']][_0x1a61('0x2e')])){this[_0x1a61('0x9')][_0x14c7a2['id']][_0x1a61('0x2e')]={};}this[_0x1a61('0x9')][_0x14c7a2['id']][_0x1a61('0x2e')][_0x1a61('0x2a')]=moment();return new BPromise(function(_0x5edbcb,_0x18d029){return _0x479130[_0x1a61('0x2b')][_0x1a61('0x2f')](_0x14c7a2)[_0x1a61('0x25')](function(_0x51b323){_0x479130['mailAccounts'][_0x14c7a2['id']][_0x1a61('0x2e')]['status']=_0x1a61('0x30');_0x479130['mailAccounts'][_0x14c7a2['id']]['Smtp'][_0x1a61('0xf')]='';_0x479130[_0x1a61('0xb')](_0x14c7a2['id']);_0x5edbcb(_0x51b323);})[_0x1a61('0x27')](function(_0x3f3ba3){_0x479130[_0x1a61('0x9')][_0x14c7a2['id']]['Smtp']['status']='error';_0x479130[_0x1a61('0x9')][_0x14c7a2['id']]['Smtp'][_0x1a61('0xf')]=_0x3f3ba3;_0x479130['emit'](_0x14c7a2['id']);_0x18d029(_0x3f3ba3);});});}return this[_0x1a61('0x2b')][_0x1a61('0x2f')](_0x14c7a2);};module['exports']=EmailChannel;
\ No newline at end of file
+var _0x0dd5=['end','handleImapEnd','error','disabled','connected','firstName','lastName','from','notify','Mail\x20accepted\x20from\x20routing','Mail\x20not\x20accepted\x20from\x20routing\x20%s','send','verifySmtp','Smtp','lastSync','verify','then','catch','exports','lodash','moment','bluebird','md5','socket.io-emitter','localhost','./imap','../../../config/logger','email','../rpc/mailAccount','info','start\x20email\x20channel','mailAccounts','smtp','emit','name','key','active','Imap','status','messageStatus','total','isNil','stringify','mailAccount:update','prototype','refresh','imapAccounts','box','handleImapBox','bind','handleImapEmail'];(function(_0x29c43c,_0x2eac09){var _0x5e44f3=function(_0x3d60eb){while(--_0x3d60eb){_0x29c43c['push'](_0x29c43c['shift']());}};_0x5e44f3(++_0x2eac09);}(_0x0dd5,0x178));var _0x50dd=function(_0x38860f,_0x3e161e){_0x38860f=_0x38860f-0x0;var _0x1796ec=_0x0dd5[_0x38860f];return _0x1796ec;};'use strict';var _=require(_0x50dd('0x0'));var moment=require(_0x50dd('0x1'));var BPromise=require(_0x50dd('0x2'));var md5=require(_0x50dd('0x3'));var io=require(_0x50dd('0x4'))({'host':_0x50dd('0x5'),'port':0x18eb});var EmailImap=require(_0x50dd('0x6'));var EmailSmtp=require('./smtp');var logger=require(_0x50dd('0x7'))(_0x50dd('0x8'));var mailAccount=require(_0x50dd('0x9'));var md5Accounts={};function EmailChannel(_0x588d96){logger[_0x50dd('0xa')](_0x50dd('0xb'));this[_0x50dd('0xc')]=_0x588d96['mailAccounts'];this['imapAccounts']={};this[_0x50dd('0xd')]=new EmailSmtp();}EmailChannel['prototype'][_0x50dd('0xe')]=function(_0x28dec9){var _0x3936c0=this[_0x50dd('0xc')][_0x28dec9];var _0x513e2b={'id':_0x3936c0['id'],'name':_0x3936c0[_0x50dd('0xf')],'key':_0x3936c0[_0x50dd('0x10')],'active':_0x3936c0[_0x50dd('0x11')],'Imap':{'status':_0x3936c0[_0x50dd('0x12')][_0x50dd('0x13')],'messageStatus':_0x3936c0[_0x50dd('0x12')][_0x50dd('0x14')],'total':_0x3936c0['Imap'][_0x50dd('0x15')]}};if(_[_0x50dd('0x16')](md5Accounts[_0x28dec9])){md5Accounts[_0x28dec9]={};}var _0x411fb7=md5(JSON[_0x50dd('0x17')](_0x513e2b));if(md5Accounts[_0x28dec9]['md5']!==_0x411fb7){md5Accounts[_0x28dec9]['md5']=_0x411fb7;io[_0x50dd('0xe')](_0x50dd('0x18'),_0x513e2b);}};EmailChannel[_0x50dd('0x19')][_0x50dd('0x1a')]=function(_0x32ca17){for(var _0x2024dd in _0x32ca17){if(_0x32ca17['hasOwnProperty'](_0x2024dd)){if(_0x32ca17[_0x2024dd][_0x50dd('0x12')]&&_0x32ca17[_0x2024dd]['active']){var _0x30d92e=_0x32ca17[_0x2024dd][_0x50dd('0x12')];if(!this[_0x50dd('0x1b')]['hasOwnProperty'](_0x30d92e['id'])){this[_0x50dd('0x1b')][_0x30d92e['id']]=new EmailImap(_0x30d92e,_0x32ca17[_0x2024dd][_0x50dd('0x8')]);this['imapAccounts'][_0x30d92e['id']]['on'](_0x50dd('0x1c'),this[_0x50dd('0x1d')][_0x50dd('0x1e')](this,_0x2024dd));this['imapAccounts'][_0x30d92e['id']]['on'](_0x50dd('0x8'),this[_0x50dd('0x1f')][_0x50dd('0x1e')](this,_0x2024dd));this[_0x50dd('0x1b')][_0x30d92e['id']]['on'](_0x50dd('0x20'),this[_0x50dd('0x21')][_0x50dd('0x1e')](this,_0x2024dd));this[_0x50dd('0x1b')][_0x30d92e['id']]['on'](_0x50dd('0x22'),this['handleImapError'][_0x50dd('0x1e')](this,_0x2024dd));}}else{if(_['isNil'](this[_0x50dd('0xc')][_0x2024dd]['Imap'])){this[_0x50dd('0xc')][_0x2024dd]['Imap']={};}this[_0x50dd('0xc')][_0x2024dd]['Imap'][_0x50dd('0x13')]=_0x50dd('0x23');this[_0x50dd('0xc')][_0x2024dd]['Imap'][_0x50dd('0x14')]='';this[_0x50dd('0xe')](_0x2024dd);}}}};EmailChannel[_0x50dd('0x19')]['handleImapBox']=function(_0x15afd1,_0x233fea){if(this[_0x50dd('0xc')][_0x15afd1]){this[_0x50dd('0xc')][_0x15afd1]['Imap'][_0x50dd('0x13')]=_0x50dd('0x24');this['mailAccounts'][_0x15afd1][_0x50dd('0x12')][_0x50dd('0x14')]=_0x233fea[_0x50dd('0xf')];if(_0x233fea['messages']){this[_0x50dd('0xc')][_0x15afd1][_0x50dd('0x12')]['total']=_0x233fea['messages'][_0x50dd('0x15')];}return this[_0x50dd('0xe')](_0x15afd1);}};EmailChannel[_0x50dd('0x19')][_0x50dd('0x1f')]=function(_0x497553,_0x34e6e2){logger[_0x50dd('0xa')]('New\x20email\x20from\x20%s\x20%s\x20%s\x20to\x20%s',_0x34e6e2[_0x50dd('0x25')],_0x34e6e2[_0x50dd('0x26')],_0x34e6e2[_0x50dd('0x27')],_0x497553);if(this[_0x50dd('0xc')][_0x497553]){return mailAccount[_0x50dd('0x28')](_0x497553,_0x34e6e2)['then'](function(_0x371875){if(_0x371875){logger[_0x50dd('0xa')](_0x50dd('0x29'));}})['catch'](function(_0x5a616d){logger['error'](_0x50dd('0x2a'),JSON[_0x50dd('0x17')](_0x5a616d));});}};EmailChannel[_0x50dd('0x19')][_0x50dd('0x21')]=function(_0x2582d3){if(this[_0x50dd('0xc')][_0x2582d3]&&this[_0x50dd('0xc')][_0x2582d3][_0x50dd('0x12')]){if(this[_0x50dd('0x1b')][this[_0x50dd('0xc')][_0x2582d3][_0x50dd('0x12')]['id']]){delete this['imapAccounts'][this['mailAccounts'][_0x2582d3][_0x50dd('0x12')]['id']];}this['mailAccounts'][_0x2582d3]['Imap']['lastSync']=moment();this[_0x50dd('0xe')](_0x2582d3);}};EmailChannel[_0x50dd('0x19')]['handleImapError']=function(_0x137ac5,_0x2dc521){if(this[_0x50dd('0xc')][_0x137ac5]){this['mailAccounts'][_0x137ac5][_0x50dd('0x12')]['status']=_0x50dd('0x22');this[_0x50dd('0xc')][_0x137ac5][_0x50dd('0x12')][_0x50dd('0x14')]=_0x2dc521;return this['emit'](_0x137ac5);}};EmailChannel[_0x50dd('0x19')]['sendMail']=function(_0x42a624,_0x22e702){return this[_0x50dd('0xd')][_0x50dd('0x2b')](_0x42a624,_0x22e702);};EmailChannel[_0x50dd('0x19')][_0x50dd('0x2c')]=function(_0x410d8b){var _0x17a5c7=this;if(this[_0x50dd('0xc')][_0x410d8b['id']]){if(_[_0x50dd('0x16')](this[_0x50dd('0xc')][_0x410d8b['id']]['Smtp'])){this[_0x50dd('0xc')][_0x410d8b['id']]['Smtp']={};}this[_0x50dd('0xc')][_0x410d8b['id']][_0x50dd('0x2d')][_0x50dd('0x2e')]=moment();return new BPromise(function(_0x1016c6,_0x259fc2){return _0x17a5c7['smtp'][_0x50dd('0x2f')](_0x410d8b)[_0x50dd('0x30')](function(_0x4d32bb){_0x17a5c7[_0x50dd('0xc')][_0x410d8b['id']][_0x50dd('0x2d')][_0x50dd('0x13')]='verified';_0x17a5c7[_0x50dd('0xc')][_0x410d8b['id']][_0x50dd('0x2d')][_0x50dd('0x14')]='';_0x17a5c7[_0x50dd('0xe')](_0x410d8b['id']);_0x1016c6(_0x4d32bb);})[_0x50dd('0x31')](function(_0xb08ae3){_0x17a5c7['mailAccounts'][_0x410d8b['id']]['Smtp']['status']='error';_0x17a5c7['mailAccounts'][_0x410d8b['id']][_0x50dd('0x2d')][_0x50dd('0x14')]=_0xb08ae3;_0x17a5c7[_0x50dd('0xe')](_0x410d8b['id']);_0x259fc2(_0xb08ae3);});});}return this[_0x50dd('0xd')][_0x50dd('0x2f')](_0x410d8b);};module[_0x50dd('0x32')]=EmailChannel;
\ No newline at end of file
index b8aadfe..3224e2b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd7d1=['end','handleSimpleParser','emit','parser','textCode','hasOwnProperty','upperFirst','exports','path','util','imap','lodash','randomstring','mailparser','simpleParser','events','EventEmitter','./utils','../../../config/logger','email','mailbox','INBOX','account','getAccount','once','ready','handleReady','bind','handleEnd','error','inherits','prototype','connTimeout','authTimeout','isNil','service','user','password','host','port','tls','autotls','required','getHost','handleOpenBox','box','handleCloseBox','handleError','readUnseen','UNSEEN','handleReadUnseen','fetch','message','handleFetchMessage','handleFetchError','handleFetchEnd','closeBox','body','handleMessageBody','attributes','handleMessageAttributes'];(function(_0x5c811c,_0x313b25){var _0x5df3af=function(_0x3460de){while(--_0x3460de){_0x5c811c['push'](_0x5c811c['shift']());}};_0x5df3af(++_0x313b25);}(_0xd7d1,0x1b3));var _0x1d7d=function(_0x383cce,_0x53e928){_0x383cce=_0x383cce-0x0;var _0x191385=_0xd7d1[_0x383cce];return _0x191385;};'use strict';var fs=require('fs');var path=require(_0x1d7d('0x0'));var util=require(_0x1d7d('0x1'));var Imap=require(_0x1d7d('0x2'));var _=require(_0x1d7d('0x3'));var rs=require(_0x1d7d('0x4'));var simpleParser=require(_0x1d7d('0x5'))[_0x1d7d('0x6')];var EventEmitter=require(_0x1d7d('0x7'))[_0x1d7d('0x8')];var utils=require(_0x1d7d('0x9'));var logger=require(_0x1d7d('0xa'))(_0x1d7d('0xb'));function EmailImap(_0x14b2b9,_0x5a8cf3){this[_0x1d7d('0xc')]=_0x1d7d('0xd');this[_0x1d7d('0xe')]=this[_0x1d7d('0xf')](_0x14b2b9,_0x5a8cf3);this[_0x1d7d('0x2')]=new Imap(this[_0x1d7d('0xe')]);this[_0x1d7d('0x2')][_0x1d7d('0x10')](_0x1d7d('0x11'),this[_0x1d7d('0x12')][_0x1d7d('0x13')](this));this['imap'][_0x1d7d('0x10')]('end',this[_0x1d7d('0x14')][_0x1d7d('0x13')](this));this[_0x1d7d('0x2')]['on'](_0x1d7d('0x15'),this['handleError'][_0x1d7d('0x13')](this));this['imap']['connect']();}util[_0x1d7d('0x16')](EmailImap,EventEmitter);EmailImap[_0x1d7d('0x17')]['getAccount']=function(_0x55dba7,_0x1d3822){var _0x334e78={'connTimeout':_0x55dba7[_0x1d7d('0x18')]?_0x55dba7[_0x1d7d('0x18')]*0x3e8:0x2710,'authTimeout':_0x55dba7[_0x1d7d('0x19')]?_0x55dba7['authTimeout']*0x3e8:0x1388};if(_[_0x1d7d('0x1a')](_0x55dba7[_0x1d7d('0x1b')])){if(_0x55dba7['authentication']){_0x334e78[_0x1d7d('0x1c')]=_0x55dba7[_0x1d7d('0x1c')];_0x334e78[_0x1d7d('0x1d')]=_0x55dba7[_0x1d7d('0x1d')];}_0x334e78[_0x1d7d('0x1e')]=_0x55dba7['host'];_0x334e78[_0x1d7d('0x1f')]=_0x55dba7[_0x1d7d('0x1f')]||0x3e1;if(_0x55dba7['tls']){_0x334e78['tls']=!![];}else{_0x334e78[_0x1d7d('0x20')]=![];_0x334e78[_0x1d7d('0x21')]=_0x1d7d('0x22');}}else{_0x334e78[_0x1d7d('0x1c')]=_0x55dba7[_0x1d7d('0x1c')];_0x334e78[_0x1d7d('0x1d')]=_0x55dba7['password'];_0x334e78[_0x1d7d('0x1e')]=utils[_0x1d7d('0x23')](_0x55dba7[_0x1d7d('0x1b')]);_0x334e78['port']=0x3e1;_0x334e78[_0x1d7d('0x20')]=!![];}_0x334e78[_0x1d7d('0xb')]=_0x1d3822||_0x55dba7['user']||'anonymous@xcally.com';return _0x334e78;};EmailImap[_0x1d7d('0x17')][_0x1d7d('0x12')]=function(){this[_0x1d7d('0x2')]['openBox'](this[_0x1d7d('0xc')],![],this[_0x1d7d('0x24')][_0x1d7d('0x13')](this));};EmailImap[_0x1d7d('0x17')]['handleOpenBox']=function(_0x233463,_0x151198){if(_0x233463){this['handleError'](_0x233463,!![]);}else{this['emit'](_0x1d7d('0x25'),_0x151198);this['readUnseen']();}};EmailImap[_0x1d7d('0x17')][_0x1d7d('0x26')]=function(_0x3bc6e8){if(_0x3bc6e8){this[_0x1d7d('0x27')](_0x3bc6e8,!![]);}else{this[_0x1d7d('0x2')]['end']();}};EmailImap[_0x1d7d('0x17')][_0x1d7d('0x28')]=function(){this[_0x1d7d('0x2')]['search']([_0x1d7d('0x29')],this[_0x1d7d('0x2a')][_0x1d7d('0x13')](this));};EmailImap['prototype']['handleReadUnseen']=function(_0x53e25c,_0x189a6a){if(_0x53e25c){this[_0x1d7d('0x27')](_0x53e25c,!![]);}else{if(_0x189a6a['length']){try{var _0x1ebcbc=this[_0x1d7d('0x2')][_0x1d7d('0x2b')](_0x189a6a,{'bodies':'','markSeen':!![]});_0x1ebcbc['on'](_0x1d7d('0x2c'),this[_0x1d7d('0x2d')][_0x1d7d('0x13')](this));_0x1ebcbc[_0x1d7d('0x10')](_0x1d7d('0x15'),this[_0x1d7d('0x2e')][_0x1d7d('0x13')](this));_0x1ebcbc['once']('end',this[_0x1d7d('0x2f')][_0x1d7d('0x13')](this));}catch(_0x90e852){logger[_0x1d7d('0x15')](_0x90e852);}}else{this[_0x1d7d('0x2')][_0x1d7d('0x30')](!![],this[_0x1d7d('0x26')][_0x1d7d('0x13')](this));}}};EmailImap[_0x1d7d('0x17')]['handleFetchMessage']=function(_0x2ac533,_0xf9d3e4){_0x2ac533['on'](_0x1d7d('0x31'),this[_0x1d7d('0x32')]['bind'](this));_0x2ac533['once'](_0x1d7d('0x33'),this[_0x1d7d('0x34')]['bind'](this));_0x2ac533[_0x1d7d('0x10')](_0x1d7d('0x35'),this['handleMessageEnd']['bind'](this));};EmailImap[_0x1d7d('0x17')][_0x1d7d('0x32')]=function(_0x406f57,_0x3f686d){simpleParser(_0x406f57,this[_0x1d7d('0x36')][_0x1d7d('0x13')](this));};EmailImap[_0x1d7d('0x17')][_0x1d7d('0x34')]=function(_0x405125){};EmailImap[_0x1d7d('0x17')]['handleMessageEnd']=function(){};EmailImap['prototype']['handleSimpleParser']=function(_0x5cab41,_0x137a62){if(_0x5cab41){logger['error'](_0x5cab41);}else{this[_0x1d7d('0x37')](_0x1d7d('0xb'),utils[_0x1d7d('0x38')](this['account'],_0x137a62));}};EmailImap[_0x1d7d('0x17')][_0x1d7d('0x2f')]=function(){this[_0x1d7d('0x2')]['closeBox'](!![],this[_0x1d7d('0x26')][_0x1d7d('0x13')](this));};EmailImap[_0x1d7d('0x17')][_0x1d7d('0x2e')]=function(_0x5eef0a){this[_0x1d7d('0x27')](_0x5eef0a);this[_0x1d7d('0x2')][_0x1d7d('0x30')](!![],this[_0x1d7d('0x26')]['bind'](this));};EmailImap[_0x1d7d('0x17')]['handleEnd']=function(){this[_0x1d7d('0x37')](_0x1d7d('0x35'));};EmailImap[_0x1d7d('0x17')][_0x1d7d('0x27')]=function(_0xf667a1,_0x4becec){logger['error'](_0x1d7d('0x27'),this[_0x1d7d('0xe')][_0x1d7d('0xb')],JSON['stringify'](_0xf667a1));var _0x4dd6ef='';if(_0xf667a1){if(_0xf667a1[_0x1d7d('0x39')]){_0x4dd6ef=_0xf667a1['textCode'];}else{for(var _0x86e7bc in _0xf667a1){if(_0xf667a1[_0x1d7d('0x3a')](_0x86e7bc)){_0x4dd6ef+=_[_0x1d7d('0x3b')](_0x86e7bc)+':\x20'+_0xf667a1[_0x86e7bc]+'\x0a';}}}}if(_0x4becec){this[_0x1d7d('0x2')][_0x1d7d('0x35')]();}else{this[_0x1d7d('0x37')](_0x1d7d('0x15'),_0x4dd6ef);this['emit'](_0x1d7d('0x35'));}};module[_0x1d7d('0x3c')]=EmailImap;
\ No newline at end of file
+var _0xe493=['handleMessageBody','attributes','handleMessageAttributes','handleMessageEnd','handleSimpleParser','emit','parser','handleFetchEnd','stringify','textCode','path','util','imap','lodash','randomstring','simpleParser','events','./utils','email','mailbox','INBOX','account','once','ready','handleReady','bind','end','handleEnd','handleError','connect','inherits','getAccount','connTimeout','authTimeout','isNil','service','authentication','user','password','host','port','tls','required','getHost','prototype','openBox','handleOpenBox','box','readUnseen','handleCloseBox','UNSEEN','handleReadUnseen','length','handleFetchMessage','error','handleFetchError','closeBox','body'];(function(_0x1015d6,_0x51e6ba){var _0x5b3c96=function(_0x759c5b){while(--_0x759c5b){_0x1015d6['push'](_0x1015d6['shift']());}};_0x5b3c96(++_0x51e6ba);}(_0xe493,0x7e));var _0x3e49=function(_0x22a8e8,_0x53c0c1){_0x22a8e8=_0x22a8e8-0x0;var _0x332c9c=_0xe493[_0x22a8e8];return _0x332c9c;};'use strict';var fs=require('fs');var path=require(_0x3e49('0x0'));var util=require(_0x3e49('0x1'));var Imap=require(_0x3e49('0x2'));var _=require(_0x3e49('0x3'));var rs=require(_0x3e49('0x4'));var simpleParser=require('mailparser')[_0x3e49('0x5')];var EventEmitter=require(_0x3e49('0x6'))['EventEmitter'];var utils=require(_0x3e49('0x7'));var logger=require('../../../config/logger')(_0x3e49('0x8'));function EmailImap(_0x2e79b6,_0x24f15c){this[_0x3e49('0x9')]=_0x3e49('0xa');this[_0x3e49('0xb')]=this['getAccount'](_0x2e79b6,_0x24f15c);this['imap']=new Imap(this['account']);this[_0x3e49('0x2')][_0x3e49('0xc')](_0x3e49('0xd'),this[_0x3e49('0xe')][_0x3e49('0xf')](this));this[_0x3e49('0x2')][_0x3e49('0xc')](_0x3e49('0x10'),this[_0x3e49('0x11')][_0x3e49('0xf')](this));this[_0x3e49('0x2')]['on']('error',this[_0x3e49('0x12')][_0x3e49('0xf')](this));this['imap'][_0x3e49('0x13')]();}util[_0x3e49('0x14')](EmailImap,EventEmitter);EmailImap['prototype'][_0x3e49('0x15')]=function(_0x40504b,_0x54463c){var _0x258db5={'connTimeout':_0x40504b[_0x3e49('0x16')]?_0x40504b[_0x3e49('0x16')]*0x3e8:0x2710,'authTimeout':_0x40504b[_0x3e49('0x17')]?_0x40504b[_0x3e49('0x17')]*0x3e8:0x1388};if(_[_0x3e49('0x18')](_0x40504b[_0x3e49('0x19')])){if(_0x40504b[_0x3e49('0x1a')]){_0x258db5[_0x3e49('0x1b')]=_0x40504b[_0x3e49('0x1b')];_0x258db5[_0x3e49('0x1c')]=_0x40504b[_0x3e49('0x1c')];}_0x258db5[_0x3e49('0x1d')]=_0x40504b[_0x3e49('0x1d')];_0x258db5[_0x3e49('0x1e')]=_0x40504b['port']||0x3e1;if(_0x40504b[_0x3e49('0x1f')]){_0x258db5['tls']=!![];}else{_0x258db5[_0x3e49('0x1f')]=![];_0x258db5['autotls']=_0x3e49('0x20');}}else{_0x258db5['user']=_0x40504b[_0x3e49('0x1b')];_0x258db5[_0x3e49('0x1c')]=_0x40504b[_0x3e49('0x1c')];_0x258db5['host']=utils[_0x3e49('0x21')](_0x40504b['service']);_0x258db5[_0x3e49('0x1e')]=0x3e1;_0x258db5[_0x3e49('0x1f')]=!![];}_0x258db5[_0x3e49('0x8')]=_0x54463c||_0x40504b['user']||'anonymous@xcally.com';return _0x258db5;};EmailImap[_0x3e49('0x22')]['handleReady']=function(){this[_0x3e49('0x2')][_0x3e49('0x23')](this['mailbox'],![],this['handleOpenBox'][_0x3e49('0xf')](this));};EmailImap['prototype'][_0x3e49('0x24')]=function(_0x301eaa,_0x1bdb3e){if(_0x301eaa){this[_0x3e49('0x12')](_0x301eaa,!![]);}else{this['emit'](_0x3e49('0x25'),_0x1bdb3e);this[_0x3e49('0x26')]();}};EmailImap[_0x3e49('0x22')][_0x3e49('0x27')]=function(_0x4665b4){if(_0x4665b4){this[_0x3e49('0x12')](_0x4665b4,!![]);}else{this[_0x3e49('0x2')][_0x3e49('0x10')]();}};EmailImap[_0x3e49('0x22')]['readUnseen']=function(){this['imap']['search']([_0x3e49('0x28')],this[_0x3e49('0x29')]['bind'](this));};EmailImap[_0x3e49('0x22')]['handleReadUnseen']=function(_0x1c7633,_0x1d19f4){if(_0x1c7633){this[_0x3e49('0x12')](_0x1c7633,!![]);}else{if(_0x1d19f4[_0x3e49('0x2a')]){try{var _0x4b4602=this[_0x3e49('0x2')]['fetch'](_0x1d19f4,{'bodies':'','markSeen':!![]});_0x4b4602['on']('message',this[_0x3e49('0x2b')][_0x3e49('0xf')](this));_0x4b4602[_0x3e49('0xc')](_0x3e49('0x2c'),this[_0x3e49('0x2d')][_0x3e49('0xf')](this));_0x4b4602[_0x3e49('0xc')](_0x3e49('0x10'),this['handleFetchEnd'][_0x3e49('0xf')](this));}catch(_0x3e36f0){logger[_0x3e49('0x2c')](_0x3e36f0);}}else{this[_0x3e49('0x2')][_0x3e49('0x2e')](!![],this[_0x3e49('0x27')][_0x3e49('0xf')](this));}}};EmailImap[_0x3e49('0x22')][_0x3e49('0x2b')]=function(_0x1886dd,_0x56f043){_0x1886dd['on'](_0x3e49('0x2f'),this[_0x3e49('0x30')][_0x3e49('0xf')](this));_0x1886dd[_0x3e49('0xc')](_0x3e49('0x31'),this[_0x3e49('0x32')][_0x3e49('0xf')](this));_0x1886dd[_0x3e49('0xc')](_0x3e49('0x10'),this[_0x3e49('0x33')]['bind'](this));};EmailImap['prototype'][_0x3e49('0x30')]=function(_0x33e514,_0x1677cd){simpleParser(_0x33e514,this[_0x3e49('0x34')][_0x3e49('0xf')](this));};EmailImap[_0x3e49('0x22')][_0x3e49('0x32')]=function(_0x4249d4){};EmailImap[_0x3e49('0x22')]['handleMessageEnd']=function(){};EmailImap['prototype']['handleSimpleParser']=function(_0x44c000,_0x2ad00b){if(_0x44c000){logger[_0x3e49('0x2c')](_0x44c000);}else{this[_0x3e49('0x35')]('email',utils[_0x3e49('0x36')](this['account'],_0x2ad00b));}};EmailImap['prototype'][_0x3e49('0x37')]=function(){this[_0x3e49('0x2')][_0x3e49('0x2e')](!![],this[_0x3e49('0x27')][_0x3e49('0xf')](this));};EmailImap[_0x3e49('0x22')][_0x3e49('0x2d')]=function(_0x211239){this['handleError'](_0x211239);this['imap'][_0x3e49('0x2e')](!![],this[_0x3e49('0x27')][_0x3e49('0xf')](this));};EmailImap['prototype']['handleEnd']=function(){this[_0x3e49('0x35')](_0x3e49('0x10'));};EmailImap[_0x3e49('0x22')][_0x3e49('0x12')]=function(_0x2f43f7,_0xc90278){logger[_0x3e49('0x2c')](_0x3e49('0x12'),this[_0x3e49('0xb')][_0x3e49('0x8')],JSON[_0x3e49('0x38')](_0x2f43f7));var _0x44a858='';if(_0x2f43f7){if(_0x2f43f7[_0x3e49('0x39')]){_0x44a858=_0x2f43f7[_0x3e49('0x39')];}else{for(var _0xb783d9 in _0x2f43f7){if(_0x2f43f7['hasOwnProperty'](_0xb783d9)){_0x44a858+=_['upperFirst'](_0xb783d9)+':\x20'+_0x2f43f7[_0xb783d9]+'\x0a';}}}}if(_0xc90278){this[_0x3e49('0x2')][_0x3e49('0x10')]();}else{this[_0x3e49('0x35')](_0x3e49('0x2c'),_0x44a858);this[_0x3e49('0x35')]('end');}};module['exports']=EmailImap;
\ No newline at end of file
index b30f212..1842c59 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f20=['createTransport','toString','Not\x20verifired','exports','nodemailer','bluebird','prototype','sendMail','verify'];(function(_0x152c4e,_0x3e5465){var _0x48edc6=function(_0x1a3664){while(--_0x1a3664){_0x152c4e['push'](_0x152c4e['shift']());}};_0x48edc6(++_0x3e5465);}(_0x9f20,0xaf));var _0x09f2=function(_0x1d89c4,_0x3db378){_0x1d89c4=_0x1d89c4-0x0;var _0x5a4d82=_0x9f20[_0x1d89c4];return _0x5a4d82;};'use strict';var nodemailer=require(_0x09f2('0x0'));var BPromise=require(_0x09f2('0x1'));function EmailSmtp(){}EmailSmtp[_0x09f2('0x2')]['send']=function(_0x3fa565,_0x4ccc91){return new BPromise(function(_0xa1cbaa,_0x4ad2a2){var _0x419fd7=nodemailer['createTransport'](_0x3fa565);_0x419fd7[_0x09f2('0x3')](_0x4ccc91,function(_0x1ca444,_0x57c79c){if(_0x1ca444){_0x4ad2a2(_0x1ca444['toString']());}else{_0xa1cbaa(_0x57c79c);}});});};EmailSmtp['prototype'][_0x09f2('0x4')]=function(_0x6e2191){return new BPromise(function(_0x59b477,_0x21d59c){var _0x1c172e=nodemailer[_0x09f2('0x5')](_0x6e2191);_0x1c172e[_0x09f2('0x4')](function(_0x3a9896,_0x596287){if(_0x3a9896){_0x21d59c(_0x3a9896[_0x09f2('0x6')]());}else{if(_0x596287){_0x59b477(_0x596287);}else{_0x21d59c(_0x09f2('0x7'));}}});});};module[_0x09f2('0x8')]=EmailSmtp;
\ No newline at end of file
+var _0xa206=['prototype','createTransport','sendMail','verify','toString','Not\x20verifired','nodemailer'];(function(_0x335f5c,_0xce622c){var _0x27458c=function(_0x108b7f){while(--_0x108b7f){_0x335f5c['push'](_0x335f5c['shift']());}};_0x27458c(++_0xce622c);}(_0xa206,0x15d));var _0x6a20=function(_0x5b162f,_0x4cc7bd){_0x5b162f=_0x5b162f-0x0;var _0x2881a1=_0xa206[_0x5b162f];return _0x2881a1;};'use strict';var nodemailer=require(_0x6a20('0x0'));var BPromise=require('bluebird');function EmailSmtp(){}EmailSmtp[_0x6a20('0x1')]['send']=function(_0x1280bc,_0x9a9329){return new BPromise(function(_0x4dda15,_0x198d2f){var _0x455ddb=nodemailer[_0x6a20('0x2')](_0x1280bc);_0x455ddb[_0x6a20('0x3')](_0x9a9329,function(_0x4d46d8,_0x3cb31b){if(_0x4d46d8){_0x198d2f(_0x4d46d8['toString']());}else{_0x4dda15(_0x3cb31b);}});});};EmailSmtp[_0x6a20('0x1')][_0x6a20('0x4')]=function(_0xbb4bac){return new BPromise(function(_0x18a837,_0x43b0e5){var _0x299878=nodemailer[_0x6a20('0x2')](_0xbb4bac);_0x299878[_0x6a20('0x4')](function(_0x462585,_0x107465){if(_0x462585){_0x43b0e5(_0x462585[_0x6a20('0x5')]());}else{if(_0x107465){_0x18a837(_0x107465);}else{_0x43b0e5(_0x6a20('0x6'));}}});});};module['exports']=EmailSmtp;
\ No newline at end of file
index 16d43b2..782137b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb162=['getHost','gmail','imap.gmail.com','yahoo','imap.mail.yahoo.com','hotmail','imap-mail.outlook.com','outlook.office365.com','127.0.0.1','lodash','moment','path','util','email','../../../config/environment','head','address','anonymous','generate','value','name','split','length','slice','join','Anonymous','pop','isEmpty','@xcally.com','parser','from','subject','messageId','inReplyTo','format','YYYY-MM-DD\x20HH:mm:ss','test','html','replace','textAsHtml','body','<a\x20target=\x22_blank\x22\x20','message','originTo','includes','originCc','bcc','attachments','type','attachment','attachment-','%s-%s','now','root','server/files/attachments/','writeFileSync','content','contentType'];(function(_0x51160c,_0x374b59){var _0x15a3fb=function(_0x5e81bc){while(--_0x5e81bc){_0x51160c['push'](_0x51160c['shift']());}};_0x15a3fb(++_0x374b59);}(_0xb162,0x165));var _0x2b16=function(_0x16d141,_0x249a33){_0x16d141=_0x16d141-0x0;var _0x367fac=_0xb162[_0x16d141];return _0x367fac;};'use strict';var _=require(_0x2b16('0x0'));var moment=require(_0x2b16('0x1'));var random=require('randomstring');var fs=require('fs');var path=require(_0x2b16('0x2'));var util=require(_0x2b16('0x3'));var logger=require('../../../config/logger')(_0x2b16('0x4'));var config=require(_0x2b16('0x5'));function getAddress(_0x2f7888){var _0x36a234=_[_0x2b16('0x6')](_0x2f7888['value']);return _0x36a234&&_0x36a234[_0x2b16('0x7')]?_0x36a234[_0x2b16('0x7')]:_0x2b16('0x8')+random[_0x2b16('0x9')](0x6)+'@xcally.com';}function getFirstName(_0x3e33e9){var _0x23d452=_[_0x2b16('0x6')](_0x3e33e9[_0x2b16('0xa')]);if(_0x23d452&&_0x23d452[_0x2b16('0xb')]){var _0x5607df=_0x23d452['name'][_0x2b16('0xc')](/\s+/);return _0x5607df[_0x2b16('0xd')]?_0x5607df[_0x2b16('0xe')](0x0,-0x1)[_0x2b16('0xf')]('\x20'):_0x23d452[_0x2b16('0xb')];}return _0x2b16('0x10');}function getLastName(_0x4c00ab){var _0x37771c=_[_0x2b16('0x6')](_0x4c00ab[_0x2b16('0xa')]);if(_0x37771c&&_0x37771c[_0x2b16('0xb')]){var _0x2a41e7=_0x37771c[_0x2b16('0xb')][_0x2b16('0xc')](/\s+/);return _0x2a41e7['length']>0x1?_0x2a41e7[_0x2b16('0x11')]():'';}return'';}function getMails(_0x5ede39,_0x3fa8a6){var _0x588d7a='';for(var _0x5ce8aa=0x0;_0x5ce8aa<_0x3fa8a6['value'][_0x2b16('0xd')];_0x5ce8aa+=0x1){if(_0x3fa8a6[_0x2b16('0xa')][_0x5ce8aa]['address']!==_0x5ede39){if(!_[_0x2b16('0x12')](_0x588d7a)){_0x588d7a+=',';}_0x588d7a+=_0x3fa8a6[_0x2b16('0xa')][_0x5ce8aa][_0x2b16('0xb')]||_0x3fa8a6['value'][_0x5ce8aa][_0x2b16('0x7')]||'';_0x588d7a+='\x20<';_0x588d7a+=_0x3fa8a6[_0x2b16('0xa')][_0x5ce8aa]['address']?_0x3fa8a6[_0x2b16('0xa')][_0x5ce8aa][_0x2b16('0x7')]:'anonymous'+random[_0x2b16('0x9')](0x6)+_0x2b16('0x13');_0x588d7a+='>';}}return _0x588d7a;}exports[_0x2b16('0x14')]=function(_0x1d9400,_0x3c9271){var _0x127e93={'from':getAddress(_0x3c9271[_0x2b16('0x15')]),'firstName':getFirstName(_0x3c9271[_0x2b16('0x15')]),'lastName':getLastName(_0x3c9271[_0x2b16('0x15')]),'mapKey':_0x2b16('0x4'),'message':{'from':getMails(_0x1d9400['email'],_0x3c9271[_0x2b16('0x15')]),'to':_0x1d9400['email'],'cc':'','subject':_0x3c9271[_0x2b16('0x16')]||'','messageId':_0x3c9271[_0x2b16('0x17')],'inReplyTo':_0x3c9271[_0x2b16('0x18')],'sentAt':moment(_0x3c9271['date'])[_0x2b16('0x19')](_0x2b16('0x1a')),'attach':![],'attachments':[]}};if(_0x3c9271['html']){var _0x1900f9=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;while(_0x1900f9[_0x2b16('0x1b')](_0x3c9271['html'])){_0x3c9271[_0x2b16('0x1c')]=_0x3c9271[_0x2b16('0x1c')][_0x2b16('0x1d')](_0x1900f9,'');}_0x127e93['body']=_0x3c9271[_0x2b16('0x1c')];}else{_0x127e93['body']=_0x3c9271[_0x2b16('0x1e')];}if(_0x127e93['body']){_0x127e93['body']=_0x127e93[_0x2b16('0x1f')][_0x2b16('0x1d')](/<a\s+/gi,_0x2b16('0x20'));}if(_0x3c9271['to']){_0x127e93[_0x2b16('0x21')][_0x2b16('0x22')]=getMails(null,_0x3c9271['to']);var _0xe0a0ff=getMails(_0x1d9400[_0x2b16('0x4')],_0x3c9271['to']);if(!_[_0x2b16('0x12')](_0xe0a0ff)){_0x127e93[_0x2b16('0x21')]['cc']+=_0xe0a0ff;}}if(_0x3c9271['cc']){_0x127e93[_0x2b16('0x21')]['originCc']=getMails(null,_0x3c9271['cc']);var _0x41beda=getMails(_0x1d9400[_0x2b16('0x4')],_0x3c9271['cc']);if(!_['isEmpty'](_0x41beda)){if(!_[_0x2b16('0x12')](_0x127e93[_0x2b16('0x21')]['cc'])){_0x127e93[_0x2b16('0x21')]['cc']+=',';}_0x127e93[_0x2b16('0x21')]['cc']+=_0x41beda;}}if(!_[_0x2b16('0x23')](_0x127e93[_0x2b16('0x21')]['originTo'],_0x1d9400['email'])&&!_['includes'](_0x127e93[_0x2b16('0x21')][_0x2b16('0x24')],_0x1d9400[_0x2b16('0x4')])){_0x127e93[_0x2b16('0x21')][_0x2b16('0x25')]=_0x1d9400[_0x2b16('0x4')];}if(_0x3c9271[_0x2b16('0x26')]&&_0x3c9271[_0x2b16('0x26')]['length']){_0x127e93[_0x2b16('0x21')]['attach']=_0x3c9271[_0x2b16('0x26')][_0x2b16('0xd')];for(var _0x2ddd99=0x0,_0x225f8d,_0x5c5619,_0x4d393f;_0x2ddd99<_0x3c9271[_0x2b16('0x26')][_0x2b16('0xd')];_0x2ddd99+=0x1){if(_0x3c9271[_0x2b16('0x26')][_0x2ddd99][_0x2b16('0x27')]===_0x2b16('0x28')){_0x4d393f=_0x3c9271[_0x2b16('0x26')][_0x2ddd99]['filename']||_0x2b16('0x29')+_0x2ddd99;_0x225f8d=util['format'](_0x2b16('0x2a'),Date[_0x2b16('0x2b')](),_0x4d393f);_0x5c5619=path[_0x2b16('0xf')](config[_0x2b16('0x2c')],_0x2b16('0x2d'),_0x225f8d);fs[_0x2b16('0x2e')](_0x5c5619,_0x3c9271[_0x2b16('0x26')][_0x2ddd99][_0x2b16('0x2f')]);_0x127e93[_0x2b16('0x21')]['attachments']['push']({'name':_0x4d393f,'basename':_0x225f8d,'type':_0x3c9271[_0x2b16('0x26')][_0x2ddd99][_0x2b16('0x30')],'filepath':_0x5c5619});}}}return _0x127e93;};exports[_0x2b16('0x31')]=function(_0x3fbf2d){switch(_0x3fbf2d){case _0x2b16('0x32'):return _0x2b16('0x33');case _0x2b16('0x34'):return _0x2b16('0x35');case _0x2b16('0x36'):return _0x2b16('0x37');case'outlook365':return _0x2b16('0x38');}return _0x2b16('0x39');};
\ No newline at end of file
+var _0xa73b=['outlook365','127.0.0.1','lodash','moment','path','util','email','head','value','address','anonymous','@xcally.com','name','split','Anonymous','length','generate','parser','from','subject','messageId','inReplyTo','date','format','html','test','replace','body','message','originTo','isEmpty','includes','originCc','bcc','attachments','attach','type','attachment','filename','%s-%s','join','root','writeFileSync','content','push','contentType','gmail','imap.gmail.com','yahoo','imap.mail.yahoo.com','hotmail','imap-mail.outlook.com'];(function(_0x313dab,_0x53179c){var _0x18ee37=function(_0x5f43a0){while(--_0x5f43a0){_0x313dab['push'](_0x313dab['shift']());}};_0x18ee37(++_0x53179c);}(_0xa73b,0x13a));var _0xba73=function(_0x3cfd48,_0x2a8bdf){_0x3cfd48=_0x3cfd48-0x0;var _0x20748e=_0xa73b[_0x3cfd48];return _0x20748e;};'use strict';var _=require(_0xba73('0x0'));var moment=require(_0xba73('0x1'));var random=require('randomstring');var fs=require('fs');var path=require(_0xba73('0x2'));var util=require(_0xba73('0x3'));var logger=require('../../../config/logger')(_0xba73('0x4'));var config=require('../../../config/environment');function getAddress(_0x15fca8){var _0x428351=_[_0xba73('0x5')](_0x15fca8[_0xba73('0x6')]);return _0x428351&&_0x428351[_0xba73('0x7')]?_0x428351[_0xba73('0x7')]:_0xba73('0x8')+random['generate'](0x6)+_0xba73('0x9');}function getFirstName(_0x384f3e){var _0x5ed39e=_[_0xba73('0x5')](_0x384f3e[_0xba73('0x6')]);if(_0x5ed39e&&_0x5ed39e[_0xba73('0xa')]){var _0x515c8b=_0x5ed39e['name'][_0xba73('0xb')](/\s+/);return _0x515c8b['length']?_0x515c8b['slice'](0x0,-0x1)['join']('\x20'):_0x5ed39e[_0xba73('0xa')];}return _0xba73('0xc');}function getLastName(_0x409f6f){var _0x3a6b55=_['head'](_0x409f6f[_0xba73('0x6')]);if(_0x3a6b55&&_0x3a6b55[_0xba73('0xa')]){var _0x473e51=_0x3a6b55[_0xba73('0xa')][_0xba73('0xb')](/\s+/);return _0x473e51['length']>0x1?_0x473e51['pop']():'';}return'';}function getMails(_0xacb8e6,_0x5906c2){var _0x2559c5='';for(var _0xbb7ec0=0x0;_0xbb7ec0<_0x5906c2[_0xba73('0x6')][_0xba73('0xd')];_0xbb7ec0+=0x1){if(_0x5906c2[_0xba73('0x6')][_0xbb7ec0][_0xba73('0x7')]!==_0xacb8e6){if(!_['isEmpty'](_0x2559c5)){_0x2559c5+=',';}_0x2559c5+=_0x5906c2[_0xba73('0x6')][_0xbb7ec0][_0xba73('0xa')]||_0x5906c2[_0xba73('0x6')][_0xbb7ec0]['address']||'';_0x2559c5+='\x20<';_0x2559c5+=_0x5906c2[_0xba73('0x6')][_0xbb7ec0]['address']?_0x5906c2[_0xba73('0x6')][_0xbb7ec0][_0xba73('0x7')]:_0xba73('0x8')+random[_0xba73('0xe')](0x6)+_0xba73('0x9');_0x2559c5+='>';}}return _0x2559c5;}exports[_0xba73('0xf')]=function(_0x6d2085,_0x52e6a3){var _0x42b896={'from':getAddress(_0x52e6a3['from']),'firstName':getFirstName(_0x52e6a3[_0xba73('0x10')]),'lastName':getLastName(_0x52e6a3['from']),'mapKey':_0xba73('0x4'),'message':{'from':getMails(_0x6d2085[_0xba73('0x4')],_0x52e6a3[_0xba73('0x10')]),'to':_0x6d2085[_0xba73('0x4')],'cc':'','subject':_0x52e6a3[_0xba73('0x11')]||'','messageId':_0x52e6a3[_0xba73('0x12')],'inReplyTo':_0x52e6a3[_0xba73('0x13')],'sentAt':moment(_0x52e6a3[_0xba73('0x14')])[_0xba73('0x15')]('YYYY-MM-DD\x20HH:mm:ss'),'attach':![],'attachments':[]}};if(_0x52e6a3[_0xba73('0x16')]){var _0x2405f4=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;while(_0x2405f4[_0xba73('0x17')](_0x52e6a3[_0xba73('0x16')])){_0x52e6a3[_0xba73('0x16')]=_0x52e6a3['html'][_0xba73('0x18')](_0x2405f4,'');}_0x42b896[_0xba73('0x19')]=_0x52e6a3['html'];}else{_0x42b896[_0xba73('0x19')]=_0x52e6a3['textAsHtml'];}if(_0x42b896[_0xba73('0x19')]){_0x42b896[_0xba73('0x19')]=_0x42b896['body']['replace'](/<a\s+/gi,'<a\x20target=\x22_blank\x22\x20');}if(_0x52e6a3['to']){_0x42b896[_0xba73('0x1a')][_0xba73('0x1b')]=getMails(null,_0x52e6a3['to']);var _0x3d9bbf=getMails(_0x6d2085[_0xba73('0x4')],_0x52e6a3['to']);if(!_[_0xba73('0x1c')](_0x3d9bbf)){_0x42b896['message']['cc']+=_0x3d9bbf;}}if(_0x52e6a3['cc']){_0x42b896['message']['originCc']=getMails(null,_0x52e6a3['cc']);var _0x27dfb4=getMails(_0x6d2085[_0xba73('0x4')],_0x52e6a3['cc']);if(!_['isEmpty'](_0x27dfb4)){if(!_['isEmpty'](_0x42b896['message']['cc'])){_0x42b896['message']['cc']+=',';}_0x42b896[_0xba73('0x1a')]['cc']+=_0x27dfb4;}}if(!_[_0xba73('0x1d')](_0x42b896[_0xba73('0x1a')][_0xba73('0x1b')],_0x6d2085[_0xba73('0x4')])&&!_[_0xba73('0x1d')](_0x42b896[_0xba73('0x1a')][_0xba73('0x1e')],_0x6d2085['email'])){_0x42b896[_0xba73('0x1a')][_0xba73('0x1f')]=_0x6d2085[_0xba73('0x4')];}if(_0x52e6a3[_0xba73('0x20')]&&_0x52e6a3[_0xba73('0x20')][_0xba73('0xd')]){_0x42b896['message'][_0xba73('0x21')]=_0x52e6a3[_0xba73('0x20')][_0xba73('0xd')];for(var _0x394733=0x0,_0x37078d,_0x10a34b,_0x4d95e9;_0x394733<_0x52e6a3[_0xba73('0x20')][_0xba73('0xd')];_0x394733+=0x1){if(_0x52e6a3[_0xba73('0x20')][_0x394733][_0xba73('0x22')]===_0xba73('0x23')){_0x4d95e9=_0x52e6a3[_0xba73('0x20')][_0x394733][_0xba73('0x24')]||'attachment-'+_0x394733;_0x37078d=util['format'](_0xba73('0x25'),Date['now'](),_0x4d95e9);_0x10a34b=path[_0xba73('0x26')](config[_0xba73('0x27')],'server/files/attachments/',_0x37078d);fs[_0xba73('0x28')](_0x10a34b,_0x52e6a3[_0xba73('0x20')][_0x394733][_0xba73('0x29')]);_0x42b896[_0xba73('0x1a')]['attachments'][_0xba73('0x2a')]({'name':_0x4d95e9,'basename':_0x37078d,'type':_0x52e6a3[_0xba73('0x20')][_0x394733][_0xba73('0x2b')],'filepath':_0x10a34b});}}}return _0x42b896;};exports['getHost']=function(_0x3a48a1){switch(_0x3a48a1){case _0xba73('0x2c'):return _0xba73('0x2d');case _0xba73('0x2e'):return _0xba73('0x2f');case _0xba73('0x30'):return _0xba73('0x31');case _0xba73('0x32'):return'outlook.office365.com';}return _0xba73('0x33');};
\ No newline at end of file
index e72ef3a..0617846 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x51a5=['Smtp','exports','name','Service','key','SERV','active','Imap'];(function(_0x297fd3,_0x115406){var _0x2af381=function(_0x1dd31b){while(--_0x1dd31b){_0x297fd3['push'](_0x297fd3['shift']());}};_0x2af381(++_0x115406);}(_0x51a5,0xda));var _0x551a=function(_0x5e035e,_0x200d26){_0x5e035e=_0x5e035e-0x0;var _0x2a5ef8=_0x51a5[_0x5e035e];return _0x2a5ef8;};'use strict';var _=require('lodash');function MailAccount(_0x4c24d2){this['id']=_0x4c24d2['id']||0x0;this[_0x551a('0x0')]=_0x4c24d2[_0x551a('0x0')]||_0x551a('0x1');this[_0x551a('0x2')]=_0x4c24d2[_0x551a('0x2')]||_0x551a('0x3');this['active']=_0x4c24d2[_0x551a('0x4')]||![];this[_0x551a('0x5')]=_0x4c24d2[_0x551a('0x5')]||[];this[_0x551a('0x6')]=_0x4c24d2[_0x551a('0x6')]||[];}module[_0x551a('0x7')]=MailAccount;
\ No newline at end of file
+var _0x9e79=['Imap','Smtp','exports','name','Service','key','active'];(function(_0x164eca,_0x555e28){var _0x2ce562=function(_0x148ca6){while(--_0x148ca6){_0x164eca['push'](_0x164eca['shift']());}};_0x2ce562(++_0x555e28);}(_0x9e79,0xc7));var _0x99e7=function(_0x56c614,_0x483965){_0x56c614=_0x56c614-0x0;var _0xe2fe00=_0x9e79[_0x56c614];return _0xe2fe00;};'use strict';var _=require('lodash');function MailAccount(_0x11bad7){this['id']=_0x11bad7['id']||0x0;this[_0x99e7('0x0')]=_0x11bad7[_0x99e7('0x0')]||_0x99e7('0x1');this[_0x99e7('0x2')]=_0x11bad7[_0x99e7('0x2')]||'SERV';this[_0x99e7('0x3')]=_0x11bad7[_0x99e7('0x3')]||![];this[_0x99e7('0x4')]=_0x11bad7[_0x99e7('0x4')]||[];this[_0x99e7('0x5')]=_0x11bad7[_0x99e7('0x5')]||[];}module[_0x99e7('0x6')]=MailAccount;
\ No newline at end of file
index 2080309..abf7ee5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6d38=['mailAccounts','prototype','mergeFromDatabase','initMailAccounts','isUndefined','merge','exports','../model/mailAccount'];(function(_0x22957a,_0x3c5d56){var _0x5b1ba4=function(_0x1c3553){while(--_0x1c3553){_0x22957a['push'](_0x22957a['shift']());}};_0x5b1ba4(++_0x3c5d56);}(_0x6d38,0x1ef));var _0x86d3=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0x6d38[_0x3947c9];return _0x2e7871;};'use strict';var _=require('lodash');var MailAccount=require(_0x86d3('0x0'));var Realtime=function(){this[_0x86d3('0x1')]={};};function freeIsNotKey(_0x3db243,_0x52d138,_0x5c0b77){var _0xd1c7c=_['mapKeys'](_0x3db243,function(_0xe9198a,_0x455b9d){return _0xe9198a[_0x5c0b77];});for(var _0x2501dd in _0x52d138){if(_0x52d138['hasOwnProperty'](_0x2501dd)){if(!_0xd1c7c[_0x2501dd]){delete _0x52d138[_0x2501dd];}}}}Realtime[_0x86d3('0x2')][_0x86d3('0x3')]=function(_0x33d4aa,_0x2eaa15){for(var _0x47e654 in _0x2eaa15){if(_0x33d4aa['hasOwnProperty'](_0x47e654)){_0x33d4aa[_0x47e654]=_0x2eaa15[_0x47e654];}}};Realtime[_0x86d3('0x2')][_0x86d3('0x4')]=function(){var _0xf273f5=this;return function(_0x499640){if(_0x499640){freeIsNotKey(_0x499640,_0xf273f5['mailAccounts'],'id');for(var _0x3ed317=0x0,_0x555e6d={},_0x49b436={};_0x3ed317<_0x499640['length'];_0x3ed317+=0x1){_0x555e6d=_0x499640[_0x3ed317];if(_[_0x86d3('0x5')](_0xf273f5[_0x86d3('0x1')][_0x555e6d['id']])){_0xf273f5['mailAccounts'][_0x555e6d['id']]=new MailAccount(_0x555e6d);}else{_[_0x86d3('0x6')](_0xf273f5['mailAccounts'][_0x555e6d['id']],_0x555e6d);}}}return _0xf273f5[_0x86d3('0x1')];};};module[_0x86d3('0x7')]=Realtime;
\ No newline at end of file
+var _0xa456=['length','merge','lodash','../model/mailAccount','mailAccounts','mapKeys','hasOwnProperty','prototype'];(function(_0x32729c,_0xf5afd8){var _0x482cfd=function(_0x231471){while(--_0x231471){_0x32729c['push'](_0x32729c['shift']());}};_0x482cfd(++_0xf5afd8);}(_0xa456,0x142));var _0x6a45=function(_0x39e84d,_0x11931d){_0x39e84d=_0x39e84d-0x0;var _0x1991bc=_0xa456[_0x39e84d];return _0x1991bc;};'use strict';var _=require(_0x6a45('0x0'));var MailAccount=require(_0x6a45('0x1'));var Realtime=function(){this[_0x6a45('0x2')]={};};function freeIsNotKey(_0xd5464e,_0x587626,_0x3bfbe6){var _0x206f6b=_[_0x6a45('0x3')](_0xd5464e,function(_0x500c72,_0x1f0701){return _0x500c72[_0x3bfbe6];});for(var _0x40acad in _0x587626){if(_0x587626[_0x6a45('0x4')](_0x40acad)){if(!_0x206f6b[_0x40acad]){delete _0x587626[_0x40acad];}}}}Realtime[_0x6a45('0x5')]['mergeFromDatabase']=function(_0x25cf8d,_0x26bfc0){for(var _0x214514 in _0x26bfc0){if(_0x25cf8d[_0x6a45('0x4')](_0x214514)){_0x25cf8d[_0x214514]=_0x26bfc0[_0x214514];}}};Realtime[_0x6a45('0x5')]['initMailAccounts']=function(){var _0x3a5c20=this;return function(_0x517040){if(_0x517040){freeIsNotKey(_0x517040,_0x3a5c20[_0x6a45('0x2')],'id');for(var _0x3a9671=0x0,_0x35ed96={},_0x147679={};_0x3a9671<_0x517040[_0x6a45('0x6')];_0x3a9671+=0x1){_0x35ed96=_0x517040[_0x3a9671];if(_['isUndefined'](_0x3a5c20['mailAccounts'][_0x35ed96['id']])){_0x3a5c20[_0x6a45('0x2')][_0x35ed96['id']]=new MailAccount(_0x35ed96);}else{_[_0x6a45('0x7')](_0x3a5c20['mailAccounts'][_0x35ed96['id']],_0x35ed96);}}}return _0x3a5c20['mailAccounts'];};};module['exports']=Realtime;
\ No newline at end of file
index 240e07c..0fd4396 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe803=['key','ListId','MailServerIn','Imap','MailServerOut','Smtp','NotifyMailAccount','../client','getMailAccounts','Request','name','service','email','active'];(function(_0x58ee96,_0x5affd5){var _0xb346aa=function(_0x245b1a){while(--_0x245b1a){_0x58ee96['push'](_0x58ee96['shift']());}};_0xb346aa(++_0x5affd5);}(_0xe803,0x1ab));var _0x3e80=function(_0x3ff3cf,_0x570e6a){_0x3ff3cf=_0x3ff3cf-0x0;var _0x1d0965=_0xe803[_0x3ff3cf];return _0x1d0965;};'use strict';var client=require(_0x3e80('0x0'));exports[_0x3e80('0x1')]=function(){return function(){return client[_0x3e80('0x2')]('GetMailAccount',{'options':{'attributes':['id',_0x3e80('0x3'),_0x3e80('0x4'),_0x3e80('0x5'),_0x3e80('0x6'),_0x3e80('0x7'),_0x3e80('0x8'),'TemplateId'],'raw':![],'include':[{'model':_0x3e80('0x9'),'as':_0x3e80('0xa')},{'model':_0x3e80('0xb'),'as':_0x3e80('0xc')}]},'log':'getMailAccount'});};};exports['notify']=function(_0x26cb6e,_0x2e1024){return client['Request'](_0x3e80('0xd'),{'account':{'id':_0x26cb6e},'body':_0x2e1024,'log':'NotifyMailAccount'});};
\ No newline at end of file
+var _0xf596=['MailServerOut','getMailAccount','notify','NotifyMailAccount','../client','Request','GetMailAccount','name','service','active','key','ListId','MailServerIn','Imap'];(function(_0x5359c0,_0x14266b){var _0x2c088b=function(_0x4b7fb0){while(--_0x4b7fb0){_0x5359c0['push'](_0x5359c0['shift']());}};_0x2c088b(++_0x14266b);}(_0xf596,0x66));var _0x6f59=function(_0x395e8b,_0x119f5f){_0x395e8b=_0x395e8b-0x0;var _0x1c65b9=_0xf596[_0x395e8b];return _0x1c65b9;};'use strict';var client=require(_0x6f59('0x0'));exports['getMailAccounts']=function(){return function(){return client[_0x6f59('0x1')](_0x6f59('0x2'),{'options':{'attributes':['id',_0x6f59('0x3'),_0x6f59('0x4'),'email',_0x6f59('0x5'),_0x6f59('0x6'),_0x6f59('0x7'),'TemplateId'],'raw':![],'include':[{'model':_0x6f59('0x8'),'as':_0x6f59('0x9')},{'model':_0x6f59('0xa'),'as':'Smtp'}]},'log':_0x6f59('0xb')});};};exports[_0x6f59('0xc')]=function(_0x34ddcb,_0x28c536){return client[_0x6f59('0x1')](_0x6f59('0xd'),{'account':{'id':_0x34ddcb},'body':_0x28c536,'log':'NotifyMailAccount'});};
\ No newline at end of file
index 172a2c0..d7a59fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4fad=['listen','sendMail','account','message','then','error','verifySmtp','Verified','catch','values','length','Imap','password','Smtp','pass','stringify','127.0.0.1','log','RPC\x20listening\x20on\x20port:','jayson/promise','bluebird','lodash','email'];(function(_0x1dc976,_0x2d4fe6){var _0x24a024=function(_0x52e89b){while(--_0x52e89b){_0x1dc976['push'](_0x1dc976['shift']());}};_0x24a024(++_0x2d4fe6);}(_0x4fad,0xcb));var _0xd4fa=function(_0xaff2d0,_0x495196){_0xaff2d0=_0xaff2d0-0x0;var _0x242809=_0x4fad[_0xaff2d0];return _0x242809;};'use strict';var jayson=require(_0xd4fa('0x0'));var BPromise=require(_0xd4fa('0x1'));var _=require(_0xd4fa('0x2'));var logger=require('../../../config/logger')(_0xd4fa('0x3'));exports[_0xd4fa('0x4')]=function(_0x174360,_0x3fc857){return new BPromise(function(_0x419a9c,_0x3903a1){var _0x138bcb={'SendMail':function(_0x2f65a2){var _0x597fbe=this;return new Promise(function(_0x2d4e07,_0x52b426){_0x3fc857[_0xd4fa('0x5')](_0x2f65a2[_0xd4fa('0x6')],_0x2f65a2[_0xd4fa('0x7')])[_0xd4fa('0x8')](function(_0x58d2cd){_0x2d4e07({'code':0xc8,'message':_0x58d2cd});})['catch'](function(_0x26a894){_0x52b426(_0x597fbe[_0xd4fa('0x9')](0x1f4,_0x26a894));});});},'VerifySmtp':function(_0x4623ba){var _0x5b5443=this;return new Promise(function(_0x2df3c5,_0x612e9d){_0x3fc857[_0xd4fa('0xa')](_0x4623ba[_0xd4fa('0x6')])['then'](function(_0x109893){_0x2df3c5({'code':0xc8,'message':_0xd4fa('0xb')});})[_0xd4fa('0xc')](function(_0x50f53d){_0x612e9d(_0x5b5443[_0xd4fa('0x9')](0x1f4,_0x50f53d));});});},'MailAccounts':function(_0x2fe7b7){return new Promise(function(_0x31c3ba,_0xadc145){var _0x29876a=_[_0xd4fa('0xd')](_0x174360['mailAccounts']);for(var _0x29e101=0x0;_0x29e101<_0x29876a[_0xd4fa('0xe')];_0x29e101+=0x1){if(_0x29876a[_0x29e101][_0xd4fa('0xf')]&&_0x29876a[_0x29e101][_0xd4fa('0xf')][_0xd4fa('0x10')]){delete _0x29876a[_0x29e101][_0xd4fa('0xf')][_0xd4fa('0x10')];}if(_0x29876a[_0x29e101]['Smtp']&&_0x29876a[_0x29e101][_0xd4fa('0x11')][_0xd4fa('0x12')]){delete _0x29876a[_0x29e101][_0xd4fa('0x11')]['pass'];}}_0x31c3ba({'count':_0x29876a['length'],'rows':_0x29876a});});}};var _0x1faa0b=jayson['server'](_0x138bcb)['http']();_0x1faa0b['on'](_0xd4fa('0x9'),function(_0x628bc7){logger[_0xd4fa('0x9')](JSON[_0xd4fa('0x13')](_0x628bc7));return _0x3903a1(_0x628bc7);});_0x1faa0b['listen'](0x232b,_0xd4fa('0x14'),function(){console[_0xd4fa('0x15')]('Email\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!',0x232b);return _0x419a9c(_0xd4fa('0x16')+0x232b);});});};
\ No newline at end of file
+var _0xd237=['verifySmtp','Verified','mailAccounts','length','Imap','password','Smtp','pass','server','http','stringify','log','Email\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','jayson/promise','bluebird','lodash','../../../config/logger','listen','account','message','then','catch','error'];(function(_0x18daeb,_0x1b8ff3){var _0x425a30=function(_0x271e0c){while(--_0x271e0c){_0x18daeb['push'](_0x18daeb['shift']());}};_0x425a30(++_0x1b8ff3);}(_0xd237,0x14f));var _0x7d23=function(_0x2e9187,_0x3763f6){_0x2e9187=_0x2e9187-0x0;var _0x1fc3a8=_0xd237[_0x2e9187];return _0x1fc3a8;};'use strict';var jayson=require(_0x7d23('0x0'));var BPromise=require(_0x7d23('0x1'));var _=require(_0x7d23('0x2'));var logger=require(_0x7d23('0x3'))('email');exports[_0x7d23('0x4')]=function(_0x1dec6d,_0x469551){return new BPromise(function(_0x22efd7,_0x160178){var _0x14977a={'SendMail':function(_0x52ad33){var _0x24f10b=this;return new Promise(function(_0x5e9d09,_0x5ca126){_0x469551['sendMail'](_0x52ad33[_0x7d23('0x5')],_0x52ad33[_0x7d23('0x6')])[_0x7d23('0x7')](function(_0x3953dc){_0x5e9d09({'code':0xc8,'message':_0x3953dc});})[_0x7d23('0x8')](function(_0x23f1d6){_0x5ca126(_0x24f10b[_0x7d23('0x9')](0x1f4,_0x23f1d6));});});},'VerifySmtp':function(_0x2bcd72){var _0x566db0=this;return new Promise(function(_0x25675b,_0x4aebf8){_0x469551[_0x7d23('0xa')](_0x2bcd72['account'])[_0x7d23('0x7')](function(_0x5457d2){_0x25675b({'code':0xc8,'message':_0x7d23('0xb')});})[_0x7d23('0x8')](function(_0x8a9ac1){_0x4aebf8(_0x566db0[_0x7d23('0x9')](0x1f4,_0x8a9ac1));});});},'MailAccounts':function(_0x3b0b15){return new Promise(function(_0x3434ce,_0x403a99){var _0x5567ce=_['values'](_0x1dec6d[_0x7d23('0xc')]);for(var _0xf1db40=0x0;_0xf1db40<_0x5567ce[_0x7d23('0xd')];_0xf1db40+=0x1){if(_0x5567ce[_0xf1db40][_0x7d23('0xe')]&&_0x5567ce[_0xf1db40]['Imap'][_0x7d23('0xf')]){delete _0x5567ce[_0xf1db40]['Imap'][_0x7d23('0xf')];}if(_0x5567ce[_0xf1db40]['Smtp']&&_0x5567ce[_0xf1db40][_0x7d23('0x10')][_0x7d23('0x11')]){delete _0x5567ce[_0xf1db40][_0x7d23('0x10')][_0x7d23('0x11')];}}_0x3434ce({'count':_0x5567ce[_0x7d23('0xd')],'rows':_0x5567ce});});}};var _0x506a3b=jayson[_0x7d23('0x12')](_0x14977a)[_0x7d23('0x13')]();_0x506a3b['on']('error',function(_0x1a65e8){logger[_0x7d23('0x9')](JSON[_0x7d23('0x14')](_0x1a65e8));return _0x160178(_0x1a65e8);});_0x506a3b['listen'](0x232b,'127.0.0.1',function(){console[_0x7d23('0x15')](_0x7d23('0x16'),0x232b);return _0x22efd7('RPC\x20listening\x20on\x20port:'+0x232b);});});};
\ No newline at end of file
index 200b503..46dd58f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0fd4=['default','../../config/socketio','../../config/express','../../routes','once','listening','log','Express\x20server\x20listening\x20on\x20port\x20%d!','exports','http','sticky-session','../../config/environment','createServer','timeout','listen','port','websocket','polling','adapter','socket.io-redis','../../config/triggers'];(function(_0x37dc1d,_0xbf91ef){var _0x4ac931=function(_0x1a45dd){while(--_0x1a45dd){_0x37dc1d['push'](_0x37dc1d['shift']());}};_0x4ac931(++_0xbf91ef);}(_0x0fd4,0x9c));var _0x40fd=function(_0x4f11cb,_0x14e174){_0x4f11cb=_0x4f11cb-0x0;var _0x491488=_0x0fd4[_0x4f11cb];return _0x491488;};'use strict';var http=require(_0x40fd('0x0'));var express=require('express');var sticky=require(_0x40fd('0x1'));var config=require(_0x40fd('0x2'));var app=express();var server=http[_0x40fd('0x3')](app);server[_0x40fd('0x4')]=0xdbba0;if(sticky[_0x40fd('0x5')](server,config[_0x40fd('0x6')])){var socketio=require('socket.io')(server,{'transports':[_0x40fd('0x7'),_0x40fd('0x8')]});socketio[_0x40fd('0x9')](require(_0x40fd('0xa'))({'host':'localhost','port':0x18eb}));require(_0x40fd('0xb'))[_0x40fd('0xc')]();require(_0x40fd('0xd'))[_0x40fd('0xc')](socketio);require(_0x40fd('0xe'))[_0x40fd('0xc')](app);require(_0x40fd('0xf'))[_0x40fd('0xc')](app);}else{server[_0x40fd('0x10')](_0x40fd('0x11'),function(){console[_0x40fd('0x12')](_0x40fd('0x13'),config['port']);});}exports=module[_0x40fd('0x14')]=app;
\ No newline at end of file
+var _0x8f57=['once','listening','port','exports','http','express','sticky-session','createServer','timeout','listen','socket.io','websocket','localhost','default','../../config/socketio','../../config/express'];(function(_0x225f9a,_0x23dbd2){var _0x5216cc=function(_0x291012){while(--_0x291012){_0x225f9a['push'](_0x225f9a['shift']());}};_0x5216cc(++_0x23dbd2);}(_0x8f57,0x94));var _0x78f5=function(_0x168c60,_0x539d96){_0x168c60=_0x168c60-0x0;var _0x29bea4=_0x8f57[_0x168c60];return _0x29bea4;};'use strict';var http=require(_0x78f5('0x0'));var express=require(_0x78f5('0x1'));var sticky=require(_0x78f5('0x2'));var config=require('../../config/environment');var app=express();var server=http[_0x78f5('0x3')](app);server[_0x78f5('0x4')]=0xdbba0;if(sticky[_0x78f5('0x5')](server,config['port'])){var socketio=require(_0x78f5('0x6'))(server,{'transports':[_0x78f5('0x7'),'polling']});socketio['adapter'](require('socket.io-redis')({'host':_0x78f5('0x8'),'port':0x18eb}));require('../../config/triggers')[_0x78f5('0x9')]();require(_0x78f5('0xa'))[_0x78f5('0x9')](socketio);require(_0x78f5('0xb'))['default'](app);require('../../routes')['default'](app);}else{server[_0x78f5('0xc')](_0x78f5('0xd'),function(){console['log']('Express\x20server\x20listening\x20on\x20port\x20%d!',config[_0x78f5('0xe')]);});}exports=module[_0x78f5('0xf')]=app;
\ No newline at end of file
index 2a6f7a8..5875917 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc818=['catch','exports','jayson/promise','bluebird','../../config/logger','routing','http','Request','request','debug','rpc','error','message'];(function(_0x239494,_0x428248){var _0x5d45ff=function(_0x87689d){while(--_0x87689d){_0x239494['push'](_0x239494['shift']());}};_0x5d45ff(++_0x428248);}(_0xc818,0x1e3));var _0x8c81=function(_0x2f3b8f,_0xdc0145){_0x2f3b8f=_0x2f3b8f-0x0;var _0x1bb9d8=_0xc818[_0x2f3b8f];return _0x1bb9d8;};'use strict';var jayson=require(_0x8c81('0x0'));var BPromise=require(_0x8c81('0x1'));var logger=require(_0x8c81('0x2'))(_0x8c81('0x3'));var client=jayson['client'][_0x8c81('0x4')]({'port':0x2329});client[_0x8c81('0x5')]=function(_0x40b19e,_0x7e329f){return new BPromise(function(_0x1a61ab,_0xb97ac){return client[_0x8c81('0x6')](_0x40b19e,_0x7e329f)['then'](function(_0x2c5966){logger[_0x8c81('0x7')](_0x8c81('0x8'),_0x8c81('0x3'),_0x40b19e,_0x7e329f,_0x2c5966);if(_0x2c5966['error']){logger[_0x8c81('0x9')](_0x8c81('0x8'),_0x8c81('0x3'),_0x40b19e,_0x2c5966[_0x8c81('0x9')][_0x8c81('0xa')],_0x7e329f);return _0xb97ac(_0x2c5966[_0x8c81('0x9')][_0x8c81('0xa')]);}else{return _0x1a61ab(_0x2c5966['result']);}})[_0x8c81('0xb')](function(_0x37dbb4){logger[_0x8c81('0x9')](_0x8c81('0x8'),'routing',_0x40b19e,_0x37dbb4,_0x7e329f);return _0xb97ac(_0x37dbb4);});});};module[_0x8c81('0xc')]=client;
\ No newline at end of file
+var _0x53d5=['http','Request','request','then','debug','rpc','error','message','result','exports','jayson/promise','bluebird','../../config/logger','routing','client'];(function(_0x2c7dc6,_0x3c4ce0){var _0x10002b=function(_0x26f390){while(--_0x26f390){_0x2c7dc6['push'](_0x2c7dc6['shift']());}};_0x10002b(++_0x3c4ce0);}(_0x53d5,0x1cc));var _0x553d=function(_0x404a11,_0x268dc0){_0x404a11=_0x404a11-0x0;var _0x435823=_0x53d5[_0x404a11];return _0x435823;};'use strict';var jayson=require(_0x553d('0x0'));var BPromise=require(_0x553d('0x1'));var logger=require(_0x553d('0x2'))(_0x553d('0x3'));var client=jayson[_0x553d('0x4')][_0x553d('0x5')]({'port':0x2329});client[_0x553d('0x6')]=function(_0x55d785,_0xd5d2f7){return new BPromise(function(_0x9e2c06,_0x6fead9){return client[_0x553d('0x7')](_0x55d785,_0xd5d2f7)[_0x553d('0x8')](function(_0x5328ca){logger[_0x553d('0x9')](_0x553d('0xa'),_0x553d('0x3'),_0x55d785,_0xd5d2f7,_0x5328ca);if(_0x5328ca[_0x553d('0xb')]){logger[_0x553d('0xb')](_0x553d('0xa'),_0x553d('0x3'),_0x55d785,_0x5328ca[_0x553d('0xb')][_0x553d('0xc')],_0xd5d2f7);return _0x6fead9(_0x5328ca[_0x553d('0xb')][_0x553d('0xc')]);}else{return _0x9e2c06(_0x5328ca[_0x553d('0xd')]);}})['catch'](function(_0x540bde){logger[_0x553d('0xb')]('rpc',_0x553d('0x3'),_0x55d785,_0x540bde,_0xd5d2f7);return _0x6fead9(_0x540bde);});});};module[_0x553d('0xe')]=client;
\ No newline at end of file
index 99f4077..c0f09fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe99d=['getFaxQueues','listen','catch','log','bluebird','./server','./realtime','./rpc/interval','./rpc/openchannelQueue','./rpc/smsQueue','./rpc/mailQueue','./rpc/faxQueue','then','initAgents','getIntervals','initIntervals','getOpenchannelQueues','initOpenchannelQueues','getChatQueues','initChatQueues','initSmsQueues','getMailQueues','initMailQueues'];(function(_0x15dbe7,_0x502038){var _0xab114e=function(_0x2a4fad){while(--_0x2a4fad){_0x15dbe7['push'](_0x15dbe7['shift']());}};_0xab114e(++_0x502038);}(_0xe99d,0x146));var _0xde99=function(_0x36fc68,_0x4eb903){_0x36fc68=_0x36fc68-0x0;var _0x4adbf8=_0xe99d[_0x36fc68];return _0x4adbf8;};'use strict';var BPromise=require(_0xde99('0x0'));var server=require(_0xde99('0x1'));var Realtime=require(_0xde99('0x2'));var user=require('./rpc/user');var interval=require(_0xde99('0x3'));var openchannelQueue=require(_0xde99('0x4'));var chatQueue=require('./rpc/chatQueue');var smsQueue=require(_0xde99('0x5'));var mailQueue=require(_0xde99('0x6'));var faxQueue=require(_0xde99('0x7'));var realtime=new Realtime();function initRealtime(){return BPromise['resolve']()[_0xde99('0x8')](user['getAgents']())['then'](realtime[_0xde99('0x9')]())['then'](interval[_0xde99('0xa')]())[_0xde99('0x8')](realtime[_0xde99('0xb')]())[_0xde99('0x8')](openchannelQueue[_0xde99('0xc')]())['then'](realtime[_0xde99('0xd')]())[_0xde99('0x8')](chatQueue[_0xde99('0xe')]())[_0xde99('0x8')](realtime[_0xde99('0xf')]())[_0xde99('0x8')](smsQueue['getSmsQueues']())[_0xde99('0x8')](realtime[_0xde99('0x10')]())[_0xde99('0x8')](mailQueue[_0xde99('0x11')]())['then'](realtime[_0xde99('0x12')]())['then'](faxQueue[_0xde99('0x13')]())[_0xde99('0x8')](realtime['initFaxQueues']())['then'](function(){return realtime;});}function main(){return server[_0xde99('0x14')](realtime)[_0xde99('0x8')](function(_0x3e9219){return initRealtime();})[_0xde99('0x8')](function(_0x57bdb1){return setInterval(initRealtime,0x1388);})[_0xde99('0x15')](function(_0x43a2cd){console[_0xde99('0x16')](_0x43a2cd);});}main();
\ No newline at end of file
+var _0x5dc5=['initAgents','getIntervals','initIntervals','initOpenchannelQueues','initChatQueues','getSmsQueues','getMailQueues','getFaxQueues','initFaxQueues','listen','catch','./server','./realtime','./rpc/user','./rpc/interval','./rpc/openchannelQueue','./rpc/chatQueue','./rpc/mailQueue','./rpc/faxQueue','resolve','then','getAgents'];(function(_0x40ee30,_0x21dba4){var _0x36951f=function(_0x350f8a){while(--_0x350f8a){_0x40ee30['push'](_0x40ee30['shift']());}};_0x36951f(++_0x21dba4);}(_0x5dc5,0x113));var _0x55dc=function(_0x27a0f0,_0x168b83){_0x27a0f0=_0x27a0f0-0x0;var _0x4da9fe=_0x5dc5[_0x27a0f0];return _0x4da9fe;};'use strict';var BPromise=require('bluebird');var server=require(_0x55dc('0x0'));var Realtime=require(_0x55dc('0x1'));var user=require(_0x55dc('0x2'));var interval=require(_0x55dc('0x3'));var openchannelQueue=require(_0x55dc('0x4'));var chatQueue=require(_0x55dc('0x5'));var smsQueue=require('./rpc/smsQueue');var mailQueue=require(_0x55dc('0x6'));var faxQueue=require(_0x55dc('0x7'));var realtime=new Realtime();function initRealtime(){return BPromise[_0x55dc('0x8')]()[_0x55dc('0x9')](user[_0x55dc('0xa')]())['then'](realtime[_0x55dc('0xb')]())[_0x55dc('0x9')](interval[_0x55dc('0xc')]())[_0x55dc('0x9')](realtime[_0x55dc('0xd')]())['then'](openchannelQueue['getOpenchannelQueues']())[_0x55dc('0x9')](realtime[_0x55dc('0xe')]())[_0x55dc('0x9')](chatQueue['getChatQueues']())[_0x55dc('0x9')](realtime[_0x55dc('0xf')]())[_0x55dc('0x9')](smsQueue[_0x55dc('0x10')]())[_0x55dc('0x9')](realtime['initSmsQueues']())[_0x55dc('0x9')](mailQueue[_0x55dc('0x11')]())[_0x55dc('0x9')](realtime['initMailQueues']())[_0x55dc('0x9')](faxQueue[_0x55dc('0x12')]())[_0x55dc('0x9')](realtime[_0x55dc('0x13')]())[_0x55dc('0x9')](function(){return realtime;});}function main(){return server[_0x55dc('0x14')](realtime)[_0x55dc('0x9')](function(_0x3d39a6){return initRealtime();})[_0x55dc('0x9')](function(_0x2221f3){return setInterval(initRealtime,0x1388);})[_0x55dc('0x15')](function(_0x51337d){console['log'](_0x51337d);});}main();
\ No newline at end of file
index 3049df8..cb1be7c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb4f2=['register','isArray','rules','isObject','sync','filter','orderBy','execute','result','clone','consequence','ruleRef','name','call','nextTick','next','restart','length','condition','noop','findRules','matches','turn','prioritize','priority','toString','fromJSON','isString','parse','object','exports','lodash','init','isNil','ignoreFactChanges','prototype','activeRules'];(function(_0x27d8fe,_0x1ebda8){var _0x5dc8e0=function(_0x1eb851){while(--_0x1eb851){_0x27d8fe['push'](_0x27d8fe['shift']());}};_0x5dc8e0(++_0x1ebda8);}(_0xb4f2,0x16c));var _0x2b4f=function(_0x39ff4e,_0x3db2c5){_0x39ff4e=_0x39ff4e-0x0;var _0x40a50a=_0xb4f2[_0x39ff4e];return _0x40a50a;};'use strict';var _=require(_0x2b4f('0x0'));function RuleEngine(_0x15a5e6,_0x23ba57){this[_0x2b4f('0x1')]();if(!_[_0x2b4f('0x2')](_0x15a5e6)){this['register'](_0x15a5e6);}if(_0x23ba57){this[_0x2b4f('0x3')]=_0x23ba57['ignoreFactChanges'];}return this;}RuleEngine[_0x2b4f('0x4')][_0x2b4f('0x1')]=function(_0x486888){this['rules']=[];this[_0x2b4f('0x5')]=[];};RuleEngine['prototype'][_0x2b4f('0x6')]=function(_0x346ce6){if(Array[_0x2b4f('0x7')](_0x346ce6)){this['rules']=this[_0x2b4f('0x8')]['concat'](_0x346ce6);}else if(_0x346ce6!==null&&_[_0x2b4f('0x9')](_0x346ce6)){this[_0x2b4f('0x8')]['push'](_0x346ce6);}this[_0x2b4f('0xa')]();};RuleEngine['prototype'][_0x2b4f('0xa')]=function(){this[_0x2b4f('0x5')]=this[_0x2b4f('0x8')][_0x2b4f('0xb')](function(_0x5e855a){if(_[_0x2b4f('0x2')](_0x5e855a['on'])){_0x5e855a['on']=!![];}if(_0x5e855a['on']===!![]){return _0x5e855a;}});this[_0x2b4f('0x5')]=_[_0x2b4f('0xc')](this[_0x2b4f('0x5')],['p'],['asc']);};RuleEngine[_0x2b4f('0x4')][_0x2b4f('0xd')]=function(_0x330bd4,_0x512113){var _0xc5b0f6=![];_0x330bd4[_0x2b4f('0xe')]=!![];var _0x2ea5ee=_[_0x2b4f('0xf')](_0x330bd4);var _0x23a849=_[_0x2b4f('0xf')](_0x330bd4);var _0x6558b=this[_0x2b4f('0x5')];var _0x2738b8=[];var _0x316d55=this[_0x2b4f('0x3')];(function FnRuleLoop(_0x589028){var _0x3d9819={'rules':function(){return _0x6558b;},'rule':function(){return _0x6558b[_0x589028];},'when':function(_0xd7e109){if(_0xd7e109){var _0x7630fc=_0x6558b[_0x589028][_0x2b4f('0x10')];_0x7630fc[_0x2b4f('0x11')]=_0x6558b[_0x589028]['id']||_0x6558b[_0x589028][_0x2b4f('0x12')]||'index_'+_0x589028;process['nextTick'](function(){_0x2738b8['push'](_0x7630fc[_0x2b4f('0x11')]);_0x7630fc[_0x2b4f('0x13')](_0x2ea5ee,_0x3d9819);});}else{process[_0x2b4f('0x14')](function(){_0x3d9819[_0x2b4f('0x15')]();});}},'restart':function(){return FnRuleLoop(0x0);},'stop':function(){_0xc5b0f6=!![];return FnRuleLoop(0x0);},'next':function(_0x78602f){if(!_0x316d55&&!_['isEqual'](_0x23a849,_0x2ea5ee)){_0x23a849=_[_0x2b4f('0xf')](_0x2ea5ee);process[_0x2b4f('0x14')](function(){_0x3d9819[_0x2b4f('0x16')]();});}else{process['nextTick'](function(){if(_[_0x2b4f('0x2')](_0x78602f)){return FnRuleLoop(_0x589028+0x1);}else{return FnRuleLoop(_0x78602f);}});}}};if(_0x589028<_0x6558b[_0x2b4f('0x17')]&&_0xc5b0f6===![]){var _0x592bf3=_0x6558b[_0x589028][_0x2b4f('0x18')];_0x592bf3['call'](_0x2ea5ee,_0x3d9819);}else{process[_0x2b4f('0x14')](function(){_0x2ea5ee['matchPath']=_0x2738b8;return _0x512113?_0x512113(_0x2ea5ee):_[_0x2b4f('0x19')]();});}}(0x0));};RuleEngine[_0x2b4f('0x4')][_0x2b4f('0x1a')]=function(_0x305ddf){if(_[_0x2b4f('0x2')](_0x305ddf)){return this['rules'];}else{var _0x153341=_[_0x2b4f('0x1b')](_0x305ddf);return _[_0x2b4f('0xb')](this[_0x2b4f('0x8')],_0x153341);}};RuleEngine[_0x2b4f('0x4')][_0x2b4f('0x1c')]=function(_0xd04ec0,_0x102ac6){var _0xd04ec0=_0xd04ec0==='on'||_0xd04ec0==='ON'?!![]:![];var _0x242d87=this[_0x2b4f('0x1a')](_0x102ac6);for(var _0x57d58b=0x0,_0x3fff87=_0x242d87[_0x2b4f('0x17')];_0x57d58b<_0x3fff87;_0x57d58b+=0x1){_0x242d87[_0x57d58b]['on']=_0xd04ec0;}this['sync']();};RuleEngine[_0x2b4f('0x4')][_0x2b4f('0x1d')]=function(_0x5193ed,_0x37183c){_0x5193ed=parseInt(_0x5193ed,0xa);var _0x48529c=this[_0x2b4f('0x1a')](_0x37183c);for(var _0x213247=0x0,_0x28f18c=_0x48529c[_0x2b4f('0x17')];_0x213247<_0x28f18c;_0x213247+=0x1){_0x48529c[_0x213247][_0x2b4f('0x1e')]=_0x5193ed;}this['sync']();};RuleEngine[_0x2b4f('0x4')]['toJSON']=function(){var _0x2f376c=this['rules'];if(_0x2f376c instanceof Array){_0x2f376c=_0x2f376c['map'](function(_0x4fe34e){_0x4fe34e['condition']=_0x4fe34e[_0x2b4f('0x18')][_0x2b4f('0x1f')]();_0x4fe34e[_0x2b4f('0x10')]=_0x4fe34e[_0x2b4f('0x10')][_0x2b4f('0x1f')]();return _0x4fe34e;});}else if(!_['isNil'](_0x2f376c)){_0x2f376c[_0x2b4f('0x18')]=_0x2f376c[_0x2b4f('0x18')][_0x2b4f('0x1f')]();_0x2f376c[_0x2b4f('0x10')]=_0x2f376c['consequence'][_0x2b4f('0x1f')]();}return _0x2f376c;};RuleEngine[_0x2b4f('0x4')][_0x2b4f('0x20')]=function(_0x2da351){this[_0x2b4f('0x1')]();if(_[_0x2b4f('0x21')](_0x2da351)){_0x2da351=JSON[_0x2b4f('0x22')](_0x2da351);}if(_0x2da351 instanceof Array){_0x2da351=_0x2da351['map'](function(_0x402706){_0x402706[_0x2b4f('0x18')]=eval('('+_0x402706[_0x2b4f('0x18')]+')');_0x402706[_0x2b4f('0x10')]=eval('('+_0x402706[_0x2b4f('0x10')]+')');return _0x402706;});}else if(_0x2da351!==null&&typeof _0x2da351==_0x2b4f('0x23')){_0x2da351['condition']=eval('('+_0x2da351[_0x2b4f('0x18')]+')');_0x2da351['consequence']=eval('('+_0x2da351[_0x2b4f('0x10')]+')');}this[_0x2b4f('0x6')](_0x2da351);};module[_0x2b4f('0x24')]=RuleEngine;
\ No newline at end of file
+var _0x0dfc=['call','next','isEqual','condition','noop','turn','findRules','priority','toJSON','toString','fromJSON','parse','map','object','exports','lodash','init','isNil','ignoreFactChanges','prototype','rules','activeRules','register','isArray','concat','isObject','push','sync','filter','orderBy','asc','execute','result','clone','consequence','ruleRef','name','nextTick'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x0dfc,0x18b));var _0xc0df=function(_0x4f8d55,_0x5581c8){_0x4f8d55=_0x4f8d55-0x0;var _0x3c672b=_0x0dfc[_0x4f8d55];return _0x3c672b;};'use strict';var _=require(_0xc0df('0x0'));function RuleEngine(_0x593e06,_0x4ca448){this[_0xc0df('0x1')]();if(!_[_0xc0df('0x2')](_0x593e06)){this['register'](_0x593e06);}if(_0x4ca448){this[_0xc0df('0x3')]=_0x4ca448[_0xc0df('0x3')];}return this;}RuleEngine[_0xc0df('0x4')][_0xc0df('0x1')]=function(_0x3b9a56){this[_0xc0df('0x5')]=[];this[_0xc0df('0x6')]=[];};RuleEngine[_0xc0df('0x4')][_0xc0df('0x7')]=function(_0x4d7d78){if(Array[_0xc0df('0x8')](_0x4d7d78)){this[_0xc0df('0x5')]=this[_0xc0df('0x5')][_0xc0df('0x9')](_0x4d7d78);}else if(_0x4d7d78!==null&&_[_0xc0df('0xa')](_0x4d7d78)){this['rules'][_0xc0df('0xb')](_0x4d7d78);}this[_0xc0df('0xc')]();};RuleEngine[_0xc0df('0x4')][_0xc0df('0xc')]=function(){this[_0xc0df('0x6')]=this['rules'][_0xc0df('0xd')](function(_0x1847f8){if(_[_0xc0df('0x2')](_0x1847f8['on'])){_0x1847f8['on']=!![];}if(_0x1847f8['on']===!![]){return _0x1847f8;}});this['activeRules']=_[_0xc0df('0xe')](this[_0xc0df('0x6')],['p'],[_0xc0df('0xf')]);};RuleEngine[_0xc0df('0x4')][_0xc0df('0x10')]=function(_0x345df1,_0x3060ff){var _0x459e70=![];_0x345df1[_0xc0df('0x11')]=!![];var _0x4b03ce=_[_0xc0df('0x12')](_0x345df1);var _0x3b7f5a=_[_0xc0df('0x12')](_0x345df1);var _0x7b3db8=this[_0xc0df('0x6')];var _0x3d3218=[];var _0x5408e2=this['ignoreFactChanges'];(function FnRuleLoop(_0x14eede){var _0x3e3259={'rules':function(){return _0x7b3db8;},'rule':function(){return _0x7b3db8[_0x14eede];},'when':function(_0x20fcaa){if(_0x20fcaa){var _0x2f93e1=_0x7b3db8[_0x14eede][_0xc0df('0x13')];_0x2f93e1[_0xc0df('0x14')]=_0x7b3db8[_0x14eede]['id']||_0x7b3db8[_0x14eede][_0xc0df('0x15')]||'index_'+_0x14eede;process[_0xc0df('0x16')](function(){_0x3d3218['push'](_0x2f93e1[_0xc0df('0x14')]);_0x2f93e1[_0xc0df('0x17')](_0x4b03ce,_0x3e3259);});}else{process[_0xc0df('0x16')](function(){_0x3e3259[_0xc0df('0x18')]();});}},'restart':function(){return FnRuleLoop(0x0);},'stop':function(){_0x459e70=!![];return FnRuleLoop(0x0);},'next':function(_0x58b3d2){if(!_0x5408e2&&!_[_0xc0df('0x19')](_0x3b7f5a,_0x4b03ce)){_0x3b7f5a=_['clone'](_0x4b03ce);process[_0xc0df('0x16')](function(){_0x3e3259['restart']();});}else{process['nextTick'](function(){if(_[_0xc0df('0x2')](_0x58b3d2)){return FnRuleLoop(_0x14eede+0x1);}else{return FnRuleLoop(_0x58b3d2);}});}}};if(_0x14eede<_0x7b3db8['length']&&_0x459e70===![]){var _0x494310=_0x7b3db8[_0x14eede][_0xc0df('0x1a')];_0x494310[_0xc0df('0x17')](_0x4b03ce,_0x3e3259);}else{process[_0xc0df('0x16')](function(){_0x4b03ce['matchPath']=_0x3d3218;return _0x3060ff?_0x3060ff(_0x4b03ce):_[_0xc0df('0x1b')]();});}}(0x0));};RuleEngine[_0xc0df('0x4')]['findRules']=function(_0x4facaf){if(_[_0xc0df('0x2')](_0x4facaf)){return this[_0xc0df('0x5')];}else{var _0x36d2b8=_['matches'](_0x4facaf);return _[_0xc0df('0xd')](this[_0xc0df('0x5')],_0x36d2b8);}};RuleEngine[_0xc0df('0x4')][_0xc0df('0x1c')]=function(_0x89b17f,_0x59bd7b){var _0x89b17f=_0x89b17f==='on'||_0x89b17f==='ON'?!![]:![];var _0x1d1e6e=this[_0xc0df('0x1d')](_0x59bd7b);for(var _0x26d333=0x0,_0xc0708=_0x1d1e6e['length'];_0x26d333<_0xc0708;_0x26d333+=0x1){_0x1d1e6e[_0x26d333]['on']=_0x89b17f;}this['sync']();};RuleEngine['prototype']['prioritize']=function(_0x1e7807,_0x2092a6){_0x1e7807=parseInt(_0x1e7807,0xa);var _0x1849a7=this['findRules'](_0x2092a6);for(var _0x5ce3b4=0x0,_0x25c731=_0x1849a7['length'];_0x5ce3b4<_0x25c731;_0x5ce3b4+=0x1){_0x1849a7[_0x5ce3b4][_0xc0df('0x1e')]=_0x1e7807;}this[_0xc0df('0xc')]();};RuleEngine['prototype'][_0xc0df('0x1f')]=function(){var _0xd6d2d8=this[_0xc0df('0x5')];if(_0xd6d2d8 instanceof Array){_0xd6d2d8=_0xd6d2d8['map'](function(_0x1f64a2){_0x1f64a2[_0xc0df('0x1a')]=_0x1f64a2['condition'][_0xc0df('0x20')]();_0x1f64a2[_0xc0df('0x13')]=_0x1f64a2[_0xc0df('0x13')]['toString']();return _0x1f64a2;});}else if(!_[_0xc0df('0x2')](_0xd6d2d8)){_0xd6d2d8[_0xc0df('0x1a')]=_0xd6d2d8['condition'][_0xc0df('0x20')]();_0xd6d2d8[_0xc0df('0x13')]=_0xd6d2d8['consequence']['toString']();}return _0xd6d2d8;};RuleEngine[_0xc0df('0x4')][_0xc0df('0x21')]=function(_0x3cba6b){this[_0xc0df('0x1')]();if(_['isString'](_0x3cba6b)){_0x3cba6b=JSON[_0xc0df('0x22')](_0x3cba6b);}if(_0x3cba6b instanceof Array){_0x3cba6b=_0x3cba6b[_0xc0df('0x23')](function(_0x1b6f48){_0x1b6f48[_0xc0df('0x1a')]=eval('('+_0x1b6f48[_0xc0df('0x1a')]+')');_0x1b6f48['consequence']=eval('('+_0x1b6f48[_0xc0df('0x13')]+')');return _0x1b6f48;});}else if(_0x3cba6b!==null&&typeof _0x3cba6b==_0xc0df('0x24')){_0x3cba6b['condition']=eval('('+_0x3cba6b['condition']+')');_0x3cba6b[_0xc0df('0x13')]=eval('('+_0x3cba6b[_0xc0df('0x13')]+')');}this[_0xc0df('0x7')](_0x3cba6b);};module[_0xc0df('0x25')]=RuleEngine;
\ No newline at end of file
index 86b6913..3ca5e41 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['result','catch','sendMailMessage','SendMail','bluebird','jayson/promise','client','http','request','error','message'];(function(_0x7e4a7e,_0x3d3a90){var _0x31975f=function(_0x503ebf){while(--_0x503ebf){_0x7e4a7e['push'](_0x7e4a7e['shift']());}};_0x31975f(++_0x3d3a90);}(_0x9957,0x93));var _0x7995=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x9957[_0x3b380d];return _0x54502b;};'use strict';var BPromise=require(_0x7995('0x0'));var jayson=require(_0x7995('0x1'));var client=jayson[_0x7995('0x2')][_0x7995('0x3')]({'port':0x232b});function request(_0x5b96eb,_0x86c128){return new BPromise(function(_0x3c58eb,_0x1902b4){return client[_0x7995('0x4')](_0x5b96eb,_0x86c128)['then'](function(_0x744bea){if(_0x744bea[_0x7995('0x5')]){return _0x1902b4(_0x744bea[_0x7995('0x5')][_0x7995('0x6')]);}else{return _0x3c58eb(_0x744bea[_0x7995('0x7')]);}})[_0x7995('0x8')](function(_0x4996ca){return _0x1902b4(_0x4996ca);});});}exports[_0x7995('0x9')]=function(_0x1cad37,_0x4a64f7){return request(_0x7995('0xa'),{'account':_0x1cad37,'message':_0x4a64f7});};
\ No newline at end of file
+var _0x9957=['result','catch','sendMailMessage','SendMail','bluebird','jayson/promise','client','http','request','error','message'];(function(_0x85caa1,_0x201564){var _0x5ab29f=function(_0x512a19){while(--_0x512a19){_0x85caa1['push'](_0x85caa1['shift']());}};_0x5ab29f(++_0x201564);}(_0x9957,0x93));var _0x7995=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0x9957[_0x6131cd];return _0x47e916;};'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 d7405ba..c9b57d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2be6=['updateRealtime','getChannelStatus','CurrentCapacity','Capacity','maxcapacity','idle','prototype','mail','chat','fax','sms','length','Status','emit','user:save','exports','lodash','socket.io-emitter','localhost','name','online','voicePause','chatPause','mailPause','faxPause','smsPause','openchannelPause','chatStatus','unknown','chatCapacity','mailStatus','mailStatusTime','mailCapacity','faxStatus','faxStatusTime','faxCapacity','faxCurrentCapacity','smsStatus','smsStatusTime','smsCapacity','smsCurrentCapacity','openchannelStatus','openchannelCapacity','openchannelCurrentCapacity','busy'];(function(_0xb24a3e,_0x4a3594){var _0x4038d7=function(_0x1ea3c3){while(--_0x1ea3c3){_0xb24a3e['push'](_0xb24a3e['shift']());}};_0x4038d7(++_0x4a3594);}(_0x2be6,0x97));var _0x62be=function(_0xb196a9,_0x12ef4c){_0xb196a9=_0xb196a9-0x0;var _0x4d899b=_0x2be6[_0xb196a9];return _0x4d899b;};'use strict';var _=require(_0x62be('0x0'));var moment=require('moment');var io=require(_0x62be('0x1'))({'host':_0x62be('0x2'),'port':0x18eb});function Agent(_0x5739af){this['id']=_0x5739af['id']||0x0;this[_0x62be('0x3')]=_0x5739af[_0x62be('0x3')]||'';this[_0x62be('0x4')]=_0x5739af['online']||!![];this[_0x62be('0x5')]=_0x5739af[_0x62be('0x5')]||![];this[_0x62be('0x6')]=_0x5739af[_0x62be('0x6')]||![];this[_0x62be('0x7')]=_0x5739af['mailPause']||![];this[_0x62be('0x8')]=_0x5739af['faxPause']||![];this[_0x62be('0x9')]=_0x5739af[_0x62be('0x9')]||![];this[_0x62be('0xa')]=_0x5739af['openchannelPause']||![];this[_0x62be('0xb')]=_0x62be('0xc');this['chatStatusTime']=0x0;this[_0x62be('0xd')]=_0x5739af[_0x62be('0xd')]||0x0;this['chatCurrentCapacity']=0x0;this[_0x62be('0xe')]=_0x62be('0xc');this[_0x62be('0xf')]=0x0;this[_0x62be('0x10')]=_0x5739af[_0x62be('0x10')]||0x0;this['mailCurrentCapacity']=0x0;this[_0x62be('0x11')]=_0x62be('0xc');this[_0x62be('0x12')]=0x0;this[_0x62be('0x13')]=_0x5739af[_0x62be('0x13')]||0x0;this[_0x62be('0x14')]=0x0;this[_0x62be('0x15')]=_0x62be('0xc');this[_0x62be('0x16')]=0x0;this['smsCapacity']=_0x5739af[_0x62be('0x17')]||0x0;this[_0x62be('0x18')]=0x0;this[_0x62be('0x19')]=_0x62be('0xc');this['openchannelStatusTime']=0x0;this[_0x62be('0x1a')]=_0x5739af[_0x62be('0x1a')]||0x0;this[_0x62be('0x1b')]=0x0;this[_0x62be('0x1c')]=![];this['busyQueue']=undefined;this[_0x62be('0x1d')]();}Agent['prototype'][_0x62be('0x1e')]=function(_0x352c12){if(this[_0x352c12+_0x62be('0x1f')]>0x0){if(this[_0x352c12+_0x62be('0x20')]>0x0&&this[_0x352c12+_0x62be('0x1f')]>=this[_0x352c12+_0x62be('0x20')]){return _0x62be('0x21');}else{return'working';}}else{return _0x62be('0x22');}};Agent[_0x62be('0x23')][_0x62be('0x1d')]=function(){var _0x25c611=[_0x62be('0x24'),_0x62be('0x25'),'openchannel',_0x62be('0x26'),_0x62be('0x27')];for(var _0x279579=0x0;_0x279579<_0x25c611[_0x62be('0x28')];_0x279579+=0x1){var _0x47db99=this['getChannelStatus'](_0x25c611[_0x279579]);if(this[_0x25c611[_0x279579]+_0x62be('0x29')]!==_0x47db99){this[_0x25c611[_0x279579]+'StatusTime']=_['toNumber'](moment()['format']('x'));}this[_0x25c611[_0x279579]+_0x62be('0x29')]=_0x47db99;}io[_0x62be('0x2a')](_0x62be('0x2b'),this);};module[_0x62be('0x2c')]=Agent;
\ No newline at end of file
+var _0x26fa=['openchannel','fax','length','Status','StatusTime','emit','lodash','moment','socket.io-emitter','localhost','name','online','voicePause','chatPause','mailPause','faxPause','smsPause','openchannelPause','chatStatus','unknown','chatStatusTime','chatCurrentCapacity','mailStatus','mailCapacity','mailCurrentCapacity','faxStatus','faxStatusTime','smsStatus','smsStatusTime','smsCapacity','smsCurrentCapacity','openchannelStatus','openchannelStatusTime','openchannelCapacity','busyQueue','updateRealtime','prototype','getChannelStatus','CurrentCapacity','Capacity','maxcapacity','idle','chat'];(function(_0x6536d0,_0xb7da1f){var _0x168b2f=function(_0x41242a){while(--_0x41242a){_0x6536d0['push'](_0x6536d0['shift']());}};_0x168b2f(++_0xb7da1f);}(_0x26fa,0xb2));var _0xa26f=function(_0x3e1f31,_0x4d7c43){_0x3e1f31=_0x3e1f31-0x0;var _0x2d9e37=_0x26fa[_0x3e1f31];return _0x2d9e37;};'use strict';var _=require(_0xa26f('0x0'));var moment=require(_0xa26f('0x1'));var io=require(_0xa26f('0x2'))({'host':_0xa26f('0x3'),'port':0x18eb});function Agent(_0x230b50){this['id']=_0x230b50['id']||0x0;this[_0xa26f('0x4')]=_0x230b50['name']||'';this[_0xa26f('0x5')]=_0x230b50['online']||!![];this[_0xa26f('0x6')]=_0x230b50[_0xa26f('0x6')]||![];this['chatPause']=_0x230b50[_0xa26f('0x7')]||![];this[_0xa26f('0x8')]=_0x230b50[_0xa26f('0x8')]||![];this['faxPause']=_0x230b50[_0xa26f('0x9')]||![];this['smsPause']=_0x230b50[_0xa26f('0xa')]||![];this[_0xa26f('0xb')]=_0x230b50[_0xa26f('0xb')]||![];this[_0xa26f('0xc')]=_0xa26f('0xd');this[_0xa26f('0xe')]=0x0;this['chatCapacity']=_0x230b50['chatCapacity']||0x0;this[_0xa26f('0xf')]=0x0;this[_0xa26f('0x10')]=_0xa26f('0xd');this['mailStatusTime']=0x0;this['mailCapacity']=_0x230b50[_0xa26f('0x11')]||0x0;this[_0xa26f('0x12')]=0x0;this[_0xa26f('0x13')]=_0xa26f('0xd');this[_0xa26f('0x14')]=0x0;this['faxCapacity']=_0x230b50['faxCapacity']||0x0;this['faxCurrentCapacity']=0x0;this[_0xa26f('0x15')]='unknown';this[_0xa26f('0x16')]=0x0;this[_0xa26f('0x17')]=_0x230b50[_0xa26f('0x17')]||0x0;this[_0xa26f('0x18')]=0x0;this[_0xa26f('0x19')]='unknown';this[_0xa26f('0x1a')]=0x0;this[_0xa26f('0x1b')]=_0x230b50[_0xa26f('0x1b')]||0x0;this['openchannelCurrentCapacity']=0x0;this['busy']=![];this[_0xa26f('0x1c')]=undefined;this[_0xa26f('0x1d')]();}Agent[_0xa26f('0x1e')][_0xa26f('0x1f')]=function(_0x2ea7b9){if(this[_0x2ea7b9+_0xa26f('0x20')]>0x0){if(this[_0x2ea7b9+'Capacity']>0x0&&this[_0x2ea7b9+_0xa26f('0x20')]>=this[_0x2ea7b9+_0xa26f('0x21')]){return _0xa26f('0x22');}else{return'working';}}else{return _0xa26f('0x23');}};Agent['prototype'][_0xa26f('0x1d')]=function(){var _0x41ba4a=['mail',_0xa26f('0x24'),_0xa26f('0x25'),_0xa26f('0x26'),'sms'];for(var _0x3b91e2=0x0;_0x3b91e2<_0x41ba4a[_0xa26f('0x27')];_0x3b91e2+=0x1){var _0x32ed20=this['getChannelStatus'](_0x41ba4a[_0x3b91e2]);if(this[_0x41ba4a[_0x3b91e2]+_0xa26f('0x28')]!==_0x32ed20){this[_0x41ba4a[_0x3b91e2]+_0xa26f('0x29')]=_['toNumber'](moment()['format']('x'));}this[_0x41ba4a[_0x3b91e2]+_0xa26f('0x28')]=_0x32ed20;}io[_0xa26f('0x2a')]('user:save',this);};module['exports']=Agent;
\ No newline at end of file
index e8969f1..75aa0f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x70e0=['map','Agents','_rr','loggedIn','paused','online','available','stringify','format','chat:queue:%s','emit','lodash','md5','util','name','timeout','strategy','beepall','waiting','updateRouting','updateRealtime','prototype','mapAgentsId'];(function(_0x4949ac,_0x55f137){var _0xf38910=function(_0x4b468a){while(--_0x4b468a){_0x4949ac['push'](_0x4949ac['shift']());}};_0xf38910(++_0x55f137);}(_0x70e0,0x17b));var _0x070e=function(_0x5f4000,_0x4eb747){_0x5f4000=_0x5f4000-0x0;var _0xe9e6da=_0x70e0[_0x5f4000];return _0xe9e6da;};'use strict';var _=require(_0x070e('0x0'));var md5=require(_0x070e('0x1'));var util=require(_0x070e('0x2'));var io=require('socket.io-emitter')({'host':'localhost','port':0x18eb});function ChatQueue(_0x16e651){this['id']=_0x16e651['id']||0x0;this[_0x070e('0x3')]=_0x16e651[_0x070e('0x3')]||'';this[_0x070e('0x4')]=_0x16e651['timeout']||0xa;this[_0x070e('0x5')]=_0x16e651['strategy']||_0x070e('0x6');this['Agents']=_0x16e651['Agents'];this['mapAgentsId']={};this[_0x070e('0x7')]=0x0;this[_0x070e('0x1')]='';this[_0x070e('0x8')]();this[_0x070e('0x9')]();}ChatQueue[_0x070e('0xa')][_0x070e('0x8')]=function(){var _0x11ffa8=this['mapAgentsId']['_rr'];this[_0x070e('0xb')]=_[_0x070e('0xc')](this[_0x070e('0xd')],'id');this[_0x070e('0xb')][_0x070e('0xe')]=_0x11ffa8;};ChatQueue[_0x070e('0xa')][_0x070e('0x9')]=function(){this[_0x070e('0xf')]=0x0;this[_0x070e('0x10')]=0x0;for(var _0x5bf079=0x0;_0x5bf079<this[_0x070e('0xd')]['length'];_0x5bf079+=0x1){if(this['Agents'][_0x5bf079][_0x070e('0x11')]){this['loggedIn']+=0x1;}if(this['Agents'][_0x5bf079]['chatPause']){this[_0x070e('0x10')]+=0x1;}}this[_0x070e('0x12')]=this['loggedIn']-this['paused'];this[_0x070e('0x12')]=this[_0x070e('0x12')]>=0x0?this[_0x070e('0x12')]:0x0;var _0x19d9da={'id':this['id'],'available':this['available'],'loggedIn':this['loggedIn'],'name':this[_0x070e('0x3')],'paused':this[_0x070e('0x10')],'waiting':this[_0x070e('0x7')]};var _0x2060cc=md5(JSON[_0x070e('0x13')](_0x19d9da));if(this['md5']!==_0x2060cc){this[_0x070e('0x1')]=_0x2060cc;io['to'](util[_0x070e('0x14')](_0x070e('0x15'),_0x19d9da[_0x070e('0x3')]))[_0x070e('0x16')]('chat_queue:save',_0x19d9da);}};module['exports']=ChatQueue;
\ No newline at end of file
+var _0x008c=['loggedIn','paused','online','chatPause','available','stringify','format','exports','lodash','md5','util','socket.io-emitter','localhost','name','timeout','strategy','beepall','Agents','waiting','updateRouting','map','_rr','prototype','updateRealtime'];(function(_0x44c935,_0x3653f0){var _0x465bee=function(_0x211d20){while(--_0x211d20){_0x44c935['push'](_0x44c935['shift']());}};_0x465bee(++_0x3653f0);}(_0x008c,0x188));var _0xc008=function(_0x1b5aea,_0x3f04b7){_0x1b5aea=_0x1b5aea-0x0;var _0x15cfc6=_0x008c[_0x1b5aea];return _0x15cfc6;};'use strict';var _=require(_0xc008('0x0'));var md5=require(_0xc008('0x1'));var util=require(_0xc008('0x2'));var io=require(_0xc008('0x3'))({'host':_0xc008('0x4'),'port':0x18eb});function ChatQueue(_0x544fdf){this['id']=_0x544fdf['id']||0x0;this[_0xc008('0x5')]=_0x544fdf[_0xc008('0x5')]||'';this[_0xc008('0x6')]=_0x544fdf[_0xc008('0x6')]||0xa;this[_0xc008('0x7')]=_0x544fdf[_0xc008('0x7')]||_0xc008('0x8');this[_0xc008('0x9')]=_0x544fdf[_0xc008('0x9')];this['mapAgentsId']={};this[_0xc008('0xa')]=0x0;this['md5']='';this[_0xc008('0xb')]();this['updateRealtime']();}ChatQueue['prototype'][_0xc008('0xb')]=function(){var _0x7231b4=this['mapAgentsId']['_rr'];this['mapAgentsId']=_[_0xc008('0xc')](this[_0xc008('0x9')],'id');this['mapAgentsId'][_0xc008('0xd')]=_0x7231b4;};ChatQueue[_0xc008('0xe')][_0xc008('0xf')]=function(){this[_0xc008('0x10')]=0x0;this[_0xc008('0x11')]=0x0;for(var _0x1819c6=0x0;_0x1819c6<this[_0xc008('0x9')]['length'];_0x1819c6+=0x1){if(this['Agents'][_0x1819c6][_0xc008('0x12')]){this['loggedIn']+=0x1;}if(this[_0xc008('0x9')][_0x1819c6][_0xc008('0x13')]){this[_0xc008('0x11')]+=0x1;}}this[_0xc008('0x14')]=this[_0xc008('0x10')]-this['paused'];this['available']=this['available']>=0x0?this[_0xc008('0x14')]:0x0;var _0x15a6ad={'id':this['id'],'available':this[_0xc008('0x14')],'loggedIn':this[_0xc008('0x10')],'name':this['name'],'paused':this['paused'],'waiting':this['waiting']};var _0x5c2668=md5(JSON[_0xc008('0x15')](_0x15a6ad));if(this[_0xc008('0x1')]!==_0x5c2668){this['md5']=_0x5c2668;io['to'](util[_0xc008('0x16')]('chat:queue:%s',_0x15a6ad['name']))['emit']('chat_queue:save',_0x15a6ad);}};module[_0xc008('0x17')]=ChatQueue;
\ No newline at end of file
index 8581e61..d9171b7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2031=['updateRealtime','prototype','_rr','map','loggedIn','paused','length','online','faxPause','available','stringify','md5','format','fax:queue:%s','emit','fax_queue:save','exports','lodash','socket.io-emitter','localhost','name','timeout','beepall','Agents','mapAgentsId','updateRouting'];(function(_0x1fa759,_0x4ecdce){var _0x2da9f4=function(_0x463e2a){while(--_0x463e2a){_0x1fa759['push'](_0x1fa759['shift']());}};_0x2da9f4(++_0x4ecdce);}(_0x2031,0x115));var _0x1203=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0x2031[_0x19950b];return _0x3c6b41;};'use strict';var _=require(_0x1203('0x0'));var md5=require('md5');var util=require('util');var io=require(_0x1203('0x1'))({'host':_0x1203('0x2'),'port':0x18eb});function FaxQueue(_0x2203a2){this['id']=_0x2203a2['id']||0x0;this[_0x1203('0x3')]=_0x2203a2[_0x1203('0x3')]||'';this[_0x1203('0x4')]=_0x2203a2[_0x1203('0x4')]||0xa;this['strategy']=_0x2203a2['strategy']||_0x1203('0x5');this[_0x1203('0x6')]=_0x2203a2['Agents'];this[_0x1203('0x7')]={};this['waiting']=0x0;this['md5']='';this[_0x1203('0x8')]();this[_0x1203('0x9')]();}FaxQueue[_0x1203('0xa')]['updateRouting']=function(){var _0x30718c=this[_0x1203('0x7')][_0x1203('0xb')];this['mapAgentsId']=_[_0x1203('0xc')](this[_0x1203('0x6')],'id');this[_0x1203('0x7')]['_rr']=_0x30718c;};FaxQueue[_0x1203('0xa')][_0x1203('0x9')]=function(){this[_0x1203('0xd')]=0x0;this[_0x1203('0xe')]=0x0;for(var _0x4c1769=0x0;_0x4c1769<this[_0x1203('0x6')][_0x1203('0xf')];_0x4c1769+=0x1){if(this['Agents'][_0x4c1769][_0x1203('0x10')]){this[_0x1203('0xd')]+=0x1;}if(this[_0x1203('0x6')][_0x4c1769][_0x1203('0x11')]){this[_0x1203('0xe')]+=0x1;}}this[_0x1203('0x12')]=this[_0x1203('0xd')]-this[_0x1203('0xe')];this[_0x1203('0x12')]=this['available']>=0x0?this[_0x1203('0x12')]:0x0;var _0x325a72={'id':this['id'],'available':this[_0x1203('0x12')],'loggedIn':this[_0x1203('0xd')],'name':this['name'],'paused':this[_0x1203('0xe')],'waiting':this['waiting']};var _0x253560=md5(JSON[_0x1203('0x13')](_0x325a72));if(this[_0x1203('0x14')]!==_0x253560){this[_0x1203('0x14')]=_0x253560;io['to'](util[_0x1203('0x15')](_0x1203('0x16'),_0x325a72['name']))[_0x1203('0x17')](_0x1203('0x18'),_0x325a72);}};module[_0x1203('0x19')]=FaxQueue;
\ No newline at end of file
+var _0x52c6=['waiting','md5','updateRouting','updateRealtime','prototype','_rr','Agents','loggedIn','paused','length','faxPause','available','stringify','format','emit','fax_queue:save','lodash','util','localhost','name','timeout','strategy','beepall','mapAgentsId'];(function(_0x442863,_0x2d9dc6){var _0x38797c=function(_0x519587){while(--_0x519587){_0x442863['push'](_0x442863['shift']());}};_0x38797c(++_0x2d9dc6);}(_0x52c6,0x190));var _0x652c=function(_0x2b10c6,_0x185590){_0x2b10c6=_0x2b10c6-0x0;var _0x3789d2=_0x52c6[_0x2b10c6];return _0x3789d2;};'use strict';var _=require(_0x652c('0x0'));var md5=require('md5');var util=require(_0x652c('0x1'));var io=require('socket.io-emitter')({'host':_0x652c('0x2'),'port':0x18eb});function FaxQueue(_0x1e5626){this['id']=_0x1e5626['id']||0x0;this[_0x652c('0x3')]=_0x1e5626['name']||'';this['timeout']=_0x1e5626[_0x652c('0x4')]||0xa;this[_0x652c('0x5')]=_0x1e5626[_0x652c('0x5')]||_0x652c('0x6');this['Agents']=_0x1e5626['Agents'];this[_0x652c('0x7')]={};this[_0x652c('0x8')]=0x0;this[_0x652c('0x9')]='';this[_0x652c('0xa')]();this[_0x652c('0xb')]();}FaxQueue[_0x652c('0xc')][_0x652c('0xa')]=function(){var _0x4e6323=this[_0x652c('0x7')][_0x652c('0xd')];this['mapAgentsId']=_['map'](this[_0x652c('0xe')],'id');this['mapAgentsId'][_0x652c('0xd')]=_0x4e6323;};FaxQueue[_0x652c('0xc')][_0x652c('0xb')]=function(){this[_0x652c('0xf')]=0x0;this[_0x652c('0x10')]=0x0;for(var _0x2d7cf1=0x0;_0x2d7cf1<this[_0x652c('0xe')][_0x652c('0x11')];_0x2d7cf1+=0x1){if(this[_0x652c('0xe')][_0x2d7cf1]['online']){this['loggedIn']+=0x1;}if(this['Agents'][_0x2d7cf1][_0x652c('0x12')]){this[_0x652c('0x10')]+=0x1;}}this['available']=this[_0x652c('0xf')]-this[_0x652c('0x10')];this[_0x652c('0x13')]=this[_0x652c('0x13')]>=0x0?this['available']:0x0;var _0x30b24a={'id':this['id'],'available':this[_0x652c('0x13')],'loggedIn':this[_0x652c('0xf')],'name':this['name'],'paused':this['paused'],'waiting':this[_0x652c('0x8')]};var _0x3f21ea=md5(JSON[_0x652c('0x14')](_0x30b24a));if(this[_0x652c('0x9')]!==_0x3f21ea){this[_0x652c('0x9')]=_0x3f21ea;io['to'](util[_0x652c('0x15')]('fax:queue:%s',_0x30b24a['name']))[_0x652c('0x16')](_0x652c('0x17'),_0x30b24a);}};module['exports']=FaxQueue;
\ No newline at end of file
index d713f3c..1c9d271 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb45e=['name','Intervals','exports'];(function(_0x43953e,_0x541e2c){var _0x1bbd2c=function(_0x16f626){while(--_0x16f626){_0x43953e['push'](_0x43953e['shift']());}};_0x1bbd2c(++_0x541e2c);}(_0xb45e,0xb7));var _0xeb45=function(_0x2eb2e6,_0x305d99){_0x2eb2e6=_0x2eb2e6-0x0;var _0xd5746a=_0xb45e[_0x2eb2e6];return _0xd5746a;};'use strict';function Interval(_0xc7c4d7){this['id']=_0xc7c4d7['id']||0x0;this[_0xeb45('0x0')]=_0xc7c4d7[_0xeb45('0x0')]||'';this[_0xeb45('0x1')]=_0xc7c4d7[_0xeb45('0x1')]||{};}module[_0xeb45('0x2')]=Interval;
\ No newline at end of file
+var _0xded6=['name','Intervals','exports'];(function(_0x1ee824,_0x30f9b6){var _0x5defce=function(_0x1fb903){while(--_0x1fb903){_0x1ee824['push'](_0x1ee824['shift']());}};_0x5defce(++_0x30f9b6);}(_0xded6,0x1a7));var _0x6ded=function(_0x5f30a7,_0x883559){_0x5f30a7=_0x5f30a7-0x0;var _0x369669=_0xded6[_0x5f30a7];return _0x369669;};'use strict';function Interval(_0x54e2fb){this['id']=_0x54e2fb['id']||0x0;this[_0x6ded('0x0')]=_0x54e2fb[_0x6ded('0x0')]||'';this[_0x6ded('0x1')]=_0x54e2fb[_0x6ded('0x1')]||{};}module[_0x6ded('0x2')]=Interval;
\ No newline at end of file
index 8112578..5649bc2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5559=['md5','util','socket.io-emitter','localhost','name','timeout','strategy','beepall','mapAgentsId','waiting','updateRouting','prototype','map','loggedIn','paused','online','Agents','available','format','mail:queue:%s','emit','mail_queue:save','exports'];(function(_0x1843b2,_0x15cfd4){var _0x2d070d=function(_0x34ad4b){while(--_0x34ad4b){_0x1843b2['push'](_0x1843b2['shift']());}};_0x2d070d(++_0x15cfd4);}(_0x5559,0x1cc));var _0x9555=function(_0x13874a,_0x46de40){_0x13874a=_0x13874a-0x0;var _0x6941b4=_0x5559[_0x13874a];return _0x6941b4;};'use strict';var _=require('lodash');var md5=require(_0x9555('0x0'));var util=require(_0x9555('0x1'));var io=require(_0x9555('0x2'))({'host':_0x9555('0x3'),'port':0x18eb});function MailQueue(_0x585917){this['id']=_0x585917['id']||0x0;this[_0x9555('0x4')]=_0x585917[_0x9555('0x4')]||'';this[_0x9555('0x5')]=_0x585917[_0x9555('0x5')]||0xa;this['strategy']=_0x585917[_0x9555('0x6')]||_0x9555('0x7');this['Agents']=_0x585917['Agents'];this[_0x9555('0x8')]={};this[_0x9555('0x9')]=0x0;this[_0x9555('0x0')]='';this[_0x9555('0xa')]();this['updateRealtime']();}MailQueue[_0x9555('0xb')][_0x9555('0xa')]=function(){var _0x2f3b50=this[_0x9555('0x8')]['_rr'];this[_0x9555('0x8')]=_[_0x9555('0xc')](this['Agents'],'id');this[_0x9555('0x8')]['_rr']=_0x2f3b50;};MailQueue[_0x9555('0xb')]['updateRealtime']=function(){this[_0x9555('0xd')]=0x0;this[_0x9555('0xe')]=0x0;for(var _0x82d498=0x0;_0x82d498<this['Agents']['length'];_0x82d498+=0x1){if(this['Agents'][_0x82d498][_0x9555('0xf')]){this[_0x9555('0xd')]+=0x1;}if(this[_0x9555('0x10')][_0x82d498]['mailPause']){this['paused']+=0x1;}}this[_0x9555('0x11')]=this[_0x9555('0xd')]-this[_0x9555('0xe')];this[_0x9555('0x11')]=this[_0x9555('0x11')]>=0x0?this['available']:0x0;var _0xc0e684={'id':this['id'],'available':this[_0x9555('0x11')],'loggedIn':this[_0x9555('0xd')],'name':this[_0x9555('0x4')],'paused':this['paused'],'waiting':this[_0x9555('0x9')]};var _0x5a2edc=md5(JSON['stringify'](_0xc0e684));if(this[_0x9555('0x0')]!==_0x5a2edc){this[_0x9555('0x0')]=_0x5a2edc;io['to'](util[_0x9555('0x12')](_0x9555('0x13'),_0xc0e684[_0x9555('0x4')]))[_0x9555('0x14')](_0x9555('0x15'),_0xc0e684);}};module[_0x9555('0x16')]=MailQueue;
\ No newline at end of file
+var _0x9962=['name','strategy','Agents','mapAgentsId','waiting','updateRouting','updateRealtime','prototype','_rr','map','loggedIn','length','online','paused','available','stringify','mail:queue:%s','mail_queue:save','exports','lodash','md5','socket.io-emitter','localhost'];(function(_0x3e3bee,_0x4f91fe){var _0x3ae14c=function(_0x3861a0){while(--_0x3861a0){_0x3e3bee['push'](_0x3e3bee['shift']());}};_0x3ae14c(++_0x4f91fe);}(_0x9962,0xf9));var _0x2996=function(_0x21f10a,_0x448e5b){_0x21f10a=_0x21f10a-0x0;var _0x16a68e=_0x9962[_0x21f10a];return _0x16a68e;};'use strict';var _=require(_0x2996('0x0'));var md5=require(_0x2996('0x1'));var util=require('util');var io=require(_0x2996('0x2'))({'host':_0x2996('0x3'),'port':0x18eb});function MailQueue(_0x4cbd39){this['id']=_0x4cbd39['id']||0x0;this[_0x2996('0x4')]=_0x4cbd39[_0x2996('0x4')]||'';this['timeout']=_0x4cbd39['timeout']||0xa;this[_0x2996('0x5')]=_0x4cbd39['strategy']||'beepall';this[_0x2996('0x6')]=_0x4cbd39[_0x2996('0x6')];this[_0x2996('0x7')]={};this[_0x2996('0x8')]=0x0;this['md5']='';this[_0x2996('0x9')]();this[_0x2996('0xa')]();}MailQueue[_0x2996('0xb')][_0x2996('0x9')]=function(){var _0x2099a2=this['mapAgentsId'][_0x2996('0xc')];this['mapAgentsId']=_[_0x2996('0xd')](this[_0x2996('0x6')],'id');this[_0x2996('0x7')][_0x2996('0xc')]=_0x2099a2;};MailQueue['prototype'][_0x2996('0xa')]=function(){this[_0x2996('0xe')]=0x0;this['paused']=0x0;for(var _0x5592ed=0x0;_0x5592ed<this[_0x2996('0x6')][_0x2996('0xf')];_0x5592ed+=0x1){if(this[_0x2996('0x6')][_0x5592ed][_0x2996('0x10')]){this['loggedIn']+=0x1;}if(this[_0x2996('0x6')][_0x5592ed]['mailPause']){this[_0x2996('0x11')]+=0x1;}}this[_0x2996('0x12')]=this[_0x2996('0xe')]-this['paused'];this[_0x2996('0x12')]=this[_0x2996('0x12')]>=0x0?this[_0x2996('0x12')]:0x0;var _0x9c7a8e={'id':this['id'],'available':this[_0x2996('0x12')],'loggedIn':this[_0x2996('0xe')],'name':this[_0x2996('0x4')],'paused':this[_0x2996('0x11')],'waiting':this[_0x2996('0x8')]};var _0x2cf7b4=md5(JSON[_0x2996('0x13')](_0x9c7a8e));if(this[_0x2996('0x1')]!==_0x2cf7b4){this['md5']=_0x2cf7b4;io['to'](util['format'](_0x2996('0x14'),_0x9c7a8e[_0x2996('0x4')]))['emit'](_0x2996('0x15'),_0x9c7a8e);}};module[_0x2996('0x16')]=MailQueue;
\ No newline at end of file
index 5541ed3..8444293 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe376=['timeout','strategy','beepall','mapAgentsId','waiting','updateRouting','updateRealtime','map','prototype','paused','length','Agents','online','loggedIn','available','stringify','format','openchannel:queue:%s','openchannel_queue:save','exports','util','socket.io-emitter','localhost','name'];(function(_0x2345cc,_0x61aa6b){var _0x538643=function(_0x2a4c12){while(--_0x2a4c12){_0x2345cc['push'](_0x2345cc['shift']());}};_0x538643(++_0x61aa6b);}(_0xe376,0x194));var _0x6e37=function(_0xd21fe7,_0x225a39){_0xd21fe7=_0xd21fe7-0x0;var _0x14d570=_0xe376[_0xd21fe7];return _0x14d570;};'use strict';var _=require('lodash');var md5=require('md5');var util=require(_0x6e37('0x0'));var io=require(_0x6e37('0x1'))({'host':_0x6e37('0x2'),'port':0x18eb});function OpenchannelQueue(_0x32dfe1){this['id']=_0x32dfe1['id']||0x0;this[_0x6e37('0x3')]=_0x32dfe1[_0x6e37('0x3')]||'';this[_0x6e37('0x4')]=_0x32dfe1[_0x6e37('0x4')]||0xa;this[_0x6e37('0x5')]=_0x32dfe1[_0x6e37('0x5')]||_0x6e37('0x6');this['Agents']=_0x32dfe1['Agents'];this[_0x6e37('0x7')]={};this[_0x6e37('0x8')]=0x0;this['md5']='';this[_0x6e37('0x9')]();this[_0x6e37('0xa')]();}OpenchannelQueue['prototype'][_0x6e37('0x9')]=function(){var _0x3b9c92=this[_0x6e37('0x7')]['_rr'];this['mapAgentsId']=_[_0x6e37('0xb')](this['Agents'],'id');this[_0x6e37('0x7')]['_rr']=_0x3b9c92;};OpenchannelQueue[_0x6e37('0xc')]['updateRealtime']=function(){this['loggedIn']=0x0;this[_0x6e37('0xd')]=0x0;for(var _0x480030=0x0;_0x480030<this['Agents'][_0x6e37('0xe')];_0x480030+=0x1){if(this[_0x6e37('0xf')][_0x480030][_0x6e37('0x10')]){this[_0x6e37('0x11')]+=0x1;}if(this[_0x6e37('0xf')][_0x480030]['openchannelPause']){this[_0x6e37('0xd')]+=0x1;}}this[_0x6e37('0x12')]=this[_0x6e37('0x11')]-this['paused'];this[_0x6e37('0x12')]=this['available']>=0x0?this[_0x6e37('0x12')]:0x0;var _0x491fb1={'id':this['id'],'available':this[_0x6e37('0x12')],'loggedIn':this[_0x6e37('0x11')],'name':this[_0x6e37('0x3')],'paused':this[_0x6e37('0xd')],'waiting':this['waiting']};var _0x218553=md5(JSON[_0x6e37('0x13')](_0x491fb1));if(this['md5']!==_0x218553){this['md5']=_0x218553;io['to'](util[_0x6e37('0x14')](_0x6e37('0x15'),_0x491fb1[_0x6e37('0x3')]))['emit'](_0x6e37('0x16'),_0x491fb1);}};module[_0x6e37('0x17')]=OpenchannelQueue;
\ No newline at end of file
+var _0x7961=['_rr','loggedIn','paused','length','openchannelPause','available','stringify','md5','openchannel:queue:%s','openchannel_queue:save','exports','lodash','util','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRouting','updateRealtime','prototype','map'];(function(_0x23dbb6,_0x3bb989){var _0x19056b=function(_0x2a51ef){while(--_0x2a51ef){_0x23dbb6['push'](_0x23dbb6['shift']());}};_0x19056b(++_0x3bb989);}(_0x7961,0x88));var _0x1796=function(_0x2974a9,_0x3b5d1f){_0x2974a9=_0x2974a9-0x0;var _0x4c6d8e=_0x7961[_0x2974a9];return _0x4c6d8e;};'use strict';var _=require(_0x1796('0x0'));var md5=require('md5');var util=require(_0x1796('0x1'));var io=require(_0x1796('0x2'))({'host':'localhost','port':0x18eb});function OpenchannelQueue(_0xe4bf98){this['id']=_0xe4bf98['id']||0x0;this[_0x1796('0x3')]=_0xe4bf98['name']||'';this[_0x1796('0x4')]=_0xe4bf98['timeout']||0xa;this[_0x1796('0x5')]=_0xe4bf98[_0x1796('0x5')]||_0x1796('0x6');this[_0x1796('0x7')]=_0xe4bf98['Agents'];this[_0x1796('0x8')]={};this[_0x1796('0x9')]=0x0;this['md5']='';this[_0x1796('0xa')]();this[_0x1796('0xb')]();}OpenchannelQueue[_0x1796('0xc')][_0x1796('0xa')]=function(){var _0x5e69af=this['mapAgentsId']['_rr'];this[_0x1796('0x8')]=_[_0x1796('0xd')](this[_0x1796('0x7')],'id');this[_0x1796('0x8')][_0x1796('0xe')]=_0x5e69af;};OpenchannelQueue[_0x1796('0xc')][_0x1796('0xb')]=function(){this[_0x1796('0xf')]=0x0;this[_0x1796('0x10')]=0x0;for(var _0x4d45c3=0x0;_0x4d45c3<this[_0x1796('0x7')][_0x1796('0x11')];_0x4d45c3+=0x1){if(this[_0x1796('0x7')][_0x4d45c3]['online']){this[_0x1796('0xf')]+=0x1;}if(this[_0x1796('0x7')][_0x4d45c3][_0x1796('0x12')]){this['paused']+=0x1;}}this[_0x1796('0x13')]=this[_0x1796('0xf')]-this[_0x1796('0x10')];this[_0x1796('0x13')]=this[_0x1796('0x13')]>=0x0?this[_0x1796('0x13')]:0x0;var _0x225613={'id':this['id'],'available':this[_0x1796('0x13')],'loggedIn':this[_0x1796('0xf')],'name':this[_0x1796('0x3')],'paused':this['paused'],'waiting':this[_0x1796('0x9')]};var _0xa85731=md5(JSON[_0x1796('0x14')](_0x225613));if(this['md5']!==_0xa85731){this[_0x1796('0x15')]=_0xa85731;io['to'](util['format'](_0x1796('0x16'),_0x225613[_0x1796('0x3')]))['emit'](_0x1796('0x17'),_0x225613);}};module[_0x1796('0x18')]=OpenchannelQueue;
\ No newline at end of file
index e08cac9..e07dd08 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf4eb=['updateRealtime','prototype','updateRouting','mapAgentsId','_rr','paused','length','online','loggedIn','smsPause','available','md5','format','sms:queue:%s','sms_queue:save','exports','lodash','timeout','strategy','beepall','Agents','waiting'];(function(_0x39fd11,_0x5d7883){var _0x302799=function(_0x4a0615){while(--_0x4a0615){_0x39fd11['push'](_0x39fd11['shift']());}};_0x302799(++_0x5d7883);}(_0xf4eb,0xec));var _0xbf4e=function(_0xf1c7e4,_0x35b3d6){_0xf1c7e4=_0xf1c7e4-0x0;var _0x27f92c=_0xf4eb[_0xf1c7e4];return _0x27f92c;};'use strict';var _=require(_0xbf4e('0x0'));var md5=require('md5');var util=require('util');var io=require('socket.io-emitter')({'host':'localhost','port':0x18eb});function SmsQueue(_0xbbbf01){this['id']=_0xbbbf01['id']||0x0;this['name']=_0xbbbf01['name']||'';this[_0xbf4e('0x1')]=_0xbbbf01[_0xbf4e('0x1')]||0xa;this[_0xbf4e('0x2')]=_0xbbbf01[_0xbf4e('0x2')]||_0xbf4e('0x3');this[_0xbf4e('0x4')]=_0xbbbf01[_0xbf4e('0x4')];this['mapAgentsId']={};this[_0xbf4e('0x5')]=0x0;this['md5']='';this['updateRouting']();this[_0xbf4e('0x6')]();}SmsQueue[_0xbf4e('0x7')][_0xbf4e('0x8')]=function(){var _0xc86f04=this[_0xbf4e('0x9')][_0xbf4e('0xa')];this[_0xbf4e('0x9')]=_['map'](this['Agents'],'id');this[_0xbf4e('0x9')]['_rr']=_0xc86f04;};SmsQueue[_0xbf4e('0x7')][_0xbf4e('0x6')]=function(){this['loggedIn']=0x0;this[_0xbf4e('0xb')]=0x0;for(var _0x5a3035=0x0;_0x5a3035<this['Agents'][_0xbf4e('0xc')];_0x5a3035+=0x1){if(this[_0xbf4e('0x4')][_0x5a3035][_0xbf4e('0xd')]){this[_0xbf4e('0xe')]+=0x1;}if(this[_0xbf4e('0x4')][_0x5a3035][_0xbf4e('0xf')]){this['paused']+=0x1;}}this['available']=this[_0xbf4e('0xe')]-this[_0xbf4e('0xb')];this[_0xbf4e('0x10')]=this['available']>=0x0?this[_0xbf4e('0x10')]:0x0;var _0x2c292c={'id':this['id'],'available':this[_0xbf4e('0x10')],'loggedIn':this[_0xbf4e('0xe')],'name':this['name'],'paused':this[_0xbf4e('0xb')],'waiting':this['waiting']};var _0x5db03f=md5(JSON['stringify'](_0x2c292c));if(this['md5']!==_0x5db03f){this[_0xbf4e('0x11')]=_0x5db03f;io['to'](util[_0xbf4e('0x12')](_0xbf4e('0x13'),_0x2c292c['name']))['emit'](_0xbf4e('0x14'),_0x2c292c);}};module[_0xbf4e('0x15')]=SmsQueue;
\ No newline at end of file
+var _0x91a7=['md5','util','socket.io-emitter','name','strategy','Agents','mapAgentsId','waiting','updateRouting','updateRealtime','prototype','_rr','loggedIn','length','online','smsPause','paused','available','sms:queue:%s','emit','sms_queue:save'];(function(_0x21549c,_0x6d64d1){var _0x426cbd=function(_0x323f5b){while(--_0x323f5b){_0x21549c['push'](_0x21549c['shift']());}};_0x426cbd(++_0x6d64d1);}(_0x91a7,0xe7));var _0x791a=function(_0x1ddea6,_0x23a562){_0x1ddea6=_0x1ddea6-0x0;var _0x2762b1=_0x91a7[_0x1ddea6];return _0x2762b1;};'use strict';var _=require('lodash');var md5=require(_0x791a('0x0'));var util=require(_0x791a('0x1'));var io=require(_0x791a('0x2'))({'host':'localhost','port':0x18eb});function SmsQueue(_0x415994){this['id']=_0x415994['id']||0x0;this['name']=_0x415994[_0x791a('0x3')]||'';this['timeout']=_0x415994['timeout']||0xa;this[_0x791a('0x4')]=_0x415994[_0x791a('0x4')]||'beepall';this[_0x791a('0x5')]=_0x415994['Agents'];this[_0x791a('0x6')]={};this[_0x791a('0x7')]=0x0;this['md5']='';this[_0x791a('0x8')]();this[_0x791a('0x9')]();}SmsQueue[_0x791a('0xa')][_0x791a('0x8')]=function(){var _0x266e4b=this['mapAgentsId'][_0x791a('0xb')];this[_0x791a('0x6')]=_['map'](this[_0x791a('0x5')],'id');this[_0x791a('0x6')][_0x791a('0xb')]=_0x266e4b;};SmsQueue[_0x791a('0xa')][_0x791a('0x9')]=function(){this[_0x791a('0xc')]=0x0;this['paused']=0x0;for(var _0x5daecd=0x0;_0x5daecd<this[_0x791a('0x5')][_0x791a('0xd')];_0x5daecd+=0x1){if(this['Agents'][_0x5daecd][_0x791a('0xe')]){this[_0x791a('0xc')]+=0x1;}if(this['Agents'][_0x5daecd][_0x791a('0xf')]){this[_0x791a('0x10')]+=0x1;}}this[_0x791a('0x11')]=this[_0x791a('0xc')]-this['paused'];this[_0x791a('0x11')]=this['available']>=0x0?this[_0x791a('0x11')]:0x0;var _0x355155={'id':this['id'],'available':this['available'],'loggedIn':this[_0x791a('0xc')],'name':this['name'],'paused':this[_0x791a('0x10')],'waiting':this['waiting']};var _0x4a84ee=md5(JSON['stringify'](_0x355155));if(this[_0x791a('0x0')]!==_0x4a84ee){this['md5']=_0x4a84ee;io['to'](util['format'](_0x791a('0x12'),_0x355155[_0x791a('0x3')]))[_0x791a('0x13')](_0x791a('0x14'),_0x355155);}};module['exports']=SmsQueue;
\ No newline at end of file
index c645968..9895454 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1d0d=['initSmsQueues','updateRealtime','initMailQueues','initFaxQueues','bluebird','util','lodash','moment','../model/agent','../model/interval','../model/openchannelQueue','../model/chatQueue','../model/smsQueue','../model/faxQueue','agents','intervals','chatQueues','smsQueues','mailQueues','faxQueues','chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','mapKeys','prototype','initAgents','length','isUndefined','mergeFromDatabase','initOpenchannelQueues','openchannelQueues','initChatQueues','updateRouting'];(function(_0x56ef46,_0x3b8a15){var _0xdab398=function(_0x12901f){while(--_0x12901f){_0x56ef46['push'](_0x56ef46['shift']());}};_0xdab398(++_0x3b8a15);}(_0x1d0d,0x185));var _0xd1d0=function(_0x5e1c9a,_0x278771){_0x5e1c9a=_0x5e1c9a-0x0;var _0x56f0e4=_0x1d0d[_0x5e1c9a];return _0x56f0e4;};'use strict';var BPromise=require(_0xd1d0('0x0'));var util=require(_0xd1d0('0x1'));var _=require(_0xd1d0('0x2'));var moment=require(_0xd1d0('0x3'));var Agent=require(_0xd1d0('0x4'));var Interval=require(_0xd1d0('0x5'));var OpenchannelQueue=require(_0xd1d0('0x6'));var ChatQueue=require(_0xd1d0('0x7'));var SmsQueue=require(_0xd1d0('0x8'));var MailQueue=require('../model/mailQueue');var FaxQueue=require(_0xd1d0('0x9'));var Realtime=function(){this[_0xd1d0('0xa')]={};this[_0xd1d0('0xb')]={};this['openchannelQueues']={};this[_0xd1d0('0xc')]={};this[_0xd1d0('0xd')]={};this[_0xd1d0('0xe')]={};this[_0xd1d0('0xf')]={};this[_0xd1d0('0x10')]={};this[_0xd1d0('0x11')]={};this[_0xd1d0('0x12')]={};this[_0xd1d0('0x13')]={};this[_0xd1d0('0x14')]={};};function freeIsNotKey(_0x3c1960,_0x313c2b,_0x1021c9){var _0x1c5ec3=_[_0xd1d0('0x15')](_0x3c1960,function(_0x121e27,_0x5b646e){return _0x121e27[_0x1021c9];});for(var _0x5dab7d in _0x313c2b){if(_0x313c2b['hasOwnProperty'](_0x5dab7d)){if(!_0x1c5ec3[_0x5dab7d]){delete _0x313c2b[_0x5dab7d];}}}}Realtime[_0xd1d0('0x16')]['mergeFromDatabase']=function(_0x3ee35a,_0x29a405){for(var _0x40d694 in _0x29a405){if(_0x3ee35a['hasOwnProperty'](_0x40d694)){_0x3ee35a[_0x40d694]=_0x29a405[_0x40d694];}}};Realtime[_0xd1d0('0x16')][_0xd1d0('0x17')]=function(){var _0x421905=this;return function(_0x467de3){if(_0x467de3){freeIsNotKey(_0x467de3,_0x421905[_0xd1d0('0xa')],'id');for(var _0x42b288=0x0,_0x273cb2={},_0x123ad0={};_0x42b288<_0x467de3[_0xd1d0('0x18')];_0x42b288+=0x1){_0x273cb2=_0x467de3[_0x42b288];if(_[_0xd1d0('0x19')](_0x421905[_0xd1d0('0xa')][_0x273cb2['id']])){_0x421905[_0xd1d0('0xa')][_0x273cb2['id']]=new Agent(_0x273cb2);}else{_0x421905[_0xd1d0('0x1a')](_0x421905[_0xd1d0('0xa')][_0x273cb2['id']],_0x273cb2);}}}return _0x421905[_0xd1d0('0xa')];};};Realtime['prototype']['initIntervals']=function(){var _0x3d3cee=this;return function(_0x3fc7a1){if(_0x3fc7a1){freeIsNotKey(_0x3fc7a1,_0x3d3cee[_0xd1d0('0xb')],'id');for(var _0x3ce8db=0x0,_0x240420={},_0x17b782={};_0x3ce8db<_0x3fc7a1['length'];_0x3ce8db+=0x1){_0x240420=_0x3fc7a1[_0x3ce8db];if(_['isUndefined'](_0x3d3cee[_0xd1d0('0xb')][_0x240420['id']])){_0x3d3cee[_0xd1d0('0xb')][_0x240420['id']]=new Interval(_0x240420);}else{_0x3d3cee['mergeFromDatabase'](_0x3d3cee['intervals'][_0x240420['id']],_0x240420);}}}return _0x3d3cee[_0xd1d0('0xb')];};};Realtime['prototype'][_0xd1d0('0x1b')]=function(){var _0x1682b7=this;return function(_0x1814cb){if(_0x1814cb){freeIsNotKey(_0x1814cb,_0x1682b7[_0xd1d0('0x1c')],'id');for(var _0x23c0f1=0x0,_0xf6c70c={},_0xa2008c={};_0x23c0f1<_0x1814cb[_0xd1d0('0x18')];_0x23c0f1+=0x1){_0xf6c70c=_0x1814cb[_0x23c0f1];if(_[_0xd1d0('0x19')](_0x1682b7[_0xd1d0('0x1c')][_0xf6c70c['id']])){_0x1682b7[_0xd1d0('0x1c')][_0xf6c70c['id']]=new OpenchannelQueue(_0xf6c70c);}else{_0x1682b7[_0xd1d0('0x1a')](_0x1682b7['openchannelQueues'][_0xf6c70c['id']],_0xf6c70c);}_0x1682b7[_0xd1d0('0x1c')][_0xf6c70c['id']]['updateRouting']();_0x1682b7[_0xd1d0('0x1c')][_0xf6c70c['id']]['updateRealtime']();}}return _0x1682b7[_0xd1d0('0x1c')];};};Realtime['prototype'][_0xd1d0('0x1d')]=function(){var _0x2f9ca4=this;return function(_0x3e1fa4){if(_0x3e1fa4){freeIsNotKey(_0x3e1fa4,_0x2f9ca4[_0xd1d0('0xc')],'id');for(var _0x5b2b6f=0x0,_0x442f36={},_0xd997d={};_0x5b2b6f<_0x3e1fa4[_0xd1d0('0x18')];_0x5b2b6f+=0x1){_0x442f36=_0x3e1fa4[_0x5b2b6f];if(_[_0xd1d0('0x19')](_0x2f9ca4['chatQueues'][_0x442f36['id']])){_0x2f9ca4['chatQueues'][_0x442f36['id']]=new ChatQueue(_0x442f36);}else{_0x2f9ca4[_0xd1d0('0x1a')](_0x2f9ca4['chatQueues'][_0x442f36['id']],_0x442f36);}_0x2f9ca4[_0xd1d0('0xc')][_0x442f36['id']][_0xd1d0('0x1e')]();_0x2f9ca4[_0xd1d0('0xc')][_0x442f36['id']]['updateRealtime']();}}return _0x2f9ca4[_0xd1d0('0xc')];};};Realtime[_0xd1d0('0x16')][_0xd1d0('0x1f')]=function(){var _0x3a2bfe=this;return function(_0x51bb2e){if(_0x51bb2e){freeIsNotKey(_0x51bb2e,_0x3a2bfe['smsQueues'],'id');for(var _0x5cd256=0x0,_0x535950={},_0x189e68={};_0x5cd256<_0x51bb2e[_0xd1d0('0x18')];_0x5cd256+=0x1){_0x535950=_0x51bb2e[_0x5cd256];if(_[_0xd1d0('0x19')](_0x3a2bfe[_0xd1d0('0xd')][_0x535950['id']])){_0x3a2bfe[_0xd1d0('0xd')][_0x535950['id']]=new SmsQueue(_0x535950);}else{_0x3a2bfe[_0xd1d0('0x1a')](_0x3a2bfe['smsQueues'][_0x535950['id']],_0x535950);}_0x3a2bfe[_0xd1d0('0xd')][_0x535950['id']][_0xd1d0('0x1e')]();_0x3a2bfe[_0xd1d0('0xd')][_0x535950['id']][_0xd1d0('0x20')]();}}return _0x3a2bfe[_0xd1d0('0xd')];};};Realtime[_0xd1d0('0x16')][_0xd1d0('0x21')]=function(){var _0x5e03c1=this;return function(_0x153836){if(_0x153836){freeIsNotKey(_0x153836,_0x5e03c1['mailQueues'],'id');for(var _0x563aa7=0x0,_0x2e6c00={},_0x573171={};_0x563aa7<_0x153836[_0xd1d0('0x18')];_0x563aa7+=0x1){_0x2e6c00=_0x153836[_0x563aa7];if(_[_0xd1d0('0x19')](_0x5e03c1['mailQueues'][_0x2e6c00['id']])){_0x5e03c1[_0xd1d0('0xe')][_0x2e6c00['id']]=new MailQueue(_0x2e6c00);}else{_0x5e03c1['mergeFromDatabase'](_0x5e03c1[_0xd1d0('0xe')][_0x2e6c00['id']],_0x2e6c00);}_0x5e03c1[_0xd1d0('0xe')][_0x2e6c00['id']][_0xd1d0('0x1e')]();_0x5e03c1[_0xd1d0('0xe')][_0x2e6c00['id']]['updateRealtime']();}}return _0x5e03c1['mailQueues'];};};Realtime[_0xd1d0('0x16')][_0xd1d0('0x22')]=function(){var _0x2b5d02=this;return function(_0x1c57c5){if(_0x1c57c5){freeIsNotKey(_0x1c57c5,_0x2b5d02[_0xd1d0('0xf')],'id');for(var _0x1cf22d=0x0,_0x462b6={},_0x3d2457={};_0x1cf22d<_0x1c57c5[_0xd1d0('0x18')];_0x1cf22d+=0x1){_0x462b6=_0x1c57c5[_0x1cf22d];if(_[_0xd1d0('0x19')](_0x2b5d02['faxQueues'][_0x462b6['id']])){_0x2b5d02[_0xd1d0('0xf')][_0x462b6['id']]=new FaxQueue(_0x462b6);}else{_0x2b5d02[_0xd1d0('0x1a')](_0x2b5d02[_0xd1d0('0xf')][_0x462b6['id']],_0x462b6);}_0x2b5d02[_0xd1d0('0xf')][_0x462b6['id']]['updateRouting']();_0x2b5d02[_0xd1d0('0xf')][_0x462b6['id']][_0xd1d0('0x20')]();}}return _0x2b5d02[_0xd1d0('0xf')];};};module['exports']=Realtime;
\ No newline at end of file
+var _0x025d=['faxQueuesWaitingInteractions','mapKeys','hasOwnProperty','mergeFromDatabase','prototype','initAgents','length','isUndefined','initIntervals','intervals','updateRouting','updateRealtime','initSmsQueues','initFaxQueues','exports','bluebird','util','moment','../model/chatQueue','../model/smsQueue','agents','openchannelQueues','chatQueues','smsQueues','mailQueues','faxQueues','chatQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions'];(function(_0x5138dd,_0x6ff28b){var _0x148d17=function(_0x4e2605){while(--_0x4e2605){_0x5138dd['push'](_0x5138dd['shift']());}};_0x148d17(++_0x6ff28b);}(_0x025d,0xbd));var _0xd025=function(_0x21a9d9,_0x4d5ac8){_0x21a9d9=_0x21a9d9-0x0;var _0x46adce=_0x025d[_0x21a9d9];return _0x46adce;};'use strict';var BPromise=require(_0xd025('0x0'));var util=require(_0xd025('0x1'));var _=require('lodash');var moment=require(_0xd025('0x2'));var Agent=require('../model/agent');var Interval=require('../model/interval');var OpenchannelQueue=require('../model/openchannelQueue');var ChatQueue=require(_0xd025('0x3'));var SmsQueue=require(_0xd025('0x4'));var MailQueue=require('../model/mailQueue');var FaxQueue=require('../model/faxQueue');var Realtime=function(){this[_0xd025('0x5')]={};this['intervals']={};this[_0xd025('0x6')]={};this[_0xd025('0x7')]={};this[_0xd025('0x8')]={};this[_0xd025('0x9')]={};this[_0xd025('0xa')]={};this[_0xd025('0xb')]={};this['mailQueuesWaitingInteractions']={};this[_0xd025('0xc')]={};this[_0xd025('0xd')]={};this[_0xd025('0xe')]={};};function freeIsNotKey(_0x54bee7,_0xca88a4,_0x299fd8){var _0x5b4fed=_[_0xd025('0xf')](_0x54bee7,function(_0x1e6142,_0x54de29){return _0x1e6142[_0x299fd8];});for(var _0x3e6585 in _0xca88a4){if(_0xca88a4[_0xd025('0x10')](_0x3e6585)){if(!_0x5b4fed[_0x3e6585]){delete _0xca88a4[_0x3e6585];}}}}Realtime['prototype'][_0xd025('0x11')]=function(_0x25e8ad,_0x1f35d3){for(var _0xde1b4a in _0x1f35d3){if(_0x25e8ad[_0xd025('0x10')](_0xde1b4a)){_0x25e8ad[_0xde1b4a]=_0x1f35d3[_0xde1b4a];}}};Realtime[_0xd025('0x12')][_0xd025('0x13')]=function(){var _0x593d6b=this;return function(_0x40d74b){if(_0x40d74b){freeIsNotKey(_0x40d74b,_0x593d6b[_0xd025('0x5')],'id');for(var _0x3d12dc=0x0,_0x16db6f={},_0x1edf63={};_0x3d12dc<_0x40d74b[_0xd025('0x14')];_0x3d12dc+=0x1){_0x16db6f=_0x40d74b[_0x3d12dc];if(_[_0xd025('0x15')](_0x593d6b[_0xd025('0x5')][_0x16db6f['id']])){_0x593d6b[_0xd025('0x5')][_0x16db6f['id']]=new Agent(_0x16db6f);}else{_0x593d6b[_0xd025('0x11')](_0x593d6b[_0xd025('0x5')][_0x16db6f['id']],_0x16db6f);}}}return _0x593d6b[_0xd025('0x5')];};};Realtime[_0xd025('0x12')][_0xd025('0x16')]=function(){var _0xe19abf=this;return function(_0xde2502){if(_0xde2502){freeIsNotKey(_0xde2502,_0xe19abf[_0xd025('0x17')],'id');for(var _0x1a74ba=0x0,_0x3283b3={},_0x36bcbf={};_0x1a74ba<_0xde2502[_0xd025('0x14')];_0x1a74ba+=0x1){_0x3283b3=_0xde2502[_0x1a74ba];if(_['isUndefined'](_0xe19abf[_0xd025('0x17')][_0x3283b3['id']])){_0xe19abf[_0xd025('0x17')][_0x3283b3['id']]=new Interval(_0x3283b3);}else{_0xe19abf[_0xd025('0x11')](_0xe19abf[_0xd025('0x17')][_0x3283b3['id']],_0x3283b3);}}}return _0xe19abf['intervals'];};};Realtime[_0xd025('0x12')]['initOpenchannelQueues']=function(){var _0x4f49dc=this;return function(_0x3b8dfd){if(_0x3b8dfd){freeIsNotKey(_0x3b8dfd,_0x4f49dc[_0xd025('0x6')],'id');for(var _0x5e3fca=0x0,_0x1a0d64={},_0x57de9b={};_0x5e3fca<_0x3b8dfd[_0xd025('0x14')];_0x5e3fca+=0x1){_0x1a0d64=_0x3b8dfd[_0x5e3fca];if(_['isUndefined'](_0x4f49dc['openchannelQueues'][_0x1a0d64['id']])){_0x4f49dc[_0xd025('0x6')][_0x1a0d64['id']]=new OpenchannelQueue(_0x1a0d64);}else{_0x4f49dc[_0xd025('0x11')](_0x4f49dc[_0xd025('0x6')][_0x1a0d64['id']],_0x1a0d64);}_0x4f49dc[_0xd025('0x6')][_0x1a0d64['id']][_0xd025('0x18')]();_0x4f49dc[_0xd025('0x6')][_0x1a0d64['id']][_0xd025('0x19')]();}}return _0x4f49dc[_0xd025('0x6')];};};Realtime[_0xd025('0x12')]['initChatQueues']=function(){var _0x1d4044=this;return function(_0x397366){if(_0x397366){freeIsNotKey(_0x397366,_0x1d4044[_0xd025('0x7')],'id');for(var _0x443fd6=0x0,_0x81a435={},_0x1526cd={};_0x443fd6<_0x397366[_0xd025('0x14')];_0x443fd6+=0x1){_0x81a435=_0x397366[_0x443fd6];if(_[_0xd025('0x15')](_0x1d4044[_0xd025('0x7')][_0x81a435['id']])){_0x1d4044[_0xd025('0x7')][_0x81a435['id']]=new ChatQueue(_0x81a435);}else{_0x1d4044[_0xd025('0x11')](_0x1d4044['chatQueues'][_0x81a435['id']],_0x81a435);}_0x1d4044[_0xd025('0x7')][_0x81a435['id']][_0xd025('0x18')]();_0x1d4044[_0xd025('0x7')][_0x81a435['id']][_0xd025('0x19')]();}}return _0x1d4044[_0xd025('0x7')];};};Realtime[_0xd025('0x12')][_0xd025('0x1a')]=function(){var _0x317198=this;return function(_0x460d5d){if(_0x460d5d){freeIsNotKey(_0x460d5d,_0x317198['smsQueues'],'id');for(var _0x2a92f1=0x0,_0x46c762={},_0x11ff82={};_0x2a92f1<_0x460d5d['length'];_0x2a92f1+=0x1){_0x46c762=_0x460d5d[_0x2a92f1];if(_[_0xd025('0x15')](_0x317198[_0xd025('0x8')][_0x46c762['id']])){_0x317198[_0xd025('0x8')][_0x46c762['id']]=new SmsQueue(_0x46c762);}else{_0x317198[_0xd025('0x11')](_0x317198[_0xd025('0x8')][_0x46c762['id']],_0x46c762);}_0x317198['smsQueues'][_0x46c762['id']][_0xd025('0x18')]();_0x317198[_0xd025('0x8')][_0x46c762['id']][_0xd025('0x19')]();}}return _0x317198[_0xd025('0x8')];};};Realtime[_0xd025('0x12')]['initMailQueues']=function(){var _0x192c82=this;return function(_0xf0febf){if(_0xf0febf){freeIsNotKey(_0xf0febf,_0x192c82[_0xd025('0x9')],'id');for(var _0x352452=0x0,_0x15c8aa={},_0x5c7d66={};_0x352452<_0xf0febf[_0xd025('0x14')];_0x352452+=0x1){_0x15c8aa=_0xf0febf[_0x352452];if(_[_0xd025('0x15')](_0x192c82[_0xd025('0x9')][_0x15c8aa['id']])){_0x192c82[_0xd025('0x9')][_0x15c8aa['id']]=new MailQueue(_0x15c8aa);}else{_0x192c82[_0xd025('0x11')](_0x192c82[_0xd025('0x9')][_0x15c8aa['id']],_0x15c8aa);}_0x192c82[_0xd025('0x9')][_0x15c8aa['id']]['updateRouting']();_0x192c82[_0xd025('0x9')][_0x15c8aa['id']][_0xd025('0x19')]();}}return _0x192c82[_0xd025('0x9')];};};Realtime[_0xd025('0x12')][_0xd025('0x1b')]=function(){var _0x254bef=this;return function(_0x24f8d5){if(_0x24f8d5){freeIsNotKey(_0x24f8d5,_0x254bef[_0xd025('0xa')],'id');for(var _0x3a8957=0x0,_0x288781={},_0x471845={};_0x3a8957<_0x24f8d5['length'];_0x3a8957+=0x1){_0x288781=_0x24f8d5[_0x3a8957];if(_['isUndefined'](_0x254bef[_0xd025('0xa')][_0x288781['id']])){_0x254bef[_0xd025('0xa')][_0x288781['id']]=new FaxQueue(_0x288781);}else{_0x254bef[_0xd025('0x11')](_0x254bef['faxQueues'][_0x288781['id']],_0x288781);}_0x254bef['faxQueues'][_0x288781['id']][_0xd025('0x18')]();_0x254bef['faxQueues'][_0x288781['id']][_0xd025('0x19')]();}}return _0x254bef[_0xd025('0xa')];};};module[_0xd025('0x1c')]=Realtime;
\ No newline at end of file
index f63fa87..e3030ac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2912=['updateChatInteraction','addTags','addTagsToChatInteraction','../client','update','Request','UpdateChatInteraction'];(function(_0x10a0e5,_0x314414){var _0x202eb5=function(_0x3a5879){while(--_0x3a5879){_0x10a0e5['push'](_0x10a0e5['shift']());}};_0x202eb5(++_0x314414);}(_0x2912,0x18b));var _0x2291=function(_0x120506,_0x155083){_0x120506=_0x120506-0x0;var _0xc0d1=_0x2912[_0x120506];return _0xc0d1;};'use strict';var client=require(_0x2291('0x0'));exports[_0x2291('0x1')]=function(_0x36eb2c,_0x53102e){return client[_0x2291('0x2')](_0x2291('0x3'),{'body':_0x53102e,'options':{'where':{'id':_0x36eb2c}},'log':_0x2291('0x4')});};exports[_0x2291('0x5')]=function(_0x499d4f,_0x102776){return client[_0x2291('0x2')]('AddTagsToChatInteraction',{'body':_0x102776,'options':{'where':{'id':_0x499d4f}},'log':_0x2291('0x6')});};
\ No newline at end of file
+var _0xf054=['updateChatInteraction','addTags','addTagsToChatInteraction','../client','update','Request','UpdateChatInteraction'];(function(_0x410dec,_0x163447){var _0x1b6535=function(_0x2ac2d2){while(--_0x2ac2d2){_0x410dec['push'](_0x410dec['shift']());}};_0x1b6535(++_0x163447);}(_0xf054,0x14c));var _0x4f05=function(_0xeee51c,_0x448bee){_0xeee51c=_0xeee51c-0x0;var _0x2080e3=_0xf054[_0xeee51c];return _0x2080e3;};'use strict';var client=require(_0x4f05('0x0'));exports[_0x4f05('0x1')]=function(_0x506ce7,_0x1c0e38){return client[_0x4f05('0x2')](_0x4f05('0x3'),{'body':_0x1c0e38,'options':{'where':{'id':_0x506ce7}},'log':_0x4f05('0x4')});};exports[_0x4f05('0x5')]=function(_0x4865d0,_0x4ab678){return client[_0x4f05('0x2')]('AddTagsToChatInteraction',{'body':_0x4ab678,'options':{'where':{'id':_0x4865d0}},'log':_0x4f05('0x6')});};
\ No newline at end of file
index 349b6da..0fe08fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b19=['create','CreateChatMessage','createChatMessage','../client'];(function(_0x5b92e2,_0x1b37dd){var _0x330e08=function(_0x45f3d0){while(--_0x45f3d0){_0x5b92e2['push'](_0x5b92e2['shift']());}};_0x330e08(++_0x1b37dd);}(_0x0b19,0x1df));var _0x90b1=function(_0x1d4be2,_0x12c7ec){_0x1d4be2=_0x1d4be2-0x0;var _0x3df399=_0x0b19[_0x1d4be2];return _0x3df399;};'use strict';var client=require(_0x90b1('0x0'));exports[_0x90b1('0x1')]=function(_0x59276a){return client['Request'](_0x90b1('0x2'),{'body':_0x59276a,'log':_0x90b1('0x3')});};
\ No newline at end of file
+var _0xb065=['createChatMessage','../client','create','Request','CreateChatMessage'];(function(_0x5b5174,_0x1e9f5c){var _0x5d53f5=function(_0x3d0541){while(--_0x3d0541){_0x5b5174['push'](_0x5b5174['shift']());}};_0x5d53f5(++_0x1e9f5c);}(_0xb065,0xc9));var _0x5b06=function(_0x5a093c,_0x4fd0a5){_0x5a093c=_0x5a093c-0x0;var _0xedcce5=_0xb065[_0x5a093c];return _0xedcce5;};'use strict';var client=require(_0x5b06('0x0'));exports[_0x5b06('0x1')]=function(_0x44ebc1){return client[_0x5b06('0x2')](_0x5b06('0x3'),{'body':_0x44ebc1,'log':_0x5b06('0x4')});};
\ No newline at end of file
index 0f4e8fd..c9f4f5f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3ec=['name','timeout','strategy','User','Agents','online','chatPause','../client','getChatQueues','Request','GetChatQueue'];(function(_0x25e7cb,_0x3579b7){var _0x375d92=function(_0xe8cf3b){while(--_0xe8cf3b){_0x25e7cb['push'](_0x25e7cb['shift']());}};_0x375d92(++_0x3579b7);}(_0xc3ec,0xe3));var _0xcc3e=function(_0x2983c4,_0x571531){_0x2983c4=_0x2983c4-0x0;var _0x5e3197=_0xc3ec[_0x2983c4];return _0x5e3197;};'use strict';var client=require(_0xcc3e('0x0'));exports[_0xcc3e('0x1')]=function(){return function(){return client[_0xcc3e('0x2')](_0xcc3e('0x3'),{'options':{'raw':![],'attributes':['id',_0xcc3e('0x4'),_0xcc3e('0x5'),_0xcc3e('0x6')],'include':[{'model':_0xcc3e('0x7'),'as':_0xcc3e('0x8'),'attributes':['id',_0xcc3e('0x4'),_0xcc3e('0x9'),_0xcc3e('0xa')]}]},'log':_0xcc3e('0x1')});};};
\ No newline at end of file
+var _0xcf3e=['GetChatQueue','name','Agents','online','getChatQueues'];(function(_0x4da749,_0x33272a){var _0x59afaf=function(_0xd43a97){while(--_0xd43a97){_0x4da749['push'](_0x4da749['shift']());}};_0x59afaf(++_0x33272a);}(_0xcf3e,0xcc));var _0xecf3=function(_0xf34e59,_0x54f64e){_0xf34e59=_0xf34e59-0x0;var _0x50be83=_0xcf3e[_0xf34e59];return _0x50be83;};'use strict';var client=require('../client');exports[_0xecf3('0x0')]=function(){return function(){return client['Request'](_0xecf3('0x1'),{'options':{'raw':![],'attributes':['id',_0xecf3('0x2'),'timeout','strategy'],'include':[{'model':'User','as':_0xecf3('0x3'),'attributes':['id',_0xecf3('0x2'),_0xecf3('0x4'),'chatPause']}]},'log':_0xecf3('0x0')});};};
\ No newline at end of file
index 4a27858..96c80fc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf4d9=['Request','CreateChatQueueReport','update','UpdateChatQueueReport','../client'];(function(_0x49aad7,_0x38714d){var _0x477bf5=function(_0x5c3141){while(--_0x5c3141){_0x49aad7['push'](_0x49aad7['shift']());}};_0x477bf5(++_0x38714d);}(_0xf4d9,0x7c));var _0x9f4d=function(_0x207a95,_0x16f5d2){_0x207a95=_0x207a95-0x0;var _0x1e7c31=_0xf4d9[_0x207a95];return _0x1e7c31;};'use strict';var client=require(_0x9f4d('0x0'));exports['create']=function(_0xd078d2){return client[_0x9f4d('0x1')](_0x9f4d('0x2'),{'body':_0xd078d2,'log':_0x9f4d('0x2')});};exports[_0x9f4d('0x3')]=function(_0x47aa76,_0x179d90){return client[_0x9f4d('0x1')](_0x9f4d('0x4'),{'body':_0x179d90,'options':{'where':{'uniqueid':_0x47aa76},'order':[['id','DESC']],'limit':0x1},'log':_0x9f4d('0x4')});};
\ No newline at end of file
+var _0xc368=['update','UpdateChatQueueReport','DESC','create','Request','CreateChatQueueReport'];(function(_0x180cd0,_0x386c6e){var _0x49fc32=function(_0x551c2c){while(--_0x551c2c){_0x180cd0['push'](_0x180cd0['shift']());}};_0x49fc32(++_0x386c6e);}(_0xc368,0x7b));var _0x8c36=function(_0x5190f7,_0x1a21be){_0x5190f7=_0x5190f7-0x0;var _0xcea2cd=_0xc368[_0x5190f7];return _0xcea2cd;};'use strict';var client=require('../client');exports[_0x8c36('0x0')]=function(_0x4eaac5){return client[_0x8c36('0x1')](_0x8c36('0x2'),{'body':_0x4eaac5,'log':_0x8c36('0x2')});};exports[_0x8c36('0x3')]=function(_0x288b85,_0x5d3b27){return client[_0x8c36('0x1')](_0x8c36('0x4'),{'body':_0x5d3b27,'options':{'where':{'uniqueid':_0x288b85},'order':[['id',_0x8c36('0x5')]],'limit':0x1},'log':_0x8c36('0x4')});};
\ No newline at end of file
index fe05d78..99072ee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x951b=['UpdateFaxInteraction','addTags','addTagsToFaxInteraction'];(function(_0x3ddeb0,_0xea8d9a){var _0x392659=function(_0x30d1ca){while(--_0x30d1ca){_0x3ddeb0['push'](_0x3ddeb0['shift']());}};_0x392659(++_0xea8d9a);}(_0x951b,0x14d));var _0xb951=function(_0x5473d2,_0x10d04d){_0x5473d2=_0x5473d2-0x0;var _0x2e5d13=_0x951b[_0x5473d2];return _0x2e5d13;};'use strict';var client=require('../client');exports['update']=function(_0x1bfd07,_0x5997f4){return client['Request'](_0xb951('0x0'),{'body':_0x5997f4,'options':{'where':{'id':_0x1bfd07}},'log':'updateFaxInteraction'});};exports[_0xb951('0x1')]=function(_0x4bd5cf,_0x2835ed){return client['Request']('AddTagsToFaxInteraction',{'body':_0x2835ed,'options':{'where':{'id':_0x4bd5cf}},'log':_0xb951('0x2')});};
\ No newline at end of file
+var _0xed66=['addTags','AddTagsToFaxInteraction','update','Request','UpdateFaxInteraction'];(function(_0x293426,_0x3644e0){var _0x4da316=function(_0x5b5cc6){while(--_0x5b5cc6){_0x293426['push'](_0x293426['shift']());}};_0x4da316(++_0x3644e0);}(_0xed66,0x1e7));var _0x6ed6=function(_0x2d0854,_0x4c5b12){_0x2d0854=_0x2d0854-0x0;var _0x287c91=_0xed66[_0x2d0854];return _0x287c91;};'use strict';var client=require('../client');exports[_0x6ed6('0x0')]=function(_0x3c6b9d,_0x4d4be8){return client[_0x6ed6('0x1')](_0x6ed6('0x2'),{'body':_0x4d4be8,'options':{'where':{'id':_0x3c6b9d}},'log':'updateFaxInteraction'});};exports[_0x6ed6('0x3')]=function(_0x29ff4d,_0x5a6b1e){return client[_0x6ed6('0x1')](_0x6ed6('0x4'),{'body':_0x5a6b1e,'options':{'where':{'id':_0x29ff4d}},'log':'addTagsToFaxInteraction'});};
\ No newline at end of file
index 8653fbf..97b7b08 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa1f9=['create','Request','createFaxMessage','../client'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa1f9,0x9f));var _0x9a1f=function(_0x3637ba,_0x72743e){_0x3637ba=_0x3637ba-0x0;var _0xe85f07=_0xa1f9[_0x3637ba];return _0xe85f07;};'use strict';var client=require(_0x9a1f('0x0'));exports[_0x9a1f('0x1')]=function(_0x568028){return client[_0x9a1f('0x2')]('CreateFaxMessage',{'body':_0x568028,'log':_0x9a1f('0x3')});};
\ No newline at end of file
+var _0x1003=['../client','create','Request','createFaxMessage'];(function(_0x137ae0,_0x2d7c73){var _0x5efd54=function(_0xbbd988){while(--_0xbbd988){_0x137ae0['push'](_0x137ae0['shift']());}};_0x5efd54(++_0x2d7c73);}(_0x1003,0x1bc));var _0x3100=function(_0x123930,_0x294ac0){_0x123930=_0x123930-0x0;var _0x24d809=_0x1003[_0x123930];return _0x24d809;};'use strict';var client=require(_0x3100('0x0'));exports[_0x3100('0x1')]=function(_0x100cac){return client[_0x3100('0x2')]('CreateFaxMessage',{'body':_0x100cac,'log':_0x3100('0x3')});};
\ No newline at end of file
index 8d46370..b7d65e5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9b70=['strategy','User','Agents','online','getFaxQueues','Request','GetFaxQueue','name','timeout'];(function(_0x32a940,_0x23ee12){var _0x1934a8=function(_0x210830){while(--_0x210830){_0x32a940['push'](_0x32a940['shift']());}};_0x1934a8(++_0x23ee12);}(_0x9b70,0xa6));var _0x09b7=function(_0x5e99ae,_0x37d21f){_0x5e99ae=_0x5e99ae-0x0;var _0x286019=_0x9b70[_0x5e99ae];return _0x286019;};'use strict';var client=require('../client');exports[_0x09b7('0x0')]=function(){return function(){return client[_0x09b7('0x1')](_0x09b7('0x2'),{'options':{'raw':![],'attributes':['id',_0x09b7('0x3'),_0x09b7('0x4'),_0x09b7('0x5')],'include':[{'model':_0x09b7('0x6'),'as':_0x09b7('0x7'),'attributes':['id',_0x09b7('0x3'),_0x09b7('0x8'),'faxPause']}]},'log':_0x09b7('0x0')});};};
\ No newline at end of file
+var _0x37a6=['Agents','online','faxPause','getFaxQueues','Request','GetFaxQueue','name','timeout','strategy'];(function(_0x314b7f,_0x44e210){var _0x7c7096=function(_0x3a0479){while(--_0x3a0479){_0x314b7f['push'](_0x314b7f['shift']());}};_0x7c7096(++_0x44e210);}(_0x37a6,0xdb));var _0x637a=function(_0x36ac8a,_0x4b2ade){_0x36ac8a=_0x36ac8a-0x0;var _0x303482=_0x37a6[_0x36ac8a];return _0x303482;};'use strict';var client=require('../client');exports[_0x637a('0x0')]=function(){return function(){return client[_0x637a('0x1')](_0x637a('0x2'),{'options':{'raw':![],'attributes':['id',_0x637a('0x3'),_0x637a('0x4'),_0x637a('0x5')],'include':[{'model':'User','as':_0x637a('0x6'),'attributes':['id','name',_0x637a('0x7'),_0x637a('0x8')]}]},'log':_0x637a('0x0')});};};
\ No newline at end of file
index 7860eca..6247348 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd3fe=['CreateFaxQueueReport','update','UpdateFaxQueueReport','DESC','create','Request'];(function(_0x286a7f,_0x21db56){var _0x3faca1=function(_0x57ee62){while(--_0x57ee62){_0x286a7f['push'](_0x286a7f['shift']());}};_0x3faca1(++_0x21db56);}(_0xd3fe,0xb2));var _0xed3f=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xd3fe[_0x3dd15e];return _0x231fd0;};'use strict';var client=require('../client');exports[_0xed3f('0x0')]=function(_0x3152f3){return client[_0xed3f('0x1')](_0xed3f('0x2'),{'body':_0x3152f3,'log':_0xed3f('0x2')});};exports[_0xed3f('0x3')]=function(_0x23c5dd,_0x1d6d87){return client[_0xed3f('0x1')](_0xed3f('0x4'),{'body':_0x1d6d87,'options':{'where':{'uniqueid':_0x23c5dd},'order':[['id',_0xed3f('0x5')]],'limit':0x1},'log':_0xed3f('0x4')});};
\ No newline at end of file
+var _0xb646=['Request','CreateFaxQueueReport','update','DESC','UpdateFaxQueueReport','../client','create'];(function(_0x18b41a,_0x32858b){var _0x4519a5=function(_0x3baa32){while(--_0x3baa32){_0x18b41a['push'](_0x18b41a['shift']());}};_0x4519a5(++_0x32858b);}(_0xb646,0x83));var _0x6b64=function(_0x250400,_0x2d3759){_0x250400=_0x250400-0x0;var _0x55f86e=_0xb646[_0x250400];return _0x55f86e;};'use strict';var client=require(_0x6b64('0x0'));exports[_0x6b64('0x1')]=function(_0x97af11){return client[_0x6b64('0x2')](_0x6b64('0x3'),{'body':_0x97af11,'log':_0x6b64('0x3')});};exports[_0x6b64('0x4')]=function(_0x1c4b37,_0x5b4081){return client[_0x6b64('0x2')]('UpdateFaxQueueReport',{'body':_0x5b4081,'options':{'where':{'uniqueid':_0x1c4b37},'order':[['id',_0x6b64('0x5')]],'limit':0x1},'log':_0x6b64('0x6')});};
\ No newline at end of file
index 35d7ca4..c18adf2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7e7=['getIntervals','../client','Request','name','Intervals','interval'];(function(_0x4a7984,_0x33e68f){var _0x40b15b=function(_0x2d852e){while(--_0x2d852e){_0x4a7984['push'](_0x4a7984['shift']());}};_0x40b15b(++_0x33e68f);}(_0xb7e7,0x121));var _0x7b7e=function(_0x3ab9ee,_0x4a74b8){_0x3ab9ee=_0x3ab9ee-0x0;var _0x82ee88=_0xb7e7[_0x3ab9ee];return _0x82ee88;};'use strict';var client=require(_0x7b7e('0x0'));exports['getIntervals']=function(){return function(){return client[_0x7b7e('0x1')]('GetInterval',{'options':{'raw':![],'where':{'IntervalId':null},'attributes':['id',_0x7b7e('0x2')],'include':[{'model':'Interval','as':_0x7b7e('0x3'),'attributes':['id','name',_0x7b7e('0x4')]}]},'log':_0x7b7e('0x5')});};};
\ No newline at end of file
+var _0x4cf8=['interval','../client','getIntervals','Request','GetInterval','name','Interval','Intervals'];(function(_0x5251a2,_0x5a6e7b){var _0xe11a34=function(_0x4df9fe){while(--_0x4df9fe){_0x5251a2['push'](_0x5251a2['shift']());}};_0xe11a34(++_0x5a6e7b);}(_0x4cf8,0x1e1));var _0x84cf=function(_0x5875ad,_0x3597b8){_0x5875ad=_0x5875ad-0x0;var _0x32a922=_0x4cf8[_0x5875ad];return _0x32a922;};'use strict';var client=require(_0x84cf('0x0'));exports[_0x84cf('0x1')]=function(){return function(){return client[_0x84cf('0x2')](_0x84cf('0x3'),{'options':{'raw':![],'where':{'IntervalId':null},'attributes':['id',_0x84cf('0x4')],'include':[{'model':_0x84cf('0x5'),'as':_0x84cf('0x6'),'attributes':['id',_0x84cf('0x4'),_0x84cf('0x7')]}]},'log':_0x84cf('0x1')});};};
\ No newline at end of file
index ec2f457..db3ed5e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2705=['../client','update','Request','addTagsToChatInteraction'];(function(_0x44960d,_0x27ab5f){var _0x370dbf=function(_0x1a8098){while(--_0x1a8098){_0x44960d['push'](_0x44960d['shift']());}};_0x370dbf(++_0x27ab5f);}(_0x2705,0x1e4));var _0x5270=function(_0x1f2981,_0x1a4b55){_0x1f2981=_0x1f2981-0x0;var _0x16db4c=_0x2705[_0x1f2981];return _0x16db4c;};'use strict';var client=require(_0x5270('0x0'));exports[_0x5270('0x1')]=function(_0x45d845,_0x34061b){return client[_0x5270('0x2')]('UpdateMailInteraction',{'body':_0x34061b,'options':{'where':{'id':_0x45d845}},'log':'updateMailInteraction'});};exports['addTags']=function(_0x1cb810,_0x814973){return client['Request']('AddTagsToMailInteraction',{'body':_0x814973,'options':{'where':{'id':_0x1cb810}},'log':_0x5270('0x3')});};
\ No newline at end of file
+var _0x9396=['updateMailInteraction','addTagsToChatInteraction','../client','update','Request','UpdateMailInteraction'];(function(_0x280565,_0x32f01e){var _0x3bbf6d=function(_0x5a00d5){while(--_0x5a00d5){_0x280565['push'](_0x280565['shift']());}};_0x3bbf6d(++_0x32f01e);}(_0x9396,0x146));var _0x6939=function(_0x8a08a3,_0x5c4ea0){_0x8a08a3=_0x8a08a3-0x0;var _0x4148b2=_0x9396[_0x8a08a3];return _0x4148b2;};'use strict';var client=require(_0x6939('0x0'));exports[_0x6939('0x1')]=function(_0x3dd5c5,_0x1b5416){return client[_0x6939('0x2')](_0x6939('0x3'),{'body':_0x1b5416,'options':{'where':{'id':_0x3dd5c5}},'log':_0x6939('0x4')});};exports['addTags']=function(_0x5df61c,_0x470cd8){return client[_0x6939('0x2')]('AddTagsToMailInteraction',{'body':_0x470cd8,'options':{'where':{'id':_0x5df61c}},'log':_0x6939('0x5')});};
\ No newline at end of file
index 30faec9..7fc3aca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1916=['createMailMessage','../client','create','Request','CreateMailMessage'];(function(_0x53d577,_0x519654){var _0x4d2669=function(_0x57174f){while(--_0x57174f){_0x53d577['push'](_0x53d577['shift']());}};_0x4d2669(++_0x519654);}(_0x1916,0x1be));var _0x6191=function(_0x47c89f,_0x16efa5){_0x47c89f=_0x47c89f-0x0;var _0x1496a3=_0x1916[_0x47c89f];return _0x1496a3;};'use strict';var client=require(_0x6191('0x0'));exports[_0x6191('0x1')]=function(_0x4ff491){return client[_0x6191('0x2')](_0x6191('0x3'),{'body':_0x4ff491,'log':_0x6191('0x4')});};
\ No newline at end of file
+var _0xe3a4=['CreateMailMessage','createMailMessage','../client'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0xe3a4,0x12e));var _0x4e3a=function(_0x55cf42,_0x78be01){_0x55cf42=_0x55cf42-0x0;var _0x4559bb=_0xe3a4[_0x55cf42];return _0x4559bb;};'use strict';var client=require(_0x4e3a('0x0'));exports['create']=function(_0x519a58){return client['Request'](_0x4e3a('0x1'),{'body':_0x519a58,'log':_0x4e3a('0x2')});};
\ No newline at end of file
index 98783b3..e3f60a5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5c75=['Agents','online','../client','getMailQueues','GetMailQueue','name','timeout','strategy'];(function(_0x2170b1,_0x5c99e9){var _0x4be2c3=function(_0x790566){while(--_0x790566){_0x2170b1['push'](_0x2170b1['shift']());}};_0x4be2c3(++_0x5c99e9);}(_0x5c75,0xf2));var _0x55c7=function(_0x1e2939,_0x1f1ddc){_0x1e2939=_0x1e2939-0x0;var _0x1a1028=_0x5c75[_0x1e2939];return _0x1a1028;};'use strict';var client=require(_0x55c7('0x0'));exports[_0x55c7('0x1')]=function(){return function(){return client['Request'](_0x55c7('0x2'),{'options':{'raw':![],'attributes':['id',_0x55c7('0x3'),_0x55c7('0x4'),_0x55c7('0x5')],'include':[{'model':'User','as':_0x55c7('0x6'),'attributes':['id','name',_0x55c7('0x7'),'mailPause']}]},'log':'getMailQueues'});};};
\ No newline at end of file
+var _0xcb25=['timeout','strategy','User','online','getMailQueues','../client','GetMailQueue','name'];(function(_0x4e65cd,_0x13674b){var _0x524a1c=function(_0x43c6d4){while(--_0x43c6d4){_0x4e65cd['push'](_0x4e65cd['shift']());}};_0x524a1c(++_0x13674b);}(_0xcb25,0x1bd));var _0x5cb2=function(_0xe9c8e4,_0x3aa2f6){_0xe9c8e4=_0xe9c8e4-0x0;var _0x2037fa=_0xcb25[_0xe9c8e4];return _0x2037fa;};'use strict';var client=require(_0x5cb2('0x0'));exports['getMailQueues']=function(){return function(){return client['Request'](_0x5cb2('0x1'),{'options':{'raw':![],'attributes':['id',_0x5cb2('0x2'),_0x5cb2('0x3'),_0x5cb2('0x4')],'include':[{'model':_0x5cb2('0x5'),'as':'Agents','attributes':['id','name',_0x5cb2('0x6'),'mailPause']}]},'log':_0x5cb2('0x7')});};};
\ No newline at end of file
index 7c43dd5..fb38f26 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0358=['../client','create','Request','CreateMailQueueReport','update','DESC','UpdateMailQueueReport'];(function(_0x3138f1,_0x1c38e4){var _0x2de6ad=function(_0x2bd106){while(--_0x2bd106){_0x3138f1['push'](_0x3138f1['shift']());}};_0x2de6ad(++_0x1c38e4);}(_0x0358,0x17a));var _0x8035=function(_0x419e27,_0x18327f){_0x419e27=_0x419e27-0x0;var _0x42ac7b=_0x0358[_0x419e27];return _0x42ac7b;};'use strict';var client=require(_0x8035('0x0'));exports[_0x8035('0x1')]=function(_0x1d57a0){return client[_0x8035('0x2')](_0x8035('0x3'),{'body':_0x1d57a0,'log':_0x8035('0x3')});};exports[_0x8035('0x4')]=function(_0x373663,_0x500c2d){return client['Request']('UpdateMailQueueReport',{'body':_0x500c2d,'options':{'where':{'uniqueid':_0x373663},'order':[['id',_0x8035('0x5')]],'limit':0x1},'log':_0x8035('0x6')});};
\ No newline at end of file
+var _0x2942=['../client','create','Request','CreateMailQueueReport','update','DESC'];(function(_0x54de4a,_0xf89f9b){var _0x3068ec=function(_0x90c685){while(--_0x90c685){_0x54de4a['push'](_0x54de4a['shift']());}};_0x3068ec(++_0xf89f9b);}(_0x2942,0x1b6));var _0x2294=function(_0x3df3b4,_0x37d103){_0x3df3b4=_0x3df3b4-0x0;var _0x4884b0=_0x2942[_0x3df3b4];return _0x4884b0;};'use strict';var client=require(_0x2294('0x0'));exports[_0x2294('0x1')]=function(_0x5f256d){return client[_0x2294('0x2')](_0x2294('0x3'),{'body':_0x5f256d,'log':_0x2294('0x3')});};exports[_0x2294('0x4')]=function(_0x16930f,_0x2fcc6e){return client['Request']('UpdateMailQueueReport',{'body':_0x2fcc6e,'options':{'where':{'uniqueid':_0x16930f},'order':[['id',_0x2294('0x5')]],'limit':0x1},'log':'UpdateMailQueueReport'});};
\ No newline at end of file
index 0b40399..b27765a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeda8=['UpdateOpenchannelInteraction','updateOpenchannelInteraction','addTags','AddTagsToOpenchannelInteraction','../client','update'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xeda8,0x148));var _0x8eda=function(_0x23e26c,_0x369cc2){_0x23e26c=_0x23e26c-0x0;var _0x14cf8c=_0xeda8[_0x23e26c];return _0x14cf8c;};'use strict';var client=require(_0x8eda('0x0'));exports[_0x8eda('0x1')]=function(_0x47626c,_0x23e358){return client['Request'](_0x8eda('0x2'),{'body':_0x23e358,'options':{'where':{'id':_0x47626c}},'log':_0x8eda('0x3')});};exports[_0x8eda('0x4')]=function(_0x32edc2,_0x3672fa){return client['Request'](_0x8eda('0x5'),{'body':_0x3672fa,'options':{'where':{'id':_0x32edc2}},'log':'addTagsToChatInteraction'});};
\ No newline at end of file
+var _0x8f49=['Request','updateOpenchannelInteraction','addTags'];(function(_0x487d0a,_0x1b7cb4){var _0x3d740c=function(_0xa714f2){while(--_0xa714f2){_0x487d0a['push'](_0x487d0a['shift']());}};_0x3d740c(++_0x1b7cb4);}(_0x8f49,0x1a4));var _0x98f4=function(_0x509058,_0x3315f4){_0x509058=_0x509058-0x0;var _0x4807a7=_0x8f49[_0x509058];return _0x4807a7;};'use strict';var client=require('../client');exports['update']=function(_0xa82485,_0x25ae10){return client[_0x98f4('0x0')]('UpdateOpenchannelInteraction',{'body':_0x25ae10,'options':{'where':{'id':_0xa82485}},'log':_0x98f4('0x1')});};exports[_0x98f4('0x2')]=function(_0x6a2179,_0x5b1e2f){return client[_0x98f4('0x0')]('AddTagsToOpenchannelInteraction',{'body':_0x5b1e2f,'options':{'where':{'id':_0x6a2179}},'log':'addTagsToChatInteraction'});};
\ No newline at end of file
index 5d7e502..81c6f29 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x54ef=['CreateOpenchannelMessage','createOpenchannelMessage','../client','create'];(function(_0x49b769,_0x3aaad2){var _0x835140=function(_0x24593d){while(--_0x24593d){_0x49b769['push'](_0x49b769['shift']());}};_0x835140(++_0x3aaad2);}(_0x54ef,0x112));var _0xf54e=function(_0x425f2d,_0xaef2c0){_0x425f2d=_0x425f2d-0x0;var _0x108a38=_0x54ef[_0x425f2d];return _0x108a38;};'use strict';var client=require(_0xf54e('0x0'));exports[_0xf54e('0x1')]=function(_0x12c070){return client['Request'](_0xf54e('0x2'),{'body':_0x12c070,'log':_0xf54e('0x3')});};
\ No newline at end of file
+var _0x9a19=['../client','create','CreateOpenchannelMessage','createOpenchannelMessage'];(function(_0x3f1076,_0x23b6c1){var _0x21d34f=function(_0x3af4f4){while(--_0x3af4f4){_0x3f1076['push'](_0x3f1076['shift']());}};_0x21d34f(++_0x23b6c1);}(_0x9a19,0x114));var _0x99a1=function(_0x425716,_0x3e9d1c){_0x425716=_0x425716-0x0;var _0x2d39af=_0x9a19[_0x425716];return _0x2d39af;};'use strict';var client=require(_0x99a1('0x0'));exports[_0x99a1('0x1')]=function(_0x3d860b){return client['Request'](_0x99a1('0x2'),{'body':_0x3d860b,'log':_0x99a1('0x3')});};
\ No newline at end of file
index 1e79972..dee820a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x25c8=['Agents','name','online','openchannelPause','getOpenchannelQueues','../client','Request','GetOpenchannelQueue','timeout','strategy','User'];(function(_0x276f17,_0x54664e){var _0x3b8c5e=function(_0x162f98){while(--_0x162f98){_0x276f17['push'](_0x276f17['shift']());}};_0x3b8c5e(++_0x54664e);}(_0x25c8,0xb5));var _0x825c=function(_0x786ac4,_0x2dc7c0){_0x786ac4=_0x786ac4-0x0;var _0x565c90=_0x25c8[_0x786ac4];return _0x565c90;};'use strict';var client=require(_0x825c('0x0'));exports['getOpenchannelQueues']=function(){return function(){return client[_0x825c('0x1')](_0x825c('0x2'),{'options':{'raw':![],'attributes':['id','name',_0x825c('0x3'),_0x825c('0x4')],'include':[{'model':_0x825c('0x5'),'as':_0x825c('0x6'),'attributes':['id',_0x825c('0x7'),_0x825c('0x8'),_0x825c('0x9')]}]},'log':_0x825c('0xa')});};};
\ No newline at end of file
+var _0xd7b4=['GetOpenchannelQueue','name','timeout','strategy','User','online','openchannelPause','../client','getOpenchannelQueues','Request'];(function(_0x4bbeb6,_0x433969){var _0x4fac4a=function(_0x437eb2){while(--_0x437eb2){_0x4bbeb6['push'](_0x4bbeb6['shift']());}};_0x4fac4a(++_0x433969);}(_0xd7b4,0x75));var _0x4d7b=function(_0x1d2d4c,_0x340107){_0x1d2d4c=_0x1d2d4c-0x0;var _0x58ed56=_0xd7b4[_0x1d2d4c];return _0x58ed56;};'use strict';var client=require(_0x4d7b('0x0'));exports[_0x4d7b('0x1')]=function(){return function(){return client[_0x4d7b('0x2')](_0x4d7b('0x3'),{'options':{'raw':![],'attributes':['id',_0x4d7b('0x4'),_0x4d7b('0x5'),_0x4d7b('0x6')],'include':[{'model':_0x4d7b('0x7'),'as':'Agents','attributes':['id','name',_0x4d7b('0x8'),_0x4d7b('0x9')]}]},'log':_0x4d7b('0x1')});};};
\ No newline at end of file
index 142eca7..a8efc08 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8de4=['DESC','Request','CreateOpenchannelQueueReport','update','UpdateOpenchannelQueueReport'];(function(_0x386380,_0x5b467f){var _0x43294c=function(_0x21db11){while(--_0x21db11){_0x386380['push'](_0x386380['shift']());}};_0x43294c(++_0x5b467f);}(_0x8de4,0x1cd));var _0x48de=function(_0x4c5715,_0x5647e2){_0x4c5715=_0x4c5715-0x0;var _0x2ee713=_0x8de4[_0x4c5715];return _0x2ee713;};'use strict';var client=require('../client');exports['create']=function(_0x55dc67){return client[_0x48de('0x0')](_0x48de('0x1'),{'body':_0x55dc67,'log':_0x48de('0x1')});};exports[_0x48de('0x2')]=function(_0x21ab52,_0x119b50){return client[_0x48de('0x0')](_0x48de('0x3'),{'body':_0x119b50,'options':{'where':{'uniqueid':_0x21ab52},'order':[['id',_0x48de('0x4')]],'limit':0x1},'log':_0x48de('0x3')});};
\ No newline at end of file
+var _0x6fe2=['create','CreateOpenchannelQueueReport','update','Request','UpdateOpenchannelQueueReport','DESC','../client'];(function(_0x542533,_0x579fd2){var _0x2d2cf9=function(_0x109131){while(--_0x109131){_0x542533['push'](_0x542533['shift']());}};_0x2d2cf9(++_0x579fd2);}(_0x6fe2,0x76));var _0x26fe=function(_0x19969c,_0x5c1e8c){_0x19969c=_0x19969c-0x0;var _0x57a30f=_0x6fe2[_0x19969c];return _0x57a30f;};'use strict';var client=require(_0x26fe('0x0'));exports[_0x26fe('0x1')]=function(_0x1616fb){return client['Request'](_0x26fe('0x2'),{'body':_0x1616fb,'log':_0x26fe('0x2')});};exports[_0x26fe('0x3')]=function(_0x4edcf8,_0x7852ef){return client[_0x26fe('0x4')](_0x26fe('0x5'),{'body':_0x7852ef,'options':{'where':{'uniqueid':_0x4edcf8},'order':[['id',_0x26fe('0x6')]],'limit':0x1},'log':'UpdateOpenchannelQueueReport'});};
\ No newline at end of file
index c8cd9d7..1f661eb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4fd0=['Request','AddTagsToSmsInteraction','addTagsToSmsInteraction','../client','update'];(function(_0x56f8fe,_0x4afdad){var _0x22b2c2=function(_0x574186){while(--_0x574186){_0x56f8fe['push'](_0x56f8fe['shift']());}};_0x22b2c2(++_0x4afdad);}(_0x4fd0,0x120));var _0x04fd=function(_0x4978de,_0x5912e4){_0x4978de=_0x4978de-0x0;var _0x675221=_0x4fd0[_0x4978de];return _0x675221;};'use strict';var client=require(_0x04fd('0x0'));exports[_0x04fd('0x1')]=function(_0x525442,_0x13ac94){return client[_0x04fd('0x2')]('UpdateSmsInteraction',{'body':_0x13ac94,'options':{'where':{'id':_0x525442}},'log':'updateSmsInteraction'});};exports['addTags']=function(_0x176016,_0x4b8415){return client['Request'](_0x04fd('0x3'),{'body':_0x4b8415,'options':{'where':{'id':_0x176016}},'log':_0x04fd('0x4')});};
\ No newline at end of file
+var _0x6a3e=['addTagsToSmsInteraction','Request','UpdateSmsInteraction','addTags','AddTagsToSmsInteraction'];(function(_0x109557,_0x1192ac){var _0x365920=function(_0x1797c5){while(--_0x1797c5){_0x109557['push'](_0x109557['shift']());}};_0x365920(++_0x1192ac);}(_0x6a3e,0x187));var _0xe6a3=function(_0x3cd4bd,_0x50acf7){_0x3cd4bd=_0x3cd4bd-0x0;var _0x4595bb=_0x6a3e[_0x3cd4bd];return _0x4595bb;};'use strict';var client=require('../client');exports['update']=function(_0x4e8039,_0x3c971e){return client[_0xe6a3('0x0')](_0xe6a3('0x1'),{'body':_0x3c971e,'options':{'where':{'id':_0x4e8039}},'log':'updateSmsInteraction'});};exports[_0xe6a3('0x2')]=function(_0x325836,_0x4f3d7d){return client[_0xe6a3('0x0')](_0xe6a3('0x3'),{'body':_0x4f3d7d,'options':{'where':{'id':_0x325836}},'log':_0xe6a3('0x4')});};
\ No newline at end of file
index 5e556b1..fa64fdf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb2d5=['../client','Request','CreateSmsMessage','createSmsMessage'];(function(_0x32729c,_0xf5afd8){var _0x482cfd=function(_0x231471){while(--_0x231471){_0x32729c['push'](_0x32729c['shift']());}};_0x482cfd(++_0xf5afd8);}(_0xb2d5,0x11c));var _0x5b2d=function(_0x3bf597,_0x159a52){_0x3bf597=_0x3bf597-0x0;var _0x355784=_0xb2d5[_0x3bf597];return _0x355784;};'use strict';var client=require(_0x5b2d('0x0'));exports['create']=function(_0x189099){return client[_0x5b2d('0x1')](_0x5b2d('0x2'),{'body':_0x189099,'log':_0x5b2d('0x3')});};
\ No newline at end of file
+var _0x7aa2=['createSmsMessage','../client','create','Request','CreateSmsMessage'];(function(_0x3fd545,_0x25cec3){var _0x450d4c=function(_0x3f8d6c){while(--_0x3f8d6c){_0x3fd545['push'](_0x3fd545['shift']());}};_0x450d4c(++_0x25cec3);}(_0x7aa2,0x132));var _0x27aa=function(_0x139eb2,_0x3d7e18){_0x139eb2=_0x139eb2-0x0;var _0x2a5657=_0x7aa2[_0x139eb2];return _0x2a5657;};'use strict';var client=require(_0x27aa('0x0'));exports[_0x27aa('0x1')]=function(_0x165bc1){return client[_0x27aa('0x2')](_0x27aa('0x3'),{'body':_0x165bc1,'log':_0x27aa('0x4')});};
\ No newline at end of file
index b04583f..27ef993 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb4d=['smsPause','getSmsQueues','Request','GetSmsQueue','name','timeout','strategy','Agents','online'];(function(_0x5c2d06,_0x47b3f2){var _0x179970=function(_0x43d11f){while(--_0x43d11f){_0x5c2d06['push'](_0x5c2d06['shift']());}};_0x179970(++_0x47b3f2);}(_0xbb4d,0x19f));var _0xdbb4=function(_0x4977d6,_0xcb82b0){_0x4977d6=_0x4977d6-0x0;var _0x544d35=_0xbb4d[_0x4977d6];return _0x544d35;};'use strict';var client=require('../client');exports[_0xdbb4('0x0')]=function(){return function(){return client[_0xdbb4('0x1')](_0xdbb4('0x2'),{'options':{'raw':![],'attributes':['id',_0xdbb4('0x3'),_0xdbb4('0x4'),_0xdbb4('0x5')],'include':[{'model':'User','as':_0xdbb4('0x6'),'attributes':['id',_0xdbb4('0x3'),_0xdbb4('0x7'),_0xdbb4('0x8')]}]},'log':'getSmsQueues'});};};
\ No newline at end of file
+var _0xe391=['Request','name','timeout','strategy','User','Agents','online','smsPause','getSmsQueues','../client'];(function(_0x407879,_0x33e702){var _0x469241=function(_0x1de075){while(--_0x1de075){_0x407879['push'](_0x407879['shift']());}};_0x469241(++_0x33e702);}(_0xe391,0x1f3));var _0x1e39=function(_0x55c1f0,_0x4f574f){_0x55c1f0=_0x55c1f0-0x0;var _0x1530fa=_0xe391[_0x55c1f0];return _0x1530fa;};'use strict';var client=require(_0x1e39('0x0'));exports['getSmsQueues']=function(){return function(){return client[_0x1e39('0x1')]('GetSmsQueue',{'options':{'raw':![],'attributes':['id',_0x1e39('0x2'),_0x1e39('0x3'),_0x1e39('0x4')],'include':[{'model':_0x1e39('0x5'),'as':_0x1e39('0x6'),'attributes':['id',_0x1e39('0x2'),_0x1e39('0x7'),_0x1e39('0x8')]}]},'log':_0x1e39('0x9')});};};
\ No newline at end of file
index b64126b..cf7eabf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x340e=['UpdateSmsQueueReport','../client','CreateSmsQueueReport','update','Request'];(function(_0x2bfe4a,_0x56489a){var _0x4ce1ed=function(_0x2a2cdd){while(--_0x2a2cdd){_0x2bfe4a['push'](_0x2bfe4a['shift']());}};_0x4ce1ed(++_0x56489a);}(_0x340e,0x1dc));var _0xe340=function(_0x5df430,_0x45eed9){_0x5df430=_0x5df430-0x0;var _0x1d470b=_0x340e[_0x5df430];return _0x1d470b;};'use strict';var client=require(_0xe340('0x0'));exports['create']=function(_0x110b33){return client['Request']('CreateSmsQueueReport',{'body':_0x110b33,'log':_0xe340('0x1')});};exports[_0xe340('0x2')]=function(_0x559409,_0x220c39){return client[_0xe340('0x3')](_0xe340('0x4'),{'body':_0x220c39,'options':{'where':{'uniqueid':_0x559409},'order':[['id','DESC']],'limit':0x1},'log':_0xe340('0x4')});};
\ No newline at end of file
+var _0x9aea=['UpdateSmsQueueReport','../client','create','CreateSmsQueueReport','Request'];(function(_0x19d3c0,_0x560544){var _0x56e32a=function(_0x423e3e){while(--_0x423e3e){_0x19d3c0['push'](_0x19d3c0['shift']());}};_0x56e32a(++_0x560544);}(_0x9aea,0x196));var _0xa9ae=function(_0x6fb433,_0x32ed35){_0x6fb433=_0x6fb433-0x0;var _0x1a6c50=_0x9aea[_0x6fb433];return _0x1a6c50;};'use strict';var client=require(_0xa9ae('0x0'));exports[_0xa9ae('0x1')]=function(_0x3980f4){return client['Request']('CreateSmsQueueReport',{'body':_0x3980f4,'log':_0xa9ae('0x2')});};exports['update']=function(_0x4d5006,_0x3ea938){return client[_0xa9ae('0x3')](_0xa9ae('0x4'),{'body':_0x3ea938,'options':{'where':{'uniqueid':_0x4d5006},'order':[['id','DESC']],'limit':0x1},'log':_0xa9ae('0x4')});};
\ No newline at end of file
index 4953c8a..57b46b5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9de7=['name','online','lastPauseAt','faxPause','smsPause','openchannelPause','faxCapacity','smsCapacity','openchannelCapacity','../client','getAgents','Request','GetUser','agent'];(function(_0x194353,_0x571242){var _0x101808=function(_0x7d59b9){while(--_0x7d59b9){_0x194353['push'](_0x194353['shift']());}};_0x101808(++_0x571242);}(_0x9de7,0x6b));var _0x79de=function(_0x597484,_0x199340){_0x597484=_0x597484-0x0;var _0x218e64=_0x9de7[_0x597484];return _0x218e64;};'use strict';var client=require(_0x79de('0x0'));exports[_0x79de('0x1')]=function(){return function(){return client[_0x79de('0x2')](_0x79de('0x3'),{'options':{'raw':!![],'where':{'role':_0x79de('0x4')},'attributes':['id',_0x79de('0x5'),_0x79de('0x6'),'pauseType',_0x79de('0x7'),'voicePause','chatPause','mailPause',_0x79de('0x8'),_0x79de('0x9'),_0x79de('0xa'),'chatCapacity','mailCapacity',_0x79de('0xb'),_0x79de('0xc'),_0x79de('0xd')]},'log':_0x79de('0x1')});};};
\ No newline at end of file
+var _0x884f=['lastPauseAt','chatPause','faxPause','chatCapacity','faxCapacity','smsCapacity','openchannelCapacity','../client','getAgents','Request','GetUser','agent','name','online','pauseType'];(function(_0x556979,_0x2fc2fc){var _0x437df7=function(_0x1368d2){while(--_0x1368d2){_0x556979['push'](_0x556979['shift']());}};_0x437df7(++_0x2fc2fc);}(_0x884f,0x1ba));var _0xf884=function(_0x224639,_0x4336b6){_0x224639=_0x224639-0x0;var _0x5dd7d3=_0x884f[_0x224639];return _0x5dd7d3;};'use strict';var client=require(_0xf884('0x0'));exports[_0xf884('0x1')]=function(){return function(){return client[_0xf884('0x2')](_0xf884('0x3'),{'options':{'raw':!![],'where':{'role':_0xf884('0x4')},'attributes':['id',_0xf884('0x5'),_0xf884('0x6'),_0xf884('0x7'),_0xf884('0x8'),'voicePause',_0xf884('0x9'),'mailPause',_0xf884('0xa'),'smsPause','openchannelPause',_0xf884('0xb'),'mailCapacity',_0xf884('0xc'),_0xf884('0xd'),_0xf884('0xe')]},'log':_0xf884('0x1')});};};
\ No newline at end of file
index 0ff85b1..c887848 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['[%s][QUEUE]\x20%s','stringify','validate','util','seq-queue','../../../../config/logger','./strategy','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','info','[%s][AGENT][NAME:%s][STATUS:%s]','name','toLowerCase','consequence','length','error','[%s][AGENT]\x20%s','map','message','join','find','agents','timeout','createQueue','channel','format','START:%s','rules','[%s][AGENT]\x20ROUTING\x20STOPPED','close','stop','[%s][AGENT]\x20ROUTING\x20END','next','agent','[%s][AGENT]\x20agent\x20not\x20found\x20%s'];(function(_0x16de68,_0x33d7ff){var _0x1c277e=function(_0x1d8549){while(--_0x1d8549){_0x16de68['push'](_0x16de68['shift']());}};_0x1c277e(++_0x33d7ff);}(_0xb10b,0x12a));var _0xbb10=function(_0x1deb72,_0x3f6338){_0x1deb72=_0x1deb72-0x0;var _0x18bbdf=_0xb10b[_0x1deb72];return _0x18bbdf;};'use strict';var schema=require(_0xbb10('0x0'));var _=require('lodash');var util=require(_0xbb10('0x1'));var seqqueue=require(_0xbb10('0x2'));var logger=require(_0xbb10('0x3'))('routing');var strategy=require(_0xbb10('0x4'));var queue=schema({'name':{'type':_0xbb10('0x5'),'required':!![],'message':_0xbb10('0x6')},'timeout':{'type':_0xbb10('0x7'),'message':_0xbb10('0x8')}});function writeLog(_0x312b72,_0x481979,_0x328583){return logger[_0xbb10('0x9')](util['format'](_0xbb10('0xa'),_0x312b72,_0x481979[_0xbb10('0xb')],_0x328583));}function handleFindAgent(_0x21370f){return function(_0x1c3ee5){return _0x1c3ee5[_0xbb10('0xb')][_0xbb10('0xc')]()===_0x21370f[_0xbb10('0xc')]();};}exports[_0xbb10('0xd')]=function(_0x5ab04a,_0x4e47f8,_0x20bd61,_0x118a74){return function(_0xce64f3){try{var _0x5e136d={'name':_0x4e47f8[0x0],'timeout':_0x4e47f8[0x1]};var _0x408248=queue['validate'](_0x5e136d,{'typecast':!![]});if(_0x408248[_0xbb10('0xe')]){logger[_0xbb10('0xf')](_0xbb10('0x10'),_0x5ab04a,_[_0xbb10('0x11')](_0x408248,_0xbb10('0x12'))[_0xbb10('0x13')](',\x20'));_0xce64f3['stop']();}else{var _0x26e021=_[_0xbb10('0x14')](_0x20bd61[_0xbb10('0x15')],handleFindAgent(_0x5e136d[_0xbb10('0xb')]));if(_0x26e021){var _0x3df17b=(_0x5e136d[_0xbb10('0x16')]||0xa)*0x3e8;var _0x24a57b,_0x36b5e8;var _0x3e26f4=seqqueue[_0xbb10('0x17')](_0x3df17b);_0x3e26f4['id']=_0x5ab04a;_0x3e26f4['atimeout']=_0x3df17b;_0x3e26f4[_0xbb10('0x18')]=_0x118a74[_0xbb10('0x18')];writeLog(_0x5ab04a,_0x26e021,util[_0xbb10('0x19')](_0xbb10('0x1a'),_0x3df17b));_0x24a57b=setInterval(function(){if(_0x20bd61[_0xbb10('0x1b')]&&!_0x20bd61[_0xbb10('0x1b')][_0x5ab04a]){logger[_0xbb10('0x9')](_0xbb10('0x1c'),_0x5ab04a);clearInterval(_0x24a57b);clearTimeout(_0x36b5e8);_0x36b5e8=undefined;_0x3e26f4[_0xbb10('0x1d')](!![]);_0xce64f3[_0xbb10('0x1e')]();}},0x3e8);_0x36b5e8=setTimeout(function(){logger['info'](_0xbb10('0x1f'),_0x5ab04a);clearInterval(_0x24a57b);_0x24a57b=undefined;_0x3e26f4[_0xbb10('0x1d')](!![]);_0xce64f3[_0xbb10('0x20')]();},_0x3df17b);strategy[_0xbb10('0x21')](_0x3e26f4,_0x26e021,_0x20bd61,_0x118a74);}else{logger[_0xbb10('0xf')](_0xbb10('0x22'),_0x5ab04a,_0x5e136d['name']);_0xce64f3[_0xbb10('0x1e')]();}}}catch(_0x12ef77){console['log'](_0x12ef77);logger['error'](_0xbb10('0x23'),_0x5ab04a,JSON[_0xbb10('0x24')](_0x12ef77));_0xce64f3[_0xbb10('0x1e')]();}};};
\ No newline at end of file
+var _0xa9e0=['agents','name','atimeout','channel','rules','[%s][AGENT]\x20ROUTING\x20STOPPED','close','[%s][AGENT]\x20ROUTING\x20END','next','agent','log','stringify','validate','lodash','util','routing','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','info','format','toLowerCase','consequence','length','error','[%s][AGENT]\x20%s','map','message','stop','find'];(function(_0xfc3fa,_0x269358){var _0x3f0c23=function(_0x4ebd2a){while(--_0x4ebd2a){_0xfc3fa['push'](_0xfc3fa['shift']());}};_0x3f0c23(++_0x269358);}(_0xa9e0,0x123));var _0x0a9e=function(_0x373dee,_0x1a8c45){_0x373dee=_0x373dee-0x0;var _0x46798f=_0xa9e0[_0x373dee];return _0x46798f;};'use strict';var schema=require(_0x0a9e('0x0'));var _=require(_0x0a9e('0x1'));var util=require(_0x0a9e('0x2'));var seqqueue=require('seq-queue');var logger=require('../../../../config/logger')(_0x0a9e('0x3'));var strategy=require('./strategy');var queue=schema({'name':{'type':_0x0a9e('0x4'),'required':!![],'message':_0x0a9e('0x5')},'timeout':{'type':_0x0a9e('0x6'),'message':_0x0a9e('0x7')}});function writeLog(_0x981158,_0x57b080,_0x219af0){return logger[_0x0a9e('0x8')](util[_0x0a9e('0x9')]('[%s][AGENT][NAME:%s][STATUS:%s]',_0x981158,_0x57b080['name'],_0x219af0));}function handleFindAgent(_0xe42b77){return function(_0x56465b){return _0x56465b['name'][_0x0a9e('0xa')]()===_0xe42b77[_0x0a9e('0xa')]();};}exports[_0x0a9e('0xb')]=function(_0x3ab53f,_0xfeb75b,_0xbd1168,_0x4a4c56){return function(_0x50dfb2){try{var _0x527cdd={'name':_0xfeb75b[0x0],'timeout':_0xfeb75b[0x1]};var _0x4cfe67=queue[_0x0a9e('0x0')](_0x527cdd,{'typecast':!![]});if(_0x4cfe67[_0x0a9e('0xc')]){logger[_0x0a9e('0xd')](_0x0a9e('0xe'),_0x3ab53f,_[_0x0a9e('0xf')](_0x4cfe67,_0x0a9e('0x10'))['join'](',\x20'));_0x50dfb2[_0x0a9e('0x11')]();}else{var _0x239b12=_[_0x0a9e('0x12')](_0xbd1168[_0x0a9e('0x13')],handleFindAgent(_0x527cdd[_0x0a9e('0x14')]));if(_0x239b12){var _0x4d5611=(_0x527cdd['timeout']||0xa)*0x3e8;var _0x22dccb,_0x5d0880;var _0x1985b6=seqqueue['createQueue'](_0x4d5611);_0x1985b6['id']=_0x3ab53f;_0x1985b6[_0x0a9e('0x15')]=_0x4d5611;_0x1985b6[_0x0a9e('0x16')]=_0x4a4c56['channel'];writeLog(_0x3ab53f,_0x239b12,util[_0x0a9e('0x9')]('START:%s',_0x4d5611));_0x22dccb=setInterval(function(){if(_0xbd1168[_0x0a9e('0x17')]&&!_0xbd1168[_0x0a9e('0x17')][_0x3ab53f]){logger[_0x0a9e('0x8')](_0x0a9e('0x18'),_0x3ab53f);clearInterval(_0x22dccb);clearTimeout(_0x5d0880);_0x5d0880=undefined;_0x1985b6[_0x0a9e('0x19')](!![]);_0x50dfb2[_0x0a9e('0x11')]();}},0x3e8);_0x5d0880=setTimeout(function(){logger[_0x0a9e('0x8')](_0x0a9e('0x1a'),_0x3ab53f);clearInterval(_0x22dccb);_0x22dccb=undefined;_0x1985b6[_0x0a9e('0x19')](!![]);_0x50dfb2[_0x0a9e('0x1b')]();},_0x4d5611);strategy[_0x0a9e('0x1c')](_0x1985b6,_0x239b12,_0xbd1168,_0x4a4c56);}else{logger[_0x0a9e('0xd')]('[%s][AGENT]\x20agent\x20not\x20found\x20%s',_0x3ab53f,_0x527cdd[_0x0a9e('0x14')]);_0x50dfb2[_0x0a9e('0x11')]();}}}catch(_0x53682f){console[_0x0a9e('0x1d')](_0x53682f);logger['error']('[%s][QUEUE]\x20%s',_0x3ab53f,JSON[_0x0a9e('0x1e')](_0x53682f));_0x50dfb2[_0x0a9e('0x11')]();}};};
\ No newline at end of file
index bdd7d78..e3e0ce7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe706=['next','channel','getMustacheRender','YYYY-MM-DD\x20HH:mm:ss','out','message','from','read','subject','Re:','Re:\x20','chat','ChatWebsiteId','AccountId','account','upperFirst','InteractionId','Message','Smtp','service','host','port','secure','auth','user','pass','inReplyTo','messageId','html','<div\x20id=\x22xm-mail-content\x22>','replace','body','<div\x20id=\x22xm-mail-content\x22','<div','sendMailMessage','[%s][AUTOREPLY]\x20SMTP\x20SENT','create','stringify','catch','error','[RPC][%s][AUTOREPLY]\x20%s','finally','then','lodash','moment','./utils','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','../../mailRpc','consequence','isNil','interaction','created','info','[%s][AUTOREPLY]\x20%s','Autoreply\x20already\x20sent'];(function(_0x1c9dc3,_0x862dcc){var _0x6643d2=function(_0x4f2f27){while(--_0x4f2f27){_0x1c9dc3['push'](_0x1c9dc3['shift']());}};_0x6643d2(++_0x862dcc);}(_0xe706,0xa3));var _0x6e70=function(_0x1b40b5,_0x25e063){_0x1b40b5=_0x1b40b5-0x0;var _0x5f0a6e=_0xe706[_0x1b40b5];return _0x5f0a6e;};'use strict';var _=require(_0x6e70('0x0'));var moment=require(_0x6e70('0x1'));var utils=require(_0x6e70('0x2'));var logger=require('../../../../config/logger')(_0x6e70('0x3'));var rpc={'chatMessage':require(_0x6e70('0x4')),'openchannelMessage':require(_0x6e70('0x5')),'mailMessage':require(_0x6e70('0x6')),'smsMessage':require(_0x6e70('0x7')),'faxMessage':require(_0x6e70('0x8'))};var mailRpc=require(_0x6e70('0x9'));exports[_0x6e70('0xa')]=function(_0x1b0389,_0x4381d1){return function(_0x36357b){try{if(_0x4381d1[0x0]==='1'&&(_[_0x6e70('0xb')](this[_0x6e70('0xc')][_0x6e70('0xd')])||!this[_0x6e70('0xc')][_0x6e70('0xd')])){logger[_0x6e70('0xe')](_0x6e70('0xf'),_0x1b0389,_0x6e70('0x10'));return _0x36357b[_0x6e70('0x11')]();}var _0x743eb5=this[_0x6e70('0x12')];var _0x37b3e0={'body':utils[_0x6e70('0x13')](_0x4381d1[0x1],this),'ContactId':this['contact']['id'],'sentAt':moment()['format'](_0x6e70('0x14')),'direction':_0x6e70('0x15')};if(this[_0x6e70('0x16')]){_0x37b3e0['to']=this[_0x6e70('0x16')][_0x6e70('0x17')]||'';_0x37b3e0['cc']=this[_0x6e70('0x16')]['cc']||'';_0x37b3e0[_0x6e70('0x17')]=this[_0x6e70('0x16')]['to']||'';_0x37b3e0['phone']=this['message']['phone']||'';_0x37b3e0[_0x6e70('0x18')]=!![];if(this['message']['subject']){_0x37b3e0[_0x6e70('0x19')]='';_0x37b3e0[_0x6e70('0x19')]+=_['startsWith'](this[_0x6e70('0x16')]['subject'],_0x6e70('0x1a'))?'':_0x6e70('0x1b');_0x37b3e0['subject']+=this['message'][_0x6e70('0x19')];}}if(this['channel']===_0x6e70('0x1c')){_0x37b3e0[_0x6e70('0x1d')]=this['account']['id'];}else{_0x37b3e0[_['upperFirst'](this[_0x6e70('0x12')])+_0x6e70('0x1e')]=this[_0x6e70('0x1f')]['id'];}_0x37b3e0[_[_0x6e70('0x20')](this[_0x6e70('0x12')])+_0x6e70('0x21')]=this[_0x6e70('0xc')]['id'];if(rpc[this[_0x6e70('0x12')]+_0x6e70('0x22')]){if(this[_0x6e70('0x12')]==='mail'){var _0x228350={'tls':{'rejectUnauthorized':![]}};if(this[_0x6e70('0x1f')][_0x6e70('0x23')]['service']){_0x228350[_0x6e70('0x24')]=this[_0x6e70('0x1f')][_0x6e70('0x23')]['service'];}else{_0x228350[_0x6e70('0x25')]=this['account']['Smtp']['host'];_0x228350[_0x6e70('0x26')]=this[_0x6e70('0x1f')]['Smtp'][_0x6e70('0x26')];_0x228350[_0x6e70('0x27')]=this['account'][_0x6e70('0x23')][_0x6e70('0x27')];}if(this[_0x6e70('0x1f')]['Smtp']['authentication']){_0x228350[_0x6e70('0x28')]={'user':this[_0x6e70('0x1f')][_0x6e70('0x23')][_0x6e70('0x29')],'pass':this[_0x6e70('0x1f')]['Smtp'][_0x6e70('0x2a')]};}_0x37b3e0[_0x6e70('0x2b')]=this[_0x6e70('0x16')][_0x6e70('0x2c')];_0x37b3e0[_0x6e70('0x2d')]=_0x6e70('0x2e')+_[_0x6e70('0x2f')](_0x37b3e0[_0x6e70('0x30')],_0x6e70('0x31'),_0x6e70('0x32'))+'</div>';return mailRpc[_0x6e70('0x33')](_0x228350,_0x37b3e0)['then'](function(_0x259486){logger['info'](_0x6e70('0x34'),_0x1b0389);_0x37b3e0[_0x6e70('0x2c')]=_0x259486[_0x6e70('0x16')]['messageId'];return rpc[_0x743eb5+_0x6e70('0x22')][_0x6e70('0x35')](_0x37b3e0);})['then'](function(_0x13d673){logger[_0x6e70('0xe')]('[%s][AUTOREPLY]\x20%s',_0x1b0389,JSON[_0x6e70('0x36')](_0x13d673));})[_0x6e70('0x37')](function(_0x2d52bd){logger[_0x6e70('0x38')](_0x6e70('0x39'),_0x1b0389,JSON[_0x6e70('0x36')](_0x2d52bd));})[_0x6e70('0x3a')](function(){_0x36357b[_0x6e70('0x11')]();});}else{return rpc[this[_0x6e70('0x12')]+_0x6e70('0x22')]['create'](_0x37b3e0)[_0x6e70('0x3b')](function(_0x4795a0){logger[_0x6e70('0xe')](_0x6e70('0xf'),_0x1b0389,_0x37b3e0[_0x6e70('0x30')]);})[_0x6e70('0x37')](function(_0x233a83){logger[_0x6e70('0x38')](_0x6e70('0xf'),_0x1b0389,JSON[_0x6e70('0x36')](_0x233a83));})[_0x6e70('0x3a')](function(){_0x36357b[_0x6e70('0x11')]();});}}}catch(_0x2a5444){logger[_0x6e70('0x38')](_0x6e70('0xf'),_0x1b0389,JSON['stringify'](_0x2a5444));_0x36357b['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(_0x41a29e,_0x6f3085){var _0x205b20=function(_0x24cddd){while(--_0x24cddd){_0x41a29e['push'](_0x41a29e['shift']());}};_0x205b20(++_0x6f3085);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0xa9e0[_0x2f5ac5];return _0x37c9a8;};'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 239de29..1cacd74 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6075=['../../rpc/chatInteraction','../../rpc/openchannelInteraction','../../rpc/faxInteraction','info','format','YYYY-MM-DD\x20HH:mm:ss','system','channel','Interaction','update','interaction','then','catch','[%s][CLOSE]\x20%s','stringify','stop','moment','../../../../config/logger'];(function(_0xe22ceb,_0x27dc83){var _0x45bb58=function(_0x4e1177){while(--_0x4e1177){_0xe22ceb['push'](_0xe22ceb['shift']());}};_0x45bb58(++_0x27dc83);}(_0x6075,0x142));var _0x5607=function(_0x251d39,_0x58620f){_0x251d39=_0x251d39-0x0;var _0x5a4fe7=_0x6075[_0x251d39];return _0x5a4fe7;};'use strict';var moment=require(_0x5607('0x0'));var logger=require(_0x5607('0x1'))('routing');var rpc={'chatInteraction':require(_0x5607('0x2')),'openchannelInteraction':require(_0x5607('0x3')),'smsInteraction':require('../../rpc/smsInteraction'),'mailInteraction':require('../../rpc/mailInteraction'),'faxInteraction':require(_0x5607('0x4'))};exports['consequence']=function(_0x5c9bec,_0x1d29a7,_0x48abca,_0x2d42d4){return function(_0x4bb34a){try{logger[_0x5607('0x5')]('[%s][CLOSE]\x20reason\x20%s',_0x5c9bec,_0x1d29a7[0x0]);var _0x415836={'closed':0x1,'closedAt':moment()[_0x5607('0x6')](_0x5607('0x7')),'closeReason':_0x5607('0x8'),'disposition':_0x1d29a7[0x0]};if(rpc[_0x2d42d4[_0x5607('0x9')]+_0x5607('0xa')]){rpc[_0x2d42d4[_0x5607('0x9')]+_0x5607('0xa')][_0x5607('0xb')](_0x2d42d4[_0x5607('0xc')]['id'],_0x415836)[_0x5607('0xd')](function(_0x3dff4b){logger[_0x5607('0x5')]('[%s][CLOSE]\x20interaction\x20%s\x20has\x20been\x20closed!',_0x5c9bec,_0x2d42d4[_0x5607('0xc')]['id']);})[_0x5607('0xe')](function(_0x8a2954){logger['error'](_0x5607('0xf'),_0x5c9bec,JSON[_0x5607('0x10')](_0x8a2954));})['finally'](function(){_0x4bb34a[_0x5607('0x11')]();});}}catch(_0x439654){logger['error'](_0x5607('0xf'),_0x5c9bec,JSON['stringify'](_0x439654));_0x4bb34a[_0x5607('0x11')]();}};};
\ No newline at end of file
+var _0x6f59=['../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/mailInteraction','../../rpc/faxInteraction','consequence','[%s][CLOSE]\x20reason\x20%s','format','system','channel','Interaction','update','interaction','then','info','[%s][CLOSE]\x20interaction\x20%s\x20has\x20been\x20closed!','catch','error','[%s][CLOSE]\x20%s','stringify','finally','stop','moment','../../../../config/logger','routing','../../rpc/chatInteraction'];(function(_0x455dd2,_0x56e6ef){var _0x13d632=function(_0x4f5a00){while(--_0x4f5a00){_0x455dd2['push'](_0x455dd2['shift']());}};_0x13d632(++_0x56e6ef);}(_0x6f59,0x1be));var _0x96f5=function(_0x249b1a,_0x54f529){_0x249b1a=_0x249b1a-0x0;var _0x3f851e=_0x6f59[_0x249b1a];return _0x3f851e;};'use strict';var moment=require(_0x96f5('0x0'));var logger=require(_0x96f5('0x1'))(_0x96f5('0x2'));var rpc={'chatInteraction':require(_0x96f5('0x3')),'openchannelInteraction':require(_0x96f5('0x4')),'smsInteraction':require(_0x96f5('0x5')),'mailInteraction':require(_0x96f5('0x6')),'faxInteraction':require(_0x96f5('0x7'))};exports[_0x96f5('0x8')]=function(_0x3ac0b6,_0x4b846b,_0x110dcc,_0x598154){return function(_0xf6cd7d){try{logger['info'](_0x96f5('0x9'),_0x3ac0b6,_0x4b846b[0x0]);var _0x4c919b={'closed':0x1,'closedAt':moment()[_0x96f5('0xa')]('YYYY-MM-DD\x20HH:mm:ss'),'closeReason':_0x96f5('0xb'),'disposition':_0x4b846b[0x0]};if(rpc[_0x598154[_0x96f5('0xc')]+_0x96f5('0xd')]){rpc[_0x598154[_0x96f5('0xc')]+'Interaction'][_0x96f5('0xe')](_0x598154[_0x96f5('0xf')]['id'],_0x4c919b)[_0x96f5('0x10')](function(_0x142e16){logger[_0x96f5('0x11')](_0x96f5('0x12'),_0x3ac0b6,_0x598154[_0x96f5('0xf')]['id']);})[_0x96f5('0x13')](function(_0x62ab9b){logger[_0x96f5('0x14')](_0x96f5('0x15'),_0x3ac0b6,JSON[_0x96f5('0x16')](_0x62ab9b));})[_0x96f5('0x17')](function(){_0xf6cd7d['stop']();});}}catch(_0x3f6f09){logger[_0x96f5('0x14')](_0x96f5('0x15'),_0x3ac0b6,JSON[_0x96f5('0x16')](_0x3f6f09));_0xf6cd7d[_0x96f5('0x18')]();}};};
\ No newline at end of file
index fcb0169..55a53d7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xba18=['error','finally','stop','[%s][DIALOGFLOW]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!','textRequest','result','speech','metadata','endConversation','stringify','lodash','moment','apiai-promise','./utils','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/smsMessage','../../rpc/faxMessage','consequence','interaction','UserId','next','format','YYYY-MM-DD\x20HH:mm:ss','out','channel','ChatWebsiteId','account','upperFirst','AccountId','created','Message','create','then','info','[%s][DIALOGFLOW]\x20%s','body','catch'];(function(_0x3474ac,_0x22d0f7){var _0x5345ec=function(_0x45056e){while(--_0x45056e){_0x3474ac['push'](_0x3474ac['shift']());}};_0x5345ec(++_0x22d0f7);}(_0xba18,0x1ea));var _0x8ba1=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xba18[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x8ba1('0x0'));var moment=require(_0x8ba1('0x1'));var apiai=require(_0x8ba1('0x2'));var utils=require(_0x8ba1('0x3'));var logger=require(_0x8ba1('0x4'))(_0x8ba1('0x5'));var rpc={'chatMessage':require(_0x8ba1('0x6')),'openchannelMessage':require(_0x8ba1('0x7')),'mailMessage':require('../../rpc/mailMessage'),'smsMessage':require(_0x8ba1('0x8')),'faxMessage':require(_0x8ba1('0x9'))};exports[_0x8ba1('0xa')]=function(_0x2a9dab,_0x3b107c){return function(_0x2ffa15){try{if(!_['isNil'](this[_0x8ba1('0xb')][_0x8ba1('0xc')])){logger['info']('[%s][DIALOGFLOW]\x20%s',_0x2a9dab,'Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.');return _0x2ffa15[_0x8ba1('0xd')]();}var _0x141a88={'ContactId':this['contact']['id'],'sentAt':moment()[_0x8ba1('0xe')](_0x8ba1('0xf')),'direction':_0x8ba1('0x10')};var _0x443ec3=this[_0x8ba1('0x11')];if(_0x443ec3==='chat'){_0x141a88[_0x8ba1('0x12')]=this[_0x8ba1('0x13')]['id'];}else{_0x141a88[_[_0x8ba1('0x14')](_0x443ec3)+_0x8ba1('0x15')]=this[_0x8ba1('0x13')]['id'];}_0x141a88[_[_0x8ba1('0x14')](_0x443ec3)+'InteractionId']=this[_0x8ba1('0xb')]['id'];if(this[_0x8ba1('0xb')][_0x8ba1('0x16')]){var _0xca53c4=_0x3b107c[0x2];if(!_['isEmpty'](_0xca53c4)){_0x141a88['body']=utils['getMustacheRender'](_0xca53c4,this);return rpc[_0x443ec3+_0x8ba1('0x17')][_0x8ba1('0x18')](_0x141a88)[_0x8ba1('0x19')](function(_0x1b885b){logger[_0x8ba1('0x1a')](_0x8ba1('0x1b'),_0x2a9dab,_0x141a88[_0x8ba1('0x1c')]);})[_0x8ba1('0x1d')](function(_0x19ade9){logger[_0x8ba1('0x1e')]('[%s][DIALOGFLOW]\x20%s',_0x2a9dab,JSON['stringify'](_0x19ade9));})[_0x8ba1('0x1f')](function(){logger[_0x8ba1('0x1a')]('[%s][DIALOGFLOW]\x20Welcome\x20Message\x20has\x20been\x20sent!',_0x2a9dab);_0x2ffa15[_0x8ba1('0x20')]();});}else{logger[_0x8ba1('0x1a')](_0x8ba1('0x21'),_0x2a9dab);_0x2ffa15[_0x8ba1('0x20')]();}}else{var _0x1dc1b4=apiai(_0x3b107c[0x0],{'language':_0x3b107c[0x1]||'en'});return _0x1dc1b4[_0x8ba1('0x22')](this['message'][_0x8ba1('0x1c')],{'sessionId':this['interaction']['id']})[_0x8ba1('0x19')](function(_0x244245){_0x141a88[_0x8ba1('0x1c')]=_0x244245[_0x8ba1('0x23')]['fulfillment'][_0x8ba1('0x24')];return rpc[_0x443ec3+_0x8ba1('0x17')][_0x8ba1('0x18')](_0x141a88)[_0x8ba1('0x19')](function(_0x2d4ad6){logger[_0x8ba1('0x1a')](_0x8ba1('0x1b'),_0x2a9dab,_0x141a88[_0x8ba1('0x1c')]);if(_0x244245[_0x8ba1('0x23')][_0x8ba1('0x25')][_0x8ba1('0x26')]){_0x2ffa15['next']();}else{_0x2ffa15['stop']();}})[_0x8ba1('0x1d')](function(_0x1ccd44){logger['error'](_0x8ba1('0x1b'),_0x2a9dab,JSON[_0x8ba1('0x27')](_0x1ccd44));_0x2ffa15[_0x8ba1('0xd')]();});});}}catch(_0x326460){logger[_0x8ba1('0x1e')](_0x8ba1('0x1b'),_0x2a9dab,JSON[_0x8ba1('0x27')](_0x326460));_0x2ffa15[_0x8ba1('0x20')]();}};};
\ No newline at end of file
+var _0x2b29=['../../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.','next','contact','format','YYYY-MM-DD\x20HH:mm:ss','out','channel','chat','account','upperFirst','AccountId','InteractionId','created','body','Message','create','then','catch','error','stringify','finally','[%s][DIALOGFLOW]\x20Welcome\x20Message\x20has\x20been\x20sent!','stop','[%s][DIALOGFLOW]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!','textRequest','message','result','fulfillment','speech','metadata','endConversation','moment','apiai-promise','./utils','../../../../config/logger','../../rpc/chatMessage'];(function(_0x5d4607,_0x6b5e7b){var _0x5e4a86=function(_0x46891a){while(--_0x46891a){_0x5d4607['push'](_0x5d4607['shift']());}};_0x5e4a86(++_0x6b5e7b);}(_0x2b29,0x163));var _0x92b2=function(_0x46a549,_0x1d1852){_0x46a549=_0x46a549-0x0;var _0x28fbf1=_0x2b29[_0x46a549];return _0x28fbf1;};'use strict';var _=require('lodash');var moment=require(_0x92b2('0x0'));var apiai=require(_0x92b2('0x1'));var utils=require(_0x92b2('0x2'));var logger=require(_0x92b2('0x3'))('routing');var rpc={'chatMessage':require(_0x92b2('0x4')),'openchannelMessage':require(_0x92b2('0x5')),'mailMessage':require(_0x92b2('0x6')),'smsMessage':require(_0x92b2('0x7')),'faxMessage':require(_0x92b2('0x8'))};exports[_0x92b2('0x9')]=function(_0x47c522,_0xb1d856){return function(_0x536e21){try{if(!_[_0x92b2('0xa')](this[_0x92b2('0xb')]['UserId'])){logger[_0x92b2('0xc')](_0x92b2('0xd'),_0x47c522,_0x92b2('0xe'));return _0x536e21[_0x92b2('0xf')]();}var _0x592c9e={'ContactId':this[_0x92b2('0x10')]['id'],'sentAt':moment()[_0x92b2('0x11')](_0x92b2('0x12')),'direction':_0x92b2('0x13')};var _0x2949e0=this[_0x92b2('0x14')];if(_0x2949e0===_0x92b2('0x15')){_0x592c9e['ChatWebsiteId']=this[_0x92b2('0x16')]['id'];}else{_0x592c9e[_[_0x92b2('0x17')](_0x2949e0)+_0x92b2('0x18')]=this['account']['id'];}_0x592c9e[_[_0x92b2('0x17')](_0x2949e0)+_0x92b2('0x19')]=this[_0x92b2('0xb')]['id'];if(this[_0x92b2('0xb')][_0x92b2('0x1a')]){var _0x179834=_0xb1d856[0x2];if(!_['isEmpty'](_0x179834)){_0x592c9e[_0x92b2('0x1b')]=utils['getMustacheRender'](_0x179834,this);return rpc[_0x2949e0+_0x92b2('0x1c')][_0x92b2('0x1d')](_0x592c9e)[_0x92b2('0x1e')](function(_0x4899fa){logger['info'](_0x92b2('0xd'),_0x47c522,_0x592c9e['body']);})[_0x92b2('0x1f')](function(_0x4d51db){logger[_0x92b2('0x20')](_0x92b2('0xd'),_0x47c522,JSON[_0x92b2('0x21')](_0x4d51db));})[_0x92b2('0x22')](function(){logger[_0x92b2('0xc')](_0x92b2('0x23'),_0x47c522);_0x536e21[_0x92b2('0x24')]();});}else{logger[_0x92b2('0xc')](_0x92b2('0x25'),_0x47c522);_0x536e21[_0x92b2('0x24')]();}}else{var _0xfd81c5=apiai(_0xb1d856[0x0],{'language':_0xb1d856[0x1]||'en'});return _0xfd81c5[_0x92b2('0x26')](this[_0x92b2('0x27')][_0x92b2('0x1b')],{'sessionId':this[_0x92b2('0xb')]['id']})['then'](function(_0x46078b){_0x592c9e['body']=_0x46078b[_0x92b2('0x28')][_0x92b2('0x29')][_0x92b2('0x2a')];return rpc[_0x2949e0+_0x92b2('0x1c')][_0x92b2('0x1d')](_0x592c9e)['then'](function(_0x547848){logger[_0x92b2('0xc')](_0x92b2('0xd'),_0x47c522,_0x592c9e[_0x92b2('0x1b')]);if(_0x46078b[_0x92b2('0x28')][_0x92b2('0x2b')][_0x92b2('0x2c')]){_0x536e21[_0x92b2('0xf')]();}else{_0x536e21[_0x92b2('0x24')]();}})[_0x92b2('0x1f')](function(_0x573df3){logger[_0x92b2('0x20')]('[%s][DIALOGFLOW]\x20%s',_0x47c522,JSON[_0x92b2('0x21')](_0x573df3));_0x536e21['next']();});});}}catch(_0x5e9688){logger[_0x92b2('0x20')](_0x92b2('0xd'),_0x47c522,JSON[_0x92b2('0x21')](_0x5e9688));_0x536e21['stop']();}};};
\ No newline at end of file
index 5aaab91..579559d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa3db=['condition','next','findIndex','rules','[%s][GOTOIF]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','[%s][GOTOIF]\x20priority\x20%s\x20not\x20found','error','[%s][GOTOIF]\x20eval\x20error:\x20%s','lodash','html-to-text','./utils','../../../../config/logger','routing','string','condition\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','priority\x20true\x20is\x20a\x20number','priority\x20false\x20is\x20a\x20number','getMustacheRender','replace','validate','length','[%s][GOTOIF]\x20%s','map','message','join','stop','priorityTrue','info'];(function(_0x38bf9a,_0xaeb5f9){var _0x4350d2=function(_0x19877a){while(--_0x19877a){_0x38bf9a['push'](_0x38bf9a['shift']());}};_0x4350d2(++_0xaeb5f9);}(_0xa3db,0xb6));var _0xba3d=function(_0x4715b7,_0x4dedec){_0x4715b7=_0x4715b7-0x0;var _0x11d72a=_0xa3db[_0x4715b7];return _0x11d72a;};'use strict';var schema=require('validate');var _=require(_0xba3d('0x0'));var htmlToText=require(_0xba3d('0x1'));var utils=require(_0xba3d('0x2'));var logger=require(_0xba3d('0x3'))(_0xba3d('0x4'));var gotoif=schema({'condition':{'type':_0xba3d('0x5'),'required':!![],'message':_0xba3d('0x6')},'priorityTrue':{'type':_0xba3d('0x7'),'message':_0xba3d('0x8')},'priorityFalse':{'type':_0xba3d('0x7'),'message':_0xba3d('0x9')}});exports['consequence']=function(_0x6c8165,_0x4dcb6c){return function(_0x363174){try{var _0x5ab59d={'condition':htmlToText['fromString'](utils[_0xba3d('0xa')](_0x4dcb6c[0x0],this),{'wordwrap':![]})[_0xba3d('0xb')](/<\/?[^>]+(>|$)/g,''),'priorityTrue':_0x4dcb6c[0x1],'priorityFalse':_0x4dcb6c[0x2]};var _0x5648f5=gotoif[_0xba3d('0xc')](_0x5ab59d,{'typecast':!![]});if(_0x5648f5[_0xba3d('0xd')]){logger['error'](_0xba3d('0xe'),_0x6c8165,_[_0xba3d('0xf')](_0x5648f5,_0xba3d('0x10'))[_0xba3d('0x11')](',\x20'));_0x363174[_0xba3d('0x12')]();}else{try{var _0x5d7af8=eval('('+_0x5ab59d['condition']+')');var _0x480f03=_0x5d7af8?_0x5ab59d[_0xba3d('0x13')]:_0x5ab59d['priorityFalse'];logger[_0xba3d('0x14')]('[%s][GOTOIF]\x20condition\x20%s\x20is\x20%s\x20try\x20goto\x20priority\x20%s',_0x6c8165,_0x5ab59d[_0xba3d('0x15')],_0x5d7af8,_0x480f03||_0xba3d('0x16'));if(_0x480f03){var _0xba6143=_[_0xba3d('0x17')](_0x363174[_0xba3d('0x18')](),{'p':_0x480f03});if(_0xba6143>=0x0){logger[_0xba3d('0x14')](_0xba3d('0x19'),_0x6c8165,_0x480f03||_0xba3d('0x16'),_0xba6143);_0x363174[_0xba3d('0x16')](_0xba6143);}else{logger[_0xba3d('0x14')](_0xba3d('0x1a'),_0x6c8165,_0x480f03||_0xba3d('0x16'));_0x363174[_0xba3d('0x12')]();}}else{_0x363174['next']();}}catch(_0x414527){logger[_0xba3d('0x1b')](_0xba3d('0x1c'),_0x6c8165,_0x414527[_0xba3d('0x10')]);_0x363174[_0xba3d('0x12')]();}}}catch(_0x1ee685){logger[_0xba3d('0x1b')](_0xba3d('0xe'),_0x6c8165,JSON['stringify'](_0x1ee685));_0x363174['stop']();}};};
\ No newline at end of file
+var _0xad78=['stringify','validate','lodash','./utils','../../../../config/logger','routing','string','priority\x20true\x20is\x20a\x20number','number','priority\x20false\x20is\x20a\x20number','getMustacheRender','replace','length','error','[%s][GOTOIF]\x20%s','map','join','condition','priorityTrue','priorityFalse','[%s][GOTOIF]\x20condition\x20%s\x20is\x20%s\x20try\x20goto\x20priority\x20%s','next','findIndex','rules','info','[%s][GOTOIF]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','[%s][GOTOIF]\x20priority\x20%s\x20not\x20found','stop'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0xad78,0xc5));var _0x8ad7=function(_0x3dcfe5,_0x307632){_0x3dcfe5=_0x3dcfe5-0x0;var _0x5b4a94=_0xad78[_0x3dcfe5];return _0x5b4a94;};'use strict';var schema=require(_0x8ad7('0x0'));var _=require(_0x8ad7('0x1'));var htmlToText=require('html-to-text');var utils=require(_0x8ad7('0x2'));var logger=require(_0x8ad7('0x3'))(_0x8ad7('0x4'));var gotoif=schema({'condition':{'type':_0x8ad7('0x5'),'required':!![],'message':'condition\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'priorityTrue':{'type':'number','message':_0x8ad7('0x6')},'priorityFalse':{'type':_0x8ad7('0x7'),'message':_0x8ad7('0x8')}});exports['consequence']=function(_0x3979f5,_0x584e81){return function(_0x53fca6){try{var _0x5e9bf5={'condition':htmlToText['fromString'](utils[_0x8ad7('0x9')](_0x584e81[0x0],this),{'wordwrap':![]})[_0x8ad7('0xa')](/<\/?[^>]+(>|$)/g,''),'priorityTrue':_0x584e81[0x1],'priorityFalse':_0x584e81[0x2]};var _0x866eb6=gotoif[_0x8ad7('0x0')](_0x5e9bf5,{'typecast':!![]});if(_0x866eb6[_0x8ad7('0xb')]){logger[_0x8ad7('0xc')](_0x8ad7('0xd'),_0x3979f5,_[_0x8ad7('0xe')](_0x866eb6,'message')[_0x8ad7('0xf')](',\x20'));_0x53fca6['stop']();}else{try{var _0x3838ea=eval('('+_0x5e9bf5[_0x8ad7('0x10')]+')');var _0x1b7339=_0x3838ea?_0x5e9bf5[_0x8ad7('0x11')]:_0x5e9bf5[_0x8ad7('0x12')];logger['info'](_0x8ad7('0x13'),_0x3979f5,_0x5e9bf5['condition'],_0x3838ea,_0x1b7339||_0x8ad7('0x14'));if(_0x1b7339){var _0x23fa81=_[_0x8ad7('0x15')](_0x53fca6[_0x8ad7('0x16')](),{'p':_0x1b7339});if(_0x23fa81>=0x0){logger[_0x8ad7('0x17')](_0x8ad7('0x18'),_0x3979f5,_0x1b7339||'next',_0x23fa81);_0x53fca6[_0x8ad7('0x14')](_0x23fa81);}else{logger['info'](_0x8ad7('0x19'),_0x3979f5,_0x1b7339||_0x8ad7('0x14'));_0x53fca6[_0x8ad7('0x1a')]();}}else{_0x53fca6[_0x8ad7('0x14')]();}}catch(_0xd70a3f){logger[_0x8ad7('0xc')]('[%s][GOTOIF]\x20eval\x20error:\x20%s',_0x3979f5,_0xd70a3f['message']);_0x53fca6[_0x8ad7('0x1a')]();}}}catch(_0x12854d){logger['error'](_0x8ad7('0xd'),_0x3979f5,JSON[_0x8ad7('0x1b')](_0x12854d));_0x53fca6[_0x8ad7('0x1a')]();}};};
\ No newline at end of file
index 9e15f83..bcb9486 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34db=['stop','info','[%s][GOTOP]\x20priority\x20%s','priority','findIndex','[%s][GOTOP]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','next','stringify','validate','lodash','../../../../config/logger','routing','number','priority\x20is\x20a\x20number\x20and\x20it\x20is\x20required','consequence','length','error','[%s][GOTOP]\x20%s','message','join'];(function(_0x4b2436,_0x452299){var _0x4f5ab2=function(_0x5c6679){while(--_0x5c6679){_0x4b2436['push'](_0x4b2436['shift']());}};_0x4f5ab2(++_0x452299);}(_0x34db,0x6c));var _0xb34d=function(_0x4d63ac,_0x4c051b){_0x4d63ac=_0x4d63ac-0x0;var _0x287c4a=_0x34db[_0x4d63ac];return _0x287c4a;};'use strict';var schema=require(_0xb34d('0x0'));var _=require(_0xb34d('0x1'));var logger=require(_0xb34d('0x2'))(_0xb34d('0x3'));var gotop=schema({'priority':{'type':_0xb34d('0x4'),'required':!![],'message':_0xb34d('0x5')}});exports[_0xb34d('0x6')]=function(_0x214948,_0x592d2b){return function(_0x5bf93d){try{var _0x240aa3={'priority':_0x592d2b[0x0]};var _0x2518b1=gotop[_0xb34d('0x0')](_0x240aa3,{'typecast':!![]});if(_0x2518b1[_0xb34d('0x7')]){logger[_0xb34d('0x8')](_0xb34d('0x9'),_0x214948,_['map'](_0x2518b1,_0xb34d('0xa'))[_0xb34d('0xb')](',\x20'));_0x5bf93d[_0xb34d('0xc')]();}else{logger[_0xb34d('0xd')](_0xb34d('0xe'),_0x214948,_0x240aa3[_0xb34d('0xf')]);if(_0x240aa3[_0xb34d('0xf')]){var _0xfac962=_[_0xb34d('0x10')](_0x5bf93d['rules'](),{'p':_0x240aa3[_0xb34d('0xf')]});if(_0xfac962>=0x0){logger['info'](_0xb34d('0x11'),_0x214948,_0x240aa3[_0xb34d('0xf')]||'next',_0xfac962);_0x5bf93d[_0xb34d('0x12')](_0xfac962);}else{logger['info']('[%s][GOTOP]\x20priority\x20%s\x20not\x20found',_0x214948,_0x240aa3['priority']||'next');_0x5bf93d[_0xb34d('0xc')]();}}else{_0x5bf93d[_0xb34d('0x12')]();}}}catch(_0x81e734){logger[_0xb34d('0x8')](_0xb34d('0x9'),_0x214948,JSON[_0xb34d('0x13')](_0x81e734));_0x5bf93d[_0xb34d('0xc')]();}};};
\ No newline at end of file
+var _0x03b7=['length','map','join','priority','findIndex','rules','info','[%s][GOTOP]\x20priority\x20%s\x20not\x20found','next','stop','error','lodash','number','priority\x20is\x20a\x20number\x20and\x20it\x20is\x20required','consequence','validate'];(function(_0x57e9e2,_0x2039d3){var _0x261f2d=function(_0x204562){while(--_0x204562){_0x57e9e2['push'](_0x57e9e2['shift']());}};_0x261f2d(++_0x2039d3);}(_0x03b7,0xfb));var _0x703b=function(_0x34be44,_0x1c0ccb){_0x34be44=_0x34be44-0x0;var _0x3a1216=_0x03b7[_0x34be44];return _0x3a1216;};'use strict';var schema=require('validate');var _=require(_0x703b('0x0'));var logger=require('../../../../config/logger')('routing');var gotop=schema({'priority':{'type':_0x703b('0x1'),'required':!![],'message':_0x703b('0x2')}});exports[_0x703b('0x3')]=function(_0x5c5d63,_0x27ada3){return function(_0x287f34){try{var _0x4808df={'priority':_0x27ada3[0x0]};var _0x51ce7a=gotop[_0x703b('0x4')](_0x4808df,{'typecast':!![]});if(_0x51ce7a[_0x703b('0x5')]){logger['error']('[%s][GOTOP]\x20%s',_0x5c5d63,_[_0x703b('0x6')](_0x51ce7a,'message')[_0x703b('0x7')](',\x20'));_0x287f34['stop']();}else{logger['info']('[%s][GOTOP]\x20priority\x20%s',_0x5c5d63,_0x4808df[_0x703b('0x8')]);if(_0x4808df[_0x703b('0x8')]){var _0x8648ba=_[_0x703b('0x9')](_0x287f34[_0x703b('0xa')](),{'p':_0x4808df[_0x703b('0x8')]});if(_0x8648ba>=0x0){logger['info']('[%s][GOTOP]\x20priority\x20%s\x20found\x20at\x20index:\x20%s',_0x5c5d63,_0x4808df[_0x703b('0x8')]||'next',_0x8648ba);_0x287f34['next'](_0x8648ba);}else{logger[_0x703b('0xb')](_0x703b('0xc'),_0x5c5d63,_0x4808df[_0x703b('0x8')]||_0x703b('0xd'));_0x287f34[_0x703b('0xe')]();}}else{_0x287f34[_0x703b('0xd')]();}}}catch(_0x2b6d72){logger[_0x703b('0xf')]('[%s][GOTOP]\x20%s',_0x5c5d63,JSON['stringify'](_0x2b6d72));_0x287f34['stop']();}};};
\ No newline at end of file
index 16adfd7..c644459 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb34a=['info','next','catch','error','stop','[%s][MESSAGE]\x20%s','stringify','lodash','./utils','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','consequence','getMustacheRender','contact','channel','chat','ChatWebsiteId','upperFirst','AccountId','InteractionId','interaction','Message','create','then'];(function(_0x3b73ad,_0x4c8a16){var _0x33bfa3=function(_0x18d30d){while(--_0x18d30d){_0x3b73ad['push'](_0x3b73ad['shift']());}};_0x33bfa3(++_0x4c8a16);}(_0xb34a,0xe7));var _0xab34=function(_0x74f894,_0xf4e073){_0x74f894=_0x74f894-0x0;var _0x301d0=_0xb34a[_0x74f894];return _0x301d0;};'use strict';var _=require(_0xab34('0x0'));var utils=require(_0xab34('0x1'));var logger=require(_0xab34('0x2'))(_0xab34('0x3'));var rpc={'chatMessage':require(_0xab34('0x4')),'openchannelMessage':require(_0xab34('0x5')),'mailMessage':require(_0xab34('0x6')),'smsMessage':require(_0xab34('0x7')),'faxMessage':require('../../rpc/faxMessage')};exports[_0xab34('0x8')]=function(_0x1b9ae3,_0x1e2867){return function(_0x4d6f52){try{var _0x513a4f={'body':utils[_0xab34('0x9')](_0x1e2867[0x0],this),'ContactId':this[_0xab34('0xa')]['id']};if(this[_0xab34('0xb')]===_0xab34('0xc')){_0x513a4f[_0xab34('0xd')]=this['account']['id'];}else{_0x513a4f[_[_0xab34('0xe')](this[_0xab34('0xb')])+_0xab34('0xf')]=this['account']['id'];}_0x513a4f[_[_0xab34('0xe')](this['channel'])+_0xab34('0x10')]=this[_0xab34('0x11')]['id'];if(rpc[this[_0xab34('0xb')]+_0xab34('0x12')]){return rpc[this[_0xab34('0xb')]+_0xab34('0x12')][_0xab34('0x13')](_0x513a4f)[_0xab34('0x14')](function(_0x278324){logger[_0xab34('0x15')]('[%s][MESSAGE]\x20%s',_0x1b9ae3,_0x513a4f['body']);_0x4d6f52[_0xab34('0x16')]();})[_0xab34('0x17')](function(_0x1cc5af){logger[_0xab34('0x18')]('[%s][MESSAGE]\x20%s',_0x1b9ae3,JSON['stringify'](_0x1cc5af));_0x4d6f52[_0xab34('0x19')]();});}}catch(_0xd5f343){logger[_0xab34('0x18')](_0xab34('0x1a'),_0x1b9ae3,JSON[_0xab34('0x1b')](_0xd5f343));_0x4d6f52[_0xab34('0x19')]();}};};
\ No newline at end of file
+var _0x67e7=['upperFirst','channel','InteractionId','interaction','Message','create','then','info','[%s][MESSAGE]\x20%s','body','next','catch','error','stop','stringify','lodash','./utils','../../../../config/logger','../../rpc/mailMessage','consequence','contact','chat','account'];(function(_0x2eacfe,_0x3f7b5b){var _0x10b0c5=function(_0x32fc0d){while(--_0x32fc0d){_0x2eacfe['push'](_0x2eacfe['shift']());}};_0x10b0c5(++_0x3f7b5b);}(_0x67e7,0x13a));var _0x767e=function(_0x5c05c9,_0x1f0efe){_0x5c05c9=_0x5c05c9-0x0;var _0x535897=_0x67e7[_0x5c05c9];return _0x535897;};'use strict';var _=require(_0x767e('0x0'));var utils=require(_0x767e('0x1'));var logger=require(_0x767e('0x2'))('routing');var rpc={'chatMessage':require('../../rpc/chatMessage'),'openchannelMessage':require('../../rpc/openchannelMessage'),'mailMessage':require(_0x767e('0x3')),'smsMessage':require('../../rpc/smsMessage'),'faxMessage':require('../../rpc/faxMessage')};exports[_0x767e('0x4')]=function(_0x46dd92,_0x4c7d11){return function(_0x3c7c3a){try{var _0x2b5381={'body':utils['getMustacheRender'](_0x4c7d11[0x0],this),'ContactId':this[_0x767e('0x5')]['id']};if(this['channel']===_0x767e('0x6')){_0x2b5381['ChatWebsiteId']=this[_0x767e('0x7')]['id'];}else{_0x2b5381[_[_0x767e('0x8')](this[_0x767e('0x9')])+'AccountId']=this[_0x767e('0x7')]['id'];}_0x2b5381[_['upperFirst'](this[_0x767e('0x9')])+_0x767e('0xa')]=this[_0x767e('0xb')]['id'];if(rpc[this[_0x767e('0x9')]+_0x767e('0xc')]){return rpc[this[_0x767e('0x9')]+_0x767e('0xc')][_0x767e('0xd')](_0x2b5381)[_0x767e('0xe')](function(_0x3c85e8){logger[_0x767e('0xf')](_0x767e('0x10'),_0x46dd92,_0x2b5381[_0x767e('0x11')]);_0x3c7c3a[_0x767e('0x12')]();})[_0x767e('0x13')](function(_0xedc2cd){logger[_0x767e('0x14')](_0x767e('0x10'),_0x46dd92,JSON['stringify'](_0xedc2cd));_0x3c7c3a[_0x767e('0x15')]();});}}catch(_0x5b1079){logger[_0x767e('0x14')]('[%s][MESSAGE]\x20%s',_0x46dd92,JSON[_0x767e('0x16')](_0x5b1079));_0x3c7c3a[_0x767e('0x15')]();}};};
\ No newline at end of file
index 7b9a8a2..d852488 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9feb=['routing','consequence','info','[%s][NOOP]\x20%s','getMustacheRender','next','error','stringify','stop'];(function(_0x28947d,_0x4cc9c6){var _0x12d2ee=function(_0x3f38fc){while(--_0x3f38fc){_0x28947d['push'](_0x28947d['shift']());}};_0x12d2ee(++_0x4cc9c6);}(_0x9feb,0x14d));var _0xb9fe=function(_0x4cd0b3,_0x343c1b){_0x4cd0b3=_0x4cd0b3-0x0;var _0x4f8359=_0x9feb[_0x4cd0b3];return _0x4f8359;};'use strict';var utils=require('./utils');var logger=require('../../../../config/logger')(_0xb9fe('0x0'));exports[_0xb9fe('0x1')]=function(_0x12e692,_0x8e151a){return function(_0x5c6212){try{logger[_0xb9fe('0x2')](_0xb9fe('0x3'),_0x12e692,utils[_0xb9fe('0x4')](_0x8e151a[0x0],this));_0x5c6212[_0xb9fe('0x5')]();}catch(_0x5c3d62){logger[_0xb9fe('0x6')](_0xb9fe('0x3'),_0x12e692,JSON[_0xb9fe('0x7')](_0x5c3d62));_0x5c6212[_0xb9fe('0x8')]();}};};
\ No newline at end of file
+var _0xb01d=['routing','info','[%s][NOOP]\x20%s','getMustacheRender','next','error','stringify','stop','./utils','../../../../config/logger'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xb01d,0xee));var _0xdb01=function(_0x243fa3,_0x4b4684){_0x243fa3=_0x243fa3-0x0;var _0x544586=_0xb01d[_0x243fa3];return _0x544586;};'use strict';var utils=require(_0xdb01('0x0'));var logger=require(_0xdb01('0x1'))(_0xdb01('0x2'));exports['consequence']=function(_0x35422a,_0x3304d3){return function(_0x998892){try{logger[_0xdb01('0x3')](_0xdb01('0x4'),_0x35422a,utils[_0xdb01('0x5')](_0x3304d3[0x0],this));_0x998892[_0xdb01('0x6')]();}catch(_0x103e8f){logger[_0xdb01('0x7')]('[%s][NOOP]\x20%s',_0x35422a,JSON[_0xdb01('0x8')](_0x103e8f));_0x998892[_0xdb01('0x9')]();}};};
\ No newline at end of file
index 76a7981..dace910 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7960=['[%s][STOP:QUEUE][NAME:%s]','catch','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','validate','length','[%s][QUEUE]\x20%s','map','join','stop','find','Queues','qtimeout','rules','close','next','strategy','rrmemory','beepall','log','stringify','lodash','util','seq-queue','moment','../../../../config/logger','routing','./strategy','localhost','account','queue','joinAt','emit','queue_id','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','contact','list','upperFirst','channel','InteractionId','interaction','MessageId','message','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','error','create\x20queue\x20report','YYYY-MM-DD\x20HH:mm:ss','accepted'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x7960,0xf0));var _0x0796=function(_0x50d4ab,_0x362a53){_0x50d4ab=_0x50d4ab-0x0;var _0x1b0ac9=_0x7960[_0x50d4ab];return _0x1b0ac9;};'use strict';var schema=require('validate');var _=require(_0x0796('0x0'));var util=require(_0x0796('0x1'));var seqqueue=require(_0x0796('0x2'));var moment=require(_0x0796('0x3'));var logger=require(_0x0796('0x4'))(_0x0796('0x5'));var strategy=require(_0x0796('0x6'));var io=require('socket.io-emitter')({'host':_0x0796('0x7'),'port':0x18eb});var attributes=['id','queue_id',_0x0796('0x8'),_0x0796('0x9'),'from',_0x0796('0xa')];function emit(_0x28a1b1,_0x399527,_0x14b1b0){io['to'](_0x28a1b1)[_0x0796('0xb')](_0x399527,_0x14b1b0);}function emitChannelQueueInteraction(_0xfecf23,_0x5bfb1e,_0x34e5f1,_0x4a62bf,_0x5fd6d0,_0x534ac5,_0x591fc7,_0x15061a){_0x34e5f1[_0x0796('0xc')]=_0x15061a;_0x34e5f1['queue']=_0x5bfb1e;_0x34e5f1[_0x0796('0x8')]=_0x4a62bf;_0x34e5f1['id']=_0x5fd6d0;if(_0x534ac5){_0x591fc7[util[_0x0796('0xd')](_0x0796('0xe'),_0xfecf23)][_0x5fd6d0]=_[_0x0796('0xf')](_0x34e5f1,attributes);}else{delete _0x591fc7[util[_0x0796('0xd')]('%sQueuesWaitingInteractions',_0xfecf23)][_0x5fd6d0];}emit(util['format'](_0x0796('0x10'),_0xfecf23,_0x5bfb1e),util[_0x0796('0xd')](_0x0796('0x11'),_0xfecf23,_0x534ac5?_0x0796('0x12'):_0x0796('0x13')),_[_0x0796('0xf')](_0x34e5f1,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x0796('0x14')),'chatQueueReport':require(_0x0796('0x15')),'smsQueueReport':require(_0x0796('0x16')),'faxQueueReport':require('../../rpc/faxQueueReport')};var queue=schema({'name':{'type':_0x0796('0x17'),'required':!![],'message':_0x0796('0x18')},'timeout':{'type':_0x0796('0x19'),'message':_0x0796('0x1a')}});function startRouting(_0x49d6e2,_0x37cd13,_0x43ef50,_0x2ed18a){if(_0x49d6e2&&_0x37cd13&&_0x43ef50){_0x37cd13[_0x0796('0x1b')]+=0x1;var _0x1d0211={'uniqueid':_0x49d6e2,'from':_0x43ef50[_0x0796('0x1c')]?_0x43ef50[_0x0796('0x1c')]['from']:'','joinAt':moment()[_0x0796('0xd')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x43ef50[_0x0796('0x1d')]?_0x43ef50[_0x0796('0x1d')]['id']:null,'ListId':_0x43ef50['list']?_0x43ef50[_0x0796('0x1e')]['id']:null};_0x1d0211[_['upperFirst'](_0x43ef50['channel'])+'QueueId']=_0x37cd13['id']||null;_0x1d0211[_[_0x0796('0x1f')](_0x43ef50[_0x0796('0x20')])+_0x0796('0x21')]=_0x43ef50[_0x0796('0x22')]?_0x43ef50[_0x0796('0x22')]['id']:null;_0x1d0211[_[_0x0796('0x1f')](_0x43ef50[_0x0796('0x20')])+_0x0796('0x23')]=_0x43ef50[_0x0796('0x24')]?_0x43ef50[_0x0796('0x24')]['id']:null;_0x1d0211[_[_0x0796('0x1f')](_0x43ef50[_0x0796('0x20')])+(_0x43ef50[_0x0796('0x20')]!=='chat'?_0x0796('0x25'):_0x0796('0x26'))]=_0x43ef50['account']?_0x43ef50[_0x0796('0x8')]['id']:null;logger[_0x0796('0x27')](util[_0x0796('0xd')](_0x0796('0x28'),_0x49d6e2,_0x37cd13['name']));emitChannelQueueInteraction(_0x43ef50[_0x0796('0x20')],_0x37cd13[_0x0796('0x29')],_0x1d0211,_0x43ef50[_0x0796('0x8')]['name'],_0x43ef50[_0x0796('0x24')]['id'],!![],_0x2ed18a,_0x37cd13['id']);if(rpc[_0x43ef50[_0x0796('0x20')]+_0x0796('0x2a')]){return rpc[_0x43ef50[_0x0796('0x20')]+_0x0796('0x2a')][_0x0796('0x2b')](_0x1d0211)['catch'](function(_0x3d0601){logger[_0x0796('0x2c')](_0x0796('0x2d'));});}}}function stopRouting(_0x4312f4,_0x1f5297,_0x228d80,_0x358e77){if(_0x4312f4&&_0x1f5297){_0x1f5297[_0x0796('0x1b')]-=0x1;var _0x86fbe6={'leaveAt':moment()[_0x0796('0xd')](_0x0796('0x2e')),'acceptAt':moment()[_0x0796('0xd')](_0x0796('0x2e')),'reason':_0x0796('0x2f')};logger['info'](util[_0x0796('0xd')](_0x0796('0x30'),_0x4312f4,_0x1f5297[_0x0796('0x29')]));emitChannelQueueInteraction(_0x228d80[_0x0796('0x20')],_0x1f5297[_0x0796('0x29')],_0x228d80[_0x0796('0x1c')],_0x228d80[_0x0796('0x8')][_0x0796('0x29')],_0x228d80[_0x0796('0x24')]['id'],![],_0x358e77,_0x1f5297['id']);if(rpc[_0x228d80[_0x0796('0x20')]+_0x0796('0x2a')]){return rpc[_0x228d80[_0x0796('0x20')]+_0x0796('0x2a')]['update'](_0x4312f4,_0x86fbe6)[_0x0796('0x31')](function(_0x21366b){logger[_0x0796('0x2c')](_0x0796('0x32'));});}}}function endRouting(_0x2f9675,_0x381af7,_0x205900,_0x42736e){if(_0x2f9675&&_0x381af7){_0x381af7['waiting']-=0x1;var _0x1c8735={'leaveAt':moment()[_0x0796('0xd')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x0796('0xd')](_0x0796('0x2e')),'reason':_0x0796('0x33')};logger[_0x0796('0x27')](util[_0x0796('0xd')](_0x0796('0x34'),_0x2f9675,_0x381af7[_0x0796('0x29')]));emitChannelQueueInteraction(_0x205900[_0x0796('0x20')],_0x381af7[_0x0796('0x29')],_0x205900[_0x0796('0x1c')],_0x205900[_0x0796('0x8')]['name'],_0x205900[_0x0796('0x24')]['id'],![],_0x42736e);if(rpc[_0x205900[_0x0796('0x20')]+_0x0796('0x2a')]){return rpc[_0x205900[_0x0796('0x20')]+_0x0796('0x2a')][_0x0796('0x35')](_0x2f9675,_0x1c8735)[_0x0796('0x31')](function(_0x6ef7b2){logger[_0x0796('0x2c')]('update\x20queue\x20report');});}}}function handleFindQueue(_0x566546){return function(_0x5b57f9){return _0x5b57f9[_0x0796('0x29')][_0x0796('0x36')]()===_0x566546['toLowerCase']();};}exports['consequence']=function(_0x2b031e,_0x45a380,_0x2c32c6,_0x54ab66){return function(_0x204a77){try{var _0x569a71={'name':_0x45a380[0x0],'timeout':_0x45a380[0x1]};var _0x30390b=queue[_0x0796('0x37')](_0x569a71,{'typecast':!![]});if(_0x30390b[_0x0796('0x38')]){logger[_0x0796('0x2c')](_0x0796('0x39'),_0x2b031e,_[_0x0796('0x3a')](_0x30390b,'message')[_0x0796('0x3b')](',\x20'));_0x204a77[_0x0796('0x3c')]();}else{var _0x5f35f6=_[_0x0796('0x3d')](_0x2c32c6[_0x54ab66[_0x0796('0x20')]+_0x0796('0x3e')],handleFindQueue(_0x569a71[_0x0796('0x29')]));if(_0x5f35f6){startRouting(_0x2b031e,_0x5f35f6,_0x54ab66,_0x2c32c6);var _0x32b8dd=(_0x5f35f6[_0x0796('0x33')]||0xa)*0x3e8;var _0x7b0fa6=(_0x569a71[_0x0796('0x33')]||0x14)*0x3e8;var _0x526335,_0x2ca001;if(_0x32b8dd>_0x7b0fa6){_0x7b0fa6=_0x32b8dd;}var _0x251a04=seqqueue['createQueue'](_0x32b8dd);_0x251a04['id']=_0x2b031e;_0x251a04['atimeout']=_0x32b8dd;_0x251a04[_0x0796('0x3f')]=_0x7b0fa6;_0x251a04[_0x0796('0x20')]=_0x54ab66[_0x0796('0x20')];_0x2ca001=setInterval(function(){if(_0x2c32c6[_0x0796('0x40')]&&!_0x2c32c6['rules'][_0x2b031e]){stopRouting(_0x2b031e,_0x5f35f6,_0x54ab66,_0x2c32c6);clearTimeout(_0x526335);clearInterval(_0x2ca001);_0x526335=undefined;_0x251a04[_0x0796('0x41')](!![]);_0x204a77[_0x0796('0x3c')]();}},0x3e8);_0x526335=setTimeout(function(){endRouting(_0x2b031e,_0x5f35f6,_0x54ab66,_0x2c32c6);clearInterval(_0x2ca001);_0x2ca001=undefined;_0x251a04[_0x0796('0x41')](!![]);_0x204a77[_0x0796('0x42')]();},_0x7b0fa6);switch(_0x5f35f6[_0x0796('0x43')]){case _0x0796('0x44'):strategy[_0x0796('0x44')](_0x251a04,_0x5f35f6,_0x2c32c6,_0x54ab66);break;default:strategy[_0x0796('0x45')](_0x251a04,_0x5f35f6,_0x2c32c6,_0x54ab66);}}else{logger[_0x0796('0x2c')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x2b031e,_0x569a71[_0x0796('0x29')]);_0x204a77[_0x0796('0x3c')]();}}}catch(_0x21cd27){console[_0x0796('0x46')](_0x21cd27);logger[_0x0796('0x2c')]('[%s][QUEUE]\x20%s',_0x2b031e,JSON[_0x0796('0x47')](_0x21cd27));_0x204a77['stop']();}};};
\ No newline at end of file
+var _0xfcc3=['createQueue','qtimeout','rules','close','stop','next','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stringify','validate','lodash','moment','../../../../config/logger','./strategy','localhost','account','queue','joinAt','emit','queue_id','format','pick','%s:queue:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','from','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','QueueId','channel','InteractionId','interaction','MessageId','message','chat','AccountId','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','error','create\x20queue\x20report','accepted','info','[%s][STOP:QUEUE][NAME:%s]','update','catch','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','length','[%s][QUEUE]\x20%s','join','timeout'];(function(_0x564674,_0x462e46){var _0x5a8b9e=function(_0x131d6f){while(--_0x131d6f){_0x564674['push'](_0x564674['shift']());}};_0x5a8b9e(++_0x462e46);}(_0xfcc3,0x11f));var _0x3fcc=function(_0x2ae01b,_0x4a6846){_0x2ae01b=_0x2ae01b-0x0;var _0x330baf=_0xfcc3[_0x2ae01b];return _0x330baf;};'use strict';var schema=require(_0x3fcc('0x0'));var _=require(_0x3fcc('0x1'));var util=require('util');var seqqueue=require('seq-queue');var moment=require(_0x3fcc('0x2'));var logger=require(_0x3fcc('0x3'))('routing');var strategy=require(_0x3fcc('0x4'));var io=require('socket.io-emitter')({'host':_0x3fcc('0x5'),'port':0x18eb});var attributes=['id','queue_id',_0x3fcc('0x6'),_0x3fcc('0x7'),'from',_0x3fcc('0x8')];function emit(_0x95ec2e,_0x3b094a,_0x134ddc){io['to'](_0x95ec2e)[_0x3fcc('0x9')](_0x3b094a,_0x134ddc);}function emitChannelQueueInteraction(_0x481820,_0x31f671,_0xbba175,_0x52560e,_0x5d635d,_0x1c6b98,_0x25699c,_0x28cd8c){_0xbba175[_0x3fcc('0xa')]=_0x28cd8c;_0xbba175[_0x3fcc('0x7')]=_0x31f671;_0xbba175['account']=_0x52560e;_0xbba175['id']=_0x5d635d;if(_0x1c6b98){_0x25699c[util[_0x3fcc('0xb')]('%sQueuesWaitingInteractions',_0x481820)][_0x5d635d]=_[_0x3fcc('0xc')](_0xbba175,attributes);}else{delete _0x25699c[util[_0x3fcc('0xb')]('%sQueuesWaitingInteractions',_0x481820)][_0x5d635d];}emit(util[_0x3fcc('0xb')](_0x3fcc('0xd'),_0x481820,_0x31f671),util[_0x3fcc('0xb')]('%s_queue_waiting_interaction:%s',_0x481820,_0x1c6b98?_0x3fcc('0xe'):_0x3fcc('0xf')),_[_0x3fcc('0xc')](_0xbba175,attributes));}var rpc={'openchannelQueueReport':require(_0x3fcc('0x10')),'mailQueueReport':require(_0x3fcc('0x11')),'chatQueueReport':require(_0x3fcc('0x12')),'smsQueueReport':require(_0x3fcc('0x13')),'faxQueueReport':require(_0x3fcc('0x14'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x3fcc('0x15')},'timeout':{'type':_0x3fcc('0x16'),'message':_0x3fcc('0x17')}});function startRouting(_0x2b4ba3,_0x5711d4,_0x45019f,_0x4213a8){if(_0x2b4ba3&&_0x5711d4&&_0x45019f){_0x5711d4[_0x3fcc('0x18')]+=0x1;var _0x1b96e3={'uniqueid':_0x2b4ba3,'from':_0x45019f[_0x3fcc('0x19')]?_0x45019f[_0x3fcc('0x19')][_0x3fcc('0x1a')]:'','joinAt':moment()['format'](_0x3fcc('0x1b')),'ContactId':_0x45019f[_0x3fcc('0x1c')]?_0x45019f[_0x3fcc('0x1c')]['id']:null,'ListId':_0x45019f[_0x3fcc('0x1d')]?_0x45019f[_0x3fcc('0x1d')]['id']:null};_0x1b96e3[_[_0x3fcc('0x1e')](_0x45019f['channel'])+_0x3fcc('0x1f')]=_0x5711d4['id']||null;_0x1b96e3[_['upperFirst'](_0x45019f[_0x3fcc('0x20')])+_0x3fcc('0x21')]=_0x45019f[_0x3fcc('0x22')]?_0x45019f[_0x3fcc('0x22')]['id']:null;_0x1b96e3[_[_0x3fcc('0x1e')](_0x45019f[_0x3fcc('0x20')])+_0x3fcc('0x23')]=_0x45019f[_0x3fcc('0x24')]?_0x45019f[_0x3fcc('0x24')]['id']:null;_0x1b96e3[_[_0x3fcc('0x1e')](_0x45019f['channel'])+(_0x45019f[_0x3fcc('0x20')]!==_0x3fcc('0x25')?_0x3fcc('0x26'):_0x3fcc('0x27'))]=_0x45019f[_0x3fcc('0x6')]?_0x45019f[_0x3fcc('0x6')]['id']:null;logger['info'](util[_0x3fcc('0xb')](_0x3fcc('0x28'),_0x2b4ba3,_0x5711d4[_0x3fcc('0x29')]));emitChannelQueueInteraction(_0x45019f[_0x3fcc('0x20')],_0x5711d4['name'],_0x1b96e3,_0x45019f['account'][_0x3fcc('0x29')],_0x45019f[_0x3fcc('0x24')]['id'],!![],_0x4213a8,_0x5711d4['id']);if(rpc[_0x45019f[_0x3fcc('0x20')]+'QueueReport']){return rpc[_0x45019f[_0x3fcc('0x20')]+_0x3fcc('0x2a')][_0x3fcc('0x2b')](_0x1b96e3)['catch'](function(_0xdc9847){logger[_0x3fcc('0x2c')](_0x3fcc('0x2d'));});}}}function stopRouting(_0x3cf03e,_0x3504d0,_0xb6696a,_0x48b240){if(_0x3cf03e&&_0x3504d0){_0x3504d0[_0x3fcc('0x18')]-=0x1;var _0x3d5861={'leaveAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0x3fcc('0xb')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x3fcc('0x2e')};logger[_0x3fcc('0x2f')](util[_0x3fcc('0xb')](_0x3fcc('0x30'),_0x3cf03e,_0x3504d0[_0x3fcc('0x29')]));emitChannelQueueInteraction(_0xb6696a[_0x3fcc('0x20')],_0x3504d0[_0x3fcc('0x29')],_0xb6696a[_0x3fcc('0x19')],_0xb6696a[_0x3fcc('0x6')][_0x3fcc('0x29')],_0xb6696a[_0x3fcc('0x24')]['id'],![],_0x48b240,_0x3504d0['id']);if(rpc[_0xb6696a[_0x3fcc('0x20')]+'QueueReport']){return rpc[_0xb6696a[_0x3fcc('0x20')]+_0x3fcc('0x2a')][_0x3fcc('0x31')](_0x3cf03e,_0x3d5861)[_0x3fcc('0x32')](function(_0x543f25){logger[_0x3fcc('0x2c')](_0x3fcc('0x33'));});}}}function endRouting(_0x15c65e,_0x512e03,_0xd3ac6,_0x1ece86){if(_0x15c65e&&_0x512e03){_0x512e03[_0x3fcc('0x18')]-=0x1;var _0x1d0810={'leaveAt':moment()['format'](_0x3fcc('0x1b')),'exitAt':moment()[_0x3fcc('0xb')](_0x3fcc('0x1b')),'reason':'timeout'};logger[_0x3fcc('0x2f')](util['format'](_0x3fcc('0x34'),_0x15c65e,_0x512e03[_0x3fcc('0x29')]));emitChannelQueueInteraction(_0xd3ac6[_0x3fcc('0x20')],_0x512e03[_0x3fcc('0x29')],_0xd3ac6[_0x3fcc('0x19')],_0xd3ac6['account']['name'],_0xd3ac6[_0x3fcc('0x24')]['id'],![],_0x1ece86);if(rpc[_0xd3ac6[_0x3fcc('0x20')]+_0x3fcc('0x2a')]){return rpc[_0xd3ac6[_0x3fcc('0x20')]+'QueueReport']['update'](_0x15c65e,_0x1d0810)['catch'](function(_0x409065){logger[_0x3fcc('0x2c')](_0x3fcc('0x33'));});}}}function handleFindQueue(_0x4f1527){return function(_0x78649){return _0x78649[_0x3fcc('0x29')][_0x3fcc('0x35')]()===_0x4f1527[_0x3fcc('0x35')]();};}exports['consequence']=function(_0x1d4c70,_0x2bc913,_0x367035,_0x202be1){return function(_0x5dac06){try{var _0x314a5a={'name':_0x2bc913[0x0],'timeout':_0x2bc913[0x1]};var _0x13d003=queue['validate'](_0x314a5a,{'typecast':!![]});if(_0x13d003[_0x3fcc('0x36')]){logger['error'](_0x3fcc('0x37'),_0x1d4c70,_['map'](_0x13d003,_0x3fcc('0x24'))[_0x3fcc('0x38')](',\x20'));_0x5dac06['stop']();}else{var _0x151583=_['find'](_0x367035[_0x202be1[_0x3fcc('0x20')]+'Queues'],handleFindQueue(_0x314a5a[_0x3fcc('0x29')]));if(_0x151583){startRouting(_0x1d4c70,_0x151583,_0x202be1,_0x367035);var _0x3fd96d=(_0x151583['timeout']||0xa)*0x3e8;var _0x2034d1=(_0x314a5a[_0x3fcc('0x39')]||0x14)*0x3e8;var _0x17977c,_0xb17480;if(_0x3fd96d>_0x2034d1){_0x2034d1=_0x3fd96d;}var _0x558126=seqqueue[_0x3fcc('0x3a')](_0x3fd96d);_0x558126['id']=_0x1d4c70;_0x558126['atimeout']=_0x3fd96d;_0x558126[_0x3fcc('0x3b')]=_0x2034d1;_0x558126[_0x3fcc('0x20')]=_0x202be1[_0x3fcc('0x20')];_0xb17480=setInterval(function(){if(_0x367035[_0x3fcc('0x3c')]&&!_0x367035[_0x3fcc('0x3c')][_0x1d4c70]){stopRouting(_0x1d4c70,_0x151583,_0x202be1,_0x367035);clearTimeout(_0x17977c);clearInterval(_0xb17480);_0x17977c=undefined;_0x558126[_0x3fcc('0x3d')](!![]);_0x5dac06[_0x3fcc('0x3e')]();}},0x3e8);_0x17977c=setTimeout(function(){endRouting(_0x1d4c70,_0x151583,_0x202be1,_0x367035);clearInterval(_0xb17480);_0xb17480=undefined;_0x558126[_0x3fcc('0x3d')](!![]);_0x5dac06[_0x3fcc('0x3f')]();},_0x2034d1);switch(_0x151583[_0x3fcc('0x40')]){case _0x3fcc('0x41'):strategy['rrmemory'](_0x558126,_0x151583,_0x367035,_0x202be1);break;default:strategy['beepall'](_0x558126,_0x151583,_0x367035,_0x202be1);}}else{logger[_0x3fcc('0x2c')](_0x3fcc('0x42'),_0x1d4c70,_0x314a5a[_0x3fcc('0x29')]);_0x5dac06['stop']();}}}catch(_0x5b4f9d){console[_0x3fcc('0x43')](_0x5b4f9d);logger['error'](_0x3fcc('0x37'),_0x1d4c70,JSON[_0x3fcc('0x44')](_0x5b4f9d));_0x5dac06['stop']();}};};
\ No newline at end of file
index b252398..b0a48d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6134=['hideNotification','exports','uuid','./util','routing','notificationId','squeue','agent','realtime','push','bind','handleTimeout','drained','handleRun','done','prototype','[%s][AGENT]\x20try\x20with\x20%s','isNil','agents','info','[%s][AGENT]\x20agent\x20skipped,\x20unknown\x20id\x20%s','forcedOwnership','isAgentAvailable','RINGING','busy','busyQueue','showNotification','[%s][AGENT]\x20timeout\x20with\x20%s','writeLog','TIMEOUT'];(function(_0x4edeaf,_0x28941b){var _0x4af08a=function(_0xd868ad){while(--_0xd868ad){_0x4edeaf['push'](_0x4edeaf['shift']());}};_0x4af08a(++_0x28941b);}(_0x6134,0xb6));var _0x4613=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x6134[_0x14add3];return _0x4a174f;};'use strict';var _=require('lodash');var uuid=require(_0x4613('0x0'));var util=require(_0x4613('0x1'));var logger=require('../../../../../config/logger')(_0x4613('0x2'));var Agent=function(_0x4bcb1e,_0x128038,_0x13d1f1,_0x3039fa){this[_0x4613('0x3')]=uuid['v4']();this[_0x4613('0x4')]=_0x4bcb1e;this[_0x4613('0x5')]=_0x128038;this[_0x4613('0x6')]=_0x13d1f1;this[_0x4613('0x2')]=_0x3039fa;this[_0x4613('0x4')][_0x4613('0x7')](this['handleRun'][_0x4613('0x8')](this),this[_0x4613('0x9')][_0x4613('0x8')](this));this['squeue']['on'](_0x4613('0xa'),this['handleTimeout'][_0x4613('0x8')](this));};Agent['prototype'][_0x4613('0x7')]=function(){this[_0x4613('0x4')][_0x4613('0x7')](this[_0x4613('0xb')][_0x4613('0x8')](this),this[_0x4613('0x9')][_0x4613('0x8')](this));};Agent['prototype']['done']=function(_0x47e600){if(_0x47e600){setTimeout(this[_0x4613('0x7')][_0x4613('0x8')](this),0x3e8);_0x47e600[_0x4613('0xc')]();}};Agent[_0x4613('0xd')][_0x4613('0xb')]=function(_0x5d9366){logger['info'](_0x4613('0xe'),this['squeue']['id'],this[_0x4613('0x5')]['id']);if(_[_0x4613('0xf')](this[_0x4613('0x6')][_0x4613('0x10')][this[_0x4613('0x5')]['id']])){logger[_0x4613('0x11')](_0x4613('0x12'),this['squeue']['id'],this[_0x4613('0x5')]['id']);this[_0x4613('0xc')](_0x5d9366);}else{if(this[_0x4613('0x2')][_0x4613('0x13')]||util[_0x4613('0x14')](this[_0x4613('0x4')]['id'],this['realtime']['agents'][this[_0x4613('0x5')]['id']],this[_0x4613('0x4')]['channel'],![])){util['writeLog'](this[_0x4613('0x4')]['id'],this[_0x4613('0x6')]['agents'][this[_0x4613('0x5')]['id']],_0x4613('0x15')+(this[_0x4613('0x2')][_0x4613('0x13')]?':FORCED':''));this[_0x4613('0x6')]['agents'][this[_0x4613('0x5')]['id']][_0x4613('0x16')]=!![];this[_0x4613('0x6')][_0x4613('0x10')][this[_0x4613('0x5')]['id']][_0x4613('0x17')]=undefined;util[_0x4613('0x18')](this[_0x4613('0x3')],this[_0x4613('0x4')]['id'],this[_0x4613('0x6')][_0x4613('0x10')][this[_0x4613('0x5')]['id']],null,this['routing']);}else{this[_0x4613('0xc')](_0x5d9366);}}};Agent[_0x4613('0xd')][_0x4613('0x9')]=function(){logger[_0x4613('0x11')](_0x4613('0x19'),this[_0x4613('0x4')]['id'],this[_0x4613('0x5')]['id']);if(_[_0x4613('0xf')](this[_0x4613('0x6')]['agents'][this[_0x4613('0x5')]['id']])){return logger[_0x4613('0x11')](_0x4613('0x12'),this[_0x4613('0x4')]['id'],this[_0x4613('0x5')]['id']);}else{util[_0x4613('0x1a')](this['squeue']['id'],this['realtime'][_0x4613('0x10')][this[_0x4613('0x5')]['id']],_0x4613('0x1b'));this[_0x4613('0x6')][_0x4613('0x10')][this['agent']['id']][_0x4613('0x16')]=![];this['realtime'][_0x4613('0x10')][this[_0x4613('0x5')]['id']][_0x4613('0x17')]=undefined;util[_0x4613('0x1c')](this['notificationId'],this[_0x4613('0x4')]['id'],this[_0x4613('0x6')]['agents'][this['agent']['id']],null,this[_0x4613('0x2')]);}};function agent(_0x5b77c5,_0x5edcac,_0xd60e74,_0x3f19fd){return new Agent(_0x5b77c5,_0x5edcac,_0xd60e74,_0x3f19fd);}module[_0x4613('0x1d')]=agent;
\ No newline at end of file
+var _0x12c7=['[%s][AGENT]\x20agent\x20skipped,\x20unknown\x20id\x20%s','forcedOwnership','isAgentAvailable','channel','writeLog','RINGING',':FORCED','showNotification','notificationId','[%s][AGENT]\x20timeout\x20with\x20%s','isNil','TIMEOUT','busy','busyQueue','exports','uuid','./util','../../../../../config/logger','routing','squeue','agent','realtime','push','handleRun','bind','handleTimeout','prototype','done','info','[%s][AGENT]\x20try\x20with\x20%s','agents'];(function(_0x74cf63,_0x805d26){var _0x414861=function(_0xd2a6ba){while(--_0xd2a6ba){_0x74cf63['push'](_0x74cf63['shift']());}};_0x414861(++_0x805d26);}(_0x12c7,0x126));var _0x712c=function(_0x352322,_0x4d4a68){_0x352322=_0x352322-0x0;var _0x58dd45=_0x12c7[_0x352322];return _0x58dd45;};'use strict';var _=require('lodash');var uuid=require(_0x712c('0x0'));var util=require(_0x712c('0x1'));var logger=require(_0x712c('0x2'))(_0x712c('0x3'));var Agent=function(_0x438273,_0x52a9d4,_0x18f89f,_0x28c830){this['notificationId']=uuid['v4']();this[_0x712c('0x4')]=_0x438273;this[_0x712c('0x5')]=_0x52a9d4;this[_0x712c('0x6')]=_0x18f89f;this[_0x712c('0x3')]=_0x28c830;this[_0x712c('0x4')][_0x712c('0x7')](this[_0x712c('0x8')][_0x712c('0x9')](this),this['handleTimeout'][_0x712c('0x9')](this));this[_0x712c('0x4')]['on']('drained',this[_0x712c('0xa')][_0x712c('0x9')](this));};Agent[_0x712c('0xb')]['push']=function(){this[_0x712c('0x4')][_0x712c('0x7')](this[_0x712c('0x8')][_0x712c('0x9')](this),this[_0x712c('0xa')][_0x712c('0x9')](this));};Agent['prototype'][_0x712c('0xc')]=function(_0x723cdf){if(_0x723cdf){setTimeout(this[_0x712c('0x7')][_0x712c('0x9')](this),0x3e8);_0x723cdf['done']();}};Agent[_0x712c('0xb')]['handleRun']=function(_0x4d717b){logger[_0x712c('0xd')](_0x712c('0xe'),this[_0x712c('0x4')]['id'],this[_0x712c('0x5')]['id']);if(_['isNil'](this['realtime'][_0x712c('0xf')][this[_0x712c('0x5')]['id']])){logger[_0x712c('0xd')](_0x712c('0x10'),this[_0x712c('0x4')]['id'],this[_0x712c('0x5')]['id']);this['done'](_0x4d717b);}else{if(this[_0x712c('0x3')][_0x712c('0x11')]||util[_0x712c('0x12')](this[_0x712c('0x4')]['id'],this[_0x712c('0x6')][_0x712c('0xf')][this[_0x712c('0x5')]['id']],this['squeue'][_0x712c('0x13')],![])){util[_0x712c('0x14')](this['squeue']['id'],this[_0x712c('0x6')][_0x712c('0xf')][this[_0x712c('0x5')]['id']],_0x712c('0x15')+(this[_0x712c('0x3')][_0x712c('0x11')]?_0x712c('0x16'):''));this[_0x712c('0x6')][_0x712c('0xf')][this[_0x712c('0x5')]['id']]['busy']=!![];this[_0x712c('0x6')]['agents'][this['agent']['id']]['busyQueue']=undefined;util[_0x712c('0x17')](this[_0x712c('0x18')],this['squeue']['id'],this[_0x712c('0x6')][_0x712c('0xf')][this['agent']['id']],null,this[_0x712c('0x3')]);}else{this[_0x712c('0xc')](_0x4d717b);}}};Agent[_0x712c('0xb')][_0x712c('0xa')]=function(){logger[_0x712c('0xd')](_0x712c('0x19'),this[_0x712c('0x4')]['id'],this[_0x712c('0x5')]['id']);if(_[_0x712c('0x1a')](this['realtime'][_0x712c('0xf')][this[_0x712c('0x5')]['id']])){return logger[_0x712c('0xd')](_0x712c('0x10'),this[_0x712c('0x4')]['id'],this[_0x712c('0x5')]['id']);}else{util[_0x712c('0x14')](this[_0x712c('0x4')]['id'],this['realtime'][_0x712c('0xf')][this[_0x712c('0x5')]['id']],_0x712c('0x1b'));this[_0x712c('0x6')][_0x712c('0xf')][this['agent']['id']][_0x712c('0x1c')]=![];this[_0x712c('0x6')][_0x712c('0xf')][this[_0x712c('0x5')]['id']][_0x712c('0x1d')]=undefined;util['hideNotification'](this[_0x712c('0x18')],this[_0x712c('0x4')]['id'],this['realtime']['agents'][this['agent']['id']],null,this[_0x712c('0x3')]);}};function agent(_0x1a81bd,_0x24a7fa,_0x4ab3dd,_0x52270b){return new Agent(_0x1a81bd,_0x24a7fa,_0x4ab3dd,_0x52270b);}module[_0x712c('0x1e')]=agent;
\ No newline at end of file
index da296c1..531aae7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfc75=['TIMEOUT','hideNotification','exports','lodash','uuid','./util','../../../../../config/logger','routing','notificationId','squeue','queue','realtime','floor','qtimeout','module','atimeout','length','push','handleRun','bind','drained','handleTimeout','done','isNil','Agents','agents','info','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','isAgentAvailable','channel','writeLog','RINGING','busyQueue','name','showNotification','[%s][QUEUE]\x20EMPTY','prototype'];(function(_0x512522,_0x2527bf){var _0x25071d=function(_0x2ca6c3){while(--_0x2ca6c3){_0x512522['push'](_0x512522['shift']());}};_0x25071d(++_0x2527bf);}(_0xfc75,0xe1));var _0x5fc7=function(_0x21a9d9,_0x4d5ac8){_0x21a9d9=_0x21a9d9-0x0;var _0x46adce=_0xfc75[_0x21a9d9];return _0x46adce;};'use strict';var _=require(_0x5fc7('0x0'));var uuid=require(_0x5fc7('0x1'));var util=require(_0x5fc7('0x2'));var logger=require(_0x5fc7('0x3'))(_0x5fc7('0x4'));var Beepall=function(_0x5002c4,_0x55314c,_0x3d7a79,_0x5deb53){this[_0x5fc7('0x5')]=uuid['v4']();this[_0x5fc7('0x6')]=_0x5002c4;this[_0x5fc7('0x7')]=_0x55314c;this[_0x5fc7('0x8')]=_0x3d7a79;this[_0x5fc7('0x4')]=_0x5deb53;this['length']=Math[_0x5fc7('0x9')](this['squeue'][_0x5fc7('0xa')]/this['squeue']['atimeout']);this[_0x5fc7('0xb')]=this['squeue'][_0x5fc7('0xa')]%this['squeue'][_0x5fc7('0xc')];for(var _0x274c79=0x0;_0x274c79<this[_0x5fc7('0xd')];_0x274c79+=0x1){this['squeue'][_0x5fc7('0xe')](this[_0x5fc7('0xf')][_0x5fc7('0x10')](this),this['handleTimeout'][_0x5fc7('0x10')](this));}this[_0x5fc7('0x6')][_0x5fc7('0xe')](this[_0x5fc7('0xf')]['bind'](this),this['handleTimeout']['bind'](this),this['module']);this[_0x5fc7('0x6')]['on'](_0x5fc7('0x11'),this[_0x5fc7('0x12')][_0x5fc7('0x10')](this));};Beepall['prototype'][_0x5fc7('0xe')]=function(){this[_0x5fc7('0x6')][_0x5fc7('0xe')](this[_0x5fc7('0xf')]['bind'](this),this[_0x5fc7('0x12')][_0x5fc7('0x10')](this));};Beepall['prototype']['done']=function(_0x34c1ee){if(_0x34c1ee){setTimeout(this[_0x5fc7('0xe')][_0x5fc7('0x10')](this),0x3e8);_0x34c1ee[_0x5fc7('0x13')]();}};Beepall['prototype'][_0x5fc7('0xf')]=function(_0x98d164){var _0xa61588=!![];if(!_[_0x5fc7('0x14')](this[_0x5fc7('0x7')])&&!_['isNil'](this['queue'][_0x5fc7('0x15')])&&this[_0x5fc7('0x7')][_0x5fc7('0x15')][_0x5fc7('0xd')]>0x0){for(var _0x1d0228=0x0,_0x26c4ae;_0x1d0228<this[_0x5fc7('0x7')][_0x5fc7('0x15')]['length'];_0x1d0228+=0x1){_0x26c4ae=this[_0x5fc7('0x7')]['Agents'][_0x1d0228]['id'];if(_[_0x5fc7('0x14')](this[_0x5fc7('0x8')][_0x5fc7('0x16')][_0x26c4ae])){logger[_0x5fc7('0x17')](_0x5fc7('0x18'),this['squeue']['id'],_0x26c4ae);}else{if(util[_0x5fc7('0x19')](this[_0x5fc7('0x6')]['id'],this[_0x5fc7('0x8')][_0x5fc7('0x16')][_0x26c4ae],this[_0x5fc7('0x6')][_0x5fc7('0x1a')],!![])){_0xa61588=![];util[_0x5fc7('0x1b')](this[_0x5fc7('0x6')]['id'],this['realtime']['agents'][_0x26c4ae],_0x5fc7('0x1c'));this['realtime'][_0x5fc7('0x16')][_0x26c4ae]['busy']=!![];this[_0x5fc7('0x8')][_0x5fc7('0x16')][_0x26c4ae][_0x5fc7('0x1d')]=this[_0x5fc7('0x7')][_0x5fc7('0x1e')];util[_0x5fc7('0x1f')](this[_0x5fc7('0x5')],this[_0x5fc7('0x6')]['id'],this[_0x5fc7('0x8')][_0x5fc7('0x16')][_0x26c4ae],this['queue'],this[_0x5fc7('0x4')]);}}}if(_0xa61588){this[_0x5fc7('0x13')](_0x98d164);}}else{logger[_0x5fc7('0x17')](_0x5fc7('0x20'),this[_0x5fc7('0x6')]['id']);this[_0x5fc7('0x13')](_0x98d164);}};Beepall[_0x5fc7('0x21')][_0x5fc7('0x12')]=function(){if(!_[_0x5fc7('0x14')](this['queue'])&&!_['isNil'](this[_0x5fc7('0x7')][_0x5fc7('0x15')])){for(var _0x29836=0x0,_0x459321;_0x29836<this[_0x5fc7('0x7')][_0x5fc7('0x15')][_0x5fc7('0xd')];_0x29836+=0x1){_0x459321=this[_0x5fc7('0x7')][_0x5fc7('0x15')][_0x29836]['id'];if(_[_0x5fc7('0x14')](this[_0x5fc7('0x8')][_0x5fc7('0x16')][_0x459321])){logger['info']('[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x5fc7('0x6')]['id'],_0x459321);}else{util['writeLog'](this[_0x5fc7('0x6')]['id'],this[_0x5fc7('0x8')][_0x5fc7('0x16')][_0x459321],_0x5fc7('0x22'));this[_0x5fc7('0x8')][_0x5fc7('0x16')][_0x459321]['busy']=![];this['realtime'][_0x5fc7('0x16')][_0x459321][_0x5fc7('0x1d')]=undefined;util[_0x5fc7('0x23')](this[_0x5fc7('0x5')],this['squeue']['id'],this['realtime']['agents'][_0x459321],this[_0x5fc7('0x7')],this[_0x5fc7('0x4')]);}}}};function beepall(_0x233e56,_0x4b038f,_0x5f3b23,_0x3ac8e4){return new Beepall(_0x233e56,_0x4b038f,_0x5f3b23,_0x3ac8e4);}module[_0x5fc7('0x24')]=beepall;
\ No newline at end of file
+var _0x9c00=['RINGING','showNotification','[%s][QUEUE]\x20EMPTY','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','TIMEOUT','busy','busyQueue','hideNotification','lodash','uuid','routing','notificationId','squeue','queue','length','floor','qtimeout','module','atimeout','push','handleRun','bind','handleTimeout','drained','prototype','done','isNil','Agents','realtime','agents','info','isAgentAvailable','channel','writeLog'];(function(_0x29db36,_0x410ae9){var _0x234e87=function(_0x48697b){while(--_0x48697b){_0x29db36['push'](_0x29db36['shift']());}};_0x234e87(++_0x410ae9);}(_0x9c00,0x1a0));var _0x09c0=function(_0x4a94b1,_0x4f2518){_0x4a94b1=_0x4a94b1-0x0;var _0x20949f=_0x9c00[_0x4a94b1];return _0x20949f;};'use strict';var _=require(_0x09c0('0x0'));var uuid=require(_0x09c0('0x1'));var util=require('./util');var logger=require('../../../../../config/logger')(_0x09c0('0x2'));var Beepall=function(_0x8c9907,_0x5d1967,_0x220c0c,_0x2c702c){this[_0x09c0('0x3')]=uuid['v4']();this[_0x09c0('0x4')]=_0x8c9907;this[_0x09c0('0x5')]=_0x5d1967;this['realtime']=_0x220c0c;this['routing']=_0x2c702c;this[_0x09c0('0x6')]=Math[_0x09c0('0x7')](this[_0x09c0('0x4')][_0x09c0('0x8')]/this[_0x09c0('0x4')]['atimeout']);this[_0x09c0('0x9')]=this[_0x09c0('0x4')][_0x09c0('0x8')]%this[_0x09c0('0x4')][_0x09c0('0xa')];for(var _0x1e16f4=0x0;_0x1e16f4<this[_0x09c0('0x6')];_0x1e16f4+=0x1){this[_0x09c0('0x4')][_0x09c0('0xb')](this[_0x09c0('0xc')][_0x09c0('0xd')](this),this[_0x09c0('0xe')][_0x09c0('0xd')](this));}this[_0x09c0('0x4')][_0x09c0('0xb')](this[_0x09c0('0xc')][_0x09c0('0xd')](this),this[_0x09c0('0xe')][_0x09c0('0xd')](this),this[_0x09c0('0x9')]);this[_0x09c0('0x4')]['on'](_0x09c0('0xf'),this[_0x09c0('0xe')][_0x09c0('0xd')](this));};Beepall[_0x09c0('0x10')][_0x09c0('0xb')]=function(){this['squeue']['push'](this['handleRun'][_0x09c0('0xd')](this),this[_0x09c0('0xe')][_0x09c0('0xd')](this));};Beepall[_0x09c0('0x10')]['done']=function(_0x2c4440){if(_0x2c4440){setTimeout(this['push']['bind'](this),0x3e8);_0x2c4440[_0x09c0('0x11')]();}};Beepall['prototype'][_0x09c0('0xc')]=function(_0x319c36){var _0x2da257=!![];if(!_['isNil'](this[_0x09c0('0x5')])&&!_[_0x09c0('0x12')](this[_0x09c0('0x5')][_0x09c0('0x13')])&&this[_0x09c0('0x5')][_0x09c0('0x13')][_0x09c0('0x6')]>0x0){for(var _0x5d5391=0x0,_0x1695e8;_0x5d5391<this[_0x09c0('0x5')][_0x09c0('0x13')][_0x09c0('0x6')];_0x5d5391+=0x1){_0x1695e8=this['queue']['Agents'][_0x5d5391]['id'];if(_[_0x09c0('0x12')](this[_0x09c0('0x14')][_0x09c0('0x15')][_0x1695e8])){logger[_0x09c0('0x16')]('[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x09c0('0x4')]['id'],_0x1695e8);}else{if(util[_0x09c0('0x17')](this['squeue']['id'],this[_0x09c0('0x14')][_0x09c0('0x15')][_0x1695e8],this[_0x09c0('0x4')][_0x09c0('0x18')],!![])){_0x2da257=![];util[_0x09c0('0x19')](this[_0x09c0('0x4')]['id'],this[_0x09c0('0x14')][_0x09c0('0x15')][_0x1695e8],_0x09c0('0x1a'));this[_0x09c0('0x14')][_0x09c0('0x15')][_0x1695e8]['busy']=!![];this[_0x09c0('0x14')][_0x09c0('0x15')][_0x1695e8]['busyQueue']=this[_0x09c0('0x5')]['name'];util[_0x09c0('0x1b')](this['notificationId'],this[_0x09c0('0x4')]['id'],this[_0x09c0('0x14')][_0x09c0('0x15')][_0x1695e8],this[_0x09c0('0x5')],this['routing']);}}}if(_0x2da257){this['done'](_0x319c36);}}else{logger[_0x09c0('0x16')](_0x09c0('0x1c'),this[_0x09c0('0x4')]['id']);this['done'](_0x319c36);}};Beepall[_0x09c0('0x10')]['handleTimeout']=function(){if(!_[_0x09c0('0x12')](this[_0x09c0('0x5')])&&!_[_0x09c0('0x12')](this['queue'][_0x09c0('0x13')])){for(var _0x4574f7=0x0,_0xbb7685;_0x4574f7<this[_0x09c0('0x5')][_0x09c0('0x13')][_0x09c0('0x6')];_0x4574f7+=0x1){_0xbb7685=this[_0x09c0('0x5')]['Agents'][_0x4574f7]['id'];if(_[_0x09c0('0x12')](this[_0x09c0('0x14')][_0x09c0('0x15')][_0xbb7685])){logger[_0x09c0('0x16')](_0x09c0('0x1d'),this['squeue']['id'],_0xbb7685);}else{util[_0x09c0('0x19')](this[_0x09c0('0x4')]['id'],this[_0x09c0('0x14')][_0x09c0('0x15')][_0xbb7685],_0x09c0('0x1e'));this['realtime'][_0x09c0('0x15')][_0xbb7685][_0x09c0('0x1f')]=![];this[_0x09c0('0x14')][_0x09c0('0x15')][_0xbb7685][_0x09c0('0x20')]=undefined;util[_0x09c0('0x21')](this[_0x09c0('0x3')],this['squeue']['id'],this[_0x09c0('0x14')][_0x09c0('0x15')][_0xbb7685],this[_0x09c0('0x5')],this[_0x09c0('0x2')]);}}}};function beepall(_0x453c23,_0x4e98f1,_0x5420fd,_0x5c3c09){return new Beepall(_0x453c23,_0x4e98f1,_0x5420fd,_0x5c3c09);}module['exports']=beepall;
\ No newline at end of file
index 1b49e0b..fdca85d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x39c7=['./agent','./rrmemory','./beepall'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x39c7,0x85));var _0x739c=function(_0x5587b1,_0x1b926b){_0x5587b1=_0x5587b1-0x0;var _0x3492ed=_0x39c7[_0x5587b1];return _0x3492ed;};'use strict';module['exports']={'rrmemory':require(_0x739c('0x0')),'beepall':require(_0x739c('0x1')),'agent':require(_0x739c('0x2'))};
\ No newline at end of file
+var _0x7d55=['exports','./rrmemory','./beepall','./agent'];(function(_0x1fddbf,_0x147af8){var _0x324eed=function(_0x4c5303){while(--_0x4c5303){_0x1fddbf['push'](_0x1fddbf['shift']());}};_0x324eed(++_0x147af8);}(_0x7d55,0x1bc));var _0x57d5=function(_0x40a38b,_0x295b89){_0x40a38b=_0x40a38b-0x0;var _0x3c6aa8=_0x7d55[_0x40a38b];return _0x3c6aa8;};'use strict';module[_0x57d5('0x0')]={'rrmemory':require(_0x57d5('0x1')),'beepall':require(_0x57d5('0x2')),'agent':require(_0x57d5('0x3'))};
\ No newline at end of file
index a4ae35b..8e42628 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfe28=['busyQueue','name','isNil','TIMEOUT','busy','hideNotification','exports','lodash','uuid','./util','../../../../../config/logger','routing','notificationId','squeue','realtime','length','floor','atimeout','qtimeout','push','bind','handleRun','module','drained','handleTimeout','prototype','done','agentId','queue','mapAgentsId','info','[%s][QUEUE]\x20try\x20with\x20%s','agents','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','isAgentAvailable','channel','writeLog','RINGING'];(function(_0x2782b6,_0x1a2b7c){var _0x1bea6b=function(_0x3e9a51){while(--_0x3e9a51){_0x2782b6['push'](_0x2782b6['shift']());}};_0x1bea6b(++_0x1a2b7c);}(_0xfe28,0x111));var _0x8fe2=function(_0x5e271b,_0x1bd0c2){_0x5e271b=_0x5e271b-0x0;var _0x136bc7=_0xfe28[_0x5e271b];return _0x136bc7;};'use strict';var rr=require('rr');var _=require(_0x8fe2('0x0'));var uuid=require(_0x8fe2('0x1'));var util=require(_0x8fe2('0x2'));var logger=require(_0x8fe2('0x3'))(_0x8fe2('0x4'));var RRMemory=function(_0x4535f8,_0x4396f7,_0x36342e,_0x4f6a53){this[_0x8fe2('0x5')]=uuid['v4']();this[_0x8fe2('0x6')]=_0x4535f8;this['queue']=_0x4396f7;this[_0x8fe2('0x7')]=_0x36342e;this[_0x8fe2('0x4')]=_0x4f6a53;this[_0x8fe2('0x8')]=Math[_0x8fe2('0x9')](this[_0x8fe2('0x6')]['qtimeout']/this[_0x8fe2('0x6')][_0x8fe2('0xa')]);this['module']=this[_0x8fe2('0x6')][_0x8fe2('0xb')]%this['squeue'][_0x8fe2('0xa')];for(var _0x4cb1a7=0x0;_0x4cb1a7<this[_0x8fe2('0x8')];_0x4cb1a7+=0x1){this[_0x8fe2('0x6')][_0x8fe2('0xc')](this['handleRun'][_0x8fe2('0xd')](this),this['handleTimeout'][_0x8fe2('0xd')](this));}this[_0x8fe2('0x6')][_0x8fe2('0xc')](this[_0x8fe2('0xe')][_0x8fe2('0xd')](this),this['handleTimeout'][_0x8fe2('0xd')](this),this[_0x8fe2('0xf')]);this[_0x8fe2('0x6')]['on'](_0x8fe2('0x10'),this[_0x8fe2('0x11')][_0x8fe2('0xd')](this));};RRMemory['prototype']['push']=function(){this['squeue'][_0x8fe2('0xc')](this[_0x8fe2('0xe')]['bind'](this),this['handleTimeout'][_0x8fe2('0xd')](this));};RRMemory[_0x8fe2('0x12')][_0x8fe2('0x13')]=function(_0x4d5a2b){if(_0x4d5a2b){setTimeout(this[_0x8fe2('0xc')][_0x8fe2('0xd')](this),0xc8);_0x4d5a2b[_0x8fe2('0x13')]();}};RRMemory[_0x8fe2('0x12')][_0x8fe2('0xe')]=function(_0x147e95){this[_0x8fe2('0x14')]=rr(this[_0x8fe2('0x15')][_0x8fe2('0x16')]);logger[_0x8fe2('0x17')](_0x8fe2('0x18'),this[_0x8fe2('0x6')]['id'],this[_0x8fe2('0x14')]);if(_['isNil'](this['realtime'][_0x8fe2('0x19')][this[_0x8fe2('0x14')]])){logger[_0x8fe2('0x17')](_0x8fe2('0x1a'),this[_0x8fe2('0x6')]['id'],this['agentId']);this[_0x8fe2('0x13')](_0x147e95);}else{if(util[_0x8fe2('0x1b')](this[_0x8fe2('0x6')]['id'],this[_0x8fe2('0x7')]['agents'][this[_0x8fe2('0x14')]],this[_0x8fe2('0x6')][_0x8fe2('0x1c')],!![])){util[_0x8fe2('0x1d')](this[_0x8fe2('0x6')]['id'],this[_0x8fe2('0x7')][_0x8fe2('0x19')][this['agentId']],_0x8fe2('0x1e'));this[_0x8fe2('0x7')]['agents'][this['agentId']]['busy']=!![];this[_0x8fe2('0x7')]['agents'][this[_0x8fe2('0x14')]][_0x8fe2('0x1f')]=this[_0x8fe2('0x15')][_0x8fe2('0x20')];util['showNotification'](this['notificationId'],this[_0x8fe2('0x6')]['id'],this[_0x8fe2('0x7')]['agents'][this[_0x8fe2('0x14')]],this[_0x8fe2('0x15')],this['routing']);}else{this['done'](_0x147e95);}}};RRMemory[_0x8fe2('0x12')][_0x8fe2('0x11')]=function(){logger[_0x8fe2('0x17')]('[%s][QUEUE]\x20timeout\x20with\x20%s',this[_0x8fe2('0x6')]['id'],this[_0x8fe2('0x14')]);if(_[_0x8fe2('0x21')](this[_0x8fe2('0x7')][_0x8fe2('0x19')][this['agentId']])){logger[_0x8fe2('0x17')](_0x8fe2('0x1a'),this['squeue']['id'],this[_0x8fe2('0x14')]);}else{util[_0x8fe2('0x1d')](this[_0x8fe2('0x6')]['id'],this[_0x8fe2('0x7')][_0x8fe2('0x19')][this[_0x8fe2('0x14')]],_0x8fe2('0x22'));this[_0x8fe2('0x7')][_0x8fe2('0x19')][this['agentId']][_0x8fe2('0x23')]=![];this[_0x8fe2('0x7')]['agents'][this[_0x8fe2('0x14')]][_0x8fe2('0x1f')]=undefined;util[_0x8fe2('0x24')](this[_0x8fe2('0x5')],this['squeue']['id'],this[_0x8fe2('0x7')][_0x8fe2('0x19')][this[_0x8fe2('0x14')]],this['queue'],this['routing']);}};function rrmemory(_0x5d0676,_0x459330,_0x54a397,_0x2dba66){return new RRMemory(_0x5d0676,_0x459330,_0x54a397,_0x2dba66);}module[_0x8fe2('0x25')]=rrmemory;
\ No newline at end of file
+var _0x64eb=['busy','busyQueue','name','showNotification','[%s][QUEUE]\x20timeout\x20with\x20%s','TIMEOUT','hideNotification','exports','lodash','uuid','../../../../../config/logger','notificationId','queue','realtime','routing','length','floor','squeue','qtimeout','atimeout','push','handleRun','bind','handleTimeout','module','drained','prototype','done','agentId','mapAgentsId','info','[%s][QUEUE]\x20try\x20with\x20%s','isNil','agents','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','isAgentAvailable','writeLog','RINGING'];(function(_0x48a17b,_0x15fe4b){var _0x3170db=function(_0x46bee6){while(--_0x46bee6){_0x48a17b['push'](_0x48a17b['shift']());}};_0x3170db(++_0x15fe4b);}(_0x64eb,0xc6));var _0xb64e=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x64eb[_0x20a584];return _0x4b41a8;};'use strict';var rr=require('rr');var _=require(_0xb64e('0x0'));var uuid=require(_0xb64e('0x1'));var util=require('./util');var logger=require(_0xb64e('0x2'))('routing');var RRMemory=function(_0xf7fe84,_0x3c2307,_0xf49efd,_0x584cf4){this[_0xb64e('0x3')]=uuid['v4']();this['squeue']=_0xf7fe84;this[_0xb64e('0x4')]=_0x3c2307;this[_0xb64e('0x5')]=_0xf49efd;this[_0xb64e('0x6')]=_0x584cf4;this[_0xb64e('0x7')]=Math[_0xb64e('0x8')](this[_0xb64e('0x9')][_0xb64e('0xa')]/this[_0xb64e('0x9')][_0xb64e('0xb')]);this['module']=this['squeue'][_0xb64e('0xa')]%this[_0xb64e('0x9')][_0xb64e('0xb')];for(var _0x467692=0x0;_0x467692<this[_0xb64e('0x7')];_0x467692+=0x1){this[_0xb64e('0x9')][_0xb64e('0xc')](this[_0xb64e('0xd')][_0xb64e('0xe')](this),this[_0xb64e('0xf')][_0xb64e('0xe')](this));}this[_0xb64e('0x9')]['push'](this[_0xb64e('0xd')][_0xb64e('0xe')](this),this[_0xb64e('0xf')][_0xb64e('0xe')](this),this[_0xb64e('0x10')]);this[_0xb64e('0x9')]['on'](_0xb64e('0x11'),this[_0xb64e('0xf')][_0xb64e('0xe')](this));};RRMemory[_0xb64e('0x12')][_0xb64e('0xc')]=function(){this[_0xb64e('0x9')][_0xb64e('0xc')](this[_0xb64e('0xd')][_0xb64e('0xe')](this),this[_0xb64e('0xf')]['bind'](this));};RRMemory[_0xb64e('0x12')][_0xb64e('0x13')]=function(_0x39594f){if(_0x39594f){setTimeout(this[_0xb64e('0xc')]['bind'](this),0xc8);_0x39594f[_0xb64e('0x13')]();}};RRMemory[_0xb64e('0x12')][_0xb64e('0xd')]=function(_0xff7c7){this[_0xb64e('0x14')]=rr(this[_0xb64e('0x4')][_0xb64e('0x15')]);logger[_0xb64e('0x16')](_0xb64e('0x17'),this['squeue']['id'],this[_0xb64e('0x14')]);if(_[_0xb64e('0x18')](this[_0xb64e('0x5')][_0xb64e('0x19')][this[_0xb64e('0x14')]])){logger['info'](_0xb64e('0x1a'),this[_0xb64e('0x9')]['id'],this[_0xb64e('0x14')]);this['done'](_0xff7c7);}else{if(util[_0xb64e('0x1b')](this[_0xb64e('0x9')]['id'],this['realtime'][_0xb64e('0x19')][this['agentId']],this[_0xb64e('0x9')]['channel'],!![])){util[_0xb64e('0x1c')](this[_0xb64e('0x9')]['id'],this[_0xb64e('0x5')][_0xb64e('0x19')][this[_0xb64e('0x14')]],_0xb64e('0x1d'));this[_0xb64e('0x5')][_0xb64e('0x19')][this[_0xb64e('0x14')]][_0xb64e('0x1e')]=!![];this[_0xb64e('0x5')]['agents'][this[_0xb64e('0x14')]][_0xb64e('0x1f')]=this[_0xb64e('0x4')][_0xb64e('0x20')];util[_0xb64e('0x21')](this[_0xb64e('0x3')],this[_0xb64e('0x9')]['id'],this[_0xb64e('0x5')]['agents'][this[_0xb64e('0x14')]],this[_0xb64e('0x4')],this[_0xb64e('0x6')]);}else{this[_0xb64e('0x13')](_0xff7c7);}}};RRMemory[_0xb64e('0x12')][_0xb64e('0xf')]=function(){logger[_0xb64e('0x16')](_0xb64e('0x22'),this[_0xb64e('0x9')]['id'],this['agentId']);if(_[_0xb64e('0x18')](this[_0xb64e('0x5')]['agents'][this[_0xb64e('0x14')]])){logger[_0xb64e('0x16')](_0xb64e('0x1a'),this[_0xb64e('0x9')]['id'],this[_0xb64e('0x14')]);}else{util[_0xb64e('0x1c')](this['squeue']['id'],this[_0xb64e('0x5')][_0xb64e('0x19')][this[_0xb64e('0x14')]],_0xb64e('0x23'));this[_0xb64e('0x5')][_0xb64e('0x19')][this['agentId']][_0xb64e('0x1e')]=![];this['realtime']['agents'][this['agentId']][_0xb64e('0x1f')]=undefined;util[_0xb64e('0x24')](this[_0xb64e('0x3')],this[_0xb64e('0x9')]['id'],this[_0xb64e('0x5')]['agents'][this[_0xb64e('0x14')]],this[_0xb64e('0x4')],this[_0xb64e('0x6')]);}};function rrmemory(_0x84ffb3,_0x3032a3,_0x31dbda,_0x2bb404){return new RRMemory(_0x84ffb3,_0x3032a3,_0x31dbda,_0x2bb404);}module[_0xb64e('0x25')]=rrmemory;
\ No newline at end of file
index c7a9b2a..eee70d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9294=['getMustacheRender','I\x20can\x27t\x20render\x20your\x20template','error','format','[%s][QUEUE]\x20%s','message','notification:%s','save','info','[%s][QUEUE][AGENT:%s][STATUS:%s]','isAgentAvailable','busy','BUSY','Pause','hasOwnProperty','Capacity','toUpperCase','\x20MAXCAPACITY','showNotification','hideNotification','writeLog','util','../utils','../../../../../config/logger','routing','socket.io-emitter','localhost','emit','user:%s','\x20interaction','name','account','notificationSound','notificationShake','body','queue','msg'];(function(_0xb68772,_0x5253ac){var _0x4189bb=function(_0x1b0cf3){while(--_0x1b0cf3){_0xb68772['push'](_0xb68772['shift']());}};_0x4189bb(++_0x5253ac);}(_0x9294,0x187));var _0x4929=function(_0x493b70,_0x168e73){_0x493b70=_0x493b70-0x0;var _0x4c2355=_0x9294[_0x493b70];return _0x4c2355;};'use strict';var util=require(_0x4929('0x0'));var utils=require(_0x4929('0x1'));var Mustache=require('mustache');var logger=require(_0x4929('0x2'))(_0x4929('0x3'));var io=require(_0x4929('0x4'))({'host':_0x4929('0x5'),'port':0x18eb});function emit(_0x371d74,_0x260be2,_0x3cddf3){io['to'](_0x371d74)[_0x4929('0x6')](_0x260be2,_0x3cddf3);}function sendNotification(_0xc452e6,_0x27d698,_0x3d7d76,_0x5fd1b8,_0x1b9246,_0x10a332){io['to'](util['format'](_0x4929('0x7'),_0x5fd1b8['name']))[_0x4929('0x6')]('user:save',_0x5fd1b8);var _0x1df960=_0x10a332||{};var _0x47eb7d=_0x3d7d76['split']('.');var _0x26781f={'uniqueid':_0x27d698,'channel':_0x47eb7d[0x0],'id':_0x47eb7d[0x1],'title':_0x47eb7d[0x0]+_0x4929('0x8'),'interactionId':_0x47eb7d[0x2],'queue':_0x1b9246?_0x1b9246[_0x4929('0x9')]:null,'sound':_0x1df960[_0x4929('0xa')][_0x4929('0xb')],'shake':_0x1df960['account'][_0x4929('0xc')]};try{if(!_0x1df960[_0x4929('0xd')]){_0x1df960[_0x4929('0xd')]={};}if(_0x1b9246){_0x1df960['body']['queue']=_0x1b9246;}else if(_0x1df960[_0x4929('0xd')]['queue']){delete _0x1df960[_0x4929('0xd')][_0x4929('0xe')];}_0x26781f[_0x4929('0xf')]=utils[_0x4929('0x10')](_0x1df960[_0x4929('0xa')]['notificationTemplate'],_0x1df960);}catch(_0x27c3c8){_0x26781f[_0x4929('0xf')]=_0x4929('0x11');logger[_0x4929('0x12')](util[_0x4929('0x13')](_0x4929('0x14'),_0x27d698,_0x27c3c8[_0x4929('0x15')]));}io['to'](util[_0x4929('0x13')](_0x4929('0x7'),_0x5fd1b8[_0x4929('0x9')]))[_0x4929('0x6')](util[_0x4929('0x13')](_0x4929('0x16'),_0xc452e6?_0x4929('0x17'):'remove'),_0x26781f);}function writeLog(_0x215037,_0x35bd71,_0x2fbdd6){return logger[_0x4929('0x18')](util[_0x4929('0x13')](_0x4929('0x19'),_0x215037,_0x35bd71[_0x4929('0x9')],_0x2fbdd6));}exports[_0x4929('0x1a')]=function(_0x1c85e3,_0x3edb71,_0x5268e9,_0x417f02){if(_0x3edb71[_0x4929('0x1b')]){writeLog(_0x1c85e3,_0x3edb71,_0x4929('0x1c'));return![];}if(!_0x3edb71['online']){writeLog(_0x1c85e3,_0x3edb71,'OFFLINE');return![];}if(_0x3edb71[_0x5268e9+_0x4929('0x1d')]){writeLog(_0x1c85e3,_0x3edb71,'PAUSE');return![];}if(_0x417f02&&_0x3edb71[_0x4929('0x1e')](_0x5268e9+_0x4929('0x1f'))&&_0x3edb71[_0x4929('0x1e')](_0x5268e9+'CurrentCapacity')){if(_0x3edb71[_0x5268e9+_0x4929('0x1f')]>0x0&&_0x3edb71[_0x5268e9+'CurrentCapacity']>=_0x3edb71[_0x5268e9+'Capacity']){writeLog(_0x1c85e3,_0x3edb71,_0x5268e9[_0x4929('0x20')]()+_0x4929('0x21'));return![];}}return!![];};exports[_0x4929('0x22')]=function(_0xaa9638,_0x36ed2a,_0x148f97,_0x43e481,_0x14c555){return sendNotification(!![],_0xaa9638,_0x36ed2a,_0x148f97,_0x43e481,_0x14c555);};exports[_0x4929('0x23')]=function(_0x451ee0,_0x28b6cf,_0x56c0d0,_0xfe67db,_0x19c5e6){return sendNotification(![],_0x451ee0,_0x28b6cf,_0x56c0d0,_0xfe67db,_0x19c5e6);};exports[_0x4929('0x24')]=writeLog;
\ No newline at end of file
+var _0x79e0=['socket.io-emitter','localhost','emit','format','user:%s','split','\x20interaction','name','account','notificationSound','body','queue','msg','getMustacheRender','notificationTemplate','I\x20can\x27t\x20render\x20your\x20template','error','[%s][QUEUE]\x20%s','message','save','info','[%s][QUEUE][AGENT:%s][STATUS:%s]','isAgentAvailable','busy','BUSY','OFFLINE','Pause','PAUSE','hasOwnProperty','Capacity','CurrentCapacity','toUpperCase','showNotification','hideNotification','writeLog','util','../utils','mustache','routing'];(function(_0x60ef83,_0x3e9588){var _0x7efe69=function(_0xde92c2){while(--_0xde92c2){_0x60ef83['push'](_0x60ef83['shift']());}};_0x7efe69(++_0x3e9588);}(_0x79e0,0x134));var _0x079e=function(_0x405385,_0x56f573){_0x405385=_0x405385-0x0;var _0x43837b=_0x79e0[_0x405385];return _0x43837b;};'use strict';var util=require(_0x079e('0x0'));var utils=require(_0x079e('0x1'));var Mustache=require(_0x079e('0x2'));var logger=require('../../../../../config/logger')(_0x079e('0x3'));var io=require(_0x079e('0x4'))({'host':_0x079e('0x5'),'port':0x18eb});function emit(_0x5baf7c,_0x4e3ab5,_0x22e7fb){io['to'](_0x5baf7c)[_0x079e('0x6')](_0x4e3ab5,_0x22e7fb);}function sendNotification(_0x45fb18,_0x2189d8,_0x306c3c,_0x1d0565,_0xa5d607,_0x3578ef){io['to'](util[_0x079e('0x7')](_0x079e('0x8'),_0x1d0565['name']))['emit']('user:save',_0x1d0565);var _0x1f71cf=_0x3578ef||{};var _0x3372fc=_0x306c3c[_0x079e('0x9')]('.');var _0x4563b6={'uniqueid':_0x2189d8,'channel':_0x3372fc[0x0],'id':_0x3372fc[0x1],'title':_0x3372fc[0x0]+_0x079e('0xa'),'interactionId':_0x3372fc[0x2],'queue':_0xa5d607?_0xa5d607[_0x079e('0xb')]:null,'sound':_0x1f71cf[_0x079e('0xc')][_0x079e('0xd')],'shake':_0x1f71cf[_0x079e('0xc')]['notificationShake']};try{if(!_0x1f71cf[_0x079e('0xe')]){_0x1f71cf[_0x079e('0xe')]={};}if(_0xa5d607){_0x1f71cf[_0x079e('0xe')]['queue']=_0xa5d607;}else if(_0x1f71cf[_0x079e('0xe')][_0x079e('0xf')]){delete _0x1f71cf[_0x079e('0xe')][_0x079e('0xf')];}_0x4563b6[_0x079e('0x10')]=utils[_0x079e('0x11')](_0x1f71cf['account'][_0x079e('0x12')],_0x1f71cf);}catch(_0x1bf13b){_0x4563b6['msg']=_0x079e('0x13');logger[_0x079e('0x14')](util['format'](_0x079e('0x15'),_0x2189d8,_0x1bf13b[_0x079e('0x16')]));}io['to'](util['format'](_0x079e('0x8'),_0x1d0565[_0x079e('0xb')]))[_0x079e('0x6')](util[_0x079e('0x7')]('notification:%s',_0x45fb18?_0x079e('0x17'):'remove'),_0x4563b6);}function writeLog(_0x370ef1,_0x138643,_0x35b84f){return logger[_0x079e('0x18')](util['format'](_0x079e('0x19'),_0x370ef1,_0x138643['name'],_0x35b84f));}exports[_0x079e('0x1a')]=function(_0x52cd21,_0x22bc1b,_0x163191,_0x54a7b9){if(_0x22bc1b[_0x079e('0x1b')]){writeLog(_0x52cd21,_0x22bc1b,_0x079e('0x1c'));return![];}if(!_0x22bc1b['online']){writeLog(_0x52cd21,_0x22bc1b,_0x079e('0x1d'));return![];}if(_0x22bc1b[_0x163191+_0x079e('0x1e')]){writeLog(_0x52cd21,_0x22bc1b,_0x079e('0x1f'));return![];}if(_0x54a7b9&&_0x22bc1b[_0x079e('0x20')](_0x163191+_0x079e('0x21'))&&_0x22bc1b['hasOwnProperty'](_0x163191+'CurrentCapacity')){if(_0x22bc1b[_0x163191+_0x079e('0x21')]>0x0&&_0x22bc1b[_0x163191+_0x079e('0x22')]>=_0x22bc1b[_0x163191+_0x079e('0x21')]){writeLog(_0x52cd21,_0x22bc1b,_0x163191[_0x079e('0x23')]()+'\x20MAXCAPACITY');return![];}}return!![];};exports[_0x079e('0x24')]=function(_0x2bbf65,_0x2d6227,_0x5f5ad0,_0x594232,_0x1bcb05){return sendNotification(!![],_0x2bbf65,_0x2d6227,_0x5f5ad0,_0x594232,_0x1bcb05);};exports[_0x079e('0x25')]=function(_0x390945,_0x330b55,_0x479bed,_0xfa9a14,_0x2116eb){return sendNotification(![],_0x390945,_0x330b55,_0x479bed,_0xfa9a14,_0x2116eb);};exports[_0x079e('0x26')]=writeLog;
\ No newline at end of file
index 2d3307c..5ceea43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1903=['getMustacheRender','[%s][SYSTEM]\x20commnad:\x20%s','exec','trim','replace','isEmpty','[%s][SYSTEM]\x20no\x20variable','body','[%s][SYSTEM]\x20set\x20variable\x20%s:\x20%s','stringify','validate','shelljs','./utils','../../../../config/logger','routing','string','[%s][SYSTEM]\x20%s','map','message','join','info','[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next','next'];(function(_0x56916d,_0x37b935){var _0x2b7f1f=function(_0x206eb1){while(--_0x206eb1){_0x56916d['push'](_0x56916d['shift']());}};_0x2b7f1f(++_0x37b935);}(_0x1903,0x1bf));var _0x3190=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x1903[_0x3dd15e];return _0x231fd0;};'use strict';var schema=require(_0x3190('0x0'));var sh=require(_0x3190('0x1'));var _=require('lodash');var utils=require(_0x3190('0x2'));var logger=require(_0x3190('0x3'))(_0x3190('0x4'));var system=schema({'command':{'type':_0x3190('0x5'),'required':!![],'message':'command\x20is\x20a\x20string\x20and\x20it\x20is\x20required'}});exports['consequence']=function(_0x395bd8,_0xd3a3de){return function(_0x362a22){try{var _0xd8c9fb={'command':_0xd3a3de[0x0]};var _0x411150=system[_0x3190('0x0')](_0xd8c9fb,{'typecast':!![]});if(_0x411150['length']){logger['error'](_0x3190('0x6'),_0x395bd8,_[_0x3190('0x7')](_0x411150,_0x3190('0x8'))[_0x3190('0x9')](',\x20'));logger[_0x3190('0xa')](_0x3190('0xb'),_0x395bd8);_0x362a22[_0x3190('0xc')]();}else{var _0x423df0=this;var _0x43dceb=utils[_0x3190('0xd')](_0xd3a3de[0x0],this);logger[_0x3190('0xa')](_0x3190('0xe'),_0x395bd8,_0x43dceb);sh[_0x3190('0xf')](_[_0x3190('0x10')](_0x43dceb),function(_0x136ce0,_0x19fe1d){logger['info']('[%s][SYSTEM]\x20result\x20code:\x20%s',_0x395bd8,_0x136ce0);if(_0x136ce0==0x0){var _0x133ab9=_0x19fe1d[_0x3190('0x11')](/(\r\n|\n|\r)/gm,'');if(_['isNil'](_0xd3a3de[0x1])||_[_0x3190('0x12')](_0xd3a3de[0x1])){logger[_0x3190('0xa')](_0x3190('0x13'),_0x395bd8);_0x423df0[_0x3190('0x14')][_0xd3a3de[0x1]]=_0x133ab9;}else{logger[_0x3190('0xa')](_0x3190('0x15'),_0x395bd8,_0xd3a3de[0x1],_0x133ab9);_0x423df0[_0x3190('0x14')][_0xd3a3de[0x1]]=_0x133ab9;}}_0x362a22[_0x3190('0xc')]();});}}catch(_0x5021b2){logger['error'](_0x3190('0x6'),_0x395bd8,_['isObject'](_0x5021b2)?JSON[_0x3190('0x16')](_0x5021b2):_0x5021b2);logger['info'](_0x3190('0xb'),_0x395bd8);_0x362a22[_0x3190('0xc')]();}};};
\ No newline at end of file
+var _0x4004=['body','[%s][SYSTEM]\x20set\x20variable\x20%s:\x20%s','next','error','isObject','stringify','shelljs','./utils','../../../../config/logger','routing','string','command\x20is\x20a\x20string\x20and\x20it\x20is\x20required','[%s][SYSTEM]\x20%s','map','message','join','[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next','getMustacheRender','info','[%s][SYSTEM]\x20commnad:\x20%s','exec','trim','[%s][SYSTEM]\x20result\x20code:\x20%s','isNil','isEmpty','[%s][SYSTEM]\x20no\x20variable'];(function(_0x1035c1,_0x2d8583){var _0x308d67=function(_0x58ddb6){while(--_0x58ddb6){_0x1035c1['push'](_0x1035c1['shift']());}};_0x308d67(++_0x2d8583);}(_0x4004,0x13e));var _0x4400=function(_0x1fef34,_0x457d7f){_0x1fef34=_0x1fef34-0x0;var _0x11063b=_0x4004[_0x1fef34];return _0x11063b;};'use strict';var schema=require('validate');var sh=require(_0x4400('0x0'));var _=require('lodash');var utils=require(_0x4400('0x1'));var logger=require(_0x4400('0x2'))(_0x4400('0x3'));var system=schema({'command':{'type':_0x4400('0x4'),'required':!![],'message':_0x4400('0x5')}});exports['consequence']=function(_0x5824ff,_0x367c83){return function(_0x346536){try{var _0x51adb3={'command':_0x367c83[0x0]};var _0x59b7b3=system['validate'](_0x51adb3,{'typecast':!![]});if(_0x59b7b3['length']){logger['error'](_0x4400('0x6'),_0x5824ff,_[_0x4400('0x7')](_0x59b7b3,_0x4400('0x8'))[_0x4400('0x9')](',\x20'));logger['info'](_0x4400('0xa'),_0x5824ff);_0x346536['next']();}else{var _0x4c768a=this;var _0x5272ca=utils[_0x4400('0xb')](_0x367c83[0x0],this);logger[_0x4400('0xc')](_0x4400('0xd'),_0x5824ff,_0x5272ca);sh[_0x4400('0xe')](_[_0x4400('0xf')](_0x5272ca),function(_0x47a7d8,_0x5635b4){logger[_0x4400('0xc')](_0x4400('0x10'),_0x5824ff,_0x47a7d8);if(_0x47a7d8==0x0){var _0x4606fe=_0x5635b4['replace'](/(\r\n|\n|\r)/gm,'');if(_[_0x4400('0x11')](_0x367c83[0x1])||_[_0x4400('0x12')](_0x367c83[0x1])){logger['info'](_0x4400('0x13'),_0x5824ff);_0x4c768a[_0x4400('0x14')][_0x367c83[0x1]]=_0x4606fe;}else{logger['info'](_0x4400('0x15'),_0x5824ff,_0x367c83[0x1],_0x4606fe);_0x4c768a[_0x4400('0x14')][_0x367c83[0x1]]=_0x4606fe;}}_0x346536[_0x4400('0x16')]();});}}catch(_0x91d376){logger[_0x4400('0x17')](_0x4400('0x6'),_0x5824ff,_[_0x4400('0x18')](_0x91d376)?JSON[_0x4400('0x19')](_0x91d376):_0x91d376);logger[_0x4400('0xc')](_0x4400('0xa'),_0x5824ff);_0x346536[_0x4400('0x16')]();}};};
\ No newline at end of file
index 60d8fce..3a504a3 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(_0x2d92bd,_0x416726){var _0x51a00f=function(_0x12f323){while(--_0x12f323){_0x2d92bd['push'](_0x2d92bd['shift']());}};_0x51a00f(++_0x416726);}(_0x9957,0x93));var _0x7995=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x9957[_0x2dafbe];return _0x58a45a;};'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(_0x38bbd2,_0x709b0a){var _0x32c72c=function(_0x1db065){while(--_0x1db065){_0x38bbd2['push'](_0x38bbd2['shift']());}};_0x32c72c(++_0x709b0a);}(_0x9957,0x93));var _0x7995=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x9957[_0x19e35c];return _0x3e1fe8;};'use strict';var schema=require(_0x7995('0x0'));var _=require(_0x7995('0x1'));var rpc={'chatInteraction':require(_0x7995('0x2')),'openchannelInteraction':require(_0x7995('0x3')),'smsInteraction':require('../../rpc/smsInteraction'),'mailInteraction':require(_0x7995('0x4')),'faxInteraction':require(_0x7995('0x5'))};var logger=require(_0x7995('0x6'))(_0x7995('0x7'));var tag=schema({'tag':{'type':'number','required':!![],'message':_0x7995('0x8')}});exports[_0x7995('0x9')]=function(_0x137b6b,_0x219534,_0xbda126,_0x326741){return function(_0x4996ca){try{var _0x465276={'tag':_0x219534[0x0]};var _0x1cad37=tag['validate'](_0x465276,{'typecast':!![]});if(_0x1cad37[_0x7995('0xa')]){logger[_0x7995('0xb')](_0x7995('0xc'),_0x137b6b,_[_0x7995('0xd')](_0x1cad37,_0x7995('0xe'))[_0x7995('0xf')](',\x20'));logger[_0x7995('0x10')]('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x137b6b);_0x4996ca[_0x7995('0x11')]();}else{var _0x41c652={'ids':[_0x219534[0x0]]};if(rpc[_0x326741['channel']+_0x7995('0x12')]){rpc[_0x326741[_0x7995('0x13')]+_0x7995('0x12')][_0x7995('0x14')](_0x326741[_0x7995('0x15')]['id'],_0x41c652)[_0x7995('0x16')](function(_0x2bbe7a){logger['info']('[%s][TAG]\x20tag\x20\x22%s\x22\x20added\x20to\x20%s\x20interaction\x20%s',_0x137b6b,_0x219534[0x1],_0x326741[_0x7995('0x13')],_0x326741[_0x7995('0x15')]['id']);})[_0x7995('0x17')](function(_0x321ae8){logger[_0x7995('0xb')](_0x7995('0xc'),_0x137b6b,JSON[_0x7995('0x18')](_0x321ae8));logger[_0x7995('0x10')]('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x137b6b);})[_0x7995('0x19')](function(){_0x4996ca['next']();});}}}catch(_0x2f832e){logger[_0x7995('0xb')](_0x7995('0xc'),_0x137b6b,_[_0x7995('0x1a')](_0x2f832e)?JSON[_0x7995('0x18')](_0x2f832e):_0x2f832e);logger[_0x7995('0x10')]('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x137b6b);_0x4996ca['next']();}};};
\ No newline at end of file
index a6df2cc..3bcf83e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd04b=['contact','message','account','interaction','list','mustache','lodash','exports','merge','body'];(function(_0x209041,_0x3437ea){var _0x55116d=function(_0x7ab130){while(--_0x7ab130){_0x209041['push'](_0x209041['shift']());}};_0x55116d(++_0x3437ea);}(_0xd04b,0x145));var _0xbd04=function(_0x50c3e1,_0x1a7516){_0x50c3e1=_0x50c3e1-0x0;var _0x55da50=_0xd04b[_0x50c3e1];return _0x55da50;};'use strict';var Mustache=require(_0xbd04('0x0'));var _=require(_0xbd04('0x1'));module[_0xbd04('0x2')]={'getMustacheRender':function(_0x5186f0,_0x124dc9){return Mustache['render'](_0x5186f0,_[_0xbd04('0x3')](_0x124dc9[_0xbd04('0x4')],{'contact':_0x124dc9[_0xbd04('0x5')],'message':_0x124dc9[_0xbd04('0x6')],'account':_0x124dc9[_0xbd04('0x7')],'interaction':_0x124dc9[_0xbd04('0x8')],'list':_0x124dc9[_0xbd04('0x9')]}))||'';}};
\ No newline at end of file
+var _0x61a5=['mustache','exports','render','merge','contact','message','interaction','list'];(function(_0x15a13f,_0x5c9d9c){var _0x39c662=function(_0x48393e){while(--_0x48393e){_0x15a13f['push'](_0x15a13f['shift']());}};_0x39c662(++_0x5c9d9c);}(_0x61a5,0xf0));var _0x561a=function(_0x17b6e3,_0x4522ed){_0x17b6e3=_0x17b6e3-0x0;var _0x3906f3=_0x61a5[_0x17b6e3];return _0x3906f3;};'use strict';var Mustache=require(_0x561a('0x0'));var _=require('lodash');module[_0x561a('0x1')]={'getMustacheRender':function(_0x28892d,_0xc164c0){return Mustache[_0x561a('0x2')](_0x28892d,_[_0x561a('0x3')](_0xc164c0['body'],{'contact':_0xc164c0[_0x561a('0x4')],'message':_0xc164c0[_0x561a('0x5')],'account':_0xc164c0['account'],'interaction':_0xc164c0[_0x561a('0x6')],'list':_0xc164c0[_0x561a('0x7')]}))||'';}};
\ No newline at end of file
index 84ccb9b..594d1cc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa258=['openchannelQueues','smsQueues','faxQueues','chatQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','faxQueuesWaitingInteractions','http','log','RPC\x20listening\x20on\x20port:','lodash','path','jayson/promise','uuid','../../../config/logger','routing','../rpc/openchannelQueueReport','../rpc/smsQueueReport','../lib/rule-engine','format','isNil','IntervalId','Intervals','map','interval','listen','channel','message','applications','length','app','.js','autoreply','split','push','slice','join','dialogflow','appdata','tag','TagId','%s:%s:%s','intervals','consequence','priority','info','on\x20interval','\x20|\x20','error','Please\x20create\x20a\x20new\x20file\x20under','execute','Applications\x20executed','stringify','matchPath','rules','routing\x20is\x20empty','interaction','update','UserId','catch','error\x20update\x20queue\x20report','message\x20is\x20empty','agent','agents','busyQueue','capacity','CurrentCapacity','updateRealtime','agent\x20not\x20found','values','chatQueues','available','paused','mailQueues','hasOwnProperty','loggedIn','name','waiting'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xa258,0xa3));var _0x8a25=function(_0x34158b,_0x6e54c0){_0x34158b=_0x34158b-0x0;var _0xf70991=_0xa258[_0x34158b];return _0xf70991;};'use strict';var _=require(_0x8a25('0x0'));var util=require('util');var path=require(_0x8a25('0x1'));var fs=require('fs');var jayson=require(_0x8a25('0x2'));var BPromise=require('bluebird');var uuid=require(_0x8a25('0x3'));var config=require('../../../config/environment');var logger=require(_0x8a25('0x4'))(_0x8a25('0x5'));var rpc={'openchannelQueueReport':require('../rpc/openchannelQueueReport')};var rpc={'openchannelQueueReport':require(_0x8a25('0x6')),'mailQueueReport':require('../rpc/mailQueueReport'),'chatQueueReport':require('../rpc/chatQueueReport'),'smsQueueReport':require(_0x8a25('0x7')),'faxQueueReport':require('../rpc/faxQueueReport')};var RuleEngine=require(_0x8a25('0x8'));function getId(_0x1c3300,_0xa45eb2,_0x583d2d){return util[_0x8a25('0x9')]('%s.%s.%s',_0x1c3300,_0xa45eb2||0x0,_0x583d2d||0x0);}function getIntervals(_0x32c645,_0x33971d){var _0x3d5d34=[];if(!_[_0x8a25('0xa')](_0x33971d[_0x8a25('0xb')])&&!_[_0x8a25('0xa')](_0x32c645[_0x33971d[_0x8a25('0xb')]])&&!_['isNil'](_0x32c645[_0x33971d['IntervalId']][_0x8a25('0xc')])){_0x3d5d34=_[_0x8a25('0xd')](_0x32c645[_0x33971d[_0x8a25('0xb')]][_0x8a25('0xc')],_0x8a25('0xe'));}else if(!_[_0x8a25('0xa')](_0x33971d[_0x8a25('0xe')])){_0x3d5d34=[_0x33971d['interval']];}return _0x3d5d34;}exports[_0x8a25('0xf')]=function(_0x564ffb){_0x564ffb['rules']={};return new BPromise(function(_0x186943,_0x30db50){var _0x3ecc4a={'Start':function(_0xf6513c){var _0x4db5c8=this;return new Promise(function(_0x433967,_0x5cefb9){if(_0xf6513c){try{var _0x5c6be5=[];var _0x595455=getId(_0xf6513c[_0x8a25('0x10')],_0xf6513c[_0x8a25('0x11')]?_0xf6513c[_0x8a25('0x11')]['id']:0x0,_0xf6513c['interaction']?_0xf6513c['interaction']['id']:0x0);if(_0xf6513c[_0x8a25('0x12')]&&_['isArray'](_0xf6513c[_0x8a25('0x12')])&&_0xf6513c[_0x8a25('0x12')][_0x8a25('0x13')]){for(var _0x1aff80=0x0;_0x1aff80<_0xf6513c[_0x8a25('0x12')][_0x8a25('0x13')];_0x1aff80+=0x1){var _0x5f5acc=_0xf6513c[_0x8a25('0x12')][_0x1aff80];if(fs['existsSync'](path['join'](__dirname,_0x8a25('0x12'),_0x5f5acc[_0x8a25('0x14')]+_0x8a25('0x15')))){var _0x532d1a=[];switch(_0x5f5acc[_0x8a25('0x14')]['toLowerCase']()){case _0x8a25('0x16'):var _0x1594db=_0x5f5acc['appdata'][_0x8a25('0x17')](',');_0x532d1a['push'](_0x1594db[0x0]);_0x532d1a[_0x8a25('0x18')](_0x1594db[_0x8a25('0x19')](0x1,_0x1594db[_0x8a25('0x13')])[_0x8a25('0x1a')](','));break;case _0x8a25('0x1b'):var _0x1594db=_0x5f5acc[_0x8a25('0x1c')][_0x8a25('0x17')](',');_0x532d1a[_0x8a25('0x18')](_0x1594db[0x0]);_0x532d1a[_0x8a25('0x18')](_0x1594db[0x1]);_0x532d1a[_0x8a25('0x18')](_0x1594db[_0x8a25('0x19')](0x2,_0x1594db[_0x8a25('0x13')])[_0x8a25('0x1a')](','));break;case _0x8a25('0x11'):_0x532d1a['push'](_0x5f5acc[_0x8a25('0x1c')]);break;case _0x8a25('0x1d'):_0x532d1a[_0x8a25('0x18')](_0x5f5acc[_0x8a25('0x1e')]);_0x532d1a['push'](_0x5f5acc['appdata']);break;default:_0x532d1a=_[_0x8a25('0xa')](_0x5f5acc[_0x8a25('0x1c')])?[]:_0x5f5acc[_0x8a25('0x1c')]['split'](',');}var _0x2cfe71={'id':util[_0x8a25('0x9')](_0x8a25('0x1f'),_0x595455,_0x5f5acc['id'],_0x5f5acc[_0x8a25('0x14')]),'condition':require('./interval')['condition'](_0x595455,getIntervals(_0x564ffb[_0x8a25('0x20')],_0x5f5acc),_0x564ffb),'consequence':require('./applications/'+_0x5f5acc[_0x8a25('0x14')])[_0x8a25('0x21')](_0x595455,_0x532d1a,_0x564ffb,_0xf6513c),'p':_0x5f5acc[_0x8a25('0x22')]||0x0};logger[_0x8a25('0x23')]('Push\x20new\x20rule',_0x2cfe71['id'],_0x8a25('0x24'),getIntervals(_0x564ffb[_0x8a25('0x20')],_0x5f5acc)['join'](_0x8a25('0x25')));_0x5c6be5[_0x8a25('0x18')](_0x2cfe71);}else{logger[_0x8a25('0x26')](_0x8a25('0x27'),path['join'](__dirname,'applications',_0x5f5acc[_0x8a25('0x14')]+_0x8a25('0x15')));}}_0x564ffb['rules'][_0x595455]=new RuleEngine(_0x5c6be5);_0x564ffb['rules'][_0x595455][_0x8a25('0x28')](_0xf6513c,function(_0x32d23a){logger[_0x8a25('0x23')](_0x8a25('0x29'),JSON[_0x8a25('0x2a')](_0x32d23a[_0x8a25('0x2b')]));if(_0x564ffb[_0x8a25('0x2c')][_0x595455]){delete _0x564ffb[_0x8a25('0x2c')][_0x595455];}});return _0x433967({'code':0xc8,'message':_0xf6513c});}else{logger['info']('No\x20applications\x20to\x20execute');return _0x433967({'code':0xc8,'message':_0xf6513c});}}catch(_0x36b575){logger[_0x8a25('0x26')](JSON[_0x8a25('0x2a')](_0x36b575));return _0x5cefb9(_0x4db5c8[_0x8a25('0x26')](0x1f4,_0x36b575));}}return _0x5cefb9(_0x8a25('0x2d'));});},'AcceptMessage':function(_0x1b418d){var _0x4ea868=this;return new Promise(function(_0x2521d6,_0x2e7ffb){if(_0x1b418d[_0x8a25('0x11')]&&_0x1b418d[_0x8a25('0x11')]['id']){try{var _0x5a9df9=getId(_0x1b418d[_0x8a25('0x10')],_0x1b418d[_0x8a25('0x11')]?_0x1b418d['message']['id']:0x0,_0x1b418d[_0x8a25('0x2e')]?_0x1b418d[_0x8a25('0x2e')]['id']:0x0);if(_0x564ffb[_0x8a25('0x2c')][_0x5a9df9]){delete _0x564ffb[_0x8a25('0x2c')][_0x5a9df9];if(rpc[_0x1b418d[_0x8a25('0x10')]+'QueueReport']){rpc[_0x1b418d[_0x8a25('0x10')]+'QueueReport'][_0x8a25('0x2f')](_0x5a9df9,{'UserId':_0x1b418d[_0x8a25('0x11')][_0x8a25('0x30')]})[_0x8a25('0x31')](function(_0x201848){logger[_0x8a25('0x26')](_0x8a25('0x32'));});}}return _0x2521d6({'code':0xc8,'message':_0x1b418d});}catch(_0x31fc3a){logger[_0x8a25('0x26')](JSON[_0x8a25('0x2a')](_0x31fc3a));return _0x2e7ffb(_0x4ea868['error'](0x1f4,_0x31fc3a));}}logger[_0x8a25('0x26')](_0x8a25('0x33'));return _0x2e7ffb(_0x4ea868[_0x8a25('0x26')](0x1f4,_0x8a25('0x33')));});},'RejectMessage':function(_0x2ee7d0){var _0x280a07=this;return new Promise(function(_0x3e5b05,_0xbe3a8a){if(_0x2ee7d0[_0x8a25('0x34')]&&_0x2ee7d0[_0x8a25('0x34')]['id']){try{if(_0x564ffb[_0x8a25('0x35')][_0x2ee7d0[_0x8a25('0x34')]['id']]){_0x564ffb[_0x8a25('0x35')][_0x2ee7d0['agent']['id']]['busy']=![];_0x564ffb[_0x8a25('0x35')][_0x2ee7d0[_0x8a25('0x34')]['id']][_0x8a25('0x36')]=undefined;}return _0x3e5b05({'code':0xc8,'message':_0x2ee7d0});}catch(_0x29f136){logger['error'](JSON[_0x8a25('0x2a')](_0x29f136));return _0xbe3a8a(_0x280a07[_0x8a25('0x26')](0x1f4,_0x29f136));}}logger['error'](_0x8a25('0x33'));return _0xbe3a8a(_0x280a07[_0x8a25('0x26')](0x1f4,_0x8a25('0x33')));});},'AbandonInteraction':function(_0x2b9864){var _0x24b45e=this;return new Promise(function(_0x5cc9b0,_0x334d93){if(_0x2b9864[_0x8a25('0x10')]&&_0x2b9864[_0x8a25('0x2e')]&&_0x2b9864[_0x8a25('0x2e')]['id']){try{var _0x33be98=getId(_0x2b9864[_0x8a25('0x10')],_0x2b9864[_0x8a25('0x11')]?_0x2b9864['message']['id']:0x0,_0x2b9864['interaction']?_0x2b9864[_0x8a25('0x2e')]['id']:0x0);if(_0x564ffb[_0x8a25('0x2c')][_0x33be98]){delete _0x564ffb['rules'][_0x33be98];}return _0x5cc9b0({'code':0xc8,'message':_0x2b9864});}catch(_0x56906a){logger[_0x8a25('0x26')](JSON['stringify'](_0x56906a));return _0x334d93(_0x24b45e[_0x8a25('0x26')](0x1f4,_0x56906a));}}logger['error'](_0x8a25('0x33'));return _0x334d93(_0x24b45e['error'](0x1f4,'message\x20is\x20empty'));});},'AgentCapacity':function(_0x22a919){var _0x51d4aa=this;return new Promise(function(_0x2e4a25,_0x24b2fe){if(_0x564ffb[_0x8a25('0x35')]['hasOwnProperty'](_0x22a919['id'])){for(var _0x14bea2 in _0x22a919[_0x8a25('0x37')]){if(_0x22a919[_0x8a25('0x37')]['hasOwnProperty'](_0x14bea2)){if(_0x564ffb[_0x8a25('0x35')][_0x22a919['id']]['hasOwnProperty'](_0x14bea2+_0x8a25('0x38'))){_0x564ffb[_0x8a25('0x35')][_0x22a919['id']][_0x14bea2+_0x8a25('0x38')]=parseInt(_0x22a919[_0x8a25('0x37')][_0x14bea2],0xa);_0x564ffb[_0x8a25('0x35')][_0x22a919['id']][_0x8a25('0x39')]();}}}return _0x2e4a25({'code':0xc8,'message':_0x564ffb['agents'][_0x22a919['id']]});}else{return _0x24b2fe(_0x51d4aa[_0x8a25('0x26')](0x1f4,_0x8a25('0x3a')));}});},'Agents':function(_0x5c9058){return new Promise(function(_0x44418d,_0x2b546e){var _0x2cecf2=_[_0x8a25('0x3b')](_0x564ffb[_0x8a25('0x35')]);_0x44418d({'count':_0x2cecf2['length'],'rows':_0x2cecf2});});},'ChatQueues':function(_0x234c05){return new Promise(function(_0x31fd49,_0x144561){var _0x3d8028=[];for(var _0x2214cf in _0x564ffb[_0x8a25('0x3c')]){if(_0x564ffb[_0x8a25('0x3c')]['hasOwnProperty'](_0x2214cf)){var _0x557b97=_0x564ffb[_0x8a25('0x3c')][_0x2214cf];var _0x1018ef={'id':_0x557b97['id'],'available':_0x557b97[_0x8a25('0x3d')],'loggedIn':_0x557b97['loggedIn'],'name':_0x557b97['name'],'paused':_0x557b97[_0x8a25('0x3e')],'waiting':_0x557b97['waiting']};_0x3d8028['push'](_0x1018ef);}}_0x31fd49({'count':_0x3d8028[_0x8a25('0x13')],'rows':_0x3d8028});});},'MailQueues':function(_0x486e38){return new Promise(function(_0x3a0ef4,_0xa47d0c){var _0x30bb35=[];for(var _0x432e8c in _0x564ffb[_0x8a25('0x3f')]){if(_0x564ffb[_0x8a25('0x3f')][_0x8a25('0x40')](_0x432e8c)){var _0x1a6bfe=_0x564ffb[_0x8a25('0x3f')][_0x432e8c];var _0x181708={'id':_0x1a6bfe['id'],'available':_0x1a6bfe[_0x8a25('0x3d')],'loggedIn':_0x1a6bfe[_0x8a25('0x41')],'name':_0x1a6bfe[_0x8a25('0x42')],'paused':_0x1a6bfe[_0x8a25('0x3e')],'waiting':_0x1a6bfe[_0x8a25('0x43')]};_0x30bb35[_0x8a25('0x18')](_0x181708);}}_0x3a0ef4({'count':_0x30bb35['length'],'rows':_0x30bb35});});},'OpenchannelQueues':function(_0x5560c1){return new Promise(function(_0x42e9e3,_0x2e4797){var _0x30521a=[];for(var _0x233930 in _0x564ffb['openchannelQueues']){if(_0x564ffb[_0x8a25('0x44')][_0x8a25('0x40')](_0x233930)){var _0x481083=_0x564ffb[_0x8a25('0x44')][_0x233930];var _0x11adc0={'id':_0x481083['id'],'available':_0x481083[_0x8a25('0x3d')],'loggedIn':_0x481083[_0x8a25('0x41')],'name':_0x481083[_0x8a25('0x42')],'paused':_0x481083[_0x8a25('0x3e')],'waiting':_0x481083['waiting']};_0x30521a[_0x8a25('0x18')](_0x11adc0);}}_0x42e9e3({'count':_0x30521a['length'],'rows':_0x30521a});});},'SmsQueues':function(_0x337ca7){return new Promise(function(_0x5d37e0,_0x57aaec){var _0x297b40=[];for(var _0x1c3a9b in _0x564ffb[_0x8a25('0x45')]){if(_0x564ffb[_0x8a25('0x45')][_0x8a25('0x40')](_0x1c3a9b)){var _0x23c2e9=_0x564ffb[_0x8a25('0x45')][_0x1c3a9b];var _0x46b2a2={'id':_0x23c2e9['id'],'available':_0x23c2e9[_0x8a25('0x3d')],'loggedIn':_0x23c2e9[_0x8a25('0x41')],'name':_0x23c2e9['name'],'paused':_0x23c2e9[_0x8a25('0x3e')],'waiting':_0x23c2e9[_0x8a25('0x43')]};_0x297b40['push'](_0x46b2a2);}}_0x5d37e0({'count':_0x297b40['length'],'rows':_0x297b40});});},'FaxQueues':function(_0x5751d6){return new Promise(function(_0x40ac0f,_0x33d451){var _0x487e59=[];for(var _0x3ff4fe in _0x564ffb[_0x8a25('0x46')]){if(_0x564ffb[_0x8a25('0x46')][_0x8a25('0x40')](_0x3ff4fe)){var _0x507aa1=_0x564ffb[_0x8a25('0x46')][_0x3ff4fe];var _0x42e0c2={'id':_0x507aa1['id'],'available':_0x507aa1[_0x8a25('0x3d')],'loggedIn':_0x507aa1['loggedIn'],'name':_0x507aa1['name'],'paused':_0x507aa1[_0x8a25('0x3e')],'waiting':_0x507aa1[_0x8a25('0x43')]};_0x487e59[_0x8a25('0x18')](_0x42e0c2);}}_0x40ac0f({'count':_0x487e59[_0x8a25('0x13')],'rows':_0x487e59});});},'ChatQueuesWaitingInteractions':function(_0x3ec6ca){return new Promise(function(_0x429fe8,_0x5a3878){var _0x2552ea=_[_0x8a25('0x3b')](_0x564ffb[_0x8a25('0x47')]);_0x429fe8({'count':_0x2552ea[_0x8a25('0x13')],'rows':_0x2552ea});});},'MailQueuesWaitingInteractions':function(_0x10a6a8){return new Promise(function(_0xc6b43f,_0x2f9441){var _0x131c60=_['values'](_0x564ffb['mailQueuesWaitingInteractions']);_0xc6b43f({'count':_0x131c60['length'],'rows':_0x131c60});});},'OpenchannelQueuesWaitingInteractions':function(_0x48940c){return new Promise(function(_0x48eaf2,_0x3e7f95){var _0x232ef9=_[_0x8a25('0x3b')](_0x564ffb[_0x8a25('0x48')]);_0x48eaf2({'count':_0x232ef9['length'],'rows':_0x232ef9});});},'SmsQueuesWaitingInteractions':function(_0x264efe){return new Promise(function(_0x5421b3,_0x4b9353){var _0x5e0748=_[_0x8a25('0x3b')](_0x564ffb['smsQueuesWaitingInteractions']);_0x5421b3({'count':_0x5e0748[_0x8a25('0x13')],'rows':_0x5e0748});});},'FaxQueuesWaitingInteractions':function(_0x571a88){return new Promise(function(_0x104339,_0x3b4e21){var _0x2f388e=_[_0x8a25('0x3b')](_0x564ffb[_0x8a25('0x49')]);_0x104339({'count':_0x2f388e['length'],'rows':_0x2f388e});});}};var _0x33903d=jayson['server'](_0x3ecc4a)[_0x8a25('0x4a')]();_0x33903d['on'](_0x8a25('0x26'),function(_0x4aa8fd){logger[_0x8a25('0x26')](JSON[_0x8a25('0x2a')](_0x4aa8fd));return _0x30db50(_0x4aa8fd);});_0x33903d[_0x8a25('0xf')](0x232c,'127.0.0.1',function(){console[_0x8a25('0x4b')]('Routing\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!',0x232c);return _0x186943(_0x8a25('0x4c')+0x232c);});});};
\ No newline at end of file
+var _0xc072=['smsQueues','faxQueues','mailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','http','listen','127.0.0.1','Routing\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','lodash','util','path','jayson/promise','bluebird','uuid','../../../config/logger','routing','../rpc/openchannelQueueReport','../rpc/mailQueueReport','../rpc/smsQueueReport','../rpc/faxQueueReport','../lib/rule-engine','%s.%s.%s','isNil','IntervalId','Intervals','map','interval','rules','channel','message','interaction','applications','isArray','length','join','app','.js','toLowerCase','autoreply','appdata','split','push','slice','dialogflow','tag','TagId','format','condition','./applications/','priority','info','on\x20interval','intervals','error','Please\x20create\x20a\x20new\x20file\x20under','execute','Applications\x20executed','matchPath','No\x20applications\x20to\x20execute','stringify','routing\x20is\x20empty','QueueReport','update','UserId','catch','error\x20update\x20queue\x20report','agent','agents','busy','busyQueue','message\x20is\x20empty','capacity','hasOwnProperty','CurrentCapacity','agent\x20not\x20found','values','chatQueues','loggedIn','paused','waiting','mailQueues','available','name','openchannelQueues'];(function(_0x37ac14,_0xe47282){var _0x343602=function(_0x7e45d4){while(--_0x7e45d4){_0x37ac14['push'](_0x37ac14['shift']());}};_0x343602(++_0xe47282);}(_0xc072,0x1be));var _0x2c07=function(_0x1c548a,_0x585f47){_0x1c548a=_0x1c548a-0x0;var _0x440cb5=_0xc072[_0x1c548a];return _0x440cb5;};'use strict';var _=require(_0x2c07('0x0'));var util=require(_0x2c07('0x1'));var path=require(_0x2c07('0x2'));var fs=require('fs');var jayson=require(_0x2c07('0x3'));var BPromise=require(_0x2c07('0x4'));var uuid=require(_0x2c07('0x5'));var config=require('../../../config/environment');var logger=require(_0x2c07('0x6'))(_0x2c07('0x7'));var rpc={'openchannelQueueReport':require(_0x2c07('0x8'))};var rpc={'openchannelQueueReport':require('../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x2c07('0x9')),'chatQueueReport':require('../rpc/chatQueueReport'),'smsQueueReport':require(_0x2c07('0xa')),'faxQueueReport':require(_0x2c07('0xb'))};var RuleEngine=require(_0x2c07('0xc'));function getId(_0x2e76b6,_0x227d18,_0x332214){return util['format'](_0x2c07('0xd'),_0x2e76b6,_0x227d18||0x0,_0x332214||0x0);}function getIntervals(_0x31ffda,_0x572293){var _0x13408d=[];if(!_['isNil'](_0x572293['IntervalId'])&&!_[_0x2c07('0xe')](_0x31ffda[_0x572293[_0x2c07('0xf')]])&&!_[_0x2c07('0xe')](_0x31ffda[_0x572293[_0x2c07('0xf')]][_0x2c07('0x10')])){_0x13408d=_[_0x2c07('0x11')](_0x31ffda[_0x572293[_0x2c07('0xf')]][_0x2c07('0x10')],_0x2c07('0x12'));}else if(!_['isNil'](_0x572293[_0x2c07('0x12')])){_0x13408d=[_0x572293[_0x2c07('0x12')]];}return _0x13408d;}exports['listen']=function(_0x3f89f9){_0x3f89f9[_0x2c07('0x13')]={};return new BPromise(function(_0x5bc3f8,_0x57583f){var _0x4f0817={'Start':function(_0x358a0f){var _0x13f1d3=this;return new Promise(function(_0x2c7135,_0x1d09f4){if(_0x358a0f){try{var _0x5b8d46=[];var _0x4cd8b3=getId(_0x358a0f[_0x2c07('0x14')],_0x358a0f[_0x2c07('0x15')]?_0x358a0f[_0x2c07('0x15')]['id']:0x0,_0x358a0f[_0x2c07('0x16')]?_0x358a0f[_0x2c07('0x16')]['id']:0x0);if(_0x358a0f[_0x2c07('0x17')]&&_[_0x2c07('0x18')](_0x358a0f[_0x2c07('0x17')])&&_0x358a0f[_0x2c07('0x17')][_0x2c07('0x19')]){for(var _0x135177=0x0;_0x135177<_0x358a0f[_0x2c07('0x17')]['length'];_0x135177+=0x1){var _0x48b836=_0x358a0f[_0x2c07('0x17')][_0x135177];if(fs['existsSync'](path[_0x2c07('0x1a')](__dirname,'applications',_0x48b836[_0x2c07('0x1b')]+_0x2c07('0x1c')))){var _0x5c0be0=[];switch(_0x48b836[_0x2c07('0x1b')][_0x2c07('0x1d')]()){case _0x2c07('0x1e'):var _0x5a04dc=_0x48b836[_0x2c07('0x1f')][_0x2c07('0x20')](',');_0x5c0be0[_0x2c07('0x21')](_0x5a04dc[0x0]);_0x5c0be0[_0x2c07('0x21')](_0x5a04dc[_0x2c07('0x22')](0x1,_0x5a04dc[_0x2c07('0x19')])[_0x2c07('0x1a')](','));break;case _0x2c07('0x23'):var _0x5a04dc=_0x48b836[_0x2c07('0x1f')]['split'](',');_0x5c0be0[_0x2c07('0x21')](_0x5a04dc[0x0]);_0x5c0be0[_0x2c07('0x21')](_0x5a04dc[0x1]);_0x5c0be0[_0x2c07('0x21')](_0x5a04dc[_0x2c07('0x22')](0x2,_0x5a04dc['length'])[_0x2c07('0x1a')](','));break;case _0x2c07('0x15'):_0x5c0be0['push'](_0x48b836[_0x2c07('0x1f')]);break;case _0x2c07('0x24'):_0x5c0be0['push'](_0x48b836[_0x2c07('0x25')]);_0x5c0be0[_0x2c07('0x21')](_0x48b836[_0x2c07('0x1f')]);break;default:_0x5c0be0=_[_0x2c07('0xe')](_0x48b836[_0x2c07('0x1f')])?[]:_0x48b836[_0x2c07('0x1f')][_0x2c07('0x20')](',');}var _0x57df40={'id':util[_0x2c07('0x26')]('%s:%s:%s',_0x4cd8b3,_0x48b836['id'],_0x48b836[_0x2c07('0x1b')]),'condition':require('./interval')[_0x2c07('0x27')](_0x4cd8b3,getIntervals(_0x3f89f9['intervals'],_0x48b836),_0x3f89f9),'consequence':require(_0x2c07('0x28')+_0x48b836[_0x2c07('0x1b')])['consequence'](_0x4cd8b3,_0x5c0be0,_0x3f89f9,_0x358a0f),'p':_0x48b836[_0x2c07('0x29')]||0x0};logger[_0x2c07('0x2a')]('Push\x20new\x20rule',_0x57df40['id'],_0x2c07('0x2b'),getIntervals(_0x3f89f9[_0x2c07('0x2c')],_0x48b836)[_0x2c07('0x1a')]('\x20|\x20'));_0x5b8d46['push'](_0x57df40);}else{logger[_0x2c07('0x2d')](_0x2c07('0x2e'),path[_0x2c07('0x1a')](__dirname,_0x2c07('0x17'),_0x48b836['app']+_0x2c07('0x1c')));}}_0x3f89f9[_0x2c07('0x13')][_0x4cd8b3]=new RuleEngine(_0x5b8d46);_0x3f89f9[_0x2c07('0x13')][_0x4cd8b3][_0x2c07('0x2f')](_0x358a0f,function(_0x2a5cb9){logger[_0x2c07('0x2a')](_0x2c07('0x30'),JSON['stringify'](_0x2a5cb9[_0x2c07('0x31')]));if(_0x3f89f9['rules'][_0x4cd8b3]){delete _0x3f89f9[_0x2c07('0x13')][_0x4cd8b3];}});return _0x2c7135({'code':0xc8,'message':_0x358a0f});}else{logger[_0x2c07('0x2a')](_0x2c07('0x32'));return _0x2c7135({'code':0xc8,'message':_0x358a0f});}}catch(_0x183f90){logger['error'](JSON[_0x2c07('0x33')](_0x183f90));return _0x1d09f4(_0x13f1d3['error'](0x1f4,_0x183f90));}}return _0x1d09f4(_0x2c07('0x34'));});},'AcceptMessage':function(_0xf32ef2){var _0x8841c5=this;return new Promise(function(_0x4e1d57,_0x109aae){if(_0xf32ef2[_0x2c07('0x15')]&&_0xf32ef2[_0x2c07('0x15')]['id']){try{var _0x37021d=getId(_0xf32ef2['channel'],_0xf32ef2['message']?_0xf32ef2[_0x2c07('0x15')]['id']:0x0,_0xf32ef2[_0x2c07('0x16')]?_0xf32ef2[_0x2c07('0x16')]['id']:0x0);if(_0x3f89f9[_0x2c07('0x13')][_0x37021d]){delete _0x3f89f9[_0x2c07('0x13')][_0x37021d];if(rpc[_0xf32ef2[_0x2c07('0x14')]+_0x2c07('0x35')]){rpc[_0xf32ef2[_0x2c07('0x14')]+_0x2c07('0x35')][_0x2c07('0x36')](_0x37021d,{'UserId':_0xf32ef2[_0x2c07('0x15')][_0x2c07('0x37')]})[_0x2c07('0x38')](function(_0x5a786a){logger[_0x2c07('0x2d')](_0x2c07('0x39'));});}}return _0x4e1d57({'code':0xc8,'message':_0xf32ef2});}catch(_0x367c4f){logger[_0x2c07('0x2d')](JSON[_0x2c07('0x33')](_0x367c4f));return _0x109aae(_0x8841c5[_0x2c07('0x2d')](0x1f4,_0x367c4f));}}logger[_0x2c07('0x2d')]('message\x20is\x20empty');return _0x109aae(_0x8841c5[_0x2c07('0x2d')](0x1f4,'message\x20is\x20empty'));});},'RejectMessage':function(_0x4d87c1){var _0x1e3353=this;return new Promise(function(_0x4b7b91,_0x55074a){if(_0x4d87c1[_0x2c07('0x3a')]&&_0x4d87c1[_0x2c07('0x3a')]['id']){try{if(_0x3f89f9[_0x2c07('0x3b')][_0x4d87c1[_0x2c07('0x3a')]['id']]){_0x3f89f9['agents'][_0x4d87c1[_0x2c07('0x3a')]['id']][_0x2c07('0x3c')]=![];_0x3f89f9[_0x2c07('0x3b')][_0x4d87c1[_0x2c07('0x3a')]['id']][_0x2c07('0x3d')]=undefined;}return _0x4b7b91({'code':0xc8,'message':_0x4d87c1});}catch(_0x4ac998){logger['error'](JSON['stringify'](_0x4ac998));return _0x55074a(_0x1e3353[_0x2c07('0x2d')](0x1f4,_0x4ac998));}}logger['error'](_0x2c07('0x3e'));return _0x55074a(_0x1e3353['error'](0x1f4,'message\x20is\x20empty'));});},'AbandonInteraction':function(_0x5178a5){var _0x4f3e33=this;return new Promise(function(_0x58b0e9,_0xe53bc0){if(_0x5178a5[_0x2c07('0x14')]&&_0x5178a5[_0x2c07('0x16')]&&_0x5178a5[_0x2c07('0x16')]['id']){try{var _0x7a741c=getId(_0x5178a5[_0x2c07('0x14')],_0x5178a5[_0x2c07('0x15')]?_0x5178a5['message']['id']:0x0,_0x5178a5[_0x2c07('0x16')]?_0x5178a5['interaction']['id']:0x0);if(_0x3f89f9[_0x2c07('0x13')][_0x7a741c]){delete _0x3f89f9[_0x2c07('0x13')][_0x7a741c];}return _0x58b0e9({'code':0xc8,'message':_0x5178a5});}catch(_0x3e6560){logger[_0x2c07('0x2d')](JSON['stringify'](_0x3e6560));return _0xe53bc0(_0x4f3e33[_0x2c07('0x2d')](0x1f4,_0x3e6560));}}logger[_0x2c07('0x2d')](_0x2c07('0x3e'));return _0xe53bc0(_0x4f3e33[_0x2c07('0x2d')](0x1f4,_0x2c07('0x3e')));});},'AgentCapacity':function(_0x1b4401){var _0x54b16a=this;return new Promise(function(_0x4cc669,_0x5d53b5){if(_0x3f89f9[_0x2c07('0x3b')]['hasOwnProperty'](_0x1b4401['id'])){for(var _0x493f35 in _0x1b4401['capacity']){if(_0x1b4401[_0x2c07('0x3f')][_0x2c07('0x40')](_0x493f35)){if(_0x3f89f9[_0x2c07('0x3b')][_0x1b4401['id']][_0x2c07('0x40')](_0x493f35+_0x2c07('0x41'))){_0x3f89f9[_0x2c07('0x3b')][_0x1b4401['id']][_0x493f35+_0x2c07('0x41')]=parseInt(_0x1b4401[_0x2c07('0x3f')][_0x493f35],0xa);_0x3f89f9[_0x2c07('0x3b')][_0x1b4401['id']]['updateRealtime']();}}}return _0x4cc669({'code':0xc8,'message':_0x3f89f9[_0x2c07('0x3b')][_0x1b4401['id']]});}else{return _0x5d53b5(_0x54b16a[_0x2c07('0x2d')](0x1f4,_0x2c07('0x42')));}});},'Agents':function(_0x189ba0){return new Promise(function(_0x1373fb,_0x3f36be){var _0x3ee276=_[_0x2c07('0x43')](_0x3f89f9['agents']);_0x1373fb({'count':_0x3ee276[_0x2c07('0x19')],'rows':_0x3ee276});});},'ChatQueues':function(_0x1d8cbd){return new Promise(function(_0x49b223,_0x5bd051){var _0x2af067=[];for(var _0x11cdcc in _0x3f89f9[_0x2c07('0x44')]){if(_0x3f89f9[_0x2c07('0x44')]['hasOwnProperty'](_0x11cdcc)){var _0x40d535=_0x3f89f9[_0x2c07('0x44')][_0x11cdcc];var _0x178830={'id':_0x40d535['id'],'available':_0x40d535['available'],'loggedIn':_0x40d535[_0x2c07('0x45')],'name':_0x40d535['name'],'paused':_0x40d535[_0x2c07('0x46')],'waiting':_0x40d535[_0x2c07('0x47')]};_0x2af067['push'](_0x178830);}}_0x49b223({'count':_0x2af067['length'],'rows':_0x2af067});});},'MailQueues':function(_0x4e11dc){return new Promise(function(_0x236b56,_0x2b34d7){var _0x45b6f9=[];for(var _0xe1953c in _0x3f89f9[_0x2c07('0x48')]){if(_0x3f89f9[_0x2c07('0x48')][_0x2c07('0x40')](_0xe1953c)){var _0x3b6db4=_0x3f89f9[_0x2c07('0x48')][_0xe1953c];var _0x1af3da={'id':_0x3b6db4['id'],'available':_0x3b6db4[_0x2c07('0x49')],'loggedIn':_0x3b6db4[_0x2c07('0x45')],'name':_0x3b6db4[_0x2c07('0x4a')],'paused':_0x3b6db4[_0x2c07('0x46')],'waiting':_0x3b6db4[_0x2c07('0x47')]};_0x45b6f9[_0x2c07('0x21')](_0x1af3da);}}_0x236b56({'count':_0x45b6f9[_0x2c07('0x19')],'rows':_0x45b6f9});});},'OpenchannelQueues':function(_0x800f3c){return new Promise(function(_0x32a61a,_0x307c0b){var _0x29e832=[];for(var _0x2877e1 in _0x3f89f9['openchannelQueues']){if(_0x3f89f9[_0x2c07('0x4b')]['hasOwnProperty'](_0x2877e1)){var _0x2051e8=_0x3f89f9[_0x2c07('0x4b')][_0x2877e1];var _0xd7563={'id':_0x2051e8['id'],'available':_0x2051e8['available'],'loggedIn':_0x2051e8[_0x2c07('0x45')],'name':_0x2051e8[_0x2c07('0x4a')],'paused':_0x2051e8[_0x2c07('0x46')],'waiting':_0x2051e8['waiting']};_0x29e832[_0x2c07('0x21')](_0xd7563);}}_0x32a61a({'count':_0x29e832[_0x2c07('0x19')],'rows':_0x29e832});});},'SmsQueues':function(_0x91aca2){return new Promise(function(_0x5a21fb,_0x57962c){var _0x12b370=[];for(var _0x25f756 in _0x3f89f9['smsQueues']){if(_0x3f89f9[_0x2c07('0x4c')][_0x2c07('0x40')](_0x25f756)){var _0x29ba86=_0x3f89f9[_0x2c07('0x4c')][_0x25f756];var _0x36df2a={'id':_0x29ba86['id'],'available':_0x29ba86[_0x2c07('0x49')],'loggedIn':_0x29ba86[_0x2c07('0x45')],'name':_0x29ba86[_0x2c07('0x4a')],'paused':_0x29ba86[_0x2c07('0x46')],'waiting':_0x29ba86[_0x2c07('0x47')]};_0x12b370[_0x2c07('0x21')](_0x36df2a);}}_0x5a21fb({'count':_0x12b370['length'],'rows':_0x12b370});});},'FaxQueues':function(_0x5a95a4){return new Promise(function(_0x582fbb,_0x599c50){var _0x48eddd=[];for(var _0x38e06b in _0x3f89f9[_0x2c07('0x4d')]){if(_0x3f89f9[_0x2c07('0x4d')][_0x2c07('0x40')](_0x38e06b)){var _0x508849=_0x3f89f9[_0x2c07('0x4d')][_0x38e06b];var _0x127e75={'id':_0x508849['id'],'available':_0x508849[_0x2c07('0x49')],'loggedIn':_0x508849[_0x2c07('0x45')],'name':_0x508849[_0x2c07('0x4a')],'paused':_0x508849[_0x2c07('0x46')],'waiting':_0x508849[_0x2c07('0x47')]};_0x48eddd[_0x2c07('0x21')](_0x127e75);}}_0x582fbb({'count':_0x48eddd[_0x2c07('0x19')],'rows':_0x48eddd});});},'ChatQueuesWaitingInteractions':function(_0x25cdf8){return new Promise(function(_0x368ac4,_0xcfd6ad){var _0x4993da=_[_0x2c07('0x43')](_0x3f89f9['chatQueuesWaitingInteractions']);_0x368ac4({'count':_0x4993da[_0x2c07('0x19')],'rows':_0x4993da});});},'MailQueuesWaitingInteractions':function(_0x1bc839){return new Promise(function(_0x4d2658,_0x3107c7){var _0x1d4d17=_[_0x2c07('0x43')](_0x3f89f9[_0x2c07('0x4e')]);_0x4d2658({'count':_0x1d4d17[_0x2c07('0x19')],'rows':_0x1d4d17});});},'OpenchannelQueuesWaitingInteractions':function(_0x46d063){return new Promise(function(_0x2487cb,_0x493cb3){var _0x14938e=_[_0x2c07('0x43')](_0x3f89f9[_0x2c07('0x4f')]);_0x2487cb({'count':_0x14938e[_0x2c07('0x19')],'rows':_0x14938e});});},'SmsQueuesWaitingInteractions':function(_0x4e0fe6){return new Promise(function(_0x4daa65,_0x460a24){var _0x556e36=_[_0x2c07('0x43')](_0x3f89f9[_0x2c07('0x50')]);_0x4daa65({'count':_0x556e36[_0x2c07('0x19')],'rows':_0x556e36});});},'FaxQueuesWaitingInteractions':function(_0x12b7a1){return new Promise(function(_0x1a273c,_0xa4f69a){var _0x51a0d8=_[_0x2c07('0x43')](_0x3f89f9[_0x2c07('0x51')]);_0x1a273c({'count':_0x51a0d8[_0x2c07('0x19')],'rows':_0x51a0d8});});}};var _0xc1997a=jayson['server'](_0x4f0817)[_0x2c07('0x52')]();_0xc1997a['on'](_0x2c07('0x2d'),function(_0x2cc7dc){logger[_0x2c07('0x2d')](JSON[_0x2c07('0x33')](_0x2cc7dc));return _0x57583f(_0x2cc7dc);});_0xc1997a[_0x2c07('0x53')](0x232c,_0x2c07('0x54'),function(){console['log'](_0x2c07('0x55'),0x232c);return _0x5bc3f8(_0x2c07('0x56')+0x232c);});});};
\ No newline at end of file
index f98a0b7..6ffac11 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6636=['true','all','some','info','[%s][INTERVAL]\x20%s\x20%s','\x20|\x20','log','join','stringify','util','bluebird','jayson/promise','lodash','../../../config/logger','routing','client','http','request','then','error','message','result','catch','condition','rules','[%s][INTERVAL]\x20ROUTING\x20STOPPED','stop','length','push','Command','iftime\x20%s','indexOf'];(function(_0x3dcd77,_0x36768e){var _0x1f5615=function(_0x1b1379){while(--_0x1b1379){_0x3dcd77['push'](_0x3dcd77['shift']());}};_0x1f5615(++_0x36768e);}(_0x6636,0xe9));var _0x6663=function(_0x16a58d,_0x21fd0d){_0x16a58d=_0x16a58d-0x0;var _0x26e192=_0x6636[_0x16a58d];return _0x26e192;};'use strict';var util=require(_0x6663('0x0'));var BPromise=require(_0x6663('0x1'));var jayson=require(_0x6663('0x2'));var _=require(_0x6663('0x3'));var logger=require(_0x6663('0x4'))(_0x6663('0x5'));var client=jayson[_0x6663('0x6')][_0x6663('0x7')]({'port':0x232a});function request(_0x37f75e,_0x20498f){return new BPromise(function(_0x413433,_0x48719f){return client[_0x6663('0x8')](_0x37f75e,_0x20498f)[_0x6663('0x9')](function(_0x4eaec4){if(_0x4eaec4[_0x6663('0xa')]){return _0x48719f(_0x4eaec4[_0x6663('0xa')][_0x6663('0xb')]);}else{return _0x413433(_0x4eaec4[_0x6663('0xc')]);}})[_0x6663('0xd')](function(_0x1a1d47){return _0x48719f(_0x1a1d47);});});}exports[_0x6663('0xe')]=function(_0x3dcef5,_0x2a982f,_0x186dab){return function(_0x525134){if(_0x186dab['rules']&&!_0x186dab[_0x6663('0xf')][_0x3dcef5]){logger['info'](_0x6663('0x10'),_0x3dcef5);return _0x525134[_0x6663('0x11')]();}var _0x2412d1=[];for(var _0x419af1=0x0;_0x419af1<_0x2a982f[_0x6663('0x12')];_0x419af1+=0x1){_0x2412d1[_0x6663('0x13')](request(_0x6663('0x14'),{'command':util['format'](_0x6663('0x15'),_0x2a982f[_0x419af1])})[_0x6663('0x9')](function(_0xa4573a){return _0xa4573a&&_0xa4573a[_0x6663('0xb')]&&_0xa4573a['message'][_0x6663('0x16')](_0x6663('0x17'))>=0x0?!![]:![];})['catch'](function(_0x5d3350){logger[_0x6663('0xa')]('[%s][INTERVAL]\x20%s',_0x3dcef5,_0x2a982f[_0x419af1]);}));}BPromise[_0x6663('0x18')](_0x2412d1)['then'](function(_0x34fb58){var _0x4df073=_[_0x6663('0x19')](_0x34fb58);logger[_0x6663('0x1a')](_0x6663('0x1b'),_0x3dcef5,_0x2a982f['join'](_0x6663('0x1c')),_0x4df073);_0x525134['when'](_0x4df073);})[_0x6663('0xd')](function(_0x26fb9a){console[_0x6663('0x1d')](_0x26fb9a);logger[_0x6663('0xa')](_0x6663('0x1b'),_0x3dcef5,_0x2a982f[_0x6663('0x1e')](_0x6663('0x1c')),JSON[_0x6663('0x1f')](_0x26fb9a));_0x525134[_0x6663('0x11')]();});};};
\ No newline at end of file
+var _0x2c2f=['log','\x20|\x20','stop','bluebird','jayson/promise','lodash','../../../config/logger','routing','http','request','then','error','message','result','catch','condition','rules','[%s][INTERVAL]\x20ROUTING\x20STOPPED','length','push','Command','indexOf','true','[%s][INTERVAL]\x20%s','all','some','info','join','when'];(function(_0x221895,_0x2355e4){var _0x2e09a0=function(_0x4c11ff){while(--_0x4c11ff){_0x221895['push'](_0x221895['shift']());}};_0x2e09a0(++_0x2355e4);}(_0x2c2f,0x77));var _0xf2c2=function(_0x301d88,_0x36caa3){_0x301d88=_0x301d88-0x0;var _0x5a98e4=_0x2c2f[_0x301d88];return _0x5a98e4;};'use strict';var util=require('util');var BPromise=require(_0xf2c2('0x0'));var jayson=require(_0xf2c2('0x1'));var _=require(_0xf2c2('0x2'));var logger=require(_0xf2c2('0x3'))(_0xf2c2('0x4'));var client=jayson['client'][_0xf2c2('0x5')]({'port':0x232a});function request(_0x5dff2c,_0x556458){return new BPromise(function(_0x1493cc,_0x4b792d){return client[_0xf2c2('0x6')](_0x5dff2c,_0x556458)[_0xf2c2('0x7')](function(_0x459989){if(_0x459989[_0xf2c2('0x8')]){return _0x4b792d(_0x459989['error'][_0xf2c2('0x9')]);}else{return _0x1493cc(_0x459989[_0xf2c2('0xa')]);}})[_0xf2c2('0xb')](function(_0x4c42d0){return _0x4b792d(_0x4c42d0);});});}exports[_0xf2c2('0xc')]=function(_0x3ada52,_0x63166c,_0x3df7a1){return function(_0x14ccf3){if(_0x3df7a1[_0xf2c2('0xd')]&&!_0x3df7a1['rules'][_0x3ada52]){logger['info'](_0xf2c2('0xe'),_0x3ada52);return _0x14ccf3['stop']();}var _0x3cbd62=[];for(var _0x34382c=0x0;_0x34382c<_0x63166c[_0xf2c2('0xf')];_0x34382c+=0x1){_0x3cbd62[_0xf2c2('0x10')](request(_0xf2c2('0x11'),{'command':util['format']('iftime\x20%s',_0x63166c[_0x34382c])})[_0xf2c2('0x7')](function(_0xef9ae3){return _0xef9ae3&&_0xef9ae3[_0xf2c2('0x9')]&&_0xef9ae3[_0xf2c2('0x9')][_0xf2c2('0x12')](_0xf2c2('0x13'))>=0x0?!![]:![];})[_0xf2c2('0xb')](function(_0xe35ac2){logger[_0xf2c2('0x8')](_0xf2c2('0x14'),_0x3ada52,_0x63166c[_0x34382c]);}));}BPromise[_0xf2c2('0x15')](_0x3cbd62)[_0xf2c2('0x7')](function(_0xc55b52){var _0x442ec5=_[_0xf2c2('0x16')](_0xc55b52);logger[_0xf2c2('0x17')]('[%s][INTERVAL]\x20%s\x20%s',_0x3ada52,_0x63166c[_0xf2c2('0x18')]('\x20|\x20'),_0x442ec5);_0x14ccf3[_0xf2c2('0x19')](_0x442ec5);})[_0xf2c2('0xb')](function(_0x25195f){console[_0xf2c2('0x1a')](_0x25195f);logger['error']('[%s][INTERVAL]\x20%s\x20%s',_0x3ada52,_0x63166c[_0xf2c2('0x18')](_0xf2c2('0x1b')),JSON['stringify'](_0x25195f));_0x14ccf3[_0xf2c2('0x1c')]();});};};
\ No newline at end of file